feat: 补齐智能体对话思考和工具过程渲染
This commit is contained in:
1 parent
7a7d1f7fd8
commit
70a3212bce
12 files changed
+517
-31
No files matched your search
@@ -0,0 +1,69 @@
|
||||
# Task: Trace personal agent reasoning output
|
||||
|
||||
## Identity
|
||||
|
||||
- Task ID: 20261012-agent-reasoning-39afbc21
|
||||
- Mode: Feature
|
||||
- Branch: codex/20261012-agent-reasoning-39afbc21-agent-reasoning
|
||||
- Worktree: C:\Users\7brot\.codex\worktrees\makelore-agent-reasoning-39afbc21
|
||||
- Base commit: 7a7d1f7fd89fff3b77f2fd8f1986da65fb6223ea
|
||||
- Owner: codex
|
||||
- Status: Ready for Integration
|
||||
|
||||
## Scope
|
||||
|
||||
- Continue the diagnosed gap with user-authorized personal cloud chat rendering: separate thinking and tools from Markdown answers, retain per-message boundaries, and project existing saved process data for history/reopen.
|
||||
- Reuse Yuxi native conversation semantics; no new persistence, model behavior, credentials or deployment. User now authorizes committing and merging the paired change and one fresh read-only Reviewer.
|
||||
|
||||
## Intent And Constraints
|
||||
|
||||
- Concurrent and Planning Gates Passed through official check/start/status; task ID, feature mode, isolated absolute worktree, branch and base match Identity.
|
||||
- Project Context Loaded: entry and own task record, positioning, integrated current state, decisions/personal-cloud ADR, system architecture, domain and evidence context; unchanged prior session context reused. Yuxi has 64 peer records and Makelore 148. Peer task Scope/Intent/Promotion records are read-only; historical template scopes remain unknown without a concrete conflicting dependency.
|
||||
- Yuxi owns cloud execution; Makelore Main owns credentials and transport; personal Agents and Code teacher consultation are separate consumers.
|
||||
- Existing avatar integration and optional-purpose work remain separate. No claims about installed-client versions, deployed services, or the actual provider payload of a particular run.
|
||||
- Same-task resume check/start/status passed; owner, branch, base and all peer registry fields unchanged. Reused already loaded context and read-only peer scopes. Planning Gate Passed for this implementation continuation.
|
||||
- Plan: (1) reuse native history projection and prove ownership/paging with HTTP/PostgreSQL; (2) implement message-scoped SSE accumulation, expandable process and shared Markdown rendering; (3) verify stream replay, terminal/history replacement and thread isolation with focused unit and Electron scenarios, then type/lint/build and documentation gates.
|
||||
|
||||
- Merge continuation: official same-task start/status passed; unchanged bases and all 64/148 peer registry entries permit reuse of prior read-only context and scope assessment. Planning Gate Passed. User approved fresh read-only reasoning_merge_review; full backend non-slow unit gate and independent review precede commit. User also approved primary ownership handoff: official release/adopt completed under dedicated integration tasks, preserving all five foreign records.
|
||||
|
||||
## Outcome
|
||||
|
||||
- Confirmed Yuxi already emits reasoning in compact personal SSE, but Makelore CloudChat and the personal history DTO omitted its display.
|
||||
- Added message-scoped live reasoning, Markdown answers, collapsible tool inputs/results/errors and Run/thread isolation. Redis numeric cursors suppress replay duplicates; terminal history replaces matching live messages, while stale/failed refresh retains the full live answer.
|
||||
- Formal, preview, shared and saved channel conversations use CloudMessageBody. Thinking starts expanded, collapses as answer text arrives and remains manually expandable. No invented or empty thinking sections; artifact downloads remain supported.
|
||||
- Yuxi projects existing saved reasoning and tools through native parsers and visibility rules. Only state-confirmed terminal tool messages enter ordinary history; ownership and filtering-before-pagination remain enforced. No new schema, model requests or provider behavior.
|
||||
- Main limits personal/channel history to display fields and omits raw internal metadata. Updated client README, Yuxi user reference and the implemented decision (created as a proposal before implementation).
|
||||
- Review correction: compact SSE retains tool-started.input; the renderer adopts effective execution arguments by tool_call_id and prevents later model argument fragments from overriding them. Empty effective input is retained, and tool-error remains provisional until native Run reconciliation.
|
||||
|
||||
## Verification
|
||||
|
||||
- Client TypeScript passed. Affected ESLint: 0 errors, 2 pre-existing CloudChat warnings (Fast Refresh export / cleanup ref). Fixed a pre-existing line-break lint error in the touched it.each test.
|
||||
- Client Vitest: cloud-chat-rendering, cloud-agents-main, cloud-agents-workflows and cloud-channel-conversations passed 80 tests; cloud-agents-page, cloud-agents-management and cloud-agents-guidance passed 36 tests (116 total / 7 files).
|
||||
- Seven rendering tests cover replay (including large cursors), separate messages, wrong Run/thread, tool chunks/results/errors, Markdown/artifact links, history failure/staleness, reopening and absent thinking. Main tests cover personal/channel field projection.
|
||||
- pnpm run build:vite passed with final production code. Electron cloud-chat-rendering.spec.ts passed 1 test against the built real window with test IPC/SSE fixtures. Screenshots were visually checked for thought/tool details, Markdown tables and reopened history.
|
||||
- Yuxi Ruff check/format passed for the six changed Python files. WSL pytest: conversation message audits, queue history and provider reasoning passed 47 tests; repository memory history/workdir passed 10 (57 total).
|
||||
- Two real uvicorn HTTP/PostgreSQL tests in test_makelore_agents.py passed (28 deselected): saved/legacy reasoning, literal user think tags, tool success/error, running-vs-terminal visibility, hidden metadata, other-user 404, 104 unique paged messages, and shared/application authorization.
|
||||
- The first integration run found a detached fixture object read after DB commit; retaining its scalar conversation_id fixed the fixture and the rerun passed.
|
||||
- verify_engineering_contracts.py passed (119 decisions / 5 workflows / 4 agents files / 172 docs / 34 routers / 248 web sources). Its unittest module passed 62 tests in WSL; Windows symlink privilege and path-separator failures were environmental, with no production workaround.
|
||||
- VitePress build passed. Ignored dependency junctions reuse existing pinned client/docs dependencies; no dependency lockfiles changed.
|
||||
- Task artifact directory: C:/Users/7brot/.codex/visualizations/2026/10/12/01a12e4f-9365-74c2-9e57-3f900a028618/reasoning-local (client-build.log, docs-build.log and rendered docs).
|
||||
- Electron images: Makelore worktree test-results/cloud-chat-rendering-perso-31b4f--restores-them-after-reload/personal-chat-process.png and personal-chat-reopened.png.
|
||||
- Temporary task PostgreSQL: WSL /tmp/makelore-reasoning-39afbc21/data, loopback 58413; stopped during final cleanup. No primary service database changed.
|
||||
- Submission gate: WSL Python 3.12 non-slow unit suite passed 2270 tests / 1 skipped. Command: PYTHONPATH=<task-artifacts>/test-shim:package:. python -m pytest test/unit -m 'not slow' -q. The external namespace shim points the installed stdlib test package at this checkout for pytest and subprocess imports; production code and test assertions are unchanged. Full log: reasoning-local/backend-unit-all.log. Initial collection without the shim failed on seven stdlib-shadowed imports.
|
||||
- Fresh independent reasoning_merge_review reviewed full requirements, tracked/untracked diffs, native protocol, persistence, tests and rules, and returned PASS with no open material findings. Its one effective-input finding was fixed and verified; both new regression assertions failed for the expected reason before production correction.
|
||||
- After that correction: 80 affected client tests passed (plus 36 unchanged page tests), tsc/scoped lint, final production build, updated real Electron-window fixture, docs build and engineering checks passed. Backend non-slow suite again passed 2270 / 1 skipped. Earlier real HTTP/PostgreSQL history tests remain valid because their code path is unchanged.
|
||||
- git diff --check passed; official task-aware drift and completion commands are the final documentation gates.
|
||||
|
||||
## Follow-ups
|
||||
|
||||
- User authorized committing the independently reviewed result and local main-branch integration. Both source task records must be imported unchanged. No push, installer packaging, deployment or real provider call is authorized.
|
||||
- A reviewer test attempt created an ignored Yuxi .venv before being stopped; it is not staged and may be removed with the source worktree only after explicit cleanup consent.
|
||||
- Release the paired history API and client for saved process display. Reasoning is limited to what the selected model actually returns and stores; older records without reasoning remain without it.
|
||||
- Preserve the separate optional-purpose worktree and earlier avatar work. No unrelated task files changed.
|
||||
|
||||
## Promotion Candidates
|
||||
|
||||
- Target: canonical personal-cloud architecture/current state in both repositories.
|
||||
- Proposal: record shared message presentation, separate live/saved process fields, native state-confirmed tool visibility and paired release dependency.
|
||||
- Evidence: 116 client tests, 1 Electron scenario, 57 backend unit tests, 2 real HTTP/PostgreSQL tests and successful builds. Future impact: align formal/preview/shared/channel messages and avoid reconstructing durable history from short-lived SSE.
|
||||
- Semantic conflicts: none found against integrated context; peers remain read-only. Human confirmation: no additional product decision needed; promotion belongs to an authorized integration task.
|
||||
Reference in new issue
Block a user