@axlsdk/axl 0.24.3 → 0.25.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/dist/index.cjs +53 -36
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +53 -36
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.cjs
CHANGED
|
@@ -425,7 +425,7 @@ var TimeoutError = class extends AxlError {
|
|
|
425
425
|
constructor(operation, timeoutMs, breakdown, agent2) {
|
|
426
426
|
super(
|
|
427
427
|
"TIMEOUT",
|
|
428
|
-
`${operation} exceeded timeout of ${timeoutMs}ms` + (breakdown ? ` (elapsed ${breakdown.elapsedMs}ms: queued ${breakdown.queuedMs}ms, retries ${breakdown.retryMs}ms, wire ${breakdown.wireMs}ms, other ${breakdown.otherMs}ms)` : "") + (agent2 ? ` for agent '${agent2}'` : "")
|
|
428
|
+
`${operation} exceeded timeout of ${timeoutMs}ms` + (breakdown ? ` (elapsed ${breakdown.elapsedMs}ms: queued ${breakdown.queuedMs}ms, retries ${breakdown.retryMs}ms, wire ${breakdown.wireMs}ms, other ${breakdown.otherMs}ms, charged ${breakdown.chargedMs}ms)` : "") + (agent2 ? ` for agent '${agent2}'` : "")
|
|
429
429
|
);
|
|
430
430
|
this.name = "TimeoutError";
|
|
431
431
|
if (breakdown) this.breakdown = breakdown;
|
|
@@ -563,7 +563,7 @@ var sharedGuard = typeof installedGuard === "object" && installedGuard !== null
|
|
|
563
563
|
var buildPath = typeof __AXL_BUILD_PATH__ === "string" ? __AXL_BUILD_PATH__ : "<source>";
|
|
564
564
|
var thisCopy = {
|
|
565
565
|
path: buildPath.startsWith("file:") ? (0, import_node_url.fileURLToPath)(buildPath) : buildPath,
|
|
566
|
-
version: true ? "0.
|
|
566
|
+
version: true ? "0.25.0" : "unknown"
|
|
567
567
|
};
|
|
568
568
|
function warnCrossCopy(other, joined) {
|
|
569
569
|
if (other === thisCopy) return;
|
|
@@ -1547,6 +1547,41 @@ var OPENAI_DEFAULT_BASE_URL = "https://api.openai.com/v1";
|
|
|
1547
1547
|
var ANTHROPIC_DEFAULT_BASE_URL = "https://api.anthropic.com/v1";
|
|
1548
1548
|
var GEMINI_DEFAULT_BASE_URL = "https://generativelanguage.googleapis.com/v1beta";
|
|
1549
1549
|
|
|
1550
|
+
// src/ask-clock.ts
|
|
1551
|
+
var import_node_async_hooks2 = require("async_hooks");
|
|
1552
|
+
var askClockStorage = new import_node_async_hooks2.AsyncLocalStorage();
|
|
1553
|
+
function runWithAskClock(fn) {
|
|
1554
|
+
const tracker = { pausedMs: 0, activePauses: 0 };
|
|
1555
|
+
const enclosing = askClockStorage.getStore() ?? [];
|
|
1556
|
+
return askClockStorage.run([...enclosing, tracker], fn);
|
|
1557
|
+
}
|
|
1558
|
+
function currentAskClock() {
|
|
1559
|
+
return askClockStorage.getStore()?.at(-1);
|
|
1560
|
+
}
|
|
1561
|
+
function pausedAskClockMs(tracker, now = Date.now()) {
|
|
1562
|
+
return tracker.pausedMs + (tracker.activePauses > 0 && tracker.pauseStartedAt !== void 0 ? now - tracker.pauseStartedAt : 0);
|
|
1563
|
+
}
|
|
1564
|
+
async function pauseAskClocks(wait) {
|
|
1565
|
+
const trackers = askClockStorage.getStore();
|
|
1566
|
+
if (!trackers || trackers.length === 0) return wait();
|
|
1567
|
+
const startedAt = Date.now();
|
|
1568
|
+
for (const tracker of trackers) {
|
|
1569
|
+
if (tracker.activePauses++ === 0) tracker.pauseStartedAt = startedAt;
|
|
1570
|
+
}
|
|
1571
|
+
try {
|
|
1572
|
+
return await wait();
|
|
1573
|
+
} finally {
|
|
1574
|
+
const finishedAt = Date.now();
|
|
1575
|
+
for (const tracker of trackers) {
|
|
1576
|
+
tracker.activePauses--;
|
|
1577
|
+
if (tracker.activePauses === 0 && tracker.pauseStartedAt !== void 0) {
|
|
1578
|
+
tracker.pausedMs += finishedAt - tracker.pauseStartedAt;
|
|
1579
|
+
tracker.pauseStartedAt = void 0;
|
|
1580
|
+
}
|
|
1581
|
+
}
|
|
1582
|
+
}
|
|
1583
|
+
}
|
|
1584
|
+
|
|
1550
1585
|
// src/providers/rate-limiter.ts
|
|
1551
1586
|
function sanitizeRateLimitConfig(config) {
|
|
1552
1587
|
const limits = {};
|
|
@@ -2609,7 +2644,7 @@ async function fetchWithRetry(input, init, opts) {
|
|
|
2609
2644
|
let headersAt = 0;
|
|
2610
2645
|
const waitSelfImposed = async (wait) => {
|
|
2611
2646
|
const start = Date.now();
|
|
2612
|
-
await wait
|
|
2647
|
+
await pauseAskClocks(wait);
|
|
2613
2648
|
const waited = Date.now() - start;
|
|
2614
2649
|
queuedMs += waited;
|
|
2615
2650
|
if (dispatches > 0) queuedAfterFirstDispatchMs += waited;
|
|
@@ -9234,7 +9269,7 @@ var TranscriptionProviderRegistry = class {
|
|
|
9234
9269
|
};
|
|
9235
9270
|
|
|
9236
9271
|
// src/context.ts
|
|
9237
|
-
var
|
|
9272
|
+
var import_node_async_hooks3 = require("async_hooks");
|
|
9238
9273
|
var import_node_crypto = require("crypto");
|
|
9239
9274
|
var import_zod2 = require("zod");
|
|
9240
9275
|
|
|
@@ -12766,9 +12801,8 @@ function recordToolSpanOutcome(span, outcome) {
|
|
|
12766
12801
|
}
|
|
12767
12802
|
|
|
12768
12803
|
// src/context.ts
|
|
12769
|
-
var signalStorage = new
|
|
12770
|
-
var hardSignalStorage = new
|
|
12771
|
-
var timeoutTrackerStorage = new import_node_async_hooks2.AsyncLocalStorage();
|
|
12804
|
+
var signalStorage = new import_node_async_hooks3.AsyncLocalStorage();
|
|
12805
|
+
var hardSignalStorage = new import_node_async_hooks3.AsyncLocalStorage();
|
|
12772
12806
|
var MAX_TIMER_DELAY_MS = 2147483647;
|
|
12773
12807
|
function composeAbortSignals(...signals) {
|
|
12774
12808
|
const active = signals.filter((signal) => signal !== void 0);
|
|
@@ -12800,9 +12834,6 @@ function raceWithAbortSignal(promise, signal) {
|
|
|
12800
12834
|
);
|
|
12801
12835
|
});
|
|
12802
12836
|
}
|
|
12803
|
-
function pausedHumanWaitMs(tracker, now = Date.now()) {
|
|
12804
|
-
return tracker.humanWaitMs + (tracker.activeHumanWaits > 0 && tracker.humanWaitStartedAt !== void 0 ? now - tracker.humanWaitStartedAt : 0);
|
|
12805
|
-
}
|
|
12806
12837
|
var DEFAULT_BRANCH_DRAIN_TIMEOUT_MS = 5e3;
|
|
12807
12838
|
function resolveBranchDrainTimeoutMs(value) {
|
|
12808
12839
|
const resolved = value === void 0 ? DEFAULT_BRANCH_DRAIN_TIMEOUT_MS : value;
|
|
@@ -12873,7 +12904,7 @@ function parseHumanDecision(value) {
|
|
|
12873
12904
|
}
|
|
12874
12905
|
return invalid3();
|
|
12875
12906
|
}
|
|
12876
|
-
var askStorage = new
|
|
12907
|
+
var askStorage = new import_node_async_hooks3.AsyncLocalStorage();
|
|
12877
12908
|
var inlineSchemaCache = /* @__PURE__ */ new WeakMap();
|
|
12878
12909
|
function zodToJsonSchema(schema) {
|
|
12879
12910
|
const cached = inlineSchemaCache.get(schema);
|
|
@@ -13810,10 +13841,7 @@ var WorkflowContext = class _WorkflowContext {
|
|
|
13810
13841
|
return hardAskSignal ? hardSignalStorage.run(hardAskSignal, runWithAskSignal) : runWithAskSignal();
|
|
13811
13842
|
}
|
|
13812
13843
|
async executeAgentCall(agent2, input, options, handoffMessages, usageCapture, sessionHistory = normalizeSessionHistory(this.sessionHistory)) {
|
|
13813
|
-
|
|
13814
|
-
const enclosing = timeoutTrackerStorage.getStore() ?? [];
|
|
13815
|
-
return timeoutTrackerStorage.run(
|
|
13816
|
-
[...enclosing, tracker],
|
|
13844
|
+
return runWithAskClock(
|
|
13817
13845
|
() => this.executeAgentCallImpl(
|
|
13818
13846
|
agent2,
|
|
13819
13847
|
input,
|
|
@@ -14088,7 +14116,7 @@ ${appendedSchemaText}`;
|
|
|
14088
14116
|
);
|
|
14089
14117
|
}
|
|
14090
14118
|
const startTime = Date.now();
|
|
14091
|
-
const
|
|
14119
|
+
const askClock = currentAskClock();
|
|
14092
14120
|
const timingTotals = { turns: 0, queuedMs: 0, retryMs: 0, wireMs: 0 };
|
|
14093
14121
|
const currentMessages = [...messages];
|
|
14094
14122
|
let turns = 0;
|
|
@@ -14105,13 +14133,16 @@ ${appendedSchemaText}`;
|
|
|
14105
14133
|
while (turns < maxTurns) {
|
|
14106
14134
|
this.currentSignal?.throwIfAborted();
|
|
14107
14135
|
const now = Date.now();
|
|
14108
|
-
const elapsedMs = now - startTime
|
|
14109
|
-
|
|
14136
|
+
const elapsedMs = now - startTime;
|
|
14137
|
+
const pausedMs = askClock ? pausedAskClockMs(askClock, now) : 0;
|
|
14138
|
+
const chargedMs = Math.max(0, elapsedMs - Math.min(pausedMs, Math.max(0, elapsedMs)));
|
|
14139
|
+
if (chargedMs > timeoutMs) {
|
|
14110
14140
|
throw new TimeoutError(
|
|
14111
14141
|
"ctx.ask()",
|
|
14112
14142
|
timeoutMs,
|
|
14113
14143
|
timingTotals.turns > 0 ? {
|
|
14114
14144
|
elapsedMs,
|
|
14145
|
+
chargedMs,
|
|
14115
14146
|
queuedMs: timingTotals.queuedMs,
|
|
14116
14147
|
retryMs: timingTotals.retryMs,
|
|
14117
14148
|
wireMs: timingTotals.wireMs,
|
|
@@ -15981,12 +16012,7 @@ ${summaryResponse.content}`
|
|
|
15981
16012
|
}
|
|
15982
16013
|
// ── ctx.awaitHuman() ──────────────────────────────────────────────────
|
|
15983
16014
|
async awaitHuman(options) {
|
|
15984
|
-
|
|
15985
|
-
const startedAt = Date.now();
|
|
15986
|
-
for (const tracker of trackers ?? []) {
|
|
15987
|
-
if (tracker.activeHumanWaits++ === 0) tracker.humanWaitStartedAt = startedAt;
|
|
15988
|
-
}
|
|
15989
|
-
try {
|
|
16015
|
+
return pauseAskClocks(async () => {
|
|
15990
16016
|
if (this.spanManager) {
|
|
15991
16017
|
return await this.spanManager.withSpanAsync(
|
|
15992
16018
|
"axl.ctx.awaitHuman",
|
|
@@ -16003,16 +16029,7 @@ ${summaryResponse.content}`
|
|
|
16003
16029
|
);
|
|
16004
16030
|
}
|
|
16005
16031
|
return await this._awaitHumanImpl(options);
|
|
16006
|
-
}
|
|
16007
|
-
const finishedAt = Date.now();
|
|
16008
|
-
for (const tracker of trackers ?? []) {
|
|
16009
|
-
tracker.activeHumanWaits--;
|
|
16010
|
-
if (tracker.activeHumanWaits === 0 && tracker.humanWaitStartedAt !== void 0) {
|
|
16011
|
-
tracker.humanWaitMs += finishedAt - tracker.humanWaitStartedAt;
|
|
16012
|
-
tracker.humanWaitStartedAt = void 0;
|
|
16013
|
-
}
|
|
16014
|
-
}
|
|
16015
|
-
}
|
|
16032
|
+
});
|
|
16016
16033
|
}
|
|
16017
16034
|
async _awaitHumanImpl(options) {
|
|
16018
16035
|
const branchSignal = this.currentSignal;
|
|
@@ -17009,7 +17026,7 @@ function workflow(config) {
|
|
|
17009
17026
|
// src/runtime.ts
|
|
17010
17027
|
var import_node_events2 = require("events");
|
|
17011
17028
|
var import_node_crypto4 = require("crypto");
|
|
17012
|
-
var
|
|
17029
|
+
var import_node_async_hooks4 = require("async_hooks");
|
|
17013
17030
|
var import_node_fs3 = require("fs");
|
|
17014
17031
|
var import_node_path3 = require("path");
|
|
17015
17032
|
|
|
@@ -19189,7 +19206,7 @@ function assertNoRemovedObservationCallbacks(options) {
|
|
|
19189
19206
|
`runtime.createContext() no longer accepts ${removed.join(", ")}. Observe ctx.events or use runtime.stream() instead. See docs/migration/stream-first-observation.md.`
|
|
19190
19207
|
);
|
|
19191
19208
|
}
|
|
19192
|
-
var costScopeStorage = new
|
|
19209
|
+
var costScopeStorage = new import_node_async_hooks4.AsyncLocalStorage();
|
|
19193
19210
|
function forwardAbortSignal(external, internal) {
|
|
19194
19211
|
if (!external) return () => {
|
|
19195
19212
|
};
|