@cortexkit/pi-magic-context 0.21.6 → 0.21.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +1317 -358
- package/dist/subagent-entry.js +343 -74
- package/package.json +1 -1
package/dist/subagent-entry.js
CHANGED
|
@@ -8909,6 +8909,65 @@ var MIGRATIONS = [
|
|
|
8909
8909
|
db.exec("ALTER TABLE session_meta ADD COLUMN pending_pi_compaction_marker_state TEXT");
|
|
8910
8910
|
}
|
|
8911
8911
|
}
|
|
8912
|
+
},
|
|
8913
|
+
{
|
|
8914
|
+
version: 19,
|
|
8915
|
+
description: "Add compartment state lease table",
|
|
8916
|
+
up: (db) => {
|
|
8917
|
+
db.exec(`
|
|
8918
|
+
CREATE TABLE IF NOT EXISTS compartment_state_lease (
|
|
8919
|
+
session_id TEXT PRIMARY KEY NOT NULL,
|
|
8920
|
+
holder_id TEXT NOT NULL,
|
|
8921
|
+
acquired_at INTEGER NOT NULL,
|
|
8922
|
+
expires_at INTEGER NOT NULL
|
|
8923
|
+
);
|
|
8924
|
+
CREATE INDEX IF NOT EXISTS idx_compartment_state_lease_expires
|
|
8925
|
+
ON compartment_state_lease(expires_at);
|
|
8926
|
+
`);
|
|
8927
|
+
}
|
|
8928
|
+
},
|
|
8929
|
+
{
|
|
8930
|
+
version: 20,
|
|
8931
|
+
description: "Add subagent invocation token accounting",
|
|
8932
|
+
up: (db) => {
|
|
8933
|
+
db.exec(`
|
|
8934
|
+
CREATE TABLE IF NOT EXISTS subagent_invocations (
|
|
8935
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
8936
|
+
session_id TEXT NOT NULL,
|
|
8937
|
+
harness TEXT NOT NULL,
|
|
8938
|
+
subagent TEXT NOT NULL,
|
|
8939
|
+
task TEXT,
|
|
8940
|
+
provider_id TEXT,
|
|
8941
|
+
model_id TEXT,
|
|
8942
|
+
started_at INTEGER NOT NULL,
|
|
8943
|
+
ended_at INTEGER,
|
|
8944
|
+
status TEXT NOT NULL,
|
|
8945
|
+
input_tokens INTEGER NOT NULL DEFAULT 0,
|
|
8946
|
+
output_tokens INTEGER NOT NULL DEFAULT 0,
|
|
8947
|
+
cache_read_tokens INTEGER NOT NULL DEFAULT 0,
|
|
8948
|
+
cache_write_tokens INTEGER NOT NULL DEFAULT 0,
|
|
8949
|
+
error TEXT,
|
|
8950
|
+
parent_invocation_id INTEGER
|
|
8951
|
+
);
|
|
8952
|
+
CREATE INDEX IF NOT EXISTS idx_sai_session_started
|
|
8953
|
+
ON subagent_invocations(session_id, started_at DESC);
|
|
8954
|
+
CREATE INDEX IF NOT EXISTS idx_sai_subagent
|
|
8955
|
+
ON subagent_invocations(subagent, started_at DESC);
|
|
8956
|
+
`);
|
|
8957
|
+
}
|
|
8958
|
+
},
|
|
8959
|
+
{
|
|
8960
|
+
version: 21,
|
|
8961
|
+
description: "Add session lifetime work metrics",
|
|
8962
|
+
up: (db) => {
|
|
8963
|
+
const cols = db.prepare("PRAGMA table_info(session_meta)").all();
|
|
8964
|
+
if (!cols.some((c) => c.name === "new_work_tokens")) {
|
|
8965
|
+
db.exec("ALTER TABLE session_meta ADD COLUMN new_work_tokens INTEGER NOT NULL DEFAULT 0");
|
|
8966
|
+
}
|
|
8967
|
+
if (!cols.some((c) => c.name === "total_input_tokens")) {
|
|
8968
|
+
db.exec("ALTER TABLE session_meta ADD COLUMN total_input_tokens INTEGER NOT NULL DEFAULT 0");
|
|
8969
|
+
}
|
|
8970
|
+
}
|
|
8912
8971
|
}
|
|
8913
8972
|
];
|
|
8914
8973
|
function ensureMigrationsTable(db) {
|
|
@@ -141956,6 +142015,15 @@ function initializeDatabase(db) {
|
|
|
141956
142015
|
);
|
|
141957
142016
|
CREATE INDEX IF NOT EXISTS idx_compartments_session ON compartments(session_id);
|
|
141958
142017
|
|
|
142018
|
+
CREATE TABLE IF NOT EXISTS compartment_state_lease (
|
|
142019
|
+
session_id TEXT PRIMARY KEY NOT NULL,
|
|
142020
|
+
holder_id TEXT NOT NULL,
|
|
142021
|
+
acquired_at INTEGER NOT NULL,
|
|
142022
|
+
expires_at INTEGER NOT NULL
|
|
142023
|
+
);
|
|
142024
|
+
CREATE INDEX IF NOT EXISTS idx_compartment_state_lease_expires
|
|
142025
|
+
ON compartment_state_lease(expires_at);
|
|
142026
|
+
|
|
141959
142027
|
CREATE TABLE IF NOT EXISTS compression_depth (
|
|
141960
142028
|
session_id TEXT NOT NULL,
|
|
141961
142029
|
message_ordinal INTEGER NOT NULL,
|
|
@@ -142152,12 +142220,37 @@ CREATE INDEX IF NOT EXISTS idx_dream_queue_pending ON dream_queue(started_at, en
|
|
|
142152
142220
|
-- is a valid JSON blob written via setPendingPiCompactionMarkerState.
|
|
142153
142221
|
-- Excluded from healNullTextColumns.
|
|
142154
142222
|
pending_pi_compaction_marker_state TEXT,
|
|
142223
|
+
new_work_tokens INTEGER NOT NULL DEFAULT 0,
|
|
142224
|
+
total_input_tokens INTEGER NOT NULL DEFAULT 0,
|
|
142155
142225
|
-- deferred_execute_state: intentionally NULLABLE without a default.
|
|
142156
142226
|
-- Absence is SQL NULL; presence is a JSON blob written via
|
|
142157
142227
|
-- setDeferredExecutePendingIfAbsent. Excluded from healNullTextColumns.
|
|
142158
142228
|
deferred_execute_state TEXT
|
|
142159
142229
|
);
|
|
142160
142230
|
|
|
142231
|
+
CREATE TABLE IF NOT EXISTS subagent_invocations (
|
|
142232
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
142233
|
+
session_id TEXT NOT NULL,
|
|
142234
|
+
harness TEXT NOT NULL,
|
|
142235
|
+
subagent TEXT NOT NULL,
|
|
142236
|
+
task TEXT,
|
|
142237
|
+
provider_id TEXT,
|
|
142238
|
+
model_id TEXT,
|
|
142239
|
+
started_at INTEGER NOT NULL,
|
|
142240
|
+
ended_at INTEGER,
|
|
142241
|
+
status TEXT NOT NULL,
|
|
142242
|
+
input_tokens INTEGER NOT NULL DEFAULT 0,
|
|
142243
|
+
output_tokens INTEGER NOT NULL DEFAULT 0,
|
|
142244
|
+
cache_read_tokens INTEGER NOT NULL DEFAULT 0,
|
|
142245
|
+
cache_write_tokens INTEGER NOT NULL DEFAULT 0,
|
|
142246
|
+
error TEXT,
|
|
142247
|
+
parent_invocation_id INTEGER
|
|
142248
|
+
);
|
|
142249
|
+
CREATE INDEX IF NOT EXISTS idx_sai_session_started
|
|
142250
|
+
ON subagent_invocations(session_id, started_at DESC);
|
|
142251
|
+
CREATE INDEX IF NOT EXISTS idx_sai_subagent
|
|
142252
|
+
ON subagent_invocations(subagent, started_at DESC);
|
|
142253
|
+
|
|
142161
142254
|
CREATE INDEX IF NOT EXISTS idx_tags_session_tag_number ON tags(session_id, tag_number);
|
|
142162
142255
|
CREATE INDEX IF NOT EXISTS idx_tags_session_message_id ON tags(session_id, message_id);
|
|
142163
142256
|
CREATE INDEX IF NOT EXISTS idx_pending_ops_session ON pending_ops(session_id);
|
|
@@ -142249,6 +142342,8 @@ CREATE INDEX IF NOT EXISTS idx_dream_queue_pending ON dream_queue(started_at, en
|
|
|
142249
142342
|
ensureColumn(db, "session_meta", "needs_emergency_recovery", "INTEGER DEFAULT 0");
|
|
142250
142343
|
ensureColumn(db, "session_meta", "pending_compaction_marker_state", "TEXT");
|
|
142251
142344
|
ensureColumn(db, "session_meta", "pending_pi_compaction_marker_state", "TEXT");
|
|
142345
|
+
ensureColumn(db, "session_meta", "new_work_tokens", "INTEGER NOT NULL DEFAULT 0");
|
|
142346
|
+
ensureColumn(db, "session_meta", "total_input_tokens", "INTEGER NOT NULL DEFAULT 0");
|
|
142252
142347
|
ensureColumn(db, "session_meta", "deferred_execute_state", "TEXT");
|
|
142253
142348
|
ensureColumn(db, "tags", "harness", "TEXT NOT NULL DEFAULT 'opencode'");
|
|
142254
142349
|
ensureColumn(db, "pending_ops", "harness", "TEXT NOT NULL DEFAULT 'opencode'");
|
|
@@ -142312,7 +142407,9 @@ function healNullIntegerColumns(db) {
|
|
|
142312
142407
|
["tool_call_tokens", 0],
|
|
142313
142408
|
["note_nudge_trigger_pending", 0],
|
|
142314
142409
|
["observed_safe_input_tokens", 0],
|
|
142315
|
-
["cache_alert_sent", 0]
|
|
142410
|
+
["cache_alert_sent", 0],
|
|
142411
|
+
["new_work_tokens", 0],
|
|
142412
|
+
["total_input_tokens", 0]
|
|
142316
142413
|
];
|
|
142317
142414
|
for (const [column, fallback] of columns) {
|
|
142318
142415
|
try {
|
|
@@ -142384,6 +142481,56 @@ import { existsSync as existsSync6, readFileSync as readFileSync3 } from "node:f
|
|
|
142384
142481
|
import { homedir as homedir3 } from "node:os";
|
|
142385
142482
|
import { join as join6 } from "node:path";
|
|
142386
142483
|
|
|
142484
|
+
// ../plugin/src/config/agent-disable.ts
|
|
142485
|
+
function isDreamerRunnable(config) {
|
|
142486
|
+
return !!config.dreamer && config.dreamer.disable !== true;
|
|
142487
|
+
}
|
|
142488
|
+
function clonePlainObject(value) {
|
|
142489
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) {
|
|
142490
|
+
return;
|
|
142491
|
+
}
|
|
142492
|
+
return { ...value };
|
|
142493
|
+
}
|
|
142494
|
+
function migrateLegacyEnabledForAgent(args) {
|
|
142495
|
+
const agent = clonePlainObject(args.patched[args.agentName]);
|
|
142496
|
+
if (!agent || !("enabled" in agent))
|
|
142497
|
+
return;
|
|
142498
|
+
const enabled = agent.enabled;
|
|
142499
|
+
const disable = agent.disable;
|
|
142500
|
+
delete agent.enabled;
|
|
142501
|
+
if (args.agentName === "historian") {
|
|
142502
|
+
args.warnings.push('Removed invalid "historian.enabled" in-memory (run doctor to persist).');
|
|
142503
|
+
args.patched.historian = agent;
|
|
142504
|
+
return;
|
|
142505
|
+
}
|
|
142506
|
+
if (args.agentName === "dreamer") {
|
|
142507
|
+
if (disable !== true && enabled === false) {
|
|
142508
|
+
agent.disable = true;
|
|
142509
|
+
args.warnings.push('Migrated "dreamer.enabled=false" → "dreamer.disable=true" in-memory (run doctor to persist). This now also disables manual /ctx-dream; for manual-only remove disable and set schedule="".');
|
|
142510
|
+
}
|
|
142511
|
+
args.patched.dreamer = agent;
|
|
142512
|
+
return;
|
|
142513
|
+
}
|
|
142514
|
+
if (disable !== true && enabled === false) {
|
|
142515
|
+
agent.disable = true;
|
|
142516
|
+
args.warnings.push('Migrated "sidekick.enabled=false" → "sidekick.disable=true" in-memory (run doctor to persist).');
|
|
142517
|
+
}
|
|
142518
|
+
args.patched.sidekick = agent;
|
|
142519
|
+
}
|
|
142520
|
+
function migrateLegacyAgentEnabledInMemory(rawConfig, warnings) {
|
|
142521
|
+
const shouldPatch = ["dreamer", "sidekick", "historian"].some((key) => {
|
|
142522
|
+
const agent = rawConfig[key];
|
|
142523
|
+
return typeof agent === "object" && agent !== null && !Array.isArray(agent) && "enabled" in agent;
|
|
142524
|
+
});
|
|
142525
|
+
if (!shouldPatch)
|
|
142526
|
+
return rawConfig;
|
|
142527
|
+
const patched = { ...rawConfig };
|
|
142528
|
+
migrateLegacyEnabledForAgent({ patched, agentName: "dreamer", warnings });
|
|
142529
|
+
migrateLegacyEnabledForAgent({ patched, agentName: "sidekick", warnings });
|
|
142530
|
+
migrateLegacyEnabledForAgent({ patched, agentName: "historian", warnings });
|
|
142531
|
+
return patched;
|
|
142532
|
+
}
|
|
142533
|
+
|
|
142387
142534
|
// ../../node_modules/.bun/zod@4.4.3/node_modules/zod/v4/classic/external.js
|
|
142388
142535
|
var exports_external = {};
|
|
142389
142536
|
__export(exports_external, {
|
|
@@ -156723,7 +156870,6 @@ var DEFAULT_DREAMER_TASKS = [
|
|
|
156723
156870
|
];
|
|
156724
156871
|
var PiThinkingLevelSchema = exports_external.enum(["off", "minimal", "low", "medium", "high", "xhigh"]).optional();
|
|
156725
156872
|
var DreamerConfigSchema = AgentOverrideConfigSchema.merge(exports_external.object({
|
|
156726
|
-
enabled: exports_external.boolean().default(false),
|
|
156727
156873
|
schedule: exports_external.string().default("02:00-06:00"),
|
|
156728
156874
|
max_runtime_minutes: exports_external.number().min(10).default(120),
|
|
156729
156875
|
tasks: exports_external.array(DreamingTaskSchema).default(DEFAULT_DREAMER_TASKS),
|
|
@@ -156741,7 +156887,6 @@ var DreamerConfigSchema = AgentOverrideConfigSchema.merge(exports_external.objec
|
|
|
156741
156887
|
thinking_level: PiThinkingLevelSchema
|
|
156742
156888
|
}));
|
|
156743
156889
|
var SidekickConfigSchema = AgentOverrideConfigSchema.extend({
|
|
156744
|
-
enabled: exports_external.boolean().default(false),
|
|
156745
156890
|
timeout_ms: exports_external.number().default(30000),
|
|
156746
156891
|
system_prompt: exports_external.string().optional(),
|
|
156747
156892
|
thinking_level: PiThinkingLevelSchema
|
|
@@ -157131,9 +157276,11 @@ function mergeRawConfigs(base, override) {
|
|
|
157131
157276
|
return merged;
|
|
157132
157277
|
}
|
|
157133
157278
|
function parsePiConfig(rawConfig, recoveredTopLevelKeys = []) {
|
|
157134
|
-
const
|
|
157279
|
+
const preMigrationWarnings = [];
|
|
157280
|
+
const migrated = migrateLegacyAgentEnabledInMemory(rawConfig, preMigrationWarnings);
|
|
157281
|
+
const parsed = MagicContextConfigSchema.safeParse(migrated);
|
|
157135
157282
|
if (parsed.success) {
|
|
157136
|
-
return { config: parsed.data, warnings:
|
|
157283
|
+
return { config: parsed.data, warnings: preMigrationWarnings };
|
|
157137
157284
|
}
|
|
157138
157285
|
const defaults = MagicContextConfigSchema.parse({});
|
|
157139
157286
|
const errorPaths = new Set;
|
|
@@ -157143,8 +157290,8 @@ function parsePiConfig(rawConfig, recoveredTopLevelKeys = []) {
|
|
|
157143
157290
|
errorPaths.add(String(topKey));
|
|
157144
157291
|
}
|
|
157145
157292
|
}
|
|
157146
|
-
const patched = { ...
|
|
157147
|
-
const warnings = [];
|
|
157293
|
+
const patched = { ...migrated };
|
|
157294
|
+
const warnings = [...preMigrationWarnings];
|
|
157148
157295
|
for (const key of errorPaths) {
|
|
157149
157296
|
recoveredTopLevelKeys.push(key);
|
|
157150
157297
|
const isAgentConfig = key === "historian" || key === "dreamer" || key === "sidekick";
|
|
@@ -163148,7 +163295,7 @@ function convertEntriesToRawMessages(entries) {
|
|
|
163148
163295
|
if (pendingToolParts.length > 0) {
|
|
163149
163296
|
result.push({
|
|
163150
163297
|
ordinal: nextOrdinal++,
|
|
163151
|
-
id: pendingFirstRealId
|
|
163298
|
+
id: `synth-user-${pendingFirstRealId}`,
|
|
163152
163299
|
role: "user",
|
|
163153
163300
|
parts: pendingToolParts
|
|
163154
163301
|
});
|
|
@@ -163173,7 +163320,7 @@ function convertEntriesToRawMessages(entries) {
|
|
|
163173
163320
|
if (pendingToolParts.length > 0) {
|
|
163174
163321
|
result.push({
|
|
163175
163322
|
ordinal: nextOrdinal,
|
|
163176
|
-
id: pendingFirstRealId
|
|
163323
|
+
id: `synth-user-${pendingFirstRealId}`,
|
|
163177
163324
|
role: "user",
|
|
163178
163325
|
parts: pendingToolParts
|
|
163179
163326
|
});
|
|
@@ -163325,6 +163472,99 @@ function createCtxExpandTool(_deps) {
|
|
|
163325
163472
|
}
|
|
163326
163473
|
};
|
|
163327
163474
|
}
|
|
163475
|
+
// ../plugin/src/features/magic-context/compartment-lease.ts
|
|
163476
|
+
var COMPARTMENT_LEASE_TTL_MS = 5 * 60 * 1000;
|
|
163477
|
+
var COMPARTMENT_LEASE_RENEWAL_MS = 60 * 1000;
|
|
163478
|
+
function acquireCompartmentLease(db, sessionId, holderId) {
|
|
163479
|
+
const acquiredAt = Date.now();
|
|
163480
|
+
const expiresAt = acquiredAt + COMPARTMENT_LEASE_TTL_MS;
|
|
163481
|
+
const result = db.prepare(`INSERT INTO compartment_state_lease (session_id, holder_id, acquired_at, expires_at)
|
|
163482
|
+
VALUES (?, ?, ?, ?)
|
|
163483
|
+
ON CONFLICT(session_id) DO UPDATE SET
|
|
163484
|
+
holder_id = excluded.holder_id,
|
|
163485
|
+
acquired_at = excluded.acquired_at,
|
|
163486
|
+
expires_at = excluded.expires_at
|
|
163487
|
+
WHERE compartment_state_lease.holder_id = excluded.holder_id
|
|
163488
|
+
OR compartment_state_lease.expires_at <= ?`).run(sessionId, holderId, acquiredAt, expiresAt, acquiredAt);
|
|
163489
|
+
if (result.changes !== 1) {
|
|
163490
|
+
return null;
|
|
163491
|
+
}
|
|
163492
|
+
return { sessionId, holderId, acquiredAt, expiresAt };
|
|
163493
|
+
}
|
|
163494
|
+
function renewCompartmentLease(db, sessionId, holderId) {
|
|
163495
|
+
const now = Date.now();
|
|
163496
|
+
const expiresAt = now + COMPARTMENT_LEASE_TTL_MS;
|
|
163497
|
+
const result = db.prepare(`UPDATE compartment_state_lease
|
|
163498
|
+
SET expires_at = ?, acquired_at = ?
|
|
163499
|
+
WHERE session_id = ? AND holder_id = ? AND expires_at > ?`).run(expiresAt, now, sessionId, holderId, now);
|
|
163500
|
+
return result.changes === 1;
|
|
163501
|
+
}
|
|
163502
|
+
function releaseCompartmentLease(db, sessionId, holderId) {
|
|
163503
|
+
db.prepare("DELETE FROM compartment_state_lease WHERE session_id = ? AND holder_id = ?").run(sessionId, holderId);
|
|
163504
|
+
}
|
|
163505
|
+
function isCompartmentLeaseHeld(db, sessionId, holderId) {
|
|
163506
|
+
const row = db.prepare("SELECT 1 FROM compartment_state_lease WHERE session_id = ? AND holder_id = ? AND expires_at > ?").get(sessionId, holderId, Date.now());
|
|
163507
|
+
return row != null;
|
|
163508
|
+
}
|
|
163509
|
+
|
|
163510
|
+
// ../plugin/src/features/magic-context/compression-depth-storage.ts
|
|
163511
|
+
var incrementDepthStatements = new WeakMap;
|
|
163512
|
+
var totalDepthStatements = new WeakMap;
|
|
163513
|
+
var maxDepthStatements = new WeakMap;
|
|
163514
|
+
var clearDepthStatements = new WeakMap;
|
|
163515
|
+
function getIncrementDepthStatement(db) {
|
|
163516
|
+
let stmt = incrementDepthStatements.get(db);
|
|
163517
|
+
if (!stmt) {
|
|
163518
|
+
stmt = db.prepare("INSERT INTO compression_depth (session_id, message_ordinal, depth, harness) VALUES (?, ?, 1, ?) ON CONFLICT(session_id, message_ordinal) DO UPDATE SET depth = depth + 1");
|
|
163519
|
+
incrementDepthStatements.set(db, stmt);
|
|
163520
|
+
}
|
|
163521
|
+
return stmt;
|
|
163522
|
+
}
|
|
163523
|
+
function getTotalDepthStatement(db) {
|
|
163524
|
+
let stmt = totalDepthStatements.get(db);
|
|
163525
|
+
if (!stmt) {
|
|
163526
|
+
stmt = db.prepare("SELECT COALESCE(SUM(depth), 0) AS total_depth FROM compression_depth WHERE session_id = ? AND message_ordinal BETWEEN ? AND ?");
|
|
163527
|
+
totalDepthStatements.set(db, stmt);
|
|
163528
|
+
}
|
|
163529
|
+
return stmt;
|
|
163530
|
+
}
|
|
163531
|
+
function getClearDepthStatement(db) {
|
|
163532
|
+
let stmt = clearDepthStatements.get(db);
|
|
163533
|
+
if (!stmt) {
|
|
163534
|
+
stmt = db.prepare("DELETE FROM compression_depth WHERE session_id = ?");
|
|
163535
|
+
clearDepthStatements.set(db, stmt);
|
|
163536
|
+
}
|
|
163537
|
+
return stmt;
|
|
163538
|
+
}
|
|
163539
|
+
function incrementCompressionDepth(db, sessionId, startOrdinal, endOrdinal) {
|
|
163540
|
+
if (endOrdinal < startOrdinal) {
|
|
163541
|
+
return;
|
|
163542
|
+
}
|
|
163543
|
+
db.transaction(() => {
|
|
163544
|
+
const stmt = getIncrementDepthStatement(db);
|
|
163545
|
+
for (let ordinal = startOrdinal;ordinal <= endOrdinal; ordinal += 1) {
|
|
163546
|
+
stmt.run(sessionId, ordinal, getHarness());
|
|
163547
|
+
}
|
|
163548
|
+
})();
|
|
163549
|
+
}
|
|
163550
|
+
function getAverageCompressionDepth(db, sessionId, startOrdinal, endOrdinal) {
|
|
163551
|
+
if (endOrdinal < startOrdinal) {
|
|
163552
|
+
return 0;
|
|
163553
|
+
}
|
|
163554
|
+
const row = getTotalDepthStatement(db).get(sessionId, startOrdinal, endOrdinal);
|
|
163555
|
+
const totalDepth = typeof row?.total_depth === "number" ? row.total_depth : 0;
|
|
163556
|
+
const messageCount = endOrdinal - startOrdinal + 1;
|
|
163557
|
+
return totalDepth / messageCount;
|
|
163558
|
+
}
|
|
163559
|
+
function clearCompressionDepth(db, sessionId) {
|
|
163560
|
+
getClearDepthStatement(db).run(sessionId);
|
|
163561
|
+
}
|
|
163562
|
+
function clearCompressionDepthRange(db, sessionId, startOrdinal, endOrdinal) {
|
|
163563
|
+
if (endOrdinal < startOrdinal) {
|
|
163564
|
+
return;
|
|
163565
|
+
}
|
|
163566
|
+
db.prepare("DELETE FROM compression_depth WHERE session_id = ? AND message_ordinal BETWEEN ? AND ?").run(sessionId, startOrdinal, endOrdinal);
|
|
163567
|
+
}
|
|
163328
163568
|
|
|
163329
163569
|
// ../plugin/src/features/magic-context/compartment-storage.ts
|
|
163330
163570
|
var insertCompartmentStatements = new WeakMap;
|
|
@@ -163435,6 +163675,38 @@ function replaceAllCompartmentState(db, sessionId, compartments, facts) {
|
|
|
163435
163675
|
db.prepare("UPDATE session_meta SET memory_block_cache = '', memory_block_ids = '' WHERE session_id = ?").run(sessionId);
|
|
163436
163676
|
})();
|
|
163437
163677
|
}
|
|
163678
|
+
function replaceAllCompartmentStateAndBumpDepth(db, holderId, sessionId, compartments, facts, depthStartOrdinal, depthEndOrdinal) {
|
|
163679
|
+
const now = Date.now();
|
|
163680
|
+
db.exec("BEGIN IMMEDIATE");
|
|
163681
|
+
let finished = false;
|
|
163682
|
+
try {
|
|
163683
|
+
if (!isCompartmentLeaseHeld(db, sessionId, holderId)) {
|
|
163684
|
+
db.exec("ROLLBACK");
|
|
163685
|
+
finished = true;
|
|
163686
|
+
return false;
|
|
163687
|
+
}
|
|
163688
|
+
db.prepare("DELETE FROM compartments WHERE session_id = ?").run(sessionId);
|
|
163689
|
+
db.prepare("DELETE FROM session_facts WHERE session_id = ?").run(sessionId);
|
|
163690
|
+
insertCompartmentRows(db, sessionId, compartments, now);
|
|
163691
|
+
insertFactRows(db, sessionId, facts, now);
|
|
163692
|
+
db.prepare("UPDATE session_meta SET memory_block_cache = '', memory_block_ids = '' WHERE session_id = ?").run(sessionId);
|
|
163693
|
+
if (depthEndOrdinal >= depthStartOrdinal) {
|
|
163694
|
+
const stmt = getIncrementDepthStatement(db);
|
|
163695
|
+
for (let ordinal = depthStartOrdinal;ordinal <= depthEndOrdinal; ordinal += 1) {
|
|
163696
|
+
stmt.run(sessionId, ordinal, getHarness());
|
|
163697
|
+
}
|
|
163698
|
+
}
|
|
163699
|
+
db.exec("COMMIT");
|
|
163700
|
+
finished = true;
|
|
163701
|
+
return true;
|
|
163702
|
+
} finally {
|
|
163703
|
+
if (!finished) {
|
|
163704
|
+
try {
|
|
163705
|
+
db.exec("ROLLBACK");
|
|
163706
|
+
} catch {}
|
|
163707
|
+
}
|
|
163708
|
+
}
|
|
163709
|
+
}
|
|
163438
163710
|
function buildCompartmentBlock(compartments, facts, memoryBlock, dateRanges) {
|
|
163439
163711
|
const lines = [];
|
|
163440
163712
|
if (memoryBlock) {
|
|
@@ -163502,12 +163774,37 @@ function getRecompStaging(db, sessionId) {
|
|
|
163502
163774
|
lastEndMessage: lastEnd
|
|
163503
163775
|
};
|
|
163504
163776
|
}
|
|
163505
|
-
function promoteRecompStaging(db, sessionId) {
|
|
163777
|
+
function promoteRecompStaging(db, sessionId, holderId) {
|
|
163506
163778
|
const now = Date.now();
|
|
163507
|
-
|
|
163779
|
+
if (!holderId) {
|
|
163780
|
+
return db.transaction(() => {
|
|
163781
|
+
const staging = getRecompStaging(db, sessionId);
|
|
163782
|
+
if (!staging || staging.compartments.length === 0)
|
|
163783
|
+
return null;
|
|
163784
|
+
db.prepare("DELETE FROM compartments WHERE session_id = ?").run(sessionId);
|
|
163785
|
+
db.prepare("DELETE FROM session_facts WHERE session_id = ?").run(sessionId);
|
|
163786
|
+
insertCompartmentRows(db, sessionId, staging.compartments, now);
|
|
163787
|
+
insertFactRows(db, sessionId, staging.facts, now);
|
|
163788
|
+
db.prepare("DELETE FROM recomp_compartments WHERE session_id = ?").run(sessionId);
|
|
163789
|
+
db.prepare("DELETE FROM recomp_facts WHERE session_id = ?").run(sessionId);
|
|
163790
|
+
db.prepare("UPDATE session_meta SET memory_block_cache = '', memory_block_ids = '' WHERE session_id = ?").run(sessionId);
|
|
163791
|
+
return { compartments: staging.compartments, facts: staging.facts };
|
|
163792
|
+
})();
|
|
163793
|
+
}
|
|
163794
|
+
db.exec("BEGIN IMMEDIATE");
|
|
163795
|
+
let finished = false;
|
|
163796
|
+
try {
|
|
163797
|
+
if (!isCompartmentLeaseHeld(db, sessionId, holderId)) {
|
|
163798
|
+
db.exec("ROLLBACK");
|
|
163799
|
+
finished = true;
|
|
163800
|
+
return null;
|
|
163801
|
+
}
|
|
163508
163802
|
const staging = getRecompStaging(db, sessionId);
|
|
163509
|
-
if (!staging || staging.compartments.length === 0)
|
|
163803
|
+
if (!staging || staging.compartments.length === 0) {
|
|
163804
|
+
db.exec("ROLLBACK");
|
|
163805
|
+
finished = true;
|
|
163510
163806
|
return null;
|
|
163807
|
+
}
|
|
163511
163808
|
db.prepare("DELETE FROM compartments WHERE session_id = ?").run(sessionId);
|
|
163512
163809
|
db.prepare("DELETE FROM session_facts WHERE session_id = ?").run(sessionId);
|
|
163513
163810
|
insertCompartmentRows(db, sessionId, staging.compartments, now);
|
|
@@ -163515,8 +163812,16 @@ function promoteRecompStaging(db, sessionId) {
|
|
|
163515
163812
|
db.prepare("DELETE FROM recomp_compartments WHERE session_id = ?").run(sessionId);
|
|
163516
163813
|
db.prepare("DELETE FROM recomp_facts WHERE session_id = ?").run(sessionId);
|
|
163517
163814
|
db.prepare("UPDATE session_meta SET memory_block_cache = '', memory_block_ids = '' WHERE session_id = ?").run(sessionId);
|
|
163815
|
+
db.exec("COMMIT");
|
|
163816
|
+
finished = true;
|
|
163518
163817
|
return { compartments: staging.compartments, facts: staging.facts };
|
|
163519
|
-
}
|
|
163818
|
+
} finally {
|
|
163819
|
+
if (!finished) {
|
|
163820
|
+
try {
|
|
163821
|
+
db.exec("ROLLBACK");
|
|
163822
|
+
} catch {}
|
|
163823
|
+
}
|
|
163824
|
+
}
|
|
163520
163825
|
}
|
|
163521
163826
|
function invalidateAllMemoryBlockCaches(db) {
|
|
163522
163827
|
try {
|
|
@@ -164376,64 +164681,6 @@ function createCtxMemoryTool(deps) {
|
|
|
164376
164681
|
}
|
|
164377
164682
|
};
|
|
164378
164683
|
}
|
|
164379
|
-
// ../plugin/src/features/magic-context/compression-depth-storage.ts
|
|
164380
|
-
var incrementDepthStatements = new WeakMap;
|
|
164381
|
-
var totalDepthStatements = new WeakMap;
|
|
164382
|
-
var maxDepthStatements = new WeakMap;
|
|
164383
|
-
var clearDepthStatements = new WeakMap;
|
|
164384
|
-
function getIncrementDepthStatement(db) {
|
|
164385
|
-
let stmt = incrementDepthStatements.get(db);
|
|
164386
|
-
if (!stmt) {
|
|
164387
|
-
stmt = db.prepare("INSERT INTO compression_depth (session_id, message_ordinal, depth, harness) VALUES (?, ?, 1, ?) ON CONFLICT(session_id, message_ordinal) DO UPDATE SET depth = depth + 1");
|
|
164388
|
-
incrementDepthStatements.set(db, stmt);
|
|
164389
|
-
}
|
|
164390
|
-
return stmt;
|
|
164391
|
-
}
|
|
164392
|
-
function getTotalDepthStatement(db) {
|
|
164393
|
-
let stmt = totalDepthStatements.get(db);
|
|
164394
|
-
if (!stmt) {
|
|
164395
|
-
stmt = db.prepare("SELECT COALESCE(SUM(depth), 0) AS total_depth FROM compression_depth WHERE session_id = ? AND message_ordinal BETWEEN ? AND ?");
|
|
164396
|
-
totalDepthStatements.set(db, stmt);
|
|
164397
|
-
}
|
|
164398
|
-
return stmt;
|
|
164399
|
-
}
|
|
164400
|
-
function getClearDepthStatement(db) {
|
|
164401
|
-
let stmt = clearDepthStatements.get(db);
|
|
164402
|
-
if (!stmt) {
|
|
164403
|
-
stmt = db.prepare("DELETE FROM compression_depth WHERE session_id = ?");
|
|
164404
|
-
clearDepthStatements.set(db, stmt);
|
|
164405
|
-
}
|
|
164406
|
-
return stmt;
|
|
164407
|
-
}
|
|
164408
|
-
function incrementCompressionDepth(db, sessionId, startOrdinal, endOrdinal) {
|
|
164409
|
-
if (endOrdinal < startOrdinal) {
|
|
164410
|
-
return;
|
|
164411
|
-
}
|
|
164412
|
-
db.transaction(() => {
|
|
164413
|
-
const stmt = getIncrementDepthStatement(db);
|
|
164414
|
-
for (let ordinal = startOrdinal;ordinal <= endOrdinal; ordinal += 1) {
|
|
164415
|
-
stmt.run(sessionId, ordinal, getHarness());
|
|
164416
|
-
}
|
|
164417
|
-
})();
|
|
164418
|
-
}
|
|
164419
|
-
function getAverageCompressionDepth(db, sessionId, startOrdinal, endOrdinal) {
|
|
164420
|
-
if (endOrdinal < startOrdinal) {
|
|
164421
|
-
return 0;
|
|
164422
|
-
}
|
|
164423
|
-
const row = getTotalDepthStatement(db).get(sessionId, startOrdinal, endOrdinal);
|
|
164424
|
-
const totalDepth = typeof row?.total_depth === "number" ? row.total_depth : 0;
|
|
164425
|
-
const messageCount = endOrdinal - startOrdinal + 1;
|
|
164426
|
-
return totalDepth / messageCount;
|
|
164427
|
-
}
|
|
164428
|
-
function clearCompressionDepth(db, sessionId) {
|
|
164429
|
-
getClearDepthStatement(db).run(sessionId);
|
|
164430
|
-
}
|
|
164431
|
-
function clearCompressionDepthRange(db, sessionId, startOrdinal, endOrdinal) {
|
|
164432
|
-
if (endOrdinal < startOrdinal) {
|
|
164433
|
-
return;
|
|
164434
|
-
}
|
|
164435
|
-
db.prepare("DELETE FROM compression_depth WHERE session_id = ? AND message_ordinal BETWEEN ? AND ?").run(sessionId, startOrdinal, endOrdinal);
|
|
164436
|
-
}
|
|
164437
164684
|
// ../plugin/src/features/magic-context/message-index.ts
|
|
164438
164685
|
var lastIndexedStatements = new WeakMap;
|
|
164439
164686
|
var insertMessageStatements = new WeakMap;
|
|
@@ -165077,6 +165324,7 @@ function getPendingPiCompactionMarkerState(db, sessionId) {
|
|
|
165077
165324
|
return parsed;
|
|
165078
165325
|
}
|
|
165079
165326
|
} catch {}
|
|
165327
|
+
db.prepare("UPDATE session_meta SET pending_pi_compaction_marker_state = NULL WHERE session_id = ? AND pending_pi_compaction_marker_state = ?").run(sessionId, raw);
|
|
165080
165328
|
return null;
|
|
165081
165329
|
}
|
|
165082
165330
|
function setPendingPiCompactionMarkerState(db, sessionId, state) {
|
|
@@ -165120,6 +165368,12 @@ function clearDeferredExecutePendingIfMatches(db, sessionId, expected) {
|
|
|
165120
165368
|
WHERE session_id = ? AND deferred_execute_state = ?`).run(sessionId, expectedBlob);
|
|
165121
165369
|
return result.changes > 0;
|
|
165122
165370
|
}
|
|
165371
|
+
function setSessionWorkMetrics(db, sessionId, newWorkTokens, totalInputTokens) {
|
|
165372
|
+
ensureSessionMetaRow(db, sessionId);
|
|
165373
|
+
db.prepare(`UPDATE session_meta
|
|
165374
|
+
SET new_work_tokens = ?, total_input_tokens = ?
|
|
165375
|
+
WHERE session_id = ?`).run(Math.max(0, Math.floor(newWorkTokens)), Math.max(0, Math.floor(totalInputTokens)), sessionId);
|
|
165376
|
+
}
|
|
165123
165377
|
// ../plugin/src/features/magic-context/resolve-subagent-fallback.ts
|
|
165124
165378
|
init_logger();
|
|
165125
165379
|
await init_read_session_db();
|
|
@@ -165435,6 +165689,19 @@ function getSourceContents(db, sessionId, tagIds) {
|
|
|
165435
165689
|
}
|
|
165436
165690
|
return sources;
|
|
165437
165691
|
}
|
|
165692
|
+
// ../plugin/src/features/magic-context/storage-subagent-invocations.ts
|
|
165693
|
+
function clampToken(value) {
|
|
165694
|
+
return Number.isFinite(value) && value > 0 ? Math.floor(value) : 0;
|
|
165695
|
+
}
|
|
165696
|
+
function recordSubagentInvocation(db, input) {
|
|
165697
|
+
const result = db.prepare(`INSERT INTO subagent_invocations (
|
|
165698
|
+
session_id, harness, subagent, task, provider_id, model_id,
|
|
165699
|
+
started_at, ended_at, status,
|
|
165700
|
+
input_tokens, output_tokens, cache_read_tokens, cache_write_tokens,
|
|
165701
|
+
error, parent_invocation_id
|
|
165702
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`).run(input.sessionId, input.harness, input.subagent, input.task ?? null, input.providerId ?? null, input.modelId ?? null, input.startedAt, input.endedAt, input.status, clampToken(input.inputTokens), clampToken(input.outputTokens), clampToken(input.cacheReadTokens), clampToken(input.cacheWriteTokens), input.error ?? null, input.parentInvocationId ?? null);
|
|
165703
|
+
return Number(result.lastInsertRowid);
|
|
165704
|
+
}
|
|
165438
165705
|
// ../plugin/src/features/magic-context/storage-tags.ts
|
|
165439
165706
|
var insertTagStatements = new WeakMap;
|
|
165440
165707
|
var updateTagStatusStatements = new WeakMap;
|
|
@@ -167367,8 +167634,7 @@ function magicContextSubagentExtension(pi) {
|
|
|
167367
167634
|
try {
|
|
167368
167635
|
const db = openDatabase();
|
|
167369
167636
|
if (!db) {
|
|
167370
|
-
|
|
167371
|
-
return;
|
|
167637
|
+
throw new Error("storage open failed; refusing to start without Magic Context tools");
|
|
167372
167638
|
}
|
|
167373
167639
|
openedDb = db;
|
|
167374
167640
|
const directory = process.cwd();
|
|
@@ -167382,7 +167648,10 @@ function magicContextSubagentExtension(pi) {
|
|
|
167382
167648
|
});
|
|
167383
167649
|
log(`[pi-subagent] registered tools: ctx_search, ctx_memory, ctx_note, ctx_expand` + ` (memory=${cfg.memory.enabled}, embedding=${cfg.embedding.provider !== "off"},` + ` git_commits=${cfg.experimental.git_commit_indexing.enabled}, dreamer_actions=${dreamerActionsEnabled})`);
|
|
167384
167650
|
} catch (err5) {
|
|
167385
|
-
|
|
167651
|
+
const message = err5 instanceof Error ? err5.message : String(err5);
|
|
167652
|
+
log(`[pi-subagent] startup failed: ${message}`);
|
|
167653
|
+
process.exitCode = 1;
|
|
167654
|
+
throw err5;
|
|
167386
167655
|
}
|
|
167387
167656
|
});
|
|
167388
167657
|
pi.on("session_shutdown", () => {
|
package/package.json
CHANGED