@agent-native/core 0.77.7 → 0.77.8

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/corpus/README.md CHANGED
@@ -27,5 +27,5 @@ rg -n "defineAction|useActionQuery" node_modules/@agent-native/core/corpus
27
27
 
28
28
  ## Generated Counts
29
29
 
30
- - core files: 1932
30
+ - core files: 1933
31
31
  - template files: 4289
@@ -1,5 +1,22 @@
1
1
  # @agent-native/core
2
2
 
3
+ ## 0.77.8
4
+
5
+ ### Patch Changes
6
+
7
+ - 7dc2828: Guard on-demand `ensureTable()` schema-init so the already-migrated path takes no
8
+ `ACCESS EXCLUSIVE` lock on Postgres. The app-secrets (`app_secrets`) and `settings`
9
+ stores now probe `information_schema`/`pg_indexes` first (plain reads, no lock) and
10
+ issue `CREATE`/`ALTER`/`CREATE INDEX` only when something is actually missing; any
11
+ DDL that must run is wrapped in a transaction-scoped `SET LOCAL lock_timeout` so a
12
+ contended lock fails fast instead of hanging (and never leaks onto the pooled
13
+ connection). This fixes background-function workers hanging indefinitely on
14
+ first-touch schema DDL behind a concurrent connection on shared Neon — observed as
15
+ durable agent-chat workers stalling right after auth and never claiming the run.
16
+ SQLite (local dev) behavior is unchanged. Adds a shared `db/ddl-guard.ts` helper
17
+ (`pgTableExists`/`pgColumnExists`/`pgIndexExists`/`runGuardedDdl`). Also adds
18
+ diagnostic-only worker setup sub-stage breadcrumbs to localize such stalls.
19
+
3
20
  ## 0.77.7
4
21
 
5
22
  ### Patch Changes
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-native/core",
3
- "version": "0.77.7",
3
+ "version": "0.77.8",
4
4
  "description": "Framework for agent-native application development — where AI agents and UI share SQL state, actions, and context",
5
5
  "homepage": "https://github.com/BuilderIO/agent-native#readme",
6
6
  "bugs": {
@@ -4023,6 +4023,8 @@ export function createProductionAgentHandler(
4023
4023
  // owner/request-context awaits.
4024
4024
  workerStep("db_request_ctx");
4025
4025
 
4026
+ // DIAGNOSTIC-ONLY: bracket attachment upload + text-attachment persistence.
4027
+ workerStep("attach_start");
4026
4028
  // Pre-upload chat attachments (images AND files/PDFs) through the framework
4027
4029
  // file-upload provider (Builder.io by default). The model still sees the
4028
4030
  // base64 multimodal content for the current turn; each uploaded attachment
@@ -4085,9 +4087,13 @@ export function createProductionAgentHandler(
4085
4087
  );
4086
4088
  }
4087
4089
  }
4090
+ // DIAGNOSTIC-ONLY: attachment upload + persistence finished.
4091
+ workerStep("attach_done");
4088
4092
 
4089
4093
  // When a per-request engine override is specified, resolve the API key
4090
4094
  // for that provider instead of the global active engine's provider.
4095
+ // DIAGNOSTIC-ONLY: bracket per-owner API-key resolution (settings/app_secrets reads).
4096
+ workerStep("apikey_start");
4091
4097
  let userApiKey: string | undefined;
4092
4098
  if (requestEngine) {
4093
4099
  const provider = engineToProvider(requestEngine);
@@ -4103,6 +4109,8 @@ export function createProductionAgentHandler(
4103
4109
  } else {
4104
4110
  userApiKey = await getOwnerActiveApiKey(ownerEmail);
4105
4111
  }
4112
+ // DIAGNOSTIC-ONLY: API-key resolution finished.
4113
+ workerStep("apikey_done");
4106
4114
 
4107
4115
  // `options.apiKey` is the value the template constructed the plugin with
4108
4116
  // (e.g. wired from a deployment env var). On a shared hosted deploy this
@@ -4117,6 +4125,9 @@ export function createProductionAgentHandler(
4117
4125
  readDeployCredentialEnv("ANTHROPIC_API_KEY"));
4118
4126
 
4119
4127
  // Resolve engine — per-request engine override takes priority
4128
+ // DIAGNOSTIC-ONLY: bracket engine resolution (Builder credential / app-default
4129
+ // settings reads inside resolveEngine).
4130
+ workerStep("engine_start");
4120
4131
  let engine: AgentEngine;
4121
4132
  try {
4122
4133
  engine = await resolveEngine({
@@ -4131,17 +4142,24 @@ export function createProductionAgentHandler(
4131
4142
  appId: options.appId,
4132
4143
  });
4133
4144
  }
4145
+ // DIAGNOSTIC-ONLY: engine resolution finished.
4146
+ workerStep("engine_done");
4134
4147
 
4135
4148
  // Honor the model the user picked in the settings UI (written via
4136
4149
  // `manage-agent-engine` action="set"), but only when the caller hasn't overridden it for
4137
4150
  // this request or at plugin construction time. Read per-request so a
4138
4151
  // dropdown change in the UI takes effect without a server restart. Skip
4139
4152
  // the DB read entirely when a higher-precedence value is set.
4153
+ // DIAGNOSTIC-ONLY: bracket stored-model resolution (getStoredModelForEngine
4154
+ // settings read).
4155
+ workerStep("model_start");
4140
4156
  const modelCandidate =
4141
4157
  requestModel ??
4142
4158
  configuredModel ??
4143
4159
  (await getStoredModelForEngine(engine, { appId: options.appId })) ??
4144
4160
  engine.defaultModel;
4161
+ // DIAGNOSTIC-ONLY: stored-model resolution finished.
4162
+ workerStep("model_done");
4145
4163
  const model = normalizeModelForEngine(engine, modelCandidate);
4146
4164
  const reasoningEffort = normalizeReasoningEffortForModel(
4147
4165
  model,
@@ -0,0 +1,190 @@
1
+ /**
2
+ * Guards for on-demand `ensureTable()` DDL so the common already-migrated path
3
+ * takes NO `ACCESS EXCLUSIVE` lock on Postgres.
4
+ *
5
+ * Lives in its own module (like `./widen-columns.js`) so stores can import it
6
+ * without every `vi.mock("../db/client.js")` test needing to stub it: the
7
+ * helpers resolve `isPostgres()` / `getDbExec()` through `client.js`, so a test
8
+ * that mocks the client to SQLite (`isPostgres: () => false`) makes the
9
+ * Postgres-only existence checks no-ops automatically.
10
+ *
11
+ * ## Why
12
+ *
13
+ * `ensureTable()` runs once per process on first DB touch. In a long-lived Node
14
+ * server the cost is paid once and is invisible. In a Netlify `-background`
15
+ * function the process is fresh, so this is the FIRST touch — and the
16
+ * `CREATE TABLE`/`ALTER TABLE ... ADD COLUMN` DDL it issues takes an
17
+ * `ACCESS EXCLUSIVE` lock on the shared Neon Postgres database. Behind a
18
+ * concurrent connection that already holds a conflicting lock, that DDL can
19
+ * block ~indefinitely (observed >16s hangs in the bg worker vs ~1s inline).
20
+ *
21
+ * The tables/columns are essentially always already present in production, so
22
+ * the DDL is redundant in the hot path. These helpers let a store cheaply check
23
+ * `information_schema` first and only issue DDL when something is actually
24
+ * missing — and when DDL must run, wrap it in a short `lock_timeout` so a
25
+ * contended lock fails fast instead of hanging.
26
+ *
27
+ * All of this is Postgres-only behaviour gated on `isPostgres()`. On SQLite
28
+ * (local dev) there is no such lock problem, so callers keep their existing
29
+ * behaviour there.
30
+ */
31
+
32
+ import { isPostgres, getDbExec, type DbExec } from "./client.js";
33
+
34
+ const PLAIN_IDENTIFIER = /^[A-Za-z_][A-Za-z0-9_]*$/;
35
+
36
+ /**
37
+ * True when running against Postgres AND the given table already exists in the
38
+ * `public` schema. Returns `false` on SQLite (callers gate their own behaviour
39
+ * there), for invalid identifiers, or when `information_schema` is unreadable —
40
+ * the conservative answer "not known to exist" makes the caller fall through to
41
+ * its idempotent `CREATE TABLE IF NOT EXISTS`, preserving today's behaviour.
42
+ *
43
+ * This is a plain read (no lock), so it never blocks on an `ACCESS EXCLUSIVE`
44
+ * lock the way `CREATE`/`ALTER` would.
45
+ */
46
+ export async function pgTableExists(
47
+ table: string,
48
+ injectedClient?: DbExec,
49
+ ): Promise<boolean> {
50
+ if (!isPostgres() || !PLAIN_IDENTIFIER.test(table)) return false;
51
+ const client = injectedClient ?? getDbExec();
52
+ try {
53
+ const { rows } = await client.execute({
54
+ sql: `SELECT 1 FROM information_schema.tables
55
+ WHERE table_schema = 'public' AND table_name = ? LIMIT 1`,
56
+ args: [table],
57
+ });
58
+ return rows.length > 0;
59
+ } catch {
60
+ // information_schema unreadable (permissions / non-standard backend) —
61
+ // report "unknown" so the caller falls back to IF NOT EXISTS.
62
+ return false;
63
+ }
64
+ }
65
+
66
+ /**
67
+ * True when running against Postgres AND the given column already exists on the
68
+ * given table in the `public` schema. Returns `false` on SQLite, for invalid
69
+ * identifiers, or when `information_schema` is unreadable.
70
+ *
71
+ * Plain read — no lock taken.
72
+ */
73
+ export async function pgColumnExists(
74
+ table: string,
75
+ column: string,
76
+ injectedClient?: DbExec,
77
+ ): Promise<boolean> {
78
+ if (!isPostgres()) return false;
79
+ if (!PLAIN_IDENTIFIER.test(table) || !PLAIN_IDENTIFIER.test(column)) {
80
+ return false;
81
+ }
82
+ const client = injectedClient ?? getDbExec();
83
+ try {
84
+ const { rows } = await client.execute({
85
+ sql: `SELECT 1 FROM information_schema.columns
86
+ WHERE table_schema = 'public' AND table_name = ? AND column_name = ?
87
+ LIMIT 1`,
88
+ args: [table, column],
89
+ });
90
+ return rows.length > 0;
91
+ } catch {
92
+ return false;
93
+ }
94
+ }
95
+
96
+ /**
97
+ * True when running against Postgres AND an index with the given name already
98
+ * exists in the `public` schema. Returns `false` on SQLite, for invalid
99
+ * identifiers, or when `pg_indexes` is unreadable.
100
+ *
101
+ * `CREATE INDEX` (without CONCURRENTLY) takes a `SHARE` lock that blocks
102
+ * writes, so on a fresh background-worker process behind a concurrent
103
+ * connection this can hang just like a `CREATE`/`ALTER` would; checking first
104
+ * skips the lock on the already-migrated hot path.
105
+ */
106
+ export async function pgIndexExists(
107
+ indexName: string,
108
+ injectedClient?: DbExec,
109
+ ): Promise<boolean> {
110
+ if (!isPostgres() || !PLAIN_IDENTIFIER.test(indexName)) return false;
111
+ const client = injectedClient ?? getDbExec();
112
+ try {
113
+ const { rows } = await client.execute({
114
+ sql: `SELECT 1 FROM pg_indexes
115
+ WHERE schemaname = 'public' AND indexname = ? LIMIT 1`,
116
+ args: [indexName],
117
+ });
118
+ return rows.length > 0;
119
+ } catch {
120
+ return false;
121
+ }
122
+ }
123
+
124
+ /** True when an error looks like a Postgres `lock_timeout` (SQLSTATE 55P03). */
125
+ export function isLockTimeoutError(err: unknown): boolean {
126
+ const anyErr = err as { code?: unknown; message?: unknown } | null;
127
+ if (anyErr?.code === "55P03") return true;
128
+ const msg = String(anyErr?.message ?? anyErr ?? "");
129
+ return /lock[_ ]?timeout|canceling statement due to lock timeout/i.test(msg);
130
+ }
131
+
132
+ /**
133
+ * Run a DDL statement that MUST execute (the schema is actually missing), with
134
+ * a short `lock_timeout` so a contended `ACCESS EXCLUSIVE` lock fails fast
135
+ * instead of hanging the whole process.
136
+ *
137
+ * Postgres path: wrap the DDL in an explicit transaction and set
138
+ * `SET LOCAL lock_timeout` so the timeout is scoped to THIS transaction only
139
+ * and reset automatically on COMMIT/ROLLBACK — it never leaks onto the pooled
140
+ * (session-reused) connection the way a bare `SET lock_timeout` would. If the
141
+ * DbExec has no `transaction` (shouldn't happen for Postgres, but defensively),
142
+ * fall back to a session `SET` + `RESET` in a finally. A lock-timeout error is
143
+ * swallowed: the table/column is virtually always already correct by the time a
144
+ * contended boot retries, and the caller's memoization should still resolve so
145
+ * the path isn't retried in a tight loop. Any non-lock-timeout error rethrows.
146
+ *
147
+ * SQLite path: no lock problem — just run the DDL directly.
148
+ *
149
+ * @returns `true` if the DDL ran to completion, `false` if it was skipped due to
150
+ * a lock-timeout (so the caller can decide whether to log).
151
+ */
152
+ export async function runGuardedDdl(
153
+ ddl: string,
154
+ options: { lockTimeout?: string; injectedClient?: DbExec } = {},
155
+ ): Promise<boolean> {
156
+ const client = options.injectedClient ?? getDbExec();
157
+ if (!isPostgres()) {
158
+ await client.execute(ddl);
159
+ return true;
160
+ }
161
+
162
+ const lockTimeout = options.lockTimeout ?? "3s";
163
+ try {
164
+ if (typeof client.transaction === "function") {
165
+ await client.transaction(async (tx) => {
166
+ // SET LOCAL is transaction-scoped: it reverts on COMMIT/ROLLBACK and
167
+ // never persists on the pooled connection.
168
+ await tx.execute(`SET LOCAL lock_timeout = '${lockTimeout}'`);
169
+ await tx.execute(ddl);
170
+ });
171
+ } else {
172
+ // Defensive fallback: no transaction support. Use a session SET and
173
+ // guarantee a RESET so the timeout never leaks onto a reused connection.
174
+ try {
175
+ await client.execute(`SET lock_timeout = '${lockTimeout}'`);
176
+ await client.execute(ddl);
177
+ } finally {
178
+ await client.execute(`RESET lock_timeout`).catch(() => {});
179
+ }
180
+ }
181
+ return true;
182
+ } catch (err) {
183
+ if (isLockTimeoutError(err)) {
184
+ // Contended lock — the schema is virtually always already correct by now.
185
+ // Proceed; the caller's memoization still resolves so we don't loop.
186
+ return false;
187
+ }
188
+ throw err;
189
+ }
190
+ }
@@ -15,6 +15,11 @@
15
15
  import { randomUUID } from "node:crypto";
16
16
 
17
17
  import { getDbExec, isPostgres } from "../db/client.js";
18
+ import {
19
+ pgColumnExists,
20
+ pgTableExists,
21
+ runGuardedDdl,
22
+ } from "../db/ddl-guard.js";
18
23
  import {
19
24
  encryptSecretValue as encryptValue,
20
25
  decryptSecretValue as decryptValue,
@@ -34,10 +39,39 @@ async function ensureTable(): Promise<void> {
34
39
  const client = getDbExec();
35
40
  // Postgres version of the CREATE TABLE — the generic `INTEGER` maps to
36
41
  // BIGINT on Postgres, which we need for millisecond timestamps.
37
- const sql = isPostgres()
42
+ const createSql = isPostgres()
38
43
  ? APP_SECRETS_CREATE_SQL.replace(/\bINTEGER\b/g, "BIGINT")
39
44
  : APP_SECRETS_CREATE_SQL;
40
- await client.execute(sql);
45
+
46
+ if (isPostgres()) {
47
+ // Hot path: in production the table and both additive columns are
48
+ // virtually always already present. Issuing `CREATE`/`ALTER` would
49
+ // still take an ACCESS EXCLUSIVE lock — which, in a fresh background
50
+ // worker process behind a concurrent connection on the shared Neon DB,
51
+ // can block ~indefinitely. So check `information_schema` first (a plain
52
+ // read, no lock) and run DDL ONLY for what is actually missing. When
53
+ // DDL must run, `runGuardedDdl` wraps it in a transaction-scoped
54
+ // `lock_timeout` so a contended lock fails fast instead of hanging.
55
+ if (!(await pgTableExists("app_secrets"))) {
56
+ await runGuardedDdl(createSql);
57
+ }
58
+ if (!(await pgColumnExists("app_secrets", "description"))) {
59
+ await runGuardedDdl(
60
+ `ALTER TABLE app_secrets ADD COLUMN IF NOT EXISTS description TEXT`,
61
+ );
62
+ }
63
+ if (!(await pgColumnExists("app_secrets", "url_allowlist"))) {
64
+ await runGuardedDdl(
65
+ `ALTER TABLE app_secrets ADD COLUMN IF NOT EXISTS url_allowlist TEXT`,
66
+ );
67
+ }
68
+ return;
69
+ }
70
+
71
+ // SQLite (local dev): no ACCESS EXCLUSIVE lock problem, keep the original
72
+ // create-then-additive-alter behaviour. SQLite has no
73
+ // `ADD COLUMN IF NOT EXISTS`, so the ALTERs stay wrapped in try/catch.
74
+ await client.execute(createSql);
41
75
 
42
76
  // Additive migration: description column (for ad-hoc keys)
43
77
  try {
@@ -1,6 +1,11 @@
1
1
  import { EventEmitter } from "events";
2
2
 
3
3
  import { getDbExec, isPostgres, intType } from "../db/client.js";
4
+ import {
5
+ pgIndexExists,
6
+ pgTableExists,
7
+ runGuardedDdl,
8
+ } from "../db/ddl-guard.js";
4
9
  import { widenIntColumnsToBigInt } from "../db/widen-columns.js";
5
10
 
6
11
  let _initPromise: Promise<void> | undefined;
@@ -20,17 +25,46 @@ async function ensureTable(): Promise<void> {
20
25
  _initPromise = (async () => {
21
26
  const client = getDbExec();
22
27
  const table = settingsTable();
23
- await client.execute(`
28
+ const createSql = `
24
29
  CREATE TABLE IF NOT EXISTS ${table} (
25
30
  key TEXT PRIMARY KEY,
26
31
  value TEXT NOT NULL,
27
32
  updated_at ${intType()} NOT NULL
28
33
  )
29
- `);
30
- // Older deployments (pre BIGINT-compat) have a 32-bit `updated_at`; on
31
- // Postgres the `Date.now()` written on every setSetting overflows int4.
32
- // Widen in place (no-op once done / on fresh DBs). Pass the unqualified
33
- // name the helper scopes to the `public` schema.
34
+ `;
35
+
36
+ if (isPostgres()) {
37
+ // Hot path: the `settings` table and its poll index are virtually
38
+ // always already present in production. Issuing `CREATE TABLE`/
39
+ // `CREATE INDEX` still takes a lock that, in a fresh background-worker
40
+ // process behind a concurrent connection on the shared Neon DB, can
41
+ // block ~indefinitely (ACCESS EXCLUSIVE for CREATE TABLE; a write-
42
+ // blocking SHARE lock for CREATE INDEX). So check `information_schema`/
43
+ // `pg_indexes` first (plain reads, no lock) and run DDL ONLY for what
44
+ // is actually missing. `runGuardedDdl` bounds any DDL that must run
45
+ // with a transaction-scoped `lock_timeout` so a contended lock fails
46
+ // fast instead of hanging. `settingsTable()` is `public.settings` on
47
+ // Postgres; the existence checks use the unqualified table name.
48
+ if (!(await pgTableExists("settings"))) {
49
+ await runGuardedDdl(createSql);
50
+ }
51
+ // Older deployments (pre BIGINT-compat) have a 32-bit `updated_at`; on
52
+ // Postgres the `Date.now()` written on every setSetting overflows int4.
53
+ // widenIntColumnsToBigInt already probes information_schema and only
54
+ // ALTERs columns that are still int4 — a no-op on fresh/widened DBs.
55
+ await widenIntColumnsToBigInt("settings", ["updated_at"]);
56
+ // Index for the poll watermark query: `SELECT MAX(updated_at)`.
57
+ if (!(await pgIndexExists("settings_updated_at_idx"))) {
58
+ await runGuardedDdl(
59
+ `CREATE INDEX IF NOT EXISTS settings_updated_at_idx ON ${table} (updated_at)`,
60
+ );
61
+ }
62
+ return;
63
+ }
64
+
65
+ // SQLite (local dev): no lock problem — keep the original behaviour.
66
+ await client.execute(createSql);
67
+ // No-op on SQLite (INTEGER is already 64-bit).
34
68
  await widenIntColumnsToBigInt("settings", ["updated_at"]);
35
69
  // Index for the poll watermark query: `SELECT MAX(updated_at) FROM settings`.
36
70
  // MAX on an indexed column avoids a full-table scan on every poll cycle.
@@ -1 +1 @@
1
- {"version":3,"file":"production-agent.d.ts","sourceRoot":"","sources":["../../src/agent/production-agent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"production-agent.d.ts","sourceRoot":"","sources":["../../src/agent/production-agent.ts"],"names":[],"mappings":"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"}
@@ -3039,6 +3039,8 @@ export function createProductionAgentHandler(options) {
3039
3039
  // prepareRequest) finished. A worker stuck before this points at the
3040
3040
  // owner/request-context awaits.
3041
3041
  workerStep("db_request_ctx");
3042
+ // DIAGNOSTIC-ONLY: bracket attachment upload + text-attachment persistence.
3043
+ workerStep("attach_start");
3042
3044
  // Pre-upload chat attachments (images AND files/PDFs) through the framework
3043
3045
  // file-upload provider (Builder.io by default). The model still sees the
3044
3046
  // base64 multimodal content for the current turn; each uploaded attachment
@@ -3088,8 +3090,12 @@ export function createProductionAgentHandler(options) {
3088
3090
  console.warn("[agent-native] persistTextAttachmentsAsResources failed:", err instanceof Error ? err.message : String(err));
3089
3091
  }
3090
3092
  }
3093
+ // DIAGNOSTIC-ONLY: attachment upload + persistence finished.
3094
+ workerStep("attach_done");
3091
3095
  // When a per-request engine override is specified, resolve the API key
3092
3096
  // for that provider instead of the global active engine's provider.
3097
+ // DIAGNOSTIC-ONLY: bracket per-owner API-key resolution (settings/app_secrets reads).
3098
+ workerStep("apikey_start");
3093
3099
  let userApiKey;
3094
3100
  if (requestEngine) {
3095
3101
  const provider = engineToProvider(requestEngine);
@@ -3106,6 +3112,8 @@ export function createProductionAgentHandler(options) {
3106
3112
  else {
3107
3113
  userApiKey = await getOwnerActiveApiKey(ownerEmail);
3108
3114
  }
3115
+ // DIAGNOSTIC-ONLY: API-key resolution finished.
3116
+ workerStep("apikey_done");
3109
3117
  // `options.apiKey` is the value the template constructed the plugin with
3110
3118
  // (e.g. wired from a deployment env var). On a shared hosted deploy this
3111
3119
  // is the same cross-tenant hazard as any deploy-level provider key:
@@ -3118,6 +3126,9 @@ export function createProductionAgentHandler(options) {
3118
3126
  options.apiKey ??
3119
3127
  readDeployCredentialEnv("ANTHROPIC_API_KEY"));
3120
3128
  // Resolve engine — per-request engine override takes priority
3129
+ // DIAGNOSTIC-ONLY: bracket engine resolution (Builder credential / app-default
3130
+ // settings reads inside resolveEngine).
3131
+ workerStep("engine_start");
3121
3132
  let engine;
3122
3133
  try {
3123
3134
  engine = await resolveEngine({
@@ -3133,15 +3144,22 @@ export function createProductionAgentHandler(options) {
3133
3144
  appId: options.appId,
3134
3145
  });
3135
3146
  }
3147
+ // DIAGNOSTIC-ONLY: engine resolution finished.
3148
+ workerStep("engine_done");
3136
3149
  // Honor the model the user picked in the settings UI (written via
3137
3150
  // `manage-agent-engine` action="set"), but only when the caller hasn't overridden it for
3138
3151
  // this request or at plugin construction time. Read per-request so a
3139
3152
  // dropdown change in the UI takes effect without a server restart. Skip
3140
3153
  // the DB read entirely when a higher-precedence value is set.
3154
+ // DIAGNOSTIC-ONLY: bracket stored-model resolution (getStoredModelForEngine
3155
+ // settings read).
3156
+ workerStep("model_start");
3141
3157
  const modelCandidate = requestModel ??
3142
3158
  configuredModel ??
3143
3159
  (await getStoredModelForEngine(engine, { appId: options.appId })) ??
3144
3160
  engine.defaultModel;
3161
+ // DIAGNOSTIC-ONLY: stored-model resolution finished.
3162
+ workerStep("model_done");
3145
3163
  const model = normalizeModelForEngine(engine, modelCandidate);
3146
3164
  const reasoningEffort = normalizeReasoningEffortForModel(model, isReasoningEffort(requestEffort)
3147
3165
  ? requestEffort