@agentprojectcontext/apx 1.80.2 → 1.89.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +9 -8
- package/skills/apc-context/SKILL.md +14 -7
- package/skills/apx/SKILL.md +62 -2
- package/skills/apx-mcp/SKILL.md +42 -15
- package/src/core/agent/a2a/peers.js +161 -0
- package/src/core/agent/a2a/reply.js +379 -27
- package/src/core/agent/abort.js +25 -0
- package/src/core/agent/agent-model.js +58 -0
- package/src/core/agent/agent-tools.js +101 -0
- package/src/core/agent/author-line.js +110 -0
- package/src/core/agent/build-agent-system.js +52 -18
- package/src/core/agent/channels/voice-context.js +17 -2
- package/src/core/agent/closing-floor.js +117 -0
- package/src/core/agent/constants.js +119 -11
- package/src/core/agent/engine-call.js +56 -0
- package/src/core/agent/group/run-group-turn.js +218 -0
- package/src/core/agent/group/turn-resolver.js +165 -0
- package/src/core/agent/judge.js +138 -11
- package/src/core/agent/loop/side-effects.js +106 -3
- package/src/core/agent/memory.js +31 -18
- package/src/core/agent/model-capabilities.js +47 -0
- package/src/core/agent/model-router.js +11 -40
- package/src/core/agent/prompt-builder.js +47 -0
- package/src/core/agent/prompts/channels/a2a.md +12 -0
- package/src/core/agent/prompts/channels/code.md +3 -1
- package/src/core/agent/prompts/channels/telegram.md +2 -0
- package/src/core/agent/prompts/channels/web_code.md +1 -1
- package/src/core/agent/prompts/channels/whatsapp.md +37 -0
- package/src/core/agent/prompts/core/agent-base.md +2 -0
- package/src/core/agent/prompts/discipline/action.md +1 -0
- package/src/core/agent/prompts/discipline/two-segment.md +2 -1
- package/src/core/agent/prompts/modes/mobility.md +36 -0
- package/src/core/agent/retry.js +42 -0
- package/src/core/agent/run-agent.js +322 -25
- package/src/core/agent/run-turn.js +253 -0
- package/src/core/agent/self-memory.js +18 -52
- package/src/core/agent/skills/agent-skills.js +118 -0
- package/src/core/agent/skills/catalog.js +1 -1
- package/src/core/agent/skills/declared.js +13 -0
- package/src/core/agent/skills/index-store.js +8 -1
- package/src/core/agent/skills/inspector.js +20 -3
- package/src/core/agent/skills/loader.js +18 -3
- package/src/core/agent/skills/media.js +121 -0
- package/src/core/agent/skills/origin.js +61 -0
- package/src/core/agent/skills/sections.js +136 -0
- package/src/core/agent/super-agent.js +54 -14
- package/src/core/agent/tools/handlers/_calendar.js +50 -0
- package/src/core/agent/tools/handlers/add-mcp.js +103 -0
- package/src/core/agent/tools/handlers/asana-create-task.js +3 -1
- package/src/core/agent/tools/handlers/attach-media.js +56 -0
- package/src/core/agent/tools/handlers/calendar-create-event.js +38 -0
- package/src/core/agent/tools/handlers/calendar-find-slot.js +39 -0
- package/src/core/agent/tools/handlers/calendar-list-events.js +39 -0
- package/src/core/agent/tools/handlers/calendar-update-event.js +35 -0
- package/src/core/agent/tools/handlers/call-agent.js +14 -6
- package/src/core/agent/tools/handlers/call-runtime.js +27 -49
- package/src/core/agent/tools/handlers/comment-task.js +78 -0
- package/src/core/agent/tools/handlers/complete-task.js +60 -0
- package/src/core/agent/tools/handlers/configure-agent.js +70 -0
- package/src/core/agent/tools/handlers/create-agent.js +68 -0
- package/src/core/agent/tools/handlers/create-task.js +41 -3
- package/src/core/agent/tools/handlers/import-agent.js +5 -5
- package/src/core/agent/tools/handlers/list-mcp-tools.js +83 -0
- package/src/core/agent/tools/handlers/list-routines.js +46 -0
- package/src/core/agent/tools/handlers/list-tasks.js +8 -1
- package/src/core/agent/tools/handlers/mark-commitment.js +57 -0
- package/src/core/agent/tools/handlers/read-skill.js +64 -0
- package/src/core/agent/tools/handlers/remember-routine.js +2 -8
- package/src/core/agent/tools/handlers/remember.js +82 -6
- package/src/core/agent/tools/handlers/remove-agent.js +42 -0
- package/src/core/agent/tools/handlers/run-routine.js +94 -0
- package/src/core/agent/tools/handlers/run-shell.js +44 -2
- package/src/core/agent/tools/handlers/send-telegram.js +41 -19
- package/src/core/agent/tools/handlers/set-agent-prompt.js +44 -0
- package/src/core/agent/tools/handlers/view-media.js +69 -0
- package/src/core/agent/tools/handlers/write-agent-memory.js +52 -0
- package/src/core/agent/tools/helpers.js +36 -4
- package/src/core/agent/tools/names.js +64 -0
- package/src/core/agent/tools/registry-bridge.js +24 -1
- package/src/core/agent/tools/registry.js +79 -0
- package/src/core/agent/tools/tool-call-parser.js +136 -13
- package/src/core/agent/vision-bridge.js +69 -0
- package/src/core/apc/agent-identity.js +74 -0
- package/src/core/apc/agent-rename-refs.js +187 -0
- package/src/core/apc/agent-write.js +312 -0
- package/src/core/apc/agents-vault.js +1 -1
- package/src/core/apc/blob-keys.js +42 -0
- package/src/core/apc/frontmatter.js +166 -10
- package/src/core/apc/parser.js +33 -83
- package/src/core/apc/paths.js +4 -6
- package/src/core/apc/project-memory.js +44 -0
- package/src/core/apc/projects-helpers.js +33 -0
- package/src/core/apc/scaffold.js +36 -16
- package/src/core/channels/telegram/ask-callbacks.js +103 -0
- package/src/core/channels/telegram/dispatch.js +154 -30
- package/src/core/channels/telegram/helpers.js +59 -7
- package/src/core/channels/telegram/inbound/audio.js +26 -30
- package/src/core/channels/telegram/inbound/file.js +22 -32
- package/src/core/channels/telegram/inbound/photo.js +24 -28
- package/src/core/channels/telegram/progress-gate.js +76 -0
- package/src/core/channels/telegram/reply.js +151 -43
- package/src/core/channels/telegram/voice-note.js +150 -0
- package/src/core/config/index.js +53 -54
- package/src/core/config/paths.js +117 -31
- package/src/core/config/redact.js +89 -4
- package/src/core/config/secret-values.js +2 -4
- package/src/core/constants/actors.js +5 -0
- package/src/core/constants/channels.js +3 -1
- package/src/core/constants/task-categories.js +73 -0
- package/src/core/constants/task-fields.js +28 -0
- package/src/core/engines/_globs.js +33 -0
- package/src/core/engines/anthropic.js +19 -1
- package/src/core/engines/catalog.js +20 -0
- package/src/core/engines/gemini.js +84 -16
- package/src/core/engines/index.js +19 -3
- package/src/core/engines/mock.js +145 -1
- package/src/core/engines/openai-compatible.js +150 -15
- package/src/core/engines/presets.js +36 -9
- package/src/core/engines/zen.js +131 -0
- package/src/core/events/bus.js +140 -0
- package/src/core/events/mascot-notify.js +156 -0
- package/src/core/http-tools/browser.js +366 -36
- package/src/core/http-tools/catalog.js +206 -22
- package/src/core/http-tools/grep.js +62 -7
- package/src/core/http-tools/registry.js +3 -1
- package/src/core/i18n/en.js +34 -3
- package/src/core/i18n/es.js +36 -4
- package/src/core/i18n/index.js +5 -5
- package/src/core/i18n/pt.js +32 -3
- package/src/core/identity/self.js +14 -1
- package/src/core/images/engines/a1111.js +219 -0
- package/src/core/images/engines/index.js +187 -0
- package/src/core/images/engines/mock.js +74 -0
- package/src/core/images/engines/openai.js +130 -0
- package/src/core/images/engines/sdcpp.js +204 -0
- package/src/core/images/engines/shared.js +218 -0
- package/src/core/images/generate.js +260 -0
- package/src/core/integrations/catalog.js +8 -3
- package/src/core/integrations/plugins/_google-oauth.js +179 -0
- package/src/core/integrations/plugins/asana.js +7 -3
- package/src/core/integrations/plugins/calendar.js +404 -0
- package/src/core/integrations/store.js +2 -0
- package/src/core/memory/broker.js +16 -1
- package/src/core/memory/compactor.js +19 -3
- package/src/core/memory/consolidate.js +2 -2
- package/src/core/memory/dated-log.js +66 -0
- package/src/core/memory/embed-engines/custom.js +59 -0
- package/src/core/memory/embed-engines/gemini.js +9 -3
- package/src/core/memory/embed-engines/index.js +87 -15
- package/src/core/memory/embeddings.js +52 -24
- package/src/core/memory/index.js +13 -3
- package/src/core/memory/indexer.js +83 -27
- package/src/core/memory/prune.js +182 -0
- package/src/core/memory/store.js +22 -0
- package/src/core/memory/summarizer.js +72 -8
- package/src/core/mobility/answer.js +80 -0
- package/src/core/mobility/geofence.js +667 -0
- package/src/core/mobility/osm-route.js +282 -0
- package/src/core/mobility/preferences.js +91 -0
- package/src/core/mobility/state.js +245 -0
- package/src/core/mobility/trip-event.js +384 -0
- package/src/core/net/tailscale.js +168 -0
- package/src/core/profiles/bundled/secretary/PROFILE.md +32 -42
- package/src/core/profiles/bundled/secretary/config.schema.es.json +68 -0
- package/src/core/profiles/bundled/secretary/config.schema.json +30 -2
- package/src/core/profiles/bundled/secretary/profile.json +3 -1
- package/src/core/profiles/bundled/secretary/routines/a2a-sweep.json +20 -0
- package/src/core/profiles/bundled/secretary/routines/day-close.json +4 -1
- package/src/core/profiles/bundled/secretary/routines/day-open.json +7 -1
- package/src/core/profiles/bundled/secretary/routines/watch.json +13 -2
- package/src/core/profiles/lifecycle.js +243 -19
- package/src/core/profiles/paths.js +12 -0
- package/src/core/profiles/store.js +47 -0
- package/src/core/routines/active-runs.js +213 -0
- package/src/core/routines/delivery.js +612 -0
- package/src/core/routines/header.js +88 -0
- package/src/core/routines/index.js +26 -0
- package/src/core/routines/run-log.js +78 -0
- package/src/core/routines/runner.js +629 -66
- package/src/core/routines/signals.js +75 -0
- package/src/core/runtime-skills/apc-context/SKILL.md +14 -7
- package/src/core/runtime-skills/apx/SKILL.md +93 -1
- package/src/core/runtime-skills/apx-agency-agents/SKILL.md +2 -2
- package/src/core/runtime-skills/apx-agent/SKILL.md +134 -19
- package/src/core/runtime-skills/apx-commitment/SKILL.md +134 -0
- package/src/core/runtime-skills/apx-image/SKILL.md +60 -0
- package/src/core/runtime-skills/apx-integrations/SKILL.md +82 -0
- package/src/core/runtime-skills/apx-mcp/SKILL.md +45 -14
- package/src/core/runtime-skills/apx-mcp-builder/SKILL.md +4 -4
- package/src/core/runtime-skills/apx-profile/SKILL.md +27 -2
- package/src/core/runtime-skills/apx-project/SKILL.md +23 -2
- package/src/core/runtime-skills/apx-routine/SKILL.md +40 -17
- package/src/core/runtime-skills/apx-runtime/SKILL.md +124 -14
- package/src/core/runtime-skills/apx-sessions/SKILL.md +7 -6
- package/src/core/runtime-skills/apx-skill-builder/SKILL.md +15 -13
- package/src/core/runtime-skills/apx-task/SKILL.md +79 -26
- package/src/core/runtime-skills/apx-telegram/SKILL.md +12 -12
- package/src/core/runtime-skills/apx-transcribe/SKILL.md +56 -0
- package/src/core/runtime-skills/apx-voice/SKILL.md +27 -8
- package/src/core/runtime-skills/claude-code/SKILL.md +8 -0
- package/src/core/runtime-skills/openrouter/SKILL.md +8 -2
- package/src/core/runtimes/_spawn.js +9 -1
- package/src/core/runtimes/claude-code.js +11 -2
- package/src/core/runtimes/codex.js +44 -10
- package/src/core/runtimes/index.js +17 -2
- package/src/core/runtimes/opencode.js +88 -9
- package/src/core/runtimes/outcome.js +119 -0
- package/src/core/sessions/index.js +193 -1
- package/src/core/stores/agent-inbox.js +109 -23
- package/src/core/stores/code-sessions.js +21 -0
- package/src/core/stores/commitments.js +27 -3
- package/src/core/stores/conversations.js +220 -20
- package/src/core/stores/deliveries.js +177 -0
- package/src/core/stores/media-archive.js +228 -0
- package/src/core/stores/messages.js +1096 -112
- package/src/core/stores/organization.js +34 -0
- package/src/core/stores/project-memory.js +71 -0
- package/src/core/stores/routine-memory.js +16 -8
- package/src/core/stores/routines.js +27 -49
- package/src/core/stores/sessions.js +4 -8
- package/src/core/stores/tasks.js +212 -18
- package/src/core/stores/turn-record.js +209 -0
- package/src/core/tasks/columns.js +136 -0
- package/src/core/tasks/comment-turn.js +258 -0
- package/src/core/util/time.js +13 -0
- package/src/core/voice/engines/index.js +54 -1
- package/src/core/voice/engines/openai.js +50 -4
- package/src/core/voice/opus.js +67 -0
- package/src/core/voice/pronounceable.js +43 -0
- package/src/core/voice/transcription.js +4 -0
- package/src/core/voice/tts.js +114 -24
- package/src/host/daemon/active-turns.js +188 -0
- package/src/host/daemon/api/admin-config.js +9 -0
- package/src/host/daemon/api/agents.js +99 -90
- package/src/host/daemon/api/artifact-preview.js +7 -6
- package/src/host/daemon/api/artifacts.js +3 -2
- package/src/host/daemon/api/code.js +55 -9
- package/src/host/daemon/api/commitments.js +11 -0
- package/src/host/daemon/api/confirm.js +3 -2
- package/src/host/daemon/api/conversations.js +543 -35
- package/src/host/daemon/api/deck.js +9 -8
- package/src/host/daemon/api/deliveries.js +33 -0
- package/src/host/daemon/api/desktop.js +5 -4
- package/src/host/daemon/api/embeddings.js +15 -6
- package/src/host/daemon/api/engines.js +59 -8
- package/src/host/daemon/api/exec.js +437 -121
- package/src/host/daemon/api/groups.js +215 -0
- package/src/host/daemon/api/images.js +107 -0
- package/src/host/daemon/api/inbox.js +123 -2
- package/src/host/daemon/api/integrations.js +64 -2
- package/src/host/daemon/api/mcps.js +7 -6
- package/src/host/daemon/api/media.js +283 -0
- package/src/host/daemon/api/mobility.js +177 -0
- package/src/host/daemon/api/net.js +182 -0
- package/src/host/daemon/api/pairing.js +38 -5
- package/src/host/daemon/api/profiles.js +30 -2
- package/src/host/daemon/api/routines.js +36 -4
- package/src/host/daemon/api/runtimes.js +74 -39
- package/src/host/daemon/api/sessions-search.js +7 -2
- package/src/host/daemon/api/sessions.js +44 -2
- package/src/host/daemon/api/shared.js +127 -20
- package/src/host/daemon/api/skills.js +11 -4
- package/src/host/daemon/api/super-agent.js +384 -53
- package/src/host/daemon/api/tasks.js +180 -10
- package/src/host/daemon/api/telegram.js +11 -10
- package/src/host/daemon/api/thread-faces.js +159 -0
- package/src/host/daemon/api/top-level.js +3 -3
- package/src/host/daemon/api/transcribe.js +11 -10
- package/src/host/daemon/api/tts.js +97 -4
- package/src/host/daemon/api/turn-abort.js +23 -0
- package/src/host/daemon/api/turns.js +49 -0
- package/src/host/daemon/api/voice.js +5 -4
- package/src/host/daemon/api/web.js +98 -0
- package/src/host/daemon/api.js +39 -0
- package/src/host/daemon/delivery-sweep.js +58 -0
- package/src/host/daemon/desktop-ws.js +5 -23
- package/src/host/daemon/events-ws.js +273 -0
- package/src/host/daemon/index.js +59 -15
- package/src/host/daemon/plugins/desktop/index.js +17 -4
- package/src/host/daemon/plugins/telegram/index.js +78 -40
- package/src/host/daemon/pty-bridge.py +99 -0
- package/src/host/daemon/routines-scheduler.js +1 -0
- package/src/host/daemon/smoke.js +1 -2
- package/src/host/daemon/terminal-ws.js +132 -0
- package/src/host/daemon/tts-keepwarm.js +87 -0
- package/src/host/daemon/wakeup.js +11 -6
- package/src/host/daemon/whisper-server.js +44 -0
- package/src/host/daemon/whisper-server.py +70 -13
- package/src/host/daemon/ws-auth.js +28 -0
- package/src/interfaces/android/app/build.gradle +42 -0
- package/src/interfaces/android/app/proguard-rules.pro +4 -0
- package/src/interfaces/android/app/src/main/AndroidManifest.xml +139 -0
- package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/AlertScreen.java +139 -0
- package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/AndroidAutoDetector.java +106 -0
- package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/ApxCarAppService.java +57 -0
- package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/ApxPreferences.java +165 -0
- package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/CarAlertStore.java +84 -0
- package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/CarMessageActionReceiver.java +47 -0
- package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/CarMessageNotification.java +152 -0
- package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/DaemonAddress.java +35 -0
- package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/DaemonClient.java +339 -0
- package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/DeviceLocation.java +38 -0
- package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/ErrandScreen.java +127 -0
- package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/MainActivity.java +872 -0
- package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/MapsNavigationDetector.java +63 -0
- package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/MapsNavigationListenerService.java +453 -0
- package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/MapsShareIntentParser.java +93 -0
- package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/MascotBlobCatalog.java +66 -0
- package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/MascotOverlayService.java +448 -0
- package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/MascotView.java +249 -0
- package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/MessageFrameParser.java +240 -0
- package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/NotifyChannels.java +69 -0
- package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/ProximityActionReceiver.java +78 -0
- package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/ProximityNotification.java +161 -0
- package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/StartupReceiver.java +57 -0
- package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/TravelEventGate.java +62 -0
- package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/TravelStatusBanner.java +116 -0
- package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/TripLocationService.java +272 -0
- package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/TripPlacesSheet.java +203 -0
- package/src/interfaces/android/app/src/main/java/dev/agentprojectcontext/apx/TripScreen.java +182 -0
- package/src/interfaces/android/app/src/main/res/drawable/app_background.xml +12 -0
- package/src/interfaces/android/app/src/main/res/drawable/ic_apx_app.xml +10 -0
- package/src/interfaces/android/app/src/main/res/drawable/ic_apx_launcher_foreground.xml +12 -0
- package/src/interfaces/android/app/src/main/res/drawable/ic_apx_notification.xml +22 -0
- package/src/interfaces/android/app/src/main/res/drawable/ic_trip_car.xml +37 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/apx_logo.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_amatista.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_aqua.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_brasa.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_campana.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_caracol.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_carbon.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_cobalto.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_cometa.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_coral.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_cubi.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_eclipse.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_faro.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_gajo.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_iris.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_kiwi.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_laguna.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_lila.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_menta.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_nimbo.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_noche.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_onyx.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_orbita.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_ovni.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_papa.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_parche.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_peon.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_perla.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_pino.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_quad.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_rubi.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_saturno.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_trebol.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_trino.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_volcan.png +0 -0
- package/src/interfaces/android/app/src/main/res/drawable-nodpi/mascot_zafiro.png +0 -0
- package/src/interfaces/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +5 -0
- package/src/interfaces/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +5 -0
- package/src/interfaces/android/app/src/main/res/raw/apx_notification.mp3 +0 -0
- package/src/interfaces/android/app/src/main/res/values/colors.xml +4 -0
- package/src/interfaces/android/app/src/main/res/values/strings.xml +25 -0
- package/src/interfaces/android/app/src/main/res/values/styles.xml +10 -0
- package/src/interfaces/android/app/src/main/res/values-v31/styles.xml +14 -0
- package/src/interfaces/android/app/src/main/res/xml/automotive_app_desc.xml +9 -0
- package/src/interfaces/android/app/src/main/res/xml/network_security_config.xml +10 -0
- package/src/interfaces/android/app/src/test/java/dev/agentprojectcontext/apx/AndroidAutoDetectorTest.java +85 -0
- package/src/interfaces/android/app/src/test/java/dev/agentprojectcontext/apx/CarAlertStoreTest.java +104 -0
- package/src/interfaces/android/app/src/test/java/dev/agentprojectcontext/apx/DaemonAddressTest.java +23 -0
- package/src/interfaces/android/app/src/test/java/dev/agentprojectcontext/apx/MapsNavigationDetectorTest.java +69 -0
- package/src/interfaces/android/app/src/test/java/dev/agentprojectcontext/apx/MapsShareIntentParserTest.java +31 -0
- package/src/interfaces/android/app/src/test/java/dev/agentprojectcontext/apx/MessageFrameParserTest.java +180 -0
- package/src/interfaces/android/app/src/test/java/dev/agentprojectcontext/apx/TravelEventGateTest.java +64 -0
- package/src/interfaces/android/app/src/test/java/dev/agentprojectcontext/apx/TripPlacesSheetTest.java +66 -0
- package/src/interfaces/android/build.gradle +3 -0
- package/src/interfaces/android/gradle/wrapper/gradle-wrapper.jar +0 -0
- package/src/interfaces/android/gradle/wrapper/gradle-wrapper.properties +9 -0
- package/src/interfaces/android/gradle.properties +3 -0
- package/src/interfaces/android/gradlew +248 -0
- package/src/interfaces/android/gradlew.bat +82 -0
- package/src/interfaces/android/settings.gradle +18 -0
- package/src/interfaces/cli/commands/a2a.js +145 -4
- package/src/interfaces/cli/commands/agent.js +247 -22
- package/src/interfaces/cli/commands/code.js +1 -1
- package/src/interfaces/cli/commands/commitment.js +5 -0
- package/src/interfaces/cli/commands/config.js +85 -6
- package/src/interfaces/cli/commands/exec.js +90 -1
- package/src/interfaces/cli/commands/image.js +314 -0
- package/src/interfaces/cli/commands/mcp.js +87 -23
- package/src/interfaces/cli/commands/memory.js +35 -22
- package/src/interfaces/cli/commands/panel.js +94 -0
- package/src/interfaces/cli/commands/profile.js +14 -0
- package/src/interfaces/cli/commands/project.js +29 -0
- package/src/interfaces/cli/commands/routine.js +45 -10
- package/src/interfaces/cli/commands/runtime.js +30 -7
- package/src/interfaces/cli/commands/session.js +90 -38
- package/src/interfaces/cli/commands/sessions.js +35 -2
- package/src/interfaces/cli/commands/skills.js +15 -9
- package/src/interfaces/cli/commands/status.js +2 -3
- package/src/interfaces/cli/commands/task.js +54 -5
- package/src/interfaces/cli/commands/telegram.js +12 -4
- package/src/interfaces/cli/commands/transcribe.js +177 -0
- package/src/interfaces/cli/help/index.js +311 -72
- package/src/interfaces/cli/http.js +61 -13
- package/src/interfaces/cli/index.js +1 -1
- package/src/interfaces/cli/routes/agent.js +5 -4
- package/src/interfaces/cli/routes/commitment.js +3 -2
- package/src/interfaces/cli/routes/config.js +7 -2
- package/src/interfaces/cli/routes/image.js +11 -0
- package/src/interfaces/cli/routes/index.js +2 -0
- package/src/interfaces/cli/routes/log.js +1 -1
- package/src/interfaces/cli/routes/memory.js +3 -2
- package/src/interfaces/cli/routes/panel.js +15 -2
- package/src/interfaces/cli/routes/profile.js +3 -2
- package/src/interfaces/cli/routes/transcribe.js +10 -0
- package/src/interfaces/cli/stdin.js +29 -0
- package/src/interfaces/desktop/assets/blobs/amatista.png +0 -0
- package/src/interfaces/desktop/assets/blobs/aqua.png +0 -0
- package/src/interfaces/desktop/assets/blobs/brasa.png +0 -0
- package/src/interfaces/desktop/assets/blobs/campana.png +0 -0
- package/src/interfaces/desktop/assets/blobs/caracol.png +0 -0
- package/src/interfaces/desktop/assets/blobs/carbon.png +0 -0
- package/src/interfaces/desktop/assets/blobs/cobalto.png +0 -0
- package/src/interfaces/desktop/assets/blobs/cometa.png +0 -0
- package/src/interfaces/desktop/assets/blobs/coral.png +0 -0
- package/src/interfaces/desktop/assets/blobs/cubi.png +0 -0
- package/src/interfaces/desktop/assets/blobs/eclipse.png +0 -0
- package/src/interfaces/desktop/assets/blobs/faro.png +0 -0
- package/src/interfaces/desktop/assets/blobs/gajo.png +0 -0
- package/src/interfaces/desktop/assets/blobs/iris.png +0 -0
- package/src/interfaces/desktop/assets/blobs/kiwi.png +0 -0
- package/src/interfaces/desktop/assets/blobs/laguna.png +0 -0
- package/src/interfaces/desktop/assets/blobs/lila.png +0 -0
- package/src/interfaces/desktop/assets/blobs/menta.png +0 -0
- package/src/interfaces/desktop/assets/blobs/nimbo.png +0 -0
- package/src/interfaces/desktop/assets/blobs/noche.png +0 -0
- package/src/interfaces/desktop/assets/blobs/onyx.png +0 -0
- package/src/interfaces/desktop/assets/blobs/orbita.png +0 -0
- package/src/interfaces/desktop/assets/blobs/ovni.png +0 -0
- package/src/interfaces/desktop/assets/blobs/papa.png +0 -0
- package/src/interfaces/desktop/assets/blobs/parche.png +0 -0
- package/src/interfaces/desktop/assets/blobs/peon.png +0 -0
- package/src/interfaces/desktop/assets/blobs/perla.png +0 -0
- package/src/interfaces/desktop/assets/blobs/pino.png +0 -0
- package/src/interfaces/desktop/assets/blobs/quad.png +0 -0
- package/src/interfaces/desktop/assets/blobs/rubi.png +0 -0
- package/src/interfaces/desktop/assets/blobs/saturno.png +0 -0
- package/src/interfaces/desktop/assets/blobs/trebol.png +0 -0
- package/src/interfaces/desktop/assets/blobs/trino.png +0 -0
- package/src/interfaces/desktop/assets/blobs/volcan.png +0 -0
- package/src/interfaces/desktop/assets/blobs/zafiro.png +0 -0
- package/src/interfaces/desktop/assets/notification.mp3 +0 -0
- package/src/interfaces/desktop/main.js +473 -29
- package/src/interfaces/desktop/mascot-blobs.js +41 -0
- package/src/interfaces/desktop/mascot-preload.js +32 -0
- package/src/interfaces/desktop/mascot.css +186 -0
- package/src/interfaces/desktop/mascot.html +40 -0
- package/src/interfaces/desktop/mascot.js +163 -0
- package/src/interfaces/desktop/preload.js +10 -0
- package/src/interfaces/desktop/renderer.js +308 -48
- package/src/interfaces/desktop/style.css +34 -0
- package/src/interfaces/mcp-server/index.js +87 -0
- package/src/interfaces/tui/_shims/util-locale.ts +0 -2
- package/src/interfaces/tui/app.tsx +0 -6
- package/src/interfaces/tui/attach.ts +0 -1
- package/src/interfaces/tui/context/sdk-apx.tsx +0 -4
- package/src/interfaces/tui/plugin/api.tsx +0 -3
- package/src/interfaces/tui/plugin/runtime.ts +0 -3
- package/src/interfaces/tui/thread.ts +0 -16
- package/src/interfaces/web/README.md +22 -14
- package/src/interfaces/web/dist/assets/claude-XtpLmGtF.webp +0 -0
- package/src/interfaces/web/dist/assets/codex-DExPUgvh.webp +0 -0
- package/src/interfaces/web/dist/assets/index-BEoRgIqd.css +32 -0
- package/src/interfaces/web/dist/assets/index-BEoRgIqd.css.br +0 -0
- package/src/interfaces/web/dist/assets/index-BEoRgIqd.css.gz +0 -0
- package/src/interfaces/web/dist/assets/index-C6fXHc1p.js +1074 -0
- package/src/interfaces/web/dist/assets/index-C6fXHc1p.js.br +0 -0
- package/src/interfaces/web/dist/assets/index-C6fXHc1p.js.gz +0 -0
- package/src/interfaces/web/dist/assets/index-C6fXHc1p.js.map +1 -0
- package/src/interfaces/web/dist/assets/index-C6fXHc1p.js.map.br +0 -0
- package/src/interfaces/web/dist/assets/index-C6fXHc1p.js.map.gz +0 -0
- package/src/interfaces/web/dist/favicon/dark/site.webmanifest +12 -6
- package/src/interfaces/web/dist/favicon/white/site.webmanifest +12 -6
- package/src/interfaces/web/dist/index.html +22 -6
- package/src/interfaces/web/dist/index.html.br +0 -0
- package/src/interfaces/web/dist/index.html.gz +0 -0
- package/src/interfaces/web/dist/manifest.webmanifest +25 -0
- package/src/interfaces/web/dist/modules/blobs/amatista.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/aqua.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/brasa.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/campana.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/caracol.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/carbon.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/cobalto.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/cometa.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/coral.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/cubi.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/eclipse.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/faro.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/gajo.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/iris.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/kiwi.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/laguna.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/lila.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/menta.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/nimbo.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/noche.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/onyx.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/orbita.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/ovni.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/papa.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/parche.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/peon.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/perla.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/pino.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/quad.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/rubi.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/saturno.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/trebol.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/trino.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/volcan.png +0 -0
- package/src/interfaces/web/dist/modules/blobs/zafiro.png +0 -0
- package/src/interfaces/web/dist/sw.js +106 -0
- package/src/interfaces/web/dist/sw.js.br +0 -0
- package/src/interfaces/web/dist/sw.js.gz +0 -0
- package/src/interfaces/web/eslint.config.js +83 -0
- package/src/interfaces/web/index.html +20 -4
- package/src/interfaces/web/package-lock.json +1651 -1280
- package/src/interfaces/web/package.json +9 -10
- package/src/interfaces/web/pnpm-lock.yaml +867 -869
- package/src/interfaces/web/public/favicon/dark/site.webmanifest +12 -6
- package/src/interfaces/web/public/favicon/white/site.webmanifest +12 -6
- package/src/interfaces/web/public/manifest.webmanifest +25 -0
- package/src/interfaces/web/public/modules/blobs/amatista.png +0 -0
- package/src/interfaces/web/public/modules/blobs/aqua.png +0 -0
- package/src/interfaces/web/public/modules/blobs/brasa.png +0 -0
- package/src/interfaces/web/public/modules/blobs/campana.png +0 -0
- package/src/interfaces/web/public/modules/blobs/caracol.png +0 -0
- package/src/interfaces/web/public/modules/blobs/carbon.png +0 -0
- package/src/interfaces/web/public/modules/blobs/cobalto.png +0 -0
- package/src/interfaces/web/public/modules/blobs/cometa.png +0 -0
- package/src/interfaces/web/public/modules/blobs/coral.png +0 -0
- package/src/interfaces/web/public/modules/blobs/cubi.png +0 -0
- package/src/interfaces/web/public/modules/blobs/eclipse.png +0 -0
- package/src/interfaces/web/public/modules/blobs/faro.png +0 -0
- package/src/interfaces/web/public/modules/blobs/gajo.png +0 -0
- package/src/interfaces/web/public/modules/blobs/iris.png +0 -0
- package/src/interfaces/web/public/modules/blobs/kiwi.png +0 -0
- package/src/interfaces/web/public/modules/blobs/laguna.png +0 -0
- package/src/interfaces/web/public/modules/blobs/lila.png +0 -0
- package/src/interfaces/web/public/modules/blobs/menta.png +0 -0
- package/src/interfaces/web/public/modules/blobs/nimbo.png +0 -0
- package/src/interfaces/web/public/modules/blobs/noche.png +0 -0
- package/src/interfaces/web/public/modules/blobs/onyx.png +0 -0
- package/src/interfaces/web/public/modules/blobs/orbita.png +0 -0
- package/src/interfaces/web/public/modules/blobs/ovni.png +0 -0
- package/src/interfaces/web/public/modules/blobs/papa.png +0 -0
- package/src/interfaces/web/public/modules/blobs/parche.png +0 -0
- package/src/interfaces/web/public/modules/blobs/peon.png +0 -0
- package/src/interfaces/web/public/modules/blobs/perla.png +0 -0
- package/src/interfaces/web/public/modules/blobs/pino.png +0 -0
- package/src/interfaces/web/public/modules/blobs/quad.png +0 -0
- package/src/interfaces/web/public/modules/blobs/rubi.png +0 -0
- package/src/interfaces/web/public/modules/blobs/saturno.png +0 -0
- package/src/interfaces/web/public/modules/blobs/trebol.png +0 -0
- package/src/interfaces/web/public/modules/blobs/trino.png +0 -0
- package/src/interfaces/web/public/modules/blobs/volcan.png +0 -0
- package/src/interfaces/web/public/modules/blobs/zafiro.png +0 -0
- package/src/interfaces/web/public/sw.js +106 -0
- package/src/interfaces/web/src/App.tsx +106 -10
- package/src/interfaces/web/src/assets/cli/claude.webp +0 -0
- package/src/interfaces/web/src/assets/cli/codex.webp +0 -0
- package/src/interfaces/web/src/assets/cli/cursor.svg +1 -0
- package/src/interfaces/web/src/assets/cli/opencode.png +0 -0
- package/src/interfaces/web/src/components/Combobox.tsx +201 -0
- package/src/interfaces/web/src/components/MobileHint.tsx +95 -0
- package/src/interfaces/web/src/components/MobileLinkDialog.tsx +156 -0
- package/src/interfaces/web/src/components/ModelCombobox.tsx +21 -113
- package/src/interfaces/web/src/components/{routines/ReadOnlyBlock.tsx → ReadOnlyBlock.tsx} +13 -4
- package/src/interfaces/web/src/components/Roby.tsx +5 -3
- package/src/interfaces/web/src/components/RobyBubble.tsx +23 -5
- package/src/interfaces/web/src/components/RowMenu.tsx +46 -0
- package/src/interfaces/web/src/components/TimezoneSelect.tsx +4 -1
- package/src/interfaces/web/src/components/Toast.tsx +50 -14
- package/src/interfaces/web/src/components/UiSelect.tsx +12 -5
- package/src/interfaces/web/src/components/agents/AgentAvatar.tsx +171 -0
- package/src/interfaces/web/src/components/agents/AgentFormFields.tsx +42 -11
- package/src/interfaces/web/src/components/agents/AgentModelBadge.tsx +157 -0
- package/src/interfaces/web/src/components/agents/AgentModelSelect.tsx +57 -0
- package/src/interfaces/web/src/components/agents/AgentSkillsPicker.tsx +115 -0
- package/src/interfaces/web/src/components/agents/BlobAvatar.tsx +50 -0
- package/src/interfaces/web/src/components/agents/blobPresets.ts +50 -0
- package/src/interfaces/web/src/components/agents/modelCatalog.ts +66 -0
- package/src/interfaces/web/src/components/chat/ActionGroup.tsx +162 -0
- package/src/interfaces/web/src/components/chat/AskAnswersCard.tsx +4 -3
- package/src/interfaces/web/src/components/chat/AskQuestionsCard.tsx +1 -1
- package/src/interfaces/web/src/components/chat/Attachment.tsx +220 -0
- package/src/interfaces/web/src/components/chat/ChatList.tsx +226 -51
- package/src/interfaces/web/src/components/chat/ChatRowActivity.tsx +45 -0
- package/src/interfaces/web/src/components/chat/Composer.tsx +672 -23
- package/src/interfaces/web/src/components/chat/ComposerCommands.tsx +175 -0
- package/src/interfaces/web/src/components/chat/ComposerSuggest.tsx +215 -0
- package/src/interfaces/web/src/components/chat/ContextBar.tsx +133 -65
- package/src/interfaces/web/src/components/chat/InlineAskPanel.tsx +107 -47
- package/src/interfaces/web/src/components/chat/MessageBubble.tsx +460 -119
- package/src/interfaces/web/src/components/chat/MessageList.tsx +165 -18
- package/src/interfaces/web/src/components/chat/ReasoningBlock.tsx +58 -0
- package/src/interfaces/web/src/components/chat/SessionPicker.tsx +182 -0
- package/src/interfaces/web/src/components/chat/SkillTrace.tsx +183 -0
- package/src/interfaces/web/src/components/chat/ToolCall.tsx +11 -11
- package/src/interfaces/web/src/components/code/CodeContextTab.tsx +87 -53
- package/src/interfaces/web/src/components/code/CodeFileTree.tsx +11 -52
- package/src/interfaces/web/src/components/code/CodeFileViewer.tsx +5 -4
- package/src/interfaces/web/src/components/code/CodeProjectPicker.tsx +31 -7
- package/src/interfaces/web/src/components/code/CodeSessionList.tsx +32 -11
- package/src/interfaces/web/src/components/code/CodeSidePanel.tsx +33 -3
- package/src/interfaces/web/src/components/code/CodeTerminal.tsx +5 -4
- package/src/interfaces/web/src/components/code/NewCodeSessionDialog.tsx +164 -0
- package/src/interfaces/web/src/components/commitments/CommitmentDetail.tsx +162 -0
- package/src/interfaces/web/src/components/commitments/CommitmentFormDialog.tsx +158 -0
- package/src/interfaces/web/src/components/commitments/CommitmentList.tsx +194 -0
- package/src/interfaces/web/src/components/commitments/commitmentState.tsx +46 -0
- package/src/interfaces/web/src/components/common/BulkActionBar.tsx +60 -0
- package/src/interfaces/web/src/components/common/ConfirmDialog.tsx +4 -1
- package/src/interfaces/web/src/components/common/SelectCheckbox.tsx +40 -0
- package/src/interfaces/web/src/components/common/TabNav.tsx +1 -1
- package/src/interfaces/web/src/components/cron/CronPicker.tsx +1 -1
- package/src/interfaces/web/src/components/files/FileBrowser.tsx +1 -1
- package/src/interfaces/web/src/components/files/FileTree.tsx +6 -4
- package/src/interfaces/web/src/components/files/FileViewer.tsx +9 -5
- package/src/interfaces/web/src/components/files/MarkdownPreview.tsx +45 -9
- package/src/interfaces/web/src/components/images/ImageDefaultsCard.tsx +93 -0
- package/src/interfaces/web/src/components/images/ImageProviderList.tsx +142 -0
- package/src/interfaces/web/src/components/images/ImageProviderModal.tsx +263 -0
- package/src/interfaces/web/src/components/images/ImageTestCard.tsx +142 -0
- package/src/interfaces/web/src/components/inbox/ChannelFilter.tsx +178 -0
- package/src/interfaces/web/src/components/inbox/InboxList.tsx +77 -81
- package/src/interfaces/web/src/components/inbox/InboxRowItem.tsx +140 -0
- package/src/interfaces/web/src/components/integrations/ComingSoonPlugin.tsx +2 -2
- package/src/interfaces/web/src/components/integrations/PluginConnect.tsx +208 -30
- package/src/interfaces/web/src/components/integrations/PluginToolsSection.tsx +1 -1
- package/src/interfaces/web/src/components/layout/ProjectAvatar.tsx +39 -24
- package/src/interfaces/web/src/components/layout/ProjectSidebar.tsx +253 -58
- package/src/interfaces/web/src/components/memory/MemoryBrowser.tsx +94 -47
- package/src/interfaces/web/src/components/routines/ExecutionsList.tsx +202 -90
- package/src/interfaces/web/src/components/routines/RoutineDetail.tsx +28 -6
- package/src/interfaces/web/src/components/routines/RoutineEditor.tsx +16 -5
- package/src/interfaces/web/src/components/routines/RoutineList.tsx +49 -9
- package/src/interfaces/web/src/components/routines/VarTextarea.tsx +1 -1
- package/src/interfaces/web/src/components/routines/runChat.ts +121 -0
- package/src/interfaces/web/src/components/sessions/SessionDetail.tsx +148 -0
- package/src/interfaces/web/src/components/sessions/SessionTerminal.tsx +98 -0
- package/src/interfaces/web/src/components/settings/AccessPanel.tsx +205 -0
- package/src/interfaces/web/src/components/settings/DefaultRouterCard.tsx +246 -101
- package/src/interfaces/web/src/components/settings/DesktopSettingsPanel.tsx +36 -2
- package/src/interfaces/web/src/components/settings/DevicesPanel.tsx +19 -6
- package/src/interfaces/web/src/components/settings/EmbedProviderList.tsx +274 -0
- package/src/interfaces/web/src/components/settings/EnginesPanel.tsx +26 -6
- package/src/interfaces/web/src/components/settings/MemoryPanel.tsx +118 -119
- package/src/interfaces/web/src/components/settings/NudgePanel.tsx +4 -3
- package/src/interfaces/web/src/components/settings/PairDeviceDialog.tsx +15 -4
- package/src/interfaces/web/src/components/settings/PanelPrefs.tsx +374 -0
- package/src/interfaces/web/src/components/settings/ProfilePanel.tsx +70 -2
- package/src/interfaces/web/src/components/settings/RoutingPanel.tsx +2 -1
- package/src/interfaces/web/src/components/settings/SkillsInspectorPanel.tsx +102 -43
- package/src/interfaces/web/src/components/settings/SkillsManager.tsx +76 -21
- package/src/interfaces/web/src/components/settings/SkillsSettings.tsx +10 -3
- package/src/interfaces/web/src/components/settings/SuperAgentPanel.tsx +8 -0
- package/src/interfaces/web/src/components/settings/TelegramChannelsPanel.tsx +11 -2
- package/src/interfaces/web/src/components/settings/TelegramContactsPanel.tsx +19 -8
- package/src/interfaces/web/src/components/settings/TelegramRolesPanel.tsx +12 -2
- package/src/interfaces/web/src/components/settings/WebPanel.tsx +22 -31
- package/src/interfaces/web/src/components/settings/providers/ProviderCard.tsx +15 -3
- package/src/interfaces/web/src/components/settings/providers/ProviderModal.tsx +97 -66
- package/src/interfaces/web/src/components/settings/providers/ProviderTestDialog.tsx +150 -0
- package/src/interfaces/web/src/components/settings/providers/typeStyles.ts +67 -25
- package/src/interfaces/web/src/components/settings/providers/types.ts +3 -0
- package/src/interfaces/web/src/components/tasks/TaskBoard.tsx +201 -0
- package/src/interfaces/web/src/components/tasks/TaskColumnsDialog.tsx +243 -0
- package/src/interfaces/web/src/components/tasks/TaskComments.tsx +167 -0
- package/src/interfaces/web/src/components/tasks/TaskDetail.tsx +335 -0
- package/src/interfaces/web/src/components/tasks/TaskFormDialog.tsx +406 -0
- package/src/interfaces/web/src/components/tasks/TaskList.tsx +258 -0
- package/src/interfaces/web/src/components/tasks/TaskSubtasks.tsx +126 -0
- package/src/interfaces/web/src/components/tasks/columns.ts +51 -0
- package/src/interfaces/web/src/components/tasks/taskStatus.tsx +159 -34
- package/src/interfaces/web/src/components/tasks/taskViewPrefs.ts +73 -0
- package/src/interfaces/web/src/components/tasks/useTaskColumns.ts +31 -0
- package/src/interfaces/web/src/components/ui/chat-input.tsx +136 -12
- package/src/interfaces/web/src/components/ui/context-menu.tsx +15 -198
- package/src/interfaces/web/src/components/ui/dialog.tsx +3 -2
- package/src/interfaces/web/src/components/ui/filter-chips.tsx +4 -0
- package/src/interfaces/web/src/components/ui/popover.tsx +14 -49
- package/src/interfaces/web/src/components/ui/sheet.tsx +2 -1
- package/src/interfaces/web/src/components/ui/spinner.tsx +2 -1
- package/src/interfaces/web/src/components/ui.tsx +62 -23
- package/src/interfaces/web/src/components/voice/VoiceProviderList.tsx +2 -1
- package/src/interfaces/web/src/components/voice/VoiceProviderModal.tsx +66 -8
- package/src/interfaces/web/src/components/voice/VoiceQvoxInstallCard.tsx +63 -0
- package/src/interfaces/web/src/components/voice/VoiceQvoxStatusCard.tsx +51 -0
- package/src/interfaces/web/src/components/voice/VoiceSttCard.tsx +4 -3
- package/src/interfaces/web/src/components/voice/VoiceTestCard.tsx +38 -4
- package/src/interfaces/web/src/constants/index.ts +1 -0
- package/src/interfaces/web/src/hooks/useChannelPrefs.ts +39 -0
- package/src/interfaces/web/src/hooks/useChat.ts +1092 -85
- package/src/interfaces/web/src/hooks/useChatActivity.ts +24 -0
- package/src/interfaces/web/src/hooks/useInbox.ts +26 -4
- package/src/interfaces/web/src/hooks/useLiveMessages.ts +16 -0
- package/src/interfaces/web/src/hooks/useOllamaModels.ts +79 -0
- package/src/interfaces/web/src/hooks/useRecorder.ts +198 -0
- package/src/interfaces/web/src/hooks/useTokenBootstrap.ts +23 -6
- package/src/interfaces/web/src/i18n/en.ts +832 -175
- package/src/interfaces/web/src/i18n/es.ts +841 -188
- package/src/interfaces/web/src/lib/api/agents.ts +23 -4
- package/src/interfaces/web/src/lib/api/code.ts +17 -0
- package/src/interfaces/web/src/lib/api/commitments.ts +7 -1
- package/src/interfaces/web/src/lib/api/conversations.ts +38 -11
- package/src/interfaces/web/src/lib/api/embeddings.ts +3 -0
- package/src/interfaces/web/src/lib/api/engines.ts +14 -0
- package/src/interfaces/web/src/lib/api/groups.ts +93 -0
- package/src/interfaces/web/src/lib/api/images.ts +193 -0
- package/src/interfaces/web/src/lib/api/inbox.ts +29 -5
- package/src/interfaces/web/src/lib/api/integrations.ts +9 -0
- package/src/interfaces/web/src/lib/api/media.ts +126 -0
- package/src/interfaces/web/src/lib/api/net.ts +44 -0
- package/src/interfaces/web/src/lib/api/profiles.ts +12 -0
- package/src/interfaces/web/src/lib/api/projects.ts +9 -1
- package/src/interfaces/web/src/lib/api/routines.ts +9 -1
- package/src/interfaces/web/src/lib/api/sessions.ts +18 -0
- package/src/interfaces/web/src/lib/api/skills.ts +8 -0
- package/src/interfaces/web/src/lib/api/super_agent.ts +3 -0
- package/src/interfaces/web/src/lib/api/tasks.ts +46 -6
- package/src/interfaces/web/src/lib/api/tools.ts +2 -0
- package/src/interfaces/web/src/lib/api/transcribe.ts +31 -0
- package/src/interfaces/web/src/lib/api/turns.ts +20 -0
- package/src/interfaces/web/src/lib/api/voice.ts +72 -2
- package/src/interfaces/web/src/lib/api.ts +3 -0
- package/src/interfaces/web/src/lib/channels.ts +214 -0
- package/src/interfaces/web/src/lib/chat-activity.ts +175 -0
- package/src/interfaces/web/src/lib/chat-prefs.ts +48 -0
- package/src/interfaces/web/src/lib/code-context.ts +0 -2
- package/src/interfaces/web/src/lib/http.ts +51 -17
- package/src/interfaces/web/src/lib/inbox-selection.ts +29 -0
- package/src/interfaces/web/src/lib/live.ts +252 -0
- package/src/interfaces/web/src/lib/net.ts +211 -0
- package/src/interfaces/web/src/lib/notify.ts +331 -0
- package/src/interfaces/web/src/lib/projectNav.ts +40 -0
- package/src/interfaces/web/src/lib/pwa.ts +115 -0
- package/src/interfaces/web/src/lib/qvox.ts +24 -0
- package/src/interfaces/web/src/lib/slug.ts +3 -0
- package/src/interfaces/web/src/lib/tone.ts +150 -0
- package/src/interfaces/web/src/main.tsx +15 -4
- package/src/interfaces/web/src/screens/ApxAdminScreen.tsx +33 -11
- package/src/interfaces/web/src/screens/InboxScreen.tsx +126 -71
- package/src/interfaces/web/src/screens/ProjectScreen.tsx +8 -4
- package/src/interfaces/web/src/screens/SettingsScreen.tsx +7 -4
- package/src/interfaces/web/src/screens/base/AgentDefaultsTab.tsx +30 -9
- package/src/interfaces/web/src/screens/base/CommitmentsTab.tsx +150 -168
- package/src/interfaces/web/src/screens/base/LogsTab.tsx +8 -7
- package/src/interfaces/web/src/screens/base/SessionsTab.tsx +99 -37
- package/src/interfaces/web/src/screens/base/WorkspacesTab.tsx +1 -1
- package/src/interfaces/web/src/screens/mobile/MobileChat.tsx +85 -0
- package/src/interfaces/web/src/screens/mobile/MobileChatList.tsx +244 -0
- package/src/interfaces/web/src/screens/mobile/MobileCommitments.tsx +350 -0
- package/src/interfaces/web/src/screens/mobile/MobileScreen.tsx +138 -0
- package/src/interfaces/web/src/screens/mobile/MobileTabBar.tsx +105 -0
- package/src/interfaces/web/src/screens/mobile/MobileTasks.tsx +407 -0
- package/src/interfaces/web/src/screens/mobile/NewChatSheet.tsx +313 -0
- package/src/interfaces/web/src/screens/mobile/mobileList.tsx +194 -0
- package/src/interfaces/web/src/screens/mobile/routes.ts +239 -0
- package/src/interfaces/web/src/screens/modules/CodeScreen.tsx +135 -64
- package/src/interfaces/web/src/screens/modules/DeckScreen.tsx +0 -1
- package/src/interfaces/web/src/screens/modules/ImagesScreen.tsx +172 -0
- package/src/interfaces/web/src/screens/modules/VoiceScreen.tsx +36 -4
- package/src/interfaces/web/src/screens/project/AgentBrainGraph.tsx +117 -30
- package/src/interfaces/web/src/screens/project/AgentDetailScreen.tsx +537 -92
- package/src/interfaces/web/src/screens/project/AgentsTab.tsx +344 -93
- package/src/interfaces/web/src/screens/project/ArtifactsTab.tsx +1 -1
- package/src/interfaces/web/src/screens/project/ChatTab.tsx +1160 -94
- package/src/interfaces/web/src/screens/project/IntegrationsTab.tsx +3 -2
- package/src/interfaces/web/src/screens/project/McpsTab.tsx +62 -14
- package/src/interfaces/web/src/screens/project/Overview.tsx +36 -15
- package/src/interfaces/web/src/screens/project/RoutinesTab.tsx +93 -8
- package/src/interfaces/web/src/screens/project/SkillsTab.tsx +4 -1
- package/src/interfaces/web/src/screens/project/StructureTab.tsx +5 -4
- package/src/interfaces/web/src/screens/project/TasksTab.tsx +351 -129
- package/src/interfaces/web/src/screens/project/VarsTab.tsx +17 -5
- package/src/interfaces/web/src/styles.css +106 -31
- package/src/interfaces/web/src/types/daemon.ts +246 -2
- package/src/interfaces/web/src/vite-env.d.ts +20 -0
- package/src/interfaces/tui/plugin/command-shim.ts +0 -109
- package/src/interfaces/web/components.json +0 -25
- package/src/interfaces/web/dist/assets/index-CvEoGtTf.js +0 -849
- package/src/interfaces/web/dist/assets/index-CvEoGtTf.js.map +0 -1
- package/src/interfaces/web/dist/assets/index-DzBBXFaO.css +0 -1
- package/src/interfaces/web/src/components/tasks/TaskDetailPanel.tsx +0 -142
- package/src/interfaces/web/src/components/ui/accordion.tsx +0 -72
- package/src/interfaces/web/src/components/ui/alert-dialog.tsx +0 -187
- package/src/interfaces/web/src/components/ui/alert.tsx +0 -76
- package/src/interfaces/web/src/components/ui/aspect-ratio.tsx +0 -22
- package/src/interfaces/web/src/components/ui/avatar.tsx +0 -107
- package/src/interfaces/web/src/components/ui/breadcrumb.tsx +0 -125
- package/src/interfaces/web/src/components/ui/button-group.tsx +0 -87
- package/src/interfaces/web/src/components/ui/calendar.tsx +0 -221
- package/src/interfaces/web/src/components/ui/card.tsx +0 -103
- package/src/interfaces/web/src/components/ui/carousel.tsx +0 -242
- package/src/interfaces/web/src/components/ui/chart.tsx +0 -371
- package/src/interfaces/web/src/components/ui/checkbox.tsx +0 -29
- package/src/interfaces/web/src/components/ui/collapsible.tsx +0 -19
- package/src/interfaces/web/src/components/ui/combobox.tsx +0 -295
- package/src/interfaces/web/src/components/ui/command.tsx +0 -196
- package/src/interfaces/web/src/components/ui/direction.tsx +0 -4
- package/src/interfaces/web/src/components/ui/drawer.tsx +0 -134
- package/src/interfaces/web/src/components/ui/empty.tsx +0 -104
- package/src/interfaces/web/src/components/ui/field.tsx +0 -236
- package/src/interfaces/web/src/components/ui/hover-card.tsx +0 -51
- package/src/interfaces/web/src/components/ui/input-otp.tsx +0 -85
- package/src/interfaces/web/src/components/ui/item.tsx +0 -201
- package/src/interfaces/web/src/components/ui/menubar.tsx +0 -280
- package/src/interfaces/web/src/components/ui/native-select.tsx +0 -61
- package/src/interfaces/web/src/components/ui/navigation-menu.tsx +0 -168
- package/src/interfaces/web/src/components/ui/pagination.tsx +0 -130
- package/src/interfaces/web/src/components/ui/progress.tsx +0 -83
- package/src/interfaces/web/src/components/ui/radio-group.tsx +0 -36
- package/src/interfaces/web/src/components/ui/resizable.tsx +0 -50
- package/src/interfaces/web/src/components/ui/scroll-area.tsx +0 -53
- package/src/interfaces/web/src/components/ui/sidebar.tsx +0 -726
- package/src/interfaces/web/src/components/ui/slider.tsx +0 -52
- package/src/interfaces/web/src/components/ui/sonner.tsx +0 -49
- package/src/interfaces/web/src/components/ui/table.tsx +0 -116
- package/src/interfaces/web/src/components/ui/toggle-group.tsx +0 -87
- package/src/interfaces/web/src/components/ui/toggle.tsx +0 -45
- package/src/interfaces/web/src/hooks/use-mobile.ts +0 -19
- package/src/interfaces/web/src/screens/base/GlobalTasksTab.tsx +0 -161
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: apx-commitment
|
|
3
|
+
description: Promises made to a named person — counterparty, the date you gave them, the channel you said it on. Sibling of apx-task, deliberately NOT the same thing. Load whenever someone else is waiting on something. Triggers: 'I told X I would…', 'le dije a X que…', 'I promised…', 'quedé en…', 'me comprometí a…', 'what do I owe X', 'qué le debo a X', 'overdue promises', 'mark it kept', 'push the date'.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# apx-commitment
|
|
7
|
+
|
|
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
|
+
|
|
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
|
+
|
|
12
|
+
## When it is a commitment and not a task
|
|
13
|
+
|
|
14
|
+
The test is one question: **is a named person waiting?**
|
|
15
|
+
|
|
16
|
+
| What was said | Which | Why |
|
|
17
|
+
|---|---|---|
|
|
18
|
+
| "I have to send the quote" | task | Nobody is named. |
|
|
19
|
+
| "I told Ana I'd send her the quote Friday" | commitment | Ana is waiting, and Friday is a date you gave her. |
|
|
20
|
+
| "we should refactor the parser" | task | Internal work. |
|
|
21
|
+
| "I promised the client a demo next week" | commitment | The client will notice if it slips. |
|
|
22
|
+
| "remind me to review the PR" | task | A reminder to yourself. |
|
|
23
|
+
| "I said I'd get back to Bruno today" | commitment | Bruno is expecting it. |
|
|
24
|
+
|
|
25
|
+
Undated is still a commitment. "I promised Ana the quote, no date yet" → record it with no `due`. Refusing to record it because a date is missing means the promise goes unrecorded, which is strictly worse.
|
|
26
|
+
|
|
27
|
+
## Catching them in conversation
|
|
28
|
+
|
|
29
|
+
This is the main way they get recorded — nobody opens a form to log a promise. Listen for a name plus an obligation, in either language:
|
|
30
|
+
|
|
31
|
+
- "le dije a Ana que el viernes le mando el presupuesto"
|
|
32
|
+
- "quedé en pasarle el informe a Bruno"
|
|
33
|
+
- "me comprometí con el cliente a tener la demo el 10"
|
|
34
|
+
- "I told the team I'd have the migration plan by Thursday"
|
|
35
|
+
|
|
36
|
+
Record it and say in ONE line what you filed and for whom. Do not ask permission to record something you clearly heard — asking makes recording cost more than not recording, and then nothing gets recorded.
|
|
37
|
+
|
|
38
|
+
Resolve a loose date to a real one ("Friday" → that date) and say which date you used, so a wrong guess is visible and correctable.
|
|
39
|
+
|
|
40
|
+
## Super-agent tools
|
|
41
|
+
|
|
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
|
+
|
|
44
|
+
```json
|
|
45
|
+
{ "name": "record_commitment",
|
|
46
|
+
"arguments": { "project": "acme", "counterparty": "Ana",
|
|
47
|
+
"body": "send the revised quote", "due": "2026-05-30",
|
|
48
|
+
"origin_channel": "telegram" } }
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
`list_commitments` searches **every project** unless you pass one. Omit `project` for "what do I owe people" — that question does not respect a repo boundary.
|
|
52
|
+
|
|
53
|
+
```json
|
|
54
|
+
{ "name": "list_commitments", "arguments": { "overdue": true } }
|
|
55
|
+
{ "name": "list_commitments", "arguments": { "counterparty": "ana" } }
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
Counterparty matching is case-insensitive substring, so `"ana"` finds "Ana Pérez". It is free text, not a contact record — write the name the way the owner says it.
|
|
59
|
+
|
|
60
|
+
## Concrete CLI calls
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
# Record
|
|
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
|
+
|
|
67
|
+
# Read
|
|
68
|
+
apx commitment list --all # every project, soonest deadline first
|
|
69
|
+
apx commitment list --all --overdue # what you owe and already missed
|
|
70
|
+
apx commitment list --to Ana --state all # everything ever promised to her
|
|
71
|
+
apx commitment show c_abc123 --project acme
|
|
72
|
+
|
|
73
|
+
# Close it out
|
|
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"
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
## The ways one ends
|
|
83
|
+
|
|
84
|
+
| Verb | Means | State after |
|
|
85
|
+
|---|---|---|
|
|
86
|
+
| `kept` | Delivered. | `kept` |
|
|
87
|
+
| `missed` | The date passed and it did not happen. | `missed` |
|
|
88
|
+
| `drop` | Filed by mistake — nobody was ever waiting. | `dropped` |
|
|
89
|
+
| `renegotiate` | A NEW date, agreed with them. | back to `open` |
|
|
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
|
+
|
|
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.
|
|
97
|
+
|
|
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.
|
|
99
|
+
|
|
100
|
+
Never mark `kept` on the owner's behalf. If a commitment came due, ASK whether it was kept — you cannot see whether the email was sent.
|
|
101
|
+
|
|
102
|
+
## Where they show up on their own
|
|
103
|
+
|
|
104
|
+
- **The morning anchor leads with them.** Overdue promises go first, named as a promise to a person, never folded into the task list.
|
|
105
|
+
- **`overdue_commitment` is a CRITICAL signal** (`core/routines/signals.js`), the only detector at that severity. It is the one thing allowed to cross a spent interruption budget.
|
|
106
|
+
- **`commitment_due` fires inside the lead window** (default 48h) — a warning that arrives in time is worth more than one that arrives after.
|
|
107
|
+
|
|
108
|
+
## ID format
|
|
109
|
+
|
|
110
|
+
`c_` + 6 base36 chars. Prefix matching at ≥3 chars when unique, same as tasks.
|
|
111
|
+
|
|
112
|
+
## Endpoint surface
|
|
113
|
+
|
|
114
|
+
```
|
|
115
|
+
GET /api/commitments cross-project; ?state=open|kept|missed|all
|
|
116
|
+
&counterparty=X&overdue=1&due_before=ISO
|
|
117
|
+
&sort=due|newest&limit=N&offset=N
|
|
118
|
+
GET /api/projects/:pid/commitments same filters, one project
|
|
119
|
+
POST /api/projects/:pid/commitments { counterparty, body, due?, origin_channel?, … }
|
|
120
|
+
GET /api/projects/:pid/commitments/:id
|
|
121
|
+
PATCH /api/projects/:pid/commitments/:id { patch: {...} }
|
|
122
|
+
POST /api/projects/:pid/commitments/:id/kept { note? }
|
|
123
|
+
POST /api/projects/:pid/commitments/:id/missed { note? }
|
|
124
|
+
POST /api/projects/:pid/commitments/:id/drop { note? } filed by mistake
|
|
125
|
+
POST /api/projects/:pid/commitments/:id/renegotiate { due, note? }
|
|
126
|
+
GET /api/projects/:pid/commitments-summary → { open, kept, missed, dropped, overdue, total }
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
## Don't
|
|
130
|
+
|
|
131
|
+
- **Don't record a task as a commitment to make it feel urgent.** The whole value is that a commitment means someone is waiting. Inflate the type and the morning anchor becomes noise.
|
|
132
|
+
- **Don't use tags on tasks for this.** It was considered and rejected: the day you want "everything I owe Ana" you would be substring-matching titles, and `kept` vs `renegotiated` — the distinction that tells you whether a relationship is fine — has nowhere to live.
|
|
133
|
+
- **Don't invent a counterparty.** If you genuinely cannot tell who is waiting, it is a task.
|
|
134
|
+
- **Don't renegotiate without a date.** The CLI refuses it: a promise with no new date is a promise that vanished.
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: apx-image
|
|
3
|
+
scope: optional
|
|
4
|
+
description: Generate images from a text prompt with `apx image`, routed to a local, LAN, or cloud diffusion server. Load when asked to draw, render, illustrate, or make a picture, logo sketch, thumbnail, or cover; to pick between image engines; to set image size, steps, guidance, seed, or a negative prompt; or when an image engine is unreachable or ignoring options.
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# apx-image
|
|
8
|
+
|
|
9
|
+
`apx image` turns a prompt into a file. It is a thin CLI over the daemon's `POST /api/images/generate`, which routes to whichever engine is configured and reachable — so the same command works against a diffusion server on this machine, a box on the network, or a cloud key, without the caller knowing which.
|
|
10
|
+
|
|
11
|
+
## Usage
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
apx image "a green origami fox on a white background"
|
|
15
|
+
apx image "portrait of a fox" --size 768x512 --steps 8 --cfg 1.0 --out fox.png
|
|
16
|
+
apx image "a logo sketch" --provider a1111 --seed 123 --json
|
|
17
|
+
apx image "cover art" --negative "text, watermark" --count 2 --open
|
|
18
|
+
apx image providers # what is configured and reachable
|
|
19
|
+
apx image capabilities --provider sdcpp # models, samplers, schedulers
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Without `--out`, the file lands in `~/.apx/images/<date>/` and the path is printed on stdout. **Nothing is written into a project checkout unless `--out` says so.**
|
|
23
|
+
|
|
24
|
+
## Engines
|
|
25
|
+
|
|
26
|
+
| id | Dialect | Notes |
|
|
27
|
+
|---|---|---|
|
|
28
|
+
| `a1111` | `POST /sdapi/v1/txt2img`, synchronous | The universal one: AUTOMATIC1111, Forge, SD.Next, Draw Things on macOS, stable-diffusion.cpp. Carries every sampling knob. |
|
|
29
|
+
| `sdcpp` | `POST /sdcpp/v1/img_gen` + job polling | stable-diffusion.cpp's native queue. The socket closes immediately and the job is polled, so a queued render never looks like a hung request. One checkpoint per server. |
|
|
30
|
+
| `openai` | `POST /v1/images/generations` | Cloud (`gpt-image-1` / `dall-e-3`), or any OpenAI-compatible server when `base_url` is set. |
|
|
31
|
+
| `mock` | none | Offline test engine, always last and always available. |
|
|
32
|
+
|
|
33
|
+
Add any number of extra endpoints under `images.custom.<slug>`, each naming the dialect it speaks in `kind`. They surface as `custom:<slug>`.
|
|
34
|
+
|
|
35
|
+
## Routing
|
|
36
|
+
|
|
37
|
+
Engines are tried in `images.order` and the first reachable one draws — the same chain/single model as TTS. Set `images.mode` to `single` plus `images.provider` to pin one. `--provider` overrides the routing for one call. A configured but unreachable server is skipped rather than failing the call.
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
apx config set --global images.a1111.base_url http://127.0.0.1:7860
|
|
41
|
+
apx config set --global images.a1111.defaults '{"steps":8,"cfg_scale":1}'
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Settings live in `~/.apx/config.json` under `images.*`, and the same settings have a screen at **Settings → Images** in the web panel.
|
|
45
|
+
|
|
46
|
+
## Options resolve in four layers
|
|
47
|
+
|
|
48
|
+
`images.defaults` → `images.<engine>.defaults` → the call. Later wins. Steps and guidance belong to the **engine**, not to the prompt: a turbo checkpoint wants about 8 steps at cfg 1, a standard one 20 at cfg 7, and putting that in the engine's block means no caller has to remember it.
|
|
49
|
+
|
|
50
|
+
## Not every engine honors every option
|
|
51
|
+
|
|
52
|
+
The OpenAI dialect has no steps, guidance, sampler, scheduler, seed or negative prompt. stable-diffusion.cpp hosts one checkpoint and cannot switch models. Whatever an engine cannot honor is **reported** after the run (`ignored` in `--json`) instead of being silently dropped — so a picture that came out wrong can be traced to the dialect rather than the prompt.
|
|
53
|
+
|
|
54
|
+
## Don't
|
|
55
|
+
|
|
56
|
+
- Don't call a diffusion server directly with `curl` when an engine is configured — routing, defaults, the seed report and the ignored-options report all live behind `apx image`, and a raw call has none of them.
|
|
57
|
+
- Don't reach for Ollama: it serves language and vision models and cannot generate images at all. On macOS point the `a1111` engine at Draw Things' HTTP API, or any local A1111-compatible server, instead.
|
|
58
|
+
- Don't set steps or guidance in `images.defaults` when several engines are configured — they belong to `images.<engine>.defaults`, because the right value depends on the checkpoint that server loaded.
|
|
59
|
+
- Don't ask the `openai` engine for a negative prompt or a fixed seed and assume it took: check `ignored`.
|
|
60
|
+
- Don't write generated images into a repository by default — leave them in `~/.apx/images/` and pass `--out` only when a file is genuinely wanted on disk somewhere.
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: apx-integrations
|
|
3
|
+
description: "APX connectors (integrations/plugins) — Asana, Google Calendar, GitHub, Obsidian, WhatsApp. Load when a connector tool says \"not connected\" / \"read-only\" / \"not authorized\", or the user wants to connect/configure/check a plugin. NOT the same as MCP servers (apx-mcp) or the Telegram channel (apx-telegram). Triggers: 'connect Asana/Calendar/GitHub', 'why can't you see my calendar', 'integration not connected', 'plugins tab', 'read-only calendar'."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# apx-integrations
|
|
7
|
+
|
|
8
|
+
A **connector** (a.k.a. integration / plugin) is a stored, per-project connection to an external service — Asana, Google Calendar, GitHub, Obsidian. It gives the agent's tools live access to that service. It is a **different mechanism** from an MCP server (`apx-mcp`) and from the Telegram channel (`apx-telegram`, a channel, not a plugin).
|
|
9
|
+
|
|
10
|
+
Catalog source of truth: `src/core/integrations/catalog.js`. Adding a plugin = drop a module in `plugins/` + register it in `PLUGIN_SERVICES` — no route changes.
|
|
11
|
+
|
|
12
|
+
## The catalog
|
|
13
|
+
|
|
14
|
+
| slug | name | auth | State |
|
|
15
|
+
|---|---|---|---|
|
|
16
|
+
| `asana` | Asana | token (PAT) | ✅ implemented |
|
|
17
|
+
| `calendar` | Google Calendar | **user OAuth** | ✅ implemented |
|
|
18
|
+
| `github` | GitHub | token | ✅ implemented |
|
|
19
|
+
| `obsidian` | Obsidian | path (local Vault) | ✅ implemented — has a CLI |
|
|
20
|
+
| `whatsapp` | WhatsApp | QR pairing | ⏳ `coming_soon` — do not attempt to connect |
|
|
21
|
+
|
|
22
|
+
## The one rule: connecting happens OUT OF BAND
|
|
23
|
+
|
|
24
|
+
**The agent cannot connect a plugin itself.** It cannot paste a token, pick a Vault folder, or complete an OAuth consent screen. Connection is done by the user in the **web panel → Integrations → Plugins** (the generic `PluginConnect` form). Your job is to *guide the user there and then re-check*, never to invent a connect command.
|
|
25
|
+
|
|
26
|
+
- The **only** connector with a CLI is Obsidian: `apx obsidian …` (a thin client over the same daemon routes — configure/validate/status/sync/remove).
|
|
27
|
+
- There is **no** `apx integrations` / `apx plugins connect` command. ⚠️ `apx plugins` is a **different, unrelated** thing (it lists *daemon* plugins at `/api/plugins`) — don't confuse it for connectors.
|
|
28
|
+
|
|
29
|
+
## Reading the tool errors (this is the main reason you're here)
|
|
30
|
+
|
|
31
|
+
The connector-backed tools (`calendar_*`, `asana_*`, `github_*`, `obsidian_*`) throw errors written to be relayed verbatim-ish to the user. Recognize them and tell the user the exact next step:
|
|
32
|
+
|
|
33
|
+
| Error says… | What it means | Tell the user |
|
|
34
|
+
|---|---|---|
|
|
35
|
+
| "…is not connected. Ask the user to connect it in the web panel → Integrations → Plugins → X" | No usable record for this project | Open the panel, connect X. |
|
|
36
|
+
| "The calendar isn't authorized yet." | Configured but no `refresh_token` (OAuth not completed) | Finish the "Connect with Google" step in the panel. |
|
|
37
|
+
| "connected read-only … enable write access" | Calendar `write_access: false` | Toggle write access in the panel, then retry. |
|
|
38
|
+
| "No Asana workspace selected." | Token valid, workspace not chosen | Pick the workspace in the panel. |
|
|
39
|
+
|
|
40
|
+
Don't retry the tool in a loop against one of these — the fix is a human action in the panel.
|
|
41
|
+
|
|
42
|
+
## Scope precedence: project → default(global)
|
|
43
|
+
|
|
44
|
+
`resolveIntegration()` (`src/core/integrations/store.js`) resolves per project: the project's **own** enabled+active record wins; otherwise the **default** project's record is inherited. So a connector configured once on the `default` project works for every project that hasn't overridden it — the same "global = default project" pattern as MCPs (`apx-mcp`). Records live in the per-project integrations store (like tasks); the API redacts secrets in responses.
|
|
45
|
+
|
|
46
|
+
## Google Calendar specifics (user OAuth, not a service account)
|
|
47
|
+
|
|
48
|
+
Calendar acts **as the user** (invites + Google Meet), so it uses OAuth, not a key:
|
|
49
|
+
|
|
50
|
+
1. User creates a Google Cloud OAuth app and enters `client_id` + `client_secret` in the panel.
|
|
51
|
+
2. Panel runs the consent flow (`action: authorize` → Google → redirect back to `/api/integrations/oauth/callback`), which stores a `refresh_token`. APX caches short-lived access tokens from it.
|
|
52
|
+
3. `write_access` toggle (default on) = create/edit events, invites, Meet. Off = read-only. `meet` toggle adds a Meet link on create.
|
|
53
|
+
4. The calendar is always the account's own `primary` — there is nothing to pick.
|
|
54
|
+
|
|
55
|
+
Tools: `calendar_list_events`, `calendar_find_slot`, `calendar_create_event` (invitees + Meet), `calendar_update_event`. See `plugins/calendar.js` + `plugins/_google-oauth.js`.
|
|
56
|
+
|
|
57
|
+
## Daemon API (for reference — the panel and `apx obsidian` use these)
|
|
58
|
+
|
|
59
|
+
```
|
|
60
|
+
GET /api/projects/:pid/integrations # configured, this project (+ scope)
|
|
61
|
+
GET /api/projects/:pid/integrations/catalog # what's available
|
|
62
|
+
GET /api/projects/:pid/integrations/:slug
|
|
63
|
+
POST /api/projects/:pid/integrations/:slug/configure # save creds/config
|
|
64
|
+
POST /api/projects/:pid/integrations/:slug/validate # verify against the provider, persist result
|
|
65
|
+
POST /api/projects/:pid/integrations/:slug/action/:action # plugin action (asana list workspaces, calendar authorize)
|
|
66
|
+
POST /api/projects/:pid/integrations/:slug/deactivate # disable, keep creds
|
|
67
|
+
DELETE /api/projects/:pid/integrations/:slug # remove entirely
|
|
68
|
+
GET /api/integrations/oauth/callback # OAuth redirect target (signed state, no bearer)
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
`?scope=project|global` selects which store the write lands in.
|
|
72
|
+
|
|
73
|
+
## Don't
|
|
74
|
+
|
|
75
|
+
- Don't tell the user to "run a command" to connect a token/OAuth plugin — there's a CLI only for Obsidian. Everything else is the web panel.
|
|
76
|
+
- Don't confuse `apx plugins` (daemon plugins list) with connectors. Different subsystem.
|
|
77
|
+
- Don't treat a connector as an MCP. If the user wants to *register an MCP server*, that's `apx-mcp`.
|
|
78
|
+
- Don't try to connect `whatsapp` — it's `coming_soon` (needs a QR-pairing bridge APX doesn't ship yet).
|
|
79
|
+
This is the CONNECTOR, not the `whatsapp` **channel**: a phone-side bridge already posts incoming
|
|
80
|
+
WhatsApp messages to the super-agent with `channel: "whatsapp"`, and that works. Never answer a
|
|
81
|
+
message that arrived on it with "WhatsApp is not supported yet".
|
|
82
|
+
- Don't retry a tool after a "not connected / read-only / not authorized" error — surface the panel step and stop.
|
|
@@ -13,24 +13,28 @@ APX exposes MCP servers via three scopes; resolution priority **runtime > shared
|
|
|
13
13
|
| `runtime` | `~/.apx/projects/<apxId>/mcps.json` (chmod 0600) | no | yes | Per-project — tokens, machine-specific endpoints |
|
|
14
14
|
| `global` | `~/.apx/mcps.json` | n/a | yes | Machine-wide, not tied to a project |
|
|
15
15
|
|
|
16
|
+
## Super-agent tool
|
|
17
|
+
|
|
18
|
+
The super-agent registers an MCP with the **`add_mcp`** tool (name + `command`/`args`/`env` for stdio, or `url`/`headers` for http; `scope` = runtime | shared | global, default runtime) — no shelling to `apx mcp add`. Then `list_mcp_tools` to see what it exposes and `call_mcp` to run one. Secrets go in `runtime`/`global` scope, never `shared` (committed).
|
|
19
|
+
|
|
16
20
|
## Concrete CLI calls
|
|
17
21
|
|
|
18
22
|
```bash
|
|
19
23
|
# List (defaults to all scopes)
|
|
20
|
-
apx mcp list --project
|
|
21
|
-
apx mcp list --scope runtime --project
|
|
22
|
-
apx mcp list --scope shared --project
|
|
24
|
+
apx mcp list --project acme
|
|
25
|
+
apx mcp list --scope runtime --project acme
|
|
26
|
+
apx mcp list --scope shared --project acme
|
|
23
27
|
apx mcp list --scope global
|
|
24
28
|
|
|
25
29
|
# Inspect sources and conflicts
|
|
26
|
-
apx mcp check --project
|
|
30
|
+
apx mcp check --project acme
|
|
27
31
|
|
|
28
32
|
# Add — shared (commit to repo)
|
|
29
|
-
apx mcp add filesystem --command npx --project
|
|
33
|
+
apx mcp add filesystem --command npx --project acme \
|
|
30
34
|
-- -y @modelcontextprotocol/server-filesystem .
|
|
31
35
|
|
|
32
36
|
# Add — runtime (per-project, local, secrets safe)
|
|
33
|
-
apx mcp add github --scope runtime --project
|
|
37
|
+
apx mcp add github --scope runtime --project acme \
|
|
34
38
|
--command npx --env GITHUB_TOKEN=ghp_xxx \
|
|
35
39
|
-- -y @modelcontextprotocol/server-github
|
|
36
40
|
|
|
@@ -40,12 +44,12 @@ apx mcp add brave --scope global \
|
|
|
40
44
|
-- -y @modelcontextprotocol/server-brave-search
|
|
41
45
|
|
|
42
46
|
# Remove (pass --scope when not in default: shared inside APC project, else global)
|
|
43
|
-
apx mcp remove filesystem --project
|
|
44
|
-
apx mcp remove github --scope runtime --project
|
|
47
|
+
apx mcp remove filesystem --project acme
|
|
48
|
+
apx mcp remove github --scope runtime --project acme
|
|
45
49
|
|
|
46
50
|
# Toggle (defaults to owning scope)
|
|
47
|
-
apx mcp enable filesystem --project
|
|
48
|
-
apx mcp disable filesystem --project
|
|
51
|
+
apx mcp enable filesystem --project acme
|
|
52
|
+
apx mcp disable filesystem --project acme
|
|
49
53
|
|
|
50
54
|
# Discover tools — list catalog, then inspect one tool's schema
|
|
51
55
|
apx mcp tools filesystem # table: tool name + description
|
|
@@ -66,20 +70,47 @@ Default if unclear: `shared` inside an APC project, `global` outside.
|
|
|
66
70
|
|
|
67
71
|
## Command shapes by transport
|
|
68
72
|
|
|
73
|
+
Two transports. `--command` = local process (stdio), `--url` = remote endpoint (http).
|
|
74
|
+
There is no third option, and no flag outside this list — if a shape isn't here,
|
|
75
|
+
run `apx help mcp add` instead of guessing.
|
|
76
|
+
|
|
69
77
|
```bash
|
|
70
|
-
# stdio MCP
|
|
78
|
+
# stdio MCP — a local process (npx, uvx, node, python)
|
|
71
79
|
apx mcp add <name> --command npx -- -y <package-or-flag-list>
|
|
72
80
|
apx mcp add <name> --command uvx -- <python-cli-name>
|
|
73
81
|
apx mcp add <name> --command python -- /abs/path/to/server.py
|
|
74
82
|
|
|
75
|
-
#
|
|
83
|
+
# stdio env vars (one --env per var)
|
|
76
84
|
apx mcp add <name> --command npx \
|
|
77
85
|
--env GITHUB_TOKEN=ghp_xxx \
|
|
78
86
|
--env GITHUB_OWNER=manuel \
|
|
79
87
|
-- -y @modelcontextprotocol/server-github
|
|
88
|
+
|
|
89
|
+
# http MCP — a remote streamable-HTTP endpoint. No command, no npx, no install.
|
|
90
|
+
apx mcp add <name> --url https://mcp.example.com/mcp --scope runtime
|
|
91
|
+
|
|
92
|
+
# http with auth headers (repeatable; "Name: value" or Name=value both parse)
|
|
93
|
+
apx mcp add <name> --url https://mcp.example.com/mcp --scope runtime \
|
|
94
|
+
--header "Authorization: Bearer $TOKEN" \
|
|
95
|
+
--header "X-Workspace: acme"
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
Everything after `--` is forwarded verbatim as args to a stdio command. Quote carefully.
|
|
99
|
+
`--env` and `--` args are stdio-only; `--header` is http-only — mixing them errors.
|
|
100
|
+
|
|
101
|
+
Remote servers almost always carry a token, so they belong in `--scope runtime`
|
|
102
|
+
(chmod 0600, never committed). Read the token from the environment rather than
|
|
103
|
+
pasting it: `--header "Authorization: Bearer $TOKEN"`.
|
|
104
|
+
|
|
105
|
+
## After adding: prove it works
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
apx mcp tools <name> # spawns/connects and lists tools — this is the real check
|
|
109
|
+
apx mcp logs <name> # if the above is empty or errors: request/response log
|
|
80
110
|
```
|
|
81
111
|
|
|
82
|
-
|
|
112
|
+
`apx mcp add` only writes JSON — it never contacts the server. An MCP that "was
|
|
113
|
+
added fine" but has no tools is a failed connection, not a successful install.
|
|
83
114
|
|
|
84
115
|
## Anti-examples
|
|
85
116
|
|
|
@@ -99,7 +130,7 @@ apx mcp remove github # errors if github lives in runtime
|
|
|
99
130
|
## Debugging
|
|
100
131
|
|
|
101
132
|
```bash
|
|
102
|
-
apx mcp check --project
|
|
133
|
+
apx mcp check --project acme # scopes seen + which files exist
|
|
103
134
|
apx mcp tools <name> # spawn server + list its tools (proves init works)
|
|
104
135
|
apx mcp logs <name> # spawn/init event log + stderr tail
|
|
105
136
|
apx mcp run <name> <tool> '{...}' # call a tool for real
|
|
@@ -54,7 +54,7 @@ pip install fastmcp
|
|
|
54
54
|
# or: uv tool install fastmcp
|
|
55
55
|
|
|
56
56
|
apx mcp add my-server \
|
|
57
|
-
--command uv --project
|
|
57
|
+
--command uv --project acme \
|
|
58
58
|
-- run python /abs/path/my_server.py
|
|
59
59
|
```
|
|
60
60
|
|
|
@@ -106,7 +106,7 @@ await server.connect(new StdioServerTransport());
|
|
|
106
106
|
|
|
107
107
|
```bash
|
|
108
108
|
apx mcp add my-server \
|
|
109
|
-
--command npx --project
|
|
109
|
+
--command npx --project acme \
|
|
110
110
|
-- -y my-server-package
|
|
111
111
|
```
|
|
112
112
|
|
|
@@ -122,7 +122,7 @@ apx mcp add my-server \
|
|
|
122
122
|
|
|
123
123
|
```bash
|
|
124
124
|
apx mcp add github \
|
|
125
|
-
--scope runtime --project
|
|
125
|
+
--scope runtime --project acme \
|
|
126
126
|
--command npx \
|
|
127
127
|
--env GITHUB_TOKEN=ghp_xxx \
|
|
128
128
|
--env GITHUB_OWNER=manuel \
|
|
@@ -165,7 +165,7 @@ apx mcp logs my-server
|
|
|
165
165
|
apx log -f
|
|
166
166
|
|
|
167
167
|
# Scopes / files / env APX sees
|
|
168
|
-
apx mcp check --project
|
|
168
|
+
apx mcp check --project acme
|
|
169
169
|
```
|
|
170
170
|
|
|
171
171
|
## Don't
|
|
@@ -33,11 +33,13 @@ apx profile install secretary # a bundled id
|
|
|
33
33
|
apx profile install ./my-profile # a local package directory
|
|
34
34
|
apx profile use secretary # activates + installs its routines
|
|
35
35
|
apx profile use tutor --force # replace whatever is active
|
|
36
|
+
apx profile sync # re-read the active package from disk (after an APX update)
|
|
36
37
|
|
|
37
38
|
# Configure — this is where white-label happens
|
|
38
39
|
apx profile config # show current settings
|
|
39
|
-
apx profile config --set
|
|
40
|
+
apx profile config --set day_open_schedule="30 8 * * 1-5"
|
|
40
41
|
apx profile config --set nudge_budget_per_day=3 --set quiet_hours=22:00-07:30
|
|
42
|
+
apx profile config --set watch_schedule="0 */2 * * *" --set formality=vos
|
|
41
43
|
apx profile config --interactive # walk the whole schema
|
|
42
44
|
|
|
43
45
|
# Health and removal
|
|
@@ -96,6 +98,25 @@ settings, not core behaviour. If the answer is "it shouldn't have", the fix is u
|
|
|
96
98
|
`profile_name`) or a schema property **with a default**. A property declared without a
|
|
97
99
|
default is rejected, because it would silently render as an empty string.
|
|
98
100
|
|
|
101
|
+
**In `routines/*.json`, settings render as VALUES, not as text.** The file is parsed first
|
|
102
|
+
and each string leaf rendered after, so a setting carrying quotes (a shell command with JSON
|
|
103
|
+
arguments, say) cannot break the document. Two consequences worth knowing:
|
|
104
|
+
|
|
105
|
+
- A `pre_commands` / `post_commands` entry that renders empty is dropped entirely, so an
|
|
106
|
+
optional command is just a setting defaulting to `""` — no empty shell step, no pre phase.
|
|
107
|
+
- `{{pre_output}}` is left alone by the renderer and filled by the routine runner at run
|
|
108
|
+
time. That is how a routine hands itself data without spending a tool call or a permission
|
|
109
|
+
on it — the secretary's `calendar_command` is the live example.
|
|
110
|
+
|
|
111
|
+
## A package updates, its installed routines do not
|
|
112
|
+
|
|
113
|
+
The prompt block is rendered every turn, so it improves the moment APX updates. Routines are
|
|
114
|
+
records in the super-agent's store, written at install time — nothing carries a better anchor
|
|
115
|
+
across. `apx profile sync` re-renders them from the package on disk, leaving settings and
|
|
116
|
+
activation alone; `apx profile doctor` reports the drift so it is not silent. A routine the
|
|
117
|
+
owner edited is skipped forever, by design, which also means a profile SETTING that lands in
|
|
118
|
+
a routine stops taking effect on that routine once they have touched it.
|
|
119
|
+
|
|
99
120
|
## Channel overlays
|
|
100
121
|
|
|
101
122
|
`channels/<ch>.md` is rendered and appended after the core `channels/<ch>.md`, only on that
|
|
@@ -115,7 +136,11 @@ install. Check the real number with `apx profile show <id>` or
|
|
|
115
136
|
|
|
116
137
|
`GET /api/profiles` · `GET /api/profiles/:id` (includes `preview`) · `GET /api/profiles/doctor` ·
|
|
117
138
|
`POST /api/profiles/install` · `POST /api/profiles/use` · `POST /api/profiles/off` ·
|
|
118
|
-
`
|
|
139
|
+
`POST /api/profiles/sync` (re-applies a package's routines after an update — `apx profile sync`) ·
|
|
140
|
+
`PATCH /api/profiles/config` · `DELETE /api/profiles/:id` ·
|
|
141
|
+
`POST /api/profiles/readopt` (force the active profile's routines back to the package, past the
|
|
142
|
+
user_modified/user_owned skips sync respects — `{ routine }` targets one, omit for all; the
|
|
143
|
+
web "Re-sync routines" button. It discards local edits to the affected routines.)
|
|
119
144
|
|
|
120
145
|
## Gotchas
|
|
121
146
|
|
|
@@ -40,7 +40,7 @@ Every `project config` write triggers `POST /api/admin/reload` so the daemon pic
|
|
|
40
40
|
|
|
41
41
|
## `<project>` argument resolution
|
|
42
42
|
|
|
43
|
-
Accepted: numeric id (`1`), exact name from `.apc/project.json` (`
|
|
43
|
+
Accepted: numeric id (`1`), exact name from `.apc/project.json` (`acme`), absolute path, relative path (resolved from cwd). The CLI's `resolveProjectId()` does fuzzy id/name/path matching. If "project not found", run `apx project list` first.
|
|
44
44
|
|
|
45
45
|
## What lives where
|
|
46
46
|
|
|
@@ -49,6 +49,7 @@ Accepted: numeric id (`1`), exact name from `.apc/project.json` (`iacrmar`), abs
|
|
|
49
49
|
├── AGENTS.md ← agent definitions (committed)
|
|
50
50
|
└── .apc/
|
|
51
51
|
├── project.json ← { apxId, name, ... }
|
|
52
|
+
├── memory.md ← curated project memory (committed, human-written)
|
|
52
53
|
├── agents/<slug>.md
|
|
53
54
|
├── skills/<slug>.md or <slug>/SKILL.md
|
|
54
55
|
├── mcps.json ← shared MCPs (committed)
|
|
@@ -56,6 +57,7 @@ Accepted: numeric id (`1`), exact name from `.apc/project.json` (`iacrmar`), abs
|
|
|
56
57
|
└── config.json ← project-only overrides (edited by `project config`)
|
|
57
58
|
|
|
58
59
|
~/.apx/projects/<apxId>/ ← runtime state (never committed)
|
|
60
|
+
├── memory.md ← local project memory (what `remember` writes)
|
|
59
61
|
├── messages/YYYY-MM-DD.jsonl
|
|
60
62
|
├── agents/<slug>/{memory.md, sessions/, conversations/}
|
|
61
63
|
├── routines.json
|
|
@@ -64,6 +66,25 @@ Accepted: numeric id (`1`), exact name from `.apc/project.json` (`iacrmar`), abs
|
|
|
64
66
|
└── mcps.json ← per-project runtime MCPs (local, may hold tokens)
|
|
65
67
|
```
|
|
66
68
|
|
|
69
|
+
## Project memory — two files, and you write only one
|
|
70
|
+
|
|
71
|
+
What the PROJECT knows lives in two places, and the difference is a safety boundary:
|
|
72
|
+
|
|
73
|
+
| File | Committed? | Written by |
|
|
74
|
+
|---|---|---|
|
|
75
|
+
| `~/.apx/projects/<apxId>/memory.md` | Never | You, with `remember` + `project` |
|
|
76
|
+
| `<repo>/.apc/memory.md` | Yes, git carries it | The owner, by hand, after reading it |
|
|
77
|
+
|
|
78
|
+
Write with `remember` and a `project` — never by creating a memory file yourself. A `MEMORY.md` at the repo root, or any other name, is read by nothing.
|
|
79
|
+
|
|
80
|
+
```
|
|
81
|
+
remember(note: "Northwind runs on Postgres in production", project: "northwind")
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
It lands in the local file on purpose. A note you write automatically can carry something the owner pasted into a chat, and a committed file is forever — APC keeps private runtime memory out of `.apc/`, which is only for curated facts that are safe for the team. If a fact belongs in the repo, say so and let the owner promote it from the Memories screen; do not write `.apc/memory.md` yourself unless they explicitly ask.
|
|
85
|
+
|
|
86
|
+
Read either with `read_file`. Both are shown in the project's Memories screen and both are indexed for retrieval. For facts that matter on every channel, call `remember` with no `project` — those go to your own notebook.
|
|
87
|
+
|
|
67
88
|
## Anti-examples
|
|
68
89
|
|
|
69
90
|
```bash
|
|
@@ -74,7 +95,7 @@ mkdir -p /path/repo/.apc && echo "{...}" > /path/repo/.apc/project.json
|
|
|
74
95
|
# Use `apx init <path>` then `apx project add <path>`.
|
|
75
96
|
|
|
76
97
|
# DON'T set super_agent.model to a model lacking an engine key.
|
|
77
|
-
apx project config set
|
|
98
|
+
apx project config set acme super_agent.model gemini:gemini-1.5-pro
|
|
78
99
|
# ↑ Fails at first call unless engines.gemini.api_key is set.
|
|
79
100
|
```
|
|
80
101
|
|