@signetai/core 0.185.4 → 0.185.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +262 -7
- package/dist/migrations/117-retire-summary-worker.d.ts +11 -0
- package/dist/migrations/117-retire-summary-worker.d.ts.map +1 -0
- package/dist/migrations/118-queue-pressure-indices.d.ts +11 -0
- package/dist/migrations/118-queue-pressure-indices.d.ts.map +1 -0
- package/dist/migrations/index.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -11272,6 +11272,245 @@ function up116(db) {
|
|
|
11272
11272
|
`);
|
|
11273
11273
|
}
|
|
11274
11274
|
|
|
11275
|
+
// src/migrations/117-retire-summary-worker.ts
|
|
11276
|
+
import { createHash } from "node:crypto";
|
|
11277
|
+
function hasTable4(db, table) {
|
|
11278
|
+
return db.prepare("SELECT 1 AS present FROM sqlite_master WHERE type = 'table' AND name = ?").get(table) != null;
|
|
11279
|
+
}
|
|
11280
|
+
function addColumnIfMissing25(db, table, column, definition) {
|
|
11281
|
+
const columns = db.prepare(`PRAGMA table_info(${table})`).all();
|
|
11282
|
+
if (columns.some((row) => row.name === column))
|
|
11283
|
+
return;
|
|
11284
|
+
db.exec(`ALTER TABLE ${table} ADD COLUMN ${column} ${definition}`);
|
|
11285
|
+
}
|
|
11286
|
+
function tableColumns(db, table) {
|
|
11287
|
+
const rows = db.prepare(`PRAGMA table_info(${table})`).all();
|
|
11288
|
+
return new Set(rows.map((row) => typeof row.name === "string" ? row.name : ""));
|
|
11289
|
+
}
|
|
11290
|
+
function hashTranscript(content) {
|
|
11291
|
+
return createHash("sha256").update(content, "utf8").digest("hex");
|
|
11292
|
+
}
|
|
11293
|
+
function backfillTranscriptHashes(db) {
|
|
11294
|
+
const columns = tableColumns(db, "session_transcripts");
|
|
11295
|
+
if (!columns.has("content_hash") || !columns.has("content"))
|
|
11296
|
+
return;
|
|
11297
|
+
const rows = db.prepare("SELECT session_key, agent_id, content FROM session_transcripts WHERE content_hash IS NULL").all();
|
|
11298
|
+
const update = db.prepare("UPDATE session_transcripts SET content_hash = ? WHERE agent_id = ? AND session_key = ? AND content_hash IS NULL");
|
|
11299
|
+
for (const row of rows) {
|
|
11300
|
+
if (typeof row.content !== "string" || typeof row.session_key !== "string")
|
|
11301
|
+
continue;
|
|
11302
|
+
update.run(hashTranscript(row.content), typeof row.agent_id === "string" ? row.agent_id : "default", row.session_key);
|
|
11303
|
+
}
|
|
11304
|
+
}
|
|
11305
|
+
var COMPLETION_BOUNDARY_REASONS = new Set(["session_closed", "session_clear", "stale_session", "ttl_expired"]);
|
|
11306
|
+
function summaryJobTimestamp(job) {
|
|
11307
|
+
return job.completed_at ?? job.ended_at ?? job.captured_at ?? job.created_at ?? new Date(0).toISOString();
|
|
11308
|
+
}
|
|
11309
|
+
function laterTimestamp(current, candidate) {
|
|
11310
|
+
if (current === null)
|
|
11311
|
+
return candidate;
|
|
11312
|
+
if (candidate === null)
|
|
11313
|
+
return current;
|
|
11314
|
+
const currentMillis = Date.parse(current);
|
|
11315
|
+
const candidateMillis = Date.parse(candidate);
|
|
11316
|
+
if (Number.isFinite(currentMillis) && Number.isFinite(candidateMillis)) {
|
|
11317
|
+
return candidateMillis > currentMillis ? candidate : current;
|
|
11318
|
+
}
|
|
11319
|
+
return candidate > current ? candidate : current;
|
|
11320
|
+
}
|
|
11321
|
+
function isCompletionBoundary(job, columns) {
|
|
11322
|
+
return columns.has("trigger") && job.trigger === "session_end" || columns.has("boundary_reason") && COMPLETION_BOUNDARY_REASONS.has(job.boundary_reason ?? "");
|
|
11323
|
+
}
|
|
11324
|
+
function mergeTranscriptContent(current, next) {
|
|
11325
|
+
if (current.length === 0)
|
|
11326
|
+
return next;
|
|
11327
|
+
if (next.length === 0 || current === next || current.includes(next))
|
|
11328
|
+
return current;
|
|
11329
|
+
if (next.includes(current))
|
|
11330
|
+
return next;
|
|
11331
|
+
return `${current}
|
|
11332
|
+
${next}`;
|
|
11333
|
+
}
|
|
11334
|
+
function backfillTranscriptsFromSummaryJobs(db) {
|
|
11335
|
+
if (!hasTable4(db, "summary_jobs"))
|
|
11336
|
+
return;
|
|
11337
|
+
const summaryColumns = tableColumns(db, "summary_jobs");
|
|
11338
|
+
if (!summaryColumns.has("transcript"))
|
|
11339
|
+
return;
|
|
11340
|
+
const select = (name) => summaryColumns.has(name) ? `"${name}" AS "${name}"` : `NULL AS "${name}"`;
|
|
11341
|
+
const jobs = db.prepare(`SELECT ${[
|
|
11342
|
+
"id",
|
|
11343
|
+
"session_key",
|
|
11344
|
+
"transcript",
|
|
11345
|
+
"harness",
|
|
11346
|
+
"project",
|
|
11347
|
+
"agent_id",
|
|
11348
|
+
"trigger",
|
|
11349
|
+
"boundary_reason",
|
|
11350
|
+
"captured_at",
|
|
11351
|
+
"ended_at",
|
|
11352
|
+
"completed_at",
|
|
11353
|
+
"created_at"
|
|
11354
|
+
].map(select).join(", ")} FROM summary_jobs`).all();
|
|
11355
|
+
const candidates = new Map;
|
|
11356
|
+
for (const job of jobs) {
|
|
11357
|
+
if (typeof job.transcript !== "string" || job.transcript.trim().length === 0)
|
|
11358
|
+
continue;
|
|
11359
|
+
const agentId = typeof job.agent_id === "string" && job.agent_id.length > 0 ? job.agent_id : "default";
|
|
11360
|
+
const sessionKey = typeof job.session_key === "string" && job.session_key.trim().length > 0 ? job.session_key : `legacy-summary-job:${job.id ?? hashTranscript(`${summaryJobTimestamp(job)}\x00${job.transcript}`)}`;
|
|
11361
|
+
const key = `${agentId}\x00${sessionKey}`;
|
|
11362
|
+
const current = candidates.get(key);
|
|
11363
|
+
const timestamp = summaryJobTimestamp(job);
|
|
11364
|
+
const boundary = isCompletionBoundary(job, summaryColumns);
|
|
11365
|
+
const createdAt = job.captured_at ?? job.created_at ?? job.ended_at ?? timestamp;
|
|
11366
|
+
if (!current) {
|
|
11367
|
+
candidates.set(key, {
|
|
11368
|
+
sessionKey,
|
|
11369
|
+
job: { ...job, agent_id: agentId },
|
|
11370
|
+
content: job.transcript,
|
|
11371
|
+
createdAt,
|
|
11372
|
+
completedAt: boundary ? timestamp : null
|
|
11373
|
+
});
|
|
11374
|
+
continue;
|
|
11375
|
+
}
|
|
11376
|
+
const currentTimestamp = summaryJobTimestamp(current.job);
|
|
11377
|
+
const preferred = timestamp > currentTimestamp || timestamp === currentTimestamp && job.transcript.length > current.content.length ? { ...job, agent_id: agentId } : current.job;
|
|
11378
|
+
candidates.set(key, {
|
|
11379
|
+
sessionKey,
|
|
11380
|
+
job: preferred,
|
|
11381
|
+
content: mergeTranscriptContent(current.content, job.transcript),
|
|
11382
|
+
createdAt: current.createdAt < createdAt ? current.createdAt : createdAt,
|
|
11383
|
+
completedAt: laterTimestamp(current.completedAt, boundary ? timestamp : null)
|
|
11384
|
+
});
|
|
11385
|
+
}
|
|
11386
|
+
const transcriptColumns = tableColumns(db, "session_transcripts");
|
|
11387
|
+
const hasUpdated = transcriptColumns.has("updated_at");
|
|
11388
|
+
const hasCompleted = transcriptColumns.has("completed_at");
|
|
11389
|
+
const hasHash = transcriptColumns.has("content_hash");
|
|
11390
|
+
const insertColumns = ["session_key", "content", "harness", "project", "agent_id", "created_at"];
|
|
11391
|
+
if (hasUpdated)
|
|
11392
|
+
insertColumns.push("updated_at");
|
|
11393
|
+
if (hasCompleted)
|
|
11394
|
+
insertColumns.push("completed_at");
|
|
11395
|
+
if (hasHash)
|
|
11396
|
+
insertColumns.push("content_hash");
|
|
11397
|
+
const insert = db.prepare(`INSERT OR IGNORE INTO session_transcripts (${insertColumns.join(", ")}) VALUES (${insertColumns.map(() => "?").join(", ")})`);
|
|
11398
|
+
const existing = db.prepare("SELECT content, completed_at FROM session_transcripts WHERE agent_id = ? AND session_key = ?");
|
|
11399
|
+
for (const candidate of candidates.values()) {
|
|
11400
|
+
const job = candidate.job;
|
|
11401
|
+
const agentId = job.agent_id ?? "default";
|
|
11402
|
+
const existingRow = existing.get(agentId, candidate.sessionKey);
|
|
11403
|
+
if (existingRow != null) {
|
|
11404
|
+
const previousContent = typeof existingRow.content === "string" ? existingRow.content : "";
|
|
11405
|
+
const mergedContent = mergeTranscriptContent(previousContent, candidate.content);
|
|
11406
|
+
const completedAt = typeof existingRow.completed_at === "string" && existingRow.completed_at.length > 0 ? existingRow.completed_at : candidate.completedAt;
|
|
11407
|
+
const assignments = ["content = ?"];
|
|
11408
|
+
const values2 = [mergedContent];
|
|
11409
|
+
if (hasUpdated && mergedContent !== previousContent) {
|
|
11410
|
+
assignments.push("updated_at = ?");
|
|
11411
|
+
values2.push(candidate.createdAt);
|
|
11412
|
+
}
|
|
11413
|
+
if (hasCompleted && completedAt && !existingRow.completed_at) {
|
|
11414
|
+
assignments.push("completed_at = ?");
|
|
11415
|
+
values2.push(completedAt);
|
|
11416
|
+
}
|
|
11417
|
+
if (hasHash) {
|
|
11418
|
+
assignments.push("content_hash = ?");
|
|
11419
|
+
values2.push(hashTranscript(mergedContent));
|
|
11420
|
+
}
|
|
11421
|
+
values2.push(agentId, candidate.sessionKey);
|
|
11422
|
+
db.prepare(`UPDATE session_transcripts SET ${assignments.join(", ")} WHERE agent_id = ? AND session_key = ?`).run(...values2);
|
|
11423
|
+
continue;
|
|
11424
|
+
}
|
|
11425
|
+
const values = [
|
|
11426
|
+
candidate.sessionKey,
|
|
11427
|
+
candidate.content,
|
|
11428
|
+
job.harness ?? null,
|
|
11429
|
+
job.project ?? null,
|
|
11430
|
+
agentId,
|
|
11431
|
+
candidate.createdAt
|
|
11432
|
+
];
|
|
11433
|
+
if (hasUpdated)
|
|
11434
|
+
values.push(candidate.createdAt);
|
|
11435
|
+
if (hasCompleted)
|
|
11436
|
+
values.push(candidate.completedAt);
|
|
11437
|
+
if (hasHash)
|
|
11438
|
+
values.push(hashTranscript(candidate.content));
|
|
11439
|
+
insert.run(...values);
|
|
11440
|
+
}
|
|
11441
|
+
}
|
|
11442
|
+
function up117(db) {
|
|
11443
|
+
if (!hasTable4(db, "session_transcripts"))
|
|
11444
|
+
return;
|
|
11445
|
+
addColumnIfMissing25(db, "session_transcripts", "completed_at", "TEXT");
|
|
11446
|
+
addColumnIfMissing25(db, "session_transcripts", "content_hash", "TEXT");
|
|
11447
|
+
backfillTranscriptHashes(db);
|
|
11448
|
+
if (hasTable4(db, "transcript_capture_jobs")) {
|
|
11449
|
+
const captureColumns = db.prepare("PRAGMA table_info(transcript_capture_jobs)").all();
|
|
11450
|
+
if (captureColumns.some((row) => row.name === "summary_status")) {
|
|
11451
|
+
db.exec("UPDATE transcript_capture_jobs SET summary_status = 'not_requested' WHERE summary_status IN ('pending', 'failed', 'skipped')");
|
|
11452
|
+
}
|
|
11453
|
+
}
|
|
11454
|
+
if (hasTable4(db, "summary_jobs")) {
|
|
11455
|
+
backfillTranscriptsFromSummaryJobs(db);
|
|
11456
|
+
backfillTranscriptHashes(db);
|
|
11457
|
+
const summaryColumns = tableColumns(db, "summary_jobs");
|
|
11458
|
+
const timestampParts = ["completed_at", "ended_at", "captured_at", "created_at"].filter((column) => summaryColumns.has(column)).map((column) => `sj.${column}`);
|
|
11459
|
+
const timestampValue = timestampParts.length === 1 ? timestampParts[0] : `COALESCE(${timestampParts.join(", ")})`;
|
|
11460
|
+
const completionTimestamp = timestampValue ? `MAX(${timestampValue})` : "NULL";
|
|
11461
|
+
const boundaryParts = [
|
|
11462
|
+
summaryColumns.has("trigger") ? "sj.trigger = 'session_end'" : null,
|
|
11463
|
+
summaryColumns.has("boundary_reason") ? "sj.boundary_reason IN ('session_closed', 'session_clear', 'stale_session', 'ttl_expired')" : null
|
|
11464
|
+
].filter((part) => part !== null);
|
|
11465
|
+
const boundaryPredicate = boundaryParts.length > 0 ? `(${boundaryParts.join(" OR ")})` : "1=1";
|
|
11466
|
+
const agentPredicate = summaryColumns.has("agent_id") ? "sj.agent_id = session_transcripts.agent_id" : "session_transcripts.agent_id = 'default'";
|
|
11467
|
+
if (completionTimestamp !== "NULL") {
|
|
11468
|
+
db.exec(`
|
|
11469
|
+
UPDATE session_transcripts
|
|
11470
|
+
SET completed_at = COALESCE(
|
|
11471
|
+
completed_at,
|
|
11472
|
+
(
|
|
11473
|
+
SELECT ${completionTimestamp}
|
|
11474
|
+
FROM summary_jobs AS sj
|
|
11475
|
+
WHERE ${agentPredicate}
|
|
11476
|
+
AND sj.session_key = session_transcripts.session_key
|
|
11477
|
+
AND ${boundaryPredicate}
|
|
11478
|
+
)
|
|
11479
|
+
)
|
|
11480
|
+
WHERE completed_at IS NULL;
|
|
11481
|
+
`);
|
|
11482
|
+
}
|
|
11483
|
+
db.exec("DELETE FROM summary_jobs");
|
|
11484
|
+
}
|
|
11485
|
+
const completionIndexColumns = ["agent_id", "completed_at"];
|
|
11486
|
+
if (tableColumns(db, "session_transcripts").has("updated_at"))
|
|
11487
|
+
completionIndexColumns.push("updated_at");
|
|
11488
|
+
db.exec(`
|
|
11489
|
+
CREATE INDEX IF NOT EXISTS idx_st_agent_completed
|
|
11490
|
+
ON session_transcripts(${completionIndexColumns.join(", ")});
|
|
11491
|
+
CREATE INDEX IF NOT EXISTS idx_st_agent_hash
|
|
11492
|
+
ON session_transcripts(agent_id, content_hash);
|
|
11493
|
+
`);
|
|
11494
|
+
}
|
|
11495
|
+
|
|
11496
|
+
// src/migrations/118-queue-pressure-indices.ts
|
|
11497
|
+
function up118(db) {
|
|
11498
|
+
db.exec(`
|
|
11499
|
+
CREATE INDEX IF NOT EXISTS idx_memory_jobs_pressure_status
|
|
11500
|
+
ON memory_jobs(status)
|
|
11501
|
+
WHERE status IN ('pending', 'leased') AND job_type <> 'extract';
|
|
11502
|
+
CREATE INDEX IF NOT EXISTS idx_memory_jobs_pressure_created_at
|
|
11503
|
+
ON memory_jobs(created_at)
|
|
11504
|
+
WHERE status IN ('pending', 'leased') AND job_type <> 'extract';
|
|
11505
|
+
CREATE INDEX IF NOT EXISTS idx_summary_jobs_pressure_status
|
|
11506
|
+
ON summary_jobs(status)
|
|
11507
|
+
WHERE status IN ('pending', 'leased');
|
|
11508
|
+
CREATE INDEX IF NOT EXISTS idx_summary_jobs_pressure_created_at
|
|
11509
|
+
ON summary_jobs(created_at)
|
|
11510
|
+
WHERE status IN ('pending', 'leased');
|
|
11511
|
+
`);
|
|
11512
|
+
}
|
|
11513
|
+
|
|
11275
11514
|
// src/migrations/index.ts
|
|
11276
11515
|
var MIGRATIONS = [
|
|
11277
11516
|
{
|
|
@@ -12212,6 +12451,22 @@ var MIGRATIONS = [
|
|
|
12212
12451
|
{ table: "cross_agent_messages", column: "acp_target_agent_name" }
|
|
12213
12452
|
]
|
|
12214
12453
|
}
|
|
12454
|
+
},
|
|
12455
|
+
{
|
|
12456
|
+
version: 117,
|
|
12457
|
+
name: "retire-summary-worker",
|
|
12458
|
+
up: up117,
|
|
12459
|
+
artifacts: {
|
|
12460
|
+
columns: [
|
|
12461
|
+
{ table: "session_transcripts", column: "completed_at" },
|
|
12462
|
+
{ table: "session_transcripts", column: "content_hash" }
|
|
12463
|
+
]
|
|
12464
|
+
}
|
|
12465
|
+
},
|
|
12466
|
+
{
|
|
12467
|
+
version: 118,
|
|
12468
|
+
name: "queue-pressure-indices",
|
|
12469
|
+
up: up118
|
|
12215
12470
|
}
|
|
12216
12471
|
];
|
|
12217
12472
|
function checksum(m) {
|
|
@@ -12267,7 +12522,7 @@ function existingTables(db) {
|
|
|
12267
12522
|
const rows = db.prepare("SELECT name FROM sqlite_master WHERE type='table'").all();
|
|
12268
12523
|
return new Set(rows.filter(hasStringName).map((r) => r.name));
|
|
12269
12524
|
}
|
|
12270
|
-
function
|
|
12525
|
+
function tableColumns2(db, table, cache) {
|
|
12271
12526
|
let cols = cache.get(table);
|
|
12272
12527
|
if (cols)
|
|
12273
12528
|
return cols;
|
|
@@ -12305,7 +12560,7 @@ function findPhantomVersions(db, precomputedApplied) {
|
|
|
12305
12560
|
missing = true;
|
|
12306
12561
|
break;
|
|
12307
12562
|
}
|
|
12308
|
-
const cols =
|
|
12563
|
+
const cols = tableColumns2(db, col.table, colCache);
|
|
12309
12564
|
if (!cols.has(col.column)) {
|
|
12310
12565
|
if (col.optional)
|
|
12311
12566
|
continue;
|
|
@@ -12355,7 +12610,7 @@ function verifyArtifacts(db, migration) {
|
|
|
12355
12610
|
continue;
|
|
12356
12611
|
throw new Error(`Post-DDL verification failed: migration ${migration.version} (${migration.name}) ` + `declares column "${col.table}.${col.column}" but table does not exist`);
|
|
12357
12612
|
}
|
|
12358
|
-
const colNames =
|
|
12613
|
+
const colNames = tableColumns2(db, col.table, colCache);
|
|
12359
12614
|
if (!colNames.has(col.column)) {
|
|
12360
12615
|
throw new Error(`Post-DDL verification failed: migration ${migration.version} (${migration.name}) ` + `declares column "${col.table}.${col.column}" but it was not created`);
|
|
12361
12616
|
}
|
|
@@ -15069,7 +15324,7 @@ function escapeRegExp(value) {
|
|
|
15069
15324
|
return value.replace(/[|\\{}()[\]^$+?.]/g, "\\$&");
|
|
15070
15325
|
}
|
|
15071
15326
|
// src/sources-config.ts
|
|
15072
|
-
import { createHash, randomUUID } from "node:crypto";
|
|
15327
|
+
import { createHash as createHash2, randomUUID } from "node:crypto";
|
|
15073
15328
|
import { existsSync as existsSync7, mkdirSync as mkdirSync5, readFileSync as readFileSync5, renameSync as renameSync2, rmSync as rmSync4, statSync as statSync3, writeFileSync as writeFileSync5 } from "node:fs";
|
|
15074
15329
|
import { homedir as homedir5, platform as platform2 } from "node:os";
|
|
15075
15330
|
import { basename, dirname as dirname4, resolve as resolve4 } from "node:path";
|
|
@@ -15166,7 +15421,7 @@ function addDiscordSourceChecked(input, agentsDir = getAgentsDir()) {
|
|
|
15166
15421
|
const now = input.now ?? new Date().toISOString();
|
|
15167
15422
|
const cfg = loadSourcesConfigForWrite(agentsDir);
|
|
15168
15423
|
const root = settings.syncMode === "desktop-cache" ? settings.desktopCachePath ?? DEFAULT_DISCORD_DESKTOP_CACHE_PATH : `discord://guilds/${settings.guildIds.slice().sort().join(",")}`;
|
|
15169
|
-
const sourceId = settings.syncMode === "desktop-cache" ? `discord-cache:${
|
|
15424
|
+
const sourceId = settings.syncMode === "desktop-cache" ? `discord-cache:${createHash2("sha256").update(root).digest("hex").slice(0, 16)}` : `discord:${createHash2("sha256").update(settings.guildIds.slice().sort().join(",")).digest("hex").slice(0, 16)}`;
|
|
15170
15425
|
const existing = cfg.sources.find((source2) => source2.id === sourceId);
|
|
15171
15426
|
if (existing) {
|
|
15172
15427
|
const updated = {
|
|
@@ -15212,7 +15467,7 @@ function addGitHubSourceChecked(input, agentsDir = getAgentsDir()) {
|
|
|
15212
15467
|
const now = input.now ?? new Date().toISOString();
|
|
15213
15468
|
const cfg = loadSourcesConfigForWrite(agentsDir);
|
|
15214
15469
|
const settingsKey = settings.repos.slice().sort().join(",");
|
|
15215
|
-
const sourceId = `github:${
|
|
15470
|
+
const sourceId = `github:${createHash2("sha256").update(settingsKey).digest("hex").slice(0, 16)}`;
|
|
15216
15471
|
const root = `github://repos/${settings.repos.slice().sort().join(",")}`;
|
|
15217
15472
|
const existing = cfg.sources.find((source2) => source2.id === sourceId);
|
|
15218
15473
|
if (existing) {
|
|
@@ -15487,7 +15742,7 @@ function addObsidianSourceChecked(input, agentsDir = getAgentsDir()) {
|
|
|
15487
15742
|
return { ok: true, source: updated, created: false };
|
|
15488
15743
|
}
|
|
15489
15744
|
const source = {
|
|
15490
|
-
id: `obsidian:${
|
|
15745
|
+
id: `obsidian:${createHash2("sha256").update(root).digest("hex").slice(0, 16)}`,
|
|
15491
15746
|
kind: "obsidian",
|
|
15492
15747
|
name: cleanName(input.name) ?? "Obsidian Vault",
|
|
15493
15748
|
root,
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { MigrationDb } from "./index";
|
|
2
|
+
/**
|
|
3
|
+
* Migration 117: retire the summary-worker delivery boundary (#1271).
|
|
4
|
+
*
|
|
5
|
+
* Session transcripts now carry their own completion marker and content hash.
|
|
6
|
+
* Existing session-end summary jobs backfill the completion marker and any
|
|
7
|
+
* missing canonical transcript row before the obsolete queue is drained. The
|
|
8
|
+
* historical table remains for migration compatibility.
|
|
9
|
+
*/
|
|
10
|
+
export declare function up(db: MigrationDb): void;
|
|
11
|
+
//# sourceMappingURL=117-retire-summary-worker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"117-retire-summary-worker.d.ts","sourceRoot":"","sources":["../../src/migrations/117-retire-summary-worker.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAmO3C;;;;;;;GAOG;AACH,wBAAgB,EAAE,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI,CAgExC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { MigrationDb } from "./index";
|
|
2
|
+
/**
|
|
3
|
+
* Migration 118: bounded queue-pressure observation
|
|
4
|
+
*
|
|
5
|
+
* Heartbeat pressure telemetry only needs active queue depth buckets and the
|
|
6
|
+
* oldest active job age. These partial indexes let that path probe a bounded
|
|
7
|
+
* number of live rows without scanning terminal jobs or retired extraction
|
|
8
|
+
* jobs.
|
|
9
|
+
*/
|
|
10
|
+
export declare function up(db: MigrationDb): void;
|
|
11
|
+
//# sourceMappingURL=118-queue-pressure-indices.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"118-queue-pressure-indices.d.ts","sourceRoot":"","sources":["../../src/migrations/118-queue-pressure-indices.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C;;;;;;;GAOG;AACH,wBAAgB,EAAE,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI,CAexC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/migrations/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/migrations/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA2HH,MAAM,WAAW,WAAW;IAC3B,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG;QACrB,GAAG,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;QAC9B,GAAG,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;QAC7D,GAAG,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;KACnD,CAAC;CACF;AAED,MAAM,WAAW,kBAAkB;IAClC,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS;QAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QACxB,6FAA6F;QAC7F,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;KAC5B,EAAE,CAAC;CACJ;AAED,MAAM,WAAW,SAAS;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,WAAW,KAAK,IAAI,CAAC;IACvC,QAAQ,CAAC,SAAS,CAAC,EAAE,kBAAkB,CAAC;CACxC;AAED,oEAAoE;AACpE,eAAO,MAAM,UAAU,EAAE,SAAS,SAAS,EA+7B1C,CAAC;AAqOF;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,WAAW,GAAG,OAAO,CAiB7D;AAED,6CAA6C;AAC7C,eAAO,MAAM,qBAAqB,QAAkD,CAAC;AAsBrF;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI,CAiDnD"}
|