@cortexkit/opencode-magic-context 0.38.1 → 0.39.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +37 -4
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/project-security.d.ts +11 -6
- package/dist/config/project-security.d.ts.map +1 -1
- package/dist/config/raw-loader.d.ts +42 -0
- package/dist/config/raw-loader.d.ts.map +1 -0
- package/dist/config/schema/magic-context.d.ts +585 -550
- package/dist/config/schema/magic-context.d.ts.map +1 -1
- package/dist/features/magic-context/dreamer/classify.d.ts +3 -2
- package/dist/features/magic-context/dreamer/classify.d.ts.map +1 -1
- package/dist/features/magic-context/dreamer/evaluate-smart-notes.d.ts +9 -2
- package/dist/features/magic-context/dreamer/evaluate-smart-notes.d.ts.map +1 -1
- package/dist/features/magic-context/dreamer/map-memories-prompt.d.ts +4 -2
- package/dist/features/magic-context/dreamer/map-memories-prompt.d.ts.map +1 -1
- package/dist/features/magic-context/dreamer/map-memories.d.ts +21 -5
- package/dist/features/magic-context/dreamer/map-memories.d.ts.map +1 -1
- package/dist/features/magic-context/dreamer/refresh-primers.d.ts +3 -2
- package/dist/features/magic-context/dreamer/refresh-primers.d.ts.map +1 -1
- package/dist/features/magic-context/dreamer/task-config.d.ts +2 -1
- package/dist/features/magic-context/dreamer/task-config.d.ts.map +1 -1
- package/dist/features/magic-context/dreamer/task-executor.d.ts +0 -1
- package/dist/features/magic-context/dreamer/task-executor.d.ts.map +1 -1
- package/dist/features/magic-context/dreamer/task-scheduler.d.ts +3 -2
- package/dist/features/magic-context/dreamer/task-scheduler.d.ts.map +1 -1
- package/dist/features/magic-context/dreamer/verify-prompt.d.ts +5 -2
- package/dist/features/magic-context/dreamer/verify-prompt.d.ts.map +1 -1
- package/dist/features/magic-context/dreamer/verify.d.ts +6 -3
- package/dist/features/magic-context/dreamer/verify.d.ts.map +1 -1
- package/dist/features/magic-context/migrations.d.ts.map +1 -1
- package/dist/features/magic-context/mural/compress-cues.d.ts +3 -2
- package/dist/features/magic-context/mural/compress-cues.d.ts.map +1 -1
- package/dist/features/magic-context/smart-notes/compiler.d.ts +3 -2
- package/dist/features/magic-context/smart-notes/compiler.d.ts.map +1 -1
- package/dist/features/magic-context/smart-notes/condition-compiler.d.ts +2 -0
- package/dist/features/magic-context/smart-notes/condition-compiler.d.ts.map +1 -1
- package/dist/features/magic-context/smart-notes/sandbox-runner.d.ts.map +1 -1
- package/dist/features/magic-context/storage-db.d.ts +1 -1
- package/dist/features/magic-context/storage-db.d.ts.map +1 -1
- package/dist/features/magic-context/storage-meta-persisted.d.ts +7 -2
- package/dist/features/magic-context/storage-meta-persisted.d.ts.map +1 -1
- package/dist/features/magic-context/storage-meta-shared.d.ts +1 -0
- package/dist/features/magic-context/storage-meta-shared.d.ts.map +1 -1
- package/dist/features/magic-context/storage-meta.d.ts +1 -1
- package/dist/features/magic-context/storage-meta.d.ts.map +1 -1
- package/dist/features/magic-context/storage-session-tables.d.ts.map +1 -1
- package/dist/features/magic-context/storage-tags.d.ts.map +1 -1
- package/dist/features/magic-context/storage.d.ts +1 -1
- package/dist/features/magic-context/storage.d.ts.map +1 -1
- package/dist/features/magic-context/tool-definition-tokens.d.ts +10 -0
- package/dist/features/magic-context/tool-definition-tokens.d.ts.map +1 -1
- package/dist/features/magic-context/transform-decision-log.d.ts +11 -0
- package/dist/features/magic-context/transform-decision-log.d.ts.map +1 -1
- package/dist/features/magic-context/user-memory/review-user-memories.d.ts +3 -2
- package/dist/features/magic-context/user-memory/review-user-memories.d.ts.map +1 -1
- package/dist/hooks/magic-context/channel2-delivery.d.ts +3 -1
- package/dist/hooks/magic-context/channel2-delivery.d.ts.map +1 -1
- package/dist/hooks/magic-context/command-handler.d.ts +4 -0
- package/dist/hooks/magic-context/command-handler.d.ts.map +1 -1
- package/dist/hooks/magic-context/compartment-runner-historian.d.ts +4 -1
- package/dist/hooks/magic-context/compartment-runner-historian.d.ts.map +1 -1
- package/dist/hooks/magic-context/compartment-runner-partial-recomp.d.ts.map +1 -1
- package/dist/hooks/magic-context/compartment-runner-recomp.d.ts.map +1 -1
- package/dist/hooks/magic-context/compartment-runner-types.d.ts +4 -1
- package/dist/hooks/magic-context/compartment-runner-types.d.ts.map +1 -1
- package/dist/hooks/magic-context/ctx-reduce-nudge.d.ts +14 -2
- package/dist/hooks/magic-context/ctx-reduce-nudge.d.ts.map +1 -1
- package/dist/hooks/magic-context/emergency-fail-closed.d.ts +7 -0
- package/dist/hooks/magic-context/emergency-fail-closed.d.ts.map +1 -1
- package/dist/hooks/magic-context/hook-handlers.d.ts.map +1 -1
- package/dist/hooks/magic-context/hook.d.ts.map +1 -1
- package/dist/hooks/magic-context/inject-compartments.d.ts +12 -1
- package/dist/hooks/magic-context/inject-compartments.d.ts.map +1 -1
- package/dist/hooks/magic-context/lkg-persist.d.ts +14 -0
- package/dist/hooks/magic-context/lkg-persist.d.ts.map +1 -0
- package/dist/hooks/magic-context/lkg-slot.d.ts +13 -0
- package/dist/hooks/magic-context/lkg-slot.d.ts.map +1 -1
- package/dist/hooks/magic-context/module-state-sync.d.ts +1 -0
- package/dist/hooks/magic-context/module-state-sync.d.ts.map +1 -1
- package/dist/hooks/magic-context/module-transport.d.ts +12 -0
- package/dist/hooks/magic-context/module-transport.d.ts.map +1 -1
- package/dist/hooks/magic-context/raw-fallback-context-limit.d.ts.map +1 -1
- package/dist/hooks/magic-context/recomp-orchestrator.d.ts +4 -1
- package/dist/hooks/magic-context/recomp-orchestrator.d.ts.map +1 -1
- package/dist/hooks/magic-context/rust-mode-transform.d.ts.map +1 -1
- package/dist/hooks/magic-context/tail-hygiene-walk.d.ts +12 -0
- package/dist/hooks/magic-context/tail-hygiene-walk.d.ts.map +1 -1
- package/dist/hooks/magic-context/transform-compartment-phase.d.ts +3 -1
- package/dist/hooks/magic-context/transform-compartment-phase.d.ts.map +1 -1
- package/dist/hooks/magic-context/transform-postprocess-phase.d.ts +4 -0
- package/dist/hooks/magic-context/transform-postprocess-phase.d.ts.map +1 -1
- package/dist/hooks/magic-context/transform.d.ts +9 -1
- package/dist/hooks/magic-context/transform.d.ts.map +1 -1
- package/dist/hooks/magic-context/wrapup-orchestrator.d.ts.map +1 -1
- package/dist/{index-2y0ybv5x.js → index-3dkzzh0t.js} +15 -17
- package/dist/index-ehpzdy0v.js +126 -0
- package/dist/{index-5znjkjws.js → index-k2ts0wk1.js} +486 -106
- package/dist/{index-22mw8km4.js → index-rw0qrkvq.js} +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +17186 -14853
- package/dist/model-resolution-r9jbcz86.js +15 -0
- package/dist/plugin/dream-timer.d.ts +3 -0
- package/dist/plugin/dream-timer.d.ts.map +1 -1
- package/dist/plugin/hooks/create-session-hooks.d.ts.map +1 -1
- package/dist/plugin/messages-transform.d.ts +14 -6
- package/dist/plugin/messages-transform.d.ts.map +1 -1
- package/dist/plugin/rpc-handlers.d.ts.map +1 -1
- package/dist/{recomp-orchestrator-p030kxtc.js → recomp-orchestrator-2pncxee7.js} +2 -3
- package/dist/shared/jsonc-edit.d.ts +6 -1
- package/dist/shared/jsonc-edit.d.ts.map +1 -1
- package/dist/shared/model-resolution.d.ts +53 -0
- package/dist/shared/model-resolution.d.ts.map +1 -0
- package/dist/shared/model-suggestion-retry.d.ts +4 -1
- package/dist/shared/model-suggestion-retry.d.ts.map +1 -1
- package/dist/shared/resolve-fallbacks.d.ts +5 -1
- package/dist/shared/resolve-fallbacks.d.ts.map +1 -1
- package/dist/shared/status-detail-text.d.ts +4 -0
- package/dist/shared/status-detail-text.d.ts.map +1 -0
- package/dist/shared/subagent-runner.d.ts +2 -1
- package/dist/shared/subagent-runner.d.ts.map +1 -1
- package/dist/{storage-meta-session-2306t3j7.js → storage-meta-session-yvtbaw7c.js} +1 -1
- package/dist/{task-config-at3adc59.js → task-config-a1qmj9bx.js} +2 -2
- package/package.json +4 -2
- package/src/config/index.test.ts +73 -17
- package/src/config/index.ts +38 -23
- package/src/config/project-security.hostile-matrix.test.ts +471 -0
- package/src/config/project-security.test.ts +26 -5
- package/src/config/project-security.ts +141 -22
- package/src/config/raw-loader.test.ts +424 -0
- package/src/config/raw-loader.ts +490 -0
- package/src/config/schema/magic-context.test.ts +144 -2
- package/src/config/schema/magic-context.ts +253 -49
- package/src/shared/jsonc-edit.ts +74 -1
- package/src/shared/model-resolution.test.ts +170 -0
- package/src/shared/model-resolution.ts +227 -0
- package/src/shared/model-suggestion-retry.test.ts +27 -0
- package/src/shared/model-suggestion-retry.ts +19 -10
- package/src/shared/resolve-fallbacks.test.ts +13 -1
- package/src/shared/resolve-fallbacks.ts +19 -4
- package/src/shared/status-detail-text.test.ts +80 -0
- package/src/shared/status-detail-text.ts +56 -0
- package/src/shared/subagent-runner.ts +3 -1
- package/dist/index-td9depx5.js +0 -46
- package/dist/resolve-fallbacks-qf0ekmz9.js +0 -11
|
@@ -3,9 +3,6 @@ import {
|
|
|
3
3
|
modelSupportsVision,
|
|
4
4
|
shouldEnforcePrivateStoragePermissions
|
|
5
5
|
} from "./index-mg1yx1ph.js";
|
|
6
|
-
import {
|
|
7
|
-
parseProviderModel
|
|
8
|
-
} from "./index-td9depx5.js";
|
|
9
6
|
import {
|
|
10
7
|
describeError,
|
|
11
8
|
getErrorMessage,
|
|
@@ -17,7 +14,7 @@ import {
|
|
|
17
14
|
ensureSessionMetaRow,
|
|
18
15
|
persistCachedM0,
|
|
19
16
|
updateSessionMeta
|
|
20
|
-
} from "./index-
|
|
17
|
+
} from "./index-rw0qrkvq.js";
|
|
21
18
|
import {
|
|
22
19
|
modelRefLookupOrder,
|
|
23
20
|
piModelRefToCanonical
|
|
@@ -5161,6 +5158,37 @@ var MIGRATIONS = [
|
|
|
5161
5158
|
ensureColumn(db, "transform_decisions", "m0_model_key_prev", "TEXT");
|
|
5162
5159
|
ensureColumn(db, "transform_decisions", "m0_model_key_new", "TEXT");
|
|
5163
5160
|
}
|
|
5161
|
+
},
|
|
5162
|
+
{
|
|
5163
|
+
version: 80,
|
|
5164
|
+
description: "record observed m[0] tool-set hash comparisons",
|
|
5165
|
+
up(db) {
|
|
5166
|
+
if (!tableExists2(db, "transform_decisions"))
|
|
5167
|
+
return;
|
|
5168
|
+
ensureColumn(db, "transform_decisions", "m0_tool_set_hash_prev", "TEXT");
|
|
5169
|
+
ensureColumn(db, "transform_decisions", "m0_tool_set_hash_new", "TEXT");
|
|
5170
|
+
}
|
|
5171
|
+
},
|
|
5172
|
+
{
|
|
5173
|
+
version: 81,
|
|
5174
|
+
description: "persist last-known-good transform snapshots across restarts",
|
|
5175
|
+
up(db) {
|
|
5176
|
+
db.exec(`
|
|
5177
|
+
CREATE TABLE IF NOT EXISTS lkg_slots (
|
|
5178
|
+
session_id TEXT PRIMARY KEY,
|
|
5179
|
+
json_prefix TEXT NOT NULL,
|
|
5180
|
+
input_id_seq TEXT NOT NULL,
|
|
5181
|
+
input_content_digests TEXT NOT NULL,
|
|
5182
|
+
input_content_signatures TEXT,
|
|
5183
|
+
last_input_message_id TEXT NOT NULL,
|
|
5184
|
+
model_key TEXT,
|
|
5185
|
+
provider_key TEXT,
|
|
5186
|
+
captured_at INTEGER NOT NULL,
|
|
5187
|
+
row_version INTEGER,
|
|
5188
|
+
capture_sequence INTEGER
|
|
5189
|
+
);
|
|
5190
|
+
`);
|
|
5191
|
+
}
|
|
5164
5192
|
}
|
|
5165
5193
|
];
|
|
5166
5194
|
var LATEST_MIGRATION_VERSION = MIGRATIONS.reduce((max, m) => Math.max(max, m.version), 0);
|
|
@@ -5616,6 +5644,14 @@ function keyFor(providerID, modelID, agentName) {
|
|
|
5616
5644
|
function fingerprintFor(description, parameters) {
|
|
5617
5645
|
return createHash5("sha256").update(description).update("\x00").update(stableStringify(parameters)).digest("hex");
|
|
5618
5646
|
}
|
|
5647
|
+
function getCurrentToolSetHash(providerID, modelID, agentName) {
|
|
5648
|
+
if (!providerID || !modelID)
|
|
5649
|
+
return "";
|
|
5650
|
+
const toolIds = measurements.get(keyFor(providerID, modelID, agentName));
|
|
5651
|
+
if (!toolIds || toolIds.size === 0)
|
|
5652
|
+
return "";
|
|
5653
|
+
return createHash5("sha256").update(Array.from(toolIds.keys()).sort().join("\x00")).digest("hex");
|
|
5654
|
+
}
|
|
5619
5655
|
function setDatabase(db) {
|
|
5620
5656
|
persistenceDb = db;
|
|
5621
5657
|
cachedInsertStmt = null;
|
|
@@ -5957,7 +5993,7 @@ function getSchemaFenceRejection() {
|
|
|
5957
5993
|
function getMigrationOnOpenRefusal() {
|
|
5958
5994
|
return lastMigrationOnOpenRefusal;
|
|
5959
5995
|
}
|
|
5960
|
-
var LATEST_SUPPORTED_VERSION =
|
|
5996
|
+
var LATEST_SUPPORTED_VERSION = 81;
|
|
5961
5997
|
var PERMISSIONS_ENFORCEABLE = process.platform !== "win32";
|
|
5962
5998
|
var defaultStoragePermissionFs = { chmodSync, mkdirSync };
|
|
5963
5999
|
var storagePermissionFs = defaultStoragePermissionFs;
|
|
@@ -7109,10 +7145,12 @@ CREATE INDEX IF NOT EXISTS idx_dream_queue_pending ON dream_queue(started_at, en
|
|
|
7109
7145
|
decision TEXT NOT NULL,
|
|
7110
7146
|
materialized INTEGER NOT NULL DEFAULT 0,
|
|
7111
7147
|
materialize_reason TEXT,
|
|
7112
|
-
system_hash_prev
|
|
7113
|
-
system_hash_new
|
|
7114
|
-
|
|
7115
|
-
|
|
7148
|
+
system_hash_prev TEXT,
|
|
7149
|
+
system_hash_new TEXT,
|
|
7150
|
+
m0_tool_set_hash_prev TEXT,
|
|
7151
|
+
m0_tool_set_hash_new TEXT,
|
|
7152
|
+
m0_model_key_prev TEXT,
|
|
7153
|
+
m0_model_key_new TEXT,
|
|
7116
7154
|
emergency INTEGER NOT NULL DEFAULT 0,
|
|
7117
7155
|
dropped_tokens INTEGER NOT NULL DEFAULT 0,
|
|
7118
7156
|
dropped_count INTEGER NOT NULL DEFAULT 0,
|
|
@@ -7450,10 +7488,12 @@ CREATE INDEX IF NOT EXISTS idx_dream_queue_pending ON dream_queue(started_at, en
|
|
|
7450
7488
|
decision TEXT NOT NULL,
|
|
7451
7489
|
materialized INTEGER NOT NULL DEFAULT 0,
|
|
7452
7490
|
materialize_reason TEXT,
|
|
7453
|
-
|
|
7454
|
-
|
|
7455
|
-
|
|
7456
|
-
|
|
7491
|
+
system_hash_prev TEXT,
|
|
7492
|
+
system_hash_new TEXT,
|
|
7493
|
+
m0_tool_set_hash_prev TEXT,
|
|
7494
|
+
m0_tool_set_hash_new TEXT,
|
|
7495
|
+
m0_model_key_prev TEXT,
|
|
7496
|
+
m0_model_key_new TEXT,
|
|
7457
7497
|
emergency INTEGER NOT NULL DEFAULT 0,
|
|
7458
7498
|
dropped_tokens INTEGER NOT NULL DEFAULT 0,
|
|
7459
7499
|
dropped_count INTEGER NOT NULL DEFAULT 0,
|
|
@@ -10680,6 +10720,7 @@ function clearEmergencyDropSample(db, sessionId) {
|
|
|
10680
10720
|
db.prepare("UPDATE session_meta SET last_emergency_input_sample = 0 WHERE session_id = ?").run(sessionId);
|
|
10681
10721
|
})();
|
|
10682
10722
|
}
|
|
10723
|
+
var EMPTY_CHANNEL1_NUDGE_STATE = { level: "", ordinal: 0 };
|
|
10683
10724
|
function isLastNudgeUndroppedRow(row) {
|
|
10684
10725
|
return typeof row === "object" && row !== null && typeof row.last_nudge_undropped === "number";
|
|
10685
10726
|
}
|
|
@@ -10689,6 +10730,24 @@ function isLastNudgeLevelRow(row) {
|
|
|
10689
10730
|
function normalizeLastNudgeLevel(value) {
|
|
10690
10731
|
return value === "gentle" || value === "firm" || value === "urgent" ? value : "";
|
|
10691
10732
|
}
|
|
10733
|
+
function parseChannel1NudgeState(raw) {
|
|
10734
|
+
try {
|
|
10735
|
+
const parsed = JSON.parse(raw);
|
|
10736
|
+
if (typeof parsed === "object" && parsed !== null && !Array.isArray(parsed)) {
|
|
10737
|
+
return {
|
|
10738
|
+
level: normalizeLastNudgeLevel(parsed.level),
|
|
10739
|
+
ordinal: typeof parsed.ordinal === "number" ? Math.max(0, Math.round(parsed.ordinal)) : 0
|
|
10740
|
+
};
|
|
10741
|
+
}
|
|
10742
|
+
} catch {}
|
|
10743
|
+
return { level: normalizeLastNudgeLevel(raw), ordinal: 0 };
|
|
10744
|
+
}
|
|
10745
|
+
function serializeChannel1NudgeState(value) {
|
|
10746
|
+
return JSON.stringify({
|
|
10747
|
+
level: normalizeLastNudgeLevel(value.level),
|
|
10748
|
+
ordinal: Math.max(0, Math.round(value.ordinal))
|
|
10749
|
+
});
|
|
10750
|
+
}
|
|
10692
10751
|
function getLastNudgeUndropped(db, sessionId) {
|
|
10693
10752
|
const result = db.prepare("SELECT last_nudge_undropped FROM session_meta WHERE session_id = ?").get(sessionId);
|
|
10694
10753
|
return isLastNudgeUndroppedRow(result) ? result.last_nudge_undropped : 0;
|
|
@@ -10699,27 +10758,27 @@ function setLastNudgeUndropped(db, sessionId, value) {
|
|
|
10699
10758
|
db.prepare("UPDATE session_meta SET last_nudge_undropped = ? WHERE session_id = ?").run(Math.max(0, Math.round(value)), sessionId);
|
|
10700
10759
|
})();
|
|
10701
10760
|
}
|
|
10702
|
-
function
|
|
10761
|
+
function getChannel1NudgeState(db, sessionId) {
|
|
10703
10762
|
const result = db.prepare("SELECT last_nudge_level FROM session_meta WHERE session_id = ?").get(sessionId);
|
|
10704
|
-
return isLastNudgeLevelRow(result) ?
|
|
10763
|
+
return isLastNudgeLevelRow(result) ? parseChannel1NudgeState(result.last_nudge_level) : EMPTY_CHANNEL1_NUDGE_STATE;
|
|
10705
10764
|
}
|
|
10706
|
-
function
|
|
10765
|
+
function setChannel1NudgeState(db, sessionId, value) {
|
|
10707
10766
|
db.transaction(() => {
|
|
10708
10767
|
ensureSessionMetaRow(db, sessionId);
|
|
10709
|
-
db.prepare("UPDATE session_meta SET last_nudge_level = ? WHERE session_id = ?").run(
|
|
10768
|
+
db.prepare("UPDATE session_meta SET last_nudge_level = ? WHERE session_id = ?").run(serializeChannel1NudgeState(value), sessionId);
|
|
10710
10769
|
})();
|
|
10711
10770
|
}
|
|
10712
10771
|
function resetLastNudgeCycle(db, sessionId) {
|
|
10713
10772
|
db.transaction(() => {
|
|
10714
10773
|
ensureSessionMetaRow(db, sessionId);
|
|
10715
|
-
db.prepare("UPDATE session_meta SET last_nudge_undropped = 0, last_nudge_level =
|
|
10774
|
+
db.prepare("UPDATE session_meta SET last_nudge_undropped = 0, last_nudge_level = ? WHERE session_id = ?").run(serializeChannel1NudgeState(EMPTY_CHANNEL1_NUDGE_STATE), sessionId);
|
|
10716
10775
|
})();
|
|
10717
10776
|
}
|
|
10718
10777
|
function resetLastNudgeCycleIfTailShrank(db, sessionId, measuredUndropped) {
|
|
10719
10778
|
let changed = false;
|
|
10720
10779
|
db.transaction(() => {
|
|
10721
10780
|
ensureSessionMetaRow(db, sessionId);
|
|
10722
|
-
const result = db.prepare("UPDATE session_meta SET last_nudge_undropped = 0, last_nudge_level =
|
|
10781
|
+
const result = db.prepare("UPDATE session_meta SET last_nudge_undropped = 0, last_nudge_level = ? WHERE session_id = ? AND last_nudge_undropped > ?").run(serializeChannel1NudgeState(EMPTY_CHANNEL1_NUDGE_STATE), sessionId, Math.max(0, Math.round(measuredUndropped)));
|
|
10723
10782
|
changed = (result.changes ?? 0) > 0;
|
|
10724
10783
|
})();
|
|
10725
10784
|
return changed;
|
|
@@ -12417,12 +12476,27 @@ function collectToolPartIdentities(messages) {
|
|
|
12417
12476
|
}
|
|
12418
12477
|
return identities;
|
|
12419
12478
|
}
|
|
12479
|
+
function isMachineGeneratedUserPart(part) {
|
|
12480
|
+
if (!isRecord(part))
|
|
12481
|
+
return false;
|
|
12482
|
+
const metadata = isRecord(part.metadata) ? part.metadata : null;
|
|
12483
|
+
const marker = metadata && isRecord(metadata.marker) ? metadata.marker : null;
|
|
12484
|
+
return part.synthetic === true || part.ignored === true || marker?.kind != null || isSyntheticTodoPart(part);
|
|
12485
|
+
}
|
|
12420
12486
|
function isSyntheticMessage(message) {
|
|
12421
|
-
const
|
|
12422
|
-
return
|
|
12487
|
+
const syntheticUserRow = message.info.role === "user" && message.parts.length > 0 && message.parts.every(isMachineGeneratedUserPart);
|
|
12488
|
+
return syntheticUserRow || message.info.summary === true || message.info.id === TODO_HEAD_ANCHOR_ID;
|
|
12489
|
+
}
|
|
12490
|
+
function countRealUserMessages(messages) {
|
|
12491
|
+
let count = 0;
|
|
12492
|
+
for (const message of messages) {
|
|
12493
|
+
if (message.info.role === "user" && !isSyntheticMessage(message))
|
|
12494
|
+
count += 1;
|
|
12495
|
+
}
|
|
12496
|
+
return count;
|
|
12423
12497
|
}
|
|
12424
12498
|
function isSyntheticPart(part) {
|
|
12425
|
-
return
|
|
12499
|
+
return isMachineGeneratedUserPart(part);
|
|
12426
12500
|
}
|
|
12427
12501
|
function stripChannel1ReminderSpans(output) {
|
|
12428
12502
|
let stripped = output;
|
|
@@ -12583,7 +12657,8 @@ function snapshot(args) {
|
|
|
12583
12657
|
const memo = memoizedContent(args.kind, args.content);
|
|
12584
12658
|
const tag = args.tag;
|
|
12585
12659
|
const isProtected = tag ? args.protectedNumbers.has(tag.tagNumber) : false;
|
|
12586
|
-
const
|
|
12660
|
+
const queuedForDrop = tag ? args.pendingDropTagNumbers.has(tag.tagNumber) : false;
|
|
12661
|
+
const uTokens = tag?.status === "active" && !isProtected && !queuedForDrop && args.kind !== "excluded" ? args.tokens : 0;
|
|
12587
12662
|
return {
|
|
12588
12663
|
key: args.key,
|
|
12589
12664
|
contentHash: memo.hash,
|
|
@@ -12592,7 +12667,8 @@ function snapshot(args) {
|
|
|
12592
12667
|
uTokens,
|
|
12593
12668
|
tagNumber: tag?.tagNumber ?? null,
|
|
12594
12669
|
tagStatus: tag?.status ?? null,
|
|
12595
|
-
protected: isProtected
|
|
12670
|
+
protected: isProtected,
|
|
12671
|
+
queuedForDrop
|
|
12596
12672
|
};
|
|
12597
12673
|
}
|
|
12598
12674
|
function excludedSnapshot(key, part) {
|
|
@@ -12603,7 +12679,8 @@ function excludedSnapshot(key, part) {
|
|
|
12603
12679
|
content,
|
|
12604
12680
|
tokens: 0,
|
|
12605
12681
|
tag: undefined,
|
|
12606
|
-
protectedNumbers: new Set
|
|
12682
|
+
protectedNumbers: new Set,
|
|
12683
|
+
pendingDropTagNumbers: new Set
|
|
12607
12684
|
});
|
|
12608
12685
|
}
|
|
12609
12686
|
function fileContentAndTokens(part) {
|
|
@@ -12639,6 +12716,7 @@ function sameTailHygieneStructuralSignature(expected, actual) {
|
|
|
12639
12716
|
return expected.partCounts.every((count, index) => count === actual.partCounts[index]);
|
|
12640
12717
|
}
|
|
12641
12718
|
function measureTailHygiene(input) {
|
|
12719
|
+
const pendingDropTagNumbers = input.pendingDropTagNumbers ?? new Set;
|
|
12642
12720
|
const toolIdentities = collectToolPartIdentities(input.messages);
|
|
12643
12721
|
const attribution = buildTagAttribution({
|
|
12644
12722
|
messages: input.messages,
|
|
@@ -12688,7 +12766,8 @@ function measureTailHygiene(input) {
|
|
|
12688
12766
|
content,
|
|
12689
12767
|
tokens: memo.tokens,
|
|
12690
12768
|
tag,
|
|
12691
|
-
protectedNumbers: attribution.protectedNumbers
|
|
12769
|
+
protectedNumbers: attribution.protectedNumbers,
|
|
12770
|
+
pendingDropTagNumbers
|
|
12692
12771
|
});
|
|
12693
12772
|
parts.push(measured);
|
|
12694
12773
|
t += measured.tokens;
|
|
@@ -12708,7 +12787,8 @@ function measureTailHygiene(input) {
|
|
|
12708
12787
|
content: file.content,
|
|
12709
12788
|
tokens: file.tokens,
|
|
12710
12789
|
tag,
|
|
12711
|
-
protectedNumbers: attribution.protectedNumbers
|
|
12790
|
+
protectedNumbers: attribution.protectedNumbers,
|
|
12791
|
+
pendingDropTagNumbers
|
|
12712
12792
|
});
|
|
12713
12793
|
parts.push(measured);
|
|
12714
12794
|
t += measured.tokens;
|
|
@@ -12732,7 +12812,8 @@ function measureTailHygiene(input) {
|
|
|
12732
12812
|
content: inputText,
|
|
12733
12813
|
tokens: memo.tokens,
|
|
12734
12814
|
tag,
|
|
12735
|
-
protectedNumbers: attribution.protectedNumbers
|
|
12815
|
+
protectedNumbers: attribution.protectedNumbers,
|
|
12816
|
+
pendingDropTagNumbers
|
|
12736
12817
|
});
|
|
12737
12818
|
parts.push(measured);
|
|
12738
12819
|
t += measured.tokens;
|
|
@@ -12751,7 +12832,8 @@ function measureTailHygiene(input) {
|
|
|
12751
12832
|
content: output,
|
|
12752
12833
|
tokens: memo.tokens,
|
|
12753
12834
|
tag,
|
|
12754
|
-
protectedNumbers: attribution.protectedNumbers
|
|
12835
|
+
protectedNumbers: attribution.protectedNumbers,
|
|
12836
|
+
pendingDropTagNumbers
|
|
12755
12837
|
});
|
|
12756
12838
|
parts.push(measured);
|
|
12757
12839
|
t += measured.tokens;
|
|
@@ -12774,26 +12856,35 @@ function measureTailHygiene(input) {
|
|
|
12774
12856
|
};
|
|
12775
12857
|
}
|
|
12776
12858
|
function sameMeasuredPrefix(baseline, current) {
|
|
12777
|
-
if (current.length < baseline.length)
|
|
12778
|
-
return { valid: false, boundaryAdvanceU: 0 };
|
|
12859
|
+
if (current.length < baseline.length) {
|
|
12860
|
+
return { valid: false, boundaryAdvanceU: 0, queuedDropDeltaU: 0 };
|
|
12861
|
+
}
|
|
12779
12862
|
let boundaryAdvanceU = 0;
|
|
12863
|
+
let queuedDropDeltaU = 0;
|
|
12780
12864
|
for (let index = 0;index < baseline.length; index += 1) {
|
|
12781
12865
|
const before = baseline[index];
|
|
12782
12866
|
const after = current[index];
|
|
12783
12867
|
if (before.key !== after.key || before.contentHash !== after.contentHash || before.kind !== after.kind || before.tokens !== after.tokens || before.tagNumber !== after.tagNumber || before.tagStatus !== after.tagStatus) {
|
|
12784
|
-
return { valid: false, boundaryAdvanceU: 0 };
|
|
12868
|
+
return { valid: false, boundaryAdvanceU: 0, queuedDropDeltaU: 0 };
|
|
12869
|
+
}
|
|
12870
|
+
if (!before.protected && after.protected) {
|
|
12871
|
+
return { valid: false, boundaryAdvanceU: 0, queuedDropDeltaU: 0 };
|
|
12785
12872
|
}
|
|
12786
|
-
if (!before.protected && after.protected)
|
|
12787
|
-
return { valid: false, boundaryAdvanceU: 0 };
|
|
12788
12873
|
if (before.protected && !after.protected) {
|
|
12789
|
-
if (after.tagStatus !== "active")
|
|
12790
|
-
return { valid: false, boundaryAdvanceU: 0 };
|
|
12791
|
-
|
|
12874
|
+
if (after.tagStatus !== "active") {
|
|
12875
|
+
return { valid: false, boundaryAdvanceU: 0, queuedDropDeltaU: 0 };
|
|
12876
|
+
}
|
|
12877
|
+
boundaryAdvanceU += after.uTokens;
|
|
12878
|
+
} else if (before.queuedForDrop !== after.queuedForDrop) {
|
|
12879
|
+
if (before.tagStatus !== "active" || after.tagStatus !== "active") {
|
|
12880
|
+
return { valid: false, boundaryAdvanceU: 0, queuedDropDeltaU: 0 };
|
|
12881
|
+
}
|
|
12882
|
+
queuedDropDeltaU += after.uTokens - before.uTokens;
|
|
12792
12883
|
} else if (before.uTokens !== after.uTokens) {
|
|
12793
|
-
return { valid: false, boundaryAdvanceU: 0 };
|
|
12884
|
+
return { valid: false, boundaryAdvanceU: 0, queuedDropDeltaU: 0 };
|
|
12794
12885
|
}
|
|
12795
12886
|
}
|
|
12796
|
-
return { valid: true, boundaryAdvanceU };
|
|
12887
|
+
return { valid: true, boundaryAdvanceU, queuedDropDeltaU };
|
|
12797
12888
|
}
|
|
12798
12889
|
function refreshTailHygieneBaseline(input) {
|
|
12799
12890
|
const measured = measureTailHygiene(input);
|
|
@@ -12825,7 +12916,7 @@ function refreshTailHygieneBaseline(input) {
|
|
|
12825
12916
|
};
|
|
12826
12917
|
}
|
|
12827
12918
|
let turnDeltaT = 0;
|
|
12828
|
-
let turnDeltaU = prefix.boundaryAdvanceU;
|
|
12919
|
+
let turnDeltaU = prefix.boundaryAdvanceU + prefix.queuedDropDeltaU;
|
|
12829
12920
|
for (let index = input.previous.baselineParts.length;index < measured.parts.length; index += 1) {
|
|
12830
12921
|
const part = measured.parts[index];
|
|
12831
12922
|
turnDeltaT += part.tokens;
|
|
@@ -12951,26 +13042,44 @@ function formatOldestReclaimableHint(hint) {
|
|
|
12951
13042
|
return rendered.length > 0 ? `
|
|
12952
13043
|
oldest reclaimable: ${rendered}.` : "";
|
|
12953
13044
|
}
|
|
12954
|
-
function buildChannel2Reminder(undroppedTokens, hint) {
|
|
13045
|
+
function buildChannel2Reminder(undroppedTokens, usableWindowTokens, hint) {
|
|
12955
13046
|
const amount = approxThousands(undroppedTokens);
|
|
13047
|
+
const usableWindow = approxThousands(usableWindowTokens);
|
|
12956
13048
|
const hintText = formatOldestReclaimableHint(hint);
|
|
12957
13049
|
return `<system-reminder>
|
|
12958
|
-
` + `Routine
|
|
13050
|
+
` + `Routine housekeeping: an older span of this session folds into compact history automatically — nothing is lost and nothing pauses. ` + `Drop spent tool outputs with ctx_reduce first so the archive keeps only what matters (~${amount} of ~${usableWindow} reclaimable).${hintText}
|
|
12959
13051
|
` + `</system-reminder>`;
|
|
12960
13052
|
}
|
|
12961
|
-
|
|
12962
|
-
|
|
13053
|
+
var CHANNEL1_STICKY_REAL_USER_TURN_GAP = 3;
|
|
13054
|
+
function shouldUseStickyChannel1Reminder(input) {
|
|
13055
|
+
if (input.lastLevel !== input.level)
|
|
13056
|
+
return false;
|
|
13057
|
+
if (input.lastOrdinal > input.currentRealUserTurnCount)
|
|
13058
|
+
return false;
|
|
13059
|
+
const gap = input.currentRealUserTurnCount - input.lastOrdinal;
|
|
13060
|
+
return gap >= 0 && gap < CHANNEL1_STICKY_REAL_USER_TURN_GAP;
|
|
13061
|
+
}
|
|
13062
|
+
function buildChannel1Reminder(level, undroppedTokens, usableWindowTokens, hint, sticky = false) {
|
|
12963
13063
|
const hintText = formatOldestReclaimableHint(hint);
|
|
13064
|
+
if (sticky) {
|
|
13065
|
+
return `
|
|
13066
|
+
|
|
13067
|
+
<system-reminder>
|
|
13068
|
+
Reminder: ctx_reduce housekeeping still pending —${hintText}
|
|
13069
|
+
</system-reminder>`;
|
|
13070
|
+
}
|
|
13071
|
+
const amount = approxThousands(undroppedTokens);
|
|
13072
|
+
const usableWindow = approxThousands(usableWindowTokens);
|
|
12964
13073
|
let body;
|
|
12965
13074
|
switch (level) {
|
|
12966
13075
|
case "gentle":
|
|
12967
|
-
body = `
|
|
13076
|
+
body = `Housekeeping: some earlier tool outputs are spent and can be dropped with ctx_reduce when you are done with them. ` + `Context is managed automatically — this is tidiness, never a reason to rush or narrow scope.`;
|
|
12968
13077
|
break;
|
|
12969
13078
|
case "firm":
|
|
12970
|
-
body =
|
|
13079
|
+
body = `Housekeeping: ~${amount} of this session's ~${usableWindow} window is spent tool output. ` + `Drop what you have already processed with ctx_reduce at a natural stopping point. ` + `Not a limit — nothing is lost either way.`;
|
|
12971
13080
|
break;
|
|
12972
13081
|
case "urgent":
|
|
12973
|
-
body =
|
|
13082
|
+
body = `Housekeeping backlog: ~${amount} of this session's ~${usableWindow} window is spent tool output — worth a ctx_reduce pass now. ` + `This is routine and lossless; it is never a reason to change scope.`;
|
|
12974
13083
|
break;
|
|
12975
13084
|
}
|
|
12976
13085
|
return `
|
|
@@ -13181,8 +13290,14 @@ function getOldestActiveUnprotectedToolTags(db, sessionId, protectedTags = 0, li
|
|
|
13181
13290
|
const params = protectedTags > 0 ? [sessionId, AGE_RECLAIM_MIN_TOKENS, sessionId, protectedTags - 1] : [sessionId, AGE_RECLAIM_MIN_TOKENS];
|
|
13182
13291
|
const rows = db.prepare(`SELECT tag_number, tool_name
|
|
13183
13292
|
FROM tags
|
|
13184
|
-
|
|
13185
|
-
|
|
13293
|
+
WHERE session_id = ? AND status = 'active' AND type = 'tool'
|
|
13294
|
+
AND NOT EXISTS (
|
|
13295
|
+
SELECT 1 FROM pending_ops
|
|
13296
|
+
WHERE pending_ops.session_id = tags.session_id
|
|
13297
|
+
AND pending_ops.tag_id = tags.tag_number
|
|
13298
|
+
AND pending_ops.operation = 'drop'
|
|
13299
|
+
)
|
|
13300
|
+
${valueFloor}
|
|
13186
13301
|
${whereProtected}
|
|
13187
13302
|
ORDER BY tag_number ASC, id ASC`).all(...params);
|
|
13188
13303
|
return rows.filter((row) => typeof row.tag_number === "number").map((row) => ({
|
|
@@ -13821,6 +13936,59 @@ function parseReportedLimit(message) {
|
|
|
13821
13936
|
return;
|
|
13822
13937
|
}
|
|
13823
13938
|
|
|
13939
|
+
// src/shared/resolve-fallbacks.ts
|
|
13940
|
+
function resolveFallbackChain(userFallbacks) {
|
|
13941
|
+
const userList = normalizeUserFallbacks(userFallbacks);
|
|
13942
|
+
return dedupe(userList.filter(isValidModelSpec));
|
|
13943
|
+
}
|
|
13944
|
+
function normalizeUserFallbacks(userFallbacks) {
|
|
13945
|
+
if (!userFallbacks)
|
|
13946
|
+
return [];
|
|
13947
|
+
if (typeof userFallbacks === "string") {
|
|
13948
|
+
const trimmed = userFallbacks.trim();
|
|
13949
|
+
return trimmed ? [trimmed] : [];
|
|
13950
|
+
}
|
|
13951
|
+
return userFallbacks.map((s) => s.trim()).filter((s) => s.length > 0);
|
|
13952
|
+
}
|
|
13953
|
+
function isValidModelSpec(spec) {
|
|
13954
|
+
const slash = spec.indexOf("/");
|
|
13955
|
+
return slash > 0 && slash < spec.length - 1;
|
|
13956
|
+
}
|
|
13957
|
+
function dedupe(list) {
|
|
13958
|
+
const seen = new Set;
|
|
13959
|
+
const out = [];
|
|
13960
|
+
for (const item of list) {
|
|
13961
|
+
if (seen.has(item))
|
|
13962
|
+
continue;
|
|
13963
|
+
seen.add(item);
|
|
13964
|
+
out.push(item);
|
|
13965
|
+
}
|
|
13966
|
+
return out;
|
|
13967
|
+
}
|
|
13968
|
+
function parseProviderModel(spec) {
|
|
13969
|
+
const slash = spec.indexOf("/");
|
|
13970
|
+
if (slash < 1 || slash >= spec.length - 1)
|
|
13971
|
+
return null;
|
|
13972
|
+
return {
|
|
13973
|
+
providerID: spec.slice(0, slash).trim(),
|
|
13974
|
+
modelID: spec.slice(slash + 1).trim()
|
|
13975
|
+
};
|
|
13976
|
+
}
|
|
13977
|
+
function modelBodyField(spec) {
|
|
13978
|
+
const entry = toModelEntry(spec);
|
|
13979
|
+
if (!entry)
|
|
13980
|
+
return {};
|
|
13981
|
+
const parsed = parseProviderModel(entry.model);
|
|
13982
|
+
return parsed ? { model: parsed, ...entry.qualifier ? { variant: entry.qualifier } : {} } : {};
|
|
13983
|
+
}
|
|
13984
|
+
function toModelEntry(spec) {
|
|
13985
|
+
if (typeof spec === "string") {
|
|
13986
|
+
const model = spec.trim();
|
|
13987
|
+
return model ? { model } : undefined;
|
|
13988
|
+
}
|
|
13989
|
+
return spec;
|
|
13990
|
+
}
|
|
13991
|
+
|
|
13824
13992
|
// src/shared/model-suggestion-retry.ts
|
|
13825
13993
|
var ABORT_CALL_TIMEOUT_MS = 3000;
|
|
13826
13994
|
function copyPromptArgs(args, body) {
|
|
@@ -13985,15 +14153,18 @@ async function promptSyncWithModelSuggestionRetry(client, args, options = {}) {
|
|
|
13985
14153
|
log(`[${callContext}] primary (${explicitPrimaryLabel}) failed: ${shortErr(error)}; trying ${fallbacks.length} fallback(s)`);
|
|
13986
14154
|
}
|
|
13987
14155
|
for (let i = 0;i < fallbacks.length; i += 1) {
|
|
13988
|
-
const
|
|
14156
|
+
const fallback = toModelEntry(fallbacks[i]);
|
|
14157
|
+
const parsed = fallback ? parseProviderModel(fallback.model) : null;
|
|
13989
14158
|
if (!parsed) {
|
|
13990
|
-
log(`[${callContext}] skipping invalid fallback spec: ${fallbacks[i]}`);
|
|
14159
|
+
log(`[${callContext}] skipping invalid fallback spec: ${String(fallbacks[i])}`);
|
|
13991
14160
|
continue;
|
|
13992
14161
|
}
|
|
13993
14162
|
const label = `${parsed.providerID}/${parsed.modelID}`;
|
|
14163
|
+
const { variant: _primaryVariant, ...bodyWithoutPrimaryVariant } = baseBody;
|
|
13994
14164
|
const attemptArgs = copyPromptArgs(baseArgs, {
|
|
13995
|
-
...
|
|
13996
|
-
model: parsed
|
|
14165
|
+
...bodyWithoutPrimaryVariant,
|
|
14166
|
+
model: parsed,
|
|
14167
|
+
...fallback?.qualifier ? { variant: fallback.qualifier } : {}
|
|
13997
14168
|
});
|
|
13998
14169
|
try {
|
|
13999
14170
|
await attemptOnce(client, attemptArgs, timeoutMs, options.signal, callContext, label);
|
|
@@ -14009,7 +14180,7 @@ async function promptSyncWithModelSuggestionRetry(client, args, options = {}) {
|
|
|
14009
14180
|
}
|
|
14010
14181
|
}
|
|
14011
14182
|
}
|
|
14012
|
-
log(`[${callContext}] all models exhausted; tried: ${[explicitPrimaryLabel, ...fallbacks].join(", ")}; last error: ${shortErr(lastError)}`);
|
|
14183
|
+
log(`[${callContext}] all models exhausted; tried: ${[explicitPrimaryLabel, ...fallbacks.map((fallback) => toModelEntry(fallback)?.model ?? String(fallback))].join(", ")}; last error: ${shortErr(lastError)}`);
|
|
14013
14184
|
throw lastError ?? new Error("All fallback models failed");
|
|
14014
14185
|
}
|
|
14015
14186
|
async function attemptAndValidate(client, args, timeoutMs, signal, callContext, attempt, options) {
|
|
@@ -14047,15 +14218,18 @@ async function promptSyncWithValidatedOutputRetry(client, args, options) {
|
|
|
14047
14218
|
log(`[${callContext}] primary (${explicitPrimaryLabel}) failed validation/prompt: ${shortErr(error)}; trying ${fallbacks.length} fallback(s)`);
|
|
14048
14219
|
}
|
|
14049
14220
|
for (let i = 0;i < fallbacks.length; i += 1) {
|
|
14050
|
-
const
|
|
14221
|
+
const fallback = toModelEntry(fallbacks[i]);
|
|
14222
|
+
const parsed = fallback ? parseProviderModel(fallback.model) : null;
|
|
14051
14223
|
if (!parsed) {
|
|
14052
|
-
log(`[${callContext}] skipping invalid fallback spec: ${fallbacks[i]}`);
|
|
14224
|
+
log(`[${callContext}] skipping invalid fallback spec: ${String(fallbacks[i])}`);
|
|
14053
14225
|
continue;
|
|
14054
14226
|
}
|
|
14055
14227
|
const label = `${parsed.providerID}/${parsed.modelID}`;
|
|
14228
|
+
const { variant: _primaryVariant, ...bodyWithoutPrimaryVariant } = baseBody;
|
|
14056
14229
|
const attemptArgs = copyPromptArgs(baseArgs, {
|
|
14057
|
-
...
|
|
14058
|
-
model: parsed
|
|
14230
|
+
...bodyWithoutPrimaryVariant,
|
|
14231
|
+
model: parsed,
|
|
14232
|
+
...fallback?.qualifier ? { variant: fallback.qualifier } : {}
|
|
14059
14233
|
});
|
|
14060
14234
|
const attempt = {
|
|
14061
14235
|
label,
|
|
@@ -14080,7 +14254,7 @@ async function promptSyncWithValidatedOutputRetry(client, args, options) {
|
|
|
14080
14254
|
}
|
|
14081
14255
|
}
|
|
14082
14256
|
}
|
|
14083
|
-
log(`[${callContext}] all models exhausted; tried: ${[explicitPrimaryLabel, ...fallbacks].join(", ")}; original error: ${shortErr(firstError)}; last error: ${shortErr(lastError)}`);
|
|
14257
|
+
log(`[${callContext}] all models exhausted; tried: ${[explicitPrimaryLabel, ...fallbacks.map((fallback) => toModelEntry(fallback)?.model ?? String(fallback))].join(", ")}; original error: ${shortErr(firstError)}; last error: ${shortErr(lastError)}`);
|
|
14084
14258
|
throw firstError ?? lastError ?? new Error("All fallback models failed validation");
|
|
14085
14259
|
}
|
|
14086
14260
|
// src/shared/normalize-sdk-response.ts
|
|
@@ -31227,16 +31401,103 @@ var PromptSurfaceConfigSchema = exports_external.object({
|
|
|
31227
31401
|
message: "tool description values must not be empty or whitespace-only"
|
|
31228
31402
|
})).optional().describe("USER-LEVEL ONLY top-level description overrides keyed by ctx_* tool ID; parameter schemas and descriptions are unchanged.")
|
|
31229
31403
|
}).describe("Prompt-surface preset routing. Project config may select default/models, while guidance_override_path and tool_descriptions are user-level only.");
|
|
31404
|
+
var PER_HARNESS_MIGRATION_INVENTORY = {
|
|
31405
|
+
historian: {
|
|
31406
|
+
retained: [
|
|
31407
|
+
"temperature",
|
|
31408
|
+
"top_p",
|
|
31409
|
+
"prompt",
|
|
31410
|
+
"tools",
|
|
31411
|
+
"disable",
|
|
31412
|
+
"description",
|
|
31413
|
+
"mode",
|
|
31414
|
+
"color",
|
|
31415
|
+
"maxSteps",
|
|
31416
|
+
"permission",
|
|
31417
|
+
"maxTokens",
|
|
31418
|
+
"two_pass",
|
|
31419
|
+
"disallowed_tools"
|
|
31420
|
+
],
|
|
31421
|
+
migrated_execution: ["model", "fallback_models", "variant", "thinking_level"]
|
|
31422
|
+
},
|
|
31423
|
+
dreamer: {
|
|
31424
|
+
retained: [
|
|
31425
|
+
"temperature",
|
|
31426
|
+
"top_p",
|
|
31427
|
+
"prompt",
|
|
31428
|
+
"tools",
|
|
31429
|
+
"disable",
|
|
31430
|
+
"description",
|
|
31431
|
+
"mode",
|
|
31432
|
+
"color",
|
|
31433
|
+
"maxSteps",
|
|
31434
|
+
"permission",
|
|
31435
|
+
"maxTokens",
|
|
31436
|
+
"inject_docs"
|
|
31437
|
+
],
|
|
31438
|
+
migrated_execution: ["model", "fallback_models", "variant", "thinking_level"]
|
|
31439
|
+
},
|
|
31440
|
+
task: {
|
|
31441
|
+
retained: ["schedule", "promotion_threshold"],
|
|
31442
|
+
migrated_execution: [
|
|
31443
|
+
"model",
|
|
31444
|
+
"fallback_models",
|
|
31445
|
+
"variant",
|
|
31446
|
+
"thinking_level",
|
|
31447
|
+
"timeout_minutes"
|
|
31448
|
+
]
|
|
31449
|
+
}
|
|
31450
|
+
};
|
|
31451
|
+
var OcEntryObjectSchema = exports_external.object({
|
|
31452
|
+
model: exports_external.string().describe("OpenCode model ID (for example, provider/model)."),
|
|
31453
|
+
variant: exports_external.string().optional().describe("OpenCode reasoning variant for this entry.")
|
|
31454
|
+
}).strict();
|
|
31455
|
+
var OcEntrySchema = exports_external.union([exports_external.string(), OcEntryObjectSchema]);
|
|
31456
|
+
var PiEntryObjectSchema = exports_external.object({
|
|
31457
|
+
model: exports_external.string().describe("Pi model ID (for example, provider/model)."),
|
|
31458
|
+
thinking_level: PiThinkingLevelSchema.describe("Pi thinking level for this entry.")
|
|
31459
|
+
}).strict();
|
|
31460
|
+
var PiEntrySchema = exports_external.union([exports_external.string(), PiEntryObjectSchema]);
|
|
31461
|
+
var OpenCodeHarnessBlockSchema = exports_external.object({
|
|
31462
|
+
model: OcEntrySchema.optional().describe("Primary OpenCode model entry."),
|
|
31463
|
+
fallback_models: exports_external.array(OcEntrySchema).optional().describe("Ordered fallback OpenCode entries. New-shape configuration requires an array; legacy singleton values migrate to a one-element array."),
|
|
31464
|
+
variant: exports_external.string().optional().describe("OpenCode reasoning variant for the primary entry when it declares none. Fallback entries declare variants per-entry.")
|
|
31465
|
+
}).strict().describe("Strict OpenCode model-resolution block. It accepts no Pi vocabulary.");
|
|
31466
|
+
var PiHarnessBlockSchema = exports_external.object({
|
|
31467
|
+
model: PiEntrySchema.optional().describe("Primary Pi model entry."),
|
|
31468
|
+
fallback_models: exports_external.array(PiEntrySchema).optional().describe("Ordered fallback Pi entries. New-shape configuration requires an array; legacy singleton values migrate to a one-element array."),
|
|
31469
|
+
thinking_level: PiThinkingLevelSchema.describe("Pi thinking level for the primary entry when it declares none. Fallback entries declare thinking levels per-entry.")
|
|
31470
|
+
}).strict().describe("Strict Pi model-resolution block. It accepts no OpenCode vocabulary.");
|
|
31471
|
+
var OpenCodeTaskExecutionSchema = exports_external.object({
|
|
31472
|
+
model: OcEntrySchema.optional().describe("OpenCode model entry for this task."),
|
|
31473
|
+
fallback_models: exports_external.array(OcEntrySchema).optional().describe("Ordered OpenCode fallback entries for this task."),
|
|
31474
|
+
variant: exports_external.string().optional().describe("OpenCode reasoning variant for this task's primary entry when it declares none. Fallback entries declare variants per-entry."),
|
|
31475
|
+
timeout_minutes: exports_external.number().min(5).optional().describe("Minutes allowed for this task before it is aborted.")
|
|
31476
|
+
}).strict();
|
|
31477
|
+
var PiTaskExecutionSchema = exports_external.object({
|
|
31478
|
+
model: PiEntrySchema.optional().describe("Pi model entry for this task."),
|
|
31479
|
+
fallback_models: exports_external.array(PiEntrySchema).optional().describe("Ordered Pi fallback entries for this task."),
|
|
31480
|
+
thinking_level: PiThinkingLevelSchema.describe("Pi thinking level for this task's primary entry when it declares none. Fallback entries declare thinking levels per-entry."),
|
|
31481
|
+
timeout_minutes: exports_external.number().min(5).optional().describe("Minutes allowed for this task before it is aborted.")
|
|
31482
|
+
}).strict();
|
|
31483
|
+
var DreamerOpenCodeHarnessBlockSchema = exports_external.object({
|
|
31484
|
+
model: OcEntrySchema.optional().describe("Primary OpenCode model entry."),
|
|
31485
|
+
fallback_models: exports_external.array(OcEntrySchema).optional().describe("Ordered fallback OpenCode entries. New-shape configuration requires an array; legacy singleton values migrate to a one-element array."),
|
|
31486
|
+
variant: exports_external.string().optional().describe("OpenCode reasoning variant for the primary entry when it declares none. Fallback entries declare variants per-entry."),
|
|
31487
|
+
tasks: exports_external.record(exports_external.string(), OpenCodeTaskExecutionSchema).optional().describe("OpenCode task execution overrides. Each named task accepts only model, fallback_models, variant, and timeout_minutes.")
|
|
31488
|
+
}).strict().describe("Strict OpenCode dreamer model-resolution block. It accepts no Pi vocabulary.");
|
|
31489
|
+
var DreamerPiHarnessBlockSchema = exports_external.object({
|
|
31490
|
+
model: PiEntrySchema.optional().describe("Primary Pi model entry."),
|
|
31491
|
+
fallback_models: exports_external.array(PiEntrySchema).optional().describe("Ordered fallback Pi entries. New-shape configuration requires an array; legacy singleton values migrate to a one-element array."),
|
|
31492
|
+
thinking_level: PiThinkingLevelSchema.describe("Pi thinking level for the primary entry when it declares none. Fallback entries declare thinking levels per-entry."),
|
|
31493
|
+
tasks: exports_external.record(exports_external.string(), PiTaskExecutionSchema).optional().describe("Pi task execution overrides. Each named task accepts only model, fallback_models, thinking_level, and timeout_minutes.")
|
|
31494
|
+
}).strict().describe("Strict Pi dreamer model-resolution block. It accepts no OpenCode vocabulary.");
|
|
31230
31495
|
var CronScheduleSchema = exports_external.string().refine((s) => s.trim() === "" || isValidCron(s), {
|
|
31231
31496
|
message: 'Invalid schedule: use a 5-field cron expression (e.g. "0 3 * * *" for 3am daily, "0 3 * * 0" for Sunday 3am, "0 */6 * * *" every 6h) or "" to disable.'
|
|
31232
31497
|
}).describe('5-field cron schedule (e.g. "0 3 * * *"), or "" to disable this task.');
|
|
31233
31498
|
var DreamTaskBaseConfigSchema = exports_external.object({
|
|
31234
|
-
schedule: CronScheduleSchema.default("")
|
|
31235
|
-
|
|
31236
|
-
fallback_models: exports_external.union([exports_external.string(), exports_external.array(exports_external.string())]).optional().describe("Per-task fallback chain (inherits dreamer.fallback_models)"),
|
|
31237
|
-
thinking_level: PiThinkingLevelSchema.describe("Pi only: per-task thinking level"),
|
|
31238
|
-
timeout_minutes: exports_external.number().min(5).default(20).describe("Minutes allowed for this task before it is aborted")
|
|
31239
|
-
});
|
|
31499
|
+
schedule: CronScheduleSchema.default("")
|
|
31500
|
+
}).strict();
|
|
31240
31501
|
var PromotionThresholdSchema = exports_external.number().min(2).max(20).optional().describe("review-user-memories: min candidate observations before promotion is considered (default: 3)");
|
|
31241
31502
|
var PrimerPromotionThresholdSchema = exports_external.number().min(2).max(20).optional().describe("promote-primers: min recurring source days before promotion is considered (default: 2)");
|
|
31242
31503
|
var DreamTaskConfigSchema = DreamTaskBaseConfigSchema.extend({
|
|
@@ -31283,20 +31544,35 @@ var DreamTasksSchema = exports_external.object({
|
|
|
31283
31544
|
"review-user-memories": ReviewUserMemoriesTaskConfigSchema.default(() => ReviewUserMemoriesTaskConfigSchema.parse(defaultTaskConfig("review-user-memories"))),
|
|
31284
31545
|
"promote-primers": PromotePrimersTaskConfigSchema.default(() => PromotePrimersTaskConfigSchema.parse(defaultTaskConfig("promote-primers"))),
|
|
31285
31546
|
"refresh-primers": DreamTaskBaseConfigSchema.default(() => DreamTaskBaseConfigSchema.parse(defaultTaskConfig("refresh-primers")))
|
|
31286
|
-
}).describe("
|
|
31287
|
-
var
|
|
31547
|
+
}).describe("Harness-independent task metadata. schedule, promotion_threshold, and other task metadata remain here; execution settings live under dreamer.opencode.tasks or dreamer.pi.tasks.");
|
|
31548
|
+
var AgentMetadataSchema = AgentOverrideConfigSchema.pick({
|
|
31549
|
+
temperature: true,
|
|
31550
|
+
top_p: true,
|
|
31551
|
+
prompt: true,
|
|
31552
|
+
tools: true,
|
|
31553
|
+
disable: true,
|
|
31554
|
+
description: true,
|
|
31555
|
+
mode: true,
|
|
31556
|
+
color: true,
|
|
31557
|
+
maxSteps: true,
|
|
31558
|
+
permission: true,
|
|
31559
|
+
maxTokens: true
|
|
31560
|
+
});
|
|
31561
|
+
var DreamerConfigSchema = AgentMetadataSchema.extend({
|
|
31562
|
+
opencode: DreamerOpenCodeHarnessBlockSchema.optional(),
|
|
31563
|
+
pi: DreamerPiHarnessBlockSchema.optional(),
|
|
31288
31564
|
tasks: DreamTasksSchema.default(() => DreamTasksSchema.parse({})),
|
|
31289
|
-
inject_docs: exports_external.boolean().default(true).describe("Inject ARCHITECTURE.md and STRUCTURE.md into the m[0] `<project-docs>` block (default true)")
|
|
31290
|
-
|
|
31291
|
-
}));
|
|
31565
|
+
inject_docs: exports_external.boolean().default(true).describe("Inject ARCHITECTURE.md and STRUCTURE.md into the m[0] `<project-docs>` block (default true)")
|
|
31566
|
+
});
|
|
31292
31567
|
var SidekickConfigSchema = AgentOverrideConfigSchema.extend({
|
|
31293
31568
|
timeout_ms: exports_external.number().default(30000).describe("Timeout for sidekick calls in milliseconds"),
|
|
31294
31569
|
system_prompt: exports_external.string().optional().describe("Custom system prompt for sidekick"),
|
|
31295
|
-
thinking_level: PiThinkingLevelSchema.describe("Pi only: explicit thinking level for sidekick subagent invocations. See historian.thinking_level.")
|
|
31570
|
+
thinking_level: PiThinkingLevelSchema.describe("Pi only: explicit thinking level for sidekick subagent invocations. See historian.pi.thinking_level.")
|
|
31296
31571
|
}).optional();
|
|
31297
|
-
var HistorianConfigSchema =
|
|
31572
|
+
var HistorianConfigSchema = AgentMetadataSchema.extend({
|
|
31573
|
+
opencode: OpenCodeHarnessBlockSchema.optional(),
|
|
31574
|
+
pi: PiHarnessBlockSchema.optional(),
|
|
31298
31575
|
two_pass: exports_external.boolean().default(false).describe("Run a second editor pass over historian output to clean low-signal U: lines and cross-compartment duplicates. Adds ~1 extra API call and ~1.3x cost per historian run. Useful for models without extended thinking support. (default: false)"),
|
|
31299
|
-
thinking_level: PiThinkingLevelSchema.describe("Pi only: explicit thinking level passed as --thinking <level> to Pi historian subagent invocations. Required when using reasoning models (e.g. github-copilot/gpt-5.4) because Pi's default thinking-level resolution can pick a value the provider rejects. OpenCode users set variant instead. Valid: off | minimal | low | medium | high | xhigh | max"),
|
|
31300
31576
|
disallowed_tools: exports_external.array(exports_external.enum(["*", "read", "aft_outline", "aft_zoom", "aft_search"])).default([]).describe(`OpenCode only. Tools to REMOVE from the historian's default allow-list [read, aft_outline, aft_zoom, aft_search]. Applies to both historian and historian-editor agents. Use ["*"] to strip all tool definitions from the model request — this prevents weak instruction-following models (e.g. mistral-small-latest) from entering tool-calling loops. Individual tool names remove just that tool. Note: a user-supplied historian.permission override can re-allow a tool that disallowed_tools removed — disallowed_tools sets the baseline, permission overrides take precedence. (default: [])`)
|
|
31301
31577
|
}).optional();
|
|
31302
31578
|
var EmbeddingFallbackProviderSchema = exports_external.enum(["local", "openai-compatible", "off"]);
|
|
@@ -31406,8 +31682,8 @@ var MagicContextConfigSchema = exports_external.object({
|
|
|
31406
31682
|
transform_mode: exports_external.enum(["ts", "rust"]).default("ts").describe('Experimental: routes the entire Magic Context runtime for the project through the ck-mc Rust module over subc (requires user-level `subc` config); "ts" is the current TypeScript pipeline.'),
|
|
31407
31683
|
auto_update: exports_external.boolean().optional().describe("Enable automatic npm self-update checks for the OpenCode plugin. Security: USER-only in config loader, so hostile project configs cannot suppress updates."),
|
|
31408
31684
|
language: exports_external.string().trim().toLowerCase().refine((s) => isValidLanguageCode(s), 'language must be a 2-letter ISO 639-1 code (e.g. "tr", "es", "de")').optional().describe("Output language for Magic Context's generated content and guidance, as a " + '2-letter ISO 639-1 code (e.g. "tr", "es", "de", "ja", "pt"). When set, the ' + "historian, dreamer, sidekick, and the agent-guidance block instruct the model to " + "write its PROSE in this language while keeping all structural tokens (XML tags, " + "the five memory category names, code identifiers, file paths) in English. " + "USER-LEVEL ONLY (ignored in project config for security). Unset = today's " + "behavior (model mirrors the conversation; English scaffolding). Changing it " + "triggers one cache re-materialization; existing compartments/memories keep their " + "original language until naturally rewritten."),
|
|
31409
|
-
historian: HistorianConfigSchema.describe("Historian
|
|
31410
|
-
dreamer: DreamerConfigSchema.optional().describe("Dreamer
|
|
31685
|
+
historian: HistorianConfigSchema.describe("Historian metadata plus independent strict OpenCode and Pi execution blocks. Retained metadata stays at historian; model, fallback_models, variant, and thinking_level belong only in historian.opencode or historian.pi."),
|
|
31686
|
+
dreamer: DreamerConfigSchema.optional().describe("Dreamer metadata and scheduling plus independent strict OpenCode and Pi execution blocks. schedule and promotion_threshold stay at dreamer.tasks; model, fallback_models, variant, thinking_level, and timeout_minutes belong only in the matching harness block."),
|
|
31411
31687
|
smart_notes: exports_external.object({
|
|
31412
31688
|
retina_handoff: exports_external.boolean().default(false).describe("When true, dreamer skips smart notes whose surface conditions compiled to retina provider configs at authoring time. Default false keeps both paths active until the retina consumer is deployed.")
|
|
31413
31689
|
}).default({ retina_handoff: false }).describe("Smart-note ownership transition controls."),
|
|
@@ -38578,6 +38854,7 @@ async function runValidatedHistorianPass(args) {
|
|
|
38578
38854
|
const firstRun = await runHistorianPrompt({
|
|
38579
38855
|
...args,
|
|
38580
38856
|
dumpLabel: `${args.dumpLabelBase}-initial`,
|
|
38857
|
+
modelOverride: args.model,
|
|
38581
38858
|
agentId: args.agentId
|
|
38582
38859
|
});
|
|
38583
38860
|
if (!firstRun.ok || !firstRun.result) {
|
|
@@ -38606,6 +38883,7 @@ async function runValidatedHistorianPass(args) {
|
|
|
38606
38883
|
...args,
|
|
38607
38884
|
prompt: repairPrompt,
|
|
38608
38885
|
dumpLabel: `${args.dumpLabelBase}-repair`,
|
|
38886
|
+
modelOverride: args.model,
|
|
38609
38887
|
agentId: args.agentId
|
|
38610
38888
|
});
|
|
38611
38889
|
if (!repairRun.ok || !repairRun.result) {
|
|
@@ -38646,7 +38924,8 @@ async function runEditorPassOrFallback(args) {
|
|
|
38646
38924
|
timeoutMs: args.timeoutMs,
|
|
38647
38925
|
dumpLabel: `${args.dumpLabelBase}-editor`,
|
|
38648
38926
|
agentId: HISTORIAN_EDITOR_AGENT,
|
|
38649
|
-
parentInvocationId: args.draftInvocationId ?? null
|
|
38927
|
+
parentInvocationId: args.draftInvocationId ?? null,
|
|
38928
|
+
modelOverride: args.model
|
|
38650
38929
|
});
|
|
38651
38930
|
if (!editorRun.ok || !editorRun.result) {
|
|
38652
38931
|
sessionLog(args.parentSessionId, "historian two-pass: editor call failed", {
|
|
@@ -38699,7 +38978,7 @@ async function runHistorianPrompt(args) {
|
|
|
38699
38978
|
});
|
|
38700
38979
|
};
|
|
38701
38980
|
try {
|
|
38702
|
-
sessionLog(parentSessionId, `historian: creating child session (agent=${
|
|
38981
|
+
sessionLog(parentSessionId, `historian: creating child session (agent=${toModelEntry(modelOverride)?.model ?? `agent:${agentId}`})`);
|
|
38703
38982
|
const createResponse = await createChildSessionWithFence({
|
|
38704
38983
|
client,
|
|
38705
38984
|
db,
|
|
@@ -38723,7 +39002,7 @@ async function runHistorianPrompt(args) {
|
|
|
38723
39002
|
query: { directory: sessionDirectory },
|
|
38724
39003
|
body: {
|
|
38725
39004
|
agent: agentId,
|
|
38726
|
-
...modelOverride
|
|
39005
|
+
...modelBodyField(modelOverride),
|
|
38727
39006
|
parts: [{ type: "text", text: prompt, synthetic: true }]
|
|
38728
39007
|
}
|
|
38729
39008
|
}, {
|
|
@@ -38793,10 +39072,21 @@ async function runHistorianPrompt(args) {
|
|
|
38793
39072
|
async function runFallbackHistorianPass(args) {
|
|
38794
39073
|
const seen = new Set;
|
|
38795
39074
|
const chain = [];
|
|
38796
|
-
|
|
38797
|
-
|
|
39075
|
+
const primary = toModelEntry(args.model);
|
|
39076
|
+
for (const candidateInput of [
|
|
39077
|
+
...args.fallbackModels ?? [],
|
|
39078
|
+
...args.fallbackModelId ? [{ model: args.fallbackModelId }] : []
|
|
39079
|
+
]) {
|
|
39080
|
+
const candidate = toModelEntry(candidateInput);
|
|
39081
|
+
if (!candidate)
|
|
39082
|
+
continue;
|
|
39083
|
+
const key = `${candidate.model}\x00${candidate.qualifier ?? ""}`;
|
|
39084
|
+
if (!candidate.model || seen.has(key))
|
|
39085
|
+
continue;
|
|
39086
|
+
if (primary?.model === candidate.model && primary.qualifier === candidate.qualifier) {
|
|
38798
39087
|
continue;
|
|
38799
|
-
|
|
39088
|
+
}
|
|
39089
|
+
seen.add(key);
|
|
38800
39090
|
chain.push(candidate);
|
|
38801
39091
|
}
|
|
38802
39092
|
if (chain.length === 0) {
|
|
@@ -38804,9 +39094,9 @@ async function runFallbackHistorianPass(args) {
|
|
|
38804
39094
|
}
|
|
38805
39095
|
let lastError = args.error;
|
|
38806
39096
|
for (let i = 0;i < chain.length; i += 1) {
|
|
38807
|
-
const
|
|
38808
|
-
const
|
|
38809
|
-
if (!
|
|
39097
|
+
const modelOverride = chain[i];
|
|
39098
|
+
const modelId = modelOverride.model;
|
|
39099
|
+
if (!parseModelOverride(modelId))
|
|
38810
39100
|
continue;
|
|
38811
39101
|
const isSessionModelLastResort = modelId === args.fallbackModelId && i === chain.length - 1;
|
|
38812
39102
|
sessionLog(args.parentSessionId, `compartment agent: retrying historian with ${modelId} (${isSessionModelLastResort ? "session-model last resort" : "configured fallback"} ${i + 1}/${chain.length})`);
|
|
@@ -40351,6 +40641,7 @@ function isDroppedPlaceholder(text) {
|
|
|
40351
40641
|
}
|
|
40352
40642
|
var EMPTY_HARD_SIGNALS = {
|
|
40353
40643
|
systemHash: "",
|
|
40644
|
+
toolSetHash: "",
|
|
40354
40645
|
modelKey: "",
|
|
40355
40646
|
cacheExpired: false,
|
|
40356
40647
|
lastResponseTime: 0
|
|
@@ -40654,6 +40945,7 @@ function readCurrentM0SnapshotMarkersUncached(args) {
|
|
|
40654
40945
|
upgradeState: getUpgradeState(args.db, args.sessionId),
|
|
40655
40946
|
compartmentRenderEpoch: COMPARTMENT_RENDER_EPOCH,
|
|
40656
40947
|
systemHash: hard.systemHash,
|
|
40948
|
+
toolSetHash: hard.toolSetHash ?? "",
|
|
40657
40949
|
modelKey: piModelRefToCanonical(hard.modelKey),
|
|
40658
40950
|
projectIdentity: args.projectPath ?? null,
|
|
40659
40951
|
muralEnabled: args.muralEnabled === true,
|
|
@@ -40669,6 +40961,7 @@ function refreshVolatileMarkerInputs(markers, args) {
|
|
|
40669
40961
|
projectDocsHash: projectDirectory && args.injectDocs !== false ? computeProjectDocsHash(projectDirectory) : "",
|
|
40670
40962
|
materializedAt: Date.now(),
|
|
40671
40963
|
systemHash: hard.systemHash,
|
|
40964
|
+
toolSetHash: hard.toolSetHash ?? "",
|
|
40672
40965
|
modelKey: hard.modelKey,
|
|
40673
40966
|
projectIdentity: args.projectPath ?? null,
|
|
40674
40967
|
muralEnabled: args.muralEnabled === true,
|
|
@@ -40736,6 +41029,7 @@ function snapshotMarkersFromCachedM0(state2) {
|
|
|
40736
41029
|
upgradeState: cachedUpgradeIdentity.upgradeState,
|
|
40737
41030
|
compartmentRenderEpoch: cachedUpgradeIdentity.compartmentRenderEpoch,
|
|
40738
41031
|
systemHash: state2.cachedM0SystemHash ?? "",
|
|
41032
|
+
toolSetHash: state2.cachedM0ToolSetHash ?? "",
|
|
40739
41033
|
modelKey: state2.cachedM0ModelKey ?? "",
|
|
40740
41034
|
projectIdentity: state2.cachedM0ProjectIdentity ?? null,
|
|
40741
41035
|
muralHash: state2.cachedM0MuralHash ?? null,
|
|
@@ -40776,8 +41070,14 @@ function mustMaterialize(args) {
|
|
|
40776
41070
|
systemHashNew: hard.systemHash
|
|
40777
41071
|
};
|
|
40778
41072
|
}
|
|
41073
|
+
const liveToolSetHash = hard.toolSetHash ?? "";
|
|
41074
|
+
const toolSetHashComparison = liveToolSetHash !== "" ? {
|
|
41075
|
+
m0ToolSetHashPrev: args.state.cachedM0ToolSetHash ?? "",
|
|
41076
|
+
m0ToolSetHashNew: liveToolSetHash
|
|
41077
|
+
} : null;
|
|
41078
|
+
const withToolSetHashComparison = (decision) => toolSetHashComparison ? { ...decision, ...toolSetHashComparison } : decision;
|
|
40779
41079
|
if (hard.cacheExpired && hard.lastResponseTime > 0 && hard.lastResponseTime > (args.state.cachedM0MaterializedAt ?? 0)) {
|
|
40780
|
-
return { value: true, reason: "ttl_idle" };
|
|
41080
|
+
return withToolSetHashComparison({ value: true, reason: "ttl_idle" });
|
|
40781
41081
|
}
|
|
40782
41082
|
if (current.projectIdentity !== null) {
|
|
40783
41083
|
const cachedProjectIdentity = args.state.cachedM0ProjectIdentity ?? null;
|
|
@@ -40785,23 +41085,23 @@ function mustMaterialize(args) {
|
|
|
40785
41085
|
args.state.cachedM0ProjectIdentity = current.projectIdentity;
|
|
40786
41086
|
args.db.prepare("UPDATE session_meta SET cached_m0_project_identity = ? WHERE session_id = ?").run(current.projectIdentity, args.sessionId);
|
|
40787
41087
|
} else if (cachedProjectIdentity !== current.projectIdentity) {
|
|
40788
|
-
return { value: true, reason: "project_change" };
|
|
41088
|
+
return withToolSetHashComparison({ value: true, reason: "project_change" });
|
|
40789
41089
|
}
|
|
40790
41090
|
}
|
|
40791
41091
|
if (current.workspaceFingerprint !== null || (args.state.cachedM0WorkspaceFingerprint ?? null) !== null) {
|
|
40792
41092
|
if ((args.state.cachedM0WorkspaceFingerprint ?? null) !== current.workspaceFingerprint) {
|
|
40793
|
-
return { value: true, reason: "project_memory_epoch" };
|
|
41093
|
+
return withToolSetHashComparison({ value: true, reason: "project_memory_epoch" });
|
|
40794
41094
|
}
|
|
40795
41095
|
} else if (args.state.cachedM0ProjectMemoryEpoch !== current.projectMemoryEpoch) {
|
|
40796
41096
|
return { value: true, reason: "project_memory_epoch" };
|
|
40797
41097
|
}
|
|
40798
41098
|
if (args.state.cachedM0MaxMutationId !== current.maxMutationId) {
|
|
40799
|
-
return { value: true, reason: "max_mutation_id" };
|
|
41099
|
+
return withToolSetHashComparison({ value: true, reason: "max_mutation_id" });
|
|
40800
41100
|
}
|
|
40801
41101
|
if (cachedUpgradeIdentity.upgradeState !== current.upgradeState) {
|
|
40802
|
-
return { value: true, reason: "upgrade_state" };
|
|
41102
|
+
return withToolSetHashComparison({ value: true, reason: "upgrade_state" });
|
|
40803
41103
|
}
|
|
40804
|
-
return { value: false, reason: null };
|
|
41104
|
+
return withToolSetHashComparison({ value: false, reason: null });
|
|
40805
41105
|
}
|
|
40806
41106
|
function trimMemoriesToBudgetV2(sessionId, memories, budgetTokens, renderOptions = {}) {
|
|
40807
41107
|
const selectionOrder = [...memories].sort(memorySelectionOrder);
|
|
@@ -41088,6 +41388,7 @@ function applyMarkersToState(state2, m0Bytes, markers, m1Bytes) {
|
|
|
41088
41388
|
state2.cachedM0SessionFactsVersion = markers.sessionFactsVersion;
|
|
41089
41389
|
state2.cachedM0UpgradeState = encodeCachedM0UpgradeIdentity(markers.upgradeState, markers.compartmentRenderEpoch, markers.muralEnabled, markers.renderBudgetIdentity);
|
|
41090
41390
|
state2.cachedM0SystemHash = markers.systemHash;
|
|
41391
|
+
state2.cachedM0ToolSetHash = markers.toolSetHash;
|
|
41091
41392
|
state2.cachedM0ModelKey = markers.modelKey;
|
|
41092
41393
|
state2.cachedM0ProjectIdentity = markers.projectIdentity;
|
|
41093
41394
|
state2.cachedM0MuralHash = markers.muralHash ?? null;
|
|
@@ -41230,6 +41531,7 @@ function materializeM0(options) {
|
|
|
41230
41531
|
upgradeState: getUpgradeState(options.db, options.sessionId),
|
|
41231
41532
|
compartmentRenderEpoch: COMPARTMENT_RENDER_EPOCH,
|
|
41232
41533
|
systemHash: snapshotMarkers.systemHash,
|
|
41534
|
+
toolSetHash: snapshotMarkers.toolSetHash,
|
|
41233
41535
|
modelKey: snapshotMarkers.modelKey,
|
|
41234
41536
|
projectIdentity: projectPath ?? null,
|
|
41235
41537
|
muralEnabled: snapshotMarkers.muralEnabled,
|
|
@@ -41270,6 +41572,7 @@ function materializeM0(options) {
|
|
|
41270
41572
|
sessionFactsVersion: snapshotMarkers.sessionFactsVersion,
|
|
41271
41573
|
upgradeState: encodeCachedM0UpgradeIdentity(snapshotMarkers.upgradeState, snapshotMarkers.compartmentRenderEpoch, snapshotMarkers.muralEnabled, snapshotMarkers.renderBudgetIdentity),
|
|
41272
41574
|
systemHash: snapshotMarkers.systemHash,
|
|
41575
|
+
toolSetHash: snapshotMarkers.toolSetHash,
|
|
41273
41576
|
modelKey: snapshotMarkers.modelKey,
|
|
41274
41577
|
projectIdentity: snapshotMarkers.projectIdentity
|
|
41275
41578
|
});
|
|
@@ -41466,9 +41769,10 @@ function readCachedM0M1Row(db, sessionId) {
|
|
|
41466
41769
|
cached_m0_project_docs_hash,
|
|
41467
41770
|
cached_m0_materialized_at,
|
|
41468
41771
|
cached_m0_session_facts_version,
|
|
41469
|
-
|
|
41470
|
-
|
|
41471
|
-
|
|
41772
|
+
cached_m0_upgrade_state,
|
|
41773
|
+
cached_m0_system_hash,
|
|
41774
|
+
cached_m0_tool_set_hash,
|
|
41775
|
+
cached_m0_model_key,
|
|
41472
41776
|
cached_m0_project_identity,
|
|
41473
41777
|
memory_block_ids
|
|
41474
41778
|
FROM session_meta
|
|
@@ -41506,6 +41810,7 @@ function markersFromCachedRow(row) {
|
|
|
41506
41810
|
upgradeState: cachedUpgradeIdentity.upgradeState,
|
|
41507
41811
|
compartmentRenderEpoch: cachedUpgradeIdentity.compartmentRenderEpoch,
|
|
41508
41812
|
systemHash: row.cached_m0_system_hash ?? "",
|
|
41813
|
+
toolSetHash: row.cached_m0_tool_set_hash ?? "",
|
|
41509
41814
|
modelKey: row.cached_m0_model_key ?? "",
|
|
41510
41815
|
projectIdentity: row.cached_m0_project_identity ?? null,
|
|
41511
41816
|
muralHash: row.cached_m0_mural_hash ?? null,
|
|
@@ -41514,7 +41819,7 @@ function markersFromCachedRow(row) {
|
|
|
41514
41819
|
};
|
|
41515
41820
|
}
|
|
41516
41821
|
function cachedRowMatchesState(row, state2) {
|
|
41517
|
-
return bufferEqualsNullable(row.cached_m0_bytes, state2.cachedM0Bytes) && (row.cached_m0_mural_data_url ?? null) === (state2.cachedM0MuralDataUrl ?? null) && (row.cached_m0_mural_hash ?? null) === (state2.cachedM0MuralHash ?? null) && row.cached_m0_project_memory_epoch === state2.cachedM0ProjectMemoryEpoch && (row.cached_m0_workspace_fingerprint ?? null) === (state2.cachedM0WorkspaceFingerprint ?? null) && row.cached_m0_project_user_profile_version === state2.cachedM0ProjectUserProfileVersion && row.cached_m0_max_compartment_seq === state2.cachedM0MaxCompartmentSeq && row.cached_m0_max_memory_id === state2.cachedM0MaxMemoryId && row.cached_m0_max_mutation_id === state2.cachedM0MaxMutationId && row.cached_m0_max_memory_mutation_id === state2.cachedM0MaxMemoryMutationId && row.cached_m0_materialized_at === state2.cachedM0MaterializedAt && row.cached_m0_session_facts_version === state2.cachedM0SessionFactsVersion && (row.cached_m0_upgrade_state ?? null) === (state2.cachedM0UpgradeState ?? null) && (row.cached_m0_system_hash ?? "") === (state2.cachedM0SystemHash ?? "") && piModelRefToCanonical(row.cached_m0_model_key ?? "") === piModelRefToCanonical(state2.cachedM0ModelKey ?? "") && (row.cached_m0_project_identity ?? null) === (state2.cachedM0ProjectIdentity ?? null);
|
|
41822
|
+
return bufferEqualsNullable(row.cached_m0_bytes, state2.cachedM0Bytes) && (row.cached_m0_mural_data_url ?? null) === (state2.cachedM0MuralDataUrl ?? null) && (row.cached_m0_mural_hash ?? null) === (state2.cachedM0MuralHash ?? null) && row.cached_m0_project_memory_epoch === state2.cachedM0ProjectMemoryEpoch && (row.cached_m0_workspace_fingerprint ?? null) === (state2.cachedM0WorkspaceFingerprint ?? null) && row.cached_m0_project_user_profile_version === state2.cachedM0ProjectUserProfileVersion && row.cached_m0_max_compartment_seq === state2.cachedM0MaxCompartmentSeq && row.cached_m0_max_memory_id === state2.cachedM0MaxMemoryId && row.cached_m0_max_mutation_id === state2.cachedM0MaxMutationId && row.cached_m0_max_memory_mutation_id === state2.cachedM0MaxMemoryMutationId && row.cached_m0_materialized_at === state2.cachedM0MaterializedAt && row.cached_m0_session_facts_version === state2.cachedM0SessionFactsVersion && (row.cached_m0_upgrade_state ?? null) === (state2.cachedM0UpgradeState ?? null) && (row.cached_m0_system_hash ?? "") === (state2.cachedM0SystemHash ?? "") && (row.cached_m0_tool_set_hash ?? "") === (state2.cachedM0ToolSetHash ?? "") && piModelRefToCanonical(row.cached_m0_model_key ?? "") === piModelRefToCanonical(state2.cachedM0ModelKey ?? "") && (row.cached_m0_project_identity ?? null) === (state2.cachedM0ProjectIdentity ?? null);
|
|
41518
41823
|
}
|
|
41519
41824
|
function applyCachedRowToState(state2, row) {
|
|
41520
41825
|
const markers = markersFromCachedRow(row);
|
|
@@ -41537,6 +41842,7 @@ function applyCachedRowToState(state2, row) {
|
|
|
41537
41842
|
state2.cachedM0SessionFactsVersion = markers.sessionFactsVersion;
|
|
41538
41843
|
state2.cachedM0UpgradeState = encodeCachedM0UpgradeIdentity(markers.upgradeState, markers.compartmentRenderEpoch, markers.muralEnabled, markers.renderBudgetIdentity);
|
|
41539
41844
|
state2.cachedM0SystemHash = markers.systemHash;
|
|
41845
|
+
state2.cachedM0ToolSetHash = markers.toolSetHash;
|
|
41540
41846
|
state2.cachedM0ModelKey = markers.modelKey;
|
|
41541
41847
|
state2.cachedM0ProjectIdentity = markers.projectIdentity;
|
|
41542
41848
|
state2.snapshotMarkers = markers;
|
|
@@ -45006,6 +45312,7 @@ Historian pass ${passCount + 1}, attempt ${passAttempt} started for messages ${c
|
|
|
45006
45312
|
sequenceOffset: candidateCompartments.length,
|
|
45007
45313
|
dumpLabelBase: `recomp-${sessionId}-${chunk.startIndex}-${chunk.endIndex}-pass-${passCount + 1}`,
|
|
45008
45314
|
timeoutMs: historianTimeoutMs,
|
|
45315
|
+
model: deps.model,
|
|
45009
45316
|
fallbackModelId: deps.fallbackModelId,
|
|
45010
45317
|
fallbackModels: deps.fallbackModels,
|
|
45011
45318
|
twoPass: deps.historianTwoPass,
|
|
@@ -45426,6 +45733,7 @@ Historian pass ${passCount + 1}, attempt ${passAttempt} started for messages ${c
|
|
|
45426
45733
|
sequenceOffset: candidateCompartments.length,
|
|
45427
45734
|
dumpLabelBase: `partial-recomp-${sessionId}-${chunk.startIndex}-${chunk.endIndex}-pass-${passCount + 1}`,
|
|
45428
45735
|
timeoutMs: historianTimeoutMs,
|
|
45736
|
+
model: deps.model,
|
|
45429
45737
|
fallbackModelId: deps.fallbackModelId,
|
|
45430
45738
|
fallbackModels: deps.fallbackModels,
|
|
45431
45739
|
twoPass: deps.historianTwoPass,
|
|
@@ -45675,6 +45983,10 @@ var LKG_SINGLE_SLOT_BYTES = 24 * 1024 * 1024;
|
|
|
45675
45983
|
var LKG_METADATA_BYTES = 256;
|
|
45676
45984
|
var slots = new Map;
|
|
45677
45985
|
var totalBytes = 0;
|
|
45986
|
+
var persistenceBackend;
|
|
45987
|
+
function registerLkgPersistence(backend) {
|
|
45988
|
+
persistenceBackend = backend;
|
|
45989
|
+
}
|
|
45678
45990
|
function slotBytes(slot) {
|
|
45679
45991
|
const digestBytes = slot.inputContentDigests.reduce((total, digest) => total + 2 * digest.length, 0);
|
|
45680
45992
|
return 2 * slot.jsonPrefix.length + digestBytes + LKG_METADATA_BYTES;
|
|
@@ -45808,24 +46120,91 @@ function captureSlot(sessionId, slot) {
|
|
|
45808
46120
|
totalBytes += bytes;
|
|
45809
46121
|
return true;
|
|
45810
46122
|
}
|
|
46123
|
+
function installHydratedSlot(sessionId, slot) {
|
|
46124
|
+
const bytes = slotBytes(slot);
|
|
46125
|
+
if (bytes > LKG_SINGLE_SLOT_BYTES)
|
|
46126
|
+
return false;
|
|
46127
|
+
const prior = slots.get(sessionId);
|
|
46128
|
+
if (prior)
|
|
46129
|
+
totalBytes -= prior.bytes;
|
|
46130
|
+
slots.delete(sessionId);
|
|
46131
|
+
while (totalBytes + bytes > LKG_TOTAL_BYTES) {
|
|
46132
|
+
const oldest = slots.keys().next().value;
|
|
46133
|
+
if (oldest === undefined)
|
|
46134
|
+
break;
|
|
46135
|
+
const evicted = slots.get(oldest);
|
|
46136
|
+
slots.delete(oldest);
|
|
46137
|
+
if (evicted)
|
|
46138
|
+
totalBytes -= evicted.bytes;
|
|
46139
|
+
}
|
|
46140
|
+
if (totalBytes + bytes > LKG_TOTAL_BYTES) {
|
|
46141
|
+
if (prior) {
|
|
46142
|
+
slots.set(sessionId, prior);
|
|
46143
|
+
totalBytes += prior.bytes;
|
|
46144
|
+
}
|
|
46145
|
+
return false;
|
|
46146
|
+
}
|
|
46147
|
+
const entry = {
|
|
46148
|
+
slot: {
|
|
46149
|
+
...slot,
|
|
46150
|
+
inputIdSeq: [...slot.inputIdSeq],
|
|
46151
|
+
inputContentDigests: [...slot.inputContentDigests],
|
|
46152
|
+
inputContentSignatures: slot.inputContentSignatures ? [...slot.inputContentSignatures] : undefined
|
|
46153
|
+
},
|
|
46154
|
+
bytes
|
|
46155
|
+
};
|
|
46156
|
+
slots.set(sessionId, entry);
|
|
46157
|
+
totalBytes += bytes;
|
|
46158
|
+
return true;
|
|
46159
|
+
}
|
|
46160
|
+
function hydrateSlotFromPersistence(sessionId) {
|
|
46161
|
+
const backend = persistenceBackend;
|
|
46162
|
+
if (!backend)
|
|
46163
|
+
return;
|
|
46164
|
+
let loaded;
|
|
46165
|
+
try {
|
|
46166
|
+
loaded = backend.load(sessionId);
|
|
46167
|
+
} catch (error51) {
|
|
46168
|
+
sessionLog(sessionId, "LKG durable hydration failed:", error51);
|
|
46169
|
+
return;
|
|
46170
|
+
}
|
|
46171
|
+
if (!loaded)
|
|
46172
|
+
return;
|
|
46173
|
+
if (!installHydratedSlot(sessionId, loaded))
|
|
46174
|
+
return;
|
|
46175
|
+
sessionLog(sessionId, "lkg_hydrated_from_disk");
|
|
46176
|
+
const entry = slots.get(sessionId);
|
|
46177
|
+
return entry ? copySlotForRead(entry.slot) : undefined;
|
|
46178
|
+
}
|
|
46179
|
+
function copySlotForRead(slot) {
|
|
46180
|
+
return {
|
|
46181
|
+
...slot,
|
|
46182
|
+
inputIdSeq: [...slot.inputIdSeq],
|
|
46183
|
+
inputContentDigests: [...slot.inputContentDigests],
|
|
46184
|
+
inputContentSignatures: slot.inputContentSignatures ? [...slot.inputContentSignatures] : undefined
|
|
46185
|
+
};
|
|
46186
|
+
}
|
|
45811
46187
|
function getSlot(sessionId) {
|
|
45812
46188
|
const entry = slots.get(sessionId);
|
|
45813
46189
|
if (!entry)
|
|
45814
|
-
return;
|
|
46190
|
+
return hydrateSlotFromPersistence(sessionId);
|
|
45815
46191
|
touch(sessionId, entry);
|
|
45816
|
-
return
|
|
45817
|
-
...entry.slot,
|
|
45818
|
-
inputIdSeq: [...entry.slot.inputIdSeq],
|
|
45819
|
-
inputContentDigests: [...entry.slot.inputContentDigests],
|
|
45820
|
-
inputContentSignatures: entry.slot.inputContentSignatures ? [...entry.slot.inputContentSignatures] : undefined
|
|
45821
|
-
};
|
|
46192
|
+
return copySlotForRead(entry.slot);
|
|
45822
46193
|
}
|
|
45823
46194
|
function dropSlot(sessionId, _reason) {
|
|
45824
46195
|
const entry = slots.get(sessionId);
|
|
45825
|
-
if (
|
|
46196
|
+
if (entry) {
|
|
46197
|
+
slots.delete(sessionId);
|
|
46198
|
+
totalBytes -= entry.bytes;
|
|
46199
|
+
}
|
|
46200
|
+
const backend = persistenceBackend;
|
|
46201
|
+
if (!backend)
|
|
45826
46202
|
return;
|
|
45827
|
-
|
|
45828
|
-
|
|
46203
|
+
try {
|
|
46204
|
+
backend.clear(sessionId);
|
|
46205
|
+
} catch (error51) {
|
|
46206
|
+
sessionLog(sessionId, "LKG durable clear failed:", error51);
|
|
46207
|
+
}
|
|
45829
46208
|
}
|
|
45830
46209
|
function noteEntry(sessionId, messages) {
|
|
45831
46210
|
const slot = getSlot(sessionId);
|
|
@@ -45938,6 +46317,7 @@ function buildRecompDeps(ctx, sessionId) {
|
|
|
45938
46317
|
directory: ctx.directory,
|
|
45939
46318
|
memoryEnabled: ctx.memoryEnabled,
|
|
45940
46319
|
autoPromote: ctx.autoPromote,
|
|
46320
|
+
model: ctx.historianModel,
|
|
45941
46321
|
fallbackModels: ctx.fallbackModels,
|
|
45942
46322
|
language: ctx.language,
|
|
45943
46323
|
fallbackModelId: ctx.fallbackModelId ?? resolveLiveModelKey(ctx.liveSessionState, sessionId),
|
|
@@ -46076,7 +46456,7 @@ async function runUpgradeMemoryMigration(ctx, sessionId, migrationDirectory) {
|
|
|
46076
46456
|
directory: migrationDirectory,
|
|
46077
46457
|
parentSessionId: sessionId,
|
|
46078
46458
|
primaryModelId: ctx.fallbackModelId ?? resolveLiveModelKey(ctx.liveSessionState, sessionId),
|
|
46079
|
-
fallbackModels: ctx.fallbackModels,
|
|
46459
|
+
fallbackModels: ctx.fallbackModels.map((entry) => typeof entry === "string" ? entry : entry.model),
|
|
46080
46460
|
timeoutMs: ctx.historianTimeoutMs,
|
|
46081
46461
|
userMemoriesEnabled: ctx.userMemoriesEnabled,
|
|
46082
46462
|
language: ctx.language
|
|
@@ -46087,4 +46467,4 @@ async function runUpgradeMemoryMigration(ctx, sessionId, migrationDirectory) {
|
|
|
46087
46467
|
}
|
|
46088
46468
|
}
|
|
46089
46469
|
|
|
46090
|
-
export { withContentLanguageDirective, buildPrimaryLanguageDirective, cortexKitUserConfigBasePath, cortexKitProjectConfigBasePath, resolveLegacyConfigSources, resolveLegacyConfigSourcesForHarness, migrateMagicContextConfigLocations, exports_external, DEFAULT_PROTECTED_TAGS, parseCron, nextOccurrence, nextDueAtMs, promptSurfaceConfigIdentity, resolvePromptSurface, resolveModelConfigOrDefault, DEFAULT_EXECUTE_THRESHOLD_PERCENTAGE, DEFAULT_HISTORIAN_TIMEOUT_MS, DEFAULT_LOCAL_EMBEDDING_MODEL, MagicContextConfigSchema, getOpenCodeDbPath, removeMcOwnedCompactionMarkers, isFailClosedBlockingError, shouldBypassFailClosedBlock, resolveAgentNameFromMessages, createFailClosedController, recordHookInitFailure, clearHookInitFailure, getLastHookInitFailure, ProjectIdentityError, resolveProjectIdentityStrict, takeDubiousOwnershipProjectIdentityWarning, resolveProjectIdentity, resolveProjectIdentityForSession, normalizeStoredProjectPath, storedPathBelongsToIdentity, isLinkedGitWorktree, recordSessionProjectIdentity, beginBootQuietPeriod, bootQuietRemainingMs, scheduleAfterBootQuiet, rpcPortDir, rpcPortFilePath, isPidAlive, parseRpcPortFile, registerModuleNoteEvaluationBridge, getModuleNoteEvaluationBridge, getContextStoreUuid, ensureContextStoreUuid, getAuthorityManagedMarker, reconcileAuthorityProject, checksumAuthoritySeedRows, prepareAuthority, drainAuthority, getMirrorCursor, applyMirroredNoteCompileFields, applyMirrorPage, pullMemoryMirrorOnce, V2_MEMORY_CATEGORIES, CATEGORY_PRIORITY, resolveWorkspaceShareCategories, resolveWorkspaceIdentitySet, expandWorkspaceIdentitySetWithAliases, resolveStoredPathWorkspaceIdentity, storedPathBelongsToWorkspace, sourceNameForMemory, computeWorkspaceEpochFingerprint, textMentionsRecentCommit, hasMeaningfulUserText, extractTexts, extractToolCallSummaries, preloadTokenizer, estimateTokens, normalizeText, recordToolDefinition, getMeasuredToolDefinitionTokens, getSchemaFenceRejection, getMigrationOnOpenRefusal, LATEST_SUPPORTED_VERSION, getDatabasePath, getPersistedSchemaVersion, setSqlitePragmaConfig, runSqliteOptimize, openDatabase, openDatabaseAsync, isDatabasePersisted, getDatabasePersistenceError, COMPARTMENT_LEASE_RENEWAL_MS, acquireCompartmentLease, renewCompartmentLease, releaseCompartmentLease, getCompartments, getLastCompartmentEndMessage, getLastCompartmentEndMessageId, clearRecompStaging, isRawCompactionSummaryInfo, extractInMemoryMessageViews, buildInMemoryTailRawMessages, isRecord, estimateTrueRawMessageTokens, invalidateTrueRawTokenCache, stripPersistedAssistantText, byteSize, stripTagPrefix, prependTag, isThinkingPart, isTextPart, isToolPartWithOutput, isFilePart, buildFileSourceContent, isEditTool, partHasCompletedResult, extractToolCallObservation, ToolMutationBatch, createToolDropTarget, setRawMessageProvider, cleanUserText, withRawSessionMessageCache, readRawSessionMessages, primeTailRawMessageCache, primeInMemoryTailRawMessageCache, readRawSessionMessageOrdinalPage, getRawSessionStoredMessageCount, readRawSessionMessagePartsById, readRawSessionMessageOrdinalById, readRawSessionMessageById, readSessionChunk, getMessageIndexSourceIdentity, isMessageIndexSourceCurrent, getLastIndexedOrdinal, getIndexedMessageCorpusSize, getMessageIndexReconciliationStartOrdinal, isMessageIndexReconciledThrough, deleteIndexedMessage, clearIndexedMessages, indexSingleMessage, indexMessagesAfterOrdinal, sweepOrphanedOpenCodeMessageIndexes, recordEmbeddingMeasurement, getMaxM0MutationId, queueMemoryMutation, getMemoryMutationsForRenderByProjects, getMaxMemoryMutationIdForProjects, MAX_EXECUTE_THRESHOLD, escalationBands, isEmergencyRecoveryArmed, isProviderOverflowReconfirmed, getEmergencyRecoveryArmedAt, loadPersistedUsage, loadProtectedTailMeta, resetProtectedTailNoEligibleHead, getWrapupInProgressState, acquireWrapupInProgress, updateWrapupInProgress, releaseWrapupInProgress, resolveCompactionModeRecord, getCompactionModeRecord, setCompactionModeRecord, getPersistedReasoningWatermark, setPersistedReasoningWatermark, clearPersistedReasoningWatermark, getEmergencyInputSample, setEmergencyDropSample, clearEmergencyDropSample, getLastNudgeUndropped, setLastNudgeUndropped, getLastNudgeLevel, setLastNudgeLevel, resetLastNudgeCycle, resetLastNudgeCycleIfTailShrank, getChannel2NudgeState, getChannel2NudgeClaim, setChannel2NudgeState, casChannel2NudgeState, claimChannel2NudgeState, casChannel2NudgeClaim, getPersistedNoteNudge, getNoteNudgeAnchors, getAutoSearchHintDecisions, appendAutoSearchHintDecision, pruneNoteNudgeAnchors, pruneAutoSearchHintDecisions, removeNoteNudgeAnchorByMessageId, removeAutoSearchHintDecisionByMessageId, getPersistedTodoPermissionDenied, setPersistedTodoPermissionDenied, getPersistedTodoSyntheticAnchor, setPersistedTodoSyntheticAnchor, clearPersistedTodoSyntheticAnchor, setNoteLastReadAt, getHistorianFailureState, clearHistorianFailureState, getOverflowState, recordOverflowDetected, recordDetectedContextLimit, clearEmergencyRecovery, clearDetectedContextLimit, getPersistedCompactionMarkerState, setPersistedCompactionMarkerState, getStrippedPlaceholderIds, applyStrippedPlaceholderDelta, removeStrippedPlaceholderId, getMergedReasoningStrippedIds, addMergedReasoningStrippedIds, getTrailingBlankDecisions, addTrailingBlankDecisions, getStaleReduceStrippedIds, addStaleReduceStrippedIds, getProcessedImageStrippedIds, addProcessedImageStrippedIds, getPendingCompactionMarkerState, clearPendingCompactionMarkerStateIf, peekDeferredExecutePending, setDeferredExecutePendingIfAbsent, clearDeferredExecutePendingIfMatches, getSessionsWithPendingMarker, setSessionWorkMetrics, getNotes, addNote, getSessionNotes, getPendingSmartNotes, getReadySmartNotes, updateNote, dismissNote, markNoteReady, markNoteChecked, queuePendingOp, getPendingOps, clearPendingOps, removePendingOp, PRIMER_CANDIDATE_TTL_MS, PRIMER_CANDIDATE_MAX_AGE_MS, primerOccurrenceKey, primerOccurrenceUtcDay, updatePrimerCandidateEmbedding, getPrimerCandidatesByIds, getPrimerCandidatesForPromotion, countPrimerCandidatesForProject, getActivePrimers, createPrimer, updatePrimerSupport, updatePrimerAnswer, GLOBAL_USER_PROFILE_PROJECT_PATH, getProjectState, bumpProjectMemoryEpoch, bumpProjectUserProfileVersion, saveSourceContent, replaceSourceContent, getSourceContents, CTX_REDUCE_KEEP, estimateImageTokensFromDataUrl, normalizeTodoStateJson, buildSyntheticTodoPart, computeSyntheticCallId, isSyntheticTodoPart, tailHygieneStructuralSignature, sameTailHygieneStructuralSignature, refreshTailHygieneBaseline, effectiveTailHygiene, assertTailHygieneContentUnchanged, CHANNEL1_SENTINEL, CHANNEL1_FLOOR_TOKENS, toolOutputTokens, decideChannel1, evaluateChannel2, buildChannel2Reminder, buildChannel1Reminder, estimateEmergencyDropReclaimTokens, planEmergencyDrop, AGE_RECLAIM_MIN_TOKENS, getOldestActiveUnprotectedToolTags, getActiveToolTagsForAgeReclaim, getTriggerTagTokenUpperBound, getActiveTagTokenTotalsByMessage, tagTokenCountIsNull, backfillTagTokenCounts, insertTag, updateTagStatus, updateTagDropMode, updateCavemanDepth, updateTagMessageId, deleteTagsByMessageId, getMaxTagNumberBySession, getTagNumberByMessageId, deriveTagLoadFloor, getTagsBySession, getActiveTagsBySession, getTailHygieneTags, getDroppedTagsBySession, getTagsByNumbers, getMaxDroppedTagNumber, getToolTagNumberByOwner, getNullOwnerToolTag, adoptNullOwnerToolTag, getCandidateToolOwners, pickNearestPriorOwner, createChildSessionWithFence, detectOverflow, promptSyncWithValidatedOutputRetry, normalizeSDKResponse, promptSurfaceHashMaterial, createPromptSurfaceRuntime, createPromptSurfaceGuidanceEpochCache, extractLatestAssistantText, hasLengthCappedOutput, setKeepSubagents, shouldKeepSubagents, recordChildInvocation, COMPARTMENT_AGENT_SYSTEM_PROMPT, HISTORIAN_EDITOR_SYSTEM_PROMPT, COMPARTMENT_STRUCTURAL_SYSTEM_PROMPT, Priority, AdmissionClass, StaleRouteHandleError, SocketClosedError, SocketTimeoutError, SubcClient, isConsumerReconnectTransient, connectionFileExists, getCompartmentEvents, loadCompartmentChunkEmbeddingsForSearch, cosineSimilarity, SYNAPSE_DEFAULT_MODEL, SynapseEmbeddingProvider, computeNormalizedHash, saveCommitEmbedding, loadProjectCommitEmbeddings, loadUnembeddedCommits, countEmbeddedCommits, upsertCommits, getLatestIndexedCommitTimeMs, enforceProjectCap, GIT_SWEEP_LEASE_RENEWAL_MS, acquireGitSweepLease, renewGitSweepLease, markGitSweepSuccessAndRelease, parkGitSweepNonIndexable, releaseGitSweepLease, saveEmbeddingIfHashMatches, getProjectEmbeddings, peekProjectEmbeddings, invalidateProject, invalidateMemory, markProjectLoadUntrusted, contentSha256, sweepStaleEmbeddingIdentitiesForProject, registerProjectEmbedding, registerProjectShadowEmbedding, getShadowEmbeddingMeasurementCohort, getPrimaryEmbeddingMeasurementCohort, embedShadowTextForProject, enqueueShadowEmbeddingItems, registerProjectInObservationMode, getProjectEmbeddingSnapshot, embedTextForProject, embedBatchForProject, embedItemsForProject, embedUnembeddedMemoriesForProject, drainCommitBacklogForProject, embedSessionCompartmentChunks, getEmbeddingCoverageStatus, isEmbeddingEnabled, embedText, ensureMemoryEmbeddings, computeCueContentHash, hasMuralCueColumns, getMuralCueState, memoryNeedsCue, setMuralCue, recordMuralCueRejection, hasMemoryShareableColumn, hasMemoryClassifiedAtColumn, getUnclassifiedMemoryIds, ModuleMemoryAuthorityError, insertMemory, insertMemoryIdempotent, getMemoryByHash, getMemoriesByProject, buildWorkspaceMemorySqlFilter, getMemoriesByProjects, getMaxMemoryIdForProjects, readNewMemoriesForM1Union, getMemoryById, getMemoriesByIds, updateMemorySeenCount, updateMemoryRetrievalCount, setMemoryClassification, supersededMemory, mergeMemoryStats, archiveMemory, getMemoryCountsByStatus, sanitizeFtsQuery, searchMemoriesFTS, searchMemoriesFTSUnion, recordMemoryMapping, recordMemoryVerifications, getUnmappedMemoryIds, clearMemoryVerifications, getMemoryVerifications, resolveGitTopLevel, readGitHead, readGitChangedFilesSince, readGitFileChangeTimesSince, verificationFileExists, normalizeVerificationFiles, USER_MEMORY_CANDIDATE_TTL_MS, insertUserMemoryCandidates, getUserMemoryCandidates, deleteUserMemoryCandidates, pruneExpiredUserMemoryCandidates, insertUserMemory, getActiveUserMemories, updateUserMemoryContent, dismissUserMemory, MARKER_SUMMARY_TEXT, applyDeferredCompactionMarker, removeCompactionMarkerForSession, checkCompactionMarkerConsistency, getMural, resolveMuralWire, BoundedSessionMap, extractM0Block, formatDate, injectTemporalMarkers, clearInjectionCache, getVisibleMemoryIds, prepareCompartmentInjection, renderCompartmentInjection, mustMaterialize, trimMemoriesToBudgetV2, renderMemoryBlockV2, injectM0M1, onNoteTrigger, peekNoteNudgeText, markNoteNudgeDelivered, clearNoteNudgeTriggerAndCooldown, resetNoteNudgeCooldownOnly, clearNoteNudgeTriggerOnly, RECOVERY_NO_HEAD_LIMIT, resolveOpenCodeProtectedTailBoundary, resolveWrapupProtectedTailBoundary, getRawHistoryEligibility, hasRunnableCompartmentWindow, recordHighPressureNoEligibleHead, runCompartmentAgent, snapRangeToCompartments, LKG_SNAPSHOT_ARRAY, LKG_SNAPSHOT_OBJECT, LKG_SNAPSHOT_KEY, LKG_SNAPSHOT_STRING, LKG_SNAPSHOT_NUMBER, LKG_SNAPSHOT_BOOLEAN, LKG_SNAPSHOT_NULL, LKG_SNAPSHOT_UNDEFINED, incrementalLkgContentDigests, lkgContentDigest, captureSlot, getSlot, dropSlot, noteEntry, getActiveCompartmentRun, markActiveCompartmentRunPublished, registerActiveCompartmentRun, startCompartmentAgent, isRecompFailure, isRecompSkip, isRecompComplete, extractRecompReason, contextualizeUpgradeReason, setRecompStarting, setRecompNote, setRecompTerminal, runManagedRecomp, runManagedUpgrade };
|
|
46470
|
+
export { withContentLanguageDirective, buildPrimaryLanguageDirective, cortexKitUserConfigBasePath, cortexKitProjectConfigBasePath, resolveLegacyConfigSources, resolveLegacyConfigSourcesForHarness, migrateMagicContextConfigLocations, exports_external, DEFAULT_PROTECTED_TAGS, parseCron, nextOccurrence, nextDueAtMs, promptSurfaceConfigIdentity, resolvePromptSurface, resolveModelConfigOrDefault, DEFAULT_EXECUTE_THRESHOLD_PERCENTAGE, DEFAULT_HISTORIAN_TIMEOUT_MS, DEFAULT_LOCAL_EMBEDDING_MODEL, PER_HARNESS_MIGRATION_INVENTORY, MagicContextConfigSchema, getOpenCodeDbPath, removeMcOwnedCompactionMarkers, isFailClosedBlockingError, shouldBypassFailClosedBlock, resolveAgentNameFromMessages, createFailClosedController, recordHookInitFailure, clearHookInitFailure, getLastHookInitFailure, ProjectIdentityError, resolveProjectIdentityStrict, takeDubiousOwnershipProjectIdentityWarning, resolveProjectIdentity, resolveProjectIdentityForSession, normalizeStoredProjectPath, storedPathBelongsToIdentity, isLinkedGitWorktree, recordSessionProjectIdentity, beginBootQuietPeriod, bootQuietRemainingMs, scheduleAfterBootQuiet, rpcPortDir, rpcPortFilePath, isPidAlive, parseRpcPortFile, registerModuleNoteEvaluationBridge, getModuleNoteEvaluationBridge, getContextStoreUuid, ensureContextStoreUuid, getAuthorityManagedMarker, reconcileAuthorityProject, checksumAuthoritySeedRows, prepareAuthority, drainAuthority, getMirrorCursor, applyMirroredNoteCompileFields, applyMirrorPage, pullMemoryMirrorOnce, V2_MEMORY_CATEGORIES, CATEGORY_PRIORITY, resolveWorkspaceShareCategories, resolveWorkspaceIdentitySet, expandWorkspaceIdentitySetWithAliases, resolveStoredPathWorkspaceIdentity, storedPathBelongsToWorkspace, sourceNameForMemory, computeWorkspaceEpochFingerprint, textMentionsRecentCommit, hasMeaningfulUserText, extractTexts, extractToolCallSummaries, preloadTokenizer, estimateTokens, normalizeText, getCurrentToolSetHash, recordToolDefinition, getMeasuredToolDefinitionTokens, getSchemaFenceRejection, getMigrationOnOpenRefusal, LATEST_SUPPORTED_VERSION, getDatabasePath, getPersistedSchemaVersion, setSqlitePragmaConfig, runSqliteOptimize, openDatabase, openDatabaseAsync, isDatabasePersisted, getDatabasePersistenceError, COMPARTMENT_LEASE_RENEWAL_MS, acquireCompartmentLease, renewCompartmentLease, releaseCompartmentLease, getCompartments, getLastCompartmentEndMessage, getLastCompartmentEndMessageId, clearRecompStaging, isRawCompactionSummaryInfo, extractInMemoryMessageViews, buildInMemoryTailRawMessages, isRecord, estimateTrueRawMessageTokens, invalidateTrueRawTokenCache, stripPersistedAssistantText, byteSize, stripTagPrefix, prependTag, isThinkingPart, isTextPart, isToolPartWithOutput, isFilePart, buildFileSourceContent, isEditTool, partHasCompletedResult, extractToolCallObservation, ToolMutationBatch, createToolDropTarget, setRawMessageProvider, cleanUserText, withRawSessionMessageCache, readRawSessionMessages, primeTailRawMessageCache, primeInMemoryTailRawMessageCache, readRawSessionMessageOrdinalPage, getRawSessionStoredMessageCount, readRawSessionMessagePartsById, readRawSessionMessageOrdinalById, readRawSessionMessageById, readSessionChunk, getMessageIndexSourceIdentity, isMessageIndexSourceCurrent, getLastIndexedOrdinal, getIndexedMessageCorpusSize, getMessageIndexReconciliationStartOrdinal, isMessageIndexReconciledThrough, deleteIndexedMessage, clearIndexedMessages, indexSingleMessage, indexMessagesAfterOrdinal, sweepOrphanedOpenCodeMessageIndexes, recordEmbeddingMeasurement, getMaxM0MutationId, queueMemoryMutation, getMemoryMutationsForRenderByProjects, getMaxMemoryMutationIdForProjects, MAX_EXECUTE_THRESHOLD, escalationBands, isEmergencyRecoveryArmed, isProviderOverflowReconfirmed, getEmergencyRecoveryArmedAt, loadPersistedUsage, loadProtectedTailMeta, resetProtectedTailNoEligibleHead, getWrapupInProgressState, acquireWrapupInProgress, updateWrapupInProgress, releaseWrapupInProgress, resolveCompactionModeRecord, getCompactionModeRecord, setCompactionModeRecord, getPersistedReasoningWatermark, setPersistedReasoningWatermark, clearPersistedReasoningWatermark, getEmergencyInputSample, setEmergencyDropSample, clearEmergencyDropSample, getLastNudgeUndropped, setLastNudgeUndropped, getChannel1NudgeState, setChannel1NudgeState, resetLastNudgeCycle, resetLastNudgeCycleIfTailShrank, getChannel2NudgeState, getChannel2NudgeClaim, setChannel2NudgeState, casChannel2NudgeState, claimChannel2NudgeState, casChannel2NudgeClaim, getPersistedNoteNudge, getNoteNudgeAnchors, getAutoSearchHintDecisions, appendAutoSearchHintDecision, pruneNoteNudgeAnchors, pruneAutoSearchHintDecisions, removeNoteNudgeAnchorByMessageId, removeAutoSearchHintDecisionByMessageId, getPersistedTodoPermissionDenied, setPersistedTodoPermissionDenied, getPersistedTodoSyntheticAnchor, setPersistedTodoSyntheticAnchor, clearPersistedTodoSyntheticAnchor, setNoteLastReadAt, getHistorianFailureState, clearHistorianFailureState, getOverflowState, recordOverflowDetected, recordDetectedContextLimit, clearEmergencyRecovery, clearDetectedContextLimit, getPersistedCompactionMarkerState, setPersistedCompactionMarkerState, getStrippedPlaceholderIds, applyStrippedPlaceholderDelta, removeStrippedPlaceholderId, getMergedReasoningStrippedIds, addMergedReasoningStrippedIds, getTrailingBlankDecisions, addTrailingBlankDecisions, getStaleReduceStrippedIds, addStaleReduceStrippedIds, getProcessedImageStrippedIds, addProcessedImageStrippedIds, getPendingCompactionMarkerState, clearPendingCompactionMarkerStateIf, peekDeferredExecutePending, setDeferredExecutePendingIfAbsent, clearDeferredExecutePendingIfMatches, getSessionsWithPendingMarker, setSessionWorkMetrics, getNotes, addNote, getSessionNotes, getPendingSmartNotes, getReadySmartNotes, updateNote, dismissNote, markNoteReady, markNoteChecked, queuePendingOp, getPendingOps, clearPendingOps, removePendingOp, PRIMER_CANDIDATE_TTL_MS, PRIMER_CANDIDATE_MAX_AGE_MS, primerOccurrenceKey, primerOccurrenceUtcDay, updatePrimerCandidateEmbedding, getPrimerCandidatesByIds, getPrimerCandidatesForPromotion, countPrimerCandidatesForProject, getActivePrimers, createPrimer, updatePrimerSupport, updatePrimerAnswer, GLOBAL_USER_PROFILE_PROJECT_PATH, getProjectState, bumpProjectMemoryEpoch, bumpProjectUserProfileVersion, saveSourceContent, replaceSourceContent, getSourceContents, CTX_REDUCE_KEEP, estimateImageTokensFromDataUrl, normalizeTodoStateJson, buildSyntheticTodoPart, computeSyntheticCallId, isSyntheticTodoPart, countRealUserMessages, tailHygieneStructuralSignature, sameTailHygieneStructuralSignature, refreshTailHygieneBaseline, effectiveTailHygiene, assertTailHygieneContentUnchanged, CHANNEL1_SENTINEL, CHANNEL1_FLOOR_TOKENS, toolOutputTokens, decideChannel1, evaluateChannel2, buildChannel2Reminder, shouldUseStickyChannel1Reminder, buildChannel1Reminder, estimateEmergencyDropReclaimTokens, planEmergencyDrop, AGE_RECLAIM_MIN_TOKENS, getOldestActiveUnprotectedToolTags, getActiveToolTagsForAgeReclaim, getTriggerTagTokenUpperBound, getActiveTagTokenTotalsByMessage, tagTokenCountIsNull, backfillTagTokenCounts, insertTag, updateTagStatus, updateTagDropMode, updateCavemanDepth, updateTagMessageId, deleteTagsByMessageId, getMaxTagNumberBySession, getTagNumberByMessageId, deriveTagLoadFloor, getTagsBySession, getActiveTagsBySession, getTailHygieneTags, getDroppedTagsBySession, getTagsByNumbers, getMaxDroppedTagNumber, getToolTagNumberByOwner, getNullOwnerToolTag, adoptNullOwnerToolTag, getCandidateToolOwners, pickNearestPriorOwner, createChildSessionWithFence, detectOverflow, resolveFallbackChain, modelBodyField, promptSyncWithValidatedOutputRetry, normalizeSDKResponse, promptSurfaceHashMaterial, createPromptSurfaceRuntime, createPromptSurfaceGuidanceEpochCache, extractLatestAssistantText, hasLengthCappedOutput, setKeepSubagents, shouldKeepSubagents, recordChildInvocation, COMPARTMENT_AGENT_SYSTEM_PROMPT, HISTORIAN_EDITOR_SYSTEM_PROMPT, COMPARTMENT_STRUCTURAL_SYSTEM_PROMPT, Priority, AdmissionClass, StaleRouteHandleError, SocketClosedError, SocketTimeoutError, SubcClient, isConsumerReconnectTransient, connectionFileExists, getCompartmentEvents, loadCompartmentChunkEmbeddingsForSearch, cosineSimilarity, SYNAPSE_DEFAULT_MODEL, SynapseEmbeddingProvider, computeNormalizedHash, saveCommitEmbedding, loadProjectCommitEmbeddings, loadUnembeddedCommits, countEmbeddedCommits, upsertCommits, getLatestIndexedCommitTimeMs, enforceProjectCap, GIT_SWEEP_LEASE_RENEWAL_MS, acquireGitSweepLease, renewGitSweepLease, markGitSweepSuccessAndRelease, parkGitSweepNonIndexable, releaseGitSweepLease, saveEmbeddingIfHashMatches, getProjectEmbeddings, peekProjectEmbeddings, invalidateProject, invalidateMemory, markProjectLoadUntrusted, contentSha256, sweepStaleEmbeddingIdentitiesForProject, registerProjectEmbedding, registerProjectShadowEmbedding, getShadowEmbeddingMeasurementCohort, getPrimaryEmbeddingMeasurementCohort, embedShadowTextForProject, enqueueShadowEmbeddingItems, registerProjectInObservationMode, getProjectEmbeddingSnapshot, embedTextForProject, embedBatchForProject, embedItemsForProject, embedUnembeddedMemoriesForProject, drainCommitBacklogForProject, embedSessionCompartmentChunks, getEmbeddingCoverageStatus, isEmbeddingEnabled, embedText, ensureMemoryEmbeddings, computeCueContentHash, hasMuralCueColumns, getMuralCueState, memoryNeedsCue, setMuralCue, recordMuralCueRejection, hasMemoryShareableColumn, hasMemoryClassifiedAtColumn, getUnclassifiedMemoryIds, ModuleMemoryAuthorityError, insertMemory, insertMemoryIdempotent, getMemoryByHash, getMemoriesByProject, buildWorkspaceMemorySqlFilter, getMemoriesByProjects, getMaxMemoryIdForProjects, readNewMemoriesForM1Union, getMemoryById, getMemoriesByIds, updateMemorySeenCount, updateMemoryRetrievalCount, setMemoryClassification, supersededMemory, mergeMemoryStats, archiveMemory, getMemoryCountsByStatus, sanitizeFtsQuery, searchMemoriesFTS, searchMemoriesFTSUnion, recordMemoryMapping, recordMemoryVerifications, getUnmappedMemoryIds, clearMemoryVerifications, getMemoryVerifications, resolveGitTopLevel, readGitHead, readGitChangedFilesSince, readGitFileChangeTimesSince, verificationFileExists, normalizeVerificationFiles, USER_MEMORY_CANDIDATE_TTL_MS, insertUserMemoryCandidates, getUserMemoryCandidates, deleteUserMemoryCandidates, pruneExpiredUserMemoryCandidates, insertUserMemory, getActiveUserMemories, updateUserMemoryContent, dismissUserMemory, getMural, BoundedSessionMap, registerLkgPersistence, LKG_SNAPSHOT_ARRAY, LKG_SNAPSHOT_OBJECT, LKG_SNAPSHOT_KEY, LKG_SNAPSHOT_STRING, LKG_SNAPSHOT_NUMBER, LKG_SNAPSHOT_BOOLEAN, LKG_SNAPSHOT_NULL, LKG_SNAPSHOT_UNDEFINED, incrementalLkgContentDigests, lkgContentDigest, captureSlot, getSlot, dropSlot, noteEntry, onNoteTrigger, peekNoteNudgeText, markNoteNudgeDelivered, clearNoteNudgeTriggerAndCooldown, resetNoteNudgeCooldownOnly, clearNoteNudgeTriggerOnly, extractM0Block, resolveMuralWire, MARKER_SUMMARY_TEXT, applyDeferredCompactionMarker, removeCompactionMarkerForSession, checkCompactionMarkerConsistency, formatDate, injectTemporalMarkers, clearInjectionCache, getVisibleMemoryIds, prepareCompartmentInjection, renderCompartmentInjection, mustMaterialize, trimMemoriesToBudgetV2, renderMemoryBlockV2, injectM0M1, RECOVERY_NO_HEAD_LIMIT, resolveOpenCodeProtectedTailBoundary, resolveWrapupProtectedTailBoundary, getRawHistoryEligibility, hasRunnableCompartmentWindow, recordHighPressureNoEligibleHead, runCompartmentAgent, snapRangeToCompartments, getActiveCompartmentRun, markActiveCompartmentRunPublished, registerActiveCompartmentRun, startCompartmentAgent, isRecompFailure, isRecompSkip, isRecompComplete, extractRecompReason, contextualizeUpgradeReason, setRecompStarting, setRecompNote, setRecompTerminal, runManagedRecomp, runManagedUpgrade };
|