@malikasadjaved/readme-ai 1.0.0

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 (137) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +309 -0
  3. package/dist/analyzers/badge-generator.d.ts +12 -0
  4. package/dist/analyzers/badge-generator.d.ts.map +1 -0
  5. package/dist/analyzers/badge-generator.js +139 -0
  6. package/dist/analyzers/badge-generator.js.map +1 -0
  7. package/dist/analyzers/code-analyzer.d.ts +34 -0
  8. package/dist/analyzers/code-analyzer.d.ts.map +1 -0
  9. package/dist/analyzers/code-analyzer.js +210 -0
  10. package/dist/analyzers/code-analyzer.js.map +1 -0
  11. package/dist/analyzers/dependency-analyzer.d.ts +16 -0
  12. package/dist/analyzers/dependency-analyzer.d.ts.map +1 -0
  13. package/dist/analyzers/dependency-analyzer.js +169 -0
  14. package/dist/analyzers/dependency-analyzer.js.map +1 -0
  15. package/dist/analyzers/diagram-builder.d.ts +11 -0
  16. package/dist/analyzers/diagram-builder.d.ts.map +1 -0
  17. package/dist/analyzers/diagram-builder.js +163 -0
  18. package/dist/analyzers/diagram-builder.js.map +1 -0
  19. package/dist/analyzers/file-scanner.d.ts +17 -0
  20. package/dist/analyzers/file-scanner.d.ts.map +1 -0
  21. package/dist/analyzers/file-scanner.js +103 -0
  22. package/dist/analyzers/file-scanner.js.map +1 -0
  23. package/dist/analyzers/index.d.ts +7 -0
  24. package/dist/analyzers/index.d.ts.map +1 -0
  25. package/dist/analyzers/index.js +7 -0
  26. package/dist/analyzers/index.js.map +1 -0
  27. package/dist/analyzers/repo-fetcher.d.ts +22 -0
  28. package/dist/analyzers/repo-fetcher.d.ts.map +1 -0
  29. package/dist/analyzers/repo-fetcher.js +134 -0
  30. package/dist/analyzers/repo-fetcher.js.map +1 -0
  31. package/dist/cli.d.ts +2 -0
  32. package/dist/cli.d.ts.map +1 -0
  33. package/dist/cli.js +54 -0
  34. package/dist/cli.js.map +1 -0
  35. package/dist/commands/generate.d.ts +17 -0
  36. package/dist/commands/generate.d.ts.map +1 -0
  37. package/dist/commands/generate.js +189 -0
  38. package/dist/commands/generate.js.map +1 -0
  39. package/dist/config.d.ts +17 -0
  40. package/dist/config.d.ts.map +1 -0
  41. package/dist/config.js +28 -0
  42. package/dist/config.js.map +1 -0
  43. package/dist/generators/changelog.d.ts +7 -0
  44. package/dist/generators/changelog.d.ts.map +1 -0
  45. package/dist/generators/changelog.js +15 -0
  46. package/dist/generators/changelog.js.map +1 -0
  47. package/dist/generators/contributing.d.ts +5 -0
  48. package/dist/generators/contributing.d.ts.map +1 -0
  49. package/dist/generators/contributing.js +28 -0
  50. package/dist/generators/contributing.js.map +1 -0
  51. package/dist/generators/index.d.ts +6 -0
  52. package/dist/generators/index.d.ts.map +1 -0
  53. package/dist/generators/index.js +6 -0
  54. package/dist/generators/index.js.map +1 -0
  55. package/dist/generators/install.d.ts +14 -0
  56. package/dist/generators/install.d.ts.map +1 -0
  57. package/dist/generators/install.js +95 -0
  58. package/dist/generators/install.js.map +1 -0
  59. package/dist/generators/overview.d.ts +20 -0
  60. package/dist/generators/overview.d.ts.map +1 -0
  61. package/dist/generators/overview.js +87 -0
  62. package/dist/generators/overview.js.map +1 -0
  63. package/dist/generators/usage.d.ts +33 -0
  64. package/dist/generators/usage.d.ts.map +1 -0
  65. package/dist/generators/usage.js +130 -0
  66. package/dist/generators/usage.js.map +1 -0
  67. package/dist/index.d.ts +3 -0
  68. package/dist/index.d.ts.map +1 -0
  69. package/dist/index.js +47 -0
  70. package/dist/index.js.map +1 -0
  71. package/dist/providers/anthropic.d.ts +3 -0
  72. package/dist/providers/anthropic.d.ts.map +1 -0
  73. package/dist/providers/anthropic.js +47 -0
  74. package/dist/providers/anthropic.js.map +1 -0
  75. package/dist/providers/gemini.d.ts +3 -0
  76. package/dist/providers/gemini.d.ts.map +1 -0
  77. package/dist/providers/gemini.js +28 -0
  78. package/dist/providers/gemini.js.map +1 -0
  79. package/dist/providers/index.d.ts +8 -0
  80. package/dist/providers/index.d.ts.map +1 -0
  81. package/dist/providers/index.js +24 -0
  82. package/dist/providers/index.js.map +1 -0
  83. package/dist/providers/ollama.d.ts +3 -0
  84. package/dist/providers/ollama.d.ts.map +1 -0
  85. package/dist/providers/ollama.js +46 -0
  86. package/dist/providers/ollama.js.map +1 -0
  87. package/dist/providers/openai.d.ts +3 -0
  88. package/dist/providers/openai.d.ts.map +1 -0
  89. package/dist/providers/openai.js +40 -0
  90. package/dist/providers/openai.js.map +1 -0
  91. package/dist/themes/academic.d.ts +3 -0
  92. package/dist/themes/academic.d.ts.map +1 -0
  93. package/dist/themes/academic.js +113 -0
  94. package/dist/themes/academic.js.map +1 -0
  95. package/dist/themes/default.d.ts +3 -0
  96. package/dist/themes/default.d.ts.map +1 -0
  97. package/dist/themes/default.js +114 -0
  98. package/dist/themes/default.js.map +1 -0
  99. package/dist/themes/hacker.d.ts +3 -0
  100. package/dist/themes/hacker.d.ts.map +1 -0
  101. package/dist/themes/hacker.js +100 -0
  102. package/dist/themes/hacker.js.map +1 -0
  103. package/dist/themes/index.d.ts +26 -0
  104. package/dist/themes/index.d.ts.map +1 -0
  105. package/dist/themes/index.js +23 -0
  106. package/dist/themes/index.js.map +1 -0
  107. package/dist/themes/minimal.d.ts +3 -0
  108. package/dist/themes/minimal.d.ts.map +1 -0
  109. package/dist/themes/minimal.js +85 -0
  110. package/dist/themes/minimal.js.map +1 -0
  111. package/dist/themes/modern.d.ts +3 -0
  112. package/dist/themes/modern.d.ts.map +1 -0
  113. package/dist/themes/modern.js +114 -0
  114. package/dist/themes/modern.js.map +1 -0
  115. package/dist/utils/file-utils.d.ts +9 -0
  116. package/dist/utils/file-utils.d.ts.map +1 -0
  117. package/dist/utils/file-utils.js +93 -0
  118. package/dist/utils/file-utils.js.map +1 -0
  119. package/dist/utils/github-api.d.ts +27 -0
  120. package/dist/utils/github-api.d.ts.map +1 -0
  121. package/dist/utils/github-api.js +68 -0
  122. package/dist/utils/github-api.js.map +1 -0
  123. package/dist/utils/language-detector.d.ts +18 -0
  124. package/dist/utils/language-detector.d.ts.map +1 -0
  125. package/dist/utils/language-detector.js +139 -0
  126. package/dist/utils/language-detector.js.map +1 -0
  127. package/dist/utils/markdown-writer.d.ts +5 -0
  128. package/dist/utils/markdown-writer.d.ts.map +1 -0
  129. package/dist/utils/markdown-writer.js +19 -0
  130. package/dist/utils/markdown-writer.js.map +1 -0
  131. package/dist/utils/template-engine.d.ts +9 -0
  132. package/dist/utils/template-engine.d.ts.map +1 -0
  133. package/dist/utils/template-engine.js +29 -0
  134. package/dist/utils/template-engine.js.map +1 -0
  135. package/package.json +60 -0
  136. package/templates/.readmeaiignore.example +41 -0
  137. package/templates/github-action.yml +35 -0
@@ -0,0 +1,47 @@
1
+ import Anthropic from '@anthropic-ai/sdk';
2
+ import { getAPIKey } from '../config.js';
3
+ export function createAnthropicProvider(model) {
4
+ const apiKey = getAPIKey('anthropic');
5
+ if (!apiKey) {
6
+ throw new Error('ANTHROPIC_API_KEY not set.\n' +
7
+ 'Export your key: export ANTHROPIC_API_KEY=sk-ant-...\n' +
8
+ 'Or use Ollama for free: --provider ollama');
9
+ }
10
+ const client = new Anthropic({ apiKey });
11
+ const modelId = model || 'claude-sonnet-4-20250514';
12
+ return {
13
+ name: 'anthropic',
14
+ model: modelId,
15
+ async generate(prompt) {
16
+ const response = await client.messages.create({
17
+ model: modelId,
18
+ max_tokens: 4096,
19
+ messages: [{ role: 'user', content: prompt }],
20
+ });
21
+ const block = response.content[0];
22
+ if (block.type === 'text') {
23
+ return block.text;
24
+ }
25
+ throw new Error('Unexpected response format from Anthropic');
26
+ },
27
+ async generateJSON(prompt) {
28
+ const response = await client.messages.create({
29
+ model: modelId,
30
+ max_tokens: 4096,
31
+ messages: [
32
+ {
33
+ role: 'user',
34
+ content: prompt + '\n\nRespond with valid JSON only. No markdown fences, no explanation.',
35
+ },
36
+ ],
37
+ });
38
+ const block = response.content[0];
39
+ if (block.type === 'text') {
40
+ const text = block.text.trim().replace(/^```json\n?/, '').replace(/\n?```$/, '');
41
+ return JSON.parse(text);
42
+ }
43
+ throw new Error('Unexpected response format from Anthropic');
44
+ },
45
+ };
46
+ }
47
+ //# sourceMappingURL=anthropic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../src/providers/anthropic.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,mBAAmB,CAAC;AAE1C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,MAAM,UAAU,uBAAuB,CAAC,KAAc;IACpD,MAAM,MAAM,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC;IACtC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CACb,8BAA8B;YAC9B,wDAAwD;YACxD,2CAA2C,CAC5C,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IACzC,MAAM,OAAO,GAAG,KAAK,IAAI,0BAA0B,CAAC;IAEpD,OAAO;QACL,IAAI,EAAE,WAAW;QACjB,KAAK,EAAE,OAAO;QAEd,KAAK,CAAC,QAAQ,CAAC,MAAc;YAC3B,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAC5C,KAAK,EAAE,OAAO;gBACd,UAAU,EAAE,IAAI;gBAChB,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;aAC9C,CAAC,CAAC;YAEH,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAClC,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBAC1B,OAAO,KAAK,CAAC,IAAI,CAAC;YACpB,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;QAC/D,CAAC;QAED,KAAK,CAAC,YAAY,CAAI,MAAc;YAClC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAC5C,KAAK,EAAE,OAAO;gBACd,UAAU,EAAE,IAAI;gBAChB,QAAQ,EAAE;oBACR;wBACE,IAAI,EAAE,MAAM;wBACZ,OAAO,EAAE,MAAM,GAAG,uEAAuE;qBAC1F;iBACF;aACF,CAAC,CAAC;YAEH,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAClC,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBAC1B,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;gBACjF,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAM,CAAC;YAC/B,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;QAC/D,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { AIProvider } from './index.js';
2
+ export declare function createGeminiProvider(model?: string): AIProvider;
3
+ //# sourceMappingURL=gemini.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini.d.ts","sourceRoot":"","sources":["../../src/providers/gemini.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAG7C,wBAAgB,oBAAoB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,UAAU,CAgC/D"}
@@ -0,0 +1,28 @@
1
+ import { GoogleGenerativeAI } from '@google/generative-ai';
2
+ import { getAPIKey } from '../config.js';
3
+ export function createGeminiProvider(model) {
4
+ const apiKey = getAPIKey('gemini');
5
+ if (!apiKey) {
6
+ throw new Error('GEMINI_API_KEY not set.\n' +
7
+ 'Export your key: export GEMINI_API_KEY=...\n' +
8
+ 'Or use Ollama for free: --provider ollama');
9
+ }
10
+ const genAI = new GoogleGenerativeAI(apiKey);
11
+ const modelId = model || 'gemini-1.5-flash';
12
+ return {
13
+ name: 'gemini',
14
+ model: modelId,
15
+ async generate(prompt) {
16
+ const genModel = genAI.getGenerativeModel({ model: modelId });
17
+ const result = await genModel.generateContent(prompt);
18
+ return result.response.text();
19
+ },
20
+ async generateJSON(prompt) {
21
+ const genModel = genAI.getGenerativeModel({ model: modelId });
22
+ const result = await genModel.generateContent(prompt + '\n\nRespond with valid JSON only. No markdown fences, no explanation.');
23
+ const text = result.response.text().trim().replace(/^```json\n?/, '').replace(/\n?```$/, '');
24
+ return JSON.parse(text);
25
+ },
26
+ };
27
+ }
28
+ //# sourceMappingURL=gemini.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini.js","sourceRoot":"","sources":["../../src/providers/gemini.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,MAAM,UAAU,oBAAoB,CAAC,KAAc;IACjD,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;IACnC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CACb,2BAA2B;YAC3B,8CAA8C;YAC9C,2CAA2C,CAC5C,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC7C,MAAM,OAAO,GAAG,KAAK,IAAI,kBAAkB,CAAC;IAE5C,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,OAAO;QAEd,KAAK,CAAC,QAAQ,CAAC,MAAc;YAC3B,MAAM,QAAQ,GAAG,KAAK,CAAC,kBAAkB,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;YAC9D,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;YACtD,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QAChC,CAAC;QAED,KAAK,CAAC,YAAY,CAAI,MAAc;YAClC,MAAM,QAAQ,GAAG,KAAK,CAAC,kBAAkB,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;YAC9D,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,eAAe,CAC3C,MAAM,GAAG,uEAAuE,CACjF,CAAC;YACF,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;YAC7F,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAM,CAAC;QAC/B,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,8 @@
1
+ export interface AIProvider {
2
+ name: string;
3
+ model: string;
4
+ generate(prompt: string): Promise<string>;
5
+ generateJSON<T>(prompt: string): Promise<T>;
6
+ }
7
+ export declare function createProvider(name: string, model?: string): Promise<AIProvider>;
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1C,YAAY,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CAC7C;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAwBtF"}
@@ -0,0 +1,24 @@
1
+ export async function createProvider(name, model) {
2
+ switch (name) {
3
+ case 'anthropic': {
4
+ const { createAnthropicProvider } = await import('./anthropic.js');
5
+ return createAnthropicProvider(model);
6
+ }
7
+ case 'openai': {
8
+ const { createOpenAIProvider } = await import('./openai.js');
9
+ return createOpenAIProvider(model);
10
+ }
11
+ case 'gemini': {
12
+ const { createGeminiProvider } = await import('./gemini.js');
13
+ return createGeminiProvider(model);
14
+ }
15
+ case 'ollama': {
16
+ const { createOllamaProvider } = await import('./ollama.js');
17
+ return createOllamaProvider(model);
18
+ }
19
+ default:
20
+ throw new Error(`Unknown provider: ${name}\n` +
21
+ 'Available providers: anthropic, openai, gemini, ollama');
22
+ }
23
+ }
24
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAOA,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAY,EAAE,KAAc;IAC/D,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,MAAM,EAAE,uBAAuB,EAAE,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC;YACnE,OAAO,uBAAuB,CAAC,KAAK,CAAC,CAAC;QACxC,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,EAAE,oBAAoB,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;YAC7D,OAAO,oBAAoB,CAAC,KAAK,CAAC,CAAC;QACrC,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,EAAE,oBAAoB,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;YAC7D,OAAO,oBAAoB,CAAC,KAAK,CAAC,CAAC;QACrC,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,EAAE,oBAAoB,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;YAC7D,OAAO,oBAAoB,CAAC,KAAK,CAAC,CAAC;QACrC,CAAC;QACD;YACE,MAAM,IAAI,KAAK,CACb,qBAAqB,IAAI,IAAI;gBAC7B,wDAAwD,CACzD,CAAC;IACN,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { AIProvider } from './index.js';
2
+ export declare function createOllamaProvider(model?: string): AIProvider;
3
+ //# sourceMappingURL=ollama.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ollama.d.ts","sourceRoot":"","sources":["../../src/providers/ollama.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAG7C,wBAAgB,oBAAoB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,UAAU,CAoD/D"}
@@ -0,0 +1,46 @@
1
+ import { getOllamaURL } from '../config.js';
2
+ export function createOllamaProvider(model) {
3
+ const baseUrl = getOllamaURL();
4
+ const modelId = model || 'llama3.1';
5
+ return {
6
+ name: 'ollama',
7
+ model: modelId,
8
+ async generate(prompt) {
9
+ const response = await fetch(`${baseUrl}/api/generate`, {
10
+ method: 'POST',
11
+ headers: { 'Content-Type': 'application/json' },
12
+ body: JSON.stringify({
13
+ model: modelId,
14
+ prompt,
15
+ stream: false,
16
+ }),
17
+ });
18
+ if (!response.ok) {
19
+ throw new Error(`Ollama request failed (${response.status}).\n` +
20
+ 'Make sure Ollama is running: ollama serve\n' +
21
+ `And the model is pulled: ollama pull ${modelId}`);
22
+ }
23
+ const data = await response.json();
24
+ return data.response;
25
+ },
26
+ async generateJSON(prompt) {
27
+ const response = await fetch(`${baseUrl}/api/generate`, {
28
+ method: 'POST',
29
+ headers: { 'Content-Type': 'application/json' },
30
+ body: JSON.stringify({
31
+ model: modelId,
32
+ prompt: prompt + '\n\nRespond with valid JSON only. No markdown fences, no explanation.',
33
+ stream: false,
34
+ format: 'json',
35
+ }),
36
+ });
37
+ if (!response.ok) {
38
+ throw new Error(`Ollama request failed (${response.status})`);
39
+ }
40
+ const data = await response.json();
41
+ const text = data.response.trim().replace(/^```json\n?/, '').replace(/\n?```$/, '');
42
+ return JSON.parse(text);
43
+ },
44
+ };
45
+ }
46
+ //# sourceMappingURL=ollama.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ollama.js","sourceRoot":"","sources":["../../src/providers/ollama.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,MAAM,UAAU,oBAAoB,CAAC,KAAc;IACjD,MAAM,OAAO,GAAG,YAAY,EAAE,CAAC;IAC/B,MAAM,OAAO,GAAG,KAAK,IAAI,UAAU,CAAC;IAEpC,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,OAAO;QAEd,KAAK,CAAC,QAAQ,CAAC,MAAc;YAC3B,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,eAAe,EAAE;gBACtD,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;gBAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACnB,KAAK,EAAE,OAAO;oBACd,MAAM;oBACN,MAAM,EAAE,KAAK;iBACd,CAAC;aACH,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CACb,0BAA0B,QAAQ,CAAC,MAAM,MAAM;oBAC/C,6CAA6C;oBAC7C,wCAAwC,OAAO,EAAE,CAClD,CAAC;YACJ,CAAC;YAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAA0B,CAAC;YAC3D,OAAO,IAAI,CAAC,QAAQ,CAAC;QACvB,CAAC;QAED,KAAK,CAAC,YAAY,CAAI,MAAc;YAClC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,eAAe,EAAE;gBACtD,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;gBAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACnB,KAAK,EAAE,OAAO;oBACd,MAAM,EAAE,MAAM,GAAG,uEAAuE;oBACxF,MAAM,EAAE,KAAK;oBACb,MAAM,EAAE,MAAM;iBACf,CAAC;aACH,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,0BAA0B,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;YAChE,CAAC;YAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAA0B,CAAC;YAC3D,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;YACpF,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAM,CAAC;QAC/B,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { AIProvider } from './index.js';
2
+ export declare function createOpenAIProvider(model?: string): AIProvider;
3
+ //# sourceMappingURL=openai.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../src/providers/openai.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAG7C,wBAAgB,oBAAoB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,UAAU,CA4C/D"}
@@ -0,0 +1,40 @@
1
+ import OpenAI from 'openai';
2
+ import { getAPIKey } from '../config.js';
3
+ export function createOpenAIProvider(model) {
4
+ const apiKey = getAPIKey('openai');
5
+ if (!apiKey) {
6
+ throw new Error('OPENAI_API_KEY not set.\n' +
7
+ 'Export your key: export OPENAI_API_KEY=sk-...\n' +
8
+ 'Or use Ollama for free: --provider ollama');
9
+ }
10
+ const client = new OpenAI({ apiKey });
11
+ const modelId = model || 'gpt-4o-mini';
12
+ return {
13
+ name: 'openai',
14
+ model: modelId,
15
+ async generate(prompt) {
16
+ const response = await client.chat.completions.create({
17
+ model: modelId,
18
+ messages: [{ role: 'user', content: prompt }],
19
+ max_tokens: 4096,
20
+ });
21
+ return response.choices[0]?.message?.content || '';
22
+ },
23
+ async generateJSON(prompt) {
24
+ const response = await client.chat.completions.create({
25
+ model: modelId,
26
+ messages: [
27
+ {
28
+ role: 'user',
29
+ content: prompt + '\n\nRespond with valid JSON only. No markdown fences, no explanation.',
30
+ },
31
+ ],
32
+ max_tokens: 4096,
33
+ response_format: { type: 'json_object' },
34
+ });
35
+ const text = response.choices[0]?.message?.content || '{}';
36
+ return JSON.parse(text);
37
+ },
38
+ };
39
+ }
40
+ //# sourceMappingURL=openai.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/providers/openai.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,MAAM,UAAU,oBAAoB,CAAC,KAAc;IACjD,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;IACnC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CACb,2BAA2B;YAC3B,iDAAiD;YACjD,2CAA2C,CAC5C,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,KAAK,IAAI,aAAa,CAAC;IAEvC,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,OAAO;QAEd,KAAK,CAAC,QAAQ,CAAC,MAAc;YAC3B,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;gBACpD,KAAK,EAAE,OAAO;gBACd,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;gBAC7C,UAAU,EAAE,IAAI;aACjB,CAAC,CAAC;YAEH,OAAO,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,IAAI,EAAE,CAAC;QACrD,CAAC;QAED,KAAK,CAAC,YAAY,CAAI,MAAc;YAClC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;gBACpD,KAAK,EAAE,OAAO;gBACd,QAAQ,EAAE;oBACR;wBACE,IAAI,EAAE,MAAM;wBACZ,OAAO,EAAE,MAAM,GAAG,uEAAuE;qBAC1F;iBACF;gBACD,UAAU,EAAE,IAAI;gBAChB,eAAe,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE;aACzC,CAAC,CAAC;YAEH,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,IAAI,IAAI,CAAC;YAC3D,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAM,CAAC;QAC/B,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ThemeData } from './index.js';
2
+ export declare function renderAcademic(data: ThemeData): string;
3
+ //# sourceMappingURL=academic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"academic.d.ts","sourceRoot":"","sources":["../../src/themes/academic.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,wBAAgB,cAAc,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CA4HtD"}
@@ -0,0 +1,113 @@
1
+ export function renderAcademic(data) {
2
+ const sections = [];
3
+ // Title page style
4
+ sections.push(`# ${data.projectName}
5
+
6
+ **Abstract:** ${data.tagline}
7
+
8
+ ${data.badgeRow}
9
+
10
+ ---`);
11
+ // Introduction
12
+ sections.push(`## 1. Introduction
13
+
14
+ ${data.description}`);
15
+ // Features / Objectives
16
+ if (data.keyFeatures.length > 0) {
17
+ const cleanFeatures = data.keyFeatures.map(f => f.replace(/^[\p{Emoji_Presentation}\p{Extended_Pictographic}\s]+/u, ''));
18
+ sections.push(`## 2. Objectives
19
+
20
+ The primary objectives of this project are:
21
+
22
+ ${cleanFeatures.map((f, i) => `${i + 1}. ${f}`).join('\n')}`);
23
+ }
24
+ // Architecture / Methods
25
+ if (data.diagram) {
26
+ sections.push(`## 3. System Architecture
27
+
28
+ ${data.diagram.description}
29
+
30
+ \`\`\`mermaid
31
+ ${data.diagram.mermaidCode}
32
+ \`\`\``);
33
+ }
34
+ else {
35
+ sections.push(`## 3. System Architecture`);
36
+ }
37
+ // Project Structure
38
+ if (data.directoryTree) {
39
+ sections.push(`### 3.1 Project Organization
40
+
41
+ The project follows the following directory structure:
42
+
43
+ \`\`\`
44
+ ${data.directoryTree}
45
+ \`\`\``);
46
+ }
47
+ // Implementation / Getting Started
48
+ const installLines = ['## 4. Implementation', ''];
49
+ installLines.push('### 4.1 Prerequisites');
50
+ installLines.push('');
51
+ if (data.installSection.prerequisites.length > 0) {
52
+ installLines.push('The following software is required:');
53
+ installLines.push('');
54
+ installLines.push(data.installSection.prerequisites.map(p => `- ${p}`).join('\n'));
55
+ }
56
+ else {
57
+ installLines.push('No specific prerequisites are required.');
58
+ }
59
+ installLines.push('');
60
+ installLines.push('### 4.2 Installation Procedure');
61
+ installLines.push('');
62
+ data.installSection.installSteps.forEach((step, i) => {
63
+ installLines.push(`**Step ${i + 1}.** ${step.title}`);
64
+ installLines.push('');
65
+ installLines.push('```bash');
66
+ installLines.push(step.command);
67
+ installLines.push('```');
68
+ installLines.push('');
69
+ });
70
+ sections.push(installLines.join('\n'));
71
+ // Results / Usage
72
+ if (data.usageSection.examples.length > 0) {
73
+ const usageLines = ['## 5. Usage and Results', ''];
74
+ for (const example of data.usageSection.examples) {
75
+ usageLines.push(`### ${example.title}`);
76
+ usageLines.push('');
77
+ usageLines.push(example.description);
78
+ usageLines.push('');
79
+ usageLines.push(`\`\`\`${example.language}`);
80
+ usageLines.push(example.code);
81
+ usageLines.push('```');
82
+ usageLines.push('');
83
+ }
84
+ sections.push(usageLines.join('\n'));
85
+ }
86
+ // API Documentation
87
+ if (data.apiDocs && data.apiDocs.entries.length > 0) {
88
+ const apiLines = ['## 6. API Specification', ''];
89
+ for (const entry of data.apiDocs.entries) {
90
+ apiLines.push(`#### \`${entry.name}\``);
91
+ apiLines.push('');
92
+ apiLines.push(`**Signature:** \`${entry.signature}\``);
93
+ if (entry.description) {
94
+ apiLines.push('');
95
+ apiLines.push(`**Description:** ${entry.description}`);
96
+ }
97
+ apiLines.push('');
98
+ apiLines.push(`**Source:** \`${entry.file}\``);
99
+ apiLines.push('');
100
+ }
101
+ sections.push(apiLines.join('\n'));
102
+ }
103
+ // Contributing / Acknowledgments
104
+ sections.push(`## ${data.apiDocs ? '7' : '6'}. Contributing
105
+
106
+ ${data.contributingSection}`);
107
+ // License
108
+ sections.push(`## ${data.apiDocs ? '8' : '7'}. License
109
+
110
+ ${data.license}`);
111
+ return sections.join('\n\n').trim() + '\n';
112
+ }
113
+ //# sourceMappingURL=academic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"academic.js","sourceRoot":"","sources":["../../src/themes/academic.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { ThemeData } from './index.js';
2
+ export declare function renderDefault(data: ThemeData): string;
3
+ //# sourceMappingURL=default.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"default.d.ts","sourceRoot":"","sources":["../../src/themes/default.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,wBAAgB,aAAa,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CA+HrD"}
@@ -0,0 +1,114 @@
1
+ export function renderDefault(data) {
2
+ const sections = [];
3
+ // Header
4
+ sections.push(`<div align="center">
5
+
6
+ # ${data.projectName}
7
+
8
+ > ${data.tagline}
9
+
10
+ ${data.badgeRow}
11
+
12
+ </div>`);
13
+ // Overview
14
+ sections.push(`## 📖 Overview
15
+
16
+ ${data.description}`);
17
+ // Features
18
+ if (data.keyFeatures.length > 0) {
19
+ sections.push(`## ✨ Features
20
+
21
+ ${data.keyFeatures.map(f => `- ${f}`).join('\n')}`);
22
+ }
23
+ // Architecture diagram
24
+ if (data.diagram) {
25
+ sections.push(`## 🏗️ Architecture
26
+
27
+ \`\`\`mermaid
28
+ ${data.diagram.mermaidCode}
29
+ \`\`\`
30
+
31
+ ${data.diagram.description}`);
32
+ }
33
+ // Project structure
34
+ if (data.directoryTree) {
35
+ sections.push(`## 📁 Project Structure
36
+
37
+ \`\`\`
38
+ ${data.directoryTree}
39
+ \`\`\``);
40
+ }
41
+ // Getting Started
42
+ const installLines = [];
43
+ installLines.push('## 🚀 Getting Started');
44
+ installLines.push('');
45
+ if (data.installSection.prerequisites.length > 0) {
46
+ installLines.push('### Prerequisites');
47
+ installLines.push('');
48
+ installLines.push(data.installSection.prerequisites.map(p => `- ${p}`).join('\n'));
49
+ installLines.push('');
50
+ }
51
+ installLines.push('### Installation');
52
+ installLines.push('');
53
+ data.installSection.installSteps.forEach((step, i) => {
54
+ installLines.push(`${i + 1}. **${step.title}**`);
55
+ installLines.push(` \`\`\`bash`);
56
+ installLines.push(` ${step.command}`);
57
+ installLines.push(` \`\`\``);
58
+ installLines.push('');
59
+ });
60
+ if (data.installSection.envSetupSteps) {
61
+ installLines.push('### Environment Setup');
62
+ installLines.push('');
63
+ data.installSection.envSetupSteps.forEach((step, i) => {
64
+ installLines.push(`${i + 1}. **${step.title}**`);
65
+ installLines.push(` \`\`\`bash`);
66
+ installLines.push(` ${step.command}`);
67
+ installLines.push(` \`\`\``);
68
+ installLines.push('');
69
+ });
70
+ }
71
+ sections.push(installLines.join('\n'));
72
+ // Usage
73
+ if (data.usageSection.examples.length > 0) {
74
+ const usageLines = ['## 💡 Usage', ''];
75
+ for (const example of data.usageSection.examples) {
76
+ usageLines.push(`### ${example.title}`);
77
+ usageLines.push('');
78
+ usageLines.push(example.description);
79
+ usageLines.push('');
80
+ usageLines.push(`\`\`\`${example.language}`);
81
+ usageLines.push(example.code);
82
+ usageLines.push('```');
83
+ usageLines.push('');
84
+ }
85
+ sections.push(usageLines.join('\n'));
86
+ }
87
+ // API Docs
88
+ if (data.apiDocs && data.apiDocs.entries.length > 0) {
89
+ const apiLines = ['## 📚 API Reference', ''];
90
+ for (const entry of data.apiDocs.entries) {
91
+ apiLines.push(`### \`${entry.name}\``);
92
+ apiLines.push('');
93
+ apiLines.push(`\`\`\`\n${entry.signature}\n\`\`\``);
94
+ if (entry.description) {
95
+ apiLines.push('');
96
+ apiLines.push(entry.description);
97
+ }
98
+ apiLines.push('');
99
+ apiLines.push(`*Defined in \`${entry.file}\`*`);
100
+ apiLines.push('');
101
+ }
102
+ sections.push(apiLines.join('\n'));
103
+ }
104
+ // Contributing
105
+ sections.push(`## 🤝 Contributing
106
+
107
+ ${data.contributingSection}`);
108
+ // License
109
+ sections.push(`## 📄 License
110
+
111
+ ${data.license}`);
112
+ return sections.join('\n\n---\n\n').trim() + '\n';
113
+ }
114
+ //# sourceMappingURL=default.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"default.js","sourceRoot":"","sources":["../../src/themes/default.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { ThemeData } from './index.js';
2
+ export declare function renderHacker(data: ThemeData): string;
3
+ //# sourceMappingURL=hacker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hacker.d.ts","sourceRoot":"","sources":["../../src/themes/hacker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAgB5C,wBAAgB,YAAY,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAqGpD"}
@@ -0,0 +1,100 @@
1
+ function asciiBox(title, subtitle) {
2
+ const width = Math.max(title.length, subtitle.length) + 4;
3
+ const top = '╔' + '═'.repeat(width) + '╗';
4
+ const bottom = '╚' + '═'.repeat(width) + '╝';
5
+ const padTitle = title.padEnd(width - 2);
6
+ const padSub = subtitle.padEnd(width - 2);
7
+ return `\`\`\`
8
+ ${top}
9
+ ║ ${padTitle} ║
10
+ ║ ${padSub} ║
11
+ ${bottom}
12
+ \`\`\``;
13
+ }
14
+ export function renderHacker(data) {
15
+ const sections = [];
16
+ // ASCII Header
17
+ sections.push(asciiBox(data.projectName, data.tagline));
18
+ // Badges in a code-like format
19
+ if (data.badgeRow) {
20
+ sections.push(data.badgeRow);
21
+ }
22
+ // Overview
23
+ sections.push(`## // Overview
24
+
25
+ > ${data.description.split('\n').join('\n> ')}`);
26
+ // Features
27
+ if (data.keyFeatures.length > 0) {
28
+ const cleanFeatures = data.keyFeatures.map(f => f.replace(/^[\p{Emoji_Presentation}\p{Extended_Pictographic}\s]+/u, ''));
29
+ sections.push(`## // Features
30
+
31
+ ${cleanFeatures.map(f => `- [x] ${f}`).join('\n')}`);
32
+ }
33
+ // Architecture
34
+ if (data.diagram) {
35
+ sections.push(`## // Architecture
36
+
37
+ \`\`\`mermaid
38
+ ${data.diagram.mermaidCode}
39
+ \`\`\`
40
+
41
+ > ${data.diagram.description}`);
42
+ }
43
+ // File tree
44
+ if (data.directoryTree) {
45
+ sections.push(`## // Project Structure
46
+
47
+ \`\`\`
48
+ ${data.directoryTree}
49
+ \`\`\``);
50
+ }
51
+ // Setup
52
+ const installLines = ['## // Setup', ''];
53
+ if (data.installSection.prerequisites.length > 0) {
54
+ installLines.push('**Requirements:**');
55
+ installLines.push(data.installSection.prerequisites.map(p => `- \`${p}\``).join('\n'));
56
+ installLines.push('');
57
+ }
58
+ installLines.push('**Install:**');
59
+ installLines.push('');
60
+ installLines.push('```bash');
61
+ data.installSection.installSteps.forEach(step => {
62
+ installLines.push(`# ${step.title}`);
63
+ installLines.push(step.command);
64
+ });
65
+ installLines.push('```');
66
+ sections.push(installLines.join('\n'));
67
+ // Usage
68
+ if (data.usageSection.examples.length > 0) {
69
+ const usageLines = ['## // Usage', ''];
70
+ for (const example of data.usageSection.examples) {
71
+ usageLines.push(`\`\`\`${example.language}`);
72
+ usageLines.push(`# ${example.title}`);
73
+ usageLines.push(example.code);
74
+ usageLines.push('```');
75
+ usageLines.push('');
76
+ }
77
+ sections.push(usageLines.join('\n'));
78
+ }
79
+ // API
80
+ if (data.apiDocs && data.apiDocs.entries.length > 0) {
81
+ const apiLines = ['## // API Reference', ''];
82
+ for (const entry of data.apiDocs.entries) {
83
+ apiLines.push(`\`${entry.signature}\``);
84
+ if (entry.description)
85
+ apiLines.push(`> ${entry.description}`);
86
+ apiLines.push('');
87
+ }
88
+ sections.push(apiLines.join('\n'));
89
+ }
90
+ // Contributing
91
+ sections.push(`## // Contributing
92
+
93
+ ${data.contributingSection}`);
94
+ // License
95
+ sections.push(`## // License
96
+
97
+ ${data.license}`);
98
+ return sections.join('\n\n---\n\n').trim() + '\n';
99
+ }
100
+ //# sourceMappingURL=hacker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hacker.js","sourceRoot":"","sources":["../../src/themes/hacker.ts"],"names":[],"mappings":"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"}