@agent-native/core 0.53.0 → 0.54.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/action.d.ts +40 -1
- package/dist/action.d.ts.map +1 -1
- package/dist/action.js +69 -2
- package/dist/action.js.map +1 -1
- package/dist/agent/index.d.ts +1 -0
- package/dist/agent/index.d.ts.map +1 -1
- package/dist/agent/index.js +1 -0
- package/dist/agent/index.js.map +1 -1
- package/dist/agent/observational-memory/index.d.ts +6 -6
- package/dist/agent/observational-memory/index.js +6 -6
- package/dist/agent/observational-memory/index.js.map +1 -1
- package/dist/agent/observational-memory/read.d.ts +7 -9
- package/dist/agent/observational-memory/read.d.ts.map +1 -1
- package/dist/agent/observational-memory/read.js +7 -9
- package/dist/agent/observational-memory/read.js.map +1 -1
- package/dist/agent/processors.d.ts +146 -0
- package/dist/agent/processors.d.ts.map +1 -0
- package/dist/agent/processors.js +122 -0
- package/dist/agent/processors.js.map +1 -0
- package/dist/agent/production-agent.d.ts +10 -0
- package/dist/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +101 -0
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/agent/run-loop-with-resume.d.ts.map +1 -1
- package/dist/agent/run-loop-with-resume.js +4 -5
- package/dist/agent/run-loop-with-resume.js.map +1 -1
- package/dist/agent/tool-call-journal.d.ts +6 -8
- package/dist/agent/tool-call-journal.d.ts.map +1 -1
- package/dist/agent/tool-call-journal.js +6 -8
- package/dist/agent/tool-call-journal.js.map +1 -1
- package/dist/agent/types.d.ts +11 -0
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/agent/types.js.map +1 -1
- package/dist/cli/plan-local.d.ts.map +1 -1
- package/dist/cli/plan-local.js +129 -4
- package/dist/cli/plan-local.js.map +1 -1
- package/dist/cli/skills.d.ts.map +1 -1
- package/dist/cli/skills.js +38 -3
- package/dist/cli/skills.js.map +1 -1
- package/dist/coding-tools/run-code.d.ts.map +1 -1
- package/dist/coding-tools/run-code.js +18 -2
- package/dist/coding-tools/run-code.js.map +1 -1
- package/dist/extensions/fetch-tool.d.ts.map +1 -1
- package/dist/extensions/fetch-tool.js +80 -15
- package/dist/extensions/fetch-tool.js.map +1 -1
- package/dist/extensions/web-content.d.ts +61 -0
- package/dist/extensions/web-content.d.ts.map +1 -0
- package/dist/extensions/web-content.js +468 -0
- package/dist/extensions/web-content.js.map +1 -0
- package/dist/extensions/web-search-tool.js +3 -3
- package/dist/extensions/web-search-tool.js.map +1 -1
- package/dist/mcp/build-server.d.ts.map +1 -1
- package/dist/mcp/build-server.js +4 -1
- package/dist/mcp/build-server.js.map +1 -1
- package/dist/provider-api/corpus-jobs.d.ts +80 -0
- package/dist/provider-api/corpus-jobs.d.ts.map +1 -1
- package/dist/provider-api/corpus-jobs.js +219 -22
- package/dist/provider-api/corpus-jobs.js.map +1 -1
- package/dist/provider-api/index.d.ts +24 -32
- package/dist/provider-api/index.d.ts.map +1 -1
- package/dist/provider-api/index.js +28 -1
- package/dist/provider-api/index.js.map +1 -1
- package/dist/server/agent-chat-plugin.js +1 -1
- package/dist/server/agent-chat-plugin.js.map +1 -1
- package/dist/server/better-auth-instance.d.ts +7 -0
- package/dist/server/better-auth-instance.d.ts.map +1 -1
- package/dist/server/better-auth-instance.js +90 -0
- package/dist/server/better-auth-instance.js.map +1 -1
- package/dist/server/deep-link.d.ts +7 -0
- package/dist/server/deep-link.d.ts.map +1 -1
- package/dist/server/deep-link.js +13 -2
- package/dist/server/deep-link.js.map +1 -1
- package/dist/server/index.d.ts +1 -1
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +1 -1
- package/dist/server/index.js.map +1 -1
- package/dist/templates/default/.agents/skills/actions/SKILL.md +52 -1
- package/dist/templates/default/.agents/skills/security/SKILL.md +22 -0
- package/dist/templates/workspace-core/.agents/skills/actions/SKILL.md +52 -1
- package/dist/templates/workspace-core/.agents/skills/external-agents/SKILL.md +6 -4
- package/dist/templates/workspace-core/.agents/skills/observability/SKILL.md +11 -0
- package/dist/templates/workspace-core/.agents/skills/security/SKILL.md +22 -0
- package/docs/content/actions.md +50 -0
- package/docs/content/durable-resume.md +49 -0
- package/docs/content/external-agents.md +2 -2
- package/docs/content/human-approval.md +101 -0
- package/docs/content/observability.md +21 -0
- package/docs/content/observational-memory.md +63 -0
- package/docs/content/plan-plugin.md +5 -0
- package/docs/content/pr-visual-recap.md +4 -3
- package/docs/content/processors.md +99 -0
- package/docs/content/template-plan.md +78 -14
- package/package.json +6 -1
- package/src/templates/default/.agents/skills/actions/SKILL.md +52 -1
- package/src/templates/default/.agents/skills/security/SKILL.md +22 -0
- package/src/templates/workspace-core/.agents/skills/actions/SKILL.md +52 -1
- package/src/templates/workspace-core/.agents/skills/external-agents/SKILL.md +6 -4
- package/src/templates/workspace-core/.agents/skills/observability/SKILL.md +11 -0
- package/src/templates/workspace-core/.agents/skills/security/SKILL.md +22 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"corpus-jobs.js","sourceRoot":"","sources":["../../src/provider-api/corpus-jobs.ts"],"names":[],"mappings":"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","sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport { z } from \"zod\";\nimport { defineAction } from \"../action.js\";\nimport { getCredentialContext } from \"../server/request-context.js\";\nimport type { ProviderApiMethod, ProviderApiRequestArgs } from \"./index.js\";\nimport { getStagedDatasetRows } from \"./staged-datasets-store.js\";\nimport {\n appendProviderCorpusJobHits,\n createProviderCorpusJob,\n deleteProviderCorpusJob,\n getProviderCorpusJob,\n getProviderCorpusJobHits,\n listProviderCorpusJobs,\n updateProviderCorpusJob,\n type ProviderCorpusJobRecord,\n type ProviderCorpusJobStatus,\n} from \"./corpus-jobs-store.js\";\n\ntype ProviderCorpusRuntime = {\n executeRequest(args: ProviderApiRequestArgs): Promise<unknown>;\n};\n\nexport interface CreateProviderCorpusJobActionOptions {\n appId: string;\n getRuntime: () => ProviderCorpusRuntime;\n}\n\nconst MethodSchema = z.enum([\"GET\", \"POST\", \"PUT\", \"PATCH\", \"DELETE\", \"HEAD\"]);\n\nconst ProviderRequestSchema = z.object({\n provider: z.string().min(1).describe(\"Configured provider API id.\"),\n method: MethodSchema.default(\"GET\").describe(\"HTTP method to use.\"),\n path: z.string().min(1).describe(\"Provider API path or allowed full URL.\"),\n query: z.unknown().optional().describe(\"Optional query parameters.\"),\n headers: z.record(z.string(), z.unknown()).optional(),\n body: z.unknown().optional(),\n auth: z.enum([\"default\", \"none\"]).default(\"default\"),\n connectionId: z.string().trim().min(1).optional(),\n accountId: z.string().optional(),\n timeoutMs: z.coerce.number().int().min(1_000).max(120_000).optional(),\n maxBytes: z.coerce\n .number()\n .int()\n .min(1_000)\n .max(4 * 1024 * 1024)\n .optional(),\n});\n\nconst PaginationSchema = z.object({\n itemsPath: z\n .string()\n .optional()\n .describe(\"Dot-path to records in each page, e.g. records.calls.\"),\n nextCursorPath: z\n .string()\n .optional()\n .describe(\"Dot-path to the next cursor in each response.\"),\n cursorPath: z.string().optional().describe(\"Alias for nextCursorPath.\"),\n cursorParam: z\n .string()\n .optional()\n .describe(\"Query parameter that receives the next cursor.\"),\n cursorBodyPath: z\n .string()\n .optional()\n .describe(\"Request body path that receives the next cursor.\"),\n pageParam: z\n .string()\n .optional()\n .describe(\"Query parameter for page-number pagination.\"),\n startPage: z.coerce.number().int().min(0).optional(),\n offsetParam: z\n .string()\n .optional()\n .describe(\"Query parameter for offset pagination.\"),\n startOffset: z.coerce.number().int().min(0).optional(),\n pageSize: z.coerce.number().int().min(1).optional(),\n maxPages: z.coerce\n .number()\n .int()\n .min(1)\n .max(2_000)\n .optional()\n .describe(\"Overall page cap for the job. Default 500.\"),\n});\n\nconst BatchSchema = z.object({\n items: z\n .array(z.unknown())\n .max(10_000)\n .optional()\n .describe(\"Input records or ids to process in batches.\"),\n inputDatasetId: z\n .string()\n .optional()\n .describe(\"Optional staged dataset id to read input records from.\"),\n inputValuePath: z\n .string()\n .optional()\n .describe(\"Dot-path to extract the provider id/value from each input row.\"),\n batchSize: z.coerce.number().int().min(1).max(100).optional(),\n itemBodyPath: z\n .string()\n .optional()\n .describe(\"Dot-path in request body where the current batch array goes.\"),\n itemQueryParam: z\n .string()\n .optional()\n .describe(\"Query parameter where the current batch goes.\"),\n responseItemsPath: z\n .string()\n .optional()\n .describe(\"Dot-path to records in each batch response.\"),\n});\n\nconst SearchSchema = z.object({\n query: z.string().optional().describe(\"Phrase to search for.\"),\n queries: z.array(z.string()).max(50).optional(),\n terms: z\n .array(z.string())\n .max(50)\n .optional()\n .describe(\"Terms for allTerms/anyTerm search.\"),\n regex: z.string().optional(),\n regexFlags: z.string().optional(),\n matchMode: z.enum([\"query\", \"allTerms\", \"anyTerm\"]).optional(),\n caseSensitive: z.boolean().optional(),\n textPaths: z\n .array(z.string())\n .max(100)\n .optional()\n .describe(\"Only search these dot-paths. Omit to search text recursively.\"),\n idPaths: z.array(z.string()).max(100).optional(),\n metadataPaths: z.array(z.string()).max(100).optional(),\n contextChars: z.coerce.number().int().min(20).max(1_000).optional(),\n maxHits: z.coerce.number().int().min(1).max(10_000).optional(),\n maxHitsPerItem: z.coerce.number().int().min(1).max(100).optional(),\n maxFieldsPerItem: z.coerce.number().int().min(1).max(50_000).optional(),\n});\n\nconst LimitsSchema = z.object({\n pageBudget: z.coerce\n .number()\n .int()\n .min(1)\n .max(200)\n .optional()\n .describe(\"Pages to process in this action call. Default 25.\"),\n batchBudget: z.coerce\n .number()\n .int()\n .min(1)\n .max(500)\n .optional()\n .describe(\"Batches to process in this action call. Default 25.\"),\n runtimeMs: z.coerce\n .number()\n .int()\n .min(1_000)\n .max(110_000)\n .optional()\n .describe(\"Wall-clock budget for this action call. Default 90000.\"),\n itemBudget: z.coerce\n .number()\n .int()\n .min(1)\n .max(200_000)\n .optional()\n .describe(\"Response records to search in this action call.\"),\n maxHits: z.coerce\n .number()\n .int()\n .min(1)\n .max(10_000)\n .optional()\n .describe(\"Stored hit cap for the whole job. Default comes from search.\"),\n});\n\nconst ProviderCorpusJobSchema = z.object({\n operation: z\n .enum([\"start\", \"continue\", \"status\", \"results\", \"list\", \"delete\"])\n .default(\"start\"),\n jobId: z\n .string()\n .optional()\n .describe(\"Existing job id for continue/status/results/delete.\"),\n name: z.string().optional().describe(\"Human-readable job name.\"),\n mode: z.enum([\"paginated-search\", \"batch-search\"]).optional(),\n request: ProviderRequestSchema.optional(),\n pagination: PaginationSchema.optional(),\n batch: BatchSchema.optional(),\n search: SearchSchema.optional(),\n limits: LimitsSchema.optional(),\n offset: z.coerce\n .number()\n .int()\n .min(0)\n .optional()\n .describe(\"Results/list offset.\"),\n limit: z.coerce\n .number()\n .int()\n .min(1)\n .max(1_000)\n .optional()\n .describe(\"Results/list limit.\"),\n});\n\ntype ProviderCorpusJobArgs = z.infer<typeof ProviderCorpusJobSchema>;\ntype ProviderRequest = z.infer<typeof ProviderRequestSchema>;\ntype PaginationConfig = z.infer<typeof PaginationSchema>;\ntype BatchConfig = z.infer<typeof BatchSchema>;\ntype SearchConfig = z.infer<typeof SearchSchema>;\ntype LimitsConfig = z.infer<typeof LimitsSchema>;\n\ninterface SearchHit {\n id: string | null;\n idPath: string | null;\n itemIndex: number;\n path: string;\n kind: string;\n query: string;\n match: string;\n snippet: string;\n metadata?: Record<string, unknown>;\n pageIndex?: number;\n pageItemIndex?: number;\n batchIndex?: number;\n batchItemIndex?: number;\n}\n\ninterface SearchPageResult {\n searchedItems: number;\n matchedItems: number;\n totalHits: number;\n storedHits: SearchHit[];\n}\n\ninterface ProviderBodyResult {\n body: unknown;\n quota?: { retryAt: string; retryAfterMs: number; reason: string };\n}\n\nconst DEFAULT_PAGE_BUDGET = 25;\nconst DEFAULT_BATCH_BUDGET = 25;\nconst DEFAULT_RUNTIME_MS = 90_000;\nconst DEFAULT_BATCH_SIZE = 25;\nconst DEFAULT_OVERALL_MAX_PAGES = 500;\nconst DEFAULT_MAX_HITS = 500;\n\nexport function createProviderCorpusJobAction(\n options: CreateProviderCorpusJobActionOptions,\n) {\n return defineAction({\n description:\n \"Create, continue, inspect, list, read results from, or delete a durable provider corpus search job. \" +\n \"Use this for broad provider searches, cross-source joins, transcript/message/ticket/issue/document scans, batch endpoint walks, and absence-sensitive questions that may exceed one tool call. \" +\n \"The job is generic: paginated-search walks any paginated provider endpoint; batch-search walks a supplied id/record list or staged dataset through any provider endpoint by injecting each batch into a query param or request body path. \" +\n \"Every provider request still goes through provider-api-request credentials, host allow-listing, SSRF blocking, secret redaction, and provider quota cooldown. \" +\n \"When status is paused or quota_wait, call operation=continue with the jobId after the indicated time/budget. Report coverage counts, pagination status, and any remaining gaps.\",\n schema: ProviderCorpusJobSchema,\n http: false,\n run: async (args) => runProviderCorpusJobAction(args, options),\n });\n}\n\nasync function runProviderCorpusJobAction(\n args: ProviderCorpusJobArgs,\n options: CreateProviderCorpusJobActionOptions,\n) {\n const ctx = getCredentialContext();\n if (!ctx)\n throw new Error(\"No authenticated context for provider-corpus-job.\");\n\n if (args.operation === \"list\") {\n const jobs = await listProviderCorpusJobs({\n appId: options.appId,\n ownerEmail: ctx.userEmail,\n limit: args.limit,\n });\n return { jobs: jobs.map(jobSummary), total: jobs.length };\n }\n\n if (args.operation === \"start\") {\n const job = await startJob(args, options.appId, ctx.userEmail);\n return continueJob(job, args.limits, options.getRuntime());\n }\n\n const jobId = args.jobId?.trim();\n if (!jobId) throw new Error(`${args.operation} requires jobId.`);\n\n if (args.operation === \"delete\") {\n const deleted = await deleteProviderCorpusJob({\n id: jobId,\n appId: options.appId,\n ownerEmail: ctx.userEmail,\n });\n if (!deleted) {\n throw new Error(\n `Provider corpus job ${jobId} not found or belongs to another owner/app.`,\n );\n }\n return { deleted: true, jobId };\n }\n\n const job = await getProviderCorpusJob({\n id: jobId,\n appId: options.appId,\n ownerEmail: ctx.userEmail,\n });\n if (!job) {\n throw new Error(\n `Provider corpus job ${jobId} not found or belongs to another owner/app.`,\n );\n }\n\n if (args.operation === \"status\") return jobStatus(job);\n if (args.operation === \"results\") {\n const hits = await getProviderCorpusJobHits({\n jobId,\n appId: options.appId,\n ownerEmail: ctx.userEmail,\n offset: args.offset,\n limit: args.limit,\n });\n return {\n ...jobStatus(job),\n hits,\n offset: args.offset ?? 0,\n limit: args.limit ?? 100,\n };\n }\n if (args.operation === \"continue\") {\n return continueJob(job, args.limits, options.getRuntime());\n }\n\n throw new Error(`Unsupported provider corpus operation ${args.operation}.`);\n}\n\nasync function startJob(\n args: ProviderCorpusJobArgs,\n appId: string,\n ownerEmail: string,\n): Promise<ProviderCorpusJobRecord> {\n if (!args.mode) throw new Error(\"start requires mode.\");\n if (!args.request) throw new Error(\"start requires request.\");\n const search = args.search ?? {};\n if (!hasSearchNeedle(search)) {\n throw new Error(\n \"start requires search.query, search.queries, search.terms, or search.regex.\",\n );\n }\n if (args.mode === \"paginated-search\" && !args.pagination) {\n throw new Error(\"paginated-search requires pagination.\");\n }\n if (args.mode === \"batch-search\") {\n if (!args.batch) throw new Error(\"batch-search requires batch config.\");\n if (!args.batch.itemBodyPath && !args.batch.itemQueryParam) {\n throw new Error(\n \"batch-search requires batch.itemBodyPath or batch.itemQueryParam.\",\n );\n }\n if (!args.batch.items?.length && !args.batch.inputDatasetId) {\n throw new Error(\"batch-search requires batch.items or inputDatasetId.\");\n }\n }\n\n const id = args.jobId?.trim() || `pcj_${randomUUID().replace(/-/g, \"\")}`;\n const request = cleanRequest(args.request);\n const checkpoint =\n args.mode === \"batch-search\"\n ? { nextIndex: 0, sourceItemCount: null }\n : {\n pageIndex: 0,\n cursor: null,\n pageNumber: args.pagination?.startPage ?? 1,\n offset: args.pagination?.startOffset ?? 0,\n lastCursor: null,\n stoppedReason: null,\n };\n\n return createProviderCorpusJob({\n id,\n appId,\n ownerEmail,\n name: args.name?.trim() || id,\n mode: args.mode,\n status: \"paused\",\n provider: request.provider,\n request: request as unknown as Record<string, unknown>,\n pagination:\n (args.pagination as Record<string, unknown> | undefined) ?? null,\n batch: (args.batch as Record<string, unknown> | undefined) ?? null,\n search: search as Record<string, unknown>,\n limits: (args.limits as Record<string, unknown> | undefined) ?? {},\n checkpoint,\n });\n}\n\nasync function continueJob(\n job: ProviderCorpusJobRecord,\n overrideLimits: LimitsConfig | undefined,\n runtime: ProviderCorpusRuntime,\n) {\n if (job.status === \"completed\") return jobStatus(job);\n\n const limits = normalizeLimits({\n ...(job.limits as LimitsConfig),\n ...(overrideLimits ?? {}),\n });\n await updateProviderCorpusJob({\n id: job.id,\n appId: job.appId,\n ownerEmail: job.ownerEmail,\n status: \"running\",\n error: null,\n nextResumeAt: null,\n });\n\n try {\n const refreshed = await getProviderCorpusJob({\n id: job.id,\n appId: job.appId,\n ownerEmail: job.ownerEmail,\n });\n if (!refreshed)\n throw new Error(`Provider corpus job ${job.id} disappeared.`);\n const next =\n refreshed.mode === \"batch-search\"\n ? await runBatchSearch(refreshed, limits, runtime)\n : await runPaginatedSearch(refreshed, limits, runtime);\n const hits = await getProviderCorpusJobHits({\n jobId: next.id,\n appId: next.appId,\n ownerEmail: next.ownerEmail,\n limit: 25,\n });\n return {\n ...jobStatus(next),\n sampleHits: hits,\n nextAction: nextAction(next),\n };\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n const failed =\n (await updateProviderCorpusJob({\n id: job.id,\n appId: job.appId,\n ownerEmail: job.ownerEmail,\n status: \"failed\",\n error: message,\n })) ?? job;\n return { ...jobStatus(failed), nextAction: nextAction(failed) };\n }\n}\n\nasync function runPaginatedSearch(\n job: ProviderCorpusJobRecord,\n limits: Required<LimitsConfig>,\n runtime: ProviderCorpusRuntime,\n): Promise<ProviderCorpusJobRecord> {\n const startedAt = Date.now();\n const pagination = normalizePagination(job.pagination);\n const request = job.request as ProviderRequest;\n const search = job.search as SearchConfig;\n const checkpoint = { ...job.checkpoint };\n const maxPages = pagination.maxPages ?? DEFAULT_OVERALL_MAX_PAGES;\n let pageIndex = numberValue(checkpoint.pageIndex, 0);\n let cursor = valueOrNull(checkpoint.cursor);\n let pageNumber = numberValue(\n checkpoint.pageNumber,\n pagination.startPage ?? 1,\n );\n let offset = numberValue(checkpoint.offset, pagination.startOffset ?? 0);\n let pagesThisCall = 0;\n let itemsThisCall = 0;\n let current = job;\n\n while (\n pagesThisCall < limits.pageBudget &&\n pageIndex < maxPages &&\n itemsThisCall < limits.itemBudget &&\n Date.now() - startedAt < limits.runtimeMs\n ) {\n const pageRequest = buildPaginatedRequest(request, pagination, {\n pageIndex,\n cursor,\n pageNumber,\n offset,\n });\n const provider = await callProvider(runtime, pageRequest);\n if (provider.quota) {\n return pauseForQuota(\n current,\n {\n ...checkpoint,\n pageIndex,\n cursor,\n pageNumber,\n offset,\n },\n provider.quota,\n );\n }\n\n const items = extractItemsArray(provider.body, pagination.itemsPath, false);\n const nextCursorPath = pagination.nextCursorPath || pagination.cursorPath;\n const nextCursor = nextCursorPath\n ? valueOrNull(getAtPath(provider.body, nextCursorPath))\n : null;\n const searchResult = searchItems(items, search, {\n baseItemIndex: current.itemsProcessed,\n maxStoredHits: Math.max(0, limits.maxHits - current.storedHits),\n pageIndex,\n });\n const storedHits = searchResult.storedHits.map((hit) => hitToRecord(hit));\n await appendProviderCorpusJobHits({\n jobId: job.id,\n startIndex: current.storedHits,\n hits: storedHits,\n });\n\n pagesThisCall++;\n itemsThisCall += searchResult.searchedItems;\n const nextCheckpoint: Record<string, unknown> = {\n ...checkpoint,\n pageIndex: pageIndex + 1,\n cursor: nextCursor,\n pageNumber,\n offset,\n lastCursor: nextCursor,\n stoppedReason: null,\n };\n\n let status: ProviderCorpusJobStatus = \"paused\";\n let stoppedReason: string | null = null;\n if (items.length === 0) {\n status = \"completed\";\n stoppedReason = \"empty-page\";\n } else if (nextCursorPath) {\n if (!nextCursor) {\n status = \"completed\";\n stoppedReason = \"no-next-cursor\";\n } else if (cursor !== null && String(nextCursor) === String(cursor)) {\n status = \"completed\";\n stoppedReason = \"repeated-cursor\";\n } else {\n cursor = nextCursor;\n }\n } else if (pagination.pageParam) {\n pageNumber += 1;\n nextCheckpoint.pageNumber = pageNumber;\n } else if (pagination.offsetParam) {\n const step = pagination.pageSize || items.length;\n offset += step;\n nextCheckpoint.offset = offset;\n if (pagination.pageSize && items.length < pagination.pageSize) {\n status = \"completed\";\n stoppedReason = \"short-page\";\n }\n } else {\n status = \"completed\";\n stoppedReason = \"single-page\";\n }\n\n if (pageIndex + 1 >= maxPages && status !== \"completed\") {\n status = \"completed\";\n stoppedReason = \"max-pages\";\n }\n\n nextCheckpoint.stoppedReason = stoppedReason;\n current =\n (await updateProviderCorpusJob({\n id: job.id,\n appId: job.appId,\n ownerEmail: job.ownerEmail,\n status,\n checkpoint: nextCheckpoint,\n pagesProcessed: current.pagesProcessed + 1,\n itemsProcessed: current.itemsProcessed + searchResult.searchedItems,\n matchedItems: current.matchedItems + searchResult.matchedItems,\n totalHits: current.totalHits + searchResult.totalHits,\n storedHits: current.storedHits + storedHits.length,\n error: null,\n nextResumeAt: null,\n })) ?? current;\n\n pageIndex += 1;\n if (status === \"completed\") return current;\n }\n\n return pauseForBudget(current, {\n ...checkpoint,\n pageIndex,\n cursor,\n pageNumber,\n offset,\n stoppedReason: \"budget\",\n });\n}\n\nasync function runBatchSearch(\n job: ProviderCorpusJobRecord,\n limits: Required<LimitsConfig>,\n runtime: ProviderCorpusRuntime,\n): Promise<ProviderCorpusJobRecord> {\n const startedAt = Date.now();\n const batch = normalizeBatch(job.batch);\n const request = job.request as ProviderRequest;\n const search = job.search as SearchConfig;\n const sourceItems = await loadBatchSourceItems(job, batch);\n const totalSourceItems = sourceItems.length;\n let nextIndex = numberValue(job.checkpoint.nextIndex, 0);\n let batchesThisCall = 0;\n let itemsThisCall = 0;\n let current = job;\n\n while (\n nextIndex < totalSourceItems &&\n batchesThisCall < limits.batchBudget &&\n itemsThisCall < limits.itemBudget &&\n Date.now() - startedAt < limits.runtimeMs\n ) {\n const slice = sourceItems.slice(nextIndex, nextIndex + batch.batchSize);\n const values = slice\n .map((item) =>\n batch.inputValuePath ? getAtPath(item, batch.inputValuePath) : item,\n )\n .filter((value) => value !== undefined && value !== null);\n if (values.length === 0) {\n nextIndex += slice.length || batch.batchSize;\n continue;\n }\n\n const batchRequest = buildBatchRequest(request, batch, values);\n const provider = await callProvider(runtime, batchRequest);\n if (provider.quota) {\n return pauseForQuota(\n current,\n {\n ...job.checkpoint,\n nextIndex,\n sourceItemCount: totalSourceItems,\n },\n provider.quota,\n );\n }\n\n const items = extractItemsArray(\n provider.body,\n batch.responseItemsPath,\n true,\n );\n const searchResult = searchItems(items, search, {\n baseItemIndex: current.itemsProcessed,\n maxStoredHits: Math.max(0, limits.maxHits - current.storedHits),\n batchIndex: current.batchesProcessed,\n });\n const storedHits = searchResult.storedHits.map((hit) => hitToRecord(hit));\n await appendProviderCorpusJobHits({\n jobId: job.id,\n startIndex: current.storedHits,\n hits: storedHits,\n });\n\n batchesThisCall++;\n itemsThisCall += searchResult.searchedItems;\n nextIndex += slice.length;\n const status: ProviderCorpusJobStatus =\n nextIndex >= totalSourceItems ? \"completed\" : \"paused\";\n\n current =\n (await updateProviderCorpusJob({\n id: job.id,\n appId: job.appId,\n ownerEmail: job.ownerEmail,\n status,\n checkpoint: {\n ...job.checkpoint,\n nextIndex,\n sourceItemCount: totalSourceItems,\n stoppedReason: status === \"completed\" ? \"completed\" : \"budget\",\n },\n batchesProcessed: current.batchesProcessed + 1,\n itemsProcessed: current.itemsProcessed + searchResult.searchedItems,\n matchedItems: current.matchedItems + searchResult.matchedItems,\n totalHits: current.totalHits + searchResult.totalHits,\n storedHits: current.storedHits + storedHits.length,\n error: null,\n nextResumeAt: null,\n })) ?? current;\n\n if (status === \"completed\") return current;\n }\n\n return pauseForBudget(current, {\n ...job.checkpoint,\n nextIndex,\n sourceItemCount: totalSourceItems,\n stoppedReason: \"budget\",\n });\n}\n\nasync function pauseForQuota(\n job: ProviderCorpusJobRecord,\n checkpoint: Record<string, unknown>,\n quota: { retryAt: string; retryAfterMs: number; reason: string },\n): Promise<ProviderCorpusJobRecord> {\n return (\n (await updateProviderCorpusJob({\n id: job.id,\n appId: job.appId,\n ownerEmail: job.ownerEmail,\n status: \"quota_wait\",\n checkpoint,\n error: `Provider quota exhausted. Retry after ${quota.retryAt}.`,\n nextResumeAt: parseRetryAt(quota.retryAt, quota.retryAfterMs),\n })) ?? job\n );\n}\n\nasync function pauseForBudget(\n job: ProviderCorpusJobRecord,\n checkpoint: Record<string, unknown>,\n): Promise<ProviderCorpusJobRecord> {\n return (\n (await updateProviderCorpusJob({\n id: job.id,\n appId: job.appId,\n ownerEmail: job.ownerEmail,\n status: \"paused\",\n checkpoint,\n error: null,\n nextResumeAt: null,\n })) ?? job\n );\n}\n\nasync function callProvider(\n runtime: ProviderCorpusRuntime,\n request: ProviderRequest,\n): Promise<ProviderBodyResult> {\n const raw = (await runtime.executeRequest(cleanRequest(request))) as Record<\n string,\n unknown\n >;\n const response = raw.response as Record<string, unknown> | undefined;\n if (!response) {\n return { body: raw };\n }\n const quota = readQuota(response);\n if (quota) return { body: null, quota };\n if (response.ok !== true) {\n const status = response.status ?? \"unknown\";\n const detail = response.text ?? response.json ?? response.statusText ?? \"\";\n throw new Error(\n `Provider request failed (${status}): ${stringifyBrief(detail, 500)}`,\n );\n }\n return {\n body:\n response.json ??\n (typeof response.text === \"string\" ? tryParseJson(response.text) : null),\n };\n}\n\nasync function loadBatchSourceItems(\n job: ProviderCorpusJobRecord,\n batch: Required<BatchConfig>,\n): Promise<unknown[]> {\n if (batch.items.length > 0) return batch.items;\n if (!batch.inputDatasetId) return [];\n return getStagedDatasetRows({\n id: batch.inputDatasetId,\n appId: job.appId,\n ownerEmail: job.ownerEmail,\n });\n}\n\nfunction cleanRequest(request: ProviderRequest): ProviderApiRequestArgs {\n return {\n provider: request.provider,\n method: request.method as ProviderApiMethod,\n path: request.path,\n query: request.query,\n headers: request.headers,\n body: request.body,\n auth: request.auth,\n connectionId: request.connectionId,\n accountId: request.accountId,\n timeoutMs: request.timeoutMs,\n maxBytes: request.maxBytes,\n };\n}\n\nfunction buildPaginatedRequest(\n request: ProviderRequest,\n pagination: Required<PaginationConfig>,\n state: {\n pageIndex: number;\n cursor: unknown;\n pageNumber: number;\n offset: number;\n },\n): ProviderRequest {\n let query = cloneRecord(request.query);\n let body = request.body;\n if (pagination.pageParam) {\n query = { ...query, [pagination.pageParam]: state.pageNumber };\n }\n if (pagination.offsetParam) {\n query = { ...query, [pagination.offsetParam]: state.offset };\n }\n if (state.pageIndex > 0 && state.cursor != null) {\n if (pagination.cursorParam) {\n query = { ...query, [pagination.cursorParam]: state.cursor };\n }\n if (pagination.cursorBodyPath) {\n body = setAtPath(body, pagination.cursorBodyPath, state.cursor);\n }\n }\n return { ...request, query, body };\n}\n\nfunction buildBatchRequest(\n request: ProviderRequest,\n batch: Required<BatchConfig>,\n values: unknown[],\n): ProviderRequest {\n let query = cloneRecord(request.query);\n let body = request.body;\n const payload = values.length === 1 ? values[0] : values;\n if (batch.itemQueryParam) {\n query = { ...query, [batch.itemQueryParam]: payload };\n }\n if (batch.itemBodyPath) {\n body = setAtPath(body, batch.itemBodyPath, values);\n }\n return { ...request, query, body };\n}\n\nfunction searchItems(\n items: unknown[],\n search: SearchConfig,\n options: {\n baseItemIndex: number;\n maxStoredHits: number;\n pageIndex?: number;\n batchIndex?: number;\n },\n): SearchPageResult {\n const maxStoredHits = Math.max(0, options.maxStoredHits);\n const maxHitsPerItem = boundedNumber(search.maxHitsPerItem, 3, 1, 100);\n const maxFieldsPerItem = boundedNumber(\n search.maxFieldsPerItem,\n 5_000,\n 1,\n 50_000,\n );\n let matchedItems = 0;\n let totalHits = 0;\n const storedHits: SearchHit[] = [];\n\n for (let itemOffset = 0; itemOffset < items.length; itemOffset++) {\n const item = items[itemOffset];\n const fields = collectSearchStrings(\n item,\n search.textPaths,\n maxFieldsPerItem,\n );\n const identity = extractItemIdentity(item, search.idPaths);\n const metadata = extractMetadata(item, search.metadataPaths);\n let itemMatched = false;\n let storedForItem = 0;\n const itemWideTermMatch = findItemWideTermMatch(fields, search);\n\n const addHit = (field: TextField, match: MatchRecord) => {\n totalHits++;\n if (!itemMatched) {\n matchedItems++;\n itemMatched = true;\n }\n if (storedHits.length < maxStoredHits && storedForItem < maxHitsPerItem) {\n storedForItem++;\n storedHits.push({\n id: identity.id,\n idPath: identity.idPath,\n itemIndex: options.baseItemIndex + itemOffset,\n pageIndex: options.pageIndex,\n pageItemIndex:\n options.pageIndex === undefined ? undefined : itemOffset,\n batchIndex: options.batchIndex,\n batchItemIndex:\n options.batchIndex === undefined ? undefined : itemOffset,\n path: field.path,\n kind: match.kind,\n query: match.query,\n match: match.match,\n snippet: makeSnippet(field.text, match.index, search.contextChars),\n ...(Object.keys(metadata).length ? { metadata } : {}),\n });\n }\n };\n\n if (itemWideTermMatch) {\n addHit(itemWideTermMatch.field, itemWideTermMatch.match);\n }\n\n for (const field of fields) {\n const matches = findSearchMatches(field.text, search, !itemWideTermMatch);\n for (const match of matches) addHit(field, match);\n }\n }\n\n return {\n searchedItems: items.length,\n matchedItems,\n totalHits,\n storedHits,\n };\n}\n\nfunction normalizeLimits(input: LimitsConfig): Required<LimitsConfig> {\n const maxHits = input.maxHits ?? DEFAULT_MAX_HITS;\n return {\n pageBudget: input.pageBudget ?? DEFAULT_PAGE_BUDGET,\n batchBudget: input.batchBudget ?? DEFAULT_BATCH_BUDGET,\n runtimeMs: input.runtimeMs ?? DEFAULT_RUNTIME_MS,\n itemBudget: input.itemBudget ?? 200_000,\n maxHits,\n };\n}\n\nfunction normalizePagination(\n input: Record<string, unknown> | null,\n): Required<PaginationConfig> {\n const parsed = PaginationSchema.parse(input ?? {});\n return {\n itemsPath: parsed.itemsPath ?? \"\",\n nextCursorPath: parsed.nextCursorPath ?? \"\",\n cursorPath: parsed.cursorPath ?? \"\",\n cursorParam: parsed.cursorParam ?? \"\",\n cursorBodyPath: parsed.cursorBodyPath ?? \"\",\n pageParam: parsed.pageParam ?? \"\",\n startPage: parsed.startPage ?? 1,\n offsetParam: parsed.offsetParam ?? \"\",\n startOffset: parsed.startOffset ?? 0,\n pageSize: parsed.pageSize ?? 0,\n maxPages: parsed.maxPages ?? DEFAULT_OVERALL_MAX_PAGES,\n };\n}\n\nfunction normalizeBatch(\n input: Record<string, unknown> | null,\n): Required<BatchConfig> {\n const parsed = BatchSchema.parse(input ?? {});\n return {\n items: parsed.items ?? [],\n inputDatasetId: parsed.inputDatasetId ?? \"\",\n inputValuePath: parsed.inputValuePath ?? \"\",\n batchSize: parsed.batchSize ?? DEFAULT_BATCH_SIZE,\n itemBodyPath: parsed.itemBodyPath ?? \"\",\n itemQueryParam: parsed.itemQueryParam ?? \"\",\n responseItemsPath: parsed.responseItemsPath ?? \"\",\n };\n}\n\nfunction jobStatus(job: ProviderCorpusJobRecord) {\n const nextResumeAtIso = job.nextResumeAt\n ? new Date(job.nextResumeAt).toISOString()\n : null;\n return {\n job: jobSummary(job),\n coverage: {\n pagesProcessed: job.pagesProcessed,\n batchesProcessed: job.batchesProcessed,\n itemsProcessed: job.itemsProcessed,\n matchedItems: job.matchedItems,\n totalHits: job.totalHits,\n storedHits: job.storedHits,\n truncatedHits: job.totalHits > job.storedHits,\n },\n checkpoint: job.checkpoint,\n error: job.error,\n nextResumeAt: nextResumeAtIso,\n };\n}\n\nfunction jobSummary(job: ProviderCorpusJobRecord) {\n return {\n id: job.id,\n name: job.name,\n mode: job.mode,\n status: job.status,\n provider: job.provider,\n createdAt: new Date(job.createdAt).toISOString(),\n updatedAt: new Date(job.updatedAt).toISOString(),\n };\n}\n\nfunction nextAction(job: ProviderCorpusJobRecord): string {\n if (job.status === \"completed\") {\n return `Read all stored hits with operation=\"results\", jobId=\"${job.id}\".`;\n }\n if (job.status === \"quota_wait\") {\n const at = job.nextResumeAt\n ? new Date(job.nextResumeAt).toISOString()\n : \"later\";\n return `Provider quota is cooling down. Continue this job after ${at} with operation=\"continue\", jobId=\"${job.id}\".`;\n }\n if (job.status === \"paused\") {\n return `Continue this job with operation=\"continue\", jobId=\"${job.id}\" until completed or quota_wait.`;\n }\n if (job.status === \"failed\") {\n return 'Fix the request/configuration or start a new job; progress and stored hits are still inspectable with operation=\"results\".';\n }\n return `Check status with operation=\"status\", jobId=\"${job.id}\".`;\n}\n\nfunction extractItemsArray(\n body: unknown,\n itemsPath: string | undefined,\n wrapObjectFallback: boolean,\n): unknown[] {\n if (Array.isArray(body)) return body;\n if (!body || typeof body !== \"object\") return [];\n if (itemsPath) {\n const found = getAtPath(body, itemsPath);\n if (Array.isArray(found)) return found;\n if (found !== undefined && wrapObjectFallback) return [found];\n return [];\n }\n const obj = body as Record<string, unknown>;\n for (const key of [\n \"data\",\n \"results\",\n \"items\",\n \"records\",\n \"rows\",\n \"calls\",\n \"callTranscripts\",\n \"transcripts\",\n \"messages\",\n \"tickets\",\n \"issues\",\n \"deals\",\n \"events\",\n \"notes\",\n \"documents\",\n \"entries\",\n \"objects\",\n ]) {\n if (Array.isArray(obj[key])) return obj[key] as unknown[];\n }\n const arrayFields = Object.values(obj).filter(Array.isArray);\n if (arrayFields.length === 1) return arrayFields[0] as unknown[];\n return wrapObjectFallback ? [body] : [];\n}\n\nfunction hasSearchNeedle(search: SearchConfig): boolean {\n return Boolean(\n search.query ||\n search.regex ||\n search.queries?.length ||\n search.terms?.length,\n );\n}\n\nfunction readQuota(response: Record<string, unknown>) {\n const quota = response.quota as Record<string, unknown> | undefined;\n if (quota?.exhausted === true && typeof quota.retryAt === \"string\") {\n return {\n retryAt: quota.retryAt,\n retryAfterMs: numberValue(quota.retryAfterMs, 0),\n reason: String(quota.reason ?? \"quota\"),\n };\n }\n const json = response.json as Record<string, unknown> | undefined;\n if (\n json?.error === \"provider_quota_exhausted\" &&\n typeof json.retryAt === \"string\"\n ) {\n return {\n retryAt: json.retryAt,\n retryAfterMs: numberValue(json.retryAfterMs, 0),\n reason: String(json.reason ?? \"quota\"),\n };\n }\n return null;\n}\n\nfunction hitToRecord(hit: SearchHit): Record<string, unknown> {\n return Object.fromEntries(\n Object.entries(hit).filter(([, value]) => value !== undefined),\n );\n}\n\nfunction tryParseJson(text: string): unknown {\n try {\n return JSON.parse(text) as unknown;\n } catch {\n return text;\n }\n}\n\nfunction stringifyBrief(value: unknown, maxChars: number): string {\n const text = typeof value === \"string\" ? value : JSON.stringify(value);\n return text.slice(0, maxChars);\n}\n\nfunction cloneRecord(value: unknown): Record<string, unknown> {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return {};\n return JSON.parse(JSON.stringify(value)) as Record<string, unknown>;\n}\n\nfunction valueOrNull(value: unknown): unknown | null {\n if (\n value === undefined ||\n value === null ||\n value === \"\" ||\n value === false\n ) {\n return null;\n }\n return value;\n}\n\nfunction numberValue(value: unknown, fallback: number): number {\n const parsed = Number(value);\n return Number.isFinite(parsed) ? parsed : fallback;\n}\n\nfunction parseRetryAt(retryAt: string, retryAfterMs: number): number {\n const parsed = Date.parse(retryAt);\n if (Number.isFinite(parsed)) return parsed;\n return Date.now() + Math.max(0, retryAfterMs);\n}\n\nfunction boundedNumber(\n value: unknown,\n fallback: number,\n min: number,\n max: number,\n): number {\n const parsed = Number(value);\n const finite = Number.isFinite(parsed) ? parsed : fallback;\n return Math.max(min, Math.min(max, finite));\n}\n\nfunction pathParts(path: string | undefined): string[] {\n if (!path) return [];\n return path\n .replace(/\\[(\\d+)\\]/g, \".$1\")\n .split(\".\")\n .map((part) => part.trim())\n .filter(Boolean);\n}\n\nfunction getAtPath(value: unknown, path: string | undefined): unknown {\n let current = value;\n for (const part of pathParts(path)) {\n if (current === undefined || current === null) return undefined;\n if (typeof current !== \"object\") return undefined;\n current = (current as Record<string, unknown>)[part];\n }\n return current;\n}\n\nfunction setAtPath(base: unknown, path: string, value: unknown): unknown {\n const parts = pathParts(path);\n if (!parts.length) return value;\n const root =\n base && typeof base === \"object\" && !Array.isArray(base)\n ? (JSON.parse(JSON.stringify(base)) as Record<string, unknown>)\n : {};\n let current = root;\n for (const part of parts.slice(0, -1)) {\n const existing = current[part];\n const next =\n existing && typeof existing === \"object\" && !Array.isArray(existing)\n ? { ...(existing as Record<string, unknown>) }\n : {};\n current[part] = next;\n current = next;\n }\n current[parts[parts.length - 1]!] = value;\n return root;\n}\n\ninterface TextField {\n path: string;\n text: string;\n}\n\ninterface MatchRecord {\n kind: string;\n query: string;\n index: number;\n match: string;\n}\n\nfunction collectSearchStrings(\n item: unknown,\n textPaths: string[] | undefined,\n maxFields: number,\n): TextField[] {\n const paths = (textPaths ?? []).filter((path) => path.trim());\n if (!paths.length) return collectStrings(item, \"\", [], maxFields);\n const fields: TextField[] = [];\n for (const path of paths) {\n const value = getAtPath(item, path);\n if (value !== undefined) collectStrings(value, path, fields, maxFields);\n if (fields.length >= maxFields) break;\n }\n return fields;\n}\n\nfunction collectStrings(\n value: unknown,\n basePath: string,\n out: TextField[],\n limit: number,\n): TextField[] {\n if (out.length >= limit || value === undefined || value === null) return out;\n if (\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"boolean\" ||\n typeof value === \"bigint\"\n ) {\n out.push({ path: basePath || \"$\", text: String(value) });\n return out;\n }\n if (Array.isArray(value)) {\n for (let i = 0; i < value.length && out.length < limit; i++) {\n collectStrings(\n value[i],\n basePath ? `${basePath}[${i}]` : `[${i}]`,\n out,\n limit,\n );\n }\n return out;\n }\n if (typeof value === \"object\") {\n for (const key of Object.keys(value as Record<string, unknown>)) {\n if (out.length >= limit) break;\n collectStrings(\n (value as Record<string, unknown>)[key],\n basePath ? `${basePath}.${key}` : key,\n out,\n limit,\n );\n }\n }\n return out;\n}\n\nconst DEFAULT_ID_PATHS = [\n \"id\",\n \"callId\",\n \"callID\",\n \"call_id\",\n \"call.id\",\n \"call.metaData.id\",\n \"metaData.id\",\n \"metadata.id\",\n \"recordId\",\n \"record_id\",\n \"objectId\",\n \"object_id\",\n \"ticketId\",\n \"ticket_id\",\n \"issueId\",\n \"issue_id\",\n \"messageId\",\n \"message_id\",\n \"conversationId\",\n \"conversation_id\",\n \"eventId\",\n \"event_id\",\n \"documentId\",\n \"document_id\",\n \"url\",\n \"webUrl\",\n \"permalink\",\n];\n\nfunction extractItemIdentity(\n item: unknown,\n idPaths: string[] | undefined,\n): { id: string | null; idPath: string | null } {\n for (const path of [...(idPaths ?? []), ...DEFAULT_ID_PATHS]) {\n const value = getAtPath(item, path);\n if (value !== undefined && value !== null && String(value) !== \"\") {\n return { id: stringifySearchValue(value), idPath: path };\n }\n }\n return { id: null, idPath: null };\n}\n\nfunction extractMetadata(\n item: unknown,\n metadataPaths: string[] | undefined,\n): Record<string, unknown> {\n const metadata: Record<string, unknown> = {};\n for (const path of metadataPaths ?? []) {\n const value = getAtPath(item, path);\n if (value !== undefined) metadata[path] = value;\n }\n return metadata;\n}\n\nfunction stringifySearchValue(value: unknown): string {\n if (typeof value === \"string\") return value;\n if (value === undefined || value === null) return \"\";\n if (\n typeof value === \"number\" ||\n typeof value === \"boolean\" ||\n typeof value === \"bigint\"\n ) {\n return String(value);\n }\n return stringifyBrief(value, 500);\n}\n\nfunction normalizedTerms(search: SearchConfig): string[] {\n const explicit = (search.terms ?? [])\n .map((term) => term.trim())\n .filter(Boolean);\n if (explicit.length) return explicit;\n if (search.matchMode === \"allTerms\" && search.query) {\n return search.query\n .split(/\\s+/)\n .map((term) => term.trim())\n .filter(Boolean);\n }\n return [];\n}\n\nfunction findItemWideTermMatch(fields: TextField[], search: SearchConfig) {\n const terms = normalizedTerms(search);\n if (!terms.length || search.matchMode === \"anyTerm\") return null;\n const caseSensitive = Boolean(search.caseSensitive);\n const termHits = terms.map((term) => {\n const needle = caseSensitive ? term : term.toLowerCase();\n for (const field of fields) {\n const haystack = caseSensitive ? field.text : field.text.toLowerCase();\n const index = haystack.indexOf(needle);\n if (index >= 0) return { term, field, index };\n }\n return { term, field: null, index: -1 };\n });\n if (termHits.some((hit) => !hit.field || hit.index < 0)) return null;\n const first = termHits\n .filter((hit): hit is { term: string; field: TextField; index: number } =>\n Boolean(hit.field),\n )\n .sort((a, b) => a.index - b.index)[0];\n if (!first) return null;\n return {\n field: first.field,\n match: {\n kind: \"allTerms\",\n query: terms.join(\" \"),\n index: first.index,\n match: first.term,\n },\n };\n}\n\nfunction findSearchMatches(\n text: string,\n search: SearchConfig,\n includeTerms: boolean,\n): MatchRecord[] {\n const source = String(text);\n const caseSensitive = Boolean(search.caseSensitive);\n const haystack = caseSensitive ? source : source.toLowerCase();\n const maxMatchesPerField = 1_000;\n const matches: MatchRecord[] = [];\n\n const addSubstring = (needle: unknown, label: string, kind: string) => {\n if (needle === undefined || needle === null) return;\n const rawNeedle = String(needle);\n if (!rawNeedle) return;\n const searchNeedle = caseSensitive ? rawNeedle : rawNeedle.toLowerCase();\n let from = 0;\n while (from <= haystack.length) {\n const index = haystack.indexOf(searchNeedle, from);\n if (index < 0) break;\n matches.push({\n kind,\n query: label,\n index,\n match: source.slice(index, index + rawNeedle.length),\n });\n from = index + Math.max(1, searchNeedle.length);\n if (matches.length >= maxMatchesPerField) break;\n }\n };\n\n if (search.regex) {\n const regex = new RegExp(\n search.regex,\n normalizeRegexFlags(search.regexFlags, caseSensitive),\n );\n let match: RegExpExecArray | null;\n while ((match = regex.exec(source)) && typeof match.index === \"number\") {\n matches.push({\n kind: \"regex\",\n query: search.regex,\n index: match.index,\n match: match[0],\n });\n if (matches.length >= maxMatchesPerField) break;\n if (match[0] === \"\") regex.lastIndex += 1;\n }\n }\n\n if (search.query) addSubstring(search.query, search.query, \"query\");\n for (const query of search.queries ?? []) addSubstring(query, query, \"query\");\n\n const terms = includeTerms ? normalizedTerms(search) : [];\n if (terms.length) {\n const hits = terms\n .map((term) => {\n const needle = caseSensitive ? term : term.toLowerCase();\n return { term, index: haystack.indexOf(needle) };\n })\n .filter((hit) => hit.index >= 0);\n const mode = search.matchMode === \"anyTerm\" ? \"anyTerm\" : \"allTerms\";\n if (\n (mode === \"allTerms\" && hits.length === terms.length) ||\n (mode === \"anyTerm\" && hits.length > 0)\n ) {\n const first = hits.sort((a, b) => a.index - b.index)[0];\n if (first) {\n matches.push({\n kind: mode,\n query: terms.join(\" \"),\n index: first.index,\n match: first.term,\n });\n }\n }\n }\n\n return matches.sort((a, b) => a.index - b.index);\n}\n\nfunction normalizeRegexFlags(\n flags: string | undefined,\n caseSensitive: boolean,\n): string {\n const allowed = (flags ?? \"\")\n .replace(/[^dgimsuvy]/g, \"\")\n .replace(/[gy]/g, \"\");\n const withCase = caseSensitive || /i/.test(allowed) ? allowed : `${allowed}i`;\n return `${withCase}g`;\n}\n\nfunction makeSnippet(\n text: string,\n index: number,\n contextChars: number | undefined,\n): string {\n const context = boundedNumber(contextChars, 180, 20, 1_000);\n const start = Math.max(0, index - context);\n const end = Math.min(text.length, index + context);\n const prefix = start > 0 ? \"...\" : \"\";\n const suffix = end < text.length ? \"...\" : \"\";\n return `${prefix}${text.slice(start, end)}${suffix}`\n .replace(/\\s+/g, \" \")\n .trim();\n}\n"]}
|
|
1
|
+
{"version":3,"file":"corpus-jobs.js","sourceRoot":"","sources":["../../src/provider-api/corpus-jobs.ts"],"names":[],"mappings":"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","sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport { z } from \"zod\";\nimport { defineAction } from \"../action.js\";\nimport { getCredentialContext } from \"../server/request-context.js\";\nimport type { ProviderApiMethod, ProviderApiRequestArgs } from \"./index.js\";\nimport { getStagedDatasetRows } from \"./staged-datasets-store.js\";\nimport {\n appendProviderCorpusJobHits,\n createProviderCorpusJob,\n deleteProviderCorpusJob,\n getProviderCorpusJob,\n getProviderCorpusJobHits,\n listProviderCorpusJobs,\n updateProviderCorpusJob,\n type ProviderCorpusJobRecord,\n type ProviderCorpusJobStatus,\n} from \"./corpus-jobs-store.js\";\n\ntype ProviderCorpusRuntime = {\n executeRequest(args: ProviderApiRequestArgs): Promise<unknown>;\n};\n\nexport interface CreateProviderCorpusJobActionOptions {\n appId: string;\n getRuntime: () => ProviderCorpusRuntime;\n}\n\nconst MethodSchema = z.enum([\"GET\", \"POST\", \"PUT\", \"PATCH\", \"DELETE\", \"HEAD\"]);\n\nconst ProviderRequestSchema = z.object({\n provider: z.string().min(1).describe(\"Configured provider API id.\"),\n method: MethodSchema.default(\"GET\").describe(\"HTTP method to use.\"),\n path: z.string().min(1).describe(\"Provider API path or allowed full URL.\"),\n query: z.unknown().optional().describe(\"Optional query parameters.\"),\n headers: z.record(z.string(), z.unknown()).optional(),\n body: z.unknown().optional(),\n auth: z.enum([\"default\", \"none\"]).default(\"default\"),\n connectionId: z.string().trim().min(1).optional(),\n accountId: z.string().optional(),\n timeoutMs: z.coerce.number().int().min(1_000).max(120_000).optional(),\n maxBytes: z.coerce\n .number()\n .int()\n .min(1_000)\n .max(4 * 1024 * 1024)\n .optional(),\n});\n\nconst PaginationSchema = z.object({\n itemsPath: z\n .string()\n .optional()\n .describe(\"Dot-path to records in each page, e.g. records.calls.\"),\n nextCursorPath: z\n .string()\n .optional()\n .describe(\"Dot-path to the next cursor in each response.\"),\n cursorPath: z.string().optional().describe(\"Alias for nextCursorPath.\"),\n cursorParam: z\n .string()\n .optional()\n .describe(\"Query parameter that receives the next cursor.\"),\n cursorBodyPath: z\n .string()\n .optional()\n .describe(\"Request body path that receives the next cursor.\"),\n pageParam: z\n .string()\n .optional()\n .describe(\"Query parameter for page-number pagination.\"),\n startPage: z.coerce.number().int().min(0).optional(),\n offsetParam: z\n .string()\n .optional()\n .describe(\"Query parameter for offset pagination.\"),\n startOffset: z.coerce.number().int().min(0).optional(),\n pageSize: z.coerce.number().int().min(1).optional(),\n maxPages: z.coerce\n .number()\n .int()\n .min(1)\n .max(2_000)\n .optional()\n .describe(\"Overall page cap for the job. Default 500.\"),\n});\n\nconst BatchSchema = z.object({\n items: z\n .array(z.unknown())\n .max(10_000)\n .optional()\n .describe(\"Input records or ids to process in batches.\"),\n inputDatasetId: z\n .string()\n .optional()\n .describe(\"Optional staged dataset id to read input records from.\"),\n inputValuePath: z\n .string()\n .optional()\n .describe(\"Dot-path to extract the provider id/value from each input row.\"),\n batchSize: z.coerce.number().int().min(1).max(100).optional(),\n itemBodyPath: z\n .string()\n .optional()\n .describe(\"Dot-path in request body where the current batch array goes.\"),\n itemQueryParam: z\n .string()\n .optional()\n .describe(\"Query parameter where the current batch goes.\"),\n responseItemsPath: z\n .string()\n .optional()\n .describe(\"Dot-path to records in each batch response.\"),\n});\n\nconst SearchSchema = z.object({\n query: z.string().optional().describe(\"Phrase to search for.\"),\n queries: z.array(z.string()).max(50).optional(),\n terms: z\n .array(z.string())\n .max(50)\n .optional()\n .describe(\"Terms for allTerms/anyTerm search.\"),\n regex: z.string().optional(),\n regexFlags: z.string().optional(),\n matchMode: z.enum([\"query\", \"allTerms\", \"anyTerm\"]).optional(),\n caseSensitive: z.boolean().optional(),\n textPaths: z\n .array(z.string())\n .max(100)\n .optional()\n .describe(\"Only search these dot-paths. Omit to search text recursively.\"),\n idPaths: z.array(z.string()).max(100).optional(),\n metadataPaths: z.array(z.string()).max(100).optional(),\n contextChars: z.coerce.number().int().min(20).max(1_000).optional(),\n maxHits: z.coerce.number().int().min(1).max(10_000).optional(),\n maxHitsPerItem: z.coerce.number().int().min(1).max(100).optional(),\n maxFieldsPerItem: z.coerce.number().int().min(1).max(50_000).optional(),\n});\n\nconst LimitsSchema = z.object({\n pageBudget: z.coerce\n .number()\n .int()\n .min(1)\n .max(200)\n .optional()\n .describe(\"Pages to process in this action call. Default 25.\"),\n batchBudget: z.coerce\n .number()\n .int()\n .min(1)\n .max(500)\n .optional()\n .describe(\"Batches to process in this action call. Default 25.\"),\n runtimeMs: z.coerce\n .number()\n .int()\n .min(1_000)\n .max(110_000)\n .optional()\n .describe(\"Wall-clock budget for this action call. Default 90000.\"),\n itemBudget: z.coerce\n .number()\n .int()\n .min(1)\n .max(200_000)\n .optional()\n .describe(\"Response records to search in this action call.\"),\n maxHits: z.coerce\n .number()\n .int()\n .min(1)\n .max(10_000)\n .optional()\n .describe(\"Stored hit cap for the whole job. Default comes from search.\"),\n});\n\nconst ProviderCorpusJobSchema = z.object({\n operation: z\n .enum([\"start\", \"continue\", \"status\", \"results\", \"list\", \"delete\"])\n .default(\"start\"),\n jobId: z\n .string()\n .optional()\n .describe(\"Existing job id for continue/status/results/delete.\"),\n name: z.string().optional().describe(\"Human-readable job name.\"),\n mode: z.enum([\"paginated-search\", \"batch-search\"]).optional(),\n request: ProviderRequestSchema.optional(),\n pagination: PaginationSchema.optional(),\n batch: BatchSchema.optional(),\n search: SearchSchema.optional(),\n limits: LimitsSchema.optional(),\n offset: z.coerce\n .number()\n .int()\n .min(0)\n .optional()\n .describe(\"Results/list offset.\"),\n limit: z.coerce\n .number()\n .int()\n .min(1)\n .max(1_000)\n .optional()\n .describe(\"Results/list limit.\"),\n});\n\nconst ProviderCorpusJobReadSchema = z.object({\n operation: z.enum([\"list\", \"status\", \"results\"]).default(\"list\"),\n jobId: z.string().optional().describe(\"Existing job id for status/results.\"),\n offset: z.coerce.number().int().min(0).optional().describe(\"Results offset.\"),\n limit: z.coerce\n .number()\n .int()\n .min(1)\n .max(1_000)\n .optional()\n .describe(\"Results/list limit.\"),\n});\n\ntype ProviderCorpusJobArgs = z.infer<typeof ProviderCorpusJobSchema>;\ntype ProviderCorpusJobReadArgs = z.infer<typeof ProviderCorpusJobReadSchema>;\ntype ProviderRequest = z.infer<typeof ProviderRequestSchema>;\ntype PaginationConfig = z.infer<typeof PaginationSchema>;\ntype BatchConfig = z.infer<typeof BatchSchema>;\ntype SearchConfig = z.infer<typeof SearchSchema>;\ntype LimitsConfig = z.infer<typeof LimitsSchema>;\n\ninterface SearchHit {\n id: string | null;\n idPath: string | null;\n itemIndex: number;\n path: string;\n kind: string;\n query: string;\n match: string;\n snippet: string;\n matchedTerms?: string[];\n metadata?: Record<string, unknown>;\n pageIndex?: number;\n pageItemIndex?: number;\n batchIndex?: number;\n batchItemIndex?: number;\n}\n\ninterface SearchPageResult {\n searchedItems: number;\n matchedItems: number;\n totalHits: number;\n storedHits: SearchHit[];\n}\n\ninterface ProviderBodyResult {\n body: unknown;\n quota?: { retryAt: string; retryAfterMs: number; reason: string };\n}\n\ninterface MatchRecord {\n kind: string;\n query: string;\n index: number;\n endIndex?: number;\n match: string;\n matchedTerms?: string[];\n snippet?: string;\n}\n\nconst DEFAULT_PAGE_BUDGET = 25;\nconst DEFAULT_BATCH_BUDGET = 25;\nconst DEFAULT_RUNTIME_MS = 90_000;\nconst DEFAULT_BATCH_SIZE = 25;\nconst DEFAULT_OVERALL_MAX_PAGES = 500;\nconst DEFAULT_MAX_HITS = 500;\n\nexport function createProviderCorpusJobAction(\n options: CreateProviderCorpusJobActionOptions,\n) {\n return defineAction({\n description:\n \"Create, continue, inspect, list, read results from, or delete a durable provider corpus search job. \" +\n \"Use this for broad provider searches, cross-source joins, transcript/message/ticket/issue/document scans, batch endpoint walks, and absence-sensitive questions that may exceed one tool call. \" +\n \"The job is generic: paginated-search walks any paginated provider endpoint; batch-search walks a supplied id/record list or staged dataset through any provider endpoint by injecting each batch into a query param or request body path. \" +\n \"Every provider request still goes through provider-api-request credentials, host allow-listing, SSRF blocking, secret redaction, and provider quota cooldown. \" +\n \"When status is paused or quota_wait, call operation=continue with the jobId after the indicated time/budget. Report coverage counts, pagination status, and any remaining gaps.\",\n schema: ProviderCorpusJobSchema,\n http: false,\n run: async (args) => runProviderCorpusJobAction(args, options),\n });\n}\n\nexport function createProviderCorpusJobReadAction(\n options: Pick<CreateProviderCorpusJobActionOptions, \"appId\">,\n) {\n return defineAction({\n description:\n \"Read provider corpus job status and stored results for the current user. \" +\n \"This read-only companion is for UI polling and status surfaces; it cannot start or continue provider requests.\",\n schema: ProviderCorpusJobReadSchema,\n http: { method: \"GET\" },\n readOnly: true,\n agentTool: false,\n run: async (args) => runProviderCorpusJobReadAction(args, options),\n });\n}\n\nasync function runProviderCorpusJobAction(\n args: ProviderCorpusJobArgs,\n options: CreateProviderCorpusJobActionOptions,\n) {\n const ctx = getCredentialContext();\n if (!ctx)\n throw new Error(\"No authenticated context for provider-corpus-job.\");\n\n if (args.operation === \"list\") {\n const jobs = await listProviderCorpusJobs({\n appId: options.appId,\n ownerEmail: ctx.userEmail,\n limit: args.limit,\n });\n return { jobs: jobs.map(jobSummary), total: jobs.length };\n }\n\n if (args.operation === \"start\") {\n const job = await startJob(args, options.appId, ctx.userEmail);\n return continueJob(job, args.limits, options.getRuntime());\n }\n\n const jobId = args.jobId?.trim();\n if (!jobId) throw new Error(`${args.operation} requires jobId.`);\n\n if (args.operation === \"delete\") {\n const deleted = await deleteProviderCorpusJob({\n id: jobId,\n appId: options.appId,\n ownerEmail: ctx.userEmail,\n });\n if (!deleted) {\n throw new Error(\n `Provider corpus job ${jobId} not found or belongs to another owner/app.`,\n );\n }\n return { deleted: true, jobId };\n }\n\n const job = await getProviderCorpusJob({\n id: jobId,\n appId: options.appId,\n ownerEmail: ctx.userEmail,\n });\n if (!job) {\n throw new Error(\n `Provider corpus job ${jobId} not found or belongs to another owner/app.`,\n );\n }\n\n if (args.operation === \"status\") return jobStatus(job);\n if (args.operation === \"results\") {\n const hits = await getProviderCorpusJobHits({\n jobId,\n appId: options.appId,\n ownerEmail: ctx.userEmail,\n offset: args.offset,\n limit: args.limit,\n });\n return {\n ...jobStatus(job),\n hits,\n offset: args.offset ?? 0,\n limit: args.limit ?? 100,\n };\n }\n if (args.operation === \"continue\") {\n return continueJob(job, args.limits, options.getRuntime());\n }\n\n throw new Error(`Unsupported provider corpus operation ${args.operation}.`);\n}\n\nasync function runProviderCorpusJobReadAction(\n args: ProviderCorpusJobReadArgs,\n options: Pick<CreateProviderCorpusJobActionOptions, \"appId\">,\n) {\n const ctx = getCredentialContext();\n if (!ctx)\n throw new Error(\"No authenticated context for provider corpus jobs.\");\n\n if (args.operation === \"list\") {\n const jobs = await listProviderCorpusJobs({\n appId: options.appId,\n ownerEmail: ctx.userEmail,\n limit: args.limit,\n });\n return { jobs: jobs.map(jobStatus), total: jobs.length };\n }\n\n const jobId = args.jobId?.trim();\n if (!jobId) throw new Error(`${args.operation} requires jobId.`);\n\n const job = await getProviderCorpusJob({\n id: jobId,\n appId: options.appId,\n ownerEmail: ctx.userEmail,\n });\n if (!job) {\n throw new Error(\n `Provider corpus job ${jobId} not found or belongs to another owner/app.`,\n );\n }\n\n if (args.operation === \"status\") return jobStatus(job);\n const hits = await getProviderCorpusJobHits({\n jobId,\n appId: options.appId,\n ownerEmail: ctx.userEmail,\n offset: args.offset,\n limit: args.limit,\n });\n return {\n ...jobStatus(job),\n hits,\n offset: args.offset ?? 0,\n limit: args.limit ?? 100,\n };\n}\n\nasync function startJob(\n args: ProviderCorpusJobArgs,\n appId: string,\n ownerEmail: string,\n): Promise<ProviderCorpusJobRecord> {\n if (!args.mode) throw new Error(\"start requires mode.\");\n if (!args.request) throw new Error(\"start requires request.\");\n const search = args.search ?? {};\n if (!hasSearchNeedle(search)) {\n throw new Error(\n \"start requires search.query, search.queries, search.terms, or search.regex.\",\n );\n }\n if (args.mode === \"paginated-search\" && !args.pagination) {\n throw new Error(\"paginated-search requires pagination.\");\n }\n if (args.mode === \"batch-search\") {\n if (!args.batch) throw new Error(\"batch-search requires batch config.\");\n if (!args.batch.itemBodyPath && !args.batch.itemQueryParam) {\n throw new Error(\n \"batch-search requires batch.itemBodyPath or batch.itemQueryParam.\",\n );\n }\n if (!args.batch.items?.length && !args.batch.inputDatasetId) {\n throw new Error(\"batch-search requires batch.items or inputDatasetId.\");\n }\n }\n\n const id = args.jobId?.trim() || `pcj_${randomUUID().replace(/-/g, \"\")}`;\n const request = cleanRequest(args.request);\n const checkpoint =\n args.mode === \"batch-search\"\n ? { nextIndex: 0, sourceItemCount: null }\n : {\n pageIndex: 0,\n cursor: null,\n pageNumber: args.pagination?.startPage ?? 1,\n offset: args.pagination?.startOffset ?? 0,\n lastCursor: null,\n stoppedReason: null,\n };\n\n return createProviderCorpusJob({\n id,\n appId,\n ownerEmail,\n name: args.name?.trim() || id,\n mode: args.mode,\n status: \"paused\",\n provider: request.provider,\n request: request as unknown as Record<string, unknown>,\n pagination:\n (args.pagination as Record<string, unknown> | undefined) ?? null,\n batch: (args.batch as Record<string, unknown> | undefined) ?? null,\n search: search as Record<string, unknown>,\n limits: (args.limits as Record<string, unknown> | undefined) ?? {},\n checkpoint,\n });\n}\n\nasync function continueJob(\n job: ProviderCorpusJobRecord,\n overrideLimits: LimitsConfig | undefined,\n runtime: ProviderCorpusRuntime,\n) {\n if (job.status === \"completed\") return jobStatus(job);\n\n const limits = normalizeLimits({\n ...(job.limits as LimitsConfig),\n ...(overrideLimits ?? {}),\n });\n await updateProviderCorpusJob({\n id: job.id,\n appId: job.appId,\n ownerEmail: job.ownerEmail,\n status: \"running\",\n error: null,\n nextResumeAt: null,\n });\n\n try {\n const refreshed = await getProviderCorpusJob({\n id: job.id,\n appId: job.appId,\n ownerEmail: job.ownerEmail,\n });\n if (!refreshed)\n throw new Error(`Provider corpus job ${job.id} disappeared.`);\n const next =\n refreshed.mode === \"batch-search\"\n ? await runBatchSearch(refreshed, limits, runtime)\n : await runPaginatedSearch(refreshed, limits, runtime);\n const hits = await getProviderCorpusJobHits({\n jobId: next.id,\n appId: next.appId,\n ownerEmail: next.ownerEmail,\n limit: 25,\n });\n return {\n ...jobStatus(next),\n sampleHits: hits,\n nextAction: nextAction(next),\n };\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n const failed =\n (await updateProviderCorpusJob({\n id: job.id,\n appId: job.appId,\n ownerEmail: job.ownerEmail,\n status: \"failed\",\n error: message,\n })) ?? job;\n return { ...jobStatus(failed), nextAction: nextAction(failed) };\n }\n}\n\nasync function runPaginatedSearch(\n job: ProviderCorpusJobRecord,\n limits: Required<LimitsConfig>,\n runtime: ProviderCorpusRuntime,\n): Promise<ProviderCorpusJobRecord> {\n const startedAt = Date.now();\n const pagination = normalizePagination(job.pagination);\n const request = job.request as ProviderRequest;\n const search = job.search as SearchConfig;\n const checkpoint = { ...job.checkpoint };\n const maxPages = pagination.maxPages ?? DEFAULT_OVERALL_MAX_PAGES;\n let pageIndex = numberValue(checkpoint.pageIndex, 0);\n let cursor = valueOrNull(checkpoint.cursor);\n let pageNumber = numberValue(\n checkpoint.pageNumber,\n pagination.startPage ?? 1,\n );\n let offset = numberValue(checkpoint.offset, pagination.startOffset ?? 0);\n let pagesThisCall = 0;\n let itemsThisCall = 0;\n let current = job;\n\n while (\n pagesThisCall < limits.pageBudget &&\n pageIndex < maxPages &&\n itemsThisCall < limits.itemBudget &&\n Date.now() - startedAt < limits.runtimeMs\n ) {\n const pageRequest = buildPaginatedRequest(request, pagination, {\n pageIndex,\n cursor,\n pageNumber,\n offset,\n });\n const provider = await callProvider(runtime, pageRequest);\n if (provider.quota) {\n return pauseForQuota(\n current,\n {\n ...checkpoint,\n pageIndex,\n cursor,\n pageNumber,\n offset,\n },\n provider.quota,\n );\n }\n\n const items = extractItemsArray(provider.body, pagination.itemsPath, false);\n const nextCursorPath = pagination.nextCursorPath || pagination.cursorPath;\n const nextCursor = nextCursorPath\n ? valueOrNull(getAtPath(provider.body, nextCursorPath))\n : null;\n const searchResult = searchItems(items, search, {\n baseItemIndex: current.itemsProcessed,\n maxStoredHits: Math.max(0, limits.maxHits - current.storedHits),\n pageIndex,\n });\n const storedHits = searchResult.storedHits.map((hit) => hitToRecord(hit));\n await appendProviderCorpusJobHits({\n jobId: job.id,\n startIndex: current.storedHits,\n hits: storedHits,\n });\n\n pagesThisCall++;\n itemsThisCall += searchResult.searchedItems;\n const nextCheckpoint: Record<string, unknown> = {\n ...checkpoint,\n pageIndex: pageIndex + 1,\n cursor: nextCursor,\n pageNumber,\n offset,\n lastCursor: nextCursor,\n stoppedReason: null,\n };\n\n let status: ProviderCorpusJobStatus = \"paused\";\n let stoppedReason: string | null = null;\n if (items.length === 0) {\n status = \"completed\";\n stoppedReason = \"empty-page\";\n } else if (nextCursorPath) {\n if (!nextCursor) {\n status = \"completed\";\n stoppedReason = \"no-next-cursor\";\n } else if (cursor !== null && String(nextCursor) === String(cursor)) {\n status = \"completed\";\n stoppedReason = \"repeated-cursor\";\n } else {\n cursor = nextCursor;\n }\n } else if (pagination.pageParam) {\n pageNumber += 1;\n nextCheckpoint.pageNumber = pageNumber;\n } else if (pagination.offsetParam) {\n const step = pagination.pageSize || items.length;\n offset += step;\n nextCheckpoint.offset = offset;\n if (pagination.pageSize && items.length < pagination.pageSize) {\n status = \"completed\";\n stoppedReason = \"short-page\";\n }\n } else {\n status = \"completed\";\n stoppedReason = \"single-page\";\n }\n\n if (pageIndex + 1 >= maxPages && status !== \"completed\") {\n status = \"completed\";\n stoppedReason = \"max-pages\";\n }\n\n nextCheckpoint.stoppedReason = stoppedReason;\n current =\n (await updateProviderCorpusJob({\n id: job.id,\n appId: job.appId,\n ownerEmail: job.ownerEmail,\n status,\n checkpoint: nextCheckpoint,\n pagesProcessed: current.pagesProcessed + 1,\n itemsProcessed: current.itemsProcessed + searchResult.searchedItems,\n matchedItems: current.matchedItems + searchResult.matchedItems,\n totalHits: current.totalHits + searchResult.totalHits,\n storedHits: current.storedHits + storedHits.length,\n error: null,\n nextResumeAt: null,\n })) ?? current;\n\n pageIndex += 1;\n if (status === \"completed\") return current;\n }\n\n return pauseForBudget(current, {\n ...checkpoint,\n pageIndex,\n cursor,\n pageNumber,\n offset,\n stoppedReason: \"budget\",\n });\n}\n\nasync function runBatchSearch(\n job: ProviderCorpusJobRecord,\n limits: Required<LimitsConfig>,\n runtime: ProviderCorpusRuntime,\n): Promise<ProviderCorpusJobRecord> {\n const startedAt = Date.now();\n const batch = normalizeBatch(job.batch);\n const request = job.request as ProviderRequest;\n const search = job.search as SearchConfig;\n const sourceItems = await loadBatchSourceItems(job, batch);\n const totalSourceItems = sourceItems.length;\n let nextIndex = numberValue(job.checkpoint.nextIndex, 0);\n let batchesThisCall = 0;\n let itemsThisCall = 0;\n let current = job;\n\n while (\n nextIndex < totalSourceItems &&\n batchesThisCall < limits.batchBudget &&\n itemsThisCall < limits.itemBudget &&\n Date.now() - startedAt < limits.runtimeMs\n ) {\n const slice = sourceItems.slice(nextIndex, nextIndex + batch.batchSize);\n const values = slice\n .map((item) =>\n batch.inputValuePath ? getAtPath(item, batch.inputValuePath) : item,\n )\n .filter((value) => value !== undefined && value !== null);\n if (values.length === 0) {\n nextIndex += slice.length || batch.batchSize;\n continue;\n }\n\n const batchRequest = buildBatchRequest(request, batch, values);\n const provider = await callProvider(runtime, batchRequest);\n if (provider.quota) {\n return pauseForQuota(\n current,\n {\n ...job.checkpoint,\n nextIndex,\n sourceItemCount: totalSourceItems,\n },\n provider.quota,\n );\n }\n\n const items = extractItemsArray(\n provider.body,\n batch.responseItemsPath,\n true,\n );\n const searchResult = searchItems(items, search, {\n baseItemIndex: current.itemsProcessed,\n maxStoredHits: Math.max(0, limits.maxHits - current.storedHits),\n batchIndex: current.batchesProcessed,\n });\n const storedHits = searchResult.storedHits.map((hit) => hitToRecord(hit));\n await appendProviderCorpusJobHits({\n jobId: job.id,\n startIndex: current.storedHits,\n hits: storedHits,\n });\n\n batchesThisCall++;\n itemsThisCall += searchResult.searchedItems;\n nextIndex += slice.length;\n const status: ProviderCorpusJobStatus =\n nextIndex >= totalSourceItems ? \"completed\" : \"paused\";\n\n current =\n (await updateProviderCorpusJob({\n id: job.id,\n appId: job.appId,\n ownerEmail: job.ownerEmail,\n status,\n checkpoint: {\n ...job.checkpoint,\n nextIndex,\n sourceItemCount: totalSourceItems,\n stoppedReason: status === \"completed\" ? \"completed\" : \"budget\",\n },\n batchesProcessed: current.batchesProcessed + 1,\n itemsProcessed: current.itemsProcessed + searchResult.searchedItems,\n matchedItems: current.matchedItems + searchResult.matchedItems,\n totalHits: current.totalHits + searchResult.totalHits,\n storedHits: current.storedHits + storedHits.length,\n error: null,\n nextResumeAt: null,\n })) ?? current;\n\n if (status === \"completed\") return current;\n }\n\n return pauseForBudget(current, {\n ...job.checkpoint,\n nextIndex,\n sourceItemCount: totalSourceItems,\n stoppedReason: \"budget\",\n });\n}\n\nasync function pauseForQuota(\n job: ProviderCorpusJobRecord,\n checkpoint: Record<string, unknown>,\n quota: { retryAt: string; retryAfterMs: number; reason: string },\n): Promise<ProviderCorpusJobRecord> {\n return (\n (await updateProviderCorpusJob({\n id: job.id,\n appId: job.appId,\n ownerEmail: job.ownerEmail,\n status: \"quota_wait\",\n checkpoint,\n error: `Provider quota exhausted. Retry after ${quota.retryAt}.`,\n nextResumeAt: parseRetryAt(quota.retryAt, quota.retryAfterMs),\n })) ?? job\n );\n}\n\nasync function pauseForBudget(\n job: ProviderCorpusJobRecord,\n checkpoint: Record<string, unknown>,\n): Promise<ProviderCorpusJobRecord> {\n return (\n (await updateProviderCorpusJob({\n id: job.id,\n appId: job.appId,\n ownerEmail: job.ownerEmail,\n status: \"paused\",\n checkpoint,\n error: null,\n nextResumeAt: null,\n })) ?? job\n );\n}\n\nasync function callProvider(\n runtime: ProviderCorpusRuntime,\n request: ProviderRequest,\n): Promise<ProviderBodyResult> {\n const raw = (await runtime.executeRequest(cleanRequest(request))) as Record<\n string,\n unknown\n >;\n const response = raw.response as Record<string, unknown> | undefined;\n if (!response) {\n return { body: raw };\n }\n const quota = readQuota(response);\n if (quota) return { body: null, quota };\n if (response.ok !== true) {\n const status = response.status ?? \"unknown\";\n const detail = response.text ?? response.json ?? response.statusText ?? \"\";\n throw new Error(\n `Provider request failed (${status}): ${stringifyBrief(detail, 500)}`,\n );\n }\n return {\n body:\n response.json ??\n (typeof response.text === \"string\" ? tryParseJson(response.text) : null),\n };\n}\n\nasync function loadBatchSourceItems(\n job: ProviderCorpusJobRecord,\n batch: Required<BatchConfig>,\n): Promise<unknown[]> {\n if (batch.items.length > 0) return batch.items;\n if (!batch.inputDatasetId) return [];\n return getStagedDatasetRows({\n id: batch.inputDatasetId,\n appId: job.appId,\n ownerEmail: job.ownerEmail,\n });\n}\n\nfunction cleanRequest(request: ProviderRequest): ProviderApiRequestArgs {\n return {\n provider: request.provider,\n method: request.method as ProviderApiMethod,\n path: request.path,\n query: request.query,\n headers: request.headers,\n body: request.body,\n auth: request.auth,\n connectionId: request.connectionId,\n accountId: request.accountId,\n timeoutMs: request.timeoutMs,\n maxBytes: request.maxBytes,\n };\n}\n\nfunction buildPaginatedRequest(\n request: ProviderRequest,\n pagination: Required<PaginationConfig>,\n state: {\n pageIndex: number;\n cursor: unknown;\n pageNumber: number;\n offset: number;\n },\n): ProviderRequest {\n let query = cloneRecord(request.query);\n let body = request.body;\n if (pagination.pageParam) {\n query = { ...query, [pagination.pageParam]: state.pageNumber };\n }\n if (pagination.offsetParam) {\n query = { ...query, [pagination.offsetParam]: state.offset };\n }\n if (state.pageIndex > 0 && state.cursor != null) {\n if (pagination.cursorParam) {\n query = { ...query, [pagination.cursorParam]: state.cursor };\n }\n if (pagination.cursorBodyPath) {\n body = setAtPath(body, pagination.cursorBodyPath, state.cursor);\n }\n }\n return { ...request, query, body };\n}\n\nfunction buildBatchRequest(\n request: ProviderRequest,\n batch: Required<BatchConfig>,\n values: unknown[],\n): ProviderRequest {\n let query = cloneRecord(request.query);\n let body = request.body;\n const payload = values.length === 1 ? values[0] : values;\n if (batch.itemQueryParam) {\n query = { ...query, [batch.itemQueryParam]: payload };\n }\n if (batch.itemBodyPath) {\n body = setAtPath(body, batch.itemBodyPath, values);\n }\n return { ...request, query, body };\n}\n\nfunction searchItems(\n items: unknown[],\n search: SearchConfig,\n options: {\n baseItemIndex: number;\n maxStoredHits: number;\n pageIndex?: number;\n batchIndex?: number;\n },\n): SearchPageResult {\n const maxStoredHits = Math.max(0, options.maxStoredHits);\n const maxHitsPerItem = boundedNumber(search.maxHitsPerItem, 3, 1, 100);\n const maxFieldsPerItem = boundedNumber(\n search.maxFieldsPerItem,\n 5_000,\n 1,\n 50_000,\n );\n let matchedItems = 0;\n let totalHits = 0;\n const storedHits: SearchHit[] = [];\n\n for (let itemOffset = 0; itemOffset < items.length; itemOffset++) {\n const item = items[itemOffset];\n const fields = collectSearchStrings(\n item,\n search.textPaths,\n maxFieldsPerItem,\n );\n const identity = extractItemIdentity(item, search.idPaths);\n const metadata = extractMetadata(item, search.metadataPaths);\n let itemMatched = false;\n let storedForItem = 0;\n const itemWideTermMatch = findItemWideTermMatch(fields, search);\n\n const addHit = (field: TextField, match: MatchRecord) => {\n totalHits++;\n if (!itemMatched) {\n matchedItems++;\n itemMatched = true;\n }\n if (storedHits.length < maxStoredHits && storedForItem < maxHitsPerItem) {\n storedForItem++;\n storedHits.push({\n id: identity.id,\n idPath: identity.idPath,\n itemIndex: options.baseItemIndex + itemOffset,\n pageIndex: options.pageIndex,\n pageItemIndex:\n options.pageIndex === undefined ? undefined : itemOffset,\n batchIndex: options.batchIndex,\n batchItemIndex:\n options.batchIndex === undefined ? undefined : itemOffset,\n path: field.path,\n kind: match.kind,\n query: match.query,\n match: match.match,\n snippet:\n match.snippet ??\n makeSnippet(\n field.text,\n match.index,\n search.contextChars,\n match.endIndex,\n ),\n ...(match.matchedTerms?.length\n ? { matchedTerms: match.matchedTerms }\n : {}),\n ...(Object.keys(metadata).length ? { metadata } : {}),\n });\n }\n };\n\n if (itemWideTermMatch) {\n addHit(itemWideTermMatch.field, itemWideTermMatch.match);\n }\n\n for (const field of fields) {\n const matches = findSearchMatches(field.text, search, !itemWideTermMatch);\n for (const match of matches) addHit(field, match);\n }\n }\n\n return {\n searchedItems: items.length,\n matchedItems,\n totalHits,\n storedHits,\n };\n}\n\nfunction normalizeLimits(input: LimitsConfig): Required<LimitsConfig> {\n const maxHits = input.maxHits ?? DEFAULT_MAX_HITS;\n return {\n pageBudget: input.pageBudget ?? DEFAULT_PAGE_BUDGET,\n batchBudget: input.batchBudget ?? DEFAULT_BATCH_BUDGET,\n runtimeMs: input.runtimeMs ?? DEFAULT_RUNTIME_MS,\n itemBudget: input.itemBudget ?? 200_000,\n maxHits,\n };\n}\n\nfunction normalizePagination(\n input: Record<string, unknown> | null,\n): Required<PaginationConfig> {\n const parsed = PaginationSchema.parse(input ?? {});\n return {\n itemsPath: parsed.itemsPath ?? \"\",\n nextCursorPath: parsed.nextCursorPath ?? \"\",\n cursorPath: parsed.cursorPath ?? \"\",\n cursorParam: parsed.cursorParam ?? \"\",\n cursorBodyPath: parsed.cursorBodyPath ?? \"\",\n pageParam: parsed.pageParam ?? \"\",\n startPage: parsed.startPage ?? 1,\n offsetParam: parsed.offsetParam ?? \"\",\n startOffset: parsed.startOffset ?? 0,\n pageSize: parsed.pageSize ?? 0,\n maxPages: parsed.maxPages ?? DEFAULT_OVERALL_MAX_PAGES,\n };\n}\n\nfunction normalizeBatch(\n input: Record<string, unknown> | null,\n): Required<BatchConfig> {\n const parsed = BatchSchema.parse(input ?? {});\n return {\n items: parsed.items ?? [],\n inputDatasetId: parsed.inputDatasetId ?? \"\",\n inputValuePath: parsed.inputValuePath ?? \"\",\n batchSize: parsed.batchSize ?? DEFAULT_BATCH_SIZE,\n itemBodyPath: parsed.itemBodyPath ?? \"\",\n itemQueryParam: parsed.itemQueryParam ?? \"\",\n responseItemsPath: parsed.responseItemsPath ?? \"\",\n };\n}\n\nfunction jobStatus(job: ProviderCorpusJobRecord) {\n const nextResumeAtIso = job.nextResumeAt\n ? new Date(job.nextResumeAt).toISOString()\n : null;\n return {\n job: jobSummary(job),\n coverage: {\n pagesProcessed: job.pagesProcessed,\n batchesProcessed: job.batchesProcessed,\n itemsProcessed: job.itemsProcessed,\n matchedItems: job.matchedItems,\n totalHits: job.totalHits,\n storedHits: job.storedHits,\n truncatedHits: job.totalHits > job.storedHits,\n },\n checkpoint: job.checkpoint,\n error: job.error,\n nextResumeAt: nextResumeAtIso,\n };\n}\n\nfunction jobSummary(job: ProviderCorpusJobRecord) {\n return {\n id: job.id,\n name: job.name,\n mode: job.mode,\n status: job.status,\n provider: job.provider,\n createdAt: new Date(job.createdAt).toISOString(),\n updatedAt: new Date(job.updatedAt).toISOString(),\n };\n}\n\nfunction nextAction(job: ProviderCorpusJobRecord): string {\n if (job.status === \"completed\") {\n return `Read all stored hits with operation=\"results\", jobId=\"${job.id}\".`;\n }\n if (job.status === \"quota_wait\") {\n const at = job.nextResumeAt\n ? new Date(job.nextResumeAt).toISOString()\n : \"later\";\n return `Provider quota is cooling down. Continue this job after ${at} with operation=\"continue\", jobId=\"${job.id}\".`;\n }\n if (job.status === \"paused\") {\n return `Continue this job with operation=\"continue\", jobId=\"${job.id}\" until completed or quota_wait.`;\n }\n if (job.status === \"failed\") {\n return 'Fix the request/configuration or start a new job; progress and stored hits are still inspectable with operation=\"results\".';\n }\n return `Check status with operation=\"status\", jobId=\"${job.id}\".`;\n}\n\nfunction extractItemsArray(\n body: unknown,\n itemsPath: string | undefined,\n wrapObjectFallback: boolean,\n): unknown[] {\n if (Array.isArray(body)) return body;\n if (!body || typeof body !== \"object\") return [];\n if (itemsPath) {\n const found = getAtPath(body, itemsPath);\n if (Array.isArray(found)) return found;\n if (found !== undefined && wrapObjectFallback) return [found];\n return [];\n }\n const obj = body as Record<string, unknown>;\n for (const key of [\n \"data\",\n \"results\",\n \"items\",\n \"records\",\n \"rows\",\n \"calls\",\n \"callTranscripts\",\n \"transcripts\",\n \"messages\",\n \"tickets\",\n \"issues\",\n \"deals\",\n \"events\",\n \"notes\",\n \"documents\",\n \"entries\",\n \"objects\",\n ]) {\n if (Array.isArray(obj[key])) return obj[key] as unknown[];\n }\n const arrayFields = Object.values(obj).filter(Array.isArray);\n if (arrayFields.length === 1) return arrayFields[0] as unknown[];\n return wrapObjectFallback ? [body] : [];\n}\n\nfunction hasSearchNeedle(search: SearchConfig): boolean {\n return Boolean(\n search.query ||\n search.regex ||\n search.queries?.length ||\n search.terms?.length,\n );\n}\n\nfunction readQuota(response: Record<string, unknown>) {\n const quota = response.quota as Record<string, unknown> | undefined;\n if (quota?.exhausted === true && typeof quota.retryAt === \"string\") {\n return {\n retryAt: quota.retryAt,\n retryAfterMs: numberValue(quota.retryAfterMs, 0),\n reason: String(quota.reason ?? \"quota\"),\n };\n }\n const json = response.json as Record<string, unknown> | undefined;\n if (\n json?.error === \"provider_quota_exhausted\" &&\n typeof json.retryAt === \"string\"\n ) {\n return {\n retryAt: json.retryAt,\n retryAfterMs: numberValue(json.retryAfterMs, 0),\n reason: String(json.reason ?? \"quota\"),\n };\n }\n return null;\n}\n\nfunction hitToRecord(hit: SearchHit): Record<string, unknown> {\n return Object.fromEntries(\n Object.entries(hit).filter(([, value]) => value !== undefined),\n );\n}\n\nfunction tryParseJson(text: string): unknown {\n try {\n return JSON.parse(text) as unknown;\n } catch {\n return text;\n }\n}\n\nfunction stringifyBrief(value: unknown, maxChars: number): string {\n const text = typeof value === \"string\" ? value : JSON.stringify(value);\n return text.slice(0, maxChars);\n}\n\nfunction cloneRecord(value: unknown): Record<string, unknown> {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return {};\n return JSON.parse(JSON.stringify(value)) as Record<string, unknown>;\n}\n\nfunction valueOrNull(value: unknown): unknown | null {\n if (\n value === undefined ||\n value === null ||\n value === \"\" ||\n value === false\n ) {\n return null;\n }\n return value;\n}\n\nfunction numberValue(value: unknown, fallback: number): number {\n const parsed = Number(value);\n return Number.isFinite(parsed) ? parsed : fallback;\n}\n\nfunction parseRetryAt(retryAt: string, retryAfterMs: number): number {\n const parsed = Date.parse(retryAt);\n if (Number.isFinite(parsed)) return parsed;\n return Date.now() + Math.max(0, retryAfterMs);\n}\n\nfunction boundedNumber(\n value: unknown,\n fallback: number,\n min: number,\n max: number,\n): number {\n const parsed = Number(value);\n const finite = Number.isFinite(parsed) ? parsed : fallback;\n return Math.max(min, Math.min(max, finite));\n}\n\nfunction pathParts(path: string | undefined): string[] {\n if (!path) return [];\n return path\n .replace(/\\[(\\d+)\\]/g, \".$1\")\n .split(\".\")\n .map((part) => part.trim())\n .filter(Boolean);\n}\n\nfunction getAtPath(value: unknown, path: string | undefined): unknown {\n let current = value;\n for (const part of pathParts(path)) {\n if (current === undefined || current === null) return undefined;\n if (typeof current !== \"object\") return undefined;\n current = (current as Record<string, unknown>)[part];\n }\n return current;\n}\n\nfunction setAtPath(base: unknown, path: string, value: unknown): unknown {\n const parts = pathParts(path);\n if (!parts.length) return value;\n const root =\n base && typeof base === \"object\" && !Array.isArray(base)\n ? (JSON.parse(JSON.stringify(base)) as Record<string, unknown>)\n : {};\n let current = root;\n for (const part of parts.slice(0, -1)) {\n const existing = current[part];\n const next =\n existing && typeof existing === \"object\" && !Array.isArray(existing)\n ? { ...(existing as Record<string, unknown>) }\n : {};\n current[part] = next;\n current = next;\n }\n current[parts[parts.length - 1]!] = value;\n return root;\n}\n\ninterface TextField {\n path: string;\n text: string;\n}\n\nfunction collectSearchStrings(\n item: unknown,\n textPaths: string[] | undefined,\n maxFields: number,\n): TextField[] {\n const paths = (textPaths ?? []).filter((path) => path.trim());\n if (!paths.length) return collectStrings(item, \"\", [], maxFields);\n const fields: TextField[] = [];\n for (const path of paths) {\n const value = getAtPath(item, path);\n if (value !== undefined) collectStrings(value, path, fields, maxFields);\n if (fields.length >= maxFields) break;\n }\n return fields;\n}\n\nfunction collectStrings(\n value: unknown,\n basePath: string,\n out: TextField[],\n limit: number,\n): TextField[] {\n if (out.length >= limit || value === undefined || value === null) return out;\n if (\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"boolean\" ||\n typeof value === \"bigint\"\n ) {\n out.push({ path: basePath || \"$\", text: String(value) });\n return out;\n }\n if (Array.isArray(value)) {\n for (let i = 0; i < value.length && out.length < limit; i++) {\n collectStrings(\n value[i],\n basePath ? `${basePath}[${i}]` : `[${i}]`,\n out,\n limit,\n );\n }\n return out;\n }\n if (typeof value === \"object\") {\n for (const key of Object.keys(value as Record<string, unknown>)) {\n if (out.length >= limit) break;\n collectStrings(\n (value as Record<string, unknown>)[key],\n basePath ? `${basePath}.${key}` : key,\n out,\n limit,\n );\n }\n }\n return out;\n}\n\nconst DEFAULT_ID_PATHS = [\n \"id\",\n \"callId\",\n \"callID\",\n \"call_id\",\n \"call.id\",\n \"call.metaData.id\",\n \"metaData.id\",\n \"metadata.id\",\n \"recordId\",\n \"record_id\",\n \"objectId\",\n \"object_id\",\n \"ticketId\",\n \"ticket_id\",\n \"issueId\",\n \"issue_id\",\n \"messageId\",\n \"message_id\",\n \"conversationId\",\n \"conversation_id\",\n \"eventId\",\n \"event_id\",\n \"documentId\",\n \"document_id\",\n \"url\",\n \"webUrl\",\n \"permalink\",\n];\n\nfunction extractItemIdentity(\n item: unknown,\n idPaths: string[] | undefined,\n): { id: string | null; idPath: string | null } {\n for (const path of [...(idPaths ?? []), ...DEFAULT_ID_PATHS]) {\n const value = getAtPath(item, path);\n if (value !== undefined && value !== null && String(value) !== \"\") {\n return { id: stringifySearchValue(value), idPath: path };\n }\n }\n return { id: null, idPath: null };\n}\n\nfunction extractMetadata(\n item: unknown,\n metadataPaths: string[] | undefined,\n): Record<string, unknown> {\n const metadata: Record<string, unknown> = {};\n for (const path of metadataPaths ?? []) {\n const value = getAtPath(item, path);\n if (value !== undefined) metadata[path] = value;\n }\n return metadata;\n}\n\nfunction stringifySearchValue(value: unknown): string {\n if (typeof value === \"string\") return value;\n if (value === undefined || value === null) return \"\";\n if (\n typeof value === \"number\" ||\n typeof value === \"boolean\" ||\n typeof value === \"bigint\"\n ) {\n return String(value);\n }\n return stringifyBrief(value, 500);\n}\n\nfunction normalizedTerms(search: SearchConfig): string[] {\n const explicit = (search.terms ?? [])\n .map((term) => term.trim())\n .filter(Boolean);\n if (explicit.length) return explicit;\n if (search.matchMode === \"allTerms\" && search.query) {\n return search.query\n .split(/\\s+/)\n .map((term) => term.trim())\n .filter(Boolean);\n }\n return [];\n}\n\nfunction findItemWideTermMatch(fields: TextField[], search: SearchConfig) {\n const terms = normalizedTerms(search);\n if (!terms.length || search.matchMode === \"anyTerm\") return null;\n const caseSensitive = Boolean(search.caseSensitive);\n const fieldWindows = fields\n .map((field) => {\n const hits = bestTermClusterInText(field.text, terms, caseSensitive).map(\n (hit) => ({ ...hit, field }),\n );\n if (hits.length !== terms.length) return null;\n const start = Math.min(...hits.map((hit) => hit.index));\n const end = Math.max(...hits.map((hit) => hit.end));\n return {\n field,\n hits,\n start,\n end,\n length: end - start,\n };\n })\n .filter(\n (\n result,\n ): result is {\n field: TextField;\n hits: TermHit[];\n start: number;\n end: number;\n length: number;\n } => Boolean(result),\n )\n .sort((a, b) => a.length - b.length || a.start - b.start);\n\n const bestFieldWindow = fieldWindows[0];\n if (bestFieldWindow) {\n const context = boundedNumber(search.contextChars, 180, 20, 1_000);\n const snippet =\n bestFieldWindow.length > context * 4\n ? makeCombinedTermSnippet(bestFieldWindow.hits, search.contextChars)\n : undefined;\n return {\n field: bestFieldWindow.field,\n match: {\n kind: \"allTerms\",\n query: terms.join(\" \"),\n index: bestFieldWindow.start,\n endIndex: bestFieldWindow.end,\n match: bestFieldWindow.field.text.slice(\n bestFieldWindow.start,\n bestFieldWindow.end,\n ),\n matchedTerms: terms,\n snippet,\n },\n };\n }\n\n const termHits = terms.map((term) => {\n for (const field of fields) {\n const hit = firstTermHitInField(field, term, caseSensitive);\n if (hit) return hit;\n }\n return null;\n });\n if (termHits.some((hit) => !hit)) return null;\n const hits = termHits.filter(isTermHit);\n const first = hits.sort((a, b) => a.index - b.index)[0];\n if (!first) return null;\n return {\n field: first.field,\n match: {\n kind: \"allTerms\",\n query: terms.join(\" \"),\n index: first.index,\n endIndex: first.end,\n match: first.match,\n matchedTerms: terms,\n snippet: makeCombinedTermSnippet(hits, search.contextChars),\n },\n };\n}\n\nfunction findSearchMatches(\n text: string,\n search: SearchConfig,\n includeTerms: boolean,\n): MatchRecord[] {\n const source = String(text);\n const caseSensitive = Boolean(search.caseSensitive);\n const haystack = caseSensitive ? source : source.toLowerCase();\n const maxMatchesPerField = 1_000;\n const matches: MatchRecord[] = [];\n\n const addSubstring = (needle: unknown, label: string, kind: string) => {\n if (needle === undefined || needle === null) return;\n const rawNeedle = String(needle);\n if (!rawNeedle) return;\n const searchNeedle = caseSensitive ? rawNeedle : rawNeedle.toLowerCase();\n let from = 0;\n while (from <= haystack.length) {\n const index = haystack.indexOf(searchNeedle, from);\n if (index < 0) break;\n matches.push({\n kind,\n query: label,\n index,\n match: source.slice(index, index + rawNeedle.length),\n });\n from = index + Math.max(1, searchNeedle.length);\n if (matches.length >= maxMatchesPerField) break;\n }\n };\n\n if (search.regex) {\n const regex = new RegExp(\n search.regex,\n normalizeRegexFlags(search.regexFlags, caseSensitive),\n );\n let match: RegExpExecArray | null;\n while ((match = regex.exec(source)) && typeof match.index === \"number\") {\n matches.push({\n kind: \"regex\",\n query: search.regex,\n index: match.index,\n match: match[0],\n });\n if (matches.length >= maxMatchesPerField) break;\n if (match[0] === \"\") regex.lastIndex += 1;\n }\n }\n\n if (search.query) addSubstring(search.query, search.query, \"query\");\n for (const query of search.queries ?? []) addSubstring(query, query, \"query\");\n\n const terms = includeTerms ? normalizedTerms(search) : [];\n if (terms.length) {\n const mode = search.matchMode === \"anyTerm\" ? \"anyTerm\" : \"allTerms\";\n const hits =\n mode === \"allTerms\"\n ? bestTermClusterInText(source, terms, caseSensitive)\n : terms\n .map((term) =>\n firstTermHitInText(\n source,\n haystack,\n caseSensitive ? term : term.toLowerCase(),\n term,\n ),\n )\n .filter(isInlineTermHit)\n .sort((a, b) => a.index - b.index);\n if (\n (mode === \"allTerms\" && hits.length === terms.length) ||\n (mode === \"anyTerm\" && hits.length > 0)\n ) {\n const first = hits[0];\n if (first) {\n const endIndex =\n mode === \"allTerms\"\n ? Math.max(...hits.map((hit) => hit.end))\n : first.end;\n matches.push({\n kind: mode,\n query: terms.join(\" \"),\n index: first.index,\n endIndex,\n match:\n mode === \"allTerms\"\n ? source.slice(first.index, endIndex)\n : first.match,\n matchedTerms:\n mode === \"allTerms\" ? terms : hits.map((hit) => hit.term),\n });\n }\n }\n }\n\n return matches.sort((a, b) => a.index - b.index);\n}\n\nfunction normalizeRegexFlags(\n flags: string | undefined,\n caseSensitive: boolean,\n): string {\n const allowed = (flags ?? \"\")\n .replace(/[^dgimsuvy]/g, \"\")\n .replace(/[gy]/g, \"\");\n const withCase = caseSensitive || /i/.test(allowed) ? allowed : `${allowed}i`;\n return `${withCase}g`;\n}\n\nfunction makeSnippet(\n text: string,\n index: number,\n contextChars: number | undefined,\n endIndex = index,\n): string {\n const context = boundedNumber(contextChars, 180, 20, 1_000);\n const start = Math.max(0, index - context);\n const end = Math.min(text.length, Math.max(index, endIndex) + context);\n const prefix = start > 0 ? \"...\" : \"\";\n const suffix = end < text.length ? \"...\" : \"\";\n return `${prefix}${text.slice(start, end)}${suffix}`\n .replace(/\\s+/g, \" \")\n .trim();\n}\n\ninterface InlineTermHit {\n term: string;\n index: number;\n end: number;\n match: string;\n}\n\ninterface TermHit extends InlineTermHit {\n field: TextField;\n}\n\nfunction firstTermHitInText(\n source: string,\n haystack: string,\n needle: string,\n term: string,\n): InlineTermHit | null {\n const index = haystack.indexOf(needle);\n return index >= 0\n ? {\n term,\n index,\n end: index + term.length,\n match: source.slice(index, index + term.length),\n }\n : null;\n}\n\nfunction firstTermHitInField(\n field: TextField,\n term: string,\n caseSensitive: boolean,\n): TermHit | null {\n const source = field.text;\n const haystack = caseSensitive ? source : source.toLowerCase();\n const needle = caseSensitive ? term : term.toLowerCase();\n const hit = firstTermHitInText(source, haystack, needle, term);\n return hit ? { ...hit, term, field } : null;\n}\n\nfunction isInlineTermHit(\n hit: InlineTermHit | null | undefined,\n): hit is InlineTermHit {\n return Boolean(hit);\n}\n\nfunction isTermHit(hit: TermHit | null): hit is TermHit {\n return Boolean(hit);\n}\n\nfunction bestTermClusterInText(\n source: string,\n terms: string[],\n caseSensitive: boolean,\n): InlineTermHit[] {\n const haystack = caseSensitive ? source : source.toLowerCase();\n const allHits = terms.map((term) => {\n const needle = caseSensitive ? term : term.toLowerCase();\n const hits: InlineTermHit[] = [];\n let from = 0;\n while (from <= haystack.length) {\n const index = haystack.indexOf(needle, from);\n if (index < 0) break;\n hits.push({\n term,\n index,\n end: index + term.length,\n match: source.slice(index, index + term.length),\n });\n from = index + Math.max(1, needle.length);\n if (hits.length >= 100) break;\n }\n return hits;\n });\n if (allHits.some((hits) => hits.length === 0)) return [];\n\n const flattened = allHits\n .flat()\n .sort((a, b) => a.index - b.index || a.end - b.end);\n let best: InlineTermHit[] | null = null;\n let bestLength = Infinity;\n\n for (let start = 0; start < flattened.length; start++) {\n const selected = new Map<string, InlineTermHit>();\n for (let end = start; end < flattened.length; end++) {\n const hit = flattened[end]!;\n selected.set(hit.term, hit);\n if (selected.size !== terms.length) continue;\n const cluster = terms\n .map((term) => selected.get(term))\n .filter(isInlineTermHit)\n .sort((a, b) => a.index - b.index);\n const length =\n Math.max(...cluster.map((item) => item.end)) -\n Math.min(...cluster.map((item) => item.index));\n if (length < bestLength) {\n best = cluster;\n bestLength = length;\n }\n break;\n }\n }\n\n return best ?? [];\n}\n\nfunction makeCombinedTermSnippet(\n hits: TermHit[],\n contextChars: number | undefined,\n): string {\n const context = boundedNumber(contextChars, 180, 20, 1_000);\n const shownHits = hits.slice(0, 5);\n const perHitContext = Math.max(\n 20,\n Math.min(120, Math.floor(context / Math.max(1, Math.min(3, hits.length)))),\n );\n const parts = shownHits.map((hit) => {\n const snippet = makeSnippet(\n hit.field.text,\n hit.index,\n perHitContext,\n hit.end,\n );\n return `${hit.field.path}: ${snippet}`;\n });\n if (hits.length > shownHits.length) {\n parts.push(`... +${hits.length - shownHits.length} more terms`);\n }\n return parts.join(\" | \");\n}\n"]}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { type CredentialContext } from "../credentials/index.js";
|
|
2
|
+
import { type WebContentSearchOptions, type WebExtractMode, type WebResponseMode } from "../extensions/web-content.js";
|
|
2
3
|
import type { WorkspaceConnectionTemplateUse } from "../connections/catalog.js";
|
|
3
4
|
import type { CustomProviderConfig } from "./custom-registry.js";
|
|
4
5
|
export type { CustomProviderConfig, CustomProviderScope, CustomProviderAuthKind, UpsertCustomProviderArgs, } from "./custom-registry.js";
|
|
@@ -58,6 +59,16 @@ export interface ProviderApiRequestArgs {
|
|
|
58
59
|
*/
|
|
59
60
|
fetchAllPages?: FetchAllPagesConfig;
|
|
60
61
|
}
|
|
62
|
+
export interface ProviderApiDocsOptions {
|
|
63
|
+
provider: ProviderApiId | string;
|
|
64
|
+
url?: string;
|
|
65
|
+
maxBytes?: number;
|
|
66
|
+
maxChars?: number;
|
|
67
|
+
responseMode?: WebResponseMode;
|
|
68
|
+
extract?: WebExtractMode;
|
|
69
|
+
includeLinks?: boolean;
|
|
70
|
+
search?: WebContentSearchOptions;
|
|
71
|
+
}
|
|
61
72
|
export type ProviderApiAuthKind = {
|
|
62
73
|
type: "none";
|
|
63
74
|
} | {
|
|
@@ -158,32 +169,9 @@ export interface ProviderApiRuntimeOptions {
|
|
|
158
169
|
interface ProviderApiRuntime {
|
|
159
170
|
providerIds: readonly ProviderApiId[];
|
|
160
171
|
listCatalog(provider?: ProviderApiId | string): ReturnType<typeof listProviderApiCatalog> | Promise<unknown[]>;
|
|
161
|
-
fetchDocs(options:
|
|
162
|
-
provider: ProviderApiId | string;
|
|
163
|
-
url?: string;
|
|
164
|
-
maxBytes?: number;
|
|
165
|
-
}): Promise<unknown>;
|
|
172
|
+
fetchDocs(options: ProviderApiDocsOptions): Promise<unknown>;
|
|
166
173
|
executeRequest(args: ProviderApiRequestArgs): Promise<unknown>;
|
|
167
174
|
}
|
|
168
|
-
interface ProviderApiHttpResponse {
|
|
169
|
-
status: number;
|
|
170
|
-
statusText: string;
|
|
171
|
-
ok: boolean;
|
|
172
|
-
elapsedMs: number;
|
|
173
|
-
headers: Record<string, string>;
|
|
174
|
-
contentType: string | null;
|
|
175
|
-
size: number;
|
|
176
|
-
truncated: boolean;
|
|
177
|
-
text?: string;
|
|
178
|
-
json?: unknown;
|
|
179
|
-
quota?: {
|
|
180
|
-
exhausted: boolean;
|
|
181
|
-
providerId: string;
|
|
182
|
-
retryAfterMs: number;
|
|
183
|
-
retryAt: string;
|
|
184
|
-
reason: string;
|
|
185
|
-
};
|
|
186
|
-
}
|
|
187
175
|
export declare function getProviderApiConfig(provider: ProviderApiId | string): ProviderApiConfig;
|
|
188
176
|
export declare function isProviderApiId(provider: string): provider is ProviderApiId;
|
|
189
177
|
export declare function listProviderApiIdsForTemplateUse(templateUse: WorkspaceConnectionTemplateUse): ProviderApiId[];
|
|
@@ -206,11 +194,7 @@ export declare function listProviderApiCatalog(provider?: ProviderApiId | string
|
|
|
206
194
|
templateUses: readonly WorkspaceConnectionTemplateUse[];
|
|
207
195
|
}[];
|
|
208
196
|
export declare function createProviderApiRuntime(options: ProviderApiRuntimeOptions): ProviderApiRuntime;
|
|
209
|
-
export declare function fetchProviderApiDocs(options: {
|
|
210
|
-
provider: ProviderApiId | string;
|
|
211
|
-
url?: string;
|
|
212
|
-
maxBytes?: number;
|
|
213
|
-
}, runtime?: ProviderApiRuntimeOptions): Promise<{
|
|
197
|
+
export declare function fetchProviderApiDocs(options: ProviderApiDocsOptions, runtime?: ProviderApiRuntimeOptions): Promise<{
|
|
214
198
|
provider: string;
|
|
215
199
|
catalog: {
|
|
216
200
|
id: "amplitude" | "bigquery" | "sentry" | "posthog" | "mixpanel" | "github" | "slack" | "twitter" | "notion" | "gmail" | "google_drive" | "hubspot" | "granola" | "apollo" | "commonroom" | "dataforseo" | "ga4" | "gcloud" | "gong" | "google_calendar" | "grafana" | "jira" | "prometheus" | "pylon" | "stripe";
|
|
@@ -245,9 +229,8 @@ export declare function fetchProviderApiDocs(options: {
|
|
|
245
229
|
custom: boolean;
|
|
246
230
|
};
|
|
247
231
|
guidance: string;
|
|
248
|
-
request?: undefined;
|
|
249
|
-
response?: undefined;
|
|
250
232
|
} | {
|
|
233
|
+
content?: import("../extensions/web-content.js").WebContentResult | undefined;
|
|
251
234
|
provider: string;
|
|
252
235
|
catalog: {
|
|
253
236
|
id: "amplitude" | "bigquery" | "sentry" | "posthog" | "mixpanel" | "github" | "slack" | "twitter" | "notion" | "gmail" | "google_drive" | "hubspot" | "granola" | "apollo" | "commonroom" | "dataforseo" | "ga4" | "gcloud" | "gong" | "google_calendar" | "grafana" | "jira" | "prometheus" | "pylon" | "stripe";
|
|
@@ -284,7 +267,16 @@ export declare function fetchProviderApiDocs(options: {
|
|
|
284
267
|
request: {
|
|
285
268
|
url: string;
|
|
286
269
|
};
|
|
287
|
-
response:
|
|
270
|
+
response: {
|
|
271
|
+
status: number;
|
|
272
|
+
statusText: string;
|
|
273
|
+
ok: boolean;
|
|
274
|
+
elapsedMs: number;
|
|
275
|
+
headers: Record<string, string>;
|
|
276
|
+
contentType: string | null;
|
|
277
|
+
size: number;
|
|
278
|
+
truncated: boolean;
|
|
279
|
+
};
|
|
288
280
|
guidance?: undefined;
|
|
289
281
|
}>;
|
|
290
282
|
export declare function executeProviderApiRequest(args: ProviderApiRequestArgs, runtime: ProviderApiRuntimeOptions): Promise<unknown>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/provider-api/index.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/provider-api/index.ts"],"names":[],"mappings":"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"}
|