@niubitli/plugin-feishu-connector 0.3.1-connector-feishu
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +266 -0
- package/dist/manifest.js +806 -0
- package/dist/manifest.js.map +7 -0
- package/dist/ui/index.js +4047 -0
- package/dist/ui/index.js.map +7 -0
- package/dist/worker.js +14724 -0
- package/dist/worker.js.map +7 -0
- package/migrations/001_feishu_connector.sql +133 -0
- package/package.json +31 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../sdk/src/define-plugin.ts", "../../../../node_modules/.pnpm/zod@3.24.2/node_modules/zod/lib/index.mjs", "../../../shared/src/constants.ts", "../../../shared/src/adapter-type.ts", "../../../shared/src/network-bind.ts", "../../../shared/src/types/instance.ts", "../../../shared/src/types/search.ts", "../../../shared/src/validators/sidebar-preferences.ts", "../../../shared/src/validators/execution-workspace.ts", "../../../shared/src/types/feedback.ts", "../../../shared/src/types/locale.ts", "../../../shared/src/validators/feedback.ts", "../../../shared/src/validators/locale.ts", "../../../shared/src/validators/instance.ts", "../../../shared/src/validators/budget.ts", "../../../shared/src/validators/company.ts", "../../../shared/src/validators/environment.ts", "../../../shared/src/validators/company-skill.ts", "../../../shared/src/validators/adapter-skills.ts", "../../../shared/src/validators/text.ts", "../../../shared/src/validators/issue.ts", "../../../shared/src/validators/routine.ts", "../../../shared/src/validators/company-portability.ts", "../../../shared/src/validators/secret.ts", "../../../shared/src/validators/agent.ts", "../../../shared/src/validators/project.ts", "../../../shared/src/validators/search.ts", "../../../shared/src/validators/issue-tree-control.ts", "../../../shared/src/validators/work-product.ts", "../../../shared/src/validators/goal.ts", "../../../shared/src/validators/approval.ts", "../../../shared/src/validators/cost.ts", "../../../shared/src/validators/finance.ts", "../../../shared/src/validators/asset.ts", "../../../shared/src/validators/access.ts", "../../../shared/src/validators/plugin.ts", "../../../shared/src/api.ts", "../../../shared/src/routine-variables.ts", "../../../shared/src/config-schema.ts", "../../sdk/src/worker-rpc-host.ts", "../../sdk/src/protocol.ts", "../src/worker.ts", "../src/constants.ts", "../src/config.ts", "../src/capabilities.ts", "../src/routing.ts", "../src/lark-cli.ts", "../src/subscriber-plan.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * `definePlugin` \u2014 the top-level helper for authoring a Paperclip plugin.\n *\n * Plugin authors call `definePlugin()` and export the result as the default\n * export from their worker entrypoint. The host imports the worker module,\n * calls `setup()` with a `PluginContext`, and from that point the plugin\n * responds to events, jobs, webhooks, and UI requests through the context.\n *\n * @see PLUGIN_SPEC.md \u00A714.1 \u2014 Example SDK Shape\n *\n * @example\n * ```ts\n * // dist/worker.ts\n * import { definePlugin } from \"@paperclipai/plugin-sdk\";\n *\n * export default definePlugin({\n * async setup(ctx) {\n * ctx.logger.info(\"Linear sync plugin starting\");\n *\n * // Subscribe to events\n * ctx.events.on(\"issue.created\", async (event) => {\n * const config = await ctx.config.get();\n * await ctx.http.fetch(`https://api.linear.app/...`, {\n * method: \"POST\",\n * headers: { Authorization: `Bearer ${await ctx.secrets.resolve(config.apiKeyRef as string)}` },\n * body: JSON.stringify({ title: event.payload.title }),\n * });\n * });\n *\n * // Register a job handler\n * ctx.jobs.register(\"full-sync\", async (job) => {\n * ctx.logger.info(\"Running full-sync job\", { runId: job.runId });\n * // ... sync logic\n * });\n *\n * // Register data for the UI\n * ctx.data.register(\"sync-health\", async ({ companyId }) => {\n * const state = await ctx.state.get({\n * scopeKind: \"company\",\n * scopeId: String(companyId),\n * stateKey: \"last-sync\",\n * });\n * return { lastSync: state };\n * });\n * },\n * });\n * ```\n */\n\nimport type { PluginContext } from \"./types.js\";\nimport type {\n PluginEnvironmentAcquireLeaseParams,\n PluginEnvironmentDestroyLeaseParams,\n PluginEnvironmentExecuteParams,\n PluginEnvironmentExecuteResult,\n PluginEnvironmentLease,\n PluginEnvironmentProbeParams,\n PluginEnvironmentProbeResult,\n PluginEnvironmentRealizeWorkspaceParams,\n PluginEnvironmentRealizeWorkspaceResult,\n PluginEnvironmentReleaseLeaseParams,\n PluginEnvironmentResumeLeaseParams,\n PluginEnvironmentValidateConfigParams,\n PluginEnvironmentValidationResult,\n} from \"./protocol.js\";\n\n// ---------------------------------------------------------------------------\n// Health check result\n// ---------------------------------------------------------------------------\n\n/**\n * Optional plugin-reported diagnostics returned from the `health()` RPC method.\n *\n * @see PLUGIN_SPEC.md \u00A713.2 \u2014 `health`\n */\nexport interface PluginHealthDiagnostics {\n /** Machine-readable status: `\"ok\"` | `\"degraded\"` | `\"error\"`. */\n status: \"ok\" | \"degraded\" | \"error\";\n /** Human-readable description of the current health state. */\n message?: string;\n /** Plugin-reported key-value diagnostics (e.g. connection status, queue depth). */\n details?: Record<string, unknown>;\n}\n\n// ---------------------------------------------------------------------------\n// Config validation result\n// ---------------------------------------------------------------------------\n\n/**\n * Result returned from the `validateConfig()` RPC method.\n *\n * @see PLUGIN_SPEC.md \u00A713.3 \u2014 `validateConfig`\n */\nexport interface PluginConfigValidationResult {\n /** Whether the config is valid. */\n ok: boolean;\n /** Non-fatal warnings about the config. */\n warnings?: string[];\n /** Validation errors (populated when `ok` is `false`). */\n errors?: string[];\n}\n\n// ---------------------------------------------------------------------------\n// Webhook handler input\n// ---------------------------------------------------------------------------\n\n/**\n * Input received by the plugin worker's `handleWebhook` handler.\n *\n * @see PLUGIN_SPEC.md \u00A713.7 \u2014 `handleWebhook`\n */\nexport interface PluginWebhookInput {\n /** Endpoint key matching the manifest declaration. */\n endpointKey: string;\n /** Inbound request headers. */\n headers: Record<string, string | string[]>;\n /** Raw request body as a UTF-8 string. */\n rawBody: string;\n /** Parsed JSON body (if applicable and parseable). */\n parsedBody?: unknown;\n /** Unique request identifier for idempotency checks. */\n requestId: string;\n}\n\nexport interface PluginApiRequestInput {\n routeKey: string;\n method: string;\n path: string;\n params: Record<string, string>;\n query: Record<string, string | string[]>;\n body: unknown;\n actor: {\n actorType: \"user\" | \"agent\";\n actorId: string;\n agentId?: string | null;\n userId?: string | null;\n runId?: string | null;\n };\n companyId: string;\n headers: Record<string, string>;\n}\n\nexport interface PluginApiResponse {\n status?: number;\n headers?: Record<string, string>;\n body?: unknown;\n}\n\n// ---------------------------------------------------------------------------\n// Plugin definition\n// ---------------------------------------------------------------------------\n\n/**\n * The plugin definition shape passed to `definePlugin()`.\n *\n * The only required field is `setup`, which receives the `PluginContext` and\n * is where the plugin registers its handlers (events, jobs, data, actions,\n * tools, etc.).\n *\n * All other lifecycle hooks are optional. If a hook is not implemented the\n * host applies default behaviour (e.g. restarting the worker on config change\n * instead of calling `onConfigChanged`).\n *\n * @see PLUGIN_SPEC.md \u00A713 \u2014 Host-Worker Protocol\n */\nexport interface PluginDefinition {\n /**\n * Called once when the plugin worker starts up, after `initialize` completes.\n *\n * This is where the plugin registers all its handlers: event subscriptions,\n * job handlers, data/action handlers, and tool registrations. Registration\n * must be synchronous after `setup` resolves \u2014 do not register handlers\n * inside async callbacks that may resolve after `setup` returns.\n *\n * @param ctx - The full plugin context provided by the host\n */\n setup(ctx: PluginContext): Promise<void>;\n\n /**\n * Called when the host wants to know if the plugin is healthy.\n *\n * The host polls this on a regular interval and surfaces the result in the\n * plugin health dashboard. If not implemented, the host infers health from\n * worker process liveness.\n *\n * @see PLUGIN_SPEC.md \u00A713.2 \u2014 `health`\n */\n onHealth?(): Promise<PluginHealthDiagnostics>;\n\n /**\n * Called when the operator updates the plugin's instance configuration at\n * runtime, without restarting the worker.\n *\n * If not implemented, the host restarts the worker to apply the new config.\n *\n * @param newConfig - The newly resolved configuration\n * @see PLUGIN_SPEC.md \u00A713.4 \u2014 `configChanged`\n */\n onConfigChanged?(newConfig: Record<string, unknown>): Promise<void>;\n\n /**\n * Called when the host is about to shut down the plugin worker.\n *\n * The worker has at most 10 seconds (configurable via plugin config) to\n * finish in-flight work and resolve this promise. After the deadline the\n * host sends SIGTERM, then SIGKILL.\n *\n * @see PLUGIN_SPEC.md \u00A712.5 \u2014 Graceful Shutdown Policy\n */\n onShutdown?(): Promise<void>;\n\n /**\n * Called to validate the current plugin configuration.\n *\n * The host calls this:\n * - after the plugin starts (to surface config errors immediately)\n * - after the operator saves a new config (to validate before persisting)\n * - via the \"Test Connection\" button in the settings UI\n *\n * @param config - The configuration to validate\n * @see PLUGIN_SPEC.md \u00A713.3 \u2014 `validateConfig`\n */\n onValidateConfig?(config: Record<string, unknown>): Promise<PluginConfigValidationResult>;\n\n /**\n * Called to handle an inbound webhook delivery.\n *\n * The host routes `POST /api/plugins/:pluginId/webhooks/:endpointKey` to\n * this handler. The plugin is responsible for signature verification using\n * a resolved secret ref.\n *\n * If not implemented but webhooks are declared in the manifest, the host\n * returns HTTP 501 for webhook deliveries.\n *\n * @param input - Webhook delivery metadata and payload\n * @see PLUGIN_SPEC.md \u00A713.7 \u2014 `handleWebhook`\n */\n onWebhook?(input: PluginWebhookInput): Promise<unknown>;\n\n /**\n * Called for manifest-declared scoped JSON API routes under\n * `/api/plugins/:pluginId/api/*` after the host has enforced auth, company\n * access, capabilities, and checkout policy.\n */\n onApiRequest?(input: PluginApiRequestInput): Promise<PluginApiResponse>;\n /**\n * Called to validate provider-specific configuration for a plugin-hosted\n * environment driver.\n */\n onEnvironmentValidateConfig?(\n params: PluginEnvironmentValidateConfigParams,\n ): Promise<PluginEnvironmentValidationResult>;\n\n /** Called to test reachability or readiness of a plugin-hosted environment. */\n onEnvironmentProbe?(\n params: PluginEnvironmentProbeParams,\n ): Promise<PluginEnvironmentProbeResult>;\n\n /** Called before a run starts to acquire a provider lease. */\n onEnvironmentAcquireLease?(\n params: PluginEnvironmentAcquireLeaseParams,\n ): Promise<PluginEnvironmentLease>;\n\n /** Called to reconnect to a previously acquired provider lease. */\n onEnvironmentResumeLease?(\n params: PluginEnvironmentResumeLeaseParams,\n ): Promise<PluginEnvironmentLease>;\n\n /** Called when a run finishes and the provider lease can be released. */\n onEnvironmentReleaseLease?(\n params: PluginEnvironmentReleaseLeaseParams,\n ): Promise<void>;\n\n /** Called when the host needs to force-destroy provider state. */\n onEnvironmentDestroyLease?(\n params: PluginEnvironmentDestroyLeaseParams,\n ): Promise<void>;\n\n /** Called to materialize the run workspace inside the provider lease. */\n onEnvironmentRealizeWorkspace?(\n params: PluginEnvironmentRealizeWorkspaceParams,\n ): Promise<PluginEnvironmentRealizeWorkspaceResult>;\n\n /** Called to execute a command inside the provider lease. */\n onEnvironmentExecute?(\n params: PluginEnvironmentExecuteParams,\n ): Promise<PluginEnvironmentExecuteResult>;\n}\n\n// ---------------------------------------------------------------------------\n// PaperclipPlugin \u2014 the sealed object returned by definePlugin()\n// ---------------------------------------------------------------------------\n\n/**\n * The sealed plugin object returned by `definePlugin()`.\n *\n * Plugin authors export this as the default export from their worker\n * entrypoint. The host imports it and calls the lifecycle methods.\n *\n * @see PLUGIN_SPEC.md \u00A714 \u2014 SDK Surface\n */\nexport interface PaperclipPlugin {\n /** The original plugin definition passed to `definePlugin()`. */\n readonly definition: PluginDefinition;\n}\n\n// ---------------------------------------------------------------------------\n// definePlugin \u2014 top-level factory\n// ---------------------------------------------------------------------------\n\n/**\n * Define a Paperclip plugin.\n *\n * Call this function in your worker entrypoint and export the result as the\n * default export. The host will import the module and call lifecycle methods\n * on the returned object.\n *\n * @param definition - Plugin lifecycle handlers\n * @returns A sealed `PaperclipPlugin` object for the host to consume\n *\n * @example\n * ```ts\n * import { definePlugin } from \"@paperclipai/plugin-sdk\";\n *\n * export default definePlugin({\n * async setup(ctx) {\n * ctx.logger.info(\"Plugin started\");\n * ctx.events.on(\"issue.created\", async (event) => {\n * // handle event\n * });\n * },\n *\n * async onHealth() {\n * return { status: \"ok\" };\n * },\n * });\n * ```\n *\n * @see PLUGIN_SPEC.md \u00A714.1 \u2014 Example SDK Shape\n */\nexport function definePlugin(definition: PluginDefinition): PaperclipPlugin {\n return Object.freeze({ definition });\n}\n", "var util;\n(function (util) {\n util.assertEqual = (val) => val;\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\" && isFinite(val) && Math.floor(val) === val;\n function joinValues(array, separator = \" | \") {\n return array\n .map((val) => (typeof val === \"string\" ? `'${val}'` : val))\n .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 || (util = {}));\nvar objectUtil;\n(function (objectUtil) {\n objectUtil.mergeShapes = (first, second) => {\n return {\n ...first,\n ...second, // second overwrites first\n };\n };\n})(objectUtil || (objectUtil = {}));\nconst 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 ZodParsedType.undefined;\n case \"string\":\n return ZodParsedType.string;\n case \"number\":\n return isNaN(data) ? ZodParsedType.nan : ZodParsedType.number;\n case \"boolean\":\n return ZodParsedType.boolean;\n case \"function\":\n return ZodParsedType.function;\n case \"bigint\":\n return ZodParsedType.bigint;\n case \"symbol\":\n return ZodParsedType.symbol;\n case \"object\":\n if (Array.isArray(data)) {\n return ZodParsedType.array;\n }\n if (data === null) {\n return ZodParsedType.null;\n }\n if (data.then &&\n typeof data.then === \"function\" &&\n data.catch &&\n typeof data.catch === \"function\") {\n return ZodParsedType.promise;\n }\n if (typeof Map !== \"undefined\" && data instanceof Map) {\n return ZodParsedType.map;\n }\n if (typeof Set !== \"undefined\" && data instanceof Set) {\n return ZodParsedType.set;\n }\n if (typeof Date !== \"undefined\" && data instanceof Date) {\n return ZodParsedType.date;\n }\n return ZodParsedType.object;\n default:\n return ZodParsedType.unknown;\n }\n};\n\nconst ZodIssueCode = 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};\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.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 fieldErrors[sub.path[0]] = fieldErrors[sub.path[0]] || [];\n fieldErrors[sub.path[0]].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}\nZodError.create = (issues) => {\n const error = new ZodError(issues);\n return error;\n};\n\nconst errorMap = (issue, _ctx) => {\n let message;\n switch (issue.code) {\n case ZodIssueCode.invalid_type:\n if (issue.received === ZodParsedType.undefined) {\n message = \"Required\";\n }\n else {\n message = `Expected ${issue.expected}, received ${issue.received}`;\n }\n break;\n case ZodIssueCode.invalid_literal:\n message = `Invalid literal value, expected ${JSON.stringify(issue.expected, util.jsonStringifyReplacer)}`;\n break;\n case ZodIssueCode.unrecognized_keys:\n message = `Unrecognized key(s) in object: ${util.joinValues(issue.keys, \", \")}`;\n break;\n case ZodIssueCode.invalid_union:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_union_discriminator:\n message = `Invalid discriminator value. Expected ${util.joinValues(issue.options)}`;\n break;\n case ZodIssueCode.invalid_enum_value:\n message = `Invalid enum value. Expected ${util.joinValues(issue.options)}, received '${issue.received}'`;\n break;\n case ZodIssueCode.invalid_arguments:\n message = `Invalid function arguments`;\n break;\n case ZodIssueCode.invalid_return_type:\n message = `Invalid function return type`;\n break;\n case ZodIssueCode.invalid_date:\n message = `Invalid date`;\n break;\n case 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.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 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\n ? `exactly equal to `\n : issue.inclusive\n ? `greater than or equal to `\n : `greater than `}${issue.minimum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact\n ? `exactly equal to `\n : issue.inclusive\n ? `greater than or equal to `\n : `greater than `}${new Date(Number(issue.minimum))}`;\n else\n message = \"Invalid input\";\n break;\n case 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\n ? `exactly`\n : issue.inclusive\n ? `less than or equal to`\n : `less than`} ${issue.maximum}`;\n else if (issue.type === \"bigint\")\n message = `BigInt must be ${issue.exact\n ? `exactly`\n : issue.inclusive\n ? `less than or equal to`\n : `less than`} ${issue.maximum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact\n ? `exactly`\n : issue.inclusive\n ? `smaller than or equal to`\n : `smaller than`} ${new Date(Number(issue.maximum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.custom:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_intersection_types:\n message = `Intersection results could not be merged`;\n break;\n case ZodIssueCode.not_multiple_of:\n message = `Number must be a multiple of ${issue.multipleOf}`;\n break;\n case ZodIssueCode.not_finite:\n message = \"Number must be finite\";\n break;\n default:\n message = _ctx.defaultError;\n util.assertNever(issue);\n }\n return { message };\n};\n\nlet overrideErrorMap = errorMap;\nfunction setErrorMap(map) {\n overrideErrorMap = map;\n}\nfunction getErrorMap() {\n return overrideErrorMap;\n}\n\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};\nconst EMPTY_PATH = [];\nfunction addIssueToContext(ctx, issueData) {\n const overrideMap = getErrorMap();\n const issue = 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 === errorMap ? undefined : errorMap, // 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 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 INVALID;\n if (value.status === \"aborted\")\n return INVALID;\n if (key.status === \"dirty\")\n status.dirty();\n if (value.status === \"dirty\")\n status.dirty();\n if (key.value !== \"__proto__\" &&\n (typeof value.value !== \"undefined\" || pair.alwaysSet)) {\n finalObject[key.value] = value.value;\n }\n }\n return { status: status.value, value: finalObject };\n }\n}\nconst INVALID = Object.freeze({\n status: \"aborted\",\n});\nconst DIRTY = (value) => ({ status: \"dirty\", value });\nconst OK = (value) => ({ status: \"valid\", value });\nconst isAborted = (x) => x.status === \"aborted\";\nconst isDirty = (x) => x.status === \"dirty\";\nconst isValid = (x) => x.status === \"valid\";\nconst isAsync = (x) => typeof Promise !== \"undefined\" && x instanceof Promise;\n\n/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n\r\nfunction __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nfunction __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\ntypeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\n\nvar errorUtil;\n(function (errorUtil) {\n errorUtil.errToObj = (message) => typeof message === \"string\" ? { message } : message || {};\n errorUtil.toString = (message) => typeof message === \"string\" ? message : message === null || message === void 0 ? void 0 : message.message;\n})(errorUtil || (errorUtil = {}));\n\nvar _ZodEnum_cache, _ZodNativeEnum_cache;\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 (this._key instanceof Array) {\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 (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(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 var _a, _b;\n const { message } = params;\n if (iss.code === \"invalid_enum_value\") {\n return { message: message !== null && message !== void 0 ? message : ctx.defaultError };\n }\n if (typeof ctx.data === \"undefined\") {\n return { message: (_a = message !== null && message !== void 0 ? message : required_error) !== null && _a !== void 0 ? _a : ctx.defaultError };\n }\n if (iss.code !== \"invalid_type\")\n return { message: ctx.defaultError };\n return { message: (_b = message !== null && message !== void 0 ? message : invalid_type_error) !== null && _b !== void 0 ? _b : 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 getParsedType(input.data);\n }\n _getOrReturnCtx(input, ctx) {\n return (ctx || {\n common: input.parent.common,\n data: input.data,\n parsedType: 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 ParseStatus(),\n ctx: {\n common: input.parent.common,\n data: input.data,\n parsedType: 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 (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 var _a;\n const ctx = {\n common: {\n issues: [],\n async: (_a = params === null || params === void 0 ? void 0 : params.async) !== null && _a !== void 0 ? _a : false,\n contextualErrorMap: params === null || params === void 0 ? void 0 : params.errorMap,\n },\n path: (params === null || params === void 0 ? void 0 : params.path) || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const result = this._parseSync({ data, path: ctx.path, parent: ctx });\n return handleResult(ctx, result);\n }\n \"~validate\"(data) {\n var _a, _b;\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: getParsedType(data),\n };\n if (!this[\"~standard\"].async) {\n try {\n const result = this._parseSync({ data, path: [], parent: ctx });\n return isValid(result)\n ? {\n value: result.value,\n }\n : {\n issues: ctx.common.issues,\n };\n }\n catch (err) {\n if ((_b = (_a = err === null || err === void 0 ? void 0 : err.message) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === null || _b === void 0 ? void 0 : _b.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) => 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 === null || params === void 0 ? void 0 : params.errorMap,\n async: true,\n },\n path: (params === null || params === void 0 ? void 0 : params.path) || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const maybeAsyncResult = this._parse({ data, path: ctx.path, parent: ctx });\n const result = await (isAsync(maybeAsyncResult)\n ? maybeAsyncResult\n : 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: 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\"\n ? refinementData(val, ctx)\n : 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}\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.!#$%&\u2019*+/=?^_`{|}~-]+@[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 regex = `\\\\d{2}:\\\\d{2}:\\\\d{2}`;\n let regex = `([01]\\\\d|2[0-3]):[0-5]\\\\d:[0-5]\\\\d`;\n if (args.precision) {\n regex = `${regex}\\\\.\\\\d{${args.precision}}`;\n }\n else if (args.precision == null) {\n regex = `${regex}(\\\\.\\\\d+)?`;\n }\n return regex;\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 // 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 (!decoded.typ || !decoded.alg)\n return false;\n if (alg && decoded.alg !== alg)\n return false;\n return true;\n }\n catch (_a) {\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 !== ZodParsedType.string) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.string,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const status = new 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 addIssueToContext(ctx, {\n code: 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 addIssueToContext(ctx, {\n code: 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 addIssueToContext(ctx, {\n code: 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 addIssueToContext(ctx, {\n code: 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 addIssueToContext(ctx, {\n validation: \"email\",\n code: 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 addIssueToContext(ctx, {\n validation: \"emoji\",\n code: 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 addIssueToContext(ctx, {\n validation: \"uuid\",\n code: 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 addIssueToContext(ctx, {\n validation: \"nanoid\",\n code: 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 addIssueToContext(ctx, {\n validation: \"cuid\",\n code: 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 addIssueToContext(ctx, {\n validation: \"cuid2\",\n code: 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 addIssueToContext(ctx, {\n validation: \"ulid\",\n code: 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 (_a) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"url\",\n code: 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 addIssueToContext(ctx, {\n validation: \"regex\",\n code: 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 addIssueToContext(ctx, {\n code: 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 addIssueToContext(ctx, {\n code: 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 addIssueToContext(ctx, {\n code: 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 addIssueToContext(ctx, {\n code: 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 addIssueToContext(ctx, {\n code: 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 addIssueToContext(ctx, {\n code: 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 addIssueToContext(ctx, {\n validation: \"duration\",\n code: 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 addIssueToContext(ctx, {\n validation: \"ip\",\n code: 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 addIssueToContext(ctx, {\n validation: \"jwt\",\n code: 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 addIssueToContext(ctx, {\n validation: \"cidr\",\n code: 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 addIssueToContext(ctx, {\n validation: \"base64\",\n code: 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 addIssueToContext(ctx, {\n validation: \"base64url\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n 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: ZodIssueCode.invalid_string,\n ...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.errToObj(message) });\n }\n url(message) {\n return this._addCheck({ kind: \"url\", ...errorUtil.errToObj(message) });\n }\n emoji(message) {\n return this._addCheck({ kind: \"emoji\", ...errorUtil.errToObj(message) });\n }\n uuid(message) {\n return this._addCheck({ kind: \"uuid\", ...errorUtil.errToObj(message) });\n }\n nanoid(message) {\n return this._addCheck({ kind: \"nanoid\", ...errorUtil.errToObj(message) });\n }\n cuid(message) {\n return this._addCheck({ kind: \"cuid\", ...errorUtil.errToObj(message) });\n }\n cuid2(message) {\n return this._addCheck({ kind: \"cuid2\", ...errorUtil.errToObj(message) });\n }\n ulid(message) {\n return this._addCheck({ kind: \"ulid\", ...errorUtil.errToObj(message) });\n }\n base64(message) {\n return this._addCheck({ kind: \"base64\", ...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.errToObj(message),\n });\n }\n jwt(options) {\n return this._addCheck({ kind: \"jwt\", ...errorUtil.errToObj(options) });\n }\n ip(options) {\n return this._addCheck({ kind: \"ip\", ...errorUtil.errToObj(options) });\n }\n cidr(options) {\n return this._addCheck({ kind: \"cidr\", ...errorUtil.errToObj(options) });\n }\n datetime(options) {\n var _a, _b;\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 === null || options === void 0 ? void 0 : options.precision) === \"undefined\" ? null : options === null || options === void 0 ? void 0 : options.precision,\n offset: (_a = options === null || options === void 0 ? void 0 : options.offset) !== null && _a !== void 0 ? _a : false,\n local: (_b = options === null || options === void 0 ? void 0 : options.local) !== null && _b !== void 0 ? _b : false,\n ...errorUtil.errToObj(options === null || options === void 0 ? void 0 : 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 === null || options === void 0 ? void 0 : options.precision) === \"undefined\" ? null : options === null || options === void 0 ? void 0 : options.precision,\n ...errorUtil.errToObj(options === null || options === void 0 ? void 0 : options.message),\n });\n }\n duration(message) {\n return this._addCheck({ kind: \"duration\", ...errorUtil.errToObj(message) });\n }\n regex(regex, message) {\n return this._addCheck({\n kind: \"regex\",\n regex: regex,\n ...errorUtil.errToObj(message),\n });\n }\n includes(value, options) {\n return this._addCheck({\n kind: \"includes\",\n value: value,\n position: options === null || options === void 0 ? void 0 : options.position,\n ...errorUtil.errToObj(options === null || options === void 0 ? void 0 : options.message),\n });\n }\n startsWith(value, message) {\n return this._addCheck({\n kind: \"startsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n endsWith(value, message) {\n return this._addCheck({\n kind: \"endsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n min(minLength, message) {\n return this._addCheck({\n kind: \"min\",\n value: minLength,\n ...errorUtil.errToObj(message),\n });\n }\n max(maxLength, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxLength,\n ...errorUtil.errToObj(message),\n });\n }\n length(len, message) {\n return this._addCheck({\n kind: \"length\",\n value: len,\n ...errorUtil.errToObj(message),\n });\n }\n /**\n * Equivalent to `.min(1)`\n */\n nonempty(message) {\n return this.min(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}\nZodString.create = (params) => {\n var _a;\n return new ZodString({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodString,\n coerce: (_a = params === null || params === void 0 ? void 0 : params.coerce) !== null && _a !== void 0 ? _a : 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 = parseInt(val.toFixed(decCount).replace(\".\", \"\"));\n const stepInt = parseInt(step.toFixed(decCount).replace(\".\", \"\"));\n return (valInt % stepInt) / Math.pow(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 !== ZodParsedType.number) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.number,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"int\") {\n if (!util.isInteger(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: 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\n ? input.data < check.value\n : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: 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\n ? input.data > check.value\n : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: 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 addIssueToContext(ctx, {\n code: 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 addIssueToContext(ctx, {\n code: ZodIssueCode.not_finite,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n 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.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, 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.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.toString(message),\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value: value,\n message: errorUtil.toString(message),\n });\n }\n finite(message) {\n return this._addCheck({\n kind: \"finite\",\n message: 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.toString(message),\n })._addCheck({\n kind: \"max\",\n inclusive: true,\n value: Number.MAX_SAFE_INTEGER,\n message: 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\" ||\n (ch.kind === \"multipleOf\" && util.isInteger(ch.value)));\n }\n get isFinite() {\n let max = null, min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"finite\" ||\n ch.kind === \"int\" ||\n 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}\nZodNumber.create = (params) => {\n return new ZodNumber({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodNumber,\n coerce: (params === null || params === void 0 ? void 0 : 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 (_a) {\n return this._getInvalidInput(input);\n }\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.bigint) {\n return this._getInvalidInput(input);\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n const tooSmall = check.inclusive\n ? input.data < check.value\n : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: 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\n ? input.data > check.value\n : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: 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 addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _getInvalidInput(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.bigint,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, 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.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.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: false,\n message: 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.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value,\n message: 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}\nZodBigInt.create = (params) => {\n var _a;\n return new ZodBigInt({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodBigInt,\n coerce: (_a = params === null || params === void 0 ? void 0 : params.coerce) !== null && _a !== void 0 ? _a : 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 !== ZodParsedType.boolean) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.boolean,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodBoolean.create = (params) => {\n return new ZodBoolean({\n typeName: ZodFirstPartyTypeKind.ZodBoolean,\n coerce: (params === null || params === void 0 ? void 0 : 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 !== ZodParsedType.date) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.date,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (isNaN(input.data.getTime())) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_date,\n });\n return INVALID;\n }\n const status = new 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 addIssueToContext(ctx, {\n code: 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 addIssueToContext(ctx, {\n code: 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.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.toString(message),\n });\n }\n max(maxDate, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxDate.getTime(),\n message: 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}\nZodDate.create = (params) => {\n return new ZodDate({\n checks: [],\n coerce: (params === null || params === void 0 ? void 0 : 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 !== ZodParsedType.symbol) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.symbol,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\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 !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.undefined,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\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 !== ZodParsedType.null) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.null,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\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 OK(input.data);\n }\n}\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 OK(input.data);\n }\n}\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 addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.never,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n}\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 !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.void,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\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 !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return 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 addIssueToContext(ctx, {\n code: tooBig ? ZodIssueCode.too_big : 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 addIssueToContext(ctx, {\n code: 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 addIssueToContext(ctx, {\n code: 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 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 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.toString(message) },\n });\n }\n max(maxLength, message) {\n return new ZodArray({\n ...this._def,\n maxLength: { value: maxLength, message: errorUtil.toString(message) },\n });\n }\n length(len, message) {\n return new ZodArray({\n ...this._def,\n exactLength: { value: len, message: errorUtil.toString(message) },\n });\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\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.objectKeys(shape);\n return (this._cached = { shape, keys });\n }\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.object) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return 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 &&\n 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 addIssueToContext(ctx, {\n code: ZodIssueCode.unrecognized_keys,\n keys: extraKeys,\n });\n status.dirty();\n }\n }\n else if (unknownKeys === \"strip\") ;\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 ParseStatus.mergeObjectSync(status, syncPairs);\n });\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get shape() {\n return this._def.shape();\n }\n strict(message) {\n errorUtil.errToObj;\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strict\",\n ...(message !== undefined\n ? {\n errorMap: (issue, ctx) => {\n var _a, _b, _c, _d;\n const defaultError = (_c = (_b = (_a = this._def).errorMap) === null || _b === void 0 ? void 0 : _b.call(_a, issue, ctx).message) !== null && _c !== void 0 ? _c : ctx.defaultError;\n if (issue.code === \"unrecognized_keys\")\n return {\n message: (_d = errorUtil.errToObj(message).message) !== null && _d !== void 0 ? _d : 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 util.objectKeys(mask).forEach((key) => {\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 util.objectKeys(this.shape).forEach((key) => {\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 util.objectKeys(this.shape).forEach((key) => {\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 util.objectKeys(this.shape).forEach((key) => {\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.objectKeys(this.shape));\n }\n}\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(result.ctx.common.issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return 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(issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n }\n get options() {\n return this._def.options;\n }\n}\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.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 !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const discriminator = this.discriminator;\n const discriminatorValue = ctx.data[discriminator];\n const option = this.optionsMap.get(discriminatorValue);\n if (!option) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union_discriminator,\n options: Array.from(this.optionsMap.keys()),\n path: [discriminator],\n });\n return 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}\nfunction mergeValues(a, b) {\n const aType = getParsedType(a);\n const bType = getParsedType(b);\n if (a === b) {\n return { valid: true, data: a };\n }\n else if (aType === ZodParsedType.object && bType === ZodParsedType.object) {\n const bKeys = util.objectKeys(b);\n const sharedKeys = util\n .objectKeys(a)\n .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 === ZodParsedType.array && bType === 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 === ZodParsedType.date &&\n bType === ZodParsedType.date &&\n +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 (isAborted(parsedLeft) || isAborted(parsedRight)) {\n return INVALID;\n }\n const merged = mergeValues(parsedLeft.value, parsedRight.value);\n if (!merged.valid) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_intersection_types,\n });\n return INVALID;\n }\n if (isDirty(parsedLeft) || 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}\nZodIntersection.create = (left, right, params) => {\n return new ZodIntersection({\n left: left,\n right: right,\n typeName: ZodFirstPartyTypeKind.ZodIntersection,\n ...processCreateParams(params),\n });\n};\nclass ZodTuple extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (ctx.data.length < this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n return INVALID;\n }\n const rest = this._def.rest;\n if (!rest && ctx.data.length > this._def.items.length) {\n addIssueToContext(ctx, {\n code: 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 ParseStatus.mergeArray(status, results);\n });\n }\n else {\n return 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}\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 !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return 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 ParseStatus.mergeObjectAsync(status, pairs);\n }\n else {\n return 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}\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 !== ZodParsedType.map) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.map,\n received: ctx.parsedType,\n });\n return 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 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 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}\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 !== ZodParsedType.set) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.set,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const def = this._def;\n if (def.minSize !== null) {\n if (ctx.data.size < def.minSize.value) {\n addIssueToContext(ctx, {\n code: 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 addIssueToContext(ctx, {\n code: 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 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.toString(message) },\n });\n }\n max(maxSize, message) {\n return new ZodSet({\n ...this._def,\n maxSize: { value: maxSize, message: 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}\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 !== ZodParsedType.function) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.function,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n function makeArgsIssue(args, error) {\n return makeIssue({\n data: args,\n path: ctx.path,\n errorMaps: [\n ctx.common.contextualErrorMap,\n ctx.schemaErrorMap,\n getErrorMap(),\n errorMap,\n ].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_arguments,\n argumentsError: error,\n },\n });\n }\n function makeReturnsIssue(returns, error) {\n return makeIssue({\n data: returns,\n path: ctx.path,\n errorMaps: [\n ctx.common.contextualErrorMap,\n ctx.schemaErrorMap,\n getErrorMap(),\n errorMap,\n ].filter((x) => !!x),\n issueData: {\n code: 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 OK(async function (...args) {\n const error = new ZodError([]);\n const parsedArgs = await me._def.args\n .parseAsync(args, params)\n .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 OK(function (...args) {\n const parsedArgs = me._def.args.safeParse(args, params);\n if (!parsedArgs.success) {\n throw new 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([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\n ? args\n : ZodTuple.create([]).rest(ZodUnknown.create())),\n returns: returns || ZodUnknown.create(),\n typeName: ZodFirstPartyTypeKind.ZodFunction,\n ...processCreateParams(params),\n });\n }\n}\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}\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 addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_literal,\n expected: this._def.value,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n get value() {\n return this._def.value;\n }\n}\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 constructor() {\n super(...arguments);\n _ZodEnum_cache.set(this, void 0);\n }\n _parse(input) {\n if (typeof input.data !== \"string\") {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (!__classPrivateFieldGet(this, _ZodEnum_cache, \"f\")) {\n __classPrivateFieldSet(this, _ZodEnum_cache, new Set(this._def.values), \"f\");\n }\n if (!__classPrivateFieldGet(this, _ZodEnum_cache, \"f\").has(input.data)) {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return 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}\n_ZodEnum_cache = new WeakMap();\nZodEnum.create = createZodEnum;\nclass ZodNativeEnum extends ZodType {\n constructor() {\n super(...arguments);\n _ZodNativeEnum_cache.set(this, void 0);\n }\n _parse(input) {\n const nativeEnumValues = util.getValidEnumValues(this._def.values);\n const ctx = this._getOrReturnCtx(input);\n if (ctx.parsedType !== ZodParsedType.string &&\n ctx.parsedType !== ZodParsedType.number) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (!__classPrivateFieldGet(this, _ZodNativeEnum_cache, \"f\")) {\n __classPrivateFieldSet(this, _ZodNativeEnum_cache, new Set(util.getValidEnumValues(this._def.values)), \"f\");\n }\n if (!__classPrivateFieldGet(this, _ZodNativeEnum_cache, \"f\").has(input.data)) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get enum() {\n return this._def.values;\n }\n}\n_ZodNativeEnum_cache = new WeakMap();\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 !== ZodParsedType.promise &&\n ctx.common.async === false) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.promise,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const promisified = ctx.parsedType === ZodParsedType.promise\n ? ctx.data\n : Promise.resolve(ctx.data);\n return OK(promisified.then((data) => {\n return this._def.type.parseAsync(data, {\n path: ctx.path,\n errorMap: ctx.common.contextualErrorMap,\n });\n }));\n }\n}\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 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 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 INVALID;\n if (result.status === \"dirty\")\n return DIRTY(result.value);\n if (status.value === \"dirty\")\n return DIRTY(result.value);\n return result;\n });\n }\n else {\n if (status.value === \"aborted\")\n return 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 INVALID;\n if (result.status === \"dirty\")\n return DIRTY(result.value);\n if (status.value === \"dirty\")\n return 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 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\n ._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx })\n .then((inner) => {\n if (inner.status === \"aborted\")\n return 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 (!isValid(base))\n return base;\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\n ._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx })\n .then((base) => {\n if (!isValid(base))\n return base;\n return Promise.resolve(effect.transform(base.value, checkCtx)).then((result) => ({ status: status.value, value: result }));\n });\n }\n }\n util.assertNever(effect);\n }\n}\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 === ZodParsedType.undefined) {\n return OK(undefined);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\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 === ZodParsedType.null) {\n return OK(null);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\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 === 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}\nZodDefault.create = (type, params) => {\n return new ZodDefault({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n defaultValue: typeof params.default === \"function\"\n ? params.default\n : () => 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 (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(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(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n }\n }\n removeCatch() {\n return this._def.innerType;\n }\n}\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 !== ZodParsedType.nan) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.nan,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n}\nZodNaN.create = (params) => {\n return new ZodNaN({\n typeName: ZodFirstPartyTypeKind.ZodNaN,\n ...processCreateParams(params),\n });\n};\nconst 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}\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 INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return 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 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}\nclass ZodReadonly extends ZodType {\n _parse(input) {\n const result = this._def.innerType._parse(input);\n const freeze = (data) => {\n if (isValid(data)) {\n data.value = Object.freeze(data.value);\n }\n return data;\n };\n return isAsync(result)\n ? result.then((data) => freeze(data))\n : freeze(result);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\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\"\n ? params(data)\n : typeof params === \"string\"\n ? { message: params }\n : 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 var _a, _b;\n const r = check(data);\n if (r instanceof Promise) {\n return r.then((r) => {\n var _a, _b;\n if (!r) {\n const params = cleanParams(_params, data);\n const _fatal = (_b = (_a = params.fatal) !== null && _a !== void 0 ? _a : fatal) !== null && _b !== void 0 ? _b : true;\n ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n }\n });\n }\n if (!r) {\n const params = cleanParams(_params, data);\n const _fatal = (_b = (_a = params.fatal) !== null && _a !== void 0 ? _a : fatal) !== null && _b !== void 0 ? _b : true;\n ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n }\n return;\n });\n return ZodAny.create();\n}\nconst 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 || (ZodFirstPartyTypeKind = {}));\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);\nconst stringType = ZodString.create;\nconst numberType = ZodNumber.create;\nconst nanType = ZodNaN.create;\nconst bigIntType = ZodBigInt.create;\nconst booleanType = ZodBoolean.create;\nconst dateType = ZodDate.create;\nconst symbolType = ZodSymbol.create;\nconst undefinedType = ZodUndefined.create;\nconst nullType = ZodNull.create;\nconst anyType = ZodAny.create;\nconst unknownType = ZodUnknown.create;\nconst neverType = ZodNever.create;\nconst voidType = ZodVoid.create;\nconst arrayType = ZodArray.create;\nconst objectType = ZodObject.create;\nconst strictObjectType = ZodObject.strictCreate;\nconst unionType = ZodUnion.create;\nconst discriminatedUnionType = ZodDiscriminatedUnion.create;\nconst intersectionType = ZodIntersection.create;\nconst tupleType = ZodTuple.create;\nconst recordType = ZodRecord.create;\nconst mapType = ZodMap.create;\nconst setType = ZodSet.create;\nconst functionType = ZodFunction.create;\nconst lazyType = ZodLazy.create;\nconst literalType = ZodLiteral.create;\nconst enumType = ZodEnum.create;\nconst nativeEnumType = ZodNativeEnum.create;\nconst promiseType = ZodPromise.create;\nconst effectsType = ZodEffects.create;\nconst optionalType = ZodOptional.create;\nconst nullableType = ZodNullable.create;\nconst preprocessType = ZodEffects.createWithPreprocess;\nconst pipelineType = ZodPipeline.create;\nconst ostring = () => stringType().optional();\nconst onumber = () => numberType().optional();\nconst oboolean = () => booleanType().optional();\nconst 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};\nconst NEVER = INVALID;\n\nvar z = /*#__PURE__*/Object.freeze({\n __proto__: null,\n defaultErrorMap: errorMap,\n setErrorMap: setErrorMap,\n getErrorMap: getErrorMap,\n makeIssue: makeIssue,\n EMPTY_PATH: EMPTY_PATH,\n addIssueToContext: addIssueToContext,\n ParseStatus: ParseStatus,\n INVALID: INVALID,\n DIRTY: DIRTY,\n OK: OK,\n isAborted: isAborted,\n isDirty: isDirty,\n isValid: isValid,\n isAsync: isAsync,\n get util () { return util; },\n get objectUtil () { return objectUtil; },\n ZodParsedType: ZodParsedType,\n getParsedType: getParsedType,\n ZodType: ZodType,\n datetimeRegex: datetimeRegex,\n ZodString: ZodString,\n ZodNumber: ZodNumber,\n ZodBigInt: ZodBigInt,\n ZodBoolean: ZodBoolean,\n ZodDate: ZodDate,\n ZodSymbol: ZodSymbol,\n ZodUndefined: ZodUndefined,\n ZodNull: ZodNull,\n ZodAny: ZodAny,\n ZodUnknown: ZodUnknown,\n ZodNever: ZodNever,\n ZodVoid: ZodVoid,\n ZodArray: ZodArray,\n ZodObject: ZodObject,\n ZodUnion: ZodUnion,\n ZodDiscriminatedUnion: ZodDiscriminatedUnion,\n ZodIntersection: ZodIntersection,\n ZodTuple: ZodTuple,\n ZodRecord: ZodRecord,\n ZodMap: ZodMap,\n ZodSet: ZodSet,\n ZodFunction: ZodFunction,\n ZodLazy: ZodLazy,\n ZodLiteral: ZodLiteral,\n ZodEnum: ZodEnum,\n ZodNativeEnum: ZodNativeEnum,\n ZodPromise: ZodPromise,\n ZodEffects: ZodEffects,\n ZodTransformer: ZodEffects,\n ZodOptional: ZodOptional,\n ZodNullable: ZodNullable,\n ZodDefault: ZodDefault,\n ZodCatch: ZodCatch,\n ZodNaN: ZodNaN,\n BRAND: BRAND,\n ZodBranded: ZodBranded,\n ZodPipeline: ZodPipeline,\n ZodReadonly: ZodReadonly,\n custom: custom,\n Schema: ZodType,\n ZodSchema: ZodType,\n late: late,\n get ZodFirstPartyTypeKind () { return ZodFirstPartyTypeKind; },\n coerce: coerce,\n any: anyType,\n array: arrayType,\n bigint: bigIntType,\n boolean: booleanType,\n date: dateType,\n discriminatedUnion: discriminatedUnionType,\n effect: effectsType,\n 'enum': enumType,\n 'function': functionType,\n 'instanceof': instanceOfType,\n intersection: intersectionType,\n lazy: lazyType,\n literal: literalType,\n map: mapType,\n nan: nanType,\n nativeEnum: nativeEnumType,\n never: neverType,\n 'null': nullType,\n nullable: nullableType,\n number: numberType,\n object: objectType,\n oboolean: oboolean,\n onumber: onumber,\n optional: optionalType,\n ostring: ostring,\n pipeline: pipelineType,\n preprocess: preprocessType,\n promise: promiseType,\n record: recordType,\n set: setType,\n strictObject: strictObjectType,\n string: stringType,\n symbol: symbolType,\n transformer: effectsType,\n tuple: tupleType,\n 'undefined': undefinedType,\n union: unionType,\n unknown: unknownType,\n 'void': voidType,\n NEVER: NEVER,\n ZodIssueCode: ZodIssueCode,\n quotelessJson: quotelessJson,\n ZodError: ZodError\n});\n\nexport { BRAND, DIRTY, EMPTY_PATH, INVALID, NEVER, OK, ParseStatus, ZodType as Schema, ZodAny, ZodArray, ZodBigInt, ZodBoolean, ZodBranded, ZodCatch, ZodDate, ZodDefault, ZodDiscriminatedUnion, ZodEffects, ZodEnum, ZodError, ZodFirstPartyTypeKind, ZodFunction, ZodIntersection, ZodIssueCode, ZodLazy, ZodLiteral, ZodMap, ZodNaN, ZodNativeEnum, ZodNever, ZodNull, ZodNullable, ZodNumber, ZodObject, ZodOptional, ZodParsedType, ZodPipeline, ZodPromise, ZodReadonly, ZodRecord, ZodType as ZodSchema, ZodSet, ZodString, ZodSymbol, ZodEffects as ZodTransformer, ZodTuple, ZodType, ZodUndefined, ZodUnion, ZodUnknown, ZodVoid, addIssueToContext, anyType as any, arrayType as array, bigIntType as bigint, booleanType as boolean, coerce, custom, dateType as date, datetimeRegex, z as default, errorMap as defaultErrorMap, discriminatedUnionType as discriminatedUnion, effectsType as effect, enumType as enum, functionType as function, getErrorMap, getParsedType, instanceOfType as instanceof, intersectionType as intersection, isAborted, isAsync, isDirty, isValid, late, lazyType as lazy, literalType as literal, makeIssue, mapType as map, nanType as nan, nativeEnumType as nativeEnum, neverType as never, nullType as null, nullableType as nullable, numberType as number, objectType as object, objectUtil, oboolean, onumber, optionalType as optional, ostring, pipelineType as pipeline, preprocessType as preprocess, promiseType as promise, quotelessJson, recordType as record, setType as set, setErrorMap, strictObjectType as strictObject, stringType as string, symbolType as symbol, effectsType as transformer, tupleType as tuple, undefinedType as undefined, unionType as union, unknownType as unknown, util, voidType as void, z };\n", "export const COMPANY_STATUSES = [\"active\", \"paused\", \"archived\"] as const;\nexport type CompanyStatus = (typeof COMPANY_STATUSES)[number];\n\nexport const DEFAULT_COMPANY_ATTACHMENT_MAX_BYTES = 10 * 1024 * 1024;\nexport const MAX_COMPANY_ATTACHMENT_MAX_BYTES = 1024 * 1024 * 1024;\n\nexport const DEPLOYMENT_MODES = [\"local_trusted\", \"authenticated\"] as const;\nexport type DeploymentMode = (typeof DEPLOYMENT_MODES)[number];\n\nexport const DEPLOYMENT_EXPOSURES = [\"private\", \"public\"] as const;\nexport type DeploymentExposure = (typeof DEPLOYMENT_EXPOSURES)[number];\n\nexport const BIND_MODES = [\"loopback\", \"lan\", \"tailnet\", \"custom\"] as const;\nexport type BindMode = (typeof BIND_MODES)[number];\n\nexport const AUTH_BASE_URL_MODES = [\"auto\", \"explicit\"] as const;\nexport type AuthBaseUrlMode = (typeof AUTH_BASE_URL_MODES)[number];\n\nexport const AGENT_STATUSES = [\n \"active\",\n \"paused\",\n \"idle\",\n \"running\",\n \"error\",\n \"pending_approval\",\n \"terminated\",\n] as const;\nexport type AgentStatus = (typeof AGENT_STATUSES)[number];\n\nexport const AGENT_ADAPTER_TYPES = [\n \"process\",\n \"http\",\n \"acpx_local\",\n \"claude_local\",\n \"codex_local\",\n \"cursor_cloud\",\n \"gemini_local\",\n \"opencode_local\",\n \"pi_local\",\n \"cursor\",\n \"openclaw_gateway\",\n] as const;\nexport type AgentAdapterType = (typeof AGENT_ADAPTER_TYPES)[number] | (string & {});\n\nexport const AGENT_ROLES = [\n \"ceo\",\n \"cto\",\n \"cmo\",\n \"cfo\",\n \"security\",\n \"engineer\",\n \"designer\",\n \"pm\",\n \"qa\",\n \"devops\",\n \"researcher\",\n \"general\",\n] as const;\nexport type AgentRole = (typeof AGENT_ROLES)[number];\n\nexport const AGENT_ROLE_LABELS: Record<AgentRole, string> = {\n ceo: \"CEO\",\n cto: \"CTO\",\n cmo: \"CMO\",\n cfo: \"CFO\",\n security: \"Security\",\n engineer: \"Engineer\",\n designer: \"Designer\",\n pm: \"PM\",\n qa: \"QA\",\n devops: \"DevOps\",\n researcher: \"Researcher\",\n general: \"General\",\n};\n\nexport const AGENT_DEFAULT_MAX_CONCURRENT_RUNS = 20;\nexport const WORKSPACE_BRANCH_ROUTINE_VARIABLE = \"workspaceBranch\";\n\nexport const MODEL_PROFILE_KEYS = [\"cheap\"] as const;\nexport type ModelProfileKey = (typeof MODEL_PROFILE_KEYS)[number];\n\nexport const AGENT_ICON_NAMES = [\n \"bot\",\n \"cpu\",\n \"brain\",\n \"zap\",\n \"rocket\",\n \"code\",\n \"terminal\",\n \"shield\",\n \"eye\",\n \"search\",\n \"wrench\",\n \"hammer\",\n \"lightbulb\",\n \"sparkles\",\n \"star\",\n \"heart\",\n \"flame\",\n \"bug\",\n \"cog\",\n \"database\",\n \"globe\",\n \"lock\",\n \"mail\",\n \"message-square\",\n \"file-code\",\n \"git-branch\",\n \"package\",\n \"puzzle\",\n \"target\",\n \"wand\",\n \"atom\",\n \"circuit-board\",\n \"radar\",\n \"swords\",\n \"telescope\",\n \"microscope\",\n \"crown\",\n \"gem\",\n \"hexagon\",\n \"pentagon\",\n \"fingerprint\",\n] as const;\nexport type AgentIconName = (typeof AGENT_ICON_NAMES)[number];\n\nexport const ISSUE_STATUSES = [\n \"backlog\",\n \"todo\",\n \"in_progress\",\n \"in_review\",\n \"done\",\n \"blocked\",\n \"cancelled\",\n] as const;\nexport type IssueStatus = (typeof ISSUE_STATUSES)[number];\n\nexport const INBOX_MINE_ISSUE_STATUSES = [\n \"backlog\",\n \"todo\",\n \"in_progress\",\n \"in_review\",\n \"blocked\",\n \"done\",\n] as const;\nexport const INBOX_MINE_ISSUE_STATUS_FILTER = INBOX_MINE_ISSUE_STATUSES.join(\",\");\n\nexport const ISSUE_PRIORITIES = [\"critical\", \"high\", \"medium\", \"low\"] as const;\nexport type IssuePriority = (typeof ISSUE_PRIORITIES)[number];\nexport const ISSUE_WORK_MODES = [\"standard\", \"planning\"] as const;\nexport type IssueWorkMode = (typeof ISSUE_WORK_MODES)[number];\nexport const MAX_ISSUE_REQUEST_DEPTH = 1024;\n\nexport const ISSUE_COMMENT_AUTHOR_TYPES = [\"user\", \"agent\", \"system\"] as const;\nexport type IssueCommentAuthorType = (typeof ISSUE_COMMENT_AUTHOR_TYPES)[number];\n\nexport const ISSUE_COMMENT_PRESENTATION_KINDS = [\"message\", \"system_notice\"] as const;\nexport type IssueCommentPresentationKind = (typeof ISSUE_COMMENT_PRESENTATION_KINDS)[number];\n\nexport const ISSUE_COMMENT_PRESENTATION_TONES = [\"neutral\", \"info\", \"success\", \"warning\", \"danger\"] as const;\nexport type IssueCommentPresentationTone = (typeof ISSUE_COMMENT_PRESENTATION_TONES)[number];\n\nexport const ISSUE_COMMENT_METADATA_ROW_TYPES = [\n \"text\",\n \"code\",\n \"key_value\",\n \"issue_link\",\n \"agent_link\",\n \"run_link\",\n] as const;\nexport type IssueCommentMetadataRowType = (typeof ISSUE_COMMENT_METADATA_ROW_TYPES)[number];\n\nexport function clampIssueRequestDepth(value: number | null | undefined): number {\n if (typeof value !== \"number\" || !Number.isFinite(value)) return 0;\n return Math.min(MAX_ISSUE_REQUEST_DEPTH, Math.max(0, Math.floor(value)));\n}\n\nexport const ISSUE_THREAD_INTERACTION_KINDS = [\n \"suggest_tasks\",\n \"ask_user_questions\",\n \"request_confirmation\",\n] as const;\nexport type IssueThreadInteractionKind = (typeof ISSUE_THREAD_INTERACTION_KINDS)[number];\n\nexport const ISSUE_THREAD_INTERACTION_STATUSES = [\n \"pending\",\n \"accepted\",\n \"rejected\",\n \"answered\",\n \"cancelled\",\n \"expired\",\n \"failed\",\n] as const;\nexport type IssueThreadInteractionStatus = (typeof ISSUE_THREAD_INTERACTION_STATUSES)[number];\n\nexport const ISSUE_THREAD_INTERACTION_CONTINUATION_POLICIES = [\n \"none\",\n \"wake_assignee\",\n \"wake_assignee_on_accept\",\n] as const;\nexport type IssueThreadInteractionContinuationPolicy =\n (typeof ISSUE_THREAD_INTERACTION_CONTINUATION_POLICIES)[number];\n\nexport const ISSUE_ORIGIN_KINDS = [\n \"manual\",\n \"routine_execution\",\n \"stale_active_run_evaluation\",\n \"harness_liveness_escalation\",\n \"issue_productivity_review\",\n \"stranded_issue_recovery\",\n] as const;\nexport type BuiltInIssueOriginKind = (typeof ISSUE_ORIGIN_KINDS)[number];\nexport type PluginIssueOriginKind = `plugin:${string}`;\nexport type IssueOriginKind = BuiltInIssueOriginKind | PluginIssueOriginKind;\nexport const ISSUE_SURFACE_VISIBILITIES = [\"default\", \"plugin_operation\"] as const;\nexport type IssueSurfaceVisibility = (typeof ISSUE_SURFACE_VISIBILITIES)[number];\n\nexport const ISSUE_RECOVERY_ACTION_KINDS = [\n \"missing_disposition\",\n \"stranded_assigned_issue\",\n \"active_run_watchdog\",\n \"issue_graph_liveness\",\n] as const;\nexport type IssueRecoveryActionKind = (typeof ISSUE_RECOVERY_ACTION_KINDS)[number];\n\nexport const ISSUE_RECOVERY_ACTION_STATUSES = [\n \"active\",\n \"escalated\",\n \"resolved\",\n \"cancelled\",\n] as const;\nexport type IssueRecoveryActionStatus = (typeof ISSUE_RECOVERY_ACTION_STATUSES)[number];\n\nexport const ISSUE_RECOVERY_ACTION_OWNER_TYPES = [\n \"agent\",\n \"user\",\n \"board\",\n \"system\",\n] as const;\nexport type IssueRecoveryActionOwnerType = (typeof ISSUE_RECOVERY_ACTION_OWNER_TYPES)[number];\n\nexport const ISSUE_RECOVERY_ACTION_OUTCOMES = [\n \"restored\",\n \"delegated\",\n \"false_positive\",\n \"blocked\",\n \"escalated\",\n \"cancelled\",\n] as const;\nexport type IssueRecoveryActionOutcome = (typeof ISSUE_RECOVERY_ACTION_OUTCOMES)[number];\n\nexport function pluginOperationIssueOriginKind(pluginKey: string): PluginIssueOriginKind {\n return `plugin:${pluginKey}:operation`;\n}\n\nexport function isPluginOperationIssueOriginKind(originKind: string | null | undefined): boolean {\n return typeof originKind === \"string\" && /^plugin:[^:]+:operation(?::|$)/.test(originKind);\n}\n\nexport const ISSUE_RELATION_TYPES = [\"blocks\"] as const;\nexport type IssueRelationType = (typeof ISSUE_RELATION_TYPES)[number];\n\nexport const ISSUE_TREE_CONTROL_MODES = [\"pause\", \"resume\", \"cancel\", \"restore\"] as const;\nexport type IssueTreeControlMode = (typeof ISSUE_TREE_CONTROL_MODES)[number];\n\nexport const ISSUE_TREE_HOLD_STATUSES = [\"active\", \"released\"] as const;\nexport type IssueTreeHoldStatus = (typeof ISSUE_TREE_HOLD_STATUSES)[number];\n\nexport const ISSUE_TREE_HOLD_RELEASE_POLICY_STRATEGIES = [\"manual\", \"after_active_runs_finish\"] as const;\nexport type IssueTreeHoldReleasePolicyStrategy = (typeof ISSUE_TREE_HOLD_RELEASE_POLICY_STRATEGIES)[number];\n\nexport const ISSUE_CONTINUATION_SUMMARY_DOCUMENT_KEY = \"continuation-summary\" as const;\nexport const SYSTEM_ISSUE_DOCUMENT_KEYS = [ISSUE_CONTINUATION_SUMMARY_DOCUMENT_KEY] as const;\nexport type SystemIssueDocumentKey = (typeof SYSTEM_ISSUE_DOCUMENT_KEYS)[number];\n\nconst SYSTEM_ISSUE_DOCUMENT_KEY_SET = new Set<string>(SYSTEM_ISSUE_DOCUMENT_KEYS);\n\nexport function isSystemIssueDocumentKey(key: string): key is SystemIssueDocumentKey {\n return SYSTEM_ISSUE_DOCUMENT_KEY_SET.has(key);\n}\nexport const ISSUE_REFERENCE_SOURCE_KINDS = [\"title\", \"description\", \"comment\", \"document\"] as const;\nexport type IssueReferenceSourceKind = (typeof ISSUE_REFERENCE_SOURCE_KINDS)[number];\n\nexport const ISSUE_EXECUTION_POLICY_MODES = [\"normal\", \"auto\"] as const;\nexport type IssueExecutionPolicyMode = (typeof ISSUE_EXECUTION_POLICY_MODES)[number];\n\nexport const ISSUE_EXECUTION_STAGE_TYPES = [\"review\", \"approval\"] as const;\nexport type IssueExecutionStageType = (typeof ISSUE_EXECUTION_STAGE_TYPES)[number];\n\nexport const ISSUE_MONITOR_SCHEDULED_BY = [\"assignee\", \"board\"] as const;\nexport type IssueMonitorScheduledBy = (typeof ISSUE_MONITOR_SCHEDULED_BY)[number];\n\nexport const ISSUE_EXECUTION_MONITOR_KINDS = [\"external_service\"] as const;\nexport type IssueExecutionMonitorKind = (typeof ISSUE_EXECUTION_MONITOR_KINDS)[number];\n\nexport const ISSUE_EXECUTION_MONITOR_RECOVERY_POLICIES = [\n \"wake_owner\",\n \"create_recovery_issue\",\n \"escalate_to_board\",\n] as const;\nexport type IssueExecutionMonitorRecoveryPolicy =\n (typeof ISSUE_EXECUTION_MONITOR_RECOVERY_POLICIES)[number];\n\nexport const ISSUE_EXECUTION_STATE_STATUSES = [\"idle\", \"pending\", \"changes_requested\", \"completed\"] as const;\nexport type IssueExecutionStateStatus = (typeof ISSUE_EXECUTION_STATE_STATUSES)[number];\n\nexport const ISSUE_EXECUTION_MONITOR_STATE_STATUSES = [\"scheduled\", \"triggered\", \"cleared\"] as const;\nexport type IssueExecutionMonitorStateStatus = (typeof ISSUE_EXECUTION_MONITOR_STATE_STATUSES)[number];\n\nexport const ISSUE_EXECUTION_MONITOR_CLEAR_REASONS = [\n \"manual\",\n \"triggered\",\n \"done\",\n \"cancelled\",\n \"invalid_status\",\n \"invalid_assignee\",\n \"dispatch_skipped\",\n \"timeout_exceeded\",\n \"max_attempts_exhausted\",\n] as const;\nexport type IssueExecutionMonitorClearReason = (typeof ISSUE_EXECUTION_MONITOR_CLEAR_REASONS)[number];\n\nexport const ISSUE_EXECUTION_DECISION_OUTCOMES = [\"approved\", \"changes_requested\"] as const;\nexport type IssueExecutionDecisionOutcome = (typeof ISSUE_EXECUTION_DECISION_OUTCOMES)[number];\n\nexport const GOAL_LEVELS = [\"company\", \"team\", \"agent\", \"task\"] as const;\nexport type GoalLevel = (typeof GOAL_LEVELS)[number];\n\nexport const GOAL_STATUSES = [\"planned\", \"active\", \"achieved\", \"cancelled\"] as const;\nexport type GoalStatus = (typeof GOAL_STATUSES)[number];\n\nexport const PROJECT_STATUSES = [\n \"backlog\",\n \"planned\",\n \"in_progress\",\n \"completed\",\n \"cancelled\",\n] as const;\nexport type ProjectStatus = (typeof PROJECT_STATUSES)[number];\n\nexport const ENVIRONMENT_DRIVERS = [\"local\", \"ssh\", \"sandbox\", \"plugin\"] as const;\nexport type EnvironmentDriver = (typeof ENVIRONMENT_DRIVERS)[number];\n\nexport const ENVIRONMENT_STATUSES = [\"active\", \"archived\"] as const;\nexport type EnvironmentStatus = (typeof ENVIRONMENT_STATUSES)[number];\n\nexport const ENVIRONMENT_LEASE_STATUSES = [\"active\", \"released\", \"expired\", \"failed\", \"retained\"] as const;\nexport type EnvironmentLeaseStatus = (typeof ENVIRONMENT_LEASE_STATUSES)[number];\n\nexport const ENVIRONMENT_LEASE_POLICIES = [\n \"ephemeral\",\n \"reuse_by_environment\",\n \"reuse_by_execution_workspace\",\n \"retain_on_failure\",\n] as const;\nexport type EnvironmentLeasePolicy = (typeof ENVIRONMENT_LEASE_POLICIES)[number];\n\nexport const ENVIRONMENT_LEASE_CLEANUP_STATUSES = [\"pending\", \"success\", \"failed\"] as const;\nexport type EnvironmentLeaseCleanupStatus = (typeof ENVIRONMENT_LEASE_CLEANUP_STATUSES)[number];\n\nexport const ROUTINE_STATUSES = [\"active\", \"paused\", \"archived\"] as const;\nexport type RoutineStatus = (typeof ROUTINE_STATUSES)[number];\n\nexport const ROUTINE_CONCURRENCY_POLICIES = [\"coalesce_if_active\", \"always_enqueue\", \"skip_if_active\"] as const;\nexport type RoutineConcurrencyPolicy = (typeof ROUTINE_CONCURRENCY_POLICIES)[number];\n\nexport const ROUTINE_CATCH_UP_POLICIES = [\"skip_missed\", \"enqueue_missed_with_cap\"] as const;\nexport type RoutineCatchUpPolicy = (typeof ROUTINE_CATCH_UP_POLICIES)[number];\n\nexport const ROUTINE_TRIGGER_KINDS = [\"schedule\", \"webhook\", \"api\"] as const;\nexport type RoutineTriggerKind = (typeof ROUTINE_TRIGGER_KINDS)[number];\n\nexport const ROUTINE_TRIGGER_SIGNING_MODES = [\"bearer\", \"hmac_sha256\", \"github_hmac\", \"none\"] as const;\nexport type RoutineTriggerSigningMode = (typeof ROUTINE_TRIGGER_SIGNING_MODES)[number];\n\nexport const ROUTINE_VARIABLE_TYPES = [\"text\", \"textarea\", \"number\", \"boolean\", \"select\"] as const;\nexport type RoutineVariableType = (typeof ROUTINE_VARIABLE_TYPES)[number];\n\nexport const ROUTINE_RUN_STATUSES = [\n \"received\",\n \"coalesced\",\n \"skipped\",\n \"issue_created\",\n \"completed\",\n \"failed\",\n ] as const;\nexport type RoutineRunStatus = (typeof ROUTINE_RUN_STATUSES)[number];\n\nexport const ROUTINE_RUN_SOURCES = [\"schedule\", \"manual\", \"api\", \"webhook\"] as const;\nexport type RoutineRunSource = (typeof ROUTINE_RUN_SOURCES)[number];\n\nexport const PAUSE_REASONS = [\"manual\", \"budget\", \"system\"] as const;\nexport type PauseReason = (typeof PAUSE_REASONS)[number];\n\nexport const PROJECT_COLORS = [\n \"#6366f1\", // indigo\n \"#8b5cf6\", // violet\n \"#ec4899\", // pink\n \"#ef4444\", // red\n \"#f97316\", // orange\n \"#eab308\", // yellow\n \"#22c55e\", // green\n \"#14b8a6\", // teal\n \"#06b6d4\", // cyan\n \"#3b82f6\", // blue\n] as const;\n\nexport const APPROVAL_TYPES = [\n \"hire_agent\",\n \"approve_ceo_strategy\",\n \"budget_override_required\",\n \"request_board_approval\",\n] as const;\nexport type ApprovalType = (typeof APPROVAL_TYPES)[number];\n\nexport const APPROVAL_STATUSES = [\n \"pending\",\n \"revision_requested\",\n \"approved\",\n \"rejected\",\n \"cancelled\",\n] as const;\nexport type ApprovalStatus = (typeof APPROVAL_STATUSES)[number];\n\nexport const SECRET_PROVIDERS = [\n \"local_encrypted\",\n \"aws_secrets_manager\",\n \"gcp_secret_manager\",\n \"vault\",\n] as const;\nexport type SecretProvider = (typeof SECRET_PROVIDERS)[number];\n\nexport const SECRET_PROVIDER_CONFIG_STATUSES = [\n \"ready\",\n \"warning\",\n \"coming_soon\",\n \"disabled\",\n] as const;\nexport type SecretProviderConfigStatus = (typeof SECRET_PROVIDER_CONFIG_STATUSES)[number];\n\nexport const SECRET_PROVIDER_CONFIG_HEALTH_STATUSES = [\n \"ready\",\n \"warning\",\n \"error\",\n \"coming_soon\",\n \"disabled\",\n] as const;\nexport type SecretProviderConfigHealthStatus =\n (typeof SECRET_PROVIDER_CONFIG_HEALTH_STATUSES)[number];\n\nexport const SECRET_STATUSES = [\"active\", \"disabled\", \"archived\", \"deleted\"] as const;\nexport type SecretStatus = (typeof SECRET_STATUSES)[number];\n\nexport const SECRET_MANAGED_MODES = [\"paperclip_managed\", \"external_reference\"] as const;\nexport type SecretManagedMode = (typeof SECRET_MANAGED_MODES)[number];\n\nexport const SECRET_VERSION_STATUSES = [\n \"current\",\n \"previous\",\n \"disabled\",\n \"destroyed\",\n \"failed\",\n] as const;\nexport type SecretVersionStatus = (typeof SECRET_VERSION_STATUSES)[number];\n\nexport const SECRET_BINDING_TARGET_TYPES = [\n \"agent\",\n \"project\",\n \"environment\",\n \"routine\",\n \"plugin\",\n \"issue\",\n \"run\",\n \"system\",\n] as const;\nexport type SecretBindingTargetType = (typeof SECRET_BINDING_TARGET_TYPES)[number];\n\nexport const SECRET_ACCESS_OUTCOMES = [\"success\", \"failure\"] as const;\nexport type SecretAccessOutcome = (typeof SECRET_ACCESS_OUTCOMES)[number];\n\nexport const STORAGE_PROVIDERS = [\"local_disk\", \"s3\"] as const;\nexport type StorageProvider = (typeof STORAGE_PROVIDERS)[number];\n\nexport const BILLING_TYPES = [\n \"metered_api\",\n \"subscription_included\",\n \"subscription_overage\",\n \"credits\",\n \"fixed\",\n \"unknown\",\n] as const;\nexport type BillingType = (typeof BILLING_TYPES)[number];\n\nexport const FINANCE_EVENT_KINDS = [\n \"inference_charge\",\n \"platform_fee\",\n \"credit_purchase\",\n \"credit_refund\",\n \"credit_expiry\",\n \"byok_fee\",\n \"gateway_overhead\",\n \"log_storage_charge\",\n \"logpush_charge\",\n \"provisioned_capacity_charge\",\n \"training_charge\",\n \"custom_model_import_charge\",\n \"custom_model_storage_charge\",\n \"manual_adjustment\",\n] as const;\nexport type FinanceEventKind = (typeof FINANCE_EVENT_KINDS)[number];\n\nexport const FINANCE_DIRECTIONS = [\"debit\", \"credit\"] as const;\nexport type FinanceDirection = (typeof FINANCE_DIRECTIONS)[number];\n\nexport const FINANCE_UNITS = [\n \"input_token\",\n \"output_token\",\n \"cached_input_token\",\n \"request\",\n \"credit_usd\",\n \"credit_unit\",\n \"model_unit_minute\",\n \"model_unit_hour\",\n \"gb_month\",\n \"train_token\",\n \"unknown\",\n] as const;\nexport type FinanceUnit = (typeof FINANCE_UNITS)[number];\n\nexport const BUDGET_SCOPE_TYPES = [\"company\", \"agent\", \"project\"] as const;\nexport type BudgetScopeType = (typeof BUDGET_SCOPE_TYPES)[number];\n\nexport const BUDGET_METRICS = [\"billed_cents\"] as const;\nexport type BudgetMetric = (typeof BUDGET_METRICS)[number];\n\nexport const BUDGET_WINDOW_KINDS = [\"calendar_month_utc\", \"lifetime\"] as const;\nexport type BudgetWindowKind = (typeof BUDGET_WINDOW_KINDS)[number];\n\nexport const BUDGET_THRESHOLD_TYPES = [\"soft\", \"hard\"] as const;\nexport type BudgetThresholdType = (typeof BUDGET_THRESHOLD_TYPES)[number];\n\nexport const BUDGET_INCIDENT_STATUSES = [\"open\", \"resolved\", \"dismissed\"] as const;\nexport type BudgetIncidentStatus = (typeof BUDGET_INCIDENT_STATUSES)[number];\n\nexport const BUDGET_INCIDENT_RESOLUTION_ACTIONS = [\n \"keep_paused\",\n \"raise_budget_and_resume\",\n] as const;\nexport type BudgetIncidentResolutionAction = (typeof BUDGET_INCIDENT_RESOLUTION_ACTIONS)[number];\n\nexport const HEARTBEAT_INVOCATION_SOURCES = [\n \"timer\",\n \"assignment\",\n \"on_demand\",\n \"automation\",\n] as const;\nexport type HeartbeatInvocationSource = (typeof HEARTBEAT_INVOCATION_SOURCES)[number];\n\nexport const WAKEUP_TRIGGER_DETAILS = [\"manual\", \"ping\", \"callback\", \"system\"] as const;\nexport type WakeupTriggerDetail = (typeof WAKEUP_TRIGGER_DETAILS)[number];\n\nexport const WAKEUP_REQUEST_STATUSES = [\n \"queued\",\n \"deferred_issue_execution\",\n \"claimed\",\n \"coalesced\",\n \"skipped\",\n \"completed\",\n \"failed\",\n \"cancelled\",\n] as const;\nexport type WakeupRequestStatus = (typeof WAKEUP_REQUEST_STATUSES)[number];\n\nexport const HEARTBEAT_RUN_STATUSES = [\n \"queued\",\n \"scheduled_retry\",\n \"running\",\n \"succeeded\",\n \"failed\",\n \"cancelled\",\n \"timed_out\",\n] as const;\nexport type HeartbeatRunStatus = (typeof HEARTBEAT_RUN_STATUSES)[number];\n\nexport const RUN_LIVENESS_STATES = [\n \"completed\",\n \"advanced\",\n \"plan_only\",\n \"empty_response\",\n \"blocked\",\n \"failed\",\n \"needs_followup\",\n] as const;\nexport type RunLivenessState = (typeof RUN_LIVENESS_STATES)[number];\n\nexport const LIVE_EVENT_TYPES = [\n \"heartbeat.run.queued\",\n \"heartbeat.run.status\",\n \"heartbeat.run.event\",\n \"heartbeat.run.log\",\n \"agent.status\",\n \"activity.logged\",\n \"plugin.ui.updated\",\n \"plugin.worker.crashed\",\n \"plugin.worker.restarted\",\n] as const;\nexport type LiveEventType = (typeof LIVE_EVENT_TYPES)[number];\n\nexport const PRINCIPAL_TYPES = [\"user\", \"agent\"] as const;\nexport type PrincipalType = (typeof PRINCIPAL_TYPES)[number];\n\nexport const MEMBERSHIP_STATUSES = [\"pending\", \"active\", \"suspended\", \"archived\"] as const;\nexport type MembershipStatus = (typeof MEMBERSHIP_STATUSES)[number];\n\nexport const COMPANY_MEMBERSHIP_ROLES = [\n \"owner\",\n \"admin\",\n \"operator\",\n \"viewer\",\n \"member\",\n] as const;\nexport type CompanyMembershipRole = (typeof COMPANY_MEMBERSHIP_ROLES)[number];\n\nexport const HUMAN_COMPANY_MEMBERSHIP_ROLES = [\n \"owner\",\n \"admin\",\n \"operator\",\n \"viewer\",\n] as const;\nexport type HumanCompanyMembershipRole = (typeof HUMAN_COMPANY_MEMBERSHIP_ROLES)[number];\n\nexport const HUMAN_COMPANY_MEMBERSHIP_ROLE_LABELS: Record<HumanCompanyMembershipRole, string> = {\n owner: \"Owner\",\n admin: \"Admin\",\n operator: \"Operator\",\n viewer: \"Viewer\",\n};\n\nexport const INSTANCE_USER_ROLES = [\"instance_admin\"] as const;\nexport type InstanceUserRole = (typeof INSTANCE_USER_ROLES)[number];\n\nexport const INVITE_TYPES = [\"company_join\", \"bootstrap_ceo\"] as const;\nexport type InviteType = (typeof INVITE_TYPES)[number];\n\nexport const INVITE_JOIN_TYPES = [\"human\", \"agent\", \"both\"] as const;\nexport type InviteJoinType = (typeof INVITE_JOIN_TYPES)[number];\n\nexport const JOIN_REQUEST_TYPES = [\"human\", \"agent\"] as const;\nexport type JoinRequestType = (typeof JOIN_REQUEST_TYPES)[number];\n\nexport const JOIN_REQUEST_STATUSES = [\"pending_approval\", \"approved\", \"rejected\"] as const;\nexport type JoinRequestStatus = (typeof JOIN_REQUEST_STATUSES)[number];\n\nexport const PERMISSION_KEYS = [\n \"agents:create\",\n \"environments:manage\",\n \"users:invite\",\n \"users:manage_permissions\",\n \"tasks:assign\",\n \"tasks:assign_scope\",\n \"tasks:manage_active_checkouts\",\n \"joins:approve\",\n] as const;\nexport type PermissionKey = (typeof PERMISSION_KEYS)[number];\n\n// ---------------------------------------------------------------------------\n// Plugin System \u2014 see doc/plugins/PLUGIN_SPEC.md for the full specification\n// ---------------------------------------------------------------------------\n\n/**\n * The current version of the Plugin API contract.\n *\n * Increment this value whenever a breaking change is made to the plugin API\n * so that the host can reject incompatible plugin manifests.\n *\n * @see PLUGIN_SPEC.md \u00A74 \u2014 Versioning\n */\nexport const PLUGIN_API_VERSION = 1 as const;\n\n/**\n * Lifecycle statuses for an installed plugin.\n *\n * State machine: installed \u2192 ready | error, ready \u2192 disabled | error | upgrade_pending | uninstalled,\n * disabled \u2192 ready | uninstalled, error \u2192 ready | uninstalled,\n * upgrade_pending \u2192 ready | error | uninstalled, uninstalled \u2192 installed (reinstall).\n *\n * @see {@link PluginStatus} \u2014 inferred union type\n * @see PLUGIN_SPEC.md \u00A721.3 `plugins.status`\n */\nexport const PLUGIN_STATUSES = [\n \"installed\",\n \"ready\",\n \"disabled\",\n \"error\",\n \"upgrade_pending\",\n \"uninstalled\",\n] as const;\nexport type PluginStatus = (typeof PLUGIN_STATUSES)[number];\n\n/**\n * Plugin classification categories. A plugin declares one or more categories\n * in its manifest to describe its primary purpose.\n *\n * @see PLUGIN_SPEC.md \u00A76.2\n */\nexport const PLUGIN_CATEGORIES = [\n \"connector\",\n \"workspace\",\n \"automation\",\n \"ui\",\n] as const;\nexport type PluginCategory = (typeof PLUGIN_CATEGORIES)[number];\n\n/**\n * Named permissions the host grants to a plugin. Plugins declare required\n * capabilities in their manifest; the host enforces them at runtime via the\n * plugin capability validator.\n *\n * Grouped into: Data Read, Data Write, Plugin State, Runtime/Integration,\n * Agent Tools, and UI.\n *\n * @see PLUGIN_SPEC.md \u00A715 \u2014 Capability Model\n */\nexport const PLUGIN_CAPABILITIES = [\n // Data Read\n \"companies.read\",\n \"projects.read\",\n \"project.workspaces.read\",\n \"issues.read\",\n \"issue.relations.read\",\n \"issue.subtree.read\",\n \"issue.comments.read\",\n \"issue.documents.read\",\n \"agents.read\",\n \"goals.read\",\n \"goals.create\",\n \"goals.update\",\n \"activity.read\",\n \"costs.read\",\n \"issues.orchestration.read\",\n \"database.namespace.read\",\n // Data Write\n \"issues.create\",\n \"issues.update\",\n \"issue.relations.write\",\n \"issues.checkout\",\n \"issues.wakeup\",\n \"issue.comments.create\",\n \"issue.attachments.create\",\n \"issue.interactions.create\",\n \"issue.documents.write\",\n \"projects.managed\",\n \"routines.managed\",\n \"skills.managed\",\n \"agents.pause\",\n \"agents.resume\",\n \"agents.invoke\",\n \"agents.managed\",\n \"agent.sessions.create\",\n \"agent.sessions.list\",\n \"agent.sessions.send\",\n \"agent.sessions.close\",\n \"activity.log.write\",\n \"metrics.write\",\n \"telemetry.track\",\n \"database.namespace.migrate\",\n \"database.namespace.write\",\n // Plugin State\n \"plugin.state.read\",\n \"plugin.state.write\",\n // Runtime / Integration\n \"events.subscribe\",\n \"events.emit\",\n \"jobs.schedule\",\n \"webhooks.receive\",\n \"api.routes.register\",\n \"auth.sso.register\",\n \"http.outbound\",\n \"secrets.read-ref\",\n \"environment.drivers.register\",\n \"local.folders\",\n // Agent Tools\n \"agent.tools.register\",\n // UI\n \"instance.settings.register\",\n \"ui.sidebar.register\",\n \"ui.page.register\",\n \"ui.detailTab.register\",\n \"ui.dashboardWidget.register\",\n \"ui.commentAnnotation.register\",\n \"ui.action.register\",\n] as const;\nexport type PluginCapability = (typeof PLUGIN_CAPABILITIES)[number];\n\nexport const PLUGIN_DATABASE_NAMESPACE_MODES = [\"schema\"] as const;\nexport type PluginDatabaseNamespaceMode = (typeof PLUGIN_DATABASE_NAMESPACE_MODES)[number];\n\nexport const PLUGIN_DATABASE_NAMESPACE_STATUSES = [\n \"active\",\n \"migration_failed\",\n] as const;\nexport type PluginDatabaseNamespaceStatus = (typeof PLUGIN_DATABASE_NAMESPACE_STATUSES)[number];\n\nexport const PLUGIN_DATABASE_MIGRATION_STATUSES = [\n \"applied\",\n \"failed\",\n] as const;\nexport type PluginDatabaseMigrationStatus = (typeof PLUGIN_DATABASE_MIGRATION_STATUSES)[number];\n\nexport const PLUGIN_DATABASE_CORE_READ_TABLES = [\n \"companies\",\n \"projects\",\n \"goals\",\n \"agents\",\n \"issues\",\n \"issue_documents\",\n \"issue_relations\",\n \"issue_comments\",\n \"heartbeat_runs\",\n \"cost_events\",\n \"approvals\",\n \"issue_approvals\",\n \"budget_incidents\",\n] as const;\nexport type PluginDatabaseCoreReadTable = (typeof PLUGIN_DATABASE_CORE_READ_TABLES)[number];\n\nexport const PLUGIN_API_ROUTE_METHODS = [\"GET\", \"POST\", \"PATCH\", \"DELETE\"] as const;\nexport type PluginApiRouteMethod = (typeof PLUGIN_API_ROUTE_METHODS)[number];\n\nexport const PLUGIN_API_ROUTE_AUTH_MODES = [\"board\", \"agent\", \"board-or-agent\", \"webhook\"] as const;\nexport type PluginApiRouteAuthMode = (typeof PLUGIN_API_ROUTE_AUTH_MODES)[number];\n\nexport const PLUGIN_API_ROUTE_CHECKOUT_POLICIES = [\n \"none\",\n \"required-for-agent-in-progress\",\n \"always-for-agent\",\n] as const;\nexport type PluginApiRouteCheckoutPolicy = (typeof PLUGIN_API_ROUTE_CHECKOUT_POLICIES)[number];\n\n/**\n * UI extension slot types. Each slot type corresponds to a mount point in the\n * Paperclip UI where plugin components can be rendered.\n *\n * @see PLUGIN_SPEC.md \u00A719 \u2014 UI Extension Model\n */\nexport const PLUGIN_UI_SLOT_TYPES = [\n \"page\",\n \"detailTab\",\n \"taskDetailView\",\n \"dashboardWidget\",\n \"sidebar\",\n \"routeSidebar\",\n \"sidebarPanel\",\n \"projectSidebarItem\",\n \"globalToolbarButton\",\n \"toolbarButton\",\n \"contextMenuItem\",\n \"commentAnnotation\",\n \"commentContextMenuItem\",\n \"settingsPage\",\n] as const;\nexport type PluginUiSlotType = (typeof PLUGIN_UI_SLOT_TYPES)[number];\n\n/**\n * Reserved company-scoped route segments that plugin page routes may not claim.\n *\n * These map to first-class host pages under `/:companyPrefix/...`.\n */\nexport const PLUGIN_RESERVED_COMPANY_ROUTE_SEGMENTS = [\n \"dashboard\",\n \"onboarding\",\n \"companies\",\n \"company\",\n \"settings\",\n \"plugins\",\n \"org\",\n \"agents\",\n \"projects\",\n \"issues\",\n \"goals\",\n \"approvals\",\n \"costs\",\n \"activity\",\n \"inbox\",\n \"design-guide\",\n \"tests\",\n] as const;\nexport type PluginReservedCompanyRouteSegment =\n (typeof PLUGIN_RESERVED_COMPANY_ROUTE_SEGMENTS)[number];\n\n/**\n * Launcher placement zones describe where a plugin-owned launcher can appear\n * in the host UI. These are intentionally aligned with current slot surfaces\n * so manifest authors can describe launch intent without coupling to a single\n * component implementation detail.\n */\nexport const PLUGIN_LAUNCHER_PLACEMENT_ZONES = [\n \"page\",\n \"detailTab\",\n \"taskDetailView\",\n \"dashboardWidget\",\n \"sidebar\",\n \"sidebarPanel\",\n \"projectSidebarItem\",\n \"globalToolbarButton\",\n \"toolbarButton\",\n \"contextMenuItem\",\n \"commentAnnotation\",\n \"commentContextMenuItem\",\n \"settingsPage\",\n] as const;\nexport type PluginLauncherPlacementZone = (typeof PLUGIN_LAUNCHER_PLACEMENT_ZONES)[number];\n\n/**\n * Launcher action kinds describe what the launcher does when activated.\n */\nexport const PLUGIN_LAUNCHER_ACTIONS = [\n \"navigate\",\n \"openModal\",\n \"openDrawer\",\n \"openPopover\",\n \"performAction\",\n \"deepLink\",\n] as const;\nexport type PluginLauncherAction = (typeof PLUGIN_LAUNCHER_ACTIONS)[number];\n\n/**\n * Optional size hints the host can use when rendering plugin-owned launcher\n * destinations such as overlays, drawers, or full page handoffs.\n */\nexport const PLUGIN_LAUNCHER_BOUNDS = [\n \"inline\",\n \"compact\",\n \"default\",\n \"wide\",\n \"full\",\n] as const;\nexport type PluginLauncherBounds = (typeof PLUGIN_LAUNCHER_BOUNDS)[number];\n\n/**\n * Render environments describe the container a launcher expects after it is\n * activated. The current host may map these to concrete UI primitives.\n */\nexport const PLUGIN_LAUNCHER_RENDER_ENVIRONMENTS = [\n \"hostInline\",\n \"hostOverlay\",\n \"hostRoute\",\n \"external\",\n \"iframe\",\n] as const;\nexport type PluginLauncherRenderEnvironment =\n (typeof PLUGIN_LAUNCHER_RENDER_ENVIRONMENTS)[number];\n\n/**\n * Entity types that a `detailTab` UI slot can attach to.\n *\n * @see PLUGIN_SPEC.md \u00A719.3 \u2014 Detail Tabs\n */\nexport const PLUGIN_UI_SLOT_ENTITY_TYPES = [\n \"project\",\n \"issue\",\n \"agent\",\n \"goal\",\n \"run\",\n \"comment\",\n] as const;\nexport type PluginUiSlotEntityType = (typeof PLUGIN_UI_SLOT_ENTITY_TYPES)[number];\n\n/**\n * Scope kinds for plugin state storage. Determines the granularity at which\n * a plugin stores key-value state data.\n *\n * @see PLUGIN_SPEC.md \u00A721.3 `plugin_state.scope_kind`\n */\nexport const PLUGIN_STATE_SCOPE_KINDS = [\n \"instance\",\n \"company\",\n \"project\",\n \"project_workspace\",\n \"agent\",\n \"issue\",\n \"goal\",\n \"run\",\n] as const;\nexport type PluginStateScopeKind = (typeof PLUGIN_STATE_SCOPE_KINDS)[number];\n\n/** Statuses for a plugin's scheduled job definition. */\nexport const PLUGIN_JOB_STATUSES = [\n \"active\",\n \"paused\",\n \"failed\",\n] as const;\nexport type PluginJobStatus = (typeof PLUGIN_JOB_STATUSES)[number];\n\n/** Statuses for individual job run executions. */\nexport const PLUGIN_JOB_RUN_STATUSES = [\n \"pending\",\n \"queued\",\n \"running\",\n \"succeeded\",\n \"failed\",\n \"cancelled\",\n] as const;\nexport type PluginJobRunStatus = (typeof PLUGIN_JOB_RUN_STATUSES)[number];\n\n/** What triggered a particular job run. */\nexport const PLUGIN_JOB_RUN_TRIGGERS = [\n \"schedule\",\n \"manual\",\n \"retry\",\n] as const;\nexport type PluginJobRunTrigger = (typeof PLUGIN_JOB_RUN_TRIGGERS)[number];\n\n/** Statuses for inbound webhook deliveries. */\nexport const PLUGIN_WEBHOOK_DELIVERY_STATUSES = [\n \"pending\",\n \"success\",\n \"failed\",\n] as const;\nexport type PluginWebhookDeliveryStatus = (typeof PLUGIN_WEBHOOK_DELIVERY_STATUSES)[number];\n\n/**\n * Core domain event types that plugins can subscribe to via the\n * `events.subscribe` capability.\n *\n * @see PLUGIN_SPEC.md \u00A716 \u2014 Event System\n */\nexport const PLUGIN_EVENT_TYPES = [\n \"company.created\",\n \"company.updated\",\n \"project.created\",\n \"project.updated\",\n \"project.workspace_created\",\n \"project.workspace_updated\",\n \"project.workspace_deleted\",\n \"issue.created\",\n \"issue.updated\",\n \"issue.comment.created\",\n \"issue.document.created\",\n \"issue.document.updated\",\n \"issue.document.deleted\",\n \"issue.relations.updated\",\n \"issue.checked_out\",\n \"issue.released\",\n \"issue.assignment_wakeup_requested\",\n \"agent.created\",\n \"agent.updated\",\n \"agent.status_changed\",\n \"agent.run.started\",\n \"agent.run.finished\",\n \"agent.run.failed\",\n \"agent.run.cancelled\",\n \"goal.created\",\n \"goal.updated\",\n \"approval.created\",\n \"approval.decided\",\n \"budget.incident.opened\",\n \"budget.incident.resolved\",\n \"cost_event.created\",\n \"activity.logged\",\n] as const;\nexport type PluginEventType = (typeof PLUGIN_EVENT_TYPES)[number];\n\n/**\n * Error codes returned by the plugin bridge when a UI \u2192 worker call fails.\n *\n * @see PLUGIN_SPEC.md \u00A719.7 \u2014 Error Propagation Through The Bridge\n */\nexport const PLUGIN_BRIDGE_ERROR_CODES = [\n \"WORKER_UNAVAILABLE\",\n \"CAPABILITY_DENIED\",\n \"WORKER_ERROR\",\n \"TIMEOUT\",\n \"UNKNOWN\",\n] as const;\nexport type PluginBridgeErrorCode = (typeof PLUGIN_BRIDGE_ERROR_CODES)[number];\n", "import { z } from \"zod\";\nimport { AGENT_ADAPTER_TYPES } from \"./constants.js\";\n\nexport const agentAdapterTypeSchema = z\n .string()\n .trim()\n .min(1)\n .default(\"process\")\n .describe(`Known built-in adapters: ${AGENT_ADAPTER_TYPES.join(\", \")}. External adapters may register additional non-empty string types at runtime.`);\n\nexport const optionalAgentAdapterTypeSchema = z\n .string()\n .trim()\n .min(1)\n .optional();\n", "import type { BindMode, DeploymentExposure, DeploymentMode } from \"./constants.js\";\n\nexport const LOOPBACK_BIND_HOST = \"127.0.0.1\";\nexport const ALL_INTERFACES_BIND_HOST = \"0.0.0.0\";\n\nfunction normalizeHost(host: string | null | undefined): string | undefined {\n const trimmed = host?.trim();\n return trimmed ? trimmed : undefined;\n}\n\nexport function isLoopbackHost(host: string | null | undefined): boolean {\n const normalized = normalizeHost(host)?.toLowerCase();\n return normalized === \"127.0.0.1\" || normalized === \"localhost\" || normalized === \"::1\";\n}\n\nexport function isAllInterfacesHost(host: string | null | undefined): boolean {\n const normalized = normalizeHost(host)?.toLowerCase();\n return normalized === \"0.0.0.0\" || normalized === \"::\";\n}\n\nexport function inferBindModeFromHost(\n host: string | null | undefined,\n opts?: { tailnetBindHost?: string | null | undefined },\n): BindMode {\n const normalized = normalizeHost(host);\n const tailnetBindHost = normalizeHost(opts?.tailnetBindHost);\n\n if (!normalized || isLoopbackHost(normalized)) return \"loopback\";\n if (isAllInterfacesHost(normalized)) return \"lan\";\n if (tailnetBindHost && normalized === tailnetBindHost) return \"tailnet\";\n return \"custom\";\n}\n\nexport function validateConfiguredBindMode(input: {\n deploymentMode: DeploymentMode;\n deploymentExposure: DeploymentExposure;\n bind?: BindMode | null | undefined;\n host?: string | null | undefined;\n customBindHost?: string | null | undefined;\n}): string[] {\n const bind = input.bind ?? inferBindModeFromHost(input.host);\n const customBindHost = normalizeHost(input.customBindHost);\n const errors: string[] = [];\n\n if (input.deploymentMode === \"local_trusted\" && bind !== \"loopback\") {\n errors.push(\"local_trusted requires server.bind=loopback\");\n }\n\n if (bind === \"custom\" && !customBindHost) {\n const legacyHost = normalizeHost(input.host);\n if (!legacyHost || isLoopbackHost(legacyHost) || isAllInterfacesHost(legacyHost)) {\n errors.push(\"server.customBindHost is required when server.bind=custom\");\n }\n }\n\n if (input.deploymentMode === \"authenticated\" && input.deploymentExposure === \"public\" && bind === \"tailnet\") {\n errors.push(\"server.bind=tailnet is only supported for authenticated/private deployments\");\n }\n\n return errors;\n}\n\nexport function resolveRuntimeBind(input: {\n bind?: BindMode | null | undefined;\n host?: string | null | undefined;\n customBindHost?: string | null | undefined;\n tailnetBindHost?: string | null | undefined;\n}): {\n bind: BindMode;\n host: string;\n customBindHost?: string;\n errors: string[];\n} {\n const bind = input.bind ?? inferBindModeFromHost(input.host, { tailnetBindHost: input.tailnetBindHost });\n const legacyHost = normalizeHost(input.host);\n const customBindHost =\n normalizeHost(input.customBindHost) ??\n (bind === \"custom\" && legacyHost && !isLoopbackHost(legacyHost) && !isAllInterfacesHost(legacyHost)\n ? legacyHost\n : undefined);\n\n switch (bind) {\n case \"loopback\":\n return { bind, host: LOOPBACK_BIND_HOST, customBindHost, errors: [] };\n case \"lan\":\n return { bind, host: ALL_INTERFACES_BIND_HOST, customBindHost, errors: [] };\n case \"custom\":\n return customBindHost\n ? { bind, host: customBindHost, customBindHost, errors: [] }\n : { bind, host: legacyHost ?? LOOPBACK_BIND_HOST, errors: [\"server.customBindHost is required when server.bind=custom\"] };\n case \"tailnet\": {\n const tailnetBindHost = normalizeHost(input.tailnetBindHost);\n return tailnetBindHost\n ? { bind, host: tailnetBindHost, customBindHost, errors: [] }\n : {\n bind,\n host: legacyHost ?? LOOPBACK_BIND_HOST,\n customBindHost,\n errors: [\n \"server.bind=tailnet requires a detected Tailscale address or PAPERCLIP_TAILNET_BIND_HOST\",\n ],\n };\n }\n }\n}\n", "import type { FeedbackDataSharingPreference } from \"./feedback.js\";\nimport type {\n PaperclipCurrencyPreference,\n PaperclipUiLocalePreference,\n} from \"./locale.js\";\n\nexport const DAILY_RETENTION_PRESETS = [3, 7, 14] as const;\nexport const WEEKLY_RETENTION_PRESETS = [1, 2, 4] as const;\nexport const MONTHLY_RETENTION_PRESETS = [1, 3, 6] as const;\nexport const DEFAULT_ISSUE_GRAPH_LIVENESS_AUTO_RECOVERY_LOOKBACK_HOURS = 24;\nexport const MIN_ISSUE_GRAPH_LIVENESS_AUTO_RECOVERY_LOOKBACK_HOURS = 1;\nexport const MAX_ISSUE_GRAPH_LIVENESS_AUTO_RECOVERY_LOOKBACK_HOURS = 24 * 30;\n\nexport interface BackupRetentionPolicy {\n dailyDays: (typeof DAILY_RETENTION_PRESETS)[number];\n weeklyWeeks: (typeof WEEKLY_RETENTION_PRESETS)[number];\n monthlyMonths: (typeof MONTHLY_RETENTION_PRESETS)[number];\n}\n\nexport const DEFAULT_BACKUP_RETENTION: BackupRetentionPolicy = {\n dailyDays: 7,\n weeklyWeeks: 4,\n monthlyMonths: 1,\n};\n\nexport interface InstanceGeneralSettings {\n censorUsernameInLogs: boolean;\n keyboardShortcuts: boolean;\n feedbackDataSharingPreference: FeedbackDataSharingPreference;\n locale: PaperclipUiLocalePreference;\n timeZone: string;\n currencyCode: PaperclipCurrencyPreference;\n backupRetention: BackupRetentionPolicy;\n}\n\nexport interface InstanceExperimentalSettings {\n enableEnvironments: boolean;\n enableIsolatedWorkspaces: boolean;\n autoRestartDevServerWhenIdle: boolean;\n enableIssueGraphLivenessAutoRecovery: boolean;\n issueGraphLivenessAutoRecoveryLookbackHours: number;\n}\n\nexport interface InstanceSettings {\n id: string;\n general: InstanceGeneralSettings;\n experimental: InstanceExperimentalSettings;\n createdAt: Date;\n updatedAt: Date;\n}\n\nexport interface IssueGraphLivenessAutoRecoveryPreviewItem {\n issueId: string;\n identifier: string | null;\n title: string;\n state: string;\n severity: string;\n reason: string;\n recoveryIssueId: string;\n recoveryIdentifier: string | null;\n recoveryTitle: string | null;\n recommendedOwnerAgentId: string | null;\n incidentKey: string;\n latestDependencyUpdatedAt: string;\n dependencyPath: Array<{\n issueId: string;\n identifier: string | null;\n title: string;\n status: string;\n }>;\n}\n\nexport interface IssueGraphLivenessAutoRecoveryPreview {\n lookbackHours: number;\n cutoff: string;\n generatedAt: string;\n findings: number;\n recoverableFindings: number;\n skippedOutsideLookback: number;\n items: IssueGraphLivenessAutoRecoveryPreviewItem[];\n}\n", "import type { IssuePriority, IssueStatus } from \"../constants.js\";\n\nexport const COMPANY_SEARCH_SCOPES = [\"all\", \"issues\", \"comments\", \"documents\", \"agents\", \"projects\"] as const;\nexport type CompanySearchScope = (typeof COMPANY_SEARCH_SCOPES)[number];\n\nexport type CompanySearchResultType = \"issue\" | \"agent\" | \"project\";\n\nexport interface CompanySearchHighlight {\n start: number;\n end: number;\n}\n\nexport interface CompanySearchSnippet {\n field: string;\n label: string;\n text: string;\n highlights: CompanySearchHighlight[];\n}\n\nexport interface CompanySearchIssueSummary {\n id: string;\n identifier: string | null;\n title: string;\n status: IssueStatus;\n priority: IssuePriority;\n assigneeAgentId: string | null;\n assigneeUserId: string | null;\n projectId: string | null;\n updatedAt: string;\n}\n\nexport interface CompanySearchResult {\n id: string;\n type: CompanySearchResultType;\n score: number;\n title: string;\n href: string;\n matchedFields: string[];\n sourceLabel: string | null;\n snippet: string | null;\n snippets: CompanySearchSnippet[];\n issue?: CompanySearchIssueSummary;\n updatedAt: string | null;\n previewImageUrl: string | null;\n}\n\nexport interface CompanySearchResponse {\n query: string;\n normalizedQuery: string;\n scope: CompanySearchScope;\n limit: number;\n offset: number;\n results: CompanySearchResult[];\n countsByType: Record<CompanySearchResultType, number>;\n hasMore: boolean;\n}\n", "import { z } from \"zod\";\n\nconst sidebarOrderedIdSchema = z.string().uuid();\n\nexport const sidebarOrderPreferenceSchema = z.object({\n orderedIds: z.array(sidebarOrderedIdSchema),\n updatedAt: z.coerce.date().nullable(),\n});\n\nexport const upsertSidebarOrderPreferenceSchema = z.object({\n orderedIds: z.array(sidebarOrderedIdSchema),\n});\n\nexport type UpsertSidebarOrderPreference = z.infer<typeof upsertSidebarOrderPreferenceSchema>;\n", "import { z } from \"zod\";\n\nexport const executionWorkspaceStatusSchema = z.enum([\n \"active\",\n \"idle\",\n \"in_review\",\n \"archived\",\n \"cleanup_failed\",\n]);\n\nexport const executionWorkspaceConfigSchema = z.object({\n environmentId: z.string().uuid().optional().nullable(),\n provisionCommand: z.string().optional().nullable(),\n teardownCommand: z.string().optional().nullable(),\n cleanupCommand: z.string().optional().nullable(),\n workspaceRuntime: z.record(z.unknown()).optional().nullable(),\n desiredState: z.enum([\"running\", \"stopped\", \"manual\"]).optional().nullable(),\n serviceStates: z.record(z.enum([\"running\", \"stopped\", \"manual\"])).optional().nullable(),\n}).strict();\n\nexport const workspaceRuntimeControlTargetSchema = z.object({\n workspaceCommandId: z.string().min(1).optional().nullable(),\n runtimeServiceId: z.string().uuid().optional().nullable(),\n serviceIndex: z.number().int().nonnegative().optional().nullable(),\n}).strict();\n\nexport const executionWorkspaceCloseReadinessStateSchema = z.enum([\n \"ready\",\n \"ready_with_warnings\",\n \"blocked\",\n]);\n\nexport const executionWorkspaceCloseActionKindSchema = z.enum([\n \"archive_record\",\n \"stop_runtime_services\",\n \"cleanup_command\",\n \"teardown_command\",\n \"git_worktree_remove\",\n \"git_branch_delete\",\n \"remove_local_directory\",\n]);\n\nexport const executionWorkspaceCloseActionSchema = z.object({\n kind: executionWorkspaceCloseActionKindSchema,\n label: z.string(),\n description: z.string(),\n command: z.string().nullable(),\n}).strict();\n\nexport const executionWorkspaceCloseLinkedIssueSchema = z.object({\n id: z.string().uuid(),\n identifier: z.string().nullable(),\n title: z.string(),\n status: z.string(),\n isTerminal: z.boolean(),\n}).strict();\n\nexport const executionWorkspaceCloseGitReadinessSchema = z.object({\n repoRoot: z.string().nullable(),\n workspacePath: z.string().nullable(),\n branchName: z.string().nullable(),\n baseRef: z.string().nullable(),\n hasDirtyTrackedFiles: z.boolean(),\n hasUntrackedFiles: z.boolean(),\n dirtyEntryCount: z.number().int().nonnegative(),\n untrackedEntryCount: z.number().int().nonnegative(),\n aheadCount: z.number().int().nonnegative().nullable(),\n behindCount: z.number().int().nonnegative().nullable(),\n isMergedIntoBase: z.boolean().nullable(),\n createdByRuntime: z.boolean(),\n}).strict();\n\nexport const workspaceRuntimeServiceSchema = z.object({\n id: z.string(),\n companyId: z.string().uuid(),\n projectId: z.string().uuid().nullable(),\n projectWorkspaceId: z.string().uuid().nullable(),\n executionWorkspaceId: z.string().uuid().nullable(),\n issueId: z.string().uuid().nullable(),\n scopeType: z.enum([\"project_workspace\", \"execution_workspace\", \"run\", \"agent\"]),\n scopeId: z.string().nullable(),\n serviceName: z.string(),\n status: z.enum([\"starting\", \"running\", \"stopped\", \"failed\"]),\n lifecycle: z.enum([\"shared\", \"ephemeral\"]),\n reuseKey: z.string().nullable(),\n command: z.string().nullable(),\n cwd: z.string().nullable(),\n port: z.number().int().nullable(),\n url: z.string().nullable(),\n provider: z.enum([\"local_process\", \"adapter_managed\"]),\n providerRef: z.string().nullable(),\n ownerAgentId: z.string().uuid().nullable(),\n startedByRunId: z.string().uuid().nullable(),\n lastUsedAt: z.coerce.date(),\n startedAt: z.coerce.date(),\n stoppedAt: z.coerce.date().nullable(),\n stopPolicy: z.record(z.unknown()).nullable(),\n healthStatus: z.enum([\"unknown\", \"healthy\", \"unhealthy\"]),\n configIndex: z.number().int().nonnegative().nullable().optional(),\n createdAt: z.coerce.date(),\n updatedAt: z.coerce.date(),\n}).strict();\nexport const executionWorkspaceCloseReadinessSchema = z.object({\n workspaceId: z.string().uuid(),\n state: executionWorkspaceCloseReadinessStateSchema,\n blockingReasons: z.array(z.string()),\n warnings: z.array(z.string()),\n linkedIssues: z.array(executionWorkspaceCloseLinkedIssueSchema),\n plannedActions: z.array(executionWorkspaceCloseActionSchema),\n isDestructiveCloseAllowed: z.boolean(),\n isSharedWorkspace: z.boolean(),\n isProjectPrimaryWorkspace: z.boolean(),\n git: executionWorkspaceCloseGitReadinessSchema.nullable(),\n runtimeServices: z.array(workspaceRuntimeServiceSchema),\n}).strict();\n\nexport const updateExecutionWorkspaceSchema = z.object({\n name: z.string().min(1).optional(),\n cwd: z.string().optional().nullable(),\n repoUrl: z.string().optional().nullable(),\n baseRef: z.string().optional().nullable(),\n branchName: z.string().optional().nullable(),\n providerRef: z.string().optional().nullable(),\n status: executionWorkspaceStatusSchema.optional(),\n cleanupEligibleAt: z.string().datetime().optional().nullable(),\n cleanupReason: z.string().optional().nullable(),\n config: executionWorkspaceConfigSchema.optional().nullable(),\n metadata: z.record(z.unknown()).optional().nullable(),\n}).strict();\n\nexport type UpdateExecutionWorkspace = z.infer<typeof updateExecutionWorkspaceSchema>;\n", "export const FEEDBACK_TARGET_TYPES = [\"issue_comment\", \"issue_document_revision\"] as const;\nexport type FeedbackTargetType = (typeof FEEDBACK_TARGET_TYPES)[number];\n\nexport const FEEDBACK_VOTE_VALUES = [\"up\", \"down\"] as const;\nexport type FeedbackVoteValue = (typeof FEEDBACK_VOTE_VALUES)[number];\n\nexport const FEEDBACK_DATA_SHARING_PREFERENCES = [\"allowed\", \"not_allowed\", \"prompt\"] as const;\nexport type FeedbackDataSharingPreference = (typeof FEEDBACK_DATA_SHARING_PREFERENCES)[number];\n\nexport const DEFAULT_FEEDBACK_DATA_SHARING_PREFERENCE: FeedbackDataSharingPreference = \"prompt\";\n\nexport const FEEDBACK_TRACE_STATUSES = [\"local_only\", \"pending\", \"sent\", \"failed\"] as const;\nexport type FeedbackTraceStatus = (typeof FEEDBACK_TRACE_STATUSES)[number];\n\nexport const DEFAULT_FEEDBACK_DATA_SHARING_TERMS_VERSION = \"feedback-data-sharing-v1\";\n\nexport interface FeedbackVote {\n id: string;\n companyId: string;\n issueId: string;\n targetType: FeedbackTargetType;\n targetId: string;\n authorUserId: string;\n vote: FeedbackVoteValue;\n reason: string | null;\n sharedWithLabs: boolean;\n sharedAt: Date | null;\n consentVersion: string | null;\n redactionSummary: Record<string, unknown> | null;\n createdAt: Date;\n updatedAt: Date;\n}\n\nexport interface FeedbackTraceTargetSummary {\n label: string;\n excerpt: string | null;\n authorAgentId: string | null;\n authorUserId: string | null;\n createdAt: Date | null;\n documentKey: string | null;\n documentTitle: string | null;\n revisionNumber: number | null;\n}\n\nexport interface FeedbackTrace {\n id: string;\n companyId: string;\n feedbackVoteId: string;\n issueId: string;\n projectId: string | null;\n issueIdentifier: string | null;\n issueTitle: string;\n authorUserId: string;\n targetType: FeedbackTargetType;\n targetId: string;\n vote: FeedbackVoteValue;\n status: FeedbackTraceStatus;\n destination: string | null;\n exportId: string | null;\n consentVersion: string | null;\n schemaVersion: string;\n bundleVersion: string;\n payloadVersion: string;\n payloadDigest: string | null;\n payloadSnapshot: Record<string, unknown> | null;\n targetSummary: FeedbackTraceTargetSummary;\n redactionSummary: Record<string, unknown> | null;\n attemptCount: number;\n lastAttemptedAt: Date | null;\n exportedAt: Date | null;\n failureReason: string | null;\n createdAt: Date;\n updatedAt: Date;\n}\n\nexport type FeedbackTraceBundleCaptureStatus = \"full\" | \"partial\" | \"unavailable\";\n\nexport interface FeedbackTraceBundleFile {\n path: string;\n contentType: string;\n encoding: \"utf8\";\n byteLength: number;\n sha256: string;\n source:\n | \"paperclip_run\"\n | \"paperclip_run_events\"\n | \"paperclip_run_log\"\n | \"codex_session\"\n | \"claude_stream_json\"\n | \"claude_project_session\"\n | \"claude_project_artifact\"\n | \"claude_debug_log\"\n | \"claude_task_metadata\"\n | \"opencode_session\"\n | \"opencode_session_diff\"\n | \"opencode_message\"\n | \"opencode_message_part\"\n | \"opencode_project\"\n | \"opencode_todo\";\n contents: string;\n}\n\nexport interface FeedbackTraceBundle {\n traceId: string;\n exportId: string | null;\n companyId: string;\n issueId: string;\n issueIdentifier: string | null;\n adapterType: string | null;\n captureStatus: FeedbackTraceBundleCaptureStatus;\n notes: string[];\n envelope: Record<string, unknown>;\n surface: Record<string, unknown> | null;\n paperclipRun: Record<string, unknown> | null;\n rawAdapterTrace: Record<string, unknown> | null;\n normalizedAdapterTrace: Record<string, unknown> | null;\n privacy: Record<string, unknown> | null;\n integrity: Record<string, unknown>;\n files: FeedbackTraceBundleFile[];\n}\n", "export const PAPERCLIP_UI_LOCALES = [\"en\", \"zh-CN\"] as const;\nexport type PaperclipUiLocale = (typeof PAPERCLIP_UI_LOCALES)[number];\n\nexport const PAPERCLIP_UI_LOCALE_PREFERENCES = [\"system\", ...PAPERCLIP_UI_LOCALES] as const;\nexport type PaperclipUiLocalePreference = (typeof PAPERCLIP_UI_LOCALE_PREFERENCES)[number];\n\nexport const PAPERCLIP_CURRENCY_CODES = [\"USD\", \"CNY\"] as const;\nexport type PaperclipCurrencyCode = (typeof PAPERCLIP_CURRENCY_CODES)[number];\n\nexport const PAPERCLIP_CURRENCY_PREFERENCES = [\"default\", ...PAPERCLIP_CURRENCY_CODES] as const;\nexport type PaperclipCurrencyPreference = (typeof PAPERCLIP_CURRENCY_PREFERENCES)[number];\n\nexport const DEFAULT_PAPERCLIP_UI_LOCALE_PREFERENCE: PaperclipUiLocalePreference = \"system\";\nexport const DEFAULT_PAPERCLIP_TIME_ZONE_PREFERENCE = \"system\";\nexport const DEFAULT_PAPERCLIP_CURRENCY_PREFERENCE: PaperclipCurrencyPreference = \"default\";\n\nexport function resolvePaperclipCurrencyCode(locale: PaperclipUiLocale): PaperclipCurrencyCode {\n return locale === \"zh-CN\" ? \"CNY\" : \"USD\";\n}\n", "import { z } from \"zod\";\nimport {\n FEEDBACK_DATA_SHARING_PREFERENCES,\n FEEDBACK_TARGET_TYPES,\n FEEDBACK_TRACE_STATUSES,\n FEEDBACK_VOTE_VALUES,\n} from \"../types/feedback.js\";\n\nexport const feedbackTargetTypeSchema = z.enum(FEEDBACK_TARGET_TYPES);\nexport const feedbackTraceStatusSchema = z.enum(FEEDBACK_TRACE_STATUSES);\nexport const feedbackVoteValueSchema = z.enum(FEEDBACK_VOTE_VALUES);\nexport const feedbackDataSharingPreferenceSchema = z.enum(FEEDBACK_DATA_SHARING_PREFERENCES);\n\nexport const upsertIssueFeedbackVoteSchema = z.object({\n targetType: feedbackTargetTypeSchema,\n targetId: z.string().uuid(),\n vote: feedbackVoteValueSchema,\n reason: z.string().trim().max(1000).optional(),\n allowSharing: z.boolean().optional(),\n});\n\nexport type UpsertIssueFeedbackVote = z.infer<typeof upsertIssueFeedbackVoteSchema>;\n", "import { z } from \"zod\";\nimport {\n DEFAULT_PAPERCLIP_CURRENCY_PREFERENCE,\n DEFAULT_PAPERCLIP_TIME_ZONE_PREFERENCE,\n DEFAULT_PAPERCLIP_UI_LOCALE_PREFERENCE,\n PAPERCLIP_CURRENCY_PREFERENCES,\n PAPERCLIP_UI_LOCALE_PREFERENCES,\n} from \"../types/locale.js\";\n\nexport const paperclipUiLocalePreferenceSchema = z\n .enum(PAPERCLIP_UI_LOCALE_PREFERENCES)\n .default(DEFAULT_PAPERCLIP_UI_LOCALE_PREFERENCE);\n\nexport const paperclipTimeZonePreferenceSchema = z\n .string()\n .trim()\n .min(1)\n .default(DEFAULT_PAPERCLIP_TIME_ZONE_PREFERENCE);\n\nexport const paperclipCurrencyPreferenceSchema = z\n .enum(PAPERCLIP_CURRENCY_PREFERENCES)\n .default(DEFAULT_PAPERCLIP_CURRENCY_PREFERENCE);\n\nexport type PaperclipUiLocalePreference = z.infer<typeof paperclipUiLocalePreferenceSchema>;\nexport type PaperclipTimeZonePreference = z.infer<typeof paperclipTimeZonePreferenceSchema>;\nexport type PaperclipCurrencyPreference = z.infer<typeof paperclipCurrencyPreferenceSchema>;\n", "import { z } from \"zod\";\nimport { DEFAULT_FEEDBACK_DATA_SHARING_PREFERENCE } from \"../types/feedback.js\";\nimport {\n DAILY_RETENTION_PRESETS,\n WEEKLY_RETENTION_PRESETS,\n MONTHLY_RETENTION_PRESETS,\n DEFAULT_BACKUP_RETENTION,\n DEFAULT_ISSUE_GRAPH_LIVENESS_AUTO_RECOVERY_LOOKBACK_HOURS,\n MAX_ISSUE_GRAPH_LIVENESS_AUTO_RECOVERY_LOOKBACK_HOURS,\n MIN_ISSUE_GRAPH_LIVENESS_AUTO_RECOVERY_LOOKBACK_HOURS,\n} from \"../types/instance.js\";\nimport { feedbackDataSharingPreferenceSchema } from \"./feedback.js\";\nimport {\n paperclipCurrencyPreferenceSchema,\n paperclipTimeZonePreferenceSchema,\n paperclipUiLocalePreferenceSchema,\n} from \"./locale.js\";\n\nfunction presetSchema<T extends readonly number[]>(presets: T, label: string) {\n return z.number().refine(\n (v): v is T[number] => (presets as readonly number[]).includes(v),\n { message: `${label} must be one of: ${presets.join(\", \")}` },\n );\n}\n\nexport const backupRetentionPolicySchema = z.object({\n dailyDays: presetSchema(DAILY_RETENTION_PRESETS, \"dailyDays\").default(DEFAULT_BACKUP_RETENTION.dailyDays),\n weeklyWeeks: presetSchema(WEEKLY_RETENTION_PRESETS, \"weeklyWeeks\").default(DEFAULT_BACKUP_RETENTION.weeklyWeeks),\n monthlyMonths: presetSchema(MONTHLY_RETENTION_PRESETS, \"monthlyMonths\").default(DEFAULT_BACKUP_RETENTION.monthlyMonths),\n});\n\nexport const instanceGeneralSettingsSchema = z.object({\n censorUsernameInLogs: z.boolean().default(false),\n keyboardShortcuts: z.boolean().default(false),\n feedbackDataSharingPreference: feedbackDataSharingPreferenceSchema.default(\n DEFAULT_FEEDBACK_DATA_SHARING_PREFERENCE,\n ),\n locale: paperclipUiLocalePreferenceSchema,\n timeZone: paperclipTimeZonePreferenceSchema,\n currencyCode: paperclipCurrencyPreferenceSchema,\n backupRetention: backupRetentionPolicySchema.default(DEFAULT_BACKUP_RETENTION),\n}).strict();\n\nexport const patchInstanceGeneralSettingsSchema = instanceGeneralSettingsSchema.partial();\n\nexport const instanceExperimentalSettingsSchema = z.object({\n enableEnvironments: z.boolean().default(false),\n enableIsolatedWorkspaces: z.boolean().default(false),\n autoRestartDevServerWhenIdle: z.boolean().default(false),\n enableIssueGraphLivenessAutoRecovery: z.boolean().default(false),\n issueGraphLivenessAutoRecoveryLookbackHours: z\n .number()\n .int()\n .min(MIN_ISSUE_GRAPH_LIVENESS_AUTO_RECOVERY_LOOKBACK_HOURS)\n .max(MAX_ISSUE_GRAPH_LIVENESS_AUTO_RECOVERY_LOOKBACK_HOURS)\n .default(DEFAULT_ISSUE_GRAPH_LIVENESS_AUTO_RECOVERY_LOOKBACK_HOURS),\n}).strict();\n\nexport const patchInstanceExperimentalSettingsSchema = instanceExperimentalSettingsSchema.partial();\n\nexport const issueGraphLivenessAutoRecoveryRequestSchema = z.object({\n lookbackHours: z\n .number()\n .int()\n .min(MIN_ISSUE_GRAPH_LIVENESS_AUTO_RECOVERY_LOOKBACK_HOURS)\n .max(MAX_ISSUE_GRAPH_LIVENESS_AUTO_RECOVERY_LOOKBACK_HOURS)\n .optional(),\n}).strict();\n\nexport type InstanceGeneralSettings = z.infer<typeof instanceGeneralSettingsSchema>;\nexport type PatchInstanceGeneralSettings = z.infer<typeof patchInstanceGeneralSettingsSchema>;\nexport type InstanceExperimentalSettings = z.infer<typeof instanceExperimentalSettingsSchema>;\nexport type PatchInstanceExperimentalSettings = z.infer<typeof patchInstanceExperimentalSettingsSchema>;\nexport type IssueGraphLivenessAutoRecoveryRequest = z.infer<\n typeof issueGraphLivenessAutoRecoveryRequestSchema\n>;\n", "import { z } from \"zod\";\nimport {\n BUDGET_INCIDENT_RESOLUTION_ACTIONS,\n BUDGET_METRICS,\n BUDGET_SCOPE_TYPES,\n BUDGET_WINDOW_KINDS,\n} from \"../constants.js\";\n\nexport const upsertBudgetPolicySchema = z.object({\n scopeType: z.enum(BUDGET_SCOPE_TYPES),\n scopeId: z.string().uuid(),\n metric: z.enum(BUDGET_METRICS).optional().default(\"billed_cents\"),\n windowKind: z.enum(BUDGET_WINDOW_KINDS).optional().default(\"calendar_month_utc\"),\n amount: z.number().int().nonnegative(),\n warnPercent: z.number().int().min(1).max(99).optional().default(80),\n hardStopEnabled: z.boolean().optional().default(true),\n notifyEnabled: z.boolean().optional().default(true),\n isActive: z.boolean().optional().default(true),\n});\n\nexport type UpsertBudgetPolicy = z.infer<typeof upsertBudgetPolicySchema>;\n\nexport const resolveBudgetIncidentSchema = z.object({\n action: z.enum(BUDGET_INCIDENT_RESOLUTION_ACTIONS),\n amount: z.number().int().nonnegative().optional(),\n decisionNote: z.string().optional().nullable(),\n}).superRefine((value, ctx) => {\n if (value.action === \"raise_budget_and_resume\" && typeof value.amount !== \"number\") {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"amount is required when raising a budget\",\n path: [\"amount\"],\n });\n }\n});\n\nexport type ResolveBudgetIncident = z.infer<typeof resolveBudgetIncidentSchema>;\n", "import { z } from \"zod\";\nimport {\n COMPANY_STATUSES,\n MAX_COMPANY_ATTACHMENT_MAX_BYTES,\n} from \"../constants.js\";\n\nconst logoAssetIdSchema = z.string().uuid().nullable().optional();\nconst brandColorSchema = z.string().regex(/^#[0-9a-fA-F]{6}$/).nullable().optional();\nconst feedbackDataSharingTermsVersionSchema = z.string().min(1).nullable().optional();\nconst attachmentMaxBytesSchema = z\n .number()\n .int()\n .min(1)\n .max(MAX_COMPANY_ATTACHMENT_MAX_BYTES);\n\nexport const createCompanySchema = z.object({\n name: z.string().min(1),\n description: z.string().optional().nullable(),\n budgetMonthlyCents: z.number().int().nonnegative().optional().default(0),\n attachmentMaxBytes: attachmentMaxBytesSchema.optional(),\n});\n\nexport type CreateCompany = z.infer<typeof createCompanySchema>;\n\nexport const updateCompanySchema = createCompanySchema\n .partial()\n .extend({\n status: z.enum(COMPANY_STATUSES).optional(),\n spentMonthlyCents: z.number().int().nonnegative().optional(),\n requireBoardApprovalForNewAgents: z.boolean().optional(),\n feedbackDataSharingEnabled: z.boolean().optional(),\n feedbackDataSharingConsentAt: z.coerce.date().nullable().optional(),\n feedbackDataSharingConsentByUserId: z.string().min(1).nullable().optional(),\n feedbackDataSharingTermsVersion: feedbackDataSharingTermsVersionSchema,\n brandColor: brandColorSchema,\n logoAssetId: logoAssetIdSchema,\n attachmentMaxBytes: attachmentMaxBytesSchema.optional(),\n });\n\nexport type UpdateCompany = z.infer<typeof updateCompanySchema>;\n\nexport const updateCompanyBrandingSchema = z\n .object({\n name: z.string().min(1).optional(),\n description: z.string().nullable().optional(),\n brandColor: brandColorSchema,\n logoAssetId: logoAssetIdSchema,\n })\n .strict()\n .refine(\n (value) =>\n value.name !== undefined\n || value.description !== undefined\n || value.brandColor !== undefined\n || value.logoAssetId !== undefined,\n \"At least one branding field must be provided\",\n );\n\nexport type UpdateCompanyBranding = z.infer<typeof updateCompanyBrandingSchema>;\n", "import { z } from \"zod\";\nimport {\n ENVIRONMENT_DRIVERS,\n ENVIRONMENT_LEASE_CLEANUP_STATUSES,\n ENVIRONMENT_LEASE_STATUSES,\n ENVIRONMENT_STATUSES,\n} from \"../constants.js\";\n\nexport const environmentDriverSchema = z.enum(ENVIRONMENT_DRIVERS);\nexport const environmentStatusSchema = z.enum(ENVIRONMENT_STATUSES);\nexport const environmentLeaseStatusSchema = z.enum(ENVIRONMENT_LEASE_STATUSES);\nexport const environmentLeaseCleanupStatusSchema = z.enum(ENVIRONMENT_LEASE_CLEANUP_STATUSES);\n\nconst environmentFields = {\n name: z.string().min(1),\n description: z.string().optional().nullable(),\n driver: environmentDriverSchema,\n status: environmentStatusSchema.optional().default(\"active\"),\n config: z.record(z.unknown()).optional().default({}),\n metadata: z.record(z.unknown()).optional().nullable(),\n};\n\nexport const createEnvironmentSchema = z.object(environmentFields).strict();\nexport type CreateEnvironment = z.infer<typeof createEnvironmentSchema>;\n\nexport const updateEnvironmentSchema = z.object({\n name: z.string().min(1).optional(),\n description: z.string().optional().nullable(),\n driver: environmentDriverSchema.optional(),\n status: environmentStatusSchema.optional(),\n config: z.record(z.unknown()).optional(),\n metadata: z.record(z.unknown()).optional().nullable(),\n}).strict();\nexport type UpdateEnvironment = z.infer<typeof updateEnvironmentSchema>;\n\nexport const probeEnvironmentConfigSchema = z.object({\n name: z.string().min(1).optional(),\n description: z.string().optional().nullable(),\n driver: environmentDriverSchema,\n config: z.record(z.unknown()).optional().default({}),\n metadata: z.record(z.unknown()).optional().nullable(),\n}).strict();\nexport type ProbeEnvironmentConfig = z.infer<typeof probeEnvironmentConfigSchema>;\n", "import { z } from \"zod\";\n\nexport const companySkillSourceTypeSchema = z.enum([\"local_path\", \"github\", \"url\", \"catalog\", \"skills_sh\"]);\nexport const companySkillTrustLevelSchema = z.enum([\"markdown_only\", \"assets\", \"scripts_executables\"]);\nexport const companySkillCompatibilitySchema = z.enum([\"compatible\", \"unknown\", \"invalid\"]);\nexport const companySkillSourceBadgeSchema = z.enum([\"paperclip\", \"github\", \"local\", \"url\", \"catalog\", \"skills_sh\"]);\n\nexport const companySkillFileInventoryEntrySchema = z.object({\n path: z.string().min(1),\n kind: z.enum([\"skill\", \"markdown\", \"reference\", \"script\", \"asset\", \"other\"]),\n});\n\nexport const companySkillSchema = z.object({\n id: z.string().uuid(),\n companyId: z.string().uuid(),\n key: z.string().min(1),\n slug: z.string().min(1),\n name: z.string().min(1),\n description: z.string().nullable(),\n markdown: z.string(),\n sourceType: companySkillSourceTypeSchema,\n sourceLocator: z.string().nullable(),\n sourceRef: z.string().nullable(),\n trustLevel: companySkillTrustLevelSchema,\n compatibility: companySkillCompatibilitySchema,\n fileInventory: z.array(companySkillFileInventoryEntrySchema).default([]),\n metadata: z.record(z.unknown()).nullable(),\n createdAt: z.coerce.date(),\n updatedAt: z.coerce.date(),\n});\n\nexport const companySkillListItemSchema = companySkillSchema.extend({\n attachedAgentCount: z.number().int().nonnegative(),\n editable: z.boolean(),\n editableReason: z.string().nullable(),\n sourceLabel: z.string().nullable(),\n sourceBadge: companySkillSourceBadgeSchema,\n});\n\nexport const companySkillUsageAgentSchema = z.object({\n id: z.string().uuid(),\n name: z.string().min(1),\n urlKey: z.string().min(1),\n adapterType: z.string().min(1),\n desired: z.boolean(),\n actualState: z.string().nullable().describe(\n \"Runtime adapter skill state when explicitly fetched; company skill detail reads return null without probing agent runtimes.\",\n ),\n});\n\nexport const companySkillDetailSchema = companySkillSchema.extend({\n attachedAgentCount: z.number().int().nonnegative(),\n usedByAgents: z.array(companySkillUsageAgentSchema).default([]),\n editable: z.boolean(),\n editableReason: z.string().nullable(),\n sourceLabel: z.string().nullable(),\n sourceBadge: companySkillSourceBadgeSchema,\n});\n\nexport const companySkillUpdateStatusSchema = z.object({\n supported: z.boolean(),\n reason: z.string().nullable(),\n trackingRef: z.string().nullable(),\n currentRef: z.string().nullable(),\n latestRef: z.string().nullable(),\n hasUpdate: z.boolean(),\n});\n\nexport const companySkillImportSchema = z.object({\n source: z.string().min(1),\n});\n\nexport const companySkillProjectScanRequestSchema = z.object({\n projectIds: z.array(z.string().uuid()).optional(),\n workspaceIds: z.array(z.string().uuid()).optional(),\n});\n\nexport const companySkillProjectScanSkippedSchema = z.object({\n projectId: z.string().uuid(),\n projectName: z.string().min(1),\n workspaceId: z.string().uuid().nullable(),\n workspaceName: z.string().nullable(),\n path: z.string().nullable(),\n reason: z.string().min(1),\n});\n\nexport const companySkillProjectScanConflictSchema = z.object({\n slug: z.string().min(1),\n key: z.string().min(1),\n projectId: z.string().uuid(),\n projectName: z.string().min(1),\n workspaceId: z.string().uuid(),\n workspaceName: z.string().min(1),\n path: z.string().min(1),\n existingSkillId: z.string().uuid(),\n existingSkillKey: z.string().min(1),\n existingSourceLocator: z.string().nullable(),\n reason: z.string().min(1),\n});\n\nexport const companySkillProjectScanResultSchema = z.object({\n scannedProjects: z.number().int().nonnegative(),\n scannedWorkspaces: z.number().int().nonnegative(),\n discovered: z.number().int().nonnegative(),\n imported: z.array(companySkillSchema),\n updated: z.array(companySkillSchema),\n skipped: z.array(companySkillProjectScanSkippedSchema),\n conflicts: z.array(companySkillProjectScanConflictSchema),\n warnings: z.array(z.string()),\n});\n\nexport const companySkillCreateSchema = z.object({\n name: z.string().min(1),\n slug: z.string().min(1).nullable().optional(),\n description: z.string().nullable().optional(),\n markdown: z.string().nullable().optional(),\n});\n\nexport const companySkillFileDetailSchema = z.object({\n skillId: z.string().uuid(),\n path: z.string().min(1),\n kind: z.enum([\"skill\", \"markdown\", \"reference\", \"script\", \"asset\", \"other\"]),\n content: z.string(),\n language: z.string().nullable(),\n markdown: z.boolean(),\n editable: z.boolean(),\n});\n\nexport const companySkillFileUpdateSchema = z.object({\n path: z.string().min(1),\n content: z.string(),\n});\n\nexport type CompanySkillImport = z.infer<typeof companySkillImportSchema>;\nexport type CompanySkillProjectScan = z.infer<typeof companySkillProjectScanRequestSchema>;\nexport type CompanySkillCreate = z.infer<typeof companySkillCreateSchema>;\nexport type CompanySkillFileUpdate = z.infer<typeof companySkillFileUpdateSchema>;\n", "import { z } from \"zod\";\n\nexport const agentSkillStateSchema = z.enum([\n \"available\",\n \"configured\",\n \"installed\",\n \"missing\",\n \"stale\",\n \"external\",\n]);\n\nexport const agentSkillOriginSchema = z.enum([\n \"company_managed\",\n \"paperclip_required\",\n \"user_installed\",\n \"external_unknown\",\n]);\n\nexport const agentSkillSyncModeSchema = z.enum([\n \"unsupported\",\n \"persistent\",\n \"ephemeral\",\n]);\n\nexport const agentSkillEntrySchema = z.object({\n key: z.string().min(1),\n runtimeName: z.string().min(1).nullable(),\n desired: z.boolean(),\n managed: z.boolean(),\n required: z.boolean().optional(),\n requiredReason: z.string().nullable().optional(),\n state: agentSkillStateSchema,\n origin: agentSkillOriginSchema.optional(),\n originLabel: z.string().nullable().optional(),\n locationLabel: z.string().nullable().optional(),\n readOnly: z.boolean().optional(),\n sourcePath: z.string().nullable().optional(),\n targetPath: z.string().nullable().optional(),\n detail: z.string().nullable().optional(),\n});\n\nexport const agentSkillSnapshotSchema = z.object({\n adapterType: z.string().min(1),\n supported: z.boolean(),\n mode: agentSkillSyncModeSchema,\n desiredSkills: z.array(z.string().min(1)),\n entries: z.array(agentSkillEntrySchema),\n warnings: z.array(z.string()),\n});\n\nexport const agentSkillSyncSchema = z.object({\n desiredSkills: z.array(z.string().min(1)),\n});\n\nexport type AgentSkillSync = z.infer<typeof agentSkillSyncSchema>;\n", "import { z } from \"zod\";\n\nexport function normalizeEscapedLineBreaks(value: string): string {\n return value\n .replace(/\\\\r\\\\n/g, \"\\n\")\n .replace(/\\\\n/g, \"\\n\")\n .replace(/\\\\r/g, \"\\n\");\n}\n\nexport const multilineTextSchema = z.string().transform(normalizeEscapedLineBreaks);\n", "import { z } from \"zod\";\nimport {\n ISSUE_EXECUTION_DECISION_OUTCOMES,\n ISSUE_EXECUTION_MONITOR_CLEAR_REASONS,\n ISSUE_EXECUTION_MONITOR_KINDS,\n ISSUE_EXECUTION_MONITOR_RECOVERY_POLICIES,\n ISSUE_EXECUTION_MONITOR_STATE_STATUSES,\n ISSUE_EXECUTION_POLICY_MODES,\n ISSUE_EXECUTION_STAGE_TYPES,\n ISSUE_EXECUTION_STATE_STATUSES,\n ISSUE_COMMENT_AUTHOR_TYPES,\n ISSUE_COMMENT_METADATA_ROW_TYPES,\n ISSUE_COMMENT_PRESENTATION_KINDS,\n ISSUE_COMMENT_PRESENTATION_TONES,\n ISSUE_MONITOR_SCHEDULED_BY,\n ISSUE_PRIORITIES,\n ISSUE_RECOVERY_ACTION_KINDS,\n ISSUE_RECOVERY_ACTION_OUTCOMES,\n ISSUE_RECOVERY_ACTION_OWNER_TYPES,\n ISSUE_RECOVERY_ACTION_STATUSES,\n ISSUE_WORK_MODES,\n clampIssueRequestDepth,\n ISSUE_STATUSES,\n ISSUE_THREAD_INTERACTION_CONTINUATION_POLICIES,\n ISSUE_THREAD_INTERACTION_KINDS,\n ISSUE_THREAD_INTERACTION_STATUSES,\n MODEL_PROFILE_KEYS,\n} from \"../constants.js\";\nimport { multilineTextSchema } from \"./text.js\";\n\nexport const ISSUE_EXECUTION_WORKSPACE_PREFERENCES = [\n \"inherit\",\n \"shared_workspace\",\n \"isolated_workspace\",\n \"operator_branch\",\n \"reuse_existing\",\n \"agent_default\",\n] as const;\n\nconst executionWorkspaceStrategySchema = z\n .object({\n type: z.enum([\"project_primary\", \"git_worktree\", \"adapter_managed\", \"cloud_sandbox\"]).optional(),\n baseRef: z.string().optional().nullable(),\n branchTemplate: z.string().optional().nullable(),\n worktreeParentDir: z.string().optional().nullable(),\n provisionCommand: z.string().optional().nullable(),\n teardownCommand: z.string().optional().nullable(),\n })\n .strict();\n\nexport const issueExecutionWorkspaceSettingsSchema = z\n .object({\n mode: z.enum(ISSUE_EXECUTION_WORKSPACE_PREFERENCES).optional(),\n environmentId: z.string().uuid().optional().nullable(),\n workspaceStrategy: executionWorkspaceStrategySchema.optional().nullable(),\n workspaceRuntime: z.record(z.unknown()).optional().nullable(),\n })\n .strict();\n\nexport const issueAssigneeAdapterOverridesSchema = z\n .object({\n modelProfile: z.enum(MODEL_PROFILE_KEYS).optional(),\n adapterConfig: z.record(z.unknown()).optional(),\n useProjectWorkspace: z.boolean().optional(),\n })\n .strict();\n\nconst issueExecutionStagePrincipalBaseSchema = z.object({\n type: z.enum([\"agent\", \"user\"]),\n agentId: z.string().uuid().optional().nullable(),\n userId: z.string().optional().nullable(),\n});\n\nexport const issueExecutionStagePrincipalSchema = issueExecutionStagePrincipalBaseSchema\n .superRefine((value, ctx) => {\n if (value.type === \"agent\") {\n if (!value.agentId) {\n ctx.addIssue({ code: z.ZodIssueCode.custom, message: \"Agent participants require agentId\", path: [\"agentId\"] });\n }\n if (value.userId) {\n ctx.addIssue({ code: z.ZodIssueCode.custom, message: \"Agent participants cannot set userId\", path: [\"userId\"] });\n }\n return;\n }\n if (!value.userId) {\n ctx.addIssue({ code: z.ZodIssueCode.custom, message: \"User participants require userId\", path: [\"userId\"] });\n }\n if (value.agentId) {\n ctx.addIssue({ code: z.ZodIssueCode.custom, message: \"User participants cannot set agentId\", path: [\"agentId\"] });\n }\n });\n\nexport const issueExecutionStageParticipantSchema = issueExecutionStagePrincipalBaseSchema.extend({\n id: z.string().uuid().optional(),\n}).superRefine((value, ctx) => {\n if (value.type === \"agent\") {\n if (!value.agentId) {\n ctx.addIssue({ code: z.ZodIssueCode.custom, message: \"Agent participants require agentId\", path: [\"agentId\"] });\n }\n if (value.userId) {\n ctx.addIssue({ code: z.ZodIssueCode.custom, message: \"Agent participants cannot set userId\", path: [\"userId\"] });\n }\n return;\n }\n if (!value.userId) {\n ctx.addIssue({ code: z.ZodIssueCode.custom, message: \"User participants require userId\", path: [\"userId\"] });\n }\n if (value.agentId) {\n ctx.addIssue({ code: z.ZodIssueCode.custom, message: \"User participants cannot set agentId\", path: [\"agentId\"] });\n }\n});\n\nexport const issueExecutionStageSchema = z.object({\n id: z.string().uuid().optional(),\n type: z.enum(ISSUE_EXECUTION_STAGE_TYPES),\n approvalsNeeded: z.literal(1).optional().default(1),\n participants: z.array(issueExecutionStageParticipantSchema).default([]),\n});\n\nexport const issueExecutionMonitorPolicySchema = z.object({\n nextCheckAt: z.string().datetime(),\n notes: z.string().max(500).optional().nullable().default(null),\n scheduledBy: z.enum(ISSUE_MONITOR_SCHEDULED_BY).optional().default(\"assignee\"),\n kind: z.enum(ISSUE_EXECUTION_MONITOR_KINDS).optional().nullable().default(null),\n serviceName: z.string().trim().min(1).max(120).optional().nullable().default(null),\n externalRef: z.string().trim().min(1).max(500).optional().nullable().default(null),\n timeoutAt: z.string().datetime().optional().nullable().default(null),\n maxAttempts: z.number().int().positive().max(100).optional().nullable().default(null),\n recoveryPolicy: z.enum(ISSUE_EXECUTION_MONITOR_RECOVERY_POLICIES).optional().nullable().default(null),\n});\n\nexport const issueExecutionPolicySchema = z.object({\n mode: z.enum(ISSUE_EXECUTION_POLICY_MODES).optional().default(\"normal\"),\n commentRequired: z.boolean().optional().default(true),\n stages: z.array(issueExecutionStageSchema).default([]),\n monitor: issueExecutionMonitorPolicySchema.optional().nullable(),\n});\n\nexport const issueExecutionMonitorStateSchema = z.object({\n status: z.enum(ISSUE_EXECUTION_MONITOR_STATE_STATUSES),\n nextCheckAt: z.string().datetime().nullable(),\n lastTriggeredAt: z.string().datetime().nullable(),\n attemptCount: z.number().int().nonnegative().default(0),\n notes: z.string().max(500).nullable(),\n scheduledBy: z.enum(ISSUE_MONITOR_SCHEDULED_BY).nullable(),\n kind: z.enum(ISSUE_EXECUTION_MONITOR_KINDS).nullable().optional().default(null),\n serviceName: z.string().trim().min(1).max(120).nullable().optional().default(null),\n externalRef: z.string().trim().min(1).max(500).nullable().optional().default(null),\n timeoutAt: z.string().datetime().nullable().optional().default(null),\n maxAttempts: z.number().int().positive().max(100).nullable().optional().default(null),\n recoveryPolicy: z.enum(ISSUE_EXECUTION_MONITOR_RECOVERY_POLICIES).nullable().optional().default(null),\n clearedAt: z.string().datetime().nullable(),\n clearReason: z.enum(ISSUE_EXECUTION_MONITOR_CLEAR_REASONS).nullable(),\n});\n\nexport const issueReviewRequestSchema = z.object({\n instructions: z.string().trim().min(1).max(20000),\n}).strict();\n\nexport const issueExecutionStateSchema = z.object({\n status: z.enum(ISSUE_EXECUTION_STATE_STATUSES),\n currentStageId: z.string().uuid().nullable(),\n currentStageIndex: z.number().int().nonnegative().nullable(),\n currentStageType: z.enum(ISSUE_EXECUTION_STAGE_TYPES).nullable(),\n currentParticipant: issueExecutionStagePrincipalSchema.nullable(),\n returnAssignee: issueExecutionStagePrincipalSchema.nullable(),\n reviewRequest: issueReviewRequestSchema.nullable().optional().default(null),\n completedStageIds: z.array(z.string().uuid()).default([]),\n lastDecisionId: z.string().uuid().nullable(),\n lastDecisionOutcome: z.enum(ISSUE_EXECUTION_DECISION_OUTCOMES).nullable(),\n monitor: issueExecutionMonitorStateSchema.optional().nullable(),\n});\n\nexport const issueRecoveryActionReadModelSchema = z.object({\n id: z.string().uuid(),\n companyId: z.string().uuid(),\n sourceIssueId: z.string().uuid(),\n recoveryIssueId: z.string().uuid().nullable(),\n kind: z.enum(ISSUE_RECOVERY_ACTION_KINDS),\n status: z.enum(ISSUE_RECOVERY_ACTION_STATUSES),\n ownerType: z.enum(ISSUE_RECOVERY_ACTION_OWNER_TYPES),\n ownerAgentId: z.string().uuid().nullable(),\n ownerUserId: z.string().nullable(),\n previousOwnerAgentId: z.string().uuid().nullable(),\n returnOwnerAgentId: z.string().uuid().nullable(),\n cause: z.string().min(1),\n fingerprint: z.string().min(1),\n evidence: z.record(z.unknown()),\n nextAction: z.string().min(1),\n wakePolicy: z.record(z.unknown()).nullable(),\n monitorPolicy: z.record(z.unknown()).nullable(),\n attemptCount: z.number().int().nonnegative(),\n maxAttempts: z.number().int().positive().nullable(),\n timeoutAt: z.union([z.date(), z.string().datetime()]).nullable(),\n lastAttemptAt: z.union([z.date(), z.string().datetime()]).nullable(),\n outcome: z.enum(ISSUE_RECOVERY_ACTION_OUTCOMES).nullable(),\n resolutionNote: z.string().nullable(),\n resolvedAt: z.union([z.date(), z.string().datetime()]).nullable(),\n createdAt: z.union([z.date(), z.string().datetime()]),\n updatedAt: z.union([z.date(), z.string().datetime()]),\n});\n\nexport type IssueRecoveryActionReadModel = z.infer<typeof issueRecoveryActionReadModelSchema>;\n\nconst RESOLVE_ISSUE_RECOVERY_ACTION_OUTCOMES = [\n \"restored\",\n \"false_positive\",\n \"blocked\",\n \"cancelled\",\n] as const;\n\nexport const resolveIssueRecoveryActionSchema = z.object({\n actionId: z.string().uuid().optional(),\n outcome: z.enum(RESOLVE_ISSUE_RECOVERY_ACTION_OUTCOMES),\n sourceIssueStatus: z.enum([\"done\", \"in_review\", \"blocked\"]),\n resolutionNote: multilineTextSchema.optional().nullable(),\n}).strict().superRefine((value, ctx) => {\n if (value.outcome === \"restored\") {\n if (value.sourceIssueStatus !== \"done\" && value.sourceIssueStatus !== \"in_review\") {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"Restored recovery actions must move the source issue to done or in_review\",\n path: [\"sourceIssueStatus\"],\n });\n }\n return;\n }\n\n if (value.outcome === \"blocked\") {\n if (value.sourceIssueStatus !== \"blocked\") {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"Blocked recovery actions must move the source issue to blocked\",\n path: [\"sourceIssueStatus\"],\n });\n }\n return;\n }\n\n if (value.outcome === \"false_positive\" || value.outcome === \"cancelled\") {\n if (\n value.sourceIssueStatus !== \"done\" &&\n value.sourceIssueStatus !== \"in_review\"\n ) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"This recovery outcome requires sourceIssueStatus to be done or in_review\",\n path: [\"sourceIssueStatus\"],\n });\n }\n return;\n }\n});\n\nexport type ResolveIssueRecoveryAction = z.infer<typeof resolveIssueRecoveryActionSchema>;\n\nconst issueRequestDepthInputSchema = z\n .number()\n .int()\n .nonnegative()\n .transform((value) => clampIssueRequestDepth(value));\n\ntype IssueCreateStatusDefaultInput = {\n status?: unknown;\n assigneeAgentId?: unknown;\n assigneeUserId?: unknown;\n};\n\nexport function resolveCreateIssueStatusDefault(input: IssueCreateStatusDefaultInput): {\n status: (typeof ISSUE_STATUSES)[number];\n defaulted: boolean;\n reason: \"explicit\" | \"assigned_omitted_status\" | \"unassigned_omitted_status\";\n} {\n if (typeof input.status === \"string\") {\n return {\n status: input.status as (typeof ISSUE_STATUSES)[number],\n defaulted: false,\n reason: \"explicit\",\n };\n }\n\n const hasAssignee =\n (typeof input.assigneeAgentId === \"string\" && input.assigneeAgentId.length > 0)\n || (typeof input.assigneeUserId === \"string\" && input.assigneeUserId.length > 0);\n return {\n status: hasAssignee ? \"todo\" : \"backlog\",\n defaulted: true,\n reason: hasAssignee ? \"assigned_omitted_status\" : \"unassigned_omitted_status\",\n };\n}\n\nfunction withCreateIssueStatusDefault<T extends z.ZodRawShape>(schema: z.ZodObject<T>) {\n return z.preprocess((input) => {\n if (!input || typeof input !== \"object\" || Array.isArray(input)) return input;\n const raw = input as Record<string, unknown>;\n if (raw.status !== undefined) return input;\n return {\n ...raw,\n status: resolveCreateIssueStatusDefault(raw).status,\n };\n }, schema);\n}\n\nconst createIssueBaseSchema = z.object({\n projectId: z.string().uuid().optional().nullable(),\n projectWorkspaceId: z.string().uuid().optional().nullable(),\n goalId: z.string().uuid().optional().nullable(),\n parentId: z.string().uuid().optional().nullable(),\n blockedByIssueIds: z.array(z.string().uuid()).optional(),\n inheritExecutionWorkspaceFromIssueId: z.string().uuid().optional().nullable(),\n title: z.string().min(1),\n description: multilineTextSchema.optional().nullable(),\n status: z.enum(ISSUE_STATUSES),\n workMode: z.enum(ISSUE_WORK_MODES).optional().default(\"standard\"),\n priority: z.enum(ISSUE_PRIORITIES).optional().default(\"medium\"),\n assigneeAgentId: z.string().uuid().optional().nullable(),\n assigneeUserId: z.string().optional().nullable(),\n requestDepth: issueRequestDepthInputSchema.optional().default(0),\n billingCode: z.string().optional().nullable(),\n assigneeAdapterOverrides: issueAssigneeAdapterOverridesSchema.optional().nullable(),\n executionPolicy: issueExecutionPolicySchema.optional().nullable(),\n executionWorkspaceId: z.string().uuid().optional().nullable(),\n executionWorkspacePreference: z.enum(ISSUE_EXECUTION_WORKSPACE_PREFERENCES).optional().nullable(),\n executionWorkspaceSettings: issueExecutionWorkspaceSettingsSchema.optional().nullable(),\n labelIds: z.array(z.string().uuid()).optional(),\n});\n\nexport const createIssueInputSchema = createIssueBaseSchema.extend({\n status: createIssueBaseSchema.shape.status.optional(),\n});\n\nexport const createIssueSchema = withCreateIssueStatusDefault(createIssueBaseSchema);\n\nexport type CreateIssue = z.infer<typeof createIssueSchema>;\n\nexport const createChildIssueSchema = withCreateIssueStatusDefault(createIssueBaseSchema\n .omit({\n parentId: true,\n inheritExecutionWorkspaceFromIssueId: true,\n })\n .extend({\n acceptanceCriteria: z.array(z.string().trim().min(1).max(500)).max(20).optional(),\n blockParentUntilDone: z.boolean().optional().default(false),\n }));\n\nexport type CreateChildIssue = z.infer<typeof createChildIssueSchema>;\n\nexport const createIssueLabelSchema = z.object({\n name: z.string().trim().min(1).max(48),\n color: z.string().regex(/^#(?:[0-9a-fA-F]{6})$/, \"Color must be a 6-digit hex value\"),\n});\n\nexport type CreateIssueLabel = z.infer<typeof createIssueLabelSchema>;\n\nexport const updateIssueSchema = createIssueBaseSchema.partial().extend({\n requestDepth: issueRequestDepthInputSchema.optional(),\n assigneeAgentId: z.string().trim().min(1).optional().nullable(),\n comment: multilineTextSchema.pipe(z.string().min(1)).optional(),\n reviewRequest: issueReviewRequestSchema.optional().nullable(),\n reopen: z.boolean().optional(),\n resume: z.boolean().optional(),\n interrupt: z.boolean().optional(),\n hiddenAt: z.string().datetime().nullable().optional(),\n});\n\nexport type UpdateIssue = z.infer<typeof updateIssueSchema>;\nexport type IssueExecutionWorkspaceSettings = z.infer<typeof issueExecutionWorkspaceSettingsSchema>;\n\nexport const checkoutIssueSchema = z.object({\n agentId: z.string().uuid(),\n expectedStatuses: z.array(z.enum(ISSUE_STATUSES)).nonempty(),\n});\n\nexport type CheckoutIssue = z.infer<typeof checkoutIssueSchema>;\n\nconst commentMetadataLabelSchema = z.string().trim().min(1).max(120);\nconst commentMetadataTextSchema = z.string().trim().min(1).max(2000);\n\nexport const issueCommentAuthorTypeSchema = z.enum(ISSUE_COMMENT_AUTHOR_TYPES);\n\nexport const issueCommentPresentationSchema = z.object({\n kind: z.enum(ISSUE_COMMENT_PRESENTATION_KINDS).default(\"message\"),\n tone: z.enum(ISSUE_COMMENT_PRESENTATION_TONES).default(\"neutral\"),\n title: z.string().trim().min(1).max(160).nullable().optional(),\n detailsDefaultOpen: z.boolean().optional().default(false),\n}).strict();\n\nexport type IssueCommentPresentation = z.infer<typeof issueCommentPresentationSchema>;\n\nconst issueCommentMetadataBaseRowSchema = z.object({\n type: z.enum(ISSUE_COMMENT_METADATA_ROW_TYPES),\n label: commentMetadataLabelSchema.nullable().optional(),\n});\n\nconst issueCommentMetadataTextRowSchema = issueCommentMetadataBaseRowSchema.extend({\n type: z.literal(\"text\"),\n text: commentMetadataTextSchema,\n}).strict();\n\nconst issueCommentMetadataCodeRowSchema = issueCommentMetadataBaseRowSchema.extend({\n type: z.literal(\"code\"),\n code: z.string().min(1).max(4000),\n language: z.string().trim().min(1).max(40).nullable().optional(),\n}).strict();\n\nconst issueCommentMetadataKeyValueRowSchema = issueCommentMetadataBaseRowSchema.extend({\n type: z.literal(\"key_value\"),\n label: commentMetadataLabelSchema,\n value: commentMetadataTextSchema,\n}).strict();\n\nconst issueCommentMetadataIssueLinkRowSchema = issueCommentMetadataBaseRowSchema.extend({\n type: z.literal(\"issue_link\"),\n issueId: z.string().uuid().nullable().optional(),\n identifier: z.string().trim().min(1).max(80).nullable().optional(),\n title: z.string().trim().min(1).max(240).nullable().optional(),\n}).strict();\n\nconst issueCommentMetadataAgentLinkRowSchema = issueCommentMetadataBaseRowSchema.extend({\n type: z.literal(\"agent_link\"),\n agentId: z.string().uuid(),\n name: z.string().trim().min(1).max(160).nullable().optional(),\n}).strict();\n\nconst issueCommentMetadataRunLinkRowSchema = issueCommentMetadataBaseRowSchema.extend({\n type: z.literal(\"run_link\"),\n runId: z.string().uuid(),\n title: z.string().trim().min(1).max(160).nullable().optional(),\n}).strict();\n\nexport const issueCommentMetadataRowSchema = z.discriminatedUnion(\"type\", [\n issueCommentMetadataTextRowSchema,\n issueCommentMetadataCodeRowSchema,\n issueCommentMetadataKeyValueRowSchema,\n issueCommentMetadataIssueLinkRowSchema,\n issueCommentMetadataAgentLinkRowSchema,\n issueCommentMetadataRunLinkRowSchema,\n]).superRefine((value, ctx) => {\n if (value.type === \"issue_link\" && !value.issueId && !value.identifier) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"Issue link rows require issueId or identifier\",\n path: [\"issueId\"],\n });\n }\n});\n\nexport const issueCommentMetadataSectionSchema = z.object({\n title: z.string().trim().min(1).max(160).nullable().optional(),\n rows: z.array(issueCommentMetadataRowSchema).min(1).max(50),\n}).strict();\n\nexport const issueCommentMetadataSchema = z.object({\n version: z.literal(1),\n sourceRunId: z.string().uuid().nullable().optional(),\n sections: z.array(issueCommentMetadataSectionSchema).min(1).max(20),\n}).strict();\n\nexport type IssueCommentMetadata = z.infer<typeof issueCommentMetadataSchema>;\n\nexport const addIssueCommentSchema = z.object({\n body: multilineTextSchema.pipe(z.string().min(1)),\n authorType: issueCommentAuthorTypeSchema.optional(),\n presentation: issueCommentPresentationSchema.nullable().optional(),\n metadata: issueCommentMetadataSchema.nullable().optional(),\n reopen: z.boolean().optional(),\n resume: z.boolean().optional(),\n interrupt: z.boolean().optional(),\n});\n\nexport type AddIssueComment = z.infer<typeof addIssueCommentSchema>;\n\nexport const issueThreadInteractionStatusSchema = z.enum(ISSUE_THREAD_INTERACTION_STATUSES);\nexport const issueThreadInteractionKindSchema = z.enum(ISSUE_THREAD_INTERACTION_KINDS);\nexport const issueThreadInteractionContinuationPolicySchema = z.enum(\n ISSUE_THREAD_INTERACTION_CONTINUATION_POLICIES,\n);\n\nexport const issueDocumentKeySchema = z\n .string()\n .trim()\n .min(1)\n .max(64)\n .regex(/^[a-z0-9][a-z0-9_-]*$/, \"Document key must be lowercase letters, numbers, _ or -\");\n\nexport const suggestedTaskDraftSchema = z.object({\n clientKey: z.string().trim().min(1).max(120),\n parentClientKey: z.string().trim().min(1).max(120).nullable().optional(),\n parentId: z.string().uuid().nullable().optional(),\n title: z.string().trim().min(1).max(240),\n description: multilineTextSchema.pipe(z.string().trim().max(20000)).nullable().optional(),\n priority: z.enum(ISSUE_PRIORITIES).nullable().optional(),\n workMode: z.enum(ISSUE_WORK_MODES).nullable().optional(),\n assigneeAgentId: z.string().uuid().nullable().optional(),\n assigneeUserId: z.string().trim().min(1).nullable().optional(),\n projectId: z.string().uuid().nullable().optional(),\n goalId: z.string().uuid().nullable().optional(),\n billingCode: z.string().trim().max(120).nullable().optional(),\n labels: z.array(z.string().trim().min(1).max(48)).max(20).optional(),\n hiddenInPreview: z.boolean().optional(),\n}).superRefine((value, ctx) => {\n if (value.assigneeAgentId && value.assigneeUserId) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"Suggested tasks can only target one assignee\",\n path: [\"assigneeAgentId\"],\n });\n }\n});\n\nexport const suggestTasksPayloadSchema = z.object({\n version: z.literal(1),\n defaultParentId: z.string().uuid().nullable().optional(),\n tasks: z.array(suggestedTaskDraftSchema).min(1).max(50),\n}).superRefine((value, ctx) => {\n const seenClientKeys = new Set<string>();\n for (const [index, task] of value.tasks.entries()) {\n if (seenClientKeys.has(task.clientKey)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"clientKey must be unique within one interaction\",\n path: [\"tasks\", index, \"clientKey\"],\n });\n continue;\n }\n seenClientKeys.add(task.clientKey);\n }\n});\n\nexport const suggestTasksResultCreatedTaskSchema = z.object({\n clientKey: z.string().trim().min(1).max(120),\n issueId: z.string().uuid(),\n identifier: z.string().trim().min(1).nullable().optional(),\n title: z.string().trim().min(1).nullable().optional(),\n parentIssueId: z.string().uuid().nullable().optional(),\n parentIdentifier: z.string().trim().min(1).nullable().optional(),\n});\n\nexport const suggestTasksResultSchema = z.object({\n version: z.literal(1),\n createdTasks: z.array(suggestTasksResultCreatedTaskSchema).max(50).optional(),\n skippedClientKeys: z.array(z.string().trim().min(1).max(120)).max(50).optional(),\n rejectionReason: z.string().trim().max(4000).nullable().optional(),\n});\n\nexport const askUserQuestionsQuestionOptionSchema = z.object({\n id: z.string().trim().min(1).max(120),\n label: z.string().trim().min(1).max(120),\n description: z.string().trim().max(500).nullable().optional(),\n});\n\nexport const askUserQuestionsQuestionSchema = z.object({\n id: z.string().trim().min(1).max(120),\n prompt: z.string().trim().min(1).max(500),\n helpText: z.string().trim().max(1000).nullable().optional(),\n selectionMode: z.enum([\"single\", \"multi\"]),\n required: z.boolean().optional(),\n options: z.array(askUserQuestionsQuestionOptionSchema).min(1).max(10),\n});\n\nexport const askUserQuestionsPayloadSchema = z.object({\n version: z.literal(1),\n title: z.string().trim().max(240).nullable().optional(),\n submitLabel: z.string().trim().max(120).nullable().optional(),\n questions: z.array(askUserQuestionsQuestionSchema).min(1).max(10),\n}).superRefine((value, ctx) => {\n const seenQuestionIds = new Set<string>();\n for (const [questionIndex, question] of value.questions.entries()) {\n if (seenQuestionIds.has(question.id)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"Question ids must be unique within one interaction\",\n path: [\"questions\", questionIndex, \"id\"],\n });\n }\n seenQuestionIds.add(question.id);\n\n const seenOptionIds = new Set<string>();\n for (const [optionIndex, option] of question.options.entries()) {\n if (seenOptionIds.has(option.id)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"Option ids must be unique within one question\",\n path: [\"questions\", questionIndex, \"options\", optionIndex, \"id\"],\n });\n }\n seenOptionIds.add(option.id);\n }\n }\n});\n\nexport const askUserQuestionsAnswerSchema = z.object({\n questionId: z.string().trim().min(1).max(120),\n optionIds: z.array(z.string().trim().min(1).max(120)).max(20),\n});\n\nexport const askUserQuestionsResultSchema = z.object({\n version: z.literal(1),\n answers: z.array(askUserQuestionsAnswerSchema).max(20),\n cancelled: z.literal(true).optional(),\n cancellationReason: z.string().trim().max(4000).nullable().optional(),\n summaryMarkdown: z.string().max(20000).nullable().optional(),\n});\n\nconst requestConfirmationHrefSchema = z.string().trim().min(1).max(2000).refine((value) => {\n const lower = value.toLowerCase();\n return !lower.startsWith(\"javascript:\")\n && !lower.startsWith(\"data:\")\n && !value.startsWith(\"//\");\n}, \"href must not use javascript:, data:, or protocol-relative URLs\");\n\nconst requestConfirmationTargetBaseSchema = z.object({\n label: z.string().trim().min(1).max(120).nullable().optional(),\n href: requestConfirmationHrefSchema.nullable().optional(),\n});\n\nexport const requestConfirmationIssueDocumentTargetSchema = requestConfirmationTargetBaseSchema.extend({\n type: z.literal(\"issue_document\"),\n issueId: z.string().uuid().nullable().optional(),\n documentId: z.string().uuid().nullable().optional(),\n key: issueDocumentKeySchema,\n revisionId: z.string().uuid(),\n revisionNumber: z.number().int().positive().nullable().optional(),\n});\n\nexport const requestConfirmationCustomTargetSchema = requestConfirmationTargetBaseSchema.extend({\n type: z.literal(\"custom\"),\n key: z.string().trim().min(1).max(120),\n revisionId: z.string().trim().min(1).max(255).nullable().optional(),\n revisionNumber: z.number().int().positive().nullable().optional(),\n});\n\nexport const requestConfirmationTargetSchema = z.discriminatedUnion(\"type\", [\n requestConfirmationIssueDocumentTargetSchema,\n requestConfirmationCustomTargetSchema,\n]);\n\nexport const requestConfirmationPayloadSchema = z.object({\n version: z.literal(1),\n prompt: z.string().trim().min(1).max(1000),\n acceptLabel: z.string().trim().min(1).max(80).nullable().optional(),\n rejectLabel: z.string().trim().min(1).max(80).nullable().optional(),\n rejectRequiresReason: z.boolean().optional(),\n rejectReasonLabel: z.string().trim().min(1).max(160).nullable().optional(),\n allowDeclineReason: z.boolean().optional().default(true),\n declineReasonPlaceholder: z.string().trim().min(1).max(240).nullable().optional(),\n detailsMarkdown: z.string().max(20000).nullable().optional(),\n supersedeOnUserComment: z.boolean().optional(),\n target: requestConfirmationTargetSchema.nullable().optional(),\n});\n\nexport const requestConfirmationResultSchema = z.object({\n version: z.literal(1),\n outcome: z.enum([\"accepted\", \"rejected\", \"superseded_by_comment\", \"stale_target\"]),\n reason: z.string().trim().max(4000).nullable().optional(),\n commentId: z.string().uuid().nullable().optional(),\n staleTarget: requestConfirmationTargetSchema.nullable().optional(),\n});\n\nexport const createIssueThreadInteractionSchema = z.discriminatedUnion(\"kind\", [\n z.object({\n kind: z.literal(\"suggest_tasks\"),\n idempotencyKey: z.string().trim().max(255).nullable().optional(),\n sourceCommentId: z.string().uuid().nullable().optional(),\n sourceRunId: z.string().uuid().nullable().optional(),\n title: z.string().trim().max(240).nullable().optional(),\n summary: z.string().trim().max(1000).nullable().optional(),\n continuationPolicy: issueThreadInteractionContinuationPolicySchema.optional().default(\"wake_assignee\"),\n payload: suggestTasksPayloadSchema,\n }),\n z.object({\n kind: z.literal(\"ask_user_questions\"),\n idempotencyKey: z.string().trim().max(255).nullable().optional(),\n sourceCommentId: z.string().uuid().nullable().optional(),\n sourceRunId: z.string().uuid().nullable().optional(),\n title: z.string().trim().max(240).nullable().optional(),\n summary: z.string().trim().max(1000).nullable().optional(),\n continuationPolicy: issueThreadInteractionContinuationPolicySchema.optional().default(\"wake_assignee\"),\n payload: askUserQuestionsPayloadSchema,\n }),\n z.object({\n kind: z.literal(\"request_confirmation\"),\n idempotencyKey: z.string().trim().max(255).nullable().optional(),\n sourceCommentId: z.string().uuid().nullable().optional(),\n sourceRunId: z.string().uuid().nullable().optional(),\n title: z.string().trim().max(240).nullable().optional(),\n summary: z.string().trim().max(1000).nullable().optional(),\n continuationPolicy: issueThreadInteractionContinuationPolicySchema.optional().default(\"none\"),\n payload: requestConfirmationPayloadSchema,\n }),\n]);\n\nexport type CreateIssueThreadInteraction = z.infer<typeof createIssueThreadInteractionSchema>;\n\nexport const acceptIssueThreadInteractionSchema = z.object({\n selectedClientKeys: z.array(z.string().trim().min(1).max(120)).min(1).max(50).optional(),\n}).superRefine((value, ctx) => {\n const seenClientKeys = new Set<string>();\n for (const [index, clientKey] of (value.selectedClientKeys ?? []).entries()) {\n if (seenClientKeys.has(clientKey)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"selectedClientKeys must be unique\",\n path: [\"selectedClientKeys\", index],\n });\n continue;\n }\n seenClientKeys.add(clientKey);\n }\n});\nexport type AcceptIssueThreadInteraction = z.infer<typeof acceptIssueThreadInteractionSchema>;\n\nexport const rejectIssueThreadInteractionSchema = z.object({\n reason: z.string().trim().max(4000).optional(),\n});\nexport type RejectIssueThreadInteraction = z.infer<typeof rejectIssueThreadInteractionSchema>;\n\nexport const cancelIssueThreadInteractionSchema = z.object({\n reason: z.string().trim().max(4000).optional(),\n});\nexport type CancelIssueThreadInteraction = z.infer<typeof cancelIssueThreadInteractionSchema>;\n\nexport const respondIssueThreadInteractionSchema = z.object({\n answers: z.array(askUserQuestionsAnswerSchema).max(20),\n summaryMarkdown: multilineTextSchema.pipe(z.string().max(20000)).nullable().optional(),\n});\nexport type RespondIssueThreadInteraction = z.infer<typeof respondIssueThreadInteractionSchema>;\n\nexport const linkIssueApprovalSchema = z.object({\n approvalId: z.string().uuid(),\n});\n\nexport type LinkIssueApproval = z.infer<typeof linkIssueApprovalSchema>;\n\nexport const createIssueAttachmentMetadataSchema = z.object({\n issueCommentId: z.string().uuid().optional().nullable(),\n});\n\nexport type CreateIssueAttachmentMetadata = z.infer<typeof createIssueAttachmentMetadataSchema>;\n\nexport const ISSUE_DOCUMENT_FORMATS = [\"markdown\"] as const;\n\nexport const issueDocumentFormatSchema = z.enum(ISSUE_DOCUMENT_FORMATS);\n\nexport const upsertIssueDocumentSchema = z.object({\n title: z.string().trim().max(200).nullable().optional(),\n format: issueDocumentFormatSchema,\n body: multilineTextSchema.pipe(z.string().max(524288)),\n changeSummary: z.string().trim().max(500).nullable().optional(),\n baseRevisionId: z.string().uuid().nullable().optional(),\n});\n\nexport const restoreIssueDocumentRevisionSchema = z.object({});\n\nexport type IssueDocumentFormat = z.infer<typeof issueDocumentFormatSchema>;\nexport type UpsertIssueDocument = z.infer<typeof upsertIssueDocumentSchema>;\nexport type RestoreIssueDocumentRevision = z.infer<typeof restoreIssueDocumentRevisionSchema>;\n", "import { z } from \"zod\";\nimport {\n ISSUE_PRIORITIES,\n ROUTINE_CATCH_UP_POLICIES,\n ROUTINE_CONCURRENCY_POLICIES,\n ROUTINE_STATUSES,\n ROUTINE_TRIGGER_KINDS,\n ROUTINE_TRIGGER_SIGNING_MODES,\n ROUTINE_VARIABLE_TYPES,\n} from \"../constants.js\";\nimport {\n ISSUE_EXECUTION_WORKSPACE_PREFERENCES,\n issueExecutionWorkspaceSettingsSchema,\n} from \"./issue.js\";\n\nconst routineVariableValueSchema = z.union([z.string(), z.number().finite(), z.boolean()]);\n\nexport const routineVariableSchema = z.object({\n name: z.string().trim().regex(/^[A-Za-z][A-Za-z0-9_]*$/),\n label: z.string().trim().max(120).optional().nullable(),\n type: z.enum(ROUTINE_VARIABLE_TYPES).optional().default(\"text\"),\n defaultValue: routineVariableValueSchema.optional().nullable(),\n required: z.boolean().optional().default(true),\n options: z.array(z.string().trim().min(1).max(120)).max(50).optional().default([]),\n}).superRefine((value, ctx) => {\n if (value.type === \"select\" && value.options.length === 0) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: [\"options\"],\n message: \"Select variables require at least one option\",\n });\n }\n if (value.type !== \"select\" && value.options.length > 0) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: [\"options\"],\n message: \"Only select variables can define options\",\n });\n }\n if (value.type === \"select\" && value.defaultValue != null) {\n if (typeof value.defaultValue !== \"string\" || !value.options.includes(value.defaultValue)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: [\"defaultValue\"],\n message: \"Select variable defaults must match one of the allowed options\",\n });\n }\n }\n});\n\nexport const createRoutineSchema = z.object({\n projectId: z.string().uuid().optional().nullable(),\n goalId: z.string().uuid().optional().nullable(),\n parentIssueId: z.string().uuid().optional().nullable(),\n title: z.string().trim().min(1).max(200),\n description: z.string().optional().nullable(),\n assigneeAgentId: z.string().uuid().optional().nullable(),\n priority: z.enum(ISSUE_PRIORITIES).optional().default(\"medium\"),\n status: z.enum(ROUTINE_STATUSES).optional().default(\"active\"),\n concurrencyPolicy: z.enum(ROUTINE_CONCURRENCY_POLICIES).optional().default(\"coalesce_if_active\"),\n catchUpPolicy: z.enum(ROUTINE_CATCH_UP_POLICIES).optional().default(\"skip_missed\"),\n variables: z.array(routineVariableSchema).optional().default([]),\n});\n\nexport type CreateRoutine = z.infer<typeof createRoutineSchema>;\n\nexport const updateRoutineSchema = createRoutineSchema.partial().extend({\n baseRevisionId: z.string().uuid().optional().nullable(),\n});\nexport type UpdateRoutine = z.infer<typeof updateRoutineSchema>;\n\nexport const routineRevisionSnapshotRoutineV1Schema = z.object({\n id: z.string().uuid(),\n companyId: z.string().uuid(),\n projectId: z.string().uuid().nullable(),\n goalId: z.string().uuid().nullable(),\n parentIssueId: z.string().uuid().nullable(),\n title: z.string().trim().min(1).max(200),\n description: z.string().nullable(),\n assigneeAgentId: z.string().uuid().nullable(),\n priority: z.enum(ISSUE_PRIORITIES),\n status: z.enum(ROUTINE_STATUSES),\n concurrencyPolicy: z.enum(ROUTINE_CONCURRENCY_POLICIES),\n catchUpPolicy: z.enum(ROUTINE_CATCH_UP_POLICIES),\n variables: z.array(routineVariableSchema),\n}).strict();\n\nexport const routineRevisionSnapshotTriggerV1Schema = z.object({\n id: z.string().uuid(),\n kind: z.enum(ROUTINE_TRIGGER_KINDS),\n label: z.string().nullable(),\n enabled: z.boolean(),\n cronExpression: z.string().nullable(),\n timezone: z.string().nullable(),\n publicId: z.string().nullable(),\n signingMode: z.enum(ROUTINE_TRIGGER_SIGNING_MODES).nullable(),\n replayWindowSec: z.number().int().min(30).max(86_400).nullable(),\n}).strict();\n\nexport const routineRevisionSnapshotV1Schema = z.object({\n version: z.literal(1),\n routine: routineRevisionSnapshotRoutineV1Schema,\n triggers: z.array(routineRevisionSnapshotTriggerV1Schema),\n}).strict();\n\nexport const routineRevisionSnapshotSchema = routineRevisionSnapshotV1Schema;\nexport type RoutineRevisionSnapshotV1 = z.infer<typeof routineRevisionSnapshotV1Schema>;\nexport type RoutineRevisionSnapshot = z.infer<typeof routineRevisionSnapshotSchema>;\n\nconst baseTriggerSchema = z.object({\n label: z.string().trim().max(120).optional().nullable(),\n enabled: z.boolean().optional().default(true),\n});\n\nexport const createRoutineTriggerSchema = z.discriminatedUnion(\"kind\", [\n baseTriggerSchema.extend({\n kind: z.literal(\"schedule\"),\n cronExpression: z.string().trim().min(1),\n timezone: z.string().trim().min(1).default(\"UTC\"),\n }),\n baseTriggerSchema.extend({\n kind: z.literal(\"webhook\"),\n signingMode: z.enum(ROUTINE_TRIGGER_SIGNING_MODES).optional().default(\"bearer\"),\n replayWindowSec: z.number().int().min(30).max(86_400).optional().default(300),\n }),\n baseTriggerSchema.extend({\n kind: z.literal(\"api\"),\n }),\n]);\n\nexport type CreateRoutineTrigger = z.infer<typeof createRoutineTriggerSchema>;\n\nexport const updateRoutineTriggerSchema = z.object({\n label: z.string().trim().max(120).optional().nullable(),\n enabled: z.boolean().optional(),\n cronExpression: z.string().trim().min(1).optional().nullable(),\n timezone: z.string().trim().min(1).optional().nullable(),\n signingMode: z.enum(ROUTINE_TRIGGER_SIGNING_MODES).optional().nullable(),\n replayWindowSec: z.number().int().min(30).max(86_400).optional().nullable(),\n});\n\nexport type UpdateRoutineTrigger = z.infer<typeof updateRoutineTriggerSchema>;\n\nexport const runRoutineSchema = z.object({\n triggerId: z.string().uuid().optional().nullable(),\n payload: z.record(z.unknown()).optional().nullable(),\n variables: z.record(routineVariableValueSchema).optional().nullable(),\n projectId: z.string().uuid().optional().nullable(),\n assigneeAgentId: z.string().uuid().optional().nullable(),\n idempotencyKey: z.string().trim().max(255).optional().nullable(),\n source: z.enum([\"manual\", \"api\"]).optional().default(\"manual\"),\n executionWorkspaceId: z.string().uuid().optional().nullable(),\n executionWorkspacePreference: z.enum(ISSUE_EXECUTION_WORKSPACE_PREFERENCES).optional().nullable(),\n executionWorkspaceSettings: issueExecutionWorkspaceSettingsSchema.optional().nullable(),\n});\n\nexport type RunRoutine = z.infer<typeof runRoutineSchema>;\n\nexport const rotateRoutineTriggerSecretSchema = z.object({});\nexport type RotateRoutineTriggerSecret = z.infer<typeof rotateRoutineTriggerSecretSchema>;\n", "import { z } from \"zod\";\nimport { MAX_COMPANY_ATTACHMENT_MAX_BYTES } from \"../constants.js\";\nimport {\n issueCommentAuthorTypeSchema,\n issueCommentMetadataSchema,\n issueCommentPresentationSchema,\n} from \"./issue.js\";\nimport { routineVariableSchema } from \"./routine.js\";\n\nexport const portabilityIncludeSchema = z\n .object({\n company: z.boolean().optional(),\n agents: z.boolean().optional(),\n projects: z.boolean().optional(),\n issues: z.boolean().optional(),\n skills: z.boolean().optional(),\n })\n .partial();\n\nexport const portabilityEnvInputSchema = z.object({\n key: z.string().min(1),\n description: z.string().nullable(),\n agentSlug: z.string().min(1).nullable(),\n projectSlug: z.string().min(1).nullable(),\n kind: z.enum([\"secret\", \"plain\"]),\n requirement: z.enum([\"required\", \"optional\"]),\n defaultValue: z.string().nullable(),\n portability: z.enum([\"portable\", \"system_dependent\"]),\n});\n\nexport const portabilityFileEntrySchema = z.union([\n z.string(),\n z.object({\n encoding: z.literal(\"base64\"),\n data: z.string(),\n contentType: z.string().min(1).optional().nullable(),\n }),\n]);\n\nexport const portabilityCompanyManifestEntrySchema = z.object({\n path: z.string().min(1),\n name: z.string().min(1),\n description: z.string().nullable(),\n brandColor: z.string().nullable(),\n logoPath: z.string().nullable(),\n attachmentMaxBytes: z.number().int().min(1).max(MAX_COMPANY_ATTACHMENT_MAX_BYTES).nullable().default(null),\n requireBoardApprovalForNewAgents: z.boolean(),\n feedbackDataSharingEnabled: z.boolean().default(false),\n feedbackDataSharingConsentAt: z.string().datetime().nullable().default(null),\n feedbackDataSharingConsentByUserId: z.string().nullable().default(null),\n feedbackDataSharingTermsVersion: z.string().nullable().default(null),\n});\n\nexport const portabilitySidebarOrderSchema = z.object({\n agents: z.array(z.string().min(1)).default([]),\n projects: z.array(z.string().min(1)).default([]),\n});\n\nexport const portabilityAgentManifestEntrySchema = z.object({\n slug: z.string().min(1),\n name: z.string().min(1),\n path: z.string().min(1),\n skills: z.array(z.string().min(1)).default([]),\n role: z.string().min(1),\n title: z.string().nullable(),\n icon: z.string().nullable(),\n capabilities: z.string().nullable(),\n reportsToSlug: z.string().min(1).nullable(),\n adapterType: z.string().min(1),\n adapterConfig: z.record(z.unknown()),\n runtimeConfig: z.record(z.unknown()),\n permissions: z.record(z.unknown()),\n budgetMonthlyCents: z.number().int().nonnegative(),\n metadata: z.record(z.unknown()).nullable(),\n});\n\nexport const portabilitySkillManifestEntrySchema = z.object({\n key: z.string().min(1),\n slug: z.string().min(1),\n name: z.string().min(1),\n path: z.string().min(1),\n description: z.string().nullable(),\n sourceType: z.string().min(1),\n sourceLocator: z.string().nullable(),\n sourceRef: z.string().nullable(),\n trustLevel: z.string().nullable(),\n compatibility: z.string().nullable(),\n metadata: z.record(z.unknown()).nullable(),\n fileInventory: z.array(z.object({\n path: z.string().min(1),\n kind: z.string().min(1),\n })).default([]),\n});\n\nexport const portabilityProjectManifestEntrySchema = z.object({\n slug: z.string().min(1),\n name: z.string().min(1),\n path: z.string().min(1),\n description: z.string().nullable(),\n ownerAgentSlug: z.string().min(1).nullable(),\n leadAgentSlug: z.string().min(1).nullable(),\n targetDate: z.string().nullable(),\n color: z.string().nullable(),\n status: z.string().nullable(),\n executionWorkspacePolicy: z.record(z.unknown()).nullable(),\n workspaces: z.array(z.object({\n key: z.string().min(1),\n name: z.string().min(1),\n sourceType: z.string().nullable(),\n repoUrl: z.string().nullable(),\n repoRef: z.string().nullable(),\n defaultRef: z.string().nullable(),\n visibility: z.string().nullable(),\n setupCommand: z.string().nullable(),\n cleanupCommand: z.string().nullable(),\n metadata: z.record(z.unknown()).nullable(),\n isPrimary: z.boolean(),\n })).default([]),\n metadata: z.record(z.unknown()).nullable(),\n});\n\nexport const portabilityIssueRoutineTriggerManifestEntrySchema = z.object({\n kind: z.string().min(1),\n label: z.string().nullable(),\n enabled: z.boolean(),\n cronExpression: z.string().nullable(),\n timezone: z.string().nullable(),\n signingMode: z.string().nullable(),\n replayWindowSec: z.number().int().nullable(),\n});\n\nexport const portabilityIssueRoutineManifestEntrySchema = z.object({\n concurrencyPolicy: z.string().nullable(),\n catchUpPolicy: z.string().nullable(),\n variables: z.array(routineVariableSchema).nullable().optional(),\n triggers: z.array(portabilityIssueRoutineTriggerManifestEntrySchema).default([]),\n});\n\nexport const portabilityIssueCommentManifestEntrySchema = z.object({\n body: z.string().min(1),\n authorType: issueCommentAuthorTypeSchema,\n authorAgentSlug: z.string().min(1).nullable(),\n authorUserId: z.string().nullable(),\n presentation: issueCommentPresentationSchema.nullable(),\n metadata: issueCommentMetadataSchema.nullable(),\n createdAt: z.string().datetime().nullable(),\n});\n\nexport const portabilityIssueManifestEntrySchema = z.object({\n slug: z.string().min(1),\n identifier: z.string().min(1).nullable(),\n title: z.string().min(1),\n path: z.string().min(1),\n projectSlug: z.string().min(1).nullable(),\n projectWorkspaceKey: z.string().min(1).nullable(),\n assigneeAgentSlug: z.string().min(1).nullable(),\n description: z.string().nullable(),\n recurring: z.boolean().default(false),\n routine: portabilityIssueRoutineManifestEntrySchema.nullable(),\n legacyRecurrence: z.record(z.unknown()).nullable(),\n status: z.string().nullable(),\n priority: z.string().nullable(),\n labelIds: z.array(z.string().min(1)).default([]),\n billingCode: z.string().nullable(),\n executionWorkspaceSettings: z.record(z.unknown()).nullable(),\n assigneeAdapterOverrides: z.record(z.unknown()).nullable(),\n comments: z.array(portabilityIssueCommentManifestEntrySchema).default([]),\n metadata: z.record(z.unknown()).nullable(),\n});\n\nexport const portabilityManifestSchema = z.object({\n schemaVersion: z.number().int().positive(),\n generatedAt: z.string().datetime(),\n source: z\n .object({\n companyId: z.string().uuid(),\n companyName: z.string().min(1),\n })\n .nullable(),\n includes: z.object({\n company: z.boolean(),\n agents: z.boolean(),\n projects: z.boolean(),\n issues: z.boolean(),\n skills: z.boolean(),\n }),\n company: portabilityCompanyManifestEntrySchema.nullable(),\n sidebar: portabilitySidebarOrderSchema.nullable(),\n agents: z.array(portabilityAgentManifestEntrySchema),\n skills: z.array(portabilitySkillManifestEntrySchema).default([]),\n projects: z.array(portabilityProjectManifestEntrySchema).default([]),\n issues: z.array(portabilityIssueManifestEntrySchema).default([]),\n envInputs: z.array(portabilityEnvInputSchema).default([]),\n});\n\nexport const portabilitySourceSchema = z.discriminatedUnion(\"type\", [\n z.object({\n type: z.literal(\"inline\"),\n rootPath: z.string().min(1).optional().nullable(),\n files: z.record(portabilityFileEntrySchema),\n }),\n z.object({\n type: z.literal(\"github\"),\n url: z.string().url(),\n }),\n]);\n\nexport const portabilityTargetSchema = z.discriminatedUnion(\"mode\", [\n z.object({\n mode: z.literal(\"new_company\"),\n newCompanyName: z.string().min(1).optional().nullable(),\n }),\n z.object({\n mode: z.literal(\"existing_company\"),\n companyId: z.string().uuid(),\n }),\n]);\n\nexport const portabilityAgentSelectionSchema = z.union([\n z.literal(\"all\"),\n z.array(z.string().min(1)),\n]);\n\nexport const portabilityCollisionStrategySchema = z.enum([\"rename\", \"skip\", \"replace\"]);\n\nexport const companyPortabilityExportSchema = z.object({\n include: portabilityIncludeSchema.optional(),\n agents: z.array(z.string().min(1)).optional(),\n skills: z.array(z.string().min(1)).optional(),\n projects: z.array(z.string().min(1)).optional(),\n issues: z.array(z.string().min(1)).optional(),\n projectIssues: z.array(z.string().min(1)).optional(),\n selectedFiles: z.array(z.string().min(1)).optional(),\n expandReferencedSkills: z.boolean().optional(),\n sidebarOrder: portabilitySidebarOrderSchema.partial().optional(),\n});\n\nexport type CompanyPortabilityExport = z.infer<typeof companyPortabilityExportSchema>;\n\nexport const companyPortabilityPreviewSchema = z.object({\n source: portabilitySourceSchema,\n include: portabilityIncludeSchema.optional(),\n target: portabilityTargetSchema,\n agents: portabilityAgentSelectionSchema.optional(),\n collisionStrategy: portabilityCollisionStrategySchema.optional(),\n nameOverrides: z.record(z.string().min(1), z.string().min(1)).optional(),\n selectedFiles: z.array(z.string().min(1)).optional(),\n});\n\nexport type CompanyPortabilityPreview = z.infer<typeof companyPortabilityPreviewSchema>;\n\nexport const portabilityAdapterOverrideSchema = z.object({\n adapterType: z.string().min(1),\n adapterConfig: z.record(z.unknown()).optional(),\n});\n\nexport const companyPortabilityImportSchema = companyPortabilityPreviewSchema.extend({\n adapterOverrides: z.record(z.string().min(1), portabilityAdapterOverrideSchema).optional(),\n});\n\nexport type CompanyPortabilityImport = z.infer<typeof companyPortabilityImportSchema>;\n", "import { z } from \"zod\";\nimport {\n SECRET_BINDING_TARGET_TYPES,\n SECRET_MANAGED_MODES,\n SECRET_PROVIDER_CONFIG_STATUSES,\n SECRET_PROVIDERS,\n SECRET_STATUSES,\n} from \"../constants.js\";\n\nexport const envBindingPlainSchema = z.object({\n type: z.literal(\"plain\"),\n value: z.string(),\n});\n\nexport const envBindingSecretRefSchema = z.object({\n type: z.literal(\"secret_ref\"),\n secretId: z.string().uuid(),\n version: z.union([z.literal(\"latest\"), z.number().int().positive()]).optional(),\n});\n\n// Backward-compatible union that accepts legacy inline values.\nexport const envBindingSchema = z.union([\n z.string(),\n envBindingPlainSchema,\n envBindingSecretRefSchema,\n]);\n\nexport const envConfigSchema = z.record(envBindingSchema);\n\nexport const createSecretSchema = z.object({\n name: z.string().min(1),\n key: z.string().min(1).regex(/^[a-zA-Z0-9_.-]+$/).optional(),\n provider: z.enum(SECRET_PROVIDERS).optional(),\n providerConfigId: z.string().uuid().optional().nullable(),\n managedMode: z.enum(SECRET_MANAGED_MODES).optional(),\n value: z.string().min(1).optional().nullable(),\n description: z.string().optional().nullable(),\n externalRef: z.string().optional().nullable(),\n providerMetadata: z.record(z.unknown()).optional().nullable(),\n providerVersionRef: z.string().optional().nullable(),\n}).superRefine((value, ctx) => {\n if ((value.managedMode ?? \"paperclip_managed\") === \"external_reference\") {\n if (!value.externalRef?.trim()) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: [\"externalRef\"],\n message: \"External reference secrets require externalRef\",\n });\n }\n return;\n }\n if (value.externalRef?.trim()) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: [\"externalRef\"],\n message: \"Managed secrets cannot set externalRef\",\n });\n }\n if (!value.value?.trim()) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: [\"value\"],\n message: \"Managed secrets require value\",\n });\n }\n});\n\nexport type CreateSecret = z.infer<typeof createSecretSchema>;\n\nexport const rotateSecretSchema = z.object({\n value: z.string().min(1).optional().nullable(),\n externalRef: z.string().optional().nullable(),\n providerVersionRef: z.string().optional().nullable(),\n providerConfigId: z.string().uuid().optional().nullable(),\n});\n\nexport type RotateSecret = z.infer<typeof rotateSecretSchema>;\n\nexport const updateSecretSchema = z.object({\n name: z.string().min(1).optional(),\n key: z.string().min(1).regex(/^[a-zA-Z0-9_.-]+$/).optional(),\n status: z.enum(SECRET_STATUSES).optional(),\n providerConfigId: z.string().uuid().optional().nullable(),\n description: z.string().optional().nullable(),\n externalRef: z.string().optional().nullable(),\n providerMetadata: z.record(z.unknown()).optional().nullable(),\n});\n\nexport type UpdateSecret = z.infer<typeof updateSecretSchema>;\n\nexport const secretBindingTargetSchema = z.object({\n targetType: z.enum(SECRET_BINDING_TARGET_TYPES),\n targetId: z.string().min(1),\n configPath: z.string().min(1),\n});\n\nexport const createSecretBindingSchema = secretBindingTargetSchema.extend({\n secretId: z.string().uuid(),\n versionSelector: z.union([z.literal(\"latest\"), z.number().int().positive()]).default(\"latest\"),\n required: z.boolean().default(true),\n label: z.string().optional().nullable(),\n});\n\nexport type CreateSecretBinding = z.infer<typeof createSecretBindingSchema>;\n\nconst safeShortText = z.string().trim().min(1).max(160);\nconst optionalSafeShortText = safeShortText.optional().nullable();\n\nconst deniedProviderConfigKeyPattern =\n /^(access[-_]?key([-_]?id)?|secret[-_]?access[-_]?key|secret[-_]?key|token|password|passwd|credential|credentials|private[-_]?key|pem|jwt|session[-_]?token|service[-_]?account([-_]?json)?|client[-_]?secret|secret[-_]?id|unseal[-_]?key|recovery[-_]?key|key[-_]?file([-_]?path)?|token[-_]?file([-_]?path)?)$/i;\n\nfunction rejectSensitiveProviderConfigKeys(value: unknown, ctx: z.RefinementCtx) {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return;\n for (const key of Object.keys(value)) {\n if (!deniedProviderConfigKeyPattern.test(key)) continue;\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: [\"config\", key],\n message: `Provider vault config cannot persist sensitive field: ${key}`,\n });\n }\n}\n\nexport const localEncryptedProviderConfigSchema = z.object({\n backupReminderAcknowledged: z.boolean().optional(),\n}).strict();\n\nexport const awsSecretsManagerProviderConfigSchema = z.object({\n region: z.string().trim().regex(/^[a-z]{2}(?:-gov)?-[a-z]+-\\d+$/, \"Invalid AWS region\"),\n namespace: optionalSafeShortText,\n secretNamePrefix: optionalSafeShortText,\n kmsKeyId: z.string().trim().min(1).max(512).optional().nullable(),\n ownerTag: optionalSafeShortText,\n environmentTag: optionalSafeShortText,\n}).strict();\n\nexport const gcpSecretManagerProviderConfigSchema = z.object({\n projectId: z.string().trim().min(1).max(128).regex(/^[a-z][a-z0-9-]{4,127}$/).optional().nullable(),\n location: optionalSafeShortText,\n namespace: optionalSafeShortText,\n secretNamePrefix: optionalSafeShortText,\n}).strict();\n\nconst vaultAddressSchema = z.preprocess(\n (value) => typeof value === \"string\" ? value.trim() : value,\n z.string().url().superRefine((value, ctx) => {\n let url: URL;\n try {\n url = new URL(value);\n } catch {\n return;\n }\n const hasPath = url.pathname !== \"\" && url.pathname !== \"/\";\n if (\n (url.protocol !== \"http:\" && url.protocol !== \"https:\") ||\n url.username ||\n url.password ||\n url.search ||\n url.hash ||\n hasPath\n ) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"Vault address must be an origin-only HTTP(S) URL without credentials, path, query, or fragment\",\n });\n }\n }).transform((value) => new URL(value).origin),\n);\n\nfunction rejectUnsafeVaultAddress(value: unknown, ctx: z.RefinementCtx) {\n if (value === undefined || value === null) return;\n const parsed = vaultAddressSchema.safeParse(value);\n if (parsed.success) return;\n for (const issue of parsed.error.issues) {\n ctx.addIssue({\n ...issue,\n path: [\"config\", \"address\", ...issue.path],\n });\n }\n}\n\nexport const vaultProviderConfigSchema = z.object({\n address: vaultAddressSchema.optional().nullable(),\n namespace: optionalSafeShortText,\n mountPath: optionalSafeShortText,\n secretPathPrefix: optionalSafeShortText,\n}).strict();\n\nexport const secretProviderConfigPayloadSchema = z.discriminatedUnion(\"provider\", [\n z.object({ provider: z.literal(\"local_encrypted\"), config: localEncryptedProviderConfigSchema }),\n z.object({ provider: z.literal(\"aws_secrets_manager\"), config: awsSecretsManagerProviderConfigSchema }),\n z.object({ provider: z.literal(\"gcp_secret_manager\"), config: gcpSecretManagerProviderConfigSchema }),\n z.object({ provider: z.literal(\"vault\"), config: vaultProviderConfigSchema }),\n]);\n\nexport const createSecretProviderConfigSchema = z.object({\n provider: z.enum(SECRET_PROVIDERS),\n displayName: z.string().trim().min(1).max(120),\n status: z.enum(SECRET_PROVIDER_CONFIG_STATUSES).optional(),\n isDefault: z.boolean().optional(),\n config: z.record(z.unknown()).default({}),\n}).superRefine((value, ctx) => {\n rejectSensitiveProviderConfigKeys(value.config, ctx);\n const parsed = secretProviderConfigPayloadSchema.safeParse({\n provider: value.provider,\n config: value.config,\n });\n if (!parsed.success) {\n for (const issue of parsed.error.issues) {\n ctx.addIssue({\n ...issue,\n path: issue.path[0] === \"config\" ? issue.path : [\"config\", ...issue.path],\n });\n }\n }\n const status = value.status ?? ([\"gcp_secret_manager\", \"vault\"].includes(value.provider) ? \"coming_soon\" : \"ready\");\n if ((value.provider === \"gcp_secret_manager\" || value.provider === \"vault\") && status !== \"coming_soon\" && status !== \"disabled\") {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: [\"status\"],\n message: `${value.provider} provider vaults are locked while coming soon`,\n });\n }\n if ((status === \"coming_soon\" || status === \"disabled\") && value.isDefault) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: [\"isDefault\"],\n message: \"Only ready or warning provider vaults can be default\",\n });\n }\n});\n\nexport type CreateSecretProviderConfig = z.infer<typeof createSecretProviderConfigSchema>;\n\nexport const updateSecretProviderConfigSchema = z.object({\n displayName: z.string().trim().min(1).max(120).optional(),\n status: z.enum(SECRET_PROVIDER_CONFIG_STATUSES).optional(),\n isDefault: z.boolean().optional(),\n config: z.record(z.unknown()).optional(),\n}).superRefine((value, ctx) => {\n if (value.config !== undefined) {\n rejectSensitiveProviderConfigKeys(value.config, ctx);\n rejectUnsafeVaultAddress(value.config.address, ctx);\n }\n if ((value.status === \"coming_soon\" || value.status === \"disabled\") && value.isDefault) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: [\"isDefault\"],\n message: \"Only ready or warning provider vaults can be default\",\n });\n }\n});\n\nexport type UpdateSecretProviderConfig = z.infer<typeof updateSecretProviderConfigSchema>;\n\nexport const remoteSecretImportPreviewSchema = z.object({\n providerConfigId: z.string().uuid(),\n query: z.string().trim().max(200).optional().nullable(),\n nextToken: z.string().trim().min(1).max(4096).optional().nullable(),\n pageSize: z.number().int().min(1).max(100).optional(),\n});\n\nexport type RemoteSecretImportPreview = z.infer<typeof remoteSecretImportPreviewSchema>;\n\nexport const remoteSecretImportSelectionSchema = z.object({\n externalRef: z.string().trim().min(1).max(2048),\n name: z.string().trim().min(1).max(160).optional().nullable(),\n key: z.string().trim().min(1).max(120).regex(/^[a-zA-Z0-9_.-]+$/).optional().nullable(),\n description: z.string().trim().max(500).optional().nullable(),\n providerVersionRef: z.string().trim().min(1).max(512).optional().nullable(),\n providerMetadata: z.record(z.unknown()).optional().nullable(),\n});\n\nexport const remoteSecretImportSchema = z.object({\n providerConfigId: z.string().uuid(),\n secrets: z.array(remoteSecretImportSelectionSchema).min(1).max(100),\n});\n\nexport type RemoteSecretImportSelection = z.infer<typeof remoteSecretImportSelectionSchema>;\nexport type RemoteSecretImport = z.infer<typeof remoteSecretImportSchema>;\n", "import { z } from \"zod\";\nimport {\n AGENT_ICON_NAMES,\n AGENT_ROLES,\n AGENT_STATUSES,\n INBOX_MINE_ISSUE_STATUS_FILTER,\n} from \"../constants.js\";\nimport { agentAdapterTypeSchema } from \"../adapter-type.js\";\nimport { envConfigSchema } from \"./secret.js\";\n\nexport const agentPermissionsSchema = z.object({\n canCreateAgents: z.boolean().optional().default(false),\n});\n\nexport const agentInstructionsBundleModeSchema = z.enum([\"managed\", \"external\"]);\n\nexport const updateAgentInstructionsBundleSchema = z.object({\n mode: agentInstructionsBundleModeSchema.optional(),\n rootPath: z.string().trim().min(1).nullable().optional(),\n entryFile: z.string().trim().min(1).optional(),\n clearLegacyPromptTemplate: z.boolean().optional().default(false),\n});\n\nexport type UpdateAgentInstructionsBundle = z.infer<typeof updateAgentInstructionsBundleSchema>;\n\nexport const upsertAgentInstructionsFileSchema = z.object({\n path: z.string().trim().min(1),\n content: z.string(),\n clearLegacyPromptTemplate: z.boolean().optional().default(false),\n});\n\nexport type UpsertAgentInstructionsFile = z.infer<typeof upsertAgentInstructionsFileSchema>;\n\nconst adapterConfigSchema = z.record(z.unknown()).superRefine((value, ctx) => {\n const envValue = value.env;\n if (envValue === undefined) return;\n const parsed = envConfigSchema.safeParse(envValue);\n if (!parsed.success) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"adapterConfig.env must be a map of valid env bindings\",\n path: [\"env\"],\n });\n }\n});\n\nexport const createAgentInstructionsBundleSchema = z.object({\n entryFile: z.string().trim().min(1).optional(),\n files: z.record(z.string()).refine((files) => Object.keys(files).length > 0, {\n message: \"instructionsBundle.files must contain at least one file\",\n }),\n});\n\nconst agentModelProfileConfigSchema = z.object({\n enabled: z.boolean().optional(),\n label: z.string().trim().min(1).optional(),\n adapterConfig: adapterConfigSchema,\n}).strict();\n\nexport const agentRuntimeConfigSchema = z.object({\n modelProfiles: z.object({\n cheap: agentModelProfileConfigSchema.optional(),\n }).strict().optional(),\n}).catchall(z.unknown());\n\nexport const createAgentSchema = z.object({\n name: z.string().min(1),\n role: z.enum(AGENT_ROLES).optional().default(\"general\"),\n title: z.string().optional().nullable(),\n icon: z.enum(AGENT_ICON_NAMES).optional().nullable(),\n reportsTo: z.string().uuid().optional().nullable(),\n capabilities: z.string().optional().nullable(),\n desiredSkills: z.array(z.string().min(1)).optional(),\n adapterType: agentAdapterTypeSchema,\n adapterConfig: adapterConfigSchema.optional().default({}),\n instructionsBundle: createAgentInstructionsBundleSchema.optional(),\n runtimeConfig: agentRuntimeConfigSchema.optional().default({}),\n defaultEnvironmentId: z.string().uuid().optional().nullable(),\n budgetMonthlyCents: z.number().int().nonnegative().optional().default(0),\n permissions: agentPermissionsSchema.optional(),\n metadata: z.record(z.unknown()).optional().nullable(),\n});\n\nexport type CreateAgent = z.infer<typeof createAgentSchema>;\n\nexport const createAgentHireSchema = createAgentSchema.extend({\n sourceIssueId: z.string().uuid().optional().nullable(),\n sourceIssueIds: z.array(z.string().uuid()).optional(),\n});\n\nexport type CreateAgentHire = z.infer<typeof createAgentHireSchema>;\n\nexport const updateAgentSchema = createAgentSchema\n .omit({ permissions: true })\n .partial()\n .extend({\n permissions: z.never().optional(),\n replaceAdapterConfig: z.boolean().optional(),\n status: z.enum(AGENT_STATUSES).optional(),\n spentMonthlyCents: z.number().int().nonnegative().optional(),\n });\n\nexport type UpdateAgent = z.infer<typeof updateAgentSchema>;\n\nexport const updateAgentInstructionsPathSchema = z.object({\n path: z.string().trim().min(1).nullable(),\n adapterConfigKey: z.string().trim().min(1).optional(),\n});\n\nexport type UpdateAgentInstructionsPath = z.infer<typeof updateAgentInstructionsPathSchema>;\n\nexport const createAgentKeySchema = z.object({\n name: z.string().min(1).default(\"default\"),\n});\n\nexport type CreateAgentKey = z.infer<typeof createAgentKeySchema>;\n\nexport const agentMineInboxQuerySchema = z.object({\n userId: z.string().trim().min(1),\n status: z.string().trim().min(1).optional().default(INBOX_MINE_ISSUE_STATUS_FILTER),\n});\n\nexport type AgentMineInboxQuery = z.infer<typeof agentMineInboxQuerySchema>;\n\nexport const wakeAgentSchema = z.object({\n source: z.enum([\"timer\", \"assignment\", \"on_demand\", \"automation\"]).optional().default(\"on_demand\"),\n triggerDetail: z.enum([\"manual\", \"ping\", \"callback\", \"system\"]).optional(),\n reason: z.string().optional().nullable(),\n payload: z.record(z.unknown()).optional().nullable(),\n idempotencyKey: z.string().optional().nullable(),\n forceFreshSession: z.preprocess(\n (value) => (value === null ? undefined : value),\n z.boolean().optional().default(false),\n ),\n});\n\nexport type WakeAgent = z.infer<typeof wakeAgentSchema>;\n\nexport const resetAgentSessionSchema = z.object({\n taskKey: z.string().min(1).optional().nullable(),\n});\n\nexport type ResetAgentSession = z.infer<typeof resetAgentSessionSchema>;\n\nexport const testAdapterEnvironmentSchema = z.object({\n adapterConfig: adapterConfigSchema.optional().default({}),\n /**\n * Optional environment to run the adapter test inside. When omitted, the\n * test runs against the local Paperclip host. When provided and the\n * environment is non-local (SSH/sandbox), the test probes are executed\n * inside that environment so the result reflects real agent execution.\n */\n environmentId: z.string().uuid().optional().nullable(),\n});\n\nexport type TestAdapterEnvironment = z.infer<typeof testAdapterEnvironmentSchema>;\n\nexport const updateAgentPermissionsSchema = z.object({\n canCreateAgents: z.boolean(),\n canAssignTasks: z.boolean(),\n});\n\nexport type UpdateAgentPermissions = z.infer<typeof updateAgentPermissionsSchema>;\n", "import { z } from \"zod\";\nimport { PROJECT_STATUSES } from \"../constants.js\";\nimport { envConfigSchema } from \"./secret.js\";\n\nconst executionWorkspaceStrategySchema = z\n .object({\n type: z.enum([\"project_primary\", \"git_worktree\", \"adapter_managed\", \"cloud_sandbox\"]).optional(),\n baseRef: z.string().optional().nullable(),\n branchTemplate: z.string().optional().nullable(),\n worktreeParentDir: z.string().optional().nullable(),\n provisionCommand: z.string().optional().nullable(),\n teardownCommand: z.string().optional().nullable(),\n })\n .strict();\n\nexport const projectExecutionWorkspacePolicySchema = z\n .object({\n enabled: z.boolean(),\n defaultMode: z.enum([\"shared_workspace\", \"isolated_workspace\", \"operator_branch\", \"adapter_default\"]).optional(),\n allowIssueOverride: z.boolean().optional(),\n defaultProjectWorkspaceId: z.string().uuid().optional().nullable(),\n environmentId: z.string().uuid().optional().nullable(),\n workspaceStrategy: executionWorkspaceStrategySchema.optional().nullable(),\n workspaceRuntime: z.record(z.unknown()).optional().nullable(),\n branchPolicy: z.record(z.unknown()).optional().nullable(),\n pullRequestPolicy: z.record(z.unknown()).optional().nullable(),\n runtimePolicy: z.record(z.unknown()).optional().nullable(),\n cleanupPolicy: z.record(z.unknown()).optional().nullable(),\n })\n .strict();\n\nexport const projectWorkspaceRuntimeConfigSchema = z.object({\n workspaceRuntime: z.record(z.unknown()).optional().nullable(),\n desiredState: z.enum([\"running\", \"stopped\", \"manual\"]).optional().nullable(),\n serviceStates: z.record(z.enum([\"running\", \"stopped\", \"manual\"])).optional().nullable(),\n}).strict();\n\nconst projectWorkspaceSourceTypeSchema = z.enum([\"local_path\", \"git_repo\", \"remote_managed\", \"non_git_path\"]);\nconst projectWorkspaceVisibilitySchema = z.enum([\"default\", \"advanced\"]);\n\nconst projectWorkspaceFields = {\n name: z.string().min(1).optional(),\n sourceType: projectWorkspaceSourceTypeSchema.optional(),\n cwd: z.string().min(1).optional().nullable(),\n repoUrl: z.string().url().optional().nullable(),\n repoRef: z.string().optional().nullable(),\n defaultRef: z.string().optional().nullable(),\n visibility: projectWorkspaceVisibilitySchema.optional(),\n setupCommand: z.string().optional().nullable(),\n cleanupCommand: z.string().optional().nullable(),\n remoteProvider: z.string().optional().nullable(),\n remoteWorkspaceRef: z.string().optional().nullable(),\n sharedWorkspaceKey: z.string().optional().nullable(),\n metadata: z.record(z.unknown()).optional().nullable(),\n runtimeConfig: projectWorkspaceRuntimeConfigSchema.optional().nullable(),\n};\n\nfunction validateProjectWorkspace(value: Record<string, unknown>, ctx: z.RefinementCtx) {\n const sourceType = value.sourceType ?? \"local_path\";\n const hasCwd = typeof value.cwd === \"string\" && value.cwd.trim().length > 0;\n const hasRepo = typeof value.repoUrl === \"string\" && value.repoUrl.trim().length > 0;\n const hasRemoteRef = typeof value.remoteWorkspaceRef === \"string\" && value.remoteWorkspaceRef.trim().length > 0;\n\n if (sourceType === \"remote_managed\") {\n if (!hasRemoteRef && !hasRepo) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"Remote-managed workspace requires remoteWorkspaceRef or repoUrl.\",\n path: [\"remoteWorkspaceRef\"],\n });\n }\n return;\n }\n\n if (!hasCwd && !hasRepo) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"Workspace requires at least one of cwd or repoUrl.\",\n path: [\"cwd\"],\n });\n }\n}\n\nexport const createProjectWorkspaceSchema = z.object({\n ...projectWorkspaceFields,\n isPrimary: z.boolean().optional().default(false),\n}).superRefine(validateProjectWorkspace);\n\nexport type CreateProjectWorkspace = z.infer<typeof createProjectWorkspaceSchema>;\n\nexport const updateProjectWorkspaceSchema = z.object({\n ...projectWorkspaceFields,\n isPrimary: z.boolean().optional(),\n}).partial();\n\nexport type UpdateProjectWorkspace = z.infer<typeof updateProjectWorkspaceSchema>;\n\nconst projectFields = {\n /** @deprecated Use goalIds instead */\n goalId: z.string().uuid().optional().nullable(),\n goalIds: z.array(z.string().uuid()).optional(),\n name: z.string().min(1),\n description: z.string().optional().nullable(),\n status: z.enum(PROJECT_STATUSES).optional().default(\"backlog\"),\n leadAgentId: z.string().uuid().optional().nullable(),\n targetDate: z.string().optional().nullable(),\n color: z.string().optional().nullable(),\n env: envConfigSchema.optional().nullable(),\n executionWorkspacePolicy: projectExecutionWorkspacePolicySchema.optional().nullable(),\n archivedAt: z.string().datetime().optional().nullable(),\n};\n\nexport const createProjectSchema = z.object({\n ...projectFields,\n workspace: createProjectWorkspaceSchema.optional(),\n});\n\nexport type CreateProject = z.infer<typeof createProjectSchema>;\n\nexport const updateProjectSchema = z.object(projectFields).partial();\n\nexport type UpdateProject = z.infer<typeof updateProjectSchema>;\n\nexport type ProjectExecutionWorkspacePolicy = z.infer<typeof projectExecutionWorkspacePolicySchema>;\n", "import { z } from \"zod\";\nimport { COMPANY_SEARCH_SCOPES } from \"../types/search.js\";\n\nexport const COMPANY_SEARCH_MAX_QUERY_LENGTH = 200;\nexport const COMPANY_SEARCH_MAX_TOKENS = 8;\nexport const COMPANY_SEARCH_DEFAULT_LIMIT = 20;\nexport const COMPANY_SEARCH_MAX_LIMIT = 50;\nexport const COMPANY_SEARCH_MAX_OFFSET = 200;\n\nfunction firstQueryValue(value: unknown): unknown {\n return Array.isArray(value) ? value[0] : value;\n}\n\nfunction clampInteger(value: unknown, fallback: number, min: number, max: number) {\n const raw = firstQueryValue(value);\n const numeric = typeof raw === \"number\"\n ? raw\n : typeof raw === \"string\" && raw.trim().length > 0\n ? Number.parseInt(raw, 10)\n : Number.NaN;\n if (!Number.isFinite(numeric)) return fallback;\n return Math.min(max, Math.max(min, Math.floor(numeric)));\n}\n\nexport const companySearchQuerySchema = z.object({\n q: z.preprocess(firstQueryValue, z.string().optional().default(\"\"))\n .transform((value) => value.slice(0, COMPANY_SEARCH_MAX_QUERY_LENGTH)),\n scope: z.preprocess(firstQueryValue, z.enum(COMPANY_SEARCH_SCOPES).catch(\"all\")).optional().default(\"all\"),\n limit: z.unknown()\n .optional()\n .transform((value) => clampInteger(value, COMPANY_SEARCH_DEFAULT_LIMIT, 1, COMPANY_SEARCH_MAX_LIMIT)),\n offset: z.unknown()\n .optional()\n .transform((value) => clampInteger(value, 0, 0, COMPANY_SEARCH_MAX_OFFSET)),\n});\n\nexport type CompanySearchQuery = z.infer<typeof companySearchQuerySchema>;\n", "import { z } from \"zod\";\nimport {\n ISSUE_TREE_CONTROL_MODES,\n ISSUE_TREE_HOLD_RELEASE_POLICY_STRATEGIES,\n} from \"../constants.js\";\n\nexport const issueTreeControlModeSchema = z.enum(ISSUE_TREE_CONTROL_MODES);\n\nexport const issueTreeHoldReleasePolicySchema = z\n .object({\n strategy: z.enum(ISSUE_TREE_HOLD_RELEASE_POLICY_STRATEGIES).default(\"manual\"),\n note: z.string().trim().min(1).max(500).optional().nullable(),\n })\n .strict();\n\nexport const previewIssueTreeControlSchema = z\n .object({\n mode: issueTreeControlModeSchema,\n releasePolicy: issueTreeHoldReleasePolicySchema.optional().nullable(),\n })\n .strict();\n\nexport type PreviewIssueTreeControl = z.infer<typeof previewIssueTreeControlSchema>;\n\nexport const createIssueTreeHoldSchema = z\n .object({\n mode: issueTreeControlModeSchema,\n reason: z.string().trim().min(1).max(1000).optional().nullable(),\n releasePolicy: issueTreeHoldReleasePolicySchema.optional().nullable(),\n metadata: z.record(z.unknown()).optional().nullable(),\n })\n .strict();\n\nexport type CreateIssueTreeHold = z.infer<typeof createIssueTreeHoldSchema>;\n\nexport const releaseIssueTreeHoldSchema = z\n .object({\n reason: z.string().trim().min(1).max(1000).optional().nullable(),\n releasePolicy: issueTreeHoldReleasePolicySchema.optional().nullable(),\n metadata: z.record(z.unknown()).optional().nullable(),\n })\n .strict();\n\nexport type ReleaseIssueTreeHold = z.infer<typeof releaseIssueTreeHoldSchema>;\n", "import { z } from \"zod\";\n\nexport const issueWorkProductTypeSchema = z.enum([\n \"preview_url\",\n \"runtime_service\",\n \"pull_request\",\n \"branch\",\n \"commit\",\n \"artifact\",\n \"document\",\n]);\n\nexport const issueWorkProductStatusSchema = z.enum([\n \"active\",\n \"ready_for_review\",\n \"approved\",\n \"changes_requested\",\n \"merged\",\n \"closed\",\n \"failed\",\n \"archived\",\n \"draft\",\n]);\n\nexport const issueWorkProductReviewStateSchema = z.enum([\n \"none\",\n \"needs_board_review\",\n \"approved\",\n \"changes_requested\",\n]);\n\nexport const createIssueWorkProductSchema = z.object({\n projectId: z.string().uuid().optional().nullable(),\n executionWorkspaceId: z.string().uuid().optional().nullable(),\n runtimeServiceId: z.string().uuid().optional().nullable(),\n type: issueWorkProductTypeSchema,\n provider: z.string().min(1),\n externalId: z.string().optional().nullable(),\n title: z.string().min(1),\n url: z.string().url().optional().nullable(),\n status: issueWorkProductStatusSchema.default(\"active\"),\n reviewState: issueWorkProductReviewStateSchema.optional().default(\"none\"),\n isPrimary: z.boolean().optional().default(false),\n healthStatus: z.enum([\"unknown\", \"healthy\", \"unhealthy\"]).optional().default(\"unknown\"),\n summary: z.string().optional().nullable(),\n metadata: z.record(z.unknown()).optional().nullable(),\n createdByRunId: z.string().uuid().optional().nullable(),\n});\n\nexport type CreateIssueWorkProduct = z.infer<typeof createIssueWorkProductSchema>;\n\nexport const updateIssueWorkProductSchema = createIssueWorkProductSchema.partial();\n\nexport type UpdateIssueWorkProduct = z.infer<typeof updateIssueWorkProductSchema>;\n", "import { z } from \"zod\";\nimport { GOAL_LEVELS, GOAL_STATUSES } from \"../constants.js\";\n\nexport const createGoalSchema = z.object({\n title: z.string().min(1),\n description: z.string().optional().nullable(),\n level: z.enum(GOAL_LEVELS).optional().default(\"task\"),\n status: z.enum(GOAL_STATUSES).optional().default(\"planned\"),\n parentId: z.string().uuid().optional().nullable(),\n ownerAgentId: z.string().uuid().optional().nullable(),\n});\n\nexport type CreateGoal = z.infer<typeof createGoalSchema>;\n\nexport const updateGoalSchema = createGoalSchema.partial();\n\nexport type UpdateGoal = z.infer<typeof updateGoalSchema>;\n", "import { z } from \"zod\";\nimport { APPROVAL_TYPES } from \"../constants.js\";\nimport { multilineTextSchema } from \"./text.js\";\n\nexport const createApprovalSchema = z.object({\n type: z.enum(APPROVAL_TYPES),\n requestedByAgentId: z.string().uuid().optional().nullable(),\n payload: z.record(z.unknown()),\n issueIds: z.array(z.string().uuid()).optional(),\n});\n\nexport type CreateApproval = z.infer<typeof createApprovalSchema>;\n\nexport const resolveApprovalSchema = z.object({\n decisionNote: multilineTextSchema.optional().nullable(),\n});\n\nexport type ResolveApproval = z.infer<typeof resolveApprovalSchema>;\n\nexport const requestApprovalRevisionSchema = z.object({\n decisionNote: multilineTextSchema.optional().nullable(),\n});\n\nexport type RequestApprovalRevision = z.infer<typeof requestApprovalRevisionSchema>;\n\nexport const resubmitApprovalSchema = z.object({\n payload: z.record(z.unknown()).optional(),\n});\n\nexport type ResubmitApproval = z.infer<typeof resubmitApprovalSchema>;\n\nexport const addApprovalCommentSchema = z.object({\n body: multilineTextSchema.pipe(z.string().min(1)),\n});\n\nexport type AddApprovalComment = z.infer<typeof addApprovalCommentSchema>;\n", "import { z } from \"zod\";\nimport { BILLING_TYPES } from \"../constants.js\";\n\nexport const createCostEventSchema = z.object({\n agentId: z.string().uuid(),\n issueId: z.string().uuid().optional().nullable(),\n projectId: z.string().uuid().optional().nullable(),\n goalId: z.string().uuid().optional().nullable(),\n heartbeatRunId: z.string().uuid().optional().nullable(),\n billingCode: z.string().optional().nullable(),\n provider: z.string().min(1),\n biller: z.string().min(1).optional(),\n billingType: z.enum(BILLING_TYPES).optional().default(\"unknown\"),\n model: z.string().min(1),\n inputTokens: z.number().int().nonnegative().optional().default(0),\n cachedInputTokens: z.number().int().nonnegative().optional().default(0),\n outputTokens: z.number().int().nonnegative().optional().default(0),\n costCents: z.number().int().nonnegative(),\n occurredAt: z.string().datetime(),\n}).transform((value) => ({\n ...value,\n biller: value.biller ?? value.provider,\n}));\n\nexport type CreateCostEvent = z.infer<typeof createCostEventSchema>;\n\nexport const updateBudgetSchema = z.object({\n budgetMonthlyCents: z.number().int().nonnegative(),\n});\n\nexport type UpdateBudget = z.infer<typeof updateBudgetSchema>;\n", "import { z } from \"zod\";\nimport { AGENT_ADAPTER_TYPES, FINANCE_DIRECTIONS, FINANCE_EVENT_KINDS, FINANCE_UNITS } from \"../constants.js\";\n\nexport const createFinanceEventSchema = z.object({\n agentId: z.string().uuid().optional().nullable(),\n issueId: z.string().uuid().optional().nullable(),\n projectId: z.string().uuid().optional().nullable(),\n goalId: z.string().uuid().optional().nullable(),\n heartbeatRunId: z.string().uuid().optional().nullable(),\n costEventId: z.string().uuid().optional().nullable(),\n billingCode: z.string().optional().nullable(),\n description: z.string().max(500).optional().nullable(),\n eventKind: z.enum(FINANCE_EVENT_KINDS),\n direction: z.enum(FINANCE_DIRECTIONS).optional().default(\"debit\"),\n biller: z.string().min(1),\n provider: z.string().min(1).optional().nullable(),\n executionAdapterType: z.enum(AGENT_ADAPTER_TYPES).optional().nullable(),\n pricingTier: z.string().min(1).optional().nullable(),\n region: z.string().min(1).optional().nullable(),\n model: z.string().min(1).optional().nullable(),\n quantity: z.number().int().nonnegative().optional().nullable(),\n unit: z.enum(FINANCE_UNITS).optional().nullable(),\n amountCents: z.number().int().nonnegative(),\n currency: z.string().length(3).optional().default(\"USD\"),\n estimated: z.boolean().optional().default(false),\n externalInvoiceId: z.string().optional().nullable(),\n metadataJson: z.record(z.string(), z.unknown()).optional().nullable(),\n occurredAt: z.string().datetime(),\n}).transform((value) => ({\n ...value,\n currency: value.currency.toUpperCase(),\n}));\n\nexport type CreateFinanceEvent = z.infer<typeof createFinanceEventSchema>;\n", "import { z } from \"zod\";\n\nexport const createAssetImageMetadataSchema = z.object({\n namespace: z\n .string()\n .trim()\n .min(1)\n .max(120)\n .regex(/^[a-zA-Z0-9/_-]+$/)\n .optional(),\n});\n\nexport type CreateAssetImageMetadata = z.infer<typeof createAssetImageMetadataSchema>;\n\n", "import { z } from \"zod\";\nimport {\n AGENT_ADAPTER_TYPES,\n HUMAN_COMPANY_MEMBERSHIP_ROLES,\n INVITE_JOIN_TYPES,\n JOIN_REQUEST_STATUSES,\n JOIN_REQUEST_TYPES,\n PERMISSION_KEYS,\n} from \"../constants.js\";\nimport { optionalAgentAdapterTypeSchema } from \"../adapter-type.js\";\n\nexport const createCompanyInviteSchema = z.object({\n allowedJoinTypes: z.enum(INVITE_JOIN_TYPES).default(\"both\"),\n humanRole: z.enum(HUMAN_COMPANY_MEMBERSHIP_ROLES).optional().nullable(),\n defaultsPayload: z.record(z.string(), z.unknown()).optional().nullable(),\n agentMessage: z.string().max(4000).optional().nullable(),\n});\n\nexport type CreateCompanyInvite = z.infer<typeof createCompanyInviteSchema>;\n\nexport const createOpenClawInvitePromptSchema = z.object({\n agentMessage: z.string().max(4000).optional().nullable(),\n});\n\nexport type CreateOpenClawInvitePrompt = z.infer<\n typeof createOpenClawInvitePromptSchema\n>;\n\nexport const acceptInviteSchema = z.object({\n requestType: z.enum(JOIN_REQUEST_TYPES),\n agentName: z.string().min(1).max(120).optional(),\n adapterType: optionalAgentAdapterTypeSchema,\n capabilities: z.string().max(4000).optional().nullable(),\n agentDefaultsPayload: z.record(z.string(), z.unknown()).optional().nullable(),\n // OpenClaw join compatibility fields accepted at top level.\n responsesWebhookUrl: z.string().max(4000).optional().nullable(),\n responsesWebhookMethod: z.string().max(32).optional().nullable(),\n responsesWebhookHeaders: z.record(z.string(), z.unknown()).optional().nullable(),\n paperclipApiUrl: z.string().max(4000).optional().nullable(),\n webhookAuthHeader: z.string().max(4000).optional().nullable(),\n});\n\nexport type AcceptInvite = z.infer<typeof acceptInviteSchema>;\n\nexport const listJoinRequestsQuerySchema = z.object({\n status: z.enum(JOIN_REQUEST_STATUSES).optional(),\n requestType: z.enum(JOIN_REQUEST_TYPES).optional(),\n});\n\nexport type ListJoinRequestsQuery = z.infer<typeof listJoinRequestsQuerySchema>;\n\nexport const listCompanyInvitesQuerySchema = z.object({\n state: z.enum([\"active\", \"revoked\", \"accepted\", \"expired\"]).optional(),\n limit: z.coerce.number().int().min(1).max(100).optional().default(20),\n offset: z.coerce.number().int().min(0).optional().default(0),\n});\n\nexport type ListCompanyInvitesQuery = z.infer<typeof listCompanyInvitesQuerySchema>;\n\nexport const claimJoinRequestApiKeySchema = z.object({\n claimSecret: z.string().min(16).max(256),\n});\n\nexport type ClaimJoinRequestApiKey = z.infer<typeof claimJoinRequestApiKeySchema>;\n\nexport const boardCliAuthAccessLevelSchema = z.enum([\n \"board\",\n \"instance_admin_required\",\n]);\n\nexport type BoardCliAuthAccessLevel = z.infer<typeof boardCliAuthAccessLevelSchema>;\n\nexport const createCliAuthChallengeSchema = z.object({\n command: z.string().min(1).max(240),\n clientName: z.string().max(120).optional().nullable(),\n requestedAccess: boardCliAuthAccessLevelSchema.default(\"board\"),\n requestedCompanyId: z.string().uuid().optional().nullable(),\n});\n\nexport type CreateCliAuthChallenge = z.infer<typeof createCliAuthChallengeSchema>;\n\nexport const resolveCliAuthChallengeSchema = z.object({\n token: z.string().min(16).max(256),\n});\n\nexport type ResolveCliAuthChallenge = z.infer<typeof resolveCliAuthChallengeSchema>;\n\nexport const updateMemberPermissionsSchema = z.object({\n grants: z.array(\n z.object({\n permissionKey: z.enum(PERMISSION_KEYS),\n scope: z.record(z.string(), z.unknown()).optional().nullable(),\n }),\n ),\n});\n\nexport type UpdateMemberPermissions = z.infer<typeof updateMemberPermissionsSchema>;\n\nconst editableMembershipStatuses = [\"pending\", \"active\", \"suspended\"] as const;\n\nexport const updateCompanyMemberSchema = z.object({\n membershipRole: z.enum(HUMAN_COMPANY_MEMBERSHIP_ROLES).optional().nullable(),\n status: z.enum(editableMembershipStatuses).optional(),\n}).refine((value) => value.membershipRole !== undefined || value.status !== undefined, {\n message: \"membershipRole or status is required\",\n});\n\nexport type UpdateCompanyMember = z.infer<typeof updateCompanyMemberSchema>;\n\nexport const updateCompanyMemberWithPermissionsSchema = z.object({\n membershipRole: z.enum(HUMAN_COMPANY_MEMBERSHIP_ROLES).optional().nullable(),\n status: z.enum(editableMembershipStatuses).optional(),\n grants: updateMemberPermissionsSchema.shape.grants.default([]),\n}).refine((value) => value.membershipRole !== undefined || value.status !== undefined, {\n message: \"membershipRole or status is required\",\n});\n\nexport type UpdateCompanyMemberWithPermissions = z.infer<typeof updateCompanyMemberWithPermissionsSchema>;\n\nexport const archiveCompanyMemberSchema = z.object({\n reassignment: z\n .object({\n assigneeAgentId: z.string().uuid().optional().nullable(),\n assigneeUserId: z.string().uuid().optional().nullable(),\n })\n .optional()\n .nullable(),\n}).superRefine((value, ctx) => {\n if (value.reassignment?.assigneeAgentId && value.reassignment.assigneeUserId) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"Choose either an agent or user reassignment target\",\n path: [\"reassignment\"],\n });\n }\n});\n\nexport type ArchiveCompanyMember = z.infer<typeof archiveCompanyMemberSchema>;\n\nexport const updateUserCompanyAccessSchema = z.object({\n companyIds: z.array(z.string().uuid()).default([]),\n});\n\nexport type UpdateUserCompanyAccess = z.infer<typeof updateUserCompanyAccessSchema>;\n\nexport const searchAdminUsersQuerySchema = z.object({\n query: z.string().trim().max(120).optional().default(\"\"),\n});\n\nexport type SearchAdminUsersQuery = z.infer<typeof searchAdminUsersQuerySchema>;\n\nconst profileImageAssetPathPattern = /^\\/api\\/assets\\/[^/?#]+\\/content(?:\\?[^#]*)?(?:#.*)?$/;\n\nfunction isValidProfileImage(value: string): boolean {\n if (profileImageAssetPathPattern.test(value)) return true;\n\n try {\n const url = new URL(value);\n return url.protocol === \"https:\" || url.protocol === \"http:\";\n } catch {\n return false;\n }\n}\n\nconst profileImageSchema = z\n .string()\n .trim()\n .min(1)\n .max(4000)\n .refine(isValidProfileImage, { message: \"Invalid profile image URL\" });\n\nexport const currentUserProfileSchema = z.object({\n id: z.string().min(1),\n email: z.string().email().nullable(),\n name: z.string().min(1).max(120).nullable(),\n image: profileImageSchema.nullable(),\n});\n\nexport type CurrentUserProfile = z.infer<typeof currentUserProfileSchema>;\n\nexport const authSessionSchema = z.object({\n session: z.object({\n id: z.string().min(1),\n userId: z.string().min(1),\n }),\n user: currentUserProfileSchema,\n});\n\nexport type AuthSession = z.infer<typeof authSessionSchema>;\n\nexport const updateCurrentUserProfileSchema = z.object({\n name: z.string().trim().min(1).max(120),\n image: z\n .union([profileImageSchema, z.literal(\"\"), z.null()])\n .optional()\n .transform((value) => value === \"\" ? null : value),\n});\n\nexport type UpdateCurrentUserProfile = z.infer<typeof updateCurrentUserProfileSchema>;\n", "import { z } from \"zod\";\nimport {\n PLUGIN_STATUSES,\n PLUGIN_CATEGORIES,\n PLUGIN_CAPABILITIES,\n PLUGIN_UI_SLOT_TYPES,\n PLUGIN_UI_SLOT_ENTITY_TYPES,\n PLUGIN_RESERVED_COMPANY_ROUTE_SEGMENTS,\n PLUGIN_LAUNCHER_PLACEMENT_ZONES,\n PLUGIN_LAUNCHER_ACTIONS,\n PLUGIN_LAUNCHER_BOUNDS,\n PLUGIN_LAUNCHER_RENDER_ENVIRONMENTS,\n PLUGIN_STATE_SCOPE_KINDS,\n PLUGIN_DATABASE_CORE_READ_TABLES,\n PLUGIN_API_ROUTE_AUTH_MODES,\n PLUGIN_API_ROUTE_CHECKOUT_POLICIES,\n PLUGIN_API_ROUTE_METHODS,\n ISSUE_PRIORITIES,\n ROUTINE_CATCH_UP_POLICIES,\n ROUTINE_CONCURRENCY_POLICIES,\n ROUTINE_STATUSES,\n ROUTINE_TRIGGER_KINDS,\n ROUTINE_TRIGGER_SIGNING_MODES,\n ISSUE_SURFACE_VISIBILITIES,\n} from \"../constants.js\";\nimport { routineVariableSchema } from \"./routine.js\";\n\n// ---------------------------------------------------------------------------\n// JSON Schema placeholder \u2013 a permissive validator for JSON Schema objects\n// ---------------------------------------------------------------------------\n\n/**\n * Permissive validator for JSON Schema objects. Accepts any `Record<string, unknown>`\n * that contains at least a `type`, `$ref`, or composition keyword (`oneOf`/`anyOf`/`allOf`).\n * Empty objects are also accepted.\n *\n * Used to validate `instanceConfigSchema` and `parametersSchema` fields in the\n * plugin manifest without fully parsing JSON Schema.\n *\n * @see PLUGIN_SPEC.md \u00A710.1 \u2014 Manifest shape\n */\nexport const jsonSchemaSchema = z.record(z.unknown()).refine(\n (val) => {\n // Must have a \"type\" field if non-empty, or be a valid JSON Schema object\n if (Object.keys(val).length === 0) return true;\n return typeof val.type === \"string\" || val.$ref !== undefined || val.oneOf !== undefined || val.anyOf !== undefined || val.allOf !== undefined;\n },\n { message: \"Must be a valid JSON Schema object (requires at least a 'type', '$ref', or composition keyword)\" },\n);\n\n// ---------------------------------------------------------------------------\n// Manifest sub-type schemas\n// ---------------------------------------------------------------------------\n\n/**\n * Validates a {@link PluginJobDeclaration} \u2014 a scheduled job declared in the\n * plugin manifest. Requires `jobKey` and `displayName`; `description` and\n * `schedule` (cron expression) are optional.\n *\n * @see PLUGIN_SPEC.md \u00A717 \u2014 Scheduled Jobs\n */\n/**\n * Validates a cron expression has exactly 5 whitespace-separated fields,\n * each containing only valid cron characters (digits, *, /, -, ,).\n *\n * Valid tokens per field: *, N, N-M, N/S, * /S, N-M/S, and comma-separated lists.\n */\nconst CRON_FIELD_PATTERN = /^(\\*(?:\\/[0-9]+)?|[0-9]+(?:-[0-9]+)?(?:\\/[0-9]+)?)(?:,(\\*(?:\\/[0-9]+)?|[0-9]+(?:-[0-9]+)?(?:\\/[0-9]+)?))*$/;\n\nfunction isValidCronExpression(expression: string): boolean {\n const trimmed = expression.trim();\n if (!trimmed) return false;\n const fields = trimmed.split(/\\s+/);\n if (fields.length !== 5) return false;\n return fields.every((f) => CRON_FIELD_PATTERN.test(f));\n}\n\nexport const pluginJobDeclarationSchema = z.object({\n jobKey: z.string().min(1),\n displayName: z.string().min(1),\n description: z.string().optional(),\n schedule: z.string().refine(\n (val) => isValidCronExpression(val),\n { message: \"schedule must be a valid 5-field cron expression (e.g. '*/15 * * * *')\" },\n ).optional(),\n});\n\nexport type PluginJobDeclarationInput = z.infer<typeof pluginJobDeclarationSchema>;\n\n/**\n * Validates a {@link PluginWebhookDeclaration} \u2014 a webhook endpoint declared\n * in the plugin manifest. Requires `endpointKey` and `displayName`.\n *\n * @see PLUGIN_SPEC.md \u00A718 \u2014 Webhooks\n */\nexport const pluginWebhookDeclarationSchema = z.object({\n endpointKey: z.string().min(1),\n displayName: z.string().min(1),\n description: z.string().optional(),\n});\n\nexport type PluginWebhookDeclarationInput = z.infer<typeof pluginWebhookDeclarationSchema>;\n\n/**\n * Validates a {@link PluginToolDeclaration} \u2014 an agent tool contributed by the\n * plugin. Requires `name`, `displayName`, `description`, and a valid\n * `parametersSchema`. Requires the `agent.tools.register` capability.\n *\n * @see PLUGIN_SPEC.md \u00A711 \u2014 Agent Tools\n */\nexport const pluginToolDeclarationSchema = z.object({\n name: z.string().min(1),\n displayName: z.string().min(1),\n description: z.string().min(1),\n parametersSchema: jsonSchemaSchema,\n});\n\nexport const pluginEnvironmentDriverDeclarationSchema = z.object({\n driverKey: z.string().min(1).regex(\n /^[a-z0-9][a-z0-9._-]*$/,\n \"Environment driver key must start with a lowercase alphanumeric and contain only lowercase letters, digits, dots, hyphens, or underscores\",\n ),\n kind: z.enum([\"environment_driver\", \"sandbox_provider\"]).optional(),\n displayName: z.string().min(1).max(100),\n description: z.string().max(500).optional(),\n configSchema: jsonSchemaSchema,\n});\n\nexport type PluginEnvironmentDriverDeclarationInput = z.infer<\n typeof pluginEnvironmentDriverDeclarationSchema\n>;\n\nexport type PluginToolDeclarationInput = z.infer<typeof pluginToolDeclarationSchema>;\n\nexport const pluginManagedAgentDeclarationSchema = z.object({\n agentKey: z.string().min(1).max(100).regex(/^[a-z0-9][a-z0-9._:-]*$/, {\n message: \"agentKey must start with a lowercase alphanumeric and contain only lowercase letters, digits, dots, colons, underscores, or hyphens\",\n }),\n displayName: z.string().min(1).max(100),\n role: z.string().min(1).max(100).optional(),\n title: z.string().max(200).nullable().optional(),\n icon: z.string().max(100).nullable().optional(),\n capabilities: z.string().max(2000).nullable().optional(),\n adapterType: z.string().min(1).max(100).optional(),\n adapterPreference: z.array(z.string().min(1).max(100)).max(10).optional(),\n adapterConfig: z.record(z.unknown()).optional(),\n runtimeConfig: z.record(z.unknown()).optional(),\n permissions: z.record(z.unknown()).optional(),\n status: z.enum([\"idle\", \"paused\"]).optional(),\n budgetMonthlyCents: z.number().int().min(0).optional(),\n instructions: z.object({\n entryFile: z.string().min(1).max(200).optional(),\n content: z.string().max(200_000).optional(),\n files: z.record(z.string().max(200_000)).optional(),\n assetPath: z.string().min(1).max(500).optional(),\n }).optional(),\n});\n\nexport type PluginManagedAgentDeclarationInput = z.infer<typeof pluginManagedAgentDeclarationSchema>;\n\nexport const pluginManagedProjectDeclarationSchema = z.object({\n projectKey: z.string().min(1).max(100).regex(/^[a-z0-9][a-z0-9._:-]*$/, {\n message: \"projectKey must start with a lowercase alphanumeric and contain only lowercase letters, digits, dots, colons, underscores, or hyphens\",\n }),\n displayName: z.string().min(1).max(120),\n description: z.string().max(2000).nullable().optional(),\n status: z.enum([\"backlog\", \"planned\", \"in_progress\", \"completed\", \"cancelled\"]).optional(),\n color: z.string().max(32).nullable().optional(),\n settings: z.record(z.unknown()).optional(),\n});\n\nexport type PluginManagedProjectDeclarationInput = z.infer<typeof pluginManagedProjectDeclarationSchema>;\n\nconst pluginManagedResourceRefSchema = z.object({\n pluginKey: z.string().min(1).max(100).optional(),\n resourceKind: z.enum([\"agent\", \"project\", \"routine\", \"skill\"]),\n resourceKey: z.string().min(1).max(100).regex(/^[a-z0-9][a-z0-9._:-]*$/, {\n message: \"resourceKey must start with a lowercase alphanumeric and contain only lowercase letters, digits, dots, colons, underscores, or hyphens\",\n }),\n});\n\nexport const pluginManagedRoutineDeclarationSchema = z.object({\n routineKey: z.string().min(1).max(100).regex(/^[a-z0-9][a-z0-9._:-]*$/, {\n message: \"routineKey must start with a lowercase alphanumeric and contain only lowercase letters, digits, dots, colons, underscores, or hyphens\",\n }),\n title: z.string().trim().min(1).max(200),\n description: z.string().max(10_000).nullable().optional(),\n assigneeRef: pluginManagedResourceRefSchema.extend({ resourceKind: z.literal(\"agent\") }).nullable().optional(),\n projectRef: pluginManagedResourceRefSchema.extend({ resourceKind: z.literal(\"project\") }).nullable().optional(),\n goalId: z.string().uuid().nullable().optional(),\n status: z.enum(ROUTINE_STATUSES).optional(),\n priority: z.enum(ISSUE_PRIORITIES).optional(),\n concurrencyPolicy: z.enum(ROUTINE_CONCURRENCY_POLICIES).optional(),\n catchUpPolicy: z.enum(ROUTINE_CATCH_UP_POLICIES).optional(),\n variables: z.array(routineVariableSchema).optional(),\n triggers: z.array(z.object({\n kind: z.enum(ROUTINE_TRIGGER_KINDS),\n label: z.string().trim().max(120).nullable().optional(),\n enabled: z.boolean().optional(),\n cronExpression: z.string().trim().min(1).optional().nullable(),\n timezone: z.string().trim().min(1).optional().nullable(),\n signingMode: z.enum(ROUTINE_TRIGGER_SIGNING_MODES).optional().nullable(),\n replayWindowSec: z.number().int().min(30).max(86_400).optional().nullable(),\n })).max(20).optional(),\n issueTemplate: z.object({\n surfaceVisibility: z.enum(ISSUE_SURFACE_VISIBILITIES).optional(),\n originId: z.string().trim().max(255).nullable().optional(),\n billingCode: z.string().trim().max(200).nullable().optional(),\n }).optional(),\n});\n\nexport type PluginManagedRoutineDeclarationInput = z.infer<typeof pluginManagedRoutineDeclarationSchema>;\n\nconst pluginLocalFolderRelativePathSchema = z.string().min(1).max(500).refine(\n (value) =>\n !value.startsWith(\"/\") &&\n !value.includes(\"..\") &&\n !value.includes(\"\\\\\") &&\n !value.split(\"/\").some((segment) => segment === \"\" || segment === \".\"),\n { message: \"local folder paths must be relative paths without traversal, empty segments, or backslashes\" },\n);\n\nexport const pluginLocalFolderDeclarationSchema = z.object({\n folderKey: z.string().min(1).max(100).regex(/^[a-z0-9][a-z0-9._:-]*$/, {\n message: \"folderKey must start with a lowercase alphanumeric and contain only lowercase letters, digits, dots, colons, underscores, or hyphens\",\n }),\n displayName: z.string().min(1).max(100),\n description: z.string().max(500).optional(),\n access: z.enum([\"read\", \"readWrite\"]).optional(),\n requiredDirectories: z.array(pluginLocalFolderRelativePathSchema).optional(),\n requiredFiles: z.array(pluginLocalFolderRelativePathSchema).optional(),\n});\n\nexport type PluginLocalFolderDeclarationInput = z.infer<typeof pluginLocalFolderDeclarationSchema>;\n\nexport const pluginManagedSkillFileDeclarationSchema = z.object({\n path: pluginLocalFolderRelativePathSchema.refine(\n (value) => value.toLowerCase() !== \"skill.md\",\n { message: \"managed skill files cannot replace SKILL.md; use markdown for the main skill file\" },\n ),\n content: z.string().max(200_000),\n});\n\nexport type PluginManagedSkillFileDeclarationInput = z.infer<typeof pluginManagedSkillFileDeclarationSchema>;\n\nexport const pluginManagedSkillDeclarationSchema = z.object({\n skillKey: z.string().min(1).max(100).regex(/^[a-z0-9][a-z0-9._:-]*$/, {\n message: \"skillKey must start with a lowercase alphanumeric and contain only lowercase letters, digits, dots, colons, underscores, or hyphens\",\n }),\n displayName: z.string().min(1).max(100),\n slug: z.string().min(1).max(100).regex(/^[a-z0-9][a-z0-9._:-]*$/, {\n message: \"slug must start with a lowercase alphanumeric and contain only lowercase letters, digits, dots, colons, underscores, or hyphens\",\n }).optional(),\n description: z.string().max(2000).nullable().optional(),\n markdown: z.string().max(200_000).optional(),\n files: z.array(pluginManagedSkillFileDeclarationSchema).max(50).optional(),\n}).superRefine((value, ctx) => {\n const paths = (value.files ?? []).map((file) => file.path);\n const duplicates = paths.filter((path, index) => paths.indexOf(path) !== index);\n if (duplicates.length > 0) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `Duplicate managed skill file paths: ${[...new Set(duplicates)].join(\", \")}`,\n path: [\"files\"],\n });\n }\n});\n\nexport type PluginManagedSkillDeclarationInput = z.infer<typeof pluginManagedSkillDeclarationSchema>;\n\n/**\n * Validates a {@link PluginUiSlotDeclaration} \u2014 a UI extension slot the plugin\n * fills with a React component. Includes `superRefine` checks for slot-specific\n * requirements such as `entityTypes` for context-sensitive slots.\n *\n * @see PLUGIN_SPEC.md \u00A719 \u2014 UI Extension Model\n */\nexport const pluginUiSlotDeclarationSchema = z.object({\n type: z.enum(PLUGIN_UI_SLOT_TYPES),\n id: z.string().min(1),\n displayName: z.string().min(1),\n exportName: z.string().min(1),\n entityTypes: z.array(z.enum(PLUGIN_UI_SLOT_ENTITY_TYPES)).optional(),\n routePath: z.string().regex(/^[a-z0-9][a-z0-9-]*$/, {\n message: \"routePath must be a lowercase single-segment slug (letters, numbers, hyphens)\",\n }).optional(),\n order: z.number().int().optional(),\n}).superRefine((value, ctx) => {\n // context-sensitive slots require explicit entity targeting.\n const entityScopedTypes = [\"detailTab\", \"taskDetailView\", \"contextMenuItem\", \"commentAnnotation\", \"commentContextMenuItem\", \"projectSidebarItem\"];\n if (\n entityScopedTypes.includes(value.type)\n && (!value.entityTypes || value.entityTypes.length === 0)\n ) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `${value.type} slots require at least one entityType`,\n path: [\"entityTypes\"],\n });\n }\n // projectSidebarItem only makes sense for entityType \"project\".\n if (value.type === \"projectSidebarItem\" && value.entityTypes && !value.entityTypes.includes(\"project\")) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"projectSidebarItem slots require entityTypes to include \\\"project\\\"\",\n path: [\"entityTypes\"],\n });\n }\n // commentAnnotation only makes sense for entityType \"comment\".\n if (value.type === \"commentAnnotation\" && value.entityTypes && !value.entityTypes.includes(\"comment\")) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"commentAnnotation slots require entityTypes to include \\\"comment\\\"\",\n path: [\"entityTypes\"],\n });\n }\n // commentContextMenuItem only makes sense for entityType \"comment\".\n if (value.type === \"commentContextMenuItem\" && value.entityTypes && !value.entityTypes.includes(\"comment\")) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"commentContextMenuItem slots require entityTypes to include \\\"comment\\\"\",\n path: [\"entityTypes\"],\n });\n }\n if (value.routePath && value.type !== \"page\" && value.type !== \"routeSidebar\") {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"routePath is only supported for page and routeSidebar slots\",\n path: [\"routePath\"],\n });\n }\n if (value.type === \"routeSidebar\" && !value.routePath) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"routeSidebar slots require routePath\",\n path: [\"routePath\"],\n });\n }\n if (value.routePath && PLUGIN_RESERVED_COMPANY_ROUTE_SEGMENTS.includes(value.routePath as (typeof PLUGIN_RESERVED_COMPANY_ROUTE_SEGMENTS)[number])) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `routePath \"${value.routePath}\" is reserved by the host`,\n path: [\"routePath\"],\n });\n }\n});\n\nexport type PluginUiSlotDeclarationInput = z.infer<typeof pluginUiSlotDeclarationSchema>;\n\nconst entityScopedLauncherPlacementZones = [\n \"detailTab\",\n \"taskDetailView\",\n \"contextMenuItem\",\n \"commentAnnotation\",\n \"commentContextMenuItem\",\n \"projectSidebarItem\",\n] as const;\n\nconst launcherBoundsByEnvironment: Record<\n (typeof PLUGIN_LAUNCHER_RENDER_ENVIRONMENTS)[number],\n readonly (typeof PLUGIN_LAUNCHER_BOUNDS)[number][]\n> = {\n hostInline: [\"inline\", \"compact\", \"default\"],\n hostOverlay: [\"compact\", \"default\", \"wide\", \"full\"],\n hostRoute: [\"default\", \"wide\", \"full\"],\n external: [],\n iframe: [\"compact\", \"default\", \"wide\", \"full\"],\n};\n\n/**\n * Validates the action payload for a declarative plugin launcher.\n */\nexport const pluginLauncherActionDeclarationSchema = z.object({\n type: z.enum(PLUGIN_LAUNCHER_ACTIONS),\n target: z.string().min(1),\n params: z.record(z.unknown()).optional(),\n}).superRefine((value, ctx) => {\n if (value.type === \"performAction\" && value.target.includes(\"/\")) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"performAction launchers must target an action key, not a route or URL\",\n path: [\"target\"],\n });\n }\n\n if (value.type === \"navigate\" && /^https?:\\/\\//.test(value.target)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"navigate launchers must target a host route, not an absolute URL\",\n path: [\"target\"],\n });\n }\n});\n\nexport type PluginLauncherActionDeclarationInput =\n z.infer<typeof pluginLauncherActionDeclarationSchema>;\n\n/**\n * Validates optional render hints for a plugin launcher destination.\n */\nexport const pluginLauncherRenderDeclarationSchema = z.object({\n environment: z.enum(PLUGIN_LAUNCHER_RENDER_ENVIRONMENTS),\n bounds: z.enum(PLUGIN_LAUNCHER_BOUNDS).optional(),\n}).superRefine((value, ctx) => {\n if (!value.bounds) {\n return;\n }\n\n const supportedBounds = launcherBoundsByEnvironment[value.environment];\n if (!supportedBounds.includes(value.bounds)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `bounds \"${value.bounds}\" is not supported for render environment \"${value.environment}\"`,\n path: [\"bounds\"],\n });\n }\n});\n\nexport type PluginLauncherRenderDeclarationInput =\n z.infer<typeof pluginLauncherRenderDeclarationSchema>;\n\n/**\n * Validates declarative launcher metadata in a plugin manifest.\n */\nexport const pluginLauncherDeclarationSchema = z.object({\n id: z.string().min(1),\n displayName: z.string().min(1),\n description: z.string().optional(),\n placementZone: z.enum(PLUGIN_LAUNCHER_PLACEMENT_ZONES),\n exportName: z.string().min(1).optional(),\n entityTypes: z.array(z.enum(PLUGIN_UI_SLOT_ENTITY_TYPES)).optional(),\n order: z.number().int().optional(),\n action: pluginLauncherActionDeclarationSchema,\n render: pluginLauncherRenderDeclarationSchema.optional(),\n}).superRefine((value, ctx) => {\n if (\n entityScopedLauncherPlacementZones.some((zone) => zone === value.placementZone)\n && (!value.entityTypes || value.entityTypes.length === 0)\n ) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `${value.placementZone} launchers require at least one entityType`,\n path: [\"entityTypes\"],\n });\n }\n\n if (\n value.placementZone === \"projectSidebarItem\"\n && value.entityTypes\n && !value.entityTypes.includes(\"project\")\n ) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"projectSidebarItem launchers require entityTypes to include \\\"project\\\"\",\n path: [\"entityTypes\"],\n });\n }\n\n if (value.action.type === \"performAction\" && value.render) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"performAction launchers cannot declare render hints\",\n path: [\"render\"],\n });\n }\n\n if (\n [\"openModal\", \"openDrawer\", \"openPopover\"].includes(value.action.type)\n && !value.render\n ) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `${value.action.type} launchers require render metadata`,\n path: [\"render\"],\n });\n }\n\n if (value.action.type === \"openModal\" && value.render?.environment === \"hostInline\") {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"openModal launchers cannot use the hostInline render environment\",\n path: [\"render\", \"environment\"],\n });\n }\n\n if (\n value.action.type === \"openDrawer\"\n && value.render\n && ![\"hostOverlay\", \"iframe\"].includes(value.render.environment)\n ) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"openDrawer launchers must use hostOverlay or iframe render environments\",\n path: [\"render\", \"environment\"],\n });\n }\n\n if (value.action.type === \"openPopover\" && value.render?.environment === \"hostRoute\") {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"openPopover launchers cannot use the hostRoute render environment\",\n path: [\"render\", \"environment\"],\n });\n }\n});\n\nexport type PluginLauncherDeclarationInput = z.infer<typeof pluginLauncherDeclarationSchema>;\n\nexport const pluginDatabaseDeclarationSchema = z.object({\n namespaceSlug: z.string().regex(/^[a-z0-9][a-z0-9_]*$/, {\n message: \"namespaceSlug must be lowercase letters, digits, or underscores and start with a letter or digit\",\n }).max(40).optional(),\n migrationsDir: z.string().min(1).refine(\n (value) => !value.startsWith(\"/\") && !value.includes(\"..\") && !/[\\\\]/.test(value),\n { message: \"migrationsDir must be a relative package path without '..' or backslashes\" },\n ),\n coreReadTables: z.array(z.enum(PLUGIN_DATABASE_CORE_READ_TABLES)).optional(),\n});\n\nexport type PluginDatabaseDeclarationInput = z.infer<typeof pluginDatabaseDeclarationSchema>;\n\nexport const pluginApiRouteDeclarationSchema = z.object({\n routeKey: z.string().min(1).max(100).regex(/^[a-z0-9][a-z0-9._:-]*$/, {\n message: \"routeKey must be lowercase letters, digits, dots, colons, underscores, or hyphens\",\n }),\n method: z.enum(PLUGIN_API_ROUTE_METHODS),\n path: z.string().min(1).regex(/^\\/[a-zA-Z0-9:_./-]*$/, {\n message: \"path must start with / and contain only path-safe literal or :param segments\",\n }).refine(\n (value) =>\n !value.includes(\"..\") &&\n !value.includes(\"//\") &&\n value !== \"/api\" &&\n !value.startsWith(\"/api/\") &&\n value !== \"/plugins\" &&\n !value.startsWith(\"/plugins/\"),\n { message: \"path must stay inside the plugin api namespace\" },\n ),\n auth: z.enum(PLUGIN_API_ROUTE_AUTH_MODES),\n capability: z.literal(\"api.routes.register\"),\n checkoutPolicy: z.enum(PLUGIN_API_ROUTE_CHECKOUT_POLICIES).optional(),\n companyResolution: z.discriminatedUnion(\"from\", [\n z.object({ from: z.literal(\"body\"), key: z.string().min(1) }),\n z.object({ from: z.literal(\"query\"), key: z.string().min(1) }),\n z.object({ from: z.literal(\"issue\"), param: z.string().min(1) }),\n ]).optional(),\n});\n\nexport type PluginApiRouteDeclarationInput = z.infer<typeof pluginApiRouteDeclarationSchema>;\n\nconst pluginSsoFieldPathSchema = z.string().min(1).max(200).regex(\n /^[A-Za-z0-9_$.-]+$/,\n \"field path may only contain letters, numbers, underscores, dollar signs, dots, and hyphens\",\n);\n\nexport const pluginAuthSsoProviderDeclarationSchema = z.object({\n providerId: z.string().min(1).max(80).regex(/^[a-z0-9][a-z0-9._-]*$/, {\n message: \"providerId must start with a lowercase alphanumeric and contain only lowercase letters, digits, dots, hyphens, or underscores\",\n }),\n displayName: z.string().min(1).max(100),\n description: z.string().max(500).optional(),\n enabled: z.boolean().optional(),\n authorizationUrl: z.string().url(),\n tokenUrl: z.string().url(),\n profileUrl: z.string().url(),\n clientId: z.string().min(1).max(200),\n clientSecretRef: z.string().min(1).max(200),\n redirectUri: z.string().url(),\n scope: z.union([z.string().max(1000), z.array(z.string().max(200)).max(50)]).optional(),\n usePkce: z.boolean().optional(),\n pkceMethod: z.literal(\"S256\").optional(),\n useState: z.boolean().optional(),\n profileMapping: z.object({\n providerAccountIdField: pluginSsoFieldPathSchema,\n nameField: pluginSsoFieldPathSchema,\n emailField: pluginSsoFieldPathSchema.nullable().optional(),\n emailVerified: z.boolean().optional(),\n }),\n autoProvision: z.object({\n enabled: z.boolean().optional(),\n defaultCompanyId: z.string().uuid().nullable().optional(),\n defaultMembershipRole: z.string().min(1).max(80).nullable().optional(),\n allowlist: z.object({\n field: pluginSsoFieldPathSchema,\n values: z.array(z.string().min(1).max(200)).min(1).max(100),\n }).optional(),\n active: z.object({\n field: pluginSsoFieldPathSchema,\n values: z.array(z.string().min(1).max(200)).min(1).max(100),\n }).optional(),\n }).optional(),\n}).superRefine((value, ctx) => {\n if (value.usePkce && value.pkceMethod && value.pkceMethod !== \"S256\") {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"Only PKCE S256 is supported\",\n path: [\"pkceMethod\"],\n });\n }\n if (value.autoProvision?.enabled && !value.autoProvision.defaultCompanyId) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"defaultCompanyId is required when autoProvision is enabled\",\n path: [\"autoProvision\", \"defaultCompanyId\"],\n });\n }\n});\n\nexport type PluginAuthSsoProviderDeclarationInput = z.infer<typeof pluginAuthSsoProviderDeclarationSchema>;\n\n// ---------------------------------------------------------------------------\n// Plugin Manifest V1 schema\n// ---------------------------------------------------------------------------\n\n/**\n * Zod schema for {@link PaperclipPluginManifestV1} \u2014 the complete runtime\n * validator for plugin manifests read at install time.\n *\n * Field-level constraints (see PLUGIN_SPEC.md \u00A710.1 for the normative rules):\n *\n * | Field | Type | Constraints |\n * |--------------------------|------------|----------------------------------------------|\n * | `id` | string | `^[a-z0-9][a-z0-9._-]*$` |\n * | `apiVersion` | literal 1 | must equal `PLUGIN_API_VERSION` |\n * | `version` | string | semver (`\\d+\\.\\d+\\.\\d+`) |\n * | `displayName` | string | 1\u2013100 chars |\n * | `description` | string | 1\u2013500 chars |\n * | `author` | string | 1\u2013200 chars |\n * | `categories` | enum[] | at least one; values from PLUGIN_CATEGORIES |\n * | `minimumHostVersion` | string? | semver lower bound if present, no leading `v`|\n * | `minimumPaperclipVersion`| string? | legacy alias of `minimumHostVersion` |\n * | `capabilities` | enum[] | at least one; values from PLUGIN_CAPABILITIES|\n * | `entrypoints.worker` | string | min 1 char |\n * | `entrypoints.ui` | string? | required when `ui.slots` is declared |\n *\n * Cross-field rules enforced via `superRefine`:\n * - `entrypoints.ui` required when `ui.slots` declared\n * - `agent.tools.register` capability required when `tools` declared\n * - `environment.drivers.register` capability required when `environmentDrivers` declared\n * - `jobs.schedule` capability required when `jobs` declared\n * - `webhooks.receive` capability required when `webhooks` declared\n * - duplicate `jobs[].jobKey` values are rejected\n * - duplicate `webhooks[].endpointKey` values are rejected\n * - duplicate `tools[].name` values are rejected\n * - duplicate `environmentDrivers[].driverKey` values are rejected\n * - duplicate `ui.slots[].id` values are rejected\n *\n * @see PLUGIN_SPEC.md \u00A710.1 \u2014 Manifest shape\n * @see {@link PaperclipPluginManifestV1} \u2014 the inferred TypeScript type\n */\nexport const pluginManifestV1Schema = z.object({\n id: z.string().min(1).regex(\n /^[a-z0-9][a-z0-9._-]*$/,\n \"Plugin id must start with a lowercase alphanumeric and contain only lowercase letters, digits, dots, hyphens, or underscores\",\n ),\n apiVersion: z.literal(1),\n version: z.string().min(1).regex(\n /^\\d+\\.\\d+\\.\\d+(-[0-9A-Za-z-]+(\\.[0-9A-Za-z-]+)*)?(\\+[0-9A-Za-z-]+(\\.[0-9A-Za-z-]+)*)?$/,\n \"Version must follow semver (e.g. 1.0.0 or 1.0.0-beta.1)\",\n ),\n displayName: z.string().min(1).max(100),\n description: z.string().min(1).max(500),\n author: z.string().min(1).max(200),\n categories: z.array(z.enum(PLUGIN_CATEGORIES)).min(1),\n minimumHostVersion: z.string().regex(\n /^\\d+\\.\\d+\\.\\d+(-[0-9A-Za-z-]+(\\.[0-9A-Za-z-]+)*)?(\\+[0-9A-Za-z-]+(\\.[0-9A-Za-z-]+)*)?$/,\n \"minimumHostVersion must follow semver (e.g. 1.0.0)\",\n ).optional(),\n minimumPaperclipVersion: z.string().regex(\n /^\\d+\\.\\d+\\.\\d+(-[0-9A-Za-z-]+(\\.[0-9A-Za-z-]+)*)?(\\+[0-9A-Za-z-]+(\\.[0-9A-Za-z-]+)*)?$/,\n \"minimumPaperclipVersion must follow semver (e.g. 1.0.0)\",\n ).optional(),\n capabilities: z.array(z.enum(PLUGIN_CAPABILITIES)).min(1),\n entrypoints: z.object({\n worker: z.string().min(1),\n ui: z.string().min(1).optional(),\n }),\n instanceConfigSchema: jsonSchemaSchema.optional(),\n jobs: z.array(pluginJobDeclarationSchema).optional(),\n webhooks: z.array(pluginWebhookDeclarationSchema).optional(),\n tools: z.array(pluginToolDeclarationSchema).optional(),\n database: pluginDatabaseDeclarationSchema.optional(),\n apiRoutes: z.array(pluginApiRouteDeclarationSchema).optional(),\n authProviders: z.array(pluginAuthSsoProviderDeclarationSchema).optional(),\n environmentDrivers: z.array(pluginEnvironmentDriverDeclarationSchema).optional(),\n agents: z.array(pluginManagedAgentDeclarationSchema).optional(),\n projects: z.array(pluginManagedProjectDeclarationSchema).optional(),\n routines: z.array(pluginManagedRoutineDeclarationSchema).optional(),\n skills: z.array(pluginManagedSkillDeclarationSchema).optional(),\n localFolders: z.array(pluginLocalFolderDeclarationSchema).optional(),\n launchers: z.array(pluginLauncherDeclarationSchema).optional(),\n ui: z.object({\n slots: z.array(pluginUiSlotDeclarationSchema).min(1).optional(),\n launchers: z.array(pluginLauncherDeclarationSchema).optional(),\n }).optional(),\n}).superRefine((manifest, ctx) => {\n // \u2500\u2500 Entrypoint \u2194 UI slot consistency \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n // Plugins that declare UI slots must also declare a UI entrypoint so the\n // host knows where to load the bundle from (PLUGIN_SPEC.md \u00A710.1).\n const hasUiSlots = (manifest.ui?.slots?.length ?? 0) > 0;\n const hasUiLaunchers = (manifest.ui?.launchers?.length ?? 0) > 0;\n if ((hasUiSlots || hasUiLaunchers) && !manifest.entrypoints.ui) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"entrypoints.ui is required when ui.slots or ui.launchers are declared\",\n path: [\"entrypoints\", \"ui\"],\n });\n }\n\n if (\n manifest.minimumHostVersion\n && manifest.minimumPaperclipVersion\n && manifest.minimumHostVersion !== manifest.minimumPaperclipVersion\n ) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"minimumHostVersion and minimumPaperclipVersion must match when both are declared\",\n path: [\"minimumHostVersion\"],\n });\n }\n\n // \u2500\u2500 Capability \u2194 feature declaration consistency \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n // The host enforces capabilities at install and runtime. A plugin must\n // declare every capability it needs up-front; silently having more features\n // than capabilities would cause runtime rejections.\n\n // tools require agent.tools.register (PLUGIN_SPEC.md \u00A711)\n if (manifest.tools && manifest.tools.length > 0) {\n if (!manifest.capabilities.includes(\"agent.tools.register\")) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"Capability 'agent.tools.register' is required when tools are declared\",\n path: [\"capabilities\"],\n });\n }\n }\n\n // environment drivers require environment.drivers.register\n if (manifest.environmentDrivers && manifest.environmentDrivers.length > 0) {\n if (!manifest.capabilities.includes(\"environment.drivers.register\")) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"Capability 'environment.drivers.register' is required when environmentDrivers are declared\",\n path: [\"capabilities\"],\n });\n }\n }\n\n if (manifest.agents && manifest.agents.length > 0) {\n if (!manifest.capabilities.includes(\"agents.managed\")) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"Capability 'agents.managed' is required when managed agents are declared\",\n path: [\"capabilities\"],\n });\n }\n }\n\n if (manifest.projects && manifest.projects.length > 0) {\n if (!manifest.capabilities.includes(\"projects.managed\")) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"Capability 'projects.managed' is required when managed projects are declared\",\n path: [\"capabilities\"],\n });\n }\n }\n\n if (manifest.routines && manifest.routines.length > 0) {\n if (!manifest.capabilities.includes(\"routines.managed\")) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"Capability 'routines.managed' is required when managed routines are declared\",\n path: [\"capabilities\"],\n });\n }\n }\n\n if (manifest.skills && manifest.skills.length > 0) {\n if (!manifest.capabilities.includes(\"skills.managed\")) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"Capability 'skills.managed' is required when managed skills are declared\",\n path: [\"capabilities\"],\n });\n }\n }\n\n if (manifest.localFolders && manifest.localFolders.length > 0) {\n if (!manifest.capabilities.includes(\"local.folders\")) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"Capability 'local.folders' is required when local folders are declared\",\n path: [\"capabilities\"],\n });\n }\n }\n\n // jobs require jobs.schedule (PLUGIN_SPEC.md \u00A717)\n if (manifest.jobs && manifest.jobs.length > 0) {\n if (!manifest.capabilities.includes(\"jobs.schedule\")) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"Capability 'jobs.schedule' is required when jobs are declared\",\n path: [\"capabilities\"],\n });\n }\n }\n\n // webhooks require webhooks.receive (PLUGIN_SPEC.md \u00A718)\n if (manifest.webhooks && manifest.webhooks.length > 0) {\n if (!manifest.capabilities.includes(\"webhooks.receive\")) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"Capability 'webhooks.receive' is required when webhooks are declared\",\n path: [\"capabilities\"],\n });\n }\n }\n\n if (manifest.apiRoutes && manifest.apiRoutes.length > 0) {\n if (!manifest.capabilities.includes(\"api.routes.register\")) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"Capability 'api.routes.register' is required when apiRoutes are declared\",\n path: [\"capabilities\"],\n });\n }\n }\n\n if (manifest.authProviders && manifest.authProviders.length > 0) {\n if (!manifest.capabilities.includes(\"auth.sso.register\")) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"Capability 'auth.sso.register' is required when authProviders are declared\",\n path: [\"capabilities\"],\n });\n }\n }\n\n if (manifest.database) {\n const requiredCapabilities = [\n \"database.namespace.migrate\",\n \"database.namespace.read\",\n ] as const;\n for (const capability of requiredCapabilities) {\n if (!manifest.capabilities.includes(capability)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `Capability '${capability}' is required when database migrations are declared`,\n path: [\"capabilities\"],\n });\n }\n }\n\n const coreReadTables = manifest.database.coreReadTables ?? [];\n const duplicates = coreReadTables.filter((table, i) => coreReadTables.indexOf(table) !== i);\n if (duplicates.length > 0) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `Duplicate database coreReadTables: ${[...new Set(duplicates)].join(\", \")}`,\n path: [\"database\", \"coreReadTables\"],\n });\n }\n }\n\n // \u2500\u2500 Uniqueness checks \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n // Duplicate keys within a plugin's own manifest are always a bug. The host\n // would not know which declaration takes precedence, so we reject early.\n\n // job keys must be unique within the plugin (used as identifiers in the DB)\n if (manifest.jobs) {\n const jobKeys = manifest.jobs.map((j) => j.jobKey);\n const duplicates = jobKeys.filter((key, i) => jobKeys.indexOf(key) !== i);\n if (duplicates.length > 0) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `Duplicate job keys: ${[...new Set(duplicates)].join(\", \")}`,\n path: [\"jobs\"],\n });\n }\n }\n\n // webhook endpoint keys must be unique within the plugin (used in routes)\n if (manifest.webhooks) {\n const endpointKeys = manifest.webhooks.map((w) => w.endpointKey);\n const duplicates = endpointKeys.filter((key, i) => endpointKeys.indexOf(key) !== i);\n if (duplicates.length > 0) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `Duplicate webhook endpoint keys: ${[...new Set(duplicates)].join(\", \")}`,\n path: [\"webhooks\"],\n });\n }\n }\n\n if (manifest.apiRoutes) {\n const routeKeys = manifest.apiRoutes.map((route) => route.routeKey);\n const duplicateKeys = routeKeys.filter((key, i) => routeKeys.indexOf(key) !== i);\n if (duplicateKeys.length > 0) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `Duplicate api route keys: ${[...new Set(duplicateKeys)].join(\", \")}`,\n path: [\"apiRoutes\"],\n });\n }\n const routeSignatures = manifest.apiRoutes.map((route) => `${route.method} ${route.path}`);\n const duplicateRoutes = routeSignatures.filter((sig, i) => routeSignatures.indexOf(sig) !== i);\n if (duplicateRoutes.length > 0) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `Duplicate api routes: ${[...new Set(duplicateRoutes)].join(\", \")}`,\n path: [\"apiRoutes\"],\n });\n }\n }\n\n if (manifest.authProviders) {\n const providerIds = manifest.authProviders.map((provider) => provider.providerId);\n const duplicates = providerIds.filter((providerId, i) => providerIds.indexOf(providerId) !== i);\n if (duplicates.length > 0) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `Duplicate auth provider ids: ${[...new Set(duplicates)].join(\", \")}`,\n path: [\"authProviders\"],\n });\n }\n }\n\n // tool names must be unique within the plugin (namespaced at runtime)\n if (manifest.tools) {\n const toolNames = manifest.tools.map((t) => t.name);\n const duplicates = toolNames.filter((name, i) => toolNames.indexOf(name) !== i);\n if (duplicates.length > 0) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `Duplicate tool names: ${[...new Set(duplicates)].join(\", \")}`,\n path: [\"tools\"],\n });\n }\n }\n\n // environment driver keys must be unique within the plugin\n if (manifest.environmentDrivers) {\n const driverKeys = manifest.environmentDrivers.map((d) => d.driverKey);\n const duplicates = driverKeys.filter((key, i) => driverKeys.indexOf(key) !== i);\n if (duplicates.length > 0) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `Duplicate environment driver keys: ${[...new Set(duplicates)].join(\", \")}`,\n path: [\"environmentDrivers\"],\n });\n }\n }\n\n if (manifest.localFolders) {\n const folderKeys = manifest.localFolders.map((folder) => folder.folderKey);\n const duplicates = folderKeys.filter((key, i) => folderKeys.indexOf(key) !== i);\n if (duplicates.length > 0) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `Duplicate local folder keys: ${[...new Set(duplicates)].join(\", \")}`,\n path: [\"localFolders\"],\n });\n }\n }\n\n if (manifest.agents) {\n const agentKeys = manifest.agents.map((agent) => agent.agentKey);\n const duplicates = agentKeys.filter((key, i) => agentKeys.indexOf(key) !== i);\n if (duplicates.length > 0) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `Duplicate managed agent keys: ${[...new Set(duplicates)].join(\", \")}`,\n path: [\"agents\"],\n });\n }\n }\n\n if (manifest.projects) {\n const projectKeys = manifest.projects.map((project) => project.projectKey);\n const duplicates = projectKeys.filter((key, i) => projectKeys.indexOf(key) !== i);\n if (duplicates.length > 0) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `Duplicate managed project keys: ${[...new Set(duplicates)].join(\", \")}`,\n path: [\"projects\"],\n });\n }\n }\n\n if (manifest.routines) {\n const routineKeys = manifest.routines.map((routine) => routine.routineKey);\n const duplicates = routineKeys.filter((key, i) => routineKeys.indexOf(key) !== i);\n if (duplicates.length > 0) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `Duplicate managed routine keys: ${[...new Set(duplicates)].join(\", \")}`,\n path: [\"routines\"],\n });\n }\n }\n\n if (manifest.skills) {\n const skillKeys = manifest.skills.map((skill) => skill.skillKey);\n const duplicates = skillKeys.filter((key, i) => skillKeys.indexOf(key) !== i);\n if (duplicates.length > 0) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `Duplicate managed skill keys: ${[...new Set(duplicates)].join(\", \")}`,\n path: [\"skills\"],\n });\n }\n }\n\n // UI slot ids must be unique within the plugin (namespaced at runtime)\n if (manifest.ui) {\n if (manifest.ui.slots) {\n const slotIds = manifest.ui.slots.map((s) => s.id);\n const duplicates = slotIds.filter((id, i) => slotIds.indexOf(id) !== i);\n if (duplicates.length > 0) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `Duplicate UI slot ids: ${[...new Set(duplicates)].join(\", \")}`,\n path: [\"ui\", \"slots\"],\n });\n }\n }\n }\n\n // launcher ids must be unique within the plugin\n const allLaunchers = [\n ...(manifest.launchers ?? []),\n ...(manifest.ui?.launchers ?? []),\n ];\n if (allLaunchers.length > 0) {\n const launcherIds = allLaunchers.map((launcher) => launcher.id);\n const duplicates = launcherIds.filter((id, i) => launcherIds.indexOf(id) !== i);\n if (duplicates.length > 0) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `Duplicate launcher ids: ${[...new Set(duplicates)].join(\", \")}`,\n path: manifest.ui?.launchers ? [\"ui\", \"launchers\"] : [\"launchers\"],\n });\n }\n }\n});\n\nexport type PluginManifestV1Input = z.infer<typeof pluginManifestV1Schema>;\n\n// ---------------------------------------------------------------------------\n// Plugin installation / registration request\n// ---------------------------------------------------------------------------\n\n/**\n * Schema for installing (registering) a plugin.\n * The server receives the packageName and resolves the manifest from the\n * installed package.\n */\nexport const installPluginSchema = z.object({\n packageName: z.string().min(1),\n version: z.string().min(1).optional(),\n /** Set by loader for local-path installs so the worker can be resolved. */\n packagePath: z.string().min(1).optional(),\n});\n\nexport type InstallPlugin = z.infer<typeof installPluginSchema>;\n\n// ---------------------------------------------------------------------------\n// Plugin config (instance configuration) schemas\n// ---------------------------------------------------------------------------\n\n/**\n * Schema for creating or updating a plugin's instance configuration.\n * configJson is validated permissively here; runtime validation against\n * the plugin's instanceConfigSchema is done at the service layer.\n */\nexport const upsertPluginConfigSchema = z.object({\n configJson: z.record(z.unknown()),\n});\n\nexport type UpsertPluginConfig = z.infer<typeof upsertPluginConfigSchema>;\n\n/**\n * Schema for partially updating a plugin's instance configuration.\n * Allows a partial merge of config values.\n */\nexport const patchPluginConfigSchema = z.object({\n configJson: z.record(z.unknown()),\n});\n\nexport type PatchPluginConfig = z.infer<typeof patchPluginConfigSchema>;\n\n// ---------------------------------------------------------------------------\n// Plugin status update\n// ---------------------------------------------------------------------------\n\n/**\n * Schema for updating a plugin's lifecycle status. Used by the lifecycle\n * manager to persist state transitions.\n *\n * @see {@link PLUGIN_STATUSES} for the valid status values\n */\nexport const updatePluginStatusSchema = z.object({\n status: z.enum(PLUGIN_STATUSES),\n lastError: z.string().nullable().optional(),\n});\n\nexport type UpdatePluginStatus = z.infer<typeof updatePluginStatusSchema>;\n\n// ---------------------------------------------------------------------------\n// Plugin uninstall\n// ---------------------------------------------------------------------------\n\n/** Schema for the uninstall request. `removeData` controls hard vs soft delete. */\nexport const uninstallPluginSchema = z.object({\n removeData: z.boolean().optional().default(false),\n});\n\nexport type UninstallPlugin = z.infer<typeof uninstallPluginSchema>;\n\n// ---------------------------------------------------------------------------\n// Plugin state (key-value storage) schemas\n// ---------------------------------------------------------------------------\n\n/**\n * Schema for a plugin state scope key \u2014 identifies the exact location where\n * state is stored. Used by the `ctx.state.get()`, `ctx.state.set()`, and\n * `ctx.state.delete()` SDK methods.\n *\n * @see PLUGIN_SPEC.md \u00A721.3 `plugin_state`\n */\nexport const pluginStateScopeKeySchema = z.object({\n scopeKind: z.enum(PLUGIN_STATE_SCOPE_KINDS),\n scopeId: z.string().min(1).optional(),\n namespace: z.string().min(1).optional(),\n stateKey: z.string().min(1),\n});\n\nexport type PluginStateScopeKey = z.infer<typeof pluginStateScopeKeySchema>;\n\n/**\n * Schema for setting a plugin state value.\n */\nexport const setPluginStateSchema = z.object({\n scopeKind: z.enum(PLUGIN_STATE_SCOPE_KINDS),\n scopeId: z.string().min(1).optional(),\n namespace: z.string().min(1).optional(),\n stateKey: z.string().min(1),\n /** JSON-serializable value to store. */\n value: z.unknown(),\n});\n\nexport type SetPluginState = z.infer<typeof setPluginStateSchema>;\n\n/**\n * Schema for querying plugin state entries. All fields are optional to allow\n * flexible list queries (e.g. all state for a plugin within a scope).\n */\nexport const listPluginStateSchema = z.object({\n scopeKind: z.enum(PLUGIN_STATE_SCOPE_KINDS).optional(),\n scopeId: z.string().min(1).optional(),\n namespace: z.string().min(1).optional(),\n});\n\nexport type ListPluginState = z.infer<typeof listPluginStateSchema>;\n", "export const API_PREFIX = \"/api\";\n\nexport const API = {\n health: `${API_PREFIX}/health`,\n companies: `${API_PREFIX}/companies`,\n agents: `${API_PREFIX}/agents`,\n projects: `${API_PREFIX}/projects`,\n issues: `${API_PREFIX}/issues`,\n issueTreeControl: `${API_PREFIX}/issues/:issueId/tree-control`,\n issueTreeHolds: `${API_PREFIX}/issues/:issueId/tree-holds`,\n goals: `${API_PREFIX}/goals`,\n approvals: `${API_PREFIX}/approvals`,\n secrets: `${API_PREFIX}/secrets`,\n secretProviderConfigs: `${API_PREFIX}/secret-provider-configs`,\n costs: `${API_PREFIX}/costs`,\n activity: `${API_PREFIX}/activity`,\n dashboard: `${API_PREFIX}/dashboard`,\n sidebarBadges: `${API_PREFIX}/sidebar-badges`,\n sidebarPreferences: `${API_PREFIX}/sidebar-preferences`,\n invites: `${API_PREFIX}/invites`,\n joinRequests: `${API_PREFIX}/join-requests`,\n members: `${API_PREFIX}/members`,\n admin: `${API_PREFIX}/admin`,\n} as const;\n", "import type { RoutineVariable } from \"./types/routine.js\";\n\nconst ROUTINE_VARIABLE_MATCHER = /\\{\\{\\s*([A-Za-z][A-Za-z0-9_]*)\\s*\\}\\}/g;\ntype RoutineTemplateInput = string | null | undefined | Array<string | null | undefined>;\n\n/**\n * Built-in variable names that are automatically available in routine templates\n * without needing to be defined in the routine's variables list.\n */\nexport const BUILTIN_ROUTINE_VARIABLE_NAMES = new Set([\"date\", \"timestamp\"]);\n\nexport function isBuiltinRoutineVariable(name: string): boolean {\n return BUILTIN_ROUTINE_VARIABLE_NAMES.has(name);\n}\n\nconst HUMAN_TIMESTAMP_FORMATTER = new Intl.DateTimeFormat(\"en-US\", {\n year: \"numeric\",\n month: \"long\",\n day: \"numeric\",\n hour: \"numeric\",\n minute: \"2-digit\",\n hour12: true,\n timeZone: \"UTC\",\n timeZoneName: \"short\",\n});\n\n/**\n * Returns current values for all built-in routine variables.\n * `date` expands to the current date in YYYY-MM-DD format (UTC).\n * `timestamp` expands to a human-readable date and time (e.g. \"April 28, 2026 at 12:17 PM UTC\").\n */\nexport function getBuiltinRoutineVariableValues(): Record<string, string> {\n const now = new Date();\n return {\n date: now.toISOString().slice(0, 10),\n timestamp: HUMAN_TIMESTAMP_FORMATTER.format(now),\n };\n}\n\nexport function isValidRoutineVariableName(name: string): boolean {\n return /^[A-Za-z][A-Za-z0-9_]*$/.test(name);\n}\n\nfunction normalizeRoutineTemplateInput(input: RoutineTemplateInput): string[] {\n const templates = Array.isArray(input) ? input : [input];\n return templates.filter((template): template is string => typeof template === \"string\" && template.length > 0);\n}\n\nexport function extractRoutineVariableNames(template: RoutineTemplateInput): string[] {\n const found = new Set<string>();\n for (const source of normalizeRoutineTemplateInput(template)) {\n for (const match of source.matchAll(ROUTINE_VARIABLE_MATCHER)) {\n const name = match[1];\n if (name && !found.has(name)) {\n found.add(name);\n }\n }\n }\n return [...found];\n}\n\nfunction defaultRoutineVariable(name: string): RoutineVariable {\n return {\n name,\n label: null,\n type: \"text\",\n defaultValue: null,\n required: true,\n options: [],\n };\n}\n\nexport function syncRoutineVariablesWithTemplate(\n template: RoutineTemplateInput,\n existing: RoutineVariable[] | null | undefined,\n): RoutineVariable[] {\n const names = extractRoutineVariableNames(template).filter((name) => !isBuiltinRoutineVariable(name));\n const existingByName = new Map((existing ?? []).map((variable) => [variable.name, variable]));\n return names.map((name) => existingByName.get(name) ?? defaultRoutineVariable(name));\n}\n\nexport function stringifyRoutineVariableValue(value: unknown): string {\n if (typeof value === \"string\") return value;\n if (typeof value === \"number\" || typeof value === \"boolean\") return String(value);\n if (value == null) return \"\";\n try {\n return JSON.stringify(value);\n } catch {\n return String(value);\n }\n}\n\nexport function interpolateRoutineTemplate(\n template: string | null | undefined,\n values: Record<string, unknown> | null | undefined,\n): string | null {\n if (template == null) return null;\n if (!values || Object.keys(values).length === 0) return template;\n return template.replace(ROUTINE_VARIABLE_MATCHER, (match, rawName: string) => {\n if (!(rawName in values)) return match;\n return stringifyRoutineVariableValue(values[rawName]);\n });\n}\n", "import { z } from \"zod\";\nimport {\n AUTH_BASE_URL_MODES,\n BIND_MODES,\n DEPLOYMENT_EXPOSURES,\n DEPLOYMENT_MODES,\n SECRET_PROVIDERS,\n STORAGE_PROVIDERS,\n} from \"./constants.js\";\nimport { validateConfiguredBindMode } from \"./network-bind.js\";\n\nexport const configMetaSchema = z.object({\n version: z.literal(1),\n updatedAt: z.string(),\n source: z.enum([\"onboard\", \"configure\", \"doctor\"]),\n});\n\nexport const llmConfigSchema = z.object({\n provider: z.enum([\"claude\", \"openai\"]),\n apiKey: z.string().optional(),\n});\n\nexport const databaseBackupConfigSchema = z.object({\n enabled: z.boolean().default(true),\n intervalMinutes: z.number().int().min(1).max(7 * 24 * 60).default(60),\n retentionDays: z.number().int().min(1).max(3650).default(7),\n dir: z.string().default(\"~/.paperclip/instances/default/data/backups\"),\n});\n\nexport const databaseConfigSchema = z.object({\n mode: z.enum([\"embedded-postgres\", \"postgres\"]).default(\"embedded-postgres\"),\n connectionString: z.string().optional(),\n embeddedPostgresDataDir: z.string().default(\"~/.paperclip/instances/default/db\"),\n embeddedPostgresPort: z.number().int().min(1).max(65535).default(54329),\n backup: databaseBackupConfigSchema.default({\n enabled: true,\n intervalMinutes: 60,\n retentionDays: 7,\n dir: \"~/.paperclip/instances/default/data/backups\",\n }),\n});\n\nexport const loggingConfigSchema = z.object({\n mode: z.enum([\"file\", \"cloud\"]),\n logDir: z.string().default(\"~/.paperclip/instances/default/logs\"),\n});\n\nexport const serverConfigSchema = z.object({\n deploymentMode: z.enum(DEPLOYMENT_MODES).default(\"local_trusted\"),\n exposure: z.enum(DEPLOYMENT_EXPOSURES).default(\"private\"),\n bind: z.enum(BIND_MODES).optional(),\n customBindHost: z.string().optional(),\n host: z.string().default(\"127.0.0.1\"),\n port: z.number().int().min(1).max(65535).default(3100),\n allowedHostnames: z.array(z.string().min(1)).default([]),\n serveUi: z.boolean().default(true),\n});\n\nexport const authConfigSchema = z.object({\n baseUrlMode: z.enum(AUTH_BASE_URL_MODES).default(\"auto\"),\n publicBaseUrl: z.string().url().optional(),\n disableSignUp: z.boolean().default(false),\n});\n\nexport const storageLocalDiskConfigSchema = z.object({\n baseDir: z.string().default(\"~/.paperclip/instances/default/data/storage\"),\n});\n\nexport const storageS3ConfigSchema = z.object({\n bucket: z.string().min(1).default(\"paperclip\"),\n region: z.string().min(1).default(\"us-east-1\"),\n endpoint: z.string().optional(),\n prefix: z.string().default(\"\"),\n forcePathStyle: z.boolean().default(false),\n});\n\nexport const storageConfigSchema = z.object({\n provider: z.enum(STORAGE_PROVIDERS).default(\"local_disk\"),\n localDisk: storageLocalDiskConfigSchema.default({\n baseDir: \"~/.paperclip/instances/default/data/storage\",\n }),\n s3: storageS3ConfigSchema.default({\n bucket: \"paperclip\",\n region: \"us-east-1\",\n prefix: \"\",\n forcePathStyle: false,\n }),\n});\n\nexport const secretsLocalEncryptedConfigSchema = z.object({\n keyFilePath: z.string().default(\"~/.paperclip/instances/default/secrets/master.key\"),\n});\n\nexport const secretsConfigSchema = z.object({\n provider: z.enum(SECRET_PROVIDERS).default(\"local_encrypted\"),\n strictMode: z.boolean().default(false),\n localEncrypted: secretsLocalEncryptedConfigSchema.default({\n keyFilePath: \"~/.paperclip/instances/default/secrets/master.key\",\n }),\n});\n\nexport const telemetryConfigSchema = z.object({\n enabled: z.boolean().default(true),\n}).default({});\n\nexport const paperclipConfigSchema = z\n .object({\n $meta: configMetaSchema,\n llm: llmConfigSchema.optional(),\n database: databaseConfigSchema,\n logging: loggingConfigSchema,\n server: serverConfigSchema,\n telemetry: telemetryConfigSchema,\n auth: authConfigSchema.default({\n baseUrlMode: \"auto\",\n disableSignUp: false,\n }),\n storage: storageConfigSchema.default({\n provider: \"local_disk\",\n localDisk: {\n baseDir: \"~/.paperclip/instances/default/data/storage\",\n },\n s3: {\n bucket: \"paperclip\",\n region: \"us-east-1\",\n prefix: \"\",\n forcePathStyle: false,\n },\n }),\n secrets: secretsConfigSchema.default({\n provider: \"local_encrypted\",\n strictMode: false,\n localEncrypted: {\n keyFilePath: \"~/.paperclip/instances/default/secrets/master.key\",\n },\n }),\n })\n .superRefine((value, ctx) => {\n if (value.server.deploymentMode === \"local_trusted\" && value.server.exposure !== \"private\") {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"server.exposure must be private when deploymentMode is local_trusted\",\n path: [\"server\", \"exposure\"],\n });\n }\n\n for (const message of validateConfiguredBindMode({\n deploymentMode: value.server.deploymentMode,\n deploymentExposure: value.server.exposure,\n bind: value.server.bind,\n host: value.server.host,\n customBindHost: value.server.customBindHost,\n })) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message,\n path: message.includes(\"customBindHost\") ? [\"server\", \"customBindHost\"] : [\"server\", \"bind\"],\n });\n }\n\n if (value.auth.baseUrlMode === \"explicit\" && !value.auth.publicBaseUrl) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"auth.publicBaseUrl is required when auth.baseUrlMode is explicit\",\n path: [\"auth\", \"publicBaseUrl\"],\n });\n }\n\n if (value.server.exposure === \"public\" && value.auth.baseUrlMode !== \"explicit\") {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"auth.baseUrlMode must be explicit when deploymentMode=authenticated and exposure=public\",\n path: [\"auth\", \"baseUrlMode\"],\n });\n }\n\n if (value.server.exposure === \"public\" && !value.auth.publicBaseUrl) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"auth.publicBaseUrl is required when deploymentMode=authenticated and exposure=public\",\n path: [\"auth\", \"publicBaseUrl\"],\n });\n }\n });\n\nexport type PaperclipConfig = z.infer<typeof paperclipConfigSchema>;\nexport type LlmConfig = z.infer<typeof llmConfigSchema>;\nexport type DatabaseConfig = z.infer<typeof databaseConfigSchema>;\nexport type LoggingConfig = z.infer<typeof loggingConfigSchema>;\nexport type ServerConfig = z.infer<typeof serverConfigSchema>;\nexport type StorageConfig = z.infer<typeof storageConfigSchema>;\nexport type StorageLocalDiskConfig = z.infer<typeof storageLocalDiskConfigSchema>;\nexport type StorageS3Config = z.infer<typeof storageS3ConfigSchema>;\nexport type SecretsConfig = z.infer<typeof secretsConfigSchema>;\nexport type SecretsLocalEncryptedConfig = z.infer<typeof secretsLocalEncryptedConfigSchema>;\nexport type AuthConfig = z.infer<typeof authConfigSchema>;\nexport type TelemetryConfig = z.infer<typeof telemetryConfigSchema>;\nexport type ConfigMeta = z.infer<typeof configMetaSchema>;\nexport type DatabaseBackupConfig = z.infer<typeof databaseBackupConfigSchema>;\n", "/**\n * Worker-side RPC host \u2014 runs inside the child process spawned by the host.\n *\n * This module is the worker-side counterpart to the server's\n * `PluginWorkerManager`. It:\n *\n * 1. Reads newline-delimited JSON-RPC 2.0 requests from **stdin**\n * 2. Dispatches them to the appropriate plugin handler (events, jobs, tools, \u2026)\n * 3. Writes JSON-RPC 2.0 responses back on **stdout**\n * 4. Provides a concrete `PluginContext` whose SDK client methods (e.g.\n * `ctx.state.get()`, `ctx.events.emit()`) send JSON-RPC requests to the\n * host on stdout and await responses on stdin.\n *\n * ## Message flow\n *\n * ```\n * Host (parent) Worker (this module)\n * | |\n * |--- request(initialize) -------------> | \u2192 calls plugin.setup(ctx)\n * |<-- response(ok:true) ---------------- |\n * | |\n * |--- notification(onEvent) -----------> | \u2192 dispatches to registered handler\n * | |\n * |<-- request(state.get) --------------- | \u2190 SDK client call from plugin code\n * |--- response(result) ----------------> |\n * | |\n * |--- request(shutdown) ---------------> | \u2192 calls plugin.onShutdown()\n * |<-- response(void) ------------------ |\n * | (process exits)\n * ```\n *\n * @see PLUGIN_SPEC.md \u00A712 \u2014 Process Model\n * @see PLUGIN_SPEC.md \u00A713 \u2014 Host-Worker Protocol\n * @see PLUGIN_SPEC.md \u00A714 \u2014 SDK Surface\n */\n\nimport path from \"node:path\";\nimport { createInterface, type Interface as ReadlineInterface } from \"node:readline\";\nimport { fileURLToPath } from \"node:url\";\n\nimport type {\n AskUserQuestionsInteraction,\n PaperclipPluginManifestV1,\n RequestConfirmationInteraction,\n SuggestTasksInteraction,\n} from \"@paperclipai/shared\";\n\nimport type { PaperclipPlugin } from \"./define-plugin.js\";\nimport type {\n PluginApiRequestInput,\n PluginHealthDiagnostics,\n PluginConfigValidationResult,\n PluginWebhookInput,\n} from \"./define-plugin.js\";\nimport type {\n PluginContext,\n PluginEvent,\n PluginJobContext,\n PluginLauncherRegistration,\n ScopeKey,\n ToolRunContext,\n ToolResult,\n EventFilter,\n AgentSessionEvent,\n} from \"./types.js\";\nimport type {\n JsonRpcId,\n JsonRpcRequest,\n JsonRpcResponse,\n InitializeParams,\n InitializeResult,\n ConfigChangedParams,\n ValidateConfigParams,\n OnEventParams,\n RunJobParams,\n GetDataParams,\n PerformActionParams,\n ExecuteToolParams,\n PluginEnvironmentAcquireLeaseParams,\n PluginEnvironmentDestroyLeaseParams,\n PluginEnvironmentExecuteParams,\n PluginEnvironmentRealizeWorkspaceParams,\n PluginEnvironmentReleaseLeaseParams,\n PluginEnvironmentResumeLeaseParams,\n PluginEnvironmentValidateConfigParams,\n PluginEnvironmentProbeParams,\n WorkerToHostMethodName,\n WorkerToHostMethods,\n} from \"./protocol.js\";\nimport {\n JSONRPC_VERSION,\n JSONRPC_ERROR_CODES,\n PLUGIN_RPC_ERROR_CODES,\n createRequest,\n createSuccessResponse,\n createErrorResponse,\n createNotification,\n parseMessage,\n serializeMessage,\n isJsonRpcRequest,\n isJsonRpcResponse,\n isJsonRpcNotification,\n isJsonRpcSuccessResponse,\n isJsonRpcErrorResponse,\n JsonRpcParseError,\n JsonRpcCallError,\n} from \"./protocol.js\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n/**\n * Options for starting the worker-side RPC host.\n */\nexport interface WorkerRpcHostOptions {\n /**\n * The plugin definition returned by `definePlugin()`.\n *\n * The worker entrypoint should import its plugin and pass it here.\n */\n plugin: PaperclipPlugin;\n\n /**\n * Input stream to read JSON-RPC messages from.\n * Defaults to `process.stdin`.\n */\n stdin?: NodeJS.ReadableStream;\n\n /**\n * Output stream to write JSON-RPC messages to.\n * Defaults to `process.stdout`.\n */\n stdout?: NodeJS.WritableStream;\n\n /**\n * Default timeout (ms) for worker\u2192host RPC calls.\n * Defaults to 30 000 ms.\n */\n rpcTimeoutMs?: number;\n}\n\n/**\n * A running worker RPC host instance.\n *\n * Returned by `startWorkerRpcHost()`. Callers (usually just the worker\n * bootstrap) hold a reference so they can inspect status or force-stop.\n */\nexport interface WorkerRpcHost {\n /** Whether the host is currently running and listening for messages. */\n readonly running: boolean;\n\n /**\n * Stop the RPC host immediately. Closes readline, rejects pending\n * outbound calls, and does NOT call the plugin's shutdown hook (that\n * should have already been called via the `shutdown` RPC method).\n */\n stop(): void;\n}\n\n// ---------------------------------------------------------------------------\n// Internal: event registration\n// ---------------------------------------------------------------------------\n\ninterface EventRegistration {\n name: string;\n filter?: EventFilter;\n fn: (event: PluginEvent) => Promise<void>;\n}\n\n// ---------------------------------------------------------------------------\n// Constants\n// ---------------------------------------------------------------------------\n\n/** Default timeout for worker\u2192host RPC calls. */\nconst DEFAULT_RPC_TIMEOUT_MS = 30_000;\n\n// ---------------------------------------------------------------------------\n// startWorkerRpcHost\n// ---------------------------------------------------------------------------\n\n/**\n * Options for runWorker when testing (optional stdio to avoid using process streams).\n * When both stdin and stdout are provided, the \"is main module\" check is skipped\n * and the host is started with these streams. Used by tests.\n */\nexport interface RunWorkerOptions {\n stdin?: NodeJS.ReadableStream;\n stdout?: NodeJS.WritableStream;\n}\n\n/**\n * Start the worker when this module is the process entrypoint.\n *\n * Call this at the bottom of your worker file so that when the host runs\n * `node dist/worker.js`, the RPC host starts and the process stays alive.\n * When the module is imported (e.g. for re-exports or tests), nothing runs.\n *\n * When `options.stdin` and `options.stdout` are provided (e.g. in tests),\n * the main-module check is skipped and the host is started with those streams.\n *\n * @example\n * ```ts\n * const plugin = definePlugin({ ... });\n * export default plugin;\n * runWorker(plugin, import.meta.url);\n * ```\n */\nexport function runWorker(\n plugin: PaperclipPlugin,\n moduleUrl: string,\n options?: RunWorkerOptions,\n): WorkerRpcHost | void {\n if (\n options?.stdin != null &&\n options?.stdout != null\n ) {\n return startWorkerRpcHost({\n plugin,\n stdin: options.stdin,\n stdout: options.stdout,\n });\n }\n const entry = process.argv[1];\n if (typeof entry !== \"string\") return;\n const thisFile = path.resolve(fileURLToPath(moduleUrl));\n const entryPath = path.resolve(entry);\n if (thisFile === entryPath) {\n startWorkerRpcHost({ plugin });\n }\n}\n\n/**\n * Start the worker-side RPC host.\n *\n * This function is typically called from a thin bootstrap script that is the\n * actual entrypoint of the child process:\n *\n * ```ts\n * // worker-bootstrap.ts\n * import plugin from \"./worker.js\";\n * import { startWorkerRpcHost } from \"@paperclipai/plugin-sdk\";\n *\n * startWorkerRpcHost({ plugin });\n * ```\n *\n * The host begins listening on stdin immediately. It does NOT call\n * `plugin.definition.setup()` yet \u2014 that happens when the host sends the\n * `initialize` RPC.\n *\n * @returns A handle for inspecting or stopping the RPC host\n */\nexport function startWorkerRpcHost(options: WorkerRpcHostOptions): WorkerRpcHost {\n const { plugin } = options;\n const stdinStream = options.stdin ?? process.stdin;\n const stdoutStream = options.stdout ?? process.stdout;\n const rpcTimeoutMs = options.rpcTimeoutMs ?? DEFAULT_RPC_TIMEOUT_MS;\n\n // -----------------------------------------------------------------------\n // State\n // -----------------------------------------------------------------------\n\n let running = true;\n let initialized = false;\n let manifest: PaperclipPluginManifestV1 | null = null;\n let currentConfig: Record<string, unknown> = {};\n let databaseNamespace: string | null = null;\n\n // Plugin handler registrations (populated during setup())\n const eventHandlers: EventRegistration[] = [];\n const jobHandlers = new Map<string, (job: PluginJobContext) => Promise<void>>();\n const launcherRegistrations = new Map<string, PluginLauncherRegistration>();\n const dataHandlers = new Map<string, (params: Record<string, unknown>) => Promise<unknown>>();\n const actionHandlers = new Map<string, (params: Record<string, unknown>) => Promise<unknown>>();\n const toolHandlers = new Map<string, {\n declaration: Pick<import(\"@paperclipai/shared\").PluginToolDeclaration, \"displayName\" | \"description\" | \"parametersSchema\">;\n fn: (params: unknown, runCtx: ToolRunContext) => Promise<ToolResult>;\n }>();\n\n // Agent session event callbacks (populated by sendMessage, cleared by close)\n const sessionEventCallbacks = new Map<string, (event: AgentSessionEvent) => void>();\n\n // Pending outbound (worker\u2192host) requests\n const pendingRequests = new Map<string | number, {\n resolve: (response: JsonRpcResponse) => void;\n timer: ReturnType<typeof setTimeout>;\n }>();\n let nextOutboundId = 1;\n const MAX_OUTBOUND_ID = Number.MAX_SAFE_INTEGER - 1;\n\n // -----------------------------------------------------------------------\n // Outbound messaging (worker \u2192 host)\n // -----------------------------------------------------------------------\n\n function sendMessage(message: unknown): void {\n if (!running) return;\n const serialized = serializeMessage(message as any);\n stdoutStream.write(serialized);\n }\n\n /**\n * Send a typed JSON-RPC request to the host and await the response.\n */\n function callHost<M extends WorkerToHostMethodName>(\n method: M,\n params: WorkerToHostMethods[M][0],\n timeoutMs?: number,\n ): Promise<WorkerToHostMethods[M][1]> {\n return new Promise<WorkerToHostMethods[M][1]>((resolve, reject) => {\n if (!running) {\n reject(new Error(`Cannot call \"${method}\" \u2014 worker RPC host is not running`));\n return;\n }\n\n if (nextOutboundId >= MAX_OUTBOUND_ID) {\n nextOutboundId = 1;\n }\n const id = nextOutboundId++;\n const timeout = timeoutMs ?? rpcTimeoutMs;\n let settled = false;\n\n const settle = <T>(fn: (value: T) => void, value: T): void => {\n if (settled) return;\n settled = true;\n clearTimeout(timer);\n pendingRequests.delete(id);\n fn(value);\n };\n\n const timer = setTimeout(() => {\n settle(\n reject,\n new JsonRpcCallError({\n code: PLUGIN_RPC_ERROR_CODES.TIMEOUT,\n message: `Worker\u2192host call \"${method}\" timed out after ${timeout}ms`,\n }),\n );\n }, timeout);\n\n pendingRequests.set(id, {\n resolve: (response: JsonRpcResponse) => {\n if (isJsonRpcSuccessResponse(response)) {\n settle(resolve, response.result as WorkerToHostMethods[M][1]);\n } else if (isJsonRpcErrorResponse(response)) {\n settle(reject, new JsonRpcCallError(response.error));\n } else {\n settle(reject, new Error(`Unexpected response format for \"${method}\"`));\n }\n },\n timer,\n });\n\n try {\n const request = createRequest(method, params, id);\n sendMessage(request);\n } catch (err) {\n settle(reject, err instanceof Error ? err : new Error(String(err)));\n }\n });\n }\n\n /**\n * Send a JSON-RPC notification to the host (fire-and-forget).\n */\n function notifyHost(method: string, params: unknown): void {\n try {\n sendMessage(createNotification(method, params));\n } catch {\n // Swallow \u2014 the host may have closed stdin\n }\n }\n\n // -----------------------------------------------------------------------\n // Build the PluginContext (SDK surface for plugin code)\n // -----------------------------------------------------------------------\n\n function buildContext(): PluginContext {\n return {\n get manifest() {\n if (!manifest) throw new Error(\"Plugin context accessed before initialization\");\n return manifest;\n },\n\n config: {\n async get() {\n return callHost(\"config.get\", {} as Record<string, never>);\n },\n },\n\n localFolders: {\n declarations() {\n if (!manifest) throw new Error(\"Plugin context accessed before initialization\");\n return manifest.localFolders ?? [];\n },\n\n async configure(input) {\n return callHost(\"localFolders.configure\", {\n companyId: input.companyId,\n folderKey: input.folderKey,\n path: input.path,\n access: input.access,\n requiredDirectories: input.requiredDirectories,\n requiredFiles: input.requiredFiles,\n });\n },\n\n async status(companyId: string, folderKey: string) {\n return callHost(\"localFolders.status\", { companyId, folderKey });\n },\n\n async list(companyId: string, folderKey: string, options = {}) {\n return callHost(\"localFolders.list\", {\n companyId,\n folderKey,\n relativePath: options.relativePath,\n recursive: options.recursive,\n maxEntries: options.maxEntries,\n });\n },\n\n async readText(companyId: string, folderKey: string, relativePath: string) {\n return callHost(\"localFolders.readText\", { companyId, folderKey, relativePath });\n },\n\n async writeTextAtomic(companyId: string, folderKey: string, relativePath: string, contents: string) {\n return callHost(\"localFolders.writeTextAtomic\", {\n companyId,\n folderKey,\n relativePath,\n contents,\n });\n },\n\n async deleteFile(companyId: string, folderKey: string, relativePath: string) {\n return callHost(\"localFolders.deleteFile\", { companyId, folderKey, relativePath });\n },\n },\n\n events: {\n on(\n name: string,\n filterOrFn: EventFilter | ((event: PluginEvent) => Promise<void>),\n maybeFn?: (event: PluginEvent) => Promise<void>,\n ): () => void {\n let registration: EventRegistration;\n if (typeof filterOrFn === \"function\") {\n registration = { name, fn: filterOrFn };\n } else {\n if (!maybeFn) throw new Error(\"Event handler function is required\");\n registration = { name, filter: filterOrFn, fn: maybeFn };\n }\n eventHandlers.push(registration);\n // Register subscription on the host so events are forwarded to this worker\n void callHost(\"events.subscribe\", { eventPattern: name, filter: registration.filter ?? null }).catch((err) => {\n notifyHost(\"log\", {\n level: \"warn\",\n message: `Failed to subscribe to event \"${name}\" on host: ${err instanceof Error ? err.message : String(err)}`,\n });\n });\n return () => {\n const idx = eventHandlers.indexOf(registration);\n if (idx !== -1) eventHandlers.splice(idx, 1);\n };\n },\n\n async emit(name: string, companyId: string, payload: unknown): Promise<void> {\n await callHost(\"events.emit\", { name, companyId, payload });\n },\n },\n\n jobs: {\n register(key: string, fn: (job: PluginJobContext) => Promise<void>): void {\n jobHandlers.set(key, fn);\n },\n },\n\n launchers: {\n register(launcher: PluginLauncherRegistration): void {\n launcherRegistrations.set(launcher.id, launcher);\n },\n },\n\n db: {\n get namespace() {\n return databaseNamespace ?? \"\";\n },\n async query<T = Record<string, unknown>>(sql: string, params?: unknown[]): Promise<T[]> {\n return callHost(\"db.query\", { sql, params }) as Promise<T[]>;\n },\n async execute(sql: string, params?: unknown[]) {\n return callHost(\"db.execute\", { sql, params });\n },\n },\n\n http: {\n async fetch(url: string, init?: RequestInit): Promise<Response> {\n const serializedInit: Record<string, unknown> = {};\n if (init) {\n if (init.method) serializedInit.method = init.method;\n if (init.headers) {\n // Normalize headers to a plain object\n if (init.headers instanceof Headers) {\n const obj: Record<string, string> = {};\n init.headers.forEach((v, k) => { obj[k] = v; });\n serializedInit.headers = obj;\n } else if (Array.isArray(init.headers)) {\n const obj: Record<string, string> = {};\n for (const [k, v] of init.headers) obj[k] = v;\n serializedInit.headers = obj;\n } else {\n serializedInit.headers = init.headers;\n }\n }\n if (init.body !== undefined && init.body !== null) {\n serializedInit.body = typeof init.body === \"string\"\n ? init.body\n : String(init.body);\n }\n }\n\n const result = await callHost(\"http.fetch\", {\n url,\n init: Object.keys(serializedInit).length > 0 ? serializedInit : undefined,\n });\n\n // Reconstruct a Response-like object from the serialized result\n return new Response(result.body, {\n status: result.status,\n statusText: result.statusText,\n headers: result.headers,\n });\n },\n },\n\n secrets: {\n async resolve(secretRef: string): Promise<string> {\n return callHost(\"secrets.resolve\", { secretRef });\n },\n },\n\n activity: {\n async log(entry): Promise<void> {\n await callHost(\"activity.log\", {\n companyId: entry.companyId,\n message: entry.message,\n entityType: entry.entityType,\n entityId: entry.entityId,\n metadata: entry.metadata,\n });\n },\n },\n\n state: {\n async get(input: ScopeKey): Promise<unknown> {\n return callHost(\"state.get\", {\n scopeKind: input.scopeKind,\n scopeId: input.scopeId,\n namespace: input.namespace,\n stateKey: input.stateKey,\n });\n },\n\n async set(input: ScopeKey, value: unknown): Promise<void> {\n await callHost(\"state.set\", {\n scopeKind: input.scopeKind,\n scopeId: input.scopeId,\n namespace: input.namespace,\n stateKey: input.stateKey,\n value,\n });\n },\n\n async delete(input: ScopeKey): Promise<void> {\n await callHost(\"state.delete\", {\n scopeKind: input.scopeKind,\n scopeId: input.scopeId,\n namespace: input.namespace,\n stateKey: input.stateKey,\n });\n },\n },\n\n entities: {\n async upsert(input) {\n return callHost(\"entities.upsert\", {\n entityType: input.entityType,\n scopeKind: input.scopeKind,\n scopeId: input.scopeId,\n externalId: input.externalId,\n title: input.title,\n status: input.status,\n data: input.data,\n });\n },\n\n async list(query) {\n return callHost(\"entities.list\", {\n entityType: query.entityType,\n scopeKind: query.scopeKind,\n scopeId: query.scopeId,\n externalId: query.externalId,\n limit: query.limit,\n offset: query.offset,\n });\n },\n },\n\n projects: {\n async list(input) {\n return callHost(\"projects.list\", {\n companyId: input.companyId,\n limit: input.limit,\n offset: input.offset,\n });\n },\n\n async get(projectId: string, companyId: string) {\n return callHost(\"projects.get\", { projectId, companyId });\n },\n\n async listWorkspaces(projectId: string, companyId: string) {\n return callHost(\"projects.listWorkspaces\", { projectId, companyId });\n },\n\n async getPrimaryWorkspace(projectId: string, companyId: string) {\n return callHost(\"projects.getPrimaryWorkspace\", { projectId, companyId });\n },\n\n async getWorkspaceForIssue(issueId: string, companyId: string) {\n return callHost(\"projects.getWorkspaceForIssue\", { issueId, companyId });\n },\n\n managed: {\n async get(projectKey: string, companyId: string) {\n return callHost(\"projects.managed.get\", { projectKey, companyId });\n },\n async reconcile(projectKey: string, companyId: string) {\n return callHost(\"projects.managed.reconcile\", { projectKey, companyId });\n },\n async reset(projectKey: string, companyId: string) {\n return callHost(\"projects.managed.reset\", { projectKey, companyId });\n },\n },\n },\n\n routines: {\n managed: {\n async get(routineKey: string, companyId: string) {\n return callHost(\"routines.managed.get\", { routineKey, companyId });\n },\n async reconcile(\n routineKey: string,\n companyId: string,\n overrides?: { assigneeAgentId?: string | null; projectId?: string | null },\n ) {\n return callHost(\"routines.managed.reconcile\", { routineKey, companyId, ...overrides });\n },\n async reset(\n routineKey: string,\n companyId: string,\n overrides?: { assigneeAgentId?: string | null; projectId?: string | null },\n ) {\n return callHost(\"routines.managed.reset\", { routineKey, companyId, ...overrides });\n },\n async update(routineKey: string, companyId: string, patch: { status?: string }) {\n return callHost(\"routines.managed.update\", { routineKey, companyId, ...patch });\n },\n async run(\n routineKey: string,\n companyId: string,\n overrides?: { assigneeAgentId?: string | null; projectId?: string | null },\n ) {\n return callHost(\"routines.managed.run\", { routineKey, companyId, ...overrides });\n },\n },\n },\n\n skills: {\n managed: {\n async get(skillKey: string, companyId: string) {\n return callHost(\"skills.managed.get\", { skillKey, companyId });\n },\n async reconcile(skillKey: string, companyId: string) {\n return callHost(\"skills.managed.reconcile\", { skillKey, companyId });\n },\n async reset(skillKey: string, companyId: string) {\n return callHost(\"skills.managed.reset\", { skillKey, companyId });\n },\n },\n },\n\n companies: {\n async list(input) {\n return callHost(\"companies.list\", {\n limit: input?.limit,\n offset: input?.offset,\n });\n },\n\n async get(companyId: string) {\n return callHost(\"companies.get\", { companyId });\n },\n },\n\n issues: {\n async list(input) {\n return callHost(\"issues.list\", {\n companyId: input.companyId,\n projectId: input.projectId,\n assigneeAgentId: input.assigneeAgentId,\n originKind: input.originKind,\n originKindPrefix: input.originKindPrefix,\n originId: input.originId,\n status: input.status,\n includePluginOperations: input.includePluginOperations,\n limit: input.limit,\n offset: input.offset,\n });\n },\n\n async get(issueId: string, companyId: string) {\n return callHost(\"issues.get\", { issueId, companyId });\n },\n\n async create(input) {\n return callHost(\"issues.create\", {\n companyId: input.companyId,\n projectId: input.projectId,\n goalId: input.goalId,\n parentId: input.parentId,\n inheritExecutionWorkspaceFromIssueId: input.inheritExecutionWorkspaceFromIssueId,\n title: input.title,\n description: input.description,\n status: input.status,\n priority: input.priority,\n assigneeAgentId: input.assigneeAgentId,\n assigneeUserId: input.assigneeUserId,\n requestDepth: input.requestDepth,\n billingCode: input.billingCode,\n assigneeAdapterOverrides: input.assigneeAdapterOverrides,\n surfaceVisibility: input.surfaceVisibility,\n originKind: input.originKind,\n originId: input.originId,\n originRunId: input.originRunId,\n blockedByIssueIds: input.blockedByIssueIds,\n labelIds: input.labelIds,\n executionWorkspaceId: input.executionWorkspaceId,\n executionWorkspacePreference: input.executionWorkspacePreference,\n executionWorkspaceSettings: input.executionWorkspaceSettings,\n actorAgentId: input.actor?.actorAgentId,\n actorUserId: input.actor?.actorUserId,\n actorRunId: input.actor?.actorRunId,\n });\n },\n\n async update(issueId: string, patch, companyId: string, actor) {\n return callHost(\"issues.update\", {\n issueId,\n patch: {\n ...(patch as Record<string, unknown>),\n actorAgentId: actor?.actorAgentId,\n actorUserId: actor?.actorUserId,\n actorRunId: actor?.actorRunId,\n },\n companyId,\n });\n },\n\n async assertCheckoutOwner(input) {\n return callHost(\"issues.assertCheckoutOwner\", input);\n },\n\n async getSubtree(issueId: string, companyId: string, options) {\n return callHost(\"issues.getSubtree\", {\n issueId,\n companyId,\n includeRoot: options?.includeRoot,\n includeRelations: options?.includeRelations,\n includeDocuments: options?.includeDocuments,\n includeActiveRuns: options?.includeActiveRuns,\n includeAssignees: options?.includeAssignees,\n });\n },\n\n async requestWakeup(issueId: string, companyId: string, options) {\n return callHost(\"issues.requestWakeup\", {\n issueId,\n companyId,\n reason: options?.reason,\n contextSource: options?.contextSource,\n idempotencyKey: options?.idempotencyKey,\n actorAgentId: options?.actorAgentId,\n actorUserId: options?.actorUserId,\n actorRunId: options?.actorRunId,\n });\n },\n\n async requestWakeups(issueIds: string[], companyId: string, options) {\n return callHost(\"issues.requestWakeups\", {\n issueIds,\n companyId,\n reason: options?.reason,\n contextSource: options?.contextSource,\n idempotencyKeyPrefix: options?.idempotencyKeyPrefix,\n actorAgentId: options?.actorAgentId,\n actorUserId: options?.actorUserId,\n actorRunId: options?.actorRunId,\n });\n },\n\n async listComments(issueId: string, companyId: string) {\n return callHost(\"issues.listComments\", { issueId, companyId });\n },\n\n async createComment(issueId: string, body: string, companyId: string, options?: { authorAgentId?: string }) {\n return callHost(\"issues.createComment\", { issueId, body, companyId, authorAgentId: options?.authorAgentId });\n },\n\n async createAttachment(input) {\n return callHost(\"issues.attachments.create\", {\n issueId: input.issueId,\n companyId: input.companyId,\n filename: input.filename,\n contentType: input.contentType,\n bodyBase64: input.bodyBase64,\n issueCommentId: input.issueCommentId,\n actorAgentId: input.actor?.actorAgentId,\n actorUserId: input.actor?.actorUserId,\n actorRunId: input.actor?.actorRunId,\n });\n },\n\n async createInteraction(issueId: string, interaction, companyId: string, options?: { authorAgentId?: string }) {\n return callHost(\"issues.createInteraction\", {\n issueId,\n companyId,\n interaction,\n authorAgentId: options?.authorAgentId,\n });\n },\n\n async suggestTasks(\n issueId: string,\n interaction,\n companyId: string,\n options?: { authorAgentId?: string },\n ): Promise<SuggestTasksInteraction> {\n return callHost(\"issues.createInteraction\", {\n issueId,\n companyId,\n interaction: {\n ...interaction,\n kind: \"suggest_tasks\",\n },\n authorAgentId: options?.authorAgentId,\n }) as Promise<SuggestTasksInteraction>;\n },\n\n async askUserQuestions(\n issueId: string,\n interaction,\n companyId: string,\n options?: { authorAgentId?: string },\n ): Promise<AskUserQuestionsInteraction> {\n return callHost(\"issues.createInteraction\", {\n issueId,\n companyId,\n interaction: {\n ...interaction,\n kind: \"ask_user_questions\",\n },\n authorAgentId: options?.authorAgentId,\n }) as Promise<AskUserQuestionsInteraction>;\n },\n\n async requestConfirmation(\n issueId: string,\n interaction,\n companyId: string,\n options?: { authorAgentId?: string },\n ): Promise<RequestConfirmationInteraction> {\n return callHost(\"issues.createInteraction\", {\n issueId,\n companyId,\n interaction: {\n ...interaction,\n kind: \"request_confirmation\",\n },\n authorAgentId: options?.authorAgentId,\n }) as Promise<RequestConfirmationInteraction>;\n },\n\n documents: {\n async list(issueId: string, companyId: string) {\n return callHost(\"issues.documents.list\", { issueId, companyId });\n },\n\n async get(issueId: string, key: string, companyId: string) {\n return callHost(\"issues.documents.get\", { issueId, key, companyId });\n },\n\n async upsert(input) {\n return callHost(\"issues.documents.upsert\", {\n issueId: input.issueId,\n key: input.key,\n body: input.body,\n companyId: input.companyId,\n title: input.title,\n format: input.format,\n changeSummary: input.changeSummary,\n });\n },\n\n async delete(issueId: string, key: string, companyId: string) {\n return callHost(\"issues.documents.delete\", { issueId, key, companyId });\n },\n },\n\n relations: {\n async get(issueId: string, companyId: string) {\n return callHost(\"issues.relations.get\", { issueId, companyId });\n },\n\n async setBlockedBy(issueId: string, blockedByIssueIds: string[], companyId: string, actor) {\n return callHost(\"issues.relations.setBlockedBy\", {\n issueId,\n companyId,\n blockedByIssueIds,\n actorAgentId: actor?.actorAgentId,\n actorUserId: actor?.actorUserId,\n actorRunId: actor?.actorRunId,\n });\n },\n\n async addBlockers(issueId: string, blockerIssueIds: string[], companyId: string, actor) {\n return callHost(\"issues.relations.addBlockers\", {\n issueId,\n companyId,\n blockerIssueIds,\n actorAgentId: actor?.actorAgentId,\n actorUserId: actor?.actorUserId,\n actorRunId: actor?.actorRunId,\n });\n },\n\n async removeBlockers(issueId: string, blockerIssueIds: string[], companyId: string, actor) {\n return callHost(\"issues.relations.removeBlockers\", {\n issueId,\n companyId,\n blockerIssueIds,\n actorAgentId: actor?.actorAgentId,\n actorUserId: actor?.actorUserId,\n actorRunId: actor?.actorRunId,\n });\n },\n },\n\n summaries: {\n async getOrchestration(input) {\n return callHost(\"issues.summaries.getOrchestration\", input);\n },\n },\n },\n\n agents: {\n async list(input) {\n return callHost(\"agents.list\", {\n companyId: input.companyId,\n status: input.status,\n limit: input.limit,\n offset: input.offset,\n });\n },\n\n async get(agentId: string, companyId: string) {\n return callHost(\"agents.get\", { agentId, companyId });\n },\n\n async pause(agentId: string, companyId: string) {\n return callHost(\"agents.pause\", { agentId, companyId });\n },\n\n async resume(agentId: string, companyId: string) {\n return callHost(\"agents.resume\", { agentId, companyId });\n },\n\n async invoke(agentId: string, companyId: string, opts: { prompt: string; reason?: string }) {\n return callHost(\"agents.invoke\", { agentId, companyId, prompt: opts.prompt, reason: opts.reason });\n },\n\n managed: {\n async get(agentKey: string, companyId: string) {\n return callHost(\"agents.managed.get\", { agentKey, companyId });\n },\n\n async reconcile(agentKey: string, companyId: string) {\n return callHost(\"agents.managed.reconcile\", { agentKey, companyId });\n },\n\n async reset(agentKey: string, companyId: string) {\n return callHost(\"agents.managed.reset\", { agentKey, companyId });\n },\n },\n\n sessions: {\n async create(agentId: string, companyId: string, opts?: { taskKey?: string; reason?: string }) {\n return callHost(\"agents.sessions.create\", {\n agentId,\n companyId,\n taskKey: opts?.taskKey,\n reason: opts?.reason,\n });\n },\n\n async list(agentId: string, companyId: string) {\n return callHost(\"agents.sessions.list\", { agentId, companyId });\n },\n\n async sendMessage(sessionId: string, companyId: string, opts: {\n prompt: string;\n reason?: string;\n issueId?: string;\n taskId?: string;\n onEvent?: (event: AgentSessionEvent) => void;\n }) {\n if (opts.onEvent) {\n sessionEventCallbacks.set(sessionId, opts.onEvent);\n }\n try {\n return await callHost(\"agents.sessions.sendMessage\", {\n sessionId,\n companyId,\n prompt: opts.prompt,\n reason: opts.reason,\n issueId: opts.issueId,\n taskId: opts.taskId,\n });\n } catch (err) {\n sessionEventCallbacks.delete(sessionId);\n throw err;\n }\n },\n\n async close(sessionId: string, companyId: string) {\n sessionEventCallbacks.delete(sessionId);\n await callHost(\"agents.sessions.close\", { sessionId, companyId });\n },\n },\n },\n\n goals: {\n async list(input) {\n return callHost(\"goals.list\", {\n companyId: input.companyId,\n level: input.level,\n status: input.status,\n limit: input.limit,\n offset: input.offset,\n });\n },\n\n async get(goalId: string, companyId: string) {\n return callHost(\"goals.get\", { goalId, companyId });\n },\n\n async create(input) {\n return callHost(\"goals.create\", {\n companyId: input.companyId,\n title: input.title,\n description: input.description,\n level: input.level,\n status: input.status,\n parentId: input.parentId,\n ownerAgentId: input.ownerAgentId,\n });\n },\n\n async update(goalId: string, patch, companyId: string) {\n return callHost(\"goals.update\", {\n goalId,\n patch: patch as Record<string, unknown>,\n companyId,\n });\n },\n },\n\n data: {\n register(key: string, handler: (params: Record<string, unknown>) => Promise<unknown>): void {\n dataHandlers.set(key, handler);\n },\n },\n\n actions: {\n register(key: string, handler: (params: Record<string, unknown>) => Promise<unknown>): void {\n actionHandlers.set(key, handler);\n },\n },\n\n streams: (() => {\n // Track channel \u2192 companyId so emit/close don't require companyId\n const channelCompanyMap = new Map<string, string>();\n return {\n open(channel: string, companyId: string): void {\n channelCompanyMap.set(channel, companyId);\n notifyHost(\"streams.open\", { channel, companyId });\n },\n emit(channel: string, event: unknown): void {\n const companyId = channelCompanyMap.get(channel) ?? \"\";\n notifyHost(\"streams.emit\", { channel, companyId, event });\n },\n close(channel: string): void {\n const companyId = channelCompanyMap.get(channel) ?? \"\";\n channelCompanyMap.delete(channel);\n notifyHost(\"streams.close\", { channel, companyId });\n },\n };\n })(),\n\n tools: {\n register(\n name: string,\n declaration: Pick<import(\"@paperclipai/shared\").PluginToolDeclaration, \"displayName\" | \"description\" | \"parametersSchema\">,\n fn: (params: unknown, runCtx: ToolRunContext) => Promise<ToolResult>,\n ): void {\n toolHandlers.set(name, { declaration, fn });\n },\n },\n\n metrics: {\n async write(name: string, value: number, tags?: Record<string, string>): Promise<void> {\n await callHost(\"metrics.write\", { name, value, tags });\n },\n },\n\n telemetry: {\n async track(\n eventName: string,\n dimensions?: Record<string, string | number | boolean>,\n ): Promise<void> {\n await callHost(\"telemetry.track\", { eventName, dimensions });\n },\n },\n\n logger: {\n info(message: string, meta?: Record<string, unknown>): void {\n notifyHost(\"log\", { level: \"info\", message, meta });\n },\n warn(message: string, meta?: Record<string, unknown>): void {\n notifyHost(\"log\", { level: \"warn\", message, meta });\n },\n error(message: string, meta?: Record<string, unknown>): void {\n notifyHost(\"log\", { level: \"error\", message, meta });\n },\n debug(message: string, meta?: Record<string, unknown>): void {\n notifyHost(\"log\", { level: \"debug\", message, meta });\n },\n },\n };\n }\n\n const ctx = buildContext();\n\n // -----------------------------------------------------------------------\n // Inbound message handling (host \u2192 worker)\n // -----------------------------------------------------------------------\n\n /**\n * Handle an incoming JSON-RPC request from the host.\n *\n * Dispatches to the correct handler based on the method name.\n */\n async function handleHostRequest(request: JsonRpcRequest): Promise<void> {\n const { id, method, params } = request;\n\n try {\n const result = await dispatchMethod(method, params);\n sendMessage(createSuccessResponse(id, result ?? null));\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : String(err);\n // Propagate specific error codes from handler errors (e.g.\n // METHOD_NOT_FOUND, METHOD_NOT_IMPLEMENTED) \u2014 fall back to\n // WORKER_ERROR for untyped exceptions.\n const errorCode =\n typeof (err as any)?.code === \"number\"\n ? (err as any).code\n : PLUGIN_RPC_ERROR_CODES.WORKER_ERROR;\n\n sendMessage(createErrorResponse(id, errorCode, errorMessage));\n }\n }\n\n /**\n * Dispatch a host\u2192worker method call to the appropriate handler.\n */\n async function dispatchMethod(method: string, params: unknown): Promise<unknown> {\n switch (method) {\n case \"initialize\":\n return handleInitialize(params as InitializeParams);\n\n case \"health\":\n return handleHealth();\n\n case \"shutdown\":\n return handleShutdown();\n\n case \"validateConfig\":\n return handleValidateConfig(params as ValidateConfigParams);\n\n case \"configChanged\":\n return handleConfigChanged(params as ConfigChangedParams);\n\n case \"onEvent\":\n return handleOnEvent(params as OnEventParams);\n\n case \"runJob\":\n return handleRunJob(params as RunJobParams);\n\n case \"handleWebhook\":\n return handleWebhook(params as PluginWebhookInput);\n\n case \"handleApiRequest\":\n return handleApiRequest(params as PluginApiRequestInput);\n\n case \"getData\":\n return handleGetData(params as GetDataParams);\n\n case \"performAction\":\n return handlePerformAction(params as PerformActionParams);\n\n case \"executeTool\":\n return handleExecuteTool(params as ExecuteToolParams);\n\n case \"environmentValidateConfig\":\n return handleEnvironmentValidateConfig(params as PluginEnvironmentValidateConfigParams);\n\n case \"environmentProbe\":\n return handleEnvironmentProbe(params as PluginEnvironmentProbeParams);\n\n case \"environmentAcquireLease\":\n return handleEnvironmentAcquireLease(params as PluginEnvironmentAcquireLeaseParams);\n\n case \"environmentResumeLease\":\n return handleEnvironmentResumeLease(params as PluginEnvironmentResumeLeaseParams);\n\n case \"environmentReleaseLease\":\n return handleEnvironmentReleaseLease(params as PluginEnvironmentReleaseLeaseParams);\n\n case \"environmentDestroyLease\":\n return handleEnvironmentDestroyLease(params as PluginEnvironmentDestroyLeaseParams);\n\n case \"environmentRealizeWorkspace\":\n return handleEnvironmentRealizeWorkspace(params as PluginEnvironmentRealizeWorkspaceParams);\n\n case \"environmentExecute\":\n return handleEnvironmentExecute(params as PluginEnvironmentExecuteParams);\n\n default:\n throw Object.assign(\n new Error(`Unknown method: ${method}`),\n { code: JSONRPC_ERROR_CODES.METHOD_NOT_FOUND },\n );\n }\n }\n\n // -----------------------------------------------------------------------\n // Host\u2192Worker method handlers\n // -----------------------------------------------------------------------\n\n async function handleInitialize(params: InitializeParams): Promise<InitializeResult> {\n if (initialized) {\n throw new Error(\"Worker already initialized\");\n }\n\n manifest = params.manifest;\n currentConfig = params.config;\n databaseNamespace = params.databaseNamespace ?? null;\n\n // Call the plugin's setup function\n await plugin.definition.setup(ctx);\n\n initialized = true;\n\n // Report which optional methods this plugin implements\n const supportedMethods: string[] = [];\n if (plugin.definition.onValidateConfig) supportedMethods.push(\"validateConfig\");\n if (plugin.definition.onConfigChanged) supportedMethods.push(\"configChanged\");\n if (plugin.definition.onHealth) supportedMethods.push(\"health\");\n if (plugin.definition.onShutdown) supportedMethods.push(\"shutdown\");\n if (plugin.definition.onApiRequest) supportedMethods.push(\"handleApiRequest\");\n if (plugin.definition.onEnvironmentValidateConfig) supportedMethods.push(\"environmentValidateConfig\");\n if (plugin.definition.onEnvironmentProbe) supportedMethods.push(\"environmentProbe\");\n if (plugin.definition.onEnvironmentAcquireLease) supportedMethods.push(\"environmentAcquireLease\");\n if (plugin.definition.onEnvironmentResumeLease) supportedMethods.push(\"environmentResumeLease\");\n if (plugin.definition.onEnvironmentReleaseLease) supportedMethods.push(\"environmentReleaseLease\");\n if (plugin.definition.onEnvironmentDestroyLease) supportedMethods.push(\"environmentDestroyLease\");\n if (plugin.definition.onEnvironmentRealizeWorkspace) supportedMethods.push(\"environmentRealizeWorkspace\");\n if (plugin.definition.onEnvironmentExecute) supportedMethods.push(\"environmentExecute\");\n\n return { ok: true, supportedMethods };\n }\n\n async function handleHealth(): Promise<PluginHealthDiagnostics> {\n if (plugin.definition.onHealth) {\n return plugin.definition.onHealth();\n }\n // Default: report OK if the worker is alive\n return { status: \"ok\" };\n }\n\n async function handleShutdown(): Promise<void> {\n if (plugin.definition.onShutdown) {\n await plugin.definition.onShutdown();\n }\n\n // Schedule cleanup after we send the response.\n // Use setImmediate to let the response flush before exiting.\n // Only call process.exit() when running with real process streams.\n // When custom streams are provided (tests), just clean up.\n setImmediate(() => {\n cleanup();\n if (!options.stdin && !options.stdout) {\n process.exit(0);\n }\n });\n }\n\n async function handleValidateConfig(\n params: ValidateConfigParams,\n ): Promise<PluginConfigValidationResult> {\n if (!plugin.definition.onValidateConfig) {\n throw Object.assign(\n new Error(\"validateConfig is not implemented by this plugin\"),\n { code: PLUGIN_RPC_ERROR_CODES.METHOD_NOT_IMPLEMENTED },\n );\n }\n return plugin.definition.onValidateConfig(params.config);\n }\n\n async function handleConfigChanged(params: ConfigChangedParams): Promise<void> {\n currentConfig = params.config;\n\n if (plugin.definition.onConfigChanged) {\n await plugin.definition.onConfigChanged(params.config);\n }\n }\n\n async function handleOnEvent(params: OnEventParams): Promise<void> {\n const event = params.event;\n\n for (const registration of eventHandlers) {\n // Check event type match\n const exactMatch = registration.name === event.eventType;\n const wildcardPluginAll =\n registration.name === \"plugin.*\" &&\n event.eventType.startsWith(\"plugin.\");\n const wildcardPluginOne =\n registration.name.endsWith(\".*\") &&\n event.eventType.startsWith(registration.name.slice(0, -1));\n\n if (!exactMatch && !wildcardPluginAll && !wildcardPluginOne) continue;\n\n // Check filter\n if (registration.filter && !allowsEvent(registration.filter, event)) continue;\n\n try {\n await registration.fn(event);\n } catch (err) {\n // Log error but continue processing other handlers so one failing\n // handler doesn't prevent the rest from running.\n notifyHost(\"log\", {\n level: \"error\",\n message: `Event handler for \"${registration.name}\" failed: ${\n err instanceof Error ? err.message : String(err)\n }`,\n meta: { eventType: event.eventType, stack: err instanceof Error ? err.stack : undefined },\n });\n }\n }\n }\n\n async function handleRunJob(params: RunJobParams): Promise<void> {\n const handler = jobHandlers.get(params.job.jobKey);\n if (!handler) {\n throw new Error(`No handler registered for job \"${params.job.jobKey}\"`);\n }\n await handler(params.job);\n }\n\n async function handleWebhook(params: PluginWebhookInput): Promise<unknown> {\n if (!plugin.definition.onWebhook) {\n throw Object.assign(\n new Error(\"handleWebhook is not implemented by this plugin\"),\n { code: PLUGIN_RPC_ERROR_CODES.METHOD_NOT_IMPLEMENTED },\n );\n }\n return await plugin.definition.onWebhook(params);\n }\n\n async function handleApiRequest(params: PluginApiRequestInput): Promise<unknown> {\n if (!plugin.definition.onApiRequest) {\n throw Object.assign(\n new Error(\"handleApiRequest is not implemented by this plugin\"),\n { code: PLUGIN_RPC_ERROR_CODES.METHOD_NOT_IMPLEMENTED },\n );\n }\n return plugin.definition.onApiRequest(params);\n }\n\n async function handleGetData(params: GetDataParams): Promise<unknown> {\n const handler = dataHandlers.get(params.key);\n if (!handler) {\n throw new Error(`No data handler registered for key \"${params.key}\"`);\n }\n return handler(\n params.renderEnvironment === undefined\n ? params.params\n : { ...params.params, renderEnvironment: params.renderEnvironment },\n );\n }\n\n async function handlePerformAction(params: PerformActionParams): Promise<unknown> {\n const handler = actionHandlers.get(params.key);\n if (!handler) {\n throw new Error(`No action handler registered for key \"${params.key}\"`);\n }\n return handler(\n params.renderEnvironment === undefined\n ? params.params\n : { ...params.params, renderEnvironment: params.renderEnvironment },\n );\n }\n\n async function handleExecuteTool(params: ExecuteToolParams): Promise<ToolResult> {\n const entry = toolHandlers.get(params.toolName);\n if (!entry) {\n throw new Error(`No tool handler registered for \"${params.toolName}\"`);\n }\n return entry.fn(params.parameters, params.runContext);\n }\n\n function methodNotImplemented(method: string): Error & { code: number } {\n return Object.assign(\n new Error(`${method} is not implemented by this plugin`),\n { code: PLUGIN_RPC_ERROR_CODES.METHOD_NOT_IMPLEMENTED },\n );\n }\n\n async function handleEnvironmentValidateConfig(\n params: PluginEnvironmentValidateConfigParams,\n ) {\n if (!plugin.definition.onEnvironmentValidateConfig) {\n throw methodNotImplemented(\"environmentValidateConfig\");\n }\n return plugin.definition.onEnvironmentValidateConfig(params);\n }\n\n async function handleEnvironmentProbe(params: PluginEnvironmentProbeParams) {\n if (!plugin.definition.onEnvironmentProbe) {\n throw methodNotImplemented(\"environmentProbe\");\n }\n return plugin.definition.onEnvironmentProbe(params);\n }\n\n async function handleEnvironmentAcquireLease(params: PluginEnvironmentAcquireLeaseParams) {\n if (!plugin.definition.onEnvironmentAcquireLease) {\n throw methodNotImplemented(\"environmentAcquireLease\");\n }\n return plugin.definition.onEnvironmentAcquireLease(params);\n }\n\n async function handleEnvironmentResumeLease(params: PluginEnvironmentResumeLeaseParams) {\n if (!plugin.definition.onEnvironmentResumeLease) {\n throw methodNotImplemented(\"environmentResumeLease\");\n }\n return plugin.definition.onEnvironmentResumeLease(params);\n }\n\n async function handleEnvironmentReleaseLease(params: PluginEnvironmentReleaseLeaseParams) {\n if (!plugin.definition.onEnvironmentReleaseLease) {\n throw methodNotImplemented(\"environmentReleaseLease\");\n }\n return plugin.definition.onEnvironmentReleaseLease(params);\n }\n\n async function handleEnvironmentDestroyLease(params: PluginEnvironmentDestroyLeaseParams) {\n if (!plugin.definition.onEnvironmentDestroyLease) {\n throw methodNotImplemented(\"environmentDestroyLease\");\n }\n return plugin.definition.onEnvironmentDestroyLease(params);\n }\n\n async function handleEnvironmentRealizeWorkspace(params: PluginEnvironmentRealizeWorkspaceParams) {\n if (!plugin.definition.onEnvironmentRealizeWorkspace) {\n throw methodNotImplemented(\"environmentRealizeWorkspace\");\n }\n return plugin.definition.onEnvironmentRealizeWorkspace(params);\n }\n\n async function handleEnvironmentExecute(params: PluginEnvironmentExecuteParams) {\n if (!plugin.definition.onEnvironmentExecute) {\n throw methodNotImplemented(\"environmentExecute\");\n }\n return plugin.definition.onEnvironmentExecute(params);\n }\n\n // -----------------------------------------------------------------------\n // Event filter helper\n // -----------------------------------------------------------------------\n\n function allowsEvent(filter: EventFilter, event: PluginEvent): boolean {\n const payload = event.payload as Record<string, unknown> | undefined;\n\n if (filter.companyId !== undefined) {\n const companyId = event.companyId ?? String(payload?.companyId ?? \"\");\n if (companyId !== filter.companyId) return false;\n }\n\n if (filter.projectId !== undefined) {\n const projectId = event.entityType === \"project\"\n ? event.entityId\n : String(payload?.projectId ?? \"\");\n if (projectId !== filter.projectId) return false;\n }\n\n if (filter.agentId !== undefined) {\n const agentId = event.entityType === \"agent\"\n ? event.entityId\n : String(payload?.agentId ?? \"\");\n if (agentId !== filter.agentId) return false;\n }\n\n return true;\n }\n\n // -----------------------------------------------------------------------\n // Inbound response handling (host \u2192 worker, response to our outbound call)\n // -----------------------------------------------------------------------\n\n function handleHostResponse(response: JsonRpcResponse): void {\n const id = response.id;\n if (id === null || id === undefined) return;\n\n const pending = pendingRequests.get(id);\n if (!pending) return;\n\n clearTimeout(pending.timer);\n pendingRequests.delete(id);\n pending.resolve(response);\n }\n\n // -----------------------------------------------------------------------\n // Incoming line handler\n // -----------------------------------------------------------------------\n\n function handleLine(line: string): void {\n if (!line.trim()) return;\n\n let message: unknown;\n try {\n message = parseMessage(line);\n } catch (err) {\n if (err instanceof JsonRpcParseError) {\n // Send parse error response\n sendMessage(\n createErrorResponse(\n null,\n JSONRPC_ERROR_CODES.PARSE_ERROR,\n `Parse error: ${err.message}`,\n ),\n );\n }\n return;\n }\n\n if (isJsonRpcResponse(message)) {\n // This is a response to one of our outbound worker\u2192host calls\n handleHostResponse(message);\n } else if (isJsonRpcRequest(message)) {\n // This is a host\u2192worker RPC call \u2014 dispatch it\n handleHostRequest(message as JsonRpcRequest).catch((err) => {\n // Unhandled error in the async handler \u2014 send error response\n const errorMessage = err instanceof Error ? err.message : String(err);\n const errorCode = (err as any)?.code ?? PLUGIN_RPC_ERROR_CODES.WORKER_ERROR;\n try {\n sendMessage(\n createErrorResponse(\n (message as JsonRpcRequest).id,\n typeof errorCode === \"number\" ? errorCode : PLUGIN_RPC_ERROR_CODES.WORKER_ERROR,\n errorMessage,\n ),\n );\n } catch {\n // Cannot send response, stdout may be closed\n }\n });\n } else if (isJsonRpcNotification(message)) {\n // Dispatch host\u2192worker push notifications\n const notif = message as { method: string; params?: unknown };\n if (notif.method === \"agents.sessions.event\" && notif.params) {\n const event = notif.params as AgentSessionEvent;\n const cb = sessionEventCallbacks.get(event.sessionId);\n if (cb) cb(event);\n } else if (notif.method === \"onEvent\" && notif.params) {\n // Plugin event bus notifications \u2014 dispatch to registered event handlers\n handleOnEvent(notif.params as OnEventParams).catch((err) => {\n notifyHost(\"log\", {\n level: \"error\",\n message: `Failed to handle event notification: ${err instanceof Error ? err.message : String(err)}`,\n });\n });\n }\n }\n }\n\n // -----------------------------------------------------------------------\n // Cleanup\n // -----------------------------------------------------------------------\n\n function cleanup(): void {\n running = false;\n\n // Close readline\n if (readline) {\n readline.close();\n readline = null;\n }\n\n // Reject all pending outbound calls\n for (const [id, pending] of pendingRequests) {\n clearTimeout(pending.timer);\n pending.resolve(\n createErrorResponse(\n id,\n PLUGIN_RPC_ERROR_CODES.WORKER_UNAVAILABLE,\n \"Worker RPC host is shutting down\",\n ) as JsonRpcResponse,\n );\n }\n pendingRequests.clear();\n sessionEventCallbacks.clear();\n }\n\n // -----------------------------------------------------------------------\n // Bootstrap: wire up stdin readline\n // -----------------------------------------------------------------------\n\n let readline: ReadlineInterface | null = createInterface({\n input: stdinStream as NodeJS.ReadableStream,\n crlfDelay: Infinity,\n });\n\n readline.on(\"line\", handleLine);\n\n // If stdin closes, we should exit gracefully\n readline.on(\"close\", () => {\n if (running) {\n cleanup();\n if (!options.stdin && !options.stdout) {\n process.exit(0);\n }\n }\n });\n\n // Handle uncaught errors in the worker process.\n // Only install these when using the real process streams (not in tests\n // where the caller provides custom streams).\n if (!options.stdin && !options.stdout) {\n process.on(\"uncaughtException\", (err) => {\n notifyHost(\"log\", {\n level: \"error\",\n message: `Uncaught exception: ${err.message}`,\n meta: { stack: err.stack },\n });\n // Give the notification a moment to flush, then exit\n setTimeout(() => process.exit(1), 100);\n });\n\n process.on(\"unhandledRejection\", (reason) => {\n const message = reason instanceof Error ? reason.message : String(reason);\n const stack = reason instanceof Error ? reason.stack : undefined;\n notifyHost(\"log\", {\n level: \"error\",\n message: `Unhandled rejection: ${message}`,\n meta: { stack },\n });\n });\n }\n\n // -----------------------------------------------------------------------\n // Return the handle\n // -----------------------------------------------------------------------\n\n return {\n get running() {\n return running;\n },\n\n stop() {\n cleanup();\n },\n };\n}\n", "/**\n * JSON-RPC 2.0 message types and protocol helpers for the host \u2194 worker IPC\n * channel.\n *\n * The Paperclip plugin runtime uses JSON-RPC 2.0 over stdio to communicate\n * between the host process and each plugin worker process. This module defines:\n *\n * - Core JSON-RPC 2.0 envelope types (request, response, notification, error)\n * - Standard and plugin-specific error codes\n * - Typed method maps for host\u2192worker and worker\u2192host calls\n * - Helper functions for creating well-formed messages\n *\n * @see PLUGIN_SPEC.md \u00A712.1 \u2014 Process Model\n * @see PLUGIN_SPEC.md \u00A713 \u2014 Host-Worker Protocol\n * @see https://www.jsonrpc.org/specification\n */\n\nimport type {\n PaperclipPluginManifestV1,\n PluginLauncherBounds,\n PluginLauncherRenderContextSnapshot,\n PluginLauncherRenderEnvironment,\n PluginStateScopeKind,\n Company,\n Project,\n Issue,\n IssueComment,\n IssueAttachment,\n IssueDocument,\n IssueDocumentSummary,\n IssueAssigneeAdapterOverrides,\n IssueThreadInteraction,\n CreateIssueThreadInteraction,\n PluginManagedAgentResolution,\n PluginManagedProjectResolution,\n PluginManagedRoutineResolution,\n PluginManagedSkillResolution,\n Routine,\n RoutineRun,\n Agent,\n Goal,\n PluginLocalFolderDeclaration,\n} from \"@paperclipai/shared\";\nexport type { PluginLauncherRenderContextSnapshot } from \"@paperclipai/shared\";\n\nimport type {\n PluginEvent,\n PluginIssueCheckoutOwnership,\n PluginIssueOrchestrationSummary,\n PluginIssueRelationSummary,\n PluginIssueSubtree,\n PluginIssueWakeupBatchResult,\n PluginIssueWakeupResult,\n PluginJobContext,\n PluginWorkspace,\n ToolRunContext,\n ToolResult,\n PluginLocalFolderListing,\n PluginLocalFolderStatus,\n} from \"./types.js\";\nimport type {\n PluginHealthDiagnostics,\n PluginApiRequestInput,\n PluginApiResponse,\n PluginConfigValidationResult,\n PluginWebhookInput,\n} from \"./define-plugin.js\";\n\n// ---------------------------------------------------------------------------\n// JSON-RPC 2.0 \u2014 Core Protocol Types\n// ---------------------------------------------------------------------------\n\n/** The JSON-RPC protocol version. Always `\"2.0\"`. */\nexport const JSONRPC_VERSION = \"2.0\" as const;\n\n/**\n * A unique request identifier. JSON-RPC 2.0 allows strings or numbers;\n * we use strings (UUIDs or monotonic counters) for all Paperclip messages.\n */\nexport type JsonRpcId = string | number;\n\n/**\n * A JSON-RPC 2.0 request message.\n *\n * The host sends requests to the worker (or vice versa) and expects a\n * matching response with the same `id`.\n */\nexport interface JsonRpcRequest<\n TMethod extends string = string,\n TParams = unknown,\n> {\n readonly jsonrpc: typeof JSONRPC_VERSION;\n /** Unique request identifier. Must be echoed in the response. */\n readonly id: JsonRpcId;\n /** The RPC method name to invoke. */\n readonly method: TMethod;\n /** Structured parameters for the method call. */\n readonly params: TParams;\n}\n\n/**\n * A JSON-RPC 2.0 success response.\n */\nexport interface JsonRpcSuccessResponse<TResult = unknown> {\n readonly jsonrpc: typeof JSONRPC_VERSION;\n /** Echoed request identifier. */\n readonly id: JsonRpcId;\n /** The method return value. */\n readonly result: TResult;\n readonly error?: never;\n}\n\n/**\n * A JSON-RPC 2.0 error object embedded in an error response.\n */\nexport interface JsonRpcError<TData = unknown> {\n /** Machine-readable error code. */\n readonly code: number;\n /** Human-readable error message. */\n readonly message: string;\n /** Optional structured error data. */\n readonly data?: TData;\n}\n\n/**\n * A JSON-RPC 2.0 error response.\n */\nexport interface JsonRpcErrorResponse<TData = unknown> {\n readonly jsonrpc: typeof JSONRPC_VERSION;\n /** Echoed request identifier. */\n readonly id: JsonRpcId | null;\n readonly result?: never;\n /** The error object. */\n readonly error: JsonRpcError<TData>;\n}\n\n/**\n * A JSON-RPC 2.0 response \u2014 either success or error.\n */\nexport type JsonRpcResponse<TResult = unknown, TData = unknown> =\n | JsonRpcSuccessResponse<TResult>\n | JsonRpcErrorResponse<TData>;\n\n/**\n * A JSON-RPC 2.0 notification (a request with no `id`).\n *\n * Notifications are fire-and-forget \u2014 no response is expected.\n */\nexport interface JsonRpcNotification<\n TMethod extends string = string,\n TParams = unknown,\n> {\n readonly jsonrpc: typeof JSONRPC_VERSION;\n readonly id?: never;\n /** The notification method name. */\n readonly method: TMethod;\n /** Structured parameters for the notification. */\n readonly params: TParams;\n}\n\n/**\n * Any well-formed JSON-RPC 2.0 message (request, response, or notification).\n */\nexport type JsonRpcMessage =\n | JsonRpcRequest\n | JsonRpcResponse\n | JsonRpcNotification;\n\n// ---------------------------------------------------------------------------\n// Error Codes\n// ---------------------------------------------------------------------------\n\n/**\n * Standard JSON-RPC 2.0 error codes.\n *\n * @see https://www.jsonrpc.org/specification#error_object\n */\nexport const JSONRPC_ERROR_CODES = {\n /** Invalid JSON was received by the server. */\n PARSE_ERROR: -32700,\n /** The JSON sent is not a valid Request object. */\n INVALID_REQUEST: -32600,\n /** The method does not exist or is not available. */\n METHOD_NOT_FOUND: -32601,\n /** Invalid method parameter(s). */\n INVALID_PARAMS: -32602,\n /** Internal JSON-RPC error. */\n INTERNAL_ERROR: -32603,\n} as const;\n\nexport type JsonRpcErrorCode =\n (typeof JSONRPC_ERROR_CODES)[keyof typeof JSONRPC_ERROR_CODES];\n\n/**\n * Paperclip plugin-specific error codes.\n *\n * These live in the JSON-RPC \"server error\" reserved range (-32000 to -32099)\n * as specified by JSON-RPC 2.0 for implementation-defined server errors.\n *\n * @see PLUGIN_SPEC.md \u00A719.7 \u2014 Error Propagation Through The Bridge\n */\nexport const PLUGIN_RPC_ERROR_CODES = {\n /** The worker process is not running or not reachable. */\n WORKER_UNAVAILABLE: -32000,\n /** The plugin does not have the required capability for this operation. */\n CAPABILITY_DENIED: -32001,\n /** The worker reported an unhandled error during method execution. */\n WORKER_ERROR: -32002,\n /** The method call timed out waiting for the worker response. */\n TIMEOUT: -32003,\n /** The worker does not implement the requested optional method. */\n METHOD_NOT_IMPLEMENTED: -32004,\n /** A catch-all for errors that do not fit other categories. */\n UNKNOWN: -32099,\n} as const;\n\nexport type PluginRpcErrorCode =\n (typeof PLUGIN_RPC_ERROR_CODES)[keyof typeof PLUGIN_RPC_ERROR_CODES];\n\n// ---------------------------------------------------------------------------\n// Host \u2192 Worker Method Signatures (\u00A713 Host-Worker Protocol)\n// ---------------------------------------------------------------------------\n\n/**\n * Input for the `initialize` RPC method.\n *\n * @see PLUGIN_SPEC.md \u00A713.1 \u2014 `initialize`\n */\nexport interface InitializeParams {\n /** Full plugin manifest snapshot. */\n manifest: PaperclipPluginManifestV1;\n /** Resolved operator configuration (validated against `instanceConfigSchema`). */\n config: Record<string, unknown>;\n /** Instance-level metadata. */\n instanceInfo: {\n /** UUID of this Paperclip instance. */\n instanceId: string;\n /** Semver version of the running Paperclip host. */\n hostVersion: string;\n };\n /** Host API version. */\n apiVersion: number;\n /** Host-derived plugin database namespace, when the manifest declares database access. */\n databaseNamespace?: string | null;\n}\n\n/**\n * Result returned by the `initialize` RPC method.\n */\nexport interface InitializeResult {\n /** Whether initialization succeeded. */\n ok: boolean;\n /** Optional methods the worker has implemented (e.g. \"validateConfig\", \"onEvent\"). */\n supportedMethods?: string[];\n}\n\n/**\n * Input for the `configChanged` RPC method.\n *\n * @see PLUGIN_SPEC.md \u00A713.4 \u2014 `configChanged`\n */\nexport interface ConfigChangedParams {\n /** The newly resolved configuration. */\n config: Record<string, unknown>;\n}\n\n/**\n * Input for the `validateConfig` RPC method.\n *\n * @see PLUGIN_SPEC.md \u00A713.3 \u2014 `validateConfig`\n */\nexport interface ValidateConfigParams {\n /** The configuration to validate. */\n config: Record<string, unknown>;\n}\n\n/**\n * Input for the `onEvent` RPC method.\n *\n * @see PLUGIN_SPEC.md \u00A713.5 \u2014 `onEvent`\n */\nexport interface OnEventParams {\n /** The domain event to deliver. */\n event: PluginEvent;\n}\n\n/**\n * Input for the `runJob` RPC method.\n *\n * @see PLUGIN_SPEC.md \u00A713.6 \u2014 `runJob`\n */\nexport interface RunJobParams {\n /** Job execution context. */\n job: PluginJobContext;\n}\n\n/**\n * Input for the `getData` RPC method.\n *\n * @see PLUGIN_SPEC.md \u00A713.8 \u2014 `getData`\n */\nexport interface GetDataParams {\n /** Plugin-defined data key (e.g. `\"sync-health\"`). */\n key: string;\n /** Context and query parameters from the UI. */\n params: Record<string, unknown>;\n /** Optional launcher/container metadata from the host render environment. */\n renderEnvironment?: PluginLauncherRenderContextSnapshot | null;\n}\n\n/**\n * Input for the `performAction` RPC method.\n *\n * @see PLUGIN_SPEC.md \u00A713.9 \u2014 `performAction`\n */\nexport interface PerformActionParams {\n /** Plugin-defined action key (e.g. `\"resync\"`). */\n key: string;\n /** Action parameters from the UI. */\n params: Record<string, unknown>;\n /** Optional launcher/container metadata from the host render environment. */\n renderEnvironment?: PluginLauncherRenderContextSnapshot | null;\n}\n\n/**\n * Input for the `executeTool` RPC method.\n *\n * @see PLUGIN_SPEC.md \u00A713.10 \u2014 `executeTool`\n */\nexport interface ExecuteToolParams {\n /** Tool name (without plugin namespace prefix). */\n toolName: string;\n /** Parsed parameters matching the tool's declared schema. */\n parameters: unknown;\n /** Agent run context. */\n runContext: ToolRunContext;\n}\n\nexport interface PluginEnvironmentDiagnostic {\n severity: \"info\" | \"warning\" | \"error\";\n message: string;\n code?: string;\n details?: Record<string, unknown>;\n}\n\nexport interface PluginEnvironmentDriverBaseParams {\n driverKey: string;\n companyId: string;\n environmentId: string;\n issueId?: string | null;\n config: Record<string, unknown>;\n}\n\nexport interface PluginEnvironmentValidateConfigParams {\n driverKey: string;\n config: Record<string, unknown>;\n}\n\nexport interface PluginEnvironmentValidationResult {\n ok: boolean;\n warnings?: string[];\n errors?: string[];\n normalizedConfig?: Record<string, unknown>;\n}\n\nexport interface PluginEnvironmentProbeParams extends PluginEnvironmentDriverBaseParams {}\n\nexport interface PluginEnvironmentProbeResult {\n ok: boolean;\n summary?: string;\n diagnostics?: PluginEnvironmentDiagnostic[];\n metadata?: Record<string, unknown>;\n}\n\nexport interface PluginEnvironmentLease {\n providerLeaseId: string | null;\n metadata?: Record<string, unknown>;\n expiresAt?: string | null;\n}\n\nexport interface PluginEnvironmentAcquireLeaseParams extends PluginEnvironmentDriverBaseParams {\n runId: string;\n workspaceMode?: string;\n requestedCwd?: string;\n}\n\nexport interface PluginEnvironmentResumeLeaseParams extends PluginEnvironmentDriverBaseParams {\n providerLeaseId: string;\n leaseMetadata?: Record<string, unknown>;\n}\n\nexport interface PluginEnvironmentReleaseLeaseParams extends PluginEnvironmentDriverBaseParams {\n providerLeaseId: string | null;\n leaseMetadata?: Record<string, unknown>;\n}\n\nexport interface PluginEnvironmentDestroyLeaseParams extends PluginEnvironmentReleaseLeaseParams {}\n\nexport interface PluginEnvironmentRealizeWorkspaceParams extends PluginEnvironmentDriverBaseParams {\n lease: PluginEnvironmentLease;\n workspace: {\n localPath?: string;\n remotePath?: string;\n mode?: string;\n metadata?: Record<string, unknown>;\n };\n}\n\nexport interface PluginEnvironmentRealizeWorkspaceResult {\n cwd: string;\n metadata?: Record<string, unknown>;\n}\n\nexport interface PluginEnvironmentExecuteParams extends PluginEnvironmentDriverBaseParams {\n lease: PluginEnvironmentLease;\n command: string;\n args?: string[];\n cwd?: string;\n env?: Record<string, string>;\n stdin?: string;\n timeoutMs?: number;\n}\n\nexport interface PluginEnvironmentExecuteResult {\n exitCode: number | null;\n signal?: string | null;\n timedOut: boolean;\n stdout: string;\n stderr: string;\n metadata?: Record<string, unknown>;\n}\n\n// ---------------------------------------------------------------------------\n// UI launcher / modal host interaction payloads\n// ---------------------------------------------------------------------------\n\n/**\n * Bounds request issued by a plugin UI running inside a host-managed launcher\n * container such as a modal, drawer, or popover.\n */\nexport interface PluginModalBoundsRequest {\n /** High-level size preset requested from the host. */\n bounds: PluginLauncherBounds;\n /** Optional explicit width override in CSS pixels. */\n width?: number;\n /** Optional explicit height override in CSS pixels. */\n height?: number;\n /** Optional lower bounds for host resizing decisions. */\n minWidth?: number;\n minHeight?: number;\n /** Optional upper bounds for host resizing decisions. */\n maxWidth?: number;\n maxHeight?: number;\n}\n\n/**\n * Reason metadata supplied by host-managed close lifecycle callbacks.\n */\nexport interface PluginRenderCloseEvent {\n reason:\n | \"escapeKey\"\n | \"backdrop\"\n | \"hostNavigation\"\n | \"programmatic\"\n | \"submit\"\n | \"unknown\";\n nativeEvent?: unknown;\n}\n\n/**\n * Map of host\u2192worker RPC method names to their `[params, result]` types.\n *\n * This type is the single source of truth for all methods the host can call\n * on a worker. Used by both the host dispatcher and the worker handler to\n * ensure type safety across the IPC boundary.\n */\nexport interface HostToWorkerMethods {\n /** @see PLUGIN_SPEC.md \u00A713.1 */\n initialize: [params: InitializeParams, result: InitializeResult];\n /** @see PLUGIN_SPEC.md \u00A713.2 */\n health: [params: Record<string, never>, result: PluginHealthDiagnostics];\n /** @see PLUGIN_SPEC.md \u00A712.5 */\n shutdown: [params: Record<string, never>, result: void];\n /** @see PLUGIN_SPEC.md \u00A713.3 */\n validateConfig: [params: ValidateConfigParams, result: PluginConfigValidationResult];\n /** @see PLUGIN_SPEC.md \u00A713.4 */\n configChanged: [params: ConfigChangedParams, result: void];\n /** @see PLUGIN_SPEC.md \u00A713.5 */\n onEvent: [params: OnEventParams, result: void];\n /** @see PLUGIN_SPEC.md \u00A713.6 */\n runJob: [params: RunJobParams, result: void];\n /** @see PLUGIN_SPEC.md \u00A713.7 */\n handleWebhook: [params: PluginWebhookInput, result: unknown];\n /** Scoped plugin API route dispatch. */\n handleApiRequest: [params: PluginApiRequestInput, result: PluginApiResponse];\n /** @see PLUGIN_SPEC.md \u00A713.8 */\n getData: [params: GetDataParams, result: unknown];\n /** @see PLUGIN_SPEC.md \u00A713.9 */\n performAction: [params: PerformActionParams, result: unknown];\n /** @see PLUGIN_SPEC.md \u00A713.10 */\n executeTool: [params: ExecuteToolParams, result: ToolResult];\n environmentValidateConfig: [\n params: PluginEnvironmentValidateConfigParams,\n result: PluginEnvironmentValidationResult,\n ];\n environmentProbe: [\n params: PluginEnvironmentProbeParams,\n result: PluginEnvironmentProbeResult,\n ];\n environmentAcquireLease: [\n params: PluginEnvironmentAcquireLeaseParams,\n result: PluginEnvironmentLease,\n ];\n environmentResumeLease: [\n params: PluginEnvironmentResumeLeaseParams,\n result: PluginEnvironmentLease,\n ];\n environmentReleaseLease: [\n params: PluginEnvironmentReleaseLeaseParams,\n result: void,\n ];\n environmentDestroyLease: [\n params: PluginEnvironmentDestroyLeaseParams,\n result: void,\n ];\n environmentRealizeWorkspace: [\n params: PluginEnvironmentRealizeWorkspaceParams,\n result: PluginEnvironmentRealizeWorkspaceResult,\n ];\n environmentExecute: [\n params: PluginEnvironmentExecuteParams,\n result: PluginEnvironmentExecuteResult,\n ];\n}\n\n/** Union of all host\u2192worker method names. */\nexport type HostToWorkerMethodName = keyof HostToWorkerMethods;\n\n/** Required methods the worker MUST implement. */\nexport const HOST_TO_WORKER_REQUIRED_METHODS: readonly HostToWorkerMethodName[] = [\n \"initialize\",\n \"health\",\n \"shutdown\",\n] as const;\n\n/** Optional methods the worker MAY implement. */\nexport const HOST_TO_WORKER_OPTIONAL_METHODS: readonly HostToWorkerMethodName[] = [\n \"validateConfig\",\n \"configChanged\",\n \"onEvent\",\n \"runJob\",\n \"handleWebhook\",\n \"handleApiRequest\",\n \"getData\",\n \"performAction\",\n \"executeTool\",\n \"environmentValidateConfig\",\n \"environmentProbe\",\n \"environmentAcquireLease\",\n \"environmentResumeLease\",\n \"environmentReleaseLease\",\n \"environmentDestroyLease\",\n \"environmentRealizeWorkspace\",\n \"environmentExecute\",\n] as const;\n\n// ---------------------------------------------------------------------------\n// Worker \u2192 Host Method Signatures (SDK client calls)\n// ---------------------------------------------------------------------------\n\n/**\n * Map of worker\u2192host RPC method names to their `[params, result]` types.\n *\n * These represent the SDK client calls that the worker makes back to the\n * host to access platform services (state, entities, config, etc.).\n */\nexport interface WorkerToHostMethods {\n // Config\n \"config.get\": [params: Record<string, never>, result: Record<string, unknown>];\n\n // Trusted local folders\n \"localFolders.declarations\": [\n params: Record<string, never>,\n result: PluginLocalFolderDeclaration[],\n ];\n \"localFolders.configure\": [\n params: {\n companyId: string;\n folderKey: string;\n path: string;\n access?: \"read\" | \"readWrite\";\n requiredDirectories?: string[];\n requiredFiles?: string[];\n },\n result: PluginLocalFolderStatus,\n ];\n \"localFolders.status\": [\n params: { companyId: string; folderKey: string },\n result: PluginLocalFolderStatus,\n ];\n \"localFolders.list\": [\n params: { companyId: string; folderKey: string; relativePath?: string | null; recursive?: boolean; maxEntries?: number },\n result: PluginLocalFolderListing,\n ];\n \"localFolders.readText\": [\n params: { companyId: string; folderKey: string; relativePath: string },\n result: string,\n ];\n \"localFolders.writeTextAtomic\": [\n params: {\n companyId: string;\n folderKey: string;\n relativePath: string;\n contents: string;\n },\n result: PluginLocalFolderStatus,\n ];\n \"localFolders.deleteFile\": [\n params: { companyId: string; folderKey: string; relativePath: string },\n result: PluginLocalFolderStatus,\n ];\n\n // State\n \"state.get\": [\n params: { scopeKind: string; scopeId?: string; namespace?: string; stateKey: string },\n result: unknown,\n ];\n \"state.set\": [\n params: { scopeKind: string; scopeId?: string; namespace?: string; stateKey: string; value: unknown },\n result: void,\n ];\n \"state.delete\": [\n params: { scopeKind: string; scopeId?: string; namespace?: string; stateKey: string },\n result: void,\n ];\n\n // Restricted plugin database namespace\n \"db.namespace\": [\n params: Record<string, never>,\n result: string,\n ];\n \"db.query\": [\n params: { sql: string; params?: unknown[] },\n result: unknown[],\n ];\n \"db.execute\": [\n params: { sql: string; params?: unknown[] },\n result: { rowCount: number },\n ];\n\n // Entities\n \"entities.upsert\": [\n params: {\n entityType: string;\n scopeKind: PluginStateScopeKind;\n scopeId?: string;\n externalId?: string;\n title?: string;\n status?: string;\n data: Record<string, unknown>;\n },\n result: {\n id: string;\n entityType: string;\n scopeKind: PluginStateScopeKind;\n scopeId: string | null;\n externalId: string | null;\n title: string | null;\n status: string | null;\n data: Record<string, unknown>;\n createdAt: string;\n updatedAt: string;\n },\n ];\n \"entities.list\": [\n params: {\n entityType?: string;\n scopeKind?: PluginStateScopeKind;\n scopeId?: string;\n externalId?: string;\n limit?: number;\n offset?: number;\n },\n result: Array<{\n id: string;\n entityType: string;\n scopeKind: PluginStateScopeKind;\n scopeId: string | null;\n externalId: string | null;\n title: string | null;\n status: string | null;\n data: Record<string, unknown>;\n createdAt: string;\n updatedAt: string;\n }>,\n ];\n\n // Events\n \"events.emit\": [\n params: { name: string; companyId: string; payload: unknown },\n result: void,\n ];\n \"events.subscribe\": [\n params: { eventPattern: string; filter?: Record<string, unknown> | null },\n result: void,\n ];\n\n // HTTP\n \"http.fetch\": [\n params: { url: string; init?: Record<string, unknown> },\n result: { status: number; statusText: string; headers: Record<string, string>; body: string },\n ];\n\n // Secrets\n \"secrets.resolve\": [\n params: { secretRef: string },\n result: string,\n ];\n\n // Activity\n \"activity.log\": [\n params: {\n companyId: string;\n message: string;\n entityType?: string;\n entityId?: string;\n metadata?: Record<string, unknown>;\n },\n result: void,\n ];\n\n // Metrics\n \"metrics.write\": [\n params: { name: string; value: number; tags?: Record<string, string> },\n result: void,\n ];\n\n // Telemetry\n \"telemetry.track\": [\n params: { eventName: string; dimensions?: Record<string, string | number | boolean> },\n result: void,\n ];\n\n // Logger\n \"log\": [\n params: { level: \"info\" | \"warn\" | \"error\" | \"debug\"; message: string; meta?: Record<string, unknown> },\n result: void,\n ];\n\n // Companies (read)\n \"companies.list\": [\n params: { limit?: number; offset?: number },\n result: Company[],\n ];\n \"companies.get\": [\n params: { companyId: string },\n result: Company | null,\n ];\n\n // Projects (read)\n \"projects.list\": [\n params: { companyId: string; limit?: number; offset?: number },\n result: Project[],\n ];\n \"projects.get\": [\n params: { projectId: string; companyId: string },\n result: Project | null,\n ];\n \"projects.listWorkspaces\": [\n params: { projectId: string; companyId: string },\n result: PluginWorkspace[],\n ];\n \"projects.getPrimaryWorkspace\": [\n params: { projectId: string; companyId: string },\n result: PluginWorkspace | null,\n ];\n \"projects.getWorkspaceForIssue\": [\n params: { issueId: string; companyId: string },\n result: PluginWorkspace | null,\n ];\n \"projects.managed.get\": [\n params: { projectKey: string; companyId: string },\n result: PluginManagedProjectResolution,\n ];\n \"projects.managed.reconcile\": [\n params: { projectKey: string; companyId: string },\n result: PluginManagedProjectResolution,\n ];\n \"projects.managed.reset\": [\n params: { projectKey: string; companyId: string },\n result: PluginManagedProjectResolution,\n ];\n \"routines.managed.get\": [\n params: { routineKey: string; companyId: string },\n result: PluginManagedRoutineResolution,\n ];\n \"routines.managed.reconcile\": [\n params: {\n routineKey: string;\n companyId: string;\n assigneeAgentId?: string | null;\n projectId?: string | null;\n },\n result: PluginManagedRoutineResolution,\n ];\n \"routines.managed.reset\": [\n params: {\n routineKey: string;\n companyId: string;\n assigneeAgentId?: string | null;\n projectId?: string | null;\n },\n result: PluginManagedRoutineResolution,\n ];\n \"routines.managed.update\": [\n params: {\n routineKey: string;\n companyId: string;\n status?: string;\n },\n result: Routine,\n ];\n \"routines.managed.run\": [\n params: {\n routineKey: string;\n companyId: string;\n assigneeAgentId?: string | null;\n projectId?: string | null;\n },\n result: RoutineRun,\n ];\n \"skills.managed.get\": [\n params: { skillKey: string; companyId: string },\n result: PluginManagedSkillResolution,\n ];\n \"skills.managed.reconcile\": [\n params: { skillKey: string; companyId: string },\n result: PluginManagedSkillResolution,\n ];\n \"skills.managed.reset\": [\n params: { skillKey: string; companyId: string },\n result: PluginManagedSkillResolution,\n ];\n\n // Issues\n \"issues.list\": [\n params: {\n companyId: string;\n projectId?: string;\n assigneeAgentId?: string;\n originKind?: string;\n originKindPrefix?: string;\n originId?: string;\n status?: string;\n includePluginOperations?: boolean;\n limit?: number;\n offset?: number;\n },\n result: Issue[],\n ];\n \"issues.get\": [\n params: { issueId: string; companyId: string },\n result: Issue | null,\n ];\n \"issues.create\": [\n params: {\n companyId: string;\n projectId?: string;\n goalId?: string;\n parentId?: string;\n inheritExecutionWorkspaceFromIssueId?: string;\n title: string;\n description?: string;\n status?: string;\n priority?: string;\n assigneeAgentId?: string;\n assigneeUserId?: string | null;\n requestDepth?: number;\n billingCode?: string | null;\n assigneeAdapterOverrides?: IssueAssigneeAdapterOverrides | null;\n surfaceVisibility?: string | null;\n originKind?: string | null;\n originId?: string | null;\n originRunId?: string | null;\n blockedByIssueIds?: string[];\n labelIds?: string[];\n executionWorkspaceId?: string | null;\n executionWorkspacePreference?: string | null;\n executionWorkspaceSettings?: Record<string, unknown> | null;\n actorAgentId?: string | null;\n actorUserId?: string | null;\n actorRunId?: string | null;\n },\n result: Issue,\n ];\n \"issues.update\": [\n params: {\n issueId: string;\n patch: Record<string, unknown>;\n companyId: string;\n },\n result: Issue,\n ];\n \"issues.relations.get\": [\n params: { issueId: string; companyId: string },\n result: PluginIssueRelationSummary,\n ];\n \"issues.relations.setBlockedBy\": [\n params: {\n issueId: string;\n companyId: string;\n blockedByIssueIds: string[];\n actorAgentId?: string | null;\n actorUserId?: string | null;\n actorRunId?: string | null;\n },\n result: PluginIssueRelationSummary,\n ];\n \"issues.relations.addBlockers\": [\n params: {\n issueId: string;\n companyId: string;\n blockerIssueIds: string[];\n actorAgentId?: string | null;\n actorUserId?: string | null;\n actorRunId?: string | null;\n },\n result: PluginIssueRelationSummary,\n ];\n \"issues.relations.removeBlockers\": [\n params: {\n issueId: string;\n companyId: string;\n blockerIssueIds: string[];\n actorAgentId?: string | null;\n actorUserId?: string | null;\n actorRunId?: string | null;\n },\n result: PluginIssueRelationSummary,\n ];\n \"issues.assertCheckoutOwner\": [\n params: {\n issueId: string;\n companyId: string;\n actorAgentId: string;\n actorRunId: string;\n },\n result: PluginIssueCheckoutOwnership,\n ];\n \"issues.getSubtree\": [\n params: {\n issueId: string;\n companyId: string;\n includeRoot?: boolean;\n includeRelations?: boolean;\n includeDocuments?: boolean;\n includeActiveRuns?: boolean;\n includeAssignees?: boolean;\n },\n result: PluginIssueSubtree,\n ];\n \"issues.requestWakeup\": [\n params: {\n issueId: string;\n companyId: string;\n reason?: string;\n contextSource?: string;\n idempotencyKey?: string | null;\n actorAgentId?: string | null;\n actorUserId?: string | null;\n actorRunId?: string | null;\n },\n result: PluginIssueWakeupResult,\n ];\n \"issues.requestWakeups\": [\n params: {\n issueIds: string[];\n companyId: string;\n reason?: string;\n contextSource?: string;\n idempotencyKeyPrefix?: string | null;\n actorAgentId?: string | null;\n actorUserId?: string | null;\n actorRunId?: string | null;\n },\n result: PluginIssueWakeupBatchResult[],\n ];\n \"issues.summaries.getOrchestration\": [\n params: {\n issueId: string;\n companyId: string;\n includeSubtree?: boolean;\n billingCode?: string | null;\n },\n result: PluginIssueOrchestrationSummary,\n ];\n \"issues.listComments\": [\n params: { issueId: string; companyId: string },\n result: IssueComment[],\n ];\n \"issues.createComment\": [\n params: { issueId: string; body: string; companyId: string; authorAgentId?: string },\n result: IssueComment,\n ];\n \"issues.attachments.create\": [\n params: {\n issueId: string;\n companyId: string;\n filename: string;\n contentType: string;\n bodyBase64: string;\n issueCommentId?: string | null;\n actorAgentId?: string | null;\n actorUserId?: string | null;\n actorRunId?: string | null;\n },\n result: IssueAttachment,\n ];\n \"issues.createInteraction\": [\n params: {\n issueId: string;\n companyId: string;\n interaction: CreateIssueThreadInteraction;\n authorAgentId?: string | null;\n },\n result: IssueThreadInteraction,\n ];\n\n // Issue Documents\n \"issues.documents.list\": [\n params: { issueId: string; companyId: string },\n result: IssueDocumentSummary[],\n ];\n \"issues.documents.get\": [\n params: { issueId: string; key: string; companyId: string },\n result: IssueDocument | null,\n ];\n \"issues.documents.upsert\": [\n params: {\n issueId: string;\n key: string;\n body: string;\n companyId: string;\n title?: string;\n format?: string;\n changeSummary?: string;\n },\n result: IssueDocument,\n ];\n \"issues.documents.delete\": [\n params: { issueId: string; key: string; companyId: string },\n result: void,\n ];\n\n // Agents (read)\n \"agents.list\": [\n params: { companyId: string; status?: string; limit?: number; offset?: number },\n result: Agent[],\n ];\n \"agents.get\": [\n params: { agentId: string; companyId: string },\n result: Agent | null,\n ];\n\n // Agents (write)\n \"agents.pause\": [\n params: { agentId: string; companyId: string },\n result: Agent,\n ];\n \"agents.resume\": [\n params: { agentId: string; companyId: string },\n result: Agent,\n ];\n \"agents.invoke\": [\n params: { agentId: string; companyId: string; prompt: string; reason?: string },\n result: { runId: string },\n ];\n \"agents.managed.get\": [\n params: { agentKey: string; companyId: string },\n result: PluginManagedAgentResolution,\n ];\n \"agents.managed.reconcile\": [\n params: { agentKey: string; companyId: string },\n result: PluginManagedAgentResolution,\n ];\n \"agents.managed.reset\": [\n params: { agentKey: string; companyId: string },\n result: PluginManagedAgentResolution,\n ];\n\n // Agent Sessions\n \"agents.sessions.create\": [\n params: { agentId: string; companyId: string; taskKey?: string; reason?: string },\n result: { sessionId: string; agentId: string; companyId: string; status: \"active\" | \"closed\"; createdAt: string },\n ];\n \"agents.sessions.list\": [\n params: { agentId: string; companyId: string },\n result: Array<{ sessionId: string; agentId: string; companyId: string; status: \"active\" | \"closed\"; createdAt: string }>,\n ];\n \"agents.sessions.sendMessage\": [\n params: { sessionId: string; companyId: string; prompt: string; reason?: string; issueId?: string; taskId?: string },\n result: { runId: string },\n ];\n \"agents.sessions.close\": [\n params: { sessionId: string; companyId: string },\n result: void,\n ];\n\n // Goals\n \"goals.list\": [\n params: { companyId: string; level?: string; status?: string; limit?: number; offset?: number },\n result: Goal[],\n ];\n \"goals.get\": [\n params: { goalId: string; companyId: string },\n result: Goal | null,\n ];\n \"goals.create\": [\n params: {\n companyId: string;\n title: string;\n description?: string;\n level?: string;\n status?: string;\n parentId?: string;\n ownerAgentId?: string;\n },\n result: Goal,\n ];\n \"goals.update\": [\n params: {\n goalId: string;\n patch: Record<string, unknown>;\n companyId: string;\n },\n result: Goal,\n ];\n}\n\n/** Union of all worker\u2192host method names. */\nexport type WorkerToHostMethodName = keyof WorkerToHostMethods;\n\n// ---------------------------------------------------------------------------\n// Worker\u2192Host Notification Types (fire-and-forget, no response)\n// ---------------------------------------------------------------------------\n\n/**\n * Typed parameter shapes for worker\u2192host JSON-RPC notifications.\n *\n * Notifications are fire-and-forget \u2014 the worker does not wait for a response.\n * These are used for streaming events and logging, not for request-response RPCs.\n */\nexport interface WorkerToHostNotifications {\n /**\n * Forward a stream event to connected SSE clients.\n *\n * Emitted by the worker for each event on a stream channel. The host\n * publishes to the PluginStreamBus, which fans out to all SSE clients\n * subscribed to the (pluginId, channel, companyId) tuple.\n *\n * The `event` payload is JSON-serializable and sent as SSE `data:`.\n * The default SSE event type is `\"message\"`.\n */\n \"streams.emit\": {\n channel: string;\n companyId: string;\n event: unknown;\n };\n\n /**\n * Signal that a stream channel has been opened.\n *\n * Emitted when the worker calls `ctx.streams.open(channel, companyId)`.\n * UI clients may use this to display a \"connected\" indicator or begin\n * buffering input. The host tracks open channels so it can emit synthetic\n * close events if the worker crashes.\n */\n \"streams.open\": {\n channel: string;\n companyId: string;\n };\n\n /**\n * Signal that a stream channel has been closed.\n *\n * Emitted when the worker calls `ctx.streams.close(channel)`, or\n * synthetically by the host when a worker process exits with channels\n * still open. UI clients should treat this as terminal and disconnect\n * the SSE connection.\n */\n \"streams.close\": {\n channel: string;\n companyId: string;\n };\n}\n\n/** Union of all worker\u2192host notification method names. */\nexport type WorkerToHostNotificationName = keyof WorkerToHostNotifications;\n\n// ---------------------------------------------------------------------------\n// Typed Request / Response Helpers\n// ---------------------------------------------------------------------------\n\n/**\n * A typed JSON-RPC request for a specific host\u2192worker method.\n */\nexport type HostToWorkerRequest<M extends HostToWorkerMethodName> =\n JsonRpcRequest<M, HostToWorkerMethods[M][0]>;\n\n/**\n * A typed JSON-RPC success response for a specific host\u2192worker method.\n */\nexport type HostToWorkerResponse<M extends HostToWorkerMethodName> =\n JsonRpcSuccessResponse<HostToWorkerMethods[M][1]>;\n\n/**\n * A typed JSON-RPC request for a specific worker\u2192host method.\n */\nexport type WorkerToHostRequest<M extends WorkerToHostMethodName> =\n JsonRpcRequest<M, WorkerToHostMethods[M][0]>;\n\n/**\n * A typed JSON-RPC success response for a specific worker\u2192host method.\n */\nexport type WorkerToHostResponse<M extends WorkerToHostMethodName> =\n JsonRpcSuccessResponse<WorkerToHostMethods[M][1]>;\n\n// ---------------------------------------------------------------------------\n// Message Factory Functions\n// ---------------------------------------------------------------------------\n\n/** Counter for generating unique request IDs when no explicit ID is provided. */\nlet _nextId = 1;\n\n/** Wrap around before reaching Number.MAX_SAFE_INTEGER to prevent precision loss. */\nconst MAX_SAFE_RPC_ID = Number.MAX_SAFE_INTEGER - 1;\n\n/**\n * Create a JSON-RPC 2.0 request message.\n *\n * @param method - The RPC method name\n * @param params - Structured parameters\n * @param id - Optional explicit request ID (auto-generated if omitted)\n */\nexport function createRequest<TMethod extends string>(\n method: TMethod,\n params: unknown,\n id?: JsonRpcId,\n): JsonRpcRequest<TMethod> {\n if (_nextId >= MAX_SAFE_RPC_ID) {\n _nextId = 1;\n }\n return {\n jsonrpc: JSONRPC_VERSION,\n id: id ?? _nextId++,\n method,\n params,\n };\n}\n\n/**\n * Create a JSON-RPC 2.0 success response.\n *\n * @param id - The request ID being responded to\n * @param result - The result value\n */\nexport function createSuccessResponse<TResult>(\n id: JsonRpcId,\n result: TResult,\n): JsonRpcSuccessResponse<TResult> {\n return {\n jsonrpc: JSONRPC_VERSION,\n id,\n result,\n };\n}\n\n/**\n * Create a JSON-RPC 2.0 error response.\n *\n * @param id - The request ID being responded to (null if the request ID could not be determined)\n * @param code - Machine-readable error code\n * @param message - Human-readable error message\n * @param data - Optional structured error data\n */\nexport function createErrorResponse<TData = unknown>(\n id: JsonRpcId | null,\n code: number,\n message: string,\n data?: TData,\n): JsonRpcErrorResponse<TData> {\n const response: JsonRpcErrorResponse<TData> = {\n jsonrpc: JSONRPC_VERSION,\n id,\n error: data !== undefined\n ? { code, message, data }\n : { code, message } as JsonRpcError<TData>,\n };\n return response;\n}\n\n/**\n * Create a JSON-RPC 2.0 notification (fire-and-forget, no response expected).\n *\n * @param method - The notification method name\n * @param params - Structured parameters\n */\nexport function createNotification<TMethod extends string>(\n method: TMethod,\n params: unknown,\n): JsonRpcNotification<TMethod> {\n return {\n jsonrpc: JSONRPC_VERSION,\n method,\n params,\n };\n}\n\n// ---------------------------------------------------------------------------\n// Type Guards\n// ---------------------------------------------------------------------------\n\n/**\n * Check whether a value is a well-formed JSON-RPC 2.0 request.\n *\n * A request has `jsonrpc: \"2.0\"`, a string `method`, and an `id`.\n */\nexport function isJsonRpcRequest(value: unknown): value is JsonRpcRequest {\n if (typeof value !== \"object\" || value === null) return false;\n const obj = value as Record<string, unknown>;\n return (\n obj.jsonrpc === JSONRPC_VERSION &&\n typeof obj.method === \"string\" &&\n \"id\" in obj &&\n obj.id !== undefined &&\n obj.id !== null\n );\n}\n\n/**\n * Check whether a value is a well-formed JSON-RPC 2.0 notification.\n *\n * A notification has `jsonrpc: \"2.0\"`, a string `method`, but no `id`.\n */\nexport function isJsonRpcNotification(\n value: unknown,\n): value is JsonRpcNotification {\n if (typeof value !== \"object\" || value === null) return false;\n const obj = value as Record<string, unknown>;\n return (\n obj.jsonrpc === JSONRPC_VERSION &&\n typeof obj.method === \"string\" &&\n !(\"id\" in obj)\n );\n}\n\n/**\n * Check whether a value is a well-formed JSON-RPC 2.0 response (success or error).\n */\nexport function isJsonRpcResponse(value: unknown): value is JsonRpcResponse {\n if (typeof value !== \"object\" || value === null) return false;\n const obj = value as Record<string, unknown>;\n return (\n obj.jsonrpc === JSONRPC_VERSION &&\n \"id\" in obj &&\n (\"result\" in obj || \"error\" in obj)\n );\n}\n\n/**\n * Check whether a JSON-RPC response is a success response.\n */\nexport function isJsonRpcSuccessResponse(\n response: JsonRpcResponse,\n): response is JsonRpcSuccessResponse {\n return \"result\" in response && !(\"error\" in response && response.error !== undefined);\n}\n\n/**\n * Check whether a JSON-RPC response is an error response.\n */\nexport function isJsonRpcErrorResponse(\n response: JsonRpcResponse,\n): response is JsonRpcErrorResponse {\n return \"error\" in response && response.error !== undefined;\n}\n\n// ---------------------------------------------------------------------------\n// Serialization Helpers\n// ---------------------------------------------------------------------------\n\n/**\n * Line delimiter for JSON-RPC messages over stdio.\n *\n * Each message is a single line of JSON terminated by a newline character.\n * This follows the newline-delimited JSON (NDJSON) convention.\n */\nexport const MESSAGE_DELIMITER = \"\\n\" as const;\n\n/**\n * Serialize a JSON-RPC message to a newline-delimited string for transmission\n * over stdio.\n *\n * @param message - Any JSON-RPC message (request, response, or notification)\n * @returns The JSON string terminated with a newline\n */\nexport function serializeMessage(message: JsonRpcMessage): string {\n return JSON.stringify(message) + MESSAGE_DELIMITER;\n}\n\n/**\n * Parse a JSON string into a JSON-RPC message.\n *\n * Returns the parsed message or throws a `JsonRpcParseError` if the input\n * is not valid JSON or does not conform to the JSON-RPC 2.0 structure.\n *\n * @param line - A single line of JSON text (with or without trailing newline)\n * @returns The parsed JSON-RPC message\n * @throws {JsonRpcParseError} If parsing fails\n */\nexport function parseMessage(line: string): JsonRpcMessage {\n const trimmed = line.trim();\n if (trimmed.length === 0) {\n throw new JsonRpcParseError(\"Empty message\");\n }\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(trimmed);\n } catch {\n throw new JsonRpcParseError(`Invalid JSON: ${trimmed.slice(0, 200)}`);\n }\n\n if (typeof parsed !== \"object\" || parsed === null) {\n throw new JsonRpcParseError(\"Message must be a JSON object\");\n }\n\n const obj = parsed as Record<string, unknown>;\n\n if (obj.jsonrpc !== JSONRPC_VERSION) {\n throw new JsonRpcParseError(\n `Invalid or missing jsonrpc version (expected \"${JSONRPC_VERSION}\", got ${JSON.stringify(obj.jsonrpc)})`,\n );\n }\n\n // It's a valid JSON-RPC 2.0 envelope \u2014 return as-is and let the caller\n // use the type guards for more specific classification.\n return parsed as JsonRpcMessage;\n}\n\n// ---------------------------------------------------------------------------\n// Error Classes\n// ---------------------------------------------------------------------------\n\n/**\n * Error thrown when a JSON-RPC message cannot be parsed.\n */\nexport class JsonRpcParseError extends Error {\n override readonly name = \"JsonRpcParseError\";\n constructor(message: string) {\n super(message);\n }\n}\n\n/**\n * Error thrown when a JSON-RPC call fails with a structured error response.\n *\n * Captures the full `JsonRpcError` so callers can inspect the code and data.\n */\nexport class JsonRpcCallError extends Error {\n override readonly name = \"JsonRpcCallError\";\n /** The JSON-RPC error code. */\n readonly code: number;\n /** Optional structured error data from the response. */\n readonly data: unknown;\n\n constructor(error: JsonRpcError) {\n super(error.message);\n this.code = error.code;\n this.data = error.data;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Reset helper (testing only)\n// ---------------------------------------------------------------------------\n\n/**\n * Reset the internal request ID counter. **For testing only.**\n *\n * @internal\n */\nexport function _resetIdCounter(): void {\n _nextId = 1;\n}\n", "import {\n definePlugin,\n runWorker,\n type PaperclipPlugin,\n type PluginContext,\n type PluginEvent,\n type PluginHealthDiagnostics,\n type AgentSessionEvent,\n type ToolResult,\n} from \"@paperclipai/plugin-sdk\";\nimport crypto from \"node:crypto\";\nimport fs from \"node:fs/promises\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport {\n ACTION_KEYS,\n DEFAULT_ACK_CARD_FOOTER,\n DEFAULT_ACK_CARD_TEMPLATE,\n DEFAULT_ACK_CARD_TITLE,\n API_ROUTE_KEYS,\n DEFAULT_BLOCKED_CARD_TEMPLATE,\n DEFAULT_BLOCKED_CARD_TITLE,\n DATA_KEYS,\n DEFAULT_ACK_TEMPLATE,\n DEFAULT_COMPLETION_CARD_TEMPLATE,\n DEFAULT_COMPLETION_CARD_TITLE,\n DEFAULT_COMPLETION_TEMPLATE,\n DEFAULT_ESTIMATED_DURATION_LABEL,\n DEFAULT_FAILURE_CARD_TEMPLATE,\n DEFAULT_FAILURE_CARD_TITLE,\n DEFAULT_PROGRESS_CARD_TEMPLATE,\n DEFAULT_PROGRESS_CARD_TITLE,\n LEGACY_ACK_TEMPLATE,\n LEGACY_COMPLETION_TEMPLATE,\n PLUGIN_ID,\n TOOL_NAMES,\n WEBHOOK_KEYS,\n} from \"./constants.js\";\nimport {\n getEnabledConnections,\n normalizeConfig,\n resolveBaseSink,\n resolveConnection,\n} from \"./config.js\";\nimport {\n buildFeishuCapabilityCenter,\n FEISHU_CAPABILITY_DEFINITIONS,\n findFeishuCapabilityDefinition,\n isFeishuCapabilityEnabled,\n isLarkCliCommandAllowedForCapability,\n type FeishuCapabilityContext,\n type LarkCliSchemaDiscovery,\n} from \"./capabilities.js\";\nimport {\n buildBaseRecord,\n buildSessionKey,\n createCommentBody,\n createIssueDescription,\n createIssueTitle,\n describeFeishuConversationForDisplay,\n describeRouteEntry,\n describeRouteTrigger,\n extractInboundMessage,\n renderTemplate,\n resolveMatchingRoutes,\n resolveRoute,\n} from \"./routing.js\";\nimport {\n buildAuthStatusArgs,\n buildFetchDocArgs,\n buildRecordUpsertArgs,\n buildMessageGetArgs,\n buildProfileAddArgs,\n buildReplyMessageArgs,\n buildResourceDownloadArgs,\n buildSendMessageArgs,\n resolveLarkCliBin,\n runLarkCli,\n startLarkConfigInit,\n startLarkEventSubscriber,\n type LarkConfigInitSession,\n type LarkEventSubscriber,\n} from \"./lark-cli.js\";\nimport { planEventSubscribers, routeListeningConnections } from \"./subscriber-plan.js\";\nimport type {\n FeishuBaseSinkConfig,\n FeishuConnectionConfig,\n FeishuConnectorConfig,\n FeishuInboundAttachment,\n FeishuInboundMessage,\n FeishuRouteConfig,\n FeishuSessionData,\n LarkCliResult,\n} from \"./types.js\";\nimport type { IssueComment } from \"@paperclipai/shared\";\n\ntype RecentRecord = {\n level: \"info\" | \"warning\" | \"error\";\n message: string;\n createdAt: string;\n data?: unknown;\n};\n\ntype MonitorCheckTone = \"success\" | \"warning\" | \"error\";\n\ntype ProductionMonitorCheck = {\n key: string;\n tone: MonitorCheckTone;\n title: string;\n detail: string;\n};\n\ntype ProductionMonitor = {\n health: \"ok\" | \"warning\" | \"error\";\n message: string;\n checkedAt: string;\n enabledConnectionCount: number;\n usableConnectionCount?: number;\n missingProfileConnectionIds?: string[];\n profileReadError?: string | null;\n enabledRouteCount: number;\n expectedSubscriberCount: number;\n activeSubscriberCount: number;\n missingSubscriberConnectionIds: string[];\n recentErrorCount: number;\n recentWarningCount: number;\n lastEventAt: string | null;\n lastWatchdogAt: string | null;\n checks: ProductionMonitorCheck[];\n};\n\ntype RetryQueueItem = {\n id: string;\n kind: \"feishu_reply\" | \"base_record\";\n status: \"queued\" | \"succeeded\" | \"failed\";\n connectionId: string;\n profileName: string;\n args: string[];\n reason: string;\n routeId?: string;\n issueId?: string;\n messageId?: string;\n attemptCount: number;\n lastError?: string;\n createdAt: string;\n updatedAt: string;\n nextAttemptAt?: string;\n lastAttemptAt?: string;\n};\n\ntype RetryQueueSummary = {\n totalCount: number;\n pendingCount: number;\n failedCount: number;\n succeededCount: number;\n items: RetryQueueItem[];\n};\n\ntype ProfileAvailability = {\n availableProfileNames?: Set<string>;\n profileReadError?: string | null;\n};\n\ntype AttachedResourceResult = {\n filename: string;\n resourceKey: string;\n resourceType: FeishuInboundAttachment[\"resourceType\"];\n attachmentId?: string;\n contentPath?: string;\n dryRun?: boolean;\n error?: string;\n};\n\ntype ProfileRow = {\n name: string;\n appId: string | null;\n brand: string | null;\n active: boolean;\n user: string | null;\n tokenStatus: string | null;\n botName?: string | null;\n botOpenId?: string | null;\n botAvatarUrl?: string | null;\n botActivateStatus?: number | null;\n};\n\ntype UserAuthSession = {\n profileName: string;\n deviceCode: string;\n verificationUrl: string;\n expiresAt: number;\n};\n\ntype DirectoryChatRow = {\n chatId: string;\n name: string;\n description: string | null;\n external: boolean;\n};\n\ntype DirectoryUserRow = {\n openId: string;\n userId: string | null;\n name: string;\n departmentIds: string[];\n};\n\nconst recentRecords: RecentRecord[] = [];\nconst subscribers = new Map<string, LarkEventSubscriber>();\nconst guidedBindSessions = new Map<string, LarkConfigInitSession>();\nconst userAuthSessions = new Map<string, UserAuthSession>();\nconst connectionBotInfoCache = new Map<string, { fetchedAt: number; botName?: string | null; botOpenId?: string | null }>();\nlet currentContext: PluginContext | null = null;\nlet subscriberWatchdog: ReturnType<typeof setInterval> | null = null;\nlet lastWatchdogAt: string | null = null;\nlet lastInboundEventAt: string | null = null;\nconst FINAL_REPLY_FULL_TEXT_LIMIT = 1_800;\nconst FINAL_REPLY_SUMMARY_LIMIT = 900;\nconst RUN_FALLBACK_DELAY_MS = process.env.VITEST ? 10 : 5_000;\nconst CONNECTION_BOT_INFO_TTL_MS = 10 * 60 * 1000;\nconst EVENT_LOG_ENTITY_TYPE = \"feishu_event_logs\";\nconst CONFLICT_ENTITY_TYPE = \"feishu_conflicts\";\nconst RETRY_QUEUE_NAMESPACE = \"feishu-retry-queue\";\nconst RETRY_QUEUE_STATE_KEY = \"items\";\nconst RETRY_QUEUE_LIMIT = 100;\nconst DB_TABLES = {\n bots: \"feishu_bots\",\n entries: \"feishu_entries\",\n capabilities: \"feishu_capabilities\",\n entryCapabilities: \"feishu_entry_capabilities\",\n agentCapabilities: \"feishu_agent_capabilities\",\n conversations: \"feishu_conversations\",\n messageRoutes: \"feishu_message_routes\",\n eventLogs: \"feishu_event_logs\",\n conflicts: \"feishu_conflicts\",\n permissionChecks: \"feishu_permission_checks\",\n} as const;\n\nfunction record(level: RecentRecord[\"level\"], message: string, data?: unknown): void {\n const entry = { level, message, data, createdAt: new Date().toISOString() };\n recentRecords.unshift(entry);\n if (recentRecords.length > 50) recentRecords.length = 50;\n const ctx = currentContext;\n if (ctx) {\n void persistRecentRecord(ctx, entry);\n }\n}\n\nfunction textPreview(text?: string | null, maxLength = 120): string {\n const normalized = (text ?? \"\").replace(/\\s+/g, \" \").trim();\n if (normalized.length <= maxLength) return normalized;\n return `${normalized.slice(0, maxLength - 1)}\u2026`;\n}\n\nfunction isLikelyFeishuInternalId(value?: string | null): boolean {\n const trimmed = (value ?? \"\").trim();\n return /^(oc|ou|om|on|od|of|cli)_[a-z0-9][a-z0-9_-]{5,}$/i.test(trimmed);\n}\n\nfunction displayNameOrNull(value?: string | null): string | null {\n const trimmed = value?.trim();\n if (!trimmed || isLikelyFeishuInternalId(trimmed)) return null;\n if (/\u540D\u79F0\u5F85\u540C\u6B65|\u5DF2\u8BB0\u5F55/.test(trimmed)) return null;\n return trimmed;\n}\n\nfunction legacyIssueLine(description: string | null | undefined, label: string): string | null {\n const line = description?.split(/\\r?\\n/g).find((item) => item.trim().startsWith(`${label}\uFF1A`));\n const raw = line?.trim().slice(label.length + 1).trim();\n if (!raw) return null;\n const unescaped = raw.replace(/\\\\_/g, \"_\");\n const withoutParentheticalId = unescaped.replace(/[\uFF08(]\\s*(oc|ou|om|on|od|of|cli)_[^)\uFF09]+\\s*[)\uFF09]\\s*$/i, \"\").trim();\n return displayNameOrNull(withoutParentheticalId);\n}\n\nfunction inboundMessageDiagnostics(\n message: FeishuInboundMessage,\n connection: FeishuConnectionConfig,\n extra: Record<string, unknown> = {},\n): Record<string, unknown> {\n return {\n connectionId: connection.id,\n connectionName: connection.name,\n profileName: connection.profileName,\n appId: connection.appId ?? null,\n messageId: message.messageId,\n chatId: message.chatId ?? null,\n chatName: message.chatName ?? null,\n senderName: message.senderName ?? null,\n senderOpenId: message.senderOpenId ?? null,\n senderType: message.senderType ?? null,\n senderAppId: message.senderAppId ?? null,\n textPreview: textPreview(message.text),\n attachmentCount: message.attachments.length,\n ...extra,\n };\n}\n\nfunction routeMatchDiagnostic(\n route: FeishuRouteConfig,\n message: FeishuInboundMessage,\n connectionId: string,\n): Record<string, unknown> {\n const routeConnectionMatches = !route.connectionId || route.connectionId === connectionId;\n let triggerMatched = false;\n let reason = \"\";\n\n if (!routeConnectionMatches) {\n reason = `\u5165\u53E3\u7ED1\u5B9A\u7684\u662F ${route.connectionId}\uFF0C\u4F46\u6D88\u606F\u6765\u81EA ${connectionId}`;\n } else if (route.enabled === false) {\n reason = \"\u5165\u53E3\u5DF2\u6682\u505C\";\n } else if (route.matchType === \"chat\") {\n triggerMatched = !!route.chatId && route.chatId === message.chatId;\n reason = triggerMatched ? \"\u98DE\u4E66\u4F1A\u8BDD\u5339\u914D\" : `\u98DE\u4E66\u4F1A\u8BDD\u4E0D\u4E00\u81F4\uFF1A\u5165\u53E3 ${route.chatName ?? route.chatId ?? \"\u672A\u8BBE\u7F6E\"}\uFF0C\u6D88\u606F ${message.chatName ?? message.chatId ?? \"\u672A\u77E5\u4F1A\u8BDD\"}`;\n } else if (route.matchType === \"user\") {\n triggerMatched = !!route.userOpenId && route.userOpenId === message.senderOpenId;\n reason = triggerMatched ? \"\u63D0\u51FA\u4EBA\u5339\u914D\" : `\u63D0\u51FA\u4EBA\u4E0D\u4E00\u81F4\uFF1A\u5165\u53E3 ${route.userName ?? route.userOpenId ?? \"\u672A\u8BBE\u7F6E\"}\uFF0C\u6D88\u606F ${message.senderName ?? message.senderOpenId ?? \"unknown\"}`;\n } else if (route.matchType === \"keyword\") {\n const keyword = route.keyword?.trim() ?? \"\";\n triggerMatched = !!keyword && message.text.toLocaleLowerCase().includes(keyword.toLocaleLowerCase());\n reason = triggerMatched ? `\u6D88\u606F\u5305\u542B\u5173\u952E\u8BCD\u300C${keyword}\u300D` : `\u6D88\u606F\u4E0D\u5305\u542B\u5173\u952E\u8BCD\u300C${keyword || \"\u672A\u8BBE\u7F6E\"}\u300D`;\n } else if (route.matchType === \"regex\") {\n if (!route.regex) {\n reason = \"\u6B63\u5219\u8868\u8FBE\u5F0F\u672A\u8BBE\u7F6E\";\n } else {\n try {\n triggerMatched = new RegExp(route.regex, \"i\").test(message.text);\n reason = triggerMatched ? `\u6B63\u5219\u5339\u914D\u300C${route.regex}\u300D` : `\u6B63\u5219\u672A\u5339\u914D\u300C${route.regex}\u300D`;\n } catch (error) {\n reason = `\u6B63\u5219\u8868\u8FBE\u5F0F\u4E0D\u53EF\u7528\uFF1A${String(error)}`;\n }\n }\n } else {\n triggerMatched = route.matchType === \"default\";\n reason = triggerMatched ? \"\u9ED8\u8BA4\u5165\u53E3\u5339\u914D\" : \"\u5165\u53E3\u7C7B\u578B\u672A\u8BC6\u522B\";\n }\n\n return {\n routeId: route.id,\n routeName: describeRouteEntry(route),\n enabled: route.enabled !== false,\n trigger: describeRouteTrigger(route),\n routeConnectionId: route.connectionId ?? null,\n messageConnectionId: connectionId,\n connectionMatched: routeConnectionMatches,\n triggerMatched,\n wouldMatch: routeConnectionMatches && route.enabled !== false && triggerMatched,\n reason,\n };\n}\n\nfunction enabledRoutes(config: FeishuConnectorConfig): FeishuRouteConfig[] {\n return (config.routes ?? []).filter((route) => route.enabled !== false);\n}\n\nfunction activeSubscriberEntries(): Array<[string, LarkEventSubscriber]> {\n return [...subscribers.entries()].filter(([, subscriber]) => subscriber.isRunning());\n}\n\nfunction recentRecordsSince(minutes: number): RecentRecord[] {\n const since = Date.now() - minutes * 60 * 1000;\n return recentRecords.filter((item) => Date.parse(item.createdAt) >= since);\n}\n\nfunction buildProductionMonitor(\n config: FeishuConnectorConfig,\n profileAvailability: ProfileAvailability = {},\n): ProductionMonitor {\n const connections = getEnabledConnections(config);\n const availableProfileNames = profileAvailability.availableProfileNames;\n const missingProfileConnections = availableProfileNames\n ? connections.filter((connection) => !availableProfileNames.has(connection.profileName))\n : [];\n const usableConnectionCount = availableProfileNames\n ? connections.length - missingProfileConnections.length\n : undefined;\n const listeningConnections = routeListeningConnections(config);\n const subscriberPlans = planEventSubscribers(config);\n const routes = enabledRoutes(config);\n const activeEntries = activeSubscriberEntries();\n const expectedSubscriberCount = config.enableEventSubscriber === true ? subscriberPlans.length : 0;\n const activeSubscriberIds = new Set(activeEntries.map(([connectionId]) => connectionId));\n const expectedSubscriberIds = new Set(subscriberPlans.map((plan) => plan.primaryConnectionId));\n const activeSubscriberCount = activeEntries.filter(([connectionId]) => expectedSubscriberIds.has(connectionId)).length;\n const missingSubscriberConnectionIds = config.enableEventSubscriber === true\n ? subscriberPlans\n .filter((plan) => !activeSubscriberIds.has(plan.primaryConnectionId))\n .flatMap((plan) => plan.connectionIds)\n : [];\n const recent = recentRecordsSince(30).filter((item) => {\n const connectionId = typeof (item.data as Record<string, unknown> | undefined)?.connectionId === \"string\"\n ? (item.data as Record<string, unknown>).connectionId as string\n : null;\n return !connectionId || expectedSubscriberIds.has(connectionId);\n });\n const recentErrorCount = recent.filter((item) => item.level === \"error\").length;\n const recentWarningCount = recent.filter((item) => item.level === \"warning\").length;\n const recentConflictCount = recent.filter((item) =>\n item.message.includes(\"\u5176\u4ED6\u98DE\u4E66\u673A\u5668\u4EBA\") || item.message.includes(\"\u62A2\u7B54\") || item.message.includes(\"\u547D\u4E2D\u591A\u4E2A\u5165\u53E3\")\n ).length;\n const lastEventAt = recentRecords[0]?.createdAt ?? null;\n const checks: ProductionMonitorCheck[] = [\n {\n key: \"connections\",\n tone: connections.length === 0\n ? \"error\"\n : missingProfileConnections.length > 0 || profileAvailability.profileReadError\n ? \"warning\"\n : \"success\",\n title: \"\u98DE\u4E66\u673A\u5668\u4EBA\",\n detail: connections.length === 0\n ? \"\u8FD8\u6CA1\u6709\u542F\u7528\u98DE\u4E66\u673A\u5668\u4EBA\uFF0C\u98DE\u4E66\u6D88\u606F\u65E0\u6CD5\u8FDB\u5165 Paperclip\u3002\"\n : profileAvailability.profileReadError\n ? `\u5DF2\u914D\u7F6E ${connections.length} \u4E2A\u98DE\u4E66\u673A\u5668\u4EBA\uFF0C\u4F46\u5F53\u524D\u8FD0\u884C\u73AF\u5883\u65E0\u6CD5\u8BFB\u53D6 lark-cli \u6388\u6743\u5217\u8868\uFF1A${profileAvailability.profileReadError}`\n : missingProfileConnections.length > 0\n ? `\u5DF2\u914D\u7F6E ${connections.length} \u4E2A\u98DE\u4E66\u673A\u5668\u4EBA\uFF0C\u5176\u4E2D ${missingProfileConnections.length} \u4E2A\u5F53\u524D\u8FD0\u884C\u73AF\u5883\u8BFB\u4E0D\u5230\u6388\u6743/profile\uFF0C\u9700\u8981\u91CD\u65B0\u7ED1\u5B9A\u6216\u6362\u7528\u53EF\u8FD0\u884C\u673A\u5668\u4EBA\u3002`\n : availableProfileNames\n ? `\u5DF2\u542F\u7528 ${usableConnectionCount ?? connections.length} \u4E2A\u53EF\u8FD0\u884C\u98DE\u4E66\u673A\u5668\u4EBA\uFF1B\u6BCF\u6761\u5165\u53E3\u53EF\u4EE5\u5355\u72EC\u9009\u62E9\u3002`\n : `\u5DF2\u542F\u7528 ${connections.length} \u4E2A\u98DE\u4E66\u673A\u5668\u4EBA\uFF1B\u6BCF\u6761\u5165\u53E3\u53EF\u4EE5\u5355\u72EC\u9009\u62E9\u3002`,\n },\n {\n key: \"routes\",\n tone: routes.length > 0 ? \"success\" : \"error\",\n title: \"\u4E1A\u52A1\u5165\u53E3\",\n detail: routes.length > 0\n ? `\u5DF2\u542F\u7528 ${routes.length} \u6761\u4E1A\u52A1\u5165\u53E3\u3002`\n : \"\u8FD8\u6CA1\u6709\u542F\u7528\u4E1A\u52A1\u5165\u53E3\uFF0C\u6536\u5230\u98DE\u4E66\u6D88\u606F\u4E5F\u4E0D\u4F1A\u5206\u914D\u7ED9\u667A\u80FD\u4F53\u3002\",\n },\n {\n key: \"event-subscriber\",\n tone: config.enableEventSubscriber === true\n ? missingSubscriberConnectionIds.length > 0 ? \"warning\" : \"success\"\n : \"warning\",\n title: \"\u81EA\u52A8\u76D1\u542C\",\n detail: config.enableEventSubscriber === true\n ? expectedSubscriberCount === 0\n ? \"\u76D1\u542C\u5F00\u5173\u5DF2\u5F00\u542F\uFF0C\u4F46\u5F53\u524D\u6CA1\u6709\u542F\u7528\u7684\u4E1A\u52A1\u5165\u53E3\uFF0C\u6240\u4EE5\u4E0D\u4F1A\u542F\u52A8\u673A\u5668\u4EBA\u76D1\u542C\u3002\"\n : missingSubscriberConnectionIds.length > 0\n ? `\u76D1\u542C\u5F00\u5173\u5DF2\u5F00\u542F\uFF0C\u4F46 ${missingSubscriberConnectionIds.length} \u4E2A\u673A\u5668\u4EBA\u6682\u65F6\u6CA1\u6709\u8FD0\u884C\u4E2D\u7684\u76D1\u542C\u8FDB\u7A0B\uFF1B\u76D1\u63A7\u4F1A\u81EA\u52A8\u5C1D\u8BD5\u62C9\u8D77\u3002`\n : `\u76D1\u542C\u8FD0\u884C\u4E2D\uFF1A${activeSubscriberCount}/${expectedSubscriberCount} \u4E2A\u8FDB\u7A0B\u5728\u7EBF\u3002`\n : \"\u76D1\u542C\u5F00\u5173\u672A\u5F00\u542F\uFF0C\u98DE\u4E66\u91CC\u53D1\u6D88\u606F\u4E0D\u4F1A\u81EA\u52A8\u8FDB\u5165 Paperclip\u3002\",\n },\n {\n key: \"real-send\",\n tone: config.dryRunCli === false ? \"success\" : \"warning\",\n title: \"\u771F\u5B9E\u56DE\u590D\",\n detail: config.dryRunCli === false\n ? \"\u771F\u5B9E\u53D1\u9001\u5DF2\u5F00\u542F\uFF0C\u667A\u80FD\u4F53\u5B8C\u6210\u540E\u4F1A\u56DE\u5230\u98DE\u4E66\u3002\"\n : \"\u5F53\u524D\u662F\u9875\u9762\u6A21\u62DF\u6A21\u5F0F\uFF0C\u4E0D\u4F1A\u771F\u5B9E\u56DE\u590D\u98DE\u4E66\u3002\",\n },\n {\n key: \"bot-conflict\",\n tone: recentConflictCount > 0 ? \"warning\" : \"success\",\n title: \"\u62A2\u7B54\u51B2\u7A81\",\n detail: recentConflictCount > 0\n ? `\u6700\u8FD1 30 \u5206\u949F\u68C0\u6D4B\u5230 ${recentConflictCount} \u6B21\u5176\u4ED6\u98DE\u4E66\u673A\u5668\u4EBA\u53EF\u80FD\u5728\u540C\u4E00\u4F1A\u8BDD\u56DE\u590D\u3002\u5EFA\u8BAE\u53EA\u4FDD\u7559\u4E00\u4E2A\u673A\u5668\u4EBA\u76D1\u542C\u540C\u4E00\u5165\u53E3\u3002`\n : \"\u6CA1\u6709\u53D1\u73B0\u5176\u4ED6\u673A\u5668\u4EBA\u62A2\u7B54\u540C\u4E00\u5165\u53E3\u3002\",\n },\n {\n key: \"recent-errors\",\n tone: recentErrorCount > 0 ? \"error\" : recentWarningCount > 0 ? \"warning\" : \"success\",\n title: \"\u6700\u8FD1 30 \u5206\u949F\",\n detail: recentErrorCount > 0\n ? `\u53D1\u73B0 ${recentErrorCount} \u6761\u9519\u8BEF\u3001${recentWarningCount} \u6761\u63D0\u9192\uFF0C\u8BF7\u770B\u4E8B\u4EF6\u65E5\u5FD7\u3002`\n : recentWarningCount > 0\n ? `\u6CA1\u6709\u9519\u8BEF\uFF0C\u4F46\u6709 ${recentWarningCount} \u6761\u63D0\u9192\u3002`\n : \"\u6CA1\u6709\u53D1\u73B0\u9519\u8BEF\u6216\u63D0\u9192\u3002\",\n },\n ];\n const hasError = checks.some((item) => item.tone === \"error\");\n const hasWarning = checks.some((item) => item.tone === \"warning\");\n return {\n health: hasError ? \"error\" : hasWarning ? \"warning\" : \"ok\",\n message: hasError\n ? \"\u751F\u4EA7\u76D1\u63A7\u53D1\u73B0\u963B\u585E\u9879\"\n : hasWarning\n ? \"\u751F\u4EA7\u76D1\u63A7\u53D1\u73B0\u9700\u8981\u786E\u8BA4\u7684\u98CE\u9669\u9879\"\n : \"\u751F\u4EA7\u76D1\u63A7\u6B63\u5E38\",\n checkedAt: new Date().toISOString(),\n enabledConnectionCount: connections.length,\n usableConnectionCount,\n missingProfileConnectionIds: missingProfileConnections.map((connection) => connection.id),\n profileReadError: profileAvailability.profileReadError ?? null,\n enabledRouteCount: routes.length,\n expectedSubscriberCount,\n activeSubscriberCount,\n missingSubscriberConnectionIds,\n recentErrorCount,\n recentWarningCount,\n lastEventAt,\n lastWatchdogAt,\n checks,\n };\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> | null {\n return typeof value === \"object\" && value !== null && !Array.isArray(value)\n ? value as Record<string, unknown>\n : null;\n}\n\nfunction assertSqlIdentifier(value: string, label: string): string {\n if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(value)) {\n throw new Error(`Unsafe SQL ${label}: ${value}`);\n }\n return value;\n}\n\nfunction dbTable(namespace: string, table: string): string {\n return `${assertSqlIdentifier(namespace, \"namespace\")}.${assertSqlIdentifier(table, \"table\")}`;\n}\n\nasync function executePluginDb(ctx: PluginContext, sql: string, params: unknown[] = []): Promise<void> {\n if (!ctx.db.namespace) return;\n try {\n await ctx.db.execute(sql, params);\n } catch (error) {\n ctx.logger.warn?.(\"Feishu connector database write failed\", {\n error: error instanceof Error ? error.message : String(error),\n });\n }\n}\n\nfunction jsonParam(value: unknown): string {\n return JSON.stringify(value ?? null);\n}\n\nfunction durableRecordId(prefix: string, entry: RecentRecord): string {\n const hash = crypto\n .createHash(\"sha256\")\n .update(JSON.stringify({\n createdAt: entry.createdAt,\n level: entry.level,\n message: entry.message,\n data: entry.data ?? null,\n }))\n .digest(\"hex\")\n .slice(0, 32);\n return `${prefix}-${hash}`;\n}\n\nfunction conflictRecordId(entry: RecentRecord): string {\n const data = asRecord(entry.data);\n const messageId = readString(data?.messageId);\n const selectedRouteId = readString(data?.selectedRouteId, data?.routeId);\n if (messageId) {\n return `conflict-${crypto\n .createHash(\"sha256\")\n .update([messageId, selectedRouteId ?? \"\", entry.message].join(\":\"))\n .digest(\"hex\")\n .slice(0, 32)}`;\n }\n return durableRecordId(\"conflict\", entry);\n}\n\nfunction isConflictRecord(entry: RecentRecord): boolean {\n const data = asRecord(entry.data);\n return data?.conflictDetected === true\n || entry.message.includes(\"\u540C\u4E00\u6761\u98DE\u4E66\u6D88\u606F\u547D\u4E2D\u591A\u4E2A\u5165\u53E3\")\n || entry.message.includes(\"\u5176\u4ED6\u98DE\u4E66\u673A\u5668\u4EBA\")\n || entry.message.includes(\"\u62A2\u7B54\");\n}\n\nasync function persistRecentRecord(ctx: PluginContext, entry: RecentRecord): Promise<void> {\n const data = asRecord(entry.data);\n const eventId = durableRecordId(\"event\", entry);\n await ctx.entities.upsert({\n entityType: EVENT_LOG_ENTITY_TYPE,\n scopeKind: \"instance\",\n externalId: eventId,\n title: entry.message,\n status: entry.level,\n data: {\n level: entry.level,\n message: entry.message,\n createdAt: entry.createdAt,\n payload: entry.data ?? null,\n connectionId: readString(data?.connectionId) ?? null,\n routeId: readString(data?.routeId, data?.selectedRouteId) ?? null,\n issueId: readString(data?.issueId) ?? null,\n messageId: readString(data?.messageId) ?? null,\n },\n });\n await executePluginDb(\n ctx,\n `INSERT INTO ${dbTable(ctx.db.namespace, DB_TABLES.eventLogs)}\n (id, level, message, connection_id, entry_id, issue_id, feishu_message_id, payload, created_at)\n VALUES ($1, $2, $3, $4, $5, $6, $7, $8::jsonb, $9::timestamptz)\n ON CONFLICT (id) DO UPDATE SET\n level = EXCLUDED.level,\n message = EXCLUDED.message,\n connection_id = EXCLUDED.connection_id,\n entry_id = EXCLUDED.entry_id,\n issue_id = EXCLUDED.issue_id,\n feishu_message_id = EXCLUDED.feishu_message_id,\n payload = EXCLUDED.payload`,\n [\n eventId,\n entry.level,\n entry.message,\n readString(data?.connectionId) ?? null,\n readString(data?.routeId, data?.selectedRouteId) ?? null,\n readString(data?.issueId) ?? null,\n readString(data?.messageId) ?? null,\n jsonParam(entry.data ?? {}),\n entry.createdAt,\n ],\n );\n\n if (!isConflictRecord(entry)) return;\n const conflictId = conflictRecordId(entry);\n await ctx.entities.upsert({\n entityType: CONFLICT_ENTITY_TYPE,\n scopeKind: \"instance\",\n externalId: conflictId,\n title: entry.message,\n status: \"open\",\n data: {\n level: entry.level,\n message: entry.message,\n createdAt: entry.createdAt,\n payload: entry.data ?? null,\n connectionId: readString(data?.connectionId) ?? null,\n selectedRouteId: readString(data?.selectedRouteId, data?.routeId) ?? null,\n messageId: readString(data?.messageId) ?? null,\n },\n });\n await executePluginDb(\n ctx,\n `INSERT INTO ${dbTable(ctx.db.namespace, DB_TABLES.conflicts)}\n (id, status, conflict_type, connection_id, selected_entry_id, feishu_message_id, summary, payload, created_at, updated_at)\n VALUES ($1, 'open', $2, $3, $4, $5, $6, $7::jsonb, $8::timestamptz, $8::timestamptz)\n ON CONFLICT (id) DO UPDATE SET\n status = EXCLUDED.status,\n connection_id = EXCLUDED.connection_id,\n selected_entry_id = EXCLUDED.selected_entry_id,\n feishu_message_id = EXCLUDED.feishu_message_id,\n summary = EXCLUDED.summary,\n payload = EXCLUDED.payload,\n updated_at = EXCLUDED.updated_at`,\n [\n conflictId,\n readString(data?.reason) ?? \"routing\",\n readString(data?.connectionId) ?? null,\n readString(data?.selectedRouteId, data?.routeId) ?? null,\n readString(data?.messageId) ?? null,\n entry.message,\n jsonParam(entry.data ?? {}),\n entry.createdAt,\n ],\n );\n}\n\nasync function syncConfigToDatabase(ctx: PluginContext, config: FeishuConnectorConfig): Promise<void> {\n if (!ctx.db.namespace) return;\n for (const connection of config.connections ?? []) {\n await executePluginDb(\n ctx,\n `INSERT INTO ${dbTable(ctx.db.namespace, DB_TABLES.bots)}\n (id, display_name, app_id, profile_name, enabled, bot_aliases, raw_config, updated_at)\n VALUES ($1, $2, $3, $4, $5, $6::jsonb, $7::jsonb, now())\n ON CONFLICT (id) DO UPDATE SET\n display_name = EXCLUDED.display_name,\n app_id = EXCLUDED.app_id,\n profile_name = EXCLUDED.profile_name,\n enabled = EXCLUDED.enabled,\n bot_aliases = EXCLUDED.bot_aliases,\n raw_config = EXCLUDED.raw_config,\n updated_at = now()`,\n [\n connection.id,\n connection.name?.trim() || connection.profileName,\n connection.appId ?? null,\n connection.profileName,\n connection.enabled !== false,\n jsonParam(connection.botAliases ?? []),\n jsonParam(connection),\n ],\n );\n }\n\n for (const route of config.routes ?? []) {\n await executePluginDb(\n ctx,\n `INSERT INTO ${dbTable(ctx.db.namespace, DB_TABLES.entries)}\n (id, display_name, connection_id, enabled, match_type, trigger_label, company_ref, company_id, project_id,\n target_agent_id, target_agent_name, reply_mode, base_sink_id, priority, raw_config, updated_at)\n VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15::jsonb, now())\n ON CONFLICT (id) DO UPDATE SET\n display_name = EXCLUDED.display_name,\n connection_id = EXCLUDED.connection_id,\n enabled = EXCLUDED.enabled,\n match_type = EXCLUDED.match_type,\n trigger_label = EXCLUDED.trigger_label,\n company_ref = EXCLUDED.company_ref,\n company_id = EXCLUDED.company_id,\n project_id = EXCLUDED.project_id,\n target_agent_id = EXCLUDED.target_agent_id,\n target_agent_name = EXCLUDED.target_agent_name,\n reply_mode = EXCLUDED.reply_mode,\n base_sink_id = EXCLUDED.base_sink_id,\n priority = EXCLUDED.priority,\n raw_config = EXCLUDED.raw_config,\n updated_at = now()`,\n [\n route.id,\n describeRouteEntry(route),\n route.connectionId ?? null,\n route.enabled !== false,\n route.matchType,\n describeRouteTrigger(route),\n route.companyRef ?? null,\n route.companyId ?? null,\n route.projectId ?? null,\n route.targetAgentId ?? null,\n route.targetAgentName ?? route.targetAgentRef ?? null,\n route.replyMode ?? \"thread\",\n route.baseSinkId ?? null,\n route.priority ?? 10,\n jsonParam(route),\n ],\n );\n }\n\n for (const definition of FEISHU_CAPABILITY_DEFINITIONS) {\n await executePluginDb(\n ctx,\n `INSERT INTO ${dbTable(ctx.db.namespace, DB_TABLES.capabilities)}\n (key, title, group_name, implemented, enabled, risk, tool_name, lark_cli_commands, recommended_scopes, raw_definition, updated_at)\n VALUES ($1, $2, $3, $4, $5, $6, $7, $8::jsonb, $9::jsonb, $10::jsonb, now())\n ON CONFLICT (key) DO UPDATE SET\n title = EXCLUDED.title,\n group_name = EXCLUDED.group_name,\n implemented = EXCLUDED.implemented,\n enabled = EXCLUDED.enabled,\n risk = EXCLUDED.risk,\n tool_name = EXCLUDED.tool_name,\n lark_cli_commands = EXCLUDED.lark_cli_commands,\n recommended_scopes = EXCLUDED.recommended_scopes,\n raw_definition = EXCLUDED.raw_definition,\n updated_at = now()`,\n [\n definition.key,\n definition.title,\n definition.group,\n definition.implemented,\n isFeishuCapabilityEnabled(config, definition),\n definition.risk,\n definition.toolName ?? null,\n jsonParam(definition.larkCliCommands),\n jsonParam(definition.recommendedScopes),\n jsonParam(definition),\n ],\n );\n }\n\n for (const capability of config.capabilities ?? []) {\n if (capability.scope === \"entry\" && capability.routeId) {\n await executePluginDb(\n ctx,\n `INSERT INTO ${dbTable(ctx.db.namespace, DB_TABLES.entryCapabilities)}\n (entry_id, capability_key, enabled, raw_config, updated_at)\n VALUES ($1, $2, $3, $4::jsonb, now())\n ON CONFLICT (entry_id, capability_key) DO UPDATE SET\n enabled = EXCLUDED.enabled,\n raw_config = EXCLUDED.raw_config,\n updated_at = now()`,\n [capability.routeId, capability.key, capability.enabled === true, jsonParam(capability)],\n );\n }\n if (capability.scope === \"agent\" && capability.agentId) {\n await executePluginDb(\n ctx,\n `INSERT INTO ${dbTable(ctx.db.namespace, DB_TABLES.agentCapabilities)}\n (agent_id, capability_key, enabled, raw_config, updated_at)\n VALUES ($1, $2, $3, $4::jsonb, now())\n ON CONFLICT (agent_id, capability_key) DO UPDATE SET\n enabled = EXCLUDED.enabled,\n raw_config = EXCLUDED.raw_config,\n updated_at = now()`,\n [capability.agentId, capability.key, capability.enabled === true, jsonParam(capability)],\n );\n }\n }\n}\n\nfunction retryQueueScope() {\n return {\n scopeKind: \"instance\" as const,\n namespace: RETRY_QUEUE_NAMESPACE,\n stateKey: RETRY_QUEUE_STATE_KEY,\n };\n}\n\nfunction retryQueueId(kind: RetryQueueItem[\"kind\"], connectionId: string, args: string[]): string {\n const hash = crypto\n .createHash(\"sha256\")\n .update([kind, connectionId, ...args].join(\"\\0\"))\n .digest(\"hex\")\n .slice(0, 32);\n return `retry-${hash}`;\n}\n\nfunction normalizeRetryQueueItem(value: unknown): RetryQueueItem | null {\n const recordValue = asRecord(value);\n if (!recordValue) return null;\n const kind = recordValue.kind === \"base_record\" ? \"base_record\" : recordValue.kind === \"feishu_reply\" ? \"feishu_reply\" : null;\n const status = recordValue.status === \"succeeded\" || recordValue.status === \"failed\" || recordValue.status === \"queued\"\n ? recordValue.status\n : null;\n const id = readString(recordValue.id);\n const connectionId = readString(recordValue.connectionId);\n const profileName = readString(recordValue.profileName);\n const reason = readString(recordValue.reason) ?? \"\u98DE\u4E66\u6295\u9012\u5931\u8D25\";\n const args = Array.isArray(recordValue.args)\n ? recordValue.args.filter((item): item is string => typeof item === \"string\")\n : [];\n if (!kind || !status || !id || !connectionId || !profileName || args.length === 0) return null;\n const createdAt = readString(recordValue.createdAt) ?? new Date().toISOString();\n const updatedAt = readString(recordValue.updatedAt) ?? createdAt;\n return {\n id,\n kind,\n status,\n connectionId,\n profileName,\n args,\n reason,\n routeId: readString(recordValue.routeId),\n issueId: readString(recordValue.issueId),\n messageId: readString(recordValue.messageId),\n attemptCount: typeof recordValue.attemptCount === \"number\" ? Math.max(0, recordValue.attemptCount) : 0,\n lastError: readString(recordValue.lastError),\n createdAt,\n updatedAt,\n nextAttemptAt: readString(recordValue.nextAttemptAt),\n lastAttemptAt: readString(recordValue.lastAttemptAt),\n };\n}\n\nasync function readRetryQueue(ctx: PluginContext): Promise<RetryQueueItem[]> {\n const stored = await ctx.state.get(retryQueueScope());\n const rawItems = Array.isArray(stored)\n ? stored\n : Array.isArray(asRecord(stored)?.items)\n ? asRecord(stored)!.items as unknown[]\n : [];\n return rawItems\n .map((item) => normalizeRetryQueueItem(item))\n .filter((item): item is RetryQueueItem => item !== null);\n}\n\nasync function writeRetryQueue(ctx: PluginContext, items: RetryQueueItem[]): Promise<void> {\n await ctx.state.set(retryQueueScope(), {\n items: items\n .slice()\n .sort((a, b) => Date.parse(b.updatedAt) - Date.parse(a.updatedAt))\n .slice(0, RETRY_QUEUE_LIMIT),\n updatedAt: new Date().toISOString(),\n });\n}\n\nfunction retryQueueSummary(items: RetryQueueItem[]): RetryQueueSummary {\n const pendingItems = items.filter((item) => item.status === \"queued\");\n return {\n totalCount: items.length,\n pendingCount: pendingItems.length,\n failedCount: items.filter((item) => item.status === \"failed\").length,\n succeededCount: items.filter((item) => item.status === \"succeeded\").length,\n items: items\n .slice()\n .sort((a, b) => Date.parse(b.updatedAt) - Date.parse(a.updatedAt))\n .slice(0, 20),\n };\n}\n\nfunction larkResultError(result: LarkCliResult | null): string {\n if (!result) return \"\u6CA1\u6709\u53EF\u6295\u9012\u7684\u98DE\u4E66\u76EE\u6807\u3002\";\n return result.stderr.trim() || result.stdout.trim() || `lark-cli exit ${result.code ?? \"unknown\"}`;\n}\n\nasync function enqueueRetryItem(\n ctx: PluginContext,\n input: {\n kind: RetryQueueItem[\"kind\"];\n connection: FeishuConnectionConfig;\n args: string[];\n reason: string;\n result: LarkCliResult | null;\n routeId?: string;\n issueId?: string;\n messageId?: string;\n },\n): Promise<RetryQueueItem> {\n const now = new Date().toISOString();\n const id = retryQueueId(input.kind, input.connection.id, input.args);\n const items = await readRetryQueue(ctx);\n const existing = items.find((item) => item.id === id);\n const nextItem: RetryQueueItem = {\n ...existing,\n id,\n kind: input.kind,\n status: \"queued\",\n connectionId: input.connection.id,\n profileName: input.connection.profileName,\n args: input.args,\n reason: input.reason,\n routeId: input.routeId ?? existing?.routeId,\n issueId: input.issueId ?? existing?.issueId,\n messageId: input.messageId ?? existing?.messageId,\n attemptCount: existing?.attemptCount ?? 0,\n lastError: larkResultError(input.result),\n createdAt: existing?.createdAt ?? now,\n updatedAt: now,\n nextAttemptAt: now,\n };\n await writeRetryQueue(ctx, [nextItem, ...items.filter((item) => item.id !== id)]);\n record(\"warning\", \"\u5DF2\u52A0\u5165\u98DE\u4E66\u91CD\u8BD5\u961F\u5217\", {\n id,\n kind: input.kind,\n connectionId: input.connection.id,\n profileName: input.connection.profileName,\n routeId: nextItem.routeId,\n issueId: nextItem.issueId,\n messageId: nextItem.messageId,\n error: nextItem.lastError,\n });\n return nextItem;\n}\n\nasync function retryFailedDeliveries(\n ctx: PluginContext,\n config: FeishuConnectorConfig,\n): Promise<{\n ok: boolean;\n attemptedCount: number;\n successCount: number;\n failedCount: number;\n retryQueue: RetryQueueSummary;\n results: Array<{ id: string; ok: boolean; error?: string }>;\n}> {\n const items = await readRetryQueue(ctx);\n const retryable = items.filter((item) => item.status === \"queued\" || item.status === \"failed\");\n const results: Array<{ id: string; ok: boolean; error?: string }> = [];\n const byId = new Map(items.map((item) => [item.id, item]));\n\n for (const item of retryable) {\n const attemptedAt = new Date().toISOString();\n const result = await runLarkCli({\n bin: larkCliBin(config),\n args: item.args,\n dryRun: false,\n });\n const updated: RetryQueueItem = {\n ...item,\n status: result.ok ? \"succeeded\" : \"failed\",\n attemptCount: item.attemptCount + 1,\n lastError: result.ok ? undefined : larkResultError(result),\n lastAttemptAt: attemptedAt,\n updatedAt: attemptedAt,\n nextAttemptAt: result.ok ? undefined : new Date(Date.now() + 5 * 60 * 1000).toISOString(),\n };\n byId.set(item.id, updated);\n results.push({ id: item.id, ok: result.ok, error: updated.lastError });\n record(result.ok ? \"info\" : \"error\", \"\u98DE\u4E66\u91CD\u8BD5\u961F\u5217\u5DF2\u6267\u884C\u4E00\u6761\u6295\u9012\", {\n id: item.id,\n kind: item.kind,\n ok: result.ok,\n error: updated.lastError,\n });\n }\n\n const nextItems = [...byId.values()];\n await writeRetryQueue(ctx, nextItems);\n const summary = retryQueueSummary(nextItems);\n const failedCount = results.filter((item) => !item.ok).length;\n return {\n ok: failedCount === 0,\n attemptedCount: results.length,\n successCount: results.length - failedCount,\n failedCount,\n retryQueue: summary,\n results,\n };\n}\n\nfunction readString(...values: unknown[]): string | undefined {\n for (const value of values) {\n if (typeof value === \"string\" && value.trim().length > 0) return value.trim();\n }\n return undefined;\n}\n\nfunction truncateText(value: string, maxLength = 700): string {\n return value.length > maxLength ? `${value.slice(0, maxLength)}...` : value;\n}\n\nfunction larkCliBin(config: FeishuConnectorConfig): string {\n return resolveLarkCliBin({ configuredBin: config.larkCliBin });\n}\n\nfunction summarizeLarkResult(result: LarkCliResult | null, redactions: string[] = []): Record<string, unknown> {\n if (!result) return { ok: false, skipped: true };\n const redact = (value: string) => redactions.reduce(\n (current, secret) => redactSecretFromText(current, secret),\n value,\n );\n const stderr = redact(result.stderr.trim());\n const stdout = redact(result.stdout.trim());\n return {\n ok: result.ok,\n dryRun: result.dryRun === true,\n code: result.code,\n stderr: stderr ? truncateText(stderr) : undefined,\n stdout: !result.ok && stdout ? truncateText(stdout) : undefined,\n };\n}\n\nfunction sameAppIdProfile(profiles: ProfileRow[], appId: string): ProfileRow | undefined {\n return profiles.find((profile) => profile.appId === appId);\n}\n\nfunction extractDuplicateAppIdProfileName(message: string): string | null {\n const match = message.match(/app-id\\s+\"[^\"]+\"\\s+is already used by profile\\s+\"([^\"]+)\"/i);\n return match?.[1] ?? null;\n}\n\nfunction redactSecretFromText(value: string, secret: string): string {\n return secret ? value.split(secret).join(\"[redacted]\") : value;\n}\n\nfunction larkIdempotencyKey(prefix: string, ...parts: string[]): string {\n const hash = crypto.createHash(\"sha256\").update(parts.join(\":\")).digest(\"hex\").slice(0, 32);\n return `pc-${prefix}-${hash}`;\n}\n\nfunction parseJsonRecord(value: string): Record<string, unknown> | null {\n try {\n return asRecord(JSON.parse(stripAnsiText(value)));\n } catch {\n return null;\n }\n}\n\nfunction stripAnsiText(value: string): string {\n return value.replace(/\\u001b\\[[0-9;]*m/g, \"\");\n}\n\nfunction webhookPayload(input: { parsedBody?: unknown; rawBody: string }): Record<string, unknown> {\n return asRecord(input.parsedBody) ?? parseJsonRecord(input.rawBody) ?? {};\n}\n\nfunction webhookHeader(headers: Record<string, string | string[]>, name: string): string | undefined {\n const needle = name.toLowerCase();\n for (const [key, value] of Object.entries(headers)) {\n if (key.toLowerCase() !== needle) continue;\n return Array.isArray(value) ? value[0] : value;\n }\n return undefined;\n}\n\nfunction timingSafeStringEquals(actual: string, expected: string): boolean {\n const actualBuffer = Buffer.from(actual);\n const expectedBuffer = Buffer.from(expected);\n return actualBuffer.length === expectedBuffer.length && crypto.timingSafeEqual(actualBuffer, expectedBuffer);\n}\n\nfunction decryptFeishuWebhookPayload(encrypt: string, encryptKey: string): Record<string, unknown> {\n const encrypted = Buffer.from(encrypt, \"base64\");\n if (encrypted.length <= 16) throw new Error(\"\u98DE\u4E66\u52A0\u5BC6\u4E8B\u4EF6\u683C\u5F0F\u4E0D\u6B63\u786E\uFF1A\u5BC6\u6587\u592A\u77ED\u3002\");\n const key = crypto.createHash(\"sha256\").update(encryptKey).digest();\n const iv = encrypted.subarray(0, 16);\n const ciphertext = encrypted.subarray(16);\n const decipher = crypto.createDecipheriv(\"aes-256-cbc\", key, iv);\n const decrypted = Buffer.concat([decipher.update(ciphertext), decipher.final()]).toString(\"utf8\");\n const parsed = parseJsonRecord(decrypted);\n if (!parsed) throw new Error(\"\u98DE\u4E66\u52A0\u5BC6\u4E8B\u4EF6\u89E3\u5BC6\u540E\u4E0D\u662F\u6709\u6548 JSON\u3002\");\n return parsed;\n}\n\nfunction verifyFeishuWebhookSignature(input: {\n headers: Record<string, string | string[]>;\n rawBody: string;\n parsedBody?: unknown;\n}, encryptKey: string, requireSignature: boolean): boolean {\n const signature = readString(webhookHeader(input.headers, \"x-lark-signature\"));\n const timestamp = readString(\n webhookHeader(input.headers, \"x-lark-request-timestamp\"),\n webhookHeader(input.headers, \"x-lark-timestamp\"),\n );\n const nonce = readString(\n webhookHeader(input.headers, \"x-lark-request-nonce\"),\n webhookHeader(input.headers, \"x-lark-nonce\"),\n );\n if (!signature || !timestamp || !nonce) {\n if (requireSignature) throw new Error(\"\u98DE\u4E66\u516C\u7F51\u56DE\u8C03\u7F3A\u5C11\u7B7E\u540D\u5934\uFF0C\u5DF2\u62D2\u7EDD\u3002\");\n return false;\n }\n const rawBody = input.rawBody || JSON.stringify(input.parsedBody ?? {});\n const digest = crypto.createHash(\"sha256\").update(`${timestamp}${nonce}${encryptKey}${rawBody}`).digest(\"hex\");\n if (!timingSafeStringEquals(signature, digest)) throw new Error(\"\u98DE\u4E66\u516C\u7F51\u56DE\u8C03\u7B7E\u540D\u6821\u9A8C\u5931\u8D25\u3002\");\n return true;\n}\n\nasync function resolveWebhookSecret(ctx: PluginContext, secretRef: string | undefined, label: string): Promise<string | undefined> {\n if (!secretRef) return undefined;\n try {\n return await ctx.secrets.resolve(secretRef);\n } catch (error) {\n throw new Error(`\u65E0\u6CD5\u8BFB\u53D6${label} Secret Ref\u300C${secretRef}\u300D\uFF1A${error instanceof Error ? error.message : String(error)}`);\n }\n}\n\nasync function prepareWebhookPayload(\n ctx: PluginContext,\n config: FeishuConnectorConfig,\n input: { headers: Record<string, string | string[]>; parsedBody?: unknown; rawBody: string },\n): Promise<{ payload: Record<string, unknown>; encrypted: boolean; tokenVerified: boolean; signatureVerified: boolean }> {\n const basePayload = webhookPayload(input);\n const encrypt = readString(basePayload.encrypt);\n const encryptKey = await resolveWebhookSecret(ctx, config.eventEncryptKeyRef, \"\u98DE\u4E66\u4E8B\u4EF6 Encrypt Key\");\n const signatureVerified = encryptKey\n ? verifyFeishuWebhookSignature(input, encryptKey, config.eventRequireSignature === true)\n : false;\n if (config.eventRequireSignature === true && !encryptKey) {\n throw new Error(\"\u5DF2\u5F00\u542F\u516C\u7F51\u56DE\u8C03\u7B7E\u540D\u6821\u9A8C\uFF0C\u4F46\u6CA1\u6709\u914D\u7F6E Encrypt Key Secret Ref\u3002\");\n }\n if (encrypt && !encryptKey) {\n throw new Error(\"\u6536\u5230\u98DE\u4E66\u52A0\u5BC6\u4E8B\u4EF6\uFF0C\u4F46\u6CA1\u6709\u914D\u7F6E Encrypt Key Secret Ref\uFF0C\u65E0\u6CD5\u89E3\u5BC6\u3002\");\n }\n const payload = encrypt && encryptKey ? decryptFeishuWebhookPayload(encrypt, encryptKey) : basePayload;\n const verificationToken = await resolveWebhookSecret(ctx, config.eventVerificationTokenRef, \"\u98DE\u4E66\u4E8B\u4EF6 Verification Token\");\n const actualToken = readString(payload.token, asRecord(payload.header)?.token);\n if (!verificationToken) {\n return { payload, encrypted: Boolean(encrypt), tokenVerified: false, signatureVerified };\n }\n if (!actualToken || !timingSafeStringEquals(actualToken, verificationToken)) {\n throw new Error(\"\u98DE\u4E66\u4E8B\u4EF6 Verification Token \u6821\u9A8C\u5931\u8D25\u3002\");\n }\n return { payload, encrypted: Boolean(encrypt), tokenVerified: true, signatureVerified };\n}\n\nfunction webhookAppId(payload: Record<string, unknown>): string | undefined {\n const header = asRecord(payload.header) ?? {};\n const event = asRecord(payload.event) ?? {};\n return readString(\n header.app_id,\n header.appId,\n payload.app_id,\n payload.appId,\n event.app_id,\n event.appId,\n );\n}\n\nfunction webhookConnectionIds(config: FeishuConnectorConfig, payload: Record<string, unknown>): string[] {\n const enabled = getEnabledConnections(config);\n const appId = webhookAppId(payload);\n if (appId) {\n const matching = enabled.filter((connection) => connection.appId === appId);\n if (matching.length > 0) return matching.map((connection) => connection.id);\n }\n return enabled.map((connection) => connection.id);\n}\n\nfunction firstMgetMessage(result: LarkCliResult): Record<string, unknown> | null {\n const parsed = parseJsonRecord(result.stdout.trim());\n const data = asRecord(parsed?.data);\n const messages = Array.isArray(data?.messages) ? data.messages : [];\n return asRecord(messages[0]);\n}\n\nasync function enrichChatName(\n config: FeishuConnectorConfig,\n connection: FeishuConnectionConfig,\n message: FeishuInboundMessage,\n): Promise<FeishuInboundMessage> {\n if (message.chatName || !message.chatId || config.dryRunCli === true) return message;\n\n const result = await runLarkCli({\n bin: larkCliBin(config),\n args: [\n \"--profile\",\n connection.profileName,\n \"im\",\n \"chats\",\n \"get\",\n \"--as\",\n \"bot\",\n \"--params\",\n JSON.stringify({ chat_id: message.chatId }),\n \"--format\",\n \"json\",\n ],\n timeoutMs: 8_000,\n });\n if (!result.ok) {\n record(\"warning\", \"\u98DE\u4E66\u4F1A\u8BDD\u540D\u79F0\u8865\u5168\u5931\u8D25\", {\n chatId: message.chatId,\n result: summarizeLarkResult(result),\n });\n return message;\n }\n\n const parsed = parseJsonRecord(result.stdout.trim());\n const data = asRecord(parsed?.data);\n const chat = asRecord(data?.chat) ?? asRecord(parsed?.chat);\n const chatName = readString(data?.name, data?.chat_name, chat?.name, chat?.chat_name, parsed?.name);\n return chatName ? { ...message, chatName } : message;\n}\n\nasync function enrichInboundMessage(\n config: FeishuConnectorConfig,\n connection: FeishuConnectionConfig,\n message: FeishuInboundMessage,\n): Promise<FeishuInboundMessage> {\n const alreadyHasCoreFields = !!(message.senderName && message.senderOpenId && message.threadId);\n if (alreadyHasCoreFields && (message.chatName || !message.chatId)) return message;\n if (config.dryRunCli === true) return message;\n\n let enrichedMessage = message;\n if (!alreadyHasCoreFields) {\n const result = await runLarkCli({\n bin: larkCliBin(config),\n args: buildMessageGetArgs({\n profileName: connection.profileName,\n identity: \"bot\",\n messageId: message.messageId,\n }),\n timeoutMs: 15_000,\n });\n if (!result.ok) {\n record(\"warning\", \"\u98DE\u4E66\u6D88\u606F\u53D1\u8D77\u4EBA\u8865\u5168\u5931\u8D25\", {\n messageId: message.messageId,\n result: summarizeLarkResult(result),\n });\n return enrichChatName(config, connection, enrichedMessage);\n }\n\n const detail = firstMgetMessage(result);\n if (detail) {\n const sender = asRecord(detail.sender);\n const chat = asRecord(detail.chat);\n const senderId = readString(sender?.id);\n const senderIdType = readString(sender?.id_type);\n enrichedMessage = {\n ...enrichedMessage,\n chatId: enrichedMessage.chatId ?? readString(detail.chat_id),\n chatName: enrichedMessage.chatName ?? readString(detail.chat_name, detail.chatName, chat?.name),\n threadId: enrichedMessage.threadId ?? readString(detail.thread_id),\n rootMessageId: enrichedMessage.rootMessageId ?? readString(detail.root_id),\n senderName: enrichedMessage.senderName ?? readString(sender?.name),\n senderOpenId: enrichedMessage.senderOpenId ?? (senderIdType === \"open_id\" ? senderId : undefined),\n senderUserId: enrichedMessage.senderUserId ?? (senderIdType === \"user_id\" ? senderId : undefined),\n senderType: enrichedMessage.senderType ?? readString(detail.sender_type, detail.senderType, sender?.type, sender?.sender_type, sender?.senderType),\n senderAppId: enrichedMessage.senderAppId ?? readString(detail.sender_app_id, detail.senderAppId, sender?.app_id, sender?.appId),\n };\n }\n }\n\n return enrichChatName(config, connection, enrichedMessage);\n}\n\nfunction quickReplyText(config: FeishuConnectorConfig, message: FeishuInboundMessage): string | null {\n if (config.enableQuickReply === false) return null;\n const stripped = message.text\n .replace(/@\\S+\\s*/g, \"\")\n .replace(/\\s+/g, \" \")\n .trim()\n .toLowerCase();\n if (!stripped) return null;\n try {\n const pattern = new RegExp(config.quickReplyRegex ?? \"\", \"i\");\n if (!pattern.test(stripped)) return null;\n } catch {\n return null;\n }\n return config.quickReplyText ?? \"ok\";\n}\n\nasync function getConfig(ctx: PluginContext): Promise<FeishuConnectorConfig> {\n return normalizeConfig(await ctx.config.get());\n}\n\nasync function listLarkProfiles(config: FeishuConnectorConfig): Promise<{ profiles: ProfileRow[]; error?: string }> {\n const result = await runLarkCli({\n bin: larkCliBin(config),\n args: [\"profile\", \"list\"],\n timeoutMs: 10_000,\n });\n if (!result.ok) {\n return {\n profiles: [],\n error: truncateText(result.stderr || result.stdout || \"lark-cli profile list \u6267\u884C\u5931\u8D25\", 500),\n };\n }\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(result.stdout);\n } catch {\n parsed = [];\n }\n const rows = Array.isArray(parsed) ? parsed : [];\n const profiles = rows.map((row) => {\n const item = asRecord(row) ?? {};\n return {\n name: readString(item.name) ?? \"\",\n appId: readString(item.appId) ?? null,\n brand: readString(item.brand) ?? null,\n active: item.active === true,\n user: readString(item.user) ?? null,\n tokenStatus: readString(item.tokenStatus) ?? null,\n };\n }).filter((profile) => profile.name.length > 0);\n const enrichedProfiles = await Promise.all(profiles.map(async (profile) => ({\n ...profile,\n ...await readBotInfo(config, profile.name),\n })));\n return {\n profiles: enrichedProfiles,\n };\n}\n\nasync function readBotInfo(\n config: FeishuConnectorConfig,\n profileName: string,\n): Promise<Pick<ProfileRow, \"botName\" | \"botOpenId\" | \"botAvatarUrl\" | \"botActivateStatus\">> {\n const result = await runLarkCli({\n bin: larkCliBin(config),\n args: [\n \"--profile\",\n profileName,\n \"api\",\n \"GET\",\n \"/open-apis/bot/v3/info\",\n \"--as\",\n \"bot\",\n \"--format\",\n \"json\",\n ],\n timeoutMs: 8_000,\n });\n if (!result.ok) return {};\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(result.stdout);\n } catch {\n return {};\n }\n const root = asRecord(parsed);\n const data = asRecord(root?.data);\n const bot = asRecord(root?.bot) ?? asRecord(data?.bot) ?? data;\n if (!bot) return {};\n return {\n botName: readString(bot.app_name, bot.name) ?? null,\n botOpenId: readString(bot.open_id) ?? null,\n botAvatarUrl: readString(bot.avatar_url) ?? null,\n botActivateStatus: typeof bot.activate_status === \"number\" ? bot.activate_status : null,\n };\n}\n\nasync function searchFeishuDirectory(\n config: FeishuConnectorConfig,\n params: Record<string, unknown>,\n): Promise<{\n profileName: string | null;\n chats: DirectoryChatRow[];\n users: DirectoryUserRow[];\n chatError?: string;\n userError?: string;\n}> {\n const profileName = readString(params.profileName)\n ?? getEnabledConnections(config)[0]?.profileName\n ?? null;\n const chatQuery = readString(params.chatQuery) ?? \"\";\n const userQuery = readString(params.userQuery) ?? \"\";\n const result: {\n profileName: string | null;\n chats: DirectoryChatRow[];\n users: DirectoryUserRow[];\n chatError?: string;\n userError?: string;\n } = {\n profileName,\n chats: [],\n users: [],\n };\n if (!profileName) {\n if (chatQuery) result.chatError = \"\u8BF7\u5148\u9009\u62E9\u4E00\u4E2A\u5DF2\u6388\u6743\u7684\u98DE\u4E66\u5E94\u7528\u3002\";\n if (userQuery) result.userError = \"\u8BF7\u5148\u9009\u62E9\u4E00\u4E2A\u5DF2\u6388\u6743\u7684\u98DE\u4E66\u5E94\u7528\u3002\";\n return result;\n }\n\n if (chatQuery) {\n const chatResult = await runLarkCli({\n bin: larkCliBin(config),\n args: [\n \"--profile\",\n profileName,\n \"im\",\n \"+chat-search\",\n \"--as\",\n \"user\",\n \"--query\",\n chatQuery,\n \"--page-size\",\n \"8\",\n \"--format\",\n \"json\",\n ],\n timeoutMs: 12_000,\n });\n if (!chatResult.ok) {\n result.chatError = truncateText(chatResult.stderr || chatResult.stdout || \"\u98DE\u4E66\u7FA4\u641C\u7D22\u5931\u8D25\", 500);\n } else {\n result.chats = parseDirectoryChats(chatResult.stdout);\n }\n }\n\n if (userQuery) {\n const userResult = await runLarkCli({\n bin: larkCliBin(config),\n args: [\n \"--profile\",\n profileName,\n \"contact\",\n \"+search-user\",\n \"--as\",\n \"user\",\n \"--query\",\n userQuery,\n \"--page-size\",\n \"8\",\n \"--format\",\n \"json\",\n ],\n timeoutMs: 12_000,\n });\n if (!userResult.ok) {\n result.userError = truncateText(userResult.stderr || userResult.stdout || \"\u98DE\u4E66\u8054\u7CFB\u4EBA\u641C\u7D22\u5931\u8D25\", 500);\n } else {\n result.users = parseDirectoryUsers(userResult.stdout);\n }\n }\n\n return result;\n}\n\nfunction parseDirectoryChats(stdout: string): DirectoryChatRow[] {\n let parsed: unknown;\n try {\n parsed = JSON.parse(stdout);\n } catch {\n return [];\n }\n const data = asRecord(asRecord(parsed)?.data);\n const rows = Array.isArray(data?.chats) ? data.chats : [];\n return rows.map((row) => {\n const item = asRecord(row) ?? {};\n return {\n chatId: readString(item.chat_id, item.chatId) ?? \"\",\n name: readString(item.name) ?? \"\u672A\u547D\u540D\u98DE\u4E66\u4F1A\u8BDD\",\n description: readString(item.description) ?? null,\n external: item.external === true,\n };\n }).filter((chat) => chat.chatId.length > 0);\n}\n\nfunction parseDirectoryUsers(stdout: string): DirectoryUserRow[] {\n let parsed: unknown;\n try {\n parsed = JSON.parse(stdout);\n } catch {\n return [];\n }\n const data = asRecord(asRecord(parsed)?.data);\n const rows = Array.isArray(data?.users) ? data.users : [];\n return rows.map((row) => {\n const item = asRecord(row) ?? {};\n return {\n openId: readString(item.open_id, item.openId) ?? \"\",\n userId: readString(item.user_id, item.userId) ?? null,\n name: readString(item.name) ?? \"\u672A\u547D\u540D\u7528\u6237\",\n departmentIds: Array.isArray(item.department_ids)\n ? item.department_ids.filter((value): value is string => typeof value === \"string\")\n : [],\n };\n }).filter((user) => user.openId.length > 0);\n}\n\ntype ResolvedRouteConfig = FeishuRouteConfig & { companyId: string };\n\nfunction normalizeRef(value: string | undefined): string {\n return (value ?? \"\").trim().toLowerCase();\n}\n\nasync function resolveRouteForRun(ctx: PluginContext, route: FeishuRouteConfig): Promise<ResolvedRouteConfig> {\n let companyId = route.companyId?.trim();\n const companyRef = route.companyRef?.trim();\n\n if (!companyId && companyRef) {\n const ref = normalizeRef(companyRef);\n const companies = await ctx.companies.list({ limit: 200 });\n const company = companies.find((candidate) =>\n normalizeRef(candidate.id) === ref ||\n normalizeRef(candidate.name) === ref ||\n normalizeRef(candidate.issuePrefix) === ref\n );\n companyId = company?.id;\n }\n\n if (!companyId) {\n throw new Error(`\u5165\u53E3\u300C${describeRouteEntry(route)}\u300D\u6CA1\u6709\u627E\u5230\u516C\u53F8\u3002\u8BF7\u586B\u5199\u516C\u53F8\u540D\u79F0/\u524D\u7F00\uFF0C\u4F8B\u5982\u300C\u9510\u6377\u7F51\u7EDC\u300D\u6216\u300CCMP\u300D\u3002`);\n }\n\n let targetAgentId = route.targetAgentId?.trim();\n const agentRef = (route.targetAgentRef ?? route.targetAgentName)?.trim();\n\n if (!targetAgentId && agentRef) {\n const ref = normalizeRef(agentRef);\n const agents = await ctx.agents.list({ companyId, limit: 500 });\n const agent = agents.find((candidate) =>\n normalizeRef(candidate.id) === ref ||\n normalizeRef(candidate.name) === ref ||\n normalizeRef(candidate.title ?? undefined) === ref ||\n normalizeRef(candidate.urlKey) === ref\n );\n targetAgentId = agent?.id;\n }\n\n if (agentRef && !targetAgentId) {\n throw new Error(`\u5165\u53E3\u300C${describeRouteEntry(route)}\u300D\u6CA1\u6709\u627E\u5230\u667A\u80FD\u4F53\u300C${agentRef}\u300D\u3002\u8BF7\u586B\u5199\u5DE6\u4FA7\u667A\u80FD\u4F53\u5217\u8868\u91CC\u663E\u793A\u7684\u540D\u79F0\uFF0C\u6216\u586B\u5199\u667A\u80FD\u4F53 ID\u3002`);\n }\n\n return {\n ...route,\n companyId,\n targetAgentId,\n targetAgentName: route.targetAgentName ?? route.targetAgentRef,\n };\n}\n\nfunction dedupKey(message: FeishuInboundMessage, connectionId: string): string {\n const eventOrMessage = message.eventId ? `event:${message.eventId}` : `message:${message.messageId}`;\n return `${connectionId}:${eventOrMessage}`;\n}\n\nfunction mergeProcessedMessageIds(existing: FeishuSessionData | null | undefined, messageId: string): string[] {\n const seen = new Set<string>();\n for (const id of existing?.processedMessageIds ?? []) {\n if (id) seen.add(id);\n }\n if (existing?.rootMessageId) seen.add(existing.rootMessageId);\n if (existing?.lastMessageId) seen.add(existing.lastMessageId);\n if (messageId) seen.add(messageId);\n return [...seen].slice(-50);\n}\n\nfunction sessionAlreadyHandledMessage(existing: FeishuSessionData | null | undefined, message: FeishuInboundMessage): boolean {\n if (!existing?.paperclipIssueId || !message.messageId) return false;\n if (existing.processedMessageIds?.includes(message.messageId)) return true;\n return existing.lastMessageId === message.messageId || existing.rootMessageId === message.messageId;\n}\n\nasync function markDeduped(ctx: PluginContext, message: FeishuInboundMessage, connectionId: string): Promise<boolean> {\n const stateKey = dedupKey(message, connectionId);\n const existing = await ctx.state.get({\n scopeKind: \"instance\",\n namespace: \"feishu-dedup\",\n stateKey,\n });\n if (existing) return true;\n await ctx.state.set({\n scopeKind: \"instance\",\n namespace: \"feishu-dedup\",\n stateKey,\n }, { processedAt: new Date().toISOString(), messageId: message.messageId });\n return false;\n}\n\nasync function findSession(\n ctx: PluginContext,\n companyId: string,\n sessionKey: string,\n): Promise<FeishuSessionData | null> {\n const existing = await ctx.entities.list({\n entityType: \"feishu-session\",\n scopeKind: \"company\",\n scopeId: companyId,\n externalId: sessionKey,\n limit: 1,\n offset: 0,\n });\n const data = existing[0]?.data as Partial<FeishuSessionData> | undefined;\n return data?.paperclipIssueId && data.connectionId && data.sessionKey\n ? data as FeishuSessionData\n : null;\n}\n\nasync function findSessionByKey(\n ctx: PluginContext,\n sessionKey: string,\n): Promise<{ companyId: string; data: FeishuSessionData } | null> {\n const existing = await ctx.entities.list({\n entityType: \"feishu-session\",\n externalId: sessionKey,\n limit: 1,\n offset: 0,\n });\n const record = existing[0];\n const data = record?.data as Partial<FeishuSessionData> | undefined;\n if (!record?.scopeId || !data?.paperclipIssueId || !data.connectionId || !data.sessionKey) return null;\n return { companyId: record.scopeId, data: data as FeishuSessionData };\n}\n\nasync function findSessionByRunId(\n ctx: PluginContext,\n runId: string,\n): Promise<{ companyId: string; data: FeishuSessionData } | null> {\n const existing = await ctx.entities.list({\n entityType: \"feishu-session\",\n limit: 500,\n offset: 0,\n });\n for (const record of existing) {\n const data = record.data as Partial<FeishuSessionData> | undefined;\n if (\n record.scopeId &&\n data?.paperclipIssueId &&\n data.connectionId &&\n data.sessionKey &&\n data.lastRunId === runId\n ) {\n return { companyId: record.scopeId, data: data as FeishuSessionData };\n }\n }\n return null;\n}\n\nasync function findSessionByIssueId(\n ctx: PluginContext,\n issueId: string,\n): Promise<{ companyId: string; data: FeishuSessionData } | null> {\n const existing = await ctx.entities.list({\n entityType: \"feishu-session\",\n limit: 500,\n offset: 0,\n });\n for (const record of existing) {\n const data = record.data as Partial<FeishuSessionData> | undefined;\n if (\n record.scopeId &&\n data?.paperclipIssueId === issueId &&\n data.connectionId &&\n data.sessionKey\n ) {\n return { companyId: record.scopeId, data: data as FeishuSessionData };\n }\n }\n return null;\n}\n\nasync function resolveRouteFromSession(\n ctx: PluginContext,\n config: FeishuConnectorConfig,\n session: FeishuSessionData,\n companyId: string,\n): Promise<ResolvedRouteConfig> {\n const configuredRoute = (config.routes ?? []).find((route) => route.id === session.routeId);\n if (configuredRoute) return resolveRouteForRun(ctx, configuredRoute);\n for (const route of config.routes ?? []) {\n if (route.enabled === false) continue;\n if (route.connectionId && route.connectionId !== session.connectionId) continue;\n const resolved = await resolveRouteForRun(ctx, route).catch(() => null);\n if (!resolved) continue;\n if (resolved.companyId !== companyId) continue;\n if (session.paperclipAgentId && resolved.targetAgentId !== session.paperclipAgentId) continue;\n return resolved;\n }\n return {\n id: session.routeId ?? \"existing-feishu-session\",\n matchType: \"default\",\n connectionId: session.connectionId,\n companyId,\n targetAgentId: session.paperclipAgentId,\n replyMode: \"thread\",\n };\n}\n\nfunction messageFromSession(session: FeishuSessionData): FeishuInboundMessage {\n return {\n connectionId: session.connectionId,\n messageId: session.rootMessageId ?? session.lastMessageId,\n chatId: session.chatId,\n chatName: session.chatName,\n threadId: session.threadId,\n rootMessageId: session.rootMessageId,\n senderOpenId: session.requesterOpenId,\n senderName: session.requesterName,\n text: session.paperclipIssueTitle ?? \"Paperclip \u4EFB\u52A1\",\n mentions: [],\n attachments: session.attachments ?? [],\n raw: {},\n };\n}\n\nfunction isExternalBotMessage(\n config: FeishuConnectorConfig,\n connection: FeishuConnectionConfig,\n message: FeishuInboundMessage,\n): boolean {\n const senderType = (message.senderType ?? \"\").toLowerCase();\n const looksLikeBot = /app|bot|\u673A\u5668\u4EBA/.test(senderType);\n if (!looksLikeBot && !message.senderAppId) return false;\n\n const currentAppIds = new Set(\n [connection.appId?.trim()]\n .filter((appId): appId is string => !!appId),\n );\n const configuredAppIds = new Set(\n (config.connections ?? [])\n .map((item) => item.appId?.trim())\n .filter((appId): appId is string => !!appId),\n );\n\n if (!message.senderAppId) return looksLikeBot;\n if (currentAppIds.has(message.senderAppId)) return false;\n if (configuredAppIds.has(message.senderAppId)) return true;\n return looksLikeBot;\n}\n\nfunction isCurrentBotMessage(\n connection: FeishuConnectionConfig,\n message: FeishuInboundMessage,\n): boolean {\n if (!message.senderAppId || !connection.appId) return false;\n if (message.senderAppId !== connection.appId) return false;\n const senderType = (message.senderType ?? \"\").toLowerCase();\n const looksLikeBot = /app|bot|\u673A\u5668\u4EBA/.test(senderType);\n return !senderType || looksLikeBot;\n}\n\nfunction normalizeMentionValue(value?: string | null): string | null {\n const normalized = (value ?? \"\")\n .replace(/^@+/, \"\")\n .replace(/\\s+/g, \"\")\n .trim()\n .toLocaleLowerCase();\n return normalized.length > 0 ? normalized : null;\n}\n\nfunction connectionBotAliases(connection: FeishuConnectionConfig): string[] {\n return [...new Set((connection.botAliases ?? [])\n .map((value) => value.trim())\n .filter(Boolean))];\n}\n\nfunction isTechnicalProfileName(value?: string | null): boolean {\n const normalized = (value ?? \"\").trim().toLocaleLowerCase();\n return !normalized\n || normalized.startsWith(\"cli_\")\n || normalized.endsWith(\"-bot\")\n || normalized.includes(\" bot\")\n || normalized.includes(\"feishu\")\n || normalized.includes(\"\u98DE\u4E66\u5E94\u7528\")\n || /^[0-9a-f-]{12,}$/.test(normalized);\n}\n\nfunction extractTextMentionNames(text: string): string[] {\n const names: string[] = [];\n for (const match of text.matchAll(/@([^\\s,\uFF0C\u3002.!\uFF01?\uFF1F\u3001:\uFF1A;\uFF1B)\uFF09\\]\u3011]+)/g)) {\n const normalized = normalizeMentionValue(match[1]);\n if (normalized) names.push(normalized);\n }\n return names;\n}\n\nfunction inboundMentionTargets(message: FeishuInboundMessage): {\n names: Set<string>;\n openIds: Set<string>;\n appIds: Set<string>;\n rawNames: string[];\n hasExplicitMention: boolean;\n} {\n const names = new Set<string>();\n const openIds = new Set<string>();\n const appIds = new Set<string>();\n const rawNames: string[] = [];\n\n for (const name of extractTextMentionNames(message.text)) {\n names.add(name);\n rawNames.push(name);\n }\n for (const mention of message.mentions ?? []) {\n const name = normalizeMentionValue(mention.name);\n if (name) {\n names.add(name);\n rawNames.push(name);\n }\n const openId = mention.openId?.trim();\n if (openId) openIds.add(openId);\n const appId = mention.appId?.trim();\n if (appId) appIds.add(appId);\n }\n\n return {\n names,\n openIds,\n appIds,\n rawNames: [...new Set(rawNames)],\n hasExplicitMention: names.size > 0 || openIds.size > 0 || appIds.size > 0,\n };\n}\n\nasync function cachedConnectionBotInfo(\n config: FeishuConnectorConfig,\n connection: FeishuConnectionConfig,\n): Promise<{ botName?: string | null; botOpenId?: string | null }> {\n const cacheKey = `${connection.profileName}:${connection.appId ?? \"\"}`;\n const cached = connectionBotInfoCache.get(cacheKey);\n if (cached && Date.now() - cached.fetchedAt < CONNECTION_BOT_INFO_TTL_MS) {\n return { botName: cached.botName, botOpenId: cached.botOpenId };\n }\n const info: Partial<Pick<ProfileRow, \"botName\" | \"botOpenId\">> = await readBotInfo(config, connection.profileName).catch(() => ({}));\n const row = { fetchedAt: Date.now(), botName: info.botName ?? null, botOpenId: info.botOpenId ?? null };\n connectionBotInfoCache.set(cacheKey, row);\n return { botName: row.botName, botOpenId: row.botOpenId };\n}\n\nasync function mentionTargetMismatch(\n config: FeishuConnectorConfig,\n connection: FeishuConnectionConfig,\n message: FeishuInboundMessage,\n): Promise<Record<string, unknown> | null> {\n const targets = inboundMentionTargets(message);\n if (!targets.hasExplicitMention) return null;\n\n const currentNames = new Set<string>();\n const addCurrentName = (value?: string | null) => {\n if (isTechnicalProfileName(value)) return;\n const normalized = normalizeMentionValue(value);\n if (normalized) currentNames.add(normalized);\n };\n addCurrentName(connection.name);\n for (const alias of connectionBotAliases(connection)) addCurrentName(alias);\n const currentOpenIds = new Set<string>();\n const currentAppIds = new Set<string>();\n if (connection.appId) currentAppIds.add(connection.appId);\n\n const connectionNameAlreadyMatches = [...targets.names].some((name) => currentNames.has(name));\n if (!connectionNameAlreadyMatches) {\n const botInfo = await cachedConnectionBotInfo(config, connection);\n addCurrentName(botInfo.botName);\n if (botInfo.botOpenId) currentOpenIds.add(botInfo.botOpenId);\n }\n\n const hasComparableStructuredIdentity =\n (targets.openIds.size > 0 && currentOpenIds.size > 0)\n || (targets.appIds.size > 0 && currentAppIds.size > 0);\n const canIdentifyCurrentBot = currentNames.size > 0 || hasComparableStructuredIdentity;\n if (!canIdentifyCurrentBot) return null;\n\n const addressedToCurrentBot =\n [...targets.names].some((name) => currentNames.has(name))\n || [...targets.openIds].some((openId) => currentOpenIds.has(openId))\n || [...targets.appIds].some((appId) => currentAppIds.has(appId));\n\n if (addressedToCurrentBot) return null;\n\n return {\n reason: \"mentioned_other_bot\",\n mentionedNames: targets.rawNames,\n currentBotNames: [...currentNames],\n currentBotOpenIds: [...currentOpenIds],\n currentAppIds: [...currentAppIds],\n };\n}\n\nfunction connectionMatchesMention(connection: FeishuConnectionConfig, message: FeishuInboundMessage): boolean {\n const targets = inboundMentionTargets(message);\n if (!targets.hasExplicitMention) return false;\n if (connection.appId && targets.appIds.has(connection.appId)) return true;\n\n const names = new Set<string>();\n const addName = (value?: string | null) => {\n if (isTechnicalProfileName(value)) return;\n const normalized = normalizeMentionValue(value);\n if (normalized) names.add(normalized);\n };\n addName(connection.name);\n for (const alias of connectionBotAliases(connection)) addName(alias);\n return [...targets.names].some((name) => names.has(name));\n}\n\nfunction selectInboundConnection(\n config: FeishuConnectorConfig,\n message: FeishuInboundMessage,\n candidates: FeishuConnectionConfig[],\n): FeishuConnectionConfig | null {\n if (candidates.length === 0) return null;\n const mentioned = candidates.find((connection) => connectionMatchesMention(connection, message));\n if (mentioned) return mentioned;\n\n const routeMatches = candidates\n .map((connection) => ({ connection, route: resolveRoute(config, message, connection.id) }))\n .filter((item): item is { connection: FeishuConnectionConfig; route: FeishuRouteConfig } => !!item.route)\n .sort((a, b) => (b.route.priority ?? 0) - (a.route.priority ?? 0));\n return routeMatches[0]?.connection ?? candidates[0] ?? null;\n}\n\nfunction buildPaperclipIssueUrl(\n config: FeishuConnectorConfig,\n route: ResolvedRouteConfig,\n issueIdentifier?: string | null,\n): string | null {\n const base = (config.paperclipBaseUrl || process.env.PAPERCLIP_PUBLIC_BASE_URL || process.env.PAPERCLIP_BASE_URL || \"\")\n .trim()\n .replace(/\\/+$/g, \"\");\n if (!base || !issueIdentifier) return null;\n const companySegment = (route.companyRef?.trim() || issueIdentifier.split(\"-\")[0] || route.companyId).trim();\n if (!companySegment) return null;\n return `${base}/${encodeURIComponent(companySegment)}/issues/${encodeURIComponent(issueIdentifier)}`;\n}\n\nasync function upsertSession(\n ctx: PluginContext,\n companyId: string,\n data: FeishuSessionData,\n): Promise<void> {\n await ctx.entities.upsert({\n entityType: \"feishu-session\",\n scopeKind: \"company\",\n scopeId: companyId,\n externalId: data.sessionKey,\n title: data.rootMessageId ?? data.lastMessageId,\n status: \"active\",\n data: data as unknown as Record<string, unknown>,\n });\n if (data.chatId) {\n await executePluginDb(\n ctx,\n `INSERT INTO ${dbTable(ctx.db.namespace, DB_TABLES.conversations)}\n (chat_id, connection_id, name, conversation_type, last_active_at, raw_data, updated_at)\n VALUES ($1, $2, $3, $4, $5::timestamptz, $6::jsonb, now())\n ON CONFLICT (chat_id) DO UPDATE SET\n connection_id = EXCLUDED.connection_id,\n name = COALESCE(EXCLUDED.name, feishu_conversations.name),\n conversation_type = EXCLUDED.conversation_type,\n last_active_at = EXCLUDED.last_active_at,\n raw_data = EXCLUDED.raw_data,\n updated_at = now()`,\n [\n data.chatId,\n data.connectionId,\n data.chatName ?? null,\n data.chatId.startsWith(\"oc_\") ? \"chat\" : \"unknown\",\n data.updatedAt,\n jsonParam(data),\n ],\n );\n }\n await executePluginDb(\n ctx,\n `INSERT INTO ${dbTable(ctx.db.namespace, DB_TABLES.messageRoutes)}\n (id, connection_id, entry_id, company_id, issue_id, issue_identifier, agent_id, chat_id,\n requester_open_id, requester_name, message_id, root_message_id, thread_id, reply_mode, session_key, raw_session, updated_at)\n VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16::jsonb, $17::timestamptz)\n ON CONFLICT (id) DO UPDATE SET\n connection_id = EXCLUDED.connection_id,\n entry_id = EXCLUDED.entry_id,\n company_id = EXCLUDED.company_id,\n issue_id = EXCLUDED.issue_id,\n issue_identifier = EXCLUDED.issue_identifier,\n agent_id = EXCLUDED.agent_id,\n chat_id = EXCLUDED.chat_id,\n requester_open_id = EXCLUDED.requester_open_id,\n requester_name = EXCLUDED.requester_name,\n message_id = EXCLUDED.message_id,\n root_message_id = EXCLUDED.root_message_id,\n thread_id = EXCLUDED.thread_id,\n reply_mode = EXCLUDED.reply_mode,\n raw_session = EXCLUDED.raw_session,\n updated_at = EXCLUDED.updated_at`,\n [\n data.sessionKey,\n data.connectionId,\n data.routeId ?? null,\n companyId,\n data.paperclipIssueId,\n data.paperclipIssueIdentifier ?? null,\n data.paperclipAgentId ?? null,\n data.chatId ?? null,\n data.requesterOpenId ?? null,\n data.requesterName ?? null,\n data.lastMessageId,\n data.rootMessageId ?? null,\n data.threadId ?? null,\n data.replyMode ?? \"thread\",\n data.sessionKey,\n jsonParam(data),\n data.updatedAt,\n ],\n );\n}\n\nasync function writeBaseRecord(\n ctx: PluginContext,\n config: FeishuConnectorConfig,\n connection: FeishuConnectionConfig,\n sink: FeishuBaseSinkConfig,\n recordJson: Record<string, unknown>,\n): Promise<LarkCliResult> {\n const args = buildRecordUpsertArgs({\n profileName: connection.profileName,\n identity: sink.identity ?? \"bot\",\n baseToken: sink.baseToken,\n tableIdOrName: sink.tableIdOrName,\n recordJson,\n });\n const result = await runLarkCli({\n bin: larkCliBin(config),\n args,\n dryRun: config.dryRunCli === true,\n });\n record(result.ok ? \"info\" : \"error\", \"\u591A\u7EF4\u8868\u683C\u5199\u5165\u5DF2\u6267\u884C\", { ok: result.ok, dryRun: result.dryRun });\n if (!result.ok && result.dryRun !== true) {\n await enqueueRetryItem(ctx, {\n kind: \"base_record\",\n connection,\n args,\n reason: \"\u591A\u7EF4\u8868\u683C\u5199\u5165\u5931\u8D25\",\n result,\n });\n }\n return result;\n}\n\nasync function replyToFeishu(\n ctx: PluginContext,\n config: FeishuConnectorConfig,\n connection: FeishuConnectionConfig,\n message: FeishuInboundMessage,\n text: string,\n idempotencyKey: string,\n replyInThread: boolean,\n retryContext: { routeId?: string; issueId?: string; reason?: string } = {},\n content?: string,\n msgType?: string,\n): Promise<LarkCliResult | null> {\n if (!message.messageId && !message.chatId) return null;\n const args = content\n ? (() => {\n if (!message.chatId) {\n throw new Error(\"\u98DE\u4E66\u5361\u7247\u72EC\u7ACB\u53D1\u9001\u7F3A\u5C11 chatId\uFF0C\u65E0\u6CD5\u53D1\u9001 interactive \u6D88\u606F\u3002\");\n }\n return buildSendMessageArgs({\n profileName: connection.profileName,\n identity: \"bot\",\n chatId: message.chatId,\n content,\n msgType: msgType ?? \"interactive\",\n idempotencyKey,\n });\n })()\n : message.messageId\n ? buildReplyMessageArgs({\n profileName: connection.profileName,\n identity: \"bot\",\n messageId: message.messageId,\n text,\n replyInThread,\n idempotencyKey,\n })\n : buildSendMessageArgs({\n profileName: connection.profileName,\n identity: \"bot\",\n chatId: message.chatId,\n text,\n idempotencyKey,\n });\n const result = await runLarkCli({\n bin: larkCliBin(config),\n args,\n dryRun: config.dryRunCli === true,\n });\n record(result.ok ? \"info\" : \"error\", \"\u98DE\u4E66\u56DE\u590D\u5DF2\u6267\u884C\", summarizeLarkResult(result));\n if (!result.ok && result.dryRun !== true) {\n await enqueueRetryItem(ctx, {\n kind: \"feishu_reply\",\n connection,\n args,\n reason: retryContext.reason ?? \"\u98DE\u4E66\u6D88\u606F\u56DE\u590D\u5931\u8D25\",\n result,\n routeId: retryContext.routeId,\n issueId: retryContext.issueId,\n messageId: message.messageId,\n });\n }\n return result;\n}\n\nfunction safeAttachmentFilename(attachment: FeishuInboundAttachment, index: number): string {\n const fallbackExt = attachment.resourceType === \"image\"\n ? \".jpg\"\n : attachment.resourceType === \"audio\"\n ? \".mp3\"\n : attachment.resourceType === \"video\"\n ? \".mp4\"\n : \".bin\";\n const base = attachment.filename?.trim() || `${attachment.resourceType}-${index + 1}-${attachment.resourceKey}`;\n const safe = base\n .replace(/[\\\\/:*?\"<>|\\u0000-\\u001F]/g, \"_\")\n .replace(/\\s+/g, \" \")\n .trim()\n .slice(0, 180) || `attachment-${index + 1}`;\n return path.extname(safe) ? safe : `${safe}${fallbackExt}`;\n}\n\nfunction contentTypeForFilename(filename: string, resourceType: FeishuInboundAttachment[\"resourceType\"]): string {\n const ext = path.extname(filename).toLowerCase();\n const byExt: Record<string, string> = {\n \".png\": \"image/png\",\n \".jpg\": \"image/jpeg\",\n \".jpeg\": \"image/jpeg\",\n \".webp\": \"image/webp\",\n \".gif\": \"image/gif\",\n \".pdf\": \"application/pdf\",\n \".txt\": \"text/plain\",\n \".md\": \"text/markdown\",\n \".csv\": \"text/csv\",\n \".json\": \"application/json\",\n \".mp3\": \"audio/mpeg\",\n \".wav\": \"audio/wav\",\n \".mp4\": \"video/mp4\",\n };\n if (byExt[ext]) return byExt[ext];\n if (resourceType === \"image\") return \"image/jpeg\";\n if (resourceType === \"audio\") return \"audio/mpeg\";\n if (resourceType === \"video\") return \"video/mp4\";\n return \"application/octet-stream\";\n}\n\nasync function pickDownloadedFile(tempDir: string, expectedFilename: string): Promise<string> {\n const expected = path.join(tempDir, expectedFilename);\n try {\n const stat = await fs.stat(expected);\n if (stat.isFile()) return expected;\n } catch {\n // lark-cli may choose its own output filename for some resource types.\n }\n const entries = await fs.readdir(tempDir);\n for (const entry of entries) {\n const candidate = path.join(tempDir, entry);\n const stat = await fs.stat(candidate);\n if (stat.isFile()) return candidate;\n }\n throw new Error(\"lark-cli \u6CA1\u6709\u751F\u6210\u9644\u4EF6\u6587\u4EF6\");\n}\n\nasync function attachFeishuResources(\n ctx: PluginContext,\n config: FeishuConnectorConfig,\n connection: FeishuConnectionConfig,\n message: FeishuInboundMessage,\n companyId: string,\n issueId: string,\n issueCommentId?: string | null,\n): Promise<AttachedResourceResult[]> {\n if (message.attachments.length === 0) return [];\n\n const planned = message.attachments.map((attachment, index) => ({\n attachment,\n filename: safeAttachmentFilename(attachment, index),\n }));\n\n if (config.dryRunCli === true) {\n const results = planned.map(({ attachment, filename }) => ({\n filename,\n resourceKey: attachment.resourceKey,\n resourceType: attachment.resourceType,\n dryRun: true,\n }));\n record(\"info\", \"\u98DE\u4E66\u9644\u4EF6\u4E0B\u8F7D\u4E3A\u6A21\u62DF\u6A21\u5F0F\uFF0C\u672A\u771F\u6B63\u4E0A\u4F20\u9644\u4EF6\", {\n issueId,\n attachments: results.map((item) => item.filename),\n });\n return results;\n }\n\n const tempDir = await fs.mkdtemp(path.join(os.tmpdir(), \"paperclip-feishu-\"));\n try {\n const results: AttachedResourceResult[] = [];\n for (const { attachment, filename } of planned) {\n try {\n const args = buildResourceDownloadArgs({\n profileName: connection.profileName,\n identity: \"bot\",\n messageId: message.messageId,\n fileKey: attachment.resourceKey,\n type: attachment.resourceType,\n output: filename,\n });\n const download = await runLarkCli({\n bin: larkCliBin(config),\n args,\n timeoutMs: 120_000,\n cwd: tempDir,\n });\n if (!download.ok) {\n const detail = [download.stderr.trim(), download.stdout.trim()].filter(Boolean).join(\"\\n\").slice(0, 1000);\n throw new Error(detail || \"lark-cli \u4E0B\u8F7D\u9644\u4EF6\u5931\u8D25\");\n }\n\n const downloadedPath = await pickDownloadedFile(tempDir, filename);\n const body = await fs.readFile(downloadedPath);\n const originalFilename = path.basename(downloadedPath) || filename;\n await fs.rm(downloadedPath, { force: true }).catch(() => undefined);\n const created = await ctx.issues.createAttachment({\n issueId,\n companyId,\n filename: originalFilename,\n contentType: contentTypeForFilename(originalFilename, attachment.resourceType),\n bodyBase64: body.toString(\"base64\"),\n issueCommentId: issueCommentId ?? null,\n });\n results.push({\n filename: originalFilename,\n resourceKey: attachment.resourceKey,\n resourceType: attachment.resourceType,\n attachmentId: created.id,\n contentPath: created.contentPath,\n });\n record(\"info\", \"\u98DE\u4E66\u9644\u4EF6\u5DF2\u4E0A\u4F20\u5230 Paperclip \u4EFB\u52A1\", {\n issueId,\n filename: originalFilename,\n attachmentId: created.id,\n });\n } catch (error) {\n const messageText = error instanceof Error ? error.message : String(error);\n results.push({\n filename,\n resourceKey: attachment.resourceKey,\n resourceType: attachment.resourceType,\n error: messageText,\n });\n record(\"error\", \"\u98DE\u4E66\u9644\u4EF6\u4E0A\u4F20\u5931\u8D25\", {\n issueId,\n resourceKey: attachment.resourceKey,\n error: messageText,\n });\n }\n }\n return results;\n } finally {\n await fs.rm(tempDir, { recursive: true, force: true }).catch(() => undefined);\n }\n}\n\nfunction attachmentPromptLines(results: AttachedResourceResult[]): string[] {\n if (results.length === 0) return [];\n const lines = [\"\", \"\u9644\u4EF6\u5904\u7406\u7ED3\u679C\uFF1A\"];\n for (const result of results) {\n if (result.attachmentId) {\n lines.push(`- ${result.filename} \u5DF2\u4F5C\u4E3A Paperclip \u9644\u4EF6\u4E0A\u4F20\uFF08${result.attachmentId}\uFF09`);\n } else if (result.dryRun) {\n lines.push(`- ${result.filename}\uFF1A\u6A21\u62DF\u6A21\u5F0F\uFF0C\u672A\u771F\u6B63\u4E0B\u8F7D\u4E0A\u4F20`);\n } else {\n lines.push(`- ${result.filename}\uFF1A\u4E0A\u4F20\u5931\u8D25\uFF0C${result.error ?? \"\u672A\u77E5\u9519\u8BEF\"}`);\n }\n }\n return lines;\n}\n\nfunction buildFeishuCardContent(input: {\n title: string;\n summary: string;\n actions?: Array<{ text?: unknown; url?: unknown }>;\n}): string {\n const actions = (input.actions ?? [])\n .filter((action) => typeof action.text === \"string\" && action.text.trim() && typeof action.url === \"string\" && action.url.trim())\n .map((action) => ({\n tag: \"button\",\n text: {\n tag: \"plain_text\",\n content: String(action.text).trim(),\n },\n url: String(action.url).trim(),\n type: \"default\",\n }));\n const elements: Array<Record<string, unknown>> = [\n {\n tag: \"div\",\n text: {\n tag: \"lark_md\",\n content: input.summary,\n },\n },\n ];\n if (actions.length > 0) {\n elements.push({\n tag: \"action\",\n actions,\n });\n }\n return JSON.stringify({\n config: {\n wide_screen_mode: true,\n },\n header: {\n title: {\n tag: \"plain_text\",\n content: input.title,\n },\n template: \"blue\",\n },\n elements,\n });\n}\n\nfunction buildAckCard(params: {\n agentName: string;\n issueRef: string;\n estimatedDuration: string;\n issueUrl?: string | null;\n}): string {\n const elements: Array<Record<string, unknown>> = [\n {\n tag: \"div\",\n text: {\n tag: \"lark_md\",\n content: `**\u5904\u7406\u4EBA**\uFF1A${params.agentName}\\n**\u4EFB\u52A1\u7F16\u53F7**\uFF1A${params.issueRef}\\n**\u9884\u8BA1\u8017\u65F6**\uFF1A${params.estimatedDuration}`,\n },\n },\n { tag: \"hr\" },\n {\n tag: \"div\",\n text: {\n tag: \"lark_md\",\n content: DEFAULT_ACK_CARD_FOOTER,\n },\n },\n ];\n if (params.issueUrl) {\n elements.push({\n tag: \"action\",\n actions: [\n {\n tag: \"button\",\n text: { tag: \"plain_text\", content: \"\u67E5\u770B\u4EFB\u52A1\" },\n url: params.issueUrl,\n type: \"default\",\n },\n ],\n });\n }\n return JSON.stringify({\n config: { wide_screen_mode: true },\n header: {\n title: { tag: \"plain_text\", content: DEFAULT_ACK_CARD_TITLE },\n template: DEFAULT_ACK_CARD_TEMPLATE,\n },\n elements,\n });\n}\n\nfunction buildCompletionCard(params: {\n issueRef: string;\n issueTitle: string;\n summary: string;\n issueUrl?: string | null;\n}): string {\n const elements: Array<Record<string, unknown>> = [\n {\n tag: \"div\",\n text: {\n tag: \"lark_md\",\n content: `**\u4EFB\u52A1**\uFF1A${params.issueRef}\\n**\u6807\u9898**\uFF1A${params.issueTitle}\\n**\u72B6\u6001**\uFF1A\u5DF2\u5B8C\u6210`,\n },\n },\n { tag: \"hr\" },\n {\n tag: \"div\",\n text: {\n tag: \"lark_md\",\n content: params.summary,\n },\n },\n ];\n if (params.issueUrl) {\n elements.push({\n tag: \"action\",\n actions: [\n {\n tag: \"button\",\n text: { tag: \"plain_text\", content: \"\u67E5\u770B\u8BE6\u60C5\" },\n url: params.issueUrl,\n type: \"default\",\n },\n ],\n });\n }\n return JSON.stringify({\n config: { wide_screen_mode: true },\n header: {\n title: { tag: \"plain_text\", content: DEFAULT_COMPLETION_CARD_TITLE },\n template: DEFAULT_COMPLETION_CARD_TEMPLATE,\n },\n elements,\n });\n}\n\nfunction buildProgressCard(params: {\n issueRef: string;\n issueTitle: string;\n status: string;\n issueUrl?: string | null;\n}): string {\n const isBlocked = params.status === \"blocked\";\n const elements: Array<Record<string, unknown>> = [\n {\n tag: \"div\",\n text: {\n tag: \"lark_md\",\n content: `**\u4EFB\u52A1**\uFF1A${params.issueRef}\\n**\u6807\u9898**\uFF1A${params.issueTitle}\\n**\u5F53\u524D\u72B6\u6001**\uFF1A${issueStatusLabel(params.status)}`,\n },\n },\n ];\n if (isBlocked) {\n elements.push({\n tag: \"div\",\n text: {\n tag: \"lark_md\",\n content: \"\u5DF2\u8F6C\u7ED9\u76F8\u5173\u667A\u80FD\u4F53\u5904\u7406\uFF0C\u5B8C\u6210\u540E\u4F1A\u7EE7\u7EED\u56DE\u5230\u8FD9\u91CC\u3002\",\n },\n });\n }\n if (params.issueUrl) {\n elements.push({\n tag: \"action\",\n actions: [\n {\n tag: \"button\",\n text: { tag: \"plain_text\", content: \"\u67E5\u770B\u4EFB\u52A1\" },\n url: params.issueUrl,\n type: \"default\",\n },\n ],\n });\n }\n return JSON.stringify({\n config: { wide_screen_mode: true },\n header: {\n title: {\n tag: \"plain_text\",\n content: isBlocked ? DEFAULT_BLOCKED_CARD_TITLE : DEFAULT_PROGRESS_CARD_TITLE,\n },\n template: isBlocked ? DEFAULT_BLOCKED_CARD_TEMPLATE : DEFAULT_PROGRESS_CARD_TEMPLATE,\n },\n elements,\n });\n}\n\nfunction buildFailureCard(params: {\n issueRef: string;\n issueTitle: string;\n errorMessage?: string;\n}): string {\n const lines = [\n `**\u4EFB\u52A1**\uFF1A${params.issueRef}`,\n `**\u6807\u9898**\uFF1A${params.issueTitle}`,\n ...(params.errorMessage ? [`**\u539F\u56E0**\uFF1A${params.errorMessage}`] : []),\n ];\n return JSON.stringify({\n config: { wide_screen_mode: true },\n header: {\n title: { tag: \"plain_text\", content: DEFAULT_FAILURE_CARD_TITLE },\n template: DEFAULT_FAILURE_CARD_TEMPLATE,\n },\n elements: [\n {\n tag: \"div\",\n text: {\n tag: \"lark_md\",\n content: lines.join(\"\\n\"),\n },\n },\n ],\n });\n}\n\nfunction issueStatusLabel(status?: string | null): string {\n if (status === \"done\") return \"\u5DF2\u5B8C\u6210\";\n if (status === \"blocked\") return \"\u7B49\u5F85\u534F\u4F5C\u5904\u7406\";\n if (status === \"in_progress\") return \"\u5904\u7406\u4E2D\";\n if (status === \"cancelled\") return \"\u5DF2\u53D6\u6D88\";\n if (status === \"todo\") return \"\u5DF2\u521B\u5EFA\";\n return status || \"\u5904\u7406\u4E2D\";\n}\n\nfunction normalizeTemplate(value?: string | null): string {\n return (value ?? \"\").replace(/\\s+/g, \" \").trim();\n}\n\nfunction isDefaultAckTemplate(template?: string | null): boolean {\n const normalized = normalizeTemplate(template);\n return !normalized ||\n normalized === normalizeTemplate(DEFAULT_ACK_TEMPLATE) ||\n normalized === normalizeTemplate(LEGACY_ACK_TEMPLATE);\n}\n\nfunction isDefaultCompletionTemplate(template?: string | null): boolean {\n const normalized = normalizeTemplate(template);\n return !normalized ||\n normalized === normalizeTemplate(DEFAULT_COMPLETION_TEMPLATE) ||\n normalized === normalizeTemplate(LEGACY_COMPLETION_TEMPLATE);\n}\n\nfunction issueDisplayRef(issueId: string, issueIdentifier?: string | null): string {\n return issueIdentifier?.trim() || issueId.slice(0, 8);\n}\n\nfunction cleanReplyTitle(title: string): string {\n const withoutMentions = title\n .replace(/<at\\b[^>]*>.*?<\\/at>/gi, \" \")\n .replace(/@\\S+/g, \" \")\n .replace(/\\bpaperclip\\b/gi, \" \");\n const withoutTail = withoutMentions\n .replace(/\u5B8C\u6210\u540E(\u56DE\u590D|\u544A\u8BC9)\u6211?[\uFF1B;\u3002,.\uFF0C!\uFF01?\uFF1F\\s]*.*$/g, \" \")\n .replace(/\u5904\u7406\u5B8C(\u56DE\u590D|\u544A\u8BC9)\u6211?[\uFF1B;\u3002,.\uFF0C!\uFF01?\uFF1F\\s]*.*$/g, \" \");\n const withoutLeadingAsk = withoutTail\n .replace(/^(\u8BF7\u4F60?|\u9EBB\u70E6\u4F60?|\u5E2E\u6211|\u5E2E\u5FD9|\u53EF\u4EE5|\u80FD\u5426|\u80FD\u4E0D\u80FD)?\\s*(\u521B\u5EFA|\u65B0\u5EFA|\u5EFA\u7ACB|\u751F\u6210|\u505A|\u5904\u7406|\u770B\u4E00\u4E0B|\u67E5\u4E00\u4E0B|\u5E2E\u6211\u67E5\u4E0B|\u5E2E\u6211\u770B\u770B)\\s*(\u4E00\u4E2A|\u4E00\u4E0B|\u4E00\u4EFD|\u8FD9\u4E2A|\u4E0B)?\\s*/g, \"\");\n const cleaned = withoutLeadingAsk\n .replace(/\\s+/g, \" \")\n .replace(/^[\uFF0C,\uFF1B;\u3002.!\uFF01?\uFF1F\\s]+/g, \"\")\n .replace(/[\uFF0C,\uFF1B;\u3002.!\uFF01?\uFF1F\\s]+$/g, \"\")\n .trim();\n return cleaned || \"Paperclip \u4EFB\u52A1\";\n}\n\nfunction renderDefaultAwareTemplate(\n template: string,\n context: {\n message: FeishuInboundMessage;\n route: ResolvedRouteConfig;\n issueId: string;\n issueRef: string;\n issueTitle: string;\n runId?: string;\n runStatus?: string;\n issueUrl?: string | null;\n estimatedDuration?: string;\n },\n): string {\n return renderTemplate(template, {\n message: context.message,\n route: context.route,\n issueId: context.issueId,\n issueRef: context.issueRef,\n issueTitle: context.issueTitle,\n agentName: context.route.targetAgentName,\n runId: context.runId,\n runStatus: context.runStatus,\n issueUrl: context.issueUrl ?? \"\",\n estimatedDuration: context.estimatedDuration ?? \"\",\n });\n}\n\nfunction buildAckReplyText(params: {\n config: FeishuConnectorConfig;\n message: FeishuInboundMessage;\n route: ResolvedRouteConfig;\n issueId: string;\n issueRef: string;\n issueTitle: string;\n issueUrl?: string | null;\n estimatedDuration?: string;\n}): string {\n const { config, message, route, issueId, issueRef, issueTitle } = params;\n const estimatedDuration = params.estimatedDuration ?? DEFAULT_ESTIMATED_DURATION_LABEL;\n const template = config.ackMessageTemplate ?? DEFAULT_ACK_TEMPLATE;\n if (!isDefaultAckTemplate(template)) {\n return renderDefaultAwareTemplate(template, {\n message,\n route,\n issueId,\n issueRef,\n issueTitle,\n issueUrl: params.issueUrl,\n estimatedDuration,\n });\n }\n\n const agentName = route.targetAgentName ?? \"\u5BF9\u5E94\u667A\u80FD\u4F53\";\n const lines = [\n `\u5DF2\u6536\u5230\uFF0C\u4EA4\u7ED9 ${agentName} \u5904\u7406\u3002`,\n `\u4EFB\u52A1\uFF1A${issueRef}`,\n `\u9884\u8BA1\u8017\u65F6\uFF1A${estimatedDuration}`,\n \"\u5B8C\u6210\u540E\u4F1A\u5728\u8FD9\u91CC\u56DE\u590D\u3002\",\n ];\n if (params.issueUrl) {\n lines.push(`Paperclip \u5185\u90E8\u94FE\u63A5\uFF1A${params.issueUrl}\uFF08\u9700\u8981\u8D26\u53F7\u6743\u9650\uFF09`);\n }\n return lines.join(\"\\n\");\n}\n\nfunction normalizeCommentBody(body: string | null | undefined): string | null {\n const normalized = (body ?? \"\").replace(/\\r\\n/g, \"\\n\").trim();\n return normalized.length > 0 ? normalized : null;\n}\n\nfunction commentTime(comment: IssueComment): number {\n const createdAt = comment.createdAt as unknown;\n if (createdAt instanceof Date) return createdAt.getTime();\n if (typeof createdAt === \"string\") return Date.parse(createdAt);\n return 0;\n}\n\nfunction latestFinalComment(\n comments: IssueComment[],\n session: FeishuSessionData,\n route: ResolvedRouteConfig,\n): IssueComment | null {\n const ordered = [...comments]\n .filter((comment) => normalizeCommentBody(comment.body))\n .sort((a, b) => commentTime(b) - commentTime(a));\n if (ordered.length === 0) return null;\n\n const agentAuthored = ordered.find((comment) =>\n !!comment.authorAgentId &&\n (comment.authorAgentId === route.targetAgentId || comment.authorAgentId === session.paperclipAgentId)\n );\n return agentAuthored ?? ordered[0] ?? null;\n}\n\nfunction looksLikeFinalComment(body: string | null | undefined): boolean {\n const normalized = normalizeCommentBody(body);\n if (!normalized) return false;\n return /\u5B8C\u6210|\u5DF2\u5B8C\u6210|\u5904\u7406\u5B8C\u6210|\u4EA4\u4ED8|\u7ED3\u8BBA|\u603B\u7ED3|\u62A5\u544A|\u5DF2\u53D1\u9001|\u5DF2\u56DE\u590D|done/i.test(normalized);\n}\n\nfunction summarizeLongFinalComment(body: string): string {\n const normalized = body.replace(/\\n{3,}/g, \"\\n\\n\").trim();\n if (normalized.length <= FINAL_REPLY_SUMMARY_LIMIT) return normalized;\n const paragraphs = normalized.split(/\\n{2,}/g);\n const picked: string[] = [];\n let length = 0;\n for (const paragraph of paragraphs) {\n const candidate = paragraph.trim();\n if (!candidate) continue;\n if (length + candidate.length > FINAL_REPLY_SUMMARY_LIMIT) break;\n picked.push(candidate);\n length += candidate.length + 2;\n }\n const summary = picked.length > 0 ? picked.join(\"\\n\\n\") : normalized.slice(0, FINAL_REPLY_SUMMARY_LIMIT);\n return `${summary.trim()}...`;\n}\n\nfunction buildCompletionFromFinalComment(params: {\n issueRef: string;\n body: string;\n issueUrl?: string | null;\n}): string {\n const body = params.body.trim();\n if (body.length <= FINAL_REPLY_FULL_TEXT_LIMIT) {\n return [`\u4EFB\u52A1\u5B8C\u6210\uFF1A${params.issueRef}`, \"\", body].join(\"\\n\");\n }\n const lines = [\n `\u4EFB\u52A1\u5B8C\u6210\uFF1A${params.issueRef}`,\n \"\",\n summarizeLongFinalComment(body),\n \"\",\n \"\u7ED3\u679C\u8F83\u957F\uFF0C\u6211\u5148\u628A\u6458\u8981\u53D1\u5230\u8FD9\u91CC\uFF1B\u5B8C\u6574\u5185\u5BB9\u5DF2\u4FDD\u5B58\u5728 Paperclip \u4EFB\u52A1\u8BC4\u8BBA\u91CC\u3002\",\n ];\n if (params.issueUrl) {\n lines.push(`Paperclip \u5185\u90E8\u94FE\u63A5\uFF1A${params.issueUrl}\uFF08\u9700\u8981\u8D26\u53F7\u6743\u9650\uFF09`);\n }\n return lines.join(\"\\n\");\n}\n\nfunction buildTerminalReplyText(params: {\n config: FeishuConnectorConfig;\n message: FeishuInboundMessage;\n route: ResolvedRouteConfig;\n session: FeishuSessionData;\n issueTitle: string;\n issueStatus?: string | null;\n issueIdentifier?: string | null;\n issueUrl?: string | null;\n finalCommentBody?: string | null;\n event: AgentSessionEvent;\n}): string {\n const { config, message, route, session, issueTitle, issueStatus, issueIdentifier, event } = params;\n const isDone = event.eventType === \"done\";\n const issueRef = issueDisplayRef(session.paperclipIssueId, issueIdentifier ?? session.paperclipIssueIdentifier);\n const displayTitle = cleanReplyTitle(issueTitle);\n const context = {\n message,\n route,\n issueId: session.paperclipIssueId,\n issueRef,\n issueTitle: displayTitle,\n runId: event.runId,\n runStatus: event.eventType,\n issueUrl: params.issueUrl,\n };\n if (!isDone) {\n return renderDefaultAwareTemplate(\"\u5904\u7406\u5931\u8D25\uFF1A{{issue_title}}\\n\u4EFB\u52A1\uFF1A{{issue_ref}}\", context);\n }\n\n const template = config.completionMessageTemplate ?? DEFAULT_COMPLETION_TEMPLATE;\n if (!isDefaultCompletionTemplate(template)) {\n return renderDefaultAwareTemplate(template, context);\n }\n\n const finalBody = normalizeCommentBody(params.finalCommentBody);\n if (finalBody && (!issueStatus || issueStatus === \"done\" || looksLikeFinalComment(finalBody))) {\n return buildCompletionFromFinalComment({\n issueRef,\n body: finalBody,\n issueUrl: params.issueUrl,\n });\n }\n\n if (!issueStatus || issueStatus === \"done\") {\n return [\n `\u5904\u7406\u5B8C\u6210\uFF1A${displayTitle}`,\n `\u4EFB\u52A1\uFF1A${issueRef}`,\n ].join(\"\\n\");\n }\n\n const firstLine = issueStatus === \"blocked\"\n ? `\u5DF2\u8F6C\u4EA4\u5904\u7406\uFF1A${displayTitle}`\n : `\u8FDB\u5EA6\u66F4\u65B0\uFF1A${displayTitle}`;\n const nextLine = issueStatus === \"blocked\"\n ? \"\u6211\u5DF2\u7ECF\u8F6C\u7ED9\u76F8\u5173\u667A\u80FD\u4F53\u5904\u7406\uFF0C\u5B8C\u6210\u540E\u4F1A\u7EE7\u7EED\u56DE\u5230\u8FD9\u91CC\u3002\"\n : \"\u540E\u7EED\u8FDB\u5C55\u4F1A\u7EE7\u7EED\u56DE\u5230\u8FD9\u91CC\u3002\";\n return [\n firstLine,\n `\u5F53\u524D\u72B6\u6001\uFF1A${issueStatusLabel(issueStatus)}`,\n `\u4EFB\u52A1\uFF1A${issueRef}`,\n nextLine,\n ].join(\"\\n\");\n}\n\nasync function claimTerminalReply(\n ctx: PluginContext,\n replyKey: string,\n event: AgentSessionEvent,\n): Promise<boolean> {\n const scope = {\n scopeKind: \"instance\" as const,\n namespace: \"feishu-run-replies\",\n stateKey: replyKey,\n };\n const existing = await ctx.state.get(scope);\n if (existing) return false;\n await ctx.state.set(scope, {\n claimedAt: new Date().toISOString(),\n runId: event.runId,\n eventType: event.eventType,\n });\n return true;\n}\n\nasync function replyOnAgentSessionTerminal(\n ctx: PluginContext,\n config: FeishuConnectorConfig,\n connection: FeishuConnectionConfig,\n route: ResolvedRouteConfig,\n message: FeishuInboundMessage,\n session: FeishuSessionData,\n issueTitle: string,\n event: AgentSessionEvent,\n): Promise<void> {\n if ((route.replyMode ?? \"thread\") === \"none\") return;\n\n const replyKey = event.eventType === \"done\"\n ? larkIdempotencyKey(\"complete\", session.paperclipIssueId)\n : larkIdempotencyKey(\"terminal\", event.runId, event.eventType);\n if (!(await claimTerminalReply(ctx, replyKey, event))) {\n record(\"info\", \"\u5DF2\u8DF3\u8FC7\u91CD\u590D\u7684\u98DE\u4E66\u5B8C\u6210\u56DE\u590D\", {\n routeId: route.id,\n runId: event.runId,\n eventType: event.eventType,\n });\n return;\n }\n\n const issue = await ctx.issues.get(session.paperclipIssueId, route.companyId).catch(() => null);\n const resolvedIssueTitle = issue?.title ?? session.paperclipIssueTitle ?? issueTitle;\n const comments = await ctx.issues.listComments(session.paperclipIssueId, route.companyId).catch(() => []);\n const finalComment = latestFinalComment(comments, session, route);\n const issueUrl = session.paperclipIssueUrl\n ?? buildPaperclipIssueUrl(config, route, issue?.identifier ?? session.paperclipIssueIdentifier ?? null);\n const displayIssueTitle = cleanReplyTitle(resolvedIssueTitle);\n let cardContent: string;\n if (event.eventType === \"done\") {\n const finalBody = normalizeCommentBody(finalComment?.body ?? null);\n const summary = finalBody\n ? (finalBody.length <= 900 ? finalBody : `${finalBody.slice(0, 900)}...`)\n : \"\u4EFB\u52A1\u5DF2\u5B8C\u6210\u3002\";\n cardContent = buildCompletionCard({\n issueRef: issueDisplayRef(session.paperclipIssueId, issue?.identifier ?? session.paperclipIssueIdentifier),\n issueTitle: displayIssueTitle,\n summary,\n issueUrl,\n });\n } else if (event.eventType === \"error\") {\n cardContent = buildFailureCard({\n issueRef: issueDisplayRef(session.paperclipIssueId, issue?.identifier ?? session.paperclipIssueIdentifier),\n issueTitle: displayIssueTitle,\n errorMessage: event.message ?? undefined,\n });\n } else {\n cardContent = buildProgressCard({\n issueRef: issueDisplayRef(session.paperclipIssueId, issue?.identifier ?? session.paperclipIssueIdentifier),\n issueTitle: displayIssueTitle,\n status: issue?.status ?? \"in_progress\",\n issueUrl,\n });\n }\n const result = await replyToFeishu(\n ctx,\n config,\n connection,\n message,\n cardContent,\n replyKey,\n false,\n { routeId: route.id, issueId: session.paperclipIssueId, reason: \"\u667A\u80FD\u4F53\u5B8C\u6210\u56DE\u590D\u5931\u8D25\" },\n cardContent,\n \"interactive\",\n );\n if (!result?.ok) {\n await ctx.state.delete({\n scopeKind: \"instance\",\n namespace: \"feishu-run-replies\",\n stateKey: replyKey,\n });\n }\n\n await upsertSession(ctx, route.companyId, {\n ...session,\n paperclipIssueTitle: resolvedIssueTitle,\n paperclipIssueIdentifier: issue?.identifier ?? session.paperclipIssueIdentifier,\n paperclipIssueUrl: issueUrl ?? session.paperclipIssueUrl,\n lastRunId: event.runId,\n lastRunStatus: event.eventType,\n lastRunFinishedAt: new Date().toISOString(),\n lastCompletionReplyKey: result?.ok ? replyKey : session.lastCompletionReplyKey,\n updatedAt: new Date().toISOString(),\n });\n await ctx.metrics.write(\"feishu.agent_run.replied\", 1, {\n route: route.id,\n status: event.eventType,\n });\n record(result?.ok ? \"info\" : \"error\", \"\u667A\u80FD\u4F53\u5B8C\u6210\u540E\u7684\u98DE\u4E66\u56DE\u590D\u5DF2\u6267\u884C\", {\n routeId: route.id,\n runId: event.runId,\n eventType: event.eventType,\n result: summarizeLarkResult(result),\n });\n}\n\nfunction scheduleTerminalFallbackReply(\n ctx: PluginContext,\n config: FeishuConnectorConfig,\n connection: FeishuConnectionConfig,\n route: ResolvedRouteConfig,\n message: FeishuInboundMessage,\n session: FeishuSessionData,\n issueTitle: string,\n event: AgentSessionEvent,\n): void {\n const timer = setTimeout(() => {\n void replyOnAgentSessionTerminal(\n ctx,\n config,\n connection,\n route,\n message,\n session,\n issueTitle,\n event,\n ).catch((error) => {\n ctx.logger.error(\"\u53D1\u9001\u98DE\u4E66\u5B8C\u6210\u515C\u5E95\u56DE\u590D\u5931\u8D25\", {\n routeId: route.id,\n runId: event.runId,\n error: String(error),\n });\n record(\"error\", \"\u53D1\u9001\u98DE\u4E66\u5B8C\u6210\u515C\u5E95\u56DE\u590D\u5931\u8D25\", {\n routeId: route.id,\n runId: event.runId,\n error: String(error),\n });\n });\n }, RUN_FALLBACK_DELAY_MS);\n timer.unref?.();\n}\n\nasync function handleInboundMessage(\n ctx: PluginContext,\n raw: unknown,\n options: { connectionId?: string; connectionIds?: string[]; configOverride?: FeishuConnectorConfig } = {},\n): Promise<Record<string, unknown>> {\n const config = options.configOverride ?? await getConfig(ctx);\n let message = extractInboundMessage(raw, options.connectionId);\n const enabledConnections = getEnabledConnections(config);\n const connectionById = new Map(enabledConnections.map((connection) => [connection.id, connection]));\n const candidateIds = [...new Set(\n (options.connectionIds && options.connectionIds.length > 0\n ? options.connectionIds\n : [message.connectionId ?? options.connectionId])\n .filter((connectionId): connectionId is string => typeof connectionId === \"string\" && connectionId.length > 0),\n )];\n const candidateConnections = candidateIds\n .map((connectionId) => connectionById.get(connectionId))\n .filter((connection): connection is FeishuConnectionConfig => !!connection);\n let connection = selectInboundConnection(config, message, candidateConnections)\n ?? resolveConnection(config, message.connectionId ?? options.connectionId);\n if (!connection) {\n throw new Error(\"\u8FD8\u6CA1\u6709\u914D\u7F6E\u53EF\u7528\u7684\u98DE\u4E66\u673A\u5668\u4EBA\u8FDE\u63A5\u3002\u8BF7\u5148\u5728\u300C\u98DE\u4E66\u673A\u5668\u4EBA\u8D26\u53F7\u300D\u91CC\u6DFB\u52A0\u4E00\u9879\uFF0C\u5E76\u4FDD\u6301\u542F\u7528\u3002\");\n }\n message = { ...message, connectionId: connection.id };\n lastInboundEventAt = new Date().toISOString();\n record(\"info\", \"\u6536\u5230\u98DE\u4E66\u6D88\u606F\u4E8B\u4EF6\", inboundMessageDiagnostics(message, connection));\n\n if (isCurrentBotMessage(connection, message)) {\n record(\"info\", \"\u98DE\u4E66\u6D88\u606F\u6765\u81EA\u5F53\u524D\u673A\u5668\u4EBA\u81EA\u8EAB\uFF0C\u5DF2\u5FFD\u7565\u4EE5\u907F\u514D\u81EA\u89E6\u53D1\", inboundMessageDiagnostics(message, connection, {\n reason: \"self_bot_message\",\n currentAppId: connection.appId ?? null,\n }));\n return {\n ok: true,\n ignored: true,\n reason: \"self_bot_message\",\n messageId: message.messageId,\n };\n }\n\n const preEnrichMentionMismatch = await mentionTargetMismatch(config, connection, message);\n if (preEnrichMentionMismatch) {\n record(\"info\", \"\u98DE\u4E66\u6D88\u606F\u660E\u786E @ \u4E86\u5176\u4ED6\u673A\u5668\u4EBA\uFF0C\u5DF2\u8DF3\u8FC7\u5F53\u524D\u8FDE\u63A5\", inboundMessageDiagnostics(message, connection, preEnrichMentionMismatch));\n return {\n ok: true,\n ignored: true,\n reason: \"mentioned_other_bot\",\n messageId: message.messageId,\n ...preEnrichMentionMismatch,\n };\n }\n\n message = await enrichInboundMessage(config, connection, message);\n const enrichedConnection = selectInboundConnection(config, message, candidateConnections);\n if (enrichedConnection && enrichedConnection.id !== connection.id) {\n connection = enrichedConnection;\n message = { ...message, connectionId: connection.id };\n record(\"info\", \"\u98DE\u4E66\u6D88\u606F\u5DF2\u6839\u636E @ \u5BF9\u8C61\u6216\u5165\u53E3\u89C4\u5219\u5207\u6362\u5230\u5BF9\u5E94\u673A\u5668\u4EBA\", inboundMessageDiagnostics(message, connection, {\n candidateConnectionIds: candidateConnections.map((candidate) => candidate.id),\n }));\n }\n if (isCurrentBotMessage(connection, message)) {\n record(\"info\", \"\u98DE\u4E66\u6D88\u606F\u6765\u81EA\u5F53\u524D\u673A\u5668\u4EBA\u81EA\u8EAB\uFF0C\u5DF2\u5FFD\u7565\u4EE5\u907F\u514D\u81EA\u89E6\u53D1\", inboundMessageDiagnostics(message, connection, {\n reason: \"self_bot_message\",\n currentAppId: connection.appId ?? null,\n }));\n return {\n ok: true,\n ignored: true,\n reason: \"self_bot_message\",\n messageId: message.messageId,\n };\n }\n if (isExternalBotMessage(config, connection, message)) {\n record(\"warning\", \"\u68C0\u6D4B\u5230\u5176\u4ED6\u98DE\u4E66\u673A\u5668\u4EBA\u53EF\u80FD\u5728\u540C\u4E00\u4F1A\u8BDD\u62A2\u7B54\uFF0C\u5DF2\u5FFD\u7565\u8FD9\u6761\u673A\u5668\u4EBA\u6D88\u606F\", inboundMessageDiagnostics(message, connection, {\n reason: \"external_bot_message\",\n currentAppId: connection.appId ?? null,\n configuredAppIds: (config.connections ?? []).map((item) => item.appId).filter(Boolean),\n }));\n return {\n ok: true,\n ignored: true,\n conflictDetected: true,\n reason: \"external_bot_message\",\n messageId: message.messageId,\n };\n }\n const mentionMismatch = await mentionTargetMismatch(config, connection, message);\n if (mentionMismatch) {\n record(\"info\", \"\u98DE\u4E66\u6D88\u606F\u660E\u786E @ \u4E86\u5176\u4ED6\u673A\u5668\u4EBA\uFF0C\u5DF2\u8DF3\u8FC7\u5F53\u524D\u8FDE\u63A5\", inboundMessageDiagnostics(message, connection, mentionMismatch));\n return {\n ok: true,\n ignored: true,\n reason: \"mentioned_other_bot\",\n messageId: message.messageId,\n ...mentionMismatch,\n };\n }\n\n const sessionKey = buildSessionKey(message, connection.id);\n const existingBySessionKey = await findSessionByKey(ctx, sessionKey);\n if (sessionAlreadyHandledMessage(existingBySessionKey?.data, message)) {\n await markDeduped(ctx, message, connection.id);\n record(\"info\", \"\u5DF2\u901A\u8FC7\u6301\u4E45\u6D88\u606F\u6620\u5C04\u5FFD\u7565\u91CD\u590D\u7684\u98DE\u4E66\u6D88\u606F\", inboundMessageDiagnostics(message, connection, {\n issueId: existingBySessionKey?.data.paperclipIssueId,\n routeId: existingBySessionKey?.data.routeId,\n dedupeSource: \"message_route\",\n }));\n return {\n ok: true,\n duplicate: true,\n persistedDuplicate: true,\n messageId: message.messageId,\n issueId: existingBySessionKey?.data.paperclipIssueId,\n };\n }\n\n const duplicate = await markDeduped(ctx, message, connection.id);\n if (duplicate) {\n record(\"info\", \"\u5DF2\u5FFD\u7565\u91CD\u590D\u7684\u98DE\u4E66\u6D88\u606F\", inboundMessageDiagnostics(message, connection));\n return { ok: true, duplicate: true, messageId: message.messageId };\n }\n\n const matchingRoutes = resolveMatchingRoutes(config, message, connection.id);\n const matchedRoute = matchingRoutes[0] ?? null;\n if (matchedRoute && matchingRoutes.length > 1) {\n const skippedRoutes = matchingRoutes.slice(1);\n record(\"warning\", \"\u540C\u4E00\u6761\u98DE\u4E66\u6D88\u606F\u547D\u4E2D\u591A\u4E2A\u5165\u53E3\uFF0C\u5DF2\u53EA\u6267\u884C\u6700\u9AD8\u4F18\u5148\u7EA7\u5165\u53E3\", inboundMessageDiagnostics(message, connection, {\n selectedRouteId: matchedRoute.id,\n selectedRouteName: describeRouteEntry(matchedRoute),\n skippedRoutes: skippedRoutes.map((route) => ({\n routeId: route.id,\n routeName: describeRouteEntry(route),\n priority: route.priority ?? 0,\n })),\n conflictDetected: true,\n }));\n }\n if (matchedRoute) {\n record(\"info\", \"\u98DE\u4E66\u6D88\u606F\u5DF2\u547D\u4E2D\u4E1A\u52A1\u5165\u53E3\", inboundMessageDiagnostics(message, connection, {\n routeId: matchedRoute.id,\n routeName: describeRouteEntry(matchedRoute),\n trigger: describeRouteTrigger(matchedRoute),\n targetAgentName: matchedRoute.targetAgentName ?? null,\n companyRef: matchedRoute.companyRef ?? matchedRoute.companyId,\n }));\n }\n\n const directReply = matchedRoute ? quickReplyText(config, message) : null;\n if (matchedRoute && directReply !== null && (matchedRoute.replyMode ?? \"thread\") !== \"none\") {\n const result = await replyToFeishu(\n ctx,\n config,\n connection,\n message,\n directReply,\n larkIdempotencyKey(\"quick\", message.messageId),\n (matchedRoute.replyMode ?? \"thread\") === \"thread\",\n { routeId: matchedRoute.id, reason: \"\u5FEB\u6377\u6D4B\u8BD5\u56DE\u590D\u5931\u8D25\" },\n );\n record(result?.ok ? \"info\" : \"error\", \"\u5DF2\u6267\u884C\u98DE\u4E66\u5FEB\u6377\u6D4B\u8BD5\u56DE\u590D\", {\n routeId: matchedRoute.id,\n messageId: message.messageId,\n result: summarizeLarkResult(result),\n });\n return {\n ok: result?.ok === true,\n duplicate: false,\n quickReply: true,\n routeId: matchedRoute.id,\n replyOk: result?.ok === true,\n result: summarizeLarkResult(result),\n };\n }\n\n let route: ResolvedRouteConfig;\n let existingSession: FeishuSessionData | null = null;\n\n if (matchedRoute) {\n route = await resolveRouteForRun(ctx, matchedRoute);\n existingSession = await findSession(ctx, route.companyId, sessionKey);\n } else {\n const existingByKey = existingBySessionKey ?? await findSessionByKey(ctx, sessionKey);\n if (!existingByKey) {\n record(\"warning\", \"\u98DE\u4E66\u6D88\u606F\u5DF2\u6536\u5230\uFF0C\u4F46\u6CA1\u6709\u547D\u4E2D\u4EFB\u4F55\u4E1A\u52A1\u5165\u53E3\", inboundMessageDiagnostics(message, connection, {\n activeRouteCount: enabledRoutes(config).length,\n routeDiagnostics: enabledRoutes(config).map((route) => routeMatchDiagnostic(route, message, connection.id)),\n }));\n return { ok: false, reason: \"no_route\", messageId: message.messageId };\n }\n existingSession = existingByKey.data;\n route = await resolveRouteFromSession(ctx, config, existingSession, existingByKey.companyId);\n }\n\n let issueId = existingSession?.paperclipIssueId ?? null;\n let issueIdentifier = existingSession?.paperclipIssueIdentifier ?? null;\n let issueTitle = \"\";\n let createdIssue = false;\n let issueCommentId: string | null = null;\n\n if (issueId) {\n if (!issueIdentifier) {\n const existingIssue = await ctx.issues.get(issueId, route.companyId).catch(() => null);\n issueIdentifier = existingIssue?.identifier ?? null;\n }\n const comment = await ctx.issues.createComment(issueId, createCommentBody(message, route), route.companyId);\n issueCommentId = comment.id;\n issueTitle = existingSession?.paperclipIssueTitle ?? createIssueTitle(message);\n } else {\n issueTitle = createIssueTitle(message);\n const issue = await ctx.issues.create({\n companyId: route.companyId,\n projectId: route.projectId,\n title: issueTitle,\n description: createIssueDescription(message, route),\n priority: \"medium\",\n assigneeAgentId: route.targetAgentId,\n });\n issueId = issue.id;\n issueIdentifier = issue.identifier ?? null;\n createdIssue = true;\n }\n\n const issueRef = issueDisplayRef(issueId, issueIdentifier);\n const paperclipIssueUrl = existingSession?.paperclipIssueUrl\n ?? buildPaperclipIssueUrl(config, route, issueIdentifier);\n\n const session: FeishuSessionData = {\n connectionId: connection.id,\n sessionKey,\n routeId: route.id,\n chatId: message.chatId,\n chatName: message.chatName ?? existingSession?.chatName,\n rootMessageId: message.rootMessageId ?? message.messageId,\n threadId: message.threadId,\n requesterOpenId: message.senderOpenId,\n requesterName: message.senderName,\n attachments: message.attachments.length > 0 ? message.attachments : existingSession?.attachments,\n paperclipIssueId: issueId,\n paperclipIssueIdentifier: issueIdentifier ?? undefined,\n paperclipIssueTitle: existingSession?.paperclipIssueTitle ?? issueTitle,\n paperclipIssueUrl: paperclipIssueUrl ?? undefined,\n paperclipAgentId: route.targetAgentId,\n paperclipAgentSessionId: existingSession?.paperclipAgentSessionId,\n replyMode: route.replyMode ?? \"thread\",\n lastCompletionReplyKey: existingSession?.lastCompletionReplyKey,\n createdAt: existingSession?.createdAt ?? new Date().toISOString(),\n lastMessageId: message.messageId,\n processedMessageIds: mergeProcessedMessageIds(existingSession, message.messageId),\n updatedAt: new Date().toISOString(),\n };\n\n await upsertSession(ctx, route.companyId, session);\n\n let ackResult: LarkCliResult | null = null;\n if (config.ackOnInbound && (route.replyMode ?? \"thread\") !== \"none\") {\n const ackCard = buildAckCard({\n agentName: route.targetAgentName ?? \"\u5BF9\u5E94\u667A\u80FD\u4F53\",\n issueRef,\n estimatedDuration: DEFAULT_ESTIMATED_DURATION_LABEL,\n issueUrl: paperclipIssueUrl,\n });\n ackResult = await replyToFeishu(\n ctx,\n config,\n connection,\n message,\n ackCard,\n larkIdempotencyKey(\"ack\", message.messageId),\n false,\n { routeId: route.id, issueId, reason: \"\u9996\u6B21\u53D7\u7406\u56DE\u6267\u5931\u8D25\" },\n ackCard,\n \"interactive\",\n );\n record(ackResult?.ok ? \"info\" : \"error\", \"\u5DF2\u5411\u98DE\u4E66\u53D1\u9001\u4EFB\u52A1\u53D7\u7406\u56DE\u6267\", {\n routeId: route.id,\n routeName: describeRouteEntry(route),\n messageId: message.messageId,\n issueId,\n result: summarizeLarkResult(ackResult),\n });\n }\n\n const attachedResources = await attachFeishuResources(\n ctx,\n config,\n connection,\n message,\n route.companyId,\n issueId,\n issueCommentId,\n );\n\n let runId: string | null = null;\n if (route.targetAgentId) {\n if (!session.paperclipAgentSessionId) {\n const agentSession = await ctx.agents.sessions.create(route.targetAgentId, route.companyId, {\n taskKey: sessionKey,\n reason: \"feishu_message\",\n });\n session.paperclipAgentSessionId = agentSession.sessionId;\n }\n\n const prompt = [\n \"\u6536\u5230\u4E00\u6761\u65B0\u7684\u98DE\u4E66\u9700\u6C42\u3002\u8BF7\u5728 Paperclip \u5185\u5904\u7406\u8FD9\u6761\u9700\u6C42\u3002\",\n \"\",\n \"\u5BF9\u5916\u6C9F\u901A\u89C4\u5219\uFF08\u4E25\u683C\u9075\u5FAA\uFF09\uFF1A\",\n \"- \u6240\u6709\u5BF9\u5916\u56DE\u590D\u5FC5\u987B\u4F7F\u7528 feishu.send_card \u5DE5\u5177\uFF0C\u4EE5\u98DE\u4E66\u5361\u7247\u5F62\u5F0F\u53D1\u9001\",\n \"- \u5361\u7247 JSON \u7ED3\u6784\u5FC5\u987B\u5305\u542B\uFF1Aheader\uFF08title + template \u989C\u8272\uFF09\u3001elements\uFF08div + \u53EF\u9009 action\uFF09\",\n \"- \u4E0D\u8981\u4F7F\u7528 feishu.reply_source_thread \u6216 feishu.send_message \u53D1\u9001\u7EAF\u6587\u672C\u56DE\u590D\",\n \"- \u63D2\u4EF6\u4F1A\u81EA\u52A8\u53D1\u9001\u9996\u6B21\u56DE\u6267\u5361\u7247\u548C\u5B8C\u6210\u72B6\u6001\u5361\u7247\uFF0C\u4F60\u4E0D\u9700\u8981\u91CD\u590D\u53D1\u9001\",\n \"- \u5982\u679C\u4F60\u9700\u8981\u8FFD\u95EE\u7528\u6237\u6216\u8865\u5145\u4FE1\u606F\uFF0C\u4F7F\u7528 feishu.ask_clarification\",\n \"- \u7528\u6237\u8BF4\u201C\u521B\u5EFA\u4EFB\u52A1 / \u6D4B\u8BD5\u4EFB\u52A1 / Paperclip \u4EFB\u52A1\u201D\u65F6\uFF0C\u9ED8\u8BA4\u6307 Paperclip \u4EFB\u52A1\uFF0C\u4E0D\u662F\u98DE\u4E66\u5F85\u529E\u3002\",\n \"- \u53EA\u6709\u7528\u6237\u660E\u786E\u8BF4\u201C\u521B\u5EFA\u98DE\u4E66\u5F85\u529E / \u98DE\u4E66\u4EFB\u52A1 / \u98DE\u4E66 ToDo\u201D\u65F6\uFF0C\u624D\u53EF\u4EE5\u521B\u5EFA\u98DE\u4E66\u5F85\u529E\u3002\",\n \"- \u9700\u8981\u6C89\u6DC0\u5904\u7406\u7ED3\u679C\u65F6\uFF0C\u8BF7\u5199\u5165\u5F53\u524D Paperclip \u4EFB\u52A1\u8BC4\u8BBA\u6216\u66F4\u65B0\u4EFB\u52A1\u72B6\u6001\u3002\",\n \"- \u5728 Paperclip \u4EFB\u52A1\u91CC\u6C47\u62A5\u98DE\u4E66\u6765\u6E90\u65F6\uFF0C\u4F18\u5148\u5199\u7FA4\u540D/\u5165\u53E3\u540D\uFF1B\u4E0D\u8981\u53EA\u5199 oc_ \u6216 om_ \u8FD9\u7C7B\u5185\u90E8 ID\uFF0CID \u53EA\u4F5C\u4E3A\u8FFD\u6EAF\u4FE1\u606F\u9644\u5E26\u3002\",\n \"\",\n \"\u7528\u6237\u539F\u8BDD\uFF1A\",\n message.text,\n ...attachmentPromptLines(attachedResources),\n \"\",\n `Paperclip \u4EFB\u52A1\uFF1A${issueRef}`,\n `\u98DE\u4E66\u6765\u6E90\uFF1A${describeFeishuConversationForDisplay(message, route)}`,\n `\u98DE\u4E66\u5165\u53E3\uFF1A${describeRouteEntry(route)}`,\n `\u53EF\u7528\u98DE\u4E66\u5DE5\u5177\uFF1A${enabledFeishuToolNames(config, {\n connectionId: connection.id,\n routeId: route.id,\n agentId: route.targetAgentId,\n }).join(\", \") || \"\u65E0\"}`,\n \"\u98DE\u4E66\u6D88\u606F\uFF1A\u5DF2\u8BB0\u5F55\uFF0C\u53EF\u901A\u8FC7\u98DE\u4E66\u5DE5\u5177\u56DE\u5230\u539F\u7EBF\u7A0B\",\n message.rootMessageId && message.rootMessageId !== message.messageId\n ? \"\u98DE\u4E66\u8BDD\u9898\uFF1A\u5DF2\u8BB0\u5F55\"\n : null,\n ].filter(Boolean).join(\"\\n\");\n\n let terminalReplyStarted = false;\n const run = await ctx.agents.sessions.sendMessage(session.paperclipAgentSessionId, route.companyId, {\n prompt,\n reason: \"feishu_message\",\n issueId,\n taskId: issueId,\n onEvent: (event) => {\n if (terminalReplyStarted || (event.eventType !== \"done\" && event.eventType !== \"error\")) return;\n terminalReplyStarted = true;\n scheduleTerminalFallbackReply(\n ctx,\n config,\n connection,\n route,\n message,\n session,\n issueTitle,\n event,\n );\n },\n });\n runId = run.runId;\n session.lastRunId = runId;\n session.lastRunStatus = \"running\";\n }\n await upsertSession(ctx, route.companyId, session);\n\n let baseResult: LarkCliResult | null = null;\n const sink = resolveBaseSink(config, route.baseSinkId);\n if (sink) {\n const baseRecord = buildBaseRecord(sink, {\n message,\n route,\n issueId,\n issueTitle,\n agentName: route.targetAgentName,\n });\n baseResult = await writeBaseRecord(ctx, config, connection, sink, baseRecord);\n }\n\n await ctx.activity.log({\n companyId: route.companyId,\n entityType: \"issue\",\n entityId: issueId,\n message: `\u98DE\u4E66\u6D88\u606F\u5DF2\u8F6C\u6210 Paperclip \u4EFB\u52A1\u300C${issueTitle}\u300D`,\n metadata: {\n plugin: PLUGIN_ID,\n routeId: route.id,\n connectionId: connection.id,\n messageId: message.messageId,\n runId,\n },\n });\n await ctx.metrics.write(\"feishu.inbound.routed\", 1, { route: route.id });\n record(\"info\", \"\u5DF2\u628A\u98DE\u4E66\u6D88\u606F\u8F6C\u6210 Paperclip \u4EFB\u52A1\", { issueId, routeId: route.id, runId });\n\n return {\n ok: true,\n duplicate: false,\n createdIssue,\n issueId,\n runId,\n agentSessionId: session.paperclipAgentSessionId ?? null,\n routeId: route.id,\n baseDryRun: baseResult?.dryRun === true,\n ackDryRun: ackResult?.dryRun === true,\n attachments: attachedResources.map((item) => ({\n filename: item.filename,\n attachmentId: item.attachmentId ?? null,\n dryRun: item.dryRun === true,\n error: item.error ?? null,\n })),\n };\n}\n\nfunction mentionNameForSample(connection: FeishuConnectionConfig): string | null {\n const alias = connectionBotAliases(connection)[0];\n if (alias) return alias;\n if (!isTechnicalProfileName(connection.name)) return connection.name?.trim() ?? null;\n return null;\n}\n\nfunction sampleTextForRoute(route: FeishuRouteConfig, connection: FeishuConnectionConfig): string {\n const mentionName = mentionNameForSample(connection);\n const mention = mentionName ? `@${mentionName}` : \"\";\n if (route.matchType === \"keyword\") {\n const keyword = route.keyword?.trim() || \"paperclip\";\n if (mentionName && normalizeMentionValue(keyword) === normalizeMentionValue(mentionName)) {\n return `${mention} \u53EA\u56DE\u590D ok`.trim();\n }\n return [mention, keyword, \"\u53EA\u56DE\u590D ok\"].filter(Boolean).join(\" \");\n }\n if (route.matchType === \"regex\") {\n return [mention, route.regex?.includes(\"paperclip\") ? \"paperclip\" : \"\", \"\u53EA\u56DE\u590D ok\"].filter(Boolean).join(\" \");\n }\n return [mention || \"paperclip\", \"\u53EA\u56DE\u590D ok\"].filter(Boolean).join(\" \");\n}\n\nfunction testRawForRoute(route: FeishuRouteConfig, connection: FeishuConnectionConfig): Record<string, unknown> {\n const trigger = route.keyword?.trim() || route.chatName?.trim() || route.userName?.trim() || route.matchType;\n const safeTrigger = trigger\n .replace(/[^\\p{Letter}\\p{Number}]+/gu, \"-\")\n .replace(/^-+|-+$/g, \"\")\n .slice(0, 24) || \"entry\";\n const suffix = `${safeTrigger}-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;\n return {\n event_id: `evt_test_${suffix}`,\n message_id: `om_test_${suffix}`,\n chat_id: route.chatId || `oc_test_${safeTrigger}`,\n sender_open_id: route.userOpenId || \"ou_paperclip_test_user\",\n sender_name: \"Paperclip \u6D4B\u8BD5\",\n text: sampleTextForRoute(route, connection),\n };\n}\n\nfunction stopSubscribers(): void {\n for (const subscriber of subscribers.values()) {\n subscriber.stop();\n }\n subscribers.clear();\n}\n\nlet shutdownHandlersInstalled = false;\n\nfunction installProcessShutdownHandlers(): void {\n if (shutdownHandlersInstalled) return;\n shutdownHandlersInstalled = true;\n\n const stopAndExit = (signal: NodeJS.Signals) => {\n stopSubscribers();\n setTimeout(() => {\n process.exit(signal === \"SIGINT\" ? 130 : 0);\n }, 50).unref();\n };\n\n process.once(\"SIGTERM\", () => stopAndExit(\"SIGTERM\"));\n process.once(\"SIGINT\", () => stopAndExit(\"SIGINT\"));\n process.once(\"SIGHUP\", () => stopAndExit(\"SIGHUP\"));\n process.once(\"exit\", () => {\n stopSubscribers();\n });\n}\n\nasync function reconcileConfiguredSubscribers(\n ctx: PluginContext,\n config: FeishuConnectorConfig,\n options: { restartAll?: boolean; reason?: string } = {},\n): Promise<void> {\n const listeningConnections = routeListeningConnections(config);\n const connectionById = new Map(listeningConnections.map((connection) => [connection.id, connection]));\n const subscriberPlans = planEventSubscribers(config);\n const primarySubscriberIds = new Set(subscriberPlans.map((plan) => plan.primaryConnectionId));\n for (const [connectionId, subscriber] of subscribers.entries()) {\n if (options.restartAll || config.enableEventSubscriber !== true || !primarySubscriberIds.has(connectionId)) {\n subscriber.stop();\n subscribers.delete(connectionId);\n record(\"info\", \"\u5DF2\u505C\u6B62\u98DE\u4E66\u6D88\u606F\u76D1\u542C\", {\n connectionId,\n profileName: subscriber.profileName,\n reason: options.reason ?? (options.restartAll ? \"restart\" : \"config\"),\n });\n }\n }\n if (!config.enableEventSubscriber) return;\n for (const plan of subscriberPlans) {\n const connection = connectionById.get(plan.primaryConnectionId);\n if (!connection) continue;\n const existing = subscribers.get(plan.primaryConnectionId);\n if (existing?.isRunning()) continue;\n if (existing) {\n subscribers.delete(plan.primaryConnectionId);\n record(\"warning\", \"\u98DE\u4E66\u6D88\u606F\u76D1\u542C\u5DF2\u9000\u51FA\uFF0C\u6B63\u5728\u91CD\u65B0\u542F\u52A8\", {\n connectionId: plan.primaryConnectionId,\n connectionIds: plan.connectionIds,\n profileName: existing.profileName,\n pid: existing.child.pid ?? null,\n exitCode: existing.child.exitCode,\n signalCode: existing.child.signalCode,\n });\n }\n const subscriber = startLarkEventSubscriber({\n bin: larkCliBin(config),\n profileName: connection.profileName,\n eventTypes: config.eventTypes,\n onEvent: (event) => {\n void handleInboundMessage(ctx, event, {\n connectionId: plan.primaryConnectionId,\n connectionIds: plan.connectionIds,\n }).catch((error) => {\n ctx.logger.error(\"\u5904\u7406\u98DE\u4E66\u6D88\u606F\u5931\u8D25\", { connectionId: plan.primaryConnectionId, connectionIds: plan.connectionIds, error: String(error) });\n record(\"error\", \"\u5904\u7406\u98DE\u4E66\u6D88\u606F\u5931\u8D25\", { connectionId: plan.primaryConnectionId, connectionIds: plan.connectionIds, error: String(error) });\n });\n },\n onError: (error) => {\n if (error.message.includes(\"not found handler\")) return;\n ctx.logger.warn(\"\u98DE\u4E66\u6D88\u606F\u76D1\u542C\u51FA\u73B0\u63D0\u9192\", { connectionId: plan.primaryConnectionId, connectionIds: plan.connectionIds, error: error.message });\n record(\"warning\", \"\u98DE\u4E66\u6D88\u606F\u76D1\u542C\u51FA\u73B0\u63D0\u9192\", { connectionId: plan.primaryConnectionId, connectionIds: plan.connectionIds, error: error.message });\n },\n onClose: (code, signal) => {\n if (subscribers.get(plan.primaryConnectionId) === subscriber) {\n subscribers.delete(plan.primaryConnectionId);\n }\n const expectedStop = signal === \"SIGTERM\" || signal === \"SIGINT\";\n if (!expectedStop) {\n record(\"warning\", \"\u98DE\u4E66\u6D88\u606F\u76D1\u542C\u5DF2\u9000\u51FA\", {\n connectionId: plan.primaryConnectionId,\n connectionIds: plan.connectionIds,\n profileName: connection.profileName,\n exitCode: code,\n signalCode: signal,\n });\n }\n },\n });\n subscribers.set(plan.primaryConnectionId, subscriber);\n record(\"info\", \"\u5DF2\u542F\u52A8\u98DE\u4E66\u6D88\u606F\u76D1\u542C\", {\n connectionId: plan.primaryConnectionId,\n connectionIds: plan.connectionIds,\n profileName: connection.profileName,\n subscriberKey: plan.key,\n });\n }\n}\n\nasync function startConfiguredSubscribers(ctx: PluginContext, config: FeishuConnectorConfig): Promise<void> {\n await reconcileConfiguredSubscribers(ctx, config, { restartAll: true, reason: \"config-start\" });\n}\n\nfunction stopSubscriberWatchdog(): void {\n if (!subscriberWatchdog) return;\n clearInterval(subscriberWatchdog);\n subscriberWatchdog = null;\n}\n\nfunction startSubscriberWatchdog(ctx: PluginContext): void {\n if (subscriberWatchdog) return;\n subscriberWatchdog = setInterval(() => {\n void (async () => {\n try {\n const config = await getConfig(ctx);\n await reconcileConfiguredSubscribers(ctx, config, { reason: \"watchdog\" });\n lastWatchdogAt = new Date().toISOString();\n } catch (error) {\n record(\"error\", \"\u98DE\u4E66\u751F\u4EA7\u76D1\u63A7\u81EA\u68C0\u5931\u8D25\", { error: String(error) });\n }\n })();\n }, 30_000);\n subscriberWatchdog.unref();\n}\n\nasync function registerDataHandlers(ctx: PluginContext): Promise<void> {\n ctx.data.register(DATA_KEYS.status, async () => {\n const config = await getConfig(ctx);\n await reconcileConfiguredSubscribers(ctx, config, { reason: \"status-check\" });\n const subscriberPlanByPrimaryId = new Map(\n planEventSubscribers(config).map((plan) => [plan.primaryConnectionId, plan]),\n );\n const shouldCheckProfiles = config.dryRunCli !== true && getEnabledConnections(config).length > 0;\n const profilesResult = shouldCheckProfiles\n ? await listLarkProfiles(config).catch((error) => ({\n profiles: [] as ProfileRow[],\n error: String(error),\n }))\n : { profiles: [] as ProfileRow[], error: undefined };\n const monitor = buildProductionMonitor(config, {\n availableProfileNames: !shouldCheckProfiles || profilesResult.error\n ? undefined\n : new Set(profilesResult.profiles.map((profile) => profile.name)),\n profileReadError: profilesResult.error ?? null,\n });\n const retryQueue = retryQueueSummary(await readRetryQueue(ctx));\n return {\n pluginId: PLUGIN_ID,\n dryRunCli: config.dryRunCli === true,\n eventSubscriberEnabled: config.enableEventSubscriber === true,\n connectionCount: getEnabledConnections(config).length,\n usableConnectionCount: monitor.usableConnectionCount,\n missingProfileConnectionIds: monitor.missingProfileConnectionIds ?? [],\n profileReadError: monitor.profileReadError ?? null,\n routeCount: (config.routes ?? []).filter((route) => route.enabled !== false).length,\n baseSinkCount: (config.baseSinks ?? []).filter((sink) => sink.enabled !== false).length,\n subscribers: [...subscribers.entries()].map(([connectionId, subscriber]) => ({\n connectionId,\n connectionIds: subscriberPlanByPrimaryId.get(connectionId)?.connectionIds ?? [connectionId],\n profileName: subscriber.profileName,\n pid: subscriber.child.pid ?? null,\n killed: subscriber.child.killed,\n running: subscriber.isRunning(),\n })),\n monitor,\n retryQueue,\n lastInboundEventAt,\n recentRecords,\n };\n });\n\n ctx.data.register(DATA_KEYS.catalog, async () => {\n const companies = await ctx.companies.list({ limit: 200 });\n const companyRows = await Promise.all(companies.map(async (company) => {\n const agents = await ctx.agents.list({ companyId: company.id, limit: 500 });\n return {\n id: company.id,\n name: company.name,\n issuePrefix: company.issuePrefix ?? null,\n agents: agents.map((agent) => ({\n id: agent.id,\n name: agent.name,\n title: agent.title ?? null,\n urlKey: agent.urlKey ?? null,\n })),\n };\n }));\n\n return { companies: companyRows };\n });\n\n ctx.data.register(DATA_KEYS.profiles, async () => {\n const config = await getConfig(ctx);\n return await listLarkProfiles(config);\n });\n\n ctx.data.register(DATA_KEYS.capabilities, async () => {\n const config = await getConfig(ctx);\n const schemaDiscovery = await discoverLarkCliSchema(config).catch((error) => ({\n checked: false,\n reason: `lark-cli schema \u626B\u63CF\u5931\u8D25\uFF1A${String(error)}`,\n services: [],\n commands: [],\n errors: [String(error)],\n summary: \"lark-cli schema \u626B\u63CF\u5931\u8D25\u3002\",\n }) satisfies LarkCliSchemaDiscovery);\n return buildFeishuCapabilityCenter(config, schemaDiscovery);\n });\n\n ctx.data.register(DATA_KEYS.issueSource, async (params) => {\n const issueId = readString(params.issueId, params.issue_id);\n if (!issueId) return { found: false, reason: \"missing_issue_id\" };\n const sessionRecord = await findSessionByIssueId(ctx, issueId);\n if (!sessionRecord) return { found: false, sourceKind: null, issueId };\n\n const config = await getConfig(ctx);\n const session = sessionRecord.data;\n const connection = resolveConnection(config, session.connectionId);\n const route = await resolveRouteFromSession(ctx, config, session, sessionRecord.companyId);\n const message = messageFromSession(session);\n const issue = await ctx.issues.get(session.paperclipIssueId, route.companyId).catch(() => null);\n const comments = await ctx.issues.listComments(session.paperclipIssueId, route.companyId).catch(() => []);\n const conversationName = displayNameOrNull(session.chatName)\n ?? displayNameOrNull(route.chatName)\n ?? legacyIssueLine(issue?.description, \"\u98DE\u4E66\u4F1A\u8BDD\");\n const requesterName = displayNameOrNull(session.requesterName)\n ?? legacyIssueLine(issue?.description, \"\u63D0\u51FA\u4EBA\");\n const profilesResult = await listLarkProfiles(config).catch(() => null);\n const connectionProfile = profilesResult?.profiles.find((profile) => profile.name === connection?.profileName);\n const botName = displayNameOrNull(connectionProfile?.botName)\n ?? displayNameOrNull(connection?.botAliases?.[0])\n ?? displayNameOrNull(connection?.name)\n ?? \"\u98DE\u4E66\u673A\u5668\u4EBA\";\n return {\n found: true,\n sourceKind: \"feishu\",\n issueId: session.paperclipIssueId,\n issueIdentifier: issue?.identifier ?? session.paperclipIssueIdentifier ?? null,\n issueTitle: issue?.title ?? session.paperclipIssueTitle ?? null,\n entryName: describeRouteEntry(route),\n routeId: route.id,\n botName,\n connectionId: session.connectionId,\n profileName: connection?.profileName ?? null,\n conversationName,\n conversationLabel: conversationName ?? (session.chatId ? \"\u98DE\u4E66\u4F1A\u8BDD\uFF08\u540D\u79F0\u5F85\u540C\u6B65\uFF09\" : null),\n chatId: session.chatId ?? null,\n requesterName,\n requesterOpenId: session.requesterOpenId ?? null,\n messageId: session.lastMessageId,\n rootMessageId: session.rootMessageId ?? null,\n threadId: session.threadId ?? null,\n replyMode: route.replyMode ?? \"thread\",\n issueUrl: session.paperclipIssueUrl ?? null,\n lastRunId: session.lastRunId ?? null,\n lastRunStatus: session.lastRunStatus ?? null,\n updatedAt: session.updatedAt,\n attachmentCount: session.attachments?.length ?? 0,\n attachments: (session.attachments ?? []).map((attachment) => ({\n filename: attachment.filename ?? null,\n resourceKey: attachment.resourceKey,\n resourceType: attachment.resourceType,\n })),\n recentComments: comments\n .slice()\n .sort((a, b) => commentTime(b) - commentTime(a))\n .slice(0, 5)\n .map((comment) => {\n const body = normalizeCommentBody(comment.body) ?? \"\";\n return {\n id: comment.id,\n body: truncateText(body, 500),\n authorAgentId: comment.authorAgentId ?? null,\n authorUserId: comment.authorUserId ?? null,\n createdAt: comment.createdAt instanceof Date ? comment.createdAt.toISOString() : comment.createdAt ? String(comment.createdAt) : null,\n };\n }),\n };\n });\n\n ctx.data.register(DATA_KEYS.directory, async (params) => {\n const config = await getConfig(ctx);\n return await searchFeishuDirectory(config, params);\n });\n}\n\nasync function registerActionHandlers(ctx: PluginContext): Promise<void> {\n ctx.actions.register(ACTION_KEYS.startGuidedBind, async (params) => {\n const config = await getConfig(ctx);\n const profileName = readString(params.profileName);\n const brand = readString(params.brand) === \"lark\" ? \"lark\" : \"feishu\";\n if (!profileName) throw new Error(\"\u8BF7\u586B\u5199\u8FD9\u6B21\u8981\u4FDD\u5B58\u7684\u98DE\u4E66\u673A\u5668\u4EBA\u540D\u79F0\u3002\");\n\n const existing = guidedBindSessions.get(profileName);\n if (existing?.isRunning()) existing.stop();\n\n const session = startLarkConfigInit({\n bin: larkCliBin(config),\n profileName,\n brand,\n lang: \"zh\",\n });\n guidedBindSessions.set(profileName, session);\n setTimeout(() => {\n const current = guidedBindSessions.get(profileName);\n if (current === session && !session.isRunning()) guidedBindSessions.delete(profileName);\n }, 10 * 60 * 1000).unref();\n\n const snapshot = await session.waitForReady();\n if (!snapshot.ok && !snapshot.running) {\n const detail = [snapshot.stderr, snapshot.stdout].filter(Boolean).join(\"\\n\");\n record(\"error\", \"\u98DE\u4E66\u5B98\u65B9\u5411\u5BFC\u542F\u52A8\u5931\u8D25\", { profileName, result: snapshot });\n throw new Error(detail || \"lark-cli config init --new \u6267\u884C\u5931\u8D25\");\n }\n\n record(\"info\", \"\u5DF2\u542F\u52A8\u98DE\u4E66\u5B98\u65B9\u7ED1\u5B9A\u5411\u5BFC\", {\n profileName,\n url: snapshot.url,\n running: snapshot.running,\n });\n const { ok: _snapshotOk, ...snapshotWithoutOk } = snapshot;\n return {\n ok: true,\n ...snapshotWithoutOk,\n };\n });\n\n ctx.actions.register(ACTION_KEYS.finishGuidedBind, async (params) => {\n const config = await getConfig(ctx);\n const profileName = readString(params.profileName);\n if (!profileName) throw new Error(\"\u8BF7\u5148\u751F\u6210\u98DE\u4E66\u5B98\u65B9\u7ED1\u5B9A\u94FE\u63A5\u3002\");\n\n const result = await listLarkProfiles(config);\n if (result.error) throw new Error(result.error);\n\n const configuredProfileNames = new Set((config.connections ?? [])\n .map((connection) => connection.profileName)\n .filter((name): name is string => typeof name === \"string\" && name.trim().length > 0));\n const profile = result.profiles.find((item) => item.name === profileName);\n const unlinkedProfiles = result.profiles.filter((item) => !configuredProfileNames.has(item.name));\n const fallbackProfile = unlinkedProfiles.length === 1 ? unlinkedProfiles[0] : undefined;\n if (!profile) {\n if (fallbackProfile) {\n record(\"warning\", \"\u98DE\u4E66\u5B98\u65B9\u7ED1\u5B9A\u8FD4\u56DE\u4E86\u65B0 profile\uFF0C\u4F46\u540D\u79F0\u4E0D\u662F\u9884\u671F\u4FDD\u5B58\u4EE3\u53F7\", {\n expectedProfileName: profileName,\n actualProfileName: fallbackProfile.name,\n appId: fallbackProfile.appId,\n });\n return {\n ok: true,\n profile: fallbackProfile,\n warning: `\u98DE\u4E66\u5DF2\u7ED1\u5B9A\u6210\u529F\uFF0C\u4F46 lark-cli \u8FD4\u56DE\u7684\u4FDD\u5B58\u4EE3\u53F7\u662F\u300C${fallbackProfile.name}\u300D\uFF0C\u4E0D\u662F\u300C${profileName}\u300D\u3002\u6211\u5DF2\u6309\u5B9E\u9645\u8FD4\u56DE\u7684\u673A\u5668\u4EBA\u52A0\u5165\u5217\u8868\u3002`,\n };\n }\n const available = result.profiles.map((item) => item.name).join(\"\u3001\") || \"\u7A7A\";\n throw new Error(`\u8FD8\u6CA1\u6709\u5728\u5F53\u524D\u8FD0\u884C\u73AF\u5883\u770B\u5230\u521A\u521A\u7ED1\u5B9A\u7684\u300C${profileName}\u300D\u3002\u5F53\u524D lark-cli \u53EA\u770B\u5230\uFF1A${available}\u3002\u8BF7\u786E\u8BA4\u98DE\u4E66\u9875\u9762\u5DF2\u7ECF\u70B9\u5B8C\u6388\u6743\uFF1B\u5982\u679C\u8FD8\u662F\u6CA1\u6709\u51FA\u73B0\uFF0C\u8BF7\u91CD\u65B0\u7ED1\u5B9A\uFF0C\u6216\u8BA9\u5DE5\u7A0B\u5E08\u68C0\u67E5 lark-cli profile list\u3002`);\n }\n\n const session = guidedBindSessions.get(profileName);\n if (session?.isRunning()) session.stop();\n guidedBindSessions.delete(profileName);\n record(\"info\", \"\u98DE\u4E66\u5B98\u65B9\u7ED1\u5B9A\u5DF2\u786E\u8BA4\", { profileName, appId: profile.appId });\n return {\n ok: true,\n profile,\n };\n });\n\n ctx.actions.register(ACTION_KEYS.startUserAuth, async (params) => {\n const config = await getConfig(ctx);\n const profileName = readString(params.profileName);\n if (!profileName) throw new Error(\"\u8BF7\u5148\u9009\u62E9\u8981\u8865\u5145\u7528\u6237\u6388\u6743\u7684\u98DE\u4E66\u673A\u5668\u4EBA\u3002\");\n\n const result = await runLarkCli({\n bin: larkCliBin(config),\n args: [\n \"--profile\",\n profileName,\n \"auth\",\n \"login\",\n \"--recommend\",\n \"--no-wait\",\n \"--json\",\n ],\n timeoutMs: 15_000,\n });\n if (!result.ok) {\n const detail = truncateText(result.stderr || result.stdout || \"\u98DE\u4E66\u7528\u6237\u6388\u6743\u94FE\u63A5\u751F\u6210\u5931\u8D25\", 700);\n record(\"error\", \"\u98DE\u4E66\u7528\u6237\u6388\u6743\u94FE\u63A5\u751F\u6210\u5931\u8D25\", { profileName, result: summarizeLarkResult(result) });\n throw new Error(detail);\n }\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(result.stdout);\n } catch {\n parsed = {};\n }\n const root = asRecord(parsed) ?? {};\n const deviceCode = readString(root.device_code, root.deviceCode);\n const verificationUrl = readString(root.verification_url, root.verificationUrl);\n const expiresIn = typeof root.expires_in === \"number\" ? root.expires_in : 600;\n if (!deviceCode || !verificationUrl) {\n throw new Error(\"lark-cli \u6CA1\u6709\u8FD4\u56DE\u98DE\u4E66\u7528\u6237\u6388\u6743\u94FE\u63A5\u3002\u8BF7\u786E\u8BA4 lark-cli \u5DF2\u66F4\u65B0\u5230\u652F\u6301 device flow \u7684\u7248\u672C\u3002\");\n }\n\n userAuthSessions.set(profileName, {\n profileName,\n deviceCode,\n verificationUrl,\n expiresAt: Date.now() + expiresIn * 1000,\n });\n record(\"info\", \"\u5DF2\u751F\u6210\u98DE\u4E66\u7528\u6237\u6388\u6743\u94FE\u63A5\", { profileName, expiresIn });\n return {\n ok: true,\n profileName,\n url: verificationUrl,\n expiresIn,\n userCode: readString(root.user_code, root.userCode),\n };\n });\n\n ctx.actions.register(ACTION_KEYS.finishUserAuth, async (params) => {\n const config = await getConfig(ctx);\n const profileName = readString(params.profileName);\n if (!profileName) throw new Error(\"\u8BF7\u5148\u9009\u62E9\u8981\u786E\u8BA4\u6388\u6743\u7684\u98DE\u4E66\u673A\u5668\u4EBA\u3002\");\n\n const session = userAuthSessions.get(profileName);\n if (!session) throw new Error(\"\u8FD9\u6B21\u7528\u6237\u6388\u6743\u94FE\u63A5\u5DF2\u7ECF\u5931\u6548\u3002\u8BF7\u91CD\u65B0\u70B9\u51FB\u201C\u8865\u7528\u6237\u6388\u6743\u201D\u3002\");\n if (Date.now() > session.expiresAt) {\n userAuthSessions.delete(profileName);\n throw new Error(\"\u8FD9\u6B21\u98DE\u4E66\u7528\u6237\u6388\u6743\u94FE\u63A5\u5DF2\u7ECF\u8FC7\u671F\u3002\u8BF7\u91CD\u65B0\u70B9\u51FB\u201C\u8865\u7528\u6237\u6388\u6743\u201D\u3002\");\n }\n\n const result = await runLarkCli({\n bin: larkCliBin(config),\n args: [\n \"--profile\",\n profileName,\n \"auth\",\n \"login\",\n \"--device-code\",\n session.deviceCode,\n \"--json\",\n ],\n timeoutMs: 60_000,\n });\n if (!result.ok) {\n const detail = truncateText(result.stderr || result.stdout || \"\u98DE\u4E66\u7528\u6237\u6388\u6743\u8FD8\u6CA1\u6709\u5B8C\u6210\", 700);\n record(\"warning\", \"\u98DE\u4E66\u7528\u6237\u6388\u6743\u786E\u8BA4\u5931\u8D25\", { profileName, result: summarizeLarkResult(result) });\n throw new Error(detail);\n }\n\n userAuthSessions.delete(profileName);\n const profiles = await listLarkProfiles(config);\n if (profiles.error) throw new Error(profiles.error);\n const profile = profiles.profiles.find((item) => item.name === profileName);\n record(\"info\", \"\u98DE\u4E66\u7528\u6237\u6388\u6743\u5DF2\u786E\u8BA4\", { profileName, user: profile?.user });\n return {\n ok: true,\n profile,\n };\n });\n\n ctx.actions.register(ACTION_KEYS.bindProfile, async (params) => {\n const config = await getConfig(ctx);\n const profileName = readString(params.profileName);\n const appId = readString(params.appId);\n const inlineAppSecret = readString(params.appSecret);\n const appSecretRef = readString(params.appSecretRef, params.secretRef);\n const brand = readString(params.brand) === \"lark\" ? \"lark\" : \"feishu\";\n if (!profileName) throw new Error(\"\u8BF7\u586B\u5199\u98DE\u4E66\u5E94\u7528\u914D\u7F6E\u540D\u79F0\u3002\");\n if (!appId) throw new Error(\"\u8BF7\u586B\u5199\u98DE\u4E66 App ID\u3002\");\n const appSecret = inlineAppSecret ?? (appSecretRef ? await ctx.secrets.resolve(appSecretRef) : undefined);\n if (!appSecret) throw new Error(\"\u8BF7\u586B\u5199\u98DE\u4E66 App Secret\uFF0C\u6216\u63D0\u4F9B Paperclip Secret Ref\u3002\");\n\n const existingProfiles = await listLarkProfiles(config);\n const existingProfile = existingProfiles.error ? undefined : sameAppIdProfile(existingProfiles.profiles, appId);\n if (existingProfile) {\n record(\"info\", \"\u98DE\u4E66\u5E94\u7528\u5DF2\u5B58\u5728\uFF0C\u5DF2\u590D\u7528\u5F53\u524D\u8FD0\u884C\u73AF\u5883\u91CC\u7684 profile\", {\n requestedProfileName: profileName,\n profileName: existingProfile.name,\n appId,\n brand: existingProfile.brand ?? brand,\n });\n return {\n ok: true,\n profileName: existingProfile.name,\n requestedProfileName: profileName,\n appId,\n brand: existingProfile.brand ?? brand,\n reusedExistingProfile: true,\n profile: existingProfile,\n result: { ok: true, skipped: true },\n };\n }\n\n const result = await runLarkCli({\n bin: larkCliBin(config),\n args: buildProfileAddArgs({ name: profileName, appId, brand }),\n stdin: `${appSecret}\\n`,\n timeoutMs: 30_000,\n });\n const redactSecret = (value: string): string => value.split(appSecret).join(\"[redacted]\");\n if (!result.ok) {\n const detail = redactSecretFromText([result.stderr.trim(), result.stdout.trim()].filter(Boolean).join(\"\\n\"), appSecret);\n const duplicateProfileName = extractDuplicateAppIdProfileName(detail);\n if (duplicateProfileName) {\n const refreshedProfiles = await listLarkProfiles(config);\n const refreshedProfile = refreshedProfiles.error\n ? undefined\n : sameAppIdProfile(refreshedProfiles.profiles, appId);\n const reusedProfile = refreshedProfile ?? {\n name: duplicateProfileName,\n appId,\n brand,\n active: false,\n user: null,\n tokenStatus: null,\n };\n record(\"info\", \"\u98DE\u4E66\u5E94\u7528\u5DF2\u7ED1\u5B9A\u8FC7\uFF0C\u5DF2\u590D\u7528\u5DF2\u6709 profile\", {\n requestedProfileName: profileName,\n profileName: reusedProfile.name,\n appId,\n brand: reusedProfile.brand ?? brand,\n });\n return {\n ok: true,\n profileName: reusedProfile.name,\n requestedProfileName: profileName,\n appId,\n brand: reusedProfile.brand ?? brand,\n reusedExistingProfile: true,\n profile: reusedProfile,\n result: { ok: true, skipped: true },\n };\n }\n record(\"error\", \"\u98DE\u4E66\u5E94\u7528\u7ED1\u5B9A\u5931\u8D25\", {\n profileName,\n appId,\n appSecretRefUsed: Boolean(appSecretRef && !inlineAppSecret),\n result: summarizeLarkResult(result, [appSecret]),\n });\n throw new Error(detail || \"lark-cli profile add \u6267\u884C\u5931\u8D25\");\n }\n\n record(\"info\", \"\u98DE\u4E66\u5E94\u7528\u5DF2\u7ED1\u5B9A\u5230\u5F53\u524D\u8FD0\u884C\u73AF\u5883\", {\n profileName,\n appId,\n brand,\n appSecretRefUsed: Boolean(appSecretRef && !inlineAppSecret),\n });\n return {\n ok: true,\n profileName,\n appId,\n brand,\n appSecretRefUsed: Boolean(appSecretRef && !inlineAppSecret),\n result: {\n ok: result.ok,\n dryRun: result.dryRun === true,\n code: result.code,\n },\n };\n });\n\n ctx.actions.register(ACTION_KEYS.testRoute, async (params) => {\n const config = await getConfig(ctx);\n const routeId = readString(params.routeId);\n if (!routeId) throw new Error(\"\u8BF7\u5148\u9009\u62E9\u8981\u6D4B\u8BD5\u7684\u98DE\u4E66\u5165\u53E3\u3002\");\n const route = (config.routes ?? []).find((candidate) => candidate.id === routeId);\n if (!route) throw new Error(`\u6CA1\u6709\u627E\u5230\u98DE\u4E66\u5165\u53E3\u300C${routeId}\u300D\u3002`);\n if (route.enabled === false) throw new Error(\"\u8FD9\u6761\u98DE\u4E66\u5165\u53E3\u5DF2\u6682\u505C\u3002\u8BF7\u5148\u542F\u7528\u540E\u518D\u6D4B\u8BD5\u3002\");\n const connection = resolveConnection(config, route.connectionId);\n if (!connection) throw new Error(\"\u8FD9\u6761\u5165\u53E3\u6CA1\u6709\u53EF\u7528\u7684\u98DE\u4E66\u673A\u5668\u4EBA\u3002\");\n\n const testConfig = normalizeConfig({\n ...config,\n dryRunCli: true,\n enableQuickReply: true,\n quickReplyRegex: \".+\",\n quickReplyText: config.quickReplyText || \"ok\",\n });\n const raw = testRawForRoute(route, connection);\n const result = await handleInboundMessage(ctx, raw, {\n connectionId: connection.id,\n configOverride: testConfig,\n });\n record(result.quickReply ? \"info\" : \"warning\", \"\u98DE\u4E66\u5165\u53E3\u6D4B\u8BD5\u5DF2\u6267\u884C\", {\n routeId: route.id,\n sampleText: raw.text,\n result,\n });\n return {\n ok: result.ok === true && result.quickReply === true,\n dryRun: true,\n routeId: route.id,\n sampleText: raw.text,\n result,\n message: result.quickReply\n ? \"\u6D4B\u8BD5\u901A\u8FC7\uFF1A\u5165\u53E3\u80FD\u5339\u914D\u98DE\u4E66\u6D88\u606F\uFF0C\u5E76\u4F1A\u7528\u673A\u5668\u4EBA\u56DE\u590D\u3002\"\n : \"\u6D4B\u8BD5\u6CA1\u6709\u8D70\u901A\uFF1A\u8BF7\u68C0\u67E5\u5165\u53E3\u7684\u76D1\u542C\u65B9\u5F0F\u3001\u5173\u952E\u8BCD\u6216\u9AD8\u7EA7\u89C4\u5219\u3002\",\n };\n });\n\n ctx.actions.register(ACTION_KEYS.checkPermissions, async (params) => {\n const config = await getConfig(ctx);\n const result = await checkFeishuPermissions(config, params);\n await persistPermissionCheck(ctx, config, params, result);\n return result;\n });\n\n ctx.actions.register(ACTION_KEYS.retryFailedDeliveries, async () => {\n const config = await getConfig(ctx);\n return await retryFailedDeliveries(ctx, config);\n });\n\n ctx.actions.register(ACTION_KEYS.replyIssueSourceThread, async (params) => {\n const issueId = readString(params.issueId, params.issue_id);\n const text = readString(params.text, params.markdown);\n if (!issueId) throw new Error(\"\u8BF7\u5148\u6253\u5F00\u4E00\u4E2A\u7531\u98DE\u4E66\u521B\u5EFA\u7684 Paperclip Issue\u3002\");\n if (!text) throw new Error(\"\u8BF7\u586B\u5199\u8981\u56DE\u590D\u5230\u98DE\u4E66\u539F\u7EBF\u7A0B\u7684\u5185\u5BB9\u3002\");\n return await replyOriginalFeishuThreadFromTool(\n ctx,\n readString(params.runId) ?? `issue-action-${issueId}`,\n { issueId, replyMode: params.replyMode },\n text,\n \"issue-action\",\n \"\u5DF2\u56DE\u590D\u539F\u98DE\u4E66\u4F1A\u8BDD\",\n \"reply_source_thread\",\n );\n });\n\n ctx.actions.register(ACTION_KEYS.downloadIssueAttachments, async (params) => {\n const issueId = readString(params.issueId, params.issue_id);\n if (!issueId) throw new Error(\"\u8BF7\u5148\u6253\u5F00\u4E00\u4E2A\u7531\u98DE\u4E66\u521B\u5EFA\u7684 Paperclip Issue\u3002\");\n return await downloadFeishuAttachmentsFromTool(ctx, readString(params.runId) ?? `issue-action-${issueId}`, { issueId });\n });\n\n ctx.actions.register(ACTION_KEYS.writeIssueBaseRecord, async (params) => {\n const issueId = readString(params.issueId, params.issue_id);\n if (!issueId) throw new Error(\"\u8BF7\u5148\u6253\u5F00\u4E00\u4E2A\u7531\u98DE\u4E66\u521B\u5EFA\u7684 Paperclip Issue\u3002\");\n const sessionRecord = await findSessionByIssueId(ctx, issueId);\n if (!sessionRecord) throw new Error(\"\u6CA1\u6709\u627E\u5230\u8FD9\u4E2A Issue \u5BF9\u5E94\u7684\u98DE\u4E66\u6765\u6E90\uFF0C\u4E0D\u80FD\u81EA\u52A8\u5199\u5165\u5165\u53E3\u914D\u7F6E\u7684\u591A\u7EF4\u8868\u683C\u3002\");\n\n const config = await getConfig(ctx);\n const route = await resolveRouteFromSession(ctx, config, sessionRecord.data, sessionRecord.companyId);\n const sink = resolveBaseSink(config, readString(params.sinkId) ?? route.baseSinkId);\n if (!sink) throw new Error(\"\u8FD9\u4E2A\u98DE\u4E66\u5165\u53E3\u6CA1\u6709\u914D\u7F6E\u53EF\u7528\u7684\u591A\u7EF4\u8868\u683C\u89C4\u5219\u3002\u8BF7\u5148\u5728\u9AD8\u7EA7\u9875\u914D\u7F6E\u540C\u6B65\u89C4\u5219\u3002\");\n const connection = resolveConnection(config, sink.connectionId ?? sessionRecord.data.connectionId);\n if (!connection) throw new Error(\"\u591A\u7EF4\u8868\u683C\u89C4\u5219\u6CA1\u6709\u627E\u5230\u53EF\u7528\u7684\u98DE\u4E66\u673A\u5668\u4EBA\u8FDE\u63A5\u3002\");\n const disabled = disabledFeishuCapabilityResult(config, \"write_base_record\", {\n connectionId: connection.id,\n routeId: route.id,\n agentId: sessionRecord.data.paperclipAgentId,\n });\n if (disabled) return disabled;\n\n const issue = await ctx.issues.get(sessionRecord.data.paperclipIssueId, route.companyId).catch(() => null);\n const message = messageFromSession(sessionRecord.data);\n const extraRecord = typeof params.record === \"object\" && params.record !== null && !Array.isArray(params.record)\n ? params.record as Record<string, unknown>\n : {};\n const recordJson = {\n ...buildBaseRecord(sink, {\n message,\n route,\n issueId: sessionRecord.data.paperclipIssueId,\n issueRef: issue?.identifier ?? sessionRecord.data.paperclipIssueIdentifier,\n issueUrl: sessionRecord.data.paperclipIssueUrl,\n issueTitle: issue?.title ?? sessionRecord.data.paperclipIssueTitle,\n agentName: route.targetAgentName,\n runId: sessionRecord.data.lastRunId,\n runStatus: sessionRecord.data.lastRunStatus,\n }),\n ...extraRecord,\n };\n const result = await writeBaseRecord(ctx, config, connection, sink, recordJson);\n return result.ok\n ? { content: result.dryRun ? \"\u6D4B\u8BD5\u6A21\u5F0F\uFF1A\u591A\u7EF4\u8868\u683C\u6CA1\u6709\u771F\u5B9E\u5199\u5165\uFF0C\u547D\u4EE4\u5DF2\u751F\u6210\u3002\" : \"\u591A\u7EF4\u8868\u683C\u5DF2\u5199\u5165\u3002\", data: result }\n : { error: result.stderr || `lark-cli exited with ${result.code}`, data: result };\n });\n\n ctx.actions.register(ACTION_KEYS.lookupIssueRequester, async (params) => {\n const issueId = readString(params.issueId, params.issue_id);\n if (!issueId) throw new Error(\"\u8BF7\u5148\u6253\u5F00\u4E00\u4E2A\u7531\u98DE\u4E66\u521B\u5EFA\u7684 Paperclip Issue\u3002\");\n const sessionRecord = await findSessionByIssueId(ctx, issueId);\n if (!sessionRecord) throw new Error(\"\u6CA1\u6709\u627E\u5230\u8FD9\u4E2A Issue \u5BF9\u5E94\u7684\u98DE\u4E66\u6765\u6E90\uFF0C\u4E0D\u80FD\u81EA\u52A8\u67E5\u8BE2\u63D0\u51FA\u4EBA\u3002\");\n\n const config = await getConfig(ctx);\n const connection = resolveConnection(config, sessionRecord.data.connectionId);\n const disabled = disabledFeishuCapabilityResult(config, \"lookup_user\", {\n connectionId: connection?.id,\n routeId: sessionRecord.data.routeId,\n agentId: sessionRecord.data.paperclipAgentId,\n });\n if (disabled) return disabled;\n const query = readString(params.query, sessionRecord.data.requesterName, sessionRecord.data.requesterOpenId);\n if (!query) throw new Error(\"\u8FD9\u4E2A\u98DE\u4E66\u6765\u6E90\u6CA1\u6709\u63D0\u51FA\u4EBA\u59D3\u540D\u6216 open_id\uFF0C\u65E0\u6CD5\u67E5\u8BE2\u3002\");\n const result = await searchFeishuDirectory(config, {\n profileName: connection?.profileName,\n userQuery: query,\n });\n return {\n content: result.userError\n ? `\u98DE\u4E66\u7528\u6237\u67E5\u8BE2\u5931\u8D25\uFF1A${result.userError}`\n : result.users.length > 0\n ? `\u627E\u5230 ${result.users.length} \u4E2A\u98DE\u4E66\u7528\u6237\u3002`\n : \"\u6CA1\u6709\u627E\u5230\u5339\u914D\u7684\u98DE\u4E66\u7528\u6237\u3002\",\n data: result,\n error: result.userError,\n };\n });\n\n ctx.actions.register(ACTION_KEYS.replyIssueCommentToFeishu, async (params) => {\n const issueId = readString(params.issueId, params.issue_id);\n const commentId = readString(params.commentId, params.comment_id);\n if (!issueId) throw new Error(\"\u8BF7\u5148\u6253\u5F00\u4E00\u4E2A\u7531\u98DE\u4E66\u521B\u5EFA\u7684 Paperclip Issue\u3002\");\n if (!commentId) throw new Error(\"\u8BF7\u9009\u62E9\u8981\u56DE\u590D\u5230\u98DE\u4E66\u7684\u8BC4\u8BBA\u3002\");\n const sessionRecord = await findSessionByIssueId(ctx, issueId);\n if (!sessionRecord) throw new Error(\"\u6CA1\u6709\u627E\u5230\u8FD9\u4E2A Issue \u5BF9\u5E94\u7684\u98DE\u4E66\u6765\u6E90\uFF0C\u4E0D\u80FD\u81EA\u52A8\u56DE\u590D\u8BC4\u8BBA\u3002\");\n const config = await getConfig(ctx);\n const route = await resolveRouteFromSession(ctx, config, sessionRecord.data, sessionRecord.companyId);\n const comments = await ctx.issues.listComments(sessionRecord.data.paperclipIssueId, route.companyId);\n const comment = comments.find((item) => item.id === commentId);\n const text = normalizeCommentBody(comment?.body);\n if (!comment || !text) throw new Error(\"\u6CA1\u6709\u627E\u5230\u8FD9\u6761\u8BC4\u8BBA\uFF0C\u6216\u8BC4\u8BBA\u6B63\u6587\u4E3A\u7A7A\u3002\");\n return await replyOriginalFeishuThreadFromTool(\n ctx,\n readString(params.runId) ?? `issue-comment-${commentId}`,\n { issueId, replyMode: params.replyMode },\n text,\n \"issue-comment\",\n \"\u5DF2\u628A\u8BC4\u8BBA\u56DE\u590D\u5230\u539F\u98DE\u4E66\u4F1A\u8BDD\",\n \"reply_source_thread\",\n );\n });\n\n ctx.actions.register(ACTION_KEYS.simulateInboundMessage, async (params) => {\n return await handleInboundMessage(ctx, params.raw ?? params, {\n connectionId: typeof params.connectionId === \"string\" ? params.connectionId : undefined,\n connectionIds: Array.isArray(params.connectionIds)\n ? params.connectionIds.filter((value): value is string => typeof value === \"string\" && value.length > 0)\n : undefined,\n });\n });\n\n ctx.actions.register(ACTION_KEYS.sendMessage, async (params) => {\n const config = await getConfig(ctx);\n const connection = resolveConnection(config, typeof params.connectionId === \"string\" ? params.connectionId : undefined);\n if (!connection) throw new Error(\"\u8FD8\u6CA1\u6709\u914D\u7F6E\u53EF\u7528\u7684\u98DE\u4E66\u673A\u5668\u4EBA\u8FDE\u63A5\u3002\");\n const args = buildSendMessageArgs({\n profileName: connection.profileName,\n identity: \"bot\",\n chatId: typeof params.chatId === \"string\" ? params.chatId : undefined,\n userId: typeof params.userId === \"string\" ? params.userId : undefined,\n text: typeof params.text === \"string\" ? params.text : undefined,\n markdown: typeof params.markdown === \"string\" ? params.markdown : undefined,\n content: typeof params.content === \"string\" ? params.content : undefined,\n msgType: typeof params.msgType === \"string\" ? params.msgType : undefined,\n idempotencyKey: typeof params.idempotencyKey === \"string\" ? params.idempotencyKey : undefined,\n });\n return await runLarkCli({ bin: larkCliBin(config), args, dryRun: config.dryRunCli === true });\n });\n\n ctx.actions.register(ACTION_KEYS.writeBaseRecord, async (params) => {\n const config = await getConfig(ctx);\n const sink = resolveBaseSink(config, typeof params.sinkId === \"string\" ? params.sinkId : undefined);\n if (!sink) throw new Error(\"\u6CA1\u6709\u627E\u5230\u53EF\u7528\u7684\u591A\u7EF4\u8868\u683C\u5199\u5165\u89C4\u5219\u3002\u8BF7\u68C0\u67E5\u7B2C 3 \u6B65\u91CC\u7684\u89C4\u5219\u4EE3\u53F7\u662F\u5426\u4E00\u81F4\uFF0C\u5E76\u786E\u8BA4\u5DF2\u542F\u7528\u3002\");\n const connection = resolveConnection(config, sink.connectionId);\n if (!connection) throw new Error(\"\u591A\u7EF4\u8868\u683C\u5199\u5165\u89C4\u5219\u6CA1\u6709\u627E\u5230\u53EF\u7528\u7684\u98DE\u4E66\u673A\u5668\u4EBA\u8FDE\u63A5\u3002\");\n const recordJson = typeof params.record === \"object\" && params.record !== null && !Array.isArray(params.record)\n ? params.record as Record<string, unknown>\n : {};\n return await writeBaseRecord(ctx, config, connection, sink, recordJson);\n });\n}\n\nasync function replyOriginalFeishuThreadFromTool(\n ctx: PluginContext,\n runId: string,\n payload: Record<string, unknown>,\n text: string,\n idempotencyScope: string,\n successVerb: string,\n capabilityKey = \"reply_source_thread\",\n): Promise<ToolResult> {\n const issueId = typeof payload.issueId === \"string\" ? payload.issueId : undefined;\n const sessionRecord = await findSessionForTool(ctx, runId, issueId);\n if (!sessionRecord) {\n return {\n error: \"\u6CA1\u6709\u627E\u5230\u5F53\u524D\u8FD0\u884C\u5BF9\u5E94\u7684\u98DE\u4E66\u539F\u4F1A\u8BDD\u3002\u53EA\u6709\u4ECE\u98DE\u4E66\u5165\u53E3\u521B\u5EFA\u7684 Paperclip \u4EFB\u52A1\uFF0C\u624D\u80FD\u81EA\u52A8\u56DE\u5230\u539F\u4F1A\u8BDD\u3002\",\n };\n }\n\n const config = await getConfig(ctx);\n const connection = resolveConnection(config, sessionRecord.data.connectionId);\n if (!connection) return { error: \"\u6CA1\u6709\u627E\u5230\u5F53\u524D\u98DE\u4E66\u4F1A\u8BDD\u5BF9\u5E94\u7684\u673A\u5668\u4EBA\u8FDE\u63A5\u3002\" };\n\n const route = await resolveRouteFromSession(ctx, config, sessionRecord.data, sessionRecord.companyId);\n const disabled = disabledFeishuCapabilityResult(config, capabilityKey, {\n connectionId: connection.id,\n routeId: route.id,\n agentId: sessionRecord.data.paperclipAgentId,\n });\n if (disabled) return disabled;\n const message = messageFromSession(sessionRecord.data);\n const explicitReplyMode = payload.replyMode === \"message\" || payload.replyMode === \"thread\"\n ? payload.replyMode\n : undefined;\n const replyInThread = explicitReplyMode\n ? explicitReplyMode === \"thread\"\n : (route.replyMode ?? \"thread\") !== \"message\";\n const result = await replyToFeishu(\n ctx,\n config,\n connection,\n message,\n text,\n larkIdempotencyKey(idempotencyScope, runId, message.messageId, text),\n replyInThread,\n { routeId: route.id, issueId: sessionRecord.data.paperclipIssueId, reason: \"Agent \u98DE\u4E66\u5DE5\u5177\u56DE\u590D\u5931\u8D25\" },\n );\n const conversation = describeFeishuConversationForDisplay(message, route);\n record(result?.ok ? \"info\" : \"error\", \"Agent \u5DE5\u5177\u5DF2\u5C1D\u8BD5\u56DE\u590D\u539F\u98DE\u4E66\u4F1A\u8BDD\", {\n runId,\n issueId: sessionRecord.data.paperclipIssueId,\n routeName: describeRouteEntry(route),\n conversation,\n result: summarizeLarkResult(result),\n });\n if (!result?.ok) {\n return { error: result?.stderr || `lark-cli exited with ${result?.code ?? \"unknown\"}`, data: result };\n }\n return {\n content: result.dryRun\n ? `\u6D4B\u8BD5\u6A21\u5F0F\uFF1A${successVerb}\uFF08\u672A\u771F\u5B9E\u53D1\u9001\uFF09\u3002\u539F\u98DE\u4E66\u4F1A\u8BDD\uFF1A${conversation}\u3002`\n : `${successVerb}\u3002\u539F\u98DE\u4E66\u4F1A\u8BDD\uFF1A${conversation}\u3002`,\n data: result,\n };\n}\n\nasync function findSessionForTool(\n ctx: PluginContext,\n runId: string,\n issueId?: string,\n): Promise<{ companyId: string; data: FeishuSessionData } | null> {\n return await findSessionByRunId(ctx, runId)\n ?? (issueId ? await findSessionByIssueId(ctx, issueId) : null);\n}\n\nasync function downloadFeishuAttachmentsFromTool(\n ctx: PluginContext,\n runId: string,\n payload: Record<string, unknown>,\n): Promise<ToolResult> {\n const issueId = typeof payload.issueId === \"string\" ? payload.issueId : undefined;\n const sessionRecord = await findSessionForTool(ctx, runId, issueId);\n if (!sessionRecord) {\n return {\n error: \"\u6CA1\u6709\u627E\u5230\u5F53\u524D\u8FD0\u884C\u5BF9\u5E94\u7684\u98DE\u4E66\u539F\u4F1A\u8BDD\u3002\u53EA\u6709\u4ECE\u98DE\u4E66\u5165\u53E3\u521B\u5EFA\u7684 Paperclip \u4EFB\u52A1\uFF0C\u624D\u80FD\u4E0B\u8F7D\u539F\u6D88\u606F\u9644\u4EF6\u3002\",\n };\n }\n\n const config = await getConfig(ctx);\n const connection = resolveConnection(config, sessionRecord.data.connectionId);\n if (!connection) return { error: \"\u6CA1\u6709\u627E\u5230\u5F53\u524D\u98DE\u4E66\u4F1A\u8BDD\u5BF9\u5E94\u7684\u673A\u5668\u4EBA\u8FDE\u63A5\u3002\" };\n const disabled = disabledFeishuCapabilityResult(config, \"download_attachments\", {\n connectionId: connection.id,\n routeId: sessionRecord.data.routeId,\n agentId: sessionRecord.data.paperclipAgentId,\n });\n if (disabled) return disabled;\n\n const message = messageFromSession(sessionRecord.data);\n if (message.attachments.length === 0) {\n return {\n content: \"\u539F\u98DE\u4E66\u6D88\u606F\u6CA1\u6709\u53EF\u4E0B\u8F7D\u9644\u4EF6\u3002\",\n data: { attachments: [] },\n };\n }\n\n const results = await attachFeishuResources(\n ctx,\n config,\n connection,\n message,\n sessionRecord.companyId,\n sessionRecord.data.paperclipIssueId,\n );\n const failedCount = results.filter((item) => item.error).length;\n record(failedCount > 0 ? \"warning\" : \"info\", \"Agent \u5DE5\u5177\u5DF2\u5904\u7406\u539F\u98DE\u4E66\u9644\u4EF6\", {\n runId,\n issueId: sessionRecord.data.paperclipIssueId,\n attachmentCount: results.length,\n failedCount,\n });\n return {\n content: failedCount > 0\n ? `\u5DF2\u5904\u7406 ${results.length} \u4E2A\u98DE\u4E66\u9644\u4EF6\uFF0C\u5176\u4E2D ${failedCount} \u4E2A\u5931\u8D25\u3002`\n : `\u5DF2\u5904\u7406 ${results.length} \u4E2A\u98DE\u4E66\u9644\u4EF6\u3002`,\n data: { attachments: results },\n };\n}\n\nfunction readStringArray(value: unknown): string[] {\n return Array.isArray(value)\n ? value.filter((item): item is string => typeof item === \"string\" && item.trim().length > 0).map((item) => item.trim())\n : [];\n}\n\nfunction uniqueStrings(values: string[]): string[] {\n return [...new Set(values.filter(Boolean))].sort((a, b) => a.localeCompare(b));\n}\n\nconst SCHEMA_SERVICE_BY_LARK_CLI_SERVICE: Record<string, string | null> = {\n im: \"im\",\n drive: \"drive\",\n docs: \"drive\",\n calendar: \"calendar\",\n mail: \"mail\",\n wiki: \"wiki\",\n task: \"task\",\n approval: \"approval\",\n minutes: \"minutes\",\n okr: \"okr\",\n sheets: \"sheets\",\n slides: \"slides\",\n vc: \"vc\",\n attendance: \"attendance\",\n base: null,\n contact: null,\n schema: null,\n};\n\nfunction splitLarkCliCommand(command: string): {\n cliService: string;\n cliCommand?: string;\n} {\n const [cliService = \"\", cliCommand] = command.split(/\\s+/).filter(Boolean);\n return { cliService, cliCommand };\n}\n\nfunction readUpdateNotice(result: LarkCliResult): LarkCliSchemaDiscovery[\"updateNotice\"] {\n const parsed = parseJsonRecord(result.stdout) ?? parseJsonRecord(result.stderr);\n const notice = asRecord(asRecord(parsed?._notice)?.update);\n if (!notice) return null;\n return {\n current: readString(notice.current),\n latest: readString(notice.latest),\n message: readString(notice.message),\n };\n}\n\nfunction parseRootSchemaServices(stdout: string): string[] {\n const parsed = parseJsonRecord(stdout);\n const resources = asRecord(parsed?.resources);\n if (resources) return Object.keys(resources);\n\n const services = new Set<string>();\n for (const line of stripAnsiText(stdout).split(/\\r?\\n/)) {\n const match = line.match(/^\\s*([a-z][a-z0-9_-]+)\\s{2,}/i);\n if (match?.[1] && match[1] !== \"Usage\") services.add(match[1]);\n }\n return [...services].sort((a, b) => a.localeCompare(b));\n}\n\nfunction inspectSchemaService(stdout: string): {\n methodCount: number;\n scopes: string[];\n} {\n const parsed = parseJsonRecord(stdout);\n const resources = asRecord(parsed?.resources);\n if (!resources) return { methodCount: 0, scopes: [] };\n\n let methodCount = 0;\n const scopes: string[] = [];\n for (const resource of Object.values(resources)) {\n const methods = asRecord(asRecord(resource)?.methods);\n if (!methods) continue;\n for (const method of Object.values(methods)) {\n methodCount += 1;\n const methodScopes = asRecord(method)?.scopes;\n if (Array.isArray(methodScopes)) {\n scopes.push(...methodScopes.filter((scope): scope is string => typeof scope === \"string\"));\n }\n }\n }\n return { methodCount, scopes: uniqueStrings(scopes) };\n}\n\nfunction schemaDiscoverySkipped(config: FeishuConnectorConfig): LarkCliSchemaDiscovery {\n return {\n checked: false,\n reason: config.dryRunCli === true\n ? \"\u5F53\u524D\u662F\u6D4B\u8BD5\u6A21\u5F0F\uFF0C\u80FD\u529B\u4E2D\u5FC3\u4E0D\u4F1A\u81EA\u52A8\u63A2\u6D4B\u672C\u673A lark-cli\u3002\u5173\u95ED\u6D4B\u8BD5\u6A21\u5F0F\u6216\u914D\u7F6E\u670D\u52A1\u5668 CLI \u540E\u4F1A\u663E\u793A schema \u626B\u63CF\u7ED3\u679C\u3002\"\n : \"\u672A\u6267\u884C lark-cli schema \u626B\u63CF\u3002\",\n services: [],\n commands: [],\n errors: [],\n summary: \"\u672A\u626B\u63CF lark-cli schema\u3002\",\n };\n}\n\nasync function discoverLarkCliSchema(config: FeishuConnectorConfig): Promise<LarkCliSchemaDiscovery> {\n const explicitBin = config.larkCliBin?.trim();\n if (config.dryRunCli === true && (!explicitBin || explicitBin === \"lark-cli\")) {\n return schemaDiscoverySkipped(config);\n }\n\n const bin = larkCliBin(config);\n const checkedAt = new Date().toISOString();\n const errors: string[] = [];\n let updateNotice: LarkCliSchemaDiscovery[\"updateNotice\"] = null;\n\n const root = await runLarkCli({\n bin,\n args: [\"schema\", \"--format\", \"json\"],\n timeoutMs: 5_000,\n });\n updateNotice = readUpdateNotice(root);\n if (!root.ok) errors.push(root.stderr.trim() || `lark-cli schema exited with ${root.code}`);\n\n const rootServices = new Set(parseRootSchemaServices(root.stdout));\n const commandSpecs = FEISHU_CAPABILITY_DEFINITIONS.flatMap((definition) =>\n definition.larkCliCommands.map((command) => ({\n capabilityKey: definition.key,\n command,\n ...splitLarkCliCommand(command),\n schemaService: SCHEMA_SERVICE_BY_LARK_CLI_SERVICE[splitLarkCliCommand(command).cliService],\n })),\n );\n const schemaServiceNames = uniqueStrings(commandSpecs\n .map((spec) => spec.schemaService)\n .filter((service): service is string => typeof service === \"string\" && service.length > 0));\n\n const services: LarkCliSchemaDiscovery[\"services\"] = [];\n const serviceScopes = new Map<string, string[]>();\n for (const service of schemaServiceNames) {\n if (root.ok && rootServices.size > 0 && !rootServices.has(service)) {\n services.push({\n name: service,\n available: false,\n methodCount: 0,\n scopeCount: 0,\n sampleScopes: [],\n error: \"\u5F53\u524D lark-cli schema \u672A\u5217\u51FA\u8FD9\u4E2A service\u3002\",\n });\n continue;\n }\n\n const result = await runLarkCli({\n bin,\n args: [\"schema\", service, \"--format\", \"json\"],\n timeoutMs: 8_000,\n });\n updateNotice = updateNotice ?? readUpdateNotice(result);\n if (!result.ok) {\n const error = result.stderr.trim() || result.stdout.trim() || `lark-cli schema ${service} exited with ${result.code}`;\n services.push({\n name: service,\n available: false,\n methodCount: 0,\n scopeCount: 0,\n sampleScopes: [],\n error,\n });\n errors.push(error);\n continue;\n }\n\n const inspected = inspectSchemaService(result.stdout);\n serviceScopes.set(service, inspected.scopes);\n services.push({\n name: service,\n available: true,\n methodCount: inspected.methodCount,\n scopeCount: inspected.scopes.length,\n sampleScopes: inspected.scopes.slice(0, 12),\n });\n }\n\n const helpOutputs = new Map<string, LarkCliResult>();\n for (const service of uniqueStrings(commandSpecs.map((spec) => spec.cliService).filter(Boolean))) {\n const args = service === \"schema\" ? [\"schema\", \"--help\"] : [service, \"--help\"];\n const result = await runLarkCli({ bin, args, timeoutMs: 5_000 });\n updateNotice = updateNotice ?? readUpdateNotice(result);\n helpOutputs.set(service, result);\n }\n\n const servicesByName = new Map(services.map((service) => [service.name, service]));\n const commands: LarkCliSchemaDiscovery[\"commands\"] = commandSpecs.map((spec) => {\n const help = helpOutputs.get(spec.cliService);\n const cliHelpAvailable = help\n ? help.ok && (!spec.cliCommand || stripAnsiText(help.stdout).includes(spec.cliCommand))\n : null;\n const schemaService = spec.schemaService ?? null;\n const schemaAvailable = schemaService ? servicesByName.get(schemaService)?.available === true : null;\n const scopes = schemaService ? serviceScopes.get(schemaService) ?? [] : [];\n const status = schemaAvailable\n ? \"schema_backed\"\n : cliHelpAvailable\n ? \"cli_help_backed\"\n : help || schemaService\n ? \"not_found\"\n : \"not_checked\";\n const note = schemaAvailable\n ? `lark-cli schema \u5DF2\u8986\u76D6 service\uFF1A${schemaService}`\n : cliHelpAvailable\n ? \"\u8FD9\u662F lark-cli \u9AD8\u9636\u5C01\u88C5\u547D\u4EE4\uFF0C\u53EF\u5728 CLI help \u4E2D\u627E\u5230\uFF1B\u4E0D\u7B49\u540C\u4E8E Paperclip skill \u81EA\u52A8\u540C\u6B65\u3002\"\n : \"\u5F53\u524D CLI/schema \u672A\u53D1\u73B0\u8FD9\u4E2A\u547D\u4EE4\uFF0C\u53EF\u80FD\u9700\u8981\u66F4\u65B0 lark-cli \u6216\u8C03\u6574\u80FD\u529B\u6620\u5C04\u3002\";\n return {\n capabilityKey: spec.capabilityKey,\n command: spec.command,\n cliService: spec.cliService,\n cliCommand: spec.cliCommand,\n schemaService,\n schemaAvailable,\n cliHelpAvailable,\n scopes: scopes.slice(0, 12),\n status,\n note,\n };\n });\n\n const backedCount = commands.filter((command) =>\n command.status === \"schema_backed\" || command.status === \"cli_help_backed\"\n ).length;\n return {\n checked: true,\n checkedAt,\n cliBin: bin,\n updateNotice,\n services,\n commands,\n errors,\n summary: `\u5DF2\u626B\u63CF lark-cli schema/help\uFF1A${backedCount}/${commands.length} \u4E2A\u80FD\u529B\u547D\u4EE4\u5728\u5F53\u524D CLI \u4E2D\u53EF\u53D1\u73B0\u3002lark-* skills \u4ECD\u4E0D\u4F1A\u81EA\u52A8\u53D8\u6210 Paperclip tools\u3002`,\n };\n}\n\nfunction isUnsafeLarkCliToken(value: string): boolean {\n return value.includes(\"\\0\") || value === \"--app-secret\" || value === \"--app-secret-stdin\";\n}\n\nfunction readScopesFromAuthStatus(stdout: string): {\n verified: boolean;\n identity?: string;\n tokenStatus?: string;\n profileName?: string;\n grantedScopes: string[];\n} {\n const parsed = parseJsonRecord(stdout) ?? {};\n const scopeText = readString(parsed.scope, parsed.scopes) ?? \"\";\n return {\n verified: parsed.verified === true,\n identity: readString(parsed.identity),\n tokenStatus: readString(parsed.tokenStatus),\n profileName: readString(parsed.profileName, parsed.profile),\n grantedScopes: uniqueStrings(scopeText.split(/\\s+/).filter(Boolean)),\n };\n}\n\nfunction permissionViolationsFromText(value: string): string[] {\n const parsed = parseJsonRecord(value);\n const root = asRecord(parsed?.error) ?? parsed;\n const direct = root?.permission_violations;\n if (Array.isArray(direct)) {\n return uniqueStrings(direct.filter((item): item is string => typeof item === \"string\"));\n }\n return uniqueStrings([...value.matchAll(/[a-z]+:[a-z0-9_.:-]+/g)].map((match) => match[0]));\n}\n\nfunction recommendedScopesFromConfig(config: FeishuConnectorConfig): string[] {\n const center = buildFeishuCapabilityCenter(config);\n return uniqueStrings([\n ...center.recommendedPermissionJson.scopes.tenant,\n ...center.recommendedPermissionJson.scopes.user,\n ]);\n}\n\nfunction disabledFeishuCapabilityResult(\n config: FeishuConnectorConfig,\n capabilityKey: string,\n context: FeishuCapabilityContext = {},\n): ToolResult | null {\n const definition = findFeishuCapabilityDefinition(capabilityKey);\n if (!definition) {\n return { error: `\u672A\u77E5\u7684\u98DE\u4E66\u80FD\u529B\uFF1A${capabilityKey}\u3002\u8BF7\u5148\u5728\u80FD\u529B\u4E2D\u5FC3\u786E\u8BA4\u8FD9\u4E2A\u80FD\u529B\u3002` };\n }\n if (!isFeishuCapabilityEnabled(config, definition, context)) {\n return { error: `\u98DE\u4E66\u80FD\u529B ${capabilityKey} \u672A\u5F00\u542F\u3002\u8BF7\u5148\u5230\u80FD\u529B\u4E2D\u5FC3\u5F00\u542F\uFF0C\u5E76\u786E\u8BA4\u6743\u9650\u540E\u518D\u8C03\u7528\u3002` };\n }\n return null;\n}\n\nfunction enabledFeishuToolNames(\n config: FeishuConnectorConfig,\n context: FeishuCapabilityContext = {},\n): string[] {\n return uniqueStrings(FEISHU_CAPABILITY_DEFINITIONS\n .filter((definition) => definition.implemented && definition.toolName && isFeishuCapabilityEnabled(config, definition, context))\n .map((definition) => definition.toolName!));\n}\n\nasync function checkFeishuPermissions(\n config: FeishuConnectorConfig,\n params: Record<string, unknown>,\n): Promise<Record<string, unknown>> {\n const connection = resolveConnection(config, readString(params.connectionId));\n const profileName = connection?.profileName ?? readString(params.profileName);\n if (!profileName) {\n throw new Error(\"\u8BF7\u5148\u9009\u62E9\u98DE\u4E66\u673A\u5668\u4EBA\u8FDE\u63A5\uFF0C\u6216\u63D0\u4F9B lark-cli profile\u3002\");\n }\n\n const args = buildAuthStatusArgs({ profileName, verify: true });\n const result = await runLarkCli({ bin: larkCliBin(config), args, timeoutMs: 30_000 });\n const recommendedScopes = recommendedScopesFromConfig(config);\n if (!result.ok) {\n const missingScopes = permissionViolationsFromText(`${result.stderr}\\n${result.stdout}`);\n return {\n ok: false,\n profileName,\n command: result.command,\n args: result.args,\n missingScopes,\n message: missingScopes.length > 0\n ? `\u7F3A\u5C11\u98DE\u4E66\u6743\u9650\uFF1A${missingScopes.join(\"\u3001\")}\u3002\u8BF7\u5230\u98DE\u4E66\u5F00\u653E\u5E73\u53F0\u5BFC\u5165\u63A8\u8350\u6743\u9650\u5E76\u91CD\u65B0\u53D1\u5E03\u5E94\u7528\uFF1B\u7528\u6237\u8EAB\u4EFD\u8FD8\u9700\u8981\u91CD\u65B0\u6388\u6743\u3002`\n : result.stderr || `lark-cli exited with ${result.code}`,\n result,\n };\n }\n\n const status = readScopesFromAuthStatus(result.stdout);\n const missingScopes = recommendedScopes.filter((scope) => !status.grantedScopes.includes(scope));\n return {\n ok: missingScopes.length === 0,\n profileName: status.profileName ?? profileName,\n verified: status.verified,\n identity: status.identity,\n tokenStatus: status.tokenStatus,\n grantedScopes: status.grantedScopes,\n recommendedScopes,\n missingScopes,\n message: missingScopes.length > 0\n ? `\u7F3A\u5C11\u98DE\u4E66\u6743\u9650\uFF1A${missingScopes.join(\"\u3001\")}\u3002\u8BF7\u5230\u9AD8\u7EA7\u9875\u590D\u5236\u63A8\u8350\u6743\u9650 JSON\uFF0C\u5BFC\u5165\u98DE\u4E66\u5F00\u653E\u5E73\u53F0\u5E76\u91CD\u65B0\u53D1\u5E03\u5E94\u7528\uFF1B\u7528\u6237\u8EAB\u4EFD\u8FD8\u9700\u8981\u91CD\u65B0\u6388\u6743\u3002`\n : \"\u6743\u9650\u68C0\u67E5\u901A\u8FC7\uFF1A\u5F53\u524D profile \u5DF2\u8986\u76D6\u80FD\u529B\u4E2D\u5FC3\u63A8\u8350 scopes\u3002\",\n result,\n };\n}\n\nasync function persistPermissionCheck(\n ctx: PluginContext,\n config: FeishuConnectorConfig,\n params: Record<string, unknown>,\n result: Record<string, unknown>,\n): Promise<void> {\n const connection = resolveConnection(config, readString(params.connectionId));\n const profileName = readString(result.profileName, params.profileName, connection?.profileName) ?? null;\n const checkedAt = new Date().toISOString();\n const id = `permission-${crypto\n .createHash(\"sha256\")\n .update([connection?.id ?? \"\", profileName ?? \"\", checkedAt].join(\":\"))\n .digest(\"hex\")\n .slice(0, 32)}`;\n await executePluginDb(\n ctx,\n `INSERT INTO ${dbTable(ctx.db.namespace, DB_TABLES.permissionChecks)}\n (id, connection_id, profile_name, ok, missing_scopes, granted_scopes, raw_result, checked_at)\n VALUES ($1, $2, $3, $4, $5::jsonb, $6::jsonb, $7::jsonb, $8::timestamptz)`,\n [\n id,\n connection?.id ?? null,\n profileName,\n result.ok === true,\n jsonParam(Array.isArray(result.missingScopes) ? result.missingScopes : []),\n jsonParam(Array.isArray(result.grantedScopes) ? result.grantedScopes : []),\n jsonParam(result),\n checkedAt,\n ],\n );\n}\n\nasync function runControlledLarkCliCapabilityFromTool(\n ctx: PluginContext,\n runId: string,\n payload: Record<string, unknown>,\n): Promise<ToolResult> {\n const capabilityKey = readString(payload.capabilityKey, payload.capability);\n if (!capabilityKey) return { error: \"\u8BF7\u63D0\u4F9B\u8981\u8C03\u7528\u7684\u98DE\u4E66\u80FD\u529B key\u3002\" };\n const definition = findFeishuCapabilityDefinition(capabilityKey);\n if (!definition) return { error: `\u672A\u77E5\u7684\u98DE\u4E66\u80FD\u529B\uFF1A${capabilityKey}\u3002\u8BF7\u5148\u5728\u80FD\u529B\u4E2D\u5FC3\u786E\u8BA4\u8FD9\u4E2A\u80FD\u529B\u3002` };\n\n const config = await getConfig(ctx);\n const connection = resolveConnection(config, readString(payload.connectionId));\n const sessionRecord = await findSessionByRunId(ctx, runId);\n const disabled = disabledFeishuCapabilityResult(config, capabilityKey, {\n connectionId: sessionRecord?.data.connectionId ?? connection?.id,\n routeId: sessionRecord?.data.routeId,\n agentId: sessionRecord?.data.paperclipAgentId,\n });\n if (disabled) return disabled;\n\n const command = readStringArray(payload.command ?? payload.args);\n if (command.length === 0) return { error: \"\u8BF7\u63D0\u4F9B\u8981\u8FD0\u884C\u7684 lark-cli \u547D\u4EE4\u53C2\u6570\u6570\u7EC4\u3002\" };\n if (command.some(isUnsafeLarkCliToken)) {\n return { error: \"\u8FD9\u4E2A lark-cli \u53C2\u6570\u6D89\u53CA\u654F\u611F\u51ED\u636E\uFF0C\u4E0D\u80FD\u901A\u8FC7 Agent \u515C\u5E95\u5DE5\u5177\u8C03\u7528\u3002\" };\n }\n if (!isLarkCliCommandAllowedForCapability(definition, command)) {\n return {\n error: `\u547D\u4EE4 ${command.slice(0, 2).join(\" \")} \u4E0D\u5728\u80FD\u529B ${capabilityKey} \u7684\u5141\u8BB8\u547D\u4EE4\u91CC\u3002\u5141\u8BB8\uFF1A${definition.larkCliCommands.join(\"\u3001\")}`,\n };\n }\n\n const profileName = connection?.profileName ?? readString(payload.profileName);\n const args = profileName ? [\"--profile\", profileName, ...command] : command;\n const result = await runLarkCli({\n bin: larkCliBin(config),\n args,\n dryRun: config.dryRunCli === true,\n timeoutMs: typeof payload.timeoutMs === \"number\" ? payload.timeoutMs : 60_000,\n });\n record(result.ok ? \"info\" : \"error\", \"Agent \u4F7F\u7528\u53D7\u63A7 lark-cli \u515C\u5E95\u80FD\u529B\", {\n runId,\n capabilityKey,\n command: command.slice(0, 3).join(\" \"),\n result: summarizeLarkResult(result),\n });\n return result.ok\n ? { content: result.dryRun ? \"\u6D4B\u8BD5\u6A21\u5F0F\uFF1Alark-cli \u80FD\u529B\u672A\u771F\u5B9E\u6267\u884C\uFF0C\u547D\u4EE4\u5DF2\u751F\u6210\u3002\" : \"lark-cli \u80FD\u529B\u5DF2\u6267\u884C\u3002\", data: result }\n : { error: result.stderr || `lark-cli exited with ${result.code}`, data: result };\n}\n\nasync function registerToolHandlers(ctx: PluginContext): Promise<void> {\n ctx.tools.register(\n TOOL_NAMES.sendMessage,\n {\n displayName: \"\u53D1\u9001\u98DE\u4E66\u6D88\u606F\",\n description: \"\u901A\u8FC7\u5DF2\u914D\u7F6E\u7684\u98DE\u4E66\u673A\u5668\u4EBA\u7ED9\u6307\u5B9A\u4F1A\u8BDD\u6216\u7528\u6237\u53D1\u9001\u6D88\u606F\u3002\",\n parametersSchema: {\n type: \"object\",\n properties: {\n connectionId: { type: \"string\", title: \"\u98DE\u4E66\u673A\u5668\u4EBA\u8FDE\u63A5\u4EE3\u53F7\" },\n chatId: { type: \"string\", title: \"\u98DE\u4E66\u7FA4/\u4F1A\u8BDD chat_id\" },\n userId: { type: \"string\", title: \"\u98DE\u4E66\u7528\u6237 ID\" },\n text: { type: \"string\", title: \"\u6587\u672C\u5185\u5BB9\" },\n markdown: { type: \"string\", title: \"Markdown \u5185\u5BB9\" },\n },\n },\n },\n async (params, runCtx): Promise<ToolResult> => {\n const config = await getConfig(ctx);\n const payload = params as Record<string, unknown>;\n const connection = resolveConnection(config, typeof payload.connectionId === \"string\" ? payload.connectionId : undefined);\n if (!connection) return { error: \"\u8FD8\u6CA1\u6709\u914D\u7F6E\u53EF\u7528\u7684\u98DE\u4E66\u673A\u5668\u4EBA\u8FDE\u63A5\u3002\" };\n const disabled = disabledFeishuCapabilityResult(config, \"send_message\", {\n connectionId: connection.id,\n agentId: runCtx.agentId,\n });\n if (disabled) return disabled;\n const args = buildSendMessageArgs({\n profileName: connection.profileName,\n identity: \"bot\",\n chatId: typeof payload.chatId === \"string\" ? payload.chatId : undefined,\n userId: typeof payload.userId === \"string\" ? payload.userId : undefined,\n text: typeof payload.text === \"string\" ? payload.text : undefined,\n markdown: typeof payload.markdown === \"string\" ? payload.markdown : undefined,\n });\n const result = await runLarkCli({ bin: larkCliBin(config), args, dryRun: config.dryRunCli === true });\n return result.ok\n ? { content: result.dryRun ? \"\u6D4B\u8BD5\u6A21\u5F0F\uFF1A\u98DE\u4E66\u6D88\u606F\u6CA1\u6709\u771F\u5B9E\u53D1\u9001\uFF0C\u547D\u4EE4\u5DF2\u751F\u6210\u3002\" : \"\u98DE\u4E66\u6D88\u606F\u5DF2\u53D1\u9001\u3002\", data: result }\n : { error: result.stderr || `lark-cli exited with ${result.code}`, data: result };\n },\n );\n\n ctx.tools.register(\n TOOL_NAMES.writeBaseRecord,\n {\n displayName: \"\u5199\u5165\u98DE\u4E66\u591A\u7EF4\u8868\u683C\",\n description: \"\u628A\u4E00\u6761\u7ED3\u6784\u5316\u8BB0\u5F55\u5199\u5165\u5DF2\u914D\u7F6E\u7684\u98DE\u4E66\u591A\u7EF4\u8868\u683C\u3002\",\n parametersSchema: {\n type: \"object\",\n properties: {\n sinkId: { type: \"string\", title: \"\u591A\u7EF4\u8868\u683C\u89C4\u5219\u4EE3\u53F7\" },\n record: { type: \"object\", title: \"\u8981\u5199\u5165\u7684\u8BB0\u5F55\u5185\u5BB9\" },\n },\n required: [\"sinkId\", \"record\"],\n },\n },\n async (params, runCtx): Promise<ToolResult> => {\n const config = await getConfig(ctx);\n const payload = params as Record<string, unknown>;\n const sink = resolveBaseSink(config, typeof payload.sinkId === \"string\" ? payload.sinkId : undefined);\n if (!sink) return { error: \"\u6CA1\u6709\u627E\u5230\u53EF\u7528\u7684\u591A\u7EF4\u8868\u683C\u5199\u5165\u89C4\u5219\u3002\u8BF7\u68C0\u67E5\u7B2C 3 \u6B65\u91CC\u7684\u89C4\u5219\u4EE3\u53F7\u662F\u5426\u4E00\u81F4\uFF0C\u5E76\u786E\u8BA4\u5DF2\u542F\u7528\u3002\" };\n const connection = resolveConnection(config, sink.connectionId);\n if (!connection) return { error: \"\u591A\u7EF4\u8868\u683C\u5199\u5165\u89C4\u5219\u6CA1\u6709\u627E\u5230\u53EF\u7528\u7684\u98DE\u4E66\u673A\u5668\u4EBA\u8FDE\u63A5\u3002\" };\n const disabled = disabledFeishuCapabilityResult(config, \"write_base_record\", {\n connectionId: connection.id,\n agentId: runCtx.agentId,\n });\n if (disabled) return disabled;\n const recordJson = typeof payload.record === \"object\" && payload.record !== null && !Array.isArray(payload.record)\n ? payload.record as Record<string, unknown>\n : {};\n const result = await writeBaseRecord(ctx, config, connection, sink, recordJson);\n return result.ok\n ? { content: result.dryRun ? \"\u6D4B\u8BD5\u6A21\u5F0F\uFF1A\u591A\u7EF4\u8868\u683C\u6CA1\u6709\u771F\u5B9E\u5199\u5165\uFF0C\u547D\u4EE4\u5DF2\u751F\u6210\u3002\" : \"\u591A\u7EF4\u8868\u683C\u5DF2\u5199\u5165\u3002\", data: result }\n : { error: result.stderr || `lark-cli exited with ${result.code}`, data: result };\n },\n );\n\n ctx.tools.register(\n TOOL_NAMES.sendCard,\n {\n displayName: \"\u53D1\u9001\u98DE\u4E66\u5361\u7247\",\n description: \"\u901A\u8FC7\u5DF2\u914D\u7F6E\u7684\u98DE\u4E66\u673A\u5668\u4EBA\u53D1\u9001\u7ED3\u6784\u5316\u98DE\u4E66\u5361\u7247\u3002\",\n parametersSchema: {\n type: \"object\",\n properties: {\n connectionId: { type: \"string\", title: \"\u98DE\u4E66\u673A\u5668\u4EBA\u8FDE\u63A5\u4EE3\u53F7\" },\n chatId: { type: \"string\", title: \"\u98DE\u4E66\u7FA4/\u4F1A\u8BDD chat_id\" },\n userId: { type: \"string\", title: \"\u98DE\u4E66\u7528\u6237 ID\" },\n title: { type: \"string\", title: \"\u5361\u7247\u6807\u9898\" },\n summary: { type: \"string\", title: \"\u5361\u7247\u6B63\u6587\u6458\u8981\" },\n actions: {\n type: \"array\",\n title: \"\u6309\u94AE\",\n items: {\n type: \"object\",\n properties: {\n text: { type: \"string\", title: \"\u6309\u94AE\u6587\u5B57\" },\n url: { type: \"string\", title: \"\u6309\u94AE\u94FE\u63A5\" },\n },\n },\n },\n },\n required: [\"title\", \"summary\"],\n },\n },\n async (params, runCtx): Promise<ToolResult> => {\n const config = await getConfig(ctx);\n const payload = params as Record<string, unknown>;\n const connection = resolveConnection(config, readString(payload.connectionId));\n if (!connection) return { error: \"\u8FD8\u6CA1\u6709\u914D\u7F6E\u53EF\u7528\u7684\u98DE\u4E66\u673A\u5668\u4EBA\u8FDE\u63A5\u3002\" };\n const disabled = disabledFeishuCapabilityResult(config, \"send_card\", {\n connectionId: connection.id,\n agentId: runCtx.agentId,\n });\n if (disabled) return disabled;\n const title = readString(payload.title);\n const summary = readString(payload.summary);\n if (!title || !summary) return { error: \"\u8BF7\u63D0\u4F9B\u98DE\u4E66\u5361\u7247\u6807\u9898\u548C\u6458\u8981\u3002\" };\n const actions = Array.isArray(payload.actions)\n ? payload.actions.filter((item): item is { text?: unknown; url?: unknown } => typeof item === \"object\" && item !== null)\n : [];\n const args = buildSendMessageArgs({\n profileName: connection.profileName,\n identity: \"bot\",\n chatId: readString(payload.chatId),\n userId: readString(payload.userId),\n content: buildFeishuCardContent({ title, summary, actions }),\n msgType: \"interactive\",\n });\n const result = await runLarkCli({ bin: larkCliBin(config), args, dryRun: config.dryRunCli === true });\n return result.ok\n ? { content: result.dryRun ? \"\u6D4B\u8BD5\u6A21\u5F0F\uFF1A\u98DE\u4E66\u5361\u7247\u6CA1\u6709\u771F\u5B9E\u53D1\u9001\uFF0C\u547D\u4EE4\u5DF2\u751F\u6210\u3002\" : \"\u98DE\u4E66\u5361\u7247\u5DF2\u53D1\u9001\u3002\", data: result }\n : { error: result.stderr || `lark-cli exited with ${result.code}`, data: result };\n },\n );\n\n ctx.tools.register(\n TOOL_NAMES.replyOriginalThread,\n {\n displayName: \"\u56DE\u590D\u539F\u98DE\u4E66\u4F1A\u8BDD\",\n description: \"\u5728\u98DE\u4E66\u521B\u5EFA\u7684 Paperclip \u4EFB\u52A1\u4E2D\uFF0C\u628A\u667A\u80FD\u4F53\u7684\u8FDB\u5C55\u6216\u7ED3\u679C\u56DE\u590D\u5230\u539F\u98DE\u4E66\u6D88\u606F\u7EBF\u7A0B\u3002\",\n parametersSchema: {\n type: \"object\",\n properties: {\n text: { type: \"string\", title: \"\u8981\u56DE\u590D\u7684\u6587\u672C\" },\n issueId: { type: \"string\", title: \"Paperclip \u4EFB\u52A1 ID\uFF08\u53EF\u9009\uFF09\" },\n replyMode: {\n type: \"string\",\n title: \"\u56DE\u590D\u65B9\u5F0F\",\n enum: [\"thread\", \"message\"],\n },\n },\n required: [\"text\"],\n },\n },\n async (params, runCtx): Promise<ToolResult> => {\n const payload = params as Record<string, unknown>;\n const text = typeof payload.text === \"string\" ? payload.text.trim() : \"\";\n if (!text) return { error: \"\u8BF7\u63D0\u4F9B\u8981\u56DE\u590D\u5230\u98DE\u4E66\u7684\u6587\u672C\u5185\u5BB9\u3002\" };\n return await replyOriginalFeishuThreadFromTool(ctx, runCtx.runId, payload, text, \"tool\", \"\u5DF2\u56DE\u590D\u539F\u98DE\u4E66\u4F1A\u8BDD\", \"reply_source_thread\");\n },\n );\n\n ctx.tools.register(\n TOOL_NAMES.replySourceThread,\n {\n displayName: \"\u56DE\u590D\u98DE\u4E66\u6765\u6E90\u7EBF\u7A0B\",\n description: \"\u5728\u98DE\u4E66\u521B\u5EFA\u7684 Paperclip \u4EFB\u52A1\u4E2D\uFF0C\u628A\u667A\u80FD\u4F53\u7684\u8FDB\u5C55\u6216\u7ED3\u679C\u56DE\u590D\u5230\u539F\u98DE\u4E66\u6D88\u606F\u7EBF\u7A0B\u3002\u8FD9\u4E2A\u540D\u79F0\u662F reply_original_thread \u7684\u4EA7\u54C1\u5316\u522B\u540D\u3002\",\n parametersSchema: {\n type: \"object\",\n properties: {\n text: { type: \"string\", title: \"\u8981\u56DE\u590D\u7684\u6587\u672C\" },\n issueId: { type: \"string\", title: \"Paperclip \u4EFB\u52A1 ID\uFF08\u53EF\u9009\uFF09\" },\n replyMode: {\n type: \"string\",\n title: \"\u56DE\u590D\u65B9\u5F0F\",\n enum: [\"thread\", \"message\"],\n },\n },\n required: [\"text\"],\n },\n },\n async (params, runCtx): Promise<ToolResult> => {\n const payload = params as Record<string, unknown>;\n const text = typeof payload.text === \"string\" ? payload.text.trim() : \"\";\n if (!text) return { error: \"\u8BF7\u63D0\u4F9B\u8981\u56DE\u590D\u5230\u98DE\u4E66\u7684\u6587\u672C\u5185\u5BB9\u3002\" };\n return await replyOriginalFeishuThreadFromTool(ctx, runCtx.runId, payload, text, \"tool\", \"\u5DF2\u56DE\u590D\u539F\u98DE\u4E66\u4F1A\u8BDD\", \"reply_source_thread\");\n },\n );\n\n ctx.tools.register(\n TOOL_NAMES.askClarification,\n {\n displayName: \"\u5411\u98DE\u4E66\u63D0\u51FA\u8FFD\u95EE\",\n description: \"\u4EFB\u52A1\u4FE1\u606F\u4E0D\u8DB3\u65F6\uFF0C\u5728\u539F\u98DE\u4E66\u6D88\u606F\u7EBF\u7A0B\u91CC\u5411\u63D0\u51FA\u4EBA\u8FFD\u95EE\u3002\",\n parametersSchema: {\n type: \"object\",\n properties: {\n question: { type: \"string\", title: \"\u8981\u8FFD\u95EE\u7684\u95EE\u9898\" },\n issueId: { type: \"string\", title: \"Paperclip \u4EFB\u52A1 ID\uFF08\u53EF\u9009\uFF09\" },\n },\n required: [\"question\"],\n },\n },\n async (params, runCtx): Promise<ToolResult> => {\n const payload = params as Record<string, unknown>;\n const question = typeof payload.question === \"string\" ? payload.question.trim() : \"\";\n if (!question) return { error: \"\u8BF7\u63D0\u4F9B\u8981\u8FFD\u95EE\u7684\u95EE\u9898\u3002\" };\n const text = question.startsWith(\"\u9700\u8981\u8865\u5145\u4FE1\u606F\uFF1A\") ? question : `\u9700\u8981\u8865\u5145\u4FE1\u606F\uFF1A${question}`;\n return await replyOriginalFeishuThreadFromTool(ctx, runCtx.runId, payload, text, \"clarify\", \"\u5DF2\u5411\u539F\u98DE\u4E66\u4F1A\u8BDD\u8FFD\u95EE\", \"ask_clarification\");\n },\n );\n\n ctx.tools.register(\n TOOL_NAMES.downloadAttachments,\n {\n displayName: \"\u4E0B\u8F7D\u539F\u98DE\u4E66\u9644\u4EF6\",\n description: \"\u4E0B\u8F7D\u521B\u5EFA\u5F53\u524D Paperclip \u4EFB\u52A1\u7684\u98DE\u4E66\u539F\u6D88\u606F\u9644\u4EF6\uFF0C\u5E76\u6302\u5230 Issue\u3002\",\n parametersSchema: {\n type: \"object\",\n properties: {\n issueId: { type: \"string\", title: \"Paperclip \u4EFB\u52A1 ID\uFF08\u53EF\u9009\uFF09\" },\n },\n },\n },\n async (params, runCtx): Promise<ToolResult> => {\n const payload = params as Record<string, unknown>;\n return await downloadFeishuAttachmentsFromTool(ctx, runCtx.runId, payload);\n },\n );\n\n ctx.tools.register(\n TOOL_NAMES.lookupUser,\n {\n displayName: \"\u67E5\u627E\u98DE\u4E66\u7528\u6237\",\n description: \"\u6309\u59D3\u540D\u3001\u5DE5\u53F7\u6216\u5173\u952E\u8BCD\u67E5\u627E\u98DE\u4E66\u8054\u7CFB\u4EBA\u3002\",\n parametersSchema: {\n type: \"object\",\n properties: {\n query: { type: \"string\", title: \"\u59D3\u540D\u3001\u5DE5\u53F7\u6216\u5173\u952E\u8BCD\" },\n connectionId: { type: \"string\", title: \"\u98DE\u4E66\u673A\u5668\u4EBA\u8FDE\u63A5\u4EE3\u53F7\uFF08\u53EF\u9009\uFF09\" },\n profileName: { type: \"string\", title: \"lark-cli profile\uFF08\u53EF\u9009\uFF09\" },\n },\n required: [\"query\"],\n },\n },\n async (params, runCtx): Promise<ToolResult> => {\n const payload = params as Record<string, unknown>;\n const query = typeof payload.query === \"string\" ? payload.query.trim() : \"\";\n if (!query) return { error: \"\u8BF7\u63D0\u4F9B\u8981\u67E5\u627E\u7684\u98DE\u4E66\u7528\u6237\u59D3\u540D\u3001\u5DE5\u53F7\u6216\u5173\u952E\u8BCD\u3002\" };\n\n const config = await getConfig(ctx);\n const connection = resolveConnection(config, typeof payload.connectionId === \"string\" ? payload.connectionId : undefined);\n const profileName = connection?.profileName ?? readString(payload.profileName);\n const disabled = disabledFeishuCapabilityResult(config, \"lookup_user\", {\n connectionId: connection?.id,\n agentId: runCtx.agentId,\n });\n if (disabled) return disabled;\n const result = await searchFeishuDirectory(config, { profileName, userQuery: query });\n if (result.userError) {\n return { error: result.userError, data: result };\n }\n return {\n content: result.users.length > 0\n ? `\u627E\u5230 ${result.users.length} \u4E2A\u98DE\u4E66\u7528\u6237\u3002`\n : \"\u6CA1\u6709\u627E\u5230\u5339\u914D\u7684\u98DE\u4E66\u7528\u6237\u3002\",\n data: result,\n };\n },\n );\n\n ctx.tools.register(\n TOOL_NAMES.fetchDoc,\n {\n displayName: \"\u8BFB\u53D6\u98DE\u4E66\u6587\u6863\",\n description: \"\u901A\u8FC7 lark-cli \u8BFB\u53D6\u98DE\u4E66\u4E91\u6587\u6863\u5185\u5BB9\uFF0C\u5E76\u628A\u6B63\u6587\u8FD4\u56DE\u7ED9 Agent\u3002\",\n parametersSchema: {\n type: \"object\",\n properties: {\n doc: { type: \"string\", title: \"\u98DE\u4E66\u6587\u6863 URL \u6216 token\" },\n connectionId: { type: \"string\", title: \"\u98DE\u4E66\u673A\u5668\u4EBA\u8FDE\u63A5\u4EE3\u53F7\uFF08\u53EF\u9009\uFF09\" },\n profileName: { type: \"string\", title: \"lark-cli profile\uFF08\u53EF\u9009\uFF09\" },\n identity: {\n type: \"string\",\n title: \"\u8BBF\u95EE\u8EAB\u4EFD\",\n enum: [\"user\", \"bot\"],\n default: \"user\",\n },\n },\n required: [\"doc\"],\n },\n },\n async (params, runCtx): Promise<ToolResult> => {\n const payload = params as Record<string, unknown>;\n const doc = readString(payload.doc, payload.url, payload.token);\n if (!doc) return { error: \"\u8BF7\u63D0\u4F9B\u98DE\u4E66\u6587\u6863 URL \u6216 token\u3002\" };\n const config = await getConfig(ctx);\n const connection = resolveConnection(config, readString(payload.connectionId));\n const profileName = connection?.profileName ?? readString(payload.profileName);\n const disabled = disabledFeishuCapabilityResult(config, \"fetch_doc\", {\n connectionId: connection?.id,\n agentId: runCtx.agentId,\n });\n if (disabled) return disabled;\n if (!profileName) return { error: \"\u8BF7\u5148\u914D\u7F6E\u98DE\u4E66\u673A\u5668\u4EBA\u8FDE\u63A5\uFF0C\u6216\u63D0\u4F9B\u53EF\u7528\u7684 lark-cli profile\u3002\" };\n const identity = payload.identity === \"bot\" ? \"bot\" : \"user\";\n const args = buildFetchDocArgs({\n profileName,\n identity,\n doc,\n format: \"pretty\",\n });\n const result = await runLarkCli({ bin: larkCliBin(config), args, dryRun: config.dryRunCli === true, timeoutMs: 60_000 });\n if (!result.ok) return { error: result.stderr || `lark-cli exited with ${result.code}`, data: result };\n const text = result.stdout.trim();\n return {\n content: result.dryRun ? \"\u6D4B\u8BD5\u6A21\u5F0F\uFF1A\u98DE\u4E66\u6587\u6863\u6CA1\u6709\u771F\u5B9E\u8BFB\u53D6\uFF0C\u547D\u4EE4\u5DF2\u751F\u6210\u3002\" : \"\u5DF2\u8BFB\u53D6\u98DE\u4E66\u6587\u6863\u3002\",\n data: {\n ...result,\n text,\n },\n };\n },\n );\n\n ctx.tools.register(\n TOOL_NAMES.runLarkCliCapability,\n {\n displayName: \"\u53D7\u63A7\u8FD0\u884C lark-cli \u80FD\u529B\",\n description: \"\u9AD8\u7EA7\u515C\u5E95\u5DE5\u5177\u3002\u53EA\u80FD\u8FD0\u884C\u80FD\u529B\u4E2D\u5FC3\u5DF2\u5F00\u542F\u4E14\u547D\u4EE4\u524D\u7F00\u5728\u5141\u8BB8\u5217\u8868\u91CC\u7684 lark-cli \u80FD\u529B\u3002\",\n parametersSchema: {\n type: \"object\",\n properties: {\n capabilityKey: { type: \"string\", title: \"\u80FD\u529B key\" },\n command: {\n type: \"array\",\n title: \"lark-cli \u547D\u4EE4\u53C2\u6570\u6570\u7EC4\",\n items: { type: \"string\" },\n },\n connectionId: { type: \"string\", title: \"\u98DE\u4E66\u673A\u5668\u4EBA\u8FDE\u63A5\u4EE3\u53F7\uFF08\u53EF\u9009\uFF09\" },\n profileName: { type: \"string\", title: \"lark-cli profile\uFF08\u53EF\u9009\uFF09\" },\n timeoutMs: { type: \"number\", title: \"\u8D85\u65F6\u65F6\u95F4\u6BEB\u79D2\uFF08\u53EF\u9009\uFF09\" },\n },\n required: [\"capabilityKey\", \"command\"],\n },\n },\n async (params, runCtx): Promise<ToolResult> => {\n return await runControlledLarkCliCapabilityFromTool(ctx, runCtx.runId, params as Record<string, unknown>);\n },\n );\n}\n\nfunction readRunIdFromEvent(event: PluginEvent): string | undefined {\n const payload = asRecord(event.payload);\n return readString(payload?.runId, payload?.id, event.entityId);\n}\n\nfunction terminalSessionEventType(eventType: PluginEvent[\"eventType\"]): AgentSessionEvent[\"eventType\"] | null {\n if (eventType === \"agent.run.finished\") return \"done\";\n if (eventType === \"agent.run.failed\" || eventType === \"agent.run.cancelled\") return \"error\";\n return null;\n}\n\nfunction readIssueIdFromEvent(event: PluginEvent): string | undefined {\n const payload = asRecord(event.payload);\n const issue = asRecord(payload?.issue);\n return readString(\n payload?.issueId,\n payload?.issue_id,\n issue?.id,\n event.entityType === \"issue\" ? event.entityId : undefined,\n );\n}\n\nfunction isAgentAuthoredComment(\n comment: IssueComment | null,\n session: FeishuSessionData,\n route: ResolvedRouteConfig,\n): boolean {\n return !!comment?.authorAgentId &&\n (comment.authorAgentId === route.targetAgentId || comment.authorAgentId === session.paperclipAgentId);\n}\n\nasync function handleAgentRunTerminalEvent(ctx: PluginContext, event: PluginEvent): Promise<void> {\n const runId = readRunIdFromEvent(event);\n const eventType = terminalSessionEventType(event.eventType);\n if (!runId || !eventType) return;\n\n const sessionRecord = await findSessionByRunId(ctx, runId);\n if (!sessionRecord) {\n record(\"info\", \"\u6536\u5230 Paperclip \u8FD0\u884C\u7ED3\u675F\u4E8B\u4EF6\uFF0C\u4F46\u6CA1\u6709\u5BF9\u5E94\u7684\u98DE\u4E66\u4F1A\u8BDD\", {\n eventType: event.eventType,\n runId,\n });\n return;\n }\n\n const config = await getConfig(ctx);\n const session = sessionRecord.data;\n const connection = resolveConnection(config, session.connectionId);\n if (!connection) {\n record(\"warning\", \"\u98DE\u4E66\u5B8C\u6210\u56DE\u590D\u5931\u8D25\uFF1A\u627E\u4E0D\u5230\u8FD9\u4E2A\u8FD0\u884C\u5BF9\u5E94\u7684\u673A\u5668\u4EBA\", {\n runId,\n connectionId: session.connectionId,\n });\n return;\n }\n\n const route = await resolveRouteFromSession(ctx, config, session, sessionRecord.companyId);\n const issue = await ctx.issues.get(session.paperclipIssueId, route.companyId).catch(() => null);\n const payload = asRecord(event.payload);\n const message: FeishuInboundMessage = {\n connectionId: session.connectionId,\n messageId: session.lastMessageId,\n chatId: session.chatId,\n threadId: session.threadId,\n rootMessageId: session.rootMessageId,\n senderOpenId: session.requesterOpenId,\n text: issue?.title ?? session.paperclipIssueTitle ?? \"Paperclip \u4EFB\u52A1\",\n mentions: [],\n attachments: [],\n raw: {\n recoveredFrom: event.eventType,\n runId,\n },\n };\n scheduleTerminalFallbackReply(\n ctx,\n config,\n connection,\n route,\n message,\n session,\n issue?.title ?? session.paperclipIssueTitle ?? \"Paperclip \u4EFB\u52A1\",\n {\n sessionId: session.paperclipAgentSessionId ?? \"\",\n runId,\n seq: 0,\n eventType,\n stream: \"system\",\n message: readString(payload?.message, payload?.error, payload?.reason) ?? null,\n payload: payload ?? null,\n },\n );\n}\n\nasync function handleIssueCompletionEvent(ctx: PluginContext, event: PluginEvent): Promise<void> {\n const issueId = readIssueIdFromEvent(event);\n if (!issueId) return;\n\n const sessionRecord = await findSessionByIssueId(ctx, issueId);\n if (!sessionRecord) {\n record(\"info\", \"\u6536\u5230 Paperclip \u4EFB\u52A1\u4E8B\u4EF6\uFF0C\u4F46\u6CA1\u6709\u5BF9\u5E94\u7684\u98DE\u4E66\u4F1A\u8BDD\", {\n eventType: event.eventType,\n issueId,\n });\n return;\n }\n\n const config = await getConfig(ctx);\n const session = sessionRecord.data;\n const connection = resolveConnection(config, session.connectionId);\n if (!connection) {\n record(\"warning\", \"\u98DE\u4E66\u5B8C\u6210\u56DE\u590D\u5931\u8D25\uFF1A\u627E\u4E0D\u5230\u8FD9\u4E2A\u4EFB\u52A1\u5BF9\u5E94\u7684\u673A\u5668\u4EBA\", {\n issueId,\n connectionId: session.connectionId,\n });\n return;\n }\n\n const route = await resolveRouteFromSession(ctx, config, session, sessionRecord.companyId);\n const issue = await ctx.issues.get(issueId, route.companyId).catch(() => null);\n const comments = await ctx.issues.listComments(issueId, route.companyId).catch(() => []);\n const finalComment = latestFinalComment(comments, session, route);\n const agentFinalComment = isAgentAuthoredComment(finalComment, session, route) && looksLikeFinalComment(finalComment?.body);\n const issueDone = issue?.status === \"done\";\n if (!issueDone && !agentFinalComment) return;\n\n const message: FeishuInboundMessage = {\n connectionId: session.connectionId,\n messageId: session.lastMessageId,\n chatId: session.chatId,\n threadId: session.threadId,\n rootMessageId: session.rootMessageId,\n senderOpenId: session.requesterOpenId,\n text: issue?.title ?? session.paperclipIssueTitle ?? \"Paperclip \u4EFB\u52A1\",\n mentions: [],\n attachments: [],\n raw: {\n recoveredFrom: event.eventType,\n issueId,\n },\n };\n\n await replyOnAgentSessionTerminal(\n ctx,\n config,\n connection,\n route,\n message,\n session,\n issue?.title ?? session.paperclipIssueTitle ?? \"Paperclip \u4EFB\u52A1\",\n {\n sessionId: session.paperclipAgentSessionId ?? \"\",\n runId: session.lastRunId ?? issueId,\n seq: 0,\n eventType: \"done\",\n stream: \"system\",\n message: null,\n payload: asRecord(event.payload),\n },\n );\n}\n\nasync function registerEventHandlers(ctx: PluginContext): Promise<void> {\n const onRunDone = async (event: PluginEvent) => {\n record(\"info\", \"Observed Paperclip run event\", {\n eventType: event.eventType,\n runId: (event.payload as Record<string, unknown> | null)?.runId ?? event.entityId,\n });\n await handleAgentRunTerminalEvent(ctx, event);\n };\n const onIssueDone = async (event: PluginEvent) => {\n record(\"info\", \"Observed Paperclip issue event\", {\n eventType: event.eventType,\n issueId: readIssueIdFromEvent(event) ?? event.entityId,\n });\n await handleIssueCompletionEvent(ctx, event);\n };\n ctx.events.on(\"agent.run.finished\", onRunDone);\n ctx.events.on(\"agent.run.failed\", onRunDone);\n ctx.events.on(\"agent.run.cancelled\", onRunDone);\n ctx.events.on(\"issue.updated\", onIssueDone);\n ctx.events.on(\"issue.comment.created\", onIssueDone);\n}\n\nconst plugin: PaperclipPlugin = definePlugin({\n async setup(ctx) {\n currentContext = ctx;\n installProcessShutdownHandlers();\n const config = await getConfig(ctx);\n await syncConfigToDatabase(ctx, config);\n await registerDataHandlers(ctx);\n await registerActionHandlers(ctx);\n await registerToolHandlers(ctx);\n await registerEventHandlers(ctx);\n await startConfiguredSubscribers(ctx, config);\n startSubscriberWatchdog(ctx);\n record(\"info\", \"\u98DE\u4E66\u8FDE\u63A5\u5668\u5DF2\u542F\u52A8\", { pluginId: PLUGIN_ID });\n },\n\n async onHealth(): Promise<PluginHealthDiagnostics> {\n const ctx = currentContext;\n const config = ctx ? await getConfig(ctx) : normalizeConfig({});\n const shouldCheckProfiles = config.dryRunCli !== true && getEnabledConnections(config).length > 0;\n const profilesResult = shouldCheckProfiles\n ? await listLarkProfiles(config).catch((error) => ({\n profiles: [] as ProfileRow[],\n error: String(error),\n }))\n : { profiles: [] as ProfileRow[], error: undefined };\n const monitor = buildProductionMonitor(config, {\n availableProfileNames: !shouldCheckProfiles || profilesResult.error\n ? undefined\n : new Set(profilesResult.profiles.map((profile) => profile.name)),\n profileReadError: profilesResult.error ?? null,\n });\n return {\n status: monitor.health === \"error\" ? \"error\" : monitor.health === \"warning\" ? \"degraded\" : \"ok\",\n message: monitor.message,\n details: {\n dryRunCli: config.dryRunCli === true,\n eventSubscriberEnabled: config.enableEventSubscriber === true,\n enabledConnections: getEnabledConnections(config).length,\n usableConnections: monitor.usableConnectionCount,\n missingProfileConnectionIds: monitor.missingProfileConnectionIds,\n profileReadError: monitor.profileReadError,\n activeSubscribers: subscribers.size,\n expectedSubscribers: monitor.expectedSubscriberCount,\n missingSubscriberConnectionIds: monitor.missingSubscriberConnectionIds,\n recentErrorCount: monitor.recentErrorCount,\n recentWarningCount: monitor.recentWarningCount,\n },\n };\n },\n\n async onConfigChanged(newConfig) {\n const ctx = currentContext;\n if (!ctx) return;\n const config = normalizeConfig(newConfig);\n await syncConfigToDatabase(ctx, config);\n await startConfiguredSubscribers(ctx, config);\n record(\"info\", \"\u98DE\u4E66\u8FDE\u63A5\u5668\u914D\u7F6E\u5DF2\u66F4\u65B0\", {\n enabledConnections: getEnabledConnections(config).length,\n subscribers: subscribers.size,\n });\n },\n\n async onValidateConfig(config) {\n const normalized = normalizeConfig(config);\n const warnings: string[] = [];\n const errors: string[] = [];\n const enabledConnectionIds = new Set(getEnabledConnections(normalized).map((connection) => connection.id));\n const enabledBaseSinkIds = new Set((normalized.baseSinks ?? []).filter((sink) => sink.enabled !== false).map((sink) => sink.id));\n if (normalized.enableEventSubscriber) {\n warnings.push(\"\u53EA\u6709\u672C\u5730\u6D4B\u8BD5\u6216\u5355\u5B9E\u4F8B\u90E8\u7F72\u624D\u5EFA\u8BAE\u5F00\u542F\u300C\u81EA\u52A8\u76D1\u542C\u98DE\u4E66\u6D88\u606F\u300D\u3002\u4E91\u670D\u52A1\u5668\u90E8\u7F72\u5EFA\u8BAE\u7528\u5355\u72EC\u7684\u76D1\u542C\u670D\u52A1\uFF0C\u907F\u514D\u91CD\u590D\u6536\u6D88\u606F\u3002\");\n }\n if (normalized.eventRequireSignature && !normalized.eventEncryptKeyRef) {\n errors.push(\"\u5DF2\u5F00\u542F\u516C\u7F51\u56DE\u8C03\u7B7E\u540D\u6821\u9A8C\uFF0C\u4F46\u6CA1\u6709\u586B\u5199 Encrypt Key Secret Ref\u3002\u8BF7\u5148\u628A\u98DE\u4E66\u4E8B\u4EF6\u8BA2\u9605\u91CC\u7684 Encrypt Key \u5B58\u5230 Paperclip Secret/Vault\u3002\");\n }\n if (!normalized.eventVerificationTokenRef && !normalized.eventEncryptKeyRef) {\n warnings.push(\"\u516C\u7F51 webhook \u8FD8\u6CA1\u6709\u914D\u7F6E Verification Token \u6216 Encrypt Key Secret Ref\u3002\u751F\u4EA7\u73AF\u5883\u5EFA\u8BAE\u81F3\u5C11\u914D\u7F6E\u4E00\u9879\uFF0C\u907F\u514D\u5916\u90E8\u8BF7\u6C42\u4F2A\u9020\u98DE\u4E66\u4E8B\u4EF6\u3002\");\n }\n for (const connection of getEnabledConnections(normalized)) {\n if (isTechnicalProfileName(connection.name) && connectionBotAliases(connection).length === 0) {\n warnings.push(`\u98DE\u4E66\u673A\u5668\u4EBA\u300C${connection.name || connection.profileName}\u300D\u6CA1\u6709\u586B\u5199 @ \u540D\u79F0\u3002\u98DE\u4E66\u6CA1\u6709\u8FD4\u56DE\u5B98\u65B9\u673A\u5668\u4EBA\u540D\u65F6\uFF0C@\u5C0F\u9510/@\u9510\u601D \u8FD9\u7C7B\u591A\u673A\u5668\u4EBA\u7FA4\u804A\u53EF\u80FD\u65E0\u6CD5\u51C6\u786E\u5224\u65AD\u3002`);\n }\n }\n if (normalized.dryRunCli !== true && getEnabledConnections(normalized).length > 0) {\n const result = await listLarkProfiles(normalized).catch((error) => ({\n profiles: [] as ProfileRow[],\n error: String(error),\n }));\n if (result.error) {\n warnings.push(`\u65E0\u6CD5\u8BFB\u53D6\u5F53\u524D\u8FD0\u884C\u73AF\u5883\u7684\u98DE\u4E66\u6388\u6743/profile \u5217\u8868\uFF1A${result.error}\u3002\u8BF7\u786E\u8BA4 lark-cli \u53EF\u7528\uFF0C\u5426\u5219\u98DE\u4E66\u673A\u5668\u4EBA\u53EF\u80FD\u65E0\u6CD5\u76D1\u542C\u6216\u56DE\u590D\u3002`);\n } else {\n const availableProfileNames = new Set(result.profiles.map((profile) => profile.name));\n const routeConnectionIds = new Set((normalized.routes ?? [])\n .filter((route) => route.enabled !== false)\n .map((route) => route.connectionId)\n .filter((connectionId): connectionId is string => typeof connectionId === \"string\" && connectionId.trim().length > 0));\n for (const connection of getEnabledConnections(normalized)) {\n if (availableProfileNames.has(connection.profileName)) continue;\n const label = connection.name || connection.profileName;\n if (routeConnectionIds.has(connection.id)) {\n errors.push(`\u5165\u53E3\u6B63\u5728\u4F7F\u7528\u98DE\u4E66\u673A\u5668\u4EBA\u300C${label}\u300D\uFF0C\u4F46\u5F53\u524D\u8FD0\u884C\u73AF\u5883\u8BFB\u4E0D\u5230\u5B83\u7684\u6388\u6743/profile\u300C${connection.profileName}\u300D\u3002\u8BF7\u91CD\u65B0\u7ED1\u5B9A\uFF0C\u6216\u628A\u5165\u53E3\u6362\u6210\u53EF\u8FD0\u884C\u7684\u673A\u5668\u4EBA\u3002`);\n } else {\n warnings.push(`\u98DE\u4E66\u673A\u5668\u4EBA\u300C${label}\u300D\u5DF2\u4FDD\u7559\u5728\u673A\u5668\u4EBA\u6C60\u91CC\uFF0C\u4F46\u5F53\u524D\u8FD0\u884C\u73AF\u5883\u8BFB\u4E0D\u5230\u5B83\u7684\u6388\u6743/profile\u300C${connection.profileName}\u300D\u3002\u5982\u679C\u8FD8\u8981\u7528\u5B83\uFF0C\u8BF7\u91CD\u65B0\u7ED1\u5B9A\uFF1B\u4E0D\u7528\u53EF\u5148\u505C\u7528\u3002`);\n }\n }\n }\n }\n for (const route of normalized.routes ?? []) {\n if (route.enabled === false) continue;\n const entryName = describeRouteEntry(route);\n if (!route.connectionId) {\n errors.push(`\u5165\u53E3\u300C${entryName}\u300D\u6CA1\u6709\u9009\u62E9\u98DE\u4E66\u673A\u5668\u4EBA\u3002\u8BF7\u5728\u5165\u53E3\u91CC\u9009\u62E9\u4E00\u4E2A\u673A\u5668\u4EBA\uFF0C\u907F\u514D\u591A\u4E2A\u673A\u5668\u4EBA\u540C\u65F6\u5904\u7406\u540C\u4E00\u6761\u6D88\u606F\u3002`);\n } else if (!enabledConnectionIds.has(route.connectionId)) {\n errors.push(`\u5165\u53E3\u300C${entryName}\u300D\u9009\u62E9\u7684\u98DE\u4E66\u673A\u5668\u4EBA\u4E0D\u53EF\u7528\uFF1A${route.connectionId}\u3002\u8BF7\u91CD\u65B0\u9009\u62E9\u5DF2\u542F\u7528\u7684\u673A\u5668\u4EBA\u3002`);\n }\n if (!route.companyId && !route.companyRef) errors.push(`\u5165\u53E3\u300C${entryName}\u300D\u7F3A\u5C11\u516C\u53F8\u3002\u8BF7\u586B\u5199\u516C\u53F8\u540D\u79F0/\u524D\u7F00\uFF0C\u6216\u586B\u5199\u516C\u53F8 ID\u3002`);\n if (route.matchType === \"chat\" && !route.chatId) errors.push(`\u5165\u53E3\u300C${entryName}\u300D\u9009\u62E9\u4E86\u7FA4\u804A/\u4F1A\u8BDD\uFF0C\u4F46\u6CA1\u6709\u586B\u5199\u98DE\u4E66 chat_id\u3002`);\n if (route.matchType === \"user\" && !route.userOpenId) errors.push(`\u5165\u53E3\u300C${entryName}\u300D\u9009\u62E9\u4E86\u6307\u5B9A\u7528\u6237\uFF0C\u4F46\u6CA1\u6709\u586B\u5199\u7528\u6237 open_id\u3002`);\n if (route.matchType === \"keyword\" && !route.keyword?.trim()) errors.push(`\u5165\u53E3\u300C${entryName}\u300D\u9009\u62E9\u4E86\u5173\u952E\u8BCD\uFF0C\u4F46\u6CA1\u6709\u586B\u5199\u5173\u952E\u8BCD\u3002`);\n if (route.matchType === \"regex\") {\n if (!route.regex?.trim()) {\n errors.push(`\u5165\u53E3\u300C${entryName}\u300D\u9009\u62E9\u4E86\u9AD8\u7EA7\u89C4\u5219\uFF0C\u4F46\u6CA1\u6709\u586B\u5199\u6B63\u5219\u8868\u8FBE\u5F0F\u3002`);\n } else {\n try {\n new RegExp(route.regex);\n } catch (error) {\n errors.push(`\u5165\u53E3\u300C${entryName}\u300D\u7684\u6B63\u5219\u8868\u8FBE\u5F0F\u4E0D\u53EF\u7528\uFF1A${String(error)}`);\n }\n }\n }\n if (!route.targetAgentId && !route.targetAgentRef && !route.targetAgentName) {\n warnings.push(`\u5165\u53E3\u300C${entryName}\u300D\u6CA1\u6709\u6307\u5B9A\u667A\u80FD\u4F53\uFF1B\u5B83\u53EA\u4F1A\u521B\u5EFA Paperclip \u4EFB\u52A1\uFF0C\u4E0D\u4F1A\u81EA\u52A8\u4EA4\u7ED9\u667A\u80FD\u4F53\u5904\u7406\u3002`);\n }\n if (route.baseSinkId && !enabledBaseSinkIds.has(route.baseSinkId)) {\n errors.push(`\u5165\u53E3\u300C${entryName}\u300D\u5F15\u7528\u4E86\u4E0D\u5B58\u5728\u7684\u591A\u7EF4\u8868\u683C\u89C4\u5219\u300C${route.baseSinkId}\u300D\u3002`);\n }\n }\n for (const sink of normalized.baseSinks ?? []) {\n if (sink.enabled === false) continue;\n if (sink.connectionId && !enabledConnectionIds.has(sink.connectionId)) {\n errors.push(`\u591A\u7EF4\u8868\u683C\u89C4\u5219\u300C${sink.id}\u300D\u9009\u62E9\u7684\u98DE\u4E66\u673A\u5668\u4EBA\u4E0D\u53EF\u7528\uFF1A${sink.connectionId}\u3002`);\n }\n }\n return { ok: errors.length === 0, warnings, errors };\n },\n\n async onWebhook(input) {\n if (input.endpointKey !== WEBHOOK_KEYS.feishuEvents) {\n throw new Error(`Unsupported Feishu webhook endpoint: ${input.endpointKey}`);\n }\n const ctx = currentContext;\n if (!ctx) throw new Error(\"\u98DE\u4E66\u8FDE\u63A5\u5668\u8FD8\u6CA1\u6709\u542F\u52A8\uFF0C\u6682\u65F6\u65E0\u6CD5\u5904\u7406\u516C\u7F51\u56DE\u8C03\u3002\");\n const config = await getConfig(ctx);\n const prepared = await prepareWebhookPayload(ctx, config, input);\n const payload = prepared.payload;\n const challenge = readString(payload.challenge);\n const callbackType = readString(payload.type);\n if (challenge && callbackType === \"url_verification\") {\n record(\"info\", \"\u6536\u5230\u98DE\u4E66 URL \u9A8C\u8BC1\u56DE\u8C03\uFF0C\u56DE\u663E challenge\", {\n endpointKey: input.endpointKey,\n requestId: input.requestId,\n encrypted: prepared.encrypted,\n tokenVerified: prepared.tokenVerified,\n signatureVerified: prepared.signatureVerified,\n });\n return { challenge };\n }\n\n const result = await handleInboundMessage(ctx, payload, {\n connectionIds: webhookConnectionIds(config, payload),\n });\n record(result.ok ? \"info\" : \"warning\", \"\u5DF2\u901A\u8FC7\u98DE\u4E66\u516C\u7F51\u56DE\u8C03\u5904\u7406\u4E8B\u4EF6\", {\n endpointKey: input.endpointKey,\n requestId: input.requestId,\n encrypted: prepared.encrypted,\n tokenVerified: prepared.tokenVerified,\n signatureVerified: prepared.signatureVerified,\n eventId: readString(asRecord(payload.header)?.event_id, asRecord(payload.header)?.eventId, payload.event_id, payload.eventId),\n appId: webhookAppId(payload),\n result,\n });\n },\n\n async onApiRequest(input) {\n if (input.routeKey !== API_ROUTE_KEYS.simulateInboundMessage) {\n return { status: 404, body: { error: `Unsupported Feishu connector API route: ${input.routeKey}` } };\n }\n const ctx = currentContext;\n if (!ctx) return { status: 503, body: { error: \"\u98DE\u4E66\u8FDE\u63A5\u5668\u8FD8\u6CA1\u6709\u542F\u52A8\uFF0C\u6682\u65F6\u65E0\u6CD5\u5904\u7406 API \u8BF7\u6C42\u3002\" } };\n const body = asRecord(input.body) ?? {};\n const raw = body.raw ?? body.message ?? body;\n const connectionId = readString(body.connectionId);\n const connectionIds = Array.isArray(body.connectionIds)\n ? body.connectionIds.filter((value): value is string => typeof value === \"string\" && value.trim().length > 0)\n : undefined;\n const result = await handleInboundMessage(ctx, raw, {\n connectionId,\n connectionIds,\n });\n return {\n status: result.ok ? 200 : 422,\n body: {\n ...result,\n apiRoute: API_ROUTE_KEYS.simulateInboundMessage,\n companyId: input.companyId,\n },\n };\n },\n\n async onShutdown() {\n stopSubscriberWatchdog();\n stopSubscribers();\n record(\"warning\", \"\u98DE\u4E66\u8FDE\u63A5\u5668\u6B63\u5728\u5173\u95ED\");\n },\n});\n\nexport default plugin;\nrunWorker(plugin, import.meta.url);\n", "export const PLUGIN_ID = \"paperclipai.feishu-connector\";\nexport const PLUGIN_VERSION = \"0.3.1-connector-feishu\";\n\nexport const DATA_KEYS = {\n status: \"status\",\n catalog: \"catalog\",\n profiles: \"profiles\",\n directory: \"directory\",\n issueSource: \"issue-source\",\n capabilities: \"capabilities\",\n} as const;\n\nexport const ACTION_KEYS = {\n simulateInboundMessage: \"simulate-inbound-message\",\n sendMessage: \"send-message\",\n writeBaseRecord: \"write-base-record\",\n bindProfile: \"bind-profile\",\n startGuidedBind: \"start-guided-bind\",\n finishGuidedBind: \"finish-guided-bind\",\n startUserAuth: \"start-user-auth\",\n finishUserAuth: \"finish-user-auth\",\n testRoute: \"test-route\",\n checkPermissions: \"check-permissions\",\n retryFailedDeliveries: \"retry-failed-deliveries\",\n replyIssueSourceThread: \"reply-issue-source-thread\",\n downloadIssueAttachments: \"download-issue-attachments\",\n writeIssueBaseRecord: \"write-issue-base-record\",\n lookupIssueRequester: \"lookup-issue-requester\",\n replyIssueCommentToFeishu: \"reply-issue-comment-to-feishu\",\n} as const;\n\nexport const API_ROUTE_KEYS = {\n simulateInboundMessage: \"simulate-inbound-message\",\n} as const;\n\nexport const TOOL_NAMES = {\n sendMessage: \"feishu.send_message\",\n sendCard: \"feishu.send_card\",\n writeBaseRecord: \"feishu.write_base_record\",\n downloadAttachments: \"feishu.download_attachments\",\n replyOriginalThread: \"feishu.reply_original_thread\",\n replySourceThread: \"feishu.reply_source_thread\",\n askClarification: \"feishu.ask_clarification\",\n lookupUser: \"feishu.lookup_user\",\n fetchDoc: \"feishu.fetch_doc\",\n runLarkCliCapability: \"feishu.run_lark_cli_capability\",\n} as const;\n\nexport const UI_EXPORTS = {\n dashboardWidget: \"DashboardWidget\",\n sidebarLink: \"FeishuSidebarLink\",\n sidebarPanel: \"FeishuSidebarPanel\",\n settingsPage: \"FeishuSettingsPage\",\n issueTab: \"FeishuIssueTab\",\n commentReplyAction: \"FeishuCommentReplyAction\",\n} as const;\n\nexport const WEBHOOK_KEYS = {\n feishuEvents: \"feishu-events\",\n} as const;\n\nexport const LEGACY_ACK_TEMPLATE = \"\u5DF2\u6536\u5230\uFF0C\u6211\u4F1A\u4EA4\u7ED9 {{agent_name}} \u5904\u7406\u3002\";\nexport const LEGACY_COMPLETION_TEMPLATE = \"\u4EFB\u52A1\u5DF2\u5B8C\u6210\uFF1A{{issue_title}}\";\nexport const DEFAULT_ACK_TEMPLATE = \"\u5DF2\u6536\u5230\uFF0C\u4EA4\u7ED9 {{agent_name}} \u5904\u7406\u3002\\n\u4EFB\u52A1\uFF1A{{issue_ref}}\";\nexport const DEFAULT_COMPLETION_TEMPLATE = \"\u5904\u7406\u5B8C\u6210\uFF1A{{issue_title}}\";\nexport const DEFAULT_ACK_CARD_TITLE = \"\uD83D\uDCCB \u5DF2\u6536\u5230\u4EFB\u52A1\";\nexport const DEFAULT_ACK_CARD_TEMPLATE = \"blue\";\nexport const DEFAULT_COMPLETION_CARD_TITLE = \"\u2705 \u4EFB\u52A1\u5B8C\u6210\";\nexport const DEFAULT_COMPLETION_CARD_TEMPLATE = \"green\";\nexport const DEFAULT_PROGRESS_CARD_TITLE = \"\u23F3 \u8FDB\u5EA6\u66F4\u65B0\";\nexport const DEFAULT_PROGRESS_CARD_TEMPLATE = \"indigo\";\nexport const DEFAULT_BLOCKED_CARD_TITLE = \"\uD83D\uDD04 \u5DF2\u8F6C\u4EA4\u5904\u7406\";\nexport const DEFAULT_BLOCKED_CARD_TEMPLATE = \"yellow\";\nexport const DEFAULT_FAILURE_CARD_TITLE = \"\u274C \u5904\u7406\u5931\u8D25\";\nexport const DEFAULT_FAILURE_CARD_TEMPLATE = \"red\";\nexport const DEFAULT_ACK_CARD_FOOTER = \"\u5B8C\u6210\u540E\u4F1A\u81EA\u52A8\u56DE\u5230\u8FD9\u91CC\u3002\";\nexport const DEFAULT_ESTIMATED_DURATION_LABEL = \"3-8 \u5206\u949F\";\nexport const DEFAULT_QUICK_REPLY_REGEX = \"^(\u53EA\u56DE\u590D\\\\s*ok|\u56DE\u590D\\\\s*ok|ping)$\";\nexport const DEFAULT_QUICK_REPLY_TEXT = \"ok\";\n", "import {\n DEFAULT_ACK_TEMPLATE,\n DEFAULT_COMPLETION_TEMPLATE,\n DEFAULT_QUICK_REPLY_REGEX,\n DEFAULT_QUICK_REPLY_TEXT,\n} from \"./constants.js\";\nimport type {\n FeishuBaseSinkConfig,\n FeishuCapabilityConfig,\n FeishuCapabilityScope,\n FeishuConnectionConfig,\n FeishuConnectorConfig,\n FeishuRouteConfig,\n} from \"./types.js\";\n\nconst optionalStringKeys = [\n \"eventVerificationTokenRef\",\n \"eventEncryptKeyRef\",\n] as const;\n\nexport const DEFAULT_CONFIG: Required<Pick<\n FeishuConnectorConfig,\n \"larkCliBin\" | \"dryRunCli\" | \"capabilityDefaultPolicy\" | \"paperclipBaseUrl\" | \"enableEventSubscriber\" | \"eventTypes\" | \"ackOnInbound\" | \"ackMessageTemplate\" | \"completionMessageTemplate\"\n | \"eventRequireSignature\" | \"enableQuickReply\" | \"quickReplyRegex\" | \"quickReplyText\"\n>> = {\n larkCliBin: \"lark-cli\",\n dryRunCli: true,\n capabilityDefaultPolicy: \"authorized\",\n paperclipBaseUrl: \"\",\n enableEventSubscriber: false,\n eventTypes: \"im.message.receive_v1\",\n eventRequireSignature: false,\n ackOnInbound: false,\n ackMessageTemplate: DEFAULT_ACK_TEMPLATE,\n completionMessageTemplate: DEFAULT_COMPLETION_TEMPLATE,\n enableQuickReply: true,\n quickReplyRegex: DEFAULT_QUICK_REPLY_REGEX,\n quickReplyText: DEFAULT_QUICK_REPLY_TEXT,\n};\n\nfunction asArray<T>(value: unknown): T[] {\n return Array.isArray(value) ? value as T[] : [];\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction normalizeStringList(value: unknown): string[] {\n const values = Array.isArray(value)\n ? value\n : typeof value === \"string\"\n ? value.split(/[,\uFF0C\u3001\\n]/g)\n : [];\n return [...new Set(values\n .filter((item): item is string => typeof item === \"string\")\n .map((item) => item.trim())\n .filter(Boolean))];\n}\n\nfunction normalizeCapabilityScope(value: unknown): FeishuCapabilityScope {\n return value === \"bot\" || value === \"entry\" || value === \"agent\" ? value : \"instance\";\n}\n\nexport function normalizeConfig(input: Record<string, unknown> | null | undefined): FeishuConnectorConfig {\n const source = isRecord(input) ? input : {};\n const optionalStrings = Object.fromEntries(optionalStringKeys\n .map((key) => [key, typeof source[key] === \"string\" ? source[key].trim() : undefined])\n .filter(([, value]) => typeof value === \"string\" && value.length > 0));\n return {\n ...DEFAULT_CONFIG,\n ...optionalStrings,\n larkCliBin: typeof source.larkCliBin === \"string\" && source.larkCliBin.trim()\n ? source.larkCliBin.trim()\n : DEFAULT_CONFIG.larkCliBin,\n dryRunCli: typeof source.dryRunCli === \"boolean\"\n ? source.dryRunCli\n : DEFAULT_CONFIG.dryRunCli,\n capabilityDefaultPolicy: source.capabilityDefaultPolicy === \"conservative\"\n ? \"conservative\"\n : DEFAULT_CONFIG.capabilityDefaultPolicy,\n paperclipBaseUrl: typeof source.paperclipBaseUrl === \"string\"\n ? source.paperclipBaseUrl.trim()\n : DEFAULT_CONFIG.paperclipBaseUrl,\n enableEventSubscriber: source.enableEventSubscriber === true,\n eventTypes: typeof source.eventTypes === \"string\" && source.eventTypes.trim()\n ? source.eventTypes.trim()\n : DEFAULT_CONFIG.eventTypes,\n eventRequireSignature: source.eventRequireSignature === true,\n ackOnInbound: source.ackOnInbound === true,\n ackMessageTemplate: typeof source.ackMessageTemplate === \"string\"\n ? source.ackMessageTemplate\n : DEFAULT_CONFIG.ackMessageTemplate,\n completionMessageTemplate: typeof source.completionMessageTemplate === \"string\"\n ? source.completionMessageTemplate\n : DEFAULT_CONFIG.completionMessageTemplate,\n enableQuickReply: source.enableQuickReply !== false,\n quickReplyRegex: typeof source.quickReplyRegex === \"string\" && source.quickReplyRegex.trim()\n ? source.quickReplyRegex.trim()\n : DEFAULT_CONFIG.quickReplyRegex,\n quickReplyText: typeof source.quickReplyText === \"string\"\n ? source.quickReplyText\n : DEFAULT_CONFIG.quickReplyText,\n connections: asArray<FeishuConnectionConfig>(source.connections)\n .filter((connection) =>\n typeof connection?.id === \"string\" &&\n typeof connection?.profileName === \"string\"\n )\n .map((connection) => ({\n ...connection,\n botAliases: normalizeStringList(connection.botAliases),\n })),\n routes: asArray<FeishuRouteConfig>(source.routes).filter((route) =>\n typeof route?.id === \"string\" &&\n (typeof route?.companyId === \"string\" || typeof route?.companyRef === \"string\") &&\n typeof route?.matchType === \"string\"\n ),\n baseSinks: asArray<FeishuBaseSinkConfig>(source.baseSinks).filter((sink) =>\n typeof sink?.id === \"string\" &&\n typeof sink?.baseToken === \"string\" &&\n typeof sink?.tableIdOrName === \"string\"\n ),\n capabilities: asArray<FeishuCapabilityConfig>(source.capabilities)\n .filter((capability) => typeof capability?.key === \"string\")\n .map((capability) => ({\n ...capability,\n key: capability.key.trim(),\n scope: normalizeCapabilityScope(capability.scope),\n }))\n .filter((capability) => capability.key.length > 0),\n };\n}\n\nexport function getEnabledConnections(config: FeishuConnectorConfig): FeishuConnectionConfig[] {\n return (config.connections ?? []).filter((connection) => connection.enabled !== false);\n}\n\nexport function resolveConnection(\n config: FeishuConnectorConfig,\n connectionId?: string,\n): FeishuConnectionConfig | null {\n const enabled = getEnabledConnections(config);\n if (connectionId) {\n return enabled.find((connection) => connection.id === connectionId) ?? null;\n }\n return enabled[0] ?? null;\n}\n\nexport function resolveBaseSink(\n config: FeishuConnectorConfig,\n sinkId?: string,\n): FeishuBaseSinkConfig | null {\n if (!sinkId) return null;\n return (config.baseSinks ?? []).find((sink) => sink.id === sinkId && sink.enabled !== false) ?? null;\n}\n", "import { TOOL_NAMES } from \"./constants.js\";\nimport type {\n FeishuCapabilityConfig,\n FeishuCapabilityScope,\n FeishuConnectorConfig,\n} from \"./types.js\";\n\ntype CapabilityRisk = \"low\" | \"medium\" | \"high\";\ntype CapabilityStatus = \"enabled\" | \"missing_permissions\" | \"disabled\" | \"planned\";\n\nexport type CapabilityDefinition = {\n key: string;\n group: string;\n title: string;\n description: string;\n defaultEnabled: boolean;\n implemented: boolean;\n toolName?: string;\n legacyToolName?: string;\n larkCliCommands: string[];\n recommendedScopes: string[];\n relatedSkills: string[];\n risk: CapabilityRisk;\n};\n\nexport type LarkCliSchemaDiscovery = {\n checked: boolean;\n checkedAt?: string;\n cliBin?: string;\n reason?: string;\n updateNotice?: {\n current?: string;\n latest?: string;\n message?: string;\n } | null;\n services: Array<{\n name: string;\n available: boolean;\n methodCount: number;\n scopeCount: number;\n sampleScopes: string[];\n error?: string;\n }>;\n commands: Array<{\n capabilityKey: string;\n command: string;\n cliService: string;\n cliCommand?: string;\n schemaService?: string | null;\n schemaAvailable: boolean | null;\n cliHelpAvailable: boolean | null;\n scopes: string[];\n status: \"schema_backed\" | \"cli_help_backed\" | \"not_found\" | \"not_checked\";\n note: string;\n }>;\n errors: string[];\n summary: string;\n};\n\nexport type FeishuCapabilityContext = {\n connectionId?: string | null;\n routeId?: string | null;\n agentId?: string | null;\n};\n\nconst CALENDAR_SCOPES = [\n \"calendar:calendar:create\",\n \"calendar:calendar:read\",\n \"calendar:calendar:update\",\n \"calendar:calendar:delete\",\n \"calendar:calendar.event:create\",\n \"calendar:calendar.event:read\",\n \"calendar:calendar.event:update\",\n \"calendar:calendar.event:delete\",\n \"calendar:calendar.free_busy:read\",\n];\n\nconst TASK_SCOPES = [\n \"task:task:read\",\n \"task:task:write\",\n \"task:tasklist:read\",\n \"task:tasklist:write\",\n \"task:section:read\",\n \"task:section:write\",\n \"task:custom_field:read\",\n \"task:custom_field:write\",\n \"task:attachment:write\",\n];\n\nconst MAIL_SCOPES = [\n \"mail:user_mailbox:readonly\",\n \"mail:user_mailbox.message:readonly\",\n \"mail:user_mailbox.message.body:read\",\n \"mail:user_mailbox.message:modify\",\n \"mail:user_mailbox.message:send\",\n \"mail:user_mailbox.folder:read\",\n \"mail:user_mailbox.folder:write\",\n \"mail:user_mailbox.mail_contact:read\",\n \"mail:user_mailbox.mail_contact:write\",\n \"mail:user_mailbox.rule:read\",\n \"mail:user_mailbox.rule:write\",\n \"mail:event\",\n];\n\nconst DRIVE_SCOPES = [\n \"drive:drive:readonly\",\n \"drive:file:readonly\",\n \"drive:drive.metadata:readonly\",\n \"drive:file:view_record:readonly\",\n \"space:document:retrieve\",\n \"space:folder:create\",\n \"docs:document:copy\",\n \"docx:document:write_only\",\n \"docs:document.comment:read\",\n \"docs:document.comment:create\",\n \"docs:document.comment:update\",\n \"docs:document.comment:delete\",\n \"docs:permission.member:auth\",\n \"docs:permission.member:create\",\n \"docs:permission.member:transfer\",\n \"docs:event:subscribe\",\n];\n\nconst WIKI_SCOPES = [\n \"wiki:space:read\",\n \"wiki:space:retrieve\",\n \"wiki:space:write_only\",\n \"wiki:node:read\",\n \"wiki:node:retrieve\",\n \"wiki:node:create\",\n \"wiki:node:copy\",\n \"wiki:member:retrieve\",\n \"wiki:member:create\",\n \"wiki:member:update\",\n];\n\nconst APPROVAL_SCOPES = [\n \"approval:instance:read\",\n \"approval:instance:write\",\n \"approval:task:read\",\n \"approval:task:write\",\n];\n\nconst OKR_SCOPES = [\n \"okr:okr.content:readonly\",\n \"okr:okr.content:writeonly\",\n \"okr:okr.setting:read\",\n \"okr:okr.period:readonly\",\n];\n\nconst MINUTES_SCOPES = [\n \"minutes:minutes.search:read\",\n \"minutes:minutes:readonly\",\n \"minutes:minutes.media:export\",\n \"minutes:minutes.artifacts:read\",\n \"minutes:minutes.transcript:export\",\n \"vc:meeting.search:read\",\n \"vc:meeting.meetingevent:read\",\n \"vc:note:read\",\n \"vc:record:readonly\",\n];\n\nexport const FEISHU_CAPABILITY_DEFINITIONS: CapabilityDefinition[] = [\n {\n key: \"reply_source_thread\",\n group: \"\u6D88\u606F\u4E0E\u7FA4\u804A\",\n title: \"\u56DE\u590D\u539F\u98DE\u4E66\u7EBF\u7A0B\",\n description: \"\u628A Agent \u7684\u8FDB\u5C55\u6216\u7ED3\u679C\u56DE\u590D\u5230\u521B\u5EFA Issue \u7684\u539F\u98DE\u4E66\u6D88\u606F\u7EBF\u7A0B\u3002\",\n defaultEnabled: true,\n implemented: true,\n toolName: TOOL_NAMES.replySourceThread,\n legacyToolName: TOOL_NAMES.replyOriginalThread,\n larkCliCommands: [\"im +messages-reply\"],\n recommendedScopes: [\"im:message:send_as_bot\"],\n relatedSkills: [\"lark-im\"],\n risk: \"low\",\n },\n {\n key: \"send_message\",\n group: \"\u6D88\u606F\u4E0E\u7FA4\u804A\",\n title: \"\u53D1\u9001\u98DE\u4E66\u6D88\u606F\",\n description: \"\u901A\u8FC7\u5DF2\u914D\u7F6E\u673A\u5668\u4EBA\u5411\u6307\u5B9A\u98DE\u4E66\u4F1A\u8BDD\u6216\u7528\u6237\u53D1\u9001\u6D88\u606F\u3002\",\n defaultEnabled: true,\n implemented: true,\n toolName: TOOL_NAMES.sendMessage,\n larkCliCommands: [\"im +messages-send\"],\n recommendedScopes: [\"im:message:send_as_bot\"],\n relatedSkills: [\"lark-im\"],\n risk: \"medium\",\n },\n {\n key: \"send_card\",\n group: \"\u6D88\u606F\u4E0E\u7FA4\u804A\",\n title: \"\u53D1\u9001\u98DE\u4E66\u5361\u7247\",\n description: \"\u4EE5\u98DE\u4E66\u5361\u7247\u5F62\u5F0F\u53D1\u9001\u7ED3\u6784\u5316\u7ED3\u8BBA\u3001\u6309\u94AE\u548C\u4EFB\u52A1\u72B6\u6001\u3002\",\n defaultEnabled: false,\n implemented: true,\n toolName: TOOL_NAMES.sendCard,\n larkCliCommands: [\"im +messages-send\"],\n recommendedScopes: [\"im:message:send_as_bot\"],\n relatedSkills: [\"lark-im\"],\n risk: \"medium\",\n },\n {\n key: \"ask_clarification\",\n group: \"\u6D88\u606F\u4E0E\u7FA4\u804A\",\n title: \"\u5411\u98DE\u4E66\u8FFD\u95EE\",\n description: \"\u4EFB\u52A1\u4FE1\u606F\u4E0D\u8DB3\u65F6\uFF0C\u56DE\u5230\u539F\u98DE\u4E66\u7EBF\u7A0B\u5411\u63D0\u51FA\u4EBA\u8FFD\u95EE\u3002\",\n defaultEnabled: true,\n implemented: true,\n toolName: TOOL_NAMES.askClarification,\n larkCliCommands: [\"im +messages-reply\"],\n recommendedScopes: [\"im:message:send_as_bot\"],\n relatedSkills: [\"lark-im\"],\n risk: \"low\",\n },\n {\n key: \"download_attachments\",\n group: \"\u6D88\u606F\u4E0E\u7FA4\u804A\",\n title: \"\u4E0B\u8F7D\u539F\u6D88\u606F\u9644\u4EF6\",\n description: \"\u4E0B\u8F7D\u98DE\u4E66\u56FE\u7247\u3001\u6587\u4EF6\u3001\u97F3\u9891\u6216\u89C6\u9891\uFF0C\u5E76\u6302\u5230 Paperclip Issue\u3002\",\n defaultEnabled: true,\n implemented: true,\n toolName: TOOL_NAMES.downloadAttachments,\n larkCliCommands: [\"im +messages-resources-download\"],\n recommendedScopes: [\"im:message:readonly\", \"drive:file:readonly\"],\n relatedSkills: [\"lark-im\", \"lark-drive\"],\n risk: \"medium\",\n },\n {\n key: \"lookup_user\",\n group: \"\u901A\u8BAF\u5F55\u627E\u4EBA\",\n title: \"\u67E5\u8BE2\u98DE\u4E66\u7528\u6237\",\n description: \"\u6309\u59D3\u540D\u3001\u5DE5\u53F7\u3001\u90AE\u7BB1\u6216\u5173\u952E\u8BCD\u89E3\u6790\u98DE\u4E66\u8054\u7CFB\u4EBA\u3002\",\n defaultEnabled: true,\n implemented: true,\n toolName: TOOL_NAMES.lookupUser,\n larkCliCommands: [\"contact +search-user\"],\n recommendedScopes: [\"contact:user.base:readonly\"],\n relatedSkills: [\"lark-contact\"],\n risk: \"medium\",\n },\n {\n key: \"fetch_doc\",\n group: \"\u4E91\u6587\u6863\",\n title: \"\u8BFB\u53D6\u98DE\u4E66\u6587\u6863\",\n description: \"\u8BFB\u53D6\u98DE\u4E66\u4E91\u6587\u6863\u5185\u5BB9\uFF0C\u4F9B Agent \u603B\u7ED3\u6216\u5206\u6790\u3002\",\n defaultEnabled: false,\n implemented: true,\n toolName: TOOL_NAMES.fetchDoc,\n larkCliCommands: [\"docs +fetch\"],\n recommendedScopes: [\"docx:document:readonly\", \"drive:drive:readonly\"],\n relatedSkills: [\"lark-doc\", \"lark-drive\"],\n risk: \"medium\",\n },\n {\n key: \"write_base_record\",\n group: \"\u591A\u7EF4\u8868\u683C\",\n title: \"\u5199\u5165\u591A\u7EF4\u8868\u683C\",\n description: \"\u628A\u7ED3\u6784\u5316\u7ED3\u679C\u5199\u5165\u5DF2\u914D\u7F6E\u7684\u98DE\u4E66 Base \u8868\u3002\",\n defaultEnabled: true,\n implemented: true,\n toolName: TOOL_NAMES.writeBaseRecord,\n larkCliCommands: [\"base +record-upsert\"],\n recommendedScopes: [\"base:app:readonly\", \"base:record:create\", \"base:record:update\"],\n relatedSkills: [\"lark-base\"],\n risk: \"high\",\n },\n {\n key: \"calendar_events\",\n group: \"\u65E5\u5386\u4F1A\u8BAE\",\n title: \"\u65E5\u5386\u4F1A\u8BAE\",\n description: \"\u901A\u8FC7\u53D7\u63A7 lark-cli \u65E5\u5386\u670D\u52A1\u67E5\u8BE2\u3001\u521B\u5EFA\u3001\u66F4\u65B0\u65E5\u7A0B\u548C\u4F1A\u8BAE\u76F8\u5173\u4FE1\u606F\u3002\",\n defaultEnabled: false,\n implemented: true,\n larkCliCommands: [\"calendar\"],\n recommendedScopes: CALENDAR_SCOPES,\n relatedSkills: [\"lark-calendar\"],\n risk: \"medium\",\n },\n {\n key: \"approval\",\n group: \"\u5BA1\u6279\",\n title: \"\u5BA1\u6279\",\n description: \"\u901A\u8FC7\u53D7\u63A7 lark-cli \u5BA1\u6279\u670D\u52A1\u67E5\u8BE2\u6216\u5904\u7406\u5BA1\u6279\u4EFB\u52A1\u3002\",\n defaultEnabled: false,\n implemented: true,\n larkCliCommands: [\"approval\"],\n recommendedScopes: APPROVAL_SCOPES,\n relatedSkills: [\"lark-approval\"],\n risk: \"high\",\n },\n {\n key: \"task\",\n group: \"\u4EFB\u52A1\",\n title: \"\u98DE\u4E66\u4EFB\u52A1\",\n description: \"\u901A\u8FC7\u53D7\u63A7 lark-cli \u4EFB\u52A1\u670D\u52A1\u521B\u5EFA\u3001\u67E5\u8BE2\u3001\u66F4\u65B0\u98DE\u4E66\u4EFB\u52A1\u548C\u4EFB\u52A1\u6E05\u5355\u3002\",\n defaultEnabled: false,\n implemented: true,\n larkCliCommands: [\"task\"],\n recommendedScopes: TASK_SCOPES,\n relatedSkills: [\"lark-task\"],\n risk: \"medium\",\n },\n {\n key: \"mail\",\n group: \"\u90AE\u7BB1\",\n title: \"\u98DE\u4E66\u90AE\u7BB1\",\n description: \"\u901A\u8FC7\u53D7\u63A7 lark-cli \u90AE\u7BB1\u670D\u52A1\u8BFB\u53D6\u3001\u8349\u62DF\u3001\u56DE\u590D\u6216\u53D1\u9001\u98DE\u4E66\u90AE\u4EF6\u3002\",\n defaultEnabled: false,\n implemented: true,\n larkCliCommands: [\"mail\"],\n recommendedScopes: MAIL_SCOPES,\n relatedSkills: [\"lark-mail\"],\n risk: \"high\",\n },\n {\n key: \"okr\",\n group: \"OKR\",\n title: \"\u98DE\u4E66 OKR\",\n description: \"\u901A\u8FC7\u53D7\u63A7 lark-cli OKR \u670D\u52A1\u67E5\u8BE2\u6216\u7EF4\u62A4\u98DE\u4E66 OKR\u3002\",\n defaultEnabled: false,\n implemented: true,\n larkCliCommands: [\"okr\"],\n recommendedScopes: OKR_SCOPES,\n relatedSkills: [\"lark-okr\"],\n risk: \"medium\",\n },\n {\n key: \"minutes\",\n group: \"\u98DE\u4E66\u5999\u8BB0\",\n title: \"\u98DE\u4E66\u5999\u8BB0\",\n description: \"\u901A\u8FC7\u53D7\u63A7 lark-cli \u5999\u8BB0\u548C\u89C6\u9891\u4F1A\u8BAE\u670D\u52A1\u67E5\u8BE2\u3001\u8BFB\u53D6\u6216\u4E0B\u8F7D\u5999\u8BB0\u5185\u5BB9\u3002\",\n defaultEnabled: false,\n implemented: true,\n larkCliCommands: [\"minutes\", \"vc\"],\n recommendedScopes: MINUTES_SCOPES,\n relatedSkills: [\"lark-minutes\", \"lark-vc\"],\n risk: \"medium\",\n },\n {\n key: \"wiki\",\n group: \"\u77E5\u8BC6\u5E93\",\n title: \"\u98DE\u4E66\u77E5\u8BC6\u5E93\",\n description: \"\u901A\u8FC7\u53D7\u63A7 lark-cli \u77E5\u8BC6\u5E93\u670D\u52A1\u67E5\u8BE2\u77E5\u8BC6\u7A7A\u95F4\u3001\u6210\u5458\u548C\u8282\u70B9\u3002\",\n defaultEnabled: false,\n implemented: true,\n larkCliCommands: [\"wiki\"],\n recommendedScopes: WIKI_SCOPES,\n relatedSkills: [\"lark-wiki\"],\n risk: \"medium\",\n },\n {\n key: \"drive_files\",\n group: \"\u4E91\u7A7A\u95F4\u6587\u4EF6\",\n title: \"\u4E91\u7A7A\u95F4\u6587\u4EF6\",\n description: \"\u901A\u8FC7\u53D7\u63A7 lark-cli \u4E91\u7A7A\u95F4\u670D\u52A1\u641C\u7D22\u3001\u4E0A\u4F20\u3001\u4E0B\u8F7D\u3001\u5BFC\u5165\u3001\u5BFC\u51FA\u6216\u7BA1\u7406\u6587\u4EF6\u3002\",\n defaultEnabled: false,\n implemented: true,\n larkCliCommands: [\"drive\"],\n recommendedScopes: DRIVE_SCOPES,\n relatedSkills: [\"lark-drive\"],\n risk: \"medium\",\n },\n {\n key: \"run_lark_cli_capability\",\n group: \"\u9AD8\u7EA7\u515C\u5E95\",\n title: \"\u53D7\u63A7\u8FD0\u884C lark-cli \u80FD\u529B\",\n description: \"\u53EA\u5141\u8BB8\u8FD0\u884C\u80FD\u529B\u4E2D\u5FC3\u5DF2\u5F00\u542F\u3001\u5DF2\u6388\u6743\u3001\u5DF2\u5BA1\u8BA1\u7684 lark-cli \u547D\u4EE4\u3002\",\n defaultEnabled: false,\n implemented: true,\n toolName: TOOL_NAMES.runLarkCliCapability,\n larkCliCommands: [\"schema\", \"api\"],\n recommendedScopes: [],\n relatedSkills: [\"lark-openapi-explorer\", \"lark-skill-maker\"],\n risk: \"high\",\n },\n];\n\nexport function findFeishuCapabilityDefinition(key: string): CapabilityDefinition | null {\n return FEISHU_CAPABILITY_DEFINITIONS.find((definition) => definition.key === key) ?? null;\n}\n\nexport function isFeishuCapabilityEnabled(\n config: FeishuConnectorConfig,\n definition: CapabilityDefinition,\n context: FeishuCapabilityContext = {},\n): boolean {\n if (!definition.implemented) return false;\n const overrides = configuredCapabilities(config, definition.key);\n if (overrides.length === 0) return defaultCapabilityEnabled(config, definition);\n\n const instanceOverride = overrides.find((item) => (item.scope ?? \"instance\") === \"instance\");\n const baseEnabled = typeof instanceOverride?.enabled === \"boolean\"\n ? instanceOverride.enabled\n : defaultCapabilityEnabled(config, definition);\n\n const scopedOverrides = overrides.filter((item) => (item.scope ?? \"instance\") !== \"instance\");\n const matchedOverride = scopedOverrides\n .filter((item) => capabilityOverrideMatchesContext(item, context))\n .sort((a, b) => capabilityScopeSpecificity(b.scope) - capabilityScopeSpecificity(a.scope))[0];\n if (matchedOverride && typeof matchedOverride.enabled === \"boolean\") return matchedOverride.enabled;\n\n const hasEnabledScopedPolicy = scopedOverrides.some((item) => item.enabled === true && capabilityOverrideHasTarget(item));\n if (hasEnabledScopedPolicy) return false;\n return baseEnabled;\n}\n\nexport function isLarkCliCommandAllowedForCapability(\n definition: CapabilityDefinition,\n command: string[],\n): boolean {\n return definition.larkCliCommands.some((allowed) => {\n const prefix = allowed.split(/\\s+/).filter(Boolean);\n return prefix.length > 0 && prefix.every((part, index) => command[index] === part);\n });\n}\n\nfunction configuredCapability(\n config: FeishuConnectorConfig,\n key: string,\n): FeishuCapabilityConfig | undefined {\n return (config.capabilities ?? []).find((item) => item.key === key);\n}\n\nfunction configuredCapabilities(\n config: FeishuConnectorConfig,\n key: string,\n): FeishuCapabilityConfig[] {\n return (config.capabilities ?? []).filter((item) => item.key === key);\n}\n\nfunction capabilityScopeSpecificity(scope: FeishuCapabilityScope | undefined): number {\n if (scope === \"agent\") return 4;\n if (scope === \"entry\") return 3;\n if (scope === \"bot\") return 2;\n return 1;\n}\n\nfunction capabilityOverrideHasTarget(override: FeishuCapabilityConfig): boolean {\n if (override.scope === \"bot\") return Boolean(override.connectionId);\n if (override.scope === \"entry\") return Boolean(override.routeId);\n if (override.scope === \"agent\") return Boolean(override.agentId);\n return true;\n}\n\nfunction capabilityOverrideMatchesContext(\n override: FeishuCapabilityConfig,\n context: FeishuCapabilityContext,\n): boolean {\n if (override.scope === \"bot\") {\n return Boolean(override.connectionId && context.connectionId && override.connectionId === context.connectionId);\n }\n if (override.scope === \"entry\") {\n return Boolean(override.routeId && context.routeId && override.routeId === context.routeId);\n }\n if (override.scope === \"agent\") {\n return Boolean(override.agentId && context.agentId && override.agentId === context.agentId);\n }\n return true;\n}\n\nfunction scopeLabel(scope: FeishuCapabilityScope | undefined): string {\n if (scope === \"bot\") return \"\u67D0\u4E2A\u673A\u5668\u4EBA\u5F00\u542F\";\n if (scope === \"entry\") return \"\u67D0\u4E2A\u5165\u53E3\u5F00\u542F\";\n if (scope === \"agent\") return \"\u67D0\u4E2A Agent \u5F00\u542F\";\n return \"\u5168\u5B9E\u4F8B\u5F00\u542F\";\n}\n\nfunction capabilityStatus(definition: CapabilityDefinition, enabled: boolean): CapabilityStatus {\n if (!definition.implemented) return \"planned\";\n if (!enabled) return \"disabled\";\n if (definition.recommendedScopes.length > 0) return \"missing_permissions\";\n return \"enabled\";\n}\n\nfunction statusLabel(status: CapabilityStatus): string {\n if (status === \"enabled\") return \"\u5DF2\u5F00\u542F\uFF0C\u53EF\u7528\";\n if (status === \"missing_permissions\") return \"\u5DF2\u5F00\u542F\uFF0C\u6743\u9650\u968F\u98DE\u4E66\u5E94\u7528\";\n if (status === \"planned\") return \"\u5DE5\u5177\u5F85\u63A5\u5165\";\n return \"\u672A\u5F00\u542F\";\n}\n\nfunction defaultCapabilityEnabled(\n config: FeishuConnectorConfig,\n definition: CapabilityDefinition,\n): boolean {\n if (!definition.implemented) return false;\n if ((config.capabilityDefaultPolicy ?? \"authorized\") === \"authorized\") return true;\n return definition.defaultEnabled;\n}\n\nfunction uniqueSorted(values: string[]): string[] {\n return [...new Set(values)].sort((a, b) => a.localeCompare(b));\n}\n\nfunction buildRecommendedPermissionJson(capabilities: Array<{\n recommendedScopes: string[];\n}>) {\n const allScopes = uniqueSorted(capabilities.flatMap((capability) => capability.recommendedScopes));\n return {\n note: \"\u63A8\u8350\u6743\u9650\u6309\u80FD\u529B\u4E2D\u5FC3\u751F\u6210\u3002\u5DF2\u63A5\u5165\u7684\u53D7\u63A7\u98DE\u4E66\u5DE5\u5177\u9ED8\u8BA4\u6309\u98DE\u4E66\u5E94\u7528\u6388\u6743\u5F00\u653E\uFF1B\u7528\u6237\u5728\u80FD\u529B\u4E2D\u5FC3\u5173\u95ED\u4E0D\u60F3\u7ED9 Agent \u4F7F\u7528\u7684\u80FD\u529B\u3002lark-cli schema \u53EF\u7528\u65F6\u4F1A\u8865\u5145\u663E\u793A\u5F53\u524D CLI \u7684\u5B9E\u9645\u8986\u76D6\u60C5\u51B5\u3002\",\n scopes: {\n tenant: allScopes,\n user: uniqueSorted([\n \"contact:user.base:readonly\",\n \"docx:document:readonly\",\n \"drive:drive:readonly\",\n \"drive:file:readonly\",\n ].filter((scope) => allScopes.includes(scope) || scope === \"contact:user.base:readonly\")),\n },\n };\n}\n\nexport function buildFeishuCapabilityCenter(\n config: FeishuConnectorConfig,\n schemaDiscovery?: LarkCliSchemaDiscovery,\n) {\n const commandStatusByCapability = new Map<string, LarkCliSchemaDiscovery[\"commands\"]>();\n for (const command of schemaDiscovery?.commands ?? []) {\n const existing = commandStatusByCapability.get(command.capabilityKey) ?? [];\n existing.push(command);\n commandStatusByCapability.set(command.capabilityKey, existing);\n }\n\n const capabilities = FEISHU_CAPABILITY_DEFINITIONS.map((definition) => {\n const override = configuredCapability(config, definition.key);\n const enabled = typeof override?.enabled === \"boolean\"\n ? override.enabled && definition.implemented\n : defaultCapabilityEnabled(config, definition);\n const status = capabilityStatus(definition, enabled);\n const scope = override?.scope ?? \"instance\";\n return {\n key: definition.key,\n group: definition.group,\n title: definition.title,\n description: definition.description,\n enabled,\n implemented: definition.implemented,\n status,\n statusLabel: statusLabel(status),\n scope,\n scopeLabel: scopeLabel(scope),\n connectionId: override?.connectionId ?? null,\n routeId: override?.routeId ?? null,\n agentId: override?.agentId ?? null,\n toolName: definition.toolName ?? null,\n legacyToolName: definition.legacyToolName ?? null,\n larkCliCommands: definition.larkCliCommands,\n schemaCommands: commandStatusByCapability.get(definition.key) ?? [],\n recommendedScopes: definition.recommendedScopes,\n relatedSkills: definition.relatedSkills,\n risk: definition.risk,\n };\n });\n const groups = [...new Set(capabilities.map((capability) => capability.group))]\n .map((group) => ({\n name: group,\n capabilities: capabilities.filter((capability) => capability.group === group),\n }));\n\n return {\n summary: \"\u80FD\u529B\u4E2D\u5FC3\u628A\u98DE\u4E66 API \u80FD\u529B\u6620\u5C04\u6210 Paperclip \u53D7\u63A7\u5DE5\u5177\uFF1BAgent \u53EA\u80FD\u8C03\u7528\u63D2\u4EF6\u6CE8\u518C\u7684\u5DE5\u5177\uFF0C\u4E0D\u80FD\u88F8\u8DD1 lark-cli\u3002\",\n defaultPolicy: {\n mode: config.capabilityDefaultPolicy ?? \"authorized\",\n text: (config.capabilityDefaultPolicy ?? \"authorized\") === \"authorized\"\n ? \"\u9ED8\u8BA4\u6309\u98DE\u4E66\u5E94\u7528\u6388\u6743\u5F00\u653E\u5DF2\u63A5\u5165\u7684\u53D7\u63A7\u5DE5\u5177\uFF1B\u7528\u6237\u5728\u80FD\u529B\u4E2D\u5FC3\u5173\u95ED\u4E0D\u60F3\u7ED9 Agent \u4F7F\u7528\u7684\u80FD\u529B\u3002\"\n : \"\u4FDD\u5B88\u6A21\u5F0F\uFF1A\u53EA\u9ED8\u8BA4\u5F00\u542F\u6838\u5FC3\u5165\u53E3\u80FD\u529B\uFF0C\u5176\u4F59\u80FD\u529B\u9700\u8981\u7528\u6237\u624B\u52A8\u5F00\u542F\u3002\",\n },\n syncPolicy: {\n cliAutoBundled: true,\n larkSkillsAutoSynced: false,\n paperclipSkillsAutoSynced: false,\n text: \"\u66F4\u65B0 lark-cli \u4E0D\u4F1A\u81EA\u52A8\u540C\u6B65 lark-* skills \u5230 Paperclip skill\u3002lark-* skills \u662F\u672C\u5730 Agent \u7684\u4F7F\u7528\u8BF4\u660E\uFF0CPaperclip skill/\u5DE5\u5177\u9700\u8981\u7531\u63D2\u4EF6\u663E\u5F0F\u6CE8\u518C\u6216\u5355\u72EC\u540C\u6B65\u3002\",\n },\n relationship: {\n larkCli: \"runtime_api_client\",\n larkSkills: \"local_agent_instructions\",\n paperclipTools: \"controlled_plugin_tools\",\n },\n schemaDiscovery: schemaDiscovery ?? {\n checked: false,\n reason: \"\u672A\u6267\u884C lark-cli schema \u626B\u63CF\u3002\u6D4B\u8BD5\u6A21\u5F0F\u4E0B\u4E0D\u4F1A\u81EA\u52A8\u63A2\u6D4B\u672C\u673A CLI\uFF0C\u907F\u514D\u5355\u5143\u6D4B\u8BD5\u6216\u79BB\u7EBF\u73AF\u5883\u8BEF\u8C03\u7528\u5916\u90E8\u547D\u4EE4\u3002\",\n services: [],\n commands: [],\n errors: [],\n summary: \"\u672A\u626B\u63CF lark-cli schema\u3002\",\n },\n recommendedPermissionJson: buildRecommendedPermissionJson(capabilities),\n permissionStrategy: \"\u9ED8\u8BA4\u7B56\u7565\u662F\u6388\u6743\u5373\u5F00\u653E\uFF1A\u63D2\u4EF6\u4E0D\u5728\u6BCF\u6B21\u8C03\u7528\u524D\u4E8C\u6B21\u786E\u8BA4\uFF0C\u5B9E\u9645\u80FD\u5426\u6267\u884C\u7531\u98DE\u4E66\u5E94\u7528/\u7528\u6237\u5DF2\u6388\u6743 scopes \u51B3\u5B9A\uFF1B\u8FD9\u91CC\u7684 scopes \u662F\u63A8\u8350\u5BFC\u5165\u6E05\u5355\uFF0C\u7528\u6237\u53EF\u5728\u80FD\u529B\u4E2D\u5FC3\u5173\u95ED\u4E0D\u60F3\u7ED9 Agent \u4F7F\u7528\u7684\u80FD\u529B\u3002\",\n capabilities,\n groups,\n };\n}\n", "import type {\n FeishuBaseSinkConfig,\n FeishuConnectorConfig,\n FeishuInboundAttachment,\n FeishuInboundMessage,\n FeishuMention,\n FeishuRouteConfig,\n} from \"./types.js\";\n\nfunction asRecord(value: unknown): Record<string, unknown> | null {\n return typeof value === \"object\" && value !== null && !Array.isArray(value)\n ? value as Record<string, unknown>\n : null;\n}\n\nfunction readString(...values: unknown[]): string | undefined {\n for (const value of values) {\n if (typeof value === \"string\" && value.trim().length > 0) return value.trim();\n }\n return undefined;\n}\n\nfunction parseJsonRecord(value: unknown): Record<string, unknown> | null {\n if (typeof value !== \"string\") return asRecord(value);\n try {\n return asRecord(JSON.parse(value));\n } catch {\n return null;\n }\n}\n\nfunction collectAttachments(value: unknown, out: FeishuInboundAttachment[] = []): FeishuInboundAttachment[] {\n if (Array.isArray(value)) {\n for (const item of value) collectAttachments(item, out);\n return out;\n }\n\n const record = asRecord(value);\n if (!record) return out;\n\n const imageKey = readString(record.image_key, record.imageKey);\n if (imageKey) {\n out.push({\n resourceKey: imageKey,\n resourceType: \"image\",\n filename: readString(record.file_name, record.fileName, record.name, record.title),\n });\n }\n\n const fileKey = readString(record.file_key, record.fileKey);\n if (fileKey) {\n out.push({\n resourceKey: fileKey,\n resourceType: \"file\",\n filename: readString(record.file_name, record.fileName, record.name, record.title),\n });\n }\n\n const audioKey = readString(record.audio_key, record.audioKey);\n if (audioKey) {\n out.push({\n resourceKey: audioKey,\n resourceType: \"audio\",\n filename: readString(record.file_name, record.fileName, record.name, record.title),\n });\n }\n\n const videoKey = readString(record.video_key, record.videoKey);\n if (videoKey) {\n out.push({\n resourceKey: videoKey,\n resourceType: \"video\",\n filename: readString(record.file_name, record.fileName, record.name, record.title),\n });\n }\n\n for (const child of Object.values(record)) collectAttachments(child, out);\n return out;\n}\n\nfunction parsePlaceholderAttachments(text: string): FeishuInboundAttachment[] {\n const attachments: FeishuInboundAttachment[] = [];\n const patterns: Array<[RegExp, FeishuInboundAttachment[\"resourceType\"]]> = [\n [/\\[Image:\\s*([^\\]\\s]+)\\]/gi, \"image\"],\n [/\\[File:\\s*([^\\]\\s]+)\\]/gi, \"file\"],\n [/\\[Audio:\\s*([^\\]\\s]+)\\]/gi, \"audio\"],\n [/\\[Video:\\s*([^\\]\\s]+)\\]/gi, \"video\"],\n [/<(image|file|audio|video)\\s+key=[\"']?([^\"'\\s>]+)[\"']?[^>]*>/gi, \"file\"],\n ];\n for (const [pattern, fallbackType] of patterns) {\n for (const match of text.matchAll(pattern)) {\n const xmlType = match[1]?.toLowerCase();\n const key = match[2] ?? match[1];\n if (!key) continue;\n const resourceType = xmlType === \"image\" || xmlType === \"file\" || xmlType === \"audio\" || xmlType === \"video\"\n ? xmlType\n : fallbackType;\n attachments.push({ resourceKey: key, resourceType });\n }\n }\n return attachments;\n}\n\nfunction dedupeAttachments(attachments: FeishuInboundAttachment[]): FeishuInboundAttachment[] {\n const seen = new Set<string>();\n const out: FeishuInboundAttachment[] = [];\n for (const attachment of attachments) {\n const key = `${attachment.resourceType}:${attachment.resourceKey}`;\n if (seen.has(key)) continue;\n seen.add(key);\n out.push(attachment);\n }\n return out;\n}\n\nfunction parseMention(value: unknown): FeishuMention | null {\n const record = asRecord(value);\n if (!record) return null;\n const id = asRecord(record.id) ?? asRecord(record.user_id) ?? asRecord(record.userId) ?? {};\n const mention: FeishuMention = {\n name: readString(record.name, record.display_name, record.displayName, record.text),\n openId: readString(record.open_id, record.openId, id.open_id, id.openId),\n userId: readString(record.user_id, record.userId, id.user_id, id.userId),\n appId: readString(record.app_id, record.appId, id.app_id, id.appId),\n key: readString(record.key),\n };\n return mention.name || mention.openId || mention.userId || mention.appId || mention.key ? mention : null;\n}\n\nfunction collectMentions(value: unknown, out: FeishuMention[] = []): FeishuMention[] {\n if (Array.isArray(value)) {\n for (const item of value) collectMentions(item, out);\n return out;\n }\n const mention = parseMention(value);\n if (mention) out.push(mention);\n return out;\n}\n\nfunction dedupeMentions(mentions: FeishuMention[]): FeishuMention[] {\n const seen = new Set<string>();\n const out: FeishuMention[] = [];\n for (const mention of mentions) {\n const key = [\n mention.name,\n mention.openId,\n mention.userId,\n mention.appId,\n mention.key,\n ].filter(Boolean).join(\":\");\n if (!key || seen.has(key)) continue;\n seen.add(key);\n out.push(mention);\n }\n return out;\n}\n\nfunction extractTextFromContent(content: unknown): string | undefined {\n if (typeof content !== \"string\") return readString(content);\n const parsed = parseJsonRecord(content);\n if (!parsed) return content;\n const text = readString(parsed.text, parsed.content, parsed.title);\n if (text) return text;\n return undefined;\n}\n\nfunction attachmentSummary(attachments: FeishuInboundAttachment[]): string {\n if (attachments.length === 0) return \"\";\n return attachments.map((attachment) => {\n const label = attachment.resourceType === \"image\"\n ? \"\u56FE\u7247\"\n : attachment.resourceType === \"audio\"\n ? \"\u97F3\u9891\"\n : attachment.resourceType === \"video\"\n ? \"\u89C6\u9891\"\n : \"\u6587\u4EF6\";\n return `[${label}\uFF1A${attachment.filename ?? attachment.resourceKey}]`;\n }).join(\" \");\n}\n\nexport function extractInboundMessage(raw: unknown, fallbackConnectionId?: string): FeishuInboundMessage {\n const root = asRecord(raw) ?? {};\n const event = asRecord(root.event) ?? root;\n const header = asRecord(root.header) ?? {};\n const message = asRecord(event.message) ?? asRecord(root.message) ?? root;\n const sender = asRecord(event.sender) ?? asRecord(root.sender) ?? {};\n const senderId = asRecord(sender.sender_id) ?? asRecord(sender.senderId) ?? sender;\n\n const eventId = readString(root.event_id, root.eventId, header.event_id, header.eventId);\n const messageId = readString(root.message_id, root.messageId, message.message_id, message.messageId);\n if (!messageId) {\n throw new Error(\"\u98DE\u4E66\u6D88\u606F\u4E8B\u4EF6\u7F3A\u5C11 message_id\uFF0C\u65E0\u6CD5\u8BC6\u522B\u662F\u54EA\u6761\u6D88\u606F\u3002\");\n }\n\n const rawText = readString(\n root.text,\n root.message_text,\n root.messageText,\n message.text,\n extractTextFromContent(message.content),\n ) ?? \"\";\n const contentRecord = parseJsonRecord(message.content);\n const attachments = dedupeAttachments([\n ...collectAttachments(contentRecord ?? message.content),\n ...parsePlaceholderAttachments(rawText),\n ]);\n const mentions = dedupeMentions([\n ...collectMentions(root.mentions),\n ...collectMentions(event.mentions),\n ...collectMentions(message.mentions),\n ...collectMentions(contentRecord?.mentions),\n ]);\n const text = rawText || attachmentSummary(attachments);\n\n return {\n connectionId: readString(root.connectionId, fallbackConnectionId),\n eventId,\n messageId,\n messageType: readString(root.message_type, root.messageType, message.message_type, message.messageType),\n chatId: readString(root.chat_id, root.chatId, message.chat_id, message.chatId),\n chatName: readString(root.chat_name, root.chatName, event.chat_name, event.chatName, message.chat_name, message.chatName),\n threadId: readString(root.thread_id, root.threadId, message.thread_id, message.threadId),\n rootMessageId: readString(root.root_id, root.rootId, message.root_id, message.rootId),\n senderOpenId: readString(root.sender_open_id, root.senderOpenId, senderId.open_id, senderId.openId),\n senderUserId: readString(root.sender_user_id, root.senderUserId, senderId.user_id, senderId.userId),\n senderName: readString(root.sender_name, root.senderName, sender.name, sender.sender_name),\n senderType: readString(root.sender_type, root.senderType, sender.sender_type, sender.senderType, sender.type),\n senderAppId: readString(root.sender_app_id, root.senderAppId, senderId.app_id, senderId.appId, sender.app_id, sender.appId),\n text,\n mentions,\n attachments,\n raw,\n };\n}\n\nexport function buildSessionKey(message: FeishuInboundMessage, connectionId: string): string {\n const chat = message.chatId ?? \"direct\";\n const root = message.threadId ?? message.rootMessageId ?? message.messageId;\n return `feishu:${connectionId}:${chat}:root:${root}`;\n}\n\nfunction routeMatches(route: FeishuRouteConfig, message: FeishuInboundMessage, connectionId: string): boolean {\n if (route.enabled === false) return false;\n if (route.connectionId && route.connectionId !== connectionId) return false;\n if (route.matchType === \"chat\") return !!route.chatId && route.chatId === message.chatId;\n if (route.matchType === \"user\") return !!route.userOpenId && route.userOpenId === message.senderOpenId;\n if (route.matchType === \"keyword\") {\n const keyword = route.keyword?.trim();\n return !!keyword && message.text.toLocaleLowerCase().includes(keyword.toLocaleLowerCase());\n }\n if (route.matchType === \"regex\") {\n if (!route.regex) return false;\n try {\n return new RegExp(route.regex, \"i\").test(message.text);\n } catch {\n return false;\n }\n }\n return route.matchType === \"default\";\n}\n\nexport function resolveRoute(\n config: FeishuConnectorConfig,\n message: FeishuInboundMessage,\n connectionId: string,\n): FeishuRouteConfig | null {\n return resolveMatchingRoutes(config, message, connectionId)[0] ?? null;\n}\n\nexport function resolveMatchingRoutes(\n config: FeishuConnectorConfig,\n message: FeishuInboundMessage,\n connectionId: string,\n): FeishuRouteConfig[] {\n const routes = [...(config.routes ?? [])].sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0));\n return routes.filter((route) => routeMatches(route, message, connectionId));\n}\n\nexport function createIssueTitle(message: FeishuInboundMessage): string {\n const text = message.text.replace(/\\s+/g, \" \").trim();\n if (!text) return \"\u98DE\u4E66\u9700\u6C42\";\n return text.length > 80 ? `${text.slice(0, 77)}...` : text;\n}\n\nexport function describeRouteTrigger(route: FeishuRouteConfig): string {\n if (route.matchType === \"chat\") {\n return route.chatName ? `\u6307\u5B9A\u98DE\u4E66\u4F1A\u8BDD\u300C${route.chatName}\u300D` : \"\u6307\u5B9A\u98DE\u4E66\u4F1A\u8BDD\";\n }\n if (route.matchType === \"user\") {\n return route.userName ? `\u6307\u5B9A\u63D0\u51FA\u4EBA\u300C${route.userName}\u300D` : \"\u6307\u5B9A\u63D0\u51FA\u4EBA\";\n }\n if (route.matchType === \"keyword\") {\n return route.keyword ? `\u5305\u542B\u300C${route.keyword}\u300D\u7684\u98DE\u4E66\u6D88\u606F` : \"\u5305\u542B\u5173\u952E\u8BCD\u7684\u98DE\u4E66\u6D88\u606F\";\n }\n if (route.matchType === \"regex\") {\n return \"\u5339\u914D\u9AD8\u7EA7\u89C4\u5219\u7684\u98DE\u4E66\u6D88\u606F\";\n }\n return \"\u9ED8\u8BA4\u5165\u53E3\";\n}\n\nexport function isLikelyInternalRouteName(value?: string | null): boolean {\n const normalized = (value ?? \"\").trim().toLocaleLowerCase();\n if (!normalized) return false;\n if (/[\\u4e00-\\u9fff\\s]/.test(normalized)) return false;\n if (/^(chat|team|keyword|regex|default|route|entry|inbound)[_-]/.test(normalized)) return true;\n if (/[_-](to|agent|bot|team|chat|keyword|regex|route|entry|inbound)([_-]|$)/.test(normalized)) return true;\n return /^[a-z0-9]+([_-][a-z0-9]+){2,}$/.test(normalized);\n}\n\nexport function describeRouteEntry(route: FeishuRouteConfig): string {\n const explicitName = route.name?.trim();\n if (explicitName && !isLikelyInternalRouteName(explicitName)) return explicitName;\n const trigger = describeRouteTrigger(route);\n const agentName = route.targetAgentName?.trim();\n return agentName ? `${trigger} \u2192 ${agentName}` : trigger;\n}\n\nexport function describeRouteForHumans(route: FeishuRouteConfig): string {\n return describeRouteEntry(route);\n}\n\nexport function describeFeishuConversation(\n message: FeishuInboundMessage,\n route?: FeishuRouteConfig,\n): string {\n const name = message.chatName ?? route?.chatName ?? route?.userName;\n if (name && message.chatId) return `${name}\uFF08${message.chatId}\uFF09`;\n if (name) return name;\n if (message.chatId) return message.chatId;\n if (message.senderName) return `\u6765\u81EA ${message.senderName} \u7684\u5355\u804A`;\n return \"\u672A\u77E5\u98DE\u4E66\u4F1A\u8BDD\";\n}\n\nfunction isLikelyFeishuInternalId(value?: string | null): boolean {\n const normalized = (value ?? \"\").trim();\n if (!normalized) return false;\n return /^(?:oc|ou|om|on|od|of|cli)_[a-z0-9][a-z0-9_-]{5,}$/i.test(normalized);\n}\n\nfunction feishuDisplayText(value?: string | null): string | null {\n const trimmed = (value ?? \"\").trim();\n if (!trimmed || isLikelyFeishuInternalId(trimmed)) return null;\n return trimmed;\n}\n\nexport function describeFeishuConversationForDisplay(\n message: FeishuInboundMessage,\n route?: FeishuRouteConfig,\n): string {\n return feishuDisplayText(message.chatName)\n ?? feishuDisplayText(route?.chatName)\n ?? feishuDisplayText(route?.userName)\n ?? (feishuDisplayText(message.senderName) ? `\u6765\u81EA ${feishuDisplayText(message.senderName)} \u7684\u5355\u804A` : null)\n ?? \"\u5DF2\u8BB0\u5F55\uFF0C\u540D\u79F0\u5F85\u540C\u6B65\";\n}\n\nexport function describeFeishuRequesterForDisplay(message: FeishuInboundMessage): string {\n return feishuDisplayText(message.senderName) ?? \"\u5DF2\u8BB0\u5F55\uFF0C\u540D\u79F0\u5F85\u540C\u6B65\";\n}\n\nfunction describeFeishuAttachmentForDisplay(attachment: FeishuInboundAttachment): string {\n const filename = feishuDisplayText(attachment.filename);\n return `${filename ?? \"\u672A\u547D\u540D\u98DE\u4E66\u9644\u4EF6\"}\uFF08${attachment.resourceType}\uFF09`;\n}\n\nexport function feishuContextLines(\n message: FeishuInboundMessage,\n route?: FeishuRouteConfig,\n): string[] {\n const lines = [\n \"\u6765\u6E90\uFF1A\u98DE\u4E66\",\n route ? `\u63A5\u6536\u5165\u53E3\uFF1A${describeRouteEntry(route)}` : undefined,\n `\u98DE\u4E66\u4F1A\u8BDD\uFF1A${describeFeishuConversationForDisplay(message, route)}`,\n `\u63D0\u51FA\u4EBA\uFF1A${describeFeishuRequesterForDisplay(message)}`,\n \"\u539F\u6D88\u606F\uFF1A\u5DF2\u8BB0\u5F55\uFF0C\u53EF\u56DE\u539F\u7EBF\u7A0B\",\n ];\n if (message.rootMessageId && message.rootMessageId !== message.messageId) {\n lines.push(\"\u98DE\u4E66\u8BDD\u9898\uFF1A\u5DF2\u8BB0\u5F55\");\n }\n if (\n message.threadId &&\n message.threadId !== message.messageId &&\n message.threadId !== message.rootMessageId\n ) {\n lines.push(\"\u98DE\u4E66\u7EBF\u7A0B\uFF1A\u5DF2\u8BB0\u5F55\");\n }\n return lines.filter((line): line is string => typeof line === \"string\" && line.length > 0);\n}\n\nexport function createIssueDescription(message: FeishuInboundMessage, route: FeishuRouteConfig): string {\n const lines = [\n message.text.trim() || \"\uFF08\u7A7A\u98DE\u4E66\u6D88\u606F\uFF09\",\n \"\",\n \"---\",\n ...feishuContextLines(message, route),\n ];\n if (message.attachments.length > 0) {\n lines.push(\"\");\n lines.push(\"\u9644\u4EF6\uFF1A\");\n for (const attachment of message.attachments) {\n lines.push(`- ${describeFeishuAttachmentForDisplay(attachment)}`);\n }\n }\n return lines.join(\"\\n\");\n}\n\nexport function createCommentBody(message: FeishuInboundMessage, route?: FeishuRouteConfig): string {\n const lines = [\n `\u98DE\u4E66\u540E\u7EED\u6D88\u606F\uFF0C\u6765\u81EA ${describeFeishuRequesterForDisplay(message)}\uFF1A`,\n \"\",\n message.text.trim() || \"\uFF08\u7A7A\u98DE\u4E66\u6D88\u606F\uFF09\",\n \"\",\n ...feishuContextLines(message, route),\n ];\n if (message.attachments.length > 0) {\n lines.push(\"\", \"\u9644\u4EF6\uFF1A\");\n for (const attachment of message.attachments) {\n lines.push(`- ${describeFeishuAttachmentForDisplay(attachment)}`);\n }\n }\n return lines.join(\"\\n\");\n}\n\nexport interface TemplateContext {\n message: FeishuInboundMessage;\n route?: FeishuRouteConfig;\n issueId?: string;\n issueRef?: string;\n issueUrl?: string;\n issueTitle?: string;\n agentName?: string;\n runId?: string;\n runStatus?: string;\n estimatedDuration?: string;\n}\n\nexport function renderTemplate(template: string, context: TemplateContext): string {\n const values: Record<string, string> = {\n \"message.text\": context.message.text,\n \"message.id\": context.message.messageId,\n \"message.chat_id\": context.message.chatId ?? \"\",\n \"message.chat_name\": context.message.chatName ?? \"\",\n \"sender.open_id\": context.message.senderOpenId ?? \"\",\n \"sender.name\": context.message.senderName ?? context.message.senderOpenId ?? \"\",\n \"route.id\": context.route?.id ?? \"\",\n \"route.entry\": context.route ? describeRouteEntry(context.route) : \"\",\n \"route.trigger\": context.route ? describeRouteTrigger(context.route) : \"\",\n \"issue_id\": context.issueId ?? \"\",\n \"issue_ref\": context.issueRef ?? context.issueId ?? \"\",\n \"issue_url\": context.issueUrl ?? \"\",\n \"issue_title\": context.issueTitle ?? \"\",\n \"agent_name\": context.agentName ?? context.route?.targetAgentName ?? \"agent\",\n \"run_id\": context.runId ?? \"\",\n \"run_status\": context.runStatus ?? \"\",\n \"eta\": context.estimatedDuration ?? \"\",\n \"estimated_duration\": context.estimatedDuration ?? \"\",\n };\n return template.replace(/\\{\\{\\s*([^}]+?)\\s*\\}\\}/g, (_match, key: string) => values[key.trim()] ?? \"\");\n}\n\nexport function buildBaseRecord(\n sink: FeishuBaseSinkConfig,\n context: TemplateContext,\n): Record<string, string> {\n const defaultMap: Record<string, string> = {\n \"\u9700\u6C42\u6807\u9898\": \"{{issue_title}}\",\n \"\u539F\u59CB\u9700\u6C42\": \"{{message.text}}\",\n \"\u63D0\u51FA\u4EBA\": \"{{sender.name}}\",\n \"\u63D0\u51FA\u4EBA open_id\": \"{{sender.open_id}}\",\n \"\u98DE\u4E66\u4F1A\u8BDD\": \"{{message.chat_name}}\",\n \"\u63A5\u6536\u5165\u53E3\": \"{{route.entry}}\",\n \"\u98DE\u4E66 chat_id\": \"{{message.chat_id}}\",\n \"\u98DE\u4E66 message_id\": \"{{message.id}}\",\n \"Paperclip issue_id\": \"{{issue_id}}\",\n \"\u7ED1\u5B9A agent\": \"{{agent_name}}\",\n \"\u72B6\u6001\": \"\u5F85\u5904\u7406\",\n \"\u6765\u6E90\": \"\u98DE\u4E66\",\n };\n const fieldMap = sink.fieldMap && Object.keys(sink.fieldMap).length > 0 ? sink.fieldMap : defaultMap;\n return Object.fromEntries(\n Object.entries(fieldMap).map(([field, template]) => [field, renderTemplate(template, context)]),\n );\n}\n", "import { execFileSync, spawn, type ChildProcess } from \"node:child_process\";\nimport { existsSync } from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport type { FeishuIdentity, LarkCliResult } from \"./types.js\";\n\nconst DEFAULT_LARK_CLI_BIN = \"lark-cli\";\nconst LARK_CLI_ENV_BIN = \"PAPERCLIP_FEISHU_LARK_CLI_BIN\";\n\nfunction defaultModuleDir(): string {\n return path.dirname(fileURLToPath(import.meta.url));\n}\n\nfunction findBundledLarkCliBin(startDir: string): string | null {\n let current = path.resolve(startDir);\n let previous = \"\";\n while (current !== previous) {\n const candidate = path.join(current, \"node_modules\", \"@larksuite\", \"cli\", \"scripts\", \"run.js\");\n if (existsSync(candidate)) return candidate;\n previous = current;\n current = path.dirname(current);\n }\n return null;\n}\n\nexport function resolveLarkCliBin(input: {\n configuredBin?: string | null;\n env?: Record<string, string | undefined>;\n moduleDir?: string;\n} = {}): string {\n const configured = input.configuredBin?.trim();\n if (configured && configured !== DEFAULT_LARK_CLI_BIN) return configured;\n\n const envBin = input.env?.[LARK_CLI_ENV_BIN]?.trim() ?? process.env[LARK_CLI_ENV_BIN]?.trim();\n if (envBin) return envBin;\n\n const bundled = findBundledLarkCliBin(input.moduleDir ?? defaultModuleDir());\n if (bundled) return bundled;\n\n return configured || DEFAULT_LARK_CLI_BIN;\n}\n\nfunction profileArgs(profileName?: string): string[] {\n return profileName ? [\"--profile\", profileName] : [];\n}\n\nfunction pushOptional(args: string[], flag: string, value?: string) {\n if (value && value.trim().length > 0) {\n args.push(flag, value);\n }\n}\n\nfunction larkCliEnv(): NodeJS.ProcessEnv {\n return {\n ...process.env,\n HOME: process.env.HOME ?? os.homedir(),\n USER: process.env.USER ?? os.userInfo().username,\n LOGNAME: process.env.LOGNAME ?? os.userInfo().username,\n };\n}\n\nfunction resolveLarkCliSpawn(bin: string, args: string[]): { command: string; args: string[] } {\n if (process.platform === \"win32\" && /\\.(?:cjs|js|mjs)$/i.test(bin)) {\n return { command: process.execPath, args: [bin, ...args] };\n }\n return { command: bin, args };\n}\n\nexport function buildSendMessageArgs(input: {\n profileName?: string;\n identity?: FeishuIdentity;\n chatId?: string;\n userId?: string;\n text?: string;\n markdown?: string;\n content?: string;\n msgType?: string;\n idempotencyKey?: string;\n}): string[] {\n const args = [...profileArgs(input.profileName), \"im\", \"+messages-send\", \"--as\", input.identity ?? \"bot\"];\n pushOptional(args, \"--chat-id\", input.chatId);\n pushOptional(args, \"--user-id\", input.userId);\n pushOptional(args, \"--text\", input.text);\n pushOptional(args, \"--markdown\", input.markdown);\n pushOptional(args, \"--content\", input.content);\n pushOptional(args, \"--msg-type\", input.msgType);\n pushOptional(args, \"--idempotency-key\", input.idempotencyKey);\n return args;\n}\n\nexport function buildReplyMessageArgs(input: {\n profileName?: string;\n identity?: FeishuIdentity;\n messageId: string;\n text?: string;\n markdown?: string;\n content?: string;\n msgType?: string;\n replyInThread?: boolean;\n idempotencyKey?: string;\n}): string[] {\n const args = [\n ...profileArgs(input.profileName),\n \"im\",\n \"+messages-reply\",\n \"--as\",\n input.identity ?? \"bot\",\n \"--message-id\",\n input.messageId,\n ];\n if (input.replyInThread) args.push(\"--reply-in-thread\");\n pushOptional(args, \"--text\", input.text);\n pushOptional(args, \"--markdown\", input.markdown);\n pushOptional(args, \"--content\", input.content);\n pushOptional(args, \"--msg-type\", input.msgType);\n pushOptional(args, \"--idempotency-key\", input.idempotencyKey);\n return args;\n}\n\nexport function buildRecordUpsertArgs(input: {\n profileName?: string;\n identity?: FeishuIdentity;\n baseToken: string;\n tableIdOrName: string;\n recordJson: Record<string, unknown>;\n recordId?: string;\n}): string[] {\n const args = [\n ...profileArgs(input.profileName),\n \"base\",\n \"+record-upsert\",\n \"--as\",\n input.identity ?? \"bot\",\n \"--base-token\",\n input.baseToken,\n \"--table-id\",\n input.tableIdOrName,\n \"--json\",\n JSON.stringify(input.recordJson),\n ];\n pushOptional(args, \"--record-id\", input.recordId);\n return args;\n}\n\nexport function buildEventSubscribeArgs(input: {\n profileName?: string;\n eventTypes?: string;\n compact?: boolean;\n quiet?: boolean;\n}): string[] {\n const args = [\n ...profileArgs(input.profileName),\n \"event\",\n \"+subscribe\",\n \"--as\",\n \"bot\",\n ];\n if (input.compact !== false) args.push(\"--compact\");\n if (input.quiet !== false) args.push(\"--quiet\");\n pushOptional(args, \"--event-types\", input.eventTypes);\n return args;\n}\n\nexport function buildResourceDownloadArgs(input: {\n profileName?: string;\n identity?: FeishuIdentity;\n messageId: string;\n fileKey: string;\n type: \"image\" | \"file\" | \"audio\" | \"video\";\n output: string;\n}): string[] {\n return [\n ...profileArgs(input.profileName),\n \"im\",\n \"+messages-resources-download\",\n \"--as\",\n input.identity ?? \"bot\",\n \"--message-id\",\n input.messageId,\n \"--file-key\",\n input.fileKey,\n \"--type\",\n input.type,\n \"--output\",\n input.output,\n ];\n}\n\nexport function buildFetchDocArgs(input: {\n profileName?: string;\n identity?: FeishuIdentity;\n doc: string;\n format?: \"pretty\" | \"json\" | \"markdown\";\n}): string[] {\n const args = [\n ...profileArgs(input.profileName),\n \"docs\",\n \"+fetch\",\n \"--as\",\n input.identity ?? \"user\",\n \"--doc\",\n input.doc,\n ];\n pushOptional(args, \"--format\", input.format);\n return args;\n}\n\nexport function buildAuthStatusArgs(input: {\n profileName?: string;\n verify?: boolean;\n} = {}): string[] {\n const args = [\n ...profileArgs(input.profileName),\n \"auth\",\n \"status\",\n ];\n if (input.verify !== false) args.push(\"--verify\");\n return args;\n}\n\nexport function buildProfileAddArgs(input: {\n name: string;\n appId: string;\n brand?: \"feishu\" | \"lark\";\n use?: boolean;\n}): string[] {\n const args = [\n \"profile\",\n \"add\",\n \"--name\",\n input.name,\n \"--app-id\",\n input.appId,\n \"--brand\",\n input.brand ?? \"feishu\",\n \"--app-secret-stdin\",\n ];\n if (input.use) args.push(\"--use\");\n return args;\n}\n\nexport function buildConfigInitNewArgs(input: {\n name: string;\n brand?: \"feishu\" | \"lark\";\n lang?: \"zh\" | \"en\";\n}): string[] {\n return [\n \"config\",\n \"init\",\n \"--new\",\n \"--name\",\n input.name,\n \"--brand\",\n input.brand ?? \"feishu\",\n \"--lang\",\n input.lang ?? \"zh\",\n ];\n}\n\nexport function buildMessageGetArgs(input: {\n profileName?: string;\n identity?: FeishuIdentity;\n messageId: string;\n}): string[] {\n return [\n ...profileArgs(input.profileName),\n \"im\",\n \"+messages-mget\",\n \"--as\",\n input.identity ?? \"bot\",\n \"--message-ids\",\n input.messageId,\n ];\n}\n\nexport async function runLarkCli(input: {\n bin: string;\n args: string[];\n dryRun?: boolean;\n timeoutMs?: number;\n cwd?: string;\n stdin?: string;\n}): Promise<LarkCliResult> {\n if (input.dryRun) {\n return {\n ok: true,\n dryRun: true,\n command: input.bin,\n args: input.args,\n stdout: \"\",\n stderr: \"\",\n code: 0,\n };\n }\n\n return await new Promise<LarkCliResult>((resolve) => {\n const launch = resolveLarkCliSpawn(input.bin, input.args);\n const child = spawn(launch.command, launch.args, {\n stdio: input.stdin ? [\"pipe\", \"pipe\", \"pipe\"] : [\"ignore\", \"pipe\", \"pipe\"],\n env: larkCliEnv(),\n cwd: input.cwd,\n });\n let stdout = \"\";\n let stderr = \"\";\n let settled = false;\n const timeout = setTimeout(() => {\n if (settled) return;\n child.kill(\"SIGTERM\");\n }, input.timeoutMs ?? 30_000);\n\n child.stdout?.on(\"data\", (chunk) => {\n stdout += String(chunk);\n });\n child.stderr?.on(\"data\", (chunk) => {\n stderr += String(chunk);\n });\n if (input.stdin && child.stdin) {\n child.stdin.end(input.stdin);\n }\n child.on(\"error\", (error) => {\n if (settled) return;\n settled = true;\n clearTimeout(timeout);\n resolve({\n ok: false,\n command: input.bin,\n args: input.args,\n stdout,\n stderr: stderr || error.message,\n code: null,\n });\n });\n child.on(\"close\", (code) => {\n if (settled) return;\n settled = true;\n clearTimeout(timeout);\n resolve({\n ok: code === 0,\n command: input.bin,\n args: input.args,\n stdout,\n stderr,\n code,\n });\n });\n });\n}\n\nexport interface LarkEventSubscriber {\n profileName?: string;\n child: ChildProcess;\n stop(): void;\n isRunning(): boolean;\n}\n\nexport interface LarkConfigInitSession {\n profileName: string;\n child: ChildProcess;\n args: string[];\n snapshot(): {\n ok: boolean;\n profileName: string;\n command: string;\n args: string[];\n pid: number | null;\n running: boolean;\n stdout: string;\n stderr: string;\n url?: string;\n userCode?: string;\n code: number | null;\n };\n waitForReady(): Promise<ReturnType<LarkConfigInitSession[\"snapshot\"]>>;\n stop(): void;\n isRunning(): boolean;\n}\n\nfunction stripAnsi(value: string): string {\n return value.replace(/\\u001b\\[[0-9;]*m/g, \"\");\n}\n\nfunction extractFirstUrl(value: string): string | undefined {\n const match = stripAnsi(value).match(/https?:\\/\\/[^\\s\"'<>\uFF09)]+/);\n return match?.[0];\n}\n\nfunction extractUserCode(value: string): string | undefined {\n const text = stripAnsi(value);\n const match = text.match(/(?:user\\s*code|device\\s*code|code|\u9A8C\u8BC1\u7801|\u6821\u9A8C\u7801|\u7528\u6237\u4EE3\u7801)[:\uFF1A\\s]+([A-Z0-9][A-Z0-9-]{3,})/i);\n return match?.[1];\n}\n\nfunction childProcessIds(parentPid: number): number[] {\n try {\n return execFileSync(\"pgrep\", [\"-P\", String(parentPid)], {\n encoding: \"utf8\",\n stdio: [\"ignore\", \"pipe\", \"ignore\"],\n })\n .split(/\\s+/)\n .map((value) => Number(value))\n .filter((value) => Number.isInteger(value) && value > 0);\n } catch {\n return [];\n }\n}\n\nfunction killProcessTree(pid: number, signal: NodeJS.Signals): void {\n for (const childPid of childProcessIds(pid)) {\n killProcessTree(childPid, signal);\n }\n try {\n process.kill(pid, signal);\n } catch {\n // The process may have already exited between pgrep and kill.\n }\n}\n\nexport function startLarkConfigInit(input: {\n bin: string;\n profileName: string;\n brand?: \"feishu\" | \"lark\";\n lang?: \"zh\" | \"en\";\n initialWaitMs?: number;\n}): LarkConfigInitSession {\n const args = buildConfigInitNewArgs({\n name: input.profileName,\n brand: input.brand,\n lang: input.lang,\n });\n const launch = resolveLarkCliSpawn(input.bin, args);\n const child = spawn(launch.command, launch.args, {\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n env: larkCliEnv(),\n detached: true,\n });\n\n let stdout = \"\";\n let stderr = \"\";\n let closeCode: number | null = null;\n let readyResolved = false;\n let resolveReady: (snapshot: ReturnType<LarkConfigInitSession[\"snapshot\"]>) => void = () => {};\n\n const session: LarkConfigInitSession = {\n profileName: input.profileName,\n child,\n args,\n snapshot() {\n const allOutput = `${stdout}\\n${stderr}`;\n return {\n ok: closeCode === null || closeCode === 0,\n profileName: input.profileName,\n command: input.bin,\n args,\n pid: child.pid ?? null,\n running: this.isRunning(),\n stdout: stripAnsi(stdout).trim(),\n stderr: stripAnsi(stderr).trim(),\n url: extractFirstUrl(allOutput),\n userCode: extractUserCode(allOutput),\n code: closeCode,\n };\n },\n waitForReady() {\n return readyPromise;\n },\n isRunning() {\n return child.exitCode === null && child.signalCode === null && !child.killed;\n },\n stop() {\n if (child.killed) return;\n const pid = child.pid;\n if (!pid) {\n child.kill(\"SIGTERM\");\n return;\n }\n try {\n process.kill(-pid, \"SIGTERM\");\n } catch {\n // Fall through to direct process-tree cleanup.\n }\n killProcessTree(pid, \"SIGTERM\");\n },\n };\n\n function resolveOnce() {\n if (readyResolved) return;\n readyResolved = true;\n clearTimeout(timer);\n resolveReady(session.snapshot());\n }\n\n const readyPromise = new Promise<ReturnType<LarkConfigInitSession[\"snapshot\"]>>((resolve) => {\n resolveReady = resolve;\n });\n const timer = setTimeout(resolveOnce, input.initialWaitMs ?? 4500);\n timer.unref();\n\n child.stdout?.on(\"data\", (chunk) => {\n stdout += String(chunk);\n if (extractFirstUrl(stdout)) resolveOnce();\n });\n child.stderr?.on(\"data\", (chunk) => {\n stderr += String(chunk);\n if (extractFirstUrl(stderr)) resolveOnce();\n });\n child.on(\"error\", (error) => {\n stderr += stderr ? `\\n${error.message}` : error.message;\n closeCode = 1;\n resolveOnce();\n });\n child.on(\"close\", (code) => {\n closeCode = code;\n resolveOnce();\n });\n\n return session;\n}\n\nexport function startLarkEventSubscriber(input: {\n bin: string;\n profileName?: string;\n eventTypes?: string;\n onEvent: (event: unknown) => void;\n onError: (error: Error) => void;\n onClose?: (code: number | null, signal: NodeJS.Signals | null) => void;\n}): LarkEventSubscriber {\n const args = buildEventSubscribeArgs({\n profileName: input.profileName,\n eventTypes: input.eventTypes,\n compact: true,\n quiet: true,\n });\n const launch = resolveLarkCliSpawn(input.bin, args);\n const child = spawn(launch.command, launch.args, {\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n env: larkCliEnv(),\n detached: true,\n });\n\n let buffer = \"\";\n child.stdout.on(\"data\", (chunk) => {\n buffer += String(chunk);\n let newline = buffer.indexOf(\"\\n\");\n while (newline !== -1) {\n const line = buffer.slice(0, newline).trim();\n buffer = buffer.slice(newline + 1);\n if (line.length > 0) {\n try {\n input.onEvent(JSON.parse(line));\n } catch (error) {\n input.onError(error instanceof Error ? error : new Error(String(error)));\n }\n }\n newline = buffer.indexOf(\"\\n\");\n }\n });\n child.stderr.on(\"data\", (chunk) => {\n const message = String(chunk).trim();\n if (message) input.onError(new Error(message));\n });\n child.on(\"error\", (error) => input.onError(error));\n child.on(\"close\", (code, signal) => {\n input.onClose?.(code, signal);\n });\n\n return {\n profileName: input.profileName,\n child,\n isRunning() {\n return child.exitCode === null && child.signalCode === null && !child.killed;\n },\n stop() {\n if (child.killed) return;\n const pid = child.pid;\n if (!pid) {\n child.kill(\"SIGTERM\");\n return;\n }\n try {\n process.kill(-pid, \"SIGTERM\");\n } catch {\n // Fall through to the direct process-tree cleanup below.\n }\n killProcessTree(pid, \"SIGTERM\");\n setTimeout(() => {\n if (child.exitCode === null && child.signalCode === null) {\n try {\n process.kill(-pid, \"SIGKILL\");\n } catch {\n // Ignore and try direct children below.\n }\n killProcessTree(pid, \"SIGKILL\");\n }\n }, 1500).unref();\n },\n };\n}\n", "import { getEnabledConnections } from \"./config.js\";\nimport type { FeishuConnectionConfig, FeishuConnectorConfig } from \"./types.js\";\n\nexport interface FeishuSubscriberPlan {\n key: string;\n primaryConnectionId: string;\n profileName: string;\n appId?: string;\n connectionIds: string[];\n connectionNames: string[];\n}\n\nexport function subscriberKeyForConnection(connection: FeishuConnectionConfig): string {\n const appId = connection.appId?.trim();\n return appId ? `app:${appId}` : `profile:${connection.profileName}`;\n}\n\nexport function routeListeningConnections(config: FeishuConnectorConfig): FeishuConnectionConfig[] {\n const connections = getEnabledConnections(config);\n const connectionById = new Map(connections.map((connection) => [connection.id, connection]));\n const defaultConnection = connections[0] ?? null;\n const connectionIds = new Set<string>();\n for (const route of (config.routes ?? []).filter((route) => route.enabled !== false)) {\n const connectionId = route.connectionId ?? defaultConnection?.id;\n if (connectionId && connectionById.has(connectionId)) connectionIds.add(connectionId);\n }\n return connections.filter((connection) => connectionIds.has(connection.id));\n}\n\nexport function planEventSubscribers(config: FeishuConnectorConfig): FeishuSubscriberPlan[] {\n const groups = new Map<string, FeishuSubscriberPlan>();\n for (const connection of routeListeningConnections(config)) {\n const key = subscriberKeyForConnection(connection);\n const existing = groups.get(key);\n if (existing) {\n existing.connectionIds.push(connection.id);\n existing.connectionNames.push(connection.name?.trim() || connection.id);\n continue;\n }\n groups.set(key, {\n key,\n primaryConnectionId: connection.id,\n profileName: connection.profileName,\n appId: connection.appId,\n connectionIds: [connection.id],\n connectionNames: [connection.name?.trim() || connection.id],\n });\n }\n return [...groups.values()];\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["util", "objectUtil", "path", "errorUtil", "path", "errorMap", "ctx", "result", "issues", "elements", "processed", "r", "_a", "_b", "ZodFirstPartyTypeKind", "executionWorkspaceStrategySchema", "path", "plugin", "options", "os", "path", "record", "path", "fileURLToPath", "route", "isLikelyFeishuInternalId", "asRecord", "readString", "parseJsonRecord", "record", "routeMatches", "path", "os", "connection", "route", "readString", "asRecord", "parseJsonRecord", "missingScopes"]
|
|
7
|
+
}
|