* feat(claude-code): full-session retain mode with document upsert and configurable tags
Switch default retain behavior from per-turn chunks to full-session upsert.
Each session is now retained as a single document (document_id = session_id)
that gets updated on every Stop event, instead of creating fragmented
documents with timestamp-suffixed IDs.
New config options:
- retainMode: "full-session" (default) or "chunked" (legacy)
- retainTags: list with template variable support ({session_id}, {bank_id}, {timestamp})
- retainMetadata: extra metadata dict merged with built-in fields, supports templates
* fix(claude-code): respect retainEveryNTurns in full-session mode
The turn-count gating was only applied in chunked mode, meaning
full-session mode would re-ingest the entire transcript on every
single Stop event. Now retainEveryNTurns gates both modes.
Also fix test isolation: resolve ~/.hindsight/claude-code.json at
call time (not module load) so HOME override in tests works correctly.
* fix(claude-code): fix config tests after USER_CONFIG_PATH removal
Update tests to use HOME env var override instead of monkeypatching
the removed USER_CONFIG_PATH constant. Add autouse fixture to
TestLoadConfig to isolate all config tests from real user config
and HINDSIGHT_* env vars.
36 lines
1.4 KiB
JSON
36 lines
1.4 KiB
JSON
{
|
|
"hindsightApiUrl": "",
|
|
"bankId": "claude_code",
|
|
"bankMission": "You are a Claude Code AI assistant. Focus on technical discussions, decisions, and context relevant to the user's projects.",
|
|
"retainMission": "Extract technical decisions, architectural choices, user preferences, project context, and people/tool relationships. Ignore routine greetings and transient operational details.",
|
|
"autoRecall": true,
|
|
"autoRetain": true,
|
|
"retainMode": "full-session",
|
|
"recallBudget": "mid",
|
|
"recallMaxTokens": 1024,
|
|
"recallTypes": ["world", "experience"],
|
|
"recallContextTurns": 1,
|
|
"recallMaxQueryChars": 800,
|
|
"recallRoles": ["user", "assistant"],
|
|
"recallPromptPreamble": "Relevant memories from past conversations (prioritize recent when conflicting). Only use memories that are directly useful to continue this conversation; ignore the rest:",
|
|
"recallTopK": null,
|
|
"retainRoles": ["user", "assistant"],
|
|
"retainEveryNTurns": 10,
|
|
"retainOverlapTurns": 2,
|
|
"retainTags": ["{session_id}"],
|
|
"retainMetadata": {},
|
|
"retainContext": "claude-code",
|
|
"hindsightApiToken": null,
|
|
"apiPort": 9077,
|
|
"daemonIdleTimeout": 0,
|
|
"embedVersion": "latest",
|
|
"embedPackagePath": null,
|
|
"bankIdPrefix": "",
|
|
"dynamicBankId": false,
|
|
"dynamicBankGranularity": ["agent", "project"],
|
|
"agentName": "",
|
|
"llmProvider": null,
|
|
"llmModel": null,
|
|
"llmApiKeyEnv": null,
|
|
"debug": false
|
|
}
|