bobs-workshop 0.3.2 โ†’ 3.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 (200) hide show
  1. package/LICENSE +2 -2
  2. package/README.md +199 -210
  3. package/bin/bobs-workshop.js +109 -0
  4. package/config/agents.json +27 -0
  5. package/dist/plugins/bobs-workshop.js +34 -0
  6. package/dist/tools/background-agent/cancel.d.ts +3 -0
  7. package/dist/tools/background-agent/cancel.d.ts.map +1 -0
  8. package/dist/tools/background-agent/cancel.js +52 -0
  9. package/dist/tools/background-agent/concurrency.d.ts +15 -0
  10. package/dist/tools/background-agent/concurrency.d.ts.map +1 -0
  11. package/dist/tools/background-agent/concurrency.js +61 -0
  12. package/dist/tools/background-agent/index.d.ts +8 -0
  13. package/dist/tools/background-agent/index.d.ts.map +1 -0
  14. package/dist/tools/background-agent/index.js +7 -0
  15. package/dist/tools/background-agent/launch.d.ts +6 -0
  16. package/dist/tools/background-agent/launch.d.ts.map +1 -0
  17. package/dist/tools/background-agent/launch.js +33 -0
  18. package/dist/tools/background-agent/list.d.ts +7 -0
  19. package/dist/tools/background-agent/list.d.ts.map +1 -0
  20. package/dist/tools/background-agent/list.js +40 -0
  21. package/dist/tools/background-agent/manager.d.ts +29 -0
  22. package/dist/tools/background-agent/manager.d.ts.map +1 -0
  23. package/dist/tools/background-agent/manager.js +377 -0
  24. package/dist/tools/background-agent/output.d.ts +3 -0
  25. package/dist/tools/background-agent/output.d.ts.map +1 -0
  26. package/dist/tools/background-agent/output.js +41 -0
  27. package/dist/tools/background-agent/types.d.ts +46 -0
  28. package/dist/tools/background-agent/types.d.ts.map +1 -0
  29. package/dist/tools/background-agent/types.js +1 -0
  30. package/dist/tools/index.d.ts +9 -0
  31. package/dist/tools/index.d.ts.map +1 -0
  32. package/dist/tools/index.js +8 -0
  33. package/dist/tools/manual/index.d.ts +3 -0
  34. package/dist/tools/manual/index.d.ts.map +1 -0
  35. package/dist/tools/manual/index.js +2 -0
  36. package/dist/tools/manual/manual-update.d.ts +4 -0
  37. package/dist/tools/manual/manual-update.d.ts.map +1 -0
  38. package/dist/tools/manual/manual-update.js +190 -0
  39. package/dist/tools/manual/verify-manual.d.ts +4 -0
  40. package/dist/tools/manual/verify-manual.d.ts.map +1 -0
  41. package/dist/tools/manual/verify-manual.js +46 -0
  42. package/package.json +35 -67
  43. package/postinstall.js +190 -0
  44. package/src/agents/alice.md +466 -0
  45. package/src/agents/bob-rev.md +493 -0
  46. package/src/agents/bob-send.md +277 -0
  47. package/src/agents/bob.md +442 -0
  48. package/src/agents/trace.md +451 -0
  49. package/src/plugins/bobs-workshop.ts +45 -0
  50. package/src/skills/api-patterns/SKILL.md +376 -0
  51. package/src/skills/architecture/SKILL.md +271 -0
  52. package/src/skills/bobs-workshop/performance/icon.svg +3 -0
  53. package/src/skills/brainstorming/SKILL.md +210 -0
  54. package/src/skills/clean-code/SKILL.md +151 -0
  55. package/src/skills/code-review-checklist/SKILL.md +220 -0
  56. package/src/skills/database-design/SKILL.md +271 -0
  57. package/src/skills/exploration/SKILL.md +257 -0
  58. package/src/skills/frontend-ui-ux/SKILL.md +78 -0
  59. package/src/skills/git-master/SKILL.md +1105 -0
  60. package/src/skills/performance/SKILL.md +144 -0
  61. package/src/skills/performance/icon.svg +3 -0
  62. package/src/skills/plan-writing/SKILL.md +225 -0
  63. package/src/skills/security/SKILL.md +410 -0
  64. package/src/skills/simplification/SKILL.md +238 -0
  65. package/src/skills/systematic-debugging/SKILL.md +175 -0
  66. package/src/skills/testing-patterns/SKILL.md +305 -0
  67. package/src/skills/verification/SKILL.md +286 -0
  68. package/src/tools/background-agent/cancel.ts +67 -0
  69. package/src/tools/background-agent/concurrency.ts +71 -0
  70. package/src/tools/background-agent/index.ts +7 -0
  71. package/src/tools/background-agent/launch.ts +39 -0
  72. package/src/tools/background-agent/list.ts +50 -0
  73. package/src/tools/background-agent/manager.ts +455 -0
  74. package/src/tools/background-agent/output.ts +57 -0
  75. package/src/tools/background-agent/types.ts +55 -0
  76. package/src/tools/index.ts +8 -0
  77. package/src/tools/manual/index.ts +2 -0
  78. package/src/tools/manual/manual-update.ts +197 -0
  79. package/src/tools/manual/verify-manual.ts +55 -0
  80. package/uninstall.js +64 -0
  81. package/Claude.md +0 -162
  82. package/bin/bobs-mcp-server.js +0 -11
  83. package/bin/bobs-mcp.js +0 -130
  84. package/dist/api/taskLogger.js +0 -106
  85. package/dist/api/taskLogger.js.map +0 -1
  86. package/dist/cli/checker.js +0 -401
  87. package/dist/cli/checker.js.map +0 -1
  88. package/dist/cli/cleanup.js +0 -131
  89. package/dist/cli/cleanup.js.map +0 -1
  90. package/dist/cli/debug.js +0 -157
  91. package/dist/cli/debug.js.map +0 -1
  92. package/dist/cli/health.js +0 -97
  93. package/dist/cli/health.js.map +0 -1
  94. package/dist/cli/setup.js +0 -81
  95. package/dist/cli/setup.js.map +0 -1
  96. package/dist/cli/workshop.js +0 -42
  97. package/dist/cli/workshop.js.map +0 -1
  98. package/dist/dashboard/server.js +0 -1203
  99. package/dist/dashboard/server.js.map +0 -1
  100. package/dist/index.js +0 -960
  101. package/dist/index.js.map +0 -1
  102. package/dist/prompts/architect.js +0 -221
  103. package/dist/prompts/architect.js.map +0 -1
  104. package/dist/prompts/debugger.js +0 -257
  105. package/dist/prompts/debugger.js.map +0 -1
  106. package/dist/prompts/engineer.js +0 -249
  107. package/dist/prompts/engineer.js.map +0 -1
  108. package/dist/prompts/orchestrator.js +0 -304
  109. package/dist/prompts/orchestrator.js.map +0 -1
  110. package/dist/prompts/reviewer.js +0 -289
  111. package/dist/prompts/reviewer.js.map +0 -1
  112. package/dist/services/activitySummarizer.js +0 -388
  113. package/dist/services/activitySummarizer.js.map +0 -1
  114. package/dist/services/changeValidator.js +0 -396
  115. package/dist/services/changeValidator.js.map +0 -1
  116. package/dist/services/claudeOrchestrator.js +0 -343
  117. package/dist/services/claudeOrchestrator.js.map +0 -1
  118. package/dist/services/fileMonitor.js +0 -250
  119. package/dist/services/fileMonitor.js.map +0 -1
  120. package/dist/services/implementationSummarizer.js +0 -306
  121. package/dist/services/implementationSummarizer.js.map +0 -1
  122. package/dist/services/liveMonitor.js +0 -315
  123. package/dist/services/liveMonitor.js.map +0 -1
  124. package/dist/services/mcpAuditLogger.js +0 -104
  125. package/dist/services/mcpAuditLogger.js.map +0 -1
  126. package/dist/services/mcpLogger.js +0 -223
  127. package/dist/services/mcpLogger.js.map +0 -1
  128. package/dist/services/tmuxManager.js +0 -541
  129. package/dist/services/tmuxManager.js.map +0 -1
  130. package/dist/tools/approvalTools.js +0 -244
  131. package/dist/tools/approvalTools.js.map +0 -1
  132. package/dist/tools/autoDebugger.js +0 -147
  133. package/dist/tools/autoDebugger.js.map +0 -1
  134. package/dist/tools/cleanupService.js +0 -221
  135. package/dist/tools/cleanupService.js.map +0 -1
  136. package/dist/tools/dashboardTools.js +0 -342
  137. package/dist/tools/dashboardTools.js.map +0 -1
  138. package/dist/tools/developmentNudges.js +0 -336
  139. package/dist/tools/developmentNudges.js.map +0 -1
  140. package/dist/tools/gitTools.js +0 -741
  141. package/dist/tools/gitTools.js.map +0 -1
  142. package/dist/tools/orchestratorTools.js +0 -832
  143. package/dist/tools/orchestratorTools.js.map +0 -1
  144. package/dist/tools/searchCache.js +0 -64
  145. package/dist/tools/searchCache.js.map +0 -1
  146. package/dist/tools/searchTools.js +0 -1107
  147. package/dist/tools/searchTools.js.map +0 -1
  148. package/dist/tools/semgrep-patterns.js +0 -296
  149. package/dist/tools/semgrep-patterns.js.map +0 -1
  150. package/dist/tools/specTools.js +0 -332
  151. package/dist/tools/specTools.js.map +0 -1
  152. package/dist/tools/structural/__tests__/orchestrator.test.js +0 -61
  153. package/dist/tools/structural/__tests__/orchestrator.test.js.map +0 -1
  154. package/dist/tools/structural/cache.js +0 -226
  155. package/dist/tools/structural/cache.js.map +0 -1
  156. package/dist/tools/structural/engines/python/index.js +0 -118
  157. package/dist/tools/structural/engines/python/index.js.map +0 -1
  158. package/dist/tools/structural/engines/typescript/__tests__/typescript-engine.test.js +0 -97
  159. package/dist/tools/structural/engines/typescript/__tests__/typescript-engine.test.js.map +0 -1
  160. package/dist/tools/structural/engines/typescript/analyzer.js +0 -433
  161. package/dist/tools/structural/engines/typescript/analyzer.js.map +0 -1
  162. package/dist/tools/structural/engines/typescript/index.js +0 -381
  163. package/dist/tools/structural/engines/typescript/index.js.map +0 -1
  164. package/dist/tools/structural/engines/typescript/utils.js +0 -279
  165. package/dist/tools/structural/engines/typescript/utils.js.map +0 -1
  166. package/dist/tools/structural/index.js +0 -248
  167. package/dist/tools/structural/index.js.map +0 -1
  168. package/dist/tools/structural/types.js +0 -18
  169. package/dist/tools/structural/types.js.map +0 -1
  170. package/dist/tools/tmuxTools.js +0 -100
  171. package/dist/tools/tmuxTools.js.map +0 -1
  172. package/dist/tools/workRecorder.js +0 -215
  173. package/dist/tools/workRecorder.js.map +0 -1
  174. package/dist/tools/worktreeTools.js +0 -705
  175. package/dist/tools/worktreeTools.js.map +0 -1
  176. package/dist/utils/__tests__/integration.test.js +0 -57
  177. package/dist/utils/__tests__/integration.test.js.map +0 -1
  178. package/dist/utils/__tests__/serverDetection.test.js +0 -151
  179. package/dist/utils/__tests__/serverDetection.test.js.map +0 -1
  180. package/dist/utils/errorHandling.js +0 -336
  181. package/dist/utils/errorHandling.js.map +0 -1
  182. package/dist/utils/processManager.js +0 -172
  183. package/dist/utils/processManager.js.map +0 -1
  184. package/dist/utils/reliability.js +0 -263
  185. package/dist/utils/reliability.js.map +0 -1
  186. package/dist/utils/responseFormatter.js +0 -250
  187. package/dist/utils/responseFormatter.js.map +0 -1
  188. package/dist/utils/serverDetection.js +0 -133
  189. package/dist/utils/serverDetection.js.map +0 -1
  190. package/dist/utils/specMigration.js +0 -105
  191. package/dist/utils/specMigration.js.map +0 -1
  192. package/dist/validation/schemas.js +0 -299
  193. package/dist/validation/schemas.js.map +0 -1
  194. package/public/.well-known/mcp/manifest.json +0 -473
  195. package/public/index.html +0 -3157
  196. package/public/index.html.backup +0 -2805
  197. package/public/index.html.backup2 +0 -1292
  198. package/scripts/cleanup-system-logs.ts +0 -121
  199. package/scripts/init-workspace.js +0 -63
  200. package/scripts/install-search-tools.js +0 -116
@@ -1,106 +0,0 @@
1
- // src/api/taskLogger.ts
2
- import { z } from "zod";
3
- import { v4 as uuidv4 } from "uuid";
4
- export const TaskCreateSchema = z.object({
5
- name: z.string().min(1, "Task name is required").max(100, "Task name too long"),
6
- priority: z.enum(['low', 'medium', 'high', 'critical']),
7
- timestamp: z.string().datetime().optional(),
8
- status: z.enum(['pending', 'in_progress', 'completed']).default('pending')
9
- });
10
- export const TaskUpdateSchema = z.object({
11
- name: z.string().min(1).max(100).optional(),
12
- priority: z.enum(['low', 'medium', 'high', 'critical']).optional(),
13
- timestamp: z.string().datetime().optional(),
14
- status: z.enum(['pending', 'in_progress', 'completed']).optional()
15
- });
16
- class TaskService {
17
- constructor() {
18
- this.tasks = new Map();
19
- }
20
- createTask(input) {
21
- const validated = TaskCreateSchema.parse(input);
22
- const now = new Date().toISOString();
23
- const task = {
24
- id: uuidv4(),
25
- name: validated.name,
26
- priority: validated.priority,
27
- timestamp: validated.timestamp || now,
28
- status: validated.status,
29
- created_at: now,
30
- updated_at: now
31
- };
32
- this.tasks.set(task.id, task);
33
- console.log(`[TaskLogger] Created task ${task.id}: ${task.name}`);
34
- return task;
35
- }
36
- getAllTasks() {
37
- return Array.from(this.tasks.values()).sort((a, b) => new Date(b.created_at).getTime() - new Date(a.created_at).getTime());
38
- }
39
- getTaskById(id) {
40
- return this.tasks.get(id) || null;
41
- }
42
- updateTask(id, input) {
43
- const existingTask = this.tasks.get(id);
44
- if (!existingTask) {
45
- return null;
46
- }
47
- const validated = TaskUpdateSchema.parse(input);
48
- const updatedTask = {
49
- ...existingTask,
50
- ...validated,
51
- updated_at: new Date().toISOString()
52
- };
53
- this.tasks.set(id, updatedTask);
54
- console.log(`[TaskLogger] Updated task ${id}: ${updatedTask.name}`);
55
- return updatedTask;
56
- }
57
- deleteTask(id) {
58
- const existed = this.tasks.has(id);
59
- this.tasks.delete(id);
60
- if (existed) {
61
- console.log(`[TaskLogger] Deleted task ${id}`);
62
- }
63
- return existed;
64
- }
65
- getTaskCount() {
66
- return this.tasks.size;
67
- }
68
- clearAllTasks() {
69
- const count = this.tasks.size;
70
- this.tasks.clear();
71
- console.log(`[TaskLogger] Cleared ${count} tasks`);
72
- return count;
73
- }
74
- // Filter and search methods
75
- getTasksByPriority(priority) {
76
- return this.getAllTasks().filter(task => task.priority === priority);
77
- }
78
- getTasksByStatus(status) {
79
- return this.getAllTasks().filter(task => task.status === status);
80
- }
81
- searchTasks(query) {
82
- const lowerQuery = query.toLowerCase();
83
- return this.getAllTasks().filter(task => task.name.toLowerCase().includes(lowerQuery));
84
- }
85
- }
86
- // Singleton instance for in-memory storage
87
- export const taskService = new TaskService();
88
- // Helper function for API error responses
89
- export function createErrorResponse(message, statusCode = 400) {
90
- return {
91
- error: true,
92
- message,
93
- statusCode,
94
- timestamp: new Date().toISOString()
95
- };
96
- }
97
- // Helper function for API success responses
98
- export function createSuccessResponse(data, message) {
99
- return {
100
- success: true,
101
- data,
102
- message,
103
- timestamp: new Date().toISOString()
104
- };
105
- }
106
- //# sourceMappingURL=taskLogger.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"taskLogger.js","sourceRoot":"","sources":["../../src/api/taskLogger.ts"],"names":[],"mappings":"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"}
@@ -1,401 +0,0 @@
1
- // src/cli/checker.ts
2
- import { exec } from 'child_process';
3
- import { promisify } from 'util';
4
- import { existsSync } from 'fs';
5
- import path from 'path';
6
- import { fileURLToPath } from 'url';
7
- import fs from 'fs-extra';
8
- const execAsync = promisify(exec);
9
- const __dirname = path.dirname(fileURLToPath(import.meta.url));
10
- export async function runInstallationCheck() {
11
- console.log('๐Ÿ”ง Bob\'s MCP Installation Check\n');
12
- console.log('โ”'.repeat(50));
13
- const results = [];
14
- // Run all checks
15
- results.push(await checkNodeVersion());
16
- results.push(await checkNpmRegistry());
17
- results.push(await checkNpxCompatibility());
18
- results.push(await checkDependencies());
19
- results.push(await checkSearchTools());
20
- results.push(await checkMcpServer());
21
- results.push(await checkDashboard());
22
- results.push(await checkSpecSystem());
23
- // Display results
24
- console.log('\n๐Ÿ“Š Installation Check Results:\n');
25
- let passCount = 0;
26
- let failCount = 0;
27
- let warningCount = 0;
28
- for (const result of results) {
29
- const icon = result.status === 'pass' ? 'โœ…' : result.status === 'fail' ? 'โŒ' : 'โš ๏ธ';
30
- console.log(`${icon} ${result.name}: ${result.message}`);
31
- if (result.details) {
32
- console.log(` ${result.details}`);
33
- }
34
- if (result.actionable) {
35
- console.log(` ๐Ÿ’ก Action: ${result.actionable}`);
36
- }
37
- if (result.status === 'pass')
38
- passCount++;
39
- else if (result.status === 'fail')
40
- failCount++;
41
- else
42
- warningCount++;
43
- console.log('');
44
- }
45
- // Summary
46
- console.log('โ”'.repeat(50));
47
- console.log(`๐Ÿ“ˆ Summary: ${passCount} passed, ${warningCount} warnings, ${failCount} failed\n`);
48
- if (failCount === 0) {
49
- console.log('๐ŸŽ‰ Bob\'s MCP is ready to use!');
50
- console.log('\nNext steps:');
51
- console.log('โ€ข Add Bob\'s MCP to your Claude Code configuration');
52
- console.log('โ€ข Run "npx bobs-mcp --setup" for guided configuration');
53
- console.log('โ€ข Start using: npm run dev or npm start');
54
- }
55
- else {
56
- console.log('๐Ÿ”ง Some issues need attention before Bob\'s MCP will work properly.');
57
- console.log('\nRun "npx bobs-mcp --setup" for automatic fixes, or address the issues above.');
58
- }
59
- }
60
- async function checkNodeVersion() {
61
- try {
62
- const { stdout } = await execAsync('node --version');
63
- const version = stdout.trim();
64
- const majorVersion = parseInt(version.slice(1).split('.')[0]);
65
- if (majorVersion >= 18) {
66
- return {
67
- name: 'Node.js Version',
68
- status: 'pass',
69
- message: `${version} (compatible)`,
70
- };
71
- }
72
- else {
73
- return {
74
- name: 'Node.js Version',
75
- status: 'fail',
76
- message: `${version} (requires Node.js 18+)`,
77
- actionable: 'Update to Node.js 18 or later'
78
- };
79
- }
80
- }
81
- catch (error) {
82
- return {
83
- name: 'Node.js Version',
84
- status: 'fail',
85
- message: 'Node.js not found',
86
- actionable: 'Install Node.js 18 or later'
87
- };
88
- }
89
- }
90
- async function checkNpmRegistry() {
91
- try {
92
- await execAsync('npm --version');
93
- return {
94
- name: 'npm Registry',
95
- status: 'pass',
96
- message: 'npm available',
97
- };
98
- }
99
- catch (error) {
100
- return {
101
- name: 'npm Registry',
102
- status: 'fail',
103
- message: 'npm not available',
104
- actionable: 'Install npm or use yarn'
105
- };
106
- }
107
- }
108
- async function checkNpxCompatibility() {
109
- try {
110
- // Check if npx is available and can execute bobs-mcp
111
- await execAsync('npx --version');
112
- try {
113
- // Test if bobs-mcp can be found and executed via npx
114
- const { stdout } = await execAsync('npx bobs-mcp --version', { timeout: 10000 });
115
- if (stdout.includes('Bob\'s MCP')) {
116
- return {
117
- name: 'npx Compatibility',
118
- status: 'pass',
119
- message: 'bobs-mcp accessible via npx',
120
- };
121
- }
122
- else {
123
- return {
124
- name: 'npx Compatibility',
125
- status: 'warning',
126
- message: 'npx works but bobs-mcp version check failed',
127
- details: 'The package may be installed but not properly configured',
128
- actionable: 'Try: npm install -g bobs-mcp'
129
- };
130
- }
131
- }
132
- catch (error) {
133
- // Check if package is globally installed
134
- try {
135
- await execAsync('npm list -g bobs-mcp');
136
- return {
137
- name: 'npx Compatibility',
138
- status: 'pass',
139
- message: 'bobs-mcp globally installed (npx should work)',
140
- details: 'Package found in global npm packages'
141
- };
142
- }
143
- catch {
144
- return {
145
- name: 'npx Compatibility',
146
- status: 'warning',
147
- message: 'npx available but bobs-mcp not found',
148
- details: 'Package may need to be installed globally or locally',
149
- actionable: 'Try: npm install -g bobs-mcp or install locally in your project'
150
- };
151
- }
152
- }
153
- }
154
- catch (error) {
155
- return {
156
- name: 'npx Compatibility',
157
- status: 'fail',
158
- message: 'npx not available',
159
- actionable: 'Install npm 5.2+ which includes npx, or install npx separately'
160
- };
161
- }
162
- }
163
- async function checkDependencies() {
164
- try {
165
- const projectRoot = path.resolve(__dirname, '../..');
166
- const nodeModulesPath = path.join(projectRoot, 'node_modules');
167
- if (!existsSync(nodeModulesPath)) {
168
- return {
169
- name: 'Dependencies',
170
- status: 'fail',
171
- message: 'node_modules not found',
172
- actionable: 'Run "npm install" to install dependencies'
173
- };
174
- }
175
- // Check critical dependencies
176
- const criticalDeps = ['@modelcontextprotocol/sdk', 'express', 'chokidar'];
177
- const missing = [];
178
- for (const dep of criticalDeps) {
179
- const depPath = path.join(nodeModulesPath, dep);
180
- if (!existsSync(depPath)) {
181
- missing.push(dep);
182
- }
183
- }
184
- if (missing.length > 0) {
185
- return {
186
- name: 'Dependencies',
187
- status: 'fail',
188
- message: `Missing: ${missing.join(', ')}`,
189
- actionable: 'Run "npm install" to install missing dependencies'
190
- };
191
- }
192
- return {
193
- name: 'Dependencies',
194
- status: 'pass',
195
- message: 'All critical dependencies installed',
196
- };
197
- }
198
- catch (error) {
199
- return {
200
- name: 'Dependencies',
201
- status: 'fail',
202
- message: 'Error checking dependencies',
203
- details: error instanceof Error ? error.message : String(error),
204
- };
205
- }
206
- }
207
- async function checkSearchTools() {
208
- const issues = [];
209
- const warnings = [];
210
- // Check semgrep
211
- try {
212
- await execAsync('semgrep --version');
213
- }
214
- catch (error) {
215
- issues.push('semgrep not found');
216
- }
217
- // Check ripgrep
218
- const projectRoot = path.resolve(__dirname, '../..');
219
- const ripgrepPkgPath = path.join(projectRoot, 'node_modules/@lvce-editor/ripgrep');
220
- let ripgrepOk = false;
221
- if (existsSync(ripgrepPkgPath)) {
222
- ripgrepOk = true;
223
- }
224
- else {
225
- try {
226
- await execAsync('rg --version');
227
- ripgrepOk = true;
228
- }
229
- catch (error) {
230
- issues.push('ripgrep not found');
231
- }
232
- }
233
- if (issues.length === 0) {
234
- return {
235
- name: 'Search Tools',
236
- status: 'pass',
237
- message: 'semgrep and ripgrep available',
238
- };
239
- }
240
- else if (issues.length === 1) {
241
- return {
242
- name: 'Search Tools',
243
- status: 'warning',
244
- message: `${issues[0]} (limited functionality)`,
245
- actionable: 'Run "npm run install-search-tools" to install missing tools'
246
- };
247
- }
248
- else {
249
- return {
250
- name: 'Search Tools',
251
- status: 'fail',
252
- message: 'Both semgrep and ripgrep missing',
253
- actionable: 'Run "npm run install-search-tools" to install search tools'
254
- };
255
- }
256
- }
257
- async function checkMcpServer() {
258
- try {
259
- const projectRoot = path.resolve(__dirname, '../..');
260
- const distPath = path.join(projectRoot, 'dist');
261
- const mainFile = path.join(distPath, 'index.js');
262
- if (!existsSync(distPath)) {
263
- return {
264
- name: 'MCP Server',
265
- status: 'fail',
266
- message: 'Project not built',
267
- actionable: 'Run "npm run build" to compile TypeScript'
268
- };
269
- }
270
- if (!existsSync(mainFile)) {
271
- return {
272
- name: 'MCP Server',
273
- status: 'fail',
274
- message: 'Main server file missing',
275
- actionable: 'Run "npm run build" to compile TypeScript'
276
- };
277
- }
278
- // Quick syntax check without starting server
279
- try {
280
- await execAsync(`node -c "${mainFile}"`);
281
- return {
282
- name: 'MCP Server',
283
- status: 'pass',
284
- message: 'Server files compiled and ready',
285
- };
286
- }
287
- catch (error) {
288
- return {
289
- name: 'MCP Server',
290
- status: 'fail',
291
- message: 'Server files have syntax errors',
292
- details: error instanceof Error ? error.message : String(error),
293
- actionable: 'Run "npm run build" to recompile'
294
- };
295
- }
296
- }
297
- catch (error) {
298
- return {
299
- name: 'MCP Server',
300
- status: 'fail',
301
- message: 'Error checking server files',
302
- details: error instanceof Error ? error.message : String(error),
303
- };
304
- }
305
- }
306
- async function checkDashboard() {
307
- try {
308
- const projectRoot = path.resolve(__dirname, '../..');
309
- const dashboardFile = path.join(projectRoot, 'dist/dashboard/server.js');
310
- if (!existsSync(dashboardFile)) {
311
- return {
312
- name: 'Dashboard',
313
- status: 'fail',
314
- message: 'Dashboard not built',
315
- actionable: 'Run "npm run build" to compile dashboard'
316
- };
317
- }
318
- // Quick syntax check
319
- try {
320
- await execAsync(`node -c "${dashboardFile}"`);
321
- return {
322
- name: 'Dashboard',
323
- status: 'pass',
324
- message: 'Dashboard ready',
325
- };
326
- }
327
- catch (error) {
328
- return {
329
- name: 'Dashboard',
330
- status: 'fail',
331
- message: 'Dashboard has syntax errors',
332
- details: error instanceof Error ? error.message : String(error),
333
- actionable: 'Run "npm run build" to recompile'
334
- };
335
- }
336
- }
337
- catch (error) {
338
- return {
339
- name: 'Dashboard',
340
- status: 'fail',
341
- message: 'Error checking dashboard',
342
- details: error instanceof Error ? error.message : String(error),
343
- };
344
- }
345
- }
346
- async function checkSpecSystem() {
347
- try {
348
- const projectRoot = path.resolve(__dirname, '../..');
349
- const bobDir = path.join(projectRoot, '.bob');
350
- if (!existsSync(bobDir)) {
351
- // Create .bob directory if it doesn't exist
352
- try {
353
- await fs.ensureDir(path.join(bobDir, 'specs'));
354
- await fs.writeJson(path.join(bobDir, 'specs', 'index.json'), { specs: [] });
355
- return {
356
- name: 'SPEC System',
357
- status: 'pass',
358
- message: 'SPEC directory initialized',
359
- };
360
- }
361
- catch (error) {
362
- return {
363
- name: 'SPEC System',
364
- status: 'fail',
365
- message: 'Cannot create SPEC directory',
366
- details: error instanceof Error ? error.message : String(error),
367
- actionable: 'Check file system permissions'
368
- };
369
- }
370
- }
371
- const specsDir = path.join(bobDir, 'specs');
372
- const indexFile = path.join(specsDir, 'index.json');
373
- if (!existsSync(indexFile)) {
374
- try {
375
- await fs.writeJson(indexFile, { specs: [] });
376
- }
377
- catch (error) {
378
- return {
379
- name: 'SPEC System',
380
- status: 'warning',
381
- message: 'SPEC index needs initialization',
382
- actionable: 'SPEC system will initialize on first use'
383
- };
384
- }
385
- }
386
- return {
387
- name: 'SPEC System',
388
- status: 'pass',
389
- message: 'SPEC directory ready',
390
- };
391
- }
392
- catch (error) {
393
- return {
394
- name: 'SPEC System',
395
- status: 'fail',
396
- message: 'Error checking SPEC system',
397
- details: error instanceof Error ? error.message : String(error),
398
- };
399
- }
400
- }
401
- //# sourceMappingURL=checker.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"checker.js","sourceRoot":"","sources":["../../src/cli/checker.ts"],"names":[],"mappings":"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"}
@@ -1,131 +0,0 @@
1
- // src/cli/cleanup.ts
2
- import { cleanupService } from '../tools/cleanupService.js';
3
- export async function runCleanup(options = {}) {
4
- if (options.stats) {
5
- await showCleanupStats();
6
- }
7
- else {
8
- await performCleanup(options);
9
- }
10
- }
11
- async function showCleanupStats() {
12
- console.log('๐Ÿงน Bob\'s Workshop Cleanup Statistics\n');
13
- console.log('โ”'.repeat(50));
14
- try {
15
- const stats = await cleanupService.getCleanupStats();
16
- console.log('\n๐Ÿ“Š System Resource Statistics:\n');
17
- // Display stats in a user-friendly format
18
- console.log('๐ŸŒณ Worktrees:');
19
- console.log(` Total: ${stats.totalWorktrees || 0}`);
20
- console.log(` Stale: ${stats.staleWorktrees || 0}`);
21
- console.log(` Recent: ${(stats.totalWorktrees || 0) - (stats.staleWorktrees || 0)}`);
22
- console.log('');
23
- console.log('๐Ÿ“บ Work Recorders:');
24
- console.log(` Active: ${stats.activeRecorders || 0}`);
25
- console.log('');
26
- // Recommendations
27
- console.log('๐Ÿ’ก Cleanup Recommendations:');
28
- if (stats.recommendations && stats.recommendations.length > 0) {
29
- stats.recommendations.forEach(rec => {
30
- console.log(` โ€ข ${rec}`);
31
- });
32
- }
33
- else {
34
- console.log(' โœ… System is clean - no cleanup needed');
35
- }
36
- if (stats.recommendations && stats.recommendations.length > 0) {
37
- console.log('\nRun "bobs cleanup" to clean up the above items.');
38
- }
39
- }
40
- catch (error) {
41
- console.log('โŒ Failed to get cleanup statistics:');
42
- console.log(` Error: ${error instanceof Error ? error.message : String(error)}`);
43
- }
44
- }
45
- async function performCleanup(options) {
46
- console.log('๐Ÿงน Bob\'s Workshop System Cleanup\n');
47
- console.log('โ”'.repeat(50));
48
- const cleanupOptions = {
49
- maxWorktreeAge: options.maxAge || 7,
50
- cleanTempFiles: options.cleanTemp !== false,
51
- stopOrphanedRecorders: options.stopRecorders !== false,
52
- forceCleanup: options.force || false
53
- };
54
- console.log('\n๐Ÿ”ง Cleanup Configuration:');
55
- console.log(` Max worktree age: ${cleanupOptions.maxWorktreeAge} days`);
56
- console.log(` Clean temp files: ${cleanupOptions.cleanTempFiles ? 'Yes' : 'No'}`);
57
- console.log(` Stop orphaned recorders: ${cleanupOptions.stopOrphanedRecorders ? 'Yes' : 'No'}`);
58
- console.log(` Force cleanup: ${cleanupOptions.forceCleanup ? 'Yes' : 'No'}`);
59
- console.log('');
60
- try {
61
- console.log('๐Ÿš€ Starting cleanup...\n');
62
- const result = await cleanupService.performCleanup(cleanupOptions);
63
- console.log('๐Ÿ“Š Cleanup Results:\n');
64
- // Display results in a user-friendly format
65
- if (result.staleWorktrees !== undefined) {
66
- const icon = result.staleWorktrees > 0 ? '๐ŸŒณ' : 'โœ…';
67
- console.log(`${icon} Worktrees: ${result.staleWorktrees} cleaned`);
68
- }
69
- if (result.tempFilesCleared !== undefined) {
70
- const icon = result.tempFilesCleared > 0 ? '๐Ÿ“' : 'โœ…';
71
- console.log(`${icon} Temp Files: ${result.tempFilesCleared} cleaned`);
72
- }
73
- if (result.orphanedRecorders !== undefined) {
74
- const icon = result.orphanedRecorders > 0 ? '๐Ÿ“บ' : 'โœ…';
75
- console.log(`${icon} Work Recorders: ${result.orphanedRecorders} stopped`);
76
- }
77
- if (result.errors && result.errors.length > 0) {
78
- console.log('\nโš ๏ธ Cleanup Warnings:');
79
- result.errors.forEach(error => {
80
- console.log(` โ€ข ${error}`);
81
- });
82
- }
83
- console.log('\nโ”'.repeat(50));
84
- console.log('๐ŸŽ‰ Cleanup completed successfully!');
85
- }
86
- catch (error) {
87
- console.log('โŒ Cleanup failed:');
88
- console.log(` Error: ${error instanceof Error ? error.message : String(error)}`);
89
- console.log('\nSome cleanup operations may have partially completed.');
90
- }
91
- }
92
- function formatBytes(bytes) {
93
- if (bytes === 0)
94
- return '0 B';
95
- const k = 1024;
96
- const sizes = ['B', 'KB', 'MB', 'GB'];
97
- const i = Math.floor(Math.log(bytes) / Math.log(k));
98
- return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];
99
- }
100
- export function parseCleanupArgs(args) {
101
- const options = {};
102
- for (let i = 0; i < args.length; i++) {
103
- const arg = args[i];
104
- switch (arg) {
105
- case '--stats':
106
- case '-s':
107
- options.stats = true;
108
- break;
109
- case '--max-age':
110
- case '-a':
111
- const ageValue = args[i + 1];
112
- if (ageValue && !isNaN(parseInt(ageValue))) {
113
- options.maxAge = parseInt(ageValue);
114
- i++; // Skip next arg since we consumed it
115
- }
116
- break;
117
- case '--no-temp':
118
- options.cleanTemp = false;
119
- break;
120
- case '--no-recorders':
121
- options.stopRecorders = false;
122
- break;
123
- case '--force':
124
- case '-f':
125
- options.force = true;
126
- break;
127
- }
128
- }
129
- return options;
130
- }
131
- //# sourceMappingURL=cleanup.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cleanup.js","sourceRoot":"","sources":["../../src/cli/cleanup.ts"],"names":[],"mappings":"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"}