@emaenriquez/projectmanager-cli 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.
Files changed (174) hide show
  1. package/README.md +98 -0
  2. package/dist/application/ConfigManager.d.ts +73 -0
  3. package/dist/application/ConfigManager.d.ts.map +1 -0
  4. package/dist/application/ConfigManager.js +253 -0
  5. package/dist/application/ConfigManager.js.map +1 -0
  6. package/dist/application/errors/ErrorHandler.d.ts +27 -0
  7. package/dist/application/errors/ErrorHandler.d.ts.map +1 -0
  8. package/dist/application/errors/ErrorHandler.js +88 -0
  9. package/dist/application/errors/ErrorHandler.js.map +1 -0
  10. package/dist/application/state/StateManager.d.ts +26 -0
  11. package/dist/application/state/StateManager.d.ts.map +1 -0
  12. package/dist/application/state/StateManager.js +114 -0
  13. package/dist/application/state/StateManager.js.map +1 -0
  14. package/dist/application/use_cases/AddProjectUseCase.d.ts +9 -0
  15. package/dist/application/use_cases/AddProjectUseCase.d.ts.map +1 -0
  16. package/dist/application/use_cases/AddProjectUseCase.js +85 -0
  17. package/dist/application/use_cases/AddProjectUseCase.js.map +1 -0
  18. package/dist/application/use_cases/ListProjectsUseCase.d.ts +7 -0
  19. package/dist/application/use_cases/ListProjectsUseCase.d.ts.map +1 -0
  20. package/dist/application/use_cases/ListProjectsUseCase.js +14 -0
  21. package/dist/application/use_cases/ListProjectsUseCase.js.map +1 -0
  22. package/dist/application/use_cases/OpenProjectUseCase.d.ts +10 -0
  23. package/dist/application/use_cases/OpenProjectUseCase.d.ts.map +1 -0
  24. package/dist/application/use_cases/OpenProjectUseCase.js +168 -0
  25. package/dist/application/use_cases/OpenProjectUseCase.js.map +1 -0
  26. package/dist/application/use_cases/RemoveProjectUseCase.d.ts +7 -0
  27. package/dist/application/use_cases/RemoveProjectUseCase.d.ts.map +1 -0
  28. package/dist/application/use_cases/RemoveProjectUseCase.js +24 -0
  29. package/dist/application/use_cases/RemoveProjectUseCase.js.map +1 -0
  30. package/dist/application/use_cases/ScanProjectsUseCase.d.ts +13 -0
  31. package/dist/application/use_cases/ScanProjectsUseCase.d.ts.map +1 -0
  32. package/dist/application/use_cases/ScanProjectsUseCase.js +57 -0
  33. package/dist/application/use_cases/ScanProjectsUseCase.js.map +1 -0
  34. package/dist/application/use_cases/SyncProjectsUseCase.d.ts +12 -0
  35. package/dist/application/use_cases/SyncProjectsUseCase.d.ts.map +1 -0
  36. package/dist/application/use_cases/SyncProjectsUseCase.js +74 -0
  37. package/dist/application/use_cases/SyncProjectsUseCase.js.map +1 -0
  38. package/dist/application/use_cases/SystemDiagnostics.d.ts +16 -0
  39. package/dist/application/use_cases/SystemDiagnostics.d.ts.map +1 -0
  40. package/dist/application/use_cases/SystemDiagnostics.js +35 -0
  41. package/dist/application/use_cases/SystemDiagnostics.js.map +1 -0
  42. package/dist/application/use_cases/TagProjectUseCase.d.ts +9 -0
  43. package/dist/application/use_cases/TagProjectUseCase.d.ts.map +1 -0
  44. package/dist/application/use_cases/TagProjectUseCase.js +41 -0
  45. package/dist/application/use_cases/TagProjectUseCase.js.map +1 -0
  46. package/dist/domain/patterns/ProjectPatterns.d.ts +47 -0
  47. package/dist/domain/patterns/ProjectPatterns.d.ts.map +1 -0
  48. package/dist/domain/patterns/ProjectPatterns.js +200 -0
  49. package/dist/domain/patterns/ProjectPatterns.js.map +1 -0
  50. package/dist/domain/services/GitService.d.ts +23 -0
  51. package/dist/domain/services/GitService.d.ts.map +1 -0
  52. package/dist/domain/services/GitService.js +155 -0
  53. package/dist/domain/services/GitService.js.map +1 -0
  54. package/dist/domain/services/IgnoreFileParser.d.ts +55 -0
  55. package/dist/domain/services/IgnoreFileParser.d.ts.map +1 -0
  56. package/dist/domain/services/IgnoreFileParser.js +200 -0
  57. package/dist/domain/services/IgnoreFileParser.js.map +1 -0
  58. package/dist/domain/services/ProjectScanner.d.ts +65 -0
  59. package/dist/domain/services/ProjectScanner.d.ts.map +1 -0
  60. package/dist/domain/services/ProjectScanner.js +207 -0
  61. package/dist/domain/services/ProjectScanner.js.map +1 -0
  62. package/dist/domain/services/TechnologyDetector.d.ts +78 -0
  63. package/dist/domain/services/TechnologyDetector.d.ts.map +1 -0
  64. package/dist/domain/services/TechnologyDetector.js +633 -0
  65. package/dist/domain/services/TechnologyDetector.js.map +1 -0
  66. package/dist/domain/services/ToolDetector.d.ts +74 -0
  67. package/dist/domain/services/ToolDetector.d.ts.map +1 -0
  68. package/dist/domain/services/ToolDetector.js +344 -0
  69. package/dist/domain/services/ToolDetector.js.map +1 -0
  70. package/dist/domain/services/index.d.ts +5 -0
  71. package/dist/domain/services/index.d.ts.map +1 -0
  72. package/dist/domain/services/index.js +12 -0
  73. package/dist/domain/services/index.js.map +1 -0
  74. package/dist/domain/types/Config.d.ts +37 -0
  75. package/dist/domain/types/Config.d.ts.map +1 -0
  76. package/dist/domain/types/Config.js +6 -0
  77. package/dist/domain/types/Config.js.map +1 -0
  78. package/dist/index.d.ts +6 -0
  79. package/dist/index.d.ts.map +1 -0
  80. package/dist/index.js +17 -0
  81. package/dist/index.js.map +1 -0
  82. package/dist/infrastructure/database/DatabaseConnection.d.ts +88 -0
  83. package/dist/infrastructure/database/DatabaseConnection.d.ts.map +1 -0
  84. package/dist/infrastructure/database/DatabaseConnection.js +318 -0
  85. package/dist/infrastructure/database/DatabaseConnection.js.map +1 -0
  86. package/dist/infrastructure/database/DatabaseValidator.d.ts +154 -0
  87. package/dist/infrastructure/database/DatabaseValidator.d.ts.map +1 -0
  88. package/dist/infrastructure/database/DatabaseValidator.js +583 -0
  89. package/dist/infrastructure/database/DatabaseValidator.js.map +1 -0
  90. package/dist/infrastructure/database/index.d.ts +8 -0
  91. package/dist/infrastructure/database/index.d.ts.map +1 -0
  92. package/dist/infrastructure/database/index.js +14 -0
  93. package/dist/infrastructure/database/index.js.map +1 -0
  94. package/dist/infrastructure/database/migrations/001_initial.d.ts +24 -0
  95. package/dist/infrastructure/database/migrations/001_initial.d.ts.map +1 -0
  96. package/dist/infrastructure/database/migrations/001_initial.js +109 -0
  97. package/dist/infrastructure/database/migrations/001_initial.js.map +1 -0
  98. package/dist/infrastructure/database/migrations/Migration.d.ts +27 -0
  99. package/dist/infrastructure/database/migrations/Migration.d.ts.map +1 -0
  100. package/dist/infrastructure/database/migrations/Migration.js +3 -0
  101. package/dist/infrastructure/database/migrations/Migration.js.map +1 -0
  102. package/dist/infrastructure/database/migrations/MigrationRunner.d.ts +52 -0
  103. package/dist/infrastructure/database/migrations/MigrationRunner.d.ts.map +1 -0
  104. package/dist/infrastructure/database/migrations/MigrationRunner.js +167 -0
  105. package/dist/infrastructure/database/migrations/MigrationRunner.js.map +1 -0
  106. package/dist/infrastructure/database/migrations/index.d.ts +10 -0
  107. package/dist/infrastructure/database/migrations/index.d.ts.map +1 -0
  108. package/dist/infrastructure/database/migrations/index.js +22 -0
  109. package/dist/infrastructure/database/migrations/index.js.map +1 -0
  110. package/dist/infrastructure/filesystem/DirectoryManager.d.ts +50 -0
  111. package/dist/infrastructure/filesystem/DirectoryManager.d.ts.map +1 -0
  112. package/dist/infrastructure/filesystem/DirectoryManager.js +143 -0
  113. package/dist/infrastructure/filesystem/DirectoryManager.js.map +1 -0
  114. package/dist/infrastructure/filesystem/index.d.ts +2 -0
  115. package/dist/infrastructure/filesystem/index.d.ts.map +1 -0
  116. package/dist/infrastructure/filesystem/index.js +6 -0
  117. package/dist/infrastructure/filesystem/index.js.map +1 -0
  118. package/dist/infrastructure/logging/LogRotator.d.ts +43 -0
  119. package/dist/infrastructure/logging/LogRotator.d.ts.map +1 -0
  120. package/dist/infrastructure/logging/LogRotator.js +172 -0
  121. package/dist/infrastructure/logging/LogRotator.js.map +1 -0
  122. package/dist/infrastructure/logging/Logger.d.ts +59 -0
  123. package/dist/infrastructure/logging/Logger.d.ts.map +1 -0
  124. package/dist/infrastructure/logging/Logger.js +182 -0
  125. package/dist/infrastructure/logging/Logger.js.map +1 -0
  126. package/dist/infrastructure/logging/index.d.ts +3 -0
  127. package/dist/infrastructure/logging/index.d.ts.map +1 -0
  128. package/dist/infrastructure/logging/index.js +8 -0
  129. package/dist/infrastructure/logging/index.js.map +1 -0
  130. package/dist/infrastructure/repositories/ProjectRepository.d.ts +20 -0
  131. package/dist/infrastructure/repositories/ProjectRepository.d.ts.map +1 -0
  132. package/dist/infrastructure/repositories/ProjectRepository.js +61 -0
  133. package/dist/infrastructure/repositories/ProjectRepository.js.map +1 -0
  134. package/dist/infrastructure/repositories/QueryBuilder.d.ts +24 -0
  135. package/dist/infrastructure/repositories/QueryBuilder.d.ts.map +1 -0
  136. package/dist/infrastructure/repositories/QueryBuilder.js +92 -0
  137. package/dist/infrastructure/repositories/QueryBuilder.js.map +1 -0
  138. package/dist/infrastructure/repositories/TagRepository.d.ts +18 -0
  139. package/dist/infrastructure/repositories/TagRepository.d.ts.map +1 -0
  140. package/dist/infrastructure/repositories/TagRepository.js +66 -0
  141. package/dist/infrastructure/repositories/TagRepository.js.map +1 -0
  142. package/dist/infrastructure/repositories/TechnologyRepository.d.ts +16 -0
  143. package/dist/infrastructure/repositories/TechnologyRepository.d.ts.map +1 -0
  144. package/dist/infrastructure/repositories/TechnologyRepository.js +46 -0
  145. package/dist/infrastructure/repositories/TechnologyRepository.js.map +1 -0
  146. package/dist/infrastructure/repositories/TransactionManager.d.ts +11 -0
  147. package/dist/infrastructure/repositories/TransactionManager.d.ts.map +1 -0
  148. package/dist/infrastructure/repositories/TransactionManager.js +21 -0
  149. package/dist/infrastructure/repositories/TransactionManager.js.map +1 -0
  150. package/dist/infrastructure/ui/ScreenManager.d.ts +11 -0
  151. package/dist/infrastructure/ui/ScreenManager.d.ts.map +1 -0
  152. package/dist/infrastructure/ui/ScreenManager.js +69 -0
  153. package/dist/infrastructure/ui/ScreenManager.js.map +1 -0
  154. package/dist/ui/cli/CLI.d.ts +9 -0
  155. package/dist/ui/cli/CLI.d.ts.map +1 -0
  156. package/dist/ui/cli/CLI.js +211 -0
  157. package/dist/ui/cli/CLI.js.map +1 -0
  158. package/dist/ui/components/DetailsPanel.d.ts +11 -0
  159. package/dist/ui/components/DetailsPanel.d.ts.map +1 -0
  160. package/dist/ui/components/DetailsPanel.js +181 -0
  161. package/dist/ui/components/DetailsPanel.js.map +1 -0
  162. package/dist/ui/components/ProjectListView.d.ts +15 -0
  163. package/dist/ui/components/ProjectListView.d.ts.map +1 -0
  164. package/dist/ui/components/ProjectListView.js +122 -0
  165. package/dist/ui/components/ProjectListView.js.map +1 -0
  166. package/dist/ui/tui/TUIApplication.d.ts +17 -0
  167. package/dist/ui/tui/TUIApplication.d.ts.map +1 -0
  168. package/dist/ui/tui/TUIApplication.js +532 -0
  169. package/dist/ui/tui/TUIApplication.js.map +1 -0
  170. package/dist/ui/tui/Theme.d.ts +25 -0
  171. package/dist/ui/tui/Theme.d.ts.map +1 -0
  172. package/dist/ui/tui/Theme.js +62 -0
  173. package/dist/ui/tui/Theme.js.map +1 -0
  174. package/package.json +56 -0
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Represents a detected tool on the system
3
+ */
4
+ export interface DetectedTool {
5
+ name: string;
6
+ path?: string;
7
+ version?: string;
8
+ available: boolean;
9
+ }
10
+ /**
11
+ * ToolDetector detects installed tools and development environments
12
+ * Supports Windows, Linux, and macOS
13
+ */
14
+ export declare class ToolDetector {
15
+ private readonly TIMEOUT_MS;
16
+ /**
17
+ * Detect all tools on the system
18
+ * @returns Map of tool categories to detected tools
19
+ */
20
+ detectAll(): Map<string, DetectedTool[]>;
21
+ /**
22
+ * Detect installed code editors
23
+ * Checks PATH for: VS Code, Cursor, Sublime Text, Neovim, Vim,
24
+ * and scans the Windows LocalAppData Programs tree for Kiro,
25
+ * Antigravity, and Antigravity IDE executables.
26
+ */
27
+ detectEditors(): DetectedTool[];
28
+ /**
29
+ * Detect installed runtimes
30
+ */
31
+ detectRuntimes(): DetectedTool[];
32
+ /**
33
+ * Detect development tools
34
+ * Includes: Git, Docker, Kiro, Claude Code, npm, yarn
35
+ */
36
+ detectDevelopmentTools(): DetectedTool[];
37
+ /**
38
+ * Detect a single tool by command name
39
+ * @param command Command name to check
40
+ * @param checkVersion Whether to query command version (default true)
41
+ * @returns Tool detection result
42
+ */
43
+ private detectTool;
44
+ /**
45
+ * Detect installed editors present as local program folders rather than
46
+ * resolved globally via PATH.
47
+ */
48
+ private detectEditorsFromLocalPrograms;
49
+ /**
50
+ * Resolve absolute path of command
51
+ * @param command Command name to check
52
+ * @returns Executable path or undefined
53
+ */
54
+ private getCommandPath;
55
+ /**
56
+ * Check if a command exists on the system
57
+ * @param command Command name to check
58
+ * @returns true if command exists, false otherwise
59
+ */
60
+ private checkCommandExists;
61
+ /**
62
+ * Get version of a command
63
+ * @param command Command name
64
+ * @returns Version string or undefined
65
+ */
66
+ private getVersion;
67
+ /**
68
+ * Parse version from command output
69
+ * @param output Command output
70
+ * @returns Parsed version string
71
+ */
72
+ private parseVersion;
73
+ }
74
+ //# sourceMappingURL=ToolDetector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToolDetector.d.ts","sourceRoot":"","sources":["../../../src/domain/services/ToolDetector.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;;GAGG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAQ;IAEnC;;;OAGG;IACI,SAAS,IAAI,GAAG,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC;IAe/C;;;;;OAKG;IACI,aAAa,IAAI,YAAY,EAAE;IAgFtC;;OAEG;IACI,cAAc,IAAI,YAAY,EAAE;IA6CvC;;;OAGG;IACI,sBAAsB,IAAI,YAAY,EAAE;IA0C/C;;;;;OAKG;IACH,OAAO,CAAC,UAAU;IAmBlB;;;OAGG;IACH,OAAO,CAAC,8BAA8B;IAoCtC;;;;OAIG;IACH,OAAO,CAAC,cAAc;IAUtB;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;IAI1B;;;;OAIG;IACH,OAAO,CAAC,UAAU;IAgClB;;;;OAIG;IACH,OAAO,CAAC,YAAY;CAUrB"}
@@ -0,0 +1,344 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.ToolDetector = void 0;
37
+ const child_process_1 = require("child_process");
38
+ const os = __importStar(require("os"));
39
+ const fs = __importStar(require("fs"));
40
+ const path = __importStar(require("path"));
41
+ /**
42
+ * ToolDetector detects installed tools and development environments
43
+ * Supports Windows, Linux, and macOS
44
+ */
45
+ class ToolDetector {
46
+ constructor() {
47
+ this.TIMEOUT_MS = 2000;
48
+ }
49
+ /**
50
+ * Detect all tools on the system
51
+ * @returns Map of tool categories to detected tools
52
+ */
53
+ detectAll() {
54
+ const tools = new Map();
55
+ // Detect editors
56
+ tools.set('editors', this.detectEditors());
57
+ // Detect runtimes
58
+ tools.set('runtimes', this.detectRuntimes());
59
+ // Detect development tools
60
+ tools.set('tools', this.detectDevelopmentTools());
61
+ return tools;
62
+ }
63
+ /**
64
+ * Detect installed code editors
65
+ * Checks PATH for: VS Code, Cursor, Sublime Text, Neovim, Vim,
66
+ * and scans the Windows LocalAppData Programs tree for Kiro,
67
+ * Antigravity, and Antigravity IDE executables.
68
+ */
69
+ detectEditors() {
70
+ const editors = [];
71
+ // VS Code
72
+ const vsCode = this.detectTool('code', false);
73
+ if (vsCode.available) {
74
+ editors.push({ name: 'VS Code', ...vsCode, available: true });
75
+ }
76
+ // Cursor
77
+ const cursor = this.detectTool('cursor', false);
78
+ if (cursor.available) {
79
+ editors.push({ name: 'Cursor', ...cursor, available: true });
80
+ }
81
+ // Sublime Text
82
+ const sublime = this.detectTool('subl', false);
83
+ if (sublime.available) {
84
+ editors.push({ name: 'Sublime Text', ...sublime, available: true });
85
+ }
86
+ // Neovim
87
+ const neovim = this.detectTool('nvim', false);
88
+ if (neovim.available) {
89
+ editors.push({ name: 'Neovim', ...neovim, available: true });
90
+ }
91
+ // Vim
92
+ const vim = this.detectTool('vim', false);
93
+ if (vim.available) {
94
+ editors.push({ name: 'Vim', ...vim, available: true });
95
+ }
96
+ // Kiro
97
+ const kiro = this.detectTool('kiro', false);
98
+ if (kiro.available) {
99
+ editors.push({ name: 'Kiro', ...kiro, available: true });
100
+ }
101
+ // Kiro CLI
102
+ const kiroCli = this.detectTool('kiro-cli', false);
103
+ if (kiroCli.available) {
104
+ editors.push({ name: 'Kiro CLI', ...kiroCli, available: true });
105
+ }
106
+ // Antigravity
107
+ const antigravity = this.detectTool('antigravity', false);
108
+ if (antigravity.available) {
109
+ editors.push({ name: 'Antigravity', ...antigravity, available: true });
110
+ }
111
+ // Antigravity IDE
112
+ const antigravityIde = this.detectTool('antigravity-ide', false);
113
+ if (antigravityIde.available) {
114
+ editors.push({ name: 'Antigravity IDE', ...antigravityIde, available: true });
115
+ }
116
+ // Antigravy (alias/compatibility)
117
+ const antigravy = this.detectTool('antigravy', false);
118
+ if (antigravy.available) {
119
+ editors.push({ name: 'Antigravy', ...antigravy, available: true });
120
+ }
121
+ // Antigravy CLI (alias/compatibility)
122
+ const antigravyCli = this.detectTool('antigravy-cli', false);
123
+ if (antigravyCli.available) {
124
+ editors.push({ name: 'Antigravy CLI', ...antigravyCli, available: true });
125
+ }
126
+ const localEditors = this.detectEditorsFromLocalPrograms();
127
+ for (const editor of localEditors) {
128
+ const existing = editors.find(existingEditor => existingEditor.name === editor.name);
129
+ if (!existing) {
130
+ editors.push(editor);
131
+ }
132
+ }
133
+ return editors;
134
+ }
135
+ /**
136
+ * Detect installed runtimes
137
+ */
138
+ detectRuntimes() {
139
+ const runtimes = [];
140
+ // Node.js
141
+ const node = this.detectTool('node');
142
+ if (node.available) {
143
+ runtimes.push({ name: 'Node.js', ...node, available: true });
144
+ }
145
+ // Python (try both python and python3)
146
+ let python = this.detectTool('python3');
147
+ if (!python.available) {
148
+ python = this.detectTool('python');
149
+ }
150
+ if (python.available) {
151
+ runtimes.push({ name: 'Python', ...python, available: true });
152
+ }
153
+ // Rust
154
+ const rustc = this.detectTool('rustc');
155
+ if (rustc.available) {
156
+ runtimes.push({ name: 'Rust', ...rustc, available: true });
157
+ }
158
+ // Go
159
+ const go = this.detectTool('go');
160
+ if (go.available) {
161
+ runtimes.push({ name: 'Go', ...go, available: true });
162
+ }
163
+ // Java
164
+ const java = this.detectTool('java');
165
+ if (java.available) {
166
+ runtimes.push({ name: 'Java', ...java, available: true });
167
+ }
168
+ // PHP
169
+ const php = this.detectTool('php');
170
+ if (php.available) {
171
+ runtimes.push({ name: 'PHP', ...php, available: true });
172
+ }
173
+ return runtimes;
174
+ }
175
+ /**
176
+ * Detect development tools
177
+ * Includes: Git, Docker, Kiro, Claude Code, npm, yarn
178
+ */
179
+ detectDevelopmentTools() {
180
+ const tools = [];
181
+ // Git
182
+ const git = this.detectTool('git');
183
+ if (git.available) {
184
+ tools.push({ name: 'Git', ...git, available: true });
185
+ }
186
+ // Docker
187
+ const docker = this.detectTool('docker');
188
+ if (docker.available) {
189
+ tools.push({ name: 'Docker', ...docker, available: true });
190
+ }
191
+ // Kiro
192
+ const kiro = this.detectTool('kiro');
193
+ if (kiro.available) {
194
+ tools.push({ name: 'Kiro', ...kiro, available: true });
195
+ }
196
+ // Claude Code
197
+ const claude = this.detectTool('claude');
198
+ if (claude.available) {
199
+ tools.push({ name: 'Claude Code', ...claude, available: true });
200
+ }
201
+ // npm
202
+ const npm = this.detectTool('npm');
203
+ if (npm.available) {
204
+ tools.push({ name: 'npm', ...npm, available: true });
205
+ }
206
+ // yarn
207
+ const yarn = this.detectTool('yarn');
208
+ if (yarn.available) {
209
+ tools.push({ name: 'yarn', ...yarn, available: true });
210
+ }
211
+ return tools;
212
+ }
213
+ /**
214
+ * Detect a single tool by command name
215
+ * @param command Command name to check
216
+ * @param checkVersion Whether to query command version (default true)
217
+ * @returns Tool detection result
218
+ */
219
+ detectTool(command, checkVersion = true) {
220
+ try {
221
+ const commandPath = this.getCommandPath(command);
222
+ if (!commandPath) {
223
+ return { available: false };
224
+ }
225
+ const version = checkVersion ? this.getVersion(command) : undefined;
226
+ return {
227
+ path: commandPath,
228
+ available: true,
229
+ version
230
+ };
231
+ }
232
+ catch (error) {
233
+ return { available: false };
234
+ }
235
+ }
236
+ /**
237
+ * Detect installed editors present as local program folders rather than
238
+ * resolved globally via PATH.
239
+ */
240
+ detectEditorsFromLocalPrograms() {
241
+ if (os.platform() !== 'win32') {
242
+ return [];
243
+ }
244
+ const programsRoot = path.join(process.env.LOCALAPPDATA || path.join(os.homedir(), 'AppData', 'Local'), 'Programs');
245
+ if (!fs.existsSync(programsRoot)) {
246
+ return [];
247
+ }
248
+ const definitions = [
249
+ { folder: 'Microsoft VS Code', name: 'VS Code', executable: 'Code.exe', command: 'code' },
250
+ { folder: 'Cursor', name: 'Cursor', executable: 'Cursor.exe', command: 'cursor' },
251
+ { folder: 'Sublime Text', name: 'Sublime Text', executable: 'sublime_text.exe', command: 'subl' },
252
+ { folder: 'Kiro', name: 'Kiro', executable: 'Kiro.exe', command: 'kiro' },
253
+ { folder: 'Antigravity', name: 'Antigravity', executable: 'Antigravity.exe', command: 'antigravity' },
254
+ { folder: 'Antigravity IDE', name: 'Antigravity IDE', executable: 'Antigravity IDE.exe', command: 'antigravity-ide' },
255
+ ];
256
+ const found = [];
257
+ for (const def of definitions) {
258
+ const folderPath = path.join(programsRoot, def.folder);
259
+ const exePath = path.join(folderPath, def.executable);
260
+ if (fs.existsSync(exePath)) {
261
+ found.push({
262
+ name: def.name,
263
+ path: exePath,
264
+ available: true
265
+ });
266
+ }
267
+ }
268
+ return found;
269
+ }
270
+ /**
271
+ * Resolve absolute path of command
272
+ * @param command Command name to check
273
+ * @returns Executable path or undefined
274
+ */
275
+ getCommandPath(command) {
276
+ try {
277
+ const checkCommand = os.platform() === 'win32' ? `where ${command}` : `which ${command}`;
278
+ const output = (0, child_process_1.execSync)(checkCommand, { timeout: this.TIMEOUT_MS, stdio: 'pipe', encoding: 'utf-8' }).trim();
279
+ return output ? output.split(/\r?\n/)[0].trim() : undefined;
280
+ }
281
+ catch (error) {
282
+ return undefined;
283
+ }
284
+ }
285
+ /**
286
+ * Check if a command exists on the system
287
+ * @param command Command name to check
288
+ * @returns true if command exists, false otherwise
289
+ */
290
+ checkCommandExists(command) {
291
+ return this.getCommandPath(command) !== undefined;
292
+ }
293
+ /**
294
+ * Get version of a command
295
+ * @param command Command name
296
+ * @returns Version string or undefined
297
+ */
298
+ getVersion(command) {
299
+ try {
300
+ // Try common version flags
301
+ const versionFlags = ['--version', '-v', '-V'];
302
+ for (const flag of versionFlags) {
303
+ try {
304
+ const output = (0, child_process_1.execSync)(`${command} ${flag}`, {
305
+ timeout: this.TIMEOUT_MS,
306
+ stdio: 'pipe',
307
+ encoding: 'utf-8'
308
+ }).trim();
309
+ if (output) {
310
+ // Extract version number from output
311
+ return this.parseVersion(output);
312
+ }
313
+ }
314
+ catch (err) {
315
+ // If execution timed out, abort subsequent flags to prevent blocking
316
+ if (err && (err.code === 'ETIMEDOUT' || err.killed)) {
317
+ break;
318
+ }
319
+ continue;
320
+ }
321
+ }
322
+ return undefined;
323
+ }
324
+ catch (error) {
325
+ return undefined;
326
+ }
327
+ }
328
+ /**
329
+ * Parse version from command output
330
+ * @param output Command output
331
+ * @returns Parsed version string
332
+ */
333
+ parseVersion(output) {
334
+ // Extract first version-like pattern (e.g., "1.0.0", "v1.0.0")
335
+ const versionMatch = output.match(/v?(\d+(?:\.\d+)*)/);
336
+ if (versionMatch) {
337
+ return versionMatch[1];
338
+ }
339
+ // Return first line if no version pattern found
340
+ return output.split('\n')[0];
341
+ }
342
+ }
343
+ exports.ToolDetector = ToolDetector;
344
+ //# sourceMappingURL=ToolDetector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToolDetector.js","sourceRoot":"","sources":["../../../src/domain/services/ToolDetector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export { TechnologyDetector, DetectedTechnology } from './TechnologyDetector';
2
+ export { ToolDetector, DetectedTool } from './ToolDetector';
3
+ export { ProjectScanner, ProjectMetadata, ScanResult, ScanError } from './ProjectScanner';
4
+ export { IgnoreFileParser, IgnorePattern } from './IgnoreFileParser';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/domain/services/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC1F,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IgnoreFileParser = exports.ProjectScanner = exports.ToolDetector = exports.TechnologyDetector = void 0;
4
+ var TechnologyDetector_1 = require("./TechnologyDetector");
5
+ Object.defineProperty(exports, "TechnologyDetector", { enumerable: true, get: function () { return TechnologyDetector_1.TechnologyDetector; } });
6
+ var ToolDetector_1 = require("./ToolDetector");
7
+ Object.defineProperty(exports, "ToolDetector", { enumerable: true, get: function () { return ToolDetector_1.ToolDetector; } });
8
+ var ProjectScanner_1 = require("./ProjectScanner");
9
+ Object.defineProperty(exports, "ProjectScanner", { enumerable: true, get: function () { return ProjectScanner_1.ProjectScanner; } });
10
+ var IgnoreFileParser_1 = require("./IgnoreFileParser");
11
+ Object.defineProperty(exports, "IgnoreFileParser", { enumerable: true, get: function () { return IgnoreFileParser_1.IgnoreFileParser; } });
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/domain/services/index.ts"],"names":[],"mappings":";;;AAAA,2DAA8E;AAArE,wHAAA,kBAAkB,OAAA;AAC3B,+CAA4D;AAAnD,4GAAA,YAAY,OAAA;AACrB,mDAA0F;AAAjF,gHAAA,cAAc,OAAA;AACvB,uDAAqE;AAA5D,oHAAA,gBAAgB,OAAA"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Configuration types for Project Hub application
3
+ */
4
+ export interface AppConfig {
5
+ name: string;
6
+ version: string;
7
+ }
8
+ export interface DatabaseConfig {
9
+ filename: string;
10
+ }
11
+ export interface ScannerConfig {
12
+ depth: number;
13
+ patterns: string[];
14
+ }
15
+ export interface ToolsConfig {
16
+ defaultEditor: string;
17
+ editors: string[];
18
+ }
19
+ export interface UIConfig {
20
+ theme: 'dark' | 'light';
21
+ itemsPerPage: number;
22
+ }
23
+ export interface LoggingConfig {
24
+ level: 'debug' | 'info' | 'warn' | 'error';
25
+ directory: string;
26
+ }
27
+ export interface Config {
28
+ app: AppConfig;
29
+ database: DatabaseConfig;
30
+ scanner: ScannerConfig;
31
+ tools: ToolsConfig;
32
+ ui: UIConfig;
33
+ logging: LoggingConfig;
34
+ }
35
+ export type ConfigKey = keyof Config;
36
+ export type DeepConfigKey = string;
37
+ //# sourceMappingURL=Config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Config.d.ts","sourceRoot":"","sources":["../../../src/domain/types/Config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IAC3C,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,MAAM;IACrB,GAAG,EAAE,SAAS,CAAC;IACf,QAAQ,EAAE,cAAc,CAAC;IACzB,OAAO,EAAE,aAAa,CAAC;IACvB,KAAK,EAAE,WAAW,CAAC;IACnB,EAAE,EAAE,QAAQ,CAAC;IACb,OAAO,EAAE,aAAa,CAAC;CACxB;AAED,MAAM,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC;AACrC,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ /**
3
+ * Configuration types for Project Hub application
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ //# sourceMappingURL=Config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Config.js","sourceRoot":"","sources":["../../../src/domain/types/Config.ts"],"names":[],"mappings":";AAAA;;GAEG"}
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Project Hub - CLI/TUI application for managing development projects
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;GAEG"}
package/dist/index.js ADDED
@@ -0,0 +1,17 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ /**
4
+ * Project Hub - CLI/TUI application for managing development projects
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ const CLI_1 = require("./ui/cli/CLI");
8
+ const TUIApplication_1 = require("./ui/tui/TUIApplication");
9
+ if (process.argv.length <= 2) {
10
+ const tui = new TUIApplication_1.TUIApplication();
11
+ tui.run();
12
+ }
13
+ else {
14
+ const cli = new CLI_1.CLI();
15
+ cli.run(process.argv);
16
+ }
17
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AACA;;GAEG;;AAEH,sCAAmC;AACnC,4DAAyD;AAEzD,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;IAC7B,MAAM,GAAG,GAAG,IAAI,+BAAc,EAAE,CAAC;IACjC,GAAG,CAAC,GAAG,EAAE,CAAC;AACZ,CAAC;KAAM,CAAC;IACN,MAAM,GAAG,GAAG,IAAI,SAAG,EAAE,CAAC;IACtB,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACxB,CAAC"}
@@ -0,0 +1,88 @@
1
+ import Database from 'better-sqlite3';
2
+ /**
3
+ * DatabaseConnection manages SQLite database connectivity for Project Hub
4
+ * Implements connection pooling and provides core database operations
5
+ */
6
+ export declare class DatabaseConnection {
7
+ private static instance;
8
+ private db;
9
+ private dbPath;
10
+ private connectionPool;
11
+ private poolSize;
12
+ private isOpen;
13
+ private constructor();
14
+ /**
15
+ * Get singleton instance of DatabaseConnection
16
+ */
17
+ static getInstance(): DatabaseConnection;
18
+ /**
19
+ * Reset instance for testing purposes
20
+ */
21
+ static resetInstanceForTesting(): void;
22
+ /**
23
+ * Set database path for testing
24
+ */
25
+ setTestDatabasePath(dbPath: string): void;
26
+ /**
27
+ * Open database connection
28
+ * Creates directory structure if it doesn't exist
29
+ * Initializes connection pool
30
+ */
31
+ open(): void;
32
+ /**
33
+ * Initialize connection pool for concurrent operations
34
+ */
35
+ private initializeConnectionPool;
36
+ /**
37
+ * Get a connection from the pool
38
+ */
39
+ private getPoolConnection;
40
+ /**
41
+ * Return a connection to the pool
42
+ */
43
+ private returnPoolConnection;
44
+ /**
45
+ * Close database connection and clean up resources
46
+ */
47
+ close(): void;
48
+ /**
49
+ * Execute a SQL statement without returning results
50
+ * Used for INSERT, UPDATE, DELETE operations
51
+ */
52
+ execute(sql: string, params?: any[]): void;
53
+ /**
54
+ * Prepare a SQL statement for reuse
55
+ * Returns a prepared statement object
56
+ */
57
+ prepare(sql: string): Database.Statement;
58
+ /**
59
+ * Execute a SELECT query and return all results
60
+ */
61
+ query<T = any>(sql: string, params?: any[]): T[];
62
+ /**
63
+ * Execute a SELECT query and return first result
64
+ */
65
+ queryOne<T = any>(sql: string, params?: any[]): T | undefined;
66
+ /**
67
+ * Execute a transaction
68
+ * All operations within the callback must succeed or all will rollback
69
+ */
70
+ transaction<T>(callback: () => T): T;
71
+ /**
72
+ * Verify database connection is open
73
+ */
74
+ private ensureOpen;
75
+ /**
76
+ * Get the database path
77
+ */
78
+ getDbPath(): string;
79
+ /**
80
+ * Check if database connection is open
81
+ */
82
+ isConnected(): boolean;
83
+ /**
84
+ * Get raw database instance (use with caution)
85
+ */
86
+ getRawDatabase(): Database.Database;
87
+ }
88
+ //# sourceMappingURL=DatabaseConnection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DatabaseConnection.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/database/DatabaseConnection.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAKtC;;;GAGG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAqB;IAC5C,OAAO,CAAC,EAAE,CAAkC;IAC5C,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,cAAc,CAA2B;IACjD,OAAO,CAAC,QAAQ,CAAa;IAC7B,OAAO,CAAC,MAAM,CAAkB;IAEhC,OAAO;IAOP;;OAEG;WACW,WAAW,IAAI,kBAAkB;IAO/C;;OAEG;WACW,uBAAuB,IAAI,IAAI;IAO7C;;OAEG;IACI,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAOhD;;;;OAIG;IACI,IAAI,IAAI,IAAI;IAsCnB;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAYhC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAczB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAQ5B;;OAEG;IACI,KAAK,IAAI,IAAI;IAwBpB;;;OAGG;IACI,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,IAAI;IAmBjD;;;OAGG;IACI,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,CAAC,SAAS;IAc/C;;OAEG;IACI,KAAK,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE;IAmBvD;;OAEG;IACI,QAAQ,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,SAAS;IAmBpE;;;OAGG;IACI,WAAW,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC;IAe3C;;OAEG;IACH,OAAO,CAAC,UAAU;IAMlB;;OAEG;IACI,SAAS,IAAI,MAAM;IAI1B;;OAEG;IACI,WAAW,IAAI,OAAO;IAI7B;;OAEG;IACI,cAAc,IAAI,QAAQ,CAAC,QAAQ;CAO3C"}