pi-mega-compact 0.7.7 → 0.7.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -12
- package/dist/extensions/dashboard-server/helpers.js +37 -0
- package/dist/extensions/dashboard-server/html/all-repos-tab.js +26 -0
- package/dist/extensions/dashboard-server/html/body-open.js +23 -0
- package/dist/extensions/dashboard-server/html/current-repo-tab.js +130 -0
- package/dist/extensions/dashboard-server/html/head-open.js +16 -0
- package/dist/extensions/dashboard-server/html/high-score-tab.js +25 -0
- package/dist/extensions/dashboard-server/html/repo-detail-modal.js +26 -0
- package/dist/extensions/dashboard-server/html/script.js +259 -0
- package/dist/extensions/dashboard-server/html/styles.js +103 -0
- package/dist/extensions/dashboard-server/html/summary-tab.js +19 -0
- package/dist/extensions/dashboard-server/html-template.js +41 -0
- package/dist/extensions/dashboard-server/html.js +756 -0
- package/dist/extensions/dashboard-server/index-reader.js +133 -0
- package/dist/extensions/dashboard-server/server.js +370 -0
- package/dist/extensions/dashboard-server/snapshot.js +43 -0
- package/dist/extensions/dashboard-server/state.js +30 -0
- package/dist/extensions/dashboard-server/types.js +5 -0
- package/dist/extensions/dashboard-server.js +7 -1315
- package/dist/extensions/mega-commands.js +162 -134
- package/dist/extensions/mega-compact.test.js +292 -24
- package/dist/extensions/mega-config.js +10 -0
- package/dist/extensions/mega-conflict-cmds.js +5 -1
- package/dist/extensions/mega-dashboard-cmds.js +29 -22
- package/dist/extensions/mega-db-cmds.js +11 -2
- package/dist/extensions/mega-events/agent-handlers.js +173 -0
- package/dist/extensions/mega-events/compact-handlers.js +133 -0
- package/dist/extensions/mega-events/context-handler.js +249 -0
- package/dist/extensions/mega-events/register.js +21 -0
- package/dist/extensions/mega-events/session-handlers.js +142 -0
- package/dist/extensions/mega-events.js +15 -652
- package/dist/extensions/mega-pipeline/compact.js +324 -0
- package/dist/extensions/mega-pipeline/memory-review.js +38 -0
- package/dist/extensions/mega-pipeline/recall.js +147 -0
- package/dist/extensions/mega-pipeline.js +9 -480
- package/dist/extensions/mega-runtime/helpers.js +40 -0
- package/dist/extensions/mega-runtime/query.js +29 -0
- package/dist/extensions/mega-runtime/state.js +711 -0
- package/dist/extensions/mega-runtime/widget.js +197 -0
- package/dist/extensions/mega-runtime.js +15 -932
- package/dist/src/store/sqlite/checkpoints.js +145 -0
- package/dist/src/store/sqlite/connection.js +35 -0
- package/dist/src/store/sqlite/dedup-mirror.js +64 -0
- package/dist/src/store/sqlite/foundation.js +38 -0
- package/dist/src/store/sqlite/global-index.js +224 -0
- package/dist/src/store/sqlite/index-store.js +167 -0
- package/dist/src/store/sqlite/maintenance.js +235 -0
- package/dist/src/store/sqlite/memories.js +164 -0
- package/dist/src/store/sqlite/memory.js +54 -0
- package/dist/src/store/sqlite/meta.js +82 -0
- package/dist/src/store/sqlite/minhash-lsh.js +47 -0
- package/dist/src/store/sqlite/model-snapshots.js +47 -0
- package/dist/src/store/sqlite/raptor.js +57 -0
- package/dist/src/store/sqlite/raw-transcript.js +134 -0
- package/dist/src/store/sqlite/schema.js +250 -0
- package/dist/src/store/sqlite/session-state.js +28 -0
- package/dist/src/store/sqlite/sessions.js +39 -0
- package/dist/src/store/sqlite/stats.js +66 -0
- package/dist/src/store/sqlite/transaction.js +19 -0
- package/dist/src/store/sqlite/utils.js +120 -0
- package/dist/src/store/sqlite.js +20 -1607
- package/dist/src/vectorStore/add.js +260 -0
- package/dist/src/vectorStore/dedup.js +52 -0
- package/dist/src/vectorStore/index.js +10 -0
- package/dist/src/vectorStore/queries.js +83 -0
- package/dist/src/vectorStore/search.js +95 -0
- package/dist/src/vectorStore/session.js +19 -0
- package/dist/src/vectorStore/store.js +105 -0
- package/dist/src/vectorStore/types.js +6 -0
- package/dist/src/vectorStore/utils.js +23 -0
- package/extensions/dashboard-server/html.ts +758 -0
- package/extensions/dashboard-server/index-reader.ts +130 -0
- package/extensions/dashboard-server/server.ts +358 -0
- package/extensions/dashboard-server/snapshot.ts +44 -0
- package/extensions/dashboard-server/state.ts +33 -0
- package/extensions/dashboard-server/types.ts +134 -0
- package/extensions/dashboard-server.ts +7 -1431
- package/extensions/mega-commands.ts +33 -10
- package/extensions/mega-compact.test.ts +453 -37
- package/extensions/mega-config.ts +22 -0
- package/extensions/mega-conflict-cmds.ts +6 -2
- package/extensions/mega-dashboard-cmds.ts +30 -23
- package/extensions/mega-db-cmds.ts +11 -3
- package/extensions/mega-events/agent-handlers.ts +214 -0
- package/extensions/mega-events/compact-handlers.ts +164 -0
- package/extensions/mega-events/context-handler.ts +290 -0
- package/extensions/mega-events/register.ts +37 -0
- package/extensions/mega-events/session-handlers.ts +165 -0
- package/extensions/mega-events.ts +15 -732
- package/extensions/mega-pipeline/compact.ts +366 -0
- package/extensions/mega-pipeline/memory-review.ts +46 -0
- package/extensions/mega-pipeline/recall.ts +165 -0
- package/extensions/mega-pipeline.ts +9 -537
- package/extensions/mega-runtime/helpers.ts +68 -0
- package/extensions/mega-runtime/query.ts +29 -0
- package/extensions/mega-runtime/state.ts +797 -0
- package/extensions/mega-runtime/widget.ts +258 -0
- package/extensions/mega-runtime.ts +15 -1076
- package/package.json +4 -3
- package/src/store/sqlite/checkpoints.ts +204 -0
- package/src/store/sqlite/dedup-mirror.ts +114 -0
- package/src/store/sqlite/foundation.ts +63 -0
- package/src/store/sqlite/global-index.ts +305 -0
- package/src/store/sqlite/maintenance.ts +294 -0
- package/src/store/sqlite/memories.ts +217 -0
- package/src/store/sqlite/meta.ts +108 -0
- package/src/store/sqlite/model-snapshots.ts +83 -0
- package/src/store/sqlite/raptor.ts +107 -0
- package/src/store/sqlite/raw-transcript.ts +221 -0
- package/src/store/sqlite/schema.ts +258 -0
- package/src/store/sqlite/session-state.ts +38 -0
- package/src/store/sqlite/stats.ts +127 -0
- package/src/store/sqlite/utils.ts +125 -0
- package/src/store/sqlite.ts +20 -2204
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import { normalizeSessionId } from "../../src/store.js";
|
|
2
|
+
import { autoMaintain } from "../../src/store/sqlite.js";
|
|
3
|
+
import { recentUserQuery, WIDGET_KEY, } from "../mega-runtime.js";
|
|
4
|
+
import { doRecall, doRecallAsync, } from "../mega-pipeline.js";
|
|
5
|
+
import { recallMemoriesAndInline } from "../../src/recall.js";
|
|
6
|
+
/** Register session lifecycle event handlers. */
|
|
7
|
+
export function registerSessionHandlers(pi, runtime, config) {
|
|
8
|
+
// Capture model/provider whenever it changes (drives real cost estimation).
|
|
9
|
+
pi.on("model_select", async (_event, ctx) => {
|
|
10
|
+
runtime.captureModel(ctx);
|
|
11
|
+
runtime.snapshot(ctx);
|
|
12
|
+
});
|
|
13
|
+
pi.on("session_start", async (event, ctx) => {
|
|
14
|
+
runtime.resetRuntime(ctx.sessionManager.getSessionId());
|
|
15
|
+
runtime.captureModel(ctx); // best-effort: ctx.model may be set by session start
|
|
16
|
+
runtime.setStatus(ctx, config.auto ? "mega-compact: ready" : "mega-compact: manual only");
|
|
17
|
+
// S21: clear any stale memory block from a prior session.
|
|
18
|
+
runtime.pendingMemoryRecallBlock = undefined;
|
|
19
|
+
// Auto-inline on resume/fork/continue: stage the most relevant checkpoints
|
|
20
|
+
// so the next before_agent_start prepends them to the system prompt.
|
|
21
|
+
// Triggered whenever this session already has persisted checkpoints AND a
|
|
22
|
+
// usable query — that covers reason "resume"/"fork" (explicit) and
|
|
23
|
+
// reason "startup" (e.g. `pi --continue`s an existing session, which still
|
|
24
|
+
// emits "startup" but with a populated message window). A brand-new empty
|
|
25
|
+
// session has no checkpoints, so it's naturally excluded.
|
|
26
|
+
if (config.autoInline) {
|
|
27
|
+
const sid = normalizeSessionId(ctx.sessionManager.getSessionId());
|
|
28
|
+
const query = recentUserQuery(ctx);
|
|
29
|
+
if (query && runtime.store.stats(sid).checkpointCount > 0) {
|
|
30
|
+
// S17: use the async variant on resume so cross-repo HNSW recall can
|
|
31
|
+
// augment when this repo's store is thin. session_start is an async-safe
|
|
32
|
+
// point (unlike the mid-turn context handler, which stays sync).
|
|
33
|
+
const r = await doRecallAsync(runtime, config, ctx, query, "resume", {
|
|
34
|
+
crossRepo: config.crossRepoEnabled,
|
|
35
|
+
});
|
|
36
|
+
if (!r.empty) {
|
|
37
|
+
runtime.pendingRecallBlock = r.block;
|
|
38
|
+
const crossLabel = r.toInject.some((h) => h.repoId)
|
|
39
|
+
? " (cross-repo)"
|
|
40
|
+
: "";
|
|
41
|
+
runtime.setStatus(ctx, `mega-compact: recalled ${r.toInject.length} chkpt${crossLabel}`);
|
|
42
|
+
runtime.logger.info("auto-inline", {
|
|
43
|
+
reason: event.reason,
|
|
44
|
+
query,
|
|
45
|
+
injected: r.toInject.map((h) => h.checkpoint.checkpointId),
|
|
46
|
+
crossRepo: r.toInject.some((h) => h.repoId),
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
// S21: parallel memory recall. Same async context so we can await without
|
|
51
|
+
// breaking the handler contract. Best-effort — never throws.
|
|
52
|
+
try {
|
|
53
|
+
const mr = await recallMemoriesAndInline({
|
|
54
|
+
query,
|
|
55
|
+
stateDir: runtime.getStateDir(),
|
|
56
|
+
limit: 5,
|
|
57
|
+
crossRepo: config.crossRepoEnabled,
|
|
58
|
+
crossRepoCosine: config.crossRepoCosine,
|
|
59
|
+
});
|
|
60
|
+
if (!mr.empty)
|
|
61
|
+
runtime.pendingMemoryRecallBlock = mr.block;
|
|
62
|
+
}
|
|
63
|
+
catch (err) {
|
|
64
|
+
runtime.logger.warn("memory-recall skipped", { err: String(err) });
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
// S27 Task 10: best-effort auto-maintenance on session start (prune rows
|
|
68
|
+
// older than 30d, checkpoint WAL if >10MB, VACUUM if DB >100MB + >20%
|
|
69
|
+
// freelist). Never blocks session start — swallows errors and logs a
|
|
70
|
+
// one-line summary for diagnostics.
|
|
71
|
+
try {
|
|
72
|
+
const m = autoMaintain(runtime.currentStateDir);
|
|
73
|
+
if (m && !m.endsWith("nothing to do"))
|
|
74
|
+
runtime.logger.info("db-auto-maintain", { result: m });
|
|
75
|
+
}
|
|
76
|
+
catch (e) {
|
|
77
|
+
runtime.logger.warn("db-auto-maintain-fail", { error: String(e) });
|
|
78
|
+
}
|
|
79
|
+
runtime.dashboard.event("session_start", {
|
|
80
|
+
reason: event.reason,
|
|
81
|
+
sessionId: runtime.rt.sessionId,
|
|
82
|
+
});
|
|
83
|
+
runtime.snapshot(ctx);
|
|
84
|
+
});
|
|
85
|
+
pi.on("session_tree", async (_event, ctx) => {
|
|
86
|
+
// Branch navigation invalidates region indexes — reset checkpoint memory but
|
|
87
|
+
// keep the on-disk store (markers replayed from entries below if needed).
|
|
88
|
+
runtime.resetRuntime(ctx.sessionManager.getSessionId());
|
|
89
|
+
runtime.setStatus(ctx, "mega-compact: ready (branch)");
|
|
90
|
+
if (config.autoInline) {
|
|
91
|
+
const query = recentUserQuery(ctx);
|
|
92
|
+
if (query) {
|
|
93
|
+
const r = doRecall(runtime, config, ctx, query, "resume");
|
|
94
|
+
if (!r.empty) {
|
|
95
|
+
runtime.pendingRecallBlock = r.block;
|
|
96
|
+
runtime.logger.info("auto-inline", {
|
|
97
|
+
reason: "session_tree",
|
|
98
|
+
query,
|
|
99
|
+
injected: r.toInject.map((h) => h.checkpoint.checkpointId),
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
// S21: parallel memory recall. Trigram embedder is sub-ms; await is fine.
|
|
103
|
+
try {
|
|
104
|
+
const mr = await recallMemoriesAndInline({
|
|
105
|
+
query,
|
|
106
|
+
stateDir: runtime.getStateDir(),
|
|
107
|
+
limit: 5,
|
|
108
|
+
crossRepo: config.crossRepoEnabled,
|
|
109
|
+
crossRepoCosine: config.crossRepoCosine,
|
|
110
|
+
});
|
|
111
|
+
if (!mr.empty)
|
|
112
|
+
runtime.pendingMemoryRecallBlock = mr.block;
|
|
113
|
+
}
|
|
114
|
+
catch (err) {
|
|
115
|
+
runtime.logger.warn("memory-recall skipped", { err: String(err) });
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
runtime.dashboard.event("session_tree", {
|
|
120
|
+
sessionId: runtime.rt.sessionId,
|
|
121
|
+
});
|
|
122
|
+
runtime.snapshot(ctx);
|
|
123
|
+
});
|
|
124
|
+
// ---- Auto-inline injection point: prepend staged recall to systemPrompt ----
|
|
125
|
+
pi.on("before_agent_start", async (event, ctx) => {
|
|
126
|
+
runtime.captureModel(ctx); // most reliable point ctx.model is populated
|
|
127
|
+
const cpBlock = runtime.pendingRecallBlock;
|
|
128
|
+
const memBlock = runtime.pendingMemoryRecallBlock;
|
|
129
|
+
if (!cpBlock && !memBlock)
|
|
130
|
+
return;
|
|
131
|
+
runtime.pendingRecallBlock = undefined;
|
|
132
|
+
runtime.pendingMemoryRecallBlock = undefined;
|
|
133
|
+
const composed = [cpBlock, memBlock].filter(Boolean).join("\n\n");
|
|
134
|
+
return { systemPrompt: `${event.systemPrompt}\n\n${composed}` };
|
|
135
|
+
});
|
|
136
|
+
pi.on("session_shutdown", async (_event, ctx) => {
|
|
137
|
+
runtime.setStatus(ctx, undefined);
|
|
138
|
+
runtime.activeAgents = 0;
|
|
139
|
+
runtime.currentTurn = 0;
|
|
140
|
+
ctx.ui.setWidget(WIDGET_KEY, [], { placement: "aboveEditor" });
|
|
141
|
+
});
|
|
142
|
+
}
|