@erode-app/core 0.9.2 → 0.9.4

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 (31) hide show
  1. package/dist/analysis/prompts/drift-analysis.md +17 -0
  2. package/dist/analysis/section-formatters.d.ts.map +1 -1
  3. package/dist/analysis/section-formatters.js +10 -1
  4. package/dist/analysis/section-formatters.js.map +1 -1
  5. package/dist/providers/anthropic/models.d.ts +2 -2
  6. package/dist/providers/anthropic/models.js +2 -2
  7. package/dist/providers/anthropic/models.js.map +1 -1
  8. package/dist/providers/anthropic/provider.d.ts +2 -1
  9. package/dist/providers/anthropic/provider.d.ts.map +1 -1
  10. package/dist/providers/anthropic/provider.js +10 -3
  11. package/dist/providers/anthropic/provider.js.map +1 -1
  12. package/dist/providers/base-provider.d.ts +3 -2
  13. package/dist/providers/base-provider.d.ts.map +1 -1
  14. package/dist/providers/base-provider.js +32 -8
  15. package/dist/providers/base-provider.js.map +1 -1
  16. package/dist/providers/gemini/provider.d.ts +2 -1
  17. package/dist/providers/gemini/provider.d.ts.map +1 -1
  18. package/dist/providers/gemini/provider.js +66 -2
  19. package/dist/providers/gemini/provider.js.map +1 -1
  20. package/dist/providers/generation-profile.d.ts +14 -0
  21. package/dist/providers/generation-profile.d.ts.map +1 -0
  22. package/dist/providers/generation-profile.js +34 -0
  23. package/dist/providers/generation-profile.js.map +1 -0
  24. package/dist/providers/openai/models.d.ts +2 -2
  25. package/dist/providers/openai/models.js +2 -2
  26. package/dist/providers/openai/models.js.map +1 -1
  27. package/dist/providers/openai/provider.d.ts +2 -1
  28. package/dist/providers/openai/provider.d.ts.map +1 -1
  29. package/dist/providers/openai/provider.js +74 -14
  30. package/dist/providers/openai/provider.js.map +1 -1
  31. package/package.json +5 -5
@@ -64,6 +64,23 @@ These are ALL relationships currently declared in the architecture model:
64
64
 
65
65
  Cross-reference the dependency changes above against the architecture model and assess:
66
66
 
67
+ ### Dependency Coverage
68
+
69
+ For every ADDED dependency in the DEPENDENCY CHANGES DETECTED section, account for it
70
+ explicitly. Classify each dependency as one of:
71
+
72
+ - Already declared in the model
73
+ - New relationship to add
74
+ - New component plus relationship to add
75
+ - External package or third-party dependency that should not be modeled
76
+ - Ignored with a brief reason
77
+
78
+ If an existing modeled component gains a dependency on a newly introduced component,
79
+ include both the new component and that relationship. If a newly introduced component
80
+ depends on an existing modeled component, include both the new component and that
81
+ relationship. Do not let one dependency that created a new component hide other
82
+ relationships to or from that component.
83
+
67
84
  ### 1. New Dependencies NOT in Model (Potential Drift)
68
85
 
69
86
  - Are there new dependencies that aren't in the allowed dependencies list?
@@ -1 +1 @@
1
- {"version":3,"file":"section-formatters.d.ts","sourceRoot":"","sources":["../../src/analysis/section-formatters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,4CAA4C,CAAC;AAC7F,OAAO,KAAK,EAAE,UAAU,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAChF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,wBAAgB,yBAAyB,CAAC,aAAa,EAAE;IACvD,aAAa,CAAC,EAAE,wBAAwB,EAAE,CAAC;IAC3C,YAAY,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CACjF,GAAG,MAAM,CAoBT;AAED,wBAAgB,gBAAgB,CAAC,UAAU,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,GAAG,MAAM,CAIrF;AAED,wBAAgB,uBAAuB,CAAC,YAAY,EAAE,0BAA0B,GAAG,MAAM,CA+BxF;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG,MAAM,CAKT;AAED,wBAAgB,mBAAmB,CACjC,UAAU,EAAE;IACV,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,EAAE,GACF,MAAM,CAWR;AAED,wBAAgB,sBAAsB,CACpC,aAAa,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,GACjF,MAAM,CAWR;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,MAAM,CAK/D;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG;IACpD,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd,CAOA"}
1
+ {"version":3,"file":"section-formatters.d.ts","sourceRoot":"","sources":["../../src/analysis/section-formatters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,4CAA4C,CAAC;AAC7F,OAAO,KAAK,EAAE,UAAU,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAChF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,wBAAgB,yBAAyB,CAAC,aAAa,EAAE;IACvD,aAAa,CAAC,EAAE,wBAAwB,EAAE,CAAC;IAC3C,YAAY,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CACjF,GAAG,MAAM,CAoBT;AAED,wBAAgB,gBAAgB,CAAC,UAAU,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,GAAG,MAAM,CAIrF;AAED,wBAAgB,uBAAuB,CAAC,YAAY,EAAE,0BAA0B,GAAG,MAAM,CAwCxF;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG,MAAM,CAKT;AAED,wBAAgB,mBAAmB,CACjC,UAAU,EAAE;IACV,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,EAAE,GACF,MAAM,CAWR;AAED,wBAAgB,sBAAsB,CACpC,aAAa,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,GACjF,MAAM,CAWR;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,MAAM,CAK/D;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG;IACpD,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd,CAOA"}
@@ -43,7 +43,16 @@ export function formatDependencyChanges(dependencies) {
43
43
  if (items && items.length > 0) {
44
44
  section += `**${label} Dependencies:**\n`;
45
45
  section += items
46
- .map((dep) => `- ${dep.dependency} (${dep.file})\n ${dep.description}`)
46
+ .map((dep) => {
47
+ const trimmedCode = dep.code.trim();
48
+ const evidence = trimmedCode
49
+ ? `\n Evidence:\n${trimmedCode
50
+ .split('\n')
51
+ .map((line) => ` ${line}`)
52
+ .join('\n')}`
53
+ : '';
54
+ return `- ${dep.dependency} (${dep.file})\n ${dep.description}${evidence}`;
55
+ })
47
56
  .join('\n');
48
57
  section += '\n\n';
49
58
  }
@@ -1 +1 @@
1
- {"version":3,"file":"section-formatters.js","sourceRoot":"","sources":["../../src/analysis/section-formatters.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"section-formatters.js","sourceRoot":"","sources":["../../src/analysis/section-formatters.ts"],"names":[],"mappings":"AAIA,MAAM,UAAU,yBAAyB,CAAC,aAGzC;IACC,IAAI,aAAa,CAAC,aAAa,IAAI,aAAa,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1E,MAAM,OAAO,GAAG,aAAa,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YAC9D,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI;gBACtC,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE;gBACjB,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI;gBACrB,KAAK,EAAE,EAAc;aACtB,CAAC;YACF,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,SAAS,CAAC,CAAC;YACxC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;YAC9B,OAAO,GAAG,CAAC;QACb,CAAC,EAAE,IAAI,GAAG,EAAyD,CAAC,CAAC;QACrE,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;aAChC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,OAAO,IAAI,KAAK,EAAE,WAAW,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;aAC9E,IAAI,CAAC,IAAI,CAAC,CAAC;IAChB,CAAC;IACD,IAAI,aAAa,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1C,OAAO,aAAa,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvF,CAAC;IACD,OAAO,8BAA8B,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,UAA4C;IAC3E,OAAO,UAAU,CAAC,MAAM,GAAG,CAAC;QAC1B,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAC/D,CAAC,CAAC,mBAAmB,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,YAAwC;IAC9E,IAAI,YAAY,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3C,OAAO,6EAA6E,CAAC;IACvF,CAAC;IAED,MAAM,OAAO,GAAG,YAAY,CAAC,YAAY,CAAC,MAAM,CAE9C,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QACb,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACjC,OAAO,GAAG,CAAC;IACb,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,MAAM,GAA2B;QACrC,KAAK,EAAE,OAAO;QACd,QAAQ,EAAE,UAAU;QACpB,OAAO,EAAE,SAAS;KACnB,CAAC;IACF,IAAI,OAAO,GAAG,uDAAuD,CAAC;IAEtE,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACnD,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAC5B,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,OAAO,IAAI,KAAK,KAAK,oBAAoB,CAAC;YAC1C,OAAO,IAAI,KAAK;iBACb,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;gBACX,MAAM,WAAW,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACpC,MAAM,QAAQ,GAAG,WAAW;oBAC1B,CAAC,CAAC,kBAAkB,WAAW;yBAC1B,KAAK,CAAC,IAAI,CAAC;yBACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC;yBAC5B,IAAI,CAAC,IAAI,CAAC,EAAE;oBACjB,CAAC,CAAC,EAAE,CAAC;gBACP,OAAO,KAAK,GAAG,CAAC,UAAU,KAAK,GAAG,CAAC,IAAI,QAAQ,GAAG,CAAC,WAAW,GAAG,QAAQ,EAAE,CAAC;YAC9E,CAAC,CAAC;iBACD,IAAI,CAAC,IAAI,CAAC,CAAC;YACd,OAAO,IAAI,MAAM,CAAC;QACpB,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,IAKtC;IACC,OAAO;aACI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE;QAC1B,IAAI,CAAC,IAAI;EACf,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,eAAe,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,UAMG;IAEH,OAAO,UAAU;SACd,GAAG,CACF,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC;EAChB,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE;aACf,CAAC,CAAC,IAAI;aACN,CAAC,CAAC,IAAI;KACd,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE;KACnD,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CACxD;SACA,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,aAAkF;IAElF,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO,8BAA8B,CAAC;IACxC,CAAC;IACD,OAAO,aAAa;SACjB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACT,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1C,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7C,OAAO,OAAO,CAAC,CAAC,MAAM,OAAO,CAAC,CAAC,MAAM,GAAG,IAAI,GAAG,KAAK,EAAE,CAAC;IACzD,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAoB;IACrD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,mBAAmB,CAAC;IAC7B,CAAC;IACD,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACtE,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAAqB;IAIjD,MAAM,OAAO,GAAG,OAAO;SACpB,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;SACZ,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC;SAC3F,IAAI,CAAC,IAAI,CAAC,CAAC;IACd,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,eAAe,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC;IAClG,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC3B,CAAC"}
@@ -1,5 +1,5 @@
1
1
  export declare const ANTHROPIC_MODELS: {
2
- readonly FAST: "claude-haiku-4-5-20251001";
3
- readonly ADVANCED: "claude-sonnet-4-5-20250929";
2
+ readonly FAST: "claude-haiku-4-5";
3
+ readonly ADVANCED: "claude-sonnet-4-6";
4
4
  };
5
5
  //# sourceMappingURL=models.d.ts.map
@@ -1,5 +1,5 @@
1
1
  export const ANTHROPIC_MODELS = {
2
- FAST: 'claude-haiku-4-5-20251001',
3
- ADVANCED: 'claude-sonnet-4-5-20250929',
2
+ FAST: 'claude-haiku-4-5',
3
+ ADVANCED: 'claude-sonnet-4-6',
4
4
  };
5
5
  //# sourceMappingURL=models.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"models.js","sourceRoot":"","sources":["../../../src/providers/anthropic/models.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,IAAI,EAAE,2BAA2B;IACjC,QAAQ,EAAE,4BAA4B;CAC9B,CAAC"}
1
+ {"version":3,"file":"models.js","sourceRoot":"","sources":["../../../src/providers/anthropic/models.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,IAAI,EAAE,kBAAkB;IACxB,QAAQ,EAAE,mBAAmB;CACrB,CAAC"}
@@ -1,8 +1,9 @@
1
1
  import { BaseProvider, type ProviderConfig } from '../base-provider.js';
2
2
  import type { AnalysisPhase } from '../analysis-phase.js';
3
+ import { type GenerationProfile } from '../generation-profile.js';
3
4
  export declare class AnthropicProvider extends BaseProvider {
4
5
  private readonly client;
5
6
  constructor(config: ProviderConfig);
6
- protected callModel(model: string, prompt: string, phase: AnalysisPhase, maxTokens: number): Promise<string>;
7
+ protected callModel(model: string, prompt: string, phase: AnalysisPhase, generationProfile: GenerationProfile): Promise<string>;
7
8
  }
8
9
  //# sourceMappingURL=provider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../src/providers/anthropic/provider.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,KAAK,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAGxE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAG1D,qBAAa,iBAAkB,SAAQ,YAAY;IACjD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAY;gBAEvB,MAAM,EAAE,cAAc;cAelB,SAAS,CACvB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,aAAa,EACpB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,CAAC;CA8CnB"}
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../src/providers/anthropic/provider.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,KAAK,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAGxE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAEL,KAAK,iBAAiB,EAEvB,MAAM,0BAA0B,CAAC;AASlC,qBAAa,iBAAkB,SAAQ,YAAY;IACjD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAY;gBAEvB,MAAM,EAAE,cAAc;cAelB,SAAS,CACvB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,aAAa,EACpB,iBAAiB,EAAE,iBAAiB,GACnC,OAAO,CAAC,MAAM,CAAC;CAgDnB"}
@@ -2,7 +2,13 @@ import Anthropic from '@anthropic-ai/sdk';
2
2
  import { BaseProvider } from '../base-provider.js';
3
3
  import { ApiError, ErodeError, ErrorCode } from '../../errors.js';
4
4
  import { ENV_VAR_NAMES, RC_FILENAME } from '../../utils/config.js';
5
+ import { resolveOutputTokenLimit, } from '../generation-profile.js';
5
6
  import { ANTHROPIC_MODELS } from './models.js';
7
+ const MAX_TOKENS_BY_OUTPUT_SIZE = {
8
+ small: 600,
9
+ medium: 1500,
10
+ large: 8192,
11
+ };
6
12
  export class AnthropicProvider extends BaseProvider {
7
13
  client;
8
14
  constructor(config) {
@@ -15,11 +21,12 @@ export class AnthropicProvider extends BaseProvider {
15
21
  });
16
22
  this.client = new Anthropic({ apiKey: config.apiKey });
17
23
  }
18
- async callModel(model, prompt, phase, maxTokens) {
24
+ async callModel(model, prompt, phase, generationProfile) {
25
+ const outputTokenLimit = resolveOutputTokenLimit(generationProfile, MAX_TOKENS_BY_OUTPUT_SIZE);
19
26
  try {
20
27
  const response = await this.client.messages.create({
21
28
  model,
22
- max_tokens: maxTokens,
29
+ max_tokens: outputTokenLimit,
23
30
  messages: [{ role: 'user', content: prompt }],
24
31
  });
25
32
  if (response.stop_reason === 'refusal') {
@@ -31,7 +38,7 @@ export class AnthropicProvider extends BaseProvider {
31
38
  throw new ErodeError('Anthropic returned an empty response', ErrorCode.PROVIDER_INVALID_RESPONSE, 'The Anthropic API returned no content', { model, phase });
32
39
  }
33
40
  if (response.stop_reason === 'max_tokens') {
34
- throw new ErodeError('Anthropic response was cut short (max_tokens reached)', ErrorCode.PROVIDER_INVALID_RESPONSE, 'The AI response was truncated. The output may be partial.', { model, phase, maxTokens });
41
+ throw new ErodeError('Anthropic response was cut short (max_tokens reached)', ErrorCode.PROVIDER_INVALID_RESPONSE, 'The Anthropic response used the available output budget before completion. Try a smaller change or tune the provider output budget.', { model, phase, outputTokenLimit });
35
42
  }
36
43
  return text;
37
44
  }
@@ -1 +1 @@
1
- {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../../src/providers/anthropic/provider.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAuB,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,MAAM,OAAO,iBAAkB,SAAQ,YAAY;IAChC,MAAM,CAAY;IAEnC,YAAY,MAAsB;QAChC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACnB,MAAM,IAAI,UAAU,CAClB,gCAAgC,EAChC,SAAS,CAAC,gBAAgB,EAC1B,mCAAmC,aAAa,CAAC,eAAe,2BAA2B,WAAW,GAAG,CAC1G,CAAC;QACJ,CAAC;QACD,KAAK,CAAC;YACJ,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,gBAAgB,CAAC,IAAI;YACpD,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,gBAAgB,CAAC,QAAQ;SACjE,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,GAAG,IAAI,SAAS,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IACzD,CAAC;IAES,KAAK,CAAC,SAAS,CACvB,KAAa,EACb,MAAc,EACd,KAAoB,EACpB,SAAiB;QAEjB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;gBACjD,KAAK;gBACL,UAAU,EAAE,SAAS;gBACrB,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;aAC9C,CAAC,CAAC;YAEH,IAAI,QAAQ,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;gBACvC,MAAM,IAAI,UAAU,CAClB,+CAA+C,EAC/C,SAAS,CAAC,qBAAqB,EAC/B,mFAAmF,EACnF,EAAE,KAAK,EAAE,KAAK,EAAE,CACjB,CAAC;YACJ,CAAC;YAED,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;YAClE,MAAM,IAAI,GAAG,SAAS,IAAI,MAAM,IAAI,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;YAE3E,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,MAAM,IAAI,UAAU,CAClB,sCAAsC,EACtC,SAAS,CAAC,yBAAyB,EACnC,uCAAuC,EACvC,EAAE,KAAK,EAAE,KAAK,EAAE,CACjB,CAAC;YACJ,CAAC;YAED,IAAI,QAAQ,CAAC,WAAW,KAAK,YAAY,EAAE,CAAC;gBAC1C,MAAM,IAAI,UAAU,CAClB,uDAAuD,EACvD,SAAS,CAAC,yBAAyB,EACnC,2DAA2D,EAC3D,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,CAC5B,CAAC;YACJ,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,UAAU,EAAE,CAAC;gBAChC,MAAM,KAAK,CAAC;YACd,CAAC;YACD,MAAM,QAAQ,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../../src/providers/anthropic/provider.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@ import type { AIProvider } from './ai-provider.js';
2
2
  import type { DependencyExtractionPromptData, ComponentSelectionPromptData, DriftAnalysisPromptData, DriftAnalysisResult } from '../analysis/analysis-types.js';
3
3
  import type { DependencyExtractionResult } from '../schemas/dependency-extraction.schema.js';
4
4
  import { AnalysisPhase } from './analysis-phase.js';
5
+ import { type GenerationProfile } from './generation-profile.js';
5
6
  export interface ProviderConfig {
6
7
  apiKey: string;
7
8
  fastModel?: string;
@@ -25,10 +26,10 @@ export declare abstract class BaseProvider implements AIProvider {
25
26
  * @param model - The model identifier to use
26
27
  * @param prompt - The prompt text to send
27
28
  * @param phase - The analysis phase (for error context)
28
- * @param maxTokens - Maximum tokens for the response (some providers may ignore this)
29
+ * @param generationProfile - Provider-agnostic output intent
29
30
  * @returns The text content of the model response
30
31
  */
31
- protected abstract callModel(model: string, prompt: string, phase: AnalysisPhase, maxTokens: number): Promise<string>;
32
+ protected abstract callModel(model: string, prompt: string, phase: AnalysisPhase, generationProfile: GenerationProfile): Promise<string>;
32
33
  selectComponent(data: ComponentSelectionPromptData): Promise<string | null>;
33
34
  extractDependencies(data: DependencyExtractionPromptData): Promise<DependencyExtractionResult>;
34
35
  analyzeDrift(data: DriftAnalysisPromptData): Promise<DriftAnalysisResult>;
@@ -1 +1 @@
1
- {"version":3,"file":"base-provider.d.ts","sourceRoot":"","sources":["../../src/providers/base-provider.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EACV,8BAA8B,EAC9B,4BAA4B,EAC5B,uBAAuB,EACvB,mBAAmB,EACpB,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,4CAA4C,CAAC;AAO7F,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AASpD,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;GAKG;AACH,8BAAsB,YAAa,YAAW,UAAU;IACtD,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IACrC,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;gBAE7B,MAAM,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE;IAKhE;;;;;;;OAOG;IACH,SAAS,CAAC,QAAQ,CAAC,SAAS,CAC1B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,aAAa,EACpB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,CAAC;IAEZ,eAAe,CAAC,IAAI,EAAE,4BAA4B,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAsB3E,mBAAmB,CACvB,IAAI,EAAE,8BAA8B,GACnC,OAAO,CAAC,0BAA0B,CAAC;IAWhC,YAAY,CAAC,IAAI,EAAE,uBAAuB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAkBzE,UAAU,CACd,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,MAAM,EAAE,EACvB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,CAAC;YAmBJ,YAAY;IAmC1B,OAAO,CAAC,gBAAgB;CAGzB"}
1
+ {"version":3,"file":"base-provider.d.ts","sourceRoot":"","sources":["../../src/providers/base-provider.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EACV,8BAA8B,EAC9B,4BAA4B,EAC5B,uBAAuB,EACvB,mBAAmB,EACpB,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,4CAA4C,CAAC;AAO7F,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,OAAO,EAGL,KAAK,iBAAiB,EACvB,MAAM,yBAAyB,CAAC;AAgBjC,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;GAKG;AACH,8BAAsB,YAAa,YAAW,UAAU;IACtD,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IACrC,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;gBAE7B,MAAM,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE;IAKhE;;;;;;;OAOG;IACH,SAAS,CAAC,QAAQ,CAAC,SAAS,CAC1B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,aAAa,EACpB,iBAAiB,EAAE,iBAAiB,GACnC,OAAO,CAAC,MAAM,CAAC;IAEZ,eAAe,CAAC,IAAI,EAAE,4BAA4B,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IA+B3E,mBAAmB,CACvB,IAAI,EAAE,8BAA8B,GACnC,OAAO,CAAC,0BAA0B,CAAC;IAUhC,YAAY,CAAC,IAAI,EAAE,uBAAuB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAiBzE,UAAU,CACd,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,MAAM,EAAE,EACvB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,CAAC;YA2BJ,YAAY;IAuC1B,OAAO,CAAC,gBAAgB;CAGzB"}
@@ -6,11 +6,19 @@ import { ErodeError, ErrorCode, ApiError } from '../errors.js';
6
6
  import { withRetry } from '../utils/retry.js';
7
7
  import { AnalysisPhase } from './analysis-phase.js';
8
8
  import { CONFIG } from '../utils/config.js';
9
+ import { getGenerationProfileForModelPatch, getGenerationProfileForPhase, } from './generation-profile.js';
9
10
  function debugLog(msg, data) {
10
11
  if (CONFIG.debug.verbose) {
11
12
  console.error(`[AI] ${msg}`, data !== undefined ? JSON.stringify(data) : '');
12
13
  }
13
14
  }
15
+ function formatDuration(startedAt) {
16
+ const elapsedMs = Number(process.hrtime.bigint() - startedAt) / 1_000_000;
17
+ if (elapsedMs < 1000) {
18
+ return `${String(Math.round(elapsedMs))}ms`;
19
+ }
20
+ return `${(elapsedMs / 1000).toFixed(2)}s`;
21
+ }
14
22
  /**
15
23
  * Abstract base class for AI providers.
16
24
  *
@@ -26,10 +34,13 @@ export class BaseProvider {
26
34
  }
27
35
  async selectComponent(data) {
28
36
  const prompt = PromptBuilder.buildComponentSelectionPrompt(data);
29
- const responseText = await withRetry(() => this.callModel(this.fastModel, prompt, AnalysisPhase.COMPONENT_RESOLUTION, 256), {
37
+ debugLog('selectComponent using model', this.fastModel);
38
+ const startedAt = process.hrtime.bigint();
39
+ const responseText = await withRetry(() => this.callModel(this.fastModel, prompt, AnalysisPhase.COMPONENT_RESOLUTION, getGenerationProfileForPhase(AnalysisPhase.COMPONENT_RESOLUTION)), {
30
40
  retries: 2,
31
41
  shouldRetry: (error) => this.isRetryableError(error),
32
42
  });
43
+ debugLog('selectComponent completed in', formatDuration(startedAt));
33
44
  if (!responseText) {
34
45
  return null;
35
46
  }
@@ -45,7 +56,6 @@ export class BaseProvider {
45
56
  prompt: PromptBuilder.buildDependencyExtractionPrompt(data),
46
57
  schema: DependencyExtractionResultSchema,
47
58
  schemaName: 'DependencyExtractionResult',
48
- maxTokens: 4096,
49
59
  });
50
60
  }
51
61
  async analyzeDrift(data) {
@@ -55,7 +65,6 @@ export class BaseProvider {
55
65
  prompt: PromptBuilder.buildDriftAnalysisPrompt(data),
56
66
  schema: DriftAnalysisResponseSchema,
57
67
  schemaName: 'DriftAnalysisResponse',
58
- maxTokens: 8192,
59
68
  });
60
69
  return {
61
70
  ...analysisResponse,
@@ -70,21 +79,26 @@ export class BaseProvider {
70
79
  linesToInsert,
71
80
  modelFormat,
72
81
  });
73
- // Estimate tokens: ~4 chars per token, add 20% headroom for inserted lines
74
- const estimatedTokens = Math.ceil(fileContent.length / 4) + linesToInsert.length * 50;
75
- const maxTokens = Math.max(4096, Math.ceil(estimatedTokens * 1.2));
76
82
  debugLog('patchModel using model', this.fastModel);
77
- return withRetry(() => this.callModel(this.fastModel, prompt, AnalysisPhase.MODEL_UPDATE, maxTokens), {
83
+ const startedAt = process.hrtime.bigint();
84
+ return withRetry(() => this.callModel(this.fastModel, prompt, AnalysisPhase.MODEL_UPDATE, getGenerationProfileForModelPatch(fileContent, linesToInsert)), {
78
85
  retries: 2,
79
86
  shouldRetry: (error) => this.isRetryableError(error),
87
+ })
88
+ .then((response) => unwrapModelPatchResponse(response))
89
+ .finally(() => {
90
+ debugLog('patchModel completed in', formatDuration(startedAt));
80
91
  });
81
92
  }
82
93
  async executeStage(config) {
83
94
  debugLog(`executeStage ${config.phase} using model`, config.model);
84
- const responseText = await withRetry(() => this.callModel(config.model, config.prompt, config.phase, config.maxTokens), {
95
+ const generationProfile = config.generationProfile ?? getGenerationProfileForPhase(config.phase);
96
+ const startedAt = process.hrtime.bigint();
97
+ const responseText = await withRetry(() => this.callModel(config.model, config.prompt, config.phase, generationProfile), {
85
98
  retries: 2,
86
99
  shouldRetry: (error) => this.isRetryableError(error),
87
100
  });
101
+ debugLog(`executeStage ${config.phase} completed in`, formatDuration(startedAt));
88
102
  const jsonStr = PromptBuilder.extractJson(responseText);
89
103
  if (!jsonStr) {
90
104
  debugLog(`extractJson returned null for ${config.phase}, raw response (first 500 chars)`, responseText.slice(0, 500));
@@ -97,4 +111,14 @@ export class BaseProvider {
97
111
  return error instanceof ApiError && (error.isRateLimited || error.isTimeout);
98
112
  }
99
113
  }
114
+ function unwrapModelPatchResponse(response) {
115
+ const trimmed = response.trim();
116
+ const lines = trimmed.split(/\r?\n/);
117
+ const firstLine = lines[0];
118
+ const lastLine = lines.at(-1);
119
+ if (firstLine?.startsWith('```') && lastLine === '```') {
120
+ return lines.slice(1, -1).join('\n');
121
+ }
122
+ return response;
123
+ }
100
124
  //# sourceMappingURL=base-provider.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"base-provider.js","sourceRoot":"","sources":["../../src/providers/base-provider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"base-provider.js","sourceRoot":"","sources":["../../src/providers/base-provider.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,9 @@
1
1
  import { BaseProvider, type ProviderConfig } from '../base-provider.js';
2
2
  import type { AnalysisPhase } from '../analysis-phase.js';
3
+ import { type GenerationProfile } from '../generation-profile.js';
3
4
  export declare class GeminiProvider extends BaseProvider {
4
5
  private readonly client;
5
6
  constructor(config: ProviderConfig);
6
- protected callModel(model: string, prompt: string, phase: AnalysisPhase, _maxTokens: number): Promise<string>;
7
+ protected callModel(model: string, prompt: string, phase: AnalysisPhase, generationProfile: GenerationProfile): Promise<string>;
7
8
  }
8
9
  //# sourceMappingURL=provider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../src/providers/gemini/provider.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,KAAK,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAGxE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAG1D,qBAAa,cAAe,SAAQ,YAAY;IAC9C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAc;gBAEzB,MAAM,EAAE,cAAc;cAelB,SAAS,CACvB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,aAAa,EACpB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,CAAC;CAmCnB"}
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../src/providers/gemini/provider.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,KAAK,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAGxE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAEL,KAAK,iBAAiB,EAGvB,MAAM,0BAA0B,CAAC;AASlC,qBAAa,cAAe,SAAQ,YAAY;IAC9C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAc;gBAEzB,MAAM,EAAE,cAAc;cAelB,SAAS,CACvB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,aAAa,EACpB,iBAAiB,EAAE,iBAAiB,GACnC,OAAO,CAAC,MAAM,CAAC;CA0HnB"}
@@ -1,8 +1,14 @@
1
- import { FinishReason, GoogleGenAI } from '@google/genai';
1
+ import { FinishReason, GoogleGenAI, ThinkingLevel } from '@google/genai';
2
2
  import { BaseProvider } from '../base-provider.js';
3
3
  import { ApiError, ErodeError, ErrorCode } from '../../errors.js';
4
4
  import { ENV_VAR_NAMES, RC_FILENAME } from '../../utils/config.js';
5
+ import { resolveOutputTokenLimit, } from '../generation-profile.js';
5
6
  import { GEMINI_MODELS } from './models.js';
7
+ const MAX_OUTPUT_TOKENS_BY_OUTPUT_SIZE = {
8
+ small: 1500,
9
+ medium: 3000,
10
+ large: 6000,
11
+ };
6
12
  export class GeminiProvider extends BaseProvider {
7
13
  client;
8
14
  constructor(config) {
@@ -15,16 +21,22 @@ export class GeminiProvider extends BaseProvider {
15
21
  });
16
22
  this.client = new GoogleGenAI({ apiKey: config.apiKey });
17
23
  }
18
- async callModel(model, prompt, phase, _maxTokens) {
24
+ async callModel(model, prompt, phase, generationProfile) {
25
+ const maxOutputTokens = resolveOutputTokenLimit(generationProfile, MAX_OUTPUT_TOKENS_BY_OUTPUT_SIZE);
26
+ const thinkingConfig = getThinkingConfig(model, generationProfile.reasoningEffort);
19
27
  try {
20
28
  const response = await this.client.models.generateContent({
21
29
  model,
22
30
  contents: prompt,
31
+ config: { maxOutputTokens, thinkingConfig },
23
32
  });
24
33
  const candidate = response.candidates?.[0];
25
34
  if (candidate?.finishReason === FinishReason.SAFETY) {
26
35
  throw new ErodeError('Gemini safety filters blocked the response', ErrorCode.PROVIDER_SAFETY_BLOCK, 'Content was blocked by the AI provider safety filters. Try simplifying the input.', { model, phase });
27
36
  }
37
+ if (candidate?.finishReason === FinishReason.MAX_TOKENS) {
38
+ throw new ErodeError('Gemini response was cut short by the output token limit', ErrorCode.PROVIDER_INVALID_RESPONSE, 'The Gemini response used the available output budget before completion. Try a smaller change or tune the provider output budget.', { model, phase, maxOutputTokens, outputSize: generationProfile.outputSize });
39
+ }
28
40
  const text = response.text;
29
41
  if (!text) {
30
42
  throw new ErodeError('Gemini returned an empty response', ErrorCode.PROVIDER_INVALID_RESPONSE, 'The Gemini API returned no content', { model, phase });
@@ -37,6 +49,58 @@ export class GeminiProvider extends BaseProvider {
37
49
  }
38
50
  throw ApiError.fromGeminiError(error);
39
51
  }
52
+ function getThinkingConfig(thinkingModel, reasoningIntent) {
53
+ if (isGemini25Model(thinkingModel)) {
54
+ return getGemini25ThinkingConfig(thinkingModel, reasoningIntent);
55
+ }
56
+ if (isGemini3Model(thinkingModel)) {
57
+ return getGemini3ThinkingConfig(thinkingModel, reasoningIntent);
58
+ }
59
+ return {};
60
+ }
61
+ function getGemini25ThinkingConfig(thinkingModel, reasoningIntent) {
62
+ if (isGemini25ProModel(thinkingModel)) {
63
+ return { thinkingBudget: -1 };
64
+ }
65
+ switch (reasoningIntent) {
66
+ case 'high':
67
+ case 'medium':
68
+ return { thinkingBudget: -1 };
69
+ case 'low':
70
+ case undefined:
71
+ return { thinkingBudget: 0 };
72
+ default:
73
+ return { thinkingBudget: 0 };
74
+ }
75
+ }
76
+ function getGemini3ThinkingConfig(thinkingModel, reasoningIntent) {
77
+ switch (reasoningIntent) {
78
+ case 'high':
79
+ return { thinkingLevel: ThinkingLevel.HIGH };
80
+ case 'medium':
81
+ if (isLegacyGemini3ProModel(thinkingModel)) {
82
+ return { thinkingLevel: ThinkingLevel.HIGH };
83
+ }
84
+ return { thinkingLevel: ThinkingLevel.MEDIUM };
85
+ case 'low':
86
+ case undefined:
87
+ return { thinkingLevel: ThinkingLevel.LOW };
88
+ default:
89
+ return { thinkingLevel: ThinkingLevel.LOW };
90
+ }
91
+ }
92
+ function isGemini25Model(thinkingModel) {
93
+ return thinkingModel.startsWith('gemini-2.5-');
94
+ }
95
+ function isGemini25ProModel(thinkingModel) {
96
+ return thinkingModel.startsWith('gemini-2.5-pro');
97
+ }
98
+ function isGemini3Model(thinkingModel) {
99
+ return thinkingModel.startsWith('gemini-3-') || thinkingModel.startsWith('gemini-3.');
100
+ }
101
+ function isLegacyGemini3ProModel(thinkingModel) {
102
+ return thinkingModel.startsWith('gemini-3-pro');
103
+ }
40
104
  }
41
105
  }
42
106
  //# sourceMappingURL=provider.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../../src/providers/gemini/provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAuB,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEnE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,OAAO,cAAe,SAAQ,YAAY;IAC7B,MAAM,CAAc;IAErC,YAAY,MAAsB;QAChC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACnB,MAAM,IAAI,UAAU,CAClB,4BAA4B,EAC5B,SAAS,CAAC,gBAAgB,EAC1B,gCAAgC,aAAa,CAAC,YAAY,2BAA2B,WAAW,GAAG,CACpG,CAAC;QACJ,CAAC;QACD,KAAK,CAAC;YACJ,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,aAAa,CAAC,IAAI;YACjD,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,aAAa,CAAC,QAAQ;SAC9D,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,GAAG,IAAI,WAAW,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAC3D,CAAC;IAES,KAAK,CAAC,SAAS,CACvB,KAAa,EACb,MAAc,EACd,KAAoB,EACpB,UAAkB;QAElB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC;gBACxD,KAAK;gBACL,QAAQ,EAAE,MAAM;aACjB,CAAC,CAAC;YAEH,MAAM,SAAS,GAAG,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC;YAC3C,IAAI,SAAS,EAAE,YAAY,KAAK,YAAY,CAAC,MAAM,EAAE,CAAC;gBACpD,MAAM,IAAI,UAAU,CAClB,4CAA4C,EAC5C,SAAS,CAAC,qBAAqB,EAC/B,mFAAmF,EACnF,EAAE,KAAK,EAAE,KAAK,EAAE,CACjB,CAAC;YACJ,CAAC;YAED,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;YAC3B,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,MAAM,IAAI,UAAU,CAClB,mCAAmC,EACnC,SAAS,CAAC,yBAAyB,EACnC,oCAAoC,EACpC,EAAE,KAAK,EAAE,KAAK,EAAE,CACjB,CAAC;YACJ,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,UAAU,EAAE,CAAC;gBAChC,MAAM,KAAK,CAAC;YACd,CAAC;YACD,MAAM,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../../src/providers/gemini/provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { AnalysisPhase } from './analysis-phase.js';
2
+ export type OutputSize = 'small' | 'medium' | 'large';
3
+ export type ReasoningEffort = 'low' | 'medium' | 'high';
4
+ export interface GenerationProfile {
5
+ outputSize: OutputSize;
6
+ reasoningEffort?: ReasoningEffort;
7
+ outputContentHint?: {
8
+ characters: number;
9
+ };
10
+ }
11
+ export declare function getGenerationProfileForPhase(phase: AnalysisPhase): GenerationProfile;
12
+ export declare function getGenerationProfileForModelPatch(fileContent: string, linesToInsert: string[]): GenerationProfile;
13
+ export declare function resolveOutputTokenLimit(profile: GenerationProfile, sizeTable: Record<OutputSize, number>): number;
14
+ //# sourceMappingURL=generation-profile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generation-profile.d.ts","sourceRoot":"","sources":["../../src/providers/generation-profile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AACtD,MAAM,MAAM,eAAe,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;AAExD,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,UAAU,CAAC;IACvB,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,iBAAiB,CAAC,EAAE;QAClB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;CACH;AAED,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,aAAa,GAAG,iBAAiB,CAYpF;AAED,wBAAgB,iCAAiC,CAC/C,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,MAAM,EAAE,GACtB,iBAAiB,CAYnB;AAED,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,iBAAiB,EAC1B,SAAS,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,GACpC,MAAM,CAOR"}
@@ -0,0 +1,34 @@
1
+ import { AnalysisPhase } from './analysis-phase.js';
2
+ export function getGenerationProfileForPhase(phase) {
3
+ switch (phase) {
4
+ case AnalysisPhase.COMPONENT_RESOLUTION:
5
+ case AnalysisPhase.DEPENDENCY_SCAN:
6
+ return { outputSize: 'small', reasoningEffort: 'low' };
7
+ case AnalysisPhase.MODEL_UPDATE:
8
+ return { outputSize: 'medium', reasoningEffort: 'medium' };
9
+ case AnalysisPhase.CHANGE_ANALYSIS:
10
+ return { outputSize: 'large', reasoningEffort: 'low' };
11
+ default:
12
+ return { outputSize: 'small', reasoningEffort: 'low' };
13
+ }
14
+ }
15
+ export function getGenerationProfileForModelPatch(fileContent, linesToInsert) {
16
+ const insertedLineCharacters = linesToInsert.length * 200;
17
+ const estimatedCharacters = Math.ceil((fileContent.length + insertedLineCharacters) * 1.2);
18
+ const minimumCharacters = 4096 * 4;
19
+ return {
20
+ outputSize: 'medium',
21
+ reasoningEffort: 'medium',
22
+ outputContentHint: {
23
+ characters: Math.max(minimumCharacters, estimatedCharacters),
24
+ },
25
+ };
26
+ }
27
+ export function resolveOutputTokenLimit(profile, sizeTable) {
28
+ const profileLimit = sizeTable[profile.outputSize];
29
+ const hintedLimit = profile.outputContentHint
30
+ ? Math.ceil(profile.outputContentHint.characters / 4)
31
+ : 0;
32
+ return Math.max(profileLimit, hintedLimit);
33
+ }
34
+ //# sourceMappingURL=generation-profile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generation-profile.js","sourceRoot":"","sources":["../../src/providers/generation-profile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAapD,MAAM,UAAU,4BAA4B,CAAC,KAAoB;IAC/D,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,aAAa,CAAC,oBAAoB,CAAC;QACxC,KAAK,aAAa,CAAC,eAAe;YAChC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC;QACzD,KAAK,aAAa,CAAC,YAAY;YAC7B,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAC;QAC7D,KAAK,aAAa,CAAC,eAAe;YAChC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC;QACzD;YACE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC;IAC3D,CAAC;AACH,CAAC;AAED,MAAM,UAAU,iCAAiC,CAC/C,WAAmB,EACnB,aAAuB;IAEvB,MAAM,sBAAsB,GAAG,aAAa,CAAC,MAAM,GAAG,GAAG,CAAC;IAC1D,MAAM,mBAAmB,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,MAAM,GAAG,sBAAsB,CAAC,GAAG,GAAG,CAAC,CAAC;IAC3F,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,CAAC;IAEnC,OAAO;QACL,UAAU,EAAE,QAAQ;QACpB,eAAe,EAAE,QAAQ;QACzB,iBAAiB,EAAE;YACjB,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,iBAAiB,EAAE,mBAAmB,CAAC;SAC7D;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,OAA0B,EAC1B,SAAqC;IAErC,MAAM,YAAY,GAAG,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACnD,MAAM,WAAW,GAAG,OAAO,CAAC,iBAAiB;QAC3C,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,UAAU,GAAG,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC,CAAC;IAEN,OAAO,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;AAC7C,CAAC"}
@@ -1,5 +1,5 @@
1
1
  export declare const OPENAI_MODELS: {
2
- readonly FAST: "gpt-4.1-mini";
3
- readonly ADVANCED: "gpt-4.1";
2
+ readonly FAST: "gpt-5-mini";
3
+ readonly ADVANCED: "gpt-5";
4
4
  };
5
5
  //# sourceMappingURL=models.d.ts.map
@@ -1,5 +1,5 @@
1
1
  export const OPENAI_MODELS = {
2
- FAST: 'gpt-4.1-mini',
3
- ADVANCED: 'gpt-4.1',
2
+ FAST: 'gpt-5-mini',
3
+ ADVANCED: 'gpt-5',
4
4
  };
5
5
  //# sourceMappingURL=models.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"models.js","sourceRoot":"","sources":["../../../src/providers/openai/models.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,IAAI,EAAE,cAAc;IACpB,QAAQ,EAAE,SAAS;CACX,CAAC"}
1
+ {"version":3,"file":"models.js","sourceRoot":"","sources":["../../../src/providers/openai/models.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,IAAI,EAAE,YAAY;IAClB,QAAQ,EAAE,OAAO;CACT,CAAC"}
@@ -1,8 +1,9 @@
1
1
  import { BaseProvider, type ProviderConfig } from '../base-provider.js';
2
2
  import type { AnalysisPhase } from '../analysis-phase.js';
3
+ import { type GenerationProfile } from '../generation-profile.js';
3
4
  export declare class OpenAIProvider extends BaseProvider {
4
5
  private readonly client;
5
6
  constructor(config: ProviderConfig);
6
- protected callModel(model: string, prompt: string, phase: AnalysisPhase, maxTokens: number): Promise<string>;
7
+ protected callModel(model: string, prompt: string, phase: AnalysisPhase, generationProfile: GenerationProfile): Promise<string>;
7
8
  }
8
9
  //# sourceMappingURL=provider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../src/providers/openai/provider.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,KAAK,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAGxE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAG1D,qBAAa,cAAe,SAAQ,YAAY;IAC9C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;gBAEpB,MAAM,EAAE,cAAc;cAelB,SAAS,CACvB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,aAAa,EACpB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,CAAC;CAsDnB"}
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../src/providers/openai/provider.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,KAAK,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAGxE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAEL,KAAK,iBAAiB,EAGvB,MAAM,0BAA0B,CAAC;AAWlC,qBAAa,cAAe,SAAQ,YAAY;IAC9C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;gBAEpB,MAAM,EAAE,cAAc;cAelB,SAAS,CACvB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,aAAa,EACpB,iBAAiB,EAAE,iBAAiB,GACnC,OAAO,CAAC,MAAM,CAAC;CAwInB"}
@@ -2,7 +2,13 @@ import OpenAI from 'openai';
2
2
  import { BaseProvider } from '../base-provider.js';
3
3
  import { ErodeError, ErrorCode, ApiError } from '../../errors.js';
4
4
  import { ENV_VAR_NAMES, RC_FILENAME } from '../../utils/config.js';
5
+ import { resolveOutputTokenLimit, } from '../generation-profile.js';
5
6
  import { OPENAI_MODELS } from './models.js';
7
+ const MAX_OUTPUT_TOKENS_BY_OUTPUT_SIZE = {
8
+ small: 1500,
9
+ medium: 6000,
10
+ large: 10000,
11
+ };
6
12
  export class OpenAIProvider extends BaseProvider {
7
13
  client;
8
14
  constructor(config) {
@@ -15,27 +21,23 @@ export class OpenAIProvider extends BaseProvider {
15
21
  });
16
22
  this.client = new OpenAI({ apiKey: config.apiKey });
17
23
  }
18
- async callModel(model, prompt, phase, maxTokens) {
24
+ async callModel(model, prompt, phase, generationProfile) {
25
+ const maxOutputTokens = resolveOutputTokenLimit(generationProfile, MAX_OUTPUT_TOKENS_BY_OUTPUT_SIZE);
26
+ const reasoningEffort = getOpenAIReasoningEffort(generationProfile.reasoningEffort);
19
27
  try {
20
- const response = await this.client.chat.completions.create({
28
+ const response = await this.client.responses.create({
21
29
  model,
22
- max_tokens: maxTokens,
23
- messages: [{ role: 'user', content: prompt }],
30
+ input: prompt,
31
+ max_output_tokens: maxOutputTokens,
32
+ ...(supportsReasoningEffort(model) ? { reasoning: { effort: reasoningEffort } } : {}),
24
33
  });
25
- const choice = response.choices[0];
26
- if (!choice) {
27
- throw new ErodeError('OpenAI returned an empty response', ErrorCode.PROVIDER_INVALID_RESPONSE, 'The OpenAI API returned no content', { model, phase });
28
- }
29
- if (choice.finish_reason === 'content_filter') {
30
- throw new ErodeError('OpenAI safety filters blocked the response', ErrorCode.PROVIDER_SAFETY_BLOCK, 'Content was blocked by the AI provider safety filters. Try simplifying the input.', { model, phase });
34
+ if (response.status === 'incomplete') {
35
+ handleIncompleteResponse(response, model, phase, maxOutputTokens, generationProfile, reasoningEffort);
31
36
  }
32
- const text = choice.message.content;
37
+ const text = extractText(response);
33
38
  if (!text) {
34
39
  throw new ErodeError('OpenAI returned an empty response', ErrorCode.PROVIDER_INVALID_RESPONSE, 'The OpenAI API returned no content', { model, phase });
35
40
  }
36
- if (choice.finish_reason === 'length') {
37
- throw new ErodeError('OpenAI response was cut short (max_tokens reached)', ErrorCode.PROVIDER_INVALID_RESPONSE, 'The AI response was truncated. The output may be partial.', { model, phase, maxTokens });
38
- }
39
41
  return text;
40
42
  }
41
43
  catch (error) {
@@ -44,6 +46,64 @@ export class OpenAIProvider extends BaseProvider {
44
46
  }
45
47
  throw ApiError.fromOpenAIError(error);
46
48
  }
49
+ function handleIncompleteResponse(response, incompleteModel, incompletePhase, incompleteMaxOutputTokens, incompleteGenerationProfile, incompleteReasoningEffort) {
50
+ if (response.incomplete_details?.reason === 'max_output_tokens') {
51
+ throw new ErodeError('Model ran out of output budget before producing a complete response', ErrorCode.PROVIDER_INVALID_RESPONSE, 'The AI response used the available output budget before completion. Try a smaller change or tune the provider output budget or reasoning effort.', {
52
+ model: incompleteModel,
53
+ phase: incompletePhase,
54
+ maxOutputTokens: incompleteMaxOutputTokens,
55
+ outputSize: incompleteGenerationProfile.outputSize,
56
+ reasoningEffort: incompleteGenerationProfile.reasoningEffort,
57
+ providerReasoningEffort: incompleteReasoningEffort,
58
+ });
59
+ }
60
+ if (response.incomplete_details?.reason === 'content_filter') {
61
+ throw new ErodeError('OpenAI safety filters blocked the response', ErrorCode.PROVIDER_SAFETY_BLOCK, 'Content was blocked by the AI provider safety filters. Try simplifying the input.', { model: incompleteModel, phase: incompletePhase });
62
+ }
63
+ throw new ErodeError('OpenAI returned an incomplete response', ErrorCode.PROVIDER_INVALID_RESPONSE, 'The OpenAI response was incomplete for an unknown provider reason. Try again or tune the provider output budget.', {
64
+ model: incompleteModel,
65
+ phase: incompletePhase,
66
+ reason: response.incomplete_details?.reason,
67
+ maxOutputTokens: incompleteMaxOutputTokens,
68
+ outputSize: incompleteGenerationProfile.outputSize,
69
+ });
70
+ }
71
+ function extractText(response) {
72
+ if (response.output_text.length > 0) {
73
+ return response.output_text;
74
+ }
75
+ return response.output
76
+ .filter((item) => item.type === 'message')
77
+ .flatMap((item) => item.content)
78
+ .filter((content) => content.type === 'output_text')
79
+ .map((content) => content.text)
80
+ .join('');
81
+ }
82
+ function supportsReasoningEffort(reasoningModel) {
83
+ if (reasoningModel.includes('chat')) {
84
+ return false;
85
+ }
86
+ if (reasoningModel.startsWith('gpt-5')) {
87
+ return true;
88
+ }
89
+ return ['o1', 'o3', 'o4'].some((prefix) => {
90
+ return reasoningModel === prefix || reasoningModel.startsWith(`${prefix}-`);
91
+ });
92
+ }
93
+ function getOpenAIReasoningEffort(reasoningIntent) {
94
+ switch (reasoningIntent) {
95
+ case 'high':
96
+ return 'high';
97
+ case 'medium':
98
+ return 'medium';
99
+ case 'low':
100
+ return 'low';
101
+ case undefined:
102
+ return 'minimal';
103
+ default:
104
+ return 'minimal';
105
+ }
106
+ }
47
107
  }
48
108
  }
49
109
  //# sourceMappingURL=provider.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../../src/providers/openai/provider.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAuB,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEnE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,OAAO,cAAe,SAAQ,YAAY;IAC7B,MAAM,CAAS;IAEhC,YAAY,MAAsB;QAChC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACnB,MAAM,IAAI,UAAU,CAClB,6BAA6B,EAC7B,SAAS,CAAC,gBAAgB,EAC1B,gCAAgC,aAAa,CAAC,YAAY,2BAA2B,WAAW,GAAG,CACpG,CAAC;QACJ,CAAC;QACD,KAAK,CAAC;YACJ,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,aAAa,CAAC,IAAI;YACjD,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,aAAa,CAAC,QAAQ;SAC9D,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IACtD,CAAC;IAES,KAAK,CAAC,SAAS,CACvB,KAAa,EACb,MAAc,EACd,KAAoB,EACpB,SAAiB;QAEjB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;gBACzD,KAAK;gBACL,UAAU,EAAE,SAAS;gBACrB,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;aAC9C,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YACnC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,IAAI,UAAU,CAClB,mCAAmC,EACnC,SAAS,CAAC,yBAAyB,EACnC,oCAAoC,EACpC,EAAE,KAAK,EAAE,KAAK,EAAE,CACjB,CAAC;YACJ,CAAC;YAED,IAAI,MAAM,CAAC,aAAa,KAAK,gBAAgB,EAAE,CAAC;gBAC9C,MAAM,IAAI,UAAU,CAClB,4CAA4C,EAC5C,SAAS,CAAC,qBAAqB,EAC/B,mFAAmF,EACnF,EAAE,KAAK,EAAE,KAAK,EAAE,CACjB,CAAC;YACJ,CAAC;YAED,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;YACpC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,MAAM,IAAI,UAAU,CAClB,mCAAmC,EACnC,SAAS,CAAC,yBAAyB,EACnC,oCAAoC,EACpC,EAAE,KAAK,EAAE,KAAK,EAAE,CACjB,CAAC;YACJ,CAAC;YAED,IAAI,MAAM,CAAC,aAAa,KAAK,QAAQ,EAAE,CAAC;gBACtC,MAAM,IAAI,UAAU,CAClB,oDAAoD,EACpD,SAAS,CAAC,yBAAyB,EACnC,2DAA2D,EAC3D,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,CAC5B,CAAC;YACJ,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,UAAU,EAAE,CAAC;gBAChC,MAAM,KAAK,CAAC;YACd,CAAC;YACD,MAAM,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../../src/providers/openai/provider.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@erode-app/core",
3
- "version": "0.9.2",
3
+ "version": "0.9.4",
4
4
  "description": "Architecture erosion detection",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -55,12 +55,12 @@
55
55
  "node": ">=24.0.0"
56
56
  },
57
57
  "dependencies": {
58
- "@anthropic-ai/sdk": "^0.91.1",
58
+ "@anthropic-ai/sdk": "^0.95.0",
59
59
  "@gitbeaker/rest": "^43.8.0",
60
- "@google/genai": "^1.50.1",
60
+ "@google/genai": "^1.52.0",
61
61
  "@octokit/rest": "^22.0.1",
62
62
  "dotenv": "^17.4.2",
63
- "likec4": "^1.54.0",
63
+ "likec4": "^1.56.0",
64
64
  "minimatch": "^10.2.5",
65
65
  "openai": "^6.35.0",
66
66
  "zod": "^4.4.1"
@@ -70,7 +70,7 @@
70
70
  "@types/node": "^24.12.2",
71
71
  "@vitest/coverage-v8": "^4.1.5",
72
72
  "concurrently": "^9.2.1",
73
- "eslint": "^10.2.1",
73
+ "eslint": "^10.3.0",
74
74
  "prettier": "^3.8.3",
75
75
  "rimraf": "^6.1.2",
76
76
  "tsx": "^4.21.0",