@agentprojectcontext/apx 1.81.0 → 1.89.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +9 -8
- package/skills/apc-context/SKILL.md +14 -7
- package/skills/apx/SKILL.md +62 -2
- package/skills/apx-mcp/SKILL.md +42 -15
- package/src/core/agent/a2a/peers.js +161 -0
- package/src/core/agent/a2a/reply.js +379 -27
- package/src/core/agent/abort.js +25 -0
- package/src/core/agent/agent-model.js +58 -0
- package/src/core/agent/agent-tools.js +101 -0
- package/src/core/agent/author-line.js +110 -0
- package/src/core/agent/build-agent-system.js +52 -18
- package/src/core/agent/channels/voice-context.js +17 -2
- package/src/core/agent/closing-floor.js +117 -0
- package/src/core/agent/constants.js +119 -11
- package/src/core/agent/engine-call.js +56 -0
- package/src/core/agent/group/run-group-turn.js +218 -0
- package/src/core/agent/group/turn-resolver.js +165 -0
- package/src/core/agent/judge.js +138 -11
- package/src/core/agent/loop/side-effects.js +106 -3
- package/src/core/agent/memory.js +31 -18
- package/src/core/agent/model-capabilities.js +47 -0
- package/src/core/agent/model-router.js +11 -40
- package/src/core/agent/prompt-builder.js +47 -0
- package/src/core/agent/prompts/channels/a2a.md +12 -0
- package/src/core/agent/prompts/channels/code.md +3 -1
- package/src/core/agent/prompts/channels/telegram.md +2 -0
- package/src/core/agent/prompts/channels/web_code.md +1 -1
- package/src/core/agent/prompts/channels/whatsapp.md +37 -0
- package/src/core/agent/prompts/core/agent-base.md +2 -0
- package/src/core/agent/prompts/discipline/action.md +1 -0
- package/src/core/agent/prompts/discipline/two-segment.md +2 -1
- package/src/core/agent/prompts/modes/mobility.md +36 -0
- package/src/core/agent/retry.js +42 -0
- package/src/core/agent/run-agent.js +322 -25
- package/src/core/agent/run-turn.js +253 -0
- package/src/core/agent/self-memory.js +18 -52
- package/src/core/agent/skills/agent-skills.js +118 -0
- package/src/core/agent/skills/catalog.js +1 -1
- package/src/core/agent/skills/declared.js +13 -0
- package/src/core/agent/skills/index-store.js +8 -1
- package/src/core/agent/skills/inspector.js +20 -3
- package/src/core/agent/skills/loader.js +18 -3
- package/src/core/agent/skills/media.js +121 -0
- package/src/core/agent/skills/origin.js +61 -0
- package/src/core/agent/skills/sections.js +136 -0
- package/src/core/agent/super-agent.js +54 -14
- package/src/core/agent/tools/handlers/_calendar.js +50 -0
- package/src/core/agent/tools/handlers/add-mcp.js +103 -0
- package/src/core/agent/tools/handlers/asana-create-task.js +3 -1
- package/src/core/agent/tools/handlers/attach-media.js +56 -0
- package/src/core/agent/tools/handlers/calendar-create-event.js +38 -0
- package/src/core/agent/tools/handlers/calendar-find-slot.js +39 -0
- package/src/core/agent/tools/handlers/calendar-list-events.js +39 -0
- package/src/core/agent/tools/handlers/calendar-update-event.js +35 -0
- package/src/core/agent/tools/handlers/call-agent.js +14 -6
- package/src/core/agent/tools/handlers/call-runtime.js +27 -49
- package/src/core/agent/tools/handlers/comment-task.js +78 -0
- package/src/core/agent/tools/handlers/complete-task.js +60 -0
- package/src/core/agent/tools/handlers/configure-agent.js +70 -0
- package/src/core/agent/tools/handlers/create-agent.js +68 -0
- package/src/core/agent/tools/handlers/create-task.js +41 -3
- package/src/core/agent/tools/handlers/import-agent.js +5 -5
- package/src/core/agent/tools/handlers/list-mcp-tools.js +83 -0
- package/src/core/agent/tools/handlers/list-routines.js +46 -0
- package/src/core/agent/tools/handlers/list-tasks.js +8 -1
- package/src/core/agent/tools/handlers/mark-commitment.js +57 -0
- package/src/core/agent/tools/handlers/read-skill.js +64 -0
- package/src/core/agent/tools/handlers/remember-routine.js +2 -8
- package/src/core/agent/tools/handlers/remember.js +82 -6
- package/src/core/agent/tools/handlers/remove-agent.js +42 -0
- package/src/core/agent/tools/handlers/run-routine.js +94 -0
- package/src/core/agent/tools/handlers/run-shell.js +44 -2
- package/src/core/agent/tools/handlers/send-telegram.js +41 -19
- package/src/core/agent/tools/handlers/set-agent-prompt.js +44 -0
- package/src/core/agent/tools/handlers/view-media.js +69 -0
- package/src/core/agent/tools/handlers/write-agent-memory.js +52 -0
- package/src/core/agent/tools/helpers.js +36 -4
- package/src/core/agent/tools/names.js +64 -0
- package/src/core/agent/tools/registry-bridge.js +24 -1
- package/src/core/agent/tools/registry.js +79 -0
- package/src/core/agent/tools/tool-call-parser.js +136 -13
- package/src/core/agent/vision-bridge.js +69 -0
- package/src/core/apc/agent-identity.js +74 -0
- package/src/core/apc/agent-rename-refs.js +187 -0
- package/src/core/apc/agent-write.js +312 -0
- package/src/core/apc/agents-vault.js +1 -1
- package/src/core/apc/blob-keys.js +42 -0
- package/src/core/apc/frontmatter.js +166 -10
- package/src/core/apc/parser.js +33 -83
- package/src/core/apc/paths.js +4 -6
- package/src/core/apc/project-memory.js +44 -0
- package/src/core/apc/projects-helpers.js +33 -0
- package/src/core/apc/scaffold.js +36 -16
- package/src/core/channels/telegram/ask-callbacks.js +103 -0
- package/src/core/channels/telegram/dispatch.js +154 -30
- package/src/core/channels/telegram/helpers.js +59 -7
- package/src/core/channels/telegram/inbound/audio.js +26 -30
- package/src/core/channels/telegram/inbound/file.js +22 -32
- package/src/core/channels/telegram/inbound/photo.js +24 -28
- package/src/core/channels/telegram/progress-gate.js +76 -0
- package/src/core/channels/telegram/reply.js +151 -43
- package/src/core/channels/telegram/voice-note.js +150 -0
- package/src/core/config/index.js +53 -54
- package/src/core/config/paths.js +117 -31
- package/src/core/config/redact.js +89 -4
- package/src/core/config/secret-values.js +2 -4
- package/src/core/constants/actors.js +5 -0
- package/src/core/constants/channels.js +3 -1
- package/src/core/constants/task-categories.js +73 -0
- package/src/core/constants/task-fields.js +28 -0
- package/src/core/engines/_globs.js +33 -0
- package/src/core/engines/anthropic.js +19 -1
- package/src/core/engines/catalog.js +20 -0
- package/src/core/engines/gemini.js +84 -16
- package/src/core/engines/index.js +19 -3
- package/src/core/engines/mock.js +145 -1
- package/src/core/engines/openai-compatible.js +150 -15
- package/src/core/engines/presets.js +36 -9
- package/src/core/engines/zen.js +131 -0
- package/src/core/events/bus.js +140 -0
- package/src/core/events/mascot-notify.js +156 -0
- package/src/core/http-tools/browser.js +366 -36
- package/src/core/http-tools/catalog.js +206 -22
- package/src/core/http-tools/grep.js +62 -7
- package/src/core/http-tools/registry.js +3 -1
- package/src/core/i18n/en.js +34 -3
- package/src/core/i18n/es.js +36 -4
- package/src/core/i18n/index.js +5 -5
- package/src/core/i18n/pt.js +32 -3
- package/src/core/identity/self.js +14 -1
- package/src/core/images/engines/a1111.js +219 -0
- package/src/core/images/engines/index.js +187 -0
- package/src/core/images/engines/mock.js +74 -0
- package/src/core/images/engines/openai.js +130 -0
- package/src/core/images/engines/sdcpp.js +204 -0
- package/src/core/images/engines/shared.js +218 -0
- package/src/core/images/generate.js +260 -0
- package/src/core/integrations/catalog.js +8 -3
- package/src/core/integrations/plugins/_google-oauth.js +179 -0
- package/src/core/integrations/plugins/asana.js +7 -3
- package/src/core/integrations/plugins/calendar.js +404 -0
- package/src/core/integrations/store.js +2 -0
- package/src/core/memory/broker.js +16 -1
- package/src/core/memory/compactor.js +19 -3
- package/src/core/memory/consolidate.js +2 -2
- package/src/core/memory/dated-log.js +66 -0
- package/src/core/memory/embed-engines/custom.js +59 -0
- package/src/core/memory/embed-engines/gemini.js +9 -3
- package/src/core/memory/embed-engines/index.js +87 -15
- package/src/core/memory/embeddings.js +52 -24
- package/src/core/memory/index.js +13 -3
- package/src/core/memory/indexer.js +83 -27
- package/src/core/memory/prune.js +182 -0
- package/src/core/memory/store.js +22 -0
- package/src/core/memory/summarizer.js +72 -8
- package/src/core/mobility/answer.js +80 -0
- package/src/core/mobility/geofence.js +667 -0
- package/src/core/mobility/osm-route.js +282 -0
- package/src/core/mobility/preferences.js +91 -0
- package/src/core/mobility/state.js +245 -0
- package/src/core/mobility/trip-event.js +384 -0
- package/src/core/net/tailscale.js +168 -0
- package/src/core/profiles/bundled/secretary/PROFILE.md +32 -42
- package/src/core/profiles/bundled/secretary/config.schema.es.json +68 -0
- package/src/core/profiles/bundled/secretary/config.schema.json +30 -2
- package/src/core/profiles/bundled/secretary/profile.json +3 -1
- package/src/core/profiles/bundled/secretary/routines/a2a-sweep.json +20 -0
- package/src/core/profiles/bundled/secretary/routines/day-close.json +4 -1
- package/src/core/profiles/bundled/secretary/routines/day-open.json +7 -1
- package/src/core/profiles/bundled/secretary/routines/watch.json +13 -2
- package/src/core/profiles/lifecycle.js +243 -19
- package/src/core/profiles/paths.js +12 -0
- package/src/core/profiles/store.js +47 -0
- package/src/core/routines/active-runs.js +213 -0
- package/src/core/routines/delivery.js +612 -0
- package/src/core/routines/header.js +88 -0
- package/src/core/routines/index.js +26 -0
- package/src/core/routines/run-log.js +78 -0
- package/src/core/routines/runner.js +629 -66
- package/src/core/routines/signals.js +75 -0
- package/src/core/runtime-skills/apc-context/SKILL.md +14 -7
- package/src/core/runtime-skills/apx/SKILL.md +93 -1
- package/src/core/runtime-skills/apx-agency-agents/SKILL.md +2 -2
- package/src/core/runtime-skills/apx-agent/SKILL.md +134 -19
- package/src/core/runtime-skills/apx-commitment/SKILL.md +21 -11
- package/src/core/runtime-skills/apx-image/SKILL.md +60 -0
- package/src/core/runtime-skills/apx-integrations/SKILL.md +82 -0
- package/src/core/runtime-skills/apx-mcp/SKILL.md +45 -14
- package/src/core/runtime-skills/apx-mcp-builder/SKILL.md +4 -4
- package/src/core/runtime-skills/apx-profile/SKILL.md +27 -2
- package/src/core/runtime-skills/apx-project/SKILL.md +23 -2
- package/src/core/runtime-skills/apx-routine/SKILL.md +40 -17
- package/src/core/runtime-skills/apx-runtime/SKILL.md +124 -14
- package/src/core/runtime-skills/apx-sessions/SKILL.md +7 -6
- package/src/core/runtime-skills/apx-skill-builder/SKILL.md +15 -13
- package/src/core/runtime-skills/apx-task/SKILL.md +79 -26
- package/src/core/runtime-skills/apx-telegram/SKILL.md +12 -12
- package/src/core/runtime-skills/apx-transcribe/SKILL.md +56 -0
- package/src/core/runtime-skills/apx-voice/SKILL.md +27 -8
- package/src/core/runtime-skills/claude-code/SKILL.md +8 -0
- package/src/core/runtime-skills/openrouter/SKILL.md +8 -2
- package/src/core/runtimes/_spawn.js +9 -1
- package/src/core/runtimes/claude-code.js +11 -2
- package/src/core/runtimes/codex.js +44 -10
- package/src/core/runtimes/index.js +17 -2
- package/src/core/runtimes/opencode.js +88 -9
- package/src/core/runtimes/outcome.js +119 -0
- package/src/core/sessions/index.js +193 -1
- package/src/core/stores/agent-inbox.js +109 -23
- package/src/core/stores/code-sessions.js +21 -0
- package/src/core/stores/commitments.js +27 -3
- package/src/core/stores/conversations.js +220 -20
- package/src/core/stores/deliveries.js +177 -0
- package/src/core/stores/media-archive.js +228 -0
- package/src/core/stores/messages.js +1096 -112
- package/src/core/stores/organization.js +34 -0
- package/src/core/stores/project-memory.js +71 -0
- package/src/core/stores/routine-memory.js +16 -8
- package/src/core/stores/routines.js +27 -49
- package/src/core/stores/sessions.js +4 -8
- package/src/core/stores/tasks.js +212 -18
- package/src/core/stores/turn-record.js +209 -0
- package/src/core/tasks/columns.js +136 -0
- package/src/core/tasks/comment-turn.js +258 -0
- package/src/core/util/time.js +13 -0
- package/src/core/voice/engines/index.js +54 -1
- package/src/core/voice/engines/openai.js +50 -4
- package/src/core/voice/opus.js +67 -0
- package/src/core/voice/pronounceable.js +43 -0
- package/src/core/voice/transcription.js +4 -0
- package/src/core/voice/tts.js +114 -24
- package/src/host/daemon/active-turns.js +188 -0
- package/src/host/daemon/api/admin-config.js +9 -0
- package/src/host/daemon/api/agents.js +99 -90
- package/src/host/daemon/api/artifact-preview.js +7 -6
- package/src/host/daemon/api/artifacts.js +3 -2
- package/src/host/daemon/api/code.js +55 -9
- package/src/host/daemon/api/commitments.js +11 -0
- package/src/host/daemon/api/confirm.js +3 -2
- package/src/host/daemon/api/conversations.js +543 -35
- package/src/host/daemon/api/deck.js +9 -8
- package/src/host/daemon/api/deliveries.js +33 -0
- package/src/host/daemon/api/desktop.js +5 -4
- package/src/host/daemon/api/embeddings.js +15 -6
- package/src/host/daemon/api/engines.js +59 -8
- package/src/host/daemon/api/exec.js +437 -121
- package/src/host/daemon/api/groups.js +215 -0
- package/src/host/daemon/api/images.js +107 -0
- package/src/host/daemon/api/inbox.js +123 -2
- package/src/host/daemon/api/integrations.js +64 -2
- package/src/host/daemon/api/mcps.js +7 -6
- package/src/host/daemon/api/media.js +283 -0
- package/src/host/daemon/api/mobility.js +177 -0
- package/src/host/daemon/api/net.js +182 -0
- package/src/host/daemon/api/pairing.js +38 -5
- package/src/host/daemon/api/profiles.js +30 -2
- package/src/host/daemon/api/routines.js +36 -4
- package/src/host/daemon/api/runtimes.js +74 -39
- package/src/host/daemon/api/sessions-search.js +7 -2
- package/src/host/daemon/api/sessions.js +44 -2
- package/src/host/daemon/api/shared.js +127 -20
- package/src/host/daemon/api/skills.js +11 -4
- package/src/host/daemon/api/super-agent.js +384 -53
- package/src/host/daemon/api/tasks.js +180 -10
- package/src/host/daemon/api/telegram.js +11 -10
- package/src/host/daemon/api/thread-faces.js +159 -0
- package/src/host/daemon/api/top-level.js +3 -3
- package/src/host/daemon/api/transcribe.js +11 -10
- package/src/host/daemon/api/tts.js +97 -4
- package/src/host/daemon/api/turn-abort.js +23 -0
- package/src/host/daemon/api/turns.js +49 -0
- package/src/host/daemon/api/voice.js +5 -4
- package/src/host/daemon/api/web.js +98 -0
- package/src/host/daemon/api.js +39 -0
- package/src/host/daemon/delivery-sweep.js +58 -0
- package/src/host/daemon/desktop-ws.js +5 -23
- package/src/host/daemon/events-ws.js +273 -0
- package/src/host/daemon/index.js +59 -15
- package/src/host/daemon/plugins/desktop/index.js +17 -4
- package/src/host/daemon/plugins/telegram/index.js +78 -40
- package/src/host/daemon/pty-bridge.py +99 -0
- package/src/host/daemon/routines-scheduler.js +1 -0
- package/src/host/daemon/smoke.js +1 -2
- package/src/host/daemon/terminal-ws.js +132 -0
- package/src/host/daemon/tts-keepwarm.js +87 -0
- package/src/host/daemon/wakeup.js +11 -6
- package/src/host/daemon/whisper-server.js +44 -0
- package/src/host/daemon/whisper-server.py +70 -13
- package/src/host/daemon/ws-auth.js +28 -0
- package/src/interfaces/android/app/build.gradle +42 -0
- package/src/interfaces/android/app/proguard-rules.pro +4 -0
- package/src/interfaces/android/app/src/main/AndroidManifest.xml +139 -0
- package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/AlertScreen.java +139 -0
- package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/AndroidAutoDetector.java +106 -0
- package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/ApxCarAppService.java +57 -0
- package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/ApxPreferences.java +165 -0
- package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/CarAlertStore.java +84 -0
- package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/CarMessageActionReceiver.java +47 -0
- package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/CarMessageNotification.java +152 -0
- package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/DaemonAddress.java +35 -0
- package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/DaemonClient.java +339 -0
- package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/DeviceLocation.java +38 -0
- package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/ErrandScreen.java +127 -0
- package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/MainActivity.java +872 -0
- package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/MapsNavigationDetector.java +63 -0
- package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/MapsNavigationListenerService.java +453 -0
- package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/MapsShareIntentParser.java +93 -0
- package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/MascotBlobCatalog.java +66 -0
- package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/MascotOverlayService.java +448 -0
- package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/MascotView.java +249 -0
- package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/MessageFrameParser.java +240 -0
- package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/NotifyChannels.java +69 -0
- package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/ProximityActionReceiver.java +78 -0
- package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/ProximityNotification.java +161 -0
- package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/StartupReceiver.java +57 -0
- package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/TravelEventGate.java +62 -0
- package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/TravelStatusBanner.java +116 -0
- package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/TripLocationService.java +272 -0
- package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/TripPlacesSheet.java +203 -0
- package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/TripScreen.java +182 -0
- package/src/interfaces/android/app/src/main/res/drawable/app_background.xml +12 -0
- package/src/interfaces/android/app/src/main/res/drawable/ic_apx_app.xml +10 -0
- package/src/interfaces/android/app/src/main/res/drawable/ic_apx_launcher_foreground.xml +12 -0
- package/src/interfaces/android/app/src/main/res/drawable/ic_apx_notification.xml +22 -0
- package/src/interfaces/android/app/src/main/res/drawable/ic_trip_car.xml +37 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/apx_logo.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_amatista.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_aqua.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_brasa.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_campana.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_caracol.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_carbon.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_cobalto.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_cometa.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_coral.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_cubi.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_eclipse.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_faro.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_gajo.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_iris.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_kiwi.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_laguna.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_lila.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_menta.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_nimbo.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_noche.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_onyx.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_orbita.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_ovni.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_papa.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_parche.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_peon.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_perla.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_pino.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_quad.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_rubi.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_saturno.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_trebol.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_trino.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_volcan.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_zafiro.png +0 -0
- package/src/interfaces/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +5 -0
- package/src/interfaces/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +5 -0
- package/src/interfaces/android/app/src/main/res/raw/apx_notification.mp3 +0 -0
- package/src/interfaces/android/app/src/main/res/values/colors.xml +4 -0
- package/src/interfaces/android/app/src/main/res/values/strings.xml +25 -0
- package/src/interfaces/android/app/src/main/res/values/styles.xml +10 -0
- package/src/interfaces/android/app/src/main/res/values-v31/styles.xml +14 -0
- package/src/interfaces/android/app/src/main/res/xml/automotive_app_desc.xml +9 -0
- package/src/interfaces/android/app/src/main/res/xml/network_security_config.xml +10 -0
- package/src/interfaces/android/app/src/test/java/dev/agentprojectcontext/apx/AndroidAutoDetectorTest.java +85 -0
- package/src/interfaces/android/app/src/test/java/dev/agentprojectcontext/apx/CarAlertStoreTest.java +104 -0
- package/src/interfaces/android/app/src/test/java/dev/agentprojectcontext/apx/DaemonAddressTest.java +23 -0
- package/src/interfaces/android/app/src/test/java/dev/agentprojectcontext/apx/MapsNavigationDetectorTest.java +69 -0
- package/src/interfaces/android/app/src/test/java/dev/agentprojectcontext/apx/MapsShareIntentParserTest.java +31 -0
- package/src/interfaces/android/app/src/test/java/dev/agentprojectcontext/apx/MessageFrameParserTest.java +180 -0
- package/src/interfaces/android/app/src/test/java/dev/agentprojectcontext/apx/TravelEventGateTest.java +64 -0
- package/src/interfaces/android/app/src/test/java/dev/agentprojectcontext/apx/TripPlacesSheetTest.java +66 -0
- package/src/interfaces/android/build.gradle +3 -0
- package/src/interfaces/android/gradle/wrapper/gradle-wrapper.jar +0 -0
- package/src/interfaces/android/gradle/wrapper/gradle-wrapper.properties +9 -0
- package/src/interfaces/android/gradle.properties +3 -0
- package/src/interfaces/android/gradlew +248 -0
- package/src/interfaces/android/gradlew.bat +82 -0
- package/src/interfaces/android/settings.gradle +18 -0
- package/src/interfaces/cli/commands/a2a.js +145 -4
- package/src/interfaces/cli/commands/agent.js +247 -22
- package/src/interfaces/cli/commands/code.js +1 -1
- package/src/interfaces/cli/commands/commitment.js +5 -0
- package/src/interfaces/cli/commands/config.js +85 -6
- package/src/interfaces/cli/commands/exec.js +90 -1
- package/src/interfaces/cli/commands/image.js +314 -0
- package/src/interfaces/cli/commands/mcp.js +87 -23
- package/src/interfaces/cli/commands/memory.js +35 -22
- package/src/interfaces/cli/commands/panel.js +94 -0
- package/src/interfaces/cli/commands/profile.js +14 -0
- package/src/interfaces/cli/commands/project.js +29 -0
- package/src/interfaces/cli/commands/routine.js +45 -10
- package/src/interfaces/cli/commands/runtime.js +30 -7
- package/src/interfaces/cli/commands/session.js +90 -38
- package/src/interfaces/cli/commands/sessions.js +35 -2
- package/src/interfaces/cli/commands/skills.js +15 -9
- package/src/interfaces/cli/commands/status.js +2 -3
- package/src/interfaces/cli/commands/task.js +54 -5
- package/src/interfaces/cli/commands/telegram.js +12 -4
- package/src/interfaces/cli/commands/transcribe.js +177 -0
- package/src/interfaces/cli/help/index.js +311 -72
- package/src/interfaces/cli/http.js +61 -13
- package/src/interfaces/cli/index.js +1 -1
- package/src/interfaces/cli/routes/agent.js +5 -4
- package/src/interfaces/cli/routes/commitment.js +3 -2
- package/src/interfaces/cli/routes/config.js +7 -2
- package/src/interfaces/cli/routes/image.js +11 -0
- package/src/interfaces/cli/routes/index.js +2 -0
- package/src/interfaces/cli/routes/log.js +1 -1
- package/src/interfaces/cli/routes/memory.js +3 -2
- package/src/interfaces/cli/routes/panel.js +15 -2
- package/src/interfaces/cli/routes/profile.js +3 -2
- package/src/interfaces/cli/routes/transcribe.js +10 -0
- package/src/interfaces/cli/stdin.js +29 -0
- package/src/interfaces/desktop/assets/blobs/amatista.png +0 -0
- package/src/interfaces/desktop/assets/blobs/aqua.png +0 -0
- package/src/interfaces/desktop/assets/blobs/brasa.png +0 -0
- package/src/interfaces/desktop/assets/blobs/campana.png +0 -0
- package/src/interfaces/desktop/assets/blobs/caracol.png +0 -0
- package/src/interfaces/desktop/assets/blobs/carbon.png +0 -0
- package/src/interfaces/desktop/assets/blobs/cobalto.png +0 -0
- package/src/interfaces/desktop/assets/blobs/cometa.png +0 -0
- package/src/interfaces/desktop/assets/blobs/coral.png +0 -0
- package/src/interfaces/desktop/assets/blobs/cubi.png +0 -0
- package/src/interfaces/desktop/assets/blobs/eclipse.png +0 -0
- package/src/interfaces/desktop/assets/blobs/faro.png +0 -0
- package/src/interfaces/desktop/assets/blobs/gajo.png +0 -0
- package/src/interfaces/desktop/assets/blobs/iris.png +0 -0
- package/src/interfaces/desktop/assets/blobs/kiwi.png +0 -0
- package/src/interfaces/desktop/assets/blobs/laguna.png +0 -0
- package/src/interfaces/desktop/assets/blobs/lila.png +0 -0
- package/src/interfaces/desktop/assets/blobs/menta.png +0 -0
- package/src/interfaces/desktop/assets/blobs/nimbo.png +0 -0
- package/src/interfaces/desktop/assets/blobs/noche.png +0 -0
- package/src/interfaces/desktop/assets/blobs/onyx.png +0 -0
- package/src/interfaces/desktop/assets/blobs/orbita.png +0 -0
- package/src/interfaces/desktop/assets/blobs/ovni.png +0 -0
- package/src/interfaces/desktop/assets/blobs/papa.png +0 -0
- package/src/interfaces/desktop/assets/blobs/parche.png +0 -0
- package/src/interfaces/desktop/assets/blobs/peon.png +0 -0
- package/src/interfaces/desktop/assets/blobs/perla.png +0 -0
- package/src/interfaces/desktop/assets/blobs/pino.png +0 -0
- package/src/interfaces/desktop/assets/blobs/quad.png +0 -0
- package/src/interfaces/desktop/assets/blobs/rubi.png +0 -0
- package/src/interfaces/desktop/assets/blobs/saturno.png +0 -0
- package/src/interfaces/desktop/assets/blobs/trebol.png +0 -0
- package/src/interfaces/desktop/assets/blobs/trino.png +0 -0
- package/src/interfaces/desktop/assets/blobs/volcan.png +0 -0
- package/src/interfaces/desktop/assets/blobs/zafiro.png +0 -0
- package/src/interfaces/desktop/assets/notification.mp3 +0 -0
- package/src/interfaces/desktop/main.js +473 -29
- package/src/interfaces/desktop/mascot-blobs.js +41 -0
- package/src/interfaces/desktop/mascot-preload.js +32 -0
- package/src/interfaces/desktop/mascot.css +186 -0
- package/src/interfaces/desktop/mascot.html +40 -0
- package/src/interfaces/desktop/mascot.js +163 -0
- package/src/interfaces/desktop/preload.js +10 -0
- package/src/interfaces/desktop/renderer.js +308 -48
- package/src/interfaces/desktop/style.css +34 -0
- package/src/interfaces/mcp-server/index.js +87 -0
- package/src/interfaces/tui/_shims/util-locale.ts +0 -2
- package/src/interfaces/tui/app.tsx +0 -6
- package/src/interfaces/tui/attach.ts +0 -1
- package/src/interfaces/tui/context/sdk-apx.tsx +0 -4
- package/src/interfaces/tui/plugin/api.tsx +0 -3
- package/src/interfaces/tui/plugin/runtime.ts +0 -3
- package/src/interfaces/tui/thread.ts +0 -16
- package/src/interfaces/web/README.md +22 -14
- package/src/interfaces/web/dist/assets/claude-XtpLmGtF.webp +0 -0
- package/src/interfaces/web/dist/assets/codex-DExPUgvh.webp +0 -0
- package/src/interfaces/web/dist/assets/index-BEoRgIqd.css +32 -0
- package/src/interfaces/web/dist/assets/index-BEoRgIqd.css.br +0 -0
- package/src/interfaces/web/dist/assets/index-BEoRgIqd.css.gz +0 -0
- package/src/interfaces/web/dist/assets/index-C6fXHc1p.js +1074 -0
- package/src/interfaces/web/dist/assets/index-C6fXHc1p.js.br +0 -0
- package/src/interfaces/web/dist/assets/index-C6fXHc1p.js.gz +0 -0
- package/src/interfaces/web/dist/assets/index-C6fXHc1p.js.map +1 -0
- package/src/interfaces/web/dist/assets/index-C6fXHc1p.js.map.br +0 -0
- package/src/interfaces/web/dist/assets/index-C6fXHc1p.js.map.gz +0 -0
- package/src/interfaces/web/dist/favicon/dark/site.webmanifest +12 -6
- package/src/interfaces/web/dist/favicon/white/site.webmanifest +12 -6
- package/src/interfaces/web/dist/index.html +22 -6
- package/src/interfaces/web/dist/index.html.br +0 -0
- package/src/interfaces/web/dist/index.html.gz +0 -0
- package/src/interfaces/web/dist/manifest.webmanifest +25 -0
- package/src/interfaces/web/dist/modules/blobs/amatista.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/aqua.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/brasa.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/campana.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/caracol.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/carbon.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/cobalto.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/cometa.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/coral.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/cubi.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/eclipse.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/faro.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/gajo.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/iris.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/kiwi.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/laguna.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/lila.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/menta.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/nimbo.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/noche.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/onyx.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/orbita.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/ovni.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/papa.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/parche.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/peon.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/perla.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/pino.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/quad.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/rubi.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/saturno.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/trebol.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/trino.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/volcan.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/zafiro.png +0 -0
- package/src/interfaces/web/dist/sw.js +106 -0
- package/src/interfaces/web/dist/sw.js.br +0 -0
- package/src/interfaces/web/dist/sw.js.gz +0 -0
- package/src/interfaces/web/eslint.config.js +83 -0
- package/src/interfaces/web/index.html +20 -4
- package/src/interfaces/web/package-lock.json +1651 -1280
- package/src/interfaces/web/package.json +9 -10
- package/src/interfaces/web/pnpm-lock.yaml +867 -869
- package/src/interfaces/web/public/favicon/dark/site.webmanifest +12 -6
- package/src/interfaces/web/public/favicon/white/site.webmanifest +12 -6
- package/src/interfaces/web/public/manifest.webmanifest +25 -0
- package/src/interfaces/web/public/modules/blobs/amatista.png +0 -0
- package/src/interfaces/web/public/modules/blobs/aqua.png +0 -0
- package/src/interfaces/web/public/modules/blobs/brasa.png +0 -0
- package/src/interfaces/web/public/modules/blobs/campana.png +0 -0
- package/src/interfaces/web/public/modules/blobs/caracol.png +0 -0
- package/src/interfaces/web/public/modules/blobs/carbon.png +0 -0
- package/src/interfaces/web/public/modules/blobs/cobalto.png +0 -0
- package/src/interfaces/web/public/modules/blobs/cometa.png +0 -0
- package/src/interfaces/web/public/modules/blobs/coral.png +0 -0
- package/src/interfaces/web/public/modules/blobs/cubi.png +0 -0
- package/src/interfaces/web/public/modules/blobs/eclipse.png +0 -0
- package/src/interfaces/web/public/modules/blobs/faro.png +0 -0
- package/src/interfaces/web/public/modules/blobs/gajo.png +0 -0
- package/src/interfaces/web/public/modules/blobs/iris.png +0 -0
- package/src/interfaces/web/public/modules/blobs/kiwi.png +0 -0
- package/src/interfaces/web/public/modules/blobs/laguna.png +0 -0
- package/src/interfaces/web/public/modules/blobs/lila.png +0 -0
- package/src/interfaces/web/public/modules/blobs/menta.png +0 -0
- package/src/interfaces/web/public/modules/blobs/nimbo.png +0 -0
- package/src/interfaces/web/public/modules/blobs/noche.png +0 -0
- package/src/interfaces/web/public/modules/blobs/onyx.png +0 -0
- package/src/interfaces/web/public/modules/blobs/orbita.png +0 -0
- package/src/interfaces/web/public/modules/blobs/ovni.png +0 -0
- package/src/interfaces/web/public/modules/blobs/papa.png +0 -0
- package/src/interfaces/web/public/modules/blobs/parche.png +0 -0
- package/src/interfaces/web/public/modules/blobs/peon.png +0 -0
- package/src/interfaces/web/public/modules/blobs/perla.png +0 -0
- package/src/interfaces/web/public/modules/blobs/pino.png +0 -0
- package/src/interfaces/web/public/modules/blobs/quad.png +0 -0
- package/src/interfaces/web/public/modules/blobs/rubi.png +0 -0
- package/src/interfaces/web/public/modules/blobs/saturno.png +0 -0
- package/src/interfaces/web/public/modules/blobs/trebol.png +0 -0
- package/src/interfaces/web/public/modules/blobs/trino.png +0 -0
- package/src/interfaces/web/public/modules/blobs/volcan.png +0 -0
- package/src/interfaces/web/public/modules/blobs/zafiro.png +0 -0
- package/src/interfaces/web/public/sw.js +106 -0
- package/src/interfaces/web/src/App.tsx +106 -10
- package/src/interfaces/web/src/assets/cli/claude.webp +0 -0
- package/src/interfaces/web/src/assets/cli/codex.webp +0 -0
- package/src/interfaces/web/src/assets/cli/cursor.svg +1 -0
- package/src/interfaces/web/src/assets/cli/opencode.png +0 -0
- package/src/interfaces/web/src/components/Combobox.tsx +201 -0
- package/src/interfaces/web/src/components/MobileHint.tsx +95 -0
- package/src/interfaces/web/src/components/MobileLinkDialog.tsx +156 -0
- package/src/interfaces/web/src/components/ModelCombobox.tsx +21 -113
- package/src/interfaces/web/src/components/{routines/ReadOnlyBlock.tsx → ReadOnlyBlock.tsx} +13 -4
- package/src/interfaces/web/src/components/Roby.tsx +5 -3
- package/src/interfaces/web/src/components/RobyBubble.tsx +23 -5
- package/src/interfaces/web/src/components/RowMenu.tsx +46 -0
- package/src/interfaces/web/src/components/TimezoneSelect.tsx +4 -1
- package/src/interfaces/web/src/components/Toast.tsx +50 -14
- package/src/interfaces/web/src/components/UiSelect.tsx +12 -5
- package/src/interfaces/web/src/components/agents/AgentAvatar.tsx +171 -0
- package/src/interfaces/web/src/components/agents/AgentFormFields.tsx +42 -11
- package/src/interfaces/web/src/components/agents/AgentModelBadge.tsx +157 -0
- package/src/interfaces/web/src/components/agents/AgentModelSelect.tsx +57 -0
- package/src/interfaces/web/src/components/agents/AgentSkillsPicker.tsx +115 -0
- package/src/interfaces/web/src/components/agents/BlobAvatar.tsx +50 -0
- package/src/interfaces/web/src/components/agents/blobPresets.ts +50 -0
- package/src/interfaces/web/src/components/agents/modelCatalog.ts +66 -0
- package/src/interfaces/web/src/components/chat/ActionGroup.tsx +162 -0
- package/src/interfaces/web/src/components/chat/AskAnswersCard.tsx +4 -3
- package/src/interfaces/web/src/components/chat/AskQuestionsCard.tsx +1 -1
- package/src/interfaces/web/src/components/chat/Attachment.tsx +220 -0
- package/src/interfaces/web/src/components/chat/ChatList.tsx +226 -51
- package/src/interfaces/web/src/components/chat/ChatRowActivity.tsx +45 -0
- package/src/interfaces/web/src/components/chat/Composer.tsx +672 -23
- package/src/interfaces/web/src/components/chat/ComposerCommands.tsx +175 -0
- package/src/interfaces/web/src/components/chat/ComposerSuggest.tsx +215 -0
- package/src/interfaces/web/src/components/chat/ContextBar.tsx +133 -65
- package/src/interfaces/web/src/components/chat/InlineAskPanel.tsx +107 -47
- package/src/interfaces/web/src/components/chat/MessageBubble.tsx +460 -119
- package/src/interfaces/web/src/components/chat/MessageList.tsx +165 -18
- package/src/interfaces/web/src/components/chat/ReasoningBlock.tsx +58 -0
- package/src/interfaces/web/src/components/chat/SessionPicker.tsx +182 -0
- package/src/interfaces/web/src/components/chat/SkillTrace.tsx +183 -0
- package/src/interfaces/web/src/components/chat/ToolCall.tsx +11 -11
- package/src/interfaces/web/src/components/code/CodeContextTab.tsx +87 -53
- package/src/interfaces/web/src/components/code/CodeFileTree.tsx +11 -52
- package/src/interfaces/web/src/components/code/CodeFileViewer.tsx +5 -4
- package/src/interfaces/web/src/components/code/CodeProjectPicker.tsx +31 -7
- package/src/interfaces/web/src/components/code/CodeSessionList.tsx +32 -11
- package/src/interfaces/web/src/components/code/CodeSidePanel.tsx +33 -3
- package/src/interfaces/web/src/components/code/CodeTerminal.tsx +5 -4
- package/src/interfaces/web/src/components/code/NewCodeSessionDialog.tsx +164 -0
- package/src/interfaces/web/src/components/commitments/CommitmentDetail.tsx +162 -0
- package/src/interfaces/web/src/components/commitments/CommitmentFormDialog.tsx +158 -0
- package/src/interfaces/web/src/components/commitments/CommitmentList.tsx +194 -0
- package/src/interfaces/web/src/components/commitments/commitmentState.tsx +46 -0
- package/src/interfaces/web/src/components/common/BulkActionBar.tsx +60 -0
- package/src/interfaces/web/src/components/common/ConfirmDialog.tsx +4 -1
- package/src/interfaces/web/src/components/common/SelectCheckbox.tsx +40 -0
- package/src/interfaces/web/src/components/common/TabNav.tsx +1 -1
- package/src/interfaces/web/src/components/cron/CronPicker.tsx +1 -1
- package/src/interfaces/web/src/components/files/FileBrowser.tsx +1 -1
- package/src/interfaces/web/src/components/files/FileTree.tsx +6 -4
- package/src/interfaces/web/src/components/files/FileViewer.tsx +9 -5
- package/src/interfaces/web/src/components/files/MarkdownPreview.tsx +45 -9
- package/src/interfaces/web/src/components/images/ImageDefaultsCard.tsx +93 -0
- package/src/interfaces/web/src/components/images/ImageProviderList.tsx +142 -0
- package/src/interfaces/web/src/components/images/ImageProviderModal.tsx +263 -0
- package/src/interfaces/web/src/components/images/ImageTestCard.tsx +142 -0
- package/src/interfaces/web/src/components/inbox/ChannelFilter.tsx +178 -0
- package/src/interfaces/web/src/components/inbox/InboxList.tsx +77 -81
- package/src/interfaces/web/src/components/inbox/InboxRowItem.tsx +140 -0
- package/src/interfaces/web/src/components/integrations/ComingSoonPlugin.tsx +2 -2
- package/src/interfaces/web/src/components/integrations/PluginConnect.tsx +208 -30
- package/src/interfaces/web/src/components/integrations/PluginToolsSection.tsx +1 -1
- package/src/interfaces/web/src/components/layout/ProjectAvatar.tsx +39 -24
- package/src/interfaces/web/src/components/layout/ProjectSidebar.tsx +253 -58
- package/src/interfaces/web/src/components/memory/MemoryBrowser.tsx +94 -47
- package/src/interfaces/web/src/components/routines/ExecutionsList.tsx +202 -90
- package/src/interfaces/web/src/components/routines/RoutineDetail.tsx +28 -6
- package/src/interfaces/web/src/components/routines/RoutineEditor.tsx +16 -5
- package/src/interfaces/web/src/components/routines/RoutineList.tsx +49 -9
- package/src/interfaces/web/src/components/routines/VarTextarea.tsx +1 -1
- package/src/interfaces/web/src/components/routines/runChat.ts +121 -0
- package/src/interfaces/web/src/components/sessions/SessionDetail.tsx +148 -0
- package/src/interfaces/web/src/components/sessions/SessionTerminal.tsx +98 -0
- package/src/interfaces/web/src/components/settings/AccessPanel.tsx +205 -0
- package/src/interfaces/web/src/components/settings/DefaultRouterCard.tsx +246 -101
- package/src/interfaces/web/src/components/settings/DesktopSettingsPanel.tsx +36 -2
- package/src/interfaces/web/src/components/settings/DevicesPanel.tsx +19 -6
- package/src/interfaces/web/src/components/settings/EmbedProviderList.tsx +274 -0
- package/src/interfaces/web/src/components/settings/EnginesPanel.tsx +26 -6
- package/src/interfaces/web/src/components/settings/MemoryPanel.tsx +118 -119
- package/src/interfaces/web/src/components/settings/NudgePanel.tsx +4 -3
- package/src/interfaces/web/src/components/settings/PairDeviceDialog.tsx +15 -4
- package/src/interfaces/web/src/components/settings/PanelPrefs.tsx +374 -0
- package/src/interfaces/web/src/components/settings/ProfilePanel.tsx +70 -2
- package/src/interfaces/web/src/components/settings/RoutingPanel.tsx +2 -1
- package/src/interfaces/web/src/components/settings/SkillsInspectorPanel.tsx +102 -43
- package/src/interfaces/web/src/components/settings/SkillsManager.tsx +76 -21
- package/src/interfaces/web/src/components/settings/SkillsSettings.tsx +10 -3
- package/src/interfaces/web/src/components/settings/SuperAgentPanel.tsx +8 -0
- package/src/interfaces/web/src/components/settings/TelegramChannelsPanel.tsx +11 -2
- package/src/interfaces/web/src/components/settings/TelegramContactsPanel.tsx +19 -8
- package/src/interfaces/web/src/components/settings/TelegramRolesPanel.tsx +12 -2
- package/src/interfaces/web/src/components/settings/WebPanel.tsx +22 -31
- package/src/interfaces/web/src/components/settings/providers/ProviderCard.tsx +15 -3
- package/src/interfaces/web/src/components/settings/providers/ProviderModal.tsx +97 -66
- package/src/interfaces/web/src/components/settings/providers/ProviderTestDialog.tsx +150 -0
- package/src/interfaces/web/src/components/settings/providers/typeStyles.ts +67 -25
- package/src/interfaces/web/src/components/settings/providers/types.ts +3 -0
- package/src/interfaces/web/src/components/tasks/TaskBoard.tsx +201 -0
- package/src/interfaces/web/src/components/tasks/TaskColumnsDialog.tsx +243 -0
- package/src/interfaces/web/src/components/tasks/TaskComments.tsx +167 -0
- package/src/interfaces/web/src/components/tasks/TaskDetail.tsx +335 -0
- package/src/interfaces/web/src/components/tasks/TaskFormDialog.tsx +406 -0
- package/src/interfaces/web/src/components/tasks/TaskList.tsx +258 -0
- package/src/interfaces/web/src/components/tasks/TaskSubtasks.tsx +126 -0
- package/src/interfaces/web/src/components/tasks/columns.ts +51 -0
- package/src/interfaces/web/src/components/tasks/taskStatus.tsx +159 -34
- package/src/interfaces/web/src/components/tasks/taskViewPrefs.ts +73 -0
- package/src/interfaces/web/src/components/tasks/useTaskColumns.ts +31 -0
- package/src/interfaces/web/src/components/ui/chat-input.tsx +136 -12
- package/src/interfaces/web/src/components/ui/context-menu.tsx +15 -198
- package/src/interfaces/web/src/components/ui/dialog.tsx +3 -2
- package/src/interfaces/web/src/components/ui/filter-chips.tsx +4 -0
- package/src/interfaces/web/src/components/ui/popover.tsx +14 -49
- package/src/interfaces/web/src/components/ui/sheet.tsx +2 -1
- package/src/interfaces/web/src/components/ui/spinner.tsx +2 -1
- package/src/interfaces/web/src/components/ui.tsx +62 -23
- package/src/interfaces/web/src/components/voice/VoiceProviderList.tsx +2 -1
- package/src/interfaces/web/src/components/voice/VoiceProviderModal.tsx +66 -8
- package/src/interfaces/web/src/components/voice/VoiceQvoxInstallCard.tsx +63 -0
- package/src/interfaces/web/src/components/voice/VoiceQvoxStatusCard.tsx +51 -0
- package/src/interfaces/web/src/components/voice/VoiceSttCard.tsx +4 -3
- package/src/interfaces/web/src/components/voice/VoiceTestCard.tsx +38 -4
- package/src/interfaces/web/src/constants/index.ts +1 -0
- package/src/interfaces/web/src/hooks/useChannelPrefs.ts +39 -0
- package/src/interfaces/web/src/hooks/useChat.ts +1092 -85
- package/src/interfaces/web/src/hooks/useChatActivity.ts +24 -0
- package/src/interfaces/web/src/hooks/useInbox.ts +26 -4
- package/src/interfaces/web/src/hooks/useLiveMessages.ts +16 -0
- package/src/interfaces/web/src/hooks/useOllamaModels.ts +79 -0
- package/src/interfaces/web/src/hooks/useRecorder.ts +198 -0
- package/src/interfaces/web/src/hooks/useTokenBootstrap.ts +23 -6
- package/src/interfaces/web/src/i18n/en.ts +832 -175
- package/src/interfaces/web/src/i18n/es.ts +841 -188
- package/src/interfaces/web/src/lib/api/agents.ts +23 -4
- package/src/interfaces/web/src/lib/api/code.ts +17 -0
- package/src/interfaces/web/src/lib/api/commitments.ts +7 -1
- package/src/interfaces/web/src/lib/api/conversations.ts +38 -11
- package/src/interfaces/web/src/lib/api/embeddings.ts +3 -0
- package/src/interfaces/web/src/lib/api/engines.ts +14 -0
- package/src/interfaces/web/src/lib/api/groups.ts +93 -0
- package/src/interfaces/web/src/lib/api/images.ts +193 -0
- package/src/interfaces/web/src/lib/api/inbox.ts +29 -5
- package/src/interfaces/web/src/lib/api/integrations.ts +9 -0
- package/src/interfaces/web/src/lib/api/media.ts +126 -0
- package/src/interfaces/web/src/lib/api/net.ts +44 -0
- package/src/interfaces/web/src/lib/api/profiles.ts +12 -0
- package/src/interfaces/web/src/lib/api/projects.ts +9 -1
- package/src/interfaces/web/src/lib/api/routines.ts +9 -1
- package/src/interfaces/web/src/lib/api/sessions.ts +18 -0
- package/src/interfaces/web/src/lib/api/skills.ts +8 -0
- package/src/interfaces/web/src/lib/api/super_agent.ts +3 -0
- package/src/interfaces/web/src/lib/api/tasks.ts +46 -6
- package/src/interfaces/web/src/lib/api/tools.ts +2 -0
- package/src/interfaces/web/src/lib/api/transcribe.ts +31 -0
- package/src/interfaces/web/src/lib/api/turns.ts +20 -0
- package/src/interfaces/web/src/lib/api/voice.ts +72 -2
- package/src/interfaces/web/src/lib/api.ts +3 -0
- package/src/interfaces/web/src/lib/channels.ts +214 -0
- package/src/interfaces/web/src/lib/chat-activity.ts +175 -0
- package/src/interfaces/web/src/lib/chat-prefs.ts +48 -0
- package/src/interfaces/web/src/lib/code-context.ts +0 -2
- package/src/interfaces/web/src/lib/http.ts +51 -17
- package/src/interfaces/web/src/lib/inbox-selection.ts +29 -0
- package/src/interfaces/web/src/lib/live.ts +252 -0
- package/src/interfaces/web/src/lib/net.ts +211 -0
- package/src/interfaces/web/src/lib/notify.ts +331 -0
- package/src/interfaces/web/src/lib/projectNav.ts +40 -0
- package/src/interfaces/web/src/lib/pwa.ts +115 -0
- package/src/interfaces/web/src/lib/qvox.ts +24 -0
- package/src/interfaces/web/src/lib/slug.ts +3 -0
- package/src/interfaces/web/src/lib/tone.ts +150 -0
- package/src/interfaces/web/src/main.tsx +15 -4
- package/src/interfaces/web/src/screens/ApxAdminScreen.tsx +33 -11
- package/src/interfaces/web/src/screens/InboxScreen.tsx +126 -71
- package/src/interfaces/web/src/screens/ProjectScreen.tsx +8 -4
- package/src/interfaces/web/src/screens/SettingsScreen.tsx +7 -4
- package/src/interfaces/web/src/screens/base/AgentDefaultsTab.tsx +30 -9
- package/src/interfaces/web/src/screens/base/CommitmentsTab.tsx +150 -168
- package/src/interfaces/web/src/screens/base/LogsTab.tsx +8 -7
- package/src/interfaces/web/src/screens/base/SessionsTab.tsx +99 -37
- package/src/interfaces/web/src/screens/base/WorkspacesTab.tsx +1 -1
- package/src/interfaces/web/src/screens/mobile/MobileChat.tsx +85 -0
- package/src/interfaces/web/src/screens/mobile/MobileChatList.tsx +244 -0
- package/src/interfaces/web/src/screens/mobile/MobileCommitments.tsx +350 -0
- package/src/interfaces/web/src/screens/mobile/MobileScreen.tsx +138 -0
- package/src/interfaces/web/src/screens/mobile/MobileTabBar.tsx +105 -0
- package/src/interfaces/web/src/screens/mobile/MobileTasks.tsx +407 -0
- package/src/interfaces/web/src/screens/mobile/NewChatSheet.tsx +313 -0
- package/src/interfaces/web/src/screens/mobile/mobileList.tsx +194 -0
- package/src/interfaces/web/src/screens/mobile/routes.ts +239 -0
- package/src/interfaces/web/src/screens/modules/CodeScreen.tsx +135 -64
- package/src/interfaces/web/src/screens/modules/DeckScreen.tsx +0 -1
- package/src/interfaces/web/src/screens/modules/ImagesScreen.tsx +172 -0
- package/src/interfaces/web/src/screens/modules/VoiceScreen.tsx +36 -4
- package/src/interfaces/web/src/screens/project/AgentBrainGraph.tsx +117 -30
- package/src/interfaces/web/src/screens/project/AgentDetailScreen.tsx +537 -92
- package/src/interfaces/web/src/screens/project/AgentsTab.tsx +344 -93
- package/src/interfaces/web/src/screens/project/ArtifactsTab.tsx +1 -1
- package/src/interfaces/web/src/screens/project/ChatTab.tsx +1160 -94
- package/src/interfaces/web/src/screens/project/IntegrationsTab.tsx +3 -2
- package/src/interfaces/web/src/screens/project/McpsTab.tsx +62 -14
- package/src/interfaces/web/src/screens/project/Overview.tsx +36 -15
- package/src/interfaces/web/src/screens/project/RoutinesTab.tsx +93 -8
- package/src/interfaces/web/src/screens/project/SkillsTab.tsx +4 -1
- package/src/interfaces/web/src/screens/project/StructureTab.tsx +5 -4
- package/src/interfaces/web/src/screens/project/TasksTab.tsx +351 -129
- package/src/interfaces/web/src/screens/project/VarsTab.tsx +17 -5
- package/src/interfaces/web/src/styles.css +106 -31
- package/src/interfaces/web/src/types/daemon.ts +246 -2
- package/src/interfaces/web/src/vite-env.d.ts +20 -0
- package/src/interfaces/tui/plugin/command-shim.ts +0 -109
- package/src/interfaces/web/components.json +0 -25
- package/src/interfaces/web/dist/assets/index-CvEoGtTf.js +0 -849
- package/src/interfaces/web/dist/assets/index-CvEoGtTf.js.map +0 -1
- package/src/interfaces/web/dist/assets/index-DzBBXFaO.css +0 -1
- package/src/interfaces/web/src/components/tasks/TaskDetailPanel.tsx +0 -142
- package/src/interfaces/web/src/components/ui/accordion.tsx +0 -72
- package/src/interfaces/web/src/components/ui/alert-dialog.tsx +0 -187
- package/src/interfaces/web/src/components/ui/alert.tsx +0 -76
- package/src/interfaces/web/src/components/ui/aspect-ratio.tsx +0 -22
- package/src/interfaces/web/src/components/ui/avatar.tsx +0 -107
- package/src/interfaces/web/src/components/ui/breadcrumb.tsx +0 -125
- package/src/interfaces/web/src/components/ui/button-group.tsx +0 -87
- package/src/interfaces/web/src/components/ui/calendar.tsx +0 -221
- package/src/interfaces/web/src/components/ui/card.tsx +0 -103
- package/src/interfaces/web/src/components/ui/carousel.tsx +0 -242
- package/src/interfaces/web/src/components/ui/chart.tsx +0 -371
- package/src/interfaces/web/src/components/ui/checkbox.tsx +0 -29
- package/src/interfaces/web/src/components/ui/collapsible.tsx +0 -19
- package/src/interfaces/web/src/components/ui/combobox.tsx +0 -295
- package/src/interfaces/web/src/components/ui/command.tsx +0 -196
- package/src/interfaces/web/src/components/ui/direction.tsx +0 -4
- package/src/interfaces/web/src/components/ui/drawer.tsx +0 -134
- package/src/interfaces/web/src/components/ui/empty.tsx +0 -104
- package/src/interfaces/web/src/components/ui/field.tsx +0 -236
- package/src/interfaces/web/src/components/ui/hover-card.tsx +0 -51
- package/src/interfaces/web/src/components/ui/input-otp.tsx +0 -85
- package/src/interfaces/web/src/components/ui/item.tsx +0 -201
- package/src/interfaces/web/src/components/ui/menubar.tsx +0 -280
- package/src/interfaces/web/src/components/ui/native-select.tsx +0 -61
- package/src/interfaces/web/src/components/ui/navigation-menu.tsx +0 -168
- package/src/interfaces/web/src/components/ui/pagination.tsx +0 -130
- package/src/interfaces/web/src/components/ui/progress.tsx +0 -83
- package/src/interfaces/web/src/components/ui/radio-group.tsx +0 -36
- package/src/interfaces/web/src/components/ui/resizable.tsx +0 -50
- package/src/interfaces/web/src/components/ui/scroll-area.tsx +0 -53
- package/src/interfaces/web/src/components/ui/sidebar.tsx +0 -726
- package/src/interfaces/web/src/components/ui/slider.tsx +0 -52
- package/src/interfaces/web/src/components/ui/sonner.tsx +0 -49
- package/src/interfaces/web/src/components/ui/table.tsx +0 -116
- package/src/interfaces/web/src/components/ui/toggle-group.tsx +0 -87
- package/src/interfaces/web/src/components/ui/toggle.tsx +0 -45
- package/src/interfaces/web/src/hooks/use-mobile.ts +0 -19
- package/src/interfaces/web/src/screens/base/GlobalTasksTab.tsx +0 -161
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
// summaries drift from the data they claim to describe.
|
|
19
19
|
import { listTasks } from "#core/stores/tasks.js";
|
|
20
20
|
import { listCommitments } from "#core/stores/commitments.js";
|
|
21
|
+
import { readProjectMessages } from "#core/stores/messages.js";
|
|
21
22
|
import { nowIso } from "#core/util/time.js";
|
|
22
23
|
|
|
23
24
|
/** Every detector, keyed by the type it emits. */
|
|
@@ -27,6 +28,7 @@ export const SIGNAL_TYPES = Object.freeze([
|
|
|
27
28
|
"stale_project",
|
|
28
29
|
"commitment_due",
|
|
29
30
|
"overdue_commitment",
|
|
31
|
+
"a2a_message",
|
|
30
32
|
]);
|
|
31
33
|
|
|
32
34
|
/** Defaults chosen to be quiet. A watcher that cries on day one gets turned off. */
|
|
@@ -161,12 +163,76 @@ function detectOverdueCommitments(project, { now }) {
|
|
|
161
163
|
);
|
|
162
164
|
}
|
|
163
165
|
|
|
166
|
+
/**
|
|
167
|
+
* An agent-to-agent message that landed for this project since the last sweep.
|
|
168
|
+
*
|
|
169
|
+
* This is the seam that lets a2a "reach" {{owner_name}}: an a2a turn never pings
|
|
170
|
+
* the owner directly (buildA2AReplySystem), it lands in the project's `a2a`
|
|
171
|
+
* ledger channel. The watch picks the recent inbound ones up as signals, and —
|
|
172
|
+
* because the watch now delivers to the profile's channel — the owner hears the
|
|
173
|
+
* ones Roby judges worth it, timed and batched, instead of a raw ping per message.
|
|
174
|
+
*
|
|
175
|
+
* Only DIRECTION "in" (something another agent sent into this project), and only
|
|
176
|
+
* since `a2a_since` (the watch's last run), so a message is surfaced once, not
|
|
177
|
+
* re-raised every two hours. A promise buried in an a2a message is already
|
|
178
|
+
* captured as a commitment by the a2a triage, so it resurfaces through the
|
|
179
|
+
* commitment detectors — this detector is for everything that is not a promise.
|
|
180
|
+
*/
|
|
181
|
+
/**
|
|
182
|
+
* The a2a severity contract: a sender tags a message [blocker | status | fyi],
|
|
183
|
+
* and the tag maps to a signal severity so the watch prioritises it.
|
|
184
|
+
*
|
|
185
|
+
* `blocker` is "critical": the owner chose that a blocker crosses even quiet
|
|
186
|
+
* hours (canNudge lets critical bypass, audited), because a blocker that waits
|
|
187
|
+
* until morning is not a blocker. `status`/`fyi` are gated like any other
|
|
188
|
+
* unrequested message. An untagged a2a message is a plain "normal" signal.
|
|
189
|
+
*/
|
|
190
|
+
export const A2A_SEVERITY = Object.freeze({ blocker: "critical", status: "normal", fyi: "low" });
|
|
191
|
+
|
|
192
|
+
function detectA2A(project, { now, a2a_since, a2a_alerts = false }) {
|
|
193
|
+
// No last run yet → a bounded window, so a first sweep does not dump history.
|
|
194
|
+
const since = a2a_since || new Date(Date.parse(now) - 6 * 3_600_000).toISOString();
|
|
195
|
+
let msgs = [];
|
|
196
|
+
try {
|
|
197
|
+
msgs = readProjectMessages(project.storagePath, { channel: "a2a", since, limit: 50 });
|
|
198
|
+
} catch {
|
|
199
|
+
return []; // unreadable ledger → no evidence, surfaced as a skip by the caller
|
|
200
|
+
}
|
|
201
|
+
return msgs
|
|
202
|
+
// `owner_notified` rows were already pinged to the owner in the act (a
|
|
203
|
+
// `blocker` relayed with severity — see the /send route). The watch must not
|
|
204
|
+
// notify them a second time; the message still lives in the thread.
|
|
205
|
+
.filter((m) => m.direction === "in" && !m.meta?.owner_notified && (m.body || "").trim())
|
|
206
|
+
// TODO(notifications-menu): a2a alerting is OFF by default. Agent↔agent
|
|
207
|
+
// chatter — and simulated/test blockers like Magui's — was pinging the owner
|
|
208
|
+
// as noise, sometimes twice. Until there is a per-notification preferences
|
|
209
|
+
// menu (choose which agents / severities / channels may alert, and on which
|
|
210
|
+
// surface), only messages the owner EXPLICITLY asked to be told about
|
|
211
|
+
// (`solicited`) surface here. Set `a2a_alerts: true` on the profile to
|
|
212
|
+
// restore the old "Roby judges every a2a" behavior in the meantime.
|
|
213
|
+
.filter((m) => a2a_alerts === true || m.meta?.solicited === true)
|
|
214
|
+
.map((m) => {
|
|
215
|
+
const tag = String(m.meta?.severity || "").toLowerCase();
|
|
216
|
+
// The owner explicitly asked to be told about this one → the delivery is
|
|
217
|
+
// solicited, which crosses the interruption budget and quiet-hours (a
|
|
218
|
+
// reply is never held back). Only an explicit flag counts, never inferred.
|
|
219
|
+
const solicited = m.meta?.solicited === true;
|
|
220
|
+
return signal(project, {
|
|
221
|
+
type: "a2a_message",
|
|
222
|
+
severity: A2A_SEVERITY[tag] || "normal",
|
|
223
|
+
subject: `${m.author || "another agent"} sent (a2a${tag && A2A_SEVERITY[tag] ? `, ${tag}` : ""}): ${firstLine(m.body)}`,
|
|
224
|
+
payload: { from: m.author, ts: m.ts, body: m.body, tag: A2A_SEVERITY[tag] ? tag : null, solicited },
|
|
225
|
+
});
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
|
|
164
229
|
const DETECTORS = {
|
|
165
230
|
overdue_task: detectOverdueTasks,
|
|
166
231
|
blocked_task: detectBlockedTasks,
|
|
167
232
|
stale_project: detectStaleProject,
|
|
168
233
|
commitment_due: detectCommitmentsDue,
|
|
169
234
|
overdue_commitment: detectOverdueCommitments,
|
|
235
|
+
a2a_message: detectA2A,
|
|
170
236
|
};
|
|
171
237
|
|
|
172
238
|
// ---------------------------------------------------------------------------
|
|
@@ -247,6 +313,9 @@ export function thresholdsFromConfig(profileConfig = {}) {
|
|
|
247
313
|
blocked_hours: pick("blocked_task_hours", DEFAULT_THRESHOLDS.blocked_hours),
|
|
248
314
|
stale_project_days: pick("stale_project_days", DEFAULT_THRESHOLDS.stale_project_days),
|
|
249
315
|
commitment_lead_hours: pick("commitment_lead_hours", DEFAULT_THRESHOLDS.commitment_lead_hours),
|
|
316
|
+
// Whether agent↔agent chatter alerts the owner at all. OFF by default (see
|
|
317
|
+
// the TODO in detectA2A) — only `true` restores "Roby judges every a2a".
|
|
318
|
+
a2a_alerts: profileConfig.a2a_alerts === true,
|
|
250
319
|
};
|
|
251
320
|
}
|
|
252
321
|
|
|
@@ -261,6 +330,12 @@ function signal(project, fields) {
|
|
|
261
330
|
};
|
|
262
331
|
}
|
|
263
332
|
|
|
333
|
+
/** First non-empty line of a body, trimmed to a signal-sized preview. */
|
|
334
|
+
function firstLine(body) {
|
|
335
|
+
const line = String(body || "").split("\n").map((s) => s.trim()).find(Boolean) || "";
|
|
336
|
+
return line.length > 140 ? `${line.slice(0, 137)}…` : line;
|
|
337
|
+
}
|
|
338
|
+
|
|
264
339
|
/** Whole days between two YYYY-MM-DD strings. Negative when `to` precedes `from`. */
|
|
265
340
|
function daysBetween(from, to) {
|
|
266
341
|
const a = Date.parse(`${String(from).slice(0, 10)}T00:00:00Z`);
|
|
@@ -45,7 +45,7 @@ Classify content:
|
|
|
45
45
|
| Agent definitions: name, model, description | Put in `.apc/agents/<name>.md` and/or `AGENTS.md` |
|
|
46
46
|
| Shared project rules, stack notes, commands, testing policy | Keep in `AGENTS.md` |
|
|
47
47
|
| Reusable instruction blocks | Move to `.apc/skills/<name>.md` |
|
|
48
|
-
| Durable safe facts useful to all contributors | Add to `.apc/
|
|
48
|
+
| Durable safe facts useful to all contributors | Add to `.apc/memory.md` only after curation |
|
|
49
49
|
| MCP expectations without secrets | Add to `.apc/mcps.json` |
|
|
50
50
|
| Raw sessions, transcripts, conversations, messages, tool logs | Do not move into `.apc/`; leave with source runtime |
|
|
51
51
|
| Secrets, tokens, credentials, private headers | Do not store in repository |
|
|
@@ -69,7 +69,7 @@ AGENTS.md ← root project contract
|
|
|
69
69
|
project.json ← project metadata
|
|
70
70
|
.gitignore ← safety guard
|
|
71
71
|
agents/<name>.md ← agent definition
|
|
72
|
-
|
|
72
|
+
memory.md ← optional curated project memory (committed)
|
|
73
73
|
skills/<name>.md ← reusable project instructions
|
|
74
74
|
mcps.json ← MCP hints without secrets
|
|
75
75
|
```
|
|
@@ -77,6 +77,7 @@ AGENTS.md ← root project contract
|
|
|
77
77
|
Do not store:
|
|
78
78
|
|
|
79
79
|
```text
|
|
80
|
+
.apc/agents/<name>/memory.md ← agent memory is runtime state; see below
|
|
80
81
|
.apc/agents/<name>/sessions/
|
|
81
82
|
.apc/sessions/
|
|
82
83
|
.apc/conversations/
|
|
@@ -92,7 +93,8 @@ Do not store:
|
|
|
92
93
|
| Data | Visibility | Commit? |
|
|
93
94
|
|---|---|---|
|
|
94
95
|
| Agent definitions, skills, project rules | `stable` / `project` | Yes |
|
|
95
|
-
| Curated safe
|
|
96
|
+
| Curated safe `.apc/memory.md` | `project` | Yes, if team-safe |
|
|
97
|
+
| A single agent's `memory.md` | `local` | No; runtime-owned (`~/.apx/projects/<apx_id>/agents/<slug>/`) |
|
|
96
98
|
| MCP hints without secrets | `project` | Yes |
|
|
97
99
|
| Sessions, conversations, messages | `local` | No; runtime-owned |
|
|
98
100
|
| Secrets, tokens, `*.secret.json`, `*.env` | `private` | Never |
|
|
@@ -102,7 +104,7 @@ Do not store:
|
|
|
102
104
|
|
|
103
105
|
1. Read `AGENTS.md` and relevant `.apc/` files before assuming project context.
|
|
104
106
|
2. Read agent definitions from `.apc/agents/<name>.md` when present.
|
|
105
|
-
3. Read curated project memory from `.apc/agents/<
|
|
107
|
+
3. Read curated project memory from `.apc/memory.md` when present. An individual agent's own memory is runtime state and lives at `~/.apx/projects/<apx_id>/agents/<slug>/memory.md` — never under `.apc/`.
|
|
106
108
|
4. Write only durable, safe, curated facts to APC memory.
|
|
107
109
|
5. Never write raw sessions, transcripts, messages, conversations, or tool logs into `.apc/`.
|
|
108
110
|
6. Keep secrets out of APC and out of git.
|
|
@@ -110,17 +112,22 @@ Do not store:
|
|
|
110
112
|
|
|
111
113
|
## Normalization
|
|
112
114
|
|
|
113
|
-
|
|
115
|
+
`role`, `model`, `language`, `description`, `skills` and `tools` in YAML frontmatter
|
|
116
|
+
are the canonical shape — this is exactly what `apx agent add` writes. Do NOT strip
|
|
117
|
+
them.
|
|
114
118
|
|
|
115
119
|
```yaml
|
|
116
120
|
---
|
|
117
121
|
name: agent-name
|
|
122
|
+
role: what this agent is for
|
|
118
123
|
model: inherit
|
|
119
124
|
description: Semantic activation trigger
|
|
125
|
+
skills: skill-a, skill-b
|
|
120
126
|
---
|
|
121
127
|
```
|
|
122
128
|
|
|
123
|
-
|
|
129
|
+
Only fix genuine breakage: frontmatter that does not parse, a `model` that is neither
|
|
130
|
+
a technical ID nor `inherit`, or a missing `description` (semantic activation needs it).
|
|
124
131
|
|
|
125
132
|
## Sessions
|
|
126
133
|
|
|
@@ -136,7 +143,7 @@ OpenCode runtime storage
|
|
|
136
143
|
```
|
|
137
144
|
|
|
138
145
|
At task end, provide the user a concise result. If project memory should be updated, write a short
|
|
139
|
-
sanitized fact to `.apc/
|
|
146
|
+
sanitized fact to `.apc/memory.md` only when useful and safe.
|
|
140
147
|
|
|
141
148
|
## APX
|
|
142
149
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: apx
|
|
3
|
-
description: "APX CLI umbrella — routes operations to sub-skills (sessions, MCPs, routines, tasks, telegram, projects, agents, runtimes). Activate on `apx`, the APX daemon, or coordinating/running/delegating agents. Not for `.apc/` alone (use apc-context). Triggers: 'apx', 'apx run', 'apx daemon', 'coordinate agents'."
|
|
3
|
+
description: "APX CLI umbrella — routes operations to sub-skills (sessions, MCPs, routines, tasks, commitments, telegram, projects, agents, agent vault, profiles, runtimes). Activate on `apx`, the APX daemon, or coordinating/running/delegating agents. Not for `.apc/` alone (use apc-context). Triggers: 'apx', 'apx run', 'apx daemon', 'coordinate agents'."
|
|
4
4
|
homepage: https://github.com/agentprojectcontext/apx
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -22,9 +22,13 @@ If you can spawn a subagent natively in the current IDE (Claude Code, Cursor,
|
|
|
22
22
|
| Delegate to external coding CLI | **apx-runtime** | `apx run <agent> --runtime claude-code\|codex\|...` |
|
|
23
23
|
| List/read/resume/summarise/continue sessions | **apx-sessions** | `apx session resume`, `apx sessions list`, "import a codex session" |
|
|
24
24
|
| Use a registered MCP tool | **apx-mcp** | `apx mcp tools`, `apx mcp run`, "call MCP filesystem", "MCP failing" |
|
|
25
|
+
| Connect/diagnose a service connector | **apx-integrations** | Asana/Calendar/GitHub/Obsidian, "not connected", "read-only calendar", Plugins tab |
|
|
25
26
|
| Add/configure/use a project agent | **apx-agent** | "add an agent", vault import, per-agent model, agent memory |
|
|
27
|
+
| Reusable agent templates (vault) | **apx-agency-agents** | "spawn Cody/Rocky/Tessa", "list agents", import a bundled default |
|
|
28
|
+
| Install/activate an agent profile (line of work) | **apx-profile** | "install the secretary", "go back to vanilla", "why does it message me" |
|
|
26
29
|
| Register/list/configure a project | **apx-project** | "register this project", `apx project list`, per-project config |
|
|
27
30
|
| Per-project TODO list | **apx-task** | "add a task", "remind me to…", "what's pending" |
|
|
31
|
+
| Promises made to a named person | **apx-commitment** | "I told X I would…", "le dije a X que…", "what do I owe X" |
|
|
28
32
|
| Scheduled/recurring agents | **apx-routine** | `apx routine add`, every-5m, cron-like jobs |
|
|
29
33
|
| Telegram I/O | **apx-telegram** | configure bot, channels, send a message |
|
|
30
34
|
| Voice channel (TTS, speech) — *optional* | **apx-voice** | only if voice is being set up |
|
|
@@ -33,6 +37,94 @@ If you can spawn a subagent natively in the current IDE (Claude Code, Cursor,
|
|
|
33
37
|
|
|
34
38
|
> *internal/dev* sub-skills aren't pushed to IDE skill dirs by default. They live in the APX repo; install to IDE with `apx skills add <slug> --global`.
|
|
35
39
|
|
|
40
|
+
## Talk to a peer (a2a) — an agent OR another coding CLI
|
|
41
|
+
|
|
42
|
+
When the user says "hablá con Roby" / "avisale a <agent>" / "pasale esto a <peer>",
|
|
43
|
+
message them on the **a2a channel** — NOT `apx exec` (that posts as the user):
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
apx send <you> <peer> "<message>" --deliver [--project <name>]
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
- `<you>`: your own identity as sender — a coding CLI passes its runtime name
|
|
50
|
+
(`claude-code`, `codex`, `opencode`). It need NOT be a registered agent.
|
|
51
|
+
- `<peer>`: whoever answers. Either:
|
|
52
|
+
- an **agent slug** from AGENTS.md — answered by that agent's model; or
|
|
53
|
+
- a **runtime id** (`claude-code`, `codex`, `opencode`, `aider`, `cursor-agent`,
|
|
54
|
+
`gemini-cli`, `qwen-code`, `antigravity`) — answered by spawning that CLI.
|
|
55
|
+
This is how one coding IDE talks to another through APX.
|
|
56
|
+
- `:<thread>` opens a SECOND, independent exchange with the same peer —
|
|
57
|
+
`apx send claude-code opencode:review "…"`. Separate history, separate
|
|
58
|
+
session.
|
|
59
|
+
- An agent slug wins over a runtime of the same name. If a slug lives in several
|
|
60
|
+
projects, `apx send` refuses and lists them — pass `--project`.
|
|
61
|
+
`apx agent list --all` shows every agent with its project. A runtime peer is
|
|
62
|
+
registered nowhere: it runs in the project you are standing in, in YOUR cwd.
|
|
63
|
+
- `--deliver` runs the peer now and returns its reply on stdout. The exchange
|
|
64
|
+
shows in the web inbox as a "claude-code · opencode" group chat.
|
|
65
|
+
|
|
66
|
+
### Two kinds of exchange: talking, and working
|
|
67
|
+
|
|
68
|
+
By default an a2a message opens a **conversation**: the peer runs in its own
|
|
69
|
+
read-only mode (`claude --permission-mode plan`, `codex --sandbox read-only`,
|
|
70
|
+
`opencode --agent plan`). It can read anything and answer anything, but it
|
|
71
|
+
cannot change the codebase. That is deliberate — being messaged is not consent
|
|
72
|
+
to have your checkout edited.
|
|
73
|
+
|
|
74
|
+
`--code` opens a **coding session** instead: write access on, the peer is told to
|
|
75
|
+
do the work rather than describe it, and the exchange is mirrored into the **Code
|
|
76
|
+
module** (`/code`) so it shows up where every other coding session does — the
|
|
77
|
+
sender's messages as the user turns, the peer's replies as the assistant's.
|
|
78
|
+
|
|
79
|
+
`claude-code` and `codex` are never `--code` peers. They are the CLIs you drive
|
|
80
|
+
yourself, and a message must not also start them writing to the same checkout;
|
|
81
|
+
they answer read-only. Send the work to `opencode`, or use `apx run`.
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
apx send claude-code opencode "¿qué le falta a src/auth?" --deliver
|
|
85
|
+
apx send claude-code opencode "agregá el retry al fetch helper" --deliver --code
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
The peer runs in YOUR current directory, so `--code` edits the checkout you are
|
|
89
|
+
standing in, not the project record's path.
|
|
90
|
+
|
|
91
|
+
A coding session can take minutes. `--background` hands the turn back at once and
|
|
92
|
+
the reply lands on the thread when it finishes (`--timeout <s>` caps it; default
|
|
93
|
+
300s foreground, 3600s background):
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
apx send claude-code opencode "migrá los tests a node:test" --deliver --code --background
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### The exchange keeps its own session
|
|
100
|
+
|
|
101
|
+
A runtime peer continues its OWN session between turns (`claude -p --resume`,
|
|
102
|
+
`codex exec resume`, `opencode run --session`). APX stores that id on the thread
|
|
103
|
+
and resumes it next message, so the peer is not handed the transcript again and
|
|
104
|
+
does not redo work it already did. `apx send` prints the session it used.
|
|
105
|
+
|
|
106
|
+
A peer that cannot keep a session still works — APX carries the thread history in
|
|
107
|
+
the prompt instead. Either way the conversation continues; sessions only make it
|
|
108
|
+
cheaper. When there is no session, `apx send` says why instead of leaving the
|
|
109
|
+
line blank.
|
|
110
|
+
|
|
111
|
+
Runtimes with native sessions today: `claude-code`, `codex`, `opencode`. The rest
|
|
112
|
+
(`aider`, `cursor-agent`, `gemini-cli`, `qwen-code`, `antigravity`) fall back to
|
|
113
|
+
the carried thread.
|
|
114
|
+
|
|
115
|
+
### Answering an a2a message
|
|
116
|
+
|
|
117
|
+
Your output IS the reply: APX logs it and hands it back to the sender. Do NOT
|
|
118
|
+
also run `apx send` with that same answer — it files the exchange twice. Use
|
|
119
|
+
`apx send` only to open a NEW exchange: a follow-up once this turn is over, or a
|
|
120
|
+
message to somebody else. Every a2a message carries its own return address.
|
|
121
|
+
|
|
122
|
+
- The agent decides whether/how to tell the user on its own channel (respecting
|
|
123
|
+
quiet-hours) — you don't `apx telegram send` the user yourself.
|
|
124
|
+
- `--severity blocker|status|fyi` tags urgency when relaying up to Roby: a
|
|
125
|
+
`blocker` alerts the owner **in the act** (Roby pings, crossing quiet-hours);
|
|
126
|
+
`status`/`fyi` ride the end-of-day digest and never interrupt.
|
|
127
|
+
|
|
36
128
|
## Generic patterns (apply to every sub-skill)
|
|
37
129
|
|
|
38
130
|
### Verify commands before recommending
|
|
@@ -74,7 +74,7 @@ Agent defaults tab (`/p/0/agent-defaults`): same CRUD — "New" (POST `/api/agen
|
|
|
74
74
|
|
|
75
75
|
- User says **"spawn/use Cody/Rocky/Tessa/Max/Arch/Sid/Vera/Roby/Finn"** → import that exact slug from named team.
|
|
76
76
|
- User wants **"developer"/"QA"/"marketing" without a persona** → use generics (`development`, `qa`, `marketing`, …).
|
|
77
|
-
- **Not in vault** → `apx agent vault add <slug>` for a new template, or `apx agent add <slug
|
|
77
|
+
- **Not in vault** → `apx agent vault add <slug>` for a new template, or `apx agent add <slug> --prompt -` directly in a project for a one-off. A new agent needs its system prompt (the file body), not just `--role`/`--description` — see `apx-agent`.
|
|
78
78
|
- **Fresh install** → bundled defaults are always present (no sync step); appear in `apx agent vault list` immediately.
|
|
79
79
|
|
|
80
80
|
## File locations
|
|
@@ -110,7 +110,7 @@ is_master: false
|
|
|
110
110
|
| `description` | Shown in `/api/agents/vault` and AgentDefaultsTab cards. |
|
|
111
111
|
| `language` | Adds "Default language: <code>" to system prompt. |
|
|
112
112
|
| `skills` | Per-agent skill names; bodies loaded by skill resolution. |
|
|
113
|
-
| `tools` |
|
|
113
|
+
| `tools` | Allowlist that *narrows* the agent's callable tools. Catalog names (`glob`, `memory_get`, `run_command`) map to native handlers. **Empty → broad default: the whole registry minus a few host-only tools** (`set_identity`, `set_permission_mode`, `add_project`, `import_agent`). Declaring the field takes tools away, so list everything the agent needs. |
|
|
114
114
|
| `is_master` | If true, marked master in project (badge + ordering). |
|
|
115
115
|
|
|
116
116
|
## Related skills
|
|
@@ -1,11 +1,70 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: apx-agent
|
|
3
|
-
description: Create, configure, use project agents in APX. Load when user wants to add an agent, import from vault, set a per-agent model, or write agent memory. Triggers: 'add agent', 'new agent', 'import agent', 'agent memory', 'per-agent model'.
|
|
3
|
+
description: Create, configure, use project agents in APX — including writing an agent's SYSTEM PROMPT (the body of its definition file, required for the agent to do anything) and its identity (typology, area, role, avatar blob). Load when user wants to add an agent, write or change an agent's prompt/instructions/persona, set an agent's type/area/role/avatar, import from vault, set a per-agent model, or write agent memory. Triggers: 'add agent', 'new agent', 'create agent', 'agent prompt', 'agent instructions', 'agent type', 'agent area', 'agent avatar', 'import agent', 'agent memory', 'per-agent model'.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# apx-agent
|
|
7
7
|
|
|
8
|
-
A project agent is a named persona inside an APC project. Definition: `.apc/agents/<slug>.md` (flat);
|
|
8
|
+
A project agent is a named persona inside an APC project. Definition: `.apc/agents/<slug>.md` (flat) — that file **is** the agent; the roster is discovered by reading `.apc/agents/*.md` directly (`readAgents`). Runtime data (memory, conversations, sessions) under `~/.apx/projects/<apx_id>/agents/<slug>/`, never committed. That is the only place an agent's memory lives — nothing reads or writes a `memory.md` under `.apc/`.
|
|
9
|
+
|
|
10
|
+
> **`AGENTS.md` is NOT the agent registry.** It's a generic startup-rules file written once by `apx init` and then owned by the user; APX **never** regenerates it (`scaffold.js`) and adding/removing an agent does not touch it. Editing it by hand is safe. Some projects (like the super-agent's `default`) have no `AGENTS.md` at all — that is normal, not a broken state.
|
|
11
|
+
|
|
12
|
+
## The definition file has two halves — both matter
|
|
13
|
+
|
|
14
|
+
```markdown
|
|
15
|
+
---
|
|
16
|
+
role: Social Media Producer ← frontmatter: METADATA
|
|
17
|
+
language: es
|
|
18
|
+
description: One line for listings.
|
|
19
|
+
type: specialist ← typology
|
|
20
|
+
area: growth ← org-chart area
|
|
21
|
+
icon: kiwi ← avatar blob preset
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
You are Magui, the social producer for … ← body: THE SYSTEM PROMPT
|
|
25
|
+
## Responsibilities
|
|
26
|
+
- …
|
|
27
|
+
## Hard limits
|
|
28
|
+
- …
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
The **body** is the agent's real instruction set. `buildAgentSystem()` injects it as `# Custom instructions` (`src/core/agent/build-agent-system.js`), capped at 6000 chars. **`description` is not a substitute** — it is one line of metadata for listings. An agent created with frontmatter only runs on `role` + `description` + `language` and is told nothing about what to do, how, or what never to do.
|
|
32
|
+
|
|
33
|
+
**Creating an agent without a prompt is the single most common mistake here, and nothing errors when you do it.** Always write the body.
|
|
34
|
+
|
|
35
|
+
## Build it with a tool, not a shell (super-agent)
|
|
36
|
+
|
|
37
|
+
If you are the super-agent, you have native tools for the agent lifecycle — use them, the same way you use `create_task` and `remember_routine`. Do **not** shell out to `apx agent add` and do **not** `write_file` the `.md` by hand (a raw write skips the daemon-registry rebuild the tools do for you, so the running daemon won't see the agent, and it's how a body-less agent gets papered over):
|
|
38
|
+
|
|
39
|
+
| Tool | Does | Notes |
|
|
40
|
+
|---|---|---|
|
|
41
|
+
| `create_agent` | Creates the agent **with its system prompt** in one call | `system` is **required** — it refuses a body-less agent. Pass `slug` + `system`; add `role`/`skills`/`area`/`model` as needed. Omit `tools` unless narrowing. |
|
|
42
|
+
| `set_agent_prompt` | Replaces an existing agent's prompt | Keeps every frontmatter field. |
|
|
43
|
+
| `configure_agent` | Edits frontmatter (model, type, area, role, skills, …) | Keeps the prompt. Only the fields you pass change; empty string clears one. |
|
|
44
|
+
| `remove_agent` | Deletes the agent + its runtime data | Irreversible — confirm first unless clearly asked. |
|
|
45
|
+
| `write_agent_memory` | Seeds/updates **another** agent's `memory.md` | Not `remember` (that's YOUR notebook). `mode: append` (default) or `replace`. |
|
|
46
|
+
|
|
47
|
+
Typical build: `create_agent({ slug, system, role, skills:["golf-lvl-2"] })` → optionally `write_agent_memory({ agent: slug, content: "..." })` to seed progress → `remember_routine(...)` for any schedule. One tool each, no shell, prompt inline.
|
|
48
|
+
|
|
49
|
+
## Identity: typology, area, role, avatar
|
|
50
|
+
|
|
51
|
+
Set these on create — they are what the team view, the hierarchy graph and every avatar render read. All optional except that leaving them empty makes the agent an untyped, unplaced face in a list.
|
|
52
|
+
|
|
53
|
+
**`type`** — one of five, owned by `src/core/apc/agent-identity.js`:
|
|
54
|
+
|
|
55
|
+
| type | meaning |
|
|
56
|
+
|---|---|
|
|
57
|
+
| `orchestrator` | Coordinates the team and delegates. Also marks the agent as master (it gets sub-agents). |
|
|
58
|
+
| `specialist` | Domain expert; runs tasks. |
|
|
59
|
+
| `assistant` | Conversational helper. |
|
|
60
|
+
| `worker` | Runs autonomous tasks. |
|
|
61
|
+
| `monitor` | Watches state and reports. |
|
|
62
|
+
|
|
63
|
+
**`area` / `role`** — slugs from the project org chart (`.apc/organization.json`). **List them first, don't invent them:** `apx org show`, or the `org_list` MCP tool, or `GET /api/projects/:pid/organization`. Store the **slug** (`growth`), never the display name (`Growth`) — mixed case splits the team view into two groups that look identical. Free text is accepted and slugified on write. Create a missing area with `apx org area add "<name>"`.
|
|
64
|
+
|
|
65
|
+
**`icon`** — the animated blob avatar. **You don't have to pick one:** every create path (CLI, MCP, API, web) now assigns one automatically, drawn from the blobs this project isn't using yet, so a team of six has six distinguishable faces. Pass `--icon <key>` only to pin a specific one. Keys: `menta parche trino cubi nimbo papa noche kiwi gajo campana cobalto rubi trebol saturno onyx`. `noche` is the super-agent's face and is never auto-assigned to a project agent.
|
|
66
|
+
|
|
67
|
+
**`parent`** — the orchestrator this agent reports to, for the hierarchy view.
|
|
9
68
|
|
|
10
69
|
## Concrete CLI calls
|
|
11
70
|
|
|
@@ -13,14 +72,42 @@ A project agent is a named persona inside an APC project. Definition: `.apc/agen
|
|
|
13
72
|
# List (agent commands are cwd-scoped — run from project root)
|
|
14
73
|
apx agent list
|
|
15
74
|
|
|
16
|
-
#
|
|
75
|
+
# See the areas/roles this project defines, before assigning one
|
|
76
|
+
apx org show
|
|
77
|
+
|
|
78
|
+
# Create WITH its system prompt (writes .apc/agents/<slug>.md, creates runtime
|
|
79
|
+
# dir, rebuilds the daemon's agent registry). Heredoc, because a prompt is many lines:
|
|
17
80
|
apx agent add reviewer \
|
|
81
|
+
--type specialist \
|
|
18
82
|
--role "Code reviewer" \
|
|
83
|
+
--area engineering \
|
|
19
84
|
--model ollama:llama3.2:3b \
|
|
20
85
|
--language es \
|
|
21
86
|
--description "Reviews PRs and pushes back on hand-wavy diffs." \
|
|
22
|
-
--
|
|
23
|
-
--
|
|
87
|
+
--skills code-review,git \
|
|
88
|
+
--prompt - <<'EOF'
|
|
89
|
+
You are the code reviewer for this project.
|
|
90
|
+
|
|
91
|
+
## Responsibilities
|
|
92
|
+
- Review diffs for correctness, not style.
|
|
93
|
+
- Name the specific line and the specific failure mode.
|
|
94
|
+
|
|
95
|
+
## Hard limits
|
|
96
|
+
- Never approve a diff you could not explain back.
|
|
97
|
+
- Never invent a test result you did not run.
|
|
98
|
+
EOF
|
|
99
|
+
|
|
100
|
+
# Same thing from a file
|
|
101
|
+
apx agent add reviewer --role "Code reviewer" --prompt-file ./prompts/reviewer.md
|
|
102
|
+
|
|
103
|
+
# Give a prompt to an agent that has none / replace an existing one
|
|
104
|
+
apx agent set reviewer --prompt - < ./prompts/reviewer.md
|
|
105
|
+
apx agent set reviewer --model gpt-5.2 # field-only edit keeps the prompt
|
|
106
|
+
apx agent set reviewer --type specialist --area growth --icon kiwi
|
|
107
|
+
# Aliases: apx agent edit, apx agent update
|
|
108
|
+
|
|
109
|
+
# Read it back to confirm the body is there (not just the fields)
|
|
110
|
+
apx agent get reviewer
|
|
24
111
|
|
|
25
112
|
# Import from global vault (~/.apx/agents/)
|
|
26
113
|
apx agent vault list # see what's available
|
|
@@ -39,16 +126,17 @@ apx memory <slug> --replace < file.md # full replace from stdin
|
|
|
39
126
|
|
|
40
127
|
## Agent system prompt composition
|
|
41
128
|
|
|
42
|
-
`buildAgentSystem()` (`src/core/agent-system.js`) composes:
|
|
129
|
+
`buildAgentSystem()` (`src/core/agent/build-agent-system.js`) composes:
|
|
43
130
|
|
|
44
131
|
1. Identity: `You are <slug>` + project name.
|
|
45
|
-
2. Description (from
|
|
132
|
+
2. Description (from the agent's own frontmatter).
|
|
46
133
|
3. Role + Language fields.
|
|
47
|
-
4.
|
|
48
|
-
5.
|
|
49
|
-
6.
|
|
50
|
-
7.
|
|
51
|
-
8.
|
|
134
|
+
4. **The agent's own body → `# Custom instructions`.** Empty body ⇒ this block is absent and the agent has no instructions.
|
|
135
|
+
5. Invocation context: `engine | telegram | routine | runtime` — the channel calling.
|
|
136
|
+
6. Memory: `~/.apx/projects/<apx_id>/agents/<slug>/memory.md` — the single location, no fallback.
|
|
137
|
+
7. Skills from agent's `Skills:` field, loaded from `.apc/skills/<slug>.md` or bundled set.
|
|
138
|
+
8. The `apx` meta-skill (so agent knows how to operate APX).
|
|
139
|
+
9. ACTION_DISCIPLINE_RULES (fixed footer — anti-ghost, anti-disclaimer, action-first).
|
|
52
140
|
|
|
53
141
|
That's the prompt on every `apx exec <agent>` / `apx chat <agent>`. The super-agent (default APX mode) uses a *different* prompt — see `apx-routine` for super-agent vs exec_agent.
|
|
54
142
|
|
|
@@ -67,12 +155,38 @@ Language: es
|
|
|
67
155
|
|
|
68
156
|
A routine `kind: exec_agent` with `spec.agent: reviewer` uses that model.
|
|
69
157
|
|
|
158
|
+
## Other surfaces (same capability, same required prompt)
|
|
159
|
+
|
|
160
|
+
| Surface | Create | Set prompt | List areas/roles |
|
|
161
|
+
|---|---|---|---|
|
|
162
|
+
| Super-agent tool | `create_agent` (`system` required) | `set_agent_prompt` | `list_agents` / org |
|
|
163
|
+
| CLI | `apx agent add <slug> --prompt -` | `apx agent set <slug> --prompt -` | `apx org show` |
|
|
164
|
+
| MCP (`apx-mcp`) | `agent_create` (`prompt` required) | `agent_set_prompt` | `org_list` |
|
|
165
|
+
| Daemon API | `POST /api/projects/:pid/agents` `{system}` | `PATCH .../agents/:slug` `{system}` | `GET .../organization` |
|
|
166
|
+
| Web UI | Agents tab → new agent | agent detail → Prompt tab | Config tab pickers |
|
|
167
|
+
|
|
168
|
+
All four write the same file, assign an avatar blob when none is given, and accept the same `type` / `area` / `role` / `parent`. `system` in the API is the same thing as `--prompt` in the CLI and the body of the `.md`.
|
|
169
|
+
|
|
70
170
|
## Anti-examples
|
|
71
171
|
|
|
72
172
|
```bash
|
|
73
|
-
# DON'T
|
|
173
|
+
# DON'T create an agent with metadata only. It exits 0 and the agent is useless.
|
|
174
|
+
apx agent add magui --role "Social Media Producer" --description "Productora social."
|
|
175
|
+
# ↑ No --prompt ⇒ no instructions. Fix: apx agent set magui --prompt - <<'EOF' … EOF
|
|
176
|
+
|
|
177
|
+
# DON'T pack the instructions into --description. It is ONE LINE of metadata,
|
|
178
|
+
# truncated in listings, and it is not the prompt.
|
|
179
|
+
|
|
180
|
+
# DON'T invent an --area / --role slug. Run `apx org show` first; create the
|
|
181
|
+
# area if it's missing (apx org area add "Growth").
|
|
182
|
+
|
|
183
|
+
# DON'T make up an --icon. Only the 15 blob keys render; anything else is
|
|
184
|
+
# rejected. Omit the flag and one is chosen for you.
|
|
185
|
+
|
|
186
|
+
# DON'T hand-write .apc/agents/<slug>.md — the running daemon won't see it until a rebuild.
|
|
74
187
|
echo "..." > /path/.apc/agents/reviewer.md
|
|
75
|
-
# ↑ Use `apx agent add
|
|
188
|
+
# ↑ Use `apx agent add/set`, `apx agent import`, or the create_agent tool so the
|
|
189
|
+
# running daemon reloads its registry (a raw write it won't see until a rebuild).
|
|
76
190
|
|
|
77
191
|
# DON'T set Model: to a provider without keys — fails on first call.
|
|
78
192
|
# DON'T put long-running context in `Description` (one line). Put it in memory.md.
|
|
@@ -82,16 +196,17 @@ echo "..." > /path/.apc/agents/reviewer.md
|
|
|
82
196
|
|
|
83
197
|
| Aspect | Super-agent (default APX) | Project agent |
|
|
84
198
|
|---|---|---|
|
|
85
|
-
| Has tools? | Yes (full registry) | No
|
|
86
|
-
| Loop? | Multi-iteration tool loop |
|
|
199
|
+
| Has tools? | Yes (full registry) | Yes. **No declared `tools:` → the broad default: the whole registry minus a few host-only tools** (`set_identity`, `set_permission_mode`, `add_project`, `import_agent`). Declaring `tools:` *narrows* to that allowlist. |
|
|
200
|
+
| Loop? | Multi-iteration tool loop | Multi-iteration, in a normal conversation or on `exec_agent`; one-shot text only when `spec.no_tools: true` |
|
|
87
201
|
| System prompt | `super-agent-base.md` + channel template + identity | `buildAgentSystem()` per-agent |
|
|
88
202
|
| Conversation in | super-agent surfaces | `<storagePath>/agents/<slug>/conversations/*.md` |
|
|
89
|
-
| Configured via | `super_agent.*` in config |
|
|
203
|
+
| Configured via | `super_agent.*` in config | `.apc/agents/<slug>.md` per-agent files |
|
|
90
204
|
|
|
91
205
|
When in doubt: super-agent is APX itself; agents are personas inside a project.
|
|
92
206
|
|
|
93
207
|
## Don't
|
|
94
208
|
|
|
95
|
-
- Don't
|
|
96
|
-
- Don't
|
|
209
|
+
- Don't create an agent without a system prompt. Nothing errors; the agent just has no instructions. Verify with `apx agent get <slug>` — if you see only fields and no body, it isn't done.
|
|
210
|
+
- Don't declare a `tools:` allowlist unless you mean to *narrow* the agent. Capability is the default: an agent with no `tools:` field already gets the whole registry minus a few host-only tools (`set_identity`, `set_permission_mode`, `add_project`, `import_agent`). Declaring the field takes tools *away* — so if you list one, list every tool the agent needs (`write_file`, `run_command`, `load_skill`, its MCP tools), or it silently loses the rest. When unsure, leave `tools:` off.
|
|
211
|
+
- Don't assume `AGENTS.md` is the agent list — it isn't. It's a user-owned startup-rules file APX never regenerates; agents live in `.apc/agents/*.md`. A project with no `AGENTS.md` (the super-agent's `default`) is fine, not broken.
|
|
97
212
|
- Don't use the same slug across projects expecting shared memory. Memory is per-project.
|
|
@@ -7,7 +7,7 @@ description: Promises made to a named person — counterparty, the date you gave
|
|
|
7
7
|
|
|
8
8
|
A `task` is something to do. A `commitment` is something **promised to a specific person**: it has a counterparty, a date you gave them, and the channel you said it on. Breaking one costs trust, not throughput.
|
|
9
9
|
|
|
10
|
-
Append-only JSONL per month at `~/.apx/projects/<apxId>/commitments/YYYY-MM.jsonl`, folded the same way as tasks.
|
|
10
|
+
Append-only JSONL per month at `~/.apx/projects/<apxId>/commitments/YYYY-MM.jsonl`, folded the same way as tasks. No event is ever removed from the log — `drop` hides a row that was filed by mistake, it does not erase its history.
|
|
11
11
|
|
|
12
12
|
## When it is a commitment and not a task
|
|
13
13
|
|
|
@@ -39,11 +39,11 @@ Resolve a loose date to a real one ("Friday" → that date) and say which date y
|
|
|
39
39
|
|
|
40
40
|
## Super-agent tools
|
|
41
41
|
|
|
42
|
-
`record_commitment` and `list_commitments
|
|
42
|
+
`record_commitment` and `list_commitments` are in the base set — a promise is caught mid-sentence, so they are always loaded. **`mark_commitment`** (kept | missed | drop | renegotiate) closes one out with a tool, no shelling to `apx commitment kept`.
|
|
43
43
|
|
|
44
44
|
```json
|
|
45
45
|
{ "name": "record_commitment",
|
|
46
|
-
"arguments": { "project": "
|
|
46
|
+
"arguments": { "project": "acme", "counterparty": "Ana",
|
|
47
47
|
"body": "send the revised quote", "due": "2026-05-30",
|
|
48
48
|
"origin_channel": "telegram" } }
|
|
49
49
|
```
|
|
@@ -61,29 +61,38 @@ Counterparty matching is case-insensitive substring, so `"ana"` finds "Ana Pére
|
|
|
61
61
|
|
|
62
62
|
```bash
|
|
63
63
|
# Record
|
|
64
|
-
apx commitment add "send the revised quote" --to "Ana" --due 2026-05-30 --project
|
|
65
|
-
apx commitment add "the deck for the board" --to "Bruno" --project
|
|
64
|
+
apx commitment add "send the revised quote" --to "Ana" --due 2026-05-30 --project acme
|
|
65
|
+
apx commitment add "the deck for the board" --to "Bruno" --project acme # no date yet
|
|
66
66
|
|
|
67
67
|
# Read
|
|
68
68
|
apx commitment list --all # every project, soonest deadline first
|
|
69
69
|
apx commitment list --all --overdue # what you owe and already missed
|
|
70
70
|
apx commitment list --to Ana --state all # everything ever promised to her
|
|
71
|
-
apx commitment show c_abc123 --project
|
|
71
|
+
apx commitment show c_abc123 --project acme
|
|
72
72
|
|
|
73
73
|
# Close it out
|
|
74
|
-
apx commitment kept c_abc123 --project
|
|
75
|
-
apx commitment missed c_abc123 --project
|
|
76
|
-
apx commitment renegotiate c_abc123 --due 2026-06-15 --project
|
|
74
|
+
apx commitment kept c_abc123 --project acme
|
|
75
|
+
apx commitment missed c_abc123 --project acme --note "forgot entirely"
|
|
76
|
+
apx commitment renegotiate c_abc123 --due 2026-06-15 --project acme --note "agreed on the call"
|
|
77
|
+
|
|
78
|
+
# Filed by mistake — not a broken promise
|
|
79
|
+
apx commitment drop c_abc123 --project acme --note "this was a task, not a promise"
|
|
77
80
|
```
|
|
78
81
|
|
|
79
|
-
## The
|
|
82
|
+
## The ways one ends
|
|
80
83
|
|
|
81
84
|
| Verb | Means | State after |
|
|
82
85
|
|---|---|---|
|
|
83
86
|
| `kept` | Delivered. | `kept` |
|
|
84
87
|
| `missed` | The date passed and it did not happen. | `missed` |
|
|
88
|
+
| `drop` | Filed by mistake — nobody was ever waiting. | `dropped` |
|
|
85
89
|
| `renegotiate` | A NEW date, agreed with them. | back to `open` |
|
|
86
90
|
|
|
91
|
+
**`drop` is not a polite `missed`.** Reach for it only when the row should not
|
|
92
|
+
have existed (a task recorded as a promise, a duplicate). Using it on something
|
|
93
|
+
a person actually expected launders a broken promise into a clerical error, and
|
|
94
|
+
the overdue count — the only number here that means anything — stops being true.
|
|
95
|
+
|
|
87
96
|
**`renegotiate` reopens rather than closing.** A promise with a new date is a live promise, and every date it has ever had stays in `history`. Moving a date twice is a fact about the relationship; it is only visible because the log keeps it.
|
|
88
97
|
|
|
89
98
|
**`missed` records, it does not hide.** A system that quietly drops what you failed to do cannot tell you that you keep failing the same person.
|
|
@@ -112,8 +121,9 @@ GET /api/projects/:pid/commitments/:id
|
|
|
112
121
|
PATCH /api/projects/:pid/commitments/:id { patch: {...} }
|
|
113
122
|
POST /api/projects/:pid/commitments/:id/kept { note? }
|
|
114
123
|
POST /api/projects/:pid/commitments/:id/missed { note? }
|
|
124
|
+
POST /api/projects/:pid/commitments/:id/drop { note? } filed by mistake
|
|
115
125
|
POST /api/projects/:pid/commitments/:id/renegotiate { due, note? }
|
|
116
|
-
GET /api/projects/:pid/commitments-summary → { open, kept, missed, overdue, total }
|
|
126
|
+
GET /api/projects/:pid/commitments-summary → { open, kept, missed, dropped, overdue, total }
|
|
117
127
|
```
|
|
118
128
|
|
|
119
129
|
## Don't
|