ai-hist 0.2.1 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +101 -14
- package/dist/index.d.ts +44 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +170 -16
- package/dist/index.js.map +1 -1
- package/dist/mcp-server.d.ts +12 -0
- package/dist/mcp-server.d.ts.map +1 -0
- package/dist/mcp-server.js +471 -0
- package/dist/mcp-server.js.map +1 -0
- package/dist/mcp-smoke.test.d.ts +2 -0
- package/dist/mcp-smoke.test.d.ts.map +1 -0
- package/dist/mcp-smoke.test.js +151 -0
- package/dist/mcp-smoke.test.js.map +1 -0
- package/dist/trajectory-sources.d.ts +36 -0
- package/dist/trajectory-sources.d.ts.map +1 -0
- package/dist/trajectory-sources.js +201 -0
- package/dist/trajectory-sources.js.map +1 -0
- package/package.json +28 -3
package/README.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
# ai-hist (TypeScript SDK)
|
|
1
|
+
# ai-hist (TypeScript SDK and MCP server)
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
TypeScript reader for the [ai-hist](../README.md) history database, plus an MCP server for searching local AI coding-agent history from Claude Code, Codex, Cursor, and Agent Relay.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
The SDK uses `sql.js`, so it has no native build step. It reads the same SQLite file the Python `ai-hist sync` tool writes, or falls back to scanning local Claude/Codex/Cursor JSONL files and compacted trajectory JSON when the database is missing.
|
|
6
6
|
|
|
7
7
|
## Install
|
|
8
8
|
|
|
@@ -10,14 +10,12 @@ Built to let Electron / Node consumers (e.g. the `pear` desktop app) render a Co
|
|
|
10
10
|
npm install ai-hist
|
|
11
11
|
```
|
|
12
12
|
|
|
13
|
-
`better-sqlite3` is a native dep — when bundling into an Electron app, run `electron-rebuild` (or your bundler's equivalent) after install.
|
|
14
|
-
|
|
15
13
|
## Quick start
|
|
16
14
|
|
|
17
15
|
```ts
|
|
18
|
-
import {
|
|
16
|
+
import { openAiHist, resumeCommand } from 'ai-hist';
|
|
19
17
|
|
|
20
|
-
const hist =
|
|
18
|
+
const hist = await openAiHist(); // uses $AI_HIST_DB or ~/.local/share/ai-hist/ai-history.db
|
|
21
19
|
try {
|
|
22
20
|
const sessions = hist.listSessions({ limit: 20 });
|
|
23
21
|
for (const s of sessions) {
|
|
@@ -29,17 +27,60 @@ try {
|
|
|
29
27
|
}
|
|
30
28
|
```
|
|
31
29
|
|
|
30
|
+
To require the Python-managed SQLite database instead of JSONL fallback:
|
|
31
|
+
|
|
32
|
+
```ts
|
|
33
|
+
const hist = await openAiHist({ fallback: 'error' });
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## MCP server
|
|
37
|
+
|
|
38
|
+
After the package is published, run the local stdio MCP server with:
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
npx -y ai-hist-mcp
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
From a local checkout:
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
npm install
|
|
48
|
+
npm run build
|
|
49
|
+
node dist/mcp-server.js
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
The MCP server exposes tools for search, recent history, session lookup, temporal context, evidence packing, stats, trajectory search, and task WHY lookup over stdio. It runs on the user's machine and uses the same data-opening behavior as the SDK: SQLite first, then local fallback scanning.
|
|
53
|
+
|
|
54
|
+
Contract tools:
|
|
55
|
+
|
|
56
|
+
- `search_history(query, limit?)`
|
|
57
|
+
- `recent_entries(limit?, project?)`
|
|
58
|
+
- `get_session(session_id)`
|
|
59
|
+
- `get_context(id)`
|
|
60
|
+
- `stats()`
|
|
61
|
+
- `search_trajectories(query, limit?)`
|
|
62
|
+
- `why_for_task(query)`
|
|
63
|
+
|
|
32
64
|
## API
|
|
33
65
|
|
|
34
66
|
```ts
|
|
35
|
-
|
|
36
|
-
|
|
67
|
+
openAiHist(opts?: {
|
|
68
|
+
dbPath?: string;
|
|
69
|
+
fallback?: 'jsonl' | 'error';
|
|
70
|
+
}): Promise<AiHist>
|
|
71
|
+
|
|
72
|
+
hist.close(): void
|
|
37
73
|
hist.dbPath: string
|
|
74
|
+
hist.sourceKind: 'sqlite' | 'jsonl'
|
|
38
75
|
|
|
39
76
|
hist.recent(opts?): HistoryEntry[] // newest prompts first
|
|
40
|
-
hist.listSessions(opts?): SessionSummary[] // grouped by session_id, last
|
|
77
|
+
hist.listSessions(opts?): SessionSummary[] // grouped by session_id, last activity DESC
|
|
41
78
|
hist.getSession(sessionId): HistoryEntry[] // all prompts in a session, oldest first
|
|
42
|
-
hist.
|
|
79
|
+
hist.getEntry(id): HistoryEntry | null
|
|
80
|
+
hist.getInTimeWindow(timestampMs, windowMs): HistoryEntry[]
|
|
81
|
+
hist.search(query, opts?): HistoryEntry[] // literal substring search, recent matches first
|
|
82
|
+
hist.searchTrajectories(query, opts?): TrajectoryEntry[]
|
|
83
|
+
hist.whyForTask(query): TrajectoryEntry | null
|
|
43
84
|
hist.stats(): Stats // counts + date range
|
|
44
85
|
```
|
|
45
86
|
|
|
@@ -50,15 +91,61 @@ resumeCommand(entry): string | null // shell command per source; null
|
|
|
50
91
|
defaultDbPath(): string // resolve env / OS default
|
|
51
92
|
```
|
|
52
93
|
|
|
53
|
-
##
|
|
94
|
+
## Trajectories
|
|
95
|
+
|
|
96
|
+
ai-hist indexes compacted per-run trajectory JSON files as the decision WHY. Set `TRAJECTORY_ROOT` to an explicit root; the scanner reads:
|
|
97
|
+
|
|
98
|
+
```text
|
|
99
|
+
$TRAJECTORY_ROOT/**/compacted/*.json
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
Without `TRAJECTORY_ROOT`, default discovery scans:
|
|
103
|
+
|
|
104
|
+
```text
|
|
105
|
+
~/Projects/**/.trajectories/**/compacted/*.json
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
The runtime contract is one JSON file per completed run:
|
|
109
|
+
|
|
110
|
+
```json
|
|
111
|
+
{
|
|
112
|
+
"id": "run-id",
|
|
113
|
+
"version": 1,
|
|
114
|
+
"personaId": "planner",
|
|
115
|
+
"projectId": "agent-workforce",
|
|
116
|
+
"task": { "title": "Task title", "description": "Task description" },
|
|
117
|
+
"status": "completed",
|
|
118
|
+
"startedAt": "2026-06-06T10:00:00.000Z",
|
|
119
|
+
"completedAt": "2026-06-06T10:05:00.000Z",
|
|
120
|
+
"decisions": [
|
|
121
|
+
{
|
|
122
|
+
"question": "What should we do?",
|
|
123
|
+
"chosen": "Chosen option",
|
|
124
|
+
"reasoning": "Why this option won",
|
|
125
|
+
"alternatives": ["Other option"]
|
|
126
|
+
}
|
|
127
|
+
],
|
|
128
|
+
"retrospective": {
|
|
129
|
+
"summary": "What happened",
|
|
130
|
+
"approach": "How the work was done",
|
|
131
|
+
"learnings": ["What to carry forward"],
|
|
132
|
+
"confidence": 0.8
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
## Schema
|
|
138
|
+
|
|
139
|
+
The canonical schema is owned by the Python tool:
|
|
54
140
|
|
|
55
141
|
```sql
|
|
56
142
|
CREATE TABLE history (
|
|
57
143
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
58
|
-
source TEXT NOT NULL,
|
|
144
|
+
source TEXT NOT NULL,
|
|
59
145
|
session_id TEXT,
|
|
60
146
|
project TEXT,
|
|
61
147
|
prompt TEXT NOT NULL,
|
|
148
|
+
prompt_hash TEXT,
|
|
62
149
|
timestamp_ms INTEGER NOT NULL,
|
|
63
150
|
UNIQUE(source, timestamp_ms, prompt)
|
|
64
151
|
);
|
|
@@ -66,7 +153,7 @@ CREATE TABLE history (
|
|
|
66
153
|
CREATE VIRTUAL TABLE history_fts USING fts5(prompt, project, content='history', content_rowid='id');
|
|
67
154
|
```
|
|
68
155
|
|
|
69
|
-
|
|
156
|
+
Trajectory sync also creates a structured `trajectories` table and inserts each per-run compact file into `history` with `source='trajectory'`, so general history search and WHY-specific lookup both work.
|
|
70
157
|
|
|
71
158
|
## License
|
|
72
159
|
|
package/dist/index.d.ts
CHANGED
|
@@ -12,7 +12,8 @@
|
|
|
12
12
|
* of data); revisit if anyone hits millions.
|
|
13
13
|
*/
|
|
14
14
|
import { type Database } from 'sql.js';
|
|
15
|
-
|
|
15
|
+
import { type TrajectoryDecision, type TrajectoryRetrospective } from './trajectory-sources.js';
|
|
16
|
+
export type Source = 'claude' | 'codex' | 'cursor' | 'relay' | 'trajectory';
|
|
16
17
|
export interface HistoryEntry {
|
|
17
18
|
id: number;
|
|
18
19
|
source: Source;
|
|
@@ -52,6 +53,29 @@ export interface Stats {
|
|
|
52
53
|
firstTimestampMs: number | null;
|
|
53
54
|
lastTimestampMs: number | null;
|
|
54
55
|
}
|
|
56
|
+
export interface TrajectoryEntry {
|
|
57
|
+
id: string;
|
|
58
|
+
version: number | null;
|
|
59
|
+
personaId: string | null;
|
|
60
|
+
projectId: string | null;
|
|
61
|
+
task: {
|
|
62
|
+
title: string | null;
|
|
63
|
+
description: string | null;
|
|
64
|
+
};
|
|
65
|
+
status: string | null;
|
|
66
|
+
startedAt: string | null;
|
|
67
|
+
completedAt: string | null;
|
|
68
|
+
decisions: TrajectoryDecision[];
|
|
69
|
+
retrospective: TrajectoryRetrospective;
|
|
70
|
+
searchText: string;
|
|
71
|
+
path: string | null;
|
|
72
|
+
updatedMs: number;
|
|
73
|
+
timestampMs: number;
|
|
74
|
+
}
|
|
75
|
+
export interface TrajectorySearchOptions {
|
|
76
|
+
/** Default 20. */
|
|
77
|
+
limit?: number;
|
|
78
|
+
}
|
|
55
79
|
/** Resolve the SQLite path the Python CLI writes to. */
|
|
56
80
|
export declare function defaultDbPath(): string;
|
|
57
81
|
export interface OpenOptions {
|
|
@@ -100,6 +124,14 @@ export declare class AiHist {
|
|
|
100
124
|
/**
|
|
101
125
|
* Group history into sessions, ordered by last activity (newest first).
|
|
102
126
|
* Sessions without a `session_id` are skipped.
|
|
127
|
+
*
|
|
128
|
+
* Implementation note: this used to use a correlated scalar subquery
|
|
129
|
+
* to pick `first_prompt`, which ran in O(sessions × rows) — ~19s on a
|
|
130
|
+
* 35K-row DB. Switched to `ROW_NUMBER() OVER (PARTITION BY session_id
|
|
131
|
+
* ORDER BY timestamp_ms)` so first-prompt picking is a single pass
|
|
132
|
+
* over the table (~300ms on the same DB). Plus the index ensure step
|
|
133
|
+
* in `openAiHist` keeps it fast even when the DB was written by the
|
|
134
|
+
* older Python CLI that didn't create `idx_history_session`.
|
|
103
135
|
*/
|
|
104
136
|
listSessions(opts?: ListOptions): SessionSummary[];
|
|
105
137
|
/** All prompts in a session, ordered oldest → newest. */
|
|
@@ -115,6 +147,17 @@ export declare class AiHist {
|
|
|
115
147
|
* search for them. Empty queries return an empty array.
|
|
116
148
|
*/
|
|
117
149
|
search(query: string, opts?: SearchOptions): HistoryEntry[];
|
|
150
|
+
/** Search compacted per-run trajectory WHY: decisions and retrospectives. */
|
|
151
|
+
searchTrajectories(query: string, opts?: TrajectorySearchOptions): TrajectoryEntry[];
|
|
152
|
+
/** Best-matching per-run trajectory for a task query, or `null` if none match. */
|
|
153
|
+
whyForTask(query: string): TrajectoryEntry | null;
|
|
154
|
+
/** Single entry by id, or `null` if not found. */
|
|
155
|
+
getEntry(id: number): HistoryEntry | null;
|
|
156
|
+
/**
|
|
157
|
+
* All entries whose timestamp falls within [timestampMs - windowMs,
|
|
158
|
+
* timestampMs + windowMs], ordered oldest first. Used by get_context.
|
|
159
|
+
*/
|
|
160
|
+
getInTimeWindow(timestampMs: number, windowMs: number): HistoryEntry[];
|
|
118
161
|
/** Counts + date range, mirroring `ai-hist stats`. */
|
|
119
162
|
stats(): Stats;
|
|
120
163
|
}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAkB,EAAE,KAAK,QAAQ,EAAoB,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAkB,EAAE,KAAK,QAAQ,EAAoB,MAAM,QAAQ,CAAC;AAKpE,OAAO,EAGL,KAAK,kBAAkB,EACvB,KAAK,uBAAuB,EAC7B,MAAM,yBAAyB,CAAC;AAEjC,MAAM,MAAM,MAAM,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,YAAY,CAAC;AAE5E,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kBAAkB;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,aAAa,GAAG,WAAW,CAAC;AAExC,MAAM,WAAW,KAAK;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC1C,SAAS,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrD,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,IAAI,EAAE;QACJ,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;QACrB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;KAC5B,CAAC;IACF,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,EAAE,kBAAkB,EAAE,CAAC;IAChC,aAAa,EAAE,uBAAuB,CAAC;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,uBAAuB;IACtC,kBAAkB;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wDAAwD;AACxD,wBAAgB,aAAa,IAAI,MAAM,CAItC;AAgCD,MAAM,WAAW,WAAW;IAC1B,mGAAmG;IACnG,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;CAC9B;AAED,MAAM,WAAW,cAAc;IAC7B,qFAAqF;IACrF,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC;IACzB,qEAAqE;IACrE,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;GAOG;AACH,wBAAsB,UAAU,CAAC,IAAI,GAAE,WAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CAsGxE;AAuHD,qBAAa,MAAM;IACjB,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAW;IAC9B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiB;IACzC,OAAO,CAAC,MAAM,CAAS;IAEvB,sDAAsD;gBAC1C,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc;IAKhD;;;OAGG;IACH,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,kFAAkF;IAClF,IAAI,UAAU,IAAI,QAAQ,GAAG,OAAO,CAEnC;IAED,KAAK,IAAI,IAAI;IAMb,yCAAyC;IACzC,MAAM,CAAC,IAAI,GAAE,WAAgB,GAAG,YAAY,EAAE;IAc9C;;;;;;;;;;;OAWG;IACH,YAAY,CAAC,IAAI,GAAE,WAAgB,GAAG,cAAc,EAAE;IA2DtD,yDAAyD;IACzD,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,EAAE;IAW7C;;;;;;;;;OASG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,aAAkB,GAAG,YAAY,EAAE;IAiC/D,6EAA6E;IAC7E,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,uBAA4B,GAAG,eAAe,EAAE;IAuBxF,kFAAkF;IAClF,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI;IAIjD,kDAAkD;IAClD,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI;IAUzC;;;OAGG;IACH,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,YAAY,EAAE;IAWtE,sDAAsD;IACtD,KAAK,IAAI,KAAK;CAgCf;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,QAAQ,GAAG,WAAW,GAAG,SAAS,CAAC,GAC5D,MAAM,GAAG,IAAI,CAkBf"}
|
package/dist/index.js
CHANGED
|
@@ -16,6 +16,7 @@ import { readFile, stat } from 'node:fs/promises';
|
|
|
16
16
|
import { homedir } from 'node:os';
|
|
17
17
|
import { join } from 'node:path';
|
|
18
18
|
import { scanLocalSources, LOCAL_SOURCE_PATHS } from './jsonl-sources.js';
|
|
19
|
+
import { scanLocalTrajectories, trajectoryRootDescription, } from './trajectory-sources.js';
|
|
19
20
|
/** Resolve the SQLite path the Python CLI writes to. */
|
|
20
21
|
export function defaultDbPath() {
|
|
21
22
|
const fromEnv = process.env.AI_HIST_DB;
|
|
@@ -30,6 +31,27 @@ function getSqlJs() {
|
|
|
30
31
|
}
|
|
31
32
|
return _sqlPromise;
|
|
32
33
|
}
|
|
34
|
+
function ensureTrajectorySchema(db) {
|
|
35
|
+
db.run(`CREATE TABLE IF NOT EXISTS trajectories (
|
|
36
|
+
id TEXT PRIMARY KEY,
|
|
37
|
+
version INTEGER,
|
|
38
|
+
persona_id TEXT,
|
|
39
|
+
project_id TEXT,
|
|
40
|
+
task_title TEXT,
|
|
41
|
+
task_description TEXT,
|
|
42
|
+
status TEXT,
|
|
43
|
+
started_at TEXT,
|
|
44
|
+
completed_at TEXT,
|
|
45
|
+
decisions_json TEXT NOT NULL,
|
|
46
|
+
retrospective_json TEXT NOT NULL,
|
|
47
|
+
search_text TEXT NOT NULL,
|
|
48
|
+
path TEXT,
|
|
49
|
+
updated_ms INTEGER NOT NULL,
|
|
50
|
+
timestamp_ms INTEGER NOT NULL
|
|
51
|
+
)`);
|
|
52
|
+
db.run('CREATE INDEX IF NOT EXISTS idx_trajectories_timestamp ON trajectories(timestamp_ms DESC)');
|
|
53
|
+
db.run('CREATE INDEX IF NOT EXISTS idx_trajectories_project ON trajectories(project_id)');
|
|
54
|
+
}
|
|
33
55
|
/**
|
|
34
56
|
* Open an `AiHist` reader. Async because sql.js initializes its WASM
|
|
35
57
|
* runtime lazily and the DB file is read asynchronously so the host
|
|
@@ -46,6 +68,17 @@ export async function openAiHist(opts = {}) {
|
|
|
46
68
|
if (await pathExists(dbPath)) {
|
|
47
69
|
const fileBuffer = await readFile(dbPath);
|
|
48
70
|
const db = new SQL.Database(fileBuffer);
|
|
71
|
+
ensureTrajectorySchema(db);
|
|
72
|
+
// The Python CLI's schema doesn't create `idx_history_session` or
|
|
73
|
+
// `idx_history_timestamp`. Without them, listSessions degrades to
|
|
74
|
+
// an O(sessions × rows) full table scan and freezes the WASM
|
|
75
|
+
// single-threaded JS engine for tens of seconds on real-sized DBs.
|
|
76
|
+
// The DB is opened read-only over a buffer, but sql.js still lets
|
|
77
|
+
// us run `CREATE INDEX` against the in-memory copy — the index
|
|
78
|
+
// lives only for this session's lifetime and is rebuilt each
|
|
79
|
+
// `openAiHist` call. Fast (~30ms on 35K rows).
|
|
80
|
+
db.run('CREATE INDEX IF NOT EXISTS idx_history_session ON history(session_id)');
|
|
81
|
+
db.run('CREATE INDEX IF NOT EXISTS idx_history_timestamp ON history(timestamp_ms DESC)');
|
|
49
82
|
return new AiHist(db, { kind: 'sqlite', path: dbPath });
|
|
50
83
|
}
|
|
51
84
|
if (fallback === 'error') {
|
|
@@ -68,21 +101,55 @@ export async function openAiHist(opts = {}) {
|
|
|
68
101
|
)`);
|
|
69
102
|
db.run('CREATE INDEX idx_history_timestamp ON history (timestamp_ms DESC)');
|
|
70
103
|
db.run('CREATE INDEX idx_history_session ON history (session_id)');
|
|
104
|
+
ensureTrajectorySchema(db);
|
|
71
105
|
// scanLocalSources is async with yields between sources so the event
|
|
72
106
|
// loop stays responsive while we scan many MB of JSONL.
|
|
73
107
|
const rows = await scanLocalSources();
|
|
108
|
+
const trajectories = await scanLocalTrajectories();
|
|
74
109
|
const insert = db.prepare('INSERT OR IGNORE INTO history (source, session_id, project, prompt, timestamp_ms) VALUES (?, ?, ?, ?, ?)');
|
|
110
|
+
const insertTrajectory = db.prepare(`INSERT OR REPLACE INTO trajectories
|
|
111
|
+
(id, version, persona_id, project_id, task_title, task_description, status,
|
|
112
|
+
started_at, completed_at, decisions_json, retrospective_json, search_text,
|
|
113
|
+
path, updated_ms, timestamp_ms)
|
|
114
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`);
|
|
75
115
|
try {
|
|
76
116
|
db.exec('BEGIN');
|
|
77
117
|
for (const row of rows) {
|
|
78
118
|
insert.run([row.source, row.sessionId, row.project, row.prompt, row.timestampMs]);
|
|
79
119
|
}
|
|
120
|
+
for (const trajectory of trajectories) {
|
|
121
|
+
insertTrajectory.run([
|
|
122
|
+
trajectory.id,
|
|
123
|
+
trajectory.version,
|
|
124
|
+
trajectory.personaId,
|
|
125
|
+
trajectory.projectId,
|
|
126
|
+
trajectory.task.title,
|
|
127
|
+
trajectory.task.description,
|
|
128
|
+
trajectory.status,
|
|
129
|
+
trajectory.startedAt,
|
|
130
|
+
trajectory.completedAt,
|
|
131
|
+
JSON.stringify(trajectory.decisions),
|
|
132
|
+
JSON.stringify(trajectory.retrospective),
|
|
133
|
+
trajectory.searchText,
|
|
134
|
+
trajectory.path,
|
|
135
|
+
trajectory.updatedMs,
|
|
136
|
+
trajectory.timestampMs,
|
|
137
|
+
]);
|
|
138
|
+
insert.run([
|
|
139
|
+
'trajectory',
|
|
140
|
+
trajectory.id,
|
|
141
|
+
trajectory.projectId,
|
|
142
|
+
trajectory.searchText,
|
|
143
|
+
trajectory.timestampMs,
|
|
144
|
+
]);
|
|
145
|
+
}
|
|
80
146
|
db.exec('COMMIT');
|
|
81
147
|
}
|
|
82
148
|
finally {
|
|
83
149
|
insert.free();
|
|
150
|
+
insertTrajectory.free();
|
|
84
151
|
}
|
|
85
|
-
const scannedPaths = `${LOCAL_SOURCE_PATHS.claude}, ${LOCAL_SOURCE_PATHS.codex}, ${LOCAL_SOURCE_PATHS.cursorRoot}`;
|
|
152
|
+
const scannedPaths = `${LOCAL_SOURCE_PATHS.claude}, ${LOCAL_SOURCE_PATHS.codex}, ${LOCAL_SOURCE_PATHS.cursorRoot}, ${trajectoryRootDescription()}`;
|
|
86
153
|
return new AiHist(db, { kind: 'jsonl', path: scannedPaths });
|
|
87
154
|
}
|
|
88
155
|
async function pathExists(p) {
|
|
@@ -104,6 +171,40 @@ function rowToEntry(row) {
|
|
|
104
171
|
timestampMs: row.timestamp_ms,
|
|
105
172
|
};
|
|
106
173
|
}
|
|
174
|
+
function parseJson(raw, fallback) {
|
|
175
|
+
try {
|
|
176
|
+
return JSON.parse(raw);
|
|
177
|
+
}
|
|
178
|
+
catch {
|
|
179
|
+
return fallback;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
function rowToTrajectory(row) {
|
|
183
|
+
return {
|
|
184
|
+
id: row.id,
|
|
185
|
+
version: row.version,
|
|
186
|
+
personaId: row.persona_id,
|
|
187
|
+
projectId: row.project_id,
|
|
188
|
+
task: {
|
|
189
|
+
title: row.task_title,
|
|
190
|
+
description: row.task_description,
|
|
191
|
+
},
|
|
192
|
+
status: row.status,
|
|
193
|
+
startedAt: row.started_at,
|
|
194
|
+
completedAt: row.completed_at,
|
|
195
|
+
decisions: parseJson(row.decisions_json, []),
|
|
196
|
+
retrospective: parseJson(row.retrospective_json, {
|
|
197
|
+
summary: null,
|
|
198
|
+
approach: null,
|
|
199
|
+
learnings: [],
|
|
200
|
+
confidence: null,
|
|
201
|
+
}),
|
|
202
|
+
searchText: row.search_text,
|
|
203
|
+
path: row.path,
|
|
204
|
+
updatedMs: row.updated_ms,
|
|
205
|
+
timestampMs: row.timestamp_ms,
|
|
206
|
+
};
|
|
207
|
+
}
|
|
107
208
|
function buildFilters(opts) {
|
|
108
209
|
const clauses = [];
|
|
109
210
|
const params = [];
|
|
@@ -177,6 +278,14 @@ export class AiHist {
|
|
|
177
278
|
/**
|
|
178
279
|
* Group history into sessions, ordered by last activity (newest first).
|
|
179
280
|
* Sessions without a `session_id` are skipped.
|
|
281
|
+
*
|
|
282
|
+
* Implementation note: this used to use a correlated scalar subquery
|
|
283
|
+
* to pick `first_prompt`, which ran in O(sessions × rows) — ~19s on a
|
|
284
|
+
* 35K-row DB. Switched to `ROW_NUMBER() OVER (PARTITION BY session_id
|
|
285
|
+
* ORDER BY timestamp_ms)` so first-prompt picking is a single pass
|
|
286
|
+
* over the table (~300ms on the same DB). Plus the index ensure step
|
|
287
|
+
* in `openAiHist` keeps it fast even when the DB was written by the
|
|
288
|
+
* older Python CLI that didn't create `idx_history_session`.
|
|
180
289
|
*/
|
|
181
290
|
listSessions(opts = {}) {
|
|
182
291
|
const limit = opts.limit ?? 50;
|
|
@@ -185,28 +294,33 @@ export class AiHist {
|
|
|
185
294
|
SELECT id, source, session_id, project, prompt, timestamp_ms
|
|
186
295
|
FROM history
|
|
187
296
|
WHERE session_id IS NOT NULL AND session_id != ''${sql}
|
|
297
|
+
),
|
|
298
|
+
ranked AS (
|
|
299
|
+
SELECT
|
|
300
|
+
session_id,
|
|
301
|
+
source,
|
|
302
|
+
project,
|
|
303
|
+
prompt,
|
|
304
|
+
timestamp_ms,
|
|
305
|
+
ROW_NUMBER() OVER (
|
|
306
|
+
PARTITION BY session_id, source, project
|
|
307
|
+
ORDER BY timestamp_ms ASC, id ASC
|
|
308
|
+
) AS rn_first,
|
|
309
|
+
COUNT(*) OVER (PARTITION BY session_id, source, project) AS prompt_count,
|
|
310
|
+
MIN(timestamp_ms) OVER (PARTITION BY session_id, source, project) AS first_activity_ms,
|
|
311
|
+
MAX(timestamp_ms) OVER (PARTITION BY session_id, source, project) AS last_activity_ms
|
|
312
|
+
FROM filtered
|
|
188
313
|
)
|
|
189
314
|
SELECT
|
|
190
315
|
session_id,
|
|
191
316
|
source,
|
|
192
317
|
project,
|
|
193
|
-
|
|
318
|
+
prompt AS first_prompt,
|
|
194
319
|
first_activity_ms,
|
|
195
320
|
last_activity_ms,
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
FROM (
|
|
200
|
-
SELECT
|
|
201
|
-
session_id,
|
|
202
|
-
source,
|
|
203
|
-
project,
|
|
204
|
-
COUNT(*) AS prompt_count,
|
|
205
|
-
MIN(timestamp_ms) AS first_activity_ms,
|
|
206
|
-
MAX(timestamp_ms) AS last_activity_ms
|
|
207
|
-
FROM filtered
|
|
208
|
-
GROUP BY session_id, source, project
|
|
209
|
-
) AS grouped
|
|
321
|
+
prompt_count
|
|
322
|
+
FROM ranked
|
|
323
|
+
WHERE rn_first = 1
|
|
210
324
|
ORDER BY last_activity_ms DESC
|
|
211
325
|
LIMIT ?`, [...params, limit]);
|
|
212
326
|
return rows.map((row) => ({
|
|
@@ -265,6 +379,46 @@ export class AiHist {
|
|
|
265
379
|
ORDER BY timestamp_ms DESC
|
|
266
380
|
LIMIT ?`, [...params, limit]).map(rowToEntry);
|
|
267
381
|
}
|
|
382
|
+
/** Search compacted per-run trajectory WHY: decisions and retrospectives. */
|
|
383
|
+
searchTrajectories(query, opts = {}) {
|
|
384
|
+
const trimmed = query.trim();
|
|
385
|
+
if (!trimmed)
|
|
386
|
+
return [];
|
|
387
|
+
const limit = opts.limit ?? 20;
|
|
388
|
+
const escaped = trimmed.replace(/\\/g, '\\\\').replace(/%/g, '\\%').replace(/_/g, '\\_');
|
|
389
|
+
const pattern = `%${escaped}%`;
|
|
390
|
+
return runQuery(this.db, `SELECT id, version, persona_id, project_id, task_title, task_description, status,
|
|
391
|
+
started_at, completed_at, decisions_json, retrospective_json, search_text,
|
|
392
|
+
path, updated_ms, timestamp_ms
|
|
393
|
+
FROM trajectories
|
|
394
|
+
WHERE LOWER(search_text) LIKE LOWER(?) ESCAPE '\\'
|
|
395
|
+
OR LOWER(COALESCE(task_title, '')) LIKE LOWER(?) ESCAPE '\\'
|
|
396
|
+
OR LOWER(COALESCE(task_description, '')) LIKE LOWER(?) ESCAPE '\\'
|
|
397
|
+
OR LOWER(COALESCE(persona_id, '')) LIKE LOWER(?) ESCAPE '\\'
|
|
398
|
+
OR LOWER(COALESCE(project_id, '')) LIKE LOWER(?) ESCAPE '\\'
|
|
399
|
+
ORDER BY timestamp_ms DESC
|
|
400
|
+
LIMIT ?`, [pattern, pattern, pattern, pattern, pattern, limit]).map(rowToTrajectory);
|
|
401
|
+
}
|
|
402
|
+
/** Best-matching per-run trajectory for a task query, or `null` if none match. */
|
|
403
|
+
whyForTask(query) {
|
|
404
|
+
return this.searchTrajectories(query, { limit: 1 })[0] ?? null;
|
|
405
|
+
}
|
|
406
|
+
/** Single entry by id, or `null` if not found. */
|
|
407
|
+
getEntry(id) {
|
|
408
|
+
const rows = runQuery(this.db, `SELECT id, source, session_id, project, prompt, timestamp_ms
|
|
409
|
+
FROM history WHERE id = ?`, [id]);
|
|
410
|
+
return rows.length > 0 ? rowToEntry(rows[0]) : null;
|
|
411
|
+
}
|
|
412
|
+
/**
|
|
413
|
+
* All entries whose timestamp falls within [timestampMs - windowMs,
|
|
414
|
+
* timestampMs + windowMs], ordered oldest first. Used by get_context.
|
|
415
|
+
*/
|
|
416
|
+
getInTimeWindow(timestampMs, windowMs) {
|
|
417
|
+
return runQuery(this.db, `SELECT id, source, session_id, project, prompt, timestamp_ms
|
|
418
|
+
FROM history
|
|
419
|
+
WHERE timestamp_ms BETWEEN ? AND ?
|
|
420
|
+
ORDER BY timestamp_ms ASC`, [timestampMs - windowMs, timestampMs + windowMs]).map(rowToEntry);
|
|
421
|
+
}
|
|
268
422
|
/** Counts + date range, mirroring `ai-hist stats`. */
|
|
269
423
|
stats() {
|
|
270
424
|
const total = runQuery(this.db, 'SELECT COUNT(*) AS c FROM history', [])[0]?.c ?? 0;
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* ai-hist MCP server — exposes AI coding agent history as MCP tools.
|
|
4
|
+
*
|
|
5
|
+
* Covers Claude Code, Codex, Cursor, and Agent Relay in a single index.
|
|
6
|
+
* Uses the ai-hist SQLite database when present ($AI_HIST_DB or the
|
|
7
|
+
* default ~/.local/share/ai-hist/ai-history.db), falling back to
|
|
8
|
+
* scanning local JSONL source files directly so the server works without
|
|
9
|
+
* running `ai-hist sync` first.
|
|
10
|
+
*/
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=mcp-server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":";AACA;;;;;;;;GAQG"}
|