@ragul1233332/docpilot 0.1.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 (186) hide show
  1. package/README.md +147 -0
  2. package/dist/ai/anthropic.provider.d.ts +9 -0
  3. package/dist/ai/anthropic.provider.d.ts.map +1 -0
  4. package/dist/ai/anthropic.provider.js +54 -0
  5. package/dist/ai/anthropic.provider.js.map +1 -0
  6. package/dist/ai/openai.provider.d.ts +9 -0
  7. package/dist/ai/openai.provider.d.ts.map +1 -0
  8. package/dist/ai/openai.provider.js +53 -0
  9. package/dist/ai/openai.provider.js.map +1 -0
  10. package/dist/ai/prompts.d.ts +4 -0
  11. package/dist/ai/prompts.d.ts.map +1 -0
  12. package/dist/ai/prompts.js +199 -0
  13. package/dist/ai/prompts.js.map +1 -0
  14. package/dist/ai/provider.d.ts +4 -0
  15. package/dist/ai/provider.d.ts.map +1 -0
  16. package/dist/ai/provider.js +13 -0
  17. package/dist/ai/provider.js.map +1 -0
  18. package/dist/ai/template.provider.d.ts +7 -0
  19. package/dist/ai/template.provider.d.ts.map +1 -0
  20. package/dist/ai/template.provider.js +19 -0
  21. package/dist/ai/template.provider.js.map +1 -0
  22. package/dist/cli/commands/changelog.d.ts +3 -0
  23. package/dist/cli/commands/changelog.d.ts.map +1 -0
  24. package/dist/cli/commands/changelog.js +118 -0
  25. package/dist/cli/commands/changelog.js.map +1 -0
  26. package/dist/cli/commands/doctor.d.ts +3 -0
  27. package/dist/cli/commands/doctor.d.ts.map +1 -0
  28. package/dist/cli/commands/doctor.js +109 -0
  29. package/dist/cli/commands/doctor.js.map +1 -0
  30. package/dist/cli/commands/generate.d.ts +3 -0
  31. package/dist/cli/commands/generate.d.ts.map +1 -0
  32. package/dist/cli/commands/generate.js +82 -0
  33. package/dist/cli/commands/generate.js.map +1 -0
  34. package/dist/cli/commands/scan.d.ts +3 -0
  35. package/dist/cli/commands/scan.d.ts.map +1 -0
  36. package/dist/cli/commands/scan.js +140 -0
  37. package/dist/cli/commands/scan.js.map +1 -0
  38. package/dist/cli/commands/score.d.ts +13 -0
  39. package/dist/cli/commands/score.d.ts.map +1 -0
  40. package/dist/cli/commands/score.js +153 -0
  41. package/dist/cli/commands/score.js.map +1 -0
  42. package/dist/cli/commands/suggest.d.ts +3 -0
  43. package/dist/cli/commands/suggest.d.ts.map +1 -0
  44. package/dist/cli/commands/suggest.js +72 -0
  45. package/dist/cli/commands/suggest.js.map +1 -0
  46. package/dist/cli/commands/sync.d.ts +3 -0
  47. package/dist/cli/commands/sync.d.ts.map +1 -0
  48. package/dist/cli/commands/sync.js +120 -0
  49. package/dist/cli/commands/sync.js.map +1 -0
  50. package/dist/cli/commands/watch.d.ts +3 -0
  51. package/dist/cli/commands/watch.d.ts.map +1 -0
  52. package/dist/cli/commands/watch.js +63 -0
  53. package/dist/cli/commands/watch.js.map +1 -0
  54. package/dist/cli/index.d.ts +2 -0
  55. package/dist/cli/index.d.ts.map +1 -0
  56. package/dist/cli/index.js +35 -0
  57. package/dist/cli/index.js.map +1 -0
  58. package/dist/config/index.d.ts +7 -0
  59. package/dist/config/index.d.ts.map +1 -0
  60. package/dist/config/index.js +76 -0
  61. package/dist/config/index.js.map +1 -0
  62. package/dist/core/constants.d.ts +22 -0
  63. package/dist/core/constants.d.ts.map +1 -0
  64. package/dist/core/constants.js +201 -0
  65. package/dist/core/constants.js.map +1 -0
  66. package/dist/core/errors.d.ts +26 -0
  67. package/dist/core/errors.d.ts.map +1 -0
  68. package/dist/core/errors.js +48 -0
  69. package/dist/core/errors.js.map +1 -0
  70. package/dist/core/registry.d.ts +21 -0
  71. package/dist/core/registry.d.ts.map +1 -0
  72. package/dist/core/registry.js +99 -0
  73. package/dist/core/registry.js.map +1 -0
  74. package/dist/core/schemas.d.ts +170 -0
  75. package/dist/core/schemas.d.ts.map +1 -0
  76. package/dist/core/schemas.js +43 -0
  77. package/dist/core/schemas.js.map +1 -0
  78. package/dist/core/types.d.ts +246 -0
  79. package/dist/core/types.d.ts.map +1 -0
  80. package/dist/core/types.js +5 -0
  81. package/dist/core/types.js.map +1 -0
  82. package/dist/generators/index.d.ts +9 -0
  83. package/dist/generators/index.d.ts.map +1 -0
  84. package/dist/generators/index.js +181 -0
  85. package/dist/generators/index.js.map +1 -0
  86. package/dist/generators/sections/api-docs.d.ts +3 -0
  87. package/dist/generators/sections/api-docs.d.ts.map +1 -0
  88. package/dist/generators/sections/api-docs.js +39 -0
  89. package/dist/generators/sections/api-docs.js.map +1 -0
  90. package/dist/generators/sections/contributing.d.ts +3 -0
  91. package/dist/generators/sections/contributing.d.ts.map +1 -0
  92. package/dist/generators/sections/contributing.js +24 -0
  93. package/dist/generators/sections/contributing.js.map +1 -0
  94. package/dist/generators/sections/deployment.d.ts +3 -0
  95. package/dist/generators/sections/deployment.d.ts.map +1 -0
  96. package/dist/generators/sections/deployment.js +30 -0
  97. package/dist/generators/sections/deployment.js.map +1 -0
  98. package/dist/generators/sections/env-vars.d.ts +3 -0
  99. package/dist/generators/sections/env-vars.d.ts.map +1 -0
  100. package/dist/generators/sections/env-vars.js +18 -0
  101. package/dist/generators/sections/env-vars.js.map +1 -0
  102. package/dist/generators/sections/features.d.ts +4 -0
  103. package/dist/generators/sections/features.d.ts.map +1 -0
  104. package/dist/generators/sections/features.js +34 -0
  105. package/dist/generators/sections/features.js.map +1 -0
  106. package/dist/generators/sections/folder-tree.d.ts +3 -0
  107. package/dist/generators/sections/folder-tree.d.ts.map +1 -0
  108. package/dist/generators/sections/folder-tree.js +43 -0
  109. package/dist/generators/sections/folder-tree.js.map +1 -0
  110. package/dist/generators/sections/installation.d.ts +4 -0
  111. package/dist/generators/sections/installation.d.ts.map +1 -0
  112. package/dist/generators/sections/installation.js +33 -0
  113. package/dist/generators/sections/installation.js.map +1 -0
  114. package/dist/generators/sections/license.d.ts +3 -0
  115. package/dist/generators/sections/license.d.ts.map +1 -0
  116. package/dist/generators/sections/license.js +13 -0
  117. package/dist/generators/sections/license.js.map +1 -0
  118. package/dist/generators/sections/overview.d.ts +4 -0
  119. package/dist/generators/sections/overview.d.ts.map +1 -0
  120. package/dist/generators/sections/overview.js +39 -0
  121. package/dist/generators/sections/overview.js.map +1 -0
  122. package/dist/generators/sections/scripts.d.ts +3 -0
  123. package/dist/generators/sections/scripts.d.ts.map +1 -0
  124. package/dist/generators/sections/scripts.js +18 -0
  125. package/dist/generators/sections/scripts.js.map +1 -0
  126. package/dist/generators/sections/tech-stack.d.ts +4 -0
  127. package/dist/generators/sections/tech-stack.d.ts.map +1 -0
  128. package/dist/generators/sections/tech-stack.js +31 -0
  129. package/dist/generators/sections/tech-stack.js.map +1 -0
  130. package/dist/generators/sections/types.d.ts +13 -0
  131. package/dist/generators/sections/types.d.ts.map +1 -0
  132. package/dist/generators/sections/types.js +2 -0
  133. package/dist/generators/sections/types.js.map +1 -0
  134. package/dist/index.d.ts +3 -0
  135. package/dist/index.d.ts.map +1 -0
  136. package/dist/index.js +11 -0
  137. package/dist/index.js.map +1 -0
  138. package/dist/scanners/base.d.ts +11 -0
  139. package/dist/scanners/base.d.ts.map +1 -0
  140. package/dist/scanners/base.js +7 -0
  141. package/dist/scanners/base.js.map +1 -0
  142. package/dist/scanners/config-file.scanner.d.ts +11 -0
  143. package/dist/scanners/config-file.scanner.d.ts.map +1 -0
  144. package/dist/scanners/config-file.scanner.js +94 -0
  145. package/dist/scanners/config-file.scanner.js.map +1 -0
  146. package/dist/scanners/env-var.scanner.d.ts +13 -0
  147. package/dist/scanners/env-var.scanner.d.ts.map +1 -0
  148. package/dist/scanners/env-var.scanner.js +144 -0
  149. package/dist/scanners/env-var.scanner.js.map +1 -0
  150. package/dist/scanners/folder-tree.scanner.d.ts +13 -0
  151. package/dist/scanners/folder-tree.scanner.d.ts.map +1 -0
  152. package/dist/scanners/folder-tree.scanner.js +74 -0
  153. package/dist/scanners/folder-tree.scanner.js.map +1 -0
  154. package/dist/scanners/framework.d.ts +12 -0
  155. package/dist/scanners/framework.d.ts.map +1 -0
  156. package/dist/scanners/framework.js +71 -0
  157. package/dist/scanners/framework.js.map +1 -0
  158. package/dist/scanners/git.scanner.d.ts +11 -0
  159. package/dist/scanners/git.scanner.d.ts.map +1 -0
  160. package/dist/scanners/git.scanner.js +92 -0
  161. package/dist/scanners/git.scanner.js.map +1 -0
  162. package/dist/scanners/index.d.ts +10 -0
  163. package/dist/scanners/index.d.ts.map +1 -0
  164. package/dist/scanners/index.js +29 -0
  165. package/dist/scanners/index.js.map +1 -0
  166. package/dist/scanners/package.scanner.d.ts +11 -0
  167. package/dist/scanners/package.scanner.d.ts.map +1 -0
  168. package/dist/scanners/package.scanner.js +70 -0
  169. package/dist/scanners/package.scanner.js.map +1 -0
  170. package/dist/scanners/script.scanner.d.ts +12 -0
  171. package/dist/scanners/script.scanner.d.ts.map +1 -0
  172. package/dist/scanners/script.scanner.js +105 -0
  173. package/dist/scanners/script.scanner.js.map +1 -0
  174. package/dist/utils/files.d.ts +12 -0
  175. package/dist/utils/files.d.ts.map +1 -0
  176. package/dist/utils/files.js +86 -0
  177. package/dist/utils/files.js.map +1 -0
  178. package/dist/utils/logger.d.ts +16 -0
  179. package/dist/utils/logger.d.ts.map +1 -0
  180. package/dist/utils/logger.js +63 -0
  181. package/dist/utils/logger.js.map +1 -0
  182. package/dist/utils/markdown.d.ts +10 -0
  183. package/dist/utils/markdown.d.ts.map +1 -0
  184. package/dist/utils/markdown.js +153 -0
  185. package/dist/utils/markdown.js.map +1 -0
  186. package/package.json +61 -0
package/README.md ADDED
@@ -0,0 +1,147 @@
1
+ # docpilot
2
+ AI-powered README Engineering Toolkit — scan, generate, sync, and maintain project documentation automatically
3
+ ![Playwright](https://img.shields.io/badge/Playwright-blue?style=flat-square) ![Vite](https://img.shields.io/badge/Vite-blue?style=flat-square)
4
+
5
+ ## Overview
6
+
7
+ <!-- docpilot:start:overview -->
8
+ **@ragul/docpilot** is a modern software project that AI-powered README Engineering Toolkit — scan, generate, sync, and maintain project documentation automatically.
9
+
10
+ This README provides an overview of the project architecture, setup instructions, and available commands.
11
+ <!-- docpilot:end:overview -->
12
+
13
+ ## Features
14
+
15
+ <!-- docpilot:start:features -->
16
+ - **Comprehensive test suite**
17
+ <!-- docpilot:end:features -->
18
+
19
+ ## Tech Stack
20
+
21
+ <!-- docpilot:start:tech-stack -->
22
+ | Technology | Category | Version |
23
+ |------------|----------|---------|
24
+ | Playwright | Testing | ^1.61.0 |
25
+ | Vite | Bundler | ^2.1.0 |
26
+ <!-- docpilot:end:tech-stack -->
27
+
28
+ ## Installation
29
+
30
+ <!-- docpilot:start:installation -->
31
+ ```bash
32
+ # Installation steps
33
+ ```
34
+ <!-- docpilot:end:installation -->
35
+
36
+ ## Folder Structure
37
+
38
+ <!-- docpilot:start:folder-structure -->
39
+ ```
40
+ docpilot/
41
+ │ ├── src/
42
+ │ │ │ ├── openai.provider.ts
43
+ │ │ │ ├── prompts.ts
44
+ │ │ │ ├── provider.ts
45
+ │ │ │ └── template.provider.ts
46
+ │ │ ├── analyzers/
47
+ │ │ ├── cli/
48
+ │ │ │ │ ├── doctor.ts
49
+ │ │ │ │ ├── generate.ts
50
+ │ │ │ │ ├── scan.ts
51
+ │ │ │ │ ├── score.ts
52
+ │ │ │ │ ├── suggest.ts
53
+ │ │ │ │ ├── sync.ts
54
+ │ │ │ │ └── watch.ts
55
+ │ │ │ └── index.ts
56
+ │ │ ├── config/
57
+ │ │ ├── core/
58
+ │ │ │ ├── errors.ts
59
+ │ │ │ ├── registry.ts
60
+ │ │ │ ├── schemas.ts
61
+ │ │ │ └── types.ts
62
+ │ │ ├── generators/
63
+ │ │ │ │ ├── contributing.ts
64
+ │ │ │ │ ├── deployment.ts
65
+ │ │ │ │ ├── env-vars.ts
66
+ │ │ │ │ ├── features.ts
67
+ │ │ │ │ ├── folder-tree.ts
68
+ │ │ │ │ ├── installation.ts
69
+ │ │ │ │ ├── license.ts
70
+ │ │ │ │ ├── overview.ts
71
+ │ │ │ │ ├── scripts.ts
72
+ │ │ │ │ ├── tech-stack.ts
73
+ │ │ │ │ └── types.ts
74
+ │ │ │ ├── templates/
75
+ │ │ │ └── index.ts
76
+ │ │ ├── scanners/
77
+ │ │ │ ├── config-file.scanner.ts
78
+ │ │ │ ├── env-var.scanner.ts
79
+ │ │ │ ├── folder-tree.scanner.ts
80
+ │ │ │ ├── framework.ts
81
+ │ │ │ ├── git.scanner.ts
82
+ │ │ │ ├── index.ts
83
+ │ │ │ ├── package.scanner.ts
84
+ │ │ │ └── script.scanner.ts
85
+ │ │ ├── sync/
86
+ │ │ ├── utils/
87
+ │ │ │ ├── logger.ts
88
+ │ │ │ └── markdown.ts
89
+ │ │ ├── verifier/
90
+ │ │ ├── watcher/
91
+ │ │ └── index.ts
92
+ │ ├── tests/
93
+ │ │ │ ├── next-fullstack/
94
+ │ │ │ └── node-express/
95
+ │ │ ├── integration/
96
+ │ │ └── unit/
97
+ │ │ ├── core/
98
+ │ │ ├── generators/
99
+ │ │ ├── quality/
100
+ │ │ ├── scanners/
101
+ │ │ └── sync/
102
+ │ ├── .env.example
103
+ │ ├── .gitignore
104
+ │ ├── package-lock.json
105
+ │ ├── package.json
106
+ │ ├── README.md
107
+ │ ├── tsconfig.json
108
+ │ └── vitest.config.ts
109
+ ```
110
+ <!-- docpilot:end:folder-structure -->
111
+
112
+ ## Scripts
113
+
114
+ <!-- docpilot:start:scripts -->
115
+ | Command | Description |
116
+ |---------|-------------|
117
+ | `build` | Build the project for production |
118
+ | `dev` | Start development server |
119
+ | `start` | Start the application |
120
+ | `test` | Run tests |
121
+ | `test:watch` | Run tests in watch mode |
122
+ | `test:coverage` | Run tests with coverage report |
123
+ | `typecheck` | Run TypeScript type checking |
124
+ | `prepublishOnly` | npm run build |
125
+ <!-- docpilot:end:scripts -->
126
+
127
+ ## Environment Variables
128
+
129
+ <!-- docpilot:start:env-vars -->
130
+ No environment variables detected.
131
+ <!-- docpilot:end:env-vars -->
132
+
133
+ ## Contributing
134
+
135
+ <!-- docpilot:start:contributing -->
136
+ 1. Fork the repository
137
+ 2. Create your feature branch (`git checkout -b feature/amazing-feature`)
138
+ 3. Commit your changes (`git commit -m 'Add amazing feature'`)
139
+ 4. Push to the branch (`git push origin feature/amazing-feature`)
140
+ 5. Open a Pull Request
141
+ <!-- docpilot:end:contributing -->
142
+
143
+ ## License
144
+
145
+ <!-- docpilot:start:license -->
146
+ This project is licensed under the MIT License - see the LICENSE file for details.
147
+ <!-- docpilot:end:license -->
@@ -0,0 +1,9 @@
1
+ import type { IAIProvider, AIGenerationRequest, AIGenerationResponse } from '../core/types.js';
2
+ export declare class AnthropicProvider implements IAIProvider {
3
+ readonly name = "anthropic";
4
+ private client;
5
+ constructor();
6
+ get available(): boolean;
7
+ generateText(request: AIGenerationRequest): Promise<AIGenerationResponse>;
8
+ }
9
+ //# sourceMappingURL=anthropic.provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic.provider.d.ts","sourceRoot":"","sources":["../../src/ai/anthropic.provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAM/F,qBAAa,iBAAkB,YAAW,WAAW;IACnD,QAAQ,CAAC,IAAI,eAAe;IAC5B,OAAO,CAAC,MAAM,CAAa;;IAgB3B,IAAI,SAAS,IAAI,OAAO,CAEvB;IAEK,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC;CA+BhF"}
@@ -0,0 +1,54 @@
1
+ // ============================================================================
2
+ // DocPilot — Anthropic AI Provider
3
+ // ============================================================================
4
+ export class AnthropicProvider {
5
+ name = 'anthropic';
6
+ client = null;
7
+ constructor() {
8
+ const apiKey = process.env.ANTHROPIC_API_KEY ?? process.env.DOCPILOT_ANTHROPIC_API_KEY;
9
+ if (apiKey) {
10
+ try {
11
+ // Dynamic import — optional dependency
12
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
13
+ const Anthropic = require('@anthropic-ai/sdk');
14
+ this.client = new Anthropic.default({ apiKey });
15
+ }
16
+ catch {
17
+ this.client = null;
18
+ }
19
+ }
20
+ }
21
+ get available() {
22
+ return this.client !== null;
23
+ }
24
+ async generateText(request) {
25
+ if (!this.client) {
26
+ return { content: '', finishReason: 'error' };
27
+ }
28
+ try {
29
+ const response = await this.client.messages.create({
30
+ model: request.model ?? 'claude-sonnet-4-20250514',
31
+ max_tokens: request.maxTokens ?? 2048,
32
+ temperature: request.temperature ?? 0.3,
33
+ system: request.systemPrompt,
34
+ messages: [{ role: 'user', content: request.userPrompt }],
35
+ });
36
+ const content = response.content
37
+ .map((block) => block.text ?? '')
38
+ .join('');
39
+ return {
40
+ content,
41
+ finishReason: response.stop_reason === 'end_turn' ? 'stop' : 'length',
42
+ usage: {
43
+ promptTokens: response.usage?.input_tokens ?? 0,
44
+ completionTokens: response.usage?.output_tokens ?? 0,
45
+ },
46
+ };
47
+ }
48
+ catch (error) {
49
+ const message = error instanceof Error ? error.message : String(error);
50
+ return { content: `Error: ${message}`, finishReason: 'error' };
51
+ }
52
+ }
53
+ }
54
+ //# sourceMappingURL=anthropic.provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic.provider.js","sourceRoot":"","sources":["../../src/ai/anthropic.provider.ts"],"names":[],"mappings":"AAEA,+EAA+E;AAC/E,mCAAmC;AACnC,+EAA+E;AAE/E,MAAM,OAAO,iBAAiB;IACnB,IAAI,GAAG,WAAW,CAAC;IACpB,MAAM,GAAQ,IAAI,CAAC;IAE3B;QACE,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC;QACvF,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CAAC;gBACH,uCAAuC;gBACvC,iEAAiE;gBACjE,MAAM,SAAS,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;gBAC/C,IAAI,CAAC,MAAM,GAAG,IAAI,SAAS,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;YAClD,CAAC;YAAC,MAAM,CAAC;gBACP,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;YACrB,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,OAA4B;QAC7C,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC;QAChD,CAAC;QAED,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;gBACjD,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,0BAA0B;gBAClD,UAAU,EAAE,OAAO,CAAC,SAAS,IAAI,IAAI;gBACrC,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,GAAG;gBACvC,MAAM,EAAE,OAAO,CAAC,YAAY;gBAC5B,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC;aAC1D,CAAC,CAAC;YAEH,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO;iBAC7B,GAAG,CAAC,CAAC,KAAU,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC;iBACrC,IAAI,CAAC,EAAE,CAAC,CAAC;YAEZ,OAAO;gBACL,OAAO;gBACP,YAAY,EAAE,QAAQ,CAAC,WAAW,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ;gBACrE,KAAK,EAAE;oBACL,YAAY,EAAE,QAAQ,CAAC,KAAK,EAAE,YAAY,IAAI,CAAC;oBAC/C,gBAAgB,EAAE,QAAQ,CAAC,KAAK,EAAE,aAAa,IAAI,CAAC;iBACrD;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,OAAO,EAAE,OAAO,EAAE,UAAU,OAAO,EAAE,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC;QACjE,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,9 @@
1
+ import type { IAIProvider, AIGenerationRequest, AIGenerationResponse } from '../core/types.js';
2
+ export declare class OpenAIProvider implements IAIProvider {
3
+ readonly name = "openai";
4
+ private client;
5
+ constructor();
6
+ get available(): boolean;
7
+ generateText(request: AIGenerationRequest): Promise<AIGenerationResponse>;
8
+ }
9
+ //# sourceMappingURL=openai.provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.provider.d.ts","sourceRoot":"","sources":["../../src/ai/openai.provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAM/F,qBAAa,cAAe,YAAW,WAAW;IAChD,QAAQ,CAAC,IAAI,YAAY;IACzB,OAAO,CAAC,MAAM,CAAa;;IAe3B,IAAI,SAAS,IAAI,OAAO,CAEvB;IAEK,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC;CA+BhF"}
@@ -0,0 +1,53 @@
1
+ // ============================================================================
2
+ // DocPilot — OpenAI AI Provider
3
+ // ============================================================================
4
+ export class OpenAIProvider {
5
+ name = 'openai';
6
+ client = null;
7
+ constructor() {
8
+ const apiKey = process.env.OPENAI_API_KEY ?? process.env.DOCPILOT_OPENAI_API_KEY;
9
+ if (apiKey) {
10
+ try {
11
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
12
+ const OpenAI = require('openai');
13
+ this.client = new OpenAI.default({ apiKey });
14
+ }
15
+ catch {
16
+ this.client = null;
17
+ }
18
+ }
19
+ }
20
+ get available() {
21
+ return this.client !== null;
22
+ }
23
+ async generateText(request) {
24
+ if (!this.client) {
25
+ return { content: '', finishReason: 'error' };
26
+ }
27
+ try {
28
+ const response = await this.client.chat.completions.create({
29
+ model: request.model ?? 'gpt-4o',
30
+ max_tokens: request.maxTokens ?? 2048,
31
+ temperature: request.temperature ?? 0.3,
32
+ messages: [
33
+ { role: 'system', content: request.systemPrompt },
34
+ { role: 'user', content: request.userPrompt },
35
+ ],
36
+ });
37
+ const content = response.choices[0]?.message?.content ?? '';
38
+ return {
39
+ content,
40
+ finishReason: response.choices[0]?.finish_reason === 'stop' ? 'stop' : 'length',
41
+ usage: {
42
+ promptTokens: response.usage?.prompt_tokens ?? 0,
43
+ completionTokens: response.usage?.completion_tokens ?? 0,
44
+ },
45
+ };
46
+ }
47
+ catch (error) {
48
+ const message = error instanceof Error ? error.message : String(error);
49
+ return { content: `Error: ${message}`, finishReason: 'error' };
50
+ }
51
+ }
52
+ }
53
+ //# sourceMappingURL=openai.provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.provider.js","sourceRoot":"","sources":["../../src/ai/openai.provider.ts"],"names":[],"mappings":"AAEA,+EAA+E;AAC/E,gCAAgC;AAChC,+EAA+E;AAE/E,MAAM,OAAO,cAAc;IAChB,IAAI,GAAG,QAAQ,CAAC;IACjB,MAAM,GAAQ,IAAI,CAAC;IAE3B;QACE,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;QACjF,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CAAC;gBACH,iEAAiE;gBACjE,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;gBACjC,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;YAC/C,CAAC;YAAC,MAAM,CAAC;gBACP,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;YACrB,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,OAA4B;QAC7C,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC;QAChD,CAAC;QAED,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;gBACzD,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,QAAQ;gBAChC,UAAU,EAAE,OAAO,CAAC,SAAS,IAAI,IAAI;gBACrC,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,GAAG;gBACvC,QAAQ,EAAE;oBACR,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,YAAY,EAAE;oBACjD,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,UAAU,EAAE;iBAC9C;aACF,CAAC,CAAC;YAEH,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,IAAI,EAAE,CAAC;YAE5D,OAAO;gBACL,OAAO;gBACP,YAAY,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,aAAa,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ;gBAC/E,KAAK,EAAE;oBACL,YAAY,EAAE,QAAQ,CAAC,KAAK,EAAE,aAAa,IAAI,CAAC;oBAChD,gBAAgB,EAAE,QAAQ,CAAC,KAAK,EAAE,iBAAiB,IAAI,CAAC;iBACzD;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,OAAO,EAAE,OAAO,EAAE,UAAU,OAAO,EAAE,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC;QACjE,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,4 @@
1
+ export declare const SYSTEM_PROMPTS: Record<string, string>;
2
+ export declare function buildUserPrompt(sectionId: string, projectData: Record<string, unknown>): string;
3
+ export declare function buildFallbackContent(sectionId: string, projectData: Record<string, any>): string;
4
+ //# sourceMappingURL=prompts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/ai/prompts.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CA0BjD,CAAC;AAEF,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAU/F;AAED,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC/B,MAAM,CAuBR"}
@@ -0,0 +1,199 @@
1
+ // ============================================================================
2
+ // DocPilot — AI Prompt Templates
3
+ // ============================================================================
4
+ export const SYSTEM_PROMPTS = {
5
+ overview: `You are a technical documentation expert. Write a clear, concise project overview for a README file.
6
+ Focus on: what the project does, who it's for, the key problem it solves.
7
+ Keep it to 2-4 paragraphs. Use markdown. Be specific — avoid marketing fluff.`,
8
+ features: `List the 5-10 most important features of this project as a bulleted list.
9
+ Be specific and technical ("RESTful API with JWT authentication" not "Secure API").
10
+ Base every feature claim on evidence in the project data provided.`,
11
+ techStack: `Generate a clean technology stack table with columns: Technology, Purpose.
12
+ Group by category (Frontend, Backend, Database, DevOps, Testing, etc.).`,
13
+ installation: `Write clear installation instructions for developers.
14
+ Include: prerequisites, environment setup, install command, and a basic "getting started" example.
15
+ Assume the reader is a developer familiar with the tech stack.`,
16
+ contributing: `Write a brief contributing guide covering:
17
+ - How to set up the dev environment
18
+ - How to run tests
19
+ - Coding standards
20
+ - Pull request process
21
+ Keep it friendly and encouraging.`,
22
+ apiReference: `Generate an API reference section from the provided route data.
23
+ For each endpoint include: HTTP method, path, authentication requirements, description.
24
+ Use a clean markdown table format.`,
25
+ };
26
+ export function buildUserPrompt(sectionId, projectData) {
27
+ const dataStr = JSON.stringify(projectData, null, 2);
28
+ return `Generate the "${sectionId}" section for a README file.
29
+
30
+ Project Data:
31
+ \`\`\`json
32
+ ${dataStr}
33
+ \`\`\`
34
+
35
+ Generate clean markdown content for this section only. Do not include the section heading — just the body content.`;
36
+ }
37
+ export function buildFallbackContent(sectionId, projectData) {
38
+ switch (sectionId) {
39
+ case 'overview':
40
+ return buildFallbackOverview(projectData);
41
+ case 'features':
42
+ return buildFallbackFeatures(projectData);
43
+ case 'tech-stack':
44
+ return buildFallbackTechStack(projectData);
45
+ case 'installation':
46
+ return buildFallbackInstallation(projectData);
47
+ case 'folder-structure':
48
+ return buildFallbackFolderStructure(projectData);
49
+ case 'scripts':
50
+ return buildFallbackScripts(projectData);
51
+ case 'env-vars':
52
+ return buildFallbackEnvVars(projectData);
53
+ case 'contributing':
54
+ return `1. Fork the repository\n2. Create your feature branch (\`git checkout -b feature/amazing-feature\`)\n3. Commit your changes (\`git commit -m 'Add amazing feature'\`)\n4. Push to the branch (\`git push origin feature/amazing-feature\`)\n5. Open a Pull Request`;
55
+ case 'license':
56
+ return `This project is licensed under the MIT License - see the LICENSE file for details.`;
57
+ default:
58
+ return `Content for ${sectionId} is being generated.`;
59
+ }
60
+ }
61
+ function buildFallbackOverview(data) {
62
+ const pkg = data.packageJson ?? {};
63
+ const name = pkg.name || data.projectName || 'My Project';
64
+ const desc = pkg.description || '';
65
+ const frameworks = (data.frameworks ?? []);
66
+ const mainTechs = frameworks
67
+ .filter((f) => !['testing', 'linting', 'bundler', 'monitoring'].includes(f.category))
68
+ .map((f) => f.name);
69
+ const techs = mainTechs.length > 0 ? mainTechs.join(', ') : 'modern tooling';
70
+ let overview = `**${name}** is a modern software project`;
71
+ if (desc)
72
+ overview += ` that ${desc}`;
73
+ if (mainTechs.length > 0)
74
+ overview += ` built with ${techs}.`;
75
+ else
76
+ overview += '.';
77
+ overview += '\n\nThis README provides an overview of the project architecture, setup instructions, and available commands.';
78
+ return overview;
79
+ }
80
+ function buildFallbackFeatures(data) {
81
+ const features = [];
82
+ const frameworks = (data.frameworks ?? []);
83
+ if (frameworks.some((f) => f.category === 'meta-framework')) {
84
+ features.push('Server-side rendering and static site generation');
85
+ }
86
+ if (frameworks.some((f) => f.name === 'Express' || f.name === 'Fastify')) {
87
+ features.push('RESTful API with middleware support');
88
+ }
89
+ if (frameworks.some((f) => f.category === 'database')) {
90
+ features.push('Database integration with type-safe queries');
91
+ }
92
+ if (frameworks.some((f) => f.category === 'orm')) {
93
+ features.push('Type-safe database ORM with migrations');
94
+ }
95
+ if (frameworks.some((f) => f.category === 'auth')) {
96
+ features.push('Authentication and authorization');
97
+ }
98
+ if (frameworks.some((f) => f.category === 'payments')) {
99
+ features.push('Payment processing integration');
100
+ }
101
+ if (frameworks.some((f) => f.category === 'testing')) {
102
+ features.push('Comprehensive test suite');
103
+ }
104
+ if (frameworks.some((f) => f.category === 'ci-cd')) {
105
+ features.push('Continuous integration and deployment');
106
+ }
107
+ if (features.length === 0) {
108
+ features.push('Modular architecture for easy extensibility');
109
+ features.push('TypeScript for type safety and developer experience');
110
+ }
111
+ return features.map(f => `- **${f}**`).join('\n');
112
+ }
113
+ function buildFallbackTechStack(data) {
114
+ const frameworks = (data.frameworks ?? []);
115
+ if (frameworks.length === 0)
116
+ return 'No technologies detected.';
117
+ const groups = {};
118
+ for (const fw of frameworks) {
119
+ const cat = fw.category || 'other';
120
+ if (!groups[cat])
121
+ groups[cat] = [];
122
+ groups[cat].push({ name: fw.name, version: fw.version });
123
+ }
124
+ const categoryLabels = {
125
+ 'meta-framework': 'Framework',
126
+ 'frontend-framework': 'Frontend',
127
+ 'backend-framework': 'Backend',
128
+ 'database': 'Database',
129
+ 'orm': 'ORM',
130
+ 'auth': 'Authentication',
131
+ 'payments': 'Payments',
132
+ 'styling': 'Styling',
133
+ 'css-framework': 'CSS Framework',
134
+ 'ui-library': 'UI Library',
135
+ 'state-management': 'State Management',
136
+ 'testing': 'Testing',
137
+ 'linting': 'Linting / Formatting',
138
+ 'bundler': 'Bundler',
139
+ 'runtime': 'Runtime',
140
+ 'cloud': 'Cloud / Infrastructure',
141
+ 'ci-cd': 'CI / CD',
142
+ 'monitoring': 'Monitoring',
143
+ 'messaging': 'Messaging / Queues',
144
+ };
145
+ const table = ['| Technology | Category | Version |', '|------------|----------|---------|'];
146
+ for (const [cat, items] of Object.entries(groups)) {
147
+ for (const item of items) {
148
+ table.push(`| ${item.name} | ${categoryLabels[cat] || cat} | ${item.version || '-'} |`);
149
+ }
150
+ }
151
+ return table.join('\n');
152
+ }
153
+ function buildFallbackInstallation(data) {
154
+ const pkg = data.packageJson ?? {};
155
+ const hasLock = data.lockFiles ?? {};
156
+ const pm = hasLock?.yarn ? 'yarn' : hasLock?.pnpm ? 'pnpm' : 'npm';
157
+ const hasScripts = pkg.scripts && Object.keys(pkg.scripts).length > 0;
158
+ let install = '';
159
+ if (data.frameworks?.some((f) => f.name === 'Node.js') || pkg.dependencies) {
160
+ install += `### Prerequisites\n\n- Node.js >= 18.0.0\n- ${pm === 'npm' ? 'npm' : pm} (package manager)\n\n### Setup\n\n1. Clone the repository\n \`\`\`bash\n git clone <repository-url>\n cd ${pkg.name || 'project'}\n \`\`\`\n\n2. Install dependencies\n \`\`\`bash\n ${pm} install\n \`\`\`\n\n3. Copy environment variables\n \`\`\`bash\n cp .env.example .env\n \`\`\`\n`;
161
+ }
162
+ else {
163
+ install += '```bash\n# Installation steps\n```';
164
+ }
165
+ if (hasScripts) {
166
+ install += '\n### Quick Start\n\n```bash\n';
167
+ if (pkg.scripts?.dev)
168
+ install += `${pm} run dev\n`;
169
+ else if (pkg.scripts?.start)
170
+ install += `${pm} start\n`;
171
+ install += '```\n';
172
+ }
173
+ return install;
174
+ }
175
+ function buildFallbackScripts(data) {
176
+ const scripts = (data.scripts ?? []);
177
+ if (scripts.length === 0)
178
+ return 'No scripts available.';
179
+ const table = ['| Command | Description |', '|---------|-------------|'];
180
+ for (const s of scripts) {
181
+ const desc = s.description || s.command;
182
+ table.push(`| \`${s.name}\` | ${desc} |`);
183
+ }
184
+ return table.join('\n');
185
+ }
186
+ function buildFallbackEnvVars(data) {
187
+ const envVars = (data.envVars ?? []);
188
+ if (envVars.length === 0)
189
+ return 'No environment variables detected.';
190
+ const table = ['| Variable | Description | Required |', '|----------|-------------|----------|'];
191
+ for (const ev of envVars) {
192
+ table.push(`| \`${ev.name}\` | ${ev.description || '-'} | ${ev.required ? 'Yes' : 'No'} |`);
193
+ }
194
+ return table.join('\n');
195
+ }
196
+ function buildFallbackFolderStructure(data) {
197
+ return '```\n' + (data.folderTreeSyntax || 'Project structure not available') + '\n```';
198
+ }
199
+ //# sourceMappingURL=prompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/ai/prompts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { IAIProvider } from '../core/types.js';
2
+ export { type IAIProvider, type AIGenerationRequest, type AIGenerationResponse } from '../core/types.js';
3
+ export declare function resolveAIProvider(): Promise<IAIProvider | null>;
4
+ //# sourceMappingURL=provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/ai/provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAA6C,MAAM,kBAAkB,CAAC;AAM/F,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,mBAAmB,EAAE,KAAK,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAEzG,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAWrE"}
@@ -0,0 +1,13 @@
1
+ export async function resolveAIProvider() {
2
+ // Try AI providers in order of preference
3
+ const { AnthropicProvider } = await import('./anthropic.provider.js');
4
+ const anthropic = new AnthropicProvider();
5
+ if (anthropic.available)
6
+ return anthropic;
7
+ const { OpenAIProvider } = await import('./openai.provider.js');
8
+ const openai = new OpenAIProvider();
9
+ if (openai.available)
10
+ return openai;
11
+ return null;
12
+ }
13
+ //# sourceMappingURL=provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/ai/provider.ts"],"names":[],"mappings":"AAQA,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,0CAA0C;IAC1C,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAC;IACtE,MAAM,SAAS,GAAG,IAAI,iBAAiB,EAAE,CAAC;IAC1C,IAAI,SAAS,CAAC,SAAS;QAAE,OAAO,SAAS,CAAC;IAE1C,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;IAChE,MAAM,MAAM,GAAG,IAAI,cAAc,EAAE,CAAC;IACpC,IAAI,MAAM,CAAC,SAAS;QAAE,OAAO,MAAM,CAAC;IAEpC,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { IAIProvider, AIGenerationRequest, AIGenerationResponse } from '../core/types.js';
2
+ export declare class TemplateProvider implements IAIProvider {
3
+ readonly name = "template";
4
+ readonly available = true;
5
+ generateText(request: AIGenerationRequest): Promise<AIGenerationResponse>;
6
+ }
7
+ //# sourceMappingURL=template.provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template.provider.d.ts","sourceRoot":"","sources":["../../src/ai/template.provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAQ/F,qBAAa,gBAAiB,YAAW,WAAW;IAClD,QAAQ,CAAC,IAAI,cAAc;IAC3B,QAAQ,CAAC,SAAS,QAAQ;IAEpB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC;CAUhF"}
@@ -0,0 +1,19 @@
1
+ // ============================================================================
2
+ // DocPilot — Template-Based Fallback Provider
3
+ // ============================================================================
4
+ // Always available, no API key needed. Generates content from templates.
5
+ // The userPrompt serves as a section identifier.
6
+ export class TemplateProvider {
7
+ name = 'template';
8
+ available = true;
9
+ async generateText(request) {
10
+ // In a full implementation, this would load Handlebars templates
11
+ // For now, we return the system prompt as a reasonable fallback
12
+ const content = request.systemPrompt || request.userPrompt || '';
13
+ return {
14
+ content,
15
+ finishReason: 'stop',
16
+ };
17
+ }
18
+ }
19
+ //# sourceMappingURL=template.provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template.provider.js","sourceRoot":"","sources":["../../src/ai/template.provider.ts"],"names":[],"mappings":"AAEA,+EAA+E;AAC/E,8CAA8C;AAC9C,+EAA+E;AAC/E,yEAAyE;AACzE,iDAAiD;AAEjD,MAAM,OAAO,gBAAgB;IAClB,IAAI,GAAG,UAAU,CAAC;IAClB,SAAS,GAAG,IAAI,CAAC;IAE1B,KAAK,CAAC,YAAY,CAAC,OAA4B;QAC7C,iEAAiE;QACjE,gEAAgE;QAChE,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,UAAU,IAAI,EAAE,CAAC;QAEjE,OAAO;YACL,OAAO;YACP,YAAY,EAAE,MAAM;SACrB,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from 'commander';
2
+ export declare function registerChangelogCommand(program: Command): void;
3
+ //# sourceMappingURL=changelog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"changelog.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/changelog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUzC,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAiC/D"}