@agentprojectcontext/apx 1.80.2 → 1.89.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (838) hide show
  1. package/package.json +9 -8
  2. package/skills/apc-context/SKILL.md +14 -7
  3. package/skills/apx/SKILL.md +62 -2
  4. package/skills/apx-mcp/SKILL.md +42 -15
  5. package/src/core/agent/a2a/peers.js +161 -0
  6. package/src/core/agent/a2a/reply.js +379 -27
  7. package/src/core/agent/abort.js +25 -0
  8. package/src/core/agent/agent-model.js +58 -0
  9. package/src/core/agent/agent-tools.js +101 -0
  10. package/src/core/agent/author-line.js +110 -0
  11. package/src/core/agent/build-agent-system.js +52 -18
  12. package/src/core/agent/channels/voice-context.js +17 -2
  13. package/src/core/agent/closing-floor.js +117 -0
  14. package/src/core/agent/constants.js +119 -11
  15. package/src/core/agent/engine-call.js +56 -0
  16. package/src/core/agent/group/run-group-turn.js +218 -0
  17. package/src/core/agent/group/turn-resolver.js +165 -0
  18. package/src/core/agent/judge.js +138 -11
  19. package/src/core/agent/loop/side-effects.js +106 -3
  20. package/src/core/agent/memory.js +31 -18
  21. package/src/core/agent/model-capabilities.js +47 -0
  22. package/src/core/agent/model-router.js +11 -40
  23. package/src/core/agent/prompt-builder.js +47 -0
  24. package/src/core/agent/prompts/channels/a2a.md +12 -0
  25. package/src/core/agent/prompts/channels/code.md +3 -1
  26. package/src/core/agent/prompts/channels/telegram.md +2 -0
  27. package/src/core/agent/prompts/channels/web_code.md +1 -1
  28. package/src/core/agent/prompts/channels/whatsapp.md +37 -0
  29. package/src/core/agent/prompts/core/agent-base.md +2 -0
  30. package/src/core/agent/prompts/discipline/action.md +1 -0
  31. package/src/core/agent/prompts/discipline/two-segment.md +2 -1
  32. package/src/core/agent/prompts/modes/mobility.md +36 -0
  33. package/src/core/agent/retry.js +42 -0
  34. package/src/core/agent/run-agent.js +322 -25
  35. package/src/core/agent/run-turn.js +253 -0
  36. package/src/core/agent/self-memory.js +18 -52
  37. package/src/core/agent/skills/agent-skills.js +118 -0
  38. package/src/core/agent/skills/catalog.js +1 -1
  39. package/src/core/agent/skills/declared.js +13 -0
  40. package/src/core/agent/skills/index-store.js +8 -1
  41. package/src/core/agent/skills/inspector.js +20 -3
  42. package/src/core/agent/skills/loader.js +18 -3
  43. package/src/core/agent/skills/media.js +121 -0
  44. package/src/core/agent/skills/origin.js +61 -0
  45. package/src/core/agent/skills/sections.js +136 -0
  46. package/src/core/agent/super-agent.js +54 -14
  47. package/src/core/agent/tools/handlers/_calendar.js +50 -0
  48. package/src/core/agent/tools/handlers/add-mcp.js +103 -0
  49. package/src/core/agent/tools/handlers/asana-create-task.js +3 -1
  50. package/src/core/agent/tools/handlers/attach-media.js +56 -0
  51. package/src/core/agent/tools/handlers/calendar-create-event.js +38 -0
  52. package/src/core/agent/tools/handlers/calendar-find-slot.js +39 -0
  53. package/src/core/agent/tools/handlers/calendar-list-events.js +39 -0
  54. package/src/core/agent/tools/handlers/calendar-update-event.js +35 -0
  55. package/src/core/agent/tools/handlers/call-agent.js +14 -6
  56. package/src/core/agent/tools/handlers/call-runtime.js +27 -49
  57. package/src/core/agent/tools/handlers/comment-task.js +78 -0
  58. package/src/core/agent/tools/handlers/complete-task.js +60 -0
  59. package/src/core/agent/tools/handlers/configure-agent.js +70 -0
  60. package/src/core/agent/tools/handlers/create-agent.js +68 -0
  61. package/src/core/agent/tools/handlers/create-task.js +41 -3
  62. package/src/core/agent/tools/handlers/import-agent.js +5 -5
  63. package/src/core/agent/tools/handlers/list-mcp-tools.js +83 -0
  64. package/src/core/agent/tools/handlers/list-routines.js +46 -0
  65. package/src/core/agent/tools/handlers/list-tasks.js +8 -1
  66. package/src/core/agent/tools/handlers/mark-commitment.js +57 -0
  67. package/src/core/agent/tools/handlers/read-skill.js +64 -0
  68. package/src/core/agent/tools/handlers/remember-routine.js +2 -8
  69. package/src/core/agent/tools/handlers/remember.js +82 -6
  70. package/src/core/agent/tools/handlers/remove-agent.js +42 -0
  71. package/src/core/agent/tools/handlers/run-routine.js +94 -0
  72. package/src/core/agent/tools/handlers/run-shell.js +44 -2
  73. package/src/core/agent/tools/handlers/send-telegram.js +41 -19
  74. package/src/core/agent/tools/handlers/set-agent-prompt.js +44 -0
  75. package/src/core/agent/tools/handlers/view-media.js +69 -0
  76. package/src/core/agent/tools/handlers/write-agent-memory.js +52 -0
  77. package/src/core/agent/tools/helpers.js +36 -4
  78. package/src/core/agent/tools/names.js +64 -0
  79. package/src/core/agent/tools/registry-bridge.js +24 -1
  80. package/src/core/agent/tools/registry.js +79 -0
  81. package/src/core/agent/tools/tool-call-parser.js +136 -13
  82. package/src/core/agent/vision-bridge.js +69 -0
  83. package/src/core/apc/agent-identity.js +74 -0
  84. package/src/core/apc/agent-rename-refs.js +187 -0
  85. package/src/core/apc/agent-write.js +312 -0
  86. package/src/core/apc/agents-vault.js +1 -1
  87. package/src/core/apc/blob-keys.js +42 -0
  88. package/src/core/apc/frontmatter.js +166 -10
  89. package/src/core/apc/parser.js +33 -83
  90. package/src/core/apc/paths.js +4 -6
  91. package/src/core/apc/project-memory.js +44 -0
  92. package/src/core/apc/projects-helpers.js +33 -0
  93. package/src/core/apc/scaffold.js +36 -16
  94. package/src/core/channels/telegram/ask-callbacks.js +103 -0
  95. package/src/core/channels/telegram/dispatch.js +154 -30
  96. package/src/core/channels/telegram/helpers.js +59 -7
  97. package/src/core/channels/telegram/inbound/audio.js +26 -30
  98. package/src/core/channels/telegram/inbound/file.js +22 -32
  99. package/src/core/channels/telegram/inbound/photo.js +24 -28
  100. package/src/core/channels/telegram/progress-gate.js +76 -0
  101. package/src/core/channels/telegram/reply.js +151 -43
  102. package/src/core/channels/telegram/voice-note.js +150 -0
  103. package/src/core/config/index.js +53 -54
  104. package/src/core/config/paths.js +117 -31
  105. package/src/core/config/redact.js +89 -4
  106. package/src/core/config/secret-values.js +2 -4
  107. package/src/core/constants/actors.js +5 -0
  108. package/src/core/constants/channels.js +3 -1
  109. package/src/core/constants/task-categories.js +73 -0
  110. package/src/core/constants/task-fields.js +28 -0
  111. package/src/core/engines/_globs.js +33 -0
  112. package/src/core/engines/anthropic.js +19 -1
  113. package/src/core/engines/catalog.js +20 -0
  114. package/src/core/engines/gemini.js +84 -16
  115. package/src/core/engines/index.js +19 -3
  116. package/src/core/engines/mock.js +145 -1
  117. package/src/core/engines/openai-compatible.js +150 -15
  118. package/src/core/engines/presets.js +36 -9
  119. package/src/core/engines/zen.js +131 -0
  120. package/src/core/events/bus.js +140 -0
  121. package/src/core/events/mascot-notify.js +156 -0
  122. package/src/core/http-tools/browser.js +366 -36
  123. package/src/core/http-tools/catalog.js +206 -22
  124. package/src/core/http-tools/grep.js +62 -7
  125. package/src/core/http-tools/registry.js +3 -1
  126. package/src/core/i18n/en.js +34 -3
  127. package/src/core/i18n/es.js +36 -4
  128. package/src/core/i18n/index.js +5 -5
  129. package/src/core/i18n/pt.js +32 -3
  130. package/src/core/identity/self.js +14 -1
  131. package/src/core/images/engines/a1111.js +219 -0
  132. package/src/core/images/engines/index.js +187 -0
  133. package/src/core/images/engines/mock.js +74 -0
  134. package/src/core/images/engines/openai.js +130 -0
  135. package/src/core/images/engines/sdcpp.js +204 -0
  136. package/src/core/images/engines/shared.js +218 -0
  137. package/src/core/images/generate.js +260 -0
  138. package/src/core/integrations/catalog.js +8 -3
  139. package/src/core/integrations/plugins/_google-oauth.js +179 -0
  140. package/src/core/integrations/plugins/asana.js +7 -3
  141. package/src/core/integrations/plugins/calendar.js +404 -0
  142. package/src/core/integrations/store.js +2 -0
  143. package/src/core/memory/broker.js +16 -1
  144. package/src/core/memory/compactor.js +19 -3
  145. package/src/core/memory/consolidate.js +2 -2
  146. package/src/core/memory/dated-log.js +66 -0
  147. package/src/core/memory/embed-engines/custom.js +59 -0
  148. package/src/core/memory/embed-engines/gemini.js +9 -3
  149. package/src/core/memory/embed-engines/index.js +87 -15
  150. package/src/core/memory/embeddings.js +52 -24
  151. package/src/core/memory/index.js +13 -3
  152. package/src/core/memory/indexer.js +83 -27
  153. package/src/core/memory/prune.js +182 -0
  154. package/src/core/memory/store.js +22 -0
  155. package/src/core/memory/summarizer.js +72 -8
  156. package/src/core/mobility/answer.js +80 -0
  157. package/src/core/mobility/geofence.js +667 -0
  158. package/src/core/mobility/osm-route.js +282 -0
  159. package/src/core/mobility/preferences.js +91 -0
  160. package/src/core/mobility/state.js +245 -0
  161. package/src/core/mobility/trip-event.js +384 -0
  162. package/src/core/net/tailscale.js +168 -0
  163. package/src/core/profiles/bundled/secretary/PROFILE.md +32 -42
  164. package/src/core/profiles/bundled/secretary/config.schema.es.json +68 -0
  165. package/src/core/profiles/bundled/secretary/config.schema.json +30 -2
  166. package/src/core/profiles/bundled/secretary/profile.json +3 -1
  167. package/src/core/profiles/bundled/secretary/routines/a2a-sweep.json +20 -0
  168. package/src/core/profiles/bundled/secretary/routines/day-close.json +4 -1
  169. package/src/core/profiles/bundled/secretary/routines/day-open.json +7 -1
  170. package/src/core/profiles/bundled/secretary/routines/watch.json +13 -2
  171. package/src/core/profiles/lifecycle.js +243 -19
  172. package/src/core/profiles/paths.js +12 -0
  173. package/src/core/profiles/store.js +47 -0
  174. package/src/core/routines/active-runs.js +213 -0
  175. package/src/core/routines/delivery.js +612 -0
  176. package/src/core/routines/header.js +88 -0
  177. package/src/core/routines/index.js +26 -0
  178. package/src/core/routines/run-log.js +78 -0
  179. package/src/core/routines/runner.js +629 -66
  180. package/src/core/routines/signals.js +75 -0
  181. package/src/core/runtime-skills/apc-context/SKILL.md +14 -7
  182. package/src/core/runtime-skills/apx/SKILL.md +93 -1
  183. package/src/core/runtime-skills/apx-agency-agents/SKILL.md +2 -2
  184. package/src/core/runtime-skills/apx-agent/SKILL.md +134 -19
  185. package/src/core/runtime-skills/apx-commitment/SKILL.md +134 -0
  186. package/src/core/runtime-skills/apx-image/SKILL.md +60 -0
  187. package/src/core/runtime-skills/apx-integrations/SKILL.md +82 -0
  188. package/src/core/runtime-skills/apx-mcp/SKILL.md +45 -14
  189. package/src/core/runtime-skills/apx-mcp-builder/SKILL.md +4 -4
  190. package/src/core/runtime-skills/apx-profile/SKILL.md +27 -2
  191. package/src/core/runtime-skills/apx-project/SKILL.md +23 -2
  192. package/src/core/runtime-skills/apx-routine/SKILL.md +40 -17
  193. package/src/core/runtime-skills/apx-runtime/SKILL.md +124 -14
  194. package/src/core/runtime-skills/apx-sessions/SKILL.md +7 -6
  195. package/src/core/runtime-skills/apx-skill-builder/SKILL.md +15 -13
  196. package/src/core/runtime-skills/apx-task/SKILL.md +79 -26
  197. package/src/core/runtime-skills/apx-telegram/SKILL.md +12 -12
  198. package/src/core/runtime-skills/apx-transcribe/SKILL.md +56 -0
  199. package/src/core/runtime-skills/apx-voice/SKILL.md +27 -8
  200. package/src/core/runtime-skills/claude-code/SKILL.md +8 -0
  201. package/src/core/runtime-skills/openrouter/SKILL.md +8 -2
  202. package/src/core/runtimes/_spawn.js +9 -1
  203. package/src/core/runtimes/claude-code.js +11 -2
  204. package/src/core/runtimes/codex.js +44 -10
  205. package/src/core/runtimes/index.js +17 -2
  206. package/src/core/runtimes/opencode.js +88 -9
  207. package/src/core/runtimes/outcome.js +119 -0
  208. package/src/core/sessions/index.js +193 -1
  209. package/src/core/stores/agent-inbox.js +109 -23
  210. package/src/core/stores/code-sessions.js +21 -0
  211. package/src/core/stores/commitments.js +27 -3
  212. package/src/core/stores/conversations.js +220 -20
  213. package/src/core/stores/deliveries.js +177 -0
  214. package/src/core/stores/media-archive.js +228 -0
  215. package/src/core/stores/messages.js +1096 -112
  216. package/src/core/stores/organization.js +34 -0
  217. package/src/core/stores/project-memory.js +71 -0
  218. package/src/core/stores/routine-memory.js +16 -8
  219. package/src/core/stores/routines.js +27 -49
  220. package/src/core/stores/sessions.js +4 -8
  221. package/src/core/stores/tasks.js +212 -18
  222. package/src/core/stores/turn-record.js +209 -0
  223. package/src/core/tasks/columns.js +136 -0
  224. package/src/core/tasks/comment-turn.js +258 -0
  225. package/src/core/util/time.js +13 -0
  226. package/src/core/voice/engines/index.js +54 -1
  227. package/src/core/voice/engines/openai.js +50 -4
  228. package/src/core/voice/opus.js +67 -0
  229. package/src/core/voice/pronounceable.js +43 -0
  230. package/src/core/voice/transcription.js +4 -0
  231. package/src/core/voice/tts.js +114 -24
  232. package/src/host/daemon/active-turns.js +188 -0
  233. package/src/host/daemon/api/admin-config.js +9 -0
  234. package/src/host/daemon/api/agents.js +99 -90
  235. package/src/host/daemon/api/artifact-preview.js +7 -6
  236. package/src/host/daemon/api/artifacts.js +3 -2
  237. package/src/host/daemon/api/code.js +55 -9
  238. package/src/host/daemon/api/commitments.js +11 -0
  239. package/src/host/daemon/api/confirm.js +3 -2
  240. package/src/host/daemon/api/conversations.js +543 -35
  241. package/src/host/daemon/api/deck.js +9 -8
  242. package/src/host/daemon/api/deliveries.js +33 -0
  243. package/src/host/daemon/api/desktop.js +5 -4
  244. package/src/host/daemon/api/embeddings.js +15 -6
  245. package/src/host/daemon/api/engines.js +59 -8
  246. package/src/host/daemon/api/exec.js +437 -121
  247. package/src/host/daemon/api/groups.js +215 -0
  248. package/src/host/daemon/api/images.js +107 -0
  249. package/src/host/daemon/api/inbox.js +123 -2
  250. package/src/host/daemon/api/integrations.js +64 -2
  251. package/src/host/daemon/api/mcps.js +7 -6
  252. package/src/host/daemon/api/media.js +283 -0
  253. package/src/host/daemon/api/mobility.js +177 -0
  254. package/src/host/daemon/api/net.js +182 -0
  255. package/src/host/daemon/api/pairing.js +38 -5
  256. package/src/host/daemon/api/profiles.js +30 -2
  257. package/src/host/daemon/api/routines.js +36 -4
  258. package/src/host/daemon/api/runtimes.js +74 -39
  259. package/src/host/daemon/api/sessions-search.js +7 -2
  260. package/src/host/daemon/api/sessions.js +44 -2
  261. package/src/host/daemon/api/shared.js +127 -20
  262. package/src/host/daemon/api/skills.js +11 -4
  263. package/src/host/daemon/api/super-agent.js +384 -53
  264. package/src/host/daemon/api/tasks.js +180 -10
  265. package/src/host/daemon/api/telegram.js +11 -10
  266. package/src/host/daemon/api/thread-faces.js +159 -0
  267. package/src/host/daemon/api/top-level.js +3 -3
  268. package/src/host/daemon/api/transcribe.js +11 -10
  269. package/src/host/daemon/api/tts.js +97 -4
  270. package/src/host/daemon/api/turn-abort.js +23 -0
  271. package/src/host/daemon/api/turns.js +49 -0
  272. package/src/host/daemon/api/voice.js +5 -4
  273. package/src/host/daemon/api/web.js +98 -0
  274. package/src/host/daemon/api.js +39 -0
  275. package/src/host/daemon/delivery-sweep.js +58 -0
  276. package/src/host/daemon/desktop-ws.js +5 -23
  277. package/src/host/daemon/events-ws.js +273 -0
  278. package/src/host/daemon/index.js +59 -15
  279. package/src/host/daemon/plugins/desktop/index.js +17 -4
  280. package/src/host/daemon/plugins/telegram/index.js +78 -40
  281. package/src/host/daemon/pty-bridge.py +99 -0
  282. package/src/host/daemon/routines-scheduler.js +1 -0
  283. package/src/host/daemon/smoke.js +1 -2
  284. package/src/host/daemon/terminal-ws.js +132 -0
  285. package/src/host/daemon/tts-keepwarm.js +87 -0
  286. package/src/host/daemon/wakeup.js +11 -6
  287. package/src/host/daemon/whisper-server.js +44 -0
  288. package/src/host/daemon/whisper-server.py +70 -13
  289. package/src/host/daemon/ws-auth.js +28 -0
  290. package/src/interfaces/android/app/build.gradle +42 -0
  291. package/src/interfaces/android/app/proguard-rules.pro +4 -0
  292. package/src/interfaces/android/app/src/main/AndroidManifest.xml +139 -0
  293. package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/AlertScreen.java +139 -0
  294. package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/AndroidAutoDetector.java +106 -0
  295. package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/ApxCarAppService.java +57 -0
  296. package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/ApxPreferences.java +165 -0
  297. package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/CarAlertStore.java +84 -0
  298. package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/CarMessageActionReceiver.java +47 -0
  299. package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/CarMessageNotification.java +152 -0
  300. package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/DaemonAddress.java +35 -0
  301. package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/DaemonClient.java +339 -0
  302. package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/DeviceLocation.java +38 -0
  303. package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/ErrandScreen.java +127 -0
  304. package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/MainActivity.java +872 -0
  305. package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/MapsNavigationDetector.java +63 -0
  306. package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/MapsNavigationListenerService.java +453 -0
  307. package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/MapsShareIntentParser.java +93 -0
  308. package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/MascotBlobCatalog.java +66 -0
  309. package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/MascotOverlayService.java +448 -0
  310. package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/MascotView.java +249 -0
  311. package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/MessageFrameParser.java +240 -0
  312. package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/NotifyChannels.java +69 -0
  313. package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/ProximityActionReceiver.java +78 -0
  314. package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/ProximityNotification.java +161 -0
  315. package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/StartupReceiver.java +57 -0
  316. package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/TravelEventGate.java +62 -0
  317. package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/TravelStatusBanner.java +116 -0
  318. package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/TripLocationService.java +272 -0
  319. package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/TripPlacesSheet.java +203 -0
  320. package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/TripScreen.java +182 -0
  321. package/src/interfaces/android/app/src/main/res/drawable/app_background.xml +12 -0
  322. package/src/interfaces/android/app/src/main/res/drawable/ic_apx_app.xml +10 -0
  323. package/src/interfaces/android/app/src/main/res/drawable/ic_apx_launcher_foreground.xml +12 -0
  324. package/src/interfaces/android/app/src/main/res/drawable/ic_apx_notification.xml +22 -0
  325. package/src/interfaces/android/app/src/main/res/drawable/ic_trip_car.xml +37 -0
  326. package/src/interfaces/android/app/src/main/res/drawable-nodpi/apx_logo.png +0 -0
  327. package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_amatista.png +0 -0
  328. package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_aqua.png +0 -0
  329. package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_brasa.png +0 -0
  330. package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_campana.png +0 -0
  331. package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_caracol.png +0 -0
  332. package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_carbon.png +0 -0
  333. package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_cobalto.png +0 -0
  334. package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_cometa.png +0 -0
  335. package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_coral.png +0 -0
  336. package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_cubi.png +0 -0
  337. package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_eclipse.png +0 -0
  338. package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_faro.png +0 -0
  339. package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_gajo.png +0 -0
  340. package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_iris.png +0 -0
  341. package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_kiwi.png +0 -0
  342. package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_laguna.png +0 -0
  343. package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_lila.png +0 -0
  344. package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_menta.png +0 -0
  345. package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_nimbo.png +0 -0
  346. package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_noche.png +0 -0
  347. package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_onyx.png +0 -0
  348. package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_orbita.png +0 -0
  349. package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_ovni.png +0 -0
  350. package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_papa.png +0 -0
  351. package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_parche.png +0 -0
  352. package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_peon.png +0 -0
  353. package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_perla.png +0 -0
  354. package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_pino.png +0 -0
  355. package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_quad.png +0 -0
  356. package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_rubi.png +0 -0
  357. package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_saturno.png +0 -0
  358. package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_trebol.png +0 -0
  359. package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_trino.png +0 -0
  360. package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_volcan.png +0 -0
  361. package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_zafiro.png +0 -0
  362. package/src/interfaces/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +5 -0
  363. package/src/interfaces/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +5 -0
  364. package/src/interfaces/android/app/src/main/res/raw/apx_notification.mp3 +0 -0
  365. package/src/interfaces/android/app/src/main/res/values/colors.xml +4 -0
  366. package/src/interfaces/android/app/src/main/res/values/strings.xml +25 -0
  367. package/src/interfaces/android/app/src/main/res/values/styles.xml +10 -0
  368. package/src/interfaces/android/app/src/main/res/values-v31/styles.xml +14 -0
  369. package/src/interfaces/android/app/src/main/res/xml/automotive_app_desc.xml +9 -0
  370. package/src/interfaces/android/app/src/main/res/xml/network_security_config.xml +10 -0
  371. package/src/interfaces/android/app/src/test/java/dev/agentprojectcontext/apx/AndroidAutoDetectorTest.java +85 -0
  372. package/src/interfaces/android/app/src/test/java/dev/agentprojectcontext/apx/CarAlertStoreTest.java +104 -0
  373. package/src/interfaces/android/app/src/test/java/dev/agentprojectcontext/apx/DaemonAddressTest.java +23 -0
  374. package/src/interfaces/android/app/src/test/java/dev/agentprojectcontext/apx/MapsNavigationDetectorTest.java +69 -0
  375. package/src/interfaces/android/app/src/test/java/dev/agentprojectcontext/apx/MapsShareIntentParserTest.java +31 -0
  376. package/src/interfaces/android/app/src/test/java/dev/agentprojectcontext/apx/MessageFrameParserTest.java +180 -0
  377. package/src/interfaces/android/app/src/test/java/dev/agentprojectcontext/apx/TravelEventGateTest.java +64 -0
  378. package/src/interfaces/android/app/src/test/java/dev/agentprojectcontext/apx/TripPlacesSheetTest.java +66 -0
  379. package/src/interfaces/android/build.gradle +3 -0
  380. package/src/interfaces/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  381. package/src/interfaces/android/gradle/wrapper/gradle-wrapper.properties +9 -0
  382. package/src/interfaces/android/gradle.properties +3 -0
  383. package/src/interfaces/android/gradlew +248 -0
  384. package/src/interfaces/android/gradlew.bat +82 -0
  385. package/src/interfaces/android/settings.gradle +18 -0
  386. package/src/interfaces/cli/commands/a2a.js +145 -4
  387. package/src/interfaces/cli/commands/agent.js +247 -22
  388. package/src/interfaces/cli/commands/code.js +1 -1
  389. package/src/interfaces/cli/commands/commitment.js +5 -0
  390. package/src/interfaces/cli/commands/config.js +85 -6
  391. package/src/interfaces/cli/commands/exec.js +90 -1
  392. package/src/interfaces/cli/commands/image.js +314 -0
  393. package/src/interfaces/cli/commands/mcp.js +87 -23
  394. package/src/interfaces/cli/commands/memory.js +35 -22
  395. package/src/interfaces/cli/commands/panel.js +94 -0
  396. package/src/interfaces/cli/commands/profile.js +14 -0
  397. package/src/interfaces/cli/commands/project.js +29 -0
  398. package/src/interfaces/cli/commands/routine.js +45 -10
  399. package/src/interfaces/cli/commands/runtime.js +30 -7
  400. package/src/interfaces/cli/commands/session.js +90 -38
  401. package/src/interfaces/cli/commands/sessions.js +35 -2
  402. package/src/interfaces/cli/commands/skills.js +15 -9
  403. package/src/interfaces/cli/commands/status.js +2 -3
  404. package/src/interfaces/cli/commands/task.js +54 -5
  405. package/src/interfaces/cli/commands/telegram.js +12 -4
  406. package/src/interfaces/cli/commands/transcribe.js +177 -0
  407. package/src/interfaces/cli/help/index.js +311 -72
  408. package/src/interfaces/cli/http.js +61 -13
  409. package/src/interfaces/cli/index.js +1 -1
  410. package/src/interfaces/cli/routes/agent.js +5 -4
  411. package/src/interfaces/cli/routes/commitment.js +3 -2
  412. package/src/interfaces/cli/routes/config.js +7 -2
  413. package/src/interfaces/cli/routes/image.js +11 -0
  414. package/src/interfaces/cli/routes/index.js +2 -0
  415. package/src/interfaces/cli/routes/log.js +1 -1
  416. package/src/interfaces/cli/routes/memory.js +3 -2
  417. package/src/interfaces/cli/routes/panel.js +15 -2
  418. package/src/interfaces/cli/routes/profile.js +3 -2
  419. package/src/interfaces/cli/routes/transcribe.js +10 -0
  420. package/src/interfaces/cli/stdin.js +29 -0
  421. package/src/interfaces/desktop/assets/blobs/amatista.png +0 -0
  422. package/src/interfaces/desktop/assets/blobs/aqua.png +0 -0
  423. package/src/interfaces/desktop/assets/blobs/brasa.png +0 -0
  424. package/src/interfaces/desktop/assets/blobs/campana.png +0 -0
  425. package/src/interfaces/desktop/assets/blobs/caracol.png +0 -0
  426. package/src/interfaces/desktop/assets/blobs/carbon.png +0 -0
  427. package/src/interfaces/desktop/assets/blobs/cobalto.png +0 -0
  428. package/src/interfaces/desktop/assets/blobs/cometa.png +0 -0
  429. package/src/interfaces/desktop/assets/blobs/coral.png +0 -0
  430. package/src/interfaces/desktop/assets/blobs/cubi.png +0 -0
  431. package/src/interfaces/desktop/assets/blobs/eclipse.png +0 -0
  432. package/src/interfaces/desktop/assets/blobs/faro.png +0 -0
  433. package/src/interfaces/desktop/assets/blobs/gajo.png +0 -0
  434. package/src/interfaces/desktop/assets/blobs/iris.png +0 -0
  435. package/src/interfaces/desktop/assets/blobs/kiwi.png +0 -0
  436. package/src/interfaces/desktop/assets/blobs/laguna.png +0 -0
  437. package/src/interfaces/desktop/assets/blobs/lila.png +0 -0
  438. package/src/interfaces/desktop/assets/blobs/menta.png +0 -0
  439. package/src/interfaces/desktop/assets/blobs/nimbo.png +0 -0
  440. package/src/interfaces/desktop/assets/blobs/noche.png +0 -0
  441. package/src/interfaces/desktop/assets/blobs/onyx.png +0 -0
  442. package/src/interfaces/desktop/assets/blobs/orbita.png +0 -0
  443. package/src/interfaces/desktop/assets/blobs/ovni.png +0 -0
  444. package/src/interfaces/desktop/assets/blobs/papa.png +0 -0
  445. package/src/interfaces/desktop/assets/blobs/parche.png +0 -0
  446. package/src/interfaces/desktop/assets/blobs/peon.png +0 -0
  447. package/src/interfaces/desktop/assets/blobs/perla.png +0 -0
  448. package/src/interfaces/desktop/assets/blobs/pino.png +0 -0
  449. package/src/interfaces/desktop/assets/blobs/quad.png +0 -0
  450. package/src/interfaces/desktop/assets/blobs/rubi.png +0 -0
  451. package/src/interfaces/desktop/assets/blobs/saturno.png +0 -0
  452. package/src/interfaces/desktop/assets/blobs/trebol.png +0 -0
  453. package/src/interfaces/desktop/assets/blobs/trino.png +0 -0
  454. package/src/interfaces/desktop/assets/blobs/volcan.png +0 -0
  455. package/src/interfaces/desktop/assets/blobs/zafiro.png +0 -0
  456. package/src/interfaces/desktop/assets/notification.mp3 +0 -0
  457. package/src/interfaces/desktop/main.js +473 -29
  458. package/src/interfaces/desktop/mascot-blobs.js +41 -0
  459. package/src/interfaces/desktop/mascot-preload.js +32 -0
  460. package/src/interfaces/desktop/mascot.css +186 -0
  461. package/src/interfaces/desktop/mascot.html +40 -0
  462. package/src/interfaces/desktop/mascot.js +163 -0
  463. package/src/interfaces/desktop/preload.js +10 -0
  464. package/src/interfaces/desktop/renderer.js +308 -48
  465. package/src/interfaces/desktop/style.css +34 -0
  466. package/src/interfaces/mcp-server/index.js +87 -0
  467. package/src/interfaces/tui/_shims/util-locale.ts +0 -2
  468. package/src/interfaces/tui/app.tsx +0 -6
  469. package/src/interfaces/tui/attach.ts +0 -1
  470. package/src/interfaces/tui/context/sdk-apx.tsx +0 -4
  471. package/src/interfaces/tui/plugin/api.tsx +0 -3
  472. package/src/interfaces/tui/plugin/runtime.ts +0 -3
  473. package/src/interfaces/tui/thread.ts +0 -16
  474. package/src/interfaces/web/README.md +22 -14
  475. package/src/interfaces/web/dist/assets/claude-XtpLmGtF.webp +0 -0
  476. package/src/interfaces/web/dist/assets/codex-DExPUgvh.webp +0 -0
  477. package/src/interfaces/web/dist/assets/index-BEoRgIqd.css +32 -0
  478. package/src/interfaces/web/dist/assets/index-BEoRgIqd.css.br +0 -0
  479. package/src/interfaces/web/dist/assets/index-BEoRgIqd.css.gz +0 -0
  480. package/src/interfaces/web/dist/assets/index-C6fXHc1p.js +1074 -0
  481. package/src/interfaces/web/dist/assets/index-C6fXHc1p.js.br +0 -0
  482. package/src/interfaces/web/dist/assets/index-C6fXHc1p.js.gz +0 -0
  483. package/src/interfaces/web/dist/assets/index-C6fXHc1p.js.map +1 -0
  484. package/src/interfaces/web/dist/assets/index-C6fXHc1p.js.map.br +0 -0
  485. package/src/interfaces/web/dist/assets/index-C6fXHc1p.js.map.gz +0 -0
  486. package/src/interfaces/web/dist/favicon/dark/site.webmanifest +12 -6
  487. package/src/interfaces/web/dist/favicon/white/site.webmanifest +12 -6
  488. package/src/interfaces/web/dist/index.html +22 -6
  489. package/src/interfaces/web/dist/index.html.br +0 -0
  490. package/src/interfaces/web/dist/index.html.gz +0 -0
  491. package/src/interfaces/web/dist/manifest.webmanifest +25 -0
  492. package/src/interfaces/web/dist/modules/blobs/amatista.png +0 -0
  493. package/src/interfaces/web/dist/modules/blobs/aqua.png +0 -0
  494. package/src/interfaces/web/dist/modules/blobs/brasa.png +0 -0
  495. package/src/interfaces/web/dist/modules/blobs/campana.png +0 -0
  496. package/src/interfaces/web/dist/modules/blobs/caracol.png +0 -0
  497. package/src/interfaces/web/dist/modules/blobs/carbon.png +0 -0
  498. package/src/interfaces/web/dist/modules/blobs/cobalto.png +0 -0
  499. package/src/interfaces/web/dist/modules/blobs/cometa.png +0 -0
  500. package/src/interfaces/web/dist/modules/blobs/coral.png +0 -0
  501. package/src/interfaces/web/dist/modules/blobs/cubi.png +0 -0
  502. package/src/interfaces/web/dist/modules/blobs/eclipse.png +0 -0
  503. package/src/interfaces/web/dist/modules/blobs/faro.png +0 -0
  504. package/src/interfaces/web/dist/modules/blobs/gajo.png +0 -0
  505. package/src/interfaces/web/dist/modules/blobs/iris.png +0 -0
  506. package/src/interfaces/web/dist/modules/blobs/kiwi.png +0 -0
  507. package/src/interfaces/web/dist/modules/blobs/laguna.png +0 -0
  508. package/src/interfaces/web/dist/modules/blobs/lila.png +0 -0
  509. package/src/interfaces/web/dist/modules/blobs/menta.png +0 -0
  510. package/src/interfaces/web/dist/modules/blobs/nimbo.png +0 -0
  511. package/src/interfaces/web/dist/modules/blobs/noche.png +0 -0
  512. package/src/interfaces/web/dist/modules/blobs/onyx.png +0 -0
  513. package/src/interfaces/web/dist/modules/blobs/orbita.png +0 -0
  514. package/src/interfaces/web/dist/modules/blobs/ovni.png +0 -0
  515. package/src/interfaces/web/dist/modules/blobs/papa.png +0 -0
  516. package/src/interfaces/web/dist/modules/blobs/parche.png +0 -0
  517. package/src/interfaces/web/dist/modules/blobs/peon.png +0 -0
  518. package/src/interfaces/web/dist/modules/blobs/perla.png +0 -0
  519. package/src/interfaces/web/dist/modules/blobs/pino.png +0 -0
  520. package/src/interfaces/web/dist/modules/blobs/quad.png +0 -0
  521. package/src/interfaces/web/dist/modules/blobs/rubi.png +0 -0
  522. package/src/interfaces/web/dist/modules/blobs/saturno.png +0 -0
  523. package/src/interfaces/web/dist/modules/blobs/trebol.png +0 -0
  524. package/src/interfaces/web/dist/modules/blobs/trino.png +0 -0
  525. package/src/interfaces/web/dist/modules/blobs/volcan.png +0 -0
  526. package/src/interfaces/web/dist/modules/blobs/zafiro.png +0 -0
  527. package/src/interfaces/web/dist/sw.js +106 -0
  528. package/src/interfaces/web/dist/sw.js.br +0 -0
  529. package/src/interfaces/web/dist/sw.js.gz +0 -0
  530. package/src/interfaces/web/eslint.config.js +83 -0
  531. package/src/interfaces/web/index.html +20 -4
  532. package/src/interfaces/web/package-lock.json +1651 -1280
  533. package/src/interfaces/web/package.json +9 -10
  534. package/src/interfaces/web/pnpm-lock.yaml +867 -869
  535. package/src/interfaces/web/public/favicon/dark/site.webmanifest +12 -6
  536. package/src/interfaces/web/public/favicon/white/site.webmanifest +12 -6
  537. package/src/interfaces/web/public/manifest.webmanifest +25 -0
  538. package/src/interfaces/web/public/modules/blobs/amatista.png +0 -0
  539. package/src/interfaces/web/public/modules/blobs/aqua.png +0 -0
  540. package/src/interfaces/web/public/modules/blobs/brasa.png +0 -0
  541. package/src/interfaces/web/public/modules/blobs/campana.png +0 -0
  542. package/src/interfaces/web/public/modules/blobs/caracol.png +0 -0
  543. package/src/interfaces/web/public/modules/blobs/carbon.png +0 -0
  544. package/src/interfaces/web/public/modules/blobs/cobalto.png +0 -0
  545. package/src/interfaces/web/public/modules/blobs/cometa.png +0 -0
  546. package/src/interfaces/web/public/modules/blobs/coral.png +0 -0
  547. package/src/interfaces/web/public/modules/blobs/cubi.png +0 -0
  548. package/src/interfaces/web/public/modules/blobs/eclipse.png +0 -0
  549. package/src/interfaces/web/public/modules/blobs/faro.png +0 -0
  550. package/src/interfaces/web/public/modules/blobs/gajo.png +0 -0
  551. package/src/interfaces/web/public/modules/blobs/iris.png +0 -0
  552. package/src/interfaces/web/public/modules/blobs/kiwi.png +0 -0
  553. package/src/interfaces/web/public/modules/blobs/laguna.png +0 -0
  554. package/src/interfaces/web/public/modules/blobs/lila.png +0 -0
  555. package/src/interfaces/web/public/modules/blobs/menta.png +0 -0
  556. package/src/interfaces/web/public/modules/blobs/nimbo.png +0 -0
  557. package/src/interfaces/web/public/modules/blobs/noche.png +0 -0
  558. package/src/interfaces/web/public/modules/blobs/onyx.png +0 -0
  559. package/src/interfaces/web/public/modules/blobs/orbita.png +0 -0
  560. package/src/interfaces/web/public/modules/blobs/ovni.png +0 -0
  561. package/src/interfaces/web/public/modules/blobs/papa.png +0 -0
  562. package/src/interfaces/web/public/modules/blobs/parche.png +0 -0
  563. package/src/interfaces/web/public/modules/blobs/peon.png +0 -0
  564. package/src/interfaces/web/public/modules/blobs/perla.png +0 -0
  565. package/src/interfaces/web/public/modules/blobs/pino.png +0 -0
  566. package/src/interfaces/web/public/modules/blobs/quad.png +0 -0
  567. package/src/interfaces/web/public/modules/blobs/rubi.png +0 -0
  568. package/src/interfaces/web/public/modules/blobs/saturno.png +0 -0
  569. package/src/interfaces/web/public/modules/blobs/trebol.png +0 -0
  570. package/src/interfaces/web/public/modules/blobs/trino.png +0 -0
  571. package/src/interfaces/web/public/modules/blobs/volcan.png +0 -0
  572. package/src/interfaces/web/public/modules/blobs/zafiro.png +0 -0
  573. package/src/interfaces/web/public/sw.js +106 -0
  574. package/src/interfaces/web/src/App.tsx +106 -10
  575. package/src/interfaces/web/src/assets/cli/claude.webp +0 -0
  576. package/src/interfaces/web/src/assets/cli/codex.webp +0 -0
  577. package/src/interfaces/web/src/assets/cli/cursor.svg +1 -0
  578. package/src/interfaces/web/src/assets/cli/opencode.png +0 -0
  579. package/src/interfaces/web/src/components/Combobox.tsx +201 -0
  580. package/src/interfaces/web/src/components/MobileHint.tsx +95 -0
  581. package/src/interfaces/web/src/components/MobileLinkDialog.tsx +156 -0
  582. package/src/interfaces/web/src/components/ModelCombobox.tsx +21 -113
  583. package/src/interfaces/web/src/components/{routines/ReadOnlyBlock.tsx → ReadOnlyBlock.tsx} +13 -4
  584. package/src/interfaces/web/src/components/Roby.tsx +5 -3
  585. package/src/interfaces/web/src/components/RobyBubble.tsx +23 -5
  586. package/src/interfaces/web/src/components/RowMenu.tsx +46 -0
  587. package/src/interfaces/web/src/components/TimezoneSelect.tsx +4 -1
  588. package/src/interfaces/web/src/components/Toast.tsx +50 -14
  589. package/src/interfaces/web/src/components/UiSelect.tsx +12 -5
  590. package/src/interfaces/web/src/components/agents/AgentAvatar.tsx +171 -0
  591. package/src/interfaces/web/src/components/agents/AgentFormFields.tsx +42 -11
  592. package/src/interfaces/web/src/components/agents/AgentModelBadge.tsx +157 -0
  593. package/src/interfaces/web/src/components/agents/AgentModelSelect.tsx +57 -0
  594. package/src/interfaces/web/src/components/agents/AgentSkillsPicker.tsx +115 -0
  595. package/src/interfaces/web/src/components/agents/BlobAvatar.tsx +50 -0
  596. package/src/interfaces/web/src/components/agents/blobPresets.ts +50 -0
  597. package/src/interfaces/web/src/components/agents/modelCatalog.ts +66 -0
  598. package/src/interfaces/web/src/components/chat/ActionGroup.tsx +162 -0
  599. package/src/interfaces/web/src/components/chat/AskAnswersCard.tsx +4 -3
  600. package/src/interfaces/web/src/components/chat/AskQuestionsCard.tsx +1 -1
  601. package/src/interfaces/web/src/components/chat/Attachment.tsx +220 -0
  602. package/src/interfaces/web/src/components/chat/ChatList.tsx +226 -51
  603. package/src/interfaces/web/src/components/chat/ChatRowActivity.tsx +45 -0
  604. package/src/interfaces/web/src/components/chat/Composer.tsx +672 -23
  605. package/src/interfaces/web/src/components/chat/ComposerCommands.tsx +175 -0
  606. package/src/interfaces/web/src/components/chat/ComposerSuggest.tsx +215 -0
  607. package/src/interfaces/web/src/components/chat/ContextBar.tsx +133 -65
  608. package/src/interfaces/web/src/components/chat/InlineAskPanel.tsx +107 -47
  609. package/src/interfaces/web/src/components/chat/MessageBubble.tsx +460 -119
  610. package/src/interfaces/web/src/components/chat/MessageList.tsx +165 -18
  611. package/src/interfaces/web/src/components/chat/ReasoningBlock.tsx +58 -0
  612. package/src/interfaces/web/src/components/chat/SessionPicker.tsx +182 -0
  613. package/src/interfaces/web/src/components/chat/SkillTrace.tsx +183 -0
  614. package/src/interfaces/web/src/components/chat/ToolCall.tsx +11 -11
  615. package/src/interfaces/web/src/components/code/CodeContextTab.tsx +87 -53
  616. package/src/interfaces/web/src/components/code/CodeFileTree.tsx +11 -52
  617. package/src/interfaces/web/src/components/code/CodeFileViewer.tsx +5 -4
  618. package/src/interfaces/web/src/components/code/CodeProjectPicker.tsx +31 -7
  619. package/src/interfaces/web/src/components/code/CodeSessionList.tsx +32 -11
  620. package/src/interfaces/web/src/components/code/CodeSidePanel.tsx +33 -3
  621. package/src/interfaces/web/src/components/code/CodeTerminal.tsx +5 -4
  622. package/src/interfaces/web/src/components/code/NewCodeSessionDialog.tsx +164 -0
  623. package/src/interfaces/web/src/components/commitments/CommitmentDetail.tsx +162 -0
  624. package/src/interfaces/web/src/components/commitments/CommitmentFormDialog.tsx +158 -0
  625. package/src/interfaces/web/src/components/commitments/CommitmentList.tsx +194 -0
  626. package/src/interfaces/web/src/components/commitments/commitmentState.tsx +46 -0
  627. package/src/interfaces/web/src/components/common/BulkActionBar.tsx +60 -0
  628. package/src/interfaces/web/src/components/common/ConfirmDialog.tsx +4 -1
  629. package/src/interfaces/web/src/components/common/SelectCheckbox.tsx +40 -0
  630. package/src/interfaces/web/src/components/common/TabNav.tsx +1 -1
  631. package/src/interfaces/web/src/components/cron/CronPicker.tsx +1 -1
  632. package/src/interfaces/web/src/components/files/FileBrowser.tsx +1 -1
  633. package/src/interfaces/web/src/components/files/FileTree.tsx +6 -4
  634. package/src/interfaces/web/src/components/files/FileViewer.tsx +9 -5
  635. package/src/interfaces/web/src/components/files/MarkdownPreview.tsx +45 -9
  636. package/src/interfaces/web/src/components/images/ImageDefaultsCard.tsx +93 -0
  637. package/src/interfaces/web/src/components/images/ImageProviderList.tsx +142 -0
  638. package/src/interfaces/web/src/components/images/ImageProviderModal.tsx +263 -0
  639. package/src/interfaces/web/src/components/images/ImageTestCard.tsx +142 -0
  640. package/src/interfaces/web/src/components/inbox/ChannelFilter.tsx +178 -0
  641. package/src/interfaces/web/src/components/inbox/InboxList.tsx +77 -81
  642. package/src/interfaces/web/src/components/inbox/InboxRowItem.tsx +140 -0
  643. package/src/interfaces/web/src/components/integrations/ComingSoonPlugin.tsx +2 -2
  644. package/src/interfaces/web/src/components/integrations/PluginConnect.tsx +208 -30
  645. package/src/interfaces/web/src/components/integrations/PluginToolsSection.tsx +1 -1
  646. package/src/interfaces/web/src/components/layout/ProjectAvatar.tsx +39 -24
  647. package/src/interfaces/web/src/components/layout/ProjectSidebar.tsx +253 -58
  648. package/src/interfaces/web/src/components/memory/MemoryBrowser.tsx +94 -47
  649. package/src/interfaces/web/src/components/routines/ExecutionsList.tsx +202 -90
  650. package/src/interfaces/web/src/components/routines/RoutineDetail.tsx +28 -6
  651. package/src/interfaces/web/src/components/routines/RoutineEditor.tsx +16 -5
  652. package/src/interfaces/web/src/components/routines/RoutineList.tsx +49 -9
  653. package/src/interfaces/web/src/components/routines/VarTextarea.tsx +1 -1
  654. package/src/interfaces/web/src/components/routines/runChat.ts +121 -0
  655. package/src/interfaces/web/src/components/sessions/SessionDetail.tsx +148 -0
  656. package/src/interfaces/web/src/components/sessions/SessionTerminal.tsx +98 -0
  657. package/src/interfaces/web/src/components/settings/AccessPanel.tsx +205 -0
  658. package/src/interfaces/web/src/components/settings/DefaultRouterCard.tsx +246 -101
  659. package/src/interfaces/web/src/components/settings/DesktopSettingsPanel.tsx +36 -2
  660. package/src/interfaces/web/src/components/settings/DevicesPanel.tsx +19 -6
  661. package/src/interfaces/web/src/components/settings/EmbedProviderList.tsx +274 -0
  662. package/src/interfaces/web/src/components/settings/EnginesPanel.tsx +26 -6
  663. package/src/interfaces/web/src/components/settings/MemoryPanel.tsx +118 -119
  664. package/src/interfaces/web/src/components/settings/NudgePanel.tsx +4 -3
  665. package/src/interfaces/web/src/components/settings/PairDeviceDialog.tsx +15 -4
  666. package/src/interfaces/web/src/components/settings/PanelPrefs.tsx +374 -0
  667. package/src/interfaces/web/src/components/settings/ProfilePanel.tsx +70 -2
  668. package/src/interfaces/web/src/components/settings/RoutingPanel.tsx +2 -1
  669. package/src/interfaces/web/src/components/settings/SkillsInspectorPanel.tsx +102 -43
  670. package/src/interfaces/web/src/components/settings/SkillsManager.tsx +76 -21
  671. package/src/interfaces/web/src/components/settings/SkillsSettings.tsx +10 -3
  672. package/src/interfaces/web/src/components/settings/SuperAgentPanel.tsx +8 -0
  673. package/src/interfaces/web/src/components/settings/TelegramChannelsPanel.tsx +11 -2
  674. package/src/interfaces/web/src/components/settings/TelegramContactsPanel.tsx +19 -8
  675. package/src/interfaces/web/src/components/settings/TelegramRolesPanel.tsx +12 -2
  676. package/src/interfaces/web/src/components/settings/WebPanel.tsx +22 -31
  677. package/src/interfaces/web/src/components/settings/providers/ProviderCard.tsx +15 -3
  678. package/src/interfaces/web/src/components/settings/providers/ProviderModal.tsx +97 -66
  679. package/src/interfaces/web/src/components/settings/providers/ProviderTestDialog.tsx +150 -0
  680. package/src/interfaces/web/src/components/settings/providers/typeStyles.ts +67 -25
  681. package/src/interfaces/web/src/components/settings/providers/types.ts +3 -0
  682. package/src/interfaces/web/src/components/tasks/TaskBoard.tsx +201 -0
  683. package/src/interfaces/web/src/components/tasks/TaskColumnsDialog.tsx +243 -0
  684. package/src/interfaces/web/src/components/tasks/TaskComments.tsx +167 -0
  685. package/src/interfaces/web/src/components/tasks/TaskDetail.tsx +335 -0
  686. package/src/interfaces/web/src/components/tasks/TaskFormDialog.tsx +406 -0
  687. package/src/interfaces/web/src/components/tasks/TaskList.tsx +258 -0
  688. package/src/interfaces/web/src/components/tasks/TaskSubtasks.tsx +126 -0
  689. package/src/interfaces/web/src/components/tasks/columns.ts +51 -0
  690. package/src/interfaces/web/src/components/tasks/taskStatus.tsx +159 -34
  691. package/src/interfaces/web/src/components/tasks/taskViewPrefs.ts +73 -0
  692. package/src/interfaces/web/src/components/tasks/useTaskColumns.ts +31 -0
  693. package/src/interfaces/web/src/components/ui/chat-input.tsx +136 -12
  694. package/src/interfaces/web/src/components/ui/context-menu.tsx +15 -198
  695. package/src/interfaces/web/src/components/ui/dialog.tsx +3 -2
  696. package/src/interfaces/web/src/components/ui/filter-chips.tsx +4 -0
  697. package/src/interfaces/web/src/components/ui/popover.tsx +14 -49
  698. package/src/interfaces/web/src/components/ui/sheet.tsx +2 -1
  699. package/src/interfaces/web/src/components/ui/spinner.tsx +2 -1
  700. package/src/interfaces/web/src/components/ui.tsx +62 -23
  701. package/src/interfaces/web/src/components/voice/VoiceProviderList.tsx +2 -1
  702. package/src/interfaces/web/src/components/voice/VoiceProviderModal.tsx +66 -8
  703. package/src/interfaces/web/src/components/voice/VoiceQvoxInstallCard.tsx +63 -0
  704. package/src/interfaces/web/src/components/voice/VoiceQvoxStatusCard.tsx +51 -0
  705. package/src/interfaces/web/src/components/voice/VoiceSttCard.tsx +4 -3
  706. package/src/interfaces/web/src/components/voice/VoiceTestCard.tsx +38 -4
  707. package/src/interfaces/web/src/constants/index.ts +1 -0
  708. package/src/interfaces/web/src/hooks/useChannelPrefs.ts +39 -0
  709. package/src/interfaces/web/src/hooks/useChat.ts +1092 -85
  710. package/src/interfaces/web/src/hooks/useChatActivity.ts +24 -0
  711. package/src/interfaces/web/src/hooks/useInbox.ts +26 -4
  712. package/src/interfaces/web/src/hooks/useLiveMessages.ts +16 -0
  713. package/src/interfaces/web/src/hooks/useOllamaModels.ts +79 -0
  714. package/src/interfaces/web/src/hooks/useRecorder.ts +198 -0
  715. package/src/interfaces/web/src/hooks/useTokenBootstrap.ts +23 -6
  716. package/src/interfaces/web/src/i18n/en.ts +832 -175
  717. package/src/interfaces/web/src/i18n/es.ts +841 -188
  718. package/src/interfaces/web/src/lib/api/agents.ts +23 -4
  719. package/src/interfaces/web/src/lib/api/code.ts +17 -0
  720. package/src/interfaces/web/src/lib/api/commitments.ts +7 -1
  721. package/src/interfaces/web/src/lib/api/conversations.ts +38 -11
  722. package/src/interfaces/web/src/lib/api/embeddings.ts +3 -0
  723. package/src/interfaces/web/src/lib/api/engines.ts +14 -0
  724. package/src/interfaces/web/src/lib/api/groups.ts +93 -0
  725. package/src/interfaces/web/src/lib/api/images.ts +193 -0
  726. package/src/interfaces/web/src/lib/api/inbox.ts +29 -5
  727. package/src/interfaces/web/src/lib/api/integrations.ts +9 -0
  728. package/src/interfaces/web/src/lib/api/media.ts +126 -0
  729. package/src/interfaces/web/src/lib/api/net.ts +44 -0
  730. package/src/interfaces/web/src/lib/api/profiles.ts +12 -0
  731. package/src/interfaces/web/src/lib/api/projects.ts +9 -1
  732. package/src/interfaces/web/src/lib/api/routines.ts +9 -1
  733. package/src/interfaces/web/src/lib/api/sessions.ts +18 -0
  734. package/src/interfaces/web/src/lib/api/skills.ts +8 -0
  735. package/src/interfaces/web/src/lib/api/super_agent.ts +3 -0
  736. package/src/interfaces/web/src/lib/api/tasks.ts +46 -6
  737. package/src/interfaces/web/src/lib/api/tools.ts +2 -0
  738. package/src/interfaces/web/src/lib/api/transcribe.ts +31 -0
  739. package/src/interfaces/web/src/lib/api/turns.ts +20 -0
  740. package/src/interfaces/web/src/lib/api/voice.ts +72 -2
  741. package/src/interfaces/web/src/lib/api.ts +3 -0
  742. package/src/interfaces/web/src/lib/channels.ts +214 -0
  743. package/src/interfaces/web/src/lib/chat-activity.ts +175 -0
  744. package/src/interfaces/web/src/lib/chat-prefs.ts +48 -0
  745. package/src/interfaces/web/src/lib/code-context.ts +0 -2
  746. package/src/interfaces/web/src/lib/http.ts +51 -17
  747. package/src/interfaces/web/src/lib/inbox-selection.ts +29 -0
  748. package/src/interfaces/web/src/lib/live.ts +252 -0
  749. package/src/interfaces/web/src/lib/net.ts +211 -0
  750. package/src/interfaces/web/src/lib/notify.ts +331 -0
  751. package/src/interfaces/web/src/lib/projectNav.ts +40 -0
  752. package/src/interfaces/web/src/lib/pwa.ts +115 -0
  753. package/src/interfaces/web/src/lib/qvox.ts +24 -0
  754. package/src/interfaces/web/src/lib/slug.ts +3 -0
  755. package/src/interfaces/web/src/lib/tone.ts +150 -0
  756. package/src/interfaces/web/src/main.tsx +15 -4
  757. package/src/interfaces/web/src/screens/ApxAdminScreen.tsx +33 -11
  758. package/src/interfaces/web/src/screens/InboxScreen.tsx +126 -71
  759. package/src/interfaces/web/src/screens/ProjectScreen.tsx +8 -4
  760. package/src/interfaces/web/src/screens/SettingsScreen.tsx +7 -4
  761. package/src/interfaces/web/src/screens/base/AgentDefaultsTab.tsx +30 -9
  762. package/src/interfaces/web/src/screens/base/CommitmentsTab.tsx +150 -168
  763. package/src/interfaces/web/src/screens/base/LogsTab.tsx +8 -7
  764. package/src/interfaces/web/src/screens/base/SessionsTab.tsx +99 -37
  765. package/src/interfaces/web/src/screens/base/WorkspacesTab.tsx +1 -1
  766. package/src/interfaces/web/src/screens/mobile/MobileChat.tsx +85 -0
  767. package/src/interfaces/web/src/screens/mobile/MobileChatList.tsx +244 -0
  768. package/src/interfaces/web/src/screens/mobile/MobileCommitments.tsx +350 -0
  769. package/src/interfaces/web/src/screens/mobile/MobileScreen.tsx +138 -0
  770. package/src/interfaces/web/src/screens/mobile/MobileTabBar.tsx +105 -0
  771. package/src/interfaces/web/src/screens/mobile/MobileTasks.tsx +407 -0
  772. package/src/interfaces/web/src/screens/mobile/NewChatSheet.tsx +313 -0
  773. package/src/interfaces/web/src/screens/mobile/mobileList.tsx +194 -0
  774. package/src/interfaces/web/src/screens/mobile/routes.ts +239 -0
  775. package/src/interfaces/web/src/screens/modules/CodeScreen.tsx +135 -64
  776. package/src/interfaces/web/src/screens/modules/DeckScreen.tsx +0 -1
  777. package/src/interfaces/web/src/screens/modules/ImagesScreen.tsx +172 -0
  778. package/src/interfaces/web/src/screens/modules/VoiceScreen.tsx +36 -4
  779. package/src/interfaces/web/src/screens/project/AgentBrainGraph.tsx +117 -30
  780. package/src/interfaces/web/src/screens/project/AgentDetailScreen.tsx +537 -92
  781. package/src/interfaces/web/src/screens/project/AgentsTab.tsx +344 -93
  782. package/src/interfaces/web/src/screens/project/ArtifactsTab.tsx +1 -1
  783. package/src/interfaces/web/src/screens/project/ChatTab.tsx +1160 -94
  784. package/src/interfaces/web/src/screens/project/IntegrationsTab.tsx +3 -2
  785. package/src/interfaces/web/src/screens/project/McpsTab.tsx +62 -14
  786. package/src/interfaces/web/src/screens/project/Overview.tsx +36 -15
  787. package/src/interfaces/web/src/screens/project/RoutinesTab.tsx +93 -8
  788. package/src/interfaces/web/src/screens/project/SkillsTab.tsx +4 -1
  789. package/src/interfaces/web/src/screens/project/StructureTab.tsx +5 -4
  790. package/src/interfaces/web/src/screens/project/TasksTab.tsx +351 -129
  791. package/src/interfaces/web/src/screens/project/VarsTab.tsx +17 -5
  792. package/src/interfaces/web/src/styles.css +106 -31
  793. package/src/interfaces/web/src/types/daemon.ts +246 -2
  794. package/src/interfaces/web/src/vite-env.d.ts +20 -0
  795. package/src/interfaces/tui/plugin/command-shim.ts +0 -109
  796. package/src/interfaces/web/components.json +0 -25
  797. package/src/interfaces/web/dist/assets/index-CvEoGtTf.js +0 -849
  798. package/src/interfaces/web/dist/assets/index-CvEoGtTf.js.map +0 -1
  799. package/src/interfaces/web/dist/assets/index-DzBBXFaO.css +0 -1
  800. package/src/interfaces/web/src/components/tasks/TaskDetailPanel.tsx +0 -142
  801. package/src/interfaces/web/src/components/ui/accordion.tsx +0 -72
  802. package/src/interfaces/web/src/components/ui/alert-dialog.tsx +0 -187
  803. package/src/interfaces/web/src/components/ui/alert.tsx +0 -76
  804. package/src/interfaces/web/src/components/ui/aspect-ratio.tsx +0 -22
  805. package/src/interfaces/web/src/components/ui/avatar.tsx +0 -107
  806. package/src/interfaces/web/src/components/ui/breadcrumb.tsx +0 -125
  807. package/src/interfaces/web/src/components/ui/button-group.tsx +0 -87
  808. package/src/interfaces/web/src/components/ui/calendar.tsx +0 -221
  809. package/src/interfaces/web/src/components/ui/card.tsx +0 -103
  810. package/src/interfaces/web/src/components/ui/carousel.tsx +0 -242
  811. package/src/interfaces/web/src/components/ui/chart.tsx +0 -371
  812. package/src/interfaces/web/src/components/ui/checkbox.tsx +0 -29
  813. package/src/interfaces/web/src/components/ui/collapsible.tsx +0 -19
  814. package/src/interfaces/web/src/components/ui/combobox.tsx +0 -295
  815. package/src/interfaces/web/src/components/ui/command.tsx +0 -196
  816. package/src/interfaces/web/src/components/ui/direction.tsx +0 -4
  817. package/src/interfaces/web/src/components/ui/drawer.tsx +0 -134
  818. package/src/interfaces/web/src/components/ui/empty.tsx +0 -104
  819. package/src/interfaces/web/src/components/ui/field.tsx +0 -236
  820. package/src/interfaces/web/src/components/ui/hover-card.tsx +0 -51
  821. package/src/interfaces/web/src/components/ui/input-otp.tsx +0 -85
  822. package/src/interfaces/web/src/components/ui/item.tsx +0 -201
  823. package/src/interfaces/web/src/components/ui/menubar.tsx +0 -280
  824. package/src/interfaces/web/src/components/ui/native-select.tsx +0 -61
  825. package/src/interfaces/web/src/components/ui/navigation-menu.tsx +0 -168
  826. package/src/interfaces/web/src/components/ui/pagination.tsx +0 -130
  827. package/src/interfaces/web/src/components/ui/progress.tsx +0 -83
  828. package/src/interfaces/web/src/components/ui/radio-group.tsx +0 -36
  829. package/src/interfaces/web/src/components/ui/resizable.tsx +0 -50
  830. package/src/interfaces/web/src/components/ui/scroll-area.tsx +0 -53
  831. package/src/interfaces/web/src/components/ui/sidebar.tsx +0 -726
  832. package/src/interfaces/web/src/components/ui/slider.tsx +0 -52
  833. package/src/interfaces/web/src/components/ui/sonner.tsx +0 -49
  834. package/src/interfaces/web/src/components/ui/table.tsx +0 -116
  835. package/src/interfaces/web/src/components/ui/toggle-group.tsx +0 -87
  836. package/src/interfaces/web/src/components/ui/toggle.tsx +0 -45
  837. package/src/interfaces/web/src/hooks/use-mobile.ts +0 -19
  838. package/src/interfaces/web/src/screens/base/GlobalTasksTab.tsx +0 -161
@@ -13,12 +13,12 @@ export const es = {
13
13
  every_n_hours: "cada {n} horas, al minuto {minute}",
14
14
  every_n_minutes: "cada {n} minutos",
15
15
  every_minute: "cada minuto",
16
- every_label: "cada N horas en vez de una hora fija",
17
- use_cron: "editar como cron",
18
- use_picker: "usar el selector",
19
- preset_every_day: "todos los días",
20
- preset_weekdays: "días de semana",
21
- preset_weekends: "fin de semana",
16
+ every_label: "Cada N horas en vez de una hora fija",
17
+ use_cron: "Editar como cron",
18
+ use_picker: "Usar el selector",
19
+ preset_every_day: "Todos los días",
20
+ preset_weekdays: "Días de semana",
21
+ preset_weekends: "Fin de semana",
22
22
  day_short: { sun: "Dom", mon: "Lun", tue: "Mar", wed: "Mié", thu: "Jue", fri: "Vie", sat: "Sáb" },
23
23
  },
24
24
  when: {
@@ -47,6 +47,7 @@ export const es = {
47
47
  disable: "Deshabilitar",
48
48
  open: "Abrir",
49
49
  close: "Cerrar",
50
+ more: "Más acciones",
50
51
  confirm: "Confirmar",
51
52
  optional: "(opcional)",
52
53
  none: "—",
@@ -68,6 +69,8 @@ export const es = {
68
69
  pager_page: "Página {page} de {total}",
69
70
  pager_range: "{from}–{to} de {total}",
70
71
  pager_per_page:"Por página",
72
+ all: "Todas",
73
+ actions: "Acciones",
71
74
  },
72
75
  daemon: {
73
76
  connecting: "Conectando con el daemon…",
@@ -75,9 +78,9 @@ export const es = {
75
78
  unreachable_hint:"Arrancá APX con `apx daemon start` y refrescá.",
76
79
  version: "Versión",
77
80
  uptime: "Uptime",
78
- status: "Status",
79
- running: "running",
80
- down: "down",
81
+ status: "Estado",
82
+ running: "Activo",
83
+ down: "Caído",
81
84
  reload_hint: "POST /admin/reload — relee ~/.apx/config.json sin reiniciar.",
82
85
  shutdown_confirm: "¿Apagar el daemon? Las próximas requests fallarán hasta levantarlo de nuevo.",
83
86
  shutdown_done: "Daemon detenido.",
@@ -111,12 +114,19 @@ export const es = {
111
114
  more_projects: "{count} más",
112
115
  collapse_projects: "Ocultar proyectos",
113
116
  expand_projects: "Mostrar proyectos",
117
+ project_settings: "Configuración del proyecto",
118
+ copy_path: "Copiar ruta",
119
+ path_copied: "Ruta copiada.",
120
+ copy_failed: "No se pudo copiar.",
114
121
  modules: {
115
122
  voice: "Voces",
123
+ images: "Imágenes",
116
124
  desktop: "Escritorio",
117
125
  deck: "Deck",
118
126
  code: "Code",
119
127
  web: "Web",
128
+ // Caption under the rail icon — the full name doesn't fit in 3.6rem.
129
+ inbox_short: "Chats",
120
130
  },
121
131
  },
122
132
  topbar: {
@@ -150,9 +160,9 @@ export const es = {
150
160
  telegram_polling_started: "Polling iniciado.",
151
161
  telegram_polling_stopped: "Polling detenido.",
152
162
  telegram_channel_removed: "Canal eliminado.",
153
- agents_badge: "agents",
154
- engine_badge: "",
155
- engine_badge_no: "no",
163
+ agents_badge: "Agentes",
164
+ engine_badge: "",
165
+ engine_badge_no: "No",
156
166
  base_label: "Base",
157
167
  },
158
168
  add_project: {
@@ -169,6 +179,63 @@ export const es = {
169
179
  browser_unavailable: "Explorador no disponible hasta reiniciar daemon. Pegá ruta manual.",
170
180
  no_folders: "Sin carpetas.",
171
181
  },
182
+ mobile: {
183
+ back: "Volver",
184
+ sessions: "Sesiones",
185
+ no_sessions: "Sin sesiones guardadas todavía.",
186
+ live_session: "Sesión nueva",
187
+ no_messages: "Sin mensajes todavía",
188
+ team_members: "{count} agentes",
189
+ empty: "Todavía no hablaste con ningún agente.",
190
+ prefs: "Preferencias",
191
+ app_options: "Opciones de app",
192
+ new_chat: "Nuevo chat",
193
+ new_chat_title: "Empezar un chat",
194
+ new_chat_empty: "No se encontraron agentes.",
195
+ group_slug_clash: "Ya elegiste otro «{slug}» de otro proyecto — el @slug tiene que ser único en la sala.",
196
+
197
+ // La barra de abajo: las tres cosas que se miran de parado.
198
+ tab_chats: "Chats",
199
+ tab_tasks: "Tasks",
200
+ tab_commitments: "Promesas",
201
+ tasks_search: "Buscar tasks",
202
+ commitments_search: "Buscar promesas",
203
+ load_more: "Ver {count} más",
204
+ // Cuándo vence algo. Se compara por día del calendario, no por instante:
205
+ // una task que vence hoy a medianoche no está vencida a las 9 de la mañana.
206
+ due: {
207
+ overdue: "Vencidas",
208
+ today: "Hoy",
209
+ tomorrow: "Mañana",
210
+ week: "Esta semana",
211
+ later: "Más adelante",
212
+ none: "Sin fecha",
213
+ },
214
+ commitment_move: "Reprogramar",
215
+ commitment_moved_toast: "Fecha reprogramada.",
216
+ commitment_closed: "Cerrada. Reabrirla es acordar una fecha nueva con la persona — eso se hace en el panel.",
217
+ },
218
+ notify: {
219
+ title: "Notificaciones",
220
+ on: "Notificaciones activadas",
221
+ off: "Activar notificaciones",
222
+ on_hint: "Cuando un agente escribe y no estás en su conversación, este dispositivo te avisa.",
223
+ off_hint: "El panel se actualiza solo y en silencio; con la app en segundo plano no te llega nada.",
224
+ denied: "Este navegador está bloqueando las notificaciones del sitio. Habilitalas desde el candado al lado de la dirección y recargá.",
225
+ insecure: "Las notificaciones necesitan https. Prendé el túnel con `apx panel tailscale on` y abrí el panel en esa dirección.",
226
+ unsupported: "Este navegador no tiene notificaciones.",
227
+ native_off: "Notificaciones desactivadas",
228
+ native_on_hint: "Gestionadas por APX Android. Tocá para abrir ajustes de notificaciones del sistema.",
229
+ native_off_hint: "Activá notificaciones de APX en ajustes del sistema Android.",
230
+ test: "Probar",
231
+ test_title: "APX",
232
+ test_body: "Si ves esto, las notificaciones de este dispositivo funcionan.",
233
+ test_failed: "No se pudo mostrar. Revisá que el navegador tenga permiso a nivel sistema.",
234
+ nudge: "¿Te aviso cuando un agente escriba?",
235
+ nudge_yes: "Activar",
236
+ native_channels_hint: "Qué te interrumpe en este celular. Telegram arranca apagado — la app ya está acá y avisa sola. Lo apagado igual se lee en el chat.",
237
+ channels_hint: "Qué canales pueden sonar en este dispositivo. En el celu Telegram arranca apagado — la app ya está ahí.",
238
+ },
172
239
  inbox: {
173
240
  search: "Buscar",
174
241
  no_match: "No coincide nada",
@@ -179,11 +246,25 @@ export const es = {
179
246
  subtitle:
180
247
  "Cada agente como una conversación, lo más reciente primero.",
181
248
  empty: "Todavía no hablaste con ningún agente.",
182
- pinned: "principal",
183
249
  show_quiet: "Ver los que no hablaron",
184
250
  no_reply_yet: "(sin respuestas todavía)",
185
251
  },
186
252
 
253
+ // Filtros y etiquetas de canal: cuáles de los lugares donde puede pasar una
254
+ // conversación quiere ver y escuchar ESTE dispositivo (lib/channels.ts).
255
+ channels: {
256
+ filter: "Canales",
257
+ all: "Todos",
258
+ n_of_m: "{n} de {total}",
259
+ select_all: "Seleccionar todos",
260
+ none: "Ninguno",
261
+ a2a: "Agente ↔ agente",
262
+ group: "Grupos",
263
+ other: "Sin canal",
264
+ mobility: "Viajes y mandados",
265
+ all_hidden: "Acá están todos los canales apagados. Tocá uno para volver a verlo.",
266
+ },
267
+
187
268
  settings: {
188
269
  title: "Settings",
189
270
  subtitle: "Preferencias del panel + diagnóstico del daemon local.",
@@ -222,8 +303,8 @@ export const es = {
222
303
  devices_pair_waiting: "Esperando que el dispositivo confirme…",
223
304
  devices_pair_done: "Dispositivo vinculado ✓",
224
305
  devices_pair_localhost_only: "Solo se pueden generar códigos desde la PC del daemon (localhost).",
225
- devices_last_seen: "visto:",
226
- devices_never: "nunca",
306
+ devices_last_seen: "Visto:",
307
+ devices_never: "Nunca",
227
308
  devices_revoke: "Revocar",
228
309
  account_section: "Cuenta",
229
310
  agents_section: "Agentes & modelos",
@@ -253,7 +334,7 @@ export const es = {
253
334
  vanilla_hint:
254
335
  "No hay ningún perfil activo. APX se comporta exactamente como siempre — el prompt del super-agente es idéntico al de una instalación limpia.",
255
336
  none_available: "No hay perfiles disponibles todavía.",
256
- active: "activo",
337
+ active: "Activo",
257
338
  activate: "Activar",
258
339
  replace_active: "Reemplazar el activo",
259
340
  deactivate: "Desactivar",
@@ -281,6 +362,12 @@ export const es = {
281
362
  no_settings: "Este perfil no tiene nada configurable.",
282
363
  settings_locked: "Activá el perfil para poder cambiar su configuración.",
283
364
  doctor_vanilla: "Sin perfil activo. APX se comporta como siempre.",
365
+ readopt_all: "Re-sincronizar rutinas",
366
+ readopt_one: "Re-adoptar",
367
+ readopt_title: "Re-adoptar del paquete",
368
+ readopt_confirm:
369
+ "Vuelve a instalar las rutinas afectadas desde el paquete, descartando tus ediciones locales y arreglando la procedencia. Las que no tocaste no cambian.",
370
+ readopt_done: "Rutinas re-adoptadas",
284
371
  },
285
372
 
286
373
  nudge: {
@@ -332,6 +419,8 @@ export const es = {
332
419
  model: "Modelo activo",
333
420
  model_hint: "Ej: anthropic:claude-sonnet-4.5, ollama:gemma2:9b",
334
421
  permission_mode: "Permission mode",
422
+ avatar: "Avatar",
423
+ avatar_hint: "Actualiza inmediatamente las mascotas de Desktop y Android.",
335
424
  system: "Prompt extra (system)",
336
425
  system_hint: "Texto que se prepende al system prompt base.",
337
426
  system_ph: "(Vacío = se usa el prompt base de core/agent/prompts/super-agent-base.md)",
@@ -399,9 +488,10 @@ export const es = {
399
488
  nav: {
400
489
  overview: "Overview",
401
490
  chat: "Chat",
491
+ group: "Grupo",
402
492
  config: "Config",
403
493
  telegram: "Telegram",
404
- agents: "Agents",
494
+ agents: "Agentes",
405
495
  routines: "Rutinas",
406
496
  tasks: "Tasks",
407
497
  commitments: "Compromisos",
@@ -423,15 +513,59 @@ export const es = {
423
513
  config: "Config",
424
514
  },
425
515
 
516
+ groups: {
517
+ title: "Grupos",
518
+ new: "Nuevo",
519
+ new_group: "Nuevo grupo…",
520
+ new_hint: "Varios agentes en una sala",
521
+ pick_members: "Elegí los miembros",
522
+ add_member: "Sumar al grupo",
523
+ make_group: "Sumar a alguien (hacer grupo)",
524
+ remove_member: "Echar del grupo",
525
+ all_in: "Ya están todos.",
526
+ joined_chat: "{name} se sumó al chat",
527
+ left_chat: "{name} salió del chat",
528
+ new_title: "Nuevo chat grupal",
529
+ empty: "Todavía no hay grupos.",
530
+ pick: "Elegí un grupo o creá uno nuevo.",
531
+ no_messages: "Sin mensajes",
532
+ name_label: "Nombre del grupo",
533
+ name_ph: "Opcional",
534
+ members_label: "Miembros",
535
+ members_hint: "tocá para sumar; el número es el orden",
536
+ first_hint: "Si escribís sin mencionar a nadie, contesta la primera del grupo.",
537
+ create: "Crear grupo",
538
+ start_hint: "Escribí para arrancar. Mencioná con @ para hablarle a alguien puntual.",
539
+ composer_ph: "Mensaje… @mención · /invite nombre hola…",
540
+ invite_ph: "Mensaje… /invite nombre hola…",
541
+ mention_pick: "Mencionar",
542
+ invite_cmd: "/invite",
543
+ suggest_hint: "↑↓ mover · Enter elegir · Esc cerrar",
544
+ cmd_menu: "Comandos",
545
+ cmd_invite_label: "Invitar",
546
+ cmd_invite_hint: "Sumá a alguien y escribí el mensaje de bienvenida",
547
+ cmd_new_label: "Nueva sesión",
548
+ cmd_new_hint: "Empezá un chat limpio con este agente",
549
+ cmd_tools_label: "Tools",
550
+ cmd_tools_hint: "Mostrar u ocultar cards de tools en el hilo",
551
+ you: "Vos",
552
+ you_initial: "V",
553
+ pulled_by: "traído por {name}",
554
+ deleted: "Grupo borrado",
555
+ not_found: "Grupo no encontrado.",
556
+ delete_title: "Borrar grupo",
557
+ delete_confirm: "¿Borrar el grupo “{title}”? La conversación se pierde.",
558
+ },
559
+
426
560
  overview: {
427
561
  tasks_open: "Tasks abiertas",
428
562
  routines: "Rutinas",
429
563
  routines_active: "Rutinas activas",
430
- agents: "Agents",
564
+ agents: "Agentes",
431
565
  mcps: "MCPs",
432
566
  artifacts: "Artifacts",
433
567
  chat: "Chat (super-agent)",
434
- chat_value: "abrir",
568
+ chat_value: "Abrir",
435
569
  roster: "Equipo",
436
570
  no_agents: "Todavía no hay agentes.",
437
571
  orchestrators: "Orquestadores",
@@ -461,20 +595,39 @@ export const es = {
461
595
  send: "Enviar",
462
596
  stop: "Stop",
463
597
  new_session: "Nueva sesión",
598
+ rename: "Renombrar",
599
+ rename_title: "Renombrar la sesión",
600
+ rename_label: "Nombre",
601
+ rename_hint: "Vacío vuelve al nombre que sale de lo primero que se dijo.",
602
+ renamed: "Sesión renombrada.",
603
+ archive: "Archivar",
604
+ unarchive: "Desarchivar",
605
+ archived_ok: "Sesión archivada.",
606
+ unarchived_ok:"Sesión desarchivada.",
607
+ archived_group:"Archivadas",
608
+ new_session_confirm_title: "Empezar una sesión nueva",
609
+ new_session_confirm_desc: "Arrancás un hilo en blanco con el mismo agente. La conversación actual queda guardada y volvés a ella desde la lista.",
464
610
  delete: "Borrar",
465
611
  delete_confirm_title: "Borrar chat",
466
612
  delete_confirm_desc: "Esta acción no se puede deshacer. Se elimina para siempre el historial de este chat.",
467
613
  deleted: "Chat borrado.",
614
+ group_regen_title: "Regenerar la respuesta",
615
+ group_regen_confirm: "Regenerar",
616
+ group_edit_title: "Editar y reenviar",
617
+ group_edit_confirm: "Editar y reenviar",
618
+ group_rewind_desc: "Esto pisa {n} mensaje(s) más nuevos del grupo. No se puede deshacer.",
468
619
  meta_created: "Creado {date} · {channel}",
469
620
  meta_new: "Chat nuevo · {channel}",
470
- copy: "copiar",
621
+ copy: "Copiar",
471
622
  copied: "Copiado.",
472
623
  stopped_marker: " [detenido]",
473
624
  create_agent: "Crear agente",
625
+ view_agent: "Ver agente",
474
626
  create_agent_title: "Crear agente",
475
627
  create_agent_desc: "Necesario para iniciar chat en proyecto.",
476
- role_label: "rol",
477
- model_label: "modelo",
628
+ slug_label: "Slug",
629
+ role_label: "Rol",
630
+ model_label: "Modelo",
478
631
  model_hint: "ej. openai:gpt-5, groq:llama-3.3-70b-versatile",
479
632
  master_label: "Agente master",
480
633
  list: {
@@ -485,27 +638,24 @@ export const es = {
485
638
  empty: "No hay conversaciones todavía. Arrancá una desde la derecha.",
486
639
  count: "{n} en total",
487
640
  pick_agent: "Elegí un agente",
641
+ new_single: "Chat",
642
+ new_single_hint: "Con un agente",
488
643
  },
489
644
  },
490
645
 
491
646
  tasks: {
492
647
  title: "Tasks (TODOs)",
493
648
  subtitle: "Append-only JSONL en ~/.apx/projects/<id>/tasks/.",
494
- add: "agregar",
495
- add_label: "Nueva task",
496
649
  add_placeholder: "ej. revisar bug del scroll",
497
650
  empty: "No hay tasks {state}.",
498
651
  empty_open: "No hay tasks abiertas.",
499
652
  created: "Task creada.",
500
- create_error: "no pude crear la task",
653
+ create_error: "No pude crear la task",
501
654
  done: "✓ done",
502
655
  drop: "✗ drop",
503
656
  reopen: "↻ reopen",
504
- due: "vence",
657
+ due: "Vence",
505
658
  via: "via",
506
- aria_done: "marcar done",
507
- aria_drop: "descartar task",
508
- aria_reopen: "reabrir task",
509
659
  },
510
660
 
511
661
  global_tasks: {
@@ -519,11 +669,11 @@ export const es = {
519
669
  field_project: "Proyecto",
520
670
 
521
671
  field_due: "Vence",
522
- any_status: "cualquier estado",
672
+ any_status: "Cualquier estado",
523
673
  title: "Tasks (todos los proyectos)",
524
674
  subtitle: "Tareas agregadas de todos los proyectos registrados.",
525
675
  empty: "Sin tasks.",
526
- due: "vence",
676
+ due: "Vence",
527
677
  go_project: "Ir al proyecto",
528
678
  },
529
679
 
@@ -551,17 +701,53 @@ export const es = {
551
701
  title: "Compromisos",
552
702
  subtitle: "Qué prometiste, a quién y para cuándo. Aparte de las tareas: acá hay alguien esperando.",
553
703
  empty: "Nada prometido.",
554
- overdue: "vencía",
555
704
  overdue_only: "Pasados de fecha",
556
705
  no_date: "sin fecha acordada",
557
- moved: "movido",
706
+ moved: "Movido",
558
707
  mark_kept: "Cumplido",
559
708
  mark_missed: "Incumplido",
709
+ mark_dropped: "Eliminar",
710
+ dropped_toast: "Compromiso eliminado.",
711
+ confirm_kept_title: "¿Marcar como cumplido?",
712
+ confirm_kept_desc: "Se marca cumplido lo que le prometiste a {who}.",
713
+ confirm_missed_title: "¿Marcar como incumplido?",
714
+ confirm_missed_desc: "Se marca incumplido lo que le prometiste a {who}. Queda registrado.",
715
+ confirm_dropped_title: "¿Eliminar el compromiso?",
716
+ confirm_dropped_desc: "Se elimina lo que le prometiste a {who}. Es para cuando lo cargaste por error.",
717
+ select_row: "Seleccionar a {who}",
718
+ bulk_selected: "{count} seleccionados",
719
+ bulk_clear: "Limpiar selección",
720
+ confirm_bulk_kept_title: "¿Marcar {count} como cumplidos?",
721
+ confirm_bulk_kept_desc: "Se marcan {count} compromisos como cumplidos.",
722
+ confirm_bulk_dropped_title: "¿Eliminar {count} compromisos?",
723
+ confirm_bulk_dropped_desc: "Se eliminan {count} compromisos. Es para los que cargaste por error.",
724
+ bulk_kept_toast: "{count} compromisos marcados como cumplidos.",
725
+ bulk_dropped_toast: "{count} compromisos eliminados.",
726
+ created: "Compromiso registrado.",
727
+ edit_title: "Editar compromiso",
728
+ row_actions: "Acciones del compromiso",
729
+ list_title: "Compromisos",
730
+ detail_empty: "Elegí un compromiso de la lista.",
731
+ history_title: "Historial de fechas",
732
+ history_empty: "Nunca se movió la fecha.",
733
+ promised: "Prometido",
734
+ field_note: "Nota",
735
+ field_due_move_hint: "Cambiar la fecha queda registrado como reprogramación, con la fecha anterior en el historial.",
560
736
  state: {
561
- open: "abiertos",
562
- kept: "cumplidos",
563
- missed: "incumplidos",
564
- all: "todos",
737
+ open: "Abiertos",
738
+ kept: "Cumplidos",
739
+ missed: "Incumplidos",
740
+ dropped: "Eliminados",
741
+ all: "Todos",
742
+ },
743
+ // Singular, para la chapita de una fila (el bloque `state` es plural
744
+ // porque titula los filtros).
745
+ face: {
746
+ open: "Abierto",
747
+ overdue: "Vencido",
748
+ kept: "Cumplido",
749
+ missed: "Incumplido",
750
+ dropped: "Eliminado",
565
751
  },
566
752
  },
567
753
 
@@ -569,14 +755,14 @@ export const es = {
569
755
  title: "Heartbeats / Routines",
570
756
  subtitle: "Cron, every:Nm, once:ISO. Cada rutina dispara un agente o un shell.",
571
757
  empty: "Sin rutinas. Creá una arriba.",
572
- new: "nueva",
758
+ new: "Nueva",
573
759
  new_btn: "Nueva",
574
760
  delete_confirm: "Borrar rutina {name}?",
575
761
  delete_confirm_body: "Esta acción no se puede deshacer.",
576
762
  saved: "Rutina guardada.",
577
- paused: "pausada",
578
- next_run: "próxima:",
579
- last_run: "última:",
763
+ paused: "Pausada",
764
+ next_run: "Próxima:",
765
+ last_run: "Última:",
580
766
  enabled_hint: "Activa · corre según el intervalo",
581
767
  disabled_hint: "Pausada · solo con el botón Run",
582
768
  enabled_label: "Habilitada",
@@ -601,16 +787,27 @@ export const es = {
601
787
  block_command: "Comando",
602
788
  block_empty: "(vacío)",
603
789
  runs_title: "Ejecuciones",
790
+ // Una corrida en vuelo: en qué fase del pipeline está, y quién la pidió.
791
+ phase_pre: "Corriendo pre-comandos",
792
+ phase_agent: "Trabajando",
793
+ phase_delivery: "Entregando",
794
+ phase_post: "Corriendo post-comandos",
795
+ trigger_manual: "A mano",
796
+ trigger_schedule: "Por horario",
797
+ trigger_agent: "La pidió un agente",
798
+ live_waiting: "Arrancando…",
604
799
  runs_empty: "Sin ejecuciones todavía.",
605
800
  runs_close: "Cerrar",
606
801
  runs_no_detail: "Sin más detalle.",
607
802
  runs_output: "Salida",
608
- status_ok: "ok",
609
- status_error: "error",
610
- status_skipped: "salteada",
803
+ runs_chat: "Chat",
804
+ open_chat: "Ir al chat",
805
+ status_ok: "Ok",
806
+ status_error: "Error",
807
+ status_skipped: "Salteada",
611
808
  agent_field: "Agente (spec.agent)",
612
809
  agent_hint: "Quién ejecuta la rutina.",
613
- agent_loading: "cargando…",
810
+ agent_loading: "Cargando…",
614
811
  agent_pick: "— elegí un agente —",
615
812
  prompt_exec: "Prompt (spec.prompt)",
616
813
  prompt_exec_ph: "qué pendiente hay para hoy?",
@@ -628,26 +825,33 @@ export const es = {
628
825
  shell_hint: "Corre tal cual en el shell. Sin prompt ni pre/post.",
629
826
  hb_channel: "Canal (spec.channel)",
630
827
  hb_message: "Mensaje (spec.message)",
631
- name_required: "name requerido",
632
- save_error: "save falló",
633
- run_error: "run falló",
634
- toggle_error: "toggle falló",
635
- delete_error: "delete falló",
828
+ name_required: "Name requerido",
829
+ save_error: "Save falló",
830
+ run_error: "Run falló",
831
+ toggle_error: "Toggle falló",
832
+ delete_error: "Delete falló",
636
833
  run_success: "{name} disparada.",
637
834
  run_confirm: "¿Ejecutar la rutina {name} ahora?",
638
835
  run_confirm_body: "Corre la acción una vez, sin esperar al horario.",
836
+ select_row: "Seleccionar {name}",
837
+ bulk_selected: "{count} seleccionadas",
838
+ bulk_run: "Ejecutar",
839
+ bulk_clear: "Limpiar selección",
840
+ confirm_bulk_run_title: "¿Ejecutar {count} rutinas?",
841
+ confirm_bulk_run_desc: "Se ejecutan {count} rutinas ahora, sin esperar al horario.",
842
+ bulk_run_toast: "{count} rutinas ejecutadas.",
639
843
  running: "Ejecutando…",
640
- delete_success: "borrada.",
844
+ delete_success: "Borrada.",
641
845
  },
642
846
 
643
847
  agents: {
644
- title: "Agents",
848
+ title: "Agentes",
645
849
  subtitle: "Definidos en .apc/agents/<slug>.md.",
646
850
  subtitle_full: "Definidos en .apc/agents/<slug>.md. La memoria runtime vive en ~/.apx/projects/<id>/agents/<slug>/.",
647
851
  empty: "Sin agents. Agregá uno con <code>apx agent add</code> o el botón.",
648
852
  empty_text: "Sin agents. Agregá uno con `apx agent add` o el botón de arriba.",
649
853
  new: "Agente",
650
- created: "Agent {slug} creado.",
854
+ created: "Agente {slug} creado.",
651
855
  slug_invalid: "slug debe matchear /^[a-z][a-z0-9_-]*$/",
652
856
  hierarchy: "Jerarquía",
653
857
  list_view: "Lista",
@@ -655,38 +859,47 @@ export const es = {
655
859
  chat: "Chat",
656
860
  view: "Ver",
657
861
  orchestrator: "Orquestador",
658
- new_title: "Nuevo agent",
862
+ new_title: "Nuevo agente",
659
863
  new_desc: "POST /projects/:pid/agents — escribe .apc/agents/<slug>.md.",
660
- slug_label: "slug",
864
+ slug_label: "Slug",
661
865
  slug_ph: "cody",
662
- role_label: "role (opcional)",
866
+ role_label: "Rol (opcional)",
663
867
  role_ph: "code refactor",
664
- model_label: "model (opcional)",
868
+ model_label: "Modelo (opcional)",
665
869
  model_hint: "ej. ollama:gemma2:9b, openai:gpt-4o-mini",
666
- lang_label: "language (opcional)",
667
- desc_label: "description (opcional)",
870
+ lang_label: "Idioma (opcional)",
871
+ desc_label: "Descripción (opcional)",
668
872
  desc_ph: "Qué hace este agente…",
669
- skills_label: "skills (coma)",
873
+ skills_label: "Skills (coma)",
670
874
  skills_ph: "skill-a, skill-b",
671
- tools_label: "tools (coma)",
875
+ tools_label: "Tools (coma)",
672
876
  tools_ph: "tool-a, tool-b",
673
- parent_label: "reporta a (parent, opcional)",
877
+ parent_label: "Reporta a (parent, opcional)",
674
878
  parent_hint: "Subagente de un orquestador.",
675
879
  none_parent: "— ninguno —",
676
880
  master_label: "Orquestador (master)",
677
- create_success: "Agent {slug} creado.",
678
- create_error: "create falló",
881
+ create_success: "Agente {slug} creado.",
882
+ create_error: "Create falló",
679
883
  import_title: "Importar del vault",
680
884
  import_desc: "Plantillas en ~/.apx/agents. Se registran en este proyecto (.apc/agents/<slug>.md).",
681
885
  import_empty: "Sin plantillas en el vault.",
682
886
  import_success: "Importado: {slug}",
683
- import_already: "ya está",
887
+ import_already: "Ya está",
684
888
  import_btn: "Importar",
685
889
  },
686
890
 
687
891
  agent_detail: {
688
892
  not_found: "Agente no encontrado.",
689
893
  chat_btn: "Chat con {slug}",
894
+ clone_btn: "Clonar",
895
+ clone_hint: "Duplica este agente (prompt y memoria) con un nombre (n) para evitar duplicados.",
896
+ clone_success: "Clonado como {slug}",
897
+ slug_label: "Slug (identificador)",
898
+ slug_hint: "La clave del agente: nombra su archivo, su carpeta de memoria y su URL. Renombrar los mueve a todos.",
899
+ rename_btn: "Renombrar",
900
+ rename_from_name: "Usar el nombre: {slug}",
901
+ rename_confirm: "¿Renombrar «{from}» a «{to}»? Esto mueve el archivo del agente y su memoria/conversaciones, y reapunta los sub-agentes y rutinas que lo referencian.",
902
+ rename_success: "Renombrado a {slug}",
690
903
  reports_to: "↳ reporta a",
691
904
  no_threads: "Sin threads.",
692
905
  no_activity: "Sin actividad registrada.",
@@ -694,28 +907,40 @@ export const es = {
694
907
  subagents: "Subagentes",
695
908
  subagents_desc: "Agentes que reportan a este orquestador.",
696
909
  config_title: "Configuración del agente",
910
+ tab_config: "Config",
911
+ tab_prompt: "Prompt",
912
+ config_identity: "Identidad",
913
+ config_behavior: "Comportamiento y jerarquía",
914
+ config_behavior_desc: "Autonomía, línea de reporte y modelo forzado.",
915
+ config_capabilities: "Skills y tools",
697
916
  type_label: "Tipología (type)",
698
917
  area_label: "Área",
699
918
  area_hint: "ej. operaciones, marketing",
700
919
  area_ph: "operaciones",
701
- role_label: "Role",
920
+ role_label: "Rol",
702
921
  parent_label: "Reporta a (parent)",
703
922
  none_parent: "— ninguno —",
704
923
  model_label: "Modelo base",
705
- model_hint: "Vacío = usa el modelo del Router (default). Setealo solo para forzar un modelo a este agente.",
924
+ model_hint: "`inherit` = default del router (el chat puede forzar otro modelo en ese turno). Un `proveedor:modelo` pisa el campo.",
706
925
  model_ph: "(vacío = router default)",
926
+ model_router_default: "Router default",
927
+ model_provider_default: "{provider} · default",
928
+ model_unlisted: "no es de un provider configurado",
707
929
  skills_label: "Skills (coma)",
708
930
  bio_label: "Bio / descripción",
709
931
  system_label: "System prompt",
710
932
  system_hint: "Define personalidad y comportamiento (cuerpo del AGENT.md).",
933
+ prompt_lines: "{n} líneas",
934
+ prompt_empty: "Sin definir",
711
935
  master_label: "Orquestador (master)",
712
936
  delete_btn: "Borrar agente",
713
937
  save_btn: "Guardar cambios",
714
938
  delete_confirm: "Borrar el agente \"{slug}\"? Se elimina .apc/agents/{slug}.md y sus datos runtime locales.",
715
939
  update_success: "Agente actualizado.",
716
940
  delete_success: "Agente borrado.",
717
- tools_hint: "Qué tools puede usar el agente. Tocá para activar/desactivar; o editá la lista abajo.",
718
- tools_custom_ph: "lista (coma): echo, http_fetch",
941
+ tools_hint: "Allowlist de este agente (no el registro del superagente). Para edición: write_file, edit_file, run_command, list_skills, load_skill. Browser/HTTP/MCP quedan opt-in.",
942
+ tools_custom_ph: "+ tool custom…",
943
+ tools_csv_ph: "tools seleccionadas, separadas por coma",
719
944
  memory_title: "Memoria del agente",
720
945
  memory_empty: "(memoria vacía)",
721
946
  memory_saved: "Memoria guardada.",
@@ -728,13 +953,18 @@ export const es = {
728
953
  brain_title: "Brain",
729
954
  brain_desc: "Grafo de relaciones reales del agente: memoria, threads, tasks, heartbeats y jerarquía. (primera versión — lo refinamos)",
730
955
  brain_empty: "Aún no hay relaciones para graficar (sin memoria, threads, tasks ni rutinas).",
731
- msgs_count: "msgs",
956
+ msgs_count: "Msgs",
732
957
  },
733
958
 
734
959
  mcps: {
735
960
  title: "MCP servers",
736
961
  subtitle: "3 scopes: Runtime > Shared > Global. Conflictos arriba si los hay.",
737
962
  empty: "Sin MCPs configurados.",
963
+ filter_label: "Filtrar por scope",
964
+ filter_all: "Todos",
965
+ filter_project: "Proyecto",
966
+ filter_global: "Global",
967
+ filter_empty: "Ningún MCP en este filtro.",
738
968
  new: "MCP",
739
969
  delete_confirm: "Borrar MCP {name} de scope {scope}?",
740
970
  conflicts: "⚠ Conflictos: {names}",
@@ -767,8 +997,11 @@ export const es = {
767
997
  cmd_label: "Comando",
768
998
  cmd_ph: "npx",
769
999
  args_label: "Args",
1000
+ args_hint: "separados por espacios",
1001
+ args_ph: "-y @modelcontextprotocol/server-filesystem /tmp",
770
1002
  args_hint_tokens: "Una entrada por argumento. Usá el botón + para insertar variables.",
771
1003
  env_label: "Env",
1004
+ env_invalid: "env debe ser JSON válido",
772
1005
  env_hint_tokens: "Pares clave/valor. Los valores aceptan ${var.NOMBRE} (botón + a la derecha).",
773
1006
  env_empty: "Sin variables de entorno.",
774
1007
  url_label: "URL",
@@ -791,11 +1024,11 @@ export const es = {
791
1024
  logs_events: "Eventos recientes",
792
1025
  logs_stderr: "stderr (últimos 4KB)",
793
1026
  logs_panel_title: "Live logs",
794
- logs_panel_pick: "elegí un MCP",
1027
+ logs_panel_pick: "Elegí un MCP",
795
1028
  logs_panel_hint: "Click un MCP de la lista para ver lo que está pasando en vivo.",
796
1029
  logs_panel_idle: "Sin actividad. Apretá Probar para arrancarlo.",
797
1030
  name_required: "Nombre requerido",
798
- removed: "eliminado",
1031
+ removed: "Eliminado",
799
1032
  added: "MCP agregado.",
800
1033
  updated: "MCP actualizado.",
801
1034
  },
@@ -817,9 +1050,9 @@ export const es = {
817
1050
  filter_project: "Sólo proyecto",
818
1051
  filter_global: "Sólo globales",
819
1052
  scope_label: "Scope",
820
- scope_project: "proyecto",
1053
+ scope_project: "Proyecto",
821
1054
  scope_project_desc: "Sólo este proyecto. Pisa la global con mismo nombre.",
822
- scope_global: "global",
1055
+ scope_global: "Global",
823
1056
  scope_global_desc: "Disponible en todos los proyectos.",
824
1057
  name_label: "Nombre",
825
1058
  name_hint: "Mayúsculas, dígitos y _. P. ej.: MY_API_KEY, GITHUB_TOKEN.",
@@ -840,12 +1073,12 @@ export const es = {
840
1073
 
841
1074
  threads: {
842
1075
  title: "Chats",
843
- subtitle: "Conversaciones por agent (vacío = ningún log persistido todavía).",
844
- no_agents: "No hay agents. Las conversaciones requieren un agent configurado.",
845
- pick: "Elegí un agent para ver sus conversaciones.",
1076
+ subtitle: "Conversaciones por agente (vacío = ningún log persistido todavía).",
1077
+ no_agents: "No hay agentes. Las conversaciones requieren un agente configurado.",
1078
+ pick: "Elegí un agente para ver sus conversaciones.",
846
1079
  empty: "No hay conversaciones para {slug}.",
847
1080
  conversation_title: "Conversación {id}",
848
- messages: "mensajes",
1081
+ messages: "Mensajes",
849
1082
  via: "via",
850
1083
  },
851
1084
 
@@ -856,7 +1089,7 @@ export const es = {
856
1089
  model_hint: "ej. anthropic:claude-sonnet-4.5, ollama:gemma2:9b",
857
1090
  perm: "super_agent.permission_mode",
858
1091
  route: "route_to_agent",
859
- route_hint: "Slug del agent que atiende por defecto en este proyecto.",
1092
+ route_hint: "Slug del agente que atiende por defecto en este proyecto.",
860
1093
  use_global: "(usa global)",
861
1094
  saved: "Guardado.",
862
1095
  nothing: "Nada para guardar.",
@@ -875,7 +1108,7 @@ export const es = {
875
1108
  save_meta_success: "Project metadata guardado.",
876
1109
  no_data: "Sin datos.",
877
1110
  tab_settings: "Settings",
878
- tab_project: "Project",
1111
+ tab_project: "Proyecto",
879
1112
  },
880
1113
 
881
1114
  telegram: {
@@ -886,12 +1119,12 @@ export const es = {
886
1119
  chat_id: "Chat ID (override)",
887
1120
  saved: "Override guardado.",
888
1121
  cleared: "Override eliminado — vuelve al default.",
889
- override_active: "override activo",
1122
+ override_active: "Override activo",
890
1123
  channel_badge: "Canal {name}",
891
1124
  no_override: "Sin override. Los mensajes de este proyecto van al canal default.",
892
1125
  respond_engine: "Responder con engine",
893
1126
  route_agent: "route_to_agent",
894
- route_hint: "Slug del agent que atiende (vacío = super-agent).",
1127
+ route_hint: "Slug del agente que atiende (vacío = super-agent).",
895
1128
  bot_hint_none: "Si vacío, hereda del default.",
896
1129
  },
897
1130
 
@@ -905,6 +1138,9 @@ export const es = {
905
1138
  sidebar_title: "Memorias",
906
1139
  general_group: "General",
907
1140
  general_item: "Memoria del proyecto",
1141
+ committed: "En el repo",
1142
+ local_item: "Memoria interna",
1143
+ not_committed: "Local",
908
1144
  project_title: "Memoria del proyecto",
909
1145
  project_desc: "Hechos durables a nivel proyecto. .apc/memory.md — la leen los agentes y el super-agente.",
910
1146
  project_ph: "# Memoria del proyecto\n\nHechos estables que cualquier agente debería saber…",
@@ -929,7 +1165,7 @@ export const es = {
929
1165
  workspaces_new: "Nuevo proyecto",
930
1166
  workspaces_empty: "Sin proyectos. Agregá uno con el botón de arriba.",
931
1167
  sessions_title: "Sessions",
932
- sessions_desc: "Sesiones de todos los engines (apx · claude · codex), más nuevas primero.",
1168
+ sessions_desc: "Sesiones de todos los engines (apx · claude · codex · opencode), más nuevas primero.",
933
1169
  sessions_desc_scoped: "Sesiones en la carpeta de este proyecto ({path}), todos los engines, más nuevas primero.",
934
1170
  sessions_all: "Todos los engines",
935
1171
  sessions_empty: "Sin sesiones.",
@@ -940,15 +1176,26 @@ export const es = {
940
1176
  sessions_clear: "Limpiar filtros",
941
1177
  sessions_refresh: "Refrescar lista",
942
1178
  sessions_no_match: "Ninguna sesión coincide con «{q}».",
943
- sessions_act_cmd: "Copiar comando apx",
1179
+ sessions_act_cmd: "Copiar comando",
944
1180
  sessions_act_ask: "Pedir a {name} que continúe",
945
1181
  sessions_act_folder:"Abrir carpeta",
946
1182
  sessions_act_path: "Copiar ruta",
1183
+ sessions_act_menu: "Acciones de la sesión",
1184
+ sessions_act_open_terminal:"Continuar acá",
1185
+ sessions_pick: "Elegí una sesión para ver el detalle.",
1186
+ sessions_detail_command:"Comando para continuarla",
1187
+ sessions_detail_folder:"Carpeta",
1188
+ sessions_detail_updated:"Última actividad",
1189
+ sessions_detail_last_prompt:"Último mensaje",
1190
+ sessions_term_connecting:"Conectando…",
1191
+ sessions_term_closed:"Sesión cerrada",
1192
+ sessions_term_close:"Cerrar la terminal",
947
1193
  sessions_cmd_copied:"Comando copiado — pegalo en tu terminal",
948
1194
  sessions_path_copied:"Ruta copiada",
949
1195
  sessions_copy_failed:"No se pudo copiar",
950
1196
  sessions_no_folder: "Esta sesión no tiene carpeta",
951
1197
  sessions_no_path: "Esta sesión no tiene ruta",
1198
+ sessions_no_command:"Este engine no permite retomar la sesión",
952
1199
  sessions_folder_failed:"No se pudo abrir la carpeta: {msg}",
953
1200
  defaults_title: "Agent defaults",
954
1201
  defaults_desc: "Plantillas globales del vault. Las bundled vienen con APX y siempre están; las que crees o edites quedan en ~/.apx/agents y se superponen. Importalas a un proyecto desde Agents › Importar.",
@@ -981,21 +1228,21 @@ export const es = {
981
1228
  desc_global: "Actividad del daemon (canales globales: telegram, direct…). ~/.apx/messages/<channel>/.",
982
1229
  desc_project: "Actividad del proyecto. ~/.apx/projects/<id>/messages/.",
983
1230
  filter_channel: "filtrar canal (ej. telegram)",
984
- filter_dir: "dirección",
1231
+ filter_dir: "Dirección",
985
1232
  all_directions: "Todas las direcciones",
986
1233
  in: "Entrada (in)",
987
1234
  out: "Salida (out)",
988
- filter_type: "tipo",
1235
+ filter_type: "Tipo",
989
1236
  all_types: "Todos los tipos",
990
- search_text: "buscar en el texto…",
1237
+ search_text: "Buscar en el texto…",
991
1238
  count_of: "de",
992
1239
  no_activity: "Sin actividad.",
993
1240
  no_activity_ch: "Sin actividad en el canal \"{ch}\".",
994
1241
  error: "No pude leer los mensajes: {msg}",
995
- show_more: "ver más",
996
- event_routine_created: "rutina creada",
997
- event_routine_updated: "rutina actualizada",
998
- show_less: "ver menos",
1242
+ show_more: "Ver más",
1243
+ event_routine_created: "Rutina creada",
1244
+ event_routine_updated: "Rutina actualizada",
1245
+ show_less: "Ver menos",
999
1246
  daemon_errors: "Errores del daemon (~/.apx/logs/errors.jsonl)",
1000
1247
  no_errors: "Sin errores registrados. 🎉",
1001
1248
  },
@@ -1004,15 +1251,15 @@ export const es = {
1004
1251
  title: "Contactos de Telegram",
1005
1252
  desc: "Quién le escribe a los bots. El rol define qué herramientas puede usar; un invitado no tiene permisos hasta que le asignes un rol.",
1006
1253
  empty: "Todavía no hay contactos — se registran solos cuando alguien escribe a un bot.",
1007
- owner_badge: "dueño",
1254
+ owner_badge: "Dueño",
1008
1255
  assign_role: "Asignar rol",
1009
1256
  owner_hint: "Es dueño de un canal — cambialo desde el canal",
1010
1257
  removed: "Contacto eliminado.",
1011
1258
  delete_confirm: "¿Borrar el contacto {name}?",
1012
- last_seen: "visto:",
1013
- tools_all: "tools: todas",
1014
- tools_none: "tools: ninguna",
1015
- tools_label: "tools:",
1259
+ last_seen: "Visto:",
1260
+ tools_all: "Tools: todas",
1261
+ tools_none: "Tools: ninguna",
1262
+ tools_label: "Tools:",
1016
1263
  },
1017
1264
 
1018
1265
  telegram_channels: {
@@ -1023,7 +1270,7 @@ export const es = {
1023
1270
  removed: "Canal eliminado.",
1024
1271
  delete_confirm: "¿Borrar el canal {name}?",
1025
1272
  no_owner: "sin dueño (se reclama al primer DM)",
1026
- owner_label: "dueño:",
1273
+ owner_label: "Dueño:",
1027
1274
  },
1028
1275
 
1029
1276
  telegram_channel_dialog: {
@@ -1037,10 +1284,10 @@ export const es = {
1037
1284
  route_label: "route_to_agent",
1038
1285
  route_hint: "Agente que contesta; vacío = super-agent APX.",
1039
1286
  owner_label: "owner_user_id",
1040
- owner_hint: "user_id de Telegram del dueño de este canal. Override del rol global a 'owner' acá. Si lo dejás vacío, el primer mensaje privado lo reclama.",
1287
+ owner_hint: "El user_id de Telegram del dueño de este canal. Override del rol global a 'owner' acá. Si lo dejás vacío, el primer mensaje privado lo reclama.",
1041
1288
  owner_ph: "889721252",
1042
1289
  respond_label: "Responder con engine (no echo)",
1043
- name_required: "name requerido",
1290
+ name_required: "Name requerido",
1044
1291
  saved: "Canal guardado.",
1045
1292
  },
1046
1293
 
@@ -1053,9 +1300,9 @@ export const es = {
1053
1300
  title: "Roles",
1054
1301
  desc: "Cada rol define qué herramientas del super-agent puede usar quien lo tenga asignado. 'owner' siempre = todas; 'guest' siempre = ninguna (solo chat).",
1055
1302
  empty: "No hay roles definidos.",
1056
- tools_all: "todas las herramientas",
1057
- tools_none: "ninguna herramienta",
1058
- builtin: "built-in",
1303
+ tools_all: "Todas las herramientas",
1304
+ tools_none: "Ninguna herramienta",
1305
+ builtin: "Built-in",
1059
1306
  delete_confirm: "¿Borrar el rol \"{name}\"?",
1060
1307
  removed: "Rol eliminado.",
1061
1308
  saved: "Rol \"{name}\" guardado.",
@@ -1110,6 +1357,19 @@ export const es = {
1110
1357
  new_session: "Nueva sesión",
1111
1358
  untitled: "Nueva sesión",
1112
1359
  no_sessions: "Todavía no hay sesiones — creá una para empezar a codear.",
1360
+ no_sessions_here: "No hay sesiones en este proyecto. Sacá el filtro para ver el resto.",
1361
+ msg_count: "{n} msg",
1362
+ all_projects: "Todos los proyectos",
1363
+ all_projects_desc: "Sesiones de todos los proyectos registrados, las más recientes primero",
1364
+ new_session_desc: "Elegí dónde corre y quién responde en ella.",
1365
+ create_session: "Crear sesión",
1366
+ field_project: "Proyecto",
1367
+ field_project_hint: "Archivos, terminal y diff quedan acotados a él.",
1368
+ field_agent: "Agente",
1369
+ field_agent_hint: "Quién responde en esta sesión. Se puede cambiar después desde Contexto.",
1370
+ field_mode: "Modo",
1371
+ field_title: "Título",
1372
+ field_title_hint: "Opcional — cómo se ve la sesión en la lista.",
1113
1373
  pick_project: "Elegí un proyecto para ver sus sesiones.",
1114
1374
  rename: "Renombrar",
1115
1375
  delete: "Eliminar",
@@ -1149,6 +1409,8 @@ export const es = {
1149
1409
  close: "Cerrar",
1150
1410
  reload: "Recargar",
1151
1411
  discard_changes: "Descartar cambios",
1412
+ discard_label: "Descartar",
1413
+ save_label: "Guardar",
1152
1414
  save_shortcut_hint: "Guardar (Cmd/Ctrl+S)",
1153
1415
  artifacts_rename: "Renombrar",
1154
1416
  artifacts_view: "Ver contenido",
@@ -1162,12 +1424,15 @@ export const es = {
1162
1424
  artifacts_preview_public:"URL pública",
1163
1425
  artifacts_copy_url: "Copiar URL",
1164
1426
  artifacts_preview_started: "Preview activa en {url}",
1427
+ tree_title: "Archivos",
1165
1428
  tree_collapse_all: "Colapsar todo",
1429
+ terminal_title: "Terminal",
1166
1430
  terminal_clear: "Limpiar",
1167
1431
  terminal_close: "Cerrar terminal",
1168
1432
  },
1169
1433
 
1170
1434
  desktop_screen: {
1435
+ model_title: "Modelo",
1171
1436
  status_title: "Estado",
1172
1437
  autostart_title: "Arranque automático",
1173
1438
  shortcut_title: "Atajo de teclado",
@@ -1177,6 +1442,89 @@ export const es = {
1177
1442
  open_config: "Configuración",
1178
1443
  },
1179
1444
 
1445
+ images_screen: {
1446
+ providers_title: "Motores de imagen",
1447
+ test_title: "Probar imagen",
1448
+ defaults_title: "Valores por defecto",
1449
+ configure_provider: "Configurar {name}",
1450
+ },
1451
+
1452
+ images_ui: {
1453
+ providers_desc: "Los motores se prueban en orden y dibuja el primero que responde. Apagá uno para sacarlo de la cadena, o agregá tu propio endpoint: un servidor en esta Mac, una máquina en la red o una clave en la nube.",
1454
+ providers_load_error: "No se pudieron cargar los motores: {msg}",
1455
+ test_desc: "Dibujá una imagen con el ruteo actual. También avisa qué no pudo respetar el motor.",
1456
+ defaults_desc: "La capa de abajo de toda imagen. La configuración de cada motor los pisa, y un argumento explícito pisa a los dos.",
1457
+ move_up: "Subir",
1458
+ move_down: "Bajar",
1459
+ configure: "Configurar",
1460
+ remove: "Eliminar",
1461
+ add_provider: "Agregar motor",
1462
+ new_provider: "Motor nuevo",
1463
+ remove_confirm: "¿Eliminar este motor?",
1464
+ custom_note: "Tu propio endpoint.",
1465
+ custom_desc: "Cualquier servidor que hable uno de los tres dialectos. Elegí el que responde: equivocarse da 404, no una diferencia sutil.",
1466
+ badge_local: "Local",
1467
+ badge_available: "Responde",
1468
+ badge_unavailable: "No responde",
1469
+ badge_not_configured: "Sin configurar",
1470
+ label_label: "Nombre",
1471
+ label_hint: "Cómo aparece en esta lista.",
1472
+ kind_label: "Dialecto",
1473
+ kind_hint: "Con qué API responde el servidor.",
1474
+ base_url_label: "URL base",
1475
+ base_url_req_label: "URL base (obligatoria)",
1476
+ base_url_hint: "El origen del servidor, sin la ruta de la API — por ejemplo http://127.0.0.1:7860 para uno local o http://maquina.lan:8189 para uno en la red.",
1477
+ base_url_openai_hint: "Dejala vacía para OpenAI. Completala para apuntar a cualquier servidor compatible con OpenAI.",
1478
+ api_key_label: "Clave de API",
1479
+ api_key_set: "Cargada (…{suffix}) — escribí para reemplazarla",
1480
+ api_key_keep_hint: "Dejalo vacío para conservar la clave guardada.",
1481
+ api_key_optional_hint: "Opcional. La mayoría de los servidores locales y de red no necesitan ninguna.",
1482
+ api_key_reuse_hint: "Opcional: si no, usa {engine} o la variable de entorno {env}.",
1483
+ model_label: "Modelo",
1484
+ model_hint: "Checkpoint o id de modelo, cuando el servidor puede cambiarlo. Los que alojan uno solo lo ignoran.",
1485
+ optional_ph: "Opcional",
1486
+ server_default_ph: "Valor del servidor",
1487
+ engine_default: "Valor del motor",
1488
+ configured_default: "Valor configurado",
1489
+ engine_defaults_hint: "Valores de ESTE motor — son del servidor, no del prompt. Un checkpoint turbo quiere unos 8 pasos con cfg 1; uno normal quiere 20 con cfg 7.",
1490
+ size_label: "Tamaño",
1491
+ size_hint: "Ancho x alto, por ejemplo 768x512.",
1492
+ default_size_hint: "Se usa cuando ni el motor ni la llamada dicen otra cosa.",
1493
+ steps_label: "Pasos",
1494
+ steps_hint: "Pasos de muestreo. Más es más lento, no siempre mejor.",
1495
+ cfg_label: "Guía (cfg)",
1496
+ cfg_hint: "Cuánto sigue la imagen al prompt.",
1497
+ sampler_label: "Sampler",
1498
+ scheduler_label: "Scheduler",
1499
+ format_label: "Formato",
1500
+ format_hint: "Solo donde el servidor deja elegir.",
1501
+ quality_label: "Calidad",
1502
+ quality_hint: "Solo OpenAI: standard o hd.",
1503
+ timeout_label: "Tiempo límite (s)",
1504
+ timeout_hint: "Cuánto esperar una imagen antes de abandonar.",
1505
+ negative_label: "Prompt negativo",
1506
+ negative_hint: "Qué dejar afuera de toda imagen. El dialecto de OpenAI no tiene campo para esto.",
1507
+ negative_ph: "Borroso, marca de agua, texto",
1508
+ count_label: "Imágenes por corrida",
1509
+ count_hint: "Cuántas dibujar de una vez.",
1510
+ prompt_label: "Prompt",
1511
+ prompt_ph: "Un zorro de origami verde sobre fondo blanco, luz de estudio",
1512
+ engine_label: "Motor",
1513
+ test_routed_chain: "Ruteado (el primero que responda)",
1514
+ test_routed_single: "Ruteado ({id})",
1515
+ generate: "Generar",
1516
+ download: "Descargar",
1517
+ seed_is: "Semilla {seed}",
1518
+ ignored_note: "{provider} ignoró: {options}. Ese dialecto no tiene campo para eso.",
1519
+ mock_desc: "El motor de prueba offline. Siempre disponible para que una llamada nunca falle del todo — no hay nada que configurar.",
1520
+ err_label_required: "El nombre es obligatorio.",
1521
+ err_base_url_required: "La URL base es obligatoria.",
1522
+ err_save: "No se pudo guardar.",
1523
+ toast_config_saved: "Motor guardado.",
1524
+ toast_defaults_saved: "Valores guardados.",
1525
+ toast_provider_removed: "Motor eliminado.",
1526
+ },
1527
+
1180
1528
  voice_screen: {
1181
1529
  providers_title: "Proveedores de voz (TTS)",
1182
1530
  test_title: "Probar voz",
@@ -1202,9 +1550,26 @@ export const es = {
1202
1550
  provider_hint: "Ollama es local y gratis. Gemini/OpenAI usan la API key de su sección en Modelos (o la de abajo).",
1203
1551
  mode_label: "Modo de selección",
1204
1552
  mode_hint: "Cadena cae al siguiente si uno falla; Único usa exactamente el proveedor elegido.",
1205
- available: "disponible",
1206
- unavailable: "no disp.",
1553
+ chain_label: "Orden de fallback",
1554
+ chain_hint: "Ordená con las flechas: embebe el primer motor disponible. Las keys salen de Engines & models — elegí acá el modelo de embedding de cada proveedor. Apagá Ollama para dejar de usarlo.",
1555
+ keys_reuse_note: "Las API keys se reutilizan de Engines & models — no hace falta volver a cargarlas. Sólo elegí el modelo de embedding por proveedor.",
1556
+ model_ph: "id del modelo de embedding",
1557
+ move_up: "Subir",
1558
+ move_down: "Bajar",
1559
+ badge_local: "Local",
1560
+ badge_custom: "Custom",
1561
+ not_configured: "Sin key",
1562
+ always_on: "Siempre activo",
1563
+ add_custom: "Agregar proveedor custom",
1564
+ remove: "Quitar",
1565
+ custom_default_label: "Custom",
1566
+ custom_label_ph: "Nombre",
1567
+ custom_key_label: "API key",
1568
+ custom_optional_ph: "(opcional)",
1569
+ available: "Disponible",
1570
+ unavailable: "No disp.",
1207
1571
  test_btn: "Probar embedding",
1572
+ active_embedder: "Activo: {embedder}",
1208
1573
  reindex_btn: "Reindexar memoria",
1209
1574
  test_ok: "Embedding OK con {embedder}",
1210
1575
  test_failed: "Test falló: {msg}",
@@ -1243,24 +1608,44 @@ export const es = {
1243
1608
  compact_fallback_ph: "(vacío → modelo del super-agente)",
1244
1609
  },
1245
1610
 
1611
+ provider_test: {
1612
+ title: "Probar {name}",
1613
+ description: "Un mensaje, una respuesta. No es un chat: no se guarda nada ni se manda historial.",
1614
+ model_label: "Modelo a probar",
1615
+ model_hint: "Elegí uno de la lista o escribí el id a mano.",
1616
+ message_label: "Mensaje",
1617
+ message_ph: "Escribí algo corto…",
1618
+ default_message: "Hola, ¿me escuchás?",
1619
+ send: "Enviar",
1620
+ waiting: "Esperando respuesta…",
1621
+ empty_reply: "(respondió vacío)",
1622
+ tokens: "{n} tokens",
1623
+ served: "Servido {id}",
1624
+ served_mismatch: "el gateway sirvió otro id",
1625
+ button: "Probar la conexión",
1626
+ },
1627
+
1246
1628
  router_panel: {
1247
1629
  title: "Router de modelos",
1248
1630
  description: "Un único router general (sin casos por tarea). Elegí un proveedor y un modelo; si el activo falla, prueba la cadena de fallback en orden.",
1249
- badge_default: "default",
1631
+ badge_default: "Default",
1250
1632
  no_providers: "Agregá un proveedor abajo para poder elegir modelos.",
1251
- active_model_label: "Modelo activo (default)",
1252
- active_model_hint: "Proveedor + modelo. Se guarda como proveedor:modelo.",
1253
- fallback_title: "Cadena de fallback",
1254
- fallback_desc: "Si el modelo activo falla, prueba estos en orden. Click en uno para editarlo.",
1255
- fallback_empty: "Sin fallback configurado.",
1633
+ chain_title: "Cadena de modelos",
1634
+ chain_desc: "El #1 es el modelo por default; si falla, sigue con los de abajo en orden. Click en uno para editarlo.",
1635
+ reorder: "Arrastrá para reordenar",
1636
+ chain_empty: "Todavía sin modelos. Agregá el primero abajo.",
1256
1637
  add_to_chain: "Agregar a la cadena",
1257
- done: "listo",
1638
+ done: "Listo",
1258
1639
  save: "Guardar router",
1259
1640
  saved: "Guardado",
1260
1641
  saved_toast: "Router guardado.",
1261
1642
  provider_ph: "— proveedor —",
1262
- provider_not_found: "⚠ {name} (no encontrado)",
1263
1643
  provider_not_configured: "El proveedor \"{name}\" no está configurado.",
1644
+ provider_off: "El proveedor \"{name}\" está desactivado.",
1645
+ provider_offline: "El proveedor \"{name}\" no está conectado (sin api key o servidor caído).",
1646
+ hint_off: "Desactivado",
1647
+ hint_offline: "sin conexión",
1648
+ ollama_empty: "Ollama no respondió y no hay nada cacheado — escribí el modelo a mano.",
1264
1649
  },
1265
1650
 
1266
1651
  routing_panel: {
@@ -1324,6 +1709,8 @@ export const es = {
1324
1709
  custom: "Custom",
1325
1710
  json_mode: "JSON",
1326
1711
  form_mode: "Volver al formulario",
1712
+ tab_form: "Formulario",
1713
+ tab_json: "JSON",
1327
1714
  json_label: "Config del provider (JSON)",
1328
1715
  json_hint: "Se guarda como engines.{slug} en config.json",
1329
1716
  json_help: "Debe ser un objeto JSON válido con al menos engine. El slug se toma del formulario.",
@@ -1350,6 +1737,8 @@ export const es = {
1350
1737
  price_cache_write: "$ cache write / 1M",
1351
1738
  model_limits_label: "Límites de contexto por modelo (JSON)",
1352
1739
  active_label: "Activo (los agentes pueden usarlo)",
1740
+ thinking_label: "Pensar antes de responder",
1741
+ thinking_hint: "Apagalo si el modelo razona en voz alta y gasta el presupuesto de tokens antes de escribir la respuesta.",
1353
1742
  err_slug_required: "Slug requerido.",
1354
1743
  err_slug_required_form: "Slug requerido (en el formulario).",
1355
1744
  err_slug_exists: "Ya existe un provider \"{slug}\".",
@@ -1375,13 +1764,106 @@ export const es = {
1375
1764
 
1376
1765
  chat_ui: {
1377
1766
  copy: "Copiar",
1767
+ edit: "Editar",
1768
+ edit_resend: "Guardar y reenviar",
1769
+ regenerate: "Regenerar",
1378
1770
  stop: "Detener",
1379
1771
  send: "Enviar",
1772
+ queued: "En cola",
1773
+ queued_cancel: "No mandarlo",
1774
+ running_elsewhere: "Escribiendo respuesta",
1775
+ unread_reply: "Respuesta nueva",
1776
+ send_mode_interrupt: "Interrumpe",
1777
+ send_mode_queue: "Encola",
1778
+ send_mode_tip_interrupt: "Escribir durante un turno lo corta y arranca con tu mensaje. Tocá para encolar en su lugar.",
1779
+ send_mode_tip_queue: "Escribir durante un turno espera a que termine. Tocá para interrumpir en su lugar.",
1380
1780
  pick_model: "Elegir modelo (o Auto)",
1381
1781
  insert_variable: "Insertar variable",
1382
- ctx_files: "archivos",
1782
+ ctx_files: "Archivos",
1383
1783
  ctx_actors: "{n} agentes/modelos",
1384
1784
  ctx_turns: "{n} turnos",
1785
+ ctx_tokens: "Tokens",
1786
+ ctx_tools: "Herramientas",
1787
+ ctx_expand: "Ver el detalle del contexto",
1788
+ jump_latest: "Ir al final",
1789
+ jump_latest_new: "Mensajes nuevos",
1790
+ typing: "{name} está escribiendo…",
1791
+ working: "{name} está trabajando…",
1792
+ typing_generic: "Escribiendo…",
1793
+ working_generic: "Trabajando…",
1794
+ actions_count: "{n} acciones",
1795
+ actions_count_one: "1 acción",
1796
+ actions_range: "Acciones {from}–{to} de {total}",
1797
+ actions_at: "Acción {n} de {total}",
1798
+ show_tools: "Mostrar tools",
1799
+ show_tools_hint: "Off = chat pelado; on = acciones y tools visibles",
1800
+ show_tools_on: "Vista completa (tools)",
1801
+ show_tools_off: "Vista simple (sin tools)",
1802
+ thinking_label: "Pensamiento",
1803
+ thinking_running: "Pensando…",
1804
+ attachment: "Adjunto",
1805
+ attachment_open: "Descargar",
1806
+ attachment_missing: "no se descargó",
1807
+ attachment_failed: "no se pudo abrir",
1808
+ voice_note: "Nota de voz",
1809
+ attach: "Adjuntar un archivo",
1810
+ attach_remove: "Quitar",
1811
+ attach_failed: "no se pudo subir",
1812
+ attach_bad_type: "No se pueden adjuntar archivos {ext}",
1813
+ attach_too_big: "pasa los {mb} MB",
1814
+ attach_photo: "Foto o video",
1815
+ attach_file: "Archivo",
1816
+ attach_camera: "Cámara",
1817
+ record: "Grabar audio",
1818
+ rec_cancel: "Descartar",
1819
+ rec_insecure: "El micrófono necesita HTTPS (o localhost)",
1820
+ rec_denied: "No diste permiso al micrófono",
1821
+ rec_failed: "No se pudo abrir el micrófono",
1822
+ transcribing: "Transcribiendo…",
1823
+ },
1824
+
1825
+ access: {
1826
+ install_title: "Instalar como app",
1827
+ install_sub: "El panel se instala en el teléfono como una app: ícono propio, sin barra de direcciones.",
1828
+ install_now: "Instalar app",
1829
+ install_done: "Ya está instalada",
1830
+ install_ios: "En iPhone: Compartir → Añadir a pantalla de inicio. Safari no permite instalarla desde acá.",
1831
+ install_insecure: "Este navegador no puede instalarla desde una dirección http:// de red local. Necesita HTTPS — la forma más simple es publicar el panel por Tailscale, abajo. Sin HTTPS tampoco hay micrófono ni portapapeles.",
1832
+ install_unsupported: "Este navegador todavía no ofreció instalar la app. En Chrome podés forzarlo desde el menú ⋮ → Instalar aplicación.",
1833
+ addresses_title: "Direcciones",
1834
+ addresses_sub: "Todas las formas de llegar a este daemon. Si una deja de responder, el panel prueba las otras solo.",
1835
+ secure: "Seguro",
1836
+ here: "Estás acá",
1837
+ copy: "Copiar",
1838
+ copied: "Copiado",
1839
+ qr: "Ver QR",
1840
+ qr_hint: "Escaneá con la cámara del teléfono. Después vinculá el dispositivo para el token.",
1841
+ local_only: "El daemon sólo escucha en loopback: nada de la red puede llegar. Para compartirlo: apx panel share",
1842
+ kind_ts_https: "Tailnet HTTPS",
1843
+ kind_ts: "Tailnet",
1844
+ kind_lan: "Red local",
1845
+ kind_local: "Esta máquina",
1846
+ tailscale_title: "Tailscale",
1847
+ tailscale_sub: "Un nombre estable que funciona desde cualquier lado, con certificado real.",
1848
+ ts_absent: "Tailscale no está instalado en esta máquina.",
1849
+ ts_stopped: "Tailscale está instalado pero no conectado (estado: {state}). Iniciá sesión en la app de Tailscale.",
1850
+ ts_running: "Conectado",
1851
+ serve_start: "Publicar por HTTPS",
1852
+ serve_stop: "Dejar de publicar",
1853
+ serve_on: "Publicado en el tailnet",
1854
+ serve_off: "Ya no se publica",
1855
+ serve_failed: "No se pudo publicar",
1856
+ why_https: "Sin HTTPS el navegador apaga tres cosas: instalar la app, el micrófono y el portapapeles. No es una decisión de APX.",
1857
+ },
1858
+
1859
+ mobile_link: {
1860
+ title: "Abrir en el teléfono",
1861
+ desc: "Escaneá el QR con la cámara del teléfono para abrir el chat mobile.",
1862
+ scan_paired: "Un escaneo y queda: abre el chat y vincula el dispositivo.",
1863
+ scan_plain: "Abre el chat mobile. Si el dispositivo no está vinculado, te lo va a pedir ahí.",
1864
+ paired: "Listo, el teléfono ya está vinculado",
1865
+ insecure: "Esta dirección es http://, así que en el teléfono no vas a poder instalarla como app ni grabar audio. Para eso: apx panel tailscale on",
1866
+ open_chat: "Abrir chat mobile",
1385
1867
  },
1386
1868
 
1387
1869
  sidebar_ui: {
@@ -1421,7 +1903,7 @@ export const es = {
1421
1903
  openai_style_hint: "Voz base / instruct, usada por endpoints custom (la persona que se mantiene en todo el audio). El tts-1 de OpenAI la ignora.",
1422
1904
  style_label: "Estilo (cómo debería hablar)",
1423
1905
  style_hint: "Instrucción en lenguaje natural. Vacío = sin estilo. Ej.: 'hablá en un tono alegre y pausado'.",
1424
- style_ph: "hablá en un tono alegre y enérgico",
1906
+ style_ph: "Hablá en un tono alegre y enérgico",
1425
1907
  temperature_label: "Temperatura (opcional)",
1426
1908
  temperature_hint: "Temperatura de sampleo para endpoints custom. Vacío = default del servidor.",
1427
1909
  emotions_short: "Emociones",
@@ -1443,12 +1925,12 @@ export const es = {
1443
1925
  mode_single_btn: "Solo engine default",
1444
1926
  move_up: "Subir",
1445
1927
  move_down: "Bajar",
1446
- badge_local: "local",
1447
- badge_available: "disponible",
1448
- badge_unavailable: "configurado, no disponible",
1449
- badge_not_configured: "sin configurar",
1450
- badge_default: "default",
1451
- badge_custom: "custom",
1928
+ badge_local: "Local",
1929
+ badge_available: "Disponible",
1930
+ badge_unavailable: "Configurado, no disponible",
1931
+ badge_not_configured: "Sin configurar",
1932
+ badge_default: "Default",
1933
+ badge_custom: "Custom",
1452
1934
  set_as_default: "Usar como default",
1453
1935
  configure: "Configurar",
1454
1936
  remove: "Quitar",
@@ -1466,6 +1948,17 @@ export const es = {
1466
1948
  custom_model_hint: "Opcional. La mayoría de los servidores locales lo ignoran (ej. QVox).",
1467
1949
  custom_voice_hint: "Opcional. Un preset que entienda tu servidor (ej. custom). Vacío = default del servidor.",
1468
1950
  custom_optional_ph: "(opcional)",
1951
+ language_label: "Idioma",
1952
+ language_hint: "El idioma que se le pide al servidor. Sólo se manda a endpoints custom. Vacío = lo que el servidor tenga de default, que es una adivinanza y no una decisión.",
1953
+ language_server_default: "Default del servidor",
1954
+ qvox_voice_hint: "Un speaker preset de tu servidor. Cada uno trae SU propio acento, así que el preset le gana al acento que describas en el Estilo. Vacío = el Estilo diseña la voz.",
1955
+ voice_none: "Ninguna — diseñar la voz desde el Estilo",
1956
+ qvox_style_hint: "Se manda al servidor como `instruct`. Sólo algunos motores lo usan: QVox/Qwen3-TTS diseña la voz con esto — timbre, edad, acento, ritmo ('un hombre argentino cálido, acento rioplatense') — mientras que Pocket TTS no tiene instruct y lo descarta, así que ahí la Voz es toda la voz.",
1957
+ style_overridden_hint: "Con un speaker elegido, un motor que entienda instruct sólo tiñe la interpretación — la voz y el acento del speaker ganan. Vaciá el campo Voz para que el estilo diseñe la voz. Los motores sin instruct ignoran este campo igual.",
1958
+ clone_label: "Grabación de referencia (clonado, opcional)",
1959
+ clone_hint: "Ruta en el filesystem DEL SERVIDOR a una grabación limpia de 10–20s. El clonado es el único modo que reproduce un acento que ningún preset tiene. Le gana a Voz y a Estilo.",
1960
+ ref_text_label: "Qué dice la grabación",
1961
+ ref_text_hint: "Opcional, y conviene completarlo: decirle al modelo qué está escuchando acelera bastante el clonado.",
1469
1962
  stt_engine_label: "Engine de transcripción",
1470
1963
  stt_engine_hint: "Local usa faster-whisper (requiere python3 + faster-whisper). OpenAI usa la key de engines.openai.",
1471
1964
  stt_model_label: "Modelo local (whisper)",
@@ -1505,6 +1998,9 @@ export const es = {
1505
1998
  test_synth_error: "No se pudo sintetizar.",
1506
1999
  test_engine_label: "Engine",
1507
2000
  test_engine_hint: "Override del default para probar.",
2001
+ test_voice_label: "Voz",
2002
+ test_voice_hint: "Sólo para esta prueba — no cambia lo que el motor tiene guardado.",
2003
+ test_voice_default: "Default del motor",
1508
2004
  test_style_label: "Estilo (solo Gemini)",
1509
2005
  test_style_hint: "Cómo debería hablar. Vacío = sin estilo.",
1510
2006
  test_text_label: "Texto a decir",
@@ -1525,6 +2021,15 @@ export const es = {
1525
2021
  err_label_required: "Falta el nombre.",
1526
2022
  err_base_url_required:"Falta la base URL.",
1527
2023
  toast_transcription_updated: "Transcripción actualizada.",
2024
+ qvox_title: "Voz local en esta Mac",
2025
+ qvox_body: "QVox corre Qwen3-TTS en la GPU de tu Mac: el audio no sale de la máquina, no se paga por minuto y no depende de que un servicio esté arriba.",
2026
+ qvox_note: "Necesita uv y Node 18 o superior: npm instala sólo el comando, el motor corre por uv. El primer modelo son varios gigas de descarga.",
2027
+ qvox_ask: "Pedile a {persona} que lo instale",
2028
+ qvox_repo: "Ver el repositorio",
2029
+ qvox_running: "Andando",
2030
+ qvox_stopped: "Detenido",
2031
+ qvox_stopped_hint: "QVox está configurado pero no contesta en su puerto. Levantalo con `qvox serve`, o revisá que su LaunchAgent esté cargado.",
2032
+ qvox_install_title: "Agregá QVox — una voz local con Qwen3 en esta Mac",
1528
2033
  },
1529
2034
 
1530
2035
  telegram_ui: {
@@ -1538,14 +2043,26 @@ export const es = {
1538
2043
  message_label: "Texto",
1539
2044
  send_chat_id: "chat_id: {id}",
1540
2045
  default_apx: "APX por defecto",
1541
- yes: "",
1542
- no: "no",
2046
+ yes: "",
2047
+ no: "No",
1543
2048
  user_id_fallback: "user_id {id}",
1544
2049
  role_assigned: "{name} → {role}",
1545
2050
  },
1546
2051
 
1547
2052
  agents_form: {
1548
2053
  emoji: "Emoji",
2054
+ icon: "Avatar",
2055
+ name: "Nombre",
2056
+ name_hint: "Se muestra en toda la UI. Vacío = se usa el slug.",
2057
+ name_ph: "Cody",
2058
+ slug_hint: "Id permanente: nombre de archivo, links y delegación.",
2059
+ skills_title: "Skills",
2060
+ skills_desc: "Skills del proyecto que este agente carga en su prompt.",
2061
+ skills_use_defaults: "Usar las default del proyecto",
2062
+ skills_use_defaults_hint: "El agente hereda las skills que el proyecto tenga activas. Desactivá para elegir por agente.",
2063
+ skills_empty: "Este proyecto todavía no tiene skills.",
2064
+ skills_locked: "Desactivada a nivel proyecto o global — activala en Skills para usarla acá.",
2065
+ create_defaults_note: "Skills y tools arrancan con las default del proyecto; ajustalas en el tab Config del agente.",
1549
2066
  area: "Área",
1550
2067
  role: "Rol",
1551
2068
  no_role: "— sin rol —",
@@ -1575,8 +2092,8 @@ export const es = {
1575
2092
  description: "Descripción",
1576
2093
  no_area: "— sin área —",
1577
2094
  roles: "Roles",
1578
- add_role: "rol",
1579
- no_roles: "sin roles",
2095
+ add_role: "Rol",
2096
+ no_roles: "Sin roles",
1580
2097
  general_roles: "Roles generales",
1581
2098
  delete_area: "Borrar área",
1582
2099
  delete_role: "Borrar rol",
@@ -1608,18 +2125,38 @@ export const es = {
1608
2125
  },
1609
2126
 
1610
2127
  tasks: {
1611
- state_open: "abiertas",
1612
- state_done: "hechas",
1613
- state_dropped: "descartadas",
1614
- status_pending: "pendiente",
1615
- status_running: "corriendo",
1616
- status_in_review: "en revisión",
1617
- status_blocked: "bloqueada",
1618
- done_label: "hecha",
1619
- dropped_label: "descartada",
2128
+ category_general: "Tarea",
2129
+ category_trip: "Mandado en el camino",
2130
+ location_label: "Lugar",
2131
+ location_place: "Nombre del lugar",
2132
+ location_address: "Dirección",
2133
+ location_at: "Coordenadas",
2134
+ location_at_invalid: "Formato: latitud, longitud (ej. -41.1335, -71.3103)",
2135
+ location_place_ph: "Farmacia del Puente",
2136
+ location_address_ph: "Av. San Martín 1234, Bariloche",
2137
+ location_radius: "Radio (m)",
2138
+ location_radius_ph: "Por defecto",
2139
+ location_hint: "Dónde hay que pasar. El nombre solo ya sirve para el aviso; las coordenadas son las que disparan el geocerco cuando vas manejando.",
2140
+ field_category: "Tipo",
2141
+ state_open: "Abiertas",
2142
+ state_done: "Hechas",
2143
+ state_dropped: "Descartadas",
2144
+ status_pending: "Pendiente",
2145
+ status_running: "Corriendo",
2146
+ status_in_review: "En revisión",
2147
+ status_blocked: "Bloqueada",
2148
+ done_label: "Hecha",
2149
+ dropped_label: "Descartada",
1620
2150
  detail_title: "Detalle de task",
2151
+ detail_empty: "Elegí una task de la lista.",
2152
+ list_title: "Tasks",
2153
+ agent_none_short: "Sin agente",
1621
2154
  field_title: "Título",
1622
- field_prompt: "Prompt",
2155
+ field_description: "Descripción",
2156
+ description_hint: "Qué tenés que hacer vos. Es lo que se lee en la lista.",
2157
+ description_ph: "Llamar al contador antes del viernes…",
2158
+ description_empty: "Sin descripción. Escribí acá qué hay que hacer.",
2159
+ field_prompt: "Prompt del agente",
1623
2160
  field_status: "Estado",
1624
2161
  field_agent: "Agente",
1625
2162
  field_creator: "Creada por",
@@ -1627,20 +2164,77 @@ export const es = {
1627
2164
  field_created: "Creada",
1628
2165
  field_updated: "Actualizada",
1629
2166
  field_done: "Completada",
1630
- prompt_ph: "Descripción / prompt de la task…",
1631
- toggle_prompt: "Prompt",
2167
+ prompt_ph: "Solo si la va a ejecutar un agente…",
1632
2168
  view_thread: "Ver conversación",
1633
2169
  mark_done: "Completar",
2170
+ edit_title: "Editar task",
2171
+ row_actions: "Acciones de la task",
2172
+ mark_dropped: "Descartar",
2173
+ mark_reopen: "Reabrir",
2174
+ agent_none: "— sin asignar —",
2175
+ agent_hint: "Quién la tiene. No la toma solo: la trabaja si la mencionás en un comentario o si cae en una columna con automatización.",
2176
+ prompt_hint: "Solo para tasks que ejecuta un agente. Si es un pendiente tuyo, dejalo vacío.",
2177
+ undo: "Deshacer",
2178
+ comments_title: "Comentarios",
2179
+ comment_owner: "Vos",
2180
+ comment_ph: "Escribí un comentario… @agente para que lo tome",
2181
+ comment_hint: "Mencioná a un agente con @ y toma la tarea: la trabaja con sus herramientas y responde acá mismo.",
2182
+ comment_summoned: "Convocado: {who}. La respuesta llega al hilo cuando termine.",
2183
+ subtasks_title: "Subtareas",
2184
+ subtask_ph: "Agregar una subtarea…",
2185
+ part_of: "Parte de otra tarea — abrirla",
2186
+ field_tags: "Tags",
2187
+ tags_hint: "Enter o coma para agregar. Backspace borra el último.",
2188
+ tags_ph: "Urgente, cliente…",
2189
+ tag_remove: "Quitar el tag {tag}",
2190
+ view_label: "Vista",
2191
+ view_list: "Lista",
2192
+ view_board: "Tablero",
2193
+ board_empty_col: "Nada acá",
2194
+ columns_title: "Columnas",
2195
+ columns_hint: "Los nombres son los mismos en todos los proyectos. Cada proyecto elige cuáles muestra.",
2196
+ columns_catalog: "Columnas disponibles",
2197
+ columns_pick_hint: "Tildá las que querés ver en este proyecto.",
2198
+ columns_show: "Mostrar {name} en este proyecto",
2199
+ columns_remove: "Eliminar la columna {name}",
2200
+ columns_add: "Agregar una columna",
2201
+ columns_add_ph: "QA, Diseño, Esperando cliente…",
2202
+ columns_need_one: "Tiene que quedar al menos una columna.",
2203
+ columns_done_note: "«Hecha» siempre es la última columna y no se puede sacar.",
2204
+ columns_automation: "Automatización de {name}",
2205
+ columns_automation_hint: "Cuando una task cae en esta columna, este agente la toma: la trabaja con sus herramientas y deja el resultado en los comentarios.",
2206
+ columns_hook_agent_ph: "Slug del agente (qa, dev…) — vacío = sin automatización",
2207
+ columns_hook_instruction_ph: "Qué tiene que hacer. Vacío = «hacé lo que corresponda».",
2208
+ tick_done: "Marcar «{title}» como hecha",
2209
+ tick_reopen: "Reabrir «{title}»",
2210
+ confirm_drop_title: "¿Descartar la task?",
2211
+ confirm_drop_desc: "Se descarta «{title}». No se borra del historial y podés reabrirla.",
2212
+ select_row: "Seleccionar «{title}»",
2213
+ bulk_selected: "{count} seleccionadas",
2214
+ bulk_done: "Completar",
2215
+ bulk_drop: "Descartar",
2216
+ bulk_clear: "Limpiar selección",
2217
+ confirm_bulk_done_title: "¿Completar {count} tasks?",
2218
+ confirm_bulk_done_desc: "Se marcan {count} tasks como hechas. Podés reabrirlas después.",
2219
+ confirm_bulk_drop_title: "¿Descartar {count} tasks?",
2220
+ confirm_bulk_drop_desc: "Se descartan {count} tasks. No se borran del historial y podés reabrirlas.",
2221
+ bulk_done_toast: "{count} tasks completadas.",
2222
+ bulk_drop_toast: "{count} tasks descartadas.",
1634
2223
  },
1635
2224
 
1636
2225
  agents_ui: {
1637
- model_router_default: "modelo: default del router",
2226
+ model_router_default: "Modelo: default del router",
2227
+ model_change_tip: "Cambiar el modelo del agente",
2228
+ model_change_title: "Modelo del agente",
2229
+ model_inherit_option: "Heredar (default del router)",
2230
+ model_provider_default: "Default",
2231
+ model_no_providers: "Sin proveedores activos. Configurá uno en Ajustes → Modelos.",
1638
2232
  slug_kebab_hint: "kebab-case, ej. reviewer, my-agent, content-writer",
1639
2233
  comma_separated: "separadas por coma",
1640
2234
  body_hint: "markdown — extiende el system prompt del agente",
1641
- source_user: "user",
1642
- source_override: "override",
1643
- source_bundled: "bundled",
2235
+ source_user: "Usuario",
2236
+ source_override: "Override",
2237
+ source_bundled: "Bundled",
1644
2238
  tab_explorer: "Explorador",
1645
2239
  type_none: "— sin tipo —",
1646
2240
  type_orchestrator: "Orquestador",
@@ -1667,24 +2261,26 @@ export const es = {
1667
2261
  brain_expand: "Expandir cerebros",
1668
2262
  brain_collapse: "Colapsar",
1669
2263
  brain_open: "Abrir",
2264
+ brain_view: "Ver",
2265
+ brain_edit: "Editar",
1670
2266
  brain_part_of: "Parte de",
1671
2267
  brain_branches: "Ramas",
1672
- config_def_desc: "definición (frontmatter + system prompt).",
2268
+ config_def_desc: "frontmatter de identidad. El system prompt vive en la tab Prompt.",
1673
2269
  memory_durable_desc: "hechos durables que el agente recuerda.",
1674
- running: "running",
1675
- paused: "pausada",
1676
- last_error: "última: error",
2270
+ running: "Corriendo",
2271
+ paused: "Pausada",
2272
+ last_error: "Última: error",
1677
2273
  field_tick: "Tick",
1678
2274
  field_next_tick: "Próximo tick",
1679
2275
  field_last_tick: "Último tick",
1680
2276
  field_last_run: "Última corrida",
1681
2277
  tools_label: "Tools",
1682
- kind_agent: "agente",
1683
- kind_memory: "memoria",
1684
- kind_thread: "thread",
1685
- kind_task: "task",
1686
- kind_routine: "rutina",
1687
- kind_hierarchy: "jerarquía",
2278
+ kind_agent: "Agente",
2279
+ kind_memory: "Memoria",
2280
+ kind_thread: "Thread",
2281
+ kind_task: "Task",
2282
+ kind_routine: "Rutina",
2283
+ kind_hierarchy: "Jerarquía",
1688
2284
  nodes_drag_hint: "{n} nodos · arrastrá para reordenar",
1689
2285
  kind_watch: "Vigía",
1690
2286
  kind_watch_desc: "Barre buscando cosas que valga la pena notar — vencidos, promesas por caer, proyectos en silencio. No cuesta nada cuando no hay nada que reportar.",
@@ -1705,11 +2301,11 @@ export const es = {
1705
2301
  unit_days: "días",
1706
2302
  every_n_unit: "cada {n} {unit}",
1707
2303
  every_v: "cada {v}",
1708
- preset_every_10m: "cada 10 min",
1709
- preset_hourly: "cada hora",
1710
- preset_daily_9am: "diario 9am",
2304
+ preset_every_10m: "Cada 10 min",
2305
+ preset_hourly: "Cada hora",
2306
+ preset_daily_9am: "Diario 9am",
1711
2307
  sched_manual: "solo cuando lo corrés vos",
1712
- preset_weekdays_9am: "días hábiles 9am",
2308
+ preset_weekdays_9am: "Días hábiles 9am",
1713
2309
  preset_manual: "Manual",
1714
2310
  var_pre_output_prompt: "Salida de texto de los pre-commands. Se reemplaza dentro del prompt/texto antes de enviarlo. Útil para inyectar datos frescos (clima, una API) en la instrucción.",
1715
2311
  var_llm_output: "Respuesta final del agente o super-agente. Disponible en los post-commands como variable de entorno. Ej: reenviarla por Telegram.",
@@ -1733,17 +2329,22 @@ export const es = {
1733
2329
  action_runs_shell: "Corre el comando shell",
1734
2330
  step_pre: "Pre",
1735
2331
  step_post: "Post",
1736
- last_label: "última:",
2332
+ last_label: "Última:",
1737
2333
  tg_chat_id_ph: "(usa el del canal)",
1738
2334
  tg_text_ph: "mensaje a enviar",
1739
2335
  hb_message_ph: "sigo vivo",
1740
2336
  arg_placeholder: "--flag o valor",
1741
- remove_arg: "quitar arg",
2337
+ remove_arg: "Quitar arg",
1742
2338
  super_agent_label: "{persona} (super-agente)",
1743
2339
  super_agent_badge: "super-agente",
1744
2340
  },
1745
2341
 
1746
2342
  modules_ui: {
2343
+ desktop_model: "Modelo de la ventana",
2344
+ desktop_model_desc: "Qué modelo contesta en la ventana flotante. Es la única superficie donde alguien espera la respuesta en voz alta, así que puede tener uno más rápido que el resto.",
2345
+ desktop_model_hint: "Por defecto usa el del super-agente. Elegir otro acá no cambia Telegram, las rutinas ni el resto.",
2346
+ desktop_model_set: "Modelo de la ventana: {value}.",
2347
+ desktop_model_inherit: "el del super-agente",
1747
2348
  desktop_pos_left: "Izquierda",
1748
2349
  desktop_pos_center: "Centro",
1749
2350
  desktop_pos_right: "Derecha",
@@ -1753,7 +2354,7 @@ export const es = {
1753
2354
  desktop_status_desc: "La ventana se abre desde la terminal o por arranque automático.",
1754
2355
  desktop_running: "Corriendo",
1755
2356
  desktop_stopped: "Detenida",
1756
- desktop_refresh: "refrescar",
2357
+ desktop_refresh: "Refrescar",
1757
2358
  desktop_start: "Iniciar",
1758
2359
  desktop_stop: "Detener",
1759
2360
  desktop_restart: "Reiniciar",
@@ -1766,13 +2367,13 @@ export const es = {
1766
2367
  desktop_stop_none: "No había ninguna ventana de desktop corriendo.",
1767
2368
  desktop_from_terminal: "Desde la terminal:",
1768
2369
  desktop_autostart_desc: "Abre la ventana al iniciar sesión. Equivale a `apx desktop install` (no requiere sudo).",
1769
- desktop_platform: "plataforma: {platform}",
2370
+ desktop_platform: "Plataforma: {platform}",
1770
2371
  desktop_shortcut_desc: "Atajo global que muestra/oculta la ventana y empieza a escuchar.",
1771
2372
  desktop_accelerator: "Acelerador",
1772
2373
  desktop_accelerator_hint:"Hacé clic en el campo y apretá tu combinación de teclas. Reiniciá la ventana para aplicar.",
1773
2374
  desktop_shortcut_record: "Hacé clic para definir un atajo",
1774
2375
  desktop_shortcut_recording: "Apretá tu combinación…",
1775
- desktop_shortcut_change: "clic para cambiar",
2376
+ desktop_shortcut_change: "Clic para cambiar",
1776
2377
  desktop_shortcut_esc: "Esc para cancelar",
1777
2378
  desktop_shortcut_saved: "Atajo guardado. Reiniciá la ventana (apx desktop stop && start) para aplicarlo.",
1778
2379
  desktop_autostart_on: "Arranque automático habilitado para el próximo inicio de sesión.",
@@ -1808,19 +2409,19 @@ export const es = {
1808
2409
  deck_no_widgets: "No hay widgets en el manifest.",
1809
2410
  deck_context_desc: "Información que el Deck ve desde el daemon.",
1810
2411
  deck_active_project: "Proyecto activo:",
1811
- deck_none: "ninguno",
2412
+ deck_none: "Ninguno",
1812
2413
  deck_registered_projects:"Proyectos registrados:",
1813
2414
  deck_active_plugins: "Plugins activos:",
1814
- deck_daemon_active: "activo · {uptime}",
1815
- deck_daemon_started: "iniciado",
1816
- deck_safety_no_shell: "sin shell directo",
1817
- deck_safety_no_arbitrary:"comandos arbitrarios bloqueados",
1818
- deck_safety_confirm: "las acciones peligrosas requieren confirmación",
2415
+ deck_daemon_active: "Activo · {uptime}",
2416
+ deck_daemon_started: "Iniciado",
2417
+ deck_safety_no_shell: "Sin shell directo",
2418
+ deck_safety_no_arbitrary:"Comandos arbitrarios bloqueados",
2419
+ deck_safety_confirm: "Las acciones peligrosas requieren confirmación",
1819
2420
  code_copied: "Copiado.",
1820
2421
  code_saved: "Guardado.",
1821
2422
  code_file_empty: "(vacío)",
1822
2423
  code_file_error: "Error: {msg}",
1823
- code_stream_error: "error",
2424
+ code_stream_error: "Error",
1824
2425
  code_super_agent: "super-agent",
1825
2426
  code_super_agent_desc: "Agente principal con todas las tools",
1826
2427
  code_chat_tab: "Chat",
@@ -1828,14 +2429,15 @@ export const es = {
1828
2429
  code_panel_tree: "Árbol de archivos",
1829
2430
  code_panel_terminal: "Terminal",
1830
2431
  code_panel_context: "Panel de contexto",
1831
- code_ctx_auto: "auto",
2432
+ code_ctx_auto: "Auto",
1832
2433
  code_ctx_mode: "Modo",
1833
2434
  code_ctx_agent: "Agente",
2435
+ code_ctx_project: "Proyecto",
1834
2436
  code_ctx_msgs_value: "{user} usuario · {assistant} asistente",
1835
2437
  code_ctx_tokens_total: "Tokens Total",
1836
2438
  code_ctx_created: "Creado",
1837
2439
  code_ctx_activity: "Actividad",
1838
- code_project_fallback: "proyecto {id}",
2440
+ code_project_fallback: "Proyecto {id}",
1839
2441
  code_pick_project_ph: "Elegí un proyecto…",
1840
2442
  code_artifact_exit_ok: "exit 0 — {ms}ms",
1841
2443
  code_artifact_exit_fail: "exit {code}{timeout}",
@@ -1843,8 +2445,8 @@ export const es = {
1843
2445
  code_artifact_view_short:"Ver",
1844
2446
  code_artifact_edit_short:"Editar",
1845
2447
  code_artifact_exit_badge:"exit {code}",
1846
- code_artifact_timeout: "timeout",
1847
- code_artifact_truncated: "truncado",
2448
+ code_artifact_timeout: "Timeout",
2449
+ code_artifact_truncated: "Truncado",
1848
2450
  },
1849
2451
 
1850
2452
  settings_ui: {
@@ -1864,18 +2466,25 @@ export const es = {
1864
2466
  base_menu_view: "Vista del menú Base (workspace general).",
1865
2467
  coming_soon: "Próximamente",
1866
2468
  inspector_title: "Skill Inspector (RAG por turno)",
1867
- inspector_desc: "Función experimental. Cuando está activa, el agente NO recibe la lista completa de skills en su prompt; en cada mensaje un RAG local decide qué skill(s) cargar el cuerpo completo si hay match fuerte, una sugerencia si es medio, nada si no aplica. Se reevalúa en cada turno: una skill que dejó de ser relevante desaparece del contexto.",
2469
+ inspector_desc: "Un RAG local elige la(s) skill(s) que cada mensaje necesita — cuerpo completo si el match es fuerte, una sugerencia si es medio, nada si no aplica. Se reevalúa en cada turno.",
2470
+ advanced_title: "Avanzado",
2471
+ show: "Mostrar",
2472
+ hide: "Ocultar",
1868
2473
  enable_inspector: "Habilitar inspector",
1869
2474
  enable_inspector_hint: "Off = comportamiento clásico (lista de slugs + sugerencia pasiva). On = el RAG decide por turno.",
1870
2475
  on: "On",
1871
2476
  off: "Off",
1872
2477
  index_count: "Índice: {n} skills",
1873
- not_indexed: "sin indexar",
1874
- dim: "dim {dim}",
1875
- updated_at: "actualizado {date}",
2478
+ not_indexed: "Sin indexar",
2479
+ dim: "Dim {dim}",
2480
+ updated_at: "Actualizado {date}",
1876
2481
  reindex: "Reindexar",
1877
2482
  reindex_forced: "Reindexar (forzado)",
1878
2483
  embedder_source: "El embedder viene de Memoria (RAG). Local con Ollama, u offline si no hay proveedor configurado.",
2484
+ embedder_shared_title: "Motor de embeddings",
2485
+ embedder_shared_desc: "El skill inspector usa el mismo embedder que Memoria (RAG) — un solo motor para todo el daemon. Cambialo o reordenalo ahí.",
2486
+ embedder_configure: "Configurar en Memoria (RAG)",
2487
+ embedder_stale: "El índice se armó con '{index}' pero ahora está activo '{active}' — reindexá para puntuar con el motor actual.",
1879
2488
  thresholds_title: "Umbrales y límites",
1880
2489
  thresholds_desc: "Ajustá qué tan agresivo es el inspector. Subir los umbrales = menos falsos positivos pero más riesgo de perderte una skill; bajarlos = al revés.",
1881
2490
  test_title: "Probar (dry-run)",
@@ -1942,13 +2551,19 @@ export const es = {
1942
2551
  source_builtin: "APX",
1943
2552
  source_global: "Global",
1944
2553
  source_project: "Proyecto",
2554
+ origin_claude: "Claude",
2555
+ origin_cursor: "Cursor",
2556
+ origin_codex: "Codex",
2557
+ origin_agents: "Agents",
2558
+ path_label: "Ruta",
2559
+ path_apx_link: "Enlace APX",
1945
2560
  private_badge: "Privada",
1946
2561
  private_hint: "Skill interna de APX — siempre activa, no se puede desactivar ni borrar.",
1947
2562
  overridden_badge: "Override",
1948
2563
  inherited_hint: "Heredada del global",
1949
2564
  reset_to_global: "Volver al global",
1950
- on: "activa",
1951
- off: "inactiva",
2565
+ on: "Activa",
2566
+ off: "Inactiva",
1952
2567
  toggle_failed: "No se pudo cambiar el estado: {msg}",
1953
2568
  add_title: "Agregar skill",
1954
2569
  add_desc: "Crea una skill de usuario en ~/.apx/skills/<slug>/SKILL.md. Queda disponible para todos los scopes.",
@@ -1998,6 +2613,12 @@ export const es = {
1998
2613
 
1999
2614
  shared_ui: {
2000
2615
  skill_inspector_title: "Skill Inspector ({embedder}) eligió estas skills para este turno",
2616
+ skill_trace_loaded: "Cargada: su cuerpo entró en el prompt de este turno",
2617
+ skill_trace_hinted: "Sugerida: entró sólo el nombre y la descripción",
2618
+ skill_trace_considered: "Considerada: matcheó este turno pero quedó bajo el umbral para inyectarla",
2619
+ skill_trace_sim: "Similitud {sim}",
2620
+ skill_trace_no_desc: "Sin descripción.",
2621
+ skill_trace_open: "Abrir skill",
2001
2622
  tools_count: "{n} tools",
2002
2623
  tools_failed: "{n} fallaron",
2003
2624
  tool_read_file: "Leer archivo",
@@ -2013,21 +2634,21 @@ export const es = {
2013
2634
  tool_call_mcp: "Llamar MCP",
2014
2635
  tool_call_runtime: "Llamar runtime",
2015
2636
  tool_create_task: "Crear task",
2016
- dedup: "dedup",
2017
- args: "args",
2018
- result: "result",
2637
+ dedup: "Dedup",
2638
+ args: "Args",
2639
+ result: "Result",
2019
2640
  auto: "Auto",
2020
2641
  auto_router: "Auto (decide el router)",
2021
- model_filter_ph: "filtrar o escribir modelo…",
2022
- loading_models: "cargando modelos…",
2023
- use_value: "usar “{value}”",
2024
- model_combobox_ph: "elegí o escribí un modelo…",
2025
- search_variable_ph: "buscar variable…",
2026
- no_matches: "sin coincidencias",
2642
+ model_filter_ph: "Filtrar o escribir modelo…",
2643
+ loading_models: "Cargando modelos…",
2644
+ use_value: "Usar “{value}”",
2645
+ model_combobox_ph: "Elegí o escribí un modelo…",
2646
+ search_variable_ph: "Buscar variable…",
2647
+ no_matches: "Sin coincidencias",
2027
2648
  create_variable: "Crear nueva variable…",
2028
2649
  kv_key_ph: "CLAVE",
2029
2650
  kv_value_ph: "valor",
2030
- remove_row: "quitar fila",
2651
+ remove_row: "Quitar fila",
2031
2652
  add_row: "Agregar fila",
2032
2653
  err_chat_failed: "Falló el chat.",
2033
2654
  err_stream_failed: "Falló el stream.",
@@ -2046,8 +2667,8 @@ export const es = {
2046
2667
  more_soon: "Más plugins próximamente…",
2047
2668
  tools_hint: "Tools que los plugins conectados exponen a los agentes de este proyecto.",
2048
2669
  tools_empty: "No hay tools de integraciones. Conectá un plugin para habilitarlas.",
2049
- tool_active: "activo",
2050
- tool_inactive: "inactivo",
2670
+ tool_active: "Activo",
2671
+ tool_inactive: "Inactivo",
2051
2672
  status_active: "Activo",
2052
2673
  status_error: "Error",
2053
2674
  status_unconfigured: "No configurado",
@@ -2058,7 +2679,12 @@ export const es = {
2058
2679
  validating: "Validando...",
2059
2680
  verifying: "Verificando token...",
2060
2681
  confirm: "Confirmar",
2682
+ change: "Cambiar",
2061
2683
  select_placeholder: "Seleccionar...",
2684
+ select_none: "Sin elegir",
2685
+ select_pick: "Elegir",
2686
+ select_missing: "Falta elegir. Confirmá uno abajo.",
2687
+ select_empty: "Esta cuenta no tiene opciones disponibles.",
2062
2688
  reveal: "Ver",
2063
2689
  hide: "Ocultar",
2064
2690
  credentials: "Credenciales {name}",
@@ -2069,6 +2695,11 @@ export const es = {
2069
2695
  err_connect: "Error al conectar",
2070
2696
  err_generic: "Ocurrió un error",
2071
2697
  action_done: "Listo",
2698
+ copy: "Copiar",
2699
+ connect_oauth: "Conectar con Google",
2700
+ oauth_waiting: "Esperando el consentimiento…",
2701
+ oauth_redirect_hint: "Registrá esta URI en tu OAuth client de Google (Credenciales → tu client → \"URIs de redireccionamiento autorizados\"):",
2702
+ oauth_reauth: "Cambió el acceso: volvé a conectar con Google para aplicarlo.",
2072
2703
  asana: {
2073
2704
  select_label: "Seleccioná el workspace a usar",
2074
2705
  connected: { user_name: "Conectado como", user_email: "Email", workspace_name: "Workspace" },
@@ -2080,6 +2711,28 @@ export const es = {
2080
2711
  },
2081
2712
  },
2082
2713
  },
2714
+ calendar: {
2715
+ connected: { account_email: "Cuenta", calendar_name: "Calendario" },
2716
+ fields: {
2717
+ client_id: {
2718
+ label: "Client ID de OAuth",
2719
+ help_label: "¿Cómo consigo el OAuth client?",
2720
+ help_steps: "Abrí console.cloud.google.com y elegí (o creá) un proyecto.\nHabilitá la Google Calendar API en ese proyecto.\nAndá a APIs y servicios → Pantalla de consentimiento de OAuth → tipo Externo, y agregá tu mail como usuario de prueba.\nCredenciales → Crear credenciales → ID de cliente de OAuth → tipo \"App de escritorio\".\nCopiá el Client ID y el Client secret y pegalos abajo.\nEn \"URIs de redireccionamiento autorizados\" pegá la URI que se muestra acá arriba.",
2721
+ },
2722
+ client_secret: {
2723
+ label: "Client secret",
2724
+ hint: "El secreto del mismo OAuth client. Se guarda en ~/.apx, nunca en el repo.",
2725
+ },
2726
+ write_access: {
2727
+ label: "Permitir escritura",
2728
+ hint: "Apagado, APX sólo lee tu agenda. Prendido, puede crear y mover eventos, invitar gente y armar Meet — y igual va a preguntar antes de cada uno.",
2729
+ },
2730
+ meet: {
2731
+ label: "Crear links de Meet",
2732
+ hint: "Cuando agenda con invitados, suma un link de Google Meet al evento.",
2733
+ },
2734
+ },
2735
+ },
2083
2736
  github: {
2084
2737
  connected: { user_login: "Conectado como", user_name: "Nombre" },
2085
2738
  fields: {