@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,281 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: apx-sessions
|
|
3
|
+
description: "APX session management across engines (apx, claude, codex). Use when: finding a session by its title/topic without knowing the id (`apx session find`), listing sessions of one or every engine for a project, resuming a session by id without remembering which engine owns it, summarizing a Claude/Codex/APX transcript (`apx session summary`), asking a question about what happened in a past session (`apx session ask`), pulling a full transcript by id (useful when you want to read another tool's session from inside Claude), spawning the native CLI to continue a session (`claude --resume`, `codex resume`), or seeding a brand-new APX session with the summary of an old one. Triggers on: 'apx session find', 'find a session', 'buscar sesión', 'qué sesión era la de…', 'apx session ask', 'preguntale a la sesión', 'apx session summary', 'apx session resume', 'apx session get', 'apx sessions list', 'continue codex session', 'resume claude session', 'summarize session', 'get session transcript', 'continue session in apx', 'qué sesiones hay', 'traer sesión de codex', 'leer sesión de claude'. Do NOT activate for generic agent orchestration or `apx run` — that belongs to the parent `apx` skill."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# APX Sessions — cross-engine resume, summary, and continuation
|
|
7
|
+
|
|
8
|
+
APX treats every supported engine (apx, claude, codex, antigravity) as a session store. The commands in this skill let you list, read, summarize, and continue sessions **without caring which engine owns them**.
|
|
9
|
+
|
|
10
|
+
Engine storage locations APX scans:
|
|
11
|
+
|
|
12
|
+
| Engine | Where APX looks |
|
|
13
|
+
|-----------|-----------------------------------------------------------|
|
|
14
|
+
| apx | `~/.apx/projects/<apx_id>/agents/<slug>/sessions/*.md` |
|
|
15
|
+
| claude | `~/.claude/projects/<encoded-cwd>/<id>.jsonl` |
|
|
16
|
+
| codex | `~/.codex/sessions/YYYY/MM/DD/rollout-*.jsonl` |
|
|
17
|
+
| antigravity | detected only — listing not implemented yet |
|
|
18
|
+
|
|
19
|
+
Engines not installed on the machine are silently skipped. Detected-but-empty engines show `(sin nada)`.
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## The discovery flow (read this first)
|
|
24
|
+
|
|
25
|
+
You almost never start with a session id — you start with a vague memory of a *title* ("the one about improving the web UI"). Do **not** hand-roll `apx sessions list ... | grep`. The flow is three commands:
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
# 1. Turn a remembered title into an id (cross-engine, newest first)
|
|
29
|
+
apx session find "mejorar interfaz web"
|
|
30
|
+
|
|
31
|
+
# 2. Get the gist of that session
|
|
32
|
+
apx session summary <id>
|
|
33
|
+
|
|
34
|
+
# 3. Ask something specific about it
|
|
35
|
+
apx session ask <id> "¿qué cambios al sidebar quedaron pendientes?"
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
`find` prints a "Next:" block with the exact `summary`/`ask`/`resume` commands pre-filled with the top hit's id, so you can copy-paste straight through. **If you're tempted to grep session lists, use `find` instead.**
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## Finding a session by title or content (`apx session find`)
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
apx session find "<text>" # match titles across every engine
|
|
46
|
+
apx session find "<text>" --deep # also search inside transcript content
|
|
47
|
+
apx session find "<text>" --engine codex # restrict to one engine
|
|
48
|
+
apx session find "<text>" --dir /path/to/repo # scope to one project (reaches unregistered Claude projects)
|
|
49
|
+
apx session find "<text>" --limit 10 --json # cap results / machine-readable
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
- Default search is **title-only** (fast — titles are already indexed per engine).
|
|
53
|
+
- `--deep` reads each candidate transcript off disk and greps its content too. Slower; prefer combining it with `--engine`/`--dir` scope.
|
|
54
|
+
- Output is one row per match — `DATE | ENGINE | SESSION ID | TITLE` — newest first, followed by ready-to-run `summary`/`ask`/`resume` commands.
|
|
55
|
+
|
|
56
|
+
**Coverage caveat:** an engine can only be enumerated when APX can resolve a project's working directory. Codex always records it; APX uses registered projects; **Claude only lists folders that map back to a registered APX project** (its folder names are a lossy encoding of the cwd). If a Claude session is missing, scope with `--dir <path>` to reach it.
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
## Summarizing a session (`apx session summary`)
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
apx session summary <id> # auto-detect engine, print an LLM summary
|
|
64
|
+
apx session summary <id> --engine claude # skip auto-detect
|
|
65
|
+
apx session summary <id> --max-chunks 8 # bound cost on a huge transcript
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
This is the discoverable alias for `apx session resume <id> --summary`. It resolves the owning engine, then prints a 4-bullet summary plus next steps. **Requires the daemon + `super_agent.enabled`.**
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
## Asking questions about a session (`apx session ask`)
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
apx session ask <id> "¿qué decidimos sobre el sidebar?"
|
|
76
|
+
apx session ask <id> "what files were changed?" --max-chunks 30
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
RAG-lite Q&A over the transcript. Small transcripts are answered in one shot; large ones are **map-reduced**: each ~48 KB part is mined for question-relevant notes, then a final pass synthesizes the answer. **Requires the daemon + `super_agent.enabled`.**
|
|
80
|
+
|
|
81
|
+
How it works and its limits:
|
|
82
|
+
|
|
83
|
+
- Binary noise (base64 image payloads, which can be the majority of a JSONL transcript) is stripped before chunking.
|
|
84
|
+
- Coverage is capped at `--max-chunks` (default 20 ≈ ~960 KB). Bigger transcripts print a truncation warning — raise `--max-chunks` for full coverage at the cost of more (sequential) model calls.
|
|
85
|
+
- Speed scales with transcript size: a typical session answers in seconds; a multi-MB Codex rollout can take a couple of minutes.
|
|
86
|
+
- Output quality depends on the configured `super_agent.model`. Small/cheap models that "think" (e.g. gemini-2.5-flash) can return thin answers; the command already requests a raised output budget to compensate.
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## Listing sessions
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
# Every detected engine, every known project — broadest view
|
|
94
|
+
apx sessions list
|
|
95
|
+
|
|
96
|
+
# Every engine, scoped to one directory (no need for it to be a registered APX project)
|
|
97
|
+
apx sessions list --dir /path/to/repo
|
|
98
|
+
apx sessions list --project iacrmar # uses a registered APX project's path
|
|
99
|
+
|
|
100
|
+
# One engine, all projects
|
|
101
|
+
apx sessions list --engine claude
|
|
102
|
+
apx sessions list --engine codex
|
|
103
|
+
|
|
104
|
+
# One engine, one project
|
|
105
|
+
apx sessions list --engine claude --project iacrmar
|
|
106
|
+
apx sessions list --engine codex --dir /path/to/repo --limit 10
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
Output format per engine: `DATE | SESSION ID | TITLE`, newest first, plus the exact native-CLI resume command at the bottom.
|
|
110
|
+
|
|
111
|
+
When no `--engine` is passed, output is grouped by engine with `══ <Engine> ══` headers. Empty engines print `(sin nada)`; un-installed engines are not listed at all.
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
## Resuming a session by id (the headline command)
|
|
116
|
+
|
|
117
|
+
```bash
|
|
118
|
+
apx session resume <id>
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
What it does, in order:
|
|
122
|
+
|
|
123
|
+
1. Searches every detected engine for `<id>` (apx → claude → codex).
|
|
124
|
+
2. **One match** → prints metadata: engine, file path, cwd, title.
|
|
125
|
+
3. **Zero matches** → exits non-zero with `session "<id>" not found in any detected engine`.
|
|
126
|
+
4. **Multiple matches (collision)** → prints all of them and exits with code 2, telling you to re-run with `--engine <id>`.
|
|
127
|
+
|
|
128
|
+
Then it applies any of the following flags:
|
|
129
|
+
|
|
130
|
+
| Flag | Effect |
|
|
131
|
+
|------|--------|
|
|
132
|
+
| `--engine <apx\|claude\|codex>` | Restrict the search to one engine (skip auto-detection). |
|
|
133
|
+
| `--tail N[k\|m]` | Print last N bytes of the transcript (e.g. `--tail 32k`). No daemon required. |
|
|
134
|
+
| `--full` / `--body` | Dump the entire transcript. No daemon required. |
|
|
135
|
+
| `--summary` | Send the tail to the APX super-agent and print a 4-bullet summary. **Requires daemon + `super_agent.enabled`.** |
|
|
136
|
+
| `--continue` | Spawn the engine's native CLI in resume mode (`claude --resume <id>`, `codex resume <id>`) in the recorded cwd. |
|
|
137
|
+
| `--into apx[:slug]` | Create a brand-new APX session whose body is the summary of `<id>`. Frontmatter records `parent_session: <engine>:<id>` for lineage. Default slug = the session's original APX agent if any, else the first agent in `AGENTS.md`. |
|
|
138
|
+
| `--project <name\|id\|path>` | Used only for `--summary` on apx-native sessions (picks the daemon project). |
|
|
139
|
+
|
|
140
|
+
### Common recipes
|
|
141
|
+
|
|
142
|
+
```bash
|
|
143
|
+
# "I have a Codex session id, give me a summary in apx"
|
|
144
|
+
apx session resume 019abc... --summary
|
|
145
|
+
|
|
146
|
+
# "I want to keep working on that Codex thread, but in APX with the reviewer agent"
|
|
147
|
+
apx session resume 019abc... --summary --into apx:reviewer
|
|
148
|
+
|
|
149
|
+
# "Just dump the full transcript so I can grep it"
|
|
150
|
+
apx session resume 019abc... --full | rg "TODO"
|
|
151
|
+
|
|
152
|
+
# "Re-open in the native CLI, interactively"
|
|
153
|
+
apx session resume 019abc... --continue
|
|
154
|
+
|
|
155
|
+
# "I know it's a Claude session, skip auto-detect"
|
|
156
|
+
apx session resume 2e3c840b-... --engine claude --tail 16k
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
---
|
|
160
|
+
|
|
161
|
+
## Reading a session's content (`apx session get`)
|
|
162
|
+
|
|
163
|
+
`apx session get` is the "fetch and read" command. It has two modes:
|
|
164
|
+
|
|
165
|
+
### Default mode — local APC project sessions
|
|
166
|
+
|
|
167
|
+
```bash
|
|
168
|
+
apx session get <id> # metadata of the local APC session
|
|
169
|
+
apx session get <id> --body # full markdown body
|
|
170
|
+
apx session get <id> --json # machine-readable metadata
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
### Engine mode — read any engine's session by id
|
|
174
|
+
|
|
175
|
+
```bash
|
|
176
|
+
apx session get <id> --engine claude --full # full Claude JSONL
|
|
177
|
+
apx session get <id> --engine codex --tail 16k # last 16 KB of a Codex rollout
|
|
178
|
+
apx session get <id> --any --full # search every engine, error on collision
|
|
179
|
+
apx session get <id> --engine claude --json # JSON metadata only
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
**This is the command you want when you're inside Claude and need to ingest a Codex/Claude session as context.** Pipe `--full` into a file or directly into your prompt.
|
|
183
|
+
|
|
184
|
+
```bash
|
|
185
|
+
# Pull a Codex session into context for the current Claude session
|
|
186
|
+
apx session get 019abc... --engine codex --full > /tmp/prev.jsonl
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
---
|
|
190
|
+
|
|
191
|
+
## Daemon vs. no daemon
|
|
192
|
+
|
|
193
|
+
| Capability | Daemon required? |
|
|
194
|
+
|------------|------------------|
|
|
195
|
+
| `apx session find ...` | ❌ no |
|
|
196
|
+
| `apx sessions list ...` | ❌ no |
|
|
197
|
+
| `apx session get ...` (any mode) | ❌ no |
|
|
198
|
+
| `apx session resume <id>` (metadata only) | ❌ no |
|
|
199
|
+
| `apx session resume <id> --tail / --full` | ❌ no |
|
|
200
|
+
| `apx session resume <id> --continue` | ❌ no |
|
|
201
|
+
| `apx session resume <id> --summary` / `apx session summary <id>` | ✅ yes (daemon + `super_agent.enabled` in `~/.apx/config.json`) |
|
|
202
|
+
| `apx session ask <id> "<q>"` | ✅ yes (daemon + `super_agent.enabled`) |
|
|
203
|
+
| `apx session resume <id> --into apx[:slug]` | ⚠️ daemon needed only to compute the summary it embeds; without it, the new session is created with an empty summary block |
|
|
204
|
+
|
|
205
|
+
If the daemon is down, `apx` auto-starts it when needed.
|
|
206
|
+
|
|
207
|
+
---
|
|
208
|
+
|
|
209
|
+
## Native APX session commands (legacy / still useful)
|
|
210
|
+
|
|
211
|
+
These manage APX-native sessions (the `.md` files in `~/.apx/projects/.../sessions/`). They do **not** see Claude/Codex sessions.
|
|
212
|
+
|
|
213
|
+
```bash
|
|
214
|
+
apx session new <slug> --title "Investigate bug X"
|
|
215
|
+
apx session list # all agents in the current APC project
|
|
216
|
+
apx session list <slug> # one agent
|
|
217
|
+
apx session update <id> --status "in progress"
|
|
218
|
+
apx session close <id> --result "Fixed in PR #42"
|
|
219
|
+
apx session check # exit 1 if any APX session is still open
|
|
220
|
+
apx session close-stale # auto-close sessions older than 1h
|
|
221
|
+
apx session compact <slug> # summarize a conversation durable to disk
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
These live next to the new cross-engine commands above; they don't replace each other.
|
|
225
|
+
|
|
226
|
+
---
|
|
227
|
+
|
|
228
|
+
## Disambiguating collisions
|
|
229
|
+
|
|
230
|
+
If two engines happen to use the same id string for different sessions:
|
|
231
|
+
|
|
232
|
+
```
|
|
233
|
+
$ apx session resume abc123
|
|
234
|
+
⚠️ session id "abc123" exists in multiple engines:
|
|
235
|
+
- claude /Users/.../-Volumes-work-repo/abc123.jsonl (cwd: /Volumes/work/repo)
|
|
236
|
+
- codex /Users/.../sessions/2026/05/27/rollout-2026-05-27T10-00-00-abc123.jsonl (cwd: /Volumes/work/repo)
|
|
237
|
+
→ re-run with --engine <id> to pick one (apx | claude | codex)
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
Pick one with `--engine claude` or `--engine codex` and run again.
|
|
241
|
+
|
|
242
|
+
---
|
|
243
|
+
|
|
244
|
+
## Tips for callers (LLMs)
|
|
245
|
+
|
|
246
|
+
1. **Start with `find`, not grep.** If the user describes a session by topic instead of id, run `apx session find "<text>"`. Never reconstruct this with `apx sessions list | grep` — that's the exact footgun this command replaces.
|
|
247
|
+
2. **Don't ask the user which engine.** Auto-detect handles it. If the CLI prints a collision message, *then* re-run with `--engine`.
|
|
248
|
+
3. **`summary` for the gist, `ask` for specifics.** Use `apx session summary <id>` to orient; use `apx session ask <id> "<q>"` when the user has a concrete question. Both need the daemon + `super_agent.enabled`.
|
|
249
|
+
4. **`ask` on a huge transcript is slow and capped.** If the output warns about truncation and the user needs full coverage, re-run with a higher `--max-chunks`.
|
|
250
|
+
5. **Prefer `--tail N` over `--full`** when feeding a raw transcript into another model — JSONL is verbose, the tail is dense.
|
|
251
|
+
6. **`--into apx:slug` is the bridge** between an external runtime's session and an APX agent. Use it when the user says "continuamos esto en apx con el agente reviewer".
|
|
252
|
+
7. **Don't invent ids.** Discover them via `apx session find` or `apx sessions list`.
|
|
253
|
+
8. **`apx session get --any --full`** is the simplest way to import an arbitrary engine session into your context, with no daemon dependency.
|
|
254
|
+
|
|
255
|
+
---
|
|
256
|
+
|
|
257
|
+
## Quick reference card
|
|
258
|
+
|
|
259
|
+
```bash
|
|
260
|
+
# Discovery
|
|
261
|
+
apx session find "<text>" # find by title across engines (start here)
|
|
262
|
+
apx session find "<text>" --deep # also search transcript content
|
|
263
|
+
apx sessions list # all engines, all projects
|
|
264
|
+
apx sessions list --project <name> # all engines, one project
|
|
265
|
+
apx sessions list --engine <id> --dir <path> # one engine, one dir
|
|
266
|
+
|
|
267
|
+
# Understand
|
|
268
|
+
apx session summary <id> # LLM summary of any session
|
|
269
|
+
apx session ask <id> "<question>" # Q&A over the transcript (map-reduced)
|
|
270
|
+
|
|
271
|
+
# Read
|
|
272
|
+
apx session get <id> # local APC session metadata
|
|
273
|
+
apx session get <id> --engine <id> --full # any engine, full transcript
|
|
274
|
+
apx session get <id> --any --tail 32k # any engine, last 32 KB
|
|
275
|
+
|
|
276
|
+
# Resume / continue
|
|
277
|
+
apx session resume <id> # auto-detect engine, show metadata
|
|
278
|
+
apx session resume <id> --summary # add super-agent summary
|
|
279
|
+
apx session resume <id> --continue # spawn native CLI to keep working
|
|
280
|
+
apx session resume <id> --into apx:<slug> # seed a new APX session with the summary
|
|
281
|
+
```
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: apx-skill-builder
|
|
3
|
+
scope: internal
|
|
4
|
+
description: How to author a new APX skill. Load when the user asks "creame una skill X", "necesito una skill que enseñe Y", or you (the agent) decide a recurring instruction set deserves to be a skill. Covers file location, frontmatter, body style, and how the super-agent finds it on demand.
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# apx-skill-builder
|
|
8
|
+
|
|
9
|
+
A **skill** in APX is a Markdown file the super-agent loads on demand to learn how to do something. Inspired by Anthropic's skill-creator pattern, simplified for APX's daemon-served model.
|
|
10
|
+
|
|
11
|
+
## When to make a skill (vs. inlining in the system prompt)
|
|
12
|
+
|
|
13
|
+
- **Make a skill** when the topic is bounded (a tool, a config domain, a recurring workflow), the instructions need >50 tokens to be safe, and not every conversation needs them.
|
|
14
|
+
- **Don't** make a skill for one-off explanations, casual chat, or stuff that fits in 2-3 lines in the base prompt.
|
|
15
|
+
|
|
16
|
+
## File location
|
|
17
|
+
|
|
18
|
+
Three places APX scans, in priority order:
|
|
19
|
+
|
|
20
|
+
1. `<repo>/.apc/skills/<slug>/SKILL.md` — project-scoped (only this project's super-agent sees it).
|
|
21
|
+
2. `~/.apx/skills/<slug>/SKILL.md` — user-global (all projects).
|
|
22
|
+
3. `<repo>/skills/<slug>/SKILL.md` in the APX source — bundled (ships with the package).
|
|
23
|
+
|
|
24
|
+
Either layout works:
|
|
25
|
+
- `<slug>/SKILL.md` (dir-style, preferred — lets you ship `references/`, `assets/`, etc.)
|
|
26
|
+
- `<slug>.md` (flat-style, fine for short ones)
|
|
27
|
+
|
|
28
|
+
## Frontmatter
|
|
29
|
+
|
|
30
|
+
The file MUST open with YAML frontmatter:
|
|
31
|
+
|
|
32
|
+
```yaml
|
|
33
|
+
---
|
|
34
|
+
name: my-skill
|
|
35
|
+
description: One-sentence trigger for the super-agent. Include the user-phrases that should cause it to load. Keep under 220 chars — appears in skill listings.
|
|
36
|
+
---
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
`description` is what the model sees when deciding whether to call `load_skill`. Write it as the *trigger condition*, not a summary of the body.
|
|
40
|
+
|
|
41
|
+
**Good**: `"How to register an MCP server. Load BEFORE running 'apx mcp add' — three scopes, gotchas with stdio commands, secrets handling."`
|
|
42
|
+
|
|
43
|
+
**Bad**: `"This skill describes APX's MCP system."` (no trigger; the model won't know when it matters).
|
|
44
|
+
|
|
45
|
+
## Body style
|
|
46
|
+
|
|
47
|
+
Opinionated, concrete, anti-example-driven. Every other APX skill in `skills/apx-*` follows the same shape — read one before writing yours:
|
|
48
|
+
|
|
49
|
+
1. **One-paragraph "what this is"** (no preamble, no marketing).
|
|
50
|
+
2. **Concrete CLI calls** the user runs, with the most common case first.
|
|
51
|
+
3. **Schema / shape** if the topic involves files or config.
|
|
52
|
+
4. **Anti-examples** — at least one "DON'T do this" with the reason. This is what stops the model from inventing flags.
|
|
53
|
+
5. **Open questions / footnotes** if the surface is incomplete.
|
|
54
|
+
|
|
55
|
+
Length budget: 80-200 lines. If it's longer, split into sub-skills or move scripts into `<slug>/scripts/`.
|
|
56
|
+
|
|
57
|
+
## How the super-agent loads it
|
|
58
|
+
|
|
59
|
+
```js
|
|
60
|
+
// The model emits a tool call:
|
|
61
|
+
load_skill({ slug: "my-skill", project_path: "/abs/path/optional" })
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
That returns the full body. The agent uses the content in-context for that turn; it doesn't persist.
|
|
65
|
+
|
|
66
|
+
The user can list installed skills with:
|
|
67
|
+
```bash
|
|
68
|
+
apx skills list
|
|
69
|
+
apx skills list --project iacrmar
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## Workflow: create + register
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
# 1. Pick scope
|
|
76
|
+
# Project-scoped: .apc/skills/<slug>/SKILL.md
|
|
77
|
+
# User-global: ~/.apx/skills/<slug>/SKILL.md
|
|
78
|
+
# Bundled (in repo): skills/<slug>/SKILL.md
|
|
79
|
+
|
|
80
|
+
# 2. Write the file
|
|
81
|
+
mkdir -p skills/my-thing
|
|
82
|
+
$EDITOR skills/my-thing/SKILL.md
|
|
83
|
+
|
|
84
|
+
# 3. The daemon picks it up on next listSkills() — no restart needed unless
|
|
85
|
+
# you've changed the scaffold sync. Confirm:
|
|
86
|
+
apx skills list | grep my-thing
|
|
87
|
+
|
|
88
|
+
# 4. Inside the super-agent, you can pre-test:
|
|
89
|
+
apx exec super-agent "Cargá la skill my-thing y resumime en 3 bullets"
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
## Anti-examples
|
|
93
|
+
|
|
94
|
+
```yaml
|
|
95
|
+
---
|
|
96
|
+
# DON'T omit description — the model can't trigger on the slug alone.
|
|
97
|
+
name: vague-stuff
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
# DON'T pile general advice into the body. Pick ONE topic per skill.
|
|
101
|
+
# A skill that says "lots of useful tips about everything" is dead weight
|
|
102
|
+
# in the model's mental cache.
|
|
103
|
+
|
|
104
|
+
# DON'T duplicate apx --help. Skills explain WHEN and WHY, not just WHAT.
|
|
105
|
+
# `apx mcp add --help` already lists flags. The skill teaches the decision
|
|
106
|
+
# tree ("when shared vs runtime", "what to do if it fails").
|
|
107
|
+
|
|
108
|
+
# DON'T leave TODOs in production skills. If a section is incomplete,
|
|
109
|
+
# delete it from the skill and add it to spec/backlog/.
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
## Skill scaffolding (optional `<slug>/`)
|
|
113
|
+
|
|
114
|
+
```
|
|
115
|
+
skills/my-thing/
|
|
116
|
+
├── SKILL.md ← the body (always)
|
|
117
|
+
├── references/ ← markdown files the skill cites
|
|
118
|
+
│ └── examples.md
|
|
119
|
+
├── assets/ ← images, JSON schemas, sample inputs
|
|
120
|
+
└── scripts/ ← shell / node scripts the skill may shell out to
|
|
121
|
+
└── verify.sh
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
The super-agent only sees `SKILL.md` automatically. `references/` and `scripts/` are addressable via paths from inside the body (e.g. "see references/examples.md"). Use this for skills with lots of supporting material.
|
|
125
|
+
|
|
126
|
+
## Existing APX skills — copy the style
|
|
127
|
+
|
|
128
|
+
- `skills/apx-routine/SKILL.md` — routine kind selection + pipeline.
|
|
129
|
+
- `skills/apx-mcp/SKILL.md` — three-scope MCP configuration.
|
|
130
|
+
- `skills/apx-task/SKILL.md` — TODO management.
|
|
131
|
+
- `skills/apx-telegram/SKILL.md` — channel ↔ project ↔ agent wiring.
|
|
132
|
+
- `skills/apx-runtime/SKILL.md` — external CLIs (claude-code, codex, …).
|
|
133
|
+
- `skills/apx-sessions/SKILL.md` — cross-engine list, resume, summary, `--into apx`.
|
|
134
|
+
- `skills/apx-voice/SKILL.md` — TTS engine setup.
|
|
135
|
+
- `skills/apx-agent/SKILL.md` — per-project agents.
|
|
136
|
+
- `skills/apx-project/SKILL.md` — project registration + typology.
|
|
137
|
+
|
|
138
|
+
Pick the closest topic, mimic the structure, then write yours.
|
|
139
|
+
|
|
140
|
+
## Maintainer contract
|
|
141
|
+
|
|
142
|
+
`AGENTS.md` rule 6 (regenerated by `apx agent add/import`) requires skills to move in lockstep with feature changes. When you add or change APX behavior, update or add the skill in the same PR — especially under `skills/apx-*`.
|
|
143
|
+
|
|
144
|
+
## Don't
|
|
145
|
+
|
|
146
|
+
- Don't ship a skill without the frontmatter `description` — the loader can read the file but the trigger is silent.
|
|
147
|
+
- Don't put secrets inside skills. They're meant to be read aloud by an LLM.
|
|
148
|
+
- Don't reference filesystem paths that only exist on your machine — use `<repo>` or `~/.apx` placeholders.
|
|
149
|
+
- Don't write skills in third person. The reader is the model. Write to it.
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: apx-task
|
|
3
|
+
description: Per-project TODO list. Load when the user says "anotame", "recordame que…", "qué tengo pendiente", "marca como hecho". Tasks are project-scoped, event-sourced, and addressable by short id prefix.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# apx-task
|
|
7
|
+
|
|
8
|
+
A `task` is a per-project TODO. Append-only JSONL event log per month under `~/.apx/projects/<apxId>/tasks/YYYY-MM.jsonl`. State is the fold of the event stream. Once created, a task lives forever — `done` and `drop` don't delete events, they record a state transition. `reopen` flips back to `open`.
|
|
9
|
+
|
|
10
|
+
## Concrete CLI calls
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
# Add — most common
|
|
14
|
+
apx task add "Revisar bug de auth" --project iacrmar
|
|
15
|
+
apx task add "Llamar al cliente" --project iacrmar --due 2026-05-30 --tag urgent
|
|
16
|
+
apx task add "Demo a tester X" --project iacrmar --agent reviewer --tag demo --tag external
|
|
17
|
+
|
|
18
|
+
# List (defaults to open)
|
|
19
|
+
apx task list --project iacrmar
|
|
20
|
+
apx task list --project iacrmar --state all
|
|
21
|
+
apx task list --project iacrmar --state done
|
|
22
|
+
apx task list --project iacrmar --tag urgent
|
|
23
|
+
apx task list --project iacrmar --due-before 2026-06-01
|
|
24
|
+
apx task list --project iacrmar --limit 5
|
|
25
|
+
|
|
26
|
+
# Inspect / mutate
|
|
27
|
+
apx task show t_abc123 --project iacrmar
|
|
28
|
+
apx task show abc --project iacrmar # prefix match (≥3 chars), unique
|
|
29
|
+
apx task done t_abc123 --project iacrmar --by manuel
|
|
30
|
+
apx task drop t_abc123 --project iacrmar # archived (not "done")
|
|
31
|
+
apx task reopen t_abc123 --project iacrmar
|
|
32
|
+
apx task patch t_abc123 --project iacrmar --title "Nuevo título" --due 2026-06-10
|
|
33
|
+
apx task patch t_abc123 --project iacrmar --tag bug --tag blocker # replaces tags
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## ID format
|
|
37
|
+
|
|
38
|
+
`t_` + 6 base36 chars (32-bit entropy → ~4B keyspace). Prefix matching works once you have ≥ 3 chars and the prefix uniquely identifies a task. If two tasks share a prefix, you get null — use a longer one.
|
|
39
|
+
|
|
40
|
+
## Fields
|
|
41
|
+
|
|
42
|
+
| Field | When | Notes |
|
|
43
|
+
|---|---|---|
|
|
44
|
+
| `title` | always | One imperative line. Required. |
|
|
45
|
+
| `body` | optional | Longer notes. Markdown OK. |
|
|
46
|
+
| `tags` | optional | Free-form strings. Used by `--tag` filter. |
|
|
47
|
+
| `due` | optional | ISO date `YYYY-MM-DD`. Listing supports `--due-before`. |
|
|
48
|
+
| `agent` | optional | Slug of an agent responsible. Used by `--agent` filter. |
|
|
49
|
+
| `source` | auto/optional | Where the task came from (cli, telegram, super-agent). |
|
|
50
|
+
| `state` | derived | `open` after create, `done` / `dropped` after their respective ops. |
|
|
51
|
+
|
|
52
|
+
## Super-agent tools
|
|
53
|
+
|
|
54
|
+
The super-agent has `create_task` and `list_tasks` tools. So a user message like "Anotame que mañana hay que cerrar el bug de auth en iacrmar" makes the model call:
|
|
55
|
+
|
|
56
|
+
```json
|
|
57
|
+
{ "name": "create_task",
|
|
58
|
+
"arguments": { "project": "iacrmar", "title": "Cerrar bug de auth", "due": "<tomorrow>", "tags": ["bug"] } }
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
When the user asks "qué tengo pendiente en iacrmar?", the model calls `list_tasks({ project: "iacrmar" })`.
|
|
62
|
+
|
|
63
|
+
If the user doesn't say which project, the model should `list_projects` first and ask which one — never assume. If the conversation has a project context (Telegram channel pinned to project), the model uses that.
|
|
64
|
+
|
|
65
|
+
## Anti-examples
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
# DON'T add tasks without --project for real work.
|
|
69
|
+
apx task add "Stuff" # falls back to first registered project (or default=0)
|
|
70
|
+
# ↑ Will dump into a project you may not have meant. Always --project.
|
|
71
|
+
|
|
72
|
+
# DON'T use `done` when the task is no longer relevant. Use `drop`.
|
|
73
|
+
apx task done t_abc # implies "I completed this work"
|
|
74
|
+
apx task drop t_abc # implies "this is no longer needed; archive without completion"
|
|
75
|
+
# Reporting / metrics distinguish them.
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## Endpoint surface
|
|
79
|
+
|
|
80
|
+
```
|
|
81
|
+
GET /projects/:pid/tasks ?state=open|done|dropped|all&tag=X&agent=Y&due_before=ISO&limit=N
|
|
82
|
+
POST /projects/:pid/tasks { title, body?, tags?, due?, agent?, source?, meta? }
|
|
83
|
+
GET /projects/:pid/tasks/:id
|
|
84
|
+
PATCH /projects/:pid/tasks/:id { patch: {...} }
|
|
85
|
+
POST /projects/:pid/tasks/:id/done { by? }
|
|
86
|
+
POST /projects/:pid/tasks/:id/drop { by? }
|
|
87
|
+
POST /projects/:pid/tasks/:id/reopen
|
|
88
|
+
GET /projects/:pid/tasks-summary → { open, done, dropped, overdue, total }
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
## Don't
|
|
92
|
+
|
|
93
|
+
- Don't use tasks for reminders that need to *fire* — that's a future routine kind (`task-due-notify`, not built yet). Tasks are a list, not a scheduler.
|
|
94
|
+
- Don't depend on `done` deleting the task. It doesn't. The event log stays.
|
|
95
|
+
- Don't grep `~/.apx/projects/<id>/tasks/*.jsonl` for state — use `apx task list` or `getTask()`. The fold logic isn't trivial (later events can override fields).
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: apx-telegram
|
|
3
|
+
description: How APX talks to Telegram — channels, project pinning, master agents, media. Load BEFORE configuring a new bot or routing — multi-channel is the only mode now, the root bot_token/chat_id fields are legacy.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# apx-telegram
|
|
7
|
+
|
|
8
|
+
APX runs a Telegram plugin that polls `getUpdates` and routes messages. Config lives in `~/.apx/config.json → telegram`. The relationship to remember: **each channel can be pinned to a project and to a master agent**. Messages arriving on a pinned channel automatically run inside that project, optionally handled by a specific agent instead of the default APX super-agent.
|
|
9
|
+
|
|
10
|
+
## The shape
|
|
11
|
+
|
|
12
|
+
```json
|
|
13
|
+
{
|
|
14
|
+
"telegram": {
|
|
15
|
+
"enabled": true,
|
|
16
|
+
"poll_interval_ms": 1500,
|
|
17
|
+
"route_to_agent": "", // global default master agent (empty = super-agent)
|
|
18
|
+
"respond_with_engine": true, // global default for "should the LLM auto-reply?"
|
|
19
|
+
"channels": [
|
|
20
|
+
{
|
|
21
|
+
"name": "default",
|
|
22
|
+
"bot_token": "<from BotFather>",
|
|
23
|
+
"chat_id": "<your numeric chat id>",
|
|
24
|
+
"project": "iacrmar", // optional: pin this channel to that project
|
|
25
|
+
"route_to_agent": "reviewer", // optional: this agent handles messages on this channel
|
|
26
|
+
"respond_with_engine": true // optional: override the global default
|
|
27
|
+
}
|
|
28
|
+
]
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
The old `telegram.bot_token` / `telegram.chat_id` at the root are **legacy**. Don't write to them. If a config still has them and `channels[]` is empty, APX migrates them into `channels[0]` automatically with a warning on first read.
|
|
34
|
+
|
|
35
|
+
## Concrete CLI calls
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
# Channels CRUD
|
|
39
|
+
apx telegram channel add # interactive wizard
|
|
40
|
+
apx telegram channel add clientes --bot-token <T> --chat-id <C> --project iacrmar --agent reviewer
|
|
41
|
+
apx telegram channel list
|
|
42
|
+
apx telegram channel show clientes
|
|
43
|
+
apx telegram channel set clientes --project iacrmar
|
|
44
|
+
apx telegram channel set clientes --agent reviewer
|
|
45
|
+
apx telegram channel set clientes --respond-engine false
|
|
46
|
+
apx telegram channel unset clientes --project --agent
|
|
47
|
+
apx telegram channel remove clientes
|
|
48
|
+
|
|
49
|
+
# Polling lifecycle (rarely needed — autostart with daemon)
|
|
50
|
+
apx telegram start
|
|
51
|
+
apx telegram stop
|
|
52
|
+
apx telegram status
|
|
53
|
+
|
|
54
|
+
# Sending (defaults to first configured channel; use --chat for explicit chat id)
|
|
55
|
+
apx telegram send "texto"
|
|
56
|
+
apx telegram send "texto" --chat 123456789
|
|
57
|
+
|
|
58
|
+
# Media (daemon HTTP API — no dedicated CLI subcommand yet)
|
|
59
|
+
curl -X POST http://127.0.0.1:7430/telegram/send_photo \
|
|
60
|
+
-H "Authorization: Bearer $(cat ~/.apx/daemon.token)" \
|
|
61
|
+
-H "Content-Type: application/json" \
|
|
62
|
+
-d '{"photo":"/abs/path.png","caption":"...","channel":"clientes"}'
|
|
63
|
+
curl -X POST http://127.0.0.1:7430/telegram/send_voice \
|
|
64
|
+
-H "Authorization: Bearer $(cat ~/.apx/daemon.token)" \
|
|
65
|
+
-H "Content-Type: application/json" \
|
|
66
|
+
-d '{"audio":"/abs/path.ogg","duration":5,"channel":"default"}'
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
Every `channel` CRUD write triggers `POST /admin/reload` so the polling plugin picks up the new wiring without a daemon restart.
|
|
70
|
+
|
|
71
|
+
## What "pin to project" actually does
|
|
72
|
+
|
|
73
|
+
When a message arrives on a channel with `project: "iacrmar"`:
|
|
74
|
+
1. The super-agent invocation gets `channelMeta.projectId = <iacrmar's id>`.
|
|
75
|
+
2. The system prompt resolves project-scoped data (agents, MCPs, memory) for that turn.
|
|
76
|
+
3. The agent can call tools (`list_agents`, `list_tasks`, `create_task`, …) and they default to that project — the user doesn't have to say "in iacrmar" every message.
|
|
77
|
+
|
|
78
|
+
## What "master agent" actually does
|
|
79
|
+
|
|
80
|
+
With `route_to_agent: "reviewer"` on the channel, incoming messages go through `/projects/:pid/agents/reviewer/chat` instead of `/super-agent/chat`. The agent's `AGENT.md` system prompt + memory is used. No tools (project agents are `exec_agent`-shaped — text in, text out). Single LLM call.
|
|
81
|
+
|
|
82
|
+
Use this when you want a Telegram channel to feel like talking to a specific persona (a reviewer, a sales agent, a customer support agent) instead of the general APX assistant.
|
|
83
|
+
|
|
84
|
+
If `route_to_agent` is empty: the channel goes through the super-agent (default APX mode).
|
|
85
|
+
|
|
86
|
+
## Anti-examples
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
# DON'T write to telegram.bot_token / telegram.chat_id directly.
|
|
90
|
+
apx config set telegram.bot_token "<T>"
|
|
91
|
+
# ↑ Those fields are legacy. Use channels[] via `apx telegram channel`.
|
|
92
|
+
|
|
93
|
+
# DON'T add the same project to two channels expecting routing magic.
|
|
94
|
+
# A channel pins messages TO a project, not the other way around. The same
|
|
95
|
+
# project can be addressed from multiple channels — fine. But that doesn't
|
|
96
|
+
# unify the conversation contexts; each channel has its own message log.
|
|
97
|
+
|
|
98
|
+
# DON'T set route_to_agent to a non-existent slug.
|
|
99
|
+
apx telegram channel set default --agent nope
|
|
100
|
+
# ↑ Will silently route to a 404 — the channel's messages won't get a reply
|
|
101
|
+
# until you fix it. `apx telegram channel show <name>` to verify.
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
## Multiple bots, one APX
|
|
105
|
+
|
|
106
|
+
`channels[]` supports multiple `{bot_token, chat_id}` pairs. Each can be a different bot OR the same bot with different chats. The plugin polls each in parallel. Project / agent pinning is per-channel.
|
|
107
|
+
|
|
108
|
+
This is how you wire "I have a client A bot, a personal bot, and a notifications-only bot": three channels, three (possibly) different bots, distinct project pins.
|
|
109
|
+
|
|
110
|
+
## Don't
|
|
111
|
+
|
|
112
|
+
- Don't write to `telegram.bot_token` / `telegram.chat_id` at root.
|
|
113
|
+
- Don't expect `apx telegram send` to target a project — it sends to a *chat id* (or the channel's configured `chat_id`). Use `apx telegram channel show <name>` to verify wiring.
|
|
114
|
+
- Don't set `respond_with_engine: false` and then wonder why messages aren't getting replies. That flag turns auto-reply off for the channel.
|
|
115
|
+
- Don't forget that the Telegram plugin only fires on chat IDs you've listed. Messages from other chats are ignored.
|