@agentprojectcontext/apx 1.25.0 → 1.27.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 (718) hide show
  1. package/package.json +42 -12
  2. package/skills/apx/SKILL.md +50 -119
  3. package/skills/apx-agency-agents/SKILL.md +141 -0
  4. package/skills/apx-agent/SKILL.md +100 -0
  5. package/skills/apx-mcp/SKILL.md +114 -0
  6. package/skills/apx-mcp-builder/SKILL.md +186 -0
  7. package/skills/apx-project/SKILL.md +100 -0
  8. package/skills/apx-routine/SKILL.md +138 -0
  9. package/skills/apx-runtime/SKILL.md +115 -0
  10. package/skills/apx-sessions/SKILL.md +281 -0
  11. package/skills/apx-skill-builder/SKILL.md +149 -0
  12. package/skills/apx-task/SKILL.md +95 -0
  13. package/skills/apx-telegram/SKILL.md +115 -0
  14. package/skills/apx-voice/SKILL.md +135 -0
  15. package/src/core/agent/constants.js +3 -0
  16. package/src/core/agent/ghost-guard.js +24 -0
  17. package/src/core/agent/index.js +35 -0
  18. package/src/core/agent/model-router.js +257 -0
  19. package/src/core/agent/prompt-builder.js +313 -0
  20. package/src/core/agent/prompts/channels/api.md +7 -0
  21. package/src/core/agent/prompts/channels/cli.md +6 -0
  22. package/src/core/agent/prompts/channels/code.md +20 -0
  23. package/src/core/agent/prompts/channels/deck.md +6 -0
  24. package/src/core/agent/prompts/channels/desktop.md +24 -0
  25. package/src/core/agent/prompts/channels/routine.md +9 -0
  26. package/src/core/agent/prompts/channels/telegram.md +9 -0
  27. package/src/core/agent/prompts/channels/terminal.md +16 -0
  28. package/src/core/agent/prompts/channels/web.md +7 -0
  29. package/src/core/agent/prompts/channels/web_sidebar.md +7 -0
  30. package/src/core/agent/prompts/modes/voice.md +4 -0
  31. package/src/core/agent/prompts/super-agent-base.md +42 -0
  32. package/src/core/agent/pseudo-tools.js +40 -0
  33. package/src/core/agent/retry.js +85 -0
  34. package/src/core/agent/run-agent.js +423 -0
  35. package/src/core/agent/self-memory.js +155 -0
  36. package/src/{daemon → core/agent}/tool-call-parser.js +83 -10
  37. package/src/core/agent/tools-overlap.js +66 -0
  38. package/src/core/apc-skill-sync.js +97 -0
  39. package/src/core/code-sessions-store.js +150 -0
  40. package/src/core/config.js +473 -11
  41. package/src/core/desktop/autostart.js +162 -0
  42. package/src/core/engines/_health.js +63 -0
  43. package/src/{daemon → core}/engines/anthropic.js +16 -0
  44. package/src/core/engines/gemini.js +168 -0
  45. package/src/core/engines/groq.js +8 -0
  46. package/src/{daemon → core}/engines/index.js +3 -1
  47. package/src/{daemon → core}/engines/mock.js +22 -0
  48. package/src/{daemon → core}/engines/ollama.js +35 -0
  49. package/src/core/engines/openai-compatible.js +145 -0
  50. package/src/core/engines/openai.js +8 -0
  51. package/src/core/engines/openrouter.js +8 -0
  52. package/src/core/git-baseline.js +147 -0
  53. package/src/core/identity.js +21 -0
  54. package/src/core/logging.js +1 -1
  55. package/src/core/mcp/index.js +14 -0
  56. package/src/{daemon/mcp-runner.js → core/mcp/runner.js} +18 -6
  57. package/src/core/mcp/sources.js +246 -0
  58. package/src/core/memory/active-threads.js +124 -0
  59. package/src/core/memory/broker.js +144 -0
  60. package/src/core/memory/compactor.js +186 -0
  61. package/src/core/memory/embed-engines/gemini.js +62 -0
  62. package/src/core/memory/embed-engines/index.js +148 -0
  63. package/src/core/memory/embed-engines/ollama.js +55 -0
  64. package/src/core/memory/embed-engines/openai.js +64 -0
  65. package/src/core/memory/embed-engines/tf.js +20 -0
  66. package/src/core/memory/embeddings.js +132 -0
  67. package/src/core/memory/index.js +161 -0
  68. package/src/core/memory/indexer.js +257 -0
  69. package/src/core/memory/store.js +231 -0
  70. package/src/core/messages-store.js +143 -25
  71. package/src/core/parser.js +78 -16
  72. package/src/core/scaffold.js +175 -79
  73. package/src/core/tasks-store.js +264 -0
  74. package/src/core/telegram-identity.js +126 -0
  75. package/src/core/tools/index.js +6 -0
  76. package/src/core/voice/engines/elevenlabs.js +96 -0
  77. package/src/core/voice/engines/gemini.js +148 -0
  78. package/src/core/voice/engines/index.js +144 -0
  79. package/src/core/voice/engines/mock.js +59 -0
  80. package/src/core/voice/engines/openai.js +82 -0
  81. package/src/core/voice/engines/piper.js +93 -0
  82. package/src/core/voice/index.js +3 -0
  83. package/src/core/voice/tts.js +89 -0
  84. package/src/{daemon → host/daemon}/apc-runtime-context.js +1 -1
  85. package/src/host/daemon/api/admin-config.js +159 -0
  86. package/src/host/daemon/api/admin.js +72 -0
  87. package/src/host/daemon/api/agents.js +284 -0
  88. package/src/host/daemon/api/artifacts.js +52 -0
  89. package/src/host/daemon/api/code.js +351 -0
  90. package/src/host/daemon/api/config.js +104 -0
  91. package/src/host/daemon/api/connections.js +42 -0
  92. package/src/host/daemon/api/conversations.js +161 -0
  93. package/src/host/daemon/api/deck.js +511 -0
  94. package/src/host/daemon/api/desktop.js +71 -0
  95. package/src/host/daemon/api/embeddings.js +65 -0
  96. package/src/host/daemon/api/engines.js +80 -0
  97. package/src/host/daemon/api/exec.js +193 -0
  98. package/src/host/daemon/api/health.js +10 -0
  99. package/src/host/daemon/api/identity.js +36 -0
  100. package/src/host/daemon/api/mcps.js +205 -0
  101. package/src/host/daemon/api/messages.js +83 -0
  102. package/src/host/daemon/api/pairing.js +194 -0
  103. package/src/host/daemon/api/plugins.js +19 -0
  104. package/src/host/daemon/api/projects.js +35 -0
  105. package/src/host/daemon/api/routines.js +84 -0
  106. package/src/host/daemon/api/run.js +55 -0
  107. package/src/host/daemon/api/runtimes.js +219 -0
  108. package/src/host/daemon/api/sessions-search.js +177 -0
  109. package/src/host/daemon/api/sessions.js +115 -0
  110. package/src/host/daemon/api/shared.js +217 -0
  111. package/src/host/daemon/api/super-agent.js +208 -0
  112. package/src/host/daemon/api/tasks.js +118 -0
  113. package/src/host/daemon/api/telegram.js +325 -0
  114. package/src/host/daemon/api/tools.js +21 -0
  115. package/src/host/daemon/api/top-level.js +131 -0
  116. package/src/host/daemon/api/transcribe.js +35 -0
  117. package/src/host/daemon/api/tts.js +44 -0
  118. package/src/host/daemon/api/voice.js +519 -0
  119. package/src/host/daemon/api/web.js +123 -0
  120. package/src/host/daemon/api.js +152 -0
  121. package/src/{daemon → host/daemon}/compact.js +1 -1
  122. package/src/{daemon → host/daemon}/db.js +19 -5
  123. package/src/{daemon/overlay-ws.js → host/daemon/desktop-ws.js} +7 -7
  124. package/src/host/daemon/engine-sessions.js +245 -0
  125. package/src/{daemon → host/daemon}/index.js +27 -10
  126. package/src/{daemon/plugins/overlay.js → host/daemon/plugins/desktop.js} +36 -28
  127. package/src/{daemon → host/daemon}/plugins/index.js +2 -2
  128. package/src/{daemon → host/daemon}/plugins/telegram.js +165 -33
  129. package/src/{daemon → host/daemon}/project-config.js +31 -7
  130. package/src/{daemon → host/daemon}/routines.js +27 -8
  131. package/src/{daemon → host/daemon}/skills-loader.js +4 -2
  132. package/src/{daemon → host/daemon}/smoke.js +9 -5
  133. package/src/{daemon → host/daemon}/super-agent-tools/helpers.js +1 -1
  134. package/src/host/daemon/super-agent-tools/index.js +157 -0
  135. package/src/{daemon → host/daemon}/super-agent-tools/registry-bridge.js +1 -1
  136. package/src/{daemon → host/daemon}/super-agent-tools/tools/add-project.js +2 -2
  137. package/src/{daemon → host/daemon}/super-agent-tools/tools/ask-questions.js +4 -0
  138. package/src/{daemon → host/daemon}/super-agent-tools/tools/call-agent.js +5 -2
  139. package/src/{daemon → host/daemon}/super-agent-tools/tools/call-runtime.js +117 -8
  140. package/src/host/daemon/super-agent-tools/tools/create-task.js +52 -0
  141. package/src/{daemon → host/daemon}/super-agent-tools/tools/import-agent.js +2 -3
  142. package/src/{daemon → host/daemon}/super-agent-tools/tools/list-agents.js +1 -1
  143. package/src/host/daemon/super-agent-tools/tools/list-tasks.js +52 -0
  144. package/src/{daemon → host/daemon}/super-agent-tools/tools/list-vault-agents.js +1 -1
  145. package/src/host/daemon/super-agent-tools/tools/read-self-memory.js +21 -0
  146. package/src/host/daemon/super-agent-tools/tools/remember.js +40 -0
  147. package/src/{daemon → host/daemon}/super-agent-tools/tools/search-messages.js +1 -1
  148. package/src/host/daemon/super-agent-tools/tools/search-sessions.js +134 -0
  149. package/src/{daemon → host/daemon}/super-agent-tools/tools/send-telegram.js +2 -2
  150. package/src/{daemon → host/daemon}/super-agent-tools/tools/set-identity.js +1 -1
  151. package/src/{daemon → host/daemon}/super-agent-tools/tools/set-permission-mode.js +1 -1
  152. package/src/{daemon → host/daemon}/super-agent-tools/tools/tail-messages.js +1 -1
  153. package/src/host/daemon/super-agent.js +129 -0
  154. package/src/host/daemon/token-store.js +118 -0
  155. package/src/host/daemon/tool-call-parser.js +2 -0
  156. package/src/{daemon → host/daemon}/transcription.js +1 -1
  157. package/src/{daemon → host/daemon}/wakeup.js +2 -2
  158. package/src/interfaces/cli/claude-permissions.js +33 -0
  159. package/src/{cli → interfaces/cli}/commands/agent.js +43 -8
  160. package/src/{cli → interfaces/cli}/commands/command.js +1 -1
  161. package/src/{cli → interfaces/cli}/commands/config.js +1 -1
  162. package/src/{cli → interfaces/cli}/commands/daemon.js +67 -0
  163. package/src/interfaces/cli/commands/desktop.js +335 -0
  164. package/src/interfaces/cli/commands/exec.js +92 -0
  165. package/src/{cli → interfaces/cli}/commands/identity.js +6 -63
  166. package/src/{cli → interfaces/cli}/commands/init.js +1 -1
  167. package/src/{cli → interfaces/cli}/commands/mcp.js +69 -10
  168. package/src/{cli → interfaces/cli}/commands/memory.js +2 -2
  169. package/src/interfaces/cli/commands/model.js +136 -0
  170. package/src/interfaces/cli/commands/pair.js +170 -0
  171. package/src/interfaces/cli/commands/project-config.js +131 -0
  172. package/src/{cli → interfaces/cli}/commands/project.js +1 -1
  173. package/src/{cli → interfaces/cli}/commands/search.js +1 -1
  174. package/src/interfaces/cli/commands/session.js +892 -0
  175. package/src/interfaces/cli/commands/sessions.js +997 -0
  176. package/src/{cli → interfaces/cli}/commands/setup.js +98 -4
  177. package/src/{cli → interfaces/cli}/commands/skills.js +117 -9
  178. package/src/{cli → interfaces/cli}/commands/status.js +9 -1
  179. package/src/{cli → interfaces/cli}/commands/sys.js +96 -17
  180. package/src/interfaces/cli/commands/task.js +179 -0
  181. package/src/interfaces/cli/commands/telegram.js +366 -0
  182. package/src/{cli → interfaces/cli}/commands/update.js +1 -1
  183. package/src/interfaces/cli/commands/voice.js +258 -0
  184. package/src/{cli → interfaces/cli}/http.js +6 -2
  185. package/src/{cli → interfaces/cli}/index.js +955 -63
  186. package/src/interfaces/cli/postinstall.js +34 -0
  187. package/src/interfaces/desktop/assets/app-icon-180.png +0 -0
  188. package/src/interfaces/desktop/assets/app-icon-32.png +0 -0
  189. package/src/interfaces/desktop/assets/app-icon.png +0 -0
  190. package/src/interfaces/desktop/assets/apx-logo.png +0 -0
  191. package/src/interfaces/desktop/assets/superagent.png +0 -0
  192. package/src/interfaces/desktop/assets/tray-icon.png +0 -0
  193. package/src/interfaces/desktop/index.html +18 -0
  194. package/src/interfaces/desktop/main.js +652 -0
  195. package/src/interfaces/desktop/preload.js +48 -0
  196. package/src/interfaces/desktop/renderer.js +1006 -0
  197. package/src/interfaces/desktop/style.css +400 -0
  198. package/src/{mcp → interfaces/mcp-server}/index.js +2 -2
  199. package/src/interfaces/tui/_shims/util-which.ts +53 -0
  200. package/src/{tui → interfaces/tui}/app.tsx +2 -2
  201. package/src/{tui → interfaces/tui}/component/prompt/index.tsx +4 -1
  202. package/src/{tui → interfaces/tui}/context/sdk-apx.tsx +84 -16
  203. package/src/interfaces/tui/context/sync-apx.tsx +398 -0
  204. package/src/interfaces/tui/routes/session/index.tsx +368 -0
  205. package/src/interfaces/tui/routes/session/message-actions.tsx +58 -0
  206. package/src/interfaces/tui/routes/session/sidebar-apx.tsx +114 -0
  207. package/src/{tui → interfaces/tui}/tsconfig.json +1 -0
  208. package/src/{tui → interfaces/tui}/util/clipboard.ts +1 -1
  209. package/src/interfaces/web/README.md +102 -0
  210. package/src/interfaces/web/coming-soon.html +65 -0
  211. package/src/interfaces/web/components.json +25 -0
  212. package/src/interfaces/web/dist/assets/index-BDUsA6L6.css +1 -0
  213. package/src/interfaces/web/dist/assets/index-CfWyjPBa.js +548 -0
  214. package/src/interfaces/web/dist/assets/index-CfWyjPBa.js.map +1 -0
  215. package/src/interfaces/web/dist/favicon/dark/android-chrome-192x192.png +0 -0
  216. package/src/interfaces/web/dist/favicon/dark/android-chrome-512x512.png +0 -0
  217. package/src/interfaces/web/dist/favicon/dark/apple-touch-icon.png +0 -0
  218. package/src/interfaces/web/dist/favicon/dark/favicon-16x16.png +0 -0
  219. package/src/interfaces/web/dist/favicon/dark/favicon-32x32.png +0 -0
  220. package/src/interfaces/web/dist/favicon/dark/favicon-48x48.png +0 -0
  221. package/src/interfaces/web/dist/favicon/dark/favicon.ico +0 -0
  222. package/src/interfaces/web/dist/favicon/dark/favicon.webp +0 -0
  223. package/src/interfaces/web/dist/favicon/dark/site.webmanifest +18 -0
  224. package/src/interfaces/web/dist/favicon/white/android-chrome-192x192.png +0 -0
  225. package/src/interfaces/web/dist/favicon/white/android-chrome-512x512.png +0 -0
  226. package/src/interfaces/web/dist/favicon/white/apple-touch-icon.png +0 -0
  227. package/src/interfaces/web/dist/favicon/white/favicon-16x16.png +0 -0
  228. package/src/interfaces/web/dist/favicon/white/favicon-32x32.png +0 -0
  229. package/src/interfaces/web/dist/favicon/white/favicon-48x48.png +0 -0
  230. package/src/interfaces/web/dist/favicon/white/favicon.ico +0 -0
  231. package/src/interfaces/web/dist/favicon/white/favicon.webp +0 -0
  232. package/src/interfaces/web/dist/favicon/white/site.webmanifest +18 -0
  233. package/src/interfaces/web/dist/index.html +27 -0
  234. package/src/interfaces/web/dist/logo/logo_dark.webp +0 -0
  235. package/src/interfaces/web/dist/logo/logo_only_dark.webp +0 -0
  236. package/src/interfaces/web/dist/logo/logo_only_white.webp +0 -0
  237. package/src/interfaces/web/dist/logo/logo_vertical_dark.webp +0 -0
  238. package/src/interfaces/web/dist/logo/logo_vertical_white.webp +0 -0
  239. package/src/interfaces/web/dist/logo/logo_white.webp +0 -0
  240. package/src/interfaces/web/dist/modules/superagent.png +0 -0
  241. package/src/interfaces/web/index.html +26 -0
  242. package/src/interfaces/web/package-lock.json +4253 -0
  243. package/src/interfaces/web/package.json +55 -0
  244. package/src/interfaces/web/playwright.config.ts +45 -0
  245. package/src/interfaces/web/pnpm-lock.yaml +2946 -0
  246. package/src/interfaces/web/public/favicon/dark/android-chrome-192x192.png +0 -0
  247. package/src/interfaces/web/public/favicon/dark/android-chrome-512x512.png +0 -0
  248. package/src/interfaces/web/public/favicon/dark/apple-touch-icon.png +0 -0
  249. package/src/interfaces/web/public/favicon/dark/favicon-16x16.png +0 -0
  250. package/src/interfaces/web/public/favicon/dark/favicon-32x32.png +0 -0
  251. package/src/interfaces/web/public/favicon/dark/favicon-48x48.png +0 -0
  252. package/src/interfaces/web/public/favicon/dark/favicon.ico +0 -0
  253. package/src/interfaces/web/public/favicon/dark/favicon.webp +0 -0
  254. package/src/interfaces/web/public/favicon/dark/site.webmanifest +18 -0
  255. package/src/interfaces/web/public/favicon/white/android-chrome-192x192.png +0 -0
  256. package/src/interfaces/web/public/favicon/white/android-chrome-512x512.png +0 -0
  257. package/src/interfaces/web/public/favicon/white/apple-touch-icon.png +0 -0
  258. package/src/interfaces/web/public/favicon/white/favicon-16x16.png +0 -0
  259. package/src/interfaces/web/public/favicon/white/favicon-32x32.png +0 -0
  260. package/src/interfaces/web/public/favicon/white/favicon-48x48.png +0 -0
  261. package/src/interfaces/web/public/favicon/white/favicon.ico +0 -0
  262. package/src/interfaces/web/public/favicon/white/favicon.webp +0 -0
  263. package/src/interfaces/web/public/favicon/white/site.webmanifest +18 -0
  264. package/src/interfaces/web/public/logo/logo_dark.webp +0 -0
  265. package/src/interfaces/web/public/logo/logo_only_dark.webp +0 -0
  266. package/src/interfaces/web/public/logo/logo_only_white.webp +0 -0
  267. package/src/interfaces/web/public/logo/logo_vertical_dark.webp +0 -0
  268. package/src/interfaces/web/public/logo/logo_vertical_white.webp +0 -0
  269. package/src/interfaces/web/public/logo/logo_white.webp +0 -0
  270. package/src/interfaces/web/public/modules/superagent.png +0 -0
  271. package/src/interfaces/web/src/App.tsx +199 -0
  272. package/src/interfaces/web/src/components/AddProjectDialog.tsx +121 -0
  273. package/src/interfaces/web/src/components/ModelCombobox.tsx +96 -0
  274. package/src/interfaces/web/src/components/RobyBubble.tsx +213 -0
  275. package/src/interfaces/web/src/components/Section.tsx +44 -0
  276. package/src/interfaces/web/src/components/TelegramChannelDialog.tsx +97 -0
  277. package/src/interfaces/web/src/components/TelegramSendDialog.tsx +48 -0
  278. package/src/interfaces/web/src/components/Toast.tsx +84 -0
  279. package/src/interfaces/web/src/components/UiSelect.tsx +74 -0
  280. package/src/interfaces/web/src/components/chat/Composer.tsx +43 -0
  281. package/src/interfaces/web/src/components/chat/ContextBar.tsx +111 -0
  282. package/src/interfaces/web/src/components/chat/MessageBubble.tsx +95 -0
  283. package/src/interfaces/web/src/components/chat/MessageList.tsx +35 -0
  284. package/src/interfaces/web/src/components/chat/ModelPicker.tsx +145 -0
  285. package/src/interfaces/web/src/components/chat/ToolCall.tsx +141 -0
  286. package/src/interfaces/web/src/components/code/CodeChangesTab.tsx +87 -0
  287. package/src/interfaces/web/src/components/code/CodeComposer.tsx +87 -0
  288. package/src/interfaces/web/src/components/code/CodeContextTab.tsx +83 -0
  289. package/src/interfaces/web/src/components/code/CodeProjectPicker.tsx +39 -0
  290. package/src/interfaces/web/src/components/code/CodeSessionList.tsx +97 -0
  291. package/src/interfaces/web/src/components/code/CodeSidePanel.tsx +44 -0
  292. package/src/interfaces/web/src/components/code/CodeToolTrail.tsx +29 -0
  293. package/src/interfaces/web/src/components/code/DiffView.tsx +67 -0
  294. package/src/interfaces/web/src/components/common/Qr.tsx +27 -0
  295. package/src/interfaces/web/src/components/common/TabLayout.tsx +46 -0
  296. package/src/interfaces/web/src/components/common/TabNav.tsx +113 -0
  297. package/src/interfaces/web/src/components/config/ConfigTabsEditor.tsx +202 -0
  298. package/src/interfaces/web/src/components/config/GlobalConfigEditor.tsx +42 -0
  299. package/src/interfaces/web/src/components/config/global-config-sections.ts +60 -0
  300. package/src/interfaces/web/src/components/config/project-config-sections.ts +58 -0
  301. package/src/interfaces/web/src/components/deck/DaemonCard.tsx +58 -0
  302. package/src/interfaces/web/src/components/deck/DesktopGroup.tsx +33 -0
  303. package/src/interfaces/web/src/components/deck/WidgetRow.tsx +100 -0
  304. package/src/interfaces/web/src/components/layout/Logo.tsx +59 -0
  305. package/src/interfaces/web/src/components/layout/ProjectAvatar.tsx +116 -0
  306. package/src/interfaces/web/src/components/layout/ProjectSidebar.tsx +151 -0
  307. package/src/interfaces/web/src/components/settings/AdvancedPanel.tsx +45 -0
  308. package/src/interfaces/web/src/components/settings/AppearancePanel.tsx +72 -0
  309. package/src/interfaces/web/src/components/settings/DefaultRouterCard.tsx +232 -0
  310. package/src/interfaces/web/src/components/settings/DevicesPanel.tsx +60 -0
  311. package/src/interfaces/web/src/components/settings/EnginesPanel.tsx +127 -0
  312. package/src/interfaces/web/src/components/settings/IdentityPanel.tsx +69 -0
  313. package/src/interfaces/web/src/components/settings/MemoryPanel.tsx +226 -0
  314. package/src/interfaces/web/src/components/settings/PairDeviceDialog.tsx +175 -0
  315. package/src/interfaces/web/src/components/settings/SuperAgentPanel.tsx +93 -0
  316. package/src/interfaces/web/src/components/settings/TelegramChannelsPanel.tsx +90 -0
  317. package/src/interfaces/web/src/components/settings/TelegramContactsPanel.tsx +101 -0
  318. package/src/interfaces/web/src/components/settings/TelegramGlobalPanel.tsx +100 -0
  319. package/src/interfaces/web/src/components/settings/TelegramRolesPanel.tsx +108 -0
  320. package/src/interfaces/web/src/components/settings/TelegramSettingsTabs.tsx +55 -0
  321. package/src/interfaces/web/src/components/settings/providers/ProviderCard.tsx +95 -0
  322. package/src/interfaces/web/src/components/settings/providers/ProviderModal.tsx +405 -0
  323. package/src/interfaces/web/src/components/settings/providers/typeStyles.ts +155 -0
  324. package/src/interfaces/web/src/components/settings/providers/types.ts +26 -0
  325. package/src/interfaces/web/src/components/ui/accordion.tsx +72 -0
  326. package/src/interfaces/web/src/components/ui/alert-dialog.tsx +187 -0
  327. package/src/interfaces/web/src/components/ui/alert.tsx +76 -0
  328. package/src/interfaces/web/src/components/ui/aspect-ratio.tsx +22 -0
  329. package/src/interfaces/web/src/components/ui/avatar.tsx +107 -0
  330. package/src/interfaces/web/src/components/ui/badge.tsx +52 -0
  331. package/src/interfaces/web/src/components/ui/breadcrumb.tsx +125 -0
  332. package/src/interfaces/web/src/components/ui/button-group.tsx +87 -0
  333. package/src/interfaces/web/src/components/ui/button.tsx +58 -0
  334. package/src/interfaces/web/src/components/ui/calendar.tsx +221 -0
  335. package/src/interfaces/web/src/components/ui/card.tsx +103 -0
  336. package/src/interfaces/web/src/components/ui/carousel.tsx +242 -0
  337. package/src/interfaces/web/src/components/ui/chart.tsx +371 -0
  338. package/src/interfaces/web/src/components/ui/chat-input.tsx +122 -0
  339. package/src/interfaces/web/src/components/ui/checkbox.tsx +29 -0
  340. package/src/interfaces/web/src/components/ui/collapsible.tsx +19 -0
  341. package/src/interfaces/web/src/components/ui/combobox.tsx +295 -0
  342. package/src/interfaces/web/src/components/ui/command.tsx +196 -0
  343. package/src/interfaces/web/src/components/ui/context-menu.tsx +271 -0
  344. package/src/interfaces/web/src/components/ui/dialog.tsx +158 -0
  345. package/src/interfaces/web/src/components/ui/direction.tsx +4 -0
  346. package/src/interfaces/web/src/components/ui/drawer.tsx +134 -0
  347. package/src/interfaces/web/src/components/ui/dropdown-menu.tsx +266 -0
  348. package/src/interfaces/web/src/components/ui/empty.tsx +104 -0
  349. package/src/interfaces/web/src/components/ui/field.tsx +236 -0
  350. package/src/interfaces/web/src/components/ui/hover-card.tsx +51 -0
  351. package/src/interfaces/web/src/components/ui/input-group.tsx +158 -0
  352. package/src/interfaces/web/src/components/ui/input-otp.tsx +85 -0
  353. package/src/interfaces/web/src/components/ui/input.tsx +20 -0
  354. package/src/interfaces/web/src/components/ui/item.tsx +201 -0
  355. package/src/interfaces/web/src/components/ui/kbd.tsx +26 -0
  356. package/src/interfaces/web/src/components/ui/label.tsx +20 -0
  357. package/src/interfaces/web/src/components/ui/menubar.tsx +280 -0
  358. package/src/interfaces/web/src/components/ui/native-select.tsx +61 -0
  359. package/src/interfaces/web/src/components/ui/navigation-menu.tsx +168 -0
  360. package/src/interfaces/web/src/components/ui/pagination.tsx +130 -0
  361. package/src/interfaces/web/src/components/ui/popover.tsx +88 -0
  362. package/src/interfaces/web/src/components/ui/progress.tsx +83 -0
  363. package/src/interfaces/web/src/components/ui/radio-group.tsx +36 -0
  364. package/src/interfaces/web/src/components/ui/resizable.tsx +50 -0
  365. package/src/interfaces/web/src/components/ui/scroll-area.tsx +53 -0
  366. package/src/interfaces/web/src/components/ui/select.tsx +201 -0
  367. package/src/interfaces/web/src/components/ui/separator.tsx +23 -0
  368. package/src/interfaces/web/src/components/ui/sheet.tsx +138 -0
  369. package/src/interfaces/web/src/components/ui/sidebar.tsx +723 -0
  370. package/src/interfaces/web/src/components/ui/skeleton.tsx +13 -0
  371. package/src/interfaces/web/src/components/ui/slider.tsx +52 -0
  372. package/src/interfaces/web/src/components/ui/sonner.tsx +49 -0
  373. package/src/interfaces/web/src/components/ui/spinner.tsx +10 -0
  374. package/src/interfaces/web/src/components/ui/switch.tsx +30 -0
  375. package/src/interfaces/web/src/components/ui/table.tsx +116 -0
  376. package/src/interfaces/web/src/components/ui/tabs.tsx +72 -0
  377. package/src/interfaces/web/src/components/ui/textarea.tsx +18 -0
  378. package/src/interfaces/web/src/components/ui/tip.tsx +21 -0
  379. package/src/interfaces/web/src/components/ui/toggle-group.tsx +87 -0
  380. package/src/interfaces/web/src/components/ui/toggle.tsx +45 -0
  381. package/src/interfaces/web/src/components/ui/tooltip.tsx +64 -0
  382. package/src/interfaces/web/src/components/ui.tsx +211 -0
  383. package/src/interfaces/web/src/components/voice/VoiceProviderList.tsx +197 -0
  384. package/src/interfaces/web/src/components/voice/VoiceProviderModal.tsx +213 -0
  385. package/src/interfaces/web/src/components/voice/VoiceSttCard.tsx +72 -0
  386. package/src/interfaces/web/src/components/voice/VoiceTestCard.tsx +112 -0
  387. package/src/interfaces/web/src/components/voice/useTtsPlayer.ts +59 -0
  388. package/src/interfaces/web/src/constants/index.ts +91 -0
  389. package/src/interfaces/web/src/hooks/use-mobile.ts +19 -0
  390. package/src/interfaces/web/src/hooks/useChat.ts +276 -0
  391. package/src/interfaces/web/src/hooks/useDaemonStatus.ts +12 -0
  392. package/src/interfaces/web/src/hooks/useDevices.ts +12 -0
  393. package/src/interfaces/web/src/hooks/useEngines.ts +10 -0
  394. package/src/interfaces/web/src/hooks/useGlobalConfig.ts +24 -0
  395. package/src/interfaces/web/src/hooks/useIdentity.ts +16 -0
  396. package/src/interfaces/web/src/hooks/useProjects.ts +27 -0
  397. package/src/interfaces/web/src/hooks/useTelegram.ts +35 -0
  398. package/src/interfaces/web/src/hooks/useTheme.tsx +57 -0
  399. package/src/interfaces/web/src/hooks/useTokenBootstrap.ts +122 -0
  400. package/src/interfaces/web/src/i18n/en.ts +767 -0
  401. package/src/interfaces/web/src/i18n/es.ts +770 -0
  402. package/src/interfaces/web/src/i18n/index.ts +86 -0
  403. package/src/interfaces/web/src/lib/api/admin.ts +30 -0
  404. package/src/interfaces/web/src/lib/api/agents.ts +46 -0
  405. package/src/interfaces/web/src/lib/api/code.ts +122 -0
  406. package/src/interfaces/web/src/lib/api/conversations.ts +16 -0
  407. package/src/interfaces/web/src/lib/api/deck.ts +106 -0
  408. package/src/interfaces/web/src/lib/api/desktop.ts +54 -0
  409. package/src/interfaces/web/src/lib/api/embeddings.ts +44 -0
  410. package/src/interfaces/web/src/lib/api/engines.ts +17 -0
  411. package/src/interfaces/web/src/lib/api/filesystem.ts +12 -0
  412. package/src/interfaces/web/src/lib/api/health.ts +6 -0
  413. package/src/interfaces/web/src/lib/api/identity.ts +7 -0
  414. package/src/interfaces/web/src/lib/api/mcps.ts +29 -0
  415. package/src/interfaces/web/src/lib/api/messages.ts +24 -0
  416. package/src/interfaces/web/src/lib/api/projects.ts +29 -0
  417. package/src/interfaces/web/src/lib/api/routines.ts +14 -0
  418. package/src/interfaces/web/src/lib/api/sessions.ts +16 -0
  419. package/src/interfaces/web/src/lib/api/super_agent.ts +29 -0
  420. package/src/interfaces/web/src/lib/api/tasks.ts +19 -0
  421. package/src/interfaces/web/src/lib/api/telegram.ts +57 -0
  422. package/src/interfaces/web/src/lib/api/tools.ts +13 -0
  423. package/src/interfaces/web/src/lib/api/voice.ts +169 -0
  424. package/src/interfaces/web/src/lib/api.ts +48 -0
  425. package/src/interfaces/web/src/lib/cn.ts +6 -0
  426. package/src/interfaces/web/src/lib/code-context.ts +83 -0
  427. package/src/interfaces/web/src/lib/config-values.ts +29 -0
  428. package/src/interfaces/web/src/lib/device.ts +10 -0
  429. package/src/interfaces/web/src/lib/http.ts +104 -0
  430. package/src/interfaces/web/src/lib/secrets.ts +15 -0
  431. package/src/interfaces/web/src/lib/utils.ts +6 -0
  432. package/src/interfaces/web/src/main.tsx +16 -0
  433. package/src/interfaces/web/src/screens/ApxAdminScreen.tsx +174 -0
  434. package/src/interfaces/web/src/screens/PairingScreen.tsx +105 -0
  435. package/src/interfaces/web/src/screens/ProjectScreen.tsx +178 -0
  436. package/src/interfaces/web/src/screens/SettingsScreen.tsx +111 -0
  437. package/src/interfaces/web/src/screens/base/AgentDefaultsTab.tsx +274 -0
  438. package/src/interfaces/web/src/screens/base/ComingSoon.tsx +16 -0
  439. package/src/interfaces/web/src/screens/base/GlobalTasksTab.tsx +53 -0
  440. package/src/interfaces/web/src/screens/base/LogsTab.tsx +188 -0
  441. package/src/interfaces/web/src/screens/base/ModelsTab.tsx +13 -0
  442. package/src/interfaces/web/src/screens/base/SessionsTab.tsx +58 -0
  443. package/src/interfaces/web/src/screens/base/WorkspacesTab.tsx +49 -0
  444. package/src/interfaces/web/src/screens/modules/CodeScreen.tsx +295 -0
  445. package/src/interfaces/web/src/screens/modules/DeckScreen.tsx +173 -0
  446. package/src/interfaces/web/src/screens/modules/DesktopScreen.tsx +304 -0
  447. package/src/interfaces/web/src/screens/modules/VoiceScreen.tsx +174 -0
  448. package/src/interfaces/web/src/screens/project/AgentBrainGraph.tsx +152 -0
  449. package/src/interfaces/web/src/screens/project/AgentDetailScreen.tsx +455 -0
  450. package/src/interfaces/web/src/screens/project/AgentsTab.tsx +364 -0
  451. package/src/interfaces/web/src/screens/project/ChatTab.tsx +198 -0
  452. package/src/interfaces/web/src/screens/project/ConfigTab.tsx +94 -0
  453. package/src/interfaces/web/src/screens/project/McpsTab.tsx +149 -0
  454. package/src/interfaces/web/src/screens/project/MemoriesTab.tsx +134 -0
  455. package/src/interfaces/web/src/screens/project/Overview.tsx +37 -0
  456. package/src/interfaces/web/src/screens/project/RoutinesTab.tsx +386 -0
  457. package/src/interfaces/web/src/screens/project/TasksTab.tsx +116 -0
  458. package/src/interfaces/web/src/screens/project/TelegramTab.tsx +126 -0
  459. package/src/interfaces/web/src/screens/project/ThreadsTab.tsx +100 -0
  460. package/src/interfaces/web/src/styles.css +128 -0
  461. package/src/interfaces/web/src/types/daemon.ts +289 -0
  462. package/src/interfaces/web/tailwind.config.js +53 -0
  463. package/src/interfaces/web/tsconfig.json +24 -0
  464. package/src/interfaces/web/vite.config.ts +50 -0
  465. package/src/cli/commands/exec.js +0 -56
  466. package/src/cli/commands/overlay.js +0 -253
  467. package/src/cli/commands/session.js +0 -395
  468. package/src/cli/commands/sessions.js +0 -517
  469. package/src/cli/commands/telegram.js +0 -77
  470. package/src/cli/postinstall.js +0 -75
  471. package/src/cli-ts/commands/agent.ts +0 -173
  472. package/src/cli-ts/commands/chat.ts +0 -119
  473. package/src/cli-ts/commands/daemon.ts +0 -112
  474. package/src/cli-ts/commands/exec.ts +0 -109
  475. package/src/cli-ts/commands/mcp.ts +0 -235
  476. package/src/cli-ts/commands/session.ts +0 -224
  477. package/src/cli-ts/commands/status.ts +0 -61
  478. package/src/cli-ts/http.ts +0 -36
  479. package/src/cli-ts/index.ts +0 -73
  480. package/src/cli-ts/ui.ts +0 -107
  481. package/src/daemon/api.js +0 -1558
  482. package/src/daemon/engines/gemini.js +0 -56
  483. package/src/daemon/engines/openai.js +0 -79
  484. package/src/daemon/mcp-sources.js +0 -114
  485. package/src/daemon/super-agent-tools/index.js +0 -84
  486. package/src/daemon/super-agent-tools.js +0 -1
  487. package/src/daemon/super-agent.js +0 -541
  488. package/src/overlay/index.html +0 -44
  489. package/src/overlay/main.js +0 -480
  490. package/src/overlay/preload.js +0 -34
  491. package/src/overlay/renderer.js +0 -371
  492. package/src/overlay/style.css +0 -250
  493. package/src/tui/context/sync-apx.tsx +0 -284
  494. package/src/tui/routes/session/index.tsx +0 -274
  495. package/src/tui/routes/session/sidebar-apx.tsx +0 -90
  496. /package/src/{daemon → core}/tools/browser.js +0 -0
  497. /package/src/{daemon → core}/tools/fetch.js +0 -0
  498. /package/src/{daemon → core}/tools/glob.js +0 -0
  499. /package/src/{daemon → core}/tools/grep.js +0 -0
  500. /package/src/{daemon → core}/tools/registry.js +0 -0
  501. /package/src/{daemon → core}/tools/search.js +0 -0
  502. /package/src/{daemon → host/daemon}/conversations.js +0 -0
  503. /package/src/{daemon → host/daemon}/env-detect.js +0 -0
  504. /package/src/{daemon → host/daemon}/runtimes/_spawn.js +0 -0
  505. /package/src/{daemon → host/daemon}/runtimes/aider.js +0 -0
  506. /package/src/{daemon → host/daemon}/runtimes/claude-code.js +0 -0
  507. /package/src/{daemon → host/daemon}/runtimes/codex.js +0 -0
  508. /package/src/{daemon → host/daemon}/runtimes/cursor-agent.js +0 -0
  509. /package/src/{daemon → host/daemon}/runtimes/gemini-cli.js +0 -0
  510. /package/src/{daemon → host/daemon}/runtimes/index.js +0 -0
  511. /package/src/{daemon → host/daemon}/runtimes/opencode.js +0 -0
  512. /package/src/{daemon → host/daemon}/runtimes/qwen-code.js +0 -0
  513. /package/src/{daemon → host/daemon}/super-agent-tools/tools/call-mcp.js +0 -0
  514. /package/src/{daemon → host/daemon}/super-agent-tools/tools/edit-file.js +0 -0
  515. /package/src/{daemon → host/daemon}/super-agent-tools/tools/list-files.js +0 -0
  516. /package/src/{daemon → host/daemon}/super-agent-tools/tools/list-mcps.js +0 -0
  517. /package/src/{daemon → host/daemon}/super-agent-tools/tools/list-projects.js +0 -0
  518. /package/src/{daemon → host/daemon}/super-agent-tools/tools/list-skills.js +0 -0
  519. /package/src/{daemon → host/daemon}/super-agent-tools/tools/load-skill.js +0 -0
  520. /package/src/{daemon → host/daemon}/super-agent-tools/tools/read-agent-memory.js +0 -0
  521. /package/src/{daemon → host/daemon}/super-agent-tools/tools/read-file.js +0 -0
  522. /package/src/{daemon → host/daemon}/super-agent-tools/tools/run-shell.js +0 -0
  523. /package/src/{daemon → host/daemon}/super-agent-tools/tools/search-files.js +0 -0
  524. /package/src/{daemon → host/daemon}/super-agent-tools/tools/transcribe-audio.js +0 -0
  525. /package/src/{daemon → host/daemon}/super-agent-tools/tools/write-file.js +0 -0
  526. /package/src/{daemon → host/daemon}/thinking.js +0 -0
  527. /package/src/{daemon → host/daemon}/whisper-server.py +0 -0
  528. /package/src/{daemon → host/daemon}/whisper-transcribe.py +0 -0
  529. /package/src/{cli → interfaces/cli}/commands/a2a.js +0 -0
  530. /package/src/{cli → interfaces/cli}/commands/artifact.js +0 -0
  531. /package/src/{cli → interfaces/cli}/commands/chat.js +0 -0
  532. /package/src/{cli → interfaces/cli}/commands/log.js +0 -0
  533. /package/src/{cli → interfaces/cli}/commands/messages.js +0 -0
  534. /package/src/{cli → interfaces/cli}/commands/plugins.js +0 -0
  535. /package/src/{cli → interfaces/cli}/commands/routine.js +0 -0
  536. /package/src/{cli → interfaces/cli}/commands/runtime.js +0 -0
  537. /package/src/{cli → interfaces/cli}/terminal-chat/renderer.js +0 -0
  538. /package/src/{overlay → interfaces/desktop}/package.json +0 -0
  539. /package/src/{tui → interfaces/tui}/_shims/cli-error.ts +0 -0
  540. /package/src/{tui → interfaces/tui}/_shims/cli-logo.ts +0 -0
  541. /package/src/{tui → interfaces/tui}/_shims/cli-ui.ts +0 -0
  542. /package/src/{tui → interfaces/tui}/_shims/config-console-state.ts +0 -0
  543. /package/src/{tui → interfaces/tui}/_shims/core-any.ts +0 -0
  544. /package/src/{tui → interfaces/tui}/_shims/core-binary.ts +0 -0
  545. /package/src/{tui → interfaces/tui}/_shims/core-flag.ts +0 -0
  546. /package/src/{tui → interfaces/tui}/_shims/core-log.ts +0 -0
  547. /package/src/{tui → interfaces/tui}/_shims/lsp-language.ts +0 -0
  548. /package/src/{tui → interfaces/tui}/_shims/opencode-any.ts +0 -0
  549. /package/src/{tui → interfaces/tui}/_shims/opencode-sdk-v2.ts +0 -0
  550. /package/src/{tui → interfaces/tui}/_shims/plugin-tui.ts +0 -0
  551. /package/src/{tui → interfaces/tui}/_shims/prompt-display.ts +0 -0
  552. /package/src/{tui → interfaces/tui}/_shims/provider-provider.ts +0 -0
  553. /package/src/{tui → interfaces/tui}/_shims/session-retry.ts +0 -0
  554. /package/src/{tui → interfaces/tui}/_shims/session-schema.ts +0 -0
  555. /package/src/{tui → interfaces/tui}/_shims/session-session.ts +0 -0
  556. /package/src/{tui → interfaces/tui}/_shims/snapshot.ts +0 -0
  557. /package/src/{tui → interfaces/tui}/_shims/tool-any.ts +0 -0
  558. /package/src/{tui → interfaces/tui}/_shims/util-error.ts +0 -0
  559. /package/src/{tui → interfaces/tui}/_shims/util-filesystem.ts +0 -0
  560. /package/src/{tui → interfaces/tui}/_shims/util-format.ts +0 -0
  561. /package/src/{tui → interfaces/tui}/_shims/util-iife.ts +0 -0
  562. /package/src/{tui → interfaces/tui}/_shims/util-locale.ts +0 -0
  563. /package/src/{tui → interfaces/tui}/_shims/util-process.ts +0 -0
  564. /package/src/{tui → interfaces/tui}/asset/charge.wav +0 -0
  565. /package/src/{tui → interfaces/tui}/asset/pulse-a.wav +0 -0
  566. /package/src/{tui → interfaces/tui}/asset/pulse-b.wav +0 -0
  567. /package/src/{tui → interfaces/tui}/asset/pulse-c.wav +0 -0
  568. /package/src/{tui → interfaces/tui}/attach.ts +0 -0
  569. /package/src/{tui → interfaces/tui}/component/bg-pulse-render.ts +0 -0
  570. /package/src/{tui → interfaces/tui}/component/bg-pulse.tsx +0 -0
  571. /package/src/{tui → interfaces/tui}/component/border.tsx +0 -0
  572. /package/src/{tui → interfaces/tui}/component/dialog-agent.tsx +0 -0
  573. /package/src/{tui → interfaces/tui}/component/dialog-console-org.tsx +0 -0
  574. /package/src/{tui → interfaces/tui}/component/dialog-mcp.tsx +0 -0
  575. /package/src/{tui → interfaces/tui}/component/dialog-model.tsx +0 -0
  576. /package/src/{tui → interfaces/tui}/component/dialog-provider.tsx +0 -0
  577. /package/src/{tui → interfaces/tui}/component/dialog-retry-action.tsx +0 -0
  578. /package/src/{tui → interfaces/tui}/component/dialog-session-delete-failed.tsx +0 -0
  579. /package/src/{tui → interfaces/tui}/component/dialog-session-list.tsx +0 -0
  580. /package/src/{tui → interfaces/tui}/component/dialog-session-rename.tsx +0 -0
  581. /package/src/{tui → interfaces/tui}/component/dialog-skill.tsx +0 -0
  582. /package/src/{tui → interfaces/tui}/component/dialog-stash.tsx +0 -0
  583. /package/src/{tui → interfaces/tui}/component/dialog-status.tsx +0 -0
  584. /package/src/{tui → interfaces/tui}/component/dialog-tag.tsx +0 -0
  585. /package/src/{tui → interfaces/tui}/component/dialog-theme-list.tsx +0 -0
  586. /package/src/{tui → interfaces/tui}/component/dialog-variant.tsx +0 -0
  587. /package/src/{tui → interfaces/tui}/component/dialog-workspace-create.tsx +0 -0
  588. /package/src/{tui → interfaces/tui}/component/dialog-workspace-file-changes.tsx +0 -0
  589. /package/src/{tui → interfaces/tui}/component/dialog-workspace-unavailable.tsx +0 -0
  590. /package/src/{tui → interfaces/tui}/component/error-component.tsx +0 -0
  591. /package/src/{tui → interfaces/tui}/component/logo.tsx +0 -0
  592. /package/src/{tui → interfaces/tui}/component/plugin-route-missing.tsx +0 -0
  593. /package/src/{tui → interfaces/tui}/component/prompt/autocomplete.tsx +0 -0
  594. /package/src/{tui → interfaces/tui}/component/prompt/cwd.ts +0 -0
  595. /package/src/{tui → interfaces/tui}/component/prompt/frecency.tsx +0 -0
  596. /package/src/{tui → interfaces/tui}/component/prompt/history.tsx +0 -0
  597. /package/src/{tui → interfaces/tui}/component/prompt/part.ts +0 -0
  598. /package/src/{tui → interfaces/tui}/component/prompt/stash.tsx +0 -0
  599. /package/src/{tui → interfaces/tui}/component/prompt/traits.ts +0 -0
  600. /package/src/{tui → interfaces/tui}/component/spinner.tsx +0 -0
  601. /package/src/{tui → interfaces/tui}/component/startup-loading.tsx +0 -0
  602. /package/src/{tui → interfaces/tui}/component/todo-item.tsx +0 -0
  603. /package/src/{tui → interfaces/tui}/component/use-connected.tsx +0 -0
  604. /package/src/{tui → interfaces/tui}/component/workspace-label.tsx +0 -0
  605. /package/src/{tui → interfaces/tui}/config/cwd.ts +0 -0
  606. /package/src/{tui → interfaces/tui}/config/keybind.ts +0 -0
  607. /package/src/{tui → interfaces/tui}/config/tui-migrate.ts +0 -0
  608. /package/src/{tui → interfaces/tui}/config/tui-schema.ts +0 -0
  609. /package/src/{tui → interfaces/tui}/config/tui.ts +0 -0
  610. /package/src/{tui → interfaces/tui}/context/aggregate-failures.ts +0 -0
  611. /package/src/{tui → interfaces/tui}/context/args.tsx +0 -0
  612. /package/src/{tui → interfaces/tui}/context/command-palette.tsx +0 -0
  613. /package/src/{tui → interfaces/tui}/context/directory.ts +0 -0
  614. /package/src/{tui → interfaces/tui}/context/editor-zed.ts +0 -0
  615. /package/src/{tui → interfaces/tui}/context/editor.ts +0 -0
  616. /package/src/{tui → interfaces/tui}/context/event-apx.ts +0 -0
  617. /package/src/{tui → interfaces/tui}/context/event.ts +0 -0
  618. /package/src/{tui → interfaces/tui}/context/exit.tsx +0 -0
  619. /package/src/{tui → interfaces/tui}/context/helper.tsx +0 -0
  620. /package/src/{tui → interfaces/tui}/context/kv.tsx +0 -0
  621. /package/src/{tui → interfaces/tui}/context/local.tsx +0 -0
  622. /package/src/{tui → interfaces/tui}/context/path-format.tsx +0 -0
  623. /package/src/{tui → interfaces/tui}/context/project-apx.tsx +0 -0
  624. /package/src/{tui → interfaces/tui}/context/project.tsx +0 -0
  625. /package/src/{tui → interfaces/tui}/context/prompt.tsx +0 -0
  626. /package/src/{tui → interfaces/tui}/context/route.tsx +0 -0
  627. /package/src/{tui → interfaces/tui}/context/sdk.tsx +0 -0
  628. /package/src/{tui → interfaces/tui}/context/sync-v2.tsx +0 -0
  629. /package/src/{tui → interfaces/tui}/context/sync.tsx +0 -0
  630. /package/src/{tui → interfaces/tui}/context/theme/aura.json +0 -0
  631. /package/src/{tui → interfaces/tui}/context/theme/ayu.json +0 -0
  632. /package/src/{tui → interfaces/tui}/context/theme/carbonfox.json +0 -0
  633. /package/src/{tui → interfaces/tui}/context/theme/catppuccin-frappe.json +0 -0
  634. /package/src/{tui → interfaces/tui}/context/theme/catppuccin-macchiato.json +0 -0
  635. /package/src/{tui → interfaces/tui}/context/theme/catppuccin.json +0 -0
  636. /package/src/{tui → interfaces/tui}/context/theme/cobalt2.json +0 -0
  637. /package/src/{tui → interfaces/tui}/context/theme/cursor.json +0 -0
  638. /package/src/{tui → interfaces/tui}/context/theme/dracula.json +0 -0
  639. /package/src/{tui → interfaces/tui}/context/theme/everforest.json +0 -0
  640. /package/src/{tui → interfaces/tui}/context/theme/flexoki.json +0 -0
  641. /package/src/{tui → interfaces/tui}/context/theme/github.json +0 -0
  642. /package/src/{tui → interfaces/tui}/context/theme/gruvbox.json +0 -0
  643. /package/src/{tui → interfaces/tui}/context/theme/kanagawa.json +0 -0
  644. /package/src/{tui → interfaces/tui}/context/theme/lucent-orng.json +0 -0
  645. /package/src/{tui → interfaces/tui}/context/theme/material.json +0 -0
  646. /package/src/{tui → interfaces/tui}/context/theme/matrix.json +0 -0
  647. /package/src/{tui → interfaces/tui}/context/theme/mercury.json +0 -0
  648. /package/src/{tui → interfaces/tui}/context/theme/monokai.json +0 -0
  649. /package/src/{tui → interfaces/tui}/context/theme/nightowl.json +0 -0
  650. /package/src/{tui → interfaces/tui}/context/theme/nord.json +0 -0
  651. /package/src/{tui → interfaces/tui}/context/theme/one-dark.json +0 -0
  652. /package/src/{tui → interfaces/tui}/context/theme/opencode.json +0 -0
  653. /package/src/{tui → interfaces/tui}/context/theme/orng.json +0 -0
  654. /package/src/{tui → interfaces/tui}/context/theme/osaka-jade.json +0 -0
  655. /package/src/{tui → interfaces/tui}/context/theme/palenight.json +0 -0
  656. /package/src/{tui → interfaces/tui}/context/theme/rosepine.json +0 -0
  657. /package/src/{tui → interfaces/tui}/context/theme/solarized.json +0 -0
  658. /package/src/{tui → interfaces/tui}/context/theme/synthwave84.json +0 -0
  659. /package/src/{tui → interfaces/tui}/context/theme/tokyonight.json +0 -0
  660. /package/src/{tui → interfaces/tui}/context/theme/vercel.json +0 -0
  661. /package/src/{tui → interfaces/tui}/context/theme/vesper.json +0 -0
  662. /package/src/{tui → interfaces/tui}/context/theme/zenburn.json +0 -0
  663. /package/src/{tui → interfaces/tui}/context/theme.tsx +0 -0
  664. /package/src/{tui → interfaces/tui}/context/tui-config.tsx +0 -0
  665. /package/src/{tui → interfaces/tui}/event.ts +0 -0
  666. /package/src/{tui → interfaces/tui}/feature-plugins/home/footer.tsx +0 -0
  667. /package/src/{tui → interfaces/tui}/feature-plugins/home/tips-view.tsx +0 -0
  668. /package/src/{tui → interfaces/tui}/feature-plugins/home/tips.tsx +0 -0
  669. /package/src/{tui → interfaces/tui}/feature-plugins/sidebar/context.tsx +0 -0
  670. /package/src/{tui → interfaces/tui}/feature-plugins/sidebar/files.tsx +0 -0
  671. /package/src/{tui → interfaces/tui}/feature-plugins/sidebar/footer.tsx +0 -0
  672. /package/src/{tui → interfaces/tui}/feature-plugins/sidebar/lsp.tsx +0 -0
  673. /package/src/{tui → interfaces/tui}/feature-plugins/sidebar/mcp.tsx +0 -0
  674. /package/src/{tui → interfaces/tui}/feature-plugins/sidebar/todo.tsx +0 -0
  675. /package/src/{tui → interfaces/tui}/feature-plugins/system/plugins.tsx +0 -0
  676. /package/src/{tui → interfaces/tui}/feature-plugins/system/session-v2.tsx +0 -0
  677. /package/src/{tui → interfaces/tui}/feature-plugins/system/which-key.tsx +0 -0
  678. /package/src/{tui → interfaces/tui}/keymap.tsx +0 -0
  679. /package/src/{tui → interfaces/tui}/layer.ts +0 -0
  680. /package/src/{tui → interfaces/tui}/plugin/api.tsx +0 -0
  681. /package/src/{tui → interfaces/tui}/plugin/command-shim.ts +0 -0
  682. /package/src/{tui → interfaces/tui}/plugin/internal.ts +0 -0
  683. /package/src/{tui → interfaces/tui}/plugin/runtime.ts +0 -0
  684. /package/src/{tui → interfaces/tui}/plugin/slots.tsx +0 -0
  685. /package/src/{tui → interfaces/tui}/routes/home.tsx +0 -0
  686. /package/src/{tui → interfaces/tui}/routes/session/dialog-fork-from-timeline.tsx +0 -0
  687. /package/src/{tui → interfaces/tui}/routes/session/dialog-message.tsx +0 -0
  688. /package/src/{tui → interfaces/tui}/routes/session/dialog-subagent.tsx +0 -0
  689. /package/src/{tui → interfaces/tui}/routes/session/dialog-timeline.tsx +0 -0
  690. /package/src/{tui → interfaces/tui}/routes/session/footer.tsx +0 -0
  691. /package/src/{tui → interfaces/tui}/routes/session/permission.tsx +0 -0
  692. /package/src/{tui → interfaces/tui}/routes/session/question.tsx +0 -0
  693. /package/src/{tui → interfaces/tui}/routes/session/sidebar.tsx +0 -0
  694. /package/src/{tui → interfaces/tui}/routes/session/subagent-footer.tsx +0 -0
  695. /package/src/{tui → interfaces/tui}/run.ts +0 -0
  696. /package/src/{tui → interfaces/tui}/thread.ts +0 -0
  697. /package/src/{tui → interfaces/tui}/ui/dialog-alert.tsx +0 -0
  698. /package/src/{tui → interfaces/tui}/ui/dialog-confirm.tsx +0 -0
  699. /package/src/{tui → interfaces/tui}/ui/dialog-export-options.tsx +0 -0
  700. /package/src/{tui → interfaces/tui}/ui/dialog-help.tsx +0 -0
  701. /package/src/{tui → interfaces/tui}/ui/dialog-prompt.tsx +0 -0
  702. /package/src/{tui → interfaces/tui}/ui/dialog-select.tsx +0 -0
  703. /package/src/{tui → interfaces/tui}/ui/dialog.tsx +0 -0
  704. /package/src/{tui → interfaces/tui}/ui/link.tsx +0 -0
  705. /package/src/{tui → interfaces/tui}/ui/spinner.ts +0 -0
  706. /package/src/{tui → interfaces/tui}/ui/toast.tsx +0 -0
  707. /package/src/{tui → interfaces/tui}/util/editor.ts +0 -0
  708. /package/src/{tui → interfaces/tui}/util/model.ts +0 -0
  709. /package/src/{tui → interfaces/tui}/util/provider-origin.ts +0 -0
  710. /package/src/{tui → interfaces/tui}/util/revert-diff.ts +0 -0
  711. /package/src/{tui → interfaces/tui}/util/scroll.ts +0 -0
  712. /package/src/{tui → interfaces/tui}/util/selection.ts +0 -0
  713. /package/src/{tui → interfaces/tui}/util/signal.ts +0 -0
  714. /package/src/{tui → interfaces/tui}/util/sound.ts +0 -0
  715. /package/src/{tui → interfaces/tui}/util/transcript.ts +0 -0
  716. /package/src/{tui → interfaces/tui}/validate-session.ts +0 -0
  717. /package/src/{tui → interfaces/tui}/win32.ts +0 -0
  718. /package/src/{tui → interfaces/tui}/worker.ts +0 -0
@@ -15,11 +15,13 @@ import { execFile } from "node:child_process";
15
15
  import os from "node:os";
16
16
  import fs from "node:fs";
17
17
  import path from "node:path";
18
- import { callEngine } from "./engines/index.js";
18
+ import { callEngine } from "../../core/engines/index.js";
19
19
  import { runSuperAgent } from "./super-agent.js";
20
- import { readAgents } from "../core/parser.js";
21
- import { buildAgentSystem } from "../core/agent-system.js";
22
- import { resolveArtifactRef, ARTIFACTS_SKIP_SIGNAL } from "../core/artifacts-store.js";
20
+ import { computeSuppressedTools } from "../../core/agent/index.js";
21
+ import { readAgents } from "../../core/parser.js";
22
+ import { buildAgentSystem } from "../../core/agent-system.js";
23
+ import { resolveAgentName, SUPERAGENT_ACTOR_ID } from "../../core/identity.js";
24
+ import { resolveArtifactRef, ARTIFACTS_SKIP_SIGNAL } from "../../core/artifacts-store.js";
23
25
  import {
24
26
  listRoutines,
25
27
  getRoutine,
@@ -30,7 +32,7 @@ import {
30
32
  getDueRoutines,
31
33
  parseSchedule,
32
34
  computeNextRun,
33
- } from "../core/routines-store.js";
35
+ } from "../../core/routines-store.js";
34
36
 
35
37
  export {
36
38
  listRoutines,
@@ -91,6 +93,7 @@ async function handleExecAgent(ctx, routine) {
91
93
  direction: "out",
92
94
  type: "agent",
93
95
  actor_id: slug,
96
+ actor_kind: "agent",
94
97
  author: slug,
95
98
  body: result.text,
96
99
  meta: { routine: routine.name, usage: result.usage },
@@ -110,21 +113,37 @@ async function handleSuperAgent(ctx, routine) {
110
113
  ...(Array.isArray(routine.allowed_tools) ? { allowed_tools: routine.allowed_tools } : {}),
111
114
  };
112
115
 
116
+ // Auto-suppress tools whose output would duplicate post_commands.
117
+ // Example: a routine with `apx telegram send "$APX_LLM_OUTPUT"` in post_commands
118
+ // shouldn't also let the agent call send_telegram inside the loop.
119
+ // See spec/backlog/01-routine-output-coherence.md.
120
+ const autoSuppress = computeSuppressedTools(routine.post_commands);
121
+ const explicitSuppress = Array.isArray(routine.spec?.suppress_tools)
122
+ ? routine.spec.suppress_tools.filter((s) => typeof s === "string")
123
+ : [];
124
+ const suppressTools = [...new Set([...autoSuppress, ...explicitSuppress])];
125
+
113
126
  const result = await runSuperAgent({
114
127
  globalConfig: cfg,
115
128
  projects,
116
129
  plugins,
117
130
  registries,
118
131
  prompt,
119
- contextNote: `You were invoked by APX routine "${routine.name}" in project ${project.path}. This is an autonomous scheduled run, not an interactive Telegram reply.`,
132
+ channel: "routine",
133
+ channelMeta: {
134
+ routineName: routine.name,
135
+ projectPath: project.path,
136
+ },
137
+ suppressTools: suppressTools.length > 0 ? suppressTools : null,
120
138
  });
121
139
 
122
140
  project.logMessage({
123
141
  channel: "routine",
124
142
  direction: "out",
125
143
  type: "agent",
126
- actor_id: result.name || "super_agent",
127
- author: result.name || "super_agent",
144
+ actor_id: SUPERAGENT_ACTOR_ID,
145
+ actor_kind: "superagent",
146
+ author: result.name || resolveAgentName(globalConfig),
128
147
  body: result.text || "",
129
148
  meta: { routine: routine.name, tool_trace: result.trace, usage: result.usage },
130
149
  });
@@ -21,7 +21,7 @@
21
21
  // but the bundled copy stays in the package as a safety net.
22
22
  //
23
23
  // Note: the bundled `apc-context` skill is REFRESHED from the canonical apc
24
- // repo on every npm install / update (see src/cli/postinstall.js). APC is a
24
+ // repo on every npm install / update (see src/interfaces/cli/postinstall.js). APC is a
25
25
  // living standard, so its skill content is not pinned to an apx version.
26
26
 
27
27
  import fs from "node:fs";
@@ -31,7 +31,9 @@ import { fileURLToPath } from "node:url";
31
31
 
32
32
  const __filename = fileURLToPath(import.meta.url);
33
33
  const __dirname = path.dirname(__filename);
34
- const PACKAGE_ROOT = path.resolve(__dirname, "..", "..");
34
+ // Three levels up: __dirname = src/host/daemon/ → src/host/ → src/ → repo root.
35
+ // Used to find the bundled skills/ folder at the repo root.
36
+ const PACKAGE_ROOT = path.resolve(__dirname, "..", "..", "..");
35
37
 
36
38
  const RUNTIME_SKILLS_DIR = path.join(PACKAGE_ROOT, "src", "core", "runtime-skills");
37
39
  const BUNDLED_SKILLS_DIR = path.join(PACKAGE_ROOT, "skills");
@@ -8,15 +8,19 @@ import path from "node:path";
8
8
  import fs from "node:fs";
9
9
  import { fileURLToPath } from "node:url";
10
10
  import { ProjectManager } from "./db.js";
11
- import { McpRegistry } from "./mcp-runner.js";
12
- import { readAgents } from "../core/parser.js";
11
+ import { McpRegistry } from "../../core/mcp/runner.js";
12
+ import { readAgents } from "../../core/parser.js";
13
13
 
14
14
  const __filename = fileURLToPath(import.meta.url);
15
15
  const __dirname = path.dirname(__filename);
16
16
 
17
+ // Smoke now lives at src/host/daemon/smoke.js — one level deeper than the
18
+ // legacy src/daemon/smoke.js. Adjust the example-project lookup accordingly:
19
+ // ../../../examples/my-first-project ← repo-local examples (if any)
20
+ // ../../../../apc/examples/my-first-project ← sibling apc/ repo
17
21
  const EXAMPLE_CANDIDATES = [
18
- path.resolve(__dirname, "..", "..", "examples", "my-first-project"),
19
- path.resolve(__dirname, "..", "..", "..", "apc", "examples", "my-first-project"),
22
+ path.resolve(__dirname, "..", "..", "..", "examples", "my-first-project"),
23
+ path.resolve(__dirname, "..", "..", "..", "..", "apc", "examples", "my-first-project"),
20
24
  ];
21
25
  const EXAMPLE = EXAMPLE_CANDIDATES.find((p) =>
22
26
  fs.existsSync(path.join(p, "AGENTS.md")) &&
@@ -49,7 +53,7 @@ const sofiaSessions = (() => {
49
53
  })();
50
54
  console.log("sofia sessions:", sofiaSessions);
51
55
 
52
- const reg = new McpRegistry(entry.path);
56
+ const reg = new McpRegistry({ projectPath: entry.path, storagePath: entry.storagePath });
53
57
  const list = reg.list();
54
58
  console.log("mcps:", list.map((m) => `${m.name} (${m.source})`));
55
59
  assert(list.find((m) => m.name === "filesystem" && m.source === "apc"), "filesystem MCP missing");
@@ -1,5 +1,5 @@
1
1
  import path from "node:path";
2
- import { agentSkills, buildAgentSystem as buildCoreAgentSystem } from "../../core/agent-system.js";
2
+ import { agentSkills, buildAgentSystem as buildCoreAgentSystem } from "../../../core/agent-system.js";
3
3
 
4
4
  export function projectMeta(projects, entry) {
5
5
  const meta = projects.list().find((p) => p.id === entry.id);
@@ -0,0 +1,157 @@
1
+ import listProjects from "./tools/list-projects.js";
2
+ import listAgents from "./tools/list-agents.js";
3
+ import listVaultAgents from "./tools/list-vault-agents.js";
4
+ import importAgent from "./tools/import-agent.js";
5
+ import addProject from "./tools/add-project.js";
6
+ import listMcps from "./tools/list-mcps.js";
7
+ import readAgentMemory from "./tools/read-agent-memory.js";
8
+ import remember from "./tools/remember.js";
9
+ import readSelfMemory from "./tools/read-self-memory.js";
10
+ import listFiles from "./tools/list-files.js";
11
+ import readFile from "./tools/read-file.js";
12
+ import writeFile from "./tools/write-file.js";
13
+ import editFile from "./tools/edit-file.js";
14
+ import runShell from "./tools/run-shell.js";
15
+ import tailMessages from "./tools/tail-messages.js";
16
+ import searchMessages from "./tools/search-messages.js";
17
+ import searchSessions from "./tools/search-sessions.js";
18
+ import callAgent from "./tools/call-agent.js";
19
+ import callMcp from "./tools/call-mcp.js";
20
+ import callRuntime from "./tools/call-runtime.js";
21
+ import sendTelegram from "./tools/send-telegram.js";
22
+ import setIdentity from "./tools/set-identity.js";
23
+ import setPermissionMode from "./tools/set-permission-mode.js";
24
+ import searchFiles from "./tools/search-files.js";
25
+ import listSkills from "./tools/list-skills.js";
26
+ import loadSkill from "./tools/load-skill.js";
27
+ import transcribeAudio from "./tools/transcribe-audio.js";
28
+ import askQuestions from "./tools/ask-questions.js";
29
+ import createTask from "./tools/create-task.js";
30
+ import listTasks from "./tools/list-tasks.js";
31
+ import { createPermissionGuard } from "./helpers.js";
32
+ import { buildBridgedTools, DEFAULT_CATEGORIES } from "./registry-bridge.js";
33
+
34
+ const NATIVE_TOOLS = [
35
+ listProjects,
36
+ listAgents,
37
+ listVaultAgents,
38
+ importAgent,
39
+ addProject,
40
+ listMcps,
41
+ readAgentMemory,
42
+ remember,
43
+ readSelfMemory,
44
+ listFiles,
45
+ readFile,
46
+ writeFile,
47
+ editFile,
48
+ runShell,
49
+ tailMessages,
50
+ searchMessages,
51
+ searchSessions,
52
+ callAgent,
53
+ callMcp,
54
+ callRuntime,
55
+ sendTelegram,
56
+ setIdentity,
57
+ setPermissionMode,
58
+ searchFiles,
59
+ listSkills,
60
+ loadSkill,
61
+ transcribeAudio,
62
+ askQuestions,
63
+ createTask,
64
+ listTasks,
65
+ ];
66
+
67
+ // Registry-backed bridges. Categories can be overridden per-process via env
68
+ // APX_BRIDGE_CATEGORIES (comma-separated), e.g. "browser,fetch,search".
69
+ // Default: browser, fetch, search, glob, grep (see registry-bridge.js).
70
+ function resolveBridgeCategories() {
71
+ const env = (process.env.APX_BRIDGE_CATEGORIES || "").trim();
72
+ if (!env) return DEFAULT_CATEGORIES;
73
+ return new Set(env.split(",").map(s => s.trim()).filter(Boolean));
74
+ }
75
+
76
+ const BRIDGED_TOOLS = buildBridgedTools({ categories: resolveBridgeCategories() });
77
+ const TOOLS = [...NATIVE_TOOLS, ...BRIDGED_TOOLS];
78
+
79
+ export const TOOL_SCHEMAS = TOOLS.map((tool) => tool.schema);
80
+
81
+ // "Core" tools always sent to the model. The rest are pulled in on-demand via
82
+ // load_skill or by switching to a heavier channel. Picked to fit cheap cloud
83
+ // tiers: full TOOL_SCHEMAS is ~22 KB / ~5.5 K tokens — too much when Groq
84
+ // free tier caps you at 6-12 K TPM. CORE_TOOL_NAMES is ~3 KB / ~700 tokens.
85
+ // See spec/done/backlog item 12 for the underlying motivation.
86
+ const CORE_TOOL_NAMES = new Set([
87
+ // Inventory — the model NEEDS to call these to know what's there.
88
+ "list_projects",
89
+ "list_agents",
90
+ "list_mcps",
91
+ "list_skills",
92
+ // Memory + identity — used during identity / config conversations.
93
+ "read_agent_memory",
94
+ "set_identity",
95
+ // Self-memory: jot durable facts so they survive across sessions.
96
+ "remember",
97
+ // Self-recall: "what did we do / last session" must work on every channel.
98
+ "search_sessions",
99
+ // Conversation control.
100
+ "ask_questions",
101
+ // On-demand expansion: this is how the model loads the rest of the surface.
102
+ "load_skill",
103
+ // Channels the user expects out of any super-agent turn.
104
+ "send_telegram",
105
+ // Lightweight delegation (no spawn).
106
+ "call_agent",
107
+ // Routine creation (very common ask via chat).
108
+ "create_task",
109
+ "list_tasks",
110
+ ]);
111
+
112
+ export const CORE_TOOL_SCHEMAS = TOOLS
113
+ .filter((t) => CORE_TOOL_NAMES.has(t.name))
114
+ .map((t) => t.schema);
115
+
116
+ /**
117
+ * Choose the tool schema list for a given channel. Telegram / desktop / api
118
+ * (chit-chat) get the "core" subset to stay under cheap-tier TPM limits;
119
+ * routines get the full list because they're deliberate, scheduled, and the
120
+ * user has chosen the model. Override with the explicit `full: true` opt.
121
+ */
122
+ export function schemasForChannel(channel, { full = false } = {}) {
123
+ if (full) return TOOL_SCHEMAS;
124
+ // Full registry for deliberate, local surfaces running on a user-picked model
125
+ // (not subject to the cheap-tier TPM caps that motivate the "core" subset):
126
+ // routine — scheduled/autonomous · api — generic HTTP / `apx exec`
127
+ // web — the big web chat (long-form workspace)
128
+ // code — the web Code module (needs read/write/edit/run_shell/grep/glob)
129
+ // terminal — the `apx code`/`apx sys` TUI: same coding surface as web Code,
130
+ // so it needs the full read/write/edit/run_shell registry too.
131
+ if (
132
+ channel === "routine" ||
133
+ channel === "api" ||
134
+ channel === "web" ||
135
+ channel === "code" ||
136
+ channel === "terminal"
137
+ )
138
+ return TOOL_SCHEMAS;
139
+ // Lightweight surfaces stay on the small subset to fit cheap cloud TPM limits
140
+ // and keep replies snappy: telegram, web_sidebar, deck, desktop.
141
+ return CORE_TOOL_SCHEMAS;
142
+ }
143
+
144
+ export function makeToolHandlers(ctx) {
145
+ const toolCtx = {
146
+ ...ctx,
147
+ requirePermission: createPermissionGuard(ctx.globalConfig || {}, {
148
+ implicitConfirmation: !!ctx.implicitConfirmation,
149
+ }),
150
+ };
151
+ return Object.fromEntries(TOOLS.map((tool) => [tool.name, tool.makeHandler(toolCtx)]));
152
+ }
153
+
154
+ // Diagnostic helper — useful for `apx daemon status` or debug logging.
155
+ export function listBridgedToolNames() {
156
+ return BRIDGED_TOOLS.map(t => t.name);
157
+ }
@@ -18,7 +18,7 @@
18
18
  // Net result: adding a tool = adding one entry to registry.js. No file in
19
19
  // super-agent-tools/tools/, no import in index.js.
20
20
 
21
- import { TOOL_DEFINITIONS } from "../tools/registry.js";
21
+ import { TOOL_DEFINITIONS } from "../../../core/tools/registry.js";
22
22
 
23
23
  // Native handlers in super-agent-tools/tools/ that own these names. The bridge
24
24
  // MUST skip them or the registry version (HTTP roundtrip) would shadow the
@@ -1,7 +1,7 @@
1
1
  import fs from "node:fs";
2
2
  import path from "node:path";
3
- import { readConfig, addProject as addProjectInConfig } from "../../../core/config.js";
4
- import { initApf } from "../../../core/scaffold.js";
3
+ import { readConfig, addProject as addProjectInConfig } from "../../../../core/config.js";
4
+ import { initApf } from "../../../../core/scaffold.js";
5
5
  import { confirmedProperty, projectMeta } from "../helpers.js";
6
6
 
7
7
  function isApcProject(absPath) {
@@ -1,6 +1,10 @@
1
1
  export default {
2
2
  name: "ask_questions",
3
3
  schema: {
4
+ // type: "function" is REQUIRED at the top level — OpenAI and Groq reject
5
+ // schemas without it (Groq → 400 'tools.N.type': property 'type' is missing).
6
+ // Anthropic / Ollama tolerate its absence but the contract is clearer with it.
7
+ type: "function",
4
8
  function: {
5
9
  name: "ask_questions",
6
10
  description: "Ask the user one or more specific questions to clarify the task or gather requirements.",
@@ -1,5 +1,5 @@
1
- import { callEngine } from "../../engines/index.js";
2
- import { readAgents } from "../../../core/parser.js";
1
+ import { callEngine } from "../../../../core/engines/index.js";
2
+ import { readAgents } from "../../../../core/parser.js";
3
3
  import { buildAgentSystem, resolveProject } from "../helpers.js";
4
4
 
5
5
  export default {
@@ -39,6 +39,9 @@ export default {
39
39
  agent_slug: slug,
40
40
  channel: "engine",
41
41
  direction: "out",
42
+ type: "agent",
43
+ actor_id: slug,
44
+ actor_kind: "agent",
42
45
  author: slug,
43
46
  body: result.text,
44
47
  meta: { invoked_by: "super_agent_tool", usage: result.usage },
@@ -1,6 +1,7 @@
1
1
  import fs from "node:fs";
2
2
  import path from "node:path";
3
- import { readAgents } from "../../../core/parser.js";
3
+ import { loggerFor } from "../../../../core/logging.js";
4
+ import { readAgents } from "../../../../core/parser.js";
4
5
  import {
5
6
  buildApfHint,
6
7
  closeRuntimeSession,
@@ -8,10 +9,65 @@ import {
8
9
  extractApfResult,
9
10
  } from "../../apc-runtime-context.js";
10
11
  import { detectAll } from "../../env-detect.js";
12
+ import {
13
+ findEngineSessionById,
14
+ readEngineSessionContext,
15
+ } from "../../engine-sessions.js";
11
16
  import { runProcess } from "../../runtimes/_spawn.js";
12
17
  import { getRuntime, RUNTIME_IDS } from "../../runtimes/index.js";
13
18
  import { buildAgentSystem, confirmedProperty, resolveProject } from "../helpers.js";
14
19
 
20
+ const log = loggerFor("call_runtime");
21
+
22
+ // Decide if the runtime actually did the work the model asked for. A spawn
23
+ // failure (-1), a non-zero exit, or a clean exit with no captured output and
24
+ // no transcript path all point at "process didn't really run" — exactly the
25
+ // false-positive scenario this guard exists to catch.
26
+ function runtimeLooksLikeFailure(r) {
27
+ if (!r) return { failed: true, reason: "no runtime result" };
28
+ if (r.exitCode === -1 || r.error) {
29
+ return { failed: true, reason: r.error || "spawn error" };
30
+ }
31
+ if (typeof r.exitCode === "number" && r.exitCode !== 0) {
32
+ return { failed: true, reason: `exit ${r.exitCode}` };
33
+ }
34
+ if (r.killed) return { failed: true, reason: "killed (timeout)" };
35
+ const out = String(r.output || "").trim();
36
+ const stderr = String(r.stderr || "").trim();
37
+ if (!out && !r.externalSessionPath && !r.sessionId) {
38
+ return {
39
+ failed: true,
40
+ reason: stderr ? `empty output (stderr: ${stderr.slice(0, 120)})` : "empty output",
41
+ };
42
+ }
43
+ return { failed: false };
44
+ }
45
+
46
+ // If the model passed resume_session_id, look the session up (claude / codex /
47
+ // apx) and prepend a tiny context block so the runtime knows what the prior
48
+ // session was about. The model's prompt still wins; this is preamble only.
49
+ function buildResumePreamble(sessionId) {
50
+ if (!sessionId) return { text: "", meta: null };
51
+ let meta;
52
+ try {
53
+ meta = findEngineSessionById(sessionId);
54
+ } catch {
55
+ return { text: "", meta: null };
56
+ }
57
+ if (!meta) return { text: "", meta: null };
58
+ const ctx = readEngineSessionContext(meta);
59
+ const title = ctx?.title || meta.title || null;
60
+ const lastPrompt = ctx?.lastPrompt || null;
61
+ if (!title && !lastPrompt) return { text: "", meta };
62
+ const parts = [
63
+ `## Context from prior session (${meta.engine}:${meta.id})`,
64
+ ];
65
+ if (title) parts.push(`Title: ${title}`);
66
+ if (lastPrompt) parts.push(`Last prompt: ${lastPrompt}`);
67
+ parts.push("---");
68
+ return { text: parts.join("\n") + "\n\n", meta };
69
+ }
70
+
15
71
  function resolveProjectForAgent(projects, project, slug) {
16
72
  if (project) return resolveProject(projects, project);
17
73
 
@@ -106,6 +162,10 @@ export default {
106
162
  description: "external CLI runtime",
107
163
  },
108
164
  prompt: { type: "string" },
165
+ resume_session_id: {
166
+ type: "string",
167
+ description: "Optional prior session id (claude/codex/apx) — APX prepends that session's title + last prompt to the prompt so the runtime has context.",
168
+ },
109
169
  timeout_s: { type: "integer", description: "seconds before SIGTERM; default 300" },
110
170
  confirmed: confirmedProperty("true only after explicit user confirmation for this exact runtime command"),
111
171
  },
@@ -113,7 +173,7 @@ export default {
113
173
  },
114
174
  },
115
175
  },
116
- makeHandler: ({ projects, requirePermission }) => async ({ project, agent: slug, runtime, prompt, timeout_s = 300, confirmed = false }) => {
176
+ makeHandler: ({ projects, requirePermission }) => async ({ project, agent: slug, runtime, prompt, resume_session_id = null, timeout_s = 300, confirmed = false }) => {
117
177
  requirePermission("call_runtime", { dangerous: true, confirmed });
118
178
 
119
179
  const p = slug ? resolveProjectForAgent(projects, project, slug) : resolveProject(projects, project);
@@ -157,20 +217,33 @@ export default {
157
217
  title: `Runtime: ${runtime}${agent ? ` (${agent.slug})` : ""}`,
158
218
  });
159
219
 
220
+ const resume = buildResumePreamble(resume_session_id);
221
+ const effectivePrompt = resume.text ? resume.text + prompt : prompt;
222
+
223
+ log.info(`spawn ${runtime}`, {
224
+ apc_session: session.id,
225
+ agent: actor,
226
+ project: p.path,
227
+ resume_session_id: resume_session_id || null,
228
+ resume_resolved: resume.meta ? `${resume.meta.engine}:${resume.meta.id}` : null,
229
+ timeout_s,
230
+ });
231
+
160
232
  try {
161
233
  const r = await rt.run({
162
234
  system: buildRuntimeSystem(p, agent, runtime, session.id, "super_agent_tool"),
163
- prompt,
235
+ prompt: effectivePrompt,
164
236
  cwd: p.path,
165
237
  timeoutMs: timeout_s * 1000,
166
238
  });
167
239
 
240
+ const failure = runtimeLooksLikeFailure(r);
168
241
  const result = extractApfResult(r.output) || (r.output || "").slice(0, 200);
169
242
  closeRuntimeSession({
170
243
  filePath: session.path,
171
244
  externalSessionPath: r.externalSessionPath || null,
172
- exitCode: r.exitCode,
173
- result,
245
+ exitCode: failure.failed && r.exitCode === 0 ? -1 : r.exitCode,
246
+ result: failure.failed ? `failed: ${failure.reason}` : result,
174
247
  });
175
248
 
176
249
  p.logMessage({
@@ -178,14 +251,17 @@ export default {
178
251
  channel: "runtime",
179
252
  direction: "in",
180
253
  author: "user",
181
- body: prompt,
182
- meta: { runtime, invoked_by: "super_agent_tool", apc_session: session.id },
254
+ body: effectivePrompt,
255
+ meta: { runtime, invoked_by: "super_agent_tool", apc_session: session.id, resume_session_id: resume_session_id || null },
183
256
  });
184
257
  p.logMessage({
185
258
  agent_slug: actor,
186
259
  channel: "runtime",
187
260
  direction: "out",
188
- author: actor,
261
+ type: "agent",
262
+ actor_id: agent?.slug || runtime,
263
+ actor_kind: agent?.slug ? "agent" : "engine",
264
+ author: agent?.slug || runtime,
189
265
  body: r.output || "",
190
266
  meta: {
191
267
  runtime,
@@ -194,9 +270,39 @@ export default {
194
270
  session_id: r.sessionId || null,
195
271
  apc_session: session.id,
196
272
  invoked_by: "super_agent_tool",
273
+ failed: failure.failed || false,
274
+ failure_reason: failure.failed ? failure.reason : null,
197
275
  },
198
276
  });
199
277
 
278
+ if (failure.failed) {
279
+ log.error(`${runtime} run failed: ${failure.reason}`, {
280
+ apc_session: session.id,
281
+ exit_code: r.exitCode,
282
+ stderr: String(r.stderr || "").slice(0, 500),
283
+ external_session_path: r.externalSessionPath || null,
284
+ });
285
+ return {
286
+ error: `runtime "${runtime}" did not complete successfully: ${failure.reason}`,
287
+ runtime,
288
+ agent: agent?.slug || null,
289
+ apc_session: session.id,
290
+ exit_code: r.exitCode,
291
+ stderr: (r.stderr || "").slice(0, 2000),
292
+ output: (r.output || "").slice(0, 2000),
293
+ external_session_path: r.externalSessionPath || null,
294
+ session_id: r.sessionId || null,
295
+ };
296
+ }
297
+
298
+ log.info(`${runtime} run ok`, {
299
+ apc_session: session.id,
300
+ exit_code: r.exitCode,
301
+ external_session_path: r.externalSessionPath || null,
302
+ session_id: r.sessionId || null,
303
+ output_bytes: (r.output || "").length,
304
+ });
305
+
200
306
  return {
201
307
  runtime,
202
308
  agent: agent?.slug || null,
@@ -209,6 +315,9 @@ export default {
209
315
  session_id: r.sessionId || null,
210
316
  };
211
317
  } catch (e) {
318
+ log.error(`${runtime} run threw: ${e.message}`, {
319
+ apc_session: session.id,
320
+ });
212
321
  try {
213
322
  closeRuntimeSession({
214
323
  filePath: session.path,
@@ -0,0 +1,52 @@
1
+ import { createTask } from "../../../../core/tasks-store.js";
2
+
3
+ export default {
4
+ name: "create_task",
5
+ schema: {
6
+ type: "function",
7
+ function: {
8
+ name: "create_task",
9
+ description:
10
+ "Create a TODO task in a project. Use when the user asks you to remember something to do later, take note of a follow-up, or track a pending item. Project resolves by id, name or absolute path — call list_projects first if unsure.",
11
+ parameters: {
12
+ type: "object",
13
+ required: ["project", "title"],
14
+ properties: {
15
+ project: { type: "string", description: "Project id, name, or path." },
16
+ title: { type: "string", description: "Short imperative title for the task." },
17
+ body: { type: "string", description: "Optional longer description." },
18
+ tags: { type: "array", items: { type: "string" }, description: "Optional tags." },
19
+ due: { type: "string", description: "Optional ISO date (YYYY-MM-DD) the task is due by." },
20
+ agent: { type: "string", description: "Optional agent slug responsible for the task." },
21
+ source: { type: "string", description: "Where the task came from (telegram, desktop, …). Defaults to the calling channel." },
22
+ },
23
+ },
24
+ },
25
+ },
26
+ makeHandler: ({ projects }) => async ({ project: ref, title, body, tags, due, agent, source }) => {
27
+ if (!ref) return { error: "project required" };
28
+ if (!title) return { error: "title required" };
29
+ const all = projects.list();
30
+ const r = String(ref);
31
+ const found = all.find((p) =>
32
+ String(p.id) === r || p.name === r || p.path === r
33
+ );
34
+ if (!found) return { error: `project not found: ${ref}` };
35
+ const proj = projects.get(found.id);
36
+ if (!proj) return { error: `project storage not loaded: ${ref}` };
37
+ const task = createTask(proj.storagePath, {
38
+ title,
39
+ body: body || null,
40
+ tags: Array.isArray(tags) ? tags : [],
41
+ due: due || null,
42
+ agent: agent || null,
43
+ source: source || "super-agent",
44
+ });
45
+ return {
46
+ id: task.id,
47
+ project: { id: proj.id, name: proj.name },
48
+ title: task.title,
49
+ state: task.state,
50
+ };
51
+ },
52
+ };
@@ -1,7 +1,7 @@
1
1
  import fs from "node:fs";
2
2
  import path from "node:path";
3
- import { readVaultAgents, VAULT_DIR } from "../../../core/parser.js";
4
- import { addImportedAgent, ensureAgentDir, regenerateAgentsMd } from "../../../core/scaffold.js";
3
+ import { readVaultAgents, VAULT_DIR } from "../../../../core/parser.js";
4
+ import { addImportedAgent, ensureAgentDir } from "../../../../core/scaffold.js";
5
5
  import { confirmedProperty, projectMeta, resolveProject } from "../helpers.js";
6
6
 
7
7
  export default {
@@ -35,7 +35,6 @@ export default {
35
35
  const p = resolveProject(projects, project || "default");
36
36
  addImportedAgent(p.path, slug);
37
37
  ensureAgentDir(p.path, slug);
38
- regenerateAgentsMd(p.path);
39
38
  projects.rebuild(p.id);
40
39
 
41
40
  return {
@@ -1,4 +1,4 @@
1
- import { readAgents } from "../../../core/parser.js";
1
+ import { readAgents } from "../../../../core/parser.js";
2
2
  import { agentRow, resolveProject } from "../helpers.js";
3
3
 
4
4
  export default {