Phase 003: remove the coding-agent and ekko-agent runtimes
Every chat session now runs through the Hermes bridge, so the three chat chains become feature-equivalent instead of three partially-maintained dispatch paths. Keeping the coding-agent and in-house agent runtimes alive meant every bridge change had to be mirrored into two more runtimes that had already drifted. Historical rows are read, not migrated: sessions stored with the retired source normalize to cli on load, workflow graphs naming the retired agents keep loading and run on the bridge, and the visible-source check plus SOURCE_LABELS still recognize the old value so those sessions stay listed. The public surface follows the code: the OpenAPI generator and the MCP chat-run tool schema drop the six retired entry fields so external callers are not told about runtimes that no longer exist. harness-check gains a RETIRED_RUNTIME scan so the residual check is a mechanical gate instead of a manual grep, with the two surviving read-side compat sites recorded with reasons. Refs: docs/phases/phase_003.md
This commit is contained in:
@@ -9,27 +9,20 @@ describe('ChatPanel session clicks', () => {
|
||||
expect(source).toContain('await chatStore.switchSession(sessionId)')
|
||||
})
|
||||
|
||||
it('allows session model switching for coding agent sessions', () => {
|
||||
it('switches the session model without a protocol mode modal', () => {
|
||||
const source = readFileSync('packages/client/src/components/hermes/chat/ChatPanel.vue', 'utf8')
|
||||
|
||||
expect(source).toContain('contextSession.value?.source === "coding_agent"')
|
||||
expect(source).toContain('isSessionModelScopedCodingAgent')
|
||||
expect(source).toContain('!isCodingAgentAuthProvider(group.provider)')
|
||||
expect(source).toContain('showSessionModelModeModal')
|
||||
expect(source).toContain('pendingSessionModelSwitch')
|
||||
expect(source).toContain('chatStore.switchSessionModel(model, provider, sessionModelSessionId.value, apiMode)')
|
||||
expect(source).toContain('chatStore.switchSessionModel(model, provider, sessionModelSessionId.value)')
|
||||
expect(source).not.toContain('showSessionModelModeModal')
|
||||
expect(source).not.toContain('pendingSessionModelSwitch')
|
||||
expect(source).not.toContain('header-model-button--readonly')
|
||||
expect(source).not.toContain('if (isActiveSessionCodingAgent.value) return')
|
||||
})
|
||||
|
||||
it('uses codingAgentId when deciding whether session model switches need an API mode', () => {
|
||||
it('does not gate session model switching on a coding agent id', () => {
|
||||
const source = readFileSync('packages/client/src/components/hermes/chat/ChatPanel.vue', 'utf8')
|
||||
|
||||
expect(source).toContain('const sessionModelCodingAgentId = computed<ChatCodingAgentId | undefined>')
|
||||
expect(source).toContain('sessionModelSession.value?.codingAgentId ||')
|
||||
expect(source).toContain('sessionModelSession.value?.agent === "claude"')
|
||||
expect(source).toContain('sessionModelCodingAgentId.value === "claude-code"')
|
||||
expect(source).not.toContain('sessionModelSession.value?.agent === "claude-code"')
|
||||
expect(source).not.toContain('sessionModelCodingAgentId')
|
||||
expect(source).not.toContain('isSessionModelScopedCodingAgent')
|
||||
})
|
||||
|
||||
it('uses the active sidebar model as the new chat default for the active profile', () => {
|
||||
|
||||
Reference in New Issue
Block a user