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 @@
|
|
|
1
|
+
{"version":3,"file":"jira.js","sourceRoot":"","sources":["../../../../src/cli/helpers/issue-tracker/jira.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Types for Issue Tracker Integration
|
|
3
|
+
*
|
|
4
|
+
* @module cli/helpers/issue-tracker/types
|
|
5
|
+
*/
|
|
6
|
+
import { SupportedLanguage } from '../../../core/i18n/types.js';
|
|
7
|
+
/**
|
|
8
|
+
* Supported issue trackers
|
|
9
|
+
*/
|
|
10
|
+
export type IssueTracker = 'github' | 'jira' | 'ado' | 'none';
|
|
11
|
+
/**
|
|
12
|
+
* GitHub instance type
|
|
13
|
+
*/
|
|
14
|
+
export type GitHubInstanceType = 'cloud' | 'enterprise';
|
|
15
|
+
/**
|
|
16
|
+
* Jira instance type
|
|
17
|
+
*/
|
|
18
|
+
export type JiraInstanceType = 'cloud' | 'server';
|
|
19
|
+
/**
|
|
20
|
+
* GitHub credentials
|
|
21
|
+
*/
|
|
22
|
+
export interface GitHubCredentials {
|
|
23
|
+
token: string;
|
|
24
|
+
instanceType: GitHubInstanceType;
|
|
25
|
+
apiEndpoint?: string;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Jira credentials
|
|
29
|
+
*/
|
|
30
|
+
export interface JiraCredentials {
|
|
31
|
+
token: string;
|
|
32
|
+
email: string;
|
|
33
|
+
domain: string;
|
|
34
|
+
instanceType: JiraInstanceType;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Azure DevOps credentials
|
|
38
|
+
*/
|
|
39
|
+
export interface AzureDevOpsCredentials {
|
|
40
|
+
pat: string;
|
|
41
|
+
org: string;
|
|
42
|
+
project: string;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Union type for all credentials
|
|
46
|
+
*/
|
|
47
|
+
export type TrackerCredentials = GitHubCredentials | JiraCredentials | AzureDevOpsCredentials;
|
|
48
|
+
/**
|
|
49
|
+
* Existing credentials source
|
|
50
|
+
*/
|
|
51
|
+
export interface ExistingCredentials {
|
|
52
|
+
source: string;
|
|
53
|
+
credentials: TrackerCredentials;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Connection validation result
|
|
57
|
+
*/
|
|
58
|
+
export interface ValidationResult {
|
|
59
|
+
success: boolean;
|
|
60
|
+
username?: string;
|
|
61
|
+
error?: string;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Setup options
|
|
65
|
+
*/
|
|
66
|
+
export interface SetupOptions {
|
|
67
|
+
projectPath: string;
|
|
68
|
+
language: SupportedLanguage;
|
|
69
|
+
maxRetries?: number;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Rate limit information
|
|
73
|
+
*/
|
|
74
|
+
export interface RateLimitInfo {
|
|
75
|
+
limit: number;
|
|
76
|
+
remaining: number;
|
|
77
|
+
reset: Date;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Rate limit error
|
|
81
|
+
*/
|
|
82
|
+
export declare class RateLimitError extends Error {
|
|
83
|
+
rateLimitInfo: RateLimitInfo;
|
|
84
|
+
constructor(message: string, rateLimitInfo: RateLimitInfo);
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/cli/helpers/issue-tracker/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAEhE;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;AAE9D;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,OAAO,GAAG,YAAY,CAAC;AAExD;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,QAAQ,CAAC;AAElD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,kBAAkB,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,gBAAgB,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAC1B,iBAAiB,GACjB,eAAe,GACf,sBAAsB,CAAC;AAE3B;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,kBAAkB,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,IAAI,CAAC;CACb;AAED;;GAEG;AACH,qBAAa,cAAe,SAAQ,KAAK;IAG9B,aAAa,EAAE,aAAa;gBADnC,OAAO,EAAE,MAAM,EACR,aAAa,EAAE,aAAa;CAKtC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Types for Issue Tracker Integration
|
|
3
|
+
*
|
|
4
|
+
* @module cli/helpers/issue-tracker/types
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Rate limit error
|
|
8
|
+
*/
|
|
9
|
+
export class RateLimitError extends Error {
|
|
10
|
+
constructor(message, rateLimitInfo) {
|
|
11
|
+
super(message);
|
|
12
|
+
this.rateLimitInfo = rateLimitInfo;
|
|
13
|
+
this.name = 'RateLimitError';
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/cli/helpers/issue-tracker/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA0FH;;GAEG;AACH,MAAM,OAAO,cAAe,SAAQ,KAAK;IACvC,YACE,OAAe,EACR,aAA4B;QAEnC,KAAK,CAAC,OAAO,CAAC,CAAC;QAFR,kBAAa,GAAb,aAAa,CAAe;QAGnC,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared Utilities for Issue Tracker Integration
|
|
3
|
+
*
|
|
4
|
+
* @module cli/helpers/issue-tracker/utils
|
|
5
|
+
*/
|
|
6
|
+
import type { IssueTracker, RateLimitInfo } from './types.js';
|
|
7
|
+
/**
|
|
8
|
+
* Detect default tracker based on project structure
|
|
9
|
+
*
|
|
10
|
+
* @param projectPath - Path to project root
|
|
11
|
+
* @returns Detected tracker or 'github' as default
|
|
12
|
+
*/
|
|
13
|
+
export declare function detectDefaultTracker(projectPath: string): IssueTracker;
|
|
14
|
+
/**
|
|
15
|
+
* Check if gh CLI is available
|
|
16
|
+
*
|
|
17
|
+
* @returns True if gh CLI is installed and in PATH
|
|
18
|
+
*/
|
|
19
|
+
export declare function isGhCliAvailable(): Promise<boolean>;
|
|
20
|
+
/**
|
|
21
|
+
* Check if Claude CLI is available
|
|
22
|
+
*
|
|
23
|
+
* @returns True if claude CLI is installed and in PATH
|
|
24
|
+
*/
|
|
25
|
+
export declare function isClaudeCliAvailable(): boolean;
|
|
26
|
+
/**
|
|
27
|
+
* Install tracker plugin via Claude CLI
|
|
28
|
+
*
|
|
29
|
+
* @param tracker - Tracker type
|
|
30
|
+
* @returns True if installation succeeded
|
|
31
|
+
*/
|
|
32
|
+
export declare function installTrackerPlugin(tracker: IssueTracker): boolean;
|
|
33
|
+
/**
|
|
34
|
+
* Sleep for specified milliseconds
|
|
35
|
+
*
|
|
36
|
+
* @param ms - Milliseconds to sleep
|
|
37
|
+
*/
|
|
38
|
+
export declare function sleep(ms: number): Promise<void>;
|
|
39
|
+
/**
|
|
40
|
+
* Exponential backoff for rate limiting
|
|
41
|
+
*
|
|
42
|
+
* @param attempt - Current attempt number (0-indexed)
|
|
43
|
+
* @returns Milliseconds to wait
|
|
44
|
+
*/
|
|
45
|
+
export declare function getBackoffDelay(attempt: number): number;
|
|
46
|
+
/**
|
|
47
|
+
* Retry an async operation with exponential backoff
|
|
48
|
+
*
|
|
49
|
+
* @param fn - Function to retry
|
|
50
|
+
* @param maxRetries - Maximum number of retries
|
|
51
|
+
* @returns Result of function
|
|
52
|
+
*/
|
|
53
|
+
export declare function retryWithBackoff<T>(fn: () => Promise<T>, maxRetries?: number): Promise<T>;
|
|
54
|
+
/**
|
|
55
|
+
* Parse rate limit headers from fetch response
|
|
56
|
+
*
|
|
57
|
+
* @param headers - Response headers
|
|
58
|
+
* @returns Rate limit info or null
|
|
59
|
+
*/
|
|
60
|
+
export declare function parseRateLimitHeaders(headers: Headers): RateLimitInfo | null;
|
|
61
|
+
/**
|
|
62
|
+
* Check if response is rate limited
|
|
63
|
+
*
|
|
64
|
+
* @param response - Fetch response
|
|
65
|
+
* @returns Rate limit info if rate limited, null otherwise
|
|
66
|
+
*/
|
|
67
|
+
export declare function checkRateLimit(response: Response): RateLimitInfo | null;
|
|
68
|
+
/**
|
|
69
|
+
* Validate URL format
|
|
70
|
+
*
|
|
71
|
+
* @param url - URL to validate
|
|
72
|
+
* @returns True if valid URL
|
|
73
|
+
*/
|
|
74
|
+
export declare function isValidUrl(url: string): boolean;
|
|
75
|
+
/**
|
|
76
|
+
* Validate email format
|
|
77
|
+
*
|
|
78
|
+
* @param email - Email to validate
|
|
79
|
+
* @returns True if valid email
|
|
80
|
+
*/
|
|
81
|
+
export declare function isValidEmail(email: string): boolean;
|
|
82
|
+
/**
|
|
83
|
+
* Mask sensitive string (show first 4 and last 4 characters)
|
|
84
|
+
*
|
|
85
|
+
* @param value - String to mask
|
|
86
|
+
* @returns Masked string
|
|
87
|
+
*/
|
|
88
|
+
export declare function maskSensitiveValue(value: string): string;
|
|
89
|
+
/**
|
|
90
|
+
* Get plugin name for tracker
|
|
91
|
+
*
|
|
92
|
+
* @param tracker - Tracker type
|
|
93
|
+
* @returns Plugin name
|
|
94
|
+
*/
|
|
95
|
+
export declare function getPluginName(tracker: IssueTracker): string;
|
|
96
|
+
/**
|
|
97
|
+
* Get tracker display name
|
|
98
|
+
*
|
|
99
|
+
* @param tracker - Tracker type
|
|
100
|
+
* @returns Display name
|
|
101
|
+
*/
|
|
102
|
+
export declare function getTrackerDisplayName(tracker: IssueTracker): string;
|
|
103
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../src/cli/helpers/issue-tracker/utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,KAAK,EAAE,YAAY,EAAkB,aAAa,EAAE,MAAM,YAAY,CAAC;AAE9E;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,YAAY,CAkBtE;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,OAAO,CAAC,CAOzD;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,IAAI,OAAO,CAO9C;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAgBnE;AAED;;;;GAIG;AACH,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/C;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAIvD;AAED;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CAAC,CAAC,EACtC,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,UAAU,GAAE,MAAU,GACrB,OAAO,CAAC,CAAC,CAAC,CA+BZ;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,aAAa,GAAG,IAAI,CAc5E;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,QAAQ,GAAG,aAAa,GAAG,IAAI,CAMvE;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAO/C;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAGnD;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAUxD;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,CAG3D;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,CAWnE"}
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared Utilities for Issue Tracker Integration
|
|
3
|
+
*
|
|
4
|
+
* @module cli/helpers/issue-tracker/utils
|
|
5
|
+
*/
|
|
6
|
+
import * as fs from 'fs';
|
|
7
|
+
import * as path from 'path';
|
|
8
|
+
import chalk from 'chalk';
|
|
9
|
+
import { execFileNoThrowSync } from '../../../utils/execFileNoThrow.js';
|
|
10
|
+
/**
|
|
11
|
+
* Detect default tracker based on project structure
|
|
12
|
+
*
|
|
13
|
+
* @param projectPath - Path to project root
|
|
14
|
+
* @returns Detected tracker or 'github' as default
|
|
15
|
+
*/
|
|
16
|
+
export function detectDefaultTracker(projectPath) {
|
|
17
|
+
// Check .git/config for remote URL
|
|
18
|
+
const gitConfigPath = path.join(projectPath, '.git', 'config');
|
|
19
|
+
if (fs.existsSync(gitConfigPath)) {
|
|
20
|
+
try {
|
|
21
|
+
const config = fs.readFileSync(gitConfigPath, 'utf-8');
|
|
22
|
+
if (config.includes('github.com'))
|
|
23
|
+
return 'github';
|
|
24
|
+
if (config.includes('dev.azure.com') || config.includes('visualstudio.com'))
|
|
25
|
+
return 'ado';
|
|
26
|
+
// Bitbucket not supported yet
|
|
27
|
+
if (config.includes('bitbucket.org'))
|
|
28
|
+
return 'github'; // Fallback
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
// Ignore errors, use default
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return 'github'; // Default to GitHub (most common)
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Check if gh CLI is available
|
|
38
|
+
*
|
|
39
|
+
* @returns True if gh CLI is installed and in PATH
|
|
40
|
+
*/
|
|
41
|
+
export async function isGhCliAvailable() {
|
|
42
|
+
try {
|
|
43
|
+
const result = execFileNoThrowSync('gh', ['--version']);
|
|
44
|
+
return result.success;
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Check if Claude CLI is available
|
|
52
|
+
*
|
|
53
|
+
* @returns True if claude CLI is installed and in PATH
|
|
54
|
+
*/
|
|
55
|
+
export function isClaudeCliAvailable() {
|
|
56
|
+
try {
|
|
57
|
+
const result = execFileNoThrowSync('claude', ['--version']);
|
|
58
|
+
return result.success;
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Install tracker plugin via Claude CLI
|
|
66
|
+
*
|
|
67
|
+
* @param tracker - Tracker type
|
|
68
|
+
* @returns True if installation succeeded
|
|
69
|
+
*/
|
|
70
|
+
export function installTrackerPlugin(tracker) {
|
|
71
|
+
if (tracker === 'none')
|
|
72
|
+
return true;
|
|
73
|
+
const pluginName = `specweave-${tracker}`;
|
|
74
|
+
try {
|
|
75
|
+
const result = execFileNoThrowSync('claude', [
|
|
76
|
+
'plugin',
|
|
77
|
+
'install',
|
|
78
|
+
`${pluginName}@specweave`
|
|
79
|
+
]);
|
|
80
|
+
return result.success;
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
return false;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Sleep for specified milliseconds
|
|
88
|
+
*
|
|
89
|
+
* @param ms - Milliseconds to sleep
|
|
90
|
+
*/
|
|
91
|
+
export function sleep(ms) {
|
|
92
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Exponential backoff for rate limiting
|
|
96
|
+
*
|
|
97
|
+
* @param attempt - Current attempt number (0-indexed)
|
|
98
|
+
* @returns Milliseconds to wait
|
|
99
|
+
*/
|
|
100
|
+
export function getBackoffDelay(attempt) {
|
|
101
|
+
// Exponential backoff: 1s, 2s, 4s, 8s, 16s
|
|
102
|
+
const baseDelay = 1000;
|
|
103
|
+
return baseDelay * Math.pow(2, attempt);
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Retry an async operation with exponential backoff
|
|
107
|
+
*
|
|
108
|
+
* @param fn - Function to retry
|
|
109
|
+
* @param maxRetries - Maximum number of retries
|
|
110
|
+
* @returns Result of function
|
|
111
|
+
*/
|
|
112
|
+
export async function retryWithBackoff(fn, maxRetries = 3) {
|
|
113
|
+
let lastError = null;
|
|
114
|
+
for (let attempt = 0; attempt <= maxRetries; attempt++) {
|
|
115
|
+
try {
|
|
116
|
+
return await fn();
|
|
117
|
+
}
|
|
118
|
+
catch (error) {
|
|
119
|
+
lastError = error;
|
|
120
|
+
// Check if it's a rate limit error
|
|
121
|
+
if (error.name === 'RateLimitError') {
|
|
122
|
+
const rateLimitError = error;
|
|
123
|
+
const resetTime = rateLimitError.rateLimitInfo.reset.getTime();
|
|
124
|
+
const now = Date.now();
|
|
125
|
+
const waitMs = Math.max(0, resetTime - now);
|
|
126
|
+
console.log(chalk.yellow(`\n⏳ Rate limit exceeded. Waiting ${Math.ceil(waitMs / 1000)}s...`));
|
|
127
|
+
await sleep(waitMs + 1000); // Add 1s buffer
|
|
128
|
+
continue;
|
|
129
|
+
}
|
|
130
|
+
// For other errors, use exponential backoff
|
|
131
|
+
if (attempt < maxRetries) {
|
|
132
|
+
const delay = getBackoffDelay(attempt);
|
|
133
|
+
console.log(chalk.yellow(`\n⏳ Retry ${attempt + 1}/${maxRetries} after ${delay}ms...`));
|
|
134
|
+
await sleep(delay);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
throw lastError || new Error('Operation failed after retries');
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Parse rate limit headers from fetch response
|
|
142
|
+
*
|
|
143
|
+
* @param headers - Response headers
|
|
144
|
+
* @returns Rate limit info or null
|
|
145
|
+
*/
|
|
146
|
+
export function parseRateLimitHeaders(headers) {
|
|
147
|
+
const limit = headers.get('x-ratelimit-limit');
|
|
148
|
+
const remaining = headers.get('x-ratelimit-remaining');
|
|
149
|
+
const reset = headers.get('x-ratelimit-reset');
|
|
150
|
+
if (!limit || !remaining || !reset) {
|
|
151
|
+
return null;
|
|
152
|
+
}
|
|
153
|
+
return {
|
|
154
|
+
limit: parseInt(limit, 10),
|
|
155
|
+
remaining: parseInt(remaining, 10),
|
|
156
|
+
reset: new Date(parseInt(reset, 10) * 1000)
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Check if response is rate limited
|
|
161
|
+
*
|
|
162
|
+
* @param response - Fetch response
|
|
163
|
+
* @returns Rate limit info if rate limited, null otherwise
|
|
164
|
+
*/
|
|
165
|
+
export function checkRateLimit(response) {
|
|
166
|
+
if (response.status === 429 || response.status === 403) {
|
|
167
|
+
return parseRateLimitHeaders(response.headers);
|
|
168
|
+
}
|
|
169
|
+
return null;
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Validate URL format
|
|
173
|
+
*
|
|
174
|
+
* @param url - URL to validate
|
|
175
|
+
* @returns True if valid URL
|
|
176
|
+
*/
|
|
177
|
+
export function isValidUrl(url) {
|
|
178
|
+
try {
|
|
179
|
+
new URL(url);
|
|
180
|
+
return true;
|
|
181
|
+
}
|
|
182
|
+
catch {
|
|
183
|
+
return false;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Validate email format
|
|
188
|
+
*
|
|
189
|
+
* @param email - Email to validate
|
|
190
|
+
* @returns True if valid email
|
|
191
|
+
*/
|
|
192
|
+
export function isValidEmail(email) {
|
|
193
|
+
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
194
|
+
return emailRegex.test(email);
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Mask sensitive string (show first 4 and last 4 characters)
|
|
198
|
+
*
|
|
199
|
+
* @param value - String to mask
|
|
200
|
+
* @returns Masked string
|
|
201
|
+
*/
|
|
202
|
+
export function maskSensitiveValue(value) {
|
|
203
|
+
if (value.length <= 8) {
|
|
204
|
+
return '*'.repeat(value.length);
|
|
205
|
+
}
|
|
206
|
+
const first4 = value.substring(0, 4);
|
|
207
|
+
const last4 = value.substring(value.length - 4);
|
|
208
|
+
const masked = '*'.repeat(value.length - 8);
|
|
209
|
+
return `${first4}${masked}${last4}`;
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Get plugin name for tracker
|
|
213
|
+
*
|
|
214
|
+
* @param tracker - Tracker type
|
|
215
|
+
* @returns Plugin name
|
|
216
|
+
*/
|
|
217
|
+
export function getPluginName(tracker) {
|
|
218
|
+
if (tracker === 'none')
|
|
219
|
+
return '';
|
|
220
|
+
return `specweave-${tracker}`;
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Get tracker display name
|
|
224
|
+
*
|
|
225
|
+
* @param tracker - Tracker type
|
|
226
|
+
* @returns Display name
|
|
227
|
+
*/
|
|
228
|
+
export function getTrackerDisplayName(tracker) {
|
|
229
|
+
switch (tracker) {
|
|
230
|
+
case 'github':
|
|
231
|
+
return 'GitHub Issues';
|
|
232
|
+
case 'jira':
|
|
233
|
+
return 'Jira';
|
|
234
|
+
case 'ado':
|
|
235
|
+
return 'Azure DevOps';
|
|
236
|
+
case 'none':
|
|
237
|
+
return 'None';
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/cli/helpers/issue-tracker/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Increment Limits
|
|
3
|
+
*
|
|
4
|
+
* Type-based limits for concurrent active increments.
|
|
5
|
+
* Part of increment 0007: Smart Status Management
|
|
6
|
+
*/
|
|
7
|
+
import { IncrementType, IncrementMetadata } from '../types/increment-metadata';
|
|
8
|
+
/**
|
|
9
|
+
* Limit check result
|
|
10
|
+
*/
|
|
11
|
+
export interface LimitCheckResult {
|
|
12
|
+
/** Whether the limit is exceeded */
|
|
13
|
+
exceeded: boolean;
|
|
14
|
+
/** Current count of active increments of this type */
|
|
15
|
+
current: number;
|
|
16
|
+
/** Maximum allowed (null = unlimited) */
|
|
17
|
+
limit: number | null;
|
|
18
|
+
/** Warning message if limit exceeded */
|
|
19
|
+
warning?: string;
|
|
20
|
+
/** Severity level: info, warning, error */
|
|
21
|
+
severity: 'info' | 'warning' | 'error';
|
|
22
|
+
/** Suggested actions */
|
|
23
|
+
suggestions?: string[];
|
|
24
|
+
/** Active increments of this type */
|
|
25
|
+
activeIncrements?: IncrementMetadata[];
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Context switching cost warning
|
|
29
|
+
*/
|
|
30
|
+
export interface ContextSwitchWarning {
|
|
31
|
+
/** Whether warning should be shown */
|
|
32
|
+
show: boolean;
|
|
33
|
+
/** Estimated productivity cost (%) */
|
|
34
|
+
productivityCost: string;
|
|
35
|
+
/** Message to display */
|
|
36
|
+
message: string;
|
|
37
|
+
/** Options for user */
|
|
38
|
+
options: Array<{
|
|
39
|
+
label: string;
|
|
40
|
+
value: string;
|
|
41
|
+
description: string;
|
|
42
|
+
}>;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Check if creating a new increment would exceed type-based limits
|
|
46
|
+
*/
|
|
47
|
+
export declare function checkIncrementLimits(type: IncrementType): LimitCheckResult;
|
|
48
|
+
/**
|
|
49
|
+
* Check all increment types and return warnings
|
|
50
|
+
*/
|
|
51
|
+
export declare function checkAllLimits(): Record<IncrementType, LimitCheckResult>;
|
|
52
|
+
/**
|
|
53
|
+
* Get context switching warning for starting a new increment
|
|
54
|
+
*/
|
|
55
|
+
export declare function getContextSwitchWarning(newType: IncrementType): ContextSwitchWarning;
|
|
56
|
+
/**
|
|
57
|
+
* Get summary of all limits
|
|
58
|
+
*/
|
|
59
|
+
export declare function getLimitsSummary(): string;
|
|
60
|
+
/**
|
|
61
|
+
* Check if starting a new increment of this type would be allowed
|
|
62
|
+
* (considering limits)
|
|
63
|
+
*/
|
|
64
|
+
export declare function canStartIncrement(type: IncrementType): {
|
|
65
|
+
allowed: boolean;
|
|
66
|
+
reason?: string;
|
|
67
|
+
};
|
|
68
|
+
//# sourceMappingURL=limits.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"limits.d.ts","sourceRoot":"","sources":["../../../src/core/increment/limits.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EACL,aAAa,EAGb,iBAAiB,EAClB,MAAM,6BAA6B,CAAC;AAErC;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,oCAAoC;IACpC,QAAQ,EAAE,OAAO,CAAC;IAElB,sDAAsD;IACtD,OAAO,EAAE,MAAM,CAAC;IAEhB,yCAAyC;IACzC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAErB,wCAAwC;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,2CAA2C;IAC3C,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;IAEvC,wBAAwB;IACxB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IAEvB,qCAAqC;IACrC,gBAAgB,CAAC,EAAE,iBAAiB,EAAE,CAAC;CACxC;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,sCAAsC;IACtC,IAAI,EAAE,OAAO,CAAC;IAEd,sCAAsC;IACtC,gBAAgB,EAAE,MAAM,CAAC;IAEzB,yBAAyB;IACzB,OAAO,EAAE,MAAM,CAAC;IAEhB,uBAAuB;IACvB,OAAO,EAAE,KAAK,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC,CAAC;CACJ;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,aAAa,GAAG,gBAAgB,CAwC1E;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAQxE;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,aAAa,GAAG,oBAAoB,CAuDpF;AA0GD;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CAgBzC;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,aAAa,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAW5F"}
|