@probelabs/visor 0.1.177 → 0.1.178-ee
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/defaults/code-talk.yaml +10 -5
- package/dist/defaults/code-talk.yaml +10 -5
- package/dist/docs/ai-custom-tools.md +49 -0
- package/dist/docs/http.md +23 -0
- package/dist/docs/testing/cookbook.md +48 -0
- package/dist/docs/testing/dsl-reference.md +4 -2
- package/dist/docs/testing/flows.md +33 -1
- package/dist/examples/http-integration-config.yaml +16 -0
- package/dist/generated/config-schema.d.ts +51 -6
- package/dist/generated/config-schema.d.ts.map +1 -1
- package/dist/generated/config-schema.json +61 -6
- package/dist/github-comments.d.ts +5 -1
- package/dist/github-comments.d.ts.map +1 -1
- package/dist/index.js +2224 -93
- package/dist/providers/api-tool-executor.d.ts +2 -0
- package/dist/providers/api-tool-executor.d.ts.map +1 -1
- package/dist/providers/http-client-provider.d.ts.map +1 -1
- package/dist/providers/mcp-custom-sse-server.d.ts.map +1 -1
- package/dist/providers/workflow-check-provider.d.ts.map +1 -1
- package/dist/sdk/{a2a-frontend-FUJRKHJB.mjs → a2a-frontend-U3PTNCLR.mjs} +2 -2
- package/dist/sdk/{check-provider-registry-HW4QPPSA.mjs → check-provider-registry-SRASECAR.mjs} +6 -6
- package/dist/sdk/{check-provider-registry-OY2EESIO.mjs → check-provider-registry-ZX76MY2L.mjs} +6 -6
- package/dist/sdk/{chunk-OPI632LK.mjs → chunk-4ECMTCOM.mjs} +2 -2
- package/dist/sdk/{chunk-GVTWESYN.mjs → chunk-6YGCACBF.mjs} +2 -2
- package/dist/sdk/{chunk-65SHRIQF.mjs.map → chunk-6YGCACBF.mjs.map} +1 -1
- package/dist/sdk/{chunk-Y6PVSFCS.mjs → chunk-B7XHSG3L.mjs} +237 -47
- package/dist/sdk/chunk-B7XHSG3L.mjs.map +1 -0
- package/dist/sdk/{chunk-MM3TGVQ4.mjs → chunk-BMXVAJ2M.mjs} +52 -7
- package/dist/sdk/chunk-BMXVAJ2M.mjs.map +1 -0
- package/dist/sdk/{chunk-OHOBWVPP.mjs → chunk-ENSZDV3O.mjs} +3 -3
- package/dist/sdk/{chunk-2LCF5H5K.mjs → chunk-MGY5JAN2.mjs} +222 -37
- package/dist/sdk/chunk-MGY5JAN2.mjs.map +1 -0
- package/dist/sdk/{config-OOUMTCEA.mjs → config-DFOF7LP4.mjs} +2 -2
- package/dist/sdk/{failure-condition-evaluator-DL6H57NX.mjs → failure-condition-evaluator-P3MS5DRL.mjs} +3 -3
- package/dist/sdk/{github-frontend-FP6WKNZR.mjs → github-frontend-QTKOYB56.mjs} +11 -3
- package/dist/sdk/github-frontend-QTKOYB56.mjs.map +1 -0
- package/dist/sdk/{host-6SBCE4VK.mjs → host-I2TBBKD5.mjs} +3 -3
- package/dist/sdk/{host-NYUSWEE4.mjs → host-THORKOEL.mjs} +3 -3
- package/dist/sdk/knex-store-QCEW4I4R.mjs +527 -0
- package/dist/sdk/knex-store-QCEW4I4R.mjs.map +1 -0
- package/dist/sdk/loader-Q7K76ZIY.mjs +89 -0
- package/dist/sdk/loader-Q7K76ZIY.mjs.map +1 -0
- package/dist/sdk/opa-policy-engine-QCSSIMUF.mjs +655 -0
- package/dist/sdk/opa-policy-engine-QCSSIMUF.mjs.map +1 -0
- package/dist/sdk/{routing-PFFCQJV2.mjs → routing-2X6QF5IW.mjs} +4 -4
- package/dist/sdk/{schedule-tool-DN2DSXIX.mjs → schedule-tool-M6Y4YTXR.mjs} +6 -6
- package/dist/sdk/{schedule-tool-KVZN5LP6.mjs → schedule-tool-R6JJIDZ6.mjs} +6 -6
- package/dist/sdk/{schedule-tool-handler-57JBEICD.mjs → schedule-tool-handler-AOMZV3Q3.mjs} +6 -6
- package/dist/sdk/{schedule-tool-handler-6MPP5DXK.mjs → schedule-tool-handler-JYCVH377.mjs} +6 -6
- package/dist/sdk/sdk.d.mts +21 -0
- package/dist/sdk/sdk.d.ts +21 -0
- package/dist/sdk/sdk.js +1919 -307
- package/dist/sdk/sdk.js.map +1 -1
- package/dist/sdk/sdk.mjs +5 -5
- package/dist/sdk/{trace-helpers-L3EOYW5P.mjs → trace-helpers-K47ZVJSU.mjs} +2 -2
- package/dist/sdk/validator-XTZJZZJH.mjs +134 -0
- package/dist/sdk/validator-XTZJZZJH.mjs.map +1 -0
- package/dist/sdk/{workflow-check-provider-OA33MESM.mjs → workflow-check-provider-A3YH2UZJ.mjs} +6 -6
- package/dist/sdk/{workflow-check-provider-U3UIYLU7.mjs → workflow-check-provider-EMFC7A5K.mjs} +6 -6
- package/dist/state-machine/context/build-engine-context.d.ts.map +1 -1
- package/dist/test-runner/conversation-sugar.d.ts +3 -0
- package/dist/test-runner/conversation-sugar.d.ts.map +1 -1
- package/dist/test-runner/validator.d.ts.map +1 -1
- package/dist/types/config.d.ts +21 -0
- package/dist/types/config.d.ts.map +1 -1
- package/dist/utils/rate-limiter.d.ts +61 -0
- package/dist/utils/rate-limiter.d.ts.map +1 -0
- package/package.json +2 -2
- package/dist/output/traces/run-2026-03-10T16-21-38-082Z.ndjson +0 -138
- package/dist/output/traces/run-2026-03-10T16-22-15-059Z.ndjson +0 -2296
- package/dist/sdk/a2a-frontend-BPWLYLCG.mjs +0 -1658
- package/dist/sdk/a2a-frontend-FUJRKHJB.mjs.map +0 -1
- package/dist/sdk/a2a-frontend-HBUSNE3K.mjs +0 -1658
- package/dist/sdk/a2a-frontend-HBUSNE3K.mjs.map +0 -1
- package/dist/sdk/check-provider-registry-TRHN5ZBY.mjs +0 -30
- package/dist/sdk/chunk-2LCF5H5K.mjs.map +0 -1
- package/dist/sdk/chunk-65SHRIQF.mjs +0 -516
- package/dist/sdk/chunk-ADQVGGKA.mjs +0 -1502
- package/dist/sdk/chunk-BWC5R2UB.mjs +0 -739
- package/dist/sdk/chunk-EFNNJIMY.mjs +0 -739
- package/dist/sdk/chunk-EFNNJIMY.mjs.map +0 -1
- package/dist/sdk/chunk-FNBSDOQM.mjs +0 -516
- package/dist/sdk/chunk-FNBSDOQM.mjs.map +0 -1
- package/dist/sdk/chunk-GVTWESYN.mjs.map +0 -1
- package/dist/sdk/chunk-MM3TGVQ4.mjs.map +0 -1
- package/dist/sdk/chunk-OHOBWVPP.mjs.map +0 -1
- package/dist/sdk/chunk-OPI632LK.mjs.map +0 -1
- package/dist/sdk/chunk-WJIV7MKY.mjs +0 -1502
- package/dist/sdk/chunk-WJIV7MKY.mjs.map +0 -1
- package/dist/sdk/chunk-XLDVWRKQ.mjs +0 -45239
- package/dist/sdk/chunk-XLDVWRKQ.mjs.map +0 -1
- package/dist/sdk/chunk-Y6PVSFCS.mjs.map +0 -1
- package/dist/sdk/failure-condition-evaluator-63BECZYF.mjs +0 -18
- package/dist/sdk/failure-condition-evaluator-HL33X7MH.mjs +0 -18
- package/dist/sdk/github-frontend-F2YCPK6H.mjs +0 -1386
- package/dist/sdk/github-frontend-F2YCPK6H.mjs.map +0 -1
- package/dist/sdk/github-frontend-FP6WKNZR.mjs.map +0 -1
- package/dist/sdk/github-frontend-U2U42CKV.mjs +0 -1386
- package/dist/sdk/github-frontend-U2U42CKV.mjs.map +0 -1
- package/dist/sdk/host-6TBS44ER.mjs +0 -87
- package/dist/sdk/host-NYUSWEE4.mjs.map +0 -1
- package/dist/sdk/routing-GF2CF3JT.mjs +0 -26
- package/dist/sdk/routing-SFP4D6O3.mjs +0 -26
- package/dist/sdk/schedule-tool-45NAALKS.mjs +0 -36
- package/dist/sdk/schedule-tool-KVZN5LP6.mjs.map +0 -1
- package/dist/sdk/schedule-tool-handler-57JBEICD.mjs.map +0 -1
- package/dist/sdk/schedule-tool-handler-6MPP5DXK.mjs.map +0 -1
- package/dist/sdk/schedule-tool-handler-GEXHYH3X.mjs +0 -40
- package/dist/sdk/schedule-tool-handler-GEXHYH3X.mjs.map +0 -1
- package/dist/sdk/slack-frontend-6SXPTQDI.mjs +0 -895
- package/dist/sdk/slack-frontend-6SXPTQDI.mjs.map +0 -1
- package/dist/sdk/trace-helpers-FKM2MEDW.mjs +0 -29
- package/dist/sdk/trace-helpers-FKM2MEDW.mjs.map +0 -1
- package/dist/sdk/trace-helpers-L3EOYW5P.mjs.map +0 -1
- package/dist/sdk/trace-helpers-MYH2GPXF.mjs +0 -29
- package/dist/sdk/trace-helpers-MYH2GPXF.mjs.map +0 -1
- package/dist/sdk/workflow-check-provider-JNEFAECH.mjs +0 -30
- package/dist/sdk/workflow-check-provider-JNEFAECH.mjs.map +0 -1
- package/dist/sdk/workflow-check-provider-OA33MESM.mjs.map +0 -1
- package/dist/sdk/workflow-check-provider-U3UIYLU7.mjs.map +0 -1
- package/dist/traces/run-2026-03-10T16-21-38-082Z.ndjson +0 -138
- package/dist/traces/run-2026-03-10T16-22-15-059Z.ndjson +0 -2296
- /package/dist/sdk/{a2a-frontend-BPWLYLCG.mjs.map → a2a-frontend-U3PTNCLR.mjs.map} +0 -0
- /package/dist/sdk/{check-provider-registry-HW4QPPSA.mjs.map → check-provider-registry-SRASECAR.mjs.map} +0 -0
- /package/dist/sdk/{check-provider-registry-OY2EESIO.mjs.map → check-provider-registry-ZX76MY2L.mjs.map} +0 -0
- /package/dist/sdk/{chunk-BWC5R2UB.mjs.map → chunk-4ECMTCOM.mjs.map} +0 -0
- /package/dist/sdk/{chunk-ADQVGGKA.mjs.map → chunk-ENSZDV3O.mjs.map} +0 -0
- /package/dist/sdk/{check-provider-registry-TRHN5ZBY.mjs.map → config-DFOF7LP4.mjs.map} +0 -0
- /package/dist/sdk/{config-OOUMTCEA.mjs.map → failure-condition-evaluator-P3MS5DRL.mjs.map} +0 -0
- /package/dist/sdk/{host-6SBCE4VK.mjs.map → host-I2TBBKD5.mjs.map} +0 -0
- /package/dist/sdk/{host-6TBS44ER.mjs.map → host-THORKOEL.mjs.map} +0 -0
- /package/dist/sdk/{failure-condition-evaluator-63BECZYF.mjs.map → routing-2X6QF5IW.mjs.map} +0 -0
- /package/dist/sdk/{failure-condition-evaluator-DL6H57NX.mjs.map → schedule-tool-M6Y4YTXR.mjs.map} +0 -0
- /package/dist/sdk/{failure-condition-evaluator-HL33X7MH.mjs.map → schedule-tool-R6JJIDZ6.mjs.map} +0 -0
- /package/dist/sdk/{routing-GF2CF3JT.mjs.map → schedule-tool-handler-AOMZV3Q3.mjs.map} +0 -0
- /package/dist/sdk/{routing-PFFCQJV2.mjs.map → schedule-tool-handler-JYCVH377.mjs.map} +0 -0
- /package/dist/sdk/{routing-SFP4D6O3.mjs.map → trace-helpers-K47ZVJSU.mjs.map} +0 -0
- /package/dist/sdk/{schedule-tool-45NAALKS.mjs.map → workflow-check-provider-A3YH2UZJ.mjs.map} +0 -0
- /package/dist/sdk/{schedule-tool-DN2DSXIX.mjs.map → workflow-check-provider-EMFC7A5K.mjs.map} +0 -0
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
2
|
FailureConditionEvaluator,
|
|
3
3
|
init_failure_condition_evaluator
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-4ECMTCOM.mjs";
|
|
5
5
|
import {
|
|
6
6
|
addEvent,
|
|
7
7
|
init_trace_helpers
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-6YGCACBF.mjs";
|
|
9
9
|
import {
|
|
10
10
|
createExtendedLiquid,
|
|
11
11
|
init_liquid_extensions
|
|
@@ -1499,4 +1499,4 @@ export {
|
|
|
1499
1499
|
evaluateTransitions,
|
|
1500
1500
|
init_routing
|
|
1501
1501
|
};
|
|
1502
|
-
//# sourceMappingURL=chunk-
|
|
1502
|
+
//# sourceMappingURL=chunk-ENSZDV3O.mjs.map
|
|
@@ -43,7 +43,7 @@ import {
|
|
|
43
43
|
import {
|
|
44
44
|
config_exports,
|
|
45
45
|
init_config
|
|
46
|
-
} from "./chunk-
|
|
46
|
+
} from "./chunk-BMXVAJ2M.mjs";
|
|
47
47
|
import {
|
|
48
48
|
ExecutionJournal,
|
|
49
49
|
checkLoopBudget,
|
|
@@ -52,11 +52,11 @@ import {
|
|
|
52
52
|
init_routing,
|
|
53
53
|
init_snapshot_store,
|
|
54
54
|
snapshot_store_exports
|
|
55
|
-
} from "./chunk-
|
|
55
|
+
} from "./chunk-ENSZDV3O.mjs";
|
|
56
56
|
import {
|
|
57
57
|
FailureConditionEvaluator,
|
|
58
58
|
init_failure_condition_evaluator
|
|
59
|
-
} from "./chunk-
|
|
59
|
+
} from "./chunk-4ECMTCOM.mjs";
|
|
60
60
|
import {
|
|
61
61
|
addEvent,
|
|
62
62
|
emitNdjsonFallback,
|
|
@@ -67,7 +67,7 @@ import {
|
|
|
67
67
|
setSpanAttributes,
|
|
68
68
|
trace_helpers_exports,
|
|
69
69
|
withActiveSpan
|
|
70
|
-
} from "./chunk-
|
|
70
|
+
} from "./chunk-6YGCACBF.mjs";
|
|
71
71
|
import {
|
|
72
72
|
generateHumanId,
|
|
73
73
|
init_human_id
|
|
@@ -2891,6 +2891,162 @@ var init_state_capture = __esm({
|
|
|
2891
2891
|
}
|
|
2892
2892
|
});
|
|
2893
2893
|
|
|
2894
|
+
// src/utils/rate-limiter.ts
|
|
2895
|
+
function windowToMs(per) {
|
|
2896
|
+
switch (per) {
|
|
2897
|
+
case "second":
|
|
2898
|
+
return 1e3;
|
|
2899
|
+
case "minute":
|
|
2900
|
+
return 6e4;
|
|
2901
|
+
case "hour":
|
|
2902
|
+
return 36e5;
|
|
2903
|
+
}
|
|
2904
|
+
}
|
|
2905
|
+
function resolveRateLimitKey(config, fallbackUrl) {
|
|
2906
|
+
if (config.key) {
|
|
2907
|
+
return config.key;
|
|
2908
|
+
}
|
|
2909
|
+
if (fallbackUrl) {
|
|
2910
|
+
try {
|
|
2911
|
+
const url = new URL(fallbackUrl);
|
|
2912
|
+
return url.origin;
|
|
2913
|
+
} catch {
|
|
2914
|
+
return fallbackUrl;
|
|
2915
|
+
}
|
|
2916
|
+
}
|
|
2917
|
+
return "__default__";
|
|
2918
|
+
}
|
|
2919
|
+
async function rateLimitedFetch(url, options, rateLimitConfig) {
|
|
2920
|
+
if (!rateLimitConfig) {
|
|
2921
|
+
return fetch(url, options);
|
|
2922
|
+
}
|
|
2923
|
+
const key = resolveRateLimitKey(rateLimitConfig, url);
|
|
2924
|
+
const registry = RateLimiterRegistry.getInstance();
|
|
2925
|
+
const bucket = registry.getOrCreate(key, rateLimitConfig);
|
|
2926
|
+
const maxRetries = rateLimitConfig.max_retries ?? 3;
|
|
2927
|
+
const backoff = rateLimitConfig.backoff ?? "exponential";
|
|
2928
|
+
const initialDelay = rateLimitConfig.initial_delay_ms ?? 1e3;
|
|
2929
|
+
for (let attempt = 0; attempt <= maxRetries; attempt++) {
|
|
2930
|
+
await bucket.acquire();
|
|
2931
|
+
const response = await fetch(url, options);
|
|
2932
|
+
if (response.status !== 429) {
|
|
2933
|
+
return response;
|
|
2934
|
+
}
|
|
2935
|
+
if (attempt === maxRetries) {
|
|
2936
|
+
logger.warn(`[rate-limiter] Exhausted ${maxRetries} retries for ${url} (bucket: ${key})`);
|
|
2937
|
+
return response;
|
|
2938
|
+
}
|
|
2939
|
+
let delayMs;
|
|
2940
|
+
const retryAfter = response.headers.get("retry-after");
|
|
2941
|
+
if (retryAfter) {
|
|
2942
|
+
const parsed = Number(retryAfter);
|
|
2943
|
+
if (!isNaN(parsed)) {
|
|
2944
|
+
delayMs = parsed * 1e3;
|
|
2945
|
+
} else {
|
|
2946
|
+
const date = new Date(retryAfter).getTime();
|
|
2947
|
+
delayMs = Math.max(0, date - Date.now());
|
|
2948
|
+
}
|
|
2949
|
+
} else {
|
|
2950
|
+
delayMs = backoff === "exponential" ? initialDelay * Math.pow(2, attempt) : initialDelay;
|
|
2951
|
+
}
|
|
2952
|
+
logger.verbose(
|
|
2953
|
+
`[rate-limiter] 429 on ${url} (bucket: ${key}), retry ${attempt + 1}/${maxRetries} in ${delayMs}ms`
|
|
2954
|
+
);
|
|
2955
|
+
await new Promise((resolve9) => setTimeout(resolve9, delayMs));
|
|
2956
|
+
}
|
|
2957
|
+
return fetch(url, options);
|
|
2958
|
+
}
|
|
2959
|
+
var TokenBucket, REGISTRY_KEY, RateLimiterRegistry;
|
|
2960
|
+
var init_rate_limiter = __esm({
|
|
2961
|
+
"src/utils/rate-limiter.ts"() {
|
|
2962
|
+
"use strict";
|
|
2963
|
+
init_logger();
|
|
2964
|
+
TokenBucket = class {
|
|
2965
|
+
tokens;
|
|
2966
|
+
capacity;
|
|
2967
|
+
refillRate;
|
|
2968
|
+
// tokens per ms
|
|
2969
|
+
lastRefill;
|
|
2970
|
+
waitQueue = [];
|
|
2971
|
+
constructor(capacity, windowMs) {
|
|
2972
|
+
this.capacity = capacity;
|
|
2973
|
+
this.tokens = capacity;
|
|
2974
|
+
this.refillRate = capacity / windowMs;
|
|
2975
|
+
this.lastRefill = Date.now();
|
|
2976
|
+
}
|
|
2977
|
+
refill() {
|
|
2978
|
+
const now = Date.now();
|
|
2979
|
+
const elapsed = now - this.lastRefill;
|
|
2980
|
+
const newTokens = elapsed * this.refillRate;
|
|
2981
|
+
this.tokens = Math.min(this.capacity, this.tokens + newTokens);
|
|
2982
|
+
this.lastRefill = now;
|
|
2983
|
+
}
|
|
2984
|
+
/**
|
|
2985
|
+
* Non-blocking: try to consume one token.
|
|
2986
|
+
*/
|
|
2987
|
+
tryConsume() {
|
|
2988
|
+
this.refill();
|
|
2989
|
+
if (this.tokens >= 1) {
|
|
2990
|
+
this.tokens -= 1;
|
|
2991
|
+
return true;
|
|
2992
|
+
}
|
|
2993
|
+
return false;
|
|
2994
|
+
}
|
|
2995
|
+
/**
|
|
2996
|
+
* Blocking: wait until a token is available, then consume it.
|
|
2997
|
+
* Requests are served FIFO.
|
|
2998
|
+
*/
|
|
2999
|
+
async acquire() {
|
|
3000
|
+
if (this.tryConsume()) {
|
|
3001
|
+
return;
|
|
3002
|
+
}
|
|
3003
|
+
const waitMs = Math.ceil((1 - this.tokens) / this.refillRate);
|
|
3004
|
+
return new Promise((resolve9) => {
|
|
3005
|
+
const entry = { resolve: resolve9 };
|
|
3006
|
+
this.waitQueue.push(entry);
|
|
3007
|
+
setTimeout(() => {
|
|
3008
|
+
const idx = this.waitQueue.indexOf(entry);
|
|
3009
|
+
if (idx >= 0) {
|
|
3010
|
+
this.waitQueue.splice(idx, 1);
|
|
3011
|
+
}
|
|
3012
|
+
this.refill();
|
|
3013
|
+
if (this.tokens >= 1) {
|
|
3014
|
+
this.tokens -= 1;
|
|
3015
|
+
}
|
|
3016
|
+
resolve9();
|
|
3017
|
+
}, waitMs);
|
|
3018
|
+
});
|
|
3019
|
+
}
|
|
3020
|
+
};
|
|
3021
|
+
REGISTRY_KEY = Symbol.for("visor.rateLimiterRegistry");
|
|
3022
|
+
RateLimiterRegistry = class _RateLimiterRegistry {
|
|
3023
|
+
buckets = /* @__PURE__ */ new Map();
|
|
3024
|
+
static getInstance() {
|
|
3025
|
+
const g = globalThis;
|
|
3026
|
+
if (!g[REGISTRY_KEY]) {
|
|
3027
|
+
g[REGISTRY_KEY] = new _RateLimiterRegistry();
|
|
3028
|
+
}
|
|
3029
|
+
return g[REGISTRY_KEY];
|
|
3030
|
+
}
|
|
3031
|
+
getOrCreate(key, config) {
|
|
3032
|
+
let bucket = this.buckets.get(key);
|
|
3033
|
+
if (!bucket) {
|
|
3034
|
+
const windowMs = windowToMs(config.per);
|
|
3035
|
+
bucket = new TokenBucket(config.requests, windowMs);
|
|
3036
|
+
this.buckets.set(key, bucket);
|
|
3037
|
+
logger.verbose(
|
|
3038
|
+
`[rate-limiter] Created bucket "${key}": ${config.requests} req/${config.per}`
|
|
3039
|
+
);
|
|
3040
|
+
}
|
|
3041
|
+
return bucket;
|
|
3042
|
+
}
|
|
3043
|
+
cleanup() {
|
|
3044
|
+
this.buckets.clear();
|
|
3045
|
+
}
|
|
3046
|
+
};
|
|
3047
|
+
}
|
|
3048
|
+
});
|
|
3049
|
+
|
|
2894
3050
|
// src/providers/api-tool-executor.ts
|
|
2895
3051
|
import fs2 from "fs/promises";
|
|
2896
3052
|
import path3 from "path";
|
|
@@ -3126,7 +3282,8 @@ function getApiToolConfig(tool) {
|
|
|
3126
3282
|
apiKey: tool.apiKey ?? tool.api_key,
|
|
3127
3283
|
securitySchemeName: tool.securitySchemeName ?? tool.security_scheme_name,
|
|
3128
3284
|
securityCredentials: tool.securityCredentials || tool.security_credentials || {},
|
|
3129
|
-
requestTimeoutMs: tool.requestTimeoutMs ?? tool.request_timeout_ms ?? tool.timeout ?? 3e4
|
|
3285
|
+
requestTimeoutMs: tool.requestTimeoutMs ?? tool.request_timeout_ms ?? tool.timeout ?? 3e4,
|
|
3286
|
+
rateLimitConfig: tool.rate_limit
|
|
3130
3287
|
};
|
|
3131
3288
|
}
|
|
3132
3289
|
function buildOutputSchema(operation) {
|
|
@@ -3558,12 +3715,16 @@ async function executeMappedApiTool(mappedTool, args) {
|
|
|
3558
3715
|
const controller = new AbortController();
|
|
3559
3716
|
const timeout = setTimeout(() => controller.abort(), apiToolConfig.requestTimeoutMs);
|
|
3560
3717
|
try {
|
|
3561
|
-
const response = await
|
|
3562
|
-
|
|
3563
|
-
|
|
3564
|
-
|
|
3565
|
-
|
|
3566
|
-
|
|
3718
|
+
const response = await rateLimitedFetch(
|
|
3719
|
+
endpoint.toString(),
|
|
3720
|
+
{
|
|
3721
|
+
method,
|
|
3722
|
+
headers,
|
|
3723
|
+
body: requestBodyValue === void 0 ? void 0 : headers["Content-Type"]?.includes("application/json") ? JSON.stringify(requestBodyValue) : String(requestBodyValue),
|
|
3724
|
+
signal: controller.signal
|
|
3725
|
+
},
|
|
3726
|
+
apiToolConfig.rateLimitConfig
|
|
3727
|
+
);
|
|
3567
3728
|
const raw = await response.text();
|
|
3568
3729
|
let body = raw;
|
|
3569
3730
|
const contentType = response.headers.get("content-type") || "";
|
|
@@ -3600,6 +3761,7 @@ var init_api_tool_executor = __esm({
|
|
|
3600
3761
|
"src/providers/api-tool-executor.ts"() {
|
|
3601
3762
|
"use strict";
|
|
3602
3763
|
init_logger();
|
|
3764
|
+
init_rate_limiter();
|
|
3603
3765
|
HTTP_METHODS = /* @__PURE__ */ new Set(["get", "put", "post", "delete", "options", "head", "patch", "trace"]);
|
|
3604
3766
|
ApiToolRegistry = class {
|
|
3605
3767
|
bundleCache = /* @__PURE__ */ new Map();
|
|
@@ -4042,7 +4204,7 @@ async function executeWorkflowAsTool(workflowId, args, context2, argsOverrides)
|
|
|
4042
4204
|
...args,
|
|
4043
4205
|
...argsOverrides
|
|
4044
4206
|
};
|
|
4045
|
-
const { WorkflowCheckProvider: WorkflowCheckProvider2 } = await import("./workflow-check-provider-
|
|
4207
|
+
const { WorkflowCheckProvider: WorkflowCheckProvider2 } = await import("./workflow-check-provider-EMFC7A5K.mjs");
|
|
4046
4208
|
const provider = new WorkflowCheckProvider2();
|
|
4047
4209
|
const checkConfig = {
|
|
4048
4210
|
type: "workflow",
|
|
@@ -8921,11 +9083,12 @@ async function executeCheckWithForEachItems2(checkId, forEachParent, forEachItem
|
|
|
8921
9083
|
};
|
|
8922
9084
|
{
|
|
8923
9085
|
const assumeExpr = checkConfig?.assume;
|
|
8924
|
-
if (assumeExpr) {
|
|
9086
|
+
if (assumeExpr !== void 0 && assumeExpr !== null) {
|
|
8925
9087
|
let ok = true;
|
|
8926
9088
|
try {
|
|
8927
9089
|
const evaluator = new FailureConditionEvaluator();
|
|
8928
|
-
const
|
|
9090
|
+
const rawExprs = Array.isArray(assumeExpr) ? assumeExpr : [assumeExpr];
|
|
9091
|
+
const exprs = rawExprs.map((e) => typeof e === "string" ? e : String(e));
|
|
8929
9092
|
const conversation = context2.executionContext?.conversation || providerConfig?.eventContext?.conversation;
|
|
8930
9093
|
for (const ex of exprs) {
|
|
8931
9094
|
const res = await evaluator.evaluateIfCondition(checkId, ex, {
|
|
@@ -9366,7 +9529,7 @@ async function executeCheckWithForEachItems2(checkId, forEachParent, forEachItem
|
|
|
9366
9529
|
}
|
|
9367
9530
|
}
|
|
9368
9531
|
try {
|
|
9369
|
-
const { evaluateTransitions } = await import("./routing-
|
|
9532
|
+
const { evaluateTransitions } = await import("./routing-2X6QF5IW.mjs");
|
|
9370
9533
|
const transTarget = await evaluateTransitions(
|
|
9371
9534
|
onFinish.transitions,
|
|
9372
9535
|
forEachParent,
|
|
@@ -9426,7 +9589,7 @@ async function executeCheckWithForEachItems2(checkId, forEachParent, forEachItem
|
|
|
9426
9589
|
`[LevelDispatch] Error evaluating on_finish transitions for ${forEachParent}: ${e instanceof Error ? e.message : String(e)}`
|
|
9427
9590
|
);
|
|
9428
9591
|
}
|
|
9429
|
-
const { evaluateGoto: evaluateGoto2 } = await import("./routing-
|
|
9592
|
+
const { evaluateGoto: evaluateGoto2 } = await import("./routing-2X6QF5IW.mjs");
|
|
9430
9593
|
if (context2.debug) {
|
|
9431
9594
|
logger.info(
|
|
9432
9595
|
`[LevelDispatch] Evaluating on_finish.goto_js for forEach parent: ${forEachParent}`
|
|
@@ -9993,11 +10156,12 @@ async function executeSingleCheck2(checkId, context2, state, emitEvent, transiti
|
|
|
9993
10156
|
};
|
|
9994
10157
|
{
|
|
9995
10158
|
const assumeExpr = checkConfig2?.assume;
|
|
9996
|
-
if (assumeExpr) {
|
|
10159
|
+
if (assumeExpr !== void 0 && assumeExpr !== null) {
|
|
9997
10160
|
let ok = true;
|
|
9998
10161
|
try {
|
|
9999
10162
|
const evaluator = new FailureConditionEvaluator();
|
|
10000
|
-
const
|
|
10163
|
+
const rawExprs = Array.isArray(assumeExpr) ? assumeExpr : [assumeExpr];
|
|
10164
|
+
const exprs = rawExprs.map((e) => typeof e === "string" ? e : String(e));
|
|
10001
10165
|
const conversation = context2.executionContext?.conversation || providerConfig?.eventContext?.conversation;
|
|
10002
10166
|
for (const ex of exprs) {
|
|
10003
10167
|
const res = await evaluator.evaluateIfCondition(checkId, ex, {
|
|
@@ -13177,7 +13341,8 @@ function buildEngineContextForRun(workingDirectory, config, prInfo, debug, maxPa
|
|
|
13177
13341
|
sharedConcurrencyLimiter = {
|
|
13178
13342
|
async acquire(parentSessionId, _dbg, queueTimeout) {
|
|
13179
13343
|
const sid = parentSessionId || sessionId;
|
|
13180
|
-
|
|
13344
|
+
const effectiveQueueTimeout = queueTimeout ?? 0;
|
|
13345
|
+
return fairLimiter.acquire(sid, _dbg, effectiveQueueTimeout);
|
|
13181
13346
|
},
|
|
13182
13347
|
release(parentSessionId, _dbg) {
|
|
13183
13348
|
const sid = parentSessionId || sessionId;
|
|
@@ -13410,7 +13575,7 @@ var init_state_machine_execution_engine = __esm({
|
|
|
13410
13575
|
try {
|
|
13411
13576
|
const map = options?.webhookContext?.webhookData;
|
|
13412
13577
|
if (map) {
|
|
13413
|
-
const { CheckProviderRegistry: CheckProviderRegistry2 } = await import("./check-provider-registry-
|
|
13578
|
+
const { CheckProviderRegistry: CheckProviderRegistry2 } = await import("./check-provider-registry-SRASECAR.mjs");
|
|
13414
13579
|
const reg = CheckProviderRegistry2.getInstance();
|
|
13415
13580
|
const p = reg.getProvider("http_input");
|
|
13416
13581
|
if (p && typeof p.setWebhookContext === "function") p.setWebhookContext(map);
|
|
@@ -13523,7 +13688,7 @@ var init_state_machine_execution_engine = __esm({
|
|
|
13523
13688
|
logger.info("[StateMachine] Using state machine engine");
|
|
13524
13689
|
}
|
|
13525
13690
|
if (!config) {
|
|
13526
|
-
const { ConfigManager } = await import("./config-
|
|
13691
|
+
const { ConfigManager } = await import("./config-DFOF7LP4.mjs");
|
|
13527
13692
|
const configManager = new ConfigManager();
|
|
13528
13693
|
config = await configManager.getDefaultConfig();
|
|
13529
13694
|
logger.debug("[StateMachine] Using default configuration (no config provided)");
|
|
@@ -13533,7 +13698,7 @@ var init_state_machine_execution_engine = __esm({
|
|
|
13533
13698
|
tag_filter: tagFilter
|
|
13534
13699
|
} : config;
|
|
13535
13700
|
try {
|
|
13536
|
-
const { CheckProviderRegistry: CheckProviderRegistry2 } = await import("./check-provider-registry-
|
|
13701
|
+
const { CheckProviderRegistry: CheckProviderRegistry2 } = await import("./check-provider-registry-SRASECAR.mjs");
|
|
13537
13702
|
const registry = CheckProviderRegistry2.getInstance();
|
|
13538
13703
|
registry.setCustomTools(configWithTagFilter.tools || {});
|
|
13539
13704
|
} catch (error) {
|
|
@@ -13574,7 +13739,7 @@ var init_state_machine_execution_engine = __esm({
|
|
|
13574
13739
|
logger.debug(
|
|
13575
13740
|
`[PolicyEngine] Loading enterprise policy engine (engine=${configWithTagFilter.policy.engine})`
|
|
13576
13741
|
);
|
|
13577
|
-
const { loadEnterprisePolicyEngine } = await import("./
|
|
13742
|
+
const { loadEnterprisePolicyEngine } = await import("./loader-Q7K76ZIY.mjs");
|
|
13578
13743
|
context2.policyEngine = await loadEnterprisePolicyEngine(configWithTagFilter.policy);
|
|
13579
13744
|
logger.debug(
|
|
13580
13745
|
`[PolicyEngine] Initialized: ${context2.policyEngine?.constructor?.name || "unknown"}`
|
|
@@ -13597,7 +13762,7 @@ var init_state_machine_execution_engine = __esm({
|
|
|
13597
13762
|
try {
|
|
13598
13763
|
const webhookData = this.executionContext?.webhookContext?.webhookData;
|
|
13599
13764
|
if (webhookData instanceof Map) {
|
|
13600
|
-
const { extractSlackContext: extractSlackContext2 } = await import("./schedule-tool-handler-
|
|
13765
|
+
const { extractSlackContext: extractSlackContext2 } = await import("./schedule-tool-handler-JYCVH377.mjs");
|
|
13601
13766
|
const slackCtx = extractSlackContext2(webhookData);
|
|
13602
13767
|
if (slackCtx) {
|
|
13603
13768
|
const payload = Array.from(webhookData.values())[0];
|
|
@@ -13626,7 +13791,7 @@ var init_state_machine_execution_engine = __esm({
|
|
|
13626
13791
|
if (Array.isArray(configWithTagFilter.frontends) && configWithTagFilter.frontends.length > 0) {
|
|
13627
13792
|
try {
|
|
13628
13793
|
const { EventBus } = await import("./event-bus-5K3Y2FCS.mjs");
|
|
13629
|
-
const { FrontendsHost } = await import("./host-
|
|
13794
|
+
const { FrontendsHost } = await import("./host-THORKOEL.mjs");
|
|
13630
13795
|
const bus = new EventBus();
|
|
13631
13796
|
context2.eventBus = bus;
|
|
13632
13797
|
frontendsHost = new FrontendsHost(bus, logger);
|
|
@@ -13978,9 +14143,9 @@ var init_state_machine_execution_engine = __esm({
|
|
|
13978
14143
|
* @returns Array of failure condition evaluation results
|
|
13979
14144
|
*/
|
|
13980
14145
|
async evaluateFailureConditions(checkName, reviewSummary, config, previousOutputs, authorAssociation) {
|
|
13981
|
-
const { FailureConditionEvaluator: FailureConditionEvaluator2 } = await import("./failure-condition-evaluator-
|
|
14146
|
+
const { FailureConditionEvaluator: FailureConditionEvaluator2 } = await import("./failure-condition-evaluator-P3MS5DRL.mjs");
|
|
13982
14147
|
const evaluator = new FailureConditionEvaluator2();
|
|
13983
|
-
const { addEvent: addEvent3 } = await import("./trace-helpers-
|
|
14148
|
+
const { addEvent: addEvent3 } = await import("./trace-helpers-K47ZVJSU.mjs");
|
|
13984
14149
|
const { addFailIfTriggered } = await import("./metrics-JTOG2HNO.mjs");
|
|
13985
14150
|
const checkConfig = config.checks?.[checkName];
|
|
13986
14151
|
if (!checkConfig) {
|
|
@@ -16146,6 +16311,7 @@ var init_mcp_custom_sse_server = __esm({
|
|
|
16146
16311
|
init_schedule_tool();
|
|
16147
16312
|
init_schedule_tool_handler();
|
|
16148
16313
|
init_env_resolver();
|
|
16314
|
+
init_rate_limiter();
|
|
16149
16315
|
CustomToolsSSEServer = class _CustomToolsSSEServer {
|
|
16150
16316
|
server = null;
|
|
16151
16317
|
port = 0;
|
|
@@ -16902,7 +17068,8 @@ var init_mcp_custom_sse_server = __esm({
|
|
|
16902
17068
|
resolvedHeaders["Content-Type"] = "application/json";
|
|
16903
17069
|
}
|
|
16904
17070
|
}
|
|
16905
|
-
const
|
|
17071
|
+
const rateLimitConfig = tool.rate_limit;
|
|
17072
|
+
const response = await rateLimitedFetch(url, requestOptions, rateLimitConfig);
|
|
16906
17073
|
clearTimeout(timeoutId);
|
|
16907
17074
|
if (!response.ok) {
|
|
16908
17075
|
let errorBody = "";
|
|
@@ -19547,6 +19714,7 @@ var init_http_client_provider = __esm({
|
|
|
19547
19714
|
init_template_context();
|
|
19548
19715
|
init_oauth2_token_cache();
|
|
19549
19716
|
init_logger();
|
|
19717
|
+
init_rate_limiter();
|
|
19550
19718
|
HttpClientProvider = class extends CheckProvider {
|
|
19551
19719
|
liquid;
|
|
19552
19720
|
sandbox;
|
|
@@ -19701,6 +19869,7 @@ var init_http_client_provider = __esm({
|
|
|
19701
19869
|
`[http_client] Body: ${requestBody.substring(0, 500)}${requestBody.length > 500 ? "..." : ""}`
|
|
19702
19870
|
);
|
|
19703
19871
|
}
|
|
19872
|
+
const rateLimitConfig = config.rate_limit;
|
|
19704
19873
|
if (resolvedOutputFile) {
|
|
19705
19874
|
const fileResult = await this.downloadToFile(
|
|
19706
19875
|
renderedUrl,
|
|
@@ -19708,11 +19877,19 @@ var init_http_client_provider = __esm({
|
|
|
19708
19877
|
resolvedHeaders,
|
|
19709
19878
|
requestBody,
|
|
19710
19879
|
timeout,
|
|
19711
|
-
resolvedOutputFile
|
|
19880
|
+
resolvedOutputFile,
|
|
19881
|
+
rateLimitConfig
|
|
19712
19882
|
);
|
|
19713
19883
|
return fileResult;
|
|
19714
19884
|
}
|
|
19715
|
-
const data = await this.fetchData(
|
|
19885
|
+
const data = await this.fetchData(
|
|
19886
|
+
renderedUrl,
|
|
19887
|
+
method,
|
|
19888
|
+
resolvedHeaders,
|
|
19889
|
+
requestBody,
|
|
19890
|
+
timeout,
|
|
19891
|
+
rateLimitConfig
|
|
19892
|
+
);
|
|
19716
19893
|
let processedData = data;
|
|
19717
19894
|
if (transform) {
|
|
19718
19895
|
try {
|
|
@@ -19795,7 +19972,7 @@ var init_http_client_provider = __esm({
|
|
|
19795
19972
|
};
|
|
19796
19973
|
}
|
|
19797
19974
|
}
|
|
19798
|
-
async fetchData(url, method, headers, body, timeout = 3e4) {
|
|
19975
|
+
async fetchData(url, method, headers, body, timeout = 3e4, rateLimitConfig) {
|
|
19799
19976
|
if (typeof fetch === "undefined") {
|
|
19800
19977
|
throw new Error("HTTP client provider requires Node.js 18+ or node-fetch package");
|
|
19801
19978
|
}
|
|
@@ -19818,7 +19995,7 @@ var init_http_client_provider = __esm({
|
|
|
19818
19995
|
};
|
|
19819
19996
|
}
|
|
19820
19997
|
}
|
|
19821
|
-
const response = await
|
|
19998
|
+
const response = await rateLimitedFetch(url, requestOptions, rateLimitConfig);
|
|
19822
19999
|
clearTimeout(timeoutId);
|
|
19823
20000
|
logger.verbose(`[http_client] Response: ${response.status} ${response.statusText}`);
|
|
19824
20001
|
if (!response.ok) {
|
|
@@ -19850,7 +20027,7 @@ var init_http_client_provider = __esm({
|
|
|
19850
20027
|
throw error;
|
|
19851
20028
|
}
|
|
19852
20029
|
}
|
|
19853
|
-
async downloadToFile(url, method, headers, body, timeout, outputFile) {
|
|
20030
|
+
async downloadToFile(url, method, headers, body, timeout, outputFile, rateLimitConfig) {
|
|
19854
20031
|
if (typeof fetch === "undefined") {
|
|
19855
20032
|
throw new Error("HTTP client provider requires Node.js 18+ or node-fetch package");
|
|
19856
20033
|
}
|
|
@@ -19871,7 +20048,7 @@ var init_http_client_provider = __esm({
|
|
|
19871
20048
|
};
|
|
19872
20049
|
}
|
|
19873
20050
|
}
|
|
19874
|
-
const response = await
|
|
20051
|
+
const response = await rateLimitedFetch(url, requestOptions, rateLimitConfig);
|
|
19875
20052
|
clearTimeout(timeoutId);
|
|
19876
20053
|
if (!response.ok) {
|
|
19877
20054
|
return {
|
|
@@ -41619,8 +41796,8 @@ function buildBuiltinGlobals(opts) {
|
|
|
41619
41796
|
const asyncFunctionNames = /* @__PURE__ */ new Set();
|
|
41620
41797
|
const scheduleFn = async (args = {}) => {
|
|
41621
41798
|
try {
|
|
41622
|
-
const { handleScheduleAction: handleScheduleAction2, buildScheduleToolContext: buildScheduleToolContext2 } = await import("./schedule-tool-
|
|
41623
|
-
const { extractSlackContext: extractSlackContext2 } = await import("./schedule-tool-handler-
|
|
41799
|
+
const { handleScheduleAction: handleScheduleAction2, buildScheduleToolContext: buildScheduleToolContext2 } = await import("./schedule-tool-M6Y4YTXR.mjs");
|
|
41800
|
+
const { extractSlackContext: extractSlackContext2 } = await import("./schedule-tool-handler-JYCVH377.mjs");
|
|
41624
41801
|
const parentCtx = opts.sessionInfo?._parentContext;
|
|
41625
41802
|
const webhookData = parentCtx?.prInfo?.eventContext?.webhookData;
|
|
41626
41803
|
const visorCfg = parentCtx?.config;
|
|
@@ -44827,6 +45004,14 @@ var init_workflow_check_provider = __esm({
|
|
|
44827
45004
|
inputs,
|
|
44828
45005
|
config.checkName || workflow.id
|
|
44829
45006
|
);
|
|
45007
|
+
const parentTimeout = config.timeout || config.ai?.timeout;
|
|
45008
|
+
if (parentTimeout && workflowConfig.checks) {
|
|
45009
|
+
for (const stepCfg of Object.values(workflowConfig.checks)) {
|
|
45010
|
+
if (!stepCfg.timeout && !stepCfg.ai?.timeout) {
|
|
45011
|
+
stepCfg.timeout = parentTimeout;
|
|
45012
|
+
}
|
|
45013
|
+
}
|
|
45014
|
+
}
|
|
44830
45015
|
const parentMemoryCfg = parentContext?.memory && parentContext.memory.getConfig && parentContext.memory.getConfig() || parentContext?.config?.memory;
|
|
44831
45016
|
const childJournal = new ExecutionJournal2();
|
|
44832
45017
|
const childMemory = MemoryStore2.createIsolated(parentMemoryCfg);
|
|
@@ -45236,4 +45421,4 @@ undici/lib/fetch/body.js:
|
|
|
45236
45421
|
undici/lib/websocket/frame.js:
|
|
45237
45422
|
(*! ws. MIT License. Einar Otto Stangvik <einaros@gmail.com> *)
|
|
45238
45423
|
*/
|
|
45239
|
-
//# sourceMappingURL=chunk-
|
|
45424
|
+
//# sourceMappingURL=chunk-MGY5JAN2.mjs.map
|