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:
@@ -151,7 +151,7 @@ describe('SessionListItem', () => {
|
||||
})
|
||||
|
||||
const logo = wrapper.get('.session-item-agent-logo')
|
||||
expect(logo.attributes('src')).toBe('/coding-agents/hermes.png')
|
||||
expect(logo.attributes('src')).toBe('/logo.png')
|
||||
expect(logo.attributes('alt')).toBe('Hermes')
|
||||
expect(wrapper.find('.session-item-agent-name').exists()).toBe(false)
|
||||
})
|
||||
@@ -159,7 +159,7 @@ describe('SessionListItem', () => {
|
||||
it('defaults old sessions without agent metadata to the Hermes logo', () => {
|
||||
const wrapper = mount(SessionListItem, {
|
||||
props: {
|
||||
session: { ...session, source: undefined, agent: undefined, codingAgentId: undefined },
|
||||
session: { ...session, source: undefined, agent: undefined },
|
||||
active: false,
|
||||
pinned: false,
|
||||
canDelete: true,
|
||||
@@ -172,50 +172,8 @@ describe('SessionListItem', () => {
|
||||
})
|
||||
|
||||
const logo = wrapper.get('.session-item-agent-logo')
|
||||
expect(logo.attributes('src')).toBe('/coding-agents/hermes.png')
|
||||
expect(logo.attributes('src')).toBe('/logo.png')
|
||||
expect(logo.attributes('alt')).toBe('Hermes')
|
||||
expect(wrapper.find('.session-item-agent-name').exists()).toBe(false)
|
||||
})
|
||||
|
||||
it('renders the Claude Code logo for Claude coding agent sessions', () => {
|
||||
const wrapper = mount(SessionListItem, {
|
||||
props: {
|
||||
session: { ...session, source: 'coding_agent', agent: 'claude', codingAgentId: 'claude-code' },
|
||||
active: false,
|
||||
pinned: false,
|
||||
canDelete: true,
|
||||
},
|
||||
global: {
|
||||
stubs: {
|
||||
ProfileAvatar: true,
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
const logo = wrapper.get('.session-item-agent-logo')
|
||||
expect(logo.attributes('src')).toBe('/coding-agents/claude-code.svg')
|
||||
expect(logo.attributes('alt')).toBe('Claude Code')
|
||||
expect(wrapper.find('.session-item-agent-name').exists()).toBe(false)
|
||||
})
|
||||
|
||||
it('renders the Codex logo for Codex coding agent sessions', () => {
|
||||
const wrapper = mount(SessionListItem, {
|
||||
props: {
|
||||
session: { ...session, source: 'coding_agent', agent: 'codex', codingAgentId: 'codex' },
|
||||
active: false,
|
||||
pinned: false,
|
||||
canDelete: true,
|
||||
},
|
||||
global: {
|
||||
stubs: {
|
||||
ProfileAvatar: true,
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
const logo = wrapper.get('.session-item-agent-logo')
|
||||
expect(logo.attributes('src')).toBe('/coding-agents/codex-openai.png')
|
||||
expect(logo.attributes('alt')).toBe('Codex')
|
||||
expect(wrapper.find('.session-item-agent-name').exists()).toBe(false)
|
||||
})
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user