@qitqode/qitqode-android-arm64 0.1.36 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundle/{chunk-ja18tvc7.js → chunk-0ne5m1n3.js} +1 -1
- package/bundle/{chunk-bjcb9kt0.js → chunk-0z33en1a.js} +1 -1
- package/bundle/{chunk-g5prcvq2.js → chunk-17pxm5d3.js} +1 -1
- package/bundle/{chunk-xyjehgzm.js → chunk-2pzvcpv4.js} +1 -1
- package/bundle/{chunk-983rqajz.js → chunk-46ztrjw0.js} +2 -2
- package/bundle/chunk-4dtkj9zg.js +2 -0
- package/bundle/chunk-4e9p3e0a.js +2 -0
- package/bundle/{chunk-nr4q9fv7.js → chunk-55wxgsga.js} +1 -1
- package/bundle/{chunk-t8rke5fr.js → chunk-5ke0yqqz.js} +4 -4
- package/bundle/{chunk-364ccew0.js → chunk-5myxjxae.js} +1 -1
- package/bundle/{chunk-vg41rtdy.js → chunk-5q1fz2az.js} +1 -1
- package/bundle/{chunk-q7rt76qw.js → chunk-5sgpjgss.js} +1 -1
- package/bundle/{chunk-pmv8yr8c.js → chunk-6r8pg6ma.js} +1 -1
- package/bundle/{chunk-tabcpx7t.js → chunk-871f8x99.js} +1 -1
- package/bundle/chunk-88emsbaz.js +2 -0
- package/bundle/{chunk-fmxm4kaj.js → chunk-909fp6pm.js} +1 -1
- package/bundle/{chunk-e07dbha4.js → chunk-98effz12.js} +1 -1
- package/bundle/{chunk-eywryd3k.js → chunk-a6z0fhta.js} +1 -1
- package/bundle/{chunk-w1ypf53m.js → chunk-aj3y2e86.js} +1 -1
- package/bundle/{chunk-rph5xswc.js → chunk-akpssv2d.js} +1 -1
- package/bundle/{chunk-1yv5h8k4.js → chunk-aw8af3ky.js} +1 -1
- package/bundle/{chunk-dx7h5r8j.js → chunk-bha3sbsj.js} +1 -1
- package/bundle/chunk-bs61sezq.js +2 -0
- package/bundle/{chunk-rd4x4tsv.js → chunk-ceefd2nj.js} +1 -1
- package/bundle/{chunk-v8ksjgc3.js → chunk-cmdjkx32.js} +1 -1
- package/bundle/{chunk-7dep7g7c.js → chunk-cxtxvt43.js} +1 -1
- package/bundle/{chunk-cx0j6mpq.js → chunk-d9x9kqvy.js} +1 -1
- package/bundle/chunk-de2rfsaf.js +2 -0
- package/bundle/{chunk-8zmreqxx.js → chunk-dncnyzaa.js} +1 -1
- package/bundle/{chunk-3gw6r3hf.js → chunk-dz3s882k.js} +215 -215
- package/bundle/{chunk-n7xgfm5x.js → chunk-eb8nsk7e.js} +1 -1
- package/bundle/{chunk-6sfhbckv.js → chunk-fn8191ps.js} +1 -1
- package/bundle/chunk-fyz7fngd.js +2 -0
- package/bundle/{chunk-d0xs3j5h.js → chunk-g8cfzzrs.js} +1 -1
- package/bundle/{chunk-yjp0btmq.js → chunk-gnt982jr.js} +2 -2
- package/bundle/{chunk-r0ewmh6f.js → chunk-grdfpd57.js} +1 -1
- package/bundle/{chunk-fjm9kstr.js → chunk-gt6tgm42.js} +1 -1
- package/bundle/chunk-hd8q4msp.js +2 -0
- package/bundle/{chunk-p8k48st6.js → chunk-j5kyf7vt.js} +1 -1
- package/bundle/{chunk-e88wd9ex.js → chunk-jfz8wwk9.js} +1 -1
- package/bundle/chunk-js6hqmq7.js +2 -0
- package/bundle/{chunk-rebsz3bj.js → chunk-k70x182t.js} +1 -1
- package/bundle/chunk-k7n1csxv.js +3 -0
- package/bundle/{chunk-brh35yt5.js → chunk-kb6v5hhm.js} +1 -1
- package/bundle/chunk-kmtfdky8.js +4 -0
- package/bundle/{chunk-qpd0gab8.js → chunk-kp8nkm3m.js} +1 -1
- package/bundle/{chunk-htkwc2se.js → chunk-m0xsvzyd.js} +1 -1
- package/bundle/{chunk-f77nxt23.js → chunk-m6zxr0j8.js} +1 -1
- package/bundle/{chunk-t5tfppwv.js → chunk-n38h109k.js} +1 -1
- package/bundle/{chunk-ebkztnpf.js → chunk-n7d9eemn.js} +49 -49
- package/bundle/{chunk-jw16f6t0.js → chunk-nhwhkx62.js} +1 -1
- package/bundle/{chunk-41x11r2s.js → chunk-pnpre7ys.js} +1 -1
- package/bundle/{chunk-5yfzzmv0.js → chunk-pr1ysgr3.js} +1 -1
- package/bundle/{chunk-3bnqw3xp.js → chunk-px8vtbmr.js} +1 -1
- package/bundle/{chunk-132tcp2j.js → chunk-qpzspr9z.js} +1 -1
- package/bundle/{chunk-b4ysd5b4.js → chunk-qq2rcxv2.js} +1 -1
- package/bundle/{chunk-shwjjrj8.js → chunk-qy1a2tpc.js} +1 -1
- package/bundle/{chunk-vcrakhgy.js → chunk-qyjt0qnq.js} +1 -1
- package/bundle/{chunk-mvsrzvc4.js → chunk-r0g5yyhf.js} +1 -1
- package/bundle/{chunk-tqazneg6.js → chunk-rnd5mnsm.js} +1 -1
- package/bundle/{chunk-sy3n0qhc.js → chunk-rtdym35y.js} +5 -5
- package/bundle/{chunk-cjxcnhmq.js → chunk-s2xdf6qh.js} +1 -1
- package/bundle/{chunk-vdpd4akk.js → chunk-sp8ek94w.js} +1 -1
- package/bundle/chunk-sv1s1qxd.js +619 -0
- package/bundle/chunk-sxwqrvmy.js +28 -0
- package/bundle/{chunk-v8dd6tyn.js → chunk-sxy4hyyy.js} +1 -1
- package/bundle/{chunk-bcs2gvmp.js → chunk-syc4b8rt.js} +1 -1
- package/bundle/{chunk-jr2q5295.js → chunk-tcs6wgna.js} +1 -1
- package/bundle/{chunk-xqwvx3qq.js → chunk-twhavv1m.js} +1 -1
- package/bundle/{chunk-w24660y4.js → chunk-tzrbb0e8.js} +1 -1
- package/bundle/chunk-v0yxkq99.js +3 -0
- package/bundle/{chunk-f36ctnbp.js → chunk-v7q3d3n6.js} +1 -1
- package/bundle/{chunk-hbh2034m.js → chunk-vvzbfv2f.js} +1 -1
- package/bundle/{chunk-37dvnent.js → chunk-w8d9srv7.js} +1 -1
- package/bundle/{chunk-mqtqcc10.js → chunk-ws3p9cya.js} +1 -1
- package/bundle/{chunk-jxg15t11.js → chunk-x42w8ewc.js} +1 -1
- package/bundle/chunk-xc9se3c8.js +2 -0
- package/bundle/{chunk-e03tgfpb.js → chunk-xjhezxft.js} +6 -6
- package/bundle/{chunk-pq3qwxa8.js → chunk-xxvqq7kc.js} +1 -1
- package/bundle/{chunk-b0x888w9.js → chunk-ye0mkqb4.js} +1 -1
- package/bundle/{chunk-a42q5mx4.js → chunk-ypk3t1eh.js} +1 -1
- package/bundle/{chunk-et7kz7kx.js → chunk-yzn08nx1.js} +1 -1
- package/bundle/{chunk-rqmvj7f4.js → chunk-z0tfsdb9.js} +1 -1
- package/bundle/{chunk-p8czsxp0.js → chunk-z210dtw1.js} +1 -1
- package/bundle/{chunk-5pkg052s.js → chunk-z7vv0ngm.js} +1 -1
- package/bundle/{chunk-24rw1br0.js → chunk-ztnepaqc.js} +1 -1
- package/bundle/{chunk-r3df289z.js → chunk-zwvwbrsc.js} +1 -1
- package/bundle/index.js +3 -3
- package/bundle/worker.js +1 -1
- package/package.json +1 -1
- package/bundle/chunk-0j6dhrew.js +0 -2
- package/bundle/chunk-4kqdzdv5.js +0 -3
- package/bundle/chunk-7cbj28fp.js +0 -2
- package/bundle/chunk-9yakc5yv.js +0 -28
- package/bundle/chunk-b1qhpxee.js +0 -2
- package/bundle/chunk-d72rty3t.js +0 -2
- package/bundle/chunk-dj951pms.js +0 -2
- package/bundle/chunk-ec7pznsp.js +0 -2
- package/bundle/chunk-gvtjxg0d.js +0 -2
- package/bundle/chunk-j21dnncc.js +0 -4
- package/bundle/chunk-qp9y0g73.js +0 -3
- package/bundle/chunk-t0jjes17.js +0 -2
- package/bundle/chunk-w57j3pgz.js +0 -616
- package/bundle/chunk-yg9c1v8v.js +0 -2
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{jg as a,kg as b,lg as c}from"./chunk-
|
|
2
|
+
import{jg as a,kg as b,lg as c}from"./chunk-m0xsvzyd.js";import"./chunk-rtdym35y.js";import"./chunk-5myxjxae.js";import"./chunk-sp8ek94w.js";import"./chunk-gnt982jr.js";import"./chunk-1bx2sjn6.js";import"./chunk-17pxm5d3.js";import"./chunk-n38h109k.js";import"./chunk-25bp7pcm.js";import"./chunk-qdcf1ay5.js";import"./chunk-45mjcxqk.js";import"./chunk-qqne79vp.js";import"./chunk-64s7vfj7.js";import"./chunk-xjhezxft.js";import"./chunk-gwfx7tx7.js";import"./chunk-1wpjmwnh.js";import"./chunk-cqtkxwd8.js";import"./chunk-ymtcm4xd.js";import"./chunk-yykjvt7f.js";import"./chunk-3mepk08v.js";import"./chunk-atpzz901.js";import"./chunk-0g25z230.js";import"./chunk-kb6v5hhm.js";import"./chunk-qyjt0qnq.js";import"./chunk-xdjwapwy.js";import"./chunk-cxtxvt43.js";import"./chunk-871f8x99.js";import"./chunk-cx7p4ezk.js";import"./chunk-tgd5ctnt.js";import"./chunk-p8kpqyxb.js";import"./chunk-3sz6gw10.js";import"./chunk-twhavv1m.js";import"./chunk-v0yxkq99.js";import"./chunk-2pzvcpv4.js";import"./chunk-kmtfdky8.js";import"./chunk-vc4e6xc4.js";import"./chunk-hnz570f9.js";import"./chunk-tdmn21z0.js";import"./chunk-s8mghr5a.js";import"./chunk-pqnbdygz.js";import"./chunk-ydc6ypjt.js";import"./chunk-pnq1h5az.js";import"./chunk-4sazy0nq.js";export{b as run,a as encodeDir,c as ClaudeImport};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import"./chunk-6sfhbckv.js";import"./chunk-4sazy0nq.js";var f={"language.en":"English","language.zh":"\u7B80\u4F53\u4E2D\u6587","language.zht":"\u7E41\u9AD4\u4E2D\u6587","language.ko":"\uD55C\uAD6D\uC5B4","language.de":"Deutsch","language.es":"Espa\xF1ol","language.fr":"Fran\xE7ais","language.da":"Dansk","language.ja":"\u65E5\u672C\u8A9E","language.pl":"Polski","language.ru":"\u0420\u0443\u0441\u0441\u043A\u0438\u0439","language.ar":"\u0627\u0644\u0639\u0631\u0628\u064A\u0629","language.no":"Norsk","language.br":"Portugu\xEAs (Brasil)","language.pt":"Portugu\xEAs","language.bs":"Bosanski","language.th":"\u0E44\u0E17\u0E22","language.tr":"T\xFCrk\xE7e","tui.prompt.placeholder.normal":'Pregunta lo que quieras... "{{example}}"',"tui.prompt.placeholder.shell":'Ejecuta un comando... "{{example}}"',"tui.prompt.ghost":"{{prediction}} (Tab para aceptar)","tui.home.placeholder.example.todo":"Corregir un TODO en el c\xF3digo","tui.home.placeholder.example.stack":"\xBFCu\xE1l es el stack t\xE9cnico del proyecto?","tui.home.placeholder.example.tests":"Arreglar las pruebas fallidas","tui.home.agreement.prefix":"Al usar QitQode, aceptas nuestros ","tui.home.agreement.terms":"T\xE9rminos de servicio","tui.home.agreement.separator":" y la ","tui.home.agreement.privacy":"Pol\xEDtica de privacidad","tui.home.agreement.suffix":"","tui.prompt.hint.attach_file":"adjuntar archivo","tui.prompt.hint.subagent":"subagente","tui.prompt.hint.commands":"comandos","tui.prompt.hint.switch_mode":"cambiar modo","tui.prompt.hint.settings":"ajustes","tui.tips.label":"Sugerencia","tui.tips.plain_terminal":"Recomendamos usar iTerm o la terminal de VS Code","tui.tips.attach_file":"Escribe {highlight}@{/highlight} seguido del nombre de archivo para buscar de forma difusa y adjuntar archivos","tui.tips.shell_prefix":"Empieza un mensaje con {highlight}!{/highlight} para ejecutar comandos del shell directamente (p. ej., {highlight}!ls -la{/highlight})","tui.tips.tab_agent":"Pulsa {highlight}Tab{/highlight} o {highlight}Shift+Tab{/highlight} para alternar entre los agentes Build, Plan y Compose","tui.tips.theme_mode":"Ejecuta {highlight}/dark{/highlight} para el modo oscuro o {highlight}/light{/highlight} para el modo claro","tui.tips.doc":"Ejecuta {highlight}/doc{/highlight} para abrir la documentaci\xF3n de usuario","tui.tips.undo":"Usa {highlight}/undo{/highlight} para revertir el \xFAltimo mensaje y los cambios en archivos","tui.tips.redo":"Usa {highlight}/redo{/highlight} para restaurar mensajes y cambios deshechos previamente","tui.tips.drag_drop":"Arrastra y suelta im\xE1genes o PDF en el terminal para a\xF1adirlos como contexto","tui.tips.paste_image":"Pulsa {highlight}Ctrl+V{/highlight} para pegar im\xE1genes desde el portapapeles en la entrada","tui.tips.editor":"Pulsa {highlight}Ctrl+X E{/highlight} o {highlight}/editor{/highlight} para componer mensajes en tu editor externo","tui.tips.init":"Ejecuta {highlight}/init{/highlight} para autogenerar reglas del proyecto a partir de tu c\xF3digo","tui.tips.models":"Ejecuta {highlight}/models{/highlight} o {highlight}Ctrl+X M{/highlight} para cambiar entre los modelos disponibles","tui.tips.theme":'Bloquea el modo de tema frente al fondo de tu terminal \u2014 abre la paleta de comandos ({highlight}Ctrl+P{/highlight}) y busca "lock"',"tui.tips.new_session":"Pulsa {highlight}Ctrl+X N{/highlight} o {highlight}/new{/highlight} para iniciar una nueva sesi\xF3n","tui.tips.sessions":"Usa {highlight}/sessions{/highlight} o {highlight}Ctrl+X L{/highlight} para listar y continuar conversaciones anteriores","tui.tips.compact":"Ejecuta {highlight}/compact{/highlight} para resumir sesiones largas cerca del l\xEDmite de contexto","tui.tips.export":"Pulsa {highlight}Ctrl+X X{/highlight} o {highlight}/export{/highlight} para guardar la conversaci\xF3n como Markdown","tui.tips.copy_last":"Pulsa {highlight}Ctrl+X Y{/highlight} para copiar el \xFAltimo mensaje del asistente al portapapeles","tui.tips.command_palette":"Pulsa {highlight}Ctrl+P{/highlight} para ver todas las acciones y comandos disponibles","tui.tips.leader":"La tecla l\xEDder es {highlight}Ctrl+X{/highlight}; comb\xEDnala con otras teclas para acciones r\xE1pidas","tui.tips.f2":"Pulsa {highlight}F2{/highlight} para alternar r\xE1pidamente entre los modelos usados recientemente","tui.tips.sidebar":"Pulsa {highlight}Ctrl+X B{/highlight} para mostrar/ocultar la barra lateral","tui.tips.history":"Usa {highlight}PageUp{/highlight}/{highlight}PageDown{/highlight} para navegar por el historial de la conversaci\xF3n","tui.tips.jump_first":"Pulsa {highlight}Ctrl+G{/highlight} o {highlight}Home{/highlight} para ir al inicio de la conversaci\xF3n","tui.tips.jump_last":"Pulsa {highlight}Ctrl+Alt+G{/highlight} o {highlight}End{/highlight} para ir al mensaje m\xE1s reciente","tui.tips.newline":"Pulsa {highlight}Shift+Enter{/highlight} o {highlight}Ctrl+J{/highlight} para a\xF1adir saltos de l\xEDnea en la entrada","tui.tips.clear_input":"Pulsa {highlight}Ctrl+C{/highlight} mientras escribes para vaciar el campo de entrada","tui.tips.escape":"Pulsa {highlight}Escape{/highlight} para detener la respuesta de la IA en curso","tui.tips.plan_agent":"Cambia al agente {highlight}Plan{/highlight} para obtener sugerencias sin aplicar cambios reales","tui.tips.subagent":"Usa {highlight}@agent-name{/highlight} en las indicaciones para invocar subagentes especializados","tui.tips.cycle_sessions":"Pulsa {highlight}Ctrl+X Right/Left{/highlight} para alternar entre sesiones padre e hija","tui.tips.config_files":"Crea {highlight}qitqode.json{/highlight} para la configuraci\xF3n del servidor y {highlight}tui.json{/highlight} para la TUI","tui.tips.global_config":"Coloca la configuraci\xF3n de TUI en {highlight}~/.config/qitqode/tui.json{/highlight} como configuraci\xF3n global","tui.tips.schema":"A\xF1ade {highlight}$schema{/highlight} a tu configuraci\xF3n para autocompletado en el editor","tui.tips.default_model":"Configura {highlight}model{/highlight} en la config para definir tu modelo por defecto","tui.tips.keybinds":"Sobrescribe cualquier atajo en {highlight}tui.json{/highlight} mediante la secci\xF3n {highlight}keybinds{/highlight}","tui.tips.disable_keybind":"Establece un atajo en {highlight}none{/highlight} para deshabilitarlo por completo","tui.tips.mcp_config":"Configura servidores MCP locales o remotos en la secci\xF3n {highlight}mcp{/highlight}","tui.tips.mcp_oauth":"QitQode gestiona autom\xE1ticamente OAuth para servidores MCP remotos que requieran autenticaci\xF3n","tui.tips.custom_command":"A\xF1ade archivos {highlight}.md{/highlight} en {highlight}.qitqode/command/{/highlight} para definir indicaciones personalizadas reutilizables","tui.tips.command_args":"Usa {highlight}$ARGUMENTS{/highlight}, {highlight}$1{/highlight}, {highlight}$2{/highlight} en comandos personalizados para entradas din\xE1micas","tui.tips.command_backticks":"Usa comillas invertidas en los comandos para inyectar la salida del shell (p. ej. {highlight}`git status`{/highlight})","tui.tips.custom_agent":"A\xF1ade archivos {highlight}.md{/highlight} en {highlight}.qitqode/agent/{/highlight} para personajes de IA especializados","tui.tips.agent_perms":"Configura por agente los permisos de las herramientas {highlight}edit{/highlight}, {highlight}bash{/highlight} y {highlight}webfetch{/highlight}","tui.tips.bash_allow":'Usa patrones como {highlight}"git *": "allow"{/highlight} para permisos de bash m\xE1s finos',"tui.tips.bash_deny":'Define {highlight}"rm -rf *": "deny"{/highlight} para bloquear comandos destructivos',"tui.tips.bash_ask":'Configura {highlight}"git push": "ask"{/highlight} para exigir confirmaci\xF3n antes de hacer push',"tui.tips.formatter":"QitQode formatea archivos autom\xE1ticamente con prettier, gofmt, ruff y m\xE1s","tui.tips.disable_formatter":'Define {highlight}"formatter": false{/highlight} en la config para desactivar el formato autom\xE1tico',"tui.tips.custom_formatter":"Define comandos de formateo personalizados por extensi\xF3n de archivo en la configuraci\xF3n","tui.tips.lsp":"QitQode usa servidores LSP para an\xE1lisis inteligente de c\xF3digo","tui.tips.custom_tool":"Crea archivos {highlight}.ts{/highlight} en {highlight}.qitqode/tools/{/highlight} para definir nuevas herramientas LLM","tui.tips.tool_scripts":"Las definiciones de herramientas pueden invocar scripts en Python, Go, etc.","tui.tips.plugins":"A\xF1ade archivos {highlight}.ts{/highlight} en {highlight}.qitqode/plugin/{/highlight} para enganchar eventos","tui.tips.plugin_notify":"Usa plugins para enviar notificaciones del sistema cuando termine una sesi\xF3n","tui.tips.plugin_protect":"Crea un plugin que impida a QitQode leer archivos sensibles","tui.tips.run":"Usa {highlight}qitqode run{/highlight} para scripting no interactivo","tui.tips.continue":"Usa {highlight}qitqode --continue{/highlight} para retomar la \xFAltima sesi\xF3n","tui.tips.attach_cli":"Usa {highlight}qitqode run -f file.ts{/highlight} para adjuntar archivos v\xEDa CLI","tui.tips.format_json":"Usa {highlight}--format json{/highlight} para obtener salida legible por m\xE1quina en scripts","tui.tips.auth_list":"Ejecuta {highlight}qitqode auth status{/highlight} para ver tu estado de inicio de sesi\xF3n actual","tui.tips.agent_create":"Ejecuta {highlight}qitqode agent create{/highlight} para crear un agente con asistente guiado","tui.tips.theme_system":'Usa {highlight}"theme": "system"{/highlight} para seguir los colores de tu terminal',"tui.tips.theme_files":"Crea archivos JSON de tema en el directorio {highlight}.qitqode/themes/{/highlight}","tui.tips.theme_variants":"Los temas admiten variantes claras/oscuras para ambos modos","tui.tips.theme_ansi":"Referencia colores ANSI 0-255 en temas personalizados","tui.tips.env_var":"Usa la sintaxis {highlight}{env:VAR_NAME}{/highlight} para referenciar variables de entorno en la config","tui.tips.file_var":"Usa {highlight}{file:path}{/highlight} para incluir el contenido de un archivo en valores de la config","tui.tips.instructions":"Usa {highlight}instructions{/highlight} en la config para cargar archivos de reglas adicionales","tui.tips.temperature":"Ajusta la {highlight}temperature{/highlight} del agente desde 0.0 (enfocado) hasta 1.0 (creativo)","tui.tips.steps":"Configura {highlight}steps{/highlight} para limitar las iteraciones ag\xE9nticas por petici\xF3n","tui.tips.disable_tool":'Define {highlight}"tools": {"bash": false}{/highlight} para deshabilitar herramientas concretas',"tui.tips.disable_mcp_tools":'Define {highlight}"mcp_*": false{/highlight} para deshabilitar todas las herramientas de un servidor MCP',"tui.tips.tool_override":"Sobrescribe la configuraci\xF3n global de herramientas en cada agente","tui.tips.doom_loop":"El permiso {highlight}doom_loop{/highlight} previene bucles infinitos de llamadas a herramientas","tui.tips.external_dir":"El permiso {highlight}external_directory{/highlight} protege archivos fuera del proyecto","tui.tips.debug_config":"Ejecuta {highlight}qitqode debug config{/highlight} para diagnosticar problemas de configuraci\xF3n","tui.tips.print_logs":"Usa la opci\xF3n {highlight}--print-logs{/highlight} para ver logs detallados en stderr","tui.tips.timeline":"Pulsa {highlight}Ctrl+X G{/highlight} o {highlight}/timeline{/highlight} para saltar a un mensaje concreto","tui.tips.toggle_code":"Pulsa {highlight}Ctrl+X H{/highlight} para alternar la visibilidad de los bloques de c\xF3digo","tui.tips.status":"Pulsa {highlight}Ctrl+X S{/highlight} o {highlight}/status{/highlight} para ver el estado del sistema","tui.tips.scroll_accel":"Activa {highlight}scroll_acceleration{/highlight} en {highlight}tui.json{/highlight} para un desplazamiento suave","tui.tips.agents_md":"Sube el {highlight}AGENTS.md{/highlight} de tu proyecto a Git para compartirlo con el equipo","tui.tips.review":"Usa {highlight}/review{/highlight} para revisar cambios sin commit, ramas o PR","tui.tips.help":"Ejecuta {highlight}/help{/highlight} o {highlight}Ctrl+X H{/highlight} para abrir el di\xE1logo de ayuda","tui.tips.rename":"Usa {highlight}/rename{/highlight} para renombrar la sesi\xF3n actual","tui.tips.suspend.unix":"Pulsa {highlight}Ctrl+Z{/highlight} para suspender el terminal y volver al shell","tui.tips.suspend.win":"Pulsa {highlight}Ctrl+Z{/highlight} para deshacer cambios en la entrada","tui.command.palette.title":"Comandos","tui.command.palette.suggested":"Sugeridos","tui.command.category.session":"Sesi\xF3n","tui.command.category.agent":"Agente","tui.command.category.provider":"Proveedor","tui.command.category.system":"Sistema","tui.command.category.prompt":"Entrada","tui.command.category.internal":"Interno","tui.command.category.external":"Externo","tui.slash.init.description":"configuraci\xF3n guiada de AGENTS.md","tui.slash.review.description":"revisar cambios [commit|branch|pr], por defecto sin confirmar","tui.slash.dream.description":"consolidar manualmente la memoria del proyecto desde archivos memory y la trayectoria en bruto","tui.slash.distill.description":"encontrar flujos repetidos en el trabajo reciente y empaquetarlos en skills, subagentes o comandos","tui.slash.goal.description":"definir un objetivo con condici\xF3n de parada; se ejecuta hasta que un juez confirme. /goal clear para abortar","tui.slash.deep-research.description":"informe de investigaci\xF3n profunda multi-fuente y verificado (ejecuta el workflow deep-research)","tui.command.language.switch.title":"Cambiar idioma","tui.command.language.switch.description":"Cambiar el idioma de la interfaz","tui.command.language.dialog.title":"Cambiar idioma","tui.language.auto":"Auto (sistema)","tui.language.current":"Actual","tui.command.session.list.title":"Cambiar sesi\xF3n","tui.command.session.new.title":"Nueva sesi\xF3n","tui.command.workflow.list.title":"Flujos de trabajo","tui.command.model.list.title":"Cambiar modelo","tui.command.model.cycle_recent.title":"Ciclo de modelos","tui.command.model.cycle_recent_reverse.title":"Ciclo de modelos (inverso)","tui.command.model.cycle_favorite.title":"Ciclo de favoritos","tui.command.model.cycle_favorite_reverse.title":"Ciclo de favoritos (inverso)","tui.command.agent.list.title":"Cambiar agente","tui.command.mcp.list.title":"Alternar MCP","tui.command.never_ask.title_on":"Sin preguntas: ACTIVADO (auto-decidir, permisos excluidos) \u2014 clic para desactivar","tui.command.never_ask.title_off":"Sin preguntas: DESACTIVADO \u2014 clic para activar (auto-decidir, permisos excluidos)","tui.command.never_ask.toast_on":"Sin preguntas ACTIVADO \u2014 no te preguntar\xE9; elegir\xE9 la mejor opci\xF3n yo mismo hasta que lo desactives (/never-ask). Las solicitudes de permiso siguen requiriendo tu aprobaci\xF3n.","tui.command.never_ask.toast_off":"Sin preguntas DESACTIVADO \u2014 volver\xE9 a preguntarte en los puntos de decisi\xF3n.","tui.command.never_ask.title_on_fullauto":"Sin preguntas: ACTIVADO (auto-decidir; el modo full-auto tambi\xE9n aprueba los permisos) \u2014 clic para desactivar","tui.command.never_ask.title_off_fullauto":"Sin preguntas: DESACTIVADO \u2014 clic para activar (auto-decidir; el modo full-auto sigue aprobando los permisos)","tui.command.never_ask.toast_on_fullauto":"Sin preguntas ACTIVADO \u2014 no te preguntar\xE9; elegir\xE9 la mejor opci\xF3n yo mismo hasta que lo desactives (/never-ask). El modo full-auto est\xE1 activo, as\xED que tambi\xE9n se aprueban autom\xE1ticamente los permisos de herramientas.","tui.command.agent.cycle.title":"Ciclo de agentes","tui.command.variant.cycle.title":"Ciclo de variantes","tui.command.variant.list.title":"Cambiar variante de modelo","tui.command.agent.cycle.reverse.title":"Ciclo de agentes (inverso)","tui.command.provider.login.title":"Iniciar sesi\xF3n","tui.command.provider.logout.title":"Cerrar sesi\xF3n","tui.command.console.org.switch.title":"Cambiar de organizaci\xF3n","tui.command.qitqode.status.title":"Ver estado","tui.command.theme.switch.title":"Cambiar tema","tui.command.theme.switch_mode.to_light":"Cambiar a modo claro","tui.command.theme.switch_mode.to_dark":"Cambiar a modo oscuro","tui.command.theme.mode.unlock":"Desbloquear modo del tema","tui.command.theme.mode.lock":"Bloquear modo del tema","tui.command.help.show.title":"Ayuda","tui.dialog.help.close_hint":"esc/enter/space","tui.dialog.help.accessibility":"Accesibilidad: activa o desactiva animaciones y sonido desde la lista de comandos. Variables de entorno: NO_COLOR, QITQODE_TUI_ACCESSIBLE, QITQODE_REDUCE_MOTION, QITQODE_TUI_SOUND.","tui.dialog.help.announcements":"Anuncios: en modo accesible, elige el nivel de detalle de los anuncios para lectores de pantalla (silencioso, normal, detallado) desde la lista de comandos o con QITQODE_TUI_ANNOUNCEMENTS. Los errores siempre se anuncian.","tui.dialog.help.dialog_keys":"Di\xE1logos: todos los di\xE1logos funcionan solo con el teclado \u2014 Esc cierra, Tab o las flechas mueven el foco, Enter o Espacio activan el control enfocado.","tui.command.app.announcements.cycle":"Anuncios: {{level}} (selecciona para cambiar)","tui.announcements.level.quiet":"silencioso","tui.announcements.level.normal":"normal","tui.announcements.level.verbose":"detallado","tui.app.terminal_too_small":"Terminal demasiado peque\xF1a ({{width}}x{{height}}). Ampl\xEDala al menos a 40x8.","tui.dialog.help.command_list":"Pulsa {{keybind}} para ver todas las acciones y comandos disponibles en cualquier contexto.","tui.dialog.help.ok":"Aceptar","tui.dialog.close_hint":"esc","tui.dialog.document.scroll_hint":"\u2191/\u2193 desplazar \xB7 ReP\xE1g/AvP\xE1g p\xE1gina \xB7 esc cerrar","tui.dialog.ok":"Aceptar","tui.dialog.confirm.cancel":"Cancelar","tui.dialog.confirm.confirm":"Confirmar","tui.dialog.agreement.title":"T\xE9rminos y privacidad","tui.dialog.agreement.message":"Rev\xEDsalos y acepta para continuar.","tui.dialog.agreement.confirm":"Aceptar y continuar","tui.command.docs.terms.title":"Ver los t\xE9rminos de servicio","tui.command.docs.privacy.title":"Ver la pol\xEDtica de privacidad","tui.command.consent.revoke.title":"Revocar el acuerdo de modelo gratuito","tui.consent.revoked":"Acuerdo de modelo gratuito revocado: se te pedir\xE1 aceptarlo de nuevo","tui.dialog.select.placeholder":"Buscar","tui.dialog.select.no_results":"No se encontraron resultados","tui.dialog.prompt.placeholder":"Introduce texto","tui.dialog.prompt.busy":"Trabajando...","tui.dialog.prompt.processing":"procesando...","tui.dialog.prompt.submit_key":"enter","tui.dialog.prompt.submit_action":"enviar","tui.dialog.export.title":"Opciones de exportaci\xF3n","tui.dialog.export.filename":"Nombre de archivo:","tui.dialog.export.filename_placeholder":"Introduce el nombre de archivo","tui.dialog.export.include_thinking":"Incluir razonamiento","tui.dialog.export.include_tool_details":"Incluir detalles de herramientas","tui.dialog.export.include_assistant_metadata":"Incluir metadatos del asistente","tui.dialog.export.open_without_saving":"Abrir sin guardar","tui.dialog.export.hint.toggle_prefix":"Pulsa","tui.dialog.export.hint.toggle_action":"para alternar","tui.dialog.export.hint.confirm_action":"para confirmar","tui.dialog.export.hint.options_action":"para opciones","tui.toast.copied_to_clipboard":"Copiado al portapapeles","tui.toast.instructions_loaded":"Cargado {{files}}","tui.toast.update_available.title":"Actualizaci\xF3n disponible","tui.toast.update_available.confirm":"La nueva versi\xF3n v{{version}} est\xE1 disponible. \xBFDesea actualizar ahora?","tui.toast.update_available.updating":"Actualizando a v{{version}}...","tui.toast.update_available.failed":"La actualizaci\xF3n fall\xF3","tui.toast.update_available.success":"Se actualiz\xF3 a QitQode v{{version}}. Por favor reinicie la aplicaci\xF3n.","tui.toast.updated.title":"Actualizado autom\xE1ticamente","tui.toast.updated.message":"Parche aplicado autom\xE1ticamente: v{{version}}. Reinicie para usar la nueva versi\xF3n. Desactive con autoupdate: false en la configuraci\xF3n.","tui.sidebar.instructions":"Instrucciones","tui.sidebar.cwd":"Directorio de trabajo","tui.toast.unknown_error":"Ha ocurrido un error desconocido","tui.command.docs.open.title":"Abrir documentaci\xF3n","tui.command.app.exit.title":"Salir de la aplicaci\xF3n","tui.command.app.debug.title":"Alternar panel de depuraci\xF3n","tui.command.app.console.title":"Alternar consola","tui.command.app.heap_snapshot.title":"Exportar snapshot del heap","tui.command.terminal.suspend.title":"Suspender terminal","tui.command.terminal.title.disable":"Deshabilitar t\xEDtulo del terminal","tui.command.terminal.title.enable":"Habilitar t\xEDtulo del terminal","tui.command.app.toggle.animations.disable":"Deshabilitar animaciones","tui.command.app.toggle.animations.enable":"Habilitar animaciones","tui.command.app.toggle.diffwrap.disable":"Deshabilitar ajuste de diff","tui.command.app.toggle.diffwrap.enable":"Habilitar ajuste de diff","tui.command.app.toggle.sound.disable":"Desactivar sonido","tui.command.app.toggle.sound.enable":"Activar sonido","tui.command.logout.toast":"Sesi\xF3n cerrada","tui.command.session.share.title":"Compartir sesi\xF3n","tui.command.session.share.copy_link":"Copiar enlace para compartir","tui.command.session.rename.title":"Renombrar sesi\xF3n","tui.command.session.timeline.title":"Saltar a un mensaje","tui.command.session.fork.title":"Bifurcar sesi\xF3n","tui.command.session.compact.title":"Compactar sesi\xF3n","tui.command.session.unshare.title":"Dejar de compartir","tui.command.session.undo.title":"Deshacer mensaje anterior","tui.command.session.redo.title":"Rehacer","tui.command.session.sidebar.show":"Mostrar barra lateral","tui.command.session.sidebar.hide":"Ocultar barra lateral","tui.command.session.conceal.disable":"Deshabilitar ocultaci\xF3n de c\xF3digo","tui.command.session.conceal.enable":"Habilitar ocultaci\xF3n de c\xF3digo","tui.command.session.timestamps.show":"Mostrar marcas de tiempo","tui.command.session.timestamps.hide":"Ocultar marcas de tiempo","tui.command.session.thinking.expand":"Expandir razonamiento","tui.command.session.thinking.collapse":"Colapsar razonamiento","tui.command.session.tool_details.show":"Mostrar detalles de herramientas","tui.command.session.tool_details.hide":"Ocultar detalles de herramientas","tui.command.session.scrollbar.toggle":"Alternar barra de desplazamiento","tui.command.session.generic_tool_output.show":"Mostrar salida de herramienta gen\xE9rica","tui.command.session.generic_tool_output.hide":"Ocultar salida de herramienta gen\xE9rica","tui.command.session.page_up.title":"P\xE1gina anterior","tui.command.session.page_down.title":"P\xE1gina siguiente","tui.command.session.line_up.title":"L\xEDnea arriba","tui.command.session.line_down.title":"L\xEDnea abajo","tui.command.session.half_page_up.title":"Media p\xE1gina arriba","tui.command.session.half_page_down.title":"Media p\xE1gina abajo","tui.command.session.first.title":"Primer mensaje","tui.command.session.last.title":"\xDAltimo mensaje","tui.command.session.last_user.title":"Ir al \xFAltimo mensaje del usuario","tui.command.session.message_next.title":"Mensaje siguiente","tui.command.session.message_previous.title":"Mensaje anterior","tui.command.messages.copy.title":"Copiar \xFAltimo mensaje del asistente","tui.command.session.copy.title":"Copiar transcripci\xF3n de la sesi\xF3n","tui.command.session.export.title":"Exportar transcripci\xF3n","tui.command.session.child_first.title":"Ir a la sesi\xF3n hija","tui.command.session.parent.title":"Ir a la sesi\xF3n padre","tui.command.session.child_next.title":"Sesi\xF3n hija siguiente","tui.command.session.child_previous.title":"Sesi\xF3n hija anterior","tui.command.prompt.clear.title":"Vaciar entrada","tui.command.prompt.submit.title":"Enviar prompt","tui.command.prompt.paste.title":"Pegar","tui.command.session.interrupt.title":"Interrumpir sesi\xF3n","tui.command.prompt.editor.title":"Abrir editor","tui.command.prompt.skills.title":"Habilidades","tui.command.voice.toggle.title":"Alternar entrada de voz","tui.command.voice.toggle.title_on":"Entrada de voz: activada \u2014 clic para desactivar","tui.command.voice.toggle.title_off":"Entrada de voz: desactivada \u2014 clic para activar","tui.voice.enabled":"Entrada de voz activada (chino/ingl\xE9s) \u2014 clic en [Voice] para grabar","tui.voice.disabled":"Entrada de voz deshabilitada","tui.voice.send.enabled":'Env\xEDo por voz habilitado \u2014 di\u300C\u53D1\u9001\u300Do "send it" para enviar',"tui.voice.send.disabled":"Env\xEDo por voz deshabilitado","tui.command.voice.send.title":"Alternar env\xEDo por voz","tui.command.voice.send.title_on":"Env\xEDo por voz: activado \u2014 clic para desactivar","tui.command.voice.send.title_off":"Env\xEDo por voz: desactivado \u2014 clic para activar","tui.voice.control.enabled":"Control de voz habilitado \u2014 usa modelo multimodal para edici\xF3n inteligente (m\xE1s lento)","tui.voice.control.disabled":"Control de voz deshabilitado \u2014 usa transcripci\xF3n ASR r\xE1pida","tui.command.voice.control.title":"Alternar control de voz (multimodal)","tui.command.voice.control.title_on":"Control de voz: activado (multimodal) \u2014 clic para desactivar","tui.command.voice.control.title_off":"Control de voz: desactivado (ASR r\xE1pido) \u2014 clic para activar","tui.voice.error.no_auth":"Usa /connect para conectar tu cuenta QitQode, o configura voice.asr_model para otro proveedor","tui.voice.error.no_auth_provider":'El proveedor de voz "{{provider}}" no est\xE1 autenticado, revisa su apiKey',"tui.voice.error.provider_not_found":'Proveedor "{{provider}}" no disponible \u2014 /connect para autenticarte, o declara models en la config para endpoints personalizados',"tui.voice.error.no_url":'El proveedor "{{provider}}" no tiene baseURL configurada \u2014 configura options.baseURL',"tui.voice.error.no_device":"No se encontr\xF3 micr\xF3fono/dispositivo de audio \u2014 verifica la configuraci\xF3n de audio del sistema","tui.voice.error.recorder_failed":"Error de grabaci\xF3n","tui.voice.error.no_recorder":"No se encontr\xF3 herramienta de grabaci\xF3n, instala sox","tui.voice.error.too_short":"Grabaci\xF3n demasiado corta","tui.voice.error.network":"La transcripci\xF3n fall\xF3, verifica tu red","tui.voice.error.empty_send":"No hay contenido para enviar","tui.voice.error.unknown_agent":'Agente "{{name}}" no encontrado',"tui.command.prompt.stash.title":"Guardar prompt","tui.command.prompt.stash.pop.title":"Recuperar prompt","tui.command.prompt.stash.list.title":"Lista de prompts guardados","tui.command.tips.toggle.show":"Mostrar sugerencias","tui.command.tips.toggle.hide":"Ocultar sugerencias","tui.command.plugins.list.title":"Plugins","tui.command.plugins.install.title":"Instalar plugin","tui.question.plan_enter.question":"\xBFDesea cambiar al modo plan para una planificaci\xF3n estructurada?","tui.question.plan_enter.header":"Entrar al plan","tui.question.plan_enter.option.0.label":"S\xED","tui.question.plan_enter.option.0.description":"Cambiar al agente plan para planificaci\xF3n de solo lectura","tui.question.plan_enter.option.1.label":"No","tui.question.plan_enter.option.1.description":"Permanecer en el modo actual","tui.question.plan_exit.question":"El plan en {{plan}} est\xE1 completo. \xBFDesea cambiar al agente build para comenzar la implementaci\xF3n?","tui.question.plan_exit.header":"Salir del plan","tui.question.plan_exit.option.0.label":"S\xED","tui.question.plan_exit.option.0.description":"Cambiar al agente build y comenzar la implementaci\xF3n del plan","tui.question.plan_exit.option.1.label":"No","tui.question.plan_exit.option.1.description":"Permanecer con el agente plan para seguir refinando","tui.session.badge.auto":"Auto","trust.title":"Accediendo al espacio de trabajo:","trust.safety_check":"Verificaci\xF3n r\xE1pida: \xBFEs este un proyecto que creaste o en el que conf\xEDas? (Tu propio c\xF3digo, un proyecto open source conocido o trabajo de tu equipo). Si no, t\xF3mate un momento para revisar el contenido de esta carpeta.","trust.capabilities":"QitQode podr\xE1 leer, editar y ejecutar archivos aqu\xED.","trust.plugin_warn":"Si existen plugins maliciosos en este directorio, pueden ejecutar c\xF3digo arbitrario, leer, modificar o exfiltrar tus archivos.","trust.option.yes":"S\xED, conf\xEDo en esta carpeta","trust.option.no":"No, salir","trust.dangerous.title_home":"ADVERTENCIA: Est\xE1s a punto de abrir tu DIRECTORIO PERSONAL.","trust.dangerous.title_root":"ADVERTENCIA: Est\xE1s a punto de abrir la RA\xCDZ DEL SISTEMA DE ARCHIVOS.","trust.dangerous.body_home":"El modelo tendr\xE1 acceso a TODOS tus archivos personales \u2014 claves SSH, credenciales, perfiles del navegador y todo lo dem\xE1s en tu carpeta personal.","trust.dangerous.body_root":"El modelo tendr\xE1 acceso a TODO el sistema de archivos \u2014 archivos del sistema, datos de todos los usuarios, credenciales y todo en esta m\xE1quina.","trust.dangerous.advice_home":"A menos que tengas una raz\xF3n muy espec\xEDfica, NO conf\xEDes en todo tu directorio personal.","trust.dangerous.advice_root":"A menos que tengas una raz\xF3n muy espec\xEDfica, NO conf\xEDes en la ra\xEDz del sistema de archivos.","trust.dangerous.option.yes":"Entiendo los riesgos, confiar solo esta sesi\xF3n","trust.dangerous.option.no":"Salir (recomendado)"};export{f as dict};
|
|
2
|
+
import"./chunk-fn8191ps.js";import"./chunk-4sazy0nq.js";var f={"language.en":"English","language.zh":"\u7B80\u4F53\u4E2D\u6587","language.zht":"\u7E41\u9AD4\u4E2D\u6587","language.ko":"\uD55C\uAD6D\uC5B4","language.de":"Deutsch","language.es":"Espa\xF1ol","language.fr":"Fran\xE7ais","language.da":"Dansk","language.ja":"\u65E5\u672C\u8A9E","language.pl":"Polski","language.ru":"\u0420\u0443\u0441\u0441\u043A\u0438\u0439","language.ar":"\u0627\u0644\u0639\u0631\u0628\u064A\u0629","language.no":"Norsk","language.br":"Portugu\xEAs (Brasil)","language.pt":"Portugu\xEAs","language.bs":"Bosanski","language.th":"\u0E44\u0E17\u0E22","language.tr":"T\xFCrk\xE7e","tui.prompt.placeholder.normal":'Pregunta lo que quieras... "{{example}}"',"tui.prompt.placeholder.shell":'Ejecuta un comando... "{{example}}"',"tui.prompt.ghost":"{{prediction}} (Tab para aceptar)","tui.home.placeholder.example.todo":"Corregir un TODO en el c\xF3digo","tui.home.placeholder.example.stack":"\xBFCu\xE1l es el stack t\xE9cnico del proyecto?","tui.home.placeholder.example.tests":"Arreglar las pruebas fallidas","tui.home.agreement.prefix":"Al usar QitQode, aceptas nuestros ","tui.home.agreement.terms":"T\xE9rminos de servicio","tui.home.agreement.separator":" y la ","tui.home.agreement.privacy":"Pol\xEDtica de privacidad","tui.home.agreement.suffix":"","tui.prompt.hint.attach_file":"adjuntar archivo","tui.prompt.hint.subagent":"subagente","tui.prompt.hint.commands":"comandos","tui.prompt.hint.switch_mode":"cambiar modo","tui.prompt.hint.settings":"ajustes","tui.tips.label":"Sugerencia","tui.tips.plain_terminal":"Recomendamos usar iTerm o la terminal de VS Code","tui.tips.attach_file":"Escribe {highlight}@{/highlight} seguido del nombre de archivo para buscar de forma difusa y adjuntar archivos","tui.tips.shell_prefix":"Empieza un mensaje con {highlight}!{/highlight} para ejecutar comandos del shell directamente (p. ej., {highlight}!ls -la{/highlight})","tui.tips.tab_agent":"Pulsa {highlight}Tab{/highlight} o {highlight}Shift+Tab{/highlight} para alternar entre los agentes Build, Plan y Compose","tui.tips.theme_mode":"Ejecuta {highlight}/dark{/highlight} para el modo oscuro o {highlight}/light{/highlight} para el modo claro","tui.tips.doc":"Ejecuta {highlight}/doc{/highlight} para abrir la documentaci\xF3n de usuario","tui.tips.undo":"Usa {highlight}/undo{/highlight} para revertir el \xFAltimo mensaje y los cambios en archivos","tui.tips.redo":"Usa {highlight}/redo{/highlight} para restaurar mensajes y cambios deshechos previamente","tui.tips.drag_drop":"Arrastra y suelta im\xE1genes o PDF en el terminal para a\xF1adirlos como contexto","tui.tips.paste_image":"Pulsa {highlight}Ctrl+V{/highlight} para pegar im\xE1genes desde el portapapeles en la entrada","tui.tips.editor":"Pulsa {highlight}Ctrl+X E{/highlight} o {highlight}/editor{/highlight} para componer mensajes en tu editor externo","tui.tips.init":"Ejecuta {highlight}/init{/highlight} para autogenerar reglas del proyecto a partir de tu c\xF3digo","tui.tips.models":"Ejecuta {highlight}/models{/highlight} o {highlight}Ctrl+X M{/highlight} para cambiar entre los modelos disponibles","tui.tips.theme":'Bloquea el modo de tema frente al fondo de tu terminal \u2014 abre la paleta de comandos ({highlight}Ctrl+P{/highlight}) y busca "lock"',"tui.tips.new_session":"Pulsa {highlight}Ctrl+X N{/highlight} o {highlight}/new{/highlight} para iniciar una nueva sesi\xF3n","tui.tips.sessions":"Usa {highlight}/sessions{/highlight} o {highlight}Ctrl+X L{/highlight} para listar y continuar conversaciones anteriores","tui.tips.compact":"Ejecuta {highlight}/compact{/highlight} para resumir sesiones largas cerca del l\xEDmite de contexto","tui.tips.export":"Pulsa {highlight}Ctrl+X X{/highlight} o {highlight}/export{/highlight} para guardar la conversaci\xF3n como Markdown","tui.tips.copy_last":"Pulsa {highlight}Ctrl+X Y{/highlight} para copiar el \xFAltimo mensaje del asistente al portapapeles","tui.tips.command_palette":"Pulsa {highlight}Ctrl+P{/highlight} para ver todas las acciones y comandos disponibles","tui.tips.leader":"La tecla l\xEDder es {highlight}Ctrl+X{/highlight}; comb\xEDnala con otras teclas para acciones r\xE1pidas","tui.tips.f2":"Pulsa {highlight}F2{/highlight} para alternar r\xE1pidamente entre los modelos usados recientemente","tui.tips.sidebar":"Pulsa {highlight}Ctrl+X B{/highlight} para mostrar/ocultar la barra lateral","tui.tips.history":"Usa {highlight}PageUp{/highlight}/{highlight}PageDown{/highlight} para navegar por el historial de la conversaci\xF3n","tui.tips.jump_first":"Pulsa {highlight}Ctrl+G{/highlight} o {highlight}Home{/highlight} para ir al inicio de la conversaci\xF3n","tui.tips.jump_last":"Pulsa {highlight}Ctrl+Alt+G{/highlight} o {highlight}End{/highlight} para ir al mensaje m\xE1s reciente","tui.tips.newline":"Pulsa {highlight}Shift+Enter{/highlight} o {highlight}Ctrl+J{/highlight} para a\xF1adir saltos de l\xEDnea en la entrada","tui.tips.clear_input":"Pulsa {highlight}Ctrl+C{/highlight} mientras escribes para vaciar el campo de entrada","tui.tips.escape":"Pulsa {highlight}Escape{/highlight} para detener la respuesta de la IA en curso","tui.tips.plan_agent":"Cambia al agente {highlight}Plan{/highlight} para obtener sugerencias sin aplicar cambios reales","tui.tips.subagent":"Usa {highlight}@agent-name{/highlight} en las indicaciones para invocar subagentes especializados","tui.tips.cycle_sessions":"Pulsa {highlight}Ctrl+X Right/Left{/highlight} para alternar entre sesiones padre e hija","tui.tips.config_files":"Crea {highlight}qitqode.json{/highlight} para la configuraci\xF3n del servidor y {highlight}tui.json{/highlight} para la TUI","tui.tips.global_config":"Coloca la configuraci\xF3n de TUI en {highlight}~/.config/qitqode/tui.json{/highlight} como configuraci\xF3n global","tui.tips.schema":"A\xF1ade {highlight}$schema{/highlight} a tu configuraci\xF3n para autocompletado en el editor","tui.tips.default_model":"Configura {highlight}model{/highlight} en la config para definir tu modelo por defecto","tui.tips.keybinds":"Sobrescribe cualquier atajo en {highlight}tui.json{/highlight} mediante la secci\xF3n {highlight}keybinds{/highlight}","tui.tips.disable_keybind":"Establece un atajo en {highlight}none{/highlight} para deshabilitarlo por completo","tui.tips.mcp_config":"Configura servidores MCP locales o remotos en la secci\xF3n {highlight}mcp{/highlight}","tui.tips.mcp_oauth":"QitQode gestiona autom\xE1ticamente OAuth para servidores MCP remotos que requieran autenticaci\xF3n","tui.tips.custom_command":"A\xF1ade archivos {highlight}.md{/highlight} en {highlight}.qitqode/command/{/highlight} para definir indicaciones personalizadas reutilizables","tui.tips.command_args":"Usa {highlight}$ARGUMENTS{/highlight}, {highlight}$1{/highlight}, {highlight}$2{/highlight} en comandos personalizados para entradas din\xE1micas","tui.tips.command_backticks":"Usa comillas invertidas en los comandos para inyectar la salida del shell (p. ej. {highlight}`git status`{/highlight})","tui.tips.custom_agent":"A\xF1ade archivos {highlight}.md{/highlight} en {highlight}.qitqode/agent/{/highlight} para personajes de IA especializados","tui.tips.agent_perms":"Configura por agente los permisos de las herramientas {highlight}edit{/highlight}, {highlight}bash{/highlight} y {highlight}webfetch{/highlight}","tui.tips.bash_allow":'Usa patrones como {highlight}"git *": "allow"{/highlight} para permisos de bash m\xE1s finos',"tui.tips.bash_deny":'Define {highlight}"rm -rf *": "deny"{/highlight} para bloquear comandos destructivos',"tui.tips.bash_ask":'Configura {highlight}"git push": "ask"{/highlight} para exigir confirmaci\xF3n antes de hacer push',"tui.tips.formatter":"QitQode formatea archivos autom\xE1ticamente con prettier, gofmt, ruff y m\xE1s","tui.tips.disable_formatter":'Define {highlight}"formatter": false{/highlight} en la config para desactivar el formato autom\xE1tico',"tui.tips.custom_formatter":"Define comandos de formateo personalizados por extensi\xF3n de archivo en la configuraci\xF3n","tui.tips.lsp":"QitQode usa servidores LSP para an\xE1lisis inteligente de c\xF3digo","tui.tips.custom_tool":"Crea archivos {highlight}.ts{/highlight} en {highlight}.qitqode/tools/{/highlight} para definir nuevas herramientas LLM","tui.tips.tool_scripts":"Las definiciones de herramientas pueden invocar scripts en Python, Go, etc.","tui.tips.plugins":"A\xF1ade archivos {highlight}.ts{/highlight} en {highlight}.qitqode/plugin/{/highlight} para enganchar eventos","tui.tips.plugin_notify":"Usa plugins para enviar notificaciones del sistema cuando termine una sesi\xF3n","tui.tips.plugin_protect":"Crea un plugin que impida a QitQode leer archivos sensibles","tui.tips.run":"Usa {highlight}qitqode run{/highlight} para scripting no interactivo","tui.tips.continue":"Usa {highlight}qitqode --continue{/highlight} para retomar la \xFAltima sesi\xF3n","tui.tips.attach_cli":"Usa {highlight}qitqode run -f file.ts{/highlight} para adjuntar archivos v\xEDa CLI","tui.tips.format_json":"Usa {highlight}--format json{/highlight} para obtener salida legible por m\xE1quina en scripts","tui.tips.auth_list":"Ejecuta {highlight}qitqode auth status{/highlight} para ver tu estado de inicio de sesi\xF3n actual","tui.tips.agent_create":"Ejecuta {highlight}qitqode agent create{/highlight} para crear un agente con asistente guiado","tui.tips.theme_system":'Usa {highlight}"theme": "system"{/highlight} para seguir los colores de tu terminal',"tui.tips.theme_files":"Crea archivos JSON de tema en el directorio {highlight}.qitqode/themes/{/highlight}","tui.tips.theme_variants":"Los temas admiten variantes claras/oscuras para ambos modos","tui.tips.theme_ansi":"Referencia colores ANSI 0-255 en temas personalizados","tui.tips.env_var":"Usa la sintaxis {highlight}{env:VAR_NAME}{/highlight} para referenciar variables de entorno en la config","tui.tips.file_var":"Usa {highlight}{file:path}{/highlight} para incluir el contenido de un archivo en valores de la config","tui.tips.instructions":"Usa {highlight}instructions{/highlight} en la config para cargar archivos de reglas adicionales","tui.tips.temperature":"Ajusta la {highlight}temperature{/highlight} del agente desde 0.0 (enfocado) hasta 1.0 (creativo)","tui.tips.steps":"Configura {highlight}steps{/highlight} para limitar las iteraciones ag\xE9nticas por petici\xF3n","tui.tips.disable_tool":'Define {highlight}"tools": {"bash": false}{/highlight} para deshabilitar herramientas concretas',"tui.tips.disable_mcp_tools":'Define {highlight}"mcp_*": false{/highlight} para deshabilitar todas las herramientas de un servidor MCP',"tui.tips.tool_override":"Sobrescribe la configuraci\xF3n global de herramientas en cada agente","tui.tips.doom_loop":"El permiso {highlight}doom_loop{/highlight} previene bucles infinitos de llamadas a herramientas","tui.tips.external_dir":"El permiso {highlight}external_directory{/highlight} protege archivos fuera del proyecto","tui.tips.debug_config":"Ejecuta {highlight}qitqode debug config{/highlight} para diagnosticar problemas de configuraci\xF3n","tui.tips.print_logs":"Usa la opci\xF3n {highlight}--print-logs{/highlight} para ver logs detallados en stderr","tui.tips.timeline":"Pulsa {highlight}Ctrl+X G{/highlight} o {highlight}/timeline{/highlight} para saltar a un mensaje concreto","tui.tips.toggle_code":"Pulsa {highlight}Ctrl+X H{/highlight} para alternar la visibilidad de los bloques de c\xF3digo","tui.tips.status":"Pulsa {highlight}Ctrl+X S{/highlight} o {highlight}/status{/highlight} para ver el estado del sistema","tui.tips.scroll_accel":"Activa {highlight}scroll_acceleration{/highlight} en {highlight}tui.json{/highlight} para un desplazamiento suave","tui.tips.agents_md":"Sube el {highlight}AGENTS.md{/highlight} de tu proyecto a Git para compartirlo con el equipo","tui.tips.review":"Usa {highlight}/review{/highlight} para revisar cambios sin commit, ramas o PR","tui.tips.help":"Ejecuta {highlight}/help{/highlight} o {highlight}Ctrl+X H{/highlight} para abrir el di\xE1logo de ayuda","tui.tips.rename":"Usa {highlight}/rename{/highlight} para renombrar la sesi\xF3n actual","tui.tips.suspend.unix":"Pulsa {highlight}Ctrl+Z{/highlight} para suspender el terminal y volver al shell","tui.tips.suspend.win":"Pulsa {highlight}Ctrl+Z{/highlight} para deshacer cambios en la entrada","tui.command.palette.title":"Comandos","tui.command.palette.suggested":"Sugeridos","tui.command.category.session":"Sesi\xF3n","tui.command.category.agent":"Agente","tui.command.category.provider":"Proveedor","tui.command.category.system":"Sistema","tui.command.category.prompt":"Entrada","tui.command.category.internal":"Interno","tui.command.category.external":"Externo","tui.slash.init.description":"configuraci\xF3n guiada de AGENTS.md","tui.slash.review.description":"revisar cambios [commit|branch|pr], por defecto sin confirmar","tui.slash.dream.description":"consolidar manualmente la memoria del proyecto desde archivos memory y la trayectoria en bruto","tui.slash.distill.description":"encontrar flujos repetidos en el trabajo reciente y empaquetarlos en skills, subagentes o comandos","tui.slash.goal.description":"definir un objetivo con condici\xF3n de parada; se ejecuta hasta que un juez confirme. /goal clear para abortar","tui.slash.deep-research.description":"informe de investigaci\xF3n profunda multi-fuente y verificado (ejecuta el workflow deep-research)","tui.command.language.switch.title":"Cambiar idioma","tui.command.language.switch.description":"Cambiar el idioma de la interfaz","tui.command.language.dialog.title":"Cambiar idioma","tui.language.auto":"Auto (sistema)","tui.language.current":"Actual","tui.command.session.list.title":"Cambiar sesi\xF3n","tui.command.session.new.title":"Nueva sesi\xF3n","tui.command.workflow.list.title":"Flujos de trabajo","tui.command.model.list.title":"Cambiar modelo","tui.command.model.cycle_recent.title":"Ciclo de modelos","tui.command.model.cycle_recent_reverse.title":"Ciclo de modelos (inverso)","tui.command.model.cycle_favorite.title":"Ciclo de favoritos","tui.command.model.cycle_favorite_reverse.title":"Ciclo de favoritos (inverso)","tui.command.agent.list.title":"Cambiar agente","tui.command.mcp.list.title":"Alternar MCP","tui.command.never_ask.title_on":"Sin preguntas: ACTIVADO (auto-decidir, permisos excluidos) \u2014 clic para desactivar","tui.command.never_ask.title_off":"Sin preguntas: DESACTIVADO \u2014 clic para activar (auto-decidir, permisos excluidos)","tui.command.never_ask.toast_on":"Sin preguntas ACTIVADO \u2014 no te preguntar\xE9; elegir\xE9 la mejor opci\xF3n yo mismo hasta que lo desactives (/never-ask). Las solicitudes de permiso siguen requiriendo tu aprobaci\xF3n.","tui.command.never_ask.toast_off":"Sin preguntas DESACTIVADO \u2014 volver\xE9 a preguntarte en los puntos de decisi\xF3n.","tui.command.never_ask.title_on_fullauto":"Sin preguntas: ACTIVADO (auto-decidir; el modo full-auto tambi\xE9n aprueba los permisos) \u2014 clic para desactivar","tui.command.never_ask.title_off_fullauto":"Sin preguntas: DESACTIVADO \u2014 clic para activar (auto-decidir; el modo full-auto sigue aprobando los permisos)","tui.command.never_ask.toast_on_fullauto":"Sin preguntas ACTIVADO \u2014 no te preguntar\xE9; elegir\xE9 la mejor opci\xF3n yo mismo hasta que lo desactives (/never-ask). El modo full-auto est\xE1 activo, as\xED que tambi\xE9n se aprueban autom\xE1ticamente los permisos de herramientas.","tui.command.agent.cycle.title":"Ciclo de agentes","tui.command.variant.cycle.title":"Ciclo de variantes","tui.command.variant.list.title":"Cambiar variante de modelo","tui.command.agent.cycle.reverse.title":"Ciclo de agentes (inverso)","tui.command.provider.login.title":"Iniciar sesi\xF3n","tui.command.provider.logout.title":"Cerrar sesi\xF3n","tui.command.console.org.switch.title":"Cambiar de organizaci\xF3n","tui.command.qitqode.status.title":"Ver estado","tui.command.theme.switch.title":"Cambiar tema","tui.command.theme.switch_mode.to_light":"Cambiar a modo claro","tui.command.theme.switch_mode.to_dark":"Cambiar a modo oscuro","tui.command.theme.mode.unlock":"Desbloquear modo del tema","tui.command.theme.mode.lock":"Bloquear modo del tema","tui.command.help.show.title":"Ayuda","tui.dialog.help.close_hint":"esc/enter/space","tui.dialog.help.accessibility":"Accesibilidad: activa o desactiva animaciones y sonido desde la lista de comandos. Variables de entorno: NO_COLOR, QITQODE_TUI_ACCESSIBLE, QITQODE_REDUCE_MOTION, QITQODE_TUI_SOUND.","tui.dialog.help.announcements":"Anuncios: en modo accesible, elige el nivel de detalle de los anuncios para lectores de pantalla (silencioso, normal, detallado) desde la lista de comandos o con QITQODE_TUI_ANNOUNCEMENTS. Los errores siempre se anuncian.","tui.dialog.help.dialog_keys":"Di\xE1logos: todos los di\xE1logos funcionan solo con el teclado \u2014 Esc cierra, Tab o las flechas mueven el foco, Enter o Espacio activan el control enfocado.","tui.command.app.announcements.cycle":"Anuncios: {{level}} (selecciona para cambiar)","tui.announcements.level.quiet":"silencioso","tui.announcements.level.normal":"normal","tui.announcements.level.verbose":"detallado","tui.app.terminal_too_small":"Terminal demasiado peque\xF1a ({{width}}x{{height}}). Ampl\xEDala al menos a 40x8.","tui.dialog.help.command_list":"Pulsa {{keybind}} para ver todas las acciones y comandos disponibles en cualquier contexto.","tui.dialog.help.ok":"Aceptar","tui.dialog.close_hint":"esc","tui.dialog.document.scroll_hint":"\u2191/\u2193 desplazar \xB7 ReP\xE1g/AvP\xE1g p\xE1gina \xB7 esc cerrar","tui.dialog.ok":"Aceptar","tui.dialog.confirm.cancel":"Cancelar","tui.dialog.confirm.confirm":"Confirmar","tui.dialog.agreement.title":"T\xE9rminos y privacidad","tui.dialog.agreement.message":"Rev\xEDsalos y acepta para continuar.","tui.dialog.agreement.confirm":"Aceptar y continuar","tui.command.docs.terms.title":"Ver los t\xE9rminos de servicio","tui.command.docs.privacy.title":"Ver la pol\xEDtica de privacidad","tui.command.consent.revoke.title":"Revocar el acuerdo de modelo gratuito","tui.consent.revoked":"Acuerdo de modelo gratuito revocado: se te pedir\xE1 aceptarlo de nuevo","tui.dialog.select.placeholder":"Buscar","tui.dialog.select.no_results":"No se encontraron resultados","tui.dialog.prompt.placeholder":"Introduce texto","tui.dialog.prompt.busy":"Trabajando...","tui.dialog.prompt.processing":"procesando...","tui.dialog.prompt.submit_key":"enter","tui.dialog.prompt.submit_action":"enviar","tui.dialog.export.title":"Opciones de exportaci\xF3n","tui.dialog.export.filename":"Nombre de archivo:","tui.dialog.export.filename_placeholder":"Introduce el nombre de archivo","tui.dialog.export.include_thinking":"Incluir razonamiento","tui.dialog.export.include_tool_details":"Incluir detalles de herramientas","tui.dialog.export.include_assistant_metadata":"Incluir metadatos del asistente","tui.dialog.export.open_without_saving":"Abrir sin guardar","tui.dialog.export.hint.toggle_prefix":"Pulsa","tui.dialog.export.hint.toggle_action":"para alternar","tui.dialog.export.hint.confirm_action":"para confirmar","tui.dialog.export.hint.options_action":"para opciones","tui.toast.copied_to_clipboard":"Copiado al portapapeles","tui.toast.instructions_loaded":"Cargado {{files}}","tui.toast.update_available.title":"Actualizaci\xF3n disponible","tui.toast.update_available.confirm":"La nueva versi\xF3n v{{version}} est\xE1 disponible. \xBFDesea actualizar ahora?","tui.toast.update_available.updating":"Actualizando a v{{version}}...","tui.toast.update_available.failed":"La actualizaci\xF3n fall\xF3","tui.toast.update_available.success":"Se actualiz\xF3 a QitQode v{{version}}. Por favor reinicie la aplicaci\xF3n.","tui.toast.updated.title":"Actualizado autom\xE1ticamente","tui.toast.updated.message":"Parche aplicado autom\xE1ticamente: v{{version}}. Reinicie para usar la nueva versi\xF3n. Desactive con autoupdate: false en la configuraci\xF3n.","tui.sidebar.instructions":"Instrucciones","tui.sidebar.cwd":"Directorio de trabajo","tui.toast.unknown_error":"Ha ocurrido un error desconocido","tui.command.docs.open.title":"Abrir documentaci\xF3n","tui.command.app.exit.title":"Salir de la aplicaci\xF3n","tui.command.app.debug.title":"Alternar panel de depuraci\xF3n","tui.command.app.console.title":"Alternar consola","tui.command.app.heap_snapshot.title":"Exportar snapshot del heap","tui.command.terminal.suspend.title":"Suspender terminal","tui.command.terminal.title.disable":"Deshabilitar t\xEDtulo del terminal","tui.command.terminal.title.enable":"Habilitar t\xEDtulo del terminal","tui.command.app.toggle.animations.disable":"Deshabilitar animaciones","tui.command.app.toggle.animations.enable":"Habilitar animaciones","tui.command.app.toggle.diffwrap.disable":"Deshabilitar ajuste de diff","tui.command.app.toggle.diffwrap.enable":"Habilitar ajuste de diff","tui.command.app.toggle.sound.disable":"Desactivar sonido","tui.command.app.toggle.sound.enable":"Activar sonido","tui.command.logout.toast":"Sesi\xF3n cerrada","tui.command.session.share.title":"Compartir sesi\xF3n","tui.command.session.share.copy_link":"Copiar enlace para compartir","tui.command.session.rename.title":"Renombrar sesi\xF3n","tui.command.session.timeline.title":"Saltar a un mensaje","tui.command.session.fork.title":"Bifurcar sesi\xF3n","tui.command.session.compact.title":"Compactar sesi\xF3n","tui.command.session.unshare.title":"Dejar de compartir","tui.command.session.undo.title":"Deshacer mensaje anterior","tui.command.session.redo.title":"Rehacer","tui.command.session.sidebar.show":"Mostrar barra lateral","tui.command.session.sidebar.hide":"Ocultar barra lateral","tui.command.session.conceal.disable":"Deshabilitar ocultaci\xF3n de c\xF3digo","tui.command.session.conceal.enable":"Habilitar ocultaci\xF3n de c\xF3digo","tui.command.session.timestamps.show":"Mostrar marcas de tiempo","tui.command.session.timestamps.hide":"Ocultar marcas de tiempo","tui.command.session.thinking.expand":"Expandir razonamiento","tui.command.session.thinking.collapse":"Colapsar razonamiento","tui.command.session.tool_details.show":"Mostrar detalles de herramientas","tui.command.session.tool_details.hide":"Ocultar detalles de herramientas","tui.command.session.scrollbar.toggle":"Alternar barra de desplazamiento","tui.command.session.generic_tool_output.show":"Mostrar salida de herramienta gen\xE9rica","tui.command.session.generic_tool_output.hide":"Ocultar salida de herramienta gen\xE9rica","tui.command.session.page_up.title":"P\xE1gina anterior","tui.command.session.page_down.title":"P\xE1gina siguiente","tui.command.session.line_up.title":"L\xEDnea arriba","tui.command.session.line_down.title":"L\xEDnea abajo","tui.command.session.half_page_up.title":"Media p\xE1gina arriba","tui.command.session.half_page_down.title":"Media p\xE1gina abajo","tui.command.session.first.title":"Primer mensaje","tui.command.session.last.title":"\xDAltimo mensaje","tui.command.session.last_user.title":"Ir al \xFAltimo mensaje del usuario","tui.command.session.message_next.title":"Mensaje siguiente","tui.command.session.message_previous.title":"Mensaje anterior","tui.command.messages.copy.title":"Copiar \xFAltimo mensaje del asistente","tui.command.session.copy.title":"Copiar transcripci\xF3n de la sesi\xF3n","tui.command.session.export.title":"Exportar transcripci\xF3n","tui.command.session.child_first.title":"Ir a la sesi\xF3n hija","tui.command.session.parent.title":"Ir a la sesi\xF3n padre","tui.command.session.child_next.title":"Sesi\xF3n hija siguiente","tui.command.session.child_previous.title":"Sesi\xF3n hija anterior","tui.command.prompt.clear.title":"Vaciar entrada","tui.command.prompt.submit.title":"Enviar prompt","tui.command.prompt.paste.title":"Pegar","tui.command.session.interrupt.title":"Interrumpir sesi\xF3n","tui.command.prompt.editor.title":"Abrir editor","tui.command.prompt.skills.title":"Habilidades","tui.command.voice.toggle.title":"Alternar entrada de voz","tui.command.voice.toggle.title_on":"Entrada de voz: activada \u2014 clic para desactivar","tui.command.voice.toggle.title_off":"Entrada de voz: desactivada \u2014 clic para activar","tui.voice.enabled":"Entrada de voz activada (chino/ingl\xE9s) \u2014 clic en [Voice] para grabar","tui.voice.disabled":"Entrada de voz deshabilitada","tui.voice.send.enabled":'Env\xEDo por voz habilitado \u2014 di\u300C\u53D1\u9001\u300Do "send it" para enviar',"tui.voice.send.disabled":"Env\xEDo por voz deshabilitado","tui.command.voice.send.title":"Alternar env\xEDo por voz","tui.command.voice.send.title_on":"Env\xEDo por voz: activado \u2014 clic para desactivar","tui.command.voice.send.title_off":"Env\xEDo por voz: desactivado \u2014 clic para activar","tui.voice.control.enabled":"Control de voz habilitado \u2014 usa modelo multimodal para edici\xF3n inteligente (m\xE1s lento)","tui.voice.control.disabled":"Control de voz deshabilitado \u2014 usa transcripci\xF3n ASR r\xE1pida","tui.command.voice.control.title":"Alternar control de voz (multimodal)","tui.command.voice.control.title_on":"Control de voz: activado (multimodal) \u2014 clic para desactivar","tui.command.voice.control.title_off":"Control de voz: desactivado (ASR r\xE1pido) \u2014 clic para activar","tui.voice.error.no_auth":"Usa /connect para conectar tu cuenta QitQode, o configura voice.asr_model para otro proveedor","tui.voice.error.no_auth_provider":'El proveedor de voz "{{provider}}" no est\xE1 autenticado, revisa su apiKey',"tui.voice.error.provider_not_found":'Proveedor "{{provider}}" no disponible \u2014 /connect para autenticarte, o declara models en la config para endpoints personalizados',"tui.voice.error.no_url":'El proveedor "{{provider}}" no tiene baseURL configurada \u2014 configura options.baseURL',"tui.voice.error.no_device":"No se encontr\xF3 micr\xF3fono/dispositivo de audio \u2014 verifica la configuraci\xF3n de audio del sistema","tui.voice.error.recorder_failed":"Error de grabaci\xF3n","tui.voice.error.no_recorder":"No se encontr\xF3 herramienta de grabaci\xF3n, instala sox","tui.voice.error.too_short":"Grabaci\xF3n demasiado corta","tui.voice.error.network":"La transcripci\xF3n fall\xF3, verifica tu red","tui.voice.error.empty_send":"No hay contenido para enviar","tui.voice.error.unknown_agent":'Agente "{{name}}" no encontrado',"tui.command.prompt.stash.title":"Guardar prompt","tui.command.prompt.stash.pop.title":"Recuperar prompt","tui.command.prompt.stash.list.title":"Lista de prompts guardados","tui.command.tips.toggle.show":"Mostrar sugerencias","tui.command.tips.toggle.hide":"Ocultar sugerencias","tui.command.plugins.list.title":"Plugins","tui.command.plugins.install.title":"Instalar plugin","tui.question.plan_enter.question":"\xBFDesea cambiar al modo plan para una planificaci\xF3n estructurada?","tui.question.plan_enter.header":"Entrar al plan","tui.question.plan_enter.option.0.label":"S\xED","tui.question.plan_enter.option.0.description":"Cambiar al agente plan para planificaci\xF3n de solo lectura","tui.question.plan_enter.option.1.label":"No","tui.question.plan_enter.option.1.description":"Permanecer en el modo actual","tui.question.plan_exit.question":"El plan en {{plan}} est\xE1 completo. \xBFDesea cambiar al agente build para comenzar la implementaci\xF3n?","tui.question.plan_exit.header":"Salir del plan","tui.question.plan_exit.option.0.label":"S\xED","tui.question.plan_exit.option.0.description":"Cambiar al agente build y comenzar la implementaci\xF3n del plan","tui.question.plan_exit.option.1.label":"No","tui.question.plan_exit.option.1.description":"Permanecer con el agente plan para seguir refinando","tui.session.badge.auto":"Auto","trust.title":"Accediendo al espacio de trabajo:","trust.safety_check":"Verificaci\xF3n r\xE1pida: \xBFEs este un proyecto que creaste o en el que conf\xEDas? (Tu propio c\xF3digo, un proyecto open source conocido o trabajo de tu equipo). Si no, t\xF3mate un momento para revisar el contenido de esta carpeta.","trust.capabilities":"QitQode podr\xE1 leer, editar y ejecutar archivos aqu\xED.","trust.plugin_warn":"Si existen plugins maliciosos en este directorio, pueden ejecutar c\xF3digo arbitrario, leer, modificar o exfiltrar tus archivos.","trust.option.yes":"S\xED, conf\xEDo en esta carpeta","trust.option.no":"No, salir","trust.dangerous.title_home":"ADVERTENCIA: Est\xE1s a punto de abrir tu DIRECTORIO PERSONAL.","trust.dangerous.title_root":"ADVERTENCIA: Est\xE1s a punto de abrir la RA\xCDZ DEL SISTEMA DE ARCHIVOS.","trust.dangerous.body_home":"El modelo tendr\xE1 acceso a TODOS tus archivos personales \u2014 claves SSH, credenciales, perfiles del navegador y todo lo dem\xE1s en tu carpeta personal.","trust.dangerous.body_root":"El modelo tendr\xE1 acceso a TODO el sistema de archivos \u2014 archivos del sistema, datos de todos los usuarios, credenciales y todo en esta m\xE1quina.","trust.dangerous.advice_home":"A menos que tengas una raz\xF3n muy espec\xEDfica, NO conf\xEDes en todo tu directorio personal.","trust.dangerous.advice_root":"A menos que tengas una raz\xF3n muy espec\xEDfica, NO conf\xEDes en la ra\xEDz del sistema de archivos.","trust.dangerous.option.yes":"Entiendo los riesgos, confiar solo esta sesi\xF3n","trust.dangerous.option.no":"Salir (recomendado)"};export{f as dict};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{$o as R,Xo as D,Yo as m,ap as X,ep as v,gp as x,hp as S}from"./chunk-
|
|
2
|
+
import{$o as R,Xo as D,Yo as m,ap as X,ep as v,gp as x,hp as S}from"./chunk-n38h109k.js";import{Ap as L,wp as A}from"./chunk-qdcf1ay5.js";import{qu as U}from"./chunk-2pzvcpv4.js";import{Qu as P,Vu as F}from"./chunk-vc4e6xc4.js";import{GF as s,HP as B,UI as k}from"./chunk-ydc6ypjt.js";import{iQ as E}from"./chunk-4sazy0nq.js";var V={};E(V,{schema:()=>c,jsonc:()=>g,ConfigParse:()=>V});function g($,T){let J=[],j=D($,J,{allowTrailingComma:!0});if(J.length){let C=$.split(`
|
|
3
3
|
`),y=J.map((H)=>{let I=$.substring(0,H.offset).split(`
|
|
4
4
|
`),Q=I.length,Z=I[I.length-1].length+1,K=C[Q-1],z=`${m(H.error)} at line ${Q}, column ${Z}`;if(!K)return z;return`${z}
|
|
5
5
|
Line ${Q}: ${K}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{Fu as E}from"./chunk-
|
|
2
|
+
import{Fu as E}from"./chunk-kmtfdky8.js";function q(w){return!!w&&typeof w==="object"&&!Array.isArray(w)}function C(w){if(!q(w))return;let A=w.diagnostic,j=q(w.data)?w.data.diagnostic:void 0,p=q(A)?A:q(j)?j:void 0;if(!p){let h=w.cause;return h!==w?C(h):void 0}if(typeof p.errorID!=="string"||typeof p.errorName!=="string"||typeof p.logFile!=="string")return;return{errorID:p.errorID,errorName:p.errorName,logFile:p.logFile}}function J(w){return C(w)}function K(w,A){let j=C(w);if(j)return j;let p=A??(q(w)&&typeof w.name==="string"?w.name:w instanceof Error?w.name:"UnknownError"),h={errorID:crypto.randomUUID(),errorName:p,logFile:E()};if(q(w))try{Object.defineProperty(w,"diagnostic",{value:h,enumerable:!0,configurable:!0})}catch{}return h}function D(w){if(w instanceof Error)return w.stack??`${w.name}: ${w.message}`;if(typeof w==="object"&&w!==null){let A=z(w);if(A!=="unknown error")return A;try{return JSON.stringify(w,null,2)}catch{return"Unexpected error (unserializable)"}}return String(w)}function z(w){if(w instanceof Error){if(w.message)return w.message;if(w.name)return w.name}if(q(w)&&typeof w.message==="string"&&w.message)return w.message;if(q(w)&&q(w.data)&&typeof w.data.message==="string"&&w.data.message)return w.data.message;let A=String(w);if(A&&A!=="[object Object]")return A;let j=D(w);if(j&&j!=="{}")return j;return"unknown error"}function L(w){if(w instanceof Error)return{type:w.name,message:z(w),stack:w.stack,cause:w.cause===void 0?void 0:D(w.cause),formatted:B(w)};if(!q(w))return{type:typeof w,message:z(w),formatted:B(w)};let A=Object.getOwnPropertyNames(w).reduce((j,p)=>{let h=w[p];if(h===void 0)return j;if(typeof h==="string"||typeof h==="number"||typeof h==="boolean")return j[p]=h,j;return j[p]=h instanceof Error?h.message:String(h),j},{});if(typeof A.message!=="string")A.message=z(w);if(typeof A.type!=="string")A.type=w.constructor?.name;return A.formatted=B(w),A}function B(w){let A=D(w);if(A!=="{}")return A;return String(w)}
|
|
3
3
|
export{q as qu,J as ru,K as su,z as tu,L as uu};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{I}from"./chunk-a9y27zd2.js";import{J as i,L as r}from"./chunk-
|
|
2
|
+
import{I}from"./chunk-a9y27zd2.js";import{J as i,L as r}from"./chunk-6r8pg6ma.js";import{ud as c}from"./chunk-h1kg35mn.js";import{vd as g}from"./chunk-8dxdeksr.js";import{wd as y}from"./chunk-jqn27885.js";import{xd as k}from"./chunk-vm58fkrv.js";import{yd as A}from"./chunk-fn8191ps.js";import{Dd as w,Ed as u,Gd as W,Hd as L,Id as T,Kd as p,Ld as o,Md as b,Nd as P}from"./chunk-7jhrxzjx.js";import"./chunk-jcjaw7tk.js";import{Pd as z}from"./chunk-9xvctnjr.js";import{Sf as Y}from"./chunk-9s4whpg1.js";import{Xg as M}from"./chunk-sv1s1qxd.js";import"./chunk-n7d9eemn.js";import"./chunk-pxx2hz0g.js";import"./chunk-rexdr63q.js";import"./chunk-kqhh2pm9.js";import"./chunk-7fawtcnn.js";import"./chunk-mdzzcrf9.js";import"./chunk-wev34grp.js";import{Mj as R,dl as a,sl as s}from"./chunk-rtdym35y.js";import{El as V}from"./chunk-5myxjxae.js";import{am as n}from"./chunk-sp8ek94w.js";import"./chunk-gnt982jr.js";import"./chunk-1bx2sjn6.js";import"./chunk-17pxm5d3.js";import"./chunk-n38h109k.js";import"./chunk-25bp7pcm.js";import"./chunk-qdcf1ay5.js";import"./chunk-45mjcxqk.js";import"./chunk-qqne79vp.js";import"./chunk-64s7vfj7.js";import"./chunk-xjhezxft.js";import"./chunk-gwfx7tx7.js";import"./chunk-1wpjmwnh.js";import"./chunk-cqtkxwd8.js";import"./chunk-ymtcm4xd.js";import"./chunk-yykjvt7f.js";import"./chunk-3mepk08v.js";import"./chunk-atpzz901.js";import"./chunk-0g25z230.js";import"./chunk-w9pdvcf9.js";import"./chunk-4gs87ghj.js";import"./chunk-kb6v5hhm.js";import"./chunk-qyjt0qnq.js";import"./chunk-xdjwapwy.js";import"./chunk-cxtxvt43.js";import{zt as l}from"./chunk-871f8x99.js";import"./chunk-cx7p4ezk.js";import"./chunk-tgd5ctnt.js";import"./chunk-p8kpqyxb.js";import"./chunk-3sz6gw10.js";import"./chunk-twhavv1m.js";import{Yt as d}from"./chunk-v0yxkq99.js";import"./chunk-2pzvcpv4.js";import"./chunk-kmtfdky8.js";import{_u as v}from"./chunk-vc4e6xc4.js";import"./chunk-hnz570f9.js";import"./chunk-tdmn21z0.js";import"./chunk-s8mghr5a.js";import"./chunk-pqnbdygz.js";import{UI as O}from"./chunk-ydc6ypjt.js";import"./chunk-ev3a2sxv.js";import"./chunk-pnq1h5az.js";import{kQ as H1}from"./chunk-4sazy0nq.js";import f from"path";import{pathToFileURL as J1}from"url";import Q1 from"os";import{access as S1,readdir as X1}from"fs/promises";var q1={en:A,zh:k,ja:c,fr:y,ru:g},B1=q1[I()]??A;function U($,B){let J=B1[$]??A[$]??$;if(!B)return J;return J.replace(/\{(\w+)\}/g,(X,H)=>(H in B)?String(B[H]):`{${H}}`)}import{text as Z1}from"stream/consumers";var D=($,B)=>M.runPromise(O.gen(function*(){yield*(yield*R.Service).set($,B)}));async function t(){let $=await p({message:"Enter your API key",validate:(B)=>B&&B.length>0?void 0:"Required"});if(w($))throw new Y.CancelledError;return $}async function h($,B){let J=$.provider??B;if("refresh"in $){let{type:X,provider:H,refresh:Z,access:j,expires:q,metadata:S,...G}=$;await D(J,{type:"oauth",refresh:Z,access:j,expires:q,...G})}if("key"in $)await D(J,{type:"api",key:$.key,...$.metadata?{metadata:$.metadata}:{}})}async function x($,B,J){let X=0;if(J){let j=$.auth.methods.findIndex((q)=>q.label.toLowerCase()===J.toLowerCase());if(j===-1)W.error(`Unknown method "${J}" for ${B}. Available: ${$.auth.methods.map((q)=>q.label).join(", ")}`),process.exit(1);X=j}else if($.auth.methods.length>1){let j=await b({message:"Login method",options:$.auth.methods.map((q,S)=>({label:q.label,value:S.toString()}))});if(w(j))throw new Y.CancelledError;X=parseInt(j)}let H=$.auth.methods[X];await new Promise((j)=>setTimeout(j,10));let Z={};if(H.prompts)for(let j of H.prompts){if(j.when){let q=Z[j.when.key];if(q===void 0)continue;if(!(j.when.op==="eq"?q===j.when.value:q!==j.when.value))continue}if(j.condition&&!j.condition(Z))continue;if(j.type==="select"){let q=await b({message:j.message,options:j.options});if(w(q))throw new Y.CancelledError;Z[j.key]=q}else{let q=await P({message:j.message,placeholder:j.placeholder,validate:j.validate?(S)=>j.validate(S??""):void 0});if(w(q))throw new Y.CancelledError;Z[j.key]=q}}if(H.type==="oauth"){let j=await H.authorize(Z);if(j.url)W.info("Go to: "+j.url);if(j.method==="auto"){if(j.instructions)W.info(j.instructions);let q=o();q.start("Waiting for authorization...");let S=await j.callback();if(S.type==="failed")q.stop("Failed to authorize",1);if(S.type==="success")await h(S,B),q.stop("Login successful")}if(j.method==="code"){let q=await P({message:"Paste the authorization code here: ",validate:(G)=>G&&G.length>0?void 0:"Required"});if(w(q))throw new Y.CancelledError;let S=await j.callback(q);if(S.type==="failed")W.error("Failed to authorize");if(S.type==="success")await h(S,B),W.success("Login successful")}return T("Done"),!0}if(H.type==="api"){if(H.authorize){let j=await t(),q=await H.authorize(Z);if(q.type==="failed")W.error("Failed to authorize");if(q.type==="success"){let S=q.provider??B;await D(S,{type:"api",key:q.key??j}),W.success("Login successful")}return T("Done"),!0}}return!1}function G1($){let B=new Set,J=[];for(let X of $.hooks){if(!X.auth)continue;let H=X.auth.provider;if(B.has(H))continue;if(B.add(H),Object.hasOwn($.existingProviders,H))continue;if($.disabled.has(H))continue;if($.enabled&&!$.enabled.has(H))continue;J.push({id:H,name:$.providerNames[H]??H})}return J}function m($){let B=$?.loginExtension;if(!B||typeof B!=="object")return;let J=B;if(typeof J.id!=="string"||typeof J.run!=="function")return;return J}async function W1(){try{let J=await import("./chunk-fr75ytdr.js");for(let X of Object.values(J.modules??{})){let H=m(X);if(H)return H}}catch{}let $=f.join(import.meta.dir,"..","..","ext");await S1($).catch(()=>{return});let B=await X1($).catch(()=>[]);for(let J of B.filter((X)=>X.endsWith(".ts")&&!X.endsWith(".d.ts")))try{let X=m(await import(J1(f.join($,J)).href));if(X)return X}catch{}return}var l1=z({command:"providers",aliases:["auth"],describe:"manage AI providers and credentials",builder:($)=>$.command(Y1).command(_1).command(F1).command(K1).demandCommand(),async handler(){}}),Y1=z({command:"list",aliases:["ls"],describe:"list providers and credentials",async handler($){Y.empty();let B=f.join(v.Path.data,"auth.json"),J=Q1.homedir(),X=B===J||B.startsWith(J+f.sep)?"~"+B.slice(J.length):B;L(`Credentials ${Y.Style.TEXT_DIM}${X}`);let H=await M.runPromise(O.gen(function*(){let q=yield*R.Service;return Object.entries(yield*q.all())})),Z=await V.get();for(let[q,S]of H){let G=Z[q]?.name||q;W.info(`${G} ${Y.Style.TEXT_DIM}${S.type}`)}T(`${H.length} credentials`);let j=[];for(let[q,S]of Object.entries(Z))for(let G of S.env)if(process.env[G])j.push({provider:S.name||q,envVar:G});if(j.length>0){Y.empty(),L("Environment");for(let{provider:q,envVar:S}of j)W.info(`${q} ${Y.Style.TEXT_DIM}${S}`);T(`${j.length} environment variable`+(j.length===1?"":"s"))}}}),_1=z({command:"login [url]",describe:"log in to a provider",builder:($)=>$.positional("url",{describe:"qitqode auth provider",type:"string"}).option("provider",{alias:["p"],describe:"provider id or name to log in to (skips provider selection)",type:"string"}).option("method",{alias:["m"],describe:"login method label (skips method selection)",type:"string"}),async handler($){await n.provide({directory:process.cwd(),async fn(){if(Y.empty(),L("Add credential"),$.url){let Q=$.url.replace(/\/+$/,""),_=await fetch(`${Q}/.well-known/opencode`).then((j1)=>j1.json());W.info(`Running \`${_.auth.command.join(" ")}\``);let F=l.spawn(_.auth.command,{stdout:"pipe"});if(!F.stdout){W.error("Failed"),T("Done");return}let[C,N]=await Promise.all([F.exited,Z1(F.stdout)]);if(C!==0){W.error("Failed"),T("Done");return}await D(Q,{type:"wellknown",key:_.auth.env,token:N.trim()}),W.success("Logged into "+Q),T("Done");return}await V.refresh(!0).catch(()=>{});let B=await M.runPromise(s.Service.use((Q)=>Q.get())),J=new Set(B.disabled_providers??[]),X=B.enabled_providers?new Set(B.enabled_providers):void 0,H=await V.get().then((Q)=>{let _={};for(let[F,C]of Object.entries(Q))if((X?X.has(F):!0)&&!J.has(F))_[F]=C;return _}),Z=await M.runPromise(O.gen(function*(){return yield*(yield*a.Service).list()})),j=i,q=G1({hooks:Z,existingProviders:H,disabled:J,enabled:X,providerNames:Object.fromEntries(Object.entries(B.provider??{}).map(([Q,_])=>[Q,_.name]))}),S=[...r(d(H),j,(Q)=>({openai:"ChatGPT Plus/Pro or API key"})[Q.id]),...q.map((Q)=>({label:Q.name,value:Q.id,hint:"plugin"}))],G=await W1(),e=G?[G.id,...G.aliases??[]]:[],K;if(G&&$.provider&&e.includes($.provider)){await G.run();return}else if($.provider){let Q=$.provider,_=S.find((N)=>N.value===Q),F=S.find((N)=>N.label.toLowerCase()===Q.toLowerCase()),C=_??F;if(!C)W.error(`Unknown provider "${Q}"`),process.exit(1);K=C.value}else{let Q=await b({message:U("cli.providers.select"),options:[...G?.menu?[{label:G.menu.label,value:G.id,hint:G.menu.hint}]:[],{label:U("cli.providers.other"),value:"__other__"}]});if(w(Q))throw new Y.CancelledError;if(G&&Q===G.id){await G.run();return}let _=await u({message:U("cli.providers.select"),maxItems:8,options:[...S,{value:"other",label:"Other"}]});if(w(_))throw new Y.CancelledError;K=_}let E=Z.findLast((Q)=>Q.auth?.provider===K);if(E&&E.auth){if(await x({auth:E.auth},K,$.method))return}if(K==="other"){let Q=await P({message:"Enter provider id",validate:(F)=>F&&F.match(/^[0-9a-z-]+$/)?void 0:"a-z, 0-9 and hyphens only"});if(w(Q))throw new Y.CancelledError;K=Q.replace(/^@ai-sdk\//,"");let _=Z.findLast((F)=>F.auth?.provider===K);if(_&&_.auth){if(await x({auth:_.auth},K,$.method))return}W.warn(`This only stores a credential for ${K} - you will need configure it in qitqode.json, check the docs for examples.`)}if(K==="amazon-bedrock")W.info(`Amazon Bedrock authentication priority:
|
|
3
3
|
1. Bearer token (AWS_BEARER_TOKEN_BEDROCK or /connect)
|
|
4
4
|
2. AWS credential chain (profile, access keys, IAM roles, EKS IRSA)
|
|
5
5
|
|
|
6
6
|
Configure via qitqode.json options (profile, region, endpoint) or
|
|
7
|
-
AWS environment variables (AWS_PROFILE, AWS_REGION, AWS_ACCESS_KEY_ID, AWS_WEB_IDENTITY_TOKEN_FILE).`);if(K==="opencode")W.info("Create an api key at https://opencode.ai/auth");if(K==="vercel")W.info("You can create an api key at https://vercel.link/ai-gateway-token");if(["cloudflare","cloudflare-ai-gateway"].includes(K))W.info("Cloudflare AI Gateway can be configured with CLOUDFLARE_GATEWAY_ID, CLOUDFLARE_ACCOUNT_ID, and CLOUDFLARE_API_TOKEN environment variables. Read more: https://opencode.ai/docs/providers/#cloudflare-ai-gateway");let $1=await t();await D(K,{type:"api",key:$1}),T("Done")}})}}),F1=z({command:"logout",describe:"log out from a configured provider",async handler($){Y.empty();let B=await M.runPromise(O.gen(function*(){let Z=yield*R.Service;return Object.entries(yield*Z.all())}));if(L("Remove credential"),B.length===0){W.error("No credentials found");return}let J=await V.get(),X=await b({message:"Select provider",options:B.map(([Z,j])=>({label:(J[Z]?.name||Z)+Y.Style.TEXT_DIM+" ("+j.type+")",value:Z}))});if(w(X))throw new Y.CancelledError;let H=X;await M.runPromise(O.gen(function*(){yield*(yield*R.Service).remove(H)})),T("Logout successful")}}),K1=z({command:"whoami",describe:"show current logged-in user info",async handler($){Y.empty(),L("Current auth"),W.info("Run `
|
|
7
|
+
AWS environment variables (AWS_PROFILE, AWS_REGION, AWS_ACCESS_KEY_ID, AWS_WEB_IDENTITY_TOKEN_FILE).`);if(K==="opencode")W.info("Create an api key at https://opencode.ai/auth");if(K==="vercel")W.info("You can create an api key at https://vercel.link/ai-gateway-token");if(["cloudflare","cloudflare-ai-gateway"].includes(K))W.info("Cloudflare AI Gateway can be configured with CLOUDFLARE_GATEWAY_ID, CLOUDFLARE_ACCOUNT_ID, and CLOUDFLARE_API_TOKEN environment variables. Read more: https://opencode.ai/docs/providers/#cloudflare-ai-gateway");let $1=await t();await D(K,{type:"api",key:$1}),T("Done")}})}}),F1=z({command:"logout",describe:"log out from a configured provider",async handler($){Y.empty();let B=await M.runPromise(O.gen(function*(){let Z=yield*R.Service;return Object.entries(yield*Z.all())}));if(L("Remove credential"),B.length===0){W.error("No credentials found");return}let J=await V.get(),X=await b({message:"Select provider",options:B.map(([Z,j])=>({label:(J[Z]?.name||Z)+Y.Style.TEXT_DIM+" ("+j.type+")",value:Z}))});if(w(X))throw new Y.CancelledError;let H=X;await M.runPromise(O.gen(function*(){yield*(yield*R.Service).remove(H)})),T("Logout successful")}}),K1=z({command:"whoami",describe:"show current logged-in user info",async handler($){Y.empty(),L("Current auth"),W.info("Run `qitqode auth list` to see all authenticated providers."),T("")}});export{G1 as resolvePluginProviders,K1 as ProvidersWhoamiCommand,F1 as ProvidersLogoutCommand,_1 as ProvidersLoginCommand,Y1 as ProvidersListCommand,l1 as ProvidersCommand};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import{ls as a,ms as b,ns as c}from"./chunk-kb6v5hhm.js";import"./chunk-qyjt0qnq.js";import"./chunk-xdjwapwy.js";import"./chunk-cxtxvt43.js";import"./chunk-871f8x99.js";import"./chunk-cx7p4ezk.js";import"./chunk-v0yxkq99.js";import"./chunk-2pzvcpv4.js";import"./chunk-kmtfdky8.js";import"./chunk-vc4e6xc4.js";import"./chunk-hnz570f9.js";import"./chunk-tdmn21z0.js";import"./chunk-s8mghr5a.js";import"./chunk-pqnbdygz.js";import"./chunk-ydc6ypjt.js";import"./chunk-4sazy0nq.js";export{c as makeRuntime,a as attachWith,b as attach};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{Pd as b}from"./chunk-9xvctnjr.js";import{Sf as t}from"./chunk-9s4whpg1.js";import{Xg as u}from"./chunk-
|
|
2
|
+
import{Pd as b}from"./chunk-9xvctnjr.js";import{Sf as t}from"./chunk-9s4whpg1.js";import{Xg as u}from"./chunk-sv1s1qxd.js";import"./chunk-n7d9eemn.js";import"./chunk-pxx2hz0g.js";import"./chunk-rexdr63q.js";import"./chunk-kqhh2pm9.js";import"./chunk-7fawtcnn.js";import"./chunk-mdzzcrf9.js";import"./chunk-wev34grp.js";import{gl as y,nk as m}from"./chunk-rtdym35y.js";import{El as v}from"./chunk-5myxjxae.js";import{am as a}from"./chunk-sp8ek94w.js";import"./chunk-gnt982jr.js";import"./chunk-1bx2sjn6.js";import"./chunk-17pxm5d3.js";import"./chunk-n38h109k.js";import"./chunk-25bp7pcm.js";import"./chunk-qdcf1ay5.js";import"./chunk-45mjcxqk.js";import"./chunk-qqne79vp.js";import"./chunk-64s7vfj7.js";import"./chunk-xjhezxft.js";import"./chunk-gwfx7tx7.js";import"./chunk-1wpjmwnh.js";import"./chunk-cqtkxwd8.js";import"./chunk-ymtcm4xd.js";import"./chunk-yykjvt7f.js";import"./chunk-3mepk08v.js";import"./chunk-atpzz901.js";import"./chunk-0g25z230.js";import"./chunk-w9pdvcf9.js";import"./chunk-4gs87ghj.js";import"./chunk-kb6v5hhm.js";import"./chunk-qyjt0qnq.js";import"./chunk-xdjwapwy.js";import"./chunk-cxtxvt43.js";import"./chunk-871f8x99.js";import"./chunk-cx7p4ezk.js";import"./chunk-tgd5ctnt.js";import"./chunk-p8kpqyxb.js";import"./chunk-3sz6gw10.js";import"./chunk-twhavv1m.js";import"./chunk-v0yxkq99.js";import"./chunk-2pzvcpv4.js";import"./chunk-kmtfdky8.js";import"./chunk-vc4e6xc4.js";import"./chunk-hnz570f9.js";import"./chunk-tdmn21z0.js";import"./chunk-s8mghr5a.js";import"./chunk-pqnbdygz.js";import{UI as s}from"./chunk-ydc6ypjt.js";import"./chunk-ev3a2sxv.js";import"./chunk-pnq1h5az.js";import"./chunk-4sazy0nq.js";import{EOL as f}from"os";var M=b({command:"models [provider]",describe:"list all available models",builder:(r)=>{return r.positional("provider",{describe:"provider ID to filter models by",type:"string",array:!1}).option("verbose",{describe:"use more verbose model output (includes metadata like costs)",type:"boolean"}).option("refresh",{describe:"refresh the models cache from models.dev",type:"boolean"})},handler:async(r)=>{if(r.refresh)await v.refresh(!0),t.println(t.Style.TEXT_SUCCESS_BOLD+"Models cache refreshed"+t.Style.TEXT_NORMAL);await a.provide({directory:process.cwd(),async fn(){await u.runPromise(s.gen(function*(){let n=yield*(yield*y.Service).list(),l=(e,o)=>{let i=n[e],d=Object.entries(i.models).sort(([c],[p])=>c.localeCompare(p));for(let[c,p]of d)if(process.stdout.write(`${e}/${c}`),process.stdout.write(f),o)process.stdout.write(JSON.stringify(p,null,2)),process.stdout.write(f)};if(r.provider){let e=m.make(r.provider);if(!n[e]){yield*s.sync(()=>t.error(`Provider not found: ${r.provider}`));return}yield*s.sync(()=>l(e,r.verbose));return}let h=Object.keys(n).sort((e,o)=>{let i=e.startsWith("opencode"),d=o.startsWith("opencode");if(i&&!d)return-1;if(!i&&d)return 1;return e.localeCompare(o)});yield*s.sync(()=>{for(let e of h)l(m.make(e),r.verbose)})}))}})}});export{M as ModelsCommand};
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{a as ZB,b as $B}from"./chunk-
|
|
3
|
-
`+B}async function d(B){let V=a({baseUrl:B.url,fetch:B.fetch,directory:B.directory}),X=[{permission:"question",action:"deny",pattern:"*"},{permission:"plan_enter",action:"deny",pattern:"*"},{permission:"plan_exit",action:"deny",pattern:"*"}],Y=(await V.session.create({permission:X})).data?.id;if(!Y){H.error("headless: failed to create session");return}let W=await V.event.subscribe(),$=YB({sessionID:Y,query:async()=>{return(await V.session.status()).data?.[Y]}}),A=W.stream[Symbol.asyncIterator](),P=$.completion.then(()=>"DONE");(async()=>{try{while(!0){let z=await Promise.race([A.next(),P]);if(z==="DONE")break;let y=z;if(y.done)break;let j=y.value;$.onEvent(j);let K=j.properties;if(j.type==="message.part.updated"){let J=K?.part;if(!J||J.sessionID!==Y)continue;if(J.type==="text"&&J.time?.end){let C=String(J.text??"").trim();if(C)process.stdout.write(C+M)}}if(j.type==="permission.asked"){if(!K||K.sessionID!==Y)continue;await V.permission.reply({requestID:String(K.id),reply:"once"})}if(j.type==="session.error"){if(!K||K.sessionID!==Y||!K.error)continue;let J=K.error,C=J?.data!==null&&typeof J?.data==="object"&&"message"in J.data?String(J.data.message):String(J?.name??J);H.error(C)}}}finally{$.stop(),await A.return?.(void 0).catch(()=>{})}})().catch((z)=>{console.error(z),process.exit(1)});let q=B.model?e.parseModel(B.model):void 0;await V.session.prompt({sessionID:Y,agent:B.agent,model:q,parts:[{type:"text",text:B.prompt}]}),$.markStarted(),await $.completion}var nB=BB({command:"$0 [project]",describe:"start qitqode tui",builder:(B)=>g(B).positional("project",{type:"string",describe:"path to start qitqode in"}).options(n).option("never-ask",{type:"boolean",describe:"start in never-ask mode \u2014 auto-decide without asking (permissions excluded), toggle at runtime with /never-ask",default:!1}).check((V)=>{if(V.dark&&V.light)throw Error("--dark and --light are mutually exclusive");if(V.sso&&!V.headless)throw Error("--sso requires --headless");if(V.sso&&V["api-key"]!==void 0)throw Error("--sso and --api-key are mutually exclusive");let X=Object.keys(zB).filter((Z)=>V[Z]);if(X.length>1)throw Error(`${X.map((Z)=>`--${Z}`).join(" and ")} are mutually exclusive \u2014 choose one tier flag`);if(X.length===1&&V.model)throw Error(`--${X[0]} and --model are mutually exclusive \u2014 use one or the other`);return!0}),handler:async(B)=>{if(B.monochrome)process.env.QITQODE_TUI_ACCESSIBLE="1",process.env.NO_COLOR="1";let V=VB();try{JB();let X=XB(B);if(X){H.error(X),process.exitCode=1;return}let Z=jB(B)??B.model,Y=_(process.env.PWD??process.cwd()),W=B.project?_(E.isAbsolute(B.project)?B.project:E.join(Y,B.project)):_(process.cwd()),$=O(W);if($){if(B.project){H.error("Cannot start in "+W+": "+$),process.exitCode=1;return}let J=_(MB.homedir());if(O(J)){H.error("Cannot start in "+W+": "+$),process.exitCode=1;return}x.warn("unsafe start directory, falling back to home",{requested:W,home:J}),W=J}let A=await bB();try{process.chdir(W)}catch{H.error("Failed to change directory to "+W);return}let P=_(process.cwd()),k=p({[u]:"worker",[c]:l()}),q=new Worker(A,{env:k});q.onerror=(J)=>{x.error("thread error",{message:J.message,filename:J.filename,lineno:J.lineno,colno:J.colno,error:J.error})};let z=i(q),y=()=>{z.call("reload",void 0).catch((J)=>{x.warn("worker reload failed",{error:N(J)})})};process.on("SIGUSR2",y);let j=!1,K=async()=>{if(j)return;j=!0,process.off("SIGUSR2",y),await o(z.call("shutdown",void 0),5000).catch((J)=>{x.warn("worker shutdown failed",{error:N(J)})}),q.terminate()};try{let J=import("./chunk-
|
|
4
|
-
|
|
5
|
-
|
|
2
|
+
import{a as ZB,b as $B}from"./chunk-909fp6pm.js";import"./chunk-pnpre7ys.js";import"./chunk-wm77svwm.js";import{B as XB}from"./chunk-gsez13bg.js";import{C as JB,E as VB}from"./chunk-c8k32724.js";import"./chunk-z0tfsdb9.js";import{M as YB}from"./chunk-vftqwdpg.js";import"./chunk-7jhrxzjx.js";import"./chunk-jcjaw7tk.js";import{Pd as BB}from"./chunk-9xvctnjr.js";import{Lf as g,Mf as D,Nf as w,Of as n}from"./chunk-z7vv0ngm.js";import{Sf as H}from"./chunk-9s4whpg1.js";import{sg as r}from"./chunk-qq2rcxv2.js";import{Xg as U}from"./chunk-sv1s1qxd.js";import"./chunk-n7d9eemn.js";import"./chunk-pxx2hz0g.js";import"./chunk-rexdr63q.js";import"./chunk-kqhh2pm9.js";import"./chunk-7fawtcnn.js";import"./chunk-mdzzcrf9.js";import"./chunk-wev34grp.js";import{Mj as R,dk as o,gl as e}from"./chunk-rtdym35y.js";import"./chunk-5myxjxae.js";import{$l as O}from"./chunk-sp8ek94w.js";import"./chunk-gnt982jr.js";import"./chunk-1bx2sjn6.js";import"./chunk-17pxm5d3.js";import"./chunk-n38h109k.js";import"./chunk-25bp7pcm.js";import"./chunk-qdcf1ay5.js";import"./chunk-45mjcxqk.js";import"./chunk-qqne79vp.js";import"./chunk-64s7vfj7.js";import{Op as a,Up as t,hq as s}from"./chunk-xjhezxft.js";import"./chunk-gwfx7tx7.js";import"./chunk-1wpjmwnh.js";import"./chunk-cqtkxwd8.js";import"./chunk-ymtcm4xd.js";import"./chunk-yykjvt7f.js";import"./chunk-3mepk08v.js";import"./chunk-atpzz901.js";import"./chunk-0g25z230.js";import"./chunk-w9pdvcf9.js";import"./chunk-4gs87ghj.js";import"./chunk-kb6v5hhm.js";import"./chunk-qyjt0qnq.js";import"./chunk-xdjwapwy.js";import{st as i}from"./chunk-cxtxvt43.js";import"./chunk-871f8x99.js";import"./chunk-cx7p4ezk.js";import"./chunk-tgd5ctnt.js";import"./chunk-p8kpqyxb.js";import"./chunk-3sz6gw10.js";import{Pt as f}from"./chunk-twhavv1m.js";import{lu as c,mu as u,nu as l,pu as p}from"./chunk-v0yxkq99.js";import{tu as N}from"./chunk-2pzvcpv4.js";import{Eu as x}from"./chunk-kmtfdky8.js";import{Su as v,Uu as _}from"./chunk-vc4e6xc4.js";import"./chunk-hnz570f9.js";import"./chunk-tdmn21z0.js";import"./chunk-s8mghr5a.js";import"./chunk-pqnbdygz.js";import{UI as S}from"./chunk-ydc6ypjt.js";import"./chunk-ev3a2sxv.js";import"./chunk-pnq1h5az.js";import{kQ as I}from"./chunk-4sazy0nq.js";import E from"path";import{fileURLToPath as HB}from"url";import{writeHeapSnapshot as KB}from"v8";import MB,{EOL as M}from"os";var zB={free:"free",default:"default",fast:"fast",economy:"economical",power:"power",orchestrated:"orchestrated"},T="build";function h(B){if(B.agent)return B.agent;if(B.headless||B.fullauto)return T;return}function jB(B){for(let[V,X]of Object.entries(zB))if(B[V]){let Z=f[X];if(Z)return`${Z.providerID}/${Z.modelID}`}return}function GB(B){return async(X,Z)=>{let Y=new Request(X,Z),W=Y.body?await Y.text():void 0,$=await B.call("fetch",{url:Y.url,method:Y.method,headers:Object.fromEntries(Y.headers.entries()),body:W});return new Response($.body,{status:$.status,headers:$.headers})}}function QB(B){return{subscribe:async(V)=>{return B.on("global.event",(X)=>{V(X)})}}}async function bB(){if(typeof globalThis.QITQODE_WORKER_PATH<"u")return globalThis.QITQODE_WORKER_PATH;let B=new URL("./cli/cmd/tui/worker.js",import.meta.url);if(await v(HB(B)))return B;return new URL("./worker.ts",import.meta.url)}async function PB(B){let V=process.stdin.isTTY?void 0:await Bun.stdin.text();if(!B)return V;if(!V)return B;return V+`
|
|
3
|
+
`+B}async function d(B){let V=a({baseUrl:B.url,fetch:B.fetch,directory:B.directory}),X=[{permission:"question",action:"deny",pattern:"*"},{permission:"plan_enter",action:"deny",pattern:"*"},{permission:"plan_exit",action:"deny",pattern:"*"}],Y=(await V.session.create({permission:X})).data?.id;if(!Y){H.error("headless: failed to create session");return}let W=await V.event.subscribe(),$=YB({sessionID:Y,query:async()=>{return(await V.session.status()).data?.[Y]}}),A=W.stream[Symbol.asyncIterator](),P=$.completion.then(()=>"DONE");(async()=>{try{while(!0){let z=await Promise.race([A.next(),P]);if(z==="DONE")break;let y=z;if(y.done)break;let j=y.value;$.onEvent(j);let K=j.properties;if(j.type==="message.part.updated"){let J=K?.part;if(!J||J.sessionID!==Y)continue;if(J.type==="text"&&J.time?.end){let C=String(J.text??"").trim();if(C)process.stdout.write(C+M)}}if(j.type==="permission.asked"){if(!K||K.sessionID!==Y)continue;await V.permission.reply({requestID:String(K.id),reply:"once"})}if(j.type==="session.error"){if(!K||K.sessionID!==Y||!K.error)continue;let J=K.error,C=J?.data!==null&&typeof J?.data==="object"&&"message"in J.data?String(J.data.message):String(J?.name??J);H.error(C)}}}finally{$.stop(),await A.return?.(void 0).catch(()=>{})}})().catch((z)=>{console.error(z),process.exit(1)});let q=B.model?e.parseModel(B.model):void 0;await V.session.prompt({sessionID:Y,agent:B.agent,model:q,parts:[{type:"text",text:B.prompt}]}),$.markStarted(),await $.completion}var nB=BB({command:"$0 [project]",describe:"start qitqode tui",builder:(B)=>g(B).positional("project",{type:"string",describe:"path to start qitqode in"}).options(n).option("never-ask",{type:"boolean",describe:"start in never-ask mode \u2014 auto-decide without asking (permissions excluded), toggle at runtime with /never-ask",default:!1}).check((V)=>{if(V.dark&&V.light)throw Error("--dark and --light are mutually exclusive");if(V.sso&&!V.headless)throw Error("--sso requires --headless");if(V.sso&&V["api-key"]!==void 0)throw Error("--sso and --api-key are mutually exclusive");let X=Object.keys(zB).filter((Z)=>V[Z]);if(X.length>1)throw Error(`${X.map((Z)=>`--${Z}`).join(" and ")} are mutually exclusive \u2014 choose one tier flag`);if(X.length===1&&V.model)throw Error(`--${X[0]} and --model are mutually exclusive \u2014 use one or the other`);return!0}),handler:async(B)=>{if(B.monochrome)process.env.QITQODE_TUI_ACCESSIBLE="1",process.env.NO_COLOR="1";let V=VB();try{JB();let X=XB(B);if(X){H.error(X),process.exitCode=1;return}let Z=jB(B)??B.model,Y=_(process.env.PWD??process.cwd()),W=B.project?_(E.isAbsolute(B.project)?B.project:E.join(Y,B.project)):_(process.cwd()),$=O(W);if($){if(B.project){H.error("Cannot start in "+W+": "+$),process.exitCode=1;return}let J=_(MB.homedir());if(O(J)){H.error("Cannot start in "+W+": "+$),process.exitCode=1;return}x.warn("unsafe start directory, falling back to home",{requested:W,home:J}),W=J}let A=await bB();try{process.chdir(W)}catch{H.error("Failed to change directory to "+W);return}let P=_(process.cwd()),k=p({[u]:"worker",[c]:l()}),q=new Worker(A,{env:k});q.onerror=(J)=>{x.error("thread error",{message:J.message,filename:J.filename,lineno:J.lineno,colno:J.colno,error:J.error})};let z=i(q),y=()=>{z.call("reload",void 0).catch((J)=>{x.warn("worker reload failed",{error:N(J)})})};process.on("SIGUSR2",y);let j=!1,K=async()=>{if(j)return;j=!0,process.off("SIGUSR2",y),await o(z.call("shutdown",void 0),5000).catch((J)=>{x.warn("worker shutdown failed",{error:N(J)})}),q.terminate()};try{let J=import("./chunk-js6hqmq7.js"),C=import("./chunk-k70x182t.js").then(({TuiConfig:F})=>F.get()),L=await PB(B.prompt),WB=await C;if(B.headless&&D(w(B))){H.error("--headless cannot be combined with network-listener flags (--port, --hostname, --mdns)"),process.exitCode=1;return}let m=w(B),b=D(m)?{url:(await z.call("server",m)).url,fetch:void 0,events:void 0}:{url:"http://qitqode.internal",fetch:GB(z),events:QB(z)};if(setTimeout(()=>{z.call("checkUpgrade",{directory:P}).catch(()=>{})},1000).unref?.(),B.headless){if(!L){H.error("--headless requires a prompt: pass --prompt or pipe input via stdin"),process.exitCode=1;return}if(B.sso){try{let G=await r({tryOpen:!1,onCode:(Q)=>{if(process.stdout.write(M),process.stdout.write(" To sign in, open: "+Q.verificationUri+M),process.stdout.write(" and enter code: "+Q.userCode+M),Q.verificationUriComplete)process.stdout.write(M+" Or open this link directly:"+M+" "+Q.verificationUriComplete+M);process.stdout.write(M+" Waiting for approval... (ctrl+c to cancel)"+M)}});await U.runPromise(S.gen(function*(){yield*(yield*R.Service).set("forgewise",s(G,{rotateRefreshToken:!0}))})),process.stdout.write(" Signed in as "+(G.name||G.email)+M)}catch(G){H.error("SSO sign-in failed: "+N(G)),process.exitCode=1;return}await d({url:b.url,fetch:b.fetch,prompt:L,model:Z,agent:h(B)??T,directory:P});return}let F=ZB(typeof B["api-key"]==="string"?String(B["api-key"]):"");if(F)await U.runPromise($B(F));else if(!await U.runPromise(S.gen(function*(){if(yield*S.promise(()=>t()))return!0;return!!(yield*(yield*R.Service).get("forgewise"))}))){H.error(`Not signed in. Use one of:
|
|
4
|
+
qitqode auth login (browser / device-code flow)
|
|
5
|
+
qitqode auth login --api-key (paste a Qortex API key)
|
|
6
6
|
--api-key <key> (inline for this run)
|
|
7
7
|
$QLEX_API_KEY (environment variable)
|
|
8
8
|
$QITQODE_KEY (environment variable)`),process.exitCode=1;return}await d({url:b.url,fetch:b.fetch,prompt:L,model:Z,agent:h(B)??T,directory:P})}else{let{tui:F}=await J;await F({url:b.url,async onSnapshot(){let G=KB("tui.heapsnapshot"),Q=await z.call("snapshot",void 0);return[G,Q]},config:WB,directory:P,fetch:b.fetch,events:b.events,args:{continue:B.continue,sessionID:B.session,agent:h(B),model:Z,prompt:L,fork:B.fork,neverAsk:B["never-ask"]||B.fullauto||!1,fullauto:B.fullauto||!1,themeMode:B.dark?"dark":B.light?"light":void 0,monochrome:B.monochrome||!1,headless:!1}})}}finally{await K()}}finally{V?.()}process.exit(0)}});export{h as resolveStartupAgent,nB as TuiThreadCommand};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{gm as f,hm as Gj,im as Rj,jm as Hj,mm as s}from"./chunk-yjp0btmq.js";import{vp as xj}from"./chunk-25bp7pcm.js";import{Bp as vj}from"./chunk-45mjcxqk.js";import{Fs as P,Gs as wj,Ms as k,Ns as Kj}from"./chunk-xdjwapwy.js";import{Rt as a,St as y}from"./chunk-qp9y0g73.js";import{Bu as I,Ku as h}from"./chunk-j21dnncc.js";import{Vu as i,Wu as Ij,Xu as Jj,_u as Nj}from"./chunk-vc4e6xc4.js";import{$u as j}from"./chunk-hnz570f9.js";import{HP as C,LL as l,MG as d,UI as Q,nD as Wj,rG as o}from"./chunk-ydc6ypjt.js";import{gQ as Mj,iQ as Oj,kQ as Ej}from"./chunk-4sazy0nq.js";var tj={};Oj(tj,{stopRefresh:()=>aj,startRefresh:()=>sj,refresh:()=>jj,readModelCatalogResponse:()=>Pj,get:()=>fj,Provider:()=>cj,Model:()=>pj,MODEL_CATALOG_MAX_BYTES:()=>Aj,Data:()=>S});import hj from"path";var U={};Oj(U,{layer:()=>Bj,isPreview:()=>ij,isNewerVersion:()=>qj,isLocal:()=>mj,getReleaseType:()=>yj,defaultLayer:()=>uj,UpgradeFailedError:()=>x,USER_AGENT:()=>Sj,Service:()=>E,Installation:()=>U,Info:()=>Uj,Event:()=>Cj});var _j=(J)=>J.pipe(k.retryTransient({retryOn:"errors-and-responses",times:2,schedule:d.exponential(200).pipe(d.jittered)}));import Yj from"path";var z=Mj(xj(),1);import n from"crypto";import v from"fs";import Zj from"path";class H extends Error{constructor(J){super(J);this.name="SelfUpdateError"}}function $j(J){let V=J?.platform??process.platform,_=J?.arch??process.arch,$=J?.libc??"bionic",W=["qitqode",V==="win32"?"windows":V,_];if(_==="x64")W.push("baseline");if(V==="linux"&&$==="musl")W.push("musl");return`@qitqode/${W.join("-")}`}function kj(J,V){if(V.integrity){let _=V.integrity.match(/^(sha512|sha384|sha256)-([A-Za-z0-9+/=]+)$/);if(!_)throw new H(`registry returned an unrecognized integrity string: ${V.integrity}`);if(n.createHash(_[1]).update(J).digest("base64")!==_[2])throw new H(`checksum mismatch: downloaded tarball does not match the registry ${_[1]} integrity value; refusing to install`);return}if(V.shasum){if(n.createHash("sha1").update(J).digest("hex")!==V.shasum.toLowerCase())throw new H("checksum mismatch: downloaded tarball does not match the registry shasum; refusing to install");return}throw new H("registry provided no integrity metadata for the tarball; refusing to install")}function Qj(J,V){let _=(w,R)=>{let G=w,q=w+R;while(G<q&&J[G]!==0)G++;return new TextDecoder().decode(J.subarray(w,G))},$=0,W;while($+512<=J.length){if(J.subarray($,$+512).every((Z)=>Z===0))break;let R=_($+124,12).trim(),G=R?parseInt(R,8):0;if(!Number.isFinite(G)||G<0)throw new H("downloaded tarball is corrupt (bad tar header)");let q=String.fromCharCode(J[$+156]),B=_($,100),N=_($+345,155);if(N)B=`${N}/${B}`;if(W)B=W,W=void 0;let b=$+512,X=b+G;if(q==="L")W=new TextDecoder().decode(J.subarray(b,X)).replace(/\0+$/,"");else if((q==="0"||q==="\x00"||q==="")&&B===V)return J.slice(b,X);$=b+Math.ceil(G/512)*512}return}var A=(J)=>String(J instanceof Error?J.message:J),u=(J)=>Q.fail(new H(J)),p=(J,V)=>Q.try({try:J,catch:(_)=>new H(V(_))}),Xj=Q.fnUntraced(function*(J){let{target:V,execPath:_,packageName:$,registry:W}=J,w=J.gunzip??((K)=>Bun.gunzipSync(K)),R=Zj.dirname(_);yield*p(()=>v.accessSync(R,v.constants.W_OK),()=>`no write permission for ${R}; cannot replace ${_}. Fix the directory permissions or re-run with sufficient privileges.`);let G=`${W}/${$}/${encodeURIComponent(V)}`,B=(yield*J.fetchJson(G).pipe(Q.mapError((K)=>new H(`download failed: could not fetch ${$}@${V} from ${W} (${A(K)}). Check your network connection and that version ${V} exists.`))))?.dist;if(!B?.tarball)return yield*u(`registry response for ${$}@${V} has no tarball URL; cannot self-update`);let N=B.tarball,b=yield*J.fetchBytes(N).pipe(Q.mapError((K)=>new H(`download failed: could not download ${N} (${A(K)}). Check your network connection and try again.`)));yield*Q.try({try:()=>kj(b,B),catch:(K)=>K instanceof H?K:new H(A(K))});let X=yield*Q.try({try:()=>w(b),catch:()=>new H("downloaded tarball is corrupt (gunzip failed); try again")}),Z=Qj(X,"package/bin/qitqode")??Qj(X,"package/bin/qitqode.exe");if(!Z||Z.length===0)return yield*u(`tarball for ${$}@${V} does not contain the expected binary at bin/qitqode`);let O=Zj.join(R,`.qitqode-upgrade-${process.pid}`),Y=`${_}.backup-${process.pid}`,D=(K)=>{try{v.rmSync(K,{force:!0})}catch{}};yield*p(()=>v.writeFileSync(O,Z,{mode:493}),(K)=>{return D(O),`no write permission: could not write ${O} (${A(K)})`});let L=yield*J.runVersion(O).pipe(Q.mapError((K)=>{return D(O),new H(`downloaded binary failed its --version check (${A(K)}); keeping the current installation`)}));if(L.code!==0)return D(O),yield*u(`downloaded binary failed its --version check (exit ${L.code}); keeping the current installation`);let m=L.stdout.trim();if(m&&!m.includes(V))return D(O),yield*u(`downloaded binary reports version "${m}" instead of ${V}; keeping the current installation`);yield*p(()=>v.renameSync(_,Y),(K)=>{return D(O),`could not move the current binary aside (${A(K)}); check permissions on ${_}`}),yield*Q.try({try:()=>v.renameSync(O,_),catch:(K)=>{try{v.renameSync(Y,_)}catch{return new H(`failed to install the new binary AND failed to restore the old one; your previous binary is preserved at ${Y} \u2014 move it back to ${_} manually`)}return D(O),new H(`could not install the new binary (${A(K)}); the previous version was restored`)}}),D(Y)});var c=h.create({service:"installation"}),M="@qitqode/cli";function qj(J,V){if(!z.default.valid(J)||!z.default.valid(V))return!1;return z.default.gt(V,J)}var Cj={Updated:s.define("installation.updated",j.object({version:j.string()})),UpdateAvailable:s.define("installation.update-available",j.object({version:j.string()}))};function yj(J,V){if(!qj(J,V))throw Error(`Version ${V} is not newer than ${J}`);let _=z.default.major(J),$=z.default.minor(J),W=z.default.major(V),w=z.default.minor(V);if(W>_)return"major";if(w>$)return"minor";return"patch"}var Uj=j.object({version:j.string(),latest:j.string()}).meta({ref:"InstallationInfo"}),Sj=`qitqode/${y}/${a}/${I.QITQODE_CLIENT}`;function ij(){return y!=="latest"}function mj(){return y==="local"}class x extends C.TaggedErrorClass()("UpgradeFailedError",{stderr:C.String}){}var nj=C.Struct({version:C.String});class E extends Wj.Service()("@qitqode/Installation"){}var Bj=o.effect(E,Q.gen(function*(){let J=yield*k.HttpClient,V=k.filterStatusOk(_j(J)),_=yield*f.ChildProcessSpawner,$=(X,Z)=>Gj.make(X[0],X.slice(1),{cwd:Z?.cwd,env:Z?.env,extendEnv:!0}),W=Q.fnUntraced(function*(X){let Z=yield*Hj(_,X);return{code:Z.code,stdout:Z.text,stderr:Z.stderr}},Q.scoped),w=Q.fnUntraced(function*(X,Z){let O=yield*_.spawn($(X,Z)),Y=yield*l.mkString(l.decodeText(O.stdout));return yield*O.exitCode,Y},Q.scoped,Q.catch(()=>Q.succeed(""))),R=Q.fnUntraced(function*(X,Z){return yield*W($(X,Z))},Q.catch(()=>Q.succeed({code:f.ExitCode(1),stdout:"",stderr:""}))),G=Q.fn("Installation.method")(function*(){if(process.execPath.includes(Yj.join(".qitqode","bin")))return"curl";if(process.execPath.includes(Yj.join(".local","bin")))return"curl";let X=process.execPath.toLowerCase(),Z=[{name:"npm",command:()=>w(["npm","list","-g","--depth=0"])},{name:"pnpm",command:()=>w(["pnpm","list","-g","--depth=0"])},{name:"bun",command:()=>w(["bun","pm","ls","-g"])}];Z.sort((O,Y)=>{let D=X.includes(O.name),L=X.includes(Y.name);if(D&&!L)return-1;if(!D&&L)return 1;return 0});for(let O of Z)if((yield*O.command()).includes(M))return O.name;return"unknown"}),q=Q.fn("Installation.latest")(function*(X){let Z=X||(yield*G());if(Z==="curl"){let Y=(yield*w(["curl","-sI","https://github.com/qitqode/qitqode/releases/latest"])).match(/^location:.*\/tag\/v([0-9][^\s/]*)/im);if(Y)return Y[1];return yield*Q.die(Error("failed to resolve latest version from GitHub releases redirect"))}if(Z==="npm"||Z==="bun"||Z==="pnpm"){let Y=(yield*w(["npm","config","get","registry"])).trim()||"https://registry.npmjs.org",D=Y.endsWith("/")?Y.slice(0,-1):Y,L=yield*V.execute(P.get(`${D}/${encodeURIComponent(M)}/${y}`).pipe(P.acceptJson));return(yield*wj.schemaBodyJson(nj)(L)).version}return c.warn("unsupported update channel, skipping",{method:Z}),yield*Q.die(Error(`unsupported update channel: ${Z}`))},Q.orDie),B=Q.fnUntraced(function*(){let Z=(yield*w(["npm","config","get","registry"])).trim()||"https://registry.npmjs.org";return Z.endsWith("/")?Z.slice(0,-1):Z}),N=Q.fnUntraced(function*(X){let Z=yield*B();yield*Xj({target:X,execPath:process.env.QITQODE_SELF_UPDATE_TARGET_BINARY||process.execPath,packageName:$j(),registry:Z,fetchJson:(O)=>V.execute(P.get(O).pipe(P.acceptJson)).pipe(Q.flatMap((Y)=>Y.json)),fetchBytes:(O)=>V.execute(P.get(O)).pipe(Q.flatMap((Y)=>Y.arrayBuffer),Q.map((Y)=>new Uint8Array(Y))),runVersion:(O)=>R([O,"--version"]).pipe(Q.map((Y)=>({code:Y.code,stdout:Y.stdout})))}).pipe(Q.mapError((O)=>new x({stderr:O.message})))}),b=Q.fn("Installation.upgrade")(function*(X,Z){if(X==="curl"){yield*N(Z),c.info("upgraded",{method:X,target:Z});return}let Y=yield*(()=>{if(X==="npm")return R(["npm","install","-g",`${M}@${Z}`]);if(X==="pnpm")return R(["pnpm","install","-g",`${M}@${Z}`]);if(X==="bun")return R(["bun","install","-g",`${M}@${Z}`]);return new x({stderr:`Unknown method: ${X}`})})();if(Y.code!==0){let D=Y.stderr||"";return yield*new x({stderr:D})}c.info("upgraded",{method:X,target:Z,stdout:Y.stdout,stderr:Y.stderr}),yield*w([process.execPath,"--version"])});return E.of({info:Q.fn("Installation.info")(function*(){return{version:a,latest:yield*q()}}),method:G,latest:q,upgrade:b})})),uj=Bj.pipe(o.provide(Kj.layer),o.provide(Rj));var t=j.lazy(()=>j.union([j.string(),j.number(),j.boolean(),j.null(),j.array(t),j.record(j.string(),t)])),Dj=j.object({input:j.number(),output:j.number(),cache_read:j.number().optional(),cache_write:j.number().optional(),context_over_200k:j.object({input:j.number(),output:j.number(),cache_read:j.number().optional(),cache_write:j.number().optional()}).optional()}),r=j.object({id:j.string(),name:j.string(),family:j.string().optional(),release_date:j.string(),attachment:j.boolean(),reasoning:j.boolean(),temperature:j.boolean().optional(),tool_call:j.boolean(),interleaved:j.union([j.literal(!0),j.object({field:j.enum(["reasoning_content","reasoning_details"])}).strict()]).optional(),cost:Dj.optional(),limit:j.object({context:j.number(),input:j.number().optional(),output:j.number()}),modalities:j.object({input:j.array(j.enum(["text","audio","image","video","pdf"])),output:j.array(j.enum(["text","audio","image","video","pdf"]))}).optional(),experimental:j.object({modes:j.record(j.string(),j.object({cost:Dj.optional(),provider:j.object({body:j.record(j.string(),t).optional(),headers:j.record(j.string(),j.string()).optional()}).optional()})).optional()}).optional(),status:j.enum(["alpha","beta","deprecated"]).optional(),provider:j.object({npm:j.string().optional(),api:j.string().optional()}).optional()}),e=j.object({api:j.string().optional(),name:j.string(),env:j.array(j.string()),id:j.string(),npm:j.string().optional(),models:j.record(j.string(),r)});var Vj=h.create({service:"models.dev"}),bj=Fj(),F=hj.join(Nj.Path.cache,bj==="https://models.dev"?"models.json":`models-${Ij.fast(bj)}.json`),gj=300000,Aj=8388608,T,dj=j.record(j.string(),e),pj=r,cj=e;function Fj(){return I.QITQODE_MODELS_URL||"https://models.dev"}function lj(){return Date.now()-Number(i.stat(F)?.mtimeMs??0)<gj}function Lj(J){return!J&&lj()}function g(J){let V=dj.parse(typeof J==="string"?JSON.parse(J):J);for(let[_,$]of Object.entries(V))if($.id!==_)throw Error(`Invalid model provider: ${_}`);return V}async function zj(J){let V=await i.readJson(J).catch(()=>{return});if(!V)return;try{return g(V)}catch(_){Vj.warn("Ignoring invalid model catalog cache",{file:J,error:_});return}}async function Pj(J,V,_=Aj){let $=J.headers.get("content-type")?.split(";")[0]?.trim().toLowerCase();if($!=="application/json"&&!$?.endsWith("+json"))throw Error(`Invalid model catalog content type: ${$||"missing"}`);let W=Number(J.headers.get("content-length"));if(Number.isFinite(W)&&W>_)throw Error("Model catalog response is too large");if(!J.body)return"";let w=J.body.getReader(),R=()=>void w.cancel(V.reason);V.addEventListener("abort",R,{once:!0});let G=new Uint8Array(_),q=0;try{for(;;){let B=await w.read();if(B.done)break;if(q+=B.value.byteLength,q>_)throw await w.cancel(),Error("Model catalog response is too large");G.set(B.value,q-B.value.byteLength)}}finally{V.removeEventListener("abort",R)}return new TextDecoder().decode(G.subarray(0,q))}var Tj=async()=>{let J=AbortSignal.timeout(1e4),V=await fetch(`${Fj()}/api.json`,{headers:{"User-Agent":U.USER_AGENT},signal:J});if(!V.ok)return;let _=g(await Pj(V,J));return JSON.stringify(_)},S=vj(async()=>{let J=await zj(I.QITQODE_MODELS_PATH??F);if(J)return J;let V=await import("./chunk-yacccwf6.js").then((_)=>g(_.snapshot)).catch(()=>{return});if(V)return V;if(I.QITQODE_DISABLE_MODELS_FETCH)return{};return Jj.withLock(`models-dev:${F}`,async()=>{let _=await zj(I.QITQODE_MODELS_PATH??F);if(_)return _;let $=await Tj();if($)return await i.write(F,$).catch((W)=>{Vj.error("Failed to write models cache",{error:W})}),g($);return{}})});async function fj(){return S()}async function jj(J=!1){if(Lj(J))return S.reset();await Jj.withLock(`models-dev:${F}`,async()=>{if(Lj(J))return S.reset();let V=await Tj();if(!V)return;await i.write(F,V),S.reset()}).catch((V)=>{Vj.error("Failed to fetch models.dev",{error:V})})}function sj(){if(T||I.QITQODE_DISABLE_MODELS_FETCH||process.argv.includes("--get-yargs-completions"))return;jj(),T=setInterval(async()=>{await jj()},3600000),T.unref()}function aj(){if(!T)return;clearInterval(T),T=void 0}
|
|
2
|
+
import{gm as f,hm as Gj,im as Rj,jm as Hj,mm as s}from"./chunk-gnt982jr.js";import{vp as xj}from"./chunk-25bp7pcm.js";import{Bp as vj}from"./chunk-45mjcxqk.js";import{Fs as P,Gs as wj,Ms as k,Ns as Kj}from"./chunk-xdjwapwy.js";import{Rt as a,St as y}from"./chunk-v0yxkq99.js";import{Bu as I,Ku as h}from"./chunk-kmtfdky8.js";import{Vu as i,Wu as Ij,Xu as Jj,_u as Nj}from"./chunk-vc4e6xc4.js";import{$u as j}from"./chunk-hnz570f9.js";import{HP as C,LL as l,MG as d,UI as Q,nD as Wj,rG as o}from"./chunk-ydc6ypjt.js";import{gQ as Mj,iQ as Oj,kQ as Ej}from"./chunk-4sazy0nq.js";var tj={};Oj(tj,{stopRefresh:()=>aj,startRefresh:()=>sj,refresh:()=>jj,readModelCatalogResponse:()=>Pj,get:()=>fj,Provider:()=>cj,Model:()=>pj,MODEL_CATALOG_MAX_BYTES:()=>Aj,Data:()=>S});import hj from"path";var U={};Oj(U,{layer:()=>Bj,isPreview:()=>ij,isNewerVersion:()=>qj,isLocal:()=>mj,getReleaseType:()=>yj,defaultLayer:()=>uj,UpgradeFailedError:()=>x,USER_AGENT:()=>Sj,Service:()=>E,Installation:()=>U,Info:()=>Uj,Event:()=>Cj});var _j=(J)=>J.pipe(k.retryTransient({retryOn:"errors-and-responses",times:2,schedule:d.exponential(200).pipe(d.jittered)}));import Yj from"path";var z=Mj(xj(),1);import n from"crypto";import v from"fs";import Zj from"path";class H extends Error{constructor(J){super(J);this.name="SelfUpdateError"}}function $j(J){let V=J?.platform??process.platform,_=J?.arch??process.arch,$=J?.libc??"bionic",W=["qitqode",V==="win32"?"windows":V,_];if(_==="x64")W.push("baseline");if(V==="linux"&&$==="musl")W.push("musl");return`@qitqode/${W.join("-")}`}function kj(J,V){if(V.integrity){let _=V.integrity.match(/^(sha512|sha384|sha256)-([A-Za-z0-9+/=]+)$/);if(!_)throw new H(`registry returned an unrecognized integrity string: ${V.integrity}`);if(n.createHash(_[1]).update(J).digest("base64")!==_[2])throw new H(`checksum mismatch: downloaded tarball does not match the registry ${_[1]} integrity value; refusing to install`);return}if(V.shasum){if(n.createHash("sha1").update(J).digest("hex")!==V.shasum.toLowerCase())throw new H("checksum mismatch: downloaded tarball does not match the registry shasum; refusing to install");return}throw new H("registry provided no integrity metadata for the tarball; refusing to install")}function Qj(J,V){let _=(w,R)=>{let G=w,q=w+R;while(G<q&&J[G]!==0)G++;return new TextDecoder().decode(J.subarray(w,G))},$=0,W;while($+512<=J.length){if(J.subarray($,$+512).every((Z)=>Z===0))break;let R=_($+124,12).trim(),G=R?parseInt(R,8):0;if(!Number.isFinite(G)||G<0)throw new H("downloaded tarball is corrupt (bad tar header)");let q=String.fromCharCode(J[$+156]),B=_($,100),N=_($+345,155);if(N)B=`${N}/${B}`;if(W)B=W,W=void 0;let b=$+512,X=b+G;if(q==="L")W=new TextDecoder().decode(J.subarray(b,X)).replace(/\0+$/,"");else if((q==="0"||q==="\x00"||q==="")&&B===V)return J.slice(b,X);$=b+Math.ceil(G/512)*512}return}var A=(J)=>String(J instanceof Error?J.message:J),u=(J)=>Q.fail(new H(J)),p=(J,V)=>Q.try({try:J,catch:(_)=>new H(V(_))}),Xj=Q.fnUntraced(function*(J){let{target:V,execPath:_,packageName:$,registry:W}=J,w=J.gunzip??((K)=>Bun.gunzipSync(K)),R=Zj.dirname(_);yield*p(()=>v.accessSync(R,v.constants.W_OK),()=>`no write permission for ${R}; cannot replace ${_}. Fix the directory permissions or re-run with sufficient privileges.`);let G=`${W}/${$}/${encodeURIComponent(V)}`,B=(yield*J.fetchJson(G).pipe(Q.mapError((K)=>new H(`download failed: could not fetch ${$}@${V} from ${W} (${A(K)}). Check your network connection and that version ${V} exists.`))))?.dist;if(!B?.tarball)return yield*u(`registry response for ${$}@${V} has no tarball URL; cannot self-update`);let N=B.tarball,b=yield*J.fetchBytes(N).pipe(Q.mapError((K)=>new H(`download failed: could not download ${N} (${A(K)}). Check your network connection and try again.`)));yield*Q.try({try:()=>kj(b,B),catch:(K)=>K instanceof H?K:new H(A(K))});let X=yield*Q.try({try:()=>w(b),catch:()=>new H("downloaded tarball is corrupt (gunzip failed); try again")}),Z=Qj(X,"package/bin/qitqode")??Qj(X,"package/bin/qitqode.exe");if(!Z||Z.length===0)return yield*u(`tarball for ${$}@${V} does not contain the expected binary at bin/qitqode`);let O=Zj.join(R,`.qitqode-upgrade-${process.pid}`),Y=`${_}.backup-${process.pid}`,D=(K)=>{try{v.rmSync(K,{force:!0})}catch{}};yield*p(()=>v.writeFileSync(O,Z,{mode:493}),(K)=>{return D(O),`no write permission: could not write ${O} (${A(K)})`});let L=yield*J.runVersion(O).pipe(Q.mapError((K)=>{return D(O),new H(`downloaded binary failed its --version check (${A(K)}); keeping the current installation`)}));if(L.code!==0)return D(O),yield*u(`downloaded binary failed its --version check (exit ${L.code}); keeping the current installation`);let m=L.stdout.trim();if(m&&!m.includes(V))return D(O),yield*u(`downloaded binary reports version "${m}" instead of ${V}; keeping the current installation`);yield*p(()=>v.renameSync(_,Y),(K)=>{return D(O),`could not move the current binary aside (${A(K)}); check permissions on ${_}`}),yield*Q.try({try:()=>v.renameSync(O,_),catch:(K)=>{try{v.renameSync(Y,_)}catch{return new H(`failed to install the new binary AND failed to restore the old one; your previous binary is preserved at ${Y} \u2014 move it back to ${_} manually`)}return D(O),new H(`could not install the new binary (${A(K)}); the previous version was restored`)}}),D(Y)});var c=h.create({service:"installation"}),M="@qitqode/cli";function qj(J,V){if(!z.default.valid(J)||!z.default.valid(V))return!1;return z.default.gt(V,J)}var Cj={Updated:s.define("installation.updated",j.object({version:j.string()})),UpdateAvailable:s.define("installation.update-available",j.object({version:j.string()}))};function yj(J,V){if(!qj(J,V))throw Error(`Version ${V} is not newer than ${J}`);let _=z.default.major(J),$=z.default.minor(J),W=z.default.major(V),w=z.default.minor(V);if(W>_)return"major";if(w>$)return"minor";return"patch"}var Uj=j.object({version:j.string(),latest:j.string()}).meta({ref:"InstallationInfo"}),Sj=`qitqode/${y}/${a}/${I.QITQODE_CLIENT}`;function ij(){return y!=="latest"}function mj(){return y==="local"}class x extends C.TaggedErrorClass()("UpgradeFailedError",{stderr:C.String}){}var nj=C.Struct({version:C.String});class E extends Wj.Service()("@qitqode/Installation"){}var Bj=o.effect(E,Q.gen(function*(){let J=yield*k.HttpClient,V=k.filterStatusOk(_j(J)),_=yield*f.ChildProcessSpawner,$=(X,Z)=>Gj.make(X[0],X.slice(1),{cwd:Z?.cwd,env:Z?.env,extendEnv:!0}),W=Q.fnUntraced(function*(X){let Z=yield*Hj(_,X);return{code:Z.code,stdout:Z.text,stderr:Z.stderr}},Q.scoped),w=Q.fnUntraced(function*(X,Z){let O=yield*_.spawn($(X,Z)),Y=yield*l.mkString(l.decodeText(O.stdout));return yield*O.exitCode,Y},Q.scoped,Q.catch(()=>Q.succeed(""))),R=Q.fnUntraced(function*(X,Z){return yield*W($(X,Z))},Q.catch(()=>Q.succeed({code:f.ExitCode(1),stdout:"",stderr:""}))),G=Q.fn("Installation.method")(function*(){if(process.execPath.includes(Yj.join(".qitqode","bin")))return"curl";if(process.execPath.includes(Yj.join(".local","bin")))return"curl";let X=process.execPath.toLowerCase(),Z=[{name:"npm",command:()=>w(["npm","list","-g","--depth=0"])},{name:"pnpm",command:()=>w(["pnpm","list","-g","--depth=0"])},{name:"bun",command:()=>w(["bun","pm","ls","-g"])}];Z.sort((O,Y)=>{let D=X.includes(O.name),L=X.includes(Y.name);if(D&&!L)return-1;if(!D&&L)return 1;return 0});for(let O of Z)if((yield*O.command()).includes(M))return O.name;return"unknown"}),q=Q.fn("Installation.latest")(function*(X){let Z=X||(yield*G());if(Z==="curl"){let Y=(yield*w(["curl","-sI","https://github.com/qitqode/qitqode/releases/latest"])).match(/^location:.*\/tag\/v([0-9][^\s/]*)/im);if(Y)return Y[1];return yield*Q.die(Error("failed to resolve latest version from GitHub releases redirect"))}if(Z==="npm"||Z==="bun"||Z==="pnpm"){let Y=(yield*w(["npm","config","get","registry"])).trim()||"https://registry.npmjs.org",D=Y.endsWith("/")?Y.slice(0,-1):Y,L=yield*V.execute(P.get(`${D}/${encodeURIComponent(M)}/${y}`).pipe(P.acceptJson));return(yield*wj.schemaBodyJson(nj)(L)).version}return c.warn("unsupported update channel, skipping",{method:Z}),yield*Q.die(Error(`unsupported update channel: ${Z}`))},Q.orDie),B=Q.fnUntraced(function*(){let Z=(yield*w(["npm","config","get","registry"])).trim()||"https://registry.npmjs.org";return Z.endsWith("/")?Z.slice(0,-1):Z}),N=Q.fnUntraced(function*(X){let Z=yield*B();yield*Xj({target:X,execPath:process.env.QITQODE_SELF_UPDATE_TARGET_BINARY||process.execPath,packageName:$j(),registry:Z,fetchJson:(O)=>V.execute(P.get(O).pipe(P.acceptJson)).pipe(Q.flatMap((Y)=>Y.json)),fetchBytes:(O)=>V.execute(P.get(O)).pipe(Q.flatMap((Y)=>Y.arrayBuffer),Q.map((Y)=>new Uint8Array(Y))),runVersion:(O)=>R([O,"--version"]).pipe(Q.map((Y)=>({code:Y.code,stdout:Y.stdout})))}).pipe(Q.mapError((O)=>new x({stderr:O.message})))}),b=Q.fn("Installation.upgrade")(function*(X,Z){if(X==="curl"){yield*N(Z),c.info("upgraded",{method:X,target:Z});return}let Y=yield*(()=>{if(X==="npm")return R(["npm","install","-g",`${M}@${Z}`]);if(X==="pnpm")return R(["pnpm","install","-g",`${M}@${Z}`]);if(X==="bun")return R(["bun","install","-g",`${M}@${Z}`]);return new x({stderr:`Unknown method: ${X}`})})();if(Y.code!==0){let D=Y.stderr||"";return yield*new x({stderr:D})}c.info("upgraded",{method:X,target:Z,stdout:Y.stdout,stderr:Y.stderr}),yield*w([process.execPath,"--version"])});return E.of({info:Q.fn("Installation.info")(function*(){return{version:a,latest:yield*q()}}),method:G,latest:q,upgrade:b})})),uj=Bj.pipe(o.provide(Kj.layer),o.provide(Rj));var t=j.lazy(()=>j.union([j.string(),j.number(),j.boolean(),j.null(),j.array(t),j.record(j.string(),t)])),Dj=j.object({input:j.number(),output:j.number(),cache_read:j.number().optional(),cache_write:j.number().optional(),context_over_200k:j.object({input:j.number(),output:j.number(),cache_read:j.number().optional(),cache_write:j.number().optional()}).optional()}),r=j.object({id:j.string(),name:j.string(),family:j.string().optional(),release_date:j.string(),attachment:j.boolean(),reasoning:j.boolean(),temperature:j.boolean().optional(),tool_call:j.boolean(),interleaved:j.union([j.literal(!0),j.object({field:j.enum(["reasoning_content","reasoning_details"])}).strict()]).optional(),cost:Dj.optional(),limit:j.object({context:j.number(),input:j.number().optional(),output:j.number()}),modalities:j.object({input:j.array(j.enum(["text","audio","image","video","pdf"])),output:j.array(j.enum(["text","audio","image","video","pdf"]))}).optional(),experimental:j.object({modes:j.record(j.string(),j.object({cost:Dj.optional(),provider:j.object({body:j.record(j.string(),t).optional(),headers:j.record(j.string(),j.string()).optional()}).optional()})).optional()}).optional(),status:j.enum(["alpha","beta","deprecated"]).optional(),provider:j.object({npm:j.string().optional(),api:j.string().optional()}).optional()}),e=j.object({api:j.string().optional(),name:j.string(),env:j.array(j.string()),id:j.string(),npm:j.string().optional(),models:j.record(j.string(),r)});var Vj=h.create({service:"models.dev"}),bj=Fj(),F=hj.join(Nj.Path.cache,bj==="https://models.dev"?"models.json":`models-${Ij.fast(bj)}.json`),gj=300000,Aj=8388608,T,dj=j.record(j.string(),e),pj=r,cj=e;function Fj(){return I.QITQODE_MODELS_URL||"https://models.dev"}function lj(){return Date.now()-Number(i.stat(F)?.mtimeMs??0)<gj}function Lj(J){return!J&&lj()}function g(J){let V=dj.parse(typeof J==="string"?JSON.parse(J):J);for(let[_,$]of Object.entries(V))if($.id!==_)throw Error(`Invalid model provider: ${_}`);return V}async function zj(J){let V=await i.readJson(J).catch(()=>{return});if(!V)return;try{return g(V)}catch(_){Vj.warn("Ignoring invalid model catalog cache",{file:J,error:_});return}}async function Pj(J,V,_=Aj){let $=J.headers.get("content-type")?.split(";")[0]?.trim().toLowerCase();if($!=="application/json"&&!$?.endsWith("+json"))throw Error(`Invalid model catalog content type: ${$||"missing"}`);let W=Number(J.headers.get("content-length"));if(Number.isFinite(W)&&W>_)throw Error("Model catalog response is too large");if(!J.body)return"";let w=J.body.getReader(),R=()=>void w.cancel(V.reason);V.addEventListener("abort",R,{once:!0});let G=new Uint8Array(_),q=0;try{for(;;){let B=await w.read();if(B.done)break;if(q+=B.value.byteLength,q>_)throw await w.cancel(),Error("Model catalog response is too large");G.set(B.value,q-B.value.byteLength)}}finally{V.removeEventListener("abort",R)}return new TextDecoder().decode(G.subarray(0,q))}var Tj=async()=>{let J=AbortSignal.timeout(1e4),V=await fetch(`${Fj()}/api.json`,{headers:{"User-Agent":U.USER_AGENT},signal:J});if(!V.ok)return;let _=g(await Pj(V,J));return JSON.stringify(_)},S=vj(async()=>{let J=await zj(I.QITQODE_MODELS_PATH??F);if(J)return J;let V=await import("./chunk-yacccwf6.js").then((_)=>g(_.snapshot)).catch(()=>{return});if(V)return V;if(I.QITQODE_DISABLE_MODELS_FETCH)return{};return Jj.withLock(`models-dev:${F}`,async()=>{let _=await zj(I.QITQODE_MODELS_PATH??F);if(_)return _;let $=await Tj();if($)return await i.write(F,$).catch((W)=>{Vj.error("Failed to write models cache",{error:W})}),g($);return{}})});async function fj(){return S()}async function jj(J=!1){if(Lj(J))return S.reset();await Jj.withLock(`models-dev:${F}`,async()=>{if(Lj(J))return S.reset();let V=await Tj();if(!V)return;await i.write(F,V),S.reset()}).catch((V)=>{Vj.error("Failed to fetch models.dev",{error:V})})}function sj(){if(T||I.QITQODE_DISABLE_MODELS_FETCH||process.argv.includes("--get-yargs-completions"))return;jj(),T=setInterval(async()=>{await jj()},3600000),T.unref()}function aj(){if(!T)return;clearInterval(T),T=void 0}
|
|
3
3
|
export{_j as tl,U as ul,Aj as vl,pj as wl,cj as xl,Pj as yl,S as zl,fj as Al,jj as Bl,sj as Cl,aj as Dl,tj as El};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{Ql as s,Rl as t,Sl as u,Ul as v,Vl as w}from"./chunk-
|
|
2
|
+
import{Ql as s,Rl as t,Sl as u,Ul as v,Vl as w}from"./chunk-sp8ek94w.js";import"./chunk-gnt982jr.js";import{An as g,Bn as h,Cn as i,Dn as j,En as k,Gn as l,Hn as m,In as n,Kn as o,Mn as p,Tn as q,Un as r,Vm as a,vn as b,wn as c,xn as d,yn as e,zn as f}from"./chunk-1bx2sjn6.js";import"./chunk-qdcf1ay5.js";import"./chunk-45mjcxqk.js";import"./chunk-qqne79vp.js";import"./chunk-kb6v5hhm.js";import"./chunk-qyjt0qnq.js";import"./chunk-xdjwapwy.js";import"./chunk-cxtxvt43.js";import"./chunk-871f8x99.js";import"./chunk-cx7p4ezk.js";import"./chunk-p8kpqyxb.js";import"./chunk-3sz6gw10.js";import"./chunk-v0yxkq99.js";import"./chunk-2pzvcpv4.js";import"./chunk-kmtfdky8.js";import"./chunk-vc4e6xc4.js";import"./chunk-hnz570f9.js";import"./chunk-tdmn21z0.js";import"./chunk-s8mghr5a.js";import"./chunk-pqnbdygz.js";import"./chunk-ydc6ypjt.js";import"./chunk-4sazy0nq.js";export{a as sql,e as or,f as not,c as ne,j as lte,i as lt,p as like,l as isNull,m as isNotNull,k as inArray,h as gte,g as gt,n as exists,b as eq,r as desc,t as count,o as between,q as asc,d as and,w as Storage,v as NotFoundError,s as JsonMigration,u as Database};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{h as S}from"./chunk-
|
|
2
|
+
import{h as S}from"./chunk-pnpre7ys.js";import{Pd as $}from"./chunk-9xvctnjr.js";import{Sf as v}from"./chunk-9s4whpg1.js";import"./chunk-qq2rcxv2.js";import{Xg as L}from"./chunk-sv1s1qxd.js";import"./chunk-n7d9eemn.js";import"./chunk-pxx2hz0g.js";import"./chunk-rexdr63q.js";import"./chunk-kqhh2pm9.js";import"./chunk-7fawtcnn.js";import"./chunk-mdzzcrf9.js";import"./chunk-wev34grp.js";import"./chunk-rtdym35y.js";import"./chunk-5myxjxae.js";import"./chunk-sp8ek94w.js";import"./chunk-gnt982jr.js";import"./chunk-1bx2sjn6.js";import"./chunk-17pxm5d3.js";import"./chunk-n38h109k.js";import"./chunk-25bp7pcm.js";import"./chunk-qdcf1ay5.js";import"./chunk-45mjcxqk.js";import"./chunk-qqne79vp.js";import"./chunk-64s7vfj7.js";import{kq as g,lq as y,mq as B,sq as N}from"./chunk-xjhezxft.js";import"./chunk-gwfx7tx7.js";import"./chunk-1wpjmwnh.js";import"./chunk-cqtkxwd8.js";import"./chunk-ymtcm4xd.js";import"./chunk-yykjvt7f.js";import"./chunk-3mepk08v.js";import"./chunk-atpzz901.js";import"./chunk-0g25z230.js";import"./chunk-w9pdvcf9.js";import"./chunk-4gs87ghj.js";import"./chunk-kb6v5hhm.js";import"./chunk-qyjt0qnq.js";import"./chunk-xdjwapwy.js";import"./chunk-cxtxvt43.js";import"./chunk-871f8x99.js";import"./chunk-cx7p4ezk.js";import"./chunk-tgd5ctnt.js";import"./chunk-p8kpqyxb.js";import"./chunk-3sz6gw10.js";import{Qt as q}from"./chunk-twhavv1m.js";import"./chunk-v0yxkq99.js";import"./chunk-2pzvcpv4.js";import"./chunk-kmtfdky8.js";import"./chunk-vc4e6xc4.js";import"./chunk-hnz570f9.js";import"./chunk-tdmn21z0.js";import"./chunk-s8mghr5a.js";import"./chunk-pqnbdygz.js";import{UI as z}from"./chunk-ydc6ypjt.js";import"./chunk-ev3a2sxv.js";import"./chunk-pnq1h5az.js";import"./chunk-4sazy0nq.js";import j from"fs/promises";import P from"path";function F(x){return z.promise(async()=>{try{return{ok:!0,value:await x()}}catch(D){return{ok:!1,err:D}}})}function A(x){if(x instanceof g)return"Your QitQode sign-in has ended and couldn't be renewed automatically. Run `qitqode auth login` to sign in again.";if(x instanceof y)return x.message+q.copy().insufficientBalanceCliSuffix;if(x instanceof B)return x.message;return"Request failed: "+(x instanceof Error?x.message:String(x))}var w=(x)=>z.gen(function*(){if((yield*S())==="revoked")return;let D=yield*z.promise(async()=>{try{return{ok:!0,content:await j.readFile(P.resolve(x),"utf8")}}catch(V){let K=V;return{ok:!1,message:`Cannot read '${x}': ${K.message??String(K)}`}}});if(!D.ok){yield*z.sync(()=>v.println(v.Style.TEXT_DANGER+D.message+v.Style.TEXT_NORMAL));return}let O=[],T=D.content.split(`
|
|
3
3
|
`);for(let V=0;V<T.length;V++){let K=T[V];if(!K||!K.trim())continue;let G=V+1,H;try{H=JSON.parse(K)}catch{yield*z.sync(()=>v.println(v.Style.TEXT_DANGER+`Error: line ${G} is not valid JSON.`+v.Style.TEXT_NORMAL));return}if(typeof H!=="object"||H===null||Array.isArray(H)){yield*z.sync(()=>v.println(v.Style.TEXT_DANGER+`Error: line ${G} must be a JSON object (got ${H===null?"null":Array.isArray(H)?"array":typeof H}).`+v.Style.TEXT_NORMAL));return}let J=H;if(typeof J.prompt!=="string"||!J.prompt.trim()){yield*z.sync(()=>v.println(v.Style.TEXT_DANGER+`Error: line ${G} must have a non-empty string 'prompt' field.`+v.Style.TEXT_NORMAL));return}let W={prompt:J.prompt};if(typeof J.options==="object"&&J.options!==null&&!Array.isArray(J.options))W.options=J.options;O.push(W)}if(O.length===0){yield*z.sync(()=>v.println(v.Style.TEXT_WARNING+"No prompts found in the file."+v.Style.TEXT_NORMAL));return}yield*z.sync(()=>v.println(v.Style.TEXT_DIM+`Submitting ${O.length} request${O.length===1?"":"s"}\u2026`+v.Style.TEXT_NORMAL));let Q=yield*F(()=>N.resolveSubmitBatch({requests:O}));if(!Q.ok){yield*z.sync(()=>v.println(v.Style.TEXT_DANGER+A(Q.err)+v.Style.TEXT_NORMAL));return}let{batchId:X,status:Y,createdAt:Z,totalCount:_}=Q.value;process.stdout.write(X+`
|
|
4
4
|
`),yield*z.sync(()=>{if(v.println(v.Style.TEXT_SUCCESS+"Batch submitted."+v.Style.TEXT_NORMAL),v.println(" ID: "+v.Style.TEXT_HIGHLIGHT_BOLD+X+v.Style.TEXT_NORMAL),Y)v.println(" Status: "+Y);if(_!==void 0)v.println(" Requests: "+_);if(Z)v.println(" Created: "+v.Style.TEXT_DIM+new Date(Z).toLocaleString()+v.Style.TEXT_NORMAL);v.println(`
|
|
5
5
|
`+v.Style.TEXT_DIM+`Run \`qitqode batch status ${X}\` to check progress.`+v.Style.TEXT_NORMAL)})}).pipe(z.withSpan("batch.submit")),k=(x,D)=>z.gen(function*(){if((yield*S())==="revoked")return;let O=yield*F(()=>N.resolveRetrieveBatch({batchId:x}));if(!O.ok){yield*z.sync(()=>v.println(v.Style.TEXT_DANGER+A(O.err)+v.Style.TEXT_NORMAL));return}let{status:T,results:Q,completedCount:X,totalCount:Y,createdAt:Z,completedAt:_}=O.value,V=T==="completed"?v.Style.TEXT_SUCCESS:T==="failed"?v.Style.TEXT_DANGER:v.Style.TEXT_WARNING;if(yield*z.sync(()=>{v.println(" ID: "+v.Style.TEXT_HIGHLIGHT_BOLD+x+v.Style.TEXT_NORMAL),v.println(" Status: "+V+T+v.Style.TEXT_NORMAL);let K=X??Q?.length;if(Y!==void 0)v.println(" Progress: "+(K??"?")+" / "+Y);if(Z)v.println(" Created: "+v.Style.TEXT_DIM+new Date(Z).toLocaleString()+v.Style.TEXT_NORMAL);if(_)v.println(" Finished: "+v.Style.TEXT_DIM+new Date(_).toLocaleString()+v.Style.TEXT_NORMAL);if(Q&&Q.length>0){v.println(""),v.println(v.Style.TEXT_DIM+" \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500"+v.Style.TEXT_NORMAL);for(let G of Q){let H=` [${G.index+1}] `;if(G.error)v.println(H+v.Style.TEXT_DANGER+G.error+v.Style.TEXT_NORMAL);else{let J=G.content??"",W=J.length>500?J.slice(0,500)+"\u2026":J;v.println(H+W)}}}else if(T!=="completed"&&T!=="failed")v.println(`
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{Vt as c,Zt as s}from"./chunk-
|
|
2
|
+
import{Vt as c,Zt as s}from"./chunk-v0yxkq99.js";var r=["openai","anthropic"],p=["deepseek","zai","zhipuai","moonshotai","moonshotai-cn","kimi-for-coding","stepfun"],d=["opencode","openrouter"],l=["alibaba","alibaba-cn","bytedance","alibaba-coding-plan","alibaba-coding-plan-cn","zai-coding-plan","zhipuai-coding-plan","tencent-coding-plan","minimax-coding-plan","minimax-cn-coding-plan","kuae-cloud-coding-plan"],R=["opencode-go","github-copilot","google","vercel"],P=[r,p,d,l,R],g=Object.fromEntries(P.flatMap((i,a,e)=>{let n=e.slice(0,a).reduce((o,t)=>o+t.length,0);return i.map((o,t)=>[o,n+t])}));function m(i){return i in g}function O(i,a,e){return c(i,s((n)=>a[n.id]??99,(n)=>n.name??n.id),(n)=>n.map((o)=>({label:o.name,value:o.id,hint:e(o)})))}
|
|
3
3
|
export{g as J,m as K,O as L};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{At as Q}from"./chunk-cx7p4ezk.js";import{tu as K}from"./chunk-
|
|
2
|
+
import{At as Q}from"./chunk-cx7p4ezk.js";import{tu as K}from"./chunk-2pzvcpv4.js";import{gQ as F,iQ as N}from"./chunk-4sazy0nq.js";var V={};N(V,{text:()=>P,stop:()=>S,spawn:()=>M,run:()=>Z,lines:()=>T,RunFailedError:()=>Y});var L=F(Q(),1);import{buffer as I}from"stream/consumers";var A=["QITQODE_AUTH_CONTENT","QITQODE_SERVER_PASSWORD","QITQODE_KEY"];function C(B){let z={...B};for(let G of A)delete z[G];return z}function D(){return C(process.env)}class Y extends Error{cmd;code;stdout;stderr;constructor(B,z,G,H){let J=H.toString().trim();super(J?`Command failed with code ${z}: ${B.join(" ")}
|
|
3
3
|
${J}`:`Command failed with code ${z}: ${B.join(" ")}`);this.name="ProcessRunFailedError",this.cmd=[...B],this.code=z,this.stdout=G,this.stderr=H}}function M(B,z={}){if(B.length===0)throw Error("Command is required");z.abort?.throwIfAborted();let G=L.default(B[0],B.slice(1),{cwd:z.cwd,shell:z.shell,env:z.env===null?{}:{...D(),...z.env},stdio:[z.stdin??"ignore",z.stdout??"ignore",z.stderr??"ignore"],windowsHide:process.platform==="win32"}),H=!1,J,O=()=>{if(H)return;if(G.exitCode!==null||G.signalCode!==null)return;H=!0,G.kill(z.kill??"SIGTERM");let W=z.timeout??5000;if(W<=0)return;J=setTimeout(()=>G.kill("SIGKILL"),W)},U=new Promise((W,j)=>{let k=()=>{if(z.abort?.removeEventListener("abort",O),J)clearTimeout(J)};G.once("exit",(X,q)=>{k(),W(X??(q?1:0))}),G.once("error",(X)=>{k(),j(X)})});if(U.catch(()=>{return}),z.abort){if(z.abort.addEventListener("abort",O,{once:!0}),z.abort.aborted)O()}let $=G;return $.exited=U,$}async function Z(B,z={}){let G=M(B,{cwd:z.cwd,env:z.env,stdin:z.stdin,shell:z.shell,abort:z.abort,kill:z.kill,timeout:z.timeout,stdout:"pipe",stderr:"pipe"});if(!G.stdout||!G.stderr)throw Error("Process output not available");let H=await Promise.all([G.exited,I(G.stdout),I(G.stderr)]).then(([J,O,U])=>({code:J,stdout:O,stderr:U})).catch((J)=>{if(!z.nothrow)throw J;return{code:1,stdout:Buffer.alloc(0),stderr:Buffer.from(K(J))}});if(H.code===0||z.nothrow)return H;throw new Y(B,H.code,H.stdout,H.stderr)}async function S(B){if(B.exitCode!==null||B.signalCode!==null)return;if(process.platform!=="win32"||!B.pid){B.kill();return}if((await Z(["taskkill","/pid",String(B.pid),"/T","/F"],{nothrow:!0})).code===0)return;B.kill()}async function P(B,z={}){let G=await Z(B,z);return{...G,text:G.stdout.toString()}}async function T(B,z={}){return(await P(B,z)).text.split(/\r?\n/).filter(Boolean)}
|
|
4
4
|
export{D as vt,M as wt,Z as xt,P as yt,V as zt};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{h as x}from"./chunk-
|
|
2
|
+
import{h as x}from"./chunk-pnpre7ys.js";import{j as D}from"./chunk-wm77svwm.js";import{H as A}from"./chunk-z0tfsdb9.js";import{Pd as P}from"./chunk-9xvctnjr.js";import{Sf as j}from"./chunk-9s4whpg1.js";import{rg as R,sg as S,tg as k}from"./chunk-qq2rcxv2.js";import{Xg as $}from"./chunk-sv1s1qxd.js";import{Mj as B}from"./chunk-rtdym35y.js";import{Up as G,Wp as W,Xp as Y,Yp as _,Zp as O,_p as b,hq as v,iq as K,nq as F}from"./chunk-xjhezxft.js";import{UI as H}from"./chunk-ydc6ypjt.js";var X="forgewise",p=(J,z=process.env)=>J.trim()||z.QLEX_API_KEY?.trim()||"",U=(J)=>H.gen(function*(){let z=J.trim();if(!z)yield*H.sync(()=>{j.println(j.Style.TEXT_DANGER+"Error: API key cannot be empty."+j.Style.TEXT_NORMAL)}),process.exit(1);yield*(yield*B.Service).set(X,{type:"api",key:z,metadata:{method:"api-key"}}),yield*D(j.Style.TEXT_SUCCESS+"Signed in with API key."+j.Style.TEXT_NORMAL)}).pipe(H.withSpan("forgewise.login.apikey"));async function u(){let J=!Y();try{return await S({tryOpen:J,onCode:(z)=>{if(process.stdout.write(`
|
|
3
3
|
`),process.stdout.write(" To sign in, open: "+z.verificationUri+`
|
|
4
4
|
`),process.stdout.write(" and enter code: "+z.userCode+`
|
|
5
5
|
`),z.verificationUriComplete)process.stdout.write(`
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{Dd as m,Gd as P,Hd as R,Id as k,Jd as O,Ld as q,Md as $,Nd as I}from"./chunk-7jhrxzjx.js";import"./chunk-jcjaw7tk.js";import{Pd as h}from"./chunk-9xvctnjr.js";import{Sf as r}from"./chunk-9s4whpg1.js";import{Xg as L}from"./chunk-
|
|
2
|
+
import{Dd as m,Gd as P,Hd as R,Id as k,Jd as O,Ld as q,Md as $,Nd as I}from"./chunk-7jhrxzjx.js";import"./chunk-jcjaw7tk.js";import{Pd as h}from"./chunk-9xvctnjr.js";import{Sf as r}from"./chunk-9s4whpg1.js";import{Xg as L}from"./chunk-sv1s1qxd.js";import{Jh as E}from"./chunk-n7d9eemn.js";import"./chunk-pxx2hz0g.js";import"./chunk-rexdr63q.js";import"./chunk-kqhh2pm9.js";import"./chunk-7fawtcnn.js";import"./chunk-mdzzcrf9.js";import"./chunk-wev34grp.js";import{Tj as N,gl as x}from"./chunk-rtdym35y.js";import"./chunk-5myxjxae.js";import{am as i}from"./chunk-sp8ek94w.js";import"./chunk-gnt982jr.js";import"./chunk-1bx2sjn6.js";import"./chunk-17pxm5d3.js";import"./chunk-n38h109k.js";import"./chunk-25bp7pcm.js";import"./chunk-qdcf1ay5.js";import"./chunk-45mjcxqk.js";import"./chunk-qqne79vp.js";import"./chunk-64s7vfj7.js";import"./chunk-xjhezxft.js";import"./chunk-gwfx7tx7.js";import"./chunk-1wpjmwnh.js";import"./chunk-cqtkxwd8.js";import"./chunk-ymtcm4xd.js";import"./chunk-yykjvt7f.js";import"./chunk-3mepk08v.js";import"./chunk-atpzz901.js";import"./chunk-0g25z230.js";import"./chunk-w9pdvcf9.js";import"./chunk-4gs87ghj.js";import"./chunk-kb6v5hhm.js";import"./chunk-qyjt0qnq.js";import"./chunk-xdjwapwy.js";import"./chunk-cxtxvt43.js";import"./chunk-871f8x99.js";import"./chunk-cx7p4ezk.js";import"./chunk-tgd5ctnt.js";import"./chunk-p8kpqyxb.js";import"./chunk-3sz6gw10.js";import"./chunk-twhavv1m.js";import"./chunk-v0yxkq99.js";import"./chunk-2pzvcpv4.js";import"./chunk-kmtfdky8.js";import{Vu as C,_u as j}from"./chunk-vc4e6xc4.js";import"./chunk-hnz570f9.js";import"./chunk-tdmn21z0.js";import"./chunk-s8mghr5a.js";import"./chunk-pqnbdygz.js";import"./chunk-ydc6ypjt.js";import"./chunk-ev3a2sxv.js";import"./chunk-pnq1h5az.js";import{gQ as F}from"./chunk-4sazy0nq.js";import u from"path";import U from"fs/promises";var T=F(N(),1);import{EOL as S}from"os";var c=["bash","read","write","edit","glob","grep","webfetch","actor","task"],B=h({command:"create",describe:"create a new agent",builder:(o)=>o.option("path",{type:"string",describe:"directory path to generate the agent file"}).option("description",{type:"string",describe:"what the agent should do"}).option("mode",{type:"string",describe:"agent mode",choices:["all","primary","subagent"]}).option("tools",{type:"string",describe:`comma-separated list of tools to enable (default: all). Available: "${c.join(", ")}"`}).option("model",{type:"string",alias:["m"],describe:"model to use in the format of provider/model"}),async handler(o){await i.provide({directory:process.cwd(),async fn(){let{path:l,description:t,mode:s,tools:p}=o,d=l&&t&&s&&p!==void 0;if(!d)r.empty(),R("Create agent");let D=i.project,g;if(l)g=u.join(l,"agent");else{let e="global";if(D.vcs==="git"){let n=await $({message:"Location",options:[{label:"Current project",value:"project",hint:i.worktree},{label:"Global",value:"global",hint:j.Path.config}]});if(m(n))throw new r.CancelledError;e=n}g=u.join(e==="global"?j.Path.config:u.join(i.worktree,".qitqode"),"agent")}let b;if(t)b=t;else{let e=await I({message:"Description",placeholder:"What should this agent do?",validate:(n)=>n&&n.length>0?void 0:"Required"});if(m(e))throw new r.CancelledError;b=e}let w=q();w.start("Generating agent configuration...");let G=o.model?x.parseModel(o.model):void 0,f=await L.runPromise(E.Service.use((e)=>e.generate({description:b,model:G}))).catch((e)=>{if(w.stop(`LLM failed to generate agent: ${e.message}`,1),d)process.exit(1);throw new r.CancelledError});w.stop(`Agent ${f.identifier} generated`);let y;if(p!==void 0)y=p?p.split(",").map((e)=>e.trim()):c;else{let e=await O({message:"Select tools to enable (Space to toggle)",options:c.map((n)=>({label:n,value:n})),initialValues:c});if(m(e))throw new r.CancelledError;y=e}let v;if(s)v=s;else{let e=await $({message:"Agent mode",options:[{label:"All",value:"all",hint:"Can function in both primary and subagent roles"},{label:"Primary",value:"primary",hint:"Acts as a primary/main agent"},{label:"Subagent",value:"subagent",hint:"Can be used as a subagent by other agents"}],initialValue:"all"});if(m(e))throw new r.CancelledError;v=e}let A={};for(let e of c)if(!y.includes(e))A[e]=!1;let M={description:f.whenToUse,mode:v};if(Object.keys(A).length>0)M.tools=A;let V=T.default.stringify(f.systemPrompt,M),a=u.join(g,`${f.identifier}.md`);if(await U.mkdir(g,{recursive:!0}),await C.exists(a)){if(d)console.error(`Error: Agent file already exists: ${a}`),process.exit(1);throw P.error(`Agent file already exists: ${a}`),new r.CancelledError}if(await C.write(a,V),d)console.log(a);else P.success(`Agent created: ${a}`),k("Done")}})}}),J=h({command:"list",describe:"list all available agents",async handler(){await i.provide({directory:process.cwd(),async fn(){let l=(await L.runPromise(E.Service.use((t)=>t.list()))).sort((t,s)=>{if(t.native!==s.native)return t.native?-1:1;return t.name.localeCompare(s.name)});for(let t of l)process.stdout.write(`${t.name} (${t.mode})`+S),process.stdout.write(` ${JSON.stringify(t.permission,null,2)}`+S)}})}}),ne=h({command:"agent",describe:"manage agents",builder:(o)=>o.command(B).command(J).demandCommand(),async handler(){}});export{ne as AgentCommand};
|