@agent-native/core 0.49.27 → 0.51.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/agent/harness/ai-sdk-adapter.d.ts +13 -0
- package/dist/agent/harness/ai-sdk-adapter.d.ts.map +1 -0
- package/dist/agent/harness/ai-sdk-adapter.js +232 -0
- package/dist/agent/harness/ai-sdk-adapter.js.map +1 -0
- package/dist/agent/harness/background.d.ts +15 -0
- package/dist/agent/harness/background.d.ts.map +1 -0
- package/dist/agent/harness/background.js +233 -0
- package/dist/agent/harness/background.js.map +1 -0
- package/dist/agent/harness/builtin.d.ts +2 -0
- package/dist/agent/harness/builtin.d.ts.map +1 -0
- package/dist/agent/harness/builtin.js +24 -0
- package/dist/agent/harness/builtin.js.map +1 -0
- package/dist/agent/harness/index.d.ts +9 -0
- package/dist/agent/harness/index.d.ts.map +1 -0
- package/dist/agent/harness/index.js +8 -0
- package/dist/agent/harness/index.js.map +1 -0
- package/dist/agent/harness/registry.d.ts +15 -0
- package/dist/agent/harness/registry.d.ts.map +1 -0
- package/dist/agent/harness/registry.js +70 -0
- package/dist/agent/harness/registry.js.map +1 -0
- package/dist/agent/harness/runner.d.ts +21 -0
- package/dist/agent/harness/runner.d.ts.map +1 -0
- package/dist/agent/harness/runner.js +86 -0
- package/dist/agent/harness/runner.js.map +1 -0
- package/dist/agent/harness/store.d.ts +46 -0
- package/dist/agent/harness/store.d.ts.map +1 -0
- package/dist/agent/harness/store.js +304 -0
- package/dist/agent/harness/store.js.map +1 -0
- package/dist/agent/harness/translate.d.ts +5 -0
- package/dist/agent/harness/translate.d.ts.map +1 -0
- package/dist/agent/harness/translate.js +120 -0
- package/dist/agent/harness/translate.js.map +1 -0
- package/dist/agent/harness/types.d.ts +127 -0
- package/dist/agent/harness/types.d.ts.map +1 -0
- package/dist/agent/harness/types.js +2 -0
- package/dist/agent/harness/types.js.map +1 -0
- package/dist/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +2 -0
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/cli/create.d.ts.map +1 -1
- package/dist/cli/create.js +10 -1
- package/dist/cli/create.js.map +1 -1
- package/dist/cli/pr-visual-recap-workflow.d.ts +1 -1
- package/dist/cli/pr-visual-recap-workflow.d.ts.map +1 -1
- package/dist/cli/pr-visual-recap-workflow.js +1 -1
- package/dist/cli/pr-visual-recap-workflow.js.map +1 -1
- package/dist/cli/skills.d.ts +1 -1
- package/dist/cli/skills.d.ts.map +1 -1
- package/dist/cli/skills.js +8 -1
- package/dist/cli/skills.js.map +1 -1
- package/dist/client/blocks/library/wireframe.d.ts.map +1 -1
- package/dist/client/blocks/library/wireframe.js +0 -1
- package/dist/client/blocks/library/wireframe.js.map +1 -1
- package/dist/client/resources/use-resources.d.ts.map +1 -1
- package/dist/client/resources/use-resources.js +4 -2
- package/dist/client/resources/use-resources.js.map +1 -1
- package/dist/code-agents/background-run.d.ts +6 -4
- package/dist/code-agents/background-run.d.ts.map +1 -1
- package/dist/code-agents/background-run.js.map +1 -1
- package/dist/coding-tools/run-code.js +6 -4
- package/dist/coding-tools/run-code.js.map +1 -1
- package/dist/provider-api/index.d.ts +20 -12
- package/dist/provider-api/index.d.ts.map +1 -1
- package/dist/provider-api/index.js +157 -37
- package/dist/provider-api/index.js.map +1 -1
- package/dist/provider-api/quota-governor.d.ts +53 -0
- package/dist/provider-api/quota-governor.d.ts.map +1 -0
- package/dist/provider-api/quota-governor.js +395 -0
- package/dist/provider-api/quota-governor.js.map +1 -0
- package/dist/provider-api/staging.d.ts.map +1 -1
- package/dist/provider-api/staging.js +16 -0
- package/dist/provider-api/staging.js.map +1 -1
- package/dist/server/agent-chat-plugin.d.ts.map +1 -1
- package/dist/server/agent-chat-plugin.js +34 -10
- package/dist/server/agent-chat-plugin.js.map +1 -1
- package/dist/templates/workspace-core/.agents/skills/harness-agents/SKILL.md +98 -0
- package/dist/workspace-files/index.d.ts +0 -1
- package/dist/workspace-files/index.d.ts.map +1 -1
- package/dist/workspace-files/index.js +0 -1
- package/dist/workspace-files/index.js.map +1 -1
- package/dist/workspace-files/store.d.ts +14 -9
- package/dist/workspace-files/store.d.ts.map +1 -1
- package/dist/workspace-files/store.js +89 -164
- package/dist/workspace-files/store.js.map +1 -1
- package/dist/workspace-files/tool.d.ts +3 -4
- package/dist/workspace-files/tool.d.ts.map +1 -1
- package/dist/workspace-files/tool.js +8 -7
- package/dist/workspace-files/tool.js.map +1 -1
- package/docs/content/deployment.md +1 -1
- package/package.json +2 -1
- package/src/templates/workspace-core/.agents/skills/harness-agents/SKILL.md +98 -0
- package/dist/workspace-files/schema.d.ts +0 -195
- package/dist/workspace-files/schema.d.ts.map +0 -1
- package/dist/workspace-files/schema.js +0 -48
- package/dist/workspace-files/schema.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"staging.js","sourceRoot":"","sources":["../../src/provider-api/staging.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Server-side staging layer for provider-api responses.\n *\n * ## P0 — stageAs\n * Instead of returning a raw response body to the model (which hits the 50K-char\n * context-window truncation and biases aggregates), the caller can pass\n * `stageAs: \"dataset_name\"` to `stagingExecuteRequest`. The runtime will:\n * 1. Execute the provider HTTP request.\n * 2. Auto-detect the items array in common response shapes.\n * 3. Write rows into `staged_datasets` + `staged_dataset_rows`.\n * 4. Return only { dataset, rowCount, columns, sampleRows: first 5 }.\n *\n * ## P1 — fetchAll\n * When `pagination` config is supplied alongside `stageAs`, the runtime\n * iterates pages server-side:\n * - Supports nextCursor (embedded in response), offset, and page modes.\n * - Handles 429 / Retry-After with exponential back-off.\n * - Caps at maxPages (default 50, up to 200).\n * - Returns { dataset, pages, rows, truncated, lastCursor } so the agent\n * can resume with another call when capped.\n *\n * Security: re-uses executeProviderApiRequest from index.ts — SSRF-safety and\n * secret redaction are fully preserved. We read the raw (pre-redacted) JSON\n * here; redaction is applied to the response returned to the model.\n */\n\nimport type { ProviderApiRequestArgs } from \"./index.js\";\nimport {\n upsertStagedDataset,\n deriveColumns,\n MAX_ROWS_PER_APP,\n} from \"./staged-datasets-store.js\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n/** Auto-detect or explicit path to the items array in a JSON response. */\nexport type ItemsPath =\n | \"auto\"\n | \"data\"\n | \"results\"\n | \"items\"\n | \"records\"\n | \"rows\"\n | string;\n\nexport interface PaginationConfig {\n /**\n * Dot-path in the response JSON for the next cursor/token value.\n * e.g. \"next_cursor\", \"meta.next\", \"pagination.cursor\"\n */\n nextCursorPath?: string;\n /**\n * Query parameter name to use for the cursor in the next request.\n * Use this for APIs that page with query params.\n */\n cursorParam?: string;\n /**\n * Dot-path in the JSON request body to set to the cursor value in the next\n * request. Use this for APIs that page via POST body fields.\n */\n cursorBodyPath?: string;\n /**\n * Use page-number mode: send `pageParam=N` for each subsequent page.\n */\n pageParam?: string;\n /** Starting page number (default 1). */\n startPage?: number;\n /**\n * Use offset mode: send `offsetParam=N` for each subsequent request.\n */\n offsetParam?: string;\n /**\n * Hint at expected page size for offset increments. Defaults to the\n * actual item count of the first page.\n */\n pageSize?: number;\n /** Maximum pages to fetch (default 50, max 200). */\n maxPages?: number;\n}\n\nexport interface StageAsOptions {\n stageAs: string;\n itemsPath?: ItemsPath;\n pagination?: PaginationConfig;\n}\n\nexport interface StagingRequestArgs extends ProviderApiRequestArgs {\n stageAs?: string;\n itemsPath?: ItemsPath;\n pagination?: PaginationConfig;\n}\n\nexport interface StagingResult {\n dataset: {\n id: string;\n name: string;\n rowCount: number;\n columns: string[];\n sampleRows: Record<string, unknown>[];\n };\n pages?: number;\n rows?: number;\n truncated?: boolean;\n lastCursor?: string | number | null;\n provider: unknown;\n request: unknown;\n guidance: string;\n}\n\n// ---------------------------------------------------------------------------\n// Resolve runtime context for scope (appId + ownerEmail)\n// ---------------------------------------------------------------------------\n\n/** Minimal callable interface accepted by stagingExecuteRequest. */\nexport type ProviderApiExecutor = (\n args: ProviderApiRequestArgs,\n) => Promise<unknown>;\n\nexport interface StagingRuntimeContext {\n appId: string;\n ownerEmail: string;\n}\n\n// ---------------------------------------------------------------------------\n// JSON path resolution helper\n// ---------------------------------------------------------------------------\n\nfunction getAtPath(obj: unknown, path: string): unknown {\n if (!path || obj === undefined || obj === null) return obj;\n const parts = path.split(\".\");\n let cur: unknown = obj;\n for (const part of parts) {\n if (cur === null || cur === undefined || typeof cur !== \"object\")\n return undefined;\n cur = (cur as Record<string, unknown>)[part];\n }\n return cur;\n}\n\n// ---------------------------------------------------------------------------\n// Auto-detect items array\n// ---------------------------------------------------------------------------\n\nexport function extractItemsArray(\n body: unknown,\n itemsPath: ItemsPath = \"auto\",\n): unknown[] {\n if (!body || typeof body !== \"object\") return [];\n\n if (Array.isArray(body)) return body as unknown[];\n\n if (itemsPath !== \"auto\") {\n const val = getAtPath(body, itemsPath);\n return Array.isArray(val) ? (val as unknown[]) : [];\n }\n\n // Auto-detect: common shapes\n const obj = body as Record<string, unknown>;\n for (const key of [\"data\", \"results\", \"items\", \"records\", \"rows\"]) {\n if (Array.isArray(obj[key])) return obj[key] as unknown[];\n }\n\n // Many provider APIs return `{ providerSpecificName: [...], metadata: ... }`.\n // If exactly one top-level field is an array, treat that as the item list\n // without hardcoding provider vocabulary.\n const arrayFields = Object.values(obj).filter(Array.isArray);\n if (arrayFields.length === 1) {\n return arrayFields[0] as unknown[];\n }\n\n // If the object itself looks like a flat row, wrap it\n return [];\n}\n\nfunction extractNextCursor(body: unknown, path: string): string | null {\n const val = getAtPath(body, path);\n if (val === null || val === undefined || val === \"\" || val === false)\n return null;\n return String(val);\n}\n\nfunction setAtPath(base: unknown, path: string, value: unknown): unknown {\n const root =\n base && typeof base === \"object\" && !Array.isArray(base)\n ? { ...(base as Record<string, unknown>) }\n : {};\n const parts = path.split(\".\").filter(Boolean);\n if (!parts.length) return root;\n\n let current: Record<string, unknown> = 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\n// ---------------------------------------------------------------------------\n// 429 / Retry-After handling\n// ---------------------------------------------------------------------------\n\nasync function sleepMs(ms: number): Promise<void> {\n await new Promise<void>((resolve) => setTimeout(resolve, ms));\n}\n\nfunction getRetryAfterMs(\n responseHeaders: Record<string, string> | undefined,\n attempt: number,\n): number {\n if (responseHeaders) {\n const raw =\n responseHeaders[\"retry-after\"] ?? responseHeaders[\"Retry-After\"];\n if (raw) {\n const secs = parseFloat(raw);\n if (!isNaN(secs)) return secs * 1000;\n }\n }\n // Exponential back-off: 1s, 2s, 4s, 8s, cap 30s\n return Math.min(1000 * Math.pow(2, attempt), 30_000);\n}\n\n// ---------------------------------------------------------------------------\n// Core staging executor\n// ---------------------------------------------------------------------------\n\n/**\n * Execute a provider API request and stage the result into scratch storage.\n * Returns a compact summary instead of the raw body.\n *\n * @param args — request args including stageAs / itemsPath / pagination\n * @param execute — callable provider executor (e.g. `runtime.executeRequest.bind(runtime)`)\n * @param ctx — (appId, ownerEmail) for dataset ownership scoping\n */\nexport async function stagingExecuteRequest(\n args: StagingRequestArgs,\n execute: ProviderApiExecutor,\n ctx: StagingRuntimeContext,\n): Promise<StagingResult> {\n const datasetName = args.stageAs!;\n const itemsPath = args.itemsPath ?? \"auto\";\n const pagination = args.pagination;\n const maxPages = Math.min(pagination?.maxPages ?? 50, 200);\n if (\n pagination?.nextCursorPath &&\n !pagination.cursorParam &&\n !pagination.cursorBodyPath\n ) {\n throw new Error(\n \"Pagination with nextCursorPath requires cursorParam or cursorBodyPath.\",\n );\n }\n\n // Strip staging fields from the underlying request args\n const baseArgs: ProviderApiRequestArgs = {\n provider: args.provider,\n method: args.method,\n path: args.path,\n query: args.query,\n headers: args.headers,\n body: args.body,\n auth: args.auth,\n timeoutMs: args.timeoutMs,\n maxBytes: args.maxBytes,\n connectionId: args.connectionId,\n accountId: args.accountId,\n };\n\n let allRows: Record<string, unknown>[] = [];\n let pages = 0;\n let truncated = false;\n let lastCursor: string | number | null = null;\n let providerMeta: unknown;\n let requestMeta: unknown;\n\n // Generate a stable dataset id for this name+owner combination so re-staging\n // the same dataset replaces it rather than accumulating duplicates.\n const datasetId = `ds_${ctx.appId}_${ctx.ownerEmail}_${datasetName}`\n .replace(/[^a-zA-Z0-9_-]/g, \"_\")\n .slice(0, 80);\n\n // -------------------------------------------------------------------------\n // Page loop\n // -------------------------------------------------------------------------\n let currentArgs = { ...baseArgs };\n let pageNum = pagination?.startPage ?? 1;\n let offset = 0;\n\n for (let pageIndex = 0; pageIndex < maxPages; pageIndex++) {\n // Inject pagination params for pages 2+\n if (pageIndex > 0 && pagination) {\n const extraQuery: Record<string, unknown> =\n typeof baseArgs.query === \"object\" && baseArgs.query !== null\n ? { ...(baseArgs.query as Record<string, unknown>) }\n : {};\n let nextBody = baseArgs.body;\n\n if (pagination.cursorParam && lastCursor !== null) {\n extraQuery[pagination.cursorParam] = lastCursor;\n }\n if (pagination.cursorBodyPath && lastCursor !== null) {\n nextBody = setAtPath(\n baseArgs.body,\n pagination.cursorBodyPath,\n lastCursor,\n );\n }\n const hasCursorMode =\n Boolean(pagination.cursorParam) || Boolean(pagination.cursorBodyPath);\n if (pagination.pageParam && !hasCursorMode) {\n extraQuery[pagination.pageParam] = pageNum;\n } else if (pagination.offsetParam && !hasCursorMode) {\n extraQuery[pagination.offsetParam] = offset;\n } else if (!hasCursorMode) {\n // No pagination config for next page — stop\n break;\n }\n currentArgs = { ...baseArgs, query: extraQuery, body: nextBody };\n }\n\n // -----------------------------------------------------------------------\n // Execute with retry on 429\n // -----------------------------------------------------------------------\n let result: Record<string, unknown>;\n let attempt = 0;\n for (;;) {\n const raw = (await execute(currentArgs)) as Record<string, unknown>;\n const response = raw.response as Record<string, unknown> | undefined;\n if (response?.status === 429) {\n if (attempt >= 5) {\n throw new Error(\n `Provider returned 429 Too Many Requests after ${attempt + 1} attempts. ` +\n `Try again later or reduce the page count.`,\n );\n }\n const waitMs = getRetryAfterMs(\n response.headers as Record<string, string> | undefined,\n attempt,\n );\n await sleepMs(waitMs);\n attempt++;\n continue;\n }\n result = raw;\n break;\n }\n\n pages++;\n if (pageIndex === 0) {\n providerMeta = result.provider;\n requestMeta = result.request;\n }\n\n const response = result.response as Record<string, unknown> | undefined;\n if (!response?.ok) {\n // Non-200 on first page is a hard error; on subsequent pages, stop early\n if (pageIndex === 0) {\n throw new Error(\n `Provider API returned status ${response?.status}: ${JSON.stringify(response?.json ?? response?.text).slice(0, 200)}`,\n );\n }\n truncated = true;\n break;\n }\n\n const body =\n response.json ??\n (response.text ? tryParseJson(response.text as string) : null);\n const pageRows = extractItemsArray(body, itemsPath);\n\n if (pageRows.length === 0) {\n // Empty page — end of data\n break;\n }\n\n const typedRows = pageRows.map((r) =>\n r && typeof r === \"object\"\n ? (r as Record<string, unknown>)\n : { value: r },\n );\n allRows = allRows.concat(typedRows);\n\n // Cap check — stop before exceeding limit\n if (allRows.length >= MAX_ROWS_PER_APP) {\n truncated = true;\n allRows = allRows.slice(0, MAX_ROWS_PER_APP);\n break;\n }\n\n // If no pagination config or single-page mode, stop after first page\n if (!pagination || pageIndex === maxPages - 1) {\n if (pageIndex === maxPages - 1 && pagination) truncated = true;\n break;\n }\n\n // Derive next cursor / offset / page\n if (pagination.nextCursorPath) {\n const next = extractNextCursor(body, pagination.nextCursorPath);\n if (!next) break; // No more pages\n lastCursor = next;\n } else if (pagination.pageParam) {\n pageNum++;\n } else if (pagination.offsetParam) {\n const pageSize = pagination.pageSize ?? pageRows.length;\n offset += pageSize;\n } else {\n break;\n }\n }\n\n // -------------------------------------------------------------------------\n // Persist to staging store\n // -------------------------------------------------------------------------\n const columns = deriveColumns(allRows);\n const meta = await upsertStagedDataset({\n id: datasetId,\n appId: ctx.appId,\n ownerEmail: ctx.ownerEmail,\n name: datasetName,\n rows: allRows,\n columns,\n });\n\n return {\n dataset: {\n id: meta.id,\n name: meta.name,\n rowCount: meta.rowCount,\n columns: meta.columns,\n sampleRows: allRows.slice(0, 5),\n },\n ...(pagination\n ? {\n pages,\n rows: allRows.length,\n truncated,\n lastCursor,\n }\n : {}),\n provider: providerMeta,\n request: requestMeta,\n guidance:\n \"Data staged successfully. Use query-staged-dataset to run aggregations on this dataset without re-fetching. \" +\n \"Staging avoids sending raw response bodies through the context window.\",\n };\n}\n\n// ---------------------------------------------------------------------------\n// Utility\n// ---------------------------------------------------------------------------\n\nfunction tryParseJson(text: string): unknown | null {\n try {\n return JSON.parse(text);\n } catch {\n return null;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"staging.js","sourceRoot":"","sources":["../../src/provider-api/staging.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Server-side staging layer for provider-api responses.\n *\n * ## P0 — stageAs\n * Instead of returning a raw response body to the model (which hits the 50K-char\n * context-window truncation and biases aggregates), the caller can pass\n * `stageAs: \"dataset_name\"` to `stagingExecuteRequest`. The runtime will:\n * 1. Execute the provider HTTP request.\n * 2. Auto-detect the items array in common response shapes.\n * 3. Write rows into `staged_datasets` + `staged_dataset_rows`.\n * 4. Return only { dataset, rowCount, columns, sampleRows: first 5 }.\n *\n * ## P1 — fetchAll\n * When `pagination` config is supplied alongside `stageAs`, the runtime\n * iterates pages server-side:\n * - Supports nextCursor (embedded in response), offset, and page modes.\n * - Handles 429 / Retry-After with exponential back-off.\n * - Caps at maxPages (default 50, up to 200).\n * - Returns { dataset, pages, rows, truncated, lastCursor } so the agent\n * can resume with another call when capped.\n *\n * Security: re-uses executeProviderApiRequest from index.ts — SSRF-safety and\n * secret redaction are fully preserved. We read the raw (pre-redacted) JSON\n * here; redaction is applied to the response returned to the model.\n */\n\nimport type { ProviderApiRequestArgs } from \"./index.js\";\nimport {\n upsertStagedDataset,\n deriveColumns,\n MAX_ROWS_PER_APP,\n} from \"./staged-datasets-store.js\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n/** Auto-detect or explicit path to the items array in a JSON response. */\nexport type ItemsPath =\n | \"auto\"\n | \"data\"\n | \"results\"\n | \"items\"\n | \"records\"\n | \"rows\"\n | string;\n\nexport interface PaginationConfig {\n /**\n * Dot-path in the response JSON for the next cursor/token value.\n * e.g. \"next_cursor\", \"meta.next\", \"pagination.cursor\"\n */\n nextCursorPath?: string;\n /**\n * Query parameter name to use for the cursor in the next request.\n * Use this for APIs that page with query params.\n */\n cursorParam?: string;\n /**\n * Dot-path in the JSON request body to set to the cursor value in the next\n * request. Use this for APIs that page via POST body fields.\n */\n cursorBodyPath?: string;\n /**\n * Use page-number mode: send `pageParam=N` for each subsequent page.\n */\n pageParam?: string;\n /** Starting page number (default 1). */\n startPage?: number;\n /**\n * Use offset mode: send `offsetParam=N` for each subsequent request.\n */\n offsetParam?: string;\n /**\n * Hint at expected page size for offset increments. Defaults to the\n * actual item count of the first page.\n */\n pageSize?: number;\n /** Maximum pages to fetch (default 50, max 200). */\n maxPages?: number;\n}\n\nexport interface StageAsOptions {\n stageAs: string;\n itemsPath?: ItemsPath;\n pagination?: PaginationConfig;\n}\n\nexport interface StagingRequestArgs extends ProviderApiRequestArgs {\n stageAs?: string;\n itemsPath?: ItemsPath;\n pagination?: PaginationConfig;\n}\n\nexport interface StagingResult {\n dataset: {\n id: string;\n name: string;\n rowCount: number;\n columns: string[];\n sampleRows: Record<string, unknown>[];\n };\n pages?: number;\n rows?: number;\n truncated?: boolean;\n lastCursor?: string | number | null;\n provider: unknown;\n request: unknown;\n guidance: string;\n}\n\n// ---------------------------------------------------------------------------\n// Resolve runtime context for scope (appId + ownerEmail)\n// ---------------------------------------------------------------------------\n\n/** Minimal callable interface accepted by stagingExecuteRequest. */\nexport type ProviderApiExecutor = (\n args: ProviderApiRequestArgs,\n) => Promise<unknown>;\n\nexport interface StagingRuntimeContext {\n appId: string;\n ownerEmail: string;\n}\n\n// ---------------------------------------------------------------------------\n// JSON path resolution helper\n// ---------------------------------------------------------------------------\n\nfunction getAtPath(obj: unknown, path: string): unknown {\n if (!path || obj === undefined || obj === null) return obj;\n const parts = path.split(\".\");\n let cur: unknown = obj;\n for (const part of parts) {\n if (cur === null || cur === undefined || typeof cur !== \"object\")\n return undefined;\n cur = (cur as Record<string, unknown>)[part];\n }\n return cur;\n}\n\n// ---------------------------------------------------------------------------\n// Auto-detect items array\n// ---------------------------------------------------------------------------\n\nexport function extractItemsArray(\n body: unknown,\n itemsPath: ItemsPath = \"auto\",\n): unknown[] {\n if (!body || typeof body !== \"object\") return [];\n\n if (Array.isArray(body)) return body as unknown[];\n\n if (itemsPath !== \"auto\") {\n const val = getAtPath(body, itemsPath);\n return Array.isArray(val) ? (val as unknown[]) : [];\n }\n\n // Auto-detect: common shapes\n const obj = body as Record<string, unknown>;\n for (const key of [\"data\", \"results\", \"items\", \"records\", \"rows\"]) {\n if (Array.isArray(obj[key])) return obj[key] as unknown[];\n }\n\n // Many provider APIs return `{ providerSpecificName: [...], metadata: ... }`.\n // If exactly one top-level field is an array, treat that as the item list\n // without hardcoding provider vocabulary.\n const arrayFields = Object.values(obj).filter(Array.isArray);\n if (arrayFields.length === 1) {\n return arrayFields[0] as unknown[];\n }\n\n // If the object itself looks like a flat row, wrap it\n return [];\n}\n\nfunction extractNextCursor(body: unknown, path: string): string | null {\n const val = getAtPath(body, path);\n if (val === null || val === undefined || val === \"\" || val === false)\n return null;\n return String(val);\n}\n\nfunction setAtPath(base: unknown, path: string, value: unknown): unknown {\n const root =\n base && typeof base === \"object\" && !Array.isArray(base)\n ? { ...(base as Record<string, unknown>) }\n : {};\n const parts = path.split(\".\").filter(Boolean);\n if (!parts.length) return root;\n\n let current: Record<string, unknown> = 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\n// ---------------------------------------------------------------------------\n// 429 / Retry-After handling\n// ---------------------------------------------------------------------------\n\nasync function sleepMs(ms: number): Promise<void> {\n await new Promise<void>((resolve) => setTimeout(resolve, ms));\n}\n\nfunction getRetryAfterMs(\n responseHeaders: Record<string, string> | undefined,\n attempt: number,\n): number {\n if (responseHeaders) {\n const raw =\n responseHeaders[\"retry-after\"] ?? responseHeaders[\"Retry-After\"];\n if (raw) {\n const secs = parseFloat(raw);\n if (!isNaN(secs)) return secs * 1000;\n }\n }\n // Exponential back-off: 1s, 2s, 4s, 8s, cap 30s\n return Math.min(1000 * Math.pow(2, attempt), 30_000);\n}\n\nfunction isProviderQuotaCooldown(response: Record<string, unknown>): boolean {\n const headers = response.headers as Record<string, string> | undefined;\n const quotaHeader =\n headers?.[\"x-agent-native-provider-quota\"] ??\n headers?.[\"X-Agent-Native-Provider-Quota\"];\n if (quotaHeader === \"exhausted\") return true;\n const json = response.json as Record<string, unknown> | undefined;\n return json?.error === \"provider_quota_exhausted\";\n}\n\n// ---------------------------------------------------------------------------\n// Core staging executor\n// ---------------------------------------------------------------------------\n\n/**\n * Execute a provider API request and stage the result into scratch storage.\n * Returns a compact summary instead of the raw body.\n *\n * @param args — request args including stageAs / itemsPath / pagination\n * @param execute — callable provider executor (e.g. `runtime.executeRequest.bind(runtime)`)\n * @param ctx — (appId, ownerEmail) for dataset ownership scoping\n */\nexport async function stagingExecuteRequest(\n args: StagingRequestArgs,\n execute: ProviderApiExecutor,\n ctx: StagingRuntimeContext,\n): Promise<StagingResult> {\n const datasetName = args.stageAs!;\n const itemsPath = args.itemsPath ?? \"auto\";\n const pagination = args.pagination;\n const maxPages = Math.min(pagination?.maxPages ?? 50, 200);\n if (\n pagination?.nextCursorPath &&\n !pagination.cursorParam &&\n !pagination.cursorBodyPath\n ) {\n throw new Error(\n \"Pagination with nextCursorPath requires cursorParam or cursorBodyPath.\",\n );\n }\n\n // Strip staging fields from the underlying request args\n const baseArgs: ProviderApiRequestArgs = {\n provider: args.provider,\n method: args.method,\n path: args.path,\n query: args.query,\n headers: args.headers,\n body: args.body,\n auth: args.auth,\n timeoutMs: args.timeoutMs,\n maxBytes: args.maxBytes,\n connectionId: args.connectionId,\n accountId: args.accountId,\n };\n\n let allRows: Record<string, unknown>[] = [];\n let pages = 0;\n let truncated = false;\n let lastCursor: string | number | null = null;\n let providerMeta: unknown;\n let requestMeta: unknown;\n\n // Generate a stable dataset id for this name+owner combination so re-staging\n // the same dataset replaces it rather than accumulating duplicates.\n const datasetId = `ds_${ctx.appId}_${ctx.ownerEmail}_${datasetName}`\n .replace(/[^a-zA-Z0-9_-]/g, \"_\")\n .slice(0, 80);\n\n // -------------------------------------------------------------------------\n // Page loop\n // -------------------------------------------------------------------------\n let currentArgs = { ...baseArgs };\n let pageNum = pagination?.startPage ?? 1;\n let offset = 0;\n\n for (let pageIndex = 0; pageIndex < maxPages; pageIndex++) {\n // Inject pagination params for pages 2+\n if (pageIndex > 0 && pagination) {\n const extraQuery: Record<string, unknown> =\n typeof baseArgs.query === \"object\" && baseArgs.query !== null\n ? { ...(baseArgs.query as Record<string, unknown>) }\n : {};\n let nextBody = baseArgs.body;\n\n if (pagination.cursorParam && lastCursor !== null) {\n extraQuery[pagination.cursorParam] = lastCursor;\n }\n if (pagination.cursorBodyPath && lastCursor !== null) {\n nextBody = setAtPath(\n baseArgs.body,\n pagination.cursorBodyPath,\n lastCursor,\n );\n }\n const hasCursorMode =\n Boolean(pagination.cursorParam) || Boolean(pagination.cursorBodyPath);\n if (pagination.pageParam && !hasCursorMode) {\n extraQuery[pagination.pageParam] = pageNum;\n } else if (pagination.offsetParam && !hasCursorMode) {\n extraQuery[pagination.offsetParam] = offset;\n } else if (!hasCursorMode) {\n // No pagination config for next page — stop\n break;\n }\n currentArgs = { ...baseArgs, query: extraQuery, body: nextBody };\n }\n\n // -----------------------------------------------------------------------\n // Execute with retry on 429\n // -----------------------------------------------------------------------\n let result: Record<string, unknown>;\n let attempt = 0;\n for (;;) {\n const raw = (await execute(currentArgs)) as Record<string, unknown>;\n const response = raw.response as Record<string, unknown> | undefined;\n if (response?.status === 429) {\n if (isProviderQuotaCooldown(response)) {\n const json = response.json as Record<string, unknown> | undefined;\n const retryAt =\n typeof json?.retryAt === \"string\"\n ? ` Retry after ${json.retryAt}.`\n : \"\";\n throw new Error(`Provider API quota exhausted (429).${retryAt}`);\n }\n if (attempt >= 5) {\n throw new Error(\n `Provider returned 429 Too Many Requests after ${attempt + 1} attempts. ` +\n `Try again later or reduce the page count.`,\n );\n }\n const waitMs = getRetryAfterMs(\n response.headers as Record<string, string> | undefined,\n attempt,\n );\n await sleepMs(waitMs);\n attempt++;\n continue;\n }\n result = raw;\n break;\n }\n\n pages++;\n if (pageIndex === 0) {\n providerMeta = result.provider;\n requestMeta = result.request;\n }\n\n const response = result.response as Record<string, unknown> | undefined;\n if (!response?.ok) {\n // Non-200 on first page is a hard error; on subsequent pages, stop early\n if (pageIndex === 0) {\n throw new Error(\n `Provider API returned status ${response?.status}: ${JSON.stringify(response?.json ?? response?.text).slice(0, 200)}`,\n );\n }\n truncated = true;\n break;\n }\n\n const body =\n response.json ??\n (response.text ? tryParseJson(response.text as string) : null);\n const pageRows = extractItemsArray(body, itemsPath);\n\n if (pageRows.length === 0) {\n // Empty page — end of data\n break;\n }\n\n const typedRows = pageRows.map((r) =>\n r && typeof r === \"object\"\n ? (r as Record<string, unknown>)\n : { value: r },\n );\n allRows = allRows.concat(typedRows);\n\n // Cap check — stop before exceeding limit\n if (allRows.length >= MAX_ROWS_PER_APP) {\n truncated = true;\n allRows = allRows.slice(0, MAX_ROWS_PER_APP);\n break;\n }\n\n // If no pagination config or single-page mode, stop after first page\n if (!pagination || pageIndex === maxPages - 1) {\n if (pageIndex === maxPages - 1 && pagination) truncated = true;\n break;\n }\n\n // Derive next cursor / offset / page\n if (pagination.nextCursorPath) {\n const next = extractNextCursor(body, pagination.nextCursorPath);\n if (!next) break; // No more pages\n lastCursor = next;\n } else if (pagination.pageParam) {\n pageNum++;\n } else if (pagination.offsetParam) {\n const pageSize = pagination.pageSize ?? pageRows.length;\n offset += pageSize;\n } else {\n break;\n }\n }\n\n // -------------------------------------------------------------------------\n // Persist to staging store\n // -------------------------------------------------------------------------\n const columns = deriveColumns(allRows);\n const meta = await upsertStagedDataset({\n id: datasetId,\n appId: ctx.appId,\n ownerEmail: ctx.ownerEmail,\n name: datasetName,\n rows: allRows,\n columns,\n });\n\n return {\n dataset: {\n id: meta.id,\n name: meta.name,\n rowCount: meta.rowCount,\n columns: meta.columns,\n sampleRows: allRows.slice(0, 5),\n },\n ...(pagination\n ? {\n pages,\n rows: allRows.length,\n truncated,\n lastCursor,\n }\n : {}),\n provider: providerMeta,\n request: requestMeta,\n guidance:\n \"Data staged successfully. Use query-staged-dataset to run aggregations on this dataset without re-fetching. \" +\n \"Staging avoids sending raw response bodies through the context window.\",\n };\n}\n\n// ---------------------------------------------------------------------------\n// Utility\n// ---------------------------------------------------------------------------\n\nfunction tryParseJson(text: string): unknown | null {\n try {\n return JSON.parse(text);\n } catch {\n return null;\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-chat-plugin.d.ts","sourceRoot":"","sources":["../../src/server/agent-chat-plugin.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"agent-chat-plugin.d.ts","sourceRoot":"","sources":["../../src/server/agent-chat-plugin.ts"],"names":[],"mappings":"AAcA,OAAO,EAML,KAAK,WAAW,EACjB,MAAM,8BAA8B,CAAC;AAsBtC,OAAO,KAAK,EACV,mBAAmB,EACnB,cAAc,EACd,kBAAkB,EAElB,eAAe,EAChB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,gBAAgB,EAcjB,MAAM,wBAAwB,CAAC;AA6EhC,OAAO,EAGL,KAAK,0BAA0B,EAC/B,KAAK,oBAAoB,EAC1B,MAAM,6BAA6B,CAAC;AAIrC,OAAO,EAKL,KAAK,cAAc,EACpB,MAAM,oBAAoB,CAAC;AA4W5B,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,GACnC,KAAK,CAAC;IACP,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,WAAW,CAAC,aAAa,CAAC,CAAC;CACzC,CAAC,CASD;AAmBD,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,SAAS,cAAc,EAAE,EACjC,WAAW,EAAE,SAAS,oBAAoB,EAAE,EAC5C,OAAO,GAAE,0BAA0B,GAAG;IAAE,KAAK,CAAC,EAAE,GAAG,CAAA;CAAO,GACzD;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAO7C;AAw/CD,KAAK,cAAc,GAAG,CAAC,QAAQ,EAAE,GAAG,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE9D,MAAM,WAAW,sBAAsB;IACrC,+DAA+D;IAC/D,OAAO,CAAC,EACJ,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,GAC3B,CAAC,MACG,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,GAC3B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IAC9C,wCAAwC;IACxC,OAAO,CAAC,EACJ,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,GAC3B,CAAC,MACG,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,GAC3B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IAC9C,mEAAmE;IACnE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qDAAqD;IACrD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,qEAAqE;IACrE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;sDAGkD;IAClD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iEAAiE;IACjE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,MAAM,CAAC,EACH,OAAO,0BAA0B,EAAE,WAAW,GAC9C,MAAM,GACN;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC;IACtD,qDAAqD;IACrD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,+DAA+D;IAC/D,gBAAgB,CAAC,EACb,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,GAC/B,CAAC,MACG,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,GAC/B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC;IAClD,kFAAkF;IAClF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6EAA6E;IAC7E,aAAa,CAAC,EAAE;QACd,mEAAmE;QACnE,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,uEAAuE;QACvE,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,gFAAgF;QAChF,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,gFAAgF;QAChF,KAAK,CAAC,EAAE,KAAK,CAAC;YACZ,GAAG,EAAE,MAAM,CAAC;YACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;YAClB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;YACjB,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;SAC1B,CAAC,CAAC;KACJ,CAAC;IACF;;;;;;;;;OASG;IACH,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACtE;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACxE;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;;;;;;;;;;;;;;OAcG;IACH,YAAY,CAAC,EAAE,CACb,KAAK,EAAE,GAAG,EACV,KAAK,EAAE,MAAM,KACV,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC5C;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,OAAO,8BAA8B,EAAE,2BAA2B,CAAC;IACxF;;;;OAIG;IACH,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE;QACzB,KAAK,EAAE,GAAG,CAAC;QACX,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;QAC1B,OAAO,EAAE,MAAM,CAAC;QAChB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,WAAW,EAAE,mBAAmB,EAAE,CAAC;QACnC,UAAU,EAAE,kBAAkB,EAAE,CAAC;QACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,oBAAoB,CAAC,EAAE,OAAO,CAAC;QAC/B,IAAI,EAAE,KAAK,GAAG,MAAM,CAAC;KACtB,KACG,IAAI,GACJ;QACE,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,WAAW,CAAC,EAAE,mBAAmB,EAAE,CAAC;KACrC,GACD,OAAO,CAAC,IAAI,GAAG;QACb,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,WAAW,CAAC,EAAE,mBAAmB,EAAE,CAAC;KACrC,CAAC,CAAC;IACP;;;;;;;;;;;;;;OAcG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;;;;;;;;;;OAaG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;;;;;;;;;;;;;;;OAkBG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B;;;;;OAKG;IACH,kBAAkB,CAAC,EAAE,CAAC,OAAO,EAAE;QAC7B,OAAO,EAAE,OAAO,iBAAiB,EAAE,OAAO,CAAC;QAC3C,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,OAAO,iBAAiB,EAAE,iBAAiB,CAAC;QACrD,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;KAC/B,KACG,OAAO,iBAAiB,EAAE,OAAO,GACjC,MAAM,GACN,IAAI,GACJ,SAAS,GACT,OAAO,CAAC,OAAO,iBAAiB,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;IAC3E;;;;;;;;;;OAUG;IACH,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAE5B;;;;;;;;;;;;;;;;;;OAkBG;IACH,aAAa,CAAC,EAAE;QACd,UAAU,CAAC,EAAE,KAAK,GAAG,WAAW,GAAG,SAAS,CAAC;QAC7C;;;;WAIG;QACH,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;KACxB,CAAC;IAEF;;;OAGG;IACH,UAAU,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC9D;AAyVD,eAAO,MAAM,gCAAgC;;;;CAWzC,CAAC;AAEL;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,MAAM,EACb,OAAO,UAAQ,EACf,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,CAAC,CAoLjB;AAoPD,wBAAgB,sCAAsC,CAAC,KAAK,EAAE;IAC5D,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB,GAAG,OAAO,CA2BV;AAED,wBAAgB,qBAAqB,CACnC,OAAO,CAAC,EAAE,sBAAsB,GAC/B,cAAc,CAqhIhB;AAED;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,EAAE,cAAwC,CAAC;AAa9E,yEAAyE;AACzE,wBAAgB,mBAAmB,IAAI,gBAAgB,GAAG,IAAI,CAE7D"}
|
|
@@ -4988,18 +4988,27 @@ Non-code requests are still fine on this surface: read data, navigate the UI, su
|
|
|
4988
4988
|
// payloads) or abort their run.
|
|
4989
4989
|
const ownsThread = (threadId) => callerOwnsThread(owner, threadId);
|
|
4990
4990
|
const ownsRun = (runId) => callerOwnsRun(owner, runId);
|
|
4991
|
-
// Route: GET /runs/list?goalId=agent-team
|
|
4992
|
-
// Returns
|
|
4991
|
+
// Route: GET /runs/list?goalId=agent-team|agent-harness
|
|
4992
|
+
// Returns background agents in the Code hub-compatible run shape.
|
|
4993
4993
|
const listMatch = url.match(/\/runs\/list(?:[/?]|$)/) ||
|
|
4994
4994
|
url.match(/^\/list(?:[/?]|$)/);
|
|
4995
4995
|
if (listMatch && method === "GET") {
|
|
4996
4996
|
const query = getQuery(event);
|
|
4997
4997
|
const goalId = query.goalId ? String(query.goalId) : undefined;
|
|
4998
4998
|
const runs = await runWithRequestContext({ userEmail: owner }, async () => {
|
|
4999
|
-
|
|
5000
|
-
|
|
5001
|
-
|
|
5002
|
-
|
|
4999
|
+
const runs = [];
|
|
5000
|
+
if (!goalId || goalId === "agent-team") {
|
|
5001
|
+
const { listAgentTeamBackgroundRuns } = await import("./agent-teams.js");
|
|
5002
|
+
runs.push(...(await listAgentTeamBackgroundRuns()));
|
|
5003
|
+
}
|
|
5004
|
+
if (!goalId || goalId === "agent-harness") {
|
|
5005
|
+
const { listAgentHarnessBackgroundRuns } = await import("../agent/harness/background.js");
|
|
5006
|
+
runs.push(...(await listAgentHarnessBackgroundRuns({
|
|
5007
|
+
goalId: "agent-harness",
|
|
5008
|
+
ownerEmail: owner,
|
|
5009
|
+
})));
|
|
5010
|
+
}
|
|
5011
|
+
return runs;
|
|
5003
5012
|
});
|
|
5004
5013
|
return { status: "ok", goalId, runs };
|
|
5005
5014
|
}
|
|
@@ -5011,9 +5020,16 @@ Non-code requests are still fine on this surface: read data, navigate the UI, su
|
|
|
5011
5020
|
if (stopMatch && method === "POST") {
|
|
5012
5021
|
const runId = decodeURIComponent(stopMatch[1]);
|
|
5013
5022
|
const { stopAgentTeamBackgroundRun } = await import("./agent-teams.js");
|
|
5014
|
-
|
|
5023
|
+
let result = await runWithRequestContext({ userEmail: owner }, () => stopAgentTeamBackgroundRun(runId));
|
|
5024
|
+
if (!result.ok && result.error === "Task not found") {
|
|
5025
|
+
const { stopAgentHarnessBackgroundRun } = await import("../agent/harness/background.js");
|
|
5026
|
+
result = await runWithRequestContext({ userEmail: owner }, () => stopAgentHarnessBackgroundRun(runId, { ownerEmail: owner }));
|
|
5027
|
+
}
|
|
5015
5028
|
if (!result.ok) {
|
|
5016
|
-
setResponseStatus(event, result.error === "Task not found"
|
|
5029
|
+
setResponseStatus(event, result.error === "Task not found" ||
|
|
5030
|
+
result.error === "Harness run not found"
|
|
5031
|
+
? 404
|
|
5032
|
+
: 400);
|
|
5017
5033
|
return { ok: false, error: result.error };
|
|
5018
5034
|
}
|
|
5019
5035
|
return { ok: true };
|
|
@@ -5050,11 +5066,19 @@ Non-code requests are still fine on this surface: read data, navigate the UI, su
|
|
|
5050
5066
|
const runId = decodeURIComponent(backgroundEventsMatch[1]);
|
|
5051
5067
|
const { getAgentTeamBackgroundRun, listAgentTeamBackgroundTranscriptEvents, } = await import("./agent-teams.js");
|
|
5052
5068
|
const run = await runWithRequestContext({ userEmail: owner }, () => getAgentTeamBackgroundRun(runId));
|
|
5053
|
-
if (
|
|
5069
|
+
if (run) {
|
|
5070
|
+
const events = await runWithRequestContext({ userEmail: owner }, () => listAgentTeamBackgroundTranscriptEvents(runId));
|
|
5071
|
+
return { status: "ok", runId, events };
|
|
5072
|
+
}
|
|
5073
|
+
const { getAgentHarnessBackgroundRun, listAgentHarnessBackgroundTranscriptEvents, } = await import("../agent/harness/background.js");
|
|
5074
|
+
const harnessRun = await runWithRequestContext({ userEmail: owner }, () => getAgentHarnessBackgroundRun(runId, { ownerEmail: owner }));
|
|
5075
|
+
if (!harnessRun) {
|
|
5054
5076
|
setResponseStatus(event, 404);
|
|
5055
5077
|
return { status: "unavailable", runId, events: [] };
|
|
5056
5078
|
}
|
|
5057
|
-
const events = await runWithRequestContext({ userEmail: owner }, () =>
|
|
5079
|
+
const events = await runWithRequestContext({ userEmail: owner }, () => listAgentHarnessBackgroundTranscriptEvents(runId, {
|
|
5080
|
+
ownerEmail: owner,
|
|
5081
|
+
}));
|
|
5058
5082
|
return { status: "ok", runId, events };
|
|
5059
5083
|
}
|
|
5060
5084
|
// Route: GET /runs/:id/events?after=N
|