sandstream-kit 1.1.0 → 1.2.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/check-web-search.js +37 -6
- package/dist/check-web-search.js.map +1 -1
- package/dist/cli.js +69 -7
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +2 -0
- package/dist/config.js +1 -0
- package/dist/config.js.map +1 -1
- package/dist/memory/codex.d.ts +5 -0
- package/dist/memory/codex.js +150 -0
- package/dist/memory/codex.js.map +1 -0
- package/dist/memory/continue.d.ts +5 -0
- package/dist/memory/continue.js +116 -0
- package/dist/memory/continue.js.map +1 -0
- package/dist/memory/db.d.ts +12 -1
- package/dist/memory/db.js +43 -1
- package/dist/memory/db.js.map +1 -1
- package/dist/memory/gemini.d.ts +5 -0
- package/dist/memory/gemini.js +176 -0
- package/dist/memory/gemini.js.map +1 -0
- package/dist/memory/hook.d.ts +9 -0
- package/dist/memory/hook.js +34 -1
- package/dist/memory/hook.js.map +1 -1
- package/dist/memory/install.js +1 -0
- package/dist/memory/install.js.map +1 -1
- package/dist/memory/merge.d.ts +18 -0
- package/dist/memory/merge.js +109 -0
- package/dist/memory/merge.js.map +1 -0
- package/dist/memory/parser.d.ts +9 -0
- package/dist/memory/parser.js +34 -3
- package/dist/memory/parser.js.map +1 -1
- package/dist/status.d.ts +9 -0
- package/dist/status.js +119 -0
- package/dist/status.js.map +1 -0
- package/package.json +1 -1
package/dist/config.d.ts
CHANGED
|
@@ -49,6 +49,8 @@ export interface WebSearchConfig {
|
|
|
49
49
|
provider?: "brave" | "searxng" | "google" | "custom";
|
|
50
50
|
url?: string;
|
|
51
51
|
apiKey?: string;
|
|
52
|
+
/** Google Programmable Search engine id (cx) — required for the google provider. */
|
|
53
|
+
cx?: string;
|
|
52
54
|
}
|
|
53
55
|
/**
|
|
54
56
|
* Environment-specific access permissions
|
package/dist/config.js
CHANGED
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { DatabaseSync } from "node:sqlite";
|
|
2
|
+
import type { IndexResult } from "./parser.js";
|
|
3
|
+
export declare function getCodexSessionsDir(): string;
|
|
4
|
+
/** Walk ~/.codex/sessions and index every rollout. Idempotent + incremental (file_index). */
|
|
5
|
+
export declare function indexCodexSessions(db: DatabaseSync): IndexResult;
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* kit memory — Codex CLI transcript parser (multi-harness).
|
|
3
|
+
*
|
|
4
|
+
* Reads OpenAI Codex rollout logs from ~/.codex/sessions/<yyyy>/<mm>/<dd>/rollout-*.jsonl.
|
|
5
|
+
* Each line is { timestamp, type, payload }: a `session_meta` line carries the
|
|
6
|
+
* session id + cwd; `response_item` lines of payload.type "message" carry the actual
|
|
7
|
+
* turns (role + content blocks). We index user/assistant turns (developer/system
|
|
8
|
+
* context is noise), tag them harness="codex", and synthesize a stable per-message
|
|
9
|
+
* uuid so re-indexing is idempotent. RAW + deterministic; no model calls.
|
|
10
|
+
*/
|
|
11
|
+
import { readFileSync, readdirSync, existsSync, statSync } from "node:fs";
|
|
12
|
+
import { homedir } from "node:os";
|
|
13
|
+
import { join, basename } from "node:path";
|
|
14
|
+
import { insertMessage, upsertSession, isFileIndexed, markFileIndexed } from "./db.js";
|
|
15
|
+
export function getCodexSessionsDir() {
|
|
16
|
+
const base = process.env.KIT_CODEX_DIR ?? join(homedir(), ".codex");
|
|
17
|
+
return join(base, "sessions");
|
|
18
|
+
}
|
|
19
|
+
/** Flatten Codex content blocks (input_text / output_text / text) to plain text. */
|
|
20
|
+
function textOf(content) {
|
|
21
|
+
if (!Array.isArray(content))
|
|
22
|
+
return "";
|
|
23
|
+
return content
|
|
24
|
+
.map((b) => b?.type === "input_text" || b?.type === "output_text" || b?.type === "text"
|
|
25
|
+
? (b.text ?? "")
|
|
26
|
+
: "")
|
|
27
|
+
.filter(Boolean)
|
|
28
|
+
.join("\n");
|
|
29
|
+
}
|
|
30
|
+
function* walkRollouts(dir) {
|
|
31
|
+
let entries;
|
|
32
|
+
try {
|
|
33
|
+
entries = readdirSync(dir, { withFileTypes: true });
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
for (const entry of entries) {
|
|
39
|
+
const p = join(dir, entry.name);
|
|
40
|
+
if (entry.isDirectory())
|
|
41
|
+
yield* walkRollouts(p);
|
|
42
|
+
else if (entry.isFile() && entry.name.startsWith("rollout-") && entry.name.endsWith(".jsonl")) {
|
|
43
|
+
yield p;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
function indexFile(db, filepath) {
|
|
48
|
+
let raw;
|
|
49
|
+
try {
|
|
50
|
+
raw = readFileSync(filepath, "utf8");
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
return { messages: 0 };
|
|
54
|
+
}
|
|
55
|
+
let sessionId = basename(filepath, ".jsonl");
|
|
56
|
+
let cwd;
|
|
57
|
+
let project;
|
|
58
|
+
let messages = 0;
|
|
59
|
+
let idx = 0;
|
|
60
|
+
let firstTs;
|
|
61
|
+
let lastTs;
|
|
62
|
+
for (const line of raw.split("\n")) {
|
|
63
|
+
const t = line.trim();
|
|
64
|
+
if (!t)
|
|
65
|
+
continue;
|
|
66
|
+
let rec;
|
|
67
|
+
try {
|
|
68
|
+
rec = JSON.parse(t);
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
if (rec.type === "session_meta") {
|
|
74
|
+
const p = rec.payload ?? {};
|
|
75
|
+
if (typeof p.id === "string")
|
|
76
|
+
sessionId = p.id;
|
|
77
|
+
if (typeof p.cwd === "string") {
|
|
78
|
+
cwd = p.cwd;
|
|
79
|
+
project = basename(p.cwd);
|
|
80
|
+
}
|
|
81
|
+
upsertSession(db, { sessionId, harness: "codex", project });
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
if (rec.type === "response_item" && rec.payload?.type === "message") {
|
|
85
|
+
const role = String(rec.payload.role ?? "");
|
|
86
|
+
if (role !== "user" && role !== "assistant")
|
|
87
|
+
continue; // skip developer/system noise
|
|
88
|
+
const ts = rec.timestamp;
|
|
89
|
+
if (ts) {
|
|
90
|
+
if (!firstTs)
|
|
91
|
+
firstTs = ts;
|
|
92
|
+
lastTs = ts;
|
|
93
|
+
}
|
|
94
|
+
const added = insertMessage(db, {
|
|
95
|
+
uuid: `codex:${sessionId}:${idx}`, // stable per-session index → idempotent
|
|
96
|
+
sessionId,
|
|
97
|
+
type: role === "assistant" ? "assistant" : "user",
|
|
98
|
+
role,
|
|
99
|
+
content: textOf(rec.payload.content),
|
|
100
|
+
timestamp: ts,
|
|
101
|
+
cwd,
|
|
102
|
+
});
|
|
103
|
+
idx++;
|
|
104
|
+
if (added)
|
|
105
|
+
messages++;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
upsertSession(db, {
|
|
109
|
+
sessionId,
|
|
110
|
+
harness: "codex",
|
|
111
|
+
project,
|
|
112
|
+
firstMessageAt: firstTs,
|
|
113
|
+
lastMessageAt: lastTs,
|
|
114
|
+
});
|
|
115
|
+
return { messages };
|
|
116
|
+
}
|
|
117
|
+
/** Walk ~/.codex/sessions and index every rollout. Idempotent + incremental (file_index). */
|
|
118
|
+
export function indexCodexSessions(db) {
|
|
119
|
+
const dir = getCodexSessionsDir();
|
|
120
|
+
const result = {
|
|
121
|
+
files: 0,
|
|
122
|
+
sessions: 0,
|
|
123
|
+
messages: 0,
|
|
124
|
+
toolUses: 0,
|
|
125
|
+
filesSkipped: 0,
|
|
126
|
+
};
|
|
127
|
+
if (!existsSync(dir))
|
|
128
|
+
return result;
|
|
129
|
+
for (const filepath of walkRollouts(dir)) {
|
|
130
|
+
let st;
|
|
131
|
+
try {
|
|
132
|
+
st = statSync(filepath);
|
|
133
|
+
}
|
|
134
|
+
catch {
|
|
135
|
+
continue;
|
|
136
|
+
}
|
|
137
|
+
const mtimeMs = Math.floor(st.mtimeMs);
|
|
138
|
+
if (isFileIndexed(db, filepath, mtimeMs, st.size)) {
|
|
139
|
+
result.filesSkipped++;
|
|
140
|
+
continue;
|
|
141
|
+
}
|
|
142
|
+
const counts = indexFile(db, filepath);
|
|
143
|
+
markFileIndexed(db, filepath, mtimeMs, st.size);
|
|
144
|
+
result.files++;
|
|
145
|
+
result.sessions++;
|
|
146
|
+
result.messages += counts.messages;
|
|
147
|
+
}
|
|
148
|
+
return result;
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=codex.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex.js","sourceRoot":"","sources":["../../src/memory/codex.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { DatabaseSync } from "node:sqlite";
|
|
2
|
+
import type { IndexResult } from "./parser.js";
|
|
3
|
+
export declare function getContinueSessionsDir(): string;
|
|
4
|
+
/** Walk ~/.continue/sessions and index every session JSON. Idempotent + incremental. */
|
|
5
|
+
export declare function indexContinueSessions(db: DatabaseSync): IndexResult;
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* kit memory — Continue.dev transcript parser (multi-harness).
|
|
3
|
+
*
|
|
4
|
+
* Continue stores each chat as a Session JSON at ~/.continue/sessions/<id>.json
|
|
5
|
+
* (an index lives at sessions.json, which we skip). Types verified against the
|
|
6
|
+
* continuedev/continue source (core/index.d.ts):
|
|
7
|
+
*
|
|
8
|
+
* Session { sessionId, title, workspaceDirectory, history: ChatHistoryItem[] }
|
|
9
|
+
* ChatHistoryItem { message: ChatMessage, ... }
|
|
10
|
+
* ChatMessage { role: 'user'|'assistant'|'system'|'thinking'|'tool', content }
|
|
11
|
+
* MessageContent string | ({ type:'text', text } | { type:'imageUrl', ... })[]
|
|
12
|
+
*
|
|
13
|
+
* We index user + assistant turns, tag harness="continue", and — because Session
|
|
14
|
+
* carries workspaceDirectory — set cwd so Continue recall is project-scoped like
|
|
15
|
+
* Claude Code (not global-only). RAW + deterministic; idempotent; no model calls.
|
|
16
|
+
*/
|
|
17
|
+
import { readFileSync, readdirSync, existsSync, statSync } from "node:fs";
|
|
18
|
+
import { homedir } from "node:os";
|
|
19
|
+
import { join, basename } from "node:path";
|
|
20
|
+
import { insertMessage, upsertSession, isFileIndexed, markFileIndexed } from "./db.js";
|
|
21
|
+
export function getContinueSessionsDir() {
|
|
22
|
+
const base = process.env.KIT_CONTINUE_DIR ?? join(homedir(), ".continue");
|
|
23
|
+
return join(base, "sessions");
|
|
24
|
+
}
|
|
25
|
+
/** Flatten Continue MessageContent (string or part array) to plain text. */
|
|
26
|
+
function contentText(content) {
|
|
27
|
+
if (typeof content === "string")
|
|
28
|
+
return content;
|
|
29
|
+
if (Array.isArray(content)) {
|
|
30
|
+
return content
|
|
31
|
+
.map((p) => (p?.type === "text" ? (p.text ?? "") : ""))
|
|
32
|
+
.filter(Boolean)
|
|
33
|
+
.join("\n");
|
|
34
|
+
}
|
|
35
|
+
return "";
|
|
36
|
+
}
|
|
37
|
+
function indexFile(db, filepath) {
|
|
38
|
+
let parsed;
|
|
39
|
+
try {
|
|
40
|
+
parsed = JSON.parse(readFileSync(filepath, "utf8"));
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
return { messages: 0 };
|
|
44
|
+
}
|
|
45
|
+
if (parsed === null || typeof parsed !== "object")
|
|
46
|
+
return { messages: 0 };
|
|
47
|
+
const session = parsed;
|
|
48
|
+
if (!Array.isArray(session.history))
|
|
49
|
+
return { messages: 0 }; // not a Session (e.g. the index)
|
|
50
|
+
const id = session.sessionId ?? basename(filepath, ".json");
|
|
51
|
+
const sessionId = `continue:${id}`;
|
|
52
|
+
const cwd = session.workspaceDirectory || undefined;
|
|
53
|
+
upsertSession(db, {
|
|
54
|
+
sessionId,
|
|
55
|
+
harness: "continue",
|
|
56
|
+
project: cwd ? basename(cwd) : undefined,
|
|
57
|
+
});
|
|
58
|
+
let messages = 0;
|
|
59
|
+
session.history.forEach((item, idx) => {
|
|
60
|
+
const role = item?.message?.role;
|
|
61
|
+
if (role !== "user" && role !== "assistant")
|
|
62
|
+
return; // skip system/thinking/tool
|
|
63
|
+
const text = contentText(item.message?.content);
|
|
64
|
+
if (!text)
|
|
65
|
+
return;
|
|
66
|
+
const added = insertMessage(db, {
|
|
67
|
+
uuid: `continue:${id}:${idx}`,
|
|
68
|
+
sessionId,
|
|
69
|
+
type: role,
|
|
70
|
+
role,
|
|
71
|
+
content: text,
|
|
72
|
+
cwd,
|
|
73
|
+
});
|
|
74
|
+
if (added)
|
|
75
|
+
messages++;
|
|
76
|
+
});
|
|
77
|
+
return { messages };
|
|
78
|
+
}
|
|
79
|
+
/** Walk ~/.continue/sessions and index every session JSON. Idempotent + incremental. */
|
|
80
|
+
export function indexContinueSessions(db) {
|
|
81
|
+
const dir = getContinueSessionsDir();
|
|
82
|
+
const result = { files: 0, sessions: 0, messages: 0, toolUses: 0, filesSkipped: 0 };
|
|
83
|
+
if (!existsSync(dir))
|
|
84
|
+
return result;
|
|
85
|
+
let entries;
|
|
86
|
+
try {
|
|
87
|
+
entries = readdirSync(dir, { withFileTypes: true });
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
return result;
|
|
91
|
+
}
|
|
92
|
+
for (const e of entries) {
|
|
93
|
+
if (!e.isFile() || !e.name.endsWith(".json") || e.name === "sessions.json")
|
|
94
|
+
continue;
|
|
95
|
+
const filepath = join(dir, e.name);
|
|
96
|
+
let st;
|
|
97
|
+
try {
|
|
98
|
+
st = statSync(filepath);
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
continue;
|
|
102
|
+
}
|
|
103
|
+
const mtimeMs = Math.floor(st.mtimeMs);
|
|
104
|
+
if (isFileIndexed(db, filepath, mtimeMs, st.size)) {
|
|
105
|
+
result.filesSkipped++;
|
|
106
|
+
continue;
|
|
107
|
+
}
|
|
108
|
+
const counts = indexFile(db, filepath);
|
|
109
|
+
markFileIndexed(db, filepath, mtimeMs, st.size);
|
|
110
|
+
result.files++;
|
|
111
|
+
result.sessions++;
|
|
112
|
+
result.messages += counts.messages;
|
|
113
|
+
}
|
|
114
|
+
return result;
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=continue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"continue.js","sourceRoot":"","sources":["../../src/memory/continue.ts"],"names":[],"mappings":"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"}
|
package/dist/memory/db.d.ts
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
*/
|
|
15
15
|
import { DatabaseSync } from "node:sqlite";
|
|
16
16
|
import type { MemoryStats, MessageInput, SearchHit, SessionInput, ToolUseInput } from "./types.js";
|
|
17
|
-
export declare const SCHEMA_VERSION =
|
|
17
|
+
export declare const SCHEMA_VERSION = 3;
|
|
18
18
|
export declare function getMemoryDir(): string;
|
|
19
19
|
export declare function getMemoryDbPath(): string;
|
|
20
20
|
/**
|
|
@@ -22,6 +22,10 @@ export declare function getMemoryDbPath(): string;
|
|
|
22
22
|
* an ephemeral in-process DB (tests). Otherwise defaults to ~/.kit/memory.db.
|
|
23
23
|
*/
|
|
24
24
|
export declare function openMemoryDb(path?: string): DatabaseSync;
|
|
25
|
+
/** Has this file already been indexed at exactly this mtime + size? (incremental index) */
|
|
26
|
+
export declare function isFileIndexed(db: DatabaseSync, path: string, mtimeMs: number, size: number): boolean;
|
|
27
|
+
/** Record (or refresh) a file's mtime + size after indexing it. */
|
|
28
|
+
export declare function markFileIndexed(db: DatabaseSync, path: string, mtimeMs: number, size: number): void;
|
|
25
29
|
export declare function upsertSession(db: DatabaseSync, s: SessionInput): void;
|
|
26
30
|
/** Insert a message idempotently (by uuid). Returns true if a new row was added. */
|
|
27
31
|
export declare function insertMessage(db: DatabaseSync, m: MessageInput): boolean;
|
|
@@ -37,4 +41,11 @@ export interface SearchOptions {
|
|
|
37
41
|
* for cross-project ("--global") recall over the personal store.
|
|
38
42
|
*/
|
|
39
43
|
export declare function searchMessages(db: DatabaseSync, query: string, opts?: SearchOptions): SearchHit[];
|
|
44
|
+
/**
|
|
45
|
+
* Most-recent messages by wall-clock time (newest first) — the basis for session
|
|
46
|
+
* recovery (re-injecting "where you left off" after a compaction/resume). Unlike
|
|
47
|
+
* searchMessages this needs no query; pass opts.projectPath to scope to one repo.
|
|
48
|
+
* Skips empty-content rows so the recovery block stays signal, not blank tool turns.
|
|
49
|
+
*/
|
|
50
|
+
export declare function recentMessages(db: DatabaseSync, opts?: SearchOptions): SearchHit[];
|
|
40
51
|
export declare function getStats(db: DatabaseSync): MemoryStats;
|
package/dist/memory/db.js
CHANGED
|
@@ -16,7 +16,7 @@ import { DatabaseSync } from "node:sqlite";
|
|
|
16
16
|
import { homedir } from "node:os";
|
|
17
17
|
import { join } from "node:path";
|
|
18
18
|
import { existsSync, mkdirSync, chmodSync, statSync } from "node:fs";
|
|
19
|
-
export const SCHEMA_VERSION =
|
|
19
|
+
export const SCHEMA_VERSION = 3;
|
|
20
20
|
export function getMemoryDir() {
|
|
21
21
|
return process.env.KIT_MEMORY_DIR ?? join(homedir(), ".kit");
|
|
22
22
|
}
|
|
@@ -89,6 +89,13 @@ CREATE TABLE IF NOT EXISTS pending_actions (
|
|
|
89
89
|
verify_passes INTEGER NOT NULL DEFAULT 0
|
|
90
90
|
);
|
|
91
91
|
|
|
92
|
+
CREATE TABLE IF NOT EXISTS file_index (
|
|
93
|
+
path TEXT PRIMARY KEY,
|
|
94
|
+
mtime_ms INTEGER NOT NULL,
|
|
95
|
+
size INTEGER NOT NULL,
|
|
96
|
+
indexed_at TEXT DEFAULT CURRENT_TIMESTAMP
|
|
97
|
+
);
|
|
98
|
+
|
|
92
99
|
CREATE INDEX IF NOT EXISTS idx_messages_session ON messages(session_id);
|
|
93
100
|
CREATE INDEX IF NOT EXISTS idx_messages_type ON messages(type);
|
|
94
101
|
CREATE INDEX IF NOT EXISTS idx_messages_timestamp ON messages(timestamp);
|
|
@@ -155,6 +162,18 @@ export function openMemoryDb(path) {
|
|
|
155
162
|
}
|
|
156
163
|
return db;
|
|
157
164
|
}
|
|
165
|
+
/** Has this file already been indexed at exactly this mtime + size? (incremental index) */
|
|
166
|
+
export function isFileIndexed(db, path, mtimeMs, size) {
|
|
167
|
+
return !!db
|
|
168
|
+
.prepare("SELECT 1 FROM file_index WHERE path = ? AND mtime_ms = ? AND size = ?")
|
|
169
|
+
.get(path, mtimeMs, size);
|
|
170
|
+
}
|
|
171
|
+
/** Record (or refresh) a file's mtime + size after indexing it. */
|
|
172
|
+
export function markFileIndexed(db, path, mtimeMs, size) {
|
|
173
|
+
db.prepare(`INSERT INTO file_index (path, mtime_ms, size, indexed_at)
|
|
174
|
+
VALUES (?, ?, ?, datetime('now'))
|
|
175
|
+
ON CONFLICT(path) DO UPDATE SET mtime_ms = excluded.mtime_ms, size = excluded.size, indexed_at = datetime('now')`).run(path, mtimeMs, size);
|
|
176
|
+
}
|
|
158
177
|
export function upsertSession(db, s) {
|
|
159
178
|
db.prepare(`INSERT INTO sessions (session_id, harness, project, first_message_at, last_message_at, is_agent_sidechain)
|
|
160
179
|
VALUES (?, ?, ?, ?, ?, ?)
|
|
@@ -206,6 +225,29 @@ export function searchMessages(db, query, opts = {}) {
|
|
|
206
225
|
LIMIT ?`)
|
|
207
226
|
.all(...params);
|
|
208
227
|
}
|
|
228
|
+
/**
|
|
229
|
+
* Most-recent messages by wall-clock time (newest first) — the basis for session
|
|
230
|
+
* recovery (re-injecting "where you left off" after a compaction/resume). Unlike
|
|
231
|
+
* searchMessages this needs no query; pass opts.projectPath to scope to one repo.
|
|
232
|
+
* Skips empty-content rows so the recovery block stays signal, not blank tool turns.
|
|
233
|
+
*/
|
|
234
|
+
export function recentMessages(db, opts = {}) {
|
|
235
|
+
const limit = opts.limit ?? 10;
|
|
236
|
+
const params = [];
|
|
237
|
+
let where = "content IS NOT NULL AND content != ''";
|
|
238
|
+
if (opts.projectPath) {
|
|
239
|
+
where += " AND (cwd = ? OR cwd LIKE ?)";
|
|
240
|
+
params.push(opts.projectPath, `${opts.projectPath}/%`);
|
|
241
|
+
}
|
|
242
|
+
params.push(limit);
|
|
243
|
+
return db
|
|
244
|
+
.prepare(`SELECT id, uuid, session_id AS sessionId, role, content, timestamp
|
|
245
|
+
FROM messages
|
|
246
|
+
WHERE ${where}
|
|
247
|
+
ORDER BY timestamp DESC, id DESC
|
|
248
|
+
LIMIT ?`)
|
|
249
|
+
.all(...params);
|
|
250
|
+
}
|
|
209
251
|
export function getStats(db) {
|
|
210
252
|
const count = (sql) => {
|
|
211
253
|
const r = db.prepare(sql).get();
|
package/dist/memory/db.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db.js","sourceRoot":"","sources":["../../src/memory/db.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AASrE,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC;AAEhC,MAAM,UAAU,YAAY;IAC1B,OAAO,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,CAAC,CAAC;AAC/D,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,OAAO,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE,WAAW,CAAC,CAAC;AACxE,CAAC;AAED,SAAS,eAAe;IACtB,MAAM,GAAG,GAAG,YAAY,EAAE,CAAC;IAC3B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AACzE,CAAC;AAED,MAAM,UAAU,GAAG
|
|
1
|
+
{"version":3,"file":"db.js","sourceRoot":"","sources":["../../src/memory/db.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { DatabaseSync } from "node:sqlite";
|
|
2
|
+
import type { IndexResult } from "./parser.js";
|
|
3
|
+
export declare function getGeminiTmpDir(): string;
|
|
4
|
+
/** Walk ~/.gemini/tmp and index every conversation log/checkpoint. Idempotent + incremental. */
|
|
5
|
+
export declare function indexGeminiSessions(db: DatabaseSync): IndexResult;
|