@agentprojectcontext/apx 1.77.3 → 1.79.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (356) hide show
  1. package/README.md +23 -9
  2. package/package.json +12 -12
  3. package/src/core/agent/build-agent-system.js +3 -2
  4. package/src/core/agent/constants.js +3 -2
  5. package/src/core/agent/loop/greeting-guard.js +55 -0
  6. package/src/core/agent/loop/side-effects.js +52 -0
  7. package/src/core/agent/prompt-builder.js +49 -8
  8. package/src/core/agent/run-agent.js +43 -53
  9. package/src/core/agent/security.js +1 -1
  10. package/src/core/agent/self-memory.js +4 -2
  11. package/src/core/agent/skills/index-store.js +2 -2
  12. package/src/core/agent/skills/loader.js +3 -22
  13. package/src/core/agent/super-agent.js +0 -2
  14. package/src/core/agent/tool-summary.js +65 -0
  15. package/src/core/agent/tools/handlers/call-runtime.js +4 -4
  16. package/src/core/agent/tools/handlers/list-commitments.js +80 -0
  17. package/src/core/agent/tools/handlers/list-tasks.js +66 -27
  18. package/src/core/agent/tools/handlers/record-commitment.js +68 -0
  19. package/src/core/agent/tools/handlers/search-sessions.js +1 -1
  20. package/src/core/agent/tools/handlers/send-telegram.js +68 -2
  21. package/src/core/agent/tools/handlers/set-permission-mode.js +11 -4
  22. package/src/core/agent/tools/names.js +64 -0
  23. package/src/core/agent/tools/registry.js +9 -0
  24. package/src/core/agent/tools/tool-call-parser.js +70 -1
  25. package/src/core/apc/context-copy.js +1 -1
  26. package/src/core/apc/frontmatter.js +85 -0
  27. package/src/core/apc/parser.js +9 -21
  28. package/src/core/apc/paths.js +8 -8
  29. package/src/core/apc/scaffold.js +5 -4
  30. package/src/core/channels/telegram/ask-callbacks.js +35 -0
  31. package/src/core/channels/telegram/config.js +201 -0
  32. package/src/core/channels/telegram/dispatch.js +3 -0
  33. package/src/core/channels/telegram/reply.js +30 -5
  34. package/src/core/config/index.js +25 -183
  35. package/src/core/config/paths.js +57 -1
  36. package/src/core/config/redact.js +22 -0
  37. package/src/core/confirmation/adapters/web.js +1 -1
  38. package/src/core/daemon/service.js +238 -0
  39. package/src/core/deck/manifest.js +12 -12
  40. package/src/core/desktop/autostart.js +3 -2
  41. package/src/core/desktop/process.js +4 -4
  42. package/src/core/engines/gemini.js +322 -60
  43. package/src/core/engines/openai-compatible.js +21 -2
  44. package/src/core/engines/presets.js +2 -2
  45. package/src/core/http-tools/browser.js +1 -1
  46. package/src/core/http-tools/catalog.js +551 -0
  47. package/src/core/http-tools/fetch.js +1 -1
  48. package/src/core/http-tools/glob.js +3 -3
  49. package/src/core/http-tools/grep.js +2 -9
  50. package/src/core/http-tools/inline-handlers.js +59 -0
  51. package/src/core/http-tools/registry.js +31 -615
  52. package/src/core/http-tools/search.js +2 -2
  53. package/src/core/identity/self.js +6 -7
  54. package/src/core/identity/telegram.js +3 -3
  55. package/src/core/logging.js +6 -5
  56. package/src/core/mcp/sources.js +12 -16
  57. package/src/core/memory/consolidate.js +225 -0
  58. package/src/core/memory/indexer.js +2 -5
  59. package/src/core/nudge/index.js +192 -0
  60. package/src/core/nudge/policy.js +143 -0
  61. package/src/core/nudge/store.js +141 -0
  62. package/src/core/profiles/bundled/secretary/PROFILE.md +8 -9
  63. package/src/core/profiles/bundled/secretary/config.schema.json +33 -3
  64. package/src/core/profiles/bundled/secretary/routines/day-close.json +7 -3
  65. package/src/core/profiles/bundled/secretary/routines/day-open.json +7 -3
  66. package/src/core/profiles/bundled/secretary/routines/watch.json +13 -0
  67. package/src/core/profiles/lifecycle.js +0 -2
  68. package/src/core/profiles/store.js +2 -7
  69. package/src/core/routines/runner.js +103 -4
  70. package/src/core/routines/signals.js +270 -0
  71. package/src/core/runtime-skills/apx-agency-agents/SKILL.md +2 -2
  72. package/src/core/runtime-skills/apx-profile/SKILL.md +3 -3
  73. package/src/core/runtime-skills/apx-project/SKILL.md +1 -1
  74. package/src/core/runtime-skills/apx-task/SKILL.md +8 -8
  75. package/src/core/runtime-skills/apx-telegram/SKILL.md +4 -4
  76. package/src/core/runtime-skills/apx-voice/SKILL.md +4 -4
  77. package/src/core/runtimes/detect.js +2 -2
  78. package/src/core/sessions/index.js +800 -0
  79. package/src/core/stores/code-sessions.js +3 -14
  80. package/src/core/stores/commitments.js +331 -0
  81. package/src/core/stores/engine-sessions.js +0 -4
  82. package/src/core/stores/messages.js +4 -5
  83. package/src/core/stores/organization.js +9 -11
  84. package/src/core/stores/routines.js +23 -14
  85. package/src/core/stores/runtime-callbacks.js +2 -1
  86. package/src/core/util/json-file.js +128 -0
  87. package/src/core/util/thinking.js +51 -0
  88. package/src/core/vars/sources.js +14 -21
  89. package/src/core/voice/stt-models.js +1 -1
  90. package/src/core/voice/tts.js +5 -4
  91. package/src/host/daemon/api/admin-config.js +5 -5
  92. package/src/host/daemon/api/admin.js +8 -7
  93. package/src/host/daemon/api/agents.js +16 -16
  94. package/src/host/daemon/api/artifact-preview.js +8 -8
  95. package/src/host/daemon/api/artifacts.js +7 -7
  96. package/src/host/daemon/api/code.js +8 -8
  97. package/src/host/daemon/api/commitments.js +135 -0
  98. package/src/host/daemon/api/config.js +6 -6
  99. package/src/host/daemon/api/confirm.js +2 -2
  100. package/src/host/daemon/api/connections.js +2 -2
  101. package/src/host/daemon/api/conversations.js +12 -12
  102. package/src/host/daemon/api/deck.js +6 -6
  103. package/src/host/daemon/api/desktop.js +8 -8
  104. package/src/host/daemon/api/embeddings.js +4 -4
  105. package/src/host/daemon/api/engines.js +8 -7
  106. package/src/host/daemon/api/exec.js +5 -4
  107. package/src/host/daemon/api/files-project.js +6 -6
  108. package/src/host/daemon/api/health.js +2 -2
  109. package/src/host/daemon/api/identity.js +3 -3
  110. package/src/host/daemon/api/inbox.js +2 -2
  111. package/src/host/daemon/api/integrations.js +23 -19
  112. package/src/host/daemon/api/mcps.js +16 -12
  113. package/src/host/daemon/api/messages.js +5 -5
  114. package/src/host/daemon/api/nudges.js +112 -0
  115. package/src/host/daemon/api/organization.js +8 -8
  116. package/src/host/daemon/api/pairing.js +6 -6
  117. package/src/host/daemon/api/plugins.js +3 -3
  118. package/src/host/daemon/api/prefix.js +20 -0
  119. package/src/host/daemon/api/profiles.js +9 -9
  120. package/src/host/daemon/api/projects.js +5 -5
  121. package/src/host/daemon/api/routines.js +32 -8
  122. package/src/host/daemon/api/run.js +2 -2
  123. package/src/host/daemon/api/runtimes.js +6 -6
  124. package/src/host/daemon/api/self-memory.js +50 -0
  125. package/src/host/daemon/api/sessions-search.js +18 -11
  126. package/src/host/daemon/api/sessions.js +6 -6
  127. package/src/host/daemon/api/shared.js +59 -13
  128. package/src/host/daemon/api/skills.js +12 -12
  129. package/src/host/daemon/api/super-agent.js +4 -4
  130. package/src/host/daemon/api/tasks.js +11 -11
  131. package/src/host/daemon/api/telegram.js +61 -24
  132. package/src/host/daemon/api/tools.js +7 -7
  133. package/src/host/daemon/api/top-level.js +7 -7
  134. package/src/host/daemon/api/transcribe.js +6 -6
  135. package/src/host/daemon/api/tts.js +3 -3
  136. package/src/host/daemon/api/vars.js +11 -8
  137. package/src/host/daemon/api/voice.js +9 -7
  138. package/src/host/daemon/api/web.js +28 -32
  139. package/src/host/daemon/api.js +83 -48
  140. package/src/host/daemon/callback-reconciler.js +16 -0
  141. package/src/host/daemon/db.js +1 -1
  142. package/src/host/daemon/desktop-ws.js +7 -3
  143. package/src/host/daemon/index.js +11 -5
  144. package/src/host/daemon/plugins/desktop/index.js +8 -2
  145. package/src/host/daemon/plugins/telegram/index.js +7 -2
  146. package/src/host/daemon/stt-venv.js +20 -81
  147. package/src/host/daemon/wakeup.js +18 -4
  148. package/src/interfaces/acp/index.js +3 -3
  149. package/src/interfaces/acp/session.js +2 -2
  150. package/src/interfaces/cli/commands/a2a.js +2 -2
  151. package/src/interfaces/cli/commands/agent.js +3 -3
  152. package/src/interfaces/cli/commands/artifact.js +13 -13
  153. package/src/interfaces/cli/commands/chat.js +3 -3
  154. package/src/interfaces/cli/commands/command.js +2 -2
  155. package/src/interfaces/cli/commands/commitment.js +154 -0
  156. package/src/interfaces/cli/commands/config.js +4 -4
  157. package/src/interfaces/cli/commands/daemon.js +74 -18
  158. package/src/interfaces/cli/commands/desktop.js +7 -14
  159. package/src/interfaces/cli/commands/exec.js +2 -2
  160. package/src/interfaces/cli/commands/log.js +3 -4
  161. package/src/interfaces/cli/commands/mcp.js +9 -9
  162. package/src/interfaces/cli/commands/memory.js +75 -2
  163. package/src/interfaces/cli/commands/messages.js +5 -5
  164. package/src/interfaces/cli/commands/model.js +0 -18
  165. package/src/interfaces/cli/commands/nudge.js +130 -0
  166. package/src/interfaces/cli/commands/obsidian.js +5 -5
  167. package/src/interfaces/cli/commands/org.js +5 -5
  168. package/src/interfaces/cli/commands/pair.js +6 -6
  169. package/src/interfaces/cli/commands/plugins.js +2 -2
  170. package/src/interfaces/cli/commands/profile.js +10 -10
  171. package/src/interfaces/cli/commands/project-config.js +6 -6
  172. package/src/interfaces/cli/commands/project.js +10 -10
  173. package/src/interfaces/cli/commands/routine.js +8 -9
  174. package/src/interfaces/cli/commands/runtime.js +2 -2
  175. package/src/interfaces/cli/commands/search.js +0 -1
  176. package/src/interfaces/cli/commands/session.js +12 -40
  177. package/src/interfaces/cli/commands/sessions.js +21 -798
  178. package/src/interfaces/cli/commands/setup.js +16 -6
  179. package/src/interfaces/cli/commands/skills.js +1 -2
  180. package/src/interfaces/cli/commands/status.js +3 -3
  181. package/src/interfaces/cli/commands/task.js +8 -8
  182. package/src/interfaces/cli/commands/telegram.js +21 -21
  183. package/src/interfaces/cli/commands/voice.js +6 -6
  184. package/src/interfaces/cli/help/index.js +2245 -0
  185. package/src/interfaces/cli/http.js +9 -4
  186. package/src/interfaces/cli/index.js +14 -2857
  187. package/src/interfaces/cli/routes/acp.js +13 -0
  188. package/src/interfaces/cli/routes/agent.js +27 -0
  189. package/src/interfaces/cli/routes/artifact.js +28 -0
  190. package/src/interfaces/cli/routes/chat.js +11 -0
  191. package/src/interfaces/cli/routes/code.js +11 -0
  192. package/src/interfaces/cli/routes/command.js +21 -0
  193. package/src/interfaces/cli/routes/commitment.js +19 -0
  194. package/src/interfaces/cli/routes/config.js +16 -0
  195. package/src/interfaces/cli/routes/connections.js +11 -0
  196. package/src/interfaces/cli/routes/conversations.js +21 -0
  197. package/src/interfaces/cli/routes/daemon.js +25 -0
  198. package/src/interfaces/cli/routes/desktop.js +20 -0
  199. package/src/interfaces/cli/routes/env.js +13 -0
  200. package/src/interfaces/cli/routes/exec.js +11 -0
  201. package/src/interfaces/cli/routes/identity.js +11 -0
  202. package/src/interfaces/cli/routes/index.js +75 -0
  203. package/src/interfaces/cli/routes/init.js +11 -0
  204. package/src/interfaces/cli/routes/log.js +20 -0
  205. package/src/interfaces/cli/routes/mcp.js +22 -0
  206. package/src/interfaces/cli/routes/memory.js +19 -0
  207. package/src/interfaces/cli/routes/messages.js +16 -0
  208. package/src/interfaces/cli/routes/model.js +11 -0
  209. package/src/interfaces/cli/routes/nudge.js +17 -0
  210. package/src/interfaces/cli/routes/obsidian.js +17 -0
  211. package/src/interfaces/cli/routes/org.js +34 -0
  212. package/src/interfaces/cli/routes/overlay.js +10 -0
  213. package/src/interfaces/cli/routes/pair.js +17 -0
  214. package/src/interfaces/cli/routes/panel.js +16 -0
  215. package/src/interfaces/cli/routes/permission.js +11 -0
  216. package/src/interfaces/cli/routes/plugins.js +21 -0
  217. package/src/interfaces/cli/routes/profile.js +27 -0
  218. package/src/interfaces/cli/routes/project.js +41 -0
  219. package/src/interfaces/cli/routes/restart.js +15 -0
  220. package/src/interfaces/cli/routes/routine.js +28 -0
  221. package/src/interfaces/cli/routes/run.js +11 -0
  222. package/src/interfaces/cli/routes/search.js +11 -0
  223. package/src/interfaces/cli/routes/send.js +11 -0
  224. package/src/interfaces/cli/routes/session.js +26 -0
  225. package/src/interfaces/cli/routes/sessions.js +15 -0
  226. package/src/interfaces/cli/routes/setup.js +18 -0
  227. package/src/interfaces/cli/routes/skills.js +20 -0
  228. package/src/interfaces/cli/routes/status.js +12 -0
  229. package/src/interfaces/cli/routes/task.js +26 -0
  230. package/src/interfaces/cli/routes/telegram.js +39 -0
  231. package/src/interfaces/cli/routes/update.js +24 -0
  232. package/src/interfaces/cli/routes/voice.js +17 -0
  233. package/src/interfaces/desktop/main.js +6 -7
  234. package/src/interfaces/desktop/renderer.js +0 -5
  235. package/src/interfaces/mcp-server/index.js +15 -14
  236. package/src/interfaces/tui/_shims/globals.d.ts +8 -0
  237. package/src/interfaces/tui/tsconfig.json +4 -1
  238. package/src/interfaces/web/README.md +6 -6
  239. package/src/interfaces/web/dist/assets/index-CvEoGtTf.js +849 -0
  240. package/src/interfaces/web/dist/assets/index-CvEoGtTf.js.map +1 -0
  241. package/src/interfaces/web/dist/assets/index-DzBBXFaO.css +1 -0
  242. package/src/interfaces/web/dist/index.html +2 -2
  243. package/src/interfaces/web/package-lock.json +11 -10
  244. package/src/interfaces/web/src/components/AddProjectDialog.tsx +1 -1
  245. package/src/interfaces/web/src/components/Section.tsx +18 -3
  246. package/src/interfaces/web/src/components/agents/AgentFormFields.tsx +1 -1
  247. package/src/interfaces/web/src/components/chat/ChatList.tsx +2 -2
  248. package/src/interfaces/web/src/components/chat/MessageBubble.tsx +13 -0
  249. package/src/interfaces/web/src/components/chat/SkillPicker.tsx +1 -1
  250. package/src/interfaces/web/src/components/code/CodeFileTree.tsx +1 -1
  251. package/src/interfaces/web/src/components/code/CodeTerminal.tsx +1 -1
  252. package/src/interfaces/web/src/components/cron/CronPicker.tsx +196 -0
  253. package/src/interfaces/web/src/components/desktop/DesktopStatusCard.tsx +1 -1
  254. package/src/interfaces/web/src/components/files/FileBrowser.tsx +2 -2
  255. package/src/interfaces/web/src/components/inbox/InboxList.tsx +145 -0
  256. package/src/interfaces/web/src/components/memory/MemoryBrowser.tsx +36 -6
  257. package/src/interfaces/web/src/components/routines/ExecutionsList.tsx +1 -1
  258. package/src/interfaces/web/src/components/routines/RoutineDetail.tsx +16 -4
  259. package/src/interfaces/web/src/components/routines/RoutineEditor.tsx +14 -4
  260. package/src/interfaces/web/src/components/routines/shared.ts +14 -5
  261. package/src/interfaces/web/src/components/settings/DesktopSettingsPanel.tsx +1 -1
  262. package/src/interfaces/web/src/components/settings/MemoryPanel.tsx +1 -1
  263. package/src/interfaces/web/src/components/settings/NudgePanel.tsx +183 -0
  264. package/src/interfaces/web/src/components/settings/ProfilePanel.tsx +36 -12
  265. package/src/interfaces/web/src/components/settings/SkillsInspectorPanel.tsx +1 -1
  266. package/src/interfaces/web/src/components/settings/SkillsManager.tsx +2 -2
  267. package/src/interfaces/web/src/components/tasks/TaskDetailPanel.tsx +1 -1
  268. package/src/interfaces/web/src/components/ui/filter-chips.tsx +47 -0
  269. package/src/interfaces/web/src/components/ui.tsx +1 -0
  270. package/src/interfaces/web/src/constants/index.ts +1 -0
  271. package/src/interfaces/web/src/hooks/useChat.ts +5 -1
  272. package/src/interfaces/web/src/hooks/useDaemonStatus.ts +1 -1
  273. package/src/interfaces/web/src/hooks/useDevices.ts +1 -1
  274. package/src/interfaces/web/src/hooks/useEngines.ts +1 -1
  275. package/src/interfaces/web/src/hooks/useGlobalConfig.ts +2 -2
  276. package/src/interfaces/web/src/hooks/useIdentity.ts +1 -1
  277. package/src/interfaces/web/src/hooks/useInbox.ts +1 -1
  278. package/src/interfaces/web/src/hooks/useNudges.ts +38 -0
  279. package/src/interfaces/web/src/hooks/useProfiles.ts +3 -3
  280. package/src/interfaces/web/src/hooks/useProjects.ts +1 -1
  281. package/src/interfaces/web/src/hooks/useTelegram.ts +3 -3
  282. package/src/interfaces/web/src/hooks/useTokenBootstrap.ts +3 -3
  283. package/src/interfaces/web/src/i18n/en.ts +127 -0
  284. package/src/interfaces/web/src/i18n/es.ts +127 -0
  285. package/src/interfaces/web/src/lib/api/admin.ts +11 -11
  286. package/src/interfaces/web/src/lib/api/agents.ts +14 -14
  287. package/src/interfaces/web/src/lib/api/artifacts.ts +11 -11
  288. package/src/interfaces/web/src/lib/api/code.ts +1 -1
  289. package/src/interfaces/web/src/lib/api/commitments.ts +57 -0
  290. package/src/interfaces/web/src/lib/api/conversations.ts +8 -8
  291. package/src/interfaces/web/src/lib/api/deck.ts +3 -3
  292. package/src/interfaces/web/src/lib/api/desktop.ts +8 -8
  293. package/src/interfaces/web/src/lib/api/embeddings.ts +3 -3
  294. package/src/interfaces/web/src/lib/api/engines.ts +3 -3
  295. package/src/interfaces/web/src/lib/api/filesystem.ts +2 -2
  296. package/src/interfaces/web/src/lib/api/health.ts +1 -1
  297. package/src/interfaces/web/src/lib/api/identity.ts +2 -2
  298. package/src/interfaces/web/src/lib/api/inbox.ts +1 -1
  299. package/src/interfaces/web/src/lib/api/integrations.ts +8 -8
  300. package/src/interfaces/web/src/lib/api/mcps.ts +6 -6
  301. package/src/interfaces/web/src/lib/api/messages.ts +3 -3
  302. package/src/interfaces/web/src/lib/api/notebook.ts +23 -0
  303. package/src/interfaces/web/src/lib/api/nudges.ts +53 -0
  304. package/src/interfaces/web/src/lib/api/organization.ts +7 -7
  305. package/src/interfaces/web/src/lib/api/profiles.ts +8 -8
  306. package/src/interfaces/web/src/lib/api/projectFiles.ts +5 -5
  307. package/src/interfaces/web/src/lib/api/projects.ts +12 -12
  308. package/src/interfaces/web/src/lib/api/routines.ts +7 -7
  309. package/src/interfaces/web/src/lib/api/sessions.ts +2 -2
  310. package/src/interfaces/web/src/lib/api/skills.ts +11 -11
  311. package/src/interfaces/web/src/lib/api/super_agent.ts +3 -3
  312. package/src/interfaces/web/src/lib/api/tasks.ts +12 -12
  313. package/src/interfaces/web/src/lib/api/telegram.ts +14 -14
  314. package/src/interfaces/web/src/lib/api/tools.ts +1 -1
  315. package/src/interfaces/web/src/lib/api/vars.ts +4 -4
  316. package/src/interfaces/web/src/lib/api/voice.ts +6 -6
  317. package/src/interfaces/web/src/lib/cron.ts +196 -0
  318. package/src/interfaces/web/src/lib/when.ts +32 -0
  319. package/src/interfaces/web/src/screens/InboxScreen.tsx +107 -77
  320. package/src/interfaces/web/src/screens/ProjectScreen.tsx +5 -2
  321. package/src/interfaces/web/src/screens/SettingsScreen.tsx +17 -3
  322. package/src/interfaces/web/src/screens/base/AgentDefaultsTab.tsx +1 -1
  323. package/src/interfaces/web/src/screens/base/CommitmentsTab.tsx +239 -0
  324. package/src/interfaces/web/src/screens/base/GlobalTasksTab.tsx +103 -20
  325. package/src/interfaces/web/src/screens/base/LogsTab.tsx +18 -3
  326. package/src/interfaces/web/src/screens/base/SessionsTab.tsx +1 -1
  327. package/src/interfaces/web/src/screens/modules/CodeScreen.tsx +1 -1
  328. package/src/interfaces/web/src/screens/modules/DeckScreen.tsx +1 -1
  329. package/src/interfaces/web/src/screens/modules/DesktopScreen.tsx +1 -1
  330. package/src/interfaces/web/src/screens/modules/VoiceScreen.tsx +1 -1
  331. package/src/interfaces/web/src/screens/project/AgentDetailScreen.tsx +8 -8
  332. package/src/interfaces/web/src/screens/project/AgentsTab.tsx +2 -2
  333. package/src/interfaces/web/src/screens/project/ChatTab.tsx +24 -6
  334. package/src/interfaces/web/src/screens/project/ConfigTab.tsx +1 -1
  335. package/src/interfaces/web/src/screens/project/McpsTab.tsx +3 -3
  336. package/src/interfaces/web/src/screens/project/Overview.tsx +6 -6
  337. package/src/interfaces/web/src/screens/project/RoutinesTab.tsx +15 -13
  338. package/src/interfaces/web/src/screens/project/StructureTab.tsx +1 -1
  339. package/src/interfaces/web/src/screens/project/TasksTab.tsx +1 -1
  340. package/src/interfaces/web/src/screens/project/VarsTab.tsx +1 -1
  341. package/src/interfaces/web/src/types/daemon.ts +10 -1
  342. package/src/interfaces/web/vite.config.ts +13 -18
  343. package/src/interfaces/web/dist/assets/index-BptlbKjU.js +0 -824
  344. package/src/interfaces/web/dist/assets/index-BptlbKjU.js.map +0 -1
  345. package/src/interfaces/web/dist/assets/index-D_EJEA1n.css +0 -1
  346. package/src/skills/apc-context/SKILL.md +0 -159
  347. /package/src/{host/daemon → core}/runtimes/_spawn.js +0 -0
  348. /package/src/{host/daemon → core}/runtimes/aider.js +0 -0
  349. /package/src/{host/daemon → core}/runtimes/antigravity.js +0 -0
  350. /package/src/{host/daemon → core}/runtimes/claude-code.js +0 -0
  351. /package/src/{host/daemon → core}/runtimes/codex.js +0 -0
  352. /package/src/{host/daemon → core}/runtimes/cursor-agent.js +0 -0
  353. /package/src/{host/daemon → core}/runtimes/gemini-cli.js +0 -0
  354. /package/src/{host/daemon → core}/runtimes/index.js +0 -0
  355. /package/src/{host/daemon → core}/runtimes/opencode.js +0 -0
  356. /package/src/{host/daemon → core}/runtimes/qwen-code.js +0 -0
@@ -57,7 +57,7 @@ export function useTokenBootstrap(): AuthState {
57
57
  (async () => {
58
58
  // 1. Is the daemon even up?
59
59
  try {
60
- const probe = await fetch("/health");
60
+ const probe = await fetch("/api/health");
61
61
  if (!probe.ok) throw new Error(`HTTP ${probe.status}`);
62
62
  } catch (e) {
63
63
  if (!cancelled) setState({ status: "error", reason: String(e) });
@@ -107,7 +107,7 @@ export function useTokenBootstrap(): AuthState {
107
107
 
108
108
  // 3. Loopback endpoint — only succeeds on local same-origin requests.
109
109
  try {
110
- const t = await fetch("/admin/web-token");
110
+ const t = await fetch("/api/admin/web-token");
111
111
  if (t.ok) {
112
112
  const body = await t.json();
113
113
  if (body?.token) {
@@ -125,7 +125,7 @@ export function useTokenBootstrap(): AuthState {
125
125
 
126
126
  // 5. Validate the token with one cheap authenticated call.
127
127
  try {
128
- await http.get("/projects");
128
+ await http.get("/api/projects");
129
129
  if (!cancelled) setState({ status: "ok" });
130
130
  } catch (e) {
131
131
  if (e instanceof HttpError && (e.status === 401 || e.status === 403)) {
@@ -2,6 +2,32 @@
2
2
  // Keep entries in the same order as es.ts so diffs stay readable.
3
3
 
4
4
  export const en = {
5
+ cron: {
6
+ daily: "every day at {at}",
7
+ weekdays: "Monday to Friday at {at}",
8
+ weekends: "weekends at {at}",
9
+ on_days: "{days} at {at}",
10
+ monthly: "day {day} of each month at {at}",
11
+ every_hour: "every hour, at :{minute}",
12
+ every_n_hours: "every {n} hours, at :{minute}",
13
+ every_n_minutes: "every {n} minutes",
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",
21
+ day_short: { sun: "Sun", mon: "Mon", tue: "Tue", wed: "Wed", thu: "Thu", fri: "Fri", sat: "Sat" },
22
+ },
23
+ when: {
24
+ now: "now",
25
+ in: "in {amount}",
26
+ ago: "{amount} ago",
27
+ minutes: "{n} min",
28
+ hours: "{n} h",
29
+ days: "{n} d",
30
+ },
5
31
  common: {
6
32
  loading: "Loading…",
7
33
  saving: "Saving…",
@@ -143,6 +169,11 @@ export const en = {
143
169
  no_folders: "No folders.",
144
170
  },
145
171
  inbox: {
172
+ search: "Search",
173
+ no_match: "Nothing matches",
174
+ hide_quiet: "Hide quiet agents",
175
+ open_in_project: "Open in project",
176
+ super_agent_scope: "All projects",
146
177
  title: "Agent inbox",
147
178
  subtitle:
148
179
  "Every agent as a conversation, most recent first.",
@@ -195,6 +226,8 @@ export const en = {
195
226
  devices_revoke: "Revoke",
196
227
  account_section: "Account",
197
228
  agents_section: "Agents & models",
229
+ super_agent_section: "Super-agent",
230
+ knowledge_section: "Models & knowledge",
198
231
  channels_section: "Channels & devices",
199
232
  modules_section: "Modules",
200
233
  advanced_section: "Advanced",
@@ -206,6 +239,7 @@ export const en = {
206
239
  engines: "Engines & models",
207
240
  telegram: "Telegram",
208
241
  devices: "Devices",
242
+ nudge: "Interruptions",
209
243
  advanced: "Advanced",
210
244
  },
211
245
 
@@ -222,6 +256,9 @@ export const en = {
222
256
  activate: "Activate",
223
257
  replace_active: "Replace the active one",
224
258
  deactivate: "Deactivate",
259
+ on: "Active",
260
+ off: "Inactive",
261
+ replaces_active: "Turning this on replaces the active profile",
225
262
  deactivate_title: "Deactivate the profile?",
226
263
  deactivate_confirm:
227
264
  "APX goes back to vanilla. The profile's routines are disabled but not deleted, and your settings, tasks and memory are untouched — activating it again restores everything.",
@@ -245,6 +282,34 @@ export const en = {
245
282
  doctor_vanilla: "No profile active. APX behaves as it always has.",
246
283
  },
247
284
 
285
+ nudge: {
286
+ title: "Interruption budget",
287
+ subtitle:
288
+ "How often APX may write to you without being asked. Replies to your own messages are never held back.",
289
+ off_hint:
290
+ "The budget is off: every unrequested message goes out. Everything is still recorded below.",
291
+ on_hint: "{{sent}} sent today, {{left}} left.",
292
+ source: "Set by",
293
+ enabled: "Enforce the budget",
294
+ daily_max: "Messages per day",
295
+ daily_max_hint: "0 means no ceiling.",
296
+ quiet_hours: "Quiet hours",
297
+ quiet_hours_hint: "HH:MM-HH:MM. Crosses midnight fine. Leave empty for none.",
298
+ cooldown: "Minimum gap (minutes)",
299
+ project_cooldown: "Minimum gap per project (minutes)",
300
+ kind_cooldown: "Minimum gap per kind (minutes)",
301
+ critical_bypass: "Critical messages may bypass the budget",
302
+ critical_bypass_hint: "Bypasses are always recorded and flagged.",
303
+ log_title: "What it has sent",
304
+ log_subtitle: "Unrequested messages only, newest first. Your rating feeds back into what it sends next.",
305
+ log_empty: "Nothing sent unprompted yet.",
306
+ useful: "Useful",
307
+ noise: "Not useful",
308
+ bypass: "bypassed the budget",
309
+ saved: "Budget updated",
310
+ unrated: "not rated",
311
+ },
312
+
248
313
  identity: {
249
314
  title: "Identity",
250
315
  subtitle: "User data. Agent configuration goes in Super-agent.",
@@ -338,6 +403,7 @@ export const en = {
338
403
  agents: "Agents",
339
404
  routines: "Routines",
340
405
  tasks: "Tasks",
406
+ commitments: "Commitments",
341
407
  mcps: "MCPs",
342
408
  artifacts: "Artifacts",
343
409
  vars: "Variables",
@@ -442,6 +508,16 @@ export const en = {
442
508
  },
443
509
 
444
510
  global_tasks: {
511
+
512
+ add: "Add",
513
+
514
+ add_title: "New task",
515
+
516
+ field_title: "Task",
517
+
518
+ field_project: "Project",
519
+
520
+ field_due: "Due",
445
521
  any_status: "any status",
446
522
  title: "Tasks (all projects)",
447
523
  subtitle: "Aggregated tasks from all registered projects.",
@@ -450,6 +526,44 @@ export const en = {
450
526
  go_project: "Go to project",
451
527
  },
452
528
 
529
+ commitments: {
530
+
531
+ add: "Add",
532
+
533
+ add_title: "Record a promise",
534
+
535
+ add_hint: "Something you told a specific person you would do. Tasks live next door.",
536
+
537
+ field_who: "Who is waiting",
538
+
539
+ field_who_hint: "A name as you would say it — free text, not a contact.",
540
+
541
+ field_what: "What you promised",
542
+
543
+ field_what_ph: "send the revised quote",
544
+
545
+ field_due: "By when",
546
+
547
+ field_due_hint: "Optional, but it is the part that makes this useful.",
548
+
549
+ field_project: "Project",
550
+ title: "Commitments",
551
+ subtitle: "What was promised, to whom, and by when. Separate from tasks: someone is waiting on these.",
552
+ empty: "Nothing promised.",
553
+ overdue: "was due",
554
+ overdue_only: "Past their date",
555
+ no_date: "no date agreed",
556
+ moved: "moved",
557
+ mark_kept: "Kept",
558
+ mark_missed: "Missed",
559
+ state: {
560
+ open: "open",
561
+ kept: "kept",
562
+ missed: "missed",
563
+ all: "all",
564
+ },
565
+ },
566
+
453
567
  routines: {
454
568
  title: "Heartbeats / Routines",
455
569
  subtitle: "Cron, every:Nm, once:ISO. Each routine fires an agent or a shell.",
@@ -784,6 +898,12 @@ export const en = {
784
898
  },
785
899
 
786
900
  memories: {
901
+
902
+ super_agent_group: "Super-agent",
903
+
904
+ notebook_item: "{persona}'s notebook",
905
+
906
+ tokens: "~{n} tok",
787
907
  sidebar_title: "Memories",
788
908
  general_group: "General",
789
909
  general_item: "Project memory",
@@ -875,6 +995,8 @@ export const en = {
875
995
  no_activity_ch: "No activity in channel \"{ch}\".",
876
996
  error: "Could not read messages: {msg}",
877
997
  show_more: "show more",
998
+ event_routine_created: "routine created",
999
+ event_routine_updated: "routine updated",
878
1000
  show_less: "show less",
879
1001
  daemon_errors: "Daemon errors (~/.apx/logs/errors.jsonl)",
880
1002
  no_errors: "No errors recorded. 🎉",
@@ -1566,6 +1688,9 @@ export const en = {
1566
1688
  kind_routine: "routine",
1567
1689
  kind_hierarchy: "hierarchy",
1568
1690
  nodes_drag_hint: "{n} nodes · drag to rearrange",
1691
+ kind_watch: "Watcher",
1692
+ kind_watch_desc: "Sweeps for things worth noticing — overdue work, promises coming due, projects gone quiet. Costs nothing when there is nothing to report.",
1693
+ action_watch: "Watches for signals, and judges only when it finds some",
1569
1694
  kind_exec_agent: "Project agent",
1570
1695
  kind_exec_agent_desc: "Runs a project agent with a prompt. You pick which one.",
1571
1696
  kind_super_agent: "Super-agent",
@@ -1585,6 +1710,7 @@ export const en = {
1585
1710
  preset_every_10m: "every 10 min",
1586
1711
  preset_hourly: "hourly",
1587
1712
  preset_daily_9am: "daily 9am",
1713
+ sched_manual: "only when you run it",
1588
1714
  preset_weekdays_9am: "weekdays 9am",
1589
1715
  preset_manual: "Manual",
1590
1716
  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.",
@@ -1875,6 +2001,7 @@ export const en = {
1875
2001
  shared_ui: {
1876
2002
  skill_inspector_title: "Skill Inspector ({embedder}) chose these skills for this turn",
1877
2003
  tools_count: "{n} tools",
2004
+ tools_failed: "{n} failed",
1878
2005
  tool_read_file: "Read file",
1879
2006
  tool_write_file: "Write file",
1880
2007
  tool_edit_file: "Edit file",
@@ -3,6 +3,32 @@
3
3
  // will TypeScript-error on unknown keys.
4
4
 
5
5
  export const es = {
6
+ cron: {
7
+ daily: "todos los días a las {at}",
8
+ weekdays: "de lunes a viernes a las {at}",
9
+ weekends: "fines de semana a las {at}",
10
+ on_days: "{days} a las {at}",
11
+ monthly: "el día {day} de cada mes a las {at}",
12
+ every_hour: "cada hora, al minuto {minute}",
13
+ every_n_hours: "cada {n} horas, al minuto {minute}",
14
+ every_n_minutes: "cada {n} minutos",
15
+ every_minute: "cada minuto",
16
+ every_label: "cada N horas en vez de una hora fija",
17
+ use_cron: "editar como cron",
18
+ use_picker: "usar el selector",
19
+ preset_every_day: "todos los días",
20
+ preset_weekdays: "días de semana",
21
+ preset_weekends: "fin de semana",
22
+ day_short: { sun: "Dom", mon: "Lun", tue: "Mar", wed: "Mié", thu: "Jue", fri: "Vie", sat: "Sáb" },
23
+ },
24
+ when: {
25
+ now: "ahora",
26
+ in: "en {amount}",
27
+ ago: "hace {amount}",
28
+ minutes: "{n} min",
29
+ hours: "{n} h",
30
+ days: "{n} d",
31
+ },
6
32
  common: {
7
33
  loading: "Cargando…",
8
34
  saving: "Guardando…",
@@ -144,6 +170,11 @@ export const es = {
144
170
  no_folders: "Sin carpetas.",
145
171
  },
146
172
  inbox: {
173
+ search: "Buscar",
174
+ no_match: "No coincide nada",
175
+ hide_quiet: "Ocultar agentes callados",
176
+ open_in_project: "Abrir en el proyecto",
177
+ super_agent_scope: "Todos los proyectos",
147
178
  title: "Bandeja de agentes",
148
179
  subtitle:
149
180
  "Cada agente como una conversación, lo más reciente primero.",
@@ -196,6 +227,8 @@ export const es = {
196
227
  devices_revoke: "Revocar",
197
228
  account_section: "Cuenta",
198
229
  agents_section: "Agentes & modelos",
230
+ super_agent_section: "Super-agente",
231
+ knowledge_section: "Modelos y conocimiento",
199
232
  channels_section: "Canales & dispositivos",
200
233
  modules_section: "Módulos",
201
234
  advanced_section: "Avanzado",
@@ -207,6 +240,7 @@ export const es = {
207
240
  engines: "Engines & modelos",
208
241
  telegram: "Telegram",
209
242
  devices: "Dispositivos",
243
+ nudge: "Interrupciones",
210
244
  advanced: "Avanzado",
211
245
  },
212
246
 
@@ -223,6 +257,9 @@ export const es = {
223
257
  activate: "Activar",
224
258
  replace_active: "Reemplazar el activo",
225
259
  deactivate: "Desactivar",
260
+ on: "Activo",
261
+ off: "Inactivo",
262
+ replaces_active: "Activarlo reemplaza al perfil activo",
226
263
  deactivate_title: "¿Desactivar el perfil?",
227
264
  deactivate_confirm:
228
265
  "APX vuelve a vanilla. Las rutinas del perfil se deshabilitan pero no se borran, y tu configuración, tareas y memoria quedan intactas: volver a activarlo restaura todo.",
@@ -246,6 +283,34 @@ export const es = {
246
283
  doctor_vanilla: "Sin perfil activo. APX se comporta como siempre.",
247
284
  },
248
285
 
286
+ nudge: {
287
+ title: "Presupuesto de interrupciones",
288
+ subtitle:
289
+ "Cada cuánto puede escribirte APX sin que se lo pidas. Las respuestas a tus propios mensajes nunca se retienen.",
290
+ off_hint:
291
+ "El presupuesto está apagado: sale todo mensaje no solicitado. Igual queda registrado acá abajo.",
292
+ on_hint: "{{sent}} enviados hoy, quedan {{left}}.",
293
+ source: "Definido por",
294
+ enabled: "Aplicar el presupuesto",
295
+ daily_max: "Mensajes por día",
296
+ daily_max_hint: "0 significa sin techo.",
297
+ quiet_hours: "Horas de silencio",
298
+ quiet_hours_hint: "HH:MM-HH:MM. Cruza la medianoche sin problema. Vacío = ninguna.",
299
+ cooldown: "Espacio mínimo (minutos)",
300
+ project_cooldown: "Espacio mínimo por proyecto (minutos)",
301
+ kind_cooldown: "Espacio mínimo por tipo (minutos)",
302
+ critical_bypass: "Lo crítico puede saltarse el presupuesto",
303
+ critical_bypass_hint: "Los saltos quedan siempre registrados y marcados.",
304
+ log_title: "Lo que mandó",
305
+ log_subtitle: "Sólo mensajes no solicitados, del más nuevo al más viejo. Lo que marques alimenta lo que manda después.",
306
+ log_empty: "Todavía no mandó nada sin que se lo pidieras.",
307
+ useful: "Me sirvió",
308
+ noise: "No me servía",
309
+ bypass: "se salteó el presupuesto",
310
+ saved: "Presupuesto actualizado",
311
+ unrated: "sin calificar",
312
+ },
313
+
249
314
  identity: {
250
315
  title: "Identidad",
251
316
  subtitle: "Datos del usuario. Configuración del agente va en Super-agente.",
@@ -339,6 +404,7 @@ export const es = {
339
404
  agents: "Agents",
340
405
  routines: "Rutinas",
341
406
  tasks: "Tasks",
407
+ commitments: "Compromisos",
342
408
  mcps: "MCPs",
343
409
  artifacts: "Artifacts",
344
410
  vars: "Variables",
@@ -443,6 +509,16 @@ export const es = {
443
509
  },
444
510
 
445
511
  global_tasks: {
512
+
513
+ add: "Agregar",
514
+
515
+ add_title: "Nueva tarea",
516
+
517
+ field_title: "Tarea",
518
+
519
+ field_project: "Proyecto",
520
+
521
+ field_due: "Vence",
446
522
  any_status: "cualquier estado",
447
523
  title: "Tasks (todos los proyectos)",
448
524
  subtitle: "Tareas agregadas de todos los proyectos registrados.",
@@ -451,6 +527,44 @@ export const es = {
451
527
  go_project: "Ir al proyecto",
452
528
  },
453
529
 
530
+ commitments: {
531
+
532
+ add: "Agregar",
533
+
534
+ add_title: "Registrar una promesa",
535
+
536
+ add_hint: "Algo que le dijiste a una persona concreta que ibas a hacer. Las tareas están al lado.",
537
+
538
+ field_who: "Quién está esperando",
539
+
540
+ field_who_hint: "El nombre como lo dirías vos — texto libre, no un contacto.",
541
+
542
+ field_what: "Qué prometiste",
543
+
544
+ field_what_ph: "mandar el presupuesto corregido",
545
+
546
+ field_due: "Para cuándo",
547
+
548
+ field_due_hint: "Opcional, pero es la parte que lo hace útil.",
549
+
550
+ field_project: "Proyecto",
551
+ title: "Compromisos",
552
+ subtitle: "Qué prometiste, a quién y para cuándo. Aparte de las tareas: acá hay alguien esperando.",
553
+ empty: "Nada prometido.",
554
+ overdue: "vencía",
555
+ overdue_only: "Pasados de fecha",
556
+ no_date: "sin fecha acordada",
557
+ moved: "movido",
558
+ mark_kept: "Cumplido",
559
+ mark_missed: "Incumplido",
560
+ state: {
561
+ open: "abiertos",
562
+ kept: "cumplidos",
563
+ missed: "incumplidos",
564
+ all: "todos",
565
+ },
566
+ },
567
+
454
568
  routines: {
455
569
  title: "Heartbeats / Routines",
456
570
  subtitle: "Cron, every:Nm, once:ISO. Cada rutina dispara un agente o un shell.",
@@ -782,6 +896,12 @@ export const es = {
782
896
  },
783
897
 
784
898
  memories: {
899
+
900
+ super_agent_group: "Super-agente",
901
+
902
+ notebook_item: "Libreta de {persona}",
903
+
904
+ tokens: "~{n} tok",
785
905
  sidebar_title: "Memorias",
786
906
  general_group: "General",
787
907
  general_item: "Memoria del proyecto",
@@ -873,6 +993,8 @@ export const es = {
873
993
  no_activity_ch: "Sin actividad en el canal \"{ch}\".",
874
994
  error: "No pude leer los mensajes: {msg}",
875
995
  show_more: "ver más",
996
+ event_routine_created: "rutina creada",
997
+ event_routine_updated: "rutina actualizada",
876
998
  show_less: "ver menos",
877
999
  daemon_errors: "Errores del daemon (~/.apx/logs/errors.jsonl)",
878
1000
  no_errors: "Sin errores registrados. 🎉",
@@ -1564,6 +1686,9 @@ export const es = {
1564
1686
  kind_routine: "rutina",
1565
1687
  kind_hierarchy: "jerarquía",
1566
1688
  nodes_drag_hint: "{n} nodos · arrastrá para reordenar",
1689
+ kind_watch: "Vigía",
1690
+ kind_watch_desc: "Barre buscando cosas que valga la pena notar — vencidos, promesas por caer, proyectos en silencio. No cuesta nada cuando no hay nada que reportar.",
1691
+ action_watch: "Vigila señales, y sólo juzga cuando encuentra alguna",
1567
1692
  kind_exec_agent: "Agente del proyecto",
1568
1693
  kind_exec_agent_desc: "Corre un agente del proyecto con un prompt. Vos elegís cuál.",
1569
1694
  kind_super_agent: "Super-agente",
@@ -1583,6 +1708,7 @@ export const es = {
1583
1708
  preset_every_10m: "cada 10 min",
1584
1709
  preset_hourly: "cada hora",
1585
1710
  preset_daily_9am: "diario 9am",
1711
+ sched_manual: "solo cuando lo corrés vos",
1586
1712
  preset_weekdays_9am: "días hábiles 9am",
1587
1713
  preset_manual: "Manual",
1588
1714
  var_pre_output_prompt: "Salida de texto de los pre-commands. Se reemplaza dentro del prompt/texto antes de enviarlo. Útil para inyectar datos frescos (clima, una API) en la instrucción.",
@@ -1873,6 +1999,7 @@ export const es = {
1873
1999
  shared_ui: {
1874
2000
  skill_inspector_title: "Skill Inspector ({embedder}) eligió estas skills para este turno",
1875
2001
  tools_count: "{n} tools",
2002
+ tools_failed: "{n} fallaron",
1876
2003
  tool_read_file: "Leer archivo",
1877
2004
  tool_write_file: "Escribir archivo",
1878
2005
  tool_edit_file: "Editar archivo",
@@ -2,29 +2,29 @@ import { http } from "../http";
2
2
  import type { GlobalConfig, PairedClient, PairInit, PairStatus, SuperAgentConfig } from "../../types/daemon";
3
3
 
4
4
  export const Admin = {
5
- reload: () => http.post<{ ok: true; super_agent_model: string; fallback_order: string[] }>("/admin/reload"),
6
- shutdown: () => http.post<{ ok: true }>("/admin/shutdown"),
5
+ reload: () => http.post<{ ok: true; super_agent_model: string; fallback_order: string[] }>("/api/admin/reload"),
6
+ shutdown: () => http.post<{ ok: true }>("/api/admin/shutdown"),
7
7
  config: {
8
- get: () => http.get<{ config: GlobalConfig }>("/admin/config"),
8
+ get: () => http.get<{ config: GlobalConfig }>("/api/admin/config"),
9
9
  patch: (body: { set?: Record<string, unknown>; unset?: string[] }) =>
10
- http.patch<{ ok: true; config: GlobalConfig }>("/admin/config", body),
10
+ http.patch<{ ok: true; config: GlobalConfig }>("/api/admin/config", body),
11
11
  },
12
- superAgent: () => http.get<SuperAgentConfig>("/admin/super-agent"),
12
+ superAgent: () => http.get<SuperAgentConfig>("/api/admin/super-agent"),
13
13
  logs: (file: "errors" | "apx" = "errors", limit = 200) =>
14
14
  http.get<{ file: string; entries?: Array<Record<string, unknown>>; lines?: string[] }>(
15
- `/admin/logs?file=${file}&limit=${limit}`,
15
+ `/api/admin/logs?file=${file}&limit=${limit}`,
16
16
  ),
17
17
  };
18
18
 
19
19
  export const Pair = {
20
- list: () => http.get<{ clients: PairedClient[] }>("/pair/list"),
21
- revoke: (id: string) => http.del<void>(`/pair/revoke/${encodeURIComponent(id)}`),
20
+ list: () => http.get<{ clients: PairedClient[] }>("/api/pair/list"),
21
+ revoke: (id: string) => http.del<void>(`/api/pair/revoke/${encodeURIComponent(id)}`),
22
22
  // Mint a pairing nonce (localhost-only on the daemon). Used by the web's
23
23
  // "Vincular dispositivo" — same nonce the terminal `apx pair` uses.
24
- init: () => http.post<PairInit>("/pair/init", {}),
25
- status: (pid: string) => http.get<PairStatus>(`/pair/status/${encodeURIComponent(pid)}`),
24
+ init: () => http.post<PairInit>("/api/pair/init", {}),
25
+ status: (pid: string) => http.get<PairStatus>(`/api/pair/status/${encodeURIComponent(pid)}`),
26
26
  // Browser plays the "device" role: confirm a nonce (scanned via QR or pasted)
27
27
  // to mint a per-client token. Unauthenticated by design (nonce-gated).
28
28
  confirm: (body: { pairing_id: string; label?: string; kind?: string }) =>
29
- http.post<{ token: string; client_id: string; label: string; kind: string }>("/pair/confirm", body),
29
+ http.post<{ token: string; client_id: string; label: string; kind: string }>("/api/pair/confirm", body),
30
30
  };
@@ -3,24 +3,24 @@ import type { AgentDetail, AgentEntry, ChatUsage } from "../../types/daemon";
3
3
 
4
4
  export const Agents = {
5
5
  list: (pid: string, opts?: { stats?: boolean }) =>
6
- http.get<AgentEntry[]>(`/projects/${pid}/agents${opts?.stats ? "?stats=1" : ""}`),
7
- get: (pid: string, slug: string) => http.get<AgentDetail>(`/projects/${pid}/agents/${slug}`),
6
+ http.get<AgentEntry[]>(`/api/projects/${pid}/agents${opts?.stats ? "?stats=1" : ""}`),
7
+ get: (pid: string, slug: string) => http.get<AgentDetail>(`/api/projects/${pid}/agents/${slug}`),
8
8
  create: (pid: string, body: Partial<AgentEntry> & { slug: string }) =>
9
- http.post<AgentEntry>(`/projects/${pid}/agents`, body),
9
+ http.post<AgentEntry>(`/api/projects/${pid}/agents`, body),
10
10
  update: (pid: string, slug: string, body: Partial<AgentEntry> & { system?: string }) =>
11
- http.patch<AgentEntry>(`/projects/${pid}/agents/${encodeURIComponent(slug)}`, body),
11
+ http.patch<AgentEntry>(`/api/projects/${pid}/agents/${encodeURIComponent(slug)}`, body),
12
12
  remove: (pid: string, slug: string) =>
13
- http.del<{ ok: boolean }>(`/projects/${pid}/agents/${encodeURIComponent(slug)}`),
13
+ http.del<{ ok: boolean }>(`/api/projects/${pid}/agents/${encodeURIComponent(slug)}`),
14
14
  chat: (pid: string, slug: string, body: { prompt: string; conversation_id?: string; model?: string; channel?: string }) =>
15
15
  http.post<{ conversation_id: string; text: string; usage?: ChatUsage; engine: string }>(
16
- `/projects/${pid}/agents/${encodeURIComponent(slug)}/chat`,
16
+ `/api/projects/${pid}/agents/${encodeURIComponent(slug)}/chat`,
17
17
  body,
18
18
  ),
19
19
  memory: {
20
20
  get: (pid: string, slug: string) =>
21
- http.get<{ body: string }>(`/projects/${pid}/agents/${slug}/memory`),
21
+ http.get<{ body: string }>(`/api/projects/${pid}/agents/${slug}/memory`),
22
22
  put: (pid: string, slug: string, body: string) =>
23
- http.put<{ ok: boolean; bytes: number }>(`/projects/${pid}/agents/${slug}/memory`, { body }),
23
+ http.put<{ ok: boolean; bytes: number }>(`/api/projects/${pid}/agents/${slug}/memory`, { body }),
24
24
  },
25
25
  // Vault = global agent templates. Two-layer: bundled defaults shipped with
26
26
  // APX + user overrides/new ones in ~/.apx/agents. The API merges both and
@@ -28,20 +28,20 @@ export const Agents = {
28
28
  // Tombstones (deleted bundled defaults) are hidden unless includeRemoved=true.
29
29
  vault: (opts?: { includeRemoved?: boolean }) =>
30
30
  http.get<(AgentEntry & { source?: "bundled" | "user" | "user-override" })[]>(
31
- opts?.includeRemoved ? "/agents/vault?include_removed=1" : "/agents/vault",
31
+ opts?.includeRemoved ? "/api/agents/vault?include_removed=1" : "/api/agents/vault",
32
32
  ),
33
33
  vaultCreate: (slug: string, fields: Record<string, unknown> = {}, body = "") =>
34
- http.post<AgentEntry>("/agents/vault", { slug, fields, body }),
34
+ http.post<AgentEntry>("/api/agents/vault", { slug, fields, body }),
35
35
  vaultPatch: (slug: string, patch: { fields?: Record<string, unknown>; body?: string }) =>
36
- http.patch<AgentEntry>(`/agents/vault/${encodeURIComponent(slug)}`, patch),
36
+ http.patch<AgentEntry>(`/api/agents/vault/${encodeURIComponent(slug)}`, patch),
37
37
  vaultRemove: (slug: string) =>
38
38
  http.del<{ ok: boolean; removed: "user" | "tomb" | "user+tomb" }>(
39
- `/agents/vault/${encodeURIComponent(slug)}`,
39
+ `/api/agents/vault/${encodeURIComponent(slug)}`,
40
40
  ),
41
41
  vaultRestore: (slug: string) =>
42
42
  http.post<{ ok: boolean; agent: AgentEntry | null }>(
43
- `/agents/vault/${encodeURIComponent(slug)}/restore`,
43
+ `/api/agents/vault/${encodeURIComponent(slug)}/restore`,
44
44
  ),
45
45
  import: (pid: string, slug: string) =>
46
- http.post<AgentEntry>(`/projects/${pid}/agents/import`, { slug }),
46
+ http.post<AgentEntry>(`/api/projects/${pid}/agents/import`, { slug }),
47
47
  };
@@ -53,43 +53,43 @@ export interface ArtifactTunnel {
53
53
 
54
54
  export const Artifacts = {
55
55
  list: (pid: string) =>
56
- http.get<ArtifactEntry[]>(`/projects/${encodeURIComponent(pid)}/artifacts`),
56
+ http.get<ArtifactEntry[]>(`/api/projects/${encodeURIComponent(pid)}/artifacts`),
57
57
  read: (pid: string, name: string) =>
58
58
  http.get<ArtifactContent>(
59
- `/projects/${encodeURIComponent(pid)}/artifacts/${encodeURIComponent(name)}`,
59
+ `/api/projects/${encodeURIComponent(pid)}/artifacts/${encodeURIComponent(name)}`,
60
60
  ),
61
61
  run: (pid: string, name: string, args: string[] = []) =>
62
62
  http.post<ArtifactRunResult>(
63
- `/projects/${encodeURIComponent(pid)}/artifacts/${encodeURIComponent(name)}/run`,
63
+ `/api/projects/${encodeURIComponent(pid)}/artifacts/${encodeURIComponent(name)}/run`,
64
64
  { args },
65
65
  ),
66
66
  remove: (pid: string, name: string) =>
67
67
  http.del<void>(
68
- `/projects/${encodeURIComponent(pid)}/artifacts/${encodeURIComponent(name)}`,
68
+ `/api/projects/${encodeURIComponent(pid)}/artifacts/${encodeURIComponent(name)}`,
69
69
  ),
70
70
  write: (pid: string, name: string, content: string) =>
71
71
  http.patch<{ ok: boolean; name: string }>(
72
- `/projects/${encodeURIComponent(pid)}/artifacts/${encodeURIComponent(name)}`,
72
+ `/api/projects/${encodeURIComponent(pid)}/artifacts/${encodeURIComponent(name)}`,
73
73
  { content },
74
74
  ),
75
75
  rename: (pid: string, name: string, newName: string) =>
76
76
  http.patch<{ ok: boolean; name: string }>(
77
- `/projects/${encodeURIComponent(pid)}/artifacts/${encodeURIComponent(name)}`,
77
+ `/api/projects/${encodeURIComponent(pid)}/artifacts/${encodeURIComponent(name)}`,
78
78
  { newName },
79
79
  ),
80
80
 
81
81
  // Start (or reuse) an ephemeral local preview server for an artifact.
82
82
  preview: (pid: string, name: string, watch = true) =>
83
83
  http.post<ArtifactPreview>(
84
- `/projects/${encodeURIComponent(pid)}/artifacts/${encodeURIComponent(name)}/preview`,
84
+ `/api/projects/${encodeURIComponent(pid)}/artifacts/${encodeURIComponent(name)}/preview`,
85
85
  { watch },
86
86
  ),
87
87
  // List running preview servers for a project.
88
88
  previews: (pid: string) =>
89
- http.get<ArtifactPreview[]>(`/projects/${encodeURIComponent(pid)}/previews`),
90
- stopPreview: (id: string) => http.del<void>(`/previews/${encodeURIComponent(id)}`),
89
+ http.get<ArtifactPreview[]>(`/api/projects/${encodeURIComponent(pid)}/previews`),
90
+ stopPreview: (id: string) => http.del<void>(`/api/previews/${encodeURIComponent(id)}`),
91
91
  // Open / close a public tunnel to a running preview.
92
92
  openTunnel: (id: string, provider?: string) =>
93
- http.post<ArtifactTunnel>(`/previews/${encodeURIComponent(id)}/tunnel`, { provider }),
94
- closeTunnel: (id: string) => http.del<void>(`/previews/${encodeURIComponent(id)}/tunnel`),
93
+ http.post<ArtifactTunnel>(`/api/previews/${encodeURIComponent(id)}/tunnel`, { provider }),
94
+ closeTunnel: (id: string) => http.del<void>(`/api/previews/${encodeURIComponent(id)}/tunnel`),
95
95
  };
@@ -79,7 +79,7 @@ export type CodeStreamEvent = ChatStreamEvent & {
79
79
  tool?: string;
80
80
  };
81
81
 
82
- const base = (pid: string | number) => `/projects/${pid}/code/sessions`;
82
+ const base = (pid: string | number) => `/api/projects/${pid}/code/sessions`;
83
83
 
84
84
  export const Code = {
85
85
  sessions: {