From 7d7a5240e1eecfeaf28366e15c6706b6151529e2 Mon Sep 17 00:00:00 2001 From: shahinyanm Date: Fri, 5 Jun 2026 16:27:13 +0400 Subject: [PATCH] v0.41.1: remove sessionTitle overwrite (use additive statusline instead) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit v0.36.0 set the Claude Code window/tab title to `[TP] Nk saved` via the `sessionTitle` SessionStart return field. Problem: sessionTitle OVERWRITES Claude Code's own session name — an intrusive clobber. A user hit it in the wild ("он перекрывает название сессии. и это хреново") and asked the obvious question: why not do it like caveman? Caveman is right: the badge belongs in the STATUSLINE — an additive UI line that sits ALONGSIDE the session name, not on top of it. token-pilot already ships exactly that (hooks/tp-statusline.sh + statusline-chain.sh, which renders `[TP deny 12k]` next to caveman's badge). The sessionTitle write was redundant with it AND destructive. Fix: drop the entire sessionTitle block from hook-session-start (both the saved-tokens and the workflow-progress variants). The SessionStart hook now returns only additionalContext + watchPaths. Cumulative savings continue to show via the statusline badge (doctor already nudges users to configure it); the session name stays the user's. Workflow progress can ride the statusline too if wanted — tp-statusline.sh can read the active workflow — rather than hijacking the title. No tests referenced sessionTitle; clean removal. Tests: 1333/1333 pass. Build: clean (25 agents under 0.41.1). --- .claude-plugin/marketplace.json | 4 +- .claude-plugin/plugin.json | 2 +- agents/tp-api-surface-tracker.md | 2 +- agents/tp-audit-scanner.md | 2 +- agents/tp-commit-writer.md | 2 +- agents/tp-context-engineer.md | 2 +- agents/tp-dead-code-finder.md | 2 +- agents/tp-debugger.md | 2 +- agents/tp-dep-health.md | 2 +- agents/tp-doc-writer.md | 2 +- agents/tp-history-explorer.md | 2 +- agents/tp-impact-analyzer.md | 2 +- agents/tp-incident-timeline.md | 2 +- agents/tp-incremental-builder.md | 2 +- agents/tp-migration-scout.md | 2 +- agents/tp-onboard.md | 2 +- agents/tp-performance-profiler.md | 2 +- agents/tp-pr-reviewer.md | 2 +- agents/tp-refactor-planner.md | 2 +- agents/tp-review-impact.md | 2 +- agents/tp-run.md | 2 +- agents/tp-session-restorer.md | 2 +- agents/tp-ship-coordinator.md | 2 +- agents/tp-spec-writer.md | 2 +- agents/tp-test-coverage-gapper.md | 2 +- agents/tp-test-triage.md | 2 +- agents/tp-test-writer.md | 2 +- package.json | 2 +- src/hooks/session-start.ts | 74 ++++--------------------------- 29 files changed, 38 insertions(+), 94 deletions(-) diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index a09e6db..d67587a 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -6,14 +6,14 @@ }, "metadata": { "description": "Token Pilot \u2014 save 60-90% tokens when AI reads code", - "version": "0.41.0" + "version": "0.41.1" }, "plugins": [ { "name": "token-pilot", "source": "./", "description": "Reduces token consumption by 60-90% via AST-aware lazy file reading, structural symbol navigation, and cross-session tool-usage analytics. 22 MCP tools + 19 subagents + budget watchdog hooks.", - "version": "0.41.0", + "version": "0.41.1", "author": { "name": "Digital-Threads" }, diff --git a/.claude-plugin/plugin.json b/.claude-plugin/plugin.json index 26a469c..6390510 100644 --- a/.claude-plugin/plugin.json +++ b/.claude-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "token-pilot", - "version": "0.41.0", + "version": "0.41.1", "description": "Saves 60-90% tokens on AI code reading. AST-aware lazy reads, symbol navigation, find_usages, structural git diff/log, edit-safety guard, Task-routing matcher, cross-session telemetry (errors + diagnostics), 25 tp-* subagents tiered to haiku/sonnet/opus with budget watchdog.", "author": { "name": "Digital-Threads", diff --git a/agents/tp-api-surface-tracker.md b/agents/tp-api-surface-tracker.md index 3b2b1f2..6501543 100644 --- a/agents/tp-api-surface-tracker.md +++ b/agents/tp-api-surface-tracker.md @@ -9,7 +9,7 @@ tools: - mcp__token-pilot__read_symbol - Bash model: haiku -token_pilot_version: "0.41.0" +token_pilot_version: "0.41.1" token_pilot_body_hash: dd184501203fa7f3c73f419c4ffbe33c4be75400cb64a7a51733a3fe23f6e085 requiredMcpServers: - "token-pilot" diff --git a/agents/tp-audit-scanner.md b/agents/tp-audit-scanner.md index e3907ff..c9ae74c 100644 --- a/agents/tp-audit-scanner.md +++ b/agents/tp-audit-scanner.md @@ -11,7 +11,7 @@ tools: - Grep - Read model: sonnet -token_pilot_version: "0.41.0" +token_pilot_version: "0.41.1" token_pilot_body_hash: d172f600bf32277ea6eb4cbbee4542ddd698a986dcd96997d33930561964569b requiredMcpServers: - "token-pilot" diff --git a/agents/tp-commit-writer.md b/agents/tp-commit-writer.md index 218dea5..f6f4b7d 100644 --- a/agents/tp-commit-writer.md +++ b/agents/tp-commit-writer.md @@ -8,7 +8,7 @@ tools: - mcp__token-pilot__test_summary - mcp__token-pilot__outline - Bash -token_pilot_version: "0.41.0" +token_pilot_version: "0.41.1" token_pilot_body_hash: de64a406b5176de19f7422619c7de7949b1f28865f225402c9cea9255f377428 requiredMcpServers: - "token-pilot" diff --git a/agents/tp-context-engineer.md b/agents/tp-context-engineer.md index 2fc1f97..723e4eb 100644 --- a/agents/tp-context-engineer.md +++ b/agents/tp-context-engineer.md @@ -13,7 +13,7 @@ tools: - Edit - Glob model: sonnet -token_pilot_version: "0.41.0" +token_pilot_version: "0.41.1" token_pilot_body_hash: 68b32af2dacd82ebe52c4eec93edb903d452688274c3065218270627c564d8b0 requiredMcpServers: - "token-pilot" diff --git a/agents/tp-dead-code-finder.md b/agents/tp-dead-code-finder.md index c825ac8..b58f033 100644 --- a/agents/tp-dead-code-finder.md +++ b/agents/tp-dead-code-finder.md @@ -11,7 +11,7 @@ tools: - Grep - Read model: sonnet -token_pilot_version: "0.41.0" +token_pilot_version: "0.41.1" token_pilot_body_hash: d9b7f5b7ae6f4ae21305c775361bcab097cc774370a6d976c093571d46d55021 requiredMcpServers: - "token-pilot" diff --git a/agents/tp-debugger.md b/agents/tp-debugger.md index acf1217..9572f64 100644 --- a/agents/tp-debugger.md +++ b/agents/tp-debugger.md @@ -12,7 +12,7 @@ tools: - Read - Bash model: sonnet -token_pilot_version: "0.41.0" +token_pilot_version: "0.41.1" token_pilot_body_hash: 052413de8d92377edcde6ae5c823f5378db304baccfa29e8866467f42553a500 requiredMcpServers: - "token-pilot" diff --git a/agents/tp-dep-health.md b/agents/tp-dep-health.md index 75188b0..be0ff2a 100644 --- a/agents/tp-dep-health.md +++ b/agents/tp-dep-health.md @@ -9,7 +9,7 @@ tools: - Bash - Read model: haiku -token_pilot_version: "0.41.0" +token_pilot_version: "0.41.1" token_pilot_body_hash: e14dc57493d816f8c2e017963e2ef5f66bea50fd0b805a80e8a0d97c968427e7 requiredMcpServers: - "token-pilot" diff --git a/agents/tp-doc-writer.md b/agents/tp-doc-writer.md index a8fdbdb..afa6586 100644 --- a/agents/tp-doc-writer.md +++ b/agents/tp-doc-writer.md @@ -13,7 +13,7 @@ tools: - Edit - Glob model: haiku -token_pilot_version: "0.41.0" +token_pilot_version: "0.41.1" token_pilot_body_hash: 57d741794ab40e31a7ac49c68ea39a9088f5827cdef866ce81bfca1b7c9180cf requiredMcpServers: - "token-pilot" diff --git a/agents/tp-history-explorer.md b/agents/tp-history-explorer.md index 8a8e6ee..6b76779 100644 --- a/agents/tp-history-explorer.md +++ b/agents/tp-history-explorer.md @@ -10,7 +10,7 @@ tools: - Bash - Read model: haiku -token_pilot_version: "0.41.0" +token_pilot_version: "0.41.1" token_pilot_body_hash: 7b70fa76a60e3c58a1de4f56c32c0f166424137e203a0cf1c8654e7c9235d904 requiredMcpServers: - "token-pilot" diff --git a/agents/tp-impact-analyzer.md b/agents/tp-impact-analyzer.md index e5ebf67..a2f155a 100644 --- a/agents/tp-impact-analyzer.md +++ b/agents/tp-impact-analyzer.md @@ -12,7 +12,7 @@ tools: - mcp__token-pilot__read_symbols - Read model: sonnet -token_pilot_version: "0.41.0" +token_pilot_version: "0.41.1" token_pilot_body_hash: 351a987e11eba63852f5431a16d8eb53104f4f689f82fdcc5a2bf4db948ba92f requiredMcpServers: - "token-pilot" diff --git a/agents/tp-incident-timeline.md b/agents/tp-incident-timeline.md index 8c2e918..1b4c89d 100644 --- a/agents/tp-incident-timeline.md +++ b/agents/tp-incident-timeline.md @@ -8,7 +8,7 @@ tools: - mcp__token-pilot__read_symbol - Bash model: inherit -token_pilot_version: "0.41.0" +token_pilot_version: "0.41.1" token_pilot_body_hash: de5722bfea374eaab096c1ae635c37879e7a91370ee3cd0532f4240be03c91eb requiredMcpServers: - "token-pilot" diff --git a/agents/tp-incremental-builder.md b/agents/tp-incremental-builder.md index 1b19a3a..f2d49eb 100644 --- a/agents/tp-incremental-builder.md +++ b/agents/tp-incremental-builder.md @@ -13,7 +13,7 @@ tools: - Edit - Bash model: sonnet -token_pilot_version: "0.41.0" +token_pilot_version: "0.41.1" token_pilot_body_hash: 375a824d0d847bb5453ec594c7a62ad566ee7e4d92717b0473f771f1a0477c60 requiredMcpServers: - "token-pilot" diff --git a/agents/tp-migration-scout.md b/agents/tp-migration-scout.md index 66dbb38..beaa716 100644 --- a/agents/tp-migration-scout.md +++ b/agents/tp-migration-scout.md @@ -11,7 +11,7 @@ tools: - Grep - Glob model: sonnet -token_pilot_version: "0.41.0" +token_pilot_version: "0.41.1" token_pilot_body_hash: 0334de1bf99b431b65359637d125cda7c44c6f780eb92c57cc538715b1939536 requiredMcpServers: - "token-pilot" diff --git a/agents/tp-onboard.md b/agents/tp-onboard.md index c82d930..6ba2a53 100644 --- a/agents/tp-onboard.md +++ b/agents/tp-onboard.md @@ -10,7 +10,7 @@ tools: - mcp__token-pilot__smart_read - mcp__token-pilot__smart_read_many - mcp__token-pilot__read_section -token_pilot_version: "0.41.0" +token_pilot_version: "0.41.1" token_pilot_body_hash: 832e95633fbc8e9b0c10f3e540a327d4be062fb4b3f17a6cce6be13f414e2927 requiredMcpServers: - "token-pilot" diff --git a/agents/tp-performance-profiler.md b/agents/tp-performance-profiler.md index 6d6190d..7175962 100644 --- a/agents/tp-performance-profiler.md +++ b/agents/tp-performance-profiler.md @@ -11,7 +11,7 @@ tools: - Bash - Read model: sonnet -token_pilot_version: "0.41.0" +token_pilot_version: "0.41.1" token_pilot_body_hash: b61f06380d80798fa2e49d37bcba0653495bee04dd6bdbc1feff9a75607b0508 requiredMcpServers: - "token-pilot" diff --git a/agents/tp-pr-reviewer.md b/agents/tp-pr-reviewer.md index cbfacc9..3c55002 100644 --- a/agents/tp-pr-reviewer.md +++ b/agents/tp-pr-reviewer.md @@ -11,7 +11,7 @@ tools: - mcp__token-pilot__read_for_edit - Read model: sonnet -token_pilot_version: "0.41.0" +token_pilot_version: "0.41.1" token_pilot_body_hash: f83f50d05b4f70285ae7afed2b1a406fc436df56e61a0aedbfb31edc7f2b6e66 requiredMcpServers: - "token-pilot" diff --git a/agents/tp-refactor-planner.md b/agents/tp-refactor-planner.md index b007b3a..39b1f49 100644 --- a/agents/tp-refactor-planner.md +++ b/agents/tp-refactor-planner.md @@ -8,7 +8,7 @@ tools: - mcp__token-pilot__outline - mcp__token-pilot__read_symbol model: sonnet -token_pilot_version: "0.41.0" +token_pilot_version: "0.41.1" token_pilot_body_hash: c5f6fc122c89e16e5cf774045f92169ee3468555320b898171ba13eca5323550 requiredMcpServers: - "token-pilot" diff --git a/agents/tp-review-impact.md b/agents/tp-review-impact.md index b8899af..ced1930 100644 --- a/agents/tp-review-impact.md +++ b/agents/tp-review-impact.md @@ -9,7 +9,7 @@ tools: - mcp__token-pilot__module_info - Bash model: sonnet -token_pilot_version: "0.41.0" +token_pilot_version: "0.41.1" token_pilot_body_hash: 8ef3c3341cbfed4eb8dd130126a9683edc57e378c92ff0ca764d584fd941c55c requiredMcpServers: - "token-pilot" diff --git a/agents/tp-run.md b/agents/tp-run.md index 315f25c..ea694b6 100644 --- a/agents/tp-run.md +++ b/agents/tp-run.md @@ -16,7 +16,7 @@ tools: - Glob - Bash model: haiku -token_pilot_version: "0.41.0" +token_pilot_version: "0.41.1" token_pilot_body_hash: 2b08618d34a61f00aafccbda9fed6d83243296dedb83440edbd2d5c28bb6dbc4 requiredMcpServers: - "token-pilot" diff --git a/agents/tp-session-restorer.md b/agents/tp-session-restorer.md index 3f9050f..6287fa2 100644 --- a/agents/tp-session-restorer.md +++ b/agents/tp-session-restorer.md @@ -9,7 +9,7 @@ tools: - mcp__token-pilot__session_budget - Bash - Read -token_pilot_version: "0.41.0" +token_pilot_version: "0.41.1" token_pilot_body_hash: 529374ed728f5eed5b758b3be3da65624783c0bf0c1a253d7d661a843eb5f767 requiredMcpServers: - "token-pilot" diff --git a/agents/tp-ship-coordinator.md b/agents/tp-ship-coordinator.md index 75ca796..e699ddb 100644 --- a/agents/tp-ship-coordinator.md +++ b/agents/tp-ship-coordinator.md @@ -11,7 +11,7 @@ tools: - Read - Grep model: sonnet -token_pilot_version: "0.41.0" +token_pilot_version: "0.41.1" token_pilot_body_hash: a60f6ae110eb3138064bce074e8ba26fa0ce5f4659df1624a9d9d3646803391b requiredMcpServers: - "token-pilot" diff --git a/agents/tp-spec-writer.md b/agents/tp-spec-writer.md index e379de0..c9b615b 100644 --- a/agents/tp-spec-writer.md +++ b/agents/tp-spec-writer.md @@ -9,7 +9,7 @@ tools: - Read - Write model: sonnet -token_pilot_version: "0.41.0" +token_pilot_version: "0.41.1" token_pilot_body_hash: c7a4e8b39228fd5158528f389c924c5ff2d98c4b9b05ee0106d54a26c5dc1350 requiredMcpServers: - "token-pilot" diff --git a/agents/tp-test-coverage-gapper.md b/agents/tp-test-coverage-gapper.md index 244c7ba..05cea55 100644 --- a/agents/tp-test-coverage-gapper.md +++ b/agents/tp-test-coverage-gapper.md @@ -10,7 +10,7 @@ tools: - mcp__token-pilot__test_summary - Glob - Grep -token_pilot_version: "0.41.0" +token_pilot_version: "0.41.1" token_pilot_body_hash: be81eed53a3720d146cf89e4a14a7a56577633f7c84c234c412ab70d64c05b11 requiredMcpServers: - "token-pilot" diff --git a/agents/tp-test-triage.md b/agents/tp-test-triage.md index dac257c..6a446ff 100644 --- a/agents/tp-test-triage.md +++ b/agents/tp-test-triage.md @@ -8,7 +8,7 @@ tools: - mcp__token-pilot__find_usages - mcp__token-pilot__read_symbol model: sonnet -token_pilot_version: "0.41.0" +token_pilot_version: "0.41.1" token_pilot_body_hash: 362ecf4cb03b059421ea26933473700900073dc38b3a7fe271208dfb1ae14f90 requiredMcpServers: - "token-pilot" diff --git a/agents/tp-test-writer.md b/agents/tp-test-writer.md index 10582a0..51e4917 100644 --- a/agents/tp-test-writer.md +++ b/agents/tp-test-writer.md @@ -13,7 +13,7 @@ tools: - Edit - Bash model: sonnet -token_pilot_version: "0.41.0" +token_pilot_version: "0.41.1" token_pilot_body_hash: 269f2fe22ff4517c277d3f56ca67d8a5527b93290ab21079a83ba7af22c1b5a9 requiredMcpServers: - "token-pilot" diff --git a/package.json b/package.json index fce159a..fa2d185 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "token-pilot", - "version": "0.41.0", + "version": "0.41.1", "description": "Save up to 80% tokens when AI reads code — MCP server for token-efficient code navigation, AST-aware structural reading instead of dumping full files into context window", "type": "module", "main": "dist/index.js", diff --git a/src/hooks/session-start.ts b/src/hooks/session-start.ts index 072be28..ec5407a 100644 --- a/src/hooks/session-start.ts +++ b/src/hooks/session-start.ts @@ -343,77 +343,21 @@ export async function handleSessionStart( ".token-pilot/hook-events.jsonl", ]; - // v0.36.0 — sessionTitle was added in Claude Code 2.1.152. We surface - // the cumulative saved-token count for this project so users see the - // payoff at a glance in their window/tab title. Best-effort — if the - // savings file is unreadable we fall back to a neutral title. - let sessionTitle: string | undefined; - try { - const { loadSessionStats } = await import( - "../core/session-savings.js" - ); - // Sum savings across all sessions in this project, not just one. - const stats = loadSessionStats(opts.projectRoot, ""); - // sessionId="" makes loadSessionStats short-circuit; use a tiny - // dedicated reader instead. - const { readFileSync } = await import("node:fs"); - const { join } = await import("node:path"); - let total = 0; - try { - const raw = readFileSync( - join(opts.projectRoot, ".token-pilot", "hook-events.jsonl"), - "utf-8", - ); - for (const line of raw.split("\n")) { - if (!line) continue; - try { - const ev = JSON.parse(line); - if (typeof ev.savedTokens === "number") total += ev.savedTokens; - } catch { - /* skip malformed line */ - } - } - } catch { - /* no log file yet */ - } - // Use the larger of "single-session" (loadSessionStats fallback) - // and the all-sessions sum so an empty single-session number - // doesn't override the meaningful project-wide total. - const surfaced = Math.max(total, stats.savedTokens); - if (surfaced > 0) { - const human = - surfaced >= 1_000_000 - ? `${(surfaced / 1_000_000).toFixed(1)}M` - : surfaced >= 1000 - ? `${Math.round(surfaced / 1000)}k` - : `${surfaced}`; - sessionTitle = `[TP] ${human} saved`; - } - - // v0.38.0 — when a fleet workflow is active, prefer a - // workflow-progress title so a long fan-out run shows live - // task count + budget in the window title. - const { activeWorkflowId, workflowStatus } = await import( - "../core/workflow.js" - ); - const wfId = activeWorkflowId(); - if (wfId) { - const st = await workflowStatus(opts.projectRoot, wfId); - if (st) { - const pct = st.pct != null ? ` · ${st.pct}%` : ""; - sessionTitle = `[TP] wf · ${st.task_count} tasks${pct}`; - } - } - } catch { - /* sessionTitle is best-effort decoration; never block startup */ - } + // v0.41.1 — sessionTitle removed. v0.36.0 set the window/tab title + // to `[TP] Nk saved`, but `sessionTitle` OVERWRITES Claude Code's + // own session name — an intrusive clobber users (rightly) disliked. + // The cumulative-savings display belongs in the additive statusline + // badge (hooks/tp-statusline.sh), the same non-intrusive channel + // caveman uses — it sits alongside the session name instead of + // replacing it. Workflow progress, likewise, can ride the + // statusline (tp-statusline.sh reads the active workflow) rather + // than hijacking the title. const output = { hookSpecificOutput: { hookEventName: "SessionStart", additionalContext: message, watchPaths, - ...(sessionTitle ? { sessionTitle } : {}), }, };