diff --git a/README.md b/README.md index f274634..e233b13 100644 --- a/README.md +++ b/README.md @@ -23,6 +23,10 @@ Every agentic session leaves a JSONL trail. Endless possibilities inside each ex - You reach back through a **local dashboard** — timelines, plan versions, and milestones, all in your browser at `localhost:3737`. - **Nothing leaves your machine.** No telemetry, no cloud sync; optional AI agents use your own API key. +

+ +

+ ## How Keddy Works diff --git a/package.json b/package.json index 3c25c24..f5e7869 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "keddy", - "version": "0.1.0", - "description": "Session intelligence for Claude Code — navigable timelines, plan tracking, and past session search", + "version": "0.1.1", + "description": "Session intelligence for your coding agent.", "license": "Apache-2.0", "author": { "name": "Emir Enes Aksay", @@ -9,10 +9,10 @@ }, "repository": { "type": "git", - "url": "git+https://github.com/emireaksay-8867/keddy.git" + "url": "git+https://github.com/emiraksay/keddy.git" }, - "homepage": "https://github.com/emireaksay-8867/keddy#readme", - "bugs": "https://github.com/emireaksay-8867/keddy/issues", + "homepage": "https://github.com/emiraksay/keddy#readme", + "bugs": "https://github.com/emiraksay/keddy/issues", "keywords": [ "claude-code", "session-intelligence", diff --git a/tests/parser-advanced.test.ts b/tests/parser-advanced.test.ts index 3d4ef00..1f9c85b 100644 --- a/tests/parser-advanced.test.ts +++ b/tests/parser-advanced.test.ts @@ -87,8 +87,9 @@ describe("parseTranscript — multi-turn assistant text accumulation", () => { expect(result.exchanges.length).toBe(1); const exchange = result.exchanges[0]; - // Should contain text from ALL three assistant messages - expect(exchange.assistant_response).toContain("Let me look at the login code first"); + // Text before the first tool call lands in assistant_response_pre; + // text after tool calls lands in assistant_response. + expect(exchange.assistant_response_pre).toContain("Let me look at the login code first"); expect(exchange.assistant_response).toContain("I see the issue"); expect(exchange.assistant_response).toContain("login function has been fixed"); }); diff --git a/tests/parser.test.ts b/tests/parser.test.ts index a793627..cb6a404 100644 --- a/tests/parser.test.ts +++ b/tests/parser.test.ts @@ -300,7 +300,7 @@ describe("split content blocks (real Claude Code format)", () => { expect(result.exchanges[0].tool_calls.length).toBe(2); expect(result.exchanges[0].tool_calls[0].name).toBe("Read"); expect(result.exchanges[0].tool_calls[1].name).toBe("Read"); - expect(result.exchanges[0].assistant_response).toContain("I'll read the file"); + expect(result.exchanges[0].assistant_response_pre).toContain("I'll read the file"); expect(result.exchanges[0].assistant_response).toContain("The project has two files"); }); @@ -314,9 +314,11 @@ describe("split content blocks (real Claude Code format)", () => { it("should accumulate all text across split assistant entries", () => { const result = parseTranscript(join(FIXTURES, "sample-split-blocks.jsonl")); - // Exchange 0 has text from TWO separate assistant entries (line 4 + line 9) + // Exchange 0 has text from TWO separate assistant entries (line 4 + line 9). + // Pre-tool text lands in assistant_response_pre; post-tool text lands in assistant_response. + const pre = result.exchanges[0].assistant_response_pre; const resp = result.exchanges[0].assistant_response; - expect(resp).toContain("I'll read the file"); + expect(pre).toContain("I'll read the file"); expect(resp).toContain("index.ts"); expect(resp).toContain("utils.ts"); });