@sensigo/realm 0.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/README.md +150 -0
- package/dist/adapters/adapter-utils.d.ts +14 -0
- package/dist/adapters/adapter-utils.d.ts.map +1 -0
- package/dist/adapters/adapter-utils.js +18 -0
- package/dist/adapters/adapter-utils.js.map +1 -0
- package/dist/adapters/airtable-adapter.d.ts +51 -0
- package/dist/adapters/airtable-adapter.d.ts.map +1 -0
- package/dist/adapters/airtable-adapter.js +425 -0
- package/dist/adapters/airtable-adapter.js.map +1 -0
- package/dist/adapters/file-adapter.d.ts +14 -0
- package/dist/adapters/file-adapter.d.ts.map +1 -0
- package/dist/adapters/file-adapter.js +89 -0
- package/dist/adapters/file-adapter.js.map +1 -0
- package/dist/adapters/github-adapter.d.ts +40 -0
- package/dist/adapters/github-adapter.d.ts.map +1 -0
- package/dist/adapters/github-adapter.js +286 -0
- package/dist/adapters/github-adapter.js.map +1 -0
- package/dist/adapters/gorgias-adapter.d.ts +40 -0
- package/dist/adapters/gorgias-adapter.d.ts.map +1 -0
- package/dist/adapters/gorgias-adapter.js +300 -0
- package/dist/adapters/gorgias-adapter.js.map +1 -0
- package/dist/adapters/http-adapter.d.ts +28 -0
- package/dist/adapters/http-adapter.d.ts.map +1 -0
- package/dist/adapters/http-adapter.js +97 -0
- package/dist/adapters/http-adapter.js.map +1 -0
- package/dist/adapters/mock-adapter.d.ts +16 -0
- package/dist/adapters/mock-adapter.d.ts.map +1 -0
- package/dist/adapters/mock-adapter.js +61 -0
- package/dist/adapters/mock-adapter.js.map +1 -0
- package/dist/adapters/notion-adapter.d.ts +54 -0
- package/dist/adapters/notion-adapter.d.ts.map +1 -0
- package/dist/adapters/notion-adapter.js +751 -0
- package/dist/adapters/notion-adapter.js.map +1 -0
- package/dist/adapters/parcelpanel-adapter.d.ts +60 -0
- package/dist/adapters/parcelpanel-adapter.d.ts.map +1 -0
- package/dist/adapters/parcelpanel-adapter.js +251 -0
- package/dist/adapters/parcelpanel-adapter.js.map +1 -0
- package/dist/adapters/rate-limiter.d.ts +26 -0
- package/dist/adapters/rate-limiter.d.ts.map +1 -0
- package/dist/adapters/rate-limiter.js +3 -0
- package/dist/adapters/rate-limiter.js.map +1 -0
- package/dist/adapters/shopify-adapter.d.ts +92 -0
- package/dist/adapters/shopify-adapter.d.ts.map +1 -0
- package/dist/adapters/shopify-adapter.js +415 -0
- package/dist/adapters/shopify-adapter.js.map +1 -0
- package/dist/adapters/slack-adapter.d.ts +18 -0
- package/dist/adapters/slack-adapter.d.ts.map +1 -0
- package/dist/adapters/slack-adapter.js +81 -0
- package/dist/adapters/slack-adapter.js.map +1 -0
- package/dist/adapters/token-bucket.d.ts +27 -0
- package/dist/adapters/token-bucket.d.ts.map +1 -0
- package/dist/adapters/token-bucket.js +109 -0
- package/dist/adapters/token-bucket.js.map +1 -0
- package/dist/config/secrets.d.ts +15 -0
- package/dist/config/secrets.d.ts.map +1 -0
- package/dist/config/secrets.js +33 -0
- package/dist/config/secrets.js.map +1 -0
- package/dist/engine/eligibility.d.ts +50 -0
- package/dist/engine/eligibility.d.ts.map +1 -0
- package/dist/engine/eligibility.js +267 -0
- package/dist/engine/eligibility.js.map +1 -0
- package/dist/engine/error-resolution.d.ts +20 -0
- package/dist/engine/error-resolution.d.ts.map +1 -0
- package/dist/engine/error-resolution.js +32 -0
- package/dist/engine/error-resolution.js.map +1 -0
- package/dist/engine/execution-loop.d.ts +101 -0
- package/dist/engine/execution-loop.d.ts.map +1 -0
- package/dist/engine/execution-loop.js +1156 -0
- package/dist/engine/execution-loop.js.map +1 -0
- package/dist/engine/lifecycle.d.ts +14 -0
- package/dist/engine/lifecycle.d.ts.map +1 -0
- package/dist/engine/lifecycle.js +17 -0
- package/dist/engine/lifecycle.js.map +1 -0
- package/dist/engine/precondition.d.ts +30 -0
- package/dist/engine/precondition.d.ts.map +1 -0
- package/dist/engine/precondition.js +125 -0
- package/dist/engine/precondition.js.map +1 -0
- package/dist/engine/prompt-template.d.ts +25 -0
- package/dist/engine/prompt-template.d.ts.map +1 -0
- package/dist/engine/prompt-template.js +66 -0
- package/dist/engine/prompt-template.js.map +1 -0
- package/dist/engine/render-template.d.ts +52 -0
- package/dist/engine/render-template.d.ts.map +1 -0
- package/dist/engine/render-template.js +548 -0
- package/dist/engine/render-template.js.map +1 -0
- package/dist/engine/state-guard.d.ts +15 -0
- package/dist/engine/state-guard.d.ts.map +1 -0
- package/dist/engine/state-guard.js +40 -0
- package/dist/engine/state-guard.js.map +1 -0
- package/dist/engine/trace-normalizer.d.ts +36 -0
- package/dist/engine/trace-normalizer.d.ts.map +1 -0
- package/dist/engine/trace-normalizer.js +146 -0
- package/dist/engine/trace-normalizer.js.map +1 -0
- package/dist/engine/trace-policy.d.ts +53 -0
- package/dist/engine/trace-policy.d.ts.map +1 -0
- package/dist/engine/trace-policy.js +35 -0
- package/dist/engine/trace-policy.js.map +1 -0
- package/dist/engine/workflow-context-loader.d.ts +9 -0
- package/dist/engine/workflow-context-loader.d.ts.map +1 -0
- package/dist/engine/workflow-context-loader.js +41 -0
- package/dist/engine/workflow-context-loader.js.map +1 -0
- package/dist/evidence/snapshot.d.ts +38 -0
- package/dist/evidence/snapshot.d.ts.map +1 -0
- package/dist/evidence/snapshot.js +53 -0
- package/dist/evidence/snapshot.js.map +1 -0
- package/dist/extensions/default-registry.d.ts +19 -0
- package/dist/extensions/default-registry.d.ts.map +1 -0
- package/dist/extensions/default-registry.js +31 -0
- package/dist/extensions/default-registry.js.map +1 -0
- package/dist/extensions/processor.d.ts +13 -0
- package/dist/extensions/processor.d.ts.map +1 -0
- package/dist/extensions/processor.js +3 -0
- package/dist/extensions/processor.js.map +1 -0
- package/dist/extensions/registry.d.ts +25 -0
- package/dist/extensions/registry.d.ts.map +1 -0
- package/dist/extensions/registry.js +43 -0
- package/dist/extensions/registry.js.map +1 -0
- package/dist/extensions/service-adapter.d.ts +35 -0
- package/dist/extensions/service-adapter.d.ts.map +1 -0
- package/dist/extensions/service-adapter.js +3 -0
- package/dist/extensions/service-adapter.js.map +1 -0
- package/dist/extensions/step-handler.d.ts +28 -0
- package/dist/extensions/step-handler.d.ts.map +1 -0
- package/dist/extensions/step-handler.js +3 -0
- package/dist/extensions/step-handler.js.map +1 -0
- package/dist/handlers/primitives/compare-strings.d.ts +13 -0
- package/dist/handlers/primitives/compare-strings.d.ts.map +1 -0
- package/dist/handlers/primitives/compare-strings.js +28 -0
- package/dist/handlers/primitives/compare-strings.js.map +1 -0
- package/dist/handlers/primitives/count-results.d.ts +21 -0
- package/dist/handlers/primitives/count-results.d.ts.map +1 -0
- package/dist/handlers/primitives/count-results.js +23 -0
- package/dist/handlers/primitives/count-results.js.map +1 -0
- package/dist/handlers/primitives/partition-by-substring.d.ts +18 -0
- package/dist/handlers/primitives/partition-by-substring.d.ts.map +1 -0
- package/dist/handlers/primitives/partition-by-substring.js +28 -0
- package/dist/handlers/primitives/partition-by-substring.js.map +1 -0
- package/dist/handlers/primitives/resolve-resource.d.ts +13 -0
- package/dist/handlers/primitives/resolve-resource.d.ts.map +1 -0
- package/dist/handlers/primitives/resolve-resource.js +21 -0
- package/dist/handlers/primitives/resolve-resource.js.map +1 -0
- package/dist/handlers/primitives/walk-field.d.ts +11 -0
- package/dist/handlers/primitives/walk-field.d.ts.map +1 -0
- package/dist/handlers/primitives/walk-field.js +31 -0
- package/dist/handlers/primitives/walk-field.js.map +1 -0
- package/dist/handlers/validate-field-match.d.ts +11 -0
- package/dist/handlers/validate-field-match.d.ts.map +1 -0
- package/dist/handlers/validate-field-match.js +39 -0
- package/dist/handlers/validate-field-match.js.map +1 -0
- package/dist/handlers/validate-verbatim-quotes.d.ts +11 -0
- package/dist/handlers/validate-verbatim-quotes.d.ts.map +1 -0
- package/dist/handlers/validate-verbatim-quotes.js +37 -0
- package/dist/handlers/validate-verbatim-quotes.js.map +1 -0
- package/dist/index.d.ts +57 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +45 -0
- package/dist/index.js.map +1 -0
- package/dist/pipeline/processing-pipeline.d.ts +24 -0
- package/dist/pipeline/processing-pipeline.d.ts.map +1 -0
- package/dist/pipeline/processing-pipeline.js +53 -0
- package/dist/pipeline/processing-pipeline.js.map +1 -0
- package/dist/processors/compute-hash.d.ts +4 -0
- package/dist/processors/compute-hash.d.ts.map +1 -0
- package/dist/processors/compute-hash.js +14 -0
- package/dist/processors/compute-hash.js.map +1 -0
- package/dist/processors/normalize-text.d.ts +8 -0
- package/dist/processors/normalize-text.d.ts.map +1 -0
- package/dist/processors/normalize-text.js +47 -0
- package/dist/processors/normalize-text.js.map +1 -0
- package/dist/store/json-file-store.d.ts +24 -0
- package/dist/store/json-file-store.d.ts.map +1 -0
- package/dist/store/json-file-store.js +210 -0
- package/dist/store/json-file-store.js.map +1 -0
- package/dist/store/store-interface.d.ts +33 -0
- package/dist/store/store-interface.d.ts.map +1 -0
- package/dist/store/store-interface.js +2 -0
- package/dist/store/store-interface.js.map +1 -0
- package/dist/store/trace-buffer-store.d.ts +55 -0
- package/dist/store/trace-buffer-store.d.ts.map +1 -0
- package/dist/store/trace-buffer-store.js +113 -0
- package/dist/store/trace-buffer-store.js.map +1 -0
- package/dist/types/mcp-types.d.ts +17 -0
- package/dist/types/mcp-types.d.ts.map +1 -0
- package/dist/types/mcp-types.js +5 -0
- package/dist/types/mcp-types.js.map +1 -0
- package/dist/types/response-envelope.d.ts +96 -0
- package/dist/types/response-envelope.d.ts.map +1 -0
- package/dist/types/response-envelope.js +2 -0
- package/dist/types/response-envelope.js.map +1 -0
- package/dist/types/run-record.d.ts +169 -0
- package/dist/types/run-record.d.ts.map +1 -0
- package/dist/types/run-record.js +2 -0
- package/dist/types/run-record.js.map +1 -0
- package/dist/types/workflow-definition.d.ts +292 -0
- package/dist/types/workflow-definition.d.ts.map +1 -0
- package/dist/types/workflow-definition.js +2 -0
- package/dist/types/workflow-definition.js.map +1 -0
- package/dist/types/workflow-error.d.ts +26 -0
- package/dist/types/workflow-error.d.ts.map +1 -0
- package/dist/types/workflow-error.js +28 -0
- package/dist/types/workflow-error.js.map +1 -0
- package/dist/utils/schema-skeleton.d.ts +11 -0
- package/dist/utils/schema-skeleton.d.ts.map +1 -0
- package/dist/utils/schema-skeleton.js +40 -0
- package/dist/utils/schema-skeleton.js.map +1 -0
- package/dist/validation/input-schema.d.ts +26 -0
- package/dist/validation/input-schema.d.ts.map +1 -0
- package/dist/validation/input-schema.js +67 -0
- package/dist/validation/input-schema.js.map +1 -0
- package/dist/workflow/registrar.d.ts +20 -0
- package/dist/workflow/registrar.d.ts.map +1 -0
- package/dist/workflow/registrar.js +61 -0
- package/dist/workflow/registrar.js.map +1 -0
- package/dist/workflow/template-resolver.d.ts +25 -0
- package/dist/workflow/template-resolver.d.ts.map +1 -0
- package/dist/workflow/template-resolver.js +112 -0
- package/dist/workflow/template-resolver.js.map +1 -0
- package/dist/workflow/yaml-loader.d.ts +15 -0
- package/dist/workflow/yaml-loader.d.ts.map +1 -0
- package/dist/workflow/yaml-loader.js +408 -0
- package/dist/workflow/yaml-loader.js.map +1 -0
- package/package.json +61 -0
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
// Token-bucket rate limiter implementation.
|
|
2
|
+
import { WorkflowError } from '../types/workflow-error.js';
|
|
3
|
+
/**
|
|
4
|
+
* Token-bucket rate limiter.
|
|
5
|
+
*
|
|
6
|
+
* Starts full (burst tokens). Refills at one token per intervalMs.
|
|
7
|
+
* `pause()` stops refill and drains tokens; on resume, exactly 1 token is
|
|
8
|
+
* issued immediately and the refill timer restarts.
|
|
9
|
+
*/
|
|
10
|
+
export class TokenBucketRateLimiter {
|
|
11
|
+
tokens;
|
|
12
|
+
capacity;
|
|
13
|
+
intervalMs;
|
|
14
|
+
refillTimer = null;
|
|
15
|
+
resumeTimer = null;
|
|
16
|
+
resumeAt = 0;
|
|
17
|
+
waiters = [];
|
|
18
|
+
now;
|
|
19
|
+
constructor(config, now) {
|
|
20
|
+
this.capacity = config.burst;
|
|
21
|
+
this.tokens = config.burst;
|
|
22
|
+
this.intervalMs = 1000 / config.requests_per_second;
|
|
23
|
+
this.now = now ?? (() => Date.now());
|
|
24
|
+
this.startRefill();
|
|
25
|
+
}
|
|
26
|
+
acquire(signal) {
|
|
27
|
+
if (this.tokens > 0) {
|
|
28
|
+
this.tokens--;
|
|
29
|
+
return Promise.resolve();
|
|
30
|
+
}
|
|
31
|
+
return new Promise((resolve, reject) => {
|
|
32
|
+
if (signal !== undefined && signal.aborted) {
|
|
33
|
+
reject(makeAbortError());
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
let settled = false;
|
|
37
|
+
const waiter = {
|
|
38
|
+
resolve: () => {
|
|
39
|
+
if (settled)
|
|
40
|
+
return;
|
|
41
|
+
settled = true;
|
|
42
|
+
const idx = this.waiters.indexOf(waiter);
|
|
43
|
+
if (idx !== -1)
|
|
44
|
+
this.waiters.splice(idx, 1);
|
|
45
|
+
resolve();
|
|
46
|
+
},
|
|
47
|
+
cancel: () => {
|
|
48
|
+
if (settled)
|
|
49
|
+
return;
|
|
50
|
+
settled = true;
|
|
51
|
+
const idx = this.waiters.indexOf(waiter);
|
|
52
|
+
if (idx !== -1)
|
|
53
|
+
this.waiters.splice(idx, 1);
|
|
54
|
+
},
|
|
55
|
+
};
|
|
56
|
+
this.waiters.push(waiter);
|
|
57
|
+
if (signal !== undefined) {
|
|
58
|
+
signal.addEventListener('abort', () => {
|
|
59
|
+
waiter.cancel();
|
|
60
|
+
reject(makeAbortError());
|
|
61
|
+
}, { once: true });
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
pause(seconds) {
|
|
66
|
+
const newResumeAt = this.now() + seconds * 1000;
|
|
67
|
+
if (newResumeAt <= this.resumeAt)
|
|
68
|
+
return;
|
|
69
|
+
this.resumeAt = newResumeAt;
|
|
70
|
+
if (this.refillTimer !== null) {
|
|
71
|
+
clearInterval(this.refillTimer);
|
|
72
|
+
this.refillTimer = null;
|
|
73
|
+
}
|
|
74
|
+
this.tokens = 0;
|
|
75
|
+
if (this.resumeTimer !== null) {
|
|
76
|
+
clearTimeout(this.resumeTimer);
|
|
77
|
+
}
|
|
78
|
+
this.resumeTimer = setTimeout(() => {
|
|
79
|
+
this.resumeTimer = null;
|
|
80
|
+
this.resumeAt = 0;
|
|
81
|
+
this.tokens = 1;
|
|
82
|
+
this.serveOneWaiter();
|
|
83
|
+
this.startRefill();
|
|
84
|
+
}, seconds * 1000);
|
|
85
|
+
}
|
|
86
|
+
startRefill() {
|
|
87
|
+
this.refillTimer = setInterval(() => {
|
|
88
|
+
this.tokens = Math.min(this.tokens + 1, this.capacity);
|
|
89
|
+
if (this.waiters.length > 0) {
|
|
90
|
+
this.serveOneWaiter();
|
|
91
|
+
}
|
|
92
|
+
}, this.intervalMs);
|
|
93
|
+
}
|
|
94
|
+
serveOneWaiter() {
|
|
95
|
+
if (this.tokens > 0 && this.waiters.length > 0) {
|
|
96
|
+
this.tokens--;
|
|
97
|
+
this.waiters[0].resolve();
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
function makeAbortError() {
|
|
102
|
+
return new WorkflowError('Token bucket acquire cancelled', {
|
|
103
|
+
code: 'STEP_ABORTED',
|
|
104
|
+
category: 'ENGINE',
|
|
105
|
+
agentAction: 'report_to_user',
|
|
106
|
+
retryable: false,
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=token-bucket.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-bucket.js","sourceRoot":"","sources":["../../src/adapters/token-bucket.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Loads key=value pairs from a .env file.
|
|
3
|
+
* Returns empty object if the file does not exist — not an error.
|
|
4
|
+
*/
|
|
5
|
+
export declare function loadSecrets(envPath?: string): Record<string, string>;
|
|
6
|
+
/**
|
|
7
|
+
* Resolves a 'secrets.KEY_NAME' reference to its value.
|
|
8
|
+
* Strings that do not start with 'secrets.' are returned unchanged.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* resolveSecret('secrets.API_KEY', { API_KEY: 'tok_123' }) // → 'tok_123'
|
|
12
|
+
* resolveSecret('literal-value', {}) // → 'literal-value'
|
|
13
|
+
*/
|
|
14
|
+
export declare function resolveSecret(value: string, secrets: Record<string, string>): string;
|
|
15
|
+
//# sourceMappingURL=secrets.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secrets.d.ts","sourceRoot":"","sources":["../../src/config/secrets.ts"],"names":[],"mappings":"AAKA;;;GAGG;AACH,wBAAgB,WAAW,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAQpE;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAIpF"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
// Secrets loader — reads .env files without modifying process.env.
|
|
2
|
+
import { readFileSync } from 'node:fs';
|
|
3
|
+
import { resolve } from 'node:path';
|
|
4
|
+
import { parse } from 'dotenv';
|
|
5
|
+
/**
|
|
6
|
+
* Loads key=value pairs from a .env file.
|
|
7
|
+
* Returns empty object if the file does not exist — not an error.
|
|
8
|
+
*/
|
|
9
|
+
export function loadSecrets(envPath) {
|
|
10
|
+
const filePath = resolve(envPath ?? '.env');
|
|
11
|
+
try {
|
|
12
|
+
const content = readFileSync(filePath, 'utf8');
|
|
13
|
+
return parse(content);
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
return {};
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Resolves a 'secrets.KEY_NAME' reference to its value.
|
|
21
|
+
* Strings that do not start with 'secrets.' are returned unchanged.
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* resolveSecret('secrets.API_KEY', { API_KEY: 'tok_123' }) // → 'tok_123'
|
|
25
|
+
* resolveSecret('literal-value', {}) // → 'literal-value'
|
|
26
|
+
*/
|
|
27
|
+
export function resolveSecret(value, secrets) {
|
|
28
|
+
if (!value.startsWith('secrets.'))
|
|
29
|
+
return value;
|
|
30
|
+
const key = value.slice('secrets.'.length);
|
|
31
|
+
return secrets[key] ?? '';
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=secrets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secrets.js","sourceRoot":"","sources":["../../src/config/secrets.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAE/B;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,OAAgB;IAC1C,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,IAAI,MAAM,CAAC,CAAC;IAC5C,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC/C,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAAC,KAAa,EAAE,OAA+B;IAC1E,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO,KAAK,CAAC;IAChD,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAC3C,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;AAC5B,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { WorkflowDefinition, StepDefinition } from '../types/workflow-definition.js';
|
|
2
|
+
import type { RunRecord } from '../types/run-record.js';
|
|
3
|
+
import type { RunPhase } from '../types/run-record.js';
|
|
4
|
+
/**
|
|
5
|
+
* Derives the run_phase from the run record fields.
|
|
6
|
+
* Called after every store write to keep run_phase consistent.
|
|
7
|
+
*/
|
|
8
|
+
export declare function deriveRunPhase(run: Pick<RunRecord, 'pending_gate' | 'terminal_state' | 'failed_steps' | 'terminal_reason'>): RunPhase;
|
|
9
|
+
/**
|
|
10
|
+
* Evaluates whether a step's trigger_rule is satisfied given the current run state.
|
|
11
|
+
* Empty or omitted depends_on means the step has no dependencies and is always eligible
|
|
12
|
+
* at the trigger-rule level.
|
|
13
|
+
*/
|
|
14
|
+
export declare function triggerRuleSatisfied(step: StepDefinition, run: RunRecord): boolean;
|
|
15
|
+
/**
|
|
16
|
+
* Evaluates a when-condition expression against prior step evidence.
|
|
17
|
+
* Supports: path == 'value', path != 'value', path > n, path < n, path >= n, path <= n.
|
|
18
|
+
* Returns false on parse error or missing value.
|
|
19
|
+
*/
|
|
20
|
+
export declare function evaluateWhenCondition(expr: string, evidenceByStep: Record<string, Record<string, unknown>>): boolean;
|
|
21
|
+
/**
|
|
22
|
+
* Builds the evidenceByStep map from a run record's evidence array.
|
|
23
|
+
* Merges gate_response snapshots on top of execution snapshots so that
|
|
24
|
+
* the human's choice is accessible via context.resources.<step>.choice in when expressions.
|
|
25
|
+
*/
|
|
26
|
+
export declare function buildEvidenceByStep(run: RunRecord): Record<string, Record<string, unknown>>;
|
|
27
|
+
/**
|
|
28
|
+
* Returns the names of all steps currently eligible for execution.
|
|
29
|
+
* Gate serialization: if any gate is open, no steps are eligible.
|
|
30
|
+
* A step is eligible if:
|
|
31
|
+
* - not already completed, in-progress, failed, or skipped
|
|
32
|
+
* - trigger_rule is satisfied
|
|
33
|
+
* - when-condition (if present) is truthy
|
|
34
|
+
*/
|
|
35
|
+
export declare function findEligibleSteps(definition: WorkflowDefinition, run: RunRecord): string[];
|
|
36
|
+
/**
|
|
37
|
+
* Returns true when every step in the workflow has been completed, failed, or skipped,
|
|
38
|
+
* and no steps are in-progress. Used to detect run completion after each step write.
|
|
39
|
+
*/
|
|
40
|
+
export declare function isWorkflowComplete(run: RunRecord, definition: WorkflowDefinition): boolean;
|
|
41
|
+
/**
|
|
42
|
+
* After a step settles (completes, fails, or is already skipped), some downstream steps
|
|
43
|
+
* may have trigger_rules that can never be satisfied. This function marks those steps
|
|
44
|
+
* as skipped and iterates until no new skips can be derived (fixed-point).
|
|
45
|
+
*
|
|
46
|
+
* Returns the updated skipped_steps array, which may be larger than run.skipped_steps.
|
|
47
|
+
* Does not mutate the run record — callers apply the result before writing.
|
|
48
|
+
*/
|
|
49
|
+
export declare function propagateSkips(run: RunRecord, definition: WorkflowDefinition): string[];
|
|
50
|
+
//# sourceMappingURL=eligibility.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eligibility.d.ts","sourceRoot":"","sources":["../../src/engine/eligibility.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,kBAAkB,EAClB,cAAc,EAEf,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAGvD;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,IAAI,CAAC,SAAS,EAAE,cAAc,GAAG,gBAAgB,GAAG,cAAc,GAAG,iBAAiB,CAAC,GAC3F,QAAQ,CAUV;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,cAAc,EAAE,GAAG,EAAE,SAAS,GAAG,OAAO,CA0ClF;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,EACZ,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GACtD,OAAO,CAwDT;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAe3F;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,kBAAkB,EAAE,GAAG,EAAE,SAAS,GAAG,MAAM,EAAE,CA8B1F;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,SAAS,EAAE,UAAU,EAAE,kBAAkB,GAAG,OAAO,CAU1F;AAqDD;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,SAAS,EAAE,UAAU,EAAE,kBAAkB,GAAG,MAAM,EAAE,CA4CvF"}
|
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
import { resolvePath } from './render-template.js';
|
|
2
|
+
/**
|
|
3
|
+
* Derives the run_phase from the run record fields.
|
|
4
|
+
* Called after every store write to keep run_phase consistent.
|
|
5
|
+
*/
|
|
6
|
+
export function deriveRunPhase(run) {
|
|
7
|
+
if (run.pending_gate !== undefined)
|
|
8
|
+
return 'gate_waiting';
|
|
9
|
+
if (!run.terminal_state)
|
|
10
|
+
return 'running';
|
|
11
|
+
// A terminal run that completed successfully sets terminal_reason to 'Workflow completed.'.
|
|
12
|
+
// Recovery workflows end with failed_steps non-empty but are still considered completed
|
|
13
|
+
// when the final recovery step succeeds, so terminal_reason takes precedence.
|
|
14
|
+
if (run.terminal_reason === 'Workflow completed.')
|
|
15
|
+
return 'completed';
|
|
16
|
+
if (run.failed_steps.length > 0)
|
|
17
|
+
return 'failed';
|
|
18
|
+
// terminal_state is true but the run neither completed normally nor failed — it was abandoned.
|
|
19
|
+
return 'abandoned';
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Evaluates whether a step's trigger_rule is satisfied given the current run state.
|
|
23
|
+
* Empty or omitted depends_on means the step has no dependencies and is always eligible
|
|
24
|
+
* at the trigger-rule level.
|
|
25
|
+
*/
|
|
26
|
+
export function triggerRuleSatisfied(step, run) {
|
|
27
|
+
const deps = step.depends_on ?? [];
|
|
28
|
+
if (deps.length === 0)
|
|
29
|
+
return true;
|
|
30
|
+
const rule = step.trigger_rule ?? 'all_success';
|
|
31
|
+
switch (rule) {
|
|
32
|
+
case 'all_success':
|
|
33
|
+
// All deps in completed_steps, none in failed_steps.
|
|
34
|
+
return (deps.every((d) => run.completed_steps.includes(d)) &&
|
|
35
|
+
deps.every((d) => !run.failed_steps.includes(d)));
|
|
36
|
+
case 'all_failed':
|
|
37
|
+
// All deps in failed_steps.
|
|
38
|
+
return deps.every((d) => run.failed_steps.includes(d));
|
|
39
|
+
case 'all_done':
|
|
40
|
+
// All deps settled: completed, failed, or skipped (skipped deps are permanently settled).
|
|
41
|
+
return deps.every((d) => run.completed_steps.includes(d) ||
|
|
42
|
+
run.failed_steps.includes(d) ||
|
|
43
|
+
run.skipped_steps.includes(d));
|
|
44
|
+
case 'one_failed':
|
|
45
|
+
// At least one dep in failed_steps.
|
|
46
|
+
return deps.some((d) => run.failed_steps.includes(d));
|
|
47
|
+
case 'one_success':
|
|
48
|
+
// At least one dep in completed_steps.
|
|
49
|
+
return deps.some((d) => run.completed_steps.includes(d));
|
|
50
|
+
case 'none_failed':
|
|
51
|
+
// All deps in completed_steps or skipped_steps — none in failed_steps.
|
|
52
|
+
return (deps.every((d) => run.completed_steps.includes(d) || run.skipped_steps.includes(d)) &&
|
|
53
|
+
deps.every((d) => !run.failed_steps.includes(d)));
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Evaluates a when-condition expression against prior step evidence.
|
|
58
|
+
* Supports: path == 'value', path != 'value', path > n, path < n, path >= n, path <= n.
|
|
59
|
+
* Returns false on parse error or missing value.
|
|
60
|
+
*/
|
|
61
|
+
export function evaluateWhenCondition(expr, evidenceByStep) {
|
|
62
|
+
// when-condition paths are relative to step outputs: "step_id.field" resolves
|
|
63
|
+
// directly against evidenceByStep (e.g. step_a.confidence == high).
|
|
64
|
+
const root = evidenceByStep;
|
|
65
|
+
const operators = [
|
|
66
|
+
[' >= ', (a, b) => a >= b],
|
|
67
|
+
[' <= ', (a, b) => a <= b],
|
|
68
|
+
[' != ', (a, b) => a !== b],
|
|
69
|
+
[' == ', (a, b) => a === b],
|
|
70
|
+
[' > ', (a, b) => a > b],
|
|
71
|
+
[' < ', (a, b) => a < b],
|
|
72
|
+
];
|
|
73
|
+
for (const [op, compare] of operators) {
|
|
74
|
+
const idx = expr.indexOf(op);
|
|
75
|
+
if (idx === -1)
|
|
76
|
+
continue;
|
|
77
|
+
const lhsPath = expr.slice(0, idx).trim();
|
|
78
|
+
const rhs = expr.slice(idx + op.length).trim();
|
|
79
|
+
let leftVal;
|
|
80
|
+
try {
|
|
81
|
+
leftVal = resolvePath(lhsPath, root);
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
return false;
|
|
85
|
+
}
|
|
86
|
+
let rightVal;
|
|
87
|
+
if ((rhs.startsWith("'") && rhs.endsWith("'")) || (rhs.startsWith('"') && rhs.endsWith('"'))) {
|
|
88
|
+
rightVal = rhs.slice(1, -1);
|
|
89
|
+
}
|
|
90
|
+
else if (rhs === 'true') {
|
|
91
|
+
rightVal = true;
|
|
92
|
+
}
|
|
93
|
+
else if (rhs === 'false') {
|
|
94
|
+
rightVal = false;
|
|
95
|
+
}
|
|
96
|
+
else if (rhs === 'null') {
|
|
97
|
+
rightVal = null;
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
const n = Number(rhs);
|
|
101
|
+
rightVal = Number.isNaN(n) ? rhs : n;
|
|
102
|
+
}
|
|
103
|
+
try {
|
|
104
|
+
return compare(leftVal, rightVal);
|
|
105
|
+
}
|
|
106
|
+
catch {
|
|
107
|
+
return false;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
// No operator: treat the path value as a truthy/falsy boolean.
|
|
111
|
+
try {
|
|
112
|
+
const val = resolvePath(expr.trim(), root);
|
|
113
|
+
return Boolean(val);
|
|
114
|
+
}
|
|
115
|
+
catch {
|
|
116
|
+
return false;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Builds the evidenceByStep map from a run record's evidence array.
|
|
121
|
+
* Merges gate_response snapshots on top of execution snapshots so that
|
|
122
|
+
* the human's choice is accessible via context.resources.<step>.choice in when expressions.
|
|
123
|
+
*/
|
|
124
|
+
export function buildEvidenceByStep(run) {
|
|
125
|
+
const evidenceByStep = {};
|
|
126
|
+
for (const snap of run.evidence) {
|
|
127
|
+
if (snap.kind === 'gate_response') {
|
|
128
|
+
// Merge gate response (including choice) into step evidence so downstream
|
|
129
|
+
// when-conditions can reference context.resources.<step>.choice.
|
|
130
|
+
evidenceByStep[snap.step_id] = {
|
|
131
|
+
...(evidenceByStep[snap.step_id] ?? {}),
|
|
132
|
+
...snap.output_summary,
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
evidenceByStep[snap.step_id] = snap.output_summary;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
return evidenceByStep;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Returns the names of all steps currently eligible for execution.
|
|
143
|
+
* Gate serialization: if any gate is open, no steps are eligible.
|
|
144
|
+
* A step is eligible if:
|
|
145
|
+
* - not already completed, in-progress, failed, or skipped
|
|
146
|
+
* - trigger_rule is satisfied
|
|
147
|
+
* - when-condition (if present) is truthy
|
|
148
|
+
*/
|
|
149
|
+
export function findEligibleSteps(definition, run) {
|
|
150
|
+
// Gate serialization: if a gate is open, no new steps are eligible.
|
|
151
|
+
if (run.pending_gate !== undefined)
|
|
152
|
+
return [];
|
|
153
|
+
const evidenceByStep = buildEvidenceByStep(run);
|
|
154
|
+
const eligible = [];
|
|
155
|
+
for (const [stepName, step] of Object.entries(definition.steps)) {
|
|
156
|
+
// Already done or in-flight.
|
|
157
|
+
if (run.completed_steps.includes(stepName) ||
|
|
158
|
+
run.in_progress_steps.includes(stepName) ||
|
|
159
|
+
run.failed_steps.includes(stepName) ||
|
|
160
|
+
run.skipped_steps.includes(stepName)) {
|
|
161
|
+
continue;
|
|
162
|
+
}
|
|
163
|
+
// Trigger rule evaluation.
|
|
164
|
+
if (!triggerRuleSatisfied(step, run))
|
|
165
|
+
continue;
|
|
166
|
+
// when-condition evaluation.
|
|
167
|
+
if (step.when !== undefined) {
|
|
168
|
+
if (!evaluateWhenCondition(step.when, evidenceByStep))
|
|
169
|
+
continue;
|
|
170
|
+
}
|
|
171
|
+
eligible.push(stepName);
|
|
172
|
+
}
|
|
173
|
+
return eligible;
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Returns true when every step in the workflow has been completed, failed, or skipped,
|
|
177
|
+
* and no steps are in-progress. Used to detect run completion after each step write.
|
|
178
|
+
*/
|
|
179
|
+
export function isWorkflowComplete(run, definition) {
|
|
180
|
+
const allSteps = Object.keys(definition.steps);
|
|
181
|
+
return (allSteps.every((name) => run.completed_steps.includes(name) ||
|
|
182
|
+
run.failed_steps.includes(name) ||
|
|
183
|
+
run.skipped_steps.includes(name)) && run.in_progress_steps.length === 0);
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Returns false if a step's trigger_rule can provably never be satisfied given the
|
|
187
|
+
* current settled state. Called by propagateSkips to determine which steps to skip.
|
|
188
|
+
*
|
|
189
|
+
* "Settled" means the step is in completed_steps, failed_steps, or skipped_steps.
|
|
190
|
+
* In-progress and unsettled steps are treated as potentially resolving either way.
|
|
191
|
+
*/
|
|
192
|
+
function canTriggerRuleEverBeSatisfied(step, run) {
|
|
193
|
+
const deps = step.depends_on ?? [];
|
|
194
|
+
if (deps.length === 0)
|
|
195
|
+
return true;
|
|
196
|
+
const rule = step.trigger_rule ?? 'all_success';
|
|
197
|
+
switch (rule) {
|
|
198
|
+
case 'all_success':
|
|
199
|
+
// Needs every dep to succeed — impossible if any dep already failed or is skipped.
|
|
200
|
+
return deps.every((d) => !run.failed_steps.includes(d) && !run.skipped_steps.includes(d));
|
|
201
|
+
case 'all_failed':
|
|
202
|
+
// Needs every dep to fail — impossible if any dep already completed or is skipped.
|
|
203
|
+
return deps.every((d) => !run.completed_steps.includes(d) && !run.skipped_steps.includes(d));
|
|
204
|
+
case 'all_done':
|
|
205
|
+
// Always eventually satisfiable — all deps will settle (complete, fail, or be skipped)
|
|
206
|
+
// and all_done treats skipped as settled, so this can always fire.
|
|
207
|
+
return true;
|
|
208
|
+
case 'one_failed':
|
|
209
|
+
// Needs at least one dep to fail — impossible if all deps are completed or skipped
|
|
210
|
+
// (none can ever fail). A dep that is still unsettled might yet fail.
|
|
211
|
+
return deps.some((d) => run.failed_steps.includes(d) || // already satisfied
|
|
212
|
+
(!run.completed_steps.includes(d) && !run.skipped_steps.includes(d)));
|
|
213
|
+
case 'one_success':
|
|
214
|
+
// Needs at least one dep to succeed — impossible if all deps are failed or skipped
|
|
215
|
+
// (none can ever succeed). A dep that is still unsettled might yet succeed.
|
|
216
|
+
return deps.some((d) => run.completed_steps.includes(d) || // already satisfied
|
|
217
|
+
(!run.failed_steps.includes(d) && !run.skipped_steps.includes(d)));
|
|
218
|
+
case 'none_failed':
|
|
219
|
+
// Needs no dep to fail — impossible if any dep already failed.
|
|
220
|
+
return deps.every((d) => !run.failed_steps.includes(d));
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* After a step settles (completes, fails, or is already skipped), some downstream steps
|
|
225
|
+
* may have trigger_rules that can never be satisfied. This function marks those steps
|
|
226
|
+
* as skipped and iterates until no new skips can be derived (fixed-point).
|
|
227
|
+
*
|
|
228
|
+
* Returns the updated skipped_steps array, which may be larger than run.skipped_steps.
|
|
229
|
+
* Does not mutate the run record — callers apply the result before writing.
|
|
230
|
+
*/
|
|
231
|
+
export function propagateSkips(run, definition) {
|
|
232
|
+
const skipped = [...run.skipped_steps];
|
|
233
|
+
let changed = true;
|
|
234
|
+
while (changed) {
|
|
235
|
+
changed = false;
|
|
236
|
+
for (const [stepName, step] of Object.entries(definition.steps)) {
|
|
237
|
+
// Only evaluate steps that are not yet settled.
|
|
238
|
+
if (run.completed_steps.includes(stepName) ||
|
|
239
|
+
run.in_progress_steps.includes(stepName) ||
|
|
240
|
+
run.failed_steps.includes(stepName) ||
|
|
241
|
+
skipped.includes(stepName)) {
|
|
242
|
+
continue;
|
|
243
|
+
}
|
|
244
|
+
// Use the growing skipped set so cascading skips are detected in one pass.
|
|
245
|
+
const tempRun = { ...run, skipped_steps: skipped };
|
|
246
|
+
if (!canTriggerRuleEverBeSatisfied(step, tempRun)) {
|
|
247
|
+
skipped.push(stepName);
|
|
248
|
+
changed = true;
|
|
249
|
+
continue;
|
|
250
|
+
}
|
|
251
|
+
// A step whose when-condition evaluates to false once all its deps are settled
|
|
252
|
+
// can never become eligible — mark it skipped so isWorkflowComplete can fire.
|
|
253
|
+
if (step.when !== undefined) {
|
|
254
|
+
const deps = step.depends_on ?? [];
|
|
255
|
+
const allDepsSettled = deps.every((d) => tempRun.completed_steps.includes(d) ||
|
|
256
|
+
tempRun.failed_steps.includes(d) ||
|
|
257
|
+
skipped.includes(d));
|
|
258
|
+
if (allDepsSettled && !evaluateWhenCondition(step.when, buildEvidenceByStep(run))) {
|
|
259
|
+
skipped.push(stepName);
|
|
260
|
+
changed = true;
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
return skipped;
|
|
266
|
+
}
|
|
267
|
+
//# sourceMappingURL=eligibility.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eligibility.js","sourceRoot":"","sources":["../../src/engine/eligibility.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { WorkflowError, AgentAction } from '../types/workflow-error.js';
|
|
2
|
+
/**
|
|
3
|
+
* Resolves the agent action for errors that occur before claimStep runs —
|
|
4
|
+
* outer MCP catch blocks, store pre-flight failures, and makeErrorEnvelope(run=null)
|
|
5
|
+
* paths inside the execution loop.
|
|
6
|
+
*
|
|
7
|
+
* `provide_input` and `resolve_precondition` cannot apply at this stage: the
|
|
8
|
+
* failure came from infrastructure, never from the agent's submitted arguments.
|
|
9
|
+
*/
|
|
10
|
+
export declare function resolvePreExecutionAgentAction(err: WorkflowError): AgentAction;
|
|
11
|
+
/**
|
|
12
|
+
* Resolves the agent action for errors that occur after claimStep has completed
|
|
13
|
+
* successfully and the step is in `in_progress_steps`. Call this only in that
|
|
14
|
+
* context. `isTerminalRun` must be `run.terminal_state` from the persisted or
|
|
15
|
+
* failed run record after dispatch — do not pass a derived or assumed value.
|
|
16
|
+
*
|
|
17
|
+
* 'wait_and_proceed' passes through unchanged in all non-terminal cases.
|
|
18
|
+
*/
|
|
19
|
+
export declare function resolvePostDispatchAgentAction(err: WorkflowError, isTerminalRun: boolean): AgentAction;
|
|
20
|
+
//# sourceMappingURL=error-resolution.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-resolution.d.ts","sourceRoot":"","sources":["../../src/engine/error-resolution.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAE7E;;;;;;;GAOG;AACH,wBAAgB,8BAA8B,CAAC,GAAG,EAAE,aAAa,GAAG,WAAW,CAK9E;AAED;;;;;;;GAOG;AACH,wBAAgB,8BAA8B,CAC5C,GAAG,EAAE,aAAa,EAClB,aAAa,EAAE,OAAO,GACrB,WAAW,CAOb"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolves the agent action for errors that occur before claimStep runs —
|
|
3
|
+
* outer MCP catch blocks, store pre-flight failures, and makeErrorEnvelope(run=null)
|
|
4
|
+
* paths inside the execution loop.
|
|
5
|
+
*
|
|
6
|
+
* `provide_input` and `resolve_precondition` cannot apply at this stage: the
|
|
7
|
+
* failure came from infrastructure, never from the agent's submitted arguments.
|
|
8
|
+
*/
|
|
9
|
+
export function resolvePreExecutionAgentAction(err) {
|
|
10
|
+
if (err.agentAction === 'provide_input' || err.agentAction === 'resolve_precondition') {
|
|
11
|
+
return 'report_to_user';
|
|
12
|
+
}
|
|
13
|
+
return err.agentAction;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Resolves the agent action for errors that occur after claimStep has completed
|
|
17
|
+
* successfully and the step is in `in_progress_steps`. Call this only in that
|
|
18
|
+
* context. `isTerminalRun` must be `run.terminal_state` from the persisted or
|
|
19
|
+
* failed run record after dispatch — do not pass a derived or assumed value.
|
|
20
|
+
*
|
|
21
|
+
* 'wait_and_proceed' passes through unchanged in all non-terminal cases.
|
|
22
|
+
*/
|
|
23
|
+
export function resolvePostDispatchAgentAction(err, isTerminalRun) {
|
|
24
|
+
if (isTerminalRun)
|
|
25
|
+
return 'stop';
|
|
26
|
+
const raw = err.agentAction;
|
|
27
|
+
if (raw === 'stop' || raw === 'provide_input' || raw === 'resolve_precondition') {
|
|
28
|
+
return 'report_to_user';
|
|
29
|
+
}
|
|
30
|
+
return raw;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=error-resolution.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-resolution.js","sourceRoot":"","sources":["../../src/engine/error-resolution.ts"],"names":[],"mappings":"AAGA;;;;;;;GAOG;AACH,MAAM,UAAU,8BAA8B,CAAC,GAAkB;IAC/D,IAAI,GAAG,CAAC,WAAW,KAAK,eAAe,IAAI,GAAG,CAAC,WAAW,KAAK,sBAAsB,EAAE,CAAC;QACtF,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IACD,OAAO,GAAG,CAAC,WAAW,CAAC;AACzB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,8BAA8B,CAC5C,GAAkB,EAClB,aAAsB;IAEtB,IAAI,aAAa;QAAE,OAAO,MAAM,CAAC;IACjC,MAAM,GAAG,GAAG,GAAG,CAAC,WAAW,CAAC;IAC5B,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,eAAe,IAAI,GAAG,KAAK,sBAAsB,EAAE,CAAC;QAChF,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|