monty-autonomous-fullstack-dev-multillm 1.0.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 (186) hide show
  1. package/LICENSE +81 -0
  2. package/README.md +608 -0
  3. package/bin/cli.js +448 -0
  4. package/dist/agents/coding.d.ts +15 -0
  5. package/dist/agents/coding.d.ts.map +1 -0
  6. package/dist/agents/coding.js +189 -0
  7. package/dist/agents/coding.js.map +1 -0
  8. package/dist/agents/initializer.d.ts +15 -0
  9. package/dist/agents/initializer.d.ts.map +1 -0
  10. package/dist/agents/initializer.js +87 -0
  11. package/dist/agents/initializer.js.map +1 -0
  12. package/dist/agents/prompts/arbitrator.md +143 -0
  13. package/dist/agents/prompts/coding.md +247 -0
  14. package/dist/agents/prompts/initializer.md +98 -0
  15. package/dist/config/agent-config.d.ts +103 -0
  16. package/dist/config/agent-config.d.ts.map +1 -0
  17. package/dist/config/agent-config.js +138 -0
  18. package/dist/config/agent-config.js.map +1 -0
  19. package/dist/config/auth-config.d.ts +152 -0
  20. package/dist/config/auth-config.d.ts.map +1 -0
  21. package/dist/config/auth-config.js +139 -0
  22. package/dist/config/auth-config.js.map +1 -0
  23. package/dist/config/mcp-config.d.ts +109 -0
  24. package/dist/config/mcp-config.d.ts.map +1 -0
  25. package/dist/config/mcp-config.js +234 -0
  26. package/dist/config/mcp-config.js.map +1 -0
  27. package/dist/config/provider-config.d.ts +139 -0
  28. package/dist/config/provider-config.d.ts.map +1 -0
  29. package/dist/config/provider-config.js +344 -0
  30. package/dist/config/provider-config.js.map +1 -0
  31. package/dist/config/subagents-config.d.ts +85 -0
  32. package/dist/config/subagents-config.d.ts.map +1 -0
  33. package/dist/config/subagents-config.js +430 -0
  34. package/dist/config/subagents-config.js.map +1 -0
  35. package/dist/index.d.ts +14 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +385 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/orchestrator/arbitrator.d.ts +93 -0
  40. package/dist/orchestrator/arbitrator.d.ts.map +1 -0
  41. package/dist/orchestrator/arbitrator.js +330 -0
  42. package/dist/orchestrator/arbitrator.js.map +1 -0
  43. package/dist/orchestrator/index.d.ts +113 -0
  44. package/dist/orchestrator/index.d.ts.map +1 -0
  45. package/dist/orchestrator/index.js +217 -0
  46. package/dist/orchestrator/index.js.map +1 -0
  47. package/dist/orchestrator/review-coordinator.d.ts +143 -0
  48. package/dist/orchestrator/review-coordinator.d.ts.map +1 -0
  49. package/dist/orchestrator/review-coordinator.js +401 -0
  50. package/dist/orchestrator/review-coordinator.js.map +1 -0
  51. package/dist/orchestrator/task-classifier.d.ts +87 -0
  52. package/dist/orchestrator/task-classifier.d.ts.map +1 -0
  53. package/dist/orchestrator/task-classifier.js +250 -0
  54. package/dist/orchestrator/task-classifier.js.map +1 -0
  55. package/dist/providers/anthropic-provider.d.ts +64 -0
  56. package/dist/providers/anthropic-provider.d.ts.map +1 -0
  57. package/dist/providers/anthropic-provider.js +264 -0
  58. package/dist/providers/anthropic-provider.js.map +1 -0
  59. package/dist/providers/base-provider.d.ts +219 -0
  60. package/dist/providers/base-provider.d.ts.map +1 -0
  61. package/dist/providers/base-provider.js +143 -0
  62. package/dist/providers/base-provider.js.map +1 -0
  63. package/dist/providers/cursor-provider.d.ts +82 -0
  64. package/dist/providers/cursor-provider.d.ts.map +1 -0
  65. package/dist/providers/cursor-provider.js +321 -0
  66. package/dist/providers/cursor-provider.js.map +1 -0
  67. package/dist/providers/google-provider.d.ts +75 -0
  68. package/dist/providers/google-provider.d.ts.map +1 -0
  69. package/dist/providers/google-provider.js +274 -0
  70. package/dist/providers/google-provider.js.map +1 -0
  71. package/dist/providers/index.d.ts +92 -0
  72. package/dist/providers/index.d.ts.map +1 -0
  73. package/dist/providers/index.js +233 -0
  74. package/dist/providers/index.js.map +1 -0
  75. package/dist/providers/openai-provider.d.ts +83 -0
  76. package/dist/providers/openai-provider.d.ts.map +1 -0
  77. package/dist/providers/openai-provider.js +295 -0
  78. package/dist/providers/openai-provider.js.map +1 -0
  79. package/dist/templates/feature_list.template.json +66 -0
  80. package/dist/templates/progress.template.txt +51 -0
  81. package/dist/utils/auth-manager.d.ts +121 -0
  82. package/dist/utils/auth-manager.d.ts.map +1 -0
  83. package/dist/utils/auth-manager.js +560 -0
  84. package/dist/utils/auth-manager.js.map +1 -0
  85. package/dist/utils/budget-enforcer.d.ts +181 -0
  86. package/dist/utils/budget-enforcer.d.ts.map +1 -0
  87. package/dist/utils/budget-enforcer.js +386 -0
  88. package/dist/utils/budget-enforcer.js.map +1 -0
  89. package/dist/utils/chatgpt-detector.d.ts +51 -0
  90. package/dist/utils/chatgpt-detector.d.ts.map +1 -0
  91. package/dist/utils/chatgpt-detector.js +274 -0
  92. package/dist/utils/chatgpt-detector.js.map +1 -0
  93. package/dist/utils/claude-code-detector.d.ts +39 -0
  94. package/dist/utils/claude-code-detector.d.ts.map +1 -0
  95. package/dist/utils/claude-code-detector.js +153 -0
  96. package/dist/utils/claude-code-detector.js.map +1 -0
  97. package/dist/utils/code-quality.d.ts +58 -0
  98. package/dist/utils/code-quality.d.ts.map +1 -0
  99. package/dist/utils/code-quality.js +258 -0
  100. package/dist/utils/code-quality.js.map +1 -0
  101. package/dist/utils/context-primer.d.ts +50 -0
  102. package/dist/utils/context-primer.d.ts.map +1 -0
  103. package/dist/utils/context-primer.js +429 -0
  104. package/dist/utils/context-primer.js.map +1 -0
  105. package/dist/utils/dependency-management.d.ts +40 -0
  106. package/dist/utils/dependency-management.d.ts.map +1 -0
  107. package/dist/utils/dependency-management.js +123 -0
  108. package/dist/utils/dependency-management.js.map +1 -0
  109. package/dist/utils/environment-validation.d.ts +33 -0
  110. package/dist/utils/environment-validation.d.ts.map +1 -0
  111. package/dist/utils/environment-validation.js +136 -0
  112. package/dist/utils/environment-validation.js.map +1 -0
  113. package/dist/utils/error-recovery.d.ts +60 -0
  114. package/dist/utils/error-recovery.d.ts.map +1 -0
  115. package/dist/utils/error-recovery.js +183 -0
  116. package/dist/utils/error-recovery.js.map +1 -0
  117. package/dist/utils/feature-list.d.ts +102 -0
  118. package/dist/utils/feature-list.d.ts.map +1 -0
  119. package/dist/utils/feature-list.js +191 -0
  120. package/dist/utils/feature-list.js.map +1 -0
  121. package/dist/utils/gemini-detector.d.ts +65 -0
  122. package/dist/utils/gemini-detector.d.ts.map +1 -0
  123. package/dist/utils/gemini-detector.js +340 -0
  124. package/dist/utils/gemini-detector.js.map +1 -0
  125. package/dist/utils/git-utils.d.ts +48 -0
  126. package/dist/utils/git-utils.d.ts.map +1 -0
  127. package/dist/utils/git-utils.js +110 -0
  128. package/dist/utils/git-utils.js.map +1 -0
  129. package/dist/utils/health-check.d.ts +32 -0
  130. package/dist/utils/health-check.d.ts.map +1 -0
  131. package/dist/utils/health-check.js +152 -0
  132. package/dist/utils/health-check.js.map +1 -0
  133. package/dist/utils/hooks-manager.d.ts +154 -0
  134. package/dist/utils/hooks-manager.d.ts.map +1 -0
  135. package/dist/utils/hooks-manager.js +359 -0
  136. package/dist/utils/hooks-manager.js.map +1 -0
  137. package/dist/utils/multi-auth-manager.d.ts +144 -0
  138. package/dist/utils/multi-auth-manager.d.ts.map +1 -0
  139. package/dist/utils/multi-auth-manager.js +588 -0
  140. package/dist/utils/multi-auth-manager.js.map +1 -0
  141. package/dist/utils/progress.d.ts +49 -0
  142. package/dist/utils/progress.d.ts.map +1 -0
  143. package/dist/utils/progress.js +209 -0
  144. package/dist/utils/progress.js.map +1 -0
  145. package/dist/utils/project-detection.d.ts +40 -0
  146. package/dist/utils/project-detection.d.ts.map +1 -0
  147. package/dist/utils/project-detection.js +230 -0
  148. package/dist/utils/project-detection.js.map +1 -0
  149. package/dist/utils/session-manager.d.ts +119 -0
  150. package/dist/utils/session-manager.d.ts.map +1 -0
  151. package/dist/utils/session-manager.js +389 -0
  152. package/dist/utils/session-manager.js.map +1 -0
  153. package/dist/utils/skills-manager.d.ts +113 -0
  154. package/dist/utils/skills-manager.d.ts.map +1 -0
  155. package/dist/utils/skills-manager.js +332 -0
  156. package/dist/utils/skills-manager.js.map +1 -0
  157. package/dist/utils/structured-output.d.ts +117 -0
  158. package/dist/utils/structured-output.d.ts.map +1 -0
  159. package/dist/utils/structured-output.js +191 -0
  160. package/dist/utils/structured-output.js.map +1 -0
  161. package/dist/utils/subagent-manager.d.ts +143 -0
  162. package/dist/utils/subagent-manager.d.ts.map +1 -0
  163. package/dist/utils/subagent-manager.js +326 -0
  164. package/dist/utils/subagent-manager.js.map +1 -0
  165. package/dist/utils/supabase-setup.d.ts +50 -0
  166. package/dist/utils/supabase-setup.d.ts.map +1 -0
  167. package/dist/utils/supabase-setup.js +151 -0
  168. package/dist/utils/supabase-setup.js.map +1 -0
  169. package/dist/utils/token-refresh.d.ts +21 -0
  170. package/dist/utils/token-refresh.d.ts.map +1 -0
  171. package/dist/utils/token-refresh.js +77 -0
  172. package/dist/utils/token-refresh.js.map +1 -0
  173. package/dist/utils/tos-warning.d.ts +115 -0
  174. package/dist/utils/tos-warning.d.ts.map +1 -0
  175. package/dist/utils/tos-warning.js +304 -0
  176. package/dist/utils/tos-warning.js.map +1 -0
  177. package/dist/utils/usage-monitor.d.ts +156 -0
  178. package/dist/utils/usage-monitor.d.ts.map +1 -0
  179. package/dist/utils/usage-monitor.js +296 -0
  180. package/dist/utils/usage-monitor.js.map +1 -0
  181. package/package.json +105 -0
  182. package/scripts/init.ps1 +73 -0
  183. package/scripts/init.sh +86 -0
  184. package/scripts/test-auth.sh +90 -0
  185. package/templates/feature_list.template.json +66 -0
  186. package/templates/progress.template.txt +51 -0
@@ -0,0 +1,136 @@
1
+ /**
2
+ * Environment Validation Utilities
3
+ * Validates environment variables, configuration files, and required setup.
4
+ */
5
+ import { existsSync, readFileSync } from "fs";
6
+ import { resolve } from "path";
7
+ import { agentConfig } from "../config/agent-config.js";
8
+ /**
9
+ * Validate environment variables from .env file
10
+ */
11
+ export function validateEnvironment() {
12
+ const root = agentConfig.paths.projectRoot;
13
+ const envPath = resolve(root, ".env");
14
+ const envExamplePath = resolve(root, ".env.example");
15
+ const result = {
16
+ valid: true,
17
+ missing: [],
18
+ invalid: [],
19
+ warnings: [],
20
+ recommendations: [],
21
+ };
22
+ // Check if .env file exists
23
+ if (!existsSync(envPath)) {
24
+ if (existsSync(envExamplePath)) {
25
+ result.warnings.push(".env file not found, but .env.example exists");
26
+ result.recommendations.push("Copy .env.example to .env and fill in values");
27
+ }
28
+ else {
29
+ result.warnings.push(".env file not found");
30
+ result.recommendations.push("Create .env file if environment variables are needed");
31
+ }
32
+ return result;
33
+ }
34
+ // Read .env file
35
+ try {
36
+ const envContent = readFileSync(envPath, "utf-8");
37
+ const lines = envContent.split("\n");
38
+ const envVars = {};
39
+ for (const line of lines) {
40
+ const trimmed = line.trim();
41
+ if (trimmed && !trimmed.startsWith("#")) {
42
+ const eqIndex = trimmed.indexOf("=");
43
+ if (eqIndex > 0) {
44
+ const key = trimmed.substring(0, eqIndex).trim();
45
+ const value = trimmed.substring(eqIndex + 1).trim().replace(/^["']|["']$/g, "");
46
+ envVars[key] = value;
47
+ }
48
+ }
49
+ }
50
+ // Check for placeholder values
51
+ for (const [key, value] of Object.entries(envVars)) {
52
+ if (!value || value === "placeholder" || value === "your-value-here" || value.startsWith("YOUR_")) {
53
+ result.invalid.push(key);
54
+ result.valid = false;
55
+ }
56
+ }
57
+ // Check for common required variables based on project type
58
+ // This is a heuristic - actual requirements depend on the project
59
+ if (envVars["VITE_SUPABASE_URL"] && envVars["VITE_SUPABASE_ANON_KEY"]) {
60
+ // Supabase project - check if values are valid
61
+ if (envVars["VITE_SUPABASE_URL"] === "https://your-project.supabase.co") {
62
+ result.invalid.push("VITE_SUPABASE_URL");
63
+ result.valid = false;
64
+ }
65
+ }
66
+ }
67
+ catch (error) {
68
+ result.warnings.push(`Error reading .env file: ${error instanceof Error ? error.message : String(error)}`);
69
+ }
70
+ return result;
71
+ }
72
+ /**
73
+ * Check for required configuration files
74
+ */
75
+ export function checkRequiredConfigs() {
76
+ const root = agentConfig.paths.projectRoot;
77
+ const missing = [];
78
+ // Common config files that might be required
79
+ const configs = [
80
+ { file: "package.json", required: true },
81
+ { file: "tsconfig.json", required: false },
82
+ { file: "vite.config.ts", required: false },
83
+ { file: "next.config.js", required: false },
84
+ { file: "tailwind.config.js", required: false },
85
+ ];
86
+ for (const config of configs) {
87
+ if (config.required && !existsSync(resolve(root, config.file))) {
88
+ missing.push(config.file);
89
+ }
90
+ }
91
+ return missing;
92
+ }
93
+ /**
94
+ * Generate environment validation summary
95
+ */
96
+ export function generateEnvironmentSummary() {
97
+ const validation = validateEnvironment();
98
+ const missingConfigs = checkRequiredConfigs();
99
+ let summary = "\n## ENVIRONMENT VALIDATION\n\n";
100
+ if (validation.valid && missingConfigs.length === 0) {
101
+ summary += "✅ Environment configuration valid\n";
102
+ }
103
+ else {
104
+ if (!validation.valid) {
105
+ summary += "❌ Environment validation failed\n";
106
+ }
107
+ if (missingConfigs.length > 0) {
108
+ summary += `⚠️ Missing required config files: ${missingConfigs.join(", ")}\n`;
109
+ }
110
+ }
111
+ if (validation.invalid.length > 0) {
112
+ summary += "\n🚨 Invalid Environment Variables:\n";
113
+ validation.invalid.forEach(key => {
114
+ summary += ` - ${key} (contains placeholder or invalid value)\n`;
115
+ });
116
+ }
117
+ if (validation.warnings.length > 0) {
118
+ summary += "\n⚠️ Warnings:\n";
119
+ validation.warnings.forEach(warning => {
120
+ summary += ` - ${warning}\n`;
121
+ });
122
+ }
123
+ if (validation.recommendations.length > 0) {
124
+ summary += "\n💡 Recommendations:\n";
125
+ validation.recommendations.forEach(rec => {
126
+ summary += ` - ${rec}\n`;
127
+ });
128
+ }
129
+ return summary;
130
+ }
131
+ export default {
132
+ validateEnvironment,
133
+ checkRequiredConfigs,
134
+ generateEnvironmentSummary,
135
+ };
136
+ //# sourceMappingURL=environment-validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"environment-validation.js","sourceRoot":"","sources":["../../src/utils/environment-validation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Error Recovery Utilities
3
+ * Provides rollback capabilities, error tracking, and recovery strategies.
4
+ */
5
+ /**
6
+ * Error entry
7
+ */
8
+ export interface ErrorEntry {
9
+ timestamp: string;
10
+ session: string;
11
+ error: string;
12
+ context: string;
13
+ recovery: string | null;
14
+ resolved: boolean;
15
+ }
16
+ /**
17
+ * Session checkpoint for rollback
18
+ */
19
+ export interface Checkpoint {
20
+ timestamp: string;
21
+ session: string;
22
+ gitCommit: string | null;
23
+ featureId: string | null;
24
+ description: string;
25
+ files: string[];
26
+ }
27
+ /**
28
+ * Log an error
29
+ */
30
+ export declare function logError(error: Error | string, context: string, recovery?: string): void;
31
+ /**
32
+ * Get recent errors
33
+ */
34
+ export declare function getRecentErrors(limit?: number): ErrorEntry[];
35
+ /**
36
+ * Create a checkpoint
37
+ */
38
+ export declare function createCheckpoint(session: string, gitCommit: string | null, featureId: string | null, description: string, files?: string[]): void;
39
+ /**
40
+ * Get recent checkpoints
41
+ */
42
+ export declare function getRecentCheckpoints(limit?: number): Checkpoint[];
43
+ /**
44
+ * Get the last checkpoint
45
+ */
46
+ export declare function getLastCheckpoint(): Checkpoint | null;
47
+ /**
48
+ * Generate error recovery summary
49
+ */
50
+ export declare function generateErrorRecoverySummary(): string;
51
+ declare const _default: {
52
+ logError: typeof logError;
53
+ getRecentErrors: typeof getRecentErrors;
54
+ createCheckpoint: typeof createCheckpoint;
55
+ getRecentCheckpoints: typeof getRecentCheckpoints;
56
+ getLastCheckpoint: typeof getLastCheckpoint;
57
+ generateErrorRecoverySummary: typeof generateErrorRecoverySummary;
58
+ };
59
+ export default _default;
60
+ //# sourceMappingURL=error-recovery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-recovery.d.ts","sourceRoot":"","sources":["../../src/utils/error-recovery.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAyBD;;GAEG;AACH,wBAAgB,QAAQ,CACtB,KAAK,EAAE,KAAK,GAAG,MAAM,EACrB,OAAO,EAAE,MAAM,EACf,QAAQ,CAAC,EAAE,MAAM,GAChB,IAAI,CAwCN;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,GAAE,MAAW,GAAG,UAAU,EAAE,CAchE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,GAAG,IAAI,EACxB,SAAS,EAAE,MAAM,GAAG,IAAI,EACxB,WAAW,EAAE,MAAM,EACnB,KAAK,GAAE,MAAM,EAAO,GACnB,IAAI,CAqCN;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,GAAE,MAAU,GAAG,UAAU,EAAE,CAcpE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,UAAU,GAAG,IAAI,CAGrD;AAED;;GAEG;AACH,wBAAgB,4BAA4B,IAAI,MAAM,CA+BrD;;;;;;;;;AAED,wBAOE"}
@@ -0,0 +1,183 @@
1
+ /**
2
+ * Error Recovery Utilities
3
+ * Provides rollback capabilities, error tracking, and recovery strategies.
4
+ */
5
+ import { existsSync, readFileSync, writeFileSync, mkdirSync } from "fs";
6
+ import { resolve } from "path";
7
+ import { agentConfig } from "../config/agent-config.js";
8
+ /**
9
+ * Get error log path
10
+ */
11
+ function getErrorLogPath() {
12
+ return resolve(agentConfig.paths.agentDir, "error-log.json");
13
+ }
14
+ /**
15
+ * Get checkpoint path
16
+ */
17
+ function getCheckpointPath() {
18
+ return resolve(agentConfig.paths.agentDir, "checkpoints.json");
19
+ }
20
+ /**
21
+ * Ensure agent directory exists
22
+ */
23
+ function ensureAgentDir() {
24
+ if (!existsSync(agentConfig.paths.agentDir)) {
25
+ mkdirSync(agentConfig.paths.agentDir, { recursive: true });
26
+ }
27
+ }
28
+ /**
29
+ * Log an error
30
+ */
31
+ export function logError(error, context, recovery) {
32
+ ensureAgentDir();
33
+ const errorLogPath = getErrorLogPath();
34
+ const errorMessage = error instanceof Error ? error.message : error;
35
+ const errorStack = error instanceof Error ? error.stack : undefined;
36
+ const entry = {
37
+ timestamp: new Date().toISOString(),
38
+ session: `session-${Date.now()}`,
39
+ error: errorMessage,
40
+ context,
41
+ recovery: recovery || null,
42
+ resolved: false,
43
+ };
44
+ let errors = [];
45
+ if (existsSync(errorLogPath)) {
46
+ try {
47
+ const content = readFileSync(errorLogPath, "utf-8");
48
+ errors = JSON.parse(content);
49
+ }
50
+ catch {
51
+ // If file is corrupted, start fresh
52
+ errors = [];
53
+ }
54
+ }
55
+ errors.push(entry);
56
+ // Keep only last 100 errors
57
+ if (errors.length > 100) {
58
+ errors = errors.slice(-100);
59
+ }
60
+ try {
61
+ writeFileSync(errorLogPath, JSON.stringify(errors, null, 2), "utf-8");
62
+ }
63
+ catch {
64
+ // Silently fail if we can't write
65
+ }
66
+ }
67
+ /**
68
+ * Get recent errors
69
+ */
70
+ export function getRecentErrors(limit = 10) {
71
+ const errorLogPath = getErrorLogPath();
72
+ if (!existsSync(errorLogPath)) {
73
+ return [];
74
+ }
75
+ try {
76
+ const content = readFileSync(errorLogPath, "utf-8");
77
+ const errors = JSON.parse(content);
78
+ return errors.slice(-limit).reverse();
79
+ }
80
+ catch {
81
+ return [];
82
+ }
83
+ }
84
+ /**
85
+ * Create a checkpoint
86
+ */
87
+ export function createCheckpoint(session, gitCommit, featureId, description, files = []) {
88
+ ensureAgentDir();
89
+ const checkpointPath = getCheckpointPath();
90
+ const checkpoint = {
91
+ timestamp: new Date().toISOString(),
92
+ session,
93
+ gitCommit,
94
+ featureId,
95
+ description,
96
+ files,
97
+ };
98
+ let checkpoints = [];
99
+ if (existsSync(checkpointPath)) {
100
+ try {
101
+ const content = readFileSync(checkpointPath, "utf-8");
102
+ checkpoints = JSON.parse(content);
103
+ }
104
+ catch {
105
+ checkpoints = [];
106
+ }
107
+ }
108
+ checkpoints.push(checkpoint);
109
+ // Keep only last 50 checkpoints
110
+ if (checkpoints.length > 50) {
111
+ checkpoints = checkpoints.slice(-50);
112
+ }
113
+ try {
114
+ writeFileSync(checkpointPath, JSON.stringify(checkpoints, null, 2), "utf-8");
115
+ }
116
+ catch {
117
+ // Silently fail
118
+ }
119
+ }
120
+ /**
121
+ * Get recent checkpoints
122
+ */
123
+ export function getRecentCheckpoints(limit = 5) {
124
+ const checkpointPath = getCheckpointPath();
125
+ if (!existsSync(checkpointPath)) {
126
+ return [];
127
+ }
128
+ try {
129
+ const content = readFileSync(checkpointPath, "utf-8");
130
+ const checkpoints = JSON.parse(content);
131
+ return checkpoints.slice(-limit).reverse();
132
+ }
133
+ catch {
134
+ return [];
135
+ }
136
+ }
137
+ /**
138
+ * Get the last checkpoint
139
+ */
140
+ export function getLastCheckpoint() {
141
+ const checkpoints = getRecentCheckpoints(1);
142
+ return checkpoints[0] || null;
143
+ }
144
+ /**
145
+ * Generate error recovery summary
146
+ */
147
+ export function generateErrorRecoverySummary() {
148
+ const recentErrors = getRecentErrors(5);
149
+ const recentCheckpoints = getRecentCheckpoints(3);
150
+ let summary = "\n## ERROR RECOVERY STATUS\n\n";
151
+ if (recentErrors.length > 0) {
152
+ summary += `⚠️ Recent Errors (${recentErrors.length}):\n`;
153
+ recentErrors.slice(0, 3).forEach(err => {
154
+ summary += ` - ${err.error.substring(0, 60)}${err.error.length > 60 ? "..." : ""}\n`;
155
+ summary += ` Context: ${err.context.substring(0, 50)}${err.context.length > 50 ? "..." : ""}\n`;
156
+ });
157
+ }
158
+ else {
159
+ summary += "✅ No recent errors logged\n";
160
+ }
161
+ if (recentCheckpoints.length > 0) {
162
+ summary += `\n📌 Recent Checkpoints (${recentCheckpoints.length}):\n`;
163
+ recentCheckpoints.forEach(cp => {
164
+ summary += ` - ${cp.description.substring(0, 50)}${cp.description.length > 50 ? "..." : ""}\n`;
165
+ summary += ` ${cp.timestamp}\n`;
166
+ });
167
+ }
168
+ summary += "\n💡 Recovery Options:\n";
169
+ summary += " - Check git log for recent commits\n";
170
+ summary += " - Use 'git reset --hard <commit>' to rollback if needed\n";
171
+ summary += " - Review error-log.json for detailed error history\n";
172
+ summary += " - Review checkpoints.json for session checkpoints\n";
173
+ return summary;
174
+ }
175
+ export default {
176
+ logError,
177
+ getRecentErrors,
178
+ createCheckpoint,
179
+ getRecentCheckpoints,
180
+ getLastCheckpoint,
181
+ generateErrorRecoverySummary,
182
+ };
183
+ //# sourceMappingURL=error-recovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-recovery.js","sourceRoot":"","sources":["../../src/utils/error-recovery.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,102 @@
1
+ /**
2
+ * Feature List Utilities
3
+ * Manages feature list operations with Poka-yoke error prevention.
4
+ * Implements safeguards to prevent accidental modification of test criteria.
5
+ */
6
+ /**
7
+ * Feature definition matching the JSON schema
8
+ */
9
+ export interface Feature {
10
+ id: string;
11
+ category: "functional" | "ui" | "integration" | "performance" | "accessibility";
12
+ priority: number;
13
+ description: string;
14
+ steps: string[];
15
+ passes: boolean;
16
+ last_tested: string | null;
17
+ tested_by?: string | null;
18
+ notes: string;
19
+ }
20
+ /**
21
+ * Project metadata in feature list
22
+ */
23
+ export interface ProjectInfo {
24
+ name: string;
25
+ description: string;
26
+ created_at: string;
27
+ stack: string;
28
+ }
29
+ /**
30
+ * Complete feature list structure
31
+ */
32
+ export interface FeatureList {
33
+ project: ProjectInfo;
34
+ features: Feature[];
35
+ metadata: {
36
+ total_features: number;
37
+ passing_features: number;
38
+ last_updated: string;
39
+ };
40
+ }
41
+ /**
42
+ * Validation result type
43
+ */
44
+ export interface ValidationResult {
45
+ valid: boolean;
46
+ error?: string;
47
+ warnings?: string[];
48
+ }
49
+ /**
50
+ * Load the feature list from disk
51
+ */
52
+ export declare function loadFeatureList(): FeatureList | null;
53
+ /**
54
+ * Save the feature list to disk
55
+ */
56
+ export declare function saveFeatureList(featureList: FeatureList): boolean;
57
+ /**
58
+ * Poka-yoke validation: Ensure feature list updates don't violate constraints
59
+ *
60
+ * CONSTRAINTS:
61
+ * - Cannot delete features
62
+ * - Cannot modify feature steps (test criteria)
63
+ * - Cannot modify feature descriptions
64
+ * - Can only update: passes, last_tested, notes
65
+ */
66
+ export declare function validateFeatureListUpdate(original: FeatureList, updated: FeatureList): ValidationResult;
67
+ /**
68
+ * Get the next feature to work on (highest priority failing feature)
69
+ */
70
+ export declare function getNextFeature(featureList: FeatureList): Feature | null;
71
+ /**
72
+ * Mark a feature as passing
73
+ */
74
+ export declare function markFeaturePassing(featureList: FeatureList, featureId: string, notes?: string): FeatureList;
75
+ /**
76
+ * Get progress statistics
77
+ */
78
+ export declare function getProgressStats(featureList: FeatureList): {
79
+ total: number;
80
+ passing: number;
81
+ failing: number;
82
+ percentage: number;
83
+ byCategory: Record<string, {
84
+ passing: number;
85
+ total: number;
86
+ }>;
87
+ };
88
+ /**
89
+ * Generate a progress report string
90
+ */
91
+ export declare function generateProgressReport(featureList: FeatureList): string;
92
+ declare const _default: {
93
+ loadFeatureList: typeof loadFeatureList;
94
+ saveFeatureList: typeof saveFeatureList;
95
+ validateFeatureListUpdate: typeof validateFeatureListUpdate;
96
+ getNextFeature: typeof getNextFeature;
97
+ markFeaturePassing: typeof markFeaturePassing;
98
+ getProgressStats: typeof getProgressStats;
99
+ generateProgressReport: typeof generateProgressReport;
100
+ };
101
+ export default _default;
102
+ //# sourceMappingURL=feature-list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feature-list.d.ts","sourceRoot":"","sources":["../../src/utils/feature-list.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,YAAY,GAAG,IAAI,GAAG,aAAa,GAAG,aAAa,GAAG,eAAe,CAAC;IAChF,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,WAAW,CAAC;IACrB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,QAAQ,EAAE;QACR,cAAc,EAAE,MAAM,CAAC;QACvB,gBAAgB,EAAE,MAAM,CAAC;QACzB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,WAAW,GAAG,IAAI,CAcpD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAgBjE;AAED;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,WAAW,EACrB,OAAO,EAAE,WAAW,GACnB,gBAAgB,CAwDlB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,GAAG,IAAI,CAMvE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,MAAM,EACjB,KAAK,CAAC,EAAE,MAAM,GACb,WAAW,CAYb;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,WAAW,GAAG;IAC1D,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAChE,CA2BA;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,WAAW,GAAG,MAAM,CA6BvE;;;;;;;;;;AAED,wBAQE"}