@agentprojectcontext/apx 1.80.2 → 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 +134 -0
- 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
|
@@ -13,11 +13,18 @@ A scheduled APX task. Scheduler ticks every 5s. Each routine has a `kind`, `sche
|
|
|
13
13
|
|---|---|---|
|
|
14
14
|
| `heartbeat` | no | "Still alive" marker. No LLM. |
|
|
15
15
|
| `shell` | no | Pure shell. Stdout captured. |
|
|
16
|
-
| `exec_agent` | **
|
|
16
|
+
| `exec_agent` | **agent allowlist** | Loads that project agent and runs `spec.prompt`. By default the agent uses its own resolved tools (its `tools:` field, or the broad capability default when it declares none). Persists a conversation. A **non-empty** routine `allowed_tools` overrides the card. For the one-shot text path (no tools at all), set `spec.no_tools: true` — see the gotcha below. |
|
|
17
|
+
| `watch` | **agent allowlist** | Deterministic detection first, then a model judgement step over `spec.prompt`. A watcher, not a cron+LLM. Needs `spec.prompt`. |
|
|
17
18
|
| `super_agent` | **all** | Default agent with full tool registry. Multi-iteration loop. |
|
|
18
|
-
| `telegram` | n/a | Sends hardcoded text via Telegram plugin. |
|
|
19
|
+
| `telegram` | n/a | Sends hardcoded text via Telegram plugin. `spec.text` is the message body — the automation header is NOT prepended to it. |
|
|
19
20
|
|
|
20
|
-
Rule:
|
|
21
|
+
Rule: a project agent that must *do* work (read files, Asana, compact a ledger) → `exec_agent`; orchestration as the super-agent → `super_agent`; text-only + shell delivery → `exec_agent` with `spec.no_tools: true`; pure shell → `shell`; fixed Telegram poke → `telegram`.
|
|
22
|
+
|
|
23
|
+
### `allowed_tools` vs `no_tools` (read before you copy a skeleton)
|
|
24
|
+
|
|
25
|
+
- `allowed_tools` **non-empty** → overrides the agent's card for this routine.
|
|
26
|
+
- `allowed_tools: []` → **no override; the agent runs with its OWN resolved tools.** This is NOT "no tools" — and `[]` is exactly what `apx routine add` writes when you pass no `--allowed-tools`, so an ordinary create already gives the agent its tools.
|
|
27
|
+
- `spec.no_tools: true` → the deliberate opt-out: a single text-only call, no tools, for the "write one sentence, `post_commands` deliver it" pattern.
|
|
21
28
|
|
|
22
29
|
## Schedule grammar
|
|
23
30
|
|
|
@@ -40,7 +47,18 @@ Rule: text from model → `exec_agent`; orchestration (MCPs, files, multi-agent)
|
|
|
40
47
|
}
|
|
41
48
|
```
|
|
42
49
|
|
|
43
|
-
Pipeline: `pre_commands` run sequentially → combined stdout becomes `{{pre_output}}` in `spec.prompt` and `$APX_PRE_OUTPUT` (plus `$APX_PRE_OUTPUT_FILE` for big payloads) → handler runs, result becomes `$APX_LLM_OUTPUT` → `post_commands` run.
|
|
50
|
+
Pipeline: `pre_commands` run sequentially → combined stdout becomes `{{pre_output}}` in `spec.prompt` / `spec.text` and `$APX_PRE_OUTPUT` (plus `$APX_PRE_OUTPUT_FILE` for big payloads) → handler runs, result becomes `$APX_LLM_OUTPUT` → `post_commands` run. `{{pre_output}}` is always substituted — with no pre_commands it renders empty, never as literal braces.
|
|
51
|
+
|
|
52
|
+
## Automation header (native — don't hand-roll the date)
|
|
53
|
+
|
|
54
|
+
The runner prepends a native **automation header** to the top of `spec.prompt` on every LLM-backed run (`core/routines/header.js`, built in `core/routines/runner.js`). It carries: routine name + id, the routine's memory path, `last_run_at` and this run's start — each clock given twice, machine-friendly (ISO + epoch ms, UTC) and human-friendly in the owner's `config.user.timezone` / `.locale`.
|
|
55
|
+
|
|
56
|
+
This **replaces the old `echo "…date…"` pre_command + `{{pre_output}}` trick** for "what time / day is it". Do NOT add a shell pre_command just to feed the model the date — it already opens on who it is and what "now" is. The header is NOT prepended to a `telegram` routine's `spec.text` (that string is the message body, sent verbatim).
|
|
57
|
+
|
|
58
|
+
## Iteration budget
|
|
59
|
+
|
|
60
|
+
- A routine that **reports to Telegram** (its `post_commands` send via Telegram, so `send_telegram` is auto-suppressed) uses `super_agent.telegram_max_iters` (default `TELEGRAM_TOOL_ITERS`, a high runaway backstop) and normally runs until work is done.
|
|
61
|
+
- Any **other** routine runs effectively **uncapped** to completion (`super_agent.routine_max_iters`, default `ROUTINE_UNCAPPED_TOOL_ITERS`): background work nobody is watching (Magui filling a backlog) must finish, not get cut at the chat budget. Only the `post_command` Telegram sink marks a routine telegram-bound — a routine whose *agent* sends a summary at the end is still uncapped.
|
|
44
62
|
|
|
45
63
|
## Anti-example: double-reply
|
|
46
64
|
|
|
@@ -52,12 +70,12 @@ Pipeline: `pre_commands` run sequentially → combined stdout becomes `{{pre_out
|
|
|
52
70
|
}
|
|
53
71
|
```
|
|
54
72
|
|
|
55
|
-
Sends **two** messages: one from agent's `send_telegram` tool, one from `post_commands`. The runner auto-suppresses `send_telegram` when post contains `apx telegram send`, but the clean fix is `exec_agent
|
|
73
|
+
Sends **two** messages: one from agent's `send_telegram` tool, one from `post_commands`. The runner auto-suppresses `send_telegram` when post contains `apx telegram send`, but the clean fix is `exec_agent` with tools off (`spec.no_tools: true` — NOT `allowed_tools: []`, which leaves the agent's tools on):
|
|
56
74
|
|
|
57
75
|
```json
|
|
58
76
|
{
|
|
59
77
|
"kind": "exec_agent",
|
|
60
|
-
"spec": { "agent": "default", "prompt": "The weather is {{pre_output}}. One friendly sentence." },
|
|
78
|
+
"spec": { "agent": "default", "no_tools": true, "prompt": "The weather is {{pre_output}}. One friendly sentence." },
|
|
61
79
|
"post_commands": ["apx telegram send \"$APX_LLM_OUTPUT\""]
|
|
62
80
|
}
|
|
63
81
|
```
|
|
@@ -66,12 +84,12 @@ Sends **two** messages: one from agent's `send_telegram` tool, one from `post_co
|
|
|
66
84
|
|
|
67
85
|
```bash
|
|
68
86
|
# Always pin --project; never use default for real ones
|
|
69
|
-
apx routine list --project
|
|
70
|
-
apx routine get weather-bariloche --project
|
|
87
|
+
apx routine list --project acme
|
|
88
|
+
apx routine get weather-bariloche --project acme
|
|
71
89
|
|
|
72
90
|
# Create — exec_agent + shell delivery
|
|
73
91
|
apx routine add weather-bariloche \
|
|
74
|
-
--project
|
|
92
|
+
--project acme \
|
|
75
93
|
--kind exec_agent \
|
|
76
94
|
--schedule "every:24h" \
|
|
77
95
|
--spec '{"agent":"default","prompt":"The weather is {{pre_output}}. One friendly sentence."}' \
|
|
@@ -80,17 +98,17 @@ apx routine add weather-bariloche \
|
|
|
80
98
|
|
|
81
99
|
# Create — super-agent with tools
|
|
82
100
|
apx routine add daily-status \
|
|
83
|
-
--project
|
|
101
|
+
--project acme \
|
|
84
102
|
--kind super_agent \
|
|
85
103
|
--schedule "0 9 * * *" \
|
|
86
104
|
--spec '{"prompt":"List projects with pending tasks and send me a short summary via Telegram."}' \
|
|
87
105
|
--permission-mode automatico
|
|
88
106
|
|
|
89
107
|
# Toggle / run / remove
|
|
90
|
-
apx routine enable weather-bariloche --project
|
|
91
|
-
apx routine disable weather-bariloche --project
|
|
92
|
-
apx routine run weather-bariloche --project
|
|
93
|
-
apx routine remove weather-bariloche --project
|
|
108
|
+
apx routine enable weather-bariloche --project acme
|
|
109
|
+
apx routine disable weather-bariloche --project acme
|
|
110
|
+
apx routine run weather-bariloche --project acme # force-trigger now
|
|
111
|
+
apx routine remove weather-bariloche --project acme
|
|
94
112
|
```
|
|
95
113
|
|
|
96
114
|
## `--project` is non-negotiable
|
|
@@ -99,7 +117,7 @@ Routines live in `~/.apx/projects/<apxId>/routines.json`. Without `--project`, t
|
|
|
99
117
|
|
|
100
118
|
## `skip_prompt_on`
|
|
101
119
|
|
|
102
|
-
Gates the LLM call based on `pre_commands` (`shouldSkipPrompt` in `
|
|
120
|
+
Gates the LLM call based on `pre_commands` (`shouldSkipPrompt` in `src/core/routines/runner.js`). Post-commands always run.
|
|
103
121
|
|
|
104
122
|
| Value | Skips LLM when… |
|
|
105
123
|
|---|---|
|
|
@@ -112,16 +130,21 @@ Gates the LLM call based on `pre_commands` (`shouldSkipPrompt` in `host/daemon/r
|
|
|
112
130
|
## Debugging
|
|
113
131
|
|
|
114
132
|
```bash
|
|
115
|
-
apx routine history weather-bariloche --project
|
|
133
|
+
apx routine history weather-bariloche --project acme # last runs
|
|
116
134
|
apx log -f # tail unified log
|
|
117
135
|
apx messages tail --channel routine -n 20 # routine-channel messages
|
|
136
|
+
|
|
137
|
+
# Routine memory (the file named in the automation header)
|
|
138
|
+
apx routine memory show weather-bariloche --project acme # read it
|
|
139
|
+
apx routine memory add weather-bariloche "note" --project acme # append a note
|
|
140
|
+
apx routine memory path weather-bariloche --project acme # print its path
|
|
118
141
|
```
|
|
119
142
|
|
|
120
143
|
"Sends nothing" usually means: `enabled: false`, `next_run_at` in the future, or empty LLM text (check `apx messages` or `result.text`).
|
|
121
144
|
|
|
122
145
|
## Don't
|
|
123
146
|
|
|
124
|
-
- Use `super_agent` when `exec_agent`
|
|
147
|
+
- Use `super_agent` when a project agent should own the work — `exec_agent` runs that agent with tools and the chat lands under their name.
|
|
125
148
|
- Write `apx telegram send` inside a `super_agent` prompt — agent calls `send_telegram` AND post_commands fire. Pick one.
|
|
126
149
|
- Hardcode model names in `spec` without reason — routines inherit `super_agent.model` (with router fallback).
|
|
127
150
|
- Put credentials in `spec`. Use `~/.apx/config.json` engines and reference by provider.
|
|
@@ -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
|