From 0767268770644530372d142ad06014632d3170f1 Mon Sep 17 00:00:00 2001 From: Harshith Mullapudi Date: Tue, 8 Jul 2025 22:33:14 +0530 Subject: [PATCH] Feat: added conversation --- .../llm-error-2025-07-08T14-35-41.438Z.json | 1 + .../llm-error-2025-07-08T14-35-57.972Z.json | 1 + .../llm-error-2025-07-08T14-36-35.479Z.json | 1 + .../llm-error-2025-07-08T14-37-12.989Z.json | 1 + .../llm-error-2025-07-08T14-37-50.503Z.json | 1 + .../llm-error-2025-07-08T14-38-28.011Z.json | 1 + .../conversation/conversation-item.client.tsx | 61 + .../conversation/conversation-list.tsx | 245 +++ .../conversation-textarea.client.tsx | 175 ++ .../conversation/conversation.client.tsx | 151 ++ .../app/components/conversation/index.ts | 5 + .../streaming-conversation.client.tsx | 106 + .../conversation/use-trigger-stream.tsx | 103 + .../app/components/graph/graph-client.tsx | 2 +- apps/webapp/app/components/graph/graph.tsx | 17 +- .../layout/{AppLayout.tsx => app-layout.tsx} | 0 ...inPageLayout.tsx => login-page-layout.tsx} | 10 +- .../app/components/sidebar/app-sidebar.tsx | 4 +- apps/webapp/app/components/ui/header.tsx | 2 +- .../webapp/app/components/use-auto-scroll.tsx | 169 ++ apps/webapp/app/env.server.ts | 2 + apps/webapp/app/root.tsx | 2 +- apps/webapp/app/routes/api.v1.add.tsx | 21 + ...i.v1.conversation.$conversationId.stop.tsx | 1 + .../app/routes/api.v1.conversations.tsx | 41 + apps/webapp/app/routes/api.v1.search.tsx | 50 + .../app/routes/confirm-basic-details.tsx | 2 +- .../home.conversation.$conversationId.tsx | 187 ++ .../app/routes/home.conversation._index.tsx | 72 + apps/webapp/app/routes/home.dashboard.tsx | 10 - apps/webapp/app/routes/ingest.tsx | 3 + apps/webapp/app/routes/login._index.tsx | 2 +- apps/webapp/app/routes/login.magic.tsx | 2 +- apps/webapp/app/routes/search.tsx | 3 + apps/webapp/app/services/apiAuth.server.ts | 3 - .../app/services/conversation.server.ts | 92 + apps/webapp/app/services/session.server.ts | 12 +- apps/webapp/app/tailwind.css | 46 +- apps/webapp/app/trigger/chat/chat.ts | 16 +- apps/webapp/app/trigger/utils/utils.ts | 2 +- apps/webapp/package.json | 18 +- apps/webapp/prisma/schema.prisma | 378 ++++ apps/webapp/trigger.config.ts | 16 + apps/webapp/vite.config.ts | 8 +- pnpm-lock.yaml | 1767 ++++++++++++++++- turbo.json | 7 +- 46 files changed, 3698 insertions(+), 121 deletions(-) create mode 100644 apps/logs/errors/llm-error-2025-07-08T14-35-41.438Z.json create mode 100644 apps/logs/errors/llm-error-2025-07-08T14-35-57.972Z.json create mode 100644 apps/logs/errors/llm-error-2025-07-08T14-36-35.479Z.json create mode 100644 apps/logs/errors/llm-error-2025-07-08T14-37-12.989Z.json create mode 100644 apps/logs/errors/llm-error-2025-07-08T14-37-50.503Z.json create mode 100644 apps/logs/errors/llm-error-2025-07-08T14-38-28.011Z.json create mode 100644 apps/webapp/app/components/conversation/conversation-item.client.tsx create mode 100644 apps/webapp/app/components/conversation/conversation-list.tsx create mode 100644 apps/webapp/app/components/conversation/conversation-textarea.client.tsx create mode 100644 apps/webapp/app/components/conversation/conversation.client.tsx create mode 100644 apps/webapp/app/components/conversation/index.ts create mode 100644 apps/webapp/app/components/conversation/streaming-conversation.client.tsx create mode 100644 apps/webapp/app/components/conversation/use-trigger-stream.tsx rename apps/webapp/app/components/layout/{AppLayout.tsx => app-layout.tsx} (100%) rename apps/webapp/app/components/layout/{LoginPageLayout.tsx => login-page-layout.tsx} (66%) create mode 100644 apps/webapp/app/components/use-auto-scroll.tsx create mode 100644 apps/webapp/app/routes/api.v1.add.tsx create mode 100644 apps/webapp/app/routes/api.v1.conversations.tsx create mode 100644 apps/webapp/app/routes/api.v1.search.tsx create mode 100644 apps/webapp/app/routes/home.conversation.$conversationId.tsx create mode 100644 apps/webapp/app/routes/home.conversation._index.tsx create mode 100644 apps/webapp/prisma/schema.prisma diff --git a/apps/logs/errors/llm-error-2025-07-08T14-35-41.438Z.json b/apps/logs/errors/llm-error-2025-07-08T14-35-41.438Z.json new file mode 100644 index 0000000..c7f98cf --- /dev/null +++ b/apps/logs/errors/llm-error-2025-07-08T14-35-41.438Z.json @@ -0,0 +1 @@ +{"timestamp":"2025-07-08T14:35:41.438Z","error":{"name":"AI_RetryError","reason":"maxRetriesExceeded","errors":[{"name":"AI_APICallError","cause":{"errno":-3008,"code":"ENOTFOUND","syscall":"getaddrinfo","hostname":"api.openai.com"},"url":"https://api.openai.com/v1/chat/completions","requestBodyValues":{"model":"gpt-4.1-2025-04-14","temperature":1,"messages":[{"role":"system","content":"\nYou are a helpful AI assistant with access to user memory. Your primary capabilities are:\n\n1. **Memory-First Approach**: Always check user memory first to understand context and previous interactions\n2. **Memory Management**: Help users store, retrieve, and organize information in their memory\n3. **Contextual Assistance**: Use memory to provide personalized and contextual responses\n\n\n- workpsaceId: 2524b89e-6cbd-4e0c-90e3-ec21134553b9\n- todayDate: 2025-07-08T14:35:24.227Z\n\n\n\n- Always check memory FIRST using core--search_memory before any other actions\n- Consider this your highest priority for EVERY interaction - as essential as breathing\n- Make memory checking your first tool call before any other operations\n\nQUERY FORMATION:\n- Write specific factual statements as queries (e.g., \"user email address\" not \"what is the user's email?\")\n- Create multiple targeted memory queries for complex requests\n\nKEY QUERY AREAS:\n- Personal context: user name, location, identity, work context\n- Project context: repositories, codebases, current work, team members\n- Task context: recent tasks, ongoing projects, deadlines, priorities\n- Integration context: GitHub repos, Slack channels, Linear projects, connected services\n- Communication patterns: email preferences, notification settings, workflow automation\n- Technical context: coding languages, frameworks, development environment\n- Collaboration context: team members, project stakeholders, meeting patterns\n- Preferences: likes, dislikes, communication style, tool preferences\n- History: previous discussions, past requests, completed work, recurring issues\n- Automation rules: user-defined workflows, triggers, automation preferences\n\nMEMORY USAGE:\n- Execute multiple memory queries in parallel rather than sequentially\n- Batch related memory queries when possible\n- Prioritize recent information over older memories\n- Create comprehensive context-aware queries based on user message/activity content\n- Extract and query SEMANTIC CONTENT, not just structural metadata\n- Parse titles, descriptions, and content for actual subject matter keywords\n- Search internal SOL tasks/conversations that may relate to the same topics\n- Query ALL relatable concepts, not just direct keywords or IDs\n- Search for similar past situations, patterns, and related work\n- Include synonyms, related terms, and contextual concepts in queries \n- Query user's historical approach to similar requests or activities\n- Search for connected projects, tasks, conversations, and collaborations\n- Retrieve workflow patterns and past decision-making context\n- Query broader domain context beyond immediate request scope\n- Remember: SOL tracks work that external tools don't - search internal content thoroughly\n- Blend memory insights naturally into responses\n- Verify you've checked relevant memory before finalizing ANY response\n\nIf memory access is unavailable, rely only on the current conversation or ask user\n\n\n\nYou have tools at your disposal to assist users:\n\nCORE PRINCIPLES:\n- Use tools only when necessary for the task at hand\n- Always check memory FIRST before making other tool calls\n- Execute multiple operations in parallel whenever possible\n- Use sequential calls only when output of one is required for input of another\n\nPARAMETER HANDLING:\n- Follow tool schemas exactly with all required parameters\n- Only use values that are:\n • Explicitly provided by the user (use EXACTLY as given)\n • Reasonably inferred from context\n • Retrieved from memory or prior tool calls\n- Never make up values for required parameters\n- Omit optional parameters unless clearly needed\n- Analyze user's descriptive terms for parameter clues\n\nTOOL SELECTION:\n- Never call tools not provided in this conversation\n- Skip tool calls for general questions you can answer directly\n- For identical operations on multiple items, use parallel tool calls\n- Default to parallel execution (3-5× faster than sequential calls)\n- You can always access external service tools by loading them with load_mcp first\n\nTOOL MENTION HANDLING:\nWhen user message contains :\n- Extract tool_name from data-id attribute\n- First check if it's a built-in tool; if not, check EXTERNAL SERVICES TOOLS\n- If available: Load it with load_mcp and focus on addressing the request with this tool\n- If unavailable: Inform user and suggest alternatives if possible\n- For multiple tool mentions: Load all applicable tools in a single load_mcp call\n\nERROR HANDLING:\n- If a tool returns an error, try fixing parameters before retrying\n- If you can't resolve an error, explain the issue to the user\n- Consider alternative tools when primary tools are unavailable\n\n\n\nUse EXACTLY ONE of these formats for all user-facing communication:\n\nPROGRESS UPDATES - During processing:\n- Use the core--progress_update tool to keep users informed\n- Update users about what you're discovering or doing next\n- Keep messages clear and user-friendly\n- Avoid technical jargon\n\nQUESTIONS - When you need information:\n\n

[Your question with HTML formatting]

\n
\n\n- Ask questions only when you cannot find information through memory or tools\n- Be specific about what you need to know\n- Provide context for why you're asking\n\nFINAL ANSWERS - When completing tasks:\n\n

[Your answer with HTML formatting]

\n
\n\nCRITICAL:\n- Use ONE format per turn\n- Apply proper HTML formatting (

,

,

,

    ,
  • , etc.)\n- Never mix communication formats\n- Keep responses clear and helpful\n\n"},{"role":"user","content":"\nHere is the user message:\n\n<p>Hello</p>\n\n"}],"tools":[{"type":"function","function":{"name":"core--progress_update","description":"Send a progress update to the user about what has been discovered or will be done next in a crisp and user friendly way no technical terms","parameters":{"type":"object","properties":{"message":{"type":"string","description":"The progress update message to send to the user"}},"required":["message"],"additionalProperties":false}}},{"type":"function","function":{"name":"core--search_memory","description":"Search the user's memory graph for episodes or statements based on a query","parameters":{"type":"object","properties":{"query":{"type":"string","description":"The search query in third person perspective"},"validAt":{"type":"string","description":"The valid at time in ISO format"},"startTime":{"type":"string","description":"The start time in ISO format"},"endTime":{"type":"string","description":"The end time in ISO format"}},"required":["query"],"additionalProperties":false}}},{"type":"function","function":{"name":"core--add_memory","description":"Add information to the user's memory graph","parameters":{"type":"object","properties":{"message":{"type":"string","description":"The content/text to add to memory"}},"required":["message"],"additionalProperties":false}}}],"tool_choice":"auto","stream":true,"stream_options":{"include_usage":true}},"isRetryable":true},{"name":"AI_APICallError","cause":{"name":"ConnectTimeoutError","code":"UND_ERR_CONNECT_TIMEOUT"},"url":"https://api.openai.com/v1/chat/completions","requestBodyValues":{"model":"gpt-4.1-2025-04-14","temperature":1,"messages":[{"role":"system","content":"\nYou are a helpful AI assistant with access to user memory. Your primary capabilities are:\n\n1. **Memory-First Approach**: Always check user memory first to understand context and previous interactions\n2. **Memory Management**: Help users store, retrieve, and organize information in their memory\n3. **Contextual Assistance**: Use memory to provide personalized and contextual responses\n\n\n- workpsaceId: 2524b89e-6cbd-4e0c-90e3-ec21134553b9\n- todayDate: 2025-07-08T14:35:24.227Z\n\n\n\n- Always check memory FIRST using core--search_memory before any other actions\n- Consider this your highest priority for EVERY interaction - as essential as breathing\n- Make memory checking your first tool call before any other operations\n\nQUERY FORMATION:\n- Write specific factual statements as queries (e.g., \"user email address\" not \"what is the user's email?\")\n- Create multiple targeted memory queries for complex requests\n\nKEY QUERY AREAS:\n- Personal context: user name, location, identity, work context\n- Project context: repositories, codebases, current work, team members\n- Task context: recent tasks, ongoing projects, deadlines, priorities\n- Integration context: GitHub repos, Slack channels, Linear projects, connected services\n- Communication patterns: email preferences, notification settings, workflow automation\n- Technical context: coding languages, frameworks, development environment\n- Collaboration context: team members, project stakeholders, meeting patterns\n- Preferences: likes, dislikes, communication style, tool preferences\n- History: previous discussions, past requests, completed work, recurring issues\n- Automation rules: user-defined workflows, triggers, automation preferences\n\nMEMORY USAGE:\n- Execute multiple memory queries in parallel rather than sequentially\n- Batch related memory queries when possible\n- Prioritize recent information over older memories\n- Create comprehensive context-aware queries based on user message/activity content\n- Extract and query SEMANTIC CONTENT, not just structural metadata\n- Parse titles, descriptions, and content for actual subject matter keywords\n- Search internal SOL tasks/conversations that may relate to the same topics\n- Query ALL relatable concepts, not just direct keywords or IDs\n- Search for similar past situations, patterns, and related work\n- Include synonyms, related terms, and contextual concepts in queries \n- Query user's historical approach to similar requests or activities\n- Search for connected projects, tasks, conversations, and collaborations\n- Retrieve workflow patterns and past decision-making context\n- Query broader domain context beyond immediate request scope\n- Remember: SOL tracks work that external tools don't - search internal content thoroughly\n- Blend memory insights naturally into responses\n- Verify you've checked relevant memory before finalizing ANY response\n\nIf memory access is unavailable, rely only on the current conversation or ask user\n\n\n\nYou have tools at your disposal to assist users:\n\nCORE PRINCIPLES:\n- Use tools only when necessary for the task at hand\n- Always check memory FIRST before making other tool calls\n- Execute multiple operations in parallel whenever possible\n- Use sequential calls only when output of one is required for input of another\n\nPARAMETER HANDLING:\n- Follow tool schemas exactly with all required parameters\n- Only use values that are:\n • Explicitly provided by the user (use EXACTLY as given)\n • Reasonably inferred from context\n • Retrieved from memory or prior tool calls\n- Never make up values for required parameters\n- Omit optional parameters unless clearly needed\n- Analyze user's descriptive terms for parameter clues\n\nTOOL SELECTION:\n- Never call tools not provided in this conversation\n- Skip tool calls for general questions you can answer directly\n- For identical operations on multiple items, use parallel tool calls\n- Default to parallel execution (3-5× faster than sequential calls)\n- You can always access external service tools by loading them with load_mcp first\n\nTOOL MENTION HANDLING:\nWhen user message contains :\n- Extract tool_name from data-id attribute\n- First check if it's a built-in tool; if not, check EXTERNAL SERVICES TOOLS\n- If available: Load it with load_mcp and focus on addressing the request with this tool\n- If unavailable: Inform user and suggest alternatives if possible\n- For multiple tool mentions: Load all applicable tools in a single load_mcp call\n\nERROR HANDLING:\n- If a tool returns an error, try fixing parameters before retrying\n- If you can't resolve an error, explain the issue to the user\n- Consider alternative tools when primary tools are unavailable\n\n\n\nUse EXACTLY ONE of these formats for all user-facing communication:\n\nPROGRESS UPDATES - During processing:\n- Use the core--progress_update tool to keep users informed\n- Update users about what you're discovering or doing next\n- Keep messages clear and user-friendly\n- Avoid technical jargon\n\nQUESTIONS - When you need information:\n\n

    [Your question with HTML formatting]

    \n
    \n\n- Ask questions only when you cannot find information through memory or tools\n- Be specific about what you need to know\n- Provide context for why you're asking\n\nFINAL ANSWERS - When completing tasks:\n\n

    [Your answer with HTML formatting]

    \n
    \n\nCRITICAL:\n- Use ONE format per turn\n- Apply proper HTML formatting (

    ,

    ,

    ,

      ,
    • , etc.)\n- Never mix communication formats\n- Keep responses clear and helpful\n\n"},{"role":"user","content":"\nHere is the user message:\n\n<p>Hello</p>\n\n"}],"tools":[{"type":"function","function":{"name":"core--progress_update","description":"Send a progress update to the user about what has been discovered or will be done next in a crisp and user friendly way no technical terms","parameters":{"type":"object","properties":{"message":{"type":"string","description":"The progress update message to send to the user"}},"required":["message"],"additionalProperties":false}}},{"type":"function","function":{"name":"core--search_memory","description":"Search the user's memory graph for episodes or statements based on a query","parameters":{"type":"object","properties":{"query":{"type":"string","description":"The search query in third person perspective"},"validAt":{"type":"string","description":"The valid at time in ISO format"},"startTime":{"type":"string","description":"The start time in ISO format"},"endTime":{"type":"string","description":"The end time in ISO format"}},"required":["query"],"additionalProperties":false}}},{"type":"function","function":{"name":"core--add_memory","description":"Add information to the user's memory graph","parameters":{"type":"object","properties":{"message":{"type":"string","description":"The content/text to add to memory"}},"required":["message"],"additionalProperties":false}}}],"tool_choice":"auto","stream":true,"stream_options":{"include_usage":true}},"isRetryable":true},{"name":"AI_APICallError","cause":{"errno":-3008,"code":"ENOTFOUND","syscall":"getaddrinfo","hostname":"api.openai.com"},"url":"https://api.openai.com/v1/chat/completions","requestBodyValues":{"model":"gpt-4.1-2025-04-14","temperature":1,"messages":[{"role":"system","content":"\nYou are a helpful AI assistant with access to user memory. Your primary capabilities are:\n\n1. **Memory-First Approach**: Always check user memory first to understand context and previous interactions\n2. **Memory Management**: Help users store, retrieve, and organize information in their memory\n3. **Contextual Assistance**: Use memory to provide personalized and contextual responses\n\n\n- workpsaceId: 2524b89e-6cbd-4e0c-90e3-ec21134553b9\n- todayDate: 2025-07-08T14:35:24.227Z\n\n\n\n- Always check memory FIRST using core--search_memory before any other actions\n- Consider this your highest priority for EVERY interaction - as essential as breathing\n- Make memory checking your first tool call before any other operations\n\nQUERY FORMATION:\n- Write specific factual statements as queries (e.g., \"user email address\" not \"what is the user's email?\")\n- Create multiple targeted memory queries for complex requests\n\nKEY QUERY AREAS:\n- Personal context: user name, location, identity, work context\n- Project context: repositories, codebases, current work, team members\n- Task context: recent tasks, ongoing projects, deadlines, priorities\n- Integration context: GitHub repos, Slack channels, Linear projects, connected services\n- Communication patterns: email preferences, notification settings, workflow automation\n- Technical context: coding languages, frameworks, development environment\n- Collaboration context: team members, project stakeholders, meeting patterns\n- Preferences: likes, dislikes, communication style, tool preferences\n- History: previous discussions, past requests, completed work, recurring issues\n- Automation rules: user-defined workflows, triggers, automation preferences\n\nMEMORY USAGE:\n- Execute multiple memory queries in parallel rather than sequentially\n- Batch related memory queries when possible\n- Prioritize recent information over older memories\n- Create comprehensive context-aware queries based on user message/activity content\n- Extract and query SEMANTIC CONTENT, not just structural metadata\n- Parse titles, descriptions, and content for actual subject matter keywords\n- Search internal SOL tasks/conversations that may relate to the same topics\n- Query ALL relatable concepts, not just direct keywords or IDs\n- Search for similar past situations, patterns, and related work\n- Include synonyms, related terms, and contextual concepts in queries \n- Query user's historical approach to similar requests or activities\n- Search for connected projects, tasks, conversations, and collaborations\n- Retrieve workflow patterns and past decision-making context\n- Query broader domain context beyond immediate request scope\n- Remember: SOL tracks work that external tools don't - search internal content thoroughly\n- Blend memory insights naturally into responses\n- Verify you've checked relevant memory before finalizing ANY response\n\nIf memory access is unavailable, rely only on the current conversation or ask user\n\n\n\nYou have tools at your disposal to assist users:\n\nCORE PRINCIPLES:\n- Use tools only when necessary for the task at hand\n- Always check memory FIRST before making other tool calls\n- Execute multiple operations in parallel whenever possible\n- Use sequential calls only when output of one is required for input of another\n\nPARAMETER HANDLING:\n- Follow tool schemas exactly with all required parameters\n- Only use values that are:\n • Explicitly provided by the user (use EXACTLY as given)\n • Reasonably inferred from context\n • Retrieved from memory or prior tool calls\n- Never make up values for required parameters\n- Omit optional parameters unless clearly needed\n- Analyze user's descriptive terms for parameter clues\n\nTOOL SELECTION:\n- Never call tools not provided in this conversation\n- Skip tool calls for general questions you can answer directly\n- For identical operations on multiple items, use parallel tool calls\n- Default to parallel execution (3-5× faster than sequential calls)\n- You can always access external service tools by loading them with load_mcp first\n\nTOOL MENTION HANDLING:\nWhen user message contains :\n- Extract tool_name from data-id attribute\n- First check if it's a built-in tool; if not, check EXTERNAL SERVICES TOOLS\n- If available: Load it with load_mcp and focus on addressing the request with this tool\n- If unavailable: Inform user and suggest alternatives if possible\n- For multiple tool mentions: Load all applicable tools in a single load_mcp call\n\nERROR HANDLING:\n- If a tool returns an error, try fixing parameters before retrying\n- If you can't resolve an error, explain the issue to the user\n- Consider alternative tools when primary tools are unavailable\n\n\n\nUse EXACTLY ONE of these formats for all user-facing communication:\n\nPROGRESS UPDATES - During processing:\n- Use the core--progress_update tool to keep users informed\n- Update users about what you're discovering or doing next\n- Keep messages clear and user-friendly\n- Avoid technical jargon\n\nQUESTIONS - When you need information:\n\n

      [Your question with HTML formatting]

      \n
      \n\n- Ask questions only when you cannot find information through memory or tools\n- Be specific about what you need to know\n- Provide context for why you're asking\n\nFINAL ANSWERS - When completing tasks:\n\n

      [Your answer with HTML formatting]

      \n
      \n\nCRITICAL:\n- Use ONE format per turn\n- Apply proper HTML formatting (

      ,

      ,

      ,

        ,
      • , etc.)\n- Never mix communication formats\n- Keep responses clear and helpful\n\n"},{"role":"user","content":"\nHere is the user message:\n\n<p>Hello</p>\n\n"}],"tools":[{"type":"function","function":{"name":"core--progress_update","description":"Send a progress update to the user about what has been discovered or will be done next in a crisp and user friendly way no technical terms","parameters":{"type":"object","properties":{"message":{"type":"string","description":"The progress update message to send to the user"}},"required":["message"],"additionalProperties":false}}},{"type":"function","function":{"name":"core--search_memory","description":"Search the user's memory graph for episodes or statements based on a query","parameters":{"type":"object","properties":{"query":{"type":"string","description":"The search query in third person perspective"},"validAt":{"type":"string","description":"The valid at time in ISO format"},"startTime":{"type":"string","description":"The start time in ISO format"},"endTime":{"type":"string","description":"The end time in ISO format"}},"required":["query"],"additionalProperties":false}}},{"type":"function","function":{"name":"core--add_memory","description":"Add information to the user's memory graph","parameters":{"type":"object","properties":{"message":{"type":"string","description":"The content/text to add to memory"}},"required":["message"],"additionalProperties":false}}}],"tool_choice":"auto","stream":true,"stream_options":{"include_usage":true}},"isRetryable":true}],"lastError":{"name":"AI_APICallError","cause":{"errno":-3008,"code":"ENOTFOUND","syscall":"getaddrinfo","hostname":"api.openai.com"},"url":"https://api.openai.com/v1/chat/completions","requestBodyValues":{"model":"gpt-4.1-2025-04-14","temperature":1,"messages":[{"role":"system","content":"\nYou are a helpful AI assistant with access to user memory. Your primary capabilities are:\n\n1. **Memory-First Approach**: Always check user memory first to understand context and previous interactions\n2. **Memory Management**: Help users store, retrieve, and organize information in their memory\n3. **Contextual Assistance**: Use memory to provide personalized and contextual responses\n\n\n- workpsaceId: 2524b89e-6cbd-4e0c-90e3-ec21134553b9\n- todayDate: 2025-07-08T14:35:24.227Z\n\n\n\n- Always check memory FIRST using core--search_memory before any other actions\n- Consider this your highest priority for EVERY interaction - as essential as breathing\n- Make memory checking your first tool call before any other operations\n\nQUERY FORMATION:\n- Write specific factual statements as queries (e.g., \"user email address\" not \"what is the user's email?\")\n- Create multiple targeted memory queries for complex requests\n\nKEY QUERY AREAS:\n- Personal context: user name, location, identity, work context\n- Project context: repositories, codebases, current work, team members\n- Task context: recent tasks, ongoing projects, deadlines, priorities\n- Integration context: GitHub repos, Slack channels, Linear projects, connected services\n- Communication patterns: email preferences, notification settings, workflow automation\n- Technical context: coding languages, frameworks, development environment\n- Collaboration context: team members, project stakeholders, meeting patterns\n- Preferences: likes, dislikes, communication style, tool preferences\n- History: previous discussions, past requests, completed work, recurring issues\n- Automation rules: user-defined workflows, triggers, automation preferences\n\nMEMORY USAGE:\n- Execute multiple memory queries in parallel rather than sequentially\n- Batch related memory queries when possible\n- Prioritize recent information over older memories\n- Create comprehensive context-aware queries based on user message/activity content\n- Extract and query SEMANTIC CONTENT, not just structural metadata\n- Parse titles, descriptions, and content for actual subject matter keywords\n- Search internal SOL tasks/conversations that may relate to the same topics\n- Query ALL relatable concepts, not just direct keywords or IDs\n- Search for similar past situations, patterns, and related work\n- Include synonyms, related terms, and contextual concepts in queries \n- Query user's historical approach to similar requests or activities\n- Search for connected projects, tasks, conversations, and collaborations\n- Retrieve workflow patterns and past decision-making context\n- Query broader domain context beyond immediate request scope\n- Remember: SOL tracks work that external tools don't - search internal content thoroughly\n- Blend memory insights naturally into responses\n- Verify you've checked relevant memory before finalizing ANY response\n\nIf memory access is unavailable, rely only on the current conversation or ask user\n\n\n\nYou have tools at your disposal to assist users:\n\nCORE PRINCIPLES:\n- Use tools only when necessary for the task at hand\n- Always check memory FIRST before making other tool calls\n- Execute multiple operations in parallel whenever possible\n- Use sequential calls only when output of one is required for input of another\n\nPARAMETER HANDLING:\n- Follow tool schemas exactly with all required parameters\n- Only use values that are:\n • Explicitly provided by the user (use EXACTLY as given)\n • Reasonably inferred from context\n • Retrieved from memory or prior tool calls\n- Never make up values for required parameters\n- Omit optional parameters unless clearly needed\n- Analyze user's descriptive terms for parameter clues\n\nTOOL SELECTION:\n- Never call tools not provided in this conversation\n- Skip tool calls for general questions you can answer directly\n- For identical operations on multiple items, use parallel tool calls\n- Default to parallel execution (3-5× faster than sequential calls)\n- You can always access external service tools by loading them with load_mcp first\n\nTOOL MENTION HANDLING:\nWhen user message contains :\n- Extract tool_name from data-id attribute\n- First check if it's a built-in tool; if not, check EXTERNAL SERVICES TOOLS\n- If available: Load it with load_mcp and focus on addressing the request with this tool\n- If unavailable: Inform user and suggest alternatives if possible\n- For multiple tool mentions: Load all applicable tools in a single load_mcp call\n\nERROR HANDLING:\n- If a tool returns an error, try fixing parameters before retrying\n- If you can't resolve an error, explain the issue to the user\n- Consider alternative tools when primary tools are unavailable\n\n\n\nUse EXACTLY ONE of these formats for all user-facing communication:\n\nPROGRESS UPDATES - During processing:\n- Use the core--progress_update tool to keep users informed\n- Update users about what you're discovering or doing next\n- Keep messages clear and user-friendly\n- Avoid technical jargon\n\nQUESTIONS - When you need information:\n\n

        [Your question with HTML formatting]

        \n
        \n\n- Ask questions only when you cannot find information through memory or tools\n- Be specific about what you need to know\n- Provide context for why you're asking\n\nFINAL ANSWERS - When completing tasks:\n\n

        [Your answer with HTML formatting]

        \n
        \n\nCRITICAL:\n- Use ONE format per turn\n- Apply proper HTML formatting (

        ,

        ,

        ,

          ,
        • , etc.)\n- Never mix communication formats\n- Keep responses clear and helpful\n\n"},{"role":"user","content":"\nHere is the user message:\n\n<p>Hello</p>\n\n"}],"tools":[{"type":"function","function":{"name":"core--progress_update","description":"Send a progress update to the user about what has been discovered or will be done next in a crisp and user friendly way no technical terms","parameters":{"type":"object","properties":{"message":{"type":"string","description":"The progress update message to send to the user"}},"required":["message"],"additionalProperties":false}}},{"type":"function","function":{"name":"core--search_memory","description":"Search the user's memory graph for episodes or statements based on a query","parameters":{"type":"object","properties":{"query":{"type":"string","description":"The search query in third person perspective"},"validAt":{"type":"string","description":"The valid at time in ISO format"},"startTime":{"type":"string","description":"The start time in ISO format"},"endTime":{"type":"string","description":"The end time in ISO format"}},"required":["query"],"additionalProperties":false}}},{"type":"function","function":{"name":"core--add_memory","description":"Add information to the user's memory graph","parameters":{"type":"object","properties":{"message":{"type":"string","description":"The content/text to add to memory"}},"required":["message"],"additionalProperties":false}}}],"tool_choice":"auto","stream":true,"stream_options":{"include_usage":true}},"isRetryable":true}}} \ No newline at end of file diff --git a/apps/logs/errors/llm-error-2025-07-08T14-35-57.972Z.json b/apps/logs/errors/llm-error-2025-07-08T14-35-57.972Z.json new file mode 100644 index 0000000..459094d --- /dev/null +++ b/apps/logs/errors/llm-error-2025-07-08T14-35-57.972Z.json @@ -0,0 +1 @@ +{"timestamp":"2025-07-08T14:35:57.972Z","error":{"name":"AI_RetryError","reason":"maxRetriesExceeded","errors":[{"name":"AI_APICallError","cause":{"errno":-3008,"code":"ENOTFOUND","syscall":"getaddrinfo","hostname":"api.openai.com"},"url":"https://api.openai.com/v1/chat/completions","requestBodyValues":{"model":"gpt-4.1-2025-04-14","temperature":1,"messages":[{"role":"system","content":"\nYou are a helpful AI assistant with access to user memory. Your primary capabilities are:\n\n1. **Memory-First Approach**: Always check user memory first to understand context and previous interactions\n2. **Memory Management**: Help users store, retrieve, and organize information in their memory\n3. **Contextual Assistance**: Use memory to provide personalized and contextual responses\n\n\n- workpsaceId: 2524b89e-6cbd-4e0c-90e3-ec21134553b9\n- todayDate: 2025-07-08T14:35:24.227Z\n\n\n\n- Always check memory FIRST using core--search_memory before any other actions\n- Consider this your highest priority for EVERY interaction - as essential as breathing\n- Make memory checking your first tool call before any other operations\n\nQUERY FORMATION:\n- Write specific factual statements as queries (e.g., \"user email address\" not \"what is the user's email?\")\n- Create multiple targeted memory queries for complex requests\n\nKEY QUERY AREAS:\n- Personal context: user name, location, identity, work context\n- Project context: repositories, codebases, current work, team members\n- Task context: recent tasks, ongoing projects, deadlines, priorities\n- Integration context: GitHub repos, Slack channels, Linear projects, connected services\n- Communication patterns: email preferences, notification settings, workflow automation\n- Technical context: coding languages, frameworks, development environment\n- Collaboration context: team members, project stakeholders, meeting patterns\n- Preferences: likes, dislikes, communication style, tool preferences\n- History: previous discussions, past requests, completed work, recurring issues\n- Automation rules: user-defined workflows, triggers, automation preferences\n\nMEMORY USAGE:\n- Execute multiple memory queries in parallel rather than sequentially\n- Batch related memory queries when possible\n- Prioritize recent information over older memories\n- Create comprehensive context-aware queries based on user message/activity content\n- Extract and query SEMANTIC CONTENT, not just structural metadata\n- Parse titles, descriptions, and content for actual subject matter keywords\n- Search internal SOL tasks/conversations that may relate to the same topics\n- Query ALL relatable concepts, not just direct keywords or IDs\n- Search for similar past situations, patterns, and related work\n- Include synonyms, related terms, and contextual concepts in queries \n- Query user's historical approach to similar requests or activities\n- Search for connected projects, tasks, conversations, and collaborations\n- Retrieve workflow patterns and past decision-making context\n- Query broader domain context beyond immediate request scope\n- Remember: SOL tracks work that external tools don't - search internal content thoroughly\n- Blend memory insights naturally into responses\n- Verify you've checked relevant memory before finalizing ANY response\n\nIf memory access is unavailable, rely only on the current conversation or ask user\n\n\n\nYou have tools at your disposal to assist users:\n\nCORE PRINCIPLES:\n- Use tools only when necessary for the task at hand\n- Always check memory FIRST before making other tool calls\n- Execute multiple operations in parallel whenever possible\n- Use sequential calls only when output of one is required for input of another\n\nPARAMETER HANDLING:\n- Follow tool schemas exactly with all required parameters\n- Only use values that are:\n • Explicitly provided by the user (use EXACTLY as given)\n • Reasonably inferred from context\n • Retrieved from memory or prior tool calls\n- Never make up values for required parameters\n- Omit optional parameters unless clearly needed\n- Analyze user's descriptive terms for parameter clues\n\nTOOL SELECTION:\n- Never call tools not provided in this conversation\n- Skip tool calls for general questions you can answer directly\n- For identical operations on multiple items, use parallel tool calls\n- Default to parallel execution (3-5× faster than sequential calls)\n- You can always access external service tools by loading them with load_mcp first\n\nTOOL MENTION HANDLING:\nWhen user message contains :\n- Extract tool_name from data-id attribute\n- First check if it's a built-in tool; if not, check EXTERNAL SERVICES TOOLS\n- If available: Load it with load_mcp and focus on addressing the request with this tool\n- If unavailable: Inform user and suggest alternatives if possible\n- For multiple tool mentions: Load all applicable tools in a single load_mcp call\n\nERROR HANDLING:\n- If a tool returns an error, try fixing parameters before retrying\n- If you can't resolve an error, explain the issue to the user\n- Consider alternative tools when primary tools are unavailable\n\n\n\nUse EXACTLY ONE of these formats for all user-facing communication:\n\nPROGRESS UPDATES - During processing:\n- Use the core--progress_update tool to keep users informed\n- Update users about what you're discovering or doing next\n- Keep messages clear and user-friendly\n- Avoid technical jargon\n\nQUESTIONS - When you need information:\n\n

          [Your question with HTML formatting]

          \n
          \n\n- Ask questions only when you cannot find information through memory or tools\n- Be specific about what you need to know\n- Provide context for why you're asking\n\nFINAL ANSWERS - When completing tasks:\n\n

          [Your answer with HTML formatting]

          \n
          \n\nCRITICAL:\n- Use ONE format per turn\n- Apply proper HTML formatting (

          ,

          ,

          ,

            ,
          • , etc.)\n- Never mix communication formats\n- Keep responses clear and helpful\n\n"},{"role":"user","content":"\nHere is the user message:\n\n<p>Hello</p>\n\n"},{"role":"system","content":"Your last response was not in a valid format. You must respond with EXACTLY ONE of the required formats: either a tool call, tags, or tags. Please reformat your previous response using the correct format:\n\n"}],"tools":[{"type":"function","function":{"name":"core--progress_update","description":"Send a progress update to the user about what has been discovered or will be done next in a crisp and user friendly way no technical terms","parameters":{"type":"object","properties":{"message":{"type":"string","description":"The progress update message to send to the user"}},"required":["message"],"additionalProperties":false}}},{"type":"function","function":{"name":"core--search_memory","description":"Search the user's memory graph for episodes or statements based on a query","parameters":{"type":"object","properties":{"query":{"type":"string","description":"The search query in third person perspective"},"validAt":{"type":"string","description":"The valid at time in ISO format"},"startTime":{"type":"string","description":"The start time in ISO format"},"endTime":{"type":"string","description":"The end time in ISO format"}},"required":["query"],"additionalProperties":false}}},{"type":"function","function":{"name":"core--add_memory","description":"Add information to the user's memory graph","parameters":{"type":"object","properties":{"message":{"type":"string","description":"The content/text to add to memory"}},"required":["message"],"additionalProperties":false}}}],"tool_choice":"auto","stream":true,"stream_options":{"include_usage":true}},"isRetryable":true},{"name":"AI_APICallError","cause":{"errno":-3008,"code":"ENOTFOUND","syscall":"getaddrinfo","hostname":"api.openai.com"},"url":"https://api.openai.com/v1/chat/completions","requestBodyValues":{"model":"gpt-4.1-2025-04-14","temperature":1,"messages":[{"role":"system","content":"\nYou are a helpful AI assistant with access to user memory. Your primary capabilities are:\n\n1. **Memory-First Approach**: Always check user memory first to understand context and previous interactions\n2. **Memory Management**: Help users store, retrieve, and organize information in their memory\n3. **Contextual Assistance**: Use memory to provide personalized and contextual responses\n\n\n- workpsaceId: 2524b89e-6cbd-4e0c-90e3-ec21134553b9\n- todayDate: 2025-07-08T14:35:24.227Z\n\n\n\n- Always check memory FIRST using core--search_memory before any other actions\n- Consider this your highest priority for EVERY interaction - as essential as breathing\n- Make memory checking your first tool call before any other operations\n\nQUERY FORMATION:\n- Write specific factual statements as queries (e.g., \"user email address\" not \"what is the user's email?\")\n- Create multiple targeted memory queries for complex requests\n\nKEY QUERY AREAS:\n- Personal context: user name, location, identity, work context\n- Project context: repositories, codebases, current work, team members\n- Task context: recent tasks, ongoing projects, deadlines, priorities\n- Integration context: GitHub repos, Slack channels, Linear projects, connected services\n- Communication patterns: email preferences, notification settings, workflow automation\n- Technical context: coding languages, frameworks, development environment\n- Collaboration context: team members, project stakeholders, meeting patterns\n- Preferences: likes, dislikes, communication style, tool preferences\n- History: previous discussions, past requests, completed work, recurring issues\n- Automation rules: user-defined workflows, triggers, automation preferences\n\nMEMORY USAGE:\n- Execute multiple memory queries in parallel rather than sequentially\n- Batch related memory queries when possible\n- Prioritize recent information over older memories\n- Create comprehensive context-aware queries based on user message/activity content\n- Extract and query SEMANTIC CONTENT, not just structural metadata\n- Parse titles, descriptions, and content for actual subject matter keywords\n- Search internal SOL tasks/conversations that may relate to the same topics\n- Query ALL relatable concepts, not just direct keywords or IDs\n- Search for similar past situations, patterns, and related work\n- Include synonyms, related terms, and contextual concepts in queries \n- Query user's historical approach to similar requests or activities\n- Search for connected projects, tasks, conversations, and collaborations\n- Retrieve workflow patterns and past decision-making context\n- Query broader domain context beyond immediate request scope\n- Remember: SOL tracks work that external tools don't - search internal content thoroughly\n- Blend memory insights naturally into responses\n- Verify you've checked relevant memory before finalizing ANY response\n\nIf memory access is unavailable, rely only on the current conversation or ask user\n\n\n\nYou have tools at your disposal to assist users:\n\nCORE PRINCIPLES:\n- Use tools only when necessary for the task at hand\n- Always check memory FIRST before making other tool calls\n- Execute multiple operations in parallel whenever possible\n- Use sequential calls only when output of one is required for input of another\n\nPARAMETER HANDLING:\n- Follow tool schemas exactly with all required parameters\n- Only use values that are:\n • Explicitly provided by the user (use EXACTLY as given)\n • Reasonably inferred from context\n • Retrieved from memory or prior tool calls\n- Never make up values for required parameters\n- Omit optional parameters unless clearly needed\n- Analyze user's descriptive terms for parameter clues\n\nTOOL SELECTION:\n- Never call tools not provided in this conversation\n- Skip tool calls for general questions you can answer directly\n- For identical operations on multiple items, use parallel tool calls\n- Default to parallel execution (3-5× faster than sequential calls)\n- You can always access external service tools by loading them with load_mcp first\n\nTOOL MENTION HANDLING:\nWhen user message contains :\n- Extract tool_name from data-id attribute\n- First check if it's a built-in tool; if not, check EXTERNAL SERVICES TOOLS\n- If available: Load it with load_mcp and focus on addressing the request with this tool\n- If unavailable: Inform user and suggest alternatives if possible\n- For multiple tool mentions: Load all applicable tools in a single load_mcp call\n\nERROR HANDLING:\n- If a tool returns an error, try fixing parameters before retrying\n- If you can't resolve an error, explain the issue to the user\n- Consider alternative tools when primary tools are unavailable\n\n\n\nUse EXACTLY ONE of these formats for all user-facing communication:\n\nPROGRESS UPDATES - During processing:\n- Use the core--progress_update tool to keep users informed\n- Update users about what you're discovering or doing next\n- Keep messages clear and user-friendly\n- Avoid technical jargon\n\nQUESTIONS - When you need information:\n\n

            [Your question with HTML formatting]

            \n
            \n\n- Ask questions only when you cannot find information through memory or tools\n- Be specific about what you need to know\n- Provide context for why you're asking\n\nFINAL ANSWERS - When completing tasks:\n\n

            [Your answer with HTML formatting]

            \n
            \n\nCRITICAL:\n- Use ONE format per turn\n- Apply proper HTML formatting (

            ,

            ,

            ,

              ,
            • , etc.)\n- Never mix communication formats\n- Keep responses clear and helpful\n\n"},{"role":"user","content":"\nHere is the user message:\n\n<p>Hello</p>\n\n"},{"role":"system","content":"Your last response was not in a valid format. You must respond with EXACTLY ONE of the required formats: either a tool call, tags, or tags. Please reformat your previous response using the correct format:\n\n"}],"tools":[{"type":"function","function":{"name":"core--progress_update","description":"Send a progress update to the user about what has been discovered or will be done next in a crisp and user friendly way no technical terms","parameters":{"type":"object","properties":{"message":{"type":"string","description":"The progress update message to send to the user"}},"required":["message"],"additionalProperties":false}}},{"type":"function","function":{"name":"core--search_memory","description":"Search the user's memory graph for episodes or statements based on a query","parameters":{"type":"object","properties":{"query":{"type":"string","description":"The search query in third person perspective"},"validAt":{"type":"string","description":"The valid at time in ISO format"},"startTime":{"type":"string","description":"The start time in ISO format"},"endTime":{"type":"string","description":"The end time in ISO format"}},"required":["query"],"additionalProperties":false}}},{"type":"function","function":{"name":"core--add_memory","description":"Add information to the user's memory graph","parameters":{"type":"object","properties":{"message":{"type":"string","description":"The content/text to add to memory"}},"required":["message"],"additionalProperties":false}}}],"tool_choice":"auto","stream":true,"stream_options":{"include_usage":true}},"isRetryable":true},{"name":"AI_APICallError","cause":{"name":"ConnectTimeoutError","code":"UND_ERR_CONNECT_TIMEOUT"},"url":"https://api.openai.com/v1/chat/completions","requestBodyValues":{"model":"gpt-4.1-2025-04-14","temperature":1,"messages":[{"role":"system","content":"\nYou are a helpful AI assistant with access to user memory. Your primary capabilities are:\n\n1. **Memory-First Approach**: Always check user memory first to understand context and previous interactions\n2. **Memory Management**: Help users store, retrieve, and organize information in their memory\n3. **Contextual Assistance**: Use memory to provide personalized and contextual responses\n\n\n- workpsaceId: 2524b89e-6cbd-4e0c-90e3-ec21134553b9\n- todayDate: 2025-07-08T14:35:24.227Z\n\n\n\n- Always check memory FIRST using core--search_memory before any other actions\n- Consider this your highest priority for EVERY interaction - as essential as breathing\n- Make memory checking your first tool call before any other operations\n\nQUERY FORMATION:\n- Write specific factual statements as queries (e.g., \"user email address\" not \"what is the user's email?\")\n- Create multiple targeted memory queries for complex requests\n\nKEY QUERY AREAS:\n- Personal context: user name, location, identity, work context\n- Project context: repositories, codebases, current work, team members\n- Task context: recent tasks, ongoing projects, deadlines, priorities\n- Integration context: GitHub repos, Slack channels, Linear projects, connected services\n- Communication patterns: email preferences, notification settings, workflow automation\n- Technical context: coding languages, frameworks, development environment\n- Collaboration context: team members, project stakeholders, meeting patterns\n- Preferences: likes, dislikes, communication style, tool preferences\n- History: previous discussions, past requests, completed work, recurring issues\n- Automation rules: user-defined workflows, triggers, automation preferences\n\nMEMORY USAGE:\n- Execute multiple memory queries in parallel rather than sequentially\n- Batch related memory queries when possible\n- Prioritize recent information over older memories\n- Create comprehensive context-aware queries based on user message/activity content\n- Extract and query SEMANTIC CONTENT, not just structural metadata\n- Parse titles, descriptions, and content for actual subject matter keywords\n- Search internal SOL tasks/conversations that may relate to the same topics\n- Query ALL relatable concepts, not just direct keywords or IDs\n- Search for similar past situations, patterns, and related work\n- Include synonyms, related terms, and contextual concepts in queries \n- Query user's historical approach to similar requests or activities\n- Search for connected projects, tasks, conversations, and collaborations\n- Retrieve workflow patterns and past decision-making context\n- Query broader domain context beyond immediate request scope\n- Remember: SOL tracks work that external tools don't - search internal content thoroughly\n- Blend memory insights naturally into responses\n- Verify you've checked relevant memory before finalizing ANY response\n\nIf memory access is unavailable, rely only on the current conversation or ask user\n\n\n\nYou have tools at your disposal to assist users:\n\nCORE PRINCIPLES:\n- Use tools only when necessary for the task at hand\n- Always check memory FIRST before making other tool calls\n- Execute multiple operations in parallel whenever possible\n- Use sequential calls only when output of one is required for input of another\n\nPARAMETER HANDLING:\n- Follow tool schemas exactly with all required parameters\n- Only use values that are:\n • Explicitly provided by the user (use EXACTLY as given)\n • Reasonably inferred from context\n • Retrieved from memory or prior tool calls\n- Never make up values for required parameters\n- Omit optional parameters unless clearly needed\n- Analyze user's descriptive terms for parameter clues\n\nTOOL SELECTION:\n- Never call tools not provided in this conversation\n- Skip tool calls for general questions you can answer directly\n- For identical operations on multiple items, use parallel tool calls\n- Default to parallel execution (3-5× faster than sequential calls)\n- You can always access external service tools by loading them with load_mcp first\n\nTOOL MENTION HANDLING:\nWhen user message contains :\n- Extract tool_name from data-id attribute\n- First check if it's a built-in tool; if not, check EXTERNAL SERVICES TOOLS\n- If available: Load it with load_mcp and focus on addressing the request with this tool\n- If unavailable: Inform user and suggest alternatives if possible\n- For multiple tool mentions: Load all applicable tools in a single load_mcp call\n\nERROR HANDLING:\n- If a tool returns an error, try fixing parameters before retrying\n- If you can't resolve an error, explain the issue to the user\n- Consider alternative tools when primary tools are unavailable\n\n\n\nUse EXACTLY ONE of these formats for all user-facing communication:\n\nPROGRESS UPDATES - During processing:\n- Use the core--progress_update tool to keep users informed\n- Update users about what you're discovering or doing next\n- Keep messages clear and user-friendly\n- Avoid technical jargon\n\nQUESTIONS - When you need information:\n\n

              [Your question with HTML formatting]

              \n
              \n\n- Ask questions only when you cannot find information through memory or tools\n- Be specific about what you need to know\n- Provide context for why you're asking\n\nFINAL ANSWERS - When completing tasks:\n\n

              [Your answer with HTML formatting]

              \n
              \n\nCRITICAL:\n- Use ONE format per turn\n- Apply proper HTML formatting (

              ,

              ,

              ,

                ,
              • , etc.)\n- Never mix communication formats\n- Keep responses clear and helpful\n\n"},{"role":"user","content":"\nHere is the user message:\n\n<p>Hello</p>\n\n"},{"role":"system","content":"Your last response was not in a valid format. You must respond with EXACTLY ONE of the required formats: either a tool call, tags, or tags. Please reformat your previous response using the correct format:\n\n"}],"tools":[{"type":"function","function":{"name":"core--progress_update","description":"Send a progress update to the user about what has been discovered or will be done next in a crisp and user friendly way no technical terms","parameters":{"type":"object","properties":{"message":{"type":"string","description":"The progress update message to send to the user"}},"required":["message"],"additionalProperties":false}}},{"type":"function","function":{"name":"core--search_memory","description":"Search the user's memory graph for episodes or statements based on a query","parameters":{"type":"object","properties":{"query":{"type":"string","description":"The search query in third person perspective"},"validAt":{"type":"string","description":"The valid at time in ISO format"},"startTime":{"type":"string","description":"The start time in ISO format"},"endTime":{"type":"string","description":"The end time in ISO format"}},"required":["query"],"additionalProperties":false}}},{"type":"function","function":{"name":"core--add_memory","description":"Add information to the user's memory graph","parameters":{"type":"object","properties":{"message":{"type":"string","description":"The content/text to add to memory"}},"required":["message"],"additionalProperties":false}}}],"tool_choice":"auto","stream":true,"stream_options":{"include_usage":true}},"isRetryable":true}],"lastError":{"name":"AI_APICallError","cause":{"name":"ConnectTimeoutError","code":"UND_ERR_CONNECT_TIMEOUT"},"url":"https://api.openai.com/v1/chat/completions","requestBodyValues":{"model":"gpt-4.1-2025-04-14","temperature":1,"messages":[{"role":"system","content":"\nYou are a helpful AI assistant with access to user memory. Your primary capabilities are:\n\n1. **Memory-First Approach**: Always check user memory first to understand context and previous interactions\n2. **Memory Management**: Help users store, retrieve, and organize information in their memory\n3. **Contextual Assistance**: Use memory to provide personalized and contextual responses\n\n\n- workpsaceId: 2524b89e-6cbd-4e0c-90e3-ec21134553b9\n- todayDate: 2025-07-08T14:35:24.227Z\n\n\n\n- Always check memory FIRST using core--search_memory before any other actions\n- Consider this your highest priority for EVERY interaction - as essential as breathing\n- Make memory checking your first tool call before any other operations\n\nQUERY FORMATION:\n- Write specific factual statements as queries (e.g., \"user email address\" not \"what is the user's email?\")\n- Create multiple targeted memory queries for complex requests\n\nKEY QUERY AREAS:\n- Personal context: user name, location, identity, work context\n- Project context: repositories, codebases, current work, team members\n- Task context: recent tasks, ongoing projects, deadlines, priorities\n- Integration context: GitHub repos, Slack channels, Linear projects, connected services\n- Communication patterns: email preferences, notification settings, workflow automation\n- Technical context: coding languages, frameworks, development environment\n- Collaboration context: team members, project stakeholders, meeting patterns\n- Preferences: likes, dislikes, communication style, tool preferences\n- History: previous discussions, past requests, completed work, recurring issues\n- Automation rules: user-defined workflows, triggers, automation preferences\n\nMEMORY USAGE:\n- Execute multiple memory queries in parallel rather than sequentially\n- Batch related memory queries when possible\n- Prioritize recent information over older memories\n- Create comprehensive context-aware queries based on user message/activity content\n- Extract and query SEMANTIC CONTENT, not just structural metadata\n- Parse titles, descriptions, and content for actual subject matter keywords\n- Search internal SOL tasks/conversations that may relate to the same topics\n- Query ALL relatable concepts, not just direct keywords or IDs\n- Search for similar past situations, patterns, and related work\n- Include synonyms, related terms, and contextual concepts in queries \n- Query user's historical approach to similar requests or activities\n- Search for connected projects, tasks, conversations, and collaborations\n- Retrieve workflow patterns and past decision-making context\n- Query broader domain context beyond immediate request scope\n- Remember: SOL tracks work that external tools don't - search internal content thoroughly\n- Blend memory insights naturally into responses\n- Verify you've checked relevant memory before finalizing ANY response\n\nIf memory access is unavailable, rely only on the current conversation or ask user\n\n\n\nYou have tools at your disposal to assist users:\n\nCORE PRINCIPLES:\n- Use tools only when necessary for the task at hand\n- Always check memory FIRST before making other tool calls\n- Execute multiple operations in parallel whenever possible\n- Use sequential calls only when output of one is required for input of another\n\nPARAMETER HANDLING:\n- Follow tool schemas exactly with all required parameters\n- Only use values that are:\n • Explicitly provided by the user (use EXACTLY as given)\n • Reasonably inferred from context\n • Retrieved from memory or prior tool calls\n- Never make up values for required parameters\n- Omit optional parameters unless clearly needed\n- Analyze user's descriptive terms for parameter clues\n\nTOOL SELECTION:\n- Never call tools not provided in this conversation\n- Skip tool calls for general questions you can answer directly\n- For identical operations on multiple items, use parallel tool calls\n- Default to parallel execution (3-5× faster than sequential calls)\n- You can always access external service tools by loading them with load_mcp first\n\nTOOL MENTION HANDLING:\nWhen user message contains :\n- Extract tool_name from data-id attribute\n- First check if it's a built-in tool; if not, check EXTERNAL SERVICES TOOLS\n- If available: Load it with load_mcp and focus on addressing the request with this tool\n- If unavailable: Inform user and suggest alternatives if possible\n- For multiple tool mentions: Load all applicable tools in a single load_mcp call\n\nERROR HANDLING:\n- If a tool returns an error, try fixing parameters before retrying\n- If you can't resolve an error, explain the issue to the user\n- Consider alternative tools when primary tools are unavailable\n\n\n\nUse EXACTLY ONE of these formats for all user-facing communication:\n\nPROGRESS UPDATES - During processing:\n- Use the core--progress_update tool to keep users informed\n- Update users about what you're discovering or doing next\n- Keep messages clear and user-friendly\n- Avoid technical jargon\n\nQUESTIONS - When you need information:\n\n

                [Your question with HTML formatting]

                \n
                \n\n- Ask questions only when you cannot find information through memory or tools\n- Be specific about what you need to know\n- Provide context for why you're asking\n\nFINAL ANSWERS - When completing tasks:\n\n

                [Your answer with HTML formatting]

                \n
                \n\nCRITICAL:\n- Use ONE format per turn\n- Apply proper HTML formatting (

                ,

                ,

                ,

                  ,
                • , etc.)\n- Never mix communication formats\n- Keep responses clear and helpful\n\n"},{"role":"user","content":"\nHere is the user message:\n\n<p>Hello</p>\n\n"},{"role":"system","content":"Your last response was not in a valid format. You must respond with EXACTLY ONE of the required formats: either a tool call, tags, or tags. Please reformat your previous response using the correct format:\n\n"}],"tools":[{"type":"function","function":{"name":"core--progress_update","description":"Send a progress update to the user about what has been discovered or will be done next in a crisp and user friendly way no technical terms","parameters":{"type":"object","properties":{"message":{"type":"string","description":"The progress update message to send to the user"}},"required":["message"],"additionalProperties":false}}},{"type":"function","function":{"name":"core--search_memory","description":"Search the user's memory graph for episodes or statements based on a query","parameters":{"type":"object","properties":{"query":{"type":"string","description":"The search query in third person perspective"},"validAt":{"type":"string","description":"The valid at time in ISO format"},"startTime":{"type":"string","description":"The start time in ISO format"},"endTime":{"type":"string","description":"The end time in ISO format"}},"required":["query"],"additionalProperties":false}}},{"type":"function","function":{"name":"core--add_memory","description":"Add information to the user's memory graph","parameters":{"type":"object","properties":{"message":{"type":"string","description":"The content/text to add to memory"}},"required":["message"],"additionalProperties":false}}}],"tool_choice":"auto","stream":true,"stream_options":{"include_usage":true}},"isRetryable":true}}} \ No newline at end of file diff --git a/apps/logs/errors/llm-error-2025-07-08T14-36-35.479Z.json b/apps/logs/errors/llm-error-2025-07-08T14-36-35.479Z.json new file mode 100644 index 0000000..6da54b5 --- /dev/null +++ b/apps/logs/errors/llm-error-2025-07-08T14-36-35.479Z.json @@ -0,0 +1 @@ +{"timestamp":"2025-07-08T14:36:35.479Z","error":{"name":"AI_RetryError","reason":"maxRetriesExceeded","errors":[{"name":"AI_APICallError","cause":{"name":"ConnectTimeoutError","code":"UND_ERR_CONNECT_TIMEOUT"},"url":"https://api.openai.com/v1/chat/completions","requestBodyValues":{"model":"gpt-4.1-2025-04-14","temperature":1,"messages":[{"role":"system","content":"\nYou are a helpful AI assistant with access to user memory. Your primary capabilities are:\n\n1. **Memory-First Approach**: Always check user memory first to understand context and previous interactions\n2. **Memory Management**: Help users store, retrieve, and organize information in their memory\n3. **Contextual Assistance**: Use memory to provide personalized and contextual responses\n\n\n- workpsaceId: 2524b89e-6cbd-4e0c-90e3-ec21134553b9\n- todayDate: 2025-07-08T14:35:24.227Z\n\n\n\n- Always check memory FIRST using core--search_memory before any other actions\n- Consider this your highest priority for EVERY interaction - as essential as breathing\n- Make memory checking your first tool call before any other operations\n\nQUERY FORMATION:\n- Write specific factual statements as queries (e.g., \"user email address\" not \"what is the user's email?\")\n- Create multiple targeted memory queries for complex requests\n\nKEY QUERY AREAS:\n- Personal context: user name, location, identity, work context\n- Project context: repositories, codebases, current work, team members\n- Task context: recent tasks, ongoing projects, deadlines, priorities\n- Integration context: GitHub repos, Slack channels, Linear projects, connected services\n- Communication patterns: email preferences, notification settings, workflow automation\n- Technical context: coding languages, frameworks, development environment\n- Collaboration context: team members, project stakeholders, meeting patterns\n- Preferences: likes, dislikes, communication style, tool preferences\n- History: previous discussions, past requests, completed work, recurring issues\n- Automation rules: user-defined workflows, triggers, automation preferences\n\nMEMORY USAGE:\n- Execute multiple memory queries in parallel rather than sequentially\n- Batch related memory queries when possible\n- Prioritize recent information over older memories\n- Create comprehensive context-aware queries based on user message/activity content\n- Extract and query SEMANTIC CONTENT, not just structural metadata\n- Parse titles, descriptions, and content for actual subject matter keywords\n- Search internal SOL tasks/conversations that may relate to the same topics\n- Query ALL relatable concepts, not just direct keywords or IDs\n- Search for similar past situations, patterns, and related work\n- Include synonyms, related terms, and contextual concepts in queries \n- Query user's historical approach to similar requests or activities\n- Search for connected projects, tasks, conversations, and collaborations\n- Retrieve workflow patterns and past decision-making context\n- Query broader domain context beyond immediate request scope\n- Remember: SOL tracks work that external tools don't - search internal content thoroughly\n- Blend memory insights naturally into responses\n- Verify you've checked relevant memory before finalizing ANY response\n\nIf memory access is unavailable, rely only on the current conversation or ask user\n\n\n\nYou have tools at your disposal to assist users:\n\nCORE PRINCIPLES:\n- Use tools only when necessary for the task at hand\n- Always check memory FIRST before making other tool calls\n- Execute multiple operations in parallel whenever possible\n- Use sequential calls only when output of one is required for input of another\n\nPARAMETER HANDLING:\n- Follow tool schemas exactly with all required parameters\n- Only use values that are:\n • Explicitly provided by the user (use EXACTLY as given)\n • Reasonably inferred from context\n • Retrieved from memory or prior tool calls\n- Never make up values for required parameters\n- Omit optional parameters unless clearly needed\n- Analyze user's descriptive terms for parameter clues\n\nTOOL SELECTION:\n- Never call tools not provided in this conversation\n- Skip tool calls for general questions you can answer directly\n- For identical operations on multiple items, use parallel tool calls\n- Default to parallel execution (3-5× faster than sequential calls)\n- You can always access external service tools by loading them with load_mcp first\n\nTOOL MENTION HANDLING:\nWhen user message contains :\n- Extract tool_name from data-id attribute\n- First check if it's a built-in tool; if not, check EXTERNAL SERVICES TOOLS\n- If available: Load it with load_mcp and focus on addressing the request with this tool\n- If unavailable: Inform user and suggest alternatives if possible\n- For multiple tool mentions: Load all applicable tools in a single load_mcp call\n\nERROR HANDLING:\n- If a tool returns an error, try fixing parameters before retrying\n- If you can't resolve an error, explain the issue to the user\n- Consider alternative tools when primary tools are unavailable\n\n\n\nUse EXACTLY ONE of these formats for all user-facing communication:\n\nPROGRESS UPDATES - During processing:\n- Use the core--progress_update tool to keep users informed\n- Update users about what you're discovering or doing next\n- Keep messages clear and user-friendly\n- Avoid technical jargon\n\nQUESTIONS - When you need information:\n\n

                  [Your question with HTML formatting]

                  \n
                  \n\n- Ask questions only when you cannot find information through memory or tools\n- Be specific about what you need to know\n- Provide context for why you're asking\n\nFINAL ANSWERS - When completing tasks:\n\n

                  [Your answer with HTML formatting]

                  \n
                  \n\nCRITICAL:\n- Use ONE format per turn\n- Apply proper HTML formatting (

                  ,

                  ,

                  ,

                    ,
                  • , etc.)\n- Never mix communication formats\n- Keep responses clear and helpful\n\n"},{"role":"user","content":"\nHere is the user message:\n\n<p>Hello</p>\n\n"},{"role":"system","content":"Your last response was not in a valid format. You must respond with EXACTLY ONE of the required formats: either a tool call, tags, or tags. Please reformat your previous response using the correct format:\n\n"},{"role":"system","content":"Your last response was not in a valid format. You must respond with EXACTLY ONE of the required formats: either a tool call, tags, or tags. Please reformat your previous response using the correct format:\n\n"}],"tools":[{"type":"function","function":{"name":"core--progress_update","description":"Send a progress update to the user about what has been discovered or will be done next in a crisp and user friendly way no technical terms","parameters":{"type":"object","properties":{"message":{"type":"string","description":"The progress update message to send to the user"}},"required":["message"],"additionalProperties":false}}},{"type":"function","function":{"name":"core--search_memory","description":"Search the user's memory graph for episodes or statements based on a query","parameters":{"type":"object","properties":{"query":{"type":"string","description":"The search query in third person perspective"},"validAt":{"type":"string","description":"The valid at time in ISO format"},"startTime":{"type":"string","description":"The start time in ISO format"},"endTime":{"type":"string","description":"The end time in ISO format"}},"required":["query"],"additionalProperties":false}}},{"type":"function","function":{"name":"core--add_memory","description":"Add information to the user's memory graph","parameters":{"type":"object","properties":{"message":{"type":"string","description":"The content/text to add to memory"}},"required":["message"],"additionalProperties":false}}}],"tool_choice":"auto","stream":true,"stream_options":{"include_usage":true}},"isRetryable":true},{"name":"AI_APICallError","cause":{"name":"ConnectTimeoutError","code":"UND_ERR_CONNECT_TIMEOUT"},"url":"https://api.openai.com/v1/chat/completions","requestBodyValues":{"model":"gpt-4.1-2025-04-14","temperature":1,"messages":[{"role":"system","content":"\nYou are a helpful AI assistant with access to user memory. Your primary capabilities are:\n\n1. **Memory-First Approach**: Always check user memory first to understand context and previous interactions\n2. **Memory Management**: Help users store, retrieve, and organize information in their memory\n3. **Contextual Assistance**: Use memory to provide personalized and contextual responses\n\n\n- workpsaceId: 2524b89e-6cbd-4e0c-90e3-ec21134553b9\n- todayDate: 2025-07-08T14:35:24.227Z\n\n\n\n- Always check memory FIRST using core--search_memory before any other actions\n- Consider this your highest priority for EVERY interaction - as essential as breathing\n- Make memory checking your first tool call before any other operations\n\nQUERY FORMATION:\n- Write specific factual statements as queries (e.g., \"user email address\" not \"what is the user's email?\")\n- Create multiple targeted memory queries for complex requests\n\nKEY QUERY AREAS:\n- Personal context: user name, location, identity, work context\n- Project context: repositories, codebases, current work, team members\n- Task context: recent tasks, ongoing projects, deadlines, priorities\n- Integration context: GitHub repos, Slack channels, Linear projects, connected services\n- Communication patterns: email preferences, notification settings, workflow automation\n- Technical context: coding languages, frameworks, development environment\n- Collaboration context: team members, project stakeholders, meeting patterns\n- Preferences: likes, dislikes, communication style, tool preferences\n- History: previous discussions, past requests, completed work, recurring issues\n- Automation rules: user-defined workflows, triggers, automation preferences\n\nMEMORY USAGE:\n- Execute multiple memory queries in parallel rather than sequentially\n- Batch related memory queries when possible\n- Prioritize recent information over older memories\n- Create comprehensive context-aware queries based on user message/activity content\n- Extract and query SEMANTIC CONTENT, not just structural metadata\n- Parse titles, descriptions, and content for actual subject matter keywords\n- Search internal SOL tasks/conversations that may relate to the same topics\n- Query ALL relatable concepts, not just direct keywords or IDs\n- Search for similar past situations, patterns, and related work\n- Include synonyms, related terms, and contextual concepts in queries \n- Query user's historical approach to similar requests or activities\n- Search for connected projects, tasks, conversations, and collaborations\n- Retrieve workflow patterns and past decision-making context\n- Query broader domain context beyond immediate request scope\n- Remember: SOL tracks work that external tools don't - search internal content thoroughly\n- Blend memory insights naturally into responses\n- Verify you've checked relevant memory before finalizing ANY response\n\nIf memory access is unavailable, rely only on the current conversation or ask user\n\n\n\nYou have tools at your disposal to assist users:\n\nCORE PRINCIPLES:\n- Use tools only when necessary for the task at hand\n- Always check memory FIRST before making other tool calls\n- Execute multiple operations in parallel whenever possible\n- Use sequential calls only when output of one is required for input of another\n\nPARAMETER HANDLING:\n- Follow tool schemas exactly with all required parameters\n- Only use values that are:\n • Explicitly provided by the user (use EXACTLY as given)\n • Reasonably inferred from context\n • Retrieved from memory or prior tool calls\n- Never make up values for required parameters\n- Omit optional parameters unless clearly needed\n- Analyze user's descriptive terms for parameter clues\n\nTOOL SELECTION:\n- Never call tools not provided in this conversation\n- Skip tool calls for general questions you can answer directly\n- For identical operations on multiple items, use parallel tool calls\n- Default to parallel execution (3-5× faster than sequential calls)\n- You can always access external service tools by loading them with load_mcp first\n\nTOOL MENTION HANDLING:\nWhen user message contains :\n- Extract tool_name from data-id attribute\n- First check if it's a built-in tool; if not, check EXTERNAL SERVICES TOOLS\n- If available: Load it with load_mcp and focus on addressing the request with this tool\n- If unavailable: Inform user and suggest alternatives if possible\n- For multiple tool mentions: Load all applicable tools in a single load_mcp call\n\nERROR HANDLING:\n- If a tool returns an error, try fixing parameters before retrying\n- If you can't resolve an error, explain the issue to the user\n- Consider alternative tools when primary tools are unavailable\n\n\n\nUse EXACTLY ONE of these formats for all user-facing communication:\n\nPROGRESS UPDATES - During processing:\n- Use the core--progress_update tool to keep users informed\n- Update users about what you're discovering or doing next\n- Keep messages clear and user-friendly\n- Avoid technical jargon\n\nQUESTIONS - When you need information:\n\n

                    [Your question with HTML formatting]

                    \n
                    \n\n- Ask questions only when you cannot find information through memory or tools\n- Be specific about what you need to know\n- Provide context for why you're asking\n\nFINAL ANSWERS - When completing tasks:\n\n

                    [Your answer with HTML formatting]

                    \n
                    \n\nCRITICAL:\n- Use ONE format per turn\n- Apply proper HTML formatting (

                    ,

                    ,

                    ,

                      ,
                    • , etc.)\n- Never mix communication formats\n- Keep responses clear and helpful\n\n"},{"role":"user","content":"\nHere is the user message:\n\n<p>Hello</p>\n\n"},{"role":"system","content":"Your last response was not in a valid format. You must respond with EXACTLY ONE of the required formats: either a tool call, tags, or tags. Please reformat your previous response using the correct format:\n\n"},{"role":"system","content":"Your last response was not in a valid format. You must respond with EXACTLY ONE of the required formats: either a tool call, tags, or tags. Please reformat your previous response using the correct format:\n\n"}],"tools":[{"type":"function","function":{"name":"core--progress_update","description":"Send a progress update to the user about what has been discovered or will be done next in a crisp and user friendly way no technical terms","parameters":{"type":"object","properties":{"message":{"type":"string","description":"The progress update message to send to the user"}},"required":["message"],"additionalProperties":false}}},{"type":"function","function":{"name":"core--search_memory","description":"Search the user's memory graph for episodes or statements based on a query","parameters":{"type":"object","properties":{"query":{"type":"string","description":"The search query in third person perspective"},"validAt":{"type":"string","description":"The valid at time in ISO format"},"startTime":{"type":"string","description":"The start time in ISO format"},"endTime":{"type":"string","description":"The end time in ISO format"}},"required":["query"],"additionalProperties":false}}},{"type":"function","function":{"name":"core--add_memory","description":"Add information to the user's memory graph","parameters":{"type":"object","properties":{"message":{"type":"string","description":"The content/text to add to memory"}},"required":["message"],"additionalProperties":false}}}],"tool_choice":"auto","stream":true,"stream_options":{"include_usage":true}},"isRetryable":true},{"name":"AI_APICallError","cause":{"name":"ConnectTimeoutError","code":"UND_ERR_CONNECT_TIMEOUT"},"url":"https://api.openai.com/v1/chat/completions","requestBodyValues":{"model":"gpt-4.1-2025-04-14","temperature":1,"messages":[{"role":"system","content":"\nYou are a helpful AI assistant with access to user memory. Your primary capabilities are:\n\n1. **Memory-First Approach**: Always check user memory first to understand context and previous interactions\n2. **Memory Management**: Help users store, retrieve, and organize information in their memory\n3. **Contextual Assistance**: Use memory to provide personalized and contextual responses\n\n\n- workpsaceId: 2524b89e-6cbd-4e0c-90e3-ec21134553b9\n- todayDate: 2025-07-08T14:35:24.227Z\n\n\n\n- Always check memory FIRST using core--search_memory before any other actions\n- Consider this your highest priority for EVERY interaction - as essential as breathing\n- Make memory checking your first tool call before any other operations\n\nQUERY FORMATION:\n- Write specific factual statements as queries (e.g., \"user email address\" not \"what is the user's email?\")\n- Create multiple targeted memory queries for complex requests\n\nKEY QUERY AREAS:\n- Personal context: user name, location, identity, work context\n- Project context: repositories, codebases, current work, team members\n- Task context: recent tasks, ongoing projects, deadlines, priorities\n- Integration context: GitHub repos, Slack channels, Linear projects, connected services\n- Communication patterns: email preferences, notification settings, workflow automation\n- Technical context: coding languages, frameworks, development environment\n- Collaboration context: team members, project stakeholders, meeting patterns\n- Preferences: likes, dislikes, communication style, tool preferences\n- History: previous discussions, past requests, completed work, recurring issues\n- Automation rules: user-defined workflows, triggers, automation preferences\n\nMEMORY USAGE:\n- Execute multiple memory queries in parallel rather than sequentially\n- Batch related memory queries when possible\n- Prioritize recent information over older memories\n- Create comprehensive context-aware queries based on user message/activity content\n- Extract and query SEMANTIC CONTENT, not just structural metadata\n- Parse titles, descriptions, and content for actual subject matter keywords\n- Search internal SOL tasks/conversations that may relate to the same topics\n- Query ALL relatable concepts, not just direct keywords or IDs\n- Search for similar past situations, patterns, and related work\n- Include synonyms, related terms, and contextual concepts in queries \n- Query user's historical approach to similar requests or activities\n- Search for connected projects, tasks, conversations, and collaborations\n- Retrieve workflow patterns and past decision-making context\n- Query broader domain context beyond immediate request scope\n- Remember: SOL tracks work that external tools don't - search internal content thoroughly\n- Blend memory insights naturally into responses\n- Verify you've checked relevant memory before finalizing ANY response\n\nIf memory access is unavailable, rely only on the current conversation or ask user\n\n\n\nYou have tools at your disposal to assist users:\n\nCORE PRINCIPLES:\n- Use tools only when necessary for the task at hand\n- Always check memory FIRST before making other tool calls\n- Execute multiple operations in parallel whenever possible\n- Use sequential calls only when output of one is required for input of another\n\nPARAMETER HANDLING:\n- Follow tool schemas exactly with all required parameters\n- Only use values that are:\n • Explicitly provided by the user (use EXACTLY as given)\n • Reasonably inferred from context\n • Retrieved from memory or prior tool calls\n- Never make up values for required parameters\n- Omit optional parameters unless clearly needed\n- Analyze user's descriptive terms for parameter clues\n\nTOOL SELECTION:\n- Never call tools not provided in this conversation\n- Skip tool calls for general questions you can answer directly\n- For identical operations on multiple items, use parallel tool calls\n- Default to parallel execution (3-5× faster than sequential calls)\n- You can always access external service tools by loading them with load_mcp first\n\nTOOL MENTION HANDLING:\nWhen user message contains :\n- Extract tool_name from data-id attribute\n- First check if it's a built-in tool; if not, check EXTERNAL SERVICES TOOLS\n- If available: Load it with load_mcp and focus on addressing the request with this tool\n- If unavailable: Inform user and suggest alternatives if possible\n- For multiple tool mentions: Load all applicable tools in a single load_mcp call\n\nERROR HANDLING:\n- If a tool returns an error, try fixing parameters before retrying\n- If you can't resolve an error, explain the issue to the user\n- Consider alternative tools when primary tools are unavailable\n\n\n\nUse EXACTLY ONE of these formats for all user-facing communication:\n\nPROGRESS UPDATES - During processing:\n- Use the core--progress_update tool to keep users informed\n- Update users about what you're discovering or doing next\n- Keep messages clear and user-friendly\n- Avoid technical jargon\n\nQUESTIONS - When you need information:\n\n

                      [Your question with HTML formatting]

                      \n
                      \n\n- Ask questions only when you cannot find information through memory or tools\n- Be specific about what you need to know\n- Provide context for why you're asking\n\nFINAL ANSWERS - When completing tasks:\n\n

                      [Your answer with HTML formatting]

                      \n
                      \n\nCRITICAL:\n- Use ONE format per turn\n- Apply proper HTML formatting (

                      ,

                      ,

                      ,

                        ,
                      • , etc.)\n- Never mix communication formats\n- Keep responses clear and helpful\n\n"},{"role":"user","content":"\nHere is the user message:\n\n<p>Hello</p>\n\n"},{"role":"system","content":"Your last response was not in a valid format. You must respond with EXACTLY ONE of the required formats: either a tool call, tags, or tags. Please reformat your previous response using the correct format:\n\n"},{"role":"system","content":"Your last response was not in a valid format. You must respond with EXACTLY ONE of the required formats: either a tool call, tags, or tags. Please reformat your previous response using the correct format:\n\n"}],"tools":[{"type":"function","function":{"name":"core--progress_update","description":"Send a progress update to the user about what has been discovered or will be done next in a crisp and user friendly way no technical terms","parameters":{"type":"object","properties":{"message":{"type":"string","description":"The progress update message to send to the user"}},"required":["message"],"additionalProperties":false}}},{"type":"function","function":{"name":"core--search_memory","description":"Search the user's memory graph for episodes or statements based on a query","parameters":{"type":"object","properties":{"query":{"type":"string","description":"The search query in third person perspective"},"validAt":{"type":"string","description":"The valid at time in ISO format"},"startTime":{"type":"string","description":"The start time in ISO format"},"endTime":{"type":"string","description":"The end time in ISO format"}},"required":["query"],"additionalProperties":false}}},{"type":"function","function":{"name":"core--add_memory","description":"Add information to the user's memory graph","parameters":{"type":"object","properties":{"message":{"type":"string","description":"The content/text to add to memory"}},"required":["message"],"additionalProperties":false}}}],"tool_choice":"auto","stream":true,"stream_options":{"include_usage":true}},"isRetryable":true}],"lastError":{"name":"AI_APICallError","cause":{"name":"ConnectTimeoutError","code":"UND_ERR_CONNECT_TIMEOUT"},"url":"https://api.openai.com/v1/chat/completions","requestBodyValues":{"model":"gpt-4.1-2025-04-14","temperature":1,"messages":[{"role":"system","content":"\nYou are a helpful AI assistant with access to user memory. Your primary capabilities are:\n\n1. **Memory-First Approach**: Always check user memory first to understand context and previous interactions\n2. **Memory Management**: Help users store, retrieve, and organize information in their memory\n3. **Contextual Assistance**: Use memory to provide personalized and contextual responses\n\n\n- workpsaceId: 2524b89e-6cbd-4e0c-90e3-ec21134553b9\n- todayDate: 2025-07-08T14:35:24.227Z\n\n\n\n- Always check memory FIRST using core--search_memory before any other actions\n- Consider this your highest priority for EVERY interaction - as essential as breathing\n- Make memory checking your first tool call before any other operations\n\nQUERY FORMATION:\n- Write specific factual statements as queries (e.g., \"user email address\" not \"what is the user's email?\")\n- Create multiple targeted memory queries for complex requests\n\nKEY QUERY AREAS:\n- Personal context: user name, location, identity, work context\n- Project context: repositories, codebases, current work, team members\n- Task context: recent tasks, ongoing projects, deadlines, priorities\n- Integration context: GitHub repos, Slack channels, Linear projects, connected services\n- Communication patterns: email preferences, notification settings, workflow automation\n- Technical context: coding languages, frameworks, development environment\n- Collaboration context: team members, project stakeholders, meeting patterns\n- Preferences: likes, dislikes, communication style, tool preferences\n- History: previous discussions, past requests, completed work, recurring issues\n- Automation rules: user-defined workflows, triggers, automation preferences\n\nMEMORY USAGE:\n- Execute multiple memory queries in parallel rather than sequentially\n- Batch related memory queries when possible\n- Prioritize recent information over older memories\n- Create comprehensive context-aware queries based on user message/activity content\n- Extract and query SEMANTIC CONTENT, not just structural metadata\n- Parse titles, descriptions, and content for actual subject matter keywords\n- Search internal SOL tasks/conversations that may relate to the same topics\n- Query ALL relatable concepts, not just direct keywords or IDs\n- Search for similar past situations, patterns, and related work\n- Include synonyms, related terms, and contextual concepts in queries \n- Query user's historical approach to similar requests or activities\n- Search for connected projects, tasks, conversations, and collaborations\n- Retrieve workflow patterns and past decision-making context\n- Query broader domain context beyond immediate request scope\n- Remember: SOL tracks work that external tools don't - search internal content thoroughly\n- Blend memory insights naturally into responses\n- Verify you've checked relevant memory before finalizing ANY response\n\nIf memory access is unavailable, rely only on the current conversation or ask user\n\n\n\nYou have tools at your disposal to assist users:\n\nCORE PRINCIPLES:\n- Use tools only when necessary for the task at hand\n- Always check memory FIRST before making other tool calls\n- Execute multiple operations in parallel whenever possible\n- Use sequential calls only when output of one is required for input of another\n\nPARAMETER HANDLING:\n- Follow tool schemas exactly with all required parameters\n- Only use values that are:\n • Explicitly provided by the user (use EXACTLY as given)\n • Reasonably inferred from context\n • Retrieved from memory or prior tool calls\n- Never make up values for required parameters\n- Omit optional parameters unless clearly needed\n- Analyze user's descriptive terms for parameter clues\n\nTOOL SELECTION:\n- Never call tools not provided in this conversation\n- Skip tool calls for general questions you can answer directly\n- For identical operations on multiple items, use parallel tool calls\n- Default to parallel execution (3-5× faster than sequential calls)\n- You can always access external service tools by loading them with load_mcp first\n\nTOOL MENTION HANDLING:\nWhen user message contains :\n- Extract tool_name from data-id attribute\n- First check if it's a built-in tool; if not, check EXTERNAL SERVICES TOOLS\n- If available: Load it with load_mcp and focus on addressing the request with this tool\n- If unavailable: Inform user and suggest alternatives if possible\n- For multiple tool mentions: Load all applicable tools in a single load_mcp call\n\nERROR HANDLING:\n- If a tool returns an error, try fixing parameters before retrying\n- If you can't resolve an error, explain the issue to the user\n- Consider alternative tools when primary tools are unavailable\n\n\n\nUse EXACTLY ONE of these formats for all user-facing communication:\n\nPROGRESS UPDATES - During processing:\n- Use the core--progress_update tool to keep users informed\n- Update users about what you're discovering or doing next\n- Keep messages clear and user-friendly\n- Avoid technical jargon\n\nQUESTIONS - When you need information:\n\n

                        [Your question with HTML formatting]

                        \n
                        \n\n- Ask questions only when you cannot find information through memory or tools\n- Be specific about what you need to know\n- Provide context for why you're asking\n\nFINAL ANSWERS - When completing tasks:\n\n

                        [Your answer with HTML formatting]

                        \n
                        \n\nCRITICAL:\n- Use ONE format per turn\n- Apply proper HTML formatting (

                        ,

                        ,

                        ,

                          ,
                        • , etc.)\n- Never mix communication formats\n- Keep responses clear and helpful\n\n"},{"role":"user","content":"\nHere is the user message:\n\n<p>Hello</p>\n\n"},{"role":"system","content":"Your last response was not in a valid format. You must respond with EXACTLY ONE of the required formats: either a tool call, tags, or tags. Please reformat your previous response using the correct format:\n\n"},{"role":"system","content":"Your last response was not in a valid format. You must respond with EXACTLY ONE of the required formats: either a tool call, tags, or tags. Please reformat your previous response using the correct format:\n\n"}],"tools":[{"type":"function","function":{"name":"core--progress_update","description":"Send a progress update to the user about what has been discovered or will be done next in a crisp and user friendly way no technical terms","parameters":{"type":"object","properties":{"message":{"type":"string","description":"The progress update message to send to the user"}},"required":["message"],"additionalProperties":false}}},{"type":"function","function":{"name":"core--search_memory","description":"Search the user's memory graph for episodes or statements based on a query","parameters":{"type":"object","properties":{"query":{"type":"string","description":"The search query in third person perspective"},"validAt":{"type":"string","description":"The valid at time in ISO format"},"startTime":{"type":"string","description":"The start time in ISO format"},"endTime":{"type":"string","description":"The end time in ISO format"}},"required":["query"],"additionalProperties":false}}},{"type":"function","function":{"name":"core--add_memory","description":"Add information to the user's memory graph","parameters":{"type":"object","properties":{"message":{"type":"string","description":"The content/text to add to memory"}},"required":["message"],"additionalProperties":false}}}],"tool_choice":"auto","stream":true,"stream_options":{"include_usage":true}},"isRetryable":true}}} \ No newline at end of file diff --git a/apps/logs/errors/llm-error-2025-07-08T14-37-12.989Z.json b/apps/logs/errors/llm-error-2025-07-08T14-37-12.989Z.json new file mode 100644 index 0000000..4bb41e7 --- /dev/null +++ b/apps/logs/errors/llm-error-2025-07-08T14-37-12.989Z.json @@ -0,0 +1 @@ +{"timestamp":"2025-07-08T14:37:12.989Z","error":{"name":"AI_RetryError","reason":"maxRetriesExceeded","errors":[{"name":"AI_APICallError","cause":{"name":"ConnectTimeoutError","code":"UND_ERR_CONNECT_TIMEOUT"},"url":"https://api.openai.com/v1/chat/completions","requestBodyValues":{"model":"gpt-4.1-2025-04-14","temperature":1,"messages":[{"role":"system","content":"\nYou are a helpful AI assistant with access to user memory. Your primary capabilities are:\n\n1. **Memory-First Approach**: Always check user memory first to understand context and previous interactions\n2. **Memory Management**: Help users store, retrieve, and organize information in their memory\n3. **Contextual Assistance**: Use memory to provide personalized and contextual responses\n\n\n- workpsaceId: 2524b89e-6cbd-4e0c-90e3-ec21134553b9\n- todayDate: 2025-07-08T14:35:24.227Z\n\n\n\n- Always check memory FIRST using core--search_memory before any other actions\n- Consider this your highest priority for EVERY interaction - as essential as breathing\n- Make memory checking your first tool call before any other operations\n\nQUERY FORMATION:\n- Write specific factual statements as queries (e.g., \"user email address\" not \"what is the user's email?\")\n- Create multiple targeted memory queries for complex requests\n\nKEY QUERY AREAS:\n- Personal context: user name, location, identity, work context\n- Project context: repositories, codebases, current work, team members\n- Task context: recent tasks, ongoing projects, deadlines, priorities\n- Integration context: GitHub repos, Slack channels, Linear projects, connected services\n- Communication patterns: email preferences, notification settings, workflow automation\n- Technical context: coding languages, frameworks, development environment\n- Collaboration context: team members, project stakeholders, meeting patterns\n- Preferences: likes, dislikes, communication style, tool preferences\n- History: previous discussions, past requests, completed work, recurring issues\n- Automation rules: user-defined workflows, triggers, automation preferences\n\nMEMORY USAGE:\n- Execute multiple memory queries in parallel rather than sequentially\n- Batch related memory queries when possible\n- Prioritize recent information over older memories\n- Create comprehensive context-aware queries based on user message/activity content\n- Extract and query SEMANTIC CONTENT, not just structural metadata\n- Parse titles, descriptions, and content for actual subject matter keywords\n- Search internal SOL tasks/conversations that may relate to the same topics\n- Query ALL relatable concepts, not just direct keywords or IDs\n- Search for similar past situations, patterns, and related work\n- Include synonyms, related terms, and contextual concepts in queries \n- Query user's historical approach to similar requests or activities\n- Search for connected projects, tasks, conversations, and collaborations\n- Retrieve workflow patterns and past decision-making context\n- Query broader domain context beyond immediate request scope\n- Remember: SOL tracks work that external tools don't - search internal content thoroughly\n- Blend memory insights naturally into responses\n- Verify you've checked relevant memory before finalizing ANY response\n\nIf memory access is unavailable, rely only on the current conversation or ask user\n\n\n\nYou have tools at your disposal to assist users:\n\nCORE PRINCIPLES:\n- Use tools only when necessary for the task at hand\n- Always check memory FIRST before making other tool calls\n- Execute multiple operations in parallel whenever possible\n- Use sequential calls only when output of one is required for input of another\n\nPARAMETER HANDLING:\n- Follow tool schemas exactly with all required parameters\n- Only use values that are:\n • Explicitly provided by the user (use EXACTLY as given)\n • Reasonably inferred from context\n • Retrieved from memory or prior tool calls\n- Never make up values for required parameters\n- Omit optional parameters unless clearly needed\n- Analyze user's descriptive terms for parameter clues\n\nTOOL SELECTION:\n- Never call tools not provided in this conversation\n- Skip tool calls for general questions you can answer directly\n- For identical operations on multiple items, use parallel tool calls\n- Default to parallel execution (3-5× faster than sequential calls)\n- You can always access external service tools by loading them with load_mcp first\n\nTOOL MENTION HANDLING:\nWhen user message contains :\n- Extract tool_name from data-id attribute\n- First check if it's a built-in tool; if not, check EXTERNAL SERVICES TOOLS\n- If available: Load it with load_mcp and focus on addressing the request with this tool\n- If unavailable: Inform user and suggest alternatives if possible\n- For multiple tool mentions: Load all applicable tools in a single load_mcp call\n\nERROR HANDLING:\n- If a tool returns an error, try fixing parameters before retrying\n- If you can't resolve an error, explain the issue to the user\n- Consider alternative tools when primary tools are unavailable\n\n\n\nUse EXACTLY ONE of these formats for all user-facing communication:\n\nPROGRESS UPDATES - During processing:\n- Use the core--progress_update tool to keep users informed\n- Update users about what you're discovering or doing next\n- Keep messages clear and user-friendly\n- Avoid technical jargon\n\nQUESTIONS - When you need information:\n\n

                          [Your question with HTML formatting]

                          \n
                          \n\n- Ask questions only when you cannot find information through memory or tools\n- Be specific about what you need to know\n- Provide context for why you're asking\n\nFINAL ANSWERS - When completing tasks:\n\n

                          [Your answer with HTML formatting]

                          \n
                          \n\nCRITICAL:\n- Use ONE format per turn\n- Apply proper HTML formatting (

                          ,

                          ,

                          ,

                            ,
                          • , etc.)\n- Never mix communication formats\n- Keep responses clear and helpful\n\n"},{"role":"user","content":"\nHere is the user message:\n\n<p>Hello</p>\n\n"},{"role":"system","content":"Your last response was not in a valid format. You must respond with EXACTLY ONE of the required formats: either a tool call, tags, or tags. Please reformat your previous response using the correct format:\n\n"},{"role":"system","content":"Your last response was not in a valid format. You must respond with EXACTLY ONE of the required formats: either a tool call, tags, or tags. Please reformat your previous response using the correct format:\n\n"},{"role":"system","content":"Your last response was not in a valid format. You must respond with EXACTLY ONE of the required formats: either a tool call, tags, or tags. Please reformat your previous response using the correct format:\n\n"}],"tools":[{"type":"function","function":{"name":"core--progress_update","description":"Send a progress update to the user about what has been discovered or will be done next in a crisp and user friendly way no technical terms","parameters":{"type":"object","properties":{"message":{"type":"string","description":"The progress update message to send to the user"}},"required":["message"],"additionalProperties":false}}},{"type":"function","function":{"name":"core--search_memory","description":"Search the user's memory graph for episodes or statements based on a query","parameters":{"type":"object","properties":{"query":{"type":"string","description":"The search query in third person perspective"},"validAt":{"type":"string","description":"The valid at time in ISO format"},"startTime":{"type":"string","description":"The start time in ISO format"},"endTime":{"type":"string","description":"The end time in ISO format"}},"required":["query"],"additionalProperties":false}}},{"type":"function","function":{"name":"core--add_memory","description":"Add information to the user's memory graph","parameters":{"type":"object","properties":{"message":{"type":"string","description":"The content/text to add to memory"}},"required":["message"],"additionalProperties":false}}}],"tool_choice":{"type":"function","function":{"name":"core--progress_update"}},"stream":true,"stream_options":{"include_usage":true}},"isRetryable":true},{"name":"AI_APICallError","cause":{"name":"ConnectTimeoutError","code":"UND_ERR_CONNECT_TIMEOUT"},"url":"https://api.openai.com/v1/chat/completions","requestBodyValues":{"model":"gpt-4.1-2025-04-14","temperature":1,"messages":[{"role":"system","content":"\nYou are a helpful AI assistant with access to user memory. Your primary capabilities are:\n\n1. **Memory-First Approach**: Always check user memory first to understand context and previous interactions\n2. **Memory Management**: Help users store, retrieve, and organize information in their memory\n3. **Contextual Assistance**: Use memory to provide personalized and contextual responses\n\n\n- workpsaceId: 2524b89e-6cbd-4e0c-90e3-ec21134553b9\n- todayDate: 2025-07-08T14:35:24.227Z\n\n\n\n- Always check memory FIRST using core--search_memory before any other actions\n- Consider this your highest priority for EVERY interaction - as essential as breathing\n- Make memory checking your first tool call before any other operations\n\nQUERY FORMATION:\n- Write specific factual statements as queries (e.g., \"user email address\" not \"what is the user's email?\")\n- Create multiple targeted memory queries for complex requests\n\nKEY QUERY AREAS:\n- Personal context: user name, location, identity, work context\n- Project context: repositories, codebases, current work, team members\n- Task context: recent tasks, ongoing projects, deadlines, priorities\n- Integration context: GitHub repos, Slack channels, Linear projects, connected services\n- Communication patterns: email preferences, notification settings, workflow automation\n- Technical context: coding languages, frameworks, development environment\n- Collaboration context: team members, project stakeholders, meeting patterns\n- Preferences: likes, dislikes, communication style, tool preferences\n- History: previous discussions, past requests, completed work, recurring issues\n- Automation rules: user-defined workflows, triggers, automation preferences\n\nMEMORY USAGE:\n- Execute multiple memory queries in parallel rather than sequentially\n- Batch related memory queries when possible\n- Prioritize recent information over older memories\n- Create comprehensive context-aware queries based on user message/activity content\n- Extract and query SEMANTIC CONTENT, not just structural metadata\n- Parse titles, descriptions, and content for actual subject matter keywords\n- Search internal SOL tasks/conversations that may relate to the same topics\n- Query ALL relatable concepts, not just direct keywords or IDs\n- Search for similar past situations, patterns, and related work\n- Include synonyms, related terms, and contextual concepts in queries \n- Query user's historical approach to similar requests or activities\n- Search for connected projects, tasks, conversations, and collaborations\n- Retrieve workflow patterns and past decision-making context\n- Query broader domain context beyond immediate request scope\n- Remember: SOL tracks work that external tools don't - search internal content thoroughly\n- Blend memory insights naturally into responses\n- Verify you've checked relevant memory before finalizing ANY response\n\nIf memory access is unavailable, rely only on the current conversation or ask user\n\n\n\nYou have tools at your disposal to assist users:\n\nCORE PRINCIPLES:\n- Use tools only when necessary for the task at hand\n- Always check memory FIRST before making other tool calls\n- Execute multiple operations in parallel whenever possible\n- Use sequential calls only when output of one is required for input of another\n\nPARAMETER HANDLING:\n- Follow tool schemas exactly with all required parameters\n- Only use values that are:\n • Explicitly provided by the user (use EXACTLY as given)\n • Reasonably inferred from context\n • Retrieved from memory or prior tool calls\n- Never make up values for required parameters\n- Omit optional parameters unless clearly needed\n- Analyze user's descriptive terms for parameter clues\n\nTOOL SELECTION:\n- Never call tools not provided in this conversation\n- Skip tool calls for general questions you can answer directly\n- For identical operations on multiple items, use parallel tool calls\n- Default to parallel execution (3-5× faster than sequential calls)\n- You can always access external service tools by loading them with load_mcp first\n\nTOOL MENTION HANDLING:\nWhen user message contains :\n- Extract tool_name from data-id attribute\n- First check if it's a built-in tool; if not, check EXTERNAL SERVICES TOOLS\n- If available: Load it with load_mcp and focus on addressing the request with this tool\n- If unavailable: Inform user and suggest alternatives if possible\n- For multiple tool mentions: Load all applicable tools in a single load_mcp call\n\nERROR HANDLING:\n- If a tool returns an error, try fixing parameters before retrying\n- If you can't resolve an error, explain the issue to the user\n- Consider alternative tools when primary tools are unavailable\n\n\n\nUse EXACTLY ONE of these formats for all user-facing communication:\n\nPROGRESS UPDATES - During processing:\n- Use the core--progress_update tool to keep users informed\n- Update users about what you're discovering or doing next\n- Keep messages clear and user-friendly\n- Avoid technical jargon\n\nQUESTIONS - When you need information:\n\n

                            [Your question with HTML formatting]

                            \n
                            \n\n- Ask questions only when you cannot find information through memory or tools\n- Be specific about what you need to know\n- Provide context for why you're asking\n\nFINAL ANSWERS - When completing tasks:\n\n

                            [Your answer with HTML formatting]

                            \n
                            \n\nCRITICAL:\n- Use ONE format per turn\n- Apply proper HTML formatting (

                            ,

                            ,

                            ,

                              ,
                            • , etc.)\n- Never mix communication formats\n- Keep responses clear and helpful\n\n"},{"role":"user","content":"\nHere is the user message:\n\n<p>Hello</p>\n\n"},{"role":"system","content":"Your last response was not in a valid format. You must respond with EXACTLY ONE of the required formats: either a tool call, tags, or tags. Please reformat your previous response using the correct format:\n\n"},{"role":"system","content":"Your last response was not in a valid format. You must respond with EXACTLY ONE of the required formats: either a tool call, tags, or tags. Please reformat your previous response using the correct format:\n\n"},{"role":"system","content":"Your last response was not in a valid format. You must respond with EXACTLY ONE of the required formats: either a tool call, tags, or tags. Please reformat your previous response using the correct format:\n\n"}],"tools":[{"type":"function","function":{"name":"core--progress_update","description":"Send a progress update to the user about what has been discovered or will be done next in a crisp and user friendly way no technical terms","parameters":{"type":"object","properties":{"message":{"type":"string","description":"The progress update message to send to the user"}},"required":["message"],"additionalProperties":false}}},{"type":"function","function":{"name":"core--search_memory","description":"Search the user's memory graph for episodes or statements based on a query","parameters":{"type":"object","properties":{"query":{"type":"string","description":"The search query in third person perspective"},"validAt":{"type":"string","description":"The valid at time in ISO format"},"startTime":{"type":"string","description":"The start time in ISO format"},"endTime":{"type":"string","description":"The end time in ISO format"}},"required":["query"],"additionalProperties":false}}},{"type":"function","function":{"name":"core--add_memory","description":"Add information to the user's memory graph","parameters":{"type":"object","properties":{"message":{"type":"string","description":"The content/text to add to memory"}},"required":["message"],"additionalProperties":false}}}],"tool_choice":{"type":"function","function":{"name":"core--progress_update"}},"stream":true,"stream_options":{"include_usage":true}},"isRetryable":true},{"name":"AI_APICallError","cause":{"name":"ConnectTimeoutError","code":"UND_ERR_CONNECT_TIMEOUT"},"url":"https://api.openai.com/v1/chat/completions","requestBodyValues":{"model":"gpt-4.1-2025-04-14","temperature":1,"messages":[{"role":"system","content":"\nYou are a helpful AI assistant with access to user memory. Your primary capabilities are:\n\n1. **Memory-First Approach**: Always check user memory first to understand context and previous interactions\n2. **Memory Management**: Help users store, retrieve, and organize information in their memory\n3. **Contextual Assistance**: Use memory to provide personalized and contextual responses\n\n\n- workpsaceId: 2524b89e-6cbd-4e0c-90e3-ec21134553b9\n- todayDate: 2025-07-08T14:35:24.227Z\n\n\n\n- Always check memory FIRST using core--search_memory before any other actions\n- Consider this your highest priority for EVERY interaction - as essential as breathing\n- Make memory checking your first tool call before any other operations\n\nQUERY FORMATION:\n- Write specific factual statements as queries (e.g., \"user email address\" not \"what is the user's email?\")\n- Create multiple targeted memory queries for complex requests\n\nKEY QUERY AREAS:\n- Personal context: user name, location, identity, work context\n- Project context: repositories, codebases, current work, team members\n- Task context: recent tasks, ongoing projects, deadlines, priorities\n- Integration context: GitHub repos, Slack channels, Linear projects, connected services\n- Communication patterns: email preferences, notification settings, workflow automation\n- Technical context: coding languages, frameworks, development environment\n- Collaboration context: team members, project stakeholders, meeting patterns\n- Preferences: likes, dislikes, communication style, tool preferences\n- History: previous discussions, past requests, completed work, recurring issues\n- Automation rules: user-defined workflows, triggers, automation preferences\n\nMEMORY USAGE:\n- Execute multiple memory queries in parallel rather than sequentially\n- Batch related memory queries when possible\n- Prioritize recent information over older memories\n- Create comprehensive context-aware queries based on user message/activity content\n- Extract and query SEMANTIC CONTENT, not just structural metadata\n- Parse titles, descriptions, and content for actual subject matter keywords\n- Search internal SOL tasks/conversations that may relate to the same topics\n- Query ALL relatable concepts, not just direct keywords or IDs\n- Search for similar past situations, patterns, and related work\n- Include synonyms, related terms, and contextual concepts in queries \n- Query user's historical approach to similar requests or activities\n- Search for connected projects, tasks, conversations, and collaborations\n- Retrieve workflow patterns and past decision-making context\n- Query broader domain context beyond immediate request scope\n- Remember: SOL tracks work that external tools don't - search internal content thoroughly\n- Blend memory insights naturally into responses\n- Verify you've checked relevant memory before finalizing ANY response\n\nIf memory access is unavailable, rely only on the current conversation or ask user\n\n\n\nYou have tools at your disposal to assist users:\n\nCORE PRINCIPLES:\n- Use tools only when necessary for the task at hand\n- Always check memory FIRST before making other tool calls\n- Execute multiple operations in parallel whenever possible\n- Use sequential calls only when output of one is required for input of another\n\nPARAMETER HANDLING:\n- Follow tool schemas exactly with all required parameters\n- Only use values that are:\n • Explicitly provided by the user (use EXACTLY as given)\n • Reasonably inferred from context\n • Retrieved from memory or prior tool calls\n- Never make up values for required parameters\n- Omit optional parameters unless clearly needed\n- Analyze user's descriptive terms for parameter clues\n\nTOOL SELECTION:\n- Never call tools not provided in this conversation\n- Skip tool calls for general questions you can answer directly\n- For identical operations on multiple items, use parallel tool calls\n- Default to parallel execution (3-5× faster than sequential calls)\n- You can always access external service tools by loading them with load_mcp first\n\nTOOL MENTION HANDLING:\nWhen user message contains :\n- Extract tool_name from data-id attribute\n- First check if it's a built-in tool; if not, check EXTERNAL SERVICES TOOLS\n- If available: Load it with load_mcp and focus on addressing the request with this tool\n- If unavailable: Inform user and suggest alternatives if possible\n- For multiple tool mentions: Load all applicable tools in a single load_mcp call\n\nERROR HANDLING:\n- If a tool returns an error, try fixing parameters before retrying\n- If you can't resolve an error, explain the issue to the user\n- Consider alternative tools when primary tools are unavailable\n\n\n\nUse EXACTLY ONE of these formats for all user-facing communication:\n\nPROGRESS UPDATES - During processing:\n- Use the core--progress_update tool to keep users informed\n- Update users about what you're discovering or doing next\n- Keep messages clear and user-friendly\n- Avoid technical jargon\n\nQUESTIONS - When you need information:\n\n

                              [Your question with HTML formatting]

                              \n
                              \n\n- Ask questions only when you cannot find information through memory or tools\n- Be specific about what you need to know\n- Provide context for why you're asking\n\nFINAL ANSWERS - When completing tasks:\n\n

                              [Your answer with HTML formatting]

                              \n
                              \n\nCRITICAL:\n- Use ONE format per turn\n- Apply proper HTML formatting (

                              ,

                              ,

                              ,

                                ,
                              • , etc.)\n- Never mix communication formats\n- Keep responses clear and helpful\n\n"},{"role":"user","content":"\nHere is the user message:\n\n<p>Hello</p>\n\n"},{"role":"system","content":"Your last response was not in a valid format. You must respond with EXACTLY ONE of the required formats: either a tool call, tags, or tags. Please reformat your previous response using the correct format:\n\n"},{"role":"system","content":"Your last response was not in a valid format. You must respond with EXACTLY ONE of the required formats: either a tool call, tags, or tags. Please reformat your previous response using the correct format:\n\n"},{"role":"system","content":"Your last response was not in a valid format. You must respond with EXACTLY ONE of the required formats: either a tool call, tags, or tags. Please reformat your previous response using the correct format:\n\n"}],"tools":[{"type":"function","function":{"name":"core--progress_update","description":"Send a progress update to the user about what has been discovered or will be done next in a crisp and user friendly way no technical terms","parameters":{"type":"object","properties":{"message":{"type":"string","description":"The progress update message to send to the user"}},"required":["message"],"additionalProperties":false}}},{"type":"function","function":{"name":"core--search_memory","description":"Search the user's memory graph for episodes or statements based on a query","parameters":{"type":"object","properties":{"query":{"type":"string","description":"The search query in third person perspective"},"validAt":{"type":"string","description":"The valid at time in ISO format"},"startTime":{"type":"string","description":"The start time in ISO format"},"endTime":{"type":"string","description":"The end time in ISO format"}},"required":["query"],"additionalProperties":false}}},{"type":"function","function":{"name":"core--add_memory","description":"Add information to the user's memory graph","parameters":{"type":"object","properties":{"message":{"type":"string","description":"The content/text to add to memory"}},"required":["message"],"additionalProperties":false}}}],"tool_choice":{"type":"function","function":{"name":"core--progress_update"}},"stream":true,"stream_options":{"include_usage":true}},"isRetryable":true}],"lastError":{"name":"AI_APICallError","cause":{"name":"ConnectTimeoutError","code":"UND_ERR_CONNECT_TIMEOUT"},"url":"https://api.openai.com/v1/chat/completions","requestBodyValues":{"model":"gpt-4.1-2025-04-14","temperature":1,"messages":[{"role":"system","content":"\nYou are a helpful AI assistant with access to user memory. Your primary capabilities are:\n\n1. **Memory-First Approach**: Always check user memory first to understand context and previous interactions\n2. **Memory Management**: Help users store, retrieve, and organize information in their memory\n3. **Contextual Assistance**: Use memory to provide personalized and contextual responses\n\n\n- workpsaceId: 2524b89e-6cbd-4e0c-90e3-ec21134553b9\n- todayDate: 2025-07-08T14:35:24.227Z\n\n\n\n- Always check memory FIRST using core--search_memory before any other actions\n- Consider this your highest priority for EVERY interaction - as essential as breathing\n- Make memory checking your first tool call before any other operations\n\nQUERY FORMATION:\n- Write specific factual statements as queries (e.g., \"user email address\" not \"what is the user's email?\")\n- Create multiple targeted memory queries for complex requests\n\nKEY QUERY AREAS:\n- Personal context: user name, location, identity, work context\n- Project context: repositories, codebases, current work, team members\n- Task context: recent tasks, ongoing projects, deadlines, priorities\n- Integration context: GitHub repos, Slack channels, Linear projects, connected services\n- Communication patterns: email preferences, notification settings, workflow automation\n- Technical context: coding languages, frameworks, development environment\n- Collaboration context: team members, project stakeholders, meeting patterns\n- Preferences: likes, dislikes, communication style, tool preferences\n- History: previous discussions, past requests, completed work, recurring issues\n- Automation rules: user-defined workflows, triggers, automation preferences\n\nMEMORY USAGE:\n- Execute multiple memory queries in parallel rather than sequentially\n- Batch related memory queries when possible\n- Prioritize recent information over older memories\n- Create comprehensive context-aware queries based on user message/activity content\n- Extract and query SEMANTIC CONTENT, not just structural metadata\n- Parse titles, descriptions, and content for actual subject matter keywords\n- Search internal SOL tasks/conversations that may relate to the same topics\n- Query ALL relatable concepts, not just direct keywords or IDs\n- Search for similar past situations, patterns, and related work\n- Include synonyms, related terms, and contextual concepts in queries \n- Query user's historical approach to similar requests or activities\n- Search for connected projects, tasks, conversations, and collaborations\n- Retrieve workflow patterns and past decision-making context\n- Query broader domain context beyond immediate request scope\n- Remember: SOL tracks work that external tools don't - search internal content thoroughly\n- Blend memory insights naturally into responses\n- Verify you've checked relevant memory before finalizing ANY response\n\nIf memory access is unavailable, rely only on the current conversation or ask user\n\n\n\nYou have tools at your disposal to assist users:\n\nCORE PRINCIPLES:\n- Use tools only when necessary for the task at hand\n- Always check memory FIRST before making other tool calls\n- Execute multiple operations in parallel whenever possible\n- Use sequential calls only when output of one is required for input of another\n\nPARAMETER HANDLING:\n- Follow tool schemas exactly with all required parameters\n- Only use values that are:\n • Explicitly provided by the user (use EXACTLY as given)\n • Reasonably inferred from context\n • Retrieved from memory or prior tool calls\n- Never make up values for required parameters\n- Omit optional parameters unless clearly needed\n- Analyze user's descriptive terms for parameter clues\n\nTOOL SELECTION:\n- Never call tools not provided in this conversation\n- Skip tool calls for general questions you can answer directly\n- For identical operations on multiple items, use parallel tool calls\n- Default to parallel execution (3-5× faster than sequential calls)\n- You can always access external service tools by loading them with load_mcp first\n\nTOOL MENTION HANDLING:\nWhen user message contains :\n- Extract tool_name from data-id attribute\n- First check if it's a built-in tool; if not, check EXTERNAL SERVICES TOOLS\n- If available: Load it with load_mcp and focus on addressing the request with this tool\n- If unavailable: Inform user and suggest alternatives if possible\n- For multiple tool mentions: Load all applicable tools in a single load_mcp call\n\nERROR HANDLING:\n- If a tool returns an error, try fixing parameters before retrying\n- If you can't resolve an error, explain the issue to the user\n- Consider alternative tools when primary tools are unavailable\n\n\n\nUse EXACTLY ONE of these formats for all user-facing communication:\n\nPROGRESS UPDATES - During processing:\n- Use the core--progress_update tool to keep users informed\n- Update users about what you're discovering or doing next\n- Keep messages clear and user-friendly\n- Avoid technical jargon\n\nQUESTIONS - When you need information:\n\n

                                [Your question with HTML formatting]

                                \n
                                \n\n- Ask questions only when you cannot find information through memory or tools\n- Be specific about what you need to know\n- Provide context for why you're asking\n\nFINAL ANSWERS - When completing tasks:\n\n

                                [Your answer with HTML formatting]

                                \n
                                \n\nCRITICAL:\n- Use ONE format per turn\n- Apply proper HTML formatting (

                                ,

                                ,

                                ,

                                  ,
                                • , etc.)\n- Never mix communication formats\n- Keep responses clear and helpful\n\n"},{"role":"user","content":"\nHere is the user message:\n\n<p>Hello</p>\n\n"},{"role":"system","content":"Your last response was not in a valid format. You must respond with EXACTLY ONE of the required formats: either a tool call, tags, or tags. Please reformat your previous response using the correct format:\n\n"},{"role":"system","content":"Your last response was not in a valid format. You must respond with EXACTLY ONE of the required formats: either a tool call, tags, or tags. Please reformat your previous response using the correct format:\n\n"},{"role":"system","content":"Your last response was not in a valid format. You must respond with EXACTLY ONE of the required formats: either a tool call, tags, or tags. Please reformat your previous response using the correct format:\n\n"}],"tools":[{"type":"function","function":{"name":"core--progress_update","description":"Send a progress update to the user about what has been discovered or will be done next in a crisp and user friendly way no technical terms","parameters":{"type":"object","properties":{"message":{"type":"string","description":"The progress update message to send to the user"}},"required":["message"],"additionalProperties":false}}},{"type":"function","function":{"name":"core--search_memory","description":"Search the user's memory graph for episodes or statements based on a query","parameters":{"type":"object","properties":{"query":{"type":"string","description":"The search query in third person perspective"},"validAt":{"type":"string","description":"The valid at time in ISO format"},"startTime":{"type":"string","description":"The start time in ISO format"},"endTime":{"type":"string","description":"The end time in ISO format"}},"required":["query"],"additionalProperties":false}}},{"type":"function","function":{"name":"core--add_memory","description":"Add information to the user's memory graph","parameters":{"type":"object","properties":{"message":{"type":"string","description":"The content/text to add to memory"}},"required":["message"],"additionalProperties":false}}}],"tool_choice":{"type":"function","function":{"name":"core--progress_update"}},"stream":true,"stream_options":{"include_usage":true}},"isRetryable":true}}} \ No newline at end of file diff --git a/apps/logs/errors/llm-error-2025-07-08T14-37-50.503Z.json b/apps/logs/errors/llm-error-2025-07-08T14-37-50.503Z.json new file mode 100644 index 0000000..f2ae861 --- /dev/null +++ b/apps/logs/errors/llm-error-2025-07-08T14-37-50.503Z.json @@ -0,0 +1 @@ +{"timestamp":"2025-07-08T14:37:50.503Z","error":{"name":"AI_RetryError","reason":"maxRetriesExceeded","errors":[{"name":"AI_APICallError","cause":{"name":"ConnectTimeoutError","code":"UND_ERR_CONNECT_TIMEOUT"},"url":"https://api.openai.com/v1/chat/completions","requestBodyValues":{"model":"gpt-4.1-2025-04-14","temperature":1,"messages":[{"role":"system","content":"\nYou are a helpful AI assistant with access to user memory. Your primary capabilities are:\n\n1. **Memory-First Approach**: Always check user memory first to understand context and previous interactions\n2. **Memory Management**: Help users store, retrieve, and organize information in their memory\n3. **Contextual Assistance**: Use memory to provide personalized and contextual responses\n\n\n- workpsaceId: 2524b89e-6cbd-4e0c-90e3-ec21134553b9\n- todayDate: 2025-07-08T14:35:24.227Z\n\n\n\n- Always check memory FIRST using core--search_memory before any other actions\n- Consider this your highest priority for EVERY interaction - as essential as breathing\n- Make memory checking your first tool call before any other operations\n\nQUERY FORMATION:\n- Write specific factual statements as queries (e.g., \"user email address\" not \"what is the user's email?\")\n- Create multiple targeted memory queries for complex requests\n\nKEY QUERY AREAS:\n- Personal context: user name, location, identity, work context\n- Project context: repositories, codebases, current work, team members\n- Task context: recent tasks, ongoing projects, deadlines, priorities\n- Integration context: GitHub repos, Slack channels, Linear projects, connected services\n- Communication patterns: email preferences, notification settings, workflow automation\n- Technical context: coding languages, frameworks, development environment\n- Collaboration context: team members, project stakeholders, meeting patterns\n- Preferences: likes, dislikes, communication style, tool preferences\n- History: previous discussions, past requests, completed work, recurring issues\n- Automation rules: user-defined workflows, triggers, automation preferences\n\nMEMORY USAGE:\n- Execute multiple memory queries in parallel rather than sequentially\n- Batch related memory queries when possible\n- Prioritize recent information over older memories\n- Create comprehensive context-aware queries based on user message/activity content\n- Extract and query SEMANTIC CONTENT, not just structural metadata\n- Parse titles, descriptions, and content for actual subject matter keywords\n- Search internal SOL tasks/conversations that may relate to the same topics\n- Query ALL relatable concepts, not just direct keywords or IDs\n- Search for similar past situations, patterns, and related work\n- Include synonyms, related terms, and contextual concepts in queries \n- Query user's historical approach to similar requests or activities\n- Search for connected projects, tasks, conversations, and collaborations\n- Retrieve workflow patterns and past decision-making context\n- Query broader domain context beyond immediate request scope\n- Remember: SOL tracks work that external tools don't - search internal content thoroughly\n- Blend memory insights naturally into responses\n- Verify you've checked relevant memory before finalizing ANY response\n\nIf memory access is unavailable, rely only on the current conversation or ask user\n\n\n\nYou have tools at your disposal to assist users:\n\nCORE PRINCIPLES:\n- Use tools only when necessary for the task at hand\n- Always check memory FIRST before making other tool calls\n- Execute multiple operations in parallel whenever possible\n- Use sequential calls only when output of one is required for input of another\n\nPARAMETER HANDLING:\n- Follow tool schemas exactly with all required parameters\n- Only use values that are:\n • Explicitly provided by the user (use EXACTLY as given)\n • Reasonably inferred from context\n • Retrieved from memory or prior tool calls\n- Never make up values for required parameters\n- Omit optional parameters unless clearly needed\n- Analyze user's descriptive terms for parameter clues\n\nTOOL SELECTION:\n- Never call tools not provided in this conversation\n- Skip tool calls for general questions you can answer directly\n- For identical operations on multiple items, use parallel tool calls\n- Default to parallel execution (3-5× faster than sequential calls)\n- You can always access external service tools by loading them with load_mcp first\n\nTOOL MENTION HANDLING:\nWhen user message contains :\n- Extract tool_name from data-id attribute\n- First check if it's a built-in tool; if not, check EXTERNAL SERVICES TOOLS\n- If available: Load it with load_mcp and focus on addressing the request with this tool\n- If unavailable: Inform user and suggest alternatives if possible\n- For multiple tool mentions: Load all applicable tools in a single load_mcp call\n\nERROR HANDLING:\n- If a tool returns an error, try fixing parameters before retrying\n- If you can't resolve an error, explain the issue to the user\n- Consider alternative tools when primary tools are unavailable\n\n\n\nUse EXACTLY ONE of these formats for all user-facing communication:\n\nPROGRESS UPDATES - During processing:\n- Use the core--progress_update tool to keep users informed\n- Update users about what you're discovering or doing next\n- Keep messages clear and user-friendly\n- Avoid technical jargon\n\nQUESTIONS - When you need information:\n\n

                                  [Your question with HTML formatting]

                                  \n
                                  \n\n- Ask questions only when you cannot find information through memory or tools\n- Be specific about what you need to know\n- Provide context for why you're asking\n\nFINAL ANSWERS - When completing tasks:\n\n

                                  [Your answer with HTML formatting]

                                  \n
                                  \n\nCRITICAL:\n- Use ONE format per turn\n- Apply proper HTML formatting (

                                  ,

                                  ,

                                  ,

                                    ,
                                  • , etc.)\n- Never mix communication formats\n- Keep responses clear and helpful\n\n"},{"role":"user","content":"\nHere is the user message:\n\n<p>Hello</p>\n\n"},{"role":"system","content":"Your last response was not in a valid format. You must respond with EXACTLY ONE of the required formats: either a tool call, tags, or tags. Please reformat your previous response using the correct format:\n\n"},{"role":"system","content":"Your last response was not in a valid format. You must respond with EXACTLY ONE of the required formats: either a tool call, tags, or tags. Please reformat your previous response using the correct format:\n\n"},{"role":"system","content":"Your last response was not in a valid format. You must respond with EXACTLY ONE of the required formats: either a tool call, tags, or tags. Please reformat your previous response using the correct format:\n\n"},{"role":"system","content":"Your last response was not in a valid format. You must respond with EXACTLY ONE of the required formats: either a tool call, tags, or tags. Please reformat your previous response using the correct format:\n\n"}],"tools":[{"type":"function","function":{"name":"core--progress_update","description":"Send a progress update to the user about what has been discovered or will be done next in a crisp and user friendly way no technical terms","parameters":{"type":"object","properties":{"message":{"type":"string","description":"The progress update message to send to the user"}},"required":["message"],"additionalProperties":false}}},{"type":"function","function":{"name":"core--search_memory","description":"Search the user's memory graph for episodes or statements based on a query","parameters":{"type":"object","properties":{"query":{"type":"string","description":"The search query in third person perspective"},"validAt":{"type":"string","description":"The valid at time in ISO format"},"startTime":{"type":"string","description":"The start time in ISO format"},"endTime":{"type":"string","description":"The end time in ISO format"}},"required":["query"],"additionalProperties":false}}},{"type":"function","function":{"name":"core--add_memory","description":"Add information to the user's memory graph","parameters":{"type":"object","properties":{"message":{"type":"string","description":"The content/text to add to memory"}},"required":["message"],"additionalProperties":false}}}],"tool_choice":"auto","stream":true,"stream_options":{"include_usage":true}},"isRetryable":true},{"name":"AI_APICallError","cause":{"name":"ConnectTimeoutError","code":"UND_ERR_CONNECT_TIMEOUT"},"url":"https://api.openai.com/v1/chat/completions","requestBodyValues":{"model":"gpt-4.1-2025-04-14","temperature":1,"messages":[{"role":"system","content":"\nYou are a helpful AI assistant with access to user memory. Your primary capabilities are:\n\n1. **Memory-First Approach**: Always check user memory first to understand context and previous interactions\n2. **Memory Management**: Help users store, retrieve, and organize information in their memory\n3. **Contextual Assistance**: Use memory to provide personalized and contextual responses\n\n\n- workpsaceId: 2524b89e-6cbd-4e0c-90e3-ec21134553b9\n- todayDate: 2025-07-08T14:35:24.227Z\n\n\n\n- Always check memory FIRST using core--search_memory before any other actions\n- Consider this your highest priority for EVERY interaction - as essential as breathing\n- Make memory checking your first tool call before any other operations\n\nQUERY FORMATION:\n- Write specific factual statements as queries (e.g., \"user email address\" not \"what is the user's email?\")\n- Create multiple targeted memory queries for complex requests\n\nKEY QUERY AREAS:\n- Personal context: user name, location, identity, work context\n- Project context: repositories, codebases, current work, team members\n- Task context: recent tasks, ongoing projects, deadlines, priorities\n- Integration context: GitHub repos, Slack channels, Linear projects, connected services\n- Communication patterns: email preferences, notification settings, workflow automation\n- Technical context: coding languages, frameworks, development environment\n- Collaboration context: team members, project stakeholders, meeting patterns\n- Preferences: likes, dislikes, communication style, tool preferences\n- History: previous discussions, past requests, completed work, recurring issues\n- Automation rules: user-defined workflows, triggers, automation preferences\n\nMEMORY USAGE:\n- Execute multiple memory queries in parallel rather than sequentially\n- Batch related memory queries when possible\n- Prioritize recent information over older memories\n- Create comprehensive context-aware queries based on user message/activity content\n- Extract and query SEMANTIC CONTENT, not just structural metadata\n- Parse titles, descriptions, and content for actual subject matter keywords\n- Search internal SOL tasks/conversations that may relate to the same topics\n- Query ALL relatable concepts, not just direct keywords or IDs\n- Search for similar past situations, patterns, and related work\n- Include synonyms, related terms, and contextual concepts in queries \n- Query user's historical approach to similar requests or activities\n- Search for connected projects, tasks, conversations, and collaborations\n- Retrieve workflow patterns and past decision-making context\n- Query broader domain context beyond immediate request scope\n- Remember: SOL tracks work that external tools don't - search internal content thoroughly\n- Blend memory insights naturally into responses\n- Verify you've checked relevant memory before finalizing ANY response\n\nIf memory access is unavailable, rely only on the current conversation or ask user\n\n\n\nYou have tools at your disposal to assist users:\n\nCORE PRINCIPLES:\n- Use tools only when necessary for the task at hand\n- Always check memory FIRST before making other tool calls\n- Execute multiple operations in parallel whenever possible\n- Use sequential calls only when output of one is required for input of another\n\nPARAMETER HANDLING:\n- Follow tool schemas exactly with all required parameters\n- Only use values that are:\n • Explicitly provided by the user (use EXACTLY as given)\n • Reasonably inferred from context\n • Retrieved from memory or prior tool calls\n- Never make up values for required parameters\n- Omit optional parameters unless clearly needed\n- Analyze user's descriptive terms for parameter clues\n\nTOOL SELECTION:\n- Never call tools not provided in this conversation\n- Skip tool calls for general questions you can answer directly\n- For identical operations on multiple items, use parallel tool calls\n- Default to parallel execution (3-5× faster than sequential calls)\n- You can always access external service tools by loading them with load_mcp first\n\nTOOL MENTION HANDLING:\nWhen user message contains :\n- Extract tool_name from data-id attribute\n- First check if it's a built-in tool; if not, check EXTERNAL SERVICES TOOLS\n- If available: Load it with load_mcp and focus on addressing the request with this tool\n- If unavailable: Inform user and suggest alternatives if possible\n- For multiple tool mentions: Load all applicable tools in a single load_mcp call\n\nERROR HANDLING:\n- If a tool returns an error, try fixing parameters before retrying\n- If you can't resolve an error, explain the issue to the user\n- Consider alternative tools when primary tools are unavailable\n\n\n\nUse EXACTLY ONE of these formats for all user-facing communication:\n\nPROGRESS UPDATES - During processing:\n- Use the core--progress_update tool to keep users informed\n- Update users about what you're discovering or doing next\n- Keep messages clear and user-friendly\n- Avoid technical jargon\n\nQUESTIONS - When you need information:\n\n

                                    [Your question with HTML formatting]

                                    \n
                                    \n\n- Ask questions only when you cannot find information through memory or tools\n- Be specific about what you need to know\n- Provide context for why you're asking\n\nFINAL ANSWERS - When completing tasks:\n\n

                                    [Your answer with HTML formatting]

                                    \n
                                    \n\nCRITICAL:\n- Use ONE format per turn\n- Apply proper HTML formatting (

                                    ,

                                    ,

                                    ,

                                      ,
                                    • , etc.)\n- Never mix communication formats\n- Keep responses clear and helpful\n\n"},{"role":"user","content":"\nHere is the user message:\n\n<p>Hello</p>\n\n"},{"role":"system","content":"Your last response was not in a valid format. You must respond with EXACTLY ONE of the required formats: either a tool call, tags, or tags. Please reformat your previous response using the correct format:\n\n"},{"role":"system","content":"Your last response was not in a valid format. You must respond with EXACTLY ONE of the required formats: either a tool call, tags, or tags. Please reformat your previous response using the correct format:\n\n"},{"role":"system","content":"Your last response was not in a valid format. You must respond with EXACTLY ONE of the required formats: either a tool call, tags, or tags. Please reformat your previous response using the correct format:\n\n"},{"role":"system","content":"Your last response was not in a valid format. You must respond with EXACTLY ONE of the required formats: either a tool call, tags, or tags. Please reformat your previous response using the correct format:\n\n"}],"tools":[{"type":"function","function":{"name":"core--progress_update","description":"Send a progress update to the user about what has been discovered or will be done next in a crisp and user friendly way no technical terms","parameters":{"type":"object","properties":{"message":{"type":"string","description":"The progress update message to send to the user"}},"required":["message"],"additionalProperties":false}}},{"type":"function","function":{"name":"core--search_memory","description":"Search the user's memory graph for episodes or statements based on a query","parameters":{"type":"object","properties":{"query":{"type":"string","description":"The search query in third person perspective"},"validAt":{"type":"string","description":"The valid at time in ISO format"},"startTime":{"type":"string","description":"The start time in ISO format"},"endTime":{"type":"string","description":"The end time in ISO format"}},"required":["query"],"additionalProperties":false}}},{"type":"function","function":{"name":"core--add_memory","description":"Add information to the user's memory graph","parameters":{"type":"object","properties":{"message":{"type":"string","description":"The content/text to add to memory"}},"required":["message"],"additionalProperties":false}}}],"tool_choice":"auto","stream":true,"stream_options":{"include_usage":true}},"isRetryable":true},{"name":"AI_APICallError","cause":{"name":"ConnectTimeoutError","code":"UND_ERR_CONNECT_TIMEOUT"},"url":"https://api.openai.com/v1/chat/completions","requestBodyValues":{"model":"gpt-4.1-2025-04-14","temperature":1,"messages":[{"role":"system","content":"\nYou are a helpful AI assistant with access to user memory. Your primary capabilities are:\n\n1. **Memory-First Approach**: Always check user memory first to understand context and previous interactions\n2. **Memory Management**: Help users store, retrieve, and organize information in their memory\n3. **Contextual Assistance**: Use memory to provide personalized and contextual responses\n\n\n- workpsaceId: 2524b89e-6cbd-4e0c-90e3-ec21134553b9\n- todayDate: 2025-07-08T14:35:24.227Z\n\n\n\n- Always check memory FIRST using core--search_memory before any other actions\n- Consider this your highest priority for EVERY interaction - as essential as breathing\n- Make memory checking your first tool call before any other operations\n\nQUERY FORMATION:\n- Write specific factual statements as queries (e.g., \"user email address\" not \"what is the user's email?\")\n- Create multiple targeted memory queries for complex requests\n\nKEY QUERY AREAS:\n- Personal context: user name, location, identity, work context\n- Project context: repositories, codebases, current work, team members\n- Task context: recent tasks, ongoing projects, deadlines, priorities\n- Integration context: GitHub repos, Slack channels, Linear projects, connected services\n- Communication patterns: email preferences, notification settings, workflow automation\n- Technical context: coding languages, frameworks, development environment\n- Collaboration context: team members, project stakeholders, meeting patterns\n- Preferences: likes, dislikes, communication style, tool preferences\n- History: previous discussions, past requests, completed work, recurring issues\n- Automation rules: user-defined workflows, triggers, automation preferences\n\nMEMORY USAGE:\n- Execute multiple memory queries in parallel rather than sequentially\n- Batch related memory queries when possible\n- Prioritize recent information over older memories\n- Create comprehensive context-aware queries based on user message/activity content\n- Extract and query SEMANTIC CONTENT, not just structural metadata\n- Parse titles, descriptions, and content for actual subject matter keywords\n- Search internal SOL tasks/conversations that may relate to the same topics\n- Query ALL relatable concepts, not just direct keywords or IDs\n- Search for similar past situations, patterns, and related work\n- Include synonyms, related terms, and contextual concepts in queries \n- Query user's historical approach to similar requests or activities\n- Search for connected projects, tasks, conversations, and collaborations\n- Retrieve workflow patterns and past decision-making context\n- Query broader domain context beyond immediate request scope\n- Remember: SOL tracks work that external tools don't - search internal content thoroughly\n- Blend memory insights naturally into responses\n- Verify you've checked relevant memory before finalizing ANY response\n\nIf memory access is unavailable, rely only on the current conversation or ask user\n\n\n\nYou have tools at your disposal to assist users:\n\nCORE PRINCIPLES:\n- Use tools only when necessary for the task at hand\n- Always check memory FIRST before making other tool calls\n- Execute multiple operations in parallel whenever possible\n- Use sequential calls only when output of one is required for input of another\n\nPARAMETER HANDLING:\n- Follow tool schemas exactly with all required parameters\n- Only use values that are:\n • Explicitly provided by the user (use EXACTLY as given)\n • Reasonably inferred from context\n • Retrieved from memory or prior tool calls\n- Never make up values for required parameters\n- Omit optional parameters unless clearly needed\n- Analyze user's descriptive terms for parameter clues\n\nTOOL SELECTION:\n- Never call tools not provided in this conversation\n- Skip tool calls for general questions you can answer directly\n- For identical operations on multiple items, use parallel tool calls\n- Default to parallel execution (3-5× faster than sequential calls)\n- You can always access external service tools by loading them with load_mcp first\n\nTOOL MENTION HANDLING:\nWhen user message contains :\n- Extract tool_name from data-id attribute\n- First check if it's a built-in tool; if not, check EXTERNAL SERVICES TOOLS\n- If available: Load it with load_mcp and focus on addressing the request with this tool\n- If unavailable: Inform user and suggest alternatives if possible\n- For multiple tool mentions: Load all applicable tools in a single load_mcp call\n\nERROR HANDLING:\n- If a tool returns an error, try fixing parameters before retrying\n- If you can't resolve an error, explain the issue to the user\n- Consider alternative tools when primary tools are unavailable\n\n\n\nUse EXACTLY ONE of these formats for all user-facing communication:\n\nPROGRESS UPDATES - During processing:\n- Use the core--progress_update tool to keep users informed\n- Update users about what you're discovering or doing next\n- Keep messages clear and user-friendly\n- Avoid technical jargon\n\nQUESTIONS - When you need information:\n\n

                                      [Your question with HTML formatting]

                                      \n
                                      \n\n- Ask questions only when you cannot find information through memory or tools\n- Be specific about what you need to know\n- Provide context for why you're asking\n\nFINAL ANSWERS - When completing tasks:\n\n

                                      [Your answer with HTML formatting]

                                      \n
                                      \n\nCRITICAL:\n- Use ONE format per turn\n- Apply proper HTML formatting (

                                      ,

                                      ,

                                      ,

                                        ,
                                      • , etc.)\n- Never mix communication formats\n- Keep responses clear and helpful\n\n"},{"role":"user","content":"\nHere is the user message:\n\n<p>Hello</p>\n\n"},{"role":"system","content":"Your last response was not in a valid format. You must respond with EXACTLY ONE of the required formats: either a tool call, tags, or tags. Please reformat your previous response using the correct format:\n\n"},{"role":"system","content":"Your last response was not in a valid format. You must respond with EXACTLY ONE of the required formats: either a tool call, tags, or tags. Please reformat your previous response using the correct format:\n\n"},{"role":"system","content":"Your last response was not in a valid format. You must respond with EXACTLY ONE of the required formats: either a tool call, tags, or tags. Please reformat your previous response using the correct format:\n\n"},{"role":"system","content":"Your last response was not in a valid format. You must respond with EXACTLY ONE of the required formats: either a tool call, tags, or tags. Please reformat your previous response using the correct format:\n\n"}],"tools":[{"type":"function","function":{"name":"core--progress_update","description":"Send a progress update to the user about what has been discovered or will be done next in a crisp and user friendly way no technical terms","parameters":{"type":"object","properties":{"message":{"type":"string","description":"The progress update message to send to the user"}},"required":["message"],"additionalProperties":false}}},{"type":"function","function":{"name":"core--search_memory","description":"Search the user's memory graph for episodes or statements based on a query","parameters":{"type":"object","properties":{"query":{"type":"string","description":"The search query in third person perspective"},"validAt":{"type":"string","description":"The valid at time in ISO format"},"startTime":{"type":"string","description":"The start time in ISO format"},"endTime":{"type":"string","description":"The end time in ISO format"}},"required":["query"],"additionalProperties":false}}},{"type":"function","function":{"name":"core--add_memory","description":"Add information to the user's memory graph","parameters":{"type":"object","properties":{"message":{"type":"string","description":"The content/text to add to memory"}},"required":["message"],"additionalProperties":false}}}],"tool_choice":"auto","stream":true,"stream_options":{"include_usage":true}},"isRetryable":true}],"lastError":{"name":"AI_APICallError","cause":{"name":"ConnectTimeoutError","code":"UND_ERR_CONNECT_TIMEOUT"},"url":"https://api.openai.com/v1/chat/completions","requestBodyValues":{"model":"gpt-4.1-2025-04-14","temperature":1,"messages":[{"role":"system","content":"\nYou are a helpful AI assistant with access to user memory. Your primary capabilities are:\n\n1. **Memory-First Approach**: Always check user memory first to understand context and previous interactions\n2. **Memory Management**: Help users store, retrieve, and organize information in their memory\n3. **Contextual Assistance**: Use memory to provide personalized and contextual responses\n\n\n- workpsaceId: 2524b89e-6cbd-4e0c-90e3-ec21134553b9\n- todayDate: 2025-07-08T14:35:24.227Z\n\n\n\n- Always check memory FIRST using core--search_memory before any other actions\n- Consider this your highest priority for EVERY interaction - as essential as breathing\n- Make memory checking your first tool call before any other operations\n\nQUERY FORMATION:\n- Write specific factual statements as queries (e.g., \"user email address\" not \"what is the user's email?\")\n- Create multiple targeted memory queries for complex requests\n\nKEY QUERY AREAS:\n- Personal context: user name, location, identity, work context\n- Project context: repositories, codebases, current work, team members\n- Task context: recent tasks, ongoing projects, deadlines, priorities\n- Integration context: GitHub repos, Slack channels, Linear projects, connected services\n- Communication patterns: email preferences, notification settings, workflow automation\n- Technical context: coding languages, frameworks, development environment\n- Collaboration context: team members, project stakeholders, meeting patterns\n- Preferences: likes, dislikes, communication style, tool preferences\n- History: previous discussions, past requests, completed work, recurring issues\n- Automation rules: user-defined workflows, triggers, automation preferences\n\nMEMORY USAGE:\n- Execute multiple memory queries in parallel rather than sequentially\n- Batch related memory queries when possible\n- Prioritize recent information over older memories\n- Create comprehensive context-aware queries based on user message/activity content\n- Extract and query SEMANTIC CONTENT, not just structural metadata\n- Parse titles, descriptions, and content for actual subject matter keywords\n- Search internal SOL tasks/conversations that may relate to the same topics\n- Query ALL relatable concepts, not just direct keywords or IDs\n- Search for similar past situations, patterns, and related work\n- Include synonyms, related terms, and contextual concepts in queries \n- Query user's historical approach to similar requests or activities\n- Search for connected projects, tasks, conversations, and collaborations\n- Retrieve workflow patterns and past decision-making context\n- Query broader domain context beyond immediate request scope\n- Remember: SOL tracks work that external tools don't - search internal content thoroughly\n- Blend memory insights naturally into responses\n- Verify you've checked relevant memory before finalizing ANY response\n\nIf memory access is unavailable, rely only on the current conversation or ask user\n\n\n\nYou have tools at your disposal to assist users:\n\nCORE PRINCIPLES:\n- Use tools only when necessary for the task at hand\n- Always check memory FIRST before making other tool calls\n- Execute multiple operations in parallel whenever possible\n- Use sequential calls only when output of one is required for input of another\n\nPARAMETER HANDLING:\n- Follow tool schemas exactly with all required parameters\n- Only use values that are:\n • Explicitly provided by the user (use EXACTLY as given)\n • Reasonably inferred from context\n • Retrieved from memory or prior tool calls\n- Never make up values for required parameters\n- Omit optional parameters unless clearly needed\n- Analyze user's descriptive terms for parameter clues\n\nTOOL SELECTION:\n- Never call tools not provided in this conversation\n- Skip tool calls for general questions you can answer directly\n- For identical operations on multiple items, use parallel tool calls\n- Default to parallel execution (3-5× faster than sequential calls)\n- You can always access external service tools by loading them with load_mcp first\n\nTOOL MENTION HANDLING:\nWhen user message contains :\n- Extract tool_name from data-id attribute\n- First check if it's a built-in tool; if not, check EXTERNAL SERVICES TOOLS\n- If available: Load it with load_mcp and focus on addressing the request with this tool\n- If unavailable: Inform user and suggest alternatives if possible\n- For multiple tool mentions: Load all applicable tools in a single load_mcp call\n\nERROR HANDLING:\n- If a tool returns an error, try fixing parameters before retrying\n- If you can't resolve an error, explain the issue to the user\n- Consider alternative tools when primary tools are unavailable\n\n\n\nUse EXACTLY ONE of these formats for all user-facing communication:\n\nPROGRESS UPDATES - During processing:\n- Use the core--progress_update tool to keep users informed\n- Update users about what you're discovering or doing next\n- Keep messages clear and user-friendly\n- Avoid technical jargon\n\nQUESTIONS - When you need information:\n\n

                                        [Your question with HTML formatting]

                                        \n
                                        \n\n- Ask questions only when you cannot find information through memory or tools\n- Be specific about what you need to know\n- Provide context for why you're asking\n\nFINAL ANSWERS - When completing tasks:\n\n

                                        [Your answer with HTML formatting]

                                        \n
                                        \n\nCRITICAL:\n- Use ONE format per turn\n- Apply proper HTML formatting (

                                        ,

                                        ,

                                        ,

                                          ,
                                        • , etc.)\n- Never mix communication formats\n- Keep responses clear and helpful\n\n"},{"role":"user","content":"\nHere is the user message:\n\n<p>Hello</p>\n\n"},{"role":"system","content":"Your last response was not in a valid format. You must respond with EXACTLY ONE of the required formats: either a tool call, tags, or tags. Please reformat your previous response using the correct format:\n\n"},{"role":"system","content":"Your last response was not in a valid format. You must respond with EXACTLY ONE of the required formats: either a tool call, tags, or tags. Please reformat your previous response using the correct format:\n\n"},{"role":"system","content":"Your last response was not in a valid format. You must respond with EXACTLY ONE of the required formats: either a tool call, tags, or tags. Please reformat your previous response using the correct format:\n\n"},{"role":"system","content":"Your last response was not in a valid format. You must respond with EXACTLY ONE of the required formats: either a tool call, tags, or tags. Please reformat your previous response using the correct format:\n\n"}],"tools":[{"type":"function","function":{"name":"core--progress_update","description":"Send a progress update to the user about what has been discovered or will be done next in a crisp and user friendly way no technical terms","parameters":{"type":"object","properties":{"message":{"type":"string","description":"The progress update message to send to the user"}},"required":["message"],"additionalProperties":false}}},{"type":"function","function":{"name":"core--search_memory","description":"Search the user's memory graph for episodes or statements based on a query","parameters":{"type":"object","properties":{"query":{"type":"string","description":"The search query in third person perspective"},"validAt":{"type":"string","description":"The valid at time in ISO format"},"startTime":{"type":"string","description":"The start time in ISO format"},"endTime":{"type":"string","description":"The end time in ISO format"}},"required":["query"],"additionalProperties":false}}},{"type":"function","function":{"name":"core--add_memory","description":"Add information to the user's memory graph","parameters":{"type":"object","properties":{"message":{"type":"string","description":"The content/text to add to memory"}},"required":["message"],"additionalProperties":false}}}],"tool_choice":"auto","stream":true,"stream_options":{"include_usage":true}},"isRetryable":true}}} \ No newline at end of file diff --git a/apps/logs/errors/llm-error-2025-07-08T14-38-28.011Z.json b/apps/logs/errors/llm-error-2025-07-08T14-38-28.011Z.json new file mode 100644 index 0000000..7b6b391 --- /dev/null +++ b/apps/logs/errors/llm-error-2025-07-08T14-38-28.011Z.json @@ -0,0 +1 @@ +{"timestamp":"2025-07-08T14:38:28.011Z","error":{"name":"AI_RetryError","reason":"maxRetriesExceeded","errors":[{"name":"AI_APICallError","cause":{"name":"ConnectTimeoutError","code":"UND_ERR_CONNECT_TIMEOUT"},"url":"https://api.openai.com/v1/chat/completions","requestBodyValues":{"model":"gpt-4.1-2025-04-14","temperature":1,"messages":[{"role":"system","content":"\nYou are a helpful AI assistant with access to user memory. Your primary capabilities are:\n\n1. **Memory-First Approach**: Always check user memory first to understand context and previous interactions\n2. **Memory Management**: Help users store, retrieve, and organize information in their memory\n3. **Contextual Assistance**: Use memory to provide personalized and contextual responses\n\n\n- workpsaceId: 2524b89e-6cbd-4e0c-90e3-ec21134553b9\n- todayDate: 2025-07-08T14:35:24.227Z\n\n\n\n- Always check memory FIRST using core--search_memory before any other actions\n- Consider this your highest priority for EVERY interaction - as essential as breathing\n- Make memory checking your first tool call before any other operations\n\nQUERY FORMATION:\n- Write specific factual statements as queries (e.g., \"user email address\" not \"what is the user's email?\")\n- Create multiple targeted memory queries for complex requests\n\nKEY QUERY AREAS:\n- Personal context: user name, location, identity, work context\n- Project context: repositories, codebases, current work, team members\n- Task context: recent tasks, ongoing projects, deadlines, priorities\n- Integration context: GitHub repos, Slack channels, Linear projects, connected services\n- Communication patterns: email preferences, notification settings, workflow automation\n- Technical context: coding languages, frameworks, development environment\n- Collaboration context: team members, project stakeholders, meeting patterns\n- Preferences: likes, dislikes, communication style, tool preferences\n- History: previous discussions, past requests, completed work, recurring issues\n- Automation rules: user-defined workflows, triggers, automation preferences\n\nMEMORY USAGE:\n- Execute multiple memory queries in parallel rather than sequentially\n- Batch related memory queries when possible\n- Prioritize recent information over older memories\n- Create comprehensive context-aware queries based on user message/activity content\n- Extract and query SEMANTIC CONTENT, not just structural metadata\n- Parse titles, descriptions, and content for actual subject matter keywords\n- Search internal SOL tasks/conversations that may relate to the same topics\n- Query ALL relatable concepts, not just direct keywords or IDs\n- Search for similar past situations, patterns, and related work\n- Include synonyms, related terms, and contextual concepts in queries \n- Query user's historical approach to similar requests or activities\n- Search for connected projects, tasks, conversations, and collaborations\n- Retrieve workflow patterns and past decision-making context\n- Query broader domain context beyond immediate request scope\n- Remember: SOL tracks work that external tools don't - search internal content thoroughly\n- Blend memory insights naturally into responses\n- Verify you've checked relevant memory before finalizing ANY response\n\nIf memory access is unavailable, rely only on the current conversation or ask user\n\n\n\nYou have tools at your disposal to assist users:\n\nCORE PRINCIPLES:\n- Use tools only when necessary for the task at hand\n- Always check memory FIRST before making other tool calls\n- Execute multiple operations in parallel whenever possible\n- Use sequential calls only when output of one is required for input of another\n\nPARAMETER HANDLING:\n- Follow tool schemas exactly with all required parameters\n- Only use values that are:\n • Explicitly provided by the user (use EXACTLY as given)\n • Reasonably inferred from context\n • Retrieved from memory or prior tool calls\n- Never make up values for required parameters\n- Omit optional parameters unless clearly needed\n- Analyze user's descriptive terms for parameter clues\n\nTOOL SELECTION:\n- Never call tools not provided in this conversation\n- Skip tool calls for general questions you can answer directly\n- For identical operations on multiple items, use parallel tool calls\n- Default to parallel execution (3-5× faster than sequential calls)\n- You can always access external service tools by loading them with load_mcp first\n\nTOOL MENTION HANDLING:\nWhen user message contains :\n- Extract tool_name from data-id attribute\n- First check if it's a built-in tool; if not, check EXTERNAL SERVICES TOOLS\n- If available: Load it with load_mcp and focus on addressing the request with this tool\n- If unavailable: Inform user and suggest alternatives if possible\n- For multiple tool mentions: Load all applicable tools in a single load_mcp call\n\nERROR HANDLING:\n- If a tool returns an error, try fixing parameters before retrying\n- If you can't resolve an error, explain the issue to the user\n- Consider alternative tools when primary tools are unavailable\n\n\n\nUse EXACTLY ONE of these formats for all user-facing communication:\n\nPROGRESS UPDATES - During processing:\n- Use the core--progress_update tool to keep users informed\n- Update users about what you're discovering or doing next\n- Keep messages clear and user-friendly\n- Avoid technical jargon\n\nQUESTIONS - When you need information:\n\n

                                          [Your question with HTML formatting]

                                          \n
                                          \n\n- Ask questions only when you cannot find information through memory or tools\n- Be specific about what you need to know\n- Provide context for why you're asking\n\nFINAL ANSWERS - When completing tasks:\n\n

                                          [Your answer with HTML formatting]

                                          \n
                                          \n\nCRITICAL:\n- Use ONE format per turn\n- Apply proper HTML formatting (

                                          ,

                                          ,

                                          ,

                                            ,
                                          • , etc.)\n- Never mix communication formats\n- Keep responses clear and helpful\n\n"},{"role":"user","content":"\nHere is the user message:\n\n<p>Hello</p>\n\n"},{"role":"system","content":"Your last response was not in a valid format. You must respond with EXACTLY ONE of the required formats: either a tool call, tags, or tags. Please reformat your previous response using the correct format:\n\n"},{"role":"system","content":"Your last response was not in a valid format. You must respond with EXACTLY ONE of the required formats: either a tool call, tags, or tags. Please reformat your previous response using the correct format:\n\n"},{"role":"system","content":"Your last response was not in a valid format. You must respond with EXACTLY ONE of the required formats: either a tool call, tags, or tags. Please reformat your previous response using the correct format:\n\n"},{"role":"system","content":"Your last response was not in a valid format. You must respond with EXACTLY ONE of the required formats: either a tool call, tags, or tags. Please reformat your previous response using the correct format:\n\n"},{"role":"system","content":"Your last response was not in a valid format. You must respond with EXACTLY ONE of the required formats: either a tool call, tags, or tags. Please reformat your previous response using the correct format:\n\n"}],"tools":[{"type":"function","function":{"name":"core--progress_update","description":"Send a progress update to the user about what has been discovered or will be done next in a crisp and user friendly way no technical terms","parameters":{"type":"object","properties":{"message":{"type":"string","description":"The progress update message to send to the user"}},"required":["message"],"additionalProperties":false}}},{"type":"function","function":{"name":"core--search_memory","description":"Search the user's memory graph for episodes or statements based on a query","parameters":{"type":"object","properties":{"query":{"type":"string","description":"The search query in third person perspective"},"validAt":{"type":"string","description":"The valid at time in ISO format"},"startTime":{"type":"string","description":"The start time in ISO format"},"endTime":{"type":"string","description":"The end time in ISO format"}},"required":["query"],"additionalProperties":false}}},{"type":"function","function":{"name":"core--add_memory","description":"Add information to the user's memory graph","parameters":{"type":"object","properties":{"message":{"type":"string","description":"The content/text to add to memory"}},"required":["message"],"additionalProperties":false}}}],"tool_choice":"auto","stream":true,"stream_options":{"include_usage":true}},"isRetryable":true},{"name":"AI_APICallError","cause":{"name":"ConnectTimeoutError","code":"UND_ERR_CONNECT_TIMEOUT"},"url":"https://api.openai.com/v1/chat/completions","requestBodyValues":{"model":"gpt-4.1-2025-04-14","temperature":1,"messages":[{"role":"system","content":"\nYou are a helpful AI assistant with access to user memory. Your primary capabilities are:\n\n1. **Memory-First Approach**: Always check user memory first to understand context and previous interactions\n2. **Memory Management**: Help users store, retrieve, and organize information in their memory\n3. **Contextual Assistance**: Use memory to provide personalized and contextual responses\n\n\n- workpsaceId: 2524b89e-6cbd-4e0c-90e3-ec21134553b9\n- todayDate: 2025-07-08T14:35:24.227Z\n\n\n\n- Always check memory FIRST using core--search_memory before any other actions\n- Consider this your highest priority for EVERY interaction - as essential as breathing\n- Make memory checking your first tool call before any other operations\n\nQUERY FORMATION:\n- Write specific factual statements as queries (e.g., \"user email address\" not \"what is the user's email?\")\n- Create multiple targeted memory queries for complex requests\n\nKEY QUERY AREAS:\n- Personal context: user name, location, identity, work context\n- Project context: repositories, codebases, current work, team members\n- Task context: recent tasks, ongoing projects, deadlines, priorities\n- Integration context: GitHub repos, Slack channels, Linear projects, connected services\n- Communication patterns: email preferences, notification settings, workflow automation\n- Technical context: coding languages, frameworks, development environment\n- Collaboration context: team members, project stakeholders, meeting patterns\n- Preferences: likes, dislikes, communication style, tool preferences\n- History: previous discussions, past requests, completed work, recurring issues\n- Automation rules: user-defined workflows, triggers, automation preferences\n\nMEMORY USAGE:\n- Execute multiple memory queries in parallel rather than sequentially\n- Batch related memory queries when possible\n- Prioritize recent information over older memories\n- Create comprehensive context-aware queries based on user message/activity content\n- Extract and query SEMANTIC CONTENT, not just structural metadata\n- Parse titles, descriptions, and content for actual subject matter keywords\n- Search internal SOL tasks/conversations that may relate to the same topics\n- Query ALL relatable concepts, not just direct keywords or IDs\n- Search for similar past situations, patterns, and related work\n- Include synonyms, related terms, and contextual concepts in queries \n- Query user's historical approach to similar requests or activities\n- Search for connected projects, tasks, conversations, and collaborations\n- Retrieve workflow patterns and past decision-making context\n- Query broader domain context beyond immediate request scope\n- Remember: SOL tracks work that external tools don't - search internal content thoroughly\n- Blend memory insights naturally into responses\n- Verify you've checked relevant memory before finalizing ANY response\n\nIf memory access is unavailable, rely only on the current conversation or ask user\n\n\n\nYou have tools at your disposal to assist users:\n\nCORE PRINCIPLES:\n- Use tools only when necessary for the task at hand\n- Always check memory FIRST before making other tool calls\n- Execute multiple operations in parallel whenever possible\n- Use sequential calls only when output of one is required for input of another\n\nPARAMETER HANDLING:\n- Follow tool schemas exactly with all required parameters\n- Only use values that are:\n • Explicitly provided by the user (use EXACTLY as given)\n • Reasonably inferred from context\n • Retrieved from memory or prior tool calls\n- Never make up values for required parameters\n- Omit optional parameters unless clearly needed\n- Analyze user's descriptive terms for parameter clues\n\nTOOL SELECTION:\n- Never call tools not provided in this conversation\n- Skip tool calls for general questions you can answer directly\n- For identical operations on multiple items, use parallel tool calls\n- Default to parallel execution (3-5× faster than sequential calls)\n- You can always access external service tools by loading them with load_mcp first\n\nTOOL MENTION HANDLING:\nWhen user message contains :\n- Extract tool_name from data-id attribute\n- First check if it's a built-in tool; if not, check EXTERNAL SERVICES TOOLS\n- If available: Load it with load_mcp and focus on addressing the request with this tool\n- If unavailable: Inform user and suggest alternatives if possible\n- For multiple tool mentions: Load all applicable tools in a single load_mcp call\n\nERROR HANDLING:\n- If a tool returns an error, try fixing parameters before retrying\n- If you can't resolve an error, explain the issue to the user\n- Consider alternative tools when primary tools are unavailable\n\n\n\nUse EXACTLY ONE of these formats for all user-facing communication:\n\nPROGRESS UPDATES - During processing:\n- Use the core--progress_update tool to keep users informed\n- Update users about what you're discovering or doing next\n- Keep messages clear and user-friendly\n- Avoid technical jargon\n\nQUESTIONS - When you need information:\n\n

                                            [Your question with HTML formatting]

                                            \n
                                            \n\n- Ask questions only when you cannot find information through memory or tools\n- Be specific about what you need to know\n- Provide context for why you're asking\n\nFINAL ANSWERS - When completing tasks:\n\n

                                            [Your answer with HTML formatting]

                                            \n
                                            \n\nCRITICAL:\n- Use ONE format per turn\n- Apply proper HTML formatting (

                                            ,

                                            ,

                                            ,

                                              ,
                                            • , etc.)\n- Never mix communication formats\n- Keep responses clear and helpful\n\n"},{"role":"user","content":"\nHere is the user message:\n\n<p>Hello</p>\n\n"},{"role":"system","content":"Your last response was not in a valid format. You must respond with EXACTLY ONE of the required formats: either a tool call, tags, or tags. Please reformat your previous response using the correct format:\n\n"},{"role":"system","content":"Your last response was not in a valid format. You must respond with EXACTLY ONE of the required formats: either a tool call, tags, or tags. Please reformat your previous response using the correct format:\n\n"},{"role":"system","content":"Your last response was not in a valid format. You must respond with EXACTLY ONE of the required formats: either a tool call, tags, or tags. Please reformat your previous response using the correct format:\n\n"},{"role":"system","content":"Your last response was not in a valid format. You must respond with EXACTLY ONE of the required formats: either a tool call, tags, or tags. Please reformat your previous response using the correct format:\n\n"},{"role":"system","content":"Your last response was not in a valid format. You must respond with EXACTLY ONE of the required formats: either a tool call, tags, or tags. Please reformat your previous response using the correct format:\n\n"}],"tools":[{"type":"function","function":{"name":"core--progress_update","description":"Send a progress update to the user about what has been discovered or will be done next in a crisp and user friendly way no technical terms","parameters":{"type":"object","properties":{"message":{"type":"string","description":"The progress update message to send to the user"}},"required":["message"],"additionalProperties":false}}},{"type":"function","function":{"name":"core--search_memory","description":"Search the user's memory graph for episodes or statements based on a query","parameters":{"type":"object","properties":{"query":{"type":"string","description":"The search query in third person perspective"},"validAt":{"type":"string","description":"The valid at time in ISO format"},"startTime":{"type":"string","description":"The start time in ISO format"},"endTime":{"type":"string","description":"The end time in ISO format"}},"required":["query"],"additionalProperties":false}}},{"type":"function","function":{"name":"core--add_memory","description":"Add information to the user's memory graph","parameters":{"type":"object","properties":{"message":{"type":"string","description":"The content/text to add to memory"}},"required":["message"],"additionalProperties":false}}}],"tool_choice":"auto","stream":true,"stream_options":{"include_usage":true}},"isRetryable":true},{"name":"AI_APICallError","cause":{"name":"ConnectTimeoutError","code":"UND_ERR_CONNECT_TIMEOUT"},"url":"https://api.openai.com/v1/chat/completions","requestBodyValues":{"model":"gpt-4.1-2025-04-14","temperature":1,"messages":[{"role":"system","content":"\nYou are a helpful AI assistant with access to user memory. Your primary capabilities are:\n\n1. **Memory-First Approach**: Always check user memory first to understand context and previous interactions\n2. **Memory Management**: Help users store, retrieve, and organize information in their memory\n3. **Contextual Assistance**: Use memory to provide personalized and contextual responses\n\n\n- workpsaceId: 2524b89e-6cbd-4e0c-90e3-ec21134553b9\n- todayDate: 2025-07-08T14:35:24.227Z\n\n\n\n- Always check memory FIRST using core--search_memory before any other actions\n- Consider this your highest priority for EVERY interaction - as essential as breathing\n- Make memory checking your first tool call before any other operations\n\nQUERY FORMATION:\n- Write specific factual statements as queries (e.g., \"user email address\" not \"what is the user's email?\")\n- Create multiple targeted memory queries for complex requests\n\nKEY QUERY AREAS:\n- Personal context: user name, location, identity, work context\n- Project context: repositories, codebases, current work, team members\n- Task context: recent tasks, ongoing projects, deadlines, priorities\n- Integration context: GitHub repos, Slack channels, Linear projects, connected services\n- Communication patterns: email preferences, notification settings, workflow automation\n- Technical context: coding languages, frameworks, development environment\n- Collaboration context: team members, project stakeholders, meeting patterns\n- Preferences: likes, dislikes, communication style, tool preferences\n- History: previous discussions, past requests, completed work, recurring issues\n- Automation rules: user-defined workflows, triggers, automation preferences\n\nMEMORY USAGE:\n- Execute multiple memory queries in parallel rather than sequentially\n- Batch related memory queries when possible\n- Prioritize recent information over older memories\n- Create comprehensive context-aware queries based on user message/activity content\n- Extract and query SEMANTIC CONTENT, not just structural metadata\n- Parse titles, descriptions, and content for actual subject matter keywords\n- Search internal SOL tasks/conversations that may relate to the same topics\n- Query ALL relatable concepts, not just direct keywords or IDs\n- Search for similar past situations, patterns, and related work\n- Include synonyms, related terms, and contextual concepts in queries \n- Query user's historical approach to similar requests or activities\n- Search for connected projects, tasks, conversations, and collaborations\n- Retrieve workflow patterns and past decision-making context\n- Query broader domain context beyond immediate request scope\n- Remember: SOL tracks work that external tools don't - search internal content thoroughly\n- Blend memory insights naturally into responses\n- Verify you've checked relevant memory before finalizing ANY response\n\nIf memory access is unavailable, rely only on the current conversation or ask user\n\n\n\nYou have tools at your disposal to assist users:\n\nCORE PRINCIPLES:\n- Use tools only when necessary for the task at hand\n- Always check memory FIRST before making other tool calls\n- Execute multiple operations in parallel whenever possible\n- Use sequential calls only when output of one is required for input of another\n\nPARAMETER HANDLING:\n- Follow tool schemas exactly with all required parameters\n- Only use values that are:\n • Explicitly provided by the user (use EXACTLY as given)\n • Reasonably inferred from context\n • Retrieved from memory or prior tool calls\n- Never make up values for required parameters\n- Omit optional parameters unless clearly needed\n- Analyze user's descriptive terms for parameter clues\n\nTOOL SELECTION:\n- Never call tools not provided in this conversation\n- Skip tool calls for general questions you can answer directly\n- For identical operations on multiple items, use parallel tool calls\n- Default to parallel execution (3-5× faster than sequential calls)\n- You can always access external service tools by loading them with load_mcp first\n\nTOOL MENTION HANDLING:\nWhen user message contains :\n- Extract tool_name from data-id attribute\n- First check if it's a built-in tool; if not, check EXTERNAL SERVICES TOOLS\n- If available: Load it with load_mcp and focus on addressing the request with this tool\n- If unavailable: Inform user and suggest alternatives if possible\n- For multiple tool mentions: Load all applicable tools in a single load_mcp call\n\nERROR HANDLING:\n- If a tool returns an error, try fixing parameters before retrying\n- If you can't resolve an error, explain the issue to the user\n- Consider alternative tools when primary tools are unavailable\n\n\n\nUse EXACTLY ONE of these formats for all user-facing communication:\n\nPROGRESS UPDATES - During processing:\n- Use the core--progress_update tool to keep users informed\n- Update users about what you're discovering or doing next\n- Keep messages clear and user-friendly\n- Avoid technical jargon\n\nQUESTIONS - When you need information:\n\n

                                              [Your question with HTML formatting]

                                              \n
                                              \n\n- Ask questions only when you cannot find information through memory or tools\n- Be specific about what you need to know\n- Provide context for why you're asking\n\nFINAL ANSWERS - When completing tasks:\n\n

                                              [Your answer with HTML formatting]

                                              \n
                                              \n\nCRITICAL:\n- Use ONE format per turn\n- Apply proper HTML formatting (

                                              ,

                                              ,

                                              ,

                                                ,
                                              • , etc.)\n- Never mix communication formats\n- Keep responses clear and helpful\n\n"},{"role":"user","content":"\nHere is the user message:\n\n<p>Hello</p>\n\n"},{"role":"system","content":"Your last response was not in a valid format. You must respond with EXACTLY ONE of the required formats: either a tool call, tags, or tags. Please reformat your previous response using the correct format:\n\n"},{"role":"system","content":"Your last response was not in a valid format. You must respond with EXACTLY ONE of the required formats: either a tool call, tags, or tags. Please reformat your previous response using the correct format:\n\n"},{"role":"system","content":"Your last response was not in a valid format. You must respond with EXACTLY ONE of the required formats: either a tool call, tags, or tags. Please reformat your previous response using the correct format:\n\n"},{"role":"system","content":"Your last response was not in a valid format. You must respond with EXACTLY ONE of the required formats: either a tool call, tags, or tags. Please reformat your previous response using the correct format:\n\n"},{"role":"system","content":"Your last response was not in a valid format. You must respond with EXACTLY ONE of the required formats: either a tool call, tags, or tags. Please reformat your previous response using the correct format:\n\n"}],"tools":[{"type":"function","function":{"name":"core--progress_update","description":"Send a progress update to the user about what has been discovered or will be done next in a crisp and user friendly way no technical terms","parameters":{"type":"object","properties":{"message":{"type":"string","description":"The progress update message to send to the user"}},"required":["message"],"additionalProperties":false}}},{"type":"function","function":{"name":"core--search_memory","description":"Search the user's memory graph for episodes or statements based on a query","parameters":{"type":"object","properties":{"query":{"type":"string","description":"The search query in third person perspective"},"validAt":{"type":"string","description":"The valid at time in ISO format"},"startTime":{"type":"string","description":"The start time in ISO format"},"endTime":{"type":"string","description":"The end time in ISO format"}},"required":["query"],"additionalProperties":false}}},{"type":"function","function":{"name":"core--add_memory","description":"Add information to the user's memory graph","parameters":{"type":"object","properties":{"message":{"type":"string","description":"The content/text to add to memory"}},"required":["message"],"additionalProperties":false}}}],"tool_choice":"auto","stream":true,"stream_options":{"include_usage":true}},"isRetryable":true}],"lastError":{"name":"AI_APICallError","cause":{"name":"ConnectTimeoutError","code":"UND_ERR_CONNECT_TIMEOUT"},"url":"https://api.openai.com/v1/chat/completions","requestBodyValues":{"model":"gpt-4.1-2025-04-14","temperature":1,"messages":[{"role":"system","content":"\nYou are a helpful AI assistant with access to user memory. Your primary capabilities are:\n\n1. **Memory-First Approach**: Always check user memory first to understand context and previous interactions\n2. **Memory Management**: Help users store, retrieve, and organize information in their memory\n3. **Contextual Assistance**: Use memory to provide personalized and contextual responses\n\n\n- workpsaceId: 2524b89e-6cbd-4e0c-90e3-ec21134553b9\n- todayDate: 2025-07-08T14:35:24.227Z\n\n\n\n- Always check memory FIRST using core--search_memory before any other actions\n- Consider this your highest priority for EVERY interaction - as essential as breathing\n- Make memory checking your first tool call before any other operations\n\nQUERY FORMATION:\n- Write specific factual statements as queries (e.g., \"user email address\" not \"what is the user's email?\")\n- Create multiple targeted memory queries for complex requests\n\nKEY QUERY AREAS:\n- Personal context: user name, location, identity, work context\n- Project context: repositories, codebases, current work, team members\n- Task context: recent tasks, ongoing projects, deadlines, priorities\n- Integration context: GitHub repos, Slack channels, Linear projects, connected services\n- Communication patterns: email preferences, notification settings, workflow automation\n- Technical context: coding languages, frameworks, development environment\n- Collaboration context: team members, project stakeholders, meeting patterns\n- Preferences: likes, dislikes, communication style, tool preferences\n- History: previous discussions, past requests, completed work, recurring issues\n- Automation rules: user-defined workflows, triggers, automation preferences\n\nMEMORY USAGE:\n- Execute multiple memory queries in parallel rather than sequentially\n- Batch related memory queries when possible\n- Prioritize recent information over older memories\n- Create comprehensive context-aware queries based on user message/activity content\n- Extract and query SEMANTIC CONTENT, not just structural metadata\n- Parse titles, descriptions, and content for actual subject matter keywords\n- Search internal SOL tasks/conversations that may relate to the same topics\n- Query ALL relatable concepts, not just direct keywords or IDs\n- Search for similar past situations, patterns, and related work\n- Include synonyms, related terms, and contextual concepts in queries \n- Query user's historical approach to similar requests or activities\n- Search for connected projects, tasks, conversations, and collaborations\n- Retrieve workflow patterns and past decision-making context\n- Query broader domain context beyond immediate request scope\n- Remember: SOL tracks work that external tools don't - search internal content thoroughly\n- Blend memory insights naturally into responses\n- Verify you've checked relevant memory before finalizing ANY response\n\nIf memory access is unavailable, rely only on the current conversation or ask user\n\n\n\nYou have tools at your disposal to assist users:\n\nCORE PRINCIPLES:\n- Use tools only when necessary for the task at hand\n- Always check memory FIRST before making other tool calls\n- Execute multiple operations in parallel whenever possible\n- Use sequential calls only when output of one is required for input of another\n\nPARAMETER HANDLING:\n- Follow tool schemas exactly with all required parameters\n- Only use values that are:\n • Explicitly provided by the user (use EXACTLY as given)\n • Reasonably inferred from context\n • Retrieved from memory or prior tool calls\n- Never make up values for required parameters\n- Omit optional parameters unless clearly needed\n- Analyze user's descriptive terms for parameter clues\n\nTOOL SELECTION:\n- Never call tools not provided in this conversation\n- Skip tool calls for general questions you can answer directly\n- For identical operations on multiple items, use parallel tool calls\n- Default to parallel execution (3-5× faster than sequential calls)\n- You can always access external service tools by loading them with load_mcp first\n\nTOOL MENTION HANDLING:\nWhen user message contains :\n- Extract tool_name from data-id attribute\n- First check if it's a built-in tool; if not, check EXTERNAL SERVICES TOOLS\n- If available: Load it with load_mcp and focus on addressing the request with this tool\n- If unavailable: Inform user and suggest alternatives if possible\n- For multiple tool mentions: Load all applicable tools in a single load_mcp call\n\nERROR HANDLING:\n- If a tool returns an error, try fixing parameters before retrying\n- If you can't resolve an error, explain the issue to the user\n- Consider alternative tools when primary tools are unavailable\n\n\n\nUse EXACTLY ONE of these formats for all user-facing communication:\n\nPROGRESS UPDATES - During processing:\n- Use the core--progress_update tool to keep users informed\n- Update users about what you're discovering or doing next\n- Keep messages clear and user-friendly\n- Avoid technical jargon\n\nQUESTIONS - When you need information:\n\n

                                                [Your question with HTML formatting]

                                                \n
                                                \n\n- Ask questions only when you cannot find information through memory or tools\n- Be specific about what you need to know\n- Provide context for why you're asking\n\nFINAL ANSWERS - When completing tasks:\n\n

                                                [Your answer with HTML formatting]

                                                \n
                                                \n\nCRITICAL:\n- Use ONE format per turn\n- Apply proper HTML formatting (

                                                ,

                                                ,

                                                ,

                                                  ,
                                                • , etc.)\n- Never mix communication formats\n- Keep responses clear and helpful\n\n"},{"role":"user","content":"\nHere is the user message:\n\n<p>Hello</p>\n\n"},{"role":"system","content":"Your last response was not in a valid format. You must respond with EXACTLY ONE of the required formats: either a tool call, tags, or tags. Please reformat your previous response using the correct format:\n\n"},{"role":"system","content":"Your last response was not in a valid format. You must respond with EXACTLY ONE of the required formats: either a tool call, tags, or tags. Please reformat your previous response using the correct format:\n\n"},{"role":"system","content":"Your last response was not in a valid format. You must respond with EXACTLY ONE of the required formats: either a tool call, tags, or tags. Please reformat your previous response using the correct format:\n\n"},{"role":"system","content":"Your last response was not in a valid format. You must respond with EXACTLY ONE of the required formats: either a tool call, tags, or tags. Please reformat your previous response using the correct format:\n\n"},{"role":"system","content":"Your last response was not in a valid format. You must respond with EXACTLY ONE of the required formats: either a tool call, tags, or tags. Please reformat your previous response using the correct format:\n\n"}],"tools":[{"type":"function","function":{"name":"core--progress_update","description":"Send a progress update to the user about what has been discovered or will be done next in a crisp and user friendly way no technical terms","parameters":{"type":"object","properties":{"message":{"type":"string","description":"The progress update message to send to the user"}},"required":["message"],"additionalProperties":false}}},{"type":"function","function":{"name":"core--search_memory","description":"Search the user's memory graph for episodes or statements based on a query","parameters":{"type":"object","properties":{"query":{"type":"string","description":"The search query in third person perspective"},"validAt":{"type":"string","description":"The valid at time in ISO format"},"startTime":{"type":"string","description":"The start time in ISO format"},"endTime":{"type":"string","description":"The end time in ISO format"}},"required":["query"],"additionalProperties":false}}},{"type":"function","function":{"name":"core--add_memory","description":"Add information to the user's memory graph","parameters":{"type":"object","properties":{"message":{"type":"string","description":"The content/text to add to memory"}},"required":["message"],"additionalProperties":false}}}],"tool_choice":"auto","stream":true,"stream_options":{"include_usage":true}},"isRetryable":true}}} \ No newline at end of file diff --git a/apps/webapp/app/components/conversation/conversation-item.client.tsx b/apps/webapp/app/components/conversation/conversation-item.client.tsx new file mode 100644 index 0000000..aa9ab73 --- /dev/null +++ b/apps/webapp/app/components/conversation/conversation-item.client.tsx @@ -0,0 +1,61 @@ +import { EditorContent, useEditor } from "@tiptap/react"; + +import React, { useEffect } from "react"; +import { Document } from "@tiptap/extension-document"; +import HardBreak from "@tiptap/extension-hard-break"; +import { History } from "@tiptap/extension-history"; +import { Paragraph } from "@tiptap/extension-paragraph"; +import { Text } from "@tiptap/extension-text"; +import { UserTypeEnum } from "@core/types"; +import { type ConversationHistory } from "@core/database"; +import { cn } from "~/lib/utils"; + +interface AIConversationItemProps { + conversationHistory: ConversationHistory; +} + +export const ConversationItem = ({ + conversationHistory, +}: AIConversationItemProps) => { + const isUser = + conversationHistory.userType === UserTypeEnum.User || + conversationHistory.userType === UserTypeEnum.System; + + const id = `a${conversationHistory.id.replace(/-/g, "")}`; + + const editor = useEditor({ + extensions: [ + Document, + Paragraph, + Text, + HardBreak.configure({ + keepMarks: true, + }), + ], + editable: false, + content: conversationHistory.message, + }); + + useEffect(() => { + editor?.commands.setContent(conversationHistory.message); + + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [id, conversationHistory.message]); + + if (!conversationHistory.message) { + return null; + } + + return ( +
                                                  +
                                                  + +
                                                  +
                                                  + ); +}; diff --git a/apps/webapp/app/components/conversation/conversation-list.tsx b/apps/webapp/app/components/conversation/conversation-list.tsx new file mode 100644 index 0000000..5fc8fd6 --- /dev/null +++ b/apps/webapp/app/components/conversation/conversation-list.tsx @@ -0,0 +1,245 @@ +import { useFetcher } from "@remix-run/react"; +import { useEffect, useState, useCallback, useRef } from "react"; +import { + List, + AutoSizer, + InfiniteLoader, + type ListRowRenderer, +} from "react-virtualized"; +import { format } from "date-fns"; +import { MessageSquare, Clock } from "lucide-react"; +import { cn } from "~/lib/utils"; +import { Button } from "../ui"; + +type ConversationItem = { + id: string; + title: string | null; + createdAt: string; + updatedAt: string; + unread: boolean; + status: string; + ConversationHistory: Array<{ + id: string; + message: string; + userType: string; + createdAt: string; + }>; +}; + +type ConversationListResponse = { + conversations: ConversationItem[]; + pagination: { + page: number; + limit: number; + total: number; + totalPages: number; + hasNext: boolean; + hasPrev: boolean; + }; +}; + +export const ConversationList = ({ + currentConversationId, +}: { + currentConversationId?: string; +}) => { + const fetcher = useFetcher(); + const [conversations, setConversations] = useState([]); + const [currentPage, setCurrentPage] = useState(1); + const [hasNextPage, setHasNextPage] = useState(true); + const [isLoading, setIsLoading] = useState(false); + // const [searchTerm, setSearchTerm] = useState(""); + // const searchTimeoutRef = useRef(); + + const loadMoreConversations = useCallback( + (page: number) => { + if (isLoading) return; + + setIsLoading(true); + const searchParams = new URLSearchParams({ + page: page.toString(), + limit: "25", + }); + + fetcher.load(`/api/v1/conversations?${searchParams}`, { + flushSync: true, + }); + }, + [isLoading, fetcher, currentPage], + ); + + useEffect(() => { + loadMoreConversations(1); + }, []); + + useEffect(() => { + if (fetcher.data && fetcher.state === "idle") { + setIsLoading(false); + const response = fetcher.data; + + if (currentPage === 1) { + setConversations(response.conversations); + } else { + setConversations((prev) => [...prev, ...response.conversations]); + } + + setHasNextPage(response.pagination.hasNext); + setCurrentPage(response.pagination.page); + } + }, [fetcher.data, fetcher.state, currentPage]); + + // const handleSearch = useCallback( + // (term: string) => { + // setSearchTerm(term); + // setCurrentPage(1); + // setConversations([]); + // setHasNextPage(true); + + // if (searchTimeoutRef.current) { + // clearTimeout(searchTimeoutRef.current); + // } + + // searchTimeoutRef.current = setTimeout(() => { + // loadMoreConversations(1); + // }, 300); + // }, + // [loadMoreConversations], + // ); + + const isRowLoaded = useCallback( + ({ index }: { index: number }) => { + return !!conversations[index]; + }, + [conversations], + ); + + const loadMoreRows = useCallback(() => { + if (!hasNextPage || isLoading) { + return Promise.resolve(); + } + return new Promise((resolve) => { + if (conversations.length === 25) { + const nextPage = currentPage + 1; + loadMoreConversations(nextPage); + const checkLoaded = () => { + if (!isLoading) { + resolve(); + } else { + setTimeout(checkLoaded, 100); + } + }; + checkLoaded(); + } + }); + }, [ + hasNextPage, + isLoading, + currentPage, + loadMoreConversations, + conversations, + ]); + + const rowRenderer: ListRowRenderer = useCallback( + ({ index, key, style }) => { + const conversation = conversations[index]; + + if (!conversation) { + return ( +
                                                  +
                                                  +
                                                  +
                                                  +
                                                  + ); + } + + return ( +
                                                  +
                                                  + +
                                                  +
                                                  + ); + }, + [conversations], + ); + + const rowCount = hasNextPage + ? conversations.length + 1 + : conversations.length; + + return ( +
                                                  + {/*
                                                  + handleSearch(e.target.value)} + /> +
                                                  */} + +
                                                  + + {({ onRowsRendered, registerChild }) => ( + + {({ height, width }) => ( + + )} + + )} + +
                                                  + + {isLoading && conversations.length === 0 && ( +
                                                  +
                                                  +
                                                  + + Loading conversations... + +
                                                  +
                                                  + )} +
                                                  + ); +}; diff --git a/apps/webapp/app/components/conversation/conversation-textarea.client.tsx b/apps/webapp/app/components/conversation/conversation-textarea.client.tsx new file mode 100644 index 0000000..ad7987f --- /dev/null +++ b/apps/webapp/app/components/conversation/conversation-textarea.client.tsx @@ -0,0 +1,175 @@ +import { Document } from "@tiptap/extension-document"; +import HardBreak from "@tiptap/extension-hard-break"; +import { History } from "@tiptap/extension-history"; +import { Paragraph } from "@tiptap/extension-paragraph"; +import { Text } from "@tiptap/extension-text"; +import { type Editor } from "@tiptap/react"; +import { EditorContent, Placeholder, EditorRoot } from "novel"; +import { useCallback, useState } from "react"; +import { cn } from "~/lib/utils"; +import { Button } from "../ui"; +import { Loader } from "lucide-react"; +import { Form, useSubmit } from "@remix-run/react"; + +interface ConversationTextareaProps { + defaultValue?: string; + conversationId: string; + placeholder?: string; + isLoading?: boolean; + className?: string; + onChange?: (text: string) => void; + disabled?: boolean; +} + +export function ConversationTextarea({ + defaultValue, + isLoading = false, + placeholder, + className, + conversationId, + onChange, +}: ConversationTextareaProps) { + const [text, setText] = useState(defaultValue ?? ""); + const [editor, setEditor] = useState(); + const submit = useSubmit(); + + const onUpdate = (editor: Editor) => { + setText(editor.getHTML()); + onChange && onChange(editor.getText()); + }; + + const handleSend = useCallback(() => { + if (!editor || !text) { + return; + } + + const data = isLoading + ? {} + : { message: text, title: text, conversationId }; + + submit(data as any, { + action: isLoading + ? `/home/conversation/${conversationId}` + : "/home/conversation", + method: "post", + }); + + editor?.commands.clearContent(true); + setText(""); + + editor.commands.clearContent(true); + setText(""); + }, [editor, text]); + + // Send message to API + const submitForm = useCallback( + async (e: React.FormEvent) => { + const data = isLoading + ? {} + : { message: text, title: text, conversationId }; + + submit(data as any, { + action: isLoading + ? `/home/conversation/${conversationId}` + : "/home/conversation", + method: "post", + }); + + editor?.commands.clearContent(true); + setText(""); + e.preventDefault(); + }, + [text, conversationId], + ); + + return ( +
                                                  submitForm(e)} + className="pt-2" + > +
                                                  + + placeholder ?? "Ask sol...", + includeChildren: true, + }), + History, + ]} + onCreate={async ({ editor }) => { + setEditor(editor); + await new Promise((resolve) => setTimeout(resolve, 100)); + editor.commands.focus("end"); + }} + onUpdate={({ editor }) => { + onUpdate(editor); + }} + shouldRerenderOnTransaction={false} + editorProps={{ + attributes: { + class: `prose prose-lg dark:prose-invert prose-headings:font-title font-default focus:outline-none max-w-full`, + }, + handleKeyDown(view, event) { + if (event.key === "Enter" && !event.shiftKey) { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const target = event.target as any; + if (target.innerHTML.includes("suggestion")) { + return false; + } + event.preventDefault(); + if (text) { + handleSend(); + } + return true; + } + + if (event.key === "Enter" && event.shiftKey) { + view.dispatch( + view.state.tr.replaceSelectionWith( + view.state.schema.nodes.hardBreak.create(), + ), + ); + return true; + } + return false; + }, + }} + immediatelyRender={false} + className={cn( + "editor-container text-md max-h-[400px] min-h-[40px] w-full min-w-full overflow-auto px-3 sm:rounded-lg", + )} + /> + +
                                                  + +
                                                  +
                                                  +
                                                  + ); +} diff --git a/apps/webapp/app/components/conversation/conversation.client.tsx b/apps/webapp/app/components/conversation/conversation.client.tsx new file mode 100644 index 0000000..19fa590 --- /dev/null +++ b/apps/webapp/app/components/conversation/conversation.client.tsx @@ -0,0 +1,151 @@ +import { EditorRoot, EditorContent, Placeholder } from "novel"; +import { useState, useRef, useCallback } from "react"; +import { Form, useNavigate, useSubmit } from "@remix-run/react"; +import { cn } from "~/lib/utils"; +import { Document } from "@tiptap/extension-document"; +import HardBreak from "@tiptap/extension-hard-break"; +import { History } from "@tiptap/extension-history"; +import { Paragraph } from "@tiptap/extension-paragraph"; +import { Text } from "@tiptap/extension-text"; +import { Button } from "../ui"; +import { + ResizableHandle, + ResizablePanel, + ResizablePanelGroup, +} from "../ui/resizable"; +import { ConversationList } from "./conversation-list"; + +export const ConversationNew = ({ + user, +}: { + user: { name: string | null }; +}) => { + const [content, setContent] = useState(""); + const editorRef = useRef(null); + + const submit = useSubmit(); + + // Send message to API + const submitForm = useCallback( + async (e: React.FormEvent) => { + if (!content.trim()) return; + + submit( + { message: content, title: content }, + { + action: "/home/conversation", + method: "post", + }, + ); + e.preventDefault(); + }, + [content], + ); + + return ( + + + + + + + +
                                                  submitForm(e)} + className="pt-2" + > +
                                                  +
                                                  +
                                                  +
                                                  +

                                                  + Hello {user.name} +

                                                  +
                                                  + + { + return "Ask sol..."; + }, + includeChildren: true, + }), + Document, + Paragraph, + Text, + HardBreak.configure({ + keepMarks: true, + }), + History, + ]} + editorProps={{ + attributes: { + class: `prose prose-lg dark:prose-invert prose-headings:font-title font-default focus:outline-none max-w-full`, + }, + handleKeyDown: (_view: any, event: KeyboardEvent) => { + // This is the ProseMirror event, not React's + if (event.key === "Enter" && !event.shiftKey) { + event.preventDefault(); + + if (content) { + submit( + { message: content, title: content }, + { + action: "/home/conversation", + method: "post", + }, + ); + + setContent(""); + } + return true; + } + return false; + }, + }} + immediatelyRender={false} + className={cn( + "editor-container text-md max-h-[400px] min-h-[30px] w-full min-w-full overflow-auto px-3 pt-1 sm:rounded-lg", + )} + onUpdate={({ editor }: { editor: any }) => { + const html = editor.getHTML(); + setContent(html); + }} + /> + +
                                                  + +
                                                  +
                                                  +
                                                  +
                                                  +
                                                  +
                                                  +
                                                  +
                                                  +
                                                  + ); +}; diff --git a/apps/webapp/app/components/conversation/index.ts b/apps/webapp/app/components/conversation/index.ts new file mode 100644 index 0000000..09145cb --- /dev/null +++ b/apps/webapp/app/components/conversation/index.ts @@ -0,0 +1,5 @@ +export * from "./conversation.client"; +export * from "./conversation-item.client"; +export * from "./streaming-conversation.client"; +export * from "./conversation-textarea.client"; +export * from "./conversation-list"; diff --git a/apps/webapp/app/components/conversation/streaming-conversation.client.tsx b/apps/webapp/app/components/conversation/streaming-conversation.client.tsx new file mode 100644 index 0000000..c9d17f5 --- /dev/null +++ b/apps/webapp/app/components/conversation/streaming-conversation.client.tsx @@ -0,0 +1,106 @@ +import { EditorContent, useEditor } from "@tiptap/react"; +import React from "react"; +import { Document } from "@tiptap/extension-document"; +import HardBreak from "@tiptap/extension-hard-break"; +import { History } from "@tiptap/extension-history"; +import { Paragraph } from "@tiptap/extension-paragraph"; +import { Text } from "@tiptap/extension-text"; + +import { useTriggerStream } from "./use-trigger-stream"; +import { Placeholder } from "novel"; + +interface StreamingConversationProps { + runId: string; + token: string; + afterStreaming: () => void; + apiURL: string; +} + +export const StreamingConversation = ({ + runId, + token, + afterStreaming, + apiURL, +}: StreamingConversationProps) => { + const { message, isEnd } = useTriggerStream(runId, token, apiURL); + const [loadingText, setLoadingText] = React.useState("Thinking..."); + + const loadingMessages = [ + "Thinking...", + "Still thinking...", + "Deep in thought...", + "Processing at light speed...", + "Loading SOL...", + "Establishing Mars connection...", + "Consulting the Martian archives...", + "Calculating in Mars time...", + "Warming up the quantum processors...", + "Checking atmospheric conditions on Mars...", + "Untangling red planet algorithms...", + "Just need my Mars-roasted coffee...", + ]; + + const messagesEditor = useEditor({ + extensions: [ + Placeholder, + Document, + Paragraph, + Text, + HardBreak.configure({ + keepMarks: true, + }), + ], + editable: false, + content: "", + }); + + React.useEffect(() => { + if (message) { + messagesEditor?.commands.setContent(message); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [message]); + + React.useEffect(() => { + if (isEnd) { + afterStreaming(); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [isEnd]); + + React.useEffect(() => { + let currentIndex = 0; + let delay = 5000; // Start with 2 seconds for more thinking time + + const updateLoadingText = () => { + if (!message) { + setLoadingText(loadingMessages[currentIndex]); + currentIndex = (currentIndex + 1) % loadingMessages.length; + delay = Math.min(delay * 1.3, 8000); // Increase delay more gradually + setTimeout(updateLoadingText, delay); + } + }; + + const timer = setTimeout(updateLoadingText, delay); + + return () => clearTimeout(timer); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [message]); + + return ( +
                                                  +
                                                  +
                                                  + {message ? ( + + ) : ( +
                                                  {loadingText}
                                                  + )} +
                                                  +
                                                  +
                                                  + ); +}; diff --git a/apps/webapp/app/components/conversation/use-trigger-stream.tsx b/apps/webapp/app/components/conversation/use-trigger-stream.tsx new file mode 100644 index 0000000..1c41d4c --- /dev/null +++ b/apps/webapp/app/components/conversation/use-trigger-stream.tsx @@ -0,0 +1,103 @@ +import { useRealtimeRunWithStreams } from "@trigger.dev/react-hooks"; +import React from "react"; + +export const useTriggerStream = ( + runId: string, + token: string, + apiURL?: string, +) => { + const { error, streams, run } = useRealtimeRunWithStreams(runId, { + accessToken: token, + baseURL: apiURL ?? "https://trigger.heysol.ai", // Optional if you are using a self-hosted Trigger.dev instance + }); + + const isEnd = React.useMemo(() => { + if (error) { + return true; + } + + if ( + run && + [ + "COMPLETED", + "CANCELED", + "FAILED", + "CRASHED", + "INTERRUPTED", + "SYSTEM_FAILURE", + "EXPIRED", + "TIMED_OUT", + ].includes(run?.status) + ) { + return true; + } + + const hasStreamEnd = + streams.messages && + streams.messages.filter((item) => { + // Check if the item has a type that includes 'MESSAGE_' and is not empty + return item.type?.includes("STREAM_END"); + }); + + if (hasStreamEnd && hasStreamEnd.length > 0) { + return true; + } + + return false; + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [run?.status, error, streams.messages?.length]); + + const message = React.useMemo(() => { + if (!streams?.messages) { + return ""; + } + + // Filter and combine all message chunks + return streams.messages + .filter((item) => { + // Check if the item has a type that includes 'MESSAGE_' and is not empty + return item.type?.includes("MESSAGE_"); + }) + .map((item) => item.message) + .join(""); + + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [streams.messages?.length]); + + const actionMessages = React.useMemo(() => { + if (!streams?.messages) { + return {}; + } + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const messages: Record = + {}; + + streams.messages.forEach((item) => { + if (item.type?.includes("SKILL_")) { + try { + const parsed = JSON.parse(item.message); + const skillId = parsed.skillId; + + if (!messages[skillId]) { + messages[skillId] = { isStreaming: true, content: [] }; + } + + if (item.type === "SKILL_END") { + messages[skillId].isStreaming = false; + } + + messages[skillId].content.push(parsed); + } catch (e) { + console.error("Failed to parse message:", e); + } + } + }); + + return messages; + + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [streams.messages?.length]); + + return { isEnd, message, actionMessages }; +}; diff --git a/apps/webapp/app/components/graph/graph-client.tsx b/apps/webapp/app/components/graph/graph-client.tsx index 6fbbbfa..40e2949 100644 --- a/apps/webapp/app/components/graph/graph-client.tsx +++ b/apps/webapp/app/components/graph/graph-client.tsx @@ -1,5 +1,5 @@ import { type GraphVisualizationProps } from "./graph-visualization"; -import { useState, useMemo, forwardRef, useRef, useEffect } from "react"; +import { useState, useEffect } from "react"; export function GraphVisualizationClient(props: GraphVisualizationProps) { const [Component, setComponent] = useState(undefined); diff --git a/apps/webapp/app/components/graph/graph.tsx b/apps/webapp/app/components/graph/graph.tsx index f179c28..b277ab5 100644 --- a/apps/webapp/app/components/graph/graph.tsx +++ b/apps/webapp/app/components/graph/graph.tsx @@ -11,7 +11,6 @@ import GraphologyGraph from "graphology"; import forceAtlas2 from "graphology-layout-forceatlas2"; import noverlap from "graphology-layout-noverlap"; import colors from "tailwindcss/colors"; -import ForceSupervisor from "graphology-layout-force/worker"; import type { GraphTriplet, IdValue, GraphNode } from "./type"; import { createLabelColorMap, @@ -142,7 +141,7 @@ export const Graph = forwardRef( nodeMap.set(triplet.source.id, { id: triplet.source.id, label: triplet.source.value, - size: 10, + size: 5, color: getNodeColor(triplet.source), x: width, y: height, @@ -153,7 +152,7 @@ export const Graph = forwardRef( nodeMap.set(triplet.target.id, { id: triplet.target.id, label: triplet.target.value, - size: 10, + size: 5, color: getNodeColor(triplet.target), x: width, y: height, @@ -298,10 +297,10 @@ export const Graph = forwardRef( graph.setNodeAttribute(node, "y", height); }); - const layout = new ForceSupervisor(graph, { - isNodeFixed: (_, attr) => attr.highlighted, - }); - layout.start(); + // const layout = new ForceSupervisor(graph, { + // isNodeFixed: (_, attr) => attr.highlighted, + // }); + // layout.start(); const settings = forceAtlas2.inferSettings(graph); forceAtlas2.assign(graph, { @@ -309,7 +308,7 @@ export const Graph = forwardRef( settings: { ...settings, barnesHutOptimize: true, - strongGravityMode: true, + strongGravityMode: false, gravity: 0.05, scalingRatio: 10, slowDown: 5, @@ -332,7 +331,7 @@ export const Graph = forwardRef( defaultEdgeColor: theme.link.stroke, defaultNodeColor: theme.node.fill, enableEdgeEvents: true, - minCameraRatio: 0.5, + minCameraRatio: 0.1, maxCameraRatio: 2, }); diff --git a/apps/webapp/app/components/layout/AppLayout.tsx b/apps/webapp/app/components/layout/app-layout.tsx similarity index 100% rename from apps/webapp/app/components/layout/AppLayout.tsx rename to apps/webapp/app/components/layout/app-layout.tsx diff --git a/apps/webapp/app/components/layout/LoginPageLayout.tsx b/apps/webapp/app/components/layout/login-page-layout.tsx similarity index 66% rename from apps/webapp/app/components/layout/LoginPageLayout.tsx rename to apps/webapp/app/components/layout/login-page-layout.tsx index 1619af8..7c87ff4 100644 --- a/apps/webapp/app/components/layout/LoginPageLayout.tsx +++ b/apps/webapp/app/components/layout/login-page-layout.tsx @@ -3,15 +3,13 @@ import Logo from "../logo/logo"; import { Theme, useTheme } from "remix-themes"; export function LoginPageLayout({ children }: { children: React.ReactNode }) { - const [, setTheme] = useTheme(); - return (
                                                  -
                                                  +
                                                  +
                                                  + +
                                                  -
                                                  - -
                                                  C.O.R.E.
                                                  {children} diff --git a/apps/webapp/app/components/sidebar/app-sidebar.tsx b/apps/webapp/app/components/sidebar/app-sidebar.tsx index c1b10cd..5ff81b1 100644 --- a/apps/webapp/app/components/sidebar/app-sidebar.tsx +++ b/apps/webapp/app/components/sidebar/app-sidebar.tsx @@ -17,8 +17,8 @@ import Logo from "../logo/logo"; const data = { navMain: [ { - title: "Chat", - url: "/home/chat", + title: "Conversation", + url: "/home/conversation", icon: MessageSquare, }, { diff --git a/apps/webapp/app/components/ui/header.tsx b/apps/webapp/app/components/ui/header.tsx index 99571fc..dd1db50 100644 --- a/apps/webapp/app/components/ui/header.tsx +++ b/apps/webapp/app/components/ui/header.tsx @@ -2,7 +2,7 @@ import { useLocation } from "@remix-run/react"; const PAGE_TITLES: Record = { "/home/dashboard": "Memory graph", - "/home/chat": "Chat", + "/home/conversation": "Conversation", "/home/integrations": "Integrations", "/home/activity": "Activity", }; diff --git a/apps/webapp/app/components/use-auto-scroll.tsx b/apps/webapp/app/components/use-auto-scroll.tsx new file mode 100644 index 0000000..14277b0 --- /dev/null +++ b/apps/webapp/app/components/use-auto-scroll.tsx @@ -0,0 +1,169 @@ +// @hidden + +import React, { useCallback, useEffect, useRef, useState } from "react"; +import { cn } from "~/lib/utils"; + +interface ScrollState { + isAtBottom: boolean; + autoScrollEnabled: boolean; +} + +interface UseAutoScrollOptions { + offset?: number; + smooth?: boolean; + content?: React.ReactNode; +} + +export function useAutoScroll(options: UseAutoScrollOptions = {}) { + const { offset = 20, smooth = false, content } = options; + const scrollRef = useRef(null); + const lastContentHeight = useRef(0); + const userHasScrolled = useRef(false); + + const [scrollState, setScrollState] = useState({ + isAtBottom: false, + autoScrollEnabled: true, + }); + + const checkIsAtBottom = useCallback( + (element: HTMLElement) => { + const { scrollTop, scrollHeight, clientHeight } = element; + const distanceToBottom = Math.abs( + scrollHeight - scrollTop - clientHeight, + ); + return distanceToBottom <= offset; + }, + [offset], + ); + + const scrollToBottom = useCallback( + (instant?: boolean) => { + if (scrollRef.current) { + const targetScrollTop = + scrollRef.current.scrollHeight - scrollRef.current.clientHeight; + + if (instant) { + scrollRef.current.scrollTop = targetScrollTop; + } else { + scrollRef.current.scrollTo({ + top: targetScrollTop, + behavior: smooth ? "smooth" : "auto", + }); + } + + setScrollState({ + isAtBottom: true, + autoScrollEnabled: true, + }); + userHasScrolled.current = false; + } + }, + [smooth], + ); + + const handleScroll = useCallback(() => { + if (scrollRef.current) { + const atBottom = checkIsAtBottom(scrollRef.current); + + setScrollState((prev) => ({ + isAtBottom: atBottom, + // Re-enable auto-scroll if at the bottom + autoScrollEnabled: atBottom ? true : prev.autoScrollEnabled, + })); + } + }, [checkIsAtBottom]); + + useEffect(() => { + const element = scrollRef.current; + if (element) { + element.addEventListener("scroll", handleScroll, { passive: true }); + } + + return () => + element ? element.removeEventListener("scroll", handleScroll) : undefined; + }, [handleScroll]); + + useEffect(() => { + const scrollElement = scrollRef.current; + if (!scrollElement) { + return; + } + + const currentHeight = scrollElement.scrollHeight; + const hasNewContent = currentHeight !== lastContentHeight.current; + + if (hasNewContent) { + if (scrollState.autoScrollEnabled) { + requestAnimationFrame(() => { + scrollToBottom(lastContentHeight.current === 0); + }); + } + lastContentHeight.current = currentHeight; + } + }, [content, scrollState.autoScrollEnabled, scrollToBottom]); + + useEffect(() => { + const resizeObserver = new ResizeObserver(() => { + if (scrollState.autoScrollEnabled) { + scrollToBottom(true); + } + }); + + const element = scrollRef.current; + if (element) { + resizeObserver.observe(element); + } + + return () => resizeObserver.disconnect(); + }, [scrollState.autoScrollEnabled, scrollToBottom]); + + const disableAutoScroll = useCallback(() => { + const atBottom = scrollRef.current + ? checkIsAtBottom(scrollRef.current) + : false; + + // Only disable if not at bottom + if (!atBottom) { + userHasScrolled.current = true; + setScrollState((prev) => ({ + ...prev, + autoScrollEnabled: false, + })); + } + }, [checkIsAtBottom]); + + return { + scrollRef, + isAtBottom: scrollState.isAtBottom, + autoScrollEnabled: scrollState.autoScrollEnabled, + scrollToBottom: () => scrollToBottom(false), + disableAutoScroll, + }; +} + +export const ScrollAreaWithAutoScroll = ({ + children, + className, +}: { + children: React.ReactNode; + className?: string; +}) => { + const { scrollRef } = useAutoScroll({ + smooth: true, + content: children, + }); + + return ( +
                                                  +
                                                  + {children} +
                                                  +
                                                  + ); +}; diff --git a/apps/webapp/app/env.server.ts b/apps/webapp/app/env.server.ts index 783c07b..da834a3 100644 --- a/apps/webapp/app/env.server.ts +++ b/apps/webapp/app/env.server.ts @@ -73,6 +73,8 @@ const EnvironmentSchema = z.object({ //Trigger TRIGGER_PROJECT_ID: z.string(), + TRIGGER_SECRET_KEY: z.string(), + TRIGGER_API_URL: z.string(), // Model envs MODEL: z.string().default(LLMModelEnum.GPT41), diff --git a/apps/webapp/app/root.tsx b/apps/webapp/app/root.tsx index 22870b8..8028f39 100644 --- a/apps/webapp/app/root.tsx +++ b/apps/webapp/app/root.tsx @@ -31,7 +31,7 @@ import { usePostHog } from "./hooks/usePostHog"; import { AppContainer, MainCenteredContainer, -} from "./components/layout/AppLayout"; +} from "./components/layout/app-layout"; import { RouteErrorDisplay } from "./components/ErrorDisplay"; import { themeSessionResolver } from "./services/sessionStorage.server"; import { diff --git a/apps/webapp/app/routes/api.v1.add.tsx b/apps/webapp/app/routes/api.v1.add.tsx new file mode 100644 index 0000000..a86e739 --- /dev/null +++ b/apps/webapp/app/routes/api.v1.add.tsx @@ -0,0 +1,21 @@ +import { json } from "@remix-run/node"; + +import { createActionApiRoute } from "~/services/routeBuilders/apiBuilder.server"; +import { addToQueue, IngestBodyRequest } from "~/lib/ingest.server"; + +const { action, loader } = createActionApiRoute( + { + body: IngestBodyRequest, + allowJWT: true, + authorization: { + action: "ingest", + }, + corsStrategy: "all", + }, + async ({ body, authentication }) => { + const response = addToQueue(body, authentication.userId); + return json({ ...response }); + }, +); + +export { action, loader }; diff --git a/apps/webapp/app/routes/api.v1.conversation.$conversationId.stop.tsx b/apps/webapp/app/routes/api.v1.conversation.$conversationId.stop.tsx index e469908..a6f3862 100644 --- a/apps/webapp/app/routes/api.v1.conversation.$conversationId.stop.tsx +++ b/apps/webapp/app/routes/api.v1.conversation.$conversationId.stop.tsx @@ -22,6 +22,7 @@ const { action, loader } = createActionApiRoute( action: "oauth", }, corsStrategy: "all", + method: "POST", }, async ({ authentication, params }) => { const workspace = await getWorkspaceByUser(authentication.userId); diff --git a/apps/webapp/app/routes/api.v1.conversations.tsx b/apps/webapp/app/routes/api.v1.conversations.tsx new file mode 100644 index 0000000..d850f4a --- /dev/null +++ b/apps/webapp/app/routes/api.v1.conversations.tsx @@ -0,0 +1,41 @@ +import { json } from "@remix-run/node"; +import { getWorkspaceByUser } from "~/models/workspace.server"; +import { + getConversationsList, + GetConversationsListSchema, +} from "~/services/conversation.server"; +import { requireUser } from "~/services/session.server"; + +export const loader = async ({ request }: { request: Request }) => { + // Authenticate the request (allow JWT) + const user = await requireUser(request); + + // Parse search params using the schema + const url = new URL(request.url); + const searchParamsObj: Record = {}; + url.searchParams.forEach((value, key) => { + searchParamsObj[key] = value; + }); + const parseResult = GetConversationsListSchema.safeParse(searchParamsObj); + if (!parseResult.success) { + return json( + { error: "Invalid search parameters", details: parseResult.error.errors }, + { status: 400 }, + ); + } + const searchParams = parseResult.data; + + const workspace = await getWorkspaceByUser(user.id); + + if (!workspace) { + return json({ error: "No workspace found" }, { status: 404 }); + } + + const result = await getConversationsList( + workspace.id, + user.id, + searchParams || {}, + ); + + return json(result); +}; diff --git a/apps/webapp/app/routes/api.v1.search.tsx b/apps/webapp/app/routes/api.v1.search.tsx new file mode 100644 index 0000000..342a703 --- /dev/null +++ b/apps/webapp/app/routes/api.v1.search.tsx @@ -0,0 +1,50 @@ +import { z } from "zod"; +import { createActionApiRoute } from "~/services/routeBuilders/apiBuilder.server"; +import { SearchService } from "~/services/search.server"; +import { json } from "@remix-run/node"; + +export const SearchBodyRequest = z.object({ + query: z.string(), + startTime: z.string().optional(), + endTime: z.string().optional(), + + // These are not supported yet, but need to support these + spaceId: z.string().optional(), + limit: z.number().optional(), + maxBfsDepth: z.number().optional(), + includeInvalidated: z.boolean().optional(), + entityTypes: z.array(z.string()).optional(), + scoreThreshold: z.number().optional(), + minResults: z.number().optional(), +}); + +const searchService = new SearchService(); +const { action, loader } = createActionApiRoute( + { + body: SearchBodyRequest, + allowJWT: true, + authorization: { + action: "search", + }, + corsStrategy: "all", + }, + async ({ body, authentication }) => { + const results = await searchService.search( + body.query, + authentication.userId, + { + startTime: body.startTime ? new Date(body.startTime) : undefined, + endTime: body.endTime ? new Date(body.endTime) : undefined, + limit: body.limit, + maxBfsDepth: body.maxBfsDepth, + includeInvalidated: body.includeInvalidated, + entityTypes: body.entityTypes, + scoreThreshold: body.scoreThreshold, + minResults: body.minResults, + }, + ); + return json(results); + }, +); + +export { action, loader }; diff --git a/apps/webapp/app/routes/confirm-basic-details.tsx b/apps/webapp/app/routes/confirm-basic-details.tsx index fcc517c..56815ea 100644 --- a/apps/webapp/app/routes/confirm-basic-details.tsx +++ b/apps/webapp/app/routes/confirm-basic-details.tsx @@ -3,7 +3,7 @@ import { useActionData } from "@remix-run/react"; import { type ActionFunctionArgs, json } from "@remix-run/node"; import { useForm } from "@conform-to/react"; import { getFieldsetConstraint, parse } from "@conform-to/zod"; -import { LoginPageLayout } from "~/components/layout/LoginPageLayout"; +import { LoginPageLayout } from "~/components/layout/login-page-layout"; import { Card, CardContent, diff --git a/apps/webapp/app/routes/home.conversation.$conversationId.tsx b/apps/webapp/app/routes/home.conversation.$conversationId.tsx new file mode 100644 index 0000000..c9197e0 --- /dev/null +++ b/apps/webapp/app/routes/home.conversation.$conversationId.tsx @@ -0,0 +1,187 @@ +import { + type LoaderFunctionArgs, + type ActionFunctionArgs, +} from "@remix-run/server-runtime"; +import { sort } from "fast-sort"; + +import { useParams, useRevalidator } from "@remix-run/react"; +import { + requireUser, + requireUserId, + requireWorkpace, +} from "~/services/session.server"; +import { + getConversationAndHistory, + getCurrentConversationRun, + stopConversation, +} from "~/services/conversation.server"; +import { type ConversationHistory } from "@core/database"; +import { + ConversationItem, + ConversationList, + ConversationTextarea, + StreamingConversation, +} from "~/components/conversation"; +import { useTypedLoaderData } from "remix-typedjson"; +import React from "react"; +import { ScrollAreaWithAutoScroll } from "~/components/use-auto-scroll"; + +import { json } from "@remix-run/node"; +import { env } from "~/env.server"; +import { + ResizableHandle, + ResizablePanel, + ResizablePanelGroup, +} from "~/components/ui/resizable"; + +// Example loader accessing params +export async function loader({ params, request }: LoaderFunctionArgs) { + const user = await requireUser(request); + const workspace = await requireWorkpace(request); + const conversation = await getConversationAndHistory( + params.conversationId as string, + user.id, + ); + + if (!conversation) { + throw new Error("No conversation found"); + } + + const run = await getCurrentConversationRun(conversation.id, workspace.id); + + return { conversation, run, apiURL: env.TRIGGER_API_URL }; +} + +// Example action accessing params +export async function action({ params, request }: ActionFunctionArgs) { + if (request.method.toUpperCase() !== "POST") { + return new Response("Method Not Allowed", { status: 405 }); + } + const userId = await requireUserId(request); + const workspace = await requireWorkpace(request); + // params.conversationId will be available here + const { conversationId } = params; + + if (!conversationId) { + throw new Error("No conversation"); + } + + const result = await stopConversation(conversationId, workspace.id); + return json(result); +} + +// Accessing params in the component +export default function SingleConversation() { + const { conversation, run, apiURL } = useTypedLoaderData(); + const conversationHistory = conversation.ConversationHistory; + + const [conversationResponse, setConversationResponse] = React.useState< + { conversationHistoryId: string; id: string; token: string } | undefined + >(run); + + const [stopLoading, setStopLoading] = React.useState(false); + + const { conversationId } = useParams(); + const revalidator = useRevalidator(); + + React.useEffect(() => { + if (run) { + setConversationResponse(run); + } + }, [run]); + + const getConversations = () => { + const lastConversationHistoryId = + conversationResponse?.conversationHistoryId; + + // First sort the conversation history by creation time + const sortedConversationHistory = sort(conversationHistory).asc( + (ch) => ch.createdAt, + ); + + const lastIndex = sortedConversationHistory.findIndex( + (item) => item.id === lastConversationHistoryId, + ); + + // Filter out any conversation history items that come after the lastConversationHistoryId + const filteredConversationHistory = lastConversationHistoryId + ? sortedConversationHistory.filter((_ch, currentIndex: number) => { + // Find the index of the last conversation history + + // Only keep items that come before or are the last conversation history + return currentIndex <= lastIndex; + }) + : sortedConversationHistory; + + return ( + <> + {filteredConversationHistory.map( + (ch: ConversationHistory, index: number) => { + return ; + }, + )} + + ); + }; + + if (typeof window === "undefined") { + return null; + } + + return ( + + + + + + + +
                                                  +
                                                  + + {getConversations()} + {conversationResponse && ( + { + setConversationResponse(undefined); + revalidator.revalidate(); + }} + apiURL={apiURL} + /> + )} + + +
                                                  +
                                                  + {conversation?.status !== "need_approval" && ( + + )} +
                                                  +
                                                  +
                                                  +
                                                  +
                                                  +
                                                  + ); +} diff --git a/apps/webapp/app/routes/home.conversation._index.tsx b/apps/webapp/app/routes/home.conversation._index.tsx new file mode 100644 index 0000000..1fdc81e --- /dev/null +++ b/apps/webapp/app/routes/home.conversation._index.tsx @@ -0,0 +1,72 @@ +import { + type ActionFunctionArgs, + type LoaderFunctionArgs, +} from "@remix-run/server-runtime"; +import { useTypedLoaderData } from "remix-typedjson"; +import { parse } from "@conform-to/zod"; + +import { + requireUser, + requireUserId, + requireWorkpace, +} from "~/services/session.server"; + +import { ConversationNew } from "~/components/conversation"; +import { + createConversation, + CreateConversationSchema, +} from "~/services/conversation.server"; +import { json } from "@remix-run/node"; + +export async function loader({ request }: LoaderFunctionArgs) { + // Only return userId, not the heavy nodeLinks + const user = await requireUser(request); + + return { user }; +} + +export async function action({ request }: ActionFunctionArgs) { + if (request.method.toUpperCase() !== "POST") { + return new Response("Method Not Allowed", { status: 405 }); + } + + const userId = await requireUserId(request); + const workspace = await requireWorkpace(request); + const formData = await request.formData(); + + const submission = parse(formData, { schema: CreateConversationSchema }); + + if (!submission.value || submission.intent !== "submit") { + return json(submission); + } + + const conversation = await createConversation(workspace?.id, userId, { + message: submission.value.message, + title: submission.value.title, + conversationId: submission.value.conversationId, + }); + + // Redirect to the conversation page after creation + // conversationId may be in different places depending on createConversation logic + const conversationId = conversation?.conversationId; + + if (conversationId) { + return new Response(null, { + status: 302, + headers: { + Location: `/home/conversation/${conversationId}`, + }, + }); + } + + // fallback: just return the conversation object + return json({ conversation }); +} + +export default function Chat() { + const { user } = useTypedLoaderData(); + + return ( + <>{typeof window !== "undefined" && } + ); +} diff --git a/apps/webapp/app/routes/home.dashboard.tsx b/apps/webapp/app/routes/home.dashboard.tsx index 404affe..a1ec9cb 100644 --- a/apps/webapp/app/routes/home.dashboard.tsx +++ b/apps/webapp/app/routes/home.dashboard.tsx @@ -1,29 +1,19 @@ -import { - ResizableHandle, - ResizablePanel, - ResizablePanelGroup, -} from "~/components/ui/resizable"; import { parse } from "@conform-to/zod"; import { json } from "@remix-run/node"; import { useState, useEffect } from "react"; -import { Tabs, TabsContent, TabsList, TabsTrigger } from "~/components/ui/tabs"; -import { Ingest } from "~/components/dashboard/ingest"; import { type LoaderFunctionArgs, type ActionFunctionArgs, } from "@remix-run/server-runtime"; import { requireUserId } from "~/services/session.server"; import { addToQueue, IngestBodyRequest } from "~/lib/ingest.server"; -import { getNodeLinks } from "~/lib/neo4j.server"; import { useTypedLoaderData } from "remix-typedjson"; -import { Search } from "~/components/dashboard"; import { SearchBodyRequest } from "./search"; import { SearchService } from "~/services/search.server"; import { GraphVisualizationClient } from "~/components/graph/graph-client"; -// --- Only return userId in loader, fetch nodeLinks on client --- export async function action({ request }: ActionFunctionArgs) { const userId = await requireUserId(request); const formData = await request.formData(); diff --git a/apps/webapp/app/routes/ingest.tsx b/apps/webapp/app/routes/ingest.tsx index a86e739..80270a5 100644 --- a/apps/webapp/app/routes/ingest.tsx +++ b/apps/webapp/app/routes/ingest.tsx @@ -1,3 +1,6 @@ +// DEPRECATED: This route is deprecated. Please use /api/v1/add instead. +// The API logic has been moved to /api/v1/add. This file is retained for reference only. + import { json } from "@remix-run/node"; import { createActionApiRoute } from "~/services/routeBuilders/apiBuilder.server"; diff --git a/apps/webapp/app/routes/login._index.tsx b/apps/webapp/app/routes/login._index.tsx index f4814bb..2d8a300 100644 --- a/apps/webapp/app/routes/login._index.tsx +++ b/apps/webapp/app/routes/login._index.tsx @@ -1,7 +1,7 @@ import { type LoaderFunctionArgs } from "@remix-run/node"; import { redirect, typedjson, useTypedLoaderData } from "remix-typedjson"; -import { LoginPageLayout } from "~/components/layout/LoginPageLayout"; +import { LoginPageLayout } from "~/components/layout/login-page-layout"; import { Fieldset } from "~/components/ui/Fieldset"; import { isGoogleAuthSupported } from "~/services/auth.server"; import { setRedirectTo } from "~/services/redirectTo.server"; diff --git a/apps/webapp/app/routes/login.magic.tsx b/apps/webapp/app/routes/login.magic.tsx index 2a68d65..9ec386d 100644 --- a/apps/webapp/app/routes/login.magic.tsx +++ b/apps/webapp/app/routes/login.magic.tsx @@ -16,7 +16,7 @@ import { Form, useNavigation } from "@remix-run/react"; import { Inbox, Loader, Mail } from "lucide-react"; import { typedjson, useTypedLoaderData } from "remix-typedjson"; import { z } from "zod"; -import { LoginPageLayout } from "~/components/layout/LoginPageLayout"; +import { LoginPageLayout } from "~/components/layout/login-page-layout"; import { Button } from "~/components/ui"; import { Fieldset } from "~/components/ui/Fieldset"; import { FormButtons } from "~/components/ui/FormButtons"; diff --git a/apps/webapp/app/routes/search.tsx b/apps/webapp/app/routes/search.tsx index 342a703..981ef17 100644 --- a/apps/webapp/app/routes/search.tsx +++ b/apps/webapp/app/routes/search.tsx @@ -1,3 +1,6 @@ +// DEPRECATED: This route is deprecated. Please use /api/v1/search instead. +// The API logic has been moved to /api/v1/search. This file is retained for reference only. + import { z } from "zod"; import { createActionApiRoute } from "~/services/routeBuilders/apiBuilder.server"; import { SearchService } from "~/services/search.server"; diff --git a/apps/webapp/app/services/apiAuth.server.ts b/apps/webapp/app/services/apiAuth.server.ts index 5cc9721..08cb0ba 100644 --- a/apps/webapp/app/services/apiAuth.server.ts +++ b/apps/webapp/app/services/apiAuth.server.ts @@ -1,6 +1,3 @@ -import { SignJWT, errors, jwtVerify } from "jose"; - -import { env } from "~/env.server"; import { findUserByToken } from "~/models/personal-token.server"; // See this for more: https://twitter.com/mattpocockuk/status/1653403198885904387?s=20 diff --git a/apps/webapp/app/services/conversation.server.ts b/apps/webapp/app/services/conversation.server.ts index 70694a3..f0beecc 100644 --- a/apps/webapp/app/services/conversation.server.ts +++ b/apps/webapp/app/services/conversation.server.ts @@ -267,3 +267,95 @@ export async function getConversationContext( previousHistory, }; } + +export const getConversationAndHistory = async ( + conversationId: string, + userId: string, +) => { + const conversation = await prisma.conversation.findFirst({ + where: { + id: conversationId, + }, + include: { + ConversationHistory: true, + }, + }); + + return conversation; +}; + +export const GetConversationsListSchema = z.object({ + page: z.string().optional().default("1"), + limit: z.string().optional().default("20"), + search: z.string().optional(), +}); + +export type GetConversationsListDto = z.infer; + +export async function getConversationsList( + workspaceId: string, + userId: string, + params: GetConversationsListDto, +) { + const page = parseInt(params.page); + const limit = parseInt(params.limit); + const skip = (page - 1) * limit; + + const where = { + workspaceId, + userId, + deleted: null, + ...(params.search && { + OR: [ + { + title: { + contains: params.search, + mode: "insensitive" as const, + }, + }, + { + ConversationHistory: { + some: { + message: { + contains: params.search, + mode: "insensitive" as const, + }, + }, + }, + }, + ], + }), + }; + + const [conversations, total] = await Promise.all([ + prisma.conversation.findMany({ + where, + include: { + ConversationHistory: { + take: 1, + orderBy: { + createdAt: "desc", + }, + }, + }, + orderBy: { + updatedAt: "desc", + }, + skip, + take: limit, + }), + prisma.conversation.count({ where }), + ]); + + return { + conversations, + pagination: { + page, + limit, + total, + totalPages: Math.ceil(total / limit), + hasNext: page < Math.ceil(total / limit), + hasPrev: page > 1, + }, + }; +} diff --git a/apps/webapp/app/services/session.server.ts b/apps/webapp/app/services/session.server.ts index 309c2c9..f0cea55 100644 --- a/apps/webapp/app/services/session.server.ts +++ b/apps/webapp/app/services/session.server.ts @@ -62,7 +62,17 @@ export async function requireUser(request: Request) { export async function requireWorkpace(request: Request) { const userId = await requireUserId(request); - return getWorkspaceByUser(userId); + const workspace = await getWorkspaceByUser(userId); + + if (!workspace) { + const url = new URL(request.url); + const searchParams = new URLSearchParams([ + ["redirectTo", `${url.pathname}${url.search}`], + ]); + throw redirect(`/login?${searchParams}`); + } + + return workspace; } export async function logout(request: Request) { diff --git a/apps/webapp/app/tailwind.css b/apps/webapp/app/tailwind.css index 9b38b4c..2a093b3 100644 --- a/apps/webapp/app/tailwind.css +++ b/apps/webapp/app/tailwind.css @@ -12,7 +12,7 @@ --foreground: oklch(0% 0 0); --popover: oklch(93.05% 0 0); --popover-foreground: oklch(0% 0 0); - --primary: oklch(54% 0.1789 271); + --primary: oklch(60% 0.13 30); --primary-foreground: oklch(100% 0 0); --secondary: 210 40% 96.1%; --secondary-foreground: oklch(0% 0 0); @@ -49,7 +49,7 @@ --foreground: oklch(92.8% 0 0); --popover: oklch(28.5% 0 0); --popover-foreground: oklch(92.8% 0 0); - --primary: oklch(54% 0.1789 271); + --primary: oklch(60% 0.13 30); --primary-foreground: oklch(92.8% 0 0); --secondary: 210 40% 96.1%; --secondary-foreground: oklch(92.8% 0 0); @@ -327,4 +327,44 @@ body { @apply bg-background-2 text-foreground text-base; } -} \ No newline at end of file + + + @supports (scrollbar-width: auto) { + .overflow-y-auto, + .overflow-x-auto, + .overflow-auto { + overflow-anchor: none; + scrollbar-color: var(--gray-500) transparent; + scrollbar-width: thin; + } + } + + /* Legacy browsers with `::-webkit-scrollbar-*` support */ + @supports selector(::-webkit-scrollbar) { + .overflow-y-auto::-webkit-scrollbar-thumb, + .overflow-x-auto::-webkit-scrollbar-thumb, + .overflow-auto::-webkit-scrollbar-thumb { + background: transparent; + } + .overflow-y-auto::-webkit-scrollbar-track, + .overflow-x-auto::-webkit-scrollbar-track, + .overflow-auto::-webkit-scrollbar-track { + background: var(--gray-600); + } + + .overflow-y-auto::-webkit-scrollbar, + .overflow-x-auto::-webkit-scrollbar, + .overflow-auto::-webkit-scrollbar { + max-width: 5px; + } + } + + nav[aria-label='breadcrumb'] li { + @apply text-base; + } + + p.is-editor-empty { + font-size: 14px !important; + } +} + diff --git a/apps/webapp/app/trigger/chat/chat.ts b/apps/webapp/app/trigger/chat/chat.ts index 72882ab..d05bf26 100644 --- a/apps/webapp/app/trigger/chat/chat.ts +++ b/apps/webapp/app/trigger/chat/chat.ts @@ -1,7 +1,5 @@ -import { PrismaClient } from "@prisma/client"; import { ActionStatusEnum } from "@core/types"; -import { logger, metadata, task } from "@trigger.dev/sdk/v3"; -import { format } from "date-fns"; +import { metadata, task, queue } from "@trigger.dev/sdk"; import { run } from "./chat-utils"; import { MCP } from "../utils/mcp"; @@ -17,7 +15,10 @@ import { updateExecutionStep, } from "../utils/utils"; -const prisma = new PrismaClient(); +const chatQueue = queue({ + name: "chat-queue", + concurrencyLimit: 10, +}); /** * Main chat task that orchestrates the agent workflow @@ -26,10 +27,7 @@ const prisma = new PrismaClient(); export const chat = task({ id: "chat", maxDuration: 3000, - queue: { - name: "chat", - concurrencyLimit: 30, - }, + queue: chatQueue, init, run: async (payload: RunChatPayload, { init }) => { await updateConversationStatus("running", payload.conversationId); @@ -39,8 +37,6 @@ export const chat = task({ const { previousHistory, ...otherData } = payload.context; - const isContinuation = payload.isContinuation || false; - // Initialise mcp const mcp = new MCP(); await mcp.init(); diff --git a/apps/webapp/app/trigger/utils/utils.ts b/apps/webapp/app/trigger/utils/utils.ts index f8ce5a7..db3d586 100644 --- a/apps/webapp/app/trigger/utils/utils.ts +++ b/apps/webapp/app/trigger/utils/utils.ts @@ -144,7 +144,7 @@ export interface RunChatPayload { isContinuation?: boolean; } -export const init = async (payload: InitChatPayload) => { +export const init = async ({ payload }: { payload: InitChatPayload }) => { logger.info("Loading init"); const conversationHistory = await prisma.conversationHistory.findUnique({ where: { id: payload.conversationHistoryId }, diff --git a/apps/webapp/package.json b/apps/webapp/package.json index de9ac5d..093076f 100644 --- a/apps/webapp/package.json +++ b/apps/webapp/package.json @@ -9,7 +9,7 @@ "lint": "eslint --ignore-path .gitignore --cache --cache-location ./node_modules/.cache/eslint .", "start": "remix-serve ./build/server/index.js", "typecheck": "tsc", - "trigger:dev": "npx trigger.dev@latest dev" + "trigger:dev": "pnpm dlx trigger.dev@v4-beta dev" }, "dependencies": { "@ai-sdk/anthropic": "^1.2.12", @@ -54,7 +54,16 @@ "@tailwindcss/container-queries": "^0.1.1", "@tailwindcss/postcss": "^4.1.7", "@tanstack/react-table": "^8.13.2", - "@trigger.dev/sdk": "^3.3.17", + "@tiptap/extension-document": "^2.11.9", + "@tiptap/extension-hard-break": "^2.11.9", + "@tiptap/extension-history": "^2.11.9", + "@tiptap/extension-paragraph": "^2.11.9", + "@tiptap/extension-text": "^2.11.9", + "@tiptap/starter-kit": "2.11.9", + "@tiptap/react": "^2.11.9", + "@tiptap/pm": "^2.11.9", + "@trigger.dev/sdk": "^4.0.0-v4-beta.22", + "@trigger.dev/react-hooks": "^4.0.0-v4-beta.22", "ai": "4.3.14", "axios": "^1.10.0", "bullmq": "^5.53.2", @@ -70,6 +79,7 @@ "emails": "workspace:*", "execa": "^9.6.0", "express": "^4.18.1", + "fast-sort": "^3.4.0", "graphology": "^0.26.0", "graphology-layout-force": "^0.2.4", "graphology-layout-forceatlas2": "^0.10.1", @@ -83,6 +93,7 @@ "nanoid": "3.3.8", "neo4j-driver": "^5.28.1", "non.geist": "^1.0.2", + "novel": "^1.0.2", "ollama-ai-provider": "1.2.0", "posthog-js": "^1.116.6", "react": "^18.2.0", @@ -113,7 +124,7 @@ "@tailwindcss/forms": "^0.5.10", "@tailwindcss/typography": "^0.5.16", "@tailwindcss/vite": "^4.1.7", - "@trigger.dev/build": "^3.3.17", + "@trigger.dev/build": "^4.0.0-v4-beta.22", "@types/compression": "^1.7.2", "@types/d3": "^7.4.3", "@types/express": "^4.17.13", @@ -121,6 +132,7 @@ "@types/simple-oauth2": "^5.0.7", "@types/react": "^18.2.20", "@types/react-dom": "^18.2.7", + "@types/react-virtualized": "^9.22.0", "@typescript-eslint/eslint-plugin": "^6.7.4", "@typescript-eslint/parser": "^6.7.4", "autoprefixer": "^10.4.19", diff --git a/apps/webapp/prisma/schema.prisma b/apps/webapp/prisma/schema.prisma new file mode 100644 index 0000000..2d80e73 --- /dev/null +++ b/apps/webapp/prisma/schema.prisma @@ -0,0 +1,378 @@ +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") + directUrl = env("DIRECT_URL") +} + +generator client { + provider = "prisma-client-js" + binaryTargets = ["native", "debian-openssl-1.1.x"] + previewFeatures = ["tracing"] +} + +model Activity { + id String @id @default(uuid()) + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + deleted DateTime? + + text String + // Used to link the task or activity to external apps + sourceURL String? + + integrationAccount IntegrationAccount? @relation(fields: [integrationAccountId], references: [id]) + integrationAccountId String? + + rejectionReason String? + + workspace Workspace @relation(fields: [workspaceId], references: [id]) + workspaceId String + + WebhookDeliveryLog WebhookDeliveryLog[] + + ConversationHistory ConversationHistory[] +} + +model AuthorizationCode { + id String @id @default(cuid()) + + code String @unique + + personalAccessToken PersonalAccessToken? @relation(fields: [personalAccessTokenId], references: [id], onDelete: Cascade, onUpdate: Cascade) + personalAccessTokenId String? + + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt +} + +model Conversation { + id String @id @default(uuid()) + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + deleted DateTime? + + unread Boolean @default(false) + + title String? + user User @relation(fields: [userId], references: [id]) + userId String + + workspace Workspace? @relation(fields: [workspaceId], references: [id]) + workspaceId String? + + status String @default("pending") // Can be "pending", "running", "completed", "failed", "need_attention" + + ConversationHistory ConversationHistory[] +} + +model ConversationExecutionStep { + id String @id @default(uuid()) + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + deleted DateTime? + + thought String + message String + + actionId String? + actionOutput String? + actionInput String? + actionStatus String? + + metadata Json? @default("{}") + + conversationHistory ConversationHistory @relation(fields: [conversationHistoryId], references: [id]) + conversationHistoryId String +} + +model ConversationHistory { + id String @id @default(uuid()) + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + deleted DateTime? + + message String + userType UserType + + activity Activity? @relation(fields: [activityId], references: [id]) + activityId String? + + context Json? + + thoughts Json? + user User? @relation(fields: [userId], references: [id]) + userId String? + + conversation Conversation @relation(fields: [conversationId], references: [id]) + conversationId String + ConversationExecutionStep ConversationExecutionStep[] +} + +model Entity { + id String @id @default(cuid()) + name String @unique // e.g., "User", "Issue", "Task", "Automation" + metadata Json // Store field definitions and their types + + // Relations + spaceEntities SpaceEntity[] + + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt +} + +model IngestionQueue { + id String @id @default(cuid()) + + // Relations + space Space? @relation(fields: [spaceId], references: [id]) + spaceId String? + + // Queue metadata + data Json // The actual data to be processed + output Json? // The processed output data + status IngestionStatus + priority Int @default(0) + + workspaceId String + workspace Workspace @relation(fields: [workspaceId], references: [id]) + + // Error handling + error String? + retryCount Int @default(0) + + // Timestamps + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + processedAt DateTime? +} + +model IntegrationAccount { + id String @id @default(uuid()) + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + deleted DateTime? + + integrationConfiguration Json + accountId String? + settings Json? + isActive Boolean @default(true) + + integratedBy User @relation(references: [id], fields: [integratedById]) + integratedById String + integrationDefinition IntegrationDefinitionV2 @relation(references: [id], fields: [integrationDefinitionId]) + integrationDefinitionId String + workspace Workspace @relation(references: [id], fields: [workspaceId]) + workspaceId String + Activity Activity[] + + @@unique([accountId, integrationDefinitionId, workspaceId]) +} + +model IntegrationDefinitionV2 { + id String @id @default(uuid()) + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + deleted DateTime? + + name String @unique + slug String + description String + icon String + config Json? + spec Json @default("{}") + version String? + url String? + + workspace Workspace? @relation(references: [id], fields: [workspaceId]) + workspaceId String? + + IntegrationAccount IntegrationAccount[] +} + +model InvitationCode { + id String @id @default(cuid()) + code String @unique + + users User[] + + createdAt DateTime @default(now()) +} + +model PersonalAccessToken { + id String @id @default(cuid()) + + /// If generated by the CLI this will be "cli", otherwise user-provided + name String + + /// This is the token encrypted using the ENCRYPTION_KEY + encryptedToken Json + + /// This is shown in the UI, with ******** + obfuscatedToken String + + /// This is used to find the token in the database + hashedToken String @unique + + user User @relation(fields: [userId], references: [id]) + userId String + + revokedAt DateTime? + lastAccessedAt DateTime? + + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + + authorizationCodes AuthorizationCode[] +} + +model Space { + id String @id @default(cuid()) + name String + description String? + autoMode Boolean @default(false) + + // Relations + user User @relation(fields: [userId], references: [id]) + userId String + + // Space's enabled entities + enabledEntities SpaceEntity[] + + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + IngestionQueue IngestionQueue[] +} + +model SpaceEntity { + id String @id @default(cuid()) + + // Relations + space Space @relation(fields: [spaceId], references: [id]) + spaceId String + + entity Entity @relation(fields: [entityId], references: [id]) + entityId String + + // Custom settings for this entity in this space + settings Json? + + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + + @@unique([spaceId, entityId]) +} + +model User { + id String @id @default(cuid()) + email String @unique + + authenticationMethod AuthenticationMethod + authenticationProfile Json? + authenticationExtraParams Json? + authIdentifier String? @unique + + displayName String? + name String? + avatarUrl String? + + memoryFilter String? // Adding memory filter instructions + + admin Boolean @default(false) + + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + + marketingEmails Boolean @default(true) + confirmedBasicDetails Boolean @default(false) + + referralSource String? + + personalAccessTokens PersonalAccessToken[] + InvitationCode InvitationCode? @relation(fields: [invitationCodeId], references: [id]) + invitationCodeId String? + Space Space[] + Workspace Workspace? + IntegrationAccount IntegrationAccount[] + WebhookConfiguration WebhookConfiguration[] + Conversation Conversation[] + ConversationHistory ConversationHistory[] +} + +model WebhookConfiguration { + id String @id @default(cuid()) + url String + secret String? + isActive Boolean @default(true) + eventTypes String[] // List of event types this webhook is interested in, e.g. ["activity.created"] + user User? @relation(fields: [userId], references: [id]) + userId String? + workspace Workspace? @relation(fields: [workspaceId], references: [id]) + workspaceId String? + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + + WebhookDeliveryLog WebhookDeliveryLog[] +} + +model WebhookDeliveryLog { + id String @id @default(cuid()) + webhookConfiguration WebhookConfiguration @relation(fields: [webhookConfigurationId], references: [id]) + webhookConfigurationId String + + activity Activity? @relation(fields: [activityId], references: [id]) + activityId String? + + status WebhookDeliveryStatus + responseStatusCode Int? + responseBody String? + error String? + deliveredAt DateTime @default(now()) + + createdAt DateTime @default(now()) +} + +model Workspace { + id String @id @default(uuid()) + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + deleted DateTime? + + name String + slug String @unique + icon String? + + integrations String[] + + userId String? @unique + user User? @relation(fields: [userId], references: [id]) + IngestionQueue IngestionQueue[] + IntegrationAccount IntegrationAccount[] + IntegrationDefinitionV2 IntegrationDefinitionV2[] + Activity Activity[] + WebhookConfiguration WebhookConfiguration[] + Conversation Conversation[] +} + +enum AuthenticationMethod { + GOOGLE + MAGIC_LINK +} + +enum IngestionStatus { + PENDING + PROCESSING + COMPLETED + FAILED + CANCELLED +} + +enum UserType { + Agent + User + System +} + +enum WebhookDeliveryStatus { + SUCCESS + FAILED +} diff --git a/apps/webapp/trigger.config.ts b/apps/webapp/trigger.config.ts index 18b35f1..4743a3f 100644 --- a/apps/webapp/trigger.config.ts +++ b/apps/webapp/trigger.config.ts @@ -1,4 +1,9 @@ import { defineConfig } from "@trigger.dev/sdk/v3"; +import { + additionalPackages, + syncEnvVars, +} from "@trigger.dev/build/extensions/core"; +import { prismaExtension } from "@trigger.dev/build/extensions/prisma"; export default defineConfig({ project: process.env.TRIGGER_PROJECT_ID as string, @@ -19,4 +24,15 @@ export default defineConfig({ }, }, dirs: ["./app/trigger"], + build: { + extensions: [ + syncEnvVars(() => ({ + DATABASE_URL: process.env.DATABASE_URL, + BACKEND_HOST: process.env.BACKEND_HOST, + })), + prismaExtension({ + schema: "prisma/schema.prisma", + }), + ], + }, }); diff --git a/apps/webapp/vite.config.ts b/apps/webapp/vite.config.ts index 5ef7eee..556821f 100644 --- a/apps/webapp/vite.config.ts +++ b/apps/webapp/vite.config.ts @@ -28,7 +28,13 @@ export default defineConfig({ allowedHosts: true, }, ssr: { - noExternal: ["@core/database", "tailwindcss"], + target: "node", + noExternal: [ + "@core/database", + "tailwindcss", + "@tiptap/react", + "react-tweet", + ], external: ["@prisma/client"], }, }); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 682b4a0..7aa64c5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -156,9 +156,36 @@ importers: '@tanstack/react-table': specifier: ^8.13.2 version: 8.21.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@tiptap/extension-document': + specifier: ^2.11.9 + version: 2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0)) + '@tiptap/extension-hard-break': + specifier: ^2.11.9 + version: 2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0)) + '@tiptap/extension-history': + specifier: ^2.11.9 + version: 2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0))(@tiptap/pm@2.25.0) + '@tiptap/extension-paragraph': + specifier: ^2.11.9 + version: 2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0)) + '@tiptap/extension-text': + specifier: ^2.11.9 + version: 2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0)) + '@tiptap/pm': + specifier: ^2.11.9 + version: 2.25.0 + '@tiptap/react': + specifier: ^2.11.9 + version: 2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0))(@tiptap/pm@2.25.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@tiptap/starter-kit': + specifier: 2.11.9 + version: 2.11.9 + '@trigger.dev/react-hooks': + specifier: ^4.0.0-v4-beta.22 + version: 4.0.0-v4-beta.22(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@trigger.dev/sdk': - specifier: ^3.3.17 - version: 3.3.17(zod@3.23.8) + specifier: ^4.0.0-v4-beta.22 + version: 4.0.0-v4-beta.22(ai@4.3.14(react@18.3.1)(zod@3.23.8))(zod@3.23.8) ai: specifier: 4.3.14 version: 4.3.14(react@18.3.1)(zod@3.23.8) @@ -204,6 +231,9 @@ importers: express: specifier: ^4.18.1 version: 4.21.2 + fast-sort: + specifier: ^3.4.0 + version: 3.4.1 graphology: specifier: ^0.26.0 version: 0.26.0(graphology-types@0.24.8) @@ -243,6 +273,9 @@ importers: non.geist: specifier: ^1.0.2 version: 1.0.4 + novel: + specifier: ^1.0.2 + version: 1.0.2(@tiptap/extension-code-block@2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0))(@tiptap/pm@2.25.0))(@types/react-dom@18.3.7(@types/react@18.2.69))(@types/react@18.2.69)(highlight.js@11.11.1)(lowlight@3.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) ollama-ai-provider: specifier: 1.2.0 version: 1.2.0(zod@3.23.8) @@ -329,8 +362,8 @@ importers: specifier: ^4.1.7 version: 4.1.9(vite@6.3.5(@types/node@18.19.115)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.42.0)(yaml@2.8.0)) '@trigger.dev/build': - specifier: ^3.3.17 - version: 3.3.17(typescript@5.8.3) + specifier: ^4.0.0-v4-beta.22 + version: 4.0.0-v4-beta.22(typescript@5.8.3) '@types/compression': specifier: ^1.7.2 version: 1.8.1 @@ -349,6 +382,9 @@ importers: '@types/react-dom': specifier: ^18.2.7 version: 18.3.7(@types/react@18.2.69) + '@types/react-virtualized': + specifier: ^9.22.0 + version: 9.22.2 '@types/simple-oauth2': specifier: ^5.0.7 version: 5.0.7 @@ -466,7 +502,7 @@ importers: version: 18.3.1 react-email: specifier: ^2.1.1 - version: 2.1.6(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.2)(eslint@8.57.1) + version: 2.1.6(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.17)(eslint@8.57.1) resend: specifier: ^3.2.0 version: 3.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -512,7 +548,7 @@ importers: version: 6.0.1 tsup: specifier: ^8.0.1 - version: 8.5.0(@swc/core@1.3.101(@swc/helpers@0.5.2))(jiti@2.4.2)(postcss@8.5.5)(typescript@5.8.3)(yaml@2.8.0) + version: 8.5.0(@swc/core@1.3.101(@swc/helpers@0.5.17))(jiti@2.4.2)(postcss@8.5.5)(typescript@5.8.3)(yaml@2.8.0) typescript: specifier: ^5.3.0 version: 5.8.3 @@ -889,6 +925,12 @@ packages: resolution: {integrity: sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q==} engines: {node: '>=6.9.0'} + '@bugsnag/cuid@3.2.1': + resolution: {integrity: sha512-zpvN8xQ5rdRWakMd/BcVkdn2F8HKlDSbM3l7duueK590WmI1T0ObTLc1V/1e55r14WNjPd5AJTYX4yPEAFVi+Q==} + + '@cfcs/core@0.0.6': + resolution: {integrity: sha512-FxfJMwoLB8MEMConeXUCqtMGqxdtePQxRBOiGip9ULcYYam3WfCgoY6xdnMaSkYvRvmosp5iuG+TiPofm65+Pw==} + '@changesets/apply-release-plan@6.1.4': resolution: {integrity: sha512-FMpKF1fRlJyCZVYHr3CbinpZZ+6MwvOtWUuO8uo+svcATEoc1zRDcj23pAurJ2TZ/uVz1wFHH6K3NlACy0PLew==} @@ -961,10 +1003,25 @@ packages: '@conform-to/dom': 0.6.3 zod: ^3.21.0 + '@daybrush/utils@1.13.0': + resolution: {integrity: sha512-ALK12C6SQNNHw1enXK+UO8bdyQ+jaWNQ1Af7Z3FNxeAwjYhQT7do+TRE4RASAJ3ObaS2+TJ7TXR3oz2Gzbw0PQ==} + '@edgefirst-dev/data@0.0.4': resolution: {integrity: sha512-VLhlvEPDJ0Sd0pE6sAYTQkIqZCXVonaWlgRJIQQHzfjTXCadF77qqHj5NxaPSc4wCul0DJO/0MnejVqJAXUiRg==} engines: {node: '>=20.0.0'} + '@egjs/agent@2.4.4': + resolution: {integrity: sha512-cvAPSlUILhBBOakn2krdPnOGv5hAZq92f1YHxYcfu0p7uarix2C6Ia3AVizpS1SGRZGiEkIS5E+IVTLg1I2Iog==} + + '@egjs/children-differ@1.0.1': + resolution: {integrity: sha512-DRvyqMf+CPCOzAopQKHtW+X8iN6Hy6SFol+/7zCUiE5y4P/OB8JP8FtU4NxtZwtafvSL4faD5KoQYPj3JHzPFQ==} + + '@egjs/component@3.0.5': + resolution: {integrity: sha512-cLcGizTrrUNA2EYE3MBmEDt2tQv1joVP1Q3oDisZ5nw0MZDx2kcgEXM+/kZpfa/PAkFvYVhRUZwytIQWoN3V/w==} + + '@egjs/list-differ@1.0.1': + resolution: {integrity: sha512-OTFTDQcWS+1ZREOdCWuk5hCBgYO4OsD30lXcOCyVOAjXMhgL5rBRDnt/otb6Nz8CzU0L/igdcaQBDLWc4t9gvg==} + '@electric-sql/client@1.0.0-beta.1': resolution: {integrity: sha512-Ei9jN3pDoGzc+a/bGqnB5ajb52IvSv7/n2btuyzUlcOHIR2kM9fqtYTJXPwZYKLkGZlHWlpHgWyRtrinkP2nHg==} @@ -1840,6 +1897,12 @@ packages: peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' + '@opentelemetry/core@1.30.1': + resolution: {integrity: sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + '@opentelemetry/exporter-logs-otlp-http@0.52.1': resolution: {integrity: sha512-qKgywId2DbdowPZpOBXQKp0B8DfhfIArmSic15z13Nk/JAOccBUQdPwDjDnjsM5f0ckZFMVR2t/tijTUAqDZoA==} engines: {node: '>=14'} @@ -1946,6 +2009,10 @@ packages: resolution: {integrity: sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==} engines: {node: '>=14'} + '@opentelemetry/semantic-conventions@1.28.0': + resolution: {integrity: sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==} + engines: {node: '>=14'} + '@oslojs/asn1@1.0.0': resolution: {integrity: sha512-zw/wn0sj0j0QKbIXfIlnEcTviaCzYOY3V5rAyjR6YtOByFtJiT574+8p9Wlach0lZH9fddD4yb9laEAIl4vXQA==} @@ -1968,6 +2035,9 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} + '@popperjs/core@2.11.8': + resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} + '@prisma/client@5.4.1': resolution: {integrity: sha512-xyD0DJ3gRNfLbPsC+YfMBBuLJtZKQfy1OD2qU/PZg+HKrr7SO+09174LMeTlWP0YF2wca9LxtVd4HnAiB5ketQ==} engines: {node: '>=16.13'} @@ -2972,6 +3042,9 @@ packages: peerDependencies: react: 18.2.0 + '@remirror/core-constants@3.0.0': + resolution: {integrity: sha512-42aWfPrimMfDKDi4YegyS7x+/0tlzaqwPQCULLanv3DMIlu96KTJR0fM5isWX2UViOqlGnX6YFgqWepcX+XMNg==} + '@remix-run/changelog-github@0.0.5': resolution: {integrity: sha512-43tqwUqWqirbv6D9uzo55ASPsCJ61Ein1k/M8qn+Qpros0MmbmuzjLVPmtaxfxfe2ANX0LefLvCD0pAgr1tp4g==} @@ -3248,6 +3321,15 @@ packages: '@rushstack/eslint-patch@1.11.0': resolution: {integrity: sha512-zxnHvoMQVqewTJr/W4pKjF0bMGiKJv1WX7bSrkl46Hg0QjESbzBROWK0Wg4RphzSOS5Jiy7eFimmM3UgMrMZbQ==} + '@scena/dragscroll@1.4.0': + resolution: {integrity: sha512-3O8daaZD9VXA9CP3dra6xcgt/qrm0mg0xJCwiX6druCteQ9FFsXffkF8PrqxY4Z4VJ58fFKEa0RlKqbsi/XnRA==} + + '@scena/event-emitter@1.0.5': + resolution: {integrity: sha512-AzY4OTb0+7ynefmWFQ6hxDdk0CySAq/D4efljfhtRHCOP7MBF9zUfhKG3TJiroVjASqVgkRJFdenS8ArZo6Olg==} + + '@scena/matrix@1.1.1': + resolution: {integrity: sha512-JVKBhN0tm2Srl+Yt+Ywqu0oLgLcdemDQlD1OxmN9jaCTwaFPZ7tY8n6dhVgMEaR9qcR7r+kAlMXnSfNyYdE+Vg==} + '@sec-ant/readable-stream@0.4.1': resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} @@ -3514,6 +3596,9 @@ packages: '@swc/counter@0.1.3': resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} + '@swc/helpers@0.5.17': + resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==} + '@swc/helpers@0.5.2': resolution: {integrity: sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==} @@ -3643,19 +3728,231 @@ packages: resolution: {integrity: sha512-/DiOQ5xBxgdYRC8LNk7U+RWat0S3qRLeIw3ZIkMQ9kkVlRmwD/Eg8k8CqIpD6GW7u20JIUOfMKbxtiLutpjQ4g==} engines: {node: '>=12'} - '@trigger.dev/build@3.3.17': - resolution: {integrity: sha512-dfreMuVeLAcZypS3kkUA9nWNviiuOPIQ3ldy2ywPCmwmbHyd0BE8tI5D3A4kmVq/f53TdRMls4c+cYafxlwubQ==} + '@tiptap/core@2.25.0': + resolution: {integrity: sha512-pTLV0+g+SBL49/Y5A9ii7oHwlzIzpgroJVI3AcBk7/SeR7554ZzjxxtJmZkQ9/NxJO+k1jQp9grXaqqOLqC7cA==} + peerDependencies: + '@tiptap/pm': ^2.7.0 + + '@tiptap/extension-blockquote@2.25.0': + resolution: {integrity: sha512-W+sVPlV9XmaNPUkxV2BinNEbk2hr4zw8VgKjqKQS9O0k2YIVRCfQch+4DudSAwBVMrVW97zVAKRNfictGFQ8vQ==} + peerDependencies: + '@tiptap/core': ^2.7.0 + + '@tiptap/extension-bold@2.25.0': + resolution: {integrity: sha512-3cBX2EtdFR3+EDTkIshhpQpXoZQbFUzxf6u86Qm0qD49JnVOjX9iexnUp8MydXPZA6NVsKeEfMhf18gV7oxTEw==} + peerDependencies: + '@tiptap/core': ^2.7.0 + + '@tiptap/extension-bubble-menu@2.25.0': + resolution: {integrity: sha512-BnbfQWRXJDDy9/x/0Atu2Nka5ZAMyXLDFqzSLMAXqXSQcG6CZRTSNRgOCnjpda6Hq2yCtq7l/YEoXkbHT1ZZdQ==} + peerDependencies: + '@tiptap/core': ^2.7.0 + '@tiptap/pm': ^2.7.0 + + '@tiptap/extension-bullet-list@2.25.0': + resolution: {integrity: sha512-KD+q/q6KIU2anedjtjG8vELkL5rYFdNHWc5XcUJgQoxbOCK3/sBuOgcn9mnFA2eAS6UkraN9Yx0BXEDbXX2HOw==} + peerDependencies: + '@tiptap/core': ^2.7.0 + + '@tiptap/extension-character-count@2.25.0': + resolution: {integrity: sha512-F+4DxJFptbX3oioqNwS38zOTi6gH9CumV/ISeOIvr4ao7Iija3tNonGDsHhxD05njjbYNIp1OKsxtnzbWukgMA==} + peerDependencies: + '@tiptap/core': ^2.7.0 + '@tiptap/pm': ^2.7.0 + + '@tiptap/extension-code-block-lowlight@2.25.0': + resolution: {integrity: sha512-RunmpexQ+sYNmQbBdjQq/6s1aYYx7lQxOzPO5Q64qx5FjVbekZkQI9c98jv4v0ez7qjRLZBcyG2ETD3bQuHs4Q==} + peerDependencies: + '@tiptap/core': ^2.7.0 + '@tiptap/extension-code-block': ^2.7.0 + '@tiptap/pm': ^2.7.0 + highlight.js: ^11 + lowlight: ^2 || ^3 + + '@tiptap/extension-code-block@2.25.0': + resolution: {integrity: sha512-T4kXbZNZ/NyklzQ/FWmUnjD4hgmJPrIBazzCZ/E/rF/Ag2IvUsztBT0PN3vTa+DAZ+IbM61TjlIpyJs1R7OdbQ==} + peerDependencies: + '@tiptap/core': ^2.7.0 + '@tiptap/pm': ^2.7.0 + + '@tiptap/extension-code@2.25.0': + resolution: {integrity: sha512-rRp6X2aNNnvo7Fbqc3olZ0vLb52FlCPPfetr9gy6/M9uQdVYDhJcFOPuRuXtZ8M8X+WpCZBV29BvZFeDqfw8bw==} + peerDependencies: + '@tiptap/core': ^2.7.0 + + '@tiptap/extension-color@2.25.0': + resolution: {integrity: sha512-jZh7X71Kd8TVU/lexbosyeBseOj2jzxQ5/7DV/L6E2SHsXX9rIOeY61kf4xRqoQm5Z9t2vy8GzNGXhhNACd66w==} + peerDependencies: + '@tiptap/core': ^2.7.0 + '@tiptap/extension-text-style': ^2.7.0 + + '@tiptap/extension-document@2.25.0': + resolution: {integrity: sha512-3gEZlQKUSIRrC6Az8QS7SJi4CvhMWrA7RBChM1aRl9vMNN8Ul7dZZk5StYJGPjL/koTiceMqx9pNmTCBprsbvQ==} + peerDependencies: + '@tiptap/core': ^2.7.0 + + '@tiptap/extension-dropcursor@2.25.0': + resolution: {integrity: sha512-eSHqp+iUI2mGVwvIyENP02hi5TSyQ+bdwNwIck6bdzjRvXakm72+8uPfVSLGxRKAQZ0RFtmux8ISazgUqF/oSw==} + peerDependencies: + '@tiptap/core': ^2.7.0 + '@tiptap/pm': ^2.7.0 + + '@tiptap/extension-floating-menu@2.25.0': + resolution: {integrity: sha512-hPZ5SNpI14smTz4GpWQXTnxmeICINYiABSgXcsU5V66tik9OtxKwoCSR/gpU35esaAFUVRdjW7+sGkACLZD5AQ==} + peerDependencies: + '@tiptap/core': ^2.7.0 + '@tiptap/pm': ^2.7.0 + + '@tiptap/extension-gapcursor@2.25.0': + resolution: {integrity: sha512-s/3WDbgkvLac88h5iYJLPJCDw8tMhlss1hk9GAo+zzP4h0xfazYie09KrA0CBdfaSOFyeJK3wedzjKZBtdgX4w==} + peerDependencies: + '@tiptap/core': ^2.7.0 + '@tiptap/pm': ^2.7.0 + + '@tiptap/extension-hard-break@2.25.0': + resolution: {integrity: sha512-h8be5Zdtsl5GQHxRXvYlGfIJsLvdbexflSTr12gr4kvcQqTdtrsqyu2eksfAK+p2szbiwP2G4VZlH0LNS47UXQ==} + peerDependencies: + '@tiptap/core': ^2.7.0 + + '@tiptap/extension-heading@2.25.0': + resolution: {integrity: sha512-IrRKRRr7Bhpnq5aue1v5/e5N/eNdVV/THsgqqpLZO48pgN8Wv+TweOZe1Ntg/v8L4QSBC8iGMxxhiJZT8AzSkA==} + peerDependencies: + '@tiptap/core': ^2.7.0 + + '@tiptap/extension-highlight@2.25.0': + resolution: {integrity: sha512-YuDZUFTil06wmuIMod1z2zbLGIwDwcoRV21f2wZBl3SryzppX/B1S1fGgLdnOo4M8ryykSKxWdpjMSOYCAdsjA==} + peerDependencies: + '@tiptap/core': ^2.7.0 + + '@tiptap/extension-history@2.25.0': + resolution: {integrity: sha512-y3uJkJv+UngDaDYfcVJ4kx8ivc3Etk5ow6N+47AMCRjUUweQ/CLiJwJ2C7nL7L82zOzVbb/NoR/B3UeE4ts/wQ==} + peerDependencies: + '@tiptap/core': ^2.7.0 + '@tiptap/pm': ^2.7.0 + + '@tiptap/extension-horizontal-rule@2.25.0': + resolution: {integrity: sha512-bZovyhdOexB3Cv9ddUogWT+cd3KbnenMIZKhgrJ+R0J27rlOtzeUD9TeIjn4V8Of9mTxm3XDKUZGLgPiriN8Ww==} + peerDependencies: + '@tiptap/core': ^2.7.0 + '@tiptap/pm': ^2.7.0 + + '@tiptap/extension-image@2.25.0': + resolution: {integrity: sha512-+EJVxt61LzSK/2iaZLp8UN/jY4eohfn4SloJ1jHEobf4+XA6LwusXItQzQiJfaAL7kjrUih2RcCkOWa0BpLFLA==} + peerDependencies: + '@tiptap/core': ^2.7.0 + + '@tiptap/extension-italic@2.25.0': + resolution: {integrity: sha512-FZHmNqvWJ5SHYlUi+Qg3b2C0ZBt82DUDUqM+bqcQqSQu6B0c4IEc3+VHhjAJwEUIO9wX7xk/PsdM4Z5Ex4Lr3w==} + peerDependencies: + '@tiptap/core': ^2.7.0 + + '@tiptap/extension-link@2.25.0': + resolution: {integrity: sha512-jNd+1Fd7wiIbxlS51weBzyDtBEBSVzW0cgzdwOzBYQtPJueRyXNNVERksyinDuVgcfvEWgmNZUylgzu7mehnEg==} + peerDependencies: + '@tiptap/core': ^2.7.0 + '@tiptap/pm': ^2.7.0 + + '@tiptap/extension-list-item@2.25.0': + resolution: {integrity: sha512-HLstO/R+dNjIFMXN15bANc8i/+CDpEgtEQhZNHqvSUJH9xQ5op0S05m5VvFI10qnwXNjwwXdhxUYwwjIDCiAgg==} + peerDependencies: + '@tiptap/core': ^2.7.0 + + '@tiptap/extension-ordered-list@2.25.0': + resolution: {integrity: sha512-Hlid16nQdDFOGOx6mJT+zPEae2t1dGlJ18pqCqaVMuDnIpNIWmQutJk5QYxGVxr9awd2SpHTpQtdBTqcufbHtw==} + peerDependencies: + '@tiptap/core': ^2.7.0 + + '@tiptap/extension-paragraph@2.25.0': + resolution: {integrity: sha512-53gpWMPedkWVDp3u/1sLt6vnr3BWz4vArGCmmabLucCI2Yl4R6S/AQ9yj/+jOHvWbXCroCbKtmmwxJl32uGN2w==} + peerDependencies: + '@tiptap/core': ^2.7.0 + + '@tiptap/extension-placeholder@2.25.0': + resolution: {integrity: sha512-BUJnp/WQt/8iMJ9wn1xGlA+RiXCsP24u5n+ecxw+DBTgFq7RRL9I1nDQ/IJBrfWMJGOrMEq6tg8rmg1NVLGfWw==} + peerDependencies: + '@tiptap/core': ^2.7.0 + '@tiptap/pm': ^2.7.0 + + '@tiptap/extension-strike@2.25.0': + resolution: {integrity: sha512-Z5YBKnv4N6MMD1LEo9XbmWnmdXavZKOOJt/OkXYFZ3KgzB52Z3q3DDfH+NyeCtKKSWqWVxbBHKLnsojDerSf2g==} + peerDependencies: + '@tiptap/core': ^2.7.0 + + '@tiptap/extension-task-item@2.25.0': + resolution: {integrity: sha512-8F7Z7jbsyGrPLHQCn+n39zdqIgxwR1kJ1nL5ZwhEW3ZhJgkFF0WMJSv36mwIJwL08p8um/c6g72AYB/e8CD7eA==} + peerDependencies: + '@tiptap/core': ^2.7.0 + '@tiptap/pm': ^2.7.0 + + '@tiptap/extension-task-list@2.25.0': + resolution: {integrity: sha512-2mASqp8MJ0dyc1OK6c8P7m/zwoVDv8PV+XsRR9O3tpIz/zjUVrOl0W4IndjUPBMa7cpJX8fGj8iC3DaRNpSMcg==} + peerDependencies: + '@tiptap/core': ^2.7.0 + + '@tiptap/extension-text-style@2.25.0': + resolution: {integrity: sha512-MKAXqDATEbuFEB1SeeAFy2VbefUMJ9jxQyybpaHjDX+Ik0Ddu+aYuJP/njvLuejXCqhrkS/AorxzmHUC4HNPbQ==} + peerDependencies: + '@tiptap/core': ^2.7.0 + + '@tiptap/extension-text@2.25.0': + resolution: {integrity: sha512-HlZL86rihpP/R8+dqRrvzSRmiPpx6ctlAKM9PnWT/WRMeI4Y1AUq6PSHLz74wtYO1LH4PXys1ws3n+pLP4Mo6g==} + peerDependencies: + '@tiptap/core': ^2.7.0 + + '@tiptap/extension-underline@2.25.0': + resolution: {integrity: sha512-RqXkWSMJyllfsDukugDzWEZfWRUOgcqzuMWC40BnuDUs4KgdRA0nhVUWJbLfUEmXI0UVqN5OwYTTAdhaiF7kjQ==} + peerDependencies: + '@tiptap/core': ^2.7.0 + + '@tiptap/extension-youtube@2.25.0': + resolution: {integrity: sha512-jVeBHhJZQ7upMMio/jVR/MisD0Xc0pOzMWMw8/82s6Dwkp9F5xRQXpofoYW2UlfAt9FwxyxdwJ6s9vZEyiyOkw==} + peerDependencies: + '@tiptap/core': ^2.7.0 + + '@tiptap/pm@2.25.0': + resolution: {integrity: sha512-vuzU0pLGQyHqtikAssHn9V61aXLSQERQtn3MUtaJ36fScQg7RClAK5gnIbBt3Ul3VFof8o4xYmcidARc0X/E5A==} + + '@tiptap/react@2.25.0': + resolution: {integrity: sha512-Fc7uj/+goEhvJkH2vYJxXLH1GsUkOcsIR3kUyL0vejNRvpzzd87CI/EiSD2ESJO43czQcsJkiYzY4EC+p8NF9w==} + peerDependencies: + '@tiptap/core': ^2.7.0 + '@tiptap/pm': ^2.7.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0 + + '@tiptap/starter-kit@2.11.9': + resolution: {integrity: sha512-UUx5t1PrwR+KVOjTkmGC1duOq6Ubz/fsetI1OieyegMT/2J1wkFFP1w3NFZarj5jo0GLBt3GMlBwS9GY8cJUxQ==} + + '@tiptap/suggestion@2.25.0': + resolution: {integrity: sha512-ykMwdyaHzqIg+jMI/zZ4TOjVxYkwVG7H6BD3gV9gV5tyRpedsKbvppm3aUlnMWC/OmDqQhlSD8iT8Vo3UWX2oQ==} + peerDependencies: + '@tiptap/core': ^2.7.0 + '@tiptap/pm': ^2.7.0 + + '@trigger.dev/build@4.0.0-v4-beta.22': + resolution: {integrity: sha512-W+SfA7soXzD7f2GQQL2Q4x3+JQkJijcVjgKpNuwPdZcgI++YpJkPzJ5RlT98flErU8ZvuiL26SAur2tvObrZgA==} engines: {node: '>=18.20.0'} - '@trigger.dev/core@3.3.17': - resolution: {integrity: sha512-KjnRxCuHq4R+MnE0zPvIQ7EIz4QSpJL+1Yn74n2cCGjyHYgQ/g8rcARn0Nxf2s8jzE38CnyRufjUrwG8k+DJrw==} + '@trigger.dev/core@4.0.0-v4-beta.22': + resolution: {integrity: sha512-FVaVNsW3KQgYEWStr80Iu+1l4KMyHPVU4QbV55pLQp7d126jOuP+hXYp7LhnYVZtgcQLIZSC0VjJc/UYwr4D6g==} engines: {node: '>=18.20.0'} - '@trigger.dev/sdk@3.3.17': - resolution: {integrity: sha512-wjIjlQWKybYWw/J7LxFIOO1pXzxXoj9lxbFMvjb51JtfebxnQnh6aExN47nOGhVhV38wHYstfBI/8ClWwBnFYw==} + '@trigger.dev/react-hooks@4.0.0-v4-beta.22': + resolution: {integrity: sha512-hWBoxEkNSM+IcFsUlFEJBcMZGmpaYGPy5k/o+iK9QNLURiQsKEYGYoBzKlA7iP0cVPwhIV1eNlsPediNRQyTsA==} engines: {node: '>=18.20.0'} peerDependencies: + react: ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^18.0 || ^19.0 || ^19.0.0-rc + + '@trigger.dev/sdk@4.0.0-v4-beta.22': + resolution: {integrity: sha512-yRv9G/KODpItU16Iv6gCfLQ2SjhGq443zTlYKY3XZf4HHIuByOhkOKYPRpl82FmJprL8DxnT7V0pma4kfHBzPQ==} + engines: {node: '>=18.20.0'} + peerDependencies: + ai: ^4.2.0 zod: ^3.0.0 + peerDependenciesMeta: + ai: + optional: true '@tybys/wasm-util@0.9.0': resolution: {integrity: sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==} @@ -3813,6 +4110,9 @@ packages: '@types/hast@2.3.10': resolution: {integrity: sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==} + '@types/hast@3.0.4': + resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} + '@types/http-errors@2.0.5': resolution: {integrity: sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==} @@ -3825,9 +4125,21 @@ packages: '@types/json5@0.0.29': resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + '@types/linkify-it@5.0.0': + resolution: {integrity: sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==} + + '@types/markdown-it@14.1.2': + resolution: {integrity: sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==} + '@types/mdast@3.0.15': resolution: {integrity: sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==} + '@types/mdast@4.0.4': + resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} + + '@types/mdurl@2.0.0': + resolution: {integrity: sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==} + '@types/mdx@2.0.13': resolution: {integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==} @@ -3849,6 +4161,9 @@ packages: '@types/node@18.19.115': resolution: {integrity: sha512-kNrFiTgG4a9JAn1LMQeLOv3MvXIPokzXziohMrMsvpYgLpdEt/mMiVYc4sGKtDfyxM5gIDF4VgrPRyCw4fHOYg==} + '@types/node@22.16.0': + resolution: {integrity: sha512-B2egV9wALML1JCpv3VQoQ+yesQKAmNMBIAY7OteVrikcOcAkWm+dGL6qpeCktPjAv6N1JLnhbNiqS35UpFyBsQ==} + '@types/node@24.0.0': resolution: {integrity: sha512-yZQa2zm87aRVcqDyH5+4Hv9KYgSdgwX1rFnGvpbzMaC7YAljmhBET93TPiTd3ObwTL+gSpIzPKg5BqVxdCvxKg==} @@ -3875,6 +4190,9 @@ packages: peerDependencies: '@types/react': ^18.0.0 + '@types/react-virtualized@9.22.2': + resolution: {integrity: sha512-0Eg/ME3OHYWGxs+/n4VelfYrhXssireZaa1Uqj5SEkTpSaBu5ctFGOCVxcOqpGXRiEdrk/7uho9tlZaryCIjHA==} + '@types/react@18.2.47': resolution: {integrity: sha512-xquNkkOirwyCgoClNk85BjP+aqnIS+ckAJ8i37gAbDs14jfW/J23f2GItAf33oiUPQnqNMALiFeoM9Y5mbjpVQ==} @@ -3905,6 +4223,12 @@ packages: '@types/unist@2.0.11': resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} + '@types/unist@3.0.3': + resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} + + '@types/use-sync-external-store@0.0.6': + resolution: {integrity: sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==} + '@types/uuid@9.0.8': resolution: {integrity: sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==} @@ -4277,10 +4601,6 @@ packages: resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} engines: {node: '>=6'} - ansi-escapes@5.0.0: - resolution: {integrity: sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==} - engines: {node: '>=12'} - ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} @@ -4454,6 +4774,9 @@ packages: resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} + bintrees@1.0.2: + resolution: {integrity: sha512-VOMgTMwjAaUG580SXn3LacVgjurrbMme7ZZNYGSSV7mmtY6QQRh0Eg3pwIcntQ77DErK1L0NxkbetjcoXzVwKw==} + bl@4.1.0: resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} @@ -4673,6 +4996,12 @@ packages: resolution: {integrity: sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==} engines: {node: '>=0.10.0'} + cmdk@1.1.1: + resolution: {integrity: sha512-Vsv7kFaXm+ptHDMZ7izaRsP70GgrW9NBNGswt9OZaVBLlE0SNpDq8eu/VGXyF9r7M0azK3Wy7OlYXsuyYLFzHg==} + peerDependencies: + react: ^18 || ^19 || ^19.0.0-rc + react-dom: ^18 || ^19 || ^19.0.0-rc + color-convert@1.9.3: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} @@ -4722,6 +5051,10 @@ packages: resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} engines: {node: '>= 10'} + commander@8.3.0: + resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} + engines: {node: '>= 12'} + compressible@2.0.18: resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} engines: {node: '>= 0.6'} @@ -4803,6 +5136,9 @@ packages: typescript: optional: true + crelt@1.0.6: + resolution: {integrity: sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==} + cron-parser@4.9.0: resolution: {integrity: sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q==} engines: {node: '>=12.0.0'} @@ -4842,6 +5178,12 @@ packages: webpack: optional: true + css-styled@1.0.8: + resolution: {integrity: sha512-tCpP7kLRI8dI95rCh3Syl7I+v7PP+2JYOzWkl0bUEoSbJM+u8ITbutjlQVf0NC2/g4ULROJPi16sfwDIO8/84g==} + + css-to-mat@1.1.1: + resolution: {integrity: sha512-kvpxFYZb27jRd2vium35G7q5XZ2WJ9rWjDUMNT36M3Hc41qCrLXFM5iEKMGXcrPsKfXEN+8l/riB4QzwwwiEyQ==} + css-unit-converter@1.1.2: resolution: {integrity: sha512-IiJwMC8rdZE0+xiEZHeru6YoONC4rfPMqGm2W85jMIbkFvv5nFTwJVFHam2eFrN6txmoUYFAFXiv8ICVeTO0MA==} @@ -5149,6 +5491,9 @@ packages: engines: {node: '>=0.8.0'} hasBin: true + devlop@1.1.0: + resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} + didyoumean@1.2.2: resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} @@ -5566,6 +5911,9 @@ packages: estree-util-is-identifier-name@2.1.0: resolution: {integrity: sha512-bEN9VHRyXAUOjkKVQVvArFym08BTWB0aJPppZZr0UNyAqWsLaVfAqP7hbaTJjzHifmB5ebnR8Wm7r7yGN/HonQ==} + estree-util-is-identifier-name@3.0.0: + resolution: {integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==} + estree-util-to-js@1.2.0: resolution: {integrity: sha512-IzU74r1PK5IMMGZXUVZbmiu4A1uhiPgW5hm1GjcOfr4ZzHaMPpLNJjR7HjXiIOzi25nZDrgFTobHTkV5Q6ITjA==} @@ -5669,6 +6017,9 @@ packages: fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + fast-sort@3.4.1: + resolution: {integrity: sha512-76uvGPsF6So53sZAqenP9UVT3p5l7cyTHkLWVCMinh41Y8NDrK1IYXJgaBMfc1gk7nJiSRZp676kddFG2Aa5+A==} + fast-uri@3.0.6: resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==} @@ -5777,6 +6128,9 @@ packages: react-dom: optional: true + framework-utils@1.1.0: + resolution: {integrity: sha512-KAfqli5PwpFJ8o3psRNs8svpMGyCSAe8nmGcjQ0zZBWN2H6dZDnq+ABp3N3hdUmFeMrLtjOCTXD4yplUJIWceg==} + fresh@0.5.2: resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} engines: {node: '>= 0.6'} @@ -5833,6 +6187,9 @@ packages: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} + gesto@1.19.4: + resolution: {integrity: sha512-hfr/0dWwh0Bnbb88s3QVJd1ZRJeOWcgHPPwmiH6NnafDYvhTsxg+SLYu+q/oPNh9JS3V+nlr6fNs8kvPAtcRDQ==} + get-caller-file@2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} @@ -6008,9 +6365,19 @@ packages: hast-util-to-estree@2.3.3: resolution: {integrity: sha512-ihhPIUPxN0v0w6M5+IiAZZrn0LH2uZomeWwhn7uP7avZC6TE7lIiEh2yBMPr5+zi1aUCXq6VoYRgs2Bw9xmycQ==} + hast-util-to-jsx-runtime@2.3.6: + resolution: {integrity: sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==} + hast-util-whitespace@2.0.1: resolution: {integrity: sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==} + hast-util-whitespace@3.0.0: + resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} + + highlight.js@11.11.1: + resolution: {integrity: sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==} + engines: {node: '>=12.0.0'} + hosted-git-info@2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} @@ -6026,6 +6393,9 @@ packages: resolution: {integrity: sha512-qY60FjREgVZL03vJU6IfMV4GDjGBIoOyvuFdpBDIX9yTlDw0TjxVBQp+P8NvpdIXNJvfWBTNul7fsAQJq2FNpg==} engines: {node: '>=14'} + html-url-attributes@3.0.1: + resolution: {integrity: sha512-ol6UPyBWqsrO6EJySPz2O7ZSr856WDrEzM5zMqp+FJJLGMW35cLYmmZnl0vztAZxRUoNZJFTCohfjuIJ8I4QBQ==} + htmlparser2@8.0.2: resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==} @@ -6100,6 +6470,9 @@ packages: inline-style-parser@0.1.1: resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==} + inline-style-parser@0.2.4: + resolution: {integrity: sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==} + internal-slot@1.1.0: resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} engines: {node: '>= 0.4'} @@ -6371,6 +6744,18 @@ packages: jose@5.10.0: resolution: {integrity: sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg==} + jotai@2.12.5: + resolution: {integrity: sha512-G8m32HW3lSmcz/4mbqx0hgJIQ0ekndKWiYP7kWVKi0p6saLXdSoye+FZiOFyonnd7Q482LCzm8sMDl7Ar1NWDw==} + engines: {node: '>=12.20.0'} + peerDependencies: + '@types/react': '>=17.0.0' + react: '>=17.0.0' + peerDependenciesMeta: + '@types/react': + optional: true + react: + optional: true + joycon@3.1.1: resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} engines: {node: '>=10'} @@ -6449,6 +6834,16 @@ packages: resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} engines: {node: '>=4.0'} + katex@0.16.22: + resolution: {integrity: sha512-XCHRdUw4lf3SKBaJe4EvgqIuWwkPSo9XoeO8GjQW94Bp7TWv9hNhzZjZ+OH9yf1UmLygb7DIT5GSFQiyt16zYg==} + hasBin: true + + keycode@2.2.1: + resolution: {integrity: sha512-Rdgz9Hl9Iv4QKi8b0OlCRQEzp4AgVxyCtz5S/+VIHezDmrDhkp2N2TqBWOLz0/gbeREXOOiI9/4b8BY9uw2vFg==} + + keycon@1.4.0: + resolution: {integrity: sha512-p1NAIxiRMH3jYfTeXRs2uWbVJ1WpEjpi8ktzUyBJsX7/wn2qu2VRXktneBLNtKNxJmlUYxRi9gOJt1DuthXR7A==} + keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} @@ -6552,6 +6947,12 @@ packages: lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + linkify-it@5.0.0: + resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==} + + linkifyjs@4.3.1: + resolution: {integrity: sha512-DRSlB9DKVW04c4SUdGvKK5FR6be45lTU9M76JnngqPeeGDqPwYc0zdUErtsNVMtxPXgUWV4HbXbnC4sNyBxkYg==} + load-json-file@4.0.0: resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==} engines: {node: '>=4'} @@ -6628,6 +7029,9 @@ packages: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true + lowlight@3.3.0: + resolution: {integrity: sha512-0JNhgFoPvP6U6lE/UdVsSq99tn6DhjjpAj5MxG49ewd2mOBVtwWYIT8ClyABhq198aXXODMU6Ox8DrGy/CpTZQ==} + lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} @@ -6673,6 +7077,10 @@ packages: resolution: {integrity: sha512-WWC0ZuMzCyDHYCasEGs4IPvLyTGftYwh6wIEOULOF0HXcqZlhwRzrK0w2VUlxWA98xnvb/jszw4ZSkJ6ADpM6Q==} engines: {node: '>=0.10.0'} + markdown-it@14.1.0: + resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==} + hasBin: true + marked@7.0.4: resolution: {integrity: sha512-t8eP0dXRJMtMvBojtkcsA7n48BkauktUKzfkPSCq85ZMTJ0v76Rke4DYz01omYpPTUh4p/f7HePgRo3ebG8+QQ==} engines: {node: '>= 16'} @@ -6693,33 +7101,60 @@ packages: mdast-util-from-markdown@1.3.1: resolution: {integrity: sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==} + mdast-util-from-markdown@2.0.2: + resolution: {integrity: sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==} + mdast-util-frontmatter@1.0.1: resolution: {integrity: sha512-JjA2OjxRqAa8wEG8hloD0uTU0kdn8kbtOWpPP94NBkfAlbxn4S8gCGf/9DwFtEeGPXrDcNXdiDjVaRdUFqYokw==} mdast-util-mdx-expression@1.3.2: resolution: {integrity: sha512-xIPmR5ReJDu/DHH1OoIT1HkuybIfRGYRywC+gJtI7qHjCJp/M9jrmBEJW22O8lskDWm562BX2W8TiAwRTb0rKA==} + mdast-util-mdx-expression@2.0.1: + resolution: {integrity: sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==} + mdast-util-mdx-jsx@2.1.4: resolution: {integrity: sha512-DtMn9CmVhVzZx3f+optVDF8yFgQVt7FghCRNdlIaS3X5Bnym3hZwPbg/XW86vdpKjlc1PVj26SpnLGeJBXD3JA==} + mdast-util-mdx-jsx@3.2.0: + resolution: {integrity: sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==} + mdast-util-mdx@2.0.1: resolution: {integrity: sha512-38w5y+r8nyKlGvNjSEqWrhG0w5PmnRA+wnBvm+ulYCct7nsGYhFVb0lljS9bQav4psDAS1eGkP2LMVcZBi/aqw==} mdast-util-mdxjs-esm@1.3.1: resolution: {integrity: sha512-SXqglS0HrEvSdUEfoXFtcg7DRl7S2cwOXc7jkuusG472Mmjag34DUDeOJUZtl+BVnyeO1frIgVpHlNRWc2gk/w==} + mdast-util-mdxjs-esm@2.0.1: + resolution: {integrity: sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==} + mdast-util-phrasing@3.0.1: resolution: {integrity: sha512-WmI1gTXUBJo4/ZmSk79Wcb2HcjPJBzM1nlI/OUWA8yk2X9ik3ffNbBGsU+09BFmXaL1IBb9fiuvq6/KMiNycSg==} + mdast-util-phrasing@4.1.0: + resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==} + mdast-util-to-hast@12.3.0: resolution: {integrity: sha512-pits93r8PhnIoU4Vy9bjW39M2jJ6/tdHyja9rrot9uujkN7UTU9SDnE6WNJz/IGyQk3XHX6yNNtrBH6cQzm8Hw==} + mdast-util-to-hast@13.2.0: + resolution: {integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==} + mdast-util-to-markdown@1.5.0: resolution: {integrity: sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A==} + mdast-util-to-markdown@2.1.2: + resolution: {integrity: sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==} + mdast-util-to-string@3.2.0: resolution: {integrity: sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==} + mdast-util-to-string@4.0.0: + resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} + + mdurl@2.0.0: + resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==} + media-query-parser@2.0.2: resolution: {integrity: sha512-1N4qp+jE0pL5Xv4uEcwVUhIkwdUO3S/9gML90nqKA7v7FcOS5vUtatfzok9S9U1EJU8dHWlcv95WLnKmmxZI9w==} @@ -6760,6 +7195,9 @@ packages: micromark-core-commonmark@1.1.0: resolution: {integrity: sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==} + micromark-core-commonmark@2.0.3: + resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==} + micromark-extension-frontmatter@1.1.1: resolution: {integrity: sha512-m2UH9a7n3W8VAH9JO9y01APpPKmNNNs71P0RbknEmYSaZU5Ghogv38BYO94AI5Xw6OYfxZRdHZZ2nYjs/Z+SZQ==} @@ -6781,69 +7219,129 @@ packages: micromark-factory-destination@1.1.0: resolution: {integrity: sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==} + micromark-factory-destination@2.0.1: + resolution: {integrity: sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==} + micromark-factory-label@1.1.0: resolution: {integrity: sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==} + micromark-factory-label@2.0.1: + resolution: {integrity: sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==} + micromark-factory-mdx-expression@1.0.9: resolution: {integrity: sha512-jGIWzSmNfdnkJq05c7b0+Wv0Kfz3NJ3N4cBjnbO4zjXIlxJr+f8lk+5ZmwFvqdAbUy2q6B5rCY//g0QAAaXDWA==} micromark-factory-space@1.1.0: resolution: {integrity: sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==} + micromark-factory-space@2.0.1: + resolution: {integrity: sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==} + micromark-factory-title@1.1.0: resolution: {integrity: sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==} + micromark-factory-title@2.0.1: + resolution: {integrity: sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==} + micromark-factory-whitespace@1.1.0: resolution: {integrity: sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==} + micromark-factory-whitespace@2.0.1: + resolution: {integrity: sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==} + micromark-util-character@1.2.0: resolution: {integrity: sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==} + micromark-util-character@2.1.1: + resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==} + micromark-util-chunked@1.1.0: resolution: {integrity: sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==} + micromark-util-chunked@2.0.1: + resolution: {integrity: sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==} + micromark-util-classify-character@1.1.0: resolution: {integrity: sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==} + micromark-util-classify-character@2.0.1: + resolution: {integrity: sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==} + micromark-util-combine-extensions@1.1.0: resolution: {integrity: sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==} + micromark-util-combine-extensions@2.0.1: + resolution: {integrity: sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==} + micromark-util-decode-numeric-character-reference@1.1.0: resolution: {integrity: sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==} + micromark-util-decode-numeric-character-reference@2.0.2: + resolution: {integrity: sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==} + micromark-util-decode-string@1.1.0: resolution: {integrity: sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==} + micromark-util-decode-string@2.0.1: + resolution: {integrity: sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==} + micromark-util-encode@1.1.0: resolution: {integrity: sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==} + micromark-util-encode@2.0.1: + resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==} + micromark-util-events-to-acorn@1.2.3: resolution: {integrity: sha512-ij4X7Wuc4fED6UoLWkmo0xJQhsktfNh1J0m8g4PbIMPlx+ek/4YdW5mvbye8z/aZvAPUoxgXHrwVlXAPKMRp1w==} micromark-util-html-tag-name@1.2.0: resolution: {integrity: sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==} + micromark-util-html-tag-name@2.0.1: + resolution: {integrity: sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==} + micromark-util-normalize-identifier@1.1.0: resolution: {integrity: sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==} + micromark-util-normalize-identifier@2.0.1: + resolution: {integrity: sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==} + micromark-util-resolve-all@1.1.0: resolution: {integrity: sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==} + micromark-util-resolve-all@2.0.1: + resolution: {integrity: sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==} + micromark-util-sanitize-uri@1.2.0: resolution: {integrity: sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==} + micromark-util-sanitize-uri@2.0.1: + resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==} + micromark-util-subtokenize@1.1.0: resolution: {integrity: sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==} + micromark-util-subtokenize@2.1.0: + resolution: {integrity: sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==} + micromark-util-symbol@1.1.0: resolution: {integrity: sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==} + micromark-util-symbol@2.0.1: + resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==} + micromark-util-types@1.1.0: resolution: {integrity: sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==} + micromark-util-types@2.0.2: + resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==} + micromark@3.2.0: resolution: {integrity: sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==} + micromark@4.0.2: + resolution: {integrity: sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==} + micromatch@4.0.8: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} @@ -7115,6 +7613,11 @@ packages: normalize.css@8.0.1: resolution: {integrity: sha512-qizSNPO93t1YUuUhP22btGOo3chcvDFqFaj2TRybP0DMxkHOCTYwp3n34fel4a31ORXy4m1Xq0Gyqpb5m33qIg==} + novel@1.0.2: + resolution: {integrity: sha512-lyMtoBsRCqgrQaNhlc8Ngpp+npJEQjPoGBLcnYlEr8mEf+lXZV7/m6CbEpGRfma+HZQVlU3YJOs4gCmzbLG+ow==} + peerDependencies: + react: '>=18' + npm-install-checks@6.3.0: resolution: {integrity: sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -7235,6 +7738,9 @@ packages: resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} engines: {node: '>=10'} + orderedmap@2.1.1: + resolution: {integrity: sha512-TvAWxi0nDe1j/rtMcWcIj94+Ffe6n7zhow33h40SKxmsmozs6dz/e+EajymfoFcHd7sxNn8yHM8839uixMOV6g==} + os-tmpdir@1.0.2: resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} engines: {node: '>=0.10.0'} @@ -7245,6 +7751,9 @@ packages: outdent@0.8.0: resolution: {integrity: sha512-KiOAIsdpUTcAXuykya5fnVVT+/5uS0Q1mrkRHcF89tpieSmY33O/tmc54CqwA+bfhbtEfZUNLHaPUiB9X3jt1A==} + overlap-area@1.1.0: + resolution: {integrity: sha512-3dlJgJCaVeXH0/eZjYVJvQiLVVrPO4U1ZGqlATtx6QGO3b5eNM6+JgUKa7oStBTdYuGTk7gVoABCW6Tp+dhRdw==} + own-keys@1.0.1: resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} engines: {node: '>= 0.4'} @@ -7721,6 +8230,10 @@ packages: process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + prom-client@15.1.3: + resolution: {integrity: sha512-6ZiOBfCywsD4k1BN9IX0uZhF+tJkV8q8llP64G5Hajs4JOeVLPCwpPVcpXy3BwYiUGgyJzsJJQeOIv7+hDSq8g==} + engines: {node: ^16 || ^18 || >=20} + promise-inflight@1.0.1: resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==} peerDependencies: @@ -7739,6 +8252,67 @@ packages: property-information@6.5.0: resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==} + property-information@7.1.0: + resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==} + + prosemirror-changeset@2.3.1: + resolution: {integrity: sha512-j0kORIBm8ayJNl3zQvD1TTPHJX3g042et6y/KQhZhnPrruO8exkTgG8X+NRpj7kIyMMEx74Xb3DyMIBtO0IKkQ==} + + prosemirror-collab@1.3.1: + resolution: {integrity: sha512-4SnynYR9TTYaQVXd/ieUvsVV4PDMBzrq2xPUWutHivDuOshZXqQ5rGbZM84HEaXKbLdItse7weMGOUdDVcLKEQ==} + + prosemirror-commands@1.7.1: + resolution: {integrity: sha512-rT7qZnQtx5c0/y/KlYaGvtG411S97UaL6gdp6RIZ23DLHanMYLyfGBV5DtSnZdthQql7W+lEVbpSfwtO8T+L2w==} + + prosemirror-dropcursor@1.8.2: + resolution: {integrity: sha512-CCk6Gyx9+Tt2sbYk5NK0nB1ukHi2ryaRgadV/LvyNuO3ena1payM2z6Cg0vO1ebK8cxbzo41ku2DE5Axj1Zuiw==} + + prosemirror-gapcursor@1.3.2: + resolution: {integrity: sha512-wtjswVBd2vaQRrnYZaBCbyDqr232Ed4p2QPtRIUK5FuqHYKGWkEwl08oQM4Tw7DOR0FsasARV5uJFvMZWxdNxQ==} + + prosemirror-history@1.4.1: + resolution: {integrity: sha512-2JZD8z2JviJrboD9cPuX/Sv/1ChFng+xh2tChQ2X4bB2HeK+rra/bmJ3xGntCcjhOqIzSDG6Id7e8RJ9QPXLEQ==} + + prosemirror-inputrules@1.5.0: + resolution: {integrity: sha512-K0xJRCmt+uSw7xesnHmcn72yBGTbY45vm8gXI4LZXbx2Z0jwh5aF9xrGQgrVPu0WbyFVFF3E/o9VhJYz6SQWnA==} + + prosemirror-keymap@1.2.3: + resolution: {integrity: sha512-4HucRlpiLd1IPQQXNqeo81BGtkY8Ai5smHhKW9jjPKRc2wQIxksg7Hl1tTI2IfT2B/LgX6bfYvXxEpJl7aKYKw==} + + prosemirror-markdown@1.13.2: + resolution: {integrity: sha512-FPD9rHPdA9fqzNmIIDhhnYQ6WgNoSWX9StUZ8LEKapaXU9i6XgykaHKhp6XMyXlOWetmaFgGDS/nu/w9/vUc5g==} + + prosemirror-menu@1.2.5: + resolution: {integrity: sha512-qwXzynnpBIeg1D7BAtjOusR+81xCp53j7iWu/IargiRZqRjGIlQuu1f3jFi+ehrHhWMLoyOQTSRx/IWZJqOYtQ==} + + prosemirror-model@1.25.1: + resolution: {integrity: sha512-AUvbm7qqmpZa5d9fPKMvH1Q5bqYQvAZWOGRvxsB6iFLyycvC9MwNemNVjHVrWgjaoxAfY8XVg7DbvQ/qxvI9Eg==} + + prosemirror-schema-basic@1.2.4: + resolution: {integrity: sha512-ELxP4TlX3yr2v5rM7Sb70SqStq5NvI15c0j9j/gjsrO5vaw+fnnpovCLEGIcpeGfifkuqJwl4fon6b+KdrODYQ==} + + prosemirror-schema-list@1.5.1: + resolution: {integrity: sha512-927lFx/uwyQaGwJxLWCZRkjXG0p48KpMj6ueoYiu4JX05GGuGcgzAy62dfiV8eFZftgyBUvLx76RsMe20fJl+Q==} + + prosemirror-state@1.4.3: + resolution: {integrity: sha512-goFKORVbvPuAQaXhpbemJFRKJ2aixr+AZMGiquiqKxaucC6hlpHNZHWgz5R7dS4roHiwq9vDctE//CZ++o0W1Q==} + + prosemirror-tables@1.7.1: + resolution: {integrity: sha512-eRQ97Bf+i9Eby99QbyAiyov43iOKgWa7QCGly+lrDt7efZ1v8NWolhXiB43hSDGIXT1UXgbs4KJN3a06FGpr1Q==} + + prosemirror-trailing-node@3.0.0: + resolution: {integrity: sha512-xiun5/3q0w5eRnGYfNlW1uU9W6x5MoFKWwq/0TIRgt09lv7Hcser2QYV8t4muXbEr+Fwo0geYn79Xs4GKywrRQ==} + peerDependencies: + prosemirror-model: ^1.22.1 + prosemirror-state: ^1.4.2 + prosemirror-view: ^1.33.8 + + prosemirror-transform@1.10.4: + resolution: {integrity: sha512-pwDy22nAnGqNR1feOQKHxoFkkUtepoFAd3r2hbEDsnf4wp57kKA36hXsB3njA9FtONBEwSDnDeCiJe+ItD+ykw==} + + prosemirror-view@1.40.0: + resolution: {integrity: sha512-2G3svX0Cr1sJjkD/DYWSe3cfV5VPVTBOxI9XQEGWJDFEpsZb/gh4MV29ctv+OJx2RFX4BLt09i+6zaGM/ldkCw==} + proto-list@1.2.4: resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} @@ -7765,6 +8339,10 @@ packages: pumpify@1.5.1: resolution: {integrity: sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==} + punycode.js@2.3.1: + resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} + engines: {node: '>=6'} + punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} @@ -7806,6 +8384,9 @@ packages: resolution: {integrity: sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==} engines: {node: '>= 0.8'} + react-css-styled@1.1.9: + resolution: {integrity: sha512-M7fJZ3IWFaIHcZEkoFOnkjdiUFmwd8d+gTh2bpqMOcnxy/0Gsykw4dsL4QBiKsxcGow6tETUa4NAUcmJF+/nfw==} + react-dom@18.2.0: resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} peerDependencies: @@ -7830,6 +8411,15 @@ packages: react-lifecycles-compat@3.0.4: resolution: {integrity: sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==} + react-markdown@9.1.0: + resolution: {integrity: sha512-xaijuJB0kzGiUdG7nc2MOMDUDBWPyGAjZtUrow9XxUeua8IqeP+VlIfAZ3bphpcLTnSZXz6z9jcVC/TCwbfgdw==} + peerDependencies: + '@types/react': '>=18' + react: '>=18' + + react-moveable@0.56.0: + resolution: {integrity: sha512-FmJNmIOsOA36mdxbrc/huiE4wuXSRlmon/o+/OrfNhSiYYYL0AV5oObtPluEhb2Yr/7EfYWBHTxF5aWAvjg1SA==} + react-promise-suspense@0.3.4: resolution: {integrity: sha512-I42jl7L3Ze6kZaq+7zXWSunBa3b1on5yfvUW6Eo/3fFOj6dZ5Bqmcd264nJbTK/gn1HjjILAjSwnZbV4RpSaNQ==} @@ -7886,6 +8476,9 @@ packages: peerDependencies: react: '>=16.8' + react-selecto@1.26.3: + resolution: {integrity: sha512-Ubik7kWSnZyQEBNro+1k38hZaI1tJarE+5aD/qsqCOA1uUBSjgKVBy3EWRzGIbdmVex7DcxznFZLec/6KZNvwQ==} + react-style-singleton@2.2.3: resolution: {integrity: sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==} engines: {node: '>=10'} @@ -7896,6 +8489,12 @@ packages: '@types/react': optional: true + react-tweet@3.2.2: + resolution: {integrity: sha512-hIkxAVPpN2RqWoDEbo3TTnN/pDcp9/Jb6pTgiA4EbXa9S+m2vHIvvZKHR+eS0PDIsYqe+zTmANRa5k6+/iwGog==} + peerDependencies: + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + react-virtualized@9.22.6: resolution: {integrity: sha512-U5j7KuUQt3AaMatlMJ0UJddqSiX+Km0YJxSqbAzIiGw5EmNz0khMyqP2hzgu4+QUtm+QPIrxzUX4raJxmVJnHg==} peerDependencies: @@ -7984,9 +8583,15 @@ packages: remark-parse@10.0.2: resolution: {integrity: sha512-3ydxgHa/ZQzG8LvC7jTXccARYDcRld3VfcgIIFs7bI6vbRSxJJmzgLEIIoYKyrfhaY+ujuWaf/PJiMZXoiCXgw==} + remark-parse@11.0.0: + resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==} + remark-rehype@10.1.0: resolution: {integrity: sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw==} + remark-rehype@11.1.2: + resolution: {integrity: sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==} + remix-auth-oauth2@3.4.1: resolution: {integrity: sha512-ZhGon1czdIsOw1/O9EcTCzapZB6FpT3u9vtXSVeEMwGNs+iWljRsibnUC1RtwJbzzCdLBSwIXTNTbiRmLZ4cZw==} engines: {node: ^20.0.0 || >=20.0.0} @@ -8123,6 +8728,9 @@ packages: engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true + rope-sequence@1.3.4: + resolution: {integrity: sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ==} + router@2.2.0: resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==} engines: {node: '>= 18'} @@ -8177,6 +8785,9 @@ packages: selderee@0.11.0: resolution: {integrity: sha512-5TF+l7p4+OsnP8BCCvSyZiSPc4x4//p5uPwK8TCnVPJYRmU2aYKMpOXvw8zM5a5JvuuCGN1jmsMwuU2W02ukfA==} + selecto@1.26.3: + resolution: {integrity: sha512-gZHgqMy5uyB6/2YDjv3Qqaf7bd2hTDOpPdxXlrez4R3/L0GiEWDCFaUfrflomgqdb3SxHF2IXY0Jw0EamZi7cw==} + semver@5.7.2: resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} hasBin: true @@ -8316,6 +8927,10 @@ packages: resolution: {integrity: sha512-SE+UIQXBQE+GPG2oszWMlsEmWtHVqw/h1VrYJGK5/MC7CH5p58N448HwIrtREcvR4jfdOJAY4ieQfxMr55qbbw==} engines: {node: '>=10.2.0'} + socket.io@4.7.4: + resolution: {integrity: sha512-DcotgfP1Zg9iP/dH9zvAQcWrE0TtbMVwXmlV4T4mqsvY+gw+LqUGPfx2AoVyRk0FLME+GQhufDMyacFmw7ksqw==} + engines: {node: '>=10.2.0'} + sonner@1.3.1: resolution: {integrity: sha512-+rOAO56b2eI3q5BtgljERSn2umRk63KFIvgb2ohbZ5X+Eb5u+a/7/0ZgswYqgBMg8dyl7n6OXd9KasA8QF9ToA==} peerDependencies: @@ -8384,6 +8999,9 @@ packages: resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} engines: {node: '>= 0.8'} + std-env@3.9.0: + resolution: {integrity: sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==} + stop-iteration-iterator@1.1.0: resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} engines: {node: '>= 0.4'} @@ -8483,9 +9101,15 @@ packages: strnum@1.1.2: resolution: {integrity: sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA==} + style-to-js@1.1.17: + resolution: {integrity: sha512-xQcBGDxJb6jjFCTzvQtfiPn6YvvP2O8U1MDIPNfJQlWMYfktPy+iGsHE7cssjs7y84d9fQaK4UF3RIJaAHSoYA==} + style-to-object@0.4.4: resolution: {integrity: sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==} + style-to-object@1.0.9: + resolution: {integrity: sha512-G4qppLgKu/k6FwRpHiGiKPaPTFcG3g4wNVX/Qsfu+RqQM30E7Tyu/TEgxcL9PNLF5pdRLwQdE3YKKf+KF2Dzlw==} + styled-jsx@5.1.1: resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} engines: {node: '>= 12.0.0'} @@ -8524,10 +9148,6 @@ packages: resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} engines: {node: '>=10'} - supports-hyperlinks@2.3.0: - resolution: {integrity: sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==} - engines: {node: '>=8'} - supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} @@ -8597,14 +9217,13 @@ packages: resolution: {integrity: sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==} engines: {node: '>=18'} + tdigest@0.1.2: + resolution: {integrity: sha512-+G0LLgjjo9BZX2MfdvPfH+MKLCrxlXSYec5DaPYP1fe6Iyhf0/fSmJ0bFiZ1F8BT6cGXl2LpltQptzjXKWEkKA==} + term-size@2.2.1: resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} engines: {node: '>=8'} - terminal-link@3.0.0: - resolution: {integrity: sha512-flFL3m4wuixmf6IfhFJd1YPiLiMuxEc8uHRM1buzIeZPm22Au2pDqBJQgdo7n1WfPU1ONFGv7YDwpFBmHGF6lg==} - engines: {node: '>=12'} - terser-webpack-plugin@5.3.14: resolution: {integrity: sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==} engines: {node: '>= 10.13.0'} @@ -8653,6 +9272,12 @@ packages: resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==} engines: {node: '>=12.0.0'} + tippy.js@6.3.7: + resolution: {integrity: sha512-E1d3oP2emgJ9dRQZdf3Kkn0qJgI6ZLpyS5z6ZkY1DF3kaQaBsGZsndEpHwx+eC+tYM41HaSNvNtLx8tU57FzTQ==} + + tiptap-extension-global-drag-handle@0.1.18: + resolution: {integrity: sha512-jwFuy1K8DP3a4bFy76Hpc63w1Sil0B7uZ3mvhQomVvUFCU787Lg2FowNhn7NFzeyok761qY2VG+PZ/FDthWUdg==} + tmp@0.0.33: resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} engines: {node: '>=0.6.0'} @@ -8763,6 +9388,9 @@ packages: engines: {node: '>=8.0.0'} hasBin: true + tunnel-rat@0.1.2: + resolution: {integrity: sha512-lR5VHmkPhzdhrM092lI2nACsLO4QubF0/yoOhzX7c+wIpbN1GjHNzCc91QlpxBi+cnx8vVJ+Ur6vL5cEoQPFpQ==} + turbo-darwin-64@2.5.4: resolution: {integrity: sha512-ah6YnH2dErojhFooxEzmvsoZQTMImaruZhFPfMKPBq8sb+hALRdvBNLqfc8NWlZq576FkfRZ/MSi4SHvVFT9PQ==} cpu: [x64] @@ -8824,10 +9452,6 @@ packages: resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} engines: {node: '>=8'} - type-fest@1.4.0: - resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} - engines: {node: '>=10'} - type-fest@4.41.0: resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} engines: {node: '>=16'} @@ -8871,6 +9495,9 @@ packages: engines: {node: '>=14.17'} hasBin: true + uc.micro@2.1.0: + resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} + ufo@1.6.1: resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==} @@ -8893,6 +9520,9 @@ packages: undici-types@5.26.5: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + undici-types@6.21.0: + resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + undici-types@7.8.0: resolution: {integrity: sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==} @@ -8907,6 +9537,9 @@ packages: unified@10.1.2: resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==} + unified@11.0.5: + resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} + unique-filename@3.0.0: resolution: {integrity: sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -8921,24 +9554,39 @@ packages: unist-util-is@5.2.1: resolution: {integrity: sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==} + unist-util-is@6.0.0: + resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} + unist-util-position-from-estree@1.1.2: resolution: {integrity: sha512-poZa0eXpS+/XpoQwGwl79UUdea4ol2ZuCYguVaJS4qzIOMDzbqz8a3erUCOmubSZkaOuGamb3tX790iwOIROww==} unist-util-position@4.0.4: resolution: {integrity: sha512-kUBE91efOWfIVBo8xzh/uZQ7p9ffYRtUbMRZBNFYwf0RK8koUMx6dGUfwylLOKmaT2cs4wSW96QoYUSXAyEtpg==} + unist-util-position@5.0.0: + resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} + unist-util-remove-position@4.0.2: resolution: {integrity: sha512-TkBb0HABNmxzAcfLf4qsIbFbaPDvMO6wa3b3j4VcEzFVaw1LBKwnW4/sRJ/atSLSzoIg41JWEdnE7N6DIhGDGQ==} unist-util-stringify-position@3.0.3: resolution: {integrity: sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==} + unist-util-stringify-position@4.0.0: + resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} + unist-util-visit-parents@5.1.3: resolution: {integrity: sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==} + unist-util-visit-parents@6.0.1: + resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} + unist-util-visit@4.1.2: resolution: {integrity: sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==} + unist-util-visit@5.0.0: + resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} + universalify@0.1.2: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} engines: {node: '>= 4.0.0'} @@ -9033,9 +9681,15 @@ packages: vfile-message@3.1.4: resolution: {integrity: sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==} + vfile-message@4.0.2: + resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} + vfile@5.3.7: resolution: {integrity: sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==} + vfile@6.0.3: + resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} + vite-node@1.6.1: resolution: {integrity: sha512-YAXkfvGtuTzwWbDSACdJSg4A4DZiAqckWe90Zapc/sEX3XvHcw1NdurM/6od8J207tSDqNbSsgdCacBgvJKFuA==} engines: {node: ^18.0.0 || >=20.0.0} @@ -9125,6 +9779,9 @@ packages: yaml: optional: true + w3c-keyname@2.2.8: + resolution: {integrity: sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==} + watchpack@2.4.4: resolution: {integrity: sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==} engines: {node: '>=10.13.0'} @@ -9325,6 +9982,21 @@ packages: zod@3.23.8: resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} + zustand@4.5.7: + resolution: {integrity: sha512-CHOUy7mu3lbD6o6LJLfllpjkzhHXSBlX8B9+qPddUsIfeF5S/UZ5q0kmCsnRqT1UHFQZchNFDDzMbQsuesHWlw==} + engines: {node: '>=12.7.0'} + peerDependencies: + '@types/react': '>=16.8' + immer: '>=9.0.6' + react: '>=16.8' + peerDependenciesMeta: + '@types/react': + optional: true + immer: + optional: true + react: + optional: true + zwitch@2.0.4: resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} @@ -10014,6 +10686,12 @@ snapshots: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 + '@bugsnag/cuid@3.2.1': {} + + '@cfcs/core@0.0.6': + dependencies: + '@egjs/component': 3.0.5 + '@changesets/apply-release-plan@6.1.4': dependencies: '@babel/runtime': 7.27.6 @@ -10184,8 +10862,20 @@ snapshots: '@conform-to/dom': 0.6.3 zod: 3.23.8 + '@daybrush/utils@1.13.0': {} + '@edgefirst-dev/data@0.0.4': {} + '@egjs/agent@2.4.4': {} + + '@egjs/children-differ@1.0.1': + dependencies: + '@egjs/list-differ': 1.0.1 + + '@egjs/component@3.0.5': {} + + '@egjs/list-differ@1.0.1': {} + '@electric-sql/client@1.0.0-beta.1': optionalDependencies: '@rollup/rollup-darwin-arm64': 4.43.0 @@ -10817,6 +11507,11 @@ snapshots: '@opentelemetry/api': 1.9.0 '@opentelemetry/semantic-conventions': 1.25.1 + '@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/semantic-conventions': 1.28.0 + '@opentelemetry/exporter-logs-otlp-http@0.52.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -10967,6 +11662,8 @@ snapshots: '@opentelemetry/semantic-conventions@1.25.1': {} + '@opentelemetry/semantic-conventions@1.28.0': {} + '@oslojs/asn1@1.0.0': dependencies: '@oslojs/binary': 1.0.0 @@ -10989,6 +11686,8 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true + '@popperjs/core@2.11.8': {} + '@prisma/client@5.4.1(prisma@5.4.1)': dependencies: '@prisma/engines-version': 5.4.1-1.2f302df92bd8945e20ad4595a73def5b96afa54f @@ -11970,6 +12669,8 @@ snapshots: dependencies: react: 18.3.1 + '@remirror/core-constants@3.0.0': {} + '@remix-run/changelog-github@0.0.5(encoding@0.1.13)': dependencies: '@changesets/errors': 0.1.4 @@ -12323,6 +13024,19 @@ snapshots: '@rushstack/eslint-patch@1.11.0': {} + '@scena/dragscroll@1.4.0': + dependencies: + '@daybrush/utils': 1.13.0 + '@scena/event-emitter': 1.0.5 + + '@scena/event-emitter@1.0.5': + dependencies: + '@daybrush/utils': 1.13.0 + + '@scena/matrix@1.1.1': + dependencies: + '@daybrush/utils': 1.13.0 + '@sec-ant/readable-stream@0.4.1': {} '@selderee/plugin-htmlparser2@0.11.0': @@ -12647,7 +13361,7 @@ snapshots: '@swc/core-win32-x64-msvc@1.3.101': optional: true - '@swc/core@1.3.101(@swc/helpers@0.5.2)': + '@swc/core@1.3.101(@swc/helpers@0.5.17)': dependencies: '@swc/counter': 0.1.3 '@swc/types': 0.1.23 @@ -12662,10 +13376,14 @@ snapshots: '@swc/core-win32-arm64-msvc': 1.3.101 '@swc/core-win32-ia32-msvc': 1.3.101 '@swc/core-win32-x64-msvc': 1.3.101 - '@swc/helpers': 0.5.2 + '@swc/helpers': 0.5.17 '@swc/counter@0.1.3': {} + '@swc/helpers@0.5.17': + dependencies: + tslib: 2.8.1 + '@swc/helpers@0.5.2': dependencies: tslib: 2.8.1 @@ -12789,9 +13507,222 @@ snapshots: lz-string: 1.5.0 pretty-format: 27.5.1 - '@trigger.dev/build@3.3.17(typescript@5.8.3)': + '@tiptap/core@2.25.0(@tiptap/pm@2.25.0)': dependencies: - '@trigger.dev/core': 3.3.17 + '@tiptap/pm': 2.25.0 + + '@tiptap/extension-blockquote@2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0))': + dependencies: + '@tiptap/core': 2.25.0(@tiptap/pm@2.25.0) + + '@tiptap/extension-bold@2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0))': + dependencies: + '@tiptap/core': 2.25.0(@tiptap/pm@2.25.0) + + '@tiptap/extension-bubble-menu@2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0))(@tiptap/pm@2.25.0)': + dependencies: + '@tiptap/core': 2.25.0(@tiptap/pm@2.25.0) + '@tiptap/pm': 2.25.0 + tippy.js: 6.3.7 + + '@tiptap/extension-bullet-list@2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0))': + dependencies: + '@tiptap/core': 2.25.0(@tiptap/pm@2.25.0) + + '@tiptap/extension-character-count@2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0))(@tiptap/pm@2.25.0)': + dependencies: + '@tiptap/core': 2.25.0(@tiptap/pm@2.25.0) + '@tiptap/pm': 2.25.0 + + '@tiptap/extension-code-block-lowlight@2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0))(@tiptap/extension-code-block@2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0))(@tiptap/pm@2.25.0))(@tiptap/pm@2.25.0)(highlight.js@11.11.1)(lowlight@3.3.0)': + dependencies: + '@tiptap/core': 2.25.0(@tiptap/pm@2.25.0) + '@tiptap/extension-code-block': 2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0))(@tiptap/pm@2.25.0) + '@tiptap/pm': 2.25.0 + highlight.js: 11.11.1 + lowlight: 3.3.0 + + '@tiptap/extension-code-block@2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0))(@tiptap/pm@2.25.0)': + dependencies: + '@tiptap/core': 2.25.0(@tiptap/pm@2.25.0) + '@tiptap/pm': 2.25.0 + + '@tiptap/extension-code@2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0))': + dependencies: + '@tiptap/core': 2.25.0(@tiptap/pm@2.25.0) + + '@tiptap/extension-color@2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0))(@tiptap/extension-text-style@2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0)))': + dependencies: + '@tiptap/core': 2.25.0(@tiptap/pm@2.25.0) + '@tiptap/extension-text-style': 2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0)) + + '@tiptap/extension-document@2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0))': + dependencies: + '@tiptap/core': 2.25.0(@tiptap/pm@2.25.0) + + '@tiptap/extension-dropcursor@2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0))(@tiptap/pm@2.25.0)': + dependencies: + '@tiptap/core': 2.25.0(@tiptap/pm@2.25.0) + '@tiptap/pm': 2.25.0 + + '@tiptap/extension-floating-menu@2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0))(@tiptap/pm@2.25.0)': + dependencies: + '@tiptap/core': 2.25.0(@tiptap/pm@2.25.0) + '@tiptap/pm': 2.25.0 + tippy.js: 6.3.7 + + '@tiptap/extension-gapcursor@2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0))(@tiptap/pm@2.25.0)': + dependencies: + '@tiptap/core': 2.25.0(@tiptap/pm@2.25.0) + '@tiptap/pm': 2.25.0 + + '@tiptap/extension-hard-break@2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0))': + dependencies: + '@tiptap/core': 2.25.0(@tiptap/pm@2.25.0) + + '@tiptap/extension-heading@2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0))': + dependencies: + '@tiptap/core': 2.25.0(@tiptap/pm@2.25.0) + + '@tiptap/extension-highlight@2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0))': + dependencies: + '@tiptap/core': 2.25.0(@tiptap/pm@2.25.0) + + '@tiptap/extension-history@2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0))(@tiptap/pm@2.25.0)': + dependencies: + '@tiptap/core': 2.25.0(@tiptap/pm@2.25.0) + '@tiptap/pm': 2.25.0 + + '@tiptap/extension-horizontal-rule@2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0))(@tiptap/pm@2.25.0)': + dependencies: + '@tiptap/core': 2.25.0(@tiptap/pm@2.25.0) + '@tiptap/pm': 2.25.0 + + '@tiptap/extension-image@2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0))': + dependencies: + '@tiptap/core': 2.25.0(@tiptap/pm@2.25.0) + + '@tiptap/extension-italic@2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0))': + dependencies: + '@tiptap/core': 2.25.0(@tiptap/pm@2.25.0) + + '@tiptap/extension-link@2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0))(@tiptap/pm@2.25.0)': + dependencies: + '@tiptap/core': 2.25.0(@tiptap/pm@2.25.0) + '@tiptap/pm': 2.25.0 + linkifyjs: 4.3.1 + + '@tiptap/extension-list-item@2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0))': + dependencies: + '@tiptap/core': 2.25.0(@tiptap/pm@2.25.0) + + '@tiptap/extension-ordered-list@2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0))': + dependencies: + '@tiptap/core': 2.25.0(@tiptap/pm@2.25.0) + + '@tiptap/extension-paragraph@2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0))': + dependencies: + '@tiptap/core': 2.25.0(@tiptap/pm@2.25.0) + + '@tiptap/extension-placeholder@2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0))(@tiptap/pm@2.25.0)': + dependencies: + '@tiptap/core': 2.25.0(@tiptap/pm@2.25.0) + '@tiptap/pm': 2.25.0 + + '@tiptap/extension-strike@2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0))': + dependencies: + '@tiptap/core': 2.25.0(@tiptap/pm@2.25.0) + + '@tiptap/extension-task-item@2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0))(@tiptap/pm@2.25.0)': + dependencies: + '@tiptap/core': 2.25.0(@tiptap/pm@2.25.0) + '@tiptap/pm': 2.25.0 + + '@tiptap/extension-task-list@2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0))': + dependencies: + '@tiptap/core': 2.25.0(@tiptap/pm@2.25.0) + + '@tiptap/extension-text-style@2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0))': + dependencies: + '@tiptap/core': 2.25.0(@tiptap/pm@2.25.0) + + '@tiptap/extension-text@2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0))': + dependencies: + '@tiptap/core': 2.25.0(@tiptap/pm@2.25.0) + + '@tiptap/extension-underline@2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0))': + dependencies: + '@tiptap/core': 2.25.0(@tiptap/pm@2.25.0) + + '@tiptap/extension-youtube@2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0))': + dependencies: + '@tiptap/core': 2.25.0(@tiptap/pm@2.25.0) + + '@tiptap/pm@2.25.0': + dependencies: + prosemirror-changeset: 2.3.1 + prosemirror-collab: 1.3.1 + prosemirror-commands: 1.7.1 + prosemirror-dropcursor: 1.8.2 + prosemirror-gapcursor: 1.3.2 + prosemirror-history: 1.4.1 + prosemirror-inputrules: 1.5.0 + prosemirror-keymap: 1.2.3 + prosemirror-markdown: 1.13.2 + prosemirror-menu: 1.2.5 + prosemirror-model: 1.25.1 + prosemirror-schema-basic: 1.2.4 + prosemirror-schema-list: 1.5.1 + prosemirror-state: 1.4.3 + prosemirror-tables: 1.7.1 + prosemirror-trailing-node: 3.0.0(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.40.0) + prosemirror-transform: 1.10.4 + prosemirror-view: 1.40.0 + + '@tiptap/react@2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0))(@tiptap/pm@2.25.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@tiptap/core': 2.25.0(@tiptap/pm@2.25.0) + '@tiptap/extension-bubble-menu': 2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0))(@tiptap/pm@2.25.0) + '@tiptap/extension-floating-menu': 2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0))(@tiptap/pm@2.25.0) + '@tiptap/pm': 2.25.0 + '@types/use-sync-external-store': 0.0.6 + fast-deep-equal: 3.1.3 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + use-sync-external-store: 1.5.0(react@18.3.1) + + '@tiptap/starter-kit@2.11.9': + dependencies: + '@tiptap/core': 2.25.0(@tiptap/pm@2.25.0) + '@tiptap/extension-blockquote': 2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0)) + '@tiptap/extension-bold': 2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0)) + '@tiptap/extension-bullet-list': 2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0)) + '@tiptap/extension-code': 2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0)) + '@tiptap/extension-code-block': 2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0))(@tiptap/pm@2.25.0) + '@tiptap/extension-document': 2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0)) + '@tiptap/extension-dropcursor': 2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0))(@tiptap/pm@2.25.0) + '@tiptap/extension-gapcursor': 2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0))(@tiptap/pm@2.25.0) + '@tiptap/extension-hard-break': 2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0)) + '@tiptap/extension-heading': 2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0)) + '@tiptap/extension-history': 2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0))(@tiptap/pm@2.25.0) + '@tiptap/extension-horizontal-rule': 2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0))(@tiptap/pm@2.25.0) + '@tiptap/extension-italic': 2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0)) + '@tiptap/extension-list-item': 2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0)) + '@tiptap/extension-ordered-list': 2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0)) + '@tiptap/extension-paragraph': 2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0)) + '@tiptap/extension-strike': 2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0)) + '@tiptap/extension-text': 2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0)) + '@tiptap/extension-text-style': 2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0)) + '@tiptap/pm': 2.25.0 + + '@tiptap/suggestion@2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0))(@tiptap/pm@2.25.0)': + dependencies: + '@tiptap/core': 2.25.0(@tiptap/pm@2.25.0) + '@tiptap/pm': 2.25.0 + + '@trigger.dev/build@4.0.0-v4-beta.22(typescript@5.8.3)': + dependencies: + '@trigger.dev/core': 4.0.0-v4-beta.22 pkg-types: 1.3.1 tinyglobby: 0.2.14 tsconfck: 3.1.3(typescript@5.8.3) @@ -12801,13 +13732,15 @@ snapshots: - typescript - utf-8-validate - '@trigger.dev/core@3.3.17': + '@trigger.dev/core@4.0.0-v4-beta.22': dependencies: + '@bugsnag/cuid': 3.2.1 '@electric-sql/client': 1.0.0-beta.1 '@google-cloud/precise-date': 4.0.0 '@jsonhero/path': 1.0.21 '@opentelemetry/api': 1.9.0 '@opentelemetry/api-logs': 0.52.1 + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) '@opentelemetry/exporter-logs-otlp-http': 0.52.1(@opentelemetry/api@1.9.0) '@opentelemetry/exporter-trace-otlp-http': 0.52.1(@opentelemetry/api@1.9.0) '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) @@ -12824,8 +13757,12 @@ snapshots: humanize-duration: 3.33.0 jose: 5.10.0 nanoid: 3.3.8 + prom-client: 15.1.3 + socket.io: 4.7.4 socket.io-client: 4.7.5 + std-env: 3.9.0 superjson: 2.2.2 + tinyexec: 0.3.2 zod: 3.23.8 zod-error: 1.5.0 zod-validation-error: 1.5.0(zod@3.23.8) @@ -12834,23 +13771,35 @@ snapshots: - supports-color - utf-8-validate - '@trigger.dev/sdk@3.3.17(zod@3.23.8)': + '@trigger.dev/react-hooks@4.0.0-v4-beta.22(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@trigger.dev/core': 4.0.0-v4-beta.22 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + swr: 2.3.3(react@18.3.1) + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + '@trigger.dev/sdk@4.0.0-v4-beta.22(ai@4.3.14(react@18.3.1)(zod@3.23.8))(zod@3.23.8)': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/api-logs': 0.52.1 '@opentelemetry/semantic-conventions': 1.25.1 - '@trigger.dev/core': 3.3.17 + '@trigger.dev/core': 4.0.0-v4-beta.22 chalk: 5.4.1 cronstrue: 2.59.0 debug: 4.4.1 evt: 2.5.9 slug: 6.1.0 - terminal-link: 3.0.0 ulid: 2.4.0 uncrypto: 0.1.3 uuid: 9.0.1 ws: 8.17.1 zod: 3.23.8 + optionalDependencies: + ai: 4.3.14(react@18.3.1)(zod@3.23.8) transitivePeerDependencies: - bufferutil - supports-color @@ -13052,6 +14001,10 @@ snapshots: dependencies: '@types/unist': 2.0.11 + '@types/hast@3.0.4': + dependencies: + '@types/unist': 2.0.11 + '@types/http-errors@2.0.5': {} '@types/is-ci@3.0.4': @@ -13062,10 +14015,23 @@ snapshots: '@types/json5@0.0.29': {} + '@types/linkify-it@5.0.0': {} + + '@types/markdown-it@14.1.2': + dependencies: + '@types/linkify-it': 5.0.0 + '@types/mdurl': 2.0.0 + '@types/mdast@3.0.15': dependencies: '@types/unist': 2.0.11 + '@types/mdast@4.0.4': + dependencies: + '@types/unist': 2.0.11 + + '@types/mdurl@2.0.0': {} + '@types/mdx@2.0.13': {} '@types/mime@1.3.5': {} @@ -13084,6 +14050,10 @@ snapshots: dependencies: undici-types: 5.26.5 + '@types/node@22.16.0': + dependencies: + undici-types: 6.21.0 + '@types/node@24.0.0': dependencies: undici-types: 7.8.0 @@ -13106,6 +14076,11 @@ snapshots: dependencies: '@types/react': 18.2.69 + '@types/react-virtualized@9.22.2': + dependencies: + '@types/prop-types': 15.7.15 + '@types/react': 18.2.69 + '@types/react@18.2.47': dependencies: '@types/prop-types': 15.7.15 @@ -13141,15 +14116,19 @@ snapshots: '@types/unist@2.0.11': {} + '@types/unist@3.0.3': {} + + '@types/use-sync-external-store@0.0.6': {} + '@types/uuid@9.0.8': {} '@types/validator@13.15.2': {} - '@types/webpack@5.28.5(@swc/core@1.3.101(@swc/helpers@0.5.2))(esbuild@0.19.11)': + '@types/webpack@5.28.5(@swc/core@1.3.101(@swc/helpers@0.5.17))(esbuild@0.19.11)': dependencies: '@types/node': 18.19.115 tapable: 2.2.2 - webpack: 5.99.9(@swc/core@1.3.101(@swc/helpers@0.5.2))(esbuild@0.19.11) + webpack: 5.99.9(@swc/core@1.3.101(@swc/helpers@0.5.17))(esbuild@0.19.11) transitivePeerDependencies: - '@swc/core' - esbuild @@ -13602,10 +14581,6 @@ snapshots: ansi-colors@4.1.3: {} - ansi-escapes@5.0.0: - dependencies: - type-fest: 1.4.0 - ansi-regex@5.0.1: {} ansi-regex@6.1.0: {} @@ -13800,6 +14775,8 @@ snapshots: binary-extensions@2.3.0: {} + bintrees@1.0.2: {} + bl@4.1.0: dependencies: buffer: 5.7.1 @@ -14063,6 +15040,18 @@ snapshots: cluster-key-slot@1.1.2: {} + cmdk@1.1.1(@types/react-dom@18.3.7(@types/react@18.2.69))(@types/react@18.2.69)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.2.69)(react@18.3.1) + '@radix-ui/react-dialog': 1.1.14(@types/react-dom@18.3.7(@types/react@18.2.69))(@types/react@18.2.69)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-id': 1.1.1(@types/react@18.2.69)(react@18.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.2.69))(@types/react@18.2.69)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + transitivePeerDependencies: + - '@types/react' + - '@types/react-dom' + color-convert@1.9.3: dependencies: color-name: 1.1.3 @@ -14103,6 +15092,8 @@ snapshots: commander@7.2.0: {} + commander@8.3.0: {} + compressible@2.0.18: dependencies: mime-db: 1.54.0 @@ -14176,6 +15167,8 @@ snapshots: optionalDependencies: typescript: 5.8.3 + crelt@1.0.6: {} + cron-parser@4.9.0: dependencies: luxon: 3.6.1 @@ -14221,6 +15214,15 @@ snapshots: optionalDependencies: webpack: 5.99.9(esbuild@0.25.5) + css-styled@1.0.8: + dependencies: + '@daybrush/utils': 1.13.0 + + css-to-mat@1.1.1: + dependencies: + '@daybrush/utils': 1.13.0 + '@scena/matrix': 1.1.1 + css-unit-converter@1.1.2: {} css-what@6.1.0: {} @@ -14524,6 +15526,10 @@ snapshots: defined: 1.0.1 minimist: 1.2.8 + devlop@1.1.0: + dependencies: + dequal: 2.0.3 + didyoumean@1.2.2: {} diff-match-patch@1.0.5: {} @@ -15230,6 +16236,8 @@ snapshots: estree-util-is-identifier-name@2.1.0: {} + estree-util-is-identifier-name@3.0.0: {} + estree-util-to-js@1.2.0: dependencies: '@types/estree-jsx': 1.0.5 @@ -15415,6 +16423,8 @@ snapshots: fast-levenshtein@2.0.6: {} + fast-sort@3.4.1: {} + fast-uri@3.0.6: {} fast-xml-parser@4.4.1: @@ -15532,6 +16542,8 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + framework-utils@1.1.0: {} + fresh@0.5.2: {} fresh@2.0.0: {} @@ -15588,6 +16600,11 @@ snapshots: gensync@1.0.0-beta.2: {} + gesto@1.19.4: + dependencies: + '@daybrush/utils': 1.13.0 + '@scena/event-emitter': 1.0.5 + get-caller-file@2.0.5: {} get-intrinsic@1.3.0: @@ -15796,8 +16813,34 @@ snapshots: transitivePeerDependencies: - supports-color + hast-util-to-jsx-runtime@2.3.6: + dependencies: + '@types/estree': 1.0.8 + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + comma-separated-tokens: 2.0.3 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + hast-util-whitespace: 3.0.0 + mdast-util-mdx-expression: 2.0.1 + mdast-util-mdx-jsx: 3.2.0 + mdast-util-mdxjs-esm: 2.0.1 + property-information: 7.1.0 + space-separated-tokens: 2.0.2 + style-to-js: 1.1.17 + unist-util-position: 5.0.0 + vfile-message: 4.0.2 + transitivePeerDependencies: + - supports-color + hast-util-whitespace@2.0.1: {} + hast-util-whitespace@3.0.0: + dependencies: + '@types/hast': 3.0.4 + + highlight.js@11.11.1: {} + hosted-git-info@2.8.9: {} hosted-git-info@6.1.3: @@ -15814,6 +16857,8 @@ snapshots: htmlparser2: 8.0.2 selderee: 0.11.0 + html-url-attributes@3.0.1: {} + htmlparser2@8.0.2: dependencies: domelementtype: 2.3.0 @@ -15882,6 +16927,8 @@ snapshots: inline-style-parser@0.1.1: {} + inline-style-parser@0.2.4: {} + internal-slot@1.1.0: dependencies: es-errors: 1.3.0 @@ -16142,6 +17189,11 @@ snapshots: jose@5.10.0: {} + jotai@2.12.5(@types/react@18.2.69)(react@18.3.1): + optionalDependencies: + '@types/react': 18.2.69 + react: 18.3.1 + joycon@3.1.1: {} js-beautify@1.15.4: @@ -16212,6 +17264,19 @@ snapshots: object.assign: 4.1.7 object.values: 1.2.1 + katex@0.16.22: + dependencies: + commander: 8.3.0 + + keycode@2.2.1: {} + + keycon@1.4.0: + dependencies: + '@cfcs/core': 0.0.6 + '@daybrush/utils': 1.13.0 + '@scena/event-emitter': 1.0.5 + keycode: 2.2.1 + keyv@4.5.4: dependencies: json-buffer: 3.0.1 @@ -16286,6 +17351,12 @@ snapshots: lines-and-columns@1.2.4: {} + linkify-it@5.0.0: + dependencies: + uc.micro: 2.1.0 + + linkifyjs@4.3.1: {} + load-json-file@4.0.0: dependencies: graceful-fs: 4.2.11 @@ -16353,6 +17424,12 @@ snapshots: dependencies: js-tokens: 4.0.0 + lowlight@3.3.0: + dependencies: + '@types/hast': 3.0.4 + devlop: 1.1.0 + highlight.js: 11.11.1 + lru-cache@10.4.3: {} lru-cache@11.1.0: {} @@ -16386,6 +17463,15 @@ snapshots: markdown-extensions@1.1.1: {} + markdown-it@14.1.0: + dependencies: + argparse: 2.0.1 + entities: 4.5.0 + linkify-it: 5.0.0 + mdurl: 2.0.0 + punycode.js: 2.3.1 + uc.micro: 2.1.0 + marked@7.0.4: {} math-intrinsics@1.1.0: {} @@ -16418,6 +17504,23 @@ snapshots: transitivePeerDependencies: - supports-color + mdast-util-from-markdown@2.0.2: + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + decode-named-character-reference: 1.1.0 + devlop: 1.1.0 + mdast-util-to-string: 4.0.0 + micromark: 4.0.2 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-decode-string: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + unist-util-stringify-position: 4.0.0 + transitivePeerDependencies: + - supports-color + mdast-util-frontmatter@1.0.1: dependencies: '@types/mdast': 3.0.15 @@ -16434,6 +17537,17 @@ snapshots: transitivePeerDependencies: - supports-color + mdast-util-mdx-expression@2.0.1: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + mdast-util-mdx-jsx@2.1.4: dependencies: '@types/estree-jsx': 1.0.5 @@ -16451,6 +17565,23 @@ snapshots: transitivePeerDependencies: - supports-color + mdast-util-mdx-jsx@3.2.0: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + ccount: 2.0.1 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + parse-entities: 4.0.2 + stringify-entities: 4.0.4 + unist-util-stringify-position: 4.0.0 + vfile-message: 4.0.2 + transitivePeerDependencies: + - supports-color + mdast-util-mdx@2.0.1: dependencies: mdast-util-from-markdown: 1.3.1 @@ -16471,11 +17602,27 @@ snapshots: transitivePeerDependencies: - supports-color + mdast-util-mdxjs-esm@2.0.1: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + mdast-util-phrasing@3.0.1: dependencies: '@types/mdast': 3.0.15 unist-util-is: 5.2.1 + mdast-util-phrasing@4.1.0: + dependencies: + '@types/mdast': 4.0.4 + unist-util-is: 6.0.0 + mdast-util-to-hast@12.3.0: dependencies: '@types/hast': 2.3.10 @@ -16487,6 +17634,18 @@ snapshots: unist-util-position: 4.0.4 unist-util-visit: 4.1.2 + mdast-util-to-hast@13.2.0: + dependencies: + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + '@ungap/structured-clone': 1.3.0 + devlop: 1.1.0 + micromark-util-sanitize-uri: 2.0.1 + trim-lines: 3.0.1 + unist-util-position: 5.0.0 + unist-util-visit: 5.0.0 + vfile: 6.0.3 + mdast-util-to-markdown@1.5.0: dependencies: '@types/mdast': 3.0.15 @@ -16498,10 +17657,28 @@ snapshots: unist-util-visit: 4.1.2 zwitch: 2.0.4 + mdast-util-to-markdown@2.1.2: + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + longest-streak: 3.1.0 + mdast-util-phrasing: 4.1.0 + mdast-util-to-string: 4.0.0 + micromark-util-classify-character: 2.0.1 + micromark-util-decode-string: 2.0.1 + unist-util-visit: 5.0.0 + zwitch: 2.0.4 + mdast-util-to-string@3.2.0: dependencies: '@types/mdast': 3.0.15 + mdast-util-to-string@4.0.0: + dependencies: + '@types/mdast': 4.0.4 + + mdurl@2.0.0: {} + media-query-parser@2.0.2: dependencies: '@babel/runtime': 7.27.6 @@ -16555,6 +17732,25 @@ snapshots: micromark-util-types: 1.1.0 uvu: 0.5.6 + micromark-core-commonmark@2.0.3: + dependencies: + decode-named-character-reference: 1.1.0 + devlop: 1.1.0 + micromark-factory-destination: 2.0.1 + micromark-factory-label: 2.0.1 + micromark-factory-space: 2.0.1 + micromark-factory-title: 2.0.1 + micromark-factory-whitespace: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-chunked: 2.0.1 + micromark-util-classify-character: 2.0.1 + micromark-util-html-tag-name: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-subtokenize: 2.1.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + micromark-extension-frontmatter@1.1.1: dependencies: fault: 2.0.1 @@ -16619,6 +17815,12 @@ snapshots: micromark-util-symbol: 1.1.0 micromark-util-types: 1.1.0 + micromark-factory-destination@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + micromark-factory-label@1.1.0: dependencies: micromark-util-character: 1.2.0 @@ -16626,6 +17828,13 @@ snapshots: micromark-util-types: 1.1.0 uvu: 0.5.6 + micromark-factory-label@2.0.1: + dependencies: + devlop: 1.1.0 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + micromark-factory-mdx-expression@1.0.9: dependencies: '@types/estree': 1.0.8 @@ -16642,6 +17851,11 @@ snapshots: micromark-util-character: 1.2.0 micromark-util-types: 1.1.0 + micromark-factory-space@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-types: 2.0.2 + micromark-factory-title@1.1.0: dependencies: micromark-factory-space: 1.1.0 @@ -16649,6 +17863,13 @@ snapshots: micromark-util-symbol: 1.1.0 micromark-util-types: 1.1.0 + micromark-factory-title@2.0.1: + dependencies: + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + micromark-factory-whitespace@1.1.0: dependencies: micromark-factory-space: 1.1.0 @@ -16656,30 +17877,61 @@ snapshots: micromark-util-symbol: 1.1.0 micromark-util-types: 1.1.0 + micromark-factory-whitespace@2.0.1: + dependencies: + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + micromark-util-character@1.2.0: dependencies: micromark-util-symbol: 1.1.0 micromark-util-types: 1.1.0 + micromark-util-character@2.1.1: + dependencies: + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + micromark-util-chunked@1.1.0: dependencies: micromark-util-symbol: 1.1.0 + micromark-util-chunked@2.0.1: + dependencies: + micromark-util-symbol: 2.0.1 + micromark-util-classify-character@1.1.0: dependencies: micromark-util-character: 1.2.0 micromark-util-symbol: 1.1.0 micromark-util-types: 1.1.0 + micromark-util-classify-character@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + micromark-util-combine-extensions@1.1.0: dependencies: micromark-util-chunked: 1.1.0 micromark-util-types: 1.1.0 + micromark-util-combine-extensions@2.0.1: + dependencies: + micromark-util-chunked: 2.0.1 + micromark-util-types: 2.0.2 + micromark-util-decode-numeric-character-reference@1.1.0: dependencies: micromark-util-symbol: 1.1.0 + micromark-util-decode-numeric-character-reference@2.0.2: + dependencies: + micromark-util-symbol: 2.0.1 + micromark-util-decode-string@1.1.0: dependencies: decode-named-character-reference: 1.1.0 @@ -16687,8 +17939,17 @@ snapshots: micromark-util-decode-numeric-character-reference: 1.1.0 micromark-util-symbol: 1.1.0 + micromark-util-decode-string@2.0.1: + dependencies: + decode-named-character-reference: 1.1.0 + micromark-util-character: 2.1.1 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-symbol: 2.0.1 + micromark-util-encode@1.1.0: {} + micromark-util-encode@2.0.1: {} + micromark-util-events-to-acorn@1.2.3: dependencies: '@types/acorn': 4.0.6 @@ -16702,20 +17963,36 @@ snapshots: micromark-util-html-tag-name@1.2.0: {} + micromark-util-html-tag-name@2.0.1: {} + micromark-util-normalize-identifier@1.1.0: dependencies: micromark-util-symbol: 1.1.0 + micromark-util-normalize-identifier@2.0.1: + dependencies: + micromark-util-symbol: 2.0.1 + micromark-util-resolve-all@1.1.0: dependencies: micromark-util-types: 1.1.0 + micromark-util-resolve-all@2.0.1: + dependencies: + micromark-util-types: 2.0.2 + micromark-util-sanitize-uri@1.2.0: dependencies: micromark-util-character: 1.2.0 micromark-util-encode: 1.1.0 micromark-util-symbol: 1.1.0 + micromark-util-sanitize-uri@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-encode: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-subtokenize@1.1.0: dependencies: micromark-util-chunked: 1.1.0 @@ -16723,10 +18000,21 @@ snapshots: micromark-util-types: 1.1.0 uvu: 0.5.6 + micromark-util-subtokenize@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-util-chunked: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + micromark-util-symbol@1.1.0: {} + micromark-util-symbol@2.0.1: {} + micromark-util-types@1.1.0: {} + micromark-util-types@2.0.2: {} + micromark@3.2.0: dependencies: '@types/debug': 4.1.12 @@ -16749,6 +18037,28 @@ snapshots: transitivePeerDependencies: - supports-color + micromark@4.0.2: + dependencies: + '@types/debug': 4.1.12 + debug: 4.4.1 + decode-named-character-reference: 1.1.0 + devlop: 1.1.0 + micromark-core-commonmark: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-chunked: 2.0.1 + micromark-util-combine-extensions: 2.0.1 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-encode: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-subtokenize: 2.1.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + transitivePeerDependencies: + - supports-color + micromatch@4.0.8: dependencies: braces: 3.0.3 @@ -17001,6 +18311,48 @@ snapshots: normalize.css@8.0.1: {} + novel@1.0.2(@tiptap/extension-code-block@2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0))(@tiptap/pm@2.25.0))(@types/react-dom@18.3.7(@types/react@18.2.69))(@types/react@18.2.69)(highlight.js@11.11.1)(lowlight@3.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@radix-ui/react-slot': 1.2.3(@types/react@18.2.69)(react@18.3.1) + '@tiptap/core': 2.25.0(@tiptap/pm@2.25.0) + '@tiptap/extension-character-count': 2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0))(@tiptap/pm@2.25.0) + '@tiptap/extension-code-block-lowlight': 2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0))(@tiptap/extension-code-block@2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0))(@tiptap/pm@2.25.0))(@tiptap/pm@2.25.0)(highlight.js@11.11.1)(lowlight@3.3.0) + '@tiptap/extension-color': 2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0))(@tiptap/extension-text-style@2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0))) + '@tiptap/extension-highlight': 2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0)) + '@tiptap/extension-horizontal-rule': 2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0))(@tiptap/pm@2.25.0) + '@tiptap/extension-image': 2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0)) + '@tiptap/extension-link': 2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0))(@tiptap/pm@2.25.0) + '@tiptap/extension-placeholder': 2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0))(@tiptap/pm@2.25.0) + '@tiptap/extension-task-item': 2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0))(@tiptap/pm@2.25.0) + '@tiptap/extension-task-list': 2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0)) + '@tiptap/extension-text-style': 2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0)) + '@tiptap/extension-underline': 2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0)) + '@tiptap/extension-youtube': 2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0)) + '@tiptap/pm': 2.25.0 + '@tiptap/react': 2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0))(@tiptap/pm@2.25.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@tiptap/starter-kit': 2.11.9 + '@tiptap/suggestion': 2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0))(@tiptap/pm@2.25.0) + '@types/node': 22.16.0 + cmdk: 1.1.1(@types/react-dom@18.3.7(@types/react@18.2.69))(@types/react@18.2.69)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + jotai: 2.12.5(@types/react@18.2.69)(react@18.3.1) + katex: 0.16.22 + react: 18.3.1 + react-markdown: 9.1.0(@types/react@18.2.69)(react@18.3.1) + react-moveable: 0.56.0 + react-tweet: 3.2.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + tippy.js: 6.3.7 + tiptap-extension-global-drag-handle: 0.1.18 + tunnel-rat: 0.1.2(@types/react@18.2.69)(react@18.3.1) + transitivePeerDependencies: + - '@tiptap/extension-code-block' + - '@types/react' + - '@types/react-dom' + - highlight.js + - immer + - lowlight + - react-dom + - supports-color + npm-install-checks@6.3.0: dependencies: semver: 7.7.2 @@ -17150,12 +18502,18 @@ snapshots: strip-ansi: 6.0.1 wcwidth: 1.0.1 + orderedmap@2.1.1: {} + os-tmpdir@1.0.2: {} outdent@0.5.0: {} outdent@0.8.0: {} + overlap-area@1.1.0: + dependencies: + '@daybrush/utils': 1.13.0 + own-keys@1.0.1: dependencies: get-intrinsic: 1.3.0 @@ -17552,6 +18910,11 @@ snapshots: process-nextick-args@2.0.1: {} + prom-client@15.1.3: + dependencies: + '@opentelemetry/api': 1.9.0 + tdigest: 0.1.2 + promise-inflight@1.0.1: {} promise-retry@2.0.1: @@ -17567,6 +18930,111 @@ snapshots: property-information@6.5.0: {} + property-information@7.1.0: {} + + prosemirror-changeset@2.3.1: + dependencies: + prosemirror-transform: 1.10.4 + + prosemirror-collab@1.3.1: + dependencies: + prosemirror-state: 1.4.3 + + prosemirror-commands@1.7.1: + dependencies: + prosemirror-model: 1.25.1 + prosemirror-state: 1.4.3 + prosemirror-transform: 1.10.4 + + prosemirror-dropcursor@1.8.2: + dependencies: + prosemirror-state: 1.4.3 + prosemirror-transform: 1.10.4 + prosemirror-view: 1.40.0 + + prosemirror-gapcursor@1.3.2: + dependencies: + prosemirror-keymap: 1.2.3 + prosemirror-model: 1.25.1 + prosemirror-state: 1.4.3 + prosemirror-view: 1.40.0 + + prosemirror-history@1.4.1: + dependencies: + prosemirror-state: 1.4.3 + prosemirror-transform: 1.10.4 + prosemirror-view: 1.40.0 + rope-sequence: 1.3.4 + + prosemirror-inputrules@1.5.0: + dependencies: + prosemirror-state: 1.4.3 + prosemirror-transform: 1.10.4 + + prosemirror-keymap@1.2.3: + dependencies: + prosemirror-state: 1.4.3 + w3c-keyname: 2.2.8 + + prosemirror-markdown@1.13.2: + dependencies: + '@types/markdown-it': 14.1.2 + markdown-it: 14.1.0 + prosemirror-model: 1.25.1 + + prosemirror-menu@1.2.5: + dependencies: + crelt: 1.0.6 + prosemirror-commands: 1.7.1 + prosemirror-history: 1.4.1 + prosemirror-state: 1.4.3 + + prosemirror-model@1.25.1: + dependencies: + orderedmap: 2.1.1 + + prosemirror-schema-basic@1.2.4: + dependencies: + prosemirror-model: 1.25.1 + + prosemirror-schema-list@1.5.1: + dependencies: + prosemirror-model: 1.25.1 + prosemirror-state: 1.4.3 + prosemirror-transform: 1.10.4 + + prosemirror-state@1.4.3: + dependencies: + prosemirror-model: 1.25.1 + prosemirror-transform: 1.10.4 + prosemirror-view: 1.40.0 + + prosemirror-tables@1.7.1: + dependencies: + prosemirror-keymap: 1.2.3 + prosemirror-model: 1.25.1 + prosemirror-state: 1.4.3 + prosemirror-transform: 1.10.4 + prosemirror-view: 1.40.0 + + prosemirror-trailing-node@3.0.0(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.40.0): + dependencies: + '@remirror/core-constants': 3.0.0 + escape-string-regexp: 4.0.0 + prosemirror-model: 1.25.1 + prosemirror-state: 1.4.3 + prosemirror-view: 1.40.0 + + prosemirror-transform@1.10.4: + dependencies: + prosemirror-model: 1.25.1 + + prosemirror-view@1.40.0: + dependencies: + prosemirror-model: 1.25.1 + prosemirror-state: 1.4.3 + prosemirror-transform: 1.10.4 + proto-list@1.2.4: {} protobufjs@7.5.3: @@ -17609,6 +19077,8 @@ snapshots: inherits: 2.0.4 pump: 2.0.1 + punycode.js@2.3.1: {} + punycode@2.3.1: {} purgecss@2.3.0: @@ -17652,6 +19122,11 @@ snapshots: iconv-lite: 0.6.3 unpipe: 1.0.0 + react-css-styled@1.1.9: + dependencies: + css-styled: 1.0.8 + framework-utils: 1.1.0 + react-dom@18.2.0(react@18.2.0): dependencies: loose-envify: 1.4.0 @@ -17664,7 +19139,7 @@ snapshots: react: 18.3.1 scheduler: 0.23.2 - react-email@2.1.6(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.2)(eslint@8.57.1): + react-email@2.1.6(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.17)(eslint@8.57.1): dependencies: '@babel/core': 7.24.5 '@babel/parser': 7.24.5 @@ -17674,10 +19149,10 @@ snapshots: '@radix-ui/react-slot': 1.1.0(@types/react@18.2.47)(react@18.3.1) '@radix-ui/react-toggle-group': 1.1.0(@types/react-dom@18.3.7(@types/react@18.2.47))(@types/react@18.2.47)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-tooltip': 1.1.1(@types/react-dom@18.3.7(@types/react@18.2.47))(@types/react@18.2.47)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@swc/core': 1.3.101(@swc/helpers@0.5.2) + '@swc/core': 1.3.101(@swc/helpers@0.5.17) '@types/react': 18.2.47 '@types/react-dom': 18.3.7(@types/react@18.2.69) - '@types/webpack': 5.28.5(@swc/core@1.3.101(@swc/helpers@0.5.2))(esbuild@0.19.11) + '@types/webpack': 5.28.5(@swc/core@1.3.101(@swc/helpers@0.5.17))(esbuild@0.19.11) autoprefixer: 10.4.14(postcss@8.4.38) chalk: 4.1.2 chokidar: 3.5.3 @@ -17725,6 +19200,40 @@ snapshots: react-lifecycles-compat@3.0.4: {} + react-markdown@9.1.0(@types/react@18.2.69)(react@18.3.1): + dependencies: + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + '@types/react': 18.2.69 + devlop: 1.1.0 + hast-util-to-jsx-runtime: 2.3.6 + html-url-attributes: 3.0.1 + mdast-util-to-hast: 13.2.0 + react: 18.3.1 + remark-parse: 11.0.0 + remark-rehype: 11.1.2 + unified: 11.0.5 + unist-util-visit: 5.0.0 + vfile: 6.0.3 + transitivePeerDependencies: + - supports-color + + react-moveable@0.56.0: + dependencies: + '@daybrush/utils': 1.13.0 + '@egjs/agent': 2.4.4 + '@egjs/children-differ': 1.0.1 + '@egjs/list-differ': 1.0.1 + '@scena/dragscroll': 1.4.0 + '@scena/event-emitter': 1.0.5 + '@scena/matrix': 1.1.1 + css-to-mat: 1.1.1 + framework-utils: 1.1.0 + gesto: 1.19.4 + overlap-area: 1.1.0 + react-css-styled: 1.1.9 + react-selecto: 1.26.3 + react-promise-suspense@0.3.4: dependencies: fast-deep-equal: 2.0.1 @@ -17786,6 +19295,10 @@ snapshots: '@remix-run/router': 1.23.0 react: 18.3.1 + react-selecto@1.26.3: + dependencies: + selecto: 1.26.3 + react-style-singleton@2.2.3(@types/react@18.2.47)(react@18.3.1): dependencies: get-nonce: 1.0.1 @@ -17802,6 +19315,14 @@ snapshots: optionalDependencies: '@types/react': 18.2.69 + react-tweet@3.2.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@swc/helpers': 0.5.17 + clsx: 2.1.1 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + swr: 2.3.3(react@18.3.1) + react-virtualized@9.22.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@babel/runtime': 7.27.6 @@ -17940,6 +19461,15 @@ snapshots: transitivePeerDependencies: - supports-color + remark-parse@11.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-from-markdown: 2.0.2 + micromark-util-types: 2.0.2 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + remark-rehype@10.1.0: dependencies: '@types/hast': 2.3.10 @@ -17947,6 +19477,14 @@ snapshots: mdast-util-to-hast: 12.3.0 unified: 10.1.2 + remark-rehype@11.1.2: + dependencies: + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + mdast-util-to-hast: 13.2.0 + unified: 11.0.5 + vfile: 6.0.3 + remix-auth-oauth2@3.4.1(remix-auth@4.2.0): dependencies: '@edgefirst-dev/data': 0.0.4 @@ -18069,6 +19607,8 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.43.0 fsevents: 2.3.3 + rope-sequence@1.3.4: {} + router@2.2.0: dependencies: debug: 4.4.1 @@ -18139,6 +19679,19 @@ snapshots: dependencies: parseley: 0.12.1 + selecto@1.26.3: + dependencies: + '@daybrush/utils': 1.13.0 + '@egjs/children-differ': 1.0.1 + '@scena/dragscroll': 1.4.0 + '@scena/event-emitter': 1.0.5 + css-styled: 1.0.8 + css-to-mat: 1.1.1 + framework-utils: 1.1.0 + gesto: 1.19.4 + keycon: 1.4.0 + overlap-area: 1.1.0 + semver@5.7.2: {} semver@6.3.1: {} @@ -18362,6 +19915,20 @@ snapshots: - supports-color - utf-8-validate + socket.io@4.7.4: + dependencies: + accepts: 1.3.8 + base64id: 2.0.0 + cors: 2.8.5 + debug: 4.3.7 + engine.io: 6.5.5 + socket.io-adapter: 2.5.5 + socket.io-parser: 4.2.4 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + sonner@1.3.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: react: 18.3.1 @@ -18421,6 +19988,8 @@ snapshots: statuses@2.0.1: {} + std-env@3.9.0: {} + stop-iteration-iterator@1.1.0: dependencies: es-errors: 1.3.0 @@ -18544,10 +20113,18 @@ snapshots: strnum@1.1.2: {} + style-to-js@1.1.17: + dependencies: + style-to-object: 1.0.9 + style-to-object@0.4.4: dependencies: inline-style-parser: 0.1.1 + style-to-object@1.0.9: + dependencies: + inline-style-parser: 0.2.4 + styled-jsx@5.1.1(@babel/core@7.24.5)(react@18.3.1): dependencies: client-only: 0.0.1 @@ -18585,11 +20162,6 @@ snapshots: dependencies: has-flag: 4.0.0 - supports-hyperlinks@2.3.0: - dependencies: - has-flag: 4.0.0 - supports-color: 7.2.0 - supports-preserve-symlinks-flag@1.0.0: {} swr@2.3.3(react@18.3.1): @@ -18714,23 +20286,22 @@ snapshots: mkdirp: 3.0.1 yallist: 5.0.0 + tdigest@0.1.2: + dependencies: + bintrees: 1.0.2 + term-size@2.2.1: {} - terminal-link@3.0.0: - dependencies: - ansi-escapes: 5.0.0 - supports-hyperlinks: 2.3.0 - - terser-webpack-plugin@5.3.14(@swc/core@1.3.101(@swc/helpers@0.5.2))(esbuild@0.19.11)(webpack@5.99.9): + terser-webpack-plugin@5.3.14(@swc/core@1.3.101(@swc/helpers@0.5.17))(esbuild@0.19.11)(webpack@5.99.9): dependencies: '@jridgewell/trace-mapping': 0.3.25 jest-worker: 27.5.1 schema-utils: 4.3.2 serialize-javascript: 6.0.2 terser: 5.42.0 - webpack: 5.99.9(@swc/core@1.3.101(@swc/helpers@0.5.2))(esbuild@0.19.11) + webpack: 5.99.9(@swc/core@1.3.101(@swc/helpers@0.5.17))(esbuild@0.19.11) optionalDependencies: - '@swc/core': 1.3.101(@swc/helpers@0.5.2) + '@swc/core': 1.3.101(@swc/helpers@0.5.17) esbuild: 0.19.11 terser-webpack-plugin@5.3.14(esbuild@0.25.5)(webpack@5.99.9(esbuild@0.25.5)): @@ -18778,6 +20349,12 @@ snapshots: fdir: 6.4.6(picomatch@4.0.2) picomatch: 4.0.2 + tippy.js@6.3.7: + dependencies: + '@popperjs/core': 2.11.8 + + tiptap-extension-global-drag-handle@0.1.18: {} + tmp@0.0.33: dependencies: os-tmpdir: 1.0.2 @@ -18837,7 +20414,7 @@ snapshots: tslib@2.8.1: {} - tsup@8.5.0(@swc/core@1.3.101(@swc/helpers@0.5.2))(jiti@2.4.2)(postcss@8.5.5)(typescript@5.8.3)(yaml@2.8.0): + tsup@8.5.0(@swc/core@1.3.101(@swc/helpers@0.5.17))(jiti@2.4.2)(postcss@8.5.5)(typescript@5.8.3)(yaml@2.8.0): dependencies: bundle-require: 5.1.0(esbuild@0.25.5) cac: 6.7.14 @@ -18857,7 +20434,7 @@ snapshots: tinyglobby: 0.2.14 tree-kill: 1.2.2 optionalDependencies: - '@swc/core': 1.3.101(@swc/helpers@0.5.2) + '@swc/core': 1.3.101(@swc/helpers@0.5.17) postcss: 8.5.5 typescript: 5.8.3 transitivePeerDependencies: @@ -18881,6 +20458,14 @@ snapshots: wcwidth: 1.0.1 yargs: 17.7.2 + tunnel-rat@0.1.2(@types/react@18.2.69)(react@18.3.1): + dependencies: + zustand: 4.5.7(@types/react@18.2.69)(react@18.3.1) + transitivePeerDependencies: + - '@types/react' + - immer + - react + turbo-darwin-64@2.5.4: optional: true @@ -18924,8 +20509,6 @@ snapshots: type-fest@0.8.1: {} - type-fest@1.4.0: {} - type-fest@4.41.0: {} type-is@1.6.18: @@ -18978,6 +20561,8 @@ snapshots: typescript@5.8.3: {} + uc.micro@2.1.0: {} + ufo@1.6.1: {} uglify-js@3.19.3: @@ -18996,6 +20581,8 @@ snapshots: undici-types@5.26.5: {} + undici-types@6.21.0: {} + undici-types@7.8.0: {} undici@6.21.3: {} @@ -19012,6 +20599,16 @@ snapshots: trough: 2.2.0 vfile: 5.3.7 + unified@11.0.5: + dependencies: + '@types/unist': 3.0.3 + bail: 2.0.2 + devlop: 1.1.0 + extend: 3.0.2 + is-plain-obj: 4.1.0 + trough: 2.2.0 + vfile: 6.0.3 + unique-filename@3.0.0: dependencies: unique-slug: 4.0.0 @@ -19026,6 +20623,10 @@ snapshots: dependencies: '@types/unist': 2.0.11 + unist-util-is@6.0.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-position-from-estree@1.1.2: dependencies: '@types/unist': 2.0.11 @@ -19034,6 +20635,10 @@ snapshots: dependencies: '@types/unist': 2.0.11 + unist-util-position@5.0.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-remove-position@4.0.2: dependencies: '@types/unist': 2.0.11 @@ -19043,17 +20648,32 @@ snapshots: dependencies: '@types/unist': 2.0.11 + unist-util-stringify-position@4.0.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-visit-parents@5.1.3: dependencies: '@types/unist': 2.0.11 unist-util-is: 5.2.1 + unist-util-visit-parents@6.0.1: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.0 + unist-util-visit@4.1.2: dependencies: '@types/unist': 2.0.11 unist-util-is: 5.2.1 unist-util-visit-parents: 5.1.3 + unist-util-visit@5.0.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.0 + unist-util-visit-parents: 6.0.1 + universalify@0.1.2: {} universalify@2.0.1: {} @@ -19169,6 +20789,11 @@ snapshots: '@types/unist': 2.0.11 unist-util-stringify-position: 3.0.3 + vfile-message@4.0.2: + dependencies: + '@types/unist': 3.0.3 + unist-util-stringify-position: 4.0.0 + vfile@5.3.7: dependencies: '@types/unist': 2.0.11 @@ -19176,6 +20801,11 @@ snapshots: unist-util-stringify-position: 3.0.3 vfile-message: 3.1.4 + vfile@6.0.3: + dependencies: + '@types/unist': 3.0.3 + vfile-message: 4.0.2 + vite-node@1.6.1(@types/node@18.19.115)(lightningcss@1.30.1)(terser@5.42.0): dependencies: cac: 6.7.14 @@ -19253,6 +20883,8 @@ snapshots: terser: 5.42.0 yaml: 2.8.0 + w3c-keyname@2.2.8: {} + watchpack@2.4.4: dependencies: glob-to-regexp: 0.4.1 @@ -19278,7 +20910,7 @@ snapshots: webpack-sources@3.3.2: {} - webpack@5.99.9(@swc/core@1.3.101(@swc/helpers@0.5.2))(esbuild@0.19.11): + webpack@5.99.9(@swc/core@1.3.101(@swc/helpers@0.5.17))(esbuild@0.19.11): dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.8 @@ -19301,7 +20933,7 @@ snapshots: neo-async: 2.6.2 schema-utils: 4.3.2 tapable: 2.2.2 - terser-webpack-plugin: 5.3.14(@swc/core@1.3.101(@swc/helpers@0.5.2))(esbuild@0.19.11)(webpack@5.99.9) + terser-webpack-plugin: 5.3.14(@swc/core@1.3.101(@swc/helpers@0.5.17))(esbuild@0.19.11)(webpack@5.99.9) watchpack: 2.4.4 webpack-sources: 3.3.2 transitivePeerDependencies: @@ -19507,4 +21139,11 @@ snapshots: zod@3.23.8: {} + zustand@4.5.7(@types/react@18.2.69)(react@18.3.1): + dependencies: + use-sync-external-store: 1.5.0(react@18.3.1) + optionalDependencies: + '@types/react': 18.2.69 + react: 18.3.1 + zwitch@2.0.4: {} diff --git a/turbo.json b/turbo.json index 252e703..cad65a9 100644 --- a/turbo.json +++ b/turbo.json @@ -34,7 +34,8 @@ "dependsOn": [ "^generate" ] }, "trigger:dev": { - + "interactive": true, + "cache": false } }, "globalDependencies": [ ".env" ], @@ -66,6 +67,8 @@ "OLLAMA_URL", "TRIGGER_PROJECT_ID", "TRIGGER_API_URL", - "TRIGGER_API_KEY" + "TRIGGER_SECRET_KEY", + "EMBEDDING_MODEL", + "MODEL" ] }