@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 +1 -1
- package/corpus/core/CHANGELOG.md +17 -0
- package/corpus/core/package.json +1 -1
- package/corpus/core/src/agent/production-agent.ts +18 -0
- package/corpus/core/src/db/ddl-guard.ts +190 -0
- package/corpus/core/src/secrets/storage.ts +36 -2
- package/corpus/core/src/settings/store.ts +40 -6
- package/dist/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +18 -0
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/collab/routes.d.ts +1 -1
- package/dist/db/ddl-guard.d.ts +88 -0
- package/dist/db/ddl-guard.d.ts.map +1 -0
- package/dist/db/ddl-guard.js +180 -0
- package/dist/db/ddl-guard.js.map +1 -0
- package/dist/progress/routes.d.ts +1 -1
- package/dist/resources/handlers.d.ts +1 -1
- package/dist/secrets/storage.d.ts.map +1 -1
- package/dist/secrets/storage.js +26 -2
- package/dist/secrets/storage.js.map +1 -1
- package/dist/settings/store.d.ts.map +1 -1
- package/dist/settings/store.js +32 -6
- package/dist/settings/store.js.map +1 -1
- package/package.json +1 -1
package/corpus/README.md
CHANGED
package/corpus/core/CHANGELOG.md
CHANGED
|
@@ -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
|
package/corpus/core/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agent-native/core",
|
|
3
|
-
"version": "0.77.
|
|
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
|
|
42
|
+
const createSql = isPostgres()
|
|
38
43
|
? APP_SECRETS_CREATE_SQL.replace(/\bINTEGER\b/g, "BIGINT")
|
|
39
44
|
: APP_SECRETS_CREATE_SQL;
|
|
40
|
-
|
|
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
|
-
|
|
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
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
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":"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;AAa3B,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,CAomDhB;AAED,OAAO,EACL,qBAAqB,EACrB,0BAA0B,EAC1B,MAAM,EACN,QAAQ,EACR,cAAc,GACf,CAAC"}
|
|
@@ -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
|