@agentprojectcontext/apx 1.24.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.
- package/package.json +42 -12
- package/skills/apx/SKILL.md +50 -119
- package/skills/apx-agency-agents/SKILL.md +141 -0
- package/skills/apx-agent/SKILL.md +100 -0
- package/skills/apx-mcp/SKILL.md +114 -0
- package/skills/apx-mcp-builder/SKILL.md +186 -0
- package/skills/apx-project/SKILL.md +100 -0
- package/skills/apx-routine/SKILL.md +138 -0
- package/skills/apx-runtime/SKILL.md +115 -0
- package/skills/apx-sessions/SKILL.md +281 -0
- package/skills/apx-skill-builder/SKILL.md +149 -0
- package/skills/apx-task/SKILL.md +95 -0
- package/skills/apx-telegram/SKILL.md +115 -0
- package/skills/apx-voice/SKILL.md +135 -0
- package/src/core/agent/constants.js +3 -0
- package/src/core/agent/ghost-guard.js +24 -0
- package/src/core/agent/index.js +35 -0
- package/src/core/agent/model-router.js +257 -0
- package/src/core/agent/prompt-builder.js +313 -0
- package/src/core/agent/prompts/channels/api.md +7 -0
- package/src/core/agent/prompts/channels/cli.md +6 -0
- package/src/core/agent/prompts/channels/code.md +20 -0
- package/src/core/agent/prompts/channels/deck.md +6 -0
- package/src/core/agent/prompts/channels/desktop.md +24 -0
- package/src/core/agent/prompts/channels/routine.md +9 -0
- package/src/core/agent/prompts/channels/telegram.md +9 -0
- package/src/core/agent/prompts/channels/terminal.md +16 -0
- package/src/core/agent/prompts/channels/web.md +7 -0
- package/src/core/agent/prompts/channels/web_sidebar.md +7 -0
- package/src/core/agent/prompts/modes/voice.md +4 -0
- package/src/core/agent/prompts/super-agent-base.md +42 -0
- package/src/core/agent/pseudo-tools.js +40 -0
- package/src/core/agent/retry.js +85 -0
- package/src/core/agent/run-agent.js +423 -0
- package/src/core/agent/self-memory.js +155 -0
- package/src/{daemon → core/agent}/tool-call-parser.js +83 -10
- package/src/core/agent/tools-overlap.js +66 -0
- package/src/core/apc-skill-sync.js +97 -0
- package/src/core/code-sessions-store.js +150 -0
- package/src/core/config.js +473 -11
- package/src/core/desktop/autostart.js +162 -0
- package/src/core/engines/_health.js +63 -0
- package/src/{daemon → core}/engines/anthropic.js +16 -0
- package/src/core/engines/gemini.js +168 -0
- package/src/core/engines/groq.js +8 -0
- package/src/{daemon → core}/engines/index.js +3 -1
- package/src/{daemon → core}/engines/mock.js +22 -0
- package/src/{daemon → core}/engines/ollama.js +35 -0
- package/src/core/engines/openai-compatible.js +145 -0
- package/src/core/engines/openai.js +8 -0
- package/src/core/engines/openrouter.js +8 -0
- package/src/core/git-baseline.js +147 -0
- package/src/core/identity.js +21 -0
- package/src/core/logging.js +1 -1
- package/src/core/mcp/index.js +14 -0
- package/src/{daemon/mcp-runner.js → core/mcp/runner.js} +18 -6
- package/src/core/mcp/sources.js +246 -0
- package/src/core/memory/active-threads.js +124 -0
- package/src/core/memory/broker.js +144 -0
- package/src/core/memory/compactor.js +186 -0
- package/src/core/memory/embed-engines/gemini.js +62 -0
- package/src/core/memory/embed-engines/index.js +148 -0
- package/src/core/memory/embed-engines/ollama.js +55 -0
- package/src/core/memory/embed-engines/openai.js +64 -0
- package/src/core/memory/embed-engines/tf.js +20 -0
- package/src/core/memory/embeddings.js +132 -0
- package/src/core/memory/index.js +161 -0
- package/src/core/memory/indexer.js +257 -0
- package/src/core/memory/store.js +231 -0
- package/src/core/messages-store.js +143 -25
- package/src/core/parser.js +78 -16
- package/src/core/scaffold.js +175 -79
- package/src/core/tasks-store.js +264 -0
- package/src/core/telegram-identity.js +126 -0
- package/src/core/tools/index.js +6 -0
- package/src/core/voice/engines/elevenlabs.js +96 -0
- package/src/core/voice/engines/gemini.js +148 -0
- package/src/core/voice/engines/index.js +144 -0
- package/src/core/voice/engines/mock.js +59 -0
- package/src/core/voice/engines/openai.js +82 -0
- package/src/core/voice/engines/piper.js +93 -0
- package/src/core/voice/index.js +3 -0
- package/src/core/voice/tts.js +89 -0
- package/src/{daemon → host/daemon}/apc-runtime-context.js +1 -1
- package/src/host/daemon/api/admin-config.js +159 -0
- package/src/host/daemon/api/admin.js +72 -0
- package/src/host/daemon/api/agents.js +284 -0
- package/src/host/daemon/api/artifacts.js +52 -0
- package/src/host/daemon/api/code.js +351 -0
- package/src/host/daemon/api/config.js +104 -0
- package/src/host/daemon/api/connections.js +42 -0
- package/src/host/daemon/api/conversations.js +161 -0
- package/src/host/daemon/api/deck.js +511 -0
- package/src/host/daemon/api/desktop.js +71 -0
- package/src/host/daemon/api/embeddings.js +65 -0
- package/src/host/daemon/api/engines.js +80 -0
- package/src/host/daemon/api/exec.js +193 -0
- package/src/host/daemon/api/health.js +10 -0
- package/src/host/daemon/api/identity.js +36 -0
- package/src/host/daemon/api/mcps.js +205 -0
- package/src/host/daemon/api/messages.js +83 -0
- package/src/host/daemon/api/pairing.js +194 -0
- package/src/host/daemon/api/plugins.js +19 -0
- package/src/host/daemon/api/projects.js +35 -0
- package/src/host/daemon/api/routines.js +84 -0
- package/src/host/daemon/api/run.js +55 -0
- package/src/host/daemon/api/runtimes.js +219 -0
- package/src/host/daemon/api/sessions-search.js +177 -0
- package/src/host/daemon/api/sessions.js +115 -0
- package/src/host/daemon/api/shared.js +217 -0
- package/src/host/daemon/api/super-agent.js +208 -0
- package/src/host/daemon/api/tasks.js +118 -0
- package/src/host/daemon/api/telegram.js +325 -0
- package/src/host/daemon/api/tools.js +21 -0
- package/src/host/daemon/api/top-level.js +131 -0
- package/src/host/daemon/api/transcribe.js +35 -0
- package/src/host/daemon/api/tts.js +44 -0
- package/src/host/daemon/api/voice.js +519 -0
- package/src/host/daemon/api/web.js +123 -0
- package/src/host/daemon/api.js +152 -0
- package/src/{daemon → host/daemon}/compact.js +1 -1
- package/src/{daemon → host/daemon}/db.js +19 -5
- package/src/{daemon/overlay-ws.js → host/daemon/desktop-ws.js} +7 -7
- package/src/host/daemon/engine-sessions.js +245 -0
- package/src/{daemon → host/daemon}/index.js +27 -10
- package/src/{daemon/plugins/overlay.js → host/daemon/plugins/desktop.js} +36 -28
- package/src/{daemon → host/daemon}/plugins/index.js +2 -2
- package/src/{daemon → host/daemon}/plugins/telegram.js +165 -33
- package/src/{daemon → host/daemon}/project-config.js +31 -7
- package/src/{daemon → host/daemon}/routines.js +27 -8
- package/src/{daemon → host/daemon}/skills-loader.js +4 -2
- package/src/{daemon → host/daemon}/smoke.js +9 -5
- package/src/{daemon → host/daemon}/super-agent-tools/helpers.js +1 -1
- package/src/host/daemon/super-agent-tools/index.js +157 -0
- package/src/{daemon → host/daemon}/super-agent-tools/registry-bridge.js +1 -1
- package/src/{daemon → host/daemon}/super-agent-tools/tools/add-project.js +2 -2
- package/src/{daemon → host/daemon}/super-agent-tools/tools/ask-questions.js +4 -0
- package/src/{daemon → host/daemon}/super-agent-tools/tools/call-agent.js +5 -2
- package/src/{daemon → host/daemon}/super-agent-tools/tools/call-runtime.js +117 -8
- package/src/host/daemon/super-agent-tools/tools/create-task.js +52 -0
- package/src/{daemon → host/daemon}/super-agent-tools/tools/import-agent.js +2 -3
- package/src/{daemon → host/daemon}/super-agent-tools/tools/list-agents.js +1 -1
- package/src/host/daemon/super-agent-tools/tools/list-tasks.js +52 -0
- package/src/{daemon → host/daemon}/super-agent-tools/tools/list-vault-agents.js +1 -1
- package/src/host/daemon/super-agent-tools/tools/read-self-memory.js +21 -0
- package/src/host/daemon/super-agent-tools/tools/remember.js +40 -0
- package/src/{daemon → host/daemon}/super-agent-tools/tools/search-messages.js +1 -1
- package/src/host/daemon/super-agent-tools/tools/search-sessions.js +134 -0
- package/src/{daemon → host/daemon}/super-agent-tools/tools/send-telegram.js +2 -2
- package/src/{daemon → host/daemon}/super-agent-tools/tools/set-identity.js +1 -1
- package/src/{daemon → host/daemon}/super-agent-tools/tools/set-permission-mode.js +1 -1
- package/src/{daemon → host/daemon}/super-agent-tools/tools/tail-messages.js +1 -1
- package/src/host/daemon/super-agent.js +129 -0
- package/src/host/daemon/token-store.js +118 -0
- package/src/host/daemon/tool-call-parser.js +2 -0
- package/src/{daemon → host/daemon}/transcription.js +1 -1
- package/src/{daemon → host/daemon}/wakeup.js +2 -2
- package/src/interfaces/cli/claude-permissions.js +33 -0
- package/src/{cli → interfaces/cli}/commands/agent.js +43 -8
- package/src/{cli → interfaces/cli}/commands/command.js +1 -1
- package/src/{cli → interfaces/cli}/commands/config.js +1 -1
- package/src/{cli → interfaces/cli}/commands/daemon.js +67 -0
- package/src/interfaces/cli/commands/desktop.js +335 -0
- package/src/interfaces/cli/commands/exec.js +92 -0
- package/src/{cli → interfaces/cli}/commands/identity.js +6 -63
- package/src/{cli → interfaces/cli}/commands/init.js +1 -1
- package/src/{cli → interfaces/cli}/commands/mcp.js +69 -10
- package/src/{cli → interfaces/cli}/commands/memory.js +2 -2
- package/src/interfaces/cli/commands/model.js +136 -0
- package/src/interfaces/cli/commands/pair.js +170 -0
- package/src/interfaces/cli/commands/project-config.js +131 -0
- package/src/{cli → interfaces/cli}/commands/project.js +1 -1
- package/src/{cli → interfaces/cli}/commands/search.js +1 -1
- package/src/interfaces/cli/commands/session.js +892 -0
- package/src/interfaces/cli/commands/sessions.js +997 -0
- package/src/{cli → interfaces/cli}/commands/setup.js +98 -4
- package/src/{cli → interfaces/cli}/commands/skills.js +117 -9
- package/src/{cli → interfaces/cli}/commands/status.js +9 -1
- package/src/{cli → interfaces/cli}/commands/sys.js +96 -17
- package/src/interfaces/cli/commands/task.js +179 -0
- package/src/interfaces/cli/commands/telegram.js +366 -0
- package/src/{cli → interfaces/cli}/commands/update.js +1 -1
- package/src/interfaces/cli/commands/voice.js +258 -0
- package/src/{cli → interfaces/cli}/http.js +6 -2
- package/src/{cli → interfaces/cli}/index.js +955 -63
- package/src/interfaces/cli/postinstall.js +34 -0
- package/src/interfaces/desktop/assets/app-icon-180.png +0 -0
- package/src/interfaces/desktop/assets/app-icon-32.png +0 -0
- package/src/interfaces/desktop/assets/app-icon.png +0 -0
- package/src/interfaces/desktop/assets/apx-logo.png +0 -0
- package/src/interfaces/desktop/assets/superagent.png +0 -0
- package/src/interfaces/desktop/assets/tray-icon.png +0 -0
- package/src/interfaces/desktop/index.html +18 -0
- package/src/interfaces/desktop/main.js +652 -0
- package/src/interfaces/desktop/preload.js +48 -0
- package/src/interfaces/desktop/renderer.js +1006 -0
- package/src/interfaces/desktop/style.css +400 -0
- package/src/{mcp → interfaces/mcp-server}/index.js +2 -2
- package/src/interfaces/tui/_shims/util-which.ts +53 -0
- package/src/{tui → interfaces/tui}/app.tsx +2 -2
- package/src/{tui → interfaces/tui}/component/prompt/index.tsx +4 -1
- package/src/{tui → interfaces/tui}/context/sdk-apx.tsx +84 -16
- package/src/interfaces/tui/context/sync-apx.tsx +398 -0
- package/src/interfaces/tui/routes/session/index.tsx +368 -0
- package/src/interfaces/tui/routes/session/message-actions.tsx +58 -0
- package/src/interfaces/tui/routes/session/sidebar-apx.tsx +114 -0
- package/src/{tui → interfaces/tui}/tsconfig.json +1 -0
- package/src/{tui → interfaces/tui}/util/clipboard.ts +1 -1
- package/src/interfaces/web/README.md +102 -0
- package/src/interfaces/web/coming-soon.html +65 -0
- package/src/interfaces/web/components.json +25 -0
- package/src/interfaces/web/dist/assets/index-BDUsA6L6.css +1 -0
- package/src/interfaces/web/dist/assets/index-CfWyjPBa.js +548 -0
- package/src/interfaces/web/dist/assets/index-CfWyjPBa.js.map +1 -0
- package/src/interfaces/web/dist/favicon/dark/android-chrome-192x192.png +0 -0
- package/src/interfaces/web/dist/favicon/dark/android-chrome-512x512.png +0 -0
- package/src/interfaces/web/dist/favicon/dark/apple-touch-icon.png +0 -0
- package/src/interfaces/web/dist/favicon/dark/favicon-16x16.png +0 -0
- package/src/interfaces/web/dist/favicon/dark/favicon-32x32.png +0 -0
- package/src/interfaces/web/dist/favicon/dark/favicon-48x48.png +0 -0
- package/src/interfaces/web/dist/favicon/dark/favicon.ico +0 -0
- package/src/interfaces/web/dist/favicon/dark/favicon.webp +0 -0
- package/src/interfaces/web/dist/favicon/dark/site.webmanifest +18 -0
- package/src/interfaces/web/dist/favicon/white/android-chrome-192x192.png +0 -0
- package/src/interfaces/web/dist/favicon/white/android-chrome-512x512.png +0 -0
- package/src/interfaces/web/dist/favicon/white/apple-touch-icon.png +0 -0
- package/src/interfaces/web/dist/favicon/white/favicon-16x16.png +0 -0
- package/src/interfaces/web/dist/favicon/white/favicon-32x32.png +0 -0
- package/src/interfaces/web/dist/favicon/white/favicon-48x48.png +0 -0
- package/src/interfaces/web/dist/favicon/white/favicon.ico +0 -0
- package/src/interfaces/web/dist/favicon/white/favicon.webp +0 -0
- package/src/interfaces/web/dist/favicon/white/site.webmanifest +18 -0
- package/src/interfaces/web/dist/index.html +27 -0
- package/src/interfaces/web/dist/logo/logo_dark.webp +0 -0
- package/src/interfaces/web/dist/logo/logo_only_dark.webp +0 -0
- package/src/interfaces/web/dist/logo/logo_only_white.webp +0 -0
- package/src/interfaces/web/dist/logo/logo_vertical_dark.webp +0 -0
- package/src/interfaces/web/dist/logo/logo_vertical_white.webp +0 -0
- package/src/interfaces/web/dist/logo/logo_white.webp +0 -0
- package/src/interfaces/web/dist/modules/superagent.png +0 -0
- package/src/interfaces/web/index.html +26 -0
- package/src/interfaces/web/package-lock.json +4253 -0
- package/src/interfaces/web/package.json +55 -0
- package/src/interfaces/web/playwright.config.ts +45 -0
- package/src/interfaces/web/pnpm-lock.yaml +2946 -0
- package/src/interfaces/web/public/favicon/dark/android-chrome-192x192.png +0 -0
- package/src/interfaces/web/public/favicon/dark/android-chrome-512x512.png +0 -0
- package/src/interfaces/web/public/favicon/dark/apple-touch-icon.png +0 -0
- package/src/interfaces/web/public/favicon/dark/favicon-16x16.png +0 -0
- package/src/interfaces/web/public/favicon/dark/favicon-32x32.png +0 -0
- package/src/interfaces/web/public/favicon/dark/favicon-48x48.png +0 -0
- package/src/interfaces/web/public/favicon/dark/favicon.ico +0 -0
- package/src/interfaces/web/public/favicon/dark/favicon.webp +0 -0
- package/src/interfaces/web/public/favicon/dark/site.webmanifest +18 -0
- package/src/interfaces/web/public/favicon/white/android-chrome-192x192.png +0 -0
- package/src/interfaces/web/public/favicon/white/android-chrome-512x512.png +0 -0
- package/src/interfaces/web/public/favicon/white/apple-touch-icon.png +0 -0
- package/src/interfaces/web/public/favicon/white/favicon-16x16.png +0 -0
- package/src/interfaces/web/public/favicon/white/favicon-32x32.png +0 -0
- package/src/interfaces/web/public/favicon/white/favicon-48x48.png +0 -0
- package/src/interfaces/web/public/favicon/white/favicon.ico +0 -0
- package/src/interfaces/web/public/favicon/white/favicon.webp +0 -0
- package/src/interfaces/web/public/favicon/white/site.webmanifest +18 -0
- package/src/interfaces/web/public/logo/logo_dark.webp +0 -0
- package/src/interfaces/web/public/logo/logo_only_dark.webp +0 -0
- package/src/interfaces/web/public/logo/logo_only_white.webp +0 -0
- package/src/interfaces/web/public/logo/logo_vertical_dark.webp +0 -0
- package/src/interfaces/web/public/logo/logo_vertical_white.webp +0 -0
- package/src/interfaces/web/public/logo/logo_white.webp +0 -0
- package/src/interfaces/web/public/modules/superagent.png +0 -0
- package/src/interfaces/web/src/App.tsx +199 -0
- package/src/interfaces/web/src/components/AddProjectDialog.tsx +121 -0
- package/src/interfaces/web/src/components/ModelCombobox.tsx +96 -0
- package/src/interfaces/web/src/components/RobyBubble.tsx +213 -0
- package/src/interfaces/web/src/components/Section.tsx +44 -0
- package/src/interfaces/web/src/components/TelegramChannelDialog.tsx +97 -0
- package/src/interfaces/web/src/components/TelegramSendDialog.tsx +48 -0
- package/src/interfaces/web/src/components/Toast.tsx +84 -0
- package/src/interfaces/web/src/components/UiSelect.tsx +74 -0
- package/src/interfaces/web/src/components/chat/Composer.tsx +43 -0
- package/src/interfaces/web/src/components/chat/ContextBar.tsx +111 -0
- package/src/interfaces/web/src/components/chat/MessageBubble.tsx +95 -0
- package/src/interfaces/web/src/components/chat/MessageList.tsx +35 -0
- package/src/interfaces/web/src/components/chat/ModelPicker.tsx +145 -0
- package/src/interfaces/web/src/components/chat/ToolCall.tsx +141 -0
- package/src/interfaces/web/src/components/code/CodeChangesTab.tsx +87 -0
- package/src/interfaces/web/src/components/code/CodeComposer.tsx +87 -0
- package/src/interfaces/web/src/components/code/CodeContextTab.tsx +83 -0
- package/src/interfaces/web/src/components/code/CodeProjectPicker.tsx +39 -0
- package/src/interfaces/web/src/components/code/CodeSessionList.tsx +97 -0
- package/src/interfaces/web/src/components/code/CodeSidePanel.tsx +44 -0
- package/src/interfaces/web/src/components/code/CodeToolTrail.tsx +29 -0
- package/src/interfaces/web/src/components/code/DiffView.tsx +67 -0
- package/src/interfaces/web/src/components/common/Qr.tsx +27 -0
- package/src/interfaces/web/src/components/common/TabLayout.tsx +46 -0
- package/src/interfaces/web/src/components/common/TabNav.tsx +113 -0
- package/src/interfaces/web/src/components/config/ConfigTabsEditor.tsx +202 -0
- package/src/interfaces/web/src/components/config/GlobalConfigEditor.tsx +42 -0
- package/src/interfaces/web/src/components/config/global-config-sections.ts +60 -0
- package/src/interfaces/web/src/components/config/project-config-sections.ts +58 -0
- package/src/interfaces/web/src/components/deck/DaemonCard.tsx +58 -0
- package/src/interfaces/web/src/components/deck/DesktopGroup.tsx +33 -0
- package/src/interfaces/web/src/components/deck/WidgetRow.tsx +100 -0
- package/src/interfaces/web/src/components/layout/Logo.tsx +59 -0
- package/src/interfaces/web/src/components/layout/ProjectAvatar.tsx +116 -0
- package/src/interfaces/web/src/components/layout/ProjectSidebar.tsx +151 -0
- package/src/interfaces/web/src/components/settings/AdvancedPanel.tsx +45 -0
- package/src/interfaces/web/src/components/settings/AppearancePanel.tsx +72 -0
- package/src/interfaces/web/src/components/settings/DefaultRouterCard.tsx +232 -0
- package/src/interfaces/web/src/components/settings/DevicesPanel.tsx +60 -0
- package/src/interfaces/web/src/components/settings/EnginesPanel.tsx +127 -0
- package/src/interfaces/web/src/components/settings/IdentityPanel.tsx +69 -0
- package/src/interfaces/web/src/components/settings/MemoryPanel.tsx +226 -0
- package/src/interfaces/web/src/components/settings/PairDeviceDialog.tsx +175 -0
- package/src/interfaces/web/src/components/settings/SuperAgentPanel.tsx +93 -0
- package/src/interfaces/web/src/components/settings/TelegramChannelsPanel.tsx +90 -0
- package/src/interfaces/web/src/components/settings/TelegramContactsPanel.tsx +101 -0
- package/src/interfaces/web/src/components/settings/TelegramGlobalPanel.tsx +100 -0
- package/src/interfaces/web/src/components/settings/TelegramRolesPanel.tsx +108 -0
- package/src/interfaces/web/src/components/settings/TelegramSettingsTabs.tsx +55 -0
- package/src/interfaces/web/src/components/settings/providers/ProviderCard.tsx +95 -0
- package/src/interfaces/web/src/components/settings/providers/ProviderModal.tsx +405 -0
- package/src/interfaces/web/src/components/settings/providers/typeStyles.ts +155 -0
- package/src/interfaces/web/src/components/settings/providers/types.ts +26 -0
- package/src/interfaces/web/src/components/ui/accordion.tsx +72 -0
- package/src/interfaces/web/src/components/ui/alert-dialog.tsx +187 -0
- package/src/interfaces/web/src/components/ui/alert.tsx +76 -0
- package/src/interfaces/web/src/components/ui/aspect-ratio.tsx +22 -0
- package/src/interfaces/web/src/components/ui/avatar.tsx +107 -0
- package/src/interfaces/web/src/components/ui/badge.tsx +52 -0
- package/src/interfaces/web/src/components/ui/breadcrumb.tsx +125 -0
- package/src/interfaces/web/src/components/ui/button-group.tsx +87 -0
- package/src/interfaces/web/src/components/ui/button.tsx +58 -0
- package/src/interfaces/web/src/components/ui/calendar.tsx +221 -0
- package/src/interfaces/web/src/components/ui/card.tsx +103 -0
- package/src/interfaces/web/src/components/ui/carousel.tsx +242 -0
- package/src/interfaces/web/src/components/ui/chart.tsx +371 -0
- package/src/interfaces/web/src/components/ui/chat-input.tsx +122 -0
- package/src/interfaces/web/src/components/ui/checkbox.tsx +29 -0
- package/src/interfaces/web/src/components/ui/collapsible.tsx +19 -0
- package/src/interfaces/web/src/components/ui/combobox.tsx +295 -0
- package/src/interfaces/web/src/components/ui/command.tsx +196 -0
- package/src/interfaces/web/src/components/ui/context-menu.tsx +271 -0
- package/src/interfaces/web/src/components/ui/dialog.tsx +158 -0
- package/src/interfaces/web/src/components/ui/direction.tsx +4 -0
- package/src/interfaces/web/src/components/ui/drawer.tsx +134 -0
- package/src/interfaces/web/src/components/ui/dropdown-menu.tsx +266 -0
- package/src/interfaces/web/src/components/ui/empty.tsx +104 -0
- package/src/interfaces/web/src/components/ui/field.tsx +236 -0
- package/src/interfaces/web/src/components/ui/hover-card.tsx +51 -0
- package/src/interfaces/web/src/components/ui/input-group.tsx +158 -0
- package/src/interfaces/web/src/components/ui/input-otp.tsx +85 -0
- package/src/interfaces/web/src/components/ui/input.tsx +20 -0
- package/src/interfaces/web/src/components/ui/item.tsx +201 -0
- package/src/interfaces/web/src/components/ui/kbd.tsx +26 -0
- package/src/interfaces/web/src/components/ui/label.tsx +20 -0
- package/src/interfaces/web/src/components/ui/menubar.tsx +280 -0
- package/src/interfaces/web/src/components/ui/native-select.tsx +61 -0
- package/src/interfaces/web/src/components/ui/navigation-menu.tsx +168 -0
- package/src/interfaces/web/src/components/ui/pagination.tsx +130 -0
- package/src/interfaces/web/src/components/ui/popover.tsx +88 -0
- package/src/interfaces/web/src/components/ui/progress.tsx +83 -0
- package/src/interfaces/web/src/components/ui/radio-group.tsx +36 -0
- package/src/interfaces/web/src/components/ui/resizable.tsx +50 -0
- package/src/interfaces/web/src/components/ui/scroll-area.tsx +53 -0
- package/src/interfaces/web/src/components/ui/select.tsx +201 -0
- package/src/interfaces/web/src/components/ui/separator.tsx +23 -0
- package/src/interfaces/web/src/components/ui/sheet.tsx +138 -0
- package/src/interfaces/web/src/components/ui/sidebar.tsx +723 -0
- package/src/interfaces/web/src/components/ui/skeleton.tsx +13 -0
- package/src/interfaces/web/src/components/ui/slider.tsx +52 -0
- package/src/interfaces/web/src/components/ui/sonner.tsx +49 -0
- package/src/interfaces/web/src/components/ui/spinner.tsx +10 -0
- package/src/interfaces/web/src/components/ui/switch.tsx +30 -0
- package/src/interfaces/web/src/components/ui/table.tsx +116 -0
- package/src/interfaces/web/src/components/ui/tabs.tsx +72 -0
- package/src/interfaces/web/src/components/ui/textarea.tsx +18 -0
- package/src/interfaces/web/src/components/ui/tip.tsx +21 -0
- package/src/interfaces/web/src/components/ui/toggle-group.tsx +87 -0
- package/src/interfaces/web/src/components/ui/toggle.tsx +45 -0
- package/src/interfaces/web/src/components/ui/tooltip.tsx +64 -0
- package/src/interfaces/web/src/components/ui.tsx +211 -0
- package/src/interfaces/web/src/components/voice/VoiceProviderList.tsx +197 -0
- package/src/interfaces/web/src/components/voice/VoiceProviderModal.tsx +213 -0
- package/src/interfaces/web/src/components/voice/VoiceSttCard.tsx +72 -0
- package/src/interfaces/web/src/components/voice/VoiceTestCard.tsx +112 -0
- package/src/interfaces/web/src/components/voice/useTtsPlayer.ts +59 -0
- package/src/interfaces/web/src/constants/index.ts +91 -0
- package/src/interfaces/web/src/hooks/use-mobile.ts +19 -0
- package/src/interfaces/web/src/hooks/useChat.ts +276 -0
- package/src/interfaces/web/src/hooks/useDaemonStatus.ts +12 -0
- package/src/interfaces/web/src/hooks/useDevices.ts +12 -0
- package/src/interfaces/web/src/hooks/useEngines.ts +10 -0
- package/src/interfaces/web/src/hooks/useGlobalConfig.ts +24 -0
- package/src/interfaces/web/src/hooks/useIdentity.ts +16 -0
- package/src/interfaces/web/src/hooks/useProjects.ts +27 -0
- package/src/interfaces/web/src/hooks/useTelegram.ts +35 -0
- package/src/interfaces/web/src/hooks/useTheme.tsx +57 -0
- package/src/interfaces/web/src/hooks/useTokenBootstrap.ts +122 -0
- package/src/interfaces/web/src/i18n/en.ts +767 -0
- package/src/interfaces/web/src/i18n/es.ts +770 -0
- package/src/interfaces/web/src/i18n/index.ts +86 -0
- package/src/interfaces/web/src/lib/api/admin.ts +30 -0
- package/src/interfaces/web/src/lib/api/agents.ts +46 -0
- package/src/interfaces/web/src/lib/api/code.ts +122 -0
- package/src/interfaces/web/src/lib/api/conversations.ts +16 -0
- package/src/interfaces/web/src/lib/api/deck.ts +106 -0
- package/src/interfaces/web/src/lib/api/desktop.ts +54 -0
- package/src/interfaces/web/src/lib/api/embeddings.ts +44 -0
- package/src/interfaces/web/src/lib/api/engines.ts +17 -0
- package/src/interfaces/web/src/lib/api/filesystem.ts +12 -0
- package/src/interfaces/web/src/lib/api/health.ts +6 -0
- package/src/interfaces/web/src/lib/api/identity.ts +7 -0
- package/src/interfaces/web/src/lib/api/mcps.ts +29 -0
- package/src/interfaces/web/src/lib/api/messages.ts +24 -0
- package/src/interfaces/web/src/lib/api/projects.ts +29 -0
- package/src/interfaces/web/src/lib/api/routines.ts +14 -0
- package/src/interfaces/web/src/lib/api/sessions.ts +16 -0
- package/src/interfaces/web/src/lib/api/super_agent.ts +29 -0
- package/src/interfaces/web/src/lib/api/tasks.ts +19 -0
- package/src/interfaces/web/src/lib/api/telegram.ts +57 -0
- package/src/interfaces/web/src/lib/api/tools.ts +13 -0
- package/src/interfaces/web/src/lib/api/voice.ts +169 -0
- package/src/interfaces/web/src/lib/api.ts +48 -0
- package/src/interfaces/web/src/lib/cn.ts +6 -0
- package/src/interfaces/web/src/lib/code-context.ts +83 -0
- package/src/interfaces/web/src/lib/config-values.ts +29 -0
- package/src/interfaces/web/src/lib/device.ts +10 -0
- package/src/interfaces/web/src/lib/http.ts +104 -0
- package/src/interfaces/web/src/lib/secrets.ts +15 -0
- package/src/interfaces/web/src/lib/utils.ts +6 -0
- package/src/interfaces/web/src/main.tsx +16 -0
- package/src/interfaces/web/src/screens/ApxAdminScreen.tsx +174 -0
- package/src/interfaces/web/src/screens/PairingScreen.tsx +105 -0
- package/src/interfaces/web/src/screens/ProjectScreen.tsx +178 -0
- package/src/interfaces/web/src/screens/SettingsScreen.tsx +111 -0
- package/src/interfaces/web/src/screens/base/AgentDefaultsTab.tsx +274 -0
- package/src/interfaces/web/src/screens/base/ComingSoon.tsx +16 -0
- package/src/interfaces/web/src/screens/base/GlobalTasksTab.tsx +53 -0
- package/src/interfaces/web/src/screens/base/LogsTab.tsx +188 -0
- package/src/interfaces/web/src/screens/base/ModelsTab.tsx +13 -0
- package/src/interfaces/web/src/screens/base/SessionsTab.tsx +58 -0
- package/src/interfaces/web/src/screens/base/WorkspacesTab.tsx +49 -0
- package/src/interfaces/web/src/screens/modules/CodeScreen.tsx +295 -0
- package/src/interfaces/web/src/screens/modules/DeckScreen.tsx +173 -0
- package/src/interfaces/web/src/screens/modules/DesktopScreen.tsx +304 -0
- package/src/interfaces/web/src/screens/modules/VoiceScreen.tsx +174 -0
- package/src/interfaces/web/src/screens/project/AgentBrainGraph.tsx +152 -0
- package/src/interfaces/web/src/screens/project/AgentDetailScreen.tsx +455 -0
- package/src/interfaces/web/src/screens/project/AgentsTab.tsx +364 -0
- package/src/interfaces/web/src/screens/project/ChatTab.tsx +198 -0
- package/src/interfaces/web/src/screens/project/ConfigTab.tsx +94 -0
- package/src/interfaces/web/src/screens/project/McpsTab.tsx +149 -0
- package/src/interfaces/web/src/screens/project/MemoriesTab.tsx +134 -0
- package/src/interfaces/web/src/screens/project/Overview.tsx +37 -0
- package/src/interfaces/web/src/screens/project/RoutinesTab.tsx +386 -0
- package/src/interfaces/web/src/screens/project/TasksTab.tsx +116 -0
- package/src/interfaces/web/src/screens/project/TelegramTab.tsx +126 -0
- package/src/interfaces/web/src/screens/project/ThreadsTab.tsx +100 -0
- package/src/interfaces/web/src/styles.css +128 -0
- package/src/interfaces/web/src/types/daemon.ts +289 -0
- package/src/interfaces/web/tailwind.config.js +53 -0
- package/src/interfaces/web/tsconfig.json +24 -0
- package/src/interfaces/web/vite.config.ts +50 -0
- package/src/cli/commands/exec.js +0 -56
- package/src/cli/commands/overlay.js +0 -253
- package/src/cli/commands/session.js +0 -395
- package/src/cli/commands/sessions.js +0 -517
- package/src/cli/commands/telegram.js +0 -77
- package/src/cli/postinstall.js +0 -75
- package/src/cli-ts/commands/agent.ts +0 -173
- package/src/cli-ts/commands/chat.ts +0 -119
- package/src/cli-ts/commands/daemon.ts +0 -112
- package/src/cli-ts/commands/exec.ts +0 -109
- package/src/cli-ts/commands/mcp.ts +0 -235
- package/src/cli-ts/commands/session.ts +0 -224
- package/src/cli-ts/commands/status.ts +0 -61
- package/src/cli-ts/http.ts +0 -36
- package/src/cli-ts/index.ts +0 -73
- package/src/cli-ts/ui.ts +0 -107
- package/src/daemon/api.js +0 -1558
- package/src/daemon/engines/gemini.js +0 -56
- package/src/daemon/engines/openai.js +0 -79
- package/src/daemon/mcp-sources.js +0 -114
- package/src/daemon/super-agent-tools/index.js +0 -84
- package/src/daemon/super-agent-tools.js +0 -1
- package/src/daemon/super-agent.js +0 -541
- package/src/overlay/index.html +0 -44
- package/src/overlay/main.js +0 -480
- package/src/overlay/preload.js +0 -34
- package/src/overlay/renderer.js +0 -371
- package/src/overlay/style.css +0 -250
- package/src/tui/context/sync-apx.tsx +0 -284
- package/src/tui/routes/session/index.tsx +0 -274
- package/src/tui/routes/session/sidebar-apx.tsx +0 -90
- /package/src/{daemon → core}/tools/browser.js +0 -0
- /package/src/{daemon → core}/tools/fetch.js +0 -0
- /package/src/{daemon → core}/tools/glob.js +0 -0
- /package/src/{daemon → core}/tools/grep.js +0 -0
- /package/src/{daemon → core}/tools/registry.js +0 -0
- /package/src/{daemon → core}/tools/search.js +0 -0
- /package/src/{daemon → host/daemon}/conversations.js +0 -0
- /package/src/{daemon → host/daemon}/env-detect.js +0 -0
- /package/src/{daemon → host/daemon}/runtimes/_spawn.js +0 -0
- /package/src/{daemon → host/daemon}/runtimes/aider.js +0 -0
- /package/src/{daemon → host/daemon}/runtimes/claude-code.js +0 -0
- /package/src/{daemon → host/daemon}/runtimes/codex.js +0 -0
- /package/src/{daemon → host/daemon}/runtimes/cursor-agent.js +0 -0
- /package/src/{daemon → host/daemon}/runtimes/gemini-cli.js +0 -0
- /package/src/{daemon → host/daemon}/runtimes/index.js +0 -0
- /package/src/{daemon → host/daemon}/runtimes/opencode.js +0 -0
- /package/src/{daemon → host/daemon}/runtimes/qwen-code.js +0 -0
- /package/src/{daemon → host/daemon}/super-agent-tools/tools/call-mcp.js +0 -0
- /package/src/{daemon → host/daemon}/super-agent-tools/tools/edit-file.js +0 -0
- /package/src/{daemon → host/daemon}/super-agent-tools/tools/list-files.js +0 -0
- /package/src/{daemon → host/daemon}/super-agent-tools/tools/list-mcps.js +0 -0
- /package/src/{daemon → host/daemon}/super-agent-tools/tools/list-projects.js +0 -0
- /package/src/{daemon → host/daemon}/super-agent-tools/tools/list-skills.js +0 -0
- /package/src/{daemon → host/daemon}/super-agent-tools/tools/load-skill.js +0 -0
- /package/src/{daemon → host/daemon}/super-agent-tools/tools/read-agent-memory.js +0 -0
- /package/src/{daemon → host/daemon}/super-agent-tools/tools/read-file.js +0 -0
- /package/src/{daemon → host/daemon}/super-agent-tools/tools/run-shell.js +0 -0
- /package/src/{daemon → host/daemon}/super-agent-tools/tools/search-files.js +0 -0
- /package/src/{daemon → host/daemon}/super-agent-tools/tools/transcribe-audio.js +0 -0
- /package/src/{daemon → host/daemon}/super-agent-tools/tools/write-file.js +0 -0
- /package/src/{daemon → host/daemon}/thinking.js +0 -0
- /package/src/{daemon → host/daemon}/whisper-server.py +0 -0
- /package/src/{daemon → host/daemon}/whisper-transcribe.py +0 -0
- /package/src/{cli → interfaces/cli}/commands/a2a.js +0 -0
- /package/src/{cli → interfaces/cli}/commands/artifact.js +0 -0
- /package/src/{cli → interfaces/cli}/commands/chat.js +0 -0
- /package/src/{cli → interfaces/cli}/commands/log.js +0 -0
- /package/src/{cli → interfaces/cli}/commands/messages.js +0 -0
- /package/src/{cli → interfaces/cli}/commands/plugins.js +0 -0
- /package/src/{cli → interfaces/cli}/commands/routine.js +0 -0
- /package/src/{cli → interfaces/cli}/commands/runtime.js +0 -0
- /package/src/{cli → interfaces/cli}/terminal-chat/renderer.js +0 -0
- /package/src/{overlay → interfaces/desktop}/package.json +0 -0
- /package/src/{tui → interfaces/tui}/_shims/cli-error.ts +0 -0
- /package/src/{tui → interfaces/tui}/_shims/cli-logo.ts +0 -0
- /package/src/{tui → interfaces/tui}/_shims/cli-ui.ts +0 -0
- /package/src/{tui → interfaces/tui}/_shims/config-console-state.ts +0 -0
- /package/src/{tui → interfaces/tui}/_shims/core-any.ts +0 -0
- /package/src/{tui → interfaces/tui}/_shims/core-binary.ts +0 -0
- /package/src/{tui → interfaces/tui}/_shims/core-flag.ts +0 -0
- /package/src/{tui → interfaces/tui}/_shims/core-log.ts +0 -0
- /package/src/{tui → interfaces/tui}/_shims/lsp-language.ts +0 -0
- /package/src/{tui → interfaces/tui}/_shims/opencode-any.ts +0 -0
- /package/src/{tui → interfaces/tui}/_shims/opencode-sdk-v2.ts +0 -0
- /package/src/{tui → interfaces/tui}/_shims/plugin-tui.ts +0 -0
- /package/src/{tui → interfaces/tui}/_shims/prompt-display.ts +0 -0
- /package/src/{tui → interfaces/tui}/_shims/provider-provider.ts +0 -0
- /package/src/{tui → interfaces/tui}/_shims/session-retry.ts +0 -0
- /package/src/{tui → interfaces/tui}/_shims/session-schema.ts +0 -0
- /package/src/{tui → interfaces/tui}/_shims/session-session.ts +0 -0
- /package/src/{tui → interfaces/tui}/_shims/snapshot.ts +0 -0
- /package/src/{tui → interfaces/tui}/_shims/tool-any.ts +0 -0
- /package/src/{tui → interfaces/tui}/_shims/util-error.ts +0 -0
- /package/src/{tui → interfaces/tui}/_shims/util-filesystem.ts +0 -0
- /package/src/{tui → interfaces/tui}/_shims/util-format.ts +0 -0
- /package/src/{tui → interfaces/tui}/_shims/util-iife.ts +0 -0
- /package/src/{tui → interfaces/tui}/_shims/util-locale.ts +0 -0
- /package/src/{tui → interfaces/tui}/_shims/util-process.ts +0 -0
- /package/src/{tui → interfaces/tui}/asset/charge.wav +0 -0
- /package/src/{tui → interfaces/tui}/asset/pulse-a.wav +0 -0
- /package/src/{tui → interfaces/tui}/asset/pulse-b.wav +0 -0
- /package/src/{tui → interfaces/tui}/asset/pulse-c.wav +0 -0
- /package/src/{tui → interfaces/tui}/attach.ts +0 -0
- /package/src/{tui → interfaces/tui}/component/bg-pulse-render.ts +0 -0
- /package/src/{tui → interfaces/tui}/component/bg-pulse.tsx +0 -0
- /package/src/{tui → interfaces/tui}/component/border.tsx +0 -0
- /package/src/{tui → interfaces/tui}/component/dialog-agent.tsx +0 -0
- /package/src/{tui → interfaces/tui}/component/dialog-console-org.tsx +0 -0
- /package/src/{tui → interfaces/tui}/component/dialog-mcp.tsx +0 -0
- /package/src/{tui → interfaces/tui}/component/dialog-model.tsx +0 -0
- /package/src/{tui → interfaces/tui}/component/dialog-provider.tsx +0 -0
- /package/src/{tui → interfaces/tui}/component/dialog-retry-action.tsx +0 -0
- /package/src/{tui → interfaces/tui}/component/dialog-session-delete-failed.tsx +0 -0
- /package/src/{tui → interfaces/tui}/component/dialog-session-list.tsx +0 -0
- /package/src/{tui → interfaces/tui}/component/dialog-session-rename.tsx +0 -0
- /package/src/{tui → interfaces/tui}/component/dialog-skill.tsx +0 -0
- /package/src/{tui → interfaces/tui}/component/dialog-stash.tsx +0 -0
- /package/src/{tui → interfaces/tui}/component/dialog-status.tsx +0 -0
- /package/src/{tui → interfaces/tui}/component/dialog-tag.tsx +0 -0
- /package/src/{tui → interfaces/tui}/component/dialog-theme-list.tsx +0 -0
- /package/src/{tui → interfaces/tui}/component/dialog-variant.tsx +0 -0
- /package/src/{tui → interfaces/tui}/component/dialog-workspace-create.tsx +0 -0
- /package/src/{tui → interfaces/tui}/component/dialog-workspace-file-changes.tsx +0 -0
- /package/src/{tui → interfaces/tui}/component/dialog-workspace-unavailable.tsx +0 -0
- /package/src/{tui → interfaces/tui}/component/error-component.tsx +0 -0
- /package/src/{tui → interfaces/tui}/component/logo.tsx +0 -0
- /package/src/{tui → interfaces/tui}/component/plugin-route-missing.tsx +0 -0
- /package/src/{tui → interfaces/tui}/component/prompt/autocomplete.tsx +0 -0
- /package/src/{tui → interfaces/tui}/component/prompt/cwd.ts +0 -0
- /package/src/{tui → interfaces/tui}/component/prompt/frecency.tsx +0 -0
- /package/src/{tui → interfaces/tui}/component/prompt/history.tsx +0 -0
- /package/src/{tui → interfaces/tui}/component/prompt/part.ts +0 -0
- /package/src/{tui → interfaces/tui}/component/prompt/stash.tsx +0 -0
- /package/src/{tui → interfaces/tui}/component/prompt/traits.ts +0 -0
- /package/src/{tui → interfaces/tui}/component/spinner.tsx +0 -0
- /package/src/{tui → interfaces/tui}/component/startup-loading.tsx +0 -0
- /package/src/{tui → interfaces/tui}/component/todo-item.tsx +0 -0
- /package/src/{tui → interfaces/tui}/component/use-connected.tsx +0 -0
- /package/src/{tui → interfaces/tui}/component/workspace-label.tsx +0 -0
- /package/src/{tui → interfaces/tui}/config/cwd.ts +0 -0
- /package/src/{tui → interfaces/tui}/config/keybind.ts +0 -0
- /package/src/{tui → interfaces/tui}/config/tui-migrate.ts +0 -0
- /package/src/{tui → interfaces/tui}/config/tui-schema.ts +0 -0
- /package/src/{tui → interfaces/tui}/config/tui.ts +0 -0
- /package/src/{tui → interfaces/tui}/context/aggregate-failures.ts +0 -0
- /package/src/{tui → interfaces/tui}/context/args.tsx +0 -0
- /package/src/{tui → interfaces/tui}/context/command-palette.tsx +0 -0
- /package/src/{tui → interfaces/tui}/context/directory.ts +0 -0
- /package/src/{tui → interfaces/tui}/context/editor-zed.ts +0 -0
- /package/src/{tui → interfaces/tui}/context/editor.ts +0 -0
- /package/src/{tui → interfaces/tui}/context/event-apx.ts +0 -0
- /package/src/{tui → interfaces/tui}/context/event.ts +0 -0
- /package/src/{tui → interfaces/tui}/context/exit.tsx +0 -0
- /package/src/{tui → interfaces/tui}/context/helper.tsx +0 -0
- /package/src/{tui → interfaces/tui}/context/kv.tsx +0 -0
- /package/src/{tui → interfaces/tui}/context/local.tsx +0 -0
- /package/src/{tui → interfaces/tui}/context/path-format.tsx +0 -0
- /package/src/{tui → interfaces/tui}/context/project-apx.tsx +0 -0
- /package/src/{tui → interfaces/tui}/context/project.tsx +0 -0
- /package/src/{tui → interfaces/tui}/context/prompt.tsx +0 -0
- /package/src/{tui → interfaces/tui}/context/route.tsx +0 -0
- /package/src/{tui → interfaces/tui}/context/sdk.tsx +0 -0
- /package/src/{tui → interfaces/tui}/context/sync-v2.tsx +0 -0
- /package/src/{tui → interfaces/tui}/context/sync.tsx +0 -0
- /package/src/{tui → interfaces/tui}/context/theme/aura.json +0 -0
- /package/src/{tui → interfaces/tui}/context/theme/ayu.json +0 -0
- /package/src/{tui → interfaces/tui}/context/theme/carbonfox.json +0 -0
- /package/src/{tui → interfaces/tui}/context/theme/catppuccin-frappe.json +0 -0
- /package/src/{tui → interfaces/tui}/context/theme/catppuccin-macchiato.json +0 -0
- /package/src/{tui → interfaces/tui}/context/theme/catppuccin.json +0 -0
- /package/src/{tui → interfaces/tui}/context/theme/cobalt2.json +0 -0
- /package/src/{tui → interfaces/tui}/context/theme/cursor.json +0 -0
- /package/src/{tui → interfaces/tui}/context/theme/dracula.json +0 -0
- /package/src/{tui → interfaces/tui}/context/theme/everforest.json +0 -0
- /package/src/{tui → interfaces/tui}/context/theme/flexoki.json +0 -0
- /package/src/{tui → interfaces/tui}/context/theme/github.json +0 -0
- /package/src/{tui → interfaces/tui}/context/theme/gruvbox.json +0 -0
- /package/src/{tui → interfaces/tui}/context/theme/kanagawa.json +0 -0
- /package/src/{tui → interfaces/tui}/context/theme/lucent-orng.json +0 -0
- /package/src/{tui → interfaces/tui}/context/theme/material.json +0 -0
- /package/src/{tui → interfaces/tui}/context/theme/matrix.json +0 -0
- /package/src/{tui → interfaces/tui}/context/theme/mercury.json +0 -0
- /package/src/{tui → interfaces/tui}/context/theme/monokai.json +0 -0
- /package/src/{tui → interfaces/tui}/context/theme/nightowl.json +0 -0
- /package/src/{tui → interfaces/tui}/context/theme/nord.json +0 -0
- /package/src/{tui → interfaces/tui}/context/theme/one-dark.json +0 -0
- /package/src/{tui → interfaces/tui}/context/theme/opencode.json +0 -0
- /package/src/{tui → interfaces/tui}/context/theme/orng.json +0 -0
- /package/src/{tui → interfaces/tui}/context/theme/osaka-jade.json +0 -0
- /package/src/{tui → interfaces/tui}/context/theme/palenight.json +0 -0
- /package/src/{tui → interfaces/tui}/context/theme/rosepine.json +0 -0
- /package/src/{tui → interfaces/tui}/context/theme/solarized.json +0 -0
- /package/src/{tui → interfaces/tui}/context/theme/synthwave84.json +0 -0
- /package/src/{tui → interfaces/tui}/context/theme/tokyonight.json +0 -0
- /package/src/{tui → interfaces/tui}/context/theme/vercel.json +0 -0
- /package/src/{tui → interfaces/tui}/context/theme/vesper.json +0 -0
- /package/src/{tui → interfaces/tui}/context/theme/zenburn.json +0 -0
- /package/src/{tui → interfaces/tui}/context/theme.tsx +0 -0
- /package/src/{tui → interfaces/tui}/context/tui-config.tsx +0 -0
- /package/src/{tui → interfaces/tui}/event.ts +0 -0
- /package/src/{tui → interfaces/tui}/feature-plugins/home/footer.tsx +0 -0
- /package/src/{tui → interfaces/tui}/feature-plugins/home/tips-view.tsx +0 -0
- /package/src/{tui → interfaces/tui}/feature-plugins/home/tips.tsx +0 -0
- /package/src/{tui → interfaces/tui}/feature-plugins/sidebar/context.tsx +0 -0
- /package/src/{tui → interfaces/tui}/feature-plugins/sidebar/files.tsx +0 -0
- /package/src/{tui → interfaces/tui}/feature-plugins/sidebar/footer.tsx +0 -0
- /package/src/{tui → interfaces/tui}/feature-plugins/sidebar/lsp.tsx +0 -0
- /package/src/{tui → interfaces/tui}/feature-plugins/sidebar/mcp.tsx +0 -0
- /package/src/{tui → interfaces/tui}/feature-plugins/sidebar/todo.tsx +0 -0
- /package/src/{tui → interfaces/tui}/feature-plugins/system/plugins.tsx +0 -0
- /package/src/{tui → interfaces/tui}/feature-plugins/system/session-v2.tsx +0 -0
- /package/src/{tui → interfaces/tui}/feature-plugins/system/which-key.tsx +0 -0
- /package/src/{tui → interfaces/tui}/keymap.tsx +0 -0
- /package/src/{tui → interfaces/tui}/layer.ts +0 -0
- /package/src/{tui → interfaces/tui}/plugin/api.tsx +0 -0
- /package/src/{tui → interfaces/tui}/plugin/command-shim.ts +0 -0
- /package/src/{tui → interfaces/tui}/plugin/internal.ts +0 -0
- /package/src/{tui → interfaces/tui}/plugin/runtime.ts +0 -0
- /package/src/{tui → interfaces/tui}/plugin/slots.tsx +0 -0
- /package/src/{tui → interfaces/tui}/routes/home.tsx +0 -0
- /package/src/{tui → interfaces/tui}/routes/session/dialog-fork-from-timeline.tsx +0 -0
- /package/src/{tui → interfaces/tui}/routes/session/dialog-message.tsx +0 -0
- /package/src/{tui → interfaces/tui}/routes/session/dialog-subagent.tsx +0 -0
- /package/src/{tui → interfaces/tui}/routes/session/dialog-timeline.tsx +0 -0
- /package/src/{tui → interfaces/tui}/routes/session/footer.tsx +0 -0
- /package/src/{tui → interfaces/tui}/routes/session/permission.tsx +0 -0
- /package/src/{tui → interfaces/tui}/routes/session/question.tsx +0 -0
- /package/src/{tui → interfaces/tui}/routes/session/sidebar.tsx +0 -0
- /package/src/{tui → interfaces/tui}/routes/session/subagent-footer.tsx +0 -0
- /package/src/{tui → interfaces/tui}/run.ts +0 -0
- /package/src/{tui → interfaces/tui}/thread.ts +0 -0
- /package/src/{tui → interfaces/tui}/ui/dialog-alert.tsx +0 -0
- /package/src/{tui → interfaces/tui}/ui/dialog-confirm.tsx +0 -0
- /package/src/{tui → interfaces/tui}/ui/dialog-export-options.tsx +0 -0
- /package/src/{tui → interfaces/tui}/ui/dialog-help.tsx +0 -0
- /package/src/{tui → interfaces/tui}/ui/dialog-prompt.tsx +0 -0
- /package/src/{tui → interfaces/tui}/ui/dialog-select.tsx +0 -0
- /package/src/{tui → interfaces/tui}/ui/dialog.tsx +0 -0
- /package/src/{tui → interfaces/tui}/ui/link.tsx +0 -0
- /package/src/{tui → interfaces/tui}/ui/spinner.ts +0 -0
- /package/src/{tui → interfaces/tui}/ui/toast.tsx +0 -0
- /package/src/{tui → interfaces/tui}/util/editor.ts +0 -0
- /package/src/{tui → interfaces/tui}/util/model.ts +0 -0
- /package/src/{tui → interfaces/tui}/util/provider-origin.ts +0 -0
- /package/src/{tui → interfaces/tui}/util/revert-diff.ts +0 -0
- /package/src/{tui → interfaces/tui}/util/scroll.ts +0 -0
- /package/src/{tui → interfaces/tui}/util/selection.ts +0 -0
- /package/src/{tui → interfaces/tui}/util/signal.ts +0 -0
- /package/src/{tui → interfaces/tui}/util/sound.ts +0 -0
- /package/src/{tui → interfaces/tui}/util/transcript.ts +0 -0
- /package/src/{tui → interfaces/tui}/validate-session.ts +0 -0
- /package/src/{tui → interfaces/tui}/win32.ts +0 -0
- /package/src/{tui → interfaces/tui}/worker.ts +0 -0
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: apx-mcp
|
|
3
|
+
description: How to register, list, debug, and scope MCP servers in APX. Use BEFORE adding any MCP — three scopes (shared/runtime/global) with different commit and secrecy semantics.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# apx-mcp
|
|
7
|
+
|
|
8
|
+
APX exposes Model Context Protocol (MCP) servers to agents. Three scopes, each in a different file with different rules:
|
|
9
|
+
|
|
10
|
+
| Scope | File | Committed? | Secrets OK? | When |
|
|
11
|
+
|---|---|---|---|---|
|
|
12
|
+
| `shared` | `<repo>/.apc/mcps.json` | yes | **no** | Team-wide MCPs (filesystem, brave, github public) |
|
|
13
|
+
| `runtime` | `~/.apx/projects/<apxId>/mcps.json` (chmod 0600) | no | yes | Per-project local — tokens, machine-specific endpoints |
|
|
14
|
+
| `global` | `~/.apx/mcps.json` | n/a | yes | Machine-wide — not tied to any project |
|
|
15
|
+
|
|
16
|
+
Resolution priority when a name appears in more than one: **runtime > shared > global**. Conflicts surface in `apx mcp check`.
|
|
17
|
+
|
|
18
|
+
## Concrete CLI calls
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
# List (all scopes, this is the default)
|
|
22
|
+
apx mcp list --project iacrmar
|
|
23
|
+
apx mcp list --scope runtime --project iacrmar
|
|
24
|
+
apx mcp list --scope shared --project iacrmar
|
|
25
|
+
apx mcp list --scope global
|
|
26
|
+
|
|
27
|
+
# Inspect sources and conflicts
|
|
28
|
+
apx mcp check --project iacrmar
|
|
29
|
+
|
|
30
|
+
# Add — shared (commit to repo)
|
|
31
|
+
apx mcp add filesystem --command npx --project iacrmar \
|
|
32
|
+
-- -y @modelcontextprotocol/server-filesystem .
|
|
33
|
+
|
|
34
|
+
# Add — runtime (per-project, local, secrets safe)
|
|
35
|
+
apx mcp add github --scope runtime --project iacrmar \
|
|
36
|
+
--command npx --env GITHUB_TOKEN=ghp_xxx \
|
|
37
|
+
-- -y @modelcontextprotocol/server-github
|
|
38
|
+
|
|
39
|
+
# Add — global (machine-wide, not tied to a project)
|
|
40
|
+
apx mcp add brave --scope global \
|
|
41
|
+
--command npx --env BRAVE_API_KEY=BSAxxx \
|
|
42
|
+
-- -y @modelcontextprotocol/server-brave-search
|
|
43
|
+
|
|
44
|
+
# Remove (--scope optional; defaults to where the MCP lives)
|
|
45
|
+
apx mcp remove filesystem --project iacrmar
|
|
46
|
+
apx mcp remove github --scope runtime --project iacrmar
|
|
47
|
+
|
|
48
|
+
# Toggle (modifies whichever scope owns it)
|
|
49
|
+
apx mcp enable filesystem --project iacrmar
|
|
50
|
+
apx mcp disable filesystem --project iacrmar
|
|
51
|
+
|
|
52
|
+
# Call a tool through the daemon (useful for debugging)
|
|
53
|
+
apx mcp tools <name> # list tools the server exposes
|
|
54
|
+
apx mcp run filesystem read_file '{"path":"README.md"}'
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## When the user asks for a new MCP
|
|
58
|
+
|
|
59
|
+
Decision tree:
|
|
60
|
+
1. **Has secrets / tokens?** → `runtime` scope. Always.
|
|
61
|
+
2. **Is part of the project's shared dev environment?** → `shared` (committed).
|
|
62
|
+
3. **Used across all your projects?** → `global`.
|
|
63
|
+
|
|
64
|
+
Default if none is obvious: `shared` when inside an APC project, `global` outside.
|
|
65
|
+
|
|
66
|
+
## Common command shapes by transport
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
# stdio MCP (most common — npx, uvx, node, python)
|
|
70
|
+
apx mcp add <name> --command npx -- -y <package-or-flag-list>
|
|
71
|
+
apx mcp add <name> --command uvx -- <python-cli-name>
|
|
72
|
+
apx mcp add <name> --command python -- /abs/path/to/server.py
|
|
73
|
+
|
|
74
|
+
# Env vars (one --env per var)
|
|
75
|
+
apx mcp add <name> --command npx \
|
|
76
|
+
--env GITHUB_TOKEN=ghp_xxx \
|
|
77
|
+
--env GITHUB_OWNER=manuel \
|
|
78
|
+
-- -y @modelcontextprotocol/server-github
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
Anything after `--` is forwarded verbatim as args to the command. Quote carefully.
|
|
82
|
+
|
|
83
|
+
## Anti-examples
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
# DON'T put tokens in shared scope. It commits.
|
|
87
|
+
apx mcp add github --scope shared --env GITHUB_TOKEN=ghp_xxx ...
|
|
88
|
+
# ↑ Token ends up in .apc/mcps.json in your repo. Use --scope runtime.
|
|
89
|
+
|
|
90
|
+
# DON'T remove an MCP from the wrong scope.
|
|
91
|
+
apx mcp remove github # if github lives in runtime, this errors with a hint
|
|
92
|
+
# ↑ Daemon returns 409 with the right scope to use.
|
|
93
|
+
|
|
94
|
+
# DON'T expect IDE-foreign configs (~/.cursor/mcps.json, ~/.claude/mcps.json) to be
|
|
95
|
+
# removable via apx mcp remove. APX reads them as advisory (source=cursor/claude/etc)
|
|
96
|
+
# but won't write them. Edit the IDE config directly.
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
## Debugging connection issues
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
apx mcp check --project iacrmar # what scopes APX sees + which files exist
|
|
103
|
+
apx mcp tools <name> # forces the daemon to actually spawn the server
|
|
104
|
+
apx log -f # tail unified log for spawn errors
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
A server that "doesn't show tools" usually means: the command failed to start (env vars missing, package not found), or the server crashed during initialize. The unified log has the stderr buffer.
|
|
108
|
+
|
|
109
|
+
## Don't
|
|
110
|
+
|
|
111
|
+
- Don't mix scopes for the same MCP name unless you actually want shadowing. The result is "the one with highest priority wins, others stay invisible."
|
|
112
|
+
- Don't edit `~/.apx/projects/<id>/mcps.json` by hand; use `apx mcp add --scope runtime`. The file is chmod 0600 — the CLI keeps it that way.
|
|
113
|
+
- Don't add tokens via `--env KEY=` inline if your shell history is public. Set them in your shell first, then `--env KEY=$KEY`.
|
|
114
|
+
- Don't forget to `apx daemon reload` after editing config — actually `apx mcp` does this for you, but if you hand-edited the JSON, it's manual.
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: apx-mcp-builder
|
|
3
|
+
scope: internal
|
|
4
|
+
description: How to build a Model Context Protocol (MCP) server from scratch and wire it into APX. Load when the user asks "creame un MCP server", "necesito una herramienta para X", or you need to expose a new tool surface to agents. Covers the JSON-RPC stdio protocol, FastMCP Python / TypeScript SDK shapes, and APX-specific registration.
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# apx-mcp-builder
|
|
8
|
+
|
|
9
|
+
A **Model Context Protocol** server is a tiny process the agent talks to over stdio JSON-RPC. APX spawns it (via `apx mcp add`), discovers its tools (`tools/list`), and lets the super-agent call them by name. This skill is for **authoring a new MCP server**. To **add an existing one** to APX, load `apx-mcp` instead.
|
|
10
|
+
|
|
11
|
+
## The minimum surface
|
|
12
|
+
|
|
13
|
+
An MCP server must implement four RPC methods:
|
|
14
|
+
|
|
15
|
+
| Method | Purpose | Returns |
|
|
16
|
+
|---|---|---|
|
|
17
|
+
| `initialize` | Handshake. APX sends protocol version + capabilities. | Server's capabilities. |
|
|
18
|
+
| `tools/list` | Enumerate available tools. | `{ tools: [{name, description, inputSchema}] }` |
|
|
19
|
+
| `tools/call` | Run one tool. APX sends `{ name, arguments }`. | `{ content: [...], isError? }` |
|
|
20
|
+
| `notifications/initialized` | One-way; APX signals it's done initializing. | — |
|
|
21
|
+
|
|
22
|
+
JSON-RPC 2.0 framing over stdio. Each message: `Content-Length: N\r\n\r\n<JSON>`. The `@modelcontextprotocol/sdk` (TS) and `fastmcp` / `mcp` (Python) packages handle framing for you.
|
|
23
|
+
|
|
24
|
+
## Pick a stack
|
|
25
|
+
|
|
26
|
+
| Stack | When |
|
|
27
|
+
|---|---|
|
|
28
|
+
| **Python + FastMCP** | Fastest path. Decorator-based. Great if your tools wrap pip libs. |
|
|
29
|
+
| **Node + @modelcontextprotocol/sdk** | When the tool calls Node-only libs, or you want zero install (`npx -y`). |
|
|
30
|
+
| Raw JSON-RPC | Only if you have an existing daemon you want to expose. Otherwise SDK. |
|
|
31
|
+
|
|
32
|
+
## Python (FastMCP) — minimum viable server
|
|
33
|
+
|
|
34
|
+
```python
|
|
35
|
+
# my_server.py
|
|
36
|
+
from mcp.server.fastmcp import FastMCP
|
|
37
|
+
|
|
38
|
+
mcp = FastMCP("my-server")
|
|
39
|
+
|
|
40
|
+
@mcp.tool()
|
|
41
|
+
def search_inventory(query: str, limit: int = 10) -> list[dict]:
|
|
42
|
+
"""Search the inventory by free-text query. Returns matching SKUs."""
|
|
43
|
+
# ... your logic ...
|
|
44
|
+
return [{"sku": "abc", "title": "..."}]
|
|
45
|
+
|
|
46
|
+
@mcp.tool()
|
|
47
|
+
def get_stock(sku: str) -> dict:
|
|
48
|
+
"""Return the current stock count for a SKU."""
|
|
49
|
+
return {"sku": sku, "stock": 42}
|
|
50
|
+
|
|
51
|
+
if __name__ == "__main__":
|
|
52
|
+
mcp.run() # stdio transport by default
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
Install:
|
|
56
|
+
```bash
|
|
57
|
+
pip install fastmcp
|
|
58
|
+
# or via uv (recommended):
|
|
59
|
+
uv tool install fastmcp
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
Register in APX:
|
|
63
|
+
```bash
|
|
64
|
+
apx mcp add my-server \
|
|
65
|
+
--command uv --project iacrmar \
|
|
66
|
+
-- run python /abs/path/my_server.py
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## Node (TypeScript SDK) — minimum viable server
|
|
70
|
+
|
|
71
|
+
```typescript
|
|
72
|
+
// my-server.ts
|
|
73
|
+
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
74
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
75
|
+
import {
|
|
76
|
+
ListToolsRequestSchema,
|
|
77
|
+
CallToolRequestSchema,
|
|
78
|
+
} from "@modelcontextprotocol/sdk/types.js";
|
|
79
|
+
|
|
80
|
+
const server = new Server(
|
|
81
|
+
{ name: "my-server", version: "0.1.0" },
|
|
82
|
+
{ capabilities: { tools: {} } }
|
|
83
|
+
);
|
|
84
|
+
|
|
85
|
+
server.setRequestHandler(ListToolsRequestSchema, async () => ({
|
|
86
|
+
tools: [
|
|
87
|
+
{
|
|
88
|
+
name: "search_inventory",
|
|
89
|
+
description: "Search the inventory by free-text query.",
|
|
90
|
+
inputSchema: {
|
|
91
|
+
type: "object",
|
|
92
|
+
properties: {
|
|
93
|
+
query: { type: "string" },
|
|
94
|
+
limit: { type: "number", default: 10 },
|
|
95
|
+
},
|
|
96
|
+
required: ["query"],
|
|
97
|
+
},
|
|
98
|
+
},
|
|
99
|
+
],
|
|
100
|
+
}));
|
|
101
|
+
|
|
102
|
+
server.setRequestHandler(CallToolRequestSchema, async (req) => {
|
|
103
|
+
if (req.params.name === "search_inventory") {
|
|
104
|
+
const { query, limit = 10 } = req.params.arguments as any;
|
|
105
|
+
// ... your logic ...
|
|
106
|
+
return {
|
|
107
|
+
content: [{ type: "text", text: JSON.stringify([{ sku: "abc" }]) }],
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
throw new Error(`unknown tool: ${req.params.name}`);
|
|
111
|
+
});
|
|
112
|
+
|
|
113
|
+
await server.connect(new StdioServerTransport());
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
Register:
|
|
117
|
+
```bash
|
|
118
|
+
apx mcp add my-server \
|
|
119
|
+
--command npx --project iacrmar \
|
|
120
|
+
-- -y my-server-package
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
## Tool design rules
|
|
124
|
+
|
|
125
|
+
1. **Names are snake_case**, verbs preferred: `search_inventory`, not `inventorySearch`.
|
|
126
|
+
2. **inputSchema is JSON Schema draft-07**. Be strict: `required` matters. The agent reads the schema; vague schemas → bad calls.
|
|
127
|
+
3. **Descriptions read like a CLI man-page**. Each tool's description and each param's description gets surfaced to the model. Make them count.
|
|
128
|
+
4. **Return structured data**, not prose. MCP `content` can be text but the convention is to put JSON inside a text block so the agent can parse it back. For images, use the `image` content type.
|
|
129
|
+
5. **Errors are errors, not silent empty**. `throw new Error(...)` propagates as `isError: true` and the agent will see it. Empty results = "found nothing"; that's a different signal.
|
|
130
|
+
|
|
131
|
+
## Env vars and secrets
|
|
132
|
+
|
|
133
|
+
Pass them at registration time via `--env`:
|
|
134
|
+
|
|
135
|
+
```bash
|
|
136
|
+
apx mcp add github \
|
|
137
|
+
--scope runtime --project iacrmar \
|
|
138
|
+
--command npx \
|
|
139
|
+
--env GITHUB_TOKEN=ghp_xxx \
|
|
140
|
+
--env GITHUB_OWNER=manuel \
|
|
141
|
+
-- -y @modelcontextprotocol/server-github
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
`--scope runtime` writes to `~/.apx/projects/<id>/mcps.json` (chmod 0600, never committed). NEVER use `--scope shared` for tokens — that file lives in `.apc/` and gets committed.
|
|
145
|
+
|
|
146
|
+
## Anti-examples
|
|
147
|
+
|
|
148
|
+
```python
|
|
149
|
+
# DON'T expose every internal function as a tool.
|
|
150
|
+
# A server with 40 tools is a context budget killer. Pick 5-10 high-value
|
|
151
|
+
# tools per server; split into multiple servers if you have more.
|
|
152
|
+
|
|
153
|
+
# DON'T return giant blobs in `content`. The agent has to read all of it
|
|
154
|
+
# every turn. Paginate (`offset`, `limit`) and let the agent ask for more.
|
|
155
|
+
|
|
156
|
+
# DON'T mix stdio + HTTP transports in the same process. Pick one. APX
|
|
157
|
+
# spawns stdio servers; if you want HTTP, use `url:` in mcps.json instead
|
|
158
|
+
# of `command:`.
|
|
159
|
+
|
|
160
|
+
# DON'T print to stdout other than JSON-RPC frames. Any stray print()
|
|
161
|
+
# corrupts the protocol — use stderr for logs. (FastMCP / the SDK handle
|
|
162
|
+
# this for you, but `print("debug")` in a tool body breaks everything.)
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
## Common debugging path
|
|
166
|
+
|
|
167
|
+
```bash
|
|
168
|
+
# 1. Does the server start?
|
|
169
|
+
apx mcp tools my-server # forces a spawn + tools/list
|
|
170
|
+
|
|
171
|
+
# 2. Are there spawn errors?
|
|
172
|
+
apx log -f # tail the daemon log — stderr lands here
|
|
173
|
+
|
|
174
|
+
# 3. Does a tool work in isolation?
|
|
175
|
+
apx mcp run my-server search_inventory '{"query":"shoes"}'
|
|
176
|
+
|
|
177
|
+
# 4. Are env vars set?
|
|
178
|
+
apx mcp check --project iacrmar
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
## Don't
|
|
182
|
+
|
|
183
|
+
- Don't reinvent the SDK framing. FastMCP / @modelcontextprotocol/sdk handle the stdio JSON-RPC dance — bypass only if you really need to.
|
|
184
|
+
- Don't make tools that require interactive input. MCP is one-shot per call. If you need a flow, design separate tools for each step.
|
|
185
|
+
- Don't ship a server without a README in the repo. Future-you will not remember which env vars matter.
|
|
186
|
+
- Don't expect APX to retry MCP errors automatically. The agent sees the error and decides.
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: apx-project
|
|
3
|
+
description: How to register, list, configure, and manage APX projects. Use BEFORE asking the user "which project?" — registered projects are listable; per-project config (model override, etc) is set with dotted-key PATCH.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# apx-project
|
|
7
|
+
|
|
8
|
+
A project in APX is an APC-compliant folder on disk (`AGENTS.md` + `.apc/project.json`). Once registered, APX keeps runtime state (sessions, messages, routines, tasks, MCPs) under `~/.apx/projects/<apxId>/`.
|
|
9
|
+
|
|
10
|
+
## The two kinds of projects
|
|
11
|
+
|
|
12
|
+
- **`default`** (id=0): the super-agent's scratch workspace under `~/.apx/projects/default/`. Used when the user has no project named, has no project registered, or explicitly addresses "apx itself". Don't use it for real work — it's shared.
|
|
13
|
+
- **registered** (id=1+): real projects, each rooted at a path the user owns.
|
|
14
|
+
|
|
15
|
+
## Concrete CLI calls
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
# Register
|
|
19
|
+
apx project add /path/to/repo # registers; reads AGENTS.md + .apc/project.json
|
|
20
|
+
apx project add . # current dir
|
|
21
|
+
|
|
22
|
+
# Inspect
|
|
23
|
+
apx project list # name, id, path, agents count
|
|
24
|
+
apx project list -l # long form, includes storagePath
|
|
25
|
+
|
|
26
|
+
# Remove / rebuild
|
|
27
|
+
apx project remove <id|name|path>
|
|
28
|
+
apx project rebuild <id|name|path> # force re-scan of .apc/ on disk
|
|
29
|
+
|
|
30
|
+
# Per-project config — dotted keys, lives in <repo>/.apc/config.json
|
|
31
|
+
apx project config show <project> # effective + project_only
|
|
32
|
+
apx project config show <project> --key super_agent.model # one key
|
|
33
|
+
apx project config set <project> super_agent.model groq:llama-3.3-70b-versatile
|
|
34
|
+
apx project config set <project> super_agent.permission_mode total
|
|
35
|
+
apx project config set <project> telegram.route_to_agent reviewer
|
|
36
|
+
apx project config unset <project> super_agent.model # back to global
|
|
37
|
+
apx project config edit <project> # opens $EDITOR on project_only JSON
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Every write to `project config` triggers `POST /admin/reload` so the daemon picks up the change without restart.
|
|
41
|
+
|
|
42
|
+
## Resolution of `<project>` argument
|
|
43
|
+
|
|
44
|
+
Accepted forms:
|
|
45
|
+
- numeric id: `1`
|
|
46
|
+
- exact name from `.apc/project.json`: `iacrmar`
|
|
47
|
+
- absolute path: `/Volumes/SSDT7Shield/trabajos_proyectos/iacrmar`
|
|
48
|
+
- relative path (from cwd) — resolved before matching.
|
|
49
|
+
|
|
50
|
+
The CLI calls `resolveProjectId()` which does fuzzy id-or-name-or-path matching. If you got "project not found", `apx project list` first.
|
|
51
|
+
|
|
52
|
+
## What lives where
|
|
53
|
+
|
|
54
|
+
```
|
|
55
|
+
<repo>/ ← project root the user owns
|
|
56
|
+
├── AGENTS.md ← agent definitions (committed)
|
|
57
|
+
└── .apc/
|
|
58
|
+
├── project.json ← { apxId, name, ... }
|
|
59
|
+
├── agents/<slug>.md
|
|
60
|
+
├── agents/<slug>/memory.md
|
|
61
|
+
├── skills/<slug>.md or <slug>/SKILL.md
|
|
62
|
+
├── mcps.json ← shared MCPs (committed)
|
|
63
|
+
├── commands/ ← custom slash-commands
|
|
64
|
+
└── config.json ← project-only overrides (this is what `project config` edits)
|
|
65
|
+
|
|
66
|
+
~/.apx/projects/<apxId>/ ← runtime state (never committed)
|
|
67
|
+
├── messages/YYYY-MM-DD.jsonl
|
|
68
|
+
├── agents/<slug>/{sessions/, conversations/}
|
|
69
|
+
├── routines.json
|
|
70
|
+
├── tasks/YYYY-MM.jsonl
|
|
71
|
+
├── artifacts/
|
|
72
|
+
└── mcps.json ← per-project runtime MCPs (local, may hold tokens)
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## Anti-example
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
# DON'T hand-write AGENTS.md + .apc/project.json with shell tools.
|
|
79
|
+
echo "Hello" > /path/repo/AGENTS.md
|
|
80
|
+
mkdir -p /path/repo/.apc
|
|
81
|
+
echo "{...}" > /path/repo/.apc/project.json
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
There's no scaffold validation, the project will appear registered but break on the first `apx project rebuild`. Use `apx init <path>` (project scaffold) and then `apx project add <path>`.
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
# DON'T set super_agent.model to a model that's not in the engine you have keys for.
|
|
88
|
+
apx project config set iacrmar super_agent.model gemini:gemini-1.5-pro
|
|
89
|
+
# ↑ Will fail at first call unless engines.gemini.api_key is set.
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
## When asked "what projects are there?"
|
|
93
|
+
|
|
94
|
+
Don't ask. Call `list_projects` (tool) or `apx project list`. Same for "which agents does X have?" → `list_agents` / `apx agent list --project X`.
|
|
95
|
+
|
|
96
|
+
## Don't
|
|
97
|
+
|
|
98
|
+
- Don't operate on the default project (id=0) as if it were the user's main work. It's a scratch space for super-agent state.
|
|
99
|
+
- Don't put secrets in `.apc/config.json` — it's committed. Put them in `~/.apx/config.json` (machine-local) under `engines.*` or `voice.tts.*`.
|
|
100
|
+
- Don't move a project's `.apc/` folder without re-running `apx project rebuild` afterwards. The `apxId` will be stale.
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: apx-routine
|
|
3
|
+
description: How to create, edit, run, and debug APX routines. Use BEFORE writing any `apx routine add` command — schedule grammar, kind selection, pre/post commands, and the gotchas that produce double-replies.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# apx-routine
|
|
7
|
+
|
|
8
|
+
A routine is a scheduled APX task. APX runs the scheduler tick every 5s and fires routines that are due. Each routine has a `kind`, a `schedule`, an optional `spec`, and optional `pre_commands` / `post_commands` shell hooks.
|
|
9
|
+
|
|
10
|
+
## When to use which `kind`
|
|
11
|
+
|
|
12
|
+
| Kind | Tools? | Description |
|
|
13
|
+
|---|---|---|
|
|
14
|
+
| `heartbeat` | no | Logs a marker message. Useful as a "still alive" ping. No LLM call. |
|
|
15
|
+
| `shell` | no | Pure shell command. No LLM. Stdout captured. |
|
|
16
|
+
| `exec_agent` | **no tools** | Loads a project agent's system prompt, sends `spec.prompt` to the engine, returns plain text. Single LLM call. |
|
|
17
|
+
| `super_agent` | **all tools** | Runs the APX default agent (super-agent mode) with the full tool registry. Multi-iteration tool loop. |
|
|
18
|
+
| `telegram` | n/a | Sends a hardcoded text via the Telegram plugin. |
|
|
19
|
+
|
|
20
|
+
**Picking rule of thumb**:
|
|
21
|
+
- Just need text from a model? → `exec_agent`.
|
|
22
|
+
- Need orchestration (call MCPs, write files, call other agents, send messages with logic)? → `super_agent`.
|
|
23
|
+
- Pure shell (curl + jq + write somewhere)? → `shell`.
|
|
24
|
+
- Periodic Telegram poke with fixed text? → `telegram`.
|
|
25
|
+
|
|
26
|
+
## Schedule grammar
|
|
27
|
+
|
|
28
|
+
- `every:<N><unit>` — `every:30s`, `every:5m`, `every:24h`, `every:7d`. **Most common.**
|
|
29
|
+
- `once:<iso-8601>` — `once:2026-12-01T08:00:00Z`. Fires once at that instant, then disabled.
|
|
30
|
+
- Cron — `*/5 * * * *`, `0 8 * * *`. Standard 5-field. Use only if you really need cron expressions.
|
|
31
|
+
|
|
32
|
+
## Anatomy of a routine
|
|
33
|
+
|
|
34
|
+
```json
|
|
35
|
+
{
|
|
36
|
+
"name": "weather-bariloche",
|
|
37
|
+
"kind": "exec_agent",
|
|
38
|
+
"schedule": "every:24h",
|
|
39
|
+
"spec": { "agent": "default", "prompt": "Escribí un saludo breve..." },
|
|
40
|
+
"pre_commands": ["curl -s 'https://wttr.in/Bariloche?format=...'"],
|
|
41
|
+
"post_commands": ["apx telegram send \"$APX_LLM_OUTPUT\""],
|
|
42
|
+
"enabled": true,
|
|
43
|
+
"skip_prompt_on": "signal"
|
|
44
|
+
}
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
**The pipeline**:
|
|
48
|
+
1. `pre_commands` run sequentially. Their combined stdout becomes `{{pre_output}}` substitutable in `spec.prompt`, and `$APX_PRE_OUTPUT` env var available to `post_commands`. Also written to `$APX_PRE_OUTPUT_FILE` for big payloads.
|
|
49
|
+
2. The handler for `kind` runs. Its text result is exposed to post hooks as `$APX_LLM_OUTPUT`.
|
|
50
|
+
3. `post_commands` run sequentially with that env.
|
|
51
|
+
|
|
52
|
+
## Anti-example: the double-reply
|
|
53
|
+
|
|
54
|
+
```json
|
|
55
|
+
{
|
|
56
|
+
"kind": "super_agent", ← DON'T
|
|
57
|
+
"spec": { "prompt": "El clima es {{pre_output}}. Mandalo por Telegram." },
|
|
58
|
+
"post_commands": ["apx telegram send \"$APX_LLM_OUTPUT\""]
|
|
59
|
+
}
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
This sends **two** Telegram messages: one from the super-agent's `send_telegram` tool call, one from `post_commands`. The runner now auto-suppresses `send_telegram` when `post_commands` contains `apx telegram send` (see spec/done/01), but the cleaner fix is to use `exec_agent`:
|
|
63
|
+
|
|
64
|
+
```json
|
|
65
|
+
{
|
|
66
|
+
"kind": "exec_agent",
|
|
67
|
+
"spec": { "agent": "default", "prompt": "El clima es {{pre_output}}. Una frase amigable, sin saludos." },
|
|
68
|
+
"post_commands": ["apx telegram send \"$APX_LLM_OUTPUT\""]
|
|
69
|
+
}
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
One message, the model writes prose, the shell pipes it to Telegram.
|
|
73
|
+
|
|
74
|
+
## Concrete CLI calls
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
# List routines per project (always pin --project; never use default for real ones)
|
|
78
|
+
apx routine list --project iacrmar
|
|
79
|
+
|
|
80
|
+
# Inspect one
|
|
81
|
+
apx routine get weather-bariloche --project iacrmar
|
|
82
|
+
|
|
83
|
+
# Create — text-only exec_agent + shell delivery
|
|
84
|
+
apx routine add weather-bariloche \
|
|
85
|
+
--project iacrmar \
|
|
86
|
+
--kind exec_agent \
|
|
87
|
+
--schedule "every:24h" \
|
|
88
|
+
--spec '{"agent":"default","prompt":"El clima es {{pre_output}}. Una frase amigable."}' \
|
|
89
|
+
--pre-commands "curl -s 'https://wttr.in/Bariloche?format=%t+%C+viento+%w'" \
|
|
90
|
+
--post-commands 'apx telegram send "$APX_LLM_OUTPUT"'
|
|
91
|
+
|
|
92
|
+
# Create — super-agent with tools
|
|
93
|
+
apx routine add daily-status \
|
|
94
|
+
--project iacrmar \
|
|
95
|
+
--kind super_agent \
|
|
96
|
+
--schedule "0 9 * * *" \
|
|
97
|
+
--spec '{"prompt":"Listame proyectos con tasks pendientes y mandame por Telegram un resumen corto."}' \
|
|
98
|
+
--permission-mode automatico
|
|
99
|
+
|
|
100
|
+
# Toggle, run, remove
|
|
101
|
+
apx routine enable weather-bariloche --project iacrmar
|
|
102
|
+
apx routine disable weather-bariloche --project iacrmar
|
|
103
|
+
apx routine run weather-bariloche --project iacrmar # force-trigger now
|
|
104
|
+
apx routine remove weather-bariloche --project iacrmar
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
## `--project` is non-negotiable
|
|
108
|
+
|
|
109
|
+
Routines live in `~/.apx/projects/<apxId>/routines.json`. Without `--project`, the default project (id=0, the super-agent's scratch workspace) gets the routine — that is **not** a user project. Always pass `--project <name|id|path>`.
|
|
110
|
+
|
|
111
|
+
## `skip_prompt_on`
|
|
112
|
+
|
|
113
|
+
Controls what happens when `pre_commands` exit non-zero:
|
|
114
|
+
|
|
115
|
+
| Value | Behavior |
|
|
116
|
+
|---|---|
|
|
117
|
+
| `signal` (default) | Skip the LLM only on SIGINT/SIGTERM; non-zero exit still runs the LLM. |
|
|
118
|
+
| `pre_failure` | Skip LLM + post on any non-zero exit. |
|
|
119
|
+
| `pre_success` | Only run LLM if every pre command exits 0. Same as `pre_failure` for most cases. |
|
|
120
|
+
| `always` | Skip LLM unconditionally — useful when you want pure pre→post pipelines. |
|
|
121
|
+
| `never` | Always run, even if pre crashes. |
|
|
122
|
+
|
|
123
|
+
## Debugging a routine
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
apx routine history weather-bariloche --project iacrmar # last runs
|
|
127
|
+
apx log -f # tail unified log
|
|
128
|
+
apx messages tail --channel routine -n 20 # routine-channel messages
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
A routine that "sends nothing" most often means: (a) `enabled: false`, (b) `next_run_at` is in the future, (c) the LLM returned empty text — visible in `apx messages` or in the `result.text` of `apx routine run`.
|
|
132
|
+
|
|
133
|
+
## Don't
|
|
134
|
+
|
|
135
|
+
- Don't use `super_agent` when `exec_agent` would do. The super-agent loops, calls tools, costs more.
|
|
136
|
+
- Don't write `apx telegram send` inside a `super_agent` routine prompt — the agent will call `send_telegram` AND `post_commands` will fire. Pick one.
|
|
137
|
+
- Don't hardcode model names in `spec` unless you have a reason — the routine inherits `super_agent.model` (with router fallback) by default.
|
|
138
|
+
- Don't put credentials in routine `spec`. Put them in `~/.apx/config.json` engines and reference them by provider.
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: apx-runtime
|
|
3
|
+
description: How to call external coding CLIs (claude-code, codex, opencode, aider, cursor-agent, gemini-cli, qwen-code) from APX. Load when the user wants to delegate a task to another AI tool — APX builds the system prompt, spawns the CLI, captures the result.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# apx-runtime
|
|
7
|
+
|
|
8
|
+
A "runtime" in APX is an external AI coding CLI that APX can invoke headlessly. APX builds the agent's system prompt, spawns the CLI with the right flags, captures the stdout (and the external tool's session id when available), and stores the run metadata as a session file under `~/.apx/projects/<apxId>/agents/<slug>/sessions/` (runtime state — never committed). Some flows also link to the external engine's own transcript path.
|
|
9
|
+
|
|
10
|
+
## Supported runtimes
|
|
11
|
+
|
|
12
|
+
| id | binary | Headless flag |
|
|
13
|
+
|---|---|---|
|
|
14
|
+
| `claude-code` | `claude` | `-p "<prompt>" --append-system-prompt "<sys>" --output-format json` |
|
|
15
|
+
| `codex` | `codex` | `exec "<prompt>"` (works outside git repos) |
|
|
16
|
+
| `opencode` | `opencode` | non-interactive mode |
|
|
17
|
+
| `aider` | `aider` | `--message "<prompt>" --no-stream` |
|
|
18
|
+
| `cursor-agent` | `cursor-agent` | headless print mode |
|
|
19
|
+
| `gemini-cli` | `gemini` | headless prompt mode |
|
|
20
|
+
| `qwen-code` | `qwen-code` | passes system prompt separately |
|
|
21
|
+
|
|
22
|
+
`apx env detect` reports which are installed and reachable.
|
|
23
|
+
|
|
24
|
+
## Concrete CLI calls
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
# What's available on this machine
|
|
28
|
+
apx env detect
|
|
29
|
+
apx runtime list
|
|
30
|
+
|
|
31
|
+
# Run an agent through an external CLI
|
|
32
|
+
apx run reviewer --runtime claude-code "Review the diff in src/host/daemon/api/ for memory leaks"
|
|
33
|
+
apx run scratch --runtime codex "Refactor parseAgentsMd to use a state machine"
|
|
34
|
+
apx run scratch --runtime opencode "<prompt>"
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Behavior:
|
|
38
|
+
1. APX picks the project from `--project` or cwd.
|
|
39
|
+
2. Reads the agent's `AGENT.md` + memory + skills, builds the system prompt with `buildAgentSystem({ invocation: "runtime", runtime: "<id>" })`.
|
|
40
|
+
3. Spawns the CLI with the right flags. cwd = project path.
|
|
41
|
+
4. Captures stdout. If the runtime printed `APC_RESULT: <value>`, that's the structured result; else the first 200 chars of stdout.
|
|
42
|
+
5. Writes `~/.apx/projects/<apxId>/agents/<slug>/sessions/<YYYY-MM-DD>-<id>.md` with frontmatter linking back to the external tool's own session file (when available).
|
|
43
|
+
|
|
44
|
+
## Resuming an external session
|
|
45
|
+
|
|
46
|
+
After a `apx run`, the resulting APC session file references the external transcript:
|
|
47
|
+
|
|
48
|
+
```yaml
|
|
49
|
+
# ~/.apx/projects/<apxId>/agents/reviewer/sessions/2026-05-27-claude-code-abc123.md
|
|
50
|
+
---
|
|
51
|
+
external_session_path: /Users/.../.claude/projects/<...>/abc123.jsonl
|
|
52
|
+
runtime: claude-code
|
|
53
|
+
session_id: abc123
|
|
54
|
+
---
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
All session resume / get / continue / summarise operations live in the
|
|
58
|
+
**`apx-sessions`** skill. From here, the most common quick paths:
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
# Discover the id (or use the one printed by `apx run`)
|
|
62
|
+
apx sessions list --engine claude --project iacrmar
|
|
63
|
+
|
|
64
|
+
# Resume — apx auto-detects which engine owns the id
|
|
65
|
+
apx session resume <id>
|
|
66
|
+
apx session resume <id> --continue # spawn the native CLI to keep going
|
|
67
|
+
apx session resume <id> --summary # super-agent summary of the transcript
|
|
68
|
+
apx session resume <id> --into apx:<slug> # seed a new APX session with the summary
|
|
69
|
+
|
|
70
|
+
# Just read the transcript
|
|
71
|
+
apx session get <id> --any --full # or --engine claude --tail 16k
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
See the `apx-sessions` skill for the full flag reference, collision handling,
|
|
75
|
+
and daemon-vs-no-daemon matrix.
|
|
76
|
+
|
|
77
|
+
## APC_RESULT contract
|
|
78
|
+
|
|
79
|
+
When you want APX to capture a structured value from the external runtime, instruct the runtime via the prompt to print on its last line:
|
|
80
|
+
|
|
81
|
+
```
|
|
82
|
+
APC_RESULT: <one-line value>
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
APX `extractApfResult()` parses that and stores it as the session's `result` field. Useful for return values from automation.
|
|
86
|
+
|
|
87
|
+
## Anti-examples
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
# DON'T expect `apx run` to be interactive. It's headless.
|
|
91
|
+
# For interactive, just invoke the CLI directly (e.g. `claude` for Claude Code).
|
|
92
|
+
|
|
93
|
+
# DON'T pass huge prompts via the command line (shell args have limits).
|
|
94
|
+
# For prompts > ~10KB, use a stdin-friendly route or write a temp file and reference it.
|
|
95
|
+
|
|
96
|
+
# DON'T forget that each runtime has its own model selection.
|
|
97
|
+
# APX passes the system prompt and the user prompt; it does NOT impose a model on
|
|
98
|
+
# the external CLI. The user's external CLI config (e.g. Claude Code's CLAUDE.md
|
|
99
|
+
# defaults) wins.
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
## When to use which
|
|
103
|
+
|
|
104
|
+
| You want | Pick |
|
|
105
|
+
|---|---|
|
|
106
|
+
| Pair-program with file edits and shell | `claude-code` if the user has Claude Code, else `codex` |
|
|
107
|
+
| Lightweight LLM run with no tools | `apx exec <agent> "<prompt>"` (no runtime needed) |
|
|
108
|
+
| The super-agent to call other agents | `call_agent` tool (in-process, no spawn) |
|
|
109
|
+
| Run something that needs persisted state across days | `apx run` with `claude-code` or `codex` (their sessions persist) |
|
|
110
|
+
|
|
111
|
+
## Don't
|
|
112
|
+
|
|
113
|
+
- Don't run untrusted prompts in `--runtime` of a CLI with broad tool permissions on the user's machine. The CLI may take file write or shell actions.
|
|
114
|
+
- Don't expect APX to track tool calls inside the external CLI's transcript. APX captures stdout and the external session path — that's it. Inspect the external transcript directly for tool-level audit.
|
|
115
|
+
- Don't pick a runtime the user doesn't have installed; `apx env detect` first if unsure.
|