@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.
- package/README.md +147 -0
- package/dist/ai/anthropic.provider.d.ts +9 -0
- package/dist/ai/anthropic.provider.d.ts.map +1 -0
- package/dist/ai/anthropic.provider.js +54 -0
- package/dist/ai/anthropic.provider.js.map +1 -0
- package/dist/ai/openai.provider.d.ts +9 -0
- package/dist/ai/openai.provider.d.ts.map +1 -0
- package/dist/ai/openai.provider.js +53 -0
- package/dist/ai/openai.provider.js.map +1 -0
- package/dist/ai/prompts.d.ts +4 -0
- package/dist/ai/prompts.d.ts.map +1 -0
- package/dist/ai/prompts.js +199 -0
- package/dist/ai/prompts.js.map +1 -0
- package/dist/ai/provider.d.ts +4 -0
- package/dist/ai/provider.d.ts.map +1 -0
- package/dist/ai/provider.js +13 -0
- package/dist/ai/provider.js.map +1 -0
- package/dist/ai/template.provider.d.ts +7 -0
- package/dist/ai/template.provider.d.ts.map +1 -0
- package/dist/ai/template.provider.js +19 -0
- package/dist/ai/template.provider.js.map +1 -0
- package/dist/cli/commands/changelog.d.ts +3 -0
- package/dist/cli/commands/changelog.d.ts.map +1 -0
- package/dist/cli/commands/changelog.js +118 -0
- package/dist/cli/commands/changelog.js.map +1 -0
- package/dist/cli/commands/doctor.d.ts +3 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -0
- package/dist/cli/commands/doctor.js +109 -0
- package/dist/cli/commands/doctor.js.map +1 -0
- package/dist/cli/commands/generate.d.ts +3 -0
- package/dist/cli/commands/generate.d.ts.map +1 -0
- package/dist/cli/commands/generate.js +82 -0
- package/dist/cli/commands/generate.js.map +1 -0
- package/dist/cli/commands/scan.d.ts +3 -0
- package/dist/cli/commands/scan.d.ts.map +1 -0
- package/dist/cli/commands/scan.js +140 -0
- package/dist/cli/commands/scan.js.map +1 -0
- package/dist/cli/commands/score.d.ts +13 -0
- package/dist/cli/commands/score.d.ts.map +1 -0
- package/dist/cli/commands/score.js +153 -0
- package/dist/cli/commands/score.js.map +1 -0
- package/dist/cli/commands/suggest.d.ts +3 -0
- package/dist/cli/commands/suggest.d.ts.map +1 -0
- package/dist/cli/commands/suggest.js +72 -0
- package/dist/cli/commands/suggest.js.map +1 -0
- package/dist/cli/commands/sync.d.ts +3 -0
- package/dist/cli/commands/sync.d.ts.map +1 -0
- package/dist/cli/commands/sync.js +120 -0
- package/dist/cli/commands/sync.js.map +1 -0
- package/dist/cli/commands/watch.d.ts +3 -0
- package/dist/cli/commands/watch.d.ts.map +1 -0
- package/dist/cli/commands/watch.js +63 -0
- package/dist/cli/commands/watch.js.map +1 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +35 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/config/index.d.ts +7 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +76 -0
- package/dist/config/index.js.map +1 -0
- package/dist/core/constants.d.ts +22 -0
- package/dist/core/constants.d.ts.map +1 -0
- package/dist/core/constants.js +201 -0
- package/dist/core/constants.js.map +1 -0
- package/dist/core/errors.d.ts +26 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +48 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/registry.d.ts +21 -0
- package/dist/core/registry.d.ts.map +1 -0
- package/dist/core/registry.js +99 -0
- package/dist/core/registry.js.map +1 -0
- package/dist/core/schemas.d.ts +170 -0
- package/dist/core/schemas.d.ts.map +1 -0
- package/dist/core/schemas.js +43 -0
- package/dist/core/schemas.js.map +1 -0
- package/dist/core/types.d.ts +246 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +5 -0
- package/dist/core/types.js.map +1 -0
- package/dist/generators/index.d.ts +9 -0
- package/dist/generators/index.d.ts.map +1 -0
- package/dist/generators/index.js +181 -0
- package/dist/generators/index.js.map +1 -0
- package/dist/generators/sections/api-docs.d.ts +3 -0
- package/dist/generators/sections/api-docs.d.ts.map +1 -0
- package/dist/generators/sections/api-docs.js +39 -0
- package/dist/generators/sections/api-docs.js.map +1 -0
- package/dist/generators/sections/contributing.d.ts +3 -0
- package/dist/generators/sections/contributing.d.ts.map +1 -0
- package/dist/generators/sections/contributing.js +24 -0
- package/dist/generators/sections/contributing.js.map +1 -0
- package/dist/generators/sections/deployment.d.ts +3 -0
- package/dist/generators/sections/deployment.d.ts.map +1 -0
- package/dist/generators/sections/deployment.js +30 -0
- package/dist/generators/sections/deployment.js.map +1 -0
- package/dist/generators/sections/env-vars.d.ts +3 -0
- package/dist/generators/sections/env-vars.d.ts.map +1 -0
- package/dist/generators/sections/env-vars.js +18 -0
- package/dist/generators/sections/env-vars.js.map +1 -0
- package/dist/generators/sections/features.d.ts +4 -0
- package/dist/generators/sections/features.d.ts.map +1 -0
- package/dist/generators/sections/features.js +34 -0
- package/dist/generators/sections/features.js.map +1 -0
- package/dist/generators/sections/folder-tree.d.ts +3 -0
- package/dist/generators/sections/folder-tree.d.ts.map +1 -0
- package/dist/generators/sections/folder-tree.js +43 -0
- package/dist/generators/sections/folder-tree.js.map +1 -0
- package/dist/generators/sections/installation.d.ts +4 -0
- package/dist/generators/sections/installation.d.ts.map +1 -0
- package/dist/generators/sections/installation.js +33 -0
- package/dist/generators/sections/installation.js.map +1 -0
- package/dist/generators/sections/license.d.ts +3 -0
- package/dist/generators/sections/license.d.ts.map +1 -0
- package/dist/generators/sections/license.js +13 -0
- package/dist/generators/sections/license.js.map +1 -0
- package/dist/generators/sections/overview.d.ts +4 -0
- package/dist/generators/sections/overview.d.ts.map +1 -0
- package/dist/generators/sections/overview.js +39 -0
- package/dist/generators/sections/overview.js.map +1 -0
- package/dist/generators/sections/scripts.d.ts +3 -0
- package/dist/generators/sections/scripts.d.ts.map +1 -0
- package/dist/generators/sections/scripts.js +18 -0
- package/dist/generators/sections/scripts.js.map +1 -0
- package/dist/generators/sections/tech-stack.d.ts +4 -0
- package/dist/generators/sections/tech-stack.d.ts.map +1 -0
- package/dist/generators/sections/tech-stack.js +31 -0
- package/dist/generators/sections/tech-stack.js.map +1 -0
- package/dist/generators/sections/types.d.ts +13 -0
- package/dist/generators/sections/types.d.ts.map +1 -0
- package/dist/generators/sections/types.js +2 -0
- package/dist/generators/sections/types.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -0
- package/dist/scanners/base.d.ts +11 -0
- package/dist/scanners/base.d.ts.map +1 -0
- package/dist/scanners/base.js +7 -0
- package/dist/scanners/base.js.map +1 -0
- package/dist/scanners/config-file.scanner.d.ts +11 -0
- package/dist/scanners/config-file.scanner.d.ts.map +1 -0
- package/dist/scanners/config-file.scanner.js +94 -0
- package/dist/scanners/config-file.scanner.js.map +1 -0
- package/dist/scanners/env-var.scanner.d.ts +13 -0
- package/dist/scanners/env-var.scanner.d.ts.map +1 -0
- package/dist/scanners/env-var.scanner.js +144 -0
- package/dist/scanners/env-var.scanner.js.map +1 -0
- package/dist/scanners/folder-tree.scanner.d.ts +13 -0
- package/dist/scanners/folder-tree.scanner.d.ts.map +1 -0
- package/dist/scanners/folder-tree.scanner.js +74 -0
- package/dist/scanners/folder-tree.scanner.js.map +1 -0
- package/dist/scanners/framework.d.ts +12 -0
- package/dist/scanners/framework.d.ts.map +1 -0
- package/dist/scanners/framework.js +71 -0
- package/dist/scanners/framework.js.map +1 -0
- package/dist/scanners/git.scanner.d.ts +11 -0
- package/dist/scanners/git.scanner.d.ts.map +1 -0
- package/dist/scanners/git.scanner.js +92 -0
- package/dist/scanners/git.scanner.js.map +1 -0
- package/dist/scanners/index.d.ts +10 -0
- package/dist/scanners/index.d.ts.map +1 -0
- package/dist/scanners/index.js +29 -0
- package/dist/scanners/index.js.map +1 -0
- package/dist/scanners/package.scanner.d.ts +11 -0
- package/dist/scanners/package.scanner.d.ts.map +1 -0
- package/dist/scanners/package.scanner.js +70 -0
- package/dist/scanners/package.scanner.js.map +1 -0
- package/dist/scanners/script.scanner.d.ts +12 -0
- package/dist/scanners/script.scanner.d.ts.map +1 -0
- package/dist/scanners/script.scanner.js +105 -0
- package/dist/scanners/script.scanner.js.map +1 -0
- package/dist/utils/files.d.ts +12 -0
- package/dist/utils/files.d.ts.map +1 -0
- package/dist/utils/files.js +86 -0
- package/dist/utils/files.js.map +1 -0
- package/dist/utils/logger.d.ts +16 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +63 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/markdown.d.ts +10 -0
- package/dist/utils/markdown.d.ts.map +1 -0
- package/dist/utils/markdown.js +153 -0
- package/dist/utils/markdown.js.map +1 -0
- 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[](https://vercel.com/new)',
|
|
12
|
+
Netlify: '### Deploy to Netlify\n\n[](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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/generators/sections/types.ts"],"names":[],"mappings":""}
|
package/dist/index.d.ts
ADDED
|
@@ -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":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC,+EAA+E;AAC/E,iCAAiC;AACjC,+EAA+E;AAE/E,MAAM,YAAY,GAA8D;IAC9E,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC,YAAY,CAAC,EAAE;IACvE,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC,mBAAmB,CAAC,EAAE;IAC9E,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE;IAC9D,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE;IAChE,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE;IAC/D,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,UAAU,CAAC,EAAE;IACjE,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,UAAU,CAAC,EAAE;IACtE,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,UAAU,CAAC,EAAE;IACpE,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,gBAAgB,CAAC,EAAE;IACvE,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,WAAW,CAAC,EAAE;IAC/D,EAAE,IAAI,EAAE,sBAAsB,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,UAAU,CAAC,EAAE;IACpE,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE;IAC5D,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,gBAAgB,CAAC,EAAE;IAC5E,EAAE,IAAI,EAAE,qBAAqB,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,gBAAgB,CAAC,EAAE;IAC7E,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE;IAC/D,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,uBAAuB,CAAC,EAAE;IAC1E,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,uBAAuB,CAAC,EAAE;IACzE,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE;IAC1D,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE;IACtD,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,WAAW,CAAC,EAAE;IACjE,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE;IAC7D,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE;IACvD,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE;IAC/D,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE;IACjE,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE;IACnE,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE;IACpE,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE;IAC/D,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE;IAC/D,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,gBAAgB,CAAC,EAAE;IAC3E,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,gBAAgB,CAAC,EAAE;IAC5E,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,aAAa,CAAC,EAAE;IACxE,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,cAAc,CAAC,EAAE;IAC3E,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,eAAe,CAAC,EAAE;IAC5E,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,cAAc,CAAC,EAAE;IACvE,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,cAAc,CAAC,EAAE;IACvE,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,SAAS,CAAC,EAAE;IACjE,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,SAAS,CAAC,EAAE;IAClE,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,WAAW,CAAC,EAAE;IACnE,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,YAAY,CAAC,EAAE;IACrE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE;IACpD,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,aAAa,CAAC,EAAE;IACvE,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE;IACzD,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE;IACtD,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,cAAc,CAAC,EAAE;IACtE,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,WAAW,CAAC,EAAE;IAC9D,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,YAAY,CAAC,EAAE;IACnE,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,SAAS,CAAC,EAAE;IAC9D,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE;IAC5D,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE;IACzD,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,gBAAgB,CAAC,EAAE;IAClE,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE;IAC/D,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE;IAC/D,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE;IACnE,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE;IACnE,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,SAAS,CAAC,EAAE;IACrE,EAAE,IAAI,EAAE,sBAAsB,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,YAAY,CAAC,EAAE;CAC5E,CAAC;AAEF,MAAM,OAAO,iBAAkB,SAAQ,WAAW;IACvC,EAAE,GAAG,aAAa,CAAC;IACnB,IAAI,GAAG,sBAAsB,CAAC;IAC9B,WAAW,GAAG,gDAAgD,CAAC;IAC/D,QAAQ,GAAG,EAAE,CAAC;IAEvB,YAAY,CAAC,QAA+B;QAC1C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAAuB;QAChC,MAAM,WAAW,GAAqB,EAAE,CAAC;QAEzC,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;YAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;YACvD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC,CAAC;YAC1C,IAAI,MAAM,EAAE,CAAC;gBACX,WAAW,CAAC,IAAI,CAAC;oBACf,IAAI,EAAE,GAAG,CAAC,IAAI;oBACd,IAAI,EAAE,GAAG,CAAC,IAAI;oBACd,gBAAgB,EAAE,GAAG,CAAC,QAAQ;iBAC/B,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO;YACL,SAAS,EAAE,IAAI,CAAC,EAAE;YAClB,IAAI,EAAE,EAAE,WAAW,EAAE;YACrB,UAAU,EAAE,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG;YAC/C,SAAS,EAAE,IAAI,IAAI,EAAE;SACtB,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -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
|