@redaksjon/protokoll 0.0.11 → 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 +12 -5
- package/dist/constants.js.map +1 -1
- package/dist/context/discovery.js +1 -1
- package/dist/context/discovery.js.map +1 -1
- package/dist/context/index.js +25 -1
- package/dist/context/index.js.map +1 -1
- package/dist/context/storage.js +57 -4
- 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 +47 -2
- package/dist/output/manager.js.map +1 -1
- package/dist/phases/complete.js +38 -3
- package/dist/phases/complete.js.map +1 -1
- package/dist/phases/locate.js +1 -1
- package/dist/phases/locate.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/routing/router.js +2 -2
- package/dist/routing/router.js.map +1 -1
- package/dist/util/media.js +1 -1
- package/dist/util/media.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/dist/util/storage.js +3 -3
- package/dist/util/storage.js.map +1 -1
- 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/eslint.config.mjs +1 -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 +2 -3
- package/scripts/copy-assets.mjs +47 -0
- package/scripts/coverage-priority.mjs +323 -0
- package/tsconfig.tsbuildinfo +1 -1
- package/vite.config.ts +6 -13
- package/vitest.config.ts +5 -1
package/dist/protokoll.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"protokoll.js","sources":["../src/protokoll.ts"],"sourcesContent":["#!/usr/bin/env node\nimport 'dotenv/config';\nimport * as Arguments from '@/arguments';\nimport { ALLOWED_AUDIO_EXTENSIONS, ALLOWED_OUTPUT_FILENAME_OPTIONS, ALLOWED_OUTPUT_STRUCTURES, DEFAULT_AUDIO_EXTENSIONS, DEFAULT_OUTPUT_FILENAME_OPTIONS, DEFAULT_INPUT_DIRECTORY, DEFAULT_OUTPUT_DIRECTORY, DEFAULT_OUTPUT_STRUCTURE, DEFAULT_TIMEZONE, PROGRAM_NAME, VERSION, DEFAULT_CONFIG_DIR, DEFAULT_INTERMEDIATE_DIRECTORY } from '@/constants';\nimport { getLogger, setLogLevel } from '@/logging';\nimport * as Pipeline from './pipeline';\nimport * as LocatePhase from './phases/locate';\nimport * as Dreadcabinet from '@theunwalked/dreadcabinet';\nimport * as Cardigantime from '@theunwalked/cardigantime';\nimport { z } from 'zod';\n\nexport interface Args extends Dreadcabinet.Args, Cardigantime.Args {\n dryRun?: boolean;\n verbose?: boolean;\n debug?: boolean;\n transcriptionModel?: string;\n model?: string;\n openaiApiKey?: string;\n overrides?: boolean;\n contextDirectories?: string[];\n maxAudioSize?: number | string;\n tempDirectory?: string;\n interactive?: boolean;\n selfReflection?: boolean;\n processedDirectory?: string;\n}\n\nexport const ConfigSchema = z.object({\n dryRun: z.boolean(),\n verbose: z.boolean(),\n debug: z.boolean(),\n diff: z.boolean(),\n log: z.boolean(),\n model: z.string(),\n transcriptionModel: z.string(),\n contentTypes: z.array(z.string()),\n overrides: z.boolean(),\n contextDirectories: z.array(z.string()).optional(),\n maxAudioSize: z.number(),\n tempDirectory: z.string(),\n interactive: z.boolean(),\n selfReflection: z.boolean(),\n processedDirectory: z.string().optional(),\n});\n\nexport const SecureConfigSchema = z.object({\n openaiApiKey: z.string().optional(),\n});\n\nexport type Config = z.infer<typeof ConfigSchema> & Dreadcabinet.Config & Cardigantime.Config;\nexport type SecureConfig = z.infer<typeof SecureConfigSchema>;\n\nexport async function main() {\n\n // eslint-disable-next-line no-console\n console.info(`Starting ${PROGRAM_NAME}: ${VERSION}`);\n\n const dreadcabinetOptions = {\n defaults: {\n timezone: DEFAULT_TIMEZONE,\n extensions: DEFAULT_AUDIO_EXTENSIONS,\n outputStructure: DEFAULT_OUTPUT_STRUCTURE,\n outputFilenameOptions: DEFAULT_OUTPUT_FILENAME_OPTIONS,\n inputDirectory: DEFAULT_INPUT_DIRECTORY,\n outputDirectory: DEFAULT_OUTPUT_DIRECTORY,\n },\n allowed: {\n extensions: ALLOWED_AUDIO_EXTENSIONS,\n outputStructures: ALLOWED_OUTPUT_STRUCTURES,\n outputFilenameOptions: ALLOWED_OUTPUT_FILENAME_OPTIONS,\n },\n features: Dreadcabinet.DEFAULT_FEATURES,\n addDefaults: false,\n };\n\n const dreadcabinet = Dreadcabinet.create(dreadcabinetOptions);\n\n const cardigantime = Cardigantime.create({\n defaults: {\n configDirectory: DEFAULT_CONFIG_DIR,\n },\n configShape: ConfigSchema.shape,\n });\n\n const [config, secureConfig]: [Config, SecureConfig] = await Arguments.configure(dreadcabinet, cardigantime);\n\n // Set log level based on verbose flag\n if (config.verbose === true) {\n setLogLevel('verbose');\n }\n if (config.debug === true) {\n setLogLevel('debug');\n }\n\n const logger = getLogger();\n dreadcabinet.setLogger(logger);\n\n try {\n\n const operator: Dreadcabinet.Operator = await dreadcabinet.operate({\n ...config,\n ...secureConfig,\n });\n \n // Use the locate phase for file discovery and hash generation\n const locatePhase = LocatePhase.create(config, operator);\n \n // Create the intelligent transcription pipeline\n // This wires together ALL modules: context, routing, transcription,\n // reasoning, agentic tools, interactive, output, and reflection\n const pipeline = await Pipeline.create({\n model: config.model,\n transcriptionModel: config.transcriptionModel,\n interactive: config.interactive,\n selfReflection: config.selfReflection,\n debug: config.debug,\n dryRun: config.dryRun,\n contextDirectory: config.configDirectory,\n intermediateDir: DEFAULT_INTERMEDIATE_DIRECTORY,\n keepIntermediates: config.debug,\n outputDirectory: config.outputDirectory || DEFAULT_OUTPUT_DIRECTORY,\n outputStructure: config.outputStructure || DEFAULT_OUTPUT_STRUCTURE,\n outputFilenameOptions: config.outputFilenameOptions || DEFAULT_OUTPUT_FILENAME_OPTIONS,\n maxAudioSize: config.maxAudioSize,\n tempDirectory: config.tempDirectory,\n processedDirectory: config.processedDirectory,\n });\n\n await operator.process(async (file: string) => {\n // Use locate phase for file metadata\n const { creationTime, hash } = await locatePhase.locate(file);\n \n // Run through the full intelligent pipeline\n const result = await pipeline.process({\n audioFile: file,\n creation: creationTime,\n hash,\n });\n \n logger.info('Processed: %s -> %s', file, result.outputPath);\n });\n } catch (error: any) {\n logger.error('Exiting due to Error: %s, %s', error.message, error.stack);\n process.exit(1);\n }\n}"],"names":["ConfigSchema","z","object","dryRun","boolean","verbose","debug","diff","log","model","string","transcriptionModel","contentTypes","array","overrides","contextDirectories","optional","maxAudioSize","number","tempDirectory","interactive","selfReflection","processedDirectory","openaiApiKey","main","console","info","PROGRAM_NAME","VERSION","dreadcabinetOptions","defaults","timezone","DEFAULT_TIMEZONE","extensions","DEFAULT_AUDIO_EXTENSIONS","outputStructure","DEFAULT_OUTPUT_STRUCTURE","outputFilenameOptions","DEFAULT_OUTPUT_FILENAME_OPTIONS","inputDirectory","DEFAULT_INPUT_DIRECTORY","outputDirectory","DEFAULT_OUTPUT_DIRECTORY","allowed","ALLOWED_AUDIO_EXTENSIONS","outputStructures","ALLOWED_OUTPUT_STRUCTURES","ALLOWED_OUTPUT_FILENAME_OPTIONS","features","Dreadcabinet","DEFAULT_FEATURES","addDefaults","dreadcabinet","create","cardigantime","Cardigantime","configDirectory","DEFAULT_CONFIG_DIR","configShape","shape","config","secureConfig","Arguments","setLogLevel","logger","getLogger","setLogger","operator","operate","locatePhase","LocatePhase","pipeline","Pipeline","contextDirectory","intermediateDir","DEFAULT_INTERMEDIATE_DIRECTORY","keepIntermediates","process","file","creationTime","hash","locate","result","audioFile","creation","outputPath","error","message","stack","exit"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"protokoll.js","sources":["../src/protokoll.ts"],"sourcesContent":["#!/usr/bin/env node\nimport 'dotenv/config';\nimport * as Arguments from '@/arguments';\nimport { ALLOWED_AUDIO_EXTENSIONS, ALLOWED_OUTPUT_FILENAME_OPTIONS, ALLOWED_OUTPUT_STRUCTURES, DEFAULT_AUDIO_EXTENSIONS, DEFAULT_OUTPUT_FILENAME_OPTIONS, DEFAULT_INPUT_DIRECTORY, DEFAULT_OUTPUT_DIRECTORY, DEFAULT_OUTPUT_STRUCTURE, DEFAULT_TIMEZONE, PROGRAM_NAME, VERSION, DEFAULT_CONFIG_DIR, DEFAULT_INTERMEDIATE_DIRECTORY } from '@/constants';\nimport { getLogger, setLogLevel } from '@/logging';\nimport * as Pipeline from './pipeline';\nimport * as LocatePhase from './phases/locate';\nimport * as Dreadcabinet from '@theunwalked/dreadcabinet';\nimport * as Cardigantime from '@theunwalked/cardigantime';\nimport { z } from 'zod';\nimport { glob } from 'glob';\n\nexport interface Args extends Dreadcabinet.Args, Cardigantime.Args {\n dryRun?: boolean;\n verbose?: boolean;\n debug?: boolean;\n transcriptionModel?: string;\n model?: string;\n reasoningLevel?: 'low' | 'medium' | 'high';\n openaiApiKey?: string;\n overrides?: boolean;\n contextDirectories?: string[];\n maxAudioSize?: number | string;\n tempDirectory?: string;\n batch?: boolean; // --batch flag (disables interactive mode)\n selfReflection?: boolean;\n silent?: boolean;\n processedDirectory?: string;\n}\n\nexport const ConfigSchema = z.object({\n dryRun: z.boolean(),\n verbose: z.boolean(),\n debug: z.boolean(),\n diff: z.boolean(),\n log: z.boolean(),\n model: z.string(),\n transcriptionModel: z.string(),\n reasoningLevel: z.enum(['low', 'medium', 'high']),\n contentTypes: z.array(z.string()),\n overrides: z.boolean(),\n contextDirectories: z.array(z.string()).optional(),\n maxAudioSize: z.number(),\n tempDirectory: z.string(),\n interactive: z.boolean(),\n selfReflection: z.boolean(),\n silent: z.boolean(),\n processedDirectory: z.string().optional(),\n});\n\nexport const SecureConfigSchema = z.object({\n openaiApiKey: z.string().optional(),\n});\n\nexport type Config = z.infer<typeof ConfigSchema> & Dreadcabinet.Config & Cardigantime.Config;\nexport type SecureConfig = z.infer<typeof SecureConfigSchema>;\n\nexport async function main() {\n\n // eslint-disable-next-line no-console\n console.info(`Starting ${PROGRAM_NAME}: ${VERSION}`);\n\n const dreadcabinetOptions = {\n defaults: {\n timezone: DEFAULT_TIMEZONE,\n extensions: DEFAULT_AUDIO_EXTENSIONS,\n outputStructure: DEFAULT_OUTPUT_STRUCTURE,\n outputFilenameOptions: DEFAULT_OUTPUT_FILENAME_OPTIONS,\n inputDirectory: DEFAULT_INPUT_DIRECTORY,\n outputDirectory: DEFAULT_OUTPUT_DIRECTORY,\n },\n allowed: {\n extensions: ALLOWED_AUDIO_EXTENSIONS,\n outputStructures: ALLOWED_OUTPUT_STRUCTURES,\n outputFilenameOptions: ALLOWED_OUTPUT_FILENAME_OPTIONS,\n },\n features: Dreadcabinet.DEFAULT_FEATURES,\n addDefaults: false,\n };\n\n const dreadcabinet = Dreadcabinet.create(dreadcabinetOptions);\n\n const cardigantime = Cardigantime.create({\n defaults: {\n configDirectory: DEFAULT_CONFIG_DIR,\n },\n configShape: ConfigSchema.shape,\n });\n\n const [config, secureConfig]: [Config, SecureConfig] = await Arguments.configure(dreadcabinet, cardigantime);\n\n // Set log level based on verbose flag\n if (config.verbose === true) {\n setLogLevel('verbose');\n }\n if (config.debug === true) {\n setLogLevel('debug');\n }\n\n const logger = getLogger();\n dreadcabinet.setLogger(logger);\n\n try {\n\n const operator: Dreadcabinet.Operator = await dreadcabinet.operate({\n ...config,\n ...secureConfig,\n });\n \n // Use the locate phase for file discovery and hash generation\n const locatePhase = LocatePhase.create(config, operator);\n \n // Create the intelligent transcription pipeline\n // This wires together ALL modules: context, routing, transcription,\n // reasoning, agentic tools, interactive, output, and reflection\n const pipeline = await Pipeline.create({\n model: config.model,\n transcriptionModel: config.transcriptionModel,\n reasoningLevel: config.reasoningLevel,\n interactive: config.interactive,\n selfReflection: config.selfReflection,\n silent: config.silent,\n debug: config.debug,\n dryRun: config.dryRun,\n contextDirectory: config.configDirectory,\n intermediateDir: DEFAULT_INTERMEDIATE_DIRECTORY,\n keepIntermediates: config.debug,\n outputDirectory: config.outputDirectory || DEFAULT_OUTPUT_DIRECTORY,\n outputStructure: config.outputStructure || DEFAULT_OUTPUT_STRUCTURE,\n outputFilenameOptions: config.outputFilenameOptions || DEFAULT_OUTPUT_FILENAME_OPTIONS,\n maxAudioSize: config.maxAudioSize,\n tempDirectory: config.tempDirectory,\n processedDirectory: config.processedDirectory,\n });\n\n // Get list of files to process for progress tracking\n // Build glob patterns from configured audio extensions\n const inputDir = config.inputDirectory || DEFAULT_INPUT_DIRECTORY;\n const extensions = config.extensions || DEFAULT_AUDIO_EXTENSIONS;\n const patterns = extensions.map(ext => `**/*${ext}`);\n \n // Count files before processing\n const matchedFiles = await glob(patterns, { \n cwd: inputDir, \n nodir: true,\n absolute: true,\n });\n const totalFiles = matchedFiles.length;\n \n if (totalFiles === 0) {\n logger.info('No files to process in %s', inputDir);\n return;\n }\n \n logger.info('Found %d file(s) to process in %s', totalFiles, inputDir);\n \n let currentFileIndex = 0;\n \n // Track processed files for summary\n const processedFiles: Array<{ input: string; output: string }> = [];\n \n await operator.process(async (file: string) => {\n currentFileIndex++;\n const progress = `[${currentFileIndex}/${totalFiles}]`;\n \n logger.info('%s Starting: %s', progress, file);\n \n // Use locate phase for file metadata\n const { creationTime, hash } = await locatePhase.locate(file);\n \n // Run through the full intelligent pipeline\n const result = await pipeline.process({\n audioFile: file,\n creation: creationTime,\n hash,\n progress: { current: currentFileIndex, total: totalFiles },\n });\n \n logger.info('%s Completed: %s -> %s', progress, file, result.outputPath);\n \n // Track for summary\n processedFiles.push({ input: file, output: result.outputPath });\n });\n \n // Print summary of processed files\n if (processedFiles.length > 0) {\n // eslint-disable-next-line no-console\n console.info('\\n' + '='.repeat(60));\n // eslint-disable-next-line no-console\n console.info('TRANSCRIPTION SUMMARY');\n // eslint-disable-next-line no-console\n console.info('='.repeat(60));\n // eslint-disable-next-line no-console\n console.info(`Processed ${processedFiles.length} file(s)\\n`);\n \n // eslint-disable-next-line no-console\n console.info('Input Files:');\n for (const { input } of processedFiles) {\n // eslint-disable-next-line no-console\n console.info(input);\n }\n \n // eslint-disable-next-line no-console\n console.info('\\nOutput Files:');\n for (const { output } of processedFiles) {\n // eslint-disable-next-line no-console\n console.info(output);\n }\n \n // eslint-disable-next-line no-console\n console.info('\\n' + '='.repeat(60));\n }\n } catch (error: any) {\n logger.error('Exiting due to Error: %s, %s', error.message, error.stack);\n process.exit(1);\n }\n}"],"names":["ConfigSchema","z","object","dryRun","boolean","verbose","debug","diff","log","model","string","transcriptionModel","reasoningLevel","enum","contentTypes","array","overrides","contextDirectories","optional","maxAudioSize","number","tempDirectory","interactive","selfReflection","silent","processedDirectory","openaiApiKey","main","console","info","PROGRAM_NAME","VERSION","dreadcabinetOptions","defaults","timezone","DEFAULT_TIMEZONE","extensions","DEFAULT_AUDIO_EXTENSIONS","outputStructure","DEFAULT_OUTPUT_STRUCTURE","outputFilenameOptions","DEFAULT_OUTPUT_FILENAME_OPTIONS","inputDirectory","DEFAULT_INPUT_DIRECTORY","outputDirectory","DEFAULT_OUTPUT_DIRECTORY","allowed","ALLOWED_AUDIO_EXTENSIONS","outputStructures","ALLOWED_OUTPUT_STRUCTURES","ALLOWED_OUTPUT_FILENAME_OPTIONS","features","Dreadcabinet","DEFAULT_FEATURES","addDefaults","dreadcabinet","create","cardigantime","Cardigantime","configDirectory","DEFAULT_CONFIG_DIR","configShape","shape","config","secureConfig","Arguments","setLogLevel","logger","getLogger","setLogger","operator","operate","locatePhase","LocatePhase","pipeline","Pipeline","contextDirectory","intermediateDir","DEFAULT_INTERMEDIATE_DIRECTORY","keepIntermediates","inputDir","patterns","map","ext","matchedFiles","glob","cwd","nodir","absolute","totalFiles","length","currentFileIndex","processedFiles","process","file","progress","creationTime","hash","locate","result","audioFile","creation","current","total","outputPath","push","input","output","repeat","error","message","stack","exit"],"mappings":"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"}
|
package/dist/reasoning/client.js
CHANGED
|
@@ -139,8 +139,91 @@ const create = (config)=>{
|
|
|
139
139
|
throw error;
|
|
140
140
|
}
|
|
141
141
|
};
|
|
142
|
+
const completeWithTools = async (request)=>{
|
|
143
|
+
logger.debug('Tool call request starting', {
|
|
144
|
+
model: config.model,
|
|
145
|
+
messageCount: request.messages.length
|
|
146
|
+
});
|
|
147
|
+
try {
|
|
148
|
+
var _message_tool_calls;
|
|
149
|
+
// Convert messages to OpenAI format
|
|
150
|
+
const messages = request.messages.map((msg)=>{
|
|
151
|
+
if (msg.role === 'tool') {
|
|
152
|
+
return {
|
|
153
|
+
role: 'tool',
|
|
154
|
+
content: msg.content,
|
|
155
|
+
tool_call_id: msg.tool_call_id || ''
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
if (msg.role === 'assistant' && msg.tool_calls) {
|
|
159
|
+
return {
|
|
160
|
+
role: 'assistant',
|
|
161
|
+
content: msg.content || null,
|
|
162
|
+
tool_calls: msg.tool_calls.map((tc)=>({
|
|
163
|
+
id: tc.id,
|
|
164
|
+
type: 'function',
|
|
165
|
+
function: tc.function
|
|
166
|
+
}))
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
return {
|
|
170
|
+
role: msg.role,
|
|
171
|
+
content: msg.content
|
|
172
|
+
};
|
|
173
|
+
});
|
|
174
|
+
// Build request options
|
|
175
|
+
const requestOptions = {
|
|
176
|
+
model: config.model,
|
|
177
|
+
messages,
|
|
178
|
+
tools: request.tools,
|
|
179
|
+
tool_choice: request.tools && request.tools.length > 0 ? 'auto' : undefined
|
|
180
|
+
};
|
|
181
|
+
// Add reasoning_effort for models that support it
|
|
182
|
+
if (supportsReasoningLevel(config.model)) {
|
|
183
|
+
requestOptions.reasoning_effort = config.reasoningLevel || 'medium';
|
|
184
|
+
}
|
|
185
|
+
const response = await getClient().chat.completions.create(requestOptions);
|
|
186
|
+
const choice = response.choices[0];
|
|
187
|
+
const message = choice.message;
|
|
188
|
+
// Extract tool calls if any
|
|
189
|
+
const toolCalls = (_message_tool_calls = message.tool_calls) === null || _message_tool_calls === void 0 ? void 0 : _message_tool_calls.map((tc)=>{
|
|
190
|
+
// Handle both standard and custom tool call formats
|
|
191
|
+
const fn = 'function' in tc ? tc.function : null;
|
|
192
|
+
if (!fn) {
|
|
193
|
+
return {
|
|
194
|
+
id: tc.id,
|
|
195
|
+
function: {
|
|
196
|
+
name: 'unknown',
|
|
197
|
+
arguments: '{}'
|
|
198
|
+
}
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
return {
|
|
202
|
+
id: tc.id,
|
|
203
|
+
function: {
|
|
204
|
+
name: fn.name,
|
|
205
|
+
arguments: fn.arguments
|
|
206
|
+
}
|
|
207
|
+
};
|
|
208
|
+
});
|
|
209
|
+
if (toolCalls && toolCalls.length > 0) {
|
|
210
|
+
logger.debug('Model requested %d tool calls: %s', toolCalls.length, toolCalls.map((t)=>t.function.name).join(', '));
|
|
211
|
+
}
|
|
212
|
+
return {
|
|
213
|
+
content: message.content || '',
|
|
214
|
+
tool_calls: toolCalls,
|
|
215
|
+
finish_reason: choice.finish_reason
|
|
216
|
+
};
|
|
217
|
+
} catch (error) {
|
|
218
|
+
logger.error('Tool call request failed', {
|
|
219
|
+
error
|
|
220
|
+
});
|
|
221
|
+
throw error;
|
|
222
|
+
}
|
|
223
|
+
};
|
|
142
224
|
return {
|
|
143
225
|
complete,
|
|
226
|
+
completeWithTools,
|
|
144
227
|
isReasoningModel,
|
|
145
228
|
getModelFamily
|
|
146
229
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sources":["../../src/reasoning/client.ts"],"sourcesContent":["/**\n * Reasoning Client\n * \n * Wrapper for reasoning model calls with tool/function calling support.\n * Uses OpenAI's native function calling for agentic workflows.\n */\n\nimport OpenAI from 'openai';\nimport { ReasoningConfig, ReasoningRequest, ReasoningResponse, ToolCall } from './types';\nimport * as Logging from '../logging';\n\nexport interface ClientInstance {\n complete(request: ReasoningRequest): Promise<ReasoningResponse>;\n isReasoningModel(model: string): boolean;\n getModelFamily(model: string): 'openai' | 'anthropic' | 'gemini' | 'unknown';\n}\n\nexport const create = (config: ReasoningConfig): ClientInstance => {\n const logger = Logging.getLogger();\n \n // Lazy-initialize OpenAI client (only when actually needed)\n let client: OpenAI | null = null;\n const getClient = (): OpenAI => {\n if (!client) {\n client = new OpenAI({ apiKey: config.apiKey });\n }\n return client;\n };\n \n const getModelFamily = (model: string): 'openai' | 'anthropic' | 'gemini' | 'unknown' => {\n if (model.startsWith('gpt') || model.startsWith('o1') || model.startsWith('o3')) return 'openai';\n if (model.startsWith('claude')) return 'anthropic';\n if (model.startsWith('gemini')) return 'gemini';\n return 'unknown';\n };\n \n const isReasoningModel = (model: string): boolean => {\n // Models known for strong reasoning\n const reasoningModels = [\n 'gpt-4o', 'gpt-4-turbo', 'gpt-5', 'gpt-5-mini', 'gpt-5.1', 'gpt-5.2',\n 'o1', 'o1-mini', 'o1-preview', 'o3', 'o3-mini',\n 'claude-3-5-sonnet', 'claude-3-opus', 'claude-4',\n ];\n return reasoningModels.some(rm => model.includes(rm));\n };\n \n const supportsReasoningLevel = (model: string): boolean => {\n // Models that support reasoning_effort parameter\n const models = ['gpt-5.1', 'gpt-5.2', 'o1', 'o1-mini', 'o3', 'o3-mini'];\n return models.some(m => model.includes(m));\n };\n \n const complete = async (request: ReasoningRequest): Promise<ReasoningResponse> => {\n const startTime = Date.now();\n logger.debug('Reasoning request starting', { model: config.model });\n \n try {\n // Build messages for OpenAI\n const messages: Array<OpenAI.Chat.ChatCompletionMessageParam> = [];\n \n if (request.systemPrompt) {\n messages.push({ role: 'system', content: request.systemPrompt });\n }\n \n // Add the main prompt\n messages.push({ role: 'user', content: request.prompt });\n \n // Build tools if provided\n const tools: OpenAI.Chat.ChatCompletionTool[] | undefined = request.tools?.map(tool => ({\n type: 'function' as const,\n function: {\n name: tool.name,\n description: tool.description,\n parameters: tool.parameters,\n },\n }));\n \n // Build request options\n const requestOptions: Record<string, unknown> = {\n model: config.model,\n messages,\n tools: tools && tools.length > 0 ? tools : undefined,\n tool_choice: tools && tools.length > 0 ? 'auto' : undefined,\n };\n \n // Add reasoning_effort for models that support it (default to 'medium')\n if (supportsReasoningLevel(config.model)) {\n const reasoningLevel = config.reasoningLevel || 'medium';\n requestOptions.reasoning_effort = reasoningLevel;\n logger.debug('Using reasoning_effort: %s for model %s', reasoningLevel, config.model);\n }\n \n const response = await getClient().chat.completions.create(\n requestOptions as unknown as OpenAI.Chat.ChatCompletionCreateParamsNonStreaming\n );\n \n const duration = Date.now() - startTime;\n logger.debug('Reasoning model responded in %dms', duration);\n \n const choice = response.choices[0];\n const message = choice.message;\n \n // Extract token usage\n const usage = response.usage ? {\n promptTokens: response.usage.prompt_tokens,\n completionTokens: response.usage.completion_tokens,\n totalTokens: response.usage.total_tokens,\n } : undefined;\n \n // Extract tool calls if any\n const toolCalls: ToolCall[] | undefined = message.tool_calls?.map(tc => {\n // Handle both standard and custom tool call formats\n const fn = 'function' in tc ? tc.function : null;\n if (!fn) {\n return { id: tc.id, name: 'unknown', arguments: {} };\n }\n return {\n id: tc.id,\n name: fn.name,\n arguments: JSON.parse(fn.arguments),\n };\n });\n \n if (toolCalls && toolCalls.length > 0) {\n logger.debug('Model requested %d tool calls: %s', toolCalls.length, toolCalls.map(t => t.name).join(', '));\n }\n \n return {\n content: message.content || '',\n model: config.model,\n duration,\n usage,\n toolCalls,\n finishReason: choice.finish_reason,\n };\n } catch (error) {\n logger.error('Reasoning request failed', { error });\n throw error;\n }\n };\n \n return {\n complete,\n isReasoningModel,\n getModelFamily,\n };\n};\n"],"names":["create","config","logger","Logging","client","getClient","OpenAI","apiKey","getModelFamily","model","startsWith","isReasoningModel","reasoningModels","some","rm","includes","supportsReasoningLevel","models","m","complete","request","startTime","Date","now","debug","message","messages","systemPrompt","push","role","content","prompt","tools","map","tool","type","function","name","description","parameters","requestOptions","length","undefined","tool_choice","reasoningLevel","reasoning_effort","response","chat","completions","duration","choice","choices","usage","promptTokens","prompt_tokens","completionTokens","completion_tokens","totalTokens","total_tokens","toolCalls","tool_calls","tc","fn","id","arguments","JSON","parse","t","join","finishReason","finish_reason","error"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"client.js","sources":["../../src/reasoning/client.ts"],"sourcesContent":["/**\n * Reasoning Client\n * \n * Wrapper for reasoning model calls with tool/function calling support.\n * Uses OpenAI's native function calling for agentic workflows.\n */\n\nimport OpenAI from 'openai';\nimport { ReasoningConfig, ReasoningRequest, ReasoningResponse, ToolCall } from './types';\nimport * as Logging from '../logging';\n\nexport interface ToolCallRequest {\n messages: Array<{\n role: 'system' | 'user' | 'assistant' | 'tool';\n content: string;\n tool_call_id?: string;\n tool_calls?: Array<{ id: string; function: { name: string; arguments: string } }>;\n }>;\n tools?: Array<{\n type: 'function';\n function: {\n name: string;\n description: string;\n parameters: Record<string, unknown>;\n };\n }>;\n}\n\nexport interface ToolCallResponse {\n content: string;\n tool_calls?: Array<{\n id: string;\n function: {\n name: string;\n arguments: string;\n };\n }>;\n finish_reason?: string;\n}\n\nexport interface ClientInstance {\n complete(request: ReasoningRequest): Promise<ReasoningResponse>;\n completeWithTools(request: ToolCallRequest): Promise<ToolCallResponse>;\n isReasoningModel(model: string): boolean;\n getModelFamily(model: string): 'openai' | 'anthropic' | 'gemini' | 'unknown';\n}\n\nexport const create = (config: ReasoningConfig): ClientInstance => {\n const logger = Logging.getLogger();\n \n // Lazy-initialize OpenAI client (only when actually needed)\n let client: OpenAI | null = null;\n const getClient = (): OpenAI => {\n if (!client) {\n client = new OpenAI({ apiKey: config.apiKey });\n }\n return client;\n };\n \n const getModelFamily = (model: string): 'openai' | 'anthropic' | 'gemini' | 'unknown' => {\n if (model.startsWith('gpt') || model.startsWith('o1') || model.startsWith('o3')) return 'openai';\n if (model.startsWith('claude')) return 'anthropic';\n if (model.startsWith('gemini')) return 'gemini';\n return 'unknown';\n };\n \n const isReasoningModel = (model: string): boolean => {\n // Models known for strong reasoning\n const reasoningModels = [\n 'gpt-4o', 'gpt-4-turbo', 'gpt-5', 'gpt-5-mini', 'gpt-5.1', 'gpt-5.2',\n 'o1', 'o1-mini', 'o1-preview', 'o3', 'o3-mini',\n 'claude-3-5-sonnet', 'claude-3-opus', 'claude-4',\n ];\n return reasoningModels.some(rm => model.includes(rm));\n };\n \n const supportsReasoningLevel = (model: string): boolean => {\n // Models that support reasoning_effort parameter\n const models = ['gpt-5.1', 'gpt-5.2', 'o1', 'o1-mini', 'o3', 'o3-mini'];\n return models.some(m => model.includes(m));\n };\n \n const complete = async (request: ReasoningRequest): Promise<ReasoningResponse> => {\n const startTime = Date.now();\n logger.debug('Reasoning request starting', { model: config.model });\n \n try {\n // Build messages for OpenAI\n const messages: Array<OpenAI.Chat.ChatCompletionMessageParam> = [];\n \n if (request.systemPrompt) {\n messages.push({ role: 'system', content: request.systemPrompt });\n }\n \n // Add the main prompt\n messages.push({ role: 'user', content: request.prompt });\n \n // Build tools if provided\n const tools: OpenAI.Chat.ChatCompletionTool[] | undefined = request.tools?.map(tool => ({\n type: 'function' as const,\n function: {\n name: tool.name,\n description: tool.description,\n parameters: tool.parameters,\n },\n }));\n \n // Build request options\n const requestOptions: Record<string, unknown> = {\n model: config.model,\n messages,\n tools: tools && tools.length > 0 ? tools : undefined,\n tool_choice: tools && tools.length > 0 ? 'auto' : undefined,\n };\n \n // Add reasoning_effort for models that support it (default to 'medium')\n if (supportsReasoningLevel(config.model)) {\n const reasoningLevel = config.reasoningLevel || 'medium';\n requestOptions.reasoning_effort = reasoningLevel;\n logger.debug('Using reasoning_effort: %s for model %s', reasoningLevel, config.model);\n }\n \n const response = await getClient().chat.completions.create(\n requestOptions as unknown as OpenAI.Chat.ChatCompletionCreateParamsNonStreaming\n );\n \n const duration = Date.now() - startTime;\n logger.debug('Reasoning model responded in %dms', duration);\n \n const choice = response.choices[0];\n const message = choice.message;\n \n // Extract token usage\n const usage = response.usage ? {\n promptTokens: response.usage.prompt_tokens,\n completionTokens: response.usage.completion_tokens,\n totalTokens: response.usage.total_tokens,\n } : undefined;\n \n // Extract tool calls if any\n const toolCalls: ToolCall[] | undefined = message.tool_calls?.map(tc => {\n // Handle both standard and custom tool call formats\n const fn = 'function' in tc ? tc.function : null;\n if (!fn) {\n return { id: tc.id, name: 'unknown', arguments: {} };\n }\n return {\n id: tc.id,\n name: fn.name,\n arguments: JSON.parse(fn.arguments),\n };\n });\n \n if (toolCalls && toolCalls.length > 0) {\n logger.debug('Model requested %d tool calls: %s', toolCalls.length, toolCalls.map(t => t.name).join(', '));\n }\n \n return {\n content: message.content || '',\n model: config.model,\n duration,\n usage,\n toolCalls,\n finishReason: choice.finish_reason,\n };\n } catch (error) {\n logger.error('Reasoning request failed', { error });\n throw error;\n }\n };\n \n const completeWithTools = async (request: ToolCallRequest): Promise<ToolCallResponse> => {\n logger.debug('Tool call request starting', { model: config.model, messageCount: request.messages.length });\n \n try {\n // Convert messages to OpenAI format\n const messages: Array<OpenAI.Chat.ChatCompletionMessageParam> = request.messages.map(msg => {\n if (msg.role === 'tool') {\n return {\n role: 'tool' as const,\n content: msg.content,\n tool_call_id: msg.tool_call_id || '',\n };\n }\n if (msg.role === 'assistant' && msg.tool_calls) {\n return {\n role: 'assistant' as const,\n content: msg.content || null,\n tool_calls: msg.tool_calls.map(tc => ({\n id: tc.id,\n type: 'function' as const,\n function: tc.function,\n })),\n };\n }\n return {\n role: msg.role as 'system' | 'user' | 'assistant',\n content: msg.content,\n };\n });\n \n // Build request options\n const requestOptions: Record<string, unknown> = {\n model: config.model,\n messages,\n tools: request.tools,\n tool_choice: request.tools && request.tools.length > 0 ? 'auto' : undefined,\n };\n \n // Add reasoning_effort for models that support it\n if (supportsReasoningLevel(config.model)) {\n requestOptions.reasoning_effort = config.reasoningLevel || 'medium';\n }\n \n const response = await getClient().chat.completions.create(\n requestOptions as unknown as OpenAI.Chat.ChatCompletionCreateParamsNonStreaming\n );\n \n const choice = response.choices[0];\n const message = choice.message;\n \n // Extract tool calls if any\n const toolCalls = message.tool_calls?.map(tc => {\n // Handle both standard and custom tool call formats\n const fn = 'function' in tc ? tc.function : null;\n if (!fn) {\n return { id: tc.id, function: { name: 'unknown', arguments: '{}' } };\n }\n return {\n id: tc.id,\n function: {\n name: fn.name,\n arguments: fn.arguments,\n },\n };\n });\n \n if (toolCalls && toolCalls.length > 0) {\n logger.debug('Model requested %d tool calls: %s', toolCalls.length, toolCalls.map(t => t.function.name).join(', '));\n }\n \n return {\n content: message.content || '',\n tool_calls: toolCalls,\n finish_reason: choice.finish_reason,\n };\n } catch (error) {\n logger.error('Tool call request failed', { error });\n throw error;\n }\n };\n \n return {\n complete,\n completeWithTools,\n isReasoningModel,\n getModelFamily,\n };\n};\n"],"names":["create","config","logger","Logging","client","getClient","OpenAI","apiKey","getModelFamily","model","startsWith","isReasoningModel","reasoningModels","some","rm","includes","supportsReasoningLevel","models","m","complete","request","startTime","Date","now","debug","message","messages","systemPrompt","push","role","content","prompt","tools","map","tool","type","function","name","description","parameters","requestOptions","length","undefined","tool_choice","reasoningLevel","reasoning_effort","response","chat","completions","duration","choice","choices","usage","promptTokens","prompt_tokens","completionTokens","completion_tokens","totalTokens","total_tokens","toolCalls","tool_calls","tc","fn","id","arguments","JSON","parse","t","join","finishReason","finish_reason","error","completeWithTools","messageCount","msg","tool_call_id"],"mappings":"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"}
|
package/dist/reasoning/index.js
CHANGED
|
@@ -5,6 +5,7 @@ const create = (config)=>{
|
|
|
5
5
|
const client = create$1(config);
|
|
6
6
|
return {
|
|
7
7
|
complete: (request)=>client.complete(request),
|
|
8
|
+
completeWithTools: (request)=>client.completeWithTools(request),
|
|
8
9
|
executeWithStrategy: async (request, strategyType)=>{
|
|
9
10
|
var _ref, _response_duration, _ref1;
|
|
10
11
|
var _response_toolCalls, _response_usage;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/reasoning/index.ts"],"sourcesContent":["/**\n * Reasoning System\n * \n * Main entry point for the reasoning system. Provides a factory function\n * to create reasoning instances that can execute LLM calls with various\n * strategies using riotprompt.\n */\n\nimport { ReasoningConfig, ReasoningRequest, ReasoningResponse, ReasoningMetrics } from './types';\nimport * as Client from './client';\nimport * as Strategy from './strategy';\n\nexport interface ReasoningInstance {\n // Single completion\n complete(request: ReasoningRequest): Promise<ReasoningResponse>;\n \n // Strategy-based execution\n executeWithStrategy(\n request: ReasoningRequest,\n strategyType: Strategy.TranscriptionStrategy\n ): Promise<ReasoningResponse & { metrics: ReasoningMetrics }>;\n \n // Model information\n isReasoningModel(model: string): boolean;\n getModelFamily(model: string): 'openai' | 'anthropic' | 'gemini' | 'unknown';\n \n // Strategy helpers\n getRecommendedStrategy(\n transcriptLength: number,\n hasUnknownNames: boolean,\n complexity: 'low' | 'medium' | 'high'\n ): Strategy.TranscriptionStrategy;\n}\n\nexport const create = (config: ReasoningConfig): ReasoningInstance => {\n const client = Client.create(config);\n \n return {\n complete: (request) => client.complete(request),\n \n executeWithStrategy: async (request, strategyType) => {\n // Create the strategy (for future use with full agentic execution)\n Strategy.createStrategy({\n type: strategyType,\n maxIterations: request.maxIterations,\n });\n \n // For now, simple execution\n // Full strategy execution will be implemented in Step 05 (Agentic)\n const response = await client.complete(request);\n \n return {\n ...response,\n metrics: {\n iterations: 1,\n toolCallsExecuted: response.toolCalls?.length ?? 0,\n totalDuration: response.duration ?? 0,\n tokensUsed: response.usage?.totalTokens ?? 0,\n },\n };\n },\n \n isReasoningModel: client.isReasoningModel,\n getModelFamily: client.getModelFamily,\n getRecommendedStrategy: Strategy.getRecommendedStrategy,\n };\n};\n\n// Re-export types\nexport * from './types';\nexport type { TranscriptionStrategy, StrategyConfig } from './strategy';\n\n"],"names":["create","config","client","Client","complete","request","executeWithStrategy","strategyType","response","Strategy","type","maxIterations","metrics","iterations","toolCallsExecuted","toolCalls","length","totalDuration","duration","tokensUsed","usage","totalTokens","isReasoningModel","getModelFamily","getRecommendedStrategy"],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/reasoning/index.ts"],"sourcesContent":["/**\n * Reasoning System\n * \n * Main entry point for the reasoning system. Provides a factory function\n * to create reasoning instances that can execute LLM calls with various\n * strategies using riotprompt.\n */\n\nimport { ReasoningConfig, ReasoningRequest, ReasoningResponse, ReasoningMetrics } from './types';\nimport * as Client from './client';\nimport * as Strategy from './strategy';\n\nexport interface ReasoningInstance {\n // Single completion\n complete(request: ReasoningRequest): Promise<ReasoningResponse>;\n \n // Multi-turn tool calling\n completeWithTools(request: Client.ToolCallRequest): Promise<Client.ToolCallResponse>;\n \n // Strategy-based execution\n executeWithStrategy(\n request: ReasoningRequest,\n strategyType: Strategy.TranscriptionStrategy\n ): Promise<ReasoningResponse & { metrics: ReasoningMetrics }>;\n \n // Model information\n isReasoningModel(model: string): boolean;\n getModelFamily(model: string): 'openai' | 'anthropic' | 'gemini' | 'unknown';\n \n // Strategy helpers\n getRecommendedStrategy(\n transcriptLength: number,\n hasUnknownNames: boolean,\n complexity: 'low' | 'medium' | 'high'\n ): Strategy.TranscriptionStrategy;\n}\n\nexport const create = (config: ReasoningConfig): ReasoningInstance => {\n const client = Client.create(config);\n \n return {\n complete: (request) => client.complete(request),\n completeWithTools: (request) => client.completeWithTools(request),\n \n executeWithStrategy: async (request, strategyType) => {\n // Create the strategy (for future use with full agentic execution)\n Strategy.createStrategy({\n type: strategyType,\n maxIterations: request.maxIterations,\n });\n \n // For now, simple execution\n // Full strategy execution will be implemented in Step 05 (Agentic)\n const response = await client.complete(request);\n \n return {\n ...response,\n metrics: {\n iterations: 1,\n toolCallsExecuted: response.toolCalls?.length ?? 0,\n totalDuration: response.duration ?? 0,\n tokensUsed: response.usage?.totalTokens ?? 0,\n },\n };\n },\n \n isReasoningModel: client.isReasoningModel,\n getModelFamily: client.getModelFamily,\n getRecommendedStrategy: Strategy.getRecommendedStrategy,\n };\n};\n\n// Re-export types\nexport * from './types';\nexport type { TranscriptionStrategy, StrategyConfig } from './strategy';\n\n"],"names":["create","config","client","Client","complete","request","completeWithTools","executeWithStrategy","strategyType","response","Strategy","type","maxIterations","metrics","iterations","toolCallsExecuted","toolCalls","length","totalDuration","duration","tokensUsed","usage","totalTokens","isReasoningModel","getModelFamily","getRecommendedStrategy"],"mappings":";;;AAqCO,MAAMA,SAAS,CAACC,MAAAA,GAAAA;IACnB,MAAMC,MAAAA,GAASC,QAAa,CAACF,MAAAA,CAAAA;IAE7B,OAAO;AACHG,QAAAA,QAAAA,EAAU,CAACC,OAAAA,GAAYH,MAAAA,CAAOE,QAAQ,CAACC,OAAAA,CAAAA;AACvCC,QAAAA,iBAAAA,EAAmB,CAACD,OAAAA,GAAYH,MAAAA,CAAOI,iBAAiB,CAACD,OAAAA,CAAAA;AAEzDE,QAAAA,mBAAAA,EAAqB,OAAOF,OAAAA,EAASG,YAAAA,GAAAA;AAgBVC,YAAAA,IAAAA,IAAAA,EAAAA,kBAAAA,EAAAA,KAAAA;gBADIA,mBAAAA,EAEPA,eAAAA;;AAfpBC,YAAAA,cAAuB,CAAC;gBACpBC,IAAAA,EAAMH,YAAAA;AACNI,gBAAAA,aAAAA,EAAeP,QAAQO;AAC3B,aAAA,CAAA;;;AAIA,YAAA,MAAMH,QAAAA,GAAW,MAAMP,MAAAA,CAAOE,QAAQ,CAACC,OAAAA,CAAAA;YAEvC,OAAO;AACH,gBAAA,GAAGI,QAAQ;gBACXI,OAAAA,EAAS;oBACLC,UAAAA,EAAY,CAAA;oBACZC,iBAAiB,EAAA,CAAA,IAAA,GAAA,CAAEN,sBAAAA,QAAAA,CAASO,SAAS,cAAlBP,mBAAAA,KAAAA,MAAAA,GAAAA,MAAAA,GAAAA,mBAAAA,CAAoBQ,MAAM,MAAA,IAAA,IAAA,IAAA,KAAA,MAAA,GAAA,IAAA,GAAI,CAAA;AACjDC,oBAAAA,aAAa,GAAET,kBAAAA,GAAAA,QAAAA,CAASU,QAAQ,MAAA,IAAA,IAAjBV,gCAAAA,kBAAAA,GAAqB,CAAA;oBACpCW,UAAU,EAAA,CAAA,KAAA,GAAA,CAAEX,kBAAAA,QAAAA,CAASY,KAAK,cAAdZ,eAAAA,KAAAA,MAAAA,GAAAA,MAAAA,GAAAA,eAAAA,CAAgBa,WAAW,MAAA,IAAA,IAAA,KAAA,KAAA,MAAA,GAAA,KAAA,GAAI;AAC/C;AACJ,aAAA;AACJ,QAAA,CAAA;AAEAC,QAAAA,gBAAAA,EAAkBrB,OAAOqB,gBAAgB;AACzCC,QAAAA,cAAAA,EAAgBtB,OAAOsB,cAAc;AACrCC,QAAAA,sBAAAA,EAAwBf;AAC5B,KAAA;AACJ;;;;"}
|
package/dist/routing/router.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.js","sources":["../../src/routing/router.ts"],"sourcesContent":["/**\n * Router\n * \n * Handles routing decisions and path building using Dreadcabinet patterns.\n * Takes classification results and builds output paths with appropriate\n * directory structure and filenames.\n * \n * Design Note: This module is designed to be self-contained and may be\n * extracted for use in other tools (kronologi, observasjon) in the future.\n */\n\nimport * as path from 'path';\nimport * as os from 'os';\nimport { \n RoutingContext, \n RouteDecision,\n RoutingConfig,\n FilesystemStructure\n} from './types';\nimport * as Classifier from './classifier';\n\nexport interface RouterInstance {\n route(context: RoutingContext): RouteDecision;\n buildOutputPath(decision: RouteDecision, context: RoutingContext): string;\n}\n\nexport const create = (\n config: RoutingConfig,\n classifier: Classifier.ClassifierInstance\n): RouterInstance => {\n \n const route = (context: RoutingContext): RouteDecision => {\n const results = classifier.classify(context, config.projects);\n \n if (results.length === 0) {\n return {\n projectId: null,\n destination: config.default,\n confidence: 1.0,\n signals: [],\n reasoning: 'No project matches found, using default routing',\n };\n }\n \n const bestMatch = results[0];\n const matchedProject = config.projects.find(p => p.projectId === bestMatch.projectId)!;\n \n // Handle conflict resolution if multiple high-confidence matches\n const highConfidenceMatches = results.filter(r => r.confidence > 0.5);\n \n if (highConfidenceMatches.length > 1 && config.conflict_resolution !== 'primary') {\n // Return best with alternates noted\n return {\n projectId: bestMatch.projectId,\n destination: matchedProject.destination,\n confidence: bestMatch.confidence,\n signals: bestMatch.signals,\n reasoning: bestMatch.reasoning,\n auto_tags: matchedProject.auto_tags,\n alternateMatches: highConfidenceMatches.slice(1),\n };\n }\n \n return {\n projectId: bestMatch.projectId,\n destination: matchedProject.destination,\n confidence: bestMatch.confidence,\n signals: bestMatch.signals,\n reasoning: bestMatch.reasoning,\n auto_tags: matchedProject.auto_tags,\n };\n };\n \n const buildOutputPath = (decision: RouteDecision, context: RoutingContext): string => {\n const { destination } = decision;\n \n // Expand ~ to home directory\n const basePath = expandPath(destination.path);\n \n // Build directory structure using Dreadcabinet patterns\n const directoryPath = buildDirectoryPath(basePath, destination.structure, context.audioDate);\n \n // Build filename using Dreadcabinet patterns\n // Pass structure so filename doesn't repeat info already in path\n const filename = buildFilename(destination.filename_options, context, destination.structure);\n \n return path.join(directoryPath, filename + '.md');\n };\n \n return { route, buildOutputPath };\n};\n\n// Dreadcabinet-style directory building\nfunction buildDirectoryPath(\n basePath: string, \n structure: FilesystemStructure, \n date: Date\n): string {\n const year = date.getFullYear().toString();\n const month = (date.getMonth() + 1).toString();\n const day = date.getDate().toString();\n \n switch (structure) {\n case 'none':\n return basePath;\n case 'year':\n return path.join(basePath, year);\n case 'month':\n return path.join(basePath, year, month);\n case 'day':\n return path.join(basePath, year, month, day);\n }\n}\n\n// Dreadcabinet-style filename building\n// The date portion is adjusted based on what's already in the directory path\nfunction buildFilename(\n options: Array<'date' | 'time' | 'subject'>,\n context: RoutingContext,\n structure: FilesystemStructure\n): string {\n const parts: string[] = [];\n const date = context.audioDate;\n const pad = (n: number) => n.toString().padStart(2, '0');\n \n for (const option of options) {\n switch (option) {\n case 'date': {\n // Adjust date format based on directory structure\n // Don't repeat info already in the path\n const day = pad(date.getDate());\n const month = pad(date.getMonth() + 1);\n const year = date.getFullYear().toString().slice(2);\n \n switch (structure) {\n case 'day':\n // Path has year/month/day - no date needed in filename\n break;\n case 'month':\n // Path has year/month - only day in filename\n parts.push(day);\n break;\n case 'year':\n // Path has year - month+day in filename\n parts.push(`${month}-${day}`);\n break;\n case 'none':\n // No date in path - full date in filename (YYMMDD)\n parts.push(`${year}${month}${day}`);\n break;\n }\n break;\n }\n case 'time': {\n const hours = pad(date.getHours());\n const minutes = pad(date.getMinutes());\n parts.push(`${hours}${minutes}`);\n break;\n }\n case 'subject': {\n const subject = extractSubject(context.transcriptText, context.sourceFile);\n if (subject) {\n parts.push(subject);\n }\n break;\n }\n }\n }\n \n // Join and clean up any double dashes\n return parts.join('-').replace(/--+/g, '-');\n}\n\nfunction extractSubject(text: string, sourceFile: string): string {\n // Try to extract from first sentence\n const firstSentence = text.split(/[.!?]/)[0]?.trim() ?? '';\n \n // Remove common prefixes\n const cleaned = firstSentence\n .replace(/^(this is a note about|note about|regarding|re:|meeting notes?:?)/i, '')\n .trim();\n \n if (cleaned.length > 3 && cleaned.length < 50) {\n return slugify(cleaned);\n }\n \n // Fall back to source filename\n return path.basename(sourceFile, path.extname(sourceFile))\n .replace(/[^a-zA-Z0-9-]/g, '-')\n .toLowerCase();\n}\n\nfunction slugify(text: string): string {\n return text\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-') // Replace non-alphanumeric with dash\n .replace(/--+/g, '-') // Collapse multiple dashes\n .replace(/^-|-$/g, '') // Remove leading/trailing dashes\n .slice(0, 40);\n}\n\nfunction expandPath(p: string): string {\n if (p.startsWith('~')) {\n return path.join(os.homedir(), p.slice(1));\n }\n return p;\n}\n\n"],"names":["create","config","classifier","route","context","results","classify","projects","length","projectId","destination","default","confidence","signals","reasoning","bestMatch","matchedProject","find","p","highConfidenceMatches","filter","r","conflict_resolution","auto_tags","alternateMatches","slice","buildOutputPath","decision","basePath","expandPath","path","directoryPath","buildDirectoryPath","structure","audioDate","filename","buildFilename","filename_options","join","date","year","getFullYear","toString","month","getMonth","day","getDate","options","parts","pad","n","padStart","option","push","hours","getHours","minutes","getMinutes","subject","extractSubject","transcriptText","sourceFile","replace","text","firstSentence","split","trim","cleaned","slugify","basename","extname","toLowerCase","startsWith","os","homedir"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"router.js","sources":["../../src/routing/router.ts"],"sourcesContent":["/**\n * Router\n * \n * Handles routing decisions and path building using Dreadcabinet patterns.\n * Takes classification results and builds output paths with appropriate\n * directory structure and filenames.\n * \n * Design Note: This module is designed to be self-contained and may be\n * extracted for use in other tools (kronologi, observasjon) in the future.\n */\n\nimport * as path from 'node:path';\nimport * as os from 'node:os';\nimport { \n RoutingContext, \n RouteDecision,\n RoutingConfig,\n FilesystemStructure\n} from './types';\nimport * as Classifier from './classifier';\n\nexport interface RouterInstance {\n route(context: RoutingContext): RouteDecision;\n buildOutputPath(decision: RouteDecision, context: RoutingContext): string;\n}\n\nexport const create = (\n config: RoutingConfig,\n classifier: Classifier.ClassifierInstance\n): RouterInstance => {\n \n const route = (context: RoutingContext): RouteDecision => {\n const results = classifier.classify(context, config.projects);\n \n if (results.length === 0) {\n return {\n projectId: null,\n destination: config.default,\n confidence: 1.0,\n signals: [],\n reasoning: 'No project matches found, using default routing',\n };\n }\n \n const bestMatch = results[0];\n const matchedProject = config.projects.find(p => p.projectId === bestMatch.projectId)!;\n \n // Handle conflict resolution if multiple high-confidence matches\n const highConfidenceMatches = results.filter(r => r.confidence > 0.5);\n \n if (highConfidenceMatches.length > 1 && config.conflict_resolution !== 'primary') {\n // Return best with alternates noted\n return {\n projectId: bestMatch.projectId,\n destination: matchedProject.destination,\n confidence: bestMatch.confidence,\n signals: bestMatch.signals,\n reasoning: bestMatch.reasoning,\n auto_tags: matchedProject.auto_tags,\n alternateMatches: highConfidenceMatches.slice(1),\n };\n }\n \n return {\n projectId: bestMatch.projectId,\n destination: matchedProject.destination,\n confidence: bestMatch.confidence,\n signals: bestMatch.signals,\n reasoning: bestMatch.reasoning,\n auto_tags: matchedProject.auto_tags,\n };\n };\n \n const buildOutputPath = (decision: RouteDecision, context: RoutingContext): string => {\n const { destination } = decision;\n \n // Expand ~ to home directory\n const basePath = expandPath(destination.path);\n \n // Build directory structure using Dreadcabinet patterns\n const directoryPath = buildDirectoryPath(basePath, destination.structure, context.audioDate);\n \n // Build filename using Dreadcabinet patterns\n // Pass structure so filename doesn't repeat info already in path\n const filename = buildFilename(destination.filename_options, context, destination.structure);\n \n return path.join(directoryPath, filename + '.md');\n };\n \n return { route, buildOutputPath };\n};\n\n// Dreadcabinet-style directory building\nfunction buildDirectoryPath(\n basePath: string, \n structure: FilesystemStructure, \n date: Date\n): string {\n const year = date.getFullYear().toString();\n const month = (date.getMonth() + 1).toString();\n const day = date.getDate().toString();\n \n switch (structure) {\n case 'none':\n return basePath;\n case 'year':\n return path.join(basePath, year);\n case 'month':\n return path.join(basePath, year, month);\n case 'day':\n return path.join(basePath, year, month, day);\n }\n}\n\n// Dreadcabinet-style filename building\n// The date portion is adjusted based on what's already in the directory path\nfunction buildFilename(\n options: Array<'date' | 'time' | 'subject'>,\n context: RoutingContext,\n structure: FilesystemStructure\n): string {\n const parts: string[] = [];\n const date = context.audioDate;\n const pad = (n: number) => n.toString().padStart(2, '0');\n \n for (const option of options) {\n switch (option) {\n case 'date': {\n // Adjust date format based on directory structure\n // Don't repeat info already in the path\n const day = pad(date.getDate());\n const month = pad(date.getMonth() + 1);\n const year = date.getFullYear().toString().slice(2);\n \n switch (structure) {\n case 'day':\n // Path has year/month/day - no date needed in filename\n break;\n case 'month':\n // Path has year/month - only day in filename\n parts.push(day);\n break;\n case 'year':\n // Path has year - month+day in filename\n parts.push(`${month}-${day}`);\n break;\n case 'none':\n // No date in path - full date in filename (YYMMDD)\n parts.push(`${year}${month}${day}`);\n break;\n }\n break;\n }\n case 'time': {\n const hours = pad(date.getHours());\n const minutes = pad(date.getMinutes());\n parts.push(`${hours}${minutes}`);\n break;\n }\n case 'subject': {\n const subject = extractSubject(context.transcriptText, context.sourceFile);\n if (subject) {\n parts.push(subject);\n }\n break;\n }\n }\n }\n \n // Join and clean up any double dashes\n return parts.join('-').replace(/--+/g, '-');\n}\n\nfunction extractSubject(text: string, sourceFile: string): string {\n // Try to extract from first sentence\n const firstSentence = text.split(/[.!?]/)[0]?.trim() ?? '';\n \n // Remove common prefixes\n const cleaned = firstSentence\n .replace(/^(this is a note about|note about|regarding|re:|meeting notes?:?)/i, '')\n .trim();\n \n if (cleaned.length > 3 && cleaned.length < 50) {\n return slugify(cleaned);\n }\n \n // Fall back to source filename\n return path.basename(sourceFile, path.extname(sourceFile))\n .replace(/[^a-zA-Z0-9-]/g, '-')\n .toLowerCase();\n}\n\nfunction slugify(text: string): string {\n return text\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-') // Replace non-alphanumeric with dash\n .replace(/--+/g, '-') // Collapse multiple dashes\n .replace(/^-|-$/g, '') // Remove leading/trailing dashes\n .slice(0, 40);\n}\n\nfunction expandPath(p: string): string {\n if (p.startsWith('~')) {\n return path.join(os.homedir(), p.slice(1));\n }\n return p;\n}\n\n"],"names":["create","config","classifier","route","context","results","classify","projects","length","projectId","destination","default","confidence","signals","reasoning","bestMatch","matchedProject","find","p","highConfidenceMatches","filter","r","conflict_resolution","auto_tags","alternateMatches","slice","buildOutputPath","decision","basePath","expandPath","path","directoryPath","buildDirectoryPath","structure","audioDate","filename","buildFilename","filename_options","join","date","year","getFullYear","toString","month","getMonth","day","getDate","options","parts","pad","n","padStart","option","push","hours","getHours","minutes","getMinutes","subject","extractSubject","transcriptText","sourceFile","replace","text","firstSentence","split","trim","cleaned","slugify","basename","extname","toLowerCase","startsWith","os","homedir"],"mappings":"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"}
|
package/dist/util/media.js
CHANGED
package/dist/util/media.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"media.js","sources":["../../src/util/media.ts"],"sourcesContent":["import ffmpeg from 'fluent-ffmpeg';\nimport { Logger } from 'winston';\nimport path from 'path';\nimport * as Storage from '@/util/storage';\n\nexport interface Media {\n getAudioCreationTime: (filePath: string) => Promise<Date | null>;\n getFileSize: (filePath: string) => Promise<number>;\n splitAudioFile: (filePath: string, outputDir: string, maxSizeBytes: number) => Promise<string[]>;\n}\n\nconst ffprobeAsync = (filePath: string): Promise<any> => {\n return new Promise((resolve, reject) => {\n ffmpeg.ffprobe(filePath, (err, metadata) => {\n if (err) return reject(err);\n resolve(metadata);\n });\n });\n};\n\n\nexport const create = (logger: Logger): Media => {\n const storage = Storage.create({ log: logger.debug });\n\n // Extract creation time from audio file using ffmpeg\n const getAudioCreationTime = async (filePath: string): Promise<Date | null> => {\n try {\n const metadata = await ffprobeAsync(filePath);\n\n // Look for creation_time in format tags\n const formatTags = metadata?.format?.tags;\n if (formatTags?.creation_time) {\n logger.debug('Found creation_time in format tags: %s', formatTags.creation_time);\n return new Date(formatTags.creation_time);\n }\n\n // Check for creation_time in stream tags as fallback\n if (metadata?.streams?.length > 0) {\n for (const stream of metadata.streams) {\n if (stream.tags?.creation_time) {\n logger.debug('Found creation_time in stream tags: %s', stream.tags.creation_time);\n return new Date(stream.tags.creation_time);\n }\n }\n }\n\n logger.debug('No creation_time found in audio file metadata');\n return null;\n } catch (error) {\n logger.error('Error extracting creation time from audio file: %s', error);\n return null;\n }\n };\n\n // Get file size in bytes\n const getFileSize = async (filePath: string): Promise<number> => {\n try {\n return await storage.getFileSize(filePath);\n } catch (error) {\n logger.error('Error getting file size: %s', error);\n throw new Error(`Failed to get file size for ${filePath}: ${error}`);\n }\n };\n\n // Split large audio file into smaller chunks\n const splitAudioFile = async (filePath: string, outputDir: string, maxSizeBytes: number): Promise<string[]> => {\n try {\n const metadata = await ffprobeAsync(filePath);\n const duration = parseFloat(metadata.format.duration);\n\n // Calculate how many segments we need based on file size and max size\n const fileSize = await getFileSize(filePath);\n const segmentCount = Math.ceil(fileSize / maxSizeBytes);\n\n // Calculate segment duration\n const segmentDuration = duration / segmentCount;\n logger.debug(`Splitting ${filePath} (${fileSize} bytes) into ${segmentCount} segments of ~${segmentDuration} seconds each`);\n\n // Create output directory if it doesn't exist\n await storage.createDirectory(outputDir);\n\n const outputFiles: string[] = [];\n const fileExt = path.extname(filePath);\n const fileName = path.basename(filePath, fileExt);\n\n // Create a promise for each segment\n const promises = [];\n\n for (let i = 0; i < segmentCount; i++) {\n const startTime = i * segmentDuration;\n const outputPath = path.join(outputDir, `${fileName}_part${i + 1}${fileExt}`);\n outputFiles.push(outputPath);\n\n const promise = new Promise<void>((resolve, reject) => {\n ffmpeg(filePath)\n .setStartTime(startTime)\n .setDuration(segmentDuration)\n .output(outputPath)\n .on('end', () => {\n logger.debug(`Created segment ${i + 1}/${segmentCount}: ${outputPath}`);\n resolve();\n })\n .on('error', (err) => {\n logger.error(`Error creating segment ${i + 1}/${segmentCount}: ${err}`);\n reject(err);\n })\n .run();\n });\n\n promises.push(promise);\n }\n\n // Wait for all segments to be created\n await Promise.all(promises);\n return outputFiles;\n } catch (error) {\n logger.error('Error splitting audio file: %s', error);\n throw new Error(`Failed to split audio file ${filePath}: ${error}`);\n }\n };\n\n return {\n getAudioCreationTime,\n getFileSize,\n splitAudioFile,\n }\n}\n"],"names":["ffprobeAsync","filePath","Promise","resolve","reject","ffmpeg","ffprobe","err","metadata","create","logger","storage","Storage","log","debug","getAudioCreationTime","formatTags","format","tags","creation_time","Date","streams","length","stream","error","getFileSize","Error","splitAudioFile","outputDir","maxSizeBytes","duration","parseFloat","fileSize","segmentCount","Math","ceil","segmentDuration","createDirectory","outputFiles","fileExt","path","extname","fileName","basename","promises","i","startTime","outputPath","join","push","promise","setStartTime","setDuration","output","on","run","all"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"media.js","sources":["../../src/util/media.ts"],"sourcesContent":["import ffmpeg from 'fluent-ffmpeg';\nimport { Logger } from 'winston';\nimport path from 'node:path';\nimport * as Storage from '@/util/storage';\n\nexport interface Media {\n getAudioCreationTime: (filePath: string) => Promise<Date | null>;\n getFileSize: (filePath: string) => Promise<number>;\n splitAudioFile: (filePath: string, outputDir: string, maxSizeBytes: number) => Promise<string[]>;\n}\n\nconst ffprobeAsync = (filePath: string): Promise<any> => {\n return new Promise((resolve, reject) => {\n ffmpeg.ffprobe(filePath, (err, metadata) => {\n if (err) return reject(err);\n resolve(metadata);\n });\n });\n};\n\n\nexport const create = (logger: Logger): Media => {\n const storage = Storage.create({ log: logger.debug });\n\n // Extract creation time from audio file using ffmpeg\n const getAudioCreationTime = async (filePath: string): Promise<Date | null> => {\n try {\n const metadata = await ffprobeAsync(filePath);\n\n // Look for creation_time in format tags\n const formatTags = metadata?.format?.tags;\n if (formatTags?.creation_time) {\n logger.debug('Found creation_time in format tags: %s', formatTags.creation_time);\n return new Date(formatTags.creation_time);\n }\n\n // Check for creation_time in stream tags as fallback\n if (metadata?.streams?.length > 0) {\n for (const stream of metadata.streams) {\n if (stream.tags?.creation_time) {\n logger.debug('Found creation_time in stream tags: %s', stream.tags.creation_time);\n return new Date(stream.tags.creation_time);\n }\n }\n }\n\n logger.debug('No creation_time found in audio file metadata');\n return null;\n } catch (error) {\n logger.error('Error extracting creation time from audio file: %s', error);\n return null;\n }\n };\n\n // Get file size in bytes\n const getFileSize = async (filePath: string): Promise<number> => {\n try {\n return await storage.getFileSize(filePath);\n } catch (error) {\n logger.error('Error getting file size: %s', error);\n throw new Error(`Failed to get file size for ${filePath}: ${error}`);\n }\n };\n\n // Split large audio file into smaller chunks\n const splitAudioFile = async (filePath: string, outputDir: string, maxSizeBytes: number): Promise<string[]> => {\n try {\n const metadata = await ffprobeAsync(filePath);\n const duration = parseFloat(metadata.format.duration);\n\n // Calculate how many segments we need based on file size and max size\n const fileSize = await getFileSize(filePath);\n const segmentCount = Math.ceil(fileSize / maxSizeBytes);\n\n // Calculate segment duration\n const segmentDuration = duration / segmentCount;\n logger.debug(`Splitting ${filePath} (${fileSize} bytes) into ${segmentCount} segments of ~${segmentDuration} seconds each`);\n\n // Create output directory if it doesn't exist\n await storage.createDirectory(outputDir);\n\n const outputFiles: string[] = [];\n const fileExt = path.extname(filePath);\n const fileName = path.basename(filePath, fileExt);\n\n // Create a promise for each segment\n const promises = [];\n\n for (let i = 0; i < segmentCount; i++) {\n const startTime = i * segmentDuration;\n const outputPath = path.join(outputDir, `${fileName}_part${i + 1}${fileExt}`);\n outputFiles.push(outputPath);\n\n const promise = new Promise<void>((resolve, reject) => {\n ffmpeg(filePath)\n .setStartTime(startTime)\n .setDuration(segmentDuration)\n .output(outputPath)\n .on('end', () => {\n logger.debug(`Created segment ${i + 1}/${segmentCount}: ${outputPath}`);\n resolve();\n })\n .on('error', (err) => {\n logger.error(`Error creating segment ${i + 1}/${segmentCount}: ${err}`);\n reject(err);\n })\n .run();\n });\n\n promises.push(promise);\n }\n\n // Wait for all segments to be created\n await Promise.all(promises);\n return outputFiles;\n } catch (error) {\n logger.error('Error splitting audio file: %s', error);\n throw new Error(`Failed to split audio file ${filePath}: ${error}`);\n }\n };\n\n return {\n getAudioCreationTime,\n getFileSize,\n splitAudioFile,\n }\n}\n"],"names":["ffprobeAsync","filePath","Promise","resolve","reject","ffmpeg","ffprobe","err","metadata","create","logger","storage","Storage","log","debug","getAudioCreationTime","formatTags","format","tags","creation_time","Date","streams","length","stream","error","getFileSize","Error","splitAudioFile","outputDir","maxSizeBytes","duration","parseFloat","fileSize","segmentCount","Math","ceil","segmentDuration","createDirectory","outputFiles","fileExt","path","extname","fileName","basename","promises","i","startTime","outputPath","join","push","promise","setStartTime","setDuration","output","on","run","all"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metadata.js","sources":["../../src/util/metadata.ts"],"sourcesContent":["import * as Routing from '@/routing';\n\nexport interface TranscriptMetadata {\n title?: string;\n project?: string;\n projectId?: string;\n routing?: RoutingMetadata;\n tags?: string[];\n date?: Date;\n recordingTime?: string;\n confidence?: number;\n duration?: string;\n}\n\nexport interface RoutingMetadata {\n destination: string;\n confidence: number;\n signals: Routing.ClassificationSignal[];\n reasoning: string;\n}\n\n/**\n * Format metadata as Markdown heading section\n */\nexport const formatMetadataMarkdown = (metadata: TranscriptMetadata): string => {\n const lines: string[] = [];\n \n // Title section\n if (metadata.title) {\n lines.push(`# ${metadata.title}`);\n lines.push('');\n }\n \n // Metadata frontmatter as readable markdown\n lines.push('## Metadata');\n lines.push('');\n \n // Date and Time\n if (metadata.date) {\n const dateStr = metadata.date.toLocaleDateString('en-US', {\n year: 'numeric',\n month: 'long',\n day: 'numeric'\n });\n lines.push(`**Date**: ${dateStr}`);\n \n if (metadata.recordingTime) {\n lines.push(`**Time**: ${metadata.recordingTime}`);\n } else {\n const timeStr = metadata.date.toLocaleTimeString('en-US', {\n hour: '2-digit',\n minute: '2-digit',\n hour12: true\n });\n lines.push(`**Time**: ${timeStr}`);\n }\n }\n \n lines.push('');\n \n // Project\n if (metadata.project) {\n lines.push(`**Project**: ${metadata.project}`);\n if (metadata.projectId) {\n lines.push(`**Project ID**: \\`${metadata.projectId}\\``);\n }\n lines.push('');\n }\n \n // Routing Information\n if (metadata.routing) {\n lines.push('### Routing');\n lines.push('');\n lines.push(`**Destination**: ${metadata.routing.destination}`);\n lines.push(`**Confidence**: ${(metadata.routing.confidence * 100).toFixed(1)}%`);\n lines.push('');\n \n if (metadata.routing.signals.length > 0) {\n lines.push('**Classification Signals**:');\n for (const signal of metadata.routing.signals) {\n const signalType = signal.type.replace(/_/g, ' ');\n const weight = (signal.weight * 100).toFixed(0);\n lines.push(`- ${signalType}: \"${signal.value}\" (${weight}% weight)`);\n }\n lines.push('');\n }\n \n if (metadata.routing.reasoning) {\n lines.push(`**Reasoning**: ${metadata.routing.reasoning}`);\n lines.push('');\n }\n }\n \n // Tags\n if (metadata.tags && metadata.tags.length > 0) {\n lines.push('**Tags**: ' + metadata.tags.map(tag => `\\`${tag}\\``).join(', '));\n lines.push('');\n }\n \n // Duration\n if (metadata.duration) {\n lines.push(`**Duration**: ${metadata.duration}`);\n lines.push('');\n }\n \n // Separator\n lines.push('---');\n lines.push('');\n \n return lines.join('\\n');\n};\n\n/**\n * Extract routing metadata from a RouteDecision\n */\nexport const createRoutingMetadata = (decision: Routing.RouteDecision): RoutingMetadata => {\n return {\n destination: decision.destination.path,\n confidence: decision.confidence,\n signals: decision.signals,\n reasoning: decision.reasoning,\n };\n};\n\n/**\n * Format duration in seconds to readable format (e.g., \"2m 30s\")\n */\nexport const formatDuration = (seconds: number): string => {\n const minutes = Math.floor(seconds / 60);\n const secs = Math.round(seconds % 60);\n \n if (minutes === 0) {\n return `${secs}s`;\n }\n \n if (secs === 0) {\n return `${minutes}m`;\n }\n \n return `${minutes}m ${secs}s`;\n};\n\n/**\n * Format time as HH:MM AM/PM\n */\nexport const formatTime = (date: Date): string => {\n return date.toLocaleTimeString('en-US', {\n hour: '2-digit',\n minute: '2-digit',\n hour12: true\n });\n};\n\n/**\n * Extract topic from routing signals\n */\nexport const extractTopicFromSignals = (signals: Routing.ClassificationSignal[]): string | undefined => {\n const topicSignal = signals.find(s => s.type === 'topic' || s.type === 'context_type');\n return topicSignal?.value;\n};\n\n/**\n * Extract all tags from routing signals\n */\nexport const extractTagsFromSignals = (signals: Routing.ClassificationSignal[]): string[] => {\n return signals\n .filter(s => s.type !== 'context_type') // Skip generic context type\n .map(s => s.value)\n .filter((v): v is string => typeof v === 'string');\n};\n\n"],"names":["formatMetadataMarkdown","metadata","lines","title","push","date","dateStr","toLocaleDateString","year","month","day","recordingTime","timeStr","toLocaleTimeString","hour","minute","hour12","project","projectId","routing","destination","confidence","toFixed","signals","length","signal","signalType","type","replace","weight","value","reasoning","tags","map","tag","join","duration","createRoutingMetadata","decision","path","extractTagsFromSignals","filter","s","v"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"metadata.js","sources":["../../src/util/metadata.ts"],"sourcesContent":["import * as Routing from '@/routing';\n\nexport interface TranscriptMetadata {\n title?: string;\n project?: string;\n projectId?: string;\n routing?: RoutingMetadata;\n tags?: string[];\n date?: Date;\n recordingTime?: string;\n confidence?: number;\n duration?: string;\n}\n\nexport interface RoutingMetadata {\n destination: string;\n confidence: number;\n signals: Routing.ClassificationSignal[];\n reasoning: string;\n}\n\n/**\n * Format metadata as Markdown heading section\n */\nexport const formatMetadataMarkdown = (metadata: TranscriptMetadata): string => {\n const lines: string[] = [];\n \n // Title section\n if (metadata.title) {\n lines.push(`# ${metadata.title}`);\n lines.push('');\n }\n \n // Metadata frontmatter as readable markdown\n lines.push('## Metadata');\n lines.push('');\n \n // Date and Time\n if (metadata.date) {\n const dateStr = metadata.date.toLocaleDateString('en-US', {\n year: 'numeric',\n month: 'long',\n day: 'numeric'\n });\n lines.push(`**Date**: ${dateStr}`);\n \n if (metadata.recordingTime) {\n lines.push(`**Time**: ${metadata.recordingTime}`);\n } else {\n const timeStr = metadata.date.toLocaleTimeString('en-US', {\n hour: '2-digit',\n minute: '2-digit',\n hour12: true\n });\n lines.push(`**Time**: ${timeStr}`);\n }\n }\n \n lines.push('');\n \n // Project\n if (metadata.project) {\n lines.push(`**Project**: ${metadata.project}`);\n if (metadata.projectId) {\n lines.push(`**Project ID**: \\`${metadata.projectId}\\``);\n }\n lines.push('');\n }\n \n // Routing Information\n if (metadata.routing) {\n lines.push('### Routing');\n lines.push('');\n lines.push(`**Destination**: ${metadata.routing.destination}`);\n lines.push(`**Confidence**: ${(metadata.routing.confidence * 100).toFixed(1)}%`);\n lines.push('');\n \n if (metadata.routing.signals.length > 0) {\n lines.push('**Classification Signals**:');\n for (const signal of metadata.routing.signals) {\n const signalType = signal.type.replace(/_/g, ' ');\n const weight = (signal.weight * 100).toFixed(0);\n lines.push(`- ${signalType}: \"${signal.value}\" (${weight}% weight)`);\n }\n lines.push('');\n }\n \n if (metadata.routing.reasoning) {\n lines.push(`**Reasoning**: ${metadata.routing.reasoning}`);\n lines.push('');\n }\n }\n \n // Tags\n if (metadata.tags && metadata.tags.length > 0) {\n lines.push('**Tags**: ' + metadata.tags.map(tag => `\\`${tag}\\``).join(', '));\n lines.push('');\n }\n \n // Duration\n if (metadata.duration) {\n lines.push(`**Duration**: ${metadata.duration}`);\n lines.push('');\n }\n \n // Separator\n lines.push('---');\n lines.push('');\n \n return lines.join('\\n');\n};\n\n/**\n * Extract routing metadata from a RouteDecision\n */\nexport const createRoutingMetadata = (decision: Routing.RouteDecision): RoutingMetadata => {\n return {\n destination: decision.destination.path,\n confidence: decision.confidence,\n signals: decision.signals,\n reasoning: decision.reasoning,\n };\n};\n\n/**\n * Format duration in seconds to readable format (e.g., \"2m 30s\")\n */\nexport const formatDuration = (seconds: number): string => {\n const minutes = Math.floor(seconds / 60);\n const secs = Math.round(seconds % 60);\n \n if (minutes === 0) {\n return `${secs}s`;\n }\n \n if (secs === 0) {\n return `${minutes}m`;\n }\n \n return `${minutes}m ${secs}s`;\n};\n\n/**\n * Format time as HH:MM AM/PM\n */\nexport const formatTime = (date: Date): string => {\n return date.toLocaleTimeString('en-US', {\n hour: '2-digit',\n minute: '2-digit',\n hour12: true\n });\n};\n\n/**\n * Extract topic from routing signals\n */\nexport const extractTopicFromSignals = (signals: Routing.ClassificationSignal[]): string | undefined => {\n const topicSignal = signals.find(s => s.type === 'topic' || s.type === 'context_type');\n return topicSignal?.value;\n};\n\n/**\n * Extract all tags from routing signals\n */\nexport const extractTagsFromSignals = (signals: Routing.ClassificationSignal[]): string[] => {\n return signals\n .filter(s => s.type !== 'context_type') // Skip generic context type\n .map(s => s.value)\n .filter((v): v is string => typeof v === 'string');\n};\n\n\n"],"names":["formatMetadataMarkdown","metadata","lines","title","push","date","dateStr","toLocaleDateString","year","month","day","recordingTime","timeStr","toLocaleTimeString","hour","minute","hour12","project","projectId","routing","destination","confidence","toFixed","signals","length","signal","signalType","type","replace","weight","value","reasoning","tags","map","tag","join","duration","createRoutingMetadata","decision","path","extractTagsFromSignals","filter","s","v"],"mappings":"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"}
|