specweave 0.6.8 → 0.7.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/.claude-plugin/README.md +1 -1
- package/CLAUDE.md +903 -99
- package/README.md +143 -207
- package/bin/specweave.js +67 -0
- package/dist/cli/commands/abandon.d.ts +13 -0
- package/dist/cli/commands/abandon.d.ts.map +1 -0
- package/dist/cli/commands/abandon.js +15 -0
- package/dist/cli/commands/abandon.js.map +1 -0
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +90 -18
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/pause.d.ts +13 -0
- package/dist/cli/commands/pause.d.ts.map +1 -0
- package/dist/cli/commands/pause.js +15 -0
- package/dist/cli/commands/pause.js.map +1 -0
- package/dist/cli/commands/qa.d.ts +54 -0
- package/dist/cli/commands/qa.d.ts.map +1 -0
- package/dist/cli/commands/qa.js +98 -0
- package/dist/cli/commands/qa.js.map +1 -0
- package/dist/cli/commands/resume.d.ts +12 -0
- package/dist/cli/commands/resume.d.ts.map +1 -0
- package/dist/cli/commands/resume.js +14 -0
- package/dist/cli/commands/resume.js.map +1 -0
- package/dist/cli/commands/status.d.ts +12 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +23 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/helpers/issue-tracker/ado.d.ts +57 -0
- package/dist/cli/helpers/issue-tracker/ado.d.ts.map +1 -0
- package/dist/cli/helpers/issue-tracker/ado.js +223 -0
- package/dist/cli/helpers/issue-tracker/ado.js.map +1 -0
- package/dist/cli/helpers/issue-tracker/github.d.ts +65 -0
- package/dist/cli/helpers/issue-tracker/github.d.ts.map +1 -0
- package/dist/cli/helpers/issue-tracker/github.js +284 -0
- package/dist/cli/helpers/issue-tracker/github.js.map +1 -0
- package/dist/cli/helpers/issue-tracker/index.d.ts +22 -0
- package/dist/cli/helpers/issue-tracker/index.d.ts.map +1 -0
- package/dist/cli/helpers/issue-tracker/index.js +270 -0
- package/dist/cli/helpers/issue-tracker/index.js.map +1 -0
- package/dist/cli/helpers/issue-tracker/jira.d.ts +61 -0
- package/dist/cli/helpers/issue-tracker/jira.d.ts.map +1 -0
- package/dist/cli/helpers/issue-tracker/jira.js +265 -0
- package/dist/cli/helpers/issue-tracker/jira.js.map +1 -0
- package/dist/cli/helpers/issue-tracker/types.d.ts +86 -0
- package/dist/cli/helpers/issue-tracker/types.d.ts.map +1 -0
- package/dist/cli/helpers/issue-tracker/types.js +16 -0
- package/dist/cli/helpers/issue-tracker/types.js.map +1 -0
- package/dist/cli/helpers/issue-tracker/utils.d.ts +103 -0
- package/dist/cli/helpers/issue-tracker/utils.d.ts.map +1 -0
- package/dist/cli/helpers/issue-tracker/utils.js +240 -0
- package/dist/cli/helpers/issue-tracker/utils.js.map +1 -0
- package/dist/core/increment/limits.d.ts +68 -0
- package/dist/core/increment/limits.d.ts.map +1 -0
- package/dist/core/increment/limits.js +224 -0
- package/dist/core/increment/limits.js.map +1 -0
- package/dist/core/increment/metadata-manager.d.ts +114 -0
- package/dist/core/increment/metadata-manager.d.ts.map +1 -0
- package/dist/core/increment/metadata-manager.js +320 -0
- package/dist/core/increment/metadata-manager.js.map +1 -0
- package/dist/core/increment/status-commands.d.ts +43 -0
- package/dist/core/increment/status-commands.d.ts.map +1 -0
- package/dist/core/increment/status-commands.js +277 -0
- package/dist/core/increment/status-commands.js.map +1 -0
- package/dist/core/plugin-detector.d.ts +1 -0
- package/dist/core/plugin-detector.d.ts.map +1 -1
- package/dist/core/plugin-detector.js +25 -0
- package/dist/core/plugin-detector.js.map +1 -1
- package/dist/core/qa/qa-runner.d.ts +16 -0
- package/dist/core/qa/qa-runner.d.ts.map +1 -0
- package/dist/core/qa/qa-runner.js +404 -0
- package/dist/core/qa/qa-runner.js.map +1 -0
- package/dist/core/qa/quality-gate-decider.d.ts +53 -0
- package/dist/core/qa/quality-gate-decider.d.ts.map +1 -0
- package/dist/core/qa/quality-gate-decider.js +268 -0
- package/dist/core/qa/quality-gate-decider.js.map +1 -0
- package/dist/core/qa/risk-calculator.d.ts +126 -0
- package/dist/core/qa/risk-calculator.d.ts.map +1 -0
- package/dist/core/qa/risk-calculator.js +247 -0
- package/dist/core/qa/risk-calculator.js.map +1 -0
- package/dist/core/qa/types.d.ts +315 -0
- package/dist/core/qa/types.d.ts.map +1 -0
- package/dist/core/qa/types.js +8 -0
- package/dist/core/qa/types.js.map +1 -0
- package/dist/core/types/config.d.ts +35 -0
- package/dist/core/types/config.d.ts.map +1 -1
- package/dist/core/types/config.js +16 -0
- package/dist/core/types/config.js.map +1 -1
- package/dist/core/types/increment-metadata.d.ts +120 -0
- package/dist/core/types/increment-metadata.d.ts.map +1 -0
- package/dist/core/types/increment-metadata.js +138 -0
- package/dist/core/types/increment-metadata.js.map +1 -0
- package/dist/hooks/lib/invoke-translator-skill.d.ts +60 -0
- package/dist/hooks/lib/invoke-translator-skill.d.ts.map +1 -0
- package/dist/hooks/lib/invoke-translator-skill.js +201 -0
- package/dist/hooks/lib/invoke-translator-skill.js.map +1 -0
- package/dist/hooks/lib/translate-file.d.ts +59 -0
- package/dist/hooks/lib/translate-file.d.ts.map +1 -0
- package/dist/hooks/lib/translate-file.js +350 -0
- package/dist/hooks/lib/translate-file.js.map +1 -0
- package/dist/locales/en/cli.json +3 -1
- package/dist/metrics/calculators/change-failure-rate.d.ts +22 -0
- package/dist/metrics/calculators/change-failure-rate.d.ts.map +1 -0
- package/dist/metrics/calculators/change-failure-rate.js +70 -0
- package/dist/metrics/calculators/change-failure-rate.js.map +1 -0
- package/dist/metrics/calculators/deployment-frequency.d.ts +20 -0
- package/dist/metrics/calculators/deployment-frequency.d.ts.map +1 -0
- package/dist/metrics/calculators/deployment-frequency.js +61 -0
- package/dist/metrics/calculators/deployment-frequency.js.map +1 -0
- package/dist/metrics/calculators/lead-time.d.ts +22 -0
- package/dist/metrics/calculators/lead-time.d.ts.map +1 -0
- package/dist/metrics/calculators/lead-time.js +82 -0
- package/dist/metrics/calculators/lead-time.js.map +1 -0
- package/dist/metrics/calculators/mttr.d.ts +21 -0
- package/dist/metrics/calculators/mttr.d.ts.map +1 -0
- package/dist/metrics/calculators/mttr.js +60 -0
- package/dist/metrics/calculators/mttr.js.map +1 -0
- package/dist/metrics/dora-calculator.d.ts +24 -0
- package/dist/metrics/dora-calculator.d.ts.map +1 -0
- package/dist/metrics/dora-calculator.js +104 -0
- package/dist/metrics/dora-calculator.js.map +1 -0
- package/dist/metrics/github-client.d.ts +51 -0
- package/dist/metrics/github-client.d.ts.map +1 -0
- package/dist/metrics/github-client.js +133 -0
- package/dist/metrics/github-client.js.map +1 -0
- package/dist/metrics/types.d.ts +112 -0
- package/dist/metrics/types.d.ts.map +1 -0
- package/dist/metrics/types.js +10 -0
- package/dist/metrics/types.js.map +1 -0
- package/dist/metrics/utils/percentile.d.ts +25 -0
- package/dist/metrics/utils/percentile.d.ts.map +1 -0
- package/dist/metrics/utils/percentile.js +46 -0
- package/dist/metrics/utils/percentile.js.map +1 -0
- package/dist/metrics/utils/tier-classifier.d.ts +61 -0
- package/dist/metrics/utils/tier-classifier.d.ts.map +1 -0
- package/dist/metrics/utils/tier-classifier.js +100 -0
- package/dist/metrics/utils/tier-classifier.js.map +1 -0
- package/dist/utils/auth-helpers.d.ts +58 -0
- package/dist/utils/auth-helpers.d.ts.map +1 -0
- package/dist/utils/auth-helpers.js +108 -0
- package/dist/utils/auth-helpers.js.map +1 -0
- package/dist/utils/env-file.d.ts +88 -0
- package/dist/utils/env-file.d.ts.map +1 -0
- package/dist/utils/env-file.js +180 -0
- package/dist/utils/env-file.js.map +1 -0
- package/dist/utils/plugin-detection.d.ts +50 -0
- package/dist/utils/plugin-detection.d.ts.map +1 -0
- package/dist/utils/plugin-detection.js +229 -0
- package/dist/utils/plugin-detection.js.map +1 -0
- package/dist/utils/secrets-loader.d.ts +88 -0
- package/dist/utils/secrets-loader.d.ts.map +1 -0
- package/dist/utils/secrets-loader.js +271 -0
- package/dist/utils/secrets-loader.js.map +1 -0
- package/dist/utils/translation.d.ts +187 -0
- package/dist/utils/translation.d.ts.map +1 -0
- package/dist/utils/translation.js +414 -0
- package/dist/utils/translation.js.map +1 -0
- package/package.json +28 -44
- package/plugins/specweave/.claude-plugin/plugin.json +3 -3
- package/plugins/specweave/agents/pm/AGENT.md +330 -54
- package/plugins/specweave/agents/test-aware-planner/AGENT.md +1035 -0
- package/plugins/specweave/agents/test-aware-planner/templates/README.md +118 -0
- package/plugins/specweave/agents/test-aware-planner/templates/task-non-testable.md.template +24 -0
- package/plugins/specweave/agents/test-aware-planner/templates/task-testable.md.template +53 -0
- package/plugins/specweave/agents/test-aware-planner/templates/tasks-frontmatter.md.template +11 -0
- package/plugins/specweave/commands/README.md +88 -163
- package/plugins/specweave/commands/specweave-abandon.md +314 -0
- package/plugins/specweave/commands/specweave-check-tests.md +546 -0
- package/plugins/specweave/commands/{do.md → specweave-do.md} +5 -7
- package/plugins/specweave/commands/{increment.md → specweave-increment.md} +231 -4
- package/plugins/specweave/commands/specweave-pause.md +189 -0
- package/plugins/specweave/commands/specweave-qa.md +245 -0
- package/plugins/specweave/commands/specweave-resume.md +216 -0
- package/plugins/specweave/commands/specweave-status.md +397 -0
- package/plugins/specweave/commands/specweave-sync-tasks.md +256 -0
- package/plugins/specweave/commands/{translate.md → specweave-translate.md} +3 -3
- package/plugins/specweave/commands/specweave-update-scope.md +351 -0
- package/plugins/specweave/commands/specweave.md +21 -21
- package/plugins/specweave/hooks/post-increment-planning.sh +335 -0
- package/plugins/specweave/hooks/post-task-completion.sh +141 -0
- package/plugins/specweave/skills/SKILLS-INDEX.md +1 -1
- package/plugins/specweave/skills/brownfield-analyzer/SKILL.md +9 -9
- package/plugins/specweave/skills/increment-planner/SKILL.md +400 -212
- package/plugins/specweave/skills/increment-quality-judge-v2/SKILL.md +499 -0
- package/plugins/specweave/skills/plugin-detector/SKILL.md +114 -1
- package/plugins/specweave/skills/project-kickstarter/SKILL.md +74 -1
- package/plugins/specweave/skills/{rfc-generator → spec-generator}/SKILL.md +22 -29
- package/plugins/specweave/skills/specweave-detector/SKILL.md +3 -3
- package/plugins/specweave/skills/specweave-framework/SKILL.md +2 -2
- package/plugins/specweave-ado/.claude-plugin/plugin.json +18 -4
- package/plugins/specweave-ado/agents/ado-manager/AGENT.md +426 -0
- package/plugins/specweave-ado/commands/close-workitem.md +52 -0
- package/plugins/specweave-ado/commands/create-workitem.md +53 -0
- package/plugins/specweave-ado/commands/status.md +53 -0
- package/plugins/specweave-ado/commands/sync.md +55 -0
- package/plugins/specweave-ado/lib/ado-client.ts +361 -0
- package/plugins/specweave-ado/reference/ado-specweave-mapping.md +552 -0
- package/plugins/specweave-ado/skills/ado-sync/SKILL.md +344 -193
- package/plugins/specweave-docs/skills/docusaurus/SKILL.md +73 -0
- package/plugins/specweave-github/agents/github-manager/AGENT.md +49 -0
- package/plugins/specweave-github/commands/{github-close-issue.md → close-issue.md} +1 -1
- package/plugins/specweave-github/commands/{github-create-issue.md → create-issue.md} +1 -1
- package/plugins/specweave-github/commands/{github-status.md → status.md} +1 -1
- package/plugins/specweave-github/commands/{github-sync-tasks.md → sync-tasks.md} +1 -1
- package/plugins/specweave-github/commands/{github-sync.md → sync.md} +1 -1
- package/plugins/specweave-github/reference/github-specweave-mapping.md +377 -0
- package/plugins/specweave-github/skills/github-sync/SKILL.md +11 -3
- package/plugins/specweave-infrastructure/commands/{specweave.monitor-setup.md → monitor-setup.md} +5 -0
- package/plugins/specweave-infrastructure/commands/{specweave.slo-implement.md → slo-implement.md} +5 -0
- package/plugins/specweave-jira/agents/jira-manager/AGENT.md +380 -0
- package/plugins/specweave-jira/commands/{specweave.sync-jira.md → sync.md} +1 -1
- package/plugins/specweave-jira/reference/jira-specweave-mapping.md +508 -0
- package/plugins/specweave-ml/commands/ml-deploy.md +1 -1
- package/plugins/specweave-ml/commands/ml-evaluate.md +1 -1
- package/plugins/specweave-ml/commands/ml-explain.md +1 -1
- package/plugins/specweave-ml/commands/{specweave.ml-pipeline.md → ml-pipeline.md} +5 -0
- package/src/templates/AGENTS.md.template +331 -31
- package/src/templates/CLAUDE.md.template +36 -21
- package/src/templates/COMPLETION-REPORT.template.md +128 -0
- package/src/templates/README.md.template +17 -16
- package/src/templates/docs/README.md +11 -9
- package/src/templates/docs/spec-template.md +229 -0
- package/plugins/specweave/commands/inc.md +0 -85
- package/plugins/specweave/commands/list-increments.md +0 -180
- package/src/adapters/README.md +0 -275
- package/src/adapters/adapter-base.ts +0 -182
- package/src/adapters/adapter-interface.ts +0 -166
- package/src/adapters/adapter-loader.ts +0 -256
- package/src/adapters/agents-md-generator.ts +0 -228
- package/src/adapters/claude/README.md +0 -233
- package/src/adapters/claude/adapter.ts +0 -468
- package/src/adapters/claude-md-generator.ts +0 -377
- package/src/adapters/codex/README.md +0 -105
- package/src/adapters/codex/adapter.ts +0 -333
- package/src/adapters/cursor/.cursor/context/docs-context.md +0 -62
- package/src/adapters/cursor/.cursor/context/increments-context.md +0 -71
- package/src/adapters/cursor/.cursor/context/strategy-context.md +0 -73
- package/src/adapters/cursor/.cursor/context/tests-context.md +0 -89
- package/src/adapters/cursor/README.md +0 -283
- package/src/adapters/cursor/adapter.ts +0 -451
- package/src/adapters/doc-generator.ts +0 -331
- package/src/adapters/gemini/README.md +0 -97
- package/src/adapters/gemini/adapter.ts +0 -298
- package/src/adapters/generic/README.md +0 -277
- package/src/adapters/generic/adapter.ts +0 -378
- package/src/adapters/registry.yaml +0 -187
- /package/plugins/specweave/commands/{costs.md → specweave-costs.md} +0 -0
- /package/plugins/specweave/commands/{done.md → specweave-done.md} +0 -0
- /package/plugins/specweave/commands/{next.md → specweave-next.md} +0 -0
- /package/plugins/specweave/commands/{progress.md → specweave-progress.md} +0 -0
- /package/plugins/specweave/commands/{sync-docs.md → specweave-sync-docs.md} +0 -0
- /package/plugins/specweave/commands/{tdd-cycle.md → specweave-tdd-cycle.md} +0 -0
- /package/plugins/specweave/commands/{tdd-green.md → specweave-tdd-green.md} +0 -0
- /package/plugins/specweave/commands/{tdd-red.md → specweave-tdd-red.md} +0 -0
- /package/plugins/specweave/commands/{tdd-refactor.md → specweave-tdd-refactor.md} +0 -0
- /package/plugins/specweave/commands/{validate.md → specweave-validate.md} +0 -0
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Percentile Calculator
|
|
3
|
+
*
|
|
4
|
+
* Calculates Pth percentile of a dataset using linear interpolation
|
|
5
|
+
* Used for P50 (median) and P90 calculations in DORA metrics
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Calculate percentile value from array of numbers
|
|
9
|
+
*
|
|
10
|
+
* Uses linear interpolation method:
|
|
11
|
+
* 1. Sort values ascending
|
|
12
|
+
* 2. Calculate index: (P/100) * (n-1)
|
|
13
|
+
* 3. If index is integer, return value at that index
|
|
14
|
+
* 4. If index is fractional, interpolate between adjacent values
|
|
15
|
+
*
|
|
16
|
+
* @param values - Array of numeric values
|
|
17
|
+
* @param percentile - Percentile to calculate (0-100)
|
|
18
|
+
* @returns Percentile value
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* calculatePercentile([1, 2, 3, 4, 5], 50) // Returns 3 (median)
|
|
22
|
+
* calculatePercentile([1, 2, 3, 4, 5], 90) // Returns 4.6 (P90)
|
|
23
|
+
*/
|
|
24
|
+
export declare function calculatePercentile(values: number[], percentile: number): number;
|
|
25
|
+
//# sourceMappingURL=percentile.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"percentile.d.ts","sourceRoot":"","sources":["../../../src/metrics/utils/percentile.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CA0BhF"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Percentile Calculator
|
|
3
|
+
*
|
|
4
|
+
* Calculates Pth percentile of a dataset using linear interpolation
|
|
5
|
+
* Used for P50 (median) and P90 calculations in DORA metrics
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Calculate percentile value from array of numbers
|
|
9
|
+
*
|
|
10
|
+
* Uses linear interpolation method:
|
|
11
|
+
* 1. Sort values ascending
|
|
12
|
+
* 2. Calculate index: (P/100) * (n-1)
|
|
13
|
+
* 3. If index is integer, return value at that index
|
|
14
|
+
* 4. If index is fractional, interpolate between adjacent values
|
|
15
|
+
*
|
|
16
|
+
* @param values - Array of numeric values
|
|
17
|
+
* @param percentile - Percentile to calculate (0-100)
|
|
18
|
+
* @returns Percentile value
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* calculatePercentile([1, 2, 3, 4, 5], 50) // Returns 3 (median)
|
|
22
|
+
* calculatePercentile([1, 2, 3, 4, 5], 90) // Returns 4.6 (P90)
|
|
23
|
+
*/
|
|
24
|
+
export function calculatePercentile(values, percentile) {
|
|
25
|
+
if (values.length === 0)
|
|
26
|
+
return 0;
|
|
27
|
+
if (percentile < 0 || percentile > 100) {
|
|
28
|
+
throw new Error('Percentile must be between 0 and 100');
|
|
29
|
+
}
|
|
30
|
+
// Sort values ascending
|
|
31
|
+
const sorted = [...values].sort((a, b) => a - b);
|
|
32
|
+
// Calculate index
|
|
33
|
+
const index = (percentile / 100) * (sorted.length - 1);
|
|
34
|
+
// If index is integer, return exact value
|
|
35
|
+
if (Number.isInteger(index)) {
|
|
36
|
+
return sorted[index];
|
|
37
|
+
}
|
|
38
|
+
// Otherwise, interpolate between adjacent values
|
|
39
|
+
const lowerIndex = Math.floor(index);
|
|
40
|
+
const upperIndex = Math.ceil(index);
|
|
41
|
+
const fraction = index - lowerIndex;
|
|
42
|
+
const lowerValue = sorted[lowerIndex];
|
|
43
|
+
const upperValue = sorted[upperIndex];
|
|
44
|
+
return lowerValue + (upperValue - lowerValue) * fraction;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=percentile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"percentile.js","sourceRoot":"","sources":["../../../src/metrics/utils/percentile.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAgB,EAAE,UAAkB;IACtE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAClC,IAAI,UAAU,GAAG,CAAC,IAAI,UAAU,GAAG,GAAG,EAAE,CAAC;QACvC,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IAC1D,CAAC;IAED,wBAAwB;IACxB,MAAM,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAEjD,kBAAkB;IAClB,MAAM,KAAK,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAEvD,0CAA0C;IAC1C,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAED,iDAAiD;IACjD,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACrC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpC,MAAM,QAAQ,GAAG,KAAK,GAAG,UAAU,CAAC;IAEpC,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;IACtC,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;IAEtC,OAAO,UAAU,GAAG,CAAC,UAAU,GAAG,UAAU,CAAC,GAAG,QAAQ,CAAC;AAC3D,CAAC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DORA Tier Classifier
|
|
3
|
+
*
|
|
4
|
+
* Maps metric values to DORA performance tiers based on industry benchmarks
|
|
5
|
+
*
|
|
6
|
+
* @see https://dora.dev/ - DORA Research
|
|
7
|
+
*/
|
|
8
|
+
import { DORAType } from '../types';
|
|
9
|
+
/**
|
|
10
|
+
* Classify Deployment Frequency
|
|
11
|
+
*
|
|
12
|
+
* Benchmarks (deploys per year):
|
|
13
|
+
* - Elite: >365 (on-demand, multiple per day)
|
|
14
|
+
* - High: 52-365 (weekly to daily)
|
|
15
|
+
* - Medium: 12-52 (monthly to weekly)
|
|
16
|
+
* - Low: <12 (less than monthly)
|
|
17
|
+
*
|
|
18
|
+
* @param deploysPerYear - Number of deployments per year
|
|
19
|
+
* @returns DORA tier
|
|
20
|
+
*/
|
|
21
|
+
export declare function classifyDeploymentFrequency(deploysPerYear: number): DORAType;
|
|
22
|
+
/**
|
|
23
|
+
* Classify Lead Time for Changes
|
|
24
|
+
*
|
|
25
|
+
* Benchmarks (hours from commit to production):
|
|
26
|
+
* - Elite: <1 hour
|
|
27
|
+
* - High: 1 hour to 1 day (24 hours)
|
|
28
|
+
* - Medium: 1 day to 1 week (168 hours)
|
|
29
|
+
* - Low: 1 week to 1 month (720 hours)
|
|
30
|
+
*
|
|
31
|
+
* @param hours - Average lead time in hours
|
|
32
|
+
* @returns DORA tier
|
|
33
|
+
*/
|
|
34
|
+
export declare function classifyLeadTime(hours: number): DORAType;
|
|
35
|
+
/**
|
|
36
|
+
* Classify Change Failure Rate
|
|
37
|
+
*
|
|
38
|
+
* Benchmarks (percentage of failed deployments):
|
|
39
|
+
* - Elite: <5%
|
|
40
|
+
* - High: 5-10%
|
|
41
|
+
* - Medium: 10-15%
|
|
42
|
+
* - Low: >15%
|
|
43
|
+
*
|
|
44
|
+
* @param percentage - Change failure rate (0-100)
|
|
45
|
+
* @returns DORA tier
|
|
46
|
+
*/
|
|
47
|
+
export declare function classifyChangeFailureRate(percentage: number): DORAType;
|
|
48
|
+
/**
|
|
49
|
+
* Classify Mean Time to Recovery (MTTR)
|
|
50
|
+
*
|
|
51
|
+
* Benchmarks (minutes to recover from incident):
|
|
52
|
+
* - Elite: <60 minutes (1 hour)
|
|
53
|
+
* - High: 60 minutes to 1 day (1440 minutes)
|
|
54
|
+
* - Medium: 1 day to 1 week (10080 minutes)
|
|
55
|
+
* - Low: >1 week
|
|
56
|
+
*
|
|
57
|
+
* @param minutes - Average recovery time in minutes
|
|
58
|
+
* @returns DORA tier
|
|
59
|
+
*/
|
|
60
|
+
export declare function classifyMTTR(minutes: number): DORAType;
|
|
61
|
+
//# sourceMappingURL=tier-classifier.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tier-classifier.d.ts","sourceRoot":"","sources":["../../../src/metrics/utils/tier-classifier.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEpC;;;;;;;;;;;GAWG;AACH,wBAAgB,2BAA2B,CAAC,cAAc,EAAE,MAAM,GAAG,QAAQ,CAM5E;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,CAMxD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,MAAM,GAAG,QAAQ,CAMtE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,CAMtD"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DORA Tier Classifier
|
|
3
|
+
*
|
|
4
|
+
* Maps metric values to DORA performance tiers based on industry benchmarks
|
|
5
|
+
*
|
|
6
|
+
* @see https://dora.dev/ - DORA Research
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Classify Deployment Frequency
|
|
10
|
+
*
|
|
11
|
+
* Benchmarks (deploys per year):
|
|
12
|
+
* - Elite: >365 (on-demand, multiple per day)
|
|
13
|
+
* - High: 52-365 (weekly to daily)
|
|
14
|
+
* - Medium: 12-52 (monthly to weekly)
|
|
15
|
+
* - Low: <12 (less than monthly)
|
|
16
|
+
*
|
|
17
|
+
* @param deploysPerYear - Number of deployments per year
|
|
18
|
+
* @returns DORA tier
|
|
19
|
+
*/
|
|
20
|
+
export function classifyDeploymentFrequency(deploysPerYear) {
|
|
21
|
+
if (deploysPerYear === 0)
|
|
22
|
+
return 'N/A';
|
|
23
|
+
if (deploysPerYear > 365)
|
|
24
|
+
return 'Elite';
|
|
25
|
+
if (deploysPerYear >= 52)
|
|
26
|
+
return 'High';
|
|
27
|
+
if (deploysPerYear >= 12)
|
|
28
|
+
return 'Medium';
|
|
29
|
+
return 'Low';
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Classify Lead Time for Changes
|
|
33
|
+
*
|
|
34
|
+
* Benchmarks (hours from commit to production):
|
|
35
|
+
* - Elite: <1 hour
|
|
36
|
+
* - High: 1 hour to 1 day (24 hours)
|
|
37
|
+
* - Medium: 1 day to 1 week (168 hours)
|
|
38
|
+
* - Low: 1 week to 1 month (720 hours)
|
|
39
|
+
*
|
|
40
|
+
* @param hours - Average lead time in hours
|
|
41
|
+
* @returns DORA tier
|
|
42
|
+
*/
|
|
43
|
+
export function classifyLeadTime(hours) {
|
|
44
|
+
if (hours === 0)
|
|
45
|
+
return 'N/A';
|
|
46
|
+
if (hours < 1)
|
|
47
|
+
return 'Elite';
|
|
48
|
+
if (hours < 24)
|
|
49
|
+
return 'High';
|
|
50
|
+
if (hours < 168)
|
|
51
|
+
return 'Medium'; // 7 days
|
|
52
|
+
return 'Low';
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Classify Change Failure Rate
|
|
56
|
+
*
|
|
57
|
+
* Benchmarks (percentage of failed deployments):
|
|
58
|
+
* - Elite: <5%
|
|
59
|
+
* - High: 5-10%
|
|
60
|
+
* - Medium: 10-15%
|
|
61
|
+
* - Low: >15%
|
|
62
|
+
*
|
|
63
|
+
* @param percentage - Change failure rate (0-100)
|
|
64
|
+
* @returns DORA tier
|
|
65
|
+
*/
|
|
66
|
+
export function classifyChangeFailureRate(percentage) {
|
|
67
|
+
if (percentage < 0)
|
|
68
|
+
return 'N/A'; // Invalid
|
|
69
|
+
if (percentage < 5)
|
|
70
|
+
return 'Elite';
|
|
71
|
+
if (percentage < 10)
|
|
72
|
+
return 'High';
|
|
73
|
+
if (percentage < 15)
|
|
74
|
+
return 'Medium';
|
|
75
|
+
return 'Low';
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Classify Mean Time to Recovery (MTTR)
|
|
79
|
+
*
|
|
80
|
+
* Benchmarks (minutes to recover from incident):
|
|
81
|
+
* - Elite: <60 minutes (1 hour)
|
|
82
|
+
* - High: 60 minutes to 1 day (1440 minutes)
|
|
83
|
+
* - Medium: 1 day to 1 week (10080 minutes)
|
|
84
|
+
* - Low: >1 week
|
|
85
|
+
*
|
|
86
|
+
* @param minutes - Average recovery time in minutes
|
|
87
|
+
* @returns DORA tier
|
|
88
|
+
*/
|
|
89
|
+
export function classifyMTTR(minutes) {
|
|
90
|
+
if (minutes === 0)
|
|
91
|
+
return 'N/A';
|
|
92
|
+
if (minutes < 60)
|
|
93
|
+
return 'Elite';
|
|
94
|
+
if (minutes < 1440)
|
|
95
|
+
return 'High'; // 24 hours
|
|
96
|
+
if (minutes < 10080)
|
|
97
|
+
return 'Medium'; // 7 days
|
|
98
|
+
return 'Low';
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=tier-classifier.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tier-classifier.js","sourceRoot":"","sources":["../../../src/metrics/utils/tier-classifier.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,2BAA2B,CAAC,cAAsB;IAChE,IAAI,cAAc,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACvC,IAAI,cAAc,GAAG,GAAG;QAAE,OAAO,OAAO,CAAC;IACzC,IAAI,cAAc,IAAI,EAAE;QAAE,OAAO,MAAM,CAAC;IACxC,IAAI,cAAc,IAAI,EAAE;QAAE,OAAO,QAAQ,CAAC;IAC1C,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC9B,IAAI,KAAK,GAAG,CAAC;QAAE,OAAO,OAAO,CAAC;IAC9B,IAAI,KAAK,GAAG,EAAE;QAAE,OAAO,MAAM,CAAC;IAC9B,IAAI,KAAK,GAAG,GAAG;QAAE,OAAO,QAAQ,CAAC,CAAE,SAAS;IAC5C,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,yBAAyB,CAAC,UAAkB;IAC1D,IAAI,UAAU,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC,CAAE,UAAU;IAC7C,IAAI,UAAU,GAAG,CAAC;QAAE,OAAO,OAAO,CAAC;IACnC,IAAI,UAAU,GAAG,EAAE;QAAE,OAAO,MAAM,CAAC;IACnC,IAAI,UAAU,GAAG,EAAE;QAAE,OAAO,QAAQ,CAAC;IACrC,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,IAAI,OAAO,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAChC,IAAI,OAAO,GAAG,EAAE;QAAE,OAAO,OAAO,CAAC;IACjC,IAAI,OAAO,GAAG,IAAI;QAAE,OAAO,MAAM,CAAC,CAAE,WAAW;IAC/C,IAAI,OAAO,GAAG,KAAK;QAAE,OAAO,QAAQ,CAAC,CAAE,SAAS;IAChD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Authentication Helpers for Issue Tracker Integration
|
|
3
|
+
*
|
|
4
|
+
* Provides unified authentication detection for GitHub, Azure DevOps, and Jira
|
|
5
|
+
* Works in both CLI (init flow) and test environments
|
|
6
|
+
*
|
|
7
|
+
* @module utils/auth-helpers
|
|
8
|
+
*/
|
|
9
|
+
export interface GitHubAuth {
|
|
10
|
+
token: string;
|
|
11
|
+
source: 'GITHUB_TOKEN' | 'GH_TOKEN' | 'gh-cli' | 'none';
|
|
12
|
+
}
|
|
13
|
+
export interface AzureDevOpsAuth {
|
|
14
|
+
pat: string;
|
|
15
|
+
org: string;
|
|
16
|
+
project: string;
|
|
17
|
+
}
|
|
18
|
+
export interface JiraAuth {
|
|
19
|
+
token: string;
|
|
20
|
+
email: string;
|
|
21
|
+
domain: string;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Get GitHub authentication token
|
|
25
|
+
* Priority: GITHUB_TOKEN (CI) > GH_TOKEN (custom) > gh CLI config (local)
|
|
26
|
+
*/
|
|
27
|
+
export declare function getGitHubAuth(): GitHubAuth;
|
|
28
|
+
/**
|
|
29
|
+
* Get Azure DevOps authentication
|
|
30
|
+
* Requires: AZURE_DEVOPS_PAT, AZURE_DEVOPS_ORG, AZURE_DEVOPS_PROJECT
|
|
31
|
+
*/
|
|
32
|
+
export declare function getAzureDevOpsAuth(): AzureDevOpsAuth | null;
|
|
33
|
+
/**
|
|
34
|
+
* Get Jira authentication
|
|
35
|
+
* Requires: JIRA_API_TOKEN, JIRA_EMAIL, JIRA_DOMAIN
|
|
36
|
+
*/
|
|
37
|
+
export declare function getJiraAuth(): JiraAuth | null;
|
|
38
|
+
/**
|
|
39
|
+
* Check if integration tests should run
|
|
40
|
+
* Returns true if RUN_INTEGRATION_TESTS=true or if in CI environment
|
|
41
|
+
*/
|
|
42
|
+
export declare function shouldRunIntegrationTests(): boolean;
|
|
43
|
+
/**
|
|
44
|
+
* Check if credentials are available for a service
|
|
45
|
+
*/
|
|
46
|
+
export declare function hasGitHubCredentials(): boolean;
|
|
47
|
+
export declare function hasAzureDevOpsCredentials(): boolean;
|
|
48
|
+
export declare function hasJiraCredentials(): boolean;
|
|
49
|
+
/**
|
|
50
|
+
* Get credential status summary (for debugging)
|
|
51
|
+
*/
|
|
52
|
+
export declare function getCredentialStatus(): {
|
|
53
|
+
github: string;
|
|
54
|
+
ado: boolean;
|
|
55
|
+
jira: boolean;
|
|
56
|
+
integrationTestsEnabled: boolean;
|
|
57
|
+
};
|
|
58
|
+
//# sourceMappingURL=auth-helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-helpers.d.ts","sourceRoot":"","sources":["../../src/utils/auth-helpers.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAOH,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,cAAc,GAAG,UAAU,GAAG,QAAQ,GAAG,MAAM,CAAC;CACzD;AAED,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAgB,aAAa,IAAI,UAAU,CA0B1C;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,eAAe,GAAG,IAAI,CAU3D;AAED;;;GAGG;AACH,wBAAgB,WAAW,IAAI,QAAQ,GAAG,IAAI,CAU7C;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,IAAI,OAAO,CAYnD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,OAAO,CAG9C;AAED,wBAAgB,yBAAyB,IAAI,OAAO,CAEnD;AAED,wBAAgB,kBAAkB,IAAI,OAAO,CAE5C;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,OAAO,CAAC;IACb,IAAI,EAAE,OAAO,CAAC;IACd,uBAAuB,EAAE,OAAO,CAAC;CAClC,CAQA"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Authentication Helpers for Issue Tracker Integration
|
|
3
|
+
*
|
|
4
|
+
* Provides unified authentication detection for GitHub, Azure DevOps, and Jira
|
|
5
|
+
* Works in both CLI (init flow) and test environments
|
|
6
|
+
*
|
|
7
|
+
* @module utils/auth-helpers
|
|
8
|
+
*/
|
|
9
|
+
import * as fs from 'fs';
|
|
10
|
+
import * as path from 'path';
|
|
11
|
+
import * as os from 'os';
|
|
12
|
+
import * as yaml from 'js-yaml';
|
|
13
|
+
/**
|
|
14
|
+
* Get GitHub authentication token
|
|
15
|
+
* Priority: GITHUB_TOKEN (CI) > GH_TOKEN (custom) > gh CLI config (local)
|
|
16
|
+
*/
|
|
17
|
+
export function getGitHubAuth() {
|
|
18
|
+
// 1. Check GITHUB_TOKEN (auto-provided in GitHub Actions)
|
|
19
|
+
if (process.env.GITHUB_TOKEN) {
|
|
20
|
+
return { token: process.env.GITHUB_TOKEN, source: 'GITHUB_TOKEN' };
|
|
21
|
+
}
|
|
22
|
+
// 2. Check GH_TOKEN (custom PAT from .env)
|
|
23
|
+
if (process.env.GH_TOKEN) {
|
|
24
|
+
return { token: process.env.GH_TOKEN, source: 'GH_TOKEN' };
|
|
25
|
+
}
|
|
26
|
+
// 3. Try to parse gh CLI config (~/.config/gh/hosts.yml)
|
|
27
|
+
try {
|
|
28
|
+
const ghConfigPath = path.join(os.homedir(), '.config', 'gh', 'hosts.yml');
|
|
29
|
+
if (fs.existsSync(ghConfigPath)) {
|
|
30
|
+
const config = yaml.load(fs.readFileSync(ghConfigPath, 'utf8'));
|
|
31
|
+
const token = config?.['github.com']?.oauth_token;
|
|
32
|
+
if (token) {
|
|
33
|
+
return { token, source: 'gh-cli' };
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
// Silently fail - gh CLI config is optional
|
|
39
|
+
}
|
|
40
|
+
return { token: '', source: 'none' };
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Get Azure DevOps authentication
|
|
44
|
+
* Requires: AZURE_DEVOPS_PAT, AZURE_DEVOPS_ORG, AZURE_DEVOPS_PROJECT
|
|
45
|
+
*/
|
|
46
|
+
export function getAzureDevOpsAuth() {
|
|
47
|
+
const pat = process.env.AZURE_DEVOPS_PAT;
|
|
48
|
+
const org = process.env.AZURE_DEVOPS_ORG;
|
|
49
|
+
const project = process.env.AZURE_DEVOPS_PROJECT;
|
|
50
|
+
if (!pat || !org || !project) {
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
return { pat, org, project };
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Get Jira authentication
|
|
57
|
+
* Requires: JIRA_API_TOKEN, JIRA_EMAIL, JIRA_DOMAIN
|
|
58
|
+
*/
|
|
59
|
+
export function getJiraAuth() {
|
|
60
|
+
const token = process.env.JIRA_API_TOKEN;
|
|
61
|
+
const email = process.env.JIRA_EMAIL;
|
|
62
|
+
const domain = process.env.JIRA_DOMAIN;
|
|
63
|
+
if (!token || !email || !domain) {
|
|
64
|
+
return null;
|
|
65
|
+
}
|
|
66
|
+
return { token, email, domain };
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Check if integration tests should run
|
|
70
|
+
* Returns true if RUN_INTEGRATION_TESTS=true or if in CI environment
|
|
71
|
+
*/
|
|
72
|
+
export function shouldRunIntegrationTests() {
|
|
73
|
+
// Explicitly enabled
|
|
74
|
+
if (process.env.RUN_INTEGRATION_TESTS === 'true') {
|
|
75
|
+
return true;
|
|
76
|
+
}
|
|
77
|
+
// In CI environment (GitHub Actions)
|
|
78
|
+
if (process.env.CI === 'true') {
|
|
79
|
+
return true;
|
|
80
|
+
}
|
|
81
|
+
return false;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Check if credentials are available for a service
|
|
85
|
+
*/
|
|
86
|
+
export function hasGitHubCredentials() {
|
|
87
|
+
const auth = getGitHubAuth();
|
|
88
|
+
return auth.source !== 'none';
|
|
89
|
+
}
|
|
90
|
+
export function hasAzureDevOpsCredentials() {
|
|
91
|
+
return getAzureDevOpsAuth() !== null;
|
|
92
|
+
}
|
|
93
|
+
export function hasJiraCredentials() {
|
|
94
|
+
return getJiraAuth() !== null;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Get credential status summary (for debugging)
|
|
98
|
+
*/
|
|
99
|
+
export function getCredentialStatus() {
|
|
100
|
+
const github = getGitHubAuth();
|
|
101
|
+
return {
|
|
102
|
+
github: github.source,
|
|
103
|
+
ado: hasAzureDevOpsCredentials(),
|
|
104
|
+
jira: hasJiraCredentials(),
|
|
105
|
+
integrationTestsEnabled: shouldRunIntegrationTests()
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=auth-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-helpers.js","sourceRoot":"","sources":["../../src/utils/auth-helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Environment File Utilities
|
|
3
|
+
*
|
|
4
|
+
* Parse, update, and validate .env files
|
|
5
|
+
*
|
|
6
|
+
* @module utils/env-file
|
|
7
|
+
*/
|
|
8
|
+
export interface EnvVariable {
|
|
9
|
+
key: string;
|
|
10
|
+
value: string;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Parse .env file content into key-value pairs
|
|
14
|
+
*
|
|
15
|
+
* @param content - Content of .env file
|
|
16
|
+
* @returns Record of key-value pairs
|
|
17
|
+
*/
|
|
18
|
+
export declare function parseEnvFile(content: string): Record<string, string>;
|
|
19
|
+
/**
|
|
20
|
+
* Update or add environment variable in .env content
|
|
21
|
+
*
|
|
22
|
+
* @param envContent - Current .env file content
|
|
23
|
+
* @param key - Environment variable key
|
|
24
|
+
* @param value - Environment variable value
|
|
25
|
+
* @returns Updated .env content
|
|
26
|
+
*/
|
|
27
|
+
export declare function updateEnvVar(envContent: string, key: string, value: string): string;
|
|
28
|
+
/**
|
|
29
|
+
* Update multiple environment variables
|
|
30
|
+
*
|
|
31
|
+
* @param envContent - Current .env file content
|
|
32
|
+
* @param vars - Array of environment variables to update
|
|
33
|
+
* @returns Updated .env content
|
|
34
|
+
*/
|
|
35
|
+
export declare function updateEnvVars(envContent: string, vars: EnvVariable[]): string;
|
|
36
|
+
/**
|
|
37
|
+
* Read .env file from project directory
|
|
38
|
+
*
|
|
39
|
+
* @param projectPath - Path to project root
|
|
40
|
+
* @returns Content of .env file, or empty string if not found
|
|
41
|
+
*/
|
|
42
|
+
export declare function readEnvFile(projectPath: string): string;
|
|
43
|
+
/**
|
|
44
|
+
* Write .env file to project directory
|
|
45
|
+
*
|
|
46
|
+
* @param projectPath - Path to project root
|
|
47
|
+
* @param content - Content to write
|
|
48
|
+
*/
|
|
49
|
+
export declare function writeEnvFile(projectPath: string, content: string): void;
|
|
50
|
+
/**
|
|
51
|
+
* Create .env file from .env.example template
|
|
52
|
+
*
|
|
53
|
+
* @param projectPath - Path to project root
|
|
54
|
+
* @returns Content of .env file (from template or empty)
|
|
55
|
+
*/
|
|
56
|
+
export declare function createEnvFromTemplate(projectPath: string): string;
|
|
57
|
+
/**
|
|
58
|
+
* Verify .env is in .gitignore
|
|
59
|
+
*
|
|
60
|
+
* @param projectPath - Path to project root
|
|
61
|
+
* @returns True if .env is gitignored, false otherwise
|
|
62
|
+
*/
|
|
63
|
+
export declare function isEnvGitignored(projectPath: string): boolean;
|
|
64
|
+
/**
|
|
65
|
+
* Add .env to .gitignore if not already present
|
|
66
|
+
*
|
|
67
|
+
* @param projectPath - Path to project root
|
|
68
|
+
*/
|
|
69
|
+
export declare function ensureEnvGitignored(projectPath: string): void;
|
|
70
|
+
/**
|
|
71
|
+
* Validate required environment variables are present
|
|
72
|
+
*
|
|
73
|
+
* @param envContent - Content of .env file
|
|
74
|
+
* @param requiredKeys - Array of required keys
|
|
75
|
+
* @returns Object with validation result and missing keys
|
|
76
|
+
*/
|
|
77
|
+
export declare function validateEnvVars(envContent: string, requiredKeys: string[]): {
|
|
78
|
+
valid: boolean;
|
|
79
|
+
missing: string[];
|
|
80
|
+
};
|
|
81
|
+
/**
|
|
82
|
+
* Check if .env file exists in project
|
|
83
|
+
*
|
|
84
|
+
* @param projectPath - Path to project root
|
|
85
|
+
* @returns True if .env exists, false otherwise
|
|
86
|
+
*/
|
|
87
|
+
export declare function envFileExists(projectPath: string): boolean;
|
|
88
|
+
//# sourceMappingURL=env-file.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env-file.d.ts","sourceRoot":"","sources":["../../src/utils/env-file.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAyBpE;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAWnF;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,WAAW,EAAE,GAClB,MAAM,CAQR;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAQvD;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAcvE;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAQjE;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAS5D;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAe7D;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,EAAE,GACrB;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAcvC;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAG1D"}
|