@agent-native/core 0.78.0 → 0.78.2

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.
Files changed (96) hide show
  1. package/corpus/README.md +1 -1
  2. package/corpus/core/CHANGELOG.md +15 -0
  3. package/corpus/core/package.json +1 -1
  4. package/corpus/core/src/agent/production-agent.ts +269 -237
  5. package/corpus/core/src/agent/types.ts +22 -0
  6. package/corpus/core/src/client/AgentPanel.tsx +8 -0
  7. package/corpus/core/src/client/AssistantChat.tsx +40 -0
  8. package/corpus/core/src/client/agent-chat.ts +173 -0
  9. package/corpus/core/src/client/composer/TiptapComposer.tsx +316 -60
  10. package/corpus/core/src/client/composer/extensions/MentionReference.tsx +3 -0
  11. package/corpus/core/src/client/composer/types.ts +22 -0
  12. package/corpus/core/src/client/index.ts +5 -0
  13. package/corpus/core/src/server/agent-chat-plugin.ts +10 -0
  14. package/corpus/core/src/server/request-context.ts +8 -0
  15. package/corpus/templates/analytics/server/plugins/agent-chat.ts +13 -0
  16. package/corpus/templates/assets/.agents/skills/asset-generation/SKILL.md +10 -2
  17. package/corpus/templates/assets/.agents/skills/image-generation/SKILL.md +14 -7
  18. package/corpus/templates/assets/.agents/skills/library-management/SKILL.md +12 -0
  19. package/corpus/templates/assets/AGENTS.md +18 -3
  20. package/corpus/templates/assets/actions/_image-model-default.ts +24 -0
  21. package/corpus/templates/assets/actions/dismiss-variant-slots.ts +15 -22
  22. package/corpus/templates/assets/actions/generate-asset.ts +30 -23
  23. package/corpus/templates/assets/actions/generate-image-batch.ts +76 -29
  24. package/corpus/templates/assets/actions/generate-image.ts +46 -30
  25. package/corpus/templates/assets/actions/generate-video.ts +18 -3
  26. package/corpus/templates/assets/actions/list-assets.ts +39 -8
  27. package/corpus/templates/assets/actions/list-libraries.ts +24 -2
  28. package/corpus/templates/assets/actions/navigate.ts +1 -1
  29. package/corpus/templates/assets/actions/open-asset-picker.ts +38 -1
  30. package/corpus/templates/assets/actions/refresh-generation-run.ts +10 -0
  31. package/corpus/templates/assets/actions/save-generated-image.ts +21 -19
  32. package/corpus/templates/assets/actions/variant-slots.ts +131 -28
  33. package/corpus/templates/assets/actions/view-screen.ts +9 -0
  34. package/corpus/templates/assets/app/components/generation/GenerationResults.tsx +425 -0
  35. package/corpus/templates/assets/app/components/layout/Header.tsx +3 -1
  36. package/corpus/templates/assets/app/components/layout/Layout.tsx +5 -0
  37. package/corpus/templates/assets/app/components/layout/Sidebar.tsx +4 -6
  38. package/corpus/templates/assets/app/hooks/use-navigation-state.ts +47 -21
  39. package/corpus/templates/assets/app/i18n-data.ts +1815 -0
  40. package/corpus/templates/assets/app/lib/libraries.ts +6 -0
  41. package/corpus/templates/assets/app/lib/picker-chat-handoff.ts +71 -0
  42. package/corpus/templates/assets/app/routes/_index.tsx +4 -0
  43. package/corpus/templates/assets/app/routes/asset.$id.tsx +2 -2
  44. package/corpus/templates/assets/app/routes/audit.tsx +1 -1
  45. package/corpus/templates/assets/app/routes/brand-kits.$id.tsx +1557 -2164
  46. package/corpus/templates/assets/app/routes/brand-kits._index.tsx +7 -191
  47. package/corpus/templates/assets/app/routes/brand-kits.tsx +1 -5
  48. package/corpus/templates/assets/app/routes/libraries.tsx +4 -4
  49. package/corpus/templates/assets/app/routes/library.$id.tsx +9 -7
  50. package/corpus/templates/assets/app/routes/library.tsx +1454 -175
  51. package/corpus/templates/assets/server/db/index.ts +1 -1
  52. package/corpus/templates/assets/server/lib/generation.ts +86 -15
  53. package/corpus/templates/assets/server/plugins/agent-chat.ts +196 -0
  54. package/corpus/templates/assets/server/plugins/db.ts +5 -0
  55. package/corpus/templates/assets/shared/api.ts +6 -3
  56. package/dist/agent/production-agent.d.ts.map +1 -1
  57. package/dist/agent/production-agent.js +50 -29
  58. package/dist/agent/production-agent.js.map +1 -1
  59. package/dist/agent/types.d.ts +21 -0
  60. package/dist/agent/types.d.ts.map +1 -1
  61. package/dist/agent/types.js.map +1 -1
  62. package/dist/client/AgentPanel.d.ts +5 -1
  63. package/dist/client/AgentPanel.d.ts.map +1 -1
  64. package/dist/client/AgentPanel.js +2 -2
  65. package/dist/client/AgentPanel.js.map +1 -1
  66. package/dist/client/AssistantChat.d.ts +6 -0
  67. package/dist/client/AssistantChat.d.ts.map +1 -1
  68. package/dist/client/AssistantChat.js +15 -3
  69. package/dist/client/AssistantChat.js.map +1 -1
  70. package/dist/client/agent-chat.d.ts +32 -0
  71. package/dist/client/agent-chat.d.ts.map +1 -1
  72. package/dist/client/agent-chat.js +113 -0
  73. package/dist/client/agent-chat.js.map +1 -1
  74. package/dist/client/composer/TiptapComposer.d.ts +2 -1
  75. package/dist/client/composer/TiptapComposer.d.ts.map +1 -1
  76. package/dist/client/composer/TiptapComposer.js +228 -56
  77. package/dist/client/composer/TiptapComposer.js.map +1 -1
  78. package/dist/client/composer/extensions/MentionReference.d.ts.map +1 -1
  79. package/dist/client/composer/extensions/MentionReference.js +3 -0
  80. package/dist/client/composer/extensions/MentionReference.js.map +1 -1
  81. package/dist/client/composer/types.d.ts +21 -0
  82. package/dist/client/composer/types.d.ts.map +1 -1
  83. package/dist/client/composer/types.js.map +1 -1
  84. package/dist/client/index.d.ts +1 -1
  85. package/dist/client/index.d.ts.map +1 -1
  86. package/dist/client/index.js +1 -1
  87. package/dist/client/index.js.map +1 -1
  88. package/dist/notifications/routes.d.ts +1 -1
  89. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  90. package/dist/server/agent-chat-plugin.js +5 -0
  91. package/dist/server/agent-chat-plugin.js.map +1 -1
  92. package/dist/server/agent-engine-api-key-route.d.ts +1 -1
  93. package/dist/server/request-context.d.ts +8 -0
  94. package/dist/server/request-context.d.ts.map +1 -1
  95. package/dist/server/request-context.js.map +1 -1
  96. package/package.json +1 -1
@@ -13,7 +13,7 @@ for (const type of ["asset-library", "image-library"] as const) {
13
13
  sharesTable: schema.assetLibraryShares,
14
14
  displayName: "Asset Library",
15
15
  titleColumn: "title",
16
- getResourcePath: (library) => `/brand-kits/${library.id}`,
16
+ getResourcePath: (library) => `/library/${library.id}`,
17
17
  getDb,
18
18
  });
19
19
  }
@@ -65,6 +65,17 @@ export interface GenerateProviderOutput {
65
65
  const MANAGED_PROVIDER_MAX_ATTEMPTS = 3;
66
66
  const MANAGED_PROVIDER_RETRY_DELAY_MS =
67
67
  process.env.NODE_ENV === "test" ? 0 : 2500;
68
+ // A single managed image generation can legitimately run longer than one
69
+ // request's abort window (pro models routinely exceed 90s). The request always
70
+ // carries the run id as an idempotency key, so re-POSTing the same key replays
71
+ // the finished result (or answers 409 "request in progress") instead of
72
+ // starting a second, double-charged generation. When a request aborts client
73
+ // side, hits an upstream gateway timeout, or reports in-progress, we poll the
74
+ // same key until it resolves rather than failing. ~40 polls * 6s ≈ 4 min.
75
+ const MANAGED_PROVIDER_INFLIGHT_MAX_POLLS =
76
+ process.env.NODE_ENV === "test" ? 6 : 40;
77
+ const MANAGED_PROVIDER_INFLIGHT_POLL_MS =
78
+ process.env.NODE_ENV === "test" ? 0 : 6000;
68
79
 
69
80
  export async function getGeminiApiKey(): Promise<string> {
70
81
  const key = await resolveSecret("GEMINI_API_KEY");
@@ -135,12 +146,19 @@ function isRetryableProviderError(err: unknown): boolean {
135
146
  class BuilderImageGenerationError extends Error {
136
147
  readonly status?: number;
137
148
  readonly detail?: string;
149
+ readonly code?: string;
138
150
 
139
- constructor(message: string, status?: number, detail?: string) {
151
+ constructor(
152
+ message: string,
153
+ status?: number,
154
+ detail?: string,
155
+ code?: string,
156
+ ) {
140
157
  super(message);
141
158
  this.name = "BuilderImageGenerationError";
142
159
  this.status = status;
143
160
  this.detail = detail;
161
+ this.code = code;
144
162
  }
145
163
  }
146
164
 
@@ -151,12 +169,32 @@ function isRetryableBuilderImageGenerationError(err: unknown): boolean {
151
169
  );
152
170
  }
153
171
 
172
+ // A client-side abort, an upstream gateway timeout, or the service's explicit
173
+ // 409 "request_in_progress" all mean the generation is still running under this
174
+ // idempotency key. Re-POSTing the same key replays the finished result once the
175
+ // service completes, so these are polled rather than surfaced as failures.
176
+ function isInFlightImageGenerationError(err: unknown): boolean {
177
+ if (!(err instanceof BuilderImageGenerationError)) return false;
178
+ return (
179
+ err.code === "client_timeout" ||
180
+ err.code === "request_in_progress" ||
181
+ err.status === 504 ||
182
+ err.status === 409
183
+ );
184
+ }
185
+
154
186
  function generationRetryDelay(attempt: number): Promise<void> {
155
187
  return new Promise((resolve) => {
156
188
  setTimeout(resolve, attempt * MANAGED_PROVIDER_RETRY_DELAY_MS);
157
189
  });
158
190
  }
159
191
 
192
+ function generationPollDelay(): Promise<void> {
193
+ return new Promise((resolve) => {
194
+ setTimeout(resolve, MANAGED_PROVIDER_INFLIGHT_POLL_MS);
195
+ });
196
+ }
197
+
160
198
  interface BuilderImageGenerationResponse {
161
199
  id: string;
162
200
  status: "completed";
@@ -231,9 +269,14 @@ export async function generateWithBuilderImageApi(
231
269
  signal: AbortSignal.timeout(90_000),
232
270
  }).catch((err) => {
233
271
  if ((err as Error)?.name === "AbortError") {
272
+ // The socket aborted, but the service keeps generating under this
273
+ // idempotency key. Flag it so the retry loop polls the key instead of
274
+ // starting a fresh (double-charged) generation.
234
275
  throw new BuilderImageGenerationError(
235
276
  "Builder-managed image generation timed out.",
236
277
  504,
278
+ undefined,
279
+ "client_timeout",
237
280
  );
238
281
  }
239
282
  throw err;
@@ -242,10 +285,12 @@ export async function generateWithBuilderImageApi(
242
285
  if (!response.ok) {
243
286
  const text = await response.text().catch(() => "");
244
287
  const detail = extractBuilderErrorDetail(text);
288
+ const code = extractBuilderErrorCode(text);
245
289
  throw new BuilderImageGenerationError(
246
290
  `Builder-managed image generation failed (${response.status})${detail ? `: ${detail}` : "."}`,
247
291
  response.status,
248
292
  detail,
293
+ code,
249
294
  );
250
295
  }
251
296
 
@@ -286,28 +331,41 @@ export async function generateWithBuilderImageApi(
286
331
  async function generateWithRetryingBuilderImageApi(
287
332
  input: GenerateProviderInput,
288
333
  ): Promise<GenerateProviderOutput> {
289
- let lastError: unknown;
290
- for (let attempt = 0; attempt < MANAGED_PROVIDER_MAX_ATTEMPTS; attempt += 1) {
334
+ let transientAttempts = 0;
335
+ let inFlightPolls = 0;
336
+ for (;;) {
291
337
  try {
292
- if (attempt > 0) {
293
- await generationRetryDelay(attempt);
294
- }
295
338
  return await generateWithBuilderImageApi(input);
296
339
  } catch (err) {
297
- lastError = err;
340
+ // The generation is still running under this idempotency key. Poll the
341
+ // same key — a pending request returns 409 immediately and the final
342
+ // poll returns the stored image as an idempotent replay (no re-charge) —
343
+ // until it resolves or we exhaust the polling budget.
344
+ if (isInFlightImageGenerationError(err)) {
345
+ if (inFlightPolls >= MANAGED_PROVIDER_INFLIGHT_MAX_POLLS) {
346
+ throw new BuilderImageGenerationError(
347
+ "Builder-managed image generation is still running after the wait budget. It may finish shortly — try again to pick up the result.",
348
+ 504,
349
+ err instanceof BuilderImageGenerationError ? err.detail : undefined,
350
+ "client_timeout",
351
+ );
352
+ }
353
+ inFlightPolls += 1;
354
+ await generationPollDelay();
355
+ continue;
356
+ }
357
+ // Fresh transient server errors get a few quick retries with backoff.
298
358
  if (
299
- !isRetryableBuilderImageGenerationError(err) ||
300
- attempt === MANAGED_PROVIDER_MAX_ATTEMPTS - 1
359
+ isRetryableBuilderImageGenerationError(err) &&
360
+ transientAttempts < MANAGED_PROVIDER_MAX_ATTEMPTS - 1
301
361
  ) {
302
- throw err;
362
+ transientAttempts += 1;
363
+ await generationRetryDelay(transientAttempts);
364
+ continue;
303
365
  }
366
+ throw err;
304
367
  }
305
368
  }
306
- throw lastError instanceof Error
307
- ? lastError
308
- : new BuilderImageGenerationError(
309
- "Builder-managed image generation failed.",
310
- );
311
369
  }
312
370
 
313
371
  export async function generateWithManagedImageProvider(
@@ -392,6 +450,19 @@ function extractBuilderErrorDetail(text: string): string {
392
450
  return trimmed.slice(0, 300);
393
451
  }
394
452
 
453
+ // The managed service tags errors with a stable machine code (e.g.
454
+ // "request_in_progress") in the JSON body. It drives retry vs. poll decisions.
455
+ function extractBuilderErrorCode(text: string): string | undefined {
456
+ const trimmed = text.trim();
457
+ if (!trimmed) return undefined;
458
+ try {
459
+ const parsed = JSON.parse(trimmed) as { code?: unknown };
460
+ return typeof parsed?.code === "string" ? parsed.code : undefined;
461
+ } catch {
462
+ return undefined;
463
+ }
464
+ }
465
+
395
466
  function readProviderErrorDetail(value: unknown): string | null {
396
467
  if (typeof value === "string") return value;
397
468
  if (!value || typeof value !== "object") return null;
@@ -3,8 +3,11 @@ import {
3
3
  createAgentChatPlugin,
4
4
  loadActionsFromStaticRegistry,
5
5
  } from "@agent-native/core/server";
6
+ import { accessFilter } from "@agent-native/core/sharing";
7
+ import { and, asc, desc, inArray, isNull } from "drizzle-orm";
6
8
 
7
9
  import actionsRegistry from "../../.generated/actions-registry.js";
10
+ import { getDb, schema } from "../db/index.js";
8
11
  import "../register-secrets.js";
9
12
 
10
13
  const INITIAL_TOOL_NAMES = [
@@ -44,5 +47,198 @@ export default createAgentChatPlugin({
44
47
  initialToolNames: INITIAL_TOOL_NAMES,
45
48
  actions: loadActionsFromStaticRegistry(actionsRegistry),
46
49
  resolveOrgId: async (event) => (await getOrgContext(event)).orgId,
50
+ mentionProviders: {
51
+ mediaTypes: {
52
+ label: "Media type",
53
+ icon: "file",
54
+ search: (query: string) => {
55
+ const q = query.trim().toLowerCase();
56
+ return [
57
+ {
58
+ id: "media-type:image",
59
+ label: "Image",
60
+ description: "Generate image assets",
61
+ icon: "file",
62
+ refType: "media-type",
63
+ refId: "image",
64
+ slotKey: "media-type",
65
+ slotLabel: "Media",
66
+ },
67
+ {
68
+ id: "media-type:video",
69
+ label: "Video",
70
+ description: "Generate video assets",
71
+ icon: "file",
72
+ refType: "media-type",
73
+ refId: "video",
74
+ slotKey: "media-type",
75
+ slotLabel: "Media",
76
+ },
77
+ ].filter((item) =>
78
+ q
79
+ ? item.label.toLowerCase().includes(q) ||
80
+ item.refId.toLowerCase().includes(q)
81
+ : true,
82
+ );
83
+ },
84
+ },
85
+ presets: {
86
+ label: "Presets",
87
+ icon: "document",
88
+ search: async (query: string) => {
89
+ try {
90
+ const db = getDb();
91
+ const libraryRows = await db
92
+ .select({
93
+ id: schema.assetLibraries.id,
94
+ title: schema.assetLibraries.title,
95
+ })
96
+ .from(schema.assetLibraries)
97
+ .where(
98
+ and(
99
+ accessFilter(schema.assetLibraries, schema.assetLibraryShares),
100
+ isNull(schema.assetLibraries.archivedAt),
101
+ ),
102
+ )
103
+ .orderBy(desc(schema.assetLibraries.updatedAt));
104
+ const libraryIds = libraryRows.map((library) => library.id);
105
+ if (!libraryIds.length) return [];
106
+ const libraryTitleById = new Map(
107
+ libraryRows.map((library) => [library.id, library.title]),
108
+ );
109
+ const rows = await db
110
+ .select({
111
+ id: schema.assetGenerationPresets.id,
112
+ libraryId: schema.assetGenerationPresets.libraryId,
113
+ title: schema.assetGenerationPresets.title,
114
+ description: schema.assetGenerationPresets.description,
115
+ aspectRatio: schema.assetGenerationPresets.aspectRatio,
116
+ imageSize: schema.assetGenerationPresets.imageSize,
117
+ model: schema.assetGenerationPresets.model,
118
+ mediaType: schema.assetGenerationPresets.mediaType,
119
+ sortOrder: schema.assetGenerationPresets.sortOrder,
120
+ })
121
+ .from(schema.assetGenerationPresets)
122
+ .where(inArray(schema.assetGenerationPresets.libraryId, libraryIds))
123
+ .orderBy(
124
+ asc(schema.assetGenerationPresets.sortOrder),
125
+ asc(schema.assetGenerationPresets.title),
126
+ );
127
+ const q = query.trim().toLowerCase();
128
+ return rows
129
+ .filter((preset) => {
130
+ if (!q) return true;
131
+ const libraryTitle = libraryTitleById.get(preset.libraryId) ?? "";
132
+ return [
133
+ preset.id,
134
+ preset.title,
135
+ preset.description ?? "",
136
+ libraryTitle,
137
+ preset.aspectRatio,
138
+ preset.imageSize,
139
+ preset.model,
140
+ preset.mediaType,
141
+ ]
142
+ .join(" ")
143
+ .toLowerCase()
144
+ .includes(q);
145
+ })
146
+ .slice(0, 20)
147
+ .map((preset) => {
148
+ const libraryTitle =
149
+ libraryTitleById.get(preset.libraryId) ?? "Brand kit";
150
+ return {
151
+ id: `preset:${preset.id}`,
152
+ label: preset.title,
153
+ description: `${libraryTitle} · ${preset.aspectRatio} · ${preset.imageSize} · ${preset.model}`,
154
+ icon: "document",
155
+ refType: "preset",
156
+ refId: preset.id,
157
+ refPath: `/library/${preset.libraryId}`,
158
+ slotKey: "preset",
159
+ slotLabel: "Preset",
160
+ metadata: {
161
+ libraryId: preset.libraryId,
162
+ libraryTitle,
163
+ requiredSlotKey: "brand-kit",
164
+ requiredRefId: preset.libraryId,
165
+ mediaType: preset.mediaType,
166
+ },
167
+ relatedReferences: [
168
+ {
169
+ label: libraryTitle,
170
+ icon: "folder",
171
+ source: "brandKits",
172
+ refType: "brand-kit",
173
+ refId: preset.libraryId,
174
+ refPath: `/library/${preset.libraryId}`,
175
+ slotKey: "brand-kit",
176
+ slotLabel: "Brand kit",
177
+ clearsSlots: ["preset"],
178
+ metadata: {
179
+ libraryId: preset.libraryId,
180
+ },
181
+ },
182
+ ],
183
+ };
184
+ });
185
+ } catch (err) {
186
+ console.error("[assets] Preset mention provider failed:", err);
187
+ return [];
188
+ }
189
+ },
190
+ },
191
+ brandKits: {
192
+ label: "Brand kits",
193
+ icon: "folder",
194
+ search: async (query: string) => {
195
+ try {
196
+ const rows = await getDb()
197
+ .select({
198
+ id: schema.assetLibraries.id,
199
+ title: schema.assetLibraries.title,
200
+ description: schema.assetLibraries.description,
201
+ updatedAt: schema.assetLibraries.updatedAt,
202
+ })
203
+ .from(schema.assetLibraries)
204
+ .where(
205
+ and(
206
+ accessFilter(schema.assetLibraries, schema.assetLibraryShares),
207
+ isNull(schema.assetLibraries.archivedAt),
208
+ ),
209
+ )
210
+ .orderBy(desc(schema.assetLibraries.updatedAt));
211
+ const q = query.trim().toLowerCase();
212
+ return rows
213
+ .filter((library) => {
214
+ if (!q) return true;
215
+ return [library.id, library.title, library.description ?? ""]
216
+ .join(" ")
217
+ .toLowerCase()
218
+ .includes(q);
219
+ })
220
+ .slice(0, 20)
221
+ .map((library) => ({
222
+ id: `brand-kit:${library.id}`,
223
+ label: library.title,
224
+ description: library.description ?? `/library/${library.id}`,
225
+ icon: "folder",
226
+ refType: "brand-kit",
227
+ refId: library.id,
228
+ refPath: `/library/${library.id}`,
229
+ slotKey: "brand-kit",
230
+ slotLabel: "Brand kit",
231
+ clearsSlots: ["preset"],
232
+ metadata: {
233
+ libraryId: library.id,
234
+ },
235
+ }));
236
+ } catch (err) {
237
+ console.error("[assets] Brand kit mention provider failed:", err);
238
+ return [];
239
+ }
240
+ },
241
+ },
242
+ },
47
243
  runSoftTimeoutMs: 240_000,
48
244
  });
@@ -297,6 +297,11 @@ export default runMigrations(
297
297
  CREATE INDEX IF NOT EXISTS image_libraries_owner_org_updated_idx
298
298
  ON image_libraries (owner_email, org_id, updated_at)`,
299
299
  },
300
+ {
301
+ version: 34,
302
+ sql: `CREATE INDEX IF NOT EXISTS image_assets_library_created_idx
303
+ ON image_assets (library_id, created_at)`,
304
+ },
300
305
  ],
301
306
  // Preserve the legacy migration table name so existing Images deployments do
302
307
  // not rerun historical additive migrations after the app slug becomes Assets.
@@ -134,6 +134,7 @@ export interface ImageLibrarySummary {
134
134
  videoCount?: number;
135
135
  coverAsset?: ImageAssetPreview | null;
136
136
  previewAssets?: ImageAssetPreview[];
137
+ folders?: AssetFolderSummary[];
137
138
  }
138
139
 
139
140
  export interface ImageAssetPreview {
@@ -199,6 +200,8 @@ export interface AssetVariantState {
199
200
  collectionId?: string | null;
200
201
  presetId?: string | null;
201
202
  sessionId?: string | null;
203
+ threadId?: string | null;
204
+ variantScopeId?: string | null;
202
205
  prompt: string;
203
206
  slots: Array<{
204
207
  slotId: string;
@@ -225,9 +228,9 @@ export interface GenerationPresetSummary {
225
228
  category: ImageCategory;
226
229
  mediaType: AssetMediaType;
227
230
  promptTemplate?: string | null;
228
- aspectRatio: AspectRatio;
229
- imageSize: ImageSize;
230
- model: ImageModel;
231
+ aspectRatio: AspectRatio | VideoAspectRatio;
232
+ imageSize: ImageSize | VideoResolution;
233
+ model: ImageModel | VideoModel;
231
234
  textPolicy: string;
232
235
  referencePolicy: GenerationPresetReferencePolicy;
233
236
  settings: Record<string, unknown>;
@@ -1 +1 @@
1
- {"version":3,"file":"production-agent.d.ts","sourceRoot":"","sources":["../../src/agent/production-agent.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,YAAY,IAAI,cAAc,EAAE,MAAM,IAAI,CAAC;AAgCzD,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,+BAA+B,CAAC;AA0BvC,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAMhE,OAAO,KAAK,EACV,WAAW,EACX,UAAU,EACV,aAAa,EACb,iBAAiB,EAGlB,MAAM,mBAAmB,CAAC;AAgB3B,OAAO,EAIL,KAAK,SAAS,EACf,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAEL,cAAc,EACd,qBAAqB,EACrB,0BAA0B,EAC1B,MAAM,EACN,QAAQ,EAET,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AA6BlD,OAAO,KAAK,EACV,UAAU,EAEV,mBAAmB,EAEnB,cAAc,EACd,kBAAkB,EAClB,0BAA0B,EAC3B,MAAM,YAAY,CAAC;AAKpB,OAAO,EAAE,eAAe,EAAE,CAAC;AAE3B;;;;;;;;;GASG;AACH,eAAO,MAAM,yBAAyB,QAAS,CAAC;AAChD;;;;;;GAMG;AACH,eAAO,MAAM,kCAAkC,OAAQ,CAAC;AACxD,eAAO,MAAM,wBAAwB,MAAM,CAAC;AAE5C,MAAM,MAAM,yBAAyB,GACjC;IAAE,MAAM,EAAE,QAAQ,CAAA;CAAE,GACpB;IAAE,MAAM,EAAE,WAAW,CAAA;CAAE,GACvB;IACE,MAAM,EAAE,QAAQ,CAAC;IACjB,MAAM,EAAE,iBAAiB,GAAG,sBAAsB,GAAG,QAAQ,CAAC;CAC/D,CAAC;AAmBN;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,gCAAgC,CAAC,IAAI,EAAE;IAC3D,UAAU,EAAE,OAAO,CAAC;IACpB,qBAAqB,EAAE,OAAO,CAAC;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB;;;;;;;OAOG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,6FAA6F;IAC7F,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;QACpC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;QAC5B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;QACtB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC1B,wEAAwE;QACxE,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KAChC,GAAG,IAAI,CAAC,CAAC;IACV,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3C,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACvC,GAAG,OAAO,CAAC,yBAAyB,CAAC,CA6FrC;AA4CD;;;;;;;;;GASG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GACpC,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CA8C7B;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAE3D;AAaD;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,oBAAoB,CACxC,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GACpC,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAsB7B;AAED,sEAAsE;AACtE,wBAAsB,uBAAuB,CAC3C,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GACpC,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAE7B;AAED;;;;GAIG;AACH,YAAY,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEnE,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,UAAU,CAAC;IACjB,GAAG,EAAE,CACH,IAAI,EAAE,GAAG,EACT,OAAO,CAAC,EAAE,OAAO,cAAc,EAAE,gBAAgB,KAC9C,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;IACxB,0EAA0E;IAC1E,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,qFAAqF;IACrF,IAAI,CAAC,EAAE,OAAO,cAAc,EAAE,gBAAgB,GAAG,KAAK,CAAC;IACvD;;0EAEsE;IACtE,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;sDAGkD;IAClD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;qFACiF;IACjF,WAAW,CAAC,EAAE,OAAO,cAAc,EAAE,uBAAuB,CAAC;IAC7D;4EACwE;IACxE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;oDAEgD;IAChD,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;;;gDAK4C;IAC5C,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;2EAEuE;IACvE,IAAI,CAAC,EAAE,OAAO,cAAc,EAAE,iBAAiB,CAAC;IAChD;;qCAEiC;IACjC,MAAM,CAAC,EAAE,OAAO,cAAc,EAAE,kBAAkB,CAAC;IACnD,2EAA2E;IAC3E,MAAM,CAAC,EAAE,OAAO,iBAAiB,EAAE,kBAAkB,CAAC;IACtD;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;;;OAMG;IACH,aAAa,CAAC,EACV,OAAO,GACP,CAAC,CACC,IAAI,EAAE,GAAG,EACT,GAAG,CAAC,EAAE,OAAO,cAAc,EAAE,gBAAgB,KAC1C,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;CACtC;AAED,4CAA4C;AAC5C,MAAM,MAAM,WAAW,GAAG,WAAW,CAAC;AAEtC,MAAM,MAAM,kBAAkB,GAAG,KAAK,GAAG,MAAM,CAAC;AAEhD,eAAO,MAAM,uBAAuB,ivBAQ2H,CAAC;AAwFhK,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,WAAW,GACjB,OAAO,CAiBT;AA0ED,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,GACnC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAiC7B;AAED,MAAM,WAAW,sBAAsB;IACrC,+FAA+F;IAC/F,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACtC,wCAAwC;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACtC,0FAA0F;IAC1F,YAAY,EAAE,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,GAAG,KAAK,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IAClE,kFAAkF;IAClF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,+DAA+D;IAC/D,MAAM,CAAC,EACH,WAAW,GACX,MAAM,GACN;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC;IACtD,qEAAqE;IACrE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kEAAkE;IAClE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4EAA4E;IAC5E,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,6DAA6D;IAC7D,eAAe,CAAC,EAAE,aAAa,SAAS,KAAK,GAAG,KAAK,GAAG,GAAG,CAAC;IAC5D,uEAAuE;IACvE,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;IACvE,mEAAmE;IACnE,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE;QACxB,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;QAC7B,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,CAAC,EAAE,mBAAmB,EAAE,CAAC;KACrC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B;;;;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,kBAAkB,CAAC;KAC1B,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;;;mDAG+C;IAC/C,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,4FAA4F;IAC5F,UAAU,CAAC,EAAE,CACX,IAAI,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,EACrC,QAAQ,EAAE,MAAM,KACb,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAChE,qEAAqE;IACrE,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7D;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,2BAA2B,CAAC;IACjD;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;;;;;OAMG;IACH,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B;;;;OAIG;IACH,UAAU,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC9D;AAED,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,IAAI,CAAC,sBAAsB,EAAE,mBAAmB,CAAC,EAC1D,KAAK,EAAE,GAAG,GACT,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAUxB;AAoFD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAoB3D;AAED,6CAA6C;AAC7C,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAwDtD;AAeD;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,aAAa,EAAE,EACzB,QAAQ,SAAyB,GAChC,aAAa,EAAE,GAAG,IAAI,CA0BxB;AAiGD,wBAAgB,+BAA+B,CAAC,IAAI,EAAE;IACpD,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,mBAAmB,EAAE,CAAC;CACrC,GAAG,iBAAiB,EAAE,CAiFtB;AAyBD,wBAAgB,iCAAiC,CAC/C,OAAO,EAAE,0BAA0B,EAAE,GAAG,SAAS,GAChD,aAAa,EAAE,GAAG,IAAI,CA2GxB;AAoBD,wBAAsB,4BAA4B,CAChD,GAAG,EAAE,kBAAkB,GACtB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA8CxB;AAqED,qDAAqD;AACrD,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,kCAAkC;IACjD,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,gBAAgB,EAAE,iBAAiB,EAAE,CAAC;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,wBAAwB,EAAE,CAAC;IACtC,WAAW,EAAE,0BAA0B,EAAE,CAAC;IAC1C,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,kBAAkB,CAAC;CACnC;AAED,MAAM,MAAM,iCAAiC,GACzC,MAAM,GACN;IACE,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEN,MAAM,MAAM,2BAA2B,GAAG,CACxC,OAAO,EAAE,kCAAkC,KAEzC,iCAAiC,GACjC,IAAI,GACJ,SAAS,GACT,OAAO,CAAC,iCAAiC,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;AAYlE,eAAO,MAAM,8BAA8B,mOACuL,CAAC;AAEnO,MAAM,MAAM,2BAA2B,GACnC,aAAa,GACb,YAAY,GACZ,YAAY,GACZ,cAAc,GACd,iBAAiB,GACjB,qBAAqB,CAAC;AAE1B,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,aAAa,EAAE,EACzB,MAAM,EAAE,2BAA2B,QAuBpC;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAoC5D;AAED;;;;GAIG;AACH,wBAAgB,mCAAmC,CACjD,GAAG,EAAE,OAAO,GACX,iBAAiB,GAAG,qBAAqB,CAa3C;AAqQD;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,GACnC,UAAU,EAAE,CAkBd;AAyOD,wBAAgB,+BAA+B,CAAC,IAAI,EAAE;IACpD,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,MAAM,CAsBT;AAED,wBAAgB,8BAA8B,CAAC,IAAI,EAAE;IACnD,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,WAAW,GAAG,SAAS,CAAC;IAC/B,cAAc,EAAE,SAAS,wBAAwB,EAAE,CAAC;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAgBnE;AA6FD;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE;IACvC,MAAM,EAAE,WAAW,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,cAAc,CAAC,EAAE,UAAU,EAAE,CAAC;IAC9B,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACrC,IAAI,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;IACtC,MAAM,EAAE,WAAW,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,mBAAmB,EAAE,CAAC;IACpC,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,eAAe,CAAC,EAAE,GAAG,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,kBAAkB,CAAC;IACnC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kBAAkB,CAAC,EAAE,2BAA2B,CAAC;IACjD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,UAAU,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7D;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B;;;;;;;OAOG;IACH,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;CAC1B,GAAG,OAAO,CAAC,cAAc,CAAC,CAsuC1B;AA4CD;;;;;;GAMG;AACH,eAAO,MAAM,gCAAgC,KAAK,CAAC;AAEnD;;;;;;GAMG;AACH,wBAAgB,iCAAiC,CAAC,IAAI,EAAE;IACtD,kBAAkB,EAAE,OAAO,CAAC;IAC5B,GAAG,EAAE,SAAS,CAAC;IACf,iBAAiB,EAAE,MAAM,CAAC;CAC3B,GAAG,OAAO,CAOV;AA+BD,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,sBAAsB,GAC9B,cAAc,CA2oDhB;AAED,OAAO,EACL,qBAAqB,EACrB,0BAA0B,EAC1B,MAAM,EACN,QAAQ,EACR,cAAc,GACf,CAAC"}
1
+ {"version":3,"file":"production-agent.d.ts","sourceRoot":"","sources":["../../src/agent/production-agent.ts"],"names":[],"mappings":"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"}
@@ -2997,6 +2997,11 @@ export function createProductionAgentHandler(options) {
2997
2997
  if (requestRunCtx) {
2998
2998
  requestRunCtx.browserTabId = requestBrowserTabId;
2999
2999
  requestRunCtx.chatScope = requestChatScope;
3000
+ // Let template extraContext / system-prompt builders detect the durable
3001
+ // background worker so they can skip heavy hang-prone enrichment (e.g. the
3002
+ // analytics data-dictionary read) that otherwise stalls the worker before
3003
+ // it claims its run. Set early — before the system-prompt build runs.
3004
+ requestRunCtx.isBackgroundWorker = isBackgroundWorker;
3000
3005
  }
3001
3006
  const requestMode = body.mode === "plan" ? "plan" : "act";
3002
3007
  const hasMessageText = typeof message === "string" && message.trim().length > 0;
@@ -3196,13 +3201,13 @@ export function createProductionAgentHandler(options) {
3196
3201
  // Run all independent pre-send steps in parallel. Each of these hits
3197
3202
  // the DB or invokes an action; running them sequentially was the
3198
3203
  // single biggest contributor to pre-LLM latency.
3199
- const enrichedMessagePromise = enrichMessage(requestMessage, references);
3200
- const loopSettingsPromise = readAgentLoopSettings({
3204
+ const enrichedMessageThunk = () => enrichMessage(requestMessage, references);
3205
+ const loopSettingsThunk = () => readAgentLoopSettings({
3201
3206
  userEmail: ownerEmail ?? getRequestUserEmail() ?? null,
3202
3207
  orgId: getRequestOrgId() ?? null,
3203
3208
  }).catch(() => readAgentLoopSettings({}));
3204
3209
  let systemPromptError = null;
3205
- const systemPromptPromise = (async () => {
3210
+ const systemPromptThunk = () => (async () => {
3206
3211
  const sysPromptStart = Date.now();
3207
3212
  try {
3208
3213
  return typeof options.systemPrompt === "function"
@@ -3217,7 +3222,7 @@ export function createProductionAgentHandler(options) {
3217
3222
  setupMarks.sysPromptMs = Date.now() - sysPromptStart;
3218
3223
  }
3219
3224
  })();
3220
- const screenContextPromise = (async () => {
3225
+ const screenContextThunk = () => (async () => {
3221
3226
  const screenStart = Date.now();
3222
3227
  try {
3223
3228
  const viewScreenAction = resolvedActions["view-screen"];
@@ -3249,7 +3254,7 @@ export function createProductionAgentHandler(options) {
3249
3254
  }
3250
3255
  return "";
3251
3256
  })();
3252
- const urlContextPromise = (async () => {
3257
+ const urlContextThunk = () => (async () => {
3253
3258
  try {
3254
3259
  const url = (await readAppStateForBrowserTab("__url__", requestBrowserTabId));
3255
3260
  if (url && (url.pathname || url.search || url.hash)) {
@@ -3283,7 +3288,7 @@ export function createProductionAgentHandler(options) {
3283
3288
  // with text selected on the page. Treat anything older than 5 minutes
3284
3289
  // as stale and ignore it.
3285
3290
  const SELECTION_TTL_MS = 5 * 60 * 1000;
3286
- const selectionContextPromise = (async () => {
3291
+ const selectionContextThunk = () => (async () => {
3287
3292
  try {
3288
3293
  const sel = (await readAppState("pending-selection-context"));
3289
3294
  if (!sel?.text)
@@ -3304,7 +3309,7 @@ export function createProductionAgentHandler(options) {
3304
3309
  // so the agent knows what files, skills, jobs, and custom agents exist.
3305
3310
  // Templates can opt out via `skipFilesContext: true` when the inventory
3306
3311
  // is unrelated to the app's job (e.g. a voice-first macro tracker).
3307
- const filesContextPromise = (async () => {
3312
+ const filesContextThunk = () => (async () => {
3308
3313
  let filesContext = "";
3309
3314
  if (options.skipFilesContext)
3310
3315
  return filesContext;
@@ -3387,23 +3392,32 @@ export function createProductionAgentHandler(options) {
3387
3392
  }
3388
3393
  return filesContext;
3389
3394
  })();
3390
- // Durable bg worker: a pre-send DB read that HANGS (rather than erroring)
3391
- // would otherwise stall the worker until the foreground inline-recovery
3392
- // grace (~16s) — wasting the entire 15-min durable budget and leaving the
3393
- // run un-claimed (the exact analytics symptom: diag stuck at model_done,
3394
- // preStart≈18s). Cap each pre-send step so a hang degrades to a safe default
3395
- // and the worker proceeds to claim + run. The cap fires only when the event
3396
- // loop is free, so it also distinguishes an async hang (cap fires → worker
3397
- // claims) from an event-loop block (cap can't fire still frozen). The
3398
- // foreground keeps the un-capped path, so its behaviour is unchanged. On a
3399
- // rejection (e.g. enrichMessage has no .catch) the cap also resolves to the
3400
- // fallback rather than rejecting the whole Promise.all.
3401
- const presendCap = (p, fallback, ms) => {
3395
+ // Durable bg worker: a pre-send step that HANGS (rather than erroring) would
3396
+ // otherwise stall the worker until the foreground inline-recovery grace
3397
+ // (~16s) — wasting the entire 15-min durable budget and leaving the run
3398
+ // un-claimed (the exact analytics symptom: diag stuck at model_done,
3399
+ // preStart≈18s). `presendCap` takes a THUNK (not an eagerly-started promise):
3400
+ // the work runs INSIDE the cap, after the timer is armed, so a step whose
3401
+ // own synchronous prefix is heavy can still be timed out an eagerly-created
3402
+ // promise would start (and could block the loop) before the cap ever wrapped
3403
+ // it. On timeout it records `presend_timeout:<label>` so a stalled phase is
3404
+ // attributable, then degrades to the fallback so the worker proceeds to
3405
+ // claim. Foreground keeps the un-capped path (thunk invoked immediately), so
3406
+ // its behaviour is unchanged. A rejected step (e.g. enrichMessage has no
3407
+ // .catch) resolves to the fallback instead of rejecting the whole batch.
3408
+ const presendCap = (label, thunk, fallback, ms) => {
3402
3409
  if (!isBackgroundWorker)
3403
- return p;
3410
+ return thunk();
3404
3411
  return new Promise((resolve) => {
3405
- const timer = setTimeout(() => resolve(fallback), ms);
3406
- p.then((v) => {
3412
+ const timer = setTimeout(() => {
3413
+ workerStep(`presend_timeout:${label}`);
3414
+ resolve(fallback);
3415
+ }, ms);
3416
+ // Defer invocation one microtask so every sibling cap arms its timer
3417
+ // before any thunk's synchronous prefix runs.
3418
+ void Promise.resolve()
3419
+ .then(thunk)
3420
+ .then((v) => {
3407
3421
  clearTimeout(timer);
3408
3422
  resolve(v);
3409
3423
  }, () => {
@@ -3421,13 +3435,13 @@ export function createProductionAgentHandler(options) {
3421
3435
  source: "default",
3422
3436
  };
3423
3437
  const [systemPrompt, screenBlock, urlBlock, selectionBlock, filesContext, loopSettings, enrichedMessage,] = await Promise.all([
3424
- presendCap(systemPromptPromise, "", 13000),
3425
- presendCap(screenContextPromise, "", 9000),
3426
- presendCap(urlContextPromise, "", 9000),
3427
- presendCap(selectionContextPromise, "", 9000),
3428
- presendCap(filesContextPromise, "", 12000),
3429
- presendCap(loopSettingsPromise, fallbackLoopSettings, 9000),
3430
- presendCap(enrichedMessagePromise, requestMessage, 9000),
3438
+ presendCap("systemPrompt", systemPromptThunk, "", 13000),
3439
+ presendCap("screen", screenContextThunk, "", 9000),
3440
+ presendCap("url", urlContextThunk, "", 9000),
3441
+ presendCap("selection", selectionContextThunk, "", 9000),
3442
+ presendCap("files", filesContextThunk, "", 12000),
3443
+ presendCap("loopSettings", loopSettingsThunk, fallbackLoopSettings, 9000),
3444
+ presendCap("enrichedMessage", enrichedMessageThunk, requestMessage, 9000),
3431
3445
  ]);
3432
3446
  setupMark("ctxAll");
3433
3447
  // DIAGNOSTIC-ONLY: all parallel context gathering (system prompt, screen,
@@ -3909,6 +3923,13 @@ export function createProductionAgentHandler(options) {
3909
3923
  // DIAGNOSTIC-ONLY: last stage before startRun fires. A worker that reaches
3910
3924
  // prestart but never workerStarted is hanging inside startRun itself.
3911
3925
  workerStep("prestart");
3926
+ // DIAGNOSTIC-ONLY: peak-ish RSS (MB) + assembled system-prompt size (KB) at
3927
+ // prestart. The analytics bg worker dies right after model_done; if the
3928
+ // FOREGROUND (identical build, writes land) is already near the ~1024MB
3929
+ // Netlify function limit, an OOM kill in the heavier worker explains the
3930
+ // freeze. Both numbers ride along in the existing setup-timings detail.
3931
+ setupMarks.rssMB = Math.round(process.memoryUsage().rss / 1048576);
3932
+ setupMarks.promptKB = Math.round((systemPrompt?.length ?? 0) / 1024);
3912
3933
  const setupDetail = Object.entries(setupMarks)
3913
3934
  .map(([k, v]) => `${k}=${v}`)
3914
3935
  .join(" ") + ` total=${Date.now() - setupT0}`;