@pellux/goodvibes-sdk 0.33.22 → 0.33.24
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/dist/contracts/artifacts/operator-contract.json +1 -1
- package/dist/platform/companion/companion-chat-manager.d.ts +1 -0
- package/dist/platform/companion/companion-chat-manager.d.ts.map +1 -1
- package/dist/platform/companion/companion-chat-manager.js +48 -1
- package/dist/platform/core/orchestrator-turn-helpers.d.ts +1 -0
- package/dist/platform/core/orchestrator-turn-helpers.d.ts.map +1 -1
- package/dist/platform/core/orchestrator-turn-helpers.js +27 -4
- package/dist/platform/core/orchestrator-turn-loop.d.ts.map +1 -1
- package/dist/platform/core/orchestrator-turn-loop.js +1 -0
- package/dist/platform/tools/agent/index.d.ts.map +1 -1
- package/dist/platform/tools/agent/index.js +2 -0
- package/dist/platform/tools/agent/manager.d.ts.map +1 -1
- package/dist/platform/tools/agent/manager.js +56 -2
- package/dist/platform/tools/agent/schema.d.ts +1 -0
- package/dist/platform/tools/agent/schema.d.ts.map +1 -1
- package/dist/platform/tools/agent/schema.js +5 -1
- package/dist/platform/tools/agent/wrfc-batch-policy.d.ts +28 -0
- package/dist/platform/tools/agent/wrfc-batch-policy.d.ts.map +1 -1
- package/dist/platform/tools/agent/wrfc-batch-policy.js +158 -5
- package/dist/platform/version.js +1 -1
- package/package.json +9 -9
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"companion-chat-manager.d.ts","sourceRoot":"","sources":["../../../src/platform/companion/companion-chat-manager.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"companion-chat-manager.d.ts","sourceRoot":"","sources":["../../../src/platform/companion/companion-chat-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -35,6 +35,13 @@ const DEFAULT_IDLE_ACTIVE_MS = 30 * 60 * 1_000; // 30 minutes with messages
|
|
|
35
35
|
const DEFAULT_IDLE_EMPTY_MS = 5 * 60 * 1_000; // 5 minutes empty session
|
|
36
36
|
const GC_INTERVAL_MS = 60 * 1_000; // sweep every minute
|
|
37
37
|
const MAX_TOOL_ROUNDS_PER_TURN = 8;
|
|
38
|
+
const TOOL_EXHAUSTION_FINALIZER_PROMPT = [
|
|
39
|
+
`The tool-call budget for this turn is exhausted after ${MAX_TOOL_ROUNDS_PER_TURN} rounds.`,
|
|
40
|
+
'Do not call any more tools. Use the conversation and tool results already available to give '
|
|
41
|
+
+ 'the user the best concise final answer you can.',
|
|
42
|
+
'If the available tool results are insufficient, say what is missing and ask one short follow-up '
|
|
43
|
+
+ 'question.',
|
|
44
|
+
].join(' ');
|
|
38
45
|
const MAX_ATTACHMENTS_PER_MESSAGE = 8;
|
|
39
46
|
const MAX_INLINE_IMAGE_ATTACHMENT_BYTES = 20 * 1024 * 1024;
|
|
40
47
|
const MAX_INLINE_TEXT_ATTACHMENT_BYTES = 200 * 1024;
|
|
@@ -558,7 +565,18 @@ export class CompanionChatManager {
|
|
|
558
565
|
session.conversation.addToolResults(toolResults);
|
|
559
566
|
}
|
|
560
567
|
if (!completed && !abortSignal.aborted) {
|
|
561
|
-
|
|
568
|
+
const finalResponse = await this._finalizeAfterToolExhaustion(session, abortSignal, turnId, publish);
|
|
569
|
+
if (finalResponse.trim()) {
|
|
570
|
+
assistantContent += finalResponse;
|
|
571
|
+
session.conversation.addAssistantMessage(finalResponse);
|
|
572
|
+
completed = true;
|
|
573
|
+
}
|
|
574
|
+
else {
|
|
575
|
+
const fallbackResponse = 'I could not finish a final answer after using the available tools. Please try again with a narrower request.';
|
|
576
|
+
assistantContent += fallbackResponse;
|
|
577
|
+
session.conversation.addAssistantMessage(fallbackResponse);
|
|
578
|
+
completed = true;
|
|
579
|
+
}
|
|
562
580
|
}
|
|
563
581
|
const now = Date.now();
|
|
564
582
|
const assistantMsg = {
|
|
@@ -595,6 +613,35 @@ export class CompanionChatManager {
|
|
|
595
613
|
}
|
|
596
614
|
}
|
|
597
615
|
}
|
|
616
|
+
async _finalizeAfterToolExhaustion(session, abortSignal, turnId, publish) {
|
|
617
|
+
const sessionId = session.meta.id;
|
|
618
|
+
let finalContent = '';
|
|
619
|
+
const stream = this.provider.chatStream([...session.conversation.getMessagesForLLM()], {
|
|
620
|
+
systemPrompt: appendGoodVibesRuntimeAwarenessPrompt([session.meta.systemPrompt, TOOL_EXHAUSTION_FINALIZER_PROMPT].filter(Boolean).join('\n\n')),
|
|
621
|
+
model: session.meta.model,
|
|
622
|
+
provider: session.meta.provider,
|
|
623
|
+
abortSignal,
|
|
624
|
+
});
|
|
625
|
+
for await (const chunk of stream) {
|
|
626
|
+
if (abortSignal.aborted)
|
|
627
|
+
break;
|
|
628
|
+
switch (chunk.type) {
|
|
629
|
+
case 'text_delta': {
|
|
630
|
+
const delta = chunk.delta ?? '';
|
|
631
|
+
finalContent += delta;
|
|
632
|
+
publish({ type: 'turn.delta', sessionId, turnId, delta });
|
|
633
|
+
break;
|
|
634
|
+
}
|
|
635
|
+
case 'error':
|
|
636
|
+
throw new Error(chunk.error ?? 'Provider streaming error');
|
|
637
|
+
case 'tool_call':
|
|
638
|
+
case 'tool_result':
|
|
639
|
+
case 'done':
|
|
640
|
+
break;
|
|
641
|
+
}
|
|
642
|
+
}
|
|
643
|
+
return finalContent;
|
|
644
|
+
}
|
|
598
645
|
async _executeToolCalls(toolCalls, publish, sessionId, turnId) {
|
|
599
646
|
const toolRegistry = this.toolRegistry;
|
|
600
647
|
if (!toolRegistry)
|
|
@@ -25,6 +25,7 @@ export declare function handleToolResponseOutcome(args: {
|
|
|
25
25
|
emitterContext: EmitterContextFactory;
|
|
26
26
|
turnId: string;
|
|
27
27
|
response: ChatResponseWithReasoning;
|
|
28
|
+
userText: string;
|
|
28
29
|
executeToolCalls: (turnId: string, calls: ToolCall[]) => Promise<ToolResult[]>;
|
|
29
30
|
setPendingToolCalls: (calls: ToolCall[]) => void;
|
|
30
31
|
messageQueueLength: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orchestrator-turn-helpers.d.ts","sourceRoot":"","sources":["../../../src/platform/core/orchestrator-turn-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAGjE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAY,MAAM,qBAAqB,CAAC;AACnE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAIlE,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAG5D,KAAK,qBAAqB,GAAG,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,8BAA8B,EAAE,cAAc,CAAC;AACvG,MAAM,MAAM,yBAAyB,GAAG,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG;IACjF,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,gBAAgB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACvC,CAAC;AAQF,wBAAgB,gCAAgC,CAC9C,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,OAAO,EACpB,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE,QAAQ,CAAC,GAAG,IAAI,EACvD,UAAU,EAAE,eAAe,GAAG,IAAI,EAClC,cAAc,EAAE,qBAAqB,EACrC,MAAM,EAAE,MAAM,GACb,IAAI,CAoBN;AAED,wBAAgB,0BAA0B,CACxC,YAAY,EAAE,mBAAmB,EACjC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,EAAE,iBAAiB,CAAC,EAC3D,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,WAAW,EAAE,GAAG,SAAS,EAClC,SAAS,CAAC,EAAE,MAAM,EAClB,WAAW,GAAE,IAAI,CAAC,oBAAoB,EAAE,WAAW,GAAG,YAAY,CAAC,GAAG,IAAW,GAChF,aAAa,GAAG,IAAI,CAkDtB;
|
|
1
|
+
{"version":3,"file":"orchestrator-turn-helpers.d.ts","sourceRoot":"","sources":["../../../src/platform/core/orchestrator-turn-helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -75,17 +75,40 @@ export function prepareConversationForTurn(conversation, providerRegistry, text,
|
|
|
75
75
|
}
|
|
76
76
|
return preTurnPlan;
|
|
77
77
|
}
|
|
78
|
+
function attachAuthoritativeTaskToAgentCalls(toolCalls, userText) {
|
|
79
|
+
const authoritativeTask = userText.trim();
|
|
80
|
+
if (!authoritativeTask)
|
|
81
|
+
return [...toolCalls];
|
|
82
|
+
return toolCalls.map((call) => {
|
|
83
|
+
if (call.name !== 'agent')
|
|
84
|
+
return call;
|
|
85
|
+
const args = call.arguments;
|
|
86
|
+
const mode = args.mode;
|
|
87
|
+
if (mode !== 'spawn' && mode !== 'batch-spawn')
|
|
88
|
+
return call;
|
|
89
|
+
if (typeof args.parentAgentId === 'string' && args.parentAgentId.trim().length > 0)
|
|
90
|
+
return call;
|
|
91
|
+
return {
|
|
92
|
+
...call,
|
|
93
|
+
arguments: {
|
|
94
|
+
...args,
|
|
95
|
+
authoritativeTask,
|
|
96
|
+
},
|
|
97
|
+
};
|
|
98
|
+
});
|
|
99
|
+
}
|
|
78
100
|
export async function handleToolResponseOutcome(args) {
|
|
79
|
-
|
|
101
|
+
const toolCalls = attachAuthoritativeTaskToAgentCalls(args.response.toolCalls, args.userText);
|
|
102
|
+
args.setPendingToolCalls(toolCalls);
|
|
80
103
|
args.conversation.addAssistantMessage(args.response.content, {
|
|
81
|
-
toolCalls
|
|
104
|
+
toolCalls,
|
|
82
105
|
reasoningContent: args.response.reasoning || undefined,
|
|
83
106
|
reasoningSummary: args.response.reasoningSummary || undefined,
|
|
84
107
|
usage: args.response.usage,
|
|
85
108
|
model: args.providerRegistry.getCurrentModel().displayName,
|
|
86
109
|
provider: args.providerRegistry.getCurrentModel().provider,
|
|
87
110
|
});
|
|
88
|
-
const results = await args.executeToolCalls(args.turnId,
|
|
111
|
+
const results = await args.executeToolCalls(args.turnId, toolCalls);
|
|
89
112
|
args.conversation.addToolResults(results);
|
|
90
113
|
args.setPendingToolCalls([]);
|
|
91
114
|
const allImages = results
|
|
@@ -98,7 +121,7 @@ export async function handleToolResponseOutcome(args) {
|
|
|
98
121
|
];
|
|
99
122
|
args.conversation.addUserMessage(imageParts);
|
|
100
123
|
}
|
|
101
|
-
const spawnedAgents =
|
|
124
|
+
const spawnedAgents = toolCalls.some((tc) => {
|
|
102
125
|
const mode = tc.arguments.mode;
|
|
103
126
|
return tc.name === 'agent' && (mode === 'spawn' || mode === 'batch-spawn');
|
|
104
127
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orchestrator-turn-loop.d.ts","sourceRoot":"","sources":["../../../src/platform/core/orchestrator-turn-loop.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"orchestrator-turn-loop.d.ts","sourceRoot":"","sources":["../../../src/platform/core/orchestrator-turn-loop.ts"],"names":[],"mappings":"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"}
|
|
@@ -273,6 +273,7 @@ export async function executeOrchestratorTurnLoop(context) {
|
|
|
273
273
|
emitterContext: (id) => context.emitterContext(id),
|
|
274
274
|
turnId: context.turnId,
|
|
275
275
|
response: enrichedResponse,
|
|
276
|
+
userText: context.text,
|
|
276
277
|
executeToolCalls: (id, calls) => context.executeToolCalls(id, calls),
|
|
277
278
|
setPendingToolCalls: (calls) => { context.setPendingToolCalls(calls); },
|
|
278
279
|
messageQueueLength: context.getMessageQueueLength(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/platform/tools/agent/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAG7D,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,EAAmB,YAAY,EAAoB,MAAM,cAAc,CAAC;AAK/E,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/platform/tools/agent/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAG7D,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,EAAmB,YAAY,EAAoB,MAAM,cAAc,CAAC;AAK/E,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAgH7D,wBAAgB,eAAe,CAAC,MAAM,EAAE;IACtC,OAAO,EAAE,YAAY,CAAC;IACtB,UAAU,EAAE,IAAI,CAAC,eAAe,EAAE,aAAa,GAAG,MAAM,CAAC,CAAC;IAC1D,cAAc,CAAC,EAAE,IAAI,CAAC,cAAc,EAAE,YAAY,CAAC,GAAG,SAAS,CAAC;IAChE,eAAe,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,eAAe,CAAC,GAAG,SAAS,CAAC;IACrE,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;CAC3C,GAAG,IAAI,CAulBP"}
|
|
@@ -85,6 +85,7 @@ function batchTaskToSpawnInput(input, taskDef) {
|
|
|
85
85
|
return {
|
|
86
86
|
mode: 'spawn',
|
|
87
87
|
task: taskDef.task,
|
|
88
|
+
authoritativeTask: input.authoritativeTask ?? input.task,
|
|
88
89
|
template: taskDef.template ?? input.template ?? 'general',
|
|
89
90
|
model: taskDef.model ?? input.model,
|
|
90
91
|
provider: taskDef.provider ?? input.provider,
|
|
@@ -501,6 +502,7 @@ export function createAgentTool(config) {
|
|
|
501
502
|
collapsedTaskCount: input.tasks.length,
|
|
502
503
|
reason: batchPolicy.reason,
|
|
503
504
|
roleTaskIndexes: batchPolicy.roleTaskIndexes ?? [],
|
|
505
|
+
scopeMutation: batchPolicy.scopeMutation ?? null,
|
|
504
506
|
...agentOrchestrationControl(record),
|
|
505
507
|
}),
|
|
506
508
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../../src/platform/tools/agent/manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAE7D,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAcrE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AAE1E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAG9C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../../src/platform/tools/agent/manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,7 +7,7 @@ import { evaluateOrchestrationSpawn } from '../../runtime/orchestration/spawn-po
|
|
|
7
7
|
import { logger } from '../../utils/logger.js';
|
|
8
8
|
import { summarizeError } from '../../utils/error-display.js';
|
|
9
9
|
import { splitModelRegistryKey } from '../../providers/registry-helpers.js';
|
|
10
|
-
import { isRootReviewRoleTask } from './wrfc-batch-policy.js';
|
|
10
|
+
import { isRootReviewRoleTask, resolveAuthoritativeWrfcScope, resolveImplementationToolContract, resolveNarrowedRootSpawnScope, } from './wrfc-batch-policy.js';
|
|
11
11
|
export const AGENT_TEMPLATES = {
|
|
12
12
|
engineer: {
|
|
13
13
|
description: 'Full-stack implementation agent',
|
|
@@ -100,25 +100,79 @@ export class AgentManager {
|
|
|
100
100
|
}
|
|
101
101
|
let template = input.template ?? 'general';
|
|
102
102
|
let wrfcRouteReason;
|
|
103
|
-
|
|
103
|
+
const rootReviewRoleTask = !input.parentAgentId && isRootReviewRoleTask({ task, template });
|
|
104
|
+
if (rootReviewRoleTask) {
|
|
104
105
|
wrfcRouteReason = 'root-review-role-normalized';
|
|
106
|
+
const scope = resolveAuthoritativeWrfcScope(input, task);
|
|
107
|
+
const toolContract = input.authoritativeTask || scope.scopeMutation
|
|
108
|
+
? resolveImplementationToolContract({
|
|
109
|
+
tools: input.tools,
|
|
110
|
+
restrictTools: input.restrictTools,
|
|
111
|
+
authoritativeTask: scope.task,
|
|
112
|
+
proposedTask: task,
|
|
113
|
+
scopeMutation: scope.scopeMutation,
|
|
114
|
+
})
|
|
115
|
+
: { tools: input.tools, restrictTools: input.restrictTools, scopeMutation: scope.scopeMutation };
|
|
105
116
|
input = {
|
|
106
117
|
...input,
|
|
118
|
+
task: scope.task,
|
|
119
|
+
authoritativeTask: scope.task,
|
|
120
|
+
tools: toolContract.tools,
|
|
121
|
+
restrictTools: toolContract.restrictTools,
|
|
107
122
|
template: 'engineer',
|
|
108
123
|
reviewMode: 'wrfc',
|
|
109
124
|
dangerously_disable_wrfc: false,
|
|
110
125
|
context: [
|
|
111
126
|
input.context?.trim(),
|
|
112
127
|
'SDK WRFC topology enforcement normalized this root review/test/verification task into a single owner chain. Review, test, verification, and fix work are lifecycle phases owned by the WRFC controller, not independent root agents.',
|
|
128
|
+
`Authoritative original ask for this WRFC chain:\n${scope.task}`,
|
|
129
|
+
toolContract.scopeMutation
|
|
130
|
+
? `Scope mutation warning: ${toolContract.scopeMutation.warnings.join(' ')} Model-proposed child scope:\n${toolContract.scopeMutation.proposedTask}`
|
|
131
|
+
: undefined,
|
|
113
132
|
].filter((part) => Boolean(part)).join('\n\n'),
|
|
114
133
|
successCriteria: [
|
|
115
134
|
...(input.successCriteria ?? []),
|
|
135
|
+
`Satisfy the authoritative WRFC ask exactly: ${scope.task}`,
|
|
136
|
+
'Do not treat model-invented review/test/design/no-write wording as limiting scope unless it appears in the authoritative ask.',
|
|
116
137
|
'Keep the work as one WRFC owner chain; review, test, verification, and fix phases must remain lifecycle children.',
|
|
117
138
|
],
|
|
118
139
|
};
|
|
119
140
|
task = input.task ?? task;
|
|
120
141
|
template = input.template ?? 'engineer';
|
|
121
142
|
}
|
|
143
|
+
else if (!input.parentAgentId) {
|
|
144
|
+
const scope = resolveNarrowedRootSpawnScope(input, task);
|
|
145
|
+
const toolContract = input.authoritativeTask || scope.scopeMutation
|
|
146
|
+
? resolveImplementationToolContract({
|
|
147
|
+
tools: input.tools,
|
|
148
|
+
restrictTools: input.restrictTools,
|
|
149
|
+
authoritativeTask: scope.task,
|
|
150
|
+
proposedTask: task,
|
|
151
|
+
scopeMutation: scope.scopeMutation,
|
|
152
|
+
})
|
|
153
|
+
: { tools: input.tools, restrictTools: input.restrictTools, scopeMutation: scope.scopeMutation };
|
|
154
|
+
if (scope.scopeMutation || toolContract.scopeMutation !== scope.scopeMutation) {
|
|
155
|
+
input = {
|
|
156
|
+
...input,
|
|
157
|
+
task: scope.task,
|
|
158
|
+
tools: toolContract.tools,
|
|
159
|
+
restrictTools: toolContract.restrictTools,
|
|
160
|
+
context: [
|
|
161
|
+
input.context?.trim(),
|
|
162
|
+
toolContract.scopeMutation
|
|
163
|
+
? `Scope mutation warning: ${toolContract.scopeMutation.warnings.join(' ')} Model-proposed task:\n${toolContract.scopeMutation.proposedTask}`
|
|
164
|
+
: undefined,
|
|
165
|
+
`Authoritative original ask for this agent:\n${scope.task}`,
|
|
166
|
+
].filter((part) => Boolean(part)).join('\n\n'),
|
|
167
|
+
successCriteria: [
|
|
168
|
+
...(input.successCriteria ?? []),
|
|
169
|
+
`Satisfy the authoritative original ask exactly: ${scope.task}`,
|
|
170
|
+
'Do not treat model-invented design-only or no-write wording as limiting scope unless it appears in the authoritative ask.',
|
|
171
|
+
],
|
|
172
|
+
};
|
|
173
|
+
task = scope.task;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
122
176
|
const archetype = this.archetypeLoader.loadArchetype(template);
|
|
123
177
|
const templateDef = AGENT_TEMPLATES[template] ?? AGENT_TEMPLATES.general;
|
|
124
178
|
const defaultTools = archetype ? archetype.tools : templateDef.defaultTools;
|
|
@@ -14,6 +14,7 @@ export interface AgentProviderRoutingPolicy {
|
|
|
14
14
|
export interface AgentInput {
|
|
15
15
|
mode: 'spawn' | 'batch-spawn' | 'status' | 'cancel' | 'list' | 'templates' | 'get' | 'budget' | 'plan' | 'wait' | 'message' | 'wrfc-chains' | 'wrfc-history' | 'cohort-status' | 'cohort-report';
|
|
16
16
|
task?: string | undefined;
|
|
17
|
+
authoritativeTask?: string | undefined;
|
|
17
18
|
template?: string | undefined;
|
|
18
19
|
model?: string | undefined;
|
|
19
20
|
provider?: string | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../../src/platform/tools/agent/schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AAE1E;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../../src/platform/tools/agent/schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -35,7 +35,11 @@ export const AGENT_TOOL_SCHEMA = {
|
|
|
35
35
|
// mode: spawn
|
|
36
36
|
task: {
|
|
37
37
|
type: 'string',
|
|
38
|
-
description: 'Task description for the agent to execute (mode: spawn). For a user request that asks for WRFC/review/test/verify of one deliverable, describe the implementation deliverable itself and use reviewMode=wrfc; do not spawn reviewer/tester roots.',
|
|
38
|
+
description: 'Task description for the agent to execute (mode: spawn). For a user request that asks for WRFC/review/test/verify of one deliverable, describe the implementation deliverable itself and use reviewMode=wrfc; do not spawn reviewer/tester roots. For batch-spawn collapse, the SDK preserves authoritativeTask/task as the original user ask when present.',
|
|
39
|
+
},
|
|
40
|
+
authoritativeTask: {
|
|
41
|
+
type: 'string',
|
|
42
|
+
description: 'Exact original user request supplied by the host/orchestrator. The SDK uses this as the authoritative WRFC scope when normalizing review/test role fanout; do not invent or narrow it.',
|
|
39
43
|
},
|
|
40
44
|
template: {
|
|
41
45
|
type: 'string',
|
|
@@ -5,9 +5,37 @@ export interface WrfcBatchPolicyDecision {
|
|
|
5
5
|
readonly reason?: string | undefined;
|
|
6
6
|
readonly ownerInput?: AgentInput | undefined;
|
|
7
7
|
readonly roleTaskIndexes?: readonly number[] | undefined;
|
|
8
|
+
readonly scopeMutation?: WrfcScopeMutation | undefined;
|
|
9
|
+
}
|
|
10
|
+
export interface WrfcScopeMutation {
|
|
11
|
+
readonly detected: true;
|
|
12
|
+
readonly action: 'used-authoritative-task' | 'normalized-narrowed-task';
|
|
13
|
+
readonly proposedTask: string;
|
|
14
|
+
readonly authoritativeTask: string;
|
|
15
|
+
readonly warnings: readonly string[];
|
|
16
|
+
}
|
|
17
|
+
export interface WrfcToolContractResolution {
|
|
18
|
+
readonly tools?: string[] | undefined;
|
|
19
|
+
readonly restrictTools?: boolean | undefined;
|
|
20
|
+
readonly scopeMutation?: WrfcScopeMutation | undefined;
|
|
8
21
|
}
|
|
9
22
|
export declare function isRootReviewRoleTemplate(template: string | undefined): boolean;
|
|
10
23
|
export declare function isRootReviewRoleTask(task: Pick<BatchTask, 'task' | 'template'>): boolean;
|
|
24
|
+
export declare function resolveAuthoritativeWrfcScope(input: Pick<AgentInput, 'authoritativeTask' | 'task'>, proposedTask: string): {
|
|
25
|
+
readonly task: string;
|
|
26
|
+
readonly scopeMutation?: WrfcScopeMutation | undefined;
|
|
27
|
+
};
|
|
28
|
+
export declare function resolveNarrowedRootSpawnScope(input: Pick<AgentInput, 'authoritativeTask'>, proposedTask: string): {
|
|
29
|
+
readonly task: string;
|
|
30
|
+
readonly scopeMutation?: WrfcScopeMutation | undefined;
|
|
31
|
+
};
|
|
32
|
+
export declare function resolveImplementationToolContract(args: {
|
|
33
|
+
readonly tools: string[] | undefined;
|
|
34
|
+
readonly restrictTools: boolean | undefined;
|
|
35
|
+
readonly authoritativeTask: string;
|
|
36
|
+
readonly proposedTask: string;
|
|
37
|
+
readonly scopeMutation?: WrfcScopeMutation | undefined;
|
|
38
|
+
}): WrfcToolContractResolution;
|
|
11
39
|
export declare function evaluateWrfcBatchPolicy(input: AgentInput): WrfcBatchPolicyDecision;
|
|
12
40
|
export {};
|
|
13
41
|
//# sourceMappingURL=wrfc-batch-policy.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wrfc-batch-policy.d.ts","sourceRoot":"","sources":["../../../../src/platform/tools/agent/wrfc-batch-policy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,KAAK,SAAS,GAAG,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"wrfc-batch-policy.d.ts","sourceRoot":"","sources":["../../../../src/platform/tools/agent/wrfc-batch-policy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,KAAK,SAAS,GAAG,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AA4B1D,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,IAAI,EAAE,aAAa,GAAG,kBAAkB,CAAC;IAClD,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;IAC7C,QAAQ,CAAC,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IACzD,QAAQ,CAAC,aAAa,CAAC,EAAE,iBAAiB,GAAG,SAAS,CAAC;CACxD;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,yBAAyB,GAAG,0BAA0B,CAAC;IACxE,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IACtC,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC7C,QAAQ,CAAC,aAAa,CAAC,EAAE,iBAAiB,GAAG,SAAS,CAAC;CACxD;AAED,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAE9E;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,UAAU,CAAC,GAAG,OAAO,CAIxF;AA0ED,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,mBAAmB,GAAG,MAAM,CAAC,EACrD,YAAY,EAAE,MAAM,GACnB;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,iBAAiB,GAAG,SAAS,CAAA;CAAE,CAwCnF;AAED,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,mBAAmB,CAAC,EAC5C,YAAY,EAAE,MAAM,GACnB;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,iBAAiB,GAAG,SAAS,CAAA;CAAE,CAoBnF;AAED,wBAAgB,iCAAiC,CAAC,IAAI,EAAE;IACtD,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,aAAa,EAAE,OAAO,GAAG,SAAS,CAAC;IAC5C,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,aAAa,CAAC,EAAE,iBAAiB,GAAG,SAAS,CAAC;CACxD,GAAG,0BAA0B,CA2B7B;AAkCD,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,UAAU,GAAG,uBAAuB,CAgFlF"}
|
|
@@ -10,6 +10,8 @@ const IMPLEMENTATION_TEMPLATES = new Set(['engineer', 'general']);
|
|
|
10
10
|
const ROLE_PREFIX_RE = /^\s*(?:\[?\s*)?(?:reviewer|tester|verifier|qa|quality\s+assurance|test|review|verify|validator)\b[\]\s:;-]*/i;
|
|
11
11
|
const ROLE_ACTION_RE = /\b(?:test|tests|testing|review|reviews|reviewing|verify|verifies|verifying|verification|validate|validates|validating|validation|qa)\s+(?:the|this|that|implementation|solution|feature|deliverable|code|changes|work|output|result|patch|diff)\b/i;
|
|
12
12
|
const IMPLEMENTATION_ACTION_RE = /\b(?:build|implement|create|add|write|fix|repair|update|refactor|change|modify|deliver|make)\b/i;
|
|
13
|
+
const DESIGN_ONLY_ACTION_RE = /\b(?:design|plan|outline|specify|propose|describe)\b/i;
|
|
14
|
+
const NO_WRITE_RE = /\b(?:do\s+not|don't|without)\s+(?:write|modify|edit|create|change)\s+(?:files?|code|source|implementation)\b|\bno[-\s]?write\b|\bread[-\s]?only\b/i;
|
|
13
15
|
export function isRootReviewRoleTemplate(template) {
|
|
14
16
|
return ROOT_REVIEW_ROLE_TEMPLATES.has((template ?? '').trim().toLowerCase());
|
|
15
17
|
}
|
|
@@ -23,6 +25,142 @@ function isImplementationLikeTask(task) {
|
|
|
23
25
|
const template = (task.template ?? '').trim().toLowerCase();
|
|
24
26
|
return IMPLEMENTATION_TEMPLATES.has(template) || IMPLEMENTATION_ACTION_RE.test(task.task);
|
|
25
27
|
}
|
|
28
|
+
function normalizeTaskText(value) {
|
|
29
|
+
const trimmed = typeof value === 'string' ? value.trim() : '';
|
|
30
|
+
return trimmed.length > 0 ? trimmed : undefined;
|
|
31
|
+
}
|
|
32
|
+
function looksLikeScopeNarrowing(proposedTask, authoritativeTask) {
|
|
33
|
+
if (!NO_WRITE_RE.test(proposedTask) && !DESIGN_ONLY_ACTION_RE.test(proposedTask))
|
|
34
|
+
return false;
|
|
35
|
+
if (authoritativeTask && (NO_WRITE_RE.test(authoritativeTask) || DESIGN_ONLY_ACTION_RE.test(authoritativeTask))) {
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
return NO_WRITE_RE.test(proposedTask)
|
|
39
|
+
|| (DESIGN_ONLY_ACTION_RE.test(proposedTask) && IMPLEMENTATION_ACTION_RE.test(authoritativeTask ?? proposedTask));
|
|
40
|
+
}
|
|
41
|
+
function authoritativeTaskAllowsReadOnly(task) {
|
|
42
|
+
return NO_WRITE_RE.test(task)
|
|
43
|
+
|| (DESIGN_ONLY_ACTION_RE.test(task) && !IMPLEMENTATION_ACTION_RE.test(task));
|
|
44
|
+
}
|
|
45
|
+
function removesImplementationCapability(tools) {
|
|
46
|
+
const normalized = new Set((tools ?? []).map((tool) => tool.trim().toLowerCase()).filter(Boolean));
|
|
47
|
+
const hasWriteTool = normalized.has('write') || normalized.has('edit');
|
|
48
|
+
const hasExecutionTool = normalized.has('exec') || normalized.has('precision_exec');
|
|
49
|
+
return !hasWriteTool || !hasExecutionTool;
|
|
50
|
+
}
|
|
51
|
+
function appendScopeMutationWarning(existing, proposedTask, authoritativeTask, warning) {
|
|
52
|
+
if (existing) {
|
|
53
|
+
return {
|
|
54
|
+
...existing,
|
|
55
|
+
warnings: [...existing.warnings, warning],
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
return {
|
|
59
|
+
detected: true,
|
|
60
|
+
action: 'used-authoritative-task',
|
|
61
|
+
proposedTask,
|
|
62
|
+
authoritativeTask,
|
|
63
|
+
warnings: [warning],
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
function stripNoWriteSentences(task) {
|
|
67
|
+
const sentences = task
|
|
68
|
+
.split(/(?<=[.!?])\s+/)
|
|
69
|
+
.map((sentence) => sentence.trim())
|
|
70
|
+
.filter((sentence) => sentence.length > 0 && !NO_WRITE_RE.test(sentence));
|
|
71
|
+
return (sentences.length > 0 ? sentences.join(' ') : task.replace(NO_WRITE_RE, '')).trim();
|
|
72
|
+
}
|
|
73
|
+
function normalizeNarrowedTask(proposedTask) {
|
|
74
|
+
let normalized = stripNoWriteSentences(proposedTask);
|
|
75
|
+
normalized = normalized.replace(/^\s*(?:independently\s+)?(?:design|plan|outline|specify|propose|describe)\b/i, 'Implement').trim();
|
|
76
|
+
if (!IMPLEMENTATION_ACTION_RE.test(normalized)) {
|
|
77
|
+
normalized = `Implement ${normalized.replace(/^\s*(?:an?|the)\s+/i, '')}`;
|
|
78
|
+
}
|
|
79
|
+
return normalized.endsWith('.') ? normalized : `${normalized}.`;
|
|
80
|
+
}
|
|
81
|
+
export function resolveAuthoritativeWrfcScope(input, proposedTask) {
|
|
82
|
+
const authoritativeTask = normalizeTaskText(input.authoritativeTask) ?? normalizeTaskText(input.task);
|
|
83
|
+
if (authoritativeTask && authoritativeTask !== proposedTask) {
|
|
84
|
+
return {
|
|
85
|
+
task: authoritativeTask,
|
|
86
|
+
scopeMutation: {
|
|
87
|
+
detected: true,
|
|
88
|
+
action: 'used-authoritative-task',
|
|
89
|
+
proposedTask,
|
|
90
|
+
authoritativeTask,
|
|
91
|
+
warnings: [
|
|
92
|
+
'WRFC role-fanout collapse preserved the original user ask as the review scope instead of the model-proposed child task.',
|
|
93
|
+
...(looksLikeScopeNarrowing(proposedTask, authoritativeTask)
|
|
94
|
+
? ['The proposed child task appeared narrower than the original ask and was not allowed to limit the WRFC scope.']
|
|
95
|
+
: []),
|
|
96
|
+
],
|
|
97
|
+
},
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
if (!authoritativeTask && looksLikeScopeNarrowing(proposedTask, undefined)) {
|
|
101
|
+
const normalized = normalizeNarrowedTask(proposedTask);
|
|
102
|
+
if (normalized !== proposedTask) {
|
|
103
|
+
return {
|
|
104
|
+
task: normalized,
|
|
105
|
+
scopeMutation: {
|
|
106
|
+
detected: true,
|
|
107
|
+
action: 'normalized-narrowed-task',
|
|
108
|
+
proposedTask,
|
|
109
|
+
authoritativeTask: normalized,
|
|
110
|
+
warnings: [
|
|
111
|
+
'WRFC role-fanout collapse removed design-only/no-write narrowing from the owner scope because no authoritative original ask was supplied.',
|
|
112
|
+
'Hosts should pass authoritativeTask with the exact user request so the SDK can preserve full WRFC scope without heuristic normalization.',
|
|
113
|
+
],
|
|
114
|
+
},
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
return { task: authoritativeTask ?? proposedTask };
|
|
119
|
+
}
|
|
120
|
+
export function resolveNarrowedRootSpawnScope(input, proposedTask) {
|
|
121
|
+
const authoritativeTask = normalizeTaskText(input.authoritativeTask);
|
|
122
|
+
if (!authoritativeTask || authoritativeTask === proposedTask) {
|
|
123
|
+
return { task: proposedTask };
|
|
124
|
+
}
|
|
125
|
+
if (!looksLikeScopeNarrowing(proposedTask, authoritativeTask)) {
|
|
126
|
+
return { task: proposedTask };
|
|
127
|
+
}
|
|
128
|
+
return {
|
|
129
|
+
task: authoritativeTask,
|
|
130
|
+
scopeMutation: {
|
|
131
|
+
detected: true,
|
|
132
|
+
action: 'used-authoritative-task',
|
|
133
|
+
proposedTask,
|
|
134
|
+
authoritativeTask,
|
|
135
|
+
warnings: [
|
|
136
|
+
'Root agent spawn preserved the original user ask because the model-proposed task appeared to narrow implementation work into design-only/no-write work.',
|
|
137
|
+
],
|
|
138
|
+
},
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
export function resolveImplementationToolContract(args) {
|
|
142
|
+
const implementationLike = IMPLEMENTATION_ACTION_RE.test(args.authoritativeTask)
|
|
143
|
+
|| IMPLEMENTATION_ACTION_RE.test(args.proposedTask);
|
|
144
|
+
if (!args.restrictTools || !implementationLike || authoritativeTaskAllowsReadOnly(args.authoritativeTask)) {
|
|
145
|
+
return {
|
|
146
|
+
tools: args.tools,
|
|
147
|
+
restrictTools: args.restrictTools,
|
|
148
|
+
scopeMutation: args.scopeMutation,
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
if (!removesImplementationCapability(args.tools)) {
|
|
152
|
+
return {
|
|
153
|
+
tools: args.tools,
|
|
154
|
+
restrictTools: args.restrictTools,
|
|
155
|
+
scopeMutation: args.scopeMutation,
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
return {
|
|
159
|
+
tools: undefined,
|
|
160
|
+
restrictTools: false,
|
|
161
|
+
scopeMutation: appendScopeMutationWarning(args.scopeMutation, args.proposedTask, args.authoritativeTask, 'WRFC scope enforcement ignored restrictive child tool settings that removed write or execution capability from an implementation-like authoritative ask.'),
|
|
162
|
+
};
|
|
163
|
+
}
|
|
26
164
|
function uniqueStrings(values) {
|
|
27
165
|
const unique = [...new Set(values.flatMap((value) => value ?? []).filter((value) => value.trim().length > 0))];
|
|
28
166
|
return unique.length > 0 ? unique : undefined;
|
|
@@ -31,14 +169,17 @@ function formatTask(task, index) {
|
|
|
31
169
|
const template = task.template ?? 'general';
|
|
32
170
|
return `${index + 1}. [${template}] ${task.task}`;
|
|
33
171
|
}
|
|
34
|
-
function buildCollapsedContext(input, tasks, roleTaskIndexes) {
|
|
172
|
+
function buildCollapsedContext(input, tasks, roleTaskIndexes, authoritativeTask, scopeMutation) {
|
|
35
173
|
const roleIndexText = roleTaskIndexes.map((index) => index + 1).join(', ');
|
|
36
174
|
const existing = input.context?.trim();
|
|
37
175
|
return [
|
|
38
176
|
existing ? `Caller context:\n${existing}` : null,
|
|
39
177
|
'SDK WRFC topology enforcement collapsed this batch because root review/test/verification tasks are lifecycle phases, not independent root agents.',
|
|
178
|
+
`Authoritative original ask for this WRFC chain:\n${authoritativeTask}`,
|
|
40
179
|
`Collapsed role-task indexes: ${roleIndexText}.`,
|
|
41
180
|
'The WRFC owner must keep one root chain for the original deliverable. The controller owns engineer, reviewer, tester/verifier, and fixer child lifecycle agents after owner output exists.',
|
|
181
|
+
scopeMutation ? `Scope mutation warning: ${scopeMutation.warnings.join(' ')}` : null,
|
|
182
|
+
scopeMutation ? `Model-proposed child scope that was not allowed to narrow review:\n${scopeMutation.proposedTask}` : null,
|
|
42
183
|
'Original batch:',
|
|
43
184
|
...tasks.map(formatTask),
|
|
44
185
|
].filter((line) => Boolean(line)).join('\n');
|
|
@@ -60,9 +201,18 @@ export function evaluateWrfcBatchPolicy(input) {
|
|
|
60
201
|
? 'engineer'
|
|
61
202
|
: ownerTask.template ?? input.template ?? 'engineer';
|
|
62
203
|
const template = isRootReviewRoleTemplate(ownerTemplate) ? 'engineer' : ownerTemplate;
|
|
204
|
+
const scope = resolveAuthoritativeWrfcScope(input, ownerTask.task);
|
|
205
|
+
const toolContract = resolveImplementationToolContract({
|
|
206
|
+
tools: ownerTask.tools ?? input.tools,
|
|
207
|
+
restrictTools: ownerTask.restrictTools ?? input.restrictTools,
|
|
208
|
+
authoritativeTask: scope.task,
|
|
209
|
+
proposedTask: ownerTask.task,
|
|
210
|
+
scopeMutation: scope.scopeMutation,
|
|
211
|
+
});
|
|
63
212
|
const ownerInput = {
|
|
64
213
|
mode: 'spawn',
|
|
65
|
-
task:
|
|
214
|
+
task: scope.task,
|
|
215
|
+
authoritativeTask: scope.task,
|
|
66
216
|
template,
|
|
67
217
|
model: ownerTask.model ?? input.model,
|
|
68
218
|
provider: ownerTask.provider ?? input.provider,
|
|
@@ -70,13 +220,15 @@ export function evaluateWrfcBatchPolicy(input) {
|
|
|
70
220
|
routing: ownerTask.routing ?? input.routing,
|
|
71
221
|
executionIntent: ownerTask.executionIntent ?? input.executionIntent,
|
|
72
222
|
reasoningEffort: ownerTask.reasoningEffort ?? input.reasoningEffort,
|
|
73
|
-
tools:
|
|
74
|
-
restrictTools:
|
|
75
|
-
context: buildCollapsedContext(input, tasks, roleTaskIndexes),
|
|
223
|
+
tools: toolContract.tools,
|
|
224
|
+
restrictTools: toolContract.restrictTools,
|
|
225
|
+
context: buildCollapsedContext(input, tasks, roleTaskIndexes, scope.task, toolContract.scopeMutation),
|
|
76
226
|
successCriteria: uniqueStrings([
|
|
77
227
|
ownerTask.successCriteria,
|
|
78
228
|
input.successCriteria,
|
|
79
229
|
...tasks.map((task) => task.successCriteria),
|
|
230
|
+
[`Satisfy the authoritative WRFC ask exactly: ${scope.task}`],
|
|
231
|
+
['Do not treat model-invented design-only or no-write wording from collapsed child tasks as limiting scope unless it appears in the authoritative ask.'],
|
|
80
232
|
['Keep the WRFC work as one owner chain; review, test, verification, and fix work must be WRFC lifecycle children, not sibling root agents.'],
|
|
81
233
|
]),
|
|
82
234
|
requiredEvidence: uniqueStrings([
|
|
@@ -104,5 +256,6 @@ export function evaluateWrfcBatchPolicy(input) {
|
|
|
104
256
|
reason: 'batch-spawn contained root review/test/verification role tasks for the same deliverable',
|
|
105
257
|
ownerInput,
|
|
106
258
|
roleTaskIndexes,
|
|
259
|
+
scopeMutation: toolContract.scopeMutation,
|
|
107
260
|
};
|
|
108
261
|
}
|
package/dist/platform/version.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { readFileSync } from 'node:fs';
|
|
2
2
|
import { join } from 'node:path';
|
|
3
|
-
let version = '0.33.
|
|
3
|
+
let version = '0.33.24';
|
|
4
4
|
try {
|
|
5
5
|
const pkg = JSON.parse(readFileSync(join(import.meta.dir, '..', '..', 'package.json'), 'utf-8'));
|
|
6
6
|
version = pkg.version ?? version;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pellux/goodvibes-sdk",
|
|
3
|
-
"version": "0.33.
|
|
3
|
+
"version": "0.33.24",
|
|
4
4
|
"description": "TypeScript SDK for building GoodVibes operator, peer, web, mobile, and daemon-connected apps with typed contracts, auth, realtime events, and transport layers.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"goodvibes",
|
|
@@ -449,14 +449,14 @@
|
|
|
449
449
|
"sideEffects": false,
|
|
450
450
|
"type": "module",
|
|
451
451
|
"dependencies": {
|
|
452
|
-
"@pellux/goodvibes-contracts": "0.33.
|
|
453
|
-
"@pellux/goodvibes-daemon-sdk": "0.33.
|
|
454
|
-
"@pellux/goodvibes-errors": "0.33.
|
|
455
|
-
"@pellux/goodvibes-operator-sdk": "0.33.
|
|
456
|
-
"@pellux/goodvibes-peer-sdk": "0.33.
|
|
457
|
-
"@pellux/goodvibes-transport-core": "0.33.
|
|
458
|
-
"@pellux/goodvibes-transport-http": "0.33.
|
|
459
|
-
"@pellux/goodvibes-transport-realtime": "0.33.
|
|
452
|
+
"@pellux/goodvibes-contracts": "0.33.24",
|
|
453
|
+
"@pellux/goodvibes-daemon-sdk": "0.33.24",
|
|
454
|
+
"@pellux/goodvibes-errors": "0.33.24",
|
|
455
|
+
"@pellux/goodvibes-operator-sdk": "0.33.24",
|
|
456
|
+
"@pellux/goodvibes-peer-sdk": "0.33.24",
|
|
457
|
+
"@pellux/goodvibes-transport-core": "0.33.24",
|
|
458
|
+
"@pellux/goodvibes-transport-http": "0.33.24",
|
|
459
|
+
"@pellux/goodvibes-transport-realtime": "0.33.24"
|
|
460
460
|
},
|
|
461
461
|
"optionalDependencies": {
|
|
462
462
|
"@agentclientprotocol/sdk": "^0.21.0",
|