The two shipped surfaces offered different tools for no recorded reason: session checkpoints, tool-result pruning, the goal tools, and Ralph were in `tui.cordis.yml`; `tool-todo` and web search were in `web.cordis.yml`. Neither offered session search, a string-replacement editor, or a repeat-tool guard, though none of the three is surface-specific. Move the rows that are not surface-specific into `base.cordis.yml` and add those three. Web search moves there too — the TUI decision the change that made it a Web default deferred. Both surfaces now assemble the same 27 tools. This adds only. No row is removed from either surface and no existing row's configuration is edited: executors, sandbox composition, access defaults, `tools.mode`, and the workflow tool are exactly what they were. Two rows stay surface-specific: `tmux-context` (no terminal multiplexer in a browser) and `session-reference` (its index has one writer owner). Ship `dsh-mcp-client` as a dependency without a row: the plugin mounts one server per instance and `command` is required, so a default would name a third-party server and spawn it outside `ctx.bash` on every launch. The CLI README carries the YAML for mounting one from a personal config.
25 lines
954 B
TypeScript
25 lines
954 B
TypeScript
import type { Context } from 'cordis'
|
|
|
|
/**
|
|
* Marker the shipped-composition smoke gates its first prompt on. The TUI renders as soon as
|
|
* its own fiber starts, so a prompt typed at the banner can reach the loop while
|
|
* later rows — tool plugins, persistence — are still activating, and would
|
|
* assemble a partial catalog. Waiting for this line makes the turn observe the
|
|
* settled tree.
|
|
*/
|
|
export const COMPOSITION_SETTLED_MARKER = 'COMPOSITION_TREE_SETTLED'
|
|
|
|
export const name = 'composition-settled'
|
|
|
|
/**
|
|
* Announce settled Loader activation on the terminal byte stream, after every
|
|
* entry in the booted tree has started. The write is detached: awaiting the
|
|
* Loader from inside an entry would wait on this entry's own activation.
|
|
* @param ctx - the loader-mounted plugin context.
|
|
*/
|
|
export function apply(ctx: Context): void {
|
|
void ctx.loader.await().then(() => {
|
|
process.stdout.write(`\n${COMPOSITION_SETTLED_MARKER}\n`)
|
|
})
|
|
}
|