agentlang 0.8.2 → 0.8.4
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/out/cli/main.d.ts.map +1 -1
- package/out/cli/main.js +33 -2
- package/out/cli/main.js.map +1 -1
- package/out/runtime/interpreter.d.ts.map +1 -1
- package/out/runtime/interpreter.js +1 -42
- package/out/runtime/interpreter.js.map +1 -1
- package/out/runtime/loader.d.ts.map +1 -1
- package/out/runtime/loader.js +15 -4
- package/out/runtime/loader.js.map +1 -1
- package/out/runtime/module.d.ts +12 -0
- package/out/runtime/module.d.ts.map +1 -1
- package/out/runtime/module.js +64 -2
- package/out/runtime/module.js.map +1 -1
- package/out/runtime/modules/ai.d.ts.map +1 -1
- package/out/runtime/modules/ai.js +10 -5
- package/out/runtime/modules/ai.js.map +1 -1
- package/out/runtime/modules/auth.d.ts.map +1 -1
- package/out/runtime/modules/auth.js +1 -0
- package/out/runtime/modules/auth.js.map +1 -1
- package/out/runtime/modules/core.d.ts +3 -2
- package/out/runtime/modules/core.d.ts.map +1 -1
- package/out/runtime/modules/core.js +71 -6
- package/out/runtime/modules/core.js.map +1 -1
- package/out/runtime/state.d.ts +58 -0
- package/out/runtime/state.d.ts.map +1 -1
- package/out/runtime/state.js +12 -0
- package/out/runtime/state.js.map +1 -1
- package/package.json +1 -1
- package/src/cli/main.ts +38 -2
- package/src/runtime/interpreter.ts +1 -47
- package/src/runtime/loader.ts +14 -2
- package/src/runtime/module.ts +73 -2
- package/src/runtime/modules/ai.ts +10 -4
- package/src/runtime/modules/auth.ts +1 -0
- package/src/runtime/modules/core.ts +76 -5
- package/src/runtime/state.ts +14 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/runtime/state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,YAAY
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/runtime/state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiIvB,CAAC;AAEH,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAElD,eAAO,IAAI,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;AAEzC,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAGnD;AAID,wBAAgB,wBAAwB,SAEvC;AAED,wBAAgB,yBAAyB,SAExC;AAED,wBAAgB,mBAAmB,IAAI,OAAO,CAE7C;AAOD,qBAAa,QAAQ,CAAC,CAAC;IACrB,OAAO,CAAC,KAAK,CAAgC;IAC7C,OAAO,CAAC,KAAK,CAAS;gBAEV,KAAK,EAAE,MAAM;IAKzB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,eAAe,CAAC,EAAE,MAAM,GAAG,CAAC;IAiBvD,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAW/B,MAAM,CAAC,GAAG,EAAE,MAAM;CAGnB"}
|
package/out/runtime/state.js
CHANGED
|
@@ -113,6 +113,18 @@ export const ConfigSchema = z.object({
|
|
|
113
113
|
level: z.enum(['error', 'warn', 'info', 'debug']).default('info'),
|
|
114
114
|
})
|
|
115
115
|
.optional(),
|
|
116
|
+
retry: z
|
|
117
|
+
.array(z.object({
|
|
118
|
+
name: z.string(),
|
|
119
|
+
attempts: z.number(),
|
|
120
|
+
backoff: z.object({
|
|
121
|
+
strategy: z.enum(['linear', 'exponential', 'constant']),
|
|
122
|
+
delay: z.number(),
|
|
123
|
+
magnitude: z.enum(['seconds', 'milliSeconds', 'minutes']),
|
|
124
|
+
factor: z.number(),
|
|
125
|
+
}),
|
|
126
|
+
}))
|
|
127
|
+
.optional(),
|
|
116
128
|
});
|
|
117
129
|
export let AppConfig;
|
|
118
130
|
export function setAppConfig(config) {
|
package/out/runtime/state.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/runtime/state.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/runtime/state.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agentlang",
|
|
3
3
|
"description": "The easiest way to build the most reliable AI agents - enterprise-grade teams of AI agents that collaborate with each other and humans",
|
|
4
|
-
"version": "0.8.
|
|
4
|
+
"version": "0.8.4",
|
|
5
5
|
"license": "Sustainable Use License",
|
|
6
6
|
"author": "agentlang-ai",
|
|
7
7
|
"homepage": "https://github.com/agentlang-ai/agentlang#readme",
|
package/src/cli/main.ts
CHANGED
|
@@ -17,7 +17,7 @@ import * as url from 'node:url';
|
|
|
17
17
|
import * as fs from 'node:fs/promises';
|
|
18
18
|
import * as path from 'node:path';
|
|
19
19
|
import { logger, updateLoggerFromConfig } from '../runtime/logger.js';
|
|
20
|
-
import { Module } from '../runtime/module.js';
|
|
20
|
+
import { Instance, Module } from '../runtime/module.js';
|
|
21
21
|
import { ModuleDefinition } from '../language/generated/ast.js';
|
|
22
22
|
import { Config } from '../runtime/state.js';
|
|
23
23
|
import { prepareIntegrations } from '../runtime/integrations.js';
|
|
@@ -32,6 +32,7 @@ import { importModule } from '../runtime/jsmodules.js';
|
|
|
32
32
|
import {
|
|
33
33
|
isRuntimeMode_dev,
|
|
34
34
|
isRuntimeMode_prod,
|
|
35
|
+
isRuntimeMode_test,
|
|
35
36
|
setInternDynamicModuleFn,
|
|
36
37
|
setRuntimeMode_generate_migration,
|
|
37
38
|
setRuntimeMode_init_schema,
|
|
@@ -41,7 +42,11 @@ import {
|
|
|
41
42
|
updateEndpoints,
|
|
42
43
|
} from '../runtime/defs.js';
|
|
43
44
|
import { initGlobalApi } from '../runtime/api.js';
|
|
44
|
-
import {
|
|
45
|
+
import {
|
|
46
|
+
initCoreModuleManager,
|
|
47
|
+
lookupTimersWithRunningStatus,
|
|
48
|
+
triggerTimer,
|
|
49
|
+
} from '../runtime/modules/core.js';
|
|
45
50
|
|
|
46
51
|
const __dirname = url.fileURLToPath(new URL('.', import.meta.url));
|
|
47
52
|
|
|
@@ -134,6 +139,7 @@ export async function runPostInitTasks(appSpec?: ApplicationSpec, config?: Confi
|
|
|
134
139
|
await runInitFunctions();
|
|
135
140
|
await runStandaloneStatements();
|
|
136
141
|
initCoreModuleManager();
|
|
142
|
+
await runPersistedTimers();
|
|
137
143
|
logger.info(
|
|
138
144
|
`Running application ${appSpec?.name || 'unknown'} version ${appSpec?.version || 'unknown'} on port ${config?.service?.port || 8080}`
|
|
139
145
|
);
|
|
@@ -169,6 +175,36 @@ export async function runPreInitTasks(): Promise<boolean> {
|
|
|
169
175
|
return result;
|
|
170
176
|
}
|
|
171
177
|
|
|
178
|
+
async function runPersistedTimers() {
|
|
179
|
+
if (!isRuntimeMode_test()) {
|
|
180
|
+
const insts: Instance[] = await lookupTimersWithRunningStatus();
|
|
181
|
+
if (insts) {
|
|
182
|
+
for (let i = 0; i < insts.length; ++i) {
|
|
183
|
+
const inst: Instance = insts[i];
|
|
184
|
+
if (await restartTimer(inst)) {
|
|
185
|
+
logger.info(`Timer ${inst.lookup('name')} setup to restart`);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
async function restartTimer(timerInst: Instance): Promise<boolean> {
|
|
193
|
+
const n = timerInst.lookup('name');
|
|
194
|
+
try {
|
|
195
|
+
if (isRuntimeMode_prod()) {
|
|
196
|
+
// TODO: create and configure an independent timer-managerment service.
|
|
197
|
+
logger.warn(`Cannot restart timer ${n}, timer management service is not configured`);
|
|
198
|
+
} else {
|
|
199
|
+
triggerTimer(timerInst);
|
|
200
|
+
return true;
|
|
201
|
+
}
|
|
202
|
+
} catch (reason: any) {
|
|
203
|
+
logger.warn(`Error while restarting timer ${n} - ${reason}`);
|
|
204
|
+
}
|
|
205
|
+
return false;
|
|
206
|
+
}
|
|
207
|
+
|
|
172
208
|
async function internDynamicModule(name: string, definition: string): Promise<string> {
|
|
173
209
|
await refreshModuleDefinition(name, definition);
|
|
174
210
|
await resetDefaultDatabase();
|
|
@@ -98,8 +98,7 @@ import {
|
|
|
98
98
|
addUpdateAudit,
|
|
99
99
|
createSuspension,
|
|
100
100
|
flushMonitoringData,
|
|
101
|
-
|
|
102
|
-
setTimerRunning,
|
|
101
|
+
triggerTimer,
|
|
103
102
|
} from './modules/core.js';
|
|
104
103
|
import { invokeModuleFn } from './jsmodules.js';
|
|
105
104
|
import { invokeOpenApiEvent, isOpenApiEventInstance } from './openapi.js';
|
|
@@ -1698,51 +1697,6 @@ async function handleDocEvent(inst: Instance, env: Environment): Promise<void> {
|
|
|
1698
1697
|
}
|
|
1699
1698
|
}
|
|
1700
1699
|
|
|
1701
|
-
function triggerTimer(timerInst: Instance): Instance {
|
|
1702
|
-
const dur = timerInst.lookup('duration');
|
|
1703
|
-
const unit = timerInst.lookup('unit');
|
|
1704
|
-
let millisecs = 0;
|
|
1705
|
-
switch (unit) {
|
|
1706
|
-
case 'millisecond': {
|
|
1707
|
-
millisecs = dur;
|
|
1708
|
-
break;
|
|
1709
|
-
}
|
|
1710
|
-
case 'second': {
|
|
1711
|
-
millisecs = dur * 1000;
|
|
1712
|
-
break;
|
|
1713
|
-
}
|
|
1714
|
-
case 'minute': {
|
|
1715
|
-
millisecs = dur * 60 * 1000;
|
|
1716
|
-
break;
|
|
1717
|
-
}
|
|
1718
|
-
case 'hour': {
|
|
1719
|
-
millisecs = dur * 60 * 60 * 1000;
|
|
1720
|
-
break;
|
|
1721
|
-
}
|
|
1722
|
-
}
|
|
1723
|
-
const eventName = nameToPath(timerInst.lookup('trigger'));
|
|
1724
|
-
const m = eventName.hasModule() ? eventName.getModuleName() : timerInst.moduleName;
|
|
1725
|
-
const n = eventName.getEntryName();
|
|
1726
|
-
const inst = makeInstance(m, n, newInstanceAttributes());
|
|
1727
|
-
const name = timerInst.lookup('name');
|
|
1728
|
-
const timer = setInterval(async () => {
|
|
1729
|
-
const env = new Environment();
|
|
1730
|
-
try {
|
|
1731
|
-
await evaluate(
|
|
1732
|
-
inst,
|
|
1733
|
-
(result: Result) => logger.debug(`Timer ${name} ran with result ${result}`),
|
|
1734
|
-
env
|
|
1735
|
-
);
|
|
1736
|
-
await env.commitAllTransactions();
|
|
1737
|
-
await maybeCancelTimer(name, timer, env);
|
|
1738
|
-
} catch (reason: any) {
|
|
1739
|
-
logger.error(`Timer ${name} raised error: ${reason}`);
|
|
1740
|
-
}
|
|
1741
|
-
}, millisecs);
|
|
1742
|
-
setTimerRunning(timerInst);
|
|
1743
|
-
return timerInst;
|
|
1744
|
-
}
|
|
1745
|
-
|
|
1746
1700
|
async function computeExprAttributes(
|
|
1747
1701
|
inst: Instance,
|
|
1748
1702
|
origAttrs: SetAttribute[] | undefined,
|
package/src/runtime/loader.ts
CHANGED
|
@@ -69,6 +69,7 @@ import {
|
|
|
69
69
|
addAgent,
|
|
70
70
|
fetchModule,
|
|
71
71
|
Retry,
|
|
72
|
+
addGlobalRetry,
|
|
72
73
|
} from './module.js';
|
|
73
74
|
import {
|
|
74
75
|
asStringLiteralsMap,
|
|
@@ -81,6 +82,7 @@ import {
|
|
|
81
82
|
preprocessRawConfig,
|
|
82
83
|
registerInitFunction,
|
|
83
84
|
rootRef,
|
|
85
|
+
ScratchModuleName,
|
|
84
86
|
} from './util.js';
|
|
85
87
|
import { getFileSystem, toFsPath, readFile, readdir, exists } from '../utils/fs-utils.js';
|
|
86
88
|
import { URI } from 'vscode-uri';
|
|
@@ -395,7 +397,7 @@ export async function loadAppConfig(configDir: string): Promise<Config> {
|
|
|
395
397
|
let cfg = cfgObj
|
|
396
398
|
? await configFromObject(cfgObj)
|
|
397
399
|
: await loadRawConfig(`${configDir}${path.sep}app.config.json`);
|
|
398
|
-
const envAppConfig = process.env.APP_CONFIG;
|
|
400
|
+
const envAppConfig = typeof process !== 'undefined' ? process.env.APP_CONFIG : undefined;
|
|
399
401
|
if (envAppConfig) {
|
|
400
402
|
const envConfig = JSON.parse(envAppConfig);
|
|
401
403
|
cfg = { ...cfg, ...envConfig };
|
|
@@ -1170,6 +1172,7 @@ export async function internModule(
|
|
|
1170
1172
|
// Process imports sequentially to ensure all JS modules are loaded before definitions
|
|
1171
1173
|
for (const imp of module.imports as Import[]) {
|
|
1172
1174
|
await importModule(imp.path, imp.name, moduleFileName);
|
|
1175
|
+
r.addImport({ name: imp.name, path: imp.path });
|
|
1173
1176
|
}
|
|
1174
1177
|
for (let i = 0; i < module.defs.length; ++i) {
|
|
1175
1178
|
const def = module.defs[i];
|
|
@@ -1234,7 +1237,16 @@ async function configFromObject(cfgObj: any, validate: boolean = true): Promise<
|
|
|
1234
1237
|
if (pats.length > 0) {
|
|
1235
1238
|
await evaluateConfigPatterns(pats.join('\n'));
|
|
1236
1239
|
}
|
|
1237
|
-
|
|
1240
|
+
const result = ConfigSchema.parse(cfg);
|
|
1241
|
+
cfg.retry?.forEach((r: any) => {
|
|
1242
|
+
const retry: Retry = new Retry(r.name, ScratchModuleName, r.attempts)
|
|
1243
|
+
.setBackoffDelay(r.backoff.delay)
|
|
1244
|
+
.setBackoffFactor(r.backoff.factor)
|
|
1245
|
+
.setBackoffStrategy(r.backoff.strategy[0])
|
|
1246
|
+
.setBackoffMagnitude(r.backoff.magnitude);
|
|
1247
|
+
addGlobalRetry(retry);
|
|
1248
|
+
});
|
|
1249
|
+
return result;
|
|
1238
1250
|
}
|
|
1239
1251
|
return rawConfig;
|
|
1240
1252
|
}
|
package/src/runtime/module.ts
CHANGED
|
@@ -1801,6 +1801,11 @@ export class Retry extends ModuleEntry {
|
|
|
1801
1801
|
};
|
|
1802
1802
|
}
|
|
1803
1803
|
|
|
1804
|
+
setBackoffStrategy(s: BackoffStrategy): Retry {
|
|
1805
|
+
this.backoff.strategy = s;
|
|
1806
|
+
return this;
|
|
1807
|
+
}
|
|
1808
|
+
|
|
1804
1809
|
setExponentialBackoff(): Retry {
|
|
1805
1810
|
this.backoff.strategy = 'e';
|
|
1806
1811
|
return this;
|
|
@@ -1835,6 +1840,17 @@ export class Retry extends ModuleEntry {
|
|
|
1835
1840
|
return this;
|
|
1836
1841
|
}
|
|
1837
1842
|
|
|
1843
|
+
setBackoffMagnitude(m: string): Retry {
|
|
1844
|
+
if (m[0] === 's') {
|
|
1845
|
+
this.backoff.magnitude = 's';
|
|
1846
|
+
} else if (m.startsWith('milli')) {
|
|
1847
|
+
this.backoff.magnitude = 'ms';
|
|
1848
|
+
} else {
|
|
1849
|
+
this.backoff.magnitude = 'm';
|
|
1850
|
+
}
|
|
1851
|
+
return this;
|
|
1852
|
+
}
|
|
1853
|
+
|
|
1838
1854
|
setBackoffMagnitudeAsMilliseconds(): Retry {
|
|
1839
1855
|
this.backoff.magnitude = 'ms';
|
|
1840
1856
|
return this;
|
|
@@ -1995,9 +2011,15 @@ export function isEmptyWorkflow(wf: Workflow): boolean {
|
|
|
1995
2011
|
return wf == EmptyWorkflow;
|
|
1996
2012
|
}
|
|
1997
2013
|
|
|
2014
|
+
export type ModuleImportEntry = {
|
|
2015
|
+
path: string;
|
|
2016
|
+
name: string;
|
|
2017
|
+
};
|
|
2018
|
+
|
|
1998
2019
|
export class Module {
|
|
1999
2020
|
name: string;
|
|
2000
2021
|
entries: ModuleEntry[];
|
|
2022
|
+
imports: ModuleImportEntry[] | undefined;
|
|
2001
2023
|
|
|
2002
2024
|
constructor(name: string) {
|
|
2003
2025
|
this.name = name;
|
|
@@ -2009,6 +2031,21 @@ export class Module {
|
|
|
2009
2031
|
return entry;
|
|
2010
2032
|
}
|
|
2011
2033
|
|
|
2034
|
+
addImport(entry: ModuleImportEntry): Module {
|
|
2035
|
+
if (this.imports === undefined) {
|
|
2036
|
+
this.imports = new Array<ModuleImportEntry>();
|
|
2037
|
+
}
|
|
2038
|
+
this.imports?.push(entry);
|
|
2039
|
+
return this;
|
|
2040
|
+
}
|
|
2041
|
+
|
|
2042
|
+
removeImportAt(index: number): Module {
|
|
2043
|
+
if (index >= 0) {
|
|
2044
|
+
this.imports?.splice(index, 1);
|
|
2045
|
+
}
|
|
2046
|
+
return this;
|
|
2047
|
+
}
|
|
2048
|
+
|
|
2012
2049
|
getConfigEntity(): Entity | undefined {
|
|
2013
2050
|
return this.getEntityEntries().find((e: Entity) => {
|
|
2014
2051
|
return e.isConfigEntity();
|
|
@@ -2450,6 +2487,17 @@ export class Module {
|
|
|
2450
2487
|
return false;
|
|
2451
2488
|
}
|
|
2452
2489
|
|
|
2490
|
+
private importsAsString(): string {
|
|
2491
|
+
if (this.imports !== undefined) {
|
|
2492
|
+
const ss = new Array<string>();
|
|
2493
|
+
this.imports.forEach((me: ModuleImportEntry) => {
|
|
2494
|
+
ss.push(`import "${me.path}" @as ${me.name}`);
|
|
2495
|
+
});
|
|
2496
|
+
return `\n${ss.join('\n')}\n`;
|
|
2497
|
+
}
|
|
2498
|
+
return '';
|
|
2499
|
+
}
|
|
2500
|
+
|
|
2453
2501
|
toString(): string {
|
|
2454
2502
|
const ss: Array<string> = [];
|
|
2455
2503
|
this.entries.forEach((me: ModuleEntry) => {
|
|
@@ -2458,8 +2506,27 @@ export class Module {
|
|
|
2458
2506
|
}
|
|
2459
2507
|
ss.push(me.toString());
|
|
2460
2508
|
});
|
|
2461
|
-
return `module ${this.name}\n\n${ss.join('\n')}`;
|
|
2509
|
+
return `module ${this.name}\n${this.importsAsString()}\n${ss.join('\n')}`;
|
|
2510
|
+
}
|
|
2511
|
+
}
|
|
2512
|
+
|
|
2513
|
+
let GlobalRetries: Array<Retry> | undefined = undefined;
|
|
2514
|
+
|
|
2515
|
+
export function addGlobalRetry(r: Retry): Retry {
|
|
2516
|
+
if (GlobalRetries === undefined) {
|
|
2517
|
+
GlobalRetries = new Array<Retry>();
|
|
2518
|
+
}
|
|
2519
|
+
GlobalRetries?.push(r);
|
|
2520
|
+
return r;
|
|
2521
|
+
}
|
|
2522
|
+
|
|
2523
|
+
export function getGlobalRetry(name: string): Retry | undefined {
|
|
2524
|
+
if (GlobalRetries !== undefined) {
|
|
2525
|
+
return GlobalRetries.find((r: Retry) => {
|
|
2526
|
+
return r.name === name;
|
|
2527
|
+
});
|
|
2462
2528
|
}
|
|
2529
|
+
return undefined;
|
|
2463
2530
|
}
|
|
2464
2531
|
|
|
2465
2532
|
declare global {
|
|
@@ -3777,7 +3844,11 @@ function maybeSetDefaultAttributeValues(
|
|
|
3777
3844
|
if (cv === undefined || cv === null) {
|
|
3778
3845
|
if (isString(v)) {
|
|
3779
3846
|
if (defaultValueIsFunctionCall(v)) {
|
|
3780
|
-
|
|
3847
|
+
try {
|
|
3848
|
+
v = eval(v);
|
|
3849
|
+
} catch {
|
|
3850
|
+
v = (0, eval)(`globalThis.${v}`);
|
|
3851
|
+
}
|
|
3781
3852
|
}
|
|
3782
3853
|
}
|
|
3783
3854
|
attributes.set(k, v);
|
|
@@ -20,6 +20,7 @@ import {
|
|
|
20
20
|
Decision,
|
|
21
21
|
fetchModule,
|
|
22
22
|
getDecision,
|
|
23
|
+
getGlobalRetry,
|
|
23
24
|
Instance,
|
|
24
25
|
instanceToObject,
|
|
25
26
|
isAgent,
|
|
@@ -198,11 +199,16 @@ export class AgentInstance {
|
|
|
198
199
|
if (agent.retry) {
|
|
199
200
|
let n = agent.retry;
|
|
200
201
|
if (!isFqName(n)) {
|
|
201
|
-
|
|
202
|
+
agent.retryObj = getGlobalRetry(n);
|
|
203
|
+
if (agent.retryObj === undefined) {
|
|
204
|
+
n = `${agent.moduleName}/${n}`;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
if (agent.retryObj === undefined) {
|
|
208
|
+
const parts = splitFqName(n);
|
|
209
|
+
const m = fetchModule(parts[0]);
|
|
210
|
+
agent.retryObj = m.getRetry(parts[1]);
|
|
202
211
|
}
|
|
203
|
-
const parts = splitFqName(n);
|
|
204
|
-
const m = fetchModule(parts[0]);
|
|
205
|
-
agent.retryObj = m.getRetry(parts[1]);
|
|
206
212
|
}
|
|
207
213
|
return agent;
|
|
208
214
|
}
|
|
@@ -36,6 +36,7 @@ entity User {
|
|
|
36
36
|
email Email @unique @indexed,
|
|
37
37
|
firstName String,
|
|
38
38
|
lastName String,
|
|
39
|
+
profilePicture String @optional,
|
|
39
40
|
lastLoginTime DateTime @default(now()),
|
|
40
41
|
status @enum("Active", "Invited", "Inactive") @default("Active"),
|
|
41
42
|
@rbac [(allow: [read, delete, update, create], where: auth.user = this.id)],
|
|
@@ -8,6 +8,7 @@ import {
|
|
|
8
8
|
isString,
|
|
9
9
|
restoreSpecialChars,
|
|
10
10
|
makeCoreModuleName,
|
|
11
|
+
nameToPath,
|
|
11
12
|
} from '../util.js';
|
|
12
13
|
import {
|
|
13
14
|
fetchModule,
|
|
@@ -48,7 +49,8 @@ entity timer {
|
|
|
48
49
|
duration Int,
|
|
49
50
|
unit @enum("millisecond", "second", "minute", "hour") @default("second"),
|
|
50
51
|
trigger String,
|
|
51
|
-
|
|
52
|
+
repeat Boolean @default(true),
|
|
53
|
+
status @enum("I", "C", "R") @default("I") @indexed // Inited, Cancelled, Running
|
|
52
54
|
}
|
|
53
55
|
|
|
54
56
|
entity auditlog {
|
|
@@ -183,20 +185,89 @@ export function registerCoreModules() {
|
|
|
183
185
|
});
|
|
184
186
|
}
|
|
185
187
|
|
|
186
|
-
|
|
187
|
-
|
|
188
|
+
function isTimerCancelled(inst: Instance): boolean {
|
|
189
|
+
return inst.lookup('status') === 'C';
|
|
188
190
|
}
|
|
189
191
|
|
|
190
|
-
|
|
192
|
+
// If the timer is deleted or its status is set to 'C' (cancelled), then clear the associated timer.
|
|
193
|
+
async function maybeClearTimer(name: string, timer: NodeJS.Timeout, env: Environment) {
|
|
191
194
|
await parseAndEvaluateStatement(`{agentlang/timer {name? "${name}"}}`, undefined, env).then(
|
|
192
195
|
(result: any) => {
|
|
193
|
-
if (
|
|
196
|
+
if (
|
|
197
|
+
result === null ||
|
|
198
|
+
(result instanceof Array && (result.length == 0 || isTimerCancelled(result[0])))
|
|
199
|
+
) {
|
|
194
200
|
clearInterval(timer);
|
|
195
201
|
}
|
|
196
202
|
}
|
|
197
203
|
);
|
|
198
204
|
}
|
|
199
205
|
|
|
206
|
+
export function triggerTimer(timerInst: Instance): Instance {
|
|
207
|
+
const dur = timerInst.lookup('duration');
|
|
208
|
+
const unit = timerInst.lookup('unit');
|
|
209
|
+
let millisecs = 0;
|
|
210
|
+
switch (unit) {
|
|
211
|
+
case 'millisecond': {
|
|
212
|
+
millisecs = dur;
|
|
213
|
+
break;
|
|
214
|
+
}
|
|
215
|
+
case 'second': {
|
|
216
|
+
millisecs = dur * 1000;
|
|
217
|
+
break;
|
|
218
|
+
}
|
|
219
|
+
case 'minute': {
|
|
220
|
+
millisecs = dur * 60 * 1000;
|
|
221
|
+
break;
|
|
222
|
+
}
|
|
223
|
+
case 'hour': {
|
|
224
|
+
millisecs = dur * 60 * 60 * 1000;
|
|
225
|
+
break;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
const eventName = nameToPath(timerInst.lookup('trigger'));
|
|
229
|
+
const m = eventName.hasModule() ? eventName.getModuleName() : timerInst.moduleName;
|
|
230
|
+
const n = eventName.getEntryName();
|
|
231
|
+
const inst = makeInstance(m, n, newInstanceAttributes());
|
|
232
|
+
const name = timerInst.lookup('name');
|
|
233
|
+
const repeat = timerInst.lookup('repeat');
|
|
234
|
+
const timer = setInterval(async () => {
|
|
235
|
+
const env = new Environment();
|
|
236
|
+
try {
|
|
237
|
+
await evaluate(
|
|
238
|
+
inst,
|
|
239
|
+
(result: any) => logger.debug(`Timer ${name} ran with result ${result}`),
|
|
240
|
+
env
|
|
241
|
+
);
|
|
242
|
+
await env.commitAllTransactions();
|
|
243
|
+
if (!repeat) clearInterval(timer);
|
|
244
|
+
else await maybeClearTimer(name, timer, env);
|
|
245
|
+
} catch (reason: any) {
|
|
246
|
+
logger.error(`Timer ${name} raised error: ${reason}`);
|
|
247
|
+
}
|
|
248
|
+
}, millisecs);
|
|
249
|
+
timerInst.attributes.set('status', 'R');
|
|
250
|
+
return timerInst;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
export async function saveTimerStatus(timerInst: Instance): Promise<boolean> {
|
|
254
|
+
const name = timerInst.lookup('name');
|
|
255
|
+
const status = timerInst.lookup('status');
|
|
256
|
+
const env = new Environment();
|
|
257
|
+
try {
|
|
258
|
+
await parseAndEvaluateStatement(`{agentlang/timer {name? "${name}", "status": "${status}"}}`);
|
|
259
|
+
await env.commitAllTransactions();
|
|
260
|
+
} catch (reason: any) {
|
|
261
|
+
logger.warn(`Failed to save status of timer ${name} - ${reason}`);
|
|
262
|
+
return false;
|
|
263
|
+
}
|
|
264
|
+
return true;
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
export async function lookupTimersWithRunningStatus(): Promise<Instance[]> {
|
|
268
|
+
return await parseAndEvaluateStatement(`{agentlang/timer {status? "R"}}`);
|
|
269
|
+
}
|
|
270
|
+
|
|
200
271
|
async function addAudit(
|
|
201
272
|
env: Environment,
|
|
202
273
|
action: 'c' | 'd' | 'u',
|
package/src/runtime/state.ts
CHANGED
|
@@ -116,6 +116,20 @@ export const ConfigSchema = z.object({
|
|
|
116
116
|
level: z.enum(['error', 'warn', 'info', 'debug']).default('info'),
|
|
117
117
|
})
|
|
118
118
|
.optional(),
|
|
119
|
+
retry: z
|
|
120
|
+
.array(
|
|
121
|
+
z.object({
|
|
122
|
+
name: z.string(),
|
|
123
|
+
attempts: z.number(),
|
|
124
|
+
backoff: z.object({
|
|
125
|
+
strategy: z.enum(['linear', 'exponential', 'constant']),
|
|
126
|
+
delay: z.number(),
|
|
127
|
+
magnitude: z.enum(['seconds', 'milliSeconds', 'minutes']),
|
|
128
|
+
factor: z.number(),
|
|
129
|
+
}),
|
|
130
|
+
})
|
|
131
|
+
)
|
|
132
|
+
.optional(),
|
|
119
133
|
});
|
|
120
134
|
|
|
121
135
|
export type Config = z.infer<typeof ConfigSchema>;
|