@o-lang/olang 1.0.22 → 1.0.23

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 (2) hide show
  1. package/package.json +1 -1
  2. package/src/runtime.js +33 -18
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@o-lang/olang",
3
- "version": "1.0.22",
3
+ "version": "1.0.23",
4
4
  "author": "Olalekan Ogundipe <info@workfily.com>",
5
5
  "description": "O-Lang: A governance language for user-directed, rule-enforced agent workflows",
6
6
  "main": "./src/index.js",
package/src/runtime.js CHANGED
@@ -244,28 +244,43 @@ class RuntimeAPI {
244
244
  this.allowedResolvers.add('builtInMathResolver');
245
245
  }
246
246
 
247
+ // Handle different resolver input formats
248
+ let resolversToRun = [];
249
+
247
250
  if (agentResolver && Array.isArray(agentResolver._chain)) {
248
- for (let idx = 0; idx < agentResolver._chain.length; idx++) {
249
- const resolver = agentResolver._chain[idx];
250
- validateResolver(resolver);
251
-
252
- try {
253
- const out = await resolver(action, this.context);
254
- outputs.push(out);
255
- this.context[`__resolver_${idx}`] = out;
256
- } catch (e) {
257
- this.addWarning(`Resolver ${resolver?.name || idx} failed for action "${action}": ${e.message}`);
258
- outputs.push(null);
251
+ // Resolver chain mode
252
+ resolversToRun = agentResolver._chain;
253
+ } else if (Array.isArray(agentResolver)) {
254
+ // Array of resolvers mode (what npx olang passes with -r flags)
255
+ resolversToRun = agentResolver;
256
+ } else if (agentResolver) {
257
+ // Single resolver mode
258
+ resolversToRun = [agentResolver];
259
+ }
260
+
261
+ // ✅ Return the FIRST resolver that returns a non-undefined result
262
+ for (let idx = 0; idx < resolversToRun.length; idx++) {
263
+ const resolver = resolversToRun[idx];
264
+ validateResolver(resolver);
265
+
266
+ try {
267
+ const out = await resolver(action, this.context);
268
+ outputs.push(out);
269
+ this.context[`__resolver_${idx}`] = out;
270
+
271
+ // ✅ If resolver handled the action (returned non-undefined), use it immediately
272
+ if (out !== undefined) {
273
+ return out;
259
274
  }
275
+ } catch (e) {
276
+ this.addWarning(`Resolver ${resolver?.resolverName || resolver?.name || idx} failed for action "${action}": ${e.message}`);
277
+ outputs.push(null);
278
+ this.context[`__resolver_${idx}`] = null;
260
279
  }
261
- } else {
262
- validateResolver(agentResolver);
263
- const out = await agentResolver(action, this.context);
264
- outputs.push(out);
265
- this.context['__resolver_0'] = out;
266
280
  }
267
281
 
268
- return outputs[outputs.length - 1];
282
+ // If no resolver handled the action, return undefined
283
+ return undefined;
269
284
  };
270
285
 
271
286
  switch (stepType) {
@@ -403,7 +418,7 @@ class RuntimeAPI {
403
418
  const db = this.dbClient.client.db(process.env.DB_NAME || 'olang');
404
419
  await db.collection(step.collection).insertOne({
405
420
  workflow_name: this.context.workflow_name || 'unknown',
406
- sourceValue,
421
+ data: sourceValue,
407
422
  created_at: new Date()
408
423
  });
409
424
  break;