@objectql/cli 4.0.5 → 4.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -11,7 +11,6 @@ const commander_1 = require("commander");
11
11
  const lifecycle_1 = require("./register/lifecycle");
12
12
  const scaffold_1 = require("./register/scaffold");
13
13
  const database_1 = require("./register/database");
14
- const ai_1 = require("./register/ai");
15
14
  const tools_1 = require("./register/tools");
16
15
  const i18n_1 = require("./register/i18n");
17
16
  const program = new commander_1.Command();
@@ -23,7 +22,6 @@ program
23
22
  (0, lifecycle_1.registerLifecycleCommands)(program);
24
23
  (0, scaffold_1.registerScaffoldCommands)(program);
25
24
  (0, database_1.registerDatabaseCommands)(program);
26
- (0, ai_1.registerAiCommands)(program);
27
25
  (0, tools_1.registerToolsCommands)(program);
28
26
  (0, i18n_1.registerI18nCommands)(program);
29
27
  program.parse(process.argv);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;AAEH,yCAAoC;AACpC,oDAAiE;AACjE,kDAA+D;AAC/D,kDAA+D;AAC/D,sCAAmD;AACnD,4CAAyD;AACzD,0CAAuD;AAEvD,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,UAAU,CAAC;KAChB,WAAW,CAAC,2DAA2D,CAAC;KACxE,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,8BAA8B;AAC9B,IAAA,qCAAyB,EAAC,OAAO,CAAC,CAAC;AACnC,IAAA,mCAAwB,EAAC,OAAO,CAAC,CAAC;AAClC,IAAA,mCAAwB,EAAC,OAAO,CAAC,CAAC;AAClC,IAAA,uBAAkB,EAAC,OAAO,CAAC,CAAC;AAC5B,IAAA,6BAAqB,EAAC,OAAO,CAAC,CAAC;AAC/B,IAAA,2BAAoB,EAAC,OAAO,CAAC,CAAC;AAE9B,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;AAEH,yCAAoC;AACpC,oDAAiE;AACjE,kDAA+D;AAC/D,kDAA+D;AAC/D,4CAAyD;AACzD,0CAAuD;AAEvD,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,UAAU,CAAC;KAChB,WAAW,CAAC,2DAA2D,CAAC;KACxE,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,8BAA8B;AAC9B,IAAA,qCAAyB,EAAC,OAAO,CAAC,CAAC;AACnC,IAAA,mCAAwB,EAAC,OAAO,CAAC,CAAC;AAClC,IAAA,mCAAwB,EAAC,OAAO,CAAC,CAAC;AAClC,IAAA,6BAAqB,EAAC,OAAO,CAAC,CAAC;AAC/B,IAAA,2BAAoB,EAAC,OAAO,CAAC,CAAC;AAE9B,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@objectql/cli",
3
- "version": "4.0.5",
3
+ "version": "4.1.0",
4
4
  "description": "Command-line interface for ObjectQL - Code generation, migrations, REPL, and AI-powered development tools",
5
5
  "keywords": [
6
6
  "objectql",
@@ -32,15 +32,13 @@
32
32
  "js-yaml": "^4.1.0",
33
33
  "prettier": "^3.0.0",
34
34
  "ts-node": "^10.9.1",
35
- "openai": "^4.28.0",
36
35
  "dotenv": "^16.4.5",
37
- "@objectql/types": "4.0.5",
38
- "@objectql/core": "4.0.5",
39
- "@objectql/plugin-validator": "4.0.5",
40
- "@objectql/plugin-ai-agent": "4.0.5",
41
- "@objectql/protocol-rest": "4.0.6",
42
- "@objectql/driver-sql": "4.0.5",
43
- "@objectql/platform-node": "4.0.5"
36
+ "@objectql/types": "4.1.0",
37
+ "@objectql/core": "4.1.0",
38
+ "@objectql/plugin-validator": "4.1.0",
39
+ "@objectql/protocol-rest": "4.1.0",
40
+ "@objectql/driver-sql": "4.1.0",
41
+ "@objectql/platform-node": "4.1.0"
44
42
  },
45
43
  "devDependencies": {
46
44
  "typescript": "^5.0.0",
@@ -1,5 +1,13 @@
1
1
  # @example/hello-world
2
2
 
3
+ ## 4.0.6
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies
8
+ - @objectql/core@4.0.6
9
+ - @objectql/driver-sql@4.0.6
10
+
3
11
  ## 4.0.5
4
12
 
5
13
  ### Patch Changes
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@objectql/example-hello-world",
3
- "version": "4.0.5",
3
+ "version": "4.1.0",
4
4
  "private": true,
5
5
  "repository": {
6
6
  "type": "git",
@@ -1,5 +1,15 @@
1
1
  # @objectql/starter-basic
2
2
 
3
+ ## 4.0.6
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies
8
+ - @objectql/core@4.0.6
9
+ - @objectql/platform-node@4.0.6
10
+ - @objectql/driver-sql@4.0.6
11
+ - @objectql/types@4.0.6
12
+
3
13
  ## 4.0.5
4
14
 
5
15
  ### Patch Changes
@@ -0,0 +1,55 @@
1
+ // Mock for @objectstack/core
2
+ // Used to bypass ESM/import.meta issues in Jest
3
+
4
+ const mockLogger = {
5
+ info: jest.fn(),
6
+ error: jest.fn(),
7
+ warn: jest.fn(),
8
+ debug: jest.fn(),
9
+ log: jest.fn(),
10
+ child: () => mockLogger
11
+ };
12
+
13
+ function DummyKernel(...args) {
14
+ const self = this || {};
15
+ self.args = args;
16
+ self.logger = mockLogger;
17
+ self.kernel = {};
18
+ self.bootstrap = jest.fn().mockResolvedValue(undefined);
19
+ self.start = jest.fn().mockResolvedValue(undefined);
20
+ self.use = jest.fn();
21
+ self.getEntry = jest.fn().mockReturnValue({});
22
+
23
+ return self;
24
+ }
25
+
26
+ // Add prototype methods for class inheritance compatibility
27
+ DummyKernel.prototype.bootstrap = jest.fn().mockResolvedValue(undefined);
28
+ DummyKernel.prototype.start = jest.fn().mockResolvedValue(undefined);
29
+ DummyKernel.prototype.use = jest.fn();
30
+
31
+ const proxy = new Proxy({}, {
32
+ get: function(target, prop) {
33
+ if (prop === '__esModule') {
34
+ return true;
35
+ }
36
+
37
+ // Explicit exports
38
+ if (prop === 'createLogger') {
39
+ return () => mockLogger;
40
+ }
41
+
42
+ if (prop === 'ObjectKernel' || prop === 'ObjectStack') {
43
+ return DummyKernel;
44
+ }
45
+
46
+ // For other exports, return a generic mock or DummyKernel if it looks like a class
47
+ if (typeof prop === 'string' && /^[A-Z]/.test(prop)) {
48
+ return DummyKernel;
49
+ }
50
+
51
+ return jest.fn();
52
+ }
53
+ });
54
+
55
+ module.exports = proxy;
@@ -0,0 +1,55 @@
1
+ // Mock for @objectstack/core
2
+ // Used to bypass ESM/import.meta issues in Jest
3
+
4
+ const mockLogger = {
5
+ info: jest.fn(),
6
+ error: jest.fn(),
7
+ warn: jest.fn(),
8
+ debug: jest.fn(),
9
+ log: jest.fn(),
10
+ child: () => mockLogger
11
+ };
12
+
13
+ function DummyKernel(...args) {
14
+ const self = this || {};
15
+ self.args = args;
16
+ self.logger = mockLogger;
17
+ self.kernel = {};
18
+ self.bootstrap = jest.fn().mockResolvedValue(undefined);
19
+ self.start = jest.fn().mockResolvedValue(undefined);
20
+ self.use = jest.fn();
21
+ self.getEntry = jest.fn().mockReturnValue({});
22
+
23
+ return self;
24
+ }
25
+
26
+ // Add prototype methods for class inheritance compatibility
27
+ DummyKernel.prototype.bootstrap = jest.fn().mockResolvedValue(undefined);
28
+ DummyKernel.prototype.start = jest.fn().mockResolvedValue(undefined);
29
+ DummyKernel.prototype.use = jest.fn();
30
+
31
+ const proxy = new Proxy({}, {
32
+ get: function(target, prop) {
33
+ if (prop === '__esModule') {
34
+ return true;
35
+ }
36
+
37
+ // Explicit exports
38
+ if (prop === 'createLogger') {
39
+ return () => mockLogger;
40
+ }
41
+
42
+ if (prop === 'ObjectKernel' || prop === 'ObjectStack') {
43
+ return DummyKernel;
44
+ }
45
+
46
+ // For other exports, return a generic mock or DummyKernel if it looks like a class
47
+ if (typeof prop === 'string' && /^[A-Z]/.test(prop)) {
48
+ return DummyKernel;
49
+ }
50
+
51
+ return jest.fn();
52
+ }
53
+ });
54
+
55
+ module.exports = proxy;
@@ -25,6 +25,7 @@ module.exports = {
25
25
  transformIgnorePatterns: [
26
26
  "/node_modules/(?!(@objectstack|.pnpm))"
27
27
  ],
28
+ setupFilesAfterEnv: ['<rootDir>/jest.setup.js'],
28
29
  collectCoverageFrom: [
29
30
  'src/**/*.ts',
30
31
  '!src/**/*.d.ts',
@@ -0,0 +1,3 @@
1
+ // Mock the core package to avoid ESM/import.meta issues
2
+ jest.mock('@objectstack/core');
3
+ jest.mock('@objectstack/runtime');
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@objectql/example-project-tracker",
3
- "version": "4.0.5",
3
+ "version": "4.1.0",
4
4
  "description": "ObjectQL Basic Example Project",
5
5
  "private": true,
6
6
  "keywords": [
@@ -1,45 +0,0 @@
1
- /**
2
- * ObjectQL
3
- * Copyright (c) 2026-present ObjectStack Inc.
4
- *
5
- * This source code is licensed under the MIT license found in the
6
- * LICENSE file in the root directory of this source tree.
7
- */
8
- import { ObjectQLAgent } from '@objectql/plugin-ai-agent';
9
- /**
10
- * Create an ObjectQL AI agent instance
11
- */
12
- export declare function createAgent(apiKey: string): ObjectQLAgent;
13
- interface GenerateOptions {
14
- description: string;
15
- output?: string;
16
- type?: 'basic' | 'complete' | 'custom';
17
- }
18
- interface ValidateOptions {
19
- path: string;
20
- fix?: boolean;
21
- verbose?: boolean;
22
- }
23
- interface ChatOptions {
24
- initialPrompt?: string;
25
- }
26
- interface ConversationalOptions {
27
- output?: string;
28
- }
29
- /**
30
- * Conversational generation with step-by-step refinement
31
- */
32
- export declare function aiConversational(options: ConversationalOptions): Promise<void>;
33
- /**
34
- * Generate application metadata using AI
35
- */
36
- export declare function aiGenerate(options: GenerateOptions): Promise<void>;
37
- /**
38
- * Validate metadata files using AI
39
- */
40
- export declare function aiValidate(options: ValidateOptions): Promise<void>;
41
- /**
42
- * Interactive AI chat for metadata assistance
43
- */
44
- export declare function aiChat(options: ChatOptions): Promise<void>;
45
- export {};
@@ -1,467 +0,0 @@
1
- "use strict";
2
- /**
3
- * ObjectQL
4
- * Copyright (c) 2026-present ObjectStack Inc.
5
- *
6
- * This source code is licensed under the MIT license found in the
7
- * LICENSE file in the root directory of this source tree.
8
- */
9
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- var desc = Object.getOwnPropertyDescriptor(m, k);
12
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
13
- desc = { enumerable: true, get: function() { return m[k]; } };
14
- }
15
- Object.defineProperty(o, k2, desc);
16
- }) : (function(o, m, k, k2) {
17
- if (k2 === undefined) k2 = k;
18
- o[k2] = m[k];
19
- }));
20
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
21
- Object.defineProperty(o, "default", { enumerable: true, value: v });
22
- }) : function(o, v) {
23
- o["default"] = v;
24
- });
25
- var __importStar = (this && this.__importStar) || (function () {
26
- var ownKeys = function(o) {
27
- ownKeys = Object.getOwnPropertyNames || function (o) {
28
- var ar = [];
29
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
30
- return ar;
31
- };
32
- return ownKeys(o);
33
- };
34
- return function (mod) {
35
- if (mod && mod.__esModule) return mod;
36
- var result = {};
37
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
38
- __setModuleDefault(result, mod);
39
- return result;
40
- };
41
- })();
42
- var __importDefault = (this && this.__importDefault) || function (mod) {
43
- return (mod && mod.__esModule) ? mod : { "default": mod };
44
- };
45
- Object.defineProperty(exports, "__esModule", { value: true });
46
- exports.createAgent = createAgent;
47
- exports.aiConversational = aiConversational;
48
- exports.aiGenerate = aiGenerate;
49
- exports.aiValidate = aiValidate;
50
- exports.aiChat = aiChat;
51
- const fs = __importStar(require("fs"));
52
- const path = __importStar(require("path"));
53
- const yaml = __importStar(require("js-yaml"));
54
- const readline = __importStar(require("readline"));
55
- const chalk_1 = __importDefault(require("chalk"));
56
- const openai_1 = __importDefault(require("openai"));
57
- const plugin_ai_agent_1 = require("@objectql/plugin-ai-agent");
58
- const plugin_validator_1 = require("@objectql/plugin-validator");
59
- const fast_glob_1 = require("fast-glob");
60
- /**
61
- * Create an ObjectQL AI agent instance
62
- */
63
- function createAgent(apiKey) {
64
- return new plugin_ai_agent_1.ObjectQLAgent({ apiKey });
65
- }
66
- /**
67
- * Conversational generation with step-by-step refinement
68
- */
69
- async function aiConversational(options) {
70
- const apiKey = process.env.OPENAI_API_KEY;
71
- if (!apiKey) {
72
- console.error(chalk_1.default.red('Error: OPENAI_API_KEY environment variable is not set.'));
73
- console.log(chalk_1.default.yellow('\nPlease set your OpenAI API key:'));
74
- console.log(chalk_1.default.cyan(' export OPENAI_API_KEY=your-api-key-here'));
75
- process.exit(1);
76
- }
77
- const outputDir = options.output || './src';
78
- const agent = createAgent(apiKey);
79
- console.log(chalk_1.default.blue('💬 ObjectQL Conversational Generator\n'));
80
- console.log(chalk_1.default.gray('Build your application step by step through conversation.'));
81
- console.log(chalk_1.default.gray('Type "done" to finish and save, "exit" to quit without saving.\n'));
82
- const rl = readline.createInterface({
83
- input: process.stdin,
84
- output: process.stdout,
85
- });
86
- let conversationHistory = [];
87
- let currentApp = null;
88
- let fileCount = 0;
89
- const askQuestion = () => {
90
- const prompt = currentApp
91
- ? chalk_1.default.cyan('\nWhat would you like to change or add? ')
92
- : chalk_1.default.cyan('Describe your application: ');
93
- rl.question(prompt, async (input) => {
94
- var _a;
95
- if (input.toLowerCase() === 'exit') {
96
- console.log(chalk_1.default.blue('\n👋 Goodbye! No files were saved.'));
97
- rl.close();
98
- return;
99
- }
100
- if (input.toLowerCase() === 'done') {
101
- if (!currentApp || !currentApp.files || currentApp.files.length === 0) {
102
- console.log(chalk_1.default.yellow('\n⚠️ No application generated yet. Continue the conversation or type "exit" to quit.'));
103
- askQuestion();
104
- return;
105
- }
106
- // Save files
107
- console.log(chalk_1.default.yellow('\n💾 Saving files...'));
108
- if (!fs.existsSync(outputDir)) {
109
- fs.mkdirSync(outputDir, { recursive: true });
110
- }
111
- for (const file of currentApp.files) {
112
- const filePath = path.join(outputDir, file.filename);
113
- const fileDir = path.dirname(filePath);
114
- if (!fs.existsSync(fileDir)) {
115
- fs.mkdirSync(fileDir, { recursive: true });
116
- }
117
- fs.writeFileSync(filePath, file.content);
118
- console.log(chalk_1.default.green(` ✓ ${file.filename}`));
119
- }
120
- console.log(chalk_1.default.blue(`\n✅ Application saved to: ${outputDir}`));
121
- console.log(chalk_1.default.gray('\nNext steps:'));
122
- console.log(chalk_1.default.cyan(' 1. Review the generated files'));
123
- console.log(chalk_1.default.cyan(' 2. Run: objectql ai validate ' + outputDir));
124
- console.log(chalk_1.default.cyan(' 3. Test with: objectql serve --dir ' + outputDir));
125
- rl.close();
126
- return;
127
- }
128
- if (!input.trim()) {
129
- askQuestion();
130
- return;
131
- }
132
- console.log(chalk_1.default.yellow('\n⏳ Generating...'));
133
- try {
134
- const result = await agent.generateConversational({
135
- message: input,
136
- conversationHistory,
137
- currentApp,
138
- });
139
- if (!result.success) {
140
- console.error(chalk_1.default.red('\n❌ Error:'), ((_a = result.errors) === null || _a === void 0 ? void 0 : _a.join(', ')) || 'Unknown error');
141
- askQuestion();
142
- return;
143
- }
144
- conversationHistory = result.conversationHistory;
145
- currentApp = result;
146
- fileCount = result.files.length;
147
- console.log(chalk_1.default.green(`\n✅ Generated/Updated ${fileCount} file(s):`));
148
- // Group files by type
149
- const filesByType = {};
150
- result.files.forEach((f) => {
151
- if (!filesByType[f.type])
152
- filesByType[f.type] = [];
153
- filesByType[f.type].push(f.filename);
154
- });
155
- Object.entries(filesByType).forEach(([type, files]) => {
156
- console.log(chalk_1.default.cyan(` ${type}:`), files.join(', '));
157
- });
158
- // Show suggestions
159
- if (result.suggestions && result.suggestions.length > 0) {
160
- console.log(chalk_1.default.blue('\n💡 Suggestions:'));
161
- result.suggestions.forEach((s) => console.log(chalk_1.default.gray(` • ${s}`)));
162
- }
163
- console.log(chalk_1.default.gray('\nYou can now:'));
164
- console.log(chalk_1.default.gray(' • Request changes (e.g., "Add email validation to user")'));
165
- console.log(chalk_1.default.gray(' • Add features (e.g., "Add a workflow for approval")'));
166
- console.log(chalk_1.default.gray(' • Type "done" to save files'));
167
- console.log(chalk_1.default.gray(' • Type "exit" to quit without saving'));
168
- }
169
- catch (error) {
170
- console.error(chalk_1.default.red('\n❌ Error:'), error instanceof Error ? error.message : 'Unknown error');
171
- }
172
- askQuestion();
173
- });
174
- };
175
- askQuestion();
176
- }
177
- /**
178
- * Generate application metadata using AI
179
- */
180
- async function aiGenerate(options) {
181
- const apiKey = process.env.OPENAI_API_KEY;
182
- if (!apiKey) {
183
- console.error(chalk_1.default.red('Error: OPENAI_API_KEY environment variable is not set.'));
184
- console.log(chalk_1.default.yellow('\nPlease set your OpenAI API key:'));
185
- console.log(chalk_1.default.cyan(' export OPENAI_API_KEY=your-api-key-here'));
186
- process.exit(1);
187
- }
188
- const outputDir = options.output || './src';
189
- console.log(chalk_1.default.blue('🤖 ObjectQL AI Generator\n'));
190
- console.log(chalk_1.default.gray(`Description: ${options.description}`));
191
- console.log(chalk_1.default.gray(`Output directory: ${outputDir}\n`));
192
- console.log(chalk_1.default.yellow('⏳ Generating metadata...'));
193
- try {
194
- const agent = createAgent(apiKey);
195
- const result = await agent.generateApp({
196
- description: options.description,
197
- type: options.type || 'custom',
198
- });
199
- if (!result.success || result.files.length === 0) {
200
- console.log(chalk_1.default.yellow('\n⚠️ No valid metadata files generated.'));
201
- if (result.errors) {
202
- result.errors.forEach((err) => console.error(chalk_1.default.red(` Error: ${err}`)));
203
- }
204
- if (result.rawResponse) {
205
- console.log(chalk_1.default.gray('\nResponse:'));
206
- console.log(result.rawResponse);
207
- }
208
- return;
209
- }
210
- // Create output directory if it doesn't exist
211
- if (!fs.existsSync(outputDir)) {
212
- fs.mkdirSync(outputDir, { recursive: true });
213
- }
214
- // Write files
215
- console.log(chalk_1.default.green('\n✅ Generated files:'));
216
- for (const file of result.files) {
217
- const filePath = path.join(outputDir, file.filename);
218
- const fileDir = path.dirname(filePath);
219
- if (!fs.existsSync(fileDir)) {
220
- fs.mkdirSync(fileDir, { recursive: true });
221
- }
222
- fs.writeFileSync(filePath, file.content);
223
- console.log(chalk_1.default.green(` ✓ ${file.filename} (${file.type})`));
224
- }
225
- console.log(chalk_1.default.blue(`\n📁 Files written to: ${outputDir}`));
226
- console.log(chalk_1.default.gray('\nNext steps:'));
227
- console.log(chalk_1.default.cyan(' 1. Review the generated files'));
228
- console.log(chalk_1.default.cyan(' 2. Run: objectql ai validate <path>'));
229
- console.log(chalk_1.default.cyan(' 3. Test with: objectql serve'));
230
- }
231
- catch (error) {
232
- console.error(chalk_1.default.red('\n❌ Error generating metadata:'));
233
- if (error instanceof Error) {
234
- console.error(chalk_1.default.red(error.message));
235
- }
236
- process.exit(1);
237
- }
238
- }
239
- /**
240
- * Validate metadata files using AI
241
- */
242
- async function aiValidate(options) {
243
- const apiKey = process.env.OPENAI_API_KEY;
244
- if (!apiKey) {
245
- console.error(chalk_1.default.red('Error: OPENAI_API_KEY environment variable is not set.'));
246
- console.log(chalk_1.default.yellow('\nNote: AI validation requires OpenAI API key.'));
247
- console.log(chalk_1.default.yellow('Falling back to basic validation...\n'));
248
- await basicValidate(options);
249
- return;
250
- }
251
- console.log(chalk_1.default.blue('🔍 ObjectQL AI Validator\n'));
252
- // Find all metadata files
253
- const patterns = [
254
- '**/*.object.yml',
255
- '**/*.validation.yml',
256
- '**/*.action.yml',
257
- '**/*.hook.yml',
258
- '**/*.permission.yml',
259
- '**/*.workflow.yml',
260
- '**/*.data.yml',
261
- ];
262
- const files = await (0, fast_glob_1.glob)(patterns, {
263
- cwd: options.path,
264
- absolute: true,
265
- ignore: ['**/node_modules/**', '**/dist/**', '**/build/**'],
266
- });
267
- if (files.length === 0) {
268
- console.log(chalk_1.default.yellow('No metadata files found.'));
269
- return;
270
- }
271
- console.log(chalk_1.default.gray(`Found ${files.length} metadata file(s)\n`));
272
- const agent = createAgent(apiKey);
273
- let errorCount = 0;
274
- let warningCount = 0;
275
- for (const filePath of files) {
276
- const relativePath = path.relative(options.path, filePath);
277
- console.log(chalk_1.default.cyan(`\n📄 ${relativePath}`));
278
- try {
279
- const content = fs.readFileSync(filePath, 'utf-8');
280
- // Validate using AI agent
281
- const result = await agent.validateMetadata({
282
- metadata: content,
283
- filename: relativePath,
284
- checkBusinessLogic: true,
285
- checkPerformance: true,
286
- checkSecurity: true,
287
- });
288
- // Display results
289
- if (result.errors.length > 0) {
290
- result.errors.forEach((error) => {
291
- console.log(chalk_1.default.red(` ❌ ERROR: ${error.message}`));
292
- if (error.location) {
293
- console.log(chalk_1.default.gray(` Location: ${error.location}`));
294
- }
295
- });
296
- errorCount += result.errors.length;
297
- }
298
- if (result.warnings.length > 0) {
299
- result.warnings.forEach((warning) => {
300
- console.log(chalk_1.default.yellow(` ⚠️ WARNING: ${warning.message}`));
301
- if (warning.suggestion) {
302
- console.log(chalk_1.default.gray(` Suggestion: ${warning.suggestion}`));
303
- }
304
- });
305
- warningCount += result.warnings.length;
306
- }
307
- if (options.verbose && result.info.length > 0) {
308
- result.info.forEach((info) => {
309
- console.log(chalk_1.default.blue(` ℹ️ INFO: ${info.message}`));
310
- });
311
- }
312
- if (result.valid && result.warnings.length === 0) {
313
- console.log(chalk_1.default.green(' ✓ No issues found'));
314
- }
315
- }
316
- catch (error) {
317
- console.log(chalk_1.default.red(` ❌ Error: ${error instanceof Error ? error.message : 'Unknown error'}`));
318
- errorCount++;
319
- }
320
- }
321
- // Summary
322
- console.log(chalk_1.default.blue('\n' + '='.repeat(60)));
323
- console.log(chalk_1.default.blue('Validation Summary:'));
324
- console.log(chalk_1.default.gray(` Files checked: ${files.length}`));
325
- if (errorCount > 0) {
326
- console.log(chalk_1.default.red(` Errors: ${errorCount}`));
327
- }
328
- if (warningCount > 0) {
329
- console.log(chalk_1.default.yellow(` Warnings: ${warningCount}`));
330
- }
331
- if (errorCount === 0 && warningCount === 0) {
332
- console.log(chalk_1.default.green(' ✓ All files validated successfully!'));
333
- }
334
- if (errorCount > 0) {
335
- process.exit(1);
336
- }
337
- }
338
- /**
339
- * Basic validation without AI (fallback)
340
- */
341
- async function basicValidate(options) {
342
- const patterns = [
343
- '**/*.object.yml',
344
- '**/*.validation.yml',
345
- ];
346
- const files = await (0, fast_glob_1.glob)(patterns, {
347
- cwd: options.path,
348
- absolute: true,
349
- ignore: ['**/node_modules/**', '**/dist/**', '**/build/**'],
350
- });
351
- if (files.length === 0) {
352
- console.log(chalk_1.default.yellow('No metadata files found.'));
353
- return;
354
- }
355
- console.log(chalk_1.default.gray(`Found ${files.length} metadata file(s)\n`));
356
- let errorCount = 0;
357
- const validator = new plugin_validator_1.Validator({ language: 'en' });
358
- for (const filePath of files) {
359
- const relativePath = path.relative(options.path, filePath);
360
- console.log(chalk_1.default.cyan(`📄 ${relativePath}`));
361
- try {
362
- const content = fs.readFileSync(filePath, 'utf-8');
363
- const data = yaml.load(content);
364
- // Validate YAML structure
365
- if (!data || typeof data !== 'object') {
366
- console.log(chalk_1.default.red(' ❌ Invalid YAML structure'));
367
- errorCount++;
368
- continue;
369
- }
370
- // Validate based on file type
371
- if (filePath.endsWith('.validation.yml')) {
372
- if (!data.rules || !Array.isArray(data.rules)) {
373
- console.log(chalk_1.default.yellow(' ⚠️ No validation rules found'));
374
- }
375
- else {
376
- console.log(chalk_1.default.green(` ✓ ${data.rules.length} validation rule(s) found`));
377
- }
378
- }
379
- else if (filePath.endsWith('.object.yml')) {
380
- if (!data.fields || typeof data.fields !== 'object') {
381
- console.log(chalk_1.default.red(' ❌ No fields defined'));
382
- errorCount++;
383
- }
384
- else {
385
- const fieldCount = Object.keys(data.fields).length;
386
- console.log(chalk_1.default.green(` ✓ ${fieldCount} field(s) defined`));
387
- }
388
- }
389
- }
390
- catch (error) {
391
- console.log(chalk_1.default.red(` ❌ Error: ${error instanceof Error ? error.message : 'Unknown error'}`));
392
- errorCount++;
393
- }
394
- }
395
- console.log(chalk_1.default.blue('\n' + '='.repeat(60)));
396
- if (errorCount === 0) {
397
- console.log(chalk_1.default.green('✓ Basic validation passed'));
398
- }
399
- else {
400
- console.log(chalk_1.default.red(`❌ Found ${errorCount} error(s)`));
401
- process.exit(1);
402
- }
403
- }
404
- /**
405
- * Interactive AI chat for metadata assistance
406
- */
407
- async function aiChat(options) {
408
- const apiKey = process.env.OPENAI_API_KEY;
409
- if (!apiKey) {
410
- console.error(chalk_1.default.red('Error: OPENAI_API_KEY environment variable is not set.'));
411
- process.exit(1);
412
- }
413
- const openai = new openai_1.default({ apiKey });
414
- console.log(chalk_1.default.blue('💬 ObjectQL AI Assistant\n'));
415
- console.log(chalk_1.default.gray('Ask me anything about ObjectQL metadata, data modeling, or best practices.'));
416
- console.log(chalk_1.default.gray('Type "exit" to quit.\n'));
417
- const rl = readline.createInterface({
418
- input: process.stdin,
419
- output: process.stdout,
420
- });
421
- const systemPrompt = `You are an expert ObjectQL architect and consultant. Help users with:
422
- - ObjectQL metadata specifications
423
- - Data modeling best practices
424
- - Validation rules and business logic
425
- - Relationships and field types
426
- - Application architecture
427
- - Performance and security considerations
428
-
429
- Provide clear, actionable advice with examples when appropriate.`;
430
- const messages = [
431
- { role: 'system', content: systemPrompt }
432
- ];
433
- if (options.initialPrompt) {
434
- messages.push({ role: 'user', content: options.initialPrompt });
435
- }
436
- const askQuestion = () => {
437
- rl.question(chalk_1.default.cyan('You: '), async (input) => {
438
- var _a, _b;
439
- if (input.toLowerCase() === 'exit') {
440
- console.log(chalk_1.default.blue('\nGoodbye! 👋'));
441
- rl.close();
442
- return;
443
- }
444
- if (!input.trim()) {
445
- askQuestion();
446
- return;
447
- }
448
- messages.push({ role: 'user', content: input });
449
- try {
450
- const completion = await openai.chat.completions.create({
451
- model: process.env.OPENAI_MODEL || 'gpt-4',
452
- messages: messages,
453
- temperature: 0.7,
454
- });
455
- const response = ((_b = (_a = completion.choices[0]) === null || _a === void 0 ? void 0 : _a.message) === null || _b === void 0 ? void 0 : _b.content) || 'No response';
456
- messages.push({ role: 'assistant', content: response });
457
- console.log(chalk_1.default.green('\nAssistant: ') + response + '\n');
458
- }
459
- catch (error) {
460
- console.error(chalk_1.default.red('\nError: ') + (error instanceof Error ? error.message : 'Unknown error') + '\n');
461
- }
462
- askQuestion();
463
- });
464
- };
465
- askQuestion();
466
- }
467
- //# sourceMappingURL=ai.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ai.js","sourceRoot":"","sources":["../../src/commands/ai.ts"],"names":[],"mappings":"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"}
@@ -1,9 +0,0 @@
1
- /**
2
- * ObjectQL
3
- * Copyright (c) 2026-present ObjectStack Inc.
4
- *
5
- * This source code is licensed under the MIT license found in the
6
- * LICENSE file in the root directory of this source tree.
7
- */
8
- import { Command } from 'commander';
9
- export declare function registerAiCommands(program: Command): void;
@@ -1,31 +0,0 @@
1
- "use strict";
2
- /**
3
- * ObjectQL
4
- * Copyright (c) 2026-present ObjectStack Inc.
5
- *
6
- * This source code is licensed under the MIT license found in the
7
- * LICENSE file in the root directory of this source tree.
8
- */
9
- Object.defineProperty(exports, "__esModule", { value: true });
10
- exports.registerAiCommands = registerAiCommands;
11
- const ai_1 = require("../commands/ai");
12
- function registerAiCommands(program) {
13
- const aiCmd = program
14
- .command('ai')
15
- .description('AI Architect capabilities');
16
- aiCmd
17
- .command('chat')
18
- .description('Interactive architecture chat')
19
- .option('-p, --prompt <text>', 'Initial prompt')
20
- .action(async (options) => {
21
- await (0, ai_1.aiChat)({ initialPrompt: options.prompt });
22
- });
23
- aiCmd
24
- .command('run <prompt>')
25
- .description('Execute an AI modification on the project (e.g. "Add a blog module")')
26
- .option('-o, --output <path>', 'Output directory', './src')
27
- .action(async (prompt, options) => {
28
- await (0, ai_1.aiGenerate)({ description: prompt, output: options.output, type: 'custom' });
29
- });
30
- }
31
- //# sourceMappingURL=ai.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ai.js","sourceRoot":"","sources":["../../src/register/ai.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;AAKH,gDAoBC;AAtBD,uCAAoD;AAEpD,SAAgB,kBAAkB,CAAC,OAAgB;IAC/C,MAAM,KAAK,GAAG,OAAO;SAChB,OAAO,CAAC,IAAI,CAAC;SACb,WAAW,CAAC,2BAA2B,CAAC,CAAC;IAE9C,KAAK;SACA,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,+BAA+B,CAAC;SAC5C,MAAM,CAAC,qBAAqB,EAAE,gBAAgB,CAAC;SAC/C,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACtB,MAAM,IAAA,WAAM,EAAC,EAAE,aAAa,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEP,KAAK;SACA,OAAO,CAAC,cAAc,CAAC;SACvB,WAAW,CAAC,sEAAsE,CAAC;SACnF,MAAM,CAAC,qBAAqB,EAAE,kBAAkB,EAAE,OAAO,CAAC;SAC1D,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE;QAC9B,MAAM,IAAA,eAAU,EAAC,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;IACtF,CAAC,CAAC,CAAC;AACX,CAAC"}