@pellux/goodvibes-sdk 0.33.22 → 0.33.23

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.
@@ -3,7 +3,7 @@
3
3
  "product": {
4
4
  "id": "goodvibes",
5
5
  "surface": "operator",
6
- "version": "0.33.22"
6
+ "version": "0.33.23"
7
7
  },
8
8
  "auth": {
9
9
  "modes": [
@@ -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":"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"}
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
- args.setPendingToolCalls(args.response.toolCalls);
101
+ const toolCalls = attachAuthoritativeTaskToAgentCalls(args.response.toolCalls, args.userText);
102
+ args.setPendingToolCalls(toolCalls);
80
103
  args.conversation.addAssistantMessage(args.response.content, {
81
- toolCalls: args.response.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, args.response.toolCalls);
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 = args.response.toolCalls.some((tc) => {
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;AA+G7D,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,CAslBP"}
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":"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"}
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
- if (!input.parentAgentId && isRootReviewRoleTask({ task, template })) {
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,cA4O/B,CAAC;AAEF,MAAM,WAAW,0BAA0B;IACzC,iBAAiB,CAAC,EAAE,iBAAiB,GAAG,UAAU,GAAG,WAAW,GAAG,SAAS,CAAC;IAC7E,qBAAqB,CAAC,EAAE,mBAAmB,GAAG,MAAM,GAAG,SAAS,CAAC;IACjE,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;CAChD;AAED,sCAAsC;AACtC,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,OAAO,GAAG,aAAa,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,WAAW,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,aAAa,GAAG,cAAc,GAAG,eAAe,GAAG,eAAe,CAAC;IAEjM,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,cAAc,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IACtC,OAAO,CAAC,EAAE,0BAA0B,GAAG,SAAS,CAAC;IACjD,eAAe,CAAC,EAAE,eAAe,GAAG,SAAS,CAAC;IAC9C,eAAe,CAAC,EAAE,SAAS,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAC;IACpE,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAC7B,aAAa,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACpC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,0DAA0D;IAC1D,oBAAoB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1C,eAAe,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IACvC,gBAAgB,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IACxC,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAClC,iBAAiB,CAAC,EAAE,QAAQ,GAAG,mBAAmB,GAAG,SAAS,CAAC;IAC/D,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACzC,iBAAiB,CAAC,EAAE,aAAa,GAAG,qBAAqB,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;IAC5F,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,oBAAoB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1C,mBAAmB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,wBAAwB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAE/C,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAE5B,KAAK,CAAC,EAAE,KAAK,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAC9B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAC3B,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAC9B,cAAc,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;QACtC,OAAO,CAAC,EAAE,0BAA0B,GAAG,SAAS,CAAC;QACjD,eAAe,CAAC,EAAE,eAAe,GAAG,SAAS,CAAC;QAC9C,eAAe,CAAC,EAAE,SAAS,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAC;QACpE,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;QAC7B,aAAa,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;QACpC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAC7B,eAAe,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;QACvC,gBAAgB,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;QACxC,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;QAClC,iBAAiB,CAAC,EAAE,QAAQ,GAAG,mBAAmB,GAAG,SAAS,CAAC;QAC/D,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;QACzC,iBAAiB,CAAC,EAAE,aAAa,GAAG,qBAAqB,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;QAC5F,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QACnC,oBAAoB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAC1C,mBAAmB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QACzC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAClC,wBAAwB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;KAChD,CAAC,CAAC;IAEH,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,MAAM,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,UAAU,GAAG,MAAM,GAAG,SAAS,CAAC;IAElE,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAE/B,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,IAAI,CAAC,EAAE,WAAW,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,YAAY,GAAG,YAAY,GAAG,SAAS,CAAC;IAExH,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC7B"}
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;AAsB1D,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;CAC1D;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;AA8BD,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,UAAU,GAAG,uBAAuB,CAoElF"}
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: ownerTask.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: ownerTask.tools ?? input.tools,
74
- restrictTools: ownerTask.restrictTools ?? input.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
  }
@@ -1,6 +1,6 @@
1
1
  import { readFileSync } from 'node:fs';
2
2
  import { join } from 'node:path';
3
- let version = '0.33.22';
3
+ let version = '0.33.23';
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.22",
3
+ "version": "0.33.23",
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.22",
453
- "@pellux/goodvibes-daemon-sdk": "0.33.22",
454
- "@pellux/goodvibes-errors": "0.33.22",
455
- "@pellux/goodvibes-operator-sdk": "0.33.22",
456
- "@pellux/goodvibes-peer-sdk": "0.33.22",
457
- "@pellux/goodvibes-transport-core": "0.33.22",
458
- "@pellux/goodvibes-transport-http": "0.33.22",
459
- "@pellux/goodvibes-transport-realtime": "0.33.22"
452
+ "@pellux/goodvibes-contracts": "0.33.23",
453
+ "@pellux/goodvibes-daemon-sdk": "0.33.23",
454
+ "@pellux/goodvibes-errors": "0.33.23",
455
+ "@pellux/goodvibes-operator-sdk": "0.33.23",
456
+ "@pellux/goodvibes-peer-sdk": "0.33.23",
457
+ "@pellux/goodvibes-transport-core": "0.33.23",
458
+ "@pellux/goodvibes-transport-http": "0.33.23",
459
+ "@pellux/goodvibes-transport-realtime": "0.33.23"
460
460
  },
461
461
  "optionalDependencies": {
462
462
  "@agentclientprotocol/sdk": "^0.21.0",