Repository navigation
feat(chat): agent profiles, DEV tap, 0.7.1 repin, Claude-style capture (#58, #59) - #60
superWorldSavior wants to merge 7 commits into
Conversation
Muse (bex-co/muse-code-acp 0.7.0, pinned + digest-checked) is the default agent; Codex stays as the legacy profile with bare session keys and historical stores so native sessions resume. One lazy runtime per profile x MCP set; shared relays; per-profile namespaced session stores. Per-conversation agent.select with provenance on every agent-produced message; persisted default; strict user profiles file (agent-profiles.json, fail-closed, built-ins never modified); unavailable targets refuse with an explicit reason and never fall back. Chat Host 0.6.0; no Codex login imposed. Profiles carry no environment: acpx persists session options under a snake_case key policy, so uppercase env injection is unrepresentable; agents inherit the full host environment, as before profiles existed. Tests: 232 scoped + catalogue green; packaged bundle tests green; UI tsc clean; packaged-host proof (ambient Muse login): real Muse turn, switch to Codex with provenance + store isolation, ghost-profile refusal, bad-file reload refusal, default round-trip ALL PASS. Live Codex turn vendor-blocked (account quota exhausted until Oct 4); switch + isolation proven anyway.
The file store codec dropped agentProfileId and message agent on load, so reopened conversations silently fell back to the legacy Codex profile and lost per-message provenance. Parse both with the contract profile-id rule (absent stays absent for pre-profile content) and cover the round-trip. Docs: first-build123d-result quickstart (Muse journey, observed timings, honest export limitation with bex 0.7.0 tool-output forwarding). Proof: packaged-host Muse journey B0-B5 (fresh profile, enable, Box 1000, edit 2000, close/reopen keeps profile + volumes, clean quit) PASS; export turn executes but yields no viewer (adapter-side, see #53); deno task package + chat:app-test green.
bex emits synthetic reminderChild inProgress/completed pseudo tool calls that landed as user-visible tool messages (~10 per turn). Filter the exact reminderChild: title prefix before transcript and capture; MCP tool names cannot contain ':', so no real namespaced call can collide. Covered by a unit test and verified live (0 reminderChild, real MCP tools intact). Part of #59 (noise item). Tool-output forwarding itself stays blocked on the vendor: bex 0.7.0 (latest) attaches no rawOutput to MCP tool updates (presentResult default branch, verified in dist source); @brokkai/muse-acp 0.7.0 ignores client-attached MCP servers, so it cannot replace bex.
bex/Muse tool events carry no rawOutput, so viewers/archives never capture on Muse turns. When CASYS_DEV_RELAY_TAP=1, standalone relays record exact tools/call pairs (bounded ring) and the coordinator attributes them to namespaced mcp__server__tool events: unique match on tool + canonical args + turn recency, consumed on match; zero or several matches attribute nothing, never a wrong result. Bytes always come from the relay record, the event title is only a lookup key. Without the variable (production) nothing is recorded and behavior is unchanged. Proof (packaged host, real Docker + Build123d): export turn with tap -> viewers=1, revision 1, .step artifact saved (15 KB); without tap -> viewers=0. Tests: tap unit (match/consume/ambiguity/stale/bounds), relay record, coordinator attribution/ambiguity/no-tap. 183 green. Part of #59 (dev bridge); the production limitation stands and stays documented in the quickstart.
…ject_2d schema) Adopt the 0.7.1 provider contract: object-top-level project_2d input schema, same accepted payloads. Fleet, catalogue, compose, launch groups, observer pins, probe identity and discovery fingerprint move together; local 0.7.1 provider probed current-surface.
Adapters that forward raw MCP shapes (namespaced title, args object, JSON string or single-text-block result) now retain viewers through the production path. Unknown shapes still fall through to the DEV tap or capture nothing.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: d5b8a87bd7
ℹ️ About Codex in GitHub
Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".
| "HOME", | ||
| "XDG_CONFIG_HOME", | ||
| "CODEX_HOME", | ||
| "OPENAI_API_KEY", | ||
| "META_API_KEY", |
There was a problem hiding this comment.
When Muse is installed only through PATH (an explicitly supported fallback in resolveMuseHost), this child environment omits PATH; the Chat Host is spawned with clearEnv, so the resolver receives an empty path and marks the default Muse profile unavailable. Forward PATH through the Desktop environment grant and chatHostEnvironment so a normally installed Muse CLI can be discovered.
AGENTS.md reference: AGENTS.md:L107-L110
Useful? React with 👍 / 👎.
Stack
Notes
redeployed and probed current-surface (fingerprint 28e6c8c9...).
limitation stands. Claude-style events capture through production path.