Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
34d980a
docs(agent-cleanup): add phased baseline
zerob13 Mar 14, 2026
766eaf2
chore(agent-cleanup): add static guard
zerob13 Mar 14, 2026
55572c9
refactor(agent-cleanup): extract question tool
zerob13 Mar 14, 2026
5dd6f16
refactor(agent-cleanup): extract env prompt
zerob13 Mar 14, 2026
de3a00e
refactor(agent-cleanup): extract session paths
zerob13 Mar 14, 2026
a868df3
types(agent-cleanup): narrow mcp imports
zerob13 Mar 14, 2026
795dc3c
types(agent-cleanup): extract search result
zerob13 Mar 14, 2026
2bc91ac
types(agent-cleanup): narrow message files
zerob13 Mar 14, 2026
1edf3ff
types(agent-cleanup): isolate display messages
zerob13 Mar 14, 2026
dc8e1c3
types(agent-cleanup): narrow user message rendering
zerob13 Mar 14, 2026
2cfbeb2
types(agent-cleanup): narrow assistant shell
zerob13 Mar 14, 2026
c81e797
types(agent-cleanup): clear active block path
zerob13 Mar 14, 2026
f484e2c
refactor(agent-cleanup): archive dead renderer code
zerob13 Mar 15, 2026
18bcf00
refactor(agent-cleanup): persist session skills
zerob13 Mar 15, 2026
17ba0de
refactor(agent-cleanup): extract skill runtime
zerob13 Mar 15, 2026
ae1caf0
refactor(agent-cleanup): scope mcp access
zerob13 Mar 15, 2026
1063ede
refactor(agent-cleanup): lazy legacy runtime
zerob13 Mar 15, 2026
1dffe5c
refactor(agent-cleanup): tighten legacy access
zerob13 Mar 15, 2026
4f688f5
refactor(agent-cleanup): inject session runtime
zerob13 Mar 15, 2026
f988c82
refactor(agent-cleanup): inject tool presenter
zerob13 Mar 15, 2026
d7d72a0
refactor(agent-cleanup): add runtime ports
zerob13 Mar 15, 2026
ba038de
refactor(agent-cleanup): inject provider mcp
zerob13 Mar 15, 2026
9e0b756
refactor(agent-cleanup): inject skill state
zerob13 Mar 15, 2026
fc60e91
refactor(agent-cleanup): retire legacy skills
zerob13 Mar 15, 2026
33e7421
refactor(agent-cleanup): archive dead code
zerob13 Mar 15, 2026
e25fd75
docs(agent-cleanup): simplify checkpoint
zerob13 Mar 15, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 36 additions & 0 deletions archives/code/dead-code-batch-2/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# Dead Code Batch 2

- Purpose: archive dead code that no longer participates in the active renderer or main runtime.
- Archived at: 2026-03-15
- Rationale: static inspection confirmed these files have no live code references and are kept in
source form for precise rollback only.

## Archived Paths

- `src/renderer/src/components/NewThreadMock.vue`
- `src/renderer/src/components/mock/MockChatPage.vue`
- `src/renderer/src/components/mock/MockInputBox.vue`
- `src/renderer/src/components/mock/MockInputToolbar.vue`
- `src/renderer/src/components/mock/MockMessageList.vue`
- `src/renderer/src/components/mock/MockStatusBar.vue`
- `src/renderer/src/components/mock/MockTopBar.vue`
- `src/renderer/src/components/mock/MockWelcomePage.vue`
- `src/renderer/src/composables/useMockViewState.ts`
- `src/main/presenter/agentPresenter/tools/questionTool.ts`
- `src/main/presenter/agentPresenter/message/systemEnvPromptBuilder.ts`
- `src/main/presenter/agentPresenter/events.ts`
- `src/main/presenter/agentPresenter/message/index.ts`
- `src/main/presenter/agentPresenter/permission/index.ts`
- `src/main/presenter/agentPresenter/session/index.ts`
- `src/main/presenter/agentPresenter/streaming/index.ts`
- `src/main/presenter/agentPresenter/tool/index.ts`
- `src/main/presenter/agentPresenter/utility/index.ts`
- `src/main/presenter/searchPrompts/index.ts`
- `src/main/presenter/sessionPresenter/persistence/index.ts`
- `src/main/presenter/sessionPresenter/tab/index.ts`

## Notes

- This directory is not part of the runtime, build, typecheck, or test target set.
- Restore by moving files back to their original paths if a later audit proves they are still
needed.
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
export {
buildRuntimeCapabilitiesPrompt,
buildSystemEnvPrompt,
type BuildSystemEnvPromptOptions
} from '../../../lib/agentRuntime/systemEnvPromptBuilder'
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
export {
parseQuestionToolArgs,
QUESTION_TOOL_NAME,
questionToolSchema,
type QuestionToolInput
} from '../../../lib/agentRuntime/questionTool'
17 changes: 17 additions & 0 deletions archives/code/dead-renderer-batch-1/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# Dead Renderer Batch 1

- Purpose: archive renderer dead code that is no longer on the active chat path.
- Archived at: 2026-03-15
- Rationale: static inspection confirmed there are no active references in `src/`, `test/`, or live docs. Files are kept in source form for precise rollback only.

## Archived Paths

- `src/renderer/src/components/message/MessageMinimap.vue`
- `src/renderer/src/composables/message/useMessageMinimap.ts`
- `src/renderer/src/components/MessageNavigationSidebar.vue`
- `src/renderer/src/lib/messageRuntimeCache.ts`

## Notes

- This directory is not part of the runtime, build, typecheck, or test target set.
- Restore by moving files back to their original paths if a later audit proves they are still needed.
8 changes: 3 additions & 5 deletions docs/FLOWS.md
Original file line number Diff line number Diff line change
Expand Up @@ -138,8 +138,7 @@ sequenceDiagram
participant LLM as LLMProviderPresenter (Main)
participant LLMH as LLMEventHandler (Main)
participant Sched as StreamUpdateScheduler (Main)
participant Cache as messageRuntimeCache (Renderer)
participant List as MessageList/Minimap (Renderer)
participant List as MessageList (Renderer)

UI->>Store: send(message)
Store->>IPC: presenter:call(agentPresenter.sendMessage)
Expand All @@ -149,8 +148,7 @@ sequenceDiagram
LLM-->>LLMH: stream chunks
LLMH->>Sched: enqueueDelta(content/tool_call/usage)
Sched-->>Store: STREAM_EVENTS.RESPONSE (init/delta)
Store->>Cache: cacheMessage/ensureMessageId
Cache-->>List: messageItems/minimapMessages
Store-->>List: update messageItems
LLMH-->>Sched: flushAll(final)
Sched-->>Store: STREAM_EVENTS.RESPONSE (final)
LLMH-->>Store: STREAM_EVENTS.END/ERROR
Expand All @@ -162,7 +160,7 @@ sequenceDiagram
- AgentPresenter.sendMessage: `src/main/presenter/agentPresenter/index.ts`
- StreamGenerationHandler.startStreamCompletion: `src/main/presenter/agentPresenter/streaming/streamGenerationHandler.ts`
- LLMEventHandler + StreamUpdateScheduler: `src/main/presenter/agentPresenter/streaming/llmEventHandler.ts`, `src/main/presenter/agentPresenter/streaming/streamUpdateScheduler.ts`
- MessageList/Minimap: `src/renderer/src/components/message/MessageList.vue`, `src/renderer/src/components/message/MessageMinimap.vue`
- MessageList: `src/renderer/src/components/chat/MessageList.vue`

## 3. Agent Loop 详细流程

Expand Down
4 changes: 2 additions & 2 deletions docs/architecture/new-ui-implementation-plan.md
Original file line number Diff line number Diff line change
Expand Up @@ -556,8 +556,8 @@ sessionStore.selectSession(id)
- `chat.ts`: Remove session management logic, keep message logic

**Deprecated**:
- `components/mock/*.vue`: Mock components can be deleted after completion
- `composables/useMockViewState.ts`: Mock state management can be deleted
- `components/mock/*.vue`: Archived in `archives/code/dead-code-batch-2/`
- `composables/useMockViewState.ts`: Archived in `archives/code/dead-code-batch-2/`

---

Expand Down
39 changes: 39 additions & 0 deletions docs/specs/agent-cleanup/plan.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# Agent Cleanup Checkpoint

## Summary

This workstream is paused after the main cleanup milestones were completed and dead code was
archived.

Done:

- shared helper ownership moved to `src/main/lib/agentRuntime`
- active renderer chat path moved off legacy message protocol
- renderer dead code archived in `archives/code/dead-renderer-batch-1/`
- renderer mock/orphan dead code archived in `archives/code/dead-code-batch-2/`
- new-session skill state moved to `new_sessions.active_skills`
- legacy `agentPresenter/**` removed from global presenter access
- provider-layer MCP global access removed

## Keep For Now

- `LegacyChatImportService`
- legacy import hook / status tracking
- old `conversations/messages` tables as import-only sources
- `scripts/agent-cleanup-guard.mjs` as anti-regression protection

## Resume Order Later

When cleanup resumes, use this order:

1. clear the remaining export-only / non-active-path type coupling
2. inventory and reduce adjacent provider globals
3. run a final retirement audit on old presenter runtime wiring
4. only then consider deleting old legacy folders or old import tables

## Default Rules

1. One cleanup slice per PR.
2. Do not mix event-contract changes with runtime decoupling.
3. Do not remove import-only compatibility during routine refactors.
4. Prefer archiving dead code before hard deletion.
56 changes: 56 additions & 0 deletions docs/specs/agent-cleanup/spec.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
# Agent Cleanup

## Summary

This cleanup paused at a stable checkpoint on March 15, 2026.

Current primary flow:

- renderer active chat pages/stores/components
- `newAgentPresenter`
- `deepchatAgentPresenter`

Current state:

- active renderer chat path no longer depends on `@shared/chat`
- dead renderer and mock code has been archived under `archives/code/`
- new-session skills live in `new_sessions.active_skills`
- imported `legacy-session-*` skills are repaired back into `new_sessions.active_skills` on first
access
- legacy `agentPresenter/**` no longer reads global `presenter.*` directly
- provider-layer MCP conversion no longer reads `presenter.mcpPresenter`

## Compatibility Boundary

The supported compatibility boundary is now:

- keep `LegacyChatImportService`
- keep legacy import hook / status tracking
- keep old `conversations/messages` tables as import-only sources

The new primary flow should not regain runtime ownership from old `agentPresenter` /
`sessionPresenter` code.

## Guardrails

`scripts/agent-cleanup-guard.mjs` is still intentionally kept.

It now acts as a pure anti-regression guard with zero baseline:

1. new main-path modules must not import legacy `agentPresenter/sessionPresenter`
2. active renderer chat path must not reintroduce `@shared/chat`
3. legacy `agentPresenter/**` must not regain global `presenter.*` access
4. provider-layer code must not reintroduce `presenter.mcpPresenter`
5. `SkillPresenter` and MCP gating must not regain retired legacy fallbacks

This is low maintenance now because there is no allowlist left to manage.

## Remaining Work

The cleanup is intentionally paused here. Remaining backlog is small and can wait for future
feature work:

- export-only `@shared/chat` coupling in `newAgentPresenter`
- non-active renderer residual import in `PromptEditorSheet`
- adjacent provider globals such as `devicePresenter` / `oauthPresenter`
- final runtime retirement audit for old presenter folders
36 changes: 36 additions & 0 deletions docs/specs/agent-cleanup/tasks.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# Agent Cleanup Checkpoint Tasks

## Completed

- [x] Added cleanup docs and static guardrails
- [x] Moved shared runtime helpers out of legacy presenter folders
- [x] Moved active renderer chat path off `@shared/chat`
- [x] Archived dead renderer path code in `archives/code/dead-renderer-batch-1/`
- [x] Archived renderer mock/orphan dead code in `archives/code/dead-code-batch-2/`
- [x] Persisted new-session skills in `new_sessions.active_skills`
- [x] Retired old-session skill fallback to legacy conversation settings
- [x] Removed global `presenter.*` access from `agentPresenter/**`
- [x] Removed provider-layer `presenter.mcpPresenter` access
- [x] Reduced startup/runtime legacy wiring on the new primary path

## Kept Intentionally

- [x] `LegacyChatImportService`
- [x] legacy import hook / status tracking
- [x] old `conversations/messages` tables as import-only sources
- [x] `scripts/agent-cleanup-guard.mjs`

## Remaining Backlog

- [ ] `src/main/presenter/newAgentPresenter/index.ts` still has export-only `@shared/chat` coupling
- [ ] `src/renderer/settings/components/prompt/PromptEditorSheet.vue` still imports `MessageFile`
from `@shared/chat` outside the active chat path
- [ ] adjacent provider globals remain for later review:
- `presenter.devicePresenter` in OpenAI providers
- `presenter.oauthPresenter` in Anthropic
- [ ] final retirement audit for old runtime folders and wiring

## Archive Batches

- [x] `archives/code/dead-renderer-batch-1/`
- [x] `archives/code/dead-code-batch-2/`
6 changes: 3 additions & 3 deletions docs/specs/agent-tooling-v2/plan.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,14 +40,14 @@
5. `src/main/presenter/toolPresenter/index.ts`(tool prompt 与路由提示)
6. `src/main/presenter/agentPresenter/message/messageBuilder.ts`(system prompt 拼接)
7. `src/main/presenter/agentPresenter/message/skillsPromptBuilder.ts`(skills allowedTools 接入)
8. `src/main/presenter/agentPresenter/message/systemEnvPromptBuilder.ts`(新增 env prompt 生成)
8. `src/main/lib/agentRuntime/systemEnvPromptBuilder.ts`(env prompt 生成)
9. 与上述模块直接相关的测试与文档

明确不改动:

1. `src/main/presenter/browser/**`
2. `src/main/presenter/agentPresenter/acp/chatSettingsTools.ts`
3. `src/main/presenter/agentPresenter/tools/questionTool.ts`
3. `src/main/lib/agentRuntime/questionTool.ts`
4. `src/main/presenter/mcpPresenter/**`

## 2. 设计决策
Expand Down Expand Up @@ -287,7 +287,7 @@ canonical:
- 保证 system prompt 固定顺序拼接。
3. `src/main/presenter/agentPresenter/message/skillsPromptBuilder.ts`
- `getSkillsAllowedTools()` 使用 canonicalized allowed tools。
4. `src/main/presenter/agentPresenter/message/systemEnvPromptBuilder.ts`(新增)
4. `src/main/lib/agentRuntime/systemEnvPromptBuilder.ts`
- 统一生成 env prompt(模型、系统、仓库、AGENTS.md)。

拼接顺序(固定):
Expand Down
2 changes: 1 addition & 1 deletion docs/specs/agent-tooling-v2/tasks.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@

## T2 新增统一 Env Prompt Builder

- [ ] 新增 `src/main/presenter/agentPresenter/message/systemEnvPromptBuilder.ts`。
- [ ] 新增 `src/main/lib/agentRuntime/systemEnvPromptBuilder.ts`。
- [ ] 实现 `buildSystemEnvPrompt(...)`,输出固定格式:
- 模型名 + 模型 ID
- `<env>`:workdir、git repo、platform、date
Expand Down
24 changes: 12 additions & 12 deletions docs/specs/new-ui-chat-components/spec.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,15 @@

Chat components handle message display, input, and status configuration during active sessions. Each component's visual design must match its mock counterpart exactly.

## Reference Files
## Archived Reference Files

| Component | Mock File |
| Component | Archived Mock File |
|-----------|-----------|
| ChatTopBar | `components/mock/MockTopBar.vue` |
| MessageList | `components/mock/MockMessageList.vue` |
| InputBox | `components/mock/MockInputBox.vue` |
| InputToolbar | `components/mock/MockInputToolbar.vue` |
| StatusBar | `components/mock/MockStatusBar.vue` |
| ChatTopBar | `archives/code/dead-code-batch-2/src/renderer/src/components/mock/MockTopBar.vue` |
| MessageList | `archives/code/dead-code-batch-2/src/renderer/src/components/mock/MockMessageList.vue` |
| InputBox | `archives/code/dead-code-batch-2/src/renderer/src/components/mock/MockInputBox.vue` |
| InputToolbar | `archives/code/dead-code-batch-2/src/renderer/src/components/mock/MockInputToolbar.vue` |
| StatusBar | `archives/code/dead-code-batch-2/src/renderer/src/components/mock/MockStatusBar.vue` |

## File Locations

Expand All @@ -29,7 +29,7 @@ src/renderer/src/components/chat/

## 1. ChatTopBar

**Mock reference**: `MockTopBar.vue` (copy layout and classes exactly)
**Archived mock reference**: `dead-code-batch-2/.../MockTopBar.vue`

**Layout**:
```
Expand Down Expand Up @@ -57,7 +57,7 @@ interface Props {

## 2. MessageList

**Mock reference**: `MockMessageList.vue` (copy layout and classes exactly)
**Archived mock reference**: `dead-code-batch-2/.../MockMessageList.vue`

**Layout**:
```
Expand Down Expand Up @@ -96,7 +96,7 @@ Note: The existing `useChatStore` already handles message fetching and caching v

## 3. ChatInputBox

**Mock reference**: `MockInputBox.vue` (copy layout and classes exactly)
**Archived mock reference**: `dead-code-batch-2/.../MockInputBox.vue`

**Layout**:
```
Expand Down Expand Up @@ -133,7 +133,7 @@ interface Emits {

## 4. ChatInputToolbar

**Mock reference**: `MockInputToolbar.vue` (copy layout and classes exactly)
**Archived mock reference**: `dead-code-batch-2/.../MockInputToolbar.vue`

**Layout**:
```
Expand All @@ -159,7 +159,7 @@ interface Emits {

## 5. ChatStatusBar

**Mock reference**: `MockStatusBar.vue` (copy layout and classes exactly)
**Archived mock reference**: `dead-code-batch-2/.../MockStatusBar.vue`

**Layout**:
```
Expand Down
Loading
Loading