feat: unify JSON value schema DSL

This commit is contained in:
Tianyi Cui
2026-07-21 01:11:55 +08:00
parent 9a5c81f9e5
commit 8500974fd4
62 changed files with 1929 additions and 1179 deletions

View File

@@ -131,6 +131,7 @@ export function apply(ctx: Context, config: Config): void {
},
meta: {
type: 'object',
additionalProperties: true,
required: true,
description: 'The workflow identity block (plain JSON — never code).',
properties: {
@@ -142,6 +143,7 @@ export function apply(ctx: Context, config: Config): void {
description: 'Optional phase declarations matched by phase() calls.',
items: {
type: 'object',
additionalProperties: true,
properties: {
title: { type: 'string', required: true, description: 'The phase title phase() calls match by exact string.' },
detail: { type: 'string', description: 'Optional one-line description of the phase.' },
@@ -154,6 +156,7 @@ export function apply(ctx: Context, config: Config): void {
},
args: {
type: 'object',
additionalProperties: true,
description: 'Optional JSON input exposed to the script as the `args` global (wrap a bare list as a field, e.g. {"files": [...]}).',
},
},

View File

@@ -15,8 +15,8 @@
import * as vm from 'node:vm'
import type { ContentBlock } from '@deepseek-ai/dsh-llm'
import { SessionId } from '@deepseek-ai/dsh-session'
import { assertSupportedOutputSchema, OutputSchemaError } from '@deepseek-ai/dsh-tools'
import type { StructuredOutputSchema } from '@deepseek-ai/dsh-tools'
import { assertObjectJsonSchema, JsonSchemaError } from '@deepseek-ai/dsh-tools'
import type { ObjectJsonSchema } from '@deepseek-ai/dsh-tools'
import { isFatalWorkflowError, WorkflowError } from '@deepseek-ai/dsh-workflow'
import type {
WorkflowAgentEndInfo,
@@ -350,7 +350,7 @@ export class WorkflowExecution {
phase?: string
provider?: string
model?: string
schema?: StructuredOutputSchema
schema?: ObjectJsonSchema
} {
if (rawOpts === undefined) return {}
let opts: unknown
@@ -377,14 +377,14 @@ export class WorkflowExecution {
throw new WorkflowError(`agent() option "${key}" must be a string`, 'INVALID_ARGUMENT')
}
}
let schema: StructuredOutputSchema | undefined
let schema: ObjectJsonSchema | undefined
if (record.schema !== undefined) {
try {
assertSupportedOutputSchema(record.schema)
assertObjectJsonSchema(record.schema)
schema = record.schema
} catch (error: unknown) {
/* v8 ignore next -- defensive rethrow arm: assertSupportedOutputSchema only throws OutputSchemaError */
if (!(error instanceof OutputSchemaError)) throw error
/* v8 ignore next -- defensive rethrow arm: assertObjectJsonSchema only throws JsonSchemaError */
if (!(error instanceof JsonSchemaError)) throw error
throw new WorkflowError(`agent() schema is outside the supported subset — ${error.message}`, 'UNSUPPORTED_SCHEMA', { cause: error })
}
}

View File

@@ -6,7 +6,7 @@
*/
import type { ContentBlock } from '@deepseek-ai/dsh-llm'
import type { StructuredOutputSchema } from '@deepseek-ai/dsh-tools'
import type { ObjectJsonSchema } from '@deepseek-ai/dsh-tools'
import type { WorkflowMeta } from '@deepseek-ai/dsh-workflow'
/**
@@ -41,7 +41,7 @@ export interface ChildStartRequest {
/** The child's prompt text. */
prompt: string
/** The structured-output schema, if the call passed one (already subset-checked). */
schema?: StructuredOutputSchema
schema?: ObjectJsonSchema
/** The per-child provider override, if the call passed one. */
provider?: string
/** The per-child model override, if the call passed one. */