From 87ab0c579978f658e561938ac2f487c01a548af0 Mon Sep 17 00:00:00 2001 From: emireaksay-8867 Date: Thu, 23 Apr 2026 20:17:18 +0200 Subject: [PATCH 1/5] chore: bump to 0.1.1 for initial public release --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 3c25c24..f5726a9 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", From 323d83532e42486238a9735184ec85909555155b Mon Sep 17 00:00:00 2001 From: emireaksay-8867 Date: Thu, 23 Apr 2026 20:40:17 +0200 Subject: [PATCH 2/5] test: align parser assertions with pre/post text split --- tests/parser.test.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) 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"); }); From a993438b6249adb5f49b2aea21d4cc9d248ba945 Mon Sep 17 00:00:00 2001 From: emireaksay-8867 Date: Thu, 23 Apr 2026 20:46:23 +0200 Subject: [PATCH 3/5] test: third parser assertion aligned with pre/post split --- tests/parser-advanced.test.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) 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"); }); From 19e47ad166670cc513c135a98757bdc10aaad53e Mon Sep 17 00:00:00 2001 From: emireaksay-8867 Date: Thu, 23 Apr 2026 20:50:04 +0200 Subject: [PATCH 4/5] fix: correct repository URL in package.json --- package.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index f5726a9..f5e7869 100644 --- a/package.json +++ b/package.json @@ -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", From aff376a3ad69e19584fe2d913bb3ba6f0463b658 Mon Sep 17 00:00:00 2001 From: emireaksay-8867 Date: Fri, 24 Apr 2026 16:04:24 +0200 Subject: [PATCH 5/5] docs: embed demo video above architecture section Co-Authored-By: Claude Opus 4.7 (1M context) --- README.md | 4 ++++ 1 file changed, 4 insertions(+) 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