@redaksjon/protokoll-engine 0.1.15 → 0.1.16-dev.20260316055955.5771fbb

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.
Files changed (50) hide show
  1. package/dist/agentic/executor.d.ts.map +1 -1
  2. package/dist/index19.js +22 -2
  3. package/dist/index19.js.map +1 -1
  4. package/dist/index22.js +1 -1
  5. package/dist/index26.js +3 -2
  6. package/dist/index26.js.map +1 -1
  7. package/dist/index27.js +5 -5
  8. package/dist/index31.js +1 -1
  9. package/dist/index32.js +1 -1
  10. package/dist/index33.js +2 -2
  11. package/dist/index34.js +3 -3
  12. package/dist/index35.js +5 -5
  13. package/dist/index36.js +2 -2
  14. package/dist/index37.js +1 -1
  15. package/dist/index39.js +1 -1
  16. package/dist/index42.js +1 -1
  17. package/dist/index43.js +1 -1
  18. package/dist/index47.js +4 -45
  19. package/dist/index47.js.map +1 -1
  20. package/dist/index48.js +45 -47
  21. package/dist/index48.js.map +1 -1
  22. package/dist/index49.js +46 -34
  23. package/dist/index49.js.map +1 -1
  24. package/dist/index50.js +35 -280
  25. package/dist/index50.js.map +1 -1
  26. package/dist/index51.js +259 -138
  27. package/dist/index51.js.map +1 -1
  28. package/dist/index52.js +143 -61
  29. package/dist/index52.js.map +1 -1
  30. package/dist/index53.js +73 -70
  31. package/dist/index53.js.map +1 -1
  32. package/dist/index54.js +72 -145
  33. package/dist/index54.js.map +1 -1
  34. package/dist/index55.js +31 -106
  35. package/dist/index55.js.map +1 -1
  36. package/dist/index56.js +198 -21
  37. package/dist/index56.js.map +1 -1
  38. package/dist/index57.js +29 -25
  39. package/dist/index57.js.map +1 -1
  40. package/dist/index58.js +26 -18
  41. package/dist/index58.js.map +1 -1
  42. package/dist/index59.js +34 -5
  43. package/dist/index59.js.map +1 -1
  44. package/dist/index60.js +148 -5
  45. package/dist/index60.js.map +1 -1
  46. package/dist/index61.js +4 -4
  47. package/dist/index62.js +5 -148
  48. package/dist/index62.js.map +1 -1
  49. package/dist/reasoning/client.d.ts.map +1 -1
  50. package/package.json +1 -1
package/dist/index56.js CHANGED
@@ -1,45 +1,222 @@
1
+ function extractTermContext(transcript, term) {
2
+ const lowerTranscript = transcript.toLowerCase();
3
+ const lowerTerm = term.toLowerCase();
4
+ const index = lowerTranscript.indexOf(lowerTerm);
5
+ if (index === -1) {
6
+ return null;
7
+ }
8
+ const sentenceBoundary = /[.!?]/;
9
+ let startIndex = 0;
10
+ let boundariesFound = 0;
11
+ for (let i = index - 1; i >= 0; i--) {
12
+ if (sentenceBoundary.test(transcript[i])) {
13
+ boundariesFound++;
14
+ if (boundariesFound === 2) {
15
+ startIndex = i + 1;
16
+ break;
17
+ }
18
+ }
19
+ }
20
+ let endIndex = transcript.length;
21
+ boundariesFound = 0;
22
+ for (let i = index + term.length; i < transcript.length; i++) {
23
+ if (sentenceBoundary.test(transcript[i])) {
24
+ boundariesFound++;
25
+ if (boundariesFound === 2) {
26
+ endIndex = i + 1;
27
+ break;
28
+ }
29
+ }
30
+ }
31
+ let context = transcript.substring(startIndex, endIndex).trim();
32
+ if (context.length > 300) {
33
+ const midPoint = context.indexOf(term);
34
+ if (midPoint !== -1) {
35
+ let sentenceStart = midPoint;
36
+ let sentenceEnd = midPoint + term.length;
37
+ for (let i = midPoint - 1; i >= 0; i--) {
38
+ if (sentenceBoundary.test(context[i])) {
39
+ sentenceStart = i + 1;
40
+ break;
41
+ }
42
+ }
43
+ for (let i = midPoint + term.length; i < context.length; i++) {
44
+ if (sentenceBoundary.test(context[i])) {
45
+ sentenceEnd = i + 1;
46
+ break;
47
+ }
48
+ }
49
+ context = context.substring(sentenceStart, sentenceEnd).trim();
50
+ } else {
51
+ context = context.substring(0, 300) + "...";
52
+ }
53
+ }
54
+ return context;
55
+ }
1
56
  const create = (ctx) => ({
2
- name: "verify_spelling",
3
- description: "Request user verification for an unknown name or term. Use when you encounter something that needs human confirmation.",
57
+ name: "lookup_project",
58
+ description: "Look up project information for routing and context. Use when you need to determine where this note should be filed.",
4
59
  parameters: {
5
60
  type: "object",
6
61
  properties: {
7
- term: {
8
- type: "string",
9
- description: "The term that needs verification"
10
- },
11
- context: {
62
+ name: {
12
63
  type: "string",
13
- description: "Context around where this term appears"
64
+ description: "The project name or identifier"
14
65
  },
15
- suggestedSpelling: {
66
+ triggerPhrase: {
16
67
  type: "string",
17
- description: "Your best guess at the correct spelling"
68
+ description: "A phrase from the transcript that might indicate the project"
18
69
  }
19
70
  },
20
- required: ["term"]
71
+ required: ["name"]
21
72
  },
22
73
  execute: async (args) => {
23
- if (!ctx.interactiveMode) {
74
+ const context = ctx.contextInstance;
75
+ if (ctx.resolvedEntities?.has(args.name)) {
76
+ const resolvedName = ctx.resolvedEntities.get(args.name);
77
+ return {
78
+ success: true,
79
+ data: {
80
+ found: true,
81
+ suggestion: `Already resolved: use "${resolvedName}"`,
82
+ cached: true
83
+ }
84
+ };
85
+ }
86
+ if (context.isIgnored(args.name)) {
87
+ return {
88
+ success: true,
89
+ data: {
90
+ found: false,
91
+ ignored: true,
92
+ message: `"${args.name}" is on the ignore list - skipping without prompting`
93
+ }
94
+ };
95
+ }
96
+ let contextProjectId;
97
+ if (ctx.routingInstance) {
98
+ const allProjects2 = context.getAllProjects();
99
+ const activeProject = allProjects2.find((p) => p.active !== false);
100
+ contextProjectId = activeProject?.id;
101
+ }
102
+ const searchResults = context.searchWithContext(args.name, contextProjectId);
103
+ const projectMatches = searchResults.filter((e) => e.type === "project");
104
+ const termMatches = searchResults.filter((e) => e.type === "term");
105
+ if (projectMatches.length > 0) {
106
+ const project = projectMatches[0];
24
107
  return {
25
108
  success: true,
26
109
  data: {
27
- verified: false,
28
- useSuggestion: true,
29
- spelling: args.suggestedSpelling || args.term,
30
- message: "Non-interactive mode: using best guess"
110
+ found: true,
111
+ project,
112
+ matchedVia: "context_aware_search"
31
113
  }
32
114
  };
33
115
  }
116
+ if (termMatches.length > 0) {
117
+ const term = termMatches[0];
118
+ const termProjects = term.projects || [];
119
+ if (termProjects.length > 0) {
120
+ const allProjects2 = context.getAllProjects();
121
+ const associatedProject = allProjects2.find((p) => p.id === termProjects[0]);
122
+ if (associatedProject) {
123
+ return {
124
+ success: true,
125
+ data: {
126
+ found: true,
127
+ project: associatedProject,
128
+ matchedVia: "term",
129
+ termName: term.name
130
+ }
131
+ };
132
+ }
133
+ }
134
+ }
135
+ const soundsLikeMatch = context.findBySoundsLike(args.name);
136
+ if (soundsLikeMatch) {
137
+ if (soundsLikeMatch.type === "project") {
138
+ return {
139
+ success: true,
140
+ data: {
141
+ found: true,
142
+ project: soundsLikeMatch,
143
+ matchedVia: "sounds_like"
144
+ }
145
+ };
146
+ } else if (soundsLikeMatch.type === "term") {
147
+ const termProjects = soundsLikeMatch.projects || [];
148
+ if (termProjects.length > 0) {
149
+ const allProjects2 = context.getAllProjects();
150
+ const associatedProject = allProjects2.find((p) => p.id === termProjects[0]);
151
+ if (associatedProject) {
152
+ return {
153
+ success: true,
154
+ data: {
155
+ found: true,
156
+ project: associatedProject,
157
+ matchedVia: "term_sounds_like",
158
+ termName: soundsLikeMatch.name
159
+ }
160
+ };
161
+ }
162
+ }
163
+ }
164
+ }
165
+ if (args.triggerPhrase) {
166
+ const allProjects2 = context.getAllProjects();
167
+ for (const project of allProjects2) {
168
+ const phrases = project.classification?.explicit_phrases ?? [];
169
+ if (phrases.some((p) => args.triggerPhrase?.toLowerCase().includes(p.toLowerCase()))) {
170
+ return {
171
+ success: true,
172
+ data: {
173
+ found: true,
174
+ project,
175
+ matchedTrigger: args.triggerPhrase
176
+ }
177
+ };
178
+ }
179
+ }
180
+ }
181
+ const allProjects = context.getAllProjects();
182
+ const projectOptions = allProjects.filter((p) => p.active !== false).map((p) => `${p.name}${p.description ? ` - ${p.description}` : ""}`);
183
+ const fileName = ctx.sourceFile.split("/").pop() || ctx.sourceFile;
184
+ const fileDate = ctx.audioDate.toLocaleString("en-US", {
185
+ weekday: "short",
186
+ year: "numeric",
187
+ month: "short",
188
+ day: "numeric",
189
+ hour: "2-digit",
190
+ minute: "2-digit"
191
+ });
192
+ const transcriptContext = extractTermContext(ctx.transcriptText, args.name);
193
+ const contextLines = [
194
+ `File: ${fileName}`,
195
+ `Date: ${fileDate}`,
196
+ "",
197
+ `Unknown project/term: "${args.name}"`
198
+ ];
199
+ if (transcriptContext) {
200
+ contextLines.push("");
201
+ contextLines.push("Context from transcript:");
202
+ contextLines.push(`"${transcriptContext}"`);
203
+ } else if (args.triggerPhrase) {
204
+ contextLines.push("");
205
+ contextLines.push("Context from transcript:");
206
+ contextLines.push(`"${args.triggerPhrase}"`);
207
+ }
34
208
  return {
35
209
  success: true,
36
210
  needsUserInput: true,
37
- userPrompt: `Unknown term: "${args.term}"${args.context ? ` (context: "${args.context}")` : ""}
38
- ${args.suggestedSpelling ? `Suggested spelling: "${args.suggestedSpelling}"` : ""}
39
- Please provide the correct spelling:`,
211
+ userPrompt: contextLines.join("\n"),
40
212
  data: {
41
- term: args.term,
42
- suggestedSpelling: args.suggestedSpelling
213
+ found: false,
214
+ clarificationType: "new_project",
215
+ term: args.name,
216
+ triggerPhrase: args.triggerPhrase,
217
+ message: `Project "${args.name}" not found. Asking user if this is a new project.`,
218
+ knownProjects: allProjects.filter((p) => p.active !== false),
219
+ options: projectOptions
43
220
  }
44
221
  };
45
222
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index56.js","sources":["../src/agentic/tools/verify-spelling.ts"],"sourcesContent":["/**\n * Verify Spelling Tool\n * \n * Requests user verification for an unknown name or term.\n */\n\nimport { TranscriptionTool, ToolContext, ToolResult } from '../types';\n\nexport const create = (ctx: ToolContext): TranscriptionTool => ({\n name: 'verify_spelling',\n description: 'Request user verification for an unknown name or term. Use when you encounter something that needs human confirmation.',\n parameters: {\n type: 'object',\n properties: {\n term: {\n type: 'string',\n description: 'The term that needs verification',\n },\n context: {\n type: 'string',\n description: 'Context around where this term appears',\n },\n suggestedSpelling: {\n type: 'string',\n description: 'Your best guess at the correct spelling',\n },\n },\n required: ['term'],\n },\n execute: async (args: { term: string; context?: string; suggestedSpelling?: string }): Promise<ToolResult> => {\n if (!ctx.interactiveMode) {\n // In batch mode, return best guess\n return {\n success: true,\n data: {\n verified: false,\n useSuggestion: true,\n spelling: args.suggestedSpelling || args.term,\n message: 'Non-interactive mode: using best guess',\n },\n };\n }\n \n // In interactive mode, mark for user input\n return {\n success: true,\n needsUserInput: true,\n userPrompt: `Unknown term: \"${args.term}\"${args.context ? ` (context: \"${args.context}\")` : ''}\n${args.suggestedSpelling ? `Suggested spelling: \"${args.suggestedSpelling}\"` : ''}\nPlease provide the correct spelling:`,\n data: {\n term: args.term,\n suggestedSpelling: args.suggestedSpelling,\n },\n };\n },\n});\n\n"],"names":[],"mappings":"AAQO,MAAM,MAAA,GAAS,CAAC,GAAA,MAAyC;AAAA,EAC5D,IAAA,EAAM,iBAAA;AAAA,EACN,WAAA,EAAa,wHAAA;AAAA,EACb,UAAA,EAAY;AAAA,IACR,IAAA,EAAM,QAAA;AAAA,IACN,UAAA,EAAY;AAAA,MACR,IAAA,EAAM;AAAA,QACF,IAAA,EAAM,QAAA;AAAA,QACN,WAAA,EAAa;AAAA,OACjB;AAAA,MACA,OAAA,EAAS;AAAA,QACL,IAAA,EAAM,QAAA;AAAA,QACN,WAAA,EAAa;AAAA,OACjB;AAAA,MACA,iBAAA,EAAmB;AAAA,QACf,IAAA,EAAM,QAAA;AAAA,QACN,WAAA,EAAa;AAAA;AACjB,KACJ;AAAA,IACA,QAAA,EAAU,CAAC,MAAM;AAAA,GACrB;AAAA,EACA,OAAA,EAAS,OAAO,IAAA,KAA8F;AAC1G,IAAA,IAAI,CAAC,IAAI,eAAA,EAAiB;AAEtB,MAAA,OAAO;AAAA,QACH,OAAA,EAAS,IAAA;AAAA,QACT,IAAA,EAAM;AAAA,UACF,QAAA,EAAU,KAAA;AAAA,UACV,aAAA,EAAe,IAAA;AAAA,UACf,QAAA,EAAU,IAAA,CAAK,iBAAA,IAAqB,IAAA,CAAK,IAAA;AAAA,UACzC,OAAA,EAAS;AAAA;AACb,OACJ;AAAA,IACJ;AAGA,IAAA,OAAO;AAAA,MACH,OAAA,EAAS,IAAA;AAAA,MACT,cAAA,EAAgB,IAAA;AAAA,MAChB,UAAA,EAAY,CAAA,eAAA,EAAkB,IAAA,CAAK,IAAI,CAAA,CAAA,EAAI,IAAA,CAAK,OAAA,GAAU,CAAA,YAAA,EAAe,IAAA,CAAK,OAAO,CAAA,EAAA,CAAA,GAAO,EAAE;AAAA,EACxG,KAAK,iBAAA,GAAoB,CAAA,qBAAA,EAAwB,IAAA,CAAK,iBAAiB,MAAM,EAAE;AAAA,oCAAA,CAAA;AAAA,MAErE,IAAA,EAAM;AAAA,QACF,MAAM,IAAA,CAAK,IAAA;AAAA,QACX,mBAAmB,IAAA,CAAK;AAAA;AAC5B,KACJ;AAAA,EACJ;AACJ,CAAA;;;;"}
1
+ {"version":3,"file":"index56.js","sources":["../src/agentic/tools/lookup-project.ts"],"sourcesContent":["/**\n * Lookup Project Tool\n * \n * Looks up project information for routing and context.\n * Prompts to create unknown projects when user input is available.\n */\n\nimport { TranscriptionTool, ToolContext, ToolResult } from '../types';\n\n/**\n * Extract context from transcript around where a term is mentioned.\n * Returns approximately one sentence before and after the term mention.\n */\nfunction extractTermContext(transcript: string, term: string): string | null {\n // Case-insensitive search for the term\n const lowerTranscript = transcript.toLowerCase();\n const lowerTerm = term.toLowerCase();\n const index = lowerTranscript.indexOf(lowerTerm);\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 + term.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(term);\n if (midPoint !== -1) {\n // Keep the sentence with the term, trim around it\n let sentenceStart = midPoint;\n let sentenceEnd = midPoint + term.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 + term.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 term 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_project',\n description: 'Look up project information for routing and context. Use when you need to determine where this note should be filed.',\n parameters: {\n type: 'object',\n properties: {\n name: {\n type: 'string',\n description: 'The project name or identifier',\n },\n triggerPhrase: {\n type: 'string',\n description: 'A phrase from the transcript that might indicate the project',\n },\n },\n required: ['name'],\n },\n execute: async (args: { name: string; triggerPhrase?: string }): Promise<ToolResult> => {\n const context = ctx.contextInstance;\n \n // First, check if this project/term 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 // Check if this term is on the ignore list\n if (context.isIgnored(args.name)) {\n return {\n success: true,\n data: {\n found: false,\n ignored: true,\n message: `\"${args.name}\" is on the ignore list - skipping without prompting`,\n },\n };\n }\n \n // Try to determine context from routing instance if available\n let contextProjectId: string | undefined;\n if (ctx.routingInstance) {\n const allProjects = context.getAllProjects();\n // Use the first active project as a context hint (could be improved)\n const activeProject = allProjects.find(p => p.active !== false);\n contextProjectId = activeProject?.id;\n }\n \n // Use context-aware search (prefers related projects)\n const searchResults = context.searchWithContext(args.name, contextProjectId);\n const projectMatches = searchResults.filter(e => e.type === 'project');\n const termMatches = searchResults.filter(e => e.type === 'term');\n \n if (projectMatches.length > 0) {\n const project = projectMatches[0];\n return {\n success: true,\n data: {\n found: true,\n project,\n matchedVia: 'context_aware_search',\n },\n };\n }\n \n // Check if we found a term that's associated with projects\n if (termMatches.length > 0) {\n const term = termMatches[0];\n const termProjects = term.projects || [];\n \n if (termProjects.length > 0) {\n // Get the first associated project\n const allProjects = context.getAllProjects();\n const associatedProject = allProjects.find(p => p.id === termProjects[0]);\n \n if (associatedProject) {\n return {\n success: true,\n data: {\n found: true,\n project: associatedProject,\n matchedVia: 'term',\n termName: term.name,\n },\n };\n }\n }\n }\n \n // Try findBySoundsLike as a fallback for exact phonetic matches\n const soundsLikeMatch = context.findBySoundsLike(args.name);\n if (soundsLikeMatch) {\n if (soundsLikeMatch.type === 'project') {\n return {\n success: true,\n data: {\n found: true,\n project: soundsLikeMatch,\n matchedVia: 'sounds_like',\n },\n };\n } else if (soundsLikeMatch.type === 'term') {\n const termProjects = soundsLikeMatch.projects || [];\n \n if (termProjects.length > 0) {\n const allProjects = context.getAllProjects();\n const associatedProject = allProjects.find(p => p.id === termProjects[0]);\n \n if (associatedProject) {\n return {\n success: true,\n data: {\n found: true,\n project: associatedProject,\n matchedVia: 'term_sounds_like',\n termName: soundsLikeMatch.name,\n },\n };\n }\n }\n }\n }\n \n // Try getting all projects and matching trigger phrases\n if (args.triggerPhrase) {\n const allProjects = context.getAllProjects();\n for (const project of allProjects) {\n const phrases = project.classification?.explicit_phrases ?? [];\n if (phrases.some(p => args.triggerPhrase?.toLowerCase().includes(p.toLowerCase()))) {\n return {\n success: true,\n data: {\n found: true,\n project,\n matchedTrigger: args.triggerPhrase,\n },\n };\n }\n }\n }\n \n // Project 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 project/term is mentioned\n const transcriptContext = extractTermContext(ctx.transcriptText, args.name);\n \n const contextLines = [\n `File: ${fileName}`,\n `Date: ${fileDate}`,\n '',\n `Unknown project/term: \"${args.name}\"`,\n ];\n \n if (transcriptContext) {\n contextLines.push('');\n contextLines.push('Context from transcript:');\n contextLines.push(`\"${transcriptContext}\"`);\n } else if (args.triggerPhrase) {\n contextLines.push('');\n contextLines.push('Context from transcript:');\n contextLines.push(`\"${args.triggerPhrase}\"`);\n }\n \n return {\n success: true,\n needsUserInput: true,\n userPrompt: contextLines.join('\\n'),\n data: {\n found: false,\n clarificationType: 'new_project',\n term: args.name,\n triggerPhrase: args.triggerPhrase,\n message: `Project \"${args.name}\" not found. Asking user if this is a new project.`,\n knownProjects: allProjects.filter(p => p.active !== false),\n options: projectOptions,\n },\n };\n },\n});\n\n"],"names":["allProjects"],"mappings":"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"}
package/dist/index57.js CHANGED
@@ -1,41 +1,45 @@
1
1
  const create = (ctx) => ({
2
- name: "route_note",
3
- description: "Determine the destination for this note based on content analysis.",
2
+ name: "verify_spelling",
3
+ description: "Request user verification for an unknown name or term. Use when you encounter something that needs human confirmation.",
4
4
  parameters: {
5
5
  type: "object",
6
6
  properties: {
7
- projectHint: {
7
+ term: {
8
8
  type: "string",
9
- description: "The detected project name or hint"
9
+ description: "The term that needs verification"
10
10
  },
11
- contentSummary: {
11
+ context: {
12
12
  type: "string",
13
- description: "Brief summary of what the note is about"
13
+ description: "Context around where this term appears"
14
+ },
15
+ suggestedSpelling: {
16
+ type: "string",
17
+ description: "Your best guess at the correct spelling"
14
18
  }
15
- }
19
+ },
20
+ required: ["term"]
16
21
  },
17
22
  execute: async (args) => {
18
- const routing = ctx.routingInstance;
19
- const routingContext = {
20
- transcriptText: ctx.transcriptText,
21
- audioDate: ctx.audioDate,
22
- sourceFile: ctx.sourceFile
23
- };
24
- const decision = routing.route(routingContext);
25
- const outputPath = routing.buildOutputPath(decision, routingContext);
23
+ if (!ctx.interactiveMode) {
24
+ return {
25
+ success: true,
26
+ data: {
27
+ verified: false,
28
+ useSuggestion: true,
29
+ spelling: args.suggestedSpelling || args.term,
30
+ message: "Non-interactive mode: using best guess"
31
+ }
32
+ };
33
+ }
26
34
  return {
27
35
  success: true,
36
+ needsUserInput: true,
37
+ userPrompt: `Unknown term: "${args.term}"${args.context ? ` (context: "${args.context}")` : ""}
38
+ ${args.suggestedSpelling ? `Suggested spelling: "${args.suggestedSpelling}"` : ""}
39
+ Please provide the correct spelling:`,
28
40
  data: {
29
- projectId: decision.projectId,
30
- // Return the routing decision (base path + structure), NOT the built output path
31
- // The orchestrator will call buildOutputPath() later
32
- routingDecision: decision,
33
- // Also include the built path for informational purposes
34
- outputPath,
35
- confidence: decision.confidence,
36
- reasoning: decision.reasoning,
37
- projectHint: args.projectHint,
38
- contentSummary: args.contentSummary
41
+ term: args.term,
42
+ suggestedSpelling: args.suggestedSpelling
39
43
  }
40
44
  };
41
45
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index57.js","sources":["../src/agentic/tools/route-note.ts"],"sourcesContent":["/**\n * Route Note Tool\n * \n * Determines the destination for a note based on content analysis.\n */\n\nimport { TranscriptionTool, ToolContext, ToolResult } from '../types';\n\nexport const create = (ctx: ToolContext): TranscriptionTool => ({\n name: 'route_note',\n description: 'Determine the destination for this note based on content analysis.',\n parameters: {\n type: 'object',\n properties: {\n projectHint: {\n type: 'string',\n description: 'The detected project name or hint',\n },\n contentSummary: {\n type: 'string',\n description: 'Brief summary of what the note is about',\n },\n },\n },\n execute: async (args: { projectHint?: string; contentSummary?: string }): Promise<ToolResult> => {\n const routing = ctx.routingInstance;\n \n const routingContext = {\n transcriptText: ctx.transcriptText,\n audioDate: ctx.audioDate,\n sourceFile: ctx.sourceFile,\n };\n \n const decision = routing.route(routingContext);\n const outputPath = routing.buildOutputPath(decision, routingContext);\n \n return {\n success: true,\n data: {\n projectId: decision.projectId,\n // Return the routing decision (base path + structure), NOT the built output path\n // The orchestrator will call buildOutputPath() later\n routingDecision: decision,\n // Also include the built path for informational purposes\n outputPath: outputPath,\n confidence: decision.confidence,\n reasoning: decision.reasoning,\n projectHint: args.projectHint,\n contentSummary: args.contentSummary,\n },\n };\n },\n});\n\n"],"names":[],"mappings":"AAQO,MAAM,MAAA,GAAS,CAAC,GAAA,MAAyC;AAAA,EAC5D,IAAA,EAAM,YAAA;AAAA,EACN,WAAA,EAAa,oEAAA;AAAA,EACb,UAAA,EAAY;AAAA,IACR,IAAA,EAAM,QAAA;AAAA,IACN,UAAA,EAAY;AAAA,MACR,WAAA,EAAa;AAAA,QACT,IAAA,EAAM,QAAA;AAAA,QACN,WAAA,EAAa;AAAA,OACjB;AAAA,MACA,cAAA,EAAgB;AAAA,QACZ,IAAA,EAAM,QAAA;AAAA,QACN,WAAA,EAAa;AAAA;AACjB;AACJ,GACJ;AAAA,EACA,OAAA,EAAS,OAAO,IAAA,KAAiF;AAC7F,IAAA,MAAM,UAAU,GAAA,CAAI,eAAA;AAEpB,IAAA,MAAM,cAAA,GAAiB;AAAA,MACnB,gBAAgB,GAAA,CAAI,cAAA;AAAA,MACpB,WAAW,GAAA,CAAI,SAAA;AAAA,MACf,YAAY,GAAA,CAAI;AAAA,KACpB;AAEA,IAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,KAAA,CAAM,cAAc,CAAA;AAC7C,IAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,eAAA,CAAgB,QAAA,EAAU,cAAc,CAAA;AAEnE,IAAA,OAAO;AAAA,MACH,OAAA,EAAS,IAAA;AAAA,MACT,IAAA,EAAM;AAAA,QACF,WAAW,QAAA,CAAS,SAAA;AAAA;AAAA;AAAA,QAGpB,eAAA,EAAiB,QAAA;AAAA;AAAA,QAEjB,UAAA;AAAA,QACA,YAAY,QAAA,CAAS,UAAA;AAAA,QACrB,WAAW,QAAA,CAAS,SAAA;AAAA,QACpB,aAAa,IAAA,CAAK,WAAA;AAAA,QAClB,gBAAgB,IAAA,CAAK;AAAA;AACzB,KACJ;AAAA,EACJ;AACJ,CAAA;;;;"}
1
+ {"version":3,"file":"index57.js","sources":["../src/agentic/tools/verify-spelling.ts"],"sourcesContent":["/**\n * Verify Spelling Tool\n * \n * Requests user verification for an unknown name or term.\n */\n\nimport { TranscriptionTool, ToolContext, ToolResult } from '../types';\n\nexport const create = (ctx: ToolContext): TranscriptionTool => ({\n name: 'verify_spelling',\n description: 'Request user verification for an unknown name or term. Use when you encounter something that needs human confirmation.',\n parameters: {\n type: 'object',\n properties: {\n term: {\n type: 'string',\n description: 'The term that needs verification',\n },\n context: {\n type: 'string',\n description: 'Context around where this term appears',\n },\n suggestedSpelling: {\n type: 'string',\n description: 'Your best guess at the correct spelling',\n },\n },\n required: ['term'],\n },\n execute: async (args: { term: string; context?: string; suggestedSpelling?: string }): Promise<ToolResult> => {\n if (!ctx.interactiveMode) {\n // In batch mode, return best guess\n return {\n success: true,\n data: {\n verified: false,\n useSuggestion: true,\n spelling: args.suggestedSpelling || args.term,\n message: 'Non-interactive mode: using best guess',\n },\n };\n }\n \n // In interactive mode, mark for user input\n return {\n success: true,\n needsUserInput: true,\n userPrompt: `Unknown term: \"${args.term}\"${args.context ? ` (context: \"${args.context}\")` : ''}\n${args.suggestedSpelling ? `Suggested spelling: \"${args.suggestedSpelling}\"` : ''}\nPlease provide the correct spelling:`,\n data: {\n term: args.term,\n suggestedSpelling: args.suggestedSpelling,\n },\n };\n },\n});\n\n"],"names":[],"mappings":"AAQO,MAAM,MAAA,GAAS,CAAC,GAAA,MAAyC;AAAA,EAC5D,IAAA,EAAM,iBAAA;AAAA,EACN,WAAA,EAAa,wHAAA;AAAA,EACb,UAAA,EAAY;AAAA,IACR,IAAA,EAAM,QAAA;AAAA,IACN,UAAA,EAAY;AAAA,MACR,IAAA,EAAM;AAAA,QACF,IAAA,EAAM,QAAA;AAAA,QACN,WAAA,EAAa;AAAA,OACjB;AAAA,MACA,OAAA,EAAS;AAAA,QACL,IAAA,EAAM,QAAA;AAAA,QACN,WAAA,EAAa;AAAA,OACjB;AAAA,MACA,iBAAA,EAAmB;AAAA,QACf,IAAA,EAAM,QAAA;AAAA,QACN,WAAA,EAAa;AAAA;AACjB,KACJ;AAAA,IACA,QAAA,EAAU,CAAC,MAAM;AAAA,GACrB;AAAA,EACA,OAAA,EAAS,OAAO,IAAA,KAA8F;AAC1G,IAAA,IAAI,CAAC,IAAI,eAAA,EAAiB;AAEtB,MAAA,OAAO;AAAA,QACH,OAAA,EAAS,IAAA;AAAA,QACT,IAAA,EAAM;AAAA,UACF,QAAA,EAAU,KAAA;AAAA,UACV,aAAA,EAAe,IAAA;AAAA,UACf,QAAA,EAAU,IAAA,CAAK,iBAAA,IAAqB,IAAA,CAAK,IAAA;AAAA,UACzC,OAAA,EAAS;AAAA;AACb,OACJ;AAAA,IACJ;AAGA,IAAA,OAAO;AAAA,MACH,OAAA,EAAS,IAAA;AAAA,MACT,cAAA,EAAgB,IAAA;AAAA,MAChB,UAAA,EAAY,CAAA,eAAA,EAAkB,IAAA,CAAK,IAAI,CAAA,CAAA,EAAI,IAAA,CAAK,OAAA,GAAU,CAAA,YAAA,EAAe,IAAA,CAAK,OAAO,CAAA,EAAA,CAAA,GAAO,EAAE;AAAA,EACxG,KAAK,iBAAA,GAAoB,CAAA,qBAAA,EAAwB,IAAA,CAAK,iBAAiB,MAAM,EAAE;AAAA,oCAAA,CAAA;AAAA,MAErE,IAAA,EAAM;AAAA,QACF,MAAM,IAAA,CAAK,IAAA;AAAA,QACX,mBAAmB,IAAA,CAAK;AAAA;AAC5B,KACJ;AAAA,EACJ;AACJ,CAAA;;;;"}
package/dist/index58.js CHANGED
@@ -1,33 +1,41 @@
1
- const create = (_ctx) => ({
2
- name: "store_context",
3
- description: "Store new context information for future use. Use when you learn something new that should be remembered.",
1
+ const create = (ctx) => ({
2
+ name: "route_note",
3
+ description: "Determine the destination for this note based on content analysis.",
4
4
  parameters: {
5
5
  type: "object",
6
6
  properties: {
7
- entityType: {
7
+ projectHint: {
8
8
  type: "string",
9
- enum: ["person", "project", "company", "term"],
10
- description: "Type of entity to store"
9
+ description: "The detected project name or hint"
11
10
  },
12
- name: {
11
+ contentSummary: {
13
12
  type: "string",
14
- description: "Name of the entity"
15
- },
16
- details: {
17
- type: "object",
18
- description: "Additional details about the entity"
13
+ description: "Brief summary of what the note is about"
19
14
  }
20
- },
21
- required: ["entityType", "name"]
15
+ }
22
16
  },
23
17
  execute: async (args) => {
18
+ const routing = ctx.routingInstance;
19
+ const routingContext = {
20
+ transcriptText: ctx.transcriptText,
21
+ audioDate: ctx.audioDate,
22
+ sourceFile: ctx.sourceFile
23
+ };
24
+ const decision = routing.route(routingContext);
25
+ const outputPath = routing.buildOutputPath(decision, routingContext);
24
26
  return {
25
27
  success: true,
26
28
  data: {
27
- stored: false,
28
- message: "Context storage requires --self-update flag. Information noted but not persisted.",
29
- entityType: args.entityType,
30
- name: args.name
29
+ projectId: decision.projectId,
30
+ // Return the routing decision (base path + structure), NOT the built output path
31
+ // The orchestrator will call buildOutputPath() later
32
+ routingDecision: decision,
33
+ // Also include the built path for informational purposes
34
+ outputPath,
35
+ confidence: decision.confidence,
36
+ reasoning: decision.reasoning,
37
+ projectHint: args.projectHint,
38
+ contentSummary: args.contentSummary
31
39
  }
32
40
  };
33
41
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index58.js","sources":["../src/agentic/tools/store-context.ts"],"sourcesContent":["/**\n * Store Context Tool\n * \n * Stores new context information for future use.\n */\n\nimport { TranscriptionTool, ToolContext, ToolResult } from '../types';\n\nexport const create = (_ctx: ToolContext): TranscriptionTool => ({\n name: 'store_context',\n description: 'Store new context information for future use. Use when you learn something new that should be remembered.',\n parameters: {\n type: 'object',\n properties: {\n entityType: {\n type: 'string',\n enum: ['person', 'project', 'company', 'term'],\n description: 'Type of entity to store',\n },\n name: {\n type: 'string',\n description: 'Name of the entity',\n },\n details: {\n type: 'object',\n description: 'Additional details about the entity',\n },\n },\n required: ['entityType', 'name'],\n },\n \n execute: async (args: { entityType: string; name: string; details?: any }): Promise<ToolResult> => {\n // This tool requires --self-update flag to actually persist\n // Otherwise it just acknowledges without saving\n \n return {\n success: true,\n data: {\n stored: false,\n message: 'Context storage requires --self-update flag. Information noted but not persisted.',\n entityType: args.entityType,\n name: args.name,\n },\n };\n },\n});\n\n"],"names":[],"mappings":"AAQO,MAAM,MAAA,GAAS,CAAC,IAAA,MAA0C;AAAA,EAC7D,IAAA,EAAM,eAAA;AAAA,EACN,WAAA,EAAa,2GAAA;AAAA,EACb,UAAA,EAAY;AAAA,IACR,IAAA,EAAM,QAAA;AAAA,IACN,UAAA,EAAY;AAAA,MACR,UAAA,EAAY;AAAA,QACR,IAAA,EAAM,QAAA;AAAA,QACN,IAAA,EAAM,CAAC,QAAA,EAAU,SAAA,EAAW,WAAW,MAAM,CAAA;AAAA,QAC7C,WAAA,EAAa;AAAA,OACjB;AAAA,MACA,IAAA,EAAM;AAAA,QACF,IAAA,EAAM,QAAA;AAAA,QACN,WAAA,EAAa;AAAA,OACjB;AAAA,MACA,OAAA,EAAS;AAAA,QACL,IAAA,EAAM,QAAA;AAAA,QACN,WAAA,EAAa;AAAA;AACjB,KACJ;AAAA,IACA,QAAA,EAAU,CAAC,YAAA,EAAc,MAAM;AAAA,GACnC;AAAA,EAEA,OAAA,EAAS,OAAO,IAAA,KAAmF;AAI/F,IAAA,OAAO;AAAA,MACH,OAAA,EAAS,IAAA;AAAA,MACT,IAAA,EAAM;AAAA,QACF,MAAA,EAAQ,KAAA;AAAA,QACR,OAAA,EAAS,mFAAA;AAAA,QACT,YAAY,IAAA,CAAK,UAAA;AAAA,QACjB,MAAM,IAAA,CAAK;AAAA;AACf,KACJ;AAAA,EACJ;AACJ,CAAA;;;;"}
1
+ {"version":3,"file":"index58.js","sources":["../src/agentic/tools/route-note.ts"],"sourcesContent":["/**\n * Route Note Tool\n * \n * Determines the destination for a note based on content analysis.\n */\n\nimport { TranscriptionTool, ToolContext, ToolResult } from '../types';\n\nexport const create = (ctx: ToolContext): TranscriptionTool => ({\n name: 'route_note',\n description: 'Determine the destination for this note based on content analysis.',\n parameters: {\n type: 'object',\n properties: {\n projectHint: {\n type: 'string',\n description: 'The detected project name or hint',\n },\n contentSummary: {\n type: 'string',\n description: 'Brief summary of what the note is about',\n },\n },\n },\n execute: async (args: { projectHint?: string; contentSummary?: string }): Promise<ToolResult> => {\n const routing = ctx.routingInstance;\n \n const routingContext = {\n transcriptText: ctx.transcriptText,\n audioDate: ctx.audioDate,\n sourceFile: ctx.sourceFile,\n };\n \n const decision = routing.route(routingContext);\n const outputPath = routing.buildOutputPath(decision, routingContext);\n \n return {\n success: true,\n data: {\n projectId: decision.projectId,\n // Return the routing decision (base path + structure), NOT the built output path\n // The orchestrator will call buildOutputPath() later\n routingDecision: decision,\n // Also include the built path for informational purposes\n outputPath: outputPath,\n confidence: decision.confidence,\n reasoning: decision.reasoning,\n projectHint: args.projectHint,\n contentSummary: args.contentSummary,\n },\n };\n },\n});\n\n"],"names":[],"mappings":"AAQO,MAAM,MAAA,GAAS,CAAC,GAAA,MAAyC;AAAA,EAC5D,IAAA,EAAM,YAAA;AAAA,EACN,WAAA,EAAa,oEAAA;AAAA,EACb,UAAA,EAAY;AAAA,IACR,IAAA,EAAM,QAAA;AAAA,IACN,UAAA,EAAY;AAAA,MACR,WAAA,EAAa;AAAA,QACT,IAAA,EAAM,QAAA;AAAA,QACN,WAAA,EAAa;AAAA,OACjB;AAAA,MACA,cAAA,EAAgB;AAAA,QACZ,IAAA,EAAM,QAAA;AAAA,QACN,WAAA,EAAa;AAAA;AACjB;AACJ,GACJ;AAAA,EACA,OAAA,EAAS,OAAO,IAAA,KAAiF;AAC7F,IAAA,MAAM,UAAU,GAAA,CAAI,eAAA;AAEpB,IAAA,MAAM,cAAA,GAAiB;AAAA,MACnB,gBAAgB,GAAA,CAAI,cAAA;AAAA,MACpB,WAAW,GAAA,CAAI,SAAA;AAAA,MACf,YAAY,GAAA,CAAI;AAAA,KACpB;AAEA,IAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,KAAA,CAAM,cAAc,CAAA;AAC7C,IAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,eAAA,CAAgB,QAAA,EAAU,cAAc,CAAA;AAEnE,IAAA,OAAO;AAAA,MACH,OAAA,EAAS,IAAA;AAAA,MACT,IAAA,EAAM;AAAA,QACF,WAAW,QAAA,CAAS,SAAA;AAAA;AAAA;AAAA,QAGpB,eAAA,EAAiB,QAAA;AAAA;AAAA,QAEjB,UAAA;AAAA,QACA,YAAY,QAAA,CAAS,UAAA;AAAA,QACrB,WAAW,QAAA,CAAS,SAAA;AAAA,QACpB,aAAa,IAAA,CAAK,WAAA;AAAA,QAClB,gBAAgB,IAAA,CAAK;AAAA;AACzB,KACJ;AAAA,EACJ;AACJ,CAAA;;;;"}
package/dist/index59.js CHANGED
@@ -1,8 +1,37 @@
1
- import { create as create$1 } from './index62.js';
2
-
3
- const create = (config) => {
4
- return create$1(config);
5
- };
1
+ const create = (_ctx) => ({
2
+ name: "store_context",
3
+ description: "Store new context information for future use. Use when you learn something new that should be remembered.",
4
+ parameters: {
5
+ type: "object",
6
+ properties: {
7
+ entityType: {
8
+ type: "string",
9
+ enum: ["person", "project", "company", "term"],
10
+ description: "Type of entity to store"
11
+ },
12
+ name: {
13
+ type: "string",
14
+ description: "Name of the entity"
15
+ },
16
+ details: {
17
+ type: "object",
18
+ description: "Additional details about the entity"
19
+ }
20
+ },
21
+ required: ["entityType", "name"]
22
+ },
23
+ execute: async (args) => {
24
+ return {
25
+ success: true,
26
+ data: {
27
+ stored: false,
28
+ message: "Context storage requires --self-update flag. Information noted but not persisted.",
29
+ entityType: args.entityType,
30
+ name: args.name
31
+ }
32
+ };
33
+ }
34
+ });
6
35
 
7
36
  export { create };
8
37
  //# sourceMappingURL=index59.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index59.js","sources":["../src/out/index.ts"],"sourcesContent":["/**\n * Output Management System\n *\n * Main entry point for the output management system. Handles intermediate\n * files and final output destinations.\n */\n\nimport { OutputConfig, OutputPaths, IntermediateFiles, RawTranscriptData } from './types';\nimport * as Manager from './manager';\nimport * as Metadata from '../util/metadata';\n\nexport interface OutputInstance {\n createOutputPaths(\n audioFile: string,\n routedDestination: string,\n hash: string,\n date: Date\n ): OutputPaths;\n ensureDirectories(paths: OutputPaths): Promise<void>;\n writeIntermediate(\n paths: OutputPaths,\n type: keyof IntermediateFiles,\n content: unknown\n ): Promise<string>;\n /**\n * Write the raw Whisper transcript to the .transcript/ directory alongside final output.\n * This enables compare and reanalyze workflows.\n */\n writeRawTranscript(paths: OutputPaths, data: RawTranscriptData): Promise<string>;\n writeTranscript(paths: OutputPaths, content: string, metadata?: Metadata.TranscriptMetadata): Promise<string>;\n /**\n * Read a previously stored raw transcript from the .transcript/ directory.\n * Returns null if no raw transcript exists.\n */\n readRawTranscript(finalOutputPath: string): Promise<RawTranscriptData | null>;\n cleanIntermediates(paths: OutputPaths): Promise<void>;\n}\n\nexport const create = (config: OutputConfig): OutputInstance => {\n return Manager.create(config);\n};\n\nexport const DEFAULT_OUTPUT_CONFIG: OutputConfig = {\n intermediateDir: './output/protokoll',\n keepIntermediates: true,\n timestampFormat: 'YYMMDD-HHmm',\n};\n\n// Re-export types\nexport * from './types';\n"],"names":["Manager.create"],"mappings":";;AAsCO,MAAM,MAAA,GAAS,CAAC,MAAA,KAAyC;AAC5D,EAAA,OAAOA,SAAe,MAAM,CAAA;AAChC;;;;"}
1
+ {"version":3,"file":"index59.js","sources":["../src/agentic/tools/store-context.ts"],"sourcesContent":["/**\n * Store Context Tool\n * \n * Stores new context information for future use.\n */\n\nimport { TranscriptionTool, ToolContext, ToolResult } from '../types';\n\nexport const create = (_ctx: ToolContext): TranscriptionTool => ({\n name: 'store_context',\n description: 'Store new context information for future use. Use when you learn something new that should be remembered.',\n parameters: {\n type: 'object',\n properties: {\n entityType: {\n type: 'string',\n enum: ['person', 'project', 'company', 'term'],\n description: 'Type of entity to store',\n },\n name: {\n type: 'string',\n description: 'Name of the entity',\n },\n details: {\n type: 'object',\n description: 'Additional details about the entity',\n },\n },\n required: ['entityType', 'name'],\n },\n \n execute: async (args: { entityType: string; name: string; details?: any }): Promise<ToolResult> => {\n // This tool requires --self-update flag to actually persist\n // Otherwise it just acknowledges without saving\n \n return {\n success: true,\n data: {\n stored: false,\n message: 'Context storage requires --self-update flag. Information noted but not persisted.',\n entityType: args.entityType,\n name: args.name,\n },\n };\n },\n});\n\n"],"names":[],"mappings":"AAQO,MAAM,MAAA,GAAS,CAAC,IAAA,MAA0C;AAAA,EAC7D,IAAA,EAAM,eAAA;AAAA,EACN,WAAA,EAAa,2GAAA;AAAA,EACb,UAAA,EAAY;AAAA,IACR,IAAA,EAAM,QAAA;AAAA,IACN,UAAA,EAAY;AAAA,MACR,UAAA,EAAY;AAAA,QACR,IAAA,EAAM,QAAA;AAAA,QACN,IAAA,EAAM,CAAC,QAAA,EAAU,SAAA,EAAW,WAAW,MAAM,CAAA;AAAA,QAC7C,WAAA,EAAa;AAAA,OACjB;AAAA,MACA,IAAA,EAAM;AAAA,QACF,IAAA,EAAM,QAAA;AAAA,QACN,WAAA,EAAa;AAAA,OACjB;AAAA,MACA,OAAA,EAAS;AAAA,QACL,IAAA,EAAM,QAAA;AAAA,QACN,WAAA,EAAa;AAAA;AACjB,KACJ;AAAA,IACA,QAAA,EAAU,CAAC,YAAA,EAAc,MAAM;AAAA,GACnC;AAAA,EAEA,OAAA,EAAS,OAAO,IAAA,KAAmF;AAI/F,IAAA,OAAO;AAAA,MACH,OAAA,EAAS,IAAA;AAAA,MACT,IAAA,EAAM;AAAA,QACF,MAAA,EAAQ,KAAA;AAAA,QACR,OAAA,EAAS,mFAAA;AAAA,QACT,YAAY,IAAA,CAAK,UAAA;AAAA,QACjB,MAAM,IAAA,CAAK;AAAA;AACf,KACJ;AAAA,EACJ;AACJ,CAAA;;;;"}