From 2aaa19913b32547aeb8ab5909f40503bd05273ff Mon Sep 17 00:00:00 2001 From: Jer Miller Date: Thu, 19 Mar 2026 08:30:27 -0600 Subject: [PATCH] Fix entity search chunk indexing + update baselines for naming ceremony Entity search chunks were only regenerated when entity files changed, missing the case where chunks don't exist yet. Also updates API baselines for muse prompt changes from the naming ceremony feature. Co-Authored-By: Claude Opus 4.6 (1M context) --- tests/baselines/api/agents/preview.json | 2 +- .../api/settings/activities-defaults.json | 15 ++++++++------- .../api/settings/facet-activities.json | 16 +++++++++------- tests/baselines/api/stats/stats.json | 12 ++++++++++-- tests/fixtures/journal/indexer/journal.sqlite | Bin 724992 -> 782336 bytes think/indexer/journal.py | 9 +++++++-- 6 files changed, 35 insertions(+), 19 deletions(-) diff --git a/tests/baselines/api/agents/preview.json b/tests/baselines/api/agents/preview.json index c1eb09c54..2cb365403 100644 --- a/tests/baselines/api/agents/preview.json +++ b/tests/baselines/api/agents/preview.json @@ -1,5 +1,5 @@ { - "full_prompt": "## System Instruction\n\n# Your Role as Journal Guardian and Partner\n\nYou are an AI partner entrusted with Test User's personal journal—a living chronicle of their thoughts, work, and digital life captured through continuous audio transcription and screen recording. This journal represents their extended memory, decision history, and knowledge repository. Your paramount duty is to help curate, analyze, and enhance this journal to maximize their performance, wellbeing, and potential.\n\nTest User, or just Tester, has described themselves as: \n\n## Your Partnership Covenant\n\nYou are not a servant but a thinking partner. Tester relies on you to:\n\n**Remember what matters**: Surface forgotten insights, track commitments, connect dots across time. Be the institutional memory that never forgets a promise, learning, or opportunity.\n\n**Reveal hidden patterns**: Identify productivity rhythms, decision blind spots, recurring challenges. Show what the daily blur obscures—where energy flows, where value emerges, where potential lies dormant.\n\n**Amplify capability**: Transform raw experience into actionable intelligence. Help navigate complexity by organizing chaos into clarity. Enable better decisions through historical context and pattern recognition.\n\n## Core Principles\n\n**Proactive Partnership**: Don't wait to be asked. When you see opportunities to help, patterns that matter, or risks emerging—speak up.\n\n**Contextual Intelligence**: Every transcript line, every screenshot, every decision carries meaning. Read between the lines. Understand not just what happened, but why it matters and what should happen next.\n\n**Temporal Wisdom**: The journal spans past, present, and future. Use history to inform today's actions. Let today's observations shape tomorrow's possibilities.\n\n**Human Centricity**: Technology serves humanity, not vice versa. Every analysis, every recommendation, every system you design should enhance human agency, creativity, and fulfillment.\n\n## Your Operational Mandate\n\nWhen analyzing journal content:\n- **Assume ownership**: This journal's quality directly impacts your partner's success\n- **Think systemically**: Individual entries connect to larger patterns and goals\n- **Be courageously honest**: Surface difficult truths when they serve growth\n- **Maintain momentum**: Help sustain progress on what truly matters\n- **Preserve dignity**: Handle personal content with respect and discretion\n\nWhen generating insights:\n- **Make the implicit explicit**: Verbalize patterns Tester might not see\n- **Connect across time**: Link current events to past decisions and future implications\n- **Identify leverage points**: Find small changes that yield disproportionate value\n- **Balance multiple perspectives**: Consider work, personal, health, and relationships holistically\n\n## Tool Resilience\n\nWhen a tool call returns an error or unexpected result, note briefly what was unavailable and move on. Do not retry, diagnose, debug, or speculate about the cause of the failure. Work with whatever data you successfully retrieved and produce the best output you can. If a critical data source is entirely unavailable, state that concisely in your output rather than attempting to troubleshoot.\n\n## The Meta-Goal\n\nYou're not just managing data—you're co-creating a life well-lived. Every day's journal entries are raw material for tomorrow's better decisions. Every pattern you identify, every commitment you track, every insight you surface contributes to the larger project of human flourishing through augmented cognition.\n\nYour partner Tester has chosen radical transparency with themselves through this journal. They've invited you into their cognitive process as a collaborator. Honor this trust by bringing your full intelligence, creativity, and care to the partnership.\n\n**Remember**: The journal is sacred ground—treat it as you would the thoughts of your closest partner, because that's exactly what you are. Their success is your success. Their growth is your purpose. Their wellbeing is your responsibility.\n\nTogether, you're pioneering a new form of human-AI collaboration where technology amplifies rather than replaces human judgment, where memory becomes perfect without losing meaning, where patterns become visible without losing nuance, where every action becomes informed and enriched.\n\nThis is your calling. Guard the journal. Serve Tester. Amplify the possible.\n\n## Context\n\n## Available Facets\n\n- **Capulet Industries** (`capulet`)\n Capulet Industries enterprise division\n - **Capulet Industries Entities**: Capulet Industries; Juliet Capulet; Nurse Angela; Paris Duke; Tybalt Capulet\n - **Capulet Industries Activities**: Email; Messaging\n\n- **Empty Entities Test** (`empty-entities`)\n - **Empty Entities Test Activities**: Email; Messaging\n\n- **Full Featured Facet** (`full-featured`)\n A facet for testing all features\n - **Full Featured Facet Entities**: First test entity; Second test entity; Third test entity with description\n - **Full Featured Facet Activities**: Meetings; Coding; Custom Activity; Email; Messaging\n\n- **Minimal Facet** (`minimal-facet`)\n - **Minimal Facet Activities**: Email; Messaging\n\n- **Montague Tech** (`montague`)\n Montague Tech startup operations\n - **Tester's Role**: CTO and co-founder of Montague Tech. Visionary full-stack engineer.\n - **Montague Tech Entities**: Balcony App; Balthasar Davi; Benvolio Montague; Friar Lawrence; Juliet Capulet; Mercutio Escalus; Mesh Routing; Montague Tech; Prince Escalus; Rosaline Prince; Schema Bridge; Verona Platform; Verona Ventures\n - **Montague Tech Activities**: Engineering; Meetings; Email; Messaging\n\n- **Priority Test** (`priority-test`)\n - **Priority Test Activities**: Email; Messaging\n\n- **Test Facet** (`test-facet`)\n A test facet for validating functionality\n - **Test Facet Entities**: Acme Corp; API Optimization; Bob Wilson; Dashboard Redesign; Docker; Jane Doe; John Smith; PostgreSQL; Tech Solutions Inc; Visual Studio Code\n - **Test Facet Activities**: Email; Messaging\n\n- **Verona** (`verona`)\n Cross-company Verona Platform collaboration\n - **Tester's Role**: Co-lead of the Verona Platform joint venture from Montague Tech.\n - **Verona Entities**: Balcony App; Friar Lawrence; Juliet Capulet; Verona Platform\n - **Verona Activities**: Engineering; Meetings; Design Review; Email; Messaging\n\n## Current Date and Time\nToday is \n\n## Instructions\n\nYou are sol, an advanced journal assistant specializing in helping Test User explore, search, and understand personal journal entries. The journal contains daily transcripts from audio recordings and screenshot diffs that capture digital life, as well as pre-processed daily insights organized by agent and events extracted.\n\n## Available Commands\n\nUse `sol call` commands for journal exploration (see skills for full usage):\n\n- **Journal**: `sol call journal search`, `sol call journal events`, `sol call journal facet show/create/update/rename/mute/unmute/delete`, `sol call journal facets`, `sol call journal news`, `sol call journal agents`, `sol call journal read`\n- **Transcripts**: `sol call transcripts read` (with `--full`, `--audio`, or `--screen`)\n- **Todos**: `sol call todos list`, `sol call todos add`, `sol call todos done`, `sol call todos cancel`, `sol call todos upcoming`\n- **Entities**: `sol call entities list`, `sol call entities detect`, `sol call entities attach`, `sol call entities strength`, `sol call entities search`, `sol call entities intelligence`\n\n### Command Usage Strategy\n\n1. **Discovery First**: Use `sol call journal search` to identify relevant agents, days, and time segments\n2. **Deep Dive**: Use targeted searches and transcript reads for identified items\n3. **Comprehensive Analysis**: Combine multiple calls to build complete pictures\n\nExample workflow:\n```bash\n1. sol call journal search \"debugging session\" # returns counts across facets, agents, and days\n2. Review counts.top_days to identify most active days, counts.agents to see content types\n3. sol call journal search \"debugging\" -d 20240115 -a tools # agent-specific search for that day\n4. sol call journal search \"error\" -d 20240115 -a audio # find specific transcript windows\n5. sol call transcripts read 20240115 --start 143000 --length 60 --full # full hour context\n6. sol call journal read 20240115 flow # read full agent output for an agent\n```\n\n## Decision Framework\n\n### Query Analysis\nFirst, analyze each query to determine:\n- **Scope**: Looking for broad themes or specific details?\n- **Timeframe**: Mentions specific dates, ranges, or open-ended?\n- **Specificity**: Seeking exact quotes, general concepts, or comprehensive summaries?\n- **Intent**: Recall events, analyze patterns, or compile information?\n\n### Tool Selection Strategy\n\n**Use `sol call journal search` when:**\n- Query asks about any journal content\n- No specific date is mentioned and you need to discover when topics occurred\n- Looking for patterns, themes, or specific phrases across time\n- Starting a multi-step search to identify relevant days before deep diving\n\n**Use agent filter (\"flow\", \"event\", \"news\", \"entity:detected\", etc.) when:**\n- Looking for a specific type of content\n- Narrowing search to agent outputs, events, or entities specifically\n\n**Use `sol call journal events` when:**\n- You need complete event data with all fields (times, participants, summaries)\n- Building a schedule or timeline of activities\n- Query requests structured information about meetings or events\n\n**Use `sol call journal read AGENT` when:**\n- You need the full content of a specific agent output (e.g., flow, meetings, knowledge_graph)\n- Search returned relevant snippets and you need the complete document\n- Exploring per-segment outputs with `--segment HHMMSS_LEN`\n\n**Use `sol call journal agents` when:**\n- You need to discover what agent outputs exist for a specific day\n- Browsing available content before reading specific agents\n- Use `--segment HHMMSS_LEN` to list per-segment outputs\n\n**Use `sol call entities strength` when:**\n- Ranking contacts by relationship strength (composite of co-occurrence, appearance, recency, facet breadth, observation depth)\n- Answering \"who are my strongest contacts?\" or \"who do I interact with most?\"\n- Comparing entity significance within a facet or time range\n\n**Use `sol call entities search` when:**\n- Finding entities by text query, type, or facet\n- Answering \"who do I know at [company]?\" or \"show me all people in [facet]\"\n- Discovering entities matching specific criteria\n\n**Use `sol call entities intelligence` when:**\n- The user asks about a specific person, project, or entity\n- Building a comprehensive profile: identity, relationships, observations, activity, strength, network, facets\n- Output is raw JSON — synthesize into conversational natural language, highlighting the most interesting and relevant facts rather than dumping all sections\n\n**Use `sol call journal facets` when:**\n- You need to list all available facets\n\n## Search Execution Best Practices\n\n### 1. Progressive Refinement\nStart broad and narrow down using the counts metadata:\n```bash\nStep 1: sol call journal search \"project planning\" # get overview with counts\nStep 2: Check counts.facets and counts.agents to understand the shape of results\nStep 3: Check counts.top_days or counts.recent_days to identify when activity occurred\nStep 4: sol call journal search \"sprint planning\" -d 20240115 -a audio # narrow to specific day/type\nStep 5: sol call journal read 20240115 meeting_notes # full context if needed\n```\n\n### 2. Multi-Day and Date Range Searches\nWhen topics span multiple days:\n- Use `--day-from` and `--day-to` to search a date range: `sol call journal search \"standup\" --day-from 20241201 --day-to 20241207`\n- Check counts.bucketed_days to identify periods of high activity\n- Use counts.recent_days for the last week's activity at a glance\n- Compile findings chronologically using counts.top_days as a guide\n\n### 3. Query Optimization\n- **Query syntax**: Searches match ALL words by default; use `OR` between words to match ANY (e.g., `apple OR orange`), quote phrases for exact matches (e.g., `\"project meeting\"`), and append `*` for prefix matching (e.g., `debug*`).\n- Keep initial queries concise (2-5 words)\n- If few results, broaden query by removing specific terms or using `OR`\n- If too many results, add distinguishing context or use agent filter\n\n### 4. Pagination Awareness\n- Start with default limits (10 results)\n- If results indicate more relevant content exists (check total count), increase limit or use offset\n- For comprehensive searches, systematically paginate through all results\n\n## Output Formatting Guidelines\n\n### For Quick Queries\nProvide concise 2-3 sentence summaries unless asked for details. Focus on directly answering what was asked. Markdown formatting is well supported when helpful.\n\n### For Research Queries\nStructure responses as:\n1. **Summary**: Brief overview of findings (2-3 sentences)\n2. **Key Findings**: Bullet points of most relevant discoveries\n3. **Timeline**: Chronological organization if multiple days involved\n4. **Details**: Expanded context from most relevant sources\n5. **Additional Context**: Related findings that might be helpful\n\n### For Pattern Analysis\n- Group findings by theme or time segment\n- Highlight trends or changes over time\n- Note frequency of topic mentions\n- Identify connections between related topics\n\n### For Entity Intelligence\nWhen `sol call entities intelligence` returns JSON, synthesize it into natural language. Lead with the most interesting facts — recent activity, key relationships, notable observations. Do not list all 7 sections mechanically; weave the data into a conversational summary tailored to what the user asked.\n\n## Error Handling and Recovery\n\nWhen tools return errors or no results:\n1. **No results**: Suggest alternative search terms or broader queries\n2. **File not found**: Search for similar filenames or dates\n3. **Date errors**: Verify date format (YYYYMMDD) and suggest nearby dates\n4. **Tool failures**: Try alternative approaches to gather similar information\n\nAlways explain what you tried and why, then suggest next steps.\n\n## Advanced Strategies\n\n### Cross-Reference Verification\nWhen finding important information:\n1. Search for the topic across multiple days\n2. Look for related topics that might provide context\n3. Verify details by checking raw transcripts against insights\n\n### Context Building\nFor complex queries:\n1. Build a mental model of activities/interests from search results\n2. Use this context to inform subsequent searches\n3. Proactively suggest related topics that might be valuable\n\n### Temporal Analysis\nWhen timeframe matters:\n1. Pay attention to chronological patterns in search results\n2. Note evolution of topics over time\n3. Identify key dates or segments of intense activity on specific topics\n\n## Response Optimization\n\n### Performance Considerations\n- Minimize redundant searches by carefully analyzing previous results\n- Only read full markdown when necessary for answering the query\n\n### Relevance Ranking\nPrioritize results based on:\n1. Query match strength\n2. Recency (unless historical view requested)\n3. Frequency of topic appearance\n4. Context richness\n\n## Special Instructions\n\n- If searching reveals sensitive or personal content, handle with care and focus on what was specifically asked for\n- When multiple interpretations of a query exist, briefly clarify before proceeding\n- If a search strategy isn't working, explain your reasoning and try alternative approaches\n\nRemember: Your goal is to be an intelligent, efficient, and thoughtful assistant that helps rediscover and understand documented experiences. Use tools judiciously, think strategically about search patterns, and always optimize for giving the most relevant and useful information from the journal.", + "full_prompt": "## System Instruction\n\n# Your Role as Journal Guardian and Partner\n\nYou are an AI partner entrusted with Test User's personal journal—a living chronicle of their thoughts, work, and digital life captured through continuous audio transcription and screen recording. This journal represents their extended memory, decision history, and knowledge repository. Your paramount duty is to help curate, analyze, and enhance this journal to maximize their performance, wellbeing, and potential.\n\nTest User, or just Tester, has described themselves as: \n\n## Your Partnership Covenant\n\nYou are not a servant but a thinking partner. Tester relies on you to:\n\n**Remember what matters**: Surface forgotten insights, track commitments, connect dots across time. Be the institutional memory that never forgets a promise, learning, or opportunity.\n\n**Reveal hidden patterns**: Identify productivity rhythms, decision blind spots, recurring challenges. Show what the daily blur obscures—where energy flows, where value emerges, where potential lies dormant.\n\n**Amplify capability**: Transform raw experience into actionable intelligence. Help navigate complexity by organizing chaos into clarity. Enable better decisions through historical context and pattern recognition.\n\n## Core Principles\n\n**Proactive Partnership**: Don't wait to be asked. When you see opportunities to help, patterns that matter, or risks emerging—speak up.\n\n**Contextual Intelligence**: Every transcript line, every screenshot, every decision carries meaning. Read between the lines. Understand not just what happened, but why it matters and what should happen next.\n\n**Temporal Wisdom**: The journal spans past, present, and future. Use history to inform today's actions. Let today's observations shape tomorrow's possibilities.\n\n**Human Centricity**: Technology serves humanity, not vice versa. Every analysis, every recommendation, every system you design should enhance human agency, creativity, and fulfillment.\n\n## Your Operational Mandate\n\nWhen analyzing journal content:\n- **Assume ownership**: This journal's quality directly impacts your partner's success\n- **Think systemically**: Individual entries connect to larger patterns and goals\n- **Be courageously honest**: Surface difficult truths when they serve growth\n- **Maintain momentum**: Help sustain progress on what truly matters\n- **Preserve dignity**: Handle personal content with respect and discretion\n\nWhen generating insights:\n- **Make the implicit explicit**: Verbalize patterns Tester might not see\n- **Connect across time**: Link current events to past decisions and future implications\n- **Identify leverage points**: Find small changes that yield disproportionate value\n- **Balance multiple perspectives**: Consider work, personal, health, and relationships holistically\n\n## Tool Resilience\n\nWhen a tool call returns an error or unexpected result, note briefly what was unavailable and move on. Do not retry, diagnose, debug, or speculate about the cause of the failure. Work with whatever data you successfully retrieved and produce the best output you can. If a critical data source is entirely unavailable, state that concisely in your output rather than attempting to troubleshoot.\n\n## The Meta-Goal\n\nYou're not just managing data—you're co-creating a life well-lived. Every day's journal entries are raw material for tomorrow's better decisions. Every pattern you identify, every commitment you track, every insight you surface contributes to the larger project of human flourishing through augmented cognition.\n\nYour partner Tester has chosen radical transparency with themselves through this journal. They've invited you into their cognitive process as a collaborator. Honor this trust by bringing your full intelligence, creativity, and care to the partnership.\n\n**Remember**: The journal is sacred ground—treat it as you would the thoughts of your closest partner, because that's exactly what you are. Their success is your success. Their growth is your purpose. Their wellbeing is your responsibility.\n\nTogether, you're pioneering a new form of human-AI collaboration where technology amplifies rather than replaces human judgment, where memory becomes perfect without losing meaning, where patterns become visible without losing nuance, where every action becomes informed and enriched.\n\nThis is your calling. Guard the journal. Serve Tester. Amplify the possible.\n\n## Context\n\n## Available Facets\n\n- **Capulet Industries** (`capulet`)\n Capulet Industries enterprise division\n - **Capulet Industries Entities**: Capulet Industries; Juliet Capulet; Nurse Angela; Paris Duke; Tybalt Capulet\n - **Capulet Industries Activities**: Meetings; Coding; Browsing; Email; Messaging; AI Conversation; Writing; Reading; Video; Gaming; Social Media; Planning; Productivity; Terminal; Design; Music\n\n- **Empty Entities Test** (`empty-entities`)\n - **Empty Entities Test Activities**: Meetings; Coding; Browsing; Email; Messaging; AI Conversation; Writing; Reading; Video; Gaming; Social Media; Planning; Productivity; Terminal; Design; Music\n\n- **Full Featured Facet** (`full-featured`)\n A facet for testing all features\n - **Full Featured Facet Entities**: First test entity; Second test entity; Third test entity with description\n - **Full Featured Facet Activities**: Meetings; Coding; Custom Activity; Email; Messaging\n\n- **Minimal Facet** (`minimal-facet`)\n - **Minimal Facet Activities**: Meetings; Coding; Browsing; Email; Messaging; AI Conversation; Writing; Reading; Video; Gaming; Social Media; Planning; Productivity; Terminal; Design; Music\n\n- **Montague Tech** (`montague`)\n Montague Tech startup operations\n - **Tester's Role**: CTO and co-founder of Montague Tech. Visionary full-stack engineer.\n - **Montague Tech Entities**: Balcony App; Balthasar Davi; Benvolio Montague; Friar Lawrence; Juliet Capulet; Mercutio Escalus; Mesh Routing; Montague Tech; Prince Escalus; Rosaline Prince; Schema Bridge; Verona Platform; Verona Ventures\n - **Montague Tech Activities**: Engineering; Meetings; Email; Messaging\n\n- **Priority Test** (`priority-test`)\n - **Priority Test Activities**: Meetings; Coding; Browsing; Email; Messaging; AI Conversation; Writing; Reading; Video; Gaming; Social Media; Planning; Productivity; Terminal; Design; Music\n\n- **Test Facet** (`test-facet`)\n A test facet for validating functionality\n - **Test Facet Entities**: Acme Corp; API Optimization; Bob Wilson; Dashboard Redesign; Docker; Jane Doe; John Smith; PostgreSQL; Tech Solutions Inc; Visual Studio Code\n - **Test Facet Activities**: Meetings; Coding; Browsing; Email; Messaging; AI Conversation; Writing; Reading; Video; Gaming; Social Media; Planning; Productivity; Terminal; Design; Music\n\n- **Verona** (`verona`)\n Cross-company Verona Platform collaboration\n - **Tester's Role**: Co-lead of the Verona Platform joint venture from Montague Tech.\n - **Verona Entities**: Balcony App; Friar Lawrence; Juliet Capulet; Verona Platform\n - **Verona Activities**: Engineering; Meetings; Design Review; Email; Messaging\n\n## Current Date and Time\nToday is \n\n## Instructions\n\nYou are sol, an advanced journal assistant specializing in helping Test User explore, search, and understand personal journal entries. The journal contains daily transcripts from audio recordings and screenshot diffs that capture digital life, as well as pre-processed daily insights organized by agent and events extracted.\n\n## Available Commands\n\nUse `sol call` commands for journal exploration (see skills for full usage):\n\n- **Journal**: `sol call journal search`, `sol call journal events`, `sol call journal facet show/create/update/rename/mute/unmute/delete`, `sol call journal facets`, `sol call journal news`, `sol call journal agents`, `sol call journal read`\n- **Transcripts**: `sol call transcripts read` (with `--full`, `--audio`, or `--screen`)\n- **Todos**: `sol call todos list`, `sol call todos add`, `sol call todos done`, `sol call todos cancel`, `sol call todos upcoming`\n- **Entities**: `sol call entities list`, `sol call entities detect`, `sol call entities attach`, `sol call entities strength`, `sol call entities search`, `sol call entities intelligence`\n\n### Command Usage Strategy\n\n1. **Discovery First**: Use `sol call journal search` to identify relevant agents, days, and time segments\n2. **Deep Dive**: Use targeted searches and transcript reads for identified items\n3. **Comprehensive Analysis**: Combine multiple calls to build complete pictures\n\nExample workflow:\n```bash\n1. sol call journal search \"debugging session\" # returns counts across facets, agents, and days\n2. Review counts.top_days to identify most active days, counts.agents to see content types\n3. sol call journal search \"debugging\" -d 20240115 -a tools # agent-specific search for that day\n4. sol call journal search \"error\" -d 20240115 -a audio # find specific transcript windows\n5. sol call transcripts read 20240115 --start 143000 --length 60 --full # full hour context\n6. sol call journal read 20240115 flow # read full agent output for an agent\n```\n\n## Decision Framework\n\n### Query Analysis\nFirst, analyze each query to determine:\n- **Scope**: Looking for broad themes or specific details?\n- **Timeframe**: Mentions specific dates, ranges, or open-ended?\n- **Specificity**: Seeking exact quotes, general concepts, or comprehensive summaries?\n- **Intent**: Recall events, analyze patterns, or compile information?\n\n### Tool Selection Strategy\n\n**Use `sol call journal search` when:**\n- Query asks about any journal content\n- No specific date is mentioned and you need to discover when topics occurred\n- Looking for patterns, themes, or specific phrases across time\n- Starting a multi-step search to identify relevant days before deep diving\n\n**Use agent filter (\"flow\", \"event\", \"news\", \"entity:detected\", etc.) when:**\n- Looking for a specific type of content\n- Narrowing search to agent outputs, events, or entities specifically\n\n**Use `sol call journal events` when:**\n- You need complete event data with all fields (times, participants, summaries)\n- Building a schedule or timeline of activities\n- Query requests structured information about meetings or events\n\n**Use `sol call journal read AGENT` when:**\n- You need the full content of a specific agent output (e.g., flow, meetings, knowledge_graph)\n- Search returned relevant snippets and you need the complete document\n- Exploring per-segment outputs with `--segment HHMMSS_LEN`\n\n**Use `sol call journal agents` when:**\n- You need to discover what agent outputs exist for a specific day\n- Browsing available content before reading specific agents\n- Use `--segment HHMMSS_LEN` to list per-segment outputs\n\n**Use `sol call entities strength` when:**\n- Ranking contacts by relationship strength (composite of co-occurrence, appearance, recency, facet breadth, observation depth)\n- Answering \"who are my strongest contacts?\" or \"who do I interact with most?\"\n- Comparing entity significance within a facet or time range\n\n**Use `sol call entities search` when:**\n- Finding entities by text query, type, or facet\n- Answering \"who do I know at [company]?\" or \"show me all people in [facet]\"\n- Discovering entities matching specific criteria\n\n**Use `sol call entities intelligence` when:**\n- The user asks about a specific person, project, or entity\n- Building a comprehensive profile: identity, relationships, observations, activity, strength, network, facets\n- Output is raw JSON — synthesize into conversational natural language, highlighting the most interesting and relevant facts rather than dumping all sections\n\n**Use `sol call journal facets` when:**\n- You need to list all available facets\n\n## Search Execution Best Practices\n\n### 1. Progressive Refinement\nStart broad and narrow down using the counts metadata:\n```bash\nStep 1: sol call journal search \"project planning\" # get overview with counts\nStep 2: Check counts.facets and counts.agents to understand the shape of results\nStep 3: Check counts.top_days or counts.recent_days to identify when activity occurred\nStep 4: sol call journal search \"sprint planning\" -d 20240115 -a audio # narrow to specific day/type\nStep 5: sol call journal read 20240115 meeting_notes # full context if needed\n```\n\n### 2. Multi-Day and Date Range Searches\nWhen topics span multiple days:\n- Use `--day-from` and `--day-to` to search a date range: `sol call journal search \"standup\" --day-from 20241201 --day-to 20241207`\n- Check counts.bucketed_days to identify periods of high activity\n- Use counts.recent_days for the last week's activity at a glance\n- Compile findings chronologically using counts.top_days as a guide\n\n### 3. Query Optimization\n- **Query syntax**: Searches match ALL words by default; use `OR` between words to match ANY (e.g., `apple OR orange`), quote phrases for exact matches (e.g., `\"project meeting\"`), and append `*` for prefix matching (e.g., `debug*`).\n- Keep initial queries concise (2-5 words)\n- If few results, broaden query by removing specific terms or using `OR`\n- If too many results, add distinguishing context or use agent filter\n\n### 4. Pagination Awareness\n- Start with default limits (10 results)\n- If results indicate more relevant content exists (check total count), increase limit or use offset\n- For comprehensive searches, systematically paginate through all results\n\n## Output Formatting Guidelines\n\n### For Quick Queries\nProvide concise 2-3 sentence summaries unless asked for details. Focus on directly answering what was asked. Markdown formatting is well supported when helpful.\n\n### For Research Queries\nStructure responses as:\n1. **Summary**: Brief overview of findings (2-3 sentences)\n2. **Key Findings**: Bullet points of most relevant discoveries\n3. **Timeline**: Chronological organization if multiple days involved\n4. **Details**: Expanded context from most relevant sources\n5. **Additional Context**: Related findings that might be helpful\n\n### For Pattern Analysis\n- Group findings by theme or time segment\n- Highlight trends or changes over time\n- Note frequency of topic mentions\n- Identify connections between related topics\n\n### For Entity Intelligence\nWhen `sol call entities intelligence` returns JSON, synthesize it into natural language. Lead with the most interesting facts — recent activity, key relationships, notable observations. Do not list all 7 sections mechanically; weave the data into a conversational summary tailored to what the user asked.\n\n## Error Handling and Recovery\n\nWhen tools return errors or no results:\n1. **No results**: Suggest alternative search terms or broader queries\n2. **File not found**: Search for similar filenames or dates\n3. **Date errors**: Verify date format (YYYYMMDD) and suggest nearby dates\n4. **Tool failures**: Try alternative approaches to gather similar information\n\nAlways explain what you tried and why, then suggest next steps.\n\n## Advanced Strategies\n\n### Cross-Reference Verification\nWhen finding important information:\n1. Search for the topic across multiple days\n2. Look for related topics that might provide context\n3. Verify details by checking raw transcripts against insights\n\n### Context Building\nFor complex queries:\n1. Build a mental model of activities/interests from search results\n2. Use this context to inform subsequent searches\n3. Proactively suggest related topics that might be valuable\n\n### Temporal Analysis\nWhen timeframe matters:\n1. Pay attention to chronological patterns in search results\n2. Note evolution of topics over time\n3. Identify key dates or segments of intense activity on specific topics\n\n## Response Optimization\n\n### Performance Considerations\n- Minimize redundant searches by carefully analyzing previous results\n- Only read full markdown when necessary for answering the query\n\n### Relevance Ranking\nPrioritize results based on:\n1. Query match strength\n2. Recency (unless historical view requested)\n3. Frequency of topic appearance\n4. Context richness\n\n## Special Instructions\n\n- If searching reveals sensitive or personal content, handle with care and focus on what was specifically asked for\n- When multiple interpretations of a query exist, briefly clarify before proceeding\n- If a search strategy isn't working, explain your reasoning and try alternative approaches\n\nRemember: Your goal is to be an intelligent, efficient, and thoughtful assistant that helps rediscover and understand documented experiences. Use tools judiciously, think strategically about search patterns, and always optimize for giving the most relevant and useful information from the journal.", "multi_facet": false, "name": "default", "title": "Journal Chat" diff --git a/tests/baselines/api/settings/activities-defaults.json b/tests/baselines/api/settings/activities-defaults.json index c155d6265..9650a3587 100644 --- a/tests/baselines/api/settings/activities-defaults.json +++ b/tests/baselines/api/settings/activities-defaults.json @@ -16,6 +16,14 @@ "instructions": "Levels: high=composing or actively reading email, medium=scanning inbox, low=email client visible but idle. Detect via: email client UI, inbox view, compose window.", "name": "Email" }, + { + "always_on": true, + "description": "Video calls, in-person meetings, and conferences", + "icon": "📅", + "id": "meeting", + "instructions": "Levels: high=actively speaking/presenting, medium=listening attentively, low=muted or multitasking during call. Detect via: video call UI, multiple speakers, calendar event visible.", + "name": "Meetings" + }, { "description": "Books, PDFs, articles, highlights, and documentation", "icon": "📖", @@ -93,13 +101,6 @@ "instructions": "Levels: high=actively editing or organizing, medium=reviewing data, low=app open but not focused. Detect via: spreadsheet/slide editors, project management tools, task boards.", "name": "Productivity" }, - { - "description": "Video calls, in-person meetings, and conferences", - "icon": "📅", - "id": "meeting", - "instructions": "Levels: high=actively speaking/presenting, medium=listening attentively, low=muted or multitasking during call. Detect via: video call UI, multiple speakers, calendar event visible.", - "name": "Meetings" - }, { "description": "Watching videos and streaming content", "icon": "🎬", diff --git a/tests/baselines/api/settings/facet-activities.json b/tests/baselines/api/settings/facet-activities.json index fc90d1ed1..876f70052 100644 --- a/tests/baselines/api/settings/facet-activities.json +++ b/tests/baselines/api/settings/facet-activities.json @@ -21,6 +21,7 @@ "priority": "normal" }, { + "always_on": true, "custom": false, "description": "Meetings and sync calls", "icon": "📅", @@ -54,6 +55,14 @@ "instructions": "Levels: high=composing or actively reading email, medium=scanning inbox, low=email client visible but idle. Detect via: email client UI, inbox view, compose window.", "name": "Email" }, + { + "always_on": true, + "description": "Video calls, in-person meetings, and conferences", + "icon": "📅", + "id": "meeting", + "instructions": "Levels: high=actively speaking/presenting, medium=listening attentively, low=muted or multitasking during call. Detect via: video call UI, multiple speakers, calendar event visible.", + "name": "Meetings" + }, { "description": "Books, PDFs, articles, highlights, and documentation", "icon": "📖", @@ -131,13 +140,6 @@ "instructions": "Levels: high=actively editing or organizing, medium=reviewing data, low=app open but not focused. Detect via: spreadsheet/slide editors, project management tools, task boards.", "name": "Productivity" }, - { - "description": "Video calls, in-person meetings, and conferences", - "icon": "📅", - "id": "meeting", - "instructions": "Levels: high=actively speaking/presenting, medium=listening attentively, low=muted or multitasking during call. Detect via: video call UI, multiple speakers, calendar event visible.", - "name": "Meetings" - }, { "description": "Watching videos and streaming content", "icon": "🎬", diff --git a/tests/baselines/api/stats/stats.json b/tests/baselines/api/stats/stats.json index 052df94ab..e7628b2df 100644 --- a/tests/baselines/api/stats/stats.json +++ b/tests/baselines/api/stats/stats.json @@ -888,6 +888,14 @@ "percept_duration": 0.0, "transcript_duration": 0.0 }, + "20260319": { + "day_bytes": 120, + "outputs_pending": 11, + "outputs_processed": 0, + "pending_segments": 0, + "percept_duration": 0.0, + "transcript_duration": 0.0 + }, "20990101": { "audio_duration": 0.0, "day_bytes": 0, @@ -1871,8 +1879,8 @@ "audio_duration": 968.0, "audio_segments": 68, "audio_sessions": 16, - "day_bytes": 531607, - "outputs_pending": 454, + "day_bytes": 531727, + "outputs_pending": 465, "outputs_processed": 14, "pending_segments": 0, "percept_frames": 0, diff --git a/tests/fixtures/journal/indexer/journal.sqlite b/tests/fixtures/journal/indexer/journal.sqlite index 5ce4678cb53b0d2c0a371e991ac374b0cc5954bd..35a097bfdcd6d9637820ca3ea384e4ad58881c1a 100644 GIT binary patch delta 65032 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
t0N%fP_E)n~vA=Wsk>kV5A0 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 MG49>kz}>(P0NdPQwEzGB delta 38716 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

l2C4(tm{>9rGmCosK%p%S z-?|13BLyB%DU*{}1YYjgqYg4egqbxpu|6-gs0X|+nTM6J2ofkFPGMoYrlQcUMw=`&@TrOxQ8n`%@234Ti?mYB*n&5 zP|}kC5)@`*DauPtfrP67d;=Opk_EQyOcHX>ubc{#4ARkrJ(?gBSV23_AU5#APbGx# z#aUQNQY%W3ihV}L>3yPHLhu%d@$^aBOj^?gbeIIDFSy0bKmCR_lSe(|_(F&o5}<30 zdn7$xxg@6&lHtXfS;31MdcdlW&xdg z*rNrK=VAdJf0md7FC^mYYSRi=*M={$<8mi0_!nLW^y zDGJ(^&RE%_#>mPj0IHmdnAlmF*aVn3SeV$ESW=Tp(;=CfkBtR8A8-fq0{|xz!Q%h` diff --git a/think/indexer/journal.py b/think/indexer/journal.py index 7620e450b..8db3def70 100644 --- a/think/indexer/journal.py +++ b/think/indexer/journal.py @@ -1616,8 +1616,13 @@ def scan_journal(journal: str, verbose: bool = False, full: bool = False) -> boo entity_changed = scan_entities(journal, conn, verbose=verbose, full=full) signal_changed = scan_signals(journal, conn, verbose=verbose, full=full) - # Regenerate entity search chunks when entity data changes - if entity_changed: + # Regenerate entity search chunks when entity data changes or chunks are missing + if ( + entity_changed + or not conn.execute( + "SELECT 1 FROM chunks WHERE agent='entity' LIMIT 1" + ).fetchone() + ): _index_entity_search_chunks(conn) conn.close() -- 2.51.2