@defai.digital/ax-cli 3.15.26 → 4.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +67 -21
- package/config-defaults/prompts.yaml +5 -0
- package/dist/agent/execution/tool-executor.js +47 -1
- package/dist/agent/execution/tool-executor.js.map +1 -1
- package/dist/agent/llm-agent.js +4 -4
- package/dist/agent/llm-agent.js.map +1 -1
- package/dist/agent/parallel-tools.js +1 -0
- package/dist/agent/parallel-tools.js.map +1 -1
- package/dist/commands/cache.js +37 -34
- package/dist/commands/cache.js.map +1 -1
- package/dist/commands/doctor.js +111 -65
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/init/wizard.js +10 -12
- package/dist/commands/init/wizard.js.map +1 -1
- package/dist/commands/init.d.ts +3 -3
- package/dist/commands/init.js +173 -25
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/mcp.js +106 -55
- package/dist/commands/mcp.js.map +1 -1
- package/dist/commands/setup.d.ts +0 -1
- package/dist/commands/setup.js +33 -194
- package/dist/commands/setup.js.map +1 -1
- package/dist/commands/usage.js +45 -51
- package/dist/commands/usage.js.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/llm/tools.d.ts +2 -9
- package/dist/llm/tools.js +8 -579
- package/dist/llm/tools.js.map +1 -1
- package/dist/mcp/content-length-transport.d.ts +18 -0
- package/dist/mcp/content-length-transport.js +121 -3
- package/dist/mcp/content-length-transport.js.map +1 -1
- package/dist/mcp/error-remediation.js +54 -17
- package/dist/mcp/error-remediation.js.map +1 -1
- package/dist/planner/types.d.ts +4 -4
- package/dist/tools/ax-agent.d.ts +32 -0
- package/dist/tools/ax-agent.js +105 -0
- package/dist/tools/ax-agent.js.map +1 -1
- package/dist/tools/definitions/ask-user.d.ts +8 -0
- package/dist/tools/definitions/ask-user.js +168 -0
- package/dist/tools/definitions/ask-user.js.map +1 -0
- package/dist/tools/definitions/ax-agent.d.ts +8 -0
- package/dist/tools/definitions/ax-agent.js +276 -0
- package/dist/tools/definitions/ax-agent.js.map +1 -0
- package/dist/tools/definitions/bash-output.d.ts +7 -0
- package/dist/tools/definitions/bash-output.js +78 -0
- package/dist/tools/definitions/bash-output.js.map +1 -0
- package/dist/tools/definitions/bash.d.ts +8 -0
- package/dist/tools/definitions/bash.js +152 -0
- package/dist/tools/definitions/bash.js.map +1 -0
- package/dist/tools/definitions/create-file.d.ts +7 -0
- package/dist/tools/definitions/create-file.js +129 -0
- package/dist/tools/definitions/create-file.js.map +1 -0
- package/dist/tools/definitions/design.d.ts +12 -0
- package/dist/tools/definitions/design.js +368 -0
- package/dist/tools/definitions/design.js.map +1 -0
- package/dist/tools/definitions/index.d.ts +49 -0
- package/dist/tools/definitions/index.js +87 -0
- package/dist/tools/definitions/index.js.map +1 -0
- package/dist/tools/definitions/multi-edit.d.ts +7 -0
- package/dist/tools/definitions/multi-edit.js +123 -0
- package/dist/tools/definitions/multi-edit.js.map +1 -0
- package/dist/tools/definitions/search.d.ts +7 -0
- package/dist/tools/definitions/search.js +159 -0
- package/dist/tools/definitions/search.js.map +1 -0
- package/dist/tools/definitions/str-replace-editor.d.ts +7 -0
- package/dist/tools/definitions/str-replace-editor.js +145 -0
- package/dist/tools/definitions/str-replace-editor.js.map +1 -0
- package/dist/tools/definitions/todo.d.ts +8 -0
- package/dist/tools/definitions/todo.js +261 -0
- package/dist/tools/definitions/todo.js.map +1 -0
- package/dist/tools/definitions/view-file.d.ts +7 -0
- package/dist/tools/definitions/view-file.js +111 -0
- package/dist/tools/definitions/view-file.js.map +1 -0
- package/dist/tools/format-generators.d.ts +62 -0
- package/dist/tools/format-generators.js +291 -0
- package/dist/tools/format-generators.js.map +1 -0
- package/dist/tools/index.d.ts +3 -0
- package/dist/tools/index.js +5 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/types.d.ts +175 -0
- package/dist/tools/types.js +11 -0
- package/dist/tools/types.js.map +1 -0
- package/dist/ui/utils/image-handler.js +3 -0
- package/dist/ui/utils/image-handler.js.map +1 -1
- package/dist/utils/enhanced-error-messages.js +43 -23
- package/dist/utils/enhanced-error-messages.js.map +1 -1
- package/dist/utils/init-validator.d.ts +4 -0
- package/dist/utils/init-validator.js +17 -13
- package/dist/utils/init-validator.js.map +1 -1
- package/dist/utils/llm-optimized-instruction-generator.js +97 -136
- package/dist/utils/llm-optimized-instruction-generator.js.map +1 -1
- package/dist/utils/project-analyzer.d.ts +6 -0
- package/dist/utils/project-analyzer.js +92 -189
- package/dist/utils/project-analyzer.js.map +1 -1
- package/dist/utils/template-manager.d.ts +8 -0
- package/dist/utils/template-manager.js +54 -110
- package/dist/utils/template-manager.js.map +1 -1
- package/package.json +1 -1
|
@@ -76,7 +76,7 @@ const FILE_ERROR_PATTERNS = {
|
|
|
76
76
|
},
|
|
77
77
|
};
|
|
78
78
|
/**
|
|
79
|
-
* API error templates
|
|
79
|
+
* API error templates with actionable ax-cli commands
|
|
80
80
|
*/
|
|
81
81
|
const API_ERROR_PATTERNS = {
|
|
82
82
|
400: {
|
|
@@ -84,7 +84,7 @@ const API_ERROR_PATTERNS = {
|
|
|
84
84
|
description: 'The API request was malformed or invalid',
|
|
85
85
|
suggestions: [
|
|
86
86
|
'Check the request parameters',
|
|
87
|
-
'Verify the model name
|
|
87
|
+
'Verify the model name: ax-cli models',
|
|
88
88
|
'Ensure the input is properly formatted',
|
|
89
89
|
'Review the API documentation',
|
|
90
90
|
],
|
|
@@ -93,10 +93,10 @@ const API_ERROR_PATTERNS = {
|
|
|
93
93
|
title: 'Authentication Failed',
|
|
94
94
|
description: 'Your API key is invalid or missing',
|
|
95
95
|
suggestions: [
|
|
96
|
-
'Run
|
|
96
|
+
'→ Run: ax-cli setup (to configure your API key)',
|
|
97
|
+
'→ Or run: ax-cli config set apiKey YOUR_API_KEY',
|
|
97
98
|
'Verify your API key at the provider dashboard',
|
|
98
|
-
'Check if your API key has expired',
|
|
99
|
-
'Ensure the API key matches your provider',
|
|
99
|
+
'Check if your API key has expired and regenerate if needed',
|
|
100
100
|
],
|
|
101
101
|
learnMore: 'https://docs.ax-cli.dev/configuration#api-keys',
|
|
102
102
|
},
|
|
@@ -104,20 +104,20 @@ const API_ERROR_PATTERNS = {
|
|
|
104
104
|
title: 'Access Forbidden',
|
|
105
105
|
description: 'You do not have permission to access this resource',
|
|
106
106
|
suggestions: [
|
|
107
|
-
'Verify your account has access to this model',
|
|
108
|
-
'Check your subscription plan',
|
|
107
|
+
'Verify your account has access to this model: ax-cli models',
|
|
108
|
+
'Check your subscription plan at the provider dashboard',
|
|
109
|
+
'→ Run: ax-cli doctor (to diagnose configuration issues)',
|
|
109
110
|
'Ensure your API key has the correct permissions',
|
|
110
|
-
'Contact your provider support',
|
|
111
111
|
],
|
|
112
112
|
},
|
|
113
113
|
404: {
|
|
114
114
|
title: 'Resource Not Found',
|
|
115
115
|
description: 'The requested model or endpoint does not exist',
|
|
116
116
|
suggestions: [
|
|
117
|
-
'
|
|
118
|
-
'
|
|
117
|
+
'→ Run: ax-cli models (to see available models)',
|
|
118
|
+
'→ Run: ax-cli config get baseUrl (to check your API endpoint)',
|
|
119
119
|
'Ensure the provider supports this model',
|
|
120
|
-
'
|
|
120
|
+
'→ Run: ax-cli doctor (to verify configuration)',
|
|
121
121
|
],
|
|
122
122
|
},
|
|
123
123
|
429: {
|
|
@@ -126,8 +126,8 @@ const API_ERROR_PATTERNS = {
|
|
|
126
126
|
suggestions: [
|
|
127
127
|
'Wait a few minutes before retrying',
|
|
128
128
|
'Check your rate limits at the provider dashboard',
|
|
129
|
+
'→ Run: ax-cli usage (to check your usage)',
|
|
129
130
|
'Consider upgrading your API plan',
|
|
130
|
-
'Reduce the frequency of requests',
|
|
131
131
|
],
|
|
132
132
|
learnMore: 'https://docs.ax-cli.dev/troubleshooting#rate-limits',
|
|
133
133
|
},
|
|
@@ -137,7 +137,7 @@ const API_ERROR_PATTERNS = {
|
|
|
137
137
|
suggestions: [
|
|
138
138
|
'Wait a few moments and try again',
|
|
139
139
|
'Check provider status page for outages',
|
|
140
|
-
'
|
|
140
|
+
'→ Run: ax-cli doctor (to verify your configuration)',
|
|
141
141
|
'Contact provider support if it persists',
|
|
142
142
|
],
|
|
143
143
|
},
|
|
@@ -171,18 +171,18 @@ const API_ERROR_PATTERNS = {
|
|
|
171
171
|
},
|
|
172
172
|
};
|
|
173
173
|
/**
|
|
174
|
-
* MCP error templates
|
|
174
|
+
* MCP error templates with actionable ax-cli commands
|
|
175
175
|
*/
|
|
176
176
|
const MCP_ERROR_PATTERNS = {
|
|
177
177
|
CONNECTION_FAILED: {
|
|
178
178
|
title: 'MCP Server Connection Failed',
|
|
179
179
|
description: 'Unable to connect to the MCP server',
|
|
180
180
|
suggestions: [
|
|
181
|
-
'
|
|
182
|
-
'
|
|
183
|
-
'
|
|
181
|
+
'→ Run: ax-cli mcp list (to see configured servers)',
|
|
182
|
+
'→ Run: ax-cli mcp test <server-name> (to test connection)',
|
|
183
|
+
'→ Run: ax-cli mcp health (to check all server status)',
|
|
184
184
|
'Check server logs for errors',
|
|
185
|
-
'
|
|
185
|
+
'→ Run: ax-cli mcp remove <server-name> && ax-cli mcp add <server-name> --template (to reinstall)',
|
|
186
186
|
],
|
|
187
187
|
learnMore: 'https://docs.ax-cli.dev/mcp#troubleshooting',
|
|
188
188
|
},
|
|
@@ -190,22 +190,42 @@ const MCP_ERROR_PATTERNS = {
|
|
|
190
190
|
title: 'Invalid MCP Server Response',
|
|
191
191
|
description: 'The MCP server returned an unexpected response',
|
|
192
192
|
suggestions: [
|
|
193
|
+
'→ Run: ax-cli mcp test <server-name> (to verify server)',
|
|
194
|
+
'→ Run: ax-cli mcp tools <server-name> (to see available tools)',
|
|
193
195
|
'Ensure the MCP server is up to date',
|
|
194
|
-
'Check server
|
|
195
|
-
'Verify the server implements the MCP protocol correctly',
|
|
196
|
-
'Try restarting the MCP server',
|
|
196
|
+
'Check if the server implements the MCP protocol correctly',
|
|
197
197
|
],
|
|
198
198
|
},
|
|
199
199
|
TIMEOUT: {
|
|
200
200
|
title: 'MCP Server Timeout',
|
|
201
201
|
description: 'The MCP server did not respond in time',
|
|
202
202
|
suggestions: [
|
|
203
|
+
'→ Run: ax-cli mcp health <server-name> (to check server status)',
|
|
204
|
+
'→ Run: ax-cli mcp test <server-name> (to test connection)',
|
|
203
205
|
'Check if the server is overloaded',
|
|
204
|
-
'Increase the timeout in settings',
|
|
205
|
-
'Verify the server is running properly',
|
|
206
206
|
'Try restarting the MCP server',
|
|
207
207
|
],
|
|
208
208
|
},
|
|
209
|
+
AUTH_FAILED: {
|
|
210
|
+
title: 'MCP Server Authentication Failed',
|
|
211
|
+
description: 'The MCP server rejected the authentication credentials',
|
|
212
|
+
suggestions: [
|
|
213
|
+
'→ Run: ax-cli mcp add <server-name> --template --env TOKEN=YOUR_TOKEN (to re-add with token)',
|
|
214
|
+
'Verify your API token/key is valid and not expired',
|
|
215
|
+
'Check the environment variable is set correctly',
|
|
216
|
+
'→ Run: ax-cli mcp validate <server-name> (to check configuration)',
|
|
217
|
+
],
|
|
218
|
+
},
|
|
219
|
+
ENV_MISSING: {
|
|
220
|
+
title: 'Missing Environment Variable',
|
|
221
|
+
description: 'A required environment variable is not set',
|
|
222
|
+
suggestions: [
|
|
223
|
+
'→ Run: ax-cli mcp add <name> --template --env VAR_NAME=VALUE (to provide directly)',
|
|
224
|
+
'Or set in your shell: export VAR_NAME="your_value"',
|
|
225
|
+
'Or add to ~/.bashrc or ~/.zshrc for persistence',
|
|
226
|
+
'→ Run: ax-cli mcp templates (to see required variables for each template)',
|
|
227
|
+
],
|
|
228
|
+
},
|
|
209
229
|
};
|
|
210
230
|
/**
|
|
211
231
|
* Bash command error templates
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"enhanced-error-messages.js","sourceRoot":"","sources":["../../src/utils/enhanced-error-messages.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAYnD;;GAEG;AACH,MAAM,mBAAmB,GAAyC;IAChE,MAAM,EAAE;QACN,KAAK,EAAE,6BAA6B;QACpC,WAAW,EAAE,mCAAmC;QAChD,WAAW,EAAE;YACX,mCAAmC;YACnC,8CAA8C;YAC9C,uCAAuC;YACvC,kCAAkC;SACnC;KACF;IACD,MAAM,EAAE;QACN,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EAAE,gDAAgD;QAC7D,WAAW,EAAE;YACX,6CAA6C;YAC7C,mCAAmC;YACnC,0CAA0C;YAC1C,6CAA6C;SAC9C;KACF;IACD,MAAM,EAAE;QACN,KAAK,EAAE,8BAA8B;QACrC,WAAW,EAAE,4CAA4C;QACzD,WAAW,EAAE;YACX,4CAA4C;YAC5C,mCAAmC;YACnC,uCAAuC;SACxC;KACF;IACD,OAAO,EAAE;QACP,KAAK,EAAE,8BAA8B;QACrC,WAAW,EAAE,4CAA4C;QACzD,WAAW,EAAE;YACX,4CAA4C;YAC5C,mCAAmC;YACnC,0BAA0B;SAC3B;KACF;IACD,MAAM,EAAE;QACN,KAAK,EAAE,qBAAqB;QAC5B,WAAW,EAAE,8CAA8C;QAC3D,WAAW,EAAE;YACX,6BAA6B;YAC7B,mDAAmD;YACnD,qDAAqD;SACtD;KACF;IACD,MAAM,EAAE;QACN,KAAK,EAAE,qBAAqB;QAC5B,WAAW,EAAE,4CAA4C;QACzD,WAAW,EAAE;YACX,oCAAoC;YACpC,uCAAuC;YACvC,kDAAkD;SACnD;KACF;IACD,MAAM,EAAE;QACN,KAAK,EAAE,yBAAyB;QAChC,WAAW,EAAE,kBAAkB;QAC/B,WAAW,EAAE;YACX,kDAAkD;YAClD,8BAA8B;YAC9B,oCAAoC;YACpC,0BAA0B;SAC3B;KACF;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,kBAAkB,GAAyC;IAC/D,GAAG,EAAE;QACH,KAAK,EAAE,aAAa;QACpB,WAAW,EAAE,0CAA0C;QACvD,WAAW,EAAE;YACX,8BAA8B;YAC9B,
|
|
1
|
+
{"version":3,"file":"enhanced-error-messages.js","sourceRoot":"","sources":["../../src/utils/enhanced-error-messages.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAYnD;;GAEG;AACH,MAAM,mBAAmB,GAAyC;IAChE,MAAM,EAAE;QACN,KAAK,EAAE,6BAA6B;QACpC,WAAW,EAAE,mCAAmC;QAChD,WAAW,EAAE;YACX,mCAAmC;YACnC,8CAA8C;YAC9C,uCAAuC;YACvC,kCAAkC;SACnC;KACF;IACD,MAAM,EAAE;QACN,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EAAE,gDAAgD;QAC7D,WAAW,EAAE;YACX,6CAA6C;YAC7C,mCAAmC;YACnC,0CAA0C;YAC1C,6CAA6C;SAC9C;KACF;IACD,MAAM,EAAE;QACN,KAAK,EAAE,8BAA8B;QACrC,WAAW,EAAE,4CAA4C;QACzD,WAAW,EAAE;YACX,4CAA4C;YAC5C,mCAAmC;YACnC,uCAAuC;SACxC;KACF;IACD,OAAO,EAAE;QACP,KAAK,EAAE,8BAA8B;QACrC,WAAW,EAAE,4CAA4C;QACzD,WAAW,EAAE;YACX,4CAA4C;YAC5C,mCAAmC;YACnC,0BAA0B;SAC3B;KACF;IACD,MAAM,EAAE;QACN,KAAK,EAAE,qBAAqB;QAC5B,WAAW,EAAE,8CAA8C;QAC3D,WAAW,EAAE;YACX,6BAA6B;YAC7B,mDAAmD;YACnD,qDAAqD;SACtD;KACF;IACD,MAAM,EAAE;QACN,KAAK,EAAE,qBAAqB;QAC5B,WAAW,EAAE,4CAA4C;QACzD,WAAW,EAAE;YACX,oCAAoC;YACpC,uCAAuC;YACvC,kDAAkD;SACnD;KACF;IACD,MAAM,EAAE;QACN,KAAK,EAAE,yBAAyB;QAChC,WAAW,EAAE,kBAAkB;QAC/B,WAAW,EAAE;YACX,kDAAkD;YAClD,8BAA8B;YAC9B,oCAAoC;YACpC,0BAA0B;SAC3B;KACF;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,kBAAkB,GAAyC;IAC/D,GAAG,EAAE;QACH,KAAK,EAAE,aAAa;QACpB,WAAW,EAAE,0CAA0C;QACvD,WAAW,EAAE;YACX,8BAA8B;YAC9B,sCAAsC;YACtC,wCAAwC;YACxC,8BAA8B;SAC/B;KACF;IACD,GAAG,EAAE;QACH,KAAK,EAAE,uBAAuB;QAC9B,WAAW,EAAE,oCAAoC;QACjD,WAAW,EAAE;YACX,iDAAiD;YACjD,iDAAiD;YACjD,+CAA+C;YAC/C,4DAA4D;SAC7D;QACD,SAAS,EAAE,gDAAgD;KAC5D;IACD,GAAG,EAAE;QACH,KAAK,EAAE,kBAAkB;QACzB,WAAW,EAAE,oDAAoD;QACjE,WAAW,EAAE;YACX,6DAA6D;YAC7D,wDAAwD;YACxD,yDAAyD;YACzD,iDAAiD;SAClD;KACF;IACD,GAAG,EAAE;QACH,KAAK,EAAE,oBAAoB;QAC3B,WAAW,EAAE,gDAAgD;QAC7D,WAAW,EAAE;YACX,gDAAgD;YAChD,+DAA+D;YAC/D,yCAAyC;YACzC,gDAAgD;SACjD;KACF;IACD,GAAG,EAAE;QACH,KAAK,EAAE,qBAAqB;QAC5B,WAAW,EAAE,mDAAmD;QAChE,WAAW,EAAE;YACX,oCAAoC;YACpC,kDAAkD;YAClD,2CAA2C;YAC3C,kCAAkC;SACnC;QACD,SAAS,EAAE,qDAAqD;KACjE;IACD,GAAG,EAAE;QACH,KAAK,EAAE,cAAc;QACrB,WAAW,EAAE,8CAA8C;QAC3D,WAAW,EAAE;YACX,kCAAkC;YAClC,wCAAwC;YACxC,qDAAqD;YACrD,yCAAyC;SAC1C;KACF;IACD,GAAG,EAAE;QACH,KAAK,EAAE,aAAa;QACpB,WAAW,EAAE,8CAA8C;QAC3D,WAAW,EAAE;YACX,oCAAoC;YACpC,kCAAkC;YAClC,4BAA4B;SAC7B;KACF;IACD,GAAG,EAAE;QACH,KAAK,EAAE,qBAAqB;QAC5B,WAAW,EAAE,4CAA4C;QACzD,WAAW,EAAE;YACX,4CAA4C;YAC5C,kCAAkC;YAClC,wCAAwC;SACzC;KACF;IACD,GAAG,EAAE;QACH,KAAK,EAAE,iBAAiB;QACxB,WAAW,EAAE,uCAAuC;QACpD,WAAW,EAAE;YACX,6CAA6C;YAC7C,4CAA4C;YAC5C,gCAAgC;YAChC,4BAA4B;SAC7B;KACF;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,kBAAkB,GAAyC;IAC/D,iBAAiB,EAAE;QACjB,KAAK,EAAE,8BAA8B;QACrC,WAAW,EAAE,qCAAqC;QAClD,WAAW,EAAE;YACX,oDAAoD;YACpD,2DAA2D;YAC3D,uDAAuD;YACvD,8BAA8B;YAC9B,kGAAkG;SACnG;QACD,SAAS,EAAE,6CAA6C;KACzD;IACD,gBAAgB,EAAE;QAChB,KAAK,EAAE,6BAA6B;QACpC,WAAW,EAAE,gDAAgD;QAC7D,WAAW,EAAE;YACX,yDAAyD;YACzD,gEAAgE;YAChE,qCAAqC;YACrC,2DAA2D;SAC5D;KACF;IACD,OAAO,EAAE;QACP,KAAK,EAAE,oBAAoB;QAC3B,WAAW,EAAE,wCAAwC;QACrD,WAAW,EAAE;YACX,iEAAiE;YACjE,2DAA2D;YAC3D,mCAAmC;YACnC,+BAA+B;SAChC;KACF;IACD,WAAW,EAAE;QACX,KAAK,EAAE,kCAAkC;QACzC,WAAW,EAAE,wDAAwD;QACrE,WAAW,EAAE;YACX,8FAA8F;YAC9F,oDAAoD;YACpD,iDAAiD;YACjD,mEAAmE;SACpE;KACF;IACD,WAAW,EAAE;QACX,KAAK,EAAE,8BAA8B;QACrC,WAAW,EAAE,4CAA4C;QACzD,WAAW,EAAE;YACX,oFAAoF;YACpF,oDAAoD;YACpD,iDAAiD;YACjD,2EAA2E;SAC5E;KACF;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,mBAAmB,GAAyC;IAChE,iBAAiB,EAAE;QACjB,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EAAE,wCAAwC;QACrD,WAAW,EAAE;YACX,8BAA8B;YAC9B,sCAAsC;YACtC,oCAAoC;YACpC,wCAAwC;SACzC;KACF;IACD,WAAW,EAAE;QACX,KAAK,EAAE,gBAAgB;QACvB,WAAW,EAAE,kCAAkC;QAC/C,WAAW,EAAE;YACX,4CAA4C;YAC5C,sCAAsC;YACtC,uCAAuC;YACvC,2CAA2C;SAC5C;KACF;IACD,kBAAkB,EAAE;QAClB,KAAK,EAAE,sBAAsB;QAC7B,WAAW,EAAE,8CAA8C;QAC3D,WAAW,EAAE;YACX,2BAA2B;YAC3B,kDAAkD;YAClD,mDAAmD;YACnD,sCAAsC;SACvC;QACD,SAAS,EAAE,uDAAuD;KACnE;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,mBAAmB,CACjC,QAAuB,EACvB,SAAiB,EACjB,YAAoB,EACpB,OAKC;IAED,MAAM,QAAQ,GAAG,gBAAgB,CAAC,QAAQ,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;IAEnE,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,qCAAqC;QACrC,OAAO,IAAI,QAAQ,KAAK,SAAS,YAAY,YAAY,EAAE,CAAC;IAC9D,CAAC;IAED,+BAA+B;IAC/B,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,yBAAyB;IACzB,MAAM,IAAI,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;IACpC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,QAAQ,CAAC,KAAK,IAAI,CAAC,CAAC;IAE1C,oBAAoB;IACpB,KAAK,CAAC,IAAI,CAAC,cAAc,SAAS,EAAE,CAAC,CAAC;IAEtC,wBAAwB;IACxB,IAAI,OAAO,EAAE,QAAQ,EAAE,CAAC;QACtB,KAAK,CAAC,IAAI,CAAC,SAAS,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED,cAAc;IACd,KAAK,CAAC,IAAI,CAAC,KAAK,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;IAExC,+CAA+C;IAC/C,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;QAC9E,KAAK,CAAC,IAAI,CAAC,UAAU,YAAY,EAAE,CAAC,CAAC;IACvC,CAAC;IAED,iCAAiC;IACjC,IAAI,OAAO,EAAE,OAAO,EAAE,CAAC;QACrB,KAAK,CAAC,IAAI,CAAC,YAAY,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,cAAc;IACd,IAAI,QAAQ,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpC,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC/B,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,GAAG,EAAE,EAAE;YAC/C,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,KAAK,UAAU,EAAE,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;IACL,CAAC;IAED,kBAAkB;IAClB,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC,oBAAoB,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CACvB,QAAuB,EACvB,YAAoB,EACpB,OAGC;IAED,MAAM,UAAU,GAAG,YAAY,CAAC,WAAW,EAAE,CAAC;IAE9C,kBAAkB;IAClB,IAAI,QAAQ,KAAK,aAAa,CAAC,cAAc,EAAE,CAAC;QAC9C,iCAAiC;QACjC,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,EAAE,CAAC;YACnE,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;gBACvC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBAChC,OAAO,QAAQ,CAAC;YAClB,CAAC;QACH,CAAC;QAED,mBAAmB;QACnB,IAAI,UAAU,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;YAC5E,OAAO,mBAAmB,CAAC,MAAM,CAAC;QACpC,CAAC;QACD,IAAI,UAAU,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;YAC9E,OAAO,mBAAmB,CAAC,MAAM,CAAC;QACpC,CAAC;QACD,IAAI,UAAU,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;YAC1C,OAAO,mBAAmB,CAAC,MAAM,CAAC;QACpC,CAAC;QACD,IAAI,UAAU,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;YAC1C,OAAO,mBAAmB,CAAC,MAAM,CAAC;QACpC,CAAC;IACH,CAAC;IAED,aAAa;IACb,IAAI,QAAQ,KAAK,aAAa,CAAC,SAAS;QACpC,QAAQ,KAAK,aAAa,CAAC,cAAc;QACzC,QAAQ,KAAK,aAAa,CAAC,UAAU,EAAE,CAAC;QAC1C,IAAI,OAAO,EAAE,UAAU,IAAI,kBAAkB,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;YAClE,OAAO,kBAAkB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAED,aAAa;IACb,IAAI,QAAQ,KAAK,aAAa,CAAC,cAAc,EAAE,CAAC;QAC9C,IAAI,UAAU,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YACxE,OAAO,kBAAkB,CAAC,iBAAiB,CAAC;QAC9C,CAAC;QACD,IAAI,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YACnC,OAAO,kBAAkB,CAAC,OAAO,CAAC;QACpC,CAAC;QACD,IAAI,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;YACxE,OAAO,kBAAkB,CAAC,gBAAgB,CAAC;QAC7C,CAAC;IACH,CAAC;IAED,cAAc;IACd,IAAI,QAAQ,KAAK,aAAa,CAAC,YAAY,EAAE,CAAC;QAC5C,IAAI,UAAU,CAAC,QAAQ,CAAC,mBAAmB,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YACjF,OAAO,mBAAmB,CAAC,iBAAiB,CAAC;QAC/C,CAAC;QACD,IAAI,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YACtE,OAAO,mBAAmB,CAAC,kBAAkB,CAAC;QAChD,CAAC;QACD,IAAI,UAAU,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1E,OAAO,mBAAmB,CAAC,WAAW,CAAC;QACzC,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,SAAS,YAAY,CAAC,QAAuB;IAC3C,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,aAAa,CAAC,cAAc;YAC/B,OAAO,IAAI,CAAC;QACd,KAAK,aAAa,CAAC,YAAY;YAC7B,OAAO,GAAG,CAAC;QACb,KAAK,aAAa,CAAC,cAAc;YAC/B,OAAO,IAAI,CAAC;QACd,KAAK,aAAa,CAAC,SAAS,CAAC;QAC7B,KAAK,aAAa,CAAC,cAAc;YAC/B,OAAO,IAAI,CAAC;QACd,KAAK,aAAa,CAAC,UAAU;YAC3B,OAAO,IAAI,CAAC;QACd,KAAK,aAAa,CAAC,OAAO;YACxB,OAAO,IAAI,CAAC;QACd,KAAK,aAAa,CAAC,aAAa;YAC9B,OAAO,IAAI,CAAC;QACd,KAAK,aAAa,CAAC,UAAU;YAC3B,OAAO,GAAG,CAAC;QACb,KAAK,aAAa,CAAC,OAAO;YACxB,OAAO,GAAG,CAAC;QACb;YACE,OAAO,GAAG,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CACjC,QAAuB,EACvB,SAAiB,EACjB,KAAc,EACd,OAGC;IAED,iCAAiC;IACjC,IAAI,YAAoB,CAAC;IACzB,IAAI,SAA6B,CAAC;IAClC,IAAI,UAA8B,CAAC;IAEnC,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC;QAC7B,uCAAuC;QACvC,MAAM,GAAG,GAAG,KAAY,CAAC;QACzB,SAAS,GAAG,GAAG,CAAC,IAAI,CAAC;QACrB,UAAU,GAAG,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,MAAM,CAAC;IAC5C,CAAC;SAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACvD,MAAM,GAAG,GAAG,KAAY,CAAC;QACzB,YAAY,GAAG,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,KAAK,EAAE,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC1E,SAAS,GAAG,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC;QACxC,UAAU,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC;IACjE,CAAC;SAAM,CAAC;QACN,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAED,OAAO,mBAAmB,CAAC,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE;QAC5D,GAAG,OAAO;QACV,SAAS;QACT,UAAU;KACX,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,YAAY,EAAE,CAAC,QAAgB,EAAE,EAAE,CACjC,mBAAmB,CACjB,aAAa,CAAC,cAAc,EAC5B,WAAW,EACX,QAAQ,EACR,EAAE,QAAQ,EAAE,CACb;IAEH,gBAAgB,EAAE,CAAC,QAAgB,EAAE,EAAE,CACrC,mBAAmB,CACjB,aAAa,CAAC,cAAc,EAC5B,aAAa,EACb,QAAQ,EACR,EAAE,QAAQ,EAAE,CACb;IAEH,aAAa,EAAE,GAAG,EAAE,CAClB,mBAAmB,CACjB,aAAa,CAAC,cAAc,EAC5B,aAAa,EACb,iBAAiB,EACjB,EAAE,UAAU,EAAE,GAAG,EAAE,CACpB;IAEH,iBAAiB,EAAE,GAAG,EAAE,CACtB,mBAAmB,CACjB,aAAa,CAAC,UAAU,EACxB,aAAa,EACb,qBAAqB,EACrB,EAAE,UAAU,EAAE,GAAG,EAAE,CACpB;IAEH,mBAAmB,EAAE,CAAC,UAAkB,EAAE,EAAE,CAC1C,mBAAmB,CACjB,aAAa,CAAC,cAAc,EAC5B,cAAc,UAAU,EAAE,EAC1B,mBAAmB,EACnB,EAAE,OAAO,EAAE,eAAe,UAAU,qBAAqB,EAAE,CAC5D;IAEH,eAAe,EAAE,CAAC,OAAe,EAAE,EAAE,CACnC,mBAAmB,CACjB,aAAa,CAAC,YAAY,EAC1B,iBAAiB,EACjB,mBAAmB,EACnB,EAAE,OAAO,EAAE,YAAY,OAAO,oBAAoB,EAAE,CACrD;CACJ,CAAC"}
|
|
@@ -18,6 +18,10 @@ export interface ValidationChecks {
|
|
|
18
18
|
export declare class InitValidator {
|
|
19
19
|
private projectRoot;
|
|
20
20
|
constructor(projectRoot: string);
|
|
21
|
+
/** Helper to resolve path relative to project root */
|
|
22
|
+
private resolvePath;
|
|
23
|
+
/** Helper to check if path exists */
|
|
24
|
+
private pathExists;
|
|
21
25
|
/**
|
|
22
26
|
* Run all validation checks
|
|
23
27
|
*/
|
|
@@ -9,6 +9,14 @@ export class InitValidator {
|
|
|
9
9
|
constructor(projectRoot) {
|
|
10
10
|
this.projectRoot = projectRoot;
|
|
11
11
|
}
|
|
12
|
+
/** Helper to resolve path relative to project root */
|
|
13
|
+
resolvePath(...segments) {
|
|
14
|
+
return path.join(this.projectRoot, ...segments);
|
|
15
|
+
}
|
|
16
|
+
/** Helper to check if path exists */
|
|
17
|
+
pathExists(...segments) {
|
|
18
|
+
return fs.existsSync(this.resolvePath(...segments));
|
|
19
|
+
}
|
|
12
20
|
/**
|
|
13
21
|
* Run all validation checks
|
|
14
22
|
*/
|
|
@@ -41,8 +49,8 @@ export class InitValidator {
|
|
|
41
49
|
* Check for package.json
|
|
42
50
|
*/
|
|
43
51
|
checkPackageJson(result) {
|
|
44
|
-
const packageJsonPath =
|
|
45
|
-
if (!
|
|
52
|
+
const packageJsonPath = this.resolvePath('package.json');
|
|
53
|
+
if (!this.pathExists('package.json')) {
|
|
46
54
|
result.warnings.push('No package.json found - may not be a Node.js project');
|
|
47
55
|
result.suggestions.push('Run: npm init (if this is a Node.js project)');
|
|
48
56
|
}
|
|
@@ -86,8 +94,7 @@ export class InitValidator {
|
|
|
86
94
|
* Check for git repository
|
|
87
95
|
*/
|
|
88
96
|
checkGitRepo(result) {
|
|
89
|
-
|
|
90
|
-
if (!fs.existsSync(gitDir)) {
|
|
97
|
+
if (!this.pathExists('.git')) {
|
|
91
98
|
result.warnings.push('Not a git repository');
|
|
92
99
|
result.suggestions.push('Run: git init (for version control)');
|
|
93
100
|
}
|
|
@@ -96,13 +103,11 @@ export class InitValidator {
|
|
|
96
103
|
* Check for existing AX CLI configuration
|
|
97
104
|
*/
|
|
98
105
|
checkExistingConfig(result) {
|
|
99
|
-
|
|
100
|
-
const customMdPath = path.join(axCliDir, 'CUSTOM.md');
|
|
101
|
-
const indexPath = path.join(axCliDir, 'index.json');
|
|
102
|
-
if (fs.existsSync(customMdPath)) {
|
|
106
|
+
if (this.pathExists('.ax-cli', 'CUSTOM.md')) {
|
|
103
107
|
result.warnings.push('Existing CUSTOM.md found - will be overwritten unless --force is used');
|
|
104
108
|
}
|
|
105
|
-
if (
|
|
109
|
+
if (this.pathExists('.ax-cli', 'index.json')) {
|
|
110
|
+
const indexPath = this.resolvePath('.ax-cli', 'index.json');
|
|
106
111
|
const parseResult = parseJsonFile(indexPath);
|
|
107
112
|
if (parseResult.success) {
|
|
108
113
|
const indexData = parseResult.data;
|
|
@@ -125,8 +130,8 @@ export class InitValidator {
|
|
|
125
130
|
*/
|
|
126
131
|
checkProjectStructure(result) {
|
|
127
132
|
const commonDirs = ['src', 'lib', 'dist', 'build', 'test', 'tests', '__tests__'];
|
|
128
|
-
const
|
|
129
|
-
if (
|
|
133
|
+
const hasStandardDir = commonDirs.some(dir => this.pathExists(dir));
|
|
134
|
+
if (!hasStandardDir) {
|
|
130
135
|
result.warnings.push('No standard project directories found (src/, lib/, etc.)');
|
|
131
136
|
result.suggestions.push('Project may be empty or have non-standard structure');
|
|
132
137
|
}
|
|
@@ -219,8 +224,7 @@ export class InitValidator {
|
|
|
219
224
|
* Check if force flag is needed
|
|
220
225
|
*/
|
|
221
226
|
needsForceFlag() {
|
|
222
|
-
|
|
223
|
-
return fs.existsSync(customMdPath);
|
|
227
|
+
return this.pathExists('.ax-cli', 'CUSTOM.md');
|
|
224
228
|
}
|
|
225
229
|
/**
|
|
226
230
|
* Get validation summary string
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init-validator.js","sourceRoot":"","sources":["../../src/utils/init-validator.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAiB3D,MAAM,OAAO,aAAa;IAChB,WAAW,CAAS;IAE5B,YAAY,WAAmB;QAC7B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,WAAyB;QAChC,MAAM,MAAM,GAAqB;YAC/B,KAAK,EAAE,IAAI;YACX,QAAQ,EAAE,EAAE;YACZ,MAAM,EAAE,EAAE;YACV,WAAW,EAAE,EAAE;SAChB,CAAC;QAEF,yBAAyB;QACzB,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAE9B,2BAA2B;QAC3B,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAE1B,mCAAmC;QACnC,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;QAEjC,0BAA0B;QAC1B,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;QAEnC,qCAAqC;QACrC,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAE/B,oCAAoC;QACpC,IAAI,WAAW,EAAE,CAAC;YAChB,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAChD,CAAC;QAED,uBAAuB;QACvB,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC;QAE1C,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACK,gBAAgB,CAAC,MAAwB;QAC/C,MAAM,eAAe,GAAG,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"init-validator.js","sourceRoot":"","sources":["../../src/utils/init-validator.ts"],"names":[],"mappings":"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"}
|
|
@@ -49,34 +49,28 @@ export class LLMOptimizedInstructionGenerator {
|
|
|
49
49
|
**Type:** ${projectInfo.projectType} | **Lang:** ${projectInfo.primaryLanguage}${version ? ` | **Ver:** ${version}` : ''}${stack}`;
|
|
50
50
|
}
|
|
51
51
|
generateCriticalRules(projectInfo) {
|
|
52
|
+
const { conventions, primaryLanguage, scripts } = projectInfo;
|
|
52
53
|
const rules = [];
|
|
53
|
-
//
|
|
54
|
-
if (
|
|
54
|
+
// Build rules based on project configuration
|
|
55
|
+
if (conventions.importExtension === '.js') {
|
|
55
56
|
rules.push('**ESM Imports:** Always use `.js` extension: `import { x } from \'./y.js\'`');
|
|
56
57
|
}
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
rules.push(`**Validation:** Use ${projectInfo.conventions.validation} for all external inputs`);
|
|
58
|
+
if (conventions.validation) {
|
|
59
|
+
rules.push(`**Validation:** Use ${conventions.validation} for all external inputs`);
|
|
60
60
|
}
|
|
61
|
-
|
|
62
|
-
if (projectInfo.primaryLanguage === 'TypeScript') {
|
|
61
|
+
if (primaryLanguage === 'TypeScript') {
|
|
63
62
|
rules.push('**Types:** Explicit return types required on all functions');
|
|
64
63
|
}
|
|
65
|
-
|
|
66
|
-
if (projectInfo.scripts.test) {
|
|
64
|
+
if (scripts.test) {
|
|
67
65
|
rules.push('**Testing:** 80%+ coverage, test error paths');
|
|
68
66
|
}
|
|
69
|
-
|
|
70
|
-
if (projectInfo.conventions.moduleSystem === 'esm') {
|
|
67
|
+
if (conventions.moduleSystem === 'esm') {
|
|
71
68
|
rules.push('**Modules:** Use `import/export` (not `require/module.exports`)');
|
|
72
69
|
}
|
|
73
|
-
// Rule 6: File Organization
|
|
74
70
|
rules.push('**File Organization:** Follow standardized output paths (see below)');
|
|
75
|
-
// Take only top N rules (increased to accommodate file organization)
|
|
76
71
|
const topRules = rules.slice(0, Math.max(this.config.criticalRulesCount, 6));
|
|
77
|
-
if (topRules.length === 0)
|
|
72
|
+
if (topRules.length === 0)
|
|
78
73
|
return '';
|
|
79
|
-
}
|
|
80
74
|
return `## 🎯 Critical Rules\n\n${topRules.map((rule, i) => `${i + 1}. ${rule}`).join('\n')}`;
|
|
81
75
|
}
|
|
82
76
|
generateProjectOverview(projectInfo) {
|
|
@@ -119,157 +113,124 @@ export class LLMOptimizedInstructionGenerator {
|
|
|
119
113
|
return parts.join('\n\n');
|
|
120
114
|
}
|
|
121
115
|
generateCodePatterns(projectInfo) {
|
|
122
|
-
|
|
116
|
+
const { primaryLanguage, conventions, projectType } = projectInfo;
|
|
117
|
+
const sections = ['## 🔧 Code Patterns'];
|
|
123
118
|
// TypeScript patterns with DO/DON'T
|
|
124
|
-
if (
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
if (
|
|
158
|
-
|
|
159
|
-
content += 'Commands should:\n';
|
|
160
|
-
content += '- Accept options via flags (`-f, --flag <value>`)\n';
|
|
161
|
-
content += '- Validate input before execution\n';
|
|
162
|
-
content += '- Provide clear error messages\n';
|
|
163
|
-
content += '- Return exit codes (0 = success, 1+ = error)';
|
|
164
|
-
}
|
|
165
|
-
else if (projectInfo.projectType === 'api') {
|
|
166
|
-
content += '\n\n### API Endpoints\n';
|
|
167
|
-
content += 'Endpoints should:\n';
|
|
168
|
-
content += '- Validate request body/params\n';
|
|
169
|
-
content += '- Use proper HTTP status codes\n';
|
|
170
|
-
content += '- Handle errors with consistent format\n';
|
|
171
|
-
content += '- Document with OpenAPI/Swagger';
|
|
172
|
-
}
|
|
173
|
-
else if (projectInfo.projectType === 'library') {
|
|
174
|
-
content += '\n\n### Library API\n';
|
|
175
|
-
content += 'Public API should:\n';
|
|
176
|
-
content += '- Have clear, typed interfaces\n';
|
|
177
|
-
content += '- Validate all inputs\n';
|
|
178
|
-
content += '- Avoid breaking changes\n';
|
|
179
|
-
content += '- Document all exports';
|
|
119
|
+
if (primaryLanguage === 'TypeScript' && this.config.includeDODONT) {
|
|
120
|
+
const doCode = [
|
|
121
|
+
'// Explicit types',
|
|
122
|
+
'function process(x: string): Promise<Result> { }',
|
|
123
|
+
...(conventions.importExtension === '.js' ? ['\n// ESM imports with .js extension', "import { foo } from './bar.js';"] : []),
|
|
124
|
+
];
|
|
125
|
+
const dontCode = [
|
|
126
|
+
'// No any types',
|
|
127
|
+
'function process(x: any) { } // ❌',
|
|
128
|
+
...(conventions.importExtension === '.js' ? ['\n// Missing .js extension', "import { foo } from './bar'; // ❌"] : []),
|
|
129
|
+
];
|
|
130
|
+
sections.push('### TypeScript\n', '✅ **DO:**', '```typescript', doCode.join('\n'), '```\n', '❌ **DON\'T:**', '```typescript', dontCode.join('\n'), '```');
|
|
131
|
+
}
|
|
132
|
+
// Validation patterns
|
|
133
|
+
if (conventions.validation && this.config.includeDODONT) {
|
|
134
|
+
sections.push(`### Validation (${conventions.validation})\n`, '✅ **DO:**', '```typescript', 'const result = schema.safeParse(data);', 'if (!result.success) {', ' return { success: false, error: result.error };', '}', '```');
|
|
135
|
+
}
|
|
136
|
+
// Project-specific patterns
|
|
137
|
+
const typePatterns = {
|
|
138
|
+
cli: {
|
|
139
|
+
title: '### CLI Commands\nCommands should:',
|
|
140
|
+
items: ['Accept options via flags (`-f, --flag <value>`)', 'Validate input before execution', 'Provide clear error messages', 'Return exit codes (0 = success, 1+ = error)'],
|
|
141
|
+
},
|
|
142
|
+
api: {
|
|
143
|
+
title: '### API Endpoints\nEndpoints should:',
|
|
144
|
+
items: ['Validate request body/params', 'Use proper HTTP status codes', 'Handle errors with consistent format', 'Document with OpenAPI/Swagger'],
|
|
145
|
+
},
|
|
146
|
+
library: {
|
|
147
|
+
title: '### Library API\nPublic API should:',
|
|
148
|
+
items: ['Have clear, typed interfaces', 'Validate all inputs', 'Avoid breaking changes', 'Document all exports'],
|
|
149
|
+
},
|
|
150
|
+
};
|
|
151
|
+
const pattern = typePatterns[projectType];
|
|
152
|
+
if (pattern) {
|
|
153
|
+
sections.push(`${pattern.title}\n${pattern.items.map(i => `- ${i}`).join('\n')}`);
|
|
180
154
|
}
|
|
181
|
-
return
|
|
155
|
+
return sections.join('\n');
|
|
182
156
|
}
|
|
183
157
|
generateWorkflow(projectInfo) {
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
if (projectInfo.scripts.build) {
|
|
205
|
-
afterSteps.push(`Build: \`${projectInfo.scripts.build}\``);
|
|
206
|
-
}
|
|
158
|
+
const { scripts, packageManager } = projectInfo;
|
|
159
|
+
const sections = [
|
|
160
|
+
'## 🔄 Workflow',
|
|
161
|
+
'**Before:**',
|
|
162
|
+
'- Read files to understand implementation',
|
|
163
|
+
'- Search for related patterns',
|
|
164
|
+
'- Review tests for expected behavior',
|
|
165
|
+
'',
|
|
166
|
+
'**Changes:**',
|
|
167
|
+
'- Edit existing files (never recreate)',
|
|
168
|
+
'- Keep changes focused and atomic',
|
|
169
|
+
'- Preserve code style',
|
|
170
|
+
'- Update tests when changing functionality',
|
|
171
|
+
];
|
|
172
|
+
// After steps
|
|
173
|
+
const afterSteps = [
|
|
174
|
+
scripts.lint && `Lint: \`${scripts.lint}\``,
|
|
175
|
+
scripts.test && `Test: \`${scripts.test}\``,
|
|
176
|
+
scripts.build && `Build: \`${scripts.build}\``,
|
|
177
|
+
].filter(Boolean);
|
|
207
178
|
if (afterSteps.length > 0) {
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
const
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
179
|
+
sections.push('', '**After:**', ...afterSteps.map((step, i) => `${i + 1}. ${step}`));
|
|
180
|
+
}
|
|
181
|
+
// Quick commands
|
|
182
|
+
if (packageManager && Object.keys(scripts).length > 0) {
|
|
183
|
+
const run = packageManager === 'npm' ? 'npm run' : packageManager;
|
|
184
|
+
const test = packageManager === 'npm' ? 'npm' : packageManager;
|
|
185
|
+
const cmds = [
|
|
186
|
+
scripts.dev && `${run} dev # Development`,
|
|
187
|
+
scripts.test && `${test} test # Run tests`,
|
|
188
|
+
scripts.build && `${run} build # Production build`,
|
|
189
|
+
].filter((cmd) => Boolean(cmd));
|
|
190
|
+
if (cmds.length > 0) {
|
|
191
|
+
sections.push('', '**Quick Commands:**', '```bash', ...cmds, '```');
|
|
219
192
|
}
|
|
220
|
-
if (projectInfo.scripts.test) {
|
|
221
|
-
workflow += `${test} test # Run tests\n`;
|
|
222
|
-
}
|
|
223
|
-
if (projectInfo.scripts.build) {
|
|
224
|
-
workflow += `${run} build # Production build\n`;
|
|
225
|
-
}
|
|
226
|
-
workflow += '```';
|
|
227
193
|
}
|
|
228
|
-
return
|
|
194
|
+
return sections.join('\n');
|
|
229
195
|
}
|
|
230
196
|
generateTroubleshooting(projectInfo) {
|
|
231
|
-
|
|
197
|
+
const { conventions, primaryLanguage } = projectInfo;
|
|
232
198
|
const issues = [];
|
|
233
|
-
//
|
|
234
|
-
if (
|
|
199
|
+
// Conditionally add issues based on project config
|
|
200
|
+
if (conventions.importExtension === '.js') {
|
|
235
201
|
issues.push({
|
|
236
202
|
problem: '"Module not found" errors',
|
|
237
203
|
solution: 'Add `.js` extension to imports (ESM requirement)',
|
|
238
|
-
code:
|
|
204
|
+
code: "// ✅ Correct\nimport { x } from './y.js';\n\n// ❌ Wrong\nimport { x } from './y'; // Missing .js",
|
|
239
205
|
});
|
|
240
206
|
}
|
|
241
|
-
|
|
242
|
-
if (projectInfo.conventions.validation) {
|
|
207
|
+
if (conventions.validation) {
|
|
243
208
|
issues.push({
|
|
244
|
-
problem: `${
|
|
209
|
+
problem: `${conventions.validation} validation errors`,
|
|
245
210
|
solution: 'Use `.safeParse()` for detailed error messages. Check schema matches data structure.',
|
|
246
211
|
});
|
|
247
212
|
}
|
|
248
|
-
|
|
249
|
-
if (projectInfo.conventions.testFramework) {
|
|
213
|
+
if (conventions.testFramework) {
|
|
250
214
|
issues.push({
|
|
251
215
|
problem: 'Tests fail locally but pass in CI',
|
|
252
|
-
solution:
|
|
216
|
+
solution: 'Check Node version, clear node_modules, check environment-specific code',
|
|
253
217
|
});
|
|
254
218
|
}
|
|
255
|
-
|
|
256
|
-
if (projectInfo.primaryLanguage === 'TypeScript') {
|
|
219
|
+
if (primaryLanguage === 'TypeScript') {
|
|
257
220
|
issues.push({
|
|
258
221
|
problem: 'TypeScript compilation errors',
|
|
259
222
|
solution: 'Check `tsconfig.json` settings, ensure all types are imported, verify `moduleResolution`',
|
|
260
223
|
});
|
|
261
224
|
}
|
|
262
|
-
if (issues.length === 0)
|
|
225
|
+
if (issues.length === 0)
|
|
263
226
|
return '';
|
|
227
|
+
const sections = ['## 🐛 Troubleshooting'];
|
|
228
|
+
for (const { problem, solution, code } of issues) {
|
|
229
|
+
sections.push(`### ${problem}`, `**Solution:** ${solution}`);
|
|
230
|
+
if (code)
|
|
231
|
+
sections.push(`\`\`\`typescript\n${code}\n\`\`\``);
|
|
264
232
|
}
|
|
265
|
-
|
|
266
|
-
content += `\n\n### ${issue.problem}\n`;
|
|
267
|
-
content += `**Solution:** ${issue.solution}`;
|
|
268
|
-
if (issue.code) {
|
|
269
|
-
content += `\n\`\`\`typescript\n${issue.code}\n\`\`\``;
|
|
270
|
-
}
|
|
271
|
-
}
|
|
272
|
-
return content;
|
|
233
|
+
return sections.join('\n\n');
|
|
273
234
|
}
|
|
274
235
|
/**
|
|
275
236
|
* Generate project index JSON
|