cadr-cli 0.0.1 → 1.9.2

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 (121) hide show
  1. package/dist/adr.d.ts +50 -0
  2. package/dist/adr.d.ts.map +1 -0
  3. package/dist/adr.js +156 -0
  4. package/dist/adr.js.map +1 -0
  5. package/dist/adr.test.d.ts +8 -0
  6. package/dist/adr.test.d.ts.map +1 -0
  7. package/dist/adr.test.js +256 -0
  8. package/dist/adr.test.js.map +1 -0
  9. package/dist/analysis.d.ts +24 -0
  10. package/dist/analysis.d.ts.map +1 -0
  11. package/dist/analysis.js +281 -0
  12. package/dist/analysis.js.map +1 -0
  13. package/dist/analysis.test.d.ts +8 -0
  14. package/dist/analysis.test.d.ts.map +1 -0
  15. package/dist/analysis.test.js +351 -0
  16. package/dist/analysis.test.js.map +1 -0
  17. package/dist/commands/analyze.d.ts +14 -0
  18. package/dist/commands/analyze.d.ts.map +1 -0
  19. package/dist/commands/analyze.js +56 -0
  20. package/dist/commands/analyze.js.map +1 -0
  21. package/dist/commands/init.d.ts +12 -0
  22. package/dist/commands/init.d.ts.map +1 -0
  23. package/dist/commands/init.js +93 -0
  24. package/dist/commands/init.js.map +1 -0
  25. package/dist/commands/init.test.d.ts +2 -0
  26. package/dist/commands/init.test.d.ts.map +1 -0
  27. package/dist/commands/init.test.js +56 -0
  28. package/dist/commands/init.test.js.map +1 -0
  29. package/dist/config.d.ts +40 -0
  30. package/dist/config.d.ts.map +1 -0
  31. package/dist/config.js +208 -0
  32. package/dist/config.js.map +1 -0
  33. package/dist/config.test.d.ts +2 -0
  34. package/dist/config.test.d.ts.map +1 -0
  35. package/dist/config.test.js +97 -0
  36. package/dist/config.test.js.map +1 -0
  37. package/dist/git.d.ts +42 -0
  38. package/dist/git.d.ts.map +1 -1
  39. package/dist/git.js +157 -0
  40. package/dist/git.js.map +1 -1
  41. package/dist/index.d.ts +2 -3
  42. package/dist/index.d.ts.map +1 -1
  43. package/dist/index.js +78 -62
  44. package/dist/index.js.map +1 -1
  45. package/dist/index.test.d.ts +2 -0
  46. package/dist/index.test.d.ts.map +1 -0
  47. package/dist/index.test.js +51 -0
  48. package/dist/index.test.js.map +1 -0
  49. package/dist/llm.d.ts +73 -0
  50. package/dist/llm.d.ts.map +1 -0
  51. package/dist/llm.js +263 -0
  52. package/dist/llm.js.map +1 -0
  53. package/dist/llm.test.d.ts +2 -0
  54. package/dist/llm.test.d.ts.map +1 -0
  55. package/dist/llm.test.js +592 -0
  56. package/dist/llm.test.js.map +1 -0
  57. package/dist/logger.d.ts.map +1 -1
  58. package/dist/logger.js +5 -3
  59. package/dist/logger.js.map +1 -1
  60. package/dist/logger.test.d.ts +2 -0
  61. package/dist/logger.test.d.ts.map +1 -0
  62. package/dist/logger.test.js +78 -0
  63. package/dist/logger.test.js.map +1 -0
  64. package/dist/prompts.d.ts +49 -0
  65. package/dist/prompts.d.ts.map +1 -0
  66. package/dist/prompts.js +195 -0
  67. package/dist/prompts.js.map +1 -0
  68. package/dist/prompts.test.d.ts +2 -0
  69. package/dist/prompts.test.d.ts.map +1 -0
  70. package/dist/prompts.test.js +427 -0
  71. package/dist/prompts.test.js.map +1 -0
  72. package/dist/providers/gemini.d.ts +3 -0
  73. package/dist/providers/gemini.d.ts.map +1 -0
  74. package/dist/providers/gemini.js +39 -0
  75. package/dist/providers/gemini.js.map +1 -0
  76. package/dist/providers/index.d.ts +2 -0
  77. package/dist/providers/index.d.ts.map +1 -0
  78. package/dist/providers/index.js +6 -0
  79. package/dist/providers/index.js.map +1 -0
  80. package/dist/providers/openai.d.ts +3 -0
  81. package/dist/providers/openai.d.ts.map +1 -0
  82. package/dist/providers/openai.js +25 -0
  83. package/dist/providers/openai.js.map +1 -0
  84. package/dist/providers/registry.d.ts +4 -0
  85. package/dist/providers/registry.d.ts.map +1 -0
  86. package/dist/providers/registry.js +16 -0
  87. package/dist/providers/registry.js.map +1 -0
  88. package/dist/providers/types.d.ts +12 -0
  89. package/dist/providers/types.d.ts.map +1 -0
  90. package/dist/providers/types.js +5 -0
  91. package/dist/providers/types.js.map +1 -0
  92. package/dist/version.test.d.ts +3 -0
  93. package/dist/version.test.d.ts.map +1 -0
  94. package/dist/version.test.js +25 -0
  95. package/dist/version.test.js.map +1 -0
  96. package/package.json +14 -5
  97. package/src/adr.test.ts +278 -0
  98. package/src/adr.ts +136 -0
  99. package/src/analysis.test.ts +396 -0
  100. package/src/analysis.ts +262 -0
  101. package/src/commands/analyze.ts +56 -0
  102. package/src/commands/init.test.ts +27 -0
  103. package/src/commands/init.ts +99 -0
  104. package/src/config.test.ts +79 -0
  105. package/src/config.ts +214 -0
  106. package/src/git.ts +240 -0
  107. package/src/index.test.ts +59 -0
  108. package/src/index.ts +80 -60
  109. package/src/llm.test.ts +701 -0
  110. package/src/llm.ts +344 -0
  111. package/src/logger.test.ts +90 -0
  112. package/src/logger.ts +6 -3
  113. package/src/prompts.test.ts +515 -0
  114. package/src/prompts.ts +174 -0
  115. package/src/providers/gemini.ts +41 -0
  116. package/src/providers/index.ts +1 -0
  117. package/src/providers/openai.ts +22 -0
  118. package/src/providers/registry.ts +16 -0
  119. package/src/providers/types.ts +14 -0
  120. package/src/version.test.ts +29 -0
  121. package/bin/cadr.js +0 -16
@@ -0,0 +1,41 @@
1
+ import { GoogleGenerativeAI } from '@google/generative-ai';
2
+ import { LLMProvider, ProviderCallOptions, DEFAULT_MAX_OUTPUT_TOKENS } from './types';
3
+
4
+ export const geminiProvider: LLMProvider = {
5
+ name: 'gemini',
6
+ async analyze(prompt: string, options: ProviderCallOptions): Promise<string | undefined> {
7
+ const genAI = new GoogleGenerativeAI(options.apiKey);
8
+ const model = genAI.getGenerativeModel({
9
+ model: options.model,
10
+ systemInstruction: 'You are an expert software architect analyzing code changes.',
11
+ });
12
+
13
+ const generatePromise = model.generateContent({
14
+ contents: [
15
+ {
16
+ role: 'user',
17
+ parts: [{ text: prompt }],
18
+ },
19
+ ],
20
+ generationConfig: {
21
+ temperature: 0.3,
22
+ maxOutputTokens: DEFAULT_MAX_OUTPUT_TOKENS,
23
+ },
24
+ });
25
+
26
+ const timeoutPromise = new Promise<never>((_, reject) => {
27
+ const timer = setTimeout(() => {
28
+ const err = new Error('Request timeout') as Error & { code: string };
29
+ err.code = 'ETIMEDOUT';
30
+ reject(err);
31
+ }, options.timeoutMs);
32
+ (generatePromise as unknown as Promise<unknown>).finally(() => clearTimeout(timer));
33
+ });
34
+
35
+ const result = (await Promise.race([generatePromise, timeoutPromise])) as Awaited<
36
+ typeof generatePromise
37
+ >;
38
+ const text = result?.response?.text?.();
39
+ return typeof text === 'string' ? text : undefined;
40
+ },
41
+ };
@@ -0,0 +1 @@
1
+ export { getProvider } from './registry';
@@ -0,0 +1,22 @@
1
+ import OpenAI from 'openai';
2
+ import { LLMProvider, ProviderCallOptions, DEFAULT_MAX_OUTPUT_TOKENS } from './types';
3
+
4
+ export const openAIProvider: LLMProvider = {
5
+ name: 'openai',
6
+ async analyze(prompt: string, options: ProviderCallOptions): Promise<string | undefined> {
7
+ const client = new OpenAI({ apiKey: options.apiKey, timeout: options.timeoutMs });
8
+ const completion = await client.chat.completions.create(
9
+ {
10
+ model: options.model,
11
+ messages: [
12
+ { role: 'system', content: 'You are an expert software architect analyzing code changes.' },
13
+ { role: 'user', content: prompt },
14
+ ],
15
+ temperature: 0.3,
16
+ max_tokens: DEFAULT_MAX_OUTPUT_TOKENS,
17
+ },
18
+ { timeout: options.timeoutMs }
19
+ );
20
+ return completion.choices[0]?.message?.content ?? undefined;
21
+ },
22
+ };
@@ -0,0 +1,16 @@
1
+ import { LLMProvider } from './types';
2
+ import { openAIProvider } from './openai';
3
+ import { geminiProvider } from './gemini';
4
+
5
+ export function getProvider(name: 'openai' | 'gemini'): LLMProvider {
6
+ switch (name) {
7
+ case 'openai':
8
+ return openAIProvider;
9
+ case 'gemini':
10
+ return geminiProvider;
11
+ default:
12
+ throw new Error(`Unsupported provider: ${name as string}`);
13
+ }
14
+ }
15
+
16
+ export type { LLMProvider } from './types';
@@ -0,0 +1,14 @@
1
+ import { AnalysisConfig } from '../config';
2
+
3
+ export const DEFAULT_MAX_OUTPUT_TOKENS = 4096;
4
+
5
+ export interface ProviderCallOptions {
6
+ apiKey: string;
7
+ model: string;
8
+ timeoutMs: number;
9
+ }
10
+
11
+ export interface LLMProvider {
12
+ readonly name: AnalysisConfig['provider'];
13
+ analyze(prompt: string, options: ProviderCallOptions): Promise<string | undefined>;
14
+ }
@@ -0,0 +1,29 @@
1
+ // Test version constants in CLI
2
+ const CORE_VERSION = '0.0.1';
3
+ const CLI_VERSION = '0.0.1';
4
+
5
+ describe('CLI Version Constants', () => {
6
+ test('exports CORE_VERSION constant', () => {
7
+ expect(CORE_VERSION).toBe('0.0.1');
8
+ });
9
+
10
+ test('CORE_VERSION is a string', () => {
11
+ expect(typeof CORE_VERSION).toBe('string');
12
+ });
13
+
14
+ test('CORE_VERSION matches semantic version pattern', () => {
15
+ expect(CORE_VERSION).toMatch(/^\d+\.\d+\.\d+$/);
16
+ });
17
+
18
+ test('exports CLI_VERSION constant', () => {
19
+ expect(CLI_VERSION).toBe('0.0.1');
20
+ });
21
+
22
+ test('CLI_VERSION is a string', () => {
23
+ expect(typeof CLI_VERSION).toBe('string');
24
+ });
25
+
26
+ test('CLI_VERSION matches semantic version pattern', () => {
27
+ expect(CLI_VERSION).toMatch(/^\d+\.\d+\.\d+$/);
28
+ });
29
+ });
package/bin/cadr.js DELETED
@@ -1,16 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- // Executable wrapper for cadr-cli
4
- // This file is the entry point when running 'cadr' command
5
-
6
- const { displayWelcome, processStagedFiles } = require('../dist/index.js');
7
-
8
- // Display welcome message first
9
- displayWelcome();
10
-
11
- // Then process staged files
12
- processStagedFiles().catch((error) => {
13
- console.error('Failed to process staged files:', error.message);
14
- process.exit(1);
15
- });
16
-