@agentprojectcontext/apx 1.81.0 → 1.89.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +9 -8
- package/skills/apc-context/SKILL.md +14 -7
- package/skills/apx/SKILL.md +62 -2
- package/skills/apx-mcp/SKILL.md +42 -15
- package/src/core/agent/a2a/peers.js +161 -0
- package/src/core/agent/a2a/reply.js +379 -27
- package/src/core/agent/abort.js +25 -0
- package/src/core/agent/agent-model.js +58 -0
- package/src/core/agent/agent-tools.js +101 -0
- package/src/core/agent/author-line.js +110 -0
- package/src/core/agent/build-agent-system.js +52 -18
- package/src/core/agent/channels/voice-context.js +17 -2
- package/src/core/agent/closing-floor.js +117 -0
- package/src/core/agent/constants.js +119 -11
- package/src/core/agent/engine-call.js +56 -0
- package/src/core/agent/group/run-group-turn.js +218 -0
- package/src/core/agent/group/turn-resolver.js +165 -0
- package/src/core/agent/judge.js +138 -11
- package/src/core/agent/loop/side-effects.js +106 -3
- package/src/core/agent/memory.js +31 -18
- package/src/core/agent/model-capabilities.js +47 -0
- package/src/core/agent/model-router.js +11 -40
- package/src/core/agent/prompt-builder.js +47 -0
- package/src/core/agent/prompts/channels/a2a.md +12 -0
- package/src/core/agent/prompts/channels/code.md +3 -1
- package/src/core/agent/prompts/channels/telegram.md +2 -0
- package/src/core/agent/prompts/channels/web_code.md +1 -1
- package/src/core/agent/prompts/channels/whatsapp.md +37 -0
- package/src/core/agent/prompts/core/agent-base.md +2 -0
- package/src/core/agent/prompts/discipline/action.md +1 -0
- package/src/core/agent/prompts/discipline/two-segment.md +2 -1
- package/src/core/agent/prompts/modes/mobility.md +36 -0
- package/src/core/agent/retry.js +42 -0
- package/src/core/agent/run-agent.js +322 -25
- package/src/core/agent/run-turn.js +253 -0
- package/src/core/agent/self-memory.js +18 -52
- package/src/core/agent/skills/agent-skills.js +118 -0
- package/src/core/agent/skills/catalog.js +1 -1
- package/src/core/agent/skills/declared.js +13 -0
- package/src/core/agent/skills/index-store.js +8 -1
- package/src/core/agent/skills/inspector.js +20 -3
- package/src/core/agent/skills/loader.js +18 -3
- package/src/core/agent/skills/media.js +121 -0
- package/src/core/agent/skills/origin.js +61 -0
- package/src/core/agent/skills/sections.js +136 -0
- package/src/core/agent/super-agent.js +54 -14
- package/src/core/agent/tools/handlers/_calendar.js +50 -0
- package/src/core/agent/tools/handlers/add-mcp.js +103 -0
- package/src/core/agent/tools/handlers/asana-create-task.js +3 -1
- package/src/core/agent/tools/handlers/attach-media.js +56 -0
- package/src/core/agent/tools/handlers/calendar-create-event.js +38 -0
- package/src/core/agent/tools/handlers/calendar-find-slot.js +39 -0
- package/src/core/agent/tools/handlers/calendar-list-events.js +39 -0
- package/src/core/agent/tools/handlers/calendar-update-event.js +35 -0
- package/src/core/agent/tools/handlers/call-agent.js +14 -6
- package/src/core/agent/tools/handlers/call-runtime.js +27 -49
- package/src/core/agent/tools/handlers/comment-task.js +78 -0
- package/src/core/agent/tools/handlers/complete-task.js +60 -0
- package/src/core/agent/tools/handlers/configure-agent.js +70 -0
- package/src/core/agent/tools/handlers/create-agent.js +68 -0
- package/src/core/agent/tools/handlers/create-task.js +41 -3
- package/src/core/agent/tools/handlers/import-agent.js +5 -5
- package/src/core/agent/tools/handlers/list-mcp-tools.js +83 -0
- package/src/core/agent/tools/handlers/list-routines.js +46 -0
- package/src/core/agent/tools/handlers/list-tasks.js +8 -1
- package/src/core/agent/tools/handlers/mark-commitment.js +57 -0
- package/src/core/agent/tools/handlers/read-skill.js +64 -0
- package/src/core/agent/tools/handlers/remember-routine.js +2 -8
- package/src/core/agent/tools/handlers/remember.js +82 -6
- package/src/core/agent/tools/handlers/remove-agent.js +42 -0
- package/src/core/agent/tools/handlers/run-routine.js +94 -0
- package/src/core/agent/tools/handlers/run-shell.js +44 -2
- package/src/core/agent/tools/handlers/send-telegram.js +41 -19
- package/src/core/agent/tools/handlers/set-agent-prompt.js +44 -0
- package/src/core/agent/tools/handlers/view-media.js +69 -0
- package/src/core/agent/tools/handlers/write-agent-memory.js +52 -0
- package/src/core/agent/tools/helpers.js +36 -4
- package/src/core/agent/tools/names.js +64 -0
- package/src/core/agent/tools/registry-bridge.js +24 -1
- package/src/core/agent/tools/registry.js +79 -0
- package/src/core/agent/tools/tool-call-parser.js +136 -13
- package/src/core/agent/vision-bridge.js +69 -0
- package/src/core/apc/agent-identity.js +74 -0
- package/src/core/apc/agent-rename-refs.js +187 -0
- package/src/core/apc/agent-write.js +312 -0
- package/src/core/apc/agents-vault.js +1 -1
- package/src/core/apc/blob-keys.js +42 -0
- package/src/core/apc/frontmatter.js +166 -10
- package/src/core/apc/parser.js +33 -83
- package/src/core/apc/paths.js +4 -6
- package/src/core/apc/project-memory.js +44 -0
- package/src/core/apc/projects-helpers.js +33 -0
- package/src/core/apc/scaffold.js +36 -16
- package/src/core/channels/telegram/ask-callbacks.js +103 -0
- package/src/core/channels/telegram/dispatch.js +154 -30
- package/src/core/channels/telegram/helpers.js +59 -7
- package/src/core/channels/telegram/inbound/audio.js +26 -30
- package/src/core/channels/telegram/inbound/file.js +22 -32
- package/src/core/channels/telegram/inbound/photo.js +24 -28
- package/src/core/channels/telegram/progress-gate.js +76 -0
- package/src/core/channels/telegram/reply.js +151 -43
- package/src/core/channels/telegram/voice-note.js +150 -0
- package/src/core/config/index.js +53 -54
- package/src/core/config/paths.js +117 -31
- package/src/core/config/redact.js +89 -4
- package/src/core/config/secret-values.js +2 -4
- package/src/core/constants/actors.js +5 -0
- package/src/core/constants/channels.js +3 -1
- package/src/core/constants/task-categories.js +73 -0
- package/src/core/constants/task-fields.js +28 -0
- package/src/core/engines/_globs.js +33 -0
- package/src/core/engines/anthropic.js +19 -1
- package/src/core/engines/catalog.js +20 -0
- package/src/core/engines/gemini.js +84 -16
- package/src/core/engines/index.js +19 -3
- package/src/core/engines/mock.js +145 -1
- package/src/core/engines/openai-compatible.js +150 -15
- package/src/core/engines/presets.js +36 -9
- package/src/core/engines/zen.js +131 -0
- package/src/core/events/bus.js +140 -0
- package/src/core/events/mascot-notify.js +156 -0
- package/src/core/http-tools/browser.js +366 -36
- package/src/core/http-tools/catalog.js +206 -22
- package/src/core/http-tools/grep.js +62 -7
- package/src/core/http-tools/registry.js +3 -1
- package/src/core/i18n/en.js +34 -3
- package/src/core/i18n/es.js +36 -4
- package/src/core/i18n/index.js +5 -5
- package/src/core/i18n/pt.js +32 -3
- package/src/core/identity/self.js +14 -1
- package/src/core/images/engines/a1111.js +219 -0
- package/src/core/images/engines/index.js +187 -0
- package/src/core/images/engines/mock.js +74 -0
- package/src/core/images/engines/openai.js +130 -0
- package/src/core/images/engines/sdcpp.js +204 -0
- package/src/core/images/engines/shared.js +218 -0
- package/src/core/images/generate.js +260 -0
- package/src/core/integrations/catalog.js +8 -3
- package/src/core/integrations/plugins/_google-oauth.js +179 -0
- package/src/core/integrations/plugins/asana.js +7 -3
- package/src/core/integrations/plugins/calendar.js +404 -0
- package/src/core/integrations/store.js +2 -0
- package/src/core/memory/broker.js +16 -1
- package/src/core/memory/compactor.js +19 -3
- package/src/core/memory/consolidate.js +2 -2
- package/src/core/memory/dated-log.js +66 -0
- package/src/core/memory/embed-engines/custom.js +59 -0
- package/src/core/memory/embed-engines/gemini.js +9 -3
- package/src/core/memory/embed-engines/index.js +87 -15
- package/src/core/memory/embeddings.js +52 -24
- package/src/core/memory/index.js +13 -3
- package/src/core/memory/indexer.js +83 -27
- package/src/core/memory/prune.js +182 -0
- package/src/core/memory/store.js +22 -0
- package/src/core/memory/summarizer.js +72 -8
- package/src/core/mobility/answer.js +80 -0
- package/src/core/mobility/geofence.js +667 -0
- package/src/core/mobility/osm-route.js +282 -0
- package/src/core/mobility/preferences.js +91 -0
- package/src/core/mobility/state.js +245 -0
- package/src/core/mobility/trip-event.js +384 -0
- package/src/core/net/tailscale.js +168 -0
- package/src/core/profiles/bundled/secretary/PROFILE.md +32 -42
- package/src/core/profiles/bundled/secretary/config.schema.es.json +68 -0
- package/src/core/profiles/bundled/secretary/config.schema.json +30 -2
- package/src/core/profiles/bundled/secretary/profile.json +3 -1
- package/src/core/profiles/bundled/secretary/routines/a2a-sweep.json +20 -0
- package/src/core/profiles/bundled/secretary/routines/day-close.json +4 -1
- package/src/core/profiles/bundled/secretary/routines/day-open.json +7 -1
- package/src/core/profiles/bundled/secretary/routines/watch.json +13 -2
- package/src/core/profiles/lifecycle.js +243 -19
- package/src/core/profiles/paths.js +12 -0
- package/src/core/profiles/store.js +47 -0
- package/src/core/routines/active-runs.js +213 -0
- package/src/core/routines/delivery.js +612 -0
- package/src/core/routines/header.js +88 -0
- package/src/core/routines/index.js +26 -0
- package/src/core/routines/run-log.js +78 -0
- package/src/core/routines/runner.js +629 -66
- package/src/core/routines/signals.js +75 -0
- package/src/core/runtime-skills/apc-context/SKILL.md +14 -7
- package/src/core/runtime-skills/apx/SKILL.md +93 -1
- package/src/core/runtime-skills/apx-agency-agents/SKILL.md +2 -2
- package/src/core/runtime-skills/apx-agent/SKILL.md +134 -19
- package/src/core/runtime-skills/apx-commitment/SKILL.md +21 -11
- package/src/core/runtime-skills/apx-image/SKILL.md +60 -0
- package/src/core/runtime-skills/apx-integrations/SKILL.md +82 -0
- package/src/core/runtime-skills/apx-mcp/SKILL.md +45 -14
- package/src/core/runtime-skills/apx-mcp-builder/SKILL.md +4 -4
- package/src/core/runtime-skills/apx-profile/SKILL.md +27 -2
- package/src/core/runtime-skills/apx-project/SKILL.md +23 -2
- package/src/core/runtime-skills/apx-routine/SKILL.md +40 -17
- package/src/core/runtime-skills/apx-runtime/SKILL.md +124 -14
- package/src/core/runtime-skills/apx-sessions/SKILL.md +7 -6
- package/src/core/runtime-skills/apx-skill-builder/SKILL.md +15 -13
- package/src/core/runtime-skills/apx-task/SKILL.md +79 -26
- package/src/core/runtime-skills/apx-telegram/SKILL.md +12 -12
- package/src/core/runtime-skills/apx-transcribe/SKILL.md +56 -0
- package/src/core/runtime-skills/apx-voice/SKILL.md +27 -8
- package/src/core/runtime-skills/claude-code/SKILL.md +8 -0
- package/src/core/runtime-skills/openrouter/SKILL.md +8 -2
- package/src/core/runtimes/_spawn.js +9 -1
- package/src/core/runtimes/claude-code.js +11 -2
- package/src/core/runtimes/codex.js +44 -10
- package/src/core/runtimes/index.js +17 -2
- package/src/core/runtimes/opencode.js +88 -9
- package/src/core/runtimes/outcome.js +119 -0
- package/src/core/sessions/index.js +193 -1
- package/src/core/stores/agent-inbox.js +109 -23
- package/src/core/stores/code-sessions.js +21 -0
- package/src/core/stores/commitments.js +27 -3
- package/src/core/stores/conversations.js +220 -20
- package/src/core/stores/deliveries.js +177 -0
- package/src/core/stores/media-archive.js +228 -0
- package/src/core/stores/messages.js +1096 -112
- package/src/core/stores/organization.js +34 -0
- package/src/core/stores/project-memory.js +71 -0
- package/src/core/stores/routine-memory.js +16 -8
- package/src/core/stores/routines.js +27 -49
- package/src/core/stores/sessions.js +4 -8
- package/src/core/stores/tasks.js +212 -18
- package/src/core/stores/turn-record.js +209 -0
- package/src/core/tasks/columns.js +136 -0
- package/src/core/tasks/comment-turn.js +258 -0
- package/src/core/util/time.js +13 -0
- package/src/core/voice/engines/index.js +54 -1
- package/src/core/voice/engines/openai.js +50 -4
- package/src/core/voice/opus.js +67 -0
- package/src/core/voice/pronounceable.js +43 -0
- package/src/core/voice/transcription.js +4 -0
- package/src/core/voice/tts.js +114 -24
- package/src/host/daemon/active-turns.js +188 -0
- package/src/host/daemon/api/admin-config.js +9 -0
- package/src/host/daemon/api/agents.js +99 -90
- package/src/host/daemon/api/artifact-preview.js +7 -6
- package/src/host/daemon/api/artifacts.js +3 -2
- package/src/host/daemon/api/code.js +55 -9
- package/src/host/daemon/api/commitments.js +11 -0
- package/src/host/daemon/api/confirm.js +3 -2
- package/src/host/daemon/api/conversations.js +543 -35
- package/src/host/daemon/api/deck.js +9 -8
- package/src/host/daemon/api/deliveries.js +33 -0
- package/src/host/daemon/api/desktop.js +5 -4
- package/src/host/daemon/api/embeddings.js +15 -6
- package/src/host/daemon/api/engines.js +59 -8
- package/src/host/daemon/api/exec.js +437 -121
- package/src/host/daemon/api/groups.js +215 -0
- package/src/host/daemon/api/images.js +107 -0
- package/src/host/daemon/api/inbox.js +123 -2
- package/src/host/daemon/api/integrations.js +64 -2
- package/src/host/daemon/api/mcps.js +7 -6
- package/src/host/daemon/api/media.js +283 -0
- package/src/host/daemon/api/mobility.js +177 -0
- package/src/host/daemon/api/net.js +182 -0
- package/src/host/daemon/api/pairing.js +38 -5
- package/src/host/daemon/api/profiles.js +30 -2
- package/src/host/daemon/api/routines.js +36 -4
- package/src/host/daemon/api/runtimes.js +74 -39
- package/src/host/daemon/api/sessions-search.js +7 -2
- package/src/host/daemon/api/sessions.js +44 -2
- package/src/host/daemon/api/shared.js +127 -20
- package/src/host/daemon/api/skills.js +11 -4
- package/src/host/daemon/api/super-agent.js +384 -53
- package/src/host/daemon/api/tasks.js +180 -10
- package/src/host/daemon/api/telegram.js +11 -10
- package/src/host/daemon/api/thread-faces.js +159 -0
- package/src/host/daemon/api/top-level.js +3 -3
- package/src/host/daemon/api/transcribe.js +11 -10
- package/src/host/daemon/api/tts.js +97 -4
- package/src/host/daemon/api/turn-abort.js +23 -0
- package/src/host/daemon/api/turns.js +49 -0
- package/src/host/daemon/api/voice.js +5 -4
- package/src/host/daemon/api/web.js +98 -0
- package/src/host/daemon/api.js +39 -0
- package/src/host/daemon/delivery-sweep.js +58 -0
- package/src/host/daemon/desktop-ws.js +5 -23
- package/src/host/daemon/events-ws.js +273 -0
- package/src/host/daemon/index.js +59 -15
- package/src/host/daemon/plugins/desktop/index.js +17 -4
- package/src/host/daemon/plugins/telegram/index.js +78 -40
- package/src/host/daemon/pty-bridge.py +99 -0
- package/src/host/daemon/routines-scheduler.js +1 -0
- package/src/host/daemon/smoke.js +1 -2
- package/src/host/daemon/terminal-ws.js +132 -0
- package/src/host/daemon/tts-keepwarm.js +87 -0
- package/src/host/daemon/wakeup.js +11 -6
- package/src/host/daemon/whisper-server.js +44 -0
- package/src/host/daemon/whisper-server.py +70 -13
- package/src/host/daemon/ws-auth.js +28 -0
- package/src/interfaces/android/app/build.gradle +42 -0
- package/src/interfaces/android/app/proguard-rules.pro +4 -0
- package/src/interfaces/android/app/src/main/AndroidManifest.xml +139 -0
- package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/AlertScreen.java +139 -0
- package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/AndroidAutoDetector.java +106 -0
- package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/ApxCarAppService.java +57 -0
- package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/ApxPreferences.java +165 -0
- package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/CarAlertStore.java +84 -0
- package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/CarMessageActionReceiver.java +47 -0
- package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/CarMessageNotification.java +152 -0
- package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/DaemonAddress.java +35 -0
- package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/DaemonClient.java +339 -0
- package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/DeviceLocation.java +38 -0
- package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/ErrandScreen.java +127 -0
- package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/MainActivity.java +872 -0
- package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/MapsNavigationDetector.java +63 -0
- package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/MapsNavigationListenerService.java +453 -0
- package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/MapsShareIntentParser.java +93 -0
- package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/MascotBlobCatalog.java +66 -0
- package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/MascotOverlayService.java +448 -0
- package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/MascotView.java +249 -0
- package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/MessageFrameParser.java +240 -0
- package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/NotifyChannels.java +69 -0
- package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/ProximityActionReceiver.java +78 -0
- package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/ProximityNotification.java +161 -0
- package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/StartupReceiver.java +57 -0
- package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/TravelEventGate.java +62 -0
- package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/TravelStatusBanner.java +116 -0
- package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/TripLocationService.java +272 -0
- package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/TripPlacesSheet.java +203 -0
- package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/TripScreen.java +182 -0
- package/src/interfaces/android/app/src/main/res/drawable/app_background.xml +12 -0
- package/src/interfaces/android/app/src/main/res/drawable/ic_apx_app.xml +10 -0
- package/src/interfaces/android/app/src/main/res/drawable/ic_apx_launcher_foreground.xml +12 -0
- package/src/interfaces/android/app/src/main/res/drawable/ic_apx_notification.xml +22 -0
- package/src/interfaces/android/app/src/main/res/drawable/ic_trip_car.xml +37 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/apx_logo.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_amatista.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_aqua.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_brasa.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_campana.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_caracol.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_carbon.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_cobalto.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_cometa.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_coral.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_cubi.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_eclipse.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_faro.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_gajo.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_iris.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_kiwi.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_laguna.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_lila.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_menta.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_nimbo.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_noche.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_onyx.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_orbita.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_ovni.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_papa.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_parche.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_peon.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_perla.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_pino.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_quad.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_rubi.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_saturno.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_trebol.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_trino.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_volcan.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_zafiro.png +0 -0
- package/src/interfaces/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +5 -0
- package/src/interfaces/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +5 -0
- package/src/interfaces/android/app/src/main/res/raw/apx_notification.mp3 +0 -0
- package/src/interfaces/android/app/src/main/res/values/colors.xml +4 -0
- package/src/interfaces/android/app/src/main/res/values/strings.xml +25 -0
- package/src/interfaces/android/app/src/main/res/values/styles.xml +10 -0
- package/src/interfaces/android/app/src/main/res/values-v31/styles.xml +14 -0
- package/src/interfaces/android/app/src/main/res/xml/automotive_app_desc.xml +9 -0
- package/src/interfaces/android/app/src/main/res/xml/network_security_config.xml +10 -0
- package/src/interfaces/android/app/src/test/java/dev/agentprojectcontext/apx/AndroidAutoDetectorTest.java +85 -0
- package/src/interfaces/android/app/src/test/java/dev/agentprojectcontext/apx/CarAlertStoreTest.java +104 -0
- package/src/interfaces/android/app/src/test/java/dev/agentprojectcontext/apx/DaemonAddressTest.java +23 -0
- package/src/interfaces/android/app/src/test/java/dev/agentprojectcontext/apx/MapsNavigationDetectorTest.java +69 -0
- package/src/interfaces/android/app/src/test/java/dev/agentprojectcontext/apx/MapsShareIntentParserTest.java +31 -0
- package/src/interfaces/android/app/src/test/java/dev/agentprojectcontext/apx/MessageFrameParserTest.java +180 -0
- package/src/interfaces/android/app/src/test/java/dev/agentprojectcontext/apx/TravelEventGateTest.java +64 -0
- package/src/interfaces/android/app/src/test/java/dev/agentprojectcontext/apx/TripPlacesSheetTest.java +66 -0
- package/src/interfaces/android/build.gradle +3 -0
- package/src/interfaces/android/gradle/wrapper/gradle-wrapper.jar +0 -0
- package/src/interfaces/android/gradle/wrapper/gradle-wrapper.properties +9 -0
- package/src/interfaces/android/gradle.properties +3 -0
- package/src/interfaces/android/gradlew +248 -0
- package/src/interfaces/android/gradlew.bat +82 -0
- package/src/interfaces/android/settings.gradle +18 -0
- package/src/interfaces/cli/commands/a2a.js +145 -4
- package/src/interfaces/cli/commands/agent.js +247 -22
- package/src/interfaces/cli/commands/code.js +1 -1
- package/src/interfaces/cli/commands/commitment.js +5 -0
- package/src/interfaces/cli/commands/config.js +85 -6
- package/src/interfaces/cli/commands/exec.js +90 -1
- package/src/interfaces/cli/commands/image.js +314 -0
- package/src/interfaces/cli/commands/mcp.js +87 -23
- package/src/interfaces/cli/commands/memory.js +35 -22
- package/src/interfaces/cli/commands/panel.js +94 -0
- package/src/interfaces/cli/commands/profile.js +14 -0
- package/src/interfaces/cli/commands/project.js +29 -0
- package/src/interfaces/cli/commands/routine.js +45 -10
- package/src/interfaces/cli/commands/runtime.js +30 -7
- package/src/interfaces/cli/commands/session.js +90 -38
- package/src/interfaces/cli/commands/sessions.js +35 -2
- package/src/interfaces/cli/commands/skills.js +15 -9
- package/src/interfaces/cli/commands/status.js +2 -3
- package/src/interfaces/cli/commands/task.js +54 -5
- package/src/interfaces/cli/commands/telegram.js +12 -4
- package/src/interfaces/cli/commands/transcribe.js +177 -0
- package/src/interfaces/cli/help/index.js +311 -72
- package/src/interfaces/cli/http.js +61 -13
- package/src/interfaces/cli/index.js +1 -1
- package/src/interfaces/cli/routes/agent.js +5 -4
- package/src/interfaces/cli/routes/commitment.js +3 -2
- package/src/interfaces/cli/routes/config.js +7 -2
- package/src/interfaces/cli/routes/image.js +11 -0
- package/src/interfaces/cli/routes/index.js +2 -0
- package/src/interfaces/cli/routes/log.js +1 -1
- package/src/interfaces/cli/routes/memory.js +3 -2
- package/src/interfaces/cli/routes/panel.js +15 -2
- package/src/interfaces/cli/routes/profile.js +3 -2
- package/src/interfaces/cli/routes/transcribe.js +10 -0
- package/src/interfaces/cli/stdin.js +29 -0
- package/src/interfaces/desktop/assets/blobs/amatista.png +0 -0
- package/src/interfaces/desktop/assets/blobs/aqua.png +0 -0
- package/src/interfaces/desktop/assets/blobs/brasa.png +0 -0
- package/src/interfaces/desktop/assets/blobs/campana.png +0 -0
- package/src/interfaces/desktop/assets/blobs/caracol.png +0 -0
- package/src/interfaces/desktop/assets/blobs/carbon.png +0 -0
- package/src/interfaces/desktop/assets/blobs/cobalto.png +0 -0
- package/src/interfaces/desktop/assets/blobs/cometa.png +0 -0
- package/src/interfaces/desktop/assets/blobs/coral.png +0 -0
- package/src/interfaces/desktop/assets/blobs/cubi.png +0 -0
- package/src/interfaces/desktop/assets/blobs/eclipse.png +0 -0
- package/src/interfaces/desktop/assets/blobs/faro.png +0 -0
- package/src/interfaces/desktop/assets/blobs/gajo.png +0 -0
- package/src/interfaces/desktop/assets/blobs/iris.png +0 -0
- package/src/interfaces/desktop/assets/blobs/kiwi.png +0 -0
- package/src/interfaces/desktop/assets/blobs/laguna.png +0 -0
- package/src/interfaces/desktop/assets/blobs/lila.png +0 -0
- package/src/interfaces/desktop/assets/blobs/menta.png +0 -0
- package/src/interfaces/desktop/assets/blobs/nimbo.png +0 -0
- package/src/interfaces/desktop/assets/blobs/noche.png +0 -0
- package/src/interfaces/desktop/assets/blobs/onyx.png +0 -0
- package/src/interfaces/desktop/assets/blobs/orbita.png +0 -0
- package/src/interfaces/desktop/assets/blobs/ovni.png +0 -0
- package/src/interfaces/desktop/assets/blobs/papa.png +0 -0
- package/src/interfaces/desktop/assets/blobs/parche.png +0 -0
- package/src/interfaces/desktop/assets/blobs/peon.png +0 -0
- package/src/interfaces/desktop/assets/blobs/perla.png +0 -0
- package/src/interfaces/desktop/assets/blobs/pino.png +0 -0
- package/src/interfaces/desktop/assets/blobs/quad.png +0 -0
- package/src/interfaces/desktop/assets/blobs/rubi.png +0 -0
- package/src/interfaces/desktop/assets/blobs/saturno.png +0 -0
- package/src/interfaces/desktop/assets/blobs/trebol.png +0 -0
- package/src/interfaces/desktop/assets/blobs/trino.png +0 -0
- package/src/interfaces/desktop/assets/blobs/volcan.png +0 -0
- package/src/interfaces/desktop/assets/blobs/zafiro.png +0 -0
- package/src/interfaces/desktop/assets/notification.mp3 +0 -0
- package/src/interfaces/desktop/main.js +473 -29
- package/src/interfaces/desktop/mascot-blobs.js +41 -0
- package/src/interfaces/desktop/mascot-preload.js +32 -0
- package/src/interfaces/desktop/mascot.css +186 -0
- package/src/interfaces/desktop/mascot.html +40 -0
- package/src/interfaces/desktop/mascot.js +163 -0
- package/src/interfaces/desktop/preload.js +10 -0
- package/src/interfaces/desktop/renderer.js +308 -48
- package/src/interfaces/desktop/style.css +34 -0
- package/src/interfaces/mcp-server/index.js +87 -0
- package/src/interfaces/tui/_shims/util-locale.ts +0 -2
- package/src/interfaces/tui/app.tsx +0 -6
- package/src/interfaces/tui/attach.ts +0 -1
- package/src/interfaces/tui/context/sdk-apx.tsx +0 -4
- package/src/interfaces/tui/plugin/api.tsx +0 -3
- package/src/interfaces/tui/plugin/runtime.ts +0 -3
- package/src/interfaces/tui/thread.ts +0 -16
- package/src/interfaces/web/README.md +22 -14
- package/src/interfaces/web/dist/assets/claude-XtpLmGtF.webp +0 -0
- package/src/interfaces/web/dist/assets/codex-DExPUgvh.webp +0 -0
- package/src/interfaces/web/dist/assets/index-BEoRgIqd.css +32 -0
- package/src/interfaces/web/dist/assets/index-BEoRgIqd.css.br +0 -0
- package/src/interfaces/web/dist/assets/index-BEoRgIqd.css.gz +0 -0
- package/src/interfaces/web/dist/assets/index-C6fXHc1p.js +1074 -0
- package/src/interfaces/web/dist/assets/index-C6fXHc1p.js.br +0 -0
- package/src/interfaces/web/dist/assets/index-C6fXHc1p.js.gz +0 -0
- package/src/interfaces/web/dist/assets/index-C6fXHc1p.js.map +1 -0
- package/src/interfaces/web/dist/assets/index-C6fXHc1p.js.map.br +0 -0
- package/src/interfaces/web/dist/assets/index-C6fXHc1p.js.map.gz +0 -0
- package/src/interfaces/web/dist/favicon/dark/site.webmanifest +12 -6
- package/src/interfaces/web/dist/favicon/white/site.webmanifest +12 -6
- package/src/interfaces/web/dist/index.html +22 -6
- package/src/interfaces/web/dist/index.html.br +0 -0
- package/src/interfaces/web/dist/index.html.gz +0 -0
- package/src/interfaces/web/dist/manifest.webmanifest +25 -0
- package/src/interfaces/web/dist/modules/blobs/amatista.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/aqua.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/brasa.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/campana.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/caracol.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/carbon.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/cobalto.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/cometa.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/coral.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/cubi.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/eclipse.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/faro.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/gajo.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/iris.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/kiwi.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/laguna.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/lila.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/menta.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/nimbo.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/noche.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/onyx.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/orbita.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/ovni.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/papa.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/parche.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/peon.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/perla.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/pino.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/quad.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/rubi.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/saturno.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/trebol.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/trino.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/volcan.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/zafiro.png +0 -0
- package/src/interfaces/web/dist/sw.js +106 -0
- package/src/interfaces/web/dist/sw.js.br +0 -0
- package/src/interfaces/web/dist/sw.js.gz +0 -0
- package/src/interfaces/web/eslint.config.js +83 -0
- package/src/interfaces/web/index.html +20 -4
- package/src/interfaces/web/package-lock.json +1651 -1280
- package/src/interfaces/web/package.json +9 -10
- package/src/interfaces/web/pnpm-lock.yaml +867 -869
- package/src/interfaces/web/public/favicon/dark/site.webmanifest +12 -6
- package/src/interfaces/web/public/favicon/white/site.webmanifest +12 -6
- package/src/interfaces/web/public/manifest.webmanifest +25 -0
- package/src/interfaces/web/public/modules/blobs/amatista.png +0 -0
- package/src/interfaces/web/public/modules/blobs/aqua.png +0 -0
- package/src/interfaces/web/public/modules/blobs/brasa.png +0 -0
- package/src/interfaces/web/public/modules/blobs/campana.png +0 -0
- package/src/interfaces/web/public/modules/blobs/caracol.png +0 -0
- package/src/interfaces/web/public/modules/blobs/carbon.png +0 -0
- package/src/interfaces/web/public/modules/blobs/cobalto.png +0 -0
- package/src/interfaces/web/public/modules/blobs/cometa.png +0 -0
- package/src/interfaces/web/public/modules/blobs/coral.png +0 -0
- package/src/interfaces/web/public/modules/blobs/cubi.png +0 -0
- package/src/interfaces/web/public/modules/blobs/eclipse.png +0 -0
- package/src/interfaces/web/public/modules/blobs/faro.png +0 -0
- package/src/interfaces/web/public/modules/blobs/gajo.png +0 -0
- package/src/interfaces/web/public/modules/blobs/iris.png +0 -0
- package/src/interfaces/web/public/modules/blobs/kiwi.png +0 -0
- package/src/interfaces/web/public/modules/blobs/laguna.png +0 -0
- package/src/interfaces/web/public/modules/blobs/lila.png +0 -0
- package/src/interfaces/web/public/modules/blobs/menta.png +0 -0
- package/src/interfaces/web/public/modules/blobs/nimbo.png +0 -0
- package/src/interfaces/web/public/modules/blobs/noche.png +0 -0
- package/src/interfaces/web/public/modules/blobs/onyx.png +0 -0
- package/src/interfaces/web/public/modules/blobs/orbita.png +0 -0
- package/src/interfaces/web/public/modules/blobs/ovni.png +0 -0
- package/src/interfaces/web/public/modules/blobs/papa.png +0 -0
- package/src/interfaces/web/public/modules/blobs/parche.png +0 -0
- package/src/interfaces/web/public/modules/blobs/peon.png +0 -0
- package/src/interfaces/web/public/modules/blobs/perla.png +0 -0
- package/src/interfaces/web/public/modules/blobs/pino.png +0 -0
- package/src/interfaces/web/public/modules/blobs/quad.png +0 -0
- package/src/interfaces/web/public/modules/blobs/rubi.png +0 -0
- package/src/interfaces/web/public/modules/blobs/saturno.png +0 -0
- package/src/interfaces/web/public/modules/blobs/trebol.png +0 -0
- package/src/interfaces/web/public/modules/blobs/trino.png +0 -0
- package/src/interfaces/web/public/modules/blobs/volcan.png +0 -0
- package/src/interfaces/web/public/modules/blobs/zafiro.png +0 -0
- package/src/interfaces/web/public/sw.js +106 -0
- package/src/interfaces/web/src/App.tsx +106 -10
- package/src/interfaces/web/src/assets/cli/claude.webp +0 -0
- package/src/interfaces/web/src/assets/cli/codex.webp +0 -0
- package/src/interfaces/web/src/assets/cli/cursor.svg +1 -0
- package/src/interfaces/web/src/assets/cli/opencode.png +0 -0
- package/src/interfaces/web/src/components/Combobox.tsx +201 -0
- package/src/interfaces/web/src/components/MobileHint.tsx +95 -0
- package/src/interfaces/web/src/components/MobileLinkDialog.tsx +156 -0
- package/src/interfaces/web/src/components/ModelCombobox.tsx +21 -113
- package/src/interfaces/web/src/components/{routines/ReadOnlyBlock.tsx → ReadOnlyBlock.tsx} +13 -4
- package/src/interfaces/web/src/components/Roby.tsx +5 -3
- package/src/interfaces/web/src/components/RobyBubble.tsx +23 -5
- package/src/interfaces/web/src/components/RowMenu.tsx +46 -0
- package/src/interfaces/web/src/components/TimezoneSelect.tsx +4 -1
- package/src/interfaces/web/src/components/Toast.tsx +50 -14
- package/src/interfaces/web/src/components/UiSelect.tsx +12 -5
- package/src/interfaces/web/src/components/agents/AgentAvatar.tsx +171 -0
- package/src/interfaces/web/src/components/agents/AgentFormFields.tsx +42 -11
- package/src/interfaces/web/src/components/agents/AgentModelBadge.tsx +157 -0
- package/src/interfaces/web/src/components/agents/AgentModelSelect.tsx +57 -0
- package/src/interfaces/web/src/components/agents/AgentSkillsPicker.tsx +115 -0
- package/src/interfaces/web/src/components/agents/BlobAvatar.tsx +50 -0
- package/src/interfaces/web/src/components/agents/blobPresets.ts +50 -0
- package/src/interfaces/web/src/components/agents/modelCatalog.ts +66 -0
- package/src/interfaces/web/src/components/chat/ActionGroup.tsx +162 -0
- package/src/interfaces/web/src/components/chat/AskAnswersCard.tsx +4 -3
- package/src/interfaces/web/src/components/chat/AskQuestionsCard.tsx +1 -1
- package/src/interfaces/web/src/components/chat/Attachment.tsx +220 -0
- package/src/interfaces/web/src/components/chat/ChatList.tsx +226 -51
- package/src/interfaces/web/src/components/chat/ChatRowActivity.tsx +45 -0
- package/src/interfaces/web/src/components/chat/Composer.tsx +672 -23
- package/src/interfaces/web/src/components/chat/ComposerCommands.tsx +175 -0
- package/src/interfaces/web/src/components/chat/ComposerSuggest.tsx +215 -0
- package/src/interfaces/web/src/components/chat/ContextBar.tsx +133 -65
- package/src/interfaces/web/src/components/chat/InlineAskPanel.tsx +107 -47
- package/src/interfaces/web/src/components/chat/MessageBubble.tsx +460 -119
- package/src/interfaces/web/src/components/chat/MessageList.tsx +165 -18
- package/src/interfaces/web/src/components/chat/ReasoningBlock.tsx +58 -0
- package/src/interfaces/web/src/components/chat/SessionPicker.tsx +182 -0
- package/src/interfaces/web/src/components/chat/SkillTrace.tsx +183 -0
- package/src/interfaces/web/src/components/chat/ToolCall.tsx +11 -11
- package/src/interfaces/web/src/components/code/CodeContextTab.tsx +87 -53
- package/src/interfaces/web/src/components/code/CodeFileTree.tsx +11 -52
- package/src/interfaces/web/src/components/code/CodeFileViewer.tsx +5 -4
- package/src/interfaces/web/src/components/code/CodeProjectPicker.tsx +31 -7
- package/src/interfaces/web/src/components/code/CodeSessionList.tsx +32 -11
- package/src/interfaces/web/src/components/code/CodeSidePanel.tsx +33 -3
- package/src/interfaces/web/src/components/code/CodeTerminal.tsx +5 -4
- package/src/interfaces/web/src/components/code/NewCodeSessionDialog.tsx +164 -0
- package/src/interfaces/web/src/components/commitments/CommitmentDetail.tsx +162 -0
- package/src/interfaces/web/src/components/commitments/CommitmentFormDialog.tsx +158 -0
- package/src/interfaces/web/src/components/commitments/CommitmentList.tsx +194 -0
- package/src/interfaces/web/src/components/commitments/commitmentState.tsx +46 -0
- package/src/interfaces/web/src/components/common/BulkActionBar.tsx +60 -0
- package/src/interfaces/web/src/components/common/ConfirmDialog.tsx +4 -1
- package/src/interfaces/web/src/components/common/SelectCheckbox.tsx +40 -0
- package/src/interfaces/web/src/components/common/TabNav.tsx +1 -1
- package/src/interfaces/web/src/components/cron/CronPicker.tsx +1 -1
- package/src/interfaces/web/src/components/files/FileBrowser.tsx +1 -1
- package/src/interfaces/web/src/components/files/FileTree.tsx +6 -4
- package/src/interfaces/web/src/components/files/FileViewer.tsx +9 -5
- package/src/interfaces/web/src/components/files/MarkdownPreview.tsx +45 -9
- package/src/interfaces/web/src/components/images/ImageDefaultsCard.tsx +93 -0
- package/src/interfaces/web/src/components/images/ImageProviderList.tsx +142 -0
- package/src/interfaces/web/src/components/images/ImageProviderModal.tsx +263 -0
- package/src/interfaces/web/src/components/images/ImageTestCard.tsx +142 -0
- package/src/interfaces/web/src/components/inbox/ChannelFilter.tsx +178 -0
- package/src/interfaces/web/src/components/inbox/InboxList.tsx +77 -81
- package/src/interfaces/web/src/components/inbox/InboxRowItem.tsx +140 -0
- package/src/interfaces/web/src/components/integrations/ComingSoonPlugin.tsx +2 -2
- package/src/interfaces/web/src/components/integrations/PluginConnect.tsx +208 -30
- package/src/interfaces/web/src/components/integrations/PluginToolsSection.tsx +1 -1
- package/src/interfaces/web/src/components/layout/ProjectAvatar.tsx +39 -24
- package/src/interfaces/web/src/components/layout/ProjectSidebar.tsx +253 -58
- package/src/interfaces/web/src/components/memory/MemoryBrowser.tsx +94 -47
- package/src/interfaces/web/src/components/routines/ExecutionsList.tsx +202 -90
- package/src/interfaces/web/src/components/routines/RoutineDetail.tsx +28 -6
- package/src/interfaces/web/src/components/routines/RoutineEditor.tsx +16 -5
- package/src/interfaces/web/src/components/routines/RoutineList.tsx +49 -9
- package/src/interfaces/web/src/components/routines/VarTextarea.tsx +1 -1
- package/src/interfaces/web/src/components/routines/runChat.ts +121 -0
- package/src/interfaces/web/src/components/sessions/SessionDetail.tsx +148 -0
- package/src/interfaces/web/src/components/sessions/SessionTerminal.tsx +98 -0
- package/src/interfaces/web/src/components/settings/AccessPanel.tsx +205 -0
- package/src/interfaces/web/src/components/settings/DefaultRouterCard.tsx +246 -101
- package/src/interfaces/web/src/components/settings/DesktopSettingsPanel.tsx +36 -2
- package/src/interfaces/web/src/components/settings/DevicesPanel.tsx +19 -6
- package/src/interfaces/web/src/components/settings/EmbedProviderList.tsx +274 -0
- package/src/interfaces/web/src/components/settings/EnginesPanel.tsx +26 -6
- package/src/interfaces/web/src/components/settings/MemoryPanel.tsx +118 -119
- package/src/interfaces/web/src/components/settings/NudgePanel.tsx +4 -3
- package/src/interfaces/web/src/components/settings/PairDeviceDialog.tsx +15 -4
- package/src/interfaces/web/src/components/settings/PanelPrefs.tsx +374 -0
- package/src/interfaces/web/src/components/settings/ProfilePanel.tsx +70 -2
- package/src/interfaces/web/src/components/settings/RoutingPanel.tsx +2 -1
- package/src/interfaces/web/src/components/settings/SkillsInspectorPanel.tsx +102 -43
- package/src/interfaces/web/src/components/settings/SkillsManager.tsx +76 -21
- package/src/interfaces/web/src/components/settings/SkillsSettings.tsx +10 -3
- package/src/interfaces/web/src/components/settings/SuperAgentPanel.tsx +8 -0
- package/src/interfaces/web/src/components/settings/TelegramChannelsPanel.tsx +11 -2
- package/src/interfaces/web/src/components/settings/TelegramContactsPanel.tsx +19 -8
- package/src/interfaces/web/src/components/settings/TelegramRolesPanel.tsx +12 -2
- package/src/interfaces/web/src/components/settings/WebPanel.tsx +22 -31
- package/src/interfaces/web/src/components/settings/providers/ProviderCard.tsx +15 -3
- package/src/interfaces/web/src/components/settings/providers/ProviderModal.tsx +97 -66
- package/src/interfaces/web/src/components/settings/providers/ProviderTestDialog.tsx +150 -0
- package/src/interfaces/web/src/components/settings/providers/typeStyles.ts +67 -25
- package/src/interfaces/web/src/components/settings/providers/types.ts +3 -0
- package/src/interfaces/web/src/components/tasks/TaskBoard.tsx +201 -0
- package/src/interfaces/web/src/components/tasks/TaskColumnsDialog.tsx +243 -0
- package/src/interfaces/web/src/components/tasks/TaskComments.tsx +167 -0
- package/src/interfaces/web/src/components/tasks/TaskDetail.tsx +335 -0
- package/src/interfaces/web/src/components/tasks/TaskFormDialog.tsx +406 -0
- package/src/interfaces/web/src/components/tasks/TaskList.tsx +258 -0
- package/src/interfaces/web/src/components/tasks/TaskSubtasks.tsx +126 -0
- package/src/interfaces/web/src/components/tasks/columns.ts +51 -0
- package/src/interfaces/web/src/components/tasks/taskStatus.tsx +159 -34
- package/src/interfaces/web/src/components/tasks/taskViewPrefs.ts +73 -0
- package/src/interfaces/web/src/components/tasks/useTaskColumns.ts +31 -0
- package/src/interfaces/web/src/components/ui/chat-input.tsx +136 -12
- package/src/interfaces/web/src/components/ui/context-menu.tsx +15 -198
- package/src/interfaces/web/src/components/ui/dialog.tsx +3 -2
- package/src/interfaces/web/src/components/ui/filter-chips.tsx +4 -0
- package/src/interfaces/web/src/components/ui/popover.tsx +14 -49
- package/src/interfaces/web/src/components/ui/sheet.tsx +2 -1
- package/src/interfaces/web/src/components/ui/spinner.tsx +2 -1
- package/src/interfaces/web/src/components/ui.tsx +62 -23
- package/src/interfaces/web/src/components/voice/VoiceProviderList.tsx +2 -1
- package/src/interfaces/web/src/components/voice/VoiceProviderModal.tsx +66 -8
- package/src/interfaces/web/src/components/voice/VoiceQvoxInstallCard.tsx +63 -0
- package/src/interfaces/web/src/components/voice/VoiceQvoxStatusCard.tsx +51 -0
- package/src/interfaces/web/src/components/voice/VoiceSttCard.tsx +4 -3
- package/src/interfaces/web/src/components/voice/VoiceTestCard.tsx +38 -4
- package/src/interfaces/web/src/constants/index.ts +1 -0
- package/src/interfaces/web/src/hooks/useChannelPrefs.ts +39 -0
- package/src/interfaces/web/src/hooks/useChat.ts +1092 -85
- package/src/interfaces/web/src/hooks/useChatActivity.ts +24 -0
- package/src/interfaces/web/src/hooks/useInbox.ts +26 -4
- package/src/interfaces/web/src/hooks/useLiveMessages.ts +16 -0
- package/src/interfaces/web/src/hooks/useOllamaModels.ts +79 -0
- package/src/interfaces/web/src/hooks/useRecorder.ts +198 -0
- package/src/interfaces/web/src/hooks/useTokenBootstrap.ts +23 -6
- package/src/interfaces/web/src/i18n/en.ts +832 -175
- package/src/interfaces/web/src/i18n/es.ts +841 -188
- package/src/interfaces/web/src/lib/api/agents.ts +23 -4
- package/src/interfaces/web/src/lib/api/code.ts +17 -0
- package/src/interfaces/web/src/lib/api/commitments.ts +7 -1
- package/src/interfaces/web/src/lib/api/conversations.ts +38 -11
- package/src/interfaces/web/src/lib/api/embeddings.ts +3 -0
- package/src/interfaces/web/src/lib/api/engines.ts +14 -0
- package/src/interfaces/web/src/lib/api/groups.ts +93 -0
- package/src/interfaces/web/src/lib/api/images.ts +193 -0
- package/src/interfaces/web/src/lib/api/inbox.ts +29 -5
- package/src/interfaces/web/src/lib/api/integrations.ts +9 -0
- package/src/interfaces/web/src/lib/api/media.ts +126 -0
- package/src/interfaces/web/src/lib/api/net.ts +44 -0
- package/src/interfaces/web/src/lib/api/profiles.ts +12 -0
- package/src/interfaces/web/src/lib/api/projects.ts +9 -1
- package/src/interfaces/web/src/lib/api/routines.ts +9 -1
- package/src/interfaces/web/src/lib/api/sessions.ts +18 -0
- package/src/interfaces/web/src/lib/api/skills.ts +8 -0
- package/src/interfaces/web/src/lib/api/super_agent.ts +3 -0
- package/src/interfaces/web/src/lib/api/tasks.ts +46 -6
- package/src/interfaces/web/src/lib/api/tools.ts +2 -0
- package/src/interfaces/web/src/lib/api/transcribe.ts +31 -0
- package/src/interfaces/web/src/lib/api/turns.ts +20 -0
- package/src/interfaces/web/src/lib/api/voice.ts +72 -2
- package/src/interfaces/web/src/lib/api.ts +3 -0
- package/src/interfaces/web/src/lib/channels.ts +214 -0
- package/src/interfaces/web/src/lib/chat-activity.ts +175 -0
- package/src/interfaces/web/src/lib/chat-prefs.ts +48 -0
- package/src/interfaces/web/src/lib/code-context.ts +0 -2
- package/src/interfaces/web/src/lib/http.ts +51 -17
- package/src/interfaces/web/src/lib/inbox-selection.ts +29 -0
- package/src/interfaces/web/src/lib/live.ts +252 -0
- package/src/interfaces/web/src/lib/net.ts +211 -0
- package/src/interfaces/web/src/lib/notify.ts +331 -0
- package/src/interfaces/web/src/lib/projectNav.ts +40 -0
- package/src/interfaces/web/src/lib/pwa.ts +115 -0
- package/src/interfaces/web/src/lib/qvox.ts +24 -0
- package/src/interfaces/web/src/lib/slug.ts +3 -0
- package/src/interfaces/web/src/lib/tone.ts +150 -0
- package/src/interfaces/web/src/main.tsx +15 -4
- package/src/interfaces/web/src/screens/ApxAdminScreen.tsx +33 -11
- package/src/interfaces/web/src/screens/InboxScreen.tsx +126 -71
- package/src/interfaces/web/src/screens/ProjectScreen.tsx +8 -4
- package/src/interfaces/web/src/screens/SettingsScreen.tsx +7 -4
- package/src/interfaces/web/src/screens/base/AgentDefaultsTab.tsx +30 -9
- package/src/interfaces/web/src/screens/base/CommitmentsTab.tsx +150 -168
- package/src/interfaces/web/src/screens/base/LogsTab.tsx +8 -7
- package/src/interfaces/web/src/screens/base/SessionsTab.tsx +99 -37
- package/src/interfaces/web/src/screens/base/WorkspacesTab.tsx +1 -1
- package/src/interfaces/web/src/screens/mobile/MobileChat.tsx +85 -0
- package/src/interfaces/web/src/screens/mobile/MobileChatList.tsx +244 -0
- package/src/interfaces/web/src/screens/mobile/MobileCommitments.tsx +350 -0
- package/src/interfaces/web/src/screens/mobile/MobileScreen.tsx +138 -0
- package/src/interfaces/web/src/screens/mobile/MobileTabBar.tsx +105 -0
- package/src/interfaces/web/src/screens/mobile/MobileTasks.tsx +407 -0
- package/src/interfaces/web/src/screens/mobile/NewChatSheet.tsx +313 -0
- package/src/interfaces/web/src/screens/mobile/mobileList.tsx +194 -0
- package/src/interfaces/web/src/screens/mobile/routes.ts +239 -0
- package/src/interfaces/web/src/screens/modules/CodeScreen.tsx +135 -64
- package/src/interfaces/web/src/screens/modules/DeckScreen.tsx +0 -1
- package/src/interfaces/web/src/screens/modules/ImagesScreen.tsx +172 -0
- package/src/interfaces/web/src/screens/modules/VoiceScreen.tsx +36 -4
- package/src/interfaces/web/src/screens/project/AgentBrainGraph.tsx +117 -30
- package/src/interfaces/web/src/screens/project/AgentDetailScreen.tsx +537 -92
- package/src/interfaces/web/src/screens/project/AgentsTab.tsx +344 -93
- package/src/interfaces/web/src/screens/project/ArtifactsTab.tsx +1 -1
- package/src/interfaces/web/src/screens/project/ChatTab.tsx +1160 -94
- package/src/interfaces/web/src/screens/project/IntegrationsTab.tsx +3 -2
- package/src/interfaces/web/src/screens/project/McpsTab.tsx +62 -14
- package/src/interfaces/web/src/screens/project/Overview.tsx +36 -15
- package/src/interfaces/web/src/screens/project/RoutinesTab.tsx +93 -8
- package/src/interfaces/web/src/screens/project/SkillsTab.tsx +4 -1
- package/src/interfaces/web/src/screens/project/StructureTab.tsx +5 -4
- package/src/interfaces/web/src/screens/project/TasksTab.tsx +351 -129
- package/src/interfaces/web/src/screens/project/VarsTab.tsx +17 -5
- package/src/interfaces/web/src/styles.css +106 -31
- package/src/interfaces/web/src/types/daemon.ts +246 -2
- package/src/interfaces/web/src/vite-env.d.ts +20 -0
- package/src/interfaces/tui/plugin/command-shim.ts +0 -109
- package/src/interfaces/web/components.json +0 -25
- package/src/interfaces/web/dist/assets/index-CvEoGtTf.js +0 -849
- package/src/interfaces/web/dist/assets/index-CvEoGtTf.js.map +0 -1
- package/src/interfaces/web/dist/assets/index-DzBBXFaO.css +0 -1
- package/src/interfaces/web/src/components/tasks/TaskDetailPanel.tsx +0 -142
- package/src/interfaces/web/src/components/ui/accordion.tsx +0 -72
- package/src/interfaces/web/src/components/ui/alert-dialog.tsx +0 -187
- package/src/interfaces/web/src/components/ui/alert.tsx +0 -76
- package/src/interfaces/web/src/components/ui/aspect-ratio.tsx +0 -22
- package/src/interfaces/web/src/components/ui/avatar.tsx +0 -107
- package/src/interfaces/web/src/components/ui/breadcrumb.tsx +0 -125
- package/src/interfaces/web/src/components/ui/button-group.tsx +0 -87
- package/src/interfaces/web/src/components/ui/calendar.tsx +0 -221
- package/src/interfaces/web/src/components/ui/card.tsx +0 -103
- package/src/interfaces/web/src/components/ui/carousel.tsx +0 -242
- package/src/interfaces/web/src/components/ui/chart.tsx +0 -371
- package/src/interfaces/web/src/components/ui/checkbox.tsx +0 -29
- package/src/interfaces/web/src/components/ui/collapsible.tsx +0 -19
- package/src/interfaces/web/src/components/ui/combobox.tsx +0 -295
- package/src/interfaces/web/src/components/ui/command.tsx +0 -196
- package/src/interfaces/web/src/components/ui/direction.tsx +0 -4
- package/src/interfaces/web/src/components/ui/drawer.tsx +0 -134
- package/src/interfaces/web/src/components/ui/empty.tsx +0 -104
- package/src/interfaces/web/src/components/ui/field.tsx +0 -236
- package/src/interfaces/web/src/components/ui/hover-card.tsx +0 -51
- package/src/interfaces/web/src/components/ui/input-otp.tsx +0 -85
- package/src/interfaces/web/src/components/ui/item.tsx +0 -201
- package/src/interfaces/web/src/components/ui/menubar.tsx +0 -280
- package/src/interfaces/web/src/components/ui/native-select.tsx +0 -61
- package/src/interfaces/web/src/components/ui/navigation-menu.tsx +0 -168
- package/src/interfaces/web/src/components/ui/pagination.tsx +0 -130
- package/src/interfaces/web/src/components/ui/progress.tsx +0 -83
- package/src/interfaces/web/src/components/ui/radio-group.tsx +0 -36
- package/src/interfaces/web/src/components/ui/resizable.tsx +0 -50
- package/src/interfaces/web/src/components/ui/scroll-area.tsx +0 -53
- package/src/interfaces/web/src/components/ui/sidebar.tsx +0 -726
- package/src/interfaces/web/src/components/ui/slider.tsx +0 -52
- package/src/interfaces/web/src/components/ui/sonner.tsx +0 -49
- package/src/interfaces/web/src/components/ui/table.tsx +0 -116
- package/src/interfaces/web/src/components/ui/toggle-group.tsx +0 -87
- package/src/interfaces/web/src/components/ui/toggle.tsx +0 -45
- package/src/interfaces/web/src/hooks/use-mobile.ts +0 -19
- package/src/interfaces/web/src/screens/base/GlobalTasksTab.tsx +0 -161
|
@@ -1,23 +1,33 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: apx-runtime
|
|
3
|
-
description: Delegate a task to an external coding CLI (claude-code, codex, opencode, aider, cursor-agent, gemini-cli, qwen-code) via `apx run`. APX
|
|
3
|
+
description: Delegate a task to an external coding CLI (claude-code, codex, opencode, aider, cursor-agent, gemini-cli, qwen-code, antigravity) via `apx run`. The APX agent is optional — pass-through runs the CLI as itself, `-a <agent>` wraps it in that agent's system prompt. Load when delegating to another AI tool, or when confused about the agent argument.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# apx-runtime
|
|
7
7
|
|
|
8
|
-
A "runtime" is an external AI coding CLI that APX invokes headlessly. APX
|
|
8
|
+
A "runtime" is an external AI coding CLI that APX invokes headlessly. APX spawns the CLI with the right flags, captures stdout (and the external session id when available), and stores run metadata as a session file under `~/.apx/projects/<apxId>/agents/<slug>/sessions/` (never committed). Some flows link to the engine's own transcript path.
|
|
9
|
+
|
|
10
|
+
## The agent is OPTIONAL — and it is not "the CLI's agent"
|
|
11
|
+
|
|
12
|
+
`apx run` delegates a prompt to an external CLI (claude-code, codex, …) that **has its own agency**. An APX agent does one thing here: its `buildAgentSystem()` output becomes the CLI's system prompt. It is a wrapper, not something Claude "uses."
|
|
13
|
+
|
|
14
|
+
- **No agent → pass-through.** `apx run --runtime claude-code "<prompt>"` hands the prompt to the CLI with **no APX system prompt** — Claude/Codex runs as itself. This is the right form when you just want to delegate a task to the tool. Don't invent an agent to do it.
|
|
15
|
+
- **With an agent → wrapped.** `apx run -a <agent> --runtime … "<prompt>"` when you want an APX persona/instructions (a project reviewer, a house style) to shape the run. Use it only when that wrapping is the point.
|
|
16
|
+
|
|
17
|
+
(`apx exec` is the sibling for APX's OWN in-process engine — there `-a <agent>` is likewise optional and defaults to the super-agent. `apx run` is specifically for spawning an external CLI.)
|
|
9
18
|
|
|
10
19
|
## Supported runtimes
|
|
11
20
|
|
|
12
21
|
| id | binary | Headless flag |
|
|
13
22
|
|---|---|---|
|
|
14
23
|
| `claude-code` | `claude` | `-p "<prompt>" --append-system-prompt "<sys>" --output-format json` |
|
|
15
|
-
| `codex` | `codex` | `exec "<prompt>"
|
|
16
|
-
| `opencode` | `opencode` | non-interactive
|
|
17
|
-
| `aider` | `aider` | `--message "<prompt>" --no-
|
|
24
|
+
| `codex` | `codex` | `exec "<prompt>" --sandbox workspace-write --skip-git-repo-check --json` |
|
|
25
|
+
| `opencode` | `opencode` | `run "<prompt>"` (non-interactive) |
|
|
26
|
+
| `aider` | `aider` | `--message "<prompt>" --yes-always --no-auto-commits` |
|
|
18
27
|
| `cursor-agent` | `cursor-agent` | headless print mode |
|
|
19
28
|
| `gemini-cli` | `gemini` | headless prompt mode |
|
|
20
|
-
| `qwen-code` | `qwen
|
|
29
|
+
| `qwen-code` | `qwen` | `--output-format text --approval-mode yolo "<prompt>"` |
|
|
30
|
+
| `antigravity` | `agy` | `agy -p "<prompt>"` (headless). Falls back to the `antigravity-ide` GUI, which can't return a result to stdout. |
|
|
21
31
|
|
|
22
32
|
`apx env detect` reports which are installed and reachable.
|
|
23
33
|
|
|
@@ -27,19 +37,41 @@ A "runtime" is an external AI coding CLI that APX invokes headlessly. APX builds
|
|
|
27
37
|
apx env detect # which runtimes are installed
|
|
28
38
|
apx env list # alias
|
|
29
39
|
|
|
30
|
-
|
|
31
|
-
apx run
|
|
32
|
-
apx run
|
|
33
|
-
apx run
|
|
34
|
-
apx run
|
|
40
|
+
# Pass-through — just delegate to the CLI (no APX agent). The common case.
|
|
41
|
+
apx run --runtime claude-code "Review the diff in src/host/daemon/api/ for memory leaks"
|
|
42
|
+
apx run --runtime codex "Refactor parseAgentFile to use a state machine"
|
|
43
|
+
apx run --runtime codex --timeout 300 "<prompt>" # cap (seconds)
|
|
44
|
+
apx run --runtime codex - # prompt from stdin (large prompts)
|
|
45
|
+
|
|
46
|
+
# Wrapped — shape the run with an APX agent's system prompt.
|
|
47
|
+
apx run -a reviewer --runtime claude-code "Review this repo"
|
|
35
48
|
```
|
|
36
49
|
|
|
37
50
|
Behavior:
|
|
38
51
|
1. APX picks project from `--project` or cwd.
|
|
39
|
-
2.
|
|
52
|
+
2. **If `-a <agent>` was given**, reads that agent's definition + memory + skills and builds a system prompt with `buildAgentSystem(project, agent, { invocation: "runtime", runtime: "<id>" })`. **No agent → no system prompt (pass-through).**
|
|
40
53
|
3. Spawns CLI with the right flags; cwd = project path.
|
|
41
54
|
4. Captures stdout. If runtime printed `APC_RESULT: <value>`, that's the structured result; else first 200 chars of stdout.
|
|
42
|
-
5. Writes `~/.apx/projects/<apxId>/agents/<slug>/sessions
|
|
55
|
+
5. Writes a session file under `~/.apx/projects/<apxId>/agents/<slug>/sessions/` — `<slug>` is the agent, or the runtime id for a pass-through run.
|
|
56
|
+
|
|
57
|
+
## `apx run` delegates; `apx send` converses
|
|
58
|
+
|
|
59
|
+
`apx run` is a ONE-SHOT: the CLI starts cold, does the task, exits. When you want
|
|
60
|
+
a back-and-forth with the CLI instead — ask, read the answer, ask again — address
|
|
61
|
+
it as an a2a peer:
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
apx send <you> opencode "<message>" --deliver
|
|
65
|
+
apx send <you> "opencode#review" "<message>" --deliver # a second, separate thread
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
The peer answers on the a2a channel and CONTINUES ITS OWN SESSION between turns
|
|
69
|
+
(`claude -p --resume`, `codex exec resume`, `opencode run --session`); APX keeps
|
|
70
|
+
the id on the thread. So the second message costs one message, not a re-read of
|
|
71
|
+
everything that came before. See the **apx** skill for the full addressing rules.
|
|
72
|
+
|
|
73
|
+
Use `apx run` when you want the task done and the result back. Use `apx send`
|
|
74
|
+
when the exchange has more than one turn.
|
|
43
75
|
|
|
44
76
|
## Resuming an external session
|
|
45
77
|
|
|
@@ -57,7 +89,7 @@ session_id: abc123
|
|
|
57
89
|
Full resume/get/continue/summarise lives in the **`apx-sessions`** skill. Quick paths:
|
|
58
90
|
|
|
59
91
|
```bash
|
|
60
|
-
apx sessions list --engine claude --project
|
|
92
|
+
apx sessions list --engine claude --project acme
|
|
61
93
|
apx session resume <id> # auto-detects engine
|
|
62
94
|
apx session resume <id> --continue # spawn native CLI to keep going
|
|
63
95
|
apx session resume <id> --summary # super-agent summary
|
|
@@ -67,6 +99,84 @@ apx session get <id> --any --full # or --engine claude --tail 16k
|
|
|
67
99
|
|
|
68
100
|
See `apx-sessions` for full flag reference, collision handling, and daemon-vs-no-daemon matrix.
|
|
69
101
|
|
|
102
|
+
## Async relay — reply back into a coding session
|
|
103
|
+
|
|
104
|
+
Two agents that don't share a live process still need to talk both ways: a coding
|
|
105
|
+
CLI (Claude Code, Codex, …) finishes and asks an APX agent something, the agent
|
|
106
|
+
relays it to the user, the user answers, and the answer has to land back in the
|
|
107
|
+
**same** coding session — with its full context intact. The daemon **cannot**
|
|
108
|
+
inject into a live interactive CLI process, so the model is **mailbox + resume**,
|
|
109
|
+
not a live socket: each round-trip is one headless resume of the session.
|
|
110
|
+
|
|
111
|
+
**The whole convention is one line: identify your session when you message the
|
|
112
|
+
agent.** A coding session tells the agent who to answer by including its engine
|
|
113
|
+
and session id in the message body — nothing more:
|
|
114
|
+
|
|
115
|
+
```
|
|
116
|
+
engine=claude session=<your-session-id>
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
That's the "return address". Any APX agent, on seeing it, knows how to reply.
|
|
120
|
+
|
|
121
|
+
**The return leg** — how an agent (or you, testing) answers a coding session:
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
# Headless: inject one message into the session's transcript (full context) and
|
|
125
|
+
# capture its reply on stdout. Implies --continue. Claude only for now.
|
|
126
|
+
apx session resume <session-id> --continue --msg "the owner says: go ahead with the tests, don't touch login"
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
The reply the woken session produces comes back on stdout — the agent relays that
|
|
130
|
+
to the user, and the loop can go around again.
|
|
131
|
+
|
|
132
|
+
**For an APX agent** (this is a general capability, not one agent's prompt hack):
|
|
133
|
+
when a message carries `engine=claude session=<id>` and the user later answers it,
|
|
134
|
+
run `apx session resume <id> --continue --msg "<user's reply>"` to hand the answer
|
|
135
|
+
back. If you can't resolve the session or the resume fails, tell the user — never
|
|
136
|
+
swallow it.
|
|
137
|
+
|
|
138
|
+
**If you can't determine your own session id**, say so in the message instead of
|
|
139
|
+
guessing — the agent then starts a fresh run rather than a true resume, and the
|
|
140
|
+
user knows context won't carry.
|
|
141
|
+
|
|
142
|
+
**The outbound leg** (coding CLI → agent) goes on the **a2a channel**, so the
|
|
143
|
+
agent sees it as agent-to-agent, not as the user typing:
|
|
144
|
+
|
|
145
|
+
```bash
|
|
146
|
+
apx send <engine> <agent> "…question… engine=claude session=<id>" --deliver --project <name>
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
The sender does not need to be a registered agent — a coding CLI passes its
|
|
150
|
+
engine name (`claude`, `codex`). If the recipient slug exists in several projects,
|
|
151
|
+
`apx send` lists them; pass `--project`. `apx agent list --all` shows every agent
|
|
152
|
+
with its project. Do NOT use `apx exec` for the hand-off — that posts on the user
|
|
153
|
+
channel (the agent reads it as if the user spoke). `--msg` headless delivery on
|
|
154
|
+
the return leg is claude-only today; other engines print "not supported yet". See
|
|
155
|
+
the **claude-code** skill for the coding-CLI side.
|
|
156
|
+
|
|
157
|
+
### a2a etiquette — never message the owner directly
|
|
158
|
+
|
|
159
|
+
An a2a message is another AGENT talking, not the owner. The daemon enforces this
|
|
160
|
+
in the a2a reply prompt, and you should follow it in fuller turns too:
|
|
161
|
+
|
|
162
|
+
- **Don't ping the owner from an a2a turn.** No `apx telegram send`, no direct
|
|
163
|
+
owner message. Whether the owner hears about it — and when — is the
|
|
164
|
+
orchestrator's (Roby / the super-agent's) call, on its own channel, respecting
|
|
165
|
+
quiet-hours.
|
|
166
|
+
- **Not the orchestrator?** If the message needs the owner's attention or a
|
|
167
|
+
decision, relay it up: `apx send <you> roby "…" --deliver`. Roby decides how
|
|
168
|
+
and when to tell the owner. Otherwise just do your part and reply on a2a.
|
|
169
|
+
- **Tag the urgency** so Roby knows how fast to surface it:
|
|
170
|
+
`--severity blocker` is a critical alert — Roby pings the owner **in the act**,
|
|
171
|
+
crossing quiet-hours and the interruption budget (use only for what truly
|
|
172
|
+
can't wait); `--severity status` / `--severity fyi` is a normal notice that
|
|
173
|
+
rides the end-of-day digest and never interrupts. Untagged = normal. The
|
|
174
|
+
`send` result reports `owner_notified` when a `blocker` reached the phone.
|
|
175
|
+
- **Secretary profile active?** Anything promised to / owed to / needing action
|
|
176
|
+
from the owner must be CAPTURED as a commitment (`record_commitment` /
|
|
177
|
+
`apx commitment`, with a due date) so it resurfaces at the right time — a lone
|
|
178
|
+
a2a message is not a reminder, and quiet-hours can swallow a one-off ping.
|
|
179
|
+
|
|
70
180
|
## APC_RESULT contract
|
|
71
181
|
|
|
72
182
|
To capture a structured value from the external runtime, instruct it via the prompt to print on its last line:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: apx-sessions
|
|
3
|
-
description: "Cross-engine session ops (apx, claude, codex, antigravity): find by title, list, get transcript, summarize, ask, resume, continue. Triggers: 'apx session find/ask/summary/resume/get', 'find/resume/summarize session', 'get session transcript', 'continue session in apx'. Not for `apx run` orchestration (use apx skill)."
|
|
3
|
+
description: "Cross-engine session ops (apx, claude, codex, opencode, antigravity): find by title, list, get transcript, summarize, ask, resume, continue. Triggers: 'apx session find/ask/summary/resume/get', 'find/resume/summarize session', 'get session transcript', 'continue session in apx'. Not for `apx run` orchestration (use apx skill)."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# APX Sessions — cross-engine resume, summary, continuation
|
|
@@ -14,6 +14,7 @@ Storage locations APX scans:
|
|
|
14
14
|
| apx | `~/.apx/projects/<apx_id>/agents/<slug>/sessions/*.md` |
|
|
15
15
|
| claude | `~/.claude/projects/<encoded-cwd>/<id>.jsonl` |
|
|
16
16
|
| codex | `~/.codex/sessions/YYYY/MM/DD/rollout-*.jsonl` |
|
|
17
|
+
| opencode | `~/.local/share/opencode` (also `~/.config/opencode`) — listed via the `opencode` CLI (`session list` / `export`) |
|
|
17
18
|
| antigravity | detected only — listing not implemented yet |
|
|
18
19
|
|
|
19
20
|
Uninstalled engines are skipped silently. Detected-but-empty engines print `(sin nada)`.
|
|
@@ -77,7 +78,7 @@ Limits of `ask`: binary noise (base64 images) is stripped before chunking. Cover
|
|
|
77
78
|
```bash
|
|
78
79
|
apx sessions list # all engines, all projects
|
|
79
80
|
apx sessions list --dir /path/to/repo # all engines, one dir (no registration needed)
|
|
80
|
-
apx sessions list --project
|
|
81
|
+
apx sessions list --project acme # all engines, registered project
|
|
81
82
|
apx sessions list --engine claude # one engine, all projects
|
|
82
83
|
apx sessions list --engine codex --dir /path --limit 10 # one engine, one dir
|
|
83
84
|
```
|
|
@@ -88,7 +89,7 @@ Per engine: `DATE | SESSION ID | TITLE` newest first, plus the native-CLI resume
|
|
|
88
89
|
|
|
89
90
|
## Resuming by id (`apx session resume <id>`)
|
|
90
91
|
|
|
91
|
-
1. Searches every engine (apx → claude → codex).
|
|
92
|
+
1. Searches every engine (apx → claude → codex → opencode).
|
|
92
93
|
2. **One match** → prints metadata (engine, path, cwd, title).
|
|
93
94
|
3. **Zero matches** → non-zero exit with `session "<id>" not found in any detected engine`.
|
|
94
95
|
4. **Multiple matches** → prints all, exit 2, asks for `--engine <id>`.
|
|
@@ -97,7 +98,7 @@ Flags:
|
|
|
97
98
|
|
|
98
99
|
| Flag | Effect |
|
|
99
100
|
|------|--------|
|
|
100
|
-
| `--engine <apx\|claude\|codex>` | Skip auto-detection. |
|
|
101
|
+
| `--engine <apx\|claude\|codex\|opencode>` | Skip auto-detection. |
|
|
101
102
|
| `--tail N[k\|m]` | Print last N bytes (e.g. `--tail 32k`). No daemon. |
|
|
102
103
|
| `--full` / `--body` | Dump entire transcript. No daemon. |
|
|
103
104
|
| `--summary` | Tail → super-agent → 4-bullet summary. **Daemon + `super_agent.enabled`.** |
|
|
@@ -161,7 +162,7 @@ If the daemon is down, `apx` auto-starts it when needed.
|
|
|
161
162
|
|
|
162
163
|
---
|
|
163
164
|
|
|
164
|
-
## Native APX session commands
|
|
165
|
+
## Native APX session commands
|
|
165
166
|
|
|
166
167
|
Manage APX-native sessions (`.md` files in `~/.apx/projects/.../sessions/`). They do **not** see Claude/Codex sessions.
|
|
167
168
|
|
|
@@ -185,7 +186,7 @@ $ apx session resume abc123
|
|
|
185
186
|
⚠️ session id "abc123" exists in multiple engines:
|
|
186
187
|
- claude /Users/.../-Volumes-work-repo/abc123.jsonl (cwd: /Volumes/work/repo)
|
|
187
188
|
- codex /Users/.../sessions/2026/05/27/rollout-...-abc123.jsonl (cwd: /Volumes/work/repo)
|
|
188
|
-
→ re-run with --engine <id> to pick one (apx | claude | codex)
|
|
189
|
+
→ re-run with --engine <id> to pick one (apx | claude | codex | opencode)
|
|
189
190
|
```
|
|
190
191
|
|
|
191
192
|
Pick one with `--engine claude` or `--engine codex`.
|
|
@@ -17,11 +17,13 @@ A **skill** is a Markdown file the super-agent loads on demand. Inspired by Anth
|
|
|
17
17
|
|
|
18
18
|
Scanned in priority order:
|
|
19
19
|
|
|
20
|
-
1. `<repo>/.apc/skills/<slug>/SKILL.md` — project-scoped.
|
|
20
|
+
1. `<repo>/.apc/skills/<slug>/SKILL.md` (or flat `<slug>.md`) — project-scoped.
|
|
21
21
|
2. `~/.apx/skills/<slug>/SKILL.md` — user-global.
|
|
22
|
-
3. `<
|
|
22
|
+
3. `<packageRoot>/src/core/runtime-skills/<slug>/SKILL.md` — the runtime-internal set that ships with APX (the built-in `apx-*`, `apc-context`, `claude-code`, …). This is where a new super-agent skill goes.
|
|
23
23
|
|
|
24
|
-
|
|
24
|
+
> ⚠️ `<repo>/skills/` is **NOT** in the super-agent's load chain (see `src/core/agent/skills/loader.js:23`). That folder is the slim engine-side set replicated to external CLIs/IDEs (`~/.claude/skills/`, `~/.codex/skills/`). A skill authored there will never load for the super-agent — put it under `src/core/runtime-skills/`.
|
|
25
|
+
|
|
26
|
+
Layouts: `<slug>/SKILL.md` (dir-style, preferred — supports `references/`, `assets/`) or `<slug>.md` (flat, fine for short — project scope only).
|
|
25
27
|
|
|
26
28
|
## Frontmatter
|
|
27
29
|
|
|
@@ -40,7 +42,7 @@ scope: public # public (synced globally) | internal (repo/dev-only) | optional
|
|
|
40
42
|
|
|
41
43
|
## Body style
|
|
42
44
|
|
|
43
|
-
Opinionated, concrete, anti-example-driven. Read a sibling `skills/apx-*` before writing yours. Shape:
|
|
45
|
+
Opinionated, concrete, anti-example-driven. Read a sibling `src/core/runtime-skills/apx-*` before writing yours. Shape:
|
|
44
46
|
|
|
45
47
|
1. **One-paragraph "what this is"** — no preamble.
|
|
46
48
|
2. **Concrete CLI calls** — most common first.
|
|
@@ -69,13 +71,13 @@ apx skills status # what's installed vs available
|
|
|
69
71
|
|
|
70
72
|
```bash
|
|
71
73
|
# 1. Pick scope:
|
|
72
|
-
# .apc/skills/<slug>/SKILL.md
|
|
73
|
-
# ~/.apx/skills/<slug>/SKILL.md
|
|
74
|
-
# skills/<slug>/SKILL.md
|
|
74
|
+
# .apc/skills/<slug>/SKILL.md (project)
|
|
75
|
+
# ~/.apx/skills/<slug>/SKILL.md (user-global)
|
|
76
|
+
# src/core/runtime-skills/<slug>/SKILL.md (runtime-internal, ships with APX)
|
|
75
77
|
|
|
76
78
|
# 2. Write
|
|
77
|
-
mkdir -p skills/my-thing
|
|
78
|
-
$EDITOR skills/my-thing/SKILL.md
|
|
79
|
+
mkdir -p src/core/runtime-skills/my-thing
|
|
80
|
+
$EDITOR src/core/runtime-skills/my-thing/SKILL.md
|
|
79
81
|
|
|
80
82
|
# 3. Verify (daemon picks up on next listSkills() — no restart)
|
|
81
83
|
apx skills list | grep my-thing
|
|
@@ -98,13 +100,13 @@ name: vague-stuff
|
|
|
98
100
|
# Teach the decision tree ("shared vs runtime", "what to do if it fails").
|
|
99
101
|
|
|
100
102
|
# DON'T leave TODOs in production skills. Delete incomplete sections;
|
|
101
|
-
# move them to spec/backlog
|
|
103
|
+
# move them to spec/active/backlog/ (local-only).
|
|
102
104
|
```
|
|
103
105
|
|
|
104
106
|
## Optional scaffolding
|
|
105
107
|
|
|
106
108
|
```
|
|
107
|
-
skills/my-thing/
|
|
109
|
+
src/core/runtime-skills/my-thing/
|
|
108
110
|
├── SKILL.md ← always
|
|
109
111
|
├── references/ ← markdown the skill cites
|
|
110
112
|
├── assets/ ← images, schemas, sample inputs
|
|
@@ -115,11 +117,11 @@ Only `SKILL.md` is auto-loaded. Reference others by relative path from the body
|
|
|
115
117
|
|
|
116
118
|
## Existing skills — mimic the style
|
|
117
119
|
|
|
118
|
-
`skills/apx-routine`, `apx-mcp`, `apx-task`, `apx-telegram`, `apx-runtime`, `apx-sessions`, `apx-voice`, `apx-agent`, `apx-project`. Pick the closest topic, copy the structure.
|
|
120
|
+
`src/core/runtime-skills/apx-routine`, `apx-mcp`, `apx-integrations`, `apx-task`, `apx-telegram`, `apx-runtime`, `apx-sessions`, `apx-voice`, `apx-agent`, `apx-project`. Pick the closest topic, copy the structure.
|
|
119
121
|
|
|
120
122
|
## Maintainer contract
|
|
121
123
|
|
|
122
|
-
`AGENTS.md`
|
|
124
|
+
The dev guide `AGENTS.md` (repo root) rule 6 requires skills to move in lockstep with feature changes. Update or add the skill in the same PR as the behavior change — especially `src/core/runtime-skills/apx-*`.
|
|
123
125
|
|
|
124
126
|
## Don't
|
|
125
127
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: apx-task
|
|
3
|
-
description: Per-project TODO list. Event-sourced, project-scoped, addressable by short id prefix. Load when user wants to note, remind, list, or
|
|
3
|
+
description: Per-project TODO list with subtasks, comments and a board. Event-sourced, project-scoped, addressable by short id prefix. Load when user wants to note, remind, list, complete, split or comment on a task. Triggers: 'add a task', 'remind me to…', 'what's pending', 'mark as done', 'open tasks', 'split this task', 'subtask', 'comment on the task', 'move it to QA'.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# apx-task
|
|
@@ -11,30 +11,33 @@ A `task` is a per-project TODO. Append-only JSONL event log per month at `~/.apx
|
|
|
11
11
|
|
|
12
12
|
```bash
|
|
13
13
|
# Add
|
|
14
|
-
apx task add "Review the auth bug" --project
|
|
15
|
-
apx task add "
|
|
16
|
-
apx task add "
|
|
14
|
+
apx task add "Review the auth bug" --project acme
|
|
15
|
+
apx task add "Llamar al contador" --project casa --description "Antes del viernes, por el monotributo"
|
|
16
|
+
apx task add "Rotar las claves" --project acme --body "Rotate every API key in .env and open a PR" --agent ops
|
|
17
|
+
apx task add "Call the client" --project acme --due 2026-05-30 --tag urgent
|
|
18
|
+
apx task add "Demo for tester X" --project acme --agent reviewer --tag demo --tag external --source cli
|
|
17
19
|
|
|
18
20
|
# List (defaults to open)
|
|
19
|
-
apx task list --project
|
|
21
|
+
apx task list --project acme
|
|
20
22
|
apx task list --all # every registered project, each row labelled
|
|
21
23
|
apx task list --all --status blocked # what is stuck, everywhere
|
|
22
24
|
apx task list --all --updated-since 2026-08-01T00:00:00Z # what moved
|
|
23
|
-
apx task list --project
|
|
24
|
-
apx task list --project
|
|
25
|
-
apx task list --project
|
|
26
|
-
apx task list --project
|
|
27
|
-
apx task list --project
|
|
28
|
-
apx task list --project
|
|
25
|
+
apx task list --project acme --status in_review
|
|
26
|
+
apx task list --project acme --state all
|
|
27
|
+
apx task list --project acme --state done
|
|
28
|
+
apx task list --project acme --tag urgent
|
|
29
|
+
apx task list --project acme --due-before 2026-06-01
|
|
30
|
+
apx task list --project acme --limit 5
|
|
29
31
|
|
|
30
32
|
# Inspect / mutate
|
|
31
|
-
apx task show t_abc123 --project
|
|
32
|
-
apx task show abc --project
|
|
33
|
-
apx task done t_abc123 --project
|
|
34
|
-
apx task drop t_abc123 --project
|
|
35
|
-
apx task reopen t_abc123 --project
|
|
36
|
-
apx task patch t_abc123 --project
|
|
37
|
-
apx task patch t_abc123 --project
|
|
33
|
+
apx task show t_abc123 --project acme
|
|
34
|
+
apx task show abc --project acme # prefix match (≥3 chars, unique)
|
|
35
|
+
apx task done t_abc123 --project acme --by manuel
|
|
36
|
+
apx task drop t_abc123 --project acme # archived (not "done")
|
|
37
|
+
apx task reopen t_abc123 --project acme
|
|
38
|
+
apx task patch t_abc123 --project acme --title "New title" --due 2026-06-10
|
|
39
|
+
apx task patch t_abc123 --project acme --description "Lo que tengo que hacer yo"
|
|
40
|
+
apx task patch t_abc123 --project acme --tag bug --tag blocker # replaces tags
|
|
38
41
|
```
|
|
39
42
|
|
|
40
43
|
## ID format
|
|
@@ -46,23 +49,71 @@ apx task patch t_abc123 --project iacrmar --tag bug --tag blocker # replaces
|
|
|
46
49
|
| Field | When | Notes |
|
|
47
50
|
|---|---|---|
|
|
48
51
|
| `title` | always | One imperative line. Required. |
|
|
49
|
-
| `
|
|
52
|
+
| `description` | optional | **What the OWNER has to do**, in their words. Markdown OK. This is what the panel, the phone and `apx task show` display. Fill it for anything a person will do. |
|
|
53
|
+
| `body` | optional | **The prompt an AGENT receives** if it runs the task. Only for tasks meant to be executed by an agent — leave it empty for a plain to-do. |
|
|
50
54
|
| `tags` | optional | Free-form. Used by `--tag` filter. |
|
|
51
|
-
| `due` | optional | ISO `YYYY-MM-DD`.
|
|
55
|
+
| `due` | optional | ISO `YYYY-MM-DD`. Filter with `--due-before` / `--due-after`. |
|
|
52
56
|
| `agent` | optional | Slug of responsible agent. Used by `--agent` filter. |
|
|
53
57
|
| `source` | auto/optional | Origin (cli, telegram, super-agent). |
|
|
54
|
-
| `state` | derived | `open` after create, `done`/`dropped` after ops. |
|
|
58
|
+
| `state` | derived | Storage lifecycle: `open` after create, `done`/`dropped` after ops. |
|
|
59
|
+
| `status` | sub-status | Which BOARD COLUMN an **open** task sits in. Ships as `pending` (default) \| `running` \| `in_review` \| `blocked`, but the column catalog is configurable — call `GET /api/projects/:pid/tasks/columns` for what THIS project actually has. Orthogonal to `state`. Set via `POST …/tasks/:id/status` (the CLI `patch` does not set it). |
|
|
60
|
+
| `parent` | optional | Id of a parent task. **A subtask is a task with a parent** — same store, same verbs, so it can be assigned, moved and closed on its own. |
|
|
61
|
+
| `comments` | derived | The task's thread, oldest first. Present on `show`/`GET one`; list rows carry `comment_count` instead. |
|
|
62
|
+
|
|
63
|
+
## Subtasks — splitting a task that is really several
|
|
64
|
+
|
|
65
|
+
One row that bundles five requirements cannot be handed out, moved to QA, or
|
|
66
|
+
ticked off in pieces. Split it: keep the parent as the epic and add a subtask
|
|
67
|
+
per real unit of work.
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
apx task list --project acme --parent t_epic123 # its children
|
|
71
|
+
apx task list --project acme --parent "" # only top-level tasks
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
With the tool: `create_task({ project, title, parent: "t_epic123" })`.
|
|
75
|
+
|
|
76
|
+
## Comments, and handing a task to an agent
|
|
77
|
+
|
|
78
|
+
```
|
|
79
|
+
POST /api/projects/:pid/tasks/:id/comments { text }
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
**An @mention in a comment summons that agent.** It runs a REAL turn with its
|
|
83
|
+
own tools against the task, and its reply is posted back as another comment —
|
|
84
|
+
so "@qa probá el flujo de login" is a QA run, not a note. Agent→agent handovers
|
|
85
|
+
(`@dev` inside QA's reply) cascade, are mirrored onto the a2a ledger, and stop
|
|
86
|
+
at a ceiling of 4 replies per comment so a mention loop cannot run away.
|
|
87
|
+
|
|
88
|
+
The `comment_task` tool writes a comment but **summons nobody** — that is
|
|
89
|
+
deliberate: only the owner's comment, and the cascade already running under its
|
|
90
|
+
ceiling, can start a turn. To hand work over, name the agent in your reply.
|
|
91
|
+
|
|
92
|
+
## Board columns
|
|
93
|
+
|
|
94
|
+
One catalog for every project (`config.tasks.columns`), and each project shows
|
|
95
|
+
an ordered subset (`.apc/config.json` → `tasks.columns`). `done` is always the
|
|
96
|
+
last column and is not in the catalog — closing a task is `POST …/done`, not a
|
|
97
|
+
status. A column may carry `on_enter: { agent, instruction }`: a task landing
|
|
98
|
+
there is handed to that agent through the same comment path as an @mention.
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
GET /api/tasks/columns # the global catalog
|
|
102
|
+
GET /api/projects/:pid/tasks/columns # what this project shows, + the catalog
|
|
103
|
+
```
|
|
55
104
|
|
|
56
105
|
## Super-agent tools
|
|
57
106
|
|
|
58
|
-
The super-agent has `create_task` and `
|
|
107
|
+
The super-agent has `create_task`, `list_tasks`, **`complete_task`** (done | drop | reopen | status) and **`comment_task`**. Add, list, and close all happen with tools — no shelling out to `apx task done`. "Note that we need to close the auth bug in acme tomorrow" → model calls:
|
|
59
108
|
|
|
60
109
|
```json
|
|
61
110
|
{ "name": "create_task",
|
|
62
|
-
"arguments": { "project": "
|
|
111
|
+
"arguments": { "project": "acme", "title": "Close the auth bug", "description": "The 401 on refresh — reproduce it first", "due": "<tomorrow>", "tags": ["bug"] } }
|
|
63
112
|
```
|
|
64
113
|
|
|
65
|
-
|
|
114
|
+
**`description` vs `body`.** `description` is for the person; `body` is the prompt an agent receives. Most tasks the owner dictates are the first kind — write the description and leave `body` empty. Putting a prompt where the description belongs is what turns a to-do list into a queue of jobs its owner cannot read.
|
|
115
|
+
|
|
116
|
+
"What's pending in acme?" → `list_tasks({ project: "acme" })`. If user doesn't say which project, `list_projects` first and ask — never assume. If the channel has pinned project context (Telegram), use that.
|
|
66
117
|
|
|
67
118
|
## Anti-examples
|
|
68
119
|
|
|
@@ -79,14 +130,16 @@ apx task drop t_abc # "no longer needed; archive without completion"
|
|
|
79
130
|
## Endpoint surface
|
|
80
131
|
|
|
81
132
|
```
|
|
82
|
-
GET /api/
|
|
133
|
+
GET /api/tasks cross-project; same filters, plus ?offset
|
|
134
|
+
GET /api/projects/:pid/tasks ?state=open|done|dropped|all&status=pending|running|in_review|blocked&tag=X&agent=Y&due_before=ISO&due_after=ISO&updated_since=ISO&limit=N
|
|
83
135
|
POST /api/projects/:pid/tasks { title, body?, tags?, due?, agent?, source?, meta? }
|
|
84
136
|
GET /api/projects/:pid/tasks/:id
|
|
85
137
|
PATCH /api/projects/:pid/tasks/:id { patch: {...} }
|
|
86
138
|
POST /api/projects/:pid/tasks/:id/done { by? }
|
|
87
139
|
POST /api/projects/:pid/tasks/:id/drop { by? }
|
|
88
140
|
POST /api/projects/:pid/tasks/:id/reopen
|
|
89
|
-
|
|
141
|
+
POST /api/projects/:pid/tasks/:id/status { status: pending|running|in_review|blocked }
|
|
142
|
+
GET /api/projects/:pid/tasks-summary → { open, done, dropped, overdue, total, status:{…} }
|
|
90
143
|
```
|
|
91
144
|
|
|
92
145
|
## Don't
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: apx-telegram
|
|
3
|
-
description: APX Telegram plugin — channels, project pinning, master agents, media. Load BEFORE configuring a new bot or routing —
|
|
3
|
+
description: APX Telegram plugin — channels, project pinning, master agents, media. Load BEFORE configuring a new bot or routing — channels[] is the only place credentials live.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# apx-telegram
|
|
@@ -21,7 +21,7 @@ APX polls `getUpdates` and routes messages. Config: `~/.apx/config.json → tele
|
|
|
21
21
|
"name": "default",
|
|
22
22
|
"bot_token": "<from BotFather>",
|
|
23
23
|
"chat_id": "<numeric chat id>",
|
|
24
|
-
"project": "
|
|
24
|
+
"project": "acme", // optional: pin to project
|
|
25
25
|
"route_to_agent": "reviewer", // optional: per-channel agent
|
|
26
26
|
"respond_with_engine": true, // optional: override global
|
|
27
27
|
"owner_user_id": "123456789" // optional: via `apx telegram owner`
|
|
@@ -33,19 +33,19 @@ APX polls `getUpdates` and routes messages. Config: `~/.apx/config.json → tele
|
|
|
33
33
|
}
|
|
34
34
|
```
|
|
35
35
|
|
|
36
|
-
Root `telegram.bot_token` / `telegram.chat_id` are **
|
|
36
|
+
Root `telegram.bot_token` / `telegram.chat_id` are **not read**. APX drops them on load, so a token written there silently does nothing — always use `channels[]`. With `channels[]` empty, APX polls one implicit `default` channel using `BOT_TELEGRAM_TOKEN` / `TELEGRAM_CHAT_ID` from the environment.
|
|
37
37
|
|
|
38
38
|
## Concrete CLI calls
|
|
39
39
|
|
|
40
40
|
```bash
|
|
41
|
-
apx telegram setup #
|
|
41
|
+
apx telegram setup # prints the config template (channels[] shape)
|
|
42
42
|
|
|
43
43
|
# Channels CRUD
|
|
44
44
|
apx telegram channel add # interactive
|
|
45
|
-
apx telegram channel add clientes --bot-token <T> --chat-id <C> --project
|
|
45
|
+
apx telegram channel add clientes --bot-token <T> --chat-id <C> --project acme --agent reviewer
|
|
46
46
|
apx telegram channel list # alias: ls
|
|
47
47
|
apx telegram channel show clientes # alias: get
|
|
48
|
-
apx telegram channel set clientes --project
|
|
48
|
+
apx telegram channel set clientes --project acme
|
|
49
49
|
apx telegram channel set clientes --agent reviewer
|
|
50
50
|
apx telegram channel set clientes --respond-engine false
|
|
51
51
|
apx telegram channel unset clientes --project --agent
|
|
@@ -85,20 +85,20 @@ Every `channel` CRUD write triggers `POST /api/admin/reload` so polling picks up
|
|
|
85
85
|
|
|
86
86
|
## What "pin to project" does
|
|
87
87
|
|
|
88
|
-
On a message to a channel with `project: "
|
|
89
|
-
1. The super-agent invocation gets `channelMeta.projectId = <
|
|
88
|
+
On a message to a channel with `project: "acme"`:
|
|
89
|
+
1. The super-agent invocation gets `channelMeta.projectId = <acme's id>`.
|
|
90
90
|
2. The system prompt resolves project-scoped agents, MCPs, memory.
|
|
91
|
-
3. Tools (`list_agents`, `list_tasks`, `create_task`, …) default to that project — no need to repeat "in
|
|
91
|
+
3. Tools (`list_agents`, `list_tasks`, `create_task`, …) default to that project — no need to repeat "in acme" each message.
|
|
92
92
|
|
|
93
93
|
## What "master agent" does
|
|
94
94
|
|
|
95
|
-
With `route_to_agent: "reviewer"`,
|
|
95
|
+
With `route_to_agent: "reviewer"`, an incoming message is dispatched to that project agent instead of the super-agent. Routing is **in-process** — `src/core/channels/telegram/dispatch.js` reads the agent and makes a single `callEngine` with the agent's `AGENT.md` + memory (there is no per-request `agents/:slug/chat` HTTP route). No tools: text in, text out. Use this for persona channels (reviewer, sales, support) instead of the general assistant. Empty = super-agent (default).
|
|
96
96
|
|
|
97
97
|
## Anti-examples
|
|
98
98
|
|
|
99
99
|
```bash
|
|
100
|
-
# DON'T write to
|
|
101
|
-
apx config set telegram.bot_token "<T>" # ← use channels[] via `apx telegram channel`
|
|
100
|
+
# DON'T write to the root fields — they are dropped on load.
|
|
101
|
+
apx config set --global telegram.bot_token "<T>" # ← use channels[] via `apx telegram channel`
|
|
102
102
|
|
|
103
103
|
# DON'T expect routing magic from same project on two channels.
|
|
104
104
|
# A channel pins messages TO a project, not vice-versa. Same project from multiple
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: apx-transcribe
|
|
3
|
+
scope: optional
|
|
4
|
+
description: Transcribe audio and video files to text from the command line with `apx transcribe`, using the daemon's built-in Whisper. Load when asked to transcribe a voice note, an audio clip, or a video's speech, to batch-transcribe a folder, to pipe transcription into a script, or when choosing between the local, cloud, or a networked custom STT engine.
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# apx-transcribe
|
|
8
|
+
|
|
9
|
+
`apx transcribe` is a thin CLI over the daemon's speech-to-text engine — the same persistent `whisper-server.py` that powers the desktop overlay and Telegram voice notes (`core/voice/transcription.js`). The model is preloaded at daemon boot, so calls hit a warm server and stay fast. This is the fastest way to turn a file on disk into text without writing any HTTP.
|
|
10
|
+
|
|
11
|
+
## Usage
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
apx transcribe nota.oga # transcript to stdout, nothing else
|
|
15
|
+
apx transcribe reunion.mp4 # video: the audio track is extracted
|
|
16
|
+
apx transcribe a.wav b.m4a c.mp3 # bulk: one "── name ──" block per file
|
|
17
|
+
apx transcribe ./notas-de-voz/ # every audio/video file in a folder
|
|
18
|
+
apx transcribe voz.webm --lang es # pin the language (else auto-detect)
|
|
19
|
+
apx transcribe *.mp3 --json > out.json # machine-readable array
|
|
20
|
+
cat clip.wav | apx transcribe - # read audio from stdin
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Formats
|
|
24
|
+
|
|
25
|
+
Audio: `webm`, `ogg`/`oga`, `opus`, `m4a`, `aac`, `mp3`, `wav`, `flac`. Video: `mp4`, `mov`, `mkv`, `m4v`, `avi`, `3gp` and more. The daemon shells out to `ffmpeg`, which probes the real container from the bytes and pulls the audio track out of a video — so the extension is only a hint, and a mislabelled file still works.
|
|
26
|
+
|
|
27
|
+
## Provider routing (`--provider`)
|
|
28
|
+
|
|
29
|
+
The `--provider` flag overrides the configured STT routing for one call:
|
|
30
|
+
|
|
31
|
+
| id | What it is |
|
|
32
|
+
|---|---|
|
|
33
|
+
| `local` | The embedded Whisper. On Apple Silicon it runs on `mlx` (Metal GPU), on NVIDIA on `faster-whisper` cuda, else CPU — picked automatically. |
|
|
34
|
+
| `openai` | Cloud Whisper (`whisper-1`). Needs `OPENAI_API_KEY` or `engines.openai.api_key`. |
|
|
35
|
+
| `custom` | Any OpenAI-compatible STT server reachable over the network — mlx-audio on this Mac, a Radeon/NVIDIA box on the LAN, or a remote endpoint. Configured under `transcription.custom.base_url`. |
|
|
36
|
+
|
|
37
|
+
Default routing lives in `~/.apx/config.json` under `transcription.provider` (`auto` tries local first, falls back to OpenAI if a key is set).
|
|
38
|
+
|
|
39
|
+
## Output contract (why it is scriptable)
|
|
40
|
+
|
|
41
|
+
- **One file** → the bare transcript on **stdout**, one trailing newline. Pipe-friendly: `apx transcribe x.oga | pbcopy` copies clean text.
|
|
42
|
+
- **Many files / a folder** → a `── filename ──` header before each transcript.
|
|
43
|
+
- **`--json`** → the full result object (`text`, `language`, `backend`, `model`, …) for one file, or an array of `{file, ...}` in bulk.
|
|
44
|
+
- The `▸ APX CLI` banner always goes to **stderr**, never stdout.
|
|
45
|
+
- Bulk runs **sequentially** (the local model is single-instance) and keeps going past a failed file, exiting non-zero if any failed.
|
|
46
|
+
|
|
47
|
+
## How it works
|
|
48
|
+
|
|
49
|
+
The CLI reads the file bytes and POSTs them to the daemon's `POST /api/transcribe/chunk` with `X-Audio-Format`, `X-Language`, and optional `X-Provider` headers. That endpoint is the shared "any external caller" entry point, so a routine's `pre_command`, a hook, or a plain shell script all get the same warm engine without spawning their own Whisper. Long media is allowed up to 20 minutes per request.
|
|
50
|
+
|
|
51
|
+
## Don't
|
|
52
|
+
|
|
53
|
+
- Don't spin up a separate Whisper process or a Python script to transcribe — the daemon already runs a warm one; `apx transcribe` reuses it. A parallel instance just fights for the GPU.
|
|
54
|
+
- Don't restart the daemon to "load" the model before transcribing — it is preloaded at boot, and the endpoint lazily re-spawns it after the idle-shutdown anyway.
|
|
55
|
+
- Don't pre-extract audio from a video before transcribing it — pass the video directly; the daemon's ffmpeg handles the audio track.
|
|
56
|
+
- Don't parse the human transcript when you need fields — use `--json` and read `text`, never scrape stdout for the language or model.
|