agentlang 0.0.11 → 0.0.13

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 (71) hide show
  1. package/README.md +2 -19
  2. package/out/language/generated/ast.d.ts +2 -1
  3. package/out/language/generated/ast.d.ts.map +1 -1
  4. package/out/language/generated/ast.js +1 -0
  5. package/out/language/generated/ast.js.map +1 -1
  6. package/out/language/generated/grammar.d.ts.map +1 -1
  7. package/out/language/generated/grammar.js +20 -1
  8. package/out/language/generated/grammar.js.map +1 -1
  9. package/out/language/main.cjs +21 -1
  10. package/out/language/main.cjs.map +2 -2
  11. package/out/language/syntax.js +1 -1
  12. package/out/language/syntax.js.map +1 -1
  13. package/out/runtime/agents/impl/anthropic.d.ts +26 -0
  14. package/out/runtime/agents/impl/anthropic.d.ts.map +1 -0
  15. package/out/runtime/agents/impl/anthropic.js +106 -0
  16. package/out/runtime/agents/impl/anthropic.js.map +1 -0
  17. package/out/runtime/agents/impl/openai.d.ts +22 -0
  18. package/out/runtime/agents/impl/openai.d.ts.map +1 -1
  19. package/out/runtime/agents/impl/openai.js +83 -4
  20. package/out/runtime/agents/impl/openai.js.map +1 -1
  21. package/out/runtime/agents/registry.d.ts.map +1 -1
  22. package/out/runtime/agents/registry.js +49 -5
  23. package/out/runtime/agents/registry.js.map +1 -1
  24. package/out/runtime/interpreter.d.ts +1 -0
  25. package/out/runtime/interpreter.d.ts.map +1 -1
  26. package/out/runtime/interpreter.js +13 -7
  27. package/out/runtime/interpreter.js.map +1 -1
  28. package/out/runtime/jsmodules.js +1 -1
  29. package/out/runtime/jsmodules.js.map +1 -1
  30. package/out/runtime/resolvers/interface.d.ts +2 -2
  31. package/out/runtime/resolvers/interface.d.ts.map +1 -1
  32. package/out/runtime/resolvers/interface.js +4 -4
  33. package/out/runtime/resolvers/interface.js.map +1 -1
  34. package/out/runtime/resolvers/sqldb/database.d.ts +3 -3
  35. package/out/runtime/resolvers/sqldb/database.d.ts.map +1 -1
  36. package/out/runtime/resolvers/sqldb/database.js +19 -10
  37. package/out/runtime/resolvers/sqldb/database.js.map +1 -1
  38. package/out/runtime/resolvers/sqldb/dbutil.d.ts +1 -1
  39. package/out/runtime/resolvers/sqldb/dbutil.d.ts.map +1 -1
  40. package/out/runtime/resolvers/sqldb/dbutil.js +12 -4
  41. package/out/runtime/resolvers/sqldb/dbutil.js.map +1 -1
  42. package/out/runtime/resolvers/sqldb/impl.d.ts +2 -2
  43. package/out/runtime/resolvers/sqldb/impl.d.ts.map +1 -1
  44. package/out/runtime/resolvers/sqldb/impl.js +17 -17
  45. package/out/runtime/resolvers/sqldb/impl.js.map +1 -1
  46. package/out/syntaxes/agentlang.monarch.js +1 -1
  47. package/out/syntaxes/agentlang.monarch.js.map +1 -1
  48. package/package.json +8 -10
  49. package/src/language/agentlang.langium +2 -1
  50. package/src/language/generated/ast.ts +4 -1
  51. package/src/language/generated/grammar.ts +20 -1
  52. package/src/language/syntax.ts +1 -1
  53. package/src/runtime/agents/impl/anthropic.ts +166 -0
  54. package/src/runtime/agents/impl/openai.ts +124 -4
  55. package/src/runtime/agents/registry.ts +51 -4
  56. package/src/runtime/interpreter.ts +14 -6
  57. package/src/runtime/jsmodules.ts +1 -1
  58. package/src/runtime/resolvers/interface.ts +9 -4
  59. package/src/runtime/resolvers/sqldb/database.ts +21 -8
  60. package/src/runtime/resolvers/sqldb/dbutil.ts +11 -4
  61. package/src/runtime/resolvers/sqldb/impl.ts +19 -16
  62. package/src/syntaxes/agentlang.monarch.ts +1 -1
  63. package/out/cli/docs.d.ts +0 -2
  64. package/out/cli/docs.d.ts.map +0 -1
  65. package/out/cli/docs.js +0 -236
  66. package/out/cli/docs.js.map +0 -1
  67. package/out/cli/openapi-docs.yml +0 -695
  68. package/out/index.d.ts +0 -19
  69. package/out/index.d.ts.map +0 -1
  70. package/out/index.js +0 -25
  71. package/out/index.js.map +0 -1
@@ -15,7 +15,7 @@ import {
15
15
  } from '../../module.js';
16
16
  import { escapeFqName, makeFqName, splitFqName } from '../../util.js';
17
17
  import { JoinInfo, Resolver } from '../interface.js';
18
- import { asTableName } from './dbutil.js';
18
+ import { asTableReference } from './dbutil.js';
19
19
  import {
20
20
  getMany,
21
21
  insertRow,
@@ -103,7 +103,7 @@ export class SqlDbResolver extends Resolver {
103
103
  else p = `${n.replace('/', '$')}/${idAttrVal}`;
104
104
  attrs.set(PathAttributeName, p);
105
105
  }
106
- const n: string = asTableName(inst.moduleName, inst.name);
106
+ const n: string = asTableReference(inst.moduleName, inst.name);
107
107
  const rowObj: object = inst.attributesWithStringifiedObjects();
108
108
  const ctx = this.getDbContext(inst.getFqName());
109
109
  await insertRow(n, rowObj, ctx, orUpdate);
@@ -140,7 +140,7 @@ export class SqlDbResolver extends Resolver {
140
140
  );
141
141
  const updateObj: object = Object.fromEntries(newAttrs);
142
142
  await updateRow(
143
- asTableName(inst.moduleName, inst.name),
143
+ asTableReference(inst.moduleName, inst.name),
144
144
  queryObj,
145
145
  queryVals,
146
146
  updateObj,
@@ -153,16 +153,17 @@ export class SqlDbResolver extends Resolver {
153
153
 
154
154
  public override async queryInstances(
155
155
  inst: Instance,
156
- queryAll: boolean = false
156
+ queryAll: boolean = false,
157
+ distinct: boolean = false
157
158
  ): Promise<Instance[]> {
158
159
  let result = SqlDbResolver.EmptyResultSet;
159
160
 
160
- const tableName = asTableName(inst.moduleName, inst.name);
161
+ const tableName = asTableReference(inst.moduleName, inst.name);
161
162
  const fqName = inst.getFqName();
162
163
  const ctx = this.getDbContext(fqName);
163
164
  const qattrs: any = queryAll ? undefined : inst.queryAttributesAsObject();
164
165
  const qvals: any = queryAll ? undefined : inst.queryAttributeValuesAsObject();
165
- const rslt: any = await getMany(tableName, qattrs, qvals, ctx);
166
+ const rslt: any = await getMany(tableName, qattrs, qvals, distinct, ctx);
166
167
  if (rslt instanceof Array) {
167
168
  result = new Array<Instance>();
168
169
  rslt.forEach((r: object) => {
@@ -217,11 +218,11 @@ export class SqlDbResolver extends Resolver {
217
218
  return await this.queryInstances(inst, false);
218
219
  } else {
219
220
  await getAllConnected(
220
- asTableName(inst.moduleName, inst.name),
221
+ asTableReference(inst.moduleName, inst.name),
221
222
  inst.queryAttributesAsObject(),
222
223
  inst.queryAttributeValuesAsObject(),
223
224
  {
224
- connectionTable: asTableName(inst.moduleName, relationship.name),
225
+ connectionTable: asTableReference(inst.moduleName, relationship.name),
225
226
  fromColumn: relationship.node1.alias,
226
227
  fromValue: `'${connectedInstance.lookup(PathAttributeName)}'`,
227
228
  toColumn: relationship.node2.alias,
@@ -249,15 +250,16 @@ export class SqlDbResolver extends Resolver {
249
250
  public override async queryByJoin(
250
251
  inst: Instance,
251
252
  joinsSpec: JoinInfo[],
252
- intoSpec: Map<string, string>
253
+ intoSpec: Map<string, string>,
254
+ distinct: boolean = false
253
255
  ): Promise<any> {
254
- const tableName = asTableName(inst.moduleName, inst.name);
256
+ const tableName = asTableReference(inst.moduleName, inst.name);
255
257
  const joinClauses: JoinClause[] = [];
256
258
  this.processJoinInfo(tableName, inst, joinsSpec, joinClauses);
257
259
  intoSpec.forEach((v: string, k: string) => {
258
260
  const p = splitFqName(v);
259
261
  const mn = p.hasModule() ? p.getModuleName() : inst.moduleName;
260
- intoSpec.set(k, asTableName(mn, p.getEntryName()));
262
+ intoSpec.set(k, asTableReference(mn, p.getEntryName()));
261
263
  });
262
264
  const rslt: any = await getManyByJoin(
263
265
  tableName,
@@ -265,6 +267,7 @@ export class SqlDbResolver extends Resolver {
265
267
  inst.queryAttributeValuesAsObject(),
266
268
  joinClauses,
267
269
  intoSpec,
270
+ distinct,
268
271
  this.getDbContext(inst.getFqName())
269
272
  );
270
273
  return rslt;
@@ -278,7 +281,7 @@ export class SqlDbResolver extends Resolver {
278
281
  ) {
279
282
  joinsSpec.forEach((ji: JoinInfo) => {
280
283
  const rel: Relationship = ji.relationship;
281
- const joinTableName = asTableName(ji.queryInstance.moduleName, ji.queryInstance.name);
284
+ const joinTableName = asTableReference(ji.queryInstance.moduleName, ji.queryInstance.name);
282
285
  let joinOn: JoinOn | JoinOn[] | undefined;
283
286
  if (rel.isContains()) {
284
287
  const walkDown = rel.isParent(joinInst);
@@ -295,7 +298,7 @@ export class SqlDbResolver extends Resolver {
295
298
  pathRef
296
299
  );
297
300
  } else {
298
- const relTableName = asTableName(rel.moduleName, rel.name);
301
+ const relTableName = asTableReference(rel.moduleName, rel.name);
299
302
  const jPathRef = `"${joinTableName}"."${PathAttributeName}"`;
300
303
  const fqn = ji.queryInstance.getFqName();
301
304
  const n1 = rel.getAliasForName(fqn);
@@ -333,7 +336,7 @@ export class SqlDbResolver extends Resolver {
333
336
  const queryVals: object = Object.fromEntries(
334
337
  newInstanceAttributes().set(PathAttributeName, target.attributes.get(PathAttributeName))
335
338
  );
336
- const tableName = asTableName(target.moduleName, target.name);
339
+ const tableName = asTableReference(target.moduleName, target.name);
337
340
  const ctx = this.getDbContext(target.getFqName());
338
341
  if (purge) {
339
342
  await hardDeleteRow(tableName, [[PathAttributeName, target.lookup(PathAttributeName)]], ctx);
@@ -374,7 +377,7 @@ export class SqlDbResolver extends Resolver {
374
377
  relEntry: Relationship,
375
378
  orUpdate: boolean
376
379
  ): Promise<void> {
377
- const n: string = asTableName(relEntry.moduleName, relEntry.name);
380
+ const n: string = asTableReference(relEntry.moduleName, relEntry.name);
378
381
  const [firstNode, secondNode] = relEntry.isFirstNode(node1) ? [node1, node2] : [node2, node1];
379
382
  const a1: string = relEntry.node1.alias;
380
383
  const a2: string = relEntry.node2.alias;
@@ -423,7 +426,7 @@ export class SqlDbResolver extends Resolver {
423
426
  if (options && options.has('limit')) {
424
427
  limit = options.get('limit') as number;
425
428
  }
426
- return await vectorStoreSearch(asTableName(moduleName, entryName), queryVec, limit, ctx);
429
+ return await vectorStoreSearch(asTableReference(moduleName, entryName), queryVec, limit, ctx);
427
430
  }
428
431
 
429
432
  public override async startTransaction(): Promise<string> {
@@ -1,7 +1,7 @@
1
1
  // Monarch syntax highlighting for the agentlang language.
2
2
  export default {
3
3
  keywords: [
4
- '@actions','@after','@as','@async','@before','@catch','@enum','@expr','@from','@meta','@oneof','@rbac','@ref','@upsert','@with_unique','agent','allow','and','await','between','contains','create','delete','else','entity','error','event','extends','false','for','if','import','in','into','like','module','not','not_found','onSubscription','or','purge','query','read','record','relationship','resolver','return','roles','subscribe','true','update','upsert','where','workflow'
4
+ '@actions','@after','@as','@async','@before','@catch','@distinct','@enum','@expr','@from','@into','@meta','@oneof','@rbac','@ref','@upsert','@with_unique','agent','allow','and','await','between','contains','create','delete','else','entity','error','event','extends','false','for','if','import','in','like','module','not','not_found','onSubscription','or','purge','query','read','record','relationship','resolver','return','roles','subscribe','true','update','upsert','where','workflow'
5
5
  ],
6
6
  operators: [
7
7
  '*','+',',','-','.','/',':',';','<','<=','<>','=','>','>=','?','@'
package/out/cli/docs.d.ts DELETED
@@ -1,2 +0,0 @@
1
- export declare const generateSwaggerDoc: (fileName: string) => Promise<void>;
2
- //# sourceMappingURL=docs.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"docs.d.ts","sourceRoot":"","sources":["../../src/cli/docs.ts"],"names":[],"mappings":"AA8OA,eAAO,MAAM,kBAAkB,GAAU,UAAU,MAAM,KAAG,OAAO,CAAC,IAAI,CAcvE,CAAC"}
package/out/cli/docs.js DELETED
@@ -1,236 +0,0 @@
1
- import { z } from 'zod/v4';
2
- import yaml from 'yaml';
3
- import { OpenApiGeneratorV3, OpenAPIRegistry, extendZodWithOpenApi } from '@asteasolutions/zod-to-openapi';
4
- import { getUserModuleNames, fetchModule } from '../runtime/module.js';
5
- import * as fs from 'node:fs/promises';
6
- import * as path from 'node:path';
7
- extendZodWithOpenApi(z);
8
- const registry = new OpenAPIRegistry();
9
- const bearerAuth = registry.registerComponent('securitySchemes', 'bearerAuth', {
10
- type: 'http',
11
- scheme: 'bearer',
12
- bearerFormat: 'JWT',
13
- });
14
- function getOpenApiDocumentation(registry, name, version) {
15
- const generator = new OpenApiGeneratorV3(registry.definitions);
16
- return generator.generateDocument({
17
- openapi: '3.0.0',
18
- info: {
19
- version: version,
20
- title: name,
21
- description: 'This is the API',
22
- },
23
- servers: [{ url: 'v1' }],
24
- });
25
- }
26
- function writeDocumentation(registry, docDir, name, version) {
27
- const docs = getOpenApiDocumentation(registry, name, version);
28
- const fileContent = yaml.stringify(docs);
29
- fs.mkdir(path.join(docDir, 'docs'), { recursive: true });
30
- fs.writeFile(`${docDir}/docs/openapi-docs.yml`, fileContent, {
31
- encoding: 'utf-8'
32
- });
33
- }
34
- function generateEntitiesEntries() {
35
- const modules = getUserModuleNames();
36
- return modules.map((moduleName) => {
37
- const module = fetchModule(moduleName);
38
- const entities = module.getEntityEntries();
39
- return entities.map((entity) => {
40
- const entityPath = `${moduleName}/${entity.name}`;
41
- const entitySchema = z.object(Object.fromEntries(Array.from(entity.schema.entries()).map(([key, value]) => [
42
- key,
43
- value.type === 'UUID' ? z.uuid() :
44
- value.type === 'String' ? z.string() :
45
- value.type === 'Int' ? z.number() :
46
- value.type === 'Float' ? z.number() :
47
- value.type === 'Boolean' ? z.boolean() :
48
- value.type === 'Date' ? z.string() :
49
- value.type === 'DateTime' ? z.string() :
50
- z.any()
51
- ]))).openapi(`${entity.name}Schema`);
52
- const sc = z.object({
53
- [entityPath]: entitySchema
54
- });
55
- const scresp = z.array(entitySchema);
56
- registry.registerPath({
57
- method: 'post',
58
- path: `/api/${entityPath}`,
59
- security: [{ [bearerAuth.name]: [] }],
60
- tags: [`${entityPath}`],
61
- request: {
62
- body: {
63
- content: {
64
- 'application/json': {
65
- schema: sc
66
- }
67
- }
68
- }
69
- },
70
- responses: {
71
- 200: {
72
- description: 'Success',
73
- content: {
74
- 'application/json': {
75
- schema: entitySchema
76
- },
77
- },
78
- },
79
- 500: {
80
- description: 'Internal Server Error'
81
- }
82
- },
83
- });
84
- registry.registerPath({
85
- method: 'get',
86
- path: `/api/${entityPath}`,
87
- security: [{ [bearerAuth.name]: [] }],
88
- tags: [`${entityPath}`],
89
- responses: {
90
- 200: {
91
- description: 'Success',
92
- content: {
93
- 'application/json': {
94
- schema: scresp
95
- },
96
- },
97
- },
98
- 404: {
99
- description: 'Not Found'
100
- },
101
- 500: {
102
- description: 'Internal Server Error'
103
- }
104
- },
105
- });
106
- registry.registerPath({
107
- method: 'put',
108
- path: `/api/${entityPath}/{id}`,
109
- tags: [`${entityPath}`],
110
- parameters: [{
111
- name: 'id',
112
- in: 'path',
113
- required: true,
114
- schema: { type: 'string' }
115
- }],
116
- security: [{ [bearerAuth.name]: [] }],
117
- request: {
118
- body: {
119
- content: {
120
- 'application/json': {
121
- schema: sc
122
- }
123
- }
124
- }
125
- },
126
- responses: {
127
- 200: {
128
- description: 'Success',
129
- content: {
130
- 'application/json': {
131
- schema: entitySchema
132
- },
133
- },
134
- },
135
- 404: {
136
- description: 'Not Found'
137
- },
138
- 500: {
139
- description: 'Internal Server Error'
140
- }
141
- },
142
- });
143
- registry.registerPath({
144
- method: 'delete',
145
- path: `/api/${entityPath}/{id}`,
146
- security: [{ [bearerAuth.name]: [] }],
147
- tags: [`${entityPath}`],
148
- parameters: [{
149
- name: 'id',
150
- in: 'path',
151
- required: true,
152
- schema: { type: 'string' }
153
- }],
154
- responses: {
155
- 200: {
156
- description: 'Success'
157
- },
158
- 404: {
159
- description: 'Not Found'
160
- },
161
- 500: {
162
- description: 'Internal Server Error'
163
- }
164
- },
165
- });
166
- });
167
- });
168
- }
169
- function generateEventsEntries() {
170
- const modules = getUserModuleNames();
171
- return modules.map((moduleName) => {
172
- const module = fetchModule(moduleName);
173
- const events = module.getEventEntries();
174
- return events.map((event) => {
175
- const eventPath = `${moduleName}/${event.name}`;
176
- const eventSchema = z.object(Object.fromEntries(Array.from(event.schema.entries()).map(([key, value]) => [
177
- key,
178
- value.type === 'UUID' ? z.uuid() :
179
- value.type === 'String' ? z.string() :
180
- value.type === 'Int' ? z.number() :
181
- value.type === 'Float' ? z.number() :
182
- value.type === 'Boolean' ? z.boolean() :
183
- value.type === 'Date' ? z.string() :
184
- value.type === 'DateTime' ? z.string() :
185
- z.any()
186
- ]))).openapi(`${event.name}Schema`);
187
- const sc = z.object({
188
- [eventPath]: eventSchema
189
- });
190
- registry.registerPath({
191
- method: 'post',
192
- path: `/api/${eventPath}`,
193
- security: [{ [bearerAuth.name]: [] }],
194
- tags: ['Events'],
195
- request: {
196
- body: {
197
- content: {
198
- 'application/json': {
199
- schema: sc
200
- }
201
- }
202
- }
203
- },
204
- responses: {
205
- 200: {
206
- description: 'Success'
207
- },
208
- 404: {
209
- description: 'Not Found'
210
- },
211
- 500: {
212
- description: 'Internal Server Error'
213
- }
214
- }
215
- });
216
- return {
217
- path: eventPath,
218
- name: event.name,
219
- schema: event.schema
220
- };
221
- });
222
- });
223
- }
224
- export const generateSwaggerDoc = async (fileName) => {
225
- console.log('Generating documentation...');
226
- const docDir = path.dirname(fileName) === '.' ? process.cwd() : path.resolve(process.cwd(), fileName);
227
- const packagePath = path.join(docDir, 'package.json');
228
- const packageContent = await fs.readFile(packagePath, 'utf-8');
229
- const pkg = JSON.parse(packageContent);
230
- const name = pkg.name || 'app';
231
- const version = pkg.version || '0.0.1';
232
- generateEntitiesEntries();
233
- generateEventsEntries();
234
- writeDocumentation(registry, docDir, name, version);
235
- };
236
- //# sourceMappingURL=docs.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"docs.js","sourceRoot":"","sources":["../../src/cli/docs.ts"],"names":[],"mappings":"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"}