@sylphx/flow 0.2.1 → 0.2.3

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 (102) hide show
  1. package/assets/agents/coder.md +1 -1
  2. package/assets/agents/orchestrator.md +1 -1
  3. package/assets/agents/reviewer.md +1 -1
  4. package/assets/agents/writer.md +13 -13
  5. package/assets/slash-commands/context.md +112 -0
  6. package/dist/assets/agents/coder.md +32 -0
  7. package/dist/assets/agents/orchestrator.md +36 -0
  8. package/dist/assets/agents/reviewer.md +30 -0
  9. package/dist/assets/agents/writer.md +30 -0
  10. package/dist/assets/knowledge/data/sql.md +216 -0
  11. package/dist/assets/knowledge/guides/saas-template.md +85 -0
  12. package/dist/assets/knowledge/guides/system-prompt.md +344 -0
  13. package/dist/assets/knowledge/guides/tech-stack.md +92 -0
  14. package/dist/assets/knowledge/guides/ui-ux.md +44 -0
  15. package/dist/assets/knowledge/stacks/nextjs-app.md +165 -0
  16. package/dist/assets/knowledge/stacks/node-api.md +220 -0
  17. package/dist/assets/knowledge/stacks/react-app.md +232 -0
  18. package/dist/assets/knowledge/universal/deployment.md +109 -0
  19. package/dist/assets/knowledge/universal/performance.md +121 -0
  20. package/dist/assets/knowledge/universal/security.md +79 -0
  21. package/dist/assets/knowledge/universal/testing.md +111 -0
  22. package/dist/assets/output-styles/silent.md +23 -0
  23. package/dist/assets/rules/core.md +144 -0
  24. package/dist/assets/slash-commands/commit.md +23 -0
  25. package/dist/assets/slash-commands/context.md +112 -0
  26. package/dist/assets/slash-commands/explain.md +35 -0
  27. package/dist/assets/slash-commands/mep.md +63 -0
  28. package/dist/assets/slash-commands/review.md +39 -0
  29. package/dist/assets/slash-commands/test.md +30 -0
  30. package/dist/chunk-1rptg3yg.js +4 -0
  31. package/dist/chunk-1rptg3yg.js.map +10 -0
  32. package/dist/{chunk-124wqbdb.js → chunk-4fr8q0jy.js} +3 -3
  33. package/dist/{chunk-124wqbdb.js.map → chunk-4fr8q0jy.js.map} +1 -1
  34. package/dist/{chunk-f6y5vttn.js → chunk-5szm4n3x.js} +3 -3
  35. package/dist/{chunk-f6y5vttn.js.map → chunk-5szm4n3x.js.map} +1 -1
  36. package/dist/chunk-7nht27vs.js +4 -0
  37. package/dist/{chunk-g9t3me0w.js.map → chunk-7nht27vs.js.map} +2 -2
  38. package/dist/chunk-8krxe10w.js +3 -0
  39. package/dist/{chunk-e966bjm5.js.map → chunk-8krxe10w.js.map} +2 -2
  40. package/dist/{chunk-wpe7rw5c.js → chunk-8z1sf25t.js} +3 -3
  41. package/dist/{chunk-wpe7rw5c.js.map → chunk-8z1sf25t.js.map} +1 -1
  42. package/dist/chunk-9c2nr2fz.js +25 -0
  43. package/dist/chunk-9c2nr2fz.js.map +61 -0
  44. package/dist/{chunk-4p754rhd.js → chunk-asr22mbn.js} +2 -2
  45. package/dist/{chunk-4p754rhd.js.map → chunk-asr22mbn.js.map} +2 -2
  46. package/dist/chunk-bnxtqetr.js +23 -0
  47. package/dist/chunk-bnxtqetr.js.map +11 -0
  48. package/dist/chunk-cs1s5c3g.js +54 -0
  49. package/dist/chunk-cs1s5c3g.js.map +53 -0
  50. package/dist/chunk-cv1nhr27.js +2 -0
  51. package/dist/{chunk-hshjnpm0.js.map → chunk-cv1nhr27.js.map} +1 -1
  52. package/dist/chunk-d4hj6d4t.js +6 -0
  53. package/dist/chunk-d4hj6d4t.js.map +11 -0
  54. package/dist/chunk-f06ma45b.js +15 -0
  55. package/dist/chunk-f06ma45b.js.map +16 -0
  56. package/dist/chunk-fs3f7acb.js +4 -0
  57. package/dist/chunk-fs3f7acb.js.map +12 -0
  58. package/dist/{chunk-5r4afhzp.js → chunk-gh83x9ya.js} +3 -3
  59. package/dist/{chunk-5r4afhzp.js.map → chunk-gh83x9ya.js.map} +1 -1
  60. package/dist/{chunk-qa8b725g.js → chunk-gyq335sw.js} +6 -5
  61. package/dist/{chunk-qa8b725g.js.map → chunk-gyq335sw.js.map} +1 -1
  62. package/dist/{chunk-hs3nxzyz.js → chunk-hft1735c.js} +2 -2
  63. package/dist/{chunk-hs3nxzyz.js.map → chunk-hft1735c.js.map} +2 -2
  64. package/dist/chunk-hj6r7703.js +3 -0
  65. package/dist/{chunk-78bfvh46.js.map → chunk-hj6r7703.js.map} +2 -2
  66. package/dist/chunk-hxj4eapp.js +14 -0
  67. package/dist/chunk-hxj4eapp.js.map +20 -0
  68. package/dist/chunk-jgsq3xax.js +23 -0
  69. package/dist/chunk-jgsq3xax.js.map +132 -0
  70. package/dist/{chunk-646h52kd.js → chunk-m9nt0bj3.js} +3 -3
  71. package/dist/{chunk-646h52kd.js.map → chunk-m9nt0bj3.js.map} +1 -1
  72. package/dist/{chunk-bd11hvvz.js → chunk-ndah8mn9.js} +2 -2
  73. package/dist/{chunk-bd11hvvz.js.map → chunk-ndah8mn9.js.map} +1 -1
  74. package/dist/chunk-s6g21d1g.js +27 -0
  75. package/dist/{chunk-0h7sfwq3.js.map → chunk-s6g21d1g.js.map} +4 -5
  76. package/dist/{chunk-hshjnpm0.js → chunk-sxy6vp20.js} +2 -2
  77. package/dist/chunk-sxy6vp20.js.map +9 -0
  78. package/dist/chunk-vjf57v4h.js +4 -0
  79. package/dist/chunk-vjf57v4h.js.map +10 -0
  80. package/dist/{chunk-jxny6xft.js → chunk-w2vbmr93.js} +2 -2
  81. package/dist/{chunk-jxny6xft.js.map → chunk-w2vbmr93.js.map} +1 -1
  82. package/dist/chunk-wd9qbbe5.js +5 -0
  83. package/dist/chunk-wd9qbbe5.js.map +10 -0
  84. package/dist/chunk-wnaa55wn.js +108 -0
  85. package/dist/chunk-wnaa55wn.js.map +24 -0
  86. package/dist/chunk-wrx1n6q6.js +16 -0
  87. package/dist/chunk-wrx1n6q6.js.map +16 -0
  88. package/dist/chunk-xata5rw6.js +119 -0
  89. package/dist/{chunk-878q8xdr.js.map → chunk-xata5rw6.js.map} +7 -18
  90. package/dist/chunk-z2rtyk3d.js +7 -0
  91. package/dist/{chunk-ygdr4fw7.js.map → chunk-z2rtyk3d.js.map} +2 -2
  92. package/dist/index.js +446 -482
  93. package/dist/index.js.map +301 -202
  94. package/package.json +4 -1
  95. package/dist/chunk-0h7sfwq3.js +0 -27
  96. package/dist/chunk-78bfvh46.js +0 -3
  97. package/dist/chunk-878q8xdr.js +0 -86
  98. package/dist/chunk-e966bjm5.js +0 -3
  99. package/dist/chunk-fxwaa2mg.js +0 -4
  100. package/dist/chunk-fxwaa2mg.js.map +0 -10
  101. package/dist/chunk-g9t3me0w.js +0 -4
  102. package/dist/chunk-ygdr4fw7.js +0 -7
@@ -0,0 +1,24 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/ui/commands/helpers/provider-config.ts", "../src/ui/commands/definitions/provider.command.ts", "../src/ui/commands/definitions/model.command.ts", "../src/ui/commands/definitions/logs.command.ts", "../src/ui/commands/definitions/help.command.ts", "../src/ui/commands/definitions/survey.command.ts", "../src/ui/commands/definitions/context.command.ts", "../src/ui/commands/definitions/sessions.command.ts", "../src/ui/commands/definitions/new.command.ts", "../src/ui/commands/definitions/bashes.command.ts", "../src/ui/commands/definitions/agent.command.ts", "../src/ui/commands/definitions/rules.command.ts", "../src/ui/commands/definitions/compact.command.ts", "../src/ui/commands/definitions/notifications.command.ts", "../src/ui/commands/registry.ts"],
4
+ "sourcesContent": [
5
+ "/**\n * Provider Configuration Helper\n * Shared helper function for provider configuration\n */\n\nimport type { CommandContext } from '../types.js';\n\n/**\n * Configure a provider interactively\n */\nexport async function configureProvider(\n context: CommandContext,\n providerId: string\n): Promise<string> {\n const { AI_PROVIDERS } = await import('../../../config/ai-config.js');\n const { getProvider } = await import('../../../providers/index.js');\n const aiConfig = context.getConfig();\n\n const provider = getProvider(providerId as any);\n const schema = provider.getConfigSchema();\n\n const availableKeys = schema.map((field) => ({\n label: field.label,\n value: field.key,\n }));\n\n context.sendMessage(\n `Configure ${AI_PROVIDERS[providerId as keyof typeof AI_PROVIDERS].name} - Select setting:`\n );\n const keyAnswers = await context.waitForInput({\n type: 'selection',\n questions: [\n {\n id: 'key',\n question: 'Which setting do you want to configure?',\n options: availableKeys,\n },\n ],\n });\n\n const key =\n typeof keyAnswers === 'object' && !Array.isArray(keyAnswers)\n ? keyAnswers['key']\n : '';\n if (!key) {\n return 'Configuration cancelled.';\n }\n\n // Ask for value - check if boolean type for selection\n const field = schema.find((f) => f.key === key);\n let value: string;\n\n if (field?.type === 'boolean') {\n context.sendMessage(`Select value for ${key}:`);\n const boolAnswers = await context.waitForInput({\n type: 'selection',\n questions: [\n {\n id: 'value',\n question: `${field.label}:`,\n options: [\n { label: 'true', value: 'true' },\n { label: 'false', value: 'false' },\n ],\n },\n ],\n });\n value =\n typeof boolAnswers === 'object' && !Array.isArray(boolAnswers)\n ? boolAnswers['value']\n : '';\n } else {\n context.sendMessage(`Enter value for ${key}:`);\n const valueAnswers = await context.waitForInput({\n type: 'text',\n prompt: `${key}:`,\n });\n value = typeof valueAnswers === 'string' ? valueAnswers : '';\n }\n\n if (!value) {\n return 'Value is required.';\n }\n\n // Update config\n const newConfig = {\n ...aiConfig!,\n providers: {\n ...aiConfig!.providers,\n [providerId]: {\n ...aiConfig!.providers?.[\n providerId as keyof typeof aiConfig.providers\n ],\n [key]: value,\n },\n },\n };\n\n if (!aiConfig?.defaultProvider) {\n newConfig.defaultProvider = providerId;\n }\n\n context.setAIConfig(newConfig);\n await context.saveConfig(newConfig);\n\n // Mask secret values in response\n const displayField = schema.find((f) => f.key === key);\n const displayValue = displayField?.secret ? '***' : value;\n\n return `Set ${AI_PROVIDERS[providerId as keyof typeof AI_PROVIDERS].name} ${key} to: ${displayValue}`;\n}\n\n/**\n * Options cache for dynamic option loading\n */\nexport const optionsCache = new Map<\n string,\n Array<{ id: string; name: string }>\n>();\n",
6
+ "/**\n * Provider Command\n * Configure and switch AI providers\n */\n\nimport type { Command } from '../types.js';\nimport { configureProvider } from '../helpers/provider-config.js';\n\nexport const providerCommand: Command = {\n id: 'provider',\n label: '/provider',\n description: 'Manage AI providers',\n args: [\n {\n name: 'action',\n description: 'Action: \"use\" or \"set\"',\n required: false,\n loadOptions: async (previousArgs) => {\n return [\n { id: 'use', label: 'use', value: 'use' },\n { id: 'set', label: 'set', value: 'set' },\n ];\n },\n },\n {\n name: 'provider-name',\n description: 'Provider name (anthropic, openai, google, openrouter)',\n required: false,\n loadOptions: async (previousArgs) => {\n const { AI_PROVIDERS } = await import('../../../config/ai-config.js');\n return Object.values(AI_PROVIDERS).map((p) => ({\n id: p.id,\n label: p.name,\n value: p.id,\n }));\n },\n },\n {\n name: 'key',\n description: 'Setting key (for set action)',\n required: false,\n loadOptions: async (previousArgs) => {\n // previousArgs: [action, provider-name]\n // Load keys from provider's config schema\n const providerId = previousArgs[1]; // e.g., \"anthropic\", \"openai\", \"openrouter\"\n\n if (!providerId) {\n return [];\n }\n\n try {\n const { getProvider } = await import('../../../providers/index.js');\n const provider = getProvider(providerId as any);\n const schema = provider.getConfigSchema();\n\n // Convert schema fields to options\n const keys = schema.map(field => ({\n id: field.key,\n label: field.label,\n value: field.key,\n }));\n\n return keys;\n } catch (error) {\n // Fallback to empty if provider not found\n return [];\n }\n },\n },\n {\n name: 'value',\n description: 'Setting value (for set action)',\n required: false,\n loadOptions: async (previousArgs) => {\n // previousArgs: [action, provider-name, key]\n const providerId = previousArgs[1];\n const key = previousArgs[2];\n\n if (!providerId || !key) {\n return [];\n }\n\n try {\n const { getProvider } = await import('../../../providers/index.js');\n const provider = getProvider(providerId as any);\n const schema = provider.getConfigSchema();\n\n // Find the field\n const field = schema.find(f => f.key === key);\n\n // If boolean type, provide true/false options\n if (field?.type === 'boolean') {\n return [\n { id: 'true', label: 'true', value: 'true' },\n { id: 'false', label: 'false', value: 'false' },\n ];\n }\n\n return [];\n } catch (error) {\n return [];\n }\n },\n },\n ],\n execute: async (context) => {\n const { AI_PROVIDERS } = await import('../../../config/ai-config.js');\n const aiConfig = context.getConfig();\n\n // Case 1: /provider - ask use or set\n if (context.args.length === 0) {\n context.sendMessage('What do you want to do?');\n const actionAnswers = await context.waitForInput({\n type: 'selection',\n questions: [\n {\n id: 'action',\n question: 'Select action:',\n options: [\n { label: 'Use a provider', value: 'use' },\n { label: 'Configure a provider', value: 'set' },\n ],\n },\n ],\n });\n\n const action = typeof actionAnswers === 'object' && !Array.isArray(actionAnswers) ? actionAnswers['action'] : '';\n if (!action) {\n return 'Action cancelled.';\n }\n\n // Ask which provider\n const { getProvider } = await import('../../../providers/index.js');\n const providerOptions = Object.values(AI_PROVIDERS).map((p) => {\n let isConfigured = false;\n try {\n const provider = getProvider(p.id as any);\n const providerConfig = aiConfig?.providers?.[p.id as keyof typeof aiConfig.providers];\n isConfigured = providerConfig ? provider.isConfigured(providerConfig) : false;\n } catch {\n // Provider not found or error checking config\n }\n return {\n label: `${p.name} ${isConfigured ? '✓' : ''}`,\n value: p.id,\n };\n });\n\n context.sendMessage(action === 'use' ? 'Which provider do you want to use?' : 'Which provider do you want to configure?');\n const providerAnswers = await context.waitForInput({\n type: 'selection',\n questions: [\n {\n id: 'provider',\n question: action === 'use' ? 'Select provider to use:' : 'Select provider to configure:',\n options: providerOptions,\n },\n ],\n });\n\n const providerId = typeof providerAnswers === 'object' && !Array.isArray(providerAnswers) ? providerAnswers['provider'] : '';\n if (!providerId) {\n return 'Provider selection cancelled.';\n }\n\n if (action === 'use') {\n // Use provider\n const { getProvider } = await import('../../../providers/index.js');\n const provider = getProvider(providerId as any);\n const providerConfig = aiConfig?.providers?.[providerId as keyof typeof aiConfig.providers];\n\n if (!providerConfig || !provider.isConfigured(providerConfig)) {\n // Provider not configured - ask if user wants to configure now\n context.sendMessage(`${AI_PROVIDERS[providerId as keyof typeof AI_PROVIDERS].name} is not configured yet.`);\n const configureAnswers = await context.waitForInput({\n type: 'selection',\n questions: [\n {\n id: 'configure',\n question: 'Do you want to configure it now?',\n options: [\n { label: 'Yes, configure now', value: 'yes' },\n { label: 'No, cancel', value: 'no' },\n ],\n },\n ],\n });\n\n const shouldConfigure = typeof configureAnswers === 'object' && !Array.isArray(configureAnswers)\n ? configureAnswers['configure'] === 'yes'\n : false;\n\n if (!shouldConfigure) {\n return 'Cancelled. You can configure later using: /provider set';\n }\n\n // Configure the provider\n const configResult = await configureProvider(context, providerId);\n\n // After configuration, get fresh config from store\n const updatedConfig = context.getConfig();\n const updatedProviderConfig = updatedConfig?.providers?.[providerId as keyof typeof updatedConfig.providers];\n\n // Check if fully configured\n if (!updatedProviderConfig || !provider.isConfigured(updatedProviderConfig)) {\n return `${configResult}\\n\\nProvider still not fully configured. Please continue configuration with: /provider set ${providerId}`;\n }\n\n // Continue with \"use\" flow - update to use this provider\n context.sendMessage(configResult);\n const providerConfigToUse = updatedProviderConfig;\n\n // Now proceed to set as default provider\n const newConfig = {\n ...updatedConfig!,\n defaultProvider: providerId,\n };\n\n // Get default model and update config\n const { getDefaultModel } = await import('../../../core/session-service.js');\n const defaultModel = await getDefaultModel(providerId as any, providerConfigToUse);\n if (!defaultModel) {\n return `Provider configured but failed to get default model for ${AI_PROVIDERS[providerId as keyof typeof AI_PROVIDERS].name}`;\n }\n\n // Save default model to config\n newConfig.providers = {\n ...newConfig.providers,\n [providerId]: {\n ...providerConfigToUse,\n 'default-model': defaultModel,\n },\n };\n\n context.setAIConfig(newConfig);\n await context.saveConfig(newConfig);\n\n // Update UI state\n context.setUISelectedProvider(providerId as ProviderId);\n context.setUISelectedModel(defaultModel);\n\n // Update current session's provider (preserve history)\n const currentSessionId = context.getCurrentSessionId();\n if (currentSessionId) {\n context.updateSessionProvider(currentSessionId, providerId, defaultModel);\n } else {\n // Fallback: create new session if no active session\n context.createSession(providerId, defaultModel);\n }\n\n return `Now using ${AI_PROVIDERS[providerId as keyof typeof AI_PROVIDERS].name} with model: ${defaultModel}`;\n }\n\n const newConfig = {\n ...aiConfig!,\n defaultProvider: providerId,\n };\n\n // Get default model and update config\n const { getDefaultModel } = await import('../../../core/session-service.js');\n const defaultModel = await getDefaultModel(providerId as any, providerConfig);\n if (!defaultModel) {\n return `Failed to get default model for ${AI_PROVIDERS[providerId as keyof typeof AI_PROVIDERS].name}`;\n }\n\n // Save default model to config\n newConfig.providers = {\n ...newConfig.providers,\n [providerId]: {\n ...providerConfig,\n 'default-model': defaultModel,\n },\n };\n\n context.setAIConfig(newConfig);\n await context.saveConfig(newConfig);\n\n // Update current session's provider (preserve history)\n const currentSessionId = context.getCurrentSessionId();\n if (currentSessionId) {\n context.updateSessionProvider(currentSessionId, providerId, defaultModel);\n } else {\n // Fallback: create new session if no active session\n context.createSession(providerId, defaultModel);\n }\n\n return `Switched to ${AI_PROVIDERS[providerId as keyof typeof AI_PROVIDERS].name}`;\n } else {\n // Set provider - use helper function\n return await configureProvider(context, providerId);\n }\n }\n\n // Case 2: /provider use - ask which provider to use\n if (context.args.length === 1 && context.args[0] === 'use') {\n const { getProvider } = await import('../../../providers/index.js');\n const providerOptions = Object.values(AI_PROVIDERS).map((p) => {\n let isConfigured = false;\n try {\n const provider = getProvider(p.id as any);\n const providerConfig = aiConfig?.providers?.[p.id as keyof typeof aiConfig.providers];\n isConfigured = providerConfig ? provider.isConfigured(providerConfig) : false;\n } catch {\n // Provider not found or error checking config\n }\n return {\n label: `${p.name} ${isConfigured ? '✓' : ''}`,\n value: p.id,\n };\n });\n\n context.sendMessage('Which provider do you want to use?');\n const answers = await context.waitForInput({\n type: 'selection',\n questions: [\n {\n id: 'provider',\n question: 'Select provider:',\n options: providerOptions,\n },\n ],\n });\n\n const providerId = typeof answers === 'object' && !Array.isArray(answers) ? answers['provider'] : '';\n if (!providerId) {\n return 'Provider selection cancelled.';\n }\n\n const provider = getProvider(providerId as any);\n const providerConfig = aiConfig?.providers?.[providerId as keyof typeof aiConfig.providers];\n\n if (!providerConfig || !provider.isConfigured(providerConfig)) {\n // Provider not configured - ask if user wants to configure now\n context.sendMessage(`${AI_PROVIDERS[providerId as keyof typeof AI_PROVIDERS].name} is not configured yet.`);\n const configureAnswers = await context.waitForInput({\n type: 'selection',\n questions: [\n {\n id: 'configure',\n question: 'Do you want to configure it now?',\n options: [\n { label: 'Yes, configure now', value: 'yes' },\n { label: 'No, cancel', value: 'no' },\n ],\n },\n ],\n });\n\n const shouldConfigure = typeof configureAnswers === 'object' && !Array.isArray(configureAnswers)\n ? configureAnswers['configure'] === 'yes'\n : false;\n\n if (!shouldConfigure) {\n return 'Cancelled. You can configure later using: /provider set';\n }\n\n // Configure the provider\n const configResult = await configureProvider(context, providerId);\n\n // After configuration, check if it's now configured\n const updatedConfig = context.getConfig();\n const updatedProviderConfig = updatedConfig?.providers?.[providerId as keyof typeof updatedConfig.providers];\n if (!updatedProviderConfig || !provider.isConfigured(updatedProviderConfig)) {\n return `${configResult}\\n\\nProvider still not fully configured. Please continue configuration with: /provider set ${providerId}`;\n }\n\n // Continue with \"use\" flow - update to use this provider\n context.sendMessage(configResult);\n const providerConfigToUse = updatedProviderConfig;\n\n // Now proceed to set as default provider\n const newConfig = {\n ...updatedConfig!,\n defaultProvider: providerId,\n };\n\n // Get default model and update config\n const { getDefaultModel } = await import('../../../core/session-service.js');\n const defaultModel = await getDefaultModel(providerId as any, providerConfigToUse);\n if (!defaultModel) {\n return `Provider configured but failed to get default model for ${AI_PROVIDERS[providerId as keyof typeof AI_PROVIDERS].name}`;\n }\n\n // Save default model to config\n newConfig.providers = {\n ...newConfig.providers,\n [providerId]: {\n ...providerConfigToUse,\n 'default-model': defaultModel,\n },\n };\n\n context.setAIConfig(newConfig);\n await context.saveConfig(newConfig);\n\n // Update UI state\n context.setUISelectedProvider(providerId as ProviderId);\n context.setUISelectedModel(defaultModel);\n\n // Update current session's provider (preserve history)\n const currentSessionId = context.getCurrentSessionId();\n if (currentSessionId) {\n context.updateSessionProvider(currentSessionId, providerId, defaultModel);\n } else {\n // Fallback: create new session if no active session\n context.createSession(providerId, defaultModel);\n }\n\n return `Now using ${AI_PROVIDERS[providerId as keyof typeof AI_PROVIDERS].name} with model: ${defaultModel}`;\n }\n\n const newConfig = {\n ...aiConfig!,\n defaultProvider: providerId,\n };\n\n // Get default model and update config\n const { getDefaultModel } = await import('../../../core/session-service.js');\n const defaultModel = await getDefaultModel(providerId as any, providerConfig);\n if (!defaultModel) {\n return `Failed to get default model for ${AI_PROVIDERS[providerId as keyof typeof AI_PROVIDERS].name}`;\n }\n\n // Save default model to config\n newConfig.providers = {\n ...newConfig.providers,\n [providerId]: {\n ...providerConfig,\n 'default-model': defaultModel,\n },\n };\n\n context.setAIConfig(newConfig);\n await context.saveConfig(newConfig);\n\n // Update current session's provider (preserve history)\n const currentSessionId = context.getCurrentSessionId();\n if (currentSessionId) {\n context.updateSessionProvider(currentSessionId, providerId, defaultModel);\n } else {\n // Fallback: create new session if no active session\n context.createSession(providerId, defaultModel);\n }\n\n return `Switched to ${AI_PROVIDERS[providerId as keyof typeof AI_PROVIDERS].name}`;\n }\n\n // Case 3: /provider use [name] - switch to specific provider\n if (context.args.length === 2 && context.args[0] === 'use') {\n const providerId = context.args[1];\n\n if (!(providerId in AI_PROVIDERS)) {\n return `Invalid provider: ${providerId}. Available: ${Object.keys(AI_PROVIDERS).join(', ')}`;\n }\n\n const { getProvider } = await import('../../../providers/index.js');\n const provider = getProvider(providerId as any);\n const providerConfig = aiConfig?.providers?.[providerId as keyof typeof aiConfig.providers];\n\n if (!providerConfig || !provider.isConfigured(providerConfig)) {\n return `${AI_PROVIDERS[providerId as keyof typeof AI_PROVIDERS].name} is not configured. Use: /provider set ${providerId}`;\n }\n\n const newConfig = {\n ...aiConfig!,\n defaultProvider: providerId,\n };\n\n // Get default model and update config\n const { getDefaultModel } = await import('../../../core/session-service.js');\n const defaultModel = await getDefaultModel(providerId as any, providerConfig);\n if (!defaultModel) {\n return `Failed to get default model for ${AI_PROVIDERS[providerId as keyof typeof AI_PROVIDERS].name}`;\n }\n\n // Save default model to config\n newConfig.providers = {\n ...newConfig.providers,\n [providerId]: {\n ...providerConfig,\n 'default-model': defaultModel,\n },\n };\n\n context.setAIConfig(newConfig);\n await context.saveConfig(newConfig);\n\n // Update current session's provider (preserve history)\n const currentSessionId = context.getCurrentSessionId();\n if (currentSessionId) {\n context.updateSessionProvider(currentSessionId, providerId, defaultModel);\n } else {\n // Fallback: create new session if no active session\n context.createSession(providerId, defaultModel);\n }\n\n return `Switched to ${AI_PROVIDERS[providerId as keyof typeof AI_PROVIDERS].name}`;\n }\n\n // Case 4: /provider set - ask which provider to configure\n if (context.args.length === 1 && context.args[0] === 'set') {\n const providerOptions = Object.values(AI_PROVIDERS).map((p) => ({\n label: p.name,\n value: p.id,\n }));\n\n context.sendMessage('Which provider do you want to configure?');\n const providerAnswers = await context.waitForInput({\n type: 'selection',\n questions: [\n {\n id: 'provider',\n question: 'Select provider:',\n options: providerOptions,\n },\n ],\n });\n\n const providerId = typeof providerAnswers === 'object' && !Array.isArray(providerAnswers) ? providerAnswers['provider'] : '';\n if (!providerId) {\n return 'Provider selection cancelled.';\n }\n\n // Ask for key\n const { getProvider } = await import('../../../providers/index.js');\n const provider = getProvider(providerId as any);\n const schema = provider.getConfigSchema();\n\n const availableKeys = schema.map(field => ({\n label: field.label,\n value: field.key,\n }));\n\n\n context.sendMessage(`Configure ${AI_PROVIDERS[providerId as keyof typeof AI_PROVIDERS].name} - Select setting:`);\n const keyAnswers = await context.waitForInput({\n type: 'selection',\n questions: [\n {\n id: 'key',\n question: 'Which setting do you want to configure?',\n options: availableKeys,\n },\n ],\n });\n\n const key = typeof keyAnswers === 'object' && !Array.isArray(keyAnswers) ? keyAnswers['key'] : '';\n if (!key) {\n return 'Configuration cancelled.';\n }\n\n // Ask for value - check if boolean type for selection\n {\n const field = schema.find(f => f.key === key);\n let value: string;\n\n if (field?.type === 'boolean') {\n context.sendMessage(`Select value for ${key}:`);\n const boolAnswers = await context.waitForInput({\n type: 'selection',\n questions: [\n {\n id: 'value',\n question: `${field.label}:`,\n options: [\n { label: 'true', value: 'true' },\n { label: 'false', value: 'false' },\n ],\n },\n ],\n });\n value = typeof boolAnswers === 'object' && !Array.isArray(boolAnswers) ? boolAnswers['value'] : '';\n } else {\n context.sendMessage(`Enter value for ${key}:`);\n const valueAnswers = await context.waitForInput({\n type: 'text',\n placeholder: `Enter ${key}...`,\n });\n value = typeof valueAnswers === 'string' ? valueAnswers : '';\n }\n\n if (!value) {\n return 'Value is required.';\n }\n\n // Update config\n const newConfig = {\n ...aiConfig!,\n providers: {\n ...aiConfig!.providers,\n [providerId]: {\n ...aiConfig!.providers?.[providerId as keyof typeof aiConfig.providers],\n [key]: value,\n },\n },\n };\n\n if (!aiConfig?.defaultProvider) {\n newConfig.defaultProvider = providerId;\n }\n\n context.setAIConfig(newConfig);\n await context.saveConfig(newConfig);\n\n // Mask secret values in response\n const displayField = schema.find(f => f.key === key);\n const displayValue = displayField?.secret ? '***' : value;\n\n return `Set ${AI_PROVIDERS[providerId as keyof typeof AI_PROVIDERS].name} ${key} to: ${displayValue}`;\n }\n }\n\n // Case 5: /provider set [name] - ask which key to set\n if (context.args.length === 2 && context.args[0] === 'set') {\n const providerId = context.args[1];\n\n if (!(providerId in AI_PROVIDERS)) {\n return `Invalid provider: ${providerId}. Available: ${Object.keys(AI_PROVIDERS).join(', ')}`;\n }\n\n // Ask for key\n const { getProvider } = await import('../../../providers/index.js');\n const provider = getProvider(providerId as any);\n const schema = provider.getConfigSchema();\n\n const availableKeys = schema.map(field => ({\n label: field.label,\n value: field.key,\n }));\n\n\n context.sendMessage(`Configure ${AI_PROVIDERS[providerId as keyof typeof AI_PROVIDERS].name} - Select setting:`);\n const keyAnswers = await context.waitForInput({\n type: 'selection',\n questions: [\n {\n id: 'key',\n question: 'Which setting do you want to configure?',\n options: availableKeys,\n },\n ],\n });\n\n const key = typeof keyAnswers === 'object' && !Array.isArray(keyAnswers) ? keyAnswers['key'] : '';\n if (!key) {\n return 'Configuration cancelled.';\n }\n\n // Ask for value - check if boolean type for selection\n {\n const field = schema.find(f => f.key === key);\n let value: string;\n\n if (field?.type === 'boolean') {\n context.sendMessage(`Select value for ${key}:`);\n const boolAnswers = await context.waitForInput({\n type: 'selection',\n questions: [\n {\n id: 'value',\n question: `${field.label}:`,\n options: [\n { label: 'true', value: 'true' },\n { label: 'false', value: 'false' },\n ],\n },\n ],\n });\n value = typeof boolAnswers === 'object' && !Array.isArray(boolAnswers) ? boolAnswers['value'] : '';\n } else {\n context.sendMessage(`Enter value for ${key}:`);\n const valueAnswers = await context.waitForInput({\n type: 'text',\n placeholder: `Enter ${key}...`,\n });\n value = typeof valueAnswers === 'string' ? valueAnswers : '';\n }\n\n if (!value) {\n return 'Value is required.';\n }\n\n // Update config\n const newConfig = {\n ...aiConfig!,\n providers: {\n ...aiConfig!.providers,\n [providerId]: {\n ...aiConfig!.providers?.[providerId as keyof typeof aiConfig.providers],\n [key]: value,\n },\n },\n };\n\n if (!aiConfig?.defaultProvider) {\n newConfig.defaultProvider = providerId;\n }\n\n context.setAIConfig(newConfig);\n await context.saveConfig(newConfig);\n\n // Mask secret values in response\n const displayField = schema.find(f => f.key === key);\n const displayValue = displayField?.secret ? '***' : value;\n\n return `Set ${AI_PROVIDERS[providerId as keyof typeof AI_PROVIDERS].name} ${key} to: ${displayValue}`;\n }\n }\n\n // Case 6: /provider set [name] [key] [value] - direct configuration\n if (context.args.length >= 4 && context.args[0] === 'set') {\n const providerId = context.args[1];\n const key = context.args[2];\n const value = context.args.slice(3).join(' ');\n\n if (!(providerId in AI_PROVIDERS)) {\n return `Invalid provider: ${providerId}. Available: ${Object.keys(AI_PROVIDERS).join(', ')}`;\n }\n\n // Get valid keys from provider schema\n const { getProvider } = await import('../../../providers/index.js');\n const provider = getProvider(providerId as any);\n const schema = provider.getConfigSchema();\n\n const validKeys = schema.map(f => f.key);\n if (!validKeys.includes(key)) {\n return `Invalid key: ${key}. Valid keys for ${providerId}: ${validKeys.join(', ')}`;\n }\n\n const newConfig = {\n ...aiConfig!,\n providers: {\n ...aiConfig!.providers,\n [providerId]: {\n ...aiConfig!.providers?.[providerId as keyof typeof aiConfig.providers],\n [key]: value,\n },\n },\n };\n\n if (!aiConfig?.defaultProvider) {\n newConfig.defaultProvider = providerId;\n }\n\n context.setAIConfig(newConfig);\n await context.saveConfig(newConfig);\n\n // Mask secret values in response\n const field = schema.find(f => f.key === key);\n const displayValue = field?.secret ? '***' : value;\n\n return `Set ${AI_PROVIDERS[providerId as keyof typeof AI_PROVIDERS].name} ${key} to: ${displayValue}`;\n }\n\n return 'Usage:\\n /provider - Select action and provider\\n /provider use - Select provider to use\\n /provider use [name] - Switch to provider\\n /provider set - Configure a provider\\n /provider set [name] - Configure specific provider\\n /provider set [name] [key] [value] - Set provider config directly';\n },\n};\n\nexport default providerCommand;\n",
7
+ "/**\n * Model Command\n * Switch AI model\n */\n\nimport type { Command } from '../types.js';\n\nexport const modelCommand: Command = {\n id: 'model',\n label: '/model',\n description: 'Switch AI model',\n args: [\n {\n name: 'model-name',\n description: 'Model to switch to',\n required: false,\n loadOptions: async (previousArgs, context) => {\n try {\n // Get AI config from context\n const aiConfig = context?.getConfig();\n if (!aiConfig?.providers) {\n return [];\n }\n\n // Get current session's provider\n const currentSession = context?.getCurrentSession();\n const currentProviderId = currentSession?.provider || aiConfig.defaultProvider;\n\n if (!currentProviderId) {\n return [];\n }\n\n // Fetch models from current provider only\n const config = aiConfig.providers[currentProviderId];\n if (!config) {\n return [];\n }\n\n try {\n const { fetchModels } = await import('../../../utils/ai-model-fetcher.js');\n const models = await fetchModels(currentProviderId as any, config);\n return models.map(m => ({\n id: m.id,\n label: m.name,\n value: m.id,\n }));\n } catch (error) {\n if (context) {\n context.addLog(`Failed to fetch models for ${currentProviderId}: ${error instanceof Error ? error.message : String(error)}`);\n }\n return [];\n }\n } catch (error) {\n if (context) {\n context.addLog(`Error loading models: ${error instanceof Error ? error.message : String(error)}`);\n }\n return [];\n }\n },\n },\n ],\n execute: async (context) => {\n let modelId: string;\n\n // If no args provided, ask user to select\n if (context.args.length === 0) {\n try {\n // Load models from current provider only\n const aiConfig = context.getConfig();\n if (!aiConfig?.providers) {\n return 'No providers configured. Please configure a provider first.';\n }\n\n // Get current session's provider\n const currentSession = context.getCurrentSession();\n const currentProviderId = currentSession?.provider || aiConfig.defaultProvider;\n\n if (!currentProviderId) {\n return 'No provider selected. Use /provider to select a provider first.';\n }\n\n const config = aiConfig.providers[currentProviderId];\n if (!config) {\n return `Provider ${currentProviderId} is not configured.`;\n }\n\n // Fetch models from current provider\n let allModels: Array<{ label: string; value: string }> = [];\n try {\n const { fetchModels } = await import('../../../utils/ai-model-fetcher.js');\n const models = await fetchModels(currentProviderId as any, config);\n allModels = models.map(m => ({ label: m.name, value: m.id }));\n context.addLog(`Loaded ${models.length} models from ${currentProviderId}`);\n } catch (error) {\n const errorMsg = error instanceof Error ? error.message : String(error);\n context.addLog(`Failed to fetch models for ${currentProviderId}: ${errorMsg}`);\n return `Failed to load models from ${currentProviderId}: ${errorMsg}`;\n }\n\n if (allModels.length === 0) {\n return `No models available for ${currentProviderId}`;\n }\n\n // Ask user to select\n context.sendMessage('Which model do you want to use?');\n const answers = await context.waitForInput({\n type: 'selection',\n questions: [\n {\n id: 'model',\n question: 'Which model do you want to use?',\n options: allModels,\n },\n ],\n });\n\n // Extract answer from Record\n modelId = typeof answers === 'object' && !Array.isArray(answers) ? answers['model'] : '';\n } catch (error) {\n return `Failed to load models: ${error instanceof Error ? error.message : String(error)}`;\n }\n } else {\n modelId = context.args[0];\n }\n\n const currentSession = context.getCurrentSession();\n const aiConfig = context.getConfig();\n const provider = currentSession?.provider || aiConfig?.defaultProvider;\n\n if (!provider) {\n return 'No provider configured. Please configure a provider first.';\n }\n\n // Update model and save to provider config\n const newConfig = {\n ...aiConfig!,\n defaultModel: modelId,\n providers: {\n ...aiConfig!.providers,\n [provider]: {\n ...aiConfig!.providers?.[provider],\n 'default-model': modelId,\n },\n },\n };\n context.setAIConfig(newConfig);\n\n // Save config to file\n await context.saveConfig(newConfig);\n\n // Update current session's model (preserve history)\n const currentSessionId = context.getCurrentSessionId();\n if (currentSessionId) {\n context.updateSessionModel(currentSessionId, modelId);\n } else {\n // Fallback: create new session if no active session\n context.createSession(provider, modelId);\n }\n\n return `Switched to model: ${modelId}`;\n },\n};\n\nexport default modelCommand;\n",
8
+ "/**\n * Logs Command\n * View debug logs\n */\n\nimport type { Command } from '../types.js';\n\nexport const logsCommand: Command = {\n id: 'logs',\n label: '/logs',\n description: 'View debug logs',\n execute: async (context) => {\n context.navigateTo('logs');\n return 'Opening debug logs...';\n },\n};\n\nexport default logsCommand;\n",
9
+ "/**\n * Help Command\n * Show available commands\n */\n\nimport type { Command } from '../types.js';\n\nexport const helpCommand: Command = {\n id: 'help',\n label: '/help',\n description: 'Show available commands',\n execute: async (context) => {\n const { commands } = await import('../registry.js');\n const commandList = commands\n .map((cmd) => {\n const argsText = cmd.args\n ? ` ${cmd.args.map((a) => `[${a.name}]`).join(' ')}`\n : '';\n return `${cmd.label}${argsText} - ${cmd.description}`;\n })\n .join('\\n');\n return `Available commands:\\n${commandList}`;\n },\n};\n\nexport default helpCommand;\n",
10
+ "/**\n * Survey Command\n * Test multi-selection feature\n */\n\nimport type { Command } from '../types.js';\n\nexport const surveyCommand: Command = {\n id: 'survey',\n label: '/survey',\n description: 'Test multi-question selection (demo)',\n execute: async (context) => {\n context.sendMessage('Let me ask you a few questions...');\n\n const answers = await context.waitForInput({\n type: 'selection',\n questions: [\n {\n id: 'language',\n question: 'What is your favorite programming language?',\n options: [\n { label: 'TypeScript' },\n { label: 'JavaScript' },\n { label: 'Python' },\n { label: 'Rust' },\n { label: 'Go' },\n ],\n },\n {\n id: 'framework',\n question: 'Which framework do you prefer?',\n options: [\n { label: 'React' },\n { label: 'Vue' },\n { label: 'Angular' },\n { label: 'Svelte' },\n { label: 'Solid' },\n ],\n },\n {\n id: 'editor',\n question: 'What is your favorite code editor?',\n options: [\n { label: 'Visual Studio Code' },\n { label: 'Vim/Neovim' },\n { label: 'Emacs' },\n { label: 'Sublime Text' },\n { label: 'Atom' },\n ],\n },\n ],\n });\n\n if (typeof answers === 'object' && !Array.isArray(answers)) {\n const summary = Object.entries(answers)\n .map(([key, value]) => `${key}: ${value}`)\n .join(', ');\n return `Survey completed! Your answers: ${summary}`;\n }\n\n return 'Survey cancelled.';\n },\n};\n\nexport default surveyCommand;\n",
11
+ "/**\n * Context Command\n * Display context window usage\n */\n\nimport type { Command } from '../types.js';\n\nexport const contextCommand: Command = {\n id: 'context',\n label: '/context',\n description: 'Display context window usage and token breakdown',\n execute: async (context) => {\n const { countTokens, formatTokenCount } = await import('../../../utils/token-counter.js');\n const { getSystemPrompt } = await import('../../../core/ai-sdk.js');\n const { getAISDKTools } = await import('../../../tools/index.js');\n\n const currentSession = context.getCurrentSession();\n if (!currentSession) {\n return 'No active session. Start chatting first to see context usage.';\n }\n\n const modelName = currentSession.model;\n\n // Get model-specific context limit\n const getContextLimit = (model: string): number => {\n // Default limits for common models\n if (model.includes('gpt-4')) {\n if (model.includes('32k') || model.includes('turbo')) return 128000;\n if (model.includes('vision')) return 128000;\n return 8192; // Original GPT-4\n }\n if (model.includes('gpt-3.5')) {\n if (model.includes('16k')) return 16385;\n return 4096; // Original GPT-3.5\n }\n // Claude models\n if (model.includes('claude-3')) {\n if (model.includes('opus')) return 200000;\n if (model.includes('sonnet')) return 200000;\n if (model.includes('haiku')) return 200000;\n }\n // Default fallback\n return 200000;\n };\n\n const contextLimit = getContextLimit(modelName);\n\n // Calculate token counts\n context.addLog(`[Context] Calculating token counts for ${modelName} (limit: ${formatTokenCount(contextLimit)})...`);\n\n // System prompt tokens - use the actual system prompt that gets sent\n const systemPrompt = getSystemPrompt();\n const systemPromptTokens = await countTokens(systemPrompt, modelName);\n\n // Also calculate breakdown of system prompt components for debugging\n const { getEnabledRulesContent } = await import('../../../core/rule-manager.js');\n const { getCurrentSystemPrompt } = await import('../../../core/agent-manager.js');\n const BASE_SYSTEM_PROMPT = `You are Sylphx, an AI development assistant.`;\n\n let systemPromptBreakdown: Record<string, number> = {};\n try {\n systemPromptBreakdown['Base prompt'] = await countTokens(BASE_SYSTEM_PROMPT, modelName);\n\n const rulesContent = getEnabledRulesContent();\n if (rulesContent) {\n systemPromptBreakdown['Rules'] = await countTokens(rulesContent, modelName);\n }\n\n const agentPrompt = getCurrentSystemPrompt();\n systemPromptBreakdown['Agent prompt'] = await countTokens(agentPrompt, modelName);\n } catch (error) {\n context.addLog(`[Context] Failed to calculate system prompt breakdown: ${error}`);\n }\n\n // System tools tokens (calculate individual tool tokens)\n const tools = getAISDKTools();\n const toolTokens: Record<string, number> = {};\n let toolsTokensTotal = 0;\n\n for (const [toolName, toolDef] of Object.entries(tools)) {\n // Create a more accurate representation of how tools are sent to the AI\n // Tools are typically sent as function definitions with name, description, and parameters\n const toolRepresentation = {\n name: toolName,\n description: toolDef.description || '',\n parameters: toolDef.parameters || {}\n };\n const toolJson = JSON.stringify(toolRepresentation, null, 0); // No spaces for compact representation\n const tokens = await countTokens(toolJson, modelName);\n toolTokens[toolName] = tokens;\n toolsTokensTotal += tokens;\n }\n\n // Messages tokens - include attachments and parts for accurate calculation\n let messagesTokens = 0;\n for (const msg of currentSession.messages) {\n let msgText = msg.content;\n\n // Add attachment content if present (as it would be sent to AI)\n if (msg.attachments && msg.attachments.length > 0) {\n try {\n const { readFile } = await import('node:fs/promises');\n const fileContents = await Promise.all(\n msg.attachments.map(async (att) => {\n try {\n const content = await readFile(att.path, 'utf8');\n return { path: att.relativePath, content };\n } catch {\n return { path: att.relativePath, content: '[Error reading file]' };\n }\n })\n );\n\n const fileContentsText = fileContents\n .map((f) => `\\n\\n<file path=\"${f.path}\">\\n${f.content}\\n</file>`)\n .join('');\n\n msgText += fileContentsText;\n } catch (error) {\n // If we can't read attachments, just count the content we have\n console.warn('[Context] Failed to read attachments for token count:', error);\n }\n }\n\n const msgTokens = await countTokens(msgText, modelName);\n messagesTokens += msgTokens;\n }\n\n // Calculate totals and percentages\n const usedTokens = systemPromptTokens + toolsTokensTotal + messagesTokens;\n const freeTokens = contextLimit - usedTokens;\n const autocompactBuffer = Math.floor(contextLimit * 0.225); // 22.5%\n const realFreeTokens = freeTokens - autocompactBuffer;\n\n const usedPercent = ((usedTokens / contextLimit) * 100).toFixed(1);\n const systemPromptPercent = ((systemPromptTokens / contextLimit) * 100).toFixed(1);\n const toolsPercent = ((toolsTokensTotal / contextLimit) * 100).toFixed(1);\n const messagesPercent = ((messagesTokens / contextLimit) * 100).toFixed(1);\n const freePercent = ((realFreeTokens / contextLimit) * 100).toFixed(1);\n const bufferPercent = ((autocompactBuffer / contextLimit) * 100).toFixed(1);\n\n // Create visual bar chart (30 blocks for better resolution)\n const createBarChart = (): string[] => {\n const totalBlocks = 30;\n const systemPromptBlocks = Math.floor((systemPromptTokens / contextLimit) * totalBlocks);\n const toolsBlocks = Math.floor((toolsTokensTotal / contextLimit) * totalBlocks);\n const messagesBlocks = Math.floor((messagesTokens / contextLimit) * totalBlocks);\n const usedBlocks = systemPromptBlocks + toolsBlocks + messagesBlocks;\n const freeBlocks = totalBlocks - usedBlocks;\n\n // Line 1: System prompt (blue)\n const line1 = '█'.repeat(systemPromptBlocks) + '░'.repeat(totalBlocks - systemPromptBlocks);\n\n // Line 2: Tools (green)\n const line2 = '░'.repeat(systemPromptBlocks) + '█'.repeat(toolsBlocks) + '░'.repeat(totalBlocks - systemPromptBlocks - toolsBlocks);\n\n // Line 3: Messages (yellow)\n const line3 = '░'.repeat(systemPromptBlocks + toolsBlocks) + '█'.repeat(messagesBlocks) + '░'.repeat(freeBlocks);\n\n return [line1, line2, line3];\n };\n\n const [bar1, bar2, bar3] = createBarChart();\n\n // Format tool list with tokens (sorted by size)\n const toolList = Object.entries(toolTokens)\n .sort((a, b) => b[1] - a[1])\n .map(([name, tokens]) => ` ${name}: ${formatTokenCount(tokens)} tokens`)\n .join('\\n');\n\n // Format system prompt breakdown\n const systemPromptBreakdownText = Object.entries(systemPromptBreakdown)\n .map(([name, tokens]) => ` ${name}: ${formatTokenCount(tokens)} tokens`)\n .join('\\n');\n\n // Format output with clean visual hierarchy\n const output = `\nContext Usage: ${formatTokenCount(usedTokens)}/${formatTokenCount(contextLimit)} tokens (${usedPercent}%)\nModel: ${modelName}\n\nVisual Breakdown:\n ${bar1} System prompt: ${formatTokenCount(systemPromptTokens)} (${systemPromptPercent}%)\n ${bar2} Tools: ${formatTokenCount(toolsTokensTotal)} (${toolsPercent}%)\n ${bar3} Messages: ${formatTokenCount(messagesTokens)} (${messagesPercent}%)\n\nAvailable Space:\n • Free: ${formatTokenCount(realFreeTokens)} tokens (${freePercent}%)\n • Buffer: ${formatTokenCount(autocompactBuffer)} tokens (${bufferPercent}%)\n\nSystem Prompt Breakdown:\n${systemPromptBreakdownText}\n\nSystem Tools (${Object.keys(tools).length} total):\n${toolList}\n`.trim();\n\n return output;\n },\n};\n\nexport default contextCommand;\n",
12
+ "/**\n * Sessions Command\n * Switch between chat sessions\n */\n\nimport type { Command } from '../types.js';\n\nexport const sessionsCommand: Command = {\n id: 'sessions',\n label: '/sessions',\n description: 'View and switch between chat sessions',\n execute: async (context) => {\n const { formatSessionDisplay } = await import('../../../utils/session-title.js');\n const sessions = context.getSessions();\n\n if (sessions.length === 0) {\n return 'No sessions available. Start chatting to create a session.';\n }\n\n const currentSessionId = context.getCurrentSessionId();\n\n // Sort sessions by updated time (most recent first), then by created time\n const sortedSessions = [...sessions].sort((a, b) => {\n // First compare by updated time (descending)\n const updateDiff = b.updated - a.updated;\n if (updateDiff !== 0) return updateDiff;\n \n // If updated is same, compare by created time (descending)\n return b.created - a.created;\n });\n\n // Ask user to select a session\n const sessionOptions = sortedSessions.map((session) => {\n const isCurrent = session.id === currentSessionId;\n const displayText = formatSessionDisplay(session.title, session.created);\n const label = isCurrent ? `${displayText} (current)` : displayText;\n\n return {\n label,\n value: session.id,\n };\n });\n\n context.sendMessage('Select a session to switch to:');\n const answers = await context.waitForInput({\n type: 'selection',\n questions: [\n {\n id: 'session',\n question: 'Which session do you want to switch to?',\n options: sessionOptions,\n },\n ],\n });\n\n const selectedSessionId = typeof answers === 'object' && !Array.isArray(answers) ? answers['session'] : '';\n\n if (!selectedSessionId) {\n return 'Session selection cancelled.';\n }\n\n // Switch to selected session\n context.setCurrentSession(selectedSessionId);\n\n const selectedSession = sortedSessions.find((s) => s.id === selectedSessionId);\n const displayName = selectedSession\n ? formatSessionDisplay(selectedSession.title, selectedSession.created)\n : 'Unknown session';\n\n return `Switched to session: ${displayName}`;\n },\n};\n\nexport default sessionsCommand;\n",
13
+ "/**\n * New Command\n * Create a new chat session\n */\n\nimport type { Command } from '../types.js';\n\nexport const newCommand: Command = {\n id: 'new',\n label: '/new',\n description: 'Create a new chat session',\n execute: async (context) => {\n const aiConfig = context.getConfig();\n\n if (!aiConfig?.defaultProvider || !aiConfig?.defaultModel) {\n return 'No AI provider configured. Use /provider to configure a provider first.';\n }\n\n // Create new session with current provider and model\n const newSessionId = context.createSession(aiConfig.defaultProvider, aiConfig.defaultModel);\n context.setCurrentSession(newSessionId);\n\n return `Created new chat session with ${aiConfig.defaultProvider} (${aiConfig.defaultModel})`;\n },\n};\n\nexport default newCommand;\n",
14
+ "/**\n * Bashes Command\n * Manage background bash processes\n */\n\nimport type { Command } from '../types.js';\n\nexport const bashesCommand: Command = {\n id: 'bashes',\n label: '/bashes',\n description: 'Manage background bash processes',\n execute: async (context) => {\n const { bashManager } = await import('../../../tools/bash-manager.js');\n const processes = bashManager.list();\n\n if (processes.length === 0) {\n return 'No background bash processes found.';\n }\n\n // Format process list\n const processOptions = processes.map((proc) => {\n const status = proc.isRunning ? '[*] Running' : '[x] Completed';\n const duration = Math.floor(proc.duration / 1000);\n const durationStr = duration > 60\n ? `${Math.floor(duration / 60)}m ${duration % 60}s`\n : `${duration}s`;\n\n return {\n label: `${status} [${durationStr}] ${proc.command}`,\n value: proc.id,\n };\n });\n\n context.sendMessage(`Found ${processes.length} background bash process${processes.length !== 1 ? 'es' : ''}:`);\n const answers = await context.waitForInput({\n type: 'selection',\n questions: [\n {\n id: 'action',\n question: 'What do you want to do?',\n options: [\n { label: 'View details', value: 'view' },\n { label: 'Kill a process', value: 'kill' },\n { label: 'Cancel', value: 'cancel' },\n ],\n },\n ],\n });\n\n const action = typeof answers === 'object' && !Array.isArray(answers) ? answers['action'] : '';\n\n if (!action || action === 'cancel') {\n return 'Cancelled.';\n }\n\n // Select process\n context.sendMessage('Select a process:');\n const processAnswers = await context.waitForInput({\n type: 'selection',\n questions: [\n {\n id: 'process',\n question: 'Which process?',\n options: processOptions,\n },\n ],\n });\n\n const selectedId = typeof processAnswers === 'object' && !Array.isArray(processAnswers)\n ? processAnswers['process']\n : '';\n\n if (!selectedId) {\n return 'No process selected.';\n }\n\n if (action === 'view') {\n const output = bashManager.getOutput(selectedId);\n if (!output) {\n return 'Process not found.';\n }\n\n const status = output.isRunning ? 'Running' : `Completed (exit code: ${output.exitCode})`;\n const duration = Math.floor(output.duration / 1000);\n\n let result = `\nProcess: ${selectedId}\nCommand: ${output.command}\nStatus: ${status}\nDuration: ${duration}s\n\n=== stdout ===\n${output.stdout || '(empty)'}\n`;\n\n if (output.stderr) {\n result += `\n=== stderr ===\n${output.stderr}`;\n }\n\n return result.trim();\n }\n\n if (action === 'kill') {\n const success = bashManager.kill(selectedId);\n if (!success) {\n return 'Failed to kill process (not found).';\n }\n\n return `Sent termination signal to process ${selectedId}`;\n }\n\n return 'Unknown action.';\n },\n};\n\nexport default bashesCommand;\n",
15
+ "/**\n * Agent Command\n * Switch between agents\n */\n\nimport type { Command } from '../types.js';\n\nexport const agentCommand: Command = {\n id: 'agent',\n label: '/agent',\n description: 'Switch between AI agents with different system prompts',\n args: [\n {\n name: 'agent-name',\n description: 'Agent to switch to (coder, planner, etc.)',\n required: false,\n loadOptions: async (previousArgs) => {\n const { getAllAgents } = await import('../../../core/agent-manager.js');\n const agents = getAllAgents();\n return agents.map((agent) => ({\n id: agent.id,\n label: `${agent.metadata.name} - ${agent.metadata.description}`,\n value: agent.id,\n }));\n },\n },\n ],\n execute: async (context) => {\n const { getAllAgents, getCurrentAgent, switchAgent } = await import('../../../core/agent-manager.js');\n\n let agentId: string;\n\n // If no args provided, ask user to select\n if (context.args.length === 0) {\n const agents = getAllAgents();\n const currentAgent = getCurrentAgent();\n\n if (agents.length === 0) {\n return 'No agents available.';\n }\n\n // Create options with current agent indicator\n const agentOptions = agents.map((agent) => {\n const isCurrent = agent.id === currentAgent.id;\n const label = isCurrent\n ? `${agent.metadata.name} (current) - ${agent.metadata.description}`\n : `${agent.metadata.name} - ${agent.metadata.description}`;\n\n return {\n label,\n value: agent.id,\n };\n });\n\n context.sendMessage('Which agent do you want to use?');\n const answers = await context.waitForInput({\n type: 'selection',\n questions: [\n {\n id: 'agent',\n question: 'Select agent:',\n options: agentOptions,\n },\n ],\n });\n\n agentId = typeof answers === 'object' && !Array.isArray(answers) ? answers['agent'] : '';\n\n if (!agentId) {\n return 'Agent selection cancelled.';\n }\n } else {\n agentId = context.args[0];\n }\n\n // Switch to selected agent\n const success = switchAgent(agentId);\n\n if (!success) {\n return `Agent not found: ${agentId}. Use /agent to see available agents.`;\n }\n\n const { getAgentById } = await import('../../../core/agent-manager.js');\n const selectedAgent = getAgentById(agentId);\n\n if (!selectedAgent) {\n return 'Failed to get agent details.';\n }\n\n return `Switched to agent: ${selectedAgent.metadata.name}\\n${selectedAgent.metadata.description}`;\n },\n};\n\nexport default agentCommand;\n",
16
+ "/**\n * Rules Command\n * Select enabled shared system prompt rules\n */\n\nimport type { Command } from '../types.js';\n\nexport const rulesCommand: Command = {\n id: 'rules',\n label: '/rules',\n description: 'Select enabled shared system prompt rules',\n execute: async (context) => {\n const { getAllRules, getEnabledRuleIds, setEnabledRules } = await import('../../../core/rule-manager.js');\n\n const allRules = getAllRules();\n const enabledIds = getEnabledRuleIds();\n\n if (allRules.length === 0) {\n return 'No rules available.';\n }\n\n // Create options without status indicators (checkboxes will show selection)\n const ruleOptions = allRules.map((rule) => ({\n label: `${rule.metadata.name} - ${rule.metadata.description}`,\n value: rule.id,\n }));\n\n context.sendMessage(`Select rules to enable (currently ${enabledIds.length} enabled):`);\n const answers = await context.waitForInput({\n type: 'selection',\n questions: [\n {\n id: 'rules',\n question: 'Select all rules you want to enable:',\n options: ruleOptions,\n multiSelect: true,\n preSelected: enabledIds, // Pre-select currently enabled rules\n },\n ],\n });\n\n // Extract selected rule IDs\n const selectedRuleIds = typeof answers === 'object' && !Array.isArray(answers)\n ? (Array.isArray(answers['rules']) ? answers['rules'] : [])\n : [];\n\n if (!Array.isArray(selectedRuleIds)) {\n return 'Rule selection cancelled.';\n }\n\n // Update enabled rules\n const success = setEnabledRules(selectedRuleIds);\n\n if (!success) {\n return 'Failed to update rules.';\n }\n\n // Build summary message\n const enabledCount = selectedRuleIds.length;\n const disabledCount = allRules.length - enabledCount;\n\n const enabledRules = allRules.filter((r) => selectedRuleIds.includes(r.id));\n const enabledNames = enabledRules.map((r) => ` • ${r.metadata.name}`).join('\\n');\n\n return `Updated rules configuration:\n${enabledCount} enabled, ${disabledCount} disabled\n\nEnabled rules:\n${enabledNames || ' (none)'}`;\n },\n};\n\nexport default rulesCommand;\n",
17
+ "/**\n * Compact Command\n * Summarize current session and start fresh\n */\n\nimport type { Command } from '../types.js';\n\nexport const compactCommand: Command = {\n id: 'compact',\n label: '/compact',\n description: 'Summarize current session and create a new session with the summary',\n execute: async (context) => {\n const currentSession = context.getCurrentSession();\n\n if (!currentSession) {\n return 'No active session to compact.';\n }\n\n if (currentSession.messages.length === 0) {\n return 'Current session has no messages to compact.';\n }\n\n const aiConfig = context.getConfig();\n if (!aiConfig?.defaultProvider || !aiConfig?.defaultModel) {\n return 'No AI provider configured. Use /provider to configure a provider first.';\n }\n\n context.sendMessage('Analyzing conversation and creating detailed summary...');\n\n try {\n // Import necessary modules\n const { getProvider } = await import('../../../providers/index.js');\n const { streamText } = await import('ai');\n const { getSystemPrompt } = await import('../../../core/ai-sdk.js');\n\n // Get provider and model\n const provider = getProvider(currentSession.provider);\n const providerConfig = aiConfig.providers?.[currentSession.provider];\n\n if (!providerConfig || !provider.isConfigured(providerConfig)) {\n return `Provider ${currentSession.provider} is not properly configured.`;\n }\n\n const model = provider.createClient(providerConfig, currentSession.model);\n\n // Build conversation history for summarization\n const conversationHistory = currentSession.messages.map((msg) => {\n // Extract text content from MessagePart array\n const textParts = msg.content\n .filter((part) => part.type === 'text')\n .map((part: any) => part.content);\n let content = textParts.join('\\n');\n\n // Include attachments info\n if (msg.attachments && msg.attachments.length > 0) {\n const attachmentsList = msg.attachments\n .map((att) => `[Attached: ${att.relativePath}]`)\n .join('\\n');\n content += `\\n${attachmentsList}`;\n }\n\n return `${msg.role === 'user' ? 'User' : 'Assistant'}: ${content}`;\n }).join('\\n\\n---\\n\\n');\n\n // Create summarization prompt\n const summaryPrompt = `You are a conversation summarizer. Your task is to create a comprehensive, detailed summary of the following conversation that preserves ALL important information.\n\nCRITICAL REQUIREMENTS:\n1. DO NOT omit any important details, decisions, code snippets, file paths, commands, or configurations\n2. Preserve technical accuracy - include exact function names, variable names, file paths, and command syntax\n3. Maintain chronological flow of the conversation\n4. Highlight key decisions, problems solved, and solutions implemented\n5. Include all context that would be needed to continue this conversation naturally\n6. Use clear markdown formatting with sections and bullet points\n7. If code was discussed or written, include the essential parts or describe what was implemented\n\nThe summary will be used to start a fresh conversation while maintaining full context.\n\nCONVERSATION TO SUMMARIZE:\n${conversationHistory}\n\nPlease provide a detailed, structured summary now:`;\n\n // Call AI to generate summary\n const result = await streamText({\n model,\n messages: [\n {\n role: 'user',\n content: summaryPrompt,\n },\n ],\n maxTokens: 4096, // Allow longer summary\n });\n\n // Collect the full summary\n let summary = '';\n for await (const chunk of result.textStream) {\n summary += chunk;\n }\n\n if (!summary || summary.trim().length === 0) {\n return 'Failed to generate summary. Please try again.';\n }\n\n // Create new session with same provider/model\n const newSessionId = context.createSession(\n currentSession.provider,\n currentSession.model\n );\n\n // Get the new session and add summary message\n const { useAppStore } = await import('../../stores/app-store.js');\n const store = useAppStore.getState();\n\n // Add summary as a system message (user message with clear indication it's a summary)\n store.addMessage(\n newSessionId,\n 'user',\n [\n {\n type: 'text',\n content: `# Previous Conversation Summary\\n\\n${summary}\\n\\n---\\n\\n*This is a summary of our previous conversation. You can reference any details from above as we continue our discussion.*`,\n },\n ]\n );\n\n // Switch to new session\n context.setCurrentSession(newSessionId);\n\n const messageCount = currentSession.messages.length;\n const sessionTitle = currentSession.title || 'Untitled session';\n\n return `✓ Compacted session \"${sessionTitle}\" (${messageCount} messages)\\n✓ Created new session with detailed summary\\n✓ Switched to new session\\n\\nYou can now continue the conversation with full context preserved.`;\n } catch (error) {\n const errorMsg = error instanceof Error ? error.message : String(error);\n context.addLog(`[Compact] Error: ${errorMsg}`);\n return `Failed to compact session: ${errorMsg}`;\n }\n },\n};\n\nexport default compactCommand;\n",
18
+ "/**\n * Notifications Command\n * Manage notification settings\n */\n\nimport type { Command, CommandContext } from '../types.js';\n\nexport default {\n id: 'notifications',\n label: '/notifications',\n description: 'Manage notification settings for AI responses',\n args: [\n {\n name: 'action',\n description: 'Action to perform (show, enable, disable)',\n required: true,\n suggestions: ['show', 'enable', 'disable']\n },\n {\n name: 'type',\n description: 'Notification type to configure (os, terminal, sound, all)',\n required: false,\n suggestions: ['os', 'terminal', 'sound', 'all']\n }\n ],\n \n async execute(args: string[], context: CommandContext): Promise<void> {\n const { updateNotificationSettings, notificationSettings } = context;\n \n if (args.length === 0) {\n context.updateOutput('\\n❌ Please specify an action: show, enable, or disable\\n');\n return;\n }\n\n const action = args[0].toLowerCase();\n \n switch (action) {\n case 'show':\n context.updateOutput('\\n🔔 Notification Settings:\\n');\n context.updateOutput(` OS Notifications: ${notificationSettings.osNotifications ? '✅ Enabled' : '❌ Disabled'}\\n`);\n context.updateOutput(` Terminal Notifications: ${notificationSettings.terminalNotifications ? '✅ Enabled' : '❌ Disabled'}\\n`);\n context.updateOutput(` Sound Effects: ${notificationSettings.sound ? '✅ Enabled' : '❌ Disabled'}\\n`);\n context.updateOutput('\\nUse /notifications enable/disable [type] to change settings.\\n');\n break;\n \n case 'enable':\n case 'disable': {\n const isEnabled = action === 'enable';\n \n if (args.length === 1 || args[1] === 'all') {\n // Enable/disable all notifications\n updateNotificationSettings({\n osNotifications: isEnabled,\n terminalNotifications: isEnabled,\n sound: isEnabled\n });\n context.updateOutput(`\\n${isEnabled ? '✅' : '❌'} All notifications ${isEnabled ? 'enabled' : 'disabled'}\\n`);\n } else {\n const type = args[1].toLowerCase();\n const updates: any = {};\n \n switch (type) {\n case 'os':\n updates.osNotifications = isEnabled;\n break;\n case 'terminal':\n updates.terminalNotifications = isEnabled;\n break;\n case 'sound':\n updates.sound = isEnabled;\n break;\n default:\n context.updateOutput(`\\n❌ Unknown notification type: ${type}\\n`);\n context.updateOutput('Valid types: os, terminal, sound, all\\n');\n return;\n }\n \n updateNotificationSettings(updates);\n context.updateOutput(`\\n${isEnabled ? '✅' : '❌'} ${type} notifications ${isEnabled ? 'enabled' : 'disabled'}\\n`);\n }\n break;\n }\n \n default:\n context.updateOutput(`\\n❌ Unknown action: ${action}\\n`);\n context.updateOutput('Valid actions: show, enable, disable\\n');\n }\n }\n} as Command;",
19
+ "/**\n * Command Registry\n * All available commands with their definitions and implementations\n */\n\nimport type { Command } from './types.js';\n\n// Import all command definitions\nimport providerCommand from './definitions/provider.command.js';\nimport modelCommand from './definitions/model.command.js';\nimport logsCommand from './definitions/logs.command.js';\nimport helpCommand from './definitions/help.command.js';\nimport surveyCommand from './definitions/survey.command.js';\nimport contextCommand from './definitions/context.command.js';\nimport sessionsCommand from './definitions/sessions.command.js';\nimport newCommand from './definitions/new.command.js';\nimport bashesCommand from './definitions/bashes.command.js';\nimport agentCommand from './definitions/agent.command.js';\nimport rulesCommand from './definitions/rules.command.js';\nimport compactCommand from './definitions/compact.command.js';\nimport notificationsCommand from './definitions/notifications.command.js';\n\n/**\n * All registered commands\n */\nexport const commands: Command[] = [\n providerCommand,\n modelCommand,\n agentCommand,\n rulesCommand,\n compactCommand,\n notificationsCommand,\n logsCommand,\n helpCommand,\n surveyCommand,\n contextCommand,\n sessionsCommand,\n newCommand,\n bashesCommand,\n];\n\n/**\n * Get command by ID\n */\nexport function getCommand(id: string): Command | undefined {\n return commands.find(cmd => cmd.id === id);\n}\n\n/**\n * Get command by label (e.g., '/model')\n */\nexport function getCommandByLabel(label: string): Command | undefined {\n return commands.find(cmd => cmd.label === label);\n}\n"
20
+ ],
21
+ "mappings": "iDAUA,eAAsB,CAAiB,CACrC,EACA,EACiB,CACjB,IAAQ,gBAAiB,KAAa,gCAC9B,eAAgB,KAAa,+BAC/B,EAAW,EAAQ,UAAU,EAG7B,EADW,EAAY,CAAiB,EACtB,gBAAgB,EAElC,EAAgB,EAAO,IAAI,CAAC,KAAW,CAC3C,MAAO,EAAM,MACb,MAAO,EAAM,GACf,EAAE,EAEF,EAAQ,YACN,aAAa,EAAa,GAAyC,wBACrE,EACA,IAAM,EAAa,MAAM,EAAQ,aAAa,CAC5C,KAAM,YACN,UAAW,CACT,CACE,GAAI,MACJ,SAAU,0CACV,QAAS,CACX,CACF,CACF,CAAC,EAEK,EACJ,OAAO,IAAe,UAAY,CAAC,MAAM,QAAQ,CAAU,EACvD,EAAW,IACX,GACN,GAAI,CAAC,EACH,MAAO,2BAIT,IAAM,EAAQ,EAAO,KAAK,CAAC,IAAM,EAAE,MAAQ,CAAG,EAC1C,EAEJ,GAAI,GAAO,OAAS,UAAW,CAC7B,EAAQ,YAAY,oBAAoB,IAAM,EAC9C,IAAM,EAAc,MAAM,EAAQ,aAAa,CAC7C,KAAM,YACN,UAAW,CACT,CACE,GAAI,QACJ,SAAU,GAAG,EAAM,SACnB,QAAS,CACP,CAAE,MAAO,OAAQ,MAAO,MAAO,EAC/B,CAAE,MAAO,QAAS,MAAO,OAAQ,CACnC,CACF,CACF,CACF,CAAC,EACD,EACE,OAAO,IAAgB,UAAY,CAAC,MAAM,QAAQ,CAAW,EACzD,EAAY,MACZ,GACD,KACL,EAAQ,YAAY,mBAAmB,IAAM,EAC7C,IAAM,EAAe,MAAM,EAAQ,aAAa,CAC9C,KAAM,OACN,OAAQ,GAAG,IACb,CAAC,EACD,EAAQ,OAAO,IAAiB,SAAW,EAAe,GAG5D,GAAI,CAAC,EACH,MAAO,qBAIT,IAAM,EAAY,IACb,EACH,UAAW,IACN,EAAU,WACZ,GAAa,IACT,EAAU,YACX,IAED,GAAM,CACT,CACF,CACF,EAEA,GAAI,CAAC,GAAU,gBACb,EAAU,gBAAkB,EAG9B,EAAQ,YAAY,CAAS,EAC7B,MAAM,EAAQ,WAAW,CAAS,EAIlC,IAAM,EADe,EAAO,KAAK,CAAC,IAAM,EAAE,MAAQ,CAAG,GAClB,OAAS,MAAQ,EAEpD,MAAO,OAAO,EAAa,GAAyC,QAAQ,SAAW,ICrGlF,IAAM,GAA2B,CACtC,GAAI,WACJ,MAAO,YACP,YAAa,sBACb,KAAM,CACJ,CACE,KAAM,SACN,YAAa,yBACb,SAAU,GACV,YAAa,MAAO,IAAiB,CACnC,MAAO,CACL,CAAE,GAAI,MAAO,MAAO,MAAO,MAAO,KAAM,EACxC,CAAE,GAAI,MAAO,MAAO,MAAO,MAAO,KAAM,CAC1C,EAEJ,EACA,CACE,KAAM,gBACN,YAAa,wDACb,SAAU,GACV,YAAa,MAAO,IAAiB,CACnC,IAAQ,gBAAiB,KAAa,+BACtC,OAAO,OAAO,OAAO,CAAY,EAAE,IAAI,CAAC,KAAO,CAC7C,GAAI,EAAE,GACN,MAAO,EAAE,KACT,MAAO,EAAE,EACX,EAAE,EAEN,EACA,CACE,KAAM,MACN,YAAa,+BACb,SAAU,GACV,YAAa,MAAO,IAAiB,CAGnC,IAAM,EAAa,EAAa,GAEhC,GAAI,CAAC,EACH,MAAO,CAAC,EAGV,GAAI,CACF,IAAQ,eAAgB,KAAa,+BAWrC,OAViB,EAAY,CAAiB,EACtB,gBAAgB,EAGpB,IAAI,MAAU,CAChC,GAAI,EAAM,IACV,MAAO,EAAM,MACb,MAAO,EAAM,GACf,EAAE,EAGF,MAAO,EAAO,CAEd,MAAO,CAAC,GAGd,EACA,CACE,KAAM,QACN,YAAa,iCACb,SAAU,GACV,YAAa,MAAO,IAAiB,CAEnC,IAAM,EAAa,EAAa,GAC1B,EAAM,EAAa,GAEzB,GAAI,CAAC,GAAc,CAAC,EAClB,MAAO,CAAC,EAGV,GAAI,CACF,IAAQ,eAAgB,KAAa,+BAQrC,GAPiB,EAAY,CAAiB,EACtB,gBAAgB,EAGnB,KAAK,KAAK,EAAE,MAAQ,CAAG,GAGjC,OAAS,UAClB,MAAO,CACL,CAAE,GAAI,OAAQ,MAAO,OAAQ,MAAO,MAAO,EAC3C,CAAE,GAAI,QAAS,MAAO,QAAS,MAAO,OAAQ,CAChD,EAGF,MAAO,CAAC,EACR,MAAO,EAAO,CACd,MAAO,CAAC,GAGd,CACF,EACA,QAAS,MAAO,IAAY,CAC1B,IAAQ,gBAAiB,KAAa,+BAChC,EAAW,EAAQ,UAAU,EAGnC,GAAI,EAAQ,KAAK,SAAW,EAAG,CAC7B,EAAQ,YAAY,yBAAyB,EAC7C,IAAM,EAAgB,MAAM,EAAQ,aAAa,CAC/C,KAAM,YACN,UAAW,CACT,CACE,GAAI,SACJ,SAAU,iBACV,QAAS,CACP,CAAE,MAAO,iBAAkB,MAAO,KAAM,EACxC,CAAE,MAAO,uBAAwB,MAAO,KAAM,CAChD,CACF,CACF,CACF,CAAC,EAEK,EAAS,OAAO,IAAkB,UAAY,CAAC,MAAM,QAAQ,CAAa,EAAI,EAAc,OAAY,GAC9G,GAAI,CAAC,EACH,MAAO,oBAIT,IAAQ,eAAgB,KAAa,+BAC/B,EAAkB,OAAO,OAAO,CAAY,EAAE,IAAI,CAAC,IAAM,CAC7D,IAAI,EAAe,GACnB,GAAI,CACF,IAAM,EAAW,EAAY,EAAE,EAAS,EAClC,EAAiB,GAAU,YAAY,EAAE,IAC/C,EAAe,EAAiB,EAAS,aAAa,CAAc,EAAI,GACxE,KAAM,EAGR,MAAO,CACL,MAAO,GAAG,EAAE,QAAQ,EAAe,IAAK,KACxC,MAAO,EAAE,EACX,EACD,EAED,EAAQ,YAAY,IAAW,MAAQ,qCAAuC,0CAA0C,EACxH,IAAM,EAAkB,MAAM,EAAQ,aAAa,CACjD,KAAM,YACN,UAAW,CACT,CACE,GAAI,WACJ,SAAU,IAAW,MAAQ,0BAA4B,gCACzD,QAAS,CACX,CACF,CACF,CAAC,EAEK,EAAa,OAAO,IAAoB,UAAY,CAAC,AAAM,QAAQ,CAAe,EAAI,EAAgB,SAAc,GAC1H,GAAI,CAAC,EACH,MAAO,gCAGT,GAAI,IAAW,MAAO,CAEpB,IAAQ,eAAgB,KAAa,qCAC/B,EAAW,EAAY,CAAiB,EACxC,EAAiB,GAAU,YAAY,GAE7C,GAAI,CAAC,GAAkB,CAAC,EAAS,aAAa,CAAc,EAAG,CAE7D,EAAQ,YAAY,GAAG,EAAa,GAAyC,6BAA6B,EAC1G,IAAM,EAAmB,MAAM,EAAQ,aAAa,CAClD,KAAM,YACN,UAAW,CACT,CACE,GAAI,YACJ,SAAU,mCACV,QAAS,CACP,CAAE,MAAO,qBAAsB,MAAO,KAAM,EAC5C,CAAE,MAAO,aAAc,MAAO,IAAK,CACrC,CACF,CACF,CACF,CAAC,EAMD,GAAI,EAJoB,OAAO,IAAqB,UAAY,CAAC,MAAM,QAAQ,CAAgB,EAC3F,EAAiB,YAAiB,MAClC,IAGF,MAAO,0DAIT,IAAM,EAAe,MAAM,EAAkB,EAAS,CAAU,EAG1D,EAAgB,EAAQ,UAAU,EAClC,EAAwB,GAAe,YAAY,GAGzD,GAAI,CAAC,GAAyB,CAAC,EAAS,aAAa,CAAqB,EACxE,MAAO,GAAG;AAAA;AAAA,yFAA0G,IAItH,EAAQ,YAAY,CAAY,EAChC,IAAM,EAAsB,EAGtB,EAAY,IACb,EACH,gBAAiB,CACnB,GAGQ,mBAAoB,KAAa,+BACnC,EAAe,MAAM,EAAgB,EAAmB,CAAmB,EACjF,GAAI,CAAC,EACH,MAAO,2DAA2D,EAAa,GAAyC,OAI1H,EAAU,UAAY,IACjB,EAAU,WACZ,GAAa,IACT,EACH,gBAAiB,CACnB,CACF,EAEA,EAAQ,YAAY,CAAS,EAC7B,MAAM,EAAQ,WAAW,CAAS,EAGlC,EAAQ,sBAAsB,CAAwB,EACtD,EAAQ,mBAAmB,CAAY,EAGvC,IAAM,EAAmB,EAAQ,oBAAoB,EACrD,GAAI,EACF,EAAQ,sBAAsB,EAAkB,EAAY,CAAY,EAGxE,OAAQ,cAAc,EAAY,CAAY,EAGhD,MAAO,aAAa,EAAa,GAAyC,oBAAoB,IAGhG,IAAM,EAAY,IACb,EACH,gBAAiB,CACnB,GAGQ,mBAAoB,KAAa,+BACnC,EAAe,MAAM,EAAgB,EAAmB,CAAc,EAC5E,GAAI,CAAC,EACH,MAAO,mCAAmC,EAAa,GAAyC,OAIlG,EAAU,UAAY,IACjB,EAAU,WACZ,GAAa,IACT,EACH,gBAAiB,CACnB,CACF,EAEA,EAAQ,YAAY,CAAS,EAC7B,MAAM,EAAQ,WAAW,CAAS,EAGlC,IAAM,EAAmB,EAAQ,oBAAoB,EACrD,GAAI,EACF,EAAQ,sBAAsB,EAAkB,EAAY,CAAY,EAGxE,OAAQ,cAAc,EAAY,CAAY,EAGhD,MAAO,eAAe,EAAa,GAAyC,OAG5E,YAAO,MAAM,EAAkB,EAAS,CAAU,EAKtD,GAAI,EAAQ,KAAK,SAAW,GAAK,EAAQ,KAAK,KAAO,MAAO,CAC1D,IAAQ,eAAgB,KAAa,+BAC/B,EAAkB,OAAO,OAAO,CAAY,EAAE,IAAI,CAAC,IAAM,CAC7D,IAAI,EAAe,GACnB,GAAI,CACF,IAAM,EAAW,EAAY,EAAE,EAAS,EAClC,EAAiB,GAAU,YAAY,EAAE,IAC/C,EAAe,EAAiB,EAAS,aAAa,CAAc,EAAI,GACxE,KAAM,EAGR,MAAO,CACL,MAAO,GAAG,EAAE,QAAQ,EAAe,IAAK,KACxC,MAAO,EAAE,EACX,EACD,EAED,EAAQ,YAAY,oCAAoC,EACxD,IAAM,EAAU,MAAM,EAAQ,aAAa,CACzC,KAAM,YACN,UAAW,CACT,CACE,GAAI,WACJ,SAAU,mBACV,QAAS,CACX,CACF,CACF,CAAC,EAEK,EAAa,OAAO,IAAY,UAAY,CAAC,MAAM,QAAQ,CAAO,EAAI,EAAQ,SAAc,GAClG,GAAI,CAAC,EACH,MAAO,gCAGT,IAAM,EAAW,EAAY,CAAiB,EACxC,EAAiB,GAAU,YAAY,GAE7C,GAAI,CAAC,GAAkB,CAAC,EAAS,aAAa,CAAc,EAAG,CAE7D,EAAQ,YAAY,GAAG,EAAa,GAAyC,6BAA6B,EAC1G,IAAM,EAAmB,MAAM,EAAQ,aAAa,CAClD,KAAM,YACN,UAAW,CACT,CACE,GAAI,YACJ,SAAU,mCACV,QAAS,CACP,CAAE,MAAO,qBAAsB,MAAO,KAAM,EAC5C,CAAE,MAAO,aAAc,MAAO,IAAK,CACrC,CACF,CACF,CACF,CAAC,EAMD,GAAI,EAJoB,OAAO,IAAqB,UAAY,CAAC,MAAM,QAAQ,CAAgB,EAC3F,EAAiB,YAAiB,MAClC,IAGF,MAAO,0DAIT,IAAM,EAAe,MAAM,EAAkB,EAAS,CAAU,EAG1D,EAAgB,EAAQ,UAAU,EAClC,EAAwB,GAAe,YAAY,GACzD,GAAI,CAAC,GAAyB,CAAC,EAAS,aAAa,CAAqB,EACxE,MAAO,GAAG;AAAA;AAAA,yFAA0G,IAItH,EAAQ,YAAY,CAAY,EAChC,IAAM,EAAsB,EAGtB,EAAY,IACb,EACH,gBAAiB,CACnB,GAGQ,mBAAoB,KAAa,+BACnC,EAAe,MAAM,EAAgB,EAAmB,CAAmB,EACjF,GAAI,CAAC,EACH,MAAO,2DAA2D,EAAa,GAAyC,OAI1H,EAAU,UAAY,IACjB,EAAU,WACZ,GAAa,IACT,EACH,gBAAiB,CACnB,CACF,EAEA,EAAQ,YAAY,CAAS,EAC7B,MAAM,EAAQ,WAAW,CAAS,EAGlC,EAAQ,sBAAsB,CAAwB,EACtD,EAAQ,mBAAmB,CAAY,EAGvC,IAAM,EAAmB,EAAQ,oBAAoB,EACrD,GAAI,EACF,EAAQ,sBAAsB,EAAkB,EAAY,CAAY,EAGxE,OAAQ,cAAc,EAAY,CAAY,EAGhD,MAAO,aAAa,EAAa,GAAyC,oBAAoB,IAGhG,IAAM,EAAY,IACb,EACH,gBAAiB,CACnB,GAGQ,mBAAoB,KAAa,+BACnC,EAAe,MAAM,EAAgB,EAAmB,CAAc,EAC5E,GAAI,CAAC,EACH,MAAO,mCAAmC,EAAa,GAAyC,OAIlG,EAAU,UAAY,IACjB,EAAU,WACZ,GAAa,IACT,EACH,gBAAiB,CACnB,CACF,EAEA,EAAQ,YAAY,CAAS,EAC7B,MAAM,EAAQ,WAAW,CAAS,EAGlC,IAAM,EAAmB,EAAQ,oBAAoB,EACrD,GAAI,EACF,EAAQ,sBAAsB,EAAkB,EAAY,CAAY,EAGxE,OAAQ,cAAc,EAAY,CAAY,EAGhD,MAAO,eAAe,EAAa,GAAyC,OAI9E,GAAI,EAAQ,KAAK,SAAW,GAAK,EAAQ,KAAK,KAAO,MAAO,CAC1D,IAAM,EAAa,EAAQ,KAAK,GAEhC,GAAI,EAAE,KAAc,GAClB,MAAO,qBAAqB,iBAA0B,OAAO,KAAK,CAAY,EAAE,KAAK,IAAI,IAG3F,IAAQ,eAAgB,KAAa,+BAC/B,EAAW,EAAY,CAAiB,EACxC,EAAiB,GAAU,YAAY,GAE7C,GAAI,CAAC,GAAkB,CAAC,EAAS,aAAa,CAAc,EAC1D,MAAO,GAAG,EAAa,GAAyC,8CAA8C,IAGhH,IAAM,EAAY,IACb,EACH,gBAAiB,CACnB,GAGQ,mBAAoB,KAAa,+BACnC,EAAe,MAAM,EAAgB,EAAmB,CAAc,EAC5E,GAAI,CAAC,EACH,MAAO,mCAAmC,EAAa,GAAyC,OAIlG,EAAU,UAAY,IACjB,EAAU,WACZ,GAAa,IACT,EACH,gBAAiB,CACnB,CACF,EAEA,EAAQ,YAAY,CAAS,EAC7B,MAAM,EAAQ,WAAW,CAAS,EAGlC,IAAM,EAAmB,EAAQ,oBAAoB,EACrD,GAAI,EACF,EAAQ,sBAAsB,EAAkB,EAAY,CAAY,EAGxE,OAAQ,cAAc,EAAY,CAAY,EAGhD,MAAO,eAAe,EAAa,GAAyC,OAI9E,GAAI,EAAQ,KAAK,SAAW,GAAK,EAAQ,KAAK,KAAO,MAAO,CAC1D,IAAM,EAAkB,OAAO,OAAO,CAAY,EAAE,IAAI,CAAC,KAAO,CAC9D,MAAO,EAAE,KACT,MAAO,EAAE,EACX,EAAE,EAEF,EAAQ,YAAY,0CAA0C,EAC9D,IAAM,EAAkB,MAAM,EAAQ,aAAa,CACjD,KAAM,YACN,UAAW,CACT,CACE,GAAI,WACJ,SAAU,mBACV,QAAS,CACX,CACF,CACF,CAAC,EAEK,EAAa,OAAO,IAAoB,UAAY,CAAC,MAAM,QAAQ,CAAe,EAAI,EAAgB,SAAc,GAC1H,GAAI,CAAC,EACH,MAAO,gCAIT,IAAQ,eAAgB,KAAa,+BAE/B,EADW,EAAY,CAAiB,EACtB,gBAAgB,EAElC,EAAgB,EAAO,IAAI,MAAU,CACzC,MAAO,EAAM,MACb,MAAO,EAAM,GACf,EAAE,EAGF,EAAQ,YAAY,aAAa,EAAa,GAAyC,wBAAwB,EAC/G,IAAM,EAAa,MAAM,EAAQ,aAAa,CAC5C,KAAM,YACN,UAAW,CACT,CACE,GAAI,MACJ,SAAU,0CACV,QAAS,CACX,CACF,CACF,CAAC,EAEK,EAAM,OAAO,IAAe,UAAY,CAAC,MAAM,QAAQ,CAAU,EAAI,EAAW,IAAS,GAC/F,GAAI,CAAC,EACH,MAAO,2BAIT,CACE,IAAM,EAAQ,EAAO,KAAK,KAAK,EAAE,MAAQ,CAAG,EACxC,EAEJ,GAAI,GAAO,OAAS,UAAW,CAC7B,EAAQ,YAAY,oBAAoB,IAAM,EAC9C,IAAM,EAAc,MAAM,EAAQ,aAAa,CAC7C,KAAM,YACN,UAAW,CACT,CACE,GAAI,QACJ,SAAU,GAAG,EAAM,SACnB,QAAS,CACP,CAAE,MAAO,OAAQ,MAAO,MAAO,EAC/B,CAAE,MAAO,QAAS,MAAO,OAAQ,CACnC,CACF,CACF,CACF,CAAC,EACD,EAAQ,OAAO,IAAgB,UAAY,CAAC,MAAM,QAAQ,CAAW,EAAI,EAAY,MAAW,GAC3F,KACL,EAAQ,YAAY,mBAAmB,IAAM,EAC7C,IAAM,EAAe,MAAM,EAAQ,aAAa,CAC9C,KAAM,OACN,YAAa,SAAS,MACxB,CAAC,EACD,EAAQ,OAAO,IAAiB,SAAW,EAAe,GAG5D,GAAI,CAAC,EACH,MAAO,qBAIT,IAAM,EAAY,IACb,EACH,UAAW,IACN,EAAU,WACZ,GAAa,IACT,EAAU,YAAY,IACxB,GAAM,CACT,CACF,CACF,EAEA,GAAI,CAAC,GAAU,gBACb,EAAU,gBAAkB,EAG9B,EAAQ,YAAY,CAAS,EAC7B,MAAM,EAAQ,WAAW,CAAS,EAIlC,IAAM,EADe,EAAO,KAAK,KAAK,EAAE,MAAQ,CAAG,GAChB,OAAS,MAAQ,EAEpD,MAAO,OAAO,EAAa,GAAyC,QAAQ,SAAW,GACzF,EAIF,GAAI,EAAQ,KAAK,SAAW,GAAK,EAAQ,KAAK,KAAO,MAAO,CAC1D,IAAM,EAAa,EAAQ,KAAK,GAEhC,GAAI,EAAE,KAAc,GAClB,MAAO,qBAAqB,iBAA0B,OAAO,KAAK,CAAY,EAAE,KAAK,IAAI,IAI3F,IAAQ,eAAgB,KAAa,+BAE/B,EADW,EAAY,CAAiB,EACtB,gBAAgB,EAElC,EAAgB,EAAO,IAAI,MAAU,CACzC,MAAO,EAAM,MACb,MAAO,EAAM,GACf,EAAE,EAGF,EAAQ,YAAY,aAAa,EAAa,GAAyC,wBAAwB,EAC/G,IAAM,EAAa,MAAM,EAAQ,aAAa,CAC5C,KAAM,YACN,UAAW,CACT,CACE,GAAI,MACJ,SAAU,0CACV,QAAS,CACX,CACF,CACF,CAAC,EAEK,EAAM,OAAO,IAAe,UAAY,CAAC,MAAM,QAAQ,CAAU,EAAI,EAAW,IAAS,GAC/F,GAAI,CAAC,EACH,MAAO,2BAIT,CACE,IAAM,EAAQ,EAAO,KAAK,KAAK,EAAE,MAAQ,CAAG,EACxC,EAEJ,GAAI,GAAO,OAAS,UAAW,CAC7B,EAAQ,YAAY,oBAAoB,IAAM,EAC9C,IAAM,EAAc,MAAM,EAAQ,aAAa,CAC7C,KAAM,YACN,UAAW,CACT,CACE,GAAI,QACJ,SAAU,GAAG,EAAM,SACnB,QAAS,CACP,CAAE,MAAO,OAAQ,MAAO,MAAO,EAC/B,CAAE,MAAO,QAAS,MAAO,OAAQ,CACnC,CACF,CACF,CACF,CAAC,EACD,EAAQ,OAAO,IAAgB,UAAY,CAAC,MAAM,QAAQ,CAAW,EAAI,EAAY,MAAW,GAC3F,KACL,EAAQ,YAAY,mBAAmB,IAAM,EAC7C,IAAM,EAAe,MAAM,EAAQ,aAAa,CAC9C,KAAM,OACN,YAAa,SAAS,MACxB,CAAC,EACD,EAAQ,OAAO,IAAiB,SAAW,EAAe,GAG5D,GAAI,CAAC,EACH,MAAO,qBAIT,IAAM,EAAY,IACb,EACH,UAAW,IACN,EAAU,WACZ,GAAa,IACT,EAAU,YAAY,IACxB,GAAM,CACT,CACF,CACF,EAEA,GAAI,CAAC,GAAU,gBACb,EAAU,gBAAkB,EAG9B,EAAQ,YAAY,CAAS,EAC7B,MAAM,EAAQ,WAAW,CAAS,EAIlC,IAAM,EADe,EAAO,KAAK,KAAK,EAAE,MAAQ,CAAG,GAChB,OAAS,MAAQ,EAEpD,MAAO,OAAO,EAAa,GAAyC,QAAQ,SAAW,GACzF,EAIF,GAAI,EAAQ,KAAK,QAAU,GAAK,EAAQ,KAAK,KAAO,MAAO,CACzD,IAAM,EAAa,EAAQ,KAAK,GAC1B,EAAM,EAAQ,KAAK,GACnB,EAAQ,EAAQ,KAAK,MAAM,CAAC,EAAE,KAAK,GAAG,EAE5C,GAAI,EAAE,KAAc,GAClB,MAAO,qBAAqB,iBAA0B,OAAO,KAAK,CAAY,EAAE,KAAK,IAAI,IAI3F,IAAQ,eAAgB,KAAa,+BAE/B,EADW,EAAY,CAAiB,EACtB,gBAAgB,EAElC,EAAY,EAAO,IAAI,KAAK,EAAE,GAAG,EACvC,GAAI,CAAC,EAAU,SAAS,CAAG,EACzB,MAAO,gBAAgB,qBAAuB,MAAe,EAAU,KAAK,IAAI,IAGlF,IAAM,EAAY,IACb,EACH,UAAW,IACN,EAAU,WACZ,GAAa,IACT,EAAU,YAAY,IACxB,GAAM,CACT,CACF,CACF,EAEA,GAAI,CAAC,GAAU,gBACb,EAAU,gBAAkB,EAG9B,EAAQ,YAAY,CAAS,EAC7B,MAAM,EAAQ,WAAW,CAAS,EAIlC,IAAM,EADQ,EAAO,KAAK,KAAK,EAAE,MAAQ,CAAG,GAChB,OAAS,MAAQ,EAE7C,MAAO,OAAO,EAAa,GAAyC,QAAQ,SAAW,IAGzF,MAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qEAEX,EAEe,KC/uBR,IAAM,GAAwB,CACnC,GAAI,QACJ,MAAO,SACP,YAAa,kBACb,KAAM,CACJ,CACE,KAAM,aACN,YAAa,qBACb,SAAU,GACV,YAAa,MAAO,EAAc,IAAY,CAC5C,GAAI,CAEF,IAAM,EAAW,GAAS,UAAU,EACpC,GAAI,CAAC,GAAU,UACb,MAAO,CAAC,EAKV,IAAM,EADiB,GAAS,kBAAkB,GACR,UAAY,EAAS,gBAE/D,GAAI,CAAC,EACH,MAAO,CAAC,EAIV,IAAM,EAAS,EAAS,UAAU,GAClC,GAAI,CAAC,EACH,MAAO,CAAC,EAGV,GAAI,CACF,IAAQ,eAAgB,KAAa,+BAErC,OADe,MAAM,EAAY,EAA0B,CAAM,GACnD,IAAI,MAAM,CACtB,GAAI,EAAE,GACN,MAAO,EAAE,KACT,MAAO,EAAE,EACX,EAAE,EACF,MAAO,EAAO,CACd,GAAI,EACF,EAAQ,OAAO,8BAA8B,MAAsB,aAAiB,MAAQ,EAAM,QAAU,OAAO,CAAK,GAAG,EAE7H,MAAO,CAAC,GAEV,MAAO,EAAO,CACd,GAAI,EACF,EAAQ,OAAO,yBAAyB,aAAiB,MAAQ,EAAM,QAAU,OAAO,CAAK,GAAG,EAElG,MAAO,CAAC,GAGd,CACF,EACA,QAAS,MAAO,IAAY,CAC1B,IAAI,EAGJ,GAAI,EAAQ,KAAK,SAAW,EAC1B,GAAI,CAEF,IAAM,EAAW,EAAQ,UAAU,EACnC,GAAI,CAAC,GAAU,UACb,MAAO,8DAKT,IAAM,EADiB,EAAQ,kBAAkB,GACP,UAAY,EAAS,gBAE/D,GAAI,CAAC,EACH,MAAO,kEAGT,IAAM,EAAS,EAAS,UAAU,GAClC,GAAI,CAAC,EACH,MAAO,YAAY,uBAIrB,IAAI,EAAqD,CAAC,EAC1D,GAAI,CACF,IAAQ,eAAgB,KAAa,+BAC/B,EAAS,MAAM,EAAY,EAA0B,CAAM,EACjE,EAAY,EAAO,IAAI,MAAM,CAAE,MAAO,EAAE,KAAM,MAAO,EAAE,EAAG,EAAE,EAC5D,EAAQ,OAAO,UAAU,EAAO,sBAAsB,GAAmB,EACzE,MAAO,EAAO,CACd,IAAM,EAAW,aAAiB,MAAQ,EAAM,QAAU,OAAO,CAAK,EAEtE,OADA,EAAQ,OAAO,8BAA8B,MAAsB,GAAU,EACtE,8BAA8B,MAAsB,IAG7D,GAAI,EAAU,SAAW,EACvB,MAAO,2BAA2B,IAIpC,EAAQ,YAAY,iCAAiC,EACrD,IAAM,EAAU,MAAM,EAAQ,aAAa,CACzC,KAAM,YACN,UAAW,CACT,CACE,GAAI,QACJ,SAAU,kCACV,QAAS,CACX,CACF,CACF,CAAC,EAGD,EAAU,OAAO,IAAY,UAAY,CAAC,MAAM,QAAQ,CAAO,EAAI,EAAQ,MAAW,GACtF,MAAO,EAAO,CACd,MAAO,0BAA0B,aAAiB,MAAQ,EAAM,QAAU,OAAO,CAAK,IAGxF,OAAU,EAAQ,KAAK,GAGzB,IAAM,EAAiB,EAAQ,kBAAkB,EAC3C,EAAW,EAAQ,UAAU,EAC7B,EAAW,GAAgB,UAAY,GAAU,gBAEvD,GAAI,CAAC,EACH,MAAO,6DAIT,IAAM,EAAY,IACb,EACH,aAAc,EACd,UAAW,IACN,EAAU,WACZ,GAAW,IACP,EAAU,YAAY,GACzB,gBAAiB,CACnB,CACF,CACF,EACA,EAAQ,YAAY,CAAS,EAG7B,MAAM,EAAQ,WAAW,CAAS,EAGlC,IAAM,EAAmB,EAAQ,oBAAoB,EACrD,GAAI,EACF,EAAQ,mBAAmB,EAAkB,CAAO,EAGpD,OAAQ,cAAc,EAAU,CAAO,EAGzC,MAAO,sBAAsB,IAEjC,EAEe,KC5JR,IAAM,GAAuB,CAClC,GAAI,OACJ,MAAO,QACP,YAAa,kBACb,QAAS,MAAO,IAAY,CAE1B,OADA,EAAQ,WAAW,MAAM,EAClB,wBAEX,EAEe,KCVR,IAAM,GAAuB,CAClC,GAAI,OACJ,MAAO,QACP,YAAa,0BACb,QAAS,MAAO,IAAY,CAC1B,IAAQ,YAAa,KAAa,+BASlC,MAAO;AAAA,EARa,EACjB,IAAI,CAAC,IAAQ,CACZ,IAAM,EAAW,EAAI,KACjB,IAAI,EAAI,KAAK,IAAI,CAAC,IAAM,IAAI,EAAE,OAAO,EAAE,KAAK,GAAG,IAC/C,GACJ,MAAO,GAAG,EAAI,QAAQ,OAAc,EAAI,cACzC,EACA,KAAK;AAAA,CAAI,IAGhB,EAEe,KClBR,IAAM,GAAyB,CACpC,GAAI,SACJ,MAAO,UACP,YAAa,uCACb,QAAS,MAAO,IAAY,CAC1B,EAAQ,YAAY,mCAAmC,EAEvD,IAAM,EAAU,MAAM,EAAQ,aAAa,CACzC,KAAM,YACN,UAAW,CACT,CACE,GAAI,WACJ,SAAU,8CACV,QAAS,CACP,CAAE,MAAO,YAAa,EACtB,CAAE,MAAO,YAAa,EACtB,CAAE,MAAO,QAAS,EAClB,CAAE,MAAO,MAAO,EAChB,CAAE,MAAO,IAAK,CAChB,CACF,EACA,CACE,GAAI,YACJ,SAAU,iCACV,QAAS,CACP,CAAE,MAAO,OAAQ,EACjB,CAAE,MAAO,KAAM,EACf,CAAE,MAAO,SAAU,EACnB,CAAE,MAAO,QAAS,EAClB,CAAE,MAAO,OAAQ,CACnB,CACF,EACA,CACE,GAAI,SACJ,SAAU,qCACV,QAAS,CACP,CAAE,MAAO,oBAAqB,EAC9B,CAAE,MAAO,YAAa,EACtB,CAAE,MAAO,OAAQ,EACjB,CAAE,MAAO,cAAe,EACxB,CAAE,MAAO,MAAO,CAClB,CACF,CACF,CACF,CAAC,EAED,GAAI,OAAO,IAAY,UAAY,CAAC,MAAM,QAAQ,CAAO,EAIvD,MAAO,mCAHS,OAAO,QAAQ,CAAO,EACnC,IAAI,EAAE,EAAK,KAAW,GAAG,MAAQ,GAAO,EACxC,KAAK,IAAI,IAId,MAAO,oBAEX,EAEe,KCzDR,IAAM,GAA0B,CACrC,GAAI,UACJ,MAAO,WACP,YAAa,mDACb,QAAS,MAAO,IAAY,CAC1B,IAAQ,cAAa,oBAAqB,KAAa,gCAC/C,mBAAoB,KAAa,gCACjC,iBAAkB,KAAa,+BAEjC,EAAiB,EAAQ,kBAAkB,EACjD,GAAI,CAAC,EACH,MAAO,gEAGT,IAAM,EAAY,EAAe,MAwB3B,GArBkB,CAAC,IAA0B,CAEjD,GAAI,EAAM,SAAS,OAAO,EAAG,CAC3B,GAAI,EAAM,SAAS,KAAK,GAAK,EAAM,SAAS,OAAO,EAAG,MAAO,QAC7D,GAAI,EAAM,SAAS,QAAQ,EAAG,MAAO,QACrC,MAAO,MAET,GAAI,EAAM,SAAS,SAAS,EAAG,CAC7B,GAAI,EAAM,SAAS,KAAK,EAAG,MAAO,OAClC,MAAO,MAGT,GAAI,EAAM,SAAS,UAAU,EAAG,CAC9B,GAAI,EAAM,SAAS,MAAM,EAAG,MAAO,QACnC,GAAI,EAAM,SAAS,QAAQ,EAAG,MAAO,QACrC,GAAI,EAAM,SAAS,OAAO,EAAG,MAAO,QAGtC,MAAO,UAG4B,CAAS,EAG9C,EAAQ,OAAO,0CAA0C,aAAqB,EAAiB,CAAY,OAAO,EAGlH,IAAM,EAAe,EAAgB,EAC/B,EAAqB,MAAM,EAAY,EAAc,CAAS,GAG5D,0BAA2B,KAAa,gCACxC,0BAA2B,KAAa,+BAC1C,EAAqB,+CAEvB,EAAgD,CAAC,EACrD,GAAI,CACF,EAAsB,eAAiB,MAAM,EAAY,EAAoB,CAAS,EAEtF,IAAM,EAAe,EAAuB,EAC5C,GAAI,EACF,EAAsB,MAAW,MAAM,EAAY,EAAc,CAAS,EAG5E,IAAM,EAAc,EAAuB,EAC3C,EAAsB,gBAAkB,MAAM,EAAY,EAAa,CAAS,EAChF,MAAO,EAAO,CACd,EAAQ,OAAO,0DAA0D,GAAO,EAIlF,IAAM,EAAQ,EAAc,EACtB,EAAqC,CAAC,EACxC,EAAmB,EAEvB,QAAY,EAAU,KAAY,OAAO,QAAQ,CAAK,EAAG,CAGvD,IAAM,EAAqB,CACzB,KAAM,EACN,YAAa,EAAQ,aAAe,GACpC,WAAY,EAAQ,YAAc,CAAC,CACrC,EACM,EAAW,KAAK,UAAU,EAAoB,KAAM,CAAC,EACrD,EAAS,MAAM,EAAY,EAAU,CAAS,EACpD,EAAW,GAAY,EACvB,GAAoB,EAItB,IAAI,EAAiB,EACrB,QAAW,KAAO,EAAe,SAAU,CACzC,IAAI,EAAU,EAAI,QAGlB,GAAI,EAAI,aAAe,EAAI,YAAY,OAAS,EAC9C,GAAI,CACF,IAAQ,YAAa,KAAa,4BAY5B,GAXe,MAAM,QAAQ,IACjC,EAAI,YAAY,IAAI,MAAO,IAAQ,CACjC,GAAI,CACF,IAAM,EAAU,MAAM,EAAS,EAAI,KAAM,MAAM,EAC/C,MAAO,CAAE,KAAM,EAAI,aAAc,SAAQ,EACzC,KAAM,CACN,MAAO,CAAE,KAAM,EAAI,aAAc,QAAS,sBAAuB,GAEpE,CACH,GAGG,IAAI,CAAC,IAAM;AAAA;AAAA,cAAmB,EAAE;AAAA,EAAW,EAAE;AAAA,QAAkB,EAC/D,KAAK,EAAE,EAEV,GAAW,EACX,MAAO,EAAO,CAEd,QAAQ,KAAK,wDAAyD,CAAK,EAI/E,IAAM,EAAY,MAAM,EAAY,EAAS,CAAS,EACtD,GAAkB,EAIpB,IAAM,EAAa,EAAqB,EAAmB,EACrD,EAAa,EAAe,EAC5B,EAAoB,KAAK,MAAM,EAAe,KAAK,EACnD,EAAiB,EAAa,EAE9B,GAAgB,EAAa,EAAgB,KAAK,QAAQ,CAAC,EAC3D,GAAwB,EAAqB,EAAgB,KAAK,QAAQ,CAAC,EAC3E,GAAiB,EAAmB,EAAgB,KAAK,QAAQ,CAAC,EAClE,GAAoB,EAAiB,EAAgB,KAAK,QAAQ,CAAC,EACnE,GAAgB,EAAiB,EAAgB,KAAK,QAAQ,CAAC,EAC/D,GAAkB,EAAoB,EAAgB,KAAK,QAAQ,CAAC,EAGpE,GAAiB,IAAgB,CAErC,IAAM,EAAqB,KAAK,MAAO,EAAqB,EADxC,EACmE,EACjF,EAAc,KAAK,MAAO,EAAmB,EAF/B,EAE0D,EACxE,EAAiB,KAAK,MAAO,EAAiB,EAHhC,EAG2D,EAEzE,EALc,IAID,EAAqB,EAAc,GAIhD,EAAQ,IAAG,OAAO,CAAkB,EAAI,IAAI,OAR9B,GAQmD,CAAkB,EAGnF,EAAQ,IAAG,OAAO,CAAkB,EAAI,IAAI,OAAO,CAAW,EAAI,IAAI,OAXxD,GAW6E,EAAqB,CAAW,EAG3H,GAAQ,IAAG,OAAO,EAAqB,CAAW,EAAI,IAAI,OAAO,CAAc,EAAI,IAAI,OAAO,CAAU,EAE9G,MAAO,CAAC,EAAO,EAAO,EAAK,IAGtB,GAAM,GAAM,IAAQ,GAAe,EAGpC,GAAW,OAAO,QAAQ,CAAU,EACvC,KAAK,CAAC,EAAG,IAAM,EAAE,GAAK,EAAE,EAAE,EAC1B,IAAI,EAAE,EAAM,KAAY,OAAO,MAAS,EAAiB,CAAM,UAAU,EACzE,KAAK;AAAA,CAAI,EAGN,GAA4B,OAAO,QAAQ,CAAqB,EACnE,IAAI,EAAE,EAAM,KAAY,OAAO,MAAS,EAAiB,CAAM,UAAU,EACzE,KAAK;AAAA,CAAI,EAuBZ,MApBe;AAAA,iBACF,EAAiB,CAAU,KAAK,EAAiB,CAAY,aAAa;AAAA,SAClF;AAAA;AAAA;AAAA,IAGL,sBAAwB,EAAiB,CAAkB,MAAM;AAAA,IACjE,sBAAwB,EAAiB,CAAgB,MAAM;AAAA,IAC/D,sBAAwB,EAAiB,CAAc,MAAM;AAAA;AAAA;AAAA,YAGtD,EAAiB,CAAc,aAAa;AAAA,cAC1C,EAAiB,CAAiB,aAAa;AAAA;AAAA;AAAA,EAG1D;AAAA;AAAA,gBAEc,OAAO,KAAK,CAAK,EAAE;AAAA,EACjC;AAAA,EACA,KAAK,EAIP,EAEe,KCjMR,IAAM,GAA2B,CACtC,GAAI,WACJ,MAAO,YACP,YAAa,wCACb,QAAS,MAAO,IAAY,CAC1B,IAAQ,wBAAyB,KAAa,+BACxC,EAAW,EAAQ,YAAY,EAErC,GAAI,EAAS,SAAW,EACtB,MAAO,6DAGT,IAAM,EAAmB,EAAQ,oBAAoB,EAG/C,EAAiB,CAAC,GAAG,CAAQ,EAAE,KAAK,CAAC,EAAG,IAAM,CAElD,IAAM,EAAa,EAAE,QAAU,EAAE,QACjC,GAAI,IAAe,EAAG,OAAO,EAG7B,OAAO,EAAE,QAAU,EAAE,QACtB,EAGK,EAAiB,EAAe,IAAI,CAAC,IAAY,CACrD,IAAM,EAAY,EAAQ,KAAO,EAC3B,EAAc,EAAqB,EAAQ,MAAO,EAAQ,OAAO,EAGvE,MAAO,CACL,MAHY,EAAY,GAAG,cAA0B,EAIrD,MAAO,EAAQ,EACjB,EACD,EAED,EAAQ,YAAY,gCAAgC,EACpD,IAAM,EAAU,MAAM,EAAQ,aAAa,CACzC,KAAM,YACN,UAAW,CACT,CACE,GAAI,UACJ,SAAU,0CACV,QAAS,CACX,CACF,CACF,CAAC,EAEK,EAAoB,OAAO,IAAY,UAAY,CAAC,MAAM,QAAQ,CAAO,EAAI,EAAQ,QAAa,GAExG,GAAI,CAAC,EACH,MAAO,+BAIT,EAAQ,kBAAkB,CAAiB,EAE3C,IAAM,EAAkB,EAAe,KAAK,CAAC,IAAM,EAAE,KAAO,CAAiB,EAK7E,MAAO,wBAJa,EAChB,EAAqB,EAAgB,MAAO,EAAgB,OAAO,EACnE,oBAIR,EAEe,KClER,IAAM,GAAsB,CACjC,GAAI,MACJ,MAAO,OACP,YAAa,4BACb,QAAS,MAAO,IAAY,CAC1B,IAAM,EAAW,EAAQ,UAAU,EAEnC,GAAI,CAAC,GAAU,iBAAmB,CAAC,GAAU,aAC3C,MAAO,0EAIT,IAAM,EAAe,EAAQ,cAAc,EAAS,gBAAiB,EAAS,YAAY,EAG1F,OAFA,EAAQ,kBAAkB,CAAY,EAE/B,iCAAiC,EAAS,oBAAoB,EAAS,gBAElF,EAEe,KCnBR,IAAM,GAAyB,CACpC,GAAI,SACJ,MAAO,UACP,YAAa,mCACb,QAAS,MAAO,IAAY,CAC1B,IAAQ,eAAgB,KAAa,+BAC/B,EAAY,EAAY,KAAK,EAEnC,GAAI,EAAU,SAAW,EACvB,MAAO,sCAIT,IAAM,EAAiB,EAAU,IAAI,CAAC,IAAS,CAC7C,IAAM,EAAS,EAAK,UAAY,cAAgB,gBAC1C,EAAW,KAAK,MAAM,EAAK,SAAW,IAAI,EAC1C,EAAc,EAAW,GAC3B,GAAG,KAAK,MAAM,EAAW,EAAE,MAAM,EAAW,MAC5C,GAAG,KAEP,MAAO,CACL,MAAO,GAAG,MAAW,MAAgB,EAAK,UAC1C,MAAO,EAAK,EACd,EACD,EAED,EAAQ,YAAY,SAAS,EAAU,iCAAiC,EAAU,SAAW,EAAI,KAAO,KAAK,EAC7G,IAAM,EAAU,MAAM,EAAQ,aAAa,CACzC,KAAM,YACN,UAAW,CACT,CACE,GAAI,SACJ,SAAU,0BACV,QAAS,CACP,CAAE,MAAO,eAAgB,MAAO,MAAO,EACvC,CAAE,MAAO,iBAAkB,MAAO,MAAO,EACzC,CAAE,MAAO,SAAU,MAAO,QAAS,CACrC,CACF,CACF,CACF,CAAC,EAEK,EAAS,OAAO,IAAY,UAAY,CAAC,MAAM,QAAQ,CAAO,EAAI,EAAQ,OAAY,GAE5F,GAAI,CAAC,GAAU,IAAW,SACxB,MAAO,aAIT,EAAQ,YAAY,mBAAmB,EACvC,IAAM,EAAiB,MAAM,EAAQ,aAAa,CAChD,KAAM,YACN,UAAW,CACT,CACE,GAAI,UACJ,SAAU,iBACV,QAAS,CACX,CACF,CACF,CAAC,EAEK,EAAa,OAAO,IAAmB,UAAY,CAAC,MAAM,QAAQ,CAAc,EAClF,EAAe,QACf,GAEJ,GAAI,CAAC,EACH,MAAO,uBAGT,GAAI,IAAW,OAAQ,CACrB,IAAM,EAAS,EAAY,UAAU,CAAU,EAC/C,GAAI,CAAC,EACH,MAAO,qBAGT,IAAM,EAAS,EAAO,UAAY,UAAY,yBAAyB,EAAO,YACxE,EAAW,KAAK,MAAM,EAAO,SAAW,IAAI,EAE9C,EAAS;AAAA,WACR;AAAA,WACA,EAAO;AAAA,UACR;AAAA,YACE;AAAA;AAAA;AAAA,EAGV,EAAO,QAAU;AAAA,EAGb,GAAI,EAAO,OACT,GAAU;AAAA;AAAA,EAEhB,EAAO,SAGH,OAAO,EAAO,KAAK,EAGrB,GAAI,IAAW,OAAQ,CAErB,GAAI,CADY,EAAY,KAAK,CAAU,EAEzC,MAAO,sCAGT,MAAO,sCAAsC,IAG/C,MAAO,kBAEX,EAEe,KC9GR,IAAM,GAAwB,CACnC,GAAI,QACJ,MAAO,SACP,YAAa,yDACb,KAAM,CACJ,CACE,KAAM,aACN,YAAa,4CACb,SAAU,GACV,YAAa,MAAO,IAAiB,CACnC,IAAQ,gBAAiB,KAAa,+BAEtC,OADe,EAAa,EACd,IAAI,CAAC,KAAW,CAC5B,GAAI,EAAM,GACV,MAAO,GAAG,EAAM,SAAS,UAAU,EAAM,SAAS,cAClD,MAAO,EAAM,EACf,EAAE,EAEN,CACF,EACA,QAAS,MAAO,IAAY,CAC1B,IAAQ,eAAc,kBAAiB,eAAgB,KAAa,+BAEhE,EAGJ,GAAI,EAAQ,KAAK,SAAW,EAAG,CAC7B,IAAM,EAAS,EAAa,EACtB,EAAe,EAAgB,EAErC,GAAI,EAAO,SAAW,EACpB,MAAO,uBAIT,IAAM,EAAe,EAAO,IAAI,CAAC,IAAU,CAMzC,MAAO,CACL,MANgB,EAAM,KAAO,EAAa,GAExC,GAAG,EAAM,SAAS,oBAAoB,EAAM,SAAS,cACrD,GAAG,EAAM,SAAS,UAAU,EAAM,SAAS,cAI7C,MAAO,EAAM,EACf,EACD,EAED,EAAQ,YAAY,iCAAiC,EACrD,IAAM,EAAU,MAAM,EAAQ,aAAa,CACzC,KAAM,YACN,UAAW,CACT,CACE,GAAI,QACJ,SAAU,gBACV,QAAS,CACX,CACF,CACF,CAAC,EAID,GAFA,EAAU,OAAO,IAAY,UAAY,CAAC,MAAM,QAAQ,CAAO,EAAI,EAAQ,MAAW,GAElF,CAAC,EACH,MAAO,6BAGT,OAAU,EAAQ,KAAK,GAMzB,GAAI,CAFY,EAAY,CAAO,EAGjC,MAAO,oBAAoB,yCAG7B,IAAQ,gBAAiB,KAAa,+BAChC,EAAgB,EAAa,CAAO,EAE1C,GAAI,CAAC,EACH,MAAO,+BAGT,MAAO,sBAAsB,EAAc,SAAS;AAAA,EAAS,EAAc,SAAS,cAExF,EAEe,KCtFR,IAAM,GAAwB,CACnC,GAAI,QACJ,MAAO,SACP,YAAa,4CACb,QAAS,MAAO,IAAY,CAC1B,IAAQ,cAAa,oBAAmB,mBAAoB,KAAa,+BAEnE,EAAW,EAAY,EACvB,EAAa,EAAkB,EAErC,GAAI,EAAS,SAAW,EACtB,MAAO,sBAIT,IAAM,EAAc,EAAS,IAAI,CAAC,KAAU,CAC1C,MAAO,GAAG,EAAK,SAAS,UAAU,EAAK,SAAS,cAChD,MAAO,EAAK,EACd,EAAE,EAEF,EAAQ,YAAY,qCAAqC,EAAW,kBAAkB,EACtF,IAAM,EAAU,MAAM,EAAQ,aAAa,CACzC,KAAM,YACN,UAAW,CACT,CACE,GAAI,QACJ,SAAU,uCACV,QAAS,EACT,YAAa,GACb,YAAa,CACf,CACF,CACF,CAAC,EAGK,EAAkB,OAAO,IAAY,UAAY,CAAC,MAAM,QAAQ,CAAO,EACxE,MAAM,QAAQ,EAAQ,KAAQ,EAAI,EAAQ,MAAW,CAAC,EACvD,CAAC,EAEL,GAAI,CAAC,MAAM,QAAQ,CAAe,EAChC,MAAO,4BAMT,GAAI,CAFY,EAAgB,CAAe,EAG7C,MAAO,0BAIT,IAAM,EAAe,EAAgB,OAC/B,EAAgB,EAAS,OAAS,EAGlC,EADe,EAAS,OAAO,CAAC,IAAM,EAAgB,SAAS,EAAE,EAAE,CAAC,EACxC,IAAI,CAAC,IAAM,OAAM,EAAE,SAAS,MAAM,EAAE,KAAK;AAAA,CAAI,EAE/E,MAAO;AAAA,EACT,cAAyB;AAAA;AAAA;AAAA,EAGzB,GAAgB,aAElB,EAEe,KCjER,IAAM,GAA0B,CACrC,GAAI,UACJ,MAAO,WACP,YAAa,sEACb,QAAS,MAAO,IAAY,CAC1B,IAAM,EAAiB,EAAQ,kBAAkB,EAEjD,GAAI,CAAC,EACH,MAAO,gCAGT,GAAI,EAAe,SAAS,SAAW,EACrC,MAAO,8CAGT,IAAM,EAAW,EAAQ,UAAU,EACnC,GAAI,CAAC,GAAU,iBAAmB,CAAC,GAAU,aAC3C,MAAO,0EAGT,EAAQ,YAAY,yDAAyD,EAE7E,GAAI,CAEF,IAAQ,eAAgB,KAAa,gCAC7B,cAAe,KAAa,gCAC5B,mBAAoB,KAAa,+BAGnC,EAAW,EAAY,EAAe,QAAQ,EAC9C,EAAiB,EAAS,YAAY,EAAe,UAE3D,GAAI,CAAC,GAAkB,CAAC,EAAS,aAAa,CAAc,EAC1D,MAAO,YAAY,EAAe,uCAGpC,IAAM,EAAQ,EAAS,aAAa,EAAgB,EAAe,KAAK,EAsBlE,EAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAnBM,EAAe,SAAS,IAAI,CAAC,IAAQ,CAK/D,IAAI,EAHc,EAAI,QACnB,OAAO,CAAC,IAAS,EAAK,OAAS,MAAM,EACrC,IAAI,CAAC,IAAc,EAAK,OAAO,EACV,KAAK;AAAA,CAAI,EAGjC,GAAI,EAAI,aAAe,EAAI,YAAY,OAAS,EAAG,CACjD,IAAM,EAAkB,EAAI,YACzB,IAAI,CAAC,IAAQ,cAAc,EAAI,eAAe,EAC9C,KAAK;AAAA,CAAI,EACZ,GAAW;AAAA,EAAK,IAGlB,MAAO,GAAG,EAAI,OAAS,OAAS,OAAS,gBAAgB,IAC1D,EAAE,KAAK;AAAA;AAAA;AAAA;AAAA,CAAa;AAAA;AAAA,oDAsBf,EAAS,MAAM,EAAW,CAC9B,QACA,SAAU,CACR,CACE,KAAM,OACN,QAAS,CACX,CACF,EACA,UAAW,IACb,CAAC,EAGG,EAAU,GACd,cAAiB,KAAS,EAAO,WAC/B,GAAW,EAGb,GAAI,CAAC,GAAW,EAAQ,KAAK,EAAE,SAAW,EACxC,MAAO,gDAIT,IAAM,EAAe,EAAQ,cAC3B,EAAe,SACf,EAAe,KACjB,GAGQ,eAAgB,KAAa,+BACvB,EAAY,SAAS,EAG7B,WACJ,EACA,OACA,CACE,CACE,KAAM,OACN,QAAS;AAAA;AAAA,EAAsC;AAAA;AAAA;AAAA;AAAA,0HACjD,CACF,CACF,EAGA,EAAQ,kBAAkB,CAAY,EAEtC,IAAM,EAAe,EAAe,SAAS,OAG7C,MAAO,wBAFc,EAAe,OAAS,wBAEG;AAAA;AAAA;AAAA;AAAA,oEAChD,MAAO,EAAO,CACd,IAAM,EAAW,aAAiB,MAAQ,EAAM,QAAU,OAAO,CAAK,EAEtE,OADA,EAAQ,OAAO,oBAAoB,GAAU,EACtC,8BAA8B,KAG3C,EAEe,KCvIf,IAAe,GACb,GAAI,gBACJ,MAAO,iBACP,YAAa,gDACb,KAAM,CACJ,CACE,KAAM,SACN,YAAa,4CACb,SAAU,GACV,YAAa,CAAC,OAAQ,SAAU,SAAS,CAC3C,EACA,CACE,KAAM,OACN,YAAa,4DACb,SAAU,GACV,YAAa,CAAC,KAAM,WAAY,QAAS,KAAK,CAChD,CACF,OAEM,QAAO,CAAC,EAAgB,EAAwC,CACpE,IAAQ,6BAA4B,wBAAyB,EAE7D,GAAI,EAAK,SAAW,EAAG,CACrB,EAAQ,aAAa;AAAA;AAAA,CAAyD,EAC9E,OAGF,IAAM,EAAS,EAAK,GAAG,YAAY,EAEnC,OAAQ,OACD,OACH,EAAQ,aAAa;AAAA;AAAA,CAA8B,EACnD,EAAQ,aAAa,uBAAuB,EAAqB,gBAAkB,YAAa;AAAA,CAAgB,EAChH,EAAQ,aAAa,6BAA6B,EAAqB,sBAAwB,YAAa;AAAA,CAAgB,EAC5H,EAAQ,aAAa,oBAAoB,EAAqB,MAAQ,YAAa;AAAA,CAAgB,EACnG,EAAQ,aAAa;AAAA;AAAA,CAAkE,EACvF,UAEG,aACA,UAAW,CACd,IAAM,EAAY,IAAW,SAE7B,GAAI,EAAK,SAAW,GAAK,EAAK,KAAO,MAEnC,EAA2B,CACzB,gBAAiB,EACjB,sBAAuB,EACvB,MAAO,CACT,CAAC,EACD,EAAQ,aAAa;AAAA,EAAK,EAAY,IAAK,yBAAyB,EAAY,UAAY;AAAA,CAAc,EACrG,KACL,IAAM,EAAO,EAAK,GAAG,YAAY,EAC3B,EAAe,CAAC,EAEtB,OAAQ,OACD,KACH,EAAQ,gBAAkB,EAC1B,UACG,WACH,EAAQ,sBAAwB,EAChC,UACG,QACH,EAAQ,MAAQ,EAChB,cAEA,EAAQ,aAAa;AAAA,+BAAiC;AAAA,CAAQ,EAC9D,EAAQ,aAAa;AAAA,CAAyC,EAC9D,OAGJ,EAA2B,CAAO,EAClC,EAAQ,aAAa;AAAA,EAAK,EAAY,IAAK,OAAO,mBAAsB,EAAY,UAAY;AAAA,CAAc,EAEhH,KACF,SAGE,EAAQ,aAAa;AAAA,oBAAsB;AAAA,CAAU,EACrD,EAAQ,aAAa;AAAA,CAAwC,GAGrE,EC/DO,IAAM,EAAsB,CACjC,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,CACF,EAKO,SAAS,EAAU,CAAC,EAAiC,CAC1D,OAAO,EAAS,KAAK,KAAO,EAAI,KAAO,CAAE,EAMpC,SAAS,EAAiB,CAAC,EAAoC,CACpE,OAAO,EAAS,KAAK,KAAO,EAAI,QAAU,CAAK",
22
+ "debugId": "B900832BE92D553664756E2164756E21",
23
+ "names": []
24
+ }
@@ -0,0 +1,16 @@
1
+ import{pa as k}from"./chunk-jgsq3xax.js";import"./chunk-m9nt0bj3.js";import{Lb as _Z,Mb as PZ}from"./chunk-sxy6vp20.js";var eY=PZ((IZ,ZY)=>{(function(){function Z(Y,Q){Object.defineProperty(W.prototype,Y,{get:function(){console.warn("%s(...) is deprecated in plain JavaScript React classes. %s",Q[0],Q[1])}})}function X(Y){if(Y===null||typeof Y!=="object")return null;return Y=gY&&Y[gY]||Y["@@iterator"],typeof Y==="function"?Y:null}function G(Y,Q){Y=(Y=Y.constructor)&&(Y.displayName||Y.name)||"ReactClass";var $=Y+"."+Q;bY[$]||(console.error("Can't call %s on a component that is not yet mounted. This is a no-op, but it might indicate a bug in your application. Instead, assign to `this.state` directly or define a `state = {};` class property with the desired state in the %s component.",Q,Y),bY[$]=!0)}function W(Y,Q,$){this.props=Y,this.context=Q,this.refs=NY,this.updater=$||yY}function B(){}function U(Y,Q,$){this.props=Y,this.context=Q,this.refs=NY,this.updater=$||yY}function K(){}function J(Y){return""+Y}function M(Y){try{J(Y);var Q=!1}catch(q){Q=!0}if(Q){Q=console;var $=Q.error,H=typeof Symbol==="function"&&Symbol.toStringTag&&Y[Symbol.toStringTag]||Y.constructor.name||"Object";return $.call(Q,"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",H),J(Y)}}function O(Y){if(Y==null)return null;if(typeof Y==="function")return Y.$$typeof===DZ?null:Y.displayName||Y.name||null;if(typeof Y==="string")return Y;switch(Y){case MY:return"Fragment";case kY:return"Profiler";case TY:return"StrictMode";case vY:return"Suspense";case EZ:return"SuspenseList";case mY:return"Activity"}if(typeof Y==="object")switch(typeof Y.tag==="number"&&console.error("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."),Y.$$typeof){case AY:return"Portal";case fY:return Y.displayName||"Context";case zY:return(Y._context.displayName||"Context")+".Consumer";case SY:var Q=Y.render;return Y=Y.displayName,Y||(Y=Q.displayName||Q.name||"",Y=Y!==""?"ForwardRef("+Y+")":"ForwardRef"),Y;case wY:return Q=Y.displayName||null,Q!==null?Q:O(Y.type)||"Memo";case u:Q=Y._payload,Y=Y._init;try{return O(Y(Q))}catch($){}}return null}function D(Y){if(Y===MY)return"<>";if(typeof Y==="object"&&Y!==null&&Y.$$typeof===u)return"<...>";try{var Q=O(Y);return Q?"<"+Q+">":"<...>"}catch($){return"<...>"}}function x(){var Y=w.A;return Y===null?null:Y.getOwner()}function E(){return Error("react-stack-top-frame")}function V(Y){if(a.call(Y,"key")){var Q=Object.getOwnPropertyDescriptor(Y,"key").get;if(Q&&Q.isReactWarning)return!1}return Y.key!==void 0}function _(Y,Q){function $(){cY||(cY=!0,console.error("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)",Q))}$.isReactWarning=!0,Object.defineProperty(Y,"key",{get:$,configurable:!0})}function I(){var Y=O(this.type);return pY[Y]||(pY[Y]=!0,console.error("Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.")),Y=this.props.ref,Y!==void 0?Y:null}function A(Y,Q,$,H,q,N){var z=$.ref;return Y={$$typeof:KY,type:Y,key:Q,props:$,_owner:H},(z!==void 0?z:null)!==null?Object.defineProperty(Y,"ref",{enumerable:!1,get:I}):Object.defineProperty(Y,"ref",{enumerable:!1,value:null}),Y._store={},Object.defineProperty(Y._store,"validated",{configurable:!1,enumerable:!1,writable:!0,value:0}),Object.defineProperty(Y,"_debugInfo",{configurable:!1,enumerable:!1,writable:!0,value:null}),Object.defineProperty(Y,"_debugStack",{configurable:!1,enumerable:!1,writable:!0,value:q}),Object.defineProperty(Y,"_debugTask",{configurable:!1,enumerable:!1,writable:!0,value:N}),Object.freeze&&(Object.freeze(Y.props),Object.freeze(Y)),Y}function LZ(Y,Q){return Q=A(Y.type,Q,Y.props,Y._owner,Y._debugStack,Y._debugTask),Y._store&&(Q._store.validated=Y._store.validated),Q}function IY(Y){m(Y)?Y._store&&(Y._store.validated=1):typeof Y==="object"&&Y!==null&&Y.$$typeof===u&&(Y._payload.status==="fulfilled"?m(Y._payload.value)&&Y._payload.value._store&&(Y._payload.value._store.validated=1):Y._store&&(Y._store.validated=1))}function m(Y){return typeof Y==="object"&&Y!==null&&Y.$$typeof===KY}function OZ(Y){var Q={"=":"=0",":":"=2"};return"$"+Y.replace(/[=:]/g,function($){return Q[$]})}function UY(Y,Q){return typeof Y==="object"&&Y!==null&&Y.key!=null?(M(Y.key),OZ(""+Y.key)):Q.toString(36)}function xZ(Y){switch(Y.status){case"fulfilled":return Y.value;case"rejected":throw Y.reason;default:switch(typeof Y.status==="string"?Y.then(K,K):(Y.status="pending",Y.then(function(Q){Y.status==="pending"&&(Y.status="fulfilled",Y.value=Q)},function(Q){Y.status==="pending"&&(Y.status="rejected",Y.reason=Q)})),Y.status){case"fulfilled":return Y.value;case"rejected":throw Y.reason}}throw Y}function g(Y,Q,$,H,q){var N=typeof Y;if(N==="undefined"||N==="boolean")Y=null;var z=!1;if(Y===null)z=!0;else switch(N){case"bigint":case"string":case"number":z=!0;break;case"object":switch(Y.$$typeof){case KY:case AY:z=!0;break;case u:return z=Y._init,g(z(Y._payload),Q,$,H,q)}}if(z){z=Y,q=q(z);var R=H===""?"."+UY(z,0):H;return uY(q)?($="",R!=null&&($=R.replace(nY,"$&/")+"/"),g(q,Q,$,"",function(T){return T})):q!=null&&(m(q)&&(q.key!=null&&(z&&z.key===q.key||M(q.key)),$=LZ(q,$+(q.key==null||z&&z.key===q.key?"":(""+q.key).replace(nY,"$&/")+"/")+R),H!==""&&z!=null&&m(z)&&z.key==null&&z._store&&!z._store.validated&&($._store.validated=2),q=$),Q.push(q)),1}if(z=0,R=H===""?".":H+":",uY(Y))for(var L=0;L<Y.length;L++)H=Y[L],N=R+UY(H,L),z+=g(H,Q,$,N,q);else if(L=X(Y),typeof L==="function")for(L===Y.entries&&(iY||console.warn("Using Maps as children is not supported. Use an array of keyed ReactElements instead."),iY=!0),Y=L.call(Y),L=0;!(H=Y.next()).done;)H=H.value,N=R+UY(H,L++),z+=g(H,Q,$,N,q);else if(N==="object"){if(typeof Y.then==="function")return g(xZ(Y),Q,$,H,q);throw Q=String(Y),Error("Objects are not valid as a React child (found: "+(Q==="[object Object]"?"object with keys {"+Object.keys(Y).join(", ")+"}":Q)+"). If you meant to render a collection of children, use an array instead.")}return z}function s(Y,Q,$){if(Y==null)return Y;var H=[],q=0;return g(Y,H,"","",function(N){return Q.call($,N,q++)}),H}function RZ(Y){if(Y._status===-1){var Q=Y._ioInfo;Q!=null&&(Q.start=Q.end=performance.now()),Q=Y._result;var $=Q();if($.then(function(q){if(Y._status===0||Y._status===-1){Y._status=1,Y._result=q;var N=Y._ioInfo;N!=null&&(N.end=performance.now()),$.status===void 0&&($.status="fulfilled",$.value=q)}},function(q){if(Y._status===0||Y._status===-1){Y._status=2,Y._result=q;var N=Y._ioInfo;N!=null&&(N.end=performance.now()),$.status===void 0&&($.status="rejected",$.reason=q)}}),Q=Y._ioInfo,Q!=null){Q.value=$;var H=$.displayName;typeof H==="string"&&(Q.name=H)}Y._status===-1&&(Y._status=0,Y._result=$)}if(Y._status===1)return Q=Y._result,Q===void 0&&console.error(`lazy: Expected the result of a dynamic import() call. Instead received: %s
2
+
3
+ Your code should look like:
4
+ const MyComponent = lazy(() => import('./MyComponent'))
5
+
6
+ Did you accidentally put curly braces around the import?`,Q),"default"in Q||console.error(`lazy: Expected the result of a dynamic import() call. Instead received: %s
7
+
8
+ Your code should look like:
9
+ const MyComponent = lazy(() => import('./MyComponent'))`,Q),Q.default;throw Y._result}function j(){var Y=w.H;return Y===null&&console.error(`Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:
10
+ 1. You might have mismatching versions of React and the renderer (such as React DOM)
11
+ 2. You might be breaking the Rules of Hooks
12
+ 3. You might have more than one copy of React in the same app
13
+ See https://react.dev/link/invalid-hook-call for tips about how to debug and fix this problem.`),Y}function _Y(){w.asyncTransitions--}function o(Y){if(t===null)try{var Q=("require"+Math.random()).slice(0,7);t=(ZY&&ZY[Q]).call(ZY,"timers").setImmediate}catch($){t=function(H){oY===!1&&(oY=!0,typeof MessageChannel>"u"&&console.error("This browser does not have a MessageChannel implementation, so enqueuing tasks via await act(async () => ...) will fail. Please file an issue at https://github.com/facebook/react/issues if you encounter this warning."));var q=new MessageChannel;q.port1.onmessage=H,q.port2.postMessage(void 0)}}return t(Y)}function h(Y){return 1<Y.length&&typeof AggregateError==="function"?AggregateError(Y):Y[0]}function r(Y,Q){Q!==e-1&&console.error("You seem to have overlapping act() calls, this is not supported. Be sure to await previous act() calls before making a new one. "),e=Q}function JY(Y,Q,$){var H=w.actQueue;if(H!==null)if(H.length!==0)try{qY(H),o(function(){return JY(Y,Q,$)});return}catch(q){w.thrownErrors.push(q)}else w.actQueue=null;0<w.thrownErrors.length?(H=h(w.thrownErrors),w.thrownErrors.length=0,$(H)):Q(Y)}function qY(Y){if(!LY){LY=!0;var Q=0;try{for(;Q<Y.length;Q++){var $=Y[Q];do{w.didUsePromise=!1;var H=$(!1);if(H!==null){if(w.didUsePromise){Y[Q]=$,Y.splice(0,Q);return}$=H}else break}while(1)}Y.length=0}catch(q){Y.splice(0,Q+1),w.thrownErrors.push(q)}finally{LY=!1}}}typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"&&typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart==="function"&&__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());var KY=Symbol.for("react.transitional.element"),AY=Symbol.for("react.portal"),MY=Symbol.for("react.fragment"),TY=Symbol.for("react.strict_mode"),kY=Symbol.for("react.profiler"),zY=Symbol.for("react.consumer"),fY=Symbol.for("react.context"),SY=Symbol.for("react.forward_ref"),vY=Symbol.for("react.suspense"),EZ=Symbol.for("react.suspense_list"),wY=Symbol.for("react.memo"),u=Symbol.for("react.lazy"),mY=Symbol.for("react.activity"),gY=Symbol.iterator,bY={},yY={isMounted:function(){return!1},enqueueForceUpdate:function(Y){G(Y,"forceUpdate")},enqueueReplaceState:function(Y){G(Y,"replaceState")},enqueueSetState:function(Y){G(Y,"setState")}},hY=Object.assign,NY={};Object.freeze(NY),W.prototype.isReactComponent={},W.prototype.setState=function(Y,Q){if(typeof Y!=="object"&&typeof Y!=="function"&&Y!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,Y,Q,"setState")},W.prototype.forceUpdate=function(Y){this.updater.enqueueForceUpdate(this,Y,"forceUpdate")};var P={isMounted:["isMounted","Instead, make sure to clean up subscriptions and pending requests in componentWillUnmount to prevent memory leaks."],replaceState:["replaceState","Refactor your code to use setState instead (see https://github.com/facebook/react/issues/3236)."]};for(d in P)P.hasOwnProperty(d)&&Z(d,P[d]);B.prototype=W.prototype,P=U.prototype=new B,P.constructor=U,hY(P,W.prototype),P.isPureReactComponent=!0;var uY=Array.isArray,DZ=Symbol.for("react.client.reference"),w={H:null,A:null,T:null,S:null,actQueue:null,asyncTransitions:0,isBatchingLegacy:!1,didScheduleLegacyUpdate:!1,didUsePromise:!1,thrownErrors:[],getCurrentStack:null,recentlyCreatedOwnerStacks:0},a=Object.prototype.hasOwnProperty,dY=console.createTask?console.createTask:function(){return null};P={react_stack_bottom_frame:function(Y){return Y()}};var cY,lY,pY={},jZ=P.react_stack_bottom_frame.bind(P,E)(),FZ=dY(D(E)),iY=!1,nY=/\/+/g,sY=typeof reportError==="function"?reportError:function(Y){if(typeof window==="object"&&typeof window.ErrorEvent==="function"){var Q=new window.ErrorEvent("error",{bubbles:!0,cancelable:!0,message:typeof Y==="object"&&Y!==null&&typeof Y.message==="string"?String(Y.message):String(Y),error:Y});if(!window.dispatchEvent(Q))return}else if(typeof process==="object"&&typeof process.emit==="function"){process.emit("uncaughtException",Y);return}console.error(Y)},oY=!1,t=null,e=0,YY=!1,LY=!1,rY=typeof queueMicrotask==="function"?function(Y){queueMicrotask(function(){return queueMicrotask(Y)})}:o;P=Object.freeze({__proto__:null,c:function(Y){return j().useMemoCache(Y)}});var d={map:s,forEach:function(Y,Q,$){s(Y,function(){Q.apply(this,arguments)},$)},count:function(Y){var Q=0;return s(Y,function(){Q++}),Q},toArray:function(Y){return s(Y,function(Q){return Q})||[]},only:function(Y){if(!m(Y))throw Error("React.Children.only expected to receive a single React element child.");return Y}};IZ.Activity=mY,IZ.Children=d,IZ.Component=W,IZ.Fragment=MY,IZ.Profiler=kY,IZ.PureComponent=U,IZ.StrictMode=TY,IZ.Suspense=vY,IZ.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=w,IZ.__COMPILER_RUNTIME=P,IZ.act=function(Y){var Q=w.actQueue,$=e;e++;var H=w.actQueue=Q!==null?Q:[],q=!1;try{var N=Y()}catch(L){w.thrownErrors.push(L)}if(0<w.thrownErrors.length)throw r(Q,$),Y=h(w.thrownErrors),w.thrownErrors.length=0,Y;if(N!==null&&typeof N==="object"&&typeof N.then==="function"){var z=N;return rY(function(){q||YY||(YY=!0,console.error("You called act(async () => ...) without await. This could lead to unexpected testing behaviour, interleaving multiple act calls and mixing their scopes. You should - await act(async () => ...);"))}),{then:function(L,T){q=!0,z.then(function(b){if(r(Q,$),$===0){try{qY(H),o(function(){return JY(b,L,T)})}catch(CZ){w.thrownErrors.push(CZ)}if(0<w.thrownErrors.length){var VZ=h(w.thrownErrors);w.thrownErrors.length=0,T(VZ)}}else L(b)},function(b){r(Q,$),0<w.thrownErrors.length?(b=h(w.thrownErrors),w.thrownErrors.length=0,T(b)):T(b)})}}}var R=N;if(r(Q,$),$===0&&(qY(H),H.length!==0&&rY(function(){q||YY||(YY=!0,console.error("A component suspended inside an `act` scope, but the `act` call was not awaited. When testing React components that depend on asynchronous data, you must await the result:\n\nawait act(() => ...)"))}),w.actQueue=null),0<w.thrownErrors.length)throw Y=h(w.thrownErrors),w.thrownErrors.length=0,Y;return{then:function(L,T){q=!0,$===0?(w.actQueue=H,o(function(){return JY(R,L,T)})):L(R)}}},IZ.cache=function(Y){return function(){return Y.apply(null,arguments)}},IZ.cacheSignal=function(){return null},IZ.captureOwnerStack=function(){var Y=w.getCurrentStack;return Y===null?null:Y()},IZ.cloneElement=function(Y,Q,$){if(Y===null||Y===void 0)throw Error("The argument must be a React element, but you passed "+Y+".");var H=hY({},Y.props),q=Y.key,N=Y._owner;if(Q!=null){var z;Y:{if(a.call(Q,"ref")&&(z=Object.getOwnPropertyDescriptor(Q,"ref").get)&&z.isReactWarning){z=!1;break Y}z=Q.ref!==void 0}z&&(N=x()),V(Q)&&(M(Q.key),q=""+Q.key);for(R in Q)!a.call(Q,R)||R==="key"||R==="__self"||R==="__source"||R==="ref"&&Q.ref===void 0||(H[R]=Q[R])}var R=arguments.length-2;if(R===1)H.children=$;else if(1<R){z=Array(R);for(var L=0;L<R;L++)z[L]=arguments[L+2];H.children=z}H=A(Y.type,q,H,N,Y._debugStack,Y._debugTask);for(q=2;q<arguments.length;q++)IY(arguments[q]);return H},IZ.createContext=function(Y){return Y={$$typeof:fY,_currentValue:Y,_currentValue2:Y,_threadCount:0,Provider:null,Consumer:null},Y.Provider=Y,Y.Consumer={$$typeof:zY,_context:Y},Y._currentRenderer=null,Y._currentRenderer2=null,Y},IZ.createElement=function(Y,Q,$){for(var H=2;H<arguments.length;H++)IY(arguments[H]);H={};var q=null;if(Q!=null)for(L in lY||!("__self"in Q)||"key"in Q||(lY=!0,console.warn("Your app (or one of its dependencies) is using an outdated JSX transform. Update to the modern JSX transform for faster performance: https://react.dev/link/new-jsx-transform")),V(Q)&&(M(Q.key),q=""+Q.key),Q)a.call(Q,L)&&L!=="key"&&L!=="__self"&&L!=="__source"&&(H[L]=Q[L]);var N=arguments.length-2;if(N===1)H.children=$;else if(1<N){for(var z=Array(N),R=0;R<N;R++)z[R]=arguments[R+2];Object.freeze&&Object.freeze(z),H.children=z}if(Y&&Y.defaultProps)for(L in N=Y.defaultProps,N)H[L]===void 0&&(H[L]=N[L]);q&&_(H,typeof Y==="function"?Y.displayName||Y.name||"Unknown":Y);var L=1e4>w.recentlyCreatedOwnerStacks++;return A(Y,q,H,x(),L?Error("react-stack-top-frame"):jZ,L?dY(D(Y)):FZ)},IZ.createRef=function(){var Y={current:null};return Object.seal(Y),Y},IZ.forwardRef=function(Y){Y!=null&&Y.$$typeof===wY?console.error("forwardRef requires a render function but received a `memo` component. Instead of forwardRef(memo(...)), use memo(forwardRef(...))."):typeof Y!=="function"?console.error("forwardRef requires a render function but was given %s.",Y===null?"null":typeof Y):Y.length!==0&&Y.length!==2&&console.error("forwardRef render functions accept exactly two parameters: props and ref. %s",Y.length===1?"Did you forget to use the ref parameter?":"Any additional parameter will be undefined."),Y!=null&&Y.defaultProps!=null&&console.error("forwardRef render functions do not support defaultProps. Did you accidentally pass a React component?");var Q={$$typeof:SY,render:Y},$;return Object.defineProperty(Q,"displayName",{enumerable:!1,configurable:!0,get:function(){return $},set:function(H){$=H,Y.name||Y.displayName||(Object.defineProperty(Y,"name",{value:H}),Y.displayName=H)}}),Q},IZ.isValidElement=m,IZ.lazy=function(Y){Y={_status:-1,_result:Y};var Q={$$typeof:u,_payload:Y,_init:RZ},$={name:"lazy",start:-1,end:-1,value:null,owner:null,debugStack:Error("react-stack-top-frame"),debugTask:console.createTask?console.createTask("lazy()"):null};return Y._ioInfo=$,Q._debugInfo=[{awaited:$}],Q},IZ.memo=function(Y,Q){Y==null&&console.error("memo: The first argument must be a component. Instead received: %s",Y===null?"null":typeof Y),Q={$$typeof:wY,type:Y,compare:Q===void 0?null:Q};var $;return Object.defineProperty(Q,"displayName",{enumerable:!1,configurable:!0,get:function(){return $},set:function(H){$=H,Y.name||Y.displayName||(Object.defineProperty(Y,"name",{value:H}),Y.displayName=H)}}),Q},IZ.startTransition=function(Y){var Q=w.T,$={};$._updatedFibers=new Set,w.T=$;try{var H=Y(),q=w.S;q!==null&&q($,H),typeof H==="object"&&H!==null&&typeof H.then==="function"&&(w.asyncTransitions++,H.then(_Y,_Y),H.then(K,sY))}catch(N){sY(N)}finally{Q===null&&$._updatedFibers&&(Y=$._updatedFibers.size,$._updatedFibers.clear(),10<Y&&console.warn("Detected a large number of updates inside startTransition. If this is due to a subscription please re-write it to use React provided hooks. Otherwise concurrent mode guarantees are off the table.")),Q!==null&&$.types!==null&&(Q.types!==null&&Q.types!==$.types&&console.error("We expected inner Transitions to have transferred the outer types set and that you cannot add to the outer Transition while inside the inner.This is a bug in React."),Q.types=$.types),w.T=Q}},IZ.unstable_useCacheRefresh=function(){return j().useCacheRefresh()},IZ.use=function(Y){return j().use(Y)},IZ.useActionState=function(Y,Q,$){return j().useActionState(Y,Q,$)},IZ.useCallback=function(Y,Q){return j().useCallback(Y,Q)},IZ.useContext=function(Y){var Q=j();return Y.$$typeof===zY&&console.error("Calling useContext(Context.Consumer) is not supported and will cause bugs. Did you mean to call useContext(Context) instead?"),Q.useContext(Y)},IZ.useDebugValue=function(Y,Q){return j().useDebugValue(Y,Q)},IZ.useDeferredValue=function(Y,Q){return j().useDeferredValue(Y,Q)},IZ.useEffect=function(Y,Q){return Y==null&&console.warn("React Hook useEffect requires an effect callback. Did you forget to pass a callback to the hook?"),j().useEffect(Y,Q)},IZ.useEffectEvent=function(Y){return j().useEffectEvent(Y)},IZ.useId=function(){return j().useId()},IZ.useImperativeHandle=function(Y,Q,$){return j().useImperativeHandle(Y,Q,$)},IZ.useInsertionEffect=function(Y,Q){return Y==null&&console.warn("React Hook useInsertionEffect requires an effect callback. Did you forget to pass a callback to the hook?"),j().useInsertionEffect(Y,Q)},IZ.useLayoutEffect=function(Y,Q){return Y==null&&console.warn("React Hook useLayoutEffect requires an effect callback. Did you forget to pass a callback to the hook?"),j().useLayoutEffect(Y,Q)},IZ.useMemo=function(Y,Q){return j().useMemo(Y,Q)},IZ.useOptimistic=function(Y,Q){return j().useOptimistic(Y,Q)},IZ.useReducer=function(Y,Q,$){return j().useReducer(Y,Q,$)},IZ.useRef=function(Y){return j().useRef(Y)},IZ.useState=function(Y){return j().useState(Y)},IZ.useSyncExternalStore=function(Y,Q,$){return j().useSyncExternalStore(Y,Q,$)},IZ.useTransition=function(){return j().useTransition()},IZ.version="19.2.0",typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"&&typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop==="function"&&__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error())})()});var aY=(Z)=>{let X,G=new Set,W=(O,D)=>{let x=typeof O==="function"?O(X):O;if(!Object.is(x,X)){let E=X;X=(D!=null?D:typeof x!=="object"||x===null)?x:Object.assign({},X,x),G.forEach((V)=>V(X,E))}},B=()=>X,J={setState:W,getState:B,getInitialState:()=>M,subscribe:(O)=>{return G.add(O),()=>G.delete(O)}},M=X=Z(W,B,J);return J},tY=(Z)=>Z?aY(Z):aY;var c=_Z(eY(),1);var AZ=(Z)=>Z;function TZ(Z,X=AZ){let G=c.default.useSyncExternalStore(Z.subscribe,c.default.useCallback(()=>X(Z.getState()),[Z,X]),c.default.useCallback(()=>X(Z.getInitialState()),[Z,X]));return c.default.useDebugValue(G),G}var YZ=(Z)=>{let X=tY(Z),G=(W)=>TZ(X,W);return Object.assign(G,X),G},ZZ=(Z)=>Z?YZ(Z):YZ;var HZ=Symbol.for("immer-nothing"),XZ=Symbol.for("immer-draftable"),C=Symbol.for("immer-state"),kZ=[function(Z){return`The plugin for '${Z}' has not been loaded into Immer. To enable the plugin, import and call \`enable${Z}()\` when initializing your application.`},function(Z){return`produce can only be called on things that are draftable: plain objects, arrays, Map, Set or classes that are marked with '[immerable]: true'. Got '${Z}'`},"This object has been frozen and should not be mutated",function(Z){return"Cannot use a proxy that has been revoked. Did you pass an object from inside an immer function to an async process? "+Z},"An immer producer returned a new value *and* modified its draft. Either return a new value *or* modify the draft.","Immer forbids circular references","The first or second argument to `produce` must be a function","The third argument to `produce` must be a function or undefined","First argument to `createDraft` must be a plain object, an array, or an immerable object","First argument to `finishDraft` must be a draft returned by `createDraft`",function(Z){return`'current' expects a draft, got: ${Z}`},"Object.defineProperty() cannot be used on an Immer draft","Object.setPrototypeOf() cannot be used on an Immer draft","Immer only supports deleting array indices","Immer only supports setting array indices and the 'length' property",function(Z){return`'original' expects a draft, got: ${Z}`}];function F(Z,...X){{let G=kZ[Z],W=typeof G==="function"?G.apply(null,X):G;throw Error(`[Immer] ${W}`)}throw Error(`[Immer] minified error nr: ${Z}. Full error at: https://bit.ly/3cXEKWf`)}var l=Object.getPrototypeOf;function y(Z){return!!Z&&!!Z[C]}function S(Z){if(!Z)return!1;return UZ(Z)||Array.isArray(Z)||!!Z[XZ]||!!Z.constructor?.[XZ]||n(Z)||$Y(Z)}var fZ=Object.prototype.constructor.toString(),GZ=new WeakMap;function UZ(Z){if(!Z||typeof Z!=="object")return!1;let X=Object.getPrototypeOf(Z);if(X===null||X===Object.prototype)return!0;let G=Object.hasOwnProperty.call(X,"constructor")&&X.constructor;if(G===Object)return!0;if(typeof G!=="function")return!1;let W=GZ.get(G);if(W===void 0)W=Function.toString.call(G),GZ.set(G,W);return W===fZ}function GY(Z,X,G=!0){if(BY(Z)===0)(G?Reflect.ownKeys(Z):Object.keys(Z)).forEach((B)=>{X(B,Z[B],Z)});else Z.forEach((W,B)=>X(B,W,Z))}function BY(Z){let X=Z[C];return X?X.type_:Array.isArray(Z)?1:n(Z)?2:$Y(Z)?3:0}function RY(Z,X){return BY(Z)===2?Z.has(X):Object.prototype.hasOwnProperty.call(Z,X)}function JZ(Z,X,G){let W=BY(Z);if(W===2)Z.set(X,G);else if(W===3)Z.add(G);else Z[X]=G}function SZ(Z,X){if(Z===X)return Z!==0||1/Z===1/X;else return Z!==Z&&X!==X}function n(Z){return Z instanceof Map}function $Y(Z){return Z instanceof Set}function f(Z){return Z.copy_||Z.base_}function EY(Z,X){if(n(Z))return new Map(Z);if($Y(Z))return new Set(Z);if(Array.isArray(Z))return Array.prototype.slice.call(Z);let G=UZ(Z);if(X===!0||X==="class_only"&&!G){let W=Object.getOwnPropertyDescriptors(Z);delete W[C];let B=Reflect.ownKeys(W);for(let U=0;U<B.length;U++){let K=B[U],J=W[K];if(J.writable===!1)J.writable=!0,J.configurable=!0;if(J.get||J.set)W[K]={configurable:!0,writable:!0,enumerable:J.enumerable,value:Z[K]}}return Object.create(l(Z),W)}else{let W=l(Z);if(W!==null&&G)return{...Z};let B=Object.create(W);return Object.assign(B,Z)}}function CY(Z,X=!1){if(HY(Z)||y(Z)||!S(Z))return Z;if(BY(Z)>1)Object.defineProperties(Z,{set:XY,add:XY,clear:XY,delete:XY});if(Object.freeze(Z),X)Object.values(Z).forEach((G)=>CY(G,!0));return Z}function vZ(){F(2)}var XY={value:vZ};function HY(Z){if(Z===null||typeof Z!=="object")return!0;return Object.isFrozen(Z)}var mZ={};function v(Z){let X=mZ[Z];if(!X)F(0,Z);return X}var p;function qZ(){return p}function gZ(Z,X){return{drafts_:[],parent_:Z,immer_:X,canAutoFreeze_:!0,unfinalizedDrafts_:0}}function QZ(Z,X){if(X)v("Patches"),Z.patches_=[],Z.inversePatches_=[],Z.patchListener_=X}function DY(Z){jY(Z),Z.drafts_.forEach(bZ),Z.drafts_=null}function jY(Z){if(Z===p)p=Z.parent_}function WZ(Z){return p=gZ(p,Z)}function bZ(Z){let X=Z[C];if(X.type_===0||X.type_===1)X.revoke_();else X.revoked_=!0}function BZ(Z,X){X.unfinalizedDrafts_=X.drafts_.length;let G=X.drafts_[0];if(Z!==void 0&&Z!==G){if(G[C].modified_)DY(X),F(4);if(S(Z)){if(Z=QY(X,Z),!X.parent_)WY(X,Z)}if(X.patches_)v("Patches").generateReplacementPatches_(G[C].base_,Z,X.patches_,X.inversePatches_)}else Z=QY(X,G,[]);if(DY(X),X.patches_)X.patchListener_(X.patches_,X.inversePatches_);return Z!==HZ?Z:void 0}function QY(Z,X,G){if(HY(X))return X;let W=Z.immer_.shouldUseStrictIteration(),B=X[C];if(!B)return GY(X,(U,K)=>$Z(Z,B,X,U,K,G),W),X;if(B.scope_!==Z)return X;if(!B.modified_)return WY(Z,B.base_,!0),B.base_;if(!B.finalized_){B.finalized_=!0,B.scope_.unfinalizedDrafts_--;let U=B.copy_,K=U,J=!1;if(B.type_===3)K=new Set(U),U.clear(),J=!0;if(GY(K,(M,O)=>$Z(Z,B,U,M,O,G,J),W),WY(Z,U,!1),G&&Z.patches_)v("Patches").generatePatches_(B,G,Z.patches_,Z.inversePatches_)}return B.copy_}function $Z(Z,X,G,W,B,U,K){if(B==null)return;if(typeof B!=="object"&&!K)return;let J=HY(B);if(J&&!K)return;if(B===G)F(5);if(y(B)){let M=U&&X&&X.type_!==3&&!RY(X.assigned_,W)?U.concat(W):void 0,O=QY(Z,B,M);if(JZ(G,W,O),y(O))Z.canAutoFreeze_=!1;else return}else if(K)G.add(B);if(S(B)&&!J){if(!Z.immer_.autoFreeze_&&Z.unfinalizedDrafts_<1)return;if(X&&X.base_&&X.base_[W]===B&&J)return;if(QY(Z,B),(!X||!X.scope_.parent_)&&typeof W!=="symbol"&&(n(G)?G.has(W):Object.prototype.propertyIsEnumerable.call(G,W)))WY(Z,B)}}function WY(Z,X,G=!1){if(!Z.parent_&&Z.immer_.autoFreeze_&&Z.canAutoFreeze_)CY(X,G)}function yZ(Z,X){let G=Array.isArray(Z),W={type_:G?1:0,scope_:X?X.scope_:qZ(),modified_:!1,finalized_:!1,assigned_:{},parent_:X,base_:Z,draft_:null,copy_:null,revoke_:null,isManual_:!1},B=W,U=PY;if(G)B=[W],U=i;let{revoke:K,proxy:J}=Proxy.revocable(B,U);return W.draft_=J,W.revoke_=K,J}var PY={get(Z,X){if(X===C)return Z;let G=f(Z);if(!RY(G,X))return hZ(Z,G,X);let W=G[X];if(Z.finalized_||!S(W))return W;if(W===OY(Z.base_,X))return xY(Z),Z.copy_[X]=VY(W,Z);return W},has(Z,X){return X in f(Z)},ownKeys(Z){return Reflect.ownKeys(f(Z))},set(Z,X,G){let W=KZ(f(Z),X);if(W?.set)return W.set.call(Z.draft_,G),!0;if(!Z.modified_){let B=OY(f(Z),X),U=B?.[C];if(U&&U.base_===G)return Z.copy_[X]=G,Z.assigned_[X]=!1,!0;if(SZ(G,B)&&(G!==void 0||RY(Z.base_,X)))return!0;xY(Z),FY(Z)}if(Z.copy_[X]===G&&(G!==void 0||(X in Z.copy_))||Number.isNaN(G)&&Number.isNaN(Z.copy_[X]))return!0;return Z.copy_[X]=G,Z.assigned_[X]=!0,!0},deleteProperty(Z,X){if(OY(Z.base_,X)!==void 0||X in Z.base_)Z.assigned_[X]=!1,xY(Z),FY(Z);else delete Z.assigned_[X];if(Z.copy_)delete Z.copy_[X];return!0},getOwnPropertyDescriptor(Z,X){let G=f(Z),W=Reflect.getOwnPropertyDescriptor(G,X);if(!W)return W;return{writable:!0,configurable:Z.type_!==1||X!=="length",enumerable:W.enumerable,value:G[X]}},defineProperty(){F(11)},getPrototypeOf(Z){return l(Z.base_)},setPrototypeOf(){F(12)}},i={};GY(PY,(Z,X)=>{i[Z]=function(){return arguments[0]=arguments[0][0],X.apply(this,arguments)}});i.deleteProperty=function(Z,X){if(isNaN(parseInt(X)))F(13);return i.set.call(this,Z,X,void 0)};i.set=function(Z,X,G){if(X!=="length"&&isNaN(parseInt(X)))F(14);return PY.set.call(this,Z[0],X,G,Z[0])};function OY(Z,X){let G=Z[C];return(G?f(G):Z)[X]}function hZ(Z,X,G){let W=KZ(X,G);return W?"value"in W?W.value:W.get?.call(Z.draft_):void 0}function KZ(Z,X){if(!(X in Z))return;let G=l(Z);while(G){let W=Object.getOwnPropertyDescriptor(G,X);if(W)return W;G=l(G)}return}function FY(Z){if(!Z.modified_){if(Z.modified_=!0,Z.parent_)FY(Z.parent_)}}function xY(Z){if(!Z.copy_)Z.copy_=EY(Z.base_,Z.scope_.immer_.useStrictShallowCopy_)}var uZ=class{constructor(Z){if(this.autoFreeze_=!0,this.useStrictShallowCopy_=!1,this.useStrictIteration_=!0,this.produce=(X,G,W)=>{if(typeof X==="function"&&typeof G!=="function"){let U=G;G=X;let K=this;return function(M=U,...O){return K.produce(M,(D)=>G.call(this,D,...O))}}if(typeof G!=="function")F(6);if(W!==void 0&&typeof W!=="function")F(7);let B;if(S(X)){let U=WZ(this),K=VY(X,void 0),J=!0;try{B=G(K),J=!1}finally{if(J)DY(U);else jY(U)}return QZ(U,W),BZ(B,U)}else if(!X||typeof X!=="object"){if(B=G(X),B===void 0)B=X;if(B===HZ)B=void 0;if(this.autoFreeze_)CY(B,!0);if(W){let U=[],K=[];v("Patches").generateReplacementPatches_(X,B,U,K),W(U,K)}return B}else F(1,X)},this.produceWithPatches=(X,G)=>{if(typeof X==="function")return(K,...J)=>this.produceWithPatches(K,(M)=>X(M,...J));let W,B;return[this.produce(X,G,(K,J)=>{W=K,B=J}),W,B]},typeof Z?.autoFreeze==="boolean")this.setAutoFreeze(Z.autoFreeze);if(typeof Z?.useStrictShallowCopy==="boolean")this.setUseStrictShallowCopy(Z.useStrictShallowCopy);if(typeof Z?.useStrictIteration==="boolean")this.setUseStrictIteration(Z.useStrictIteration)}createDraft(Z){if(!S(Z))F(8);if(y(Z))Z=dZ(Z);let X=WZ(this),G=VY(Z,void 0);return G[C].isManual_=!0,jY(X),G}finishDraft(Z,X){let G=Z&&Z[C];if(!G||!G.isManual_)F(9);let{scope_:W}=G;return QZ(W,X),BZ(void 0,W)}setAutoFreeze(Z){this.autoFreeze_=Z}setUseStrictShallowCopy(Z){this.useStrictShallowCopy_=Z}setUseStrictIteration(Z){this.useStrictIteration_=Z}shouldUseStrictIteration(){return this.useStrictIteration_}applyPatches(Z,X){let G;for(G=X.length-1;G>=0;G--){let B=X[G];if(B.path.length===0&&B.op==="replace"){Z=B.value;break}}if(G>-1)X=X.slice(G+1);let W=v("Patches").applyPatches_;if(y(Z))return W(Z,X);return this.produce(Z,(B)=>W(B,X))}};function VY(Z,X){let G=n(Z)?v("MapSet").proxyMap_(Z,X):$Y(Z)?v("MapSet").proxySet_(Z,X):yZ(Z,X);return(X?X.scope_:qZ()).drafts_.push(G),G}function dZ(Z){if(!y(Z))F(10,Z);return MZ(Z)}function MZ(Z){if(!S(Z)||HY(Z))return Z;let X=Z[C],G,W=!0;if(X){if(!X.modified_)return X.base_;X.finalized_=!0,G=EY(Z,X.scope_.immer_.useStrictShallowCopy_),W=X.scope_.immer_.shouldUseStrictIteration()}else G=EY(Z,!0);if(GY(G,(B,U)=>{JZ(G,B,MZ(U))},W),X)X.finalized_=!1;return G}var cZ=new uZ,zZ=cZ.produce;var lZ=(Z)=>(X,G,W)=>{return W.setState=(B,U,...K)=>{let J=typeof B==="function"?zZ(B):B;return X(J,U,...K)},Z(W.setState,G,W)},wZ=lZ;var pZ=(Z)=>(X,G,W)=>{let B=W.subscribe;return W.subscribe=(K,J,M)=>{let O=K;if(J){let D=(M==null?void 0:M.equalityFn)||Object.is,x=K(W.getState());if(O=(E)=>{let V=K(E);if(!D(x,V)){let _=x;J(x=V,_)}},M==null?void 0:M.fireImmediately)J(x,x)}return B(O)},Z(X,G,W)},NZ=pZ;var s2=ZZ()(NZ(wZ((Z)=>({currentScreen:"chat",navigateTo:(X)=>Z((G)=>{G.currentScreen=X}),aiConfig:null,setAIConfig:(X)=>Z((G)=>{G.aiConfig=X}),updateProvider:(X,G)=>Z((W)=>{if(!W.aiConfig)W.aiConfig={providers:{}};if(!W.aiConfig.providers)W.aiConfig.providers={};W.aiConfig.providers[X]={...W.aiConfig.providers[X],...G}}),removeProvider:(X)=>Z((G)=>{if(G.aiConfig?.providers)delete G.aiConfig.providers[X];if(G.aiConfig?.defaultProvider===X)G.aiConfig.defaultProvider=void 0,G.aiConfig.defaultModel=void 0}),selectedProvider:null,selectedModel:null,setSelectedProvider:(X)=>Z((G)=>{G.selectedProvider=X}),setSelectedModel:(X)=>Z((G)=>{G.selectedModel=X}),sessions:[],currentSessionId:null,createSession:(X,G)=>{let W=`session-${Date.now()}`,B=Date.now();return Z((U)=>{U.sessions.push({id:W,provider:X,model:G,messages:[],todos:[],nextTodoId:1,created:B,updated:B}),U.currentSessionId=W}),k().then((U)=>{U.createSessionFromData({id:W,provider:X,model:G,nextTodoId:1,created:B,updated:B}).catch((K)=>{console.error("Failed to create session in database:",K)})}),W},updateSessionModel:(X,G)=>{k().then((W)=>{W.updateSessionModel(X,G).catch((B)=>{console.error("Failed to update session model in database:",B)})}),Z((W)=>{let B=W.sessions.find((U)=>U.id===X);if(B)B.model=G})},updateSessionProvider:(X,G,W)=>{k().then((B)=>{B.updateSessionProvider(X,G,W).catch((U)=>{console.error("Failed to update session provider in database:",U)})}),Z((B)=>{let U=B.sessions.find((K)=>K.id===X);if(U)U.provider=G,U.model=W})},updateSessionTitle:(X,G)=>{k().then((W)=>{W.updateSessionTitle(X,G).catch((B)=>{console.error("Failed to update session title in database:",B)})}),Z((W)=>{let B=W.sessions.find((U)=>U.id===X);if(B)B.title=G})},addMessage:(X,G,W,B,U,K,J,M)=>{let O=typeof W==="string"?[{type:"text",content:W}]:W;k().then((D)=>{D.addMessage(X,G,O,B,U,K,J,M).catch((x)=>{console.error("Failed to add message to database:",x)})}),Z((D)=>{let x=D.sessions.find((E)=>E.id===X);if(x)x.messages.push({role:G,content:O,timestamp:Date.now(),...B!==void 0&&B.length>0&&{attachments:B},...U!==void 0&&{usage:U},...K!==void 0&&{finishReason:K},...J!==void 0&&{metadata:J},...M!==void 0&&M.length>0&&{todoSnapshot:M}})})},setCurrentSession:(X)=>Z((G)=>{G.currentSessionId=X}),deleteSession:(X)=>{k().then((G)=>{G.deleteSession(X).catch((W)=>{console.error("Failed to delete session from database:",W)})}),Z((G)=>{if(G.sessions=G.sessions.filter((W)=>W.id!==X),G.currentSessionId===X)G.currentSessionId=null})},isLoading:!1,error:null,setLoading:(X)=>Z((G)=>{G.isLoading=X}),setError:(X)=>Z((G)=>{G.error=X}),currentAgentId:"coder",setCurrentAgentId:(X)=>Z((G)=>{G.currentAgentId=X}),enabledRuleIds:[],setEnabledRuleIds:(X)=>Z((G)=>{G.enabledRuleIds=X}),debugLogs:[],addDebugLog:(X)=>Z((G)=>{if(!process.env.DEBUG)return;let W=new Date().toLocaleTimeString();G.debugLogs.push(`[${W}] ${X}`);let B=1000;if(G.debugLogs.length>B)G.debugLogs=G.debugLogs.slice(-B/2)}),clearDebugLogs:()=>Z((X)=>{X.debugLogs=[]}),notificationSettings:{osNotifications:!0,terminalNotifications:!0,sound:!0},updateNotificationSettings:(X)=>Z((G)=>{G.notificationSettings={...G.notificationSettings,...X}}),updateTodos:(X,G)=>Z((W)=>{let B=W.sessions.find((J)=>J.id===X);if(!B)return;for(let J of G)if(J.id===void 0||J.id===null){let M=B.nextTodoId,O=B.todos.length>0?Math.max(...B.todos.map((D)=>D.ordering)):0;B.todos.push({id:M,content:J.content||"",activeForm:J.activeForm||"",status:J.status||"pending",ordering:O+10}),B.nextTodoId=M+1}else{let M=B.todos.find((O)=>O.id===J.id);if(!M)continue;if(J.content!==void 0)M.content=J.content;if(J.activeForm!==void 0)M.activeForm=J.activeForm;if(J.status!==void 0)M.status=J.status;if(J.reorder){let{type:O,id:D}=J.reorder;if(O==="top"){let x=Math.min(...B.todos.map((E)=>E.ordering));M.ordering=x-10}else if(O==="last"){let x=Math.max(...B.todos.map((E)=>E.ordering));M.ordering=x+10}else if(O==="before"&&D!==void 0){let x=B.todos.find((E)=>E.id===D);if(x){let E=[...B.todos].sort((I,A)=>I.ordering-A.ordering||I.id-A.id),V=E.findIndex((I)=>I.id===D),_=V>0?E[V-1]:null;if(_)M.ordering=Math.floor((_.ordering+x.ordering)/2);else M.ordering=x.ordering-10}}else if(O==="after"&&D!==void 0){let x=B.todos.find((E)=>E.id===D);if(x){let E=[...B.todos].sort((I,A)=>I.ordering-A.ordering||I.id-A.id),V=E.findIndex((I)=>I.id===D),_=V<E.length-1?E[V+1]:null;if(_)M.ordering=Math.floor((x.ordering+_.ordering)/2);else M.ordering=x.ordering+10}}}}let U=JSON.parse(JSON.stringify(B.todos)),K=B.nextTodoId;k().then((J)=>{J.updateTodos(X,U,K).catch((M)=>{console.error("Failed to update todos in database:",M)})})})}))));export{s2 as useAppStore};
14
+ export{eY as L,s2 as M};
15
+
16
+ //# debugId=1289C6BE3D6A205B64756E2164756E21