@redaksjon/protokoll 0.0.12 → 0.0.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.cursor/rules/definition-of-done.md +1 -0
- package/.cursor/rules/no-emoticons.md +26 -12
- package/README.md +483 -69
- package/dist/agentic/executor.js +473 -41
- package/dist/agentic/executor.js.map +1 -1
- package/dist/agentic/index.js.map +1 -1
- package/dist/agentic/tools/lookup-person.js +123 -4
- package/dist/agentic/tools/lookup-person.js.map +1 -1
- package/dist/agentic/tools/lookup-project.js +139 -22
- package/dist/agentic/tools/lookup-project.js.map +1 -1
- package/dist/agentic/tools/route-note.js +5 -1
- package/dist/agentic/tools/route-note.js.map +1 -1
- package/dist/arguments.js +6 -3
- package/dist/arguments.js.map +1 -1
- package/dist/cli/action.js +704 -0
- package/dist/cli/action.js.map +1 -0
- package/dist/cli/config.js +482 -0
- package/dist/cli/config.js.map +1 -0
- package/dist/cli/context.js +466 -0
- package/dist/cli/context.js.map +1 -0
- package/dist/cli/feedback.js +858 -0
- package/dist/cli/feedback.js.map +1 -0
- package/dist/cli/index.js +103 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/install.js +572 -0
- package/dist/cli/install.js.map +1 -0
- package/dist/cli/transcript.js +199 -0
- package/dist/cli/transcript.js.map +1 -0
- package/dist/constants.js +11 -4
- package/dist/constants.js.map +1 -1
- package/dist/context/index.js +25 -1
- package/dist/context/index.js.map +1 -1
- package/dist/context/storage.js +56 -3
- package/dist/context/storage.js.map +1 -1
- package/dist/interactive/handler.js +310 -9
- package/dist/interactive/handler.js.map +1 -1
- package/dist/main.js +11 -1
- package/dist/main.js.map +1 -1
- package/dist/output/index.js.map +1 -1
- package/dist/output/manager.js +46 -1
- package/dist/output/manager.js.map +1 -1
- package/dist/phases/complete.js +37 -2
- package/dist/phases/complete.js.map +1 -1
- package/dist/pipeline/orchestrator.js +104 -31
- package/dist/pipeline/orchestrator.js.map +1 -1
- package/dist/protokoll.js +68 -2
- package/dist/protokoll.js.map +1 -1
- package/dist/reasoning/client.js +83 -0
- package/dist/reasoning/client.js.map +1 -1
- package/dist/reasoning/index.js +1 -0
- package/dist/reasoning/index.js.map +1 -1
- package/dist/util/metadata.js.map +1 -1
- package/dist/util/sound.js +116 -0
- package/dist/util/sound.js.map +1 -0
- package/docs/duplicate-question-prevention.md +117 -0
- package/docs/examples.md +152 -0
- package/docs/interactive-context-example.md +92 -0
- package/docs/package-lock.json +6 -0
- package/docs/package.json +3 -1
- package/guide/action.md +375 -0
- package/guide/config.md +207 -0
- package/guide/configuration.md +82 -67
- package/guide/context-commands.md +574 -0
- package/guide/context-system.md +20 -7
- package/guide/development.md +106 -4
- package/guide/feedback.md +335 -0
- package/guide/index.md +100 -4
- package/guide/interactive.md +15 -14
- package/guide/quickstart.md +21 -7
- package/guide/reasoning.md +18 -4
- package/guide/routing.md +192 -97
- package/package.json +1 -1
- package/scripts/coverage-priority.mjs +323 -0
- package/tsconfig.tsbuildinfo +1 -1
- package/vitest.config.ts +5 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executor.js","sources":["../../src/agentic/executor.ts"],"sourcesContent":["/**\n * Agentic Executor\n * \n * Executes the agentic transcription loop with tool calls.\n * Maintains conversation history for multi-turn tool usage.\n */\n\nimport { ToolContext, TranscriptionState } from './types';\nimport * as Registry from './registry';\nimport * as Reasoning from '../reasoning';\nimport * as Logging from '../logging';\n\nexport interface ContextChangeRecord {\n entityType: 'person' | 'project' | 'company' | 'term';\n entityId: string;\n entityName: string;\n action: 'created' | 'updated';\n details?: Record<string, unknown>;\n}\n\nexport interface ExecutorInstance {\n process(transcriptText: string): Promise<{\n enhancedText: string;\n state: TranscriptionState;\n toolsUsed: string[];\n iterations: number;\n totalTokens?: number;\n contextChanges?: ContextChangeRecord[];\n }>;\n}\n\n// Message types for conversation history\ninterface ConversationMessage {\n role: 'system' | 'user' | 'assistant' | 'tool';\n content: string;\n tool_call_id?: string;\n tool_calls?: Array<{ id: string; name: string; arguments: Record<string, unknown> }>;\n}\n\nexport const create = (\n reasoning: Reasoning.ReasoningInstance,\n ctx: ToolContext\n): ExecutorInstance => {\n const logger = Logging.getLogger();\n const registry = Registry.create(ctx);\n \n const process = async (transcriptText: string) => {\n const state: TranscriptionState = {\n originalText: transcriptText,\n correctedText: transcriptText,\n unknownEntities: [],\n resolvedEntities: new Map(),\n confidence: 0,\n };\n \n const toolsUsed: string[] = [];\n const contextChanges: ContextChangeRecord[] = [];\n let iterations = 0;\n let totalTokens = 0;\n const maxIterations = 15;\n \n // Conversation history for multi-turn\n const conversationHistory: ConversationMessage[] = [];\n \n // Build the system prompt\n const systemPrompt = `You are an intelligent transcription assistant. Your job is to:\n1. Analyze the transcript for names, projects, and companies\n2. Use the available tools to verify spellings and gather context\n3. Correct any misheard names or terms\n4. Determine the appropriate destination for this note\n5. Produce a clean, accurate Markdown transcript\n\nCRITICAL RULES:\n- This is NOT a summary. Preserve ALL content from the original transcript.\n- Only fix obvious transcription errors like misheard names.\n- When you have finished processing, output the COMPLETE corrected transcript as Markdown.\n- Do NOT say you don't have the transcript - it's in the conversation history.\n\nAvailable tools:\n- lookup_person: Find information about people (use for any name that might be misspelled)\n- lookup_project: Find project routing information \n- verify_spelling: Ask user about unknown terms (if interactive mode)\n- route_note: Determine where to file this note\n- store_context: Remember new information for future use`;\n\n // Add system message to history\n conversationHistory.push({ role: 'system', content: systemPrompt });\n \n // Add the initial user message with transcript\n const initialPrompt = `Here is the raw transcript to process:\n\n--- BEGIN TRANSCRIPT ---\n${transcriptText}\n--- END TRANSCRIPT ---\n\nPlease:\n1. Identify any names, companies, or technical terms that might be misspelled\n2. Use the lookup_person tool to verify spelling of any names you find\n3. Use route_note to determine the destination\n4. Then output the COMPLETE corrected transcript as clean Markdown\n\nRemember: preserve ALL content, only fix transcription errors.`;\n\n conversationHistory.push({ role: 'user', content: initialPrompt });\n\n try {\n // Initial reasoning call\n logger.debug('Starting agentic transcription - analyzing for names and routing...');\n let response = await reasoning.complete({\n systemPrompt,\n prompt: initialPrompt,\n tools: registry.getToolDefinitions(),\n maxIterations,\n });\n \n // Track token usage\n if (response.usage) {\n totalTokens += response.usage.totalTokens;\n }\n \n // Add assistant response to history\n conversationHistory.push({ \n role: 'assistant', \n content: response.content,\n tool_calls: response.toolCalls?.map(tc => ({\n id: tc.id,\n name: tc.name,\n arguments: tc.arguments,\n })),\n });\n \n // Iterative tool use loop\n while (response.toolCalls && response.toolCalls.length > 0 && iterations < maxIterations) {\n iterations++;\n logger.debug('Iteration %d: Processing %d tool calls...', iterations, response.toolCalls.length);\n \n // Collect tool results\n const toolResults: Array<{ id: string; name: string; result: string }> = [];\n \n // Execute each tool call\n for (const toolCall of response.toolCalls) {\n logger.debug('Executing tool: %s', toolCall.name);\n toolsUsed.push(toolCall.name);\n \n try {\n const result = await registry.executeTool(toolCall.name, toolCall.arguments);\n \n // Format result for the model\n const resultStr = JSON.stringify(result.data || { success: result.success, message: result.error || 'OK' });\n toolResults.push({ id: toolCall.id, name: toolCall.name, result: resultStr });\n \n logger.debug('Tool %s result: %s', toolCall.name, result.success ? 'success' : 'failed');\n \n // Handle results that need user input\n if (result.needsUserInput && ctx.interactiveMode && ctx.interactiveInstance) {\n logger.info('Interactive: %s requires clarification', toolCall.name);\n \n const termName = String(toolCall.arguments.name || toolCall.arguments.term || '');\n \n const clarification = await ctx.interactiveInstance.handleClarification({\n type: result.data?.clarificationType || 'general',\n term: result.data?.term || termName,\n context: result.userPrompt || '',\n suggestion: result.data?.suggestion,\n options: result.data?.options,\n });\n \n if (clarification.response) {\n state.resolvedEntities.set(termName, clarification.response);\n logger.info('Clarified: %s -> %s', termName, clarification.response);\n \n // Handle new project creation\n if (result.data?.clarificationType === 'new_project' && clarification.response.trim()) {\n const projectPath = clarification.response.trim();\n // Only create if user provided a path (not just pressed Enter)\n if (projectPath && projectPath !== termName) {\n const projectId = termName.toLowerCase().replace(/\\s+/g, '-');\n const newProject = {\n id: projectId,\n name: termName,\n type: 'project' as const,\n description: `Auto-created from transcript mentioning \"${termName}\"`,\n classification: {\n context_type: 'work' as const,\n explicit_phrases: [termName.toLowerCase()],\n },\n routing: {\n destination: projectPath,\n structure: 'month' as const,\n filename_options: ['date', 'time', 'subject'] as Array<'date' | 'time' | 'subject'>,\n },\n active: true,\n };\n \n try {\n await ctx.contextInstance.saveEntity(newProject);\n logger.info('Created new project: %s -> %s', termName, projectPath);\n \n // Record the context change\n contextChanges.push({\n entityType: 'project',\n entityId: projectId,\n entityName: termName,\n action: 'created',\n details: {\n destination: projectPath,\n routing: newProject.routing,\n },\n });\n \n // Update routing to use new project\n state.routeDecision = {\n projectId,\n destination: { path: projectPath, structure: 'month' },\n confidence: 1.0,\n signals: [{ type: 'explicit_phrase', value: termName, weight: 1.0 }],\n reasoning: `User created new project \"${termName}\" routing to ${projectPath}`,\n };\n } catch (error) {\n logger.warn('Failed to save new project: %s', error);\n }\n }\n }\n }\n }\n \n // Update state based on tool results\n if (result.data?.person) {\n state.resolvedEntities.set(result.data.person.name, result.data.suggestion);\n }\n if (result.data?.destination) {\n state.routeDecision = result.data;\n }\n \n } catch (error) {\n logger.error('Tool execution failed', { tool: toolCall.name, error });\n toolResults.push({ \n id: toolCall.id, \n name: toolCall.name, \n result: JSON.stringify({ error: String(error) }) \n });\n }\n }\n \n // Add tool results to history\n for (const tr of toolResults) {\n conversationHistory.push({\n role: 'tool',\n tool_call_id: tr.id,\n content: tr.result,\n });\n }\n \n // Build continuation prompt with full context\n const continuationPrompt = `Tool results received. Here's a reminder of your task:\n\nORIGINAL TRANSCRIPT (process this):\n--- BEGIN TRANSCRIPT ---\n${transcriptText}\n--- END TRANSCRIPT ---\n\nCorrections made so far: ${state.resolvedEntities.size > 0 ? Array.from(state.resolvedEntities.entries()).map(([k, v]) => `${k} -> ${v}`).join(', ') : 'none yet'}\n\nContinue analyzing. If you need more information, use the tools. \nWhen you're done with tool calls, output the COMPLETE corrected transcript as Markdown.\nDo NOT summarize - include ALL original content with corrections applied.`;\n\n conversationHistory.push({ role: 'user', content: continuationPrompt });\n \n // Continue conversation with full context\n response = await reasoning.complete({\n systemPrompt,\n prompt: continuationPrompt,\n tools: registry.getToolDefinitions(),\n });\n \n // Track token usage\n if (response.usage) {\n totalTokens += response.usage.totalTokens;\n }\n \n conversationHistory.push({ \n role: 'assistant', \n content: response.content,\n tool_calls: response.toolCalls?.map(tc => ({\n id: tc.id,\n name: tc.name,\n arguments: tc.arguments,\n })),\n });\n }\n \n // Extract final corrected text\n if (response.content && response.content.length > 50) {\n state.correctedText = response.content;\n state.confidence = 0.9;\n logger.debug('Final transcript generated: %d characters', response.content.length);\n } else {\n // Model didn't produce content - ask for it explicitly\n logger.debug('Model did not produce transcript, requesting explicitly...');\n \n const finalRequest = `Please output the COMPLETE corrected transcript now.\n\nORIGINAL:\n${transcriptText}\n\nCORRECTIONS TO APPLY:\n${state.resolvedEntities.size > 0 ? Array.from(state.resolvedEntities.entries()).map(([k, v]) => `- \"${k}\" should be \"${v}\"`).join('\\n') : 'None identified'}\n\nOutput the full transcript as clean Markdown. Do NOT summarize.`;\n\n const finalResponse = await reasoning.complete({\n systemPrompt,\n prompt: finalRequest,\n });\n \n // Track token usage\n if (finalResponse.usage) {\n totalTokens += finalResponse.usage.totalTokens;\n }\n \n state.correctedText = finalResponse.content || transcriptText;\n state.confidence = 0.8;\n }\n \n } catch (error) {\n logger.error('Agentic processing failed', { error });\n // Fall back to original text\n state.correctedText = transcriptText;\n state.confidence = 0.5;\n }\n \n return {\n enhancedText: state.correctedText,\n state,\n toolsUsed: [...new Set(toolsUsed)],\n iterations,\n totalTokens: totalTokens > 0 ? totalTokens : undefined,\n contextChanges: contextChanges.length > 0 ? contextChanges : undefined,\n };\n };\n \n return { process };\n};\n\n"],"names":["create","reasoning","ctx","logger","Logging","registry","Registry","process","transcriptText","state","originalText","correctedText","unknownEntities","resolvedEntities","Map","confidence","toolsUsed","contextChanges","iterations","totalTokens","maxIterations","conversationHistory","systemPrompt","push","role","content","initialPrompt","response","debug","complete","prompt","tools","getToolDefinitions","usage","tool_calls","toolCalls","map","tc","id","name","arguments","length","toolResults","toolCall","result","executeTool","resultStr","JSON","stringify","data","success","message","error","needsUserInput","interactiveMode","interactiveInstance","info","termName","String","term","clarification","handleClarification","type","clarificationType","context","userPrompt","suggestion","options","set","trim","projectPath","projectId","toLowerCase","replace","newProject","description","classification","context_type","explicit_phrases","routing","destination","structure","filename_options","active","contextInstance","saveEntity","entityType","entityId","entityName","action","details","routeDecision","path","signals","value","weight","warn","person","tool","tr","tool_call_id","continuationPrompt","size","Array","from","entries","k","v","join","finalRequest","finalResponse","enhancedText","Set","undefined"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"executor.js","sources":["../../src/agentic/executor.ts"],"sourcesContent":["/**\n * Agentic Executor\n * \n * Executes the agentic transcription loop with tool calls.\n * Maintains conversation history for multi-turn tool usage.\n */\n\nimport { ToolContext, TranscriptionState } from './types';\nimport * as Registry from './registry';\nimport * as Reasoning from '../reasoning';\nimport * as Logging from '../logging';\n\nexport interface ContextChangeRecord {\n entityType: 'person' | 'project' | 'company' | 'term' | 'ignored';\n entityId: string;\n entityName: string;\n action: 'created' | 'updated';\n details?: Record<string, unknown>;\n}\n\nexport interface ExecutorInstance {\n process(transcriptText: string): Promise<{\n enhancedText: string;\n state: TranscriptionState;\n toolsUsed: string[];\n iterations: number;\n totalTokens?: number;\n contextChanges?: ContextChangeRecord[];\n }>;\n}\n\n// Message types for conversation history\ninterface ConversationMessage {\n role: 'system' | 'user' | 'assistant' | 'tool';\n content: string;\n tool_call_id?: string;\n tool_calls?: Array<{ id: string; name: string; arguments: Record<string, unknown> }>;\n}\n\nexport const create = (\n reasoning: Reasoning.ReasoningInstance,\n ctx: ToolContext\n): ExecutorInstance => {\n const logger = Logging.getLogger();\n const registry = Registry.create(ctx);\n \n const process = async (transcriptText: string) => {\n const state: TranscriptionState = {\n originalText: transcriptText,\n correctedText: transcriptText,\n unknownEntities: [],\n resolvedEntities: new Map(),\n confidence: 0,\n };\n \n // Make resolvedEntities available to tools so they can avoid re-asking\n ctx.resolvedEntities = state.resolvedEntities;\n \n const toolsUsed: string[] = [];\n const contextChanges: ContextChangeRecord[] = [];\n let iterations = 0;\n let totalTokens = 0;\n const maxIterations = 15;\n \n // Conversation history for multi-turn\n const conversationHistory: ConversationMessage[] = [];\n \n // Build the system prompt\n const systemPrompt = `You are an intelligent transcription assistant. Your job is to:\n1. Analyze the transcript for names, projects, and companies\n2. Use the available tools to verify spellings and gather context\n3. Correct any misheard names or terms\n4. Determine the appropriate destination for this note\n5. Produce a clean, accurate Markdown transcript\n\nCRITICAL RULES:\n- This is NOT a summary. Preserve ALL content from the original transcript.\n- Only fix obvious transcription errors like misheard names.\n- When you have finished processing, output the COMPLETE corrected transcript as Markdown.\n- Do NOT say you don't have the transcript - it's in the conversation history.\n\nAvailable tools:\n- lookup_person: Find information about people (use for any name that might be misspelled)\n- lookup_project: Find project routing information \n- verify_spelling: Ask user about unknown terms (if interactive mode)\n- route_note: Determine where to file this note\n- store_context: Remember new information for future use`;\n\n // Add system message to history\n conversationHistory.push({ role: 'system', content: systemPrompt });\n \n // Add the initial user message with transcript\n const initialPrompt = `Here is the raw transcript to process:\n\n--- BEGIN TRANSCRIPT ---\n${transcriptText}\n--- END TRANSCRIPT ---\n\nPlease:\n1. Identify any names, companies, or technical terms that might be misspelled\n2. Use the lookup_person tool to verify spelling of any names you find\n3. Use route_note to determine the destination\n4. Then output the COMPLETE corrected transcript as clean Markdown\n\nRemember: preserve ALL content, only fix transcription errors.`;\n\n conversationHistory.push({ role: 'user', content: initialPrompt });\n\n try {\n // Initial reasoning call\n logger.debug('Starting agentic transcription - analyzing for names and routing...');\n let response = await reasoning.complete({\n systemPrompt,\n prompt: initialPrompt,\n tools: registry.getToolDefinitions(),\n maxIterations,\n });\n \n // Track token usage\n if (response.usage) {\n totalTokens += response.usage.totalTokens;\n }\n \n // Add assistant response to history\n conversationHistory.push({ \n role: 'assistant', \n content: response.content,\n tool_calls: response.toolCalls?.map(tc => ({\n id: tc.id,\n name: tc.name,\n arguments: tc.arguments,\n })),\n });\n \n // Iterative tool use loop\n while (response.toolCalls && response.toolCalls.length > 0 && iterations < maxIterations) {\n iterations++;\n logger.debug('Iteration %d: Processing %d tool calls...', iterations, response.toolCalls.length);\n \n // Collect tool results\n const toolResults: Array<{ id: string; name: string; result: string }> = [];\n \n // Execute each tool call\n for (const toolCall of response.toolCalls) {\n logger.debug('Executing tool: %s', toolCall.name);\n toolsUsed.push(toolCall.name);\n \n try {\n const result = await registry.executeTool(toolCall.name, toolCall.arguments);\n \n // Format result for the model\n const resultStr = JSON.stringify(result.data || { success: result.success, message: result.error || 'OK' });\n toolResults.push({ id: toolCall.id, name: toolCall.name, result: resultStr });\n \n logger.debug('Tool %s result: %s', toolCall.name, result.success ? 'success' : 'failed');\n \n // Handle results that need user input\n // Check if interactive handler is available (not gated by interactiveMode flag)\n if (result.needsUserInput && ctx.interactiveInstance) {\n logger.info('Interactive: %s requires clarification', toolCall.name);\n \n const termName = String(toolCall.arguments.name || toolCall.arguments.term || '');\n \n const clarification = await ctx.interactiveInstance.handleClarification({\n type: result.data?.clarificationType || 'general',\n term: result.data?.term || termName,\n context: result.userPrompt || '',\n suggestion: result.data?.suggestion,\n options: result.data?.options,\n });\n \n if (clarification.response) {\n state.resolvedEntities.set(termName, clarification.response);\n logger.info('Clarified: %s -> %s', termName, clarification.response);\n \n // Handle new project/term wizard response\n if (result.data?.clarificationType === 'new_project' && clarification.additionalInfo) {\n const wizardResult = clarification.additionalInfo as {\n action: 'create' | 'link' | 'term' | 'skip' | 'ignore';\n projectName?: string;\n destination?: string;\n description?: string;\n linkedProjectIndex?: number;\n termDescription?: string;\n // For 'term' action\n termName?: string;\n termExpansion?: string;\n termProjects?: number[];\n // For nested project creation from term wizard\n createdProject?: {\n action: 'create' | 'link' | 'skip';\n projectName?: string;\n destination?: string;\n description?: string;\n };\n // For 'ignore' action\n ignoredTerm?: string;\n };\n \n const knownProjects = result.data?.knownProjects as Array<{\n id: string;\n name: string;\n description?: string;\n classification?: { explicit_phrases?: string[]; context_type?: string };\n routing?: { destination: string; structure?: string; filename_options?: string[] };\n }> | undefined;\n \n if (wizardResult.action === 'create') {\n // CREATE NEW PROJECT\n const projectName = wizardResult.projectName || termName;\n const projectId = projectName.toLowerCase().replace(/\\s+/g, '-');\n const projectDestination = wizardResult.destination;\n \n const newProject = {\n id: projectId,\n name: projectName,\n type: 'project' as const,\n description: wizardResult.description || `Project for \"${projectName}\"`,\n classification: {\n context_type: 'work' as const,\n explicit_phrases: [termName.toLowerCase(), projectName.toLowerCase()].filter((v, i, a) => a.indexOf(v) === i),\n },\n routing: {\n // Only include destination if explicitly provided - otherwise uses global default\n ...(projectDestination && { destination: projectDestination }),\n structure: 'month' as const,\n filename_options: ['date', 'time', 'subject'] as Array<'date' | 'time' | 'subject'>,\n },\n active: true,\n };\n \n try {\n await ctx.contextInstance.saveEntity(newProject);\n await ctx.contextInstance.reload(); // Reload so subsequent searches find this entity\n logger.info('Created new project: %s%s', projectName, projectDestination ? ` -> ${projectDestination}` : ' (using default destination)');\n \n contextChanges.push({\n entityType: 'project',\n entityId: projectId,\n entityName: projectName,\n action: 'created',\n details: {\n ...(projectDestination && { destination: projectDestination }),\n description: wizardResult.description,\n triggeredByTerm: termName,\n },\n });\n \n // Update routing if destination was specified\n if (projectDestination) {\n state.routeDecision = {\n projectId,\n destination: { path: projectDestination, structure: 'month' },\n confidence: 1.0,\n signals: [{ type: 'explicit_phrase', value: termName, weight: 1.0 }],\n reasoning: `User created new project \"${projectName}\" routing to ${projectDestination}`,\n };\n }\n } catch (error) {\n logger.warn('Failed to save new project: %s', error);\n }\n \n } else if (wizardResult.action === 'link' && typeof wizardResult.linkedProjectIndex === 'number') {\n // LINK TO EXISTING PROJECT\n if (knownProjects && wizardResult.linkedProjectIndex < knownProjects.length) {\n const linkedProject = knownProjects[wizardResult.linkedProjectIndex];\n \n // Add the term as an alias\n const existingPhrases = linkedProject.classification?.explicit_phrases || [];\n const updatedPhrases = [...existingPhrases, termName.toLowerCase()]\n .filter((v, i, a) => a.indexOf(v) === i); // dedupe\n \n const updatedProject = {\n ...linkedProject,\n type: 'project' as const,\n // Add term description to project notes if provided\n notes: wizardResult.termDescription \n ? `${linkedProject.description || ''}\\n\\n${termName}: ${wizardResult.termDescription}`.trim()\n : linkedProject.description,\n classification: {\n ...linkedProject.classification,\n context_type: (linkedProject.classification?.context_type || 'work') as 'work' | 'personal' | 'mixed',\n explicit_phrases: updatedPhrases,\n },\n routing: {\n // Preserve existing destination (or omit if not set)\n ...(linkedProject.routing?.destination && { destination: linkedProject.routing.destination }),\n structure: (linkedProject.routing?.structure || 'month') as 'none' | 'year' | 'month' | 'day',\n filename_options: (linkedProject.routing?.filename_options || ['date', 'time']) as Array<'date' | 'time' | 'subject'>,\n },\n };\n \n try {\n await ctx.contextInstance.saveEntity(updatedProject);\n await ctx.contextInstance.reload(); // Reload so subsequent searches find this entity\n logger.info('Linked \"%s\" to project \"%s\"', termName, linkedProject.name);\n \n contextChanges.push({\n entityType: 'project',\n entityId: linkedProject.id,\n entityName: linkedProject.name,\n action: 'updated',\n details: {\n addedAlias: termName,\n termDescription: wizardResult.termDescription,\n explicit_phrases: updatedPhrases,\n },\n });\n \n // Update routing to use the linked project\n if (linkedProject.routing?.destination) {\n state.routeDecision = {\n projectId: linkedProject.id,\n destination: { \n path: linkedProject.routing.destination, \n structure: 'month' \n },\n confidence: 1.0,\n signals: [{ type: 'explicit_phrase', value: termName, weight: 1.0 }],\n reasoning: `User linked \"${termName}\" to existing project \"${linkedProject.name}\"`,\n };\n }\n } catch (error) {\n logger.warn('Failed to update project with alias: %s', error);\n }\n }\n } else if (wizardResult.action === 'term') {\n // CREATE NEW TERM ENTITY\n const termNameFinal = wizardResult.termName || termName;\n const termId = termNameFinal.toLowerCase().replace(/\\s+/g, '-');\n \n // Get project IDs from indices\n const projectIds: string[] = [];\n if (wizardResult.termProjects && knownProjects) {\n for (const idx of wizardResult.termProjects) {\n if (idx >= 0 && idx < knownProjects.length) {\n projectIds.push(knownProjects[idx].id);\n }\n }\n }\n \n // Handle nested project creation from term wizard\n if (wizardResult.createdProject?.action === 'create' && wizardResult.createdProject.projectName) {\n const projectName = wizardResult.createdProject.projectName;\n const projectId = projectName.toLowerCase().replace(/\\s+/g, '-');\n const projectDestination = wizardResult.createdProject.destination;\n \n const newProject = {\n id: projectId,\n name: projectName,\n type: 'project' as const,\n description: wizardResult.createdProject.description || `Project for \"${projectName}\"`,\n classification: {\n context_type: 'work' as const,\n explicit_phrases: [projectName.toLowerCase(), termNameFinal.toLowerCase()].filter((v, i, a) => a.indexOf(v) === i),\n },\n routing: {\n // Only include destination if explicitly provided - otherwise uses global default\n ...(projectDestination && { destination: projectDestination }),\n structure: 'month' as const,\n filename_options: ['date', 'time', 'subject'] as Array<'date' | 'time' | 'subject'>,\n },\n active: true,\n };\n \n try {\n await ctx.contextInstance.saveEntity(newProject);\n await ctx.contextInstance.reload(); // Reload so subsequent searches find this entity\n logger.info('Created new project from term wizard: %s%s', projectName, projectDestination ? ` -> ${projectDestination}` : ' (using default destination)');\n \n // Add the new project to the projectIds list for term association\n projectIds.push(projectId);\n \n contextChanges.push({\n entityType: 'project',\n entityId: projectId,\n entityName: projectName,\n action: 'created',\n details: {\n ...(projectDestination && { destination: projectDestination }),\n description: wizardResult.createdProject.description,\n createdForTerm: termNameFinal,\n },\n });\n \n // Update routing to use the new project (if destination was specified)\n if (projectDestination) {\n state.routeDecision = {\n projectId,\n destination: { path: projectDestination, structure: 'month' },\n confidence: 1.0,\n signals: [{ type: 'explicit_phrase', value: termNameFinal, weight: 1.0 }],\n reasoning: `User created project \"${projectName}\" for term \"${termNameFinal}\"`,\n };\n }\n } catch (error) {\n logger.warn('Failed to save new project from term wizard: %s', error);\n }\n }\n \n const newTerm = {\n id: termId,\n name: termNameFinal,\n type: 'term' as const,\n expansion: wizardResult.termExpansion,\n notes: wizardResult.termDescription,\n projects: projectIds.length > 0 ? projectIds : undefined,\n sounds_like: [termName.toLowerCase()],\n };\n \n try {\n await ctx.contextInstance.saveEntity(newTerm);\n await ctx.contextInstance.reload(); // Reload so subsequent searches find this entity\n logger.info('Created new term: %s (projects: %s)', \n termNameFinal, \n projectIds.length > 0 ? projectIds.join(', ') : 'none'\n );\n \n contextChanges.push({\n entityType: 'term',\n entityId: termId,\n entityName: termNameFinal,\n action: 'created',\n details: {\n expansion: wizardResult.termExpansion,\n projects: projectIds,\n description: wizardResult.termDescription,\n },\n });\n \n // If term has associated projects and we haven't set routing yet, use the first one\n if (projectIds.length > 0 && !state.routeDecision) {\n // For newly created project, we already set routing above\n // For existing projects, look them up\n if (knownProjects) {\n const primaryProject = knownProjects.find(p => p.id === projectIds[0]);\n if (primaryProject?.routing?.destination) {\n state.routeDecision = {\n projectId: primaryProject.id,\n destination: { \n path: primaryProject.routing.destination, \n structure: 'month' \n },\n confidence: 1.0,\n signals: [{ type: 'explicit_phrase', value: termNameFinal, weight: 1.0 }],\n reasoning: `User created term \"${termNameFinal}\" associated with project \"${primaryProject.name}\"`,\n };\n }\n }\n }\n } catch (error) {\n logger.warn('Failed to save new term: %s', error);\n }\n } else if (wizardResult.action === 'ignore' && wizardResult.ignoredTerm) {\n // IGNORE - add term to ignore list so user won't be asked again\n const ignoredTermName = wizardResult.ignoredTerm;\n const ignoredId = ignoredTermName.toLowerCase()\n .replace(/[^a-z0-9]/g, '-')\n .replace(/-+/g, '-')\n .replace(/^-|-$/g, '');\n \n const newIgnored = {\n id: ignoredId,\n name: ignoredTermName,\n type: 'ignored' as const,\n ignoredAt: new Date().toISOString(),\n };\n \n try {\n await ctx.contextInstance.saveEntity(newIgnored);\n await ctx.contextInstance.reload();\n logger.info('Added to ignore list: %s', ignoredTermName);\n \n contextChanges.push({\n entityType: 'ignored',\n entityId: ignoredId,\n entityName: ignoredTermName,\n action: 'created',\n details: {\n reason: 'User chose to ignore this term',\n },\n });\n } catch (error) {\n logger.warn('Failed to save ignored term: %s', error);\n }\n }\n // 'skip' action - do nothing\n }\n \n // Handle new person wizard response\n if (result.data?.clarificationType === 'new_person' && clarification.additionalInfo) {\n const personWizardResult = clarification.additionalInfo as {\n action: 'create' | 'skip';\n personName?: string;\n organization?: string;\n notes?: string;\n linkedProjectId?: string;\n linkedProjectIndex?: number;\n createdProject?: {\n action: 'create' | 'link' | 'skip';\n projectName?: string;\n destination?: string;\n description?: string;\n };\n };\n \n const knownProjects = result.data?.knownProjects as Array<{\n id: string;\n name: string;\n description?: string;\n classification?: { explicit_phrases?: string[]; context_type?: string };\n routing?: { destination: string; structure?: string; filename_options?: string[] };\n }> | undefined;\n \n if (personWizardResult.action === 'create') {\n let linkedProjectId: string | undefined;\n \n // First, handle any nested project creation\n if (personWizardResult.createdProject?.action === 'create' && personWizardResult.createdProject.projectName) {\n const projectName = personWizardResult.createdProject.projectName;\n const projectId = projectName.toLowerCase().replace(/\\s+/g, '-');\n const projectDestination = personWizardResult.createdProject.destination;\n \n const newProject = {\n id: projectId,\n name: projectName,\n type: 'project' as const,\n description: personWizardResult.createdProject.description || `Project for \"${projectName}\"`,\n classification: {\n context_type: 'work' as const,\n explicit_phrases: [projectName.toLowerCase()],\n },\n routing: {\n // Only include destination if explicitly provided - otherwise uses global default\n ...(projectDestination && { destination: projectDestination }),\n structure: 'month' as const,\n filename_options: ['date', 'time', 'subject'] as Array<'date' | 'time' | 'subject'>,\n },\n active: true,\n };\n \n try {\n await ctx.contextInstance.saveEntity(newProject);\n await ctx.contextInstance.reload(); // Reload so subsequent searches find this entity\n logger.info('Created new project from person wizard: %s%s', projectName, projectDestination ? ` -> ${projectDestination}` : ' (using default destination)');\n linkedProjectId = projectId;\n \n contextChanges.push({\n entityType: 'project',\n entityId: projectId,\n entityName: projectName,\n action: 'created',\n details: {\n ...(projectDestination && { destination: projectDestination }),\n description: personWizardResult.createdProject.description,\n createdForPerson: personWizardResult.personName,\n },\n });\n \n // Update routing to use the new project (if destination was specified)\n if (projectDestination) {\n state.routeDecision = {\n projectId,\n destination: { path: projectDestination, structure: 'month' },\n confidence: 1.0,\n signals: [{ type: 'explicit_phrase', value: projectName, weight: 1.0 }],\n reasoning: `User created project \"${projectName}\" for person \"${personWizardResult.personName}\"`,\n };\n }\n } catch (error) {\n logger.warn('Failed to save new project from person wizard: %s', error);\n }\n } else if (typeof personWizardResult.linkedProjectIndex === 'number' && knownProjects) {\n // User linked to existing project\n if (personWizardResult.linkedProjectIndex < knownProjects.length) {\n const linkedProject = knownProjects[personWizardResult.linkedProjectIndex];\n linkedProjectId = linkedProject.id;\n \n // Update routing to use the linked project\n if (linkedProject.routing?.destination) {\n state.routeDecision = {\n projectId: linkedProject.id,\n destination: { \n path: linkedProject.routing.destination, \n structure: 'month' \n },\n confidence: 1.0,\n signals: [{ type: 'explicit_phrase', value: personWizardResult.personName || termName, weight: 1.0 }],\n reasoning: `User linked person \"${personWizardResult.personName}\" to project \"${linkedProject.name}\"`,\n };\n }\n }\n }\n \n // Now save the person\n const personName = personWizardResult.personName || termName;\n const personId = personName.toLowerCase().replace(/\\s+/g, '-');\n \n const newPerson = {\n id: personId,\n name: personName,\n type: 'person' as const,\n organization: personWizardResult.organization,\n notes: personWizardResult.notes,\n projects: linkedProjectId ? [linkedProjectId] : [],\n sounds_like: [termName.toLowerCase()],\n };\n \n try {\n await ctx.contextInstance.saveEntity(newPerson);\n await ctx.contextInstance.reload(); // Reload so subsequent searches find this entity\n logger.info('Created new person: %s (org: %s, project: %s)', \n personName, \n personWizardResult.organization || 'none',\n linkedProjectId || 'none'\n );\n \n // Update resolved entities with correct name\n state.resolvedEntities.set(termName, personName);\n \n contextChanges.push({\n entityType: 'person',\n entityId: personId,\n entityName: personName,\n action: 'created',\n details: {\n organization: personWizardResult.organization,\n linkedProject: linkedProjectId,\n notes: personWizardResult.notes,\n heardAs: termName,\n },\n });\n } catch (error) {\n logger.warn('Failed to save new person: %s', error);\n }\n }\n // 'skip' action - do nothing\n }\n }\n }\n \n // Update state based on tool results\n if (result.data?.person) {\n state.resolvedEntities.set(result.data.person.name, result.data.suggestion);\n }\n \n // Capture routing from route_note tool\n if (result.data?.routingDecision?.destination) {\n const routingDecision = result.data.routingDecision;\n state.routeDecision = {\n projectId: routingDecision.projectId,\n destination: routingDecision.destination,\n confidence: routingDecision.confidence || 1.0,\n signals: routingDecision.signals,\n reasoning: routingDecision.reasoning || 'Determined by route_note tool',\n };\n }\n \n // Capture routing from lookup_project when project has routing config\n if (result.data?.found && result.data?.project?.routing?.destination) {\n const project = result.data.project;\n state.routeDecision = {\n projectId: project.id,\n destination: { \n path: project.routing.destination,\n structure: project.routing.structure || 'month',\n },\n confidence: 1.0,\n signals: [{ type: 'explicit_phrase', value: project.name, weight: 1.0 }],\n reasoning: `Matched project \"${project.name}\" with routing to ${project.routing.destination}`,\n };\n logger.debug('Captured routing from project lookup: %s -> %s', \n project.name, project.routing.destination);\n }\n \n } catch (error) {\n logger.error('Tool execution failed', { tool: toolCall.name, error });\n toolResults.push({ \n id: toolCall.id, \n name: toolCall.name, \n result: JSON.stringify({ error: String(error) }) \n });\n }\n }\n \n // Add tool results to history\n for (const tr of toolResults) {\n conversationHistory.push({\n role: 'tool',\n tool_call_id: tr.id,\n content: tr.result,\n });\n }\n \n // Build continuation prompt with full context\n const continuationPrompt = `Tool results received. Here's a reminder of your task:\n\nORIGINAL TRANSCRIPT (process this):\n--- BEGIN TRANSCRIPT ---\n${transcriptText}\n--- END TRANSCRIPT ---\n\nCorrections made so far: ${state.resolvedEntities.size > 0 ? Array.from(state.resolvedEntities.entries()).map(([k, v]) => `${k} -> ${v}`).join(', ') : 'none yet'}\n\nContinue analyzing. If you need more information, use the tools. \nWhen you're done with tool calls, output the COMPLETE corrected transcript as Markdown.\nDo NOT summarize - include ALL original content with corrections applied.`;\n\n conversationHistory.push({ role: 'user', content: continuationPrompt });\n \n // Continue conversation with full context\n response = await reasoning.complete({\n systemPrompt,\n prompt: continuationPrompt,\n tools: registry.getToolDefinitions(),\n });\n \n // Track token usage\n if (response.usage) {\n totalTokens += response.usage.totalTokens;\n }\n \n conversationHistory.push({ \n role: 'assistant', \n content: response.content,\n tool_calls: response.toolCalls?.map(tc => ({\n id: tc.id,\n name: tc.name,\n arguments: tc.arguments,\n })),\n });\n }\n \n // Extract final corrected text\n if (response.content && response.content.length > 50) {\n state.correctedText = response.content;\n state.confidence = 0.9;\n logger.debug('Final transcript generated: %d characters', response.content.length);\n } else {\n // Model didn't produce content - ask for it explicitly\n logger.debug('Model did not produce transcript, requesting explicitly...');\n \n const finalRequest = `Please output the COMPLETE corrected transcript now.\n\nORIGINAL:\n${transcriptText}\n\nCORRECTIONS TO APPLY:\n${state.resolvedEntities.size > 0 ? Array.from(state.resolvedEntities.entries()).map(([k, v]) => `- \"${k}\" should be \"${v}\"`).join('\\n') : 'None identified'}\n\nOutput the full transcript as clean Markdown. Do NOT summarize.`;\n\n const finalResponse = await reasoning.complete({\n systemPrompt,\n prompt: finalRequest,\n });\n \n // Track token usage\n if (finalResponse.usage) {\n totalTokens += finalResponse.usage.totalTokens;\n }\n \n state.correctedText = finalResponse.content || transcriptText;\n state.confidence = 0.8;\n }\n \n } catch (error) {\n logger.error('Agentic processing failed', { error });\n // Fall back to original text\n state.correctedText = transcriptText;\n state.confidence = 0.5;\n }\n \n return {\n enhancedText: state.correctedText,\n state,\n toolsUsed: [...new Set(toolsUsed)],\n iterations,\n totalTokens: totalTokens > 0 ? totalTokens : undefined,\n contextChanges: contextChanges.length > 0 ? contextChanges : undefined,\n };\n };\n \n return { process };\n};\n\n"],"names":["create","reasoning","ctx","logger","Logging","registry","Registry","process","transcriptText","state","originalText","correctedText","unknownEntities","resolvedEntities","Map","confidence","toolsUsed","contextChanges","iterations","totalTokens","maxIterations","conversationHistory","systemPrompt","push","role","content","initialPrompt","response","debug","complete","prompt","tools","getToolDefinitions","usage","tool_calls","toolCalls","map","tc","id","name","arguments","length","toolResults","toolCall","result","executeTool","resultStr","JSON","stringify","data","success","message","error","needsUserInput","interactiveInstance","info","termName","String","term","clarification","handleClarification","type","clarificationType","context","userPrompt","suggestion","options","set","additionalInfo","wizardResult","knownProjects","action","projectName","projectId","toLowerCase","replace","projectDestination","destination","newProject","description","classification","context_type","explicit_phrases","filter","v","i","a","indexOf","routing","structure","filename_options","active","contextInstance","saveEntity","reload","entityType","entityId","entityName","details","triggeredByTerm","routeDecision","path","signals","value","weight","warn","linkedProjectIndex","linkedProject","existingPhrases","updatedPhrases","updatedProject","notes","termDescription","trim","addedAlias","termNameFinal","termId","projectIds","termProjects","idx","createdProject","createdForTerm","newTerm","expansion","termExpansion","projects","undefined","sounds_like","join","primaryProject","find","p","ignoredTerm","ignoredTermName","ignoredId","newIgnored","ignoredAt","Date","toISOString","reason","personWizardResult","linkedProjectId","createdForPerson","personName","personId","newPerson","organization","heardAs","person","routingDecision","found","project","tool","tr","tool_call_id","continuationPrompt","size","Array","from","entries","k","finalRequest","finalResponse","enhancedText","Set"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/agentic/index.ts"],"sourcesContent":["/**\n * Agentic Transcription System\n * \n * Main entry point for the agentic transcription system. Provides tool-based\n * enhancement of transcripts using reasoning models.\n * \n * The agentic approach means the model queries context via tools rather than\n * receiving all context upfront in the prompt. This allows for:\n * - Smaller prompt sizes\n * - More targeted context retrieval \n * - Better handling of large context sets\n */\n\nimport { ToolContext, TranscriptionState } from './types';\nimport * as Executor from './executor';\nimport * as Registry from './registry';\nimport * as Reasoning from '../reasoning';\n\nexport interface ContextChangeRecord {\n entityType: 'person' | 'project' | 'company' | 'term';\n entityId: string;\n entityName: string;\n action: 'created' | 'updated';\n details?: Record<string, unknown>;\n}\n\nexport interface AgenticInstance {\n process(transcriptText: string): Promise<{\n enhancedText: string;\n state: TranscriptionState;\n toolsUsed: string[];\n iterations: number;\n totalTokens?: number;\n contextChanges?: ContextChangeRecord[];\n }>;\n getAvailableTools(): string[];\n}\n\n/**\n * Create an agentic executor from a ToolContext\n * This is the primary factory method - always agentic, no flags needed\n */\nexport const create = (\n reasoning: Reasoning.ReasoningInstance,\n toolContext: ToolContext\n): AgenticInstance => {\n const executor = Executor.create(reasoning, toolContext);\n \n return {\n process: (transcriptText: string) => executor.process(transcriptText),\n \n getAvailableTools: () => {\n const registry = Registry.create(toolContext);\n return registry.getTools().map(t => t.name);\n },\n };\n};\n\n// Re-export types\nexport * from './types';\n\n"],"names":["create","reasoning","toolContext","executor","Executor","process","transcriptText","getAvailableTools","registry","Registry","getTools","map","t","name"],"mappings":";;;AAsCA;;;AAGC,IACM,MAAMA,MAAAA,GAAS,CAClBC,SAAAA,EACAC,WAAAA,GAAAA;AAEA,IAAA,MAAMC,QAAAA,GAAWC,QAAe,CAACH,SAAAA,EAAWC,WAAAA,CAAAA;IAE5C,OAAO;AACHG,QAAAA,OAAAA,EAAS,CAACC,cAAAA,GAA2BH,QAAAA,CAASE,OAAO,CAACC,cAAAA,CAAAA;QAEtDC,iBAAAA,EAAmB,IAAA;YACf,MAAMC,QAAAA,GAAWC,QAAe,CAACP,WAAAA,CAAAA;YACjC,OAAOM,QAAAA,CAASE,QAAQ,EAAA,CAAGC,GAAG,CAACC,CAAAA,CAAAA,GAAKA,EAAEC,IAAI,CAAA;AAC9C,QAAA;AACJ,KAAA;AACJ;;;;"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/agentic/index.ts"],"sourcesContent":["/**\n * Agentic Transcription System\n * \n * Main entry point for the agentic transcription system. Provides tool-based\n * enhancement of transcripts using reasoning models.\n * \n * The agentic approach means the model queries context via tools rather than\n * receiving all context upfront in the prompt. This allows for:\n * - Smaller prompt sizes\n * - More targeted context retrieval \n * - Better handling of large context sets\n */\n\nimport { ToolContext, TranscriptionState } from './types';\nimport * as Executor from './executor';\nimport * as Registry from './registry';\nimport * as Reasoning from '../reasoning';\n\nexport interface ContextChangeRecord {\n entityType: 'person' | 'project' | 'company' | 'term' | 'ignored';\n entityId: string;\n entityName: string;\n action: 'created' | 'updated';\n details?: Record<string, unknown>;\n}\n\nexport interface AgenticInstance {\n process(transcriptText: string): Promise<{\n enhancedText: string;\n state: TranscriptionState;\n toolsUsed: string[];\n iterations: number;\n totalTokens?: number;\n contextChanges?: ContextChangeRecord[];\n }>;\n getAvailableTools(): string[];\n}\n\n/**\n * Create an agentic executor from a ToolContext\n * This is the primary factory method - always agentic, no flags needed\n */\nexport const create = (\n reasoning: Reasoning.ReasoningInstance,\n toolContext: ToolContext\n): AgenticInstance => {\n const executor = Executor.create(reasoning, toolContext);\n \n return {\n process: (transcriptText: string) => executor.process(transcriptText),\n \n getAvailableTools: () => {\n const registry = Registry.create(toolContext);\n return registry.getTools().map(t => t.name);\n },\n };\n};\n\n// Re-export types\nexport * from './types';\n\n"],"names":["create","reasoning","toolContext","executor","Executor","process","transcriptText","getAvailableTools","registry","Registry","getTools","map","t","name"],"mappings":";;;AAsCA;;;AAGC,IACM,MAAMA,MAAAA,GAAS,CAClBC,SAAAA,EACAC,WAAAA,GAAAA;AAEA,IAAA,MAAMC,QAAAA,GAAWC,QAAe,CAACH,SAAAA,EAAWC,WAAAA,CAAAA;IAE5C,OAAO;AACHG,QAAAA,OAAAA,EAAS,CAACC,cAAAA,GAA2BH,QAAAA,CAASE,OAAO,CAACC,cAAAA,CAAAA;QAEtDC,iBAAAA,EAAmB,IAAA;YACf,MAAMC,QAAAA,GAAWC,QAAe,CAACP,WAAAA,CAAAA;YACjC,OAAOM,QAAAA,CAASE,QAAQ,EAAA,CAAGC,GAAG,CAACC,CAAAA,CAAAA,GAAKA,EAAEC,IAAI,CAAA;AAC9C,QAAA;AACJ,KAAA;AACJ;;;;"}
|
|
@@ -2,7 +2,82 @@
|
|
|
2
2
|
* Lookup Person Tool
|
|
3
3
|
*
|
|
4
4
|
* Looks up information about a person mentioned in the transcript.
|
|
5
|
-
*/
|
|
5
|
+
*/ /**
|
|
6
|
+
* Extract context from transcript around where a name is mentioned.
|
|
7
|
+
* Returns approximately one sentence before and after the name mention.
|
|
8
|
+
*/ function extractNameContext(transcript, name) {
|
|
9
|
+
// Case-insensitive search for the name
|
|
10
|
+
const lowerTranscript = transcript.toLowerCase();
|
|
11
|
+
const lowerName = name.toLowerCase();
|
|
12
|
+
const index = lowerTranscript.indexOf(lowerName);
|
|
13
|
+
if (index === -1) {
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
// Define strong sentence boundaries (., !, ?)
|
|
17
|
+
const sentenceBoundary = /[.!?]/;
|
|
18
|
+
// Look backwards for the start (find the sentence boundary 1 sentence before)
|
|
19
|
+
let startIndex = 0;
|
|
20
|
+
let boundariesFound = 0;
|
|
21
|
+
for(let i = index - 1; i >= 0; i--){
|
|
22
|
+
if (sentenceBoundary.test(transcript[i])) {
|
|
23
|
+
boundariesFound++;
|
|
24
|
+
// After finding first boundary (end of current sentence),
|
|
25
|
+
// keep looking for the second (end of previous sentence)
|
|
26
|
+
if (boundariesFound === 2) {
|
|
27
|
+
// Start after this boundary
|
|
28
|
+
startIndex = i + 1;
|
|
29
|
+
break;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
// Look forwards for the end (find sentence boundary 1 sentence after)
|
|
34
|
+
let endIndex = transcript.length;
|
|
35
|
+
boundariesFound = 0;
|
|
36
|
+
for(let i = index + name.length; i < transcript.length; i++){
|
|
37
|
+
if (sentenceBoundary.test(transcript[i])) {
|
|
38
|
+
boundariesFound++;
|
|
39
|
+
// After finding first boundary (end of current sentence),
|
|
40
|
+
// keep looking for the second (end of next sentence)
|
|
41
|
+
if (boundariesFound === 2) {
|
|
42
|
+
// Include this boundary
|
|
43
|
+
endIndex = i + 1;
|
|
44
|
+
break;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
// Extract and clean up the context
|
|
49
|
+
let context = transcript.substring(startIndex, endIndex).trim();
|
|
50
|
+
// Limit length to avoid overwhelming the prompt (max ~300 chars)
|
|
51
|
+
if (context.length > 300) {
|
|
52
|
+
// Try to cut at a sentence boundary
|
|
53
|
+
const midPoint = context.indexOf(name);
|
|
54
|
+
if (midPoint !== -1) {
|
|
55
|
+
// Keep the sentence with the name, trim around it
|
|
56
|
+
let sentenceStart = midPoint;
|
|
57
|
+
let sentenceEnd = midPoint + name.length;
|
|
58
|
+
// Find sentence start
|
|
59
|
+
for(let i = midPoint - 1; i >= 0; i--){
|
|
60
|
+
if (sentenceBoundary.test(context[i])) {
|
|
61
|
+
sentenceStart = i + 1;
|
|
62
|
+
break;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
// Find sentence end
|
|
66
|
+
for(let i = midPoint + name.length; i < context.length; i++){
|
|
67
|
+
if (sentenceBoundary.test(context[i])) {
|
|
68
|
+
sentenceEnd = i + 1;
|
|
69
|
+
break;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
context = context.substring(sentenceStart, sentenceEnd).trim();
|
|
73
|
+
} else {
|
|
74
|
+
// Just truncate if name not found in extracted context
|
|
75
|
+
context = context.substring(0, 300) + '...';
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return context;
|
|
79
|
+
}
|
|
80
|
+
const create = (ctx)=>({
|
|
6
81
|
name: 'lookup_person',
|
|
7
82
|
description: 'Look up information about a person mentioned in the transcript. Use when you encounter a name that might need spelling verification or additional context.',
|
|
8
83
|
parameters: {
|
|
@@ -22,7 +97,20 @@
|
|
|
22
97
|
]
|
|
23
98
|
},
|
|
24
99
|
execute: async (args)=>{
|
|
100
|
+
var _ctx_resolvedEntities;
|
|
25
101
|
const context = ctx.contextInstance;
|
|
102
|
+
// First, check if this person was already resolved in this session
|
|
103
|
+
if ((_ctx_resolvedEntities = ctx.resolvedEntities) === null || _ctx_resolvedEntities === void 0 ? void 0 : _ctx_resolvedEntities.has(args.name)) {
|
|
104
|
+
const resolvedName = ctx.resolvedEntities.get(args.name);
|
|
105
|
+
return {
|
|
106
|
+
success: true,
|
|
107
|
+
data: {
|
|
108
|
+
found: true,
|
|
109
|
+
suggestion: `Already resolved: use "${resolvedName}"`,
|
|
110
|
+
cached: true
|
|
111
|
+
}
|
|
112
|
+
};
|
|
113
|
+
}
|
|
26
114
|
// Try direct name search
|
|
27
115
|
const people = context.search(args.name);
|
|
28
116
|
const personMatches = people.filter((e)=>e.type === 'person');
|
|
@@ -50,13 +138,44 @@
|
|
|
50
138
|
};
|
|
51
139
|
}
|
|
52
140
|
}
|
|
53
|
-
// Not found
|
|
141
|
+
// Not found - always signal that we need user input
|
|
142
|
+
// The executor will decide whether to actually prompt based on handler availability
|
|
143
|
+
const allProjects = context.getAllProjects();
|
|
144
|
+
const projectOptions = allProjects.filter((p)=>p.active !== false).map((p)=>`${p.name}${p.description ? ` - ${p.description}` : ''}`);
|
|
145
|
+
// Extract filename from sourceFile path for cleaner display
|
|
146
|
+
const fileName = ctx.sourceFile.split('/').pop() || ctx.sourceFile;
|
|
147
|
+
const fileDate = ctx.audioDate.toLocaleString('en-US', {
|
|
148
|
+
weekday: 'short',
|
|
149
|
+
year: 'numeric',
|
|
150
|
+
month: 'short',
|
|
151
|
+
day: 'numeric',
|
|
152
|
+
hour: '2-digit',
|
|
153
|
+
minute: '2-digit'
|
|
154
|
+
});
|
|
155
|
+
// Find context from transcript where the name is mentioned
|
|
156
|
+
const transcriptContext = extractNameContext(ctx.transcriptText, args.name);
|
|
157
|
+
const promptLines = [
|
|
158
|
+
`File: ${fileName}`,
|
|
159
|
+
`Date: ${fileDate}`,
|
|
160
|
+
'',
|
|
161
|
+
`Unknown person mentioned: "${args.name}"`
|
|
162
|
+
];
|
|
163
|
+
if (transcriptContext) {
|
|
164
|
+
promptLines.push('');
|
|
165
|
+
promptLines.push('Context from transcript:');
|
|
166
|
+
promptLines.push(`"${transcriptContext}"`);
|
|
167
|
+
}
|
|
54
168
|
return {
|
|
55
169
|
success: true,
|
|
170
|
+
needsUserInput: true,
|
|
171
|
+
userPrompt: promptLines.join('\n'),
|
|
56
172
|
data: {
|
|
57
173
|
found: false,
|
|
58
|
-
|
|
59
|
-
|
|
174
|
+
clarificationType: 'new_person',
|
|
175
|
+
term: args.name,
|
|
176
|
+
message: `Person "${args.name}" not found. Asking user for details.`,
|
|
177
|
+
knownProjects: allProjects.filter((p)=>p.active !== false),
|
|
178
|
+
options: projectOptions
|
|
60
179
|
}
|
|
61
180
|
};
|
|
62
181
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lookup-person.js","sources":["../../../src/agentic/tools/lookup-person.ts"],"sourcesContent":["/**\n * Lookup Person Tool\n * \n * Looks up information about a person mentioned in the transcript.\n */\n\nimport { TranscriptionTool, ToolContext, ToolResult } from '../types';\n\nexport const create = (ctx: ToolContext): TranscriptionTool => ({\n name: 'lookup_person',\n description: 'Look up information about a person mentioned in the transcript. Use when you encounter a name that might need spelling verification or additional context.',\n parameters: {\n type: 'object',\n properties: {\n name: {\n type: 'string',\n description: 'The name to look up (as heard in transcript)',\n },\n phonetic: {\n type: 'string',\n description: 'How the name sounds (for alias matching)',\n },\n },\n required: ['name'],\n },\n execute: async (args: { name: string; phonetic?: string }): Promise<ToolResult> => {\n const context = ctx.contextInstance;\n \n // Try direct name search\n const people = context.search(args.name);\n const personMatches = people.filter(e => e.type === 'person');\n \n if (personMatches.length > 0) {\n return {\n success: true,\n data: {\n found: true,\n person: personMatches[0],\n suggestion: `Use \"${personMatches[0].name}\" for correct spelling`,\n },\n };\n }\n \n // Try phonetic match (sounds_like)\n if (args.phonetic) {\n const person = context.findBySoundsLike(args.phonetic);\n if (person) {\n return {\n success: true,\n data: {\n found: true,\n person,\n suggestion: `\"${args.phonetic}\" likely refers to \"${person.name}\"`,\n },\n };\n }\n }\n \n // Not found\n return {\n success: true,\n data: {\n found: false,\n needsVerification: true,\n message: `Unknown person: \"${args.name}\". Consider asking for clarification.`,\n },\n };\n },\n});\n\n"],"names":["create","ctx","name","description","parameters","type","properties","phonetic","required","execute","args","context","contextInstance","people","search","personMatches","filter","e","length","success","data","found","person","suggestion","findBySoundsLike","needsVerification","message"],"mappings":"AAAA;;;;AAIC,IAIM,MAAMA,MAAAA,GAAS,CAACC,OAAyC;QAC5DC,IAAAA,EAAM,eAAA;QACNC,WAAAA,EAAa,4JAAA;QACbC,UAAAA,EAAY;YACRC,IAAAA,EAAM,QAAA;YACNC,UAAAA,EAAY;gBACRJ,IAAAA,EAAM;oBACFG,IAAAA,EAAM,QAAA;oBACNF,WAAAA,EAAa;AACjB,iBAAA;gBACAI,QAAAA,EAAU;oBACNF,IAAAA,EAAM,QAAA;oBACNF,WAAAA,EAAa;AACjB;AACJ,aAAA;YACAK,QAAAA,EAAU;AAAC,gBAAA;AAAO;AACtB,SAAA;AACAC,QAAAA,OAAAA,EAAS,OAAOC,IAAAA,GAAAA;YACZ,MAAMC,OAAAA,GAAUV,IAAIW,eAAe;;AAGnC,YAAA,MAAMC,MAAAA,GAASF,OAAAA,CAAQG,MAAM,CAACJ,KAAKR,IAAI,CAAA;YACvC,MAAMa,aAAAA,GAAgBF,OAAOG,MAAM,CAACC,CAAAA,CAAAA,GAAKA,CAAAA,CAAEZ,IAAI,KAAK,QAAA,CAAA;YAEpD,IAAIU,aAAAA,CAAcG,MAAM,GAAG,CAAA,EAAG;gBAC1B,OAAO;oBACHC,OAAAA,EAAS,IAAA;oBACTC,IAAAA,EAAM;wBACFC,KAAAA,EAAO,IAAA;wBACPC,MAAAA,EAAQP,aAAa,CAAC,CAAA,CAAE;wBACxBQ,UAAAA,EAAY,CAAC,KAAK,EAAER,aAAa,CAAC,EAAE,CAACb,IAAI,CAAC,sBAAsB;AACpE;AACJ,iBAAA;AACJ,YAAA;;YAGA,IAAIQ,IAAAA,CAAKH,QAAQ,EAAE;AACf,gBAAA,MAAMe,MAAAA,GAASX,OAAAA,CAAQa,gBAAgB,CAACd,KAAKH,QAAQ,CAAA;AACrD,gBAAA,IAAIe,MAAAA,EAAQ;oBACR,OAAO;wBACHH,OAAAA,EAAS,IAAA;wBACTC,IAAAA,EAAM;4BACFC,KAAAA,EAAO,IAAA;AACPC,4BAAAA,MAAAA;AACAC,4BAAAA,UAAAA,EAAY,CAAC,CAAC,EAAEb,IAAAA,CAAKH,QAAQ,CAAC,oBAAoB,EAAEe,MAAAA,CAAOpB,IAAI,CAAC,CAAC;AACrE;AACJ,qBAAA;AACJ,gBAAA;AACJ,YAAA;;YAGA,OAAO;gBACHiB,OAAAA,EAAS,IAAA;gBACTC,IAAAA,EAAM;oBACFC,KAAAA,EAAO,KAAA;oBACPI,iBAAAA,EAAmB,IAAA;AACnBC,oBAAAA,OAAAA,EAAS,CAAC,iBAAiB,EAAEhB,KAAKR,IAAI,CAAC,qCAAqC;AAChF;AACJ,aAAA;AACJ,QAAA;AACJ,KAAA;;;;"}
|
|
1
|
+
{"version":3,"file":"lookup-person.js","sources":["../../../src/agentic/tools/lookup-person.ts"],"sourcesContent":["/**\n * Lookup Person Tool\n * \n * Looks up information about a person mentioned in the transcript.\n */\n\nimport { TranscriptionTool, ToolContext, ToolResult } from '../types';\n\n/**\n * Extract context from transcript around where a name is mentioned.\n * Returns approximately one sentence before and after the name mention.\n */\nfunction extractNameContext(transcript: string, name: string): string | null {\n // Case-insensitive search for the name\n const lowerTranscript = transcript.toLowerCase();\n const lowerName = name.toLowerCase();\n const index = lowerTranscript.indexOf(lowerName);\n \n if (index === -1) {\n return null;\n }\n \n // Define strong sentence boundaries (., !, ?)\n const sentenceBoundary = /[.!?]/;\n \n // Look backwards for the start (find the sentence boundary 1 sentence before)\n let startIndex = 0;\n let boundariesFound = 0;\n for (let i = index - 1; i >= 0; i--) {\n if (sentenceBoundary.test(transcript[i])) {\n boundariesFound++;\n // After finding first boundary (end of current sentence), \n // keep looking for the second (end of previous sentence)\n if (boundariesFound === 2) {\n // Start after this boundary\n startIndex = i + 1;\n break;\n }\n }\n }\n \n // Look forwards for the end (find sentence boundary 1 sentence after)\n let endIndex = transcript.length;\n boundariesFound = 0;\n for (let i = index + name.length; i < transcript.length; i++) {\n if (sentenceBoundary.test(transcript[i])) {\n boundariesFound++;\n // After finding first boundary (end of current sentence),\n // keep looking for the second (end of next sentence)\n if (boundariesFound === 2) {\n // Include this boundary\n endIndex = i + 1;\n break;\n }\n }\n }\n \n // Extract and clean up the context\n let context = transcript.substring(startIndex, endIndex).trim();\n \n // Limit length to avoid overwhelming the prompt (max ~300 chars)\n if (context.length > 300) {\n // Try to cut at a sentence boundary\n const midPoint = context.indexOf(name);\n if (midPoint !== -1) {\n // Keep the sentence with the name, trim around it\n let sentenceStart = midPoint;\n let sentenceEnd = midPoint + name.length;\n \n // Find sentence start\n for (let i = midPoint - 1; i >= 0; i--) {\n if (sentenceBoundary.test(context[i])) {\n sentenceStart = i + 1;\n break;\n }\n }\n \n // Find sentence end\n for (let i = midPoint + name.length; i < context.length; i++) {\n if (sentenceBoundary.test(context[i])) {\n sentenceEnd = i + 1;\n break;\n }\n }\n \n context = context.substring(sentenceStart, sentenceEnd).trim();\n } else {\n // Just truncate if name not found in extracted context\n context = context.substring(0, 300) + '...';\n }\n }\n \n return context;\n}\n\nexport const create = (ctx: ToolContext): TranscriptionTool => ({\n name: 'lookup_person',\n description: 'Look up information about a person mentioned in the transcript. Use when you encounter a name that might need spelling verification or additional context.',\n parameters: {\n type: 'object',\n properties: {\n name: {\n type: 'string',\n description: 'The name to look up (as heard in transcript)',\n },\n phonetic: {\n type: 'string',\n description: 'How the name sounds (for alias matching)',\n },\n },\n required: ['name'],\n },\n execute: async (args: { name: string; phonetic?: string }): Promise<ToolResult> => {\n const context = ctx.contextInstance;\n \n // First, check if this person was already resolved in this session\n if (ctx.resolvedEntities?.has(args.name)) {\n const resolvedName = ctx.resolvedEntities.get(args.name);\n return {\n success: true,\n data: {\n found: true,\n suggestion: `Already resolved: use \"${resolvedName}\"`,\n cached: true,\n },\n };\n }\n \n // Try direct name search\n const people = context.search(args.name);\n const personMatches = people.filter(e => e.type === 'person');\n \n if (personMatches.length > 0) {\n return {\n success: true,\n data: {\n found: true,\n person: personMatches[0],\n suggestion: `Use \"${personMatches[0].name}\" for correct spelling`,\n },\n };\n }\n \n // Try phonetic match (sounds_like)\n if (args.phonetic) {\n const person = context.findBySoundsLike(args.phonetic);\n if (person) {\n return {\n success: true,\n data: {\n found: true,\n person,\n suggestion: `\"${args.phonetic}\" likely refers to \"${person.name}\"`,\n },\n };\n }\n }\n \n // Not found - always signal that we need user input\n // The executor will decide whether to actually prompt based on handler availability\n const allProjects = context.getAllProjects();\n const projectOptions = allProjects\n .filter(p => p.active !== false)\n .map(p => `${p.name}${p.description ? ` - ${p.description}` : ''}`);\n \n // Extract filename from sourceFile path for cleaner display\n const fileName = ctx.sourceFile.split('/').pop() || ctx.sourceFile;\n const fileDate = ctx.audioDate.toLocaleString('en-US', {\n weekday: 'short',\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n hour: '2-digit',\n minute: '2-digit',\n });\n \n // Find context from transcript where the name is mentioned\n const transcriptContext = extractNameContext(ctx.transcriptText, args.name);\n \n const promptLines = [\n `File: ${fileName}`,\n `Date: ${fileDate}`,\n '',\n `Unknown person mentioned: \"${args.name}\"`,\n ];\n \n if (transcriptContext) {\n promptLines.push('');\n promptLines.push('Context from transcript:');\n promptLines.push(`\"${transcriptContext}\"`);\n }\n \n return {\n success: true,\n needsUserInput: true,\n userPrompt: promptLines.join('\\n'),\n data: {\n found: false,\n clarificationType: 'new_person',\n term: args.name,\n message: `Person \"${args.name}\" not found. Asking user for details.`,\n knownProjects: allProjects.filter(p => p.active !== false),\n options: projectOptions,\n },\n };\n },\n});\n\n"],"names":["extractNameContext","transcript","name","lowerTranscript","toLowerCase","lowerName","index","indexOf","sentenceBoundary","startIndex","boundariesFound","i","test","endIndex","length","context","substring","trim","midPoint","sentenceStart","sentenceEnd","create","ctx","description","parameters","type","properties","phonetic","required","execute","args","contextInstance","resolvedEntities","has","resolvedName","get","success","data","found","suggestion","cached","people","search","personMatches","filter","e","person","findBySoundsLike","allProjects","getAllProjects","projectOptions","p","active","map","fileName","sourceFile","split","pop","fileDate","audioDate","toLocaleString","weekday","year","month","day","hour","minute","transcriptContext","transcriptText","promptLines","push","needsUserInput","userPrompt","join","clarificationType","term","message","knownProjects","options"],"mappings":"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"}
|