@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
@@ -12,12 +12,12 @@ export const en = {
12
12
  every_n_hours: "every {n} hours, at :{minute}",
13
13
  every_n_minutes: "every {n} minutes",
14
14
  every_minute: "every minute",
15
- every_label: "every N hours instead",
16
- use_cron: "edit as cron",
17
- use_picker: "use the picker",
18
- preset_every_day: "every day",
19
- preset_weekdays: "weekdays",
20
- preset_weekends: "weekends",
15
+ every_label: "Every N hours instead",
16
+ use_cron: "Edit as cron",
17
+ use_picker: "Use the picker",
18
+ preset_every_day: "Every day",
19
+ preset_weekdays: "Weekdays",
20
+ preset_weekends: "Weekends",
21
21
  day_short: { sun: "Sun", mon: "Mon", tue: "Tue", wed: "Wed", thu: "Thu", fri: "Fri", sat: "Sat" },
22
22
  },
23
23
  when: {
@@ -46,6 +46,7 @@ export const en = {
46
46
  disable: "Disable",
47
47
  open: "Open",
48
48
  close: "Close",
49
+ more: "More actions",
49
50
  confirm: "Confirm",
50
51
  optional: "(optional)",
51
52
  none: "—",
@@ -67,6 +68,8 @@ export const en = {
67
68
  pager_page: "Page {page} of {total}",
68
69
  pager_range: "{from}–{to} of {total}",
69
70
  pager_per_page:"Per page",
71
+ all: "All",
72
+ actions: "Actions",
70
73
  },
71
74
  daemon: {
72
75
  connecting: "Connecting to the daemon…",
@@ -75,8 +78,8 @@ export const en = {
75
78
  version: "Version",
76
79
  uptime: "Uptime",
77
80
  status: "Status",
78
- running: "running",
79
- down: "down",
81
+ running: "Running",
82
+ down: "Down",
80
83
  reload_hint: "POST /admin/reload — reloads ~/.apx/config.json without restarting.",
81
84
  shutdown_confirm: "Shut down the daemon? Upcoming requests will fail until it restarts.",
82
85
  shutdown_done: "Daemon stopped.",
@@ -110,12 +113,19 @@ export const en = {
110
113
  more_projects: "{count} more",
111
114
  collapse_projects: "Hide projects",
112
115
  expand_projects: "Show projects",
116
+ project_settings: "Project settings",
117
+ copy_path: "Copy path",
118
+ path_copied: "Path copied.",
119
+ copy_failed: "Could not copy.",
113
120
  modules: {
114
121
  voice: "Voices",
122
+ images: "Images",
115
123
  desktop: "Desktop",
116
124
  deck: "Deck",
117
125
  code: "Code",
118
126
  web: "Web",
127
+ // Caption under the rail icon — the full name doesn't fit in 3.6rem.
128
+ inbox_short: "Chats",
119
129
  },
120
130
  },
121
131
  topbar: {
@@ -149,9 +159,9 @@ export const en = {
149
159
  telegram_polling_started: "Polling started.",
150
160
  telegram_polling_stopped: "Polling stopped.",
151
161
  telegram_channel_removed: "Channel deleted.",
152
- agents_badge: "agents",
153
- engine_badge: "yes",
154
- engine_badge_no: "no",
162
+ agents_badge: "Agents",
163
+ engine_badge: "Yes",
164
+ engine_badge_no: "No",
155
165
  base_label: "Base",
156
166
  },
157
167
  add_project: {
@@ -168,6 +178,65 @@ export const en = {
168
178
  browser_unavailable: "Browser unavailable until daemon restarts. Paste path manually.",
169
179
  no_folders: "No folders.",
170
180
  },
181
+ mobile: {
182
+ back: "Back",
183
+ sessions: "Sessions",
184
+ no_sessions: "No saved sessions yet.",
185
+ live_session: "New session",
186
+ no_messages: "No messages yet",
187
+ team_members: "{count} agents",
188
+ empty: "You haven't talked to any agent yet.",
189
+ prefs: "Preferences",
190
+ app_options: "App options",
191
+ new_chat: "New chat",
192
+ new_chat_title: "Start a chat",
193
+ new_chat_empty: "No agents found.",
194
+ group_slug_clash: "You already picked another \"{slug}\" from a different project — @slug must be unique in the room.",
195
+
196
+ // The bottom bar: the three things you check standing up.
197
+ tab_chats: "Chats",
198
+ tab_tasks: "Tasks",
199
+ tab_commitments: "Promises",
200
+ tasks_search: "Search tasks",
201
+ commitments_search: "Search promises",
202
+ load_more: "Show {count} more",
203
+ // When something is due. Compared by calendar day, not by instant: a task
204
+ // due today at midnight is not overdue at 9am.
205
+ due: {
206
+ overdue: "Overdue",
207
+ today: "Today",
208
+ tomorrow: "Tomorrow",
209
+ week: "This week",
210
+ later: "Later",
211
+ none: "No date",
212
+ },
213
+ commitment_move: "Reschedule",
214
+ commitment_moved_toast: "Date rescheduled.",
215
+ commitment_closed: "Closed. Reopening one means agreeing a new date with the person — that lives in the panel.",
216
+ },
217
+ notify: {
218
+ title: "Notifications",
219
+ on: "Notifications on",
220
+ off: "Turn notifications on",
221
+ on_hint: "When an agent writes and you are not on its thread, this device says so.",
222
+ off_hint: "The panel updates itself silently; nothing reaches you when it is in the background.",
223
+ denied: "This browser is blocking notifications for this site. Allow them from the padlock next to the address, then reload.",
224
+ insecure: "Notifications need https. Turn the tunnel on with `apx panel tailscale on` and open the panel at that address.",
225
+ unsupported: "This browser has no notifications.",
226
+ native_off: "Notifications off",
227
+ native_on_hint: "Managed by APX Android. Tap to open system notification settings.",
228
+ native_off_hint: "Enable APX notifications in Android system settings.",
229
+ test: "Test",
230
+ test_title: "APX",
231
+ test_body: "If you can see this, notifications work on this device.",
232
+ test_failed: "Nothing was shown. Check the browser has permission at the system level.",
233
+ nudge: "Tell you when an agent writes?",
234
+ nudge_yes: "Turn on",
235
+ native_channels_hint: "What may interrupt you on this phone. Telegram starts off — its own app is already here. A muted channel is still there to read in the chat.",
236
+ // Per device, not per account: the phone has Telegram installed ON it,
237
+ // the laptop does not, so the same channel deserves opposite answers.
238
+ channels_hint: "Which channels may ring this device. The phone starts with Telegram off — the app is already on it.",
239
+ },
171
240
  inbox: {
172
241
  search: "Search",
173
242
  no_match: "Nothing matches",
@@ -178,11 +247,27 @@ export const en = {
178
247
  subtitle:
179
248
  "Every agent as a conversation, most recent first.",
180
249
  empty: "You have not talked to any agent yet.",
181
- pinned: "lead",
182
250
  show_quiet: "Show quiet agents",
183
251
  no_reply_yet: "(no replies yet)",
184
252
  },
185
253
 
254
+ // Channel filters + tags: which of the places a conversation can happen this
255
+ // DEVICE wants to see and be told about (lib/channels.ts).
256
+ channels: {
257
+ filter: "Channels",
258
+ // The trigger says how many are on without opening anything — which is the
259
+ // whole reason the picker is collapsed.
260
+ all: "All",
261
+ n_of_m: "{n} of {total}",
262
+ select_all: "Select all",
263
+ none: "None",
264
+ a2a: "Agent ↔ agent",
265
+ group: "Groups",
266
+ other: "No channel",
267
+ mobility: "Trips and errands",
268
+ all_hidden: "Every channel is switched off here. Tap one to bring it back.",
269
+ },
270
+
186
271
  settings: {
187
272
  title: "Settings",
188
273
  subtitle: "Panel preferences + local daemon diagnostics.",
@@ -221,8 +306,8 @@ export const en = {
221
306
  devices_pair_waiting: "Waiting for device to confirm…",
222
307
  devices_pair_done: "Device paired ✓",
223
308
  devices_pair_localhost_only: "Codes can only be generated from the daemon's PC (localhost).",
224
- devices_last_seen: "seen:",
225
- devices_never: "never",
309
+ devices_last_seen: "Seen:",
310
+ devices_never: "Never",
226
311
  devices_revoke: "Revoke",
227
312
  account_section: "Account",
228
313
  agents_section: "Agents & models",
@@ -252,7 +337,7 @@ export const en = {
252
337
  vanilla_hint:
253
338
  "No profile is active. APX behaves exactly as it always has — the super-agent prompt is identical to a clean install.",
254
339
  none_available: "No profiles available yet.",
255
- active: "active",
340
+ active: "Active",
256
341
  activate: "Activate",
257
342
  replace_active: "Replace the active one",
258
343
  deactivate: "Deactivate",
@@ -280,6 +365,12 @@ export const en = {
280
365
  no_settings: "This profile has nothing to configure.",
281
366
  settings_locked: "Activate the profile to change its settings.",
282
367
  doctor_vanilla: "No profile active. APX behaves as it always has.",
368
+ readopt_all: "Re-sync routines",
369
+ readopt_one: "Re-adopt",
370
+ readopt_title: "Re-adopt from package",
371
+ readopt_confirm:
372
+ "Reinstalls the affected routines from the package, discarding your local edits and repairing provenance. Routines you did not touch are left alone.",
373
+ readopt_done: "Routines re-adopted",
283
374
  },
284
375
 
285
376
  nudge: {
@@ -331,6 +422,8 @@ export const en = {
331
422
  model: "Active model",
332
423
  model_hint: "E.g.: anthropic:claude-sonnet-4.5, ollama:gemma2:9b",
333
424
  permission_mode: "Permission mode",
425
+ avatar: "Avatar",
426
+ avatar_hint: "Updates the Desktop and Android mascots immediately.",
334
427
  system: "Extra prompt (system)",
335
428
  system_hint: "Text prepended to the base system prompt.",
336
429
  system_ph: "(Empty = the base prompt from core/agent/prompts/super-agent-base.md is used)",
@@ -398,6 +491,7 @@ export const en = {
398
491
  nav: {
399
492
  overview: "Overview",
400
493
  chat: "Chat",
494
+ group: "Group",
401
495
  config: "Config",
402
496
  telegram: "Telegram",
403
497
  agents: "Agents",
@@ -422,6 +516,50 @@ export const en = {
422
516
  config: "Config",
423
517
  },
424
518
 
519
+ groups: {
520
+ title: "Groups",
521
+ new: "New",
522
+ new_group: "New group…",
523
+ new_hint: "Several agents in one room",
524
+ pick_members: "Pick members",
525
+ add_member: "Add to group",
526
+ make_group: "Add someone (make a group)",
527
+ remove_member: "Remove from group",
528
+ all_in: "Everyone's already in.",
529
+ joined_chat: "{name} joined the chat",
530
+ left_chat: "{name} left the chat",
531
+ new_title: "New group chat",
532
+ empty: "No groups yet.",
533
+ pick: "Pick a group or create a new one.",
534
+ no_messages: "No messages",
535
+ name_label: "Group name",
536
+ name_ph: "Optional",
537
+ members_label: "Members",
538
+ members_hint: "tap to add; the number is the order",
539
+ first_hint: "If you write without mentioning anyone, the first agent replies.",
540
+ create: "Create group",
541
+ start_hint: "Type to start. Use @ to address someone in particular.",
542
+ composer_ph: "Message… @mention · /invite name hi…",
543
+ invite_ph: "Message… /invite name hi…",
544
+ mention_pick: "Mention",
545
+ invite_cmd: "/invite",
546
+ suggest_hint: "↑↓ to move · Enter to pick · Esc to close",
547
+ cmd_menu: "Commands",
548
+ cmd_invite_label: "Invite",
549
+ cmd_invite_hint: "Add someone, then write their welcome message",
550
+ cmd_new_label: "New session",
551
+ cmd_new_hint: "Start a fresh chat with this agent",
552
+ cmd_tools_label: "Tools",
553
+ cmd_tools_hint: "Toggle tool cards in this thread",
554
+ you: "You",
555
+ you_initial: "Y",
556
+ pulled_by: "pulled in by {name}",
557
+ deleted: "Group deleted",
558
+ not_found: "Group not found.",
559
+ delete_title: "Delete group",
560
+ delete_confirm: "Delete the group “{title}”? The conversation is lost.",
561
+ },
562
+
425
563
  overview: {
426
564
  tasks_open: "Open tasks",
427
565
  routines: "Routines",
@@ -430,7 +568,7 @@ export const en = {
430
568
  mcps: "MCPs",
431
569
  artifacts: "Artifacts",
432
570
  chat: "Chat (super-agent)",
433
- chat_value: "open",
571
+ chat_value: "Open",
434
572
  roster: "Team",
435
573
  no_agents: "No agents yet.",
436
574
  orchestrators: "Orchestrators",
@@ -460,20 +598,39 @@ export const en = {
460
598
  send: "Send",
461
599
  stop: "Stop",
462
600
  new_session: "New session",
601
+ rename: "Rename",
602
+ rename_title: "Rename the session",
603
+ rename_label: "Name",
604
+ rename_hint: "Empty goes back to the name taken from the first thing said.",
605
+ renamed: "Session renamed.",
606
+ archive: "Archive",
607
+ unarchive: "Unarchive",
608
+ archived_ok: "Session archived.",
609
+ unarchived_ok:"Session unarchived.",
610
+ archived_group:"Archived",
611
+ new_session_confirm_title: "Start a new session",
612
+ new_session_confirm_desc: "You get a blank thread with the same agent. The current conversation stays saved and you can come back to it from the list.",
463
613
  delete: "Delete",
464
614
  delete_confirm_title: "Delete chat",
465
615
  delete_confirm_desc: "This can't be undone. This chat's history will be permanently deleted.",
466
616
  deleted: "Chat deleted.",
617
+ group_regen_title: "Regenerate the reply",
618
+ group_regen_confirm: "Regenerate",
619
+ group_edit_title: "Edit & resend",
620
+ group_edit_confirm: "Edit & resend",
621
+ group_rewind_desc: "This overwrites {n} newer message(s) in the group. It can't be undone.",
467
622
  meta_created: "Created {date} · {channel}",
468
623
  meta_new: "New chat · {channel}",
469
- copy: "copy",
624
+ copy: "Copy",
470
625
  copied: "Copied.",
471
626
  stopped_marker: " [stopped]",
472
627
  create_agent: "Create agent",
628
+ view_agent: "View agent",
473
629
  create_agent_title: "Create agent",
474
630
  create_agent_desc: "Required to start a chat in this project.",
475
- role_label: "role",
476
- model_label: "model",
631
+ slug_label: "Slug",
632
+ role_label: "Role",
633
+ model_label: "Model",
477
634
  model_hint: "e.g. openai:gpt-5, groq:llama-3.3-70b-versatile",
478
635
  master_label: "Master agent",
479
636
  list: {
@@ -484,27 +641,24 @@ export const en = {
484
641
  empty: "No conversations yet. Start one from the right.",
485
642
  count: "{n} total",
486
643
  pick_agent: "Pick an agent",
644
+ new_single: "Chat",
645
+ new_single_hint: "With one agent",
487
646
  },
488
647
  },
489
648
 
490
649
  tasks: {
491
650
  title: "Tasks (TODOs)",
492
651
  subtitle: "Append-only JSONL in ~/.apx/projects/<id>/tasks/.",
493
- add: "add",
494
- add_label: "New task",
495
652
  add_placeholder: "e.g. fix scroll bug",
496
653
  empty: "No {state} tasks.",
497
654
  empty_open: "No open tasks.",
498
655
  created: "Task created.",
499
- create_error: "could not create task",
656
+ create_error: "Could not create task",
500
657
  done: "✓ done",
501
658
  drop: "✗ drop",
502
659
  reopen: "↻ reopen",
503
- due: "due",
660
+ due: "Due",
504
661
  via: "via",
505
- aria_done: "mark done",
506
- aria_drop: "discard task",
507
- aria_reopen: "reopen task",
508
662
  },
509
663
 
510
664
  global_tasks: {
@@ -518,11 +672,11 @@ export const en = {
518
672
  field_project: "Project",
519
673
 
520
674
  field_due: "Due",
521
- any_status: "any status",
675
+ any_status: "Any status",
522
676
  title: "Tasks (all projects)",
523
677
  subtitle: "Aggregated tasks from all registered projects.",
524
678
  empty: "No tasks.",
525
- due: "due",
679
+ due: "Due",
526
680
  go_project: "Go to project",
527
681
  },
528
682
 
@@ -550,17 +704,53 @@ export const en = {
550
704
  title: "Commitments",
551
705
  subtitle: "What was promised, to whom, and by when. Separate from tasks: someone is waiting on these.",
552
706
  empty: "Nothing promised.",
553
- overdue: "was due",
554
707
  overdue_only: "Past their date",
555
708
  no_date: "no date agreed",
556
- moved: "moved",
709
+ moved: "Moved",
557
710
  mark_kept: "Kept",
558
711
  mark_missed: "Missed",
712
+ mark_dropped: "Delete",
713
+ dropped_toast: "Commitment deleted.",
714
+ confirm_kept_title: "Mark as kept?",
715
+ confirm_kept_desc: "Marks what you promised {who} as kept.",
716
+ confirm_missed_title: "Mark as missed?",
717
+ confirm_missed_desc: "Marks what you promised {who} as missed. It stays on the record.",
718
+ confirm_dropped_title: "Delete commitment?",
719
+ confirm_dropped_desc: "Deletes what you promised {who}. Use it when you filed it by mistake.",
720
+ select_row: "Select {who}",
721
+ bulk_selected: "{count} selected",
722
+ bulk_clear: "Clear selection",
723
+ confirm_bulk_kept_title: "Mark {count} as kept?",
724
+ confirm_bulk_kept_desc: "Marks {count} commitments as kept.",
725
+ confirm_bulk_dropped_title: "Delete {count} commitments?",
726
+ confirm_bulk_dropped_desc: "Deletes {count} commitments. For the ones you filed by mistake.",
727
+ bulk_kept_toast: "{count} commitments marked as kept.",
728
+ bulk_dropped_toast: "{count} commitments deleted.",
729
+ created: "Commitment recorded.",
730
+ edit_title: "Edit commitment",
731
+ row_actions: "Commitment actions",
732
+ list_title: "Commitments",
733
+ detail_empty: "Pick a commitment from the list.",
734
+ history_title: "Date history",
735
+ history_empty: "The date was never moved.",
736
+ promised: "Promised",
737
+ field_note: "Note",
738
+ field_due_move_hint: "Moving the date is recorded as a renegotiation, keeping the previous date in the history.",
559
739
  state: {
560
- open: "open",
561
- kept: "kept",
562
- missed: "missed",
563
- all: "all",
740
+ open: "Open",
741
+ kept: "Kept",
742
+ missed: "Missed",
743
+ dropped: "Deleted",
744
+ all: "All",
745
+ },
746
+ // Singular, for a single row's chip (the `state` block is plural
747
+ // because it labels the filters).
748
+ face: {
749
+ open: "Open",
750
+ overdue: "Overdue",
751
+ kept: "Kept",
752
+ missed: "Missed",
753
+ dropped: "Deleted",
564
754
  },
565
755
  },
566
756
 
@@ -568,14 +758,14 @@ export const en = {
568
758
  title: "Heartbeats / Routines",
569
759
  subtitle: "Cron, every:Nm, once:ISO. Each routine fires an agent or a shell.",
570
760
  empty: "No routines. Create one above.",
571
- new: "new",
761
+ new: "New",
572
762
  new_btn: "New",
573
763
  delete_confirm: "Delete routine {name}?",
574
764
  delete_confirm_body: "This can't be undone.",
575
765
  saved: "Routine saved.",
576
- paused: "paused",
577
- next_run: "next:",
578
- last_run: "last:",
766
+ paused: "Paused",
767
+ next_run: "Next:",
768
+ last_run: "Last:",
579
769
  enabled_hint: "Active · runs on schedule",
580
770
  disabled_hint: "Paused · only via Run button",
581
771
  enabled_label: "Enabled",
@@ -600,16 +790,27 @@ export const en = {
600
790
  block_command: "Command",
601
791
  block_empty: "(empty)",
602
792
  runs_title: "Executions",
793
+ // A run in flight: which phase of the pipeline it is in, and who asked.
794
+ phase_pre: "Running pre-commands",
795
+ phase_agent: "Working",
796
+ phase_delivery: "Delivering",
797
+ phase_post: "Running post-commands",
798
+ trigger_manual: "By hand",
799
+ trigger_schedule: "On schedule",
800
+ trigger_agent: "Asked by an agent",
801
+ live_waiting: "Starting up…",
603
802
  runs_empty: "No executions yet.",
604
803
  runs_close: "Close",
605
804
  runs_no_detail: "No further detail.",
606
805
  runs_output: "Output",
607
- status_ok: "ok",
608
- status_error: "error",
609
- status_skipped: "skipped",
806
+ runs_chat: "Chat",
807
+ open_chat: "Open chat",
808
+ status_ok: "Ok",
809
+ status_error: "Error",
810
+ status_skipped: "Skipped",
610
811
  agent_field: "Agent (spec.agent)",
611
812
  agent_hint: "Who executes the routine.",
612
- agent_loading: "loading…",
813
+ agent_loading: "Loading…",
613
814
  agent_pick: "— pick an agent —",
614
815
  prompt_exec: "Prompt (spec.prompt)",
615
816
  prompt_exec_ph: "what is pending for today?",
@@ -627,16 +828,23 @@ export const en = {
627
828
  shell_hint: "Runs as-is in the shell. No prompt, no pre/post.",
628
829
  hb_channel: "Channel (spec.channel)",
629
830
  hb_message: "Message (spec.message)",
630
- name_required: "name required",
631
- save_error: "save failed",
632
- run_error: "run failed",
633
- toggle_error: "toggle failed",
634
- delete_error: "delete failed",
831
+ name_required: "Name required",
832
+ save_error: "Save failed",
833
+ run_error: "Run failed",
834
+ toggle_error: "Toggle failed",
835
+ delete_error: "Delete failed",
635
836
  run_success: "{name} fired.",
636
837
  run_confirm: "Run routine {name} now?",
637
838
  run_confirm_body: "Runs the action once, regardless of the schedule.",
839
+ select_row: "Select {name}",
840
+ bulk_selected: "{count} selected",
841
+ bulk_run: "Run",
842
+ bulk_clear: "Clear selection",
843
+ confirm_bulk_run_title: "Run {count} routines?",
844
+ confirm_bulk_run_desc: "Runs {count} routines now, regardless of the schedule.",
845
+ bulk_run_toast: "{count} routines run.",
638
846
  running: "Running…",
639
- delete_success: "deleted.",
847
+ delete_success: "Deleted.",
640
848
  },
641
849
 
642
850
  agents: {
@@ -656,36 +864,45 @@ export const en = {
656
864
  orchestrator: "Orchestrator",
657
865
  new_title: "New agent",
658
866
  new_desc: "POST /projects/:pid/agents — writes .apc/agents/<slug>.md.",
659
- slug_label: "slug",
867
+ slug_label: "Slug",
660
868
  slug_ph: "cody",
661
- role_label: "role (optional)",
869
+ role_label: "Role (optional)",
662
870
  role_ph: "code refactor",
663
- model_label: "model (optional)",
871
+ model_label: "Model (optional)",
664
872
  model_hint: "e.g. ollama:gemma2:9b, openai:gpt-4o-mini",
665
- lang_label: "language (optional)",
666
- desc_label: "description (optional)",
873
+ lang_label: "Language (optional)",
874
+ desc_label: "Description (optional)",
667
875
  desc_ph: "What does this agent do…",
668
- skills_label: "skills (comma)",
876
+ skills_label: "Skills (comma)",
669
877
  skills_ph: "skill-a, skill-b",
670
- tools_label: "tools (comma)",
878
+ tools_label: "Tools (comma)",
671
879
  tools_ph: "tool-a, tool-b",
672
- parent_label: "reports to (parent, optional)",
880
+ parent_label: "Reports to (parent, optional)",
673
881
  parent_hint: "Sub-agent of an orchestrator.",
674
882
  none_parent: "— none —",
675
883
  master_label: "Orchestrator (master)",
676
884
  create_success: "Agent {slug} created.",
677
- create_error: "create failed",
885
+ create_error: "Create failed",
678
886
  import_title: "Import from vault",
679
887
  import_desc: "Templates in ~/.apx/agents. Registered in this project (.apc/agents/<slug>.md).",
680
888
  import_empty: "No templates in the vault.",
681
889
  import_success: "Imported: {slug}",
682
- import_already: "already here",
890
+ import_already: "Already here",
683
891
  import_btn: "Import",
684
892
  },
685
893
 
686
894
  agent_detail: {
687
895
  not_found: "Agent not found.",
688
896
  chat_btn: "Chat with {slug}",
897
+ clone_btn: "Clone",
898
+ clone_hint: "Duplicate this agent (prompt and memory) with a (n) name to avoid duplicates.",
899
+ clone_success: "Cloned as {slug}",
900
+ slug_label: "Slug (identifier)",
901
+ slug_hint: "The agent's key: names its file, its memory dir and its URL. Renaming moves them all.",
902
+ rename_btn: "Rename",
903
+ rename_from_name: "Use the name: {slug}",
904
+ rename_confirm: "Rename “{from}” to “{to}”? This moves the agent's file and its memory/conversations, and repoints sub-agents and routines that point at it.",
905
+ rename_success: "Renamed to {slug}",
689
906
  reports_to: "↳ reports to",
690
907
  no_threads: "No threads.",
691
908
  no_activity: "No recorded activity.",
@@ -693,6 +910,12 @@ export const en = {
693
910
  subagents: "Sub-agents",
694
911
  subagents_desc: "Agents that report to this orchestrator.",
695
912
  config_title: "Agent configuration",
913
+ tab_config: "Config",
914
+ tab_prompt: "Prompt",
915
+ config_identity: "Identity",
916
+ config_behavior: "Behavior & hierarchy",
917
+ config_behavior_desc: "Autonomy, reporting line and model override.",
918
+ config_capabilities: "Skills & tools",
696
919
  type_label: "Type",
697
920
  area_label: "Area",
698
921
  area_hint: "e.g. operations, marketing",
@@ -701,20 +924,26 @@ export const en = {
701
924
  parent_label: "Reports to (parent)",
702
925
  none_parent: "— none —",
703
926
  model_label: "Base model",
704
- model_hint: "Empty = uses the Router model (default). Set only to force a model for this agent.",
927
+ model_hint: "`inherit` = router default (chat can still pick a model for that turn). A `provider:model` overwrites the field.",
705
928
  model_ph: "(empty = router default)",
929
+ model_router_default: "Router default",
930
+ model_provider_default: "{provider} · default",
931
+ model_unlisted: "not from a configured provider",
706
932
  skills_label: "Skills (comma)",
707
933
  bio_label: "Bio / description",
708
934
  system_label: "System prompt",
709
935
  system_hint: "Defines personality and behavior (body of AGENT.md).",
936
+ prompt_lines: "{n} lines",
937
+ prompt_empty: "Not set",
710
938
  master_label: "Orchestrator (master)",
711
939
  delete_btn: "Delete agent",
712
940
  save_btn: "Save changes",
713
941
  delete_confirm: "Delete agent \"{slug}\"? Removes .apc/agents/{slug}.md and local runtime data.",
714
942
  update_success: "Agent updated.",
715
943
  delete_success: "Agent deleted.",
716
- tools_hint: "Which tools this agent can use. Tap to toggle; or edit the list below.",
717
- tools_custom_ph: "list (comma): echo, http_fetch",
944
+ tools_hint: "This agent's allowlist — not the super-agent registry. For editing: write_file, edit_file, run_command, list_skills, load_skill. Browser/HTTP/MCP stay opt-in.",
945
+ tools_custom_ph: "+ custom tool…",
946
+ tools_csv_ph: "selected tools, comma-separated",
718
947
  memory_title: "Agent memory",
719
948
  memory_empty: "(empty memory)",
720
949
  memory_saved: "Memory saved.",
@@ -727,13 +956,18 @@ export const en = {
727
956
  brain_title: "Brain",
728
957
  brain_desc: "Real relationship graph of the agent: memory, threads, tasks, heartbeats and hierarchy. (first version — will be refined)",
729
958
  brain_empty: "No relationships to graph yet (no memory, threads, tasks or routines).",
730
- msgs_count: "msgs",
959
+ msgs_count: "Msgs",
731
960
  },
732
961
 
733
962
  mcps: {
734
963
  title: "MCP servers",
735
964
  subtitle: "3 scopes: runtime > shared > global. Conflicts shown above if any.",
736
965
  empty: "No MCPs configured.",
966
+ filter_label: "Filter by scope",
967
+ filter_all: "All",
968
+ filter_project: "Project",
969
+ filter_global: "Global",
970
+ filter_empty: "No MCPs match this filter.",
737
971
  new: "MCP",
738
972
  delete_confirm: "Delete MCP {name} from scope {scope}?",
739
973
  conflicts: "⚠ Conflicts: {names}",
@@ -754,9 +988,9 @@ export const en = {
754
988
  url_ph: "https://example.com/mcp",
755
989
  enabled_label: "Enabled",
756
990
  add_btn: "Add",
757
- name_required: "name required",
991
+ name_required: "Name required",
758
992
  env_invalid: "env must be valid JSON",
759
- removed: "removed",
993
+ removed: "Removed",
760
994
  added: "MCP added.",
761
995
  updated: "MCP updated.",
762
996
  edit_title: "Edit MCP",
@@ -773,7 +1007,7 @@ export const en = {
773
1007
  logs_events: "Recent events",
774
1008
  logs_stderr: "stderr (last 4KB)",
775
1009
  logs_panel_title: "Live logs",
776
- logs_panel_pick: "pick an MCP",
1010
+ logs_panel_pick: "Pick an MCP",
777
1011
  logs_panel_hint: "Click an MCP in the list to see what's happening live.",
778
1012
  logs_panel_idle: "No activity. Hit Test to spin it up.",
779
1013
  scope_runtime: "Runtime",
@@ -819,9 +1053,9 @@ export const en = {
819
1053
  filter_project: "Project only",
820
1054
  filter_global: "Globals only",
821
1055
  scope_label: "Scope",
822
- scope_project: "project",
1056
+ scope_project: "Project",
823
1057
  scope_project_desc: "This project only. Beats the global with the same name.",
824
- scope_global: "global",
1058
+ scope_global: "Global",
825
1059
  scope_global_desc: "Available to every project.",
826
1060
  name_label: "Name",
827
1061
  name_hint: "Uppercase, digits and _. E.g. MY_API_KEY, GITHUB_TOKEN.",
@@ -847,7 +1081,7 @@ export const en = {
847
1081
  pick: "Pick an agent to view its conversations.",
848
1082
  empty: "No conversations for {slug}.",
849
1083
  conversation_title: "Conversation {id}",
850
- messages: "messages",
1084
+ messages: "Messages",
851
1085
  via: "via",
852
1086
  },
853
1087
 
@@ -888,7 +1122,7 @@ export const en = {
888
1122
  chat_id: "Chat ID (override)",
889
1123
  saved: "Override saved.",
890
1124
  cleared: "Override removed — falls back to default.",
891
- override_active: "override active",
1125
+ override_active: "Override active",
892
1126
  channel_badge: "Channel {name}",
893
1127
  no_override: "No override. Messages from this project go to the default channel.",
894
1128
  respond_engine: "Respond with engine",
@@ -907,6 +1141,9 @@ export const en = {
907
1141
  sidebar_title: "Memories",
908
1142
  general_group: "General",
909
1143
  general_item: "Project memory",
1144
+ committed: "In repo",
1145
+ local_item: "Internal memory",
1146
+ not_committed: "Local",
910
1147
  project_title: "Project memory",
911
1148
  project_desc: "Durable facts at the project level. .apc/memory.md — read by agents and the super-agent.",
912
1149
  project_ph: "# Project Memory\n\nStable facts that any agent should know…",
@@ -931,7 +1168,7 @@ export const en = {
931
1168
  workspaces_new: "New project",
932
1169
  workspaces_empty: "No projects. Add one with the button above.",
933
1170
  sessions_title: "Sessions",
934
- sessions_desc: "Sessions from all engines (apx · claude · codex), newest first.",
1171
+ sessions_desc: "Sessions from all engines (apx · claude · codex · opencode), newest first.",
935
1172
  sessions_desc_scoped: "Sessions in this project's folder ({path}), all engines, newest first.",
936
1173
  sessions_all: "All engines",
937
1174
  sessions_empty: "No sessions.",
@@ -942,15 +1179,26 @@ export const en = {
942
1179
  sessions_clear: "Clear filters",
943
1180
  sessions_refresh: "Refresh list",
944
1181
  sessions_no_match: "No sessions match “{q}”.",
945
- sessions_act_cmd: "Copy apx command",
1182
+ sessions_act_cmd: "Copy command",
946
1183
  sessions_act_ask: "Ask {name} to continue",
947
1184
  sessions_act_folder:"Open folder",
948
1185
  sessions_act_path: "Copy path",
1186
+ sessions_act_menu: "Session actions",
1187
+ sessions_act_open_terminal:"Continue here",
1188
+ sessions_pick: "Pick a session to see its detail.",
1189
+ sessions_detail_command:"Command to continue it",
1190
+ sessions_detail_folder:"Folder",
1191
+ sessions_detail_updated:"Last activity",
1192
+ sessions_detail_last_prompt:"Last message",
1193
+ sessions_term_connecting:"Connecting…",
1194
+ sessions_term_closed:"Session closed",
1195
+ sessions_term_close:"Close the terminal",
949
1196
  sessions_cmd_copied:"Command copied — paste it in your terminal",
950
1197
  sessions_path_copied:"Path copied",
951
1198
  sessions_copy_failed:"Could not copy",
952
1199
  sessions_no_folder: "This session has no folder",
953
1200
  sessions_no_path: "This session has no path",
1201
+ sessions_no_command:"This engine cannot reopen the session",
954
1202
  sessions_folder_failed:"Could not open folder: {msg}",
955
1203
  defaults_title: "Agent defaults",
956
1204
  defaults_desc: "Global vault templates. Bundled ones come with APX and are always present; ones you create or edit go in ~/.apx/agents and override. Import them into a project from Agents › Import.",
@@ -983,21 +1231,21 @@ export const en = {
983
1231
  desc_global: "Daemon activity (global channels: telegram, direct…). ~/.apx/messages/<channel>/.",
984
1232
  desc_project: "Project activity. ~/.apx/projects/<id>/messages/.",
985
1233
  filter_channel: "filter channel (e.g. telegram)",
986
- filter_dir: "direction",
1234
+ filter_dir: "Direction",
987
1235
  all_directions: "All directions",
988
1236
  in: "Incoming (in)",
989
1237
  out: "Outgoing (out)",
990
- filter_type: "type",
1238
+ filter_type: "Type",
991
1239
  all_types: "All types",
992
- search_text: "search text…",
1240
+ search_text: "Search text…",
993
1241
  count_of: "of",
994
1242
  no_activity: "No activity.",
995
1243
  no_activity_ch: "No activity in channel \"{ch}\".",
996
1244
  error: "Could not read messages: {msg}",
997
- show_more: "show more",
998
- event_routine_created: "routine created",
999
- event_routine_updated: "routine updated",
1000
- show_less: "show less",
1245
+ show_more: "Show more",
1246
+ event_routine_created: "Routine created",
1247
+ event_routine_updated: "Routine updated",
1248
+ show_less: "Show less",
1001
1249
  daemon_errors: "Daemon errors (~/.apx/logs/errors.jsonl)",
1002
1250
  no_errors: "No errors recorded. 🎉",
1003
1251
  },
@@ -1006,15 +1254,15 @@ export const en = {
1006
1254
  title: "Telegram contacts",
1007
1255
  desc: "Who writes to the bots. The role defines which tools they can use; a guest has no permissions until you assign a role.",
1008
1256
  empty: "No contacts yet — they register automatically when someone writes to a bot.",
1009
- owner_badge: "owner",
1257
+ owner_badge: "Owner",
1010
1258
  assign_role: "Assign role",
1011
1259
  owner_hint: "Channel owner — change it from the channel",
1012
1260
  removed: "Contact deleted.",
1013
1261
  delete_confirm: "Delete contact {name}?",
1014
- last_seen: "seen:",
1015
- tools_all: "tools: all",
1016
- tools_none: "tools: none",
1017
- tools_label: "tools:",
1262
+ last_seen: "Seen:",
1263
+ tools_all: "Tools: all",
1264
+ tools_none: "Tools: none",
1265
+ tools_label: "Tools:",
1018
1266
  },
1019
1267
 
1020
1268
  telegram_channels: {
@@ -1025,7 +1273,7 @@ export const en = {
1025
1273
  removed: "Channel deleted.",
1026
1274
  delete_confirm: "Delete channel {name}?",
1027
1275
  no_owner: "no owner (claimed on first DM)",
1028
- owner_label: "owner:",
1276
+ owner_label: "Owner:",
1029
1277
  },
1030
1278
 
1031
1279
  telegram_channel_dialog: {
@@ -1042,7 +1290,7 @@ export const en = {
1042
1290
  owner_hint: "Telegram user_id of the channel owner. Overrides global role to 'owner' here. Leave empty — first private message claims it.",
1043
1291
  owner_ph: "889721252",
1044
1292
  respond_label: "Respond with engine (not echo)",
1045
- name_required: "name required",
1293
+ name_required: "Name required",
1046
1294
  saved: "Channel saved.",
1047
1295
  },
1048
1296
 
@@ -1055,9 +1303,9 @@ export const en = {
1055
1303
  title: "Roles",
1056
1304
  desc: "Each role defines which super-agent tools the assigned user can invoke. 'owner' always = all; 'guest' always = none (chat only).",
1057
1305
  empty: "No roles defined.",
1058
- tools_all: "all tools",
1059
- tools_none: "no tools",
1060
- builtin: "built-in",
1306
+ tools_all: "All tools",
1307
+ tools_none: "No tools",
1308
+ builtin: "Built-in",
1061
1309
  delete_confirm: "Delete role \"{name}\"?",
1062
1310
  removed: "Role deleted.",
1063
1311
  saved: "Role \"{name}\" saved.",
@@ -1112,6 +1360,19 @@ export const en = {
1112
1360
  new_session: "New session",
1113
1361
  untitled: "New session",
1114
1362
  no_sessions: "No sessions yet — create one to start coding.",
1363
+ no_sessions_here: "No sessions in this project. Clear the filter to see the rest.",
1364
+ msg_count: "{n} msg",
1365
+ all_projects: "All projects",
1366
+ all_projects_desc: "Sessions from every registered project, newest first",
1367
+ new_session_desc: "Pick where it runs and who answers in it.",
1368
+ create_session: "Create session",
1369
+ field_project: "Project",
1370
+ field_project_hint: "Files, terminal and diff are scoped to it.",
1371
+ field_agent: "Agent",
1372
+ field_agent_hint: "Who answers in this session. Changeable later from Context.",
1373
+ field_mode: "Mode",
1374
+ field_title: "Title",
1375
+ field_title_hint: "Optional — how the session shows in the list.",
1115
1376
  pick_project: "Pick a project to see its sessions.",
1116
1377
  rename: "Rename",
1117
1378
  delete: "Delete",
@@ -1151,6 +1412,8 @@ export const en = {
1151
1412
  close: "Close",
1152
1413
  reload: "Reload",
1153
1414
  discard_changes: "Discard changes",
1415
+ discard_label: "Discard",
1416
+ save_label: "Save",
1154
1417
  save_shortcut_hint: "Save (Cmd/Ctrl+S)",
1155
1418
  artifacts_rename: "Rename",
1156
1419
  artifacts_view: "View contents",
@@ -1164,12 +1427,15 @@ export const en = {
1164
1427
  artifacts_preview_public:"Public URL",
1165
1428
  artifacts_copy_url: "Copy URL",
1166
1429
  artifacts_preview_started: "Preview running at {url}",
1430
+ tree_title: "Files",
1167
1431
  tree_collapse_all: "Collapse all",
1432
+ terminal_title: "Terminal",
1168
1433
  terminal_clear: "Clear",
1169
1434
  terminal_close: "Close terminal",
1170
1435
  },
1171
1436
 
1172
1437
  desktop_screen: {
1438
+ model_title: "Model",
1173
1439
  status_title: "Status",
1174
1440
  autostart_title: "Auto-start",
1175
1441
  shortcut_title: "Keyboard shortcut",
@@ -1179,6 +1445,89 @@ export const en = {
1179
1445
  open_config: "Configuration",
1180
1446
  },
1181
1447
 
1448
+ images_screen: {
1449
+ providers_title: "Image engines",
1450
+ test_title: "Test image",
1451
+ defaults_title: "Shared defaults",
1452
+ configure_provider: "Configure {name}",
1453
+ },
1454
+
1455
+ images_ui: {
1456
+ providers_desc: "Engines are tried in order and the first reachable one draws. Turn one off to take it out of the chain, or add your own endpoint — a server on this Mac, a box on the LAN, or a cloud key.",
1457
+ providers_load_error: "Could not load the engines: {msg}",
1458
+ test_desc: "Draw one picture with the current routing. It also reports anything the engine could not honor.",
1459
+ defaults_desc: "The bottom layer under every image. An engine's own settings override these, and an explicit argument overrides both.",
1460
+ move_up: "Move up",
1461
+ move_down: "Move down",
1462
+ configure: "Configure",
1463
+ remove: "Remove",
1464
+ add_provider: "Add engine",
1465
+ new_provider: "New engine",
1466
+ remove_confirm: "Remove this engine?",
1467
+ custom_note: "Your own endpoint.",
1468
+ custom_desc: "Any server that speaks one of the three dialects. Pick the one it answers on — a wrong choice is a 404, not a subtle difference.",
1469
+ badge_local: "Local",
1470
+ badge_available: "Reachable",
1471
+ badge_unavailable: "Unreachable",
1472
+ badge_not_configured: "Not configured",
1473
+ label_label: "Name",
1474
+ label_hint: "How it appears in this list.",
1475
+ kind_label: "Dialect",
1476
+ kind_hint: "Which API the server answers on.",
1477
+ base_url_label: "Base URL",
1478
+ base_url_req_label: "Base URL (required)",
1479
+ base_url_hint: "The server's origin, without the API path — e.g. http://127.0.0.1:7860 for a local server or http://box.lan:8189 for one on the network.",
1480
+ base_url_openai_hint: "Leave empty for OpenAI itself. Set it to point at any OpenAI-compatible server instead.",
1481
+ api_key_label: "API key",
1482
+ api_key_set: "Set (…{suffix}) — type to replace",
1483
+ api_key_keep_hint: "Leave empty to keep the stored key.",
1484
+ api_key_optional_hint: "Optional. Most local and LAN servers need none.",
1485
+ api_key_reuse_hint: "Optional: falls back to {engine} or the {env} environment variable.",
1486
+ model_label: "Model",
1487
+ model_hint: "Checkpoint or model id, where the server can switch. Servers that host one model ignore it.",
1488
+ optional_ph: "Optional",
1489
+ server_default_ph: "Server default",
1490
+ engine_default: "Engine default",
1491
+ configured_default: "Configured default",
1492
+ engine_defaults_hint: "Defaults for THIS engine — they belong to the server, not to the prompt. A turbo checkpoint wants about 8 steps at cfg 1; a standard one wants 20 at cfg 7.",
1493
+ size_label: "Size",
1494
+ size_hint: "Width x height, e.g. 768x512.",
1495
+ default_size_hint: "Used when neither the engine nor the call says otherwise.",
1496
+ steps_label: "Steps",
1497
+ steps_hint: "Sampling steps. More is slower, not always better.",
1498
+ cfg_label: "Guidance (cfg)",
1499
+ cfg_hint: "How closely the picture follows the prompt.",
1500
+ sampler_label: "Sampler",
1501
+ scheduler_label: "Scheduler",
1502
+ format_label: "Format",
1503
+ format_hint: "Only where the server lets you choose.",
1504
+ quality_label: "Quality",
1505
+ quality_hint: "OpenAI only: standard or hd.",
1506
+ timeout_label: "Timeout (s)",
1507
+ timeout_hint: "How long to wait for one image before giving up.",
1508
+ negative_label: "Negative prompt",
1509
+ negative_hint: "What to keep out of every picture. The OpenAI dialect has no field for it.",
1510
+ negative_ph: "Blurry, watermark, text",
1511
+ count_label: "Images per run",
1512
+ count_hint: "How many to draw at once.",
1513
+ prompt_label: "Prompt",
1514
+ prompt_ph: "A green origami fox on a white background, studio light",
1515
+ engine_label: "Engine",
1516
+ test_routed_chain: "Routed (first reachable)",
1517
+ test_routed_single: "Routed ({id})",
1518
+ generate: "Generate",
1519
+ download: "Download",
1520
+ seed_is: "Seed {seed}",
1521
+ ignored_note: "{provider} ignored: {options}. That dialect has no field for them.",
1522
+ mock_desc: "The offline test engine. Always available so a call never fails outright — nothing to configure.",
1523
+ err_label_required: "A name is required.",
1524
+ err_base_url_required: "A base URL is required.",
1525
+ err_save: "Could not save.",
1526
+ toast_config_saved: "Engine saved.",
1527
+ toast_defaults_saved: "Defaults saved.",
1528
+ toast_provider_removed: "Engine removed.",
1529
+ },
1530
+
1182
1531
  voice_screen: {
1183
1532
  providers_title: "Voice providers (TTS)",
1184
1533
  test_title: "Test voice",
@@ -1204,10 +1553,27 @@ export const en = {
1204
1553
  provider_hint: "Ollama is local and free. Gemini/OpenAI use the API key from their section in Models (or the one below).",
1205
1554
  mode_label: "Selection mode",
1206
1555
  mode_hint: "Chain falls back to the next if one fails; Single uses exactly the chosen provider.",
1207
- available: "available",
1208
- unavailable: "unavail.",
1556
+ chain_label: "Fallback order",
1557
+ chain_hint: "Drag with the arrows: the first available engine embeds. Keys come from Engines & models — pick each provider's embedding model right here. Turn off Ollama to stop using it.",
1558
+ keys_reuse_note: "API keys are reused from Engines & models — no need to re-enter them. Only set the embedding model per provider.",
1559
+ model_ph: "embedding model id",
1560
+ move_up: "Move up",
1561
+ move_down: "Move down",
1562
+ badge_local: "Local",
1563
+ badge_custom: "Custom",
1564
+ not_configured: "No key",
1565
+ always_on: "Always on",
1566
+ add_custom: "Add custom provider",
1567
+ remove: "Remove",
1568
+ custom_default_label: "Custom",
1569
+ custom_label_ph: "Name",
1570
+ custom_key_label: "API key",
1571
+ custom_optional_ph: "(optional)",
1572
+ available: "Available",
1573
+ unavailable: "Unavail.",
1209
1574
  test_btn: "Test embedding",
1210
1575
  reindex_btn: "Reindex memory",
1576
+ active_embedder: "Active: {embedder}",
1211
1577
  test_ok: "Embedding OK with {embedder}",
1212
1578
  test_failed: "Test failed: {msg}",
1213
1579
  reindexed: "Reindexed: {indexed} chunks (cleared {cleared}).",
@@ -1245,24 +1611,44 @@ export const en = {
1245
1611
  compact_fallback_ph: "(empty → super-agent model)",
1246
1612
  },
1247
1613
 
1614
+ provider_test: {
1615
+ title: "Test {name}",
1616
+ description: "One message, one reply. Not a chat: nothing is stored and no history is sent.",
1617
+ model_label: "Model to test",
1618
+ model_hint: "Pick one from the list or type the id by hand.",
1619
+ message_label: "Message",
1620
+ message_ph: "Type something short…",
1621
+ default_message: "Hi, can you hear me?",
1622
+ send: "Send",
1623
+ waiting: "Waiting for a reply…",
1624
+ empty_reply: "(replied empty)",
1625
+ tokens: "{n} tokens",
1626
+ served: "Served {id}",
1627
+ served_mismatch: "gateway served a different id",
1628
+ button: "Test the connection",
1629
+ },
1630
+
1248
1631
  router_panel: {
1249
1632
  title: "Model router",
1250
1633
  description: "A single general router (no per-task cases). Pick a provider and model; if the active one fails, it tries the fallback chain in order.",
1251
- badge_default: "default",
1634
+ badge_default: "Default",
1252
1635
  no_providers: "Add a provider below to be able to pick models.",
1253
- active_model_label: "Active model (default)",
1254
- active_model_hint: "Provider + model. Saved as provider:model.",
1255
- fallback_title: "Fallback chain",
1256
- fallback_desc: "If the active model fails, it tries these in order. Click one to edit it.",
1257
- fallback_empty: "No fallback configured.",
1636
+ chain_title: "Model chain",
1637
+ chain_desc: "#1 is the default model; if it fails, the ones below are tried in order. Click one to edit it.",
1638
+ reorder: "Drag to reorder",
1639
+ chain_empty: "No models yet. Add the first one below.",
1258
1640
  add_to_chain: "Add to the chain",
1259
- done: "done",
1641
+ done: "Done",
1260
1642
  save: "Save router",
1261
1643
  saved: "Saved",
1262
1644
  saved_toast: "Router saved.",
1263
1645
  provider_ph: "— provider —",
1264
- provider_not_found: "⚠ {name} (not found)",
1265
1646
  provider_not_configured: "The provider \"{name}\" is not configured.",
1647
+ provider_off: "The provider \"{name}\" is switched off.",
1648
+ provider_offline: "The provider \"{name}\" is not connected (no api key, or the server is down).",
1649
+ hint_off: "Off",
1650
+ hint_offline: "not connected",
1651
+ ollama_empty: "Ollama did not answer and nothing is cached — type the model by hand.",
1266
1652
  },
1267
1653
 
1268
1654
  routing_panel: {
@@ -1326,6 +1712,8 @@ export const en = {
1326
1712
  custom: "Custom",
1327
1713
  json_mode: "JSON",
1328
1714
  form_mode: "Back to form",
1715
+ tab_form: "Form",
1716
+ tab_json: "JSON",
1329
1717
  json_label: "Provider config (JSON)",
1330
1718
  json_hint: "Saved as engines.{slug} in config.json",
1331
1719
  json_help: "Must be a valid JSON object with at least engine. The slug is taken from the form.",
@@ -1352,6 +1740,8 @@ export const en = {
1352
1740
  price_cache_write: "$ cache write / 1M",
1353
1741
  model_limits_label: "Per-model context limits (JSON)",
1354
1742
  active_label: "Active (agents can use it)",
1743
+ thinking_label: "Think before answering",
1744
+ thinking_hint: "Turn off when the model reasons out loud and spends the token budget before writing the answer.",
1355
1745
  err_slug_required: "Slug required.",
1356
1746
  err_slug_required_form: "Slug required (in the form).",
1357
1747
  err_slug_exists: "A provider \"{slug}\" already exists.",
@@ -1377,13 +1767,109 @@ export const en = {
1377
1767
 
1378
1768
  chat_ui: {
1379
1769
  copy: "Copy",
1770
+ edit: "Edit",
1771
+ edit_resend: "Save & resend",
1772
+ regenerate: "Regenerate",
1380
1773
  stop: "Stop",
1381
1774
  send: "Send",
1775
+ queued: "Queued",
1776
+ queued_cancel: "Don't send it",
1777
+ running_elsewhere: "Writing a reply",
1778
+ unread_reply: "New reply",
1779
+ send_mode_interrupt: "Interrupts",
1780
+ send_mode_queue: "Queues",
1781
+ send_mode_tip_interrupt: "Writing during a turn cuts it short and starts with your message. Tap to queue instead.",
1782
+ send_mode_tip_queue: "Writing during a turn waits for it to finish. Tap to interrupt instead.",
1382
1783
  pick_model: "Pick model (or Auto)",
1383
1784
  insert_variable: "Insert variable",
1384
- ctx_files: "files",
1785
+ ctx_files: "Files",
1385
1786
  ctx_actors: "{n} agents/models",
1386
1787
  ctx_turns: "{n} turns",
1788
+ ctx_tokens: "Tokens",
1789
+ ctx_tools: "Tools",
1790
+ ctx_expand: "Show the context detail",
1791
+ jump_latest: "Jump to latest",
1792
+ jump_latest_new: "New messages",
1793
+ typing: "{name} is typing…",
1794
+ working: "{name} is working…",
1795
+ typing_generic: "Typing…",
1796
+ working_generic: "Working…",
1797
+ actions_count: "{n} actions",
1798
+ actions_count_one: "1 action",
1799
+ // A turn that ran tools, said something, then ran more: several blocks,
1800
+ // ONE count. Numbered against the turn so the second block does not read
1801
+ // as a second turn starting over at one.
1802
+ actions_range: "Actions {from}–{to} of {total}",
1803
+ actions_at: "Action {n} of {total}",
1804
+ show_tools: "Show tools",
1805
+ show_tools_hint: "Off = clean chat; on = actions and tools visible",
1806
+ show_tools_on: "Full view (tools)",
1807
+ show_tools_off: "Simple view (no tools)",
1808
+ thinking_label: "Thinking",
1809
+ thinking_running: "Thinking…",
1810
+ attachment: "Attachment",
1811
+ attachment_open: "Download",
1812
+ attachment_missing: "was not downloaded",
1813
+ attachment_failed: "could not be opened",
1814
+ voice_note: "Voice note",
1815
+ attach: "Attach a file",
1816
+ attach_remove: "Remove",
1817
+ attach_failed: "could not be uploaded",
1818
+ attach_bad_type: "{ext} files can't be attached",
1819
+ attach_too_big: "over {mb} MB",
1820
+ attach_photo: "Photo or video",
1821
+ attach_file: "File",
1822
+ attach_camera: "Camera",
1823
+ record: "Record audio",
1824
+ rec_cancel: "Discard",
1825
+ rec_insecure: "The microphone needs HTTPS (or localhost)",
1826
+ rec_denied: "Microphone permission was denied",
1827
+ rec_failed: "Could not open the microphone",
1828
+ transcribing: "Transcribing…",
1829
+ },
1830
+
1831
+ access: {
1832
+ install_title: "Install as an app",
1833
+ install_sub: "The panel installs to a phone as an app: its own icon, no address bar.",
1834
+ install_now: "Install app",
1835
+ install_done: "Already installed",
1836
+ install_ios: "On iPhone: Share → Add to Home Screen. Safari does not allow installing from here.",
1837
+ install_insecure: "This browser cannot install from a plain http:// address on a local network. It needs HTTPS — the simplest route is publishing the panel over Tailscale, below. Without HTTPS there is no microphone and no clipboard either.",
1838
+ install_unsupported: "This browser has not offered the install yet. In Chrome you can force it from the ⋮ menu → Install app.",
1839
+ addresses_title: "Addresses",
1840
+ addresses_sub: "Every way to reach this daemon. If one stops answering, the panel tries the others by itself.",
1841
+ secure: "Secure",
1842
+ here: "You are here",
1843
+ copy: "Copy",
1844
+ copied: "Copied",
1845
+ qr: "Show QR",
1846
+ qr_hint: "Scan with the phone's camera, then pair the device for its token.",
1847
+ local_only: "The daemon only listens on loopback: nothing on the network can reach it. To share it: apx panel share",
1848
+ kind_ts_https: "Tailnet HTTPS",
1849
+ kind_ts: "Tailnet",
1850
+ kind_lan: "Local network",
1851
+ kind_local: "This machine",
1852
+ tailscale_title: "Tailscale",
1853
+ tailscale_sub: "A stable name that works from anywhere, with a real certificate.",
1854
+ ts_absent: "Tailscale is not installed on this machine.",
1855
+ ts_stopped: "Tailscale is installed but not connected (state: {state}). Sign in from the Tailscale app.",
1856
+ ts_running: "Connected",
1857
+ serve_start: "Publish over HTTPS",
1858
+ serve_stop: "Stop publishing",
1859
+ serve_on: "Published on the tailnet",
1860
+ serve_off: "No longer published",
1861
+ serve_failed: "Could not publish",
1862
+ why_https: "Without HTTPS the browser switches off three things: installing the app, the microphone and the clipboard. That is not APX's decision.",
1863
+ },
1864
+
1865
+ mobile_link: {
1866
+ title: "Open on your phone",
1867
+ desc: "Scan the QR with the phone's camera to open the mobile chat.",
1868
+ scan_paired: "One scan does both: opens the chat and pairs the device.",
1869
+ scan_plain: "Opens the mobile chat. If the device is not paired, it will ask there.",
1870
+ paired: "Done — the phone is paired",
1871
+ insecure: "This address is http://, so on the phone you will not be able to install it as an app or record audio. For that: apx panel tailscale on",
1872
+ open_chat: "Open mobile chat",
1387
1873
  },
1388
1874
 
1389
1875
  sidebar_ui: {
@@ -1423,7 +1909,7 @@ export const en = {
1423
1909
  openai_style_hint: "Base voice / instruct, used by custom endpoints (the persona kept across the audio). Ignored by stock OpenAI tts-1.",
1424
1910
  style_label: "Style (how it should speak)",
1425
1911
  style_hint: "Natural-language instruction. Empty = no style. E.g.: 'speak in a cheerful, unhurried tone'.",
1426
- style_ph: "speak in a cheerful, energetic tone",
1912
+ style_ph: "Speak in a cheerful, energetic tone",
1427
1913
  temperature_label: "Temperature (optional)",
1428
1914
  temperature_hint: "Sampling temperature for custom endpoints. Empty = server default.",
1429
1915
  emotions_short: "Emotions",
@@ -1445,12 +1931,12 @@ export const en = {
1445
1931
  mode_single_btn: "Default engine only",
1446
1932
  move_up: "Move up",
1447
1933
  move_down: "Move down",
1448
- badge_local: "local",
1449
- badge_available: "available",
1450
- badge_unavailable: "configured, unavailable",
1451
- badge_not_configured: "not configured",
1452
- badge_default: "default",
1453
- badge_custom: "custom",
1934
+ badge_local: "Local",
1935
+ badge_available: "Available",
1936
+ badge_unavailable: "Configured, unavailable",
1937
+ badge_not_configured: "Not configured",
1938
+ badge_default: "Default",
1939
+ badge_custom: "Custom",
1454
1940
  set_as_default: "Set as default",
1455
1941
  configure: "Configure",
1456
1942
  remove: "Remove",
@@ -1468,6 +1954,17 @@ export const en = {
1468
1954
  custom_model_hint: "Optional. Most local servers ignore it (e.g. QVox).",
1469
1955
  custom_voice_hint: "Optional. A preset your server understands (e.g. custom). Empty = server default.",
1470
1956
  custom_optional_ph: "(optional)",
1957
+ language_label: "Language",
1958
+ language_hint: "The language the server is told to speak. Sent to custom endpoints only. Empty = whatever the server happens to default to, which is a guess rather than a choice.",
1959
+ language_server_default: "Server default",
1960
+ qvox_voice_hint: "A preset speaker on your server. Each one carries its OWN accent, so a preset wins over the accent described in the Style. Empty = the Style designs the voice instead.",
1961
+ voice_none: "None — design the voice from the Style",
1962
+ qvox_style_hint: "Sent to the server as `instruct`. Only some engines act on it: QVox/Qwen3-TTS designs the voice from it — timbre, age, accent, pace ('a warm Argentinian man, Rioplatense accent') — while Pocket TTS has no instruct at all and drops it, so there the Voice is the whole voice.",
1963
+ style_overridden_hint: "With a preset speaker chosen, an engine that understands instruct only colors the delivery — the speaker's own voice and accent win. Clear the Voice field to have the style design the voice instead. Engines with no instruct ignore this field either way.",
1964
+ clone_label: "Reference recording (cloning, optional)",
1965
+ clone_hint: "Path on the SERVER's filesystem to a 10–20s clean recording. Cloning is the only mode that reproduces an accent no preset speaker has. Overrides both the Voice and the Style.",
1966
+ ref_text_label: "What the recording says",
1967
+ ref_text_hint: "Optional, and worth filling in: telling the model what it is hearing makes cloning noticeably faster.",
1471
1968
  stt_engine_label: "Transcription engine",
1472
1969
  stt_engine_hint: "Local uses faster-whisper (requires python3 + faster-whisper). OpenAI uses the engines.openai key.",
1473
1970
  stt_model_label: "Local model (whisper)",
@@ -1507,6 +2004,9 @@ export const en = {
1507
2004
  test_synth_error: "Could not synthesize.",
1508
2005
  test_engine_label: "Engine",
1509
2006
  test_engine_hint: "Override the default for testing.",
2007
+ test_voice_label: "Voice",
2008
+ test_voice_hint: "Only for this test — it does not change what the engine has saved.",
2009
+ test_voice_default: "Engine default",
1510
2010
  test_style_label: "Style (Gemini only)",
1511
2011
  test_style_hint: "How it should speak. Empty = no style.",
1512
2012
  test_text_label: "Text to say",
@@ -1527,6 +2027,15 @@ export const en = {
1527
2027
  err_label_required: "A name is required.",
1528
2028
  err_base_url_required:"A base URL is required.",
1529
2029
  toast_transcription_updated: "Transcription updated.",
2030
+ qvox_title: "Local voice on this Mac",
2031
+ qvox_body: "QVox runs Qwen3-TTS on your Mac's GPU: the audio never leaves the machine, there is nothing to pay per minute, and nothing to be down.",
2032
+ qvox_note: "Needs uv and Node 18 or newer: npm installs only the command, and the engine runs through uv. The first model is a multi-gigabyte download.",
2033
+ qvox_ask: "Ask {persona} to install it",
2034
+ qvox_repo: "See the repository",
2035
+ qvox_running: "Running",
2036
+ qvox_stopped: "Stopped",
2037
+ qvox_stopped_hint: "QVox is set up but not answering on its port. Start it with `qvox serve`, or check that its LaunchAgent is loaded.",
2038
+ qvox_install_title: "Add QVox — a local Qwen3 voice on this Mac",
1530
2039
  },
1531
2040
 
1532
2041
  telegram_ui: {
@@ -1539,15 +2048,27 @@ export const en = {
1539
2048
  message_sent: "Message sent.",
1540
2049
  message_label: "Text",
1541
2050
  send_chat_id: "chat_id: {id}",
1542
- default_apx: "default APX",
1543
- yes: "yes",
1544
- no: "no",
2051
+ default_apx: "Default APX",
2052
+ yes: "Yes",
2053
+ no: "No",
1545
2054
  user_id_fallback: "user_id {id}",
1546
2055
  role_assigned: "{name} → {role}",
1547
2056
  },
1548
2057
 
1549
2058
  agents_form: {
1550
2059
  emoji: "Emoji",
2060
+ icon: "Avatar",
2061
+ name: "Name",
2062
+ name_hint: "Shown across the UI. Leave empty to fall back to the slug.",
2063
+ name_ph: "Cody",
2064
+ slug_hint: "Permanent id: filename, links and delegation.",
2065
+ skills_title: "Skills",
2066
+ skills_desc: "Project skills this agent loads into its prompt.",
2067
+ skills_use_defaults: "Use the project defaults",
2068
+ skills_use_defaults_hint: "The agent inherits whatever skills the project enables. Turn off to pick per agent.",
2069
+ skills_empty: "This project has no skills yet.",
2070
+ skills_locked: "Disabled for the project or globally — enable it in Skills to use it here.",
2071
+ create_defaults_note: "Skills and tools start from the project defaults; tune them in the agent's Config tab.",
1551
2072
  area: "Area",
1552
2073
  role: "Role",
1553
2074
  no_role: "— no role —",
@@ -1577,8 +2098,8 @@ export const en = {
1577
2098
  description: "Description",
1578
2099
  no_area: "— no area —",
1579
2100
  roles: "Roles",
1580
- add_role: "role",
1581
- no_roles: "no roles",
2101
+ add_role: "Role",
2102
+ no_roles: "No roles",
1582
2103
  general_roles: "General roles",
1583
2104
  delete_area: "Delete area",
1584
2105
  delete_role: "Delete role",
@@ -1610,18 +2131,38 @@ export const en = {
1610
2131
  },
1611
2132
 
1612
2133
  tasks: {
1613
- state_open: "open",
1614
- state_done: "done",
1615
- state_dropped: "dropped",
1616
- status_pending: "pending",
1617
- status_running: "running",
1618
- status_in_review: "in review",
1619
- status_blocked: "blocked",
1620
- done_label: "done",
1621
- dropped_label: "dropped",
2134
+ category_general: "Task",
2135
+ category_trip: "Errand on the way",
2136
+ location_label: "Place",
2137
+ location_place: "Place name",
2138
+ location_address: "Address",
2139
+ location_at: "Coordinates",
2140
+ location_at_invalid: "Format: latitude, longitude (e.g. -41.1335, -71.3103)",
2141
+ location_place_ph: "Farmacia del Puente",
2142
+ location_address_ph: "Av. San Martín 1234, Bariloche",
2143
+ location_radius: "Radius (m)",
2144
+ location_radius_ph: "Default",
2145
+ location_hint: "Where you have to stop. The name alone is enough for the reminder; the coordinates are what trigger the geofence while you drive.",
2146
+ field_category: "Type",
2147
+ state_open: "Open",
2148
+ state_done: "Done",
2149
+ state_dropped: "Dropped",
2150
+ status_pending: "Pending",
2151
+ status_running: "Running",
2152
+ status_in_review: "In review",
2153
+ status_blocked: "Blocked",
2154
+ done_label: "Done",
2155
+ dropped_label: "Dropped",
1622
2156
  detail_title: "Task detail",
2157
+ detail_empty: "Pick a task from the list.",
2158
+ list_title: "Tasks",
2159
+ agent_none_short: "No agent",
1623
2160
  field_title: "Title",
1624
- field_prompt: "Prompt",
2161
+ field_description: "Description",
2162
+ description_hint: "What you have to do. This is what the list shows.",
2163
+ description_ph: "Call the accountant before Friday…",
2164
+ description_empty: "No description. Write what needs doing here.",
2165
+ field_prompt: "Agent prompt",
1625
2166
  field_status: "Status",
1626
2167
  field_agent: "Agent",
1627
2168
  field_creator: "Created by",
@@ -1629,20 +2170,77 @@ export const en = {
1629
2170
  field_created: "Created",
1630
2171
  field_updated: "Updated",
1631
2172
  field_done: "Completed",
1632
- prompt_ph: "Task description / prompt…",
1633
- toggle_prompt: "Prompt",
2173
+ prompt_ph: "Only if an agent will run it…",
1634
2174
  view_thread: "View thread",
1635
2175
  mark_done: "Complete",
2176
+ edit_title: "Edit task",
2177
+ row_actions: "Task actions",
2178
+ mark_dropped: "Discard",
2179
+ mark_reopen: "Reopen",
2180
+ agent_none: "— unassigned —",
2181
+ agent_hint: "Who has it. It does not pick it up on its own: it works on it if you mention it in a comment, or if the task lands in a column with automation.",
2182
+ prompt_hint: "Only for tasks an agent runs. If it is your own to-do, leave it empty.",
2183
+ undo: "Undo",
2184
+ comments_title: "Comments",
2185
+ comment_owner: "You",
2186
+ comment_ph: "Write a comment… @agent to hand it over",
2187
+ comment_hint: "Mention an agent with @ and it takes the task: it works on it with its own tools and replies here.",
2188
+ comment_summoned: "Summoned: {who}. The reply lands in the thread when it finishes.",
2189
+ subtasks_title: "Subtasks",
2190
+ subtask_ph: "Add a subtask…",
2191
+ part_of: "Part of another task — open it",
2192
+ field_tags: "Tags",
2193
+ tags_hint: "Enter or comma to add. Backspace removes the last one.",
2194
+ tags_ph: "Urgent, client…",
2195
+ tag_remove: "Remove the tag {tag}",
2196
+ view_label: "View",
2197
+ view_list: "List",
2198
+ view_board: "Board",
2199
+ board_empty_col: "Nothing here",
2200
+ columns_title: "Columns",
2201
+ columns_hint: "The names are the same in every project. Each project picks which ones it shows.",
2202
+ columns_catalog: "Available columns",
2203
+ columns_pick_hint: "Tick the ones you want to see in this project.",
2204
+ columns_show: "Show {name} in this project",
2205
+ columns_remove: "Delete the column {name}",
2206
+ columns_add: "Add a column",
2207
+ columns_add_ph: "QA, Design, Waiting on client…",
2208
+ columns_need_one: "At least one column has to remain.",
2209
+ columns_done_note: "“Done” is always the last column and cannot be removed.",
2210
+ columns_automation: "Automation for {name}",
2211
+ columns_automation_hint: "When a task lands in this column, this agent picks it up: it works on it with its own tools and leaves the result in the comments.",
2212
+ columns_hook_agent_ph: "Agent slug (qa, dev…) — empty = no automation",
2213
+ columns_hook_instruction_ph: "What it should do. Empty = “do whatever applies”.",
2214
+ tick_done: "Mark “{title}” as done",
2215
+ tick_reopen: "Reopen “{title}”",
2216
+ confirm_drop_title: "Discard task?",
2217
+ confirm_drop_desc: "Discards “{title}”. It stays in history and you can reopen it.",
2218
+ select_row: "Select “{title}”",
2219
+ bulk_selected: "{count} selected",
2220
+ bulk_done: "Complete",
2221
+ bulk_drop: "Discard",
2222
+ bulk_clear: "Clear selection",
2223
+ confirm_bulk_done_title: "Complete {count} tasks?",
2224
+ confirm_bulk_done_desc: "Marks {count} tasks as done. You can reopen them later.",
2225
+ confirm_bulk_drop_title: "Discard {count} tasks?",
2226
+ confirm_bulk_drop_desc: "Discards {count} tasks. They stay in history and you can reopen them.",
2227
+ bulk_done_toast: "{count} tasks completed.",
2228
+ bulk_drop_toast: "{count} tasks discarded.",
1636
2229
  },
1637
2230
 
1638
2231
  agents_ui: {
1639
- model_router_default: "model: router default",
2232
+ model_router_default: "Model: router default",
2233
+ model_change_tip: "Change the agent's model",
2234
+ model_change_title: "Agent model",
2235
+ model_inherit_option: "Inherit (router default)",
2236
+ model_provider_default: "Default",
2237
+ model_no_providers: "No active providers. Configure one in Settings → Models.",
1640
2238
  slug_kebab_hint: "kebab-case, e.g. reviewer, my-agent, content-writer",
1641
2239
  comma_separated: "comma-separated",
1642
2240
  body_hint: "markdown — extends the agent's system prompt",
1643
- source_user: "user",
1644
- source_override: "override",
1645
- source_bundled: "bundled",
2241
+ source_user: "User",
2242
+ source_override: "Override",
2243
+ source_bundled: "Bundled",
1646
2244
  tab_explorer: "Explorer",
1647
2245
  type_none: "— no type —",
1648
2246
  type_orchestrator: "Orchestrator",
@@ -1669,24 +2267,26 @@ export const en = {
1669
2267
  brain_expand: "Expand brains",
1670
2268
  brain_collapse: "Collapse",
1671
2269
  brain_open: "Open",
2270
+ brain_view: "View",
2271
+ brain_edit: "Edit",
1672
2272
  brain_part_of: "Part of",
1673
2273
  brain_branches: "Branches",
1674
- config_def_desc: "definition (frontmatter + system prompt).",
2274
+ config_def_desc: "identity frontmatter. The system prompt lives in the Prompt tab.",
1675
2275
  memory_durable_desc: "durable facts the agent remembers.",
1676
- running: "running",
1677
- paused: "paused",
1678
- last_error: "last: error",
2276
+ running: "Running",
2277
+ paused: "Paused",
2278
+ last_error: "Last: error",
1679
2279
  field_tick: "Tick",
1680
2280
  field_next_tick: "Next tick",
1681
2281
  field_last_tick: "Last tick",
1682
2282
  field_last_run: "Last run",
1683
2283
  tools_label: "Tools",
1684
- kind_agent: "agent",
1685
- kind_memory: "memory",
1686
- kind_thread: "thread",
1687
- kind_task: "task",
1688
- kind_routine: "routine",
1689
- kind_hierarchy: "hierarchy",
2284
+ kind_agent: "Agent",
2285
+ kind_memory: "Memory",
2286
+ kind_thread: "Thread",
2287
+ kind_task: "Task",
2288
+ kind_routine: "Routine",
2289
+ kind_hierarchy: "Hierarchy",
1690
2290
  nodes_drag_hint: "{n} nodes · drag to rearrange",
1691
2291
  kind_watch: "Watcher",
1692
2292
  kind_watch_desc: "Sweeps for things worth noticing — overdue work, promises coming due, projects gone quiet. Costs nothing when there is nothing to report.",
@@ -1707,11 +2307,11 @@ export const en = {
1707
2307
  unit_days: "days",
1708
2308
  every_n_unit: "every {n} {unit}",
1709
2309
  every_v: "every {v}",
1710
- preset_every_10m: "every 10 min",
1711
- preset_hourly: "hourly",
1712
- preset_daily_9am: "daily 9am",
2310
+ preset_every_10m: "Every 10 min",
2311
+ preset_hourly: "Hourly",
2312
+ preset_daily_9am: "Daily 9am",
1713
2313
  sched_manual: "only when you run it",
1714
- preset_weekdays_9am: "weekdays 9am",
2314
+ preset_weekdays_9am: "Weekdays 9am",
1715
2315
  preset_manual: "Manual",
1716
2316
  var_pre_output_prompt: "Text output of the pre-commands. Replaced inside the prompt/text before it is sent. Use it to inject fresh data (weather, an API) into the instruction.",
1717
2317
  var_llm_output: "Final answer from the agent or super-agent. Available in the post-commands as an env var — e.g. forward it via Telegram.",
@@ -1735,17 +2335,22 @@ export const en = {
1735
2335
  action_runs_shell: "Runs the shell command",
1736
2336
  step_pre: "Pre",
1737
2337
  step_post: "Post",
1738
- last_label: "last:",
2338
+ last_label: "Last:",
1739
2339
  tg_chat_id_ph: "(uses the channel's)",
1740
2340
  tg_text_ph: "message to send",
1741
2341
  hb_message_ph: "still alive",
1742
2342
  arg_placeholder: "--flag or value",
1743
- remove_arg: "remove arg",
2343
+ remove_arg: "Remove arg",
1744
2344
  super_agent_label: "{persona} (super-agent)",
1745
2345
  super_agent_badge: "super-agent",
1746
2346
  },
1747
2347
 
1748
2348
  modules_ui: {
2349
+ desktop_model: "Window model",
2350
+ desktop_model_desc: "Which model answers in the floating window. It is the one surface where someone waits for the reply out loud, so it is allowed a faster one than the rest.",
2351
+ desktop_model_hint: "Defaults to the super-agent's. Choosing another here does not change Telegram, the routines, or anything else.",
2352
+ desktop_model_set: "Window model: {value}.",
2353
+ desktop_model_inherit: "the super-agent's",
1749
2354
  desktop_pos_left: "Left",
1750
2355
  desktop_pos_center: "Center",
1751
2356
  desktop_pos_right: "Right",
@@ -1755,7 +2360,7 @@ export const en = {
1755
2360
  desktop_status_desc: "The window launches from the terminal or via autostart.",
1756
2361
  desktop_running: "Running",
1757
2362
  desktop_stopped: "Stopped",
1758
- desktop_refresh: "refresh",
2363
+ desktop_refresh: "Refresh",
1759
2364
  desktop_start: "Start",
1760
2365
  desktop_stop: "Stop",
1761
2366
  desktop_restart: "Restart",
@@ -1768,13 +2373,13 @@ export const en = {
1768
2373
  desktop_stop_none: "No desktop window was running.",
1769
2374
  desktop_from_terminal: "From terminal:",
1770
2375
  desktop_autostart_desc: "Launches the window at user login. Equivalent to `apx desktop install` (no sudo required).",
1771
- desktop_platform: "platform: {platform}",
2376
+ desktop_platform: "Platform: {platform}",
1772
2377
  desktop_shortcut_desc: "Global hotkey that shows/hides the window and starts listening.",
1773
2378
  desktop_accelerator: "Accelerator",
1774
2379
  desktop_accelerator_hint:"Click the field and press your key combo. Restart the window to apply.",
1775
2380
  desktop_shortcut_record: "Click to set a shortcut",
1776
2381
  desktop_shortcut_recording: "Press your combo…",
1777
- desktop_shortcut_change: "click to change",
2382
+ desktop_shortcut_change: "Click to change",
1778
2383
  desktop_shortcut_esc: "Esc to cancel",
1779
2384
  desktop_shortcut_saved: "Shortcut saved. Restart the window (apx desktop stop && start) to apply it.",
1780
2385
  desktop_autostart_on: "Autostart enabled for the next login.",
@@ -1810,19 +2415,19 @@ export const en = {
1810
2415
  deck_no_widgets: "No widgets in the manifest.",
1811
2416
  deck_context_desc: "Information the Deck sees from the daemon.",
1812
2417
  deck_active_project: "Active project:",
1813
- deck_none: "none",
2418
+ deck_none: "None",
1814
2419
  deck_registered_projects:"Registered projects:",
1815
2420
  deck_active_plugins: "Active plugins:",
1816
- deck_daemon_active: "active · {uptime}",
1817
- deck_daemon_started: "started",
1818
- deck_safety_no_shell: "no direct shell",
1819
- deck_safety_no_arbitrary:"arbitrary commands blocked",
1820
- deck_safety_confirm: "dangerous actions require confirmation",
2421
+ deck_daemon_active: "Active · {uptime}",
2422
+ deck_daemon_started: "Started",
2423
+ deck_safety_no_shell: "No direct shell",
2424
+ deck_safety_no_arbitrary:"Arbitrary commands blocked",
2425
+ deck_safety_confirm: "Dangerous actions require confirmation",
1821
2426
  code_copied: "Copied.",
1822
2427
  code_saved: "Saved.",
1823
2428
  code_file_empty: "(empty)",
1824
2429
  code_file_error: "Error: {msg}",
1825
- code_stream_error: "error",
2430
+ code_stream_error: "Error",
1826
2431
  code_super_agent: "super-agent",
1827
2432
  code_super_agent_desc: "Main agent with all tools",
1828
2433
  code_chat_tab: "Chat",
@@ -1830,14 +2435,15 @@ export const en = {
1830
2435
  code_panel_tree: "File tree",
1831
2436
  code_panel_terminal: "Terminal",
1832
2437
  code_panel_context: "Context panel",
1833
- code_ctx_auto: "auto",
2438
+ code_ctx_auto: "Auto",
1834
2439
  code_ctx_mode: "Mode",
1835
2440
  code_ctx_agent: "Agent",
2441
+ code_ctx_project: "Project",
1836
2442
  code_ctx_msgs_value: "{user} user · {assistant} assistant",
1837
2443
  code_ctx_tokens_total: "Total Tokens",
1838
2444
  code_ctx_created: "Created",
1839
2445
  code_ctx_activity: "Activity",
1840
- code_project_fallback: "project {id}",
2446
+ code_project_fallback: "Project {id}",
1841
2447
  code_pick_project_ph: "Pick a project…",
1842
2448
  code_artifact_exit_ok: "exit 0 — {ms}ms",
1843
2449
  code_artifact_exit_fail: "exit {code}{timeout}",
@@ -1845,8 +2451,8 @@ export const en = {
1845
2451
  code_artifact_view_short:"View",
1846
2452
  code_artifact_edit_short:"Edit",
1847
2453
  code_artifact_exit_badge:"exit {code}",
1848
- code_artifact_timeout: "timeout",
1849
- code_artifact_truncated: "truncated",
2454
+ code_artifact_timeout: "Timeout",
2455
+ code_artifact_truncated: "Truncated",
1850
2456
  },
1851
2457
 
1852
2458
  settings_ui: {
@@ -1866,18 +2472,25 @@ export const en = {
1866
2472
  base_menu_view: "Base menu view (general workspace).",
1867
2473
  coming_soon: "Coming soon",
1868
2474
  inspector_title: "Skill Inspector (per-turn RAG)",
1869
- inspector_desc: "Experimental feature. When active, the agent does NOT receive the full skill list in its prompt; on each message a local RAG decides which skill(s) to loadthe full body on a strong match, a suggestion on a medium match, nothing if it doesn't apply. It is re-evaluated every turn: a skill that stopped being relevant disappears from the context.",
2475
+ inspector_desc: "A local RAG picks the skill(s) each message needs — full body on a strong match, a suggestion on a medium one, nothing otherwise. Re-evaluated every turn.",
2476
+ advanced_title: "Advanced",
2477
+ show: "Show",
2478
+ hide: "Hide",
1870
2479
  enable_inspector: "Enable inspector",
1871
2480
  enable_inspector_hint: "Off = classic behavior (slug list + passive suggestion). On = the RAG decides per turn.",
1872
2481
  on: "On",
1873
2482
  off: "Off",
1874
2483
  index_count: "Index: {n} skills",
1875
- not_indexed: "not indexed",
1876
- dim: "dim {dim}",
1877
- updated_at: "updated {date}",
2484
+ not_indexed: "Not indexed",
2485
+ dim: "Dim {dim}",
2486
+ updated_at: "Updated {date}",
1878
2487
  reindex: "Reindex",
1879
2488
  reindex_forced: "Reindex (forced)",
1880
2489
  embedder_source: "The embedder comes from Memory (RAG). Local with Ollama, or offline if no provider is set.",
2490
+ embedder_shared_title: "Embedder",
2491
+ embedder_shared_desc: "The skill inspector uses the same embedder as Memory (RAG) — one engine for the whole daemon. Change or reorder it there.",
2492
+ embedder_configure: "Configure in Memory (RAG)",
2493
+ embedder_stale: "The index was built with '{index}' but '{active}' is active now — reindex to score with the current engine.",
1881
2494
  thresholds_title: "Thresholds and limits",
1882
2495
  thresholds_desc: "Tune how aggressive the inspector is. Raising the thresholds = fewer false positives but more risk of missing a skill; lowering them = the opposite.",
1883
2496
  test_title: "Test (dry-run)",
@@ -1944,13 +2557,19 @@ export const en = {
1944
2557
  source_builtin: "APX",
1945
2558
  source_global: "Global",
1946
2559
  source_project: "Project",
2560
+ origin_claude: "Claude",
2561
+ origin_cursor: "Cursor",
2562
+ origin_codex: "Codex",
2563
+ origin_agents: "Agents",
2564
+ path_label: "Path",
2565
+ path_apx_link: "APX link",
1947
2566
  private_badge: "Private",
1948
2567
  private_hint: "Built-in APX skill — always active, can't be disabled or deleted.",
1949
2568
  overridden_badge: "Override",
1950
2569
  inherited_hint: "Inherited from global",
1951
2570
  reset_to_global: "Reset to global",
1952
- on: "on",
1953
- off: "off",
2571
+ on: "On",
2572
+ off: "Off",
1954
2573
  toggle_failed: "Could not change state: {msg}",
1955
2574
  add_title: "Add a skill",
1956
2575
  add_desc: "Creates a user skill at ~/.apx/skills/<slug>/SKILL.md. Available across all scopes.",
@@ -2000,6 +2619,12 @@ export const en = {
2000
2619
 
2001
2620
  shared_ui: {
2002
2621
  skill_inspector_title: "Skill Inspector ({embedder}) chose these skills for this turn",
2622
+ skill_trace_loaded: "Loaded: its body went into this turn's prompt",
2623
+ skill_trace_hinted: "Hinted: only the name and description went in",
2624
+ skill_trace_considered: "Considered: matched this turn but below the bar to inject",
2625
+ skill_trace_sim: "Similarity {sim}",
2626
+ skill_trace_no_desc: "No description.",
2627
+ skill_trace_open: "Open skill",
2003
2628
  tools_count: "{n} tools",
2004
2629
  tools_failed: "{n} failed",
2005
2630
  tool_read_file: "Read file",
@@ -2015,21 +2640,21 @@ export const en = {
2015
2640
  tool_call_mcp: "Call MCP",
2016
2641
  tool_call_runtime: "Call runtime",
2017
2642
  tool_create_task: "Create task",
2018
- dedup: "dedup",
2019
- args: "args",
2020
- result: "result",
2643
+ dedup: "Dedup",
2644
+ args: "Args",
2645
+ result: "Result",
2021
2646
  auto: "Auto",
2022
2647
  auto_router: "Auto (router decides)",
2023
- model_filter_ph: "filter or type a model…",
2024
- loading_models: "loading models…",
2025
- use_value: "use “{value}”",
2026
- model_combobox_ph: "pick or type a model…",
2027
- search_variable_ph: "search variable…",
2028
- no_matches: "no matches",
2648
+ model_filter_ph: "Filter or type a model…",
2649
+ loading_models: "Loading models…",
2650
+ use_value: "Use “{value}”",
2651
+ model_combobox_ph: "Pick or type a model…",
2652
+ search_variable_ph: "Search variable…",
2653
+ no_matches: "No matches",
2029
2654
  create_variable: "Create new variable…",
2030
2655
  kv_key_ph: "KEY",
2031
2656
  kv_value_ph: "value",
2032
- remove_row: "remove row",
2657
+ remove_row: "Remove row",
2033
2658
  add_row: "Add row",
2034
2659
  err_chat_failed: "Chat failed.",
2035
2660
  err_stream_failed: "Stream failed.",
@@ -2048,8 +2673,8 @@ export const en = {
2048
2673
  more_soon: "More plugins coming soon…",
2049
2674
  tools_hint: "Tools that connected plugins expose to this project's agents.",
2050
2675
  tools_empty: "No integration tools yet. Connect a plugin to enable them.",
2051
- tool_active: "active",
2052
- tool_inactive: "inactive",
2676
+ tool_active: "Active",
2677
+ tool_inactive: "Inactive",
2053
2678
  status_active: "Active",
2054
2679
  status_error: "Error",
2055
2680
  status_unconfigured: "Not configured",
@@ -2060,7 +2685,12 @@ export const en = {
2060
2685
  validating: "Validating...",
2061
2686
  verifying: "Verifying token...",
2062
2687
  confirm: "Confirm",
2688
+ change: "Change",
2063
2689
  select_placeholder: "Select...",
2690
+ select_none: "None selected",
2691
+ select_pick: "Choose",
2692
+ select_missing: "Nothing selected yet. Confirm one below.",
2693
+ select_empty: "This account has no options available.",
2064
2694
  reveal: "Show",
2065
2695
  hide: "Hide",
2066
2696
  credentials: "{name} credentials",
@@ -2071,6 +2701,11 @@ export const en = {
2071
2701
  err_connect: "Failed to connect",
2072
2702
  err_generic: "Something went wrong",
2073
2703
  action_done: "Done",
2704
+ copy: "Copy",
2705
+ connect_oauth: "Connect with Google",
2706
+ oauth_waiting: "Waiting for consent…",
2707
+ oauth_redirect_hint: "Register this URI in your Google OAuth client (Credentials → your client → \"Authorized redirect URIs\"):",
2708
+ oauth_reauth: "Access changed: reconnect with Google to apply it.",
2074
2709
  asana: {
2075
2710
  select_label: "Select the workspace to use",
2076
2711
  connected: { user_name: "Connected as", user_email: "Email", workspace_name: "Workspace" },
@@ -2082,6 +2717,28 @@ export const en = {
2082
2717
  },
2083
2718
  },
2084
2719
  },
2720
+ calendar: {
2721
+ connected: { account_email: "Account", calendar_name: "Calendar" },
2722
+ fields: {
2723
+ client_id: {
2724
+ label: "OAuth Client ID",
2725
+ help_label: "How do I get the OAuth client?",
2726
+ help_steps: "Open console.cloud.google.com and pick (or create) a project.\nEnable the Google Calendar API in that project.\nGo to APIs & Services → OAuth consent screen → External, and add your email as a test user.\nCredentials → Create credentials → OAuth client ID → type \"Desktop app\".\nCopy the Client ID and Client secret and paste them below.\nUnder \"Authorized redirect URIs\", paste the URI shown above.",
2727
+ },
2728
+ client_secret: {
2729
+ label: "Client secret",
2730
+ hint: "The secret from the same OAuth client. Stored under ~/.apx, never in the repo.",
2731
+ },
2732
+ write_access: {
2733
+ label: "Allow writing",
2734
+ hint: "Off, APX only reads your agenda. On, it can create and move events, invite people and add Meet — and it still asks before each one.",
2735
+ },
2736
+ meet: {
2737
+ label: "Create Meet links",
2738
+ hint: "When scheduling with guests, add a Google Meet link to the event.",
2739
+ },
2740
+ },
2741
+ },
2085
2742
  github: {
2086
2743
  connected: { user_login: "Connected as", user_name: "Name" },
2087
2744
  fields: {