@jigyasudham/veto 1.4.0 → 1.4.3

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.
Files changed (50) hide show
  1. package/README.md +218 -17
  2. package/dist/council/decision-engine.d.ts.map +1 -1
  3. package/dist/council/decision-engine.js +20 -0
  4. package/dist/council/decision-engine.js.map +1 -1
  5. package/dist/council/decision-extractor.d.ts +13 -0
  6. package/dist/council/decision-extractor.d.ts.map +1 -0
  7. package/dist/council/decision-extractor.js +66 -0
  8. package/dist/council/decision-extractor.js.map +1 -0
  9. package/dist/council/devil-advocate.d.ts.map +1 -1
  10. package/dist/council/devil-advocate.js +12 -1
  11. package/dist/council/devil-advocate.js.map +1 -1
  12. package/dist/council/lead-developer.d.ts.map +1 -1
  13. package/dist/council/lead-developer.js +34 -14
  14. package/dist/council/lead-developer.js.map +1 -1
  15. package/dist/council/legal-compliance.d.ts.map +1 -1
  16. package/dist/council/legal-compliance.js +44 -24
  17. package/dist/council/legal-compliance.js.map +1 -1
  18. package/dist/council/llm-council.d.ts +3 -0
  19. package/dist/council/llm-council.d.ts.map +1 -1
  20. package/dist/council/llm-council.js +127 -21
  21. package/dist/council/llm-council.js.map +1 -1
  22. package/dist/council/product-manager.d.ts.map +1 -1
  23. package/dist/council/product-manager.js +33 -13
  24. package/dist/council/product-manager.js.map +1 -1
  25. package/dist/council/security.d.ts.map +1 -1
  26. package/dist/council/security.js +44 -24
  27. package/dist/council/security.js.map +1 -1
  28. package/dist/council/session-summarizer.d.ts +25 -0
  29. package/dist/council/session-summarizer.d.ts.map +1 -0
  30. package/dist/council/session-summarizer.js +130 -0
  31. package/dist/council/session-summarizer.js.map +1 -0
  32. package/dist/council/system-architect.d.ts.map +1 -1
  33. package/dist/council/system-architect.js +33 -13
  34. package/dist/council/system-architect.js.map +1 -1
  35. package/dist/council/ux-designer.d.ts.map +1 -1
  36. package/dist/council/ux-designer.js +47 -26
  37. package/dist/council/ux-designer.js.map +1 -1
  38. package/dist/server.js +109 -13
  39. package/dist/server.js.map +1 -1
  40. package/dist/skills/memory/skill-session-restore.d.ts.map +1 -1
  41. package/dist/skills/memory/skill-session-restore.js +19 -24
  42. package/dist/skills/memory/skill-session-restore.js.map +1 -1
  43. package/dist/skills/memory/skill-session-save.d.ts.map +1 -1
  44. package/dist/skills/memory/skill-session-save.js +5 -9
  45. package/dist/skills/memory/skill-session-save.js.map +1 -1
  46. package/dist/tools/definitions.d.ts +164 -6
  47. package/dist/tools/definitions.d.ts.map +1 -1
  48. package/dist/tools/definitions.js +24 -6
  49. package/dist/tools/definitions.js.map +1 -1
  50. package/package.json +1 -1
@@ -1,3 +1,4 @@
1
+ import { extractDecision, pickSide, reframeVote } from './decision-extractor.js';
1
2
  const BLOCK_RULES = [
2
3
  {
3
4
  pattern: /\b(gpl|gnu.?general.?public.?license)\b/i,
@@ -121,22 +122,6 @@ export function analyze(task) {
121
122
  recommendations.push(rule.recommendation);
122
123
  }
123
124
  }
124
- if (blocks.length > 0) {
125
- return {
126
- verdict: 'block',
127
- reason: blocks[0].reason,
128
- concerns: blocks.slice(1).map(b => b.reason),
129
- recommendation: blocks.map(b => b.recommendation).join(' | '),
130
- };
131
- }
132
- if (concerns.length > 0) {
133
- return {
134
- verdict: 'warn',
135
- reason: `${concerns.length} legal or compliance concern${concerns.length > 1 ? 's' : ''} — review before shipping.`,
136
- concerns,
137
- recommendation: recommendations[0],
138
- };
139
- }
140
125
  // Topic-based legal analysis for tasks with no specific pattern matches
141
126
  const TOPIC_INSIGHTS = [
142
127
  {
@@ -170,16 +155,51 @@ export function analyze(task) {
170
155
  recommendation: 'If collecting any telemetry, disclose it in the Marketplace listing and use VS Code\'s telemetry API which respects user opt-out settings. Consult Marketplace policies before publishing.',
171
156
  },
172
157
  ];
173
- const topicMatched = TOPIC_INSIGHTS.filter(t => t.pattern.test(task));
174
- if (topicMatched.length > 0) {
175
- const top = topicMatched.slice(0, 2);
176
- return {
158
+ let vote;
159
+ if (blocks.length > 0) {
160
+ vote = {
161
+ verdict: 'block',
162
+ reason: blocks[0].reason,
163
+ concerns: blocks.slice(1).map(b => b.reason),
164
+ recommendation: blocks.map(b => b.recommendation).join(' | '),
165
+ };
166
+ }
167
+ else if (concerns.length > 0) {
168
+ vote = {
177
169
  verdict: 'warn',
178
- reason: top[0].concern,
179
- concerns: top.slice(1).map(t => t.concern),
180
- recommendation: top.map(t => t.recommendation).join(' | '),
170
+ reason: `${concerns.length} legal or compliance concern${concerns.length > 1 ? 's' : ''} — review before shipping.`,
171
+ concerns,
172
+ recommendation: recommendations[0],
181
173
  };
182
174
  }
183
- return { verdict: 'approve', reason: 'No legal or compliance issues detected.', concerns: [] };
175
+ else {
176
+ const topicMatched = TOPIC_INSIGHTS.filter(t => t.pattern.test(task));
177
+ if (topicMatched.length > 0) {
178
+ const top = topicMatched.slice(0, 2);
179
+ vote = {
180
+ verdict: 'warn',
181
+ reason: top[0].concern,
182
+ concerns: top.slice(1).map(t => t.concern),
183
+ recommendation: top.map(t => t.recommendation).join(' | '),
184
+ };
185
+ }
186
+ else {
187
+ vote = { verdict: 'approve', reason: 'No legal or compliance issues detected.', concerns: [] };
188
+ }
189
+ }
190
+ return applyDecisionStance(vote, task);
191
+ }
192
+ // Legal risk: options that expose more data surface, add network endpoints, or create new data flows
193
+ const LEGAL_RISK = /\b(http|rest.?api|network|remote|endpoint|expose|token|oauth|third.?party|integrate)\b/i;
194
+ function applyDecisionStance(vote, task) {
195
+ const ctx = extractDecision(task);
196
+ if (!ctx.isDecisionTask)
197
+ return vote;
198
+ const { optionA, optionB } = ctx;
199
+ const side = pickSide(optionA, optionB, LEGAL_RISK);
200
+ const advice = side
201
+ ? `"${side.preferred}" has a smaller data surface area and fewer cross-boundary data flows. "${side.avoided}" introduces new data exposure obligations — document retention policies and user consent before shipping.`
202
+ : `Both options may create data obligations. Confirm: what user data each option stores, for how long, and whether users can delete it.`;
203
+ return reframeVote(vote, ctx, side?.preferred ?? null, advice);
184
204
  }
185
205
  //# sourceMappingURL=legal-compliance.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"legal-compliance.js","sourceRoot":"","sources":["../../src/council/legal-compliance.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"legal-compliance.js","sourceRoot":"","sources":["../../src/council/legal-compliance.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,7 @@
1
1
  import type { Server } from '@modelcontextprotocol/sdk/server/index.js';
2
2
  import type { DebateInput, DebateResult } from './types.js';
3
+ export declare function buildAgenticDebatePrompt(task: string, enrichedContext: string, decisionContext?: string): string;
4
+ export declare function parseAgentResponses(raw: string, task: string): DebateResult['votes'] | null;
5
+ export declare function runFromAgentResponses(input: DebateInput, votes: DebateResult['votes']): DebateResult;
3
6
  export declare function runLlmDebate(server: Server, input: DebateInput): Promise<DebateResult>;
4
7
  //# sourceMappingURL=llm-council.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"llm-council.d.ts","sourceRoot":"","sources":["../../src/council/llm-council.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACxE,OAAO,KAAK,EAAa,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AA4HvE,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,CA+B5F"}
1
+ {"version":3,"file":"llm-council.d.ts","sourceRoot":"","sources":["../../src/council/llm-council.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACxE,OAAO,KAAK,EAAa,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAuJvE,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,MAAM,GAAG,MAAM,CAoChH;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,GAAG,IAAI,CA8B3F;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,YAAY,CAAC,OAAO,CAAC,GAAG,YAAY,CAKpG;AAID,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,CAqC5F"}
@@ -1,9 +1,11 @@
1
- // LLM-backed council — runs all 7 agents via MCP sampling in parallel.
2
- // Falls back to the deterministic agent for any individual call that fails.
3
- // Falls back entirely to deterministic runDebate() if sampling is not supported.
1
+ // LLM-backed council — three tiers:
2
+ // 1. MCP Sampling (server.createMessage) if host implements it
3
+ // 2. Agentic loop host AI reasons as all 7 agents, passes responses back
4
+ // 3. Deterministic fallback — always available, zero tokens
4
5
  import { decide, formatDebate } from './decision-engine.js';
5
6
  import { buildContextString } from '../context/reader.js';
6
7
  import { searchKnowledge } from '../memory/local.js';
8
+ import { extractDecision } from './decision-extractor.js';
7
9
  // Deterministic fallbacks — one per agent
8
10
  import { analyze as leadDevFallback } from './lead-developer.js';
9
11
  import { analyze as pmFallback } from './product-manager.js';
@@ -16,32 +18,46 @@ import { analyze as securityFallback } from './security.js';
16
18
  const SYSTEM_PROMPTS = {
17
19
  lead_dev: `You are the Lead Developer in a software council. Assess technical feasibility, code quality, implementation risk, and engineering best practices. Be pragmatic — approve sound work, warn about concerning patterns, block only when something is technically broken or creates severe technical debt.
18
20
 
21
+ IMPORTANT: If the task presents two specific options (e.g. "A vs B" or "should we X or Y"), your recommendation MUST explicitly state which option you prefer and why — do not give generic advice that applies to both. Name the option you prefer in your recommendation field.
22
+
19
23
  Return ONLY valid JSON, no other text:
20
- {"verdict":"approve"|"warn"|"block","reason":"one sentence","concerns":["concern1"],"recommendation":"actionable advice"}`,
24
+ {"verdict":"approve"|"warn"|"block","reason":"one sentence directly addressing the task","concerns":["specific concern"],"recommendation":"Prefer [named option] — reason specific to your domain"}`,
21
25
  pm: `You are the Product Manager in a software council. Assess user value, business alignment, scope clarity, and product-market fit. Approve features that deliver clear value, warn when scope is vague or requirements are incomplete, block only when something contradicts core product goals.
22
26
 
27
+ IMPORTANT: If the task presents two specific options (e.g. "A vs B" or "should we X or Y"), your recommendation MUST explicitly state which option you prefer and why — do not give generic advice that applies to both. Name the option you prefer in your recommendation field.
28
+
23
29
  Return ONLY valid JSON, no other text:
24
- {"verdict":"approve"|"warn"|"block","reason":"one sentence","concerns":["concern1"],"recommendation":"actionable advice"}`,
30
+ {"verdict":"approve"|"warn"|"block","reason":"one sentence directly addressing the task","concerns":["specific concern"],"recommendation":"Prefer [named option] — reason specific to your domain"}`,
25
31
  architect: `You are the System Architect in a software council. Assess scalability, maintainability, system design, coupling, and architectural integrity. Approve decisions that fit the architecture well, warn about complexity or coupling risks, block breaking changes that violate architectural principles.
26
32
 
33
+ IMPORTANT: If the task presents two specific options (e.g. "A vs B" or "should we X or Y"), your recommendation MUST explicitly state which option you prefer and why — do not give generic advice that applies to both. Name the option you prefer in your recommendation field.
34
+
27
35
  Return ONLY valid JSON, no other text:
28
- {"verdict":"approve"|"warn"|"block","reason":"one sentence","concerns":["concern1"],"recommendation":"actionable advice"}`,
36
+ {"verdict":"approve"|"warn"|"block","reason":"one sentence directly addressing the task","concerns":["specific concern"],"recommendation":"Prefer [named option] — reason specific to your domain"}`,
29
37
  ux: `You are the UX Designer in a software council. Assess usability, accessibility, user flow, and experience quality. Approve changes that improve or maintain UX, warn about confusing patterns or missing states, block changes that harm users or violate accessibility standards.
30
38
 
39
+ IMPORTANT: If the task presents two specific options (e.g. "A vs B" or "should we X or Y"), your recommendation MUST explicitly state which option you prefer and why — do not give generic advice that applies to both. Name the option you prefer in your recommendation field.
40
+
31
41
  Return ONLY valid JSON, no other text:
32
- {"verdict":"approve"|"warn"|"block","reason":"one sentence","concerns":["concern1"],"recommendation":"actionable advice"}`,
42
+ {"verdict":"approve"|"warn"|"block","reason":"one sentence directly addressing the task","concerns":["specific concern"],"recommendation":"Prefer [named option] — reason specific to your domain"}`,
33
43
  devil: `You are the Devil's Advocate in a software council. Your job is to find problems others miss — edge cases, failure modes, hidden dependencies, unintended consequences, and flawed assumptions. Be incisive. Warn about risks that compound over time. Block when you identify a fatal flaw.
34
44
 
45
+ IMPORTANT: If the task presents two specific options, challenge the one that looks more attractive or ambitious. Ask: what breaks first? What's the worst-case failure mode of the preferred option? Name the option you are challenging in your reason.
46
+
35
47
  Return ONLY valid JSON, no other text:
36
- {"verdict":"approve"|"warn"|"block","reason":"one sentence","concerns":["concern1"],"recommendation":"actionable advice"}`,
48
+ {"verdict":"approve"|"warn"|"block","reason":"one sentence challenging the specific proposed option","concerns":["failure mode 1","failure mode 2"],"recommendation":"actionable mitigation for the named option"}`,
37
49
  legal: `You are the Legal & Compliance officer in a software council. Assess regulatory risk, data privacy (GDPR, CCPA), licensing conflicts, and compliance requirements. Approve decisions within legal boundaries, warn about grey areas, block anything that creates clear legal liability or compliance violations.
38
50
 
51
+ IMPORTANT: If the task presents two specific options (e.g. "A vs B" or "should we X or Y"), your recommendation MUST explicitly state which option has lower legal risk and why — do not give generic advice that applies to both. Name the safer option in your recommendation field.
52
+
39
53
  Return ONLY valid JSON, no other text:
40
- {"verdict":"approve"|"warn"|"block","reason":"one sentence","concerns":["concern1"],"recommendation":"actionable advice"}`,
54
+ {"verdict":"approve"|"warn"|"block","reason":"one sentence directly addressing the task","concerns":["specific legal concern"],"recommendation":"Prefer [named option] — reason specific to your domain"}`,
41
55
  security: `You are the Security Engineer in a software council. Assess security implications using OWASP Top 10 and security best practices. Approve secure designs, warn about potential vulnerabilities, block anything that introduces clear security risks — injection, broken auth, sensitive data exposure, or insecure design.
42
56
 
57
+ IMPORTANT: If the task presents two specific options (e.g. "A vs B" or "should we X or Y"), your recommendation MUST explicitly state which option is more secure and why — do not give generic advice that applies to both. Name the more secure option in your recommendation field.
58
+
43
59
  Return ONLY valid JSON, no other text:
44
- {"verdict":"approve"|"warn"|"block","reason":"one sentence","concerns":["concern1"],"recommendation":"actionable advice"}`,
60
+ {"verdict":"approve"|"warn"|"block","reason":"one sentence directly addressing the task","concerns":["specific vulnerability"],"recommendation":"Prefer [named option] — reason specific to your domain"}`,
45
61
  };
46
62
  const FALLBACKS = {
47
63
  lead_dev: leadDevFallback,
@@ -85,10 +101,13 @@ function buildMemoryContext(task, project_dir) {
85
101
  }
86
102
  }
87
103
  // ─── Core: one LLM sampling call per agent ────────────────────────────────────
88
- async function callAgentLlm(server, agentKey, task, memoryContext) {
89
- const userText = memoryContext
90
- ? `Task to evaluate:\n${task}\n\nRelevant past council decisions:\n${memoryContext}`
91
- : `Task to evaluate:\n${task}`;
104
+ async function callAgentLlm(server, agentKey, task, memoryContext, decisionContext) {
105
+ const parts = [`Task to evaluate:\n${task}`];
106
+ if (decisionContext)
107
+ parts.push(`\nARCHITECTURAL CHOICE DETECTED:\n${decisionContext}\nYour response MUST address this specific choice — name the option you prefer in your recommendation.`);
108
+ if (memoryContext)
109
+ parts.push(`\nRelevant past council decisions:\n${memoryContext}`);
110
+ const userText = parts.join('\n');
92
111
  try {
93
112
  const result = await server.createMessage({
94
113
  messages: [{ role: 'user', content: { type: 'text', text: userText } }],
@@ -104,20 +123,107 @@ async function callAgentLlm(server, agentKey, task, memoryContext) {
104
123
  return FALLBACKS[agentKey](task);
105
124
  }
106
125
  }
126
+ // ─── Agentic loop: host AI reasons as all 7 agents ───────────────────────────
127
+ const AGENT_ROLE_DESCRIPTIONS = {
128
+ lead_dev: 'Lead Developer — technical feasibility, code quality, implementation risk, engineering best practices. Block when something is technically broken or creates severe debt.',
129
+ pm: 'Product Manager — user value, business alignment, scope clarity, product-market fit. Block when something contradicts core product goals.',
130
+ architect: 'System Architect — scalability, maintainability, coupling, architectural integrity. Block breaking changes that violate architectural principles.',
131
+ ux: 'UX Designer — usability, accessibility, user flow, experience quality. Block changes that harm users or violate accessibility standards.',
132
+ devil: "Devil's Advocate — find failure modes, edge cases, hidden dependencies, flawed assumptions. Challenge the most attractive option. Block on fatal flaws.",
133
+ legal: 'Legal & Compliance — GDPR, CCPA, licensing, data privacy, regulatory exposure. Block anything creating clear legal liability.',
134
+ security: 'Security Engineer — OWASP Top 10, auth, injection, data leakage, threat model. Block anything introducing clear security risks.',
135
+ };
136
+ export function buildAgenticDebatePrompt(task, enrichedContext, decisionContext) {
137
+ const agentEntries = Object.entries(AGENT_ROLE_DESCRIPTIONS)
138
+ .map(([key, desc]) => ` "${key}": ${desc}`)
139
+ .join('\n');
140
+ const decisionNote = decisionContext
141
+ ? `\n\nARCHITECTURAL CHOICE IN TASK: ${decisionContext}\nEach agent MUST name which option they prefer in their recommendation.`
142
+ : '';
143
+ const schema = `{
144
+ "lead_dev": { "verdict": "approve|warn|block", "reason": "one sentence", "concerns": ["concern"], "recommendation": "actionable advice" },
145
+ "pm": { "verdict": "approve|warn|block", "reason": "one sentence", "concerns": ["concern"], "recommendation": "actionable advice" },
146
+ "architect": { "verdict": "approve|warn|block", "reason": "one sentence", "concerns": ["concern"], "recommendation": "actionable advice" },
147
+ "ux": { "verdict": "approve|warn|block", "reason": "one sentence", "concerns": ["concern"], "recommendation": "actionable advice" },
148
+ "devil": { "verdict": "warn|block", "reason": "one sentence", "concerns": ["failure mode"], "recommendation": "mitigation" },
149
+ "legal": { "verdict": "approve|warn|block", "reason": "one sentence", "concerns": ["concern"], "recommendation": "actionable advice" },
150
+ "security": { "verdict": "approve|warn|block", "reason": "one sentence", "concerns": ["vulnerability"], "recommendation": "actionable advice" }
151
+ }`;
152
+ return `You are running a Veto Council debate. Analyze the following task as each of the 7 specialists below. Each specialist evaluates independently from their own domain perspective.
153
+
154
+ SPECIALIST ROLES:
155
+ ${agentEntries}${decisionNote}
156
+
157
+ TASK:
158
+ ${task}
159
+ ${enrichedContext ? `\nCONTEXT:\n${enrichedContext}` : ''}
160
+
161
+ RULES:
162
+ - Each specialist speaks only from their domain — Lead Dev does NOT comment on business value, PM does NOT comment on code quality, etc.
163
+ - devil always warns or blocks, never approves non-trivial tasks
164
+ - If the task presents two options (A vs B), each specialist MUST name which they prefer in their recommendation
165
+ - Keep each reason to one sentence. Concerns are brief phrases.
166
+
167
+ Return ONLY this JSON (no markdown, no prose before or after):
168
+ ${schema}`;
169
+ }
170
+ export function parseAgentResponses(raw, task) {
171
+ try {
172
+ const match = raw.match(/\{[\s\S]*\}/);
173
+ if (!match)
174
+ return null;
175
+ const parsed = JSON.parse(match[0]);
176
+ const agents = ['lead_dev', 'pm', 'architect', 'ux', 'devil', 'legal', 'security'];
177
+ const votes = {};
178
+ for (const key of agents) {
179
+ const raw_vote = parsed[key];
180
+ if (!raw_vote || typeof raw_vote !== 'object') {
181
+ votes[key] = FALLBACKS[key](task);
182
+ continue;
183
+ }
184
+ const verdict = ['approve', 'warn', 'block'].includes(raw_vote.verdict)
185
+ ? raw_vote.verdict
186
+ : 'warn';
187
+ votes[key] = {
188
+ verdict,
189
+ reason: typeof raw_vote.reason === 'string' ? raw_vote.reason : 'No reason provided.',
190
+ concerns: Array.isArray(raw_vote.concerns)
191
+ ? raw_vote.concerns.filter((c) => typeof c === 'string')
192
+ : [],
193
+ recommendation: typeof raw_vote.recommendation === 'string' ? raw_vote.recommendation : undefined,
194
+ };
195
+ }
196
+ return votes;
197
+ }
198
+ catch {
199
+ return null;
200
+ }
201
+ }
202
+ export function runFromAgentResponses(input, votes) {
203
+ const { final_verdict, block_reasons, warnings, recommended } = decide(votes);
204
+ const debated_at = new Date().toISOString();
205
+ const formatted_output = formatDebate(input.task, votes, final_verdict, block_reasons, warnings, recommended);
206
+ return { task: input.task, final_verdict, votes, recommended, block_reasons, warnings, debated_at, formatted_output };
207
+ }
107
208
  // ─── Public API ───────────────────────────────────────────────────────────────
108
209
  export async function runLlmDebate(server, input) {
109
210
  const enrichedContext = buildContextString(input.project_dir, input.context);
110
211
  const fullText = enrichedContext ? `${input.task}\n\n${enrichedContext}` : input.task;
111
212
  const memoryContext = buildMemoryContext(input.task, input.project_dir);
213
+ // Extract architectural choice if present — inject into every LLM call
214
+ const decision = extractDecision(input.task);
215
+ const decisionContext = decision.isDecisionTask
216
+ ? `Option A: "${decision.optionA}" vs Option B: "${decision.optionB}"`
217
+ : undefined;
112
218
  // All 7 agents run in parallel — each falls back individually on sampling failure
113
219
  const [lead_dev, pm, architect, ux, devil, legal, security] = await Promise.all([
114
- callAgentLlm(server, 'lead_dev', fullText, memoryContext),
115
- callAgentLlm(server, 'pm', fullText, memoryContext),
116
- callAgentLlm(server, 'architect', fullText, memoryContext),
117
- callAgentLlm(server, 'ux', fullText, memoryContext),
118
- callAgentLlm(server, 'devil', fullText, memoryContext),
119
- callAgentLlm(server, 'legal', fullText, memoryContext),
120
- callAgentLlm(server, 'security', fullText, memoryContext),
220
+ callAgentLlm(server, 'lead_dev', fullText, memoryContext, decisionContext),
221
+ callAgentLlm(server, 'pm', fullText, memoryContext, decisionContext),
222
+ callAgentLlm(server, 'architect', fullText, memoryContext, decisionContext),
223
+ callAgentLlm(server, 'ux', fullText, memoryContext, decisionContext),
224
+ callAgentLlm(server, 'devil', fullText, memoryContext, decisionContext),
225
+ callAgentLlm(server, 'legal', fullText, memoryContext, decisionContext),
226
+ callAgentLlm(server, 'security', fullText, memoryContext, decisionContext),
121
227
  ]);
122
228
  const votes = { lead_dev, pm, architect, ux, devil, legal, security };
123
229
  const { final_verdict, block_reasons, warnings, recommended } = decide(votes);
@@ -1 +1 @@
1
- {"version":3,"file":"llm-council.js","sourceRoot":"","sources":["../../src/council/llm-council.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"llm-council.js","sourceRoot":"","sources":["../../src/council/llm-council.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"product-manager.d.ts","sourceRoot":"","sources":["../../src/council/product-manager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAkG5C,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAmD/C"}
1
+ {"version":3,"file":"product-manager.d.ts","sourceRoot":"","sources":["../../src/council/product-manager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAmG5C,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAqD/C"}
@@ -1,3 +1,4 @@
1
+ import { extractDecision, pickSide, reframeVote } from './decision-extractor.js';
1
2
  const BLOCK_RULES = [
2
3
  {
3
4
  pattern: /rewrite.{0,20}from.{0,10}scratch/i,
@@ -108,32 +109,51 @@ export function analyze(task) {
108
109
  recommendations.push(rule.recommendation);
109
110
  }
110
111
  }
112
+ let vote;
111
113
  if (blocks.length > 0) {
112
- return {
114
+ vote = {
113
115
  verdict: 'block',
114
116
  reason: blocks[0].reason,
115
117
  concerns: blocks.slice(1).map(b => b.reason),
116
118
  recommendation: blocks.map(b => b.recommendation).join(' | '),
117
119
  };
118
120
  }
119
- if (concerns.length > 0) {
120
- return {
121
+ else if (concerns.length > 0) {
122
+ vote = {
121
123
  verdict: 'warn',
122
124
  reason: `${concerns.length} product risk${concerns.length > 1 ? 's' : ''} — scope or complexity concern.`,
123
125
  concerns,
124
126
  recommendation: recommendations[0],
125
127
  };
126
128
  }
127
- const matched = TOPIC_INSIGHTS.filter(t => t.pattern.test(task));
128
- if (matched.length > 0) {
129
- const top = matched.slice(0, 2);
130
- return {
131
- verdict: 'warn',
132
- reason: top[0].concern,
133
- concerns: top.slice(1).map(t => t.concern),
134
- recommendation: top.map(t => t.recommendation).join(' | '),
135
- };
129
+ else {
130
+ const matched = TOPIC_INSIGHTS.filter(t => t.pattern.test(task));
131
+ if (matched.length > 0) {
132
+ const top = matched.slice(0, 2);
133
+ vote = {
134
+ verdict: 'warn',
135
+ reason: top[0].concern,
136
+ concerns: top.slice(1).map(t => t.concern),
137
+ recommendation: top.map(t => t.recommendation).join(' | '),
138
+ };
139
+ }
140
+ else {
141
+ vote = { verdict: 'approve', reason: 'Reasonable scope. Ship it.', concerns: [] };
142
+ }
136
143
  }
137
- return { verdict: 'approve', reason: 'Reasonable scope. Ship it.', concerns: [] };
144
+ return applyDecisionStance(vote, task);
145
+ }
146
+ // PM risk: options that add scope, infrastructure, or delay time-to-value
147
+ const PM_RISK = /\b(http|express|rest.?api|api.?layer|new\s+(server|layer|transport)|oauth|auth.?system|bundl)\b/i;
148
+ function applyDecisionStance(vote, task) {
149
+ const ctx = extractDecision(task);
150
+ if (!ctx.isDecisionTask)
151
+ return vote;
152
+ const { optionA, optionB } = ctx;
153
+ const side = pickSide(optionA, optionB, PM_RISK);
154
+ const advice = side
155
+ ? `"${side.preferred}" ships faster and has lower scope risk. Defer "${side.avoided}" until users explicitly request it and usage data justifies the investment.`
156
+ : `Evaluate which option delivers user value sooner. Ship the simpler path; add complexity only once real demand is confirmed.`;
157
+ return reframeVote(vote, ctx, side?.preferred ?? null, advice);
138
158
  }
139
159
  //# sourceMappingURL=product-manager.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"product-manager.js","sourceRoot":"","sources":["../../src/council/product-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"product-manager.js","sourceRoot":"","sources":["../../src/council/product-manager.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../../src/council/security.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAkI5C,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CA0F/C"}
1
+ {"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../../src/council/security.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAmI5C,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CA4F/C"}
@@ -1,3 +1,4 @@
1
+ import { extractDecision, pickSide, reframeVote } from './decision-extractor.js';
1
2
  const BLOCK_RULES = [
2
3
  {
3
4
  pattern: /(no.{0,25}rate.?limit|(auth|login|password|signin|otp|2fa|token|reset).{0,50}no.{0,20}rate.?limit|no.{0,25}rate.?limit.{0,50}(auth|login|password|signin|otp|2fa))/i,
@@ -141,22 +142,6 @@ export function analyze(task) {
141
142
  recommendations.push(rule.recommendation);
142
143
  }
143
144
  }
144
- if (blocks.length > 0) {
145
- return {
146
- verdict: 'block',
147
- reason: blocks[0].reason,
148
- concerns: blocks.slice(1).map(b => b.reason),
149
- recommendation: blocks.map(b => b.recommendation).join(' | '),
150
- };
151
- }
152
- if (concerns.length > 0) {
153
- return {
154
- verdict: 'warn',
155
- reason: `${concerns.length} security concern${concerns.length > 1 ? 's' : ''} — threat model flagged issues.`,
156
- concerns,
157
- recommendation: recommendations[0],
158
- };
159
- }
160
145
  // Topic-based security analysis for tasks with no specific pattern matches
161
146
  const TOPIC_INSIGHTS = [
162
147
  {
@@ -195,16 +180,51 @@ export function analyze(task) {
195
180
  recommendation: 'For every new tool: define input validation, define maximum input size, consider what the worst-case malicious input looks like, and write a security note in the tool description.',
196
181
  },
197
182
  ];
198
- const topicMatched = TOPIC_INSIGHTS.filter(t => t.pattern.test(task));
199
- if (topicMatched.length > 0) {
200
- const top = topicMatched.slice(0, 2);
201
- return {
183
+ let vote;
184
+ if (blocks.length > 0) {
185
+ vote = {
186
+ verdict: 'block',
187
+ reason: blocks[0].reason,
188
+ concerns: blocks.slice(1).map(b => b.reason),
189
+ recommendation: blocks.map(b => b.recommendation).join(' | '),
190
+ };
191
+ }
192
+ else if (concerns.length > 0) {
193
+ vote = {
202
194
  verdict: 'warn',
203
- reason: top[0].concern,
204
- concerns: top.slice(1).map(t => t.concern),
205
- recommendation: top.map(t => t.recommendation).join(' | '),
195
+ reason: `${concerns.length} security concern${concerns.length > 1 ? 's' : ''} — threat model flagged issues.`,
196
+ concerns,
197
+ recommendation: recommendations[0],
206
198
  };
207
199
  }
208
- return { verdict: 'approve', reason: 'No security threats identified in threat model.', concerns: [] };
200
+ else {
201
+ const topicMatched = TOPIC_INSIGHTS.filter(t => t.pattern.test(task));
202
+ if (topicMatched.length > 0) {
203
+ const top = topicMatched.slice(0, 2);
204
+ vote = {
205
+ verdict: 'warn',
206
+ reason: top[0].concern,
207
+ concerns: top.slice(1).map(t => t.concern),
208
+ recommendation: top.map(t => t.recommendation).join(' | '),
209
+ };
210
+ }
211
+ else {
212
+ vote = { verdict: 'approve', reason: 'No security threats identified in threat model.', concerns: [] };
213
+ }
214
+ }
215
+ return applyDecisionStance(vote, task);
216
+ }
217
+ // Security risk: options that expose the server to the network or add new untrusted input paths
218
+ const SEC_RISK = /\b(http|rest.?api|express|network|port|remote|transport|oauth|token.?endpoint|api.?key)\b/i;
219
+ function applyDecisionStance(vote, task) {
220
+ const ctx = extractDecision(task);
221
+ if (!ctx.isDecisionTask)
222
+ return vote;
223
+ const { optionA, optionB } = ctx;
224
+ const side = pickSide(optionA, optionB, SEC_RISK);
225
+ const advice = side
226
+ ? `"${side.preferred}" keeps the threat model local-only. "${side.avoided}" changes Veto from a local tool to a network service — auth, TLS, rate-limiting, and input validation become mandatory from day one.`
227
+ : `Both options carry network exposure risk. Confirm: can this be done without opening a network port? If not, auth and TLS are non-negotiable.`;
228
+ return reframeVote(vote, ctx, side?.preferred ?? null, advice);
209
229
  }
210
230
  //# sourceMappingURL=security.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"security.js","sourceRoot":"","sources":["../../src/council/security.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"security.js","sourceRoot":"","sources":["../../src/council/security.ts"],"names":[],"mappings":"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"}