6.8 KiB
6.8 KiB
Task: Nest Conversations under the selected Agent
Identity
- Task ID: 20260825-agent-conversation-tree-4d8a2c71
- Mode: Feature
- Branch: codex/20260825-agent-conversation-tree-4d8a2c71-agent-conversation-tree
- Worktree: D:\Datas\OthersProjects\makelore-agent-conversation-tree-4d8a2c71
- Base commit:
c4ca16fa19 - Owner: codex-root
- Status: Done
Scope
- Change the Makelore Code sidebar so the selected Agent is the visible parent of its Conversations instead of rendering separate sibling
伙伴and对话sections. - Preserve the existing
agentIdownership/filtering, Conversation selection, lazy first-Conversation creation, unread/running indicators, and new-Conversation action. - Add focused Renderer coverage and an Electron E2E assertion for the hierarchy; do not change project metadata, Host APIs, Pi runtime, or user data.
Intent And Constraints
- Render each Agent as a collapsible parent row. Only the selected Agent expands, and its Conversation list is placed immediately beneath it with a clear
${agent.name} 的对话label. - Keep all existing interactive hit areas at least 40px and retain the product's single light visual system, exact-property press transitions, and current button semantics.
- Do not add a compatibility layer, new state model, animation dependency, or Agent/Conversation migration. The persisted relationship is already correct.
- The user requested direct implementation without subagents.
Project Context Loaded
Task context:
- Task ID:
20260825-agent-conversation-tree-4d8a2c71 - Mode: feature
- Branch:
codex/20260825-agent-conversation-tree-4d8a2c71-agent-conversation-tree - Worktree:
D:\Datas\OthersProjects\makelore-agent-conversation-tree-4d8a2c71 - Base commit:
c4ca16fa198a1e5a90bd1b72bf0cee22f6ee1baa - Other active local tasks: eleven non-ready owners were inspected through their task records.
- Overlap or semantic-conflict assessment: the only adjacent task is the older undefined
partner-create-model-paritydiagnosis. This task does not change partner/model semantics or its files; the old Main OpenCode integration and all Canvas/Robot/Learning tasks are unrelated. No semantic conflict blocks this UI-only change.
Read:
.project-docs/05-agent-entry/memory-index.md.project-docs/05-agent-entry/read-before-planning.md.project-docs/05-agent-entry/planning-gate.md.project-docs/00-brief/project-positioning.md.project-docs/00-brief/success-criteria.md.project-docs/30-worklog/current-state.md.project-docs/10-decisions/decision-index.md.project-docs/20-architecture/system-overview.md.project-docs/20-architecture/module-map.md.project-docs/20-architecture/data-flow.md.project-docs/40-domain/business-rules.md.project-docs/40-domain/glossary.md.project-docs/50-evidence/evidence-index.md.project-docs/60-reflection/reflection-index.md.project-docs/80-commitments/commitments.md.project-docs/90-maintenance/stale-items.md- Diagnosis record
20260825-conversation-agent-binding-8a4c2e71and PI-120/PI-130 implementation records.
Relevant understanding:
- Project goal: keep Makelore Code local and project-scoped, with Renderer access through typed facades and Main ownership of runtime and secrets.
- Current integrated focus: the live cumulative source is the Pi hard-cut product; shared canonical memory still contains stale OpenCode-era module descriptions.
- Active task scope: improve only the Agent → Conversation visual hierarchy in
CodingChatPanel. - Active constraints: no runtime/API/storage changes; preserve all target isolation and selection behavior.
- Decisions affecting this task: Conversation metadata is Agent-owned through mandatory
agentId; only the selected Agent's unarchived Conversations are rendered. - Evidence, reflections, or commitments affecting this task: installed
testgamehas two Conversations both uniquely owned byccc; no orphaned metadata exists. No shared commitment changes this UI work. - Files or modules likely involved:
src/pages/Chat/CodingChatPanel.tsx,tests/unit/coding-chat-panel.test.tsx, andtests/e2e/pi-coding-first-chat.spec.ts. - Unknowns, stale docs, or conflicts: canonical project positioning is a placeholder and module map is OpenCode-stale; current source plus Pi task records are authoritative. No unresolved behavior conflict remains.
Gate result:
- Passed.
Plan
- Add a focused failing Renderer test that requires the selected Agent to expose an expanded child Conversation group and hides another Agent's Conversations.
- Move the existing Conversation header/list/create/loading block inside the selected Agent's rendered group, using a parent surface plus an indented child rail without changing selection or creation logic.
- Add a small production-seam E2E assertion for the visible Agent-owned group, then run focused tests, typecheck, lint,
build:vite, and the applicable Electron E2E. - Update this task record with actual outcome and verification, run the documentation gate, and commit only task-owned changes.
Outcome
- Replaced the sibling
伙伴/对话sidebar sections with one伙伴与对话hierarchy. - Each Agent is now an accessible expandable parent row. The selected Agent uses a concentric selected surface, expanded chevron,
aria-expanded, and an immediately nested child group labelled${agent.name} 的对话. - Moved the existing Conversation rows, create action, first-Conversation loading indicator, unread marker, and run spinner into the selected Agent's child group without changing any state, API, storage, or runtime behavior.
- Kept unselected Agents collapsed, so a Conversation cannot visually appear at project level or under another Agent.
- Updated
README.mdto describe the nested Agent-owned Conversation list.
Verification
- Red phase: the new hierarchy regression failed against the prior sibling layout while the other 15
coding-chat-paneltests passed. corepack pnpm exec vitest run tests/unit/coding-chat-panel.test.tsx --maxWorkers=1: passed, 1 file / 16 tests.corepack pnpm run typecheck: passed.corepack pnpm run lint:check: passed with 0 errors and 5 pre-existing warnings outside the changed files.corepack pnpm run build:vite: passed; existing dynamic-import and chunk-size warnings remain.corepack pnpm test: passed; functional stage 179 files / 1523 passed / 2 skipped, isolated pressure stage 1 file / 1 passed.corepack pnpm exec playwright test tests/e2e/pi-coding-first-chat.spec.ts: passed, 2/2. The production Renderer seam asserts the expandedBuilderparent, nestedBuilder 的对话group, first Conversation, and second-Conversation selection inside that group.
Follow-ups
- A rebuilt installer is not part of this UI source task; package from this commit only when the user requests a new installer.
Promotion Candidates
- None recorded.