@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
@@ -0,0 +1,30 @@
1
+ export async function generateDeployment(context, _projectCtx) {
2
+ const { scanResult } = context;
3
+ const parts = [];
4
+ if (scanResult.docker) {
5
+ parts.push('### Docker\n\n```bash\ndocker build -t my-app .\ndocker run -p 3000:3000 my-app\n```');
6
+ }
7
+ if (scanResult.ci) {
8
+ parts.push(`### CI/CD\n\nThis project uses **${scanResult.ci.provider}** for continuous integration.`);
9
+ }
10
+ const cloudMapping = {
11
+ Vercel: '### Deploy to Vercel\n\n[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new)',
12
+ Netlify: '### Deploy to Netlify\n\n[![Deploy to Netlify](https://www.netlify.com/img/deploy/button.svg)](https://app.netlify.com/start)',
13
+ };
14
+ for (const fw of scanResult.frameworks) {
15
+ const name = fw.name;
16
+ if (name && cloudMapping[name]) {
17
+ const content = cloudMapping[name];
18
+ if (content)
19
+ parts.push(content);
20
+ }
21
+ }
22
+ const content = parts.length > 0 ? parts.join('\n\n') : 'Deployment instructions not yet configured.';
23
+ return {
24
+ id: 'deployment',
25
+ title: 'Deployment',
26
+ content,
27
+ order: 90,
28
+ };
29
+ }
30
+ //# sourceMappingURL=deployment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deployment.js","sourceRoot":"","sources":["../../../src/generators/sections/deployment.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,OAAuB,EACvB,WAAgB;IAEhB,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;IAC/B,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;QACtB,KAAK,CAAC,IAAI,CAAC,sFAAsF,CAAC,CAAC;IACrG,CAAC;IAED,IAAI,UAAU,CAAC,EAAE,EAAE,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC,oCAAoC,UAAU,CAAC,EAAE,CAAC,QAAQ,gCAAgC,CAAC,CAAC;IACzG,CAAC;IAED,MAAM,YAAY,GAA2B;QAC3C,MAAM,EAAE,oGAAoG;QAC5G,OAAO,EAAE,+HAA+H;KACzI,CAAC;IAEF,KAAK,MAAM,EAAE,IAAI,UAAU,CAAC,UAAU,EAAE,CAAC;QACvC,MAAM,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC;QACrB,IAAI,IAAI,IAAI,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/B,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;YACnC,IAAI,OAAO;gBAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,6CAA6C,CAAC;IAEtG,OAAO;QACL,EAAE,EAAE,YAAY;QAChB,KAAK,EAAE,YAAY;QACnB,OAAO;QACP,KAAK,EAAE,EAAE;KACV,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { SectionContext, SectionResult } from './types.js';
2
+ export declare function generateEnvVars(context: SectionContext, _projectCtx: any): Promise<SectionResult>;
3
+ //# sourceMappingURL=env-vars.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-vars.d.ts","sourceRoot":"","sources":["../../../src/generators/sections/env-vars.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAGhE,wBAAsB,eAAe,CACnC,OAAO,EAAE,cAAc,EACvB,WAAW,EAAE,GAAG,GACf,OAAO,CAAC,aAAa,CAAC,CAgBxB"}
@@ -0,0 +1,18 @@
1
+ import { buildFallbackContent } from '../../ai/prompts.js';
2
+ export async function generateEnvVars(context, _projectCtx) {
3
+ const envVars = context.scanResult.envVars;
4
+ let content;
5
+ if (envVars.length > 0) {
6
+ content = buildFallbackContent('env-vars', { envVars });
7
+ }
8
+ else {
9
+ content = 'No environment variables detected.';
10
+ }
11
+ return {
12
+ id: 'env-vars',
13
+ title: 'Environment Variables',
14
+ content,
15
+ order: 70,
16
+ };
17
+ }
18
+ //# sourceMappingURL=env-vars.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-vars.js","sourceRoot":"","sources":["../../../src/generators/sections/env-vars.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAE3D,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,OAAuB,EACvB,WAAgB;IAEhB,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC;IAC3C,IAAI,OAAe,CAAC;IAEpB,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,GAAG,oBAAoB,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IAC1D,CAAC;SAAM,CAAC;QACN,OAAO,GAAG,oCAAoC,CAAC;IACjD,CAAC;IAED,OAAO;QACL,EAAE,EAAE,UAAU;QACd,KAAK,EAAE,uBAAuB;QAC9B,OAAO;QACP,KAAK,EAAE,EAAE;KACV,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { ProjectContext } from '../../core/types.js';
2
+ import type { SectionContext, SectionResult } from './types.js';
3
+ export declare function generateFeatures(context: SectionContext, _projectCtx: ProjectContext): Promise<SectionResult>;
4
+ //# sourceMappingURL=features.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features.d.ts","sourceRoot":"","sources":["../../../src/generators/sections/features.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAe,MAAM,qBAAqB,CAAC;AAEvE,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhE,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,cAAc,EACvB,WAAW,EAAE,cAAc,GAC1B,OAAO,CAAC,aAAa,CAAC,CAkCxB"}
@@ -0,0 +1,34 @@
1
+ import { buildUserPrompt, SYSTEM_PROMPTS, buildFallbackContent } from '../../ai/prompts.js';
2
+ export async function generateFeatures(context, _projectCtx) {
3
+ const { scanResult, aiProvider } = context;
4
+ const frameworks = scanResult.frameworks;
5
+ let content;
6
+ if (aiProvider?.available) {
7
+ const data = {
8
+ frameworks: frameworks.map(f => ({ name: f.name, category: f.category, version: f.version })),
9
+ envVars: scanResult.envVars.length,
10
+ routes: scanResult.routes.length,
11
+ scripts: scanResult.scripts.length,
12
+ gitInfo: scanResult.git ? {
13
+ totalCommits: scanResult.git.totalCommits,
14
+ contributors: scanResult.git.contributors.length,
15
+ } : null,
16
+ };
17
+ const response = await aiProvider.generateText({
18
+ systemPrompt: SYSTEM_PROMPTS.features ?? '',
19
+ userPrompt: buildUserPrompt('features', data),
20
+ temperature: 0.4,
21
+ });
22
+ content = response.content;
23
+ }
24
+ else {
25
+ content = buildFallbackContent('features', { frameworks });
26
+ }
27
+ return {
28
+ id: 'features',
29
+ title: 'Features',
30
+ content,
31
+ order: 20,
32
+ };
33
+ }
34
+ //# sourceMappingURL=features.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features.js","sourceRoot":"","sources":["../../../src/generators/sections/features.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAG5F,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,OAAuB,EACvB,WAA2B;IAE3B,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;IAC3C,MAAM,UAAU,GAAG,UAAU,CAAC,UAAU,CAAC;IAEzC,IAAI,OAAe,CAAC;IAEpB,IAAI,UAAU,EAAE,SAAS,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAG;YACX,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YAC7F,OAAO,EAAE,UAAU,CAAC,OAAO,CAAC,MAAM;YAClC,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,MAAM;YAChC,OAAO,EAAE,UAAU,CAAC,OAAO,CAAC,MAAM;YAClC,OAAO,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;gBACxB,YAAY,EAAE,UAAU,CAAC,GAAG,CAAC,YAAY;gBACzC,YAAY,EAAE,UAAU,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM;aACjD,CAAC,CAAC,CAAC,IAAI;SACT,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,YAAY,CAAC;YAC7C,YAAY,EAAE,cAAc,CAAC,QAAQ,IAAI,EAAE;YAC3C,UAAU,EAAE,eAAe,CAAC,UAAU,EAAE,IAA0C,CAAC;YACnF,WAAW,EAAE,GAAG;SACjB,CAAC,CAAC;QACH,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;IAC7B,CAAC;SAAM,CAAC;QACN,OAAO,GAAG,oBAAoB,CAAC,UAAU,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED,OAAO;QACL,EAAE,EAAE,UAAU;QACd,KAAK,EAAE,UAAU;QACjB,OAAO;QACP,KAAK,EAAE,EAAE;KACV,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { SectionContext, SectionResult } from './types.js';
2
+ export declare function generateFolderTree(context: SectionContext, _projectCtx: any): Promise<SectionResult>;
3
+ //# sourceMappingURL=folder-tree.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"folder-tree.d.ts","sourceRoot":"","sources":["../../../src/generators/sections/folder-tree.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhE,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,cAAc,EACvB,WAAW,EAAE,GAAG,GACf,OAAO,CAAC,aAAa,CAAC,CAiBxB"}
@@ -0,0 +1,43 @@
1
+ export async function generateFolderTree(context, _projectCtx) {
2
+ const tree = context.scanResult.folderTree;
3
+ let content;
4
+ if (tree) {
5
+ const lines = renderTree(tree);
6
+ content = '```\n' + lines.join('\n') + '\n```';
7
+ }
8
+ else {
9
+ content = 'Project structure not available.';
10
+ }
11
+ return {
12
+ id: 'folder-structure',
13
+ title: 'Folder Structure',
14
+ content,
15
+ order: 50,
16
+ };
17
+ }
18
+ function renderTree(node, prefix = '', isLast = true) {
19
+ const connector = isLast ? '└── ' : '├── ';
20
+ const result = [];
21
+ if (prefix === '') {
22
+ result.push(node.name + '/');
23
+ }
24
+ const children = node.children ?? [];
25
+ const visibleChildren = children.slice(0, 50);
26
+ for (let i = 0; i < visibleChildren.length; i++) {
27
+ const child = visibleChildren[i];
28
+ const last = i === visibleChildren.length - 1;
29
+ const childPrefix = prefix + (isLast && prefix !== '' ? ' ' : '│ ');
30
+ if (child.type === 'directory') {
31
+ result.push(childPrefix + (last ? '└── ' : '├── ') + child.name + '/');
32
+ if (child.children) {
33
+ const subLines = renderTree(child, childPrefix, last);
34
+ result.push(...subLines.slice(1));
35
+ }
36
+ }
37
+ else {
38
+ result.push(childPrefix + (last ? '└── ' : '├── ') + child.name);
39
+ }
40
+ }
41
+ return result;
42
+ }
43
+ //# sourceMappingURL=folder-tree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"folder-tree.js","sourceRoot":"","sources":["../../../src/generators/sections/folder-tree.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,OAAuB,EACvB,WAAgB;IAEhB,MAAM,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC;IAC3C,IAAI,OAAe,CAAC;IAEpB,IAAI,IAAI,EAAE,CAAC;QACT,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;QAC/B,OAAO,GAAG,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC;IACjD,CAAC;SAAM,CAAC;QACN,OAAO,GAAG,kCAAkC,CAAC;IAC/C,CAAC;IAED,OAAO;QACL,EAAE,EAAE,kBAAkB;QACtB,KAAK,EAAE,kBAAkB;QACzB,OAAO;QACP,KAAK,EAAE,EAAE;KACV,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CACjB,IAA0G,EAC1G,MAAM,GAAG,EAAE,EACX,MAAM,GAAG,IAAI;IAEb,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;IAC3C,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,IAAI,MAAM,KAAK,EAAE,EAAE,CAAC;QAClB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC;IAC/B,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC;IACrC,MAAM,eAAe,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAE9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAChD,MAAM,KAAK,GAAG,eAAe,CAAC,CAAC,CAAE,CAAC;QAClC,MAAM,IAAI,GAAG,CAAC,KAAK,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC;QAC9C,MAAM,WAAW,GAAG,MAAM,GAAG,CAAC,MAAM,IAAI,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAEzE,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC/B,MAAM,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC;YACvE,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACnB,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAY,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;gBAC7D,MAAM,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACpC,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { ProjectContext } from '../../core/types.js';
2
+ import type { SectionContext, SectionResult } from './types.js';
3
+ export declare function generateInstallation(context: SectionContext, _projectCtx: ProjectContext): Promise<SectionResult>;
4
+ //# sourceMappingURL=installation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"installation.d.ts","sourceRoot":"","sources":["../../../src/generators/sections/installation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAe,MAAM,qBAAqB,CAAC;AAEvE,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhE,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,cAAc,EACvB,WAAW,EAAE,cAAc,GAC1B,OAAO,CAAC,aAAa,CAAC,CAiCxB"}
@@ -0,0 +1,33 @@
1
+ import { buildUserPrompt, SYSTEM_PROMPTS, buildFallbackContent } from '../../ai/prompts.js';
2
+ export async function generateInstallation(context, _projectCtx) {
3
+ const { scanResult, aiProvider, config } = context;
4
+ let content;
5
+ if (aiProvider?.available) {
6
+ const data = {
7
+ packageManager: 'npm', // detect from lock files
8
+ scripts: scanResult.scripts.map(s => ({ name: s.name, command: s.command })),
9
+ frameworks: scanResult.frameworks.map(f => f.name),
10
+ envVars: scanResult.envVars.map(e => e.name),
11
+ };
12
+ const response = await aiProvider.generateText({
13
+ systemPrompt: SYSTEM_PROMPTS.installation ?? '',
14
+ userPrompt: buildUserPrompt('installation', data),
15
+ temperature: 0.2,
16
+ });
17
+ content = response.content;
18
+ }
19
+ else {
20
+ content = buildFallbackContent('installation', {
21
+ packageJson: config.project,
22
+ lockFiles: { npm: true },
23
+ frameworks: scanResult.frameworks,
24
+ });
25
+ }
26
+ return {
27
+ id: 'installation',
28
+ title: 'Installation',
29
+ content,
30
+ order: 40,
31
+ };
32
+ }
33
+ //# sourceMappingURL=installation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"installation.js","sourceRoot":"","sources":["../../../src/generators/sections/installation.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAG5F,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,OAAuB,EACvB,WAA2B;IAE3B,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAEnD,IAAI,OAAe,CAAC;IAEpB,IAAI,UAAU,EAAE,SAAS,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAG;YACX,cAAc,EAAE,KAAK,EAAE,yBAAyB;YAChD,OAAO,EAAE,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YAC5E,UAAU,EAAE,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YAClD,OAAO,EAAE,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;SAC7C,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,YAAY,CAAC;YAC7C,YAAY,EAAE,cAAc,CAAC,YAAY,IAAI,EAAE;YAC/C,UAAU,EAAE,eAAe,CAAC,cAAc,EAAE,IAA0C,CAAC;YACvF,WAAW,EAAE,GAAG;SACjB,CAAC,CAAC;QACH,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;IAC7B,CAAC;SAAM,CAAC;QACN,OAAO,GAAG,oBAAoB,CAAC,cAAc,EAAE;YAC7C,WAAW,EAAE,MAAM,CAAC,OAAO;YAC3B,SAAS,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE;YACxB,UAAU,EAAE,UAAU,CAAC,UAAU;SAClC,CAAC,CAAC;IACL,CAAC;IAED,OAAO;QACL,EAAE,EAAE,cAAc;QAClB,KAAK,EAAE,cAAc;QACrB,OAAO;QACP,KAAK,EAAE,EAAE;KACV,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { SectionContext, SectionResult } from './types.js';
2
+ export declare function generateLicense(context: SectionContext, _projectCtx: any): Promise<SectionResult>;
3
+ //# sourceMappingURL=license.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"license.d.ts","sourceRoot":"","sources":["../../../src/generators/sections/license.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAGhE,wBAAsB,eAAe,CACnC,OAAO,EAAE,cAAc,EACvB,WAAW,EAAE,GAAG,GACf,OAAO,CAAC,aAAa,CAAC,CAYxB"}
@@ -0,0 +1,13 @@
1
+ import { buildFallbackContent } from '../../ai/prompts.js';
2
+ export async function generateLicense(context, _projectCtx) {
3
+ const license = context.scanResult.dependencies; // Not ideal, let's check config
4
+ const licenseType = context.config?.project?.license || 'MIT';
5
+ const content = buildFallbackContent('license', { license: licenseType });
6
+ return {
7
+ id: 'license',
8
+ title: 'License',
9
+ content,
10
+ order: 110,
11
+ };
12
+ }
13
+ //# sourceMappingURL=license.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"license.js","sourceRoot":"","sources":["../../../src/generators/sections/license.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAE3D,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,OAAuB,EACvB,WAAgB;IAEhB,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,gCAAgC;IACjF,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,IAAI,KAAK,CAAC;IAE9D,MAAM,OAAO,GAAG,oBAAoB,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;IAE1E,OAAO;QACL,EAAE,EAAE,SAAS;QACb,KAAK,EAAE,SAAS;QAChB,OAAO;QACP,KAAK,EAAE,GAAG;KACX,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { ProjectContext } from '../../core/types.js';
2
+ import type { SectionContext, SectionResult } from './types.js';
3
+ export declare function generateOverview(context: SectionContext, projectCtx: ProjectContext): Promise<SectionResult>;
4
+ //# sourceMappingURL=overview.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overview.d.ts","sourceRoot":"","sources":["../../../src/generators/sections/overview.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAqC,MAAM,qBAAqB,CAAC;AAE7F,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhE,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,cAAc,EACvB,UAAU,EAAE,cAAc,GACzB,OAAO,CAAC,aAAa,CAAC,CAwCxB"}
@@ -0,0 +1,39 @@
1
+ import { buildUserPrompt, SYSTEM_PROMPTS, buildFallbackContent } from '../../ai/prompts.js';
2
+ export async function generateOverview(context, projectCtx) {
3
+ const { scanResult, aiProvider, config } = context;
4
+ const pkg = scanResult.dependencies;
5
+ const frameworks = scanResult.frameworks;
6
+ const projectName = config.project?.name || projectCtx.packageJson?.name || scanResult.projectType || 'My Project';
7
+ const projectDesc = config.project?.description || projectCtx.packageJson?.description || '';
8
+ let content;
9
+ if (aiProvider?.available) {
10
+ const data = {
11
+ projectName,
12
+ description: projectDesc,
13
+ frameworks: frameworks.map(f => ({ name: f.name, category: f.category })),
14
+ totalDeps: pkg.production.length + pkg.development.length,
15
+ scripts: scanResult.scripts.length,
16
+ };
17
+ const response = await aiProvider.generateText({
18
+ systemPrompt: SYSTEM_PROMPTS.overview ?? '',
19
+ userPrompt: buildUserPrompt('overview', data),
20
+ temperature: 0.3,
21
+ });
22
+ content = response.content;
23
+ }
24
+ else {
25
+ content = buildFallbackContent('overview', {
26
+ projectName,
27
+ projectDescription: projectDesc,
28
+ frameworks,
29
+ packageJson: { name: projectName, description: projectDesc },
30
+ });
31
+ }
32
+ return {
33
+ id: 'overview',
34
+ title: 'Overview',
35
+ content,
36
+ order: 10,
37
+ };
38
+ }
39
+ //# sourceMappingURL=overview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overview.js","sourceRoot":"","sources":["../../../src/generators/sections/overview.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAG5F,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,OAAuB,EACvB,UAA0B;IAE1B,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IACnD,MAAM,GAAG,GAAG,UAAU,CAAC,YAAY,CAAC;IACpC,MAAM,UAAU,GAAG,UAAU,CAAC,UAAU,CAAC;IACzC,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,EAAE,IAAI,IAAI,UAAU,CAAC,WAAW,EAAE,IAAI,IAAI,UAAU,CAAC,WAAW,IAAI,YAAY,CAAC;IACnH,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,EAAE,WAAW,IAAI,UAAU,CAAC,WAAW,EAAE,WAAW,IAAI,EAAE,CAAC;IAE7F,IAAI,OAAe,CAAC;IAEpB,IAAI,UAAU,EAAE,SAAS,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAG;YACX,WAAW;YACX,WAAW,EAAE,WAAW;YACxB,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;YACzE,SAAS,EAAE,GAAG,CAAC,UAAU,CAAC,MAAM,GAAG,GAAG,CAAC,WAAW,CAAC,MAAM;YACzD,OAAO,EAAE,UAAU,CAAC,OAAO,CAAC,MAAM;SACnC,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,YAAY,CAAC;YAC7C,YAAY,EAAE,cAAc,CAAC,QAAQ,IAAI,EAAE;YAC3C,UAAU,EAAE,eAAe,CAAC,UAAU,EAAE,IAA0C,CAAC;YACnF,WAAW,EAAE,GAAG;SACjB,CAAC,CAAC;QAEH,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;IAC7B,CAAC;SAAM,CAAC;QACN,OAAO,GAAG,oBAAoB,CAAC,UAAU,EAAE;YACzC,WAAW;YACX,kBAAkB,EAAE,WAAW;YAC/B,UAAU;YACV,WAAW,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE;SAC7D,CAAC,CAAC;IACL,CAAC;IAED,OAAO;QACL,EAAE,EAAE,UAAU;QACd,KAAK,EAAE,UAAU;QACjB,OAAO;QACP,KAAK,EAAE,EAAE;KACV,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { SectionContext, SectionResult } from './types.js';
2
+ export declare function generateScripts(context: SectionContext, _projectCtx: any): Promise<SectionResult>;
3
+ //# sourceMappingURL=scripts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scripts.d.ts","sourceRoot":"","sources":["../../../src/generators/sections/scripts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAGhE,wBAAsB,eAAe,CACnC,OAAO,EAAE,cAAc,EACvB,WAAW,EAAE,GAAG,GACf,OAAO,CAAC,aAAa,CAAC,CAgBxB"}
@@ -0,0 +1,18 @@
1
+ import { buildFallbackContent } from '../../ai/prompts.js';
2
+ export async function generateScripts(context, _projectCtx) {
3
+ const scripts = context.scanResult.scripts;
4
+ let content;
5
+ if (scripts.length > 0) {
6
+ content = buildFallbackContent('scripts', { scripts });
7
+ }
8
+ else {
9
+ content = 'No scripts available.';
10
+ }
11
+ return {
12
+ id: 'scripts',
13
+ title: 'Scripts',
14
+ content,
15
+ order: 60,
16
+ };
17
+ }
18
+ //# sourceMappingURL=scripts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scripts.js","sourceRoot":"","sources":["../../../src/generators/sections/scripts.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAE3D,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,OAAuB,EACvB,WAAgB;IAEhB,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC;IAC3C,IAAI,OAAe,CAAC;IAEpB,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,GAAG,oBAAoB,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IACzD,CAAC;SAAM,CAAC;QACN,OAAO,GAAG,uBAAuB,CAAC;IACpC,CAAC;IAED,OAAO;QACL,EAAE,EAAE,SAAS;QACb,KAAK,EAAE,SAAS;QAChB,OAAO;QACP,KAAK,EAAE,EAAE;KACV,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { ProjectContext } from '../../core/types.js';
2
+ import type { SectionContext, SectionResult } from './types.js';
3
+ export declare function generateTechStack(context: SectionContext, _projectCtx: ProjectContext): Promise<SectionResult>;
4
+ //# sourceMappingURL=tech-stack.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tech-stack.d.ts","sourceRoot":"","sources":["../../../src/generators/sections/tech-stack.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAe,MAAM,qBAAqB,CAAC;AAEvE,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhE,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,cAAc,EACvB,WAAW,EAAE,cAAc,GAC1B,OAAO,CAAC,aAAa,CAAC,CA+BxB"}
@@ -0,0 +1,31 @@
1
+ import { buildUserPrompt, SYSTEM_PROMPTS, buildFallbackContent } from '../../ai/prompts.js';
2
+ export async function generateTechStack(context, _projectCtx) {
3
+ const { scanResult, aiProvider } = context;
4
+ const frameworks = scanResult.frameworks;
5
+ let content;
6
+ if (aiProvider?.available) {
7
+ const data = {
8
+ frameworks: frameworks.map(f => ({ name: f.name, category: f.category, version: f.version })),
9
+ dependencies: {
10
+ production: scanResult.dependencies.production,
11
+ development: scanResult.dependencies.development,
12
+ },
13
+ };
14
+ const response = await aiProvider.generateText({
15
+ systemPrompt: SYSTEM_PROMPTS.techStack ?? '',
16
+ userPrompt: buildUserPrompt('tech-stack', data),
17
+ temperature: 0.2,
18
+ });
19
+ content = response.content;
20
+ }
21
+ else {
22
+ content = buildFallbackContent('tech-stack', { frameworks });
23
+ }
24
+ return {
25
+ id: 'tech-stack',
26
+ title: 'Tech Stack',
27
+ content,
28
+ order: 30,
29
+ };
30
+ }
31
+ //# sourceMappingURL=tech-stack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tech-stack.js","sourceRoot":"","sources":["../../../src/generators/sections/tech-stack.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAG5F,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,OAAuB,EACvB,WAA2B;IAE3B,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;IAC3C,MAAM,UAAU,GAAG,UAAU,CAAC,UAAU,CAAC;IAEzC,IAAI,OAAe,CAAC;IAEpB,IAAI,UAAU,EAAE,SAAS,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAG;YACX,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YAC7F,YAAY,EAAE;gBACZ,UAAU,EAAE,UAAU,CAAC,YAAY,CAAC,UAAU;gBAC9C,WAAW,EAAE,UAAU,CAAC,YAAY,CAAC,WAAW;aACjD;SACF,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,YAAY,CAAC;YAC7C,YAAY,EAAE,cAAc,CAAC,SAAS,IAAI,EAAE;YAC5C,UAAU,EAAE,eAAe,CAAC,YAAY,EAAE,IAA0C,CAAC;YACrF,WAAW,EAAE,GAAG;SACjB,CAAC,CAAC;QACH,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;IAC7B,CAAC;SAAM,CAAC;QACN,OAAO,GAAG,oBAAoB,CAAC,YAAY,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED,OAAO;QACL,EAAE,EAAE,YAAY;QAChB,KAAK,EAAE,YAAY;QACnB,OAAO;QACP,KAAK,EAAE,EAAE;KACV,CAAC;AACJ,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { IAIProvider, AggregatedScanResult } from '../../core/types.js';
2
+ export interface SectionContext {
3
+ scanResult: AggregatedScanResult;
4
+ aiProvider?: IAIProvider | null;
5
+ config: Record<string, any>;
6
+ }
7
+ export interface SectionResult {
8
+ id: string;
9
+ title: string;
10
+ content: string;
11
+ order: number;
12
+ }
13
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/generators/sections/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAkB,WAAW,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAM7F,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,oBAAoB,CAAC;IACjC,UAAU,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IAChC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC7B;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/generators/sections/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env node
2
+ // ============================================================================
3
+ // DocPilot — CLI Entry Point
4
+ // ============================================================================
5
+ import { runCLI } from './cli/index.js';
6
+ runCLI().catch((error) => {
7
+ const message = error instanceof Error ? error.message : String(error);
8
+ console.error('Fatal error:', message);
9
+ process.exit(1);
10
+ });
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,+EAA+E;AAC/E,6BAA6B;AAC7B,+EAA+E;AAE/E,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAExC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;IAChC,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvE,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;IACvC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { IScanner, PartialProjectContext, ProjectContext, ScanResult } from '../core/types.js';
2
+ export declare abstract class BaseScanner implements IScanner {
3
+ abstract readonly id: string;
4
+ abstract readonly name: string;
5
+ abstract readonly description: string;
6
+ abstract readonly priority: number;
7
+ readonly dependencies: string[];
8
+ abstract isApplicable(context: PartialProjectContext): boolean | Promise<boolean>;
9
+ abstract scan(context: ProjectContext): Promise<ScanResult>;
10
+ }
11
+ //# sourceMappingURL=base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/scanners/base.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,qBAAqB,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAMpG,8BAAsB,WAAY,YAAW,QAAQ;IACnD,QAAQ,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAEnC,QAAQ,CAAC,YAAY,EAAE,MAAM,EAAE,CAAM;IAErC,QAAQ,CAAC,YAAY,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IACjF,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC;CAC5D"}
@@ -0,0 +1,7 @@
1
+ // ============================================================================
2
+ // DocPilot — Base Scanner (abstract class for all scanners)
3
+ // ============================================================================
4
+ export class BaseScanner {
5
+ dependencies = [];
6
+ }
7
+ //# sourceMappingURL=base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/scanners/base.ts"],"names":[],"mappings":"AAEA,+EAA+E;AAC/E,4DAA4D;AAC5D,+EAA+E;AAE/E,MAAM,OAAgB,WAAW;IAMtB,YAAY,GAAa,EAAE,CAAC;CAItC"}
@@ -0,0 +1,11 @@
1
+ import type { ProjectContext, ScanResult, PartialProjectContext } from '../core/types.js';
2
+ import { BaseScanner } from './base.js';
3
+ export declare class ConfigFileScanner extends BaseScanner {
4
+ readonly id = "config-file";
5
+ readonly name = "Config File Detector";
6
+ readonly description = "Detects configuration files and their features";
7
+ readonly priority = 20;
8
+ isApplicable(_context: PartialProjectContext): boolean;
9
+ scan(context: ProjectContext): Promise<ScanResult>;
10
+ }
11
+ //# sourceMappingURL=config-file.scanner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-file.scanner.d.ts","sourceRoot":"","sources":["../../src/scanners/config-file.scanner.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAkB,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAE1G,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAiExC,qBAAa,iBAAkB,SAAQ,WAAW;IAChD,QAAQ,CAAC,EAAE,iBAAiB;IAC5B,QAAQ,CAAC,IAAI,0BAA0B;IACvC,QAAQ,CAAC,WAAW,oDAAoD;IACxE,QAAQ,CAAC,QAAQ,MAAM;IAEvB,YAAY,CAAC,QAAQ,EAAE,qBAAqB,GAAG,OAAO;IAIhD,IAAI,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC;CAsBzD"}
@@ -0,0 +1,94 @@
1
+ import path from 'node:path';
2
+ import { fileExists } from '../utils/files.js';
3
+ import { BaseScanner } from './base.js';
4
+ // ============================================================================
5
+ // DocPilot — Config File Scanner
6
+ // ============================================================================
7
+ const CONFIG_FILES = [
8
+ { path: 'tsconfig.json', type: 'typescript', features: ['TypeScript'] },
9
+ { path: 'jsconfig.json', type: 'javascript', features: ['JavaScript Config'] },
10
+ { path: '.eslintrc.js', type: 'eslint', features: ['ESLint'] },
11
+ { path: '.eslintrc.json', type: 'eslint', features: ['ESLint'] },
12
+ { path: '.eslintrc.cjs', type: 'eslint', features: ['ESLint'] },
13
+ { path: '.prettierrc', type: 'prettier', features: ['Prettier'] },
14
+ { path: '.prettierrc.json', type: 'prettier', features: ['Prettier'] },
15
+ { path: '.prettierrc.js', type: 'prettier', features: ['Prettier'] },
16
+ { path: '.github/workflows', type: 'ci', features: ['GitHub Actions'] },
17
+ { path: '.gitlab-ci.yml', type: 'ci', features: ['GitLab CI'] },
18
+ { path: '.circleci/config.yml', type: 'ci', features: ['CircleCI'] },
19
+ { path: 'Dockerfile', type: 'docker', features: ['Docker'] },
20
+ { path: 'docker-compose.yml', type: 'docker', features: ['Docker Compose'] },
21
+ { path: 'docker-compose.yaml', type: 'docker', features: ['Docker Compose'] },
22
+ { path: '.dockerignore', type: 'docker', features: ['Docker'] },
23
+ { path: '.env.example', type: 'env', features: ['Environment Variables'] },
24
+ { path: '.env.sample', type: 'env', features: ['Environment Variables'] },
25
+ { path: 'nginx.conf', type: 'nginx', features: ['Nginx'] },
26
+ { path: 'Makefile', type: 'make', features: ['Make'] },
27
+ { path: 'turbo.json', type: 'monorepo', features: ['Turborepo'] },
28
+ { path: 'lerna.json', type: 'monorepo', features: ['Lerna'] },
29
+ { path: 'nx.json', type: 'monorepo', features: ['Nx'] },
30
+ { path: 'babel.config.js', type: 'babel', features: ['Babel'] },
31
+ { path: 'babel.config.json', type: 'babel', features: ['Babel'] },
32
+ { path: 'rollup.config.js', type: 'bundler', features: ['Rollup'] },
33
+ { path: 'rollup.config.mjs', type: 'bundler', features: ['Rollup'] },
34
+ { path: 'vite.config.ts', type: 'bundler', features: ['Vite'] },
35
+ { path: 'vite.config.js', type: 'bundler', features: ['Vite'] },
36
+ { path: 'next.config.js', type: 'framework', features: ['Next.js Config'] },
37
+ { path: 'next.config.mjs', type: 'framework', features: ['Next.js Config'] },
38
+ { path: 'nuxt.config.ts', type: 'framework', features: ['Nuxt Config'] },
39
+ { path: 'astro.config.mjs', type: 'framework', features: ['Astro Config'] },
40
+ { path: 'svelte.config.js', type: 'framework', features: ['Svelte Config'] },
41
+ { path: 'tailwind.config.js', type: 'css', features: ['Tailwind CSS'] },
42
+ { path: 'tailwind.config.ts', type: 'css', features: ['Tailwind CSS'] },
43
+ { path: 'postcss.config.js', type: 'css', features: ['PostCSS'] },
44
+ { path: 'postcss.config.mjs', type: 'css', features: ['PostCSS'] },
45
+ { path: '.stylelintrc.json', type: 'css', features: ['Stylelint'] },
46
+ { path: '.commitlintrc.json', type: 'git', features: ['Commitlint'] },
47
+ { path: '.husky', type: 'git', features: ['Husky'] },
48
+ { path: '.lintstagedrc.json', type: 'lint', features: ['lint-staged'] },
49
+ { path: 'biome.json', type: 'lint', features: ['Biome'] },
50
+ { path: '.nvmrc', type: 'runtime', features: ['nvm'] },
51
+ { path: '.node-version', type: 'runtime', features: ['Node Version'] },
52
+ { path: '.terraform', type: 'infra', features: ['Terraform'] },
53
+ { path: 'serverless.yml', type: 'cloud', features: ['Serverless'] },
54
+ { path: 'netlify.toml', type: 'cloud', features: ['Netlify'] },
55
+ { path: 'vercel.json', type: 'cloud', features: ['Vercel'] },
56
+ { path: 'Procfile', type: 'cloud', features: ['Heroku'] },
57
+ { path: '.gitmodules', type: 'git', features: ['Git Submodules'] },
58
+ { path: 'jest.config.js', type: 'testing', features: ['Jest'] },
59
+ { path: 'jest.config.ts', type: 'testing', features: ['Jest'] },
60
+ { path: 'vitest.config.ts', type: 'testing', features: ['Vitest'] },
61
+ { path: 'vitest.config.js', type: 'testing', features: ['Vitest'] },
62
+ { path: 'cypress.config.js', type: 'testing', features: ['Cypress'] },
63
+ { path: 'playwright.config.ts', type: 'testing', features: ['Playwright'] },
64
+ ];
65
+ export class ConfigFileScanner extends BaseScanner {
66
+ id = 'config-file';
67
+ name = 'Config File Detector';
68
+ description = 'Detects configuration files and their features';
69
+ priority = 20;
70
+ isApplicable(_context) {
71
+ return true;
72
+ }
73
+ async scan(context) {
74
+ const configFiles = [];
75
+ for (const cfg of CONFIG_FILES) {
76
+ const fullPath = path.join(context.rootPath, cfg.path);
77
+ const exists = await fileExists(fullPath);
78
+ if (exists) {
79
+ configFiles.push({
80
+ path: cfg.path,
81
+ type: cfg.type,
82
+ detectedFeatures: cfg.features,
83
+ });
84
+ }
85
+ }
86
+ return {
87
+ scannerId: this.id,
88
+ data: { configFiles },
89
+ confidence: configFiles.length > 0 ? 0.95 : 0.5,
90
+ timestamp: new Date(),
91
+ };
92
+ }
93
+ }
94
+ //# sourceMappingURL=config-file.scanner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-file.scanner.js","sourceRoot":"","sources":["../../src/scanners/config-file.scanner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { ProjectContext, ScanResult, PartialProjectContext } from '../core/types.js';
2
+ import { BaseScanner } from './base.js';
3
+ export declare class EnvVarScanner extends BaseScanner {
4
+ readonly id = "env-vars";
5
+ readonly name = "Environment Variable Detector";
6
+ readonly description = "Discovers environment variables from .env files and source code";
7
+ readonly priority = 60;
8
+ isApplicable(_context: PartialProjectContext): boolean;
9
+ scan(context: ProjectContext): Promise<ScanResult>;
10
+ private parseEnvFile;
11
+ private inferEnvDescription;
12
+ }
13
+ //# sourceMappingURL=env-var.scanner.d.ts.map