@cortexkit/opencode-magic-context 0.36.1 → 0.37.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/dist/config/index.d.ts.map +1 -1
- package/dist/config/project-security.d.ts +2 -1
- package/dist/config/project-security.d.ts.map +1 -1
- package/dist/config/schema/magic-context.d.ts +10 -0
- package/dist/config/schema/magic-context.d.ts.map +1 -1
- package/dist/{conflict-warning-hook-mt0ttc4x.js → conflict-warning-hook-an4fxhwf.js} +3 -3
- package/dist/{derive-budgets-88mxk2w1.js → derive-budgets-0f8xpyw2.js} +3 -2
- package/dist/features/magic-context/context-authority.d.ts.map +1 -1
- package/dist/features/magic-context/dreamer/evaluate-smart-notes.d.ts.map +1 -1
- package/dist/features/magic-context/memory/embedding-openai.d.ts +3 -1
- package/dist/features/magic-context/memory/embedding-openai.d.ts.map +1 -1
- package/dist/features/magic-context/memory/project-identity.d.ts +6 -0
- package/dist/features/magic-context/memory/project-identity.d.ts.map +1 -1
- package/dist/features/magic-context/migrations.d.ts.map +1 -1
- package/dist/features/magic-context/overflow-detection.d.ts.map +1 -1
- package/dist/features/magic-context/smart-notes/runner.d.ts.map +1 -1
- package/dist/features/magic-context/smart-notes/wake-plane.d.ts +21 -0
- package/dist/features/magic-context/smart-notes/wake-plane.d.ts.map +1 -0
- package/dist/features/magic-context/storage-db.d.ts +13 -2
- package/dist/features/magic-context/storage-db.d.ts.map +1 -1
- package/dist/features/magic-context/storage-meta-persisted.d.ts +22 -0
- package/dist/features/magic-context/storage-meta-persisted.d.ts.map +1 -1
- package/dist/features/magic-context/storage-meta-session.d.ts.map +1 -1
- package/dist/features/magic-context/storage-meta-shared.d.ts.map +1 -1
- package/dist/features/magic-context/storage-primers.d.ts +11 -0
- package/dist/features/magic-context/storage-primers.d.ts.map +1 -1
- package/dist/features/magic-context/storage-schema-helpers.d.ts.map +1 -1
- package/dist/features/magic-context/user-memory/storage-user-memory.d.ts +7 -0
- package/dist/features/magic-context/user-memory/storage-user-memory.d.ts.map +1 -1
- package/dist/features/magic-context/window-report-ledger.d.ts +70 -0
- package/dist/features/magic-context/window-report-ledger.d.ts.map +1 -0
- package/dist/hooks/magic-context/command-handler.d.ts.map +1 -1
- package/dist/hooks/magic-context/event-handler.d.ts.map +1 -1
- package/dist/hooks/magic-context/event-resolvers.d.ts +4 -0
- package/dist/hooks/magic-context/event-resolvers.d.ts.map +1 -1
- package/dist/hooks/magic-context/execute-status.d.ts +2 -1
- package/dist/hooks/magic-context/execute-status.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.map +1 -1
- package/dist/hooks/magic-context/lkg-replay.d.ts.map +1 -1
- package/dist/hooks/magic-context/lkg-slot.d.ts +20 -0
- package/dist/hooks/magic-context/lkg-slot.d.ts.map +1 -1
- package/dist/hooks/magic-context/module-state-sync.d.ts +8 -0
- package/dist/hooks/magic-context/module-state-sync.d.ts.map +1 -1
- package/dist/hooks/magic-context/module-transport.d.ts.map +1 -1
- package/dist/hooks/magic-context/module-wire.d.ts +6 -1
- package/dist/hooks/magic-context/module-wire.d.ts.map +1 -1
- package/dist/hooks/magic-context/rust-mode-transform.d.ts +17 -0
- package/dist/hooks/magic-context/rust-mode-transform.d.ts.map +1 -1
- package/dist/hooks/magic-context/strip-content.d.ts +25 -0
- package/dist/hooks/magic-context/strip-content.d.ts.map +1 -1
- package/dist/hooks/magic-context/system-prompt-hash.d.ts.map +1 -1
- package/dist/hooks/magic-context/transform-postprocess-phase.d.ts +11 -3
- package/dist/hooks/magic-context/transform-postprocess-phase.d.ts.map +1 -1
- package/dist/hooks/magic-context/transform.d.ts +10 -0
- 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-1skzp4dc.js → index-0ze9p983.js} +572 -92
- package/dist/{index-nsx2n9eg.js → index-4cz5nfxf.js} +3 -3
- package/dist/{index-f1tnb3vm.js → index-8pqfcghm.js} +21 -9
- package/dist/{index-zp6x6s6a.js → index-cae89eas.js} +25 -6
- package/dist/index-cgyfn1s2.js +53 -0
- package/dist/{index-3zqcdwqr.js → index-crke4z5j.js} +7 -4
- package/dist/{index-tsgs7td8.js → index-pck9vadr.js} +1 -1
- package/dist/index-q0t189ay.js +741 -0
- package/dist/{index-3tnkymva.js → index-sw8gnq34.js} +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1172 -287
- package/dist/plugin/hooks/create-session-hooks.d.ts +3 -0
- package/dist/plugin/hooks/create-session-hooks.d.ts.map +1 -1
- package/dist/plugin/rpc-handlers.d.ts.map +1 -1
- package/dist/{recomp-orchestrator-a0g9b52q.js → recomp-orchestrator-c3ff16k7.js} +7 -6
- package/dist/{safe-notification-target-c11fdda2.js → safe-notification-target-b693f9x3.js} +2 -2
- package/dist/{send-session-notification-bgtf4853.js → send-session-notification-dxske5zm.js} +3 -3
- package/dist/shared/conflict-detector.d.ts +63 -0
- package/dist/shared/conflict-detector.d.ts.map +1 -1
- package/dist/shared/harness-provider-map.d.ts +8 -0
- package/dist/shared/harness-provider-map.d.ts.map +1 -1
- package/dist/shared/logger.d.ts +8 -0
- package/dist/shared/logger.d.ts.map +1 -1
- package/dist/shared/models-dev-cache.d.ts +5 -0
- package/dist/shared/models-dev-cache.d.ts.map +1 -1
- package/dist/shared/prompt-surface-runtime.d.ts.map +1 -1
- package/dist/shared/prompt-surface.d.ts +2 -0
- package/dist/shared/prompt-surface.d.ts.map +1 -1
- package/dist/shared/rpc-client.d.ts.map +1 -1
- package/dist/shared/rpc-types.d.ts +14 -0
- package/dist/shared/rpc-types.d.ts.map +1 -1
- package/dist/shared/rpc-utils.d.ts +19 -9
- package/dist/shared/rpc-utils.d.ts.map +1 -1
- package/dist/shared/window-geometry.d.ts +89 -0
- package/dist/shared/window-geometry.d.ts.map +1 -0
- package/dist/{storage-meta-session-df9tstzr.js → storage-meta-session-mk4gsnke.js} +4 -3
- package/dist/tools/ctx-memory/tools.d.ts.map +1 -1
- package/dist/tools/ctx-note/tools.d.ts.map +1 -1
- package/dist/tui/data/context-db.d.ts.map +1 -1
- package/dist/tui-compiled/data/context-db.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/config/index.ts +2 -0
- package/src/config/latch-permanence-guard.test.ts +218 -0
- package/src/config/project-security.ts +10 -1
- package/src/config/schema/magic-context.ts +10 -0
- package/src/shared/__fixtures__/window-overlay.v1.json +337 -0
- package/src/shared/conflict-detector.test.ts +176 -1
- package/src/shared/conflict-detector.ts +126 -3
- package/src/shared/harness-provider-map.test.ts +20 -0
- package/src/shared/harness-provider-map.ts +19 -0
- package/src/shared/logger.test.ts +119 -0
- package/src/shared/logger.ts +33 -15
- package/src/shared/models-dev-cache.test.ts +17 -0
- package/src/shared/models-dev-cache.ts +58 -6
- package/src/shared/prompt-surface-runtime.ts +5 -3
- package/src/shared/prompt-surface.test.ts +38 -0
- package/src/shared/prompt-surface.ts +15 -2
- package/src/shared/rpc-client.ts +4 -2
- package/src/shared/rpc-types.ts +14 -0
- package/src/shared/rpc-utils.test.ts +137 -13
- package/src/shared/rpc-utils.ts +144 -31
- package/src/shared/window-geometry.test.ts +309 -0
- package/src/shared/window-geometry.ts +629 -0
- package/src/tui/data/context-db.ts +5 -0
- package/src/tui/index.tsx +22 -0
- package/src/tui-compiled/data/context-db.ts +5 -0
- package/src/tui-compiled/index.tsx +319 -255
- package/dist/index-wgvxkqpx.js +0 -342
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import {
|
|
2
2
|
deriveTriggerBudget,
|
|
3
3
|
modelSupportsVision,
|
|
4
|
-
piModelRefToCanonical,
|
|
5
4
|
shouldEnforcePrivateStoragePermissions
|
|
6
|
-
} from "./index-
|
|
5
|
+
} from "./index-q0t189ay.js";
|
|
7
6
|
import {
|
|
8
7
|
parseProviderModel
|
|
9
8
|
} from "./index-td9depx5.js";
|
|
@@ -11,7 +10,7 @@ import {
|
|
|
11
10
|
describeError,
|
|
12
11
|
getErrorMessage,
|
|
13
12
|
sendIgnoredMessage
|
|
14
|
-
} from "./index-
|
|
13
|
+
} from "./index-4cz5nfxf.js";
|
|
15
14
|
import {
|
|
16
15
|
buildToolArcs,
|
|
17
16
|
buildTrueRawTokenIndex,
|
|
@@ -35,13 +34,17 @@ import {
|
|
|
35
34
|
readSessionChunk,
|
|
36
35
|
stableStringify,
|
|
37
36
|
updateSessionMeta
|
|
38
|
-
} from "./index-
|
|
37
|
+
} from "./index-crke4z5j.js";
|
|
38
|
+
import {
|
|
39
|
+
modelRefLookupOrder,
|
|
40
|
+
piModelRefToCanonical
|
|
41
|
+
} from "./index-cgyfn1s2.js";
|
|
39
42
|
import {
|
|
40
43
|
Database,
|
|
41
44
|
closeQuietly,
|
|
42
45
|
getMessageTimesFromOpenCodeDb,
|
|
43
46
|
withPrivilegedWriter
|
|
44
|
-
} from "./index-
|
|
47
|
+
} from "./index-sw8gnq34.js";
|
|
45
48
|
import {
|
|
46
49
|
detectConfigFile
|
|
47
50
|
} from "./index-8mtsfhyg.js";
|
|
@@ -51,7 +54,7 @@ import {
|
|
|
51
54
|
import {
|
|
52
55
|
log,
|
|
53
56
|
sessionLog
|
|
54
|
-
} from "./index-
|
|
57
|
+
} from "./index-8pqfcghm.js";
|
|
55
58
|
import {
|
|
56
59
|
ensureCortexKitArtifactGitignore,
|
|
57
60
|
getDataDir,
|
|
@@ -602,20 +605,24 @@ function rpcPortFilePath(storageDir, directory, pid = process.pid, instanceId) {
|
|
|
602
605
|
}
|
|
603
606
|
function isPidAlive(pid) {
|
|
604
607
|
if (!Number.isInteger(pid) || pid <= 0)
|
|
605
|
-
return
|
|
608
|
+
return "dead";
|
|
609
|
+
if (rpcIdentityPlatform === "win32")
|
|
610
|
+
return readWindowsProcess(pid).state;
|
|
606
611
|
try {
|
|
607
|
-
|
|
608
|
-
return
|
|
609
|
-
} catch (
|
|
610
|
-
return
|
|
612
|
+
rpcIdentityProcessKill(pid, 0);
|
|
613
|
+
return "alive";
|
|
614
|
+
} catch (error) {
|
|
615
|
+
return error.code === "ESRCH" ? "dead" : "inconclusive";
|
|
611
616
|
}
|
|
612
617
|
}
|
|
613
618
|
var RPC_IDENTITY_SKEW_TOLERANCE_MS = 120000;
|
|
614
619
|
var LINUX_CLOCK_TICKS_PER_SECOND = 100;
|
|
615
620
|
var PS_PROBE_TIMEOUT_MS = 1000;
|
|
616
621
|
var OPEN_CODE_COMMAND_MARKERS = ["opencode", "node", "bun", "electron"];
|
|
622
|
+
var TASKLIST_NO_TASKS_PATTERN = /^INFO:\s+No tasks are running which match the specified criteria\.?$/im;
|
|
617
623
|
var rpcIdentityReadFileSync = readFileSync;
|
|
618
624
|
var rpcIdentityExecFileSync = execFileSync;
|
|
625
|
+
var rpcIdentityProcessKill = process.kill;
|
|
619
626
|
var rpcProcessListExecFileSync = execFileSync;
|
|
620
627
|
var rpcIdentityPlatform = process.platform;
|
|
621
628
|
var rpcIdentityNowMs = () => Date.now();
|
|
@@ -645,7 +652,8 @@ function readPsProcessStartTime(pid) {
|
|
|
645
652
|
try {
|
|
646
653
|
const output = rpcIdentityExecFileSync("ps", ["-p", String(pid), "-o", "lstart="], {
|
|
647
654
|
encoding: "utf8",
|
|
648
|
-
timeout: PS_PROBE_TIMEOUT_MS
|
|
655
|
+
timeout: PS_PROBE_TIMEOUT_MS,
|
|
656
|
+
stdio: ["ignore", "pipe", "pipe"]
|
|
649
657
|
});
|
|
650
658
|
const processStartTime = Date.parse(String(output).trim());
|
|
651
659
|
return Number.isFinite(processStartTime) ? processStartTime : null;
|
|
@@ -653,6 +661,70 @@ function readPsProcessStartTime(pid) {
|
|
|
653
661
|
return null;
|
|
654
662
|
}
|
|
655
663
|
}
|
|
664
|
+
function parseCsvLine(line) {
|
|
665
|
+
const fields = [];
|
|
666
|
+
let field = "";
|
|
667
|
+
let quoted = false;
|
|
668
|
+
for (let index = 0;index < line.length; index += 1) {
|
|
669
|
+
const character = line[index];
|
|
670
|
+
if (character === '"') {
|
|
671
|
+
if (quoted && line[index + 1] === '"') {
|
|
672
|
+
field += '"';
|
|
673
|
+
index += 1;
|
|
674
|
+
} else {
|
|
675
|
+
quoted = !quoted;
|
|
676
|
+
}
|
|
677
|
+
} else if (character === "," && !quoted) {
|
|
678
|
+
fields.push(field);
|
|
679
|
+
field = "";
|
|
680
|
+
} else {
|
|
681
|
+
field += character;
|
|
682
|
+
}
|
|
683
|
+
}
|
|
684
|
+
if (quoted)
|
|
685
|
+
return null;
|
|
686
|
+
fields.push(field);
|
|
687
|
+
return fields;
|
|
688
|
+
}
|
|
689
|
+
function parseTasklistOutput(output) {
|
|
690
|
+
const entries = [];
|
|
691
|
+
let sawHeader = false;
|
|
692
|
+
for (const rawLine of output.split(/\r?\n/)) {
|
|
693
|
+
const line = rawLine.trim();
|
|
694
|
+
if (!line)
|
|
695
|
+
continue;
|
|
696
|
+
if (TASKLIST_NO_TASKS_PATTERN.test(line))
|
|
697
|
+
return [];
|
|
698
|
+
const fields = parseCsvLine(line);
|
|
699
|
+
if (!fields)
|
|
700
|
+
continue;
|
|
701
|
+
if (fields[1]?.trim().toLowerCase() === "pid") {
|
|
702
|
+
sawHeader = true;
|
|
703
|
+
continue;
|
|
704
|
+
}
|
|
705
|
+
const pid = Number(fields[1]);
|
|
706
|
+
if (!Number.isInteger(pid) || pid <= 0 || !fields[0])
|
|
707
|
+
continue;
|
|
708
|
+
entries.push({ pid, command: fields[0] });
|
|
709
|
+
}
|
|
710
|
+
return entries.length > 0 || sawHeader ? entries : null;
|
|
711
|
+
}
|
|
712
|
+
function readWindowsProcess(pid) {
|
|
713
|
+
try {
|
|
714
|
+
const output = rpcIdentityExecFileSync("tasklist", ["/FO", "CSV", "/FI", `PID eq ${pid}`], {
|
|
715
|
+
encoding: "utf8",
|
|
716
|
+
timeout: PS_PROBE_TIMEOUT_MS,
|
|
717
|
+
stdio: ["ignore", "pipe", "pipe"]
|
|
718
|
+
});
|
|
719
|
+
const entries = parseTasklistOutput(String(output));
|
|
720
|
+
if (entries === null)
|
|
721
|
+
return { state: "inconclusive" };
|
|
722
|
+
const process2 = entries.find((entry) => entry.pid === pid);
|
|
723
|
+
return process2 ? { state: "alive", command: process2.command } : { state: "dead" };
|
|
724
|
+
} catch {
|
|
725
|
+
return { state: "inconclusive" };
|
|
726
|
+
}
|
|
727
|
+
}
|
|
656
728
|
function readLinuxProcessCommand(pid) {
|
|
657
729
|
try {
|
|
658
730
|
return String(rpcIdentityReadFileSync(`/proc/${pid}/cmdline`, "utf8"));
|
|
@@ -664,7 +736,8 @@ function readPsProcessCommand(pid) {
|
|
|
664
736
|
try {
|
|
665
737
|
const output = rpcIdentityExecFileSync("ps", ["-p", String(pid), "-o", "command="], {
|
|
666
738
|
encoding: "utf8",
|
|
667
|
-
timeout: PS_PROBE_TIMEOUT_MS
|
|
739
|
+
timeout: PS_PROBE_TIMEOUT_MS,
|
|
740
|
+
stdio: ["ignore", "pipe", "pipe"]
|
|
668
741
|
});
|
|
669
742
|
return String(output);
|
|
670
743
|
} catch {
|
|
@@ -677,17 +750,17 @@ function commandLooksLikeOpenCode(command) {
|
|
|
677
750
|
}
|
|
678
751
|
function isPidIdentityPlausible(record) {
|
|
679
752
|
if (!Number.isInteger(record.pid) || record.pid <= 0)
|
|
680
|
-
return
|
|
753
|
+
return "implausible";
|
|
681
754
|
if (Number.isFinite(record.started_at) && record.started_at > 0) {
|
|
682
|
-
const processStartTime = rpcIdentityPlatform === "linux" ? readLinuxProcessStartTime(record.pid) : readPsProcessStartTime(record.pid);
|
|
755
|
+
const processStartTime = rpcIdentityPlatform === "linux" ? readLinuxProcessStartTime(record.pid) : rpcIdentityPlatform === "win32" ? null : readPsProcessStartTime(record.pid);
|
|
683
756
|
if (processStartTime === null)
|
|
684
|
-
return
|
|
685
|
-
return processStartTime <= record.started_at + RPC_IDENTITY_SKEW_TOLERANCE_MS;
|
|
757
|
+
return "inconclusive";
|
|
758
|
+
return processStartTime <= record.started_at + RPC_IDENTITY_SKEW_TOLERANCE_MS ? "plausible" : "implausible";
|
|
686
759
|
}
|
|
687
|
-
const command = rpcIdentityPlatform === "linux" ? readLinuxProcessCommand(record.pid) : readPsProcessCommand(record.pid);
|
|
760
|
+
const command = rpcIdentityPlatform === "linux" ? readLinuxProcessCommand(record.pid) : rpcIdentityPlatform === "win32" ? readWindowsProcess(record.pid).command ?? null : readPsProcessCommand(record.pid);
|
|
688
761
|
if (command === null)
|
|
689
|
-
return
|
|
690
|
-
return commandLooksLikeOpenCode(command);
|
|
762
|
+
return "inconclusive";
|
|
763
|
+
return commandLooksLikeOpenCode(command) ? "plausible" : "implausible";
|
|
691
764
|
}
|
|
692
765
|
function commandLooksLikePi(command) {
|
|
693
766
|
const normalized = command.trim().toLowerCase().replaceAll("\\", "/");
|
|
@@ -705,20 +778,39 @@ function commandLooksLikePi(command) {
|
|
|
705
778
|
function inspectLivePiProcesses() {
|
|
706
779
|
if (false) {}
|
|
707
780
|
try {
|
|
708
|
-
const
|
|
781
|
+
const isWindows = rpcIdentityPlatform === "win32";
|
|
782
|
+
const output = String(rpcProcessListExecFileSync(isWindows ? "tasklist" : "ps", isWindows ? ["/FO", "CSV"] : ["-axo", "pid=,command="], {
|
|
709
783
|
encoding: "utf8",
|
|
710
|
-
timeout: PS_PROBE_TIMEOUT_MS
|
|
784
|
+
timeout: PS_PROBE_TIMEOUT_MS,
|
|
785
|
+
stdio: ["ignore", "pipe", "pipe"]
|
|
711
786
|
}));
|
|
712
787
|
const pids = new Set;
|
|
713
|
-
|
|
714
|
-
const
|
|
715
|
-
if (
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
788
|
+
if (isWindows) {
|
|
789
|
+
const entries = parseTasklistOutput(output);
|
|
790
|
+
if (entries === null) {
|
|
791
|
+
return {
|
|
792
|
+
state: "unreadable",
|
|
793
|
+
processIds: [],
|
|
794
|
+
error: "tasklist output unavailable"
|
|
795
|
+
};
|
|
796
|
+
}
|
|
797
|
+
for (const entry of entries) {
|
|
798
|
+
if (entry.pid === process.pid)
|
|
799
|
+
continue;
|
|
800
|
+
if (commandLooksLikePi(entry.command))
|
|
801
|
+
pids.add(entry.pid);
|
|
802
|
+
}
|
|
803
|
+
} else {
|
|
804
|
+
for (const line of output.split(/\r?\n/)) {
|
|
805
|
+
const match = /^\s*(\d+)\s+(.+)$/.exec(line);
|
|
806
|
+
if (!match)
|
|
807
|
+
continue;
|
|
808
|
+
const pid = Number(match[1]);
|
|
809
|
+
if (!Number.isInteger(pid) || pid <= 0 || pid === process.pid)
|
|
810
|
+
continue;
|
|
811
|
+
if (commandLooksLikePi(match[2]))
|
|
812
|
+
pids.add(pid);
|
|
813
|
+
}
|
|
722
814
|
}
|
|
723
815
|
return { state: "known", processIds: [...pids].sort((left, right) => left - right) };
|
|
724
816
|
} catch (error) {
|
|
@@ -729,9 +821,6 @@ function inspectLivePiProcesses() {
|
|
|
729
821
|
};
|
|
730
822
|
}
|
|
731
823
|
}
|
|
732
|
-
function discoverLivePiProcessIds() {
|
|
733
|
-
return inspectLivePiProcesses().processIds;
|
|
734
|
-
}
|
|
735
824
|
function parseRpcPortFile(content, fallbackPid = 0) {
|
|
736
825
|
const trimmed = content.trim();
|
|
737
826
|
if (!trimmed)
|
|
@@ -1415,6 +1504,7 @@ function prepareMirrorPageStatements(db) {
|
|
|
1415
1504
|
return {
|
|
1416
1505
|
identityByModule: db.prepare("SELECT context_row_id FROM mirror_identity WHERE domain = ? AND module_project = ? AND module_row_id = ?"),
|
|
1417
1506
|
insertIdentity: db.prepare("INSERT OR IGNORE INTO mirror_identity(domain, module_project, module_row_id, context_row_id) VALUES (?, ?, ?, ?)"),
|
|
1507
|
+
deleteIdentityByContext: db.prepare("DELETE FROM mirror_identity WHERE domain = ? AND context_row_id = ?"),
|
|
1418
1508
|
deleteLiveMemory: db.prepare("DELETE FROM mirror_live_memory_rows WHERE module_project = ? AND module_row_id = ?"),
|
|
1419
1509
|
deletePendingReferencesForMemory: db.prepare("DELETE FROM mirror_pending_references WHERE domain = ? AND module_project = ? AND (module_row_id = ? OR target_module_row_id = ?)"),
|
|
1420
1510
|
deleteIdentity: db.prepare("DELETE FROM mirror_identity WHERE domain = ? AND module_project = ? AND module_row_id = ?"),
|
|
@@ -1466,7 +1556,7 @@ function prepareMirrorPageStatements(db) {
|
|
|
1466
1556
|
check_quarantined_until = ?, check_next_due_at = ?, check_compiled_at = ?, check_false_since_at = ?,
|
|
1467
1557
|
check_last_liveness_at = ?, last_checked_at = ?, check_status = ?, check_version = ?,
|
|
1468
1558
|
policy_version = ?, anchor_block_id = ?, anchor_ordinal = ?, created_at = ?, updated_at = ? WHERE id = ?`),
|
|
1469
|
-
upsertNoteRevision: db.prepare("INSERT INTO mirror_note_revisions(module_project, module_row_id, context_row_id, status_version) VALUES (?, ?, ?, ?)
|
|
1559
|
+
upsertNoteRevision: db.prepare("INSERT OR REPLACE INTO mirror_note_revisions(module_project, module_row_id, context_row_id, status_version) VALUES (?, ?, ?, ?)"),
|
|
1470
1560
|
translateMemoryReferences: db.prepare(`UPDATE memories
|
|
1471
1561
|
SET superseded_by_memory_id = (
|
|
1472
1562
|
SELECT target.context_row_id
|
|
@@ -1551,6 +1641,9 @@ function rememberIdentity(db, domain, moduleProject, moduleRowId, contextRowId,
|
|
|
1551
1641
|
const existing = mirrorIdentity(db, domain, moduleProject, moduleRowId, statements);
|
|
1552
1642
|
if (existing)
|
|
1553
1643
|
return;
|
|
1644
|
+
if (domain === "notes") {
|
|
1645
|
+
(statements?.deleteIdentityByContext ?? db.prepare("DELETE FROM mirror_identity WHERE domain = ? AND context_row_id = ?")).run(domain, contextRowId);
|
|
1646
|
+
}
|
|
1554
1647
|
(statements?.insertIdentity ?? db.prepare("INSERT OR IGNORE INTO mirror_identity(domain, module_project, module_row_id, context_row_id) VALUES (?, ?, ?, ?)")).run(domain, moduleProject, moduleRowId, contextRowId);
|
|
1555
1648
|
}
|
|
1556
1649
|
function contextMemoryId(db, domain, moduleProject, row, moduleRowId, statements) {
|
|
@@ -2133,6 +2226,8 @@ function healAllNullColumns(db) {
|
|
|
2133
2226
|
["stripped_placeholder_ids", ""],
|
|
2134
2227
|
["stale_reduce_stripped_ids", ""],
|
|
2135
2228
|
["processed_image_stripped_ids", ""],
|
|
2229
|
+
["merged_reasoning_stripped_ids", ""],
|
|
2230
|
+
["trailing_blank_decisions", ""],
|
|
2136
2231
|
["memory_block_cache", ""],
|
|
2137
2232
|
["memory_block_ids", ""],
|
|
2138
2233
|
["compaction_marker_state", ""],
|
|
@@ -2244,6 +2339,7 @@ import path from "node:path";
|
|
|
2244
2339
|
var GIT_TIMEOUT_MS = 5000;
|
|
2245
2340
|
var TRANSIENT_FAILURE_COOLDOWN_MS = 5 * 60 * 1000;
|
|
2246
2341
|
var identityCache = new Map;
|
|
2342
|
+
var linkedGitWorktreeCache = new Map;
|
|
2247
2343
|
var lastKnownGitIdentityCache = new Map;
|
|
2248
2344
|
var directoryFallbackCache = new Map;
|
|
2249
2345
|
var transientFailureCooldown = new Map;
|
|
@@ -2458,7 +2554,12 @@ function takeDubiousOwnershipProjectIdentityWarning(directory) {
|
|
|
2458
2554
|
return formatDubiousOwnershipWarning(canonical);
|
|
2459
2555
|
}
|
|
2460
2556
|
function canonicalUserHomeDirectory() {
|
|
2461
|
-
|
|
2557
|
+
const homeDirectory = userHomeDirectoryForIdentity();
|
|
2558
|
+
try {
|
|
2559
|
+
return realpathSync.native(homeDirectory);
|
|
2560
|
+
} catch {
|
|
2561
|
+
return homeDirectory;
|
|
2562
|
+
}
|
|
2462
2563
|
}
|
|
2463
2564
|
function isUserHomeDirectory(directory) {
|
|
2464
2565
|
try {
|
|
@@ -2592,6 +2693,27 @@ function normalizeStoredProjectPath(rawOrStored) {
|
|
|
2592
2693
|
function storedPathBelongsToIdentity(storedProjectPath, projectIdentity) {
|
|
2593
2694
|
return storedProjectPath === projectIdentity || normalizeStoredProjectPath(storedProjectPath) === projectIdentity;
|
|
2594
2695
|
}
|
|
2696
|
+
function isLinkedGitWorktree(directory) {
|
|
2697
|
+
const resolvedDirectory = path.resolve(directory);
|
|
2698
|
+
const cached = linkedGitWorktreeCache.get(resolvedDirectory);
|
|
2699
|
+
if (cached !== undefined)
|
|
2700
|
+
return cached;
|
|
2701
|
+
let linked = false;
|
|
2702
|
+
try {
|
|
2703
|
+
const output = execFileSyncForIdentity("git", ["rev-parse", "--path-format=absolute", "--git-dir", "--git-common-dir"], {
|
|
2704
|
+
cwd: resolvedDirectory,
|
|
2705
|
+
encoding: "utf8",
|
|
2706
|
+
timeout: GIT_TIMEOUT_MS,
|
|
2707
|
+
windowsHide: true
|
|
2708
|
+
});
|
|
2709
|
+
const [gitDir, commonDir] = String(output).split(/\r?\n/u).map((line) => line.trim()).filter(Boolean);
|
|
2710
|
+
linked = Boolean(gitDir && commonDir && path.resolve(gitDir) !== path.resolve(commonDir));
|
|
2711
|
+
} catch {
|
|
2712
|
+
linked = hasGitDir(resolvedDirectory);
|
|
2713
|
+
}
|
|
2714
|
+
linkedGitWorktreeCache.set(resolvedDirectory, linked);
|
|
2715
|
+
return linked;
|
|
2716
|
+
}
|
|
2595
2717
|
// src/features/magic-context/workspaces.ts
|
|
2596
2718
|
var VALID_SHARE_CATEGORIES = new Set(V2_MEMORY_CATEGORIES);
|
|
2597
2719
|
var DEFAULT_WORKSPACE_SHARE_CATEGORIES = ["CONSTRAINTS"];
|
|
@@ -3083,6 +3205,7 @@ var MIGRATIONS = [
|
|
|
3083
3205
|
status TEXT NOT NULL DEFAULT 'active',
|
|
3084
3206
|
promoted_at INTEGER NOT NULL,
|
|
3085
3207
|
source_candidate_ids TEXT DEFAULT '[]',
|
|
3208
|
+
source_candidate_provenance TEXT,
|
|
3086
3209
|
created_at INTEGER NOT NULL,
|
|
3087
3210
|
updated_at INTEGER NOT NULL
|
|
3088
3211
|
);
|
|
@@ -4109,6 +4232,7 @@ var MIGRATIONS = [
|
|
|
4109
4232
|
last_observed_at INTEGER,
|
|
4110
4233
|
answer_refreshed_at INTEGER,
|
|
4111
4234
|
source_candidate_ids TEXT NOT NULL DEFAULT '[]',
|
|
4235
|
+
source_candidate_provenance TEXT,
|
|
4112
4236
|
created_at INTEGER NOT NULL,
|
|
4113
4237
|
updated_at INTEGER NOT NULL
|
|
4114
4238
|
);
|
|
@@ -4918,6 +5042,37 @@ var MIGRATIONS = [
|
|
|
4918
5042
|
ensureColumn(db, "notes", "compiled_at", "INTEGER");
|
|
4919
5043
|
ensureColumn(db, "notes", "compile_status", "TEXT CHECK(compile_status IN ('compiled', 'plain', 'refused'))");
|
|
4920
5044
|
}
|
|
5045
|
+
},
|
|
5046
|
+
{
|
|
5047
|
+
version: 77,
|
|
5048
|
+
description: "persist scoped provenance for promoted user memories and primers",
|
|
5049
|
+
up(db) {
|
|
5050
|
+
if (tableExists2(db, "user_memories")) {
|
|
5051
|
+
ensureColumn(db, "user_memories", "source_candidate_provenance", "TEXT");
|
|
5052
|
+
}
|
|
5053
|
+
if (tableExists2(db, "primers")) {
|
|
5054
|
+
ensureColumn(db, "primers", "source_candidate_provenance", "TEXT");
|
|
5055
|
+
}
|
|
5056
|
+
}
|
|
5057
|
+
},
|
|
5058
|
+
{
|
|
5059
|
+
version: 78,
|
|
5060
|
+
description: "add migration_pending journal for crash-safe cross-harness session migration",
|
|
5061
|
+
up(db) {
|
|
5062
|
+
db.exec(`
|
|
5063
|
+
CREATE TABLE IF NOT EXISTS migration_pending (
|
|
5064
|
+
migration_key TEXT PRIMARY KEY,
|
|
5065
|
+
source_session_id TEXT NOT NULL,
|
|
5066
|
+
target_harness TEXT NOT NULL,
|
|
5067
|
+
pi_session_id TEXT NOT NULL,
|
|
5068
|
+
final_path TEXT NOT NULL,
|
|
5069
|
+
stage_path TEXT NOT NULL,
|
|
5070
|
+
content_sha256 TEXT NOT NULL,
|
|
5071
|
+
phase TEXT NOT NULL CHECK (phase IN ('staged', 'db_committed')),
|
|
5072
|
+
created_at INTEGER NOT NULL
|
|
5073
|
+
);
|
|
5074
|
+
`);
|
|
5075
|
+
}
|
|
4921
5076
|
}
|
|
4922
5077
|
];
|
|
4923
5078
|
var LATEST_MIGRATION_VERSION = MIGRATIONS.reduce((max, m) => Math.max(max, m.version), 0);
|
|
@@ -5385,7 +5540,7 @@ function getSchemaFenceRejection() {
|
|
|
5385
5540
|
function getMigrationOnOpenRefusal() {
|
|
5386
5541
|
return lastMigrationOnOpenRefusal;
|
|
5387
5542
|
}
|
|
5388
|
-
var LATEST_SUPPORTED_VERSION =
|
|
5543
|
+
var LATEST_SUPPORTED_VERSION = 78;
|
|
5389
5544
|
var PERMISSIONS_ENFORCEABLE = process.platform !== "win32";
|
|
5390
5545
|
var defaultStoragePermissionFs = { chmodSync, mkdirSync };
|
|
5391
5546
|
var storagePermissionFs = defaultStoragePermissionFs;
|
|
@@ -5585,6 +5740,7 @@ function inspectRpcServerDiscovery(storageDir) {
|
|
|
5585
5740
|
}
|
|
5586
5741
|
const pids = new Set;
|
|
5587
5742
|
const staleFiles = [];
|
|
5743
|
+
const inconclusivePids = new Set;
|
|
5588
5744
|
for (const portFile of portFiles) {
|
|
5589
5745
|
let raw;
|
|
5590
5746
|
try {
|
|
@@ -5604,10 +5760,15 @@ function inspectRpcServerDiscovery(storageDir) {
|
|
|
5604
5760
|
return junk;
|
|
5605
5761
|
continue;
|
|
5606
5762
|
}
|
|
5607
|
-
|
|
5763
|
+
const liveness = isPidAlive(record.pid);
|
|
5764
|
+
const identity = liveness === "dead" ? "implausible" : isPidIdentityPlausible(record);
|
|
5765
|
+
if (liveness === "alive" && identity === "plausible") {
|
|
5608
5766
|
pids.add(record.pid);
|
|
5609
|
-
else
|
|
5767
|
+
} else if (liveness === "dead" || identity === "implausible") {
|
|
5610
5768
|
staleFiles.push(portFile);
|
|
5769
|
+
} else {
|
|
5770
|
+
inconclusivePids.add(record.pid);
|
|
5771
|
+
}
|
|
5611
5772
|
}
|
|
5612
5773
|
for (const staleFile of staleFiles) {
|
|
5613
5774
|
try {
|
|
@@ -5620,8 +5781,29 @@ function inspectRpcServerDiscovery(storageDir) {
|
|
|
5620
5781
|
if (serverPids.length > 0) {
|
|
5621
5782
|
return { state: "live", serverPids, staleFiles };
|
|
5622
5783
|
}
|
|
5784
|
+
const uncertainPids = [...inconclusivePids].sort((a, b) => a - b);
|
|
5785
|
+
if (uncertainPids.length > 0) {
|
|
5786
|
+
return {
|
|
5787
|
+
state: "inconclusive",
|
|
5788
|
+
serverPids: [],
|
|
5789
|
+
staleFiles,
|
|
5790
|
+
inconclusivePids: uncertainPids
|
|
5791
|
+
};
|
|
5792
|
+
}
|
|
5623
5793
|
return { state: "stale", serverPids: [], staleFiles };
|
|
5624
5794
|
}
|
|
5795
|
+
function formatInconclusiveOpenCodeMigrationWarning(dbPath, pids) {
|
|
5796
|
+
return `[magic-context] storage warning: continuing migration for ${dbPath}; OpenCode server PID ${pids.join(", ")} was not confirmed because its liveness or identity check could not run. This commonly means an OS sandbox denied kill(0) or ps. No live OpenCode server was confirmed.`;
|
|
5797
|
+
}
|
|
5798
|
+
function logInconclusiveMigrationProbes(dbPath, discovery, piProbeState) {
|
|
5799
|
+
const uncertainPids = discovery.inconclusivePids ?? [];
|
|
5800
|
+
if (uncertainPids.length > 0) {
|
|
5801
|
+
log(formatInconclusiveOpenCodeMigrationWarning(dbPath, uncertainPids));
|
|
5802
|
+
}
|
|
5803
|
+
if (piProbeState === "unreadable") {
|
|
5804
|
+
log(`[magic-context] storage warning: continuing migration for ${dbPath}; the Pi/OMP process-list probe could not run, which commonly means an OS sandbox denied ps. No live Pi harness was confirmed.`);
|
|
5805
|
+
}
|
|
5806
|
+
}
|
|
5625
5807
|
function enforceMigrationOnOpenGuard(db, dbPath, dbDir, latestSupportedVersion) {
|
|
5626
5808
|
const persistedVersion = getPersistedSchemaVersion(db);
|
|
5627
5809
|
if (persistedVersion >= latestSupportedVersion) {
|
|
@@ -5629,9 +5811,11 @@ function enforceMigrationOnOpenGuard(db, dbPath, dbDir, latestSupportedVersion)
|
|
|
5629
5811
|
return true;
|
|
5630
5812
|
}
|
|
5631
5813
|
const discovery = inspectRpcServerDiscovery(dbDir);
|
|
5632
|
-
const
|
|
5633
|
-
|
|
5814
|
+
const piDiscovery = inspectLivePiProcesses();
|
|
5815
|
+
const piPids = piDiscovery.processIds;
|
|
5816
|
+
if ((discovery.state === "absent" || discovery.state === "stale" || discovery.state === "inconclusive") && piPids.length === 0) {
|
|
5634
5817
|
lastMigrationOnOpenRefusal = null;
|
|
5818
|
+
logInconclusiveMigrationProbes(dbPath, discovery, piDiscovery.state);
|
|
5635
5819
|
return true;
|
|
5636
5820
|
}
|
|
5637
5821
|
const blockingPids = [...new Set([...discovery.serverPids, ...piPids])].sort((left, right) => left - right);
|
|
@@ -5649,10 +5833,10 @@ function enforceMigrationOnOpenGuard(db, dbPath, dbDir, latestSupportedVersion)
|
|
|
5649
5833
|
log(`[magic-context] storage fatal: refusing to migrate ${dbPath} from upstream migration v${persistedVersion} to v${latestSupportedVersion} because RPC discovery file ${unreadableFile} is uncertain (${arm} arm), so the absence of a live OpenCode server cannot be proven. ${recovery}`);
|
|
5650
5834
|
} else {
|
|
5651
5835
|
const blockers = [
|
|
5652
|
-
...discovery.serverPids.map((pid) => `OpenCode server PID ${pid}`),
|
|
5653
|
-
...piPids.map((pid) => `Pi harness PID ${pid}`)
|
|
5836
|
+
...discovery.serverPids.map((pid) => `confirmed OpenCode server PID ${pid}`),
|
|
5837
|
+
...piPids.map((pid) => `confirmed Pi harness PID ${pid}`)
|
|
5654
5838
|
];
|
|
5655
|
-
log(`[magic-context] storage fatal: refusing to migrate ${dbPath} from upstream migration v${persistedVersion} to v${latestSupportedVersion} while ${blockers.join(", ")}
|
|
5839
|
+
log(`[magic-context] storage fatal: refusing to migrate ${dbPath} from upstream migration v${persistedVersion} to v${latestSupportedVersion} while ${blockers.join(", ")} still use the old plugin build. Restart the blocking harness, then retry this process.`);
|
|
5656
5840
|
}
|
|
5657
5841
|
return false;
|
|
5658
5842
|
}
|
|
@@ -5876,6 +6060,7 @@ function initializeDatabase(db) {
|
|
|
5876
6060
|
last_observed_at INTEGER,
|
|
5877
6061
|
answer_refreshed_at INTEGER,
|
|
5878
6062
|
source_candidate_ids TEXT NOT NULL DEFAULT '[]',
|
|
6063
|
+
source_candidate_provenance TEXT,
|
|
5879
6064
|
created_at INTEGER NOT NULL,
|
|
5880
6065
|
updated_at INTEGER NOT NULL
|
|
5881
6066
|
);
|
|
@@ -6511,6 +6696,11 @@ CREATE INDEX IF NOT EXISTS idx_dream_queue_pending ON dream_queue(started_at, en
|
|
|
6511
6696
|
ensureColumn(db, "primer_candidates", "question_embedding", "BLOB");
|
|
6512
6697
|
ensureColumn(db, "primer_candidates", "question_embedding_model_id", "TEXT");
|
|
6513
6698
|
ensureColumn(db, "primers", "question_embedding_model_id", "TEXT");
|
|
6699
|
+
ensureColumn(db, "primers", "source_candidate_provenance", "TEXT");
|
|
6700
|
+
const hasUserMemoriesTable = db.prepare("SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = 'user_memories'").get();
|
|
6701
|
+
if (hasUserMemoriesTable) {
|
|
6702
|
+
ensureColumn(db, "user_memories", "source_candidate_provenance", "TEXT");
|
|
6703
|
+
}
|
|
6514
6704
|
db.exec(`
|
|
6515
6705
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_primer_candidates_occurrence
|
|
6516
6706
|
ON primer_candidates(project_path, harness, session_id, source_start_message_id, source_end_message_id);
|
|
@@ -6584,6 +6774,8 @@ CREATE INDEX IF NOT EXISTS idx_dream_queue_pending ON dream_queue(started_at, en
|
|
|
6584
6774
|
ensureColumn(db, "session_meta", "stripped_placeholder_ids", "TEXT DEFAULT ''");
|
|
6585
6775
|
ensureColumn(db, "session_meta", "stale_reduce_stripped_ids", "TEXT DEFAULT ''");
|
|
6586
6776
|
ensureColumn(db, "session_meta", "processed_image_stripped_ids", "TEXT DEFAULT ''");
|
|
6777
|
+
ensureColumn(db, "session_meta", "merged_reasoning_stripped_ids", "TEXT DEFAULT ''");
|
|
6778
|
+
ensureColumn(db, "session_meta", "trailing_blank_decisions", "TEXT DEFAULT ''");
|
|
6587
6779
|
ensureColumn(db, "compartments", "start_message_id", "TEXT DEFAULT ''");
|
|
6588
6780
|
ensureColumn(db, "compartments", "end_message_id", "TEXT DEFAULT ''");
|
|
6589
6781
|
ensureColumn(db, "memory_embeddings", "model_id", "TEXT");
|
|
@@ -8205,7 +8397,7 @@ function clearHistorianFailureState(db, sessionId) {
|
|
|
8205
8397
|
})();
|
|
8206
8398
|
}
|
|
8207
8399
|
function normalizeDetectedLimitModelKey(modelKey) {
|
|
8208
|
-
return typeof modelKey === "string" && modelKey.length > 0 ? modelKey : null;
|
|
8400
|
+
return typeof modelKey === "string" && modelKey.length > 0 ? piModelRefToCanonical(modelKey) : null;
|
|
8209
8401
|
}
|
|
8210
8402
|
function normalizeEmergencyRecoveryOrigin(value) {
|
|
8211
8403
|
return value === "provider_overflow" || value === "proactive_model_shrink" ? value : null;
|
|
@@ -8356,6 +8548,84 @@ function removeStrippedPlaceholderId(db, sessionId, messageId) {
|
|
|
8356
8548
|
applyStrippedPlaceholderDelta(db, sessionId, { remove: [messageId] });
|
|
8357
8549
|
return true;
|
|
8358
8550
|
}
|
|
8551
|
+
function getMergedReasoningStrippedIds(db, sessionId) {
|
|
8552
|
+
const row = db.prepare("SELECT merged_reasoning_stripped_ids FROM session_meta WHERE session_id = ?").get(sessionId);
|
|
8553
|
+
return new Set(parseStrippedBlob(row?.merged_reasoning_stripped_ids));
|
|
8554
|
+
}
|
|
8555
|
+
function addMergedReasoningStrippedIds(db, sessionId, ids) {
|
|
8556
|
+
const add = [...ids];
|
|
8557
|
+
if (add.length === 0)
|
|
8558
|
+
return true;
|
|
8559
|
+
ensureSessionMetaRow(db, sessionId);
|
|
8560
|
+
for (let attempt = 0;attempt < CAS_RETRY_LIMIT; attempt += 1) {
|
|
8561
|
+
const row = db.prepare("SELECT merged_reasoning_stripped_ids FROM session_meta WHERE session_id = ?").get(sessionId);
|
|
8562
|
+
const rawStored = row ? row.merged_reasoning_stripped_ids ?? null : null;
|
|
8563
|
+
const current = new Set(parseStrippedBlob(rawStored));
|
|
8564
|
+
let changed = false;
|
|
8565
|
+
for (const id of add) {
|
|
8566
|
+
if (!current.has(id)) {
|
|
8567
|
+
current.add(id);
|
|
8568
|
+
changed = true;
|
|
8569
|
+
}
|
|
8570
|
+
}
|
|
8571
|
+
if (!changed)
|
|
8572
|
+
return true;
|
|
8573
|
+
const nextBlob = JSON.stringify([...current]);
|
|
8574
|
+
const result = db.prepare("UPDATE session_meta SET merged_reasoning_stripped_ids = ? WHERE session_id = ? AND merged_reasoning_stripped_ids IS ?").run(nextBlob, sessionId, rawStored);
|
|
8575
|
+
if (result.changes > 0)
|
|
8576
|
+
return true;
|
|
8577
|
+
}
|
|
8578
|
+
sessionLog(sessionId, `merged_reasoning_stripped_ids CAS: ${CAS_RETRY_LIMIT} retries exhausted`);
|
|
8579
|
+
return false;
|
|
8580
|
+
}
|
|
8581
|
+
function parseTrailingBlankDecisions(raw) {
|
|
8582
|
+
if (!raw)
|
|
8583
|
+
return new Map;
|
|
8584
|
+
try {
|
|
8585
|
+
const parsed = JSON.parse(raw);
|
|
8586
|
+
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed))
|
|
8587
|
+
return new Map;
|
|
8588
|
+
const decisions = new Map;
|
|
8589
|
+
for (const [id, decision] of Object.entries(parsed)) {
|
|
8590
|
+
if (id.length > 0 && (decision === "keep" || decision === "strip")) {
|
|
8591
|
+
decisions.set(id, decision);
|
|
8592
|
+
}
|
|
8593
|
+
}
|
|
8594
|
+
return decisions;
|
|
8595
|
+
} catch {
|
|
8596
|
+
return new Map;
|
|
8597
|
+
}
|
|
8598
|
+
}
|
|
8599
|
+
function getTrailingBlankDecisions(db, sessionId) {
|
|
8600
|
+
const row = db.prepare("SELECT trailing_blank_decisions FROM session_meta WHERE session_id = ?").get(sessionId);
|
|
8601
|
+
return parseTrailingBlankDecisions(row?.trailing_blank_decisions);
|
|
8602
|
+
}
|
|
8603
|
+
function addTrailingBlankDecisions(db, sessionId, additions) {
|
|
8604
|
+
const add = [...additions];
|
|
8605
|
+
if (add.length === 0)
|
|
8606
|
+
return true;
|
|
8607
|
+
ensureSessionMetaRow(db, sessionId);
|
|
8608
|
+
for (let attempt = 0;attempt < CAS_RETRY_LIMIT; attempt += 1) {
|
|
8609
|
+
const row = db.prepare("SELECT trailing_blank_decisions FROM session_meta WHERE session_id = ?").get(sessionId);
|
|
8610
|
+
const rawStored = row ? row.trailing_blank_decisions ?? null : null;
|
|
8611
|
+
const current = parseTrailingBlankDecisions(rawStored);
|
|
8612
|
+
let changed = false;
|
|
8613
|
+
for (const [id, decision] of add) {
|
|
8614
|
+
if (!current.has(id)) {
|
|
8615
|
+
current.set(id, decision);
|
|
8616
|
+
changed = true;
|
|
8617
|
+
}
|
|
8618
|
+
}
|
|
8619
|
+
if (!changed)
|
|
8620
|
+
return true;
|
|
8621
|
+
const nextBlob = JSON.stringify(Object.fromEntries(current));
|
|
8622
|
+
const result = db.prepare("UPDATE session_meta SET trailing_blank_decisions = ? WHERE session_id = ? AND trailing_blank_decisions IS ?").run(nextBlob, sessionId, rawStored);
|
|
8623
|
+
if (result.changes > 0)
|
|
8624
|
+
return true;
|
|
8625
|
+
}
|
|
8626
|
+
sessionLog(sessionId, `trailing_blank_decisions CAS: ${CAS_RETRY_LIMIT} retries exhausted`);
|
|
8627
|
+
return false;
|
|
8628
|
+
}
|
|
8359
8629
|
function getStaleReduceStrippedIds(db, sessionId) {
|
|
8360
8630
|
const row = db.prepare("SELECT stale_reduce_stripped_ids FROM session_meta WHERE session_id = ?").get(sessionId);
|
|
8361
8631
|
return new Set(parseStrippedBlob(row?.stale_reduce_stripped_ids));
|
|
@@ -8803,6 +9073,76 @@ function parseCandidateIds(raw) {
|
|
|
8803
9073
|
return [];
|
|
8804
9074
|
}
|
|
8805
9075
|
}
|
|
9076
|
+
function parsePrimerSourceProvenance(raw) {
|
|
9077
|
+
if (raw === null)
|
|
9078
|
+
return null;
|
|
9079
|
+
try {
|
|
9080
|
+
const parsed = JSON.parse(raw);
|
|
9081
|
+
if (!Array.isArray(parsed))
|
|
9082
|
+
return null;
|
|
9083
|
+
const provenance = [];
|
|
9084
|
+
for (const value of parsed) {
|
|
9085
|
+
if (!value || typeof value !== "object")
|
|
9086
|
+
return null;
|
|
9087
|
+
const source = value;
|
|
9088
|
+
if (typeof source.candidate_id !== "number" || !Number.isFinite(source.candidate_id) || typeof source.project_path !== "string" || typeof source.harness !== "string" || typeof source.session_id !== "string" || source.source_compartment_start !== null && typeof source.source_compartment_start !== "number" || source.source_compartment_end !== null && typeof source.source_compartment_end !== "number" || typeof source.source_start_message_id !== "string" || typeof source.source_end_message_id !== "string") {
|
|
9089
|
+
return null;
|
|
9090
|
+
}
|
|
9091
|
+
provenance.push({
|
|
9092
|
+
candidateId: source.candidate_id,
|
|
9093
|
+
projectPath: source.project_path,
|
|
9094
|
+
harness: source.harness,
|
|
9095
|
+
sessionId: source.session_id,
|
|
9096
|
+
sourceCompartmentStart: source.source_compartment_start,
|
|
9097
|
+
sourceCompartmentEnd: source.source_compartment_end,
|
|
9098
|
+
sourceStartMessageId: source.source_start_message_id,
|
|
9099
|
+
sourceEndMessageId: source.source_end_message_id
|
|
9100
|
+
});
|
|
9101
|
+
}
|
|
9102
|
+
return provenance;
|
|
9103
|
+
} catch {
|
|
9104
|
+
return null;
|
|
9105
|
+
}
|
|
9106
|
+
}
|
|
9107
|
+
function loadPrimerSourceProvenance(db, candidateIds) {
|
|
9108
|
+
const ids = [...new Set(candidateIds)].sort((a, b) => a - b);
|
|
9109
|
+
if (ids.length === 0)
|
|
9110
|
+
return [];
|
|
9111
|
+
const placeholders3 = ids.map(() => "?").join(",");
|
|
9112
|
+
const rows = db.prepare(`SELECT id, project_path, harness, session_id,
|
|
9113
|
+
source_compartment_start, source_compartment_end,
|
|
9114
|
+
source_start_message_id, source_end_message_id
|
|
9115
|
+
FROM primer_candidates
|
|
9116
|
+
WHERE id IN (${placeholders3})
|
|
9117
|
+
ORDER BY id ASC`).all(...ids);
|
|
9118
|
+
return rows.map((row) => ({
|
|
9119
|
+
candidateId: row.id,
|
|
9120
|
+
projectPath: row.project_path,
|
|
9121
|
+
harness: row.harness,
|
|
9122
|
+
sessionId: row.session_id,
|
|
9123
|
+
sourceCompartmentStart: row.source_compartment_start,
|
|
9124
|
+
sourceCompartmentEnd: row.source_compartment_end,
|
|
9125
|
+
sourceStartMessageId: row.source_start_message_id,
|
|
9126
|
+
sourceEndMessageId: row.source_end_message_id
|
|
9127
|
+
}));
|
|
9128
|
+
}
|
|
9129
|
+
function serializePrimerSourceProvenance(provenance, sourceCandidateIds) {
|
|
9130
|
+
if (provenance.length === 0 && sourceCandidateIds.length > 0)
|
|
9131
|
+
return null;
|
|
9132
|
+
return JSON.stringify(provenance.map((source) => ({
|
|
9133
|
+
candidate_id: source.candidateId,
|
|
9134
|
+
project_path: source.projectPath,
|
|
9135
|
+
harness: source.harness,
|
|
9136
|
+
session_id: source.sessionId,
|
|
9137
|
+
source_compartment_start: source.sourceCompartmentStart,
|
|
9138
|
+
source_compartment_end: source.sourceCompartmentEnd,
|
|
9139
|
+
source_start_message_id: source.sourceStartMessageId,
|
|
9140
|
+
source_end_message_id: source.sourceEndMessageId
|
|
9141
|
+
})));
|
|
9142
|
+
}
|
|
9143
|
+
function normalizedCandidateIds(candidateIds) {
|
|
9144
|
+
return [...new Set(candidateIds)].sort((a, b) => a - b);
|
|
9145
|
+
}
|
|
8806
9146
|
function toCandidate(row) {
|
|
8807
9147
|
return {
|
|
8808
9148
|
id: row.id,
|
|
@@ -8835,6 +9175,7 @@ function toPrimer(row) {
|
|
|
8835
9175
|
lastObservedAt: row.last_observed_at,
|
|
8836
9176
|
answerRefreshedAt: row.answer_refreshed_at,
|
|
8837
9177
|
sourceCandidateIds: parseCandidateIds(row.source_candidate_ids),
|
|
9178
|
+
sourceProvenance: parsePrimerSourceProvenance(row.source_candidate_provenance),
|
|
8838
9179
|
createdAt: row.created_at,
|
|
8839
9180
|
updatedAt: row.updated_at
|
|
8840
9181
|
};
|
|
@@ -8906,23 +9247,43 @@ function getActivePrimers(db, projectPath) {
|
|
|
8906
9247
|
return rows.map(toPrimer);
|
|
8907
9248
|
}
|
|
8908
9249
|
function createPrimer(db, input) {
|
|
8909
|
-
|
|
8910
|
-
|
|
8911
|
-
|
|
8912
|
-
|
|
8913
|
-
|
|
8914
|
-
|
|
8915
|
-
|
|
9250
|
+
return db.transaction(() => {
|
|
9251
|
+
const now = input.now ?? Date.now();
|
|
9252
|
+
const sourceCandidateIds = normalizedCandidateIds(input.sourceCandidateIds);
|
|
9253
|
+
const sourceProvenance = loadPrimerSourceProvenance(db, sourceCandidateIds);
|
|
9254
|
+
const info = db.prepare(`INSERT INTO primers (
|
|
9255
|
+
project_path, question, question_embedding, question_embedding_model_id, answer,
|
|
9256
|
+
status, total_support, last_observed_at, answer_refreshed_at,
|
|
9257
|
+
source_candidate_ids, source_candidate_provenance, created_at, updated_at
|
|
9258
|
+
) VALUES (?, ?, ?, ?, ?, 'active', ?, ?, NULL, ?, ?, ?, ?)`).run(input.projectPath, input.question, vectorBlob(input.questionEmbedding), input.questionEmbeddingModelId ?? null, input.answer ?? "", input.totalSupport, input.lastObservedAt, JSON.stringify(sourceCandidateIds), serializePrimerSourceProvenance(sourceProvenance, sourceCandidateIds), now, now);
|
|
9259
|
+
return Number(info.lastInsertRowid);
|
|
9260
|
+
})();
|
|
8916
9261
|
}
|
|
8917
9262
|
function updatePrimerSupport(db, input) {
|
|
8918
|
-
db.
|
|
8919
|
-
|
|
8920
|
-
|
|
8921
|
-
|
|
8922
|
-
|
|
8923
|
-
|
|
8924
|
-
|
|
8925
|
-
|
|
9263
|
+
db.transaction(() => {
|
|
9264
|
+
const sourceCandidateIds = normalizedCandidateIds(input.sourceCandidateIds);
|
|
9265
|
+
const allowedIds = new Set(sourceCandidateIds);
|
|
9266
|
+
const existingRow = db.prepare("SELECT source_candidate_provenance FROM primers WHERE id = ?").get(input.primerId);
|
|
9267
|
+
const provenanceByCandidateId = new Map;
|
|
9268
|
+
for (const source of parsePrimerSourceProvenance(existingRow?.source_candidate_provenance ?? null) ?? []) {
|
|
9269
|
+
if (allowedIds.has(source.candidateId)) {
|
|
9270
|
+
provenanceByCandidateId.set(source.candidateId, source);
|
|
9271
|
+
}
|
|
9272
|
+
}
|
|
9273
|
+
for (const source of loadPrimerSourceProvenance(db, sourceCandidateIds)) {
|
|
9274
|
+
provenanceByCandidateId.set(source.candidateId, source);
|
|
9275
|
+
}
|
|
9276
|
+
const sourceProvenance = [...provenanceByCandidateId.values()].sort((a, b) => a.candidateId - b.candidateId);
|
|
9277
|
+
db.prepare(`UPDATE primers
|
|
9278
|
+
SET question_embedding = COALESCE(?, question_embedding),
|
|
9279
|
+
question_embedding_model_id = COALESCE(?, question_embedding_model_id),
|
|
9280
|
+
total_support = ?,
|
|
9281
|
+
last_observed_at = ?,
|
|
9282
|
+
source_candidate_ids = ?,
|
|
9283
|
+
source_candidate_provenance = ?,
|
|
9284
|
+
updated_at = ?
|
|
9285
|
+
WHERE id = ?`).run(vectorBlob(input.questionEmbedding), input.questionEmbeddingModelId ?? null, input.totalSupport, input.lastObservedAt, JSON.stringify(sourceCandidateIds), serializePrimerSourceProvenance(sourceProvenance, sourceCandidateIds), input.now ?? Date.now(), input.primerId);
|
|
9286
|
+
})();
|
|
8926
9287
|
}
|
|
8927
9288
|
function updatePrimerAnswer(db, primerId, answer, refreshedAt = Date.now()) {
|
|
8928
9289
|
db.prepare("UPDATE primers SET answer = ?, answer_refreshed_at = ?, updated_at = ? WHERE id = ?").run(answer, refreshedAt, refreshedAt, primerId);
|
|
@@ -9651,7 +10012,7 @@ var LIMIT_EXTRACTION_PATTERNS = [
|
|
|
9651
10012
|
pattern: /too large for model with (\d+) maximum context length/i,
|
|
9652
10013
|
provenance: "combined"
|
|
9653
10014
|
},
|
|
9654
|
-
{ pattern: /context size
|
|
10015
|
+
{ pattern: /context size[^0-9]{0,40}(\d{4,})\s*tokens?/i, provenance: "combined" },
|
|
9655
10016
|
{ pattern: /exceeds? the context length of (\d+)/i, provenance: "combined" },
|
|
9656
10017
|
{
|
|
9657
10018
|
pattern: />\s*(\d+)\s*(?:tokens?\s*)?(?:maximum|max|limit)\b/i,
|
|
@@ -10052,16 +10413,25 @@ function modelKeyLookupOrder(modelKey) {
|
|
|
10052
10413
|
return [];
|
|
10053
10414
|
const provider = modelKey.slice(0, slash);
|
|
10054
10415
|
let modelID = modelKey.slice(slash + 1);
|
|
10416
|
+
const providerRefs = modelRefLookupOrder(`${provider}/${modelID}`);
|
|
10055
10417
|
const candidates = [];
|
|
10056
10418
|
while (modelID.length > 0) {
|
|
10057
|
-
|
|
10419
|
+
for (const providerRef of providerRefs) {
|
|
10420
|
+
const providerSlash = providerRef.indexOf("/");
|
|
10421
|
+
const providerPrefix = providerRef.slice(0, providerSlash);
|
|
10422
|
+
candidates.push({ key: `${providerPrefix}/${modelID}`, source: "exact" });
|
|
10423
|
+
}
|
|
10058
10424
|
candidates.push({ key: modelID, source: "bare" });
|
|
10059
10425
|
const lastDash = modelID.lastIndexOf("-");
|
|
10060
10426
|
if (lastDash <= 0)
|
|
10061
10427
|
break;
|
|
10062
10428
|
modelID = modelID.slice(0, lastDash);
|
|
10063
10429
|
}
|
|
10064
|
-
|
|
10430
|
+
for (const providerRef of providerRefs) {
|
|
10431
|
+
const providerSlash = providerRef.indexOf("/");
|
|
10432
|
+
const providerPrefix = providerRef.slice(0, providerSlash);
|
|
10433
|
+
candidates.push({ key: `${providerPrefix}/*`, source: "wildcard" });
|
|
10434
|
+
}
|
|
10065
10435
|
const seen = new Set;
|
|
10066
10436
|
return candidates.filter((candidate) => {
|
|
10067
10437
|
if (seen.has(candidate.key))
|
|
@@ -10592,12 +10962,13 @@ function createPromptSurfaceGuidanceEpochCache(runtime) {
|
|
|
10592
10962
|
const epochs = new Map;
|
|
10593
10963
|
return {
|
|
10594
10964
|
resolve(sessionId, config, modelKey) {
|
|
10965
|
+
const canonicalModelKey = modelKey ? piModelRefToCanonical(modelKey) : undefined;
|
|
10595
10966
|
const cached = epochs.get(sessionId);
|
|
10596
|
-
if (cached && cached.config === config && cached.modelKey ===
|
|
10967
|
+
if (cached && cached.config === config && cached.modelKey === canonicalModelKey) {
|
|
10597
10968
|
return cached.selection;
|
|
10598
10969
|
}
|
|
10599
|
-
const selection = runtime.resolveGuidance(config,
|
|
10600
|
-
epochs.set(sessionId, { config, modelKey, selection });
|
|
10970
|
+
const selection = runtime.resolveGuidance(config, canonicalModelKey);
|
|
10971
|
+
epochs.set(sessionId, { config, modelKey: canonicalModelKey, selection });
|
|
10601
10972
|
return selection;
|
|
10602
10973
|
},
|
|
10603
10974
|
clear(sessionId) {
|
|
@@ -10703,13 +11074,44 @@ function pruneExpiredUserMemoryCandidates(db, ttlMs, now = Date.now()) {
|
|
|
10703
11074
|
const result = db.prepare("DELETE FROM user_memory_candidates WHERE created_at < ?").run(cutoff);
|
|
10704
11075
|
return Number(result.changes ?? 0);
|
|
10705
11076
|
}
|
|
11077
|
+
function loadUserMemorySourceProvenance(db, candidateIds) {
|
|
11078
|
+
const ids = [...new Set(candidateIds)].sort((a, b) => a - b);
|
|
11079
|
+
if (ids.length === 0)
|
|
11080
|
+
return [];
|
|
11081
|
+
const placeholders3 = ids.map(() => "?").join(",");
|
|
11082
|
+
const rows = db.prepare(`SELECT id, session_id, source_compartment_start, source_compartment_end
|
|
11083
|
+
FROM user_memory_candidates
|
|
11084
|
+
WHERE id IN (${placeholders3})
|
|
11085
|
+
ORDER BY id ASC`).all(...ids);
|
|
11086
|
+
return rows.map((row) => ({
|
|
11087
|
+
candidateId: row.id,
|
|
11088
|
+
sessionId: row.session_id,
|
|
11089
|
+
sourceCompartmentStart: row.source_compartment_start,
|
|
11090
|
+
sourceCompartmentEnd: row.source_compartment_end
|
|
11091
|
+
}));
|
|
11092
|
+
}
|
|
11093
|
+
function serializeUserMemorySourceProvenance(provenance, sourceCandidateIds) {
|
|
11094
|
+
if (provenance.length === 0 && sourceCandidateIds.length > 0)
|
|
11095
|
+
return null;
|
|
11096
|
+
return JSON.stringify(provenance.map((source) => ({
|
|
11097
|
+
candidate_id: source.candidateId,
|
|
11098
|
+
session_id: source.sessionId,
|
|
11099
|
+
source_compartment_start: source.sourceCompartmentStart,
|
|
11100
|
+
source_compartment_end: source.sourceCompartmentEnd
|
|
11101
|
+
})));
|
|
11102
|
+
}
|
|
10706
11103
|
function insertUserMemory(db, content, sourceCandidateIds) {
|
|
10707
|
-
|
|
10708
|
-
|
|
10709
|
-
|
|
11104
|
+
return db.transaction(() => {
|
|
11105
|
+
const now = Date.now();
|
|
11106
|
+
const sourceProvenance = loadUserMemorySourceProvenance(db, sourceCandidateIds);
|
|
11107
|
+
const result = db.prepare(`INSERT INTO user_memories
|
|
11108
|
+
(content, status, promoted_at, source_candidate_ids, source_candidate_provenance, created_at, updated_at)
|
|
11109
|
+
VALUES (?, 'active', ?, ?, ?, ?, ?)`).run(content, now, JSON.stringify(sourceCandidateIds), serializeUserMemorySourceProvenance(sourceProvenance, sourceCandidateIds), now, now);
|
|
11110
|
+
return Number(result.lastInsertRowid);
|
|
11111
|
+
})();
|
|
10710
11112
|
}
|
|
10711
11113
|
function getActiveUserMemories(db) {
|
|
10712
|
-
const rows = db.prepare("SELECT id, content, status, promoted_at, source_candidate_ids, created_at, updated_at FROM user_memories WHERE status = 'active' ORDER BY promoted_at ASC, id ASC").all();
|
|
11114
|
+
const rows = db.prepare("SELECT id, content, status, promoted_at, source_candidate_ids, source_candidate_provenance, created_at, updated_at FROM user_memories WHERE status = 'active' ORDER BY promoted_at ASC, id ASC").all();
|
|
10713
11115
|
return rows.map(parseUserMemoryRow);
|
|
10714
11116
|
}
|
|
10715
11117
|
function updateUserMemoryContent(db, id, content) {
|
|
@@ -10718,17 +11120,49 @@ function updateUserMemoryContent(db, id, content) {
|
|
|
10718
11120
|
function dismissUserMemory(db, id) {
|
|
10719
11121
|
db.prepare("UPDATE user_memories SET status = 'dismissed', updated_at = ? WHERE id = ?").run(Date.now(), id);
|
|
10720
11122
|
}
|
|
10721
|
-
function
|
|
10722
|
-
let candidateIds = [];
|
|
11123
|
+
function parseCandidateIds2(raw) {
|
|
10723
11124
|
try {
|
|
10724
|
-
|
|
10725
|
-
|
|
11125
|
+
const parsed = JSON.parse(raw);
|
|
11126
|
+
return Array.isArray(parsed) ? parsed.filter((id) => typeof id === "number" && Number.isFinite(id)) : [];
|
|
11127
|
+
} catch {
|
|
11128
|
+
return [];
|
|
11129
|
+
}
|
|
11130
|
+
}
|
|
11131
|
+
function parseUserMemorySourceProvenance(raw) {
|
|
11132
|
+
if (raw === null)
|
|
11133
|
+
return null;
|
|
11134
|
+
try {
|
|
11135
|
+
const parsed = JSON.parse(raw);
|
|
11136
|
+
if (!Array.isArray(parsed))
|
|
11137
|
+
return null;
|
|
11138
|
+
const provenance = [];
|
|
11139
|
+
for (const value of parsed) {
|
|
11140
|
+
if (!value || typeof value !== "object")
|
|
11141
|
+
return null;
|
|
11142
|
+
const source = value;
|
|
11143
|
+
if (typeof source.candidate_id !== "number" || !Number.isFinite(source.candidate_id) || typeof source.session_id !== "string" || source.source_compartment_start !== null && typeof source.source_compartment_start !== "number" || source.source_compartment_end !== null && typeof source.source_compartment_end !== "number") {
|
|
11144
|
+
return null;
|
|
11145
|
+
}
|
|
11146
|
+
provenance.push({
|
|
11147
|
+
candidateId: source.candidate_id,
|
|
11148
|
+
sessionId: source.session_id,
|
|
11149
|
+
sourceCompartmentStart: source.source_compartment_start,
|
|
11150
|
+
sourceCompartmentEnd: source.source_compartment_end
|
|
11151
|
+
});
|
|
11152
|
+
}
|
|
11153
|
+
return provenance;
|
|
11154
|
+
} catch {
|
|
11155
|
+
return null;
|
|
11156
|
+
}
|
|
11157
|
+
}
|
|
11158
|
+
function parseUserMemoryRow(row) {
|
|
10726
11159
|
return {
|
|
10727
11160
|
id: row.id,
|
|
10728
11161
|
content: row.content,
|
|
10729
11162
|
status: row.status === "dismissed" ? "dismissed" : "active",
|
|
10730
11163
|
promotedAt: row.promoted_at,
|
|
10731
|
-
sourceCandidateIds:
|
|
11164
|
+
sourceCandidateIds: parseCandidateIds2(row.source_candidate_ids),
|
|
11165
|
+
sourceProvenance: parseUserMemorySourceProvenance(row.source_candidate_provenance),
|
|
10732
11166
|
createdAt: row.created_at,
|
|
10733
11167
|
updatedAt: row.updated_at
|
|
10734
11168
|
};
|
|
@@ -27253,6 +27687,9 @@ var MagicContextConfigSchema = exports_external.object({
|
|
|
27253
27687
|
exports_external.number().min(0),
|
|
27254
27688
|
exports_external.object({ default: exports_external.number().min(0) }).catchall(exports_external.number().min(0))
|
|
27255
27689
|
]).optional().describe('User-only output-token reservation override. Number or per-model object ({ default: 16384, "provider/model": 8192 }); 0 disables reservation. When unset, Magic Context reserves the catalog output limit (capped at 25% of context) for shared-window providers and keeps proven separate-quota Google/Gemini windows unchanged.'),
|
|
27690
|
+
models: exports_external.object({
|
|
27691
|
+
window_overlay_path: exports_external.string().trim().min(1).optional()
|
|
27692
|
+
}).optional().describe("User-only Fusiform window-overlay settings. The path defaults to <dataDir>/fusiform/window-overlay.json."),
|
|
27256
27693
|
toast_duration_ms: exports_external.number().min(0).max(60000).default(5000).describe("TUI toast lifetime in milliseconds for Magic Context notifications. Set to 0 to disable Magic Context toasts entirely (min: 0, max: 60000, default: 5000)"),
|
|
27257
27694
|
execute_threshold_percentage: exports_external.union([
|
|
27258
27695
|
exports_external.number().min(20).max(90, EXECUTE_THRESHOLD_CAP_MESSAGE),
|
|
@@ -30769,9 +31206,14 @@ function blockedEmbeddingEndpointReason(endpoint) {
|
|
|
30769
31206
|
function normalizeEndpoint2(endpoint) {
|
|
30770
31207
|
return endpoint?.trim().replace(/\/+$/, "") ?? "";
|
|
30771
31208
|
}
|
|
30772
|
-
function
|
|
30773
|
-
const
|
|
30774
|
-
|
|
31209
|
+
function parseEmbeddingModel(model) {
|
|
31210
|
+
const lastColon = model.lastIndexOf(":");
|
|
31211
|
+
if (lastColon > model.lastIndexOf("/")) {
|
|
31212
|
+
return { base: model.slice(0, lastColon), tag: model.slice(lastColon + 1) };
|
|
31213
|
+
}
|
|
31214
|
+
return { base: model };
|
|
31215
|
+
}
|
|
31216
|
+
function matchNormalizedEmbeddingModels(a, b) {
|
|
30775
31217
|
if (a.length === 0 || b.length === 0)
|
|
30776
31218
|
return true;
|
|
30777
31219
|
if (a === b)
|
|
@@ -30785,6 +31227,16 @@ function embeddingModelsMatch(served, requested) {
|
|
|
30785
31227
|
return true;
|
|
30786
31228
|
return false;
|
|
30787
31229
|
}
|
|
31230
|
+
function embeddingModelsMatch(served, requested) {
|
|
31231
|
+
const a = served.trim().toLowerCase();
|
|
31232
|
+
const b = requested.trim().toLowerCase();
|
|
31233
|
+
const servedModel = parseEmbeddingModel(a);
|
|
31234
|
+
const requestedModel = parseEmbeddingModel(b);
|
|
31235
|
+
if (servedModel.tag !== undefined && requestedModel.tag !== undefined && servedModel.tag !== requestedModel.tag) {
|
|
31236
|
+
return false;
|
|
31237
|
+
}
|
|
31238
|
+
return matchNormalizedEmbeddingModels(servedModel.base, requestedModel.base);
|
|
31239
|
+
}
|
|
30788
31240
|
var FAILURE_THRESHOLD = 3;
|
|
30789
31241
|
var FAILURE_WINDOW_MS = 60000;
|
|
30790
31242
|
var OPEN_DURATION_MS = 5 * 60000;
|
|
@@ -30915,7 +31367,7 @@ class OpenAICompatibleEmbeddingProvider {
|
|
|
30915
31367
|
const servedModel = typeof body.model === "string" ? body.model : "";
|
|
30916
31368
|
if (this.model && servedModel && !embeddingModelsMatch(servedModel, this.model)) {
|
|
30917
31369
|
if (!this.modelMismatchLogged) {
|
|
30918
|
-
log(`[magic-context] embedding endpoint served a DIFFERENT model than requested — refusing the substituted vectors (they have the wrong dimensions/space). requested="${this.model}" served="${servedModel}".
|
|
31370
|
+
log(`[magic-context] embedding endpoint served a DIFFERENT model than requested — refusing the substituted vectors (they have the wrong dimensions/space). requested="${this.model}" served="${servedModel}". Check that the endpoint serves the requested model; variant suffixes and vendor prefixes are matched automatically.`);
|
|
30919
31371
|
this.modelMismatchLogged = true;
|
|
30920
31372
|
}
|
|
30921
31373
|
this.recordFailure(isProbe);
|
|
@@ -36710,11 +37162,15 @@ function trimMemoriesToBudget(sessionId, memories, budgetTokens) {
|
|
|
36710
37162
|
}
|
|
36711
37163
|
function prepareCompartmentInjection(db, sessionId, messages, isCacheBusting, projectPath, injectionBudgetTokens, temporalAwareness) {
|
|
36712
37164
|
const cached2 = injectionCache.get(sessionId);
|
|
36713
|
-
if (
|
|
36714
|
-
|
|
37165
|
+
if (cached2 && cached2.db !== db) {
|
|
37166
|
+
clearInjectionCache(sessionId);
|
|
37167
|
+
}
|
|
37168
|
+
const usableCached = cached2?.db === db ? cached2 : undefined;
|
|
37169
|
+
if (!isCacheBusting && usableCached) {
|
|
37170
|
+
if (usableCached.kind === "empty") {
|
|
36715
37171
|
return null;
|
|
36716
37172
|
}
|
|
36717
|
-
const prepared =
|
|
37173
|
+
const prepared = usableCached.injection;
|
|
36718
37174
|
if (prepared.compartmentEndMessageId === null) {
|
|
36719
37175
|
sessionLog(sessionId, "compartment injection cache in degraded mode (null boundary), forcing rebuild");
|
|
36720
37176
|
} else {
|
|
@@ -36761,6 +37217,7 @@ function prepareCompartmentInjection(db, sessionId, messages, isCacheBusting, pr
|
|
|
36761
37217
|
}
|
|
36762
37218
|
if (compartments.length === 0 && facts.length === 0 && !memoryBlock) {
|
|
36763
37219
|
injectionCache.set(sessionId, {
|
|
37220
|
+
db,
|
|
36764
37221
|
kind: "empty",
|
|
36765
37222
|
compartmentEndMessageId: "",
|
|
36766
37223
|
renderedBytes: 0
|
|
@@ -36800,7 +37257,7 @@ function prepareCompartmentInjection(db, sessionId, messages, isCacheBusting, pr
|
|
|
36800
37257
|
memoryCount,
|
|
36801
37258
|
rebuiltFromDb: true
|
|
36802
37259
|
};
|
|
36803
|
-
injectionCache.set(sessionId, { kind: "populated", injection: result2 });
|
|
37260
|
+
injectionCache.set(sessionId, { db, kind: "populated", injection: result2 });
|
|
36804
37261
|
return result2;
|
|
36805
37262
|
}
|
|
36806
37263
|
const lastCompartment = compartments[compartments.length - 1];
|
|
@@ -36832,7 +37289,7 @@ function prepareCompartmentInjection(db, sessionId, messages, isCacheBusting, pr
|
|
|
36832
37289
|
memoryCount,
|
|
36833
37290
|
rebuiltFromDb: true
|
|
36834
37291
|
};
|
|
36835
|
-
injectionCache.set(sessionId, { kind: "populated", injection: result2 });
|
|
37292
|
+
injectionCache.set(sessionId, { db, kind: "populated", injection: result2 });
|
|
36836
37293
|
return result2;
|
|
36837
37294
|
}
|
|
36838
37295
|
let skippedVisibleMessages = 0;
|
|
@@ -36893,7 +37350,7 @@ function prepareCompartmentInjection(db, sessionId, messages, isCacheBusting, pr
|
|
|
36893
37350
|
if (needsFreshMaterialization) {
|
|
36894
37351
|
result.needsFreshMaterialization = true;
|
|
36895
37352
|
}
|
|
36896
|
-
injectionCache.set(sessionId, { kind: "populated", injection: result });
|
|
37353
|
+
injectionCache.set(sessionId, { db, kind: "populated", injection: result });
|
|
36897
37354
|
return result;
|
|
36898
37355
|
}
|
|
36899
37356
|
function readCachedBaselineState(db, sessionId) {
|
|
@@ -37255,7 +37712,7 @@ function readCurrentM0SnapshotMarkersUncached(args) {
|
|
|
37255
37712
|
upgradeState: getUpgradeState(args.db, args.sessionId),
|
|
37256
37713
|
compartmentRenderEpoch: COMPARTMENT_RENDER_EPOCH,
|
|
37257
37714
|
systemHash: hard.systemHash,
|
|
37258
|
-
modelKey: hard.modelKey,
|
|
37715
|
+
modelKey: piModelRefToCanonical(hard.modelKey),
|
|
37259
37716
|
projectIdentity: args.projectPath ?? null,
|
|
37260
37717
|
muralEnabled: args.muralEnabled === true,
|
|
37261
37718
|
renderBudgetIdentity: renderBudgetIdentity(args.memoryInjectionBudgetTokens, args.historyBudgetTokens)
|
|
@@ -37358,7 +37815,9 @@ function mustMaterialize(args) {
|
|
|
37358
37815
|
if (cachedUpgradeIdentity.muralEnabled !== null && cachedUpgradeIdentity.muralEnabled !== current.muralEnabled || cachedUpgradeIdentity.renderBudgetIdentity !== null && cachedUpgradeIdentity.renderBudgetIdentity !== current.renderBudgetIdentity) {
|
|
37359
37816
|
return { value: true, reason: "render_config" };
|
|
37360
37817
|
}
|
|
37361
|
-
|
|
37818
|
+
const canonicalHardModelKey = piModelRefToCanonical(hard.modelKey);
|
|
37819
|
+
const canonicalCachedModelKey = piModelRefToCanonical(args.state.cachedM0ModelKey ?? "");
|
|
37820
|
+
if (canonicalHardModelKey !== "" && canonicalHardModelKey !== canonicalCachedModelKey) {
|
|
37362
37821
|
return { value: true, reason: "model_change" };
|
|
37363
37822
|
}
|
|
37364
37823
|
if (hard.systemHash !== "" && hard.systemHash !== (args.state.cachedM0SystemHash ?? "")) {
|
|
@@ -38102,7 +38561,7 @@ function markersFromCachedRow(row) {
|
|
|
38102
38561
|
};
|
|
38103
38562
|
}
|
|
38104
38563
|
function cachedRowMatchesState(row, state2) {
|
|
38105
|
-
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_model_key ?? "") === (state2.cachedM0ModelKey ?? "") && (row.cached_m0_project_identity ?? null) === (state2.cachedM0ProjectIdentity ?? null);
|
|
38564
|
+
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);
|
|
38106
38565
|
}
|
|
38107
38566
|
function applyCachedRowToState(state2, row) {
|
|
38108
38567
|
const markers = markersFromCachedRow(row);
|
|
@@ -42326,6 +42785,25 @@ function lkgContentDigestFromFields(fields) {
|
|
|
42326
42785
|
}
|
|
42327
42786
|
return hash2.digest("base64url");
|
|
42328
42787
|
}
|
|
42788
|
+
function incrementalLkgContentDigests(entries, prior) {
|
|
42789
|
+
const aligned = prior !== undefined && prior.ids.length === prior.signatures.length && prior.signatures.length === prior.digests.length;
|
|
42790
|
+
let reusedPrefix = 0;
|
|
42791
|
+
if (aligned && prior) {
|
|
42792
|
+
while (reusedPrefix < entries.length && reusedPrefix < prior.ids.length && entries[reusedPrefix]?.id === prior.ids[reusedPrefix] && entries[reusedPrefix]?.signature === prior.signatures[reusedPrefix]) {
|
|
42793
|
+
reusedPrefix += 1;
|
|
42794
|
+
}
|
|
42795
|
+
}
|
|
42796
|
+
const digests = [];
|
|
42797
|
+
if (aligned && prior) {
|
|
42798
|
+
for (let index = 0;index < reusedPrefix; index += 1) {
|
|
42799
|
+
digests.push(prior.digests[index]);
|
|
42800
|
+
}
|
|
42801
|
+
}
|
|
42802
|
+
for (let index = reusedPrefix;index < entries.length; index += 1) {
|
|
42803
|
+
digests.push(lkgContentDigestFromFields(entries[index]?.fields ?? []));
|
|
42804
|
+
}
|
|
42805
|
+
return { digests, reusedPrefix };
|
|
42806
|
+
}
|
|
42329
42807
|
function lkgContentDigest(message) {
|
|
42330
42808
|
const fields = lkgContentFields(message);
|
|
42331
42809
|
return fields ? lkgContentDigestFromFields(fields) : null;
|
|
@@ -42335,7 +42813,7 @@ function touch(sessionId, entry) {
|
|
|
42335
42813
|
slots.set(sessionId, entry);
|
|
42336
42814
|
}
|
|
42337
42815
|
function captureSlot(sessionId, slot) {
|
|
42338
|
-
if (slot.inputContentDigests.length !== slot.inputIdSeq.length || slot.inputContentDigests.some((digest) => digest.length === 0)) {
|
|
42816
|
+
if (slot.inputContentDigests.length !== slot.inputIdSeq.length || slot.inputContentDigests.some((digest) => digest.length === 0) || slot.inputContentSignatures !== undefined && (slot.inputContentSignatures.length !== slot.inputIdSeq.length || slot.inputContentSignatures.some((signature) => signature.length === 0))) {
|
|
42339
42817
|
return false;
|
|
42340
42818
|
}
|
|
42341
42819
|
const bytes = slotBytes(slot);
|
|
@@ -42368,7 +42846,8 @@ function captureSlot(sessionId, slot) {
|
|
|
42368
42846
|
slot: {
|
|
42369
42847
|
...slot,
|
|
42370
42848
|
inputIdSeq: [...slot.inputIdSeq],
|
|
42371
|
-
inputContentDigests: [...slot.inputContentDigests]
|
|
42849
|
+
inputContentDigests: [...slot.inputContentDigests],
|
|
42850
|
+
inputContentSignatures: slot.inputContentSignatures ? [...slot.inputContentSignatures] : undefined
|
|
42372
42851
|
},
|
|
42373
42852
|
bytes
|
|
42374
42853
|
};
|
|
@@ -42384,7 +42863,8 @@ function getSlot(sessionId) {
|
|
|
42384
42863
|
return {
|
|
42385
42864
|
...entry.slot,
|
|
42386
42865
|
inputIdSeq: [...entry.slot.inputIdSeq],
|
|
42387
|
-
inputContentDigests: [...entry.slot.inputContentDigests]
|
|
42866
|
+
inputContentDigests: [...entry.slot.inputContentDigests],
|
|
42867
|
+
inputContentSignatures: entry.slot.inputContentSignatures ? [...entry.slot.inputContentSignatures] : undefined
|
|
42388
42868
|
};
|
|
42389
42869
|
}
|
|
42390
42870
|
function dropSlot(sessionId, _reason) {
|
|
@@ -42654,4 +43134,4 @@ async function runUpgradeMemoryMigration(ctx, sessionId, migrationDirectory) {
|
|
|
42654
43134
|
}
|
|
42655
43135
|
}
|
|
42656
43136
|
|
|
42657
|
-
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, 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, 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, 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, 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, getActiveTagTokenAggregate, AGE_RECLAIM_MIN_TOKENS, getOldestActiveUnprotectedToolTags, getActiveToolTagsForAgeReclaim, getTriggerTagTokenUpperBound, getActiveTagTokenTotalsByMessage, tagTokenCountIsNull, backfillTagTokenCounts, insertTag, updateTagStatus, updateTagDropMode, updateCavemanDepth, updateTagMessageId, deleteTagsByMessageId, getMaxTagNumberBySession, getTagNumberByMessageId, deriveTagLoadFloor, getTagsBySession, getActiveTagsBySession, 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, 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, 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,
|
|
43137
|
+
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, 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, 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, getActiveTagTokenAggregate, AGE_RECLAIM_MIN_TOKENS, getOldestActiveUnprotectedToolTags, getActiveToolTagsForAgeReclaim, getTriggerTagTokenUpperBound, getActiveTagTokenTotalsByMessage, tagTokenCountIsNull, backfillTagTokenCounts, insertTag, updateTagStatus, updateTagDropMode, updateCavemanDepth, updateTagMessageId, deleteTagsByMessageId, getMaxTagNumberBySession, getTagNumberByMessageId, deriveTagLoadFloor, getTagsBySession, getActiveTagsBySession, 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 };
|