feat(workflow): add fresh-agent Ralph tool

This commit is contained in:
Tianyi Cui
2026-07-20 00:51:19 +08:00
parent 207692bc16
commit b808026859
58 changed files with 1599 additions and 22 deletions

View File

@@ -27,16 +27,30 @@ import WorkerWorkflowEngine from '@deepseek-ai/dsh-workflow-workerthread'
const ctx = new Context()
await ctx.plugin(SubagentService)
await ctx.plugin(WorkerWorkflowEngine, {})
let selectedStarts = 0
ctx.subagents.registerProvider({
name: 'built-selected',
capabilities: { outputSchema: true, depthLimit: false, toolFilter: false, persona: false },
inheritsParentContext: false,
async start() {
selectedStarts += 1
return {
id: 'built-child',
result: Promise.resolve({ output: [], structured: { answer: 42 }, stopReason: 'completed' }),
dispose: () => Promise.resolve(),
}
},
})
await ctx.plugin(WorkerWorkflowEngine, { provider: 'must-not-be-used' })
const run = ctx.workflows.start({
script: 'return 6 * 7',
script: "const value = await agent('answer', { schema: { type: 'object', properties: { answer: { type: 'number' } }, required: ['answer'] } }); return value.answer",
meta: { name: 'built-smoke', description: 'built worker smoke' },
// A zero-agent script never touches the provider.
subagentProvider: 'built-selected',
parent: { id: 'built-smoke-parent', options: {} },
})
const result = await run.result
await run.dispose()
if (result.stopReason !== 'completed' || result.value !== 42) {
if (result.stopReason !== 'completed' || result.value !== 42 || selectedStarts !== 1) {
console.error('unexpected result: ' + JSON.stringify(result))
process.exit(1)
}

View File

@@ -232,6 +232,26 @@ describe('dsh-workflow-workerthread', () => {
expect(provider.runs[0]!.request.agentOptions).toEqual({ provider: 'openai' })
})
it('a start-request provider override selects every child without changing the engine default', async () => {
const { ctx, parent, provider } = await setup()
const selected = new StubProvider('selected', () => text('selected reply'))
ctx.subagents.registerProvider(selected)
const overridden = ctx.workflows.start({
...scripted("return await agent('route this run')"),
parent,
subagentProvider: 'selected',
})
expect((await overridden.result).value).toBe('selected reply')
await overridden.dispose()
expect(selected.runs).toHaveLength(1)
expect(provider.runs).toHaveLength(0)
const ordinary = await run(ctx, parent, scripted("return await agent('use the default')"))
expect(ordinary.value).toBe('stub reply')
expect(provider.runs).toHaveLength(1)
})
it('a fatal hook error inside the worker kills the script and reports the error', async () => {
const { ctx, parent } = await setup()
const result = await run(ctx, parent, scripted("return await parallel([() => agent('x', { isolation: 'worktree' })])"))