@bhimudev/gnanai 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +270 -0
- package/dist/bin/cli.d.ts +3 -0
- package/dist/bin/cli.d.ts.map +1 -0
- package/dist/bin/cli.js +188 -0
- package/dist/bin/cli.js.map +1 -0
- package/dist/commands/cleanup.d.ts +21 -0
- package/dist/commands/cleanup.d.ts.map +1 -0
- package/dist/commands/cleanup.js +380 -0
- package/dist/commands/cleanup.js.map +1 -0
- package/dist/commands/dispatch.d.ts +13 -0
- package/dist/commands/dispatch.d.ts.map +1 -0
- package/dist/commands/dispatch.js +85 -0
- package/dist/commands/dispatch.js.map +1 -0
- package/dist/commands/doctor.d.ts +2 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +155 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/generate.d.ts +3 -0
- package/dist/commands/generate.d.ts.map +1 -0
- package/dist/commands/generate.js +167 -0
- package/dist/commands/generate.js.map +1 -0
- package/dist/commands/init.d.ts +10 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +711 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/knowledge-sync.d.ts +69 -0
- package/dist/commands/knowledge-sync.d.ts.map +1 -0
- package/dist/commands/knowledge-sync.js +661 -0
- package/dist/commands/knowledge-sync.js.map +1 -0
- package/dist/commands/knowledge.d.ts +35 -0
- package/dist/commands/knowledge.d.ts.map +1 -0
- package/dist/commands/knowledge.js +254 -0
- package/dist/commands/knowledge.js.map +1 -0
- package/dist/commands/rollback.d.ts +13 -0
- package/dist/commands/rollback.d.ts.map +1 -0
- package/dist/commands/rollback.js +186 -0
- package/dist/commands/rollback.js.map +1 -0
- package/dist/commands/setup-config.d.ts +6 -0
- package/dist/commands/setup-config.d.ts.map +1 -0
- package/dist/commands/setup-config.js +663 -0
- package/dist/commands/setup-config.js.map +1 -0
- package/dist/commands/setup-project.d.ts +6 -0
- package/dist/commands/setup-project.d.ts.map +1 -0
- package/dist/commands/setup-project.js +361 -0
- package/dist/commands/setup-project.js.map +1 -0
- package/dist/commands/setup.d.ts +3 -0
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/setup.js +293 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/commands/status.d.ts +51 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +182 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/uninstall.d.ts +3 -0
- package/dist/commands/uninstall.d.ts.map +1 -0
- package/dist/commands/uninstall.js +173 -0
- package/dist/commands/uninstall.js.map +1 -0
- package/dist/commands/update.d.ts +10 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +435 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/worktree.d.ts +30 -0
- package/dist/commands/worktree.d.ts.map +1 -0
- package/dist/commands/worktree.js +262 -0
- package/dist/commands/worktree.js.map +1 -0
- package/dist/generator/claude-cli.d.ts +24 -0
- package/dist/generator/claude-cli.d.ts.map +1 -0
- package/dist/generator/claude-cli.js +239 -0
- package/dist/generator/claude-cli.js.map +1 -0
- package/dist/generator/prompt-builder.d.ts +7 -0
- package/dist/generator/prompt-builder.d.ts.map +1 -0
- package/dist/generator/prompt-builder.js +144 -0
- package/dist/generator/prompt-builder.js.map +1 -0
- package/dist/index.d.ts +36 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +45 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/embeddings.d.ts +53 -0
- package/dist/mcp/embeddings.d.ts.map +1 -0
- package/dist/mcp/embeddings.js +68 -0
- package/dist/mcp/embeddings.js.map +1 -0
- package/dist/mcp/hybrid-search.d.ts +25 -0
- package/dist/mcp/hybrid-search.d.ts.map +1 -0
- package/dist/mcp/hybrid-search.js +72 -0
- package/dist/mcp/hybrid-search.js.map +1 -0
- package/dist/mcp/knowledge-server.d.ts +4 -0
- package/dist/mcp/knowledge-server.d.ts.map +1 -0
- package/dist/mcp/knowledge-server.js +294 -0
- package/dist/mcp/knowledge-server.js.map +1 -0
- package/dist/mcp/knowledge-utils.d.ts +65 -0
- package/dist/mcp/knowledge-utils.d.ts.map +1 -0
- package/dist/mcp/knowledge-utils.js +207 -0
- package/dist/mcp/knowledge-utils.js.map +1 -0
- package/dist/mcp/search-factory.d.ts +9 -0
- package/dist/mcp/search-factory.d.ts.map +1 -0
- package/dist/mcp/search-factory.js +23 -0
- package/dist/mcp/search-factory.js.map +1 -0
- package/dist/mcp/search-index.d.ts +45 -0
- package/dist/mcp/search-index.d.ts.map +1 -0
- package/dist/mcp/search-index.js +2 -0
- package/dist/mcp/search-index.js.map +1 -0
- package/dist/mcp/search-minisearch.d.ts +46 -0
- package/dist/mcp/search-minisearch.d.ts.map +1 -0
- package/dist/mcp/search-minisearch.js +99 -0
- package/dist/mcp/search-minisearch.js.map +1 -0
- package/dist/mcp/search-sqlite.d.ts +30 -0
- package/dist/mcp/search-sqlite.d.ts.map +1 -0
- package/dist/mcp/search-sqlite.js +188 -0
- package/dist/mcp/search-sqlite.js.map +1 -0
- package/dist/mcp/vector-store.d.ts +52 -0
- package/dist/mcp/vector-store.d.ts.map +1 -0
- package/dist/mcp/vector-store.js +183 -0
- package/dist/mcp/vector-store.js.map +1 -0
- package/dist/scaffold/copy-core-agents.d.ts +2 -0
- package/dist/scaffold/copy-core-agents.d.ts.map +1 -0
- package/dist/scaffold/copy-core-agents.js +90 -0
- package/dist/scaffold/copy-core-agents.js.map +1 -0
- package/dist/scaffold/create-claude-settings.d.ts +40 -0
- package/dist/scaffold/create-claude-settings.d.ts.map +1 -0
- package/dist/scaffold/create-claude-settings.js +422 -0
- package/dist/scaffold/create-claude-settings.js.map +1 -0
- package/dist/scaffold/create-config.d.ts +14 -0
- package/dist/scaffold/create-config.d.ts.map +1 -0
- package/dist/scaffold/create-config.js +199 -0
- package/dist/scaffold/create-config.js.map +1 -0
- package/dist/scaffold/create-project-description.d.ts +12 -0
- package/dist/scaffold/create-project-description.d.ts.map +1 -0
- package/dist/scaffold/create-project-description.js +104 -0
- package/dist/scaffold/create-project-description.js.map +1 -0
- package/dist/scaffold/create-structure.d.ts +2 -0
- package/dist/scaffold/create-structure.d.ts.map +1 -0
- package/dist/scaffold/create-structure.js +146 -0
- package/dist/scaffold/create-structure.js.map +1 -0
- package/dist/types/dependency-analysis.d.ts +11 -0
- package/dist/types/dependency-analysis.d.ts.map +1 -0
- package/dist/types/dependency-analysis.js +2 -0
- package/dist/types/dependency-analysis.js.map +1 -0
- package/dist/types/index.d.ts +526 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +3 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/task.d.ts +25 -0
- package/dist/types/task.d.ts.map +1 -0
- package/dist/types/task.js +3 -0
- package/dist/types/task.js.map +1 -0
- package/dist/utils/analyze-files.d.ts +7 -0
- package/dist/utils/analyze-files.d.ts.map +1 -0
- package/dist/utils/analyze-files.js +27 -0
- package/dist/utils/analyze-files.js.map +1 -0
- package/dist/utils/backup.d.ts +102 -0
- package/dist/utils/backup.d.ts.map +1 -0
- package/dist/utils/backup.js +352 -0
- package/dist/utils/backup.js.map +1 -0
- package/dist/utils/ci-provider.d.ts +23 -0
- package/dist/utils/ci-provider.d.ts.map +1 -0
- package/dist/utils/ci-provider.js +525 -0
- package/dist/utils/ci-provider.js.map +1 -0
- package/dist/utils/ci-status.d.ts +57 -0
- package/dist/utils/ci-status.d.ts.map +1 -0
- package/dist/utils/ci-status.js +349 -0
- package/dist/utils/ci-status.js.map +1 -0
- package/dist/utils/dependency-analysis.d.ts +34 -0
- package/dist/utils/dependency-analysis.d.ts.map +1 -0
- package/dist/utils/dependency-analysis.js +298 -0
- package/dist/utils/dependency-analysis.js.map +1 -0
- package/dist/utils/detect-git.d.ts +57 -0
- package/dist/utils/detect-git.d.ts.map +1 -0
- package/dist/utils/detect-git.js +439 -0
- package/dist/utils/detect-git.js.map +1 -0
- package/dist/utils/detect-mcp.d.ts +32 -0
- package/dist/utils/detect-mcp.d.ts.map +1 -0
- package/dist/utils/detect-mcp.js +178 -0
- package/dist/utils/detect-mcp.js.map +1 -0
- package/dist/utils/detect-project.d.ts +3 -0
- package/dist/utils/detect-project.d.ts.map +1 -0
- package/dist/utils/detect-project.js +155 -0
- package/dist/utils/detect-project.js.map +1 -0
- package/dist/utils/file-comparison.d.ts +89 -0
- package/dist/utils/file-comparison.d.ts.map +1 -0
- package/dist/utils/file-comparison.js +301 -0
- package/dist/utils/file-comparison.js.map +1 -0
- package/dist/utils/file-merger.d.ts +74 -0
- package/dist/utils/file-merger.d.ts.map +1 -0
- package/dist/utils/file-merger.js +350 -0
- package/dist/utils/file-merger.js.map +1 -0
- package/dist/utils/logger.d.ts +26 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +72 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/managed-process.d.ts +109 -0
- package/dist/utils/managed-process.d.ts.map +1 -0
- package/dist/utils/managed-process.js +481 -0
- package/dist/utils/managed-process.js.map +1 -0
- package/dist/utils/merge-claude-settings.d.ts +65 -0
- package/dist/utils/merge-claude-settings.d.ts.map +1 -0
- package/dist/utils/merge-claude-settings.js +133 -0
- package/dist/utils/merge-claude-settings.js.map +1 -0
- package/dist/utils/migration.d.ts +74 -0
- package/dist/utils/migration.d.ts.map +1 -0
- package/dist/utils/migration.js +345 -0
- package/dist/utils/migration.js.map +1 -0
- package/dist/utils/process-health.d.ts +51 -0
- package/dist/utils/process-health.d.ts.map +1 -0
- package/dist/utils/process-health.js +123 -0
- package/dist/utils/process-health.js.map +1 -0
- package/dist/utils/process-registry.d.ts +20 -0
- package/dist/utils/process-registry.d.ts.map +1 -0
- package/dist/utils/process-registry.js +151 -0
- package/dist/utils/process-registry.js.map +1 -0
- package/dist/utils/process-tree.d.ts +51 -0
- package/dist/utils/process-tree.d.ts.map +1 -0
- package/dist/utils/process-tree.js +499 -0
- package/dist/utils/process-tree.js.map +1 -0
- package/dist/utils/repair-mcp-config.d.ts +15 -0
- package/dist/utils/repair-mcp-config.d.ts.map +1 -0
- package/dist/utils/repair-mcp-config.js +129 -0
- package/dist/utils/repair-mcp-config.js.map +1 -0
- package/dist/utils/task-lifecycle.d.ts +60 -0
- package/dist/utils/task-lifecycle.d.ts.map +1 -0
- package/dist/utils/task-lifecycle.js +310 -0
- package/dist/utils/task-lifecycle.js.map +1 -0
- package/dist/utils/update-agent-mcp.d.ts +7 -0
- package/dist/utils/update-agent-mcp.d.ts.map +1 -0
- package/dist/utils/update-agent-mcp.js +115 -0
- package/dist/utils/update-agent-mcp.js.map +1 -0
- package/dist/utils/update-agent-templates.d.ts +6 -0
- package/dist/utils/update-agent-templates.d.ts.map +1 -0
- package/dist/utils/update-agent-templates.js +56 -0
- package/dist/utils/update-agent-templates.js.map +1 -0
- package/dist/utils/update-config-ci.d.ts +7 -0
- package/dist/utils/update-config-ci.d.ts.map +1 -0
- package/dist/utils/update-config-ci.js +72 -0
- package/dist/utils/update-config-ci.js.map +1 -0
- package/dist/utils/update-config-git.d.ts +18 -0
- package/dist/utils/update-config-git.d.ts.map +1 -0
- package/dist/utils/update-config-git.js +146 -0
- package/dist/utils/update-config-git.js.map +1 -0
- package/dist/utils/update-config-mcp.d.ts +7 -0
- package/dist/utils/update-config-mcp.d.ts.map +1 -0
- package/dist/utils/update-config-mcp.js +98 -0
- package/dist/utils/update-config-mcp.js.map +1 -0
- package/dist/utils/validate-config.d.ts +3 -0
- package/dist/utils/validate-config.d.ts.map +1 -0
- package/dist/utils/validate-config.js +109 -0
- package/dist/utils/validate-config.js.map +1 -0
- package/dist/utils/version-tracker.d.ts +130 -0
- package/dist/utils/version-tracker.d.ts.map +1 -0
- package/dist/utils/version-tracker.js +298 -0
- package/dist/utils/version-tracker.js.map +1 -0
- package/dist/utils/worktree.d.ts +68 -0
- package/dist/utils/worktree.d.ts.map +1 -0
- package/dist/utils/worktree.js +446 -0
- package/dist/utils/worktree.js.map +1 -0
- package/package.json +77 -0
- package/templates/ARCHAI_README.md +329 -0
- package/templates/CLAUDE.md +67 -0
- package/templates/PROMPTS.md +506 -0
- package/templates/core-agents/boss-agent.md +671 -0
- package/templates/core-agents/cleanup-agent.md +145 -0
- package/templates/core-agents/code-reviewer.md +175 -0
- package/templates/core-agents/critical-reviewer.md +117 -0
- package/templates/core-agents/deep-analyst.md +216 -0
- package/templates/core-agents/finalization-agent.md +252 -0
- package/templates/core-agents/git-coordinator.md +240 -0
- package/templates/core-agents/implementation-agent.md +151 -0
- package/templates/core-agents/maestro-agent.md +413 -0
- package/templates/core-agents/maestro-headless-agent.md +422 -0
- package/templates/core-agents/plan-validator.md +198 -0
- package/templates/core-agents/quick-fix.md +56 -0
- package/templates/core-agents/routing-templates.md +338 -0
- package/templates/core-agents/task-orchestrator.md +143 -0
- package/templates/core-agents/task-prep.md +202 -0
- package/templates/core-agents/tdd-designer.md +143 -0
- package/templates/specialist-meta.md +275 -0
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Backup manifest containing metadata about the backup.
|
|
3
|
+
*/
|
|
4
|
+
export interface BackupManifest {
|
|
5
|
+
timestamp: string;
|
|
6
|
+
version: string;
|
|
7
|
+
createdAt: string;
|
|
8
|
+
reason: string;
|
|
9
|
+
files: BackupFileEntry[];
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Entry for a single file in the backup.
|
|
13
|
+
*/
|
|
14
|
+
export interface BackupFileEntry {
|
|
15
|
+
relativePath: string;
|
|
16
|
+
hash: string | null;
|
|
17
|
+
size: number;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Information about an available backup.
|
|
21
|
+
*/
|
|
22
|
+
export interface BackupInfo {
|
|
23
|
+
timestamp: string;
|
|
24
|
+
path: string;
|
|
25
|
+
manifest: BackupManifest | null;
|
|
26
|
+
createdAt: Date;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Result of a backup operation.
|
|
30
|
+
*/
|
|
31
|
+
export interface BackupResult {
|
|
32
|
+
success: boolean;
|
|
33
|
+
backupPath: string | null;
|
|
34
|
+
timestamp: string | null;
|
|
35
|
+
fileCount: number;
|
|
36
|
+
error?: string;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Result of a restore operation.
|
|
40
|
+
*/
|
|
41
|
+
export interface RestoreResult {
|
|
42
|
+
success: boolean;
|
|
43
|
+
restoredFiles: number;
|
|
44
|
+
error?: string;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Get the backups directory path for a given .claude directory.
|
|
48
|
+
*/
|
|
49
|
+
export declare function getBackupsDir(claudeDir: string): string;
|
|
50
|
+
/**
|
|
51
|
+
* Create a full backup of the .claude directory.
|
|
52
|
+
*
|
|
53
|
+
* @param claudeDir - Path to the .claude directory
|
|
54
|
+
* @param reason - Reason for the backup (e.g., 'pre-update', 'manual')
|
|
55
|
+
* @param version - Current archai version
|
|
56
|
+
*/
|
|
57
|
+
export declare function createBackup(claudeDir: string, reason?: string, version?: string): Promise<BackupResult>;
|
|
58
|
+
/**
|
|
59
|
+
* Restore from a specific backup.
|
|
60
|
+
*
|
|
61
|
+
* @param claudeDir - Path to the .claude directory
|
|
62
|
+
* @param timestamp - Timestamp of the backup to restore
|
|
63
|
+
*/
|
|
64
|
+
export declare function restoreBackupFull(claudeDir: string, timestamp: string): Promise<RestoreResult>;
|
|
65
|
+
/**
|
|
66
|
+
* List all available backups.
|
|
67
|
+
*
|
|
68
|
+
* @param claudeDir - Path to the .claude directory
|
|
69
|
+
*/
|
|
70
|
+
export declare function listBackups(claudeDir: string): Promise<BackupInfo[]>;
|
|
71
|
+
/**
|
|
72
|
+
* Prune old backups, keeping only the most recent ones.
|
|
73
|
+
*
|
|
74
|
+
* @param claudeDir - Path to the .claude directory
|
|
75
|
+
* @param keepCount - Number of backups to keep (default: 5)
|
|
76
|
+
*/
|
|
77
|
+
export declare function pruneOldBackups(claudeDir: string, keepCount?: number): Promise<number>;
|
|
78
|
+
/**
|
|
79
|
+
* Get the most recent backup.
|
|
80
|
+
*/
|
|
81
|
+
export declare function getLatestBackup(claudeDir: string): Promise<BackupInfo | null>;
|
|
82
|
+
/**
|
|
83
|
+
* Check if a backup exists for a given timestamp.
|
|
84
|
+
*/
|
|
85
|
+
export declare function backupExists(claudeDir: string, timestamp: string): Promise<boolean>;
|
|
86
|
+
/**
|
|
87
|
+
* Create a backup of a file if it exists.
|
|
88
|
+
* Returns the backup path if created, null otherwise.
|
|
89
|
+
* @deprecated Use createBackup for full directory backups
|
|
90
|
+
*/
|
|
91
|
+
export declare function backupIfExists(filePath: string): Promise<string | null>;
|
|
92
|
+
/**
|
|
93
|
+
* Restore a file from backup.
|
|
94
|
+
* @deprecated Use restoreBackupFull for full directory restores
|
|
95
|
+
*/
|
|
96
|
+
export declare function restoreFromBackup(backupPath: string, originalPath: string): Promise<boolean>;
|
|
97
|
+
/**
|
|
98
|
+
* Clean up old backup files (older than specified age in days).
|
|
99
|
+
* @deprecated Use pruneOldBackups for directory-based backup management
|
|
100
|
+
*/
|
|
101
|
+
export declare function cleanupOldBackups(directory: string, maxAgeDays?: number): Promise<number>;
|
|
102
|
+
//# sourceMappingURL=backup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backup.d.ts","sourceRoot":"","sources":["../../src/utils/backup.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,eAAe,EAAE,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,cAAc,GAAG,IAAI,CAAC;IAChC,SAAS,EAAE,IAAI,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAeD;;GAEG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED;;;;;;GAMG;AACH,wBAAsB,YAAY,CAChC,SAAS,EAAE,MAAM,EACjB,MAAM,GAAE,MAAiB,EACzB,OAAO,GAAE,MAAkB,GAC1B,OAAO,CAAC,YAAY,CAAC,CAkEvB;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,CACrC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,aAAa,CAAC,CAwExB;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CA6C1E;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,GAAE,MAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CA2B/F;AAoCD;;GAEG;AACH,wBAAsB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAGnF;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAGzF;AAMD;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAa7E;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAalG;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,SAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CA8B1F"}
|
|
@@ -0,0 +1,352 @@
|
|
|
1
|
+
import fs from 'fs-extra';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import { logger } from './logger.js';
|
|
4
|
+
import { hashFile } from './file-comparison.js';
|
|
5
|
+
const BACKUPS_DIR = 'backups';
|
|
6
|
+
const MANIFEST_FILE = 'manifest.json';
|
|
7
|
+
/**
|
|
8
|
+
* Generate a timestamp string for backup directories.
|
|
9
|
+
* Includes milliseconds to avoid collisions.
|
|
10
|
+
*/
|
|
11
|
+
function generateTimestamp() {
|
|
12
|
+
const now = new Date();
|
|
13
|
+
// Format: YYYY-MM-DD_HH-MM-SS-mmm (with milliseconds)
|
|
14
|
+
return now.toISOString().replace(/[:.]/g, '-').replace('T', '_').slice(0, 23);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Get the backups directory path for a given .claude directory.
|
|
18
|
+
*/
|
|
19
|
+
export function getBackupsDir(claudeDir) {
|
|
20
|
+
return path.join(claudeDir, BACKUPS_DIR);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Create a full backup of the .claude directory.
|
|
24
|
+
*
|
|
25
|
+
* @param claudeDir - Path to the .claude directory
|
|
26
|
+
* @param reason - Reason for the backup (e.g., 'pre-update', 'manual')
|
|
27
|
+
* @param version - Current archai version
|
|
28
|
+
*/
|
|
29
|
+
export async function createBackup(claudeDir, reason = 'manual', version = 'unknown') {
|
|
30
|
+
const timestamp = generateTimestamp();
|
|
31
|
+
const backupsDir = getBackupsDir(claudeDir);
|
|
32
|
+
const backupPath = path.join(backupsDir, timestamp);
|
|
33
|
+
try {
|
|
34
|
+
// Ensure backups directory exists
|
|
35
|
+
await fs.ensureDir(backupPath);
|
|
36
|
+
// Get all files to backup (excluding backups directory itself)
|
|
37
|
+
const files = await getFilesToBackup(claudeDir);
|
|
38
|
+
const fileEntries = [];
|
|
39
|
+
// Copy each file
|
|
40
|
+
for (const filePath of files) {
|
|
41
|
+
const relativePath = path.relative(claudeDir, filePath);
|
|
42
|
+
const targetPath = path.join(backupPath, relativePath);
|
|
43
|
+
await fs.ensureDir(path.dirname(targetPath));
|
|
44
|
+
await fs.copy(filePath, targetPath);
|
|
45
|
+
const stats = await fs.stat(filePath);
|
|
46
|
+
const hash = await hashFile(filePath);
|
|
47
|
+
fileEntries.push({
|
|
48
|
+
relativePath,
|
|
49
|
+
hash,
|
|
50
|
+
size: stats.size,
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
// Create manifest
|
|
54
|
+
const manifest = {
|
|
55
|
+
timestamp,
|
|
56
|
+
version,
|
|
57
|
+
createdAt: new Date().toISOString(),
|
|
58
|
+
reason,
|
|
59
|
+
files: fileEntries,
|
|
60
|
+
};
|
|
61
|
+
await fs.writeJson(path.join(backupPath, MANIFEST_FILE), manifest, { spaces: 2 });
|
|
62
|
+
logger.debug(`Created backup at ${backupPath} with ${fileEntries.length} files`);
|
|
63
|
+
return {
|
|
64
|
+
success: true,
|
|
65
|
+
backupPath,
|
|
66
|
+
timestamp,
|
|
67
|
+
fileCount: fileEntries.length,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
logger.debug(`Failed to create backup`, error);
|
|
72
|
+
// Clean up partial backup
|
|
73
|
+
try {
|
|
74
|
+
await fs.remove(backupPath);
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
// Ignore cleanup errors
|
|
78
|
+
}
|
|
79
|
+
return {
|
|
80
|
+
success: false,
|
|
81
|
+
backupPath: null,
|
|
82
|
+
timestamp: null,
|
|
83
|
+
fileCount: 0,
|
|
84
|
+
error: error instanceof Error ? error.message : String(error),
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Restore from a specific backup.
|
|
90
|
+
*
|
|
91
|
+
* @param claudeDir - Path to the .claude directory
|
|
92
|
+
* @param timestamp - Timestamp of the backup to restore
|
|
93
|
+
*/
|
|
94
|
+
export async function restoreBackupFull(claudeDir, timestamp) {
|
|
95
|
+
const backupPath = path.join(getBackupsDir(claudeDir), timestamp);
|
|
96
|
+
try {
|
|
97
|
+
// Check backup exists
|
|
98
|
+
if (!await fs.pathExists(backupPath)) {
|
|
99
|
+
return {
|
|
100
|
+
success: false,
|
|
101
|
+
restoredFiles: 0,
|
|
102
|
+
error: `Backup not found: ${timestamp}`,
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
// Read manifest
|
|
106
|
+
const manifestPath = path.join(backupPath, MANIFEST_FILE);
|
|
107
|
+
if (!await fs.pathExists(manifestPath)) {
|
|
108
|
+
return {
|
|
109
|
+
success: false,
|
|
110
|
+
restoredFiles: 0,
|
|
111
|
+
error: `Backup manifest not found: ${timestamp}`,
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
const manifest = await fs.readJson(manifestPath);
|
|
115
|
+
// Build set of files that were in the backup
|
|
116
|
+
const backedUpFiles = new Set(manifest.files.map(e => e.relativePath));
|
|
117
|
+
// Restore each file from backup
|
|
118
|
+
let restoredCount = 0;
|
|
119
|
+
for (const entry of manifest.files) {
|
|
120
|
+
const sourcePath = path.join(backupPath, entry.relativePath);
|
|
121
|
+
const targetPath = path.join(claudeDir, entry.relativePath);
|
|
122
|
+
if (await fs.pathExists(sourcePath)) {
|
|
123
|
+
await fs.ensureDir(path.dirname(targetPath));
|
|
124
|
+
await fs.copy(sourcePath, targetPath, { overwrite: true });
|
|
125
|
+
restoredCount++;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
// Remove files that exist now but weren't in the backup
|
|
129
|
+
// (i.e., files added after the backup was taken)
|
|
130
|
+
const currentFiles = await getFilesToBackup(claudeDir);
|
|
131
|
+
let removedCount = 0;
|
|
132
|
+
for (const filePath of currentFiles) {
|
|
133
|
+
const relativePath = path.relative(claudeDir, filePath);
|
|
134
|
+
if (!backedUpFiles.has(relativePath)) {
|
|
135
|
+
try {
|
|
136
|
+
await fs.remove(filePath);
|
|
137
|
+
removedCount++;
|
|
138
|
+
logger.debug(`Removed post-backup file: ${relativePath}`);
|
|
139
|
+
}
|
|
140
|
+
catch (error) {
|
|
141
|
+
logger.debug(`Failed to remove post-backup file: ${relativePath}`, error);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
logger.debug(`Restored ${restoredCount} files, removed ${removedCount} post-backup files from ${timestamp}`);
|
|
146
|
+
return {
|
|
147
|
+
success: true,
|
|
148
|
+
restoredFiles: restoredCount,
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
catch (error) {
|
|
152
|
+
logger.debug(`Failed to restore backup ${timestamp}`, error);
|
|
153
|
+
return {
|
|
154
|
+
success: false,
|
|
155
|
+
restoredFiles: 0,
|
|
156
|
+
error: error instanceof Error ? error.message : String(error),
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* List all available backups.
|
|
162
|
+
*
|
|
163
|
+
* @param claudeDir - Path to the .claude directory
|
|
164
|
+
*/
|
|
165
|
+
export async function listBackups(claudeDir) {
|
|
166
|
+
const backupsDir = getBackupsDir(claudeDir);
|
|
167
|
+
const backups = [];
|
|
168
|
+
try {
|
|
169
|
+
if (!await fs.pathExists(backupsDir)) {
|
|
170
|
+
return backups;
|
|
171
|
+
}
|
|
172
|
+
const entries = await fs.readdir(backupsDir, { withFileTypes: true });
|
|
173
|
+
for (const entry of entries) {
|
|
174
|
+
if (entry.isDirectory()) {
|
|
175
|
+
const backupPath = path.join(backupsDir, entry.name);
|
|
176
|
+
const manifestPath = path.join(backupPath, MANIFEST_FILE);
|
|
177
|
+
let manifest = null;
|
|
178
|
+
let createdAt;
|
|
179
|
+
if (await fs.pathExists(manifestPath)) {
|
|
180
|
+
manifest = await fs.readJson(manifestPath);
|
|
181
|
+
createdAt = new Date(manifest.createdAt);
|
|
182
|
+
}
|
|
183
|
+
else {
|
|
184
|
+
// Fall back to directory mtime
|
|
185
|
+
const stats = await fs.stat(backupPath);
|
|
186
|
+
createdAt = stats.mtime;
|
|
187
|
+
}
|
|
188
|
+
backups.push({
|
|
189
|
+
timestamp: entry.name,
|
|
190
|
+
path: backupPath,
|
|
191
|
+
manifest,
|
|
192
|
+
createdAt,
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
// Sort by creation date, newest first
|
|
197
|
+
backups.sort((a, b) => b.createdAt.getTime() - a.createdAt.getTime());
|
|
198
|
+
return backups;
|
|
199
|
+
}
|
|
200
|
+
catch (error) {
|
|
201
|
+
logger.debug(`Failed to list backups`, error);
|
|
202
|
+
return backups;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Prune old backups, keeping only the most recent ones.
|
|
207
|
+
*
|
|
208
|
+
* @param claudeDir - Path to the .claude directory
|
|
209
|
+
* @param keepCount - Number of backups to keep (default: 5)
|
|
210
|
+
*/
|
|
211
|
+
export async function pruneOldBackups(claudeDir, keepCount = 5) {
|
|
212
|
+
try {
|
|
213
|
+
const backups = await listBackups(claudeDir);
|
|
214
|
+
if (backups.length <= keepCount) {
|
|
215
|
+
return 0;
|
|
216
|
+
}
|
|
217
|
+
// Backups are already sorted newest first, so remove from the end
|
|
218
|
+
const toRemove = backups.slice(keepCount);
|
|
219
|
+
let removed = 0;
|
|
220
|
+
for (const backup of toRemove) {
|
|
221
|
+
try {
|
|
222
|
+
await fs.remove(backup.path);
|
|
223
|
+
removed++;
|
|
224
|
+
logger.debug(`Removed old backup: ${backup.timestamp}`);
|
|
225
|
+
}
|
|
226
|
+
catch (error) {
|
|
227
|
+
logger.debug(`Failed to remove backup ${backup.timestamp}`, error);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
return removed;
|
|
231
|
+
}
|
|
232
|
+
catch (error) {
|
|
233
|
+
logger.debug(`Failed to prune backups`, error);
|
|
234
|
+
return 0;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Get all files to backup (excluding backups directory).
|
|
239
|
+
*/
|
|
240
|
+
async function getFilesToBackup(claudeDir) {
|
|
241
|
+
const files = [];
|
|
242
|
+
const backupsDir = getBackupsDir(claudeDir);
|
|
243
|
+
async function scanDir(dir) {
|
|
244
|
+
if (!await fs.pathExists(dir)) {
|
|
245
|
+
return;
|
|
246
|
+
}
|
|
247
|
+
const entries = await fs.readdir(dir, { withFileTypes: true });
|
|
248
|
+
for (const entry of entries) {
|
|
249
|
+
const fullPath = path.join(dir, entry.name);
|
|
250
|
+
// Skip backups directory
|
|
251
|
+
if (fullPath === backupsDir || fullPath.startsWith(backupsDir + path.sep)) {
|
|
252
|
+
continue;
|
|
253
|
+
}
|
|
254
|
+
if (entry.isDirectory()) {
|
|
255
|
+
await scanDir(fullPath);
|
|
256
|
+
}
|
|
257
|
+
else if (entry.isFile()) {
|
|
258
|
+
files.push(fullPath);
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
await scanDir(claudeDir);
|
|
263
|
+
return files;
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Get the most recent backup.
|
|
267
|
+
*/
|
|
268
|
+
export async function getLatestBackup(claudeDir) {
|
|
269
|
+
const backups = await listBackups(claudeDir);
|
|
270
|
+
return backups.length > 0 ? backups[0] : null;
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Check if a backup exists for a given timestamp.
|
|
274
|
+
*/
|
|
275
|
+
export async function backupExists(claudeDir, timestamp) {
|
|
276
|
+
const backupPath = path.join(getBackupsDir(claudeDir), timestamp);
|
|
277
|
+
return fs.pathExists(backupPath);
|
|
278
|
+
}
|
|
279
|
+
// ============================================================================
|
|
280
|
+
// Legacy functions (preserved for backward compatibility)
|
|
281
|
+
// ============================================================================
|
|
282
|
+
/**
|
|
283
|
+
* Create a backup of a file if it exists.
|
|
284
|
+
* Returns the backup path if created, null otherwise.
|
|
285
|
+
* @deprecated Use createBackup for full directory backups
|
|
286
|
+
*/
|
|
287
|
+
export async function backupIfExists(filePath) {
|
|
288
|
+
try {
|
|
289
|
+
if (await fs.pathExists(filePath)) {
|
|
290
|
+
const backupPath = `${filePath}.backup.${Date.now()}`;
|
|
291
|
+
await fs.copy(filePath, backupPath);
|
|
292
|
+
logger.debug(`Backed up ${filePath} to ${backupPath}`);
|
|
293
|
+
return backupPath;
|
|
294
|
+
}
|
|
295
|
+
return null;
|
|
296
|
+
}
|
|
297
|
+
catch (error) {
|
|
298
|
+
logger.debug(`Failed to backup ${filePath}`, error);
|
|
299
|
+
return null;
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
/**
|
|
303
|
+
* Restore a file from backup.
|
|
304
|
+
* @deprecated Use restoreBackupFull for full directory restores
|
|
305
|
+
*/
|
|
306
|
+
export async function restoreFromBackup(backupPath, originalPath) {
|
|
307
|
+
try {
|
|
308
|
+
if (await fs.pathExists(backupPath)) {
|
|
309
|
+
await fs.copy(backupPath, originalPath, { overwrite: true });
|
|
310
|
+
await fs.remove(backupPath);
|
|
311
|
+
logger.debug(`Restored ${originalPath} from backup`);
|
|
312
|
+
return true;
|
|
313
|
+
}
|
|
314
|
+
return false;
|
|
315
|
+
}
|
|
316
|
+
catch (error) {
|
|
317
|
+
logger.debug(`Failed to restore from backup ${backupPath}`, error);
|
|
318
|
+
return false;
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
/**
|
|
322
|
+
* Clean up old backup files (older than specified age in days).
|
|
323
|
+
* @deprecated Use pruneOldBackups for directory-based backup management
|
|
324
|
+
*/
|
|
325
|
+
export async function cleanupOldBackups(directory, maxAgeDays = 7) {
|
|
326
|
+
let cleaned = 0;
|
|
327
|
+
const maxAgeMs = maxAgeDays * 24 * 60 * 60 * 1000;
|
|
328
|
+
const now = Date.now();
|
|
329
|
+
try {
|
|
330
|
+
if (!await fs.pathExists(directory)) {
|
|
331
|
+
return 0;
|
|
332
|
+
}
|
|
333
|
+
const files = await fs.readdir(directory);
|
|
334
|
+
for (const file of files) {
|
|
335
|
+
if (file.includes('.backup.')) {
|
|
336
|
+
const filePath = path.join(directory, file);
|
|
337
|
+
const stats = await fs.stat(filePath);
|
|
338
|
+
const age = now - stats.mtimeMs;
|
|
339
|
+
if (age > maxAgeMs) {
|
|
340
|
+
await fs.remove(filePath);
|
|
341
|
+
cleaned++;
|
|
342
|
+
logger.debug(`Cleaned up old backup: ${filePath}`);
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
catch (error) {
|
|
348
|
+
logger.debug(`Error cleaning backups in ${directory}`, error);
|
|
349
|
+
}
|
|
350
|
+
return cleaned;
|
|
351
|
+
}
|
|
352
|
+
//# sourceMappingURL=backup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backup.js","sourceRoot":"","sources":["../../src/utils/backup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAoDhD,MAAM,WAAW,GAAG,SAAS,CAAC;AAC9B,MAAM,aAAa,GAAG,eAAe,CAAC;AAEtC;;;GAGG;AACH,SAAS,iBAAiB;IACxB,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,sDAAsD;IACtD,OAAO,GAAG,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAChF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,SAAiB;IAC7C,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;AAC3C,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,SAAiB,EACjB,SAAiB,QAAQ,EACzB,UAAkB,SAAS;IAE3B,MAAM,SAAS,GAAG,iBAAiB,EAAE,CAAC;IACtC,MAAM,UAAU,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;IAC5C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IAEpD,IAAI,CAAC;QACH,kCAAkC;QAClC,MAAM,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QAE/B,+DAA+D;QAC/D,MAAM,KAAK,GAAG,MAAM,gBAAgB,CAAC,SAAS,CAAC,CAAC;QAChD,MAAM,WAAW,GAAsB,EAAE,CAAC;QAE1C,iBAAiB;QACjB,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE,CAAC;YAC7B,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YACxD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;YAEvD,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;YAC7C,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;YAEpC,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACtC,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAEtC,WAAW,CAAC,IAAI,CAAC;gBACf,YAAY;gBACZ,IAAI;gBACJ,IAAI,EAAE,KAAK,CAAC,IAAI;aACjB,CAAC,CAAC;QACL,CAAC;QAED,kBAAkB;QAClB,MAAM,QAAQ,GAAmB;YAC/B,SAAS;YACT,OAAO;YACP,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,MAAM;YACN,KAAK,EAAE,WAAW;SACnB,CAAC;QAEF,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;QAElF,MAAM,CAAC,KAAK,CAAC,qBAAqB,UAAU,SAAS,WAAW,CAAC,MAAM,QAAQ,CAAC,CAAC;QAEjF,OAAO;YACL,OAAO,EAAE,IAAI;YACb,UAAU;YACV,SAAS;YACT,SAAS,EAAE,WAAW,CAAC,MAAM;SAC9B,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;QAC/C,0BAA0B;QAC1B,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAC9B,CAAC;QAAC,MAAM,CAAC;YACP,wBAAwB;QAC1B,CAAC;QACD,OAAO;YACL,OAAO,EAAE,KAAK;YACd,UAAU,EAAE,IAAI;YAChB,SAAS,EAAE,IAAI;YACf,SAAS,EAAE,CAAC;YACZ,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAC9D,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,SAAiB,EACjB,SAAiB;IAEjB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC,CAAC;IAElE,IAAI,CAAC;QACH,sBAAsB;QACtB,IAAI,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YACrC,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,aAAa,EAAE,CAAC;gBAChB,KAAK,EAAE,qBAAqB,SAAS,EAAE;aACxC,CAAC;QACJ,CAAC;QAED,gBAAgB;QAChB,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;QAC1D,IAAI,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YACvC,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,aAAa,EAAE,CAAC;gBAChB,KAAK,EAAE,8BAA8B,SAAS,EAAE;aACjD,CAAC;QACJ,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAmB,CAAC;QAEnE,6CAA6C;QAC7C,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;QAEvE,gCAAgC;QAChC,IAAI,aAAa,GAAG,CAAC,CAAC;QACtB,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;YACnC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;YAC7D,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;YAE5D,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;gBACpC,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;gBAC7C,MAAM,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC3D,aAAa,EAAE,CAAC;YAClB,CAAC;QACH,CAAC;QAED,wDAAwD;QACxD,iDAAiD;QACjD,MAAM,YAAY,GAAG,MAAM,gBAAgB,CAAC,SAAS,CAAC,CAAC;QACvD,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,KAAK,MAAM,QAAQ,IAAI,YAAY,EAAE,CAAC;YACpC,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YACxD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;gBACrC,IAAI,CAAC;oBACH,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;oBAC1B,YAAY,EAAE,CAAC;oBACf,MAAM,CAAC,KAAK,CAAC,6BAA6B,YAAY,EAAE,CAAC,CAAC;gBAC5D,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,MAAM,CAAC,KAAK,CAAC,sCAAsC,YAAY,EAAE,EAAE,KAAK,CAAC,CAAC;gBAC5E,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,CAAC,KAAK,CAAC,YAAY,aAAa,mBAAmB,YAAY,2BAA2B,SAAS,EAAE,CAAC,CAAC;QAE7G,OAAO;YACL,OAAO,EAAE,IAAI;YACb,aAAa,EAAE,aAAa;SAC7B,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,4BAA4B,SAAS,EAAE,EAAE,KAAK,CAAC,CAAC;QAC7D,OAAO;YACL,OAAO,EAAE,KAAK;YACd,aAAa,EAAE,CAAC;YAChB,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAC9D,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,SAAiB;IACjD,MAAM,UAAU,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;IAC5C,MAAM,OAAO,GAAiB,EAAE,CAAC;IAEjC,IAAI,CAAC;QACH,IAAI,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YACrC,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAEtE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACxB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;gBACrD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;gBAE1D,IAAI,QAAQ,GAA0B,IAAI,CAAC;gBAC3C,IAAI,SAAe,CAAC;gBAEpB,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;oBACtC,QAAQ,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAmB,CAAC;oBAC7D,SAAS,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;gBAC3C,CAAC;qBAAM,CAAC;oBACN,+BAA+B;oBAC/B,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;oBACxC,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC;gBAC1B,CAAC;gBAED,OAAO,CAAC,IAAI,CAAC;oBACX,SAAS,EAAE,KAAK,CAAC,IAAI;oBACrB,IAAI,EAAE,UAAU;oBAChB,QAAQ;oBACR,SAAS;iBACV,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,sCAAsC;QACtC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC;QAEtE,OAAO,OAAO,CAAC;IACjB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC;QAC9C,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,SAAiB,EAAE,YAAoB,CAAC;IAC5E,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,SAAS,CAAC,CAAC;QAE7C,IAAI,OAAO,CAAC,MAAM,IAAI,SAAS,EAAE,CAAC;YAChC,OAAO,CAAC,CAAC;QACX,CAAC;QAED,kEAAkE;QAClE,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAC1C,IAAI,OAAO,GAAG,CAAC,CAAC;QAEhB,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;YAC9B,IAAI,CAAC;gBACH,MAAM,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAC7B,OAAO,EAAE,CAAC;gBACV,MAAM,CAAC,KAAK,CAAC,uBAAuB,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;YAC1D,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,KAAK,CAAC,2BAA2B,MAAM,CAAC,SAAS,EAAE,EAAE,KAAK,CAAC,CAAC;YACrE,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;QAC/C,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,gBAAgB,CAAC,SAAiB;IAC/C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,UAAU,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;IAE5C,KAAK,UAAU,OAAO,CAAC,GAAW;QAChC,IAAI,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9B,OAAO;QACT,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAE/D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAE5C,yBAAyB;YACzB,IAAI,QAAQ,KAAK,UAAU,IAAI,QAAQ,CAAC,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC1E,SAAS;YACX,CAAC;YAED,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACxB,MAAM,OAAO,CAAC,QAAQ,CAAC,CAAC;YAC1B,CAAC;iBAAM,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;gBAC1B,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,OAAO,CAAC,SAAS,CAAC,CAAC;IACzB,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,SAAiB;IACrD,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,SAAS,CAAC,CAAC;IAC7C,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAChD,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,SAAiB,EAAE,SAAiB;IACrE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC,CAAC;IAClE,OAAO,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AACnC,CAAC;AAED,+EAA+E;AAC/E,0DAA0D;AAC1D,+EAA+E;AAE/E;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,QAAgB;IACnD,IAAI,CAAC;QACH,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAClC,MAAM,UAAU,GAAG,GAAG,QAAQ,WAAW,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;YACtD,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;YACpC,MAAM,CAAC,KAAK,CAAC,aAAa,QAAQ,OAAO,UAAU,EAAE,CAAC,CAAC;YACvD,OAAO,UAAU,CAAC;QACpB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,oBAAoB,QAAQ,EAAE,EAAE,KAAK,CAAC,CAAC;QACpD,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,UAAkB,EAAE,YAAoB;IAC9E,IAAI,CAAC;QACH,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YACpC,MAAM,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC7D,MAAM,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YAC5B,MAAM,CAAC,KAAK,CAAC,YAAY,YAAY,cAAc,CAAC,CAAC;YACrD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,iCAAiC,UAAU,EAAE,EAAE,KAAK,CAAC,CAAC;QACnE,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,SAAiB,EAAE,UAAU,GAAG,CAAC;IACvE,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,MAAM,QAAQ,GAAG,UAAU,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IAClD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAEvB,IAAI,CAAC;QACH,IAAI,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YACpC,OAAO,CAAC,CAAC;QACX,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAE1C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;gBAC5C,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACtC,MAAM,GAAG,GAAG,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC;gBAEhC,IAAI,GAAG,GAAG,QAAQ,EAAE,CAAC;oBACnB,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;oBAC1B,OAAO,EAAE,CAAC;oBACV,MAAM,CAAC,KAAK,CAAC,0BAA0B,QAAQ,EAAE,CAAC,CAAC;gBACrD,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,6BAA6B,SAAS,EAAE,EAAE,KAAK,CAAC,CAAC;IAChE,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { CIProviderConfig, CIPipelineStatus, CIDetectionResult, CIDetectionOptions, CIProvider } from '../types/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Auto-detect the CI provider for a project.
|
|
4
|
+
* Priority: config override > config files > remote URL > CLI tools > fallback.
|
|
5
|
+
*/
|
|
6
|
+
export declare function detectCIProvider(projectRoot: string, options?: CIDetectionOptions): Promise<CIDetectionResult>;
|
|
7
|
+
/**
|
|
8
|
+
* Normalize a GitHub Actions run JSON object to CIPipelineStatus.
|
|
9
|
+
*/
|
|
10
|
+
export declare function normalizeGitHubStatus(run: Record<string, unknown> | null | undefined): CIPipelineStatus | null;
|
|
11
|
+
/**
|
|
12
|
+
* Normalize a GitLab pipeline JSON object to CIPipelineStatus.
|
|
13
|
+
*/
|
|
14
|
+
export declare function normalizeGitLabStatus(pipeline: Record<string, unknown> | null | undefined): CIPipelineStatus | null;
|
|
15
|
+
/**
|
|
16
|
+
* Create a CIProvider instance from a config.
|
|
17
|
+
*/
|
|
18
|
+
export declare function createCIProvider(config: CIProviderConfig | null): CIProvider;
|
|
19
|
+
/**
|
|
20
|
+
* Convenience function: detect CI provider and create an adapter.
|
|
21
|
+
*/
|
|
22
|
+
export declare function getCIProvider(projectRoot: string): Promise<CIProvider>;
|
|
23
|
+
//# sourceMappingURL=ci-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ci-provider.d.ts","sourceRoot":"","sources":["../../src/utils/ci-provider.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAKV,gBAAgB,EAChB,gBAAgB,EAKhB,iBAAiB,EACjB,kBAAkB,EAClB,UAAU,EACX,MAAM,mBAAmB,CAAC;AA+M3B;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,iBAAiB,CAAC,CAuC5B;AAMD;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,SAAS,GAC9C,gBAAgB,GAAG,IAAI,CAsDzB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,SAAS,GACnD,gBAAgB,GAAG,IAAI,CA2CzB;AA6ND;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI,GAAG,UAAU,CAY5E;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAG5E"}
|