archetype-engine 2.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 (123) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +241 -0
  3. package/dist/src/ai/adapters/anthropic.d.ts +31 -0
  4. package/dist/src/ai/adapters/anthropic.d.ts.map +1 -0
  5. package/dist/src/ai/adapters/anthropic.js +75 -0
  6. package/dist/src/ai/adapters/openai.d.ts +33 -0
  7. package/dist/src/ai/adapters/openai.d.ts.map +1 -0
  8. package/dist/src/ai/adapters/openai.js +120 -0
  9. package/dist/src/ai/adapters/vercel.d.ts +434 -0
  10. package/dist/src/ai/adapters/vercel.d.ts.map +1 -0
  11. package/dist/src/ai/adapters/vercel.js +162 -0
  12. package/dist/src/ai/index.d.ts +492 -0
  13. package/dist/src/ai/index.d.ts.map +1 -0
  14. package/dist/src/ai/index.js +71 -0
  15. package/dist/src/ai/state.d.ts +13 -0
  16. package/dist/src/ai/state.d.ts.map +1 -0
  17. package/dist/src/ai/state.js +215 -0
  18. package/dist/src/ai/tools.d.ts +13 -0
  19. package/dist/src/ai/tools.d.ts.map +1 -0
  20. package/dist/src/ai/tools.js +257 -0
  21. package/dist/src/ai/types.d.ts +196 -0
  22. package/dist/src/ai/types.d.ts.map +1 -0
  23. package/dist/src/ai/types.js +9 -0
  24. package/dist/src/cli.d.ts +3 -0
  25. package/dist/src/cli.d.ts.map +1 -0
  26. package/dist/src/cli.js +540 -0
  27. package/dist/src/core/utils.d.ts +27 -0
  28. package/dist/src/core/utils.d.ts.map +1 -0
  29. package/dist/src/core/utils.js +56 -0
  30. package/dist/src/entity.d.ts +165 -0
  31. package/dist/src/entity.d.ts.map +1 -0
  32. package/dist/src/entity.js +108 -0
  33. package/dist/src/fields.d.ts +207 -0
  34. package/dist/src/fields.d.ts.map +1 -0
  35. package/dist/src/fields.js +291 -0
  36. package/dist/src/generators/erd-ir.d.ts +10 -0
  37. package/dist/src/generators/erd-ir.d.ts.map +1 -0
  38. package/dist/src/generators/erd-ir.js +119 -0
  39. package/dist/src/index.d.ts +51 -0
  40. package/dist/src/index.d.ts.map +1 -0
  41. package/dist/src/index.js +101 -0
  42. package/dist/src/init/dependencies.d.ts +31 -0
  43. package/dist/src/init/dependencies.d.ts.map +1 -0
  44. package/dist/src/init/dependencies.js +101 -0
  45. package/dist/src/init/entity-templates.d.ts +42 -0
  46. package/dist/src/init/entity-templates.d.ts.map +1 -0
  47. package/dist/src/init/entity-templates.js +367 -0
  48. package/dist/src/init/index.d.ts +10 -0
  49. package/dist/src/init/index.d.ts.map +1 -0
  50. package/dist/src/init/index.js +250 -0
  51. package/dist/src/init/prompts.d.ts +11 -0
  52. package/dist/src/init/prompts.d.ts.map +1 -0
  53. package/dist/src/init/prompts.js +275 -0
  54. package/dist/src/init/templates.d.ts +24 -0
  55. package/dist/src/init/templates.d.ts.map +1 -0
  56. package/dist/src/init/templates.js +587 -0
  57. package/dist/src/json/index.d.ts +11 -0
  58. package/dist/src/json/index.d.ts.map +1 -0
  59. package/dist/src/json/index.js +26 -0
  60. package/dist/src/json/parser.d.ts +61 -0
  61. package/dist/src/json/parser.d.ts.map +1 -0
  62. package/dist/src/json/parser.js +309 -0
  63. package/dist/src/json/types.d.ts +275 -0
  64. package/dist/src/json/types.d.ts.map +1 -0
  65. package/dist/src/json/types.js +10 -0
  66. package/dist/src/manifest.d.ts +147 -0
  67. package/dist/src/manifest.d.ts.map +1 -0
  68. package/dist/src/manifest.js +104 -0
  69. package/dist/src/relations.d.ts +96 -0
  70. package/dist/src/relations.d.ts.map +1 -0
  71. package/dist/src/relations.js +108 -0
  72. package/dist/src/source.d.ts +93 -0
  73. package/dist/src/source.d.ts.map +1 -0
  74. package/dist/src/source.js +89 -0
  75. package/dist/src/template/context.d.ts +34 -0
  76. package/dist/src/template/context.d.ts.map +1 -0
  77. package/dist/src/template/context.js +31 -0
  78. package/dist/src/template/index.d.ts +6 -0
  79. package/dist/src/template/index.d.ts.map +1 -0
  80. package/dist/src/template/index.js +12 -0
  81. package/dist/src/template/registry.d.ts +18 -0
  82. package/dist/src/template/registry.d.ts.map +1 -0
  83. package/dist/src/template/registry.js +89 -0
  84. package/dist/src/template/runner.d.ts +9 -0
  85. package/dist/src/template/runner.d.ts.map +1 -0
  86. package/dist/src/template/runner.js +125 -0
  87. package/dist/src/template/types.d.ts +73 -0
  88. package/dist/src/template/types.d.ts.map +1 -0
  89. package/dist/src/template/types.js +3 -0
  90. package/dist/src/templates/nextjs-drizzle-trpc/generators/api.d.ts +22 -0
  91. package/dist/src/templates/nextjs-drizzle-trpc/generators/api.d.ts.map +1 -0
  92. package/dist/src/templates/nextjs-drizzle-trpc/generators/api.js +866 -0
  93. package/dist/src/templates/nextjs-drizzle-trpc/generators/auth.d.ts +20 -0
  94. package/dist/src/templates/nextjs-drizzle-trpc/generators/auth.d.ts.map +1 -0
  95. package/dist/src/templates/nextjs-drizzle-trpc/generators/auth.js +273 -0
  96. package/dist/src/templates/nextjs-drizzle-trpc/generators/crud-hooks.d.ts +22 -0
  97. package/dist/src/templates/nextjs-drizzle-trpc/generators/crud-hooks.d.ts.map +1 -0
  98. package/dist/src/templates/nextjs-drizzle-trpc/generators/crud-hooks.js +237 -0
  99. package/dist/src/templates/nextjs-drizzle-trpc/generators/hooks.d.ts +30 -0
  100. package/dist/src/templates/nextjs-drizzle-trpc/generators/hooks.d.ts.map +1 -0
  101. package/dist/src/templates/nextjs-drizzle-trpc/generators/hooks.js +345 -0
  102. package/dist/src/templates/nextjs-drizzle-trpc/generators/i18n.d.ts +25 -0
  103. package/dist/src/templates/nextjs-drizzle-trpc/generators/i18n.d.ts.map +1 -0
  104. package/dist/src/templates/nextjs-drizzle-trpc/generators/i18n.js +199 -0
  105. package/dist/src/templates/nextjs-drizzle-trpc/generators/index.d.ts +8 -0
  106. package/dist/src/templates/nextjs-drizzle-trpc/generators/index.d.ts.map +1 -0
  107. package/dist/src/templates/nextjs-drizzle-trpc/generators/index.js +18 -0
  108. package/dist/src/templates/nextjs-drizzle-trpc/generators/schema.d.ts +22 -0
  109. package/dist/src/templates/nextjs-drizzle-trpc/generators/schema.d.ts.map +1 -0
  110. package/dist/src/templates/nextjs-drizzle-trpc/generators/schema.js +270 -0
  111. package/dist/src/templates/nextjs-drizzle-trpc/generators/service.d.ts +23 -0
  112. package/dist/src/templates/nextjs-drizzle-trpc/generators/service.d.ts.map +1 -0
  113. package/dist/src/templates/nextjs-drizzle-trpc/generators/service.js +304 -0
  114. package/dist/src/templates/nextjs-drizzle-trpc/generators/validation.d.ts +21 -0
  115. package/dist/src/templates/nextjs-drizzle-trpc/generators/validation.d.ts.map +1 -0
  116. package/dist/src/templates/nextjs-drizzle-trpc/generators/validation.js +248 -0
  117. package/dist/src/templates/nextjs-drizzle-trpc/index.d.ts +30 -0
  118. package/dist/src/templates/nextjs-drizzle-trpc/index.d.ts.map +1 -0
  119. package/dist/src/templates/nextjs-drizzle-trpc/index.js +71 -0
  120. package/dist/src/validation/index.d.ts +71 -0
  121. package/dist/src/validation/index.d.ts.map +1 -0
  122. package/dist/src/validation/index.js +314 -0
  123. package/package.json +86 -0
@@ -0,0 +1,215 @@
1
+ "use strict";
2
+ /**
3
+ * ManifestBuilder - State manager for AI tool calls
4
+ *
5
+ * Tracks the manifest being built across multiple AI tool calls.
6
+ *
7
+ * @module ai/state
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.createManifestBuilder = createManifestBuilder;
11
+ const validation_1 = require("../validation");
12
+ const parser_1 = require("../json/parser");
13
+ const template_1 = require("../template");
14
+ /**
15
+ * Create a new ManifestBuilder instance
16
+ */
17
+ function createManifestBuilder() {
18
+ let entities = [];
19
+ let database;
20
+ let auth;
21
+ const builder = {
22
+ get entities() {
23
+ return [...entities];
24
+ },
25
+ get database() {
26
+ return database;
27
+ },
28
+ get auth() {
29
+ return auth;
30
+ },
31
+ addEntity(params) {
32
+ // Check if entity already exists
33
+ const existing = entities.find(e => e.name === params.name);
34
+ if (existing) {
35
+ return {
36
+ success: false,
37
+ message: `Entity '${params.name}' already exists. Use update_entity to modify it.`,
38
+ errors: [{ code: 'DUPLICATE_ENTITY', message: `Entity '${params.name}' already exists` }],
39
+ };
40
+ }
41
+ // Convert params to EntityJSON
42
+ const fields = {};
43
+ for (const [name, field] of Object.entries(params.fields)) {
44
+ fields[name] = {
45
+ type: field.type,
46
+ required: field.required,
47
+ unique: field.unique,
48
+ email: field.email,
49
+ url: field.url,
50
+ min: field.min,
51
+ max: field.max,
52
+ oneOf: field.oneOf,
53
+ integer: field.integer,
54
+ positive: field.positive,
55
+ default: field.default,
56
+ label: field.label,
57
+ };
58
+ }
59
+ const relations = params.relations
60
+ ? Object.fromEntries(Object.entries(params.relations).map(([name, rel]) => [
61
+ name,
62
+ { type: rel.type, entity: rel.entity },
63
+ ]))
64
+ : undefined;
65
+ const entity = {
66
+ name: params.name,
67
+ fields,
68
+ relations,
69
+ behaviors: params.behaviors,
70
+ protected: params.protected,
71
+ };
72
+ entities.push(entity);
73
+ return {
74
+ success: true,
75
+ message: `Entity '${params.name}' added with ${Object.keys(fields).length} fields.`,
76
+ data: { entities: entities.map(e => e.name) },
77
+ };
78
+ },
79
+ updateEntity(params) {
80
+ const index = entities.findIndex(e => e.name === params.name);
81
+ if (index === -1) {
82
+ return {
83
+ success: false,
84
+ message: `Entity '${params.name}' not found. Use add_entity to create it first.`,
85
+ errors: [{ code: 'ENTITY_NOT_FOUND', message: `Entity '${params.name}' not found` }],
86
+ };
87
+ }
88
+ const entity = entities[index];
89
+ // Update fields if provided
90
+ if (params.fields) {
91
+ for (const [name, field] of Object.entries(params.fields)) {
92
+ entity.fields[name] = {
93
+ ...entity.fields[name],
94
+ type: field.type ?? entity.fields[name]?.type ?? 'text',
95
+ required: field.required,
96
+ unique: field.unique,
97
+ email: field.email,
98
+ url: field.url,
99
+ min: field.min,
100
+ max: field.max,
101
+ oneOf: field.oneOf,
102
+ integer: field.integer,
103
+ positive: field.positive,
104
+ default: field.default,
105
+ label: field.label,
106
+ };
107
+ }
108
+ }
109
+ // Update relations if provided
110
+ if (params.relations) {
111
+ entity.relations = entity.relations ?? {};
112
+ for (const [name, rel] of Object.entries(params.relations)) {
113
+ entity.relations[name] = { type: rel.type, entity: rel.entity };
114
+ }
115
+ }
116
+ // Update behaviors if provided
117
+ if (params.behaviors) {
118
+ entity.behaviors = { ...entity.behaviors, ...params.behaviors };
119
+ }
120
+ // Update protected if provided
121
+ if (params.protected !== undefined) {
122
+ entity.protected = params.protected;
123
+ }
124
+ return {
125
+ success: true,
126
+ message: `Entity '${params.name}' updated.`,
127
+ data: { entity: entity.name, fields: Object.keys(entity.fields) },
128
+ };
129
+ },
130
+ removeEntity(params) {
131
+ const index = entities.findIndex(e => e.name === params.name);
132
+ if (index === -1) {
133
+ return {
134
+ success: false,
135
+ message: `Entity '${params.name}' not found.`,
136
+ errors: [{ code: 'ENTITY_NOT_FOUND', message: `Entity '${params.name}' not found` }],
137
+ };
138
+ }
139
+ entities.splice(index, 1);
140
+ return {
141
+ success: true,
142
+ message: `Entity '${params.name}' removed.`,
143
+ data: { entities: entities.map(e => e.name) },
144
+ };
145
+ },
146
+ setDatabase(params) {
147
+ database = {
148
+ type: params.type,
149
+ file: params.file,
150
+ url: params.url,
151
+ };
152
+ return {
153
+ success: true,
154
+ message: `Database configured: ${params.type}`,
155
+ data: { database },
156
+ };
157
+ },
158
+ setAuth(params) {
159
+ auth = {
160
+ enabled: params.enabled,
161
+ providers: params.providers,
162
+ sessionStrategy: params.sessionStrategy,
163
+ };
164
+ return {
165
+ success: true,
166
+ message: params.enabled
167
+ ? `Auth enabled with providers: ${params.providers?.join(', ') ?? 'credentials'}`
168
+ : 'Auth disabled',
169
+ data: { auth },
170
+ };
171
+ },
172
+ toManifest() {
173
+ return {
174
+ entities,
175
+ database,
176
+ auth,
177
+ template: 'nextjs-drizzle-trpc',
178
+ };
179
+ },
180
+ validate() {
181
+ return (0, validation_1.validateManifest)(this.toManifest());
182
+ },
183
+ async generate() {
184
+ const manifest = this.toManifest();
185
+ const validation = (0, validation_1.validateManifest)(manifest);
186
+ if (!validation.valid) {
187
+ return {
188
+ files: [],
189
+ success: false,
190
+ errors: validation.errors.map(e => e.message),
191
+ };
192
+ }
193
+ const ir = (0, parser_1.parseManifestJSON)(manifest);
194
+ const template = await (0, template_1.getTemplate)('nextjs-drizzle-trpc');
195
+ if (!template) {
196
+ return {
197
+ files: [],
198
+ success: false,
199
+ errors: ['Template not found'],
200
+ };
201
+ }
202
+ const files = await (0, template_1.runTemplate)(template, ir);
203
+ return {
204
+ files,
205
+ success: true,
206
+ };
207
+ },
208
+ reset() {
209
+ entities = [];
210
+ database = undefined;
211
+ auth = undefined;
212
+ },
213
+ };
214
+ return builder;
215
+ }
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Framework-agnostic tool definitions
3
+ *
4
+ * These definitions can be converted to OpenAI, Anthropic, or Vercel AI SDK formats.
5
+ *
6
+ * @module ai/tools
7
+ */
8
+ import type { ToolDefinition } from './types';
9
+ /**
10
+ * All available tools
11
+ */
12
+ export declare const toolDefinitions: Record<string, ToolDefinition>;
13
+ //# sourceMappingURL=tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../../src/ai/tools.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAqF7C;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAgL1D,CAAA"}
@@ -0,0 +1,257 @@
1
+ "use strict";
2
+ /**
3
+ * Framework-agnostic tool definitions
4
+ *
5
+ * These definitions can be converted to OpenAI, Anthropic, or Vercel AI SDK formats.
6
+ *
7
+ * @module ai/tools
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.toolDefinitions = void 0;
11
+ /**
12
+ * Field type JSON schema
13
+ * Note: Type assertion required because of deeply nested schema structure
14
+ */
15
+ const fieldSchema = {
16
+ type: 'object',
17
+ description: 'Field definition',
18
+ properties: {
19
+ type: {
20
+ type: 'string',
21
+ description: 'Field data type',
22
+ enum: ['text', 'number', 'boolean', 'date'],
23
+ },
24
+ required: {
25
+ type: 'boolean',
26
+ description: 'Whether the field is required (default: true)',
27
+ },
28
+ unique: {
29
+ type: 'boolean',
30
+ description: 'Add unique constraint',
31
+ },
32
+ email: {
33
+ type: 'boolean',
34
+ description: 'Validate as email (text fields only)',
35
+ },
36
+ url: {
37
+ type: 'boolean',
38
+ description: 'Validate as URL (text fields only)',
39
+ },
40
+ min: {
41
+ type: 'number',
42
+ description: 'Minimum length (text) or value (number)',
43
+ },
44
+ max: {
45
+ type: 'number',
46
+ description: 'Maximum length (text) or value (number)',
47
+ },
48
+ oneOf: {
49
+ type: 'array',
50
+ description: 'Enum values - field must be one of these',
51
+ items: { type: 'string' },
52
+ },
53
+ integer: {
54
+ type: 'boolean',
55
+ description: 'Must be integer (number fields only)',
56
+ },
57
+ positive: {
58
+ type: 'boolean',
59
+ description: 'Must be positive (number fields only)',
60
+ },
61
+ default: {
62
+ type: 'string',
63
+ description: 'Default value',
64
+ },
65
+ label: {
66
+ type: 'string',
67
+ description: 'Display label for UI',
68
+ },
69
+ },
70
+ required: ['type'],
71
+ };
72
+ /**
73
+ * Relation type JSON schema
74
+ * Note: Type assertion required because of deeply nested schema structure
75
+ */
76
+ const relationSchema = {
77
+ type: 'object',
78
+ description: 'Relation definition',
79
+ properties: {
80
+ type: {
81
+ type: 'string',
82
+ description: 'Relation type',
83
+ enum: ['hasOne', 'hasMany', 'belongsToMany'],
84
+ },
85
+ entity: {
86
+ type: 'string',
87
+ description: 'Target entity name (PascalCase)',
88
+ },
89
+ },
90
+ required: ['type', 'entity'],
91
+ };
92
+ /**
93
+ * All available tools
94
+ */
95
+ exports.toolDefinitions = {
96
+ add_entity: {
97
+ name: 'add_entity',
98
+ description: 'Add a new entity to the app. Entities represent data types like User, Post, Product. Each entity will get a database table, API endpoints, and React hooks.',
99
+ parameters: {
100
+ name: {
101
+ type: 'string',
102
+ description: 'Entity name in PascalCase (e.g., User, BlogPost, ProductCategory)',
103
+ required: true,
104
+ },
105
+ fields: {
106
+ type: 'object',
107
+ description: 'Field definitions. Keys are field names in camelCase. Values define type and validations.',
108
+ required: true,
109
+ properties: {
110
+ '[fieldName]': fieldSchema,
111
+ },
112
+ },
113
+ relations: {
114
+ type: 'object',
115
+ description: 'Relations to other entities. hasOne = foreign key on this entity, hasMany = foreign key on target, belongsToMany = junction table.',
116
+ properties: {
117
+ '[relationName]': relationSchema,
118
+ },
119
+ },
120
+ behaviors: {
121
+ type: 'object',
122
+ description: 'Entity behaviors',
123
+ properties: {
124
+ timestamps: {
125
+ type: 'boolean',
126
+ description: 'Add createdAt/updatedAt fields (default: true)',
127
+ },
128
+ softDelete: {
129
+ type: 'boolean',
130
+ description: 'Use deletedAt instead of hard delete',
131
+ },
132
+ audit: {
133
+ type: 'boolean',
134
+ description: 'Log all changes',
135
+ },
136
+ },
137
+ },
138
+ protected: {
139
+ type: 'string',
140
+ description: 'Auth protection level. false=public, true=all protected, "write"=read public/write protected',
141
+ enum: ['false', 'true', 'write', 'all'],
142
+ },
143
+ },
144
+ required: ['name', 'fields'],
145
+ },
146
+ update_entity: {
147
+ name: 'update_entity',
148
+ description: 'Update an existing entity. Use this to add/modify fields or relations.',
149
+ parameters: {
150
+ name: {
151
+ type: 'string',
152
+ description: 'Name of the entity to update',
153
+ required: true,
154
+ },
155
+ fields: {
156
+ type: 'object',
157
+ description: 'Fields to add or update',
158
+ properties: {
159
+ '[fieldName]': fieldSchema,
160
+ },
161
+ },
162
+ relations: {
163
+ type: 'object',
164
+ description: 'Relations to add or update',
165
+ properties: {
166
+ '[relationName]': relationSchema,
167
+ },
168
+ },
169
+ behaviors: {
170
+ type: 'object',
171
+ description: 'Behaviors to update',
172
+ properties: {
173
+ timestamps: { type: 'boolean', description: 'Add createdAt/updatedAt' },
174
+ softDelete: { type: 'boolean', description: 'Use soft delete' },
175
+ audit: { type: 'boolean', description: 'Enable audit logging' },
176
+ },
177
+ },
178
+ protected: {
179
+ type: 'string',
180
+ description: 'Auth protection level',
181
+ enum: ['false', 'true', 'write', 'all'],
182
+ },
183
+ },
184
+ required: ['name'],
185
+ },
186
+ remove_entity: {
187
+ name: 'remove_entity',
188
+ description: 'Remove an entity from the app.',
189
+ parameters: {
190
+ name: {
191
+ type: 'string',
192
+ description: 'Name of the entity to remove',
193
+ required: true,
194
+ },
195
+ },
196
+ required: ['name'],
197
+ },
198
+ set_database: {
199
+ name: 'set_database',
200
+ description: 'Configure the database. Required before generating the app.',
201
+ parameters: {
202
+ type: {
203
+ type: 'string',
204
+ description: 'Database type',
205
+ required: true,
206
+ enum: ['sqlite', 'postgres', 'mysql'],
207
+ },
208
+ file: {
209
+ type: 'string',
210
+ description: 'SQLite file path (required for SQLite, e.g., "./app.db")',
211
+ },
212
+ url: {
213
+ type: 'string',
214
+ description: 'Connection URL for Postgres/MySQL. Use env: prefix for env vars (e.g., "env:DATABASE_URL")',
215
+ },
216
+ },
217
+ required: ['type'],
218
+ },
219
+ set_auth: {
220
+ name: 'set_auth',
221
+ description: 'Configure authentication. Enables user login with various providers.',
222
+ parameters: {
223
+ enabled: {
224
+ type: 'boolean',
225
+ description: 'Whether to enable authentication',
226
+ required: true,
227
+ },
228
+ providers: {
229
+ type: 'array',
230
+ description: 'Login providers to enable',
231
+ items: {
232
+ type: 'string',
233
+ description: 'Provider name',
234
+ enum: ['credentials', 'google', 'github', 'discord'],
235
+ },
236
+ },
237
+ sessionStrategy: {
238
+ type: 'string',
239
+ description: 'Session storage strategy',
240
+ enum: ['jwt', 'database'],
241
+ },
242
+ },
243
+ required: ['enabled'],
244
+ },
245
+ validate: {
246
+ name: 'validate',
247
+ description: 'Validate the current manifest. Returns structured errors with suggestions. Call this before generate to check for issues.',
248
+ parameters: {},
249
+ required: [],
250
+ },
251
+ generate: {
252
+ name: 'generate',
253
+ description: 'Generate the app. Creates all files: database schema, API routes, React hooks, validation schemas. Call validate first to check for errors.',
254
+ parameters: {},
255
+ required: [],
256
+ },
257
+ };
@@ -0,0 +1,196 @@
1
+ /**
2
+ * AI Module Types
3
+ *
4
+ * Type definitions for AI tool integrations.
5
+ *
6
+ * @module ai/types
7
+ */
8
+ import type { EntityJSON, DatabaseJSON, AuthJSON, ManifestJSON } from '../json/types';
9
+ import type { ValidationResult } from '../validation';
10
+ import type { GeneratedFile } from '../template/types';
11
+ /**
12
+ * Tool parameter definition
13
+ */
14
+ export interface ToolParameter {
15
+ type: 'string' | 'number' | 'boolean' | 'object' | 'array';
16
+ description: string;
17
+ required?: boolean;
18
+ enum?: string[];
19
+ properties?: Record<string, ToolParameter>;
20
+ items?: ToolParameter;
21
+ }
22
+ /**
23
+ * JSON Schema property (for tool schemas)
24
+ */
25
+ export interface SchemaProperty {
26
+ type: string;
27
+ description: string;
28
+ enum?: string[];
29
+ items?: SchemaProperty;
30
+ additionalProperties?: boolean;
31
+ }
32
+ /**
33
+ * Tool definition (framework-agnostic)
34
+ */
35
+ export interface ToolDefinition {
36
+ name: string;
37
+ description: string;
38
+ parameters: Record<string, ToolParameter>;
39
+ required?: string[];
40
+ }
41
+ /**
42
+ * Result of a tool execution
43
+ */
44
+ export interface ToolResult {
45
+ success: boolean;
46
+ message?: string;
47
+ data?: unknown;
48
+ errors?: Array<{
49
+ code: string;
50
+ message: string;
51
+ suggestion?: string;
52
+ }>;
53
+ }
54
+ /**
55
+ * Add entity parameters
56
+ */
57
+ export interface AddEntityParams {
58
+ name: string;
59
+ fields: Record<string, {
60
+ type: 'text' | 'number' | 'boolean' | 'date';
61
+ required?: boolean;
62
+ unique?: boolean;
63
+ email?: boolean;
64
+ url?: boolean;
65
+ min?: number;
66
+ max?: number;
67
+ oneOf?: string[];
68
+ integer?: boolean;
69
+ positive?: boolean;
70
+ default?: unknown;
71
+ label?: string;
72
+ }>;
73
+ relations?: Record<string, {
74
+ type: 'hasOne' | 'hasMany' | 'belongsToMany';
75
+ entity: string;
76
+ }>;
77
+ behaviors?: {
78
+ timestamps?: boolean;
79
+ softDelete?: boolean;
80
+ audit?: boolean;
81
+ };
82
+ protected?: boolean | 'write' | 'all';
83
+ }
84
+ /**
85
+ * Update entity parameters
86
+ */
87
+ export interface UpdateEntityParams {
88
+ name: string;
89
+ fields?: Record<string, {
90
+ type?: 'text' | 'number' | 'boolean' | 'date';
91
+ required?: boolean;
92
+ unique?: boolean;
93
+ email?: boolean;
94
+ url?: boolean;
95
+ min?: number;
96
+ max?: number;
97
+ oneOf?: string[];
98
+ integer?: boolean;
99
+ positive?: boolean;
100
+ default?: unknown;
101
+ label?: string;
102
+ }>;
103
+ relations?: Record<string, {
104
+ type: 'hasOne' | 'hasMany' | 'belongsToMany';
105
+ entity: string;
106
+ }>;
107
+ behaviors?: {
108
+ timestamps?: boolean;
109
+ softDelete?: boolean;
110
+ audit?: boolean;
111
+ };
112
+ protected?: boolean | 'write' | 'all';
113
+ }
114
+ /**
115
+ * Remove entity parameters
116
+ */
117
+ export interface RemoveEntityParams {
118
+ name: string;
119
+ }
120
+ /**
121
+ * Set database parameters
122
+ */
123
+ export interface SetDatabaseParams {
124
+ type: 'sqlite' | 'postgres' | 'mysql';
125
+ file?: string;
126
+ url?: string;
127
+ }
128
+ /**
129
+ * Set auth parameters
130
+ */
131
+ export interface SetAuthParams {
132
+ enabled: boolean;
133
+ providers?: ('credentials' | 'google' | 'github' | 'discord')[];
134
+ sessionStrategy?: 'jwt' | 'database';
135
+ }
136
+ /**
137
+ * ManifestBuilder interface for tracking state across tool calls
138
+ */
139
+ export interface ManifestBuilder {
140
+ readonly entities: EntityJSON[];
141
+ readonly database: DatabaseJSON | undefined;
142
+ readonly auth: AuthJSON | undefined;
143
+ addEntity(params: AddEntityParams): ToolResult;
144
+ updateEntity(params: UpdateEntityParams): ToolResult;
145
+ removeEntity(params: RemoveEntityParams): ToolResult;
146
+ setDatabase(params: SetDatabaseParams): ToolResult;
147
+ setAuth(params: SetAuthParams): ToolResult;
148
+ toManifest(): ManifestJSON;
149
+ validate(): ValidationResult;
150
+ generate(): Promise<{
151
+ files: GeneratedFile[];
152
+ success: boolean;
153
+ errors?: string[];
154
+ }>;
155
+ reset(): void;
156
+ }
157
+ /**
158
+ * OpenAI function calling format
159
+ */
160
+ export interface OpenAITool {
161
+ type: 'function';
162
+ function: {
163
+ name: string;
164
+ description: string;
165
+ parameters: {
166
+ type: 'object';
167
+ properties: Record<string, unknown>;
168
+ required?: string[];
169
+ };
170
+ };
171
+ }
172
+ /**
173
+ * Anthropic tool use format
174
+ */
175
+ export interface AnthropicTool {
176
+ name: string;
177
+ description: string;
178
+ input_schema: {
179
+ type: 'object';
180
+ properties: Record<string, unknown>;
181
+ required?: string[];
182
+ };
183
+ }
184
+ /**
185
+ * Vercel AI SDK tool format
186
+ */
187
+ export interface VercelAITool {
188
+ description: string;
189
+ parameters: {
190
+ type: 'object';
191
+ properties: Record<string, unknown>;
192
+ required?: string[];
193
+ };
194
+ execute: (params: unknown) => Promise<unknown>;
195
+ }
196
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/ai/types.ts"],"names":[],"mappings":"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"}