Files
deepseek-harness/packages/preset/agent-presets/tests/fixtures/plugins/contribute.js
Yichen Jiang bdf5e39986 fix(cli): give the shipped preset's todo tool its required config
master made `allowParallelInProgress` a required field on dsh-tool-todo, so
every composition must choose it. The base patch was updated with the field,
but the Web surface takes `tool-todo` from the mounted preset instead, and
that row carried no config — so the `standard` preset failed to mount and
every session on the Web surface died at setup.

Also make the preset tree's write test reach the override. Tearing the agent
down stops in the loader's own "tree is being disposed" case before any write;
a live row reconfiguring itself is the trigger that actually gets there.
2026-08-07 14:25:35 +08:00

26 lines
1.2 KiB
JavaScript

// A preset row: registers one tool and one prompt section, both named from
// config. Import-free on purpose — the Loader resolves entry modules through
// Node's ESM resolver, which cannot see this workspace's TypeScript sources.
export const name = 'contribute'
export const inject = ['tools', 'systemPrompt']
export function apply(ctx, config) {
ctx.effect(() => ctx.tools.register({
name: config.tool,
description: `fixture tool ${config.tool}`,
parameters: { type: 'object', properties: {}, additionalProperties: false },
output: { schema: { type: 'string' }, render: (_args, value) => [{ type: 'text', text: String(value) }] },
execute: () => Promise.resolve(config.tool),
}))
ctx.effect(() => ctx.systemPrompt.section({
name: `preset:${config.tool}`,
order: 10,
text: `section for ${config.tool}`,
}))
// Reconfiguring a live row runs the Loader's `internal/update` waterfall,
// which persists the owning tree. That is the trigger reaching the preset
// tree's `write` while the subtree is still mounted; tearing the agent down
// instead stops earlier, in the loader's own "tree is being disposed" case.
globalThis.__RECONFIGURE__ = tool => ctx.fiber.update({ ...config, tool })
}