@tencent-ai/cloud-agent-sdk 0.1.3 → 0.1.5

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":["exports","exports","sdk_1","sdk_1","exports","e2b_1","exports","exports","exports"],"sources":["../../agent-provider/node_modules/zod/v3/helpers/util.cjs","../../agent-provider/node_modules/zod/v3/ZodError.cjs","../../agent-provider/node_modules/zod/v3/locales/en.cjs","../../agent-provider/node_modules/zod/v3/errors.cjs","../../agent-provider/node_modules/zod/v3/helpers/parseUtil.cjs","../../agent-provider/node_modules/zod/v3/helpers/typeAliases.cjs","../../agent-provider/node_modules/zod/v3/helpers/errorUtil.cjs","../../agent-provider/node_modules/zod/v3/types.cjs","../../agent-provider/node_modules/zod/v3/external.cjs","../../agent-provider/node_modules/zod/index.cjs","../../agent-provider/lib/common/_legacy/tool-schemas.js","../../agent-provider/lib/common/_legacy/MockAgentProvider.js","../../agent-provider/lib/common/_legacy/acp-client-protocol.js","../../agent-provider/lib/common/_legacy/json-rpc.js","../../agent-provider/lib/common/_legacy/AcpJsonRpcClient.js","../../agent-provider/lib/common/_legacy/IPCAgentProvider.js","../../agent-client-protocol/lib/common/types.js","../../agent-client-protocol/lib/common/sdk.js","../../agent-client-protocol/lib/common/transport/streamable-http.js","../../agent-client-protocol/lib/common/client/constants.js","../../agent-client-protocol/lib/common/client/errors.js","../../agent-client-protocol/lib/common/client/events.js","../../agent-client-protocol/lib/common/client/artifacts.js","../../agent-client-protocol/lib/common/client/permissions.js","../../agent-client-protocol/lib/common/client/questions.js","../../agent-client-protocol/lib/common/client/extensions.js","../../agent-client-protocol/lib/common/client/client.js","../../agent-client-protocol/lib/common/client/index.js","../../agent-client-protocol/lib/common/index.js","../../agent-provider/lib/common/providers/cloud-agent-provider/cloud-connection.js","../../agent-provider/lib/common/providers/cloud-agent-provider/e2b-filesystem.js","../../agent-provider/lib/common/providers/cloud-agent-provider/cloud-provider.js","../../agent-provider/lib/common/providers/cloud-agent-provider/index.js","../../agent-provider/lib/common/providers/local-agent-provider/acp/json-rpc.js","../../agent-provider/lib/common/providers/local-agent-provider/acp/types.js","../../agent-provider/lib/common/providers/local-agent-provider/acp/acp-json-rpc-client.js","../../agent-provider/lib/common/providers/local-agent-provider/acp/index.js","../../agent-provider/lib/common/providers/local-agent-provider/local-connection.js","../../agent-provider/lib/common/providers/local-agent-provider/local-filesystem.js","../../agent-provider/lib/common/providers/local-agent-provider/local-provider.js","../../agent-provider/lib/common/providers/local-agent-provider/index.js","../../agent-provider/lib/common/providers/index.js","../../agent-provider/lib/common/client/session.js","../../agent-provider/lib/common/client/session-manager.js","../../agent-provider/lib/common/client/client.js","../../agent-provider/lib/common/_legacy/mock-agent-client.js","../../agent-provider/lib/common/client/types.js","../../agent-provider/lib/common/client/index.js","../../agent-provider/lib/backend/types.js","../../agent-provider/lib/backend/agent-api.js","../../agent-provider/lib/backend/backend-provider.js","../../agent-provider/lib/backend/ipc-backend-provider.js","../../agent-provider/lib/backend/index.js","../../agent-provider/lib/common/index.js","../src/index.ts"],"sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getParsedType = exports.ZodParsedType = exports.objectUtil = exports.util = void 0;\nvar util;\n(function (util) {\n util.assertEqual = (_) => { };\n function assertIs(_arg) { }\n util.assertIs = assertIs;\n function assertNever(_x) {\n throw new Error();\n }\n util.assertNever = assertNever;\n util.arrayToEnum = (items) => {\n const obj = {};\n for (const item of items) {\n obj[item] = item;\n }\n return obj;\n };\n util.getValidEnumValues = (obj) => {\n const validKeys = util.objectKeys(obj).filter((k) => typeof obj[obj[k]] !== \"number\");\n const filtered = {};\n for (const k of validKeys) {\n filtered[k] = obj[k];\n }\n return util.objectValues(filtered);\n };\n util.objectValues = (obj) => {\n return util.objectKeys(obj).map(function (e) {\n return obj[e];\n });\n };\n util.objectKeys = typeof Object.keys === \"function\" // eslint-disable-line ban/ban\n ? (obj) => Object.keys(obj) // eslint-disable-line ban/ban\n : (object) => {\n const keys = [];\n for (const key in object) {\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n keys.push(key);\n }\n }\n return keys;\n };\n util.find = (arr, checker) => {\n for (const item of arr) {\n if (checker(item))\n return item;\n }\n return undefined;\n };\n util.isInteger = typeof Number.isInteger === \"function\"\n ? (val) => Number.isInteger(val) // eslint-disable-line ban/ban\n : (val) => typeof val === \"number\" && Number.isFinite(val) && Math.floor(val) === val;\n function joinValues(array, separator = \" | \") {\n return array.map((val) => (typeof val === \"string\" ? `'${val}'` : val)).join(separator);\n }\n util.joinValues = joinValues;\n util.jsonStringifyReplacer = (_, value) => {\n if (typeof value === \"bigint\") {\n return value.toString();\n }\n return value;\n };\n})(util || (exports.util = util = {}));\nvar objectUtil;\n(function (objectUtil) {\n objectUtil.mergeShapes = (first, second) => {\n return {\n ...first,\n ...second, // second overwrites first\n };\n };\n})(objectUtil || (exports.objectUtil = objectUtil = {}));\nexports.ZodParsedType = util.arrayToEnum([\n \"string\",\n \"nan\",\n \"number\",\n \"integer\",\n \"float\",\n \"boolean\",\n \"date\",\n \"bigint\",\n \"symbol\",\n \"function\",\n \"undefined\",\n \"null\",\n \"array\",\n \"object\",\n \"unknown\",\n \"promise\",\n \"void\",\n \"never\",\n \"map\",\n \"set\",\n]);\nconst getParsedType = (data) => {\n const t = typeof data;\n switch (t) {\n case \"undefined\":\n return exports.ZodParsedType.undefined;\n case \"string\":\n return exports.ZodParsedType.string;\n case \"number\":\n return Number.isNaN(data) ? exports.ZodParsedType.nan : exports.ZodParsedType.number;\n case \"boolean\":\n return exports.ZodParsedType.boolean;\n case \"function\":\n return exports.ZodParsedType.function;\n case \"bigint\":\n return exports.ZodParsedType.bigint;\n case \"symbol\":\n return exports.ZodParsedType.symbol;\n case \"object\":\n if (Array.isArray(data)) {\n return exports.ZodParsedType.array;\n }\n if (data === null) {\n return exports.ZodParsedType.null;\n }\n if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n return exports.ZodParsedType.promise;\n }\n if (typeof Map !== \"undefined\" && data instanceof Map) {\n return exports.ZodParsedType.map;\n }\n if (typeof Set !== \"undefined\" && data instanceof Set) {\n return exports.ZodParsedType.set;\n }\n if (typeof Date !== \"undefined\" && data instanceof Date) {\n return exports.ZodParsedType.date;\n }\n return exports.ZodParsedType.object;\n default:\n return exports.ZodParsedType.unknown;\n }\n};\nexports.getParsedType = getParsedType;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ZodError = exports.quotelessJson = exports.ZodIssueCode = void 0;\nconst util_js_1 = require(\"./helpers/util.cjs\");\nexports.ZodIssueCode = util_js_1.util.arrayToEnum([\n \"invalid_type\",\n \"invalid_literal\",\n \"custom\",\n \"invalid_union\",\n \"invalid_union_discriminator\",\n \"invalid_enum_value\",\n \"unrecognized_keys\",\n \"invalid_arguments\",\n \"invalid_return_type\",\n \"invalid_date\",\n \"invalid_string\",\n \"too_small\",\n \"too_big\",\n \"invalid_intersection_types\",\n \"not_multiple_of\",\n \"not_finite\",\n]);\nconst quotelessJson = (obj) => {\n const json = JSON.stringify(obj, null, 2);\n return json.replace(/\"([^\"]+)\":/g, \"$1:\");\n};\nexports.quotelessJson = quotelessJson;\nclass ZodError extends Error {\n get errors() {\n return this.issues;\n }\n constructor(issues) {\n super();\n this.issues = [];\n this.addIssue = (sub) => {\n this.issues = [...this.issues, sub];\n };\n this.addIssues = (subs = []) => {\n this.issues = [...this.issues, ...subs];\n };\n const actualProto = new.target.prototype;\n if (Object.setPrototypeOf) {\n // eslint-disable-next-line ban/ban\n Object.setPrototypeOf(this, actualProto);\n }\n else {\n this.__proto__ = actualProto;\n }\n this.name = \"ZodError\";\n this.issues = issues;\n }\n format(_mapper) {\n const mapper = _mapper ||\n function (issue) {\n return issue.message;\n };\n const fieldErrors = { _errors: [] };\n const processError = (error) => {\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\") {\n issue.unionErrors.map(processError);\n }\n else if (issue.code === \"invalid_return_type\") {\n processError(issue.returnTypeError);\n }\n else if (issue.code === \"invalid_arguments\") {\n processError(issue.argumentsError);\n }\n else if (issue.path.length === 0) {\n fieldErrors._errors.push(mapper(issue));\n }\n else {\n let curr = fieldErrors;\n let i = 0;\n while (i < issue.path.length) {\n const el = issue.path[i];\n const terminal = i === issue.path.length - 1;\n if (!terminal) {\n curr[el] = curr[el] || { _errors: [] };\n // if (typeof el === \"string\") {\n // curr[el] = curr[el] || { _errors: [] };\n // } else if (typeof el === \"number\") {\n // const errorArray: any = [];\n // errorArray._errors = [];\n // curr[el] = curr[el] || errorArray;\n // }\n }\n else {\n curr[el] = curr[el] || { _errors: [] };\n curr[el]._errors.push(mapper(issue));\n }\n curr = curr[el];\n i++;\n }\n }\n }\n };\n processError(this);\n return fieldErrors;\n }\n static assert(value) {\n if (!(value instanceof ZodError)) {\n throw new Error(`Not a ZodError: ${value}`);\n }\n }\n toString() {\n return this.message;\n }\n get message() {\n return JSON.stringify(this.issues, util_js_1.util.jsonStringifyReplacer, 2);\n }\n get isEmpty() {\n return this.issues.length === 0;\n }\n flatten(mapper = (issue) => issue.message) {\n const fieldErrors = {};\n const formErrors = [];\n for (const sub of this.issues) {\n if (sub.path.length > 0) {\n const firstEl = sub.path[0];\n fieldErrors[firstEl] = fieldErrors[firstEl] || [];\n fieldErrors[firstEl].push(mapper(sub));\n }\n else {\n formErrors.push(mapper(sub));\n }\n }\n return { formErrors, fieldErrors };\n }\n get formErrors() {\n return this.flatten();\n }\n}\nexports.ZodError = ZodError;\nZodError.create = (issues) => {\n const error = new ZodError(issues);\n return error;\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst ZodError_js_1 = require(\"../ZodError.cjs\");\nconst util_js_1 = require(\"../helpers/util.cjs\");\nconst errorMap = (issue, _ctx) => {\n let message;\n switch (issue.code) {\n case ZodError_js_1.ZodIssueCode.invalid_type:\n if (issue.received === util_js_1.ZodParsedType.undefined) {\n message = \"Required\";\n }\n else {\n message = `Expected ${issue.expected}, received ${issue.received}`;\n }\n break;\n case ZodError_js_1.ZodIssueCode.invalid_literal:\n message = `Invalid literal value, expected ${JSON.stringify(issue.expected, util_js_1.util.jsonStringifyReplacer)}`;\n break;\n case ZodError_js_1.ZodIssueCode.unrecognized_keys:\n message = `Unrecognized key(s) in object: ${util_js_1.util.joinValues(issue.keys, \", \")}`;\n break;\n case ZodError_js_1.ZodIssueCode.invalid_union:\n message = `Invalid input`;\n break;\n case ZodError_js_1.ZodIssueCode.invalid_union_discriminator:\n message = `Invalid discriminator value. Expected ${util_js_1.util.joinValues(issue.options)}`;\n break;\n case ZodError_js_1.ZodIssueCode.invalid_enum_value:\n message = `Invalid enum value. Expected ${util_js_1.util.joinValues(issue.options)}, received '${issue.received}'`;\n break;\n case ZodError_js_1.ZodIssueCode.invalid_arguments:\n message = `Invalid function arguments`;\n break;\n case ZodError_js_1.ZodIssueCode.invalid_return_type:\n message = `Invalid function return type`;\n break;\n case ZodError_js_1.ZodIssueCode.invalid_date:\n message = `Invalid date`;\n break;\n case ZodError_js_1.ZodIssueCode.invalid_string:\n if (typeof issue.validation === \"object\") {\n if (\"includes\" in issue.validation) {\n message = `Invalid input: must include \"${issue.validation.includes}\"`;\n if (typeof issue.validation.position === \"number\") {\n message = `${message} at one or more positions greater than or equal to ${issue.validation.position}`;\n }\n }\n else if (\"startsWith\" in issue.validation) {\n message = `Invalid input: must start with \"${issue.validation.startsWith}\"`;\n }\n else if (\"endsWith\" in issue.validation) {\n message = `Invalid input: must end with \"${issue.validation.endsWith}\"`;\n }\n else {\n util_js_1.util.assertNever(issue.validation);\n }\n }\n else if (issue.validation !== \"regex\") {\n message = `Invalid ${issue.validation}`;\n }\n else {\n message = \"Invalid\";\n }\n break;\n case ZodError_js_1.ZodIssueCode.too_small:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `more than`} ${issue.minimum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `over`} ${issue.minimum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n else if (issue.type === \"bigint\")\n message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${new Date(Number(issue.minimum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodError_js_1.ZodIssueCode.too_big:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `less than`} ${issue.maximum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `under`} ${issue.maximum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n else if (issue.type === \"bigint\")\n message = `BigInt must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact ? `exactly` : issue.inclusive ? `smaller than or equal to` : `smaller than`} ${new Date(Number(issue.maximum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodError_js_1.ZodIssueCode.custom:\n message = `Invalid input`;\n break;\n case ZodError_js_1.ZodIssueCode.invalid_intersection_types:\n message = `Intersection results could not be merged`;\n break;\n case ZodError_js_1.ZodIssueCode.not_multiple_of:\n message = `Number must be a multiple of ${issue.multipleOf}`;\n break;\n case ZodError_js_1.ZodIssueCode.not_finite:\n message = \"Number must be finite\";\n break;\n default:\n message = _ctx.defaultError;\n util_js_1.util.assertNever(issue);\n }\n return { message };\n};\nexports.default = errorMap;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.defaultErrorMap = void 0;\nexports.setErrorMap = setErrorMap;\nexports.getErrorMap = getErrorMap;\nconst en_js_1 = __importDefault(require(\"./locales/en.cjs\"));\nexports.defaultErrorMap = en_js_1.default;\nlet overrideErrorMap = en_js_1.default;\nfunction setErrorMap(map) {\n overrideErrorMap = map;\n}\nfunction getErrorMap() {\n return overrideErrorMap;\n}\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isAsync = exports.isValid = exports.isDirty = exports.isAborted = exports.OK = exports.DIRTY = exports.INVALID = exports.ParseStatus = exports.EMPTY_PATH = exports.makeIssue = void 0;\nexports.addIssueToContext = addIssueToContext;\nconst errors_js_1 = require(\"../errors.cjs\");\nconst en_js_1 = __importDefault(require(\"../locales/en.cjs\"));\nconst makeIssue = (params) => {\n const { data, path, errorMaps, issueData } = params;\n const fullPath = [...path, ...(issueData.path || [])];\n const fullIssue = {\n ...issueData,\n path: fullPath,\n };\n if (issueData.message !== undefined) {\n return {\n ...issueData,\n path: fullPath,\n message: issueData.message,\n };\n }\n let errorMessage = \"\";\n const maps = errorMaps\n .filter((m) => !!m)\n .slice()\n .reverse();\n for (const map of maps) {\n errorMessage = map(fullIssue, { data, defaultError: errorMessage }).message;\n }\n return {\n ...issueData,\n path: fullPath,\n message: errorMessage,\n };\n};\nexports.makeIssue = makeIssue;\nexports.EMPTY_PATH = [];\nfunction addIssueToContext(ctx, issueData) {\n const overrideMap = (0, errors_js_1.getErrorMap)();\n const issue = (0, exports.makeIssue)({\n issueData: issueData,\n data: ctx.data,\n path: ctx.path,\n errorMaps: [\n ctx.common.contextualErrorMap, // contextual error map is first priority\n ctx.schemaErrorMap, // then schema-bound map if available\n overrideMap, // then global override map\n overrideMap === en_js_1.default ? undefined : en_js_1.default, // then global default map\n ].filter((x) => !!x),\n });\n ctx.common.issues.push(issue);\n}\nclass ParseStatus {\n constructor() {\n this.value = \"valid\";\n }\n dirty() {\n if (this.value === \"valid\")\n this.value = \"dirty\";\n }\n abort() {\n if (this.value !== \"aborted\")\n this.value = \"aborted\";\n }\n static mergeArray(status, results) {\n const arrayValue = [];\n for (const s of results) {\n if (s.status === \"aborted\")\n return exports.INVALID;\n if (s.status === \"dirty\")\n status.dirty();\n arrayValue.push(s.value);\n }\n return { status: status.value, value: arrayValue };\n }\n static async mergeObjectAsync(status, pairs) {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value,\n });\n }\n return ParseStatus.mergeObjectSync(status, syncPairs);\n }\n static mergeObjectSync(status, pairs) {\n const finalObject = {};\n for (const pair of pairs) {\n const { key, value } = pair;\n if (key.status === \"aborted\")\n return exports.INVALID;\n if (value.status === \"aborted\")\n return exports.INVALID;\n if (key.status === \"dirty\")\n status.dirty();\n if (value.status === \"dirty\")\n status.dirty();\n if (key.value !== \"__proto__\" && (typeof value.value !== \"undefined\" || pair.alwaysSet)) {\n finalObject[key.value] = value.value;\n }\n }\n return { status: status.value, value: finalObject };\n }\n}\nexports.ParseStatus = ParseStatus;\nexports.INVALID = Object.freeze({\n status: \"aborted\",\n});\nconst DIRTY = (value) => ({ status: \"dirty\", value });\nexports.DIRTY = DIRTY;\nconst OK = (value) => ({ status: \"valid\", value });\nexports.OK = OK;\nconst isAborted = (x) => x.status === \"aborted\";\nexports.isAborted = isAborted;\nconst isDirty = (x) => x.status === \"dirty\";\nexports.isDirty = isDirty;\nconst isValid = (x) => x.status === \"valid\";\nexports.isValid = isValid;\nconst isAsync = (x) => typeof Promise !== \"undefined\" && x instanceof Promise;\nexports.isAsync = isAsync;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.errorUtil = void 0;\nvar errorUtil;\n(function (errorUtil) {\n errorUtil.errToObj = (message) => typeof message === \"string\" ? { message } : message || {};\n // biome-ignore lint:\n errorUtil.toString = (message) => typeof message === \"string\" ? message : message?.message;\n})(errorUtil || (exports.errorUtil = errorUtil = {}));\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.discriminatedUnion = exports.date = exports.boolean = exports.bigint = exports.array = exports.any = exports.coerce = exports.ZodFirstPartyTypeKind = exports.late = exports.ZodSchema = exports.Schema = exports.ZodReadonly = exports.ZodPipeline = exports.ZodBranded = exports.BRAND = exports.ZodNaN = exports.ZodCatch = exports.ZodDefault = exports.ZodNullable = exports.ZodOptional = exports.ZodTransformer = exports.ZodEffects = exports.ZodPromise = exports.ZodNativeEnum = exports.ZodEnum = exports.ZodLiteral = exports.ZodLazy = exports.ZodFunction = exports.ZodSet = exports.ZodMap = exports.ZodRecord = exports.ZodTuple = exports.ZodIntersection = exports.ZodDiscriminatedUnion = exports.ZodUnion = exports.ZodObject = exports.ZodArray = exports.ZodVoid = exports.ZodNever = exports.ZodUnknown = exports.ZodAny = exports.ZodNull = exports.ZodUndefined = exports.ZodSymbol = exports.ZodDate = exports.ZodBoolean = exports.ZodBigInt = exports.ZodNumber = exports.ZodString = exports.ZodType = void 0;\nexports.NEVER = exports.void = exports.unknown = exports.union = exports.undefined = exports.tuple = exports.transformer = exports.symbol = exports.string = exports.strictObject = exports.set = exports.record = exports.promise = exports.preprocess = exports.pipeline = exports.ostring = exports.optional = exports.onumber = exports.oboolean = exports.object = exports.number = exports.nullable = exports.null = exports.never = exports.nativeEnum = exports.nan = exports.map = exports.literal = exports.lazy = exports.intersection = exports.instanceof = exports.function = exports.enum = exports.effect = void 0;\nexports.datetimeRegex = datetimeRegex;\nexports.custom = custom;\nconst ZodError_js_1 = require(\"./ZodError.cjs\");\nconst errors_js_1 = require(\"./errors.cjs\");\nconst errorUtil_js_1 = require(\"./helpers/errorUtil.cjs\");\nconst parseUtil_js_1 = require(\"./helpers/parseUtil.cjs\");\nconst util_js_1 = require(\"./helpers/util.cjs\");\nclass ParseInputLazyPath {\n constructor(parent, value, path, key) {\n this._cachedPath = [];\n this.parent = parent;\n this.data = value;\n this._path = path;\n this._key = key;\n }\n get path() {\n if (!this._cachedPath.length) {\n if (Array.isArray(this._key)) {\n this._cachedPath.push(...this._path, ...this._key);\n }\n else {\n this._cachedPath.push(...this._path, this._key);\n }\n }\n return this._cachedPath;\n }\n}\nconst handleResult = (ctx, result) => {\n if ((0, parseUtil_js_1.isValid)(result)) {\n return { success: true, data: result.value };\n }\n else {\n if (!ctx.common.issues.length) {\n throw new Error(\"Validation failed but no issues detected.\");\n }\n return {\n success: false,\n get error() {\n if (this._error)\n return this._error;\n const error = new ZodError_js_1.ZodError(ctx.common.issues);\n this._error = error;\n return this._error;\n },\n };\n }\n};\nfunction processCreateParams(params) {\n if (!params)\n return {};\n const { errorMap, invalid_type_error, required_error, description } = params;\n if (errorMap && (invalid_type_error || required_error)) {\n throw new Error(`Can't use \"invalid_type_error\" or \"required_error\" in conjunction with custom error map.`);\n }\n if (errorMap)\n return { errorMap: errorMap, description };\n const customMap = (iss, ctx) => {\n const { message } = params;\n if (iss.code === \"invalid_enum_value\") {\n return { message: message ?? ctx.defaultError };\n }\n if (typeof ctx.data === \"undefined\") {\n return { message: message ?? required_error ?? ctx.defaultError };\n }\n if (iss.code !== \"invalid_type\")\n return { message: ctx.defaultError };\n return { message: message ?? invalid_type_error ?? ctx.defaultError };\n };\n return { errorMap: customMap, description };\n}\nclass ZodType {\n get description() {\n return this._def.description;\n }\n _getType(input) {\n return (0, util_js_1.getParsedType)(input.data);\n }\n _getOrReturnCtx(input, ctx) {\n return (ctx || {\n common: input.parent.common,\n data: input.data,\n parsedType: (0, util_js_1.getParsedType)(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n });\n }\n _processInputParams(input) {\n return {\n status: new parseUtil_js_1.ParseStatus(),\n ctx: {\n common: input.parent.common,\n data: input.data,\n parsedType: (0, util_js_1.getParsedType)(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n },\n };\n }\n _parseSync(input) {\n const result = this._parse(input);\n if ((0, parseUtil_js_1.isAsync)(result)) {\n throw new Error(\"Synchronous parse encountered promise.\");\n }\n return result;\n }\n _parseAsync(input) {\n const result = this._parse(input);\n return Promise.resolve(result);\n }\n parse(data, params) {\n const result = this.safeParse(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n safeParse(data, params) {\n const ctx = {\n common: {\n issues: [],\n async: params?.async ?? false,\n contextualErrorMap: params?.errorMap,\n },\n path: params?.path || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: (0, util_js_1.getParsedType)(data),\n };\n const result = this._parseSync({ data, path: ctx.path, parent: ctx });\n return handleResult(ctx, result);\n }\n \"~validate\"(data) {\n const ctx = {\n common: {\n issues: [],\n async: !!this[\"~standard\"].async,\n },\n path: [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: (0, util_js_1.getParsedType)(data),\n };\n if (!this[\"~standard\"].async) {\n try {\n const result = this._parseSync({ data, path: [], parent: ctx });\n return (0, parseUtil_js_1.isValid)(result)\n ? {\n value: result.value,\n }\n : {\n issues: ctx.common.issues,\n };\n }\n catch (err) {\n if (err?.message?.toLowerCase()?.includes(\"encountered\")) {\n this[\"~standard\"].async = true;\n }\n ctx.common = {\n issues: [],\n async: true,\n };\n }\n }\n return this._parseAsync({ data, path: [], parent: ctx }).then((result) => (0, parseUtil_js_1.isValid)(result)\n ? {\n value: result.value,\n }\n : {\n issues: ctx.common.issues,\n });\n }\n async parseAsync(data, params) {\n const result = await this.safeParseAsync(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n async safeParseAsync(data, params) {\n const ctx = {\n common: {\n issues: [],\n contextualErrorMap: params?.errorMap,\n async: true,\n },\n path: params?.path || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: (0, util_js_1.getParsedType)(data),\n };\n const maybeAsyncResult = this._parse({ data, path: ctx.path, parent: ctx });\n const result = await ((0, parseUtil_js_1.isAsync)(maybeAsyncResult) ? maybeAsyncResult : Promise.resolve(maybeAsyncResult));\n return handleResult(ctx, result);\n }\n refine(check, message) {\n const getIssueProperties = (val) => {\n if (typeof message === \"string\" || typeof message === \"undefined\") {\n return { message };\n }\n else if (typeof message === \"function\") {\n return message(val);\n }\n else {\n return message;\n }\n };\n return this._refinement((val, ctx) => {\n const result = check(val);\n const setError = () => ctx.addIssue({\n code: ZodError_js_1.ZodIssueCode.custom,\n ...getIssueProperties(val),\n });\n if (typeof Promise !== \"undefined\" && result instanceof Promise) {\n return result.then((data) => {\n if (!data) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n if (!result) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n refinement(check, refinementData) {\n return this._refinement((val, ctx) => {\n if (!check(val)) {\n ctx.addIssue(typeof refinementData === \"function\" ? refinementData(val, ctx) : refinementData);\n return false;\n }\n else {\n return true;\n }\n });\n }\n _refinement(refinement) {\n return new ZodEffects({\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"refinement\", refinement },\n });\n }\n superRefine(refinement) {\n return this._refinement(refinement);\n }\n constructor(def) {\n /** Alias of safeParseAsync */\n this.spa = this.safeParseAsync;\n this._def = def;\n this.parse = this.parse.bind(this);\n this.safeParse = this.safeParse.bind(this);\n this.parseAsync = this.parseAsync.bind(this);\n this.safeParseAsync = this.safeParseAsync.bind(this);\n this.spa = this.spa.bind(this);\n this.refine = this.refine.bind(this);\n this.refinement = this.refinement.bind(this);\n this.superRefine = this.superRefine.bind(this);\n this.optional = this.optional.bind(this);\n this.nullable = this.nullable.bind(this);\n this.nullish = this.nullish.bind(this);\n this.array = this.array.bind(this);\n this.promise = this.promise.bind(this);\n this.or = this.or.bind(this);\n this.and = this.and.bind(this);\n this.transform = this.transform.bind(this);\n this.brand = this.brand.bind(this);\n this.default = this.default.bind(this);\n this.catch = this.catch.bind(this);\n this.describe = this.describe.bind(this);\n this.pipe = this.pipe.bind(this);\n this.readonly = this.readonly.bind(this);\n this.isNullable = this.isNullable.bind(this);\n this.isOptional = this.isOptional.bind(this);\n this[\"~standard\"] = {\n version: 1,\n vendor: \"zod\",\n validate: (data) => this[\"~validate\"](data),\n };\n }\n optional() {\n return ZodOptional.create(this, this._def);\n }\n nullable() {\n return ZodNullable.create(this, this._def);\n }\n nullish() {\n return this.nullable().optional();\n }\n array() {\n return ZodArray.create(this);\n }\n promise() {\n return ZodPromise.create(this, this._def);\n }\n or(option) {\n return ZodUnion.create([this, option], this._def);\n }\n and(incoming) {\n return ZodIntersection.create(this, incoming, this._def);\n }\n transform(transform) {\n return new ZodEffects({\n ...processCreateParams(this._def),\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"transform\", transform },\n });\n }\n default(def) {\n const defaultValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodDefault({\n ...processCreateParams(this._def),\n innerType: this,\n defaultValue: defaultValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n });\n }\n brand() {\n return new ZodBranded({\n typeName: ZodFirstPartyTypeKind.ZodBranded,\n type: this,\n ...processCreateParams(this._def),\n });\n }\n catch(def) {\n const catchValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodCatch({\n ...processCreateParams(this._def),\n innerType: this,\n catchValue: catchValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n });\n }\n describe(description) {\n const This = this.constructor;\n return new This({\n ...this._def,\n description,\n });\n }\n pipe(target) {\n return ZodPipeline.create(this, target);\n }\n readonly() {\n return ZodReadonly.create(this);\n }\n isOptional() {\n return this.safeParse(undefined).success;\n }\n isNullable() {\n return this.safeParse(null).success;\n }\n}\nexports.ZodType = ZodType;\nexports.Schema = ZodType;\nexports.ZodSchema = ZodType;\nconst cuidRegex = /^c[^\\s-]{8,}$/i;\nconst cuid2Regex = /^[0-9a-z]+$/;\nconst ulidRegex = /^[0-9A-HJKMNP-TV-Z]{26}$/i;\n// const uuidRegex =\n// /^([a-f0-9]{8}-[a-f0-9]{4}-[1-5][a-f0-9]{3}-[a-f0-9]{4}-[a-f0-9]{12}|00000000-0000-0000-0000-000000000000)$/i;\nconst uuidRegex = /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/i;\nconst nanoidRegex = /^[a-z0-9_-]{21}$/i;\nconst jwtRegex = /^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]*$/;\nconst durationRegex = /^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/;\n// from https://stackoverflow.com/a/46181/1550155\n// old version: too slow, didn't support unicode\n// const emailRegex = /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i;\n//old email regex\n// const emailRegex = /^(([^<>()[\\].,;:\\s@\"]+(\\.[^<>()[\\].,;:\\s@\"]+)*)|(\".+\"))@((?!-)([^<>()[\\].,;:\\s@\"]+\\.)+[^<>()[\\].,;:\\s@\"]{1,})[^-<>()[\\].,;:\\s@\"]$/i;\n// eslint-disable-next-line\n// const emailRegex =\n// /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\])|(\\[IPv6:(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))\\])|([A-Za-z0-9]([A-Za-z0-9-]*[A-Za-z0-9])*(\\.[A-Za-z]{2,})+))$/;\n// const emailRegex =\n// /^[a-zA-Z0-9\\.\\!\\#\\$\\%\\&\\'\\*\\+\\/\\=\\?\\^\\_\\`\\{\\|\\}\\~\\-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n// const emailRegex =\n// /^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])$/i;\nconst emailRegex = /^(?!\\.)(?!.*\\.\\.)([A-Z0-9_'+\\-\\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\\-]*\\.)+[A-Z]{2,}$/i;\n// const emailRegex =\n// /^[a-z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-z0-9-]+(?:\\.[a-z0-9\\-]+)*$/i;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nconst _emojiRegex = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nlet emojiRegex;\n// faster, simpler, safer\nconst ipv4Regex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;\nconst ipv4CidrRegex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/(3[0-2]|[12]?[0-9])$/;\n// const ipv6Regex =\n// /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/;\nconst ipv6Regex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/;\nconst ipv6CidrRegex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;\n// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nconst base64Regex = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/;\n// https://base64.guru/standards/base64url\nconst base64urlRegex = /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/;\n// simple\n// const dateRegexSource = `\\\\d{4}-\\\\d{2}-\\\\d{2}`;\n// no leap year validation\n// const dateRegexSource = `\\\\d{4}-((0[13578]|10|12)-31|(0[13-9]|1[0-2])-30|(0[1-9]|1[0-2])-(0[1-9]|1\\\\d|2\\\\d))`;\n// with leap year validation\nconst dateRegexSource = `((\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\\\d|30)|(02)-(0[1-9]|1\\\\d|2[0-8])))`;\nconst dateRegex = new RegExp(`^${dateRegexSource}$`);\nfunction timeRegexSource(args) {\n let secondsRegexSource = `[0-5]\\\\d`;\n if (args.precision) {\n secondsRegexSource = `${secondsRegexSource}\\\\.\\\\d{${args.precision}}`;\n }\n else if (args.precision == null) {\n secondsRegexSource = `${secondsRegexSource}(\\\\.\\\\d+)?`;\n }\n const secondsQuantifier = args.precision ? \"+\" : \"?\"; // require seconds if precision is nonzero\n return `([01]\\\\d|2[0-3]):[0-5]\\\\d(:${secondsRegexSource})${secondsQuantifier}`;\n}\nfunction timeRegex(args) {\n return new RegExp(`^${timeRegexSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nfunction datetimeRegex(args) {\n let regex = `${dateRegexSource}T${timeRegexSource(args)}`;\n const opts = [];\n opts.push(args.local ? `Z?` : `Z`);\n if (args.offset)\n opts.push(`([+-]\\\\d{2}:?\\\\d{2})`);\n regex = `${regex}(${opts.join(\"|\")})`;\n return new RegExp(`^${regex}$`);\n}\nfunction isValidIP(ip, version) {\n if ((version === \"v4\" || !version) && ipv4Regex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6Regex.test(ip)) {\n return true;\n }\n return false;\n}\nfunction isValidJWT(jwt, alg) {\n if (!jwtRegex.test(jwt))\n return false;\n try {\n const [header] = jwt.split(\".\");\n if (!header)\n return false;\n // Convert base64url to base64\n const base64 = header\n .replace(/-/g, \"+\")\n .replace(/_/g, \"/\")\n .padEnd(header.length + ((4 - (header.length % 4)) % 4), \"=\");\n const decoded = JSON.parse(atob(base64));\n if (typeof decoded !== \"object\" || decoded === null)\n return false;\n if (\"typ\" in decoded && decoded?.typ !== \"JWT\")\n return false;\n if (!decoded.alg)\n return false;\n if (alg && decoded.alg !== alg)\n return false;\n return true;\n }\n catch {\n return false;\n }\n}\nfunction isValidCidr(ip, version) {\n if ((version === \"v4\" || !version) && ipv4CidrRegex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6CidrRegex.test(ip)) {\n return true;\n }\n return false;\n}\nclass ZodString extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = String(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== util_js_1.ZodParsedType.string) {\n const ctx = this._getOrReturnCtx(input);\n (0, parseUtil_js_1.addIssueToContext)(ctx, {\n code: ZodError_js_1.ZodIssueCode.invalid_type,\n expected: util_js_1.ZodParsedType.string,\n received: ctx.parsedType,\n });\n return parseUtil_js_1.INVALID;\n }\n const status = new parseUtil_js_1.ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.length < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n (0, parseUtil_js_1.addIssueToContext)(ctx, {\n code: ZodError_js_1.ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.length > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n (0, parseUtil_js_1.addIssueToContext)(ctx, {\n code: ZodError_js_1.ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"length\") {\n const tooBig = input.data.length > check.value;\n const tooSmall = input.data.length < check.value;\n if (tooBig || tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n if (tooBig) {\n (0, parseUtil_js_1.addIssueToContext)(ctx, {\n code: ZodError_js_1.ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n else if (tooSmall) {\n (0, parseUtil_js_1.addIssueToContext)(ctx, {\n code: ZodError_js_1.ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n status.dirty();\n }\n }\n else if (check.kind === \"email\") {\n if (!emailRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n (0, parseUtil_js_1.addIssueToContext)(ctx, {\n validation: \"email\",\n code: ZodError_js_1.ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"emoji\") {\n if (!emojiRegex) {\n emojiRegex = new RegExp(_emojiRegex, \"u\");\n }\n if (!emojiRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n (0, parseUtil_js_1.addIssueToContext)(ctx, {\n validation: \"emoji\",\n code: ZodError_js_1.ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"uuid\") {\n if (!uuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n (0, parseUtil_js_1.addIssueToContext)(ctx, {\n validation: \"uuid\",\n code: ZodError_js_1.ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"nanoid\") {\n if (!nanoidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n (0, parseUtil_js_1.addIssueToContext)(ctx, {\n validation: \"nanoid\",\n code: ZodError_js_1.ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid\") {\n if (!cuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n (0, parseUtil_js_1.addIssueToContext)(ctx, {\n validation: \"cuid\",\n code: ZodError_js_1.ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid2\") {\n if (!cuid2Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n (0, parseUtil_js_1.addIssueToContext)(ctx, {\n validation: \"cuid2\",\n code: ZodError_js_1.ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ulid\") {\n if (!ulidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n (0, parseUtil_js_1.addIssueToContext)(ctx, {\n validation: \"ulid\",\n code: ZodError_js_1.ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"url\") {\n try {\n new URL(input.data);\n }\n catch {\n ctx = this._getOrReturnCtx(input, ctx);\n (0, parseUtil_js_1.addIssueToContext)(ctx, {\n validation: \"url\",\n code: ZodError_js_1.ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"regex\") {\n check.regex.lastIndex = 0;\n const testResult = check.regex.test(input.data);\n if (!testResult) {\n ctx = this._getOrReturnCtx(input, ctx);\n (0, parseUtil_js_1.addIssueToContext)(ctx, {\n validation: \"regex\",\n code: ZodError_js_1.ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"trim\") {\n input.data = input.data.trim();\n }\n else if (check.kind === \"includes\") {\n if (!input.data.includes(check.value, check.position)) {\n ctx = this._getOrReturnCtx(input, ctx);\n (0, parseUtil_js_1.addIssueToContext)(ctx, {\n code: ZodError_js_1.ZodIssueCode.invalid_string,\n validation: { includes: check.value, position: check.position },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"toLowerCase\") {\n input.data = input.data.toLowerCase();\n }\n else if (check.kind === \"toUpperCase\") {\n input.data = input.data.toUpperCase();\n }\n else if (check.kind === \"startsWith\") {\n if (!input.data.startsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n (0, parseUtil_js_1.addIssueToContext)(ctx, {\n code: ZodError_js_1.ZodIssueCode.invalid_string,\n validation: { startsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"endsWith\") {\n if (!input.data.endsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n (0, parseUtil_js_1.addIssueToContext)(ctx, {\n code: ZodError_js_1.ZodIssueCode.invalid_string,\n validation: { endsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"datetime\") {\n const regex = datetimeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n (0, parseUtil_js_1.addIssueToContext)(ctx, {\n code: ZodError_js_1.ZodIssueCode.invalid_string,\n validation: \"datetime\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"date\") {\n const regex = dateRegex;\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n (0, parseUtil_js_1.addIssueToContext)(ctx, {\n code: ZodError_js_1.ZodIssueCode.invalid_string,\n validation: \"date\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"time\") {\n const regex = timeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n (0, parseUtil_js_1.addIssueToContext)(ctx, {\n code: ZodError_js_1.ZodIssueCode.invalid_string,\n validation: \"time\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"duration\") {\n if (!durationRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n (0, parseUtil_js_1.addIssueToContext)(ctx, {\n validation: \"duration\",\n code: ZodError_js_1.ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ip\") {\n if (!isValidIP(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n (0, parseUtil_js_1.addIssueToContext)(ctx, {\n validation: \"ip\",\n code: ZodError_js_1.ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"jwt\") {\n if (!isValidJWT(input.data, check.alg)) {\n ctx = this._getOrReturnCtx(input, ctx);\n (0, parseUtil_js_1.addIssueToContext)(ctx, {\n validation: \"jwt\",\n code: ZodError_js_1.ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cidr\") {\n if (!isValidCidr(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n (0, parseUtil_js_1.addIssueToContext)(ctx, {\n validation: \"cidr\",\n code: ZodError_js_1.ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"base64\") {\n if (!base64Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n (0, parseUtil_js_1.addIssueToContext)(ctx, {\n validation: \"base64\",\n code: ZodError_js_1.ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"base64url\") {\n if (!base64urlRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n (0, parseUtil_js_1.addIssueToContext)(ctx, {\n validation: \"base64url\",\n code: ZodError_js_1.ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util_js_1.util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _regex(regex, validation, message) {\n return this.refinement((data) => regex.test(data), {\n validation,\n code: ZodError_js_1.ZodIssueCode.invalid_string,\n ...errorUtil_js_1.errorUtil.errToObj(message),\n });\n }\n _addCheck(check) {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n email(message) {\n return this._addCheck({ kind: \"email\", ...errorUtil_js_1.errorUtil.errToObj(message) });\n }\n url(message) {\n return this._addCheck({ kind: \"url\", ...errorUtil_js_1.errorUtil.errToObj(message) });\n }\n emoji(message) {\n return this._addCheck({ kind: \"emoji\", ...errorUtil_js_1.errorUtil.errToObj(message) });\n }\n uuid(message) {\n return this._addCheck({ kind: \"uuid\", ...errorUtil_js_1.errorUtil.errToObj(message) });\n }\n nanoid(message) {\n return this._addCheck({ kind: \"nanoid\", ...errorUtil_js_1.errorUtil.errToObj(message) });\n }\n cuid(message) {\n return this._addCheck({ kind: \"cuid\", ...errorUtil_js_1.errorUtil.errToObj(message) });\n }\n cuid2(message) {\n return this._addCheck({ kind: \"cuid2\", ...errorUtil_js_1.errorUtil.errToObj(message) });\n }\n ulid(message) {\n return this._addCheck({ kind: \"ulid\", ...errorUtil_js_1.errorUtil.errToObj(message) });\n }\n base64(message) {\n return this._addCheck({ kind: \"base64\", ...errorUtil_js_1.errorUtil.errToObj(message) });\n }\n base64url(message) {\n // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n return this._addCheck({\n kind: \"base64url\",\n ...errorUtil_js_1.errorUtil.errToObj(message),\n });\n }\n jwt(options) {\n return this._addCheck({ kind: \"jwt\", ...errorUtil_js_1.errorUtil.errToObj(options) });\n }\n ip(options) {\n return this._addCheck({ kind: \"ip\", ...errorUtil_js_1.errorUtil.errToObj(options) });\n }\n cidr(options) {\n return this._addCheck({ kind: \"cidr\", ...errorUtil_js_1.errorUtil.errToObj(options) });\n }\n datetime(options) {\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"datetime\",\n precision: null,\n offset: false,\n local: false,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"datetime\",\n precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n offset: options?.offset ?? false,\n local: options?.local ?? false,\n ...errorUtil_js_1.errorUtil.errToObj(options?.message),\n });\n }\n date(message) {\n return this._addCheck({ kind: \"date\", message });\n }\n time(options) {\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"time\",\n precision: null,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"time\",\n precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n ...errorUtil_js_1.errorUtil.errToObj(options?.message),\n });\n }\n duration(message) {\n return this._addCheck({ kind: \"duration\", ...errorUtil_js_1.errorUtil.errToObj(message) });\n }\n regex(regex, message) {\n return this._addCheck({\n kind: \"regex\",\n regex: regex,\n ...errorUtil_js_1.errorUtil.errToObj(message),\n });\n }\n includes(value, options) {\n return this._addCheck({\n kind: \"includes\",\n value: value,\n position: options?.position,\n ...errorUtil_js_1.errorUtil.errToObj(options?.message),\n });\n }\n startsWith(value, message) {\n return this._addCheck({\n kind: \"startsWith\",\n value: value,\n ...errorUtil_js_1.errorUtil.errToObj(message),\n });\n }\n endsWith(value, message) {\n return this._addCheck({\n kind: \"endsWith\",\n value: value,\n ...errorUtil_js_1.errorUtil.errToObj(message),\n });\n }\n min(minLength, message) {\n return this._addCheck({\n kind: \"min\",\n value: minLength,\n ...errorUtil_js_1.errorUtil.errToObj(message),\n });\n }\n max(maxLength, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxLength,\n ...errorUtil_js_1.errorUtil.errToObj(message),\n });\n }\n length(len, message) {\n return this._addCheck({\n kind: \"length\",\n value: len,\n ...errorUtil_js_1.errorUtil.errToObj(message),\n });\n }\n /**\n * Equivalent to `.min(1)`\n */\n nonempty(message) {\n return this.min(1, errorUtil_js_1.errorUtil.errToObj(message));\n }\n trim() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"trim\" }],\n });\n }\n toLowerCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toLowerCase\" }],\n });\n }\n toUpperCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toUpperCase\" }],\n });\n }\n get isDatetime() {\n return !!this._def.checks.find((ch) => ch.kind === \"datetime\");\n }\n get isDate() {\n return !!this._def.checks.find((ch) => ch.kind === \"date\");\n }\n get isTime() {\n return !!this._def.checks.find((ch) => ch.kind === \"time\");\n }\n get isDuration() {\n return !!this._def.checks.find((ch) => ch.kind === \"duration\");\n }\n get isEmail() {\n return !!this._def.checks.find((ch) => ch.kind === \"email\");\n }\n get isURL() {\n return !!this._def.checks.find((ch) => ch.kind === \"url\");\n }\n get isEmoji() {\n return !!this._def.checks.find((ch) => ch.kind === \"emoji\");\n }\n get isUUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"uuid\");\n }\n get isNANOID() {\n return !!this._def.checks.find((ch) => ch.kind === \"nanoid\");\n }\n get isCUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid\");\n }\n get isCUID2() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid2\");\n }\n get isULID() {\n return !!this._def.checks.find((ch) => ch.kind === \"ulid\");\n }\n get isIP() {\n return !!this._def.checks.find((ch) => ch.kind === \"ip\");\n }\n get isCIDR() {\n return !!this._def.checks.find((ch) => ch.kind === \"cidr\");\n }\n get isBase64() {\n return !!this._def.checks.find((ch) => ch.kind === \"base64\");\n }\n get isBase64url() {\n // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n return !!this._def.checks.find((ch) => ch.kind === \"base64url\");\n }\n get minLength() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxLength() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nexports.ZodString = ZodString;\nZodString.create = (params) => {\n return new ZodString({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodString,\n coerce: params?.coerce ?? false,\n ...processCreateParams(params),\n });\n};\n// https://stackoverflow.com/questions/3966484/why-does-modulus-operator-return-fractional-number-in-javascript/31711034#31711034\nfunction floatSafeRemainder(val, step) {\n const valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n const stepDecCount = (step.toString().split(\".\")[1] || \"\").length;\n const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;\n const valInt = Number.parseInt(val.toFixed(decCount).replace(\".\", \"\"));\n const stepInt = Number.parseInt(step.toFixed(decCount).replace(\".\", \"\"));\n return (valInt % stepInt) / 10 ** decCount;\n}\nclass ZodNumber extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n this.step = this.multipleOf;\n }\n _parse(input) {\n if (this._def.coerce) {\n input.data = Number(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== util_js_1.ZodParsedType.number) {\n const ctx = this._getOrReturnCtx(input);\n (0, parseUtil_js_1.addIssueToContext)(ctx, {\n code: ZodError_js_1.ZodIssueCode.invalid_type,\n expected: util_js_1.ZodParsedType.number,\n received: ctx.parsedType,\n });\n return parseUtil_js_1.INVALID;\n }\n let ctx = undefined;\n const status = new parseUtil_js_1.ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"int\") {\n if (!util_js_1.util.isInteger(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n (0, parseUtil_js_1.addIssueToContext)(ctx, {\n code: ZodError_js_1.ZodIssueCode.invalid_type,\n expected: \"integer\",\n received: \"float\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"min\") {\n const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n (0, parseUtil_js_1.addIssueToContext)(ctx, {\n code: ZodError_js_1.ZodIssueCode.too_small,\n minimum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n (0, parseUtil_js_1.addIssueToContext)(ctx, {\n code: ZodError_js_1.ZodIssueCode.too_big,\n maximum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (floatSafeRemainder(input.data, check.value) !== 0) {\n ctx = this._getOrReturnCtx(input, ctx);\n (0, parseUtil_js_1.addIssueToContext)(ctx, {\n code: ZodError_js_1.ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"finite\") {\n if (!Number.isFinite(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n (0, parseUtil_js_1.addIssueToContext)(ctx, {\n code: ZodError_js_1.ZodIssueCode.not_finite,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util_js_1.util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil_js_1.errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil_js_1.errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil_js_1.errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil_js_1.errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodNumber({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil_js_1.errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodNumber({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n int(message) {\n return this._addCheck({\n kind: \"int\",\n message: errorUtil_js_1.errorUtil.toString(message),\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: false,\n message: errorUtil_js_1.errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: false,\n message: errorUtil_js_1.errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: true,\n message: errorUtil_js_1.errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: true,\n message: errorUtil_js_1.errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value: value,\n message: errorUtil_js_1.errorUtil.toString(message),\n });\n }\n finite(message) {\n return this._addCheck({\n kind: \"finite\",\n message: errorUtil_js_1.errorUtil.toString(message),\n });\n }\n safe(message) {\n return this._addCheck({\n kind: \"min\",\n inclusive: true,\n value: Number.MIN_SAFE_INTEGER,\n message: errorUtil_js_1.errorUtil.toString(message),\n })._addCheck({\n kind: \"max\",\n inclusive: true,\n value: Number.MAX_SAFE_INTEGER,\n message: errorUtil_js_1.errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n get isInt() {\n return !!this._def.checks.find((ch) => ch.kind === \"int\" || (ch.kind === \"multipleOf\" && util_js_1.util.isInteger(ch.value)));\n }\n get isFinite() {\n let max = null;\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"finite\" || ch.kind === \"int\" || ch.kind === \"multipleOf\") {\n return true;\n }\n else if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n else if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return Number.isFinite(min) && Number.isFinite(max);\n }\n}\nexports.ZodNumber = ZodNumber;\nZodNumber.create = (params) => {\n return new ZodNumber({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodNumber,\n coerce: params?.coerce || false,\n ...processCreateParams(params),\n });\n};\nclass ZodBigInt extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n }\n _parse(input) {\n if (this._def.coerce) {\n try {\n input.data = BigInt(input.data);\n }\n catch {\n return this._getInvalidInput(input);\n }\n }\n const parsedType = this._getType(input);\n if (parsedType !== util_js_1.ZodParsedType.bigint) {\n return this._getInvalidInput(input);\n }\n let ctx = undefined;\n const status = new parseUtil_js_1.ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n (0, parseUtil_js_1.addIssueToContext)(ctx, {\n code: ZodError_js_1.ZodIssueCode.too_small,\n type: \"bigint\",\n minimum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n (0, parseUtil_js_1.addIssueToContext)(ctx, {\n code: ZodError_js_1.ZodIssueCode.too_big,\n type: \"bigint\",\n maximum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (input.data % check.value !== BigInt(0)) {\n ctx = this._getOrReturnCtx(input, ctx);\n (0, parseUtil_js_1.addIssueToContext)(ctx, {\n code: ZodError_js_1.ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util_js_1.util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _getInvalidInput(input) {\n const ctx = this._getOrReturnCtx(input);\n (0, parseUtil_js_1.addIssueToContext)(ctx, {\n code: ZodError_js_1.ZodIssueCode.invalid_type,\n expected: util_js_1.ZodParsedType.bigint,\n received: ctx.parsedType,\n });\n return parseUtil_js_1.INVALID;\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil_js_1.errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil_js_1.errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil_js_1.errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil_js_1.errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodBigInt({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil_js_1.errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodBigInt({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil_js_1.errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil_js_1.errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil_js_1.errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil_js_1.errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value,\n message: errorUtil_js_1.errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nexports.ZodBigInt = ZodBigInt;\nZodBigInt.create = (params) => {\n return new ZodBigInt({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodBigInt,\n coerce: params?.coerce ?? false,\n ...processCreateParams(params),\n });\n};\nclass ZodBoolean extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = Boolean(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== util_js_1.ZodParsedType.boolean) {\n const ctx = this._getOrReturnCtx(input);\n (0, parseUtil_js_1.addIssueToContext)(ctx, {\n code: ZodError_js_1.ZodIssueCode.invalid_type,\n expected: util_js_1.ZodParsedType.boolean,\n received: ctx.parsedType,\n });\n return parseUtil_js_1.INVALID;\n }\n return (0, parseUtil_js_1.OK)(input.data);\n }\n}\nexports.ZodBoolean = ZodBoolean;\nZodBoolean.create = (params) => {\n return new ZodBoolean({\n typeName: ZodFirstPartyTypeKind.ZodBoolean,\n coerce: params?.coerce || false,\n ...processCreateParams(params),\n });\n};\nclass ZodDate extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = new Date(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== util_js_1.ZodParsedType.date) {\n const ctx = this._getOrReturnCtx(input);\n (0, parseUtil_js_1.addIssueToContext)(ctx, {\n code: ZodError_js_1.ZodIssueCode.invalid_type,\n expected: util_js_1.ZodParsedType.date,\n received: ctx.parsedType,\n });\n return parseUtil_js_1.INVALID;\n }\n if (Number.isNaN(input.data.getTime())) {\n const ctx = this._getOrReturnCtx(input);\n (0, parseUtil_js_1.addIssueToContext)(ctx, {\n code: ZodError_js_1.ZodIssueCode.invalid_date,\n });\n return parseUtil_js_1.INVALID;\n }\n const status = new parseUtil_js_1.ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.getTime() < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n (0, parseUtil_js_1.addIssueToContext)(ctx, {\n code: ZodError_js_1.ZodIssueCode.too_small,\n message: check.message,\n inclusive: true,\n exact: false,\n minimum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.getTime() > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n (0, parseUtil_js_1.addIssueToContext)(ctx, {\n code: ZodError_js_1.ZodIssueCode.too_big,\n message: check.message,\n inclusive: true,\n exact: false,\n maximum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else {\n util_js_1.util.assertNever(check);\n }\n }\n return {\n status: status.value,\n value: new Date(input.data.getTime()),\n };\n }\n _addCheck(check) {\n return new ZodDate({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n min(minDate, message) {\n return this._addCheck({\n kind: \"min\",\n value: minDate.getTime(),\n message: errorUtil_js_1.errorUtil.toString(message),\n });\n }\n max(maxDate, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxDate.getTime(),\n message: errorUtil_js_1.errorUtil.toString(message),\n });\n }\n get minDate() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min != null ? new Date(min) : null;\n }\n get maxDate() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max != null ? new Date(max) : null;\n }\n}\nexports.ZodDate = ZodDate;\nZodDate.create = (params) => {\n return new ZodDate({\n checks: [],\n coerce: params?.coerce || false,\n typeName: ZodFirstPartyTypeKind.ZodDate,\n ...processCreateParams(params),\n });\n};\nclass ZodSymbol extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== util_js_1.ZodParsedType.symbol) {\n const ctx = this._getOrReturnCtx(input);\n (0, parseUtil_js_1.addIssueToContext)(ctx, {\n code: ZodError_js_1.ZodIssueCode.invalid_type,\n expected: util_js_1.ZodParsedType.symbol,\n received: ctx.parsedType,\n });\n return parseUtil_js_1.INVALID;\n }\n return (0, parseUtil_js_1.OK)(input.data);\n }\n}\nexports.ZodSymbol = ZodSymbol;\nZodSymbol.create = (params) => {\n return new ZodSymbol({\n typeName: ZodFirstPartyTypeKind.ZodSymbol,\n ...processCreateParams(params),\n });\n};\nclass ZodUndefined extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== util_js_1.ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n (0, parseUtil_js_1.addIssueToContext)(ctx, {\n code: ZodError_js_1.ZodIssueCode.invalid_type,\n expected: util_js_1.ZodParsedType.undefined,\n received: ctx.parsedType,\n });\n return parseUtil_js_1.INVALID;\n }\n return (0, parseUtil_js_1.OK)(input.data);\n }\n}\nexports.ZodUndefined = ZodUndefined;\nZodUndefined.create = (params) => {\n return new ZodUndefined({\n typeName: ZodFirstPartyTypeKind.ZodUndefined,\n ...processCreateParams(params),\n });\n};\nclass ZodNull extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== util_js_1.ZodParsedType.null) {\n const ctx = this._getOrReturnCtx(input);\n (0, parseUtil_js_1.addIssueToContext)(ctx, {\n code: ZodError_js_1.ZodIssueCode.invalid_type,\n expected: util_js_1.ZodParsedType.null,\n received: ctx.parsedType,\n });\n return parseUtil_js_1.INVALID;\n }\n return (0, parseUtil_js_1.OK)(input.data);\n }\n}\nexports.ZodNull = ZodNull;\nZodNull.create = (params) => {\n return new ZodNull({\n typeName: ZodFirstPartyTypeKind.ZodNull,\n ...processCreateParams(params),\n });\n};\nclass ZodAny extends ZodType {\n constructor() {\n super(...arguments);\n // to prevent instances of other classes from extending ZodAny. this causes issues with catchall in ZodObject.\n this._any = true;\n }\n _parse(input) {\n return (0, parseUtil_js_1.OK)(input.data);\n }\n}\nexports.ZodAny = ZodAny;\nZodAny.create = (params) => {\n return new ZodAny({\n typeName: ZodFirstPartyTypeKind.ZodAny,\n ...processCreateParams(params),\n });\n};\nclass ZodUnknown extends ZodType {\n constructor() {\n super(...arguments);\n // required\n this._unknown = true;\n }\n _parse(input) {\n return (0, parseUtil_js_1.OK)(input.data);\n }\n}\nexports.ZodUnknown = ZodUnknown;\nZodUnknown.create = (params) => {\n return new ZodUnknown({\n typeName: ZodFirstPartyTypeKind.ZodUnknown,\n ...processCreateParams(params),\n });\n};\nclass ZodNever extends ZodType {\n _parse(input) {\n const ctx = this._getOrReturnCtx(input);\n (0, parseUtil_js_1.addIssueToContext)(ctx, {\n code: ZodError_js_1.ZodIssueCode.invalid_type,\n expected: util_js_1.ZodParsedType.never,\n received: ctx.parsedType,\n });\n return parseUtil_js_1.INVALID;\n }\n}\nexports.ZodNever = ZodNever;\nZodNever.create = (params) => {\n return new ZodNever({\n typeName: ZodFirstPartyTypeKind.ZodNever,\n ...processCreateParams(params),\n });\n};\nclass ZodVoid extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== util_js_1.ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n (0, parseUtil_js_1.addIssueToContext)(ctx, {\n code: ZodError_js_1.ZodIssueCode.invalid_type,\n expected: util_js_1.ZodParsedType.void,\n received: ctx.parsedType,\n });\n return parseUtil_js_1.INVALID;\n }\n return (0, parseUtil_js_1.OK)(input.data);\n }\n}\nexports.ZodVoid = ZodVoid;\nZodVoid.create = (params) => {\n return new ZodVoid({\n typeName: ZodFirstPartyTypeKind.ZodVoid,\n ...processCreateParams(params),\n });\n};\nclass ZodArray extends ZodType {\n _parse(input) {\n const { ctx, status } = this._processInputParams(input);\n const def = this._def;\n if (ctx.parsedType !== util_js_1.ZodParsedType.array) {\n (0, parseUtil_js_1.addIssueToContext)(ctx, {\n code: ZodError_js_1.ZodIssueCode.invalid_type,\n expected: util_js_1.ZodParsedType.array,\n received: ctx.parsedType,\n });\n return parseUtil_js_1.INVALID;\n }\n if (def.exactLength !== null) {\n const tooBig = ctx.data.length > def.exactLength.value;\n const tooSmall = ctx.data.length < def.exactLength.value;\n if (tooBig || tooSmall) {\n (0, parseUtil_js_1.addIssueToContext)(ctx, {\n code: tooBig ? ZodError_js_1.ZodIssueCode.too_big : ZodError_js_1.ZodIssueCode.too_small,\n minimum: (tooSmall ? def.exactLength.value : undefined),\n maximum: (tooBig ? def.exactLength.value : undefined),\n type: \"array\",\n inclusive: true,\n exact: true,\n message: def.exactLength.message,\n });\n status.dirty();\n }\n }\n if (def.minLength !== null) {\n if (ctx.data.length < def.minLength.value) {\n (0, parseUtil_js_1.addIssueToContext)(ctx, {\n code: ZodError_js_1.ZodIssueCode.too_small,\n minimum: def.minLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.minLength.message,\n });\n status.dirty();\n }\n }\n if (def.maxLength !== null) {\n if (ctx.data.length > def.maxLength.value) {\n (0, parseUtil_js_1.addIssueToContext)(ctx, {\n code: ZodError_js_1.ZodIssueCode.too_big,\n maximum: def.maxLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.maxLength.message,\n });\n status.dirty();\n }\n }\n if (ctx.common.async) {\n return Promise.all([...ctx.data].map((item, i) => {\n return def.type._parseAsync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n })).then((result) => {\n return parseUtil_js_1.ParseStatus.mergeArray(status, result);\n });\n }\n const result = [...ctx.data].map((item, i) => {\n return def.type._parseSync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n });\n return parseUtil_js_1.ParseStatus.mergeArray(status, result);\n }\n get element() {\n return this._def.type;\n }\n min(minLength, message) {\n return new ZodArray({\n ...this._def,\n minLength: { value: minLength, message: errorUtil_js_1.errorUtil.toString(message) },\n });\n }\n max(maxLength, message) {\n return new ZodArray({\n ...this._def,\n maxLength: { value: maxLength, message: errorUtil_js_1.errorUtil.toString(message) },\n });\n }\n length(len, message) {\n return new ZodArray({\n ...this._def,\n exactLength: { value: len, message: errorUtil_js_1.errorUtil.toString(message) },\n });\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nexports.ZodArray = ZodArray;\nZodArray.create = (schema, params) => {\n return new ZodArray({\n type: schema,\n minLength: null,\n maxLength: null,\n exactLength: null,\n typeName: ZodFirstPartyTypeKind.ZodArray,\n ...processCreateParams(params),\n });\n};\nfunction deepPartialify(schema) {\n if (schema instanceof ZodObject) {\n const newShape = {};\n for (const key in schema.shape) {\n const fieldSchema = schema.shape[key];\n newShape[key] = ZodOptional.create(deepPartialify(fieldSchema));\n }\n return new ZodObject({\n ...schema._def,\n shape: () => newShape,\n });\n }\n else if (schema instanceof ZodArray) {\n return new ZodArray({\n ...schema._def,\n type: deepPartialify(schema.element),\n });\n }\n else if (schema instanceof ZodOptional) {\n return ZodOptional.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodNullable) {\n return ZodNullable.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodTuple) {\n return ZodTuple.create(schema.items.map((item) => deepPartialify(item)));\n }\n else {\n return schema;\n }\n}\nclass ZodObject extends ZodType {\n constructor() {\n super(...arguments);\n this._cached = null;\n /**\n * @deprecated In most cases, this is no longer needed - unknown properties are now silently stripped.\n * If you want to pass through unknown properties, use `.passthrough()` instead.\n */\n this.nonstrict = this.passthrough;\n // extend<\n // Augmentation extends ZodRawShape,\n // NewOutput extends util.flatten<{\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // }>,\n // NewInput extends util.flatten<{\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }>\n // >(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<T, Augmentation>,\n // UnknownKeys,\n // Catchall,\n // NewOutput,\n // NewInput\n // > {\n // return new ZodObject({\n // ...this._def,\n // shape: () => ({\n // ...this._def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // }\n /**\n * @deprecated Use `.extend` instead\n * */\n this.augment = this.extend;\n }\n _getCached() {\n if (this._cached !== null)\n return this._cached;\n const shape = this._def.shape();\n const keys = util_js_1.util.objectKeys(shape);\n this._cached = { shape, keys };\n return this._cached;\n }\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== util_js_1.ZodParsedType.object) {\n const ctx = this._getOrReturnCtx(input);\n (0, parseUtil_js_1.addIssueToContext)(ctx, {\n code: ZodError_js_1.ZodIssueCode.invalid_type,\n expected: util_js_1.ZodParsedType.object,\n received: ctx.parsedType,\n });\n return parseUtil_js_1.INVALID;\n }\n const { status, ctx } = this._processInputParams(input);\n const { shape, keys: shapeKeys } = this._getCached();\n const extraKeys = [];\n if (!(this._def.catchall instanceof ZodNever && this._def.unknownKeys === \"strip\")) {\n for (const key in ctx.data) {\n if (!shapeKeys.includes(key)) {\n extraKeys.push(key);\n }\n }\n }\n const pairs = [];\n for (const key of shapeKeys) {\n const keyValidator = shape[key];\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: keyValidator._parse(new ParseInputLazyPath(ctx, value, ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (this._def.catchall instanceof ZodNever) {\n const unknownKeys = this._def.unknownKeys;\n if (unknownKeys === \"passthrough\") {\n for (const key of extraKeys) {\n pairs.push({\n key: { status: \"valid\", value: key },\n value: { status: \"valid\", value: ctx.data[key] },\n });\n }\n }\n else if (unknownKeys === \"strict\") {\n if (extraKeys.length > 0) {\n (0, parseUtil_js_1.addIssueToContext)(ctx, {\n code: ZodError_js_1.ZodIssueCode.unrecognized_keys,\n keys: extraKeys,\n });\n status.dirty();\n }\n }\n else if (unknownKeys === \"strip\") {\n }\n else {\n throw new Error(`Internal ZodObject error: invalid unknownKeys value.`);\n }\n }\n else {\n // run catchall validation\n const catchall = this._def.catchall;\n for (const key of extraKeys) {\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: catchall._parse(new ParseInputLazyPath(ctx, value, ctx.path, key) //, ctx.child(key), value, getParsedType(value)\n ),\n alwaysSet: key in ctx.data,\n });\n }\n }\n if (ctx.common.async) {\n return Promise.resolve()\n .then(async () => {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value,\n alwaysSet: pair.alwaysSet,\n });\n }\n return syncPairs;\n })\n .then((syncPairs) => {\n return parseUtil_js_1.ParseStatus.mergeObjectSync(status, syncPairs);\n });\n }\n else {\n return parseUtil_js_1.ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get shape() {\n return this._def.shape();\n }\n strict(message) {\n errorUtil_js_1.errorUtil.errToObj;\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strict\",\n ...(message !== undefined\n ? {\n errorMap: (issue, ctx) => {\n const defaultError = this._def.errorMap?.(issue, ctx).message ?? ctx.defaultError;\n if (issue.code === \"unrecognized_keys\")\n return {\n message: errorUtil_js_1.errorUtil.errToObj(message).message ?? defaultError,\n };\n return {\n message: defaultError,\n };\n },\n }\n : {}),\n });\n }\n strip() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strip\",\n });\n }\n passthrough() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"passthrough\",\n });\n }\n // const AugmentFactory =\n // <Def extends ZodObjectDef>(def: Def) =>\n // <Augmentation extends ZodRawShape>(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<ReturnType<Def[\"shape\"]>, Augmentation>,\n // Def[\"unknownKeys\"],\n // Def[\"catchall\"]\n // > => {\n // return new ZodObject({\n // ...def,\n // shape: () => ({\n // ...def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // };\n extend(augmentation) {\n return new ZodObject({\n ...this._def,\n shape: () => ({\n ...this._def.shape(),\n ...augmentation,\n }),\n });\n }\n /**\n * Prior to zod@1.0.12 there was a bug in the\n * inferred type of merged objects. Please\n * upgrade if you are experiencing issues.\n */\n merge(merging) {\n const merged = new ZodObject({\n unknownKeys: merging._def.unknownKeys,\n catchall: merging._def.catchall,\n shape: () => ({\n ...this._def.shape(),\n ...merging._def.shape(),\n }),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n });\n return merged;\n }\n // merge<\n // Incoming extends AnyZodObject,\n // Augmentation extends Incoming[\"shape\"],\n // NewOutput extends {\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // },\n // NewInput extends {\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }\n // >(\n // merging: Incoming\n // ): ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"],\n // NewOutput,\n // NewInput\n // > {\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n setKey(key, schema) {\n return this.augment({ [key]: schema });\n }\n // merge<Incoming extends AnyZodObject>(\n // merging: Incoming\n // ): //ZodObject<T & Incoming[\"_shape\"], UnknownKeys, Catchall> = (merging) => {\n // ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"]\n // > {\n // // const mergedShape = objectUtil.mergeShapes(\n // // this._def.shape(),\n // // merging._def.shape()\n // // );\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n catchall(index) {\n return new ZodObject({\n ...this._def,\n catchall: index,\n });\n }\n pick(mask) {\n const shape = {};\n for (const key of util_js_1.util.objectKeys(mask)) {\n if (mask[key] && this.shape[key]) {\n shape[key] = this.shape[key];\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n omit(mask) {\n const shape = {};\n for (const key of util_js_1.util.objectKeys(this.shape)) {\n if (!mask[key]) {\n shape[key] = this.shape[key];\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n /**\n * @deprecated\n */\n deepPartial() {\n return deepPartialify(this);\n }\n partial(mask) {\n const newShape = {};\n for (const key of util_js_1.util.objectKeys(this.shape)) {\n const fieldSchema = this.shape[key];\n if (mask && !mask[key]) {\n newShape[key] = fieldSchema;\n }\n else {\n newShape[key] = fieldSchema.optional();\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n required(mask) {\n const newShape = {};\n for (const key of util_js_1.util.objectKeys(this.shape)) {\n if (mask && !mask[key]) {\n newShape[key] = this.shape[key];\n }\n else {\n const fieldSchema = this.shape[key];\n let newField = fieldSchema;\n while (newField instanceof ZodOptional) {\n newField = newField._def.innerType;\n }\n newShape[key] = newField;\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n keyof() {\n return createZodEnum(util_js_1.util.objectKeys(this.shape));\n }\n}\nexports.ZodObject = ZodObject;\nZodObject.create = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.strictCreate = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strict\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.lazycreate = (shape, params) => {\n return new ZodObject({\n shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nclass ZodUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const options = this._def.options;\n function handleResults(results) {\n // return first issue-free validation if it exists\n for (const result of results) {\n if (result.result.status === \"valid\") {\n return result.result;\n }\n }\n for (const result of results) {\n if (result.result.status === \"dirty\") {\n // add issues from dirty option\n ctx.common.issues.push(...result.ctx.common.issues);\n return result.result;\n }\n }\n // return invalid\n const unionErrors = results.map((result) => new ZodError_js_1.ZodError(result.ctx.common.issues));\n (0, parseUtil_js_1.addIssueToContext)(ctx, {\n code: ZodError_js_1.ZodIssueCode.invalid_union,\n unionErrors,\n });\n return parseUtil_js_1.INVALID;\n }\n if (ctx.common.async) {\n return Promise.all(options.map(async (option) => {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n return {\n result: await option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n }),\n ctx: childCtx,\n };\n })).then(handleResults);\n }\n else {\n let dirty = undefined;\n const issues = [];\n for (const option of options) {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n const result = option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n });\n if (result.status === \"valid\") {\n return result;\n }\n else if (result.status === \"dirty\" && !dirty) {\n dirty = { result, ctx: childCtx };\n }\n if (childCtx.common.issues.length) {\n issues.push(childCtx.common.issues);\n }\n }\n if (dirty) {\n ctx.common.issues.push(...dirty.ctx.common.issues);\n return dirty.result;\n }\n const unionErrors = issues.map((issues) => new ZodError_js_1.ZodError(issues));\n (0, parseUtil_js_1.addIssueToContext)(ctx, {\n code: ZodError_js_1.ZodIssueCode.invalid_union,\n unionErrors,\n });\n return parseUtil_js_1.INVALID;\n }\n }\n get options() {\n return this._def.options;\n }\n}\nexports.ZodUnion = ZodUnion;\nZodUnion.create = (types, params) => {\n return new ZodUnion({\n options: types,\n typeName: ZodFirstPartyTypeKind.ZodUnion,\n ...processCreateParams(params),\n });\n};\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\n////////// //////////\n////////// ZodDiscriminatedUnion //////////\n////////// //////////\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\nconst getDiscriminator = (type) => {\n if (type instanceof ZodLazy) {\n return getDiscriminator(type.schema);\n }\n else if (type instanceof ZodEffects) {\n return getDiscriminator(type.innerType());\n }\n else if (type instanceof ZodLiteral) {\n return [type.value];\n }\n else if (type instanceof ZodEnum) {\n return type.options;\n }\n else if (type instanceof ZodNativeEnum) {\n // eslint-disable-next-line ban/ban\n return util_js_1.util.objectValues(type.enum);\n }\n else if (type instanceof ZodDefault) {\n return getDiscriminator(type._def.innerType);\n }\n else if (type instanceof ZodUndefined) {\n return [undefined];\n }\n else if (type instanceof ZodNull) {\n return [null];\n }\n else if (type instanceof ZodOptional) {\n return [undefined, ...getDiscriminator(type.unwrap())];\n }\n else if (type instanceof ZodNullable) {\n return [null, ...getDiscriminator(type.unwrap())];\n }\n else if (type instanceof ZodBranded) {\n return getDiscriminator(type.unwrap());\n }\n else if (type instanceof ZodReadonly) {\n return getDiscriminator(type.unwrap());\n }\n else if (type instanceof ZodCatch) {\n return getDiscriminator(type._def.innerType);\n }\n else {\n return [];\n }\n};\nclass ZodDiscriminatedUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== util_js_1.ZodParsedType.object) {\n (0, parseUtil_js_1.addIssueToContext)(ctx, {\n code: ZodError_js_1.ZodIssueCode.invalid_type,\n expected: util_js_1.ZodParsedType.object,\n received: ctx.parsedType,\n });\n return parseUtil_js_1.INVALID;\n }\n const discriminator = this.discriminator;\n const discriminatorValue = ctx.data[discriminator];\n const option = this.optionsMap.get(discriminatorValue);\n if (!option) {\n (0, parseUtil_js_1.addIssueToContext)(ctx, {\n code: ZodError_js_1.ZodIssueCode.invalid_union_discriminator,\n options: Array.from(this.optionsMap.keys()),\n path: [discriminator],\n });\n return parseUtil_js_1.INVALID;\n }\n if (ctx.common.async) {\n return option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n else {\n return option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n get discriminator() {\n return this._def.discriminator;\n }\n get options() {\n return this._def.options;\n }\n get optionsMap() {\n return this._def.optionsMap;\n }\n /**\n * The constructor of the discriminated union schema. Its behaviour is very similar to that of the normal z.union() constructor.\n * However, it only allows a union of objects, all of which need to share a discriminator property. This property must\n * have a different value for each object in the union.\n * @param discriminator the name of the discriminator property\n * @param types an array of object schemas\n * @param params\n */\n static create(discriminator, options, params) {\n // Get all the valid discriminator values\n const optionsMap = new Map();\n // try {\n for (const type of options) {\n const discriminatorValues = getDiscriminator(type.shape[discriminator]);\n if (!discriminatorValues.length) {\n throw new Error(`A discriminator value for key \\`${discriminator}\\` could not be extracted from all schema options`);\n }\n for (const value of discriminatorValues) {\n if (optionsMap.has(value)) {\n throw new Error(`Discriminator property ${String(discriminator)} has duplicate value ${String(value)}`);\n }\n optionsMap.set(value, type);\n }\n }\n return new ZodDiscriminatedUnion({\n typeName: ZodFirstPartyTypeKind.ZodDiscriminatedUnion,\n discriminator,\n options,\n optionsMap,\n ...processCreateParams(params),\n });\n }\n}\nexports.ZodDiscriminatedUnion = ZodDiscriminatedUnion;\nfunction mergeValues(a, b) {\n const aType = (0, util_js_1.getParsedType)(a);\n const bType = (0, util_js_1.getParsedType)(b);\n if (a === b) {\n return { valid: true, data: a };\n }\n else if (aType === util_js_1.ZodParsedType.object && bType === util_js_1.ZodParsedType.object) {\n const bKeys = util_js_1.util.objectKeys(b);\n const sharedKeys = util_js_1.util.objectKeys(a).filter((key) => bKeys.indexOf(key) !== -1);\n const newObj = { ...a, ...b };\n for (const key of sharedKeys) {\n const sharedValue = mergeValues(a[key], b[key]);\n if (!sharedValue.valid) {\n return { valid: false };\n }\n newObj[key] = sharedValue.data;\n }\n return { valid: true, data: newObj };\n }\n else if (aType === util_js_1.ZodParsedType.array && bType === util_js_1.ZodParsedType.array) {\n if (a.length !== b.length) {\n return { valid: false };\n }\n const newArray = [];\n for (let index = 0; index < a.length; index++) {\n const itemA = a[index];\n const itemB = b[index];\n const sharedValue = mergeValues(itemA, itemB);\n if (!sharedValue.valid) {\n return { valid: false };\n }\n newArray.push(sharedValue.data);\n }\n return { valid: true, data: newArray };\n }\n else if (aType === util_js_1.ZodParsedType.date && bType === util_js_1.ZodParsedType.date && +a === +b) {\n return { valid: true, data: a };\n }\n else {\n return { valid: false };\n }\n}\nclass ZodIntersection extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const handleParsed = (parsedLeft, parsedRight) => {\n if ((0, parseUtil_js_1.isAborted)(parsedLeft) || (0, parseUtil_js_1.isAborted)(parsedRight)) {\n return parseUtil_js_1.INVALID;\n }\n const merged = mergeValues(parsedLeft.value, parsedRight.value);\n if (!merged.valid) {\n (0, parseUtil_js_1.addIssueToContext)(ctx, {\n code: ZodError_js_1.ZodIssueCode.invalid_intersection_types,\n });\n return parseUtil_js_1.INVALID;\n }\n if ((0, parseUtil_js_1.isDirty)(parsedLeft) || (0, parseUtil_js_1.isDirty)(parsedRight)) {\n status.dirty();\n }\n return { status: status.value, value: merged.data };\n };\n if (ctx.common.async) {\n return Promise.all([\n this._def.left._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n this._def.right._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n ]).then(([left, right]) => handleParsed(left, right));\n }\n else {\n return handleParsed(this._def.left._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }), this._def.right._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }));\n }\n }\n}\nexports.ZodIntersection = ZodIntersection;\nZodIntersection.create = (left, right, params) => {\n return new ZodIntersection({\n left: left,\n right: right,\n typeName: ZodFirstPartyTypeKind.ZodIntersection,\n ...processCreateParams(params),\n });\n};\n// type ZodTupleItems = [ZodTypeAny, ...ZodTypeAny[]];\nclass ZodTuple extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== util_js_1.ZodParsedType.array) {\n (0, parseUtil_js_1.addIssueToContext)(ctx, {\n code: ZodError_js_1.ZodIssueCode.invalid_type,\n expected: util_js_1.ZodParsedType.array,\n received: ctx.parsedType,\n });\n return parseUtil_js_1.INVALID;\n }\n if (ctx.data.length < this._def.items.length) {\n (0, parseUtil_js_1.addIssueToContext)(ctx, {\n code: ZodError_js_1.ZodIssueCode.too_small,\n minimum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n return parseUtil_js_1.INVALID;\n }\n const rest = this._def.rest;\n if (!rest && ctx.data.length > this._def.items.length) {\n (0, parseUtil_js_1.addIssueToContext)(ctx, {\n code: ZodError_js_1.ZodIssueCode.too_big,\n maximum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n status.dirty();\n }\n const items = [...ctx.data]\n .map((item, itemIndex) => {\n const schema = this._def.items[itemIndex] || this._def.rest;\n if (!schema)\n return null;\n return schema._parse(new ParseInputLazyPath(ctx, item, ctx.path, itemIndex));\n })\n .filter((x) => !!x); // filter nulls\n if (ctx.common.async) {\n return Promise.all(items).then((results) => {\n return parseUtil_js_1.ParseStatus.mergeArray(status, results);\n });\n }\n else {\n return parseUtil_js_1.ParseStatus.mergeArray(status, items);\n }\n }\n get items() {\n return this._def.items;\n }\n rest(rest) {\n return new ZodTuple({\n ...this._def,\n rest,\n });\n }\n}\nexports.ZodTuple = ZodTuple;\nZodTuple.create = (schemas, params) => {\n if (!Array.isArray(schemas)) {\n throw new Error(\"You must pass an array of schemas to z.tuple([ ... ])\");\n }\n return new ZodTuple({\n items: schemas,\n typeName: ZodFirstPartyTypeKind.ZodTuple,\n rest: null,\n ...processCreateParams(params),\n });\n};\nclass ZodRecord extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== util_js_1.ZodParsedType.object) {\n (0, parseUtil_js_1.addIssueToContext)(ctx, {\n code: ZodError_js_1.ZodIssueCode.invalid_type,\n expected: util_js_1.ZodParsedType.object,\n received: ctx.parsedType,\n });\n return parseUtil_js_1.INVALID;\n }\n const pairs = [];\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n for (const key in ctx.data) {\n pairs.push({\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, key)),\n value: valueType._parse(new ParseInputLazyPath(ctx, ctx.data[key], ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (ctx.common.async) {\n return parseUtil_js_1.ParseStatus.mergeObjectAsync(status, pairs);\n }\n else {\n return parseUtil_js_1.ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get element() {\n return this._def.valueType;\n }\n static create(first, second, third) {\n if (second instanceof ZodType) {\n return new ZodRecord({\n keyType: first,\n valueType: second,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(third),\n });\n }\n return new ZodRecord({\n keyType: ZodString.create(),\n valueType: first,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(second),\n });\n }\n}\nexports.ZodRecord = ZodRecord;\nclass ZodMap extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== util_js_1.ZodParsedType.map) {\n (0, parseUtil_js_1.addIssueToContext)(ctx, {\n code: ZodError_js_1.ZodIssueCode.invalid_type,\n expected: util_js_1.ZodParsedType.map,\n received: ctx.parsedType,\n });\n return parseUtil_js_1.INVALID;\n }\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n const pairs = [...ctx.data.entries()].map(([key, value], index) => {\n return {\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, [index, \"key\"])),\n value: valueType._parse(new ParseInputLazyPath(ctx, value, ctx.path, [index, \"value\"])),\n };\n });\n if (ctx.common.async) {\n const finalMap = new Map();\n return Promise.resolve().then(async () => {\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return parseUtil_js_1.INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n });\n }\n else {\n const finalMap = new Map();\n for (const pair of pairs) {\n const key = pair.key;\n const value = pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return parseUtil_js_1.INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n }\n }\n}\nexports.ZodMap = ZodMap;\nZodMap.create = (keyType, valueType, params) => {\n return new ZodMap({\n valueType,\n keyType,\n typeName: ZodFirstPartyTypeKind.ZodMap,\n ...processCreateParams(params),\n });\n};\nclass ZodSet extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== util_js_1.ZodParsedType.set) {\n (0, parseUtil_js_1.addIssueToContext)(ctx, {\n code: ZodError_js_1.ZodIssueCode.invalid_type,\n expected: util_js_1.ZodParsedType.set,\n received: ctx.parsedType,\n });\n return parseUtil_js_1.INVALID;\n }\n const def = this._def;\n if (def.minSize !== null) {\n if (ctx.data.size < def.minSize.value) {\n (0, parseUtil_js_1.addIssueToContext)(ctx, {\n code: ZodError_js_1.ZodIssueCode.too_small,\n minimum: def.minSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.minSize.message,\n });\n status.dirty();\n }\n }\n if (def.maxSize !== null) {\n if (ctx.data.size > def.maxSize.value) {\n (0, parseUtil_js_1.addIssueToContext)(ctx, {\n code: ZodError_js_1.ZodIssueCode.too_big,\n maximum: def.maxSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.maxSize.message,\n });\n status.dirty();\n }\n }\n const valueType = this._def.valueType;\n function finalizeSet(elements) {\n const parsedSet = new Set();\n for (const element of elements) {\n if (element.status === \"aborted\")\n return parseUtil_js_1.INVALID;\n if (element.status === \"dirty\")\n status.dirty();\n parsedSet.add(element.value);\n }\n return { status: status.value, value: parsedSet };\n }\n const elements = [...ctx.data.values()].map((item, i) => valueType._parse(new ParseInputLazyPath(ctx, item, ctx.path, i)));\n if (ctx.common.async) {\n return Promise.all(elements).then((elements) => finalizeSet(elements));\n }\n else {\n return finalizeSet(elements);\n }\n }\n min(minSize, message) {\n return new ZodSet({\n ...this._def,\n minSize: { value: minSize, message: errorUtil_js_1.errorUtil.toString(message) },\n });\n }\n max(maxSize, message) {\n return new ZodSet({\n ...this._def,\n maxSize: { value: maxSize, message: errorUtil_js_1.errorUtil.toString(message) },\n });\n }\n size(size, message) {\n return this.min(size, message).max(size, message);\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nexports.ZodSet = ZodSet;\nZodSet.create = (valueType, params) => {\n return new ZodSet({\n valueType,\n minSize: null,\n maxSize: null,\n typeName: ZodFirstPartyTypeKind.ZodSet,\n ...processCreateParams(params),\n });\n};\nclass ZodFunction extends ZodType {\n constructor() {\n super(...arguments);\n this.validate = this.implement;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== util_js_1.ZodParsedType.function) {\n (0, parseUtil_js_1.addIssueToContext)(ctx, {\n code: ZodError_js_1.ZodIssueCode.invalid_type,\n expected: util_js_1.ZodParsedType.function,\n received: ctx.parsedType,\n });\n return parseUtil_js_1.INVALID;\n }\n function makeArgsIssue(args, error) {\n return (0, parseUtil_js_1.makeIssue)({\n data: args,\n path: ctx.path,\n errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, (0, errors_js_1.getErrorMap)(), errors_js_1.defaultErrorMap].filter((x) => !!x),\n issueData: {\n code: ZodError_js_1.ZodIssueCode.invalid_arguments,\n argumentsError: error,\n },\n });\n }\n function makeReturnsIssue(returns, error) {\n return (0, parseUtil_js_1.makeIssue)({\n data: returns,\n path: ctx.path,\n errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, (0, errors_js_1.getErrorMap)(), errors_js_1.defaultErrorMap].filter((x) => !!x),\n issueData: {\n code: ZodError_js_1.ZodIssueCode.invalid_return_type,\n returnTypeError: error,\n },\n });\n }\n const params = { errorMap: ctx.common.contextualErrorMap };\n const fn = ctx.data;\n if (this._def.returns instanceof ZodPromise) {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return (0, parseUtil_js_1.OK)(async function (...args) {\n const error = new ZodError_js_1.ZodError([]);\n const parsedArgs = await me._def.args.parseAsync(args, params).catch((e) => {\n error.addIssue(makeArgsIssue(args, e));\n throw error;\n });\n const result = await Reflect.apply(fn, this, parsedArgs);\n const parsedReturns = await me._def.returns._def.type\n .parseAsync(result, params)\n .catch((e) => {\n error.addIssue(makeReturnsIssue(result, e));\n throw error;\n });\n return parsedReturns;\n });\n }\n else {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return (0, parseUtil_js_1.OK)(function (...args) {\n const parsedArgs = me._def.args.safeParse(args, params);\n if (!parsedArgs.success) {\n throw new ZodError_js_1.ZodError([makeArgsIssue(args, parsedArgs.error)]);\n }\n const result = Reflect.apply(fn, this, parsedArgs.data);\n const parsedReturns = me._def.returns.safeParse(result, params);\n if (!parsedReturns.success) {\n throw new ZodError_js_1.ZodError([makeReturnsIssue(result, parsedReturns.error)]);\n }\n return parsedReturns.data;\n });\n }\n }\n parameters() {\n return this._def.args;\n }\n returnType() {\n return this._def.returns;\n }\n args(...items) {\n return new ZodFunction({\n ...this._def,\n args: ZodTuple.create(items).rest(ZodUnknown.create()),\n });\n }\n returns(returnType) {\n return new ZodFunction({\n ...this._def,\n returns: returnType,\n });\n }\n implement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n strictImplement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n static create(args, returns, params) {\n return new ZodFunction({\n args: (args ? args : ZodTuple.create([]).rest(ZodUnknown.create())),\n returns: returns || ZodUnknown.create(),\n typeName: ZodFirstPartyTypeKind.ZodFunction,\n ...processCreateParams(params),\n });\n }\n}\nexports.ZodFunction = ZodFunction;\nclass ZodLazy extends ZodType {\n get schema() {\n return this._def.getter();\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const lazySchema = this._def.getter();\n return lazySchema._parse({ data: ctx.data, path: ctx.path, parent: ctx });\n }\n}\nexports.ZodLazy = ZodLazy;\nZodLazy.create = (getter, params) => {\n return new ZodLazy({\n getter: getter,\n typeName: ZodFirstPartyTypeKind.ZodLazy,\n ...processCreateParams(params),\n });\n};\nclass ZodLiteral extends ZodType {\n _parse(input) {\n if (input.data !== this._def.value) {\n const ctx = this._getOrReturnCtx(input);\n (0, parseUtil_js_1.addIssueToContext)(ctx, {\n received: ctx.data,\n code: ZodError_js_1.ZodIssueCode.invalid_literal,\n expected: this._def.value,\n });\n return parseUtil_js_1.INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n get value() {\n return this._def.value;\n }\n}\nexports.ZodLiteral = ZodLiteral;\nZodLiteral.create = (value, params) => {\n return new ZodLiteral({\n value: value,\n typeName: ZodFirstPartyTypeKind.ZodLiteral,\n ...processCreateParams(params),\n });\n};\nfunction createZodEnum(values, params) {\n return new ZodEnum({\n values,\n typeName: ZodFirstPartyTypeKind.ZodEnum,\n ...processCreateParams(params),\n });\n}\nclass ZodEnum extends ZodType {\n _parse(input) {\n if (typeof input.data !== \"string\") {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n (0, parseUtil_js_1.addIssueToContext)(ctx, {\n expected: util_js_1.util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodError_js_1.ZodIssueCode.invalid_type,\n });\n return parseUtil_js_1.INVALID;\n }\n if (!this._cache) {\n this._cache = new Set(this._def.values);\n }\n if (!this._cache.has(input.data)) {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n (0, parseUtil_js_1.addIssueToContext)(ctx, {\n received: ctx.data,\n code: ZodError_js_1.ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return parseUtil_js_1.INVALID;\n }\n return (0, parseUtil_js_1.OK)(input.data);\n }\n get options() {\n return this._def.values;\n }\n get enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Values() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n extract(values, newDef = this._def) {\n return ZodEnum.create(values, {\n ...this._def,\n ...newDef,\n });\n }\n exclude(values, newDef = this._def) {\n return ZodEnum.create(this.options.filter((opt) => !values.includes(opt)), {\n ...this._def,\n ...newDef,\n });\n }\n}\nexports.ZodEnum = ZodEnum;\nZodEnum.create = createZodEnum;\nclass ZodNativeEnum extends ZodType {\n _parse(input) {\n const nativeEnumValues = util_js_1.util.getValidEnumValues(this._def.values);\n const ctx = this._getOrReturnCtx(input);\n if (ctx.parsedType !== util_js_1.ZodParsedType.string && ctx.parsedType !== util_js_1.ZodParsedType.number) {\n const expectedValues = util_js_1.util.objectValues(nativeEnumValues);\n (0, parseUtil_js_1.addIssueToContext)(ctx, {\n expected: util_js_1.util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodError_js_1.ZodIssueCode.invalid_type,\n });\n return parseUtil_js_1.INVALID;\n }\n if (!this._cache) {\n this._cache = new Set(util_js_1.util.getValidEnumValues(this._def.values));\n }\n if (!this._cache.has(input.data)) {\n const expectedValues = util_js_1.util.objectValues(nativeEnumValues);\n (0, parseUtil_js_1.addIssueToContext)(ctx, {\n received: ctx.data,\n code: ZodError_js_1.ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return parseUtil_js_1.INVALID;\n }\n return (0, parseUtil_js_1.OK)(input.data);\n }\n get enum() {\n return this._def.values;\n }\n}\nexports.ZodNativeEnum = ZodNativeEnum;\nZodNativeEnum.create = (values, params) => {\n return new ZodNativeEnum({\n values: values,\n typeName: ZodFirstPartyTypeKind.ZodNativeEnum,\n ...processCreateParams(params),\n });\n};\nclass ZodPromise extends ZodType {\n unwrap() {\n return this._def.type;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== util_js_1.ZodParsedType.promise && ctx.common.async === false) {\n (0, parseUtil_js_1.addIssueToContext)(ctx, {\n code: ZodError_js_1.ZodIssueCode.invalid_type,\n expected: util_js_1.ZodParsedType.promise,\n received: ctx.parsedType,\n });\n return parseUtil_js_1.INVALID;\n }\n const promisified = ctx.parsedType === util_js_1.ZodParsedType.promise ? ctx.data : Promise.resolve(ctx.data);\n return (0, parseUtil_js_1.OK)(promisified.then((data) => {\n return this._def.type.parseAsync(data, {\n path: ctx.path,\n errorMap: ctx.common.contextualErrorMap,\n });\n }));\n }\n}\nexports.ZodPromise = ZodPromise;\nZodPromise.create = (schema, params) => {\n return new ZodPromise({\n type: schema,\n typeName: ZodFirstPartyTypeKind.ZodPromise,\n ...processCreateParams(params),\n });\n};\nclass ZodEffects extends ZodType {\n innerType() {\n return this._def.schema;\n }\n sourceType() {\n return this._def.schema._def.typeName === ZodFirstPartyTypeKind.ZodEffects\n ? this._def.schema.sourceType()\n : this._def.schema;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const effect = this._def.effect || null;\n const checkCtx = {\n addIssue: (arg) => {\n (0, parseUtil_js_1.addIssueToContext)(ctx, arg);\n if (arg.fatal) {\n status.abort();\n }\n else {\n status.dirty();\n }\n },\n get path() {\n return ctx.path;\n },\n };\n checkCtx.addIssue = checkCtx.addIssue.bind(checkCtx);\n if (effect.type === \"preprocess\") {\n const processed = effect.transform(ctx.data, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(processed).then(async (processed) => {\n if (status.value === \"aborted\")\n return parseUtil_js_1.INVALID;\n const result = await this._def.schema._parseAsync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n if (result.status === \"aborted\")\n return parseUtil_js_1.INVALID;\n if (result.status === \"dirty\")\n return (0, parseUtil_js_1.DIRTY)(result.value);\n if (status.value === \"dirty\")\n return (0, parseUtil_js_1.DIRTY)(result.value);\n return result;\n });\n }\n else {\n if (status.value === \"aborted\")\n return parseUtil_js_1.INVALID;\n const result = this._def.schema._parseSync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n if (result.status === \"aborted\")\n return parseUtil_js_1.INVALID;\n if (result.status === \"dirty\")\n return (0, parseUtil_js_1.DIRTY)(result.value);\n if (status.value === \"dirty\")\n return (0, parseUtil_js_1.DIRTY)(result.value);\n return result;\n }\n }\n if (effect.type === \"refinement\") {\n const executeRefinement = (acc) => {\n const result = effect.refinement(acc, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(result);\n }\n if (result instanceof Promise) {\n throw new Error(\"Async refinement encountered during synchronous parse operation. Use .parseAsync instead.\");\n }\n return acc;\n };\n if (ctx.common.async === false) {\n const inner = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inner.status === \"aborted\")\n return parseUtil_js_1.INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n // return value is ignored\n executeRefinement(inner.value);\n return { status: status.value, value: inner.value };\n }\n else {\n return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((inner) => {\n if (inner.status === \"aborted\")\n return parseUtil_js_1.INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n return executeRefinement(inner.value).then(() => {\n return { status: status.value, value: inner.value };\n });\n });\n }\n }\n if (effect.type === \"transform\") {\n if (ctx.common.async === false) {\n const base = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (!(0, parseUtil_js_1.isValid)(base))\n return parseUtil_js_1.INVALID;\n const result = effect.transform(base.value, checkCtx);\n if (result instanceof Promise) {\n throw new Error(`Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.`);\n }\n return { status: status.value, value: result };\n }\n else {\n return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((base) => {\n if (!(0, parseUtil_js_1.isValid)(base))\n return parseUtil_js_1.INVALID;\n return Promise.resolve(effect.transform(base.value, checkCtx)).then((result) => ({\n status: status.value,\n value: result,\n }));\n });\n }\n }\n util_js_1.util.assertNever(effect);\n }\n}\nexports.ZodEffects = ZodEffects;\nexports.ZodTransformer = ZodEffects;\nZodEffects.create = (schema, effect, params) => {\n return new ZodEffects({\n schema,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect,\n ...processCreateParams(params),\n });\n};\nZodEffects.createWithPreprocess = (preprocess, schema, params) => {\n return new ZodEffects({\n schema,\n effect: { type: \"preprocess\", transform: preprocess },\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n ...processCreateParams(params),\n });\n};\nclass ZodOptional extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === util_js_1.ZodParsedType.undefined) {\n return (0, parseUtil_js_1.OK)(undefined);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nexports.ZodOptional = ZodOptional;\nZodOptional.create = (type, params) => {\n return new ZodOptional({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodOptional,\n ...processCreateParams(params),\n });\n};\nclass ZodNullable extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === util_js_1.ZodParsedType.null) {\n return (0, parseUtil_js_1.OK)(null);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nexports.ZodNullable = ZodNullable;\nZodNullable.create = (type, params) => {\n return new ZodNullable({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodNullable,\n ...processCreateParams(params),\n });\n};\nclass ZodDefault extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n let data = ctx.data;\n if (ctx.parsedType === util_js_1.ZodParsedType.undefined) {\n data = this._def.defaultValue();\n }\n return this._def.innerType._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n removeDefault() {\n return this._def.innerType;\n }\n}\nexports.ZodDefault = ZodDefault;\nZodDefault.create = (type, params) => {\n return new ZodDefault({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n defaultValue: typeof params.default === \"function\" ? params.default : () => params.default,\n ...processCreateParams(params),\n });\n};\nclass ZodCatch extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n // newCtx is used to not collect issues from inner types in ctx\n const newCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n };\n const result = this._def.innerType._parse({\n data: newCtx.data,\n path: newCtx.path,\n parent: {\n ...newCtx,\n },\n });\n if ((0, parseUtil_js_1.isAsync)(result)) {\n return result.then((result) => {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError_js_1.ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n });\n }\n else {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError_js_1.ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n }\n }\n removeCatch() {\n return this._def.innerType;\n }\n}\nexports.ZodCatch = ZodCatch;\nZodCatch.create = (type, params) => {\n return new ZodCatch({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n catchValue: typeof params.catch === \"function\" ? params.catch : () => params.catch,\n ...processCreateParams(params),\n });\n};\nclass ZodNaN extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== util_js_1.ZodParsedType.nan) {\n const ctx = this._getOrReturnCtx(input);\n (0, parseUtil_js_1.addIssueToContext)(ctx, {\n code: ZodError_js_1.ZodIssueCode.invalid_type,\n expected: util_js_1.ZodParsedType.nan,\n received: ctx.parsedType,\n });\n return parseUtil_js_1.INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n}\nexports.ZodNaN = ZodNaN;\nZodNaN.create = (params) => {\n return new ZodNaN({\n typeName: ZodFirstPartyTypeKind.ZodNaN,\n ...processCreateParams(params),\n });\n};\nexports.BRAND = Symbol(\"zod_brand\");\nclass ZodBranded extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const data = ctx.data;\n return this._def.type._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n unwrap() {\n return this._def.type;\n }\n}\nexports.ZodBranded = ZodBranded;\nclass ZodPipeline extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.common.async) {\n const handleAsync = async () => {\n const inResult = await this._def.in._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return parseUtil_js_1.INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return (0, parseUtil_js_1.DIRTY)(inResult.value);\n }\n else {\n return this._def.out._parseAsync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n };\n return handleAsync();\n }\n else {\n const inResult = this._def.in._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return parseUtil_js_1.INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return {\n status: \"dirty\",\n value: inResult.value,\n };\n }\n else {\n return this._def.out._parseSync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n }\n static create(a, b) {\n return new ZodPipeline({\n in: a,\n out: b,\n typeName: ZodFirstPartyTypeKind.ZodPipeline,\n });\n }\n}\nexports.ZodPipeline = ZodPipeline;\nclass ZodReadonly extends ZodType {\n _parse(input) {\n const result = this._def.innerType._parse(input);\n const freeze = (data) => {\n if ((0, parseUtil_js_1.isValid)(data)) {\n data.value = Object.freeze(data.value);\n }\n return data;\n };\n return (0, parseUtil_js_1.isAsync)(result) ? result.then((data) => freeze(data)) : freeze(result);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nexports.ZodReadonly = ZodReadonly;\nZodReadonly.create = (type, params) => {\n return new ZodReadonly({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodReadonly,\n ...processCreateParams(params),\n });\n};\n////////////////////////////////////////\n////////////////////////////////////////\n////////// //////////\n////////// z.custom //////////\n////////// //////////\n////////////////////////////////////////\n////////////////////////////////////////\nfunction cleanParams(params, data) {\n const p = typeof params === \"function\" ? params(data) : typeof params === \"string\" ? { message: params } : params;\n const p2 = typeof p === \"string\" ? { message: p } : p;\n return p2;\n}\nfunction custom(check, _params = {}, \n/**\n * @deprecated\n *\n * Pass `fatal` into the params object instead:\n *\n * ```ts\n * z.string().custom((val) => val.length > 5, { fatal: false })\n * ```\n *\n */\nfatal) {\n if (check)\n return ZodAny.create().superRefine((data, ctx) => {\n const r = check(data);\n if (r instanceof Promise) {\n return r.then((r) => {\n if (!r) {\n const params = cleanParams(_params, data);\n const _fatal = params.fatal ?? fatal ?? true;\n ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n }\n });\n }\n if (!r) {\n const params = cleanParams(_params, data);\n const _fatal = params.fatal ?? fatal ?? true;\n ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n }\n return;\n });\n return ZodAny.create();\n}\nexports.late = {\n object: ZodObject.lazycreate,\n};\nvar ZodFirstPartyTypeKind;\n(function (ZodFirstPartyTypeKind) {\n ZodFirstPartyTypeKind[\"ZodString\"] = \"ZodString\";\n ZodFirstPartyTypeKind[\"ZodNumber\"] = \"ZodNumber\";\n ZodFirstPartyTypeKind[\"ZodNaN\"] = \"ZodNaN\";\n ZodFirstPartyTypeKind[\"ZodBigInt\"] = \"ZodBigInt\";\n ZodFirstPartyTypeKind[\"ZodBoolean\"] = \"ZodBoolean\";\n ZodFirstPartyTypeKind[\"ZodDate\"] = \"ZodDate\";\n ZodFirstPartyTypeKind[\"ZodSymbol\"] = \"ZodSymbol\";\n ZodFirstPartyTypeKind[\"ZodUndefined\"] = \"ZodUndefined\";\n ZodFirstPartyTypeKind[\"ZodNull\"] = \"ZodNull\";\n ZodFirstPartyTypeKind[\"ZodAny\"] = \"ZodAny\";\n ZodFirstPartyTypeKind[\"ZodUnknown\"] = \"ZodUnknown\";\n ZodFirstPartyTypeKind[\"ZodNever\"] = \"ZodNever\";\n ZodFirstPartyTypeKind[\"ZodVoid\"] = \"ZodVoid\";\n ZodFirstPartyTypeKind[\"ZodArray\"] = \"ZodArray\";\n ZodFirstPartyTypeKind[\"ZodObject\"] = \"ZodObject\";\n ZodFirstPartyTypeKind[\"ZodUnion\"] = \"ZodUnion\";\n ZodFirstPartyTypeKind[\"ZodDiscriminatedUnion\"] = \"ZodDiscriminatedUnion\";\n ZodFirstPartyTypeKind[\"ZodIntersection\"] = \"ZodIntersection\";\n ZodFirstPartyTypeKind[\"ZodTuple\"] = \"ZodTuple\";\n ZodFirstPartyTypeKind[\"ZodRecord\"] = \"ZodRecord\";\n ZodFirstPartyTypeKind[\"ZodMap\"] = \"ZodMap\";\n ZodFirstPartyTypeKind[\"ZodSet\"] = \"ZodSet\";\n ZodFirstPartyTypeKind[\"ZodFunction\"] = \"ZodFunction\";\n ZodFirstPartyTypeKind[\"ZodLazy\"] = \"ZodLazy\";\n ZodFirstPartyTypeKind[\"ZodLiteral\"] = \"ZodLiteral\";\n ZodFirstPartyTypeKind[\"ZodEnum\"] = \"ZodEnum\";\n ZodFirstPartyTypeKind[\"ZodEffects\"] = \"ZodEffects\";\n ZodFirstPartyTypeKind[\"ZodNativeEnum\"] = \"ZodNativeEnum\";\n ZodFirstPartyTypeKind[\"ZodOptional\"] = \"ZodOptional\";\n ZodFirstPartyTypeKind[\"ZodNullable\"] = \"ZodNullable\";\n ZodFirstPartyTypeKind[\"ZodDefault\"] = \"ZodDefault\";\n ZodFirstPartyTypeKind[\"ZodCatch\"] = \"ZodCatch\";\n ZodFirstPartyTypeKind[\"ZodPromise\"] = \"ZodPromise\";\n ZodFirstPartyTypeKind[\"ZodBranded\"] = \"ZodBranded\";\n ZodFirstPartyTypeKind[\"ZodPipeline\"] = \"ZodPipeline\";\n ZodFirstPartyTypeKind[\"ZodReadonly\"] = \"ZodReadonly\";\n})(ZodFirstPartyTypeKind || (exports.ZodFirstPartyTypeKind = ZodFirstPartyTypeKind = {}));\n// requires TS 4.4+\nclass Class {\n constructor(..._) { }\n}\nconst instanceOfType = (\n// const instanceOfType = <T extends new (...args: any[]) => any>(\ncls, params = {\n message: `Input not instance of ${cls.name}`,\n}) => custom((data) => data instanceof cls, params);\nexports.instanceof = instanceOfType;\nconst stringType = ZodString.create;\nexports.string = stringType;\nconst numberType = ZodNumber.create;\nexports.number = numberType;\nconst nanType = ZodNaN.create;\nexports.nan = nanType;\nconst bigIntType = ZodBigInt.create;\nexports.bigint = bigIntType;\nconst booleanType = ZodBoolean.create;\nexports.boolean = booleanType;\nconst dateType = ZodDate.create;\nexports.date = dateType;\nconst symbolType = ZodSymbol.create;\nexports.symbol = symbolType;\nconst undefinedType = ZodUndefined.create;\nexports.undefined = undefinedType;\nconst nullType = ZodNull.create;\nexports.null = nullType;\nconst anyType = ZodAny.create;\nexports.any = anyType;\nconst unknownType = ZodUnknown.create;\nexports.unknown = unknownType;\nconst neverType = ZodNever.create;\nexports.never = neverType;\nconst voidType = ZodVoid.create;\nexports.void = voidType;\nconst arrayType = ZodArray.create;\nexports.array = arrayType;\nconst objectType = ZodObject.create;\nexports.object = objectType;\nconst strictObjectType = ZodObject.strictCreate;\nexports.strictObject = strictObjectType;\nconst unionType = ZodUnion.create;\nexports.union = unionType;\nconst discriminatedUnionType = ZodDiscriminatedUnion.create;\nexports.discriminatedUnion = discriminatedUnionType;\nconst intersectionType = ZodIntersection.create;\nexports.intersection = intersectionType;\nconst tupleType = ZodTuple.create;\nexports.tuple = tupleType;\nconst recordType = ZodRecord.create;\nexports.record = recordType;\nconst mapType = ZodMap.create;\nexports.map = mapType;\nconst setType = ZodSet.create;\nexports.set = setType;\nconst functionType = ZodFunction.create;\nexports.function = functionType;\nconst lazyType = ZodLazy.create;\nexports.lazy = lazyType;\nconst literalType = ZodLiteral.create;\nexports.literal = literalType;\nconst enumType = ZodEnum.create;\nexports.enum = enumType;\nconst nativeEnumType = ZodNativeEnum.create;\nexports.nativeEnum = nativeEnumType;\nconst promiseType = ZodPromise.create;\nexports.promise = promiseType;\nconst effectsType = ZodEffects.create;\nexports.effect = effectsType;\nexports.transformer = effectsType;\nconst optionalType = ZodOptional.create;\nexports.optional = optionalType;\nconst nullableType = ZodNullable.create;\nexports.nullable = nullableType;\nconst preprocessType = ZodEffects.createWithPreprocess;\nexports.preprocess = preprocessType;\nconst pipelineType = ZodPipeline.create;\nexports.pipeline = pipelineType;\nconst ostring = () => stringType().optional();\nexports.ostring = ostring;\nconst onumber = () => numberType().optional();\nexports.onumber = onumber;\nconst oboolean = () => booleanType().optional();\nexports.oboolean = oboolean;\nexports.coerce = {\n string: ((arg) => ZodString.create({ ...arg, coerce: true })),\n number: ((arg) => ZodNumber.create({ ...arg, coerce: true })),\n boolean: ((arg) => ZodBoolean.create({\n ...arg,\n coerce: true,\n })),\n bigint: ((arg) => ZodBigInt.create({ ...arg, coerce: true })),\n date: ((arg) => ZodDate.create({ ...arg, coerce: true })),\n};\nexports.NEVER = parseUtil_js_1.INVALID;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./errors.cjs\"), exports);\n__exportStar(require(\"./helpers/parseUtil.cjs\"), exports);\n__exportStar(require(\"./helpers/typeAliases.cjs\"), exports);\n__exportStar(require(\"./helpers/util.cjs\"), exports);\n__exportStar(require(\"./types.cjs\"), exports);\n__exportStar(require(\"./ZodError.cjs\"), exports);\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.z = void 0;\nconst z = __importStar(require(\"./v3/external.cjs\"));\nexports.z = z;\n__exportStar(require(\"./v3/external.cjs\"), exports);\nexports.default = z;\n","\"use strict\";\n/**\n * ACP Tool Input/Output Schema 定义\n *\n * 用于约束 ACP 协议中 ToolCallUpdate 的 rawInput 和 rawOutput 字段\n * 基于 getCraftToolProvider 使用的工具定义\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ToolOutputSchemas = exports.ToolInputSchemas = void 0;\nexports.validateToolInput = validateToolInput;\nexports.validateToolOutput = validateToolOutput;\nconst zod_1 = require(\"zod\");\n// ============================================================================\n// Zod Schema 定义 (用于运行时验证)\n// ============================================================================\n/**\n * 工具输入 Schema 定义\n * 用于验证和约束 rawInput\n */\nexports.ToolInputSchemas = {\n list_dir: zod_1.z.object({\n target_directory: zod_1.z.string().describe('要列出内容的目录路径'),\n ignore_globs: zod_1.z.string().optional().describe('可选的 glob 模式数组,用于忽略特定文件'),\n }),\n search_file: zod_1.z.object({\n target_directory: zod_1.z.string().describe('搜索的目录绝对路径'),\n pattern: zod_1.z.string().describe('文件模式(如 \"*.js\"),支持通配符'),\n recursive: zod_1.z.boolean().describe('是否递归搜索子目录'),\n caseSensitive: zod_1.z.boolean().describe('是否区分大小写'),\n }),\n read_file: zod_1.z.object({\n filePath: zod_1.z.string().describe('要读取的文件的绝对路径'),\n offset: zod_1.z.number().optional().describe('开始读取的行号'),\n limit: zod_1.z.number().optional().describe('要读取的行数'),\n }),\n read_lints: zod_1.z.object({\n paths: zod_1.z.string().optional().describe('要读取 lint 错误的文件或目录路径'),\n }),\n rag_search: zod_1.z.object({\n queryString: zod_1.z.string().describe('用户的实际问题或搜索查询'),\n knowledgeBaseNames: zod_1.z.string().describe('知识库名称,多个用逗号分隔'),\n }),\n read_rules: zod_1.z.object({\n ruleNames: zod_1.z.string().describe('要读取的规则关键词,用逗号分隔,格式:{ruleName}_{ruleId}'),\n }),\n mcp_get_tool_description: zod_1.z.object({\n toolRequests: zod_1.z.string().describe('JSON 字符串,二维数组格式:[[\"server1\", \"tool1\"], [\"server2\", \"tool2\"]]'),\n }),\n mcp_call_tool: zod_1.z.object({\n serverName: zod_1.z.string().describe('MCP 服务器名称'),\n toolName: zod_1.z.string().describe('要调用的工具名称'),\n arguments: zod_1.z.string().describe('目标 MCP 工具的参数,JSON 格式字符串'),\n maxOutputLength: zod_1.z.number().optional().describe('控制工具输出的最大长度,默认 200000'),\n }),\n fetch_mcp_resource: zod_1.z.object({\n server: zod_1.z.string().describe('MCP 服务器标识符'),\n uri: zod_1.z.string().describe('要读取的资源 URI'),\n arguments: zod_1.z.record(zod_1.z.unknown()).optional().describe('资源模板的参数'),\n downloadPath: zod_1.z.string().optional().describe('可选的绝对路径,用于保存资源到磁盘'),\n }),\n create_rule: zod_1.z.object({\n ruleScope: zod_1.z.string().describe('规则范围,project rule 或 user rule'),\n ruleName: zod_1.z.string().describe('规则文件名,不带扩展名'),\n ruleType: zod_1.z.string().describe('规则类型,always、manual 或 requested'),\n ruleContent: zod_1.z.string().describe('规则内容,使用 Markdown 格式'),\n ruleDescription: zod_1.z.string().optional().describe('规则描述,使用 Markdown 格式'),\n }),\n update_memory: zod_1.z.object({\n action: zod_1.z.enum(['create', 'update', 'delete']).optional().describe('执行的操作'),\n existing_knowledge_id: zod_1.z.string().optional().describe('更新或删除时必需,现有记忆的 ID'),\n knowledge_to_store: zod_1.z.string().optional().describe('要存储的特定记忆'),\n title: zod_1.z.string().optional().describe('记忆的标题'),\n }),\n search_content: zod_1.z.object({\n pattern: zod_1.z.string().describe('要搜索的关键字或正则表达式模式'),\n directory: zod_1.z.string().describe('要搜索的目录的绝对路径'),\n fileTypes: zod_1.z.string().optional().describe('可选的逗号分隔文件扩展名'),\n contextBefore: zod_1.z.number().optional().describe('每个匹配前显示的行数'),\n contextAfter: zod_1.z.number().optional().describe('每个匹配后显示的行数'),\n contextAround: zod_1.z.number().optional().describe('每个匹配前后显示的行数'),\n outputMode: zod_1.z.string().optional().describe('输出模式:content、files_with_matches 或 count'),\n caseSensitive: zod_1.z.boolean().optional().describe('是否区分大小写'),\n }),\n write_to_file: zod_1.z.object({\n filePath: zod_1.z.string().describe('目标文件的绝对路径'),\n content: zod_1.z.string().describe('要写入的内容'),\n }),\n replace_in_file: zod_1.z.object({\n filePath: zod_1.z.string().describe('要修改的文件的绝对路径'),\n old_str: zod_1.z.string().describe('要替换的文本'),\n new_str: zod_1.z.string().describe('替换后的文本'),\n }),\n delete_file: zod_1.z.object({\n target_file: zod_1.z.string().describe('要删除的文件的绝对路径'),\n explanation: zod_1.z.string().optional().describe('为什么使用此工具的一句话解释'),\n }),\n execute_command: zod_1.z.object({\n command: zod_1.z.string().describe('要执行的 CLI 命令'),\n requires_approval: zod_1.z.boolean().describe('命令是否需要用户批准'),\n }),\n preview_url: zod_1.z.object({\n url: zod_1.z.string().describe('要打开的完整、有效的 HTTP/HTTPS URL'),\n }),\n ask_followup_question: zod_1.z.object({\n questions: zod_1.z.array(zod_1.z.object({\n question: zod_1.z.string(),\n header: zod_1.z.string().max(12),\n options: zod_1.z.array(zod_1.z.object({\n label: zod_1.z.string().max(50),\n description: zod_1.z.string(),\n })).min(2).max(4),\n multiSelect: zod_1.z.boolean().optional(),\n })).min(1).max(4),\n }),\n invoke_integration: zod_1.z.object({}).passthrough(),\n call_integration: zod_1.z.object({}).passthrough(),\n search_integration_tool: zod_1.z.object({}).passthrough(),\n supabase_get_logs: zod_1.z.object({}).passthrough(),\n supabase_execute_sql: zod_1.z.object({}).passthrough(),\n supabase_apply_migration: zod_1.z.object({}).passthrough(),\n supabase_list_migration: zod_1.z.object({}).passthrough(),\n supabase_list_tables: zod_1.z.object({}).passthrough(),\n cloud_studio_fetch_log: zod_1.z.object({}).passthrough(),\n cloud_studio_execute_command: zod_1.z.object({}).passthrough(),\n cloud_studio_deploy_sandbox: zod_1.z.object({}).passthrough(),\n component_get_prompt: zod_1.z.object({}).passthrough(),\n web_fetch: zod_1.z.object({\n url: zod_1.z.string().describe('要获取内容的 URL'),\n fetchInfo: zod_1.z.string().describe('用户想要获取的信息描述'),\n }),\n use_skill: zod_1.z.object({\n command: zod_1.z.string().describe('技能名称(不含参数),如 \"pdf\" 或 \"xlsx\"'),\n }),\n web_search: zod_1.z.object({\n explanation: zod_1.z.string().describe('为什么使用此工具的一句话解释'),\n searchTerm: zod_1.z.string().describe('要在网络上搜索的搜索词'),\n }),\n task: zod_1.z.object({\n subagent_name: zod_1.z.string().describe('要调用的子代理名称'),\n description: zod_1.z.string().describe('任务的简短描述(3-5 个词)'),\n prompt: zod_1.z.string().describe('子代理要执行的任务'),\n subagent_path: zod_1.z.string().optional().describe('子代理定义文件的路径'),\n }),\n codebase_search: zod_1.z.object({\n query: zod_1.z.string().describe('关于你想理解的内容的完整问题'),\n path: zod_1.z.string().describe('限制搜索范围的目录路径前缀'),\n limit: zod_1.z.number().max(100).optional().describe('返回的最大结果数,默认 10'),\n }),\n lsp: zod_1.z.object({}).passthrough(),\n spec_create: zod_1.z.object({\n name: zod_1.z.string().describe('Plan 名称,用作稳定标识符/文件名'),\n overview: zod_1.z.string().describe('用一两句话精确概括本次 plan 的主要内容'),\n relative_history: zod_1.z.string().describe('准备阶段的上下文,包含用户需求、代码位置、额外上下文等'),\n }),\n spec_update: zod_1.z.object({\n status: zod_1.z.enum(['prepare', 'ready', 'building', 'finished']).optional().describe('Plan 状态'),\n }),\n};\n/**\n * 工具输出 Schema 定义\n * 用于验证和约束 rawOutput\n */\nexports.ToolOutputSchemas = {\n list_dir: zod_1.z.object({\n type: zod_1.z.literal('list_files_result'),\n files: zod_1.z.array(zod_1.z.object({\n filePath: zod_1.z.string(),\n size: zod_1.z.string(),\n modifyTime: zod_1.z.string(),\n })),\n root: zod_1.z.string(),\n listing: zod_1.z.string().optional(),\n }),\n search_file: zod_1.z.object({\n type: zod_1.z.literal('search_file_result'),\n path: zod_1.z.string(),\n pattern: zod_1.z.string(),\n recursive: zod_1.z.boolean().optional(),\n caseSensitive: zod_1.z.boolean().optional(),\n results: zod_1.z.array(zod_1.z.object({\n filePath: zod_1.z.string(),\n size: zod_1.z.string(),\n modifyTime: zod_1.z.string(),\n })),\n }),\n read_file: zod_1.z.object({\n type: zod_1.z.literal('read_file_result'),\n path: zod_1.z.string(),\n content: zod_1.z.string(),\n totalLineCount: zod_1.z.number(),\n hasMore: zod_1.z.boolean(),\n diagnostic: zod_1.z.string().optional(),\n hint: zod_1.z.string().optional(),\n image: zod_1.z.object({\n data: zod_1.z.string(),\n mimeType: zod_1.z.string(),\n }).optional(),\n }),\n read_lints: zod_1.z.object({\n type: zod_1.z.literal('read_lints_result'),\n diagnostics: zod_1.z.array(zod_1.z.string()),\n totalCount: zod_1.z.number().optional(),\n hint: zod_1.z.string().optional(),\n isTruncated: zod_1.z.boolean().optional(),\n }),\n rag_search: zod_1.z.object({\n type: zod_1.z.literal('knowledge_base_result'),\n selectedKnowledgeBases: zod_1.z.string(),\n queryInput: zod_1.z.string(),\n }),\n read_rules: zod_1.z.object({\n type: zod_1.z.literal('rule_match_result'),\n ruleDescription: zod_1.z.string(),\n filePaths: zod_1.z.array(zod_1.z.string()),\n }),\n mcp_get_tool_description: zod_1.z.object({}).passthrough(),\n mcp_call_tool: zod_1.z.object({\n type: zod_1.z.literal('mcp_call_tool_result'),\n serverName: zod_1.z.string(),\n toolName: zod_1.z.string(),\n data: zod_1.z.array(zod_1.z.union([\n zod_1.z.object({\n type: zod_1.z.literal('text'),\n text: zod_1.z.string(),\n }),\n zod_1.z.object({\n type: zod_1.z.literal('image'),\n data: zod_1.z.string(),\n mimeType: zod_1.z.string(),\n }),\n zod_1.z.object({\n type: zod_1.z.literal('resource'),\n resource: zod_1.z.object({\n uri: zod_1.z.string(),\n mimeType: zod_1.z.string().optional(),\n text: zod_1.z.string().optional(),\n blob: zod_1.z.string().optional(),\n }),\n }),\n ])),\n isError: zod_1.z.boolean().optional(),\n error: zod_1.z.unknown().optional(),\n hint: zod_1.z.string().optional(),\n }),\n fetch_mcp_resource: zod_1.z.object({\n type: zod_1.z.literal('fetch_mcp_resource_result'),\n server: zod_1.z.string(),\n uri: zod_1.z.string(),\n content: zod_1.z.string(),\n downloadPath: zod_1.z.string().optional(),\n }),\n create_rule: zod_1.z.object({\n type: zod_1.z.literal('rule_create_result'),\n ruleName: zod_1.z.string(),\n createState: zod_1.z.enum(['success', 'invoke', 'cancelled']),\n hint: zod_1.z.string().optional(),\n filePath: zod_1.z.string().optional(),\n }),\n update_memory: zod_1.z.object({\n type: zod_1.z.literal('update_memory_result'),\n success: zod_1.z.boolean(),\n message: zod_1.z.string(),\n action: zod_1.z.enum(['create', 'update', 'delete']),\n knowledge_id: zod_1.z.string().optional(),\n }),\n search_content: zod_1.z.object({\n type: zod_1.z.literal('search_content_result'),\n directory: zod_1.z.string(),\n pattern: zod_1.z.string(),\n fileTypes: zod_1.z.string(),\n matches: zod_1.z.array(zod_1.z.object({\n filePath: zod_1.z.string(),\n content: zod_1.z.string(),\n startLine: zod_1.z.number(),\n endLine: zod_1.z.number(),\n size: zod_1.z.string(),\n modifyTime: zod_1.z.string(),\n })),\n totalCount: zod_1.z.number(),\n hasMore: zod_1.z.boolean(),\n offset: zod_1.z.number(),\n limit: zod_1.z.number(),\n contextBefore: zod_1.z.number(),\n contextAfter: zod_1.z.number(),\n contextAround: zod_1.z.number().optional(),\n outputMode: zod_1.z.string(),\n caseSensitive: zod_1.z.boolean(),\n hint: zod_1.z.string().optional(),\n }),\n write_to_file: zod_1.z.object({\n type: zod_1.z.literal('write_to_file_result'),\n path: zod_1.z.string(),\n addLineCount: zod_1.z.number(),\n removedLines: zod_1.z.number(),\n addedChars: zod_1.z.number().optional(),\n removedChars: zod_1.z.number().optional(),\n bytesWritten: zod_1.z.number(),\n isNewFile: zod_1.z.boolean(),\n oldContent: zod_1.z.string().optional(),\n diagnostic: zod_1.z.string().optional(),\n }),\n replace_in_file: zod_1.z.object({\n type: zod_1.z.literal('replace_in_file_result'),\n path: zod_1.z.string(),\n addLineCount: zod_1.z.number().optional(),\n removedLines: zod_1.z.number().optional(),\n addedChars: zod_1.z.number().optional(),\n removedChars: zod_1.z.number().optional(),\n matchCount: zod_1.z.number().optional(),\n hint: zod_1.z.string().optional(),\n diagnosticChange: zod_1.z.object({\n added: zod_1.z.string(),\n removed: zod_1.z.string(),\n unchanged: zod_1.z.string(),\n }).optional(),\n }),\n delete_file: zod_1.z.object({\n type: zod_1.z.literal('delete_file_result'),\n path: zod_1.z.string(),\n recursive: zod_1.z.boolean(),\n hint: zod_1.z.string().optional(),\n }),\n execute_command: zod_1.z.object({\n type: zod_1.z.literal('execute_command_result'),\n stdout: zod_1.z.string(),\n stderr: zod_1.z.string(),\n exitCode: zod_1.z.number(),\n hint: zod_1.z.string().optional(),\n serviceInfo: zod_1.z.object({\n isWatchCommand: zod_1.z.boolean(),\n isServiceOutput: zod_1.z.boolean(),\n serviceReady: zod_1.z.boolean(),\n message: zod_1.z.string(),\n }).optional(),\n use_standalone_terminal: zod_1.z.boolean().optional(),\n }),\n preview_url: zod_1.z.object({\n type: zod_1.z.literal('preview_tool_result'),\n url: zod_1.z.string(),\n message: zod_1.z.string(),\n }),\n ask_followup_question: zod_1.z.object({\n type: zod_1.z.literal('multi_question_result'),\n questions: zod_1.z.array(zod_1.z.object({\n id: zod_1.z.string(),\n question: zod_1.z.string(),\n options: zod_1.z.array(zod_1.z.string()),\n multiSelect: zod_1.z.boolean().optional(),\n title: zod_1.z.string().optional(),\n })),\n answers: zod_1.z.record(zod_1.z.union([zod_1.z.string(), zod_1.z.array(zod_1.z.string())])),\n message: zod_1.z.string(),\n }),\n invoke_integration: zod_1.z.object({\n type: zod_1.z.literal('invoke_integration_tool_result'),\n recommend: zod_1.z.object({\n id: zod_1.z.string(),\n type: zod_1.z.string(),\n status: zod_1.z.enum(['connected', 'disconnected']),\n }),\n message: zod_1.z.string(),\n }),\n call_integration: zod_1.z.object({\n type: zod_1.z.literal('call_integration_tool_result'),\n integrationId: zod_1.z.string(),\n toolName: zod_1.z.string(),\n data: zod_1.z.object({\n type: zod_1.z.literal('text'),\n text: zod_1.z.string(),\n }),\n isError: zod_1.z.boolean().optional(),\n error: zod_1.z.unknown().optional(),\n }),\n search_integration_tool: zod_1.z.object({\n type: zod_1.z.literal('search_integration_tool_result'),\n data: zod_1.z.array(zod_1.z.object({\n integrationId: zod_1.z.string(),\n integrationName: zod_1.z.string(),\n toolName: zod_1.z.string(),\n description: zod_1.z.string(),\n inputSchema: zod_1.z.record(zod_1.z.unknown()),\n })),\n hint: zod_1.z.string().optional(),\n }),\n supabase_get_logs: zod_1.z.object({\n type: zod_1.z.enum([\n 'supabase_get_logs_result',\n 'supabase_execute_sql_result',\n 'supabase_apply_migration_result',\n 'supabase_list_migration_result',\n 'supabase_list_tables_result',\n ]),\n message: zod_1.z.string(),\n }),\n supabase_execute_sql: zod_1.z.object({\n type: zod_1.z.enum([\n 'supabase_get_logs_result',\n 'supabase_execute_sql_result',\n 'supabase_apply_migration_result',\n 'supabase_list_migration_result',\n 'supabase_list_tables_result',\n ]),\n message: zod_1.z.string(),\n }),\n supabase_apply_migration: zod_1.z.object({\n type: zod_1.z.enum([\n 'supabase_get_logs_result',\n 'supabase_execute_sql_result',\n 'supabase_apply_migration_result',\n 'supabase_list_migration_result',\n 'supabase_list_tables_result',\n ]),\n message: zod_1.z.string(),\n }),\n supabase_list_migration: zod_1.z.object({\n type: zod_1.z.enum([\n 'supabase_get_logs_result',\n 'supabase_execute_sql_result',\n 'supabase_apply_migration_result',\n 'supabase_list_migration_result',\n 'supabase_list_tables_result',\n ]),\n message: zod_1.z.string(),\n }),\n supabase_list_tables: zod_1.z.object({\n type: zod_1.z.enum([\n 'supabase_get_logs_result',\n 'supabase_execute_sql_result',\n 'supabase_apply_migration_result',\n 'supabase_list_migration_result',\n 'supabase_list_tables_result',\n ]),\n message: zod_1.z.string(),\n }),\n cloud_studio_fetch_log: zod_1.z.object({\n type: zod_1.z.literal('cloud_studio_fetch_log_result'),\n success: zod_1.z.boolean(),\n logs: zod_1.z.record(zod_1.z.string()),\n }),\n cloud_studio_execute_command: zod_1.z.object({\n type: zod_1.z.literal('cloud_studio_execute_command_result'),\n success: zod_1.z.boolean(),\n message: zod_1.z.string(),\n }),\n cloud_studio_deploy_sandbox: zod_1.z.object({\n type: zod_1.z.literal('cloud_studio_integration_result'),\n previewUrl: zod_1.z.string().optional(),\n steps: zod_1.z.array(zod_1.z.object({\n status: zod_1.z.enum(['idle', 'success', 'running', 'error']),\n name: zod_1.z.enum(['createSandbox', 'uploadProject', 'installDependencies', 'startService', 'preview']),\n error: zod_1.z.object({\n code: zod_1.z.number().optional(),\n message: zod_1.z.string().optional(),\n }).optional(),\n })),\n }),\n component_get_prompt: zod_1.z.object({\n type: zod_1.z.literal('component_get_prompt_result'),\n componentType: zod_1.z.string(),\n webFramework: zod_1.z.string(),\n data: zod_1.z.object({\n type: zod_1.z.literal('text'),\n text: zod_1.z.string(),\n }),\n }),\n web_fetch: zod_1.z.object({\n type: zod_1.z.literal('web_fetch_tool_result'),\n message: zod_1.z.string(),\n data: zod_1.z.string(),\n loading: zod_1.z.string().optional(),\n title: zod_1.z.string().optional(),\n favicon: zod_1.z.string().optional(),\n }),\n use_skill: zod_1.z.object({\n type: zod_1.z.literal('use_skill_tool_result'),\n commandMessage: zod_1.z.string(),\n message: zod_1.z.string(),\n }),\n web_search: zod_1.z.object({\n type: zod_1.z.literal('web_search_tool_result'),\n data: zod_1.z.array(zod_1.z.object({\n passage: zod_1.z.string(),\n uri: zod_1.z.string(),\n site: zod_1.z.string(),\n title: zod_1.z.string(),\n snippets: zod_1.z.array(zod_1.z.string()).optional(),\n content: zod_1.z.string().optional(),\n })),\n searchInput: zod_1.z.string().optional(),\n }),\n task: zod_1.z.object({\n type: zod_1.z.literal('task_tool_result'),\n toolInfo: zod_1.z.array(zod_1.z.object({\n name: zod_1.z.string(),\n info: zod_1.z.string(),\n needApprove: zod_1.z.boolean().optional(),\n toolCallId: zod_1.z.string().optional(),\n executeStatus: zod_1.z.enum(['ing', 'completed', 'cancel', 'fail']).optional(),\n })).optional(),\n startCallTool: zod_1.z.boolean().optional(),\n finalResult: zod_1.z.string().optional(),\n toolCallBrief: zod_1.z.string().optional(),\n }),\n codebase_search: zod_1.z.object({\n type: zod_1.z.literal('codebase_search_result'),\n query: zod_1.z.string(),\n path: zod_1.z.string(),\n content: zod_1.z.string(),\n }),\n lsp: zod_1.z.object({\n type: zod_1.z.literal('lsp_tool_result'),\n operation: zod_1.z.string(),\n result: zod_1.z.string(),\n resultCount: zod_1.z.number().optional(),\n fileCount: zod_1.z.number().optional(),\n character: zod_1.z.number().optional(),\n }),\n spec_create: zod_1.z.object({\n type: zod_1.z.literal('plan_create_tool_result'),\n message: zod_1.z.string(),\n data: zod_1.z.string(),\n }),\n spec_update: zod_1.z.object({\n type: zod_1.z.literal('plan_update_tool_result'),\n status: zod_1.z.enum(['prepare', 'ready', 'building', 'finished']),\n data: zod_1.z.string(),\n reminder: zod_1.z.string(),\n }),\n};\n// ============================================================================\n// 工具 Schema 验证工具函数\n// ============================================================================\n/**\n * 验证工具输入\n * @param toolName 工具名称\n * @param input 输入数据\n * @returns 验证结果\n */\nfunction validateToolInput(toolName, input) {\n const schema = exports.ToolInputSchemas[toolName];\n const result = schema.safeParse(input);\n if (result.success) {\n return { success: true, data: result.data };\n }\n return { success: false, error: result.error };\n}\n/**\n * 验证工具输出\n * @param toolName 工具名称\n * @param output 输出数据\n * @returns 验证结果\n */\nfunction validateToolOutput(toolName, output) {\n const schema = exports.ToolOutputSchemas[toolName];\n const result = schema.safeParse(output);\n if (result.success) {\n return { success: true, data: result.data };\n }\n return { success: false, error: result.error };\n}\n//# sourceMappingURL=tool-schemas.js.map","\"use strict\";\n/**\n * Mock Agent Provider\n *\n * 职责:\n * 1. 专门用于 Mock 数据验证链路\n * 2. 返回符合 ACP 协议的模拟数据\n * 3. 用于前端开发和测试阶段\n *\n * Mock 数据包括:\n * - 流式文本消息 (agent_message_chunk)\n * - 嵌入资源内容\n * - 资源链接\n * - 工具调用流程 (tool_call + tool_call_update)\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MockAgentProvider = exports.mockNewSessionResponse = exports.mockInitializeResponse = void 0;\nconst tool_schemas_js_1 = require(\"./tool-schemas.js\");\n/**\n * ACP 协议 Mock 数据 - 初始化响应\n */\nexports.mockInitializeResponse = {\n protocolVersion: 1,\n agentCapabilities: {\n loadSession: true,\n promptCapabilities: {\n image: true,\n audio: false,\n embeddedContext: true\n },\n mcpCapabilities: {\n http: true,\n sse: true\n }\n }\n};\n/**\n * ACP 协议 Mock 数据 - 会话创建响应\n */\nconst mockNewSessionResponse = (sessionId) => ({\n sessionId\n});\nexports.mockNewSessionResponse = mockNewSessionResponse;\n/**\n * Mock 会话数据存储\n * 每个会话都有对应的模拟历史消息\n */\nconst mockSessionHistories = new Map();\n// 初始化会话历史数据\nmockSessionHistories.set('1', [\n {\n type: 'user',\n content: '帮我开发一个五子棋游戏,需要包含以下功能:\\n1. 双人对战模式\\n2. 悔棋功能\\n3. 计时器',\n timestamp: Date.now() - 1800000 - 60000,\n },\n {\n type: 'assistant',\n content: '好的,我来帮你开发一个五子棋游戏。我会创建以下文件结构:\\n\\n- `index.html` - 主页面\\n- `game.js` - 游戏逻辑\\n- `style.css` - 样式文件\\n\\n让我开始创建这些文件...',\n timestamp: Date.now() - 1800000 - 50000,\n },\n {\n type: 'assistant',\n content: '我已经完成了所有文件的创建和修改。游戏支持双人对战、悔棋和计时功能。你可以直接在浏览器中打开 index.html 开始游戏。',\n timestamp: Date.now() - 1800000,\n },\n]);\nmockSessionHistories.set('2', [\n {\n type: 'user',\n content: '登录页面的样式有问题,按钮颜色不对齐,帮我修复一下',\n timestamp: Date.now() - 7200000 - 120000,\n },\n {\n type: 'assistant',\n content: '我来检查登录页面的样式。让我先看看相关的 CSS 文件...',\n timestamp: Date.now() - 7200000 - 100000,\n },\n {\n type: 'assistant',\n content: '样式问题已修复,请查看效果。主要修改了按钮的 flex 布局和颜色变量。',\n timestamp: Date.now() - 7200000,\n },\n]);\nmockSessionHistories.set('3', [\n {\n type: 'user',\n content: 'API 接口响应太慢了,需要添加缓存和错误重试机制',\n timestamp: Date.now() - 14400000 - 180000,\n },\n {\n type: 'assistant',\n content: '好的,我来优化 API 接口。我会实现:\\n1. Redis 缓存层\\n2. 指数退避重试策略\\n3. 请求去重',\n timestamp: Date.now() - 14400000 - 150000,\n },\n {\n type: 'assistant',\n content: '已添加缓存和错误重试机制。性能提升了约 60%。',\n timestamp: Date.now() - 14400000,\n },\n]);\nmockSessionHistories.set('4', [\n {\n type: 'user',\n content: '帮我为核心模块添加单元测试,覆盖率要达到 80% 以上',\n timestamp: Date.now() - 86400000 - 300000,\n },\n {\n type: 'assistant',\n content: '好的,我会使用 Jest 来编写单元测试。让我先看看核心模块的代码结构...',\n timestamp: Date.now() - 86400000 - 250000,\n },\n {\n type: 'assistant',\n content: '测试覆盖率已达到 85%,超过了目标。主要测试了:\\n- 用户认证逻辑\\n- 数据验证\\n- 错误处理',\n timestamp: Date.now() - 86400000,\n },\n]);\nclass MockAgentProvider {\n constructor(config = {}) {\n // ========== ACP 原生事件回调集合 ==========\n this.sessionUpdateCallbacks = new Set();\n this.permissionRequestResolvers = new Map();\n this.errorCallbacks = new Set();\n // Minimal connection tracking to keep API compatibility with previous SSE provider\n this.activeConnections = new Map();\n /**\n * Mock 模式下,等待用户权限决策的解析器集合\n * key: toolCallId -> resolver(outcome)\n */\n this.pendingPermissionResolvers = new Map();\n /**\n * Mock 模式下,已初始化的会话集合\n */\n this.initializedSessions = new Map();\n /**\n * 临时缓存当前正在发送的消息的 SessionUpdateParams\n * key: sessionId -> params[]\n * 在 sendMockMessage 开始时初始化,结束时保存到 mockSessionHistories\n */\n this.currentSessionUpdates = new Map();\n console.log('[MockAgentProvider] Initialized');\n // 初始化一些默认的 Mock session 数据\n this.initializeMockSessions();\n }\n setSessionMode(params) {\n throw new Error('Method not implemented.');\n }\n setSessionModel(params) {\n throw new Error('Method not implemented.');\n }\n extMethod(method, params) {\n throw new Error('Method not implemented.');\n }\n extNotification(method, params) {\n throw new Error('Method not implemented.');\n }\n /**\n * 初始化默认的 Mock session 数据\n */\n initializeMockSessions() {\n const mockSessions = [\n {\n sessionId: '1',\n cwd: '/Users/example/Project',\n mcpServers: [],\n createdAt: Date.now() - 3600000, // 1小时前\n },\n {\n sessionId: '2',\n cwd: '/Users/example/Project',\n mcpServers: [],\n createdAt: Date.now() - 7200000, // 2小时前\n },\n {\n sessionId: '3',\n cwd: '/Users/example/Project',\n mcpServers: [],\n createdAt: Date.now() - 86400000, // 1天前\n },\n ];\n mockSessions.forEach(session => {\n this.initializedSessions.set(session.sessionId, {\n cwd: session.cwd,\n mcpServers: session.mcpServers,\n createdAt: session.createdAt,\n });\n });\n console.log('[MockAgentProvider] Initialized mock sessions:', mockSessions.length);\n }\n /**\n * 从 PromptRequest 中提取文本内容\n * Provider 自己决定如何处理 ContentBlock 数组\n */\n extractTextFromRequest(request) {\n if (request.prompt && Array.isArray(request.prompt)) {\n return request.prompt\n .filter((block) => block.type === 'text')\n .map((block) => ('text' in block ? block.text : ''))\n .join('\\n');\n }\n return '';\n }\n /**\n * 发送消息 - 直接使用 Mock 数据\n * 接收 PromptRequest,由 Provider 决定如何处理\n */\n async sendMessage(request) {\n // 提取文本内容 - 这是 Provider 的职责\n const content = this.extractTextFromRequest(request);\n const sessionId = request.sessionId;\n console.log('[MockAgentProvider] Sending mock message:', { sessionId, content });\n try {\n // 直接使用 Mock 数据\n await this.sendMockMessage(sessionId, content);\n }\n catch (error) {\n console.error('[MockAgentProvider] Send message failed:', error);\n // 触发错误事件\n this.emitEvent({\n type: 'error',\n sessionId,\n timestamp: Date.now(),\n data: { error: error instanceof Error ? error.message : 'Unknown error' },\n });\n throw error;\n }\n }\n /**\n * 使用 Mock 数据模拟流式响应\n */\n async sendMockMessage(sessionId, content) {\n console.log('[MockAgentProvider] Using mock data for:', content);\n // ✅ 初始化临时事件缓存\n this.currentSessionUpdates.set(sessionId, []);\n // 发送连接成功事件\n this.emitEvent({\n type: 'connected',\n sessionId,\n timestamp: Date.now(),\n });\n // 模拟延迟\n await this.delay(300);\n // 1. 发送文本回复消息\n const messageId1 = `m-text-${Date.now()}`;\n const textReply = `我收到了你发送的「${content}」信息,这是符合 ACP 协议的 mock 数据。\\n\\n下面演示不同类型的 ContentBlock:\\n\\n`;\n await this.streamMockTextContent(sessionId, messageId1, textReply);\n await this.delay(500);\n // 2. 发送包含嵌入资源的回复\n const messageId2 = `m-resource-${Date.now()}`;\n await this.sendMockEmbeddedResource(sessionId, messageId2);\n await this.delay(500);\n // 3. 发送包含资源链接的回复\n const messageId3 = `m-link-${Date.now()}`;\n await this.sendMockResourceLink(sessionId, messageId3);\n await this.delay(500);\n // 4. 模拟工具调用流程\n const toolMessageId = `m-tool-${Date.now()}`;\n await this.sendMockEditContentToolCallFlow(sessionId, toolMessageId);\n await this.delay(500);\n const diffToolMessageId = `m-tool-d-${Date.now()}`;\n await this.sendMockEditDiffToolCallFlow(sessionId, diffToolMessageId);\n await this.delay(500);\n const readToolMessageId = `m-tool-r-${Date.now()}`;\n await this.sendMockReadContentToolCallFlow(sessionId, readToolMessageId);\n await this.delay(300);\n // 添加 search_file 和 search_content 的 mock 数据\n const searchContentMessageId = `m-tool-sc-${Date.now()}`;\n await this.sendMockSearchContentToolCallFlow(sessionId, searchContentMessageId);\n await this.delay(500);\n const searchFileMessageId = `m-tool-sf-${Date.now()}`;\n await this.sendMockSearchFileToolCallFlow(sessionId, searchFileMessageId);\n await this.delay(500);\n // 6. 发送 list_files 工具调用\n const listFilesMessageId = `m-tool-lf-${Date.now()}`;\n await this.sendMockListFilesToolCallFlow(sessionId, listFilesMessageId);\n await this.delay(500);\n // 7. 发送 ask_followup_question 工具调用\n const askFollowupMessageId = `m-tool-afq-${Date.now()}`;\n await this.sendMockAskFollowupQuestionToolCallFlow(sessionId, askFollowupMessageId);\n await this.delay(500);\n // 添加删除文件工具调用的 mock 数据\n const deleteFileMessageId = `m-tool-df-${Date.now()}`;\n await this.sendMockDeleteFileToolCallFlow(sessionId, deleteFileMessageId);\n await this.delay(300);\n // 8. 发送 execute_command 工具调用\n const executeCommandMessageId = `m-tool-ec-${Date.now()}`;\n await this.sendMockExecuteCommandToolCallFlow(sessionId, executeCommandMessageId);\n await this.delay(300);\n // 8.1 发送 execute_command 工具调用(需要权限确认)\n const executeCommandApprovalMessageId = `m-tool-ec-approval-${Date.now()}`;\n await this.sendMockExecuteCommandWithApprovalToolCallFlow(sessionId, executeCommandApprovalMessageId);\n await this.delay(300);\n // 8.2 发送 write_to_file 工具调用(需要权限确认)\n const writeFileApprovalMessageId = `m-tool-wtf-approval-${Date.now()}`;\n await this.sendMockWriteFileWithApprovalToolCallFlow(sessionId, writeFileApprovalMessageId);\n await this.delay(300);\n // 9. 发送 preview_url 工具调用 (测试 unknown tool)\n const previewUrlMessageId = `m-tool-pu-${Date.now()}`;\n await this.sendMockPreviewUrlToolCallFlow(sessionId, previewUrlMessageId);\n await this.delay(300);\n // 10. 发送 list_code_definition_names 工具调用 (测试 unknown tool)\n const listCodeDefMessageId = `m-tool-lcd-${Date.now()}`;\n await this.sendMockListCodeDefinitionNamesToolCallFlow(sessionId, listCodeDefMessageId);\n await this.delay(300);\n // 添加 web_fetch 工具调用的 mock 数据\n const webFetchMessageId = `m-tool-wf-${Date.now()}`;\n await this.sendMockWebFetchToolCallFlow(sessionId, webFetchMessageId);\n await this.delay(300);\n // 11. 发送 read_lints 工具调用\n const readLintsMessageId = `m-tool-rl-${Date.now()}`;\n await this.sendMockReadLintsToolCallFlow(sessionId, readLintsMessageId);\n await this.delay(300);\n // 10. 发送 web_search 工具调用\n const webSearchMessageId = `m-tool-ws-${Date.now()}`;\n await this.sendMockWebSearchToolCallFlow(sessionId, webSearchMessageId);\n await this.delay(300);\n // 发送完成事件\n this.emitEvent({\n type: 'done',\n sessionId,\n timestamp: Date.now(),\n });\n }\n /**\n * 流式发送 Mock 文本消息内容 (符合 ACP 协议的 agent_message_chunk)\n */\n async streamMockTextContent(sessionId, messageId, content) {\n const chunkSize = 10; // 每次发送 10 个字符\n for (let i = 0; i < content.length; i += chunkSize) {\n // 获取当前块的内容\n const chunk = content.substring(i, i + chunkSize);\n console.log(`Text Chunk: \"${chunk}\" | messageId: ${messageId} | sessionId: ${sessionId}`);\n this.emitEvent({\n type: 'session_update',\n sessionId,\n messageId,\n timestamp: Date.now(),\n notification: {\n sessionId,\n update: {\n sessionUpdate: 'agent_message_chunk',\n content: {\n type: 'text',\n text: chunk,\n }\n }\n },\n });\n // 模拟网络延迟\n await this.delay(50);\n }\n }\n /**\n * 延迟函数\n */\n delay(ms) {\n return new Promise(resolve => setTimeout(resolve, ms));\n }\n /**\n * 取消消息 (Mock 模式下直接完成)\n * @deprecated 使用 cancel 代替\n */\n async cancelMessage(sessionId) {\n console.log('[MockAgentProvider] Message cancelled:', sessionId);\n // 发送完成事件\n this.emitEvent({\n type: 'done',\n sessionId,\n timestamp: Date.now(),\n });\n }\n /**\n * ACP 协议: prompt - 发送用户消息\n *\n * Mock 实现: 复用 sendMessage\n */\n async prompt(request) {\n console.log('[MockAgentProvider] prompt called:', request);\n await this.sendMessage(request);\n // Mock 模式下,返回 end_turn 响应\n return {\n stopReason: 'end_turn',\n };\n }\n /**\n * ACP 协议: cancel - 取消消息\n *\n * Mock 实现: 复用 cancelMessage\n */\n async cancel(params) {\n console.log('[MockAgentProvider] cancel called:', params);\n return this.cancelMessage(params.sessionId);\n }\n // ========== ACP 原生事件监听器 ==========\n /**\n * 监听会话更新事件(ACP 协议原生)\n */\n onSessionUpdate(callback) {\n this.sessionUpdateCallbacks.add(callback);\n return () => {\n this.sessionUpdateCallbacks.delete(callback);\n };\n }\n /**\n * 监听权限请求事件(ACP 协议原生)\n */\n onRequestPermission(callback) {\n this.permissionRequestResolvers.set('__global__', callback);\n return () => {\n this.permissionRequestResolvers.delete('__global__');\n };\n }\n /**\n * 监听错误事件(扩展事件,非 ACP 标准协议)\n */\n onError(callback) {\n this.errorCallbacks.add(callback);\n return () => {\n this.errorCallbacks.delete(callback);\n };\n }\n /**\n * 触发会话更新事件(内部辅助方法)\n */\n emitSessionUpdate(params) {\n console.log('[MockAgentProvider] Emitting session update:', params, 'to', this.sessionUpdateCallbacks.size, 'callbacks');\n this.sessionUpdateCallbacks.forEach(callback => {\n try {\n callback(params);\n }\n catch (error) {\n console.error('[MockAgentProvider] Session update callback error:', error);\n }\n });\n }\n /**\n * 触发错误事件(内部辅助方法)\n */\n emitError(error, sessionId) {\n console.log('[MockAgentProvider] Emitting error:', error, 'for session:', sessionId);\n this.errorCallbacks.forEach(callback => {\n try {\n callback(error, sessionId);\n }\n catch (err) {\n console.error('[MockAgentProvider] Error callback error:', err);\n }\n });\n }\n /**\n * 向后兼容的 emitEvent 方法\n * 将旧的事件格式桥接到新的 ACP 原生事件\n */\n emitEvent(event) {\n var _a;\n // 根据 event.type 路由到对应的新方法\n if (event.type === 'error') {\n const error = ((_a = event.data) === null || _a === void 0 ? void 0 : _a.error) ? new Error(event.data.error) : new Error('Unknown error');\n this.emitError(error, event.sessionId);\n }\n else if (event.type === 'session_update' && event.notification) {\n // 转换为 SessionUpdateParams\n const params = {\n notification: event.notification,\n messageId: event.messageId,\n };\n this.emitSessionUpdate(params);\n }\n else if (event.type === 'connected' || event.type === 'done') {\n // 这些事件类型不再需要,忽略\n console.log('[MockAgentProvider] Ignoring deprecated event type:', event.type);\n }\n else {\n console.warn('[MockAgentProvider] Unknown event type:', event.type);\n }\n }\n /**\n * ACP 协议: initialize - 初始化连接\n *\n * Mock 实现: 返回预设的初始化响应\n */\n async initialize(request) {\n console.log('[MockAgentProvider] initialize', request);\n // 模拟网络延迟\n await this.delay(100);\n // 返回 Mock 初始化响应\n return exports.mockInitializeResponse;\n }\n /**\n * ACP 协议: authenticate - 身份验证\n *\n * Mock 实现: 直接返回成功\n */\n async authenticate(request) {\n console.log('[MockAgentProvider] authenticate', request);\n // Mock 模式下不需要身份验证\n return;\n }\n /**\n * ACP 协议: newSession - 创建新会话\n *\n * Mock 实现: 生成唯一的 sessionId 并存储会话信息\n */\n async newSession(request) {\n console.log('[MockAgentProvider] session/new', request);\n // 模拟网络延迟\n await this.delay(100);\n // 生成唯一的 sessionId (格式: sess_<timestamp>_<random>)\n const sessionId = `sess_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`;\n // 存储会话信息\n this.initializedSessions.set(sessionId, {\n cwd: request.cwd,\n mcpServers: request.mcpServers || [],\n createdAt: Date.now()\n });\n console.log('[MockAgentProvider] Created session:', sessionId, 'with config:', {\n cwd: request.cwd,\n mcpServers: request.mcpServers\n });\n // 返回 sessionId\n return (0, exports.mockNewSessionResponse)(sessionId);\n }\n /**\n * ACP 协议: session/load - 加载已有会话\n *\n * Mock 实现: 流式回放会话历史(完整的事件回放)\n */\n async loadSession(request) {\n console.log('[MockAgentProvider] session/load', request);\n const { sessionId, cwd, mcpServers } = request;\n // 更新或添加会话配置\n this.initializedSessions.set(sessionId, {\n cwd,\n mcpServers: mcpServers || [],\n createdAt: Date.now()\n });\n // 从 mockSessionHistories 加载历史\n const history = mockSessionHistories.get(sessionId);\n if (history && history.length > 0) {\n console.log('[MockAgentProvider] Loading session from mockSessionHistories:', sessionId, 'with', history.length, 'entries');\n // 模拟流式回放会话历史\n for (let i = 0; i < history.length; i++) {\n const message = history[i];\n // 检查是否为事件数组格式(JSON 字符串)\n if (message.type === 'assistant' && message.content && message.content.startsWith('[')) {\n try {\n const events = JSON.parse(message.content);\n console.log('[MockAgentProvider] Replaying events from history:', {\n index: i,\n eventCount: events.length,\n });\n // 回放所有事件(通过 emitEvent 桥接)\n for (const event of events) {\n await this.delay(20); // 每个事件间隔 20ms\n this.emitEvent(event);\n }\n }\n catch (error) {\n console.error('[MockAgentProvider] Failed to parse events from history:', error);\n }\n }\n else {\n // 旧格式:普通文本消息\n const messageId = `load-${sessionId}-${i}-${Date.now()}`;\n const sessionUpdateType = message.type === 'user'\n ? 'user_message_chunk'\n : 'agent_message_chunk';\n await this.delay(50);\n this.emitEvent({\n type: 'session_update',\n sessionId,\n messageId,\n timestamp: message.timestamp,\n notification: {\n sessionId,\n update: {\n sessionUpdate: sessionUpdateType,\n content: {\n type: 'text',\n text: message.content,\n }\n }\n },\n });\n }\n }\n console.log('[MockAgentProvider] Session loaded from mockSessionHistories:', sessionId);\n return {};\n }\n // 如果没有任何历史数据\n console.log('[MockAgentProvider] No history found for session:', sessionId);\n return {};\n }\n /**\n * ACP 协议: session/request_permission - 请求用户权限\n *\n * Agent 调用此方法来请求用户批准工具调用。\n * 此方法会:\n * 1. 发送 request_permission 事件给 UI\n * 2. 阻塞等待用户响应\n * 3. 返回用户的决策结果\n *\n * @param sessionId ACP 会话 ID\n * @param toolCallId 工具调用 ID\n * @param toolCall 工具调用信息\n * @param options 可用的权限选项\n * @returns 用户的决策结果\n */\n async requestPermission(sessionId, toolCallId, toolCall, options) {\n console.log('[MockAgentProvider] requestPermission called:', { sessionId, toolCallId, toolCall, options });\n // 发送权限请求事件给 UI\n this.emitEvent({\n type: 'request_permission',\n sessionId,\n messageId: `permission-${toolCallId}`,\n timestamp: Date.now(),\n data: {\n sessionId,\n toolCall,\n options,\n },\n });\n // 阻塞等待用户决策(或超时)\n const permissionOutcome = await new Promise((resolve) => {\n // 保存解析器,respondToPermissionRequest 会调用它\n this.pendingPermissionResolvers.set(toolCallId, resolve);\n // 超时降级:如果 60s 内没有用户响应,默认拒绝(避免无限挂起)\n setTimeout(() => {\n if (this.pendingPermissionResolvers.has(toolCallId)) {\n this.pendingPermissionResolvers.delete(toolCallId);\n console.log('[MockAgentProvider] Permission request timed out:', toolCallId);\n resolve({ outcome: 'cancelled', optionId: 'reject-once', timedOut: true });\n }\n }, 60000);\n });\n console.log('[MockAgentProvider] Permission outcome:', permissionOutcome);\n return permissionOutcome;\n }\n /**\n * 直接释放权限请求的 await(更直接的方法)\n *\n * 这个方法直接从 pendingPermissionResolvers 中获取 resolver 并调用,\n * 不需要经过 respondToPermissionRequest 的中转。\n *\n * @param toolCallId 工具调用 ID\n * @param outcome 用户的决策结果\n */\n releasePermissionRequest(toolCallId, outcome) {\n console.log('[MockAgentProvider] releasePermissionRequest called:', { toolCallId, outcome });\n const resolver = this.pendingPermissionResolvers.get(toolCallId);\n if (resolver) {\n // 直接调用 resolver 释放 await\n resolver({ ...outcome, timedOut: false });\n this.pendingPermissionResolvers.delete(toolCallId);\n console.log('[MockAgentProvider] Permission request released:', toolCallId);\n }\n else {\n console.warn('[MockAgentProvider] No pending permission request found for:', toolCallId);\n }\n }\n /**\n * 响应用户的权限决策(兼容旧接口)\n *\n * 这个方法内部调用 releasePermissionRequest。\n * 保留这个方法是为了向后兼容和符合 ACP 协议的命名规范。\n *\n * @param sessionId ACP 会话 ID(未使用,保留以符合接口)\n * @param payload 权限响应数据\n */\n async respondToPermissionRequest(sessionId, payload) {\n console.log('[MockAgentProvider] respondToPermissionRequest called:', payload);\n // 直接调用 releasePermissionRequest\n this.releasePermissionRequest(payload.toolCallId, payload.outcome);\n }\n /**\n * 销毁 Provider\n */\n destroy() {\n // 清空所有回调解集合\n this.activeConnections.clear();\n this.pendingPermissionResolvers.clear();\n this.permissionRequestResolvers.clear();\n this.initializedSessions.clear();\n this.sessionUpdateCallbacks.clear();\n this.errorCallbacks.clear();\n // ✅ 清空临时事件缓存\n this.currentSessionUpdates.clear();\n console.log('[MockAgentProvider] Destroyed');\n }\n /**\n * 获取所有已初始化的会话列表(扩展方法,非 ACP 标准协议)\n * 返回 sessionId 及其配置信息和标题\n */\n getAllSessions() {\n const mockTitles = {\n '1': '开发五子棋游戏',\n '2': '修复登录页面样式',\n '3': 'API 接口优化',\n };\n const sessions = Array.from(this.initializedSessions.entries()).map(([sessionId, config]) => ({\n sessionId,\n title: mockTitles[sessionId] || `Session ${sessionId}`,\n ...config,\n }));\n console.log('[MockAgentProvider] Getting all sessions:', sessions.length);\n return sessions;\n }\n /**\n * 发送嵌入资源消息 (符合 ACP 协议)\n */\n async sendMockEmbeddedResource(sessionId, messageId) {\n console.log(`📎 Sending embedded resource: ${messageId}`);\n // 发送文本介绍部分\n this.emitEvent({\n type: 'session_update',\n sessionId,\n messageId: `${messageId}-intro`,\n timestamp: Date.now(),\n notification: {\n sessionId,\n update: {\n sessionUpdate: 'agent_message_chunk',\n content: {\n type: 'text',\n text: '这是一个嵌入的 Python 文件示例:\\n\\n',\n }\n }\n },\n });\n await this.delay(200);\n // 发送嵌入资源内容块\n this.emitEvent({\n type: 'session_update',\n sessionId,\n messageId: `${messageId}-resource`,\n timestamp: Date.now(),\n notification: {\n sessionId,\n update: {\n sessionUpdate: 'agent_message_chunk',\n content: {\n type: 'resource',\n resource: {\n uri: 'file:///mock/example.py',\n mimeType: 'text/x-python',\n text: 'def hello_world():\\n print(\"Hello, World!\")\\n return \"success\"\\n\\nif __name__ == \"__main__\":\\n hello_world()'\n }\n }\n }\n },\n });\n await this.delay(200);\n // 发送结尾文本\n this.emitEvent({\n type: 'session_update',\n sessionId,\n messageId: `${messageId}-conclusion`,\n timestamp: Date.now(),\n notification: {\n sessionId,\n update: {\n sessionUpdate: 'agent_message_chunk',\n content: {\n type: 'text',\n text: '\\n\\n以上是直接嵌入的文件内容,无需额外请求即可显示。',\n }\n }\n },\n });\n await this.delay(100);\n }\n /**\n * 发送资源链接消息 (符合 ACP 协议)\n */\n async sendMockResourceLink(sessionId, messageId) {\n console.log(`🔗 Sending resource link: ${messageId}`);\n // 发送文本介绍部分\n this.emitEvent({\n type: 'session_update',\n sessionId,\n messageId: `${messageId}-intro`,\n timestamp: Date.now(),\n notification: {\n sessionId,\n update: {\n sessionUpdate: 'agent_message_chunk',\n content: {\n type: 'text',\n text: '这是一个指向外部文档的资源链接:\\n\\n',\n }\n }\n },\n });\n await this.delay(200);\n // 发送资源链接内容块\n this.emitEvent({\n type: 'session_update',\n sessionId,\n messageId: `${messageId}-link`,\n timestamp: Date.now(),\n notification: {\n sessionId,\n update: {\n sessionUpdate: 'agent_message_chunk',\n content: {\n type: 'resource_link',\n uri: 'https://agentclientprotocol.com/protocol/content',\n name: 'ACP Content Protocol',\n mimeType: 'text/html',\n description: 'Agent Client Protocol - Content specification',\n size: BigInt(256000)\n }\n }\n },\n });\n await this.delay(200);\n // 发送结尾文本\n this.emitEvent({\n type: 'session_update',\n sessionId,\n messageId: `${messageId}-conclusion`,\n timestamp: Date.now(),\n notification: {\n sessionId,\n update: {\n sessionUpdate: 'agent_message_chunk',\n content: {\n type: 'text',\n text: '\\n\\n点击上面的链接可以访问完整的协议文档。',\n }\n }\n },\n });\n await this.delay(100);\n }\n /**\n * 发送完整的工具调用流程 (符合 ACP 协议)\n */\n async sendMockEditDiffToolCallFlow(sessionId, messageId) {\n console.log(`🔧 Starting tool call flow: ${messageId}`);\n // 2. 发送工具调用事件 - 使用 ACP 协议的 tool_call session/update\n const toolCallId = `tool-${Date.now()}`;\n this.emitEvent({\n type: 'session_update',\n sessionId,\n messageId,\n timestamp: Date.now(),\n notification: {\n sessionId,\n update: {\n sessionUpdate: 'tool_call',\n toolCallId,\n title: 'Write File',\n kind: 'edit',\n status: 'pending',\n locations: [{ path: 'example.py', line: 0 }]\n }\n },\n });\n await this.delay(100);\n // 调用 requestPermission 接口请求用户权限\n // 这个方法会:\n // 1. 发送 request_permission 事件给 UI\n // 2. 阻塞等待用户响应\n // 3. 返回用户的决策结果\n // const permissionOutcome = await this.requestPermission(\n // sessionId,\n // toolCallId,\n // {\n // toolCallId,\n // kind: 'edit',\n // arguments: {\n // file_path: 'example.py',\n // content: 'def hello_world():\\n print(\"Hello from ACP tool call!\")...'\n // }\n // },\n // [\n // { optionId: 'allow-once', name: 'Allow once', kind: 'allow_once' },\n // { optionId: 'reject-once', name: 'Reject', kind: 'reject_once' }\n // ]\n // );\n // 根据用户决策推进后续 Mock 行为,区分同意与拒绝,发送不同的 tool_call_update 与消息\n // if (permissionOutcome.outcome === 'selected') {\n const content = `def hello_world():\\n print(\"Hello from ACP tool call!\")\\n return \"success\"\\n\\nif __name__ == \"__main__\":\\n hello_world()`;\n const chunkSize = 10; // 每次发送 10 个字符\n for (let i = 0; i < content.length; i += chunkSize) {\n // 获取当前块的内容\n const chunk = content.substring(i, i + chunkSize);\n console.log(`🐸 tool call Chunk: \"${chunk}\" | messageId: ${messageId} | sessionId: ${sessionId}`);\n // ✅ 5.1 开始执行 (in_progress)\n this.emitEvent({\n type: 'session_update',\n sessionId,\n messageId,\n timestamp: Date.now(),\n notification: {\n sessionId,\n update: {\n sessionUpdate: 'tool_call_update',\n toolCallId,\n status: 'in_progress', // ✅ 最终完成状态\n content: [\n {\n type: 'diff', // ✅ 使用 diff 类型显示文件修改\n path: 'example.py',\n oldText: '', // 新文件\n newText: chunk\n }\n ],\n locations: [{ path: 'example.py', line: 0 }]\n }\n },\n });\n // 模拟网络延迟\n await this.delay(50);\n }\n // 模拟工具执行时间\n await this.delay(1200);\n // ✅ 5.2 执行完成 (completed)\n this.emitEvent({\n type: 'session_update',\n sessionId,\n messageId,\n timestamp: Date.now(),\n notification: {\n sessionId,\n update: {\n sessionUpdate: 'tool_call_update',\n toolCallId,\n status: 'completed', // ✅ 最终完成状态\n content: [\n {\n type: 'diff', // ✅ 使用 diff 类型显示文件修改\n path: 'example.py',\n oldText: 'def 213', // 新文件\n newText: 'def hello_world():\\n print(\"Hello from ACP tool call!\")\\n return \"success\"\\n\\nif __name__ == \"__main__\":\\n hello_world()'\n }\n ],\n locations: [{ path: 'example.py', line: 0 }]\n }\n },\n });\n // 发送总结消息\n await this.delay(300);\n this.emitEvent({\n type: 'session_update',\n sessionId,\n messageId: `${messageId}-summary`,\n timestamp: Date.now(),\n notification: {\n sessionId,\n update: {\n sessionUpdate: 'agent_message_chunk',\n content: {\n type: 'text',\n text: '✅ 工具调用完成!我成功创建了一个名为 `example.py` 的文件。\\n\\nACP 协议工具调用流程:\\n1. `tool_call` (pending) - 创建工具调用\\n2. `tool_call_update` (in_progress) - 开始执行\\n3. `tool_call_update` (completed) - 执行完成\\n\\n这就是完整的工具调用生命周期!',\n }\n }\n },\n });\n // } else {\n // // ✅ 5.3 权限拒绝 (failed)\n // await this.delay(300);\n // this.emitEvent({\n // type: 'session_update',\n // sessionId,\n // messageId,\n // timestamp: Date.now(),\n // notification: {\n // sessionId,\n // update: {\n // sessionUpdate: 'tool_call_update',\n // toolCallId,\n // status: 'failed', // ✅ 失败状态\n // content: [\n // {\n // type: 'content',\n // content: {\n // type: 'text',\n // text: permissionOutcome.timedOut\n // ? 'Permission request timed out; tool execution cancelled (mock)'\n // : 'User rejected permission; tool execution cancelled (mock)'\n // }\n // }\n // ]\n // }\n // } as SessionNotification,\n // });\n // // 发送总结消息\n // await this.delay(300);\n // this.emitEvent({\n // type: 'session_update',\n // sessionId,\n // messageId: `${messageId}-summary`,\n // timestamp: Date.now(),\n // notification: {\n // sessionId,\n // update: {\n // sessionUpdate: 'agent_message_chunk',\n // content: {\n // type: 'text',\n // text: permissionOutcome.timedOut\n // ? '⏰ 权限请求超时,工具调用已取消(mock)。'\n // : '❌ 已拒绝执行写文件操作,工具调用已取消(mock)。',\n // }\n // }\n // } as SessionNotification,\n // });\n // }\n await this.delay(100);\n // 5. 发送工具调用完成后的总结消息\n this.emitEvent({\n type: 'session_update',\n sessionId,\n messageId: `${messageId}-summary`,\n timestamp: Date.now(),\n notification: {\n sessionId,\n update: {\n sessionUpdate: 'agent_message_chunk',\n content: {\n type: 'text',\n text: '✅ 工具调用完成!我成功创建了一个名为 `example.py` 的文件。\\n\\n工具调用流程包括:\\n1. 发送工具调用请求 (tool_call)\\n2. 返回执行结果 (tool_call_update)\\n\\n这就是 ACP 协议中完整的工具调用生命周期。',\n }\n }\n },\n });\n await this.delay(100);\n }\n async sendMockEditContentToolCallFlow(sessionId, messageId) {\n console.log(`🔧 Starting tool call flow: ${messageId}`);\n // 2. 发送工具调用事件 - 使用 ACP 协议的 tool_call session/update\n const toolCallId = `tool-${Date.now()}`;\n this.emitEvent({\n type: 'session_update',\n sessionId,\n messageId,\n timestamp: Date.now(),\n notification: {\n sessionId,\n _meta: {\n \"codebuddy.ai\": {\n toolName: 'write_to_file',\n },\n },\n update: {\n sessionUpdate: 'tool_call',\n toolCallId,\n title: 'Write File',\n kind: 'edit',\n status: 'pending',\n locations: [{ path: 'example-edit-content.py', line: 0 }]\n }\n },\n });\n await this.delay(100);\n const content = `def hello_world():\\n print(\"Hello from ACP tool call!\")\\n return \"success\"\\n\\nif __name__ == \"__main__\":\\n hello_world()`;\n const chunkSize = 10; // 每次发送 10 个字符\n let accumulatedInput = '';\n for (let i = 0; i < content.length; i += chunkSize) {\n // 获取当前块的内容\n const chunk = content.substring(i, i + chunkSize);\n accumulatedInput += chunk;\n console.log(`🐸 tool call Chunk: \"${chunk}\" | messageId: ${messageId} | sessionId: ${sessionId}`);\n // ✅ 5.1 开始执行 (in_progress)\n this.emitEvent({\n type: 'session_update',\n sessionId,\n messageId,\n timestamp: Date.now(),\n notification: {\n sessionId,\n _meta: {\n \"codebuddy.ai\": {\n toolName: 'write_to_file',\n },\n },\n update: {\n sessionUpdate: 'tool_call_update',\n toolCallId,\n status: 'in_progress', // ✅ 最终完成状态\n content: [\n {\n type: 'content',\n content: {\n type: 'text',\n text: accumulatedInput,\n }\n }\n ],\n rawInput: {\n \"filePath\": \"example-edit-content.py\",\n \"content\": accumulatedInput,\n },\n locations: [{ path: 'example-edit-content.py', line: 0 }]\n }\n },\n });\n // 模拟网络延迟\n await this.delay(50);\n }\n // 模拟工具执行时间\n await this.delay(1200);\n // ✅ 5.2 执行完成 (completed)\n this.emitEvent({\n type: 'session_update',\n sessionId,\n messageId,\n timestamp: Date.now(),\n notification: {\n sessionId,\n _meta: {\n \"codebuddy.ai\": {\n toolName: 'write_to_file',\n },\n },\n update: {\n sessionUpdate: 'tool_call_update',\n toolCallId,\n status: 'completed', // ✅ 最终完成状态\n content: [\n {\n type: 'content',\n content: {\n type: 'text',\n text: content\n }\n }\n ],\n rawOutput: {\n \"type\": 'write_to_file_result',\n \"path\": \"example-edit-content.py\",\n \"addLineCount\": 10,\n \"removedLines\": 20,\n },\n locations: [{ path: 'example-edit-content.py', line: 0 }]\n }\n },\n });\n // 发送总结消息\n await this.delay(300);\n this.emitEvent({\n type: 'session_update',\n sessionId,\n messageId: `${messageId}-summary`,\n timestamp: Date.now(),\n notification: {\n sessionId,\n _meta: {\n \"codebuddy.ai\": {\n toolName: 'write_to_file',\n },\n },\n update: {\n sessionUpdate: 'agent_message_chunk',\n content: {\n type: 'text',\n text: '✅ 工具调用完成!我成功创建了一个名为 `example.py` 的文件。\\n\\nACP 协议工具调用流程:\\n1. `tool_call` (pending) - 创建工具调用\\n2. `tool_call_update` (in_progress) - 开始执行\\n3. `tool_call_update` (completed) - 执行完成\\n\\n这就是完整的工具调用生命周期!',\n }\n },\n rawInput: {\n \"filePath\": \"example-edit-content.py\",\n \"content\": accumulatedInput,\n }\n },\n });\n await this.delay(100);\n // 5. 发送工具调用完成后的总结消息\n this.emitEvent({\n type: 'session_update',\n sessionId,\n messageId: `${messageId}-summary`,\n timestamp: Date.now(),\n notification: {\n sessionId,\n update: {\n sessionUpdate: 'agent_message_chunk',\n content: {\n type: 'text',\n text: '✅ 工具调用完成!我成功创建了一个名为 `example.py` 的文件。\\n\\n工具调用流程包括:\\n1. 发送工具调用请求 (tool_call)\\n2. 返回执行结果 (tool_call_update)\\n\\n这就是 ACP 协议中完整的工具调用生命周期。',\n }\n }\n },\n });\n await this.delay(100);\n }\n /**\n * 发送完整的工具调用流程 - kind 为 read (符合 ACP 协议)\n *\n * 模拟 read_file 工具调用流程,流式发送 rawInput 和 rawOutput\n */\n async sendMockReadContentToolCallFlow(sessionId, messageId) {\n console.log(`📖 Starting read tool call flow: ${messageId}`);\n // 配置:模拟读取文件\n const filePath = '/Users/liumingyuan/Project/caseTest/subagent/test.js';\n const toolCallId = `tool-${Date.now()}`;\n // 1. 发送 tool_call (pending) - 不带 rawInput\n this.emitEvent({\n type: 'session_update',\n sessionId,\n messageId,\n timestamp: Date.now(),\n notification: {\n sessionId,\n _meta: {\n 'codebuddy.ai': {\n toolName: 'read_file'\n }\n },\n update: {\n sessionUpdate: 'tool_call',\n toolCallId,\n title: 'Read File',\n status: 'pending',\n locations: [{ path: filePath, line: 0 }]\n }\n }\n });\n console.log('[MockAgentProvider] tool_call (pending) sent');\n await this.delay(100);\n // 2. 流式发送 rawInput (模拟参数逐个到达)\n // 将 filePath 分块流式发送\n const filePathChunks = [\n '/Users/liumingyuan/',\n 'Project/caseTest',\n '/subagent/',\n 'test.js'\n ];\n let accumulatedInput = '';\n for (const chunk of filePathChunks) {\n accumulatedInput += chunk;\n // 尝试解析累积的 input\n try {\n // const parsed = JSON.parse(accumulatedInput);\n // const rawInput: ReadFileInput = {\n // filePath: parsed.filePath\n // };\n // 验证 rawInput\n // const inputValidation = validateToolInput('read_file', rawInput);\n // if (inputValidation.success) {\n // 发送 tool_call_update with rawInput\n this.emitEvent({\n type: 'session_update',\n sessionId,\n messageId,\n timestamp: Date.now(),\n notification: {\n sessionId,\n _meta: {\n 'codebuddy.ai': {\n toolName: 'read_file'\n }\n },\n update: {\n sessionUpdate: 'tool_call_update',\n toolCallId,\n status: 'in_progress',\n rawInput: {\n filePath: accumulatedInput\n }\n }\n }\n });\n await this.delay(100);\n console.log('[MockAgentProvider] tool_call_update with rawInput:', chunk);\n // }\n }\n catch (_a) {\n // JSON 还未完整,继续累积\n }\n }\n // Mock file content\n const fileContent = `/**\n * Test file for subagent functionality\n */\n\nfunction helloWorld() {\n console.log('Hello from test.js!');\n return 'success';\n}\n\nclass TestClass {\n constructor(name) {\n this.name = name;\n }\n\n greet() {\n return \\`Hello, \\${this.name}!\\`;\n }\n}\n\n// Export functions\nmodule.exports = {\n helloWorld,\n TestClass\n};\n`;\n const totalLineCount = 26;\n const chunkSize = 20;\n let accumulatedContent = '';\n // 3. 流式返回结果 with in_progress\n for (let i = 0; i < fileContent.length; i += chunkSize) {\n const chunk = fileContent.substring(i, i + chunkSize);\n accumulatedContent += chunk;\n const progress = Math.round(((i + chunkSize) / fileContent.length) * 100);\n const isLastChunk = (i + chunkSize) >= fileContent.length;\n const rawOutput = {\n type: 'read_file_result',\n path: filePath,\n content: accumulatedContent,\n totalLineCount,\n hasMore: !isLastChunk,\n hint: `Reading file... ${Math.min(progress, 100)}% complete`\n };\n // 验证 rawOutput\n const outputValidation = (0, tool_schemas_js_1.validateToolOutput)('read_file', rawOutput);\n this.emitEvent({\n type: 'session_update',\n sessionId,\n messageId,\n timestamp: Date.now(),\n notification: {\n sessionId,\n _meta: {\n 'codebuddy.ai': {\n toolName: 'read_file'\n }\n },\n update: {\n sessionUpdate: 'tool_call_update',\n toolCallId,\n status: 'in_progress',\n content: [\n {\n type: 'content',\n content: {\n type: 'text',\n text: accumulatedContent\n }\n }\n ],\n locations: [{ path: filePath, line: 0 }],\n rawOutput: (outputValidation.success ? outputValidation.data : rawOutput)\n }\n }\n });\n console.log(`📖 Read chunk ${i / chunkSize + 1}: progress ${progress}%`);\n await this.delay(30);\n }\n // 4. 发送 completed 事件\n const finalRawOutput = {\n type: 'read_file_result',\n path: filePath,\n content: fileContent,\n totalLineCount,\n hasMore: false\n };\n const finalOutputValidation = (0, tool_schemas_js_1.validateToolOutput)('read_file', finalRawOutput);\n if (!finalOutputValidation.success) {\n throw new Error(`Invalid rawOutput: ${JSON.stringify(finalOutputValidation.error.errors)}`);\n }\n this.emitEvent({\n type: 'session_update',\n sessionId,\n messageId,\n timestamp: Date.now(),\n notification: {\n sessionId,\n update: {\n sessionUpdate: 'tool_call_update',\n toolCallId,\n status: 'completed',\n content: [\n {\n type: 'content',\n content: {\n type: 'text',\n text: fileContent\n }\n }\n ],\n locations: [{ path: filePath, line: 0 }],\n rawOutput: finalOutputValidation.data\n }\n }\n });\n console.log('[MockAgentProvider] tool_call_update (completed) sent');\n }\n /**\n * 发送 search_content 工具调用流程 (符合 ACP 协议)\n *\n * 用于模拟在文件内容中搜索特定文本的工具调用\n * 支持显示匹配的文件路径、行号和上下文内容\n */\n async sendMockSearchContentToolCallFlow(sessionId, messageId) {\n console.log(`🔍 Starting search_content tool call flow: ${messageId}`);\n const pattern = '一行工具';\n const directory = '/Users/liumingyuan/Project/caseTest/subagent';\n // 1. 发送工具调用事件\n const toolCallId = `tool-sc-${Date.now()}`;\n this.emitEvent({\n type: 'session_update',\n sessionId,\n messageId,\n timestamp: Date.now(),\n notification: {\n sessionId,\n _meta: {\n \"codebuddy.ai\": {\n toolName: 'search_content',\n },\n },\n update: {\n sessionUpdate: 'tool_call',\n toolCallId,\n title: 'Search Content',\n kind: 'search', // ✅ kind 为 search\n status: 'pending',\n locations: [{ path: directory, line: 0 }],\n rawInput: {\n pattern,\n directory,\n }\n }\n },\n });\n await this.delay(100);\n // 2. 发送 in_progress 状态和搜索结果\n this.emitEvent({\n type: 'session_update',\n sessionId,\n messageId,\n timestamp: Date.now(),\n notification: {\n sessionId,\n update: {\n sessionUpdate: 'tool_call_update',\n toolCallId,\n status: 'in_progress',\n content: [\n {\n type: 'content',\n content: {\n type: 'text',\n text: `Searching for \"${pattern}\" in ${directory}...`,\n }\n }\n ],\n locations: [{ path: directory, line: 0 }]\n }\n },\n });\n await this.delay(500);\n // 3. 发送完成状态和匹配结果\n this.emitEvent({\n type: 'session_update',\n sessionId,\n messageId,\n timestamp: Date.now(),\n notification: {\n sessionId,\n update: {\n sessionUpdate: 'tool_call_update',\n toolCallId,\n status: 'completed',\n content: [\n {\n type: 'content',\n content: {\n type: 'text',\n text: `Found 1 matching result\\n\\nconvert_to_oneline.py\\n 56| print(\"文件内容转一行工具\")\\n`,\n }\n }\n ],\n locations: [{ path: directory, line: 0 }],\n rawOutput: {\n pattern,\n directory,\n matches: [\n {\n filePath: 'convert_to_oneline.py',\n fileName: 'convert_to_oneline.py',\n content: ' print(\"文件内容转一行工具\")',\n startLine: 56,\n endLine: 56,\n }\n ],\n totalCount: 1,\n hasMore: false,\n }\n }\n },\n });\n // 4. 发送总结消息\n await this.delay(300);\n this.emitEvent({\n type: 'session_update',\n sessionId,\n messageId: `${messageId}-summary`,\n timestamp: Date.now(),\n notification: {\n sessionId,\n update: {\n sessionUpdate: 'agent_message_chunk',\n content: {\n type: 'text',\n text: `✅ 内容搜索完成!在 \\`${directory}\\` 目录中找到 1 个匹配结果。\\n\\n**搜索结果:**\\n- \\`convert_to_oneline.py\\` 第 56 行: \\`print(\"文件内容转一行工具\")\\`\\n\\n**工具调用流程:**\\n1. \\`tool_call\\` (pending) - 创建搜索工具调用\\n2. \\`tool_call_update\\` (in_progress) - 执行搜索\\n3. \\`tool_call_update\\` (completed) - 返回匹配结果`,\n }\n }\n },\n });\n await this.delay(100);\n }\n /**\n * 发送 search_file 工具调用流程 (符合 ACP 协议)\n *\n * 用于模拟按文件名模式搜索文件的工具调用\n * 支持递归搜索和文件大小显示\n */\n async sendMockSearchFileToolCallFlow(sessionId, messageId) {\n console.log(`🔍 Starting search_file tool call flow: ${messageId}`);\n const pattern = '*.py';\n const directory = '/Users/liumingyuan/Project/caseTest/subagent';\n // 1. 发送工具调用事件\n const toolCallId = `tool-sf-${Date.now()}`;\n this.emitEvent({\n type: 'session_update',\n sessionId,\n messageId,\n timestamp: Date.now(),\n notification: {\n sessionId,\n _meta: {\n \"codebuddy.ai\": {\n toolName: 'search_file',\n },\n },\n update: {\n sessionUpdate: 'tool_call',\n toolCallId,\n title: 'Search File',\n kind: 'search', // ✅ kind 为 search\n status: 'pending',\n locations: [{ path: directory, line: 0 }],\n rawInput: {\n target_directory: directory,\n pattern,\n recursive: true,\n caseSensitive: false,\n }\n }\n },\n });\n await this.delay(100);\n // 2. 发送 in_progress 状态\n this.emitEvent({\n type: 'session_update',\n sessionId,\n messageId,\n timestamp: Date.now(),\n notification: {\n sessionId,\n update: {\n sessionUpdate: 'tool_call_update',\n toolCallId,\n status: 'in_progress',\n content: [\n {\n type: 'content',\n content: {\n type: 'text',\n text: `Searching for files matching \"${pattern}\" in ${directory}...`,\n }\n }\n ],\n locations: [{ path: directory, line: 0 }]\n }\n },\n });\n await this.delay(500);\n // 3. 发送完成状态和搜索结果\n this.emitEvent({\n type: 'session_update',\n sessionId,\n messageId,\n timestamp: Date.now(),\n notification: {\n sessionId,\n update: {\n sessionUpdate: 'tool_call_update',\n toolCallId,\n status: 'completed',\n content: [\n {\n type: 'content',\n content: {\n type: 'text',\n text: `Found 5 files\\n\\nbubble_sort.py (10.38 KB)\\nconvert_to_oneline.py (2.2 KB)\\ntls12_examples.py (4.58 KB)\\n.codebuddy/skills/analyzing-financial-statements/calculate_ratios.py (12.22 KB)\\n.codebuddy/skills/analyzing-financial-statements/interpret_ratios.py (15.83 KB)\\n`,\n }\n }\n ],\n locations: [{ path: directory, line: 0 }],\n rawOutput: {\n path: directory,\n pattern,\n recursive: true,\n caseSensitive: false,\n results: [\n { filePath: 'bubble_sort.py', size: '10.38 KB' },\n { filePath: 'convert_to_oneline.py', size: '2.2 KB' },\n { filePath: 'tls12_examples.py', size: '4.58 KB' },\n { filePath: '.codebuddy/skills/analyzing-financial-statements/calculate_ratios.py', size: '12.22 KB' },\n { filePath: '.codebuddy/skills/analyzing-financial-statements/interpret_ratios.py', size: '15.83 KB' },\n ],\n }\n }\n },\n });\n // 4. 发送总结消息\n await this.delay(300);\n this.emitEvent({\n type: 'session_update',\n sessionId,\n messageId: `${messageId}-summary`,\n timestamp: Date.now(),\n notification: {\n sessionId,\n update: {\n sessionUpdate: 'agent_message_chunk',\n content: {\n type: 'text',\n text: `✅ 文件搜索完成!在 \\`${directory}\\` 目录中找到 5 个匹配的 Python 文件。\\n\\n**搜索结果:**\\n- \\`bubble_sort.py\\` (10.38 KB)\\n- \\`convert_to_oneline.py\\` (2.2 KB)\\n- \\`tls12_examples.py\\` (4.58 KB)\\n- \\`.codebuddy/skills/analyzing-financial-statements/calculate_ratios.py\\` (12.22 KB)\\n- \\`.codebuddy/skills/analyzing-financial-statements/interpret_ratios.py\\` (15.83 KB)\\n\\n**工具调用流程:**\\n1. \\`tool_call\\` (pending) - 创建搜索工具调用\\n2. \\`tool_call_update\\` (in_progress) - 执行搜索\\n3. \\`tool_call_update\\` (completed) - 返回搜索结果`,\n }\n }\n },\n });\n await this.delay(100);\n }\n /**\n * 发送删除文件工具调用流程 (符合 ACP 协议)\n *\n * 用于模拟删除文件的工具调用\n * 支持显示删除操作的进度和结果\n */\n async sendMockDeleteFileToolCallFlow(sessionId, messageId) {\n console.log(`🗑️ Starting delete_file tool call flow: ${messageId}`);\n // 配置:模拟删除文件\n const targetFile = '/Users/liumingyuan/Project/caseTest/subagent/temp_file.txt';\n const toolCallId = `tool-df-${Date.now()}`;\n // 1. 发送 tool_call (pending) - 不带 rawInput\n this.emitEvent({\n type: 'session_update',\n sessionId,\n messageId,\n timestamp: Date.now(),\n notification: {\n sessionId,\n _meta: {\n 'codebuddy.ai': {\n toolName: 'delete_file'\n }\n },\n update: {\n sessionUpdate: 'tool_call',\n toolCallId,\n title: 'Delete File',\n status: 'pending',\n locations: [{ path: targetFile, line: 0 }]\n }\n }\n });\n console.log('[MockAgentProvider] delete_file tool_call (pending) sent');\n await this.delay(200);\n // 2. 流式发送 rawInput (模拟参数逐个到达)\n // 将 target_file 分块流式发送\n const filePathChunks = [\n '/Users/liumingyuan/',\n 'Project/caseTest',\n '/subagent/',\n 'temp_file.txt'\n ];\n let accumulatedInput = '';\n for (const chunk of filePathChunks) {\n accumulatedInput += chunk;\n // 发送 tool_call_update with rawInput\n this.emitEvent({\n type: 'session_update',\n sessionId,\n messageId,\n timestamp: Date.now(),\n notification: {\n sessionId,\n _meta: {\n 'codebuddy.ai': {\n toolName: 'delete_file'\n }\n },\n update: {\n sessionUpdate: 'tool_call_update',\n toolCallId,\n status: 'in_progress',\n rawInput: {\n target_file: accumulatedInput,\n explanation: 'Deleting temporary test file'\n }\n }\n }\n });\n await this.delay(100);\n console.log('[MockAgentProvider] delete_file tool_call_update with rawInput:', chunk);\n }\n await this.delay(300);\n // 3. 模拟删除操作进度\n const progressSteps = [\n { progress: 25, message: 'Checking file permissions...' },\n { progress: 50, message: 'Validating file path...' },\n { progress: 75, message: 'Removing file...' },\n { progress: 100, message: 'File deleted successfully' }\n ];\n for (const step of progressSteps) {\n const rawOutput = {\n type: 'delete_file_result',\n path: targetFile,\n recursive: false,\n hint: step.message\n };\n // 验证 rawOutput\n const outputValidation = (0, tool_schemas_js_1.validateToolOutput)('delete_file', rawOutput);\n this.emitEvent({\n type: 'session_update',\n sessionId,\n messageId,\n timestamp: Date.now(),\n notification: {\n sessionId,\n _meta: {\n 'codebuddy.ai': {\n toolName: 'delete_file'\n }\n },\n update: {\n sessionUpdate: 'tool_call_update',\n toolCallId,\n status: step.progress === 100 ? 'deleted' : 'in_progress',\n content: [\n {\n type: 'content',\n content: {\n type: 'text',\n text: `🗑️ ${step.message} (${step.progress}%)`\n }\n }\n ],\n locations: [{ path: targetFile, line: 0 }],\n rawOutput: (outputValidation.success ? outputValidation.data : rawOutput)\n }\n }\n });\n console.log(`🗑️ Delete progress: ${step.progress}% - ${step.message}`);\n await this.delay(200);\n }\n // 4. 发送最终完成事件\n const finalRawOutput = {\n type: 'delete_file_result',\n path: targetFile,\n recursive: false,\n hint: 'File successfully deleted from filesystem'\n };\n const finalOutputValidation = (0, tool_schemas_js_1.validateToolOutput)('delete_file', finalRawOutput);\n if (!finalOutputValidation.success) {\n throw new Error(`Invalid delete_file rawOutput: ${JSON.stringify(finalOutputValidation.error.errors)}`);\n }\n this.emitEvent({\n type: 'session_update',\n sessionId,\n messageId,\n timestamp: Date.now(),\n notification: {\n sessionId,\n update: {\n sessionUpdate: 'tool_call_update',\n toolCallId,\n status: 'completed',\n content: [\n {\n type: 'content',\n content: {\n type: 'text',\n text: `✅ 文件删除完成!\\n\\n**删除的文件:** \\`${targetFile}\\`\\n\\n**操作详情:**\\n- 文件路径验证 ✓\\n- 权限检查 ✓\\n- 文件删除 ✓\\n\\n文件已从文件系统中成功移除。`\n }\n }\n ],\n locations: [{ path: targetFile, line: 0 }],\n rawOutput: finalOutputValidation.data\n }\n }\n });\n console.log('[MockAgentProvider] delete_file tool_call_update (completed) sent');\n // 5. 发送总结消息\n this.emitEvent({\n type: 'session_update',\n sessionId,\n messageId: `${messageId}-summary`,\n timestamp: Date.now(),\n notification: {\n sessionId,\n update: {\n sessionUpdate: 'agent_message_chunk',\n content: {\n type: 'text',\n text: `🗑️ **删除文件工具调用演示完成**\\n\\n**工具调用流程:**\\n1. \\`tool_call\\` (pending) - 创建删除文件工具调用\\n2. \\`tool_call_update\\` (in_progress) - 流式发送参数和执行删除操作\\n3. \\`tool_call_update\\` (completed) - 返回删除结果\\n\\n**rawInput 包含:**\\n- \\`target_file\\`: 要删除的文件路径\\n- \\`explanation\\`: 删除原因说明\\n\\n**rawOutput 包含:**\\n- \\`type\\`: 'delete_file_result'\\n- \\`path\\`: 被删除的文件路径\\n- \\`recursive\\`: 是否递归删除\\n- \\`hint\\`: 操作提示信息`,\n }\n }\n },\n });\n await this.delay(100);\n }\n /**\n * 发送 ask_followup_question 工具调用流程 (符合 ACP 协议)\n *\n * 用于模拟向用户提问并获取回答的工具调用\n * 数据结构与 genie-ide 保持一致:question (单个问题字符串) + options (选项数组)\n */\n async sendMockAskFollowupQuestionToolCallFlow(sessionId, messageId) {\n console.log(`❓ Starting ask_followup_question tool call flow: ${messageId}`);\n const toolCallId = `tool-afq-${Date.now()}`;\n // 问题数据 - 与 genie-ide 保持一致的数据结构\n const question = '你希望创建什么类型的项目?';\n const options = [\n 'Web 应用(前端 + 后端)',\n '命令行工具(CLI)',\n '移动应用(React Native / Flutter)',\n '桌面应用(Electron)',\n '后端服务(API / 微服务)',\n ];\n // 1. 发送 tool_call (pending)\n this.emitEvent({\n type: 'session_update',\n sessionId,\n messageId,\n timestamp: Date.now(),\n notification: {\n sessionId,\n _meta: {\n 'codebuddy.ai': {\n toolName: 'ask_followup_question',\n },\n },\n update: {\n sessionUpdate: 'tool_call',\n toolCallId,\n title: 'Ask Followup Question',\n kind: 'other',\n status: 'pending',\n rawInput: {\n question,\n options: JSON.stringify(options),\n },\n },\n },\n });\n await this.delay(100);\n // 2. 发送 tool_call_update (in_progress) - 显示问题\n this.emitEvent({\n type: 'session_update',\n sessionId,\n messageId,\n timestamp: Date.now(),\n notification: {\n sessionId,\n _meta: {\n 'codebuddy.ai': {\n toolName: 'ask_followup_question',\n },\n },\n update: {\n sessionUpdate: 'tool_call_update',\n toolCallId,\n status: 'in_progress',\n rawInput: {\n question,\n options: JSON.stringify(options),\n },\n },\n },\n });\n console.log('[MockAgentProvider] ask_followup_question tool displayed, waiting for user interaction...');\n // 工具显示完成,等待用户交互(暂未实现交互逻辑)\n }\n /**\n * 发送 list_dir 工具调用流程 (符合 ACP 协议)\n *\n * 用于模拟列出目录中的文件\n * 数据结构符合 tool-schemas.ts 中的 ListDirInput 和 ListFilesResult\n */\n async sendMockListFilesToolCallFlow(sessionId, messageId) {\n console.log(`📁 Starting list_dir tool call flow: ${messageId}`);\n const target_directory = '/Users/test/project/src';\n const toolCallId = `tool-ld-${Date.now()}`;\n // Mock 文件列表数据 - 符合 ListFilesResult.files 格式\n const mockFiles = [\n { filePath: `${target_directory}/index.ts`, size: '2.5 KB', modifyTime: '2024-01-15 10:30:00' },\n { filePath: `${target_directory}/App.tsx`, size: '8.2 KB', modifyTime: '2024-01-15 09:45:00' },\n { filePath: `${target_directory}/utils.ts`, size: '1.8 KB', modifyTime: '2024-01-14 16:20:00' },\n { filePath: `${target_directory}/components/`, size: '-', modifyTime: '2024-01-15 11:00:00' },\n { filePath: `${target_directory}/hooks/`, size: '-', modifyTime: '2024-01-14 14:30:00' },\n { filePath: `${target_directory}/styles/`, size: '-', modifyTime: '2024-01-13 09:00:00' },\n { filePath: `${target_directory}/types.d.ts`, size: '3.1 KB', modifyTime: '2024-01-12 18:45:00' },\n { filePath: `${target_directory}/constants.ts`, size: '0.9 KB', modifyTime: '2024-01-10 12:00:00' },\n ];\n // 生成 listing 格式的文本输出\n const listing = mockFiles\n .map(f => {\n const name = f.filePath.split('/').pop() || '';\n const isDir = f.filePath.endsWith('/');\n return isDir ? `📁 ${name}` : `📄 ${name} (${f.size})`;\n })\n .join('\\n');\n // 1. 发送 tool_call (pending)\n // rawInput 符合 ListDirInput: { target_directory, ignore_globs? }\n this.emitEvent({\n type: 'session_update',\n sessionId,\n messageId,\n timestamp: Date.now(),\n notification: {\n sessionId,\n _meta: {\n 'codebuddy.ai': {\n toolName: 'list_dir',\n },\n },\n update: {\n sessionUpdate: 'tool_call',\n toolCallId,\n title: 'List Directory',\n kind: 'search',\n status: 'pending',\n locations: [{ path: target_directory, line: 0 }],\n rawInput: {\n target_directory,\n // ignore_globs 是可选的,这里不传\n },\n },\n },\n });\n await this.delay(100);\n // 2. 发送 tool_call_update (in_progress)\n this.emitEvent({\n type: 'session_update',\n sessionId,\n messageId,\n timestamp: Date.now(),\n notification: {\n sessionId,\n _meta: {\n 'codebuddy.ai': {\n toolName: 'list_dir',\n },\n },\n update: {\n sessionUpdate: 'tool_call_update',\n toolCallId,\n status: 'in_progress',\n content: [\n {\n type: 'content',\n content: {\n type: 'text',\n text: `Listing directory ${target_directory}...`,\n },\n },\n ],\n locations: [{ path: target_directory, line: 0 }],\n },\n },\n });\n await this.delay(300);\n // 3. 发送 tool_call_update (completed) 包含文件列表\n // rawOutput 符合 ListFilesResult: { type, files, root, listing? }\n this.emitEvent({\n type: 'session_update',\n sessionId,\n messageId,\n timestamp: Date.now(),\n notification: {\n sessionId,\n _meta: {\n 'codebuddy.ai': {\n toolName: 'list_dir',\n },\n },\n update: {\n sessionUpdate: 'tool_call_update',\n toolCallId,\n status: 'completed',\n content: [\n {\n type: 'content',\n content: {\n type: 'text',\n text: `Listed ${mockFiles.length} items in ${target_directory}`,\n },\n },\n ],\n locations: [{ path: target_directory, line: 0 }],\n rawOutput: {\n type: 'list_files_result',\n files: mockFiles,\n root: target_directory,\n listing: listing,\n },\n },\n },\n });\n console.log('[MockAgentProvider] list_dir tool call completed');\n }\n /**\n * 发送 preview_url 工具调用流程 (符合 ACP 协议)\n *\n * 用于测试 unknown-tool-renderer 的显示效果\n * preview_url 是一个未知工具,会使用 UnknownToolRenderer 渲染\n */\n async sendMockPreviewUrlToolCallFlow(sessionId, messageId) {\n console.log(`🌐 Starting preview_url tool call flow: ${messageId}`);\n const toolCallId = `tool-pu-${Date.now()}`;\n const url = 'https://example.com/preview';\n // 1. 发送 tool_call (pending)\n this.emitEvent({\n type: 'session_update',\n sessionId,\n messageId,\n timestamp: Date.now(),\n notification: {\n sessionId,\n _meta: {\n 'codebuddy.ai': {\n toolName: 'preview_url',\n },\n },\n update: {\n sessionUpdate: 'tool_call',\n toolCallId,\n title: 'Preview URL',\n kind: 'other',\n status: 'pending',\n rawInput: {\n url,\n },\n },\n },\n });\n await this.delay(200);\n // 2. 发送 tool_call_update (in_progress)\n this.emitEvent({\n type: 'session_update',\n sessionId,\n messageId,\n timestamp: Date.now(),\n notification: {\n sessionId,\n _meta: {\n 'codebuddy.ai': {\n toolName: 'preview_url',\n },\n },\n update: {\n sessionUpdate: 'tool_call_update',\n toolCallId,\n status: 'in_progress',\n content: [\n {\n type: 'content',\n content: {\n type: 'text',\n text: `Loading preview for ${url}...`,\n },\n },\n ],\n },\n },\n });\n await this.delay(800);\n // 3. 发送 tool_call_update (completed)\n this.emitEvent({\n type: 'session_update',\n sessionId,\n messageId,\n timestamp: Date.now(),\n notification: {\n sessionId,\n _meta: {\n 'codebuddy.ai': {\n toolName: 'preview_url',\n },\n },\n update: {\n sessionUpdate: 'tool_call_update',\n toolCallId,\n status: 'completed',\n content: [\n {\n type: 'content',\n content: {\n type: 'text',\n text: `Preview loaded successfully for ${url}`,\n },\n },\n ],\n rawOutput: {\n url,\n title: 'Example Domain',\n screenshot: 'base64-encoded-screenshot-data...',\n status: 200,\n },\n },\n },\n });\n console.log('[MockAgentProvider] preview_url tool call completed');\n }\n /**\n * 发送 list_code_definition_names 工具调用流程 (符合 ACP 协议)\n *\n * 用于测试 unknown-tool-renderer 的显示效果\n * list_code_definition_names 是一个未知工具,会使用 UnknownToolRenderer 渲染\n */\n async sendMockListCodeDefinitionNamesToolCallFlow(sessionId, messageId) {\n console.log(`📝 Starting list_code_definition_names tool call flow: ${messageId}`);\n const toolCallId = `tool-lcd-${Date.now()}`;\n const filePath = '/Users/test/project/src/utils.ts';\n // 1. 发送 tool_call (pending)\n this.emitEvent({\n type: 'session_update',\n sessionId,\n messageId,\n timestamp: Date.now(),\n notification: {\n sessionId,\n _meta: {\n 'codebuddy.ai': {\n toolName: 'list_code_definition_names',\n },\n },\n update: {\n sessionUpdate: 'tool_call',\n toolCallId,\n title: 'List Code Definitions',\n kind: 'other',\n status: 'pending',\n rawInput: {\n filePath,\n },\n },\n },\n });\n await this.delay(200);\n // 2. 发送 tool_call_update (in_progress)\n this.emitEvent({\n type: 'session_update',\n sessionId,\n messageId,\n timestamp: Date.now(),\n notification: {\n sessionId,\n _meta: {\n 'codebuddy.ai': {\n toolName: 'list_code_definition_names',\n },\n },\n update: {\n sessionUpdate: 'tool_call_update',\n toolCallId,\n status: 'in_progress',\n content: [\n {\n type: 'content',\n content: {\n type: 'text',\n text: `Analyzing code definitions in ${filePath}...`,\n },\n },\n ],\n },\n },\n });\n await this.delay(600);\n // 3. 发送 tool_call_update (completed)\n this.emitEvent({\n type: 'session_update',\n sessionId,\n messageId,\n timestamp: Date.now(),\n notification: {\n sessionId,\n _meta: {\n 'codebuddy.ai': {\n toolName: 'list_code_definition_names',\n },\n },\n update: {\n sessionUpdate: 'tool_call_update',\n toolCallId,\n status: 'completed',\n content: [\n {\n type: 'content',\n content: {\n type: 'text',\n text: `Found 5 code definitions in ${filePath}`,\n },\n },\n ],\n rawOutput: {\n filePath,\n definitions: [\n { name: 'formatDate', type: 'function', line: 5 },\n { name: 'parseJSON', type: 'function', line: 15 },\n { name: 'debounce', type: 'function', line: 28 },\n { name: 'Config', type: 'interface', line: 42 },\n { name: 'DEFAULT_OPTIONS', type: 'const', line: 55 },\n ],\n },\n },\n },\n });\n console.log('[MockAgentProvider] list_code_definition_names tool call completed');\n }\n /**\n * 发送 web_fetch 工具调用流程 (符合 ACP 协议)\n *\n * 用于模拟从 URL 获取网页内容的工具调用\n */\n async sendMockWebFetchToolCallFlow(sessionId, messageId) {\n console.log(`🌐 Starting web_fetch tool call flow: ${messageId}`);\n const toolCallId = `tool-wf-${Date.now()}`;\n const targetUrl = 'https://github.com/anthropics/claude-code';\n // 1. 发送 tool_call (pending)\n this.emitEvent({\n type: 'session_update',\n sessionId,\n messageId,\n timestamp: Date.now(),\n notification: {\n sessionId,\n _meta: {\n 'codebuddy.ai': {\n toolName: 'web_fetch',\n },\n },\n update: {\n sessionUpdate: 'tool_call',\n toolCallId,\n title: 'Web Fetch',\n kind: 'other',\n status: 'pending',\n rawInput: {\n url: targetUrl,\n fetchInfo: 'Fetching page content...',\n },\n },\n },\n });\n await this.delay(200);\n // 2. 流式发送 rawInput(模拟 URL 逐步到达)\n const urlChunks = [\n 'https://github.com/',\n 'anthropics/',\n 'claude-code',\n ];\n let accumulatedUrl = '';\n for (const chunk of urlChunks) {\n accumulatedUrl += chunk;\n this.emitEvent({\n type: 'session_update',\n sessionId,\n messageId,\n timestamp: Date.now(),\n notification: {\n sessionId,\n _meta: {\n 'codebuddy.ai': {\n toolName: 'web_fetch',\n },\n },\n update: {\n sessionUpdate: 'tool_call_update',\n toolCallId,\n status: 'in_progress',\n rawInput: {\n url: accumulatedUrl,\n fetchInfo: 'Fetching page content...',\n },\n },\n },\n });\n await this.delay(100);\n console.log('[MockAgentProvider] web_fetch tool_call_update with rawInput:', chunk);\n }\n await this.delay(500);\n // 3. 模拟获取进度\n const progressSteps = [\n { loading: 'Connecting to server...' },\n { loading: 'Downloading content...' },\n { loading: 'Parsing HTML...' },\n ];\n for (const step of progressSteps) {\n this.emitEvent({\n type: 'session_update',\n sessionId,\n messageId,\n timestamp: Date.now(),\n notification: {\n sessionId,\n _meta: {\n 'codebuddy.ai': {\n toolName: 'web_fetch',\n },\n },\n update: {\n sessionUpdate: 'tool_call_update',\n toolCallId,\n status: 'in_progress',\n rawInput: {\n url: targetUrl,\n fetchInfo: step.loading,\n },\n rawOutput: {\n loading: step.loading,\n },\n },\n },\n });\n console.log(`🌐 Fetch progress: ${step.loading}`);\n await this.delay(300);\n }\n // 4. 发送完成事件,包含模拟的网页内容\n const mockWebContent = `# Claude Code\n\nClaude Code is an agentic coding tool that lives in your terminal, understands your codebase, and helps you code faster through natural conversation.\n\n## Features\n\n- **Agentic coding**: Claude Code can read, write, and edit files, run commands, and more.\n- **Context-aware**: Claude Code understands your entire codebase and can answer questions about it.\n- **Natural conversation**: Just describe what you want to do in plain English.\n\n## Installation\n\n\\`\\`\\`bash\nnpm install -g @anthropic-ai/claude-code\n\\`\\`\\`\n\n## Usage\n\n\\`\\`\\`bash\nclaude-code\n\\`\\`\\`\n\nStart a conversation with Claude Code and let it help you with your coding tasks!`;\n this.emitEvent({\n type: 'session_update',\n sessionId,\n messageId,\n timestamp: Date.now(),\n notification: {\n sessionId,\n _meta: {\n 'codebuddy.ai': {\n toolName: 'web_fetch',\n },\n },\n update: {\n sessionUpdate: 'tool_call_update',\n toolCallId,\n status: 'completed',\n rawInput: {\n url: targetUrl,\n fetchInfo: 'Fetch web page content',\n },\n rawOutput: {\n title: 'Claude Code - GitHub',\n favicon: 'https://github.githubassets.com/favicons/favicon.svg',\n data: mockWebContent,\n },\n },\n },\n });\n console.log('[MockAgentProvider] web_fetch tool_call_update (completed) sent');\n // 5. 发送总结消息\n this.emitEvent({\n type: 'session_update',\n sessionId,\n messageId: `${messageId}-summary`,\n timestamp: Date.now(),\n notification: {\n sessionId,\n update: {\n sessionUpdate: 'agent_message_chunk',\n content: {\n type: 'text',\n text: `🌐 **Web Fetch 工具调用演示完成**\\n\\n**工具调用流程:**\\n1. \\`tool_call\\` (pending) - 创建 web_fetch 工具调用\\n2. \\`tool_call_update\\` (in_progress) - 流式发送 URL 和获取进度\\n3. \\`tool_call_update\\` (completed) - 返回网页内容\\n\\n**rawInput 包含:**\\n- \\`url\\`: 目标 URL\\n- \\`fetchInfo\\`: 获取说明\\n\\n**rawOutput 包含:**\\n- \\`title\\`: 网页标题\\n- \\`favicon\\`: 网站图标\\n- \\`data\\`: 网页内容(Markdown 格式)`,\n },\n },\n },\n });\n await this.delay(100);\n }\n /**\n * 发送 web_search 工具调用流程 (符合 ACP 协议)\n *\n * 用于模拟网络搜索的工具调用\n * 数据结构符合 tool-schemas.ts 中的 web_search 定义\n */\n async sendMockWebSearchToolCallFlow(sessionId, messageId) {\n console.log(`🔍 Starting web_search tool call flow: ${messageId}`);\n const toolCallId = `tool-ws-${Date.now()}`;\n const searchTerm = 'TypeScript 5.0 new features';\n const explanation = 'Searching for the latest TypeScript 5.0 features to provide accurate and up-to-date information.';\n // 1. 发送 tool_call (pending)\n this.emitEvent({\n type: 'session_update',\n sessionId,\n messageId,\n timestamp: Date.now(),\n notification: {\n sessionId,\n _meta: {\n 'codebuddy.ai': {\n toolName: 'web_search',\n },\n },\n update: {\n sessionUpdate: 'tool_call',\n toolCallId,\n title: 'Web Search',\n kind: 'search',\n status: 'pending',\n rawInput: {\n searchTerm,\n explanation,\n },\n },\n },\n });\n await this.delay(200);\n // 2. 发送 tool_call_update (in_progress) - 流式显示搜索中\n this.emitEvent({\n type: 'session_update',\n sessionId,\n messageId,\n timestamp: Date.now(),\n notification: {\n sessionId,\n _meta: {\n 'codebuddy.ai': {\n toolName: 'web_search',\n },\n },\n update: {\n sessionUpdate: 'tool_call_update',\n toolCallId,\n status: 'in_progress',\n content: [\n {\n type: 'content',\n content: {\n type: 'text',\n text: `🔍 Searching the web for \"${searchTerm}\"...`,\n },\n },\n ],\n rawInput: {\n searchTerm,\n explanation,\n },\n },\n },\n });\n await this.delay(800);\n // 3. 发送 tool_call_update (completed) - 包含搜索结果\n const searchResults = [\n {\n title: 'Announcing TypeScript 5.0 - TypeScript Blog',\n url: 'https://devblogs.microsoft.com/typescript/announcing-typescript-5-0/',\n snippet: 'TypeScript 5.0 brings many new features, including decorators, const type parameters, and improvements to enums. This release also includes significant performance improvements...',\n publishedDate: '2023-03-16',\n },\n {\n title: 'TypeScript 5.0: What\\'s New - LogRocket Blog',\n url: 'https://blog.logrocket.com/whats-new-typescript-5-0/',\n snippet: 'TypeScript 5.0 introduces several exciting features: ECMAScript decorators, const type parameters, multiple config extends, all enums are union enums, and more...',\n publishedDate: '2023-04-10',\n },\n {\n title: 'TypeScript 5.0 Release Notes - GitHub',\n url: 'https://github.com/microsoft/TypeScript/releases/tag/v5.0.0',\n snippet: 'Official release notes for TypeScript 5.0. Key highlights include: Decorators, const Type Parameters, Supporting Multiple Configuration Files in extends...',\n publishedDate: '2023-03-16',\n },\n {\n title: 'A Complete Guide to TypeScript 5.0 Features - Medium',\n url: 'https://medium.com/typescript-5-features-guide',\n snippet: 'Explore all the new features in TypeScript 5.0: decorators with metadata, const type parameters for better type inference, improved module resolution...',\n publishedDate: '2023-05-22',\n },\n {\n title: 'TypeScript 5.0 Performance Improvements',\n url: 'https://www.typescriptlang.org/docs/handbook/release-notes/typescript-5-0.html',\n snippet: 'TypeScript 5.0 includes significant performance improvements: faster type checking, reduced memory usage, and improved build times. Package size reduced by 50%...',\n publishedDate: '2023-03-16',\n },\n ];\n this.emitEvent({\n type: 'session_update',\n sessionId,\n messageId,\n timestamp: Date.now(),\n notification: {\n sessionId,\n _meta: {\n 'codebuddy.ai': {\n toolName: 'web_search',\n },\n },\n update: {\n sessionUpdate: 'tool_call_update',\n toolCallId,\n status: 'completed',\n content: [\n {\n type: 'content',\n content: {\n type: 'text',\n text: `Found ${searchResults.length} results for \"${searchTerm}\"`,\n },\n },\n ],\n rawInput: {\n searchTerm,\n explanation,\n },\n rawOutput: {\n query: searchTerm,\n totalResults: searchResults.length,\n results: searchResults,\n searchEngine: 'web',\n timestamp: new Date().toISOString(),\n },\n },\n },\n });\n // 4. 发送总结消息\n await this.delay(300);\n this.emitEvent({\n type: 'session_update',\n sessionId,\n messageId: `${messageId}-summary`,\n timestamp: Date.now(),\n notification: {\n sessionId,\n update: {\n sessionUpdate: 'agent_message_chunk',\n content: {\n type: 'text',\n text: `🔍 **Web 搜索完成**\\n\\n**搜索词:** \\`${searchTerm}\\`\\n\\n**搜索结果:** 找到 ${searchResults.length} 个相关结果\\n\\n**主要发现:**\\n1. **TypeScript 5.0 新特性** - 包括装饰器、const 类型参数、枚举改进等\\n2. **性能提升** - 类型检查更快,内存使用减少,包大小减少 50%\\n3. **配置增强** - 支持多配置文件继承\\n\\n**工具调用流程:**\\n1. \\`tool_call\\` (pending) - 创建搜索工具调用\\n2. \\`tool_call_update\\` (in_progress) - 执行网络搜索\\n3. \\`tool_call_update\\` (completed) - 返回搜索结果\\n\\n**rawInput 包含:**\\n- \\`searchTerm\\`: 搜索关键词\\n- \\`explanation\\`: 搜索原因说明\\n\\n**rawOutput 包含:**\\n- \\`query\\`: 搜索查询\\n- \\`totalResults\\`: 结果总数\\n- \\`results\\`: 搜索结果数组(包含 title、url、snippet、publishedDate)`,\n },\n },\n },\n });\n console.log('[MockAgentProvider] web_search tool call completed');\n }\n /**\n * 发送 read_lints 工具调用流程 (符合 ACP 协议)\n *\n * 数据结构 (来自 tool-schemas.ts):\n * - Input: ReadLintsInput = { paths?: string }\n * - Output: ReadLintsResult = {\n * type: 'read_lints_result';\n * diagnostics: string[];\n * totalCount?: number;\n * hint?: string;\n * isTruncated?: boolean;\n * }\n */\n async sendMockReadLintsToolCallFlow(sessionId, messageId) {\n console.log(`🔍 Starting read_lints tool call flow: ${messageId}`);\n const toolCallId = `tool-rl-${Date.now()}`;\n const targetPath = '/Users/test/project/src/components/Button.tsx';\n // 1. 发送 tool_call (pending)\n this.emitEvent({\n type: 'session_update',\n sessionId,\n messageId,\n timestamp: Date.now(),\n notification: {\n sessionId,\n _meta: {\n 'codebuddy.ai': {\n toolName: 'read_lints',\n },\n },\n update: {\n sessionUpdate: 'tool_call',\n toolCallId,\n title: 'Read Lints',\n kind: 'read',\n status: 'pending',\n rawInput: {\n paths: targetPath,\n },\n },\n },\n });\n await this.delay(200);\n // 2. 发送 tool_call_update (in_progress)\n this.emitEvent({\n type: 'session_update',\n sessionId,\n messageId,\n timestamp: Date.now(),\n notification: {\n sessionId,\n _meta: {\n 'codebuddy.ai': {\n toolName: 'read_lints',\n },\n },\n update: {\n sessionUpdate: 'tool_call_update',\n toolCallId,\n status: 'in_progress',\n rawInput: {\n paths: targetPath,\n },\n },\n },\n });\n await this.delay(300);\n // 3. 发送 tool_call_update (completed) - 包含 lint 错误\n const diagnosticsText = `Button.tsx - ERROR (3 issues)\n[ERROR] Line 15, Column 8: 'useState' is defined but never used. Consider removing this import.\n[ERROR] Line 23, Column 12: Type 'string' is not assignable to type 'number'. Expected a numeric value.\n[ERROR] Line 45, Column 4: Missing return statement in function that is expected to return 'ReactNode'.`;\n this.emitEvent({\n type: 'session_update',\n sessionId,\n messageId,\n timestamp: Date.now(),\n notification: {\n sessionId,\n _meta: {\n 'codebuddy.ai': {\n toolName: 'read_lints',\n },\n },\n update: {\n sessionUpdate: 'tool_call_update',\n toolCallId,\n status: 'completed',\n rawInput: {\n paths: targetPath,\n },\n rawOutput: {\n type: 'read_lints_result',\n diagnostics: [diagnosticsText],\n totalCount: 3,\n hint: 'Found 3 lint errors in Button.tsx',\n isTruncated: false,\n },\n },\n },\n });\n console.log('[MockAgentProvider] read_lints tool call completed');\n }\n /**\n * 发送 execute_command 工具调用流程 (符合 ACP 协议)\n *\n * 数据结构 (来自 tool-schemas.ts):\n * - Input: ExecuteCommandInput = { command: string; requires_approval: boolean; }\n * - Output: ExecuteCommandResult = {\n * type: 'execute_command_result';\n * stdout: string;\n * stderr: string;\n * exitCode: number;\n * hint?: string;\n * serviceInfo?: { isWatchCommand, isServiceOutput, serviceReady, message };\n * use_standalone_terminal?: boolean;\n * }\n */\n async sendMockExecuteCommandToolCallFlow(sessionId, messageId) {\n console.log(`💻 Starting execute_command tool call flow: ${messageId}`);\n const toolCallId = `tool-ec-${Date.now()}`;\n const command = 'npm run build';\n // 1. 发送 tool_call (pending)\n this.emitEvent({\n type: 'session_update',\n sessionId,\n messageId,\n timestamp: Date.now(),\n notification: {\n sessionId,\n _meta: {\n 'codebuddy.ai': {\n toolName: 'execute_command',\n },\n },\n update: {\n sessionUpdate: 'tool_call',\n toolCallId,\n title: 'Execute Command',\n kind: 'execute',\n status: 'pending',\n rawInput: {\n command,\n requires_approval: false,\n },\n },\n },\n });\n await this.delay(200);\n // 2. 发送 tool_call_update (in_progress) - 模拟命令执行中\n this.emitEvent({\n type: 'session_update',\n sessionId,\n messageId,\n timestamp: Date.now(),\n notification: {\n sessionId,\n _meta: {\n 'codebuddy.ai': {\n toolName: 'execute_command',\n },\n },\n update: {\n sessionUpdate: 'tool_call_update',\n toolCallId,\n status: 'in_progress',\n content: [\n {\n type: 'content',\n content: {\n type: 'text',\n text: '> npm run build\\n\\nRunning build script...',\n },\n },\n ],\n },\n },\n });\n await this.delay(1000);\n // 3. 发送 tool_call_update (completed) - 命令执行完成\n this.emitEvent({\n type: 'session_update',\n sessionId,\n messageId,\n timestamp: Date.now(),\n notification: {\n sessionId,\n _meta: {\n 'codebuddy.ai': {\n toolName: 'execute_command',\n },\n },\n update: {\n sessionUpdate: 'tool_call_update',\n toolCallId,\n status: 'completed',\n content: [\n {\n type: 'content',\n content: {\n type: 'text',\n text: '> npm run build\\n\\n> genie@1.0.0 build\\n> tsc -b\\n\\nBuild completed successfully.',\n },\n },\n ],\n rawOutput: {\n type: 'execute_command_result',\n stdout: '> genie@1.0.0 build\\n> tsc -b\\n\\nBuild completed successfully.',\n stderr: '',\n exitCode: 0,\n hint: 'Build completed in 2.5s',\n },\n },\n },\n });\n console.log('[MockAgentProvider] execute_command tool call completed');\n }\n /**\n * 发送 execute_command 工具调用流程(需要权限确认)(符合 ACP 协议)\n *\n * 这个方法模拟需要用户确认才能执行的命令\n * 用于测试权限确认菜单 (Run/Skip/Reject)\n *\n * 数据结构 (来自 tool-schemas.ts):\n * - Input: ExecuteCommandInput = { command: string; requires_approval: boolean; }\n *\n * 权限请求通过 rawInput.permissionRequest 字段传递:\n * - permissionRequest.options: 可选的权限选项数组\n */\n async sendMockExecuteCommandWithApprovalToolCallFlow(sessionId, messageId) {\n console.log(`💻 Starting execute_command (with approval) tool call flow: ${messageId}`);\n const toolCallId = `tool-ec-approval-${Date.now()}`;\n const command = 'rm -rf node_modules && npm install';\n // 权限请求选项 - 与 ACP 协议的 PermissionOption 结构一致\n const permissionRequest = {\n options: [\n { optionId: 'allow-once', name: '运行', kind: 'allow_once' },\n { optionId: 'skip-once', name: '跳过', kind: 'skip_once' },\n { optionId: 'reject-once', name: '拒绝', kind: 'reject_once' },\n ],\n };\n // 1. 发送 tool_call (pending) - 需要权限确认\n this.emitEvent({\n type: 'session_update',\n sessionId,\n messageId,\n timestamp: Date.now(),\n notification: {\n sessionId,\n _meta: {\n 'codebuddy.ai': {\n toolName: 'execute_command',\n },\n },\n update: {\n sessionUpdate: 'tool_call',\n toolCallId,\n title: 'Execute Command',\n kind: 'execute',\n status: 'pending',\n rawInput: {\n command,\n requires_approval: true, // 保留向后兼容\n permissionRequest, // 新增:权限请求信息\n },\n },\n },\n });\n await this.delay(200);\n // 2. 发送 tool_call_update (in_progress) - 等待用户确认\n // 这时 UI 应该显示权限确认菜单 (Run/Skip/Reject)\n this.emitEvent({\n type: 'session_update',\n sessionId,\n messageId,\n timestamp: Date.now(),\n notification: {\n sessionId,\n _meta: {\n 'codebuddy.ai': {\n toolName: 'execute_command',\n },\n },\n update: {\n sessionUpdate: 'tool_call_update',\n toolCallId,\n status: 'pending', // 保持 pending 状态等待用户审批\n content: [\n {\n type: 'content',\n content: {\n type: 'text',\n text: `$ ${command}\\n\\nWaiting for approval...`,\n },\n },\n ],\n rawInput: {\n command,\n requires_approval: true,\n permissionRequest, // 确保 rawInput 中也包含权限请求\n },\n },\n },\n });\n console.log('[MockAgentProvider] execute_command (with approval) tool call waiting for user approval');\n // 注意:这里不发送 completed,等待用户在 UI 上点击 Run/Skip/Reject\n }\n /**\n * 发送 write_to_file 工具调用流程(需要权限确认)(符合 ACP 协议)\n *\n * 这个方法模拟需要用户确认才能执行的文件写入\n * 用于测试权限确认菜单 (允许/跳过/拒绝)\n *\n * 权限请求通过 rawInput.permissionRequest 字段传递:\n * - permissionRequest.options: 可选的权限选项数组\n */\n async sendMockWriteFileWithApprovalToolCallFlow(sessionId, messageId) {\n console.log(`📝 Starting write_to_file (with approval) tool call flow: ${messageId}`);\n const toolCallId = `tool-wtf-approval-${Date.now()}`;\n const filePath = '/Users/test/project/src/config.ts';\n const content = `export const config = {\n apiUrl: 'https://api.example.com',\n debug: true,\n timeout: 5000,\n};`;\n // 权限请求选项 - 与 ACP 协议的 PermissionOption 结构一致\n const permissionRequest = {\n options: [\n { optionId: 'allow-once', name: '允许', kind: 'allow_once' },\n { optionId: 'skip-once', name: '跳过', kind: 'skip_once' },\n { optionId: 'reject-once', name: '拒绝', kind: 'reject_once' },\n ],\n };\n // 1. 发送 tool_call (pending) - 需要权限确认\n this.emitEvent({\n type: 'session_update',\n sessionId,\n messageId,\n timestamp: Date.now(),\n notification: {\n sessionId,\n _meta: {\n 'codebuddy.ai': {\n toolName: 'write_to_file',\n },\n },\n update: {\n sessionUpdate: 'tool_call',\n toolCallId,\n title: 'Write File',\n kind: 'edit',\n status: 'pending',\n locations: [{ path: filePath, line: 0 }],\n rawInput: {\n filePath,\n content,\n permissionRequest, // 权限请求信息\n },\n },\n },\n });\n await this.delay(200);\n // 2. 发送 tool_call_update (pending) - 等待用户确认\n // 这时 UI 应该显示权限确认菜单\n this.emitEvent({\n type: 'session_update',\n sessionId,\n messageId,\n timestamp: Date.now(),\n notification: {\n sessionId,\n _meta: {\n 'codebuddy.ai': {\n toolName: 'write_to_file',\n },\n },\n update: {\n sessionUpdate: 'tool_call_update',\n toolCallId,\n status: 'pending', // 保持 pending 状态等待用户审批\n content: [\n {\n type: 'content',\n content: {\n type: 'text',\n text: content,\n },\n },\n ],\n locations: [{ path: filePath, line: 0 }],\n rawInput: {\n filePath,\n content,\n permissionRequest, // 确保 rawInput 中也包含权限请求\n },\n },\n },\n });\n console.log('[MockAgentProvider] write_to_file (with approval) tool call waiting for user approval');\n // 注意:这里不发送 completed,等待用户在 UI 上点击 允许/跳过/拒绝\n }\n}\nexports.MockAgentProvider = MockAgentProvider;\n//# sourceMappingURL=MockAgentProvider.js.map","\"use strict\";\n/**\n * ACP Client 协议接口定义\n *\n * 定义 ACP (Agent Client Protocol) 客户端接口\n * 参考: https://github.com/agentclientprotocol/agent-client-protocol\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SPECIAL_SESSION_IDS = void 0;\nexports.isReservedSessionId = isReservedSessionId;\n// ============================================================================\n// 特殊 sessionId 常量\n// ============================================================================\n/**\n * 特殊 sessionId 常量\n * 这些 sessionId 不需要路由到特定窗口\n */\nexports.SPECIAL_SESSION_IDS = {\n /** 全局操作 (initialize, authenticate) */\n GLOBAL: '__global__',\n /** 创建新会话 */\n NEW: '__new__',\n};\n/**\n * 检查是否为保留 sessionId\n * @param sessionId 会话 ID\n * @returns 是否为保留 sessionId\n */\nfunction isReservedSessionId(sessionId) {\n return Object.values(exports.SPECIAL_SESSION_IDS).includes(sessionId);\n}\n//# sourceMappingURL=acp-client-protocol.js.map","\"use strict\";\n/**\n * JSON-RPC 2.0 编解码工具\n *\n * 用于 ACP (Agent Client Protocol) 的 JSON-RPC 通信\n * 参考: https://www.jsonrpc.org/specification\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.RequestIdGenerator = exports.JsonRpcEncoder = exports.RequestTimeoutError = exports.JsonRpcErrorCode = void 0;\n// ============================================================================\n// JSON-RPC 错误码枚举\n// ============================================================================\n/**\n * JSON-RPC 2.0 标准错误码\n */\nvar JsonRpcErrorCode;\n(function (JsonRpcErrorCode) {\n JsonRpcErrorCode[JsonRpcErrorCode[\"ParseError\"] = -32700] = \"ParseError\";\n JsonRpcErrorCode[JsonRpcErrorCode[\"InvalidRequest\"] = -32600] = \"InvalidRequest\";\n JsonRpcErrorCode[JsonRpcErrorCode[\"MethodNotFound\"] = -32601] = \"MethodNotFound\";\n JsonRpcErrorCode[JsonRpcErrorCode[\"InvalidParams\"] = -32602] = \"InvalidParams\";\n JsonRpcErrorCode[JsonRpcErrorCode[\"InternalError\"] = -32603] = \"InternalError\";\n})(JsonRpcErrorCode || (exports.JsonRpcErrorCode = JsonRpcErrorCode = {}));\n/**\n * 请求超时错误\n */\nclass RequestTimeoutError extends Error {\n constructor(method, timeoutMs) {\n super(`JSON-RPC request timeout: ${method} (${timeoutMs}ms)`);\n this.name = 'RequestTimeoutError';\n this.method = method;\n this.timeoutMs = timeoutMs;\n }\n}\nexports.RequestTimeoutError = RequestTimeoutError;\n// ============================================================================\n// JSON-RPC 编解码器\n// ============================================================================\n/**\n * JSON-RPC 编解码器\n *\n * 提供 JSON-RPC 2.0 消息的编码和解码功能\n */\nclass JsonRpcEncoder {\n /**\n * 编码请求消息\n * @param id 请求 ID\n * @param method 方法名\n * @param params 参数 (可选)\n * @returns AcpRpcEnvelope 包装的 JSON-RPC 请求\n */\n static encodeRequest(id, method, params) {\n const request = {\n jsonrpc: '2.0',\n id,\n method,\n params,\n };\n return { type: 'acp-rpc', payload: request };\n }\n /**\n * 编码通知消息 (无响应)\n * @param method 方法名\n * @param params 参数 (可选)\n * @returns AcpRpcEnvelope 包装的 JSON-RPC 通知\n */\n static encodeNotification(method, params) {\n const notification = {\n jsonrpc: '2.0',\n method,\n params,\n };\n return { type: 'acp-rpc', payload: notification };\n }\n /**\n * 编码成功响应\n * @param id 对应请求的 ID\n * @param result 结果数据\n * @returns AcpRpcEnvelope 包装的 JSON-RPC 响应\n */\n static encodeSuccessResponse(id, result) {\n const response = {\n jsonrpc: '2.0',\n id,\n result,\n };\n return { type: 'acp-rpc', payload: response };\n }\n /**\n * 编码错误响应\n * @param id 对应请求的 ID\n * @param error 错误信息\n * @returns AcpRpcEnvelope 包装的 JSON-RPC 错误响应\n */\n static encodeErrorResponse(id, error) {\n const response = {\n jsonrpc: '2.0',\n id,\n error,\n };\n return { type: 'acp-rpc', payload: response };\n }\n /**\n * 解码 ACP RPC 消息\n * @param envelope AcpRpcEnvelope\n * @returns 解码后的 JSON-RPC 消息\n * @throws 如果消息格式无效\n */\n static decode(envelope) {\n if (!this.isAcpRpcMessage(envelope)) {\n throw new Error('Invalid ACP RPC message format');\n }\n const payload = envelope.payload;\n // 验证 JSON-RPC 基本格式\n if (typeof payload !== 'object' || payload === null) {\n throw new Error('Invalid JSON-RPC payload');\n }\n // 验证 jsonrpc 版本\n if (payload.jsonrpc !== '2.0') {\n throw new Error('Invalid JSON-RPC version (must be \"2.0\")');\n }\n // 验证消息类型:必须有 id (请求/响应) 或 method (通知)\n const hasId = 'id' in payload;\n const hasMethod = typeof payload.method === 'string';\n if (!hasId && !hasMethod) {\n throw new Error('Invalid JSON-RPC message (must have id or method)');\n }\n return payload;\n }\n /**\n * 检查是否为 ACP RPC 消息\n * @param message 待检查的消息\n * @returns 是否为有效的 AcpRpcEnvelope\n */\n static isAcpRpcMessage(message) {\n return (typeof message === 'object' &&\n message !== null &&\n 'type' in message &&\n message.type === 'acp-rpc' &&\n 'payload' in message);\n }\n /**\n * 检查是否为 JSON-RPC 请求 (有 id 字段)\n * @param message JSON-RPC 消息\n * @returns 是否为请求消息\n */\n static isRequest(message) {\n return 'id' in message && 'method' in message;\n }\n /**\n * 检查是否为 JSON-RPC 响应 (有 id 字段,有 result 或 error)\n * @param message JSON-RPC 消息\n * @returns 是否为响应消息\n */\n static isResponse(message) {\n return 'id' in message && ('result' in message || 'error' in message);\n }\n /**\n * 检查是否为 JSON-RPC 通知 (无 id 字段)\n * @param message JSON-RPC 消息\n * @returns 是否为通知消息\n */\n static isNotification(message) {\n return !('id' in message) && 'method' in message;\n }\n}\nexports.JsonRpcEncoder = JsonRpcEncoder;\n// ============================================================================\n// 请求 ID 生成器\n// ============================================================================\n/**\n * 请求 ID 生成器\n *\n * 格式: acp_{序号}_{时间戳}\n * 示例: acp_1_1704067200000\n */\nclass RequestIdGenerator {\n constructor() {\n this.counter = 0;\n }\n /**\n * 生成下一个请求 ID\n * @returns 请求 ID 字符串\n */\n generate() {\n return `acp_${++this.counter}`;\n }\n /**\n * 重置计数器\n */\n reset() {\n this.counter = 0;\n }\n}\nexports.RequestIdGenerator = RequestIdGenerator;\n//# sourceMappingURL=json-rpc.js.map","\"use strict\";\n/**\n * ACP JSON-RPC Client 实现\n *\n * 实现符合 ACP (Agent Client Protocol) 标准的 JSON-RPC 客户端\n * 通过 IWidgetChannel 与 ExtensionHost 通信\n *\n * 架构说明:\n * - 对 UI: 表现为 Agent Provider\n * - 对 ExtensionHost: 表现为 ACP Client (发送 JSON-RPC 请求)\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isReservedSessionId = exports.SPECIAL_SESSION_IDS = exports.AcpJsonRpcClient = void 0;\nconst acp_client_protocol_1 = require(\"./acp-client-protocol\");\nObject.defineProperty(exports, \"SPECIAL_SESSION_IDS\", { enumerable: true, get: function () { return acp_client_protocol_1.SPECIAL_SESSION_IDS; } });\nObject.defineProperty(exports, \"isReservedSessionId\", { enumerable: true, get: function () { return acp_client_protocol_1.isReservedSessionId; } });\nconst json_rpc_1 = require(\"./json-rpc\");\n// ============================================================================\n// ACP JSON-RPC Client 实现\n// ============================================================================\n/**\n * ACP JSON-RPC Client 实现\n *\n * 实现 IAcpJsonRpcClient 接口\n */\nclass AcpJsonRpcClient {\n // ========================================================================\n // 构造函数\n // ========================================================================\n constructor(channel, config = {}) {\n var _a;\n this.requestIdGenerator = new json_rpc_1.RequestIdGenerator();\n /** 待处理请求: requestId → PendingRequest */\n this.pendingRequests = new Map();\n /** 会话更新回调集合 */\n this.sessionUpdateCallbacks = new Set();\n /** 权限请求解析器: toolCallId → resolver */\n this.permissionRequestResolvers = new Map();\n /** extNotification 回调集合 */\n this.extNotificationCallbacks = new Set();\n /** 连接状态 */\n this._isConnected = false;\n /** 事件处理器 (用于清理) */\n this.eventHandlers = [];\n this.channel = channel;\n this.debug = (_a = config.debug) !== null && _a !== void 0 ? _a : false;\n this.setupMessageListener();\n this.log('AcpJsonRpcClient initialized');\n }\n // ========================================================================\n // IAcpJsonRpcClient 实现 - 连接管理\n // ========================================================================\n async initialize(request) {\n this.log('initialize called');\n return await this.sendRequest(acp_client_protocol_1.SPECIAL_SESSION_IDS.GLOBAL, 'initialize', request);\n }\n async authenticate(request) {\n this.log('authenticate called');\n await this.sendRequest(acp_client_protocol_1.SPECIAL_SESSION_IDS.GLOBAL, 'authenticate', request);\n }\n // ========================================================================\n // IAcpJsonRpcClient 实现 - 会话管理\n // ========================================================================\n async newSession(request) {\n this.log('newSession called');\n return await this.sendRequest(acp_client_protocol_1.SPECIAL_SESSION_IDS.NEW, 'newSession', request);\n }\n async loadSession(request) {\n this.log('loadSession called');\n return await this.sendRequest(request.sessionId, 'loadSession', request);\n }\n // ========================================================================\n // IAcpJsonRpcClient 实现 - 消息处理 (核心)\n // ========================================================================\n async prompt(request) {\n this.log('prompt called for session:', request.sessionId);\n return await this.sendRequest(request.sessionId, 'prompt', request);\n }\n async cancel(params) {\n this.log('cancel called for session:', params.sessionId);\n // cancel 是通知,不需要响应\n const envelope = json_rpc_1.JsonRpcEncoder.encodeNotification('cancel', params);\n this.send(params.sessionId, envelope);\n }\n // ========================================================================\n // IAcpJsonRpcClient 实现 - 配置\n // ========================================================================\n async setSessionModel(params) {\n this.log('setSessionModel called for session:', params.sessionId);\n return await this.sendRequest(params.sessionId, 'setSessionModel', params);\n }\n async setSessionMode(params) {\n this.log('setSessionMode called for session:', params.sessionId);\n return await this.sendRequest(params.sessionId, 'setSessionMode', params);\n }\n // ========================================================================\n // IAcpJsonRpcClient 实现 - 推送消息监听\n // ========================================================================\n onSessionUpdate(callback) {\n this.sessionUpdateCallbacks.add(callback);\n this.log('onSessionUpdate: callback registered');\n return () => {\n this.sessionUpdateCallbacks.delete(callback);\n this.log('onSessionUpdate: callback unregistered');\n };\n }\n onRequestPermission(callback) {\n // 注册全局权限请求处理器\n this.permissionRequestResolvers.set('__global__', callback);\n this.log('onRequestPermission: callback registered');\n return () => {\n this.permissionRequestResolvers.delete('__global__');\n this.log('onRequestPermission: callback unregistered');\n };\n }\n /**\n * 监听 extNotification 推送\n * 用于接收 artifact 等扩展通知\n */\n onExtNotification(callback) {\n this.extNotificationCallbacks.add(callback);\n this.log('onExtNotification: callback registered');\n return () => {\n this.extNotificationCallbacks.delete(callback);\n this.log('onExtNotification: callback unregistered');\n };\n }\n // ========================================================================\n // IAcpJsonRpcClient 实现 - 连接状态\n // ========================================================================\n get isConnected() {\n return this._isConnected;\n }\n setConnected() {\n this._isConnected = true;\n this.log('Connected to server');\n }\n destroy() {\n this.log('Destroying AcpJsonRpcClient');\n // 移除事件监听器\n this.eventHandlers.forEach(({ event, handler }) => {\n this.channel.off(event, handler);\n });\n this.eventHandlers.length = 0;\n // 清理待处理请求\n this.pendingRequests.forEach(({ reject }) => {\n reject(new Error('Client destroyed'));\n });\n this.pendingRequests.clear();\n // 清空回调\n this.sessionUpdateCallbacks.clear();\n this.permissionRequestResolvers.clear();\n this._isConnected = false;\n }\n // ========================================================================\n // 核心方法 - 发送请求\n // ========================================================================\n /**\n * 发送 JSON-RPC 请求并等待响应\n * @param sessionId 会话 ID\n * @param method 方法名\n * @param params 参数\n * @returns Promise<T> 响应结果\n */\n async sendRequest(sessionId, method, params) {\n const id = this.requestIdGenerator.generate();\n const envelope = json_rpc_1.JsonRpcEncoder.encodeRequest(id, method, {\n sessionId: (0, acp_client_protocol_1.isReservedSessionId)(sessionId) ? undefined : sessionId,\n ...(params !== null && params !== void 0 ? params : {})\n });\n return new Promise((resolve, reject) => {\n // 保存待处理请求\n this.pendingRequests.set(id, { resolve, reject, method, sessionId });\n // 发送消息\n const sent = this.send(sessionId, envelope);\n if (!sent) {\n this.pendingRequests.delete(id);\n reject(new Error(`Failed to send ${method} request for session: ${sessionId}`));\n }\n this.log(`Request sent: ${method} (id: ${id}, session: ${sessionId})`);\n });\n }\n /**\n * 发送消息到指定 session\n * @param sessionId 会话 ID\n * @param envelope ACP RPC 消息包装\n * @returns 是否发送成功\n */\n send(sessionId, envelope) {\n return this.channel.sendNotification(sessionId, envelope);\n }\n // ========================================================================\n // 消息监听设置\n // ========================================================================\n /**\n * 设置消息监听器\n * 处理来自 ExtensionHost 的 JSON-RPC 响应和推送\n */\n setupMessageListener() {\n // 监听来自 ExtensionHost 的响应\n const responseHandler = (data) => {\n if (!json_rpc_1.JsonRpcEncoder.isAcpRpcMessage(data)) {\n return;\n }\n try {\n const message = json_rpc_1.JsonRpcEncoder.decode(data);\n if (json_rpc_1.JsonRpcEncoder.isResponse(message)) {\n this.handleResponse(message);\n }\n else if (json_rpc_1.JsonRpcEncoder.isNotification(message)) {\n this.handleNotification(message);\n }\n }\n catch (error) {\n this.log('Error handling message:', error);\n }\n };\n // 监听 'acp-rpc-response' 事件\n this.channel.on('acp-rpc-response', responseHandler);\n this.eventHandlers.push({ event: 'acp-rpc-response', handler: responseHandler });\n // 也监听 'message' 事件 (向后兼容)\n this.channel.on('message', responseHandler);\n this.eventHandlers.push({ event: 'message', handler: responseHandler });\n this.log('Message listener setup complete');\n }\n /**\n * 处理 JSON-RPC 响应\n */\n handleResponse(response) {\n const pending = this.pendingRequests.get(response.id);\n if (!pending) {\n this.log(`No pending request found for response id: ${response.id}`);\n return;\n }\n this.pendingRequests.delete(response.id);\n if (response.error) {\n const error = new Error(`RPC Error ${response.error.code}: ${response.error.message}`);\n pending.reject(error);\n }\n else {\n pending.resolve(response.result);\n }\n this.log(`Response received for request: ${pending.method} (id: ${response.id})`);\n }\n /**\n * 处理 JSON-RPC 推送消息\n */\n handleNotification(notification) {\n const method = notification.method;\n const params = notification.params;\n this.log(`Notification received: ${method}`);\n switch (method) {\n case 'session/update':\n case 'sessionUpdate':\n this.handleSessionUpdate(params);\n break;\n case 'request/permission':\n case 'requestPermission':\n this.handlePermissionRequest(params);\n break;\n case 'extNotification':\n this.handleExtNotification(params);\n break;\n default:\n this.log(`Unknown notification method: ${method}`);\n }\n }\n /**\n * 处理会话更新推送\n */\n handleSessionUpdate(params) {\n if (!params) {\n this.log('Session update notification missing params');\n return;\n }\n const sessionId = params.sessionId;\n const messageId = params.messageId; // 提取 messageId\n if (!sessionId) {\n this.log('Invalid session update params:', params);\n return;\n }\n // params 应该符合 SessionNotification 结构\n const sessionUpdateParams = {\n notification: params, // 传递整个 notification\n ...(messageId && { messageId }) // 传递 messageId(如果存在)\n };\n this.sessionUpdateCallbacks.forEach(callback => {\n try {\n callback(sessionUpdateParams);\n }\n catch (error) {\n this.log('Session update callback error:', error);\n }\n });\n }\n /**\n * 处理 extNotification 推送\n * 用于处理 artifact 等扩展通知\n */\n handleExtNotification(params) {\n if (!params) {\n this.log('extNotification missing params');\n return;\n }\n const method = params.method;\n const extParams = params.params;\n console.log('[AcpJsonRpcClient] handleExtNotification:', { method, paramsKeys: extParams ? Object.keys(extParams) : [] });\n if (!method) {\n this.log('extNotification missing method');\n return;\n }\n this.extNotificationCallbacks.forEach(callback => {\n try {\n callback(method, extParams || {});\n }\n catch (error) {\n this.log('extNotification callback error:', error);\n }\n });\n }\n /**\n * 处理权限请求推送\n */\n async handlePermissionRequest(params) {\n if (!params) {\n this.log('Permission request notification missing params');\n return;\n }\n const sessionId = params.sessionId;\n const requestId = params.requestId;\n const toolCall = params.toolCall;\n const options = params.options;\n if (!sessionId || !requestId || !toolCall) {\n this.log('Invalid permission request params:', params);\n return;\n }\n const permissionParams = {\n sessionId,\n requestId,\n toolCall,\n options\n };\n // 获取全局权限解析器\n const resolver = this.permissionRequestResolvers.get('__global__');\n if (!resolver) {\n this.log('No permission resolver registered, cancelling...');\n this.sendPermissionResponse(sessionId, requestId, { outcome: 'cancelled' });\n return;\n }\n try {\n const outcome = await resolver(permissionParams);\n this.sendPermissionResponse(sessionId, requestId, outcome);\n }\n catch (error) {\n this.log('Permission resolver error:', error);\n this.sendPermissionResponse(sessionId, requestId, { outcome: 'cancelled' });\n }\n }\n /**\n * 发送权限响应\n */\n sendPermissionResponse(sessionId, requestId, outcome) {\n const envelope = json_rpc_1.JsonRpcEncoder.encodeSuccessResponse(requestId, outcome);\n this.send(sessionId, envelope);\n this.log('Permission response sent for request:', requestId);\n }\n // ========================================================================\n // 工具方法\n // ========================================================================\n /**\n * 调试日志\n */\n log(...args) {\n if (this.debug) {\n console.log('[AcpJsonRpcClient]', ...args);\n }\n }\n}\nexports.AcpJsonRpcClient = AcpJsonRpcClient;\n//# sourceMappingURL=AcpJsonRpcClient.js.map","\"use strict\";\n/**\n * IPC Agent Provider\n *\n * 面向 ACP (Agent Client Protocol) 设计\n *\n * 职责:\n * 1. 通过 IWidgetChannel 与 ExtensionHost 通信\n * 2. 使用 sessionId (ACP 会话 ID) 作为主要标识符\n * 3. 使用 Channel 层的聚合方法获取所有 sessions\n * 4. 返回原始后端数据格式\n * 5. 集成 AcpJsonRpcClient 实现 JSON-RPC 通信\n *\n * 架构设计参考: genie/apps/web/agents/CONVERSATION_CHANNEL_ARCHITECTURE.md\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.IPCAgentProvider = void 0;\nconst AcpJsonRpcClient_1 = require(\"./AcpJsonRpcClient\");\n/**\n * Widget 场景的事件名称常量\n * 面向 ACP 协议设计\n */\nconst WIDGET_EVENTS = {\n // Provider → IDE (通过 channel 发出)\n SESSIONS_REQUEST: 'provider:sessions-request',\n SESSION_REQUEST: 'provider:session-request',\n SEND_MESSAGE: 'provider:send-message',\n CANCEL_MESSAGE: 'provider:cancel-message',\n PERMISSION_RESPONSE: 'provider:permission-response',\n // IDE → Provider (通过 channel 监听)\n SESSIONS_RESPONSE: 'ide:sessions-response',\n SESSION_RESPONSE: 'ide:session-response',\n SESSION_UPDATE: 'ide:session-update', // ACP session/update 通知\n REQUEST_PERMISSION: 'ide:request-permission',\n ERROR: 'ide:error',\n DONE: 'ide:done',\n // ACP JSON-RPC 消息事件\n ACP_RPC_RESPONSE: 'acp-rpc-response',\n};\n/**\n * IPC Agent Provider 实现\n *\n * 面向 ACP 协议设计\n *\n * 职责边界:\n * - 使用 sessionId(ACP 会话 ID)作为主要标识符\n * - 通过 AcpJsonRpcClient 发送所有 ACP 协议请求\n * - 通过 channel.getAllSessions() 获取所有会话(Channel 层负责聚合)\n * - 不应该知道 windowId 的存在\n */\nclass IPCAgentProvider {\n constructor(config) {\n var _a, _b, _c;\n this.eventHandlers = [];\n this.pendingRequests = new Map();\n /** 错误回调集合 */\n this.errorCallbacks = new Set();\n this.channel = config.channel;\n this.debug = (_a = config.debug) !== null && _a !== void 0 ? _a : false;\n // 初始化 ACP JSON-RPC Client\n this.acpClient = new AcpJsonRpcClient_1.AcpJsonRpcClient(this.channel, {\n timeoutMs: (_c = (_b = config.acpConfig) === null || _b === void 0 ? void 0 : _b.timeoutMs) !== null && _c !== void 0 ? _c : 30000,\n debug: this.debug\n });\n // 初始化监听\n this.setupListener();\n this.setupAcpClientListeners();\n this.log('Initialized with IWidgetChannel and AcpJsonRpcClient');\n }\n getAllSessions() {\n throw new Error('Method not implemented.');\n }\n releasePermissionRequest(toolCallId, outcome) {\n throw new Error('Method not implemented.');\n }\n loadSession(params) {\n throw new Error('Method not implemented.');\n }\n extMethod(method, params) {\n throw new Error('Method not implemented.');\n }\n extNotification(method, params) {\n throw new Error('Method not implemented.');\n }\n // ========================================================================\n // 基础方法\n // ========================================================================\n // ========== ACP Agent 协议方法实现 ==========\n /**\n * ACP 协议: newSession - 创建新会话\n * 协议文档: https://agentclientprotocol.com/protocol/session-setup\n */\n async newSession(request) {\n this.log('sessionNew called');\n return await this.acpClient.newSession(request);\n }\n // ========== ACP 原生事件监听器 ==========\n /**\n * 监听会话更新事件(ACP 协议原生)\n */\n onSessionUpdate(callback) {\n return this.acpClient.onSessionUpdate(callback);\n }\n /**\n * 监听权限请求事件(ACP 协议原生)\n */\n onRequestPermission(callback) {\n return this.acpClient.onRequestPermission(callback);\n }\n /**\n * 监听错误事件(扩展事件,非 ACP 标准协议)\n */\n onError(callback) {\n this.errorCallbacks.add(callback);\n return () => {\n this.errorCallbacks.delete(callback);\n };\n }\n /**\n * 调试日志\n */\n log(...args) {\n if (this.debug) {\n console.log('[IPCAgentProvider]', ...args);\n }\n }\n // ========================================================================\n // ACP Agent 协议方法 - 全部通过 AcpJsonRpcClient 转发\n // ========================================================================\n /**\n * ACP 协议: initialize - 初始化连接\n * 协议文档: https://agentclientprotocol.com/protocol/initialization\n */\n async initialize(request) {\n this.log('initialize called');\n return await this.acpClient.initialize(request);\n }\n /**\n * ACP 协议: authenticate - 认证\n */\n async authenticate(request) {\n this.log('authenticate called');\n return await this.acpClient.authenticate(request);\n }\n /**\n * ACP 协议: session/new - 创建新会话\n * 协议文档: https://agentclientprotocol.com/protocol/session-setup\n *\n * 注意:窗口绑定需要单独调用 bindSession 方法\n */\n async sessionNew(request) {\n this.log('sessionNew called');\n return await this.acpClient.newSession(request);\n }\n /**\n * ACP 协议: session/load - 加载现有会话\n * 协议文档: https://agentclientprotocol.com/protocol/session-setup\n */\n async sessionLoad(request) {\n this.log('sessionLoad called');\n return await this.acpClient.loadSession(request);\n }\n /**\n * ACP 协议: session/prompt - 发送提示消息\n * 协议文档: https://agentclientprotocol.com/protocol/sessions\n */\n async sendMessage(request) {\n try {\n this.log('Sending message for session:', request.sessionId);\n // 使用 ACP Client 发送 prompt 请求\n await this.acpClient.prompt(request);\n this.log('Message sent successfully:', request.sessionId);\n }\n catch (error) {\n this.log('Send message failed:', error);\n // 通知错误回调\n const errorObj = error instanceof Error ? error : new Error('Unknown error');\n this.errorCallbacks.forEach(callback => {\n try {\n callback(errorObj, request.sessionId);\n }\n catch (err) {\n console.error('[IPCAgentProvider] Error callback error:', err);\n }\n });\n throw error;\n }\n }\n /**\n * ACP 协议: cancel - 取消操作\n */\n async cancelMessage(sessionId) {\n try {\n this.log('Cancelling message for session:', sessionId);\n // 使用 ACP Client 发送 cancel 请求\n await this.acpClient.cancel({ sessionId });\n this.log('Message cancelled successfully:', sessionId);\n }\n catch (error) {\n this.log('Cancel message failed:', error);\n throw error;\n }\n }\n /**\n * ACP 协议: setSessionModel - 设置会话模型\n */\n async setSessionModel(params) {\n this.log('setSessionModel called for session:', params.sessionId);\n return await this.acpClient.setSessionModel(params);\n }\n /**\n * ACP 协议: setSessionMode - 设置会话模式\n */\n async setSessionMode(params) {\n this.log('setSessionMode called for session:', params.sessionId);\n return await this.acpClient.setSessionMode(params);\n }\n /**\n * 绑定 session 到 window\n * 当创建新对话时调用此方法,建立 sessionId → windowId 映射\n */\n bindSession(sessionId, windowId) {\n if (this.channel.bindSession) {\n this.channel.bindSession(sessionId, windowId);\n this.log('Bound session', sessionId, 'to window', windowId);\n }\n else {\n this.log('bindSession called but channel does not support it');\n }\n }\n /**\n * 解除 session 绑定\n */\n unbindSession(sessionId) {\n if (this.channel.unbindSession) {\n this.channel.unbindSession(sessionId);\n this.log('Unbound session', sessionId);\n }\n }\n /**\n * 绑定 conversation 到 window (向后兼容方法)\n * @deprecated 使用 bindSession 代替\n */\n bindConversation(conversationId, windowId) {\n this.bindSession(conversationId, windowId);\n }\n /**\n * 解除 conversation 绑定 (向后兼容方法)\n * @deprecated 使用 unbindSession 代替\n */\n unbindConversation(conversationId) {\n this.unbindSession(conversationId);\n }\n prompt(params) {\n return this.acpClient.prompt(params);\n }\n cancel(params) {\n return this.acpClient.cancel(params);\n }\n /**\n * 销毁 Provider\n */\n destroy() {\n this.log('Destroying IPCAgentProvider');\n // 销毁 ACP Client\n this.acpClient.destroy();\n // 移除 channel 监听\n this.eventHandlers.forEach(({ event, handler }) => {\n this.channel.off(event, handler);\n });\n this.eventHandlers = [];\n // 清空回调\n this.errorCallbacks.clear();\n // 清理待处理请求\n this.pendingRequests.forEach(({ timeout }) => {\n clearTimeout(timeout);\n });\n this.pendingRequests.clear();\n this.log('IPCAgentProvider destroyed');\n }\n // ========================================================================\n // 事件监听设置\n // ========================================================================\n /**\n * 设置 ACP Client 事件监听\n * 注意:现在 ACP 事件通过 onSessionUpdate/onRequestPermission 直接暴露\n * UI 层应直接调用这些方法进行监听\n */\n setupAcpClientListeners() {\n // ACP 事件现在通过 onSessionUpdate/onRequestPermission 方法直接暴露\n // 此方法保留用于未来可能需要的初始化逻辑\n this.log('ACP Client listeners setup complete (direct pass-through mode)');\n }\n /**\n * 设置 Channel 事件监听\n * 向后兼容:处理非 ACP JSON-RPC 的旧式消息(错误、完成等)\n */\n setupListener() {\n // 错误事件处理\n const errorHandler = (data) => {\n var _a;\n const sessionId = data.sessionId;\n const error = ((_a = data.data) === null || _a === void 0 ? void 0 : _a.error) ? new Error(data.data.error) : new Error('Unknown error');\n this.errorCallbacks.forEach(callback => {\n try {\n callback(error, sessionId);\n }\n catch (err) {\n console.error('[IPCAgentProvider] Error callback error:', err);\n }\n });\n };\n this.channel.on(WIDGET_EVENTS.ERROR, errorHandler);\n this.eventHandlers.push({ event: WIDGET_EVENTS.ERROR, handler: errorHandler });\n // Done 事件处理(会话完成)\n const doneHandler = (data) => {\n // Done 事件可以通过 ACP 的 session/update 消息中的 status 处理\n // 这里保留日志记录以便调试\n this.log('Session done event received:', data.sessionId);\n };\n this.channel.on(WIDGET_EVENTS.DONE, doneHandler);\n this.eventHandlers.push({ event: WIDGET_EVENTS.DONE, handler: doneHandler });\n // 监听响应消息(用于处理请求响应)\n const responseHandler = (data) => {\n if (data.requestId && this.pendingRequests.has(data.requestId)) {\n const pending = this.pendingRequests.get(data.requestId);\n clearTimeout(pending.timeout);\n this.pendingRequests.delete(data.requestId);\n if (data.error) {\n pending.reject(new Error(data.error));\n }\n else {\n pending.resolve(data);\n }\n }\n };\n this.channel.on('ide-message', responseHandler);\n this.eventHandlers.push({ event: 'ide-message', handler: responseHandler });\n this.log('Channel listener initialized (simplified)');\n }\n}\nexports.IPCAgentProvider = IPCAgentProvider;\n//# sourceMappingURL=IPCAgentProvider.js.map","\"use strict\";\n/**\n * Protocol Extension Types for Agent Client Protocol\n *\n * This file contains codebuddy.ai extension types that extend the base ACP protocol.\n * For SDK type re-exports and capability extensions, see ./sdk.ts\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.KNOWN_EXTENSIONS = exports.ExtensionMethod = void 0;\n// ============================================\n// Extension Method Constants\n// ============================================\n/**\n * Extension method names as const for type safety\n */\nexports.ExtensionMethod = {\n ARTIFACT: '_codebuddy.ai/artifact',\n /**\n * Question/ToolInput extension method.\n * Used for tools that require user input (e.g., AskUserQuestion).\n * Request: ToolInputRequest, Response: ToolInputResponse\n */\n QUESTION: '_codebuddy.ai/question',\n CHECKPOINT: '_codebuddy.ai/checkpoint',\n};\n/**\n * All known extension methods\n */\nexports.KNOWN_EXTENSIONS = [\n exports.ExtensionMethod.ARTIFACT,\n exports.ExtensionMethod.QUESTION,\n exports.ExtensionMethod.CHECKPOINT,\n];\n//# sourceMappingURL=types.js.map","\"use strict\";\n/**\n * SDK Type Re-exports and Capability Extensions\n *\n * This file provides:\n * 1. Re-exports of commonly used types from @agentclientprotocol/sdk\n * 2. Extended capability types with codebuddy.ai metadata\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PROTOCOL_VERSION = void 0;\n// Re-export constants\nvar sdk_1 = require(\"@agentclientprotocol/sdk\");\nObject.defineProperty(exports, \"PROTOCOL_VERSION\", { enumerable: true, get: function () { return sdk_1.PROTOCOL_VERSION; } });\n//# sourceMappingURL=sdk.js.map","\"use strict\";\n// Streamable HTTP Transport for ACP\n// Enables browser-based clients to connect to cloud-hosted ACP agents.\n//\n// Protocol flow:\n// 1. Client establishes GET SSE connection, receives Acp-Connection-Id\n// 2. Client sends POST requests with Acp-Connection-Id header\n// 3. Notifications arrive via GET SSE, responses via POST SSE\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.streamableHttp = streamableHttp;\nfunction parseSSELine(line, currentEvent) {\n if (line === '') {\n if (currentEvent.data) {\n return {\n event: {\n type: currentEvent.type || 'message',\n data: currentEvent.data,\n id: currentEvent.id,\n },\n reset: true,\n };\n }\n return { reset: true };\n }\n if (line.startsWith(':')) {\n return { reset: false };\n }\n const colonIndex = line.indexOf(':');\n if (colonIndex === -1) {\n return { reset: false };\n }\n const field = line.slice(0, colonIndex);\n let value = line.slice(colonIndex + 1);\n if (value.startsWith(' ')) {\n value = value.slice(1);\n }\n switch (field) {\n case 'event':\n // Reset data when starting a new event type\n // This prevents data from previous events being concatenated\n if (currentEvent.type && currentEvent.type !== value) {\n currentEvent.data = undefined;\n }\n currentEvent.type = value;\n break;\n case 'data':\n currentEvent.data = (currentEvent.data || '') + value;\n break;\n case 'id':\n currentEvent.id = value;\n break;\n }\n return { reset: false };\n}\n// Create a Streamable HTTP transport.\n//\n// Example:\n// const transport = streamableHttp({\n// endpoint: 'https://agent.example.com/acp',\n// authToken: 'token123',\n// onConnect: (id) => console.log('Connected:', id),\n// onDisconnect: (id) => console.log('Disconnected:', id),\n// });\n//\n// // Later, close gracefully\n// await transport.close();\nfunction streamableHttp(options) {\n const { endpoint, authToken, headers: customHeaders = {}, reconnect = {}, signal: externalSignal, fetch: customFetch = globalThis.fetch, onConnect, onDisconnect, onError, } = options;\n const { enabled: reconnectEnabled = true, initialDelay = 1000, maxDelay = 30000, maxRetries = Infinity, } = reconnect;\n // Connection state\n let connectionId;\n let lastEventId;\n let reconnectAttempts = 0;\n let closed = false;\n let isClosing = false;\n // Promise that resolves when GET SSE is connected and we have connectionId\n let connectionReady;\n let resolveConnection;\n let rejectConnection;\n // Connection version to track reconnections\n let connectionVersion = 0;\n connectionReady = new Promise((resolve, reject) => {\n resolveConnection = resolve;\n rejectConnection = reject;\n });\n const abortController = new AbortController();\n // Combine signals - use manual approach for broader compatibility\n function isAborted() {\n var _a;\n return abortController.signal.aborted || ((_a = externalSignal === null || externalSignal === void 0 ? void 0 : externalSignal.aborted) !== null && _a !== void 0 ? _a : false);\n }\n function getSignal() {\n // If external signal exists and supports AbortSignal.any, use it\n if (externalSignal && typeof AbortSignal.any === 'function') {\n return AbortSignal.any([externalSignal, abortController.signal]);\n }\n return abortController.signal;\n }\n const combinedSignal = getSignal();\n // Message queue for incoming messages\n const messageQueue = [];\n const messageResolvers = [];\n let streamError = null;\n function enqueueMessage(message) {\n if (messageResolvers.length > 0) {\n const resolver = messageResolvers.shift();\n resolver(message);\n }\n else {\n messageQueue.push(message);\n }\n }\n function dequeueMessage() {\n if (closed) {\n return Promise.resolve(null);\n }\n if (streamError) {\n return Promise.reject(streamError);\n }\n if (messageQueue.length > 0) {\n return Promise.resolve(messageQueue.shift());\n }\n return new Promise((resolve) => {\n messageResolvers.push(resolve);\n });\n }\n function closeWithError(error) {\n streamError = error;\n closed = true;\n rejectConnection(error);\n onError === null || onError === void 0 ? void 0 : onError(error);\n while (messageResolvers.length > 0) {\n const resolver = messageResolvers.shift();\n resolver(null);\n }\n }\n function closeNormally() {\n closed = true;\n while (messageResolvers.length > 0) {\n const resolver = messageResolvers.shift();\n resolver(null);\n }\n }\n // Send DELETE request to close connection gracefully\n async function sendDelete() {\n if (!connectionId || isClosing) {\n return;\n }\n isClosing = true;\n const currentConnectionId = connectionId;\n try {\n const headers = buildHeaders();\n headers['Acp-Connection-Id'] = currentConnectionId;\n await customFetch(endpoint, {\n method: 'DELETE',\n headers,\n signal: AbortSignal.timeout(5000), // 5s timeout for DELETE\n });\n }\n catch (_a) {\n // Ignore DELETE errors - connection may already be closed\n }\n finally {\n if (currentConnectionId) {\n onDisconnect === null || onDisconnect === void 0 ? void 0 : onDisconnect(currentConnectionId);\n }\n isClosing = false;\n }\n }\n function buildHeaders() {\n const headers = {\n ...customHeaders,\n };\n if (authToken) {\n headers['Authorization'] = `Bearer ${authToken}`;\n }\n return headers;\n }\n async function processSSEStream(reader) {\n const decoder = new TextDecoder();\n let buffer = '';\n let currentEvent = {};\n try {\n while (true) {\n const { value, done } = await reader.read();\n if (done)\n break;\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split('\\n');\n buffer = lines.pop() || '';\n for (const line of lines) {\n const { event, reset } = parseSSELine(line, currentEvent);\n if (event) {\n if (event.id) {\n lastEventId = event.id;\n }\n // Skip non-message events (like \"connected\")\n if (event.type !== 'message') {\n continue;\n }\n try {\n const message = JSON.parse(event.data);\n // Only enqueue valid JSON-RPC messages\n if (message && typeof message === 'object' && 'jsonrpc' in message) {\n enqueueMessage(message);\n }\n }\n catch (_a) {\n console.error('[StreamableHTTP] Failed to parse SSE data:', event.data);\n }\n }\n if (reset) {\n currentEvent = {};\n }\n }\n }\n }\n finally {\n reader.releaseLock();\n }\n }\n // Establish GET SSE connection and get connectionId\n async function startSSEConnection() {\n var _a;\n while (!closed && !isAborted()) {\n try {\n const headers = buildHeaders();\n headers['Accept'] = 'text/event-stream';\n if (lastEventId) {\n headers['Last-Event-ID'] = lastEventId;\n }\n const response = await customFetch(endpoint, {\n method: 'GET',\n headers,\n signal: combinedSignal,\n });\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}`);\n }\n // Get connection ID from response - MUST have it\n const newConnectionId = response.headers.get('Acp-Connection-Id');\n if (!newConnectionId) {\n throw new Error('Server did not return Acp-Connection-Id header');\n }\n // Track previous connection for disconnect callback\n const previousConnectionId = connectionId;\n // Update connection state atomically\n connectionVersion++;\n connectionId = newConnectionId;\n resolveConnection();\n // Notify callbacks\n if (previousConnectionId && previousConnectionId !== newConnectionId) {\n onDisconnect === null || onDisconnect === void 0 ? void 0 : onDisconnect(previousConnectionId);\n }\n onConnect === null || onConnect === void 0 ? void 0 : onConnect(newConnectionId);\n reconnectAttempts = 0;\n const reader = (_a = response.body) === null || _a === void 0 ? void 0 : _a.getReader();\n if (reader) {\n await processSSEStream(reader);\n }\n // Connection ended\n const endedConnectionId = connectionId;\n connectionId = undefined;\n if (!reconnectEnabled || closed) {\n // Not reconnecting - notify disconnect\n if (endedConnectionId) {\n onDisconnect === null || onDisconnect === void 0 ? void 0 : onDisconnect(endedConnectionId);\n }\n break;\n }\n // Reconnect - create new connectionReady promise BEFORE clearing connectionId\n // so that sendMessage waits for new connection\n connectionReady = new Promise((resolve, reject) => {\n resolveConnection = resolve;\n rejectConnection = reject;\n });\n }\n catch (error) {\n if (isAborted() || closed) {\n break;\n }\n reconnectAttempts++;\n if (reconnectAttempts > maxRetries) {\n closeWithError(new Error(`SSE reconnect failed after ${maxRetries} attempts`));\n break;\n }\n const delay = Math.min(initialDelay * Math.pow(2, reconnectAttempts - 1), maxDelay);\n console.warn(`[StreamableHTTP] SSE error, retrying in ${delay}ms (attempt ${reconnectAttempts}):`, error);\n await new Promise((resolve) => setTimeout(resolve, delay));\n }\n }\n }\n // Send message via POST\n async function sendMessage(message) {\n var _a;\n if (closed) {\n throw new Error('Connection is closed');\n }\n // Wait for GET SSE to establish and get connectionId\n // Capture version before waiting to detect reconnections\n const versionBeforeWait = connectionVersion;\n await connectionReady;\n // Check if reconnection happened while we were waiting\n if (versionBeforeWait !== connectionVersion && versionBeforeWait > 0) {\n // A reconnection happened - wait for new connection\n await connectionReady;\n }\n if (!connectionId) {\n throw new Error('No connection ID available');\n }\n const headers = buildHeaders();\n headers['Content-Type'] = 'application/json';\n headers['Accept'] = 'application/json, text/event-stream';\n headers['Acp-Connection-Id'] = connectionId;\n const response = await customFetch(endpoint, {\n method: 'POST',\n headers,\n body: JSON.stringify(message),\n signal: combinedSignal,\n });\n if (!response.ok) {\n const errorText = await response.text().catch(() => 'Unknown error');\n throw new Error(`HTTP ${response.status}: ${errorText}`);\n }\n // Handle response based on content type\n const contentType = response.headers.get('Content-Type') || '';\n if (contentType.includes('text/event-stream')) {\n const reader = (_a = response.body) === null || _a === void 0 ? void 0 : _a.getReader();\n if (reader) {\n await processSSEStream(reader);\n }\n }\n else if (contentType.includes('application/json')) {\n const data = await response.json();\n if (data && typeof data === 'object' && 'jsonrpc' in data) {\n enqueueMessage(data);\n }\n }\n // 202 responses have no body\n }\n // Start SSE connection immediately\n startSSEConnection().catch((error) => {\n console.error('[StreamableHTTP] SSE connection error:', error);\n });\n const readable = new ReadableStream({\n async pull(controller) {\n const message = await dequeueMessage();\n if (message === null) {\n controller.close();\n }\n else {\n controller.enqueue(message);\n }\n },\n cancel() {\n closeNormally();\n abortController.abort();\n },\n });\n const writable = new WritableStream({\n async write(message) {\n await sendMessage(message);\n },\n close() {\n closeNormally();\n abortController.abort();\n },\n abort(reason) {\n closeWithError(reason instanceof Error ? reason : new Error(String(reason)));\n abortController.abort();\n },\n });\n // Close the connection gracefully\n async function close() {\n if (closed) {\n return;\n }\n // Send DELETE to server first\n await sendDelete();\n // Then close locally\n closeNormally();\n abortController.abort();\n }\n return {\n readable,\n writable,\n get connectionId() {\n return connectionId;\n },\n close,\n };\n}\nexports.default = streamableHttp;\n//# sourceMappingURL=streamable-http.js.map","\"use strict\";\n/**\n * Protocol constants for Streamable HTTP ACP Client\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.LOCAL_CLIENT_CAPABILITIES = exports.CLOUD_CLIENT_CAPABILITIES = exports.DEFAULT_RECONNECT_OPTIONS = exports.DEFAULT_TOOL_INPUT_TIMEOUT = exports.DEFAULT_QUESTION_TIMEOUT = exports.DEFAULT_PERMISSION_TIMEOUT = exports.DEFAULT_PROMPT_TIMEOUT = exports.DEFAULT_INITIALIZE_TIMEOUT = exports.KNOWN_EXTENSIONS = exports.ExtensionMethod = void 0;\nconst types_js_1 = require(\"../types.js\");\nObject.defineProperty(exports, \"ExtensionMethod\", { enumerable: true, get: function () { return types_js_1.ExtensionMethod; } });\nObject.defineProperty(exports, \"KNOWN_EXTENSIONS\", { enumerable: true, get: function () { return types_js_1.KNOWN_EXTENSIONS; } });\n// ============================================\n// Default Timeouts (in milliseconds)\n// ============================================\n/**\n * Default timeout for initialize operation\n */\nexports.DEFAULT_INITIALIZE_TIMEOUT = 30000; // 30 seconds\n/**\n * Default timeout for prompt operation\n */\nexports.DEFAULT_PROMPT_TIMEOUT = 300000; // 5 minutes\n/**\n * Default timeout for permission requests\n */\nexports.DEFAULT_PERMISSION_TIMEOUT = 300000; // 5 minutes\n/**\n * Default timeout for question requests (ask_followup_question)\n */\nexports.DEFAULT_QUESTION_TIMEOUT = 300000; // 5 minutes\n/**\n * Default timeout for tool input requests\n * @deprecated Use DEFAULT_QUESTION_TIMEOUT instead\n */\nexports.DEFAULT_TOOL_INPUT_TIMEOUT = exports.DEFAULT_QUESTION_TIMEOUT;\n// ============================================\n// Default Reconnect Configuration\n// ============================================\n/**\n * Default reconnect options\n */\nexports.DEFAULT_RECONNECT_OPTIONS = {\n enabled: true,\n initialDelay: 1000, // 1 second\n maxDelay: 30000, // 30 seconds\n maxRetries: Infinity\n};\n// ============================================\n// Client Capabilities\n// ============================================\n/**\n * Default client capabilities for cloud-based clients\n * Cloud clients typically have no direct file system access\n */\nexports.CLOUD_CLIENT_CAPABILITIES = {\n fs: {\n readTextFile: false,\n writeTextFile: false\n }\n};\n/**\n * Default client capabilities for local (Node.js) clients\n * Local clients have file system access\n */\nexports.LOCAL_CLIENT_CAPABILITIES = {\n fs: {\n readTextFile: true,\n writeTextFile: true\n }\n};\n//# sourceMappingURL=constants.js.map","\"use strict\";\n/**\n * Custom error classes for Streamable HTTP ACP Client\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.InvalidStateError = exports.TimeoutError = exports.PermissionError = exports.PromptError = exports.SessionError = exports.InitializationError = exports.ConnectionError = exports.ACPClientError = void 0;\n/**\n * Base error class for all ACP client errors\n */\nclass ACPClientError extends Error {\n constructor(message, code, cause) {\n super(message);\n this.name = 'ACPClientError';\n this.code = code;\n this.cause = cause;\n // Maintain proper stack trace in V8 environments\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n }\n}\nexports.ACPClientError = ACPClientError;\n/**\n * Error thrown when connection fails\n */\nclass ConnectionError extends ACPClientError {\n constructor(message, cause) {\n super(message, 'CONNECTION_ERROR', cause);\n this.name = 'ConnectionError';\n }\n}\nexports.ConnectionError = ConnectionError;\n/**\n * Error thrown when initialization fails\n */\nclass InitializationError extends ACPClientError {\n constructor(message, cause) {\n super(message, 'INITIALIZATION_ERROR', cause);\n this.name = 'InitializationError';\n }\n}\nexports.InitializationError = InitializationError;\n/**\n * Error thrown for session-related failures\n */\nclass SessionError extends ACPClientError {\n constructor(message, sessionId, cause) {\n super(message, 'SESSION_ERROR', cause);\n this.name = 'SessionError';\n this.sessionId = sessionId;\n }\n}\nexports.SessionError = SessionError;\n/**\n * Error thrown when prompt operation fails\n */\nclass PromptError extends ACPClientError {\n constructor(message, sessionId, cause) {\n super(message, 'PROMPT_ERROR', cause);\n this.name = 'PromptError';\n this.sessionId = sessionId;\n }\n}\nexports.PromptError = PromptError;\n/**\n * Error thrown for permission-related failures\n */\nclass PermissionError extends ACPClientError {\n constructor(message, requestId, cause) {\n super(message, 'PERMISSION_ERROR', cause);\n this.name = 'PermissionError';\n this.requestId = requestId;\n }\n}\nexports.PermissionError = PermissionError;\n/**\n * Error thrown when an operation times out\n */\nclass TimeoutError extends ACPClientError {\n constructor(operation, timeoutMs) {\n super(`Operation '${operation}' timed out after ${timeoutMs}ms`, 'TIMEOUT_ERROR');\n this.name = 'TimeoutError';\n this.operation = operation;\n this.timeoutMs = timeoutMs;\n }\n}\nexports.TimeoutError = TimeoutError;\n/**\n * Error thrown when client is in invalid state for an operation\n */\nclass InvalidStateError extends ACPClientError {\n constructor(operation, currentState, expectedStates) {\n super(`Cannot perform '${operation}' in state '${currentState}'. Expected: ${expectedStates.join(' or ')}`, 'INVALID_STATE_ERROR');\n this.name = 'InvalidStateError';\n this.currentState = currentState;\n this.expectedStates = expectedStates;\n }\n}\nexports.InvalidStateError = InvalidStateError;\n//# sourceMappingURL=errors.js.map","\"use strict\";\n/**\n * Type-safe event emitter for Streamable HTTP ACP Client\n * Platform-agnostic implementation (no browser dependencies)\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.EventEmitter = void 0;\n/**\n * Type-safe event emitter implementation\n */\nclass EventEmitter {\n constructor() {\n this.listeners = new Map();\n this.onceListeners = new Map();\n }\n /**\n * Add an event listener\n */\n on(event, listener) {\n if (!this.listeners.has(event)) {\n this.listeners.set(event, new Set());\n }\n this.listeners.get(event).add(listener);\n return this;\n }\n /**\n * Remove an event listener\n */\n off(event, listener) {\n const eventListeners = this.listeners.get(event);\n if (eventListeners) {\n eventListeners.delete(listener);\n }\n const onceEventListeners = this.onceListeners.get(event);\n if (onceEventListeners) {\n onceEventListeners.delete(listener);\n }\n return this;\n }\n /**\n * Add a one-time event listener\n */\n once(event, listener) {\n if (!this.onceListeners.has(event)) {\n this.onceListeners.set(event, new Set());\n }\n this.onceListeners.get(event).add(listener);\n return this;\n }\n /**\n * Emit an event to all registered listeners\n * Returns true if any listeners were invoked\n */\n emit(event, data) {\n const regularListeners = this.listeners.get(event);\n const onceEventListeners = this.onceListeners.get(event);\n let hasListeners = false;\n // Call regular listeners\n if (regularListeners && regularListeners.size > 0) {\n hasListeners = true;\n for (const listener of regularListeners) {\n try {\n const result = listener(data);\n // Handle async listeners\n if (result instanceof Promise) {\n result.catch((err) => {\n console.error(`Error in async event listener for '${String(event)}':`, err);\n });\n }\n }\n catch (err) {\n console.error(`Error in event listener for '${String(event)}':`, err);\n }\n }\n }\n // Call once listeners and remove them\n if (onceEventListeners && onceEventListeners.size > 0) {\n hasListeners = true;\n const listenersToCall = Array.from(onceEventListeners);\n this.onceListeners.delete(event);\n for (const listener of listenersToCall) {\n try {\n const result = listener(data);\n if (result instanceof Promise) {\n result.catch((err) => {\n console.error(`Error in async once event listener for '${String(event)}':`, err);\n });\n }\n }\n catch (err) {\n console.error(`Error in once event listener for '${String(event)}':`, err);\n }\n }\n }\n return hasListeners;\n }\n /**\n * Remove all listeners for an event, or all listeners if no event specified\n */\n removeAllListeners(event) {\n if (event !== undefined) {\n this.listeners.delete(event);\n this.onceListeners.delete(event);\n }\n else {\n this.listeners.clear();\n this.onceListeners.clear();\n }\n return this;\n }\n /**\n * Get the number of listeners for an event\n */\n listenerCount(event) {\n var _a, _b, _c, _d;\n const regular = (_b = (_a = this.listeners.get(event)) === null || _a === void 0 ? void 0 : _a.size) !== null && _b !== void 0 ? _b : 0;\n const once = (_d = (_c = this.onceListeners.get(event)) === null || _c === void 0 ? void 0 : _c.size) !== null && _d !== void 0 ? _d : 0;\n return regular + once;\n }\n /**\n * Get all event names that have listeners\n */\n eventNames() {\n const names = new Set();\n for (const event of this.listeners.keys()) {\n names.add(event);\n }\n for (const event of this.onceListeners.keys()) {\n names.add(event);\n }\n return Array.from(names);\n }\n}\nexports.EventEmitter = EventEmitter;\n//# sourceMappingURL=events.js.map","\"use strict\";\n/**\n * Artifact Manager for Streamable HTTP ACP Client\n * Handles artifact notification processing\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ArtifactManager = void 0;\n/**\n * Manages artifact notifications from the agent\n */\nclass ArtifactManager {\n constructor(config) {\n this.artifacts = new Map();\n this.eventCallbacks = new Set();\n this.logger = config.logger;\n }\n /**\n * Register a callback for artifact events\n */\n onArtifactEvent(callback) {\n this.eventCallbacks.add(callback);\n return () => {\n this.eventCallbacks.delete(callback);\n };\n }\n /**\n * Handle an artifact notification from the agent\n */\n handleNotification(notification) {\n var _a, _b;\n const { event } = notification;\n if (event === 'deleted') {\n const { artifact } = notification;\n const existing = this.artifacts.get(artifact.id);\n (_a = this.logger) === null || _a === void 0 ? void 0 : _a.debug(`Artifact deleted: ${artifact.id}`);\n this.artifacts.delete(artifact.id);\n // Notify callbacks with existing artifact if available\n if (existing) {\n this.notifyCallbacks(existing, event);\n }\n }\n else {\n const { artifact } = notification;\n (_b = this.logger) === null || _b === void 0 ? void 0 : _b.debug(`Artifact ${event}: ${artifact.id} (${artifact.type})`);\n this.artifacts.set(artifact.id, artifact);\n this.notifyCallbacks(artifact, event);\n }\n }\n notifyCallbacks(artifact, event) {\n var _a;\n for (const callback of this.eventCallbacks) {\n try {\n callback(artifact, event);\n }\n catch (err) {\n (_a = this.logger) === null || _a === void 0 ? void 0 : _a.error('Error in artifact event callback:', err);\n }\n }\n }\n /**\n * Get an artifact by ID (used internally for deleted event handling)\n */\n get(id) {\n return this.artifacts.get(id);\n }\n /**\n * Clear all artifacts\n */\n clear() {\n var _a;\n this.artifacts.clear();\n (_a = this.logger) === null || _a === void 0 ? void 0 : _a.debug('Cleared all artifacts');\n }\n}\nexports.ArtifactManager = ArtifactManager;\n//# sourceMappingURL=artifacts.js.map","\"use strict\";\n/**\n * Permission Manager for Streamable HTTP ACP Client\n * Handles permission requests with timeout support\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PermissionManager = void 0;\nconst constants_js_1 = require(\"./constants.js\");\nconst errors_js_1 = require(\"./errors.js\");\n/**\n * Manages permission requests from the agent\n */\nclass PermissionManager {\n constructor(config = {}) {\n this.pending = new Map();\n this.callbacks = {};\n this.config = {\n timeout: constants_js_1.DEFAULT_PERMISSION_TIMEOUT,\n autoRejectOnTimeout: true,\n autoApprove: false,\n ...config\n };\n }\n /**\n * Set event callbacks\n */\n setCallbacks(callbacks) {\n this.callbacks = callbacks;\n }\n /**\n * Handle a permission request from the agent\n */\n async handleRequest(params) {\n var _a, _b, _c;\n const requestId = params.toolCall.toolCallId;\n (_a = this.config.logger) === null || _a === void 0 ? void 0 : _a.debug(`Permission request received: ${requestId}`);\n // Auto-approve mode\n if (this.config.autoApprove) {\n const firstOption = params.options[0];\n (_b = this.config.logger) === null || _b === void 0 ? void 0 : _b.debug(`Auto-approving permission: ${requestId}`);\n return {\n outcome: {\n outcome: 'selected',\n optionId: (_c = firstOption === null || firstOption === void 0 ? void 0 : firstOption.optionId) !== null && _c !== void 0 ? _c : 'approve'\n }\n };\n }\n // Custom handler\n if (this.config.handler) {\n return this.config.handler(params);\n }\n // Create pending permission\n return new Promise((resolve, reject) => {\n var _a, _b;\n const pending = {\n params,\n resolve,\n reject,\n createdAt: Date.now()\n };\n // Set up timeout\n if (this.config.timeout && this.config.timeout > 0) {\n pending.timeoutId = setTimeout(() => {\n this.handleTimeout(requestId);\n }, this.config.timeout);\n }\n this.pending.set(requestId, pending);\n // Notify callback\n (_b = (_a = this.callbacks).onRequest) === null || _b === void 0 ? void 0 : _b.call(_a, requestId, params);\n });\n }\n /**\n * Handle timeout for a permission request\n */\n handleTimeout(requestId) {\n var _a, _b, _c, _d;\n const pending = this.pending.get(requestId);\n if (!pending)\n return;\n (_a = this.config.logger) === null || _a === void 0 ? void 0 : _a.warn(`Permission request timed out: ${requestId}`);\n (_c = (_b = this.callbacks).onTimeout) === null || _c === void 0 ? void 0 : _c.call(_b, requestId);\n if (this.config.autoRejectOnTimeout) {\n pending.resolve({\n outcome: { outcome: 'cancelled' }\n });\n }\n else {\n pending.reject(new errors_js_1.TimeoutError('permission', (_d = this.config.timeout) !== null && _d !== void 0 ? _d : constants_js_1.DEFAULT_PERMISSION_TIMEOUT));\n }\n this.pending.delete(requestId);\n }\n /**\n * Resolve a permission request with a selected option\n * Returns true if the permission was found and resolved\n */\n resolve(requestId, optionId) {\n var _a, _b, _c, _d;\n const pending = this.pending.get(requestId);\n if (!pending) {\n (_a = this.config.logger) === null || _a === void 0 ? void 0 : _a.warn(`Permission request not found: ${requestId}`);\n return false;\n }\n // Clear timeout\n if (pending.timeoutId) {\n clearTimeout(pending.timeoutId);\n }\n (_b = this.config.logger) === null || _b === void 0 ? void 0 : _b.debug(`Permission resolved: ${requestId} -> ${optionId}`);\n pending.resolve({\n outcome: { outcome: 'selected', optionId }\n });\n this.pending.delete(requestId);\n (_d = (_c = this.callbacks).onResolved) === null || _d === void 0 ? void 0 : _d.call(_c, requestId, optionId);\n return true;\n }\n /**\n * Reject (cancel) a permission request\n * Returns true if the permission was found and rejected\n */\n reject(requestId, reason) {\n var _a, _b, _c, _d;\n const pending = this.pending.get(requestId);\n if (!pending) {\n (_a = this.config.logger) === null || _a === void 0 ? void 0 : _a.warn(`Permission request not found: ${requestId}`);\n return false;\n }\n // Clear timeout\n if (pending.timeoutId) {\n clearTimeout(pending.timeoutId);\n }\n (_b = this.config.logger) === null || _b === void 0 ? void 0 : _b.debug(`Permission rejected: ${requestId}${reason ? ` - ${reason}` : ''}`);\n pending.resolve({\n outcome: { outcome: 'cancelled' }\n });\n this.pending.delete(requestId);\n (_d = (_c = this.callbacks).onRejected) === null || _d === void 0 ? void 0 : _d.call(_c, requestId, reason);\n return true;\n }\n /**\n * Get all pending permissions\n */\n getPending() {\n const result = new Map();\n for (const [id, pending] of this.pending) {\n result.set(id, {\n params: pending.params,\n createdAt: pending.createdAt\n });\n }\n return result;\n }\n /**\n * Get a specific pending permission\n */\n getPendingById(requestId) {\n const pending = this.pending.get(requestId);\n if (!pending)\n return undefined;\n return {\n params: pending.params,\n createdAt: pending.createdAt\n };\n }\n /**\n * Check if there are any pending permissions\n */\n hasPending() {\n return this.pending.size > 0;\n }\n /**\n * Get the count of pending permissions\n */\n get pendingCount() {\n return this.pending.size;\n }\n /**\n * Clear all pending permissions (reject all)\n */\n clear() {\n var _a, _b, _c;\n for (const [requestId, pending] of this.pending) {\n if (pending.timeoutId) {\n clearTimeout(pending.timeoutId);\n }\n pending.resolve({\n outcome: { outcome: 'cancelled' }\n });\n (_b = (_a = this.callbacks).onRejected) === null || _b === void 0 ? void 0 : _b.call(_a, requestId, 'cleared');\n }\n this.pending.clear();\n (_c = this.config.logger) === null || _c === void 0 ? void 0 : _c.debug('Cleared all pending permissions');\n }\n /**\n * Update configuration\n */\n updateConfig(config) {\n this.config = { ...this.config, ...config };\n }\n}\nexports.PermissionManager = PermissionManager;\n//# sourceMappingURL=permissions.js.map","\"use strict\";\n/**\n * Question Manager for Streamable HTTP ACP Client\n * Handles ask_followup_question tool input requests with timeout support\n *\n * This provides a strongly-typed API for the \"question\" input type,\n * while the underlying protocol uses the generic _codebuddy.ai/tool_input extMethod.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.QuestionManager = void 0;\nconst constants_js_1 = require(\"./constants.js\");\nconst errors_js_1 = require(\"./errors.js\");\n/**\n * Converts ToolInputRequest to QuestionRequest for client-facing API\n */\nfunction toQuestionRequest(params) {\n const schema = params.schema;\n return {\n sessionId: params.sessionId,\n toolCallId: params.toolCallId,\n questions: schema.questions,\n timeout: params.timeout,\n _meta: params._meta\n };\n}\n/**\n * Manages question requests from the agent (ask_followup_question tool)\n *\n * Provides strongly-typed methods for handling questions while internally\n * using the generic ToolInputRequest/ToolInputResponse protocol types.\n */\nclass QuestionManager {\n constructor(config = {}) {\n this.pending = new Map();\n this.callbacks = {};\n this.config = {\n timeout: constants_js_1.DEFAULT_QUESTION_TIMEOUT,\n autoCancelOnTimeout: true,\n ...config\n };\n }\n /**\n * Set event callbacks\n */\n setCallbacks(callbacks) {\n this.callbacks = callbacks;\n }\n /**\n * Handle a tool input request from the agent\n * This is called internally when receiving _codebuddy.ai/tool_input extMethod\n */\n async handleRequest(params) {\n var _a;\n const toolCallId = params.toolCallId;\n (_a = this.config.logger) === null || _a === void 0 ? void 0 : _a.debug(`Question request received: ${toolCallId}`);\n // Create pending request\n return new Promise((resolve, reject) => {\n var _a, _b, _c;\n const pending = {\n params,\n resolve,\n reject,\n createdAt: Date.now()\n };\n // Set up timeout (use request-level timeout if provided, otherwise use config)\n const timeout = (_a = params.timeout) !== null && _a !== void 0 ? _a : this.config.timeout;\n if (timeout && timeout > 0) {\n pending.timeoutId = setTimeout(() => {\n this.handleTimeout(toolCallId);\n }, timeout);\n }\n this.pending.set(toolCallId, pending);\n // Notify callback with strongly-typed QuestionRequest\n if (params.inputType === 'question') {\n (_c = (_b = this.callbacks).onRequest) === null || _c === void 0 ? void 0 : _c.call(_b, toolCallId, toQuestionRequest(params));\n }\n });\n }\n /**\n * Handle timeout for a question request\n */\n handleTimeout(toolCallId) {\n var _a, _b, _c, _d;\n const pending = this.pending.get(toolCallId);\n if (!pending)\n return;\n (_a = this.config.logger) === null || _a === void 0 ? void 0 : _a.warn(`Question request timed out: ${toolCallId}`);\n (_c = (_b = this.callbacks).onTimeout) === null || _c === void 0 ? void 0 : _c.call(_b, toolCallId);\n if (this.config.autoCancelOnTimeout) {\n pending.resolve({\n outcome: { outcome: 'cancelled', reason: 'timeout' }\n });\n }\n else {\n pending.reject(new errors_js_1.TimeoutError('question', (_d = this.config.timeout) !== null && _d !== void 0 ? _d : constants_js_1.DEFAULT_QUESTION_TIMEOUT));\n }\n this.pending.delete(toolCallId);\n }\n /**\n * Answer a question request with user's selections\n * Returns true if the request was found and answered\n */\n answer(toolCallId, answers) {\n var _a, _b, _c, _d;\n const pending = this.pending.get(toolCallId);\n if (!pending) {\n (_a = this.config.logger) === null || _a === void 0 ? void 0 : _a.warn(`Question request not found: ${toolCallId}`);\n return false;\n }\n // Clear timeout\n if (pending.timeoutId) {\n clearTimeout(pending.timeoutId);\n }\n (_b = this.config.logger) === null || _b === void 0 ? void 0 : _b.debug(`Question answered: ${toolCallId}`);\n pending.resolve({\n outcome: { outcome: 'submitted', data: answers }\n });\n this.pending.delete(toolCallId);\n (_d = (_c = this.callbacks).onAnswered) === null || _d === void 0 ? void 0 : _d.call(_c, toolCallId, answers);\n return true;\n }\n /**\n * Cancel a question request\n * Returns true if the request was found and cancelled\n */\n cancel(toolCallId, reason) {\n var _a, _b, _c, _d;\n const pending = this.pending.get(toolCallId);\n if (!pending) {\n (_a = this.config.logger) === null || _a === void 0 ? void 0 : _a.warn(`Question request not found: ${toolCallId}`);\n return false;\n }\n // Clear timeout\n if (pending.timeoutId) {\n clearTimeout(pending.timeoutId);\n }\n (_b = this.config.logger) === null || _b === void 0 ? void 0 : _b.debug(`Question cancelled: ${toolCallId}${reason ? ` - ${reason}` : ''}`);\n pending.resolve({\n outcome: { outcome: 'cancelled', reason }\n });\n this.pending.delete(toolCallId);\n (_d = (_c = this.callbacks).onCancelled) === null || _d === void 0 ? void 0 : _d.call(_c, toolCallId, reason);\n return true;\n }\n /**\n * Get all pending question requests\n */\n getPending() {\n const result = new Map();\n for (const [id, pending] of this.pending) {\n if (pending.params.inputType === 'question') {\n result.set(id, {\n request: toQuestionRequest(pending.params),\n createdAt: pending.createdAt\n });\n }\n }\n return result;\n }\n /**\n * Get a specific pending question request\n */\n getPendingById(toolCallId) {\n const pending = this.pending.get(toolCallId);\n if (!pending || pending.params.inputType !== 'question')\n return undefined;\n return {\n request: toQuestionRequest(pending.params),\n createdAt: pending.createdAt\n };\n }\n /**\n * Check if there are any pending question requests\n */\n hasPending() {\n return this.pending.size > 0;\n }\n /**\n * Get the count of pending question requests\n */\n get pendingCount() {\n return this.pending.size;\n }\n /**\n * Clear all pending question requests (cancel all)\n */\n clear() {\n var _a, _b, _c;\n for (const [toolCallId, pending] of this.pending) {\n if (pending.timeoutId) {\n clearTimeout(pending.timeoutId);\n }\n pending.resolve({\n outcome: { outcome: 'cancelled', reason: 'cleared' }\n });\n (_b = (_a = this.callbacks).onCancelled) === null || _b === void 0 ? void 0 : _b.call(_a, toolCallId, 'cleared');\n }\n this.pending.clear();\n (_c = this.config.logger) === null || _c === void 0 ? void 0 : _c.debug('Cleared all pending question requests');\n }\n /**\n * Update configuration\n */\n updateConfig(config) {\n this.config = { ...this.config, ...config };\n }\n}\nexports.QuestionManager = QuestionManager;\n//# sourceMappingURL=questions.js.map","\"use strict\";\n/**\n * Extension Method Handler for Streamable HTTP ACP Client\n * Routes and handles custom extension notifications\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ExtensionManager = void 0;\nexports.parseUsageUpdate = parseUsageUpdate;\nconst constants_js_1 = require(\"./constants.js\");\n/**\n * Manages extension methods and notifications\n */\nclass ExtensionManager {\n constructor(config = {}) {\n this.handlers = new Map();\n this.config = config;\n }\n /**\n * Register a handler for a specific extension method\n */\n registerHandler(method, handler) {\n this.handlers.set(method, handler);\n return () => {\n this.handlers.delete(method);\n };\n }\n /**\n * Set a fallback handler for unknown extensions\n */\n setFallbackHandler(handler) {\n this.fallbackHandler = handler;\n }\n /**\n * Handle an extension notification\n */\n async handleNotification(method, params) {\n var _a, _b;\n (_a = this.config.logger) === null || _a === void 0 ? void 0 : _a.debug(`Extension notification: ${method}`);\n // Try specific handler first\n const handler = this.handlers.get(method);\n if (handler) {\n await handler(method, params);\n return;\n }\n // Try fallback handler\n if (this.fallbackHandler) {\n await this.fallbackHandler(method, params);\n return;\n }\n // Log unknown extension\n if (!this.isKnownExtension(method)) {\n (_b = this.config.logger) === null || _b === void 0 ? void 0 : _b.warn(`Unknown extension notification: ${method}`);\n }\n }\n /**\n * Check if a method is a known extension\n */\n isKnownExtension(method) {\n return constants_js_1.KNOWN_EXTENSIONS.includes(method);\n }\n /**\n * Check if method is the artifact extension\n */\n isArtifactExtension(method) {\n return method === constants_js_1.ExtensionMethod.ARTIFACT;\n }\n /**\n * Clear all handlers\n */\n clear() {\n this.handlers.clear();\n this.fallbackHandler = undefined;\n }\n}\nexports.ExtensionManager = ExtensionManager;\n/**\n * Parse usage update from extension params\n */\nfunction parseUsageUpdate(params) {\n return {\n sessionId: params.sessionId,\n inputTokens: params.inputTokens,\n outputTokens: params.outputTokens,\n totalTokens: params.totalTokens,\n cost: params.cost,\n model: params.model,\n _meta: params._meta\n };\n}\n//# sourceMappingURL=extensions.js.map","\"use strict\";\n/**\n * Streamable HTTP ACP Client\n * Production-grade client for connecting to cloud-hosted ACP agents\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.StreamableHttpClient = void 0;\nconst sdk_1 = require(\"@agentclientprotocol/sdk\");\nconst streamable_http_js_1 = require(\"../transport/streamable-http.js\");\nconst constants_js_1 = require(\"./constants.js\");\nconst errors_js_1 = require(\"./errors.js\");\nconst events_js_1 = require(\"./events.js\");\nconst artifacts_js_1 = require(\"./artifacts.js\");\nconst permissions_js_1 = require(\"./permissions.js\");\nconst questions_js_1 = require(\"./questions.js\");\nconst extensions_js_1 = require(\"./extensions.js\");\n/**\n * Production-grade Streamable HTTP ACP Client\n *\n * Features:\n * - Full ACP protocol support (initialize, session, prompt, cancel)\n * - Artifact notification handling\n * - Permission handling with timeout support\n * - Extension method support\n * - Type-safe event system\n * - Configurable logging\n */\nclass StreamableHttpClient {\n constructor(options) {\n var _a, _b;\n this.state = 'disconnected';\n // Event emitter\n this.emitter = new events_js_1.EventEmitter();\n this.options = options;\n // Initialize artifact manager\n this.artifactManager = new artifacts_js_1.ArtifactManager({\n logger: options.logger\n });\n // Initialize permission manager\n this.permissionManager = new permissions_js_1.PermissionManager({\n timeout: options.permissionTimeout,\n autoRejectOnTimeout: (_a = options.permissionAutoRejectOnTimeout) !== null && _a !== void 0 ? _a : true,\n autoApprove: options.autoApprove,\n handler: options.requestPermissionHandler,\n logger: options.logger\n });\n // Set up permission event callbacks\n this.permissionManager.setCallbacks({\n onRequest: (requestId, params) => {\n this.emitter.emit('permissionRequest', { requestId, params });\n },\n onResolved: (requestId, optionId) => {\n this.emitter.emit('permissionResolved', { requestId, optionId });\n },\n onRejected: (requestId, reason) => {\n this.emitter.emit('permissionRejected', { requestId, reason });\n },\n onTimeout: (requestId) => {\n this.emitter.emit('permissionTimeout', { requestId });\n }\n });\n // Initialize question manager\n this.questionManager = new questions_js_1.QuestionManager({\n timeout: options.questionTimeout,\n autoCancelOnTimeout: (_b = options.questionAutoCancelOnTimeout) !== null && _b !== void 0 ? _b : true,\n logger: options.logger\n });\n // Set up question event callbacks\n this.questionManager.setCallbacks({\n onRequest: (toolCallId, request) => {\n var _a;\n this.emitter.emit('questionRequest', { toolCallId, request });\n (_a = options.onQuestionRequest) === null || _a === void 0 ? void 0 : _a.call(options, toolCallId, request);\n },\n onAnswered: (toolCallId, answers) => {\n this.emitter.emit('questionAnswered', { toolCallId, answers });\n },\n onCancelled: (toolCallId, reason) => {\n this.emitter.emit('questionCancelled', { toolCallId, reason });\n },\n onTimeout: (toolCallId) => {\n this.emitter.emit('questionTimeout', { toolCallId });\n }\n });\n // Initialize extension manager\n this.extensionManager = new extensions_js_1.ExtensionManager({\n logger: options.logger\n });\n }\n // ============================================\n // State Management\n // ============================================\n /**\n * Get current client state\n */\n get currentState() {\n return this.state;\n }\n /**\n * Check if client is initialized\n */\n get isInitialized() {\n return this.state === 'initialized';\n }\n /**\n * Check if client is connected (but maybe not initialized)\n */\n get isConnected() {\n return this.state === 'connected' || this.state === 'initialized';\n }\n /**\n * Get agent capabilities from initialization response\n */\n get agentCapabilities() {\n var _a;\n return (_a = this.initializeResponse) === null || _a === void 0 ? void 0 : _a.agentCapabilities;\n }\n /**\n * Get full initialization response\n */\n get initializeResult() {\n return this.initializeResponse;\n }\n /**\n * Get current transport connection ID\n */\n get connectionId() {\n var _a;\n return (_a = this.transport) === null || _a === void 0 ? void 0 : _a.connectionId;\n }\n setState(newState) {\n var _a;\n const previous = this.state;\n this.state = newState;\n (_a = this.options.logger) === null || _a === void 0 ? void 0 : _a.debug(`State change: ${previous} -> ${newState}`);\n this.emitter.emit('stateChange', { previous, current: newState });\n // Emit specific state events\n switch (newState) {\n case 'connecting':\n this.emitter.emit('connecting', undefined);\n break;\n case 'connected':\n this.emitter.emit('connected', undefined);\n break;\n case 'disconnected':\n this.emitter.emit('disconnected', undefined);\n break;\n case 'error':\n // Error event is emitted separately with the actual error\n break;\n }\n }\n // ============================================\n // Connection Management\n // ============================================\n /**\n * Connect and initialize the client\n */\n async connect() {\n var _a, _b, _c;\n if (this.state === 'initialized') {\n return this.initializeResponse;\n }\n if (this.state === 'connecting') {\n throw new errors_js_1.ConnectionError('Connection already in progress');\n }\n this.setState('connecting');\n try {\n // Create transport\n this.transport = (0, streamable_http_js_1.streamableHttp)({\n endpoint: this.options.endpoint,\n authToken: this.options.authToken,\n headers: this.options.headers,\n reconnect: this.options.reconnect,\n fetch: this.options.fetch,\n onConnect: (connectionId) => {\n var _a;\n (_a = this.options.logger) === null || _a === void 0 ? void 0 : _a.debug(`Transport connected: ${connectionId}`);\n },\n onDisconnect: (connectionId) => {\n var _a;\n (_a = this.options.logger) === null || _a === void 0 ? void 0 : _a.debug(`Transport disconnected: ${connectionId}`);\n },\n onError: (error) => {\n var _a;\n (_a = this.options.logger) === null || _a === void 0 ? void 0 : _a.error('Transport error:', error);\n this.emitter.emit('error', error);\n },\n });\n // Create connection\n this.connection = new sdk_1.ClientSideConnection(() => this.createClientHandler(), this.transport);\n this.setState('connected');\n // Initialize protocol\n // Merge client capabilities with provider defaults (provider takes priority)\n const timeout = (_a = this.options.initializeTimeout) !== null && _a !== void 0 ? _a : constants_js_1.DEFAULT_INITIALIZE_TIMEOUT;\n const mergedCapabilities = {\n ...this.options.clientCapabilities,\n ...constants_js_1.CLOUD_CLIENT_CAPABILITIES,\n _meta: {\n ...(_b = this.options.clientCapabilities) === null || _b === void 0 ? void 0 : _b._meta,\n ...constants_js_1.CLOUD_CLIENT_CAPABILITIES._meta\n }\n };\n const initPromise = this.connection.initialize({\n protocolVersion: sdk_1.PROTOCOL_VERSION,\n clientCapabilities: mergedCapabilities\n });\n // Apply timeout\n const timeoutPromise = new Promise((_, reject) => {\n setTimeout(() => {\n reject(new errors_js_1.InitializationError(`Initialize timed out after ${timeout}ms`));\n }, timeout);\n });\n this.initializeResponse = await Promise.race([initPromise, timeoutPromise]);\n this.setState('initialized');\n (_c = this.options.logger) === null || _c === void 0 ? void 0 : _c.info('Client initialized successfully');\n return this.initializeResponse;\n }\n catch (err) {\n this.setState('error');\n const error = err instanceof Error ? err : new Error(String(err));\n this.emitter.emit('error', error);\n if (err instanceof errors_js_1.InitializationError || err instanceof errors_js_1.ConnectionError) {\n throw err;\n }\n throw new errors_js_1.ConnectionError('Failed to connect', error);\n }\n }\n /**\n * Disconnect the client gracefully\n * Sends DELETE request to server before closing local resources\n */\n async disconnect() {\n var _a, _b;\n if (this.state === 'disconnected') {\n return;\n }\n (_a = this.options.logger) === null || _a === void 0 ? void 0 : _a.info('Disconnecting client');\n // Close transport gracefully (sends DELETE to server)\n if (this.transport) {\n try {\n await this.transport.close();\n }\n catch (err) {\n (_b = this.options.logger) === null || _b === void 0 ? void 0 : _b.warn('Error closing transport:', err);\n }\n this.transport = undefined;\n }\n // Clear pending permissions\n this.permissionManager.clear();\n // Clear pending question requests\n this.questionManager.clear();\n // Clear artifacts\n this.artifactManager.clear();\n // Reset state\n this.initializeResponse = undefined;\n this.setState('disconnected');\n }\n /**\n * Create the client handler for the connection\n */\n createClientHandler() {\n return {\n sessionUpdate: async (params) => {\n await this.handleSessionUpdate(params);\n },\n requestPermission: async (params) => {\n return this.handleRequestPermission(params);\n },\n extNotification: async (method, params) => {\n console.log('[ACP-Client] extNotification callback invoked:', { method, paramsKeys: Object.keys(params) });\n await this.handleExtNotification(method, params);\n },\n extMethod: async (method, params) => {\n return this.handleExtMethod(method, params);\n }\n };\n }\n // ============================================\n // Session Management\n // ============================================\n /**\n * Create a new session\n */\n async createSession(cwd) {\n var _a;\n this.ensureInitialized('createSession');\n try {\n const response = await this.connection.newSession({\n cwd,\n mcpServers: []\n });\n (_a = this.options.logger) === null || _a === void 0 ? void 0 : _a.info(`Session created: ${response.sessionId}`);\n return response;\n }\n catch (err) {\n throw new errors_js_1.SessionError(`Failed to create session: ${err instanceof Error ? err.message : String(err)}`, undefined, err instanceof Error ? err : undefined);\n }\n }\n /**\n * Load an existing session\n * Requires agent to support loadSession capability\n */\n async loadSession(sessionId, cwd) {\n var _a, _b;\n this.ensureInitialized('loadSession');\n if (!((_a = this.agentCapabilities) === null || _a === void 0 ? void 0 : _a.loadSession)) {\n throw new errors_js_1.SessionError('Agent does not support session loading', sessionId);\n }\n try {\n const response = await this.connection.loadSession({\n sessionId,\n cwd,\n mcpServers: []\n });\n (_b = this.options.logger) === null || _b === void 0 ? void 0 : _b.info(`Session loaded: ${sessionId}`);\n return response;\n }\n catch (err) {\n throw new errors_js_1.SessionError(`Failed to load session: ${err instanceof Error ? err.message : String(err)}`, sessionId, err instanceof Error ? err : undefined);\n }\n }\n /**\n * Set the session mode\n */\n async setSessionMode(params) {\n var _a;\n this.ensureInitialized('setSessionMode');\n (_a = this.options.logger) === null || _a === void 0 ? void 0 : _a.debug(`Setting session mode: ${params.sessionId} -> ${params.modeId}`);\n return this.connection.setSessionMode(params);\n }\n /**\n * Set the session model\n * @experimental This API is unstable and may change\n */\n async setSessionModel(params) {\n var _a;\n this.ensureInitialized('setSessionModel');\n (_a = this.options.logger) === null || _a === void 0 ? void 0 : _a.debug(`Setting session model: ${params.sessionId} -> ${params.modelId}`);\n return this.connection.unstable_setSessionModel(params);\n }\n // ============================================\n // Prompt\n // ============================================\n /**\n * Send a prompt to the agent\n */\n async prompt(sessionId, text, options) {\n var _a;\n this.ensureInitialized('prompt');\n (_a = this.options.logger) === null || _a === void 0 ? void 0 : _a.debug(`Sending prompt to session: ${sessionId}`);\n return this.connection.prompt({\n sessionId,\n prompt: [{ type: 'text', text }],\n _meta: (options === null || options === void 0 ? void 0 : options.planMode) ? { planMode: true, ...options._meta } : options === null || options === void 0 ? void 0 : options._meta\n });\n }\n /**\n * Cancel ongoing operations for a session\n */\n async cancel(sessionId) {\n var _a;\n this.ensureInitialized('cancel');\n (_a = this.options.logger) === null || _a === void 0 ? void 0 : _a.debug(`Cancelling session: ${sessionId}`);\n await this.connection.cancel({ sessionId });\n }\n // ============================================\n // Permission Management\n // ============================================\n /**\n * Resolve a pending permission request\n */\n resolvePermission(requestId, optionId) {\n return this.permissionManager.resolve(requestId, optionId);\n }\n /**\n * Reject a pending permission request\n */\n rejectPermission(requestId, reason) {\n return this.permissionManager.reject(requestId, reason);\n }\n /**\n * Get all pending permissions\n */\n getPendingPermissions() {\n return this.permissionManager.getPending();\n }\n /**\n * Check if there are pending permissions\n */\n hasPendingPermissions() {\n return this.permissionManager.hasPending();\n }\n // ============================================\n // Question Management (ask_followup_question)\n // ============================================\n /**\n * Answer a pending question request with user's selections\n */\n answerQuestion(toolCallId, answers) {\n return this.questionManager.answer(toolCallId, answers);\n }\n /**\n * Cancel a pending question request\n */\n cancelQuestion(toolCallId, reason) {\n return this.questionManager.cancel(toolCallId, reason);\n }\n /**\n * Get all pending question requests\n */\n getPendingQuestions() {\n return this.questionManager.getPending();\n }\n /**\n * Check if there are pending question requests\n */\n hasPendingQuestions() {\n return this.questionManager.hasPending();\n }\n // ============================================\n // Extension Methods\n // ============================================\n /**\n * Send an extension method request\n */\n async extMethod(method, params) {\n this.ensureInitialized('extMethod');\n return this.connection.extMethod(method, params);\n }\n /**\n * Send an extension notification\n */\n async extNotification(method, params) {\n this.ensureInitialized('extNotification');\n return this.connection.extNotification(method, params);\n }\n // ============================================\n // Event Emitter Implementation\n // ============================================\n on(event, listener) {\n this.emitter.on(event, listener);\n return this;\n }\n off(event, listener) {\n this.emitter.off(event, listener);\n return this;\n }\n once(event, listener) {\n this.emitter.once(event, listener);\n return this;\n }\n emit(event, data) {\n return this.emitter.emit(event, data);\n }\n removeAllListeners(event) {\n this.emitter.removeAllListeners(event);\n return this;\n }\n // ============================================\n // Internal Handlers\n // ============================================\n async handleSessionUpdate(params) {\n var _a, _b;\n // Forward to callback\n await ((_b = (_a = this.options).onSessionUpdate) === null || _b === void 0 ? void 0 : _b.call(_a, params));\n // Emit event\n this.emitter.emit('sessionUpdate', params);\n }\n async handleRequestPermission(params) {\n return this.permissionManager.handleRequest(params);\n }\n async handleExtNotification(method, params) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;\n // Handle artifact notifications\n if (method === constants_js_1.ExtensionMethod.ARTIFACT) {\n const notification = params;\n const artifactData = notification.artifact;\n console.log('[ACP-Client] Received artifact notification:', {\n event: notification.event,\n artifactId: artifactData === null || artifactData === void 0 ? void 0 : artifactData.id,\n artifactType: artifactData === null || artifactData === void 0 ? void 0 : artifactData.type,\n rawMeta: artifactData === null || artifactData === void 0 ? void 0 : artifactData._meta,\n });\n // For deleted events, get full artifact before deletion for callbacks\n if (notification.event === 'deleted') {\n const existing = this.artifactManager.get(notification.artifact.id);\n this.artifactManager.handleNotification(notification);\n if (existing) {\n await ((_b = (_a = this.options).onArtifact) === null || _b === void 0 ? void 0 : _b.call(_a, existing, 'deleted'));\n this.emitter.emit('artifactDeleted', existing);\n }\n }\n else {\n const { artifact, event } = notification;\n // 先让 artifactManager 处理(内部会规范化 artifact)\n this.artifactManager.handleNotification(notification);\n // 获取规范化后的 artifact(_meta['codebuddy.ai'] 已展开到 _meta 顶层)\n const normalizedArtifact = this.artifactManager.get(artifact.id) || artifact;\n console.log('[ACP-Client] Normalized artifact:', {\n event,\n artifactId: normalizedArtifact.id,\n artifactType: normalizedArtifact.type,\n normalizedMeta: normalizedArtifact._meta,\n hasContent: !!((_c = normalizedArtifact._meta) === null || _c === void 0 ? void 0 : _c.content),\n hasOverview: !!((_d = normalizedArtifact._meta) === null || _d === void 0 ? void 0 : _d.overview),\n });\n await ((_f = (_e = this.options).onArtifact) === null || _f === void 0 ? void 0 : _f.call(_e, normalizedArtifact, event));\n if (event === 'created') {\n console.log('[ACP-Client] Emitting artifactCreated event');\n this.emitter.emit('artifactCreated', normalizedArtifact);\n if (normalizedArtifact.type === 'plan') {\n await ((_h = (_g = this.options).onPlanReady) === null || _h === void 0 ? void 0 : _h.call(_g, normalizedArtifact));\n }\n }\n else {\n console.log('[ACP-Client] Emitting artifactUpdated event');\n this.emitter.emit('artifactUpdated', normalizedArtifact);\n }\n }\n return;\n }\n // Handle usage update notifications\n if (method === '_codebuddy.ai/usage_update') {\n const usage = (0, extensions_js_1.parseUsageUpdate)(params);\n await ((_k = (_j = this.options).onUsageUpdate) === null || _k === void 0 ? void 0 : _k.call(_j, usage));\n this.emitter.emit('usageUpdate', usage);\n return;\n }\n // Handle checkpoint notifications\n if (method === constants_js_1.ExtensionMethod.CHECKPOINT) {\n const notification = params;\n if (notification.event === 'created') {\n this.emitter.emit('checkpointCreated', notification.checkpoint);\n }\n else if (notification.event === 'updated') {\n this.emitter.emit('checkpointUpdated', notification.checkpoint);\n }\n return;\n }\n // Forward other extensions to callback and manager\n await ((_m = (_l = this.options).onExtNotification) === null || _m === void 0 ? void 0 : _m.call(_l, method, params));\n await this.extensionManager.handleNotification(method, params);\n }\n async handleExtMethod(method, params) {\n var _a;\n // Handle question requests (ask_followup_question via question extMethod)\n if (method === constants_js_1.ExtensionMethod.QUESTION) {\n const request = params;\n const response = await this.questionManager.handleRequest(request);\n return response;\n }\n // Unknown extension method - return empty response\n (_a = this.options.logger) === null || _a === void 0 ? void 0 : _a.warn(`Unknown extension method: ${method}`);\n return {};\n }\n // ============================================\n // Helpers\n // ============================================\n ensureInitialized(operation) {\n if (this.state !== 'initialized') {\n throw new errors_js_1.InvalidStateError(operation, this.state, ['initialized']);\n }\n }\n}\nexports.StreamableHttpClient = StreamableHttpClient;\nexports.default = StreamableHttpClient;\n//# sourceMappingURL=client.js.map","\"use strict\";\n/**\n * Streamable HTTP ACP Client\n * Export entry point\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.parseUsageUpdate = exports.ExtensionManager = exports.QuestionManager = exports.PermissionManager = exports.ArtifactManager = exports.EventEmitter = exports.InvalidStateError = exports.TimeoutError = exports.PermissionError = exports.PromptError = exports.SessionError = exports.InitializationError = exports.ConnectionError = exports.ACPClientError = exports.LOCAL_CLIENT_CAPABILITIES = exports.CLOUD_CLIENT_CAPABILITIES = exports.DEFAULT_RECONNECT_OPTIONS = exports.DEFAULT_QUESTION_TIMEOUT = exports.DEFAULT_PERMISSION_TIMEOUT = exports.DEFAULT_PROMPT_TIMEOUT = exports.DEFAULT_INITIALIZE_TIMEOUT = exports.default = exports.StreamableHttpClient = void 0;\n// Main client class\nvar client_js_1 = require(\"./client.js\");\nObject.defineProperty(exports, \"StreamableHttpClient\", { enumerable: true, get: function () { return client_js_1.StreamableHttpClient; } });\nObject.defineProperty(exports, \"default\", { enumerable: true, get: function () { return client_js_1.default; } });\n// Constants\nvar constants_js_1 = require(\"./constants.js\");\nObject.defineProperty(exports, \"DEFAULT_INITIALIZE_TIMEOUT\", { enumerable: true, get: function () { return constants_js_1.DEFAULT_INITIALIZE_TIMEOUT; } });\nObject.defineProperty(exports, \"DEFAULT_PROMPT_TIMEOUT\", { enumerable: true, get: function () { return constants_js_1.DEFAULT_PROMPT_TIMEOUT; } });\nObject.defineProperty(exports, \"DEFAULT_PERMISSION_TIMEOUT\", { enumerable: true, get: function () { return constants_js_1.DEFAULT_PERMISSION_TIMEOUT; } });\nObject.defineProperty(exports, \"DEFAULT_QUESTION_TIMEOUT\", { enumerable: true, get: function () { return constants_js_1.DEFAULT_QUESTION_TIMEOUT; } });\nObject.defineProperty(exports, \"DEFAULT_RECONNECT_OPTIONS\", { enumerable: true, get: function () { return constants_js_1.DEFAULT_RECONNECT_OPTIONS; } });\nObject.defineProperty(exports, \"CLOUD_CLIENT_CAPABILITIES\", { enumerable: true, get: function () { return constants_js_1.CLOUD_CLIENT_CAPABILITIES; } });\nObject.defineProperty(exports, \"LOCAL_CLIENT_CAPABILITIES\", { enumerable: true, get: function () { return constants_js_1.LOCAL_CLIENT_CAPABILITIES; } });\n// Errors\nvar errors_js_1 = require(\"./errors.js\");\nObject.defineProperty(exports, \"ACPClientError\", { enumerable: true, get: function () { return errors_js_1.ACPClientError; } });\nObject.defineProperty(exports, \"ConnectionError\", { enumerable: true, get: function () { return errors_js_1.ConnectionError; } });\nObject.defineProperty(exports, \"InitializationError\", { enumerable: true, get: function () { return errors_js_1.InitializationError; } });\nObject.defineProperty(exports, \"SessionError\", { enumerable: true, get: function () { return errors_js_1.SessionError; } });\nObject.defineProperty(exports, \"PromptError\", { enumerable: true, get: function () { return errors_js_1.PromptError; } });\nObject.defineProperty(exports, \"PermissionError\", { enumerable: true, get: function () { return errors_js_1.PermissionError; } });\nObject.defineProperty(exports, \"TimeoutError\", { enumerable: true, get: function () { return errors_js_1.TimeoutError; } });\nObject.defineProperty(exports, \"InvalidStateError\", { enumerable: true, get: function () { return errors_js_1.InvalidStateError; } });\n// Event emitter\nvar events_js_1 = require(\"./events.js\");\nObject.defineProperty(exports, \"EventEmitter\", { enumerable: true, get: function () { return events_js_1.EventEmitter; } });\n// Managers\nvar artifacts_js_1 = require(\"./artifacts.js\");\nObject.defineProperty(exports, \"ArtifactManager\", { enumerable: true, get: function () { return artifacts_js_1.ArtifactManager; } });\nvar permissions_js_1 = require(\"./permissions.js\");\nObject.defineProperty(exports, \"PermissionManager\", { enumerable: true, get: function () { return permissions_js_1.PermissionManager; } });\nvar questions_js_1 = require(\"./questions.js\");\nObject.defineProperty(exports, \"QuestionManager\", { enumerable: true, get: function () { return questions_js_1.QuestionManager; } });\nvar extensions_js_1 = require(\"./extensions.js\");\nObject.defineProperty(exports, \"ExtensionManager\", { enumerable: true, get: function () { return extensions_js_1.ExtensionManager; } });\nObject.defineProperty(exports, \"parseUsageUpdate\", { enumerable: true, get: function () { return extensions_js_1.parseUsageUpdate; } });\n//# sourceMappingURL=index.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.EventEmitter = void 0;\n// Protocol extension types (Artifact, ToolInput, etc.)\n__exportStar(require(\"./types.js\"), exports);\n// SDK re-exports and capability extensions\n__exportStar(require(\"./sdk.js\"), exports);\n// Transport\n__exportStar(require(\"./transport/streamable-http.js\"), exports);\n// Low-level client\n__exportStar(require(\"./client/index.js\"), exports);\n// Explicit re-exports for bundlers\nvar events_js_1 = require(\"./client/events.js\");\nObject.defineProperty(exports, \"EventEmitter\", { enumerable: true, get: function () { return events_js_1.EventEmitter; } });\n//# sourceMappingURL=index.js.map","\"use strict\";\n/**\n * Cloud Agent Connection\n * Wraps StreamableHttpClient to implement AgentConnection interface\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CloudAgentConnection = void 0;\nconst agent_client_protocol_1 = require(\"@genie/agent-client-protocol\");\n/**\n * Cloud Agent Connection implementation\n * Uses Streamable HTTP transport to connect to cloud-hosted ACP agents\n * Uses composition pattern - implements event emitter methods internally\n */\nclass CloudAgentConnection {\n constructor(agentId, config) {\n this.listeners = new Map();\n this.onceListeners = new Map();\n /**\n * Flag to suppress sessionUpdate event emission during streaming.\n * When true, onSessionUpdate callback won't emit to avoid duplicate messages with promptStream.\n */\n this._isStreaming = false;\n this.transport = 'cloud';\n this.agentId = agentId;\n // Create the underlying StreamableHttpClient\n this.client = new agent_client_protocol_1.StreamableHttpClient({\n endpoint: config.endpoint,\n authToken: config.authToken,\n headers: config.headers,\n reconnect: config.reconnect,\n initializeTimeout: config.initializeTimeout,\n permissionTimeout: config.permissionTimeout,\n permissionAutoRejectOnTimeout: config.permissionAutoRejectOnTimeout,\n autoApprove: config.autoApprove,\n logger: config.logger,\n fetch: config.fetch,\n clientCapabilities: config.clientCapabilities,\n // Forward events to our emitter (suppressed during streaming to avoid duplicates)\n onSessionUpdate: (update) => {\n if (!this._isStreaming) {\n this.emit('sessionUpdate', update);\n }\n },\n onArtifact: (artifact, event) => {\n console.log('[CloudConnection] onArtifact callback:', {\n event,\n artifactId: artifact.id,\n artifactType: artifact.type,\n metaKeys: artifact._meta ? Object.keys(artifact._meta) : [],\n });\n if (event === 'created') {\n this.emit('artifactCreated', artifact);\n }\n else if (event === 'updated') {\n this.emit('artifactUpdated', artifact);\n }\n else if (event === 'deleted') {\n this.emit('artifactDeleted', artifact);\n }\n },\n onUsageUpdate: (usage) => {\n this.emit('usageUpdate', usage);\n }\n });\n // Forward client events\n this.setupEventForwarding();\n }\n setupEventForwarding() {\n // Forward connection state events\n this.client.on('connecting', () => { this.emit('connecting', undefined); });\n this.client.on('connected', () => { this.emit('connected', undefined); });\n this.client.on('disconnected', () => { this.emit('disconnected', undefined); });\n this.client.on('error', (error) => { this.emit('error', error); });\n this.client.on('stateChange', (change) => { this.emit('stateChange', change); });\n // Forward permission events\n this.client.on('permissionRequest', (data) => { this.emit('permissionRequest', data); });\n this.client.on('permissionResolved', (data) => { this.emit('permissionResolved', data); });\n this.client.on('permissionRejected', (data) => { this.emit('permissionRejected', data); });\n this.client.on('permissionTimeout', (data) => { this.emit('permissionTimeout', data); });\n // Forward question events\n this.client.on('questionRequest', (data) => { this.emit('questionRequest', data); });\n this.client.on('questionAnswered', (data) => { this.emit('questionAnswered', data); });\n this.client.on('questionCancelled', (data) => { this.emit('questionCancelled', data); });\n this.client.on('questionTimeout', (data) => { this.emit('questionTimeout', data); });\n // Forward checkpoint events\n this.client.on('checkpointCreated', (checkpoint) => { this.emit('checkpointCreated', checkpoint); });\n this.client.on('checkpointUpdated', (checkpoint) => { this.emit('checkpointUpdated', checkpoint); });\n }\n // ============================================\n // Event Emitter Implementation\n // ============================================\n on(event, listener) {\n if (!this.listeners.has(event)) {\n this.listeners.set(event, new Set());\n }\n this.listeners.get(event).add(listener);\n return this;\n }\n off(event, listener) {\n const eventListeners = this.listeners.get(event);\n if (eventListeners) {\n eventListeners.delete(listener);\n }\n const onceEventListeners = this.onceListeners.get(event);\n if (onceEventListeners) {\n onceEventListeners.delete(listener);\n }\n return this;\n }\n once(event, listener) {\n if (!this.onceListeners.has(event)) {\n this.onceListeners.set(event, new Set());\n }\n this.onceListeners.get(event).add(listener);\n return this;\n }\n emit(event, data) {\n const regularListeners = this.listeners.get(event);\n const onceEventListeners = this.onceListeners.get(event);\n let hasListeners = false;\n // Call regular listeners\n if (regularListeners && regularListeners.size > 0) {\n hasListeners = true;\n for (const listener of regularListeners) {\n try {\n const result = listener(data);\n if (result instanceof Promise) {\n result.catch((err) => {\n console.error(`Error in async event listener for '${String(event)}':`, err);\n });\n }\n }\n catch (err) {\n console.error(`Error in event listener for '${String(event)}':`, err);\n }\n }\n }\n // Call once listeners and remove them\n if (onceEventListeners && onceEventListeners.size > 0) {\n hasListeners = true;\n const listenersToCall = Array.from(onceEventListeners);\n this.onceListeners.delete(event);\n for (const listener of listenersToCall) {\n try {\n const result = listener(data);\n if (result instanceof Promise) {\n result.catch((err) => {\n console.error(`Error in async once event listener for '${String(event)}':`, err);\n });\n }\n }\n catch (err) {\n console.error(`Error in once event listener for '${String(event)}':`, err);\n }\n }\n }\n return hasListeners;\n }\n removeAllListeners(event) {\n if (event !== undefined) {\n this.listeners.delete(event);\n this.onceListeners.delete(event);\n }\n else {\n this.listeners.clear();\n this.onceListeners.clear();\n }\n return this;\n }\n // ============================================\n // State Properties\n // ============================================\n get state() {\n return this.client.currentState;\n }\n get isInitialized() {\n return this.client.isInitialized;\n }\n get capabilities() {\n return this.client.agentCapabilities;\n }\n get initializeResult() {\n return this.client.initializeResult;\n }\n // ============================================\n // Connection Lifecycle\n // ============================================\n async connect() {\n return this.client.connect();\n }\n async disconnect() {\n await this.client.disconnect();\n }\n // ============================================\n // Session Management\n // ============================================\n async createSession(params) {\n // Cloud Side does not support creating new sessions directly\n const loadedSession = await this.client.loadSession(this.agentId, params.cwd);\n return { ...loadedSession, sessionId: this.agentId };\n }\n async loadSession(params) {\n if (!params.sessionId) {\n throw new Error('sessionId is required for loadSession');\n }\n return this.client.loadSession(params.sessionId, params.cwd);\n }\n async setSessionMode(sessionId, modeId) {\n return this.client.setSessionMode({ sessionId, modeId });\n }\n async setSessionModel(sessionId, modelId) {\n return this.client.setSessionModel({ sessionId, modelId });\n }\n // ============================================\n // Prompt Operations\n // ============================================\n async prompt(sessionId, params) {\n const text = typeof params.content === 'string'\n ? params.content\n : params.content.map(block => {\n if (block.type === 'text')\n return block.text;\n return `[${block.type}]`;\n }).join('\\n');\n return this.client.prompt(sessionId, text, {\n planMode: params.planMode,\n _meta: params._meta\n });\n }\n async *promptStream(sessionId, params) {\n // Suppress sessionUpdate event emission during streaming to avoid duplicates\n this._isStreaming = true;\n // For streaming, we need to collect updates via the event system\n const updates = [];\n let resolveUpdate = null;\n let done = false;\n const listener = (update) => {\n if (resolveUpdate) {\n resolveUpdate(update);\n resolveUpdate = null;\n }\n else {\n updates.push(update);\n }\n };\n this.client.on('sessionUpdate', listener);\n try {\n // Start the prompt (non-blocking)\n const promptPromise = this.prompt(sessionId, params);\n // Yield updates as they come in\n while (!done) {\n const update = updates.shift();\n if (update) {\n yield update;\n }\n else {\n // Wait for next update or prompt completion\n const nextUpdate = await new Promise((resolve) => {\n resolveUpdate = resolve;\n // Check if prompt completed while we were setting up\n promptPromise.then(() => {\n if (resolveUpdate === resolve) {\n resolveUpdate = null;\n resolve(null);\n }\n }).catch(() => {\n if (resolveUpdate === resolve) {\n resolveUpdate = null;\n resolve(null);\n }\n });\n });\n if (nextUpdate === null) {\n done = true;\n }\n else {\n yield nextUpdate;\n }\n }\n }\n }\n finally {\n this._isStreaming = false;\n this.client.off('sessionUpdate', listener);\n }\n }\n async cancel(sessionId) {\n return this.client.cancel(sessionId);\n }\n // ============================================\n // Permission Management\n // ============================================\n resolvePermission(requestId, optionId) {\n return this.client.resolvePermission(requestId, optionId);\n }\n rejectPermission(requestId, reason) {\n return this.client.rejectPermission(requestId, reason);\n }\n getPendingPermissions() {\n return this.client.getPendingPermissions();\n }\n hasPendingPermissions() {\n return this.client.hasPendingPermissions();\n }\n // ============================================\n // Question Management (ask_followup_question)\n // ============================================\n answerQuestion(toolCallId, answers) {\n return this.client.answerQuestion(toolCallId, answers);\n }\n cancelQuestion(toolCallId, reason) {\n return this.client.cancelQuestion(toolCallId, reason);\n }\n getPendingQuestions() {\n return this.client.getPendingQuestions();\n }\n hasPendingQuestions() {\n return this.client.hasPendingQuestions();\n }\n // ============================================\n // Tool Callback Management\n // ============================================\n async toolCallback(sessionId, toolCallId, toolName, action) {\n // Cloud connection does not support toolCallback yet\n return { success: false, error: 'toolCallback not supported for cloud connections' };\n }\n // ============================================\n // Extension Methods\n // ============================================\n async extMethod(method, params) {\n return this.client.extMethod(method, params);\n }\n}\nexports.CloudAgentConnection = CloudAgentConnection;\nexports.default = CloudAgentConnection;\n//# sourceMappingURL=cloud-connection.js.map","\"use strict\";\n/**\n * E2B Filesystem Implementation\n *\n * Provides FilesResource implementation using E2B Sandbox SDK.\n * Directly uses e2b SDK types.\n *\n * @see https://e2b.dev/docs/filesystem/read-write\n * @see https://e2b.dev/docs/filesystem/watch\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.E2BFilesystem = void 0;\nconst e2b_1 = require(\"e2b\");\n/**\n * E2B Filesystem Implementation\n *\n * Wraps E2B Sandbox SDK's filesystem operations to implement FilesResource interface.\n *\n * @example\n * ```typescript\n * const fs = await E2BFilesystem.connect({\n * sandboxId: 'sandbox-123',\n * apiKey: 'e2b_xxx'\n * });\n *\n * // Read/write files\n * await fs.write('/test.txt', 'Hello World');\n * const content = await fs.read('/test.txt');\n *\n * // Watch for changes\n * const handle = await fs.watchDir('/workspace', (event) => {\n * console.log('File changed:', event);\n * });\n * ```\n */\nclass E2BFilesystem {\n constructor(sandbox) {\n this.sandbox = sandbox;\n }\n /**\n * Connect to an E2B Sandbox and create filesystem instance\n */\n static async connect(info) {\n const sandbox = await e2b_1.Sandbox.connect(info.sandboxId, {\n apiKey: info.apiKey,\n accessToken: info.accessToken,\n domain: info.domain,\n apiUrl: info.apiUrl,\n requestTimeoutMs: info.requestTimeoutMs,\n debug: info.debug,\n });\n return new E2BFilesystem(sandbox);\n }\n /**\n * Get the underlying E2B Sandbox instance\n */\n getSandbox() {\n return this.sandbox;\n }\n read(path, opts) {\n return this.sandbox.files.read(path, opts);\n }\n write(pathOrFiles, dataOrOpts, opts) {\n if (Array.isArray(pathOrFiles)) {\n // Batch write: write(files: WriteEntry[], opts?: FilesystemRequestOpts)\n return this.sandbox.files.write(pathOrFiles, dataOrOpts);\n }\n // Single file write: write(path: string, data: ..., opts?: FilesystemRequestOpts)\n return this.sandbox.files.write(pathOrFiles, dataOrOpts, opts);\n }\n // ============================================\n // 其他方法实现\n // ============================================\n async list(path, opts) {\n return this.sandbox.files.list(path, opts);\n }\n async exists(path, opts) {\n return this.sandbox.files.exists(path, opts);\n }\n async makeDir(path, opts) {\n return this.sandbox.files.makeDir(path, opts);\n }\n async remove(path, opts) {\n return this.sandbox.files.remove(path, opts);\n }\n async rename(oldPath, newPath, opts) {\n return this.sandbox.files.rename(oldPath, newPath, opts);\n }\n async getInfo(path, opts) {\n return this.sandbox.files.getInfo(path, opts);\n }\n async watchDir(path, onEvent, opts) {\n return this.sandbox.files.watchDir(path, onEvent, opts);\n }\n}\nexports.E2BFilesystem = E2BFilesystem;\nexports.default = E2BFilesystem;\n//# sourceMappingURL=e2b-filesystem.js.map","\"use strict\";\n/**\n * Cloud Agent Provider\n *\n * REST API based agent provider that manages cloud-hosted agents.\n * Implements the AgentProvider interface for the unified agent API.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CloudAgentProvider = void 0;\nconst cloud_connection_js_1 = require(\"./cloud-connection.js\");\nconst e2b_filesystem_js_1 = require(\"./e2b-filesystem.js\");\n/**\n * CloudAgentProvider - Manages cloud-hosted agents via REST API\n *\n * API Endpoints:\n * - POST {endpoint}/v2/cloudagent/agentmgmt/agents - Create new agent\n * - GET {endpoint}/v2/cloudagent/agentmgmt/agents/{id} - Get agent data\n * - GET {endpoint}/v2/cloudagent/agentmgmt/agents - List all agents\n * - POST {endpoint}/v2/cloudagent/agentmgmt/agents/{id}/delete - Delete agent\n * - GET {endpoint}/v2/cloudagent/agentmgmt/agents/{id}/session - Get agent session (includes sandboxId)\n * - GET {endpoint}/v2/cloudagent/agentmgmt/models - Get available models\n *\n * The provider stores agent endpoint configurations in the cloud backend.\n * When connect() is called, it creates a CloudAgentConnection to the agent's\n * endpoint and returns an Agent instance.\n *\n * @example\n * ```typescript\n * const provider = new CloudAgentProvider({\n * endpoint: 'https://staging-copilot.tencent.com',\n * authToken: 'token'\n * });\n *\n * // List all agents (uses default pagination and sorting)\n * const allAgents = await provider.list();\n *\n * // List agents with custom pagination\n * const page2 = await provider.list({\n * page: 2,\n * size: 50\n * });\n *\n * // List agents with filtering\n * const runningAgents = await provider.list({\n * filters: [\n * { field: 'status', value: 'running' }\n * ]\n * });\n *\n * // List agents with custom sorting\n * const sortedAgents = await provider.list({\n * sort: {\n * orderBy: 'createdAt',\n * order: 'desc'\n * }\n * });\n *\n * // List agents created in last 14 days with multiple filters\n * const recentAgents = await provider.list({\n * dayRange: 14,\n * filters: [\n * { field: 'status', value: 'running,stopped' }\n * ],\n * page: 1,\n * size: 20\n * });\n *\n * // Get agent state\n * const state = await provider.get('agent-id');\n *\n * // Connect to agent\n * const agent = await provider.connect('agent-id');\n *\n * // Use agent\n * const session = await agent.sessions.create({ cwd: '/workspace' });\n *\n * // Get available models\n * const models = await provider.getModels('my-repo');\n * ```\n */\nclass CloudAgentProvider {\n constructor(options) {\n var _a;\n /** Cache for filesystem instances (keyed by agentId) */\n this.filesystemCache = new Map();\n this.options = options;\n this.logger = options.logger;\n this.fetchImpl = (_a = options.fetch) !== null && _a !== void 0 ? _a : globalThis.fetch.bind(globalThis);\n }\n // ============================================\n // FilesystemProvider Implementation\n // ============================================\n /**\n * Get the filesystem provider (returns self)\n */\n get filesystem() {\n return this;\n }\n /**\n * Get filesystem resource for an agent\n *\n * Creates or returns cached E2BFilesystem instance for the agent's sandbox.\n *\n * @param agentId - Agent ID to get filesystem for\n * @returns FilesResource instance for the agent's sandbox\n */\n async getFilesystem(agentId) {\n var _a;\n // Check cache first\n const cached = this.filesystemCache.get(agentId);\n if (cached) {\n return cached;\n }\n // Get sandbox info from backend\n const info = await this.getSandboxInfo(agentId);\n // Create and cache E2BFilesystem instance\n const filesystem = await e2b_filesystem_js_1.E2BFilesystem.connect(info);\n this.filesystemCache.set(agentId, filesystem);\n (_a = this.logger) === null || _a === void 0 ? void 0 : _a.debug(`Created filesystem for agent: ${agentId}`);\n return filesystem;\n }\n /**\n * Get sandbox information from backend\n *\n * Uses GET {endpoint}/v2/cloudagent/agentmgmt/agents/{agentId}/session\n * to retrieve sandbox information. Extracts sandboxId from the session response\n * and constructs the apiUrl for E2B proxy.\n *\n * @param agentId - Agent ID\n * @returns E2B Sandbox connection information with sandboxId and apiUrl\n */\n async getSandboxInfo(agentId) {\n const response = await this.request('GET', `/v2/cloudagent/agentmgmt/agents/${agentId}/session`);\n if (!response.ok) {\n throw new Error(`Failed to get sandbox info: ${response.statusText}`);\n }\n const apiResponse = await response.json();\n if (!apiResponse.data) {\n throw new Error('No data in API response');\n }\n // Build E2BSandboxConnectionInfo from session response\n // apiUrl is constructed as: {endpoint}/v2/cloudagent/e2bproxy/agents/{agentId}\n const apiUrl = new URL(`/v2/cloudagent/e2bproxy/agents/${agentId}`, this.options.endpoint).toString();\n return {\n sandboxId: apiResponse.data.sandboxId,\n apiUrl,\n apiKey: 'backend-not-used',\n accessToken: apiResponse.data.token,\n };\n }\n /**\n * Get agent state by ID\n */\n async get(agentId) {\n var _a;\n try {\n const response = await this.request('GET', `/v2/cloudagent/agentmgmt/agents/${agentId}`);\n if (response.status === 404) {\n return undefined;\n }\n if (!response.ok) {\n throw new Error(`Failed to get agent: ${response.statusText}`);\n }\n const apiResponse = await response.json();\n if (!apiResponse.data) {\n throw new Error('No data in API response');\n }\n return this.toAgentState(apiResponse.data);\n }\n catch (error) {\n (_a = this.logger) === null || _a === void 0 ? void 0 : _a.error(`Failed to get agent ${agentId}:`, error);\n throw error;\n }\n }\n /**\n * List all agent states with pagination information\n *\n * @param options - Optional query parameters for filtering, sorting, and pagination\n * @returns Object containing agents array and pagination info\n */\n async list(options) {\n var _a;\n try {\n console.log('[CloudAgentProvider] list called with options:', JSON.stringify(options, null, 2));\n // Build request parameters with defaults and user overrides\n const params = {\n // Default values\n page: 1,\n size: 30,\n sort: {\n order: 'desc',\n orderBy: 'status'\n },\n // User overrides\n ...options && {\n ...(options.dayRange !== undefined && { dayRange: options.dayRange }),\n ...(options.page !== undefined && { page: options.page }),\n ...(options.size !== undefined && { size: options.size }),\n ...(options.sort !== undefined && { sort: options.sort }),\n ...(options.filters !== undefined && { filters: options.filters }),\n ...(options.title !== undefined && { title: options.title }),\n }\n };\n console.log('[CloudAgentProvider] API request params:', JSON.stringify(params, null, 2));\n const response = await this.request('GET', '/v2/cloudagent/agentmgmt/agents', params);\n if (!response.ok) {\n throw new Error(`Failed to list agents: ${response.statusText}`);\n }\n const apiResponse = await response.json();\n if (!apiResponse.data) {\n throw new Error('No data in API response');\n }\n const agents = apiResponse.data.agents.map((a) => this.toAgentState(a));\n const pagination = apiResponse.data.pagination;\n console.log('[CloudAgentProvider] API response:', {\n agentsCount: agents.length,\n pagination\n });\n return { agents, pagination };\n }\n catch (error) {\n (_a = this.logger) === null || _a === void 0 ? void 0 : _a.error('Failed to list agents:', error);\n throw error;\n }\n }\n /**\n * Create a new agent\n * POST {endpoint}/v2/cloudagent/agentmgmt/agents\n */\n async create() {\n var _a, _b;\n try {\n // @ts-expect-error Backend Connect Not Ready\n const createPayload = {\n prompt: '',\n // source: {\n // provider: 'github',\n // repository: 'example/repo',\n // ref: 'main'\n // },\n // target: {\n // branchName: 'main',\n // autoCreatePr: false\n // },\n model: 'deepseek-r1',\n // webhook: {\n // url: 'https://example.com/webhook',\n // secret: 'supersecret'\n // }\n };\n const response = await this.request('POST', '/v2/cloudagent/agentmgmt/agents', createPayload);\n if (!response.ok) {\n throw new Error(`Failed to create agent: ${response.statusText}`);\n }\n const apiResponse = await response.json();\n if (!apiResponse.data) {\n throw new Error('No data in API response');\n }\n (_a = this.logger) === null || _a === void 0 ? void 0 : _a.info(`Created agent: ${apiResponse.data.id}`);\n return apiResponse.data.id;\n }\n catch (error) {\n (_b = this.logger) === null || _b === void 0 ? void 0 : _b.error('Failed to create agent:', error);\n throw error;\n }\n }\n /**\n * Connect to an agent and return the connection\n *\n * This method:\n * 1. Fetches the agent configuration from the backend\n * 2. Creates a CloudAgentConnection to the agent's endpoint\n * 3. Connects and initializes the connection\n * 4. Returns the connected CloudAgentConnection\n */\n async connect(agentId) {\n var _a, _b;\n // Fetch agent data from backend\n const response = await this.request('GET', `/v2/cloudagent/agentmgmt/agents/${agentId}/session`);\n if (response.status === 404) {\n throw new Error(`Agent not found: ${agentId}`);\n }\n if (!response.ok) {\n throw new Error(`Failed to get agent for connection: ${response.statusText}`);\n }\n const apiResponse = await response.json();\n if (!apiResponse.data) {\n throw new Error('No data in API response');\n }\n // Create connection to agent's endpoint\n const connection = new cloud_connection_js_1.CloudAgentConnection(agentId, {\n endpoint: apiResponse.data.link.replace('http', 'https'),\n authToken: apiResponse.data.token,\n // Backend does not provide custom headers currently\n // headers: data.headers,\n logger: this.logger,\n clientCapabilities: this.options.clientCapabilities\n });\n // Connect and initialize\n try {\n await connection.connect();\n }\n catch (error) {\n (_a = this.logger) === null || _a === void 0 ? void 0 : _a.error(`Failed to connect to agent ${agentId}:`, error);\n throw error;\n }\n (_b = this.logger) === null || _b === void 0 ? void 0 : _b.info(`Connected to agent: ${agentId}`);\n return connection;\n }\n /**\n * Delete an agent by ID\n * POST {endpoint}/v2/cloudagent/agentmgmt/agents/{agentId}/delete\n */\n async delete(agentId) {\n var _a;\n try {\n const requestBody = { id: agentId };\n const response = await this.request('POST', `/v2/cloudagent/agentmgmt/agents/${agentId}/delete`, requestBody);\n if (response.status === 404) {\n return false;\n }\n if (!response.ok) {\n throw new Error(`Failed to delete agent: ${response.statusText}`);\n }\n return true;\n }\n catch (error) {\n (_a = this.logger) === null || _a === void 0 ? void 0 : _a.error(`Failed to delete agent ${agentId}:`, error);\n throw error;\n }\n }\n /**\n * Archive an agent by ID\n * POST {endpoint}/v2/cloudagent/agentmgmt/agents/{agentId}/archive\n *\n * @param agentId - Agent ID to archive\n * @returns ArchiveAgentResponse containing the archived agent ID\n *\n * @example\n * ```typescript\n * const result = await provider.archive('agent-123');\n * console.log('Archived agent:', result.id);\n * ```\n */\n async archive(agentId) {\n var _a, _b, _c;\n try {\n const response = await this.request('POST', `/v2/cloudagent/agentmgmt/agents/${agentId}/archive`);\n if (!response.ok) {\n throw new Error(`Failed to archive agent: ${response.statusText}`);\n }\n const apiResponse = await response.json();\n if (!apiResponse.data) {\n // 如果后端没有返回 data,使用传入的 agentId\n (_a = this.logger) === null || _a === void 0 ? void 0 : _a.info(`Archived agent: ${agentId}`);\n return { id: agentId };\n }\n (_b = this.logger) === null || _b === void 0 ? void 0 : _b.info(`Archived agent: ${apiResponse.data.id}`);\n return apiResponse.data;\n }\n catch (error) {\n (_c = this.logger) === null || _c === void 0 ? void 0 : _c.error(`Failed to archive agent ${agentId}:`, error);\n throw error;\n }\n }\n /**\n * Get available models for a repository\n *\n * GET {endpoint}/v2/cloudagent/agentmgmt/models?repo={repo}\n *\n * @param repo - Repository identifier\n * @returns Array of model names (backend only provides names, not full ModelInfo)\n */\n async getModels(repo) {\n var _a, _b;\n try {\n const response = await this.request('GET', `/v2/cloudagent/agentmgmt/models?repo=${encodeURIComponent(repo)}`);\n if (!response.ok) {\n throw new Error(`Failed to get models: ${response.statusText}`);\n }\n const apiResponse = await response.json();\n if (!apiResponse.data) {\n throw new Error('No data in API response');\n }\n const models = apiResponse.data.models;\n (_a = this.logger) === null || _a === void 0 ? void 0 : _a.info(`Retrieved ${models.length} models for repo: ${repo}`);\n return models.map(m => ({\n id: m,\n name: '',\n description: '',\n }));\n }\n catch (error) {\n (_b = this.logger) === null || _b === void 0 ? void 0 : _b.error(`Failed to get models for repo ${repo}:`, error);\n throw error;\n }\n }\n // ============================================\n // Helpers\n // ============================================\n toAgentState(data) {\n // 优先使用 sessionStatus(会话状态),fallback 到 status(Agent 状态)\n const status = data.sessionStatus || data.status;\n return {\n id: data.id,\n name: data.name,\n description: data.summary,\n type: 'cloud',\n status: status,\n createdAt: data.createdAt ? new Date(data.createdAt) : undefined,\n capabilities: this.options.clientCapabilities,\n };\n }\n async request(method, path, body) {\n var _a;\n let url = `${this.options.endpoint}${path}`;\n const headers = {\n 'Content-Type': 'application/json',\n ...this.options.headers\n };\n if (this.options.authToken) {\n headers['Authorization'] = `Bearer ${this.options.authToken}`;\n }\n const init = {\n method,\n headers\n };\n // For GET requests, convert body to query params\n if (method === 'GET' && body !== undefined) {\n const params = new URLSearchParams();\n for (const [key, value] of Object.entries(body)) {\n if (value !== undefined && value !== null) {\n // For complex types (objects/arrays), stringify them\n // For primitive types, convert to string directly\n const stringValue = typeof value === 'object'\n ? JSON.stringify(value)\n : String(value);\n params.append(key, stringValue);\n }\n }\n const queryString = params.toString();\n if (queryString) {\n url += `?${queryString}`;\n }\n }\n else if (body !== undefined) {\n // For non-GET requests, use body\n init.body = JSON.stringify(body);\n }\n (_a = this.logger) === null || _a === void 0 ? void 0 : _a.debug(`${method} ${url}`);\n return this.fetchImpl(url, init);\n }\n}\nexports.CloudAgentProvider = CloudAgentProvider;\nexports.default = CloudAgentProvider;\n//# sourceMappingURL=cloud-provider.js.map","\"use strict\";\n/**\n * Cloud Agent Provider exports\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.E2BFilesystem = exports.CloudAgentProvider = exports.CloudAgentConnection = void 0;\nvar cloud_connection_js_1 = require(\"./cloud-connection.js\");\nObject.defineProperty(exports, \"CloudAgentConnection\", { enumerable: true, get: function () { return cloud_connection_js_1.CloudAgentConnection; } });\nvar cloud_provider_js_1 = require(\"./cloud-provider.js\");\nObject.defineProperty(exports, \"CloudAgentProvider\", { enumerable: true, get: function () { return cloud_provider_js_1.CloudAgentProvider; } });\nvar e2b_filesystem_js_1 = require(\"./e2b-filesystem.js\");\nObject.defineProperty(exports, \"E2BFilesystem\", { enumerable: true, get: function () { return e2b_filesystem_js_1.E2BFilesystem; } });\n//# sourceMappingURL=index.js.map","\"use strict\";\n/**\n * JSON-RPC 2.0 编解码工具\n *\n * 用于 ACP (Agent Client Protocol) 的 JSON-RPC 通信\n * 参考: https://www.jsonrpc.org/specification\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.RequestIdGenerator = exports.JsonRpcEncoder = exports.RequestTimeoutError = exports.JsonRpcErrorCode = void 0;\n// ============================================================================\n// JSON-RPC 错误码枚举\n// ============================================================================\n/**\n * JSON-RPC 2.0 标准错误码\n */\nvar JsonRpcErrorCode;\n(function (JsonRpcErrorCode) {\n JsonRpcErrorCode[JsonRpcErrorCode[\"ParseError\"] = -32700] = \"ParseError\";\n JsonRpcErrorCode[JsonRpcErrorCode[\"InvalidRequest\"] = -32600] = \"InvalidRequest\";\n JsonRpcErrorCode[JsonRpcErrorCode[\"MethodNotFound\"] = -32601] = \"MethodNotFound\";\n JsonRpcErrorCode[JsonRpcErrorCode[\"InvalidParams\"] = -32602] = \"InvalidParams\";\n JsonRpcErrorCode[JsonRpcErrorCode[\"InternalError\"] = -32603] = \"InternalError\";\n})(JsonRpcErrorCode || (exports.JsonRpcErrorCode = JsonRpcErrorCode = {}));\n/**\n * 请求超时错误\n */\nclass RequestTimeoutError extends Error {\n constructor(method, timeoutMs) {\n super(`JSON-RPC request timeout: ${method} (${timeoutMs}ms)`);\n this.name = 'RequestTimeoutError';\n this.method = method;\n this.timeoutMs = timeoutMs;\n }\n}\nexports.RequestTimeoutError = RequestTimeoutError;\n// ============================================================================\n// JSON-RPC 编解码器\n// ============================================================================\n/**\n * JSON-RPC 编解码器\n *\n * 提供 JSON-RPC 2.0 消息的编码和解码功能\n */\nclass JsonRpcEncoder {\n /**\n * 编码请求消息\n * @param id 请求 ID\n * @param method 方法名\n * @param params 参数 (可选)\n * @returns AcpRpcEnvelope 包装的 JSON-RPC 请求\n */\n static encodeRequest(id, method, params) {\n const request = {\n jsonrpc: '2.0',\n id,\n method,\n params,\n };\n return { type: 'acp-rpc', payload: request };\n }\n /**\n * 编码通知消息 (无响应)\n * @param method 方法名\n * @param params 参数 (可选)\n * @returns AcpRpcEnvelope 包装的 JSON-RPC 通知\n */\n static encodeNotification(method, params) {\n const notification = {\n jsonrpc: '2.0',\n method,\n params,\n };\n return { type: 'acp-rpc', payload: notification };\n }\n /**\n * 编码成功响应\n * @param id 对应请求的 ID\n * @param result 结果数据\n * @returns AcpRpcEnvelope 包装的 JSON-RPC 响应\n */\n static encodeSuccessResponse(id, result) {\n const response = {\n jsonrpc: '2.0',\n id,\n result,\n };\n return { type: 'acp-rpc', payload: response };\n }\n /**\n * 编码错误响应\n * @param id 对应请求的 ID\n * @param error 错误信息\n * @returns AcpRpcEnvelope 包装的 JSON-RPC 错误响应\n */\n static encodeErrorResponse(id, error) {\n const response = {\n jsonrpc: '2.0',\n id,\n error,\n };\n return { type: 'acp-rpc', payload: response };\n }\n /**\n * 解码 ACP RPC 消息\n * @param envelope AcpRpcEnvelope\n * @returns 解码后的 JSON-RPC 消息\n * @throws 如果消息格式无效\n */\n static decode(envelope) {\n if (!this.isAcpRpcMessage(envelope)) {\n throw new Error('Invalid ACP RPC message format');\n }\n const payload = envelope.payload;\n // 验证 JSON-RPC 基本格式\n if (typeof payload !== 'object' || payload === null) {\n throw new Error('Invalid JSON-RPC payload');\n }\n // 验证 jsonrpc 版本\n if (payload.jsonrpc !== '2.0') {\n throw new Error('Invalid JSON-RPC version (must be \"2.0\")');\n }\n // 验证消息类型:必须有 id (请求/响应) 或 method (通知)\n const hasId = 'id' in payload;\n const hasMethod = typeof payload.method === 'string';\n if (!hasId && !hasMethod) {\n throw new Error('Invalid JSON-RPC message (must have id or method)');\n }\n return payload;\n }\n /**\n * 检查是否为 ACP RPC 消息\n * @param message 待检查的消息\n * @returns 是否为有效的 AcpRpcEnvelope\n */\n static isAcpRpcMessage(message) {\n return (typeof message === 'object' &&\n message !== null &&\n 'type' in message &&\n message.type === 'acp-rpc' &&\n 'payload' in message);\n }\n /**\n * 检查是否为 JSON-RPC 请求 (有 id 字段)\n * @param message JSON-RPC 消息\n * @returns 是否为请求消息\n */\n static isRequest(message) {\n return 'id' in message && 'method' in message;\n }\n /**\n * 检查是否为 JSON-RPC 响应 (有 id 字段,有 result 或 error)\n * @param message JSON-RPC 消息\n * @returns 是否为响应消息\n */\n static isResponse(message) {\n return 'id' in message && ('result' in message || 'error' in message);\n }\n /**\n * 检查是否为 JSON-RPC 通知 (无 id 字段)\n * @param message JSON-RPC 消息\n * @returns 是否为通知消息\n */\n static isNotification(message) {\n return !('id' in message) && 'method' in message;\n }\n}\nexports.JsonRpcEncoder = JsonRpcEncoder;\n// ============================================================================\n// 请求 ID 生成器\n// ============================================================================\n/**\n * 请求 ID 生成器\n *\n * 格式: acp_{序号}_{时间戳}\n * 示例: acp_1_1704067200000\n */\nclass RequestIdGenerator {\n constructor() {\n this.counter = 0;\n }\n /**\n * 生成下一个请求 ID\n * @returns 请求 ID 字符串\n */\n generate() {\n return `acp_${++this.counter}`;\n }\n /**\n * 重置计数器\n */\n reset() {\n this.counter = 0;\n }\n}\nexports.RequestIdGenerator = RequestIdGenerator;\n//# sourceMappingURL=json-rpc.js.map","\"use strict\";\n/**\n * ACP Client 协议接口定义\n *\n * 定义 ACP (Agent Client Protocol) 客户端接口\n * 参考: https://github.com/agentclientprotocol/agent-client-protocol\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.FILESYSTEM_METHODS = exports.SPECIAL_SESSION_IDS = void 0;\nexports.isReservedSessionId = isReservedSessionId;\nexports.isFilesystemMethod = isFilesystemMethod;\n// ============================================================================\n// 特殊 sessionId 常量\n// ============================================================================\n/**\n * 特殊 sessionId 常量\n * 这些 sessionId 不需要路由到特定窗口\n */\nexports.SPECIAL_SESSION_IDS = {\n /** 全局操作 (initialize, authenticate) */\n GLOBAL: '__global__',\n /** 创建新会话 */\n NEW: '__new__',\n /** 工作区操作 (openWorkspace) */\n WORKSPACE: '__workspace__',\n /** 广播操作 */\n BROADCAST: '__broadcast__',\n};\n/**\n * 检查是否为保留 sessionId\n * @param sessionId 会话 ID\n * @returns 是否为保留 sessionId\n */\nfunction isReservedSessionId(sessionId) {\n return Object.values(exports.SPECIAL_SESSION_IDS).includes(sessionId) && sessionId !== exports.SPECIAL_SESSION_IDS.BROADCAST;\n}\n// ============================================================================\n// Filesystem 类型定义\n// ============================================================================\n/**\n * Filesystem JSON-RPC 方法名称\n */\nexports.FILESYSTEM_METHODS = {\n READ: 'fs/read',\n WRITE: 'fs/write',\n LIST: 'fs/list',\n EXISTS: 'fs/exists',\n MAKE_DIR: 'fs/makeDir',\n REMOVE: 'fs/remove',\n RENAME: 'fs/rename',\n GET_INFO: 'fs/getInfo',\n WATCH_DIR: 'fs/watchDir',\n UNWATCH: 'fs/unwatch',\n};\n/**\n * 检查是否为 Filesystem 方法\n * @param method 方法名\n * @returns 是否为 filesystem 方法\n */\nfunction isFilesystemMethod(method) {\n return Object.values(exports.FILESYSTEM_METHODS).includes(method);\n}\n//# sourceMappingURL=types.js.map","\"use strict\";\n/**\n * ACP JSON-RPC Client 实现\n *\n * 实现符合 ACP (Agent Client Protocol) 标准的 JSON-RPC 客户端\n * 通过 IWidgetChannel 与 ExtensionHost 通信\n *\n * 架构说明:\n * - 对 UI: 表现为 Agent Provider\n * - 对 ExtensionHost: 表现为 ACP Client (发送 JSON-RPC 请求)\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AcpJsonRpcClient = void 0;\nconst types_js_1 = require(\"./types.js\");\nconst json_rpc_js_1 = require(\"./json-rpc.js\");\n// ============================================================================\n// ACP JSON-RPC Client 实现\n// ============================================================================\n/**\n * ACP JSON-RPC Client 实现\n *\n * 实现 IAcpJsonRpcClient 接口\n */\nclass AcpJsonRpcClient {\n // ========================================================================\n // 构造函数\n // ========================================================================\n constructor(channel, config = {}) {\n var _a;\n this.requestIdGenerator = new json_rpc_js_1.RequestIdGenerator();\n /** 待处理请求: requestId → PendingRequest */\n this.pendingRequests = new Map();\n /** 会话更新回调集合 */\n this.sessionUpdateCallbacks = new Set();\n /** 权限请求解析器: toolCallId → resolver */\n this.permissionRequestResolvers = new Map();\n /** extNotification 回调集合 */\n this.extNotificationCallbacks = new Set();\n /** 事件处理器 (用于清理) */\n this.eventHandlers = [];\n this.channel = channel;\n this.debug = (_a = config.debug) !== null && _a !== void 0 ? _a : false;\n this.setupMessageListener();\n this.log('AcpJsonRpcClient initialized');\n }\n // ========================================================================\n // IAcpJsonRpcClient 实现 - 连接管理\n // ========================================================================\n async initialize(request) {\n this.log('initialize called');\n return await this.sendRequest(types_js_1.SPECIAL_SESSION_IDS.GLOBAL, 'initialize', request);\n }\n async authenticate(request) {\n this.log('authenticate called');\n await this.sendRequest(types_js_1.SPECIAL_SESSION_IDS.GLOBAL, 'authenticate', request);\n }\n // ========================================================================\n // IAcpJsonRpcClient 实现 - 会话管理\n // ========================================================================\n async newSession(request) {\n this.log('newSession called');\n return await this.sendRequest(types_js_1.SPECIAL_SESSION_IDS.NEW, 'newSession', request);\n }\n async loadSession(request) {\n this.log(`[AcpJsonRpcClient] loadSession called:, ${request.sessionId}`);\n const response = await this.sendRequest(request.sessionId, 'loadSession', request);\n this.log(`[AcpJsonRpcClient] loadSession response:, ${response}`);\n return response;\n }\n // ========================================================================\n // IAcpJsonRpcClient 实现 - 消息处理 (核心)\n // ========================================================================\n async prompt(request) {\n this.log('prompt called for session:', request.sessionId);\n return await this.sendRequest(request.sessionId, 'prompt', request);\n }\n async cancel(params) {\n this.log('cancel called for session:', params.sessionId);\n // cancel 是通知,不需要响应\n const envelope = json_rpc_js_1.JsonRpcEncoder.encodeNotification('cancel', params);\n this.send(params.sessionId, envelope);\n }\n // ========================================================================\n // IAcpJsonRpcClient 实现 - 配置\n // ========================================================================\n async setSessionModel(params) {\n this.log('setSessionModel called for session:', params.sessionId);\n return await this.sendRequest(params.sessionId, 'setSessionModel', params);\n }\n async setSessionMode(params) {\n this.log('setSessionMode called for session:', params.sessionId);\n return await this.sendRequest(params.sessionId, 'setSessionMode', params);\n }\n // ========================================================================\n // IAcpJsonRpcClient 实现 - 工具回调\n // ========================================================================\n async toolCallback(request) {\n this.log('toolCallback called for session:', request.sessionId, 'action:', request.action);\n return await this.sendRequest(request.sessionId, 'toolCallback', request);\n }\n // ========================================================================\n // IAcpJsonRpcClient 实现 - 工作区操作\n // ========================================================================\n /**\n * 打开工作区窗口\n * 使用 __workspace__ session ID,由 Main Process 直接处理\n * @param request 打开工作区请求\n * @returns 打开工作区响应\n */\n async openWorkspace(request) {\n this.log('openWorkspace called', request);\n return await this.sendRequest(types_js_1.SPECIAL_SESSION_IDS.WORKSPACE, 'openWorkspace', request);\n }\n /**\n * 发送全局请求\n * 使用 __global__ session ID,会根据 params.cwd 路由到对应窗口\n * cwd 为空时会路由到 Default Window\n * @param method 方法名\n * @param params 请求参数\n * @returns 响应结果\n */\n async sendBroadcastRequest(method, params) {\n this.log(`sendGlobalRequest called: ${method}`, params);\n return await this.sendRequest(types_js_1.SPECIAL_SESSION_IDS.BROADCAST, method, params);\n }\n /**\n * 获取当前工作区列表\n * 使用 __workspace__ session ID,由 Main Process 直接处理\n * @param request 获取工作区列表请求\n * @returns 获取工作区列表响应\n */\n async getCurrentWorkspaces(request) {\n this.log('getCurrentWorkspaces called', request);\n return await this.sendRequest(types_js_1.SPECIAL_SESSION_IDS.WORKSPACE, 'getCurrentWorkspaces', request !== null && request !== void 0 ? request : {});\n }\n // ========================================================================\n // IAcpJsonRpcClient 实现 - 推送消息监听\n // ========================================================================\n onSessionUpdate(callback) {\n this.sessionUpdateCallbacks.add(callback);\n this.log('onSessionUpdate: callback registered');\n return () => {\n this.sessionUpdateCallbacks.delete(callback);\n this.log('onSessionUpdate: callback unregistered');\n };\n }\n onRequestPermission(callback) {\n // 注册全局权限请求处理器\n this.permissionRequestResolvers.set('__global__', callback);\n this.log('onRequestPermission: callback registered');\n return () => {\n this.permissionRequestResolvers.delete('__global__');\n this.log('onRequestPermission: callback unregistered');\n };\n }\n /**\n * 监听 extNotification 推送\n * 用于接收 artifact 等扩展通知\n */\n onExtNotification(callback) {\n this.extNotificationCallbacks.add(callback);\n this.log('onExtNotification: callback registered');\n return () => {\n this.extNotificationCallbacks.delete(callback);\n this.log('onExtNotification: callback unregistered');\n };\n }\n // ========================================================================\n // IAcpJsonRpcClient 实现 - 连接状态\n // ========================================================================\n destroy() {\n this.log('Destroying AcpJsonRpcClient');\n // 移除事件监听器\n this.eventHandlers.forEach(({ event, handler }) => {\n this.channel.off(event, handler);\n });\n this.eventHandlers.length = 0;\n // 清理待处理请求\n this.pendingRequests.forEach(({ reject }) => {\n reject(new Error('Client destroyed'));\n });\n this.pendingRequests.clear();\n // 清空回调\n this.sessionUpdateCallbacks.clear();\n this.permissionRequestResolvers.clear();\n }\n // ========================================================================\n // 核心方法 - 发送请求\n // ========================================================================\n /**\n * 发送 JSON-RPC 请求并等待响应\n * @param sessionId 会话 ID\n * @param method 方法名\n * @param params 参数\n * @returns Promise<T> 响应结果\n */\n async sendRequest(sessionId, method, params) {\n const id = this.requestIdGenerator.generate();\n const envelope = json_rpc_js_1.JsonRpcEncoder.encodeRequest(id, method, {\n sessionId: (0, types_js_1.isReservedSessionId)(sessionId) ? undefined : sessionId,\n ...(params !== null && params !== void 0 ? params : {})\n });\n return new Promise((resolve, reject) => {\n // 保存待处理请求\n this.pendingRequests.set(id, { resolve, reject, method, sessionId });\n // 发送消息\n const sent = this.send(sessionId, envelope);\n if (!sent) {\n this.pendingRequests.delete(id);\n reject(new Error(`Failed to send ${method} request for session: ${sessionId}`));\n }\n this.log(`Request sent: ${method} (id: ${id}, session: ${sessionId})`);\n });\n }\n /**\n * 发送消息到指定 session\n * @param sessionId 会话 ID\n * @param envelope ACP RPC 消息包装\n * @returns 是否发送成功\n */\n send(sessionId, envelope) {\n return this.channel.sendNotification(sessionId, envelope);\n }\n // ========================================================================\n // 消息监听设置\n // ========================================================================\n /**\n * 设置消息监听器\n * 处理来自 ExtensionHost 的 JSON-RPC 响应和推送\n */\n setupMessageListener() {\n // 监听来自 ExtensionHost 的响应\n const responseHandler = (data) => {\n if (!json_rpc_js_1.JsonRpcEncoder.isAcpRpcMessage(data)) {\n return;\n }\n try {\n const message = json_rpc_js_1.JsonRpcEncoder.decode(data);\n if (json_rpc_js_1.JsonRpcEncoder.isResponse(message)) {\n this.handleResponse(message);\n }\n else if (json_rpc_js_1.JsonRpcEncoder.isNotification(message)) {\n this.handleNotification(message);\n }\n }\n catch (error) {\n this.log('Error handling message:', error);\n }\n };\n // 监听 'acp-rpc-response' 事件\n this.channel.on('acp-rpc-response', responseHandler);\n this.eventHandlers.push({ event: 'acp-rpc-response', handler: responseHandler });\n // 也监听 'message' 事件 (向后兼容)\n this.channel.on('message', responseHandler);\n this.eventHandlers.push({ event: 'message', handler: responseHandler });\n this.log('Message listener setup complete');\n }\n /**\n * 处理 JSON-RPC 响应\n */\n handleResponse(response) {\n const pending = this.pendingRequests.get(response.id);\n if (!pending) {\n this.log(`No pending request found for response id: ${response.id}`);\n return;\n }\n this.pendingRequests.delete(response.id);\n if (response.error) {\n const error = new Error(`RPC Error ${response.error.code}: ${response.error.message}`);\n pending.reject(error);\n }\n else {\n pending.resolve(response.result);\n }\n this.log(`Response received for request: ${pending.method} (id: ${response.id})`);\n }\n /**\n * 处理 JSON-RPC 推送消息\n */\n handleNotification(notification) {\n const method = notification.method;\n const params = notification.params;\n this.log(`Notification received: ${method}`);\n switch (method) {\n case 'session/update':\n case 'sessionUpdate':\n this.handleSessionUpdate(params);\n break;\n case 'request/permission':\n case 'requestPermission':\n this.handlePermissionRequest(params);\n break;\n case 'extNotification':\n this.handleExtNotification(params);\n break;\n default:\n this.log(`Unknown notification method: ${method}`);\n }\n }\n /**\n * 处理 extNotification 推送\n */\n handleExtNotification(params) {\n if (!params) {\n this.log('extNotification missing params');\n return;\n }\n const method = params.method;\n const extParams = params.params || {};\n this.log('handleExtNotification:', { method, extParams });\n this.extNotificationCallbacks.forEach(callback => {\n try {\n callback(method, extParams);\n }\n catch (error) {\n this.log('extNotification callback error:', error);\n }\n });\n }\n /**\n * 处理会话更新推送\n *\n * 支持 ACP 协议定义的多种 session update 类型:\n * - available_commands_update: 可用命令列表更新\n * - 其他类型: 原样转发给调用方\n */\n handleSessionUpdate(params) {\n if (!params) {\n this.log('Session update notification missing params');\n return;\n }\n const sessionId = params.sessionId;\n const messageId = params.messageId;\n if (!sessionId) {\n this.log('Invalid session update params:', params);\n return;\n }\n // 检查是否是 available_commands_update\n const update = params.update;\n const isAvailableCommandsUpdate = (update === null || update === void 0 ? void 0 : update.sessionUpdate) === 'available_commands_update';\n if (isAvailableCommandsUpdate) {\n this.log(`Available commands update received for session: ${sessionId}`);\n // 确保数据格式正确\n const rawCommands = update === null || update === void 0 ? void 0 : update.availableCommands;\n if (Array.isArray(rawCommands)) {\n // 验证并转换命令格式\n const commands = rawCommands\n .filter((cmd) => cmd !== null && typeof cmd === 'object' && typeof cmd.name === 'string')\n .map(cmd => ({\n name: String(cmd.name),\n description: typeof cmd.description === 'string' ? cmd.description : '',\n input: cmd.input && typeof cmd.input === 'object'\n ? { hint: typeof cmd.input.hint === 'string' ? cmd.input.hint : undefined }\n : undefined\n }));\n this.log(`Parsed ${commands.length} available commands`);\n }\n else {\n this.log('Invalid availableCommands format in available_commands_update');\n }\n }\n // 无论是什么类型,都通过现有回调发送\n // 调用方需要检查 notification.update.sessionUpdate 来判断类型\n const sessionUpdateParams = {\n notification: params, // 传递整个 notification\n ...(messageId && { messageId }) // 传递 messageId(如果存在)\n };\n this.sessionUpdateCallbacks.forEach(callback => {\n try {\n callback(sessionUpdateParams);\n }\n catch (error) {\n this.log('Session update callback error:', error);\n }\n });\n }\n /**\n * 处理权限请求推送\n */\n async handlePermissionRequest(params) {\n if (!params) {\n this.log('Permission request notification missing params');\n return;\n }\n const sessionId = params.sessionId;\n const requestId = params.requestId;\n const toolCall = params.toolCall;\n const options = params.options;\n if (!sessionId || !requestId || !toolCall) {\n this.log('Invalid permission request params:', params);\n return;\n }\n const permissionParams = {\n sessionId,\n requestId,\n toolCall,\n options\n };\n // 获取全局权限解析器\n const resolver = this.permissionRequestResolvers.get('__global__');\n if (!resolver) {\n this.log('No permission resolver registered, cancelling...');\n this.sendPermissionResponse(sessionId, requestId, { outcome: 'cancelled' });\n return;\n }\n try {\n const outcome = await resolver(permissionParams);\n this.sendPermissionResponse(sessionId, requestId, outcome);\n }\n catch (error) {\n this.log('Permission resolver error:', error);\n this.sendPermissionResponse(sessionId, requestId, { outcome: 'cancelled' });\n }\n }\n /**\n * 发送权限响应\n */\n sendPermissionResponse(sessionId, requestId, outcome) {\n const envelope = json_rpc_js_1.JsonRpcEncoder.encodeSuccessResponse(requestId, outcome);\n this.send(sessionId, envelope);\n this.log('Permission response sent for request:', requestId);\n }\n // ========================================================================\n // 工具方法\n // ========================================================================\n /**\n * 调试日志\n */\n log(...args) {\n if (this.debug) {\n console.log('[AcpJsonRpcClient]', ...args);\n }\n }\n}\nexports.AcpJsonRpcClient = AcpJsonRpcClient;\n//# sourceMappingURL=acp-json-rpc-client.js.map","\"use strict\";\n/**\n * ACP (Agent Client Protocol) 模块\n *\n * 提供与 ExtensionHost 通信的 JSON-RPC 客户端实现\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AcpJsonRpcClient = exports.isReservedSessionId = exports.SPECIAL_SESSION_IDS = exports.RequestTimeoutError = exports.JsonRpcErrorCode = exports.RequestIdGenerator = exports.JsonRpcEncoder = void 0;\n// JSON-RPC 工具\nvar json_rpc_js_1 = require(\"./json-rpc.js\");\nObject.defineProperty(exports, \"JsonRpcEncoder\", { enumerable: true, get: function () { return json_rpc_js_1.JsonRpcEncoder; } });\nObject.defineProperty(exports, \"RequestIdGenerator\", { enumerable: true, get: function () { return json_rpc_js_1.RequestIdGenerator; } });\nObject.defineProperty(exports, \"JsonRpcErrorCode\", { enumerable: true, get: function () { return json_rpc_js_1.JsonRpcErrorCode; } });\nObject.defineProperty(exports, \"RequestTimeoutError\", { enumerable: true, get: function () { return json_rpc_js_1.RequestTimeoutError; } });\n// ACP 类型定义\nvar types_js_1 = require(\"./types.js\");\nObject.defineProperty(exports, \"SPECIAL_SESSION_IDS\", { enumerable: true, get: function () { return types_js_1.SPECIAL_SESSION_IDS; } });\nObject.defineProperty(exports, \"isReservedSessionId\", { enumerable: true, get: function () { return types_js_1.isReservedSessionId; } });\n// ACP JSON-RPC Client 实现\nvar acp_json_rpc_client_js_1 = require(\"./acp-json-rpc-client.js\");\nObject.defineProperty(exports, \"AcpJsonRpcClient\", { enumerable: true, get: function () { return acp_json_rpc_client_js_1.AcpJsonRpcClient; } });\n//# sourceMappingURL=index.js.map","\"use strict\";\n/**\n * Local Agent Connection\n * Wraps AcpJsonRpcClient to implement AgentConnection interface\n *\n * Uses IWidgetChannel for IPC communication with ExtensionHost\n * Migrated from ipc-agent-provider for unified local agent access\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.IPCAgentConnection = exports.LocalAgentConnection = void 0;\nconst sdk_1 = require(\"@agentclientprotocol/sdk\");\nconst index_js_1 = require(\"./acp/index.js\");\n// ============================================================================\n// Local Agent Connection Implementation\n// ============================================================================\n/**\n * Local Agent Connection implementation\n * Uses AcpJsonRpcClient to communicate with ExtensionHost via IWidgetChannel\n *\n * Phase 1 Implementation:\n * - connect/disconnect: ✅ via initialize\n * - createSession/loadSession: ✅ via AcpJsonRpcClient\n * - prompt/cancel: ✅ via AcpJsonRpcClient\n * - Event forwarding: ✅ sessionUpdate, permissionRequest\n * - resolvePermission/rejectPermission: ✅ via callback\n *\n * Phase 2 (Not Implemented):\n * - promptStream: throws 'Not implemented'\n * - Artifact methods: return empty\n * - Question methods: return empty\n * - Extension methods: throw 'Not implemented'\n * - Filesystem methods: throw 'Not implemented'\n */\nclass LocalAgentConnection {\n // ========================================================================\n // Constructor\n // ========================================================================\n constructor(agentId, config) {\n var _a, _b, _c, _d, _e;\n /** Event listeners */\n this.listeners = new Map();\n this.onceListeners = new Map();\n /** Connection state */\n this._state = 'disconnected';\n this._isInitialized = false;\n /** Pending permission requests: requestId → { params, createdAt } */\n this.pendingPermissions = new Map();\n /** Local artifact cache: id → Artifact */\n this.artifactCache = new Map();\n this.transport = 'local';\n this.agentId = agentId;\n this.cwd = agentId; // agentId 就是 cwd\n this.debug = (_a = config.debug) !== null && _a !== void 0 ? _a : false;\n this.permissionTimeout = (_b = config.permissionTimeout) !== null && _b !== void 0 ? _b : 30000;\n this.permissionAutoRejectOnTimeout = (_c = config.permissionAutoRejectOnTimeout) !== null && _c !== void 0 ? _c : false;\n // Initialize ACP JSON-RPC Client\n this.acpClient = new index_js_1.AcpJsonRpcClient(config.channel, {\n timeoutMs: (_e = (_d = config.acpConfig) === null || _d === void 0 ? void 0 : _d.timeoutMs) !== null && _e !== void 0 ? _e : 30000,\n debug: this.debug\n });\n // Setup event forwarding\n this.setupEventForwarding();\n this.log('LocalAgentConnection initialized');\n }\n // ========================================================================\n // Event Forwarding Setup\n // ========================================================================\n setupEventForwarding() {\n // Forward session updates from AcpJsonRpcClient\n this.acpClient.onSessionUpdate((params) => {\n this.emit('sessionUpdate', params.notification);\n });\n // Forward extNotification from AcpJsonRpcClient (for artifacts, checkpoints, etc.)\n this.acpClient.onExtNotification((method, params) => {\n var _a, _b, _c;\n console.log('[LocalConnection] Received extNotification:', { method, paramsKeys: Object.keys(params) });\n // Handle artifact notifications\n if (method === '_codebuddy.ai/artifact') {\n const event = params.event;\n const artifact = params.artifact;\n console.log('[LocalConnection] Emitting artifact event:', { event, artifactId: artifact === null || artifact === void 0 ? void 0 : artifact.id });\n // Update local artifact cache\n if (artifact === null || artifact === void 0 ? void 0 : artifact.id) {\n if (event === 'created' || event === 'updated') {\n this.artifactCache.set(artifact.id, artifact);\n }\n else if (event === 'deleted') {\n this.artifactCache.delete(artifact.id);\n }\n }\n if (event === 'created') {\n this.emit('artifactCreated', artifact);\n }\n else if (event === 'updated') {\n this.emit('artifactUpdated', artifact);\n }\n else if (event === 'deleted') {\n this.emit('artifactDeleted', artifact);\n }\n }\n // Handle checkpoint notifications\n if (method === '_codebuddy.ai/checkpoint') {\n const event = params.event;\n const checkpoint = params.checkpoint;\n console.log('[LocalConnection] Emitting checkpoint event:', {\n event,\n checkpointId: checkpoint === null || checkpoint === void 0 ? void 0 : checkpoint.id,\n filesCount: (_c = (_b = (_a = checkpoint === null || checkpoint === void 0 ? void 0 : checkpoint.fileChanges) === null || _a === void 0 ? void 0 : _a.files) === null || _b === void 0 ? void 0 : _b.length) !== null && _c !== void 0 ? _c : 0\n });\n if (event === 'created') {\n this.emit('checkpointCreated', checkpoint);\n }\n else if (event === 'updated') {\n this.emit('checkpointUpdated', checkpoint);\n }\n }\n });\n // Forward permission requests from AcpJsonRpcClient\n this.acpClient.onRequestPermission(async (params) => {\n // Store pending permission (using PermissionRequestParams format)\n this.pendingPermissions.set(params.requestId, {\n params: params,\n createdAt: Date.now()\n });\n // Emit event (convert to RequestPermissionRequest format expected by ConnectionEvents)\n const permissionRequest = {\n sessionId: params.sessionId,\n toolCall: params.toolCall, // Type mismatch between legacy and SDK\n options: params.options\n };\n this.emit('permissionRequest', { requestId: params.requestId, params: permissionRequest });\n // Wait for resolution\n return new Promise((resolve) => {\n const checkResolution = () => {\n // Check if resolved/rejected\n if (!this.pendingPermissions.has(params.requestId)) {\n // Already resolved by resolvePermission/rejectPermission\n return;\n }\n // Check timeout\n const pending = this.pendingPermissions.get(params.requestId);\n if (pending && Date.now() - pending.createdAt > this.permissionTimeout) {\n this.pendingPermissions.delete(params.requestId);\n this.emit('permissionTimeout', { requestId: params.requestId });\n if (this.permissionAutoRejectOnTimeout) {\n resolve({ outcome: 'cancelled' });\n }\n }\n };\n // Store resolver for external resolution\n this[`_permissionResolver_${params.requestId}`] = resolve;\n // Setup timeout check\n setTimeout(checkResolution, this.permissionTimeout);\n });\n });\n this.log('Event forwarding setup complete');\n }\n // ========================================================================\n // Event Emitter Implementation\n // ========================================================================\n on(event, listener) {\n if (!this.listeners.has(event)) {\n this.listeners.set(event, new Set());\n }\n this.listeners.get(event).add(listener);\n return this;\n }\n off(event, listener) {\n const eventListeners = this.listeners.get(event);\n if (eventListeners) {\n eventListeners.delete(listener);\n }\n const onceEventListeners = this.onceListeners.get(event);\n if (onceEventListeners) {\n onceEventListeners.delete(listener);\n }\n return this;\n }\n once(event, listener) {\n if (!this.onceListeners.has(event)) {\n this.onceListeners.set(event, new Set());\n }\n this.onceListeners.get(event).add(listener);\n return this;\n }\n emit(event, data) {\n const regularListeners = this.listeners.get(event);\n const onceEventListeners = this.onceListeners.get(event);\n let hasListeners = false;\n // Call regular listeners\n if (regularListeners && regularListeners.size > 0) {\n hasListeners = true;\n for (const listener of regularListeners) {\n try {\n const result = listener(data);\n if (result instanceof Promise) {\n result.catch((err) => {\n console.error(`Error in async event listener for '${String(event)}':`, err);\n });\n }\n }\n catch (err) {\n console.error(`Error in event listener for '${String(event)}':`, err);\n }\n }\n }\n // Call once listeners and remove them\n if (onceEventListeners && onceEventListeners.size > 0) {\n hasListeners = true;\n const listenersToCall = Array.from(onceEventListeners);\n this.onceListeners.delete(event);\n for (const listener of listenersToCall) {\n try {\n const result = listener(data);\n if (result instanceof Promise) {\n result.catch((err) => {\n console.error(`Error in async once event listener for '${String(event)}':`, err);\n });\n }\n }\n catch (err) {\n console.error(`Error in once event listener for '${String(event)}':`, err);\n }\n }\n }\n return hasListeners;\n }\n removeAllListeners(event) {\n if (event !== undefined) {\n this.listeners.delete(event);\n this.onceListeners.delete(event);\n }\n else {\n this.listeners.clear();\n this.onceListeners.clear();\n }\n return this;\n }\n // ========================================================================\n // State Properties\n // ========================================================================\n get state() {\n return this._state;\n }\n get isInitialized() {\n return this._isInitialized;\n }\n get capabilities() {\n return this._capabilities;\n }\n get initializeResult() {\n return this._initializeResult;\n }\n // ========================================================================\n // Connection Lifecycle (Phase 1: Implemented)\n // ========================================================================\n async connect(_clientCapabilities) {\n this.log('Connecting...');\n this._state = 'connecting';\n this.emit('connecting', undefined);\n this._isInitialized = true;\n this._initializeResult = { protocolVersion: sdk_1.PROTOCOL_VERSION };\n this.emit('connected', undefined);\n this._state = 'initialized';\n return this._initializeResult;\n }\n disconnect() {\n this.log('Disconnecting...');\n this._state = 'disconnected';\n this._isInitialized = false;\n this.acpClient.destroy();\n this.emit('disconnected', undefined);\n this.log('Disconnected');\n }\n // ========================================================================\n // Session Management (Phase 1: Implemented)\n // ========================================================================\n async createSession(params) {\n var _a;\n this.log('Creating session with cwd:', params.cwd);\n return await this.acpClient.newSession({\n cwd: params.cwd,\n mcpServers: ((_a = params.mcpServers) !== null && _a !== void 0 ? _a : []) // Type cast needed for McpServerConfig → McpServer\n });\n }\n async loadSession(params) {\n var _a;\n if (!params.sessionId) {\n throw new Error('sessionId is required for loadSession');\n }\n this.log(`[LocalAgentConnection] loadSession: ${params.sessionId}`);\n const response = await this.acpClient.loadSession({\n sessionId: params.sessionId,\n cwd: params.cwd,\n mcpServers: ((_a = params.mcpServers) !== null && _a !== void 0 ? _a : []) // Type cast needed for McpServerConfig → McpServer\n });\n this.log(`[LocalAgentConnection] loadSession response:${response}`);\n return response;\n }\n // ========================================================================\n // Session Mode Management\n // ========================================================================\n async setSessionMode(sessionId, modeId) {\n this.log('Setting session mode:', sessionId, 'to', modeId);\n return await this.acpClient.setSessionMode({ sessionId, modeId });\n }\n async setSessionModel(sessionId, modelId) {\n this.log('Setting session model:', sessionId, 'to', modelId);\n return await this.acpClient.setSessionModel({ sessionId, modelId });\n }\n // ========================================================================\n // Workspace Operations\n // ========================================================================\n /**\n * 打开工作区窗口\n * 使用 __workspace__ session ID,由 Main Process 直接处理,不转发到 ExtensionHost\n * @param params 打开工作区请求参数\n * @returns 打开工作区响应\n */\n async openWorkspace(params) {\n this.log('Opening workspace:', params.cwd);\n return await this.acpClient.openWorkspace(params);\n }\n // ========================================================================\n // Prompt Operations (Phase 1: Implemented, except promptStream)\n // ========================================================================\n async prompt(sessionId, params) {\n // 如果 content 是字符串,包装成 ContentBlock;否则直接使用\n const prompt = typeof params.content === 'string'\n ? [{ type: 'text', text: params.content }]\n : params.content;\n this.log('Sending prompt to session:', sessionId);\n return await this.acpClient.prompt({\n sessionId,\n prompt,\n ...(params.planMode !== undefined && { _meta: { ...params._meta, planMode: params.planMode } })\n }); // Cast needed due to legacy type mismatch\n }\n async *promptStream(_sessionId, _params) {\n // Phase 2: Not implemented yet\n throw new Error('promptStream not implemented for Local connection');\n }\n async cancel(sessionId) {\n this.log('Cancelling session:', sessionId);\n await this.acpClient.cancel({ sessionId });\n }\n // ========================================================================\n // Artifact Management (Implemented via local cache)\n // ========================================================================\n getArtifacts() {\n return new Map(this.artifactCache);\n }\n getArtifact(id) {\n return this.artifactCache.get(id);\n }\n getArtifactsByType(type) {\n return Array.from(this.artifactCache.values()).filter(artifact => artifact.type === type);\n }\n async fetchArtifactContent(_artifact) {\n // Phase 2: Not implemented\n throw new Error('fetchArtifactContent not implemented for Local connection');\n }\n async fetchArtifactContentById(_id) {\n // Phase 2: Not implemented\n throw new Error('fetchArtifactContentById not implemented for Local connection');\n }\n // ========================================================================\n // Permission Management (Phase 1: Implemented)\n // ========================================================================\n resolvePermission(requestId, optionId) {\n const resolver = this[`_permissionResolver_${requestId}`];\n if (resolver) {\n this.pendingPermissions.delete(requestId);\n delete this[`_permissionResolver_${requestId}`];\n resolver({ outcome: 'selected', optionId });\n this.emit('permissionResolved', { requestId, optionId });\n return true;\n }\n return false;\n }\n rejectPermission(requestId, reason) {\n const resolver = this[`_permissionResolver_${requestId}`];\n if (resolver) {\n this.pendingPermissions.delete(requestId);\n delete this[`_permissionResolver_${requestId}`];\n resolver({ outcome: 'cancelled' });\n this.emit('permissionRejected', { requestId, reason });\n return true;\n }\n return false;\n }\n getPendingPermissions() {\n // Convert PermissionRequestParams to RequestPermissionRequest format\n const result = new Map();\n for (const [requestId, pending] of this.pendingPermissions) {\n result.set(requestId, {\n params: {\n sessionId: pending.params.sessionId,\n toolCall: pending.params.toolCall,\n options: pending.params.options\n },\n createdAt: pending.createdAt\n });\n }\n return result;\n }\n hasPendingPermissions() {\n return this.pendingPermissions.size > 0;\n }\n // ========================================================================\n // Question Management (Phase 2: Not Implemented)\n // ========================================================================\n answerQuestion(_toolCallId, _answers) {\n // Phase 2: Not implemented\n return false;\n }\n // ========================================================================\n // Tool Callback Management\n // ========================================================================\n /**\n * 工具回调操作\n * 用于对正在执行的工具进行 skip 或 cancel 操作\n * @param sessionId 会话 ID\n * @param toolCallId 工具调用 ID\n * @param toolName 工具名称\n * @param action 操作类型 ('skip' | 'cancel')\n * @returns 工具回调响应\n */\n async toolCallback(sessionId, toolCallId, toolName, action) {\n this.log('toolCallback called for session:', sessionId, 'action:', action);\n const request = { sessionId, toolCallId, toolName, action };\n return await this.acpClient.toolCallback(request);\n }\n cancelQuestion(_toolCallId, _reason) {\n // Phase 2: Not implemented\n return false;\n }\n getPendingQuestions() {\n // Phase 2: Not implemented\n return new Map();\n }\n hasPendingQuestions() {\n // Phase 2: Not implemented\n return false;\n }\n // ========================================================================\n // Extension Methods (Phase 2: Not Implemented)\n // ========================================================================\n async extMethod(_method, _params) {\n // Phase 2: Not implemented\n throw new Error('extMethod not implemented for Local connection');\n }\n async extNotification(_method, _params) {\n // Phase 2: Not implemented\n throw new Error('extNotification not implemented for Local connection');\n }\n // ========================================================================\n // Filesystem Operations (Phase 2: Not Implemented)\n // ========================================================================\n async readFile(_path) {\n // Phase 2: Not implemented\n throw new Error('readFile not implemented for Local connection');\n }\n async listDir(_path) {\n // Phase 2: Not implemented\n throw new Error('listDir not implemented for Local connection');\n }\n async fileExists(_path) {\n // Phase 2: Not implemented\n throw new Error('fileExists not implemented for Local connection');\n }\n async fileStat(_path) {\n // Phase 2: Not implemented\n throw new Error('fileStat not implemented for Local connection');\n }\n // ========================================================================\n // Utility Methods\n // ========================================================================\n log(...args) {\n if (this.debug) {\n console.log('[LocalAgentConnection]', ...args);\n }\n }\n}\nexports.LocalAgentConnection = LocalAgentConnection;\n/**\n * @deprecated Use LocalAgentConnection instead\n * Alias for backward compatibility\n */\nexports.IPCAgentConnection = LocalAgentConnection;\nexports.default = LocalAgentConnection;\n//# sourceMappingURL=local-connection.js.map","\"use strict\";\n/**\n * Local Filesystem 实现\n *\n * 实现 FilesResource 接口,通过 ACP JSON-RPC 协议将 filesystem 操作\n * 路由到 ExtensionHost,在 Extension 侧使用 vscode.workspace.fs 执行。\n *\n * 设计模式:\n * - 参考 E2BFilesystem 的接口设计\n * - 通过 JSON-RPC 请求发送到 ExtensionHost\n * - 支持所有 FilesResource 方法(包括多态重载)\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.LocalFilesystem = exports.FILESYSTEM_METHODS = void 0;\n/**\n * Filesystem JSON-RPC 方法名称\n */\nexports.FILESYSTEM_METHODS = {\n READ: 'fs/read',\n WRITE: 'fs/write',\n LIST: 'fs/list',\n EXISTS: 'fs/exists',\n MAKE_DIR: 'fs/makeDir',\n REMOVE: 'fs/remove',\n RENAME: 'fs/rename',\n GET_INFO: 'fs/getInfo',\n WATCH_DIR: 'fs/watchDir',\n UNWATCH: 'fs/unwatch',\n};\n/**\n * Watch 句柄 ID 生成计数器\n */\nlet watchIdCounter = 0;\n/**\n * LocalFilesystem\n *\n * 实现 FilesResource 接口,将 filesystem 操作通过 JSON-RPC 发送到 ExtensionHost\n */\nclass LocalFilesystem {\n constructor(client, sessionId, options) {\n var _a;\n /** 活跃的 watch 回调映射 */\n this.watchCallbacks = new Map();\n this.client = client;\n this.sessionId = sessionId;\n this.debug = (_a = options === null || options === void 0 ? void 0 : options.debug) !== null && _a !== void 0 ? _a : false;\n // 设置 filesystem 事件监听\n this.setupEventListener();\n }\n /**\n * 设置 filesystem 事件监听(用于 watchDir)\n */\n setupEventListener() {\n // 插件侧 AcpConnection 会通过 JSON-RPC notification method=\"fs-event\" 推送\n const dispose = this.client.onExtNotification((method, params) => {\n if (method !== 'fs-event') {\n return;\n }\n const data = params;\n if (data === null || data === void 0 ? void 0 : data.watchId) {\n const callback = this.watchCallbacks.get(data.watchId);\n if (callback) {\n // FilesystemEvent 只有 type 和 name,但我们需要传递完整路径\n // 使用类型扩展来传递后端发送的 path 字段\n const event = {\n type: data.eventType,\n name: data.name,\n path: data.path, // 完整的文件路径(由后端 filesystem-service 发送)\n };\n callback(event);\n }\n }\n });\n this.eventCleanup = () => dispose === null || dispose === void 0 ? void 0 : dispose();\n }\n /**\n * 发送 filesystem 请求到 ExtensionHost\n */\n async sendRequest(method, params) {\n console.log(`[LocalFilesystem] sendRequest: ${method}`, params);\n try {\n // IAcpJsonRpcClient 会自动封装 acp-rpc envelope 并注入 sessionId\n const result = await this.client.sendRequest(this.sessionId, method, params);\n // FilesystemService 返回 { success, data?, error? }\n if (result && typeof result === 'object') {\n if ('error' in result && result.error) {\n throw new Error(result.error);\n }\n if ('data' in result) {\n return result.data;\n }\n }\n return result;\n }\n catch (error) {\n console.error(`[LocalFilesystem] error:`, error);\n throw error;\n }\n }\n async read(path, opts) {\n var _a;\n const format = ((_a = opts === null || opts === void 0 ? void 0 : opts.format) !== null && _a !== void 0 ? _a : 'text');\n if (format === 'text') {\n return this.sendRequest(exports.FILESYSTEM_METHODS.READ, { path, opts, format: 'text' });\n }\n // 对于 bytes/blob/stream,先读取 base64,再转换\n const base64Data = await this.sendRequest(exports.FILESYSTEM_METHODS.READ, {\n path,\n opts,\n format: 'bytes' // 服务端返回 base64 编码\n });\n // 将 base64 转换为 Uint8Array\n const binaryString = atob(base64Data);\n const bytes = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n if (format === 'bytes') {\n return bytes;\n }\n else if (format === 'blob') {\n return new Blob([bytes]);\n }\n else {\n // stream\n return new ReadableStream({\n start(controller) {\n controller.enqueue(bytes);\n controller.close();\n }\n });\n }\n }\n async write(pathOrFiles, dataOrOpts, opts) {\n console.log('[LocalFilesystem] write() called:', {\n sessionId: this.sessionId,\n isArray: Array.isArray(pathOrFiles),\n pathOrFiles: Array.isArray(pathOrFiles) ? `${pathOrFiles.length} files` : pathOrFiles\n });\n if (Array.isArray(pathOrFiles)) {\n // 批量写入\n const files = await Promise.all(pathOrFiles.map(async (entry) => ({\n path: entry.path,\n data: await this.convertDataToString(entry.data)\n })));\n return this.sendRequest(exports.FILESYSTEM_METHODS.WRITE, {\n path: '',\n files,\n opts: dataOrOpts\n });\n }\n else {\n // 单文件写入\n const dataStr = await this.convertDataToString(dataOrOpts);\n return this.sendRequest(exports.FILESYSTEM_METHODS.WRITE, {\n path: pathOrFiles,\n data: dataStr,\n opts\n });\n }\n }\n /**\n * 将数据转换为字符串(用于传输)\n */\n async convertDataToString(data) {\n if (typeof data === 'string') {\n return data;\n }\n else if (data instanceof ArrayBuffer) {\n return this.arrayBufferToBase64(data);\n }\n else if (data instanceof Blob) {\n return this.blobToBase64(data);\n }\n else if (data && typeof data.getReader === 'function') {\n // ReadableStream\n const reader = data.getReader();\n const chunks = [];\n let done = false;\n while (!done) {\n const result = await reader.read();\n done = result.done;\n if (result.value) {\n chunks.push(result.value);\n }\n }\n const totalLength = chunks.reduce((sum, chunk) => sum + chunk.length, 0);\n const combined = new Uint8Array(totalLength);\n let offset = 0;\n for (const chunk of chunks) {\n combined.set(chunk, offset);\n offset += chunk.length;\n }\n return this.arrayBufferToBase64(combined.buffer);\n }\n return String(data);\n }\n // ============================================\n // 其他方法实现\n // ============================================\n /**\n * 列出目录内容\n */\n async list(path, opts) {\n return this.sendRequest(exports.FILESYSTEM_METHODS.LIST, {\n path,\n opts,\n depth: opts === null || opts === void 0 ? void 0 : opts.depth\n });\n }\n /**\n * 检查路径是否存在\n */\n async exists(path, opts) {\n return this.sendRequest(exports.FILESYSTEM_METHODS.EXISTS, { path, opts });\n }\n /**\n * 创建目录\n */\n async makeDir(path, opts) {\n return this.sendRequest(exports.FILESYSTEM_METHODS.MAKE_DIR, { path, opts });\n }\n /**\n * 删除文件或目录\n */\n async remove(path, opts) {\n await this.sendRequest(exports.FILESYSTEM_METHODS.REMOVE, { path, opts });\n }\n /**\n * 重命名/移动文件或目录\n */\n async rename(oldPath, newPath, opts) {\n return this.sendRequest(exports.FILESYSTEM_METHODS.RENAME, {\n path: oldPath,\n newPath,\n opts\n });\n }\n /**\n * 获取文件或目录信息\n */\n async getInfo(path, opts) {\n return this.sendRequest(exports.FILESYSTEM_METHODS.GET_INFO, { path, opts });\n }\n /**\n * 监听目录变化\n */\n async watchDir(path, onEvent, opts) {\n const watchId = `watch-${++watchIdCounter}-${Date.now()}`;\n // 注册回调\n this.watchCallbacks.set(watchId, onEvent);\n // 发送 watchDir 请求到 ExtensionHost\n await this.sendRequest(exports.FILESYSTEM_METHODS.WATCH_DIR, {\n path,\n recursive: opts === null || opts === void 0 ? void 0 : opts.recursive,\n opts: { ...opts, user: watchId } // 用 user 字段传递 watchId\n });\n // 返回 WatchHandle\n // 使用类型断言,因为 e2b 的 WatchHandle 是 class 类型,\n // 但我们只需要实现 stop() 方法即可满足实际使用需求\n return {\n stop: async () => {\n this.watchCallbacks.delete(watchId);\n try {\n await this.sendRequest(exports.FILESYSTEM_METHODS.UNWATCH, {\n path,\n opts: { user: watchId }\n });\n }\n catch (error) {\n this.log(`Failed to unwatch: ${path}`, error);\n }\n // 调用 onExit 回调\n if (opts === null || opts === void 0 ? void 0 : opts.onExit) {\n opts.onExit();\n }\n }\n };\n }\n // ========================================================================\n // 辅助方法\n // ========================================================================\n /**\n * ArrayBuffer 转 Base64\n */\n arrayBufferToBase64(buffer) {\n const bytes = new Uint8Array(buffer);\n let binary = '';\n for (let i = 0; i < bytes.byteLength; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n return btoa(binary);\n }\n /**\n * Blob 转 Base64\n */\n async blobToBase64(blob) {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onloadend = () => {\n const result = reader.result;\n // 移除 data URL 前缀\n const base64 = result.split(',')[1] || result;\n resolve(base64);\n };\n reader.onerror = reject;\n reader.readAsDataURL(blob);\n });\n }\n /**\n * 日志输出\n */\n log(...args) {\n if (this.debug) {\n console.log('[LocalFilesystem]', ...args);\n }\n }\n /**\n * 销毁实例,清理资源\n */\n destroy() {\n // 清理所有 watch 回调\n this.watchCallbacks.clear();\n // 清理事件监听\n if (this.eventCleanup) {\n this.eventCleanup();\n this.eventCleanup = undefined;\n }\n }\n}\nexports.LocalFilesystem = LocalFilesystem;\nexports.default = LocalFilesystem;\n//# sourceMappingURL=local-filesystem.js.map","\"use strict\";\n/**\n * Local Agent Provider\n *\n * 统一的两层模型实现:\n * - 第一层: 计算环境 (Local: Window/Workspace,由 cwd 标识)\n * - 第二层: 对话上下文 (Session)\n *\n * 关键设计:\n * - create() 返回 cwd(由 prepareCreate 预设)\n * - get()/list() 返回 Session 信息\n * - connect(id) 智能判断:cwd (createSession) 或 sessionId (loadSession)\n * - sessionCwdMap 维护 sessionId → cwd 映射\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.LocalAgentProvider = void 0;\nconst local_connection_js_1 = require(\"./local-connection.js\");\nconst index_js_1 = require(\"./acp/index.js\");\nconst local_filesystem_js_1 = require(\"./local-filesystem.js\");\n/**\n * LocalAgentProvider\n *\n * 实现统一两层模型的 Local 端适配:\n * - 第一层 (Window/Workspace): 由 IDE/用户管理,Provider 只负责调用 openWorkspace\n * - 第二层 (Session): 由 Provider 管理\n *\n * 核心方法语义:\n * - create(): 返回 cwd 作为 \"agentId\"(需先调用 prepareCreate 预设)\n * - get(id): 支持 cwd 和 sessionId 两种输入,返回 Session 状态\n * - list(): 返回所有 Sessions\n * - connect(id): 智能判断 id 类型,建立连接\n * - delete(id): 删除 Session\n *\n * 同时实现 FilesystemProvider 接口,提供文件系统访问能力\n */\nclass LocalAgentProvider {\n constructor(options) {\n var _a, _b, _c;\n /** 连接缓存: cwd → Connection */\n this.connections = new Map();\n /** sessionId → cwd 映射(用于 loadSession 时找到正确的连接) */\n this.sessionCwdMap = new Map();\n /** Filesystem 实例缓存: sessionId → LocalFilesystem */\n this.filesystemCache = new Map();\n if (!options.channel) {\n throw new Error('Channel is required for LocalAgentProvider');\n }\n this.options = options;\n this.channel = options.channel;\n // Create shared ACP client\n this.sharedAcpClient = new index_js_1.AcpJsonRpcClient(this.channel, {\n timeoutMs: (_b = (_a = options.acpConfig) === null || _a === void 0 ? void 0 : _a.timeoutMs) !== null && _b !== void 0 ? _b : 30000,\n debug: (_c = options.debug) !== null && _c !== void 0 ? _c : false\n });\n }\n // ========================================================================\n // FilesystemProvider 暴露给 AgentProvider 接口\n // ========================================================================\n /**\n * 实现 AgentProvider.filesystem 属性\n * 返回 this,因为 LocalAgentProvider 本身实现了 FilesystemProvider 接口\n */\n get filesystem() {\n return this;\n }\n // ========================================================================\n // 核心 AgentProvider 接口实现\n // ========================================================================\n /**\n * 创建 \"Agent\"\n *\n * 对于 Local,返回 cwd 作为 agentId\n * 后续 connect(cwd) 和 connection.createSession() 会使用它\n *\n * @param params - 会话创建参数,包含 cwd\n * @returns cwd 作为 \"agentId\"\n */\n async create(params) {\n const cwd = params === null || params === void 0 ? void 0 : params.cwd;\n if (cwd === undefined) {\n throw new Error('cwd is required for LocalAgentProvider.create()');\n }\n this.log(`create() returning cwd as agentId: ${cwd}`);\n // 返回 cwd 作为 \"agentId\"\n // SessionManager 会调用 connect(cwd)\n return cwd;\n }\n /**\n * 获取 Session 状态\n *\n * SessionManager.loadSession() 会用 sessionId 调用此方法\n * 需要返回包含 cwd 的状态,以便后续 connect()\n *\n * @param id - 可能是 sessionId 或 cwd\n * @returns Session 状态\n */\n async get(id) {\n var _a;\n this.log(`get() called with: ${id}`);\n // 先检查是否是 cwd(createSession 流程)\n // cwd 通常是绝对路径,以 / 开头\n if (id.startsWith('/')) {\n // 这是 cwd,不是 sessionId,返回一个占位状态\n return {\n id: id,\n type: 'local',\n status: 'disconnected',\n cwd: id,\n };\n }\n // 检查本地缓存\n const cachedCwd = this.sessionCwdMap.get(id);\n if (cachedCwd) {\n return {\n id: id,\n type: 'local',\n status: 'connected',\n cwd: cachedCwd,\n };\n }\n // 从后端获取 session 信息\n try {\n const response = await this.channel.callMethod('__backend__', {\n type: 'backend',\n requestId: `req-${Date.now()}-${Math.random().toString(36).slice(2)}`,\n params: {\n type: 'backend:get-session-request',\n params: { sessionId: id }\n }\n }, 5000);\n const session = (_a = response.data) === null || _a === void 0 ? void 0 : _a.session;\n if (!session) {\n this.log(`Session not found: ${id}`);\n return undefined;\n }\n // 缓存 sessionId → cwd 映射\n if (session.cwd) {\n this.sessionCwdMap.set(id, session.cwd);\n }\n return {\n id: session.sessionId,\n type: 'local',\n status: session.status === 'active' ? 'connected' : 'disconnected',\n cwd: session.cwd,\n name: session.name,\n createdAt: session.createdAt ? new Date(session.createdAt) : undefined,\n };\n }\n catch (error) {\n this.log(`Failed to get session ${id}:`, error);\n return undefined;\n }\n }\n /**\n * 列出所有 Sessions\n *\n * @param options - 可选的查询参数(过滤、排序)\n * @returns Session 状态列表和分页信息\n */\n async list(options) {\n var _a, _b;\n this.log('list() called with options:', options);\n try {\n const response = await this.channel.callMethod('__backend__', {\n type: 'backend',\n requestId: `req-${Date.now()}-${Math.random().toString(36).slice(2)}`,\n params: {\n type: 'backend:list-sessions-request',\n params: {}\n }\n }, 5000);\n const sessions = (_b = (_a = response.data) === null || _a === void 0 ? void 0 : _a.sessions) !== null && _b !== void 0 ? _b : [];\n this.log(`Found ${sessions.length} sessions`);\n // 更新 sessionId → cwd 映射\n for (const session of sessions) {\n if (session.sessionId && session.cwd) {\n this.sessionCwdMap.set(session.sessionId, session.cwd);\n }\n }\n let result = sessions.map((session) => ({\n id: session.sessionId,\n type: 'local',\n status: session.status,\n cwd: session.cwd,\n name: session.name,\n createdAt: session.createdAt ? new Date(session.createdAt) : undefined,\n }));\n // 应用过滤\n if (options) {\n result = this.applyFilters(result, options);\n }\n // 返回带有合成分页信息的结果(Local 模式一次返回所有数据)\n return {\n agents: result,\n pagination: {\n page: 1,\n size: result.length,\n total: result.length,\n totalPages: 1,\n hasNext: false,\n hasPrev: false\n }\n };\n }\n catch (error) {\n this.log('Failed to list sessions:', error);\n return {\n agents: [],\n pagination: {\n page: 1,\n size: 0,\n total: 0,\n totalPages: 0,\n hasNext: false,\n hasPrev: false\n }\n };\n }\n }\n /**\n * 应用本地过滤和排序\n */\n applyFilters(sessions, options) {\n var _a;\n let filtered = [...sessions];\n // 搜索过滤 (匹配 title/name)\n if (options.title) {\n const keyword = options.title.toLowerCase();\n filtered = filtered.filter(s => { var _a; return (_a = s.name) === null || _a === void 0 ? void 0 : _a.toLowerCase().includes(keyword); });\n }\n // 字段过滤 (如 status)\n if ((_a = options.filters) === null || _a === void 0 ? void 0 : _a.length) {\n for (const filter of options.filters) {\n const values = filter.value.split(',').map(v => v.trim());\n filtered = filtered.filter(s => {\n const fieldValue = s[filter.field];\n return values.includes(String(fieldValue));\n });\n }\n }\n // 日期范围过滤\n if (options.dayRange) {\n const cutoff = new Date();\n cutoff.setDate(cutoff.getDate() - options.dayRange);\n filtered = filtered.filter(s => s.createdAt && s.createdAt >= cutoff);\n }\n // 排序\n if (options.sort) {\n const { orderBy, order = 'asc' } = options.sort;\n filtered.sort((a, b) => {\n const aVal = a[orderBy];\n const bVal = b[orderBy];\n if (aVal === undefined)\n return 1;\n if (bVal === undefined)\n return -1;\n let cmp = 0;\n if (aVal instanceof Date && bVal instanceof Date) {\n cmp = aVal.getTime() - bVal.getTime();\n }\n else if (typeof aVal === 'string' && typeof bVal === 'string') {\n cmp = aVal.localeCompare(bVal);\n }\n else {\n cmp = aVal < bVal ? -1 : aVal > bVal ? 1 : 0;\n }\n return order === 'desc' ? -cmp : cmp;\n });\n }\n return filtered;\n }\n /**\n * 连接到工作区\n *\n * @param id - 可能是 cwd(createSession 流程)或 sessionId(loadSession 流程)\n * @returns LocalAgentConnection 实例\n */\n async connect(id) {\n var _a, _b, _c;\n this.log(`connect() called with: ${id}`);\n // 确定 cwd\n let cwd;\n if (id.startsWith('/')) {\n // id 是 cwd(createSession 流程)\n cwd = id;\n }\n else {\n // id 是 sessionId(loadSession 流程),需要查找 cwd\n cwd = this.sessionCwdMap.get(id) || '';\n if (cwd === undefined) {\n // 尝试从后端获取\n const state = await this.get(id);\n cwd = (state === null || state === void 0 ? void 0 : state.cwd) || '';\n }\n if (cwd === undefined) {\n throw new Error(`Cannot find cwd for session: ${id}`);\n }\n }\n this.log(`Resolved cwd: ${cwd}`);\n // 检查已有连接\n const existing = this.connections.get(cwd);\n if (existing === null || existing === void 0 ? void 0 : existing.isInitialized) {\n this.log(`Reusing existing connection for: ${cwd}`);\n return existing;\n }\n // 调用 openWorkspace 确保窗口打开\n this.log(`Opening workspace: ${cwd}`);\n // 获取 client capabilities\n const clientCapabilities = {\n ...this.options.clientCapabilities,\n _meta: {\n ...(_a = this.options.clientCapabilities) === null || _a === void 0 ? void 0 : _a._meta,\n \"codebuddy.ai\": {\n ...(_c = (_b = this.options.clientCapabilities) === null || _b === void 0 ? void 0 : _b._meta) === null || _c === void 0 ? void 0 : _c[\"codebuddy.ai\"],\n cwd,\n }\n }\n };\n // 创建连接配置\n const config = {\n channel: this.channel,\n debug: this.options.debug,\n acpConfig: this.options.acpConfig,\n permissionTimeout: this.options.permissionTimeout,\n permissionAutoRejectOnTimeout: this.options.permissionAutoRejectOnTimeout,\n clientCapabilities\n };\n // 创建连接(使用 cwd 作为 agentId)\n const connection = new local_connection_js_1.LocalAgentConnection(cwd, config);\n // 初始化连接\n await connection.connect(clientCapabilities);\n // 缓存连接\n this.connections.set(cwd, connection);\n // 监听断开事件\n connection.once('disconnected', () => {\n this.connections.delete(cwd);\n this.log(`Connection removed from cache: ${cwd}`);\n });\n this.log(`Connected to workspace: ${cwd}`);\n return connection;\n }\n /**\n * 删除 Session\n *\n * @param sessionId - 会话 ID\n * @returns 是否成功删除\n */\n async delete(sessionId) {\n var _a, _b;\n this.log(`delete() called with: ${sessionId}`);\n // 清理本地缓存\n this.sessionCwdMap.delete(sessionId);\n try {\n const response = await this.channel.callMethod('__backend__', {\n type: 'backend',\n requestId: `req-${Date.now()}-${Math.random().toString(36).slice(2)}`,\n params: {\n type: 'backend:delete-session-request',\n params: { sessionId }\n }\n }, 5000);\n return (_b = (_a = response.data) === null || _a === void 0 ? void 0 : _a.success) !== null && _b !== void 0 ? _b : false;\n }\n catch (error) {\n this.log(`Failed to delete session ${sessionId}:`, error);\n return false;\n }\n }\n /**\n * 归档 Session\n *\n * @param sessionId - 会话 ID\n * @returns 包含归档的 session ID 的对象\n */\n async archive(sessionId) {\n var _a, _b;\n this.log(`archive() called with: ${sessionId}`);\n try {\n const response = await this.channel.callMethod('__backend__', {\n type: 'backend',\n requestId: `req-${Date.now()}-${Math.random().toString(36).slice(2)}`,\n params: {\n type: 'backend:archive-session-request',\n params: { sessionId }\n }\n }, 5000);\n if (!((_a = response.data) === null || _a === void 0 ? void 0 : _a.success)) {\n throw new Error(((_b = response.data) === null || _b === void 0 ? void 0 : _b.error) || 'Archive failed');\n }\n // 清理本地缓存\n this.sessionCwdMap.delete(sessionId);\n this.log(`Session archived: ${sessionId}`);\n return { id: sessionId };\n }\n catch (error) {\n this.log(`Failed to archive session ${sessionId}:`, error);\n throw error;\n }\n }\n // ========================================================================\n // 扩展方法(用于 AgentClient 适配)\n // ========================================================================\n /**\n * 注册 sessionId → cwd 映射\n *\n * 在 connection.createSession() 成功后调用,记录新创建的 session\n *\n * @param sessionId - 会话 ID\n * @param cwd - 工作区路径\n */\n registerSession(sessionId, cwd) {\n this.sessionCwdMap.set(sessionId, cwd);\n this.log(`Registered session: ${sessionId} → ${cwd}`);\n }\n // ========================================================================\n // Model and Mode Operations\n // ========================================================================\n /**\n * 获取可用模型列表\n *\n * 通过 ACP JSON-RPC 调用 getModels 方法\n * cwd 为空时会路由到 Default Window\n *\n * @param cwd - 工作目录,可选。为空时使用 Default Window\n * @param mode - 模式过滤,可选\n * @returns 模型列表\n */\n async getModels(cwd, mode) {\n this.log(`getModels() called with cwd: ${cwd || '(empty)'}, mode: ${mode || '(default)'}`);\n try {\n const response = await this.sharedAcpClient.sendBroadcastRequest('getModels', { cwd: cwd || '', mode });\n if (response === null || response === void 0 ? void 0 : response.models) {\n this.log(`getModels() returned ${response.models.length} models`);\n return response.models;\n }\n this.log('getModels() - no models in response');\n return [];\n }\n catch (error) {\n this.log('getModels() failed:', error);\n return [];\n }\n }\n /**\n * 获取可用模式列表\n *\n * 通过 ACP JSON-RPC 调用 getModes 方法\n * cwd 为空时会路由到 Default Window\n *\n * @param cwd - 工作目录,可选。为空时使用 Default Window\n * @returns 模式列表\n */\n async getModes(cwd) {\n this.log(`getModes() called with cwd: ${cwd || '(empty)'}`);\n try {\n const response = await this.sharedAcpClient.sendBroadcastRequest('getModes', { cwd: cwd || '' });\n if (response === null || response === void 0 ? void 0 : response.modes) {\n this.log(`getModes() returned ${response.modes.length} modes`);\n return response.modes;\n }\n this.log('getModes() - no modes in response');\n return [];\n }\n catch (error) {\n this.log('getModes() failed:', error);\n return [];\n }\n }\n // ========================================================================\n // Workspace Operations (Provider-level capability)\n // ========================================================================\n /**\n * 打开工作区窗口\n * 这是 LocalAgentProvider 特有的能力,通过 shared ACP client 发送请求,\n * 使用 __workspace__ session ID,由 Main Process 直接处理,不转发到 ExtensionHost\n *\n * @param params 打开工作区请求参数\n * @returns 打开工作区响应\n */\n async openWorkspace(params) {\n this.log('Opening workspace:', params.cwd);\n return await this.sharedAcpClient.openWorkspace(params);\n }\n /**\n * 获取当前工作区列表\n * 这是 LocalAgentProvider 特有的能力,通过 shared ACP client 发送请求,\n * 使用 __workspace__ session ID,由 Main Process 直接处理\n *\n * @param filter 可选的过滤参数\n * @returns 工作区列表\n */\n async getCurrentWorkspaces(filter) {\n this.log('Getting current workspaces:', filter);\n const result = await this.sharedAcpClient.getCurrentWorkspaces({ filter });\n return result.workspaces;\n }\n // ========================================================================\n // 辅助方法\n // ========================================================================\n /**\n * 获取已有连接\n *\n * @param cwd - 工作区路径\n * @returns LocalAgentConnection 实例或 undefined\n */\n getConnection(cwd) {\n return this.connections.get(cwd);\n }\n /**\n * 检查是否存在连接\n *\n * @param cwd - 工作区路径\n * @returns 是否存在连接\n */\n hasConnection(cwd) {\n return this.connections.has(cwd);\n }\n /**\n * 断开所有连接\n */\n disconnectAll() {\n for (const connection of this.connections.values()) {\n connection.disconnect();\n }\n this.connections.clear();\n this.sessionCwdMap.clear();\n // 清理 filesystem 缓存\n for (const fs of this.filesystemCache.values()) {\n fs.destroy();\n }\n this.filesystemCache.clear();\n }\n // ========================================================================\n // FilesystemProvider 接口实现\n // ========================================================================\n /**\n * 获取 Filesystem 实例\n *\n * 对于 Local 模式,agentId 实际上是 sessionId\n * 通过已有的 MessagePort 通道将 filesystem 请求路由到 ExtensionHost\n *\n * @param agentId - Session ID(对于 Local 模式)\n * @returns FilesResource 实例\n */\n async getFilesystem(agentId) {\n this.log(`getFilesystem() called with: ${agentId}`);\n // 检查缓存\n const cached = this.filesystemCache.get(agentId);\n if (cached) {\n this.log(`Returning cached filesystem for: ${agentId}`);\n return cached;\n }\n // 创建新的 LocalFilesystem 实例\n const filesystem = new local_filesystem_js_1.LocalFilesystem(this.sharedAcpClient, agentId, { debug: this.options.debug });\n // 缓存实例\n this.filesystemCache.set(agentId, filesystem);\n this.log(`Created new filesystem for: ${agentId}`);\n return filesystem;\n }\n // ========================================================================\n // Event Methods (AgentProvider 接口)\n // ========================================================================\n /**\n * Register an event listener\n * Forwards to the underlying channel's event system\n *\n * @param event - Event name\n * @param handler - Event handler function\n */\n on(event, handler) {\n this.channel.on(event, handler);\n this.log(`Registered event listener: ${event}`);\n }\n /**\n * Unregister an event listener\n * Forwards to the underlying channel's event system\n *\n * @param event - Event name\n * @param handler - Event handler function to remove\n */\n off(event, handler) {\n this.channel.off(event, handler);\n this.log(`Unregistered event listener: ${event}`);\n }\n // ========================================================================\n // Logging helper\n // ========================================================================\n log(...args) {\n if (this.options.debug) {\n console.log('[LocalAgentProvider]', ...args);\n }\n }\n}\nexports.LocalAgentProvider = LocalAgentProvider;\nexports.default = LocalAgentProvider;\n//# sourceMappingURL=local-provider.js.map","\"use strict\";\n/**\n * Local Agent Provider exports\n *\n * Provides LocalAgentConnection and LocalAgentProvider for IPC communication\n * via IWidgetChannel. Includes backward-compatible aliases for IPCAgentConnection.\n */\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.FILESYSTEM_METHODS = exports.LocalFilesystem = exports.LocalAgentProvider = exports.IPCAgentConnection = exports.LocalAgentConnection = void 0;\n// Connection\nvar local_connection_js_1 = require(\"./local-connection.js\");\nObject.defineProperty(exports, \"LocalAgentConnection\", { enumerable: true, get: function () { return local_connection_js_1.LocalAgentConnection; } });\nObject.defineProperty(exports, \"IPCAgentConnection\", { enumerable: true, get: function () { return local_connection_js_1.IPCAgentConnection; } });\n// Provider\nvar local_provider_js_1 = require(\"./local-provider.js\");\nObject.defineProperty(exports, \"LocalAgentProvider\", { enumerable: true, get: function () { return local_provider_js_1.LocalAgentProvider; } });\n// Filesystem\nvar local_filesystem_js_1 = require(\"./local-filesystem.js\");\nObject.defineProperty(exports, \"LocalFilesystem\", { enumerable: true, get: function () { return local_filesystem_js_1.LocalFilesystem; } });\nObject.defineProperty(exports, \"FILESYSTEM_METHODS\", { enumerable: true, get: function () { return local_filesystem_js_1.FILESYSTEM_METHODS; } });\n// ACP module (JSON-RPC client and types)\n__exportStar(require(\"./acp/index.js\"), exports);\n//# sourceMappingURL=index.js.map","\"use strict\";\n/**\n * Agent Provider exports\n *\n * Types should be imported directly from '../types.js'\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.IPCAgentConnection = exports.LocalAgentProvider = exports.LocalAgentConnection = exports.E2BFilesystem = exports.CloudAgentProvider = exports.CloudAgentConnection = void 0;\n// Cloud agent provider\nvar index_js_1 = require(\"./cloud-agent-provider/index.js\");\nObject.defineProperty(exports, \"CloudAgentConnection\", { enumerable: true, get: function () { return index_js_1.CloudAgentConnection; } });\nObject.defineProperty(exports, \"CloudAgentProvider\", { enumerable: true, get: function () { return index_js_1.CloudAgentProvider; } });\nObject.defineProperty(exports, \"E2BFilesystem\", { enumerable: true, get: function () { return index_js_1.E2BFilesystem; } });\n// Local agent provider (includes IPC support via IWidgetChannel)\nvar index_js_2 = require(\"./local-agent-provider/index.js\");\nObject.defineProperty(exports, \"LocalAgentConnection\", { enumerable: true, get: function () { return index_js_2.LocalAgentConnection; } });\nObject.defineProperty(exports, \"LocalAgentProvider\", { enumerable: true, get: function () { return index_js_2.LocalAgentProvider; } });\nObject.defineProperty(exports, \"IPCAgentConnection\", { enumerable: true, get: function () { return index_js_2.IPCAgentConnection; } });\n//# sourceMappingURL=index.js.map","\"use strict\";\n/**\n * ActiveSessionImpl - Implements the ActiveSession interface\n *\n * Represents an active session with its resources and operations.\n * Session is the primary API surface for client interactions.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ActiveSessionImpl = void 0;\n/**\n * ActiveSessionImpl - Implements the ActiveSession interface\n *\n * This class wraps an AgentConnection and provides the session-centric API.\n * It is created by SessionManager when creating or loading sessions.\n *\n * @example\n * ```typescript\n * // Created by client.sessions.new() or client.sessions.load()\n * const session = await client.sessions.new({ cwd: '/workspace' });\n *\n * // Access agent state\n * console.log(session.agentState.status);\n *\n * // Send prompt\n * const response = await session.prompts.send({ content: 'Hello!' });\n *\n * // Cleanup\n * session.disconnect();\n * ```\n */\nclass ActiveSessionImpl {\n /**\n * Create an ActiveSessionImpl instance\n *\n * @param sessionId - Session ID\n * @param agentId - Agent ID\n * @param connection - Already connected AgentConnection\n * @param options - Additional options\n */\n constructor(sessionId, agentId, connection, options = {}) {\n this._availableCommands = [];\n // Event emitter storage\n this.listeners = new Map();\n this.onceListeners = new Map();\n this._id = sessionId;\n this._agentId = agentId;\n this.connection = connection;\n this.logger = options.logger;\n this._getFilesystem = options.getFilesystem;\n // Set up event forwarding from connection\n this.setupConnectionEvents(connection);\n // Initialize agent operations namespace\n this.agent = this.createAgentOperations();\n // Initialize resource namespaces\n this.prompts = this.createPromptsResource();\n this.artifacts = this.createArtifactsResource();\n this.files = this.createFilesResource();\n }\n // ============================================\n // Properties\n // ============================================\n /**\n * Session ID\n */\n get id() {\n return this._id;\n }\n /**\n * Agent ID\n */\n get agentId() {\n return this._agentId;\n }\n /**\n * Agent state (live connection state)\n * Returns LocalAgentState or CloudAgentState based on transport type\n */\n get agentState() {\n return {\n id: this._agentId,\n status: this.connection.state,\n capabilities: this.connection.capabilities,\n type: 'local',\n cwd: ''\n };\n }\n /**\n * Get agent capabilities (available after connection)\n */\n get capabilities() {\n return this.connection.capabilities;\n }\n /**\n * Available session modes\n */\n get availableModes() {\n return this._availableModes;\n }\n /**\n * Current session mode\n */\n get currentMode() {\n return this._currentMode;\n }\n /**\n * Available slash commands\n *\n * When Agent sends available_commands_update, this list is automatically updated.\n * Commands can be accessed directly without waiting for events.\n */\n get availableCommands() {\n return this._availableCommands;\n }\n /**\n * Check if the session is active\n */\n get isActive() {\n return this.connection.isInitialized;\n }\n /**\n * Set session modes (called after create/load)\n */\n setModes(availableModes, currentMode) {\n this._availableModes = availableModes;\n this._currentMode = currentMode;\n }\n // ============================================\n // Agent Operations Namespace\n // ============================================\n createAgentOperations() {\n const self = this;\n return {\n get id() {\n return self._agentId;\n },\n get state() {\n return self.agentState;\n },\n get isConnected() {\n return self.connection.isInitialized;\n },\n get capabilities() {\n return self.connection.capabilities;\n }\n };\n }\n // ============================================\n // Prompts Resource\n // ============================================\n createPromptsResource() {\n return {\n send: async (params) => {\n const connection = this.getConnectionOrThrow();\n const response = await connection.prompt(this._id, params);\n return this.mapPromptResponse(response);\n },\n stream: (params) => {\n const connection = this.getConnectionOrThrow();\n return connection.promptStream(this._id, params);\n },\n cancel: async () => {\n const connection = this.getConnectionOrThrow();\n await connection.cancel(this._id);\n }\n };\n }\n // ============================================\n // Artifacts Resource\n // ============================================\n createArtifactsResource() {\n // Artifact management has been simplified - these methods are no longer supported\n const notSupported = () => {\n throw new Error('Artifact management is no longer supported through this API');\n };\n return {\n list: async (_params) => {\n notSupported();\n return [];\n },\n retrieve: async (_artifactId) => {\n notSupported();\n return undefined;\n },\n content: async (_artifactId) => {\n notSupported();\n return '';\n }\n };\n }\n // ============================================\n // Files Resource\n // ============================================\n /**\n * Create files resource with lazy-loaded filesystem\n *\n * The filesystem is lazily loaded on first use to avoid unnecessary\n * connections to the sandbox. The actual filesystem instance is obtained\n * via the getter function provided by SessionManager.\n */\n createFilesResource() {\n const self = this;\n let filesPromise = null;\n /**\n * Get or create the filesystem instance\n */\n const getFs = async () => {\n if (!self._getFilesystem) {\n throw new Error('Filesystem not available: provider does not support filesystem operations');\n }\n if (!filesPromise) {\n filesPromise = self._getFilesystem();\n }\n return filesPromise;\n };\n return {\n // Read operations - 支持多种格式重载\n read: (async (path, opts) => (await getFs()).read(path, opts)),\n // Write operations - 支持单文件和批量写入重载\n write: (async (pathOrFiles, dataOrOpts, opts) => {\n const fs = await getFs();\n if (Array.isArray(pathOrFiles)) {\n // Batch write\n return fs.write(pathOrFiles, dataOrOpts);\n }\n // Single file write\n return fs.write(pathOrFiles, dataOrOpts, opts);\n }),\n // List with depth support\n list: async (path, opts) => (await getFs()).list(path, opts),\n exists: async (path, opts) => (await getFs()).exists(path, opts),\n makeDir: async (path, opts) => (await getFs()).makeDir(path, opts),\n remove: async (path, opts) => (await getFs()).remove(path, opts),\n rename: async (oldPath, newPath, opts) => (await getFs()).rename(oldPath, newPath, opts),\n // 新增 getInfo 方法\n getInfo: async (path, opts) => (await getFs()).getInfo(path, opts),\n // Watch operations - 支持扩展的 opts\n watchDir: async (path, onEvent, opts) => (await getFs()).watchDir(path, onEvent, opts)\n };\n }\n // ============================================\n // Permission Management\n // ============================================\n /**\n * Resolve a permission request\n */\n resolvePermission(requestId, optionId) {\n return this.connection.resolvePermission(requestId, optionId);\n }\n /**\n * Reject a permission request\n */\n rejectPermission(requestId, reason) {\n return this.connection.rejectPermission(requestId, reason);\n }\n // ============================================\n // Question Management (ask_followup_question)\n // ============================================\n /**\n * Answer a question request with user's selections\n */\n answerQuestion(toolCallId, answers) {\n return this.connection.answerQuestion(toolCallId, answers);\n }\n /**\n * Cancel a question request\n */\n cancelQuestion(toolCallId, reason) {\n return this.connection.cancelQuestion(toolCallId, reason);\n }\n // ============================================\n // Tool Callback Management\n // ============================================\n /**\n * Callback for tool operations (skip or cancel)\n * @param toolCallId Tool call ID\n * @param toolName Tool name\n * @param action Action to perform ('skip' or 'cancel')\n */\n async toolCallback(toolCallId, toolName, action) {\n const connection = this.getConnectionOrThrow();\n return await connection.toolCallback(this._id, toolCallId, toolName, action);\n }\n // ============================================\n // Session Mode Management\n // ============================================\n /**\n * Set the current session mode\n *\n * @param modeId - The mode ID to switch to (must be in availableModes)\n * @throws Error if modeId is not in availableModes or connection fails\n *\n * @example\n * ```typescript\n * // Switch to 'code' mode\n * await session.setMode('code');\n *\n * // Switch to 'architect' mode\n * await session.setMode('architect');\n * ```\n */\n async setMode(modeId) {\n // Validate modeId if availableModes is set\n if (this._availableModes) {\n const modeExists = this._availableModes.some(m => m.id === modeId);\n if (!modeExists) {\n const availableIds = this._availableModes.map(m => m.id).join(', ');\n throw new Error(`Invalid modeId: \"${modeId}\". Available modes: ${availableIds}`);\n }\n }\n const connection = this.getConnectionOrThrow();\n await connection.setSessionMode(this._id, modeId);\n // Update internal state\n this._currentMode = modeId;\n }\n /**\n * Set the current session model\n *\n * @param modelId - The model ID to switch to\n * @example\n * ```typescript\n * // Switch to Claude Sonnet 4\n * await session.setSessionModel('claude-sonnet-4-20250514');\n *\n * // Switch to GPT-4o\n * await session.setSessionModel('gpt-4o');\n * ```\n */\n async setSessionModel(modelId) {\n const connection = this.getConnectionOrThrow();\n await connection.setSessionModel(this._id, modelId);\n }\n // ============================================\n // Event Subscription\n // ============================================\n /**\n * Subscribe to session events\n */\n on(event, handler) {\n if (!this.listeners.has(event)) {\n this.listeners.set(event, new Set());\n }\n this.listeners.get(event).add(handler);\n return this;\n }\n /**\n * Unsubscribe from session events\n */\n off(event, handler) {\n const eventListeners = this.listeners.get(event);\n if (eventListeners) {\n eventListeners.delete(handler);\n }\n const onceEventListeners = this.onceListeners.get(event);\n if (onceEventListeners) {\n onceEventListeners.delete(handler);\n }\n return this;\n }\n /**\n * Subscribe to a session event once\n */\n once(event, handler) {\n if (!this.onceListeners.has(event)) {\n this.onceListeners.set(event, new Set());\n }\n this.onceListeners.get(event).add(handler);\n return this;\n }\n /**\n * Emit an event to all registered listeners\n */\n emit(event, data) {\n const regularListeners = this.listeners.get(event);\n const onceEventListeners = this.onceListeners.get(event);\n let hasListeners = false;\n // Call regular listeners\n if (regularListeners && regularListeners.size > 0) {\n hasListeners = true;\n for (const listener of regularListeners) {\n try {\n const result = listener(data);\n if (result instanceof Promise) {\n result.catch((err) => {\n console.error(`Error in async event listener for '${String(event)}':`, err);\n });\n }\n }\n catch (err) {\n console.error(`Error in event listener for '${String(event)}':`, err);\n }\n }\n }\n // Call once listeners and remove them\n if (onceEventListeners && onceEventListeners.size > 0) {\n hasListeners = true;\n const listenersToCall = Array.from(onceEventListeners);\n this.onceListeners.delete(event);\n for (const listener of listenersToCall) {\n try {\n const result = listener(data);\n if (result instanceof Promise) {\n result.catch((err) => {\n console.error(`Error in async once event listener for '${String(event)}':`, err);\n });\n }\n }\n catch (err) {\n console.error(`Error in once event listener for '${String(event)}':`, err);\n }\n }\n }\n return hasListeners;\n }\n /**\n * Remove all listeners for an event\n */\n removeAllListeners(event) {\n if (event !== undefined) {\n this.listeners.delete(event);\n this.onceListeners.delete(event);\n }\n else {\n this.listeners.clear();\n this.onceListeners.clear();\n }\n }\n // ============================================\n // Lifecycle\n // ============================================\n /**\n * Disconnect from the session/agent\n */\n disconnect() {\n var _a;\n this.connection.disconnect();\n this.removeAllListeners();\n (_a = this.logger) === null || _a === void 0 ? void 0 : _a.info(`Session ${this._id}: Disconnected`);\n }\n /**\n * Symbol.dispose for 'using' keyword support\n * Automatically disconnects and cleans up when session goes out of scope\n *\n * @example\n * ```typescript\n * {\n * using session = await client.sessions.new({ cwd: '/workspace' });\n * // ... use session\n * } // session automatically disposed\n * ```\n */\n [Symbol.dispose]() {\n this.disconnect();\n }\n // ============================================\n // Helpers\n // ============================================\n getConnectionOrThrow() {\n if (!this.connection.isInitialized) {\n throw new Error(`Session ${this._id}: Connection not initialized.`);\n }\n return this.connection;\n }\n setupConnectionEvents(connection) {\n // Connection lifecycle events\n connection.on('connected', () => {\n this.emit('connected', undefined);\n });\n connection.on('disconnected', () => {\n this.emit('disconnected', undefined);\n });\n connection.on('error', (error) => {\n this.emit('error', error);\n });\n // Session updates\n connection.on('sessionUpdate', (update) => {\n this.emit('sessionUpdate', update);\n });\n // Artifact events\n connection.on('artifactCreated', (artifact) => {\n console.log('[Session] Forwarding artifactCreated:', {\n artifactId: artifact.id,\n artifactType: artifact.type,\n metaKeys: artifact._meta ? Object.keys(artifact._meta) : [],\n });\n this.emit('artifactCreated', artifact);\n });\n connection.on('artifactUpdated', (artifact) => {\n console.log('[Session] Forwarding artifactUpdated:', {\n artifactId: artifact.id,\n artifactType: artifact.type,\n metaKeys: artifact._meta ? Object.keys(artifact._meta) : [],\n });\n this.emit('artifactUpdated', artifact);\n });\n connection.on('artifactDeleted', (artifact) => {\n console.log('[Session] Forwarding artifactDeleted:', { artifactId: artifact.id });\n this.emit('artifactDeleted', artifact);\n });\n // Permission requests\n connection.on('permissionRequest', (request) => {\n this.emit('permissionRequest', request);\n });\n // Question requests\n connection.on('questionRequest', (request) => {\n this.emit('questionRequest', request);\n });\n // Usage updates\n connection.on('usageUpdate', (usage) => {\n this.emit('usageUpdate', usage);\n });\n // Checkpoint events\n connection.on('checkpointCreated', (checkpoint) => {\n this.emit('checkpointCreated', checkpoint);\n });\n connection.on('checkpointUpdated', (checkpoint) => {\n this.emit('checkpointUpdated', checkpoint);\n });\n }\n mapPromptResponse(response) {\n var _a;\n return {\n stopReason: response.stopReason,\n _meta: (_a = response._meta) !== null && _a !== void 0 ? _a : undefined\n };\n }\n}\nexports.ActiveSessionImpl = ActiveSessionImpl;\n//# sourceMappingURL=session.js.map","\"use strict\";\n/**\n * SessionManager - Manages session lifecycle and connections\n *\n * Provides the core implementation for session-centric API operations:\n * - list() - Lists sessions (mapped from agents)\n * - createSession() - Creates new session (auto-creates agent)\n * - loadSession() - Loads existing session (finds agent by sessionId)\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SessionManager = void 0;\nconst session_js_1 = require(\"./session.js\");\n/**\n * SessionManager - Session lifecycle management\n *\n * This class manages the relationship between sessions and agents.\n * Since the backend is agent-centric, SessionManager handles the mapping:\n * - Sessions are views over agents\n * - sessionId may equal agentId in simple cases\n *\n * Features:\n * - Session caching: reuses existing ActiveSession instances\n * - Automatic cleanup on session disconnect\n *\n * @example\n * ```typescript\n * const manager = new SessionManager({ provider, logger });\n *\n * // List sessions\n * const sessions = await manager.listSessions();\n *\n * // Create new session\n * const session = await manager.createSession({ cwd: '/workspace' });\n *\n * // Load existing session (returns cached instance if available)\n * const loaded = await manager.loadSession({ sessionId: 'xxx', cwd: '/workspace' });\n * ```\n */\nclass SessionManager {\n constructor(options) {\n this.provider = options.provider;\n this.logger = options.logger;\n }\n /**\n * List all sessions with pagination info (mapped from agents)\n *\n * Each agent maps to a session. The sessionId is derived from the agent.\n * Cloud: Returns server-side filtered/sorted/paginated results\n * Local: Returns client-side filtered/sorted results (synthetic pagination)\n *\n * @param options - Optional query parameters for filtering, sorting, and pagination\n */\n async listSessions(options) {\n console.log('[SessionManager] listSessions called with options:', JSON.stringify(options, null, 2));\n const result = await this.provider.list(options);\n console.log('[SessionManager] provider.list returned:', {\n agentsCount: result.agents.length,\n pagination: result.pagination\n });\n const sessions = result.agents.map(agent => ({\n // Use agentId as sessionId (since sessions are 1:1 with agents in current design)\n id: agent.id,\n agentId: agent.id,\n name: agent.name,\n status: agent.status,\n createdAt: agent.createdAt,\n lastActivityAt: agent.updatedAt,\n // cwd is only available for local agents\n cwd: agent.type === 'local' ? agent.cwd : undefined\n }));\n console.log('[SessionManager] Returning sessions:', { count: sessions.length, pagination: result.pagination });\n return {\n agents: sessions,\n pagination: result.pagination\n };\n }\n /**\n * Create a new session\n *\n * Steps:\n * 1. Create new agent (if provider supports it) or use existing\n * 2. Connect to agent\n * 3. Call ACP newSession\n * 4. Register session mapping (for LocalAgentProvider)\n * 5. Return ActiveSession instance\n */\n async createSession(params) {\n var _a, _b, _c, _d, _e, _f, _g;\n (_a = this.logger) === null || _a === void 0 ? void 0 : _a.info('Creating new session');\n // Step 1: Create new agent if provider supports it\n let agentId;\n if (this.provider.create) {\n // Pass params to create() - LocalAgentProvider uses cwd as agentId\n agentId = await this.provider.create(params);\n (_b = this.logger) === null || _b === void 0 ? void 0 : _b.debug(`Created new agent: ${agentId}`);\n }\n else {\n // If provider doesn't support create, we need to throw\n // The provider must support creating agents for sessions.new()\n throw new Error('Provider does not support creating agents. Use sessions.load() with an existing sessionId.');\n }\n // Step 2: Connect to agent\n const connection = await this.provider.connect(agentId);\n (_c = this.logger) === null || _c === void 0 ? void 0 : _c.debug(`Connected to agent: ${agentId}`);\n // Step 3: Create session via ACP\n const response = await connection.createSession({\n cwd: params.cwd,\n mcpServers: params.mcpServers\n });\n // Step 4: Register session mapping (for LocalAgentProvider to support loadSession)\n if (this.provider.registerSession) {\n this.provider.registerSession(response.sessionId, agentId);\n (_d = this.logger) === null || _d === void 0 ? void 0 : _d.debug(`Registered session mapping: ${response.sessionId} → ${agentId}`);\n }\n // Step 5: Create and return ActiveSession\n const session = new session_js_1.ActiveSessionImpl(response.sessionId, agentId, connection, {\n logger: this.logger,\n // Bind sessionId (not agentId) to create a getter function for filesystem\n // Note: conversation-channel-router binds sessionId to windowId,\n // so we must use sessionId for filesystem routing\n getFilesystem: this.provider.filesystem\n ? () => this.provider.filesystem.getFilesystem(response.sessionId)\n : undefined\n });\n // Set modes from response\n session.setModes((_e = response.modes) === null || _e === void 0 ? void 0 : _e.availableModes, (_f = response.modes) === null || _f === void 0 ? void 0 : _f.currentModeId);\n (_g = this.logger) === null || _g === void 0 ? void 0 : _g.info(`Session created: ${response.sessionId}`);\n return session;\n }\n /**\n * Load an existing session\n *\n * Steps:\n * 1. Check cache for existing session\n * 2. Find agent by sessionId (sessionId === agentId in current design)\n * 3. Connect to agent\n * 4. Call ACP loadSession\n * 5. Return ActiveSession instance (cached)\n */\n async loadSession(params) {\n var _a, _b, _c, _d, _e;\n (_a = this.logger) === null || _a === void 0 ? void 0 : _a.info(`Loading session: ${params.sessionId}`);\n // Step 2: Find agent by sessionId\n // In current design, sessionId === agentId\n const agentId = params.sessionId;\n // Verify agent exists\n const agentState = await this.provider.get(agentId);\n if (!agentState) {\n throw new Error(`Session not found: ${params.sessionId}`);\n }\n // Step 3: Connect to agent\n const connection = await this.provider.connect(agentId);\n (_b = this.logger) === null || _b === void 0 ? void 0 : _b.debug(`Connected to agent: ${agentId}`);\n // Step 4: Load session via ACP\n const response = await connection.loadSession({\n sessionId: params.sessionId,\n cwd: agentState.type === 'local' ? agentState.cwd : params.cwd,\n mcpServers: params.mcpServers\n });\n // Step 5: Create and return ActiveSession\n const session = new session_js_1.ActiveSessionImpl(params.sessionId, agentId, connection, {\n logger: this.logger,\n // Bind sessionId (not agentId) to create a getter function for filesystem\n // Note: conversation-channel-router binds sessionId to windowId,\n // so we must use sessionId for filesystem routing\n getFilesystem: this.provider.filesystem\n ? () => this.provider.filesystem.getFilesystem(params.sessionId)\n : undefined\n });\n // Set modes from response\n session.setModes((_c = response.modes) === null || _c === void 0 ? void 0 : _c.availableModes, (_d = response.modes) === null || _d === void 0 ? void 0 : _d.currentModeId);\n (_e = this.logger) === null || _e === void 0 ? void 0 : _e.info(`Session loaded: ${params.sessionId}`);\n return session;\n }\n}\nexports.SessionManager = SessionManager;\n//# sourceMappingURL=session-manager.js.map","\"use strict\";\n/**\n * AgentClient - Session-centric API\n *\n * Provides a unified entry point for managing sessions.\n * Sessions are the primary API surface; agents are internal implementation.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AgentClient = void 0;\nconst session_manager_js_1 = require(\"./session-manager.js\");\n// ============================================\n// AgentClient - Session-Centric API\n// ============================================\n/**\n * AgentClient - Session-centric client\n *\n * Provides a session-centric API that internally manages agents.\n * Users interact with sessions; the agent lifecycle is handled internally.\n *\n * @example\n * ```typescript\n * // Create client with a provider\n * const provider = new CloudAgentProvider({\n * endpoint: 'https://api.example.com',\n * authToken: 'token'\n * });\n *\n * const client = new AgentClient({\n * provider,\n * logger: console\n * });\n *\n * // List all sessions\n * const sessions = await client.sessions.list();\n *\n * // Create new session (auto-creates agent and connects)\n * const session = await client.sessions.create({ cwd: '/workspace' });\n * console.log(session.agentState.status); // agent status\n * console.log(session.agentState.id); // agent ID\n *\n * // Send prompt\n * await session.prompts.send({ content: 'Hello' });\n *\n * // Get available models\n * const models = await client.sessions.models.list('my-repo');\n *\n * // Use 'using' keyword for automatic cleanup\n * {\n * using session = await client.sessions.create({ cwd: '/workspace' });\n * // ... use session\n * } // session automatically disposed\n *\n * // Or manually disconnect\n * session.disconnect();\n *\n * // Load existing session\n * const loadedSession = await client.sessions.load({\n * sessionId: 'xxx',\n * cwd: '/workspace'\n * });\n * ```\n */\nclass AgentClient {\n constructor(options) {\n var _a;\n this.logger = options.logger;\n this.provider = options.provider;\n this.environmentType = (_a = options.environmentType) !== null && _a !== void 0 ? _a : 'cloud';\n // Initialize session manager\n this.sessionManager = new session_manager_js_1.SessionManager({\n provider: this.provider,\n logger: this.logger\n });\n // Initialize sessions resource\n this.sessions = this.createSessionsResource();\n }\n // ============================================\n // Sessions Resource\n // ============================================\n createSessionsResource() {\n return {\n list: async (options) => {\n return this.sessionManager.listSessions(options);\n },\n create: async (params) => {\n return this.sessionManager.createSession(params);\n },\n load: async (params) => {\n console.log('[AgentClient] sessions.load called:', params.sessionId);\n return this.sessionManager.loadSession(params);\n },\n archive: async (sessionId) => {\n var _a, _b, _c;\n (_a = this.logger) === null || _a === void 0 ? void 0 : _a.debug('AgentClient.sessions.archive called', { sessionId });\n try {\n // Check if provider supports archive\n if (this.provider.archive) {\n const result = await this.provider.archive(sessionId);\n (_b = this.logger) === null || _b === void 0 ? void 0 : _b.info('Session archived successfully', { sessionId });\n return result;\n }\n // If provider does not support archive, throw error\n throw new Error('Provider does not support archive method');\n }\n catch (error) {\n (_c = this.logger) === null || _c === void 0 ? void 0 : _c.error('Failed to archive session', error);\n throw error;\n }\n },\n // Initialize workspace for future sessions\n initializeWorkspace: async (params) => {\n var _a, _b, _c, _d;\n (_a = this.logger) === null || _a === void 0 ? void 0 : _a.debug('AgentClient.sessions.initializeWorkspace called', params);\n try {\n // openWorkspace 是 LocalAgentProvider 特有的能力\n if (this.provider.openWorkspace) {\n const result = await this.provider.openWorkspace(params);\n (_b = this.logger) === null || _b === void 0 ? void 0 : _b.info('Workspace opened successfully', { cwd: params.cwd });\n return result;\n }\n // 如果 provider 不支持 openWorkspace,返回成功(向后兼容)\n (_c = this.logger) === null || _c === void 0 ? void 0 : _c.warn('Provider does not support openWorkspace');\n return { success: true };\n }\n catch (error) {\n (_d = this.logger) === null || _d === void 0 ? void 0 : _d.error('Failed to initialize workspace', error);\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error'\n };\n }\n },\n // Get current workspaces list\n getCurrentWorkspaces: async (filter) => {\n var _a, _b, _c, _d;\n (_a = this.logger) === null || _a === void 0 ? void 0 : _a.debug('AgentClient.sessions.getCurrentWorkspaces called', filter);\n try {\n // getCurrentWorkspaces 是 LocalAgentProvider 特有的能力\n if ('getCurrentWorkspaces' in this.provider && typeof this.provider.getCurrentWorkspaces === 'function') {\n const result = await this.provider.getCurrentWorkspaces(filter);\n (_b = this.logger) === null || _b === void 0 ? void 0 : _b.info('Current workspaces retrieved', { count: result.length });\n return result;\n }\n // 如果 provider 不支持 getCurrentWorkspaces,返回空数组(向后兼容)\n (_c = this.logger) === null || _c === void 0 ? void 0 : _c.warn('Provider does not support getCurrentWorkspaces');\n return [];\n }\n catch (error) {\n (_d = this.logger) === null || _d === void 0 ? void 0 : _d.error('Failed to get current workspaces', error);\n return [];\n }\n },\n // Event methods - forward to provider if supported\n on: (event, handler) => {\n var _a;\n if (this.provider.on) {\n this.provider.on(event, handler);\n }\n else {\n (_a = this.logger) === null || _a === void 0 ? void 0 : _a.warn(`Provider does not support event registration: ${String(event)}`);\n }\n },\n off: (event, handler) => {\n var _a;\n if (this.provider.off) {\n this.provider.off(event, handler);\n }\n else {\n (_a = this.logger) === null || _a === void 0 ? void 0 : _a.warn(`Provider does not support event unregistration: ${String(event)}`);\n }\n },\n openWorkspace: async (params) => {\n var _a, _b;\n try {\n if (this.provider && this.provider.openWorkspace) {\n const result = await this.provider.openWorkspace(params);\n (_a = this.logger) === null || _a === void 0 ? void 0 : _a.info('Workspace opened successfully', { cwd: params.cwd });\n return result;\n }\n return { success: false, error: 'Provider does not support openWorkspace' };\n }\n catch (error) {\n (_b = this.logger) === null || _b === void 0 ? void 0 : _b.error('Failed to open workspace', error);\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error'\n };\n }\n },\n // Models resource - delegates to provider's getModels method\n models: this.createModelsResource(),\n };\n }\n createModelsResource() {\n return {\n list: async (repo) => {\n // Check if provider supports getModels\n if (this.provider.getModels) {\n return this.provider.getModels(repo);\n }\n throw new Error('Provider does not support getModels method');\n }\n };\n }\n // ============================================\n // Lifecycle\n // ============================================\n /**\n * Dispose the client\n *\n * Note: Active sessions are not automatically disposed.\n * The caller is responsible for disconnecting sessions they created.\n */\n dispose() {\n var _a;\n (_a = this.logger) === null || _a === void 0 ? void 0 : _a.info('AgentClient disposed');\n }\n}\nexports.AgentClient = AgentClient;\nexports.default = AgentClient;\n//# sourceMappingURL=client.js.map","\"use strict\";\n/**\n * MockAgentClient - 用于测试的 Mock 实现\n *\n * @example 基础用法 (Session-Centric API)\n * ```typescript\n * const client = new MockAgentClient();\n *\n * // 创建新会话\n * const session = await client.sessions.create({ cwd: '/workspace' });\n *\n * // 发送消息\n * for await (const update of session.prompts.stream({ content: 'Hello' })) {\n * console.log(update);\n * }\n *\n * // 断开连接\n * session.disconnect();\n * ```\n *\n * @example 加载现有会话\n * ```typescript\n * const client = new MockAgentClient();\n *\n * // 列出会话\n * const sessions = await client.sessions.list();\n *\n * // 加载会话\n * const session = await client.sessions.load({\n * sessionId: sessions[0].id,\n * cwd: '/workspace'\n * });\n * ```\n *\n * @example 自定义响应\n * ```typescript\n * const client = new MockAgentClient({\n * responseGenerator: MockHelpers.textResponse('Hello World!')\n * });\n * ```\n *\n * @example 自定义 Tool Call 响应\n * ```typescript\n * const client = new MockAgentClient({\n * responseGenerator: MockHelpers.toolCallResponse('read_file', '/path/to/file', 'file content')\n * });\n * ```\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MockAgentClient = exports.MockAgentConnection = exports.MockHelpers = void 0;\nconst e2b_1 = require(\"e2b\");\nconst client_js_1 = require(\"../client/client.js\");\nconst MockAgentProvider_js_1 = require(\"./MockAgentProvider.js\");\n// ============================================\n// MockHelpers - 便捷的 Mock 数据构造器\n// ============================================\nexports.MockHelpers = {\n /** 创建文本消息 */\n text(sessionId, text, messageId) {\n return {\n sessionId,\n _meta: messageId ? { 'codebuddy.ai': { messageId } } : undefined,\n update: { sessionUpdate: 'agent_message_chunk', content: { type: 'text', text } }\n };\n },\n /** 创建 Tool Call (pending) */\n toolCall(sessionId, toolCallId, title, toolName) {\n return {\n sessionId,\n _meta: toolName ? { 'codebuddy.ai': { toolName } } : undefined,\n update: { sessionUpdate: 'tool_call', toolCallId, title, status: 'pending' }\n };\n },\n /** 创建 Tool Call 更新 */\n toolCallUpdate(sessionId, toolCallId, status, content) {\n return {\n sessionId,\n update: {\n sessionUpdate: 'tool_call_update',\n toolCallId,\n status,\n content: [{ type: 'content', content: { type: 'text', text: content } }]\n }\n };\n },\n /** 创建简单文本响应生成器 */\n textResponse(text, chunkSize = 20) {\n return async function* (sessionId) {\n for (let i = 0; i < text.length; i += chunkSize) {\n yield exports.MockHelpers.text(sessionId, text.substring(i, i + chunkSize));\n await delay(30);\n }\n };\n },\n /** 创建 Tool Call 响应生成器 */\n toolCallResponse(toolName, title, result) {\n return async function* (sessionId) {\n const toolCallId = `tool-${Date.now()}`;\n yield exports.MockHelpers.toolCall(sessionId, toolCallId, title, toolName);\n await delay(50);\n yield exports.MockHelpers.toolCallUpdate(sessionId, toolCallId, 'completed', result);\n };\n },\n /** 创建多步骤响应生成器 */\n sequence(...generators) {\n return async function* (sessionId, params) {\n for (const gen of generators) {\n yield* gen(sessionId, params);\n }\n };\n },\n /** 创建 Checkpoint 信息 */\n checkpoint(files, additions = 10, deletions = 5) {\n return {\n id: `checkpoint-${Date.now()}`,\n createdAt: Date.now(),\n fileChanges: {\n files: files.map(uri => ({\n uri,\n changeType: 'modified',\n additions: Math.floor(additions / files.length),\n deletions: Math.floor(deletions / files.length)\n })),\n totalAdditions: additions,\n totalDeletions: deletions\n }\n };\n }\n};\nconst delay = (ms) => new Promise(resolve => setTimeout(resolve, ms));\n// ============================================\n// MockAgentConnection\n// ============================================\nclass MockAgentConnection {\n constructor(agentId, capabilities = {}, responseGenerator, _responseDelay = 0) {\n this.transport = 'cloud';\n this._state = 'disconnected';\n this._isInitialized = false;\n this.listeners = new Map();\n this.artifactStorage = new Map();\n this.pendingPermissions = new Map();\n this.permissionResults = new Map(); // 存储权限请求的结果\n // Question (stubs)\n this.pendingQuestions = new Map();\n this.agentId = agentId;\n this._capabilities = capabilities;\n this.responseGenerator = responseGenerator;\n }\n get state() { return this._state; }\n get isInitialized() { return this._isInitialized; }\n get capabilities() { return this._isInitialized ? this._capabilities : undefined; }\n get initializeResult() { return this._initializeResult; }\n // Connection Event Emitter (implements ConnectionEvents)\n on(event, listener) {\n if (!this.listeners.has(event))\n this.listeners.set(event, new Set());\n this.listeners.get(event).add(listener);\n return this;\n }\n off(event, listener) {\n var _a;\n (_a = this.listeners.get(event)) === null || _a === void 0 ? void 0 : _a.delete(listener);\n return this;\n }\n once(event, listener) {\n const wrapper = (data) => { this.off(event, wrapper); listener(data); };\n return this.on(event, wrapper);\n }\n emit(event, data) {\n const ls = this.listeners.get(event);\n if (!(ls === null || ls === void 0 ? void 0 : ls.size))\n return false;\n ls.forEach(l => { try {\n l(data);\n }\n catch (e) {\n console.error(e);\n } });\n return true;\n }\n removeAllListeners(event) {\n event ? this.listeners.delete(event) : this.listeners.clear();\n return this;\n }\n // Connection Lifecycle\n async connect() {\n if (this._isInitialized)\n return this._initializeResult;\n this._state = 'connecting';\n await delay(50);\n this._state = 'initialized';\n this._isInitialized = true;\n this._initializeResult = {\n protocolVersion: 1,\n agentInfo: { name: 'Mock Agent', version: '1.0.0' },\n agentCapabilities: this._capabilities\n };\n this.emit('connected', undefined);\n return this._initializeResult;\n }\n disconnect() {\n if (this._isInitialized) {\n this._isInitialized = false;\n this._state = 'disconnected';\n this.emit('disconnected', undefined);\n }\n }\n // Session\n async createSession(_params) {\n return { sessionId: `mock-session-${Date.now()}`, modes: { availableModes: [{ id: 'chat', name: 'Chat' }], currentModeId: 'chat' } };\n }\n async loadSession(params) {\n if (!params.sessionId)\n throw new Error('sessionId is required');\n return { modes: { availableModes: [{ id: 'chat', name: 'Chat' }], currentModeId: 'chat' } };\n }\n async setSessionMode(_sessionId, _modeId) {\n return {};\n }\n async setSessionModel(_sessionId, _modelId) {\n return {};\n }\n // Prompt\n async prompt(sessionId, params) {\n for await (const _ of this.promptStream(sessionId, params)) { /* consume */ }\n return { stopReason: 'end_turn', _meta: undefined };\n }\n async *promptStream(sessionId, params) {\n var _a;\n const generator = (_a = this.responseGenerator) !== null && _a !== void 0 ? _a : exports.MockHelpers.textResponse('This is a mock response.');\n for await (const notification of this.generateMockMessages(sessionId, params)) {\n this.emit('sessionUpdate', notification);\n yield notification;\n }\n for await (const notification of generator(sessionId, params)) {\n this.emit('sessionUpdate', notification);\n yield notification;\n }\n }\n setResponseGenerator(generator) {\n this.responseGenerator = generator;\n }\n async cancel(_sessionId) { }\n // Artifacts (stubs)\n getArtifacts() { return new Map(this.artifactStorage); }\n getArtifact(id) { return this.artifactStorage.get(id); }\n getArtifactsByType(type) { return [...this.artifactStorage.values()].filter(a => a.type === type); }\n async fetchArtifactContent(_artifact) { return 'Mock content'; }\n async fetchArtifactContentById(id) { if (!this.artifactStorage.has(id))\n throw new Error('Not found'); return 'Mock content'; }\n // Permissions (stubs)\n resolvePermission(requestId, optionId) {\n const existed = this.pendingPermissions.delete(requestId);\n if (existed) {\n // 检查是否是 approve 选项\n if (optionId === 'approve') {\n this.permissionResults.set(requestId, 'approved');\n }\n else {\n this.permissionResults.set(requestId, 'rejected');\n }\n }\n return existed;\n }\n rejectPermission(requestId, _reason) {\n const existed = this.pendingPermissions.delete(requestId);\n if (existed) {\n this.permissionResults.set(requestId, 'rejected');\n }\n return existed;\n }\n getPendingPermissions() { return new Map(this.pendingPermissions); }\n hasPendingPermissions() { return this.pendingPermissions.size > 0; }\n answerQuestion(toolCallId, _answers) { return this.pendingQuestions.delete(toolCallId); }\n cancelQuestion(toolCallId, _reason) { return this.pendingQuestions.delete(toolCallId); }\n getPendingQuestions() { return new Map(this.pendingQuestions); }\n hasPendingQuestions() { return this.pendingQuestions.size > 0; }\n // Tool Callback (stubs)\n async toolCallback(_sessionId, _toolCallId, _toolName, _action) {\n return { success: true };\n }\n // Extensions (stubs)\n async extMethod(_method, _params) { return { success: true }; }\n async extNotification(_method, _params) { }\n async artifactNotification(_params) { }\n // Filesystem (stubs)\n async readFile(path) { return `Mock content for: ${path}`; }\n async listDir(path) { return [{ name: 'file.ts', path: `${path}/file.ts`, type: e2b_1.FileType.FILE, size: 0, mode: 0o644, permissions: 'rw-r--r--', owner: 'user', group: 'user' }]; }\n async fileExists(_path) { return true; }\n async fileStat(path) { var _a; return { name: (_a = path.split('/').pop()) !== null && _a !== void 0 ? _a : 'file', type: e2b_1.FileType.FILE, path, size: 1024, mode: 0o644, permissions: 'rw-r--r--', owner: 'user', group: 'user' }; }\n // Checkpoint helpers (for testing)\n emitCheckpointCreated(checkpoint) {\n this.emit('checkpointCreated', checkpoint);\n }\n emitCheckpointUpdated(checkpoint) {\n this.emit('checkpointUpdated', checkpoint);\n }\n // ============================================\n // Mock Message Generation (Public Test Helpers)\n // ============================================\n delay(ms) {\n return new Promise(resolve => setTimeout(resolve, ms));\n }\n emitNotification(notification) {\n this.emit('sessionUpdate', notification);\n }\n /**\n * Generate mock messages for testing\n * Useful for testing UI components with streaming responses\n */\n async *generateMockMessages(sessionId, params) {\n // Extract content (currently unused, kept for future use)\n const _content = typeof params.content === 'string'\n ? params.content\n : params.content.map((block) => {\n if (block.type === 'text')\n return block.text;\n return `[${block.type}]`;\n }).join('\\n');\n // 1. Send text reply\n const textReply = `我收到了你发送的「${_content}」信息,这是符合 ACP 协议的 mock 数据。\\n\\n下面演示不同类型的 ContentBlock:\\n\\n`;\n yield* this._streamMockTextContent(sessionId, textReply);\n await this.delay(500);\n // 2. Send embedded resource\n yield* this._sendMockEmbeddedResource(sessionId);\n await this.delay(500);\n // 3. Send resource link\n yield* this._sendMockResourceLink(sessionId);\n await this.delay(500);\n // 4. Send tool call flows\n yield* this._sendMockEditContentToolCallFlow(sessionId);\n await this.delay(500);\n yield* this.sendMockEditDiffToolCallFlow(sessionId);\n await this.delay(500);\n yield* this.sendMockReadContentToolCallFlow(sessionId);\n await this.delay(500);\n // 5. Send search tool call flows\n yield* this.sendMockSearchContentToolCallFlow(sessionId);\n await this.delay(500);\n yield* this.sendMockSearchFileToolCallFlow(sessionId);\n await this.delay(500);\n yield* this.sendMockWebSearchToolCallFlow(sessionId);\n await this.delay(500);\n // 6. Send todo_write tool call flow\n yield* this.sendMockTodoWriteToolCallFlow(sessionId);\n // 7. Send plan_create tool call flow\n yield* this.sendMockPlanCreateToolCallFlow(sessionId);\n await this.delay(500);\n // 8. Send plan_update tool call flow\n yield* this.sendMockPlanUpdateToolCallFlow(sessionId);\n }\n async *_streamMockTextContent(sessionId, content) {\n const messageId = `m-${Date.now()}`;\n const chunkSize = 10;\n let accumulatedInput = '';\n for (let i = 0; i < content.length; i += chunkSize) {\n const chunk = content.substring(i, i + chunkSize);\n accumulatedInput += chunk;\n const notification = {\n sessionId,\n _meta: {\n 'codebuddy.ai': {\n messageId: messageId\n }\n },\n update: {\n sessionUpdate: 'agent_message_chunk',\n content: {\n type: 'text',\n text: accumulatedInput,\n }\n }\n };\n this.emitNotification(notification);\n yield notification;\n await this.delay(50);\n }\n }\n async *_sendMockEmbeddedResource(sessionId) {\n const messageId = `m-${Date.now()}`;\n // Send intro text\n const introNotification = {\n sessionId,\n _meta: {\n 'codebuddy.ai': {\n messageId: messageId\n }\n },\n update: {\n sessionUpdate: 'agent_message_chunk',\n content: {\n type: 'text',\n text: '这是一个嵌入的 Python 文件示例:\\n\\n',\n }\n }\n };\n this.emitNotification(introNotification);\n yield introNotification;\n await this.delay(200);\n const messageId2 = `m-${Date.now()}`;\n // Send embedded resource\n const resourceNotification = {\n sessionId,\n _meta: {\n 'codebuddy.ai': {\n messageId: messageId2\n }\n },\n update: {\n sessionUpdate: 'agent_message_chunk',\n content: {\n type: 'resource',\n resource: {\n uri: 'file:///mock/example.py',\n mimeType: 'text/x-python',\n text: 'def hello_world():\\n print(\"Hello, World!\")\\n return \"success\"\\n\\nif __name__ == \"__main__\":\\n hello_world()'\n }\n }\n }\n };\n this.emitNotification(resourceNotification);\n yield resourceNotification;\n await this.delay(200);\n const messageId3 = `m-${Date.now()}`;\n // Send closing text\n const closingNotification = {\n sessionId,\n _meta: {\n 'codebuddy.ai': {\n messageId: messageId3\n }\n },\n update: {\n sessionUpdate: 'agent_message_chunk',\n content: {\n type: 'text',\n text: '\\n\\n以上是直接嵌入的文件内容,无需额外请求即可显示。',\n }\n }\n };\n this.emitNotification(closingNotification);\n yield closingNotification;\n await this.delay(100);\n }\n async *_sendMockResourceLink(sessionId) {\n const messageId = `m-${Date.now()}`;\n const introNotification = {\n sessionId,\n _meta: {\n 'codebuddy.ai': {\n messageId: messageId\n }\n },\n update: {\n sessionUpdate: 'agent_message_chunk',\n content: {\n type: 'text',\n text: '这是一个指向外部文档的资源链接:\\n\\n',\n }\n }\n };\n this.emitNotification(introNotification);\n yield introNotification;\n await this.delay(200);\n const messageId2 = `m-${Date.now()}`;\n const linkNotification = {\n sessionId,\n _meta: {\n 'codebuddy.ai': {\n messageId: messageId2\n }\n },\n update: {\n sessionUpdate: 'agent_message_chunk',\n content: {\n type: 'resource_link',\n uri: 'https://agentclientprotocol.com/protocol/content',\n name: 'ACP Content Protocol',\n mimeType: 'text/html',\n description: 'Agent Client Protocol - Content specification',\n size: BigInt(256000)\n }\n }\n };\n this.emitNotification(linkNotification);\n yield linkNotification;\n await this.delay(200);\n const messageId3 = `m-${Date.now()}`;\n const closingNotification = {\n sessionId,\n _meta: {\n 'codebuddy.ai': {\n messageId: messageId3\n }\n },\n update: {\n sessionUpdate: 'agent_message_chunk',\n content: {\n type: 'text',\n text: '\\n\\n点击上面的链接可以访问完整的协议文档。',\n }\n }\n };\n this.emitNotification(closingNotification);\n yield closingNotification;\n await this.delay(100);\n }\n async *_sendMockEditContentToolCallFlow(sessionId) {\n const toolCallId = `tool-${Date.now()}`;\n const messageId = `m-${Date.now()}`; // Currently unused\n // Send tool_call (pending)\n const pendingNotification = {\n sessionId,\n _meta: {\n 'codebuddy.ai': {\n toolName: 'write_to_file',\n messageId: messageId\n }\n },\n update: {\n sessionUpdate: 'tool_call',\n toolCallId,\n title: 'Write File',\n kind: 'edit',\n status: 'pending',\n locations: [{ path: 'example-edit-content.py', line: 0 }]\n }\n };\n this.emitNotification(pendingNotification);\n yield pendingNotification;\n await this.delay(100);\n // Send tool_call_update (in_progress)\n const content = `def hello_world():\\n print(\"Hello from ACP tool call!\")\\n return \"success\"\\n\\nif __name__ == \"__main__\":\\n hello_world()`;\n const chunkSize = 10;\n let accumulatedInput = '';\n for (let i = 0; i < content.length; i += chunkSize) {\n const chunk = content.substring(i, i + chunkSize);\n accumulatedInput += chunk;\n const progressNotification = {\n sessionId,\n _meta: {\n 'codebuddy.ai': {\n toolName: 'write_to_file',\n messageId: messageId\n }\n },\n update: {\n sessionUpdate: 'tool_call_update',\n toolCallId,\n status: 'in_progress',\n content: [\n {\n type: 'content',\n content: {\n type: 'text',\n text: accumulatedInput,\n }\n }\n ],\n rawInput: {\n filePath: 'example-edit-content.py',\n content: accumulatedInput\n },\n locations: [{ path: 'example-edit-content.py', line: 0 }]\n }\n };\n this.emitNotification(progressNotification);\n yield progressNotification;\n await this.delay(50);\n }\n await this.delay(500);\n // Send tool_call_update (completed)\n const completedNotification = {\n sessionId,\n _meta: {\n 'codebuddy.ai': {\n toolName: 'write_to_file',\n messageId: messageId\n }\n },\n update: {\n sessionUpdate: 'tool_call_update',\n toolCallId,\n status: 'completed',\n content: [\n {\n type: 'content',\n content: {\n type: 'text',\n text: content\n }\n }\n ],\n rawOutput: {\n type: 'write_to_file_result',\n path: 'example-edit-content.py',\n addLineCount: 10,\n removedLines: 20\n },\n locations: [{ path: 'example-edit-content.py', line: 0 }]\n }\n };\n this.emitNotification(completedNotification);\n yield completedNotification;\n const messageId2 = `m-${Date.now()}`; // Currently unused\n // Send summary message with rawInput\n await this.delay(300);\n const summaryNotification = {\n sessionId,\n _meta: {\n 'codebuddy.ai': {\n toolName: 'write_to_file',\n messageId: messageId2\n }\n },\n update: {\n sessionUpdate: 'agent_message_chunk',\n content: {\n type: 'text',\n text: '✅ 工具调用完成!我成功创建了一个名为 `example.py` 的文件。\\n\\nACP 协议工具调用流程:\\n1. `tool_call` (pending) - 创建工具调用\\n2. `tool_call_update` (in_progress) - 开始执行\\n3. `tool_call_update` (completed) - 执行完成\\n\\n这就是完整的工具调用生命周期!',\n }\n }\n };\n this.emitNotification(summaryNotification);\n yield summaryNotification;\n await this.delay(100);\n }\n /**\n * 发送使用 diff 类型的编辑工具调用流程 (符合 ACP 协议)\n *\n * 与 _sendMockEditContentToolCallFlow 的区别:\n * - 使用 type: 'diff' 而不是 type: 'content'\n * - diff 格式专门用于显示文件差异:{ type: 'diff', path, oldText, newText }\n * - 更适合展示文件的前后对比\n * - 触发 permissionRequest 等待用户交互\n */\n async *sendMockEditDiffToolCallFlow(sessionId) {\n const toolCallId = `tool-diff-${Date.now()}`;\n const messageId = `m-${Date.now()}`;\n const permissionRequestId = `perm-${Date.now()}`;\n // 1. 发送 tool_call (pending)\n const pendingNotification = {\n sessionId,\n _meta: {\n 'codebuddy.ai': {\n toolName: 'replace_in_file',\n messageId\n }\n },\n update: {\n sessionUpdate: 'tool_call',\n toolCallId,\n title: 'Edit File with Diff',\n kind: 'edit',\n status: 'pending',\n locations: [{ path: 'example-diff.py', line: 0 }]\n }\n };\n this.emitNotification(pendingNotification);\n yield pendingNotification;\n await this.delay(100);\n // 2. 发送 permissionRequest 事件,等待用户交互\n const permissionRequestData = {\n requestId: permissionRequestId,\n params: {\n sessionId,\n options: [\n { optionId: 'approve', name: '允许修改', kind: 'allow_once' },\n { optionId: 'reject', name: '拒绝', kind: 'reject_once' }\n ],\n toolCall: {\n toolCallId,\n title: 'Edit File with Diff',\n rawInput: {\n name: 'replace_in_file',\n arguments: {\n filePath: 'example-diff.py',\n oldStr: 'def hello_world():\\n print(\"Old code\")\\n return \"old\"',\n newStr: 'def hello_world():\\n print(\"Hello from ACP diff!\")\\n return \"success\"'\n }\n }\n }\n }\n };\n // 添加到 pendingPermissions(存储完整的 params)\n this.pendingPermissions.set(permissionRequestId, {\n params: {\n sessionId,\n options: [\n { optionId: 'approve', name: '允许修改', kind: 'allow_once' },\n { optionId: 'reject', name: '拒绝', kind: 'reject_once' }\n ],\n toolCall: {\n toolCallId,\n title: 'Edit File with Diff',\n rawInput: {\n name: 'replace_in_file',\n arguments: {\n filePath: 'example-diff.py',\n oldStr: 'def hello_world():\\n print(\"Old code\")\\n return \"old\"',\n newStr: 'def hello_world():\\n print(\"Hello from ACP diff!\")\\n return \"success\"'\n }\n }\n }\n },\n createdAt: Date.now()\n });\n // 发出事件\n this.emit('permissionRequest', permissionRequestData);\n // 3. 等待用户响应(最多 60 秒)\n const timeoutMs = 60000;\n const checkIntervalMs = 100;\n const startTime = Date.now();\n let approved = false;\n while (Date.now() - startTime < timeoutMs) {\n // 检查是否有结果\n const result = this.permissionResults.get(permissionRequestId);\n if (result === 'approved') {\n approved = true;\n break;\n }\n else if (result === 'rejected') {\n approved = false;\n break;\n }\n // 等待一段时间后再次检查\n await this.delay(checkIntervalMs);\n }\n // 清理\n this.pendingPermissions.delete(permissionRequestId);\n this.permissionResults.delete(permissionRequestId);\n // 如果没有被批准,发送 rejected 通知并结束\n if (!approved) {\n const rejectedNotification = {\n sessionId,\n _meta: {\n 'codebuddy.ai': {\n toolName: 'replace_in_file',\n messageId\n }\n },\n update: {\n sessionUpdate: 'tool_call_update',\n toolCallId,\n status: 'completed',\n content: [],\n rawOutput: {\n type: 'error',\n message: '用户拒绝了操作请求或操作超时'\n }\n }\n };\n this.emitNotification(rejectedNotification);\n yield rejectedNotification;\n return; // 结束执行\n }\n // 4. 用户批准后,流式发送 diff 内容 (in_progress)\n const content = `def hello_world():\\n print(\"Hello from ACP diff!\")\\n return \"success\"\\n\\nif __name__ == \"__main__\":\\n hello_world()`;\n const chunkSize = 10;\n let accumulatedText = '';\n for (let i = 0; i < content.length; i += chunkSize) {\n const chunk = content.substring(i, i + chunkSize);\n accumulatedText += chunk;\n const progressNotification = {\n sessionId,\n _meta: {\n 'codebuddy.ai': {\n toolName: 'replace_in_file',\n messageId\n }\n },\n update: {\n sessionUpdate: 'tool_call_update',\n toolCallId,\n status: 'in_progress',\n content: [\n {\n type: 'diff', // ✅ 使用 diff 类型\n path: 'example-diff.py',\n oldText: '', // 新文件,旧内容为空\n newText: accumulatedText\n }\n ],\n locations: [{ path: 'example-diff.py', line: 0 }],\n rawInput: {\n filePath: 'example-diff.py',\n new_str: '123',\n old_str: 'def hello_world():\\n print(\"Hello from ACP diff!\")\\n return \"success\"'\n }\n }\n };\n this.emitNotification(progressNotification);\n yield progressNotification;\n await this.delay(50);\n }\n await this.delay(500);\n // 3. 发送完成状态 (completed)\n const completedNotification = {\n sessionId,\n _meta: {\n 'codebuddy.ai': {\n toolName: 'replace_in_file',\n messageId\n }\n },\n update: {\n sessionUpdate: 'tool_call_update',\n toolCallId,\n status: 'completed',\n content: [\n {\n type: 'diff', // ✅ 最终结果也是 diff 类型\n path: 'example-diff.py',\n oldText: '# Old file content\\nprint(\"Old code\")', // 模拟旧内容\n newText: content // 新内容\n }\n ],\n locations: [{ path: 'example-diff.py', line: 0 }],\n rawInput: {\n filePath: 'example-diff.py',\n new_str: '123',\n old_str: 'def hello_world():\\n print(\"Hello from ACP diff!\")\\n return \"success\"'\n },\n rawOutput: {\n type: 'write_to_file_result',\n path: 'example-diff.py',\n addLineCount: 7,\n removedLines: 2\n }\n }\n };\n this.emitNotification(completedNotification);\n yield completedNotification;\n // 4. 发送总结消息\n // await this.delay(300);\n // const summaryNotification: SessionNotification = {\n // sessionId,\n // update: {\n // sessionUpdate: 'agent_message_chunk',\n // content: {\n // type: 'text',\n // text: `✅ 工具调用完成!我成功修改了 \\`example-diff.py\\` 文件。\\n\\n**Diff 格式说明:**\\n- \\`oldText\\`: 显示被替换的旧内容\\n- \\`newText\\`: 显示新的内容\\n\\n**工具调用流程:**\\n1. \\`tool_call\\` (pending) - 创建编辑工具调用\\n2. \\`tool_call_update\\` (in_progress) - 流式展示 diff\\n3. \\`tool_call_update\\` (completed) - 显示最终 diff\\n\\nDiff 格式让用户可以清晰地看到文件的前后对比!`\n // }\n // }\n // } as SessionNotification;\n // this.emitNotification(summaryNotification);\n // yield summaryNotification;\n await this.delay(100);\n }\n async *sendMockReadContentToolCallFlow(sessionId) {\n const filePath = '/Users/liumingyuan/Project/caseTest/subagent/test.js';\n const toolCallId = `tool-${Date.now()}`;\n const messageId = `m-${Date.now()}`;\n // Send tool_call (pending)\n const pendingNotification = {\n sessionId,\n _meta: {\n 'codebuddy.ai': {\n toolName: 'read_file',\n messageId: messageId\n }\n },\n update: {\n sessionUpdate: 'tool_call',\n toolCallId,\n title: 'Read File',\n status: 'pending',\n locations: [{ path: filePath, line: 0 }]\n }\n };\n this.emitNotification(pendingNotification);\n yield pendingNotification;\n await this.delay(100);\n // Mock file content\n const fileContent = `/**\n * Test file for subagent functionality\n */\n\nfunction helloWorld() {\n console.log('Hello from test.js!');\n return 'success';\n}\n\nclass TestClass {\n constructor(name) {\n this.name = name;\n }\n\n greet() {\n return \\`Hello, \\${this.name}!\\`;\n }\n}\n\nmodule.exports = {\n helloWorld,\n TestClass\n};\n`;\n const chunkSize = 20;\n let accumulatedContent = '';\n // Stream result with in_progress\n for (let i = 0; i < fileContent.length; i += chunkSize) {\n const chunk = fileContent.substring(i, i + chunkSize);\n accumulatedContent += chunk;\n const progressNotification = {\n sessionId,\n _meta: {\n 'codebuddy.ai': {\n toolName: 'read_file',\n messageId: messageId\n }\n },\n update: {\n sessionUpdate: 'tool_call_update',\n toolCallId,\n status: 'in_progress',\n content: [\n {\n type: 'content',\n content: {\n type: 'text',\n text: accumulatedContent\n }\n }\n ],\n locations: [{ path: filePath, line: 0 }]\n }\n };\n this.emitNotification(progressNotification);\n yield progressNotification;\n await this.delay(30);\n }\n // Send completed event\n const completedNotification = {\n sessionId,\n _meta: {\n 'codebuddy.ai': {\n toolName: 'read_file',\n messageId: messageId\n }\n },\n update: {\n sessionUpdate: 'tool_call_update',\n toolCallId,\n status: 'completed',\n content: [\n {\n type: 'content',\n content: {\n type: 'text',\n text: fileContent\n }\n }\n ],\n locations: [{ path: filePath, line: 0 }]\n }\n };\n this.emitNotification(completedNotification);\n yield completedNotification;\n }\n /**\n * 发送 search_content 工具调用流程 (符合 ACP 协议)\n *\n * 用于模拟在文件内容中搜索文本的工具调用(类似 grep)\n */\n async *sendMockSearchContentToolCallFlow(sessionId) {\n const pattern = '一行工具';\n const directory = '/Users/liumingyuan/Project/caseTest/subagent';\n const messageId = `m-${Date.now()}`;\n // 1. 发送 tool_call (pending)\n const toolCallId = `tool-sc-${Date.now()}`;\n const pendingNotification = {\n sessionId,\n _meta: {\n 'codebuddy.ai': {\n toolName: 'search_content',\n messageId\n }\n },\n update: {\n sessionUpdate: 'tool_call',\n toolCallId,\n title: 'Search Content',\n kind: 'search',\n status: 'pending',\n locations: [{ path: directory, line: 0 }],\n rawInput: {\n pattern,\n directory\n }\n }\n };\n this.emitNotification(pendingNotification);\n yield pendingNotification;\n await this.delay(100);\n // 2. 发送 tool_call_update (in_progress)\n const progressNotification = {\n sessionId,\n update: {\n sessionUpdate: 'tool_call_update',\n toolCallId,\n status: 'in_progress',\n content: [\n {\n type: 'content',\n content: {\n type: 'text',\n text: `Searching for \"${pattern}\" in ${directory}...`\n }\n }\n ],\n locations: [{ path: directory, line: 0 }]\n }\n };\n this.emitNotification(progressNotification);\n yield progressNotification;\n await this.delay(500);\n // 3. 发送 tool_call_update (completed)\n const completedNotification = {\n sessionId,\n _meta: {\n 'codebuddy.ai': {\n toolName: 'search_content',\n messageId\n }\n },\n update: {\n sessionUpdate: 'tool_call_update',\n toolCallId,\n status: 'completed',\n content: [\n {\n type: 'content',\n content: {\n type: 'text',\n text: `Found 1 matching result\\n\\nconvert_to_oneline.py\\n 56| print(\"文件内容转一行工具\")\\n`\n }\n }\n ],\n locations: [{ path: directory, line: 0 }],\n rawOutput: {\n pattern,\n directory,\n matches: [\n {\n filePath: 'convert_to_oneline.py',\n fileName: 'convert_to_oneline.py',\n content: ' print(\"文件内容转一行工具\")',\n startLine: 56,\n endLine: 56\n }\n ],\n totalCount: 1,\n hasMore: false\n }\n }\n };\n this.emitNotification(completedNotification);\n yield completedNotification;\n // 4. 发送总结消息\n await this.delay(300);\n const summaryNotification = {\n sessionId,\n update: {\n sessionUpdate: 'agent_message_chunk',\n content: {\n type: 'text',\n text: `✅ 内容搜索完成!在 \\`${directory}\\` 目录中找到 1 个匹配结果。\\n\\n**搜索结果:**\\n- \\`convert_to_oneline.py\\` 第 56 行: \\`print(\"文件内容转一行工具\")\\`\\n\\n**工具调用流程:**\\n1. \\`tool_call\\` (pending) - 创建搜索工具调用\\n2. \\`tool_call_update\\` (in_progress) - 执行搜索\\n3. \\`tool_call_update\\` (completed) - 返回匹配结果`\n }\n }\n };\n this.emitNotification(summaryNotification);\n yield summaryNotification;\n await this.delay(100);\n }\n /**\n * 发送 search_file 工具调用流程 (符合 ACP 协议)\n *\n * 用于模拟按文件名模式搜索文件的工具调用(类似 find)\n */\n async *sendMockSearchFileToolCallFlow(sessionId) {\n const pattern = '*.py';\n const directory = '/Users/liumingyuan/Project/caseTest/subagent';\n const messageId = `m-${Date.now()}`;\n // 1. 发送 tool_call (pending)\n const toolCallId = `tool-sf-${Date.now()}`;\n const pendingNotification = {\n sessionId,\n _meta: {\n 'codebuddy.ai': {\n toolName: 'search_file',\n messageId\n }\n },\n update: {\n sessionUpdate: 'tool_call',\n toolCallId,\n title: 'Search File',\n kind: 'search',\n status: 'pending',\n locations: [{ path: directory, line: 0 }],\n rawInput: {\n target_directory: directory,\n pattern,\n recursive: true,\n caseSensitive: false\n }\n }\n };\n this.emitNotification(pendingNotification);\n yield pendingNotification;\n await this.delay(100);\n // 2. 发送 tool_call_update (in_progress)\n const progressNotification = {\n sessionId,\n update: {\n sessionUpdate: 'tool_call_update',\n toolCallId,\n status: 'in_progress',\n content: [\n {\n type: 'content',\n content: {\n type: 'text',\n text: `Searching for files matching \"${pattern}\" in ${directory}...`\n }\n }\n ],\n locations: [{ path: directory, line: 0 }]\n }\n };\n this.emitNotification(progressNotification);\n yield progressNotification;\n await this.delay(500);\n // 3. 发送 tool_call_update (completed)\n const completedNotification = {\n sessionId,\n _meta: {\n 'codebuddy.ai': {\n toolName: 'search_file',\n messageId\n }\n },\n update: {\n sessionUpdate: 'tool_call_update',\n toolCallId,\n status: 'completed',\n content: [\n {\n type: 'content',\n content: {\n type: 'text',\n text: `Found 5 files\\n\\nbubble_sort.py (10.38 KB)\\nconvert_to_oneline.py (2.2 KB)\\ntls12_examples.py (4.58 KB)\\n.codebuddy/skills/analyzing-financial-statements/calculate_ratios.py (12.22 KB)\\n.codebuddy/skills/analyzing-financial-statements/interpret_ratios.py (15.83 KB)\\n`\n }\n }\n ],\n locations: [{ path: directory, line: 0 }],\n rawOutput: {\n path: directory,\n pattern,\n recursive: true,\n caseSensitive: false,\n results: [\n { filePath: 'bubble_sort.py', size: '10.38 KB' },\n { filePath: 'convert_to_oneline.py', size: '2.2 KB' },\n { filePath: 'tls12_examples.py', size: '4.58 KB' },\n { filePath: '.codebuddy/skills/analyzing-financial-statements/calculate_ratios.py', size: '12.22 KB' },\n { filePath: '.codebuddy/skills/analyzing-financial-statements/interpret_ratios.py', size: '15.83 KB' }\n ]\n }\n }\n };\n this.emitNotification(completedNotification);\n yield completedNotification;\n // 4. 发送总结消息\n await this.delay(300);\n const summaryNotification = {\n sessionId,\n update: {\n sessionUpdate: 'agent_message_chunk',\n content: {\n type: 'text',\n text: `✅ 文件搜索完成!在 \\`${directory}\\` 目录中找到 5 个匹配的 Python 文件。\\n\\n**搜索结果:**\\n- \\`bubble_sort.py\\` (10.38 KB)\\n- \\`convert_to_oneline.py\\` (2.2 KB)\\n- \\`tls12_examples.py\\` (4.58 KB)\\n- \\`.codebuddy/skills/analyzing-financial-statements/calculate_ratios.py\\` (12.22 KB)\\n- \\`.codebuddy/skills/analyzing-financial-statements/interpret_ratios.py\\` (15.83 KB)\\n\\n**工具调用流程:**\\n1. \\`tool_call\\` (pending) - 创建搜索工具调用\\n2. \\`tool_call_update\\` (in_progress) - 执行搜索\\n3. \\`tool_call_update\\` (completed) - 返回搜索结果`\n }\n }\n };\n this.emitNotification(summaryNotification);\n yield summaryNotification;\n await this.delay(100);\n }\n /**\n * 发送 web_search 工具调用流程 (符合 ACP 协议)\n *\n * 用于模拟网络搜索的工具调用\n */\n async *sendMockWebSearchToolCallFlow(sessionId) {\n const searchTerm = 'site:github.com Chalarangelo 30-seconds-of-code repository';\n const explanation = '用户要求查看GitHub上的30-seconds-of-code仓库信息';\n const messageId = `m-${Date.now()}`;\n // 1. 发送 tool_call (pending)\n const toolCallId = `tool-ws-${Date.now()}`;\n const pendingNotification = {\n sessionId,\n _meta: {\n 'codebuddy.ai': {\n toolName: 'web_search',\n messageId\n }\n },\n update: {\n sessionUpdate: 'tool_call',\n toolCallId,\n title: 'Web Search',\n kind: 'search',\n status: 'pending',\n locations: [{ path: 'web', line: 0 }],\n rawInput: {\n explanation,\n searchTerm\n }\n }\n };\n this.emitNotification(pendingNotification);\n yield pendingNotification;\n await this.delay(100);\n // 2. 发送 tool_call_update (in_progress)\n const progressNotification = {\n sessionId,\n update: {\n sessionUpdate: 'tool_call_update',\n toolCallId,\n status: 'in_progress',\n content: [\n {\n type: 'content',\n content: {\n type: 'text',\n text: `Searching for \"${searchTerm}\"...`\n }\n }\n ],\n locations: [{ path: 'web', line: 0 }]\n }\n };\n this.emitNotification(progressNotification);\n yield progressNotification;\n await this.delay(500);\n // 3. 发送 tool_call_update (completed)\n const completedNotification = {\n sessionId,\n _meta: {\n 'codebuddy.ai': {\n toolName: 'web_search',\n messageId\n }\n },\n update: {\n sessionUpdate: 'tool_call_update',\n toolCallId,\n status: 'completed',\n content: [\n {\n type: 'content',\n content: {\n type: 'text',\n text: `Found 5 search results for \"site:github.com Chalarangelo 30-seconds-of-code repository\":\\n\\n1. 30-seconds-of-code JavaScript 数组篇 - CSDN博客\\n https://blog.csdn.net/weixin_43550660/article/details/105696505\\n 原文:https://github.com/Chalarangelo/30-seconds-of-code 作者:Chalarangelo 翻译:http://caibaojian.com/30-seconds-of-code.html\\n\\n2. 精心收集的48个JavaScript代码片段,仅需30秒就可理解 - 久依 - 博客园\\n https://www.cnblogs.com/jiuyi/p/8623005.html\\n 源文链接 :https://github.com/Chalarangelo/30-seconds-of-code#anagrams-of-string-with-duplicates\\n\\n3. 30-seconds-code——string - 前端周分享 - SegmentFault 思否\\n https://segmentfault.com/a/1190000012563148\\n 英文文章来源于: https://github.com/Chalarangelo/30-seconds-of-code/blob/master/README.md\\n\\n4. 2018 年 1月 5 日 随笔档案 - 终极用户 - 博客园\\n https://www.cnblogs.com/shenzikun1314/archive/2018/01/05.html\\n https://github.com/Chalarangelo/30-seconds-of-code#anagrams-of-string-with-duplicates\\n\\n5. 30-seconds-code——Object - 前端周分享 - SegmentFault 思否\\n https://segmentfault.com/a/1190000012644112\\n 英文文章来源于: https://github.com/Chalarangelo/30-seconds-of-code/blob/master/README.md`\n }\n }\n ],\n locations: [{ path: 'web', line: 0 }],\n rawOutput: {\n type: 'web_search_tool_result',\n data: [\n {\n passage: '原文:https://github.com/Chalarangelo/30-seconds-of-code 作者:Chalarangelo 翻译:http://caibaojian.com/30-seconds-of-code.html 译者:蔡宝坚 收集有用的 Javascript 片段, 你可以在30秒或更少的时间里理解。 arrMax:返回数组中得最大值 将Math.max()与扩展运算符 ',\n uri: 'https://blog.csdn.net/weixin_43550660/article/details/105696505',\n site: '',\n title: '30-seconds-of-code JavaScript 数组篇 持续更新_30code of javascript-CSDN博客'\n },\n {\n passage: '源文链接 :https://github.com/Chalarangelo/30-seconds-of-code#anagrams-of-string-with-duplicates 该项目来自于 Github 用户 Chalarangelo,目前已在 Github 上获得了 5000 多Star,精心收集了多达 48 个有用的 JavaScript 代码片段,该用户的代码可以让程序员在 30 秒甚至更少的时间内理解这些经常用到的基础算法,来看看这些 JavaScript 代码都传达出了什么吧! [str, str[1] + str[0]] : [str];',\n uri: 'https://www.cnblogs.com/jiuyi/p/8623005.html',\n site: '博客园',\n title: '精心收集的48个JavaScript代码片段,仅需30秒就可理解 - 久依 - 博客园'\n },\n {\n passage: '英文文章来源于: https://github.com/Chalarangelo/30-seconds-of-code/blob/master/README.md anagrams 计算一个字符串中字符的所有排序情况. 使用递归. 遍历字符串中的每个字符, 计算剩余字符串的所有顺序. 用 Array.map() 区合并该字符和剩余字符串的每种顺序, 然后用 Array.reduce() 将该字符串的所有顺序合并到一个数组中. 当字符串的 length 等于 2 或者 1 时,是两个基例. const anagrams = str => { if (str.length <= 2) return str.length === 2 ? [str, str[1] + str[0]] : [str]; return str.split(\\'\\').reduce((acc, letter, i) => acc.concat(anagrams(str.slice(0, i) + str.slice(i + 1)).map(val => letter + val)anagrams(\\'abc\\') -> [...',\n uri: 'https://segmentfault.com/a/1190000012563148?sort=newest',\n site: '',\n title: 'javascript - 30-seconds-code——string - 前端周分享 - SegmentFault 思否'\n },\n {\n passage: 'https://github.com/Chalarangelo/30-seconds-of-code#anagrams-of-string-with-duplicates 该项目来自于 Github 用户 Chalarangelo,目前已在 Gith阅读全文阅读(282) 评论(0) 推荐(0) 摘要: 微信公众号支付只要符合以下规则是可以自动关注的 1. 刷卡支付默认有推荐关注2. 公众号支付和扫码支付需要5元以上才有推荐关注3. APP支付默认没有,需要申请配置,需要有一定用户规模才可以申请4. 已经关注的不展示推荐栏5. 服务号未设置头像的在IOS不展示推荐关注栏6. 用户取消过关注的默认不勾阅读全文阅读(8851) 评论(1) 推荐(1)',\n uri: 'https://www.cnblogs.com/shenzikun1314/archive/2018/01/05.html',\n site: '博客园',\n title: '2018 年 1月 5 日 随笔档案 - 终极用户 - 博客园'\n },\n {\n passage: '英文文章来源于: https://github.com/Chalarangelo/30-seconds-of-code/blob/master/README.md cleanObj 删除JSON对象中除指定键值的属性. 用递归的方法 用 Object.keys() 方法遍历JSON对象然后删除不是 include 在给定数组中的属性. 如果你传入 childIndicator ,它将对该键所对应的JSON对象进行深度遍历. const cleanObj = (obj, keysToKeep = [], childIndicator) => { Object.keys(obj).forEach(key => { if (key === childIndicator) { cleanObj(obj[key], keysToKeep, childIndicator); } else if (!',\n uri: 'https://segmentfault.com/a/1190000012644112?utm_source=sf-similar-article',\n site: '',\n title: 'javascript - 30-seconds-code——Object - 前端周分享 - SegmentFault 思否'\n }\n ],\n searchInput: `Search for \"${searchTerm}\"`\n }\n }\n };\n this.emitNotification(completedNotification);\n yield completedNotification;\n // 4. 发送总结消息\n await this.delay(300);\n const summaryNotification = {\n sessionId,\n update: {\n sessionUpdate: 'agent_message_chunk',\n content: {\n type: 'text',\n text: `✅ 网络搜索完成!搜索到 5 个与 \"site:github.com Chalarangelo 30-seconds-of-code repository\" 相关的结果。\\n\\n**搜索结果:**\\n1. **30-seconds-of-code JavaScript 数组篇** - CSDN博客\\n2. **精心收集的48个JavaScript代码片段** - 博客园\\n3. **30-seconds-code——string** - SegmentFault 思否\\n4. **2018 年 1月 5 日 随笔档案** - 博客园\\n5. **30-seconds-code——Object** - SegmentFault 思否\\n\\n**工具调用流程:**\\n1. \\`tool_call\\` (pending) - 创建网络搜索工具调用\\n2. \\`tool_call_update\\` (in_progress) - 执行搜索\\n3. \\`tool_call_update\\` (completed) - 返回搜索结果`\n }\n }\n };\n this.emitNotification(summaryNotification);\n yield summaryNotification;\n await this.delay(100);\n }\n /**\n * 发送 todo_write 工具调用流程 (符合 ACP 协议)\n *\n * 用于模拟创建和更新 Todo 列表的工具调用\n */\n async *sendMockTodoWriteToolCallFlow(sessionId) {\n const toolCallId = `tool-tw-${Date.now()}`;\n const messageId = `m-tw-${Date.now()}`;\n const merge = false;\n // 创建 todos 数据\n const todos = [\n {\n id: '1',\n status: 'pending',\n content: '分析项目需求和架构设计',\n },\n {\n id: '2',\n status: 'pending',\n content: '实现用户认证模块',\n },\n {\n id: '3',\n status: 'pending',\n content: '搭建数据库模型',\n },\n {\n id: '4',\n status: 'pending',\n content: '开发 REST API 接口',\n },\n {\n id: '5',\n status: 'pending',\n content: '前端界面设计和实现',\n },\n {\n id: '6',\n status: 'pending',\n content: '单元测试和集成测试',\n },\n {\n id: '7',\n status: 'pending',\n content: '性能优化和代码审查',\n },\n ];\n // 1. Send tool_call (pending)\n const pendingNotification = {\n sessionId,\n _meta: {\n 'codebuddy.ai': {\n toolName: 'todo_write',\n messageId: messageId\n }\n },\n update: {\n sessionUpdate: 'tool_call',\n toolCallId,\n title: 'Create Todo List',\n status: 'pending',\n rawInput: {\n merge,\n todos: JSON.stringify(todos),\n }\n }\n };\n this.emitNotification(pendingNotification);\n yield pendingNotification;\n await this.delay(200);\n // 2. Send tool_call_update (in_progress)\n const progressNotification = {\n sessionId,\n _meta: {\n 'codebuddy.ai': {\n toolName: 'todo_write',\n messageId: messageId\n }\n },\n update: {\n sessionUpdate: 'tool_call_update',\n toolCallId,\n status: 'in_progress',\n content: [\n {\n type: 'content',\n content: {\n type: 'text',\n text: `📋 正在创建 Todo 列表,共 ${todos.length} 项任务...`,\n }\n }\n ],\n rawInput: {\n merge,\n todos: JSON.stringify(todos),\n }\n }\n };\n this.emitNotification(progressNotification);\n yield progressNotification;\n await this.delay(300);\n // 3. Send tool_call_update (completed)\n const todoSummary = todos\n .map((todo) => `- [${todo.status === 'completed' ? 'x' : ' '}] ${todo.content}`)\n .join('\\n');\n const responseData = JSON.stringify({\n totalTodos: todos.length,\n pendingTodos: todos.filter((t) => t.status === 'pending').length,\n inProgressTodos: todos.filter((t) => t.status === 'in_progress').length,\n completedTodos: todos.filter((t) => t.status === 'completed').length,\n todos,\n }, null, 2);\n const completedNotification = {\n sessionId,\n _meta: {\n 'codebuddy.ai': {\n toolName: 'todo_write',\n messageId: messageId\n }\n },\n update: {\n sessionUpdate: 'tool_call_update',\n toolCallId,\n status: 'completed',\n content: [\n {\n type: 'content',\n content: {\n type: 'text',\n text: `✅ Todo 列表创建成功!\\n\\n${todoSummary}`,\n }\n }\n ],\n rawInput: {\n merge,\n todos: JSON.stringify(todos),\n },\n rawOutput: {\n type: 'plan_update_tool_result',\n status: 'ready',\n data: responseData,\n reminder: 'Todo 列表已创建,可以开始执行任务。当任务状态更新时,请调用 todo_write 工具进行更新。',\n },\n }\n };\n this.emitNotification(completedNotification);\n yield completedNotification;\n // 4. 发送总结消息\n await this.delay(300);\n const summaryNotification = {\n sessionId,\n update: {\n sessionUpdate: 'agent_message_chunk',\n content: {\n type: 'text',\n text: `📋 **Todo List 创建完成**\\n\\n**任务统计:**\\n- 总任务数:${todos.length}\\n- 进行中:${todos.filter((t) => t.status === 'in_progress').length}\\n- 待处理:${todos.filter((t) => t.status === 'pending').length}\\n- 已完成:${todos.filter((t) => t.status === 'completed').length}\\n\\n**任务清单:**\\n${todoSummary}\\n\\n**工具调用流程:**\\n1. \\`tool_call\\` (pending) - 创建 todo_write 工具调用\\n2. \\`tool_call_update\\` (in_progress) - 处理中\\n3. \\`tool_call_update\\` (completed) - 返回创建结果\\n\\n**rawInput 包含:**\\n- \\`merge\\`: 是否合并到已有的 todo 列表(false 表示新建)\\n- \\`todos\\`: JSON 字符串格式的 todo 数组\\n\\n**rawOutput 包含:**\\n- \\`type\\`: 'plan_update_tool_result'\\n- \\`status\\`: 'ready'(表示列表已准备好)\\n- \\`data\\`: 包含任务统计和详细信息的 JSON\\n- \\`reminder\\`: 后续操作提示`,\n }\n }\n };\n this.emitNotification(summaryNotification);\n yield summaryNotification;\n await this.delay(100);\n }\n /**\n * 发送 plan_create 工具调用流程 (符合 ACP 协议)\n *\n * 用于模拟创建计划的工具调用\n */\n async *sendMockPlanCreateToolCallFlow(sessionId) {\n const toolCallId = `tool-pc-${Date.now()}`;\n const messageId = `m-pc-${Date.now()}`;\n const planId = `plan-${Date.now()}`;\n // 创建 plan 数据\n const planData = {\n id: planId,\n name: '项目开发计划',\n overview: '这是一个完整的项目开发计划,包括需求分析、设计、开发、测试和部署阶段。',\n todolist: [\n {\n id: 'todo-1',\n content: '收集并整理项目需求',\n status: 'pending',\n dependencies: [],\n },\n {\n id: 'todo-2',\n content: '进行可行性分析和技术评估',\n status: 'pending',\n dependencies: ['todo-1'],\n },\n {\n id: 'todo-3',\n content: '设计系统架构和数据库模型',\n status: 'pending',\n dependencies: ['todo-2'],\n },\n {\n id: 'todo-4',\n content: '实现后端 API 接口',\n status: 'pending',\n dependencies: ['todo-3'],\n },\n {\n id: 'todo-5',\n content: '开发前端界面组件',\n status: 'pending',\n dependencies: ['todo-3'],\n },\n {\n id: 'todo-6',\n content: '前后端集成测试',\n status: 'pending',\n dependencies: ['todo-4', 'todo-5'],\n },\n {\n id: 'todo-7',\n content: '性能优化和代码审查',\n status: 'pending',\n dependencies: ['todo-6'],\n },\n {\n id: 'todo-8',\n content: '生产环境部署',\n status: 'pending',\n dependencies: ['todo-7'],\n },\n ],\n };\n // 1. Send tool_call (pending)\n const pendingNotification = {\n sessionId,\n _meta: {\n 'codebuddy.ai': {\n toolName: 'plan_create',\n messageId: messageId\n }\n },\n update: {\n sessionUpdate: 'tool_call',\n toolCallId,\n title: 'Create Plan',\n status: 'pending',\n rawInput: {\n name: planData.name,\n overview: planData.overview,\n }\n }\n };\n this.emitNotification(pendingNotification);\n yield pendingNotification;\n await this.delay(200);\n // 2. Send tool_call_update (in_progress)\n const progressNotification = {\n sessionId,\n _meta: {\n 'codebuddy.ai': {\n toolName: 'plan_create',\n messageId: messageId\n }\n },\n update: {\n sessionUpdate: 'tool_call_update',\n toolCallId,\n status: 'in_progress',\n content: [\n {\n type: 'content',\n content: {\n type: 'text',\n text: `📋 正在创建计划\"${planData.name}\"...`,\n }\n }\n ],\n }\n };\n this.emitNotification(progressNotification);\n yield progressNotification;\n await this.delay(300);\n // 3. Send tool_call_update (completed)\n const responseData = JSON.stringify(planData, null, 2);\n const completedNotification = {\n sessionId,\n _meta: {\n 'codebuddy.ai': {\n toolName: 'plan_create',\n messageId: messageId\n }\n },\n update: {\n sessionUpdate: 'tool_call_update',\n toolCallId,\n status: 'completed',\n content: [\n {\n type: 'content',\n content: {\n type: 'text',\n text: `✅ 计划\"${planData.name}\"创建成功!\\n\\n共包含 ${planData.todolist.length} 项任务。`,\n }\n }\n ],\n rawOutput: {\n type: 'plan_create_tool_result',\n status: 'ready',\n data: responseData,\n reminder: '计划已创建,可以开始执行任务。使用 plan_update 工具更新计划状态。',\n },\n }\n };\n this.emitNotification(completedNotification);\n yield completedNotification;\n // 4. 发送总结消息\n await this.delay(300);\n const todoList = planData.todolist\n .slice(0, 3)\n .map((todo) => `- [ ] ${todo.content}`)\n .join('\\n');\n const summaryNotification = {\n sessionId,\n update: {\n sessionUpdate: 'agent_message_chunk',\n content: {\n type: 'text',\n text: `🎯 **计划创建完成**\\n\\n**计划详情:**\\n- ID: ${planId}\\n- 名称: ${planData.name}\\n\\n**关键任务(前3项):**\\n${todoList}\\n\\n**工具调用流程:**\\n1. \\`tool_call\\` (pending) - 创建 plan_create 工具调用\\n2. \\`tool_call_update\\` (in_progress) - 处理中\\n3. \\`tool_call_update\\` (completed) - 返回创建结果\\n\\n**rawOutput 包含:**\\n- \\`type\\`: 'plan_create_tool_result'\\n- \\`status\\`: 'ready'(表示计划已准备好执行)\\n- \\`data\\`: 包含完整计划信息的 JSON\\n- \\`reminder\\`: 后续操作提示`,\n }\n }\n };\n this.emitNotification(summaryNotification);\n yield summaryNotification;\n await this.delay(100);\n }\n /**\n * 发送 plan_update 工具调用流程 (符合 ACP 协议)\n *\n * 用于模拟更新计划状态的工具调用\n */\n async *sendMockPlanUpdateToolCallFlow(sessionId) {\n const toolCallId = `tool-pu-${Date.now()}`;\n const messageId = `m-pu-${Date.now()}`;\n const planId = `plan-${Date.now() - 1000}`;\n const updateData = {\n id: planId,\n name: '项目开发计划',\n overview: '这是一个完整的项目开发计划,包括需求分析、设计、开发、测试和部署阶段。',\n todolist: [\n {\n id: 'todo-1',\n content: '收集并整理项目需求',\n status: 'pending',\n dependencies: [],\n },\n {\n id: 'todo-2',\n content: '进行可行性分析和技术评估',\n status: 'pending',\n dependencies: ['todo-1'],\n },\n {\n id: 'todo-3',\n content: '设计系统架构和数据库模型',\n status: 'pending',\n dependencies: ['todo-2'],\n },\n {\n id: 'todo-4',\n content: '实现后端 API 接口',\n status: 'pending',\n dependencies: ['todo-3'],\n },\n {\n id: 'todo-5',\n content: '开发前端界面组件',\n status: 'pending',\n dependencies: ['todo-3'],\n },\n {\n id: 'todo-6',\n content: '前后端集成测试',\n status: 'pending',\n dependencies: ['todo-4', 'todo-5'],\n },\n {\n id: 'todo-7',\n content: '性能优化和代码审查',\n status: 'pending',\n dependencies: ['todo-6'],\n },\n {\n id: 'todo-8',\n content: '生产环境部署',\n status: 'pending',\n dependencies: ['todo-7'],\n },\n ],\n };\n const updateStatus = 'building';\n // 1. Send tool_call (pending)\n const pendingNotification = {\n sessionId,\n _meta: {\n 'codebuddy.ai': {\n toolName: 'plan_update',\n messageId: messageId\n }\n },\n update: {\n sessionUpdate: 'tool_call',\n toolCallId,\n title: 'Update Plan',\n status: 'pending',\n rawInput: {\n planId,\n status: updateStatus,\n }\n }\n };\n this.emitNotification(pendingNotification);\n yield pendingNotification;\n await this.delay(200);\n // 2. Send tool_call_update (in_progress)\n const progressNotification = {\n sessionId,\n _meta: {\n 'codebuddy.ai': {\n toolName: 'plan_update',\n messageId: messageId\n }\n },\n update: {\n sessionUpdate: 'tool_call_update',\n toolCallId,\n status: 'in_progress',\n content: [\n {\n type: 'content',\n content: {\n type: 'text',\n text: `⏳ 正在更新计划\"${updateData.name}\"的状态为\"${updateStatus}\"...`,\n }\n }\n ],\n }\n };\n this.emitNotification(progressNotification);\n yield progressNotification;\n await this.delay(300);\n // 3. Send tool_call_update (completed)\n const responseData = JSON.stringify(updateData, null, 2);\n const completedNotification = {\n sessionId,\n _meta: {\n 'codebuddy.ai': {\n toolName: 'plan_update',\n messageId: messageId\n }\n },\n update: {\n sessionUpdate: 'tool_call_update',\n toolCallId,\n status: 'completed',\n content: [\n {\n type: 'content',\n content: {\n type: 'text',\n text: `✅ 计划状态已更新为\"${updateStatus}\"!`,\n }\n }\n ],\n rawOutput: {\n type: 'plan_update_tool_result',\n status: updateStatus,\n data: responseData,\n reminder: '计划状态已更新,可以继续执行下一步任务。',\n },\n }\n };\n this.emitNotification(completedNotification);\n yield completedNotification;\n // 4. 发送总结消息\n await this.delay(300);\n const summaryNotification = {\n sessionId,\n update: {\n sessionUpdate: 'agent_message_chunk',\n content: {\n type: 'text',\n text: `🔄 **计划更新完成**\\n\\n**更新信息:**\\n- 计划 ID: ${planId}\\n- 计划名称: ${updateData.name}\\n- 新状态: ${updateStatus}\\n\\n**状态流转:**\\n1. ready → **${updateStatus}** (执行中)\\n2. ${updateStatus} → completed (已完成)\\n\\n**工具调用流程:**\\n1. \\`tool_call\\` (pending) - 创建 plan_update 工具调用\\n2. \\`tool_call_update\\` (in_progress) - 处理中\\n3. \\`tool_call_update\\` (completed) - 返回更新结果\\n\\n**rawInput 包含:**\\n- \\`planId\\`: 要更新的计划 ID\\n- \\`status\\`: 新的计划状态\\n\\n**rawOutput 包含:**\\n- \\`type\\`: 'plan_update_tool_result'\\n- \\`status\\`: '${updateStatus}'(表示更新已完成)\\n- \\`data\\`: 包含更新后的计划信息的 JSON`,\n }\n }\n };\n this.emitNotification(summaryNotification);\n yield summaryNotification;\n await this.delay(100);\n }\n}\nexports.MockAgentConnection = MockAgentConnection;\n// ============================================\n// MockAgentProvider adapter\n// ============================================\nclass MockAgentProviderAdapter {\n constructor(mockProvider, agents = [], capabilities = {}, responseGenerator, responseDelay = 0) {\n this.connections = new Map();\n this.agentCounter = 0;\n this.mockProvider = mockProvider;\n this.agents = agents.length > 0 ? agents : [\n { id: 'mock-agent', name: 'Mock Agent', status: 'connected', type: 'cloud' }\n ];\n this.capabilities = capabilities;\n this.responseGenerator = responseGenerator;\n this.responseDelay = responseDelay;\n }\n async create() {\n const agentId = `mock-agent-${++this.agentCounter}-${Date.now()}`;\n this.agents.push({\n id: agentId,\n name: `Mock Agent ${this.agentCounter}`,\n type: 'cloud',\n status: 'disconnected',\n });\n return agentId;\n }\n async get(agentId) {\n return this.agents.find(a => a.id === agentId);\n }\n async list(options) {\n return {\n agents: this.agents,\n pagination: {\n page: 1,\n size: this.agents.length,\n total: this.agents.length,\n totalPages: 1,\n hasNext: false,\n hasPrev: false\n }\n };\n }\n async connect(agentId) {\n let connection = this.connections.get(agentId);\n if (!connection) {\n connection = new MockAgentConnection(agentId, this.capabilities, this.responseGenerator, this.responseDelay);\n this.connections.set(agentId, connection);\n }\n await connection.connect();\n const agent = this.agents.find(a => a.id === agentId);\n if (agent) {\n agent.status = 'connected';\n }\n return connection;\n }\n async delete(agentId) {\n const existed = this.connections.has(agentId);\n this.connections.delete(agentId);\n const agentIndex = this.agents.findIndex(a => a.id === agentId);\n if (agentIndex >= 0) {\n this.agents.splice(agentIndex, 1);\n }\n return existed || agentIndex >= 0;\n }\n addAgent(state) {\n this.agents.push(state);\n }\n getConnection(agentId) {\n return this.connections.get(agentId);\n }\n getMockProvider() {\n return this.mockProvider;\n }\n setResponseGenerator(generator) {\n this.responseGenerator = generator;\n // Update all existing connections\n for (const connection of this.connections.values()) {\n connection.setResponseGenerator(generator);\n }\n }\n}\n// ============================================\n// MockAgentClient\n// ============================================\nclass MockAgentClient extends client_js_1.AgentClient {\n constructor(options = {}) {\n var _a, _b;\n const mockProvider = new MockAgentProvider_js_1.MockAgentProvider();\n const adapter = new MockAgentProviderAdapter(mockProvider, options.agents, (_a = options.capabilities) !== null && _a !== void 0 ? _a : {}, options.responseGenerator, (_b = options.responseDelay) !== null && _b !== void 0 ? _b : 0);\n super({ provider: adapter, logger: options.logger });\n this._mockProviderAdapter = adapter;\n }\n // ============================================\n // Mock Provider Access Methods\n // ============================================\n getMockProvider() { return this._mockProviderAdapter.getMockProvider(); }\n addAgent(state) { this._mockProviderAdapter.addAgent(state); }\n getConnection(agentId) {\n return this._mockProviderAdapter.getConnection(agentId);\n }\n setResponseGenerator(generator) {\n this._mockProviderAdapter.setResponseGenerator(generator);\n }\n}\nexports.MockAgentClient = MockAgentClient;\nexports.default = MockAgentClient;\n//# sourceMappingURL=mock-agent-client.js.map","\"use strict\";\n/**\n * API type definitions for AgentClient\n * Session-centric API design\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isLocalAgentState = isLocalAgentState;\nexports.isCloudAgentState = isCloudAgentState;\n/**\n * 类型守卫:判断是否为 LocalAgentState\n */\nfunction isLocalAgentState(state) {\n return state.type === 'local';\n}\n/**\n * 类型守卫:判断是否为 CloudAgentState\n */\nfunction isCloudAgentState(state) {\n return state.type === 'cloud';\n}\n//# sourceMappingURL=types.js.map","\"use strict\";\n/**\n * Client exports for AgentClient\n * Session-centric API\n */\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isCloudAgentState = exports.isLocalAgentState = exports.MockHelpers = exports.MockAgentConnection = exports.MockAgentClient = exports.SessionManager = exports.ActiveSessionImpl = exports.default = exports.AgentClient = void 0;\n// Main client\nvar client_js_1 = require(\"./client.js\");\nObject.defineProperty(exports, \"AgentClient\", { enumerable: true, get: function () { return client_js_1.AgentClient; } });\nObject.defineProperty(exports, \"default\", { enumerable: true, get: function () { return __importDefault(client_js_1).default; } });\n// Session implementation\nvar session_js_1 = require(\"./session.js\");\nObject.defineProperty(exports, \"ActiveSessionImpl\", { enumerable: true, get: function () { return session_js_1.ActiveSessionImpl; } });\n// Session manager\nvar session_manager_js_1 = require(\"./session-manager.js\");\nObject.defineProperty(exports, \"SessionManager\", { enumerable: true, get: function () { return session_manager_js_1.SessionManager; } });\n// Mock client for testing\nvar mock_agent_client_js_1 = require(\"../_legacy/mock-agent-client.js\");\nObject.defineProperty(exports, \"MockAgentClient\", { enumerable: true, get: function () { return mock_agent_client_js_1.MockAgentClient; } });\nObject.defineProperty(exports, \"MockAgentConnection\", { enumerable: true, get: function () { return mock_agent_client_js_1.MockAgentConnection; } });\nObject.defineProperty(exports, \"MockHelpers\", { enumerable: true, get: function () { return mock_agent_client_js_1.MockHelpers; } });\n// Type guards\nvar types_js_1 = require(\"./types.js\");\nObject.defineProperty(exports, \"isLocalAgentState\", { enumerable: true, get: function () { return types_js_1.isLocalAgentState; } });\nObject.defineProperty(exports, \"isCloudAgentState\", { enumerable: true, get: function () { return types_js_1.isCloudAgentState; } });\n//# sourceMappingURL=index.js.map","\"use strict\";\n/**\n * Backend Provider 类型定义\n *\n * 定义 IBackendProvider 接口和配置\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=types.js.map","\"use strict\";\n/**\n * Cloud Agent API 类型定义\n *\n * 定义与 /v2/cloudagent/agentmgmt/agents API 相关的数据结构\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=agent-api.js.map","\"use strict\";\n/**\n * Backend Provider 实现\n *\n * 封装与后端 API 的 HTTP 通信\n */\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || (function () {\n var ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n };\n return function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.BackendProvider = void 0;\nexports.createBackendProvider = createBackendProvider;\n/** 获取当前域名的登录页面 URL */\nconst getLoginUrl = () => `${window.location.origin}/login`;\n/** 获取当前域名的账号选择页面 URL */\nconst getSelectAccountUrl = () => `${window.location.origin}/select`;\n/** localStorage 中存储选中账号 ID 的 key */\nconst SELECTED_ACCOUNT_KEY = 'CODEBUDDY_IDE_SELECTED_ACCOUNT_ID';\n/**\n * Backend Provider 实现类\n */\nclass BackendProvider {\n constructor(config) {\n this.baseUrl = config.baseUrl.replace(/\\/$/, '');\n this.authToken = config.authToken;\n }\n /**\n * 获取 Agent 列表\n * API 端点: GET /v2/cloudagent/agentmgmt/agents\n */\n async getAgents(request = {}) {\n // 原实现已注释,使用 MockAgentProvider 提供假数据\n // const queryParams = this.buildQueryParams(request);\n // const url = `${this.baseUrl}/v2/cloudagent/agentmgmt/agents${queryParams}`;\n // const headers: Record<string, string> = {\n // 'Content-Type': 'application/json',\n // 'Accept': 'application/json',\n // };\n // if (this.authToken) {\n // headers['Authorization'] = `Bearer ${this.authToken}`;\n // }\n // const response = await fetch(url, { method: 'GET', headers, credentials: 'include' });\n // if (!response.ok) {\n // const error = await response.json().catch(() => ({ message: response.statusText }));\n // throw new Error(error.message || `HTTP ${response.status}`);\n // }\n // return response.json();\n // 使用 MockAgentProvider 提供假数据\n const { MockAgentProvider } = await Promise.resolve().then(() => __importStar(require('../common/_legacy/MockAgentProvider.js')));\n const mockProvider = new MockAgentProvider();\n const sessions = mockProvider.getAllSessions();\n // 将 MockSession 数据转换为 GetAgentsResponse 格式\n const mockTitles = {\n '1': '开发五子棋游戏',\n '2': '修复登录页面样式',\n '3': 'API 接口优化',\n };\n const agents = sessions.map((session, index) => ({\n id: session.sessionId,\n name: mockTitles[session.sessionId] || `Agent ${session.sessionId}`,\n status: 'RUNNING',\n visibility: 'PRIVATE',\n createdAt: new Date(session.createdAt).toISOString(),\n summary: `Session created at ${new Date(session.createdAt).toLocaleString()}`,\n source: {\n provider: 'github',\n ref: 'refs/heads/main',\n repository: session.cwd,\n },\n target: {\n autoCreatePr: false,\n branchName: 'feature/mock',\n prUrl: undefined,\n url: undefined,\n },\n }));\n return {\n agents,\n pagination: {\n hasNext: false,\n hasPrev: false,\n page: 1,\n size: agents.length,\n total: agents.length,\n totalPages: 1,\n },\n };\n }\n /**\n * 获取可用模型列表\n * API 端点: GET /v2/cloudagent/models (假设)\n *\n * 当前实现: 返回 Mock 数据\n */\n async getModels(request) {\n // Mock 模型数据\n // https://staging-copilot.tencent.com/internal/api/docs/swagger/index.html#/CloudAgent/get_v2_cloudagent_agentmgmt_models\n const mockModels = [\n {\n id: 'glm-4.7',\n name: 'GLM-4.7',\n vendor: 'f',\n maxOutputTokens: 48000,\n maxInputTokens: 200000,\n supportsToolCall: true,\n supportsImages: false,\n disabledMultimodal: true,\n maxAllowedSize: 200000,\n supportsReasoning: true,\n onlyReasoning: true,\n temperature: 1.0,\n reasoning: {\n effort: 'medium',\n summary: 'auto'\n },\n descriptionEn: 'GLM-4.7 model, Well-rounded model for everyday use',\n descriptionZh: 'GLM-4.7 大模型,能力均衡,适合日常使用'\n },\n {\n id: 'glm-4.7-flash',\n name: 'GLM-4.7 Flash',\n vendor: 'f',\n maxOutputTokens: 40000,\n maxInputTokens: 128000,\n supportsToolCall: true,\n supportsImages: false,\n disabledMultimodal: false,\n maxAllowedSize: 128000,\n supportsReasoning: false,\n onlyReasoning: false,\n temperature: 0.7,\n reasoning: {\n effort: 'low',\n summary: 'never'\n },\n descriptionEn: 'GLM-4.7 Flash, Fast and efficient model',\n descriptionZh: 'GLM-4.7 Flash,快速高效的模型'\n }\n ];\n console.log('[BackendProvider] getModels called for repository:', request.repository);\n // 返回 Mock 数据(后续可以替换为真实的 HTTP 请求)\n return {\n models: mockModels\n };\n }\n /**\n * 获取当前账号信息\n * API 端点: GET /console/accounts (返回账号列表)\n *\n * 逻辑:\n * 1. 从 localStorage 读取 CODEBUDDY_IDE_SELECTED_ACCOUNT_ID\n * 2. 根据 CODEBUDDY_IDE_SELECTED_ACCOUNT_ID 找到对应账号\n * - personal 类型: 用 uid 匹配\n * - 其他类型: 用 enterpriseId 匹配\n * 3. 如果没有选中的账号,跳转到账号选择页面\n * 4. 获取套餐信息并合并到账号中\n */\n async getAccount() {\n const url = `${this.baseUrl}/console/accounts`;\n const headers = {\n 'Content-Type': 'application/json',\n 'Accept': 'application/json',\n };\n if (this.authToken) {\n headers['Authorization'] = `Bearer ${this.authToken}`;\n }\n try {\n const response = await fetch(url, { method: 'GET', headers, credentials: 'include' });\n if (!response.ok) {\n // 401/403 表示未登录\n if (response.status === 401 || response.status === 403) {\n return null;\n }\n const error = await response.json().catch(() => ({ message: response.statusText }));\n throw new Error(error.message || `HTTP ${response.status}`);\n }\n // 检查响应类型,只有 JSON 才是正常响应,其他情况跳转登录页\n const contentType = response.headers.get('Content-Type') || '';\n if (!contentType.includes('application/json')) {\n return null;\n }\n const { data = {} } = await response.json();\n const accounts = (data === null || data === void 0 ? void 0 : data.accounts) || [];\n if (!accounts || accounts.length === 0) {\n return null;\n }\n // 从 localStorage 读取选中的账号 ID\n const selectedAccountId = localStorage.getItem(SELECTED_ACCOUNT_KEY);\n let selectedAccount;\n if (selectedAccountId) {\n // 查找选中的账号\n selectedAccount = accounts.find(account => {\n // personal 类型用 uid 匹配,其他类型用 enterpriseId 匹配\n if (account.type === 'personal') {\n return account.uid === selectedAccountId;\n }\n return account.enterpriseId === selectedAccountId;\n });\n if (selectedAccount) {\n // 获取套餐信息并合并到账号中\n const plan = await this.getCurrentPlan();\n // 计算版本展示类型\n const editionType = this.getEditionDisplayType(selectedAccount.type, plan.isPro);\n console.log('account', { ...selectedAccount, ...plan, editionType });\n return { ...selectedAccount, ...plan, editionType };\n }\n }\n // 如果只有一个账号,自动选中它\n if (accounts.length === 1) {\n selectedAccount = accounts[0];\n // 保存选中的账号 ID 到 localStorage\n const accountId = selectedAccount.type === 'personal'\n ? selectedAccount.uid\n : selectedAccount.enterpriseId;\n if (accountId) {\n localStorage.setItem(SELECTED_ACCOUNT_KEY, accountId);\n }\n // 获取套餐信息并合并到账号中\n const plan = await this.getCurrentPlan();\n const editionType = this.getEditionDisplayType(selectedAccount.type, plan.isPro);\n console.log('account (auto-selected)', { ...selectedAccount, ...plan, editionType });\n return { ...selectedAccount, ...plan, editionType };\n }\n // 多个账号但没有选中的,跳转到账号选择页面\n const redirectUrl = encodeURIComponent(window.location.href);\n window.location.href = `${getSelectAccountUrl()}?redirect_uri=${redirectUrl}`;\n return null;\n }\n catch (error) {\n console.error('[BackendProvider] getAccount failed:', error);\n return null;\n }\n }\n /**\n * 获取当前套餐信息\n * 从计量计费接口获取用户的套餐信息\n * API: POST /billing/meter/get-user-resource\n */\n async getCurrentPlan() {\n var _a, _b;\n // 默认套餐信息\n const defaultPlan = {\n isPro: false,\n expireAt: 0,\n renewFlag: 0,\n PackageCode: undefined,\n name: '',\n };\n try {\n const url = `${this.baseUrl}/billing/meter/get-user-resource`;\n const headers = {\n 'Content-Type': 'application/json',\n 'Accept': 'application/json',\n };\n if (this.authToken) {\n headers['Authorization'] = `Bearer ${this.authToken}`;\n }\n // 构造请求参数\n const now = new Date();\n const futureDate = new Date(now.getTime() + 101 * 365 * 24 * 60 * 60 * 1000);\n const formatDate = (d) => {\n const pad = (n) => n.toString().padStart(2, '0');\n return `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())} ${pad(d.getHours())}:${pad(d.getMinutes())}:${pad(d.getSeconds())}`;\n };\n const body = {\n PageNumber: 1,\n PageSize: 100,\n ProductCode: 'p_tcaca',\n Status: [0, 3], // 0-有效, 3-已用完\n PackageEndTimeRangeBegin: formatDate(now),\n PackageEndTimeRangeEnd: formatDate(futureDate),\n };\n const response = await fetch(url, {\n method: 'POST',\n headers,\n credentials: 'include',\n body: JSON.stringify(body),\n });\n if (!response.ok) {\n console.warn('[BackendProvider] getCurrentPlan failed:', response.status);\n return defaultPlan;\n }\n const result = await response.json();\n // 响应格式: { Response: { Data: { Accounts: [...] } } } 或 { Accounts: [...] }\n const resources = ((_b = (_a = result === null || result === void 0 ? void 0 : result.Response) === null || _a === void 0 ? void 0 : _a.Data) === null || _b === void 0 ? void 0 : _b.Accounts) || (result === null || result === void 0 ? void 0 : result.Accounts) || [];\n if (!resources || resources.length === 0) {\n return defaultPlan;\n }\n // 查找 Pro 套餐(proYear 或 proMon)\n const proPlan = resources.find((r) => r.PackageCode === 'proYear' || r.PackageCode === 'proMon');\n // 查找试用套餐\n const trialPlan = resources.find((r) => r.PackageCode === 'gift');\n const activePlan = proPlan || trialPlan;\n if (activePlan) {\n return {\n isPro: !!proPlan,\n expireAt: activePlan.ExpiredTime || activePlan.CycleEndTime || 0,\n renewFlag: Number(activePlan.AutoRenewFlag) === 1 ? 1 : 0,\n PackageCode: activePlan.PackageCode,\n name: activePlan.PackageName || '',\n };\n }\n return defaultPlan;\n }\n catch (error) {\n console.error('[BackendProvider] getCurrentPlan error:', error);\n return defaultPlan;\n }\n }\n /**\n * 根据账号类型和 Pro 状态计算版本展示类型\n * - personal + isPro = 'pro'\n * - personal + !isPro = 'free'\n * - ultimate = 'ultimate' (旗舰版/团队版)\n * - exclusive = 'exclusive' (专享版/企业版)\n */\n getEditionDisplayType(type, isPro) {\n if (type === 'personal') {\n return isPro ? 'pro' : 'free';\n }\n if (type === 'ultimate') {\n return 'ultimate';\n }\n if (type === 'exclusive') {\n return 'exclusive';\n }\n // 默认返回 free\n return 'free';\n }\n /**\n * 触发登录流程\n * Web 环境: 跳转到登录页面\n */\n async login() {\n // 获取当前页面 URL 作为回调地址\n // todo 支持弹窗和跳转、弹窗优化点 别让主页面 reload\n const redirectUrl = encodeURIComponent(window.location.href);\n window.location.href = `${getLoginUrl()}?redirect_uri=${redirectUrl}&platform=website`;\n }\n /**\n * 登出账号\n * Web 环境: 跳转到登出页面或清除 cookie\n */\n async logout() {\n // 调用登出接口\n const url = `${this.baseUrl}/console/logout`;\n try {\n await fetch(url, { method: 'POST', credentials: 'include' });\n }\n catch (error) {\n console.error('[BackendProvider] logout failed:', error);\n }\n // 清除 localStorage 中的选中账号\n localStorage.removeItem(SELECTED_ACCOUNT_KEY);\n // 刷新页面\n window.location.reload();\n }\n}\nexports.BackendProvider = BackendProvider;\n/**\n * 创建 BackendProvider 实例\n */\nfunction createBackendProvider(config) {\n return new BackendProvider(config);\n}\n//# sourceMappingURL=backend-provider.js.map","\"use strict\";\n/**\n * IPC Backend Provider 实现\n *\n * 通过 IWidgetChannel 与后端通信\n * 使用统一的消息格式: { type: 'backend', requestId, params: { type, params } }\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.IPCBackendProvider = void 0;\nexports.createIPCBackendProvider = createIPCBackendProvider;\n/**\n * Backend 请求类型常量\n */\nconst BACKEND_REQUEST_TYPES = {\n GET_AGENTS: 'backend:get-agents-request',\n GET_MODELS: 'backend:get-models',\n LOGIN: 'backend:login',\n LOGOUT: 'backend:logout',\n GET_ACCOUNT: 'backend:get-account',\n};\n/**\n * 生成唯一请求 ID\n */\nfunction generateRequestId() {\n return `req-${Date.now()}-${Math.random().toString(36).slice(2)}`;\n}\n/**\n * IPC Backend Provider 实现类\n *\n * 通过 IWidgetChannel 与后端通信获取 Agent 列表\n */\nclass IPCBackendProvider {\n constructor(config) {\n var _a, _b;\n this.channel = config.channel;\n this.debug = (_a = config.debug) !== null && _a !== void 0 ? _a : false;\n this.timeoutMs = (_b = config.timeoutMs) !== null && _b !== void 0 ? _b : 30000;\n this.log('Initialized with IWidgetChannel');\n }\n /**\n * 发送统一格式的后端请求\n * @param requestType 请求类型\n * @param params 请求参数\n * @returns 响应数据\n */\n async sendBackendRequest(requestType, params) {\n const message = {\n type: 'backend',\n requestId: generateRequestId(),\n params: {\n type: requestType,\n params: params,\n },\n };\n this.log('Sending backend request:', message);\n const response = await this.channel.callMethod('__backend__', message, this.timeoutMs);\n this.log('Received response:', response);\n // 检查响应中是否有错误\n if (response === null || response === void 0 ? void 0 : response.error) {\n throw new Error(response.error);\n }\n // 从响应的 data 字段中提取实际数据\n return ((response === null || response === void 0 ? void 0 : response.data) !== undefined ? response.data : response);\n }\n /**\n * 获取 Agent 列表\n * 通过 IWidgetChannel 发送请求到后端\n */\n async getAgents(request = {}) {\n this.log('Getting agents with request:', request);\n try {\n return await this.sendBackendRequest(BACKEND_REQUEST_TYPES.GET_AGENTS, request);\n }\n catch (error) {\n this.log('Get agents failed:', error);\n throw error;\n }\n }\n /**\n * 获取可用模型列表\n * 通过 IWidgetChannel 发送请求到后端\n */\n async getModels(request) {\n this.log('Getting models with request:', request);\n try {\n return await this.sendBackendRequest(BACKEND_REQUEST_TYPES.GET_MODELS, request);\n }\n catch (error) {\n this.log('Get models failed:', error);\n throw error;\n }\n }\n /**\n * 获取当前账号信息\n * IDE 环境: 通过 IPC 获取账号信息\n */\n async getAccount() {\n this.log('Getting account via IPC');\n try {\n return await this.sendBackendRequest(BACKEND_REQUEST_TYPES.GET_ACCOUNT);\n }\n catch (error) {\n this.log('Get account failed:', error);\n return null;\n }\n }\n /**\n * 触发登录流程\n * IDE 环境: 通过 IPC 通知 IDE 打开登录流程\n */\n async login() {\n this.log('Triggering login via IPC');\n try {\n await this.sendBackendRequest(BACKEND_REQUEST_TYPES.LOGIN);\n }\n catch (error) {\n this.log('Login request failed:', error);\n throw error;\n }\n }\n /**\n * 登出账号\n * IDE 环境: 通过 IPC 通知 IDE 登出\n */\n async logout() {\n this.log('Triggering logout via IPC');\n try {\n await this.sendBackendRequest(BACKEND_REQUEST_TYPES.LOGOUT);\n }\n catch (error) {\n this.log('Logout request failed:', error);\n throw error;\n }\n }\n /**\n * 监听 channel 事件\n * 用于监听账户变化等事件\n */\n on(event, callback) {\n this.log('Registering event listener:', event);\n this.channel.on(event, callback);\n return () => {\n this.channel.off(event, callback);\n };\n }\n /**\n * 调试日志\n */\n log(...args) {\n if (this.debug) {\n console.log('[IPCBackendProvider]', ...args);\n }\n }\n}\nexports.IPCBackendProvider = IPCBackendProvider;\n/**\n * 创建 IPCBackendProvider 实例\n */\nfunction createIPCBackendProvider(config) {\n return new IPCBackendProvider(config);\n}\n//# sourceMappingURL=ipc-backend-provider.js.map","\"use strict\";\n/**\n * Backend Provider 导出\n */\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createIPCBackendProvider = exports.IPCBackendProvider = exports.createBackendProvider = exports.BackendProvider = void 0;\n__exportStar(require(\"./types\"), exports);\n__exportStar(require(\"./agent-api\"), exports);\nvar backend_provider_1 = require(\"./backend-provider\");\nObject.defineProperty(exports, \"BackendProvider\", { enumerable: true, get: function () { return backend_provider_1.BackendProvider; } });\nObject.defineProperty(exports, \"createBackendProvider\", { enumerable: true, get: function () { return backend_provider_1.createBackendProvider; } });\nvar ipc_backend_provider_1 = require(\"./ipc-backend-provider\");\nObject.defineProperty(exports, \"IPCBackendProvider\", { enumerable: true, get: function () { return ipc_backend_provider_1.IPCBackendProvider; } });\nObject.defineProperty(exports, \"createIPCBackendProvider\", { enumerable: true, get: function () { return ipc_backend_provider_1.createIPCBackendProvider; } });\n//# sourceMappingURL=index.js.map","\"use strict\";\n/**\n * @genie/agent-provider\n *\n * Unified Agent Provider module for ACP (Agent Client Protocol) support.\n * Provides both legacy and new APIs for connecting to ACP agents.\n */\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isCloudAgentState = exports.isLocalAgentState = exports.SessionManager = exports.ActiveSessionImpl = exports.MockAgentConnection = exports.MockAgentClient = exports.AgentClient = exports.E2BFilesystem = exports.IPCAgentConnection = exports.LocalAgentProvider = exports.LocalAgentConnection = exports.CloudAgentProvider = exports.CloudAgentConnection = exports.isReservedSessionId = exports.SPECIAL_SESSION_IDS = exports.RequestTimeoutError = exports.JsonRpcErrorCode = exports.RequestIdGenerator = exports.JsonRpcEncoder = exports.AcpJsonRpcClient = exports.IPCAgentProvider = exports.mockNewSessionResponse = exports.mockInitializeResponse = exports.MockAgentProvider = void 0;\nvar MockAgentProvider_js_1 = require(\"./_legacy/MockAgentProvider.js\");\nObject.defineProperty(exports, \"MockAgentProvider\", { enumerable: true, get: function () { return MockAgentProvider_js_1.MockAgentProvider; } });\nObject.defineProperty(exports, \"mockInitializeResponse\", { enumerable: true, get: function () { return MockAgentProvider_js_1.mockInitializeResponse; } });\nObject.defineProperty(exports, \"mockNewSessionResponse\", { enumerable: true, get: function () { return MockAgentProvider_js_1.mockNewSessionResponse; } });\nvar IPCAgentProvider_js_1 = require(\"./_legacy/IPCAgentProvider.js\");\nObject.defineProperty(exports, \"IPCAgentProvider\", { enumerable: true, get: function () { return IPCAgentProvider_js_1.IPCAgentProvider; } });\nvar AcpJsonRpcClient_js_1 = require(\"./_legacy/AcpJsonRpcClient.js\");\nObject.defineProperty(exports, \"AcpJsonRpcClient\", { enumerable: true, get: function () { return AcpJsonRpcClient_js_1.AcpJsonRpcClient; } });\nvar json_rpc_js_1 = require(\"./_legacy/json-rpc.js\");\nObject.defineProperty(exports, \"JsonRpcEncoder\", { enumerable: true, get: function () { return json_rpc_js_1.JsonRpcEncoder; } });\nObject.defineProperty(exports, \"RequestIdGenerator\", { enumerable: true, get: function () { return json_rpc_js_1.RequestIdGenerator; } });\nObject.defineProperty(exports, \"JsonRpcErrorCode\", { enumerable: true, get: function () { return json_rpc_js_1.JsonRpcErrorCode; } });\nObject.defineProperty(exports, \"RequestTimeoutError\", { enumerable: true, get: function () { return json_rpc_js_1.RequestTimeoutError; } });\nvar acp_client_protocol_js_1 = require(\"./_legacy/acp-client-protocol.js\");\nObject.defineProperty(exports, \"SPECIAL_SESSION_IDS\", { enumerable: true, get: function () { return acp_client_protocol_js_1.SPECIAL_SESSION_IDS; } });\nObject.defineProperty(exports, \"isReservedSessionId\", { enumerable: true, get: function () { return acp_client_protocol_js_1.isReservedSessionId; } });\n// ============================================\n// Provider 抽象 (Provider abstraction)\n// ============================================\n// Providers\nvar index_js_1 = require(\"./providers/index.js\");\nObject.defineProperty(exports, \"CloudAgentConnection\", { enumerable: true, get: function () { return index_js_1.CloudAgentConnection; } });\nObject.defineProperty(exports, \"CloudAgentProvider\", { enumerable: true, get: function () { return index_js_1.CloudAgentProvider; } });\nObject.defineProperty(exports, \"LocalAgentConnection\", { enumerable: true, get: function () { return index_js_1.LocalAgentConnection; } });\nObject.defineProperty(exports, \"LocalAgentProvider\", { enumerable: true, get: function () { return index_js_1.LocalAgentProvider; } });\nObject.defineProperty(exports, \"IPCAgentConnection\", { enumerable: true, get: function () { return index_js_1.IPCAgentConnection; } });\nObject.defineProperty(exports, \"E2BFilesystem\", { enumerable: true, get: function () { return index_js_1.E2BFilesystem; } });\n// ============================================\n// 高层 API (High-level API) - Session-Centric\n// ============================================\nvar index_js_2 = require(\"./client/index.js\");\nObject.defineProperty(exports, \"AgentClient\", { enumerable: true, get: function () { return index_js_2.AgentClient; } });\nObject.defineProperty(exports, \"MockAgentClient\", { enumerable: true, get: function () { return index_js_2.MockAgentClient; } });\nObject.defineProperty(exports, \"MockAgentConnection\", { enumerable: true, get: function () { return index_js_2.MockAgentConnection; } });\nObject.defineProperty(exports, \"ActiveSessionImpl\", { enumerable: true, get: function () { return index_js_2.ActiveSessionImpl; } });\nObject.defineProperty(exports, \"SessionManager\", { enumerable: true, get: function () { return index_js_2.SessionManager; } });\n// Type guards\nObject.defineProperty(exports, \"isLocalAgentState\", { enumerable: true, get: function () { return index_js_2.isLocalAgentState; } });\nObject.defineProperty(exports, \"isCloudAgentState\", { enumerable: true, get: function () { return index_js_2.isCloudAgentState; } });\n// Tool Schemas (for ACP rawInput/rawOutput validation)\n__exportStar(require(\"./_legacy/tool-schemas.js\"), exports);\n// Backend Provider\n__exportStar(require(\"../backend\"), exports);\n//# sourceMappingURL=index.js.map","/**\n * @genie/cloud-agent-sdk\n *\n * Cloud Agent SDK - re-exports CloudAgentProvider related APIs from @genie/agent-provider\n */\n\n// ============================================\n// Provider 层\n// ============================================\n\nexport {\n CloudAgentConnection,\n CloudAgentProvider,\n E2BFilesystem\n} from '@genie/agent-provider';\n\nexport type {\n CloudAgentProviderOptions\n} from '@genie/agent-provider';\n\n// ============================================\n// Client 层(高层 API)\n// ============================================\n\nexport {\n AgentClient,\n ActiveSessionImpl,\n SessionManager,\n isCloudAgentState\n} from '@genie/agent-provider';\n\nexport type {\n AgentState,\n BaseAgentState,\n CloudAgentState,\n AgentStateType,\n CloudAgentVisibility,\n CloudAgentSourceInfo,\n CloudAgentTarget,\n SessionInfo,\n ActiveSession,\n SessionAgentOperations,\n CreateSessionParams as ClientCreateSessionParams,\n LoadSessionParams as ClientLoadSessionParams,\n AgentClientOptions,\n ClientSessionsResource,\n PromptsResource,\n ArtifactsResource,\n SessionEvents,\n SessionEventHandler,\n AgentProvider,\n ListAgentOptions,\n ListAgentFilter,\n ListAgentSort,\n ApiPromptResponse,\n Logger\n} from '@genie/agent-provider';\n\n// ============================================\n// 核心类型\n// ============================================\n\nexport type {\n AgentTransport,\n AgentStatus,\n AgentCapabilities,\n AgentInfo,\n SessionMode,\n Session,\n CreateSessionParams,\n LoadSessionParams,\n McpServerConfig,\n PromptContentBlock,\n PromptParams,\n ConnectionEvents,\n AgentConnection,\n BaseConnectionConfig,\n CloudConnectionConfig,\n // Filesystem types\n FilesResource,\n FilesystemProvider,\n E2BSandboxConnectionInfo,\n FilesystemRequestOpts,\n FilesystemListOpts,\n WatchOpts,\n WriteEntry,\n EntryInfo,\n Filesystem\n} from '@genie/agent-provider';\n\n// ============================================\n// Backend 类型(Account, Model 等)\n// ============================================\n\nexport type {\n Account,\n Edition,\n EditionDisplayType,\n AccountPlan,\n DeployStatus,\n CommodityCode,\n ModelInfo,\n ReasoningConfig,\n GetModelsRequest,\n GetModelsResponse,\n IBackendProvider,\n BackendProviderConfig\n} from '@genie/agent-provider';\n\nexport {\n BackendProvider,\n createBackendProvider,\n IPCBackendProvider,\n createIPCBackendProvider\n} from '@genie/agent-provider';\n"],"x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9],"mappings":"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"}