@jigyasudham/veto 1.2.19 → 1.4.1

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 (61) hide show
  1. package/README.md +303 -251
  2. package/dist/cli.js +35 -9
  3. package/dist/cli.js.map +1 -1
  4. package/dist/context/reader.d.ts.map +1 -1
  5. package/dist/context/reader.js +4 -1
  6. package/dist/context/reader.js.map +1 -1
  7. package/dist/council/decision-engine.d.ts.map +1 -1
  8. package/dist/council/decision-engine.js +21 -1
  9. package/dist/council/decision-engine.js.map +1 -1
  10. package/dist/council/decision-extractor.d.ts +13 -0
  11. package/dist/council/decision-extractor.d.ts.map +1 -0
  12. package/dist/council/decision-extractor.js +66 -0
  13. package/dist/council/decision-extractor.js.map +1 -0
  14. package/dist/council/devil-advocate.d.ts.map +1 -1
  15. package/dist/council/devil-advocate.js +12 -1
  16. package/dist/council/devil-advocate.js.map +1 -1
  17. package/dist/council/index.d.ts.map +1 -1
  18. package/dist/council/index.js +26 -5
  19. package/dist/council/index.js.map +1 -1
  20. package/dist/council/lead-developer.d.ts.map +1 -1
  21. package/dist/council/lead-developer.js +34 -14
  22. package/dist/council/lead-developer.js.map +1 -1
  23. package/dist/council/legal-compliance.d.ts.map +1 -1
  24. package/dist/council/legal-compliance.js +44 -24
  25. package/dist/council/legal-compliance.js.map +1 -1
  26. package/dist/council/llm-council.d.ts +4 -0
  27. package/dist/council/llm-council.d.ts.map +1 -0
  28. package/dist/council/llm-council.js +160 -0
  29. package/dist/council/llm-council.js.map +1 -0
  30. package/dist/council/product-manager.d.ts.map +1 -1
  31. package/dist/council/product-manager.js +33 -13
  32. package/dist/council/product-manager.js.map +1 -1
  33. package/dist/council/security.d.ts.map +1 -1
  34. package/dist/council/security.js +44 -24
  35. package/dist/council/security.js.map +1 -1
  36. package/dist/council/system-architect.d.ts.map +1 -1
  37. package/dist/council/system-architect.js +33 -13
  38. package/dist/council/system-architect.js.map +1 -1
  39. package/dist/council/types.d.ts +2 -0
  40. package/dist/council/types.d.ts.map +1 -1
  41. package/dist/council/ux-designer.d.ts.map +1 -1
  42. package/dist/council/ux-designer.js +47 -26
  43. package/dist/council/ux-designer.js.map +1 -1
  44. package/dist/memory/local.d.ts +40 -1
  45. package/dist/memory/local.d.ts.map +1 -1
  46. package/dist/memory/local.js +95 -4
  47. package/dist/memory/local.js.map +1 -1
  48. package/dist/router/complexity-scorer.js +2 -2
  49. package/dist/router/complexity-scorer.js.map +1 -1
  50. package/dist/server.js +232 -793
  51. package/dist/server.js.map +1 -1
  52. package/dist/skills/memory/skill-session-restore.d.ts.map +1 -1
  53. package/dist/skills/memory/skill-session-restore.js +19 -24
  54. package/dist/skills/memory/skill-session-restore.js.map +1 -1
  55. package/dist/skills/memory/skill-session-save.js +4 -4
  56. package/dist/skills/memory/skill-session-save.js.map +1 -1
  57. package/dist/tools/definitions.d.ts +1073 -0
  58. package/dist/tools/definitions.d.ts.map +1 -0
  59. package/dist/tools/definitions.js +797 -0
  60. package/dist/tools/definitions.js.map +1 -0
  61. package/package.json +2 -2
@@ -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":"AAGA,MAAM,WAAW,GAAuE;IACtF;QACE,OAAO,EAAE,qKAAqK;QAC9K,MAAM,EAAE,0FAA0F;QAClG,cAAc,EAAE,4FAA4F;KAC7G;IACD;QACE,OAAO,EAAE,2EAA2E;QACpF,MAAM,EAAE,yFAAyF;QACjG,cAAc,EAAE,2FAA2F;KAC5G;IACD;QACE,OAAO,EAAE,wGAAwG;QACjH,MAAM,EAAE,oGAAoG;QAC5G,cAAc,EAAE,mFAAmF;KACpG;IACD;QACE,OAAO,EAAE,sEAAsE;QAC/E,MAAM,EAAE,wGAAwG;QAChH,cAAc,EAAE,2FAA2F;KAC5G;IACD;QACE,OAAO,EAAE,oEAAoE;QAC7E,MAAM,EAAE,oEAAoE;QAC5E,cAAc,EAAE,gFAAgF;KACjG;IACD;QACE,OAAO,EAAE,oFAAoF;QAC7F,MAAM,EAAE,uGAAuG;QAC/G,cAAc,EAAE,0FAA0F;KAC3G;IACD;QACE,OAAO,EAAE,2EAA2E;QACpF,MAAM,EAAE,iGAAiG;QACzG,cAAc,EAAE,gFAAgF;KACjG;IACD;QACE,OAAO,EAAE,mGAAmG;QAC5G,MAAM,EAAE,qGAAqG;QAC7G,cAAc,EAAE,+EAA+E;KAChG;IACD;QACE,OAAO,EAAE,mDAAmD;QAC5D,MAAM,EAAE,+EAA+E;QACvF,cAAc,EAAE,kFAAkF;KACnG;IACD;QACE,OAAO,EAAE,wDAAwD;QACjE,MAAM,EAAE,yFAAyF;QACjG,cAAc,EAAE,uFAAuF;KACxG;IACD;QACE,OAAO,EAAE,yEAAyE;QAClF,MAAM,EAAE,6FAA6F;QACrG,cAAc,EAAE,sFAAsF;KACvG;IACD;QACE,OAAO,EAAE,kGAAkG;QAC3G,MAAM,EAAE,2FAA2F;QACnG,cAAc,EAAE,8FAA8F;KAC/G;CACF,CAAC;AAEF,MAAM,UAAU,GAAwE;IACtF;QACE,OAAO,EAAE,+CAA+C;QACxD,OAAO,EAAE,2EAA2E;QACpF,cAAc,EAAE,4EAA4E;KAC7F;IACD;QACE,OAAO,EAAE,4EAA4E;QACrF,OAAO,EAAE,4FAA4F;QACrG,cAAc,EAAE,uEAAuE;KACxF;IACD;QACE,OAAO,EAAE,sCAAsC;QAC/C,OAAO,EAAE,sFAAsF;QAC/F,cAAc,EAAE,gGAAgG;KACjH;IACD;QACE,OAAO,EAAE,kEAAkE;QAC3E,OAAO,EAAE,+EAA+E;QACxF,cAAc,EAAE,gFAAgF;KACjG;IACD;QACE,OAAO,EAAE,yDAAyD;QAClE,OAAO,EAAE,wFAAwF;QACjG,cAAc,EAAE,oGAAoG;KACrH;IACD;QACE,OAAO,EAAE,+CAA+C;QACxD,OAAO,EAAE,0FAA0F;QACnG,cAAc,EAAE,wFAAwF;KACzG;IACD;QACE,OAAO,EAAE,gEAAgE;QACzE,OAAO,EAAE,mFAAmF;QAC5F,cAAc,EAAE,yEAAyE;KAC1F;IACD;QACE,OAAO,EAAE,kEAAkE;QAC3E,OAAO,EAAE,gFAAgF;QACzF,cAAc,EAAE,uFAAuF;KACxG;IACD;QACE,OAAO,EAAE,+EAA+E;QACxF,OAAO,EAAE,4FAA4F;QACrG,cAAc,EAAE,qFAAqF;KACtG;IACD;QACE,OAAO,EAAE,oGAAoG;QAC7G,OAAO,EAAE,mEAAmE;QAC5E,cAAc,EAAE,mEAAmE;KACpF;IACD;QACE,OAAO,EAAE,4CAA4C;QACrD,OAAO,EAAE,gFAAgF;QACzF,cAAc,EAAE,qFAAqF;KACtG;IACD;QACE,OAAO,EAAE,yEAAyE;QAClF,OAAO,EAAE,+EAA+E;QACxF,cAAc,EAAE,qFAAqF;KACtG;CACF,CAAC;AAEF,MAAM,OAAO,GAAG,0EAA0E,CAAC;AAE3F,MAAM,UAAU,OAAO,CAAC,IAAY;IAClC,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;QAC9B,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,wCAAwC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;IAChG,CAAC;IAED,MAAM,MAAM,GAAsD,EAAE,CAAC;IACrE,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,eAAe,GAAa,EAAE,CAAC;IAErC,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;QAC/B,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC5B,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,OAAO;YACL,OAAO,EAAE,OAAO;YAChB,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM;YACxB,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;YAC5C,cAAc,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;SAC9D,CAAC;IACJ,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO;YACL,OAAO,EAAE,MAAM;YACf,MAAM,EAAE,GAAG,QAAQ,CAAC,MAAM,oBAAoB,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,iCAAiC;YAC7G,QAAQ;YACR,cAAc,EAAE,eAAe,CAAC,CAAC,CAAC;SACnC,CAAC;IACJ,CAAC;IAED,2EAA2E;IAC3E,MAAM,cAAc,GAAwE;QAC1F;YACE,OAAO,EAAE,mDAAmD;YAC5D,OAAO,EAAE,mOAAmO;YAC5O,cAAc,EAAE,6KAA6K;SAC9L;QACD;YACE,OAAO,EAAE,yCAAyC;YAClD,OAAO,EAAE,4KAA4K;YACrL,cAAc,EAAE,2LAA2L;SAC5M;QACD;YACE,OAAO,EAAE,wCAAwC;YACjD,OAAO,EAAE,2LAA2L;YACpM,cAAc,EAAE,+JAA+J;SAChL;QACD;YACE,OAAO,EAAE,4CAA4C;YACrD,OAAO,EAAE,qNAAqN;YAC9N,cAAc,EAAE,qJAAqJ;SACtK;QACD;YACE,OAAO,EAAE,iCAAiC;YAC1C,OAAO,EAAE,oMAAoM;YAC7M,cAAc,EAAE,2KAA2K;SAC5L;QACD;YACE,OAAO,EAAE,wBAAwB;YACjC,OAAO,EAAE,uKAAuK;YAChL,cAAc,EAAE,2JAA2J;SAC5K;QACD;YACE,OAAO,EAAE,kCAAkC;YAC3C,OAAO,EAAE,8IAA8I;YACvJ,cAAc,EAAE,qLAAqL;SACtM;KACF,CAAC;IAEF,MAAM,YAAY,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACtE,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,GAAG,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACrC,OAAO;YACL,OAAO,EAAE,MAAM;YACf,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO;YACtB,QAAQ,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;YAC1C,cAAc,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;SAC3D,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,iDAAiD,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;AACzG,CAAC"}
1
+ {"version":3,"file":"security.js","sourceRoot":"","sources":["../../src/council/security.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"system-architect.d.ts","sourceRoot":"","sources":["../../src/council/system-architect.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAqI5C,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAmD/C"}
1
+ {"version":3,"file":"system-architect.d.ts","sourceRoot":"","sources":["../../src/council/system-architect.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAsI5C,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: /\bdrop\s+table\b/i,
@@ -143,32 +144,51 @@ export function analyze(task) {
143
144
  recommendations.push(rule.recommendation);
144
145
  }
145
146
  }
147
+ let vote;
146
148
  if (blocks.length > 0) {
147
- return {
149
+ vote = {
148
150
  verdict: 'block',
149
151
  reason: blocks[0].reason,
150
152
  concerns: blocks.slice(1).map(b => b.reason),
151
153
  recommendation: blocks.map(b => b.recommendation).join(' | '),
152
154
  };
153
155
  }
154
- if (concerns.length > 0) {
155
- return {
156
+ else if (concerns.length > 0) {
157
+ vote = {
156
158
  verdict: 'warn',
157
159
  reason: `${concerns.length} structural concern${concerns.length > 1 ? 's' : ''} — review before building.`,
158
160
  concerns,
159
161
  recommendation: recommendations[0],
160
162
  };
161
163
  }
162
- const matched = TOPIC_INSIGHTS.filter(t => t.pattern.test(task));
163
- if (matched.length > 0) {
164
- const top = matched.slice(0, 2);
165
- return {
166
- verdict: 'warn',
167
- reason: top[0].concern,
168
- concerns: top.slice(1).map(t => t.concern),
169
- recommendation: top.map(t => t.recommendation).join(' | '),
170
- };
164
+ else {
165
+ const matched = TOPIC_INSIGHTS.filter(t => t.pattern.test(task));
166
+ if (matched.length > 0) {
167
+ const top = matched.slice(0, 2);
168
+ vote = {
169
+ verdict: 'warn',
170
+ reason: top[0].concern,
171
+ concerns: top.slice(1).map(t => t.concern),
172
+ recommendation: top.map(t => t.recommendation).join(' | '),
173
+ };
174
+ }
175
+ else {
176
+ vote = { verdict: 'approve', reason: 'Architecture looks sound. No structural concerns identified.', concerns: [] };
177
+ }
171
178
  }
172
- return { verdict: 'approve', reason: 'Architecture looks sound. No structural concerns identified.', concerns: [] };
179
+ return applyDecisionStance(vote, task);
180
+ }
181
+ // Architect risk: options that tighten coupling or introduce new architectural layers
182
+ const ARCH_RISK = /\b(bundl|integrat\s+into|embed|inline|http|express|new\s+(server|layer|transport|protocol)|microservice)\b/i;
183
+ function applyDecisionStance(vote, task) {
184
+ const ctx = extractDecision(task);
185
+ if (!ctx.isDecisionTask)
186
+ return vote;
187
+ const { optionA, optionB } = ctx;
188
+ const side = pickSide(optionA, optionB, ARCH_RISK);
189
+ const advice = side
190
+ ? `"${side.preferred}" preserves separation of concerns and keeps the boundary clean. "${side.avoided}" creates coupling that is difficult to undo later — the caller now depends on implementation details.`
191
+ : `Evaluate which option maintains the cleaner boundary. Prefer the path that adds no new coupling between existing components.`;
192
+ return reframeVote(vote, ctx, side?.preferred ?? null, advice);
173
193
  }
174
194
  //# sourceMappingURL=system-architect.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"system-architect.js","sourceRoot":"","sources":["../../src/council/system-architect.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"system-architect.js","sourceRoot":"","sources":["../../src/council/system-architect.ts"],"names":[],"mappings":"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"}
@@ -6,10 +6,12 @@ export interface AgentVote {
6
6
  concerns: string[];
7
7
  recommendation?: string;
8
8
  }
9
+ export type CouncilStrictness = 'fast' | 'standard' | 'strict';
9
10
  export interface DebateInput {
10
11
  task: string;
11
12
  context?: string;
12
13
  project_dir?: string;
14
+ strictness?: CouncilStrictness;
13
15
  }
14
16
  export interface DebateResult {
15
17
  task: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/council/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;AACxD,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,QAAQ,GAAG,KAAK,GAAG,UAAU,CAAC;AAErE,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,YAAY,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,cAAc,CAAC;IAC9B,KAAK,EAAE;QACL,QAAQ,EAAE,SAAS,CAAC;QACpB,EAAE,EAAE,SAAS,CAAC;QACd,SAAS,EAAE,SAAS,CAAC;QACrB,EAAE,EAAE,SAAS,CAAC;QACd,KAAK,EAAE,SAAS,CAAC;QACjB,KAAK,EAAE,SAAS,CAAC;QACjB,QAAQ,EAAE,SAAS,CAAC;KACrB,CAAC;IACF,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;CAC1B"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/council/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;AACxD,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,QAAQ,GAAG,KAAK,GAAG,UAAU,CAAC;AAErE,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,YAAY,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,UAAU,GAAG,QAAQ,CAAC;AAE/D,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,iBAAiB,CAAC;CAChC;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,cAAc,CAAC;IAC9B,KAAK,EAAE;QACL,QAAQ,EAAE,SAAS,CAAC;QACpB,EAAE,EAAE,SAAS,CAAC;QACd,SAAS,EAAE,SAAS,CAAC;QACrB,EAAE,EAAE,SAAS,CAAC;QACd,KAAK,EAAE,SAAS,CAAC;QACjB,KAAK,EAAE,SAAS,CAAC;QACjB,QAAQ,EAAE,SAAS,CAAC;KACrB,CAAC;IACF,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;CAC1B"}
@@ -1 +1 @@
1
- {"version":3,"file":"ux-designer.d.ts","sourceRoot":"","sources":["../../src/council/ux-designer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAqE5C,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CA+F/C"}
1
+ {"version":3,"file":"ux-designer.d.ts","sourceRoot":"","sources":["../../src/council/ux-designer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAsE5C,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAkG/C"}
@@ -1,3 +1,4 @@
1
+ import { extractDecision, pickSide, reframeVote } from './decision-extractor.js';
1
2
  // Backend-only tasks: UX approves without friction
2
3
  const BACKEND_ONLY = /\b(api|backend|server|database|db|query|schema|migration|auth.*middleware|jwt|oauth|cron|cli|script|worker|queue|cache|redis|sql|index|trigger|webhook)\b/i;
3
4
  const FRONTEND_SIGNALS = /\b(ui|ux|form|button|modal|page|screen|component|view|layout|menu|nav|input|field|label|error.?message|loading|user.?interface|frontend|react|vue|svelte|html|css)\b/i;
@@ -65,14 +66,15 @@ export function analyze(task) {
65
66
  if (TRIVIAL.test(task.trim())) {
66
67
  return { verdict: 'approve', reason: 'Trivial change — no UX concerns.', concerns: [] };
67
68
  }
68
- // Pure backend tasks get a light pass
69
+ // Pure backend tasks get a light pass — but still apply decision stance
69
70
  const isBackend = BACKEND_ONLY.test(task) && !FRONTEND_SIGNALS.test(task);
70
71
  if (isBackend) {
71
- return {
72
+ const backendVote = {
72
73
  verdict: 'approve',
73
74
  reason: 'Backend task — no direct UX concerns. Ensure API errors surface clearly to users.',
74
75
  concerns: [],
75
76
  };
77
+ return applyDecisionStance(backendVote, task);
76
78
  }
77
79
  const blocks = [];
78
80
  const concerns = [];
@@ -88,22 +90,6 @@ export function analyze(task) {
88
90
  recommendations.push(rule.recommendation);
89
91
  }
90
92
  }
91
- if (blocks.length > 0) {
92
- return {
93
- verdict: 'block',
94
- reason: blocks[0].reason,
95
- concerns: blocks.slice(1).map(b => b.reason),
96
- recommendation: blocks.map(b => b.recommendation).join(' | '),
97
- };
98
- }
99
- if (concerns.length > 0) {
100
- return {
101
- verdict: 'warn',
102
- reason: `${concerns.length} UX concern${concerns.length > 1 ? 's' : ''} — real users will notice this.`,
103
- concerns,
104
- recommendation: recommendations[0],
105
- };
106
- }
107
93
  // Topic-based UX analysis for tasks with no direct frontend signals
108
94
  const TOPIC_INSIGHTS = [
109
95
  {
@@ -137,16 +123,51 @@ export function analyze(task) {
137
123
  recommendation: 'Show progress for any operation over 500ms. For long operations, stream partial results or show a "working..." status. Never leave the user in silence.',
138
124
  },
139
125
  ];
140
- const topicMatched = TOPIC_INSIGHTS.filter(t => t.pattern.test(task));
141
- if (topicMatched.length > 0) {
142
- const top = topicMatched.slice(0, 2);
143
- return {
126
+ let vote;
127
+ if (blocks.length > 0) {
128
+ vote = {
129
+ verdict: 'block',
130
+ reason: blocks[0].reason,
131
+ concerns: blocks.slice(1).map(b => b.reason),
132
+ recommendation: blocks.map(b => b.recommendation).join(' | '),
133
+ };
134
+ }
135
+ else if (concerns.length > 0) {
136
+ vote = {
144
137
  verdict: 'warn',
145
- reason: top[0].concern,
146
- concerns: top.slice(1).map(t => t.concern),
147
- recommendation: top.map(t => t.recommendation).join(' | '),
138
+ reason: `${concerns.length} UX concern${concerns.length > 1 ? 's' : ''} — real users will notice this.`,
139
+ concerns,
140
+ recommendation: recommendations[0],
148
141
  };
149
142
  }
150
- return { verdict: 'approve', reason: 'UX looks solid. No user experience concerns identified.', concerns: [] };
143
+ else {
144
+ const topicMatched = TOPIC_INSIGHTS.filter(t => t.pattern.test(task));
145
+ if (topicMatched.length > 0) {
146
+ const top = topicMatched.slice(0, 2);
147
+ vote = {
148
+ verdict: 'warn',
149
+ reason: top[0].concern,
150
+ concerns: top.slice(1).map(t => t.concern),
151
+ recommendation: top.map(t => t.recommendation).join(' | '),
152
+ };
153
+ }
154
+ else {
155
+ vote = { verdict: 'approve', reason: 'UX looks solid. No user experience concerns identified.', concerns: [] };
156
+ }
157
+ }
158
+ return applyDecisionStance(vote, task);
159
+ }
160
+ // UX risk: options that add setup friction, credentials, or configuration overhead
161
+ const UX_RISK = /\b(http|api.?key|auth|oauth|port|server\s+config|credentials|token|setup.{0,15}required|install.{0,15}extra)\b/i;
162
+ function applyDecisionStance(vote, task) {
163
+ const ctx = extractDecision(task);
164
+ if (!ctx.isDecisionTask)
165
+ return vote;
166
+ const { optionA, optionB } = ctx;
167
+ const side = pickSide(optionA, optionB, UX_RISK);
168
+ const advice = side
169
+ ? `"${side.preferred}" keeps the developer experience simpler — no extra setup or credentials. "${side.avoided}" adds friction that will silently reduce adoption.`
170
+ : `Evaluate which option requires fewer steps for a first-time user. The shorter happy path wins on developer experience.`;
171
+ return reframeVote(vote, ctx, side?.preferred ?? null, advice);
151
172
  }
152
173
  //# sourceMappingURL=ux-designer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ux-designer.js","sourceRoot":"","sources":["../../src/council/ux-designer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ux-designer.js","sourceRoot":"","sources":["../../src/council/ux-designer.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import type { DatabaseSync } from 'node:sqlite';
2
2
  import { type SessionRow, type KnowledgeRow, type KnowledgeType, type ProjectMapRow } from './schema.js';
3
3
  export declare const CONTEXT_WINDOWS: Record<string, number>;
4
+ export declare function resolveContextWindow(platform: string, model?: string): number;
4
5
  export declare function resetDb(): void;
5
6
  export declare function getDb(): DatabaseSync;
6
7
  export type SaveSessionInput = {
@@ -12,6 +13,7 @@ export type SaveSessionInput = {
12
13
  task_state?: string;
13
14
  token_count?: number;
14
15
  save_type?: 'manual' | 'auto';
16
+ tags?: string[];
15
17
  };
16
18
  export type SessionSaveResult = {
17
19
  session_id: string;
@@ -32,7 +34,7 @@ export type UpdateSessionResult = {
32
34
  };
33
35
  export declare function updateSession(session_id: string, input: SaveSessionInput): UpdateSessionResult | null;
34
36
  export declare function restoreSession(session_id: string, active_client?: string): RestoreSessionResult;
35
- export declare function listSessions(limit?: number): SessionRow[];
37
+ export declare function listSessions(limit?: number, query?: string): SessionRow[];
36
38
  export declare function closeSession(session_id: string): void;
37
39
  export declare function getDbPath(): string;
38
40
  export type SaveCouncilOutcomeInput = {
@@ -102,6 +104,43 @@ export declare function fetchAndCacheDocs(package_name: string, ecosystem: 'npm'
102
104
  fetched_at: string;
103
105
  } | null>;
104
106
  export declare function saveTaskPlan(plan_json: string, description_hash: string, project_dir?: string): string;
107
+ export declare function getTaskPlan(description_hash: string): {
108
+ id: string;
109
+ plan_json: string;
110
+ } | null;
111
+ export type VetoMetrics = {
112
+ sessions: {
113
+ total: number;
114
+ today: number;
115
+ this_week: number;
116
+ };
117
+ council: {
118
+ total: number;
119
+ today: number;
120
+ by_verdict: Record<string, number>;
121
+ };
122
+ agents: Array<{
123
+ agent: string;
124
+ calls: number;
125
+ avg_quality: number;
126
+ }>;
127
+ quality: {
128
+ overall_avg: number;
129
+ trend: Array<{
130
+ date: string;
131
+ avg: number;
132
+ count: number;
133
+ }>;
134
+ };
135
+ knowledge: {
136
+ total_entries: number;
137
+ by_type: Record<string, number>;
138
+ };
139
+ patterns: {
140
+ total: number;
141
+ };
142
+ };
143
+ export declare function getMetrics(): VetoMetrics;
105
144
  export type UsageStatus = {
106
145
  today: {
107
146
  by_platform: Array<{
@@ -1 +1 @@
1
- {"version":3,"file":"local.d.ts","sourceRoot":"","sources":["../../src/memory/local.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"local.d.ts","sourceRoot":"","sources":["../../src/memory/local.ts"],"names":[],"mappings":"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"}
@@ -15,6 +15,42 @@ export const CONTEXT_WINDOWS = {
15
15
  gemini: 1_000_000,
16
16
  codex: 128_000,
17
17
  };
18
+ // Per-model context windows — resolved at call time when model is provided.
19
+ // Falls back to CONTEXT_WINDOWS[platform] when model is unknown.
20
+ const MODEL_CONTEXT_WINDOWS = {
21
+ // Claude 4.x — 1M context
22
+ 'claude-sonnet-4-6': 1_000_000,
23
+ 'claude-sonnet-4-7': 1_000_000,
24
+ 'claude-opus-4-7': 1_000_000,
25
+ 'claude-haiku-4-5': 1_000_000,
26
+ // Claude 3.x — 200K context
27
+ 'claude-3-5-sonnet': 200_000,
28
+ 'claude-3-5-haiku': 200_000,
29
+ 'claude-3-opus': 200_000,
30
+ // Gemini — all current models are 1M+
31
+ 'gemini-2-5-pro': 1_048_576,
32
+ 'gemini-2-0-flash': 1_048_576,
33
+ 'gemini-1-5-pro': 1_048_576,
34
+ 'gemini-1-5-flash': 1_048_576,
35
+ // OpenAI / Codex
36
+ 'gpt-4o': 128_000,
37
+ 'gpt-4o-mini': 128_000,
38
+ 'o1': 200_000,
39
+ 'o3': 200_000,
40
+ 'o4-mini': 200_000,
41
+ };
42
+ export function resolveContextWindow(platform, model) {
43
+ if (model) {
44
+ if (MODEL_CONTEXT_WINDOWS[model])
45
+ return MODEL_CONTEXT_WINDOWS[model];
46
+ // Prefix match handles suffixed model IDs like "claude-sonnet-4-6-20251001"
47
+ for (const key of Object.keys(MODEL_CONTEXT_WINDOWS)) {
48
+ if (model.startsWith(key))
49
+ return MODEL_CONTEXT_WINDOWS[key];
50
+ }
51
+ }
52
+ return CONTEXT_WINDOWS[platform] ?? 200_000;
53
+ }
18
54
  const VETO_DIR = join(homedir(), '.veto');
19
55
  const DB_PATH = process.env.VETO_TEST_DB ?? join(VETO_DIR, 'veto.db');
20
56
  let _db = null;
@@ -41,8 +77,16 @@ export function getDb() {
41
77
  migrateUsageLog(_db);
42
78
  migrateSessionSaveType(_db);
43
79
  migrateScanDiagnostics(_db);
80
+ migrateSessionTags(_db);
44
81
  return _db;
45
82
  }
83
+ // Adds tags column to sessions (v1.3.1 migration)
84
+ function migrateSessionTags(db) {
85
+ const cols = db.prepare('PRAGMA table_info(sessions)').all();
86
+ const names = new Set(cols.map(c => c.name));
87
+ if (!names.has('tags'))
88
+ db.exec('ALTER TABLE sessions ADD COLUMN tags TEXT');
89
+ }
46
90
  // Creates scan_diagnostics table if it doesn't exist (v1.2.18 migration)
47
91
  function migrateScanDiagnostics(db) {
48
92
  db.exec(`
@@ -140,9 +184,9 @@ export function saveSession(input) {
140
184
  const token_count = input.token_count ?? 0;
141
185
  const save_type = input.save_type ?? 'manual';
142
186
  db.prepare(`
143
- INSERT INTO sessions (id, started_at, platform, connection_type, project_dir, summary, context, task_state, token_count, save_type)
144
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
145
- `).run(id, now, platform, connection_type, input.project_dir ?? null, input.summary ?? null, input.context ? JSON.stringify(input.context) : null, input.task_state ? JSON.stringify(input.task_state) : null, token_count, save_type);
187
+ INSERT INTO sessions (id, started_at, platform, connection_type, project_dir, summary, context, task_state, token_count, save_type, tags)
188
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
189
+ `).run(id, now, platform, connection_type, input.project_dir ?? null, input.summary ?? null, input.context ? JSON.stringify(input.context) : null, input.task_state ? JSON.stringify(input.task_state) : null, token_count, save_type, input.tags ? JSON.stringify(input.tags) : null);
146
190
  // Record usage event
147
191
  db.prepare(`
148
192
  INSERT INTO usage_events (id, session_id, platform, connection_type, tokens, event_type, recorded_at)
@@ -189,8 +233,13 @@ export function restoreSession(session_id, active_client) {
189
233
  }
190
234
  return { found: true, session: row };
191
235
  }
192
- export function listSessions(limit = 10) {
236
+ export function listSessions(limit = 10, query) {
193
237
  const db = getDb();
238
+ if (query) {
239
+ const q = `%${query}%`;
240
+ return db.prepare(`SELECT * FROM sessions WHERE summary LIKE ? OR context LIKE ? OR task_state LIKE ? OR tags LIKE ? OR project_dir LIKE ?
241
+ ORDER BY created_at DESC LIMIT ?`).all(q, q, q, q, q, limit);
242
+ }
194
243
  return db.prepare('SELECT * FROM sessions ORDER BY created_at DESC LIMIT ?').all(limit);
195
244
  }
196
245
  export function closeSession(session_id) {
@@ -385,6 +434,48 @@ export function saveTaskPlan(plan_json, description_hash, project_dir) {
385
434
  `).run(id, description_hash, plan_json, project_dir ?? null);
386
435
  return id;
387
436
  }
437
+ export function getTaskPlan(description_hash) {
438
+ const db = getDb();
439
+ const row = db.prepare(`
440
+ SELECT id, plan_json FROM task_plans
441
+ WHERE description_hash = ?
442
+ AND created_at > datetime('now', '-7 days')
443
+ ORDER BY created_at DESC
444
+ LIMIT 1
445
+ `).get(description_hash);
446
+ return row ?? null;
447
+ }
448
+ export function getMetrics() {
449
+ const db = getDb();
450
+ const today = new Date().toISOString().slice(0, 10);
451
+ const weekAgo = new Date(Date.now() - 7 * 86400_000).toISOString().slice(0, 10);
452
+ const sessions = {
453
+ total: db.prepare('SELECT COUNT(*) as n FROM sessions').get().n,
454
+ today: db.prepare("SELECT COUNT(*) as n FROM sessions WHERE created_at >= ?").get(today + 'T00:00:00').n,
455
+ this_week: db.prepare("SELECT COUNT(*) as n FROM sessions WHERE created_at >= ?").get(weekAgo + 'T00:00:00').n,
456
+ };
457
+ const councilTotal = db.prepare('SELECT COUNT(*) as n FROM council_outcomes').get().n;
458
+ const councilToday = db.prepare("SELECT COUNT(*) as n FROM council_outcomes WHERE debated_at >= ?").get(today + 'T00:00:00').n;
459
+ const verdictRows = db.prepare('SELECT verdict, COUNT(*) as n FROM council_outcomes GROUP BY verdict').all();
460
+ const by_verdict = Object.fromEntries(verdictRows.map(r => [r.verdict, r.n]));
461
+ const agentRows = db.prepare('SELECT agent, COUNT(*) as calls, AVG(output_quality) as avg_q FROM learning_data WHERE agent IS NOT NULL GROUP BY agent ORDER BY calls DESC LIMIT 10').all();
462
+ const agents = agentRows.map(r => ({ agent: r.agent, calls: r.calls, avg_quality: Math.round(r.avg_q ?? 0) }));
463
+ const overallAvg = db.prepare('SELECT AVG(output_quality) as avg FROM learning_data WHERE output_quality IS NOT NULL').get().avg ?? 0;
464
+ const trendRows = db.prepare("SELECT substr(recorded_at,1,10) as date, AVG(output_quality) as avg, COUNT(*) as count FROM learning_data WHERE output_quality IS NOT NULL AND recorded_at >= ? GROUP BY date ORDER BY date").all(weekAgo + 'T00:00:00');
465
+ const trend = trendRows.map(r => ({ date: r.date, avg: Math.round(r.avg), count: r.count }));
466
+ const knowledgeTotal = db.prepare('SELECT COUNT(*) as n FROM knowledge_base').get().n;
467
+ const knowledgeTypeRows = db.prepare('SELECT type, COUNT(*) as n FROM knowledge_base GROUP BY type').all();
468
+ const by_type = Object.fromEntries(knowledgeTypeRows.map(r => [r.type, r.n]));
469
+ const patternsTotal = db.prepare('SELECT COUNT(*) as n FROM patterns').get().n;
470
+ return {
471
+ sessions,
472
+ council: { total: councilTotal, today: councilToday, by_verdict },
473
+ agents,
474
+ quality: { overall_avg: Math.round(overallAvg), trend },
475
+ knowledge: { total_entries: knowledgeTotal, by_type },
476
+ patterns: { total: patternsTotal },
477
+ };
478
+ }
388
479
  export function getUsageStatus() {
389
480
  const db = getDb();
390
481
  const today = new Date().toISOString().slice(0, 10);