@zhushanwen/pi-subagent-workflow 8.3.0 → 8.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +18 -4
- package/relay/relay.mjs +390 -0
- package/skills/subagent-ext-config/SKILL.md +80 -0
- package/src/execution/__tests__/agent-registry.test.ts +110 -0
- package/src/execution/__tests__/chat-engine-routing.test.ts +597 -0
- package/src/execution/__tests__/execution-record.test.ts +127 -1
- package/src/execution/__tests__/pi-invocation.test.ts +62 -1
- package/src/execution/__tests__/relay-agent.test.ts +448 -0
- package/src/execution/__tests__/relay-env.test.ts +42 -0
- package/src/execution/__tests__/startup-config-declaration.test.ts +35 -0
- package/src/execution/__tests__/stream-sink-retirement.test.ts +261 -0
- package/src/execution/__tests__/subprocess-agent-runner-routing.test.ts +310 -0
- package/src/execution/__tests__/subprocess-agent-runner.test.ts +53 -5
- package/src/execution/agent-registry.ts +10 -0
- package/src/execution/config.ts +25 -2
- package/src/execution/engine/__tests__/common/data-dir.test.ts +53 -0
- package/src/execution/engine/__tests__/common/errors.test.ts +132 -0
- package/src/execution/engine/__tests__/common/event-journal.test.ts +177 -0
- package/src/execution/engine/__tests__/common/kill-chain.test.ts +192 -0
- package/src/execution/engine/__tests__/common/nesting-guard.test.ts +81 -0
- package/src/execution/engine/__tests__/common/persona-router.test.ts +123 -0
- package/src/execution/engine/__tests__/common/pool-manager.test.ts +154 -0
- package/src/execution/engine/__tests__/common/schema-emulation.test.ts +128 -0
- package/src/execution/engine/__tests__/conformance/__fixtures__/pi-golden-events.json +28 -0
- package/src/execution/engine/__tests__/conformance/agent-event-invariants.ts +141 -0
- package/src/execution/engine/__tests__/conformance/contract.abort.test.ts +109 -0
- package/src/execution/engine/__tests__/conformance/contract.agent-events.test.ts +101 -0
- package/src/execution/engine/__tests__/conformance/contract.probe.test.ts +77 -0
- package/src/execution/engine/__tests__/conformance/contract.read-degradation.test.ts +104 -0
- package/src/execution/engine/__tests__/conformance/contract.relay.test.ts +342 -0
- package/src/execution/engine/__tests__/conformance/engine-conformance.live.test.ts +201 -0
- package/src/execution/engine/__tests__/conformance/golden-replay.pi.test.ts +76 -0
- package/src/execution/engine/__tests__/conformance/golden-replay.zcode.test.ts +79 -0
- package/src/execution/engine/__tests__/engine-discovery.test.ts +87 -0
- package/src/execution/engine/__tests__/engines-declaration.test.ts +36 -0
- package/src/execution/engine/__tests__/model-prompt.test.ts +85 -0
- package/src/execution/engine/__tests__/paths.test.ts +39 -0
- package/src/execution/engine/__tests__/registry.test.ts +120 -0
- package/src/execution/engine/__tests__/routing.test.ts +231 -0
- package/src/execution/engine/common/data-dir.ts +62 -0
- package/src/execution/engine/common/errors.ts +183 -0
- package/src/execution/engine/common/event-journal.ts +254 -0
- package/src/execution/engine/common/journal-replay.ts +62 -0
- package/src/execution/engine/common/kill-chain.ts +221 -0
- package/src/execution/engine/common/nesting-guard.ts +50 -0
- package/src/execution/engine/common/persona-router.ts +108 -0
- package/src/execution/engine/common/pool-manager.ts +226 -0
- package/src/execution/engine/common/schema-emulation.ts +189 -0
- package/src/execution/engine/common/session-view-projection.ts +51 -0
- package/src/execution/engine/engine-discovery.ts +65 -0
- package/src/execution/engine/engines/pi/__tests__/pi-engine.test.ts +469 -0
- package/src/execution/engine/engines/pi/__tests__/reader.test.ts +155 -0
- package/src/execution/engine/engines/pi/__tests__/task-spec-mapper.test.ts +164 -0
- package/src/execution/engine/engines/pi/pi-engine.ts +415 -0
- package/src/execution/engine/engines/pi/reader.ts +48 -0
- package/src/execution/engine/engines/pi/registration.ts +35 -0
- package/src/execution/engine/engines/pi/task-spec-mapper.ts +100 -0
- package/src/execution/engine/engines/zcode/__tests__/__fixtures__/zcode-golden-spawn.json +39 -0
- package/src/execution/engine/engines/zcode/__tests__/launcher.test.ts +150 -0
- package/src/execution/engine/engines/zcode/__tests__/parser.test.ts +246 -0
- package/src/execution/engine/engines/zcode/__tests__/preparer.test.ts +228 -0
- package/src/execution/engine/engines/zcode/__tests__/reader.test.ts +210 -0
- package/src/execution/engine/engines/zcode/__tests__/registration.test.ts +64 -0
- package/src/execution/engine/engines/zcode/__tests__/zcode-engine.live.test.ts +127 -0
- package/src/execution/engine/engines/zcode/__tests__/zcode-engine.test.ts +567 -0
- package/src/execution/engine/engines/zcode/constants.ts +43 -0
- package/src/execution/engine/engines/zcode/golden-sample.ts +39 -0
- package/src/execution/engine/engines/zcode/launcher.ts +161 -0
- package/src/execution/engine/engines/zcode/parser.ts +436 -0
- package/src/execution/engine/engines/zcode/preparer.ts +363 -0
- package/src/execution/engine/engines/zcode/reader.ts +381 -0
- package/src/execution/engine/engines/zcode/registration.ts +37 -0
- package/src/execution/engine/engines/zcode/zcode-engine.ts +648 -0
- package/src/execution/engine/host-task-spec.ts +47 -0
- package/src/execution/engine/model-prompt.ts +59 -0
- package/src/execution/engine/paths.ts +42 -0
- package/src/execution/engine/port.ts +153 -0
- package/src/execution/engine/registry.ts +123 -0
- package/src/execution/engine/routing.ts +218 -0
- package/src/execution/engine/types.ts +304 -0
- package/src/execution/execute-options-mapper.ts +5 -1
- package/src/execution/execution-record.ts +6 -0
- package/src/execution/model-resolver.ts +6 -0
- package/src/execution/pi-invocation.ts +32 -2
- package/src/execution/record-entry.ts +14 -0
- package/src/execution/record-store.ts +34 -0
- package/src/execution/relay-env.ts +37 -0
- package/src/execution/session-runner.ts +24 -0
- package/src/execution/stream-sink.ts +26 -0
- package/src/execution/subagent-service.ts +249 -11
- package/src/execution/subprocess-agent-runner.ts +196 -14
- package/src/execution/types.ts +56 -0
- package/src/index.ts +46 -1
- package/src/interface/command-actions.ts +72 -8
- package/src/interface/subagent-actions.ts +8 -2
- package/src/interface/subagent-tool.ts +6 -0
- package/src/interface/subagents.ts +198 -30
- package/src/orchestration/__tests__/__fixtures__/worker-template.snapshot.txt +5 -2
- package/src/orchestration/__tests__/worker-script-template-snapshot.test.ts +3 -3
- package/src/orchestration/models/types.ts +7 -0
- package/src/orchestration/worker-script-builder.ts +5 -2
- package/src/shared/meta-parser.ts +5 -1
- package/src/shared/resource-meta.ts +5 -0
|
@@ -66,7 +66,7 @@ const WORKER_TEMPLATE_PRE = [
|
|
|
66
66
|
'const _workerLogs = [];',
|
|
67
67
|
'// IF6(#12): known agent() fields — hoisted to module scope, built once per worker',
|
|
68
68
|
'// (was rebuilt inside agent() on every call; field set is call-invariant).',
|
|
69
|
-
'const _KNOWN_FIELDS = new Set(["prompt", "description", "schema", "model", "scene", "label", "task", "agent", "phase", "skill", "timeoutMs", "cwd", "fork", "worktree", "returnMeta", "thinkingLevel"]);',
|
|
69
|
+
'const _KNOWN_FIELDS = new Set(["prompt", "description", "schema", "model", "scene", "label", "task", "agent", "phase", "skill", "timeoutMs", "cwd", "fork", "worktree", "returnMeta", "thinkingLevel", "engine"]);',
|
|
70
70
|
'function _pushWorkerLog(level, args) {',
|
|
71
71
|
' try { _workerLogs.push({ level, message: args.map((a) => typeof a === "string" ? a : JSON.stringify(a)).join(" ") }); } catch (e) { /* swallow */ }',
|
|
72
72
|
'}',
|
|
@@ -210,6 +210,8 @@ const WORKER_TEMPLATE_PRE = [
|
|
|
210
210
|
' scene: (secondArg && typeof secondArg === "object" && secondArg.scene) || undefined,\n' +
|
|
211
211
|
' phase: (secondArg && typeof secondArg === "object" && secondArg.phase) || undefined,',
|
|
212
212
|
' thinkingLevel: (secondArg && typeof secondArg === "object" && secondArg.thinkingLevel) || $THINKING_LEVEL,',
|
|
213
|
+
' // P4 D9③:step 级 engine 显式指定(仅限必须某引擎独有能力的场景)',
|
|
214
|
+
' engine: (secondArg && typeof secondArg === "object" && secondArg.engine) || undefined,',
|
|
213
215
|
' };',
|
|
214
216
|
' } else if (typeof firstArg === "object" && firstArg !== null) {',
|
|
215
217
|
' if (firstArg.prompt) {',
|
|
@@ -231,6 +233,7 @@ const WORKER_TEMPLATE_PRE = [
|
|
|
231
233
|
' worktree: firstArg.worktree,',
|
|
232
234
|
' returnMeta: firstArg.returnMeta,',
|
|
233
235
|
' thinkingLevel: firstArg.thinkingLevel || $THINKING_LEVEL,',
|
|
236
|
+
' engine: firstArg.engine,',
|
|
234
237
|
' };',
|
|
235
238
|
' } else {',
|
|
236
239
|
' opts = firstArg;',
|
|
@@ -247,7 +250,7 @@ const WORKER_TEMPLATE_PRE = [
|
|
|
247
250
|
' // Validate known agent() fields to catch API misuse early (_KNOWN_FIELDS at module scope)',
|
|
248
251
|
' const _unknownFields = Object.keys(opts).filter((k) => !_KNOWN_FIELDS.has(k));',
|
|
249
252
|
' if (_unknownFields.length > 0) {',
|
|
250
|
-
' _pushWorkerLog("warn", ["[workflow] agent() received unknown fields: " + _unknownFields.join(", ") + ". Known fields: prompt, description, schema, model, scene, label, task, agent, phase, skill, timeoutMs, cwd, fork, worktree, returnMeta, thinkingLevel"]);',
|
|
253
|
+
' _pushWorkerLog("warn", ["[workflow] agent() received unknown fields: " + _unknownFields.join(", ") + ". Known fields: prompt, description, schema, model, scene, label, task, agent, phase, skill, timeoutMs, cwd, fork, worktree, returnMeta, thinkingLevel, engine"]);',
|
|
251
254
|
' }',
|
|
252
255
|
'',
|
|
253
256
|
' const callId = _callIdCounter;',
|
|
@@ -88,7 +88,9 @@ function typecheckMeta(raw: unknown, kind: ResourceKind): ResourceMeta | null {
|
|
|
88
88
|
|
|
89
89
|
if (kind === "workflow") {
|
|
90
90
|
// minor-2:agent 专属字段不可出现在 workflow(串类 reject)
|
|
91
|
-
if (o.examples !== undefined || o.tools !== undefined || o.model !== undefined)
|
|
91
|
+
if (o.examples !== undefined || o.tools !== undefined || o.model !== undefined || o.engine !== undefined) {
|
|
92
|
+
return null;
|
|
93
|
+
}
|
|
92
94
|
// phases 必填数组,元素为 string | {title:string, detail?:string}
|
|
93
95
|
if (!Array.isArray(o.phases)) return null;
|
|
94
96
|
const phases: WorkflowMeta["phases"] = [];
|
|
@@ -156,6 +158,7 @@ function typecheckMeta(raw: unknown, kind: ResourceKind): ResourceMeta | null {
|
|
|
156
158
|
}
|
|
157
159
|
}
|
|
158
160
|
const model = isString(o.model) ? o.model : undefined;
|
|
161
|
+
const engine = isString(o.engine) ? o.engine : undefined;
|
|
159
162
|
|
|
160
163
|
const meta: AgentMeta = {
|
|
161
164
|
kind: "agent",
|
|
@@ -164,6 +167,7 @@ function typecheckMeta(raw: unknown, kind: ResourceKind): ResourceMeta | null {
|
|
|
164
167
|
...(examples !== undefined ? { examples } : {}),
|
|
165
168
|
...(tools !== undefined ? { tools } : {}),
|
|
166
169
|
...(model !== undefined ? { model } : {}),
|
|
170
|
+
...(engine !== undefined ? { engine } : {}),
|
|
167
171
|
...(when !== undefined ? { when } : {}),
|
|
168
172
|
...(notFor !== undefined ? { notFor } : {}),
|
|
169
173
|
};
|
|
@@ -54,6 +54,11 @@ export interface AgentMeta extends ResourceMetaBase {
|
|
|
54
54
|
/** 供 AgentRegistry 执行侧 spawn 时注入,不进 system prompt 注入段。 */
|
|
55
55
|
tools?: string[];
|
|
56
56
|
model?: string;
|
|
57
|
+
/**
|
|
58
|
+
* 执行引擎 id(D9 per-agent 主通道:调用参数 engine > 本字段 > 全局默认)。
|
|
59
|
+
* 与 model 字段同风格——路由字段(不进 system prompt),执行侧(P4 路由层)消费。
|
|
60
|
+
*/
|
|
61
|
+
engine?: string;
|
|
57
62
|
}
|
|
58
63
|
|
|
59
64
|
/** 判别联合(kind 判别)。 */
|