@redaksjon/protokoll 0.0.13 → 0.0.15

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 (108) hide show
  1. package/README.md +199 -0
  2. package/dist/feedback.js +5193 -0
  3. package/dist/feedback.js.map +1 -0
  4. package/dist/main.js +1858 -9
  5. package/dist/main.js.map +1 -1
  6. package/dist/mcp/server.js +1330 -0
  7. package/dist/mcp/server.js.map +1 -0
  8. package/guide/index.md +16 -0
  9. package/guide/mcp-integration.md +341 -0
  10. package/package.json +5 -3
  11. package/tsconfig.tsbuildinfo +1 -1
  12. package/vite.config.ts +13 -29
  13. package/dist/agentic/executor.js +0 -747
  14. package/dist/agentic/executor.js.map +0 -1
  15. package/dist/agentic/index.js +0 -19
  16. package/dist/agentic/index.js.map +0 -1
  17. package/dist/agentic/registry.js +0 -41
  18. package/dist/agentic/registry.js.map +0 -1
  19. package/dist/agentic/tools/lookup-person.js +0 -185
  20. package/dist/agentic/tools/lookup-person.js.map +0 -1
  21. package/dist/agentic/tools/lookup-project.js +0 -210
  22. package/dist/agentic/tools/lookup-project.js.map +0 -1
  23. package/dist/agentic/tools/route-note.js +0 -49
  24. package/dist/agentic/tools/route-note.js.map +0 -1
  25. package/dist/agentic/tools/store-context.js +0 -51
  26. package/dist/agentic/tools/store-context.js.map +0 -1
  27. package/dist/agentic/tools/verify-spelling.js +0 -57
  28. package/dist/agentic/tools/verify-spelling.js.map +0 -1
  29. package/dist/arguments.js +0 -178
  30. package/dist/arguments.js.map +0 -1
  31. package/dist/cli/action.js +0 -704
  32. package/dist/cli/action.js.map +0 -1
  33. package/dist/cli/config.js +0 -482
  34. package/dist/cli/config.js.map +0 -1
  35. package/dist/cli/context.js +0 -466
  36. package/dist/cli/context.js.map +0 -1
  37. package/dist/cli/feedback.js +0 -858
  38. package/dist/cli/feedback.js.map +0 -1
  39. package/dist/cli/index.js +0 -103
  40. package/dist/cli/index.js.map +0 -1
  41. package/dist/cli/install.js +0 -572
  42. package/dist/cli/install.js.map +0 -1
  43. package/dist/cli/transcript.js +0 -199
  44. package/dist/cli/transcript.js.map +0 -1
  45. package/dist/constants.js +0 -91
  46. package/dist/constants.js.map +0 -1
  47. package/dist/context/discovery.js +0 -114
  48. package/dist/context/discovery.js.map +0 -1
  49. package/dist/context/index.js +0 -82
  50. package/dist/context/index.js.map +0 -1
  51. package/dist/context/storage.js +0 -184
  52. package/dist/context/storage.js.map +0 -1
  53. package/dist/interactive/handler.js +0 -524
  54. package/dist/interactive/handler.js.map +0 -1
  55. package/dist/interactive/index.js +0 -18
  56. package/dist/interactive/index.js.map +0 -1
  57. package/dist/interactive/onboarding.js +0 -28
  58. package/dist/interactive/onboarding.js.map +0 -1
  59. package/dist/logging.js +0 -46
  60. package/dist/logging.js.map +0 -1
  61. package/dist/output/index.js +0 -8
  62. package/dist/output/index.js.map +0 -1
  63. package/dist/output/manager.js +0 -150
  64. package/dist/output/manager.js.map +0 -1
  65. package/dist/phases/complete.js +0 -142
  66. package/dist/phases/complete.js.map +0 -1
  67. package/dist/phases/locate.js +0 -64
  68. package/dist/phases/locate.js.map +0 -1
  69. package/dist/pipeline/index.js +0 -8
  70. package/dist/pipeline/index.js.map +0 -1
  71. package/dist/pipeline/orchestrator.js +0 -354
  72. package/dist/pipeline/orchestrator.js.map +0 -1
  73. package/dist/protokoll.js +0 -180
  74. package/dist/protokoll.js.map +0 -1
  75. package/dist/reasoning/client.js +0 -233
  76. package/dist/reasoning/client.js.map +0 -1
  77. package/dist/reasoning/index.js +0 -37
  78. package/dist/reasoning/index.js.map +0 -1
  79. package/dist/reasoning/strategy.js +0 -60
  80. package/dist/reasoning/strategy.js.map +0 -1
  81. package/dist/reflection/collector.js +0 -124
  82. package/dist/reflection/collector.js.map +0 -1
  83. package/dist/reflection/index.js +0 -16
  84. package/dist/reflection/index.js.map +0 -1
  85. package/dist/reflection/reporter.js +0 -238
  86. package/dist/reflection/reporter.js.map +0 -1
  87. package/dist/routing/classifier.js +0 -201
  88. package/dist/routing/classifier.js.map +0 -1
  89. package/dist/routing/index.js +0 -27
  90. package/dist/routing/index.js.map +0 -1
  91. package/dist/routing/router.js +0 -153
  92. package/dist/routing/router.js.map +0 -1
  93. package/dist/transcription/index.js +0 -41
  94. package/dist/transcription/index.js.map +0 -1
  95. package/dist/transcription/service.js +0 -64
  96. package/dist/transcription/service.js.map +0 -1
  97. package/dist/transcription/types.js +0 -31
  98. package/dist/transcription/types.js.map +0 -1
  99. package/dist/util/dates.js +0 -96
  100. package/dist/util/dates.js.map +0 -1
  101. package/dist/util/media.js +0 -103
  102. package/dist/util/media.js.map +0 -1
  103. package/dist/util/metadata.js +0 -95
  104. package/dist/util/metadata.js.map +0 -1
  105. package/dist/util/sound.js +0 -116
  106. package/dist/util/sound.js.map +0 -1
  107. package/dist/util/storage.js +0 -135
  108. package/dist/util/storage.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"arguments.js","sources":["../src/arguments.ts"],"sourcesContent":["import * as Dreadcabinet from \"@theunwalked/dreadcabinet\";\nimport * as Cardigantime from '@theunwalked/cardigantime';\nimport { Command } from \"commander\";\nimport {\n PROTOKOLL_DEFAULTS,\n DEFAULT_MAX_AUDIO_SIZE,\n DEFAULT_REASONING_LEVEL,\n PROGRAM_NAME,\n VERSION\n} from \"@/constants\";\nimport { Args, Config, SecureConfig } from \"@/protokoll\";\nimport { getLogger } from \"@/logging\";\nimport * as Storage from \"@/util/storage\";\n\nexport const configure = async (dreadcabinet: Dreadcabinet.DreadCabinet, cardigantime: Cardigantime.Cardigantime<any>): Promise<[Config, SecureConfig]> => {\n const logger = getLogger();\n\n let program = new Command();\n program\n .name(PROGRAM_NAME)\n .summary('Intelligent audio transcription tool with context')\n .description('Protokoll transcribes audio files intelligently using context to improve accuracy')\n .option('--dry-run', 'perform a dry run without saving files')\n .option('--verbose', 'enable verbose logging')\n .option('--debug', 'enable debug logging')\n .option('--openai-api-key <openaiApiKey>', 'OpenAI API key')\n .option('--transcription-model <transcriptionModel>', 'OpenAI transcription model to use')\n .option('--model <model>', 'OpenAI model to use for transcription enhancement')\n .option('--reasoning-level <reasoningLevel>', `reasoning effort level: low, medium, or high (default: ${DEFAULT_REASONING_LEVEL})`)\n .option('--overrides', 'allow overrides of the default configuration')\n .option('--context-directories [contextDirectories...]', 'directories containing context files to be included in prompts')\n .option('--max-audio-size <maxAudioSize>', 'maximum audio file size in bytes')\n .option('--temp-directory <tempDirectory>', 'temporary directory for processing files')\n .option('--batch', 'disable interactive prompts (for automation/cron jobs)')\n .option('--self-reflection', 'generate self-reflection reports (default: true)')\n .option('--no-self-reflection', 'disable self-reflection reports')\n .option('--silent', 'disable sound notifications in interactive mode')\n .option('--processed-directory <processedDirectory>', 'directory to move processed audio files to')\n\n await dreadcabinet.configure(program);\n program = await cardigantime.configure(program);\n program.version(VERSION);\n\n // Check if --check-config is in process.argv early\n if (process.argv.includes('--check-config')) {\n program.parse();\n const cliArgs: Args = program.opts<Args>();\n\n // Use CardiganTime's built-in checkConfig method\n await cardigantime.checkConfig(cliArgs);\n\n // Return minimal config for consistency, but main processing is done\n const config: Config = PROTOKOLL_DEFAULTS as Config;\n const secureConfig: SecureConfig = { openaiApiKey: process.env.OPENAI_API_KEY };\n return [config, secureConfig];\n }\n\n // Check if --init-config is in process.argv early\n if (process.argv.includes('--init-config')) {\n program.parse();\n const cliArgs: Args = program.opts<Args>();\n\n // Use CardiganTime's built-in generateConfig method\n await cardigantime.generateConfig(cliArgs.configDirectory || PROTOKOLL_DEFAULTS.configDirectory);\n\n // Return minimal config for consistency, but main processing is done\n const config: Config = PROTOKOLL_DEFAULTS as Config;\n const secureConfig: SecureConfig = { openaiApiKey: process.env.OPENAI_API_KEY };\n return [config, secureConfig];\n }\n\n program.parse();\n\n const cliArgs: Args = program.opts<Args>();\n logger.debug('Command Line Options: %s', JSON.stringify(cliArgs, null, 2));\n\n // Get values from config file first using CardiganTime's hierarchical configuration\n const fileValues = await cardigantime.read(cliArgs);\n\n // Read the Raw values from the Dreadcabinet Command Line Arguments\n const dreadcabinetValues = await dreadcabinet.read(cliArgs);\n\n // Extract protokoll-specific CLI args (only include if explicitly set)\n const protokollCliArgs: Partial<Config> = {};\n // --batch disables interactive mode (interactive is default)\n if (cliArgs.batch !== undefined) protokollCliArgs.interactive = !cliArgs.batch;\n if (cliArgs.selfReflection !== undefined) protokollCliArgs.selfReflection = cliArgs.selfReflection;\n if (cliArgs.debug !== undefined) protokollCliArgs.debug = cliArgs.debug;\n if (cliArgs.verbose !== undefined) protokollCliArgs.verbose = cliArgs.verbose;\n if (cliArgs.dryRun !== undefined) protokollCliArgs.dryRun = cliArgs.dryRun;\n if (cliArgs.model !== undefined) protokollCliArgs.model = cliArgs.model;\n if (cliArgs.transcriptionModel !== undefined) protokollCliArgs.transcriptionModel = cliArgs.transcriptionModel;\n if (cliArgs.reasoningLevel !== undefined) protokollCliArgs.reasoningLevel = cliArgs.reasoningLevel;\n if (cliArgs.overrides !== undefined) protokollCliArgs.overrides = cliArgs.overrides;\n if (cliArgs.contextDirectories !== undefined) protokollCliArgs.contextDirectories = cliArgs.contextDirectories;\n if (cliArgs.maxAudioSize !== undefined) {\n protokollCliArgs.maxAudioSize = typeof cliArgs.maxAudioSize === 'string' \n ? parseInt(cliArgs.maxAudioSize, 10) \n : cliArgs.maxAudioSize;\n }\n if (cliArgs.tempDirectory !== undefined) protokollCliArgs.tempDirectory = cliArgs.tempDirectory;\n if (cliArgs.processedDirectory !== undefined) protokollCliArgs.processedDirectory = cliArgs.processedDirectory;\n if (cliArgs.silent !== undefined) protokollCliArgs.silent = cliArgs.silent;\n\n // Merge configurations: Defaults -> File -> Dreadcabinet CLI -> Protokoll CLI (highest precedence)\n let mergedConfig: Partial<Config> = {\n ...PROTOKOLL_DEFAULTS, // Start with Protokoll defaults\n ...fileValues, // Apply file values (overwrites defaults)\n ...dreadcabinetValues, // Apply dreadcabinet CLI args\n ...protokollCliArgs, // Apply protokoll-specific CLI args last (highest precedence)\n } as Partial<Config>;\n\n const secureConfig: SecureConfig = {\n ...(process.env.OPENAI_API_KEY !== undefined && { openaiApiKey: process.env.OPENAI_API_KEY }), // Apply Env vars\n } as SecureConfig;\n\n // Convert maxAudioSize if it's a string AFTER merging\n if (typeof mergedConfig.maxAudioSize === 'string') {\n const parsedSize = parseInt(mergedConfig.maxAudioSize, 10);\n if (!isNaN(parsedSize)) {\n mergedConfig.maxAudioSize = parsedSize;\n } else {\n logger.warn(`Invalid maxAudioSize value detected after merge: '${mergedConfig.maxAudioSize}', using default: ${DEFAULT_MAX_AUDIO_SIZE}`);\n mergedConfig.maxAudioSize = DEFAULT_MAX_AUDIO_SIZE; // Use Protokoll default if parsing fails\n }\n } else if (mergedConfig.maxAudioSize === undefined) {\n // If still undefined after all merges, apply Protokoll default\n mergedConfig.maxAudioSize = DEFAULT_MAX_AUDIO_SIZE;\n }\n\n // Apply Dreadcabinet defaults\n mergedConfig = dreadcabinet.applyDefaults(mergedConfig) as Partial<Config>;\n\n const config = mergedConfig as Config;\n\n // Validate Dreadcabinet final config\n dreadcabinet.validate(config);\n\n // Validate Protokoll final config\n await validateConfig(config);\n await validateSecureConfig(secureConfig);\n\n logger.debug('Final configuration: %s', JSON.stringify(config, null, 2));\n return [config, secureConfig];\n}\n\nasync function validateSecureConfig(config: SecureConfig): Promise<void> {\n const logger = getLogger();\n if (!config.openaiApiKey) {\n config.openaiApiKey = process.env.OPENAI_API_KEY;\n\n if (!config.openaiApiKey) {\n throw new Error('OpenAI API key is required. Provide it via CLI (--openai-api-key), config file, or OPENAI_API_KEY environment variable.');\n }\n logger.debug(\"Using OpenAI API key from environment variable.\");\n }\n}\n\nasync function validateConfig(config: Config): Promise<void> {\n const logger = getLogger();\n\n // Validate that models are provided (but don't restrict to specific allowlist)\n validateModelPresence(config.model, true, 'model');\n validateModelPresence(config.transcriptionModel, true, 'transcriptionModel');\n\n if (config.contextDirectories && config.contextDirectories.length > 0) {\n await validateContextDirectories(config.contextDirectories);\n } else {\n logger.debug(\"No context directories provided.\");\n config.contextDirectories = [];\n }\n\n if (config.tempDirectory) {\n await validateTempDirectory(config.tempDirectory);\n } else {\n throw new Error('Temp directory is required.');\n }\n\n if (typeof config.maxAudioSize !== 'number' || config.maxAudioSize <= 0) {\n throw new Error(`Invalid maxAudioSize: ${config.maxAudioSize}. Must be a positive number.`);\n }\n\n logger.debug(\"Final configuration validated successfully.\");\n}\n\nfunction validateModelPresence(model: string | undefined, required: boolean, modelOptionName: string) {\n const logger = getLogger();\n logger.debug(`Validating model presence for ${modelOptionName}: ${model} (Required: ${required})`);\n if (required && !model) {\n throw new Error(`Model for ${modelOptionName} is required`);\n }\n\n if (model && model.trim() === '') {\n throw new Error(`Model for ${modelOptionName} cannot be empty`);\n }\n\n // Note: We no longer validate against a static allowlist\n // The actual model validation will happen when the API call is made\n // This allows for dynamic model discovery and future model additions\n}\n\nasync function validateContextDirectories(contextDirectories: string[]) {\n const logger = getLogger();\n logger.debug(`Validating context directories: ${contextDirectories.join(', ')}`);\n const storage = Storage.create({ log: logger.info.bind(logger) });\n for (const directory of contextDirectories) {\n if (!await storage.isDirectoryReadable(directory)) {\n throw new Error(`Context directory does not exist or is not readable: ${directory}`);\n }\n }\n}\n\n\n\nasync function validateTempDirectory(tempDirectory: string) {\n const logger = getLogger();\n logger.debug(`Validating temp directory: ${tempDirectory}`);\n const storage = Storage.create({ log: logger.info.bind(logger) });\n if (!await storage.isDirectoryWritable(tempDirectory)) {\n throw new Error(`Temp directory does not exist or is not writable: ${tempDirectory}`);\n }\n}\n"],"names":["configure","dreadcabinet","cardigantime","logger","getLogger","program","Command","name","PROGRAM_NAME","summary","description","option","DEFAULT_REASONING_LEVEL","version","VERSION","process","argv","includes","parse","cliArgs","opts","checkConfig","config","PROTOKOLL_DEFAULTS","secureConfig","openaiApiKey","env","OPENAI_API_KEY","generateConfig","configDirectory","debug","JSON","stringify","fileValues","read","dreadcabinetValues","protokollCliArgs","batch","undefined","interactive","selfReflection","verbose","dryRun","model","transcriptionModel","reasoningLevel","overrides","contextDirectories","maxAudioSize","parseInt","tempDirectory","processedDirectory","silent","mergedConfig","parsedSize","isNaN","warn","DEFAULT_MAX_AUDIO_SIZE","applyDefaults","validate","validateConfig","validateSecureConfig","Error","validateModelPresence","length","validateContextDirectories","validateTempDirectory","required","modelOptionName","trim","join","storage","Storage","log","info","bind","directory","isDirectoryReadable","isDirectoryWritable"],"mappings":";;;;;AAcO,MAAMA,SAAAA,GAAY,OAAOC,YAAAA,EAAyCC,YAAAA,GAAAA;AACrE,IAAA,MAAMC,MAAAA,GAASC,SAAAA,EAAAA;AAEf,IAAA,IAAIC,UAAU,IAAIC,OAAAA,EAAAA;AAClBD,IAAAA,OAAAA,CACKE,IAAI,CAACC,YAAAA,CAAAA,CACLC,OAAO,CAAC,qDACRC,WAAW,CAAC,mFAAA,CAAA,CACZC,MAAM,CAAC,WAAA,EAAa,wCAAA,CAAA,CACpBA,MAAM,CAAC,aAAa,wBAAA,CAAA,CACpBA,MAAM,CAAC,SAAA,EAAW,wBAClBA,MAAM,CAAC,iCAAA,EAAmC,gBAAA,CAAA,CAC1CA,MAAM,CAAC,4CAAA,EAA8C,mCAAA,CAAA,CACrDA,MAAM,CAAC,iBAAA,EAAmB,mDAAA,CAAA,CAC1BA,MAAM,CAAC,sCAAsC,CAAC,uDAAuD,EAAEC,uBAAAA,CAAwB,CAAC,CAAC,CAAA,CACjID,MAAM,CAAC,eAAe,8CAAA,CAAA,CACtBA,MAAM,CAAC,+CAAA,EAAiD,kEACxDA,MAAM,CAAC,iCAAA,EAAmC,kCAAA,CAAA,CAC1CA,MAAM,CAAC,kCAAA,EAAoC,0CAAA,CAAA,CAC3CA,MAAM,CAAC,SAAA,EAAW,wDAAA,CAAA,CAClBA,MAAM,CAAC,qBAAqB,kDAAA,CAAA,CAC5BA,MAAM,CAAC,sBAAA,EAAwB,mCAC/BA,MAAM,CAAC,YAAY,iDAAA,CAAA,CACnBA,MAAM,CAAC,4CAAA,EAA8C,4CAAA,CAAA;IAE1D,MAAMV,YAAAA,CAAaD,SAAS,CAACK,OAAAA,CAAAA;IAC7BA,OAAAA,GAAU,MAAMH,YAAAA,CAAaF,SAAS,CAACK,OAAAA,CAAAA;AACvCA,IAAAA,OAAAA,CAAQQ,OAAO,CAACC,OAAAA,CAAAA;;AAGhB,IAAA,IAAIC,OAAAA,CAAQC,IAAI,CAACC,QAAQ,CAAC,gBAAA,CAAA,EAAmB;AACzCZ,QAAAA,OAAAA,CAAQa,KAAK,EAAA;QACb,MAAMC,OAAAA,GAAgBd,QAAQe,IAAI,EAAA;;QAGlC,MAAMlB,YAAAA,CAAamB,WAAW,CAACF,OAAAA,CAAAA;;AAG/B,QAAA,MAAMG,MAAAA,GAAiBC,kBAAAA;AACvB,QAAA,MAAMC,YAAAA,GAA6B;YAAEC,YAAAA,EAAcV,OAAAA,CAAQW,GAAG,CAACC;AAAe,SAAA;QAC9E,OAAO;AAACL,YAAAA,MAAAA;AAAQE,YAAAA;AAAa,SAAA;AACjC,IAAA;;AAGA,IAAA,IAAIT,OAAAA,CAAQC,IAAI,CAACC,QAAQ,CAAC,eAAA,CAAA,EAAkB;AACxCZ,QAAAA,OAAAA,CAAQa,KAAK,EAAA;QACb,MAAMC,OAAAA,GAAgBd,QAAQe,IAAI,EAAA;;AAGlC,QAAA,MAAMlB,aAAa0B,cAAc,CAACT,QAAQU,eAAe,IAAIN,mBAAmBM,eAAe,CAAA;;AAG/F,QAAA,MAAMP,MAAAA,GAAiBC,kBAAAA;AACvB,QAAA,MAAMC,YAAAA,GAA6B;YAAEC,YAAAA,EAAcV,OAAAA,CAAQW,GAAG,CAACC;AAAe,SAAA;QAC9E,OAAO;AAACL,YAAAA,MAAAA;AAAQE,YAAAA;AAAa,SAAA;AACjC,IAAA;AAEAnB,IAAAA,OAAAA,CAAQa,KAAK,EAAA;IAEb,MAAMC,OAAAA,GAAgBd,QAAQe,IAAI,EAAA;AAClCjB,IAAAA,MAAAA,CAAO2B,KAAK,CAAC,0BAAA,EAA4BC,KAAKC,SAAS,CAACb,SAAS,IAAA,EAAM,CAAA,CAAA,CAAA;;AAGvE,IAAA,MAAMc,UAAAA,GAAa,MAAM/B,YAAAA,CAAagC,IAAI,CAACf,OAAAA,CAAAA;;AAG3C,IAAA,MAAMgB,kBAAAA,GAAqB,MAAMlC,YAAAA,CAAaiC,IAAI,CAACf,OAAAA,CAAAA;;AAGnD,IAAA,MAAMiB,mBAAoC,EAAC;;IAE3C,IAAIjB,OAAAA,CAAQkB,KAAK,KAAKC,SAAAA,EAAWF,iBAAiBG,WAAW,GAAG,CAACpB,OAAAA,CAAQkB,KAAK;IAC9E,IAAIlB,OAAAA,CAAQqB,cAAc,KAAKF,SAAAA,EAAWF,iBAAiBI,cAAc,GAAGrB,QAAQqB,cAAc;IAClG,IAAIrB,OAAAA,CAAQW,KAAK,KAAKQ,SAAAA,EAAWF,iBAAiBN,KAAK,GAAGX,QAAQW,KAAK;IACvE,IAAIX,OAAAA,CAAQsB,OAAO,KAAKH,SAAAA,EAAWF,iBAAiBK,OAAO,GAAGtB,QAAQsB,OAAO;IAC7E,IAAItB,OAAAA,CAAQuB,MAAM,KAAKJ,SAAAA,EAAWF,iBAAiBM,MAAM,GAAGvB,QAAQuB,MAAM;IAC1E,IAAIvB,OAAAA,CAAQwB,KAAK,KAAKL,SAAAA,EAAWF,iBAAiBO,KAAK,GAAGxB,QAAQwB,KAAK;IACvE,IAAIxB,OAAAA,CAAQyB,kBAAkB,KAAKN,SAAAA,EAAWF,iBAAiBQ,kBAAkB,GAAGzB,QAAQyB,kBAAkB;IAC9G,IAAIzB,OAAAA,CAAQ0B,cAAc,KAAKP,SAAAA,EAAWF,iBAAiBS,cAAc,GAAG1B,QAAQ0B,cAAc;IAClG,IAAI1B,OAAAA,CAAQ2B,SAAS,KAAKR,SAAAA,EAAWF,iBAAiBU,SAAS,GAAG3B,QAAQ2B,SAAS;IACnF,IAAI3B,OAAAA,CAAQ4B,kBAAkB,KAAKT,SAAAA,EAAWF,iBAAiBW,kBAAkB,GAAG5B,QAAQ4B,kBAAkB;IAC9G,IAAI5B,OAAAA,CAAQ6B,YAAY,KAAKV,SAAAA,EAAW;AACpCF,QAAAA,gBAAAA,CAAiBY,YAAY,GAAG,OAAO7B,OAAAA,CAAQ6B,YAAY,KAAK,QAAA,GAC1DC,QAAAA,CAAS9B,OAAAA,CAAQ6B,YAAY,EAAE,EAAA,CAAA,GAC/B7B,QAAQ6B,YAAY;AAC9B,IAAA;IACA,IAAI7B,OAAAA,CAAQ+B,aAAa,KAAKZ,SAAAA,EAAWF,iBAAiBc,aAAa,GAAG/B,QAAQ+B,aAAa;IAC/F,IAAI/B,OAAAA,CAAQgC,kBAAkB,KAAKb,SAAAA,EAAWF,iBAAiBe,kBAAkB,GAAGhC,QAAQgC,kBAAkB;IAC9G,IAAIhC,OAAAA,CAAQiC,MAAM,KAAKd,SAAAA,EAAWF,iBAAiBgB,MAAM,GAAGjC,QAAQiC,MAAM;;AAG1E,IAAA,IAAIC,YAAAA,GAAgC;AAChC,QAAA,GAAG9B,kBAAkB;AACrB,QAAA,GAAGU,UAAU;AACb,QAAA,GAAGE,kBAAkB;AACrB,QAAA,GAAGC;AACP,KAAA;AAEA,IAAA,MAAMZ,YAAAA,GAA6B;AAC/B,QAAA,GAAIT,OAAAA,CAAQW,GAAG,CAACC,cAAc,KAAKW,SAAAA,IAAa;YAAEb,YAAAA,EAAcV,OAAAA,CAAQW,GAAG,CAACC;;AAChF,KAAA;;AAGA,IAAA,IAAI,OAAO0B,YAAAA,CAAaL,YAAY,KAAK,QAAA,EAAU;AAC/C,QAAA,MAAMM,UAAAA,GAAaL,QAAAA,CAASI,YAAAA,CAAaL,YAAY,EAAE,EAAA,CAAA;QACvD,IAAI,CAACO,MAAMD,UAAAA,CAAAA,EAAa;AACpBD,YAAAA,YAAAA,CAAaL,YAAY,GAAGM,UAAAA;QAChC,CAAA,MAAO;YACHnD,MAAAA,CAAOqD,IAAI,CAAC,CAAC,kDAAkD,EAAEH,aAAaL,YAAY,CAAC,kBAAkB,EAAES,sBAAAA,CAAAA,CAAwB,CAAA;YACvIJ,YAAAA,CAAaL,YAAY,GAAGS,sBAAAA,CAAAA;AAChC,QAAA;AACJ,IAAA,CAAA,MAAO,IAAIJ,YAAAA,CAAaL,YAAY,KAAKV,SAAAA,EAAW;;AAEhDe,QAAAA,YAAAA,CAAaL,YAAY,GAAGS,sBAAAA;AAChC,IAAA;;IAGAJ,YAAAA,GAAepD,YAAAA,CAAayD,aAAa,CAACL,YAAAA,CAAAA;AAE1C,IAAA,MAAM/B,MAAAA,GAAS+B,YAAAA;;AAGfpD,IAAAA,YAAAA,CAAa0D,QAAQ,CAACrC,MAAAA,CAAAA;;AAGtB,IAAA,MAAMsC,cAAAA,CAAetC,MAAAA,CAAAA;AACrB,IAAA,MAAMuC,oBAAAA,CAAqBrC,YAAAA,CAAAA;AAE3BrB,IAAAA,MAAAA,CAAO2B,KAAK,CAAC,yBAAA,EAA2BC,KAAKC,SAAS,CAACV,QAAQ,IAAA,EAAM,CAAA,CAAA,CAAA;IACrE,OAAO;AAACA,QAAAA,MAAAA;AAAQE,QAAAA;AAAa,KAAA;AACjC;AAEA,eAAeqC,qBAAqBvC,MAAoB,EAAA;AACpD,IAAA,MAAMnB,MAAAA,GAASC,SAAAA,EAAAA;IACf,IAAI,CAACkB,MAAAA,CAAOG,YAAY,EAAE;AACtBH,QAAAA,MAAAA,CAAOG,YAAY,GAAGV,OAAAA,CAAQW,GAAG,CAACC,cAAc;QAEhD,IAAI,CAACL,MAAAA,CAAOG,YAAY,EAAE;AACtB,YAAA,MAAM,IAAIqC,KAAAA,CAAM,yHAAA,CAAA;AACpB,QAAA;AACA3D,QAAAA,MAAAA,CAAO2B,KAAK,CAAC,iDAAA,CAAA;AACjB,IAAA;AACJ;AAEA,eAAe8B,eAAetC,MAAc,EAAA;AACxC,IAAA,MAAMnB,MAAAA,GAASC,SAAAA,EAAAA;;IAGf2D,qBAAAA,CAAsBzC,MAAAA,CAAOqB,KAAK,EAAE,IAAA,EAAM,OAAA,CAAA;IAC1CoB,qBAAAA,CAAsBzC,MAAAA,CAAOsB,kBAAkB,EAAE,IAAA,EAAM,oBAAA,CAAA;IAEvD,IAAItB,MAAAA,CAAOyB,kBAAkB,IAAIzB,MAAAA,CAAOyB,kBAAkB,CAACiB,MAAM,GAAG,CAAA,EAAG;QACnE,MAAMC,0BAAAA,CAA2B3C,OAAOyB,kBAAkB,CAAA;IAC9D,CAAA,MAAO;AACH5C,QAAAA,MAAAA,CAAO2B,KAAK,CAAC,kCAAA,CAAA;QACbR,MAAAA,CAAOyB,kBAAkB,GAAG,EAAE;AAClC,IAAA;IAEA,IAAIzB,MAAAA,CAAO4B,aAAa,EAAE;QACtB,MAAMgB,qBAAAA,CAAsB5C,OAAO4B,aAAa,CAAA;IACpD,CAAA,MAAO;AACH,QAAA,MAAM,IAAIY,KAAAA,CAAM,6BAAA,CAAA;AACpB,IAAA;IAEA,IAAI,OAAOxC,OAAO0B,YAAY,KAAK,YAAY1B,MAAAA,CAAO0B,YAAY,IAAI,CAAA,EAAG;QACrE,MAAM,IAAIc,MAAM,CAAC,sBAAsB,EAAExC,MAAAA,CAAO0B,YAAY,CAAC,4BAA4B,CAAC,CAAA;AAC9F,IAAA;AAEA7C,IAAAA,MAAAA,CAAO2B,KAAK,CAAC,6CAAA,CAAA;AACjB;AAEA,SAASiC,qBAAAA,CAAsBpB,KAAyB,EAAEwB,QAAiB,EAAEC,eAAuB,EAAA;AAChG,IAAA,MAAMjE,MAAAA,GAASC,SAAAA,EAAAA;AACfD,IAAAA,MAAAA,CAAO2B,KAAK,CAAC,CAAC,8BAA8B,EAAEsC,eAAAA,CAAgB,EAAE,EAAEzB,KAAAA,CAAM,YAAY,EAAEwB,QAAAA,CAAS,CAAC,CAAC,CAAA;IACjG,IAAgB,CAACxB,KAAAA,EAAO;AACpB,QAAA,MAAM,IAAImB,KAAAA,CAAM,CAAC,UAAU,EAAEM,eAAAA,CAAgB,YAAY,CAAC,CAAA;AAC9D,IAAA;AAEA,IAAA,IAAIzB,KAAAA,IAASA,KAAAA,CAAM0B,IAAI,EAAA,KAAO,EAAA,EAAI;AAC9B,QAAA,MAAM,IAAIP,KAAAA,CAAM,CAAC,UAAU,EAAEM,eAAAA,CAAgB,gBAAgB,CAAC,CAAA;AAClE,IAAA;AAEA;AACA;AACA;AACJ;AAEA,eAAeH,2BAA2BlB,kBAA4B,EAAA;AAClE,IAAA,MAAM5C,MAAAA,GAASC,SAAAA,EAAAA;IACfD,MAAAA,CAAO2B,KAAK,CAAC,CAAC,gCAAgC,EAAEiB,kBAAAA,CAAmBuB,IAAI,CAAC,IAAA,CAAA,CAAA,CAAO,CAAA;IAC/E,MAAMC,OAAAA,GAAUC,MAAc,CAAC;AAAEC,QAAAA,GAAAA,EAAKtE,MAAAA,CAAOuE,IAAI,CAACC,IAAI,CAACxE,MAAAA;AAAQ,KAAA,CAAA;IAC/D,KAAK,MAAMyE,aAAa7B,kBAAAA,CAAoB;AACxC,QAAA,IAAI,CAAC,MAAMwB,OAAAA,CAAQM,mBAAmB,CAACD,SAAAA,CAAAA,EAAY;AAC/C,YAAA,MAAM,IAAId,KAAAA,CAAM,CAAC,qDAAqD,EAAEc,SAAAA,CAAAA,CAAW,CAAA;AACvF,QAAA;AACJ,IAAA;AACJ;AAIA,eAAeV,sBAAsBhB,aAAqB,EAAA;AACtD,IAAA,MAAM/C,MAAAA,GAASC,SAAAA,EAAAA;AACfD,IAAAA,MAAAA,CAAO2B,KAAK,CAAC,CAAC,2BAA2B,EAAEoB,aAAAA,CAAAA,CAAe,CAAA;IAC1D,MAAMqB,OAAAA,GAAUC,MAAc,CAAC;AAAEC,QAAAA,GAAAA,EAAKtE,MAAAA,CAAOuE,IAAI,CAACC,IAAI,CAACxE,MAAAA;AAAQ,KAAA,CAAA;AAC/D,IAAA,IAAI,CAAC,MAAMoE,OAAAA,CAAQO,mBAAmB,CAAC5B,aAAAA,CAAAA,EAAgB;AACnD,QAAA,MAAM,IAAIY,KAAAA,CAAM,CAAC,kDAAkD,EAAEZ,aAAAA,CAAAA,CAAe,CAAA;AACxF,IAAA;AACJ;;;;"}