vibe-fabric 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/LICENSE +21 -0
- package/README.md +171 -0
- package/dist/cli/commands/claude.d.ts +19 -0
- package/dist/cli/commands/claude.d.ts.map +1 -0
- package/dist/cli/commands/claude.js +107 -0
- package/dist/cli/commands/claude.js.map +1 -0
- package/dist/cli/commands/coverage.d.ts +37 -0
- package/dist/cli/commands/coverage.d.ts.map +1 -0
- package/dist/cli/commands/coverage.js +374 -0
- package/dist/cli/commands/coverage.js.map +1 -0
- package/dist/cli/commands/doctor.d.ts +30 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -0
- package/dist/cli/commands/doctor.js +187 -0
- package/dist/cli/commands/doctor.js.map +1 -0
- package/dist/cli/commands/gaps.d.ts +52 -0
- package/dist/cli/commands/gaps.d.ts.map +1 -0
- package/dist/cli/commands/gaps.js +487 -0
- package/dist/cli/commands/gaps.js.map +1 -0
- package/dist/cli/commands/help.d.ts +7 -0
- package/dist/cli/commands/help.d.ts.map +1 -0
- package/dist/cli/commands/help.js +51 -0
- package/dist/cli/commands/help.js.map +1 -0
- package/dist/cli/commands/init.d.ts +39 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +246 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/prd.d.ts +30 -0
- package/dist/cli/commands/prd.d.ts.map +1 -0
- package/dist/cli/commands/prd.js +179 -0
- package/dist/cli/commands/prd.js.map +1 -0
- package/dist/cli/commands/repo/add.d.ts +36 -0
- package/dist/cli/commands/repo/add.d.ts.map +1 -0
- package/dist/cli/commands/repo/add.js +303 -0
- package/dist/cli/commands/repo/add.js.map +1 -0
- package/dist/cli/commands/scope.d.ts +36 -0
- package/dist/cli/commands/scope.d.ts.map +1 -0
- package/dist/cli/commands/scope.js +312 -0
- package/dist/cli/commands/scope.js.map +1 -0
- package/dist/cli/commands/send.d.ts +43 -0
- package/dist/cli/commands/send.d.ts.map +1 -0
- package/dist/cli/commands/send.js +469 -0
- package/dist/cli/commands/send.js.map +1 -0
- package/dist/cli/commands/status.d.ts +32 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +422 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/commands/sync.d.ts +37 -0
- package/dist/cli/commands/sync.d.ts.map +1 -0
- package/dist/cli/commands/sync.js +299 -0
- package/dist/cli/commands/sync.js.map +1 -0
- package/dist/cli/commands/version.d.ts +7 -0
- package/dist/cli/commands/version.d.ts.map +1 -0
- package/dist/cli/commands/version.js +45 -0
- package/dist/cli/commands/version.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +65 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/ui/components/ActiveScopes.d.ts +13 -0
- package/dist/cli/ui/components/ActiveScopes.d.ts.map +1 -0
- package/dist/cli/ui/components/ActiveScopes.js +25 -0
- package/dist/cli/ui/components/ActiveScopes.js.map +1 -0
- package/dist/cli/ui/components/EmptyState.d.ts +24 -0
- package/dist/cli/ui/components/EmptyState.d.ts.map +1 -0
- package/dist/cli/ui/components/EmptyState.js +13 -0
- package/dist/cli/ui/components/EmptyState.js.map +1 -0
- package/dist/cli/ui/components/Header.d.ts +11 -0
- package/dist/cli/ui/components/Header.d.ts.map +1 -0
- package/dist/cli/ui/components/Header.js +32 -0
- package/dist/cli/ui/components/Header.js.map +1 -0
- package/dist/cli/ui/components/PrdCoverage.d.ts +12 -0
- package/dist/cli/ui/components/PrdCoverage.d.ts.map +1 -0
- package/dist/cli/ui/components/PrdCoverage.js +15 -0
- package/dist/cli/ui/components/PrdCoverage.js.map +1 -0
- package/dist/cli/ui/components/RecentActivity.d.ts +12 -0
- package/dist/cli/ui/components/RecentActivity.d.ts.map +1 -0
- package/dist/cli/ui/components/RecentActivity.js +40 -0
- package/dist/cli/ui/components/RecentActivity.js.map +1 -0
- package/dist/cli/ui/components/RepoList.d.ts +12 -0
- package/dist/cli/ui/components/RepoList.d.ts.map +1 -0
- package/dist/cli/ui/components/RepoList.js +24 -0
- package/dist/cli/ui/components/RepoList.js.map +1 -0
- package/dist/cli/ui/components/Shortcuts.d.ts +7 -0
- package/dist/cli/ui/components/Shortcuts.d.ts.map +1 -0
- package/dist/cli/ui/components/Shortcuts.js +7 -0
- package/dist/cli/ui/components/Shortcuts.js.map +1 -0
- package/dist/cli/ui/components/index.d.ts +12 -0
- package/dist/cli/ui/components/index.d.ts.map +1 -0
- package/dist/cli/ui/components/index.js +12 -0
- package/dist/cli/ui/components/index.js.map +1 -0
- package/dist/cli/ui/dashboard.d.ts +9 -0
- package/dist/cli/ui/dashboard.d.ts.map +1 -0
- package/dist/cli/ui/dashboard.js +102 -0
- package/dist/cli/ui/dashboard.js.map +1 -0
- package/dist/core/commands.d.ts +32 -0
- package/dist/core/commands.d.ts.map +1 -0
- package/dist/core/commands.js +361 -0
- package/dist/core/commands.js.map +1 -0
- package/dist/core/config.d.ts +18 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js +78 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/coverage.d.ts +32 -0
- package/dist/core/coverage.d.ts.map +1 -0
- package/dist/core/coverage.js +286 -0
- package/dist/core/coverage.js.map +1 -0
- package/dist/core/dashboard/data.d.ts +73 -0
- package/dist/core/dashboard/data.d.ts.map +1 -0
- package/dist/core/dashboard/data.js +250 -0
- package/dist/core/dashboard/data.js.map +1 -0
- package/dist/core/dependencies.d.ts +39 -0
- package/dist/core/dependencies.d.ts.map +1 -0
- package/dist/core/dependencies.js +160 -0
- package/dist/core/dependencies.js.map +1 -0
- package/dist/core/doctor/auth.d.ts +22 -0
- package/dist/core/doctor/auth.d.ts.map +1 -0
- package/dist/core/doctor/auth.js +147 -0
- package/dist/core/doctor/auth.js.map +1 -0
- package/dist/core/doctor/config.d.ts +26 -0
- package/dist/core/doctor/config.d.ts.map +1 -0
- package/dist/core/doctor/config.js +172 -0
- package/dist/core/doctor/config.js.map +1 -0
- package/dist/core/doctor/environment.d.ts +26 -0
- package/dist/core/doctor/environment.d.ts.map +1 -0
- package/dist/core/doctor/environment.js +145 -0
- package/dist/core/doctor/environment.js.map +1 -0
- package/dist/core/doctor/index.d.ts +44 -0
- package/dist/core/doctor/index.d.ts.map +1 -0
- package/dist/core/doctor/index.js +134 -0
- package/dist/core/doctor/index.js.map +1 -0
- package/dist/core/doctor/repos.d.ts +22 -0
- package/dist/core/doctor/repos.d.ts.map +1 -0
- package/dist/core/doctor/repos.js +262 -0
- package/dist/core/doctor/repos.js.map +1 -0
- package/dist/core/doctor/sync.d.ts +18 -0
- package/dist/core/doctor/sync.d.ts.map +1 -0
- package/dist/core/doctor/sync.js +146 -0
- package/dist/core/doctor/sync.js.map +1 -0
- package/dist/core/gaps.d.ts +70 -0
- package/dist/core/gaps.d.ts.map +1 -0
- package/dist/core/gaps.js +448 -0
- package/dist/core/gaps.js.map +1 -0
- package/dist/core/github.d.ts +38 -0
- package/dist/core/github.d.ts.map +1 -0
- package/dist/core/github.js +102 -0
- package/dist/core/github.js.map +1 -0
- package/dist/core/prd/analyzer.d.ts +44 -0
- package/dist/core/prd/analyzer.d.ts.map +1 -0
- package/dist/core/prd/analyzer.js +259 -0
- package/dist/core/prd/analyzer.js.map +1 -0
- package/dist/core/prd/check.d.ts +17 -0
- package/dist/core/prd/check.d.ts.map +1 -0
- package/dist/core/prd/check.js +154 -0
- package/dist/core/prd/check.js.map +1 -0
- package/dist/core/prd/index.d.ts +6 -0
- package/dist/core/prd/index.d.ts.map +1 -0
- package/dist/core/prd/index.js +6 -0
- package/dist/core/prd/index.js.map +1 -0
- package/dist/core/project.d.ts +13 -0
- package/dist/core/project.d.ts.map +1 -0
- package/dist/core/project.js +810 -0
- package/dist/core/project.js.map +1 -0
- package/dist/core/prompts.d.ts +52 -0
- package/dist/core/prompts.d.ts.map +1 -0
- package/dist/core/prompts.js +266 -0
- package/dist/core/prompts.js.map +1 -0
- package/dist/core/repo/framework.d.ts +38 -0
- package/dist/core/repo/framework.d.ts.map +1 -0
- package/dist/core/repo/framework.js +142 -0
- package/dist/core/repo/framework.js.map +1 -0
- package/dist/core/repo/index.d.ts +6 -0
- package/dist/core/repo/index.d.ts.map +1 -0
- package/dist/core/repo/index.js +6 -0
- package/dist/core/repo/index.js.map +1 -0
- package/dist/core/repo/templates/claude-agents.d.ts +6 -0
- package/dist/core/repo/templates/claude-agents.d.ts.map +1 -0
- package/dist/core/repo/templates/claude-agents.js +173 -0
- package/dist/core/repo/templates/claude-agents.js.map +1 -0
- package/dist/core/repo/templates/claude-commands.d.ts +6 -0
- package/dist/core/repo/templates/claude-commands.d.ts.map +1 -0
- package/dist/core/repo/templates/claude-commands.js +278 -0
- package/dist/core/repo/templates/claude-commands.js.map +1 -0
- package/dist/core/repo/templates/claude-prompts.d.ts +6 -0
- package/dist/core/repo/templates/claude-prompts.d.ts.map +1 -0
- package/dist/core/repo/templates/claude-prompts.js +258 -0
- package/dist/core/repo/templates/claude-prompts.js.map +1 -0
- package/dist/core/repo/templates/claude-scripts.d.ts +6 -0
- package/dist/core/repo/templates/claude-scripts.d.ts.map +1 -0
- package/dist/core/repo/templates/claude-scripts.js +212 -0
- package/dist/core/repo/templates/claude-scripts.js.map +1 -0
- package/dist/core/repo/templates/index.d.ts +22 -0
- package/dist/core/repo/templates/index.d.ts.map +1 -0
- package/dist/core/repo/templates/index.js +121 -0
- package/dist/core/repo/templates/index.js.map +1 -0
- package/dist/core/repo/templates/vibe-readme.d.ts +6 -0
- package/dist/core/repo/templates/vibe-readme.d.ts.map +1 -0
- package/dist/core/repo/templates/vibe-readme.js +204 -0
- package/dist/core/repo/templates/vibe-readme.js.map +1 -0
- package/dist/core/repo/templates/vibe-scripts.d.ts +6 -0
- package/dist/core/repo/templates/vibe-scripts.d.ts.map +1 -0
- package/dist/core/repo/templates/vibe-scripts.js +308 -0
- package/dist/core/repo/templates/vibe-scripts.js.map +1 -0
- package/dist/core/repo/validation.d.ts +46 -0
- package/dist/core/repo/validation.d.ts.map +1 -0
- package/dist/core/repo/validation.js +154 -0
- package/dist/core/repo/validation.js.map +1 -0
- package/dist/core/runner.d.ts +38 -0
- package/dist/core/runner.d.ts.map +1 -0
- package/dist/core/runner.js +124 -0
- package/dist/core/runner.js.map +1 -0
- package/dist/core/send.d.ts +83 -0
- package/dist/core/send.d.ts.map +1 -0
- package/dist/core/send.js +565 -0
- package/dist/core/send.js.map +1 -0
- package/dist/core/status.d.ts +76 -0
- package/dist/core/status.d.ts.map +1 -0
- package/dist/core/status.js +430 -0
- package/dist/core/status.js.map +1 -0
- package/dist/core/sync/aggregator.d.ts +22 -0
- package/dist/core/sync/aggregator.d.ts.map +1 -0
- package/dist/core/sync/aggregator.js +278 -0
- package/dist/core/sync/aggregator.js.map +1 -0
- package/dist/core/sync/completion.d.ts +37 -0
- package/dist/core/sync/completion.d.ts.map +1 -0
- package/dist/core/sync/completion.js +264 -0
- package/dist/core/sync/completion.js.map +1 -0
- package/dist/core/sync/index.d.ts +51 -0
- package/dist/core/sync/index.d.ts.map +1 -0
- package/dist/core/sync/index.js +200 -0
- package/dist/core/sync/index.js.map +1 -0
- package/dist/core/sync/scanner.d.ts +39 -0
- package/dist/core/sync/scanner.d.ts.map +1 -0
- package/dist/core/sync/scanner.js +364 -0
- package/dist/core/sync/scanner.js.map +1 -0
- package/dist/types/config.d.ts +157 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +58 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/coverage.d.ts +100 -0
- package/dist/types/coverage.d.ts.map +1 -0
- package/dist/types/coverage.js +8 -0
- package/dist/types/coverage.js.map +1 -0
- package/dist/types/doctor.d.ts +68 -0
- package/dist/types/doctor.d.ts.map +1 -0
- package/dist/types/doctor.js +5 -0
- package/dist/types/doctor.js.map +1 -0
- package/dist/types/gaps.d.ts +129 -0
- package/dist/types/gaps.d.ts.map +1 -0
- package/dist/types/gaps.js +8 -0
- package/dist/types/gaps.js.map +1 -0
- package/dist/types/prompts.d.ts +99 -0
- package/dist/types/prompts.d.ts.map +1 -0
- package/dist/types/prompts.js +5 -0
- package/dist/types/prompts.js.map +1 -0
- package/dist/types/runner.d.ts +156 -0
- package/dist/types/runner.d.ts.map +1 -0
- package/dist/types/runner.js +41 -0
- package/dist/types/runner.js.map +1 -0
- package/dist/types/send.d.ts +157 -0
- package/dist/types/send.d.ts.map +1 -0
- package/dist/types/send.js +18 -0
- package/dist/types/send.js.map +1 -0
- package/dist/types/status.d.ts +150 -0
- package/dist/types/status.d.ts.map +1 -0
- package/dist/types/status.js +15 -0
- package/dist/types/status.js.map +1 -0
- package/dist/types/sync.d.ts +259 -0
- package/dist/types/sync.d.ts.map +1 -0
- package/dist/types/sync.js +38 -0
- package/dist/types/sync.js.map +1 -0
- package/package.json +72 -0
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Environment health checks
|
|
3
|
+
* Checks Node.js version, UV, and Claude Code installation
|
|
4
|
+
*/
|
|
5
|
+
import { execSync } from 'child_process';
|
|
6
|
+
/**
|
|
7
|
+
* Get the current Node.js version
|
|
8
|
+
*/
|
|
9
|
+
function getNodeVersion() {
|
|
10
|
+
const full = process.version;
|
|
11
|
+
const major = parseInt(full.slice(1).split('.')[0] ?? '0', 10);
|
|
12
|
+
return { major, full };
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Check if a command exists and optionally get its version
|
|
16
|
+
*/
|
|
17
|
+
function checkCommand(cmd) {
|
|
18
|
+
try {
|
|
19
|
+
const output = execSync(`${cmd} --version`, { encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'] }).trim();
|
|
20
|
+
// Extract version number from output (usually first line, may include 'v' prefix)
|
|
21
|
+
const versionMatch = output.match(/\d+\.\d+(\.\d+)?/);
|
|
22
|
+
return {
|
|
23
|
+
installed: true,
|
|
24
|
+
version: versionMatch ? versionMatch[0] : output.split('\n')[0],
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
return { installed: false };
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Node.js version check
|
|
33
|
+
*/
|
|
34
|
+
export const nodeVersionCheck = {
|
|
35
|
+
name: 'Node.js version',
|
|
36
|
+
category: 'environment',
|
|
37
|
+
critical: false,
|
|
38
|
+
run: async () => {
|
|
39
|
+
const { major, full } = getNodeVersion();
|
|
40
|
+
const minVersion = 18;
|
|
41
|
+
if (major >= minVersion) {
|
|
42
|
+
return {
|
|
43
|
+
name: 'Node.js version',
|
|
44
|
+
category: 'environment',
|
|
45
|
+
status: 'passed',
|
|
46
|
+
details: full,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
return {
|
|
50
|
+
name: 'Node.js version',
|
|
51
|
+
category: 'environment',
|
|
52
|
+
status: 'failed',
|
|
53
|
+
details: `${full} (requires >= ${minVersion})`,
|
|
54
|
+
fix: `Install Node.js ${minVersion} or later: https://nodejs.org`,
|
|
55
|
+
};
|
|
56
|
+
},
|
|
57
|
+
};
|
|
58
|
+
/**
|
|
59
|
+
* UV installation check
|
|
60
|
+
*/
|
|
61
|
+
export const uvInstalledCheck = {
|
|
62
|
+
name: 'UV installed',
|
|
63
|
+
category: 'environment',
|
|
64
|
+
critical: false,
|
|
65
|
+
run: async () => {
|
|
66
|
+
const result = checkCommand('uv');
|
|
67
|
+
if (result.installed) {
|
|
68
|
+
return {
|
|
69
|
+
name: 'UV installed',
|
|
70
|
+
category: 'environment',
|
|
71
|
+
status: 'passed',
|
|
72
|
+
details: result.version,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
return {
|
|
76
|
+
name: 'UV installed',
|
|
77
|
+
category: 'environment',
|
|
78
|
+
status: 'warning',
|
|
79
|
+
details: 'Not found (recommended for AI scripts)',
|
|
80
|
+
fix: 'Install UV: curl -LsSf https://astral.sh/uv/install.sh | sh',
|
|
81
|
+
};
|
|
82
|
+
},
|
|
83
|
+
};
|
|
84
|
+
/**
|
|
85
|
+
* Claude Code installation check (critical)
|
|
86
|
+
*/
|
|
87
|
+
export const claudeCodeCheck = {
|
|
88
|
+
name: 'Claude Code installed',
|
|
89
|
+
category: 'environment',
|
|
90
|
+
critical: true,
|
|
91
|
+
run: async () => {
|
|
92
|
+
const result = checkCommand('claude');
|
|
93
|
+
if (result.installed) {
|
|
94
|
+
return {
|
|
95
|
+
name: 'Claude Code installed',
|
|
96
|
+
category: 'environment',
|
|
97
|
+
status: 'passed',
|
|
98
|
+
details: result.version,
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
return {
|
|
102
|
+
name: 'Claude Code installed',
|
|
103
|
+
category: 'environment',
|
|
104
|
+
status: 'failed',
|
|
105
|
+
details: 'Not found (required)',
|
|
106
|
+
fix: 'Install Claude Code: npm install -g @anthropic-ai/claude-code',
|
|
107
|
+
};
|
|
108
|
+
},
|
|
109
|
+
};
|
|
110
|
+
/**
|
|
111
|
+
* GitHub CLI check (optional, helpful for auth)
|
|
112
|
+
*/
|
|
113
|
+
export const ghCliCheck = {
|
|
114
|
+
name: 'GitHub CLI installed',
|
|
115
|
+
category: 'environment',
|
|
116
|
+
critical: false,
|
|
117
|
+
run: async () => {
|
|
118
|
+
const result = checkCommand('gh');
|
|
119
|
+
if (result.installed) {
|
|
120
|
+
return {
|
|
121
|
+
name: 'GitHub CLI installed',
|
|
122
|
+
category: 'environment',
|
|
123
|
+
status: 'passed',
|
|
124
|
+
details: result.version,
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
return {
|
|
128
|
+
name: 'GitHub CLI installed',
|
|
129
|
+
category: 'environment',
|
|
130
|
+
status: 'warning',
|
|
131
|
+
details: 'Not found (optional, helps with GitHub auth)',
|
|
132
|
+
fix: 'Install GitHub CLI: https://cli.github.com',
|
|
133
|
+
};
|
|
134
|
+
},
|
|
135
|
+
};
|
|
136
|
+
/**
|
|
137
|
+
* All environment checks
|
|
138
|
+
*/
|
|
139
|
+
export const environmentChecks = [
|
|
140
|
+
nodeVersionCheck,
|
|
141
|
+
uvInstalledCheck,
|
|
142
|
+
claudeCodeCheck,
|
|
143
|
+
ghCliCheck,
|
|
144
|
+
];
|
|
145
|
+
//# sourceMappingURL=environment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"environment.js","sourceRoot":"","sources":["../../../src/core/doctor/environment.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Doctor - Health check orchestrator
|
|
3
|
+
* Runs all health checks and aggregates results
|
|
4
|
+
*/
|
|
5
|
+
import type { CheckResult, DoctorSummary, HealthCheck, DoctorJsonOutput, CheckCategory } from '../../types/doctor.js';
|
|
6
|
+
/**
|
|
7
|
+
* All health checks grouped by category
|
|
8
|
+
*/
|
|
9
|
+
export declare const allChecks: Map<CheckCategory, HealthCheck[]>;
|
|
10
|
+
/**
|
|
11
|
+
* Get category display name
|
|
12
|
+
*/
|
|
13
|
+
export declare function getCategoryDisplayName(category: CheckCategory): string;
|
|
14
|
+
/**
|
|
15
|
+
* Run all checks in a category
|
|
16
|
+
*/
|
|
17
|
+
export declare function runCategoryChecks(category: CheckCategory): Promise<CheckResult[]>;
|
|
18
|
+
/**
|
|
19
|
+
* Run all health checks
|
|
20
|
+
*/
|
|
21
|
+
export declare function runAllChecks(): Promise<DoctorSummary>;
|
|
22
|
+
/**
|
|
23
|
+
* Run checks with callbacks for progress reporting
|
|
24
|
+
*/
|
|
25
|
+
export declare function runChecksWithProgress(onCategoryStart: (category: CheckCategory, name: string) => void, onCheckComplete: (result: CheckResult) => void, onCategoryComplete: (category: CheckCategory, results: CheckResult[]) => void): Promise<DoctorSummary>;
|
|
26
|
+
/**
|
|
27
|
+
* Summarize check results
|
|
28
|
+
*/
|
|
29
|
+
export declare function summarizeResults(checks: CheckResult[]): DoctorSummary;
|
|
30
|
+
/**
|
|
31
|
+
* Get fixable checks from results
|
|
32
|
+
*/
|
|
33
|
+
export declare function getFixableChecks(checks: CheckResult[]): CheckResult[];
|
|
34
|
+
/**
|
|
35
|
+
* Convert summary to JSON output format
|
|
36
|
+
*/
|
|
37
|
+
export declare function toJsonOutput(summary: DoctorSummary): DoctorJsonOutput;
|
|
38
|
+
export type { CheckResult, DoctorSummary, HealthCheck, DoctorJsonOutput, CheckCategory } from '../../types/doctor.js';
|
|
39
|
+
export * from './environment.js';
|
|
40
|
+
export * from './config.js';
|
|
41
|
+
export * from './auth.js';
|
|
42
|
+
export * from './repos.js';
|
|
43
|
+
export * from './sync.js';
|
|
44
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/doctor/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAOtH;;GAEG;AACH,eAAO,MAAM,SAAS,EAAE,GAAG,CAAC,aAAa,EAAE,WAAW,EAAE,CAMtD,CAAC;AAEH;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,aAAa,GAAG,MAAM,CAStE;AAmBD;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAUvF;AAED;;GAEG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,aAAa,CAAC,CAS3D;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,eAAe,EAAE,CAAC,QAAQ,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,EAChE,eAAe,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,EAC9C,kBAAkB,EAAE,CAAC,QAAQ,EAAE,aAAa,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,IAAI,GAC5E,OAAO,CAAC,aAAa,CAAC,CAmBxB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,aAAa,CAOrE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,WAAW,EAAE,CAErE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,aAAa,GAAG,gBAAgB,CAgBrE;AAGD,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAGtH,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Doctor - Health check orchestrator
|
|
3
|
+
* Runs all health checks and aggregates results
|
|
4
|
+
*/
|
|
5
|
+
import { environmentChecks } from './environment.js';
|
|
6
|
+
import { configChecks } from './config.js';
|
|
7
|
+
import { authChecks } from './auth.js';
|
|
8
|
+
import { repoChecks } from './repos.js';
|
|
9
|
+
import { syncChecks } from './sync.js';
|
|
10
|
+
/**
|
|
11
|
+
* All health checks grouped by category
|
|
12
|
+
*/
|
|
13
|
+
export const allChecks = new Map([
|
|
14
|
+
['environment', environmentChecks],
|
|
15
|
+
['config', configChecks],
|
|
16
|
+
['auth', authChecks],
|
|
17
|
+
['repos', repoChecks],
|
|
18
|
+
['sync', syncChecks],
|
|
19
|
+
]);
|
|
20
|
+
/**
|
|
21
|
+
* Get category display name
|
|
22
|
+
*/
|
|
23
|
+
export function getCategoryDisplayName(category) {
|
|
24
|
+
const names = {
|
|
25
|
+
environment: 'Environment',
|
|
26
|
+
config: 'Configuration',
|
|
27
|
+
auth: 'Authentication',
|
|
28
|
+
repos: 'Repositories',
|
|
29
|
+
sync: 'Sync Status',
|
|
30
|
+
};
|
|
31
|
+
return names[category];
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Run a single check and handle errors
|
|
35
|
+
*/
|
|
36
|
+
async function runCheck(check) {
|
|
37
|
+
try {
|
|
38
|
+
return await check.run();
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
42
|
+
return {
|
|
43
|
+
name: check.name,
|
|
44
|
+
category: check.category,
|
|
45
|
+
status: 'failed',
|
|
46
|
+
details: `Error running check: ${message}`,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Run all checks in a category
|
|
52
|
+
*/
|
|
53
|
+
export async function runCategoryChecks(category) {
|
|
54
|
+
const checks = allChecks.get(category) ?? [];
|
|
55
|
+
const results = [];
|
|
56
|
+
for (const check of checks) {
|
|
57
|
+
const result = await runCheck(check);
|
|
58
|
+
results.push(result);
|
|
59
|
+
}
|
|
60
|
+
return results;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Run all health checks
|
|
64
|
+
*/
|
|
65
|
+
export async function runAllChecks() {
|
|
66
|
+
const results = [];
|
|
67
|
+
for (const [category] of allChecks) {
|
|
68
|
+
const categoryResults = await runCategoryChecks(category);
|
|
69
|
+
results.push(...categoryResults);
|
|
70
|
+
}
|
|
71
|
+
return summarizeResults(results);
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Run checks with callbacks for progress reporting
|
|
75
|
+
*/
|
|
76
|
+
export async function runChecksWithProgress(onCategoryStart, onCheckComplete, onCategoryComplete) {
|
|
77
|
+
const allResults = [];
|
|
78
|
+
for (const [category, checks] of allChecks) {
|
|
79
|
+
onCategoryStart(category, getCategoryDisplayName(category));
|
|
80
|
+
const categoryResults = [];
|
|
81
|
+
for (const check of checks) {
|
|
82
|
+
const result = await runCheck(check);
|
|
83
|
+
categoryResults.push(result);
|
|
84
|
+
onCheckComplete(result);
|
|
85
|
+
}
|
|
86
|
+
onCategoryComplete(category, categoryResults);
|
|
87
|
+
allResults.push(...categoryResults);
|
|
88
|
+
}
|
|
89
|
+
return summarizeResults(allResults);
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Summarize check results
|
|
93
|
+
*/
|
|
94
|
+
export function summarizeResults(checks) {
|
|
95
|
+
return {
|
|
96
|
+
passed: checks.filter((c) => c.status === 'passed').length,
|
|
97
|
+
failed: checks.filter((c) => c.status === 'failed').length,
|
|
98
|
+
warnings: checks.filter((c) => c.status === 'warning').length,
|
|
99
|
+
checks,
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Get fixable checks from results
|
|
104
|
+
*/
|
|
105
|
+
export function getFixableChecks(checks) {
|
|
106
|
+
return checks.filter((c) => c.status !== 'passed' && c.fixable);
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Convert summary to JSON output format
|
|
110
|
+
*/
|
|
111
|
+
export function toJsonOutput(summary) {
|
|
112
|
+
return {
|
|
113
|
+
timestamp: new Date().toISOString(),
|
|
114
|
+
summary: {
|
|
115
|
+
passed: summary.passed,
|
|
116
|
+
failed: summary.failed,
|
|
117
|
+
warnings: summary.warnings,
|
|
118
|
+
},
|
|
119
|
+
checks: summary.checks.map((check) => ({
|
|
120
|
+
category: check.category,
|
|
121
|
+
name: check.name,
|
|
122
|
+
status: check.status,
|
|
123
|
+
details: check.details,
|
|
124
|
+
fix: check.fix,
|
|
125
|
+
})),
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
// Re-export individual check modules
|
|
129
|
+
export * from './environment.js';
|
|
130
|
+
export * from './config.js';
|
|
131
|
+
export * from './auth.js';
|
|
132
|
+
export * from './repos.js';
|
|
133
|
+
export * from './sync.js';
|
|
134
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/doctor/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Repository health checks
|
|
3
|
+
* Validates repository accessibility and vibe/ structure
|
|
4
|
+
*/
|
|
5
|
+
import type { HealthCheck } from '../../types/doctor.js';
|
|
6
|
+
/**
|
|
7
|
+
* Repositories configured check
|
|
8
|
+
*/
|
|
9
|
+
export declare const reposConfiguredCheck: HealthCheck;
|
|
10
|
+
/**
|
|
11
|
+
* All repositories accessible check
|
|
12
|
+
*/
|
|
13
|
+
export declare const reposAccessibleCheck: HealthCheck;
|
|
14
|
+
/**
|
|
15
|
+
* All repositories have vibe/ structure check
|
|
16
|
+
*/
|
|
17
|
+
export declare const reposHaveVibeStructureCheck: HealthCheck;
|
|
18
|
+
/**
|
|
19
|
+
* All repo checks
|
|
20
|
+
*/
|
|
21
|
+
export declare const repoChecks: HealthCheck[];
|
|
22
|
+
//# sourceMappingURL=repos.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repos.d.ts","sourceRoot":"","sources":["../../../src/core/doctor/repos.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAe,WAAW,EAAE,MAAM,uBAAuB,CAAC;AA+BtE;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAE,WA2DlC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAE,WAuFlC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,2BAA2B,EAAE,WAqFzC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,UAAU,EAAE,WAAW,EAInC,CAAC"}
|
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Repository health checks
|
|
3
|
+
* Validates repository accessibility and vibe/ structure
|
|
4
|
+
*/
|
|
5
|
+
import { Octokit } from 'octokit';
|
|
6
|
+
import { loadConfig } from '../config.js';
|
|
7
|
+
import { findProjectRoot } from '../project.js';
|
|
8
|
+
import { getTokenFromEnv, getTokenFromGhCli } from '../github.js';
|
|
9
|
+
/**
|
|
10
|
+
* Get GitHub token from any available source
|
|
11
|
+
*/
|
|
12
|
+
function getGitHubToken() {
|
|
13
|
+
return getTokenFromEnv() || getTokenFromGhCli();
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Parse GitHub URL to get owner and repo name
|
|
17
|
+
*/
|
|
18
|
+
function parseGitHubUrl(url) {
|
|
19
|
+
const patterns = [
|
|
20
|
+
/github\.com[/:]([^/]+)\/([^/.]+)/,
|
|
21
|
+
/^([^/]+)\/([^/]+)$/,
|
|
22
|
+
];
|
|
23
|
+
for (const pattern of patterns) {
|
|
24
|
+
const match = url.match(pattern);
|
|
25
|
+
if (match?.[1] && match[2]) {
|
|
26
|
+
return { owner: match[1], repo: match[2].replace(/\.git$/, '') };
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Repositories configured check
|
|
33
|
+
*/
|
|
34
|
+
export const reposConfiguredCheck = {
|
|
35
|
+
name: 'Repositories configured',
|
|
36
|
+
category: 'repos',
|
|
37
|
+
critical: false,
|
|
38
|
+
run: async () => {
|
|
39
|
+
const cwd = process.cwd();
|
|
40
|
+
const projectRoot = findProjectRoot(cwd);
|
|
41
|
+
if (!projectRoot) {
|
|
42
|
+
return {
|
|
43
|
+
name: 'Repositories configured',
|
|
44
|
+
category: 'repos',
|
|
45
|
+
status: 'warning',
|
|
46
|
+
details: 'No project found',
|
|
47
|
+
fix: 'Run `vibe init` to create a new project',
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
try {
|
|
51
|
+
const config = await loadConfig(projectRoot);
|
|
52
|
+
if (!config) {
|
|
53
|
+
return {
|
|
54
|
+
name: 'Repositories configured',
|
|
55
|
+
category: 'repos',
|
|
56
|
+
status: 'warning',
|
|
57
|
+
details: 'Could not load config',
|
|
58
|
+
fix: 'Check vibe-fabric.toml for errors',
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
const repoCount = config.repos.length;
|
|
62
|
+
if (repoCount === 0) {
|
|
63
|
+
return {
|
|
64
|
+
name: 'Repositories configured',
|
|
65
|
+
category: 'repos',
|
|
66
|
+
status: 'warning',
|
|
67
|
+
details: 'No repositories configured',
|
|
68
|
+
fix: 'Run `vibe repo add` to add repositories',
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
return {
|
|
72
|
+
name: 'Repositories configured',
|
|
73
|
+
category: 'repos',
|
|
74
|
+
status: 'passed',
|
|
75
|
+
details: `${repoCount} ${repoCount === 1 ? 'repository' : 'repositories'} configured`,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
80
|
+
return {
|
|
81
|
+
name: 'Repositories configured',
|
|
82
|
+
category: 'repos',
|
|
83
|
+
status: 'failed',
|
|
84
|
+
details: message,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
},
|
|
88
|
+
};
|
|
89
|
+
/**
|
|
90
|
+
* All repositories accessible check
|
|
91
|
+
*/
|
|
92
|
+
export const reposAccessibleCheck = {
|
|
93
|
+
name: 'All repos accessible',
|
|
94
|
+
category: 'repos',
|
|
95
|
+
critical: false,
|
|
96
|
+
run: async () => {
|
|
97
|
+
const token = getGitHubToken();
|
|
98
|
+
if (!token) {
|
|
99
|
+
return {
|
|
100
|
+
name: 'All repos accessible',
|
|
101
|
+
category: 'repos',
|
|
102
|
+
status: 'warning',
|
|
103
|
+
details: 'No token available to check repos',
|
|
104
|
+
fix: 'Set GITHUB_TOKEN environment variable',
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
const cwd = process.cwd();
|
|
108
|
+
const projectRoot = findProjectRoot(cwd);
|
|
109
|
+
if (!projectRoot) {
|
|
110
|
+
return {
|
|
111
|
+
name: 'All repos accessible',
|
|
112
|
+
category: 'repos',
|
|
113
|
+
status: 'warning',
|
|
114
|
+
details: 'No project found',
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
try {
|
|
118
|
+
const config = await loadConfig(projectRoot);
|
|
119
|
+
if (!config || config.repos.length === 0) {
|
|
120
|
+
return {
|
|
121
|
+
name: 'All repos accessible',
|
|
122
|
+
category: 'repos',
|
|
123
|
+
status: 'passed',
|
|
124
|
+
details: 'No repositories to check',
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
const octokit = new Octokit({ auth: token });
|
|
128
|
+
const inaccessible = [];
|
|
129
|
+
for (const repo of config.repos) {
|
|
130
|
+
const parsed = parseGitHubUrl(repo.url);
|
|
131
|
+
if (!parsed) {
|
|
132
|
+
inaccessible.push(`${repo.alias} (invalid URL)`);
|
|
133
|
+
continue;
|
|
134
|
+
}
|
|
135
|
+
try {
|
|
136
|
+
await octokit.rest.repos.get({
|
|
137
|
+
owner: parsed.owner,
|
|
138
|
+
repo: parsed.repo,
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
catch {
|
|
142
|
+
inaccessible.push(repo.alias);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
if (inaccessible.length === 0) {
|
|
146
|
+
return {
|
|
147
|
+
name: 'All repos accessible',
|
|
148
|
+
category: 'repos',
|
|
149
|
+
status: 'passed',
|
|
150
|
+
details: `${config.repos.length} ${config.repos.length === 1 ? 'repo' : 'repos'} accessible`,
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
return {
|
|
154
|
+
name: 'All repos accessible',
|
|
155
|
+
category: 'repos',
|
|
156
|
+
status: 'failed',
|
|
157
|
+
details: `Cannot access: ${inaccessible.join(', ')}`,
|
|
158
|
+
fix: 'Check repository URLs and token permissions',
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
catch (error) {
|
|
162
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
163
|
+
return {
|
|
164
|
+
name: 'All repos accessible',
|
|
165
|
+
category: 'repos',
|
|
166
|
+
status: 'failed',
|
|
167
|
+
details: message,
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
},
|
|
171
|
+
};
|
|
172
|
+
/**
|
|
173
|
+
* All repositories have vibe/ structure check
|
|
174
|
+
*/
|
|
175
|
+
export const reposHaveVibeStructureCheck = {
|
|
176
|
+
name: 'All repos have vibe/ structure',
|
|
177
|
+
category: 'repos',
|
|
178
|
+
critical: false,
|
|
179
|
+
run: async () => {
|
|
180
|
+
const token = getGitHubToken();
|
|
181
|
+
if (!token) {
|
|
182
|
+
return {
|
|
183
|
+
name: 'All repos have vibe/ structure',
|
|
184
|
+
category: 'repos',
|
|
185
|
+
status: 'warning',
|
|
186
|
+
details: 'No token available to check repos',
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
const cwd = process.cwd();
|
|
190
|
+
const projectRoot = findProjectRoot(cwd);
|
|
191
|
+
if (!projectRoot) {
|
|
192
|
+
return {
|
|
193
|
+
name: 'All repos have vibe/ structure',
|
|
194
|
+
category: 'repos',
|
|
195
|
+
status: 'warning',
|
|
196
|
+
details: 'No project found',
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
try {
|
|
200
|
+
const config = await loadConfig(projectRoot);
|
|
201
|
+
if (!config || config.repos.length === 0) {
|
|
202
|
+
return {
|
|
203
|
+
name: 'All repos have vibe/ structure',
|
|
204
|
+
category: 'repos',
|
|
205
|
+
status: 'passed',
|
|
206
|
+
details: 'No repositories to check',
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
const octokit = new Octokit({ auth: token });
|
|
210
|
+
const missing = [];
|
|
211
|
+
for (const repo of config.repos) {
|
|
212
|
+
const parsed = parseGitHubUrl(repo.url);
|
|
213
|
+
if (!parsed)
|
|
214
|
+
continue;
|
|
215
|
+
try {
|
|
216
|
+
await octokit.rest.repos.getContent({
|
|
217
|
+
owner: parsed.owner,
|
|
218
|
+
repo: parsed.repo,
|
|
219
|
+
path: 'vibe',
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
catch {
|
|
223
|
+
missing.push(repo.alias);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
if (missing.length === 0) {
|
|
227
|
+
return {
|
|
228
|
+
name: 'All repos have vibe/ structure',
|
|
229
|
+
category: 'repos',
|
|
230
|
+
status: 'passed',
|
|
231
|
+
details: 'All repos have vibe/ directory',
|
|
232
|
+
};
|
|
233
|
+
}
|
|
234
|
+
return {
|
|
235
|
+
name: 'All repos have vibe/ structure',
|
|
236
|
+
category: 'repos',
|
|
237
|
+
status: 'warning',
|
|
238
|
+
details: `Missing vibe/: ${missing.join(', ')}`,
|
|
239
|
+
fix: `Run \`vibe repo add\` for: ${missing.join(', ')}`,
|
|
240
|
+
fixable: true,
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
catch (error) {
|
|
244
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
245
|
+
return {
|
|
246
|
+
name: 'All repos have vibe/ structure',
|
|
247
|
+
category: 'repos',
|
|
248
|
+
status: 'failed',
|
|
249
|
+
details: message,
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
},
|
|
253
|
+
};
|
|
254
|
+
/**
|
|
255
|
+
* All repo checks
|
|
256
|
+
*/
|
|
257
|
+
export const repoChecks = [
|
|
258
|
+
reposConfiguredCheck,
|
|
259
|
+
reposAccessibleCheck,
|
|
260
|
+
reposHaveVibeStructureCheck,
|
|
261
|
+
];
|
|
262
|
+
//# sourceMappingURL=repos.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repos.js","sourceRoot":"","sources":["../../../src/core/doctor/repos.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sync status health checks
|
|
3
|
+
* Validates sync data freshness
|
|
4
|
+
*/
|
|
5
|
+
import type { HealthCheck } from '../../types/doctor.js';
|
|
6
|
+
/**
|
|
7
|
+
* Sync cache exists check
|
|
8
|
+
*/
|
|
9
|
+
export declare const syncCacheExistsCheck: HealthCheck;
|
|
10
|
+
/**
|
|
11
|
+
* Sync data freshness check
|
|
12
|
+
*/
|
|
13
|
+
export declare const syncDataFreshCheck: HealthCheck;
|
|
14
|
+
/**
|
|
15
|
+
* All sync checks
|
|
16
|
+
*/
|
|
17
|
+
export declare const syncChecks: HealthCheck[];
|
|
18
|
+
//# sourceMappingURL=sync.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../../src/core/doctor/sync.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAe,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAwDtE;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAE,WAoClC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,WAkDhC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,UAAU,EAAE,WAAW,EAGnC,CAAC"}
|