agentcache 0.3.1 → 0.3.3
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 +76 -27
- package/dist/{chunk-R4SJESNM.js → chunk-OXHITHDC.js} +1 -1
- package/dist/{chunk-TE6DBLJ5.js → chunk-QVQJPJGX.js} +1 -1
- package/dist/{chunk-WHP4Z32Z.js → chunk-S4GSIEKL.js} +3 -1
- package/dist/{chunk-RXBTPJVW.js → chunk-VFE4SDMO.js} +1 -1
- package/dist/{chunk-MMSMDJ4O.js → chunk-ZVDODLZ7.js} +3 -0
- package/dist/cli.js +7 -7
- package/dist/{compile-all-DOQ5XU5K.js → compile-all-XQBGUI3F.js} +8 -6
- package/dist/mcp.js +70 -7
- package/dist/{paths-LOLEIMI5.js → paths-ULP2T4HZ.js} +1 -1
- package/dist/postinstall.js +3 -3
- package/dist/{pre-tool-use-OWWS54XG.js → pre-tool-use-UBJFRHCW.js} +2 -2
- package/dist/{session-start-YSRUGD5N.js → session-start-SUR6FXRD.js} +3 -3
- package/dist/{setup-5APZETPV.js → setup-TVNRAAK3.js} +2 -2
- package/dist/{sqlite-AUND6HGQ.js → sqlite-MP6SRBBQ.js} +1 -1
- package/dist/{stop-6SROS34Q.js → stop-HFZZ2LFA.js} +3 -3
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -32,38 +32,38 @@ No `init`. No `setup`. No config. No second command. The install itself:
|
|
|
32
32
|
## How It Works
|
|
33
33
|
|
|
34
34
|
```
|
|
35
|
-
|
|
36
|
-
│ Your Machine
|
|
37
|
-
│
|
|
38
|
-
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐
|
|
39
|
-
│ │ Claude │ │ Cursor │ │ Roo │ │ Codex │ ...
|
|
40
|
-
│ │ Code │ │ │ │ Code │ │ │
|
|
41
|
-
│ └────┬─────┘ └────┬─────┘ └────┬─────┘ └────┬─────┘
|
|
42
|
-
│ │
|
|
43
|
-
│
|
|
35
|
+
┌────────────────────────────────────────────────────────────────────────┐
|
|
36
|
+
│ Your Machine │
|
|
37
|
+
│ │
|
|
38
|
+
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
|
|
39
|
+
│ │ Claude │ │ Cursor │ │ Roo │ │ Codex │ ... │
|
|
40
|
+
│ │ Code │ │ │ │ Code │ │ │ │
|
|
41
|
+
│ └────┬─────┘ └────┬─────┘ └────┬─────┘ └────┬─────┘ │
|
|
42
|
+
│ │ │ │ │ │
|
|
43
|
+
│ └─────────────┴─────────────┴─────────────┘ │
|
|
44
44
|
│ │ │
|
|
45
45
|
│ MCP Protocol (stdio) │
|
|
46
46
|
│ │ │
|
|
47
|
-
│ ┌────────────┴────────────┐
|
|
48
|
-
│ │ AgentCache MCP Server
|
|
49
|
-
│ │ (agentcache serve) │
|
|
50
|
-
│ │
|
|
51
|
-
│ │ spawns compile-all
|
|
52
|
-
│ │ when pending > 20
|
|
53
|
-
│ └────────────┬────────────┘
|
|
47
|
+
│ ┌────────────┴────────────┐ ┌────────────────────┐ │
|
|
48
|
+
│ │ AgentCache MCP Server │ │ agentcache │ │
|
|
49
|
+
│ │ (agentcache serve) │ │ compile-all │ │
|
|
50
|
+
│ │ │ │ (standalone CLI) │ │
|
|
51
|
+
│ │ spawns compile-all ────┼────▶│ │ │
|
|
52
|
+
│ │ when pending > 20 │ │ Uses: claude, │ │
|
|
53
|
+
│ └────────────┬────────────┘ │ codex, gemini, │ │
|
|
54
54
|
│ │ │ ollama, API keys │ │
|
|
55
55
|
│ │ └─────────┬──────────┘ │
|
|
56
56
|
│ │ │ │
|
|
57
57
|
│ ┌─────────┴────────────────────────────┘ │
|
|
58
|
-
│ │
|
|
59
|
-
│ ▼
|
|
60
|
-
│
|
|
61
|
-
│ │ ~/.agentcache/ │
|
|
62
|
-
│ │ agentcache.db │
|
|
63
|
-
│ │ compile-all.lock │
|
|
64
|
-
│ │ (SQLite + WAL) │
|
|
65
|
-
│
|
|
66
|
-
|
|
58
|
+
│ │ │
|
|
59
|
+
│ ▼ │
|
|
60
|
+
│ ┌────────────────────┐ │
|
|
61
|
+
│ │ ~/.agentcache/ │ │
|
|
62
|
+
│ │ agentcache.db │ │
|
|
63
|
+
│ │ compile-all.lock │ │
|
|
64
|
+
│ │ (SQLite + WAL) │ │
|
|
65
|
+
│ └────────────────────┘ │
|
|
66
|
+
└────────────────────────────────────────────────────────────────────────┘
|
|
67
67
|
```
|
|
68
68
|
|
|
69
69
|
### The Cycle
|
|
@@ -185,13 +185,58 @@ All IDEs are fully auto-approved at install time — no manual steps required.
|
|
|
185
185
|
|
|
186
186
|
"via compile-all" means `agentcache compile-all` discovers and processes these transcripts in batch, independent of any active MCP session.
|
|
187
187
|
|
|
188
|
+
## Skill Output (Agent Skills Spec)
|
|
189
|
+
|
|
190
|
+
Compiled knowledge is automatically projected to SKILL.md files — the [Agent Skills open standard](https://agentskills.io) supported by 38+ tools (Claude Code, Cursor, Codex, Gemini CLI, Copilot, Roo Code, and more).
|
|
191
|
+
|
|
192
|
+
```
|
|
193
|
+
~/.agentcache/skills/developer-knowledge/SKILL.md # Global: rules + lessons
|
|
194
|
+
<repo>/.agentcache/skills/project-knowledge/SKILL.md # Project: decisions + context
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
**Global skill** (`~/.agentcache/skills/`) — your developer identity. Rules and lessons learned across all projects. Auto-discovered by any Agent Skills-compatible tool without MCP.
|
|
198
|
+
|
|
199
|
+
**Project skill** (`<repo>/.agentcache/skills/`) — project-specific decisions, context, and rules. Git-trackable. Team members get it on clone. **This is team knowledge sharing without a sync server — just git.**
|
|
200
|
+
|
|
201
|
+
Skills auto-refresh on every compilation. Each file stays under 5,000 tokens (Agent Skills budget limit). High-confidence items appear first.
|
|
202
|
+
|
|
203
|
+
Example output:
|
|
204
|
+
```markdown
|
|
205
|
+
---
|
|
206
|
+
name: project-knowledge
|
|
207
|
+
description: "Project-specific decisions, rules, context, and lessons — compiled automatically from coding sessions by AgentCache"
|
|
208
|
+
---
|
|
209
|
+
|
|
210
|
+
## Rules
|
|
211
|
+
|
|
212
|
+
Follow these without exception:
|
|
213
|
+
|
|
214
|
+
- Always use path aliases in imports
|
|
215
|
+
- Never commit .env files [ENFORCED]
|
|
216
|
+
|
|
217
|
+
## Decisions
|
|
218
|
+
|
|
219
|
+
Architectural choices in effect — do not contradict:
|
|
220
|
+
|
|
221
|
+
- Using Drizzle ORM over Prisma for raw SQL escape hatches
|
|
222
|
+
- PostgreSQL for all persistent state, Redis for ephemeral cache only
|
|
223
|
+
|
|
224
|
+
## Current Context
|
|
225
|
+
|
|
226
|
+
Active project state (may be temporal):
|
|
227
|
+
|
|
228
|
+
- Migrating from REST to GraphQL, both coexist until Q3
|
|
229
|
+
```
|
|
230
|
+
|
|
188
231
|
## Data Storage
|
|
189
232
|
|
|
190
|
-
All data lives in `~/.agentcache
|
|
233
|
+
All data lives in `~/.agentcache/` (SQLite with WAL mode for concurrent access).
|
|
191
234
|
|
|
192
235
|
```
|
|
193
236
|
~/.agentcache/
|
|
194
|
-
|
|
237
|
+
├── agentcache.db # Knowledge, observations, sessions, pending queue
|
|
238
|
+
├── compile-all.lock # Prevents concurrent compilation
|
|
239
|
+
└── skills/developer-knowledge/SKILL.md # Global skill (auto-generated)
|
|
195
240
|
```
|
|
196
241
|
|
|
197
242
|
No data leaves your machine. No network calls. No telemetry. No accounts.
|
|
@@ -218,6 +263,10 @@ Extract → Normalize → Canonicalize → Cluster → Detect Contradictions →
|
|
|
218
263
|
- **In-session** — the agent in your IDE processes extraction prompts via MCP tools (no separate LLM calls needed)
|
|
219
264
|
- **Batch (`compile-all`)** — runs independently using any available LLM CLI or API, processes the full backlog without depending on active sessions
|
|
220
265
|
|
|
266
|
+
**Two output formats:**
|
|
267
|
+
- **MCP injection** — structured context served to agents at session start via `inject_context`
|
|
268
|
+
- **SKILL.md files** — Agent Skills spec-compliant files auto-discovered by 38+ tools without MCP
|
|
269
|
+
|
|
221
270
|
## Project Identity
|
|
222
271
|
|
|
223
272
|
Projects are identified by a hash of their full filesystem path, not just the folder name. This means:
|
|
@@ -8,12 +8,14 @@ import { createHash } from "crypto";
|
|
|
8
8
|
import { execSync } from "child_process";
|
|
9
9
|
function run(cmd, cwd) {
|
|
10
10
|
try {
|
|
11
|
-
return execSync(cmd, { cwd, encoding: "utf-8", timeout: 5e3 }).trim();
|
|
11
|
+
return execSync(cmd, { cwd, encoding: "utf-8", timeout: 5e3, stdio: ["pipe", "pipe", "pipe"] }).trim();
|
|
12
12
|
} catch {
|
|
13
13
|
return "";
|
|
14
14
|
}
|
|
15
15
|
}
|
|
16
16
|
function getGitContext(projectRoot) {
|
|
17
|
+
const empty = { branch: "", commit: "", recentCommits: [], modifiedFiles: [] };
|
|
18
|
+
if (!run("git rev-parse --git-dir", projectRoot)) return empty;
|
|
17
19
|
const branch = run("git rev-parse --abbrev-ref HEAD", projectRoot);
|
|
18
20
|
const commit = run("git rev-parse --short HEAD", projectRoot);
|
|
19
21
|
const recentCommits = run("git log --oneline -10", projectRoot).split("\n").filter(Boolean);
|
|
@@ -128,6 +128,9 @@ var SqliteKnowledgeRepository = class {
|
|
|
128
128
|
if (!row) return null;
|
|
129
129
|
return this.mapSession(row);
|
|
130
130
|
}
|
|
131
|
+
updateSessionTranscriptPath(sessionId, transcriptPath) {
|
|
132
|
+
this.db.prepare("UPDATE sessions SET transcript_path = ? WHERE id = ?").run(transcriptPath, sessionId);
|
|
133
|
+
}
|
|
131
134
|
getCompiledTranscriptPaths(project) {
|
|
132
135
|
const rows = this.db.prepare("SELECT transcript_path FROM sessions WHERE project = ? AND transcript_path != ''").all(project);
|
|
133
136
|
return rows.map((r) => r.transcript_path);
|
package/dist/cli.js
CHANGED
|
@@ -5,7 +5,7 @@ import { Command } from "commander";
|
|
|
5
5
|
var program = new Command();
|
|
6
6
|
program.name("agentcache").description("Engineering Knowledge Compiler \u2014 universal, zero-config").version("0.3.1");
|
|
7
7
|
program.command("setup").description("Detect IDEs and register AgentCache (runs automatically on install)").action(async () => {
|
|
8
|
-
const { runSetup } = await import("./setup-
|
|
8
|
+
const { runSetup } = await import("./setup-TVNRAAK3.js");
|
|
9
9
|
await runSetup();
|
|
10
10
|
});
|
|
11
11
|
program.command("serve").description("Start AgentCache MCP server (spawned by IDEs automatically)").action(async () => {
|
|
@@ -13,7 +13,7 @@ program.command("serve").description("Start AgentCache MCP server (spawned by ID
|
|
|
13
13
|
await startMcpServer();
|
|
14
14
|
});
|
|
15
15
|
program.command("compile-session").description("Stop hook: queue transcript for compilation").action(async () => {
|
|
16
|
-
const { handleStop } = await import("./stop-
|
|
16
|
+
const { handleStop } = await import("./stop-HFZZ2LFA.js");
|
|
17
17
|
let payload;
|
|
18
18
|
try {
|
|
19
19
|
let data = "";
|
|
@@ -28,11 +28,11 @@ program.command("compile-session").description("Stop hook: queue transcript for
|
|
|
28
28
|
await handleStop(payload);
|
|
29
29
|
});
|
|
30
30
|
program.command("discover").description("SessionStart hook: discover uncompiled transcripts").action(async () => {
|
|
31
|
-
const { handleSessionStart } = await import("./session-start-
|
|
31
|
+
const { handleSessionStart } = await import("./session-start-SUR6FXRD.js");
|
|
32
32
|
await handleSessionStart();
|
|
33
33
|
});
|
|
34
34
|
program.command("enforce").description("PreToolUse hook: policy enforcement").action(async () => {
|
|
35
|
-
const { handlePreToolUse } = await import("./pre-tool-use-
|
|
35
|
+
const { handlePreToolUse } = await import("./pre-tool-use-UBJFRHCW.js");
|
|
36
36
|
let data = "";
|
|
37
37
|
for await (const chunk of process.stdin) {
|
|
38
38
|
data += chunk;
|
|
@@ -46,16 +46,16 @@ program.command("enforce").description("PreToolUse hook: policy enforcement").ac
|
|
|
46
46
|
}
|
|
47
47
|
});
|
|
48
48
|
program.command("compile-all").description("Batch-compile all unprocessed transcripts using an available LLM CLI").action(async () => {
|
|
49
|
-
const { runCompileAll } = await import("./compile-all-
|
|
49
|
+
const { runCompileAll } = await import("./compile-all-XQBGUI3F.js");
|
|
50
50
|
await runCompileAll();
|
|
51
51
|
});
|
|
52
52
|
program.command("status").description("Show AgentCache knowledge stats").action(async () => {
|
|
53
|
-
const { getDbPath, isInitialized, findProjectRoot, getProjectId, getProjectDisplayName } = await import("./paths-
|
|
53
|
+
const { getDbPath, isInitialized, findProjectRoot, getProjectId, getProjectDisplayName } = await import("./paths-ULP2T4HZ.js");
|
|
54
54
|
if (!isInitialized()) {
|
|
55
55
|
console.log("AgentCache not initialized. Run: agentcache setup");
|
|
56
56
|
return;
|
|
57
57
|
}
|
|
58
|
-
const { SqliteKnowledgeRepository } = await import("./sqlite-
|
|
58
|
+
const { SqliteKnowledgeRepository } = await import("./sqlite-MP6SRBBQ.js");
|
|
59
59
|
const repo = new SqliteKnowledgeRepository(getDbPath());
|
|
60
60
|
const projectRoot = findProjectRoot();
|
|
61
61
|
const project = getProjectId(projectRoot);
|
|
@@ -2,11 +2,11 @@ import {
|
|
|
2
2
|
processClustering,
|
|
3
3
|
processExtraction,
|
|
4
4
|
startCompile
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-OXHITHDC.js";
|
|
6
6
|
import {
|
|
7
7
|
acquireLock,
|
|
8
8
|
releaseLock
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-VFE4SDMO.js";
|
|
10
10
|
import {
|
|
11
11
|
findAllClaudeTranscripts,
|
|
12
12
|
findAllCodexTranscripts,
|
|
@@ -14,15 +14,15 @@ import {
|
|
|
14
14
|
findAllRooCodeTranscripts,
|
|
15
15
|
getGooseDbPath,
|
|
16
16
|
parseTranscript
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-QVQJPJGX.js";
|
|
18
18
|
import {
|
|
19
19
|
getDbPath,
|
|
20
20
|
getProjectId,
|
|
21
21
|
isInitialized
|
|
22
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-S4GSIEKL.js";
|
|
23
23
|
import {
|
|
24
24
|
SqliteKnowledgeRepository
|
|
25
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-ZVDODLZ7.js";
|
|
26
26
|
import {
|
|
27
27
|
__esm,
|
|
28
28
|
__export,
|
|
@@ -317,16 +317,18 @@ function processOneTranscript(repo, path, project, projectRoot, backend) {
|
|
|
317
317
|
const events = parseTranscript(path);
|
|
318
318
|
if (events.length < 3) return { created: 0, reinforced: 0, skipped: true };
|
|
319
319
|
const sessionId = `sess_${randomUUID().slice(0, 8)}`;
|
|
320
|
-
const state = startCompile(events, sessionId, project, projectRoot, repo
|
|
320
|
+
const state = startCompile(events, sessionId, project, projectRoot, repo);
|
|
321
321
|
const extractionResponse = backend.invoke(state.prompt);
|
|
322
322
|
if (!extractionResponse) return { created: 0, reinforced: 0, skipped: true };
|
|
323
323
|
const extractResult = processExtraction(repo, extractionResponse, sessionId, project, projectRoot);
|
|
324
324
|
if (extractResult.status === "complete") {
|
|
325
|
+
repo.updateSessionTranscriptPath(sessionId, path);
|
|
325
326
|
return { created: 0, reinforced: 0, skipped: false };
|
|
326
327
|
}
|
|
327
328
|
const clusterResponse = backend.invoke(extractResult.clusteringPrompt);
|
|
328
329
|
if (!clusterResponse) return { created: 0, reinforced: 0, skipped: true };
|
|
329
330
|
const clusterResult = processClustering(repo, clusterResponse, sessionId, project, projectRoot);
|
|
331
|
+
repo.updateSessionTranscriptPath(sessionId, path);
|
|
330
332
|
const diag = clusterResult.diagnostics;
|
|
331
333
|
const createdMatch = diag.match(/(\d+) new knowledge/);
|
|
332
334
|
const reinforcedMatch = diag.match(/(\d+) reinforced/);
|
package/dist/mcp.js
CHANGED
|
@@ -6,29 +6,91 @@ import {
|
|
|
6
6
|
processClustering,
|
|
7
7
|
processExtraction,
|
|
8
8
|
startCompile
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-OXHITHDC.js";
|
|
10
10
|
import {
|
|
11
11
|
spawnCompileAll
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-VFE4SDMO.js";
|
|
13
13
|
import {
|
|
14
14
|
parseTranscript
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-QVQJPJGX.js";
|
|
16
16
|
import {
|
|
17
17
|
findProjectRoot,
|
|
18
|
+
getDataDir,
|
|
18
19
|
getDbPath,
|
|
19
20
|
getProjectId,
|
|
20
21
|
isInitialized
|
|
21
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-S4GSIEKL.js";
|
|
22
23
|
import {
|
|
23
24
|
SqliteKnowledgeRepository
|
|
24
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-ZVDODLZ7.js";
|
|
25
26
|
import "./chunk-KFQGP6VL.js";
|
|
26
27
|
|
|
27
28
|
// src/mcp.ts
|
|
28
29
|
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
29
30
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
30
31
|
import { CallToolRequestSchema, ListToolsRequestSchema, RootsListChangedNotificationSchema } from "@modelcontextprotocol/sdk/types.js";
|
|
31
|
-
|
|
32
|
+
|
|
33
|
+
// src/utils/auto-update.ts
|
|
34
|
+
import { execSync, spawn } from "child_process";
|
|
35
|
+
import { readFileSync, writeFileSync, existsSync } from "fs";
|
|
36
|
+
import { join } from "path";
|
|
37
|
+
var CHECK_INTERVAL_MS = 4 * 60 * 60 * 1e3;
|
|
38
|
+
function getLastCheckPath() {
|
|
39
|
+
return join(getDataDir(), "last-update-check.json");
|
|
40
|
+
}
|
|
41
|
+
function shouldCheck() {
|
|
42
|
+
const path = getLastCheckPath();
|
|
43
|
+
if (!existsSync(path)) return true;
|
|
44
|
+
try {
|
|
45
|
+
const data = JSON.parse(readFileSync(path, "utf-8"));
|
|
46
|
+
return Date.now() - data.checkedAt > CHECK_INTERVAL_MS;
|
|
47
|
+
} catch {
|
|
48
|
+
return true;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
function markChecked() {
|
|
52
|
+
writeFileSync(getLastCheckPath(), JSON.stringify({ checkedAt: Date.now() }), "utf-8");
|
|
53
|
+
}
|
|
54
|
+
function getCurrentVersion() {
|
|
55
|
+
const pkgPath = new URL("../../package.json", import.meta.url);
|
|
56
|
+
const pkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
|
|
57
|
+
return pkg.version;
|
|
58
|
+
}
|
|
59
|
+
function getLatestVersion() {
|
|
60
|
+
try {
|
|
61
|
+
return execSync("npm view agentcache version", {
|
|
62
|
+
encoding: "utf-8",
|
|
63
|
+
timeout: 1e4,
|
|
64
|
+
stdio: ["pipe", "pipe", "pipe"]
|
|
65
|
+
}).trim();
|
|
66
|
+
} catch {
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
function isNewer(latest, current) {
|
|
71
|
+
const l = latest.split(".").map(Number);
|
|
72
|
+
const c = current.split(".").map(Number);
|
|
73
|
+
for (let i = 0; i < 3; i++) {
|
|
74
|
+
if ((l[i] || 0) > (c[i] || 0)) return true;
|
|
75
|
+
if ((l[i] || 0) < (c[i] || 0)) return false;
|
|
76
|
+
}
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
function checkForUpdates() {
|
|
80
|
+
if (!shouldCheck()) return;
|
|
81
|
+
markChecked();
|
|
82
|
+
const current = getCurrentVersion();
|
|
83
|
+
const latest = getLatestVersion();
|
|
84
|
+
if (!latest || !isNewer(latest, current)) return;
|
|
85
|
+
const child = spawn("npm", ["install", "-g", "agentcache@latest"], {
|
|
86
|
+
detached: true,
|
|
87
|
+
stdio: "ignore"
|
|
88
|
+
});
|
|
89
|
+
child.unref();
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// src/mcp.ts
|
|
93
|
+
import { existsSync as existsSync2 } from "fs";
|
|
32
94
|
import { randomUUID } from "crypto";
|
|
33
95
|
function defaultScope(type) {
|
|
34
96
|
return type === "rule" || type === "lesson" ? "global" : "project";
|
|
@@ -62,6 +124,7 @@ async function startMcpServer() {
|
|
|
62
124
|
);
|
|
63
125
|
server.oninitialized = async () => {
|
|
64
126
|
await resolveRoots(server);
|
|
127
|
+
checkForUpdates();
|
|
65
128
|
};
|
|
66
129
|
server.setNotificationHandler(RootsListChangedNotificationSchema, async () => {
|
|
67
130
|
await resolveRoots(server);
|
|
@@ -281,7 +344,7 @@ ${pendingCount} sessions pending compilation (background compiler already runnin
|
|
|
281
344
|
if (!entry) {
|
|
282
345
|
return { content: [{ type: "text", text: JSON.stringify({ message: "No pending sessions to compile." }) }] };
|
|
283
346
|
}
|
|
284
|
-
if (!
|
|
347
|
+
if (!existsSync2(entry.transcriptPath)) {
|
|
285
348
|
return { content: [{ type: "text", text: JSON.stringify({ message: `Transcript not found: ${entry.transcriptPath}, skipped.` }) }] };
|
|
286
349
|
}
|
|
287
350
|
const events = parseTranscript(entry.transcriptPath);
|
package/dist/postinstall.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
spawnCompileAll
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-VFE4SDMO.js";
|
|
4
4
|
import {
|
|
5
5
|
detectInstalledIdes,
|
|
6
6
|
registerClaudeHooks,
|
|
@@ -10,10 +10,10 @@ import {
|
|
|
10
10
|
getDataDir,
|
|
11
11
|
getDbPath,
|
|
12
12
|
migrateFromLegacy
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-S4GSIEKL.js";
|
|
14
14
|
import {
|
|
15
15
|
SqliteKnowledgeRepository
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-ZVDODLZ7.js";
|
|
17
17
|
import "./chunk-KFQGP6VL.js";
|
|
18
18
|
|
|
19
19
|
// src/postinstall.ts
|
|
@@ -6,10 +6,10 @@ import {
|
|
|
6
6
|
getDbPath,
|
|
7
7
|
getProjectId,
|
|
8
8
|
isInitialized
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-S4GSIEKL.js";
|
|
10
10
|
import {
|
|
11
11
|
SqliteKnowledgeRepository
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-ZVDODLZ7.js";
|
|
13
13
|
import "./chunk-KFQGP6VL.js";
|
|
14
14
|
|
|
15
15
|
// src/hooks/pre-tool-use.ts
|
|
@@ -3,15 +3,15 @@ import {
|
|
|
3
3
|
findAllCodexTranscripts,
|
|
4
4
|
findAllContinueTranscripts,
|
|
5
5
|
findAllRooCodeTranscripts
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-QVQJPJGX.js";
|
|
7
7
|
import {
|
|
8
8
|
getDbPath,
|
|
9
9
|
getProjectId,
|
|
10
10
|
isInitialized
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-S4GSIEKL.js";
|
|
12
12
|
import {
|
|
13
13
|
SqliteKnowledgeRepository
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-ZVDODLZ7.js";
|
|
15
15
|
import "./chunk-KFQGP6VL.js";
|
|
16
16
|
|
|
17
17
|
// src/hooks/session-start.ts
|
|
@@ -7,10 +7,10 @@ import {
|
|
|
7
7
|
getDataDir,
|
|
8
8
|
getDbPath,
|
|
9
9
|
migrateFromLegacy
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-S4GSIEKL.js";
|
|
11
11
|
import {
|
|
12
12
|
SqliteKnowledgeRepository
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-ZVDODLZ7.js";
|
|
14
14
|
import "./chunk-KFQGP6VL.js";
|
|
15
15
|
|
|
16
16
|
// src/setup.ts
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import {
|
|
2
2
|
findLatestTranscript
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-QVQJPJGX.js";
|
|
4
4
|
import {
|
|
5
5
|
findProjectRoot,
|
|
6
6
|
getDbPath,
|
|
7
7
|
getProjectId,
|
|
8
8
|
isInitialized
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-S4GSIEKL.js";
|
|
10
10
|
import {
|
|
11
11
|
SqliteKnowledgeRepository
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-ZVDODLZ7.js";
|
|
13
13
|
import "./chunk-KFQGP6VL.js";
|
|
14
14
|
|
|
15
15
|
// src/hooks/stop.ts
|