Restore Cordis mount and unmount names

Keep temporary lifecycle descriptions and UI labels explicit.
This commit is contained in:
NI0317
2026-07-27 21:20:06 +08:00
parent 826c6fd243
commit 1ef285d038
80 changed files with 578 additions and 567 deletions

View File

@@ -172,21 +172,21 @@ describe('run_code sub-calls through the real chat machinery', () => {
const code = 'return { name: "audit", apply(ctx) {} }'
const dispatches = new Map([[parent, [
subCall(11, parent, 1, 'cordis_inspect', { what: 'temporary' }, '## Temporary Plugins'),
subCall(12, parent, 2, 'cordis_try', { code }, 'Temporary Plugin dyn-2 is running'),
subCall(13, parent, 3, 'cordis_stop', { id: 'dyn-2' }, 'Temporary Plugin dyn-2 was stopped and removed.'),
subCall(12, parent, 2, 'cordis_mount', { code }, 'Temporary Plugin dyn-2 is running'),
subCall(13, parent, 3, 'cordis_unmount', { id: 'dyn-2' }, 'Temporary Plugin dyn-2 was unmounted and removed.'),
]]])
const b = await bench(snapshotWith([codeResult(10, parent)], dispatches))
const view = mountApp(b.slots)
const nest = view.container.querySelector('[data-subcalls]')!
expect(nest.querySelector('[data-tool="cordis_inspect"]')?.textContent).toContain('Inspect')
const tried = nest.querySelector('[data-variant="code"]')
expect(tried?.textContent).toContain(`Try temporary Plugin${code}`)
expect(nest.querySelector('[data-tool="cordis_stop"]')?.textContent)
.toContain('Stop temporary Plugindyn-2')
const mounted = nest.querySelector('[data-variant="code"]')
expect(mounted?.textContent).toContain(`Mount temporary Plugin${code}`)
expect(nest.querySelector('[data-tool="cordis_unmount"]')?.textContent)
.toContain('Unmount temporary Plugindyn-2')
fireEvent.click(tried!.querySelector('button[aria-expanded]')!)
expect(tried!.querySelector('pre.shiki')?.textContent).toBe(code)
fireEvent.click(mounted!.querySelector('button[aria-expanded]')!)
expect(mounted!.querySelector('pre.shiki')?.textContent).toBe(code)
})
it('expanding the code row reveals the program body verbatim (shiki-tokenized)', async () => {

View File

@@ -32,8 +32,8 @@ describe('tool-call-model', () => {
expect(classifyTool('write')).toBe('write')
expect(classifyTool('edit')).toBe('edit')
expect(classifyTool('cordis_inspect')).toBe('read')
expect(classifyTool('cordis_try')).toBe('code')
expect(classifyTool('cordis_stop')).toBe('others')
expect(classifyTool('cordis_mount')).toBe('code')
expect(classifyTool('cordis_unmount')).toBe('others')
expect(classifyTool('todo_write')).toBe('others')
})
@@ -80,20 +80,20 @@ describe('tool-call-model', () => {
title: 'Inspect',
summary: 'api',
})
expect(toolRowModel('cordis_try', running({
name: 'cordis_try',
expect(toolRowModel('cordis_mount', running({
name: 'cordis_mount',
argsRaw: '{"code":"return { name: \\"audit\\", apply(ctx) {} }"}',
}))).toMatchObject({
variant: 'code',
title: 'Try temporary Plugin',
title: 'Mount temporary Plugin',
summary: 'return { name: "audit", apply(ctx) {} }',
body: 'return { name: "audit", apply(ctx) {} }',
})
expect(toolRowModel('cordis_stop', result({
call: { name: 'cordis_stop', argsRaw: '{"id":"dyn-2"}' },
expect(toolRowModel('cordis_unmount', result({
call: { name: 'cordis_unmount', argsRaw: '{"id":"dyn-2"}' },
}))).toMatchObject({
variant: 'others',
title: 'Stop temporary Plugin',
title: 'Unmount temporary Plugin',
summary: 'dyn-2',
})
})

View File

@@ -166,19 +166,19 @@ describe('keyed toolview hole through the real machinery', () => {
const code = 'return { name: "audit", apply(ctx) {} }'
const b = await bench([
toolResult(3, 'cordis-1', 'cordis_inspect', '{"what":"api","name":"tools"}'),
toolResult(4, 'cordis-2', 'cordis_try', JSON.stringify({ code })),
toolResult(5, 'cordis-3', 'cordis_stop', '{"id":"dyn-2"}'),
toolResult(4, 'cordis-2', 'cordis_mount', JSON.stringify({ code })),
toolResult(5, 'cordis-3', 'cordis_unmount', '{"id":"dyn-2"}'),
])
const view = mountApp(b.slots)
expect(view.container.querySelector('[data-tool="cordis_inspect"]')?.textContent).toContain('Inspect')
const tried = view.container.querySelector('[data-variant="code"]')
expect(tried?.textContent).toContain(`Try temporary Plugin${code}`)
expect(view.container.querySelector('[data-tool="cordis_stop"]')?.textContent)
.toContain('Stop temporary Plugindyn-2')
const mounted = view.container.querySelector('[data-variant="code"]')
expect(mounted?.textContent).toContain(`Mount temporary Plugin${code}`)
expect(view.container.querySelector('[data-tool="cordis_unmount"]')?.textContent)
.toContain('Unmount temporary Plugindyn-2')
fireEvent.click(tried!.querySelector('button[aria-expanded]')!)
expect(tried!.querySelector('pre.shiki')?.textContent).toBe(code)
fireEvent.click(mounted!.querySelector('button[aria-expanded]')!)
expect(mounted!.querySelector('pre.shiki')?.textContent).toBe(code)
})
it('row clicks travel owner openDetails → chat inject → layout orchestration', async () => {