popeye-cli 1.6.0 → 1.8.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 (161) hide show
  1. package/README.md +240 -32
  2. package/cheatsheet.md +407 -0
  3. package/dist/cli/commands/db.d.ts +10 -0
  4. package/dist/cli/commands/db.d.ts.map +1 -0
  5. package/dist/cli/commands/db.js +240 -0
  6. package/dist/cli/commands/db.js.map +1 -0
  7. package/dist/cli/commands/doctor.d.ts +18 -0
  8. package/dist/cli/commands/doctor.d.ts.map +1 -0
  9. package/dist/cli/commands/doctor.js +255 -0
  10. package/dist/cli/commands/doctor.js.map +1 -0
  11. package/dist/cli/commands/index.d.ts +2 -0
  12. package/dist/cli/commands/index.d.ts.map +1 -1
  13. package/dist/cli/commands/index.js +2 -0
  14. package/dist/cli/commands/index.js.map +1 -1
  15. package/dist/cli/index.d.ts.map +1 -1
  16. package/dist/cli/index.js +3 -1
  17. package/dist/cli/index.js.map +1 -1
  18. package/dist/cli/interactive.d.ts.map +1 -1
  19. package/dist/cli/interactive.js +96 -0
  20. package/dist/cli/interactive.js.map +1 -1
  21. package/dist/generators/admin-wizard.d.ts +25 -0
  22. package/dist/generators/admin-wizard.d.ts.map +1 -0
  23. package/dist/generators/admin-wizard.js +123 -0
  24. package/dist/generators/admin-wizard.js.map +1 -0
  25. package/dist/generators/all.d.ts.map +1 -1
  26. package/dist/generators/all.js +10 -3
  27. package/dist/generators/all.js.map +1 -1
  28. package/dist/generators/database.d.ts +58 -0
  29. package/dist/generators/database.d.ts.map +1 -0
  30. package/dist/generators/database.js +229 -0
  31. package/dist/generators/database.js.map +1 -0
  32. package/dist/generators/fullstack.d.ts.map +1 -1
  33. package/dist/generators/fullstack.js +23 -7
  34. package/dist/generators/fullstack.js.map +1 -1
  35. package/dist/generators/index.d.ts +2 -0
  36. package/dist/generators/index.d.ts.map +1 -1
  37. package/dist/generators/index.js +2 -0
  38. package/dist/generators/index.js.map +1 -1
  39. package/dist/generators/templates/admin-wizard-python.d.ts +32 -0
  40. package/dist/generators/templates/admin-wizard-python.d.ts.map +1 -0
  41. package/dist/generators/templates/admin-wizard-python.js +425 -0
  42. package/dist/generators/templates/admin-wizard-python.js.map +1 -0
  43. package/dist/generators/templates/admin-wizard-react.d.ts +48 -0
  44. package/dist/generators/templates/admin-wizard-react.d.ts.map +1 -0
  45. package/dist/generators/templates/admin-wizard-react.js +554 -0
  46. package/dist/generators/templates/admin-wizard-react.js.map +1 -0
  47. package/dist/generators/templates/database-docker.d.ts +23 -0
  48. package/dist/generators/templates/database-docker.d.ts.map +1 -0
  49. package/dist/generators/templates/database-docker.js +221 -0
  50. package/dist/generators/templates/database-docker.js.map +1 -0
  51. package/dist/generators/templates/database-python.d.ts +54 -0
  52. package/dist/generators/templates/database-python.d.ts.map +1 -0
  53. package/dist/generators/templates/database-python.js +723 -0
  54. package/dist/generators/templates/database-python.js.map +1 -0
  55. package/dist/generators/templates/database-typescript.d.ts +34 -0
  56. package/dist/generators/templates/database-typescript.d.ts.map +1 -0
  57. package/dist/generators/templates/database-typescript.js +232 -0
  58. package/dist/generators/templates/database-typescript.js.map +1 -0
  59. package/dist/generators/templates/fullstack.d.ts.map +1 -1
  60. package/dist/generators/templates/fullstack.js +29 -0
  61. package/dist/generators/templates/fullstack.js.map +1 -1
  62. package/dist/generators/templates/index.d.ts +5 -0
  63. package/dist/generators/templates/index.d.ts.map +1 -1
  64. package/dist/generators/templates/index.js +5 -0
  65. package/dist/generators/templates/index.js.map +1 -1
  66. package/dist/state/index.d.ts +10 -0
  67. package/dist/state/index.d.ts.map +1 -1
  68. package/dist/state/index.js +22 -0
  69. package/dist/state/index.js.map +1 -1
  70. package/dist/types/consensus.d.ts +3 -0
  71. package/dist/types/consensus.d.ts.map +1 -1
  72. package/dist/types/consensus.js +1 -0
  73. package/dist/types/consensus.js.map +1 -1
  74. package/dist/types/database-runtime.d.ts +86 -0
  75. package/dist/types/database-runtime.d.ts.map +1 -0
  76. package/dist/types/database-runtime.js +61 -0
  77. package/dist/types/database-runtime.js.map +1 -0
  78. package/dist/types/database.d.ts +85 -0
  79. package/dist/types/database.d.ts.map +1 -0
  80. package/dist/types/database.js +71 -0
  81. package/dist/types/database.js.map +1 -0
  82. package/dist/types/index.d.ts +3 -0
  83. package/dist/types/index.d.ts.map +1 -1
  84. package/dist/types/index.js +6 -0
  85. package/dist/types/index.js.map +1 -1
  86. package/dist/types/tester.d.ts +138 -0
  87. package/dist/types/tester.d.ts.map +1 -0
  88. package/dist/types/tester.js +110 -0
  89. package/dist/types/tester.js.map +1 -0
  90. package/dist/types/workflow.d.ts +166 -0
  91. package/dist/types/workflow.d.ts.map +1 -1
  92. package/dist/types/workflow.js +14 -0
  93. package/dist/types/workflow.js.map +1 -1
  94. package/dist/workflow/db-setup-runner.d.ts +63 -0
  95. package/dist/workflow/db-setup-runner.d.ts.map +1 -0
  96. package/dist/workflow/db-setup-runner.js +336 -0
  97. package/dist/workflow/db-setup-runner.js.map +1 -0
  98. package/dist/workflow/db-state-machine.d.ts +30 -0
  99. package/dist/workflow/db-state-machine.d.ts.map +1 -0
  100. package/dist/workflow/db-state-machine.js +51 -0
  101. package/dist/workflow/db-state-machine.js.map +1 -0
  102. package/dist/workflow/execution-mode.js +2 -2
  103. package/dist/workflow/execution-mode.js.map +1 -1
  104. package/dist/workflow/index.d.ts +3 -0
  105. package/dist/workflow/index.d.ts.map +1 -1
  106. package/dist/workflow/index.js +3 -0
  107. package/dist/workflow/index.js.map +1 -1
  108. package/dist/workflow/task-workflow.d.ts +5 -0
  109. package/dist/workflow/task-workflow.d.ts.map +1 -1
  110. package/dist/workflow/task-workflow.js +172 -6
  111. package/dist/workflow/task-workflow.js.map +1 -1
  112. package/dist/workflow/tester.d.ts +120 -0
  113. package/dist/workflow/tester.d.ts.map +1 -0
  114. package/dist/workflow/tester.js +589 -0
  115. package/dist/workflow/tester.js.map +1 -0
  116. package/dist/workflow/workflow-logger.d.ts +1 -1
  117. package/dist/workflow/workflow-logger.d.ts.map +1 -1
  118. package/dist/workflow/workflow-logger.js.map +1 -1
  119. package/package.json +1 -1
  120. package/src/cli/commands/db.ts +281 -0
  121. package/src/cli/commands/doctor.ts +273 -0
  122. package/src/cli/commands/index.ts +2 -0
  123. package/src/cli/index.ts +4 -0
  124. package/src/cli/interactive.ts +102 -0
  125. package/src/generators/admin-wizard.ts +146 -0
  126. package/src/generators/all.ts +10 -3
  127. package/src/generators/database.ts +286 -0
  128. package/src/generators/fullstack.ts +26 -9
  129. package/src/generators/index.ts +12 -0
  130. package/src/generators/templates/admin-wizard-python.ts +431 -0
  131. package/src/generators/templates/admin-wizard-react.ts +560 -0
  132. package/src/generators/templates/database-docker.ts +227 -0
  133. package/src/generators/templates/database-python.ts +734 -0
  134. package/src/generators/templates/database-typescript.ts +238 -0
  135. package/src/generators/templates/fullstack.ts +29 -0
  136. package/src/generators/templates/index.ts +5 -0
  137. package/src/state/index.ts +29 -0
  138. package/src/types/consensus.ts +3 -0
  139. package/src/types/database-runtime.ts +69 -0
  140. package/src/types/database.ts +84 -0
  141. package/src/types/index.ts +50 -0
  142. package/src/types/tester.ts +136 -0
  143. package/src/types/workflow.ts +31 -0
  144. package/src/workflow/db-setup-runner.ts +391 -0
  145. package/src/workflow/db-state-machine.ts +58 -0
  146. package/src/workflow/execution-mode.ts +2 -2
  147. package/src/workflow/index.ts +3 -0
  148. package/src/workflow/task-workflow.ts +227 -5
  149. package/src/workflow/tester.ts +723 -0
  150. package/src/workflow/workflow-logger.ts +2 -0
  151. package/tests/generators/admin-wizard-orchestrator.test.ts +64 -0
  152. package/tests/generators/admin-wizard-templates.test.ts +366 -0
  153. package/tests/generators/cross-phase-integration.test.ts +383 -0
  154. package/tests/generators/database.test.ts +456 -0
  155. package/tests/generators/fe-be-db-integration.test.ts +613 -0
  156. package/tests/types/database-runtime.test.ts +158 -0
  157. package/tests/types/database.test.ts +187 -0
  158. package/tests/types/tester.test.ts +174 -0
  159. package/tests/workflow/db-setup-runner.test.ts +211 -0
  160. package/tests/workflow/db-state-machine.test.ts +117 -0
  161. package/tests/workflow/tester.test.ts +401 -0
@@ -0,0 +1,255 @@
1
+ /**
2
+ * Doctor command
3
+ * Runs comprehensive readiness checks on database and project health
4
+ */
5
+ import { Command } from 'commander';
6
+ import path from 'node:path';
7
+ import { promises as fsPromises } from 'node:fs';
8
+ import { loadProject } from '../../state/index.js';
9
+ import { DEFAULT_DB_CONFIG } from '../../types/database.js';
10
+ import { readEnvFile, resolveBackendDir, } from '../../workflow/db-setup-runner.js';
11
+ import { printHeader, printSuccess, printError, printWarning, printInfo, } from '../output.js';
12
+ /**
13
+ * Run all readiness checks and return structured results
14
+ *
15
+ * @param projectDir - Project root directory
16
+ * @returns ReadinessResult with all check outcomes
17
+ */
18
+ export async function runDoctorChecks(projectDir) {
19
+ const checks = [];
20
+ // Check 1: Project state exists
21
+ try {
22
+ await loadProject(projectDir);
23
+ checks.push({
24
+ name: 'Project State',
25
+ passed: true,
26
+ message: 'Project state loaded successfully',
27
+ severity: 'critical',
28
+ });
29
+ }
30
+ catch {
31
+ checks.push({
32
+ name: 'Project State',
33
+ passed: false,
34
+ message: 'No valid project state found at this directory',
35
+ severity: 'critical',
36
+ });
37
+ return { healthy: false, checks, timestamp: new Date().toISOString() };
38
+ }
39
+ const state = await loadProject(projectDir);
40
+ const dbConfig = state.dbConfig || { ...DEFAULT_DB_CONFIG, designed: false };
41
+ const backendDir = resolveBackendDir(projectDir);
42
+ // Check 2: DB layer generated
43
+ checks.push({
44
+ name: 'DB Layer Generated',
45
+ passed: dbConfig.designed === true,
46
+ message: dbConfig.designed
47
+ ? 'Database layer files are present'
48
+ : 'Database layer not generated (dbConfig.designed = false)',
49
+ severity: 'critical',
50
+ });
51
+ // Check 3: Docker compose includes postgres service
52
+ let composeHasPostgres = false;
53
+ try {
54
+ const composePath = path.join(projectDir, 'docker-compose.yml');
55
+ const composeContent = await fsPromises.readFile(composePath, 'utf-8');
56
+ composeHasPostgres = composeContent.includes('postgres:') && composeContent.includes('pg_isready');
57
+ }
58
+ catch {
59
+ // File doesn't exist
60
+ }
61
+ checks.push({
62
+ name: 'Docker Compose Postgres',
63
+ passed: composeHasPostgres,
64
+ message: composeHasPostgres
65
+ ? 'docker-compose.yml includes postgres service with healthcheck'
66
+ : 'docker-compose.yml missing or does not include postgres service',
67
+ severity: 'warning',
68
+ });
69
+ // Check 4: .env has DATABASE_URL (not placeholder)
70
+ const env = await readEnvFile(path.join(backendDir, '.env'));
71
+ const dbUrl = env['DATABASE_URL'] || '';
72
+ const hasRealDbUrl = dbUrl.length > 0 && !dbUrl.includes('sqlite');
73
+ checks.push({
74
+ name: 'DATABASE_URL Configured',
75
+ passed: hasRealDbUrl,
76
+ message: hasRealDbUrl
77
+ ? 'DATABASE_URL is set to a PostgreSQL connection string'
78
+ : 'DATABASE_URL is missing or still using SQLite placeholder',
79
+ severity: 'critical',
80
+ });
81
+ // Check 5: DB connection reachable (only if URL is set)
82
+ if (hasRealDbUrl) {
83
+ try {
84
+ const { exec } = await import('node:child_process');
85
+ const { promisify } = await import('node:util');
86
+ const execAsync = promisify(exec);
87
+ const cmd = `cd "${backendDir}" && python3 -c "
88
+ import asyncio, asyncpg
89
+ async def check():
90
+ conn = await asyncpg.connect('${dbUrl.replace(/'/g, "\\'")}')
91
+ await conn.execute('SELECT 1')
92
+ await conn.close()
93
+ asyncio.run(check())
94
+ "`;
95
+ await execAsync(cmd, { timeout: 10000 });
96
+ checks.push({
97
+ name: 'DB Connection',
98
+ passed: true,
99
+ message: 'Database is reachable',
100
+ severity: 'critical',
101
+ });
102
+ }
103
+ catch {
104
+ checks.push({
105
+ name: 'DB Connection',
106
+ passed: false,
107
+ message: 'Cannot connect to database - check DATABASE_URL and server status',
108
+ severity: 'critical',
109
+ });
110
+ }
111
+ }
112
+ else {
113
+ checks.push({
114
+ name: 'DB Connection',
115
+ passed: false,
116
+ message: 'Skipped - DATABASE_URL not configured',
117
+ severity: 'info',
118
+ });
119
+ }
120
+ // Check 6: pgvector extension available (only if connected)
121
+ if (hasRealDbUrl && checks.find((c) => c.name === 'DB Connection')?.passed) {
122
+ try {
123
+ const { exec } = await import('node:child_process');
124
+ const { promisify } = await import('node:util');
125
+ const execAsync = promisify(exec);
126
+ const cmd = `cd "${backendDir}" && python3 -c "
127
+ import asyncio, asyncpg
128
+ async def check():
129
+ conn = await asyncpg.connect('${dbUrl.replace(/'/g, "\\'")}')
130
+ row = await conn.fetchrow(\"SELECT extname FROM pg_extension WHERE extname = 'vector'\")
131
+ await conn.close()
132
+ if row is None:
133
+ raise Exception('pgvector extension not found')
134
+ asyncio.run(check())
135
+ "`;
136
+ await execAsync(cmd, { timeout: 10000 });
137
+ checks.push({
138
+ name: 'pgvector Extension',
139
+ passed: true,
140
+ message: 'pgvector extension is installed',
141
+ severity: 'warning',
142
+ });
143
+ }
144
+ catch {
145
+ checks.push({
146
+ name: 'pgvector Extension',
147
+ passed: false,
148
+ message: 'pgvector extension not available - vector features will be disabled',
149
+ severity: 'warning',
150
+ });
151
+ }
152
+ }
153
+ // Check 7: Migrations applied
154
+ if (hasRealDbUrl && checks.find((c) => c.name === 'DB Connection')?.passed) {
155
+ try {
156
+ const { exec } = await import('node:child_process');
157
+ const { promisify } = await import('node:util');
158
+ const execAsync = promisify(exec);
159
+ const cmd = `cd "${backendDir}" && python3 -c "
160
+ import asyncio, asyncpg
161
+ async def check():
162
+ conn = await asyncpg.connect('${dbUrl.replace(/'/g, "\\'")}')
163
+ row = await conn.fetchrow('SELECT version_num FROM alembic_version LIMIT 1')
164
+ await conn.close()
165
+ if row is None:
166
+ raise Exception('No migrations applied')
167
+ asyncio.run(check())
168
+ "`;
169
+ await execAsync(cmd, { timeout: 10000 });
170
+ checks.push({
171
+ name: 'Migrations Applied',
172
+ passed: true,
173
+ message: 'Alembic migrations have been applied',
174
+ severity: 'critical',
175
+ });
176
+ }
177
+ catch {
178
+ checks.push({
179
+ name: 'Migrations Applied',
180
+ passed: false,
181
+ message: 'No migrations applied - run "popeye db apply" or "alembic upgrade head"',
182
+ severity: 'critical',
183
+ });
184
+ }
185
+ }
186
+ // Check 8: /health/db endpoint (optional - only if server is running)
187
+ try {
188
+ const response = await fetch('http://localhost:8000/health/db', {
189
+ signal: AbortSignal.timeout(3000),
190
+ });
191
+ checks.push({
192
+ name: 'Health Endpoint',
193
+ passed: response.status === 200,
194
+ message: response.status === 200
195
+ ? '/health/db returns 200 OK'
196
+ : `/health/db returns ${response.status}`,
197
+ severity: 'info',
198
+ });
199
+ }
200
+ catch {
201
+ checks.push({
202
+ name: 'Health Endpoint',
203
+ passed: false,
204
+ message: 'Backend server not running (optional check)',
205
+ severity: 'info',
206
+ });
207
+ }
208
+ const healthy = checks
209
+ .filter((c) => c.severity === 'critical')
210
+ .every((c) => c.passed);
211
+ return {
212
+ healthy,
213
+ checks,
214
+ timestamp: new Date().toISOString(),
215
+ };
216
+ }
217
+ /**
218
+ * Create the doctor command
219
+ */
220
+ export function createDoctorCommand() {
221
+ const doctor = new Command('doctor')
222
+ .description('Run comprehensive database and project readiness checks')
223
+ .argument('[directory]', 'Project directory', '.')
224
+ .action(async (directory) => {
225
+ const projectDir = path.resolve(directory);
226
+ printHeader('Popeye Doctor');
227
+ console.log();
228
+ const result = await runDoctorChecks(projectDir);
229
+ for (const check of result.checks) {
230
+ const statusLabel = check.passed ? '[PASS]' : check.severity === 'info' ? '[SKIP]' : '[FAIL]';
231
+ if (check.passed) {
232
+ printSuccess(` ${statusLabel} ${check.name}: ${check.message}`);
233
+ }
234
+ else if (check.severity === 'info') {
235
+ printInfo(` ${statusLabel} ${check.name}: ${check.message}`);
236
+ }
237
+ else if (check.severity === 'warning') {
238
+ printWarning(` ${statusLabel} ${check.name}: ${check.message}`);
239
+ }
240
+ else {
241
+ printError(` ${statusLabel} ${check.name}: ${check.message}`);
242
+ }
243
+ }
244
+ console.log();
245
+ if (result.healthy) {
246
+ printSuccess('All critical checks passed. Database is healthy.');
247
+ }
248
+ else {
249
+ printError('Some critical checks failed. Fix the issues above and re-run.');
250
+ process.exit(1);
251
+ }
252
+ });
253
+ return doctor;
254
+ }
255
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../../src/cli/commands/doctor.ts"],"names":[],"mappings":"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"}
@@ -7,4 +7,6 @@ export { createCreateCommand } from './create.js';
7
7
  export { createStatusCommand, createValidateCommand, createSummaryCommand } from './status.js';
8
8
  export { createResumeCommand, createResetCommand, createCancelCommand } from './resume.js';
9
9
  export { createConfigCommand } from './config.js';
10
+ export { createDbCommand } from './db.js';
11
+ export { createDoctorCommand } from './doctor.js';
10
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAC/F,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAC3F,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAC/F,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAC3F,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC"}
@@ -7,4 +7,6 @@ export { createCreateCommand } from './create.js';
7
7
  export { createStatusCommand, createValidateCommand, createSummaryCommand } from './status.js';
8
8
  export { createResumeCommand, createResetCommand, createCancelCommand } from './resume.js';
9
9
  export { createConfigCommand } from './config.js';
10
+ export { createDbCommand } from './db.js';
11
+ export { createDoctorCommand } from './doctor.js';
10
12
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/commands/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAC/F,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAC3F,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/commands/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAC/F,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAC3F,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiBpC,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AAOpC,eAAO,MAAM,OAAO,EAAE,MAA4B,CAAC;AAEnD;;GAEG;AACH,wBAAgB,aAAa,IAAI,OAAO,CAuCvC;AAED;;GAEG;AACH,wBAAsB,MAAM,CAAC,IAAI,GAAE,MAAM,EAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CASzE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmBpC,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AAOpC,eAAO,MAAM,OAAO,EAAE,MAA4B,CAAC;AAEnD;;GAEG;AACH,wBAAgB,aAAa,IAAI,OAAO,CAyCvC;AAED;;GAEG;AACH,wBAAsB,MAAM,CAAC,IAAI,GAAE,MAAM,EAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CASzE"}
package/dist/cli/index.js CHANGED
@@ -4,7 +4,7 @@
4
4
  */
5
5
  import { Command } from 'commander';
6
6
  import { createRequire } from 'node:module';
7
- import { createAuthCommand, createCreateCommand, createStatusCommand, createValidateCommand, createSummaryCommand, createResumeCommand, createResetCommand, createCancelCommand, createConfigCommand, } from './commands/index.js';
7
+ import { createAuthCommand, createCreateCommand, createStatusCommand, createValidateCommand, createSummaryCommand, createResumeCommand, createResetCommand, createCancelCommand, createConfigCommand, createDbCommand, createDoctorCommand, } from './commands/index.js';
8
8
  import { startInteractiveMode } from './interactive.js';
9
9
  import { printError } from './output.js';
10
10
  // Re-export
@@ -38,6 +38,8 @@ export function createProgram() {
38
38
  program.addCommand(createResetCommand());
39
39
  program.addCommand(createCancelCommand());
40
40
  program.addCommand(createConfigCommand());
41
+ program.addCommand(createDbCommand());
42
+ program.addCommand(createDoctorCommand());
41
43
  // Interactive mode command
42
44
  program
43
45
  .command('interactive')
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"interactive.d.ts","sourceRoot":"","sources":["../../src/cli/interactive.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA8tEH;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA2B7E;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA0BrF;AAED;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA4EhE;AAiVD;;GAEG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC,CA4E1D"}
1
+ {"version":3,"file":"interactive.d.ts","sourceRoot":"","sources":["../../src/cli/interactive.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAo0EH;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA2B7E;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA0BrF;AAED;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA4EhE;AAiVD;;GAEG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC,CA4E1D"}
@@ -697,6 +697,8 @@ function showHelp() {
697
697
  ['/new <idea>', 'Force start a new project (skips existing check)'],
698
698
  ['/resume', 'Resume interrupted project'],
699
699
  ['/overview [fix]', 'Project review with analysis; fix to auto-discover docs'],
700
+ ['/db [action]', 'Database management (status/configure/apply)'],
701
+ ['/doctor', 'Run database and project readiness checks'],
700
702
  ['/clear', 'Clear screen'],
701
703
  ['/exit', 'Exit Popeye'],
702
704
  ];
@@ -838,6 +840,12 @@ async function handleInput(input, state) {
838
840
  await handleNewProject(args.join(' '), state);
839
841
  }
840
842
  break;
843
+ case '/db':
844
+ await handleDbSlashCommand(state, args);
845
+ break;
846
+ case '/doctor':
847
+ await handleDoctorSlashCommand(state);
848
+ break;
841
849
  default:
842
850
  printError(`Unknown command: ${cmd}`);
843
851
  printInfo('Type /help for available commands');
@@ -872,6 +880,94 @@ async function handleStatus(state) {
872
880
  const summary = await getWorkflowSummary(state.projectDir);
873
881
  console.log(summary);
874
882
  }
883
+ /**
884
+ * Handle /db slash command - database management
885
+ */
886
+ async function handleDbSlashCommand(state, args) {
887
+ if (!state.projectDir) {
888
+ printError('No active project. Create or resume a project first.');
889
+ return;
890
+ }
891
+ const action = args[0] || 'status';
892
+ switch (action) {
893
+ case 'status': {
894
+ try {
895
+ const { loadProject } = await import('../state/index.js');
896
+ const { DEFAULT_DB_CONFIG } = await import('../types/database.js');
897
+ const projectState = await loadProject(state.projectDir);
898
+ const dbConfig = projectState.dbConfig || { ...DEFAULT_DB_CONFIG, designed: false };
899
+ console.log();
900
+ printInfo('Database Status:');
901
+ console.log(` Designed: ${dbConfig.designed ? 'Yes' : 'No'}`);
902
+ console.log(` Status: ${dbConfig.status}`);
903
+ console.log(` Mode: ${dbConfig.mode || 'not set'}`);
904
+ console.log(` Vector: ${dbConfig.vectorRequired ? 'Yes' : 'No'}`);
905
+ console.log(` Migrations: ${dbConfig.migrationsApplied}`);
906
+ if (dbConfig.lastError) {
907
+ printError(` Last Error: ${dbConfig.lastError}`);
908
+ }
909
+ console.log();
910
+ }
911
+ catch (err) {
912
+ printError(err instanceof Error ? err.message : 'Failed to load project state');
913
+ }
914
+ break;
915
+ }
916
+ case 'configure': {
917
+ printInfo('Use "popeye db configure" from the CLI for interactive configuration.');
918
+ printInfo('Or set DATABASE_URL in apps/backend/.env manually.');
919
+ break;
920
+ }
921
+ case 'apply': {
922
+ printInfo('Use "popeye db apply" from the CLI to run the setup pipeline.');
923
+ break;
924
+ }
925
+ default:
926
+ printError(`Unknown db action: ${action}`);
927
+ printInfo('Usage: /db [status|configure|apply]');
928
+ }
929
+ }
930
+ /**
931
+ * Handle /doctor slash command - readiness checks
932
+ */
933
+ async function handleDoctorSlashCommand(state) {
934
+ if (!state.projectDir) {
935
+ printError('No active project. Create or resume a project first.');
936
+ return;
937
+ }
938
+ try {
939
+ const { runDoctorChecks } = await import('./commands/doctor.js');
940
+ console.log();
941
+ printInfo('Running readiness checks...');
942
+ console.log();
943
+ const result = await runDoctorChecks(state.projectDir);
944
+ for (const check of result.checks) {
945
+ const label = check.passed ? '[PASS]' : check.severity === 'info' ? '[SKIP]' : '[FAIL]';
946
+ if (check.passed) {
947
+ printSuccess(` ${label} ${check.name}: ${check.message}`);
948
+ }
949
+ else if (check.severity === 'info') {
950
+ printInfo(` ${label} ${check.name}: ${check.message}`);
951
+ }
952
+ else if (check.severity === 'warning') {
953
+ printWarning(` ${label} ${check.name}: ${check.message}`);
954
+ }
955
+ else {
956
+ printError(` ${label} ${check.name}: ${check.message}`);
957
+ }
958
+ }
959
+ console.log();
960
+ if (result.healthy) {
961
+ printSuccess('All critical checks passed.');
962
+ }
963
+ else {
964
+ printWarning('Some critical checks failed. See above for details.');
965
+ }
966
+ }
967
+ catch (err) {
968
+ printError(err instanceof Error ? err.message : 'Doctor checks failed');
969
+ }
970
+ }
875
971
  /**
876
972
  * Handle /overview command - full project plan and milestone review
877
973
  */