@t2000/engine 1.13.1 → 1.14.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.d.ts +37 -32
- package/dist/index.js +17 -8
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.d.ts
CHANGED
|
@@ -1715,41 +1715,46 @@ declare function bundleShortestTtl(toolUseIds: string[], toolNamesById: Record<s
|
|
|
1715
1715
|
declare const REGENERATABLE_READ_TOOLS: ReadonlySet<string>;
|
|
1716
1716
|
|
|
1717
1717
|
/**
|
|
1718
|
-
* [Phase 0 / SPEC 13
|
|
1719
|
-
*
|
|
1720
|
-
* **History.**
|
|
1721
|
-
* Phase
|
|
1722
|
-
*
|
|
1723
|
-
*
|
|
1724
|
-
*
|
|
1725
|
-
*
|
|
1726
|
-
*
|
|
1727
|
-
*
|
|
1728
|
-
*
|
|
1729
|
-
*
|
|
1730
|
-
*
|
|
1731
|
-
*
|
|
1732
|
-
*
|
|
1733
|
-
*
|
|
1734
|
-
*
|
|
1735
|
-
*
|
|
1736
|
-
*
|
|
1737
|
-
*
|
|
1738
|
-
*
|
|
1739
|
-
*
|
|
1740
|
-
*
|
|
1741
|
-
*
|
|
1742
|
-
*
|
|
1743
|
-
*
|
|
1744
|
-
*
|
|
1745
|
-
*
|
|
1746
|
-
*
|
|
1718
|
+
* [Phase 0 → Phase 2 / SPEC 13] Maximum number of writes per atomic bundle.
|
|
1719
|
+
*
|
|
1720
|
+
* **History.**
|
|
1721
|
+
* - Pre-Phase-0: 5 (F14-fix-2, 2026-05-03 morning).
|
|
1722
|
+
* - Phase 0 (1.12.0, 2026-05-03 evening): tightened to 2 after the May 3
|
|
1723
|
+
* production review found bundle failures all reduced to chained-asset
|
|
1724
|
+
* gaps — the SDK pre-fetched coins from the wallet and the chained
|
|
1725
|
+
* asset didn't exist yet (e.g. `swap_execute(USDC→USDsui) +
|
|
1726
|
+
* save_deposit(USDsui)` reverted at PREPARE because USDsui wasn't in
|
|
1727
|
+
* the wallet at compose time).
|
|
1728
|
+
* - Phase 1 (1.13.0): cap stayed 2. SPEC 13 Phase 1 added the chained-
|
|
1729
|
+
* coin handoff primitive (`PendingActionStep.inputCoinFromStep` +
|
|
1730
|
+
* `composeTx` orchestration loop) but didn't widen the cap. The
|
|
1731
|
+
* primitive is what makes Phase 2's raise to 3 possible — without it,
|
|
1732
|
+
* every additional step is another wallet-fetch race.
|
|
1733
|
+
* - Phase 2 (1.14.0, this version): cap raised to 3. Composition rule
|
|
1734
|
+
* is strict-adjacency: every (step[i], step[i+1]) pair must be in
|
|
1735
|
+
* `VALID_PAIRS`. No new pairs added — Phase 2 is purely the cap raise
|
|
1736
|
+
* + adjacency-loop validation. The chain-mode population loop already
|
|
1737
|
+
* runs over every `(i, i+1)` since 1.13.0, so 3-op atomic bundles
|
|
1738
|
+
* like `withdraw → swap → send` thread two coin handles end-to-end
|
|
1739
|
+
* in one PTB.
|
|
1740
|
+
*
|
|
1741
|
+
* **Why strict adjacency?** Every consecutive pair must be whitelisted
|
|
1742
|
+
* even if the consumer doesn't chain (no `inputCoinFromStep`). This
|
|
1743
|
+
* keeps the validator simple and matches the spec's Phase 2 model. The
|
|
1744
|
+
* looser DAG-aware variant (where non-chained adjacent steps can be
|
|
1745
|
+
* any tool combo) is a Phase 3 follow-up — defer until we see real
|
|
1746
|
+
* production flows that need it.
|
|
1747
|
+
*
|
|
1748
|
+
* **Phase 3+:** `swap_execute → swap_execute` (Demo 1 unlock) + DAG-aware
|
|
1749
|
+
* validator + cap raise to 4. SPEC 13 §"Phase 3" / §"Phase 5" tracks
|
|
1750
|
+
* these. Don't pre-emptively raise this constant past 3 without those
|
|
1751
|
+
* landing.
|
|
1747
1752
|
*
|
|
1748
1753
|
* Hosts importing this constant for system-prompt construction get the
|
|
1749
|
-
* current cap automatically. Bumping the cap
|
|
1750
|
-
*
|
|
1754
|
+
* current cap automatically. Bumping the cap is a one-line change here
|
|
1755
|
+
* that propagates to prompts via the import.
|
|
1751
1756
|
*/
|
|
1752
|
-
declare const MAX_BUNDLE_OPS =
|
|
1757
|
+
declare const MAX_BUNDLE_OPS = 3;
|
|
1753
1758
|
/**
|
|
1754
1759
|
* [Phase 0 / SPEC 13] Whitelisted (producer, consumer) pairs for atomic
|
|
1755
1760
|
* bundling. Every key has the shape `${producer}->${consumer}`. Bundles
|
package/dist/index.js
CHANGED
|
@@ -6737,7 +6737,7 @@ var REGENERATABLE_READ_TOOLS = /* @__PURE__ */ new Set([
|
|
|
6737
6737
|
]);
|
|
6738
6738
|
|
|
6739
6739
|
// src/compose-bundle.ts
|
|
6740
|
-
var MAX_BUNDLE_OPS =
|
|
6740
|
+
var MAX_BUNDLE_OPS = 3;
|
|
6741
6741
|
var VALID_PAIRS = /* @__PURE__ */ new Set([
|
|
6742
6742
|
"swap_execute->send_transfer",
|
|
6743
6743
|
"swap_execute->save_deposit",
|
|
@@ -7916,13 +7916,22 @@ ${recipeCtx}`;
|
|
|
7916
7916
|
const turnIndex = this.messages.filter((m) => m.role === "assistant").length;
|
|
7917
7917
|
this.turnPaused = true;
|
|
7918
7918
|
if (allBundleable) {
|
|
7919
|
-
if (guardPassedWrites.length
|
|
7920
|
-
|
|
7921
|
-
|
|
7922
|
-
|
|
7923
|
-
|
|
7919
|
+
if (guardPassedWrites.length >= 2) {
|
|
7920
|
+
let badPair = null;
|
|
7921
|
+
for (let i = 0; i < guardPassedWrites.length - 1; i++) {
|
|
7922
|
+
const producer = guardPassedWrites[i].call.name;
|
|
7923
|
+
const consumer = guardPassedWrites[i + 1].call.name;
|
|
7924
|
+
const check = checkValidPair(producer, consumer);
|
|
7925
|
+
if (!check.ok) {
|
|
7926
|
+
badPair = check;
|
|
7927
|
+
break;
|
|
7928
|
+
}
|
|
7929
|
+
}
|
|
7930
|
+
if (badPair !== null) {
|
|
7931
|
+
const N = guardPassedWrites.length;
|
|
7932
|
+
const stepsPhrase = N === 2 ? "two steps" : `${N} steps`;
|
|
7924
7933
|
const pairError = {
|
|
7925
|
-
error: `Bundle pair '${
|
|
7934
|
+
error: `Bundle pair '${badPair.pair}' is not in the chaining whitelist. Whitelisted pairs: ${[...VALID_PAIRS].join(", ")}. Run these ${N} writes sequentially: tell the user "I'll do this in ${stepsPhrase}", emit only the first write, then the next after it lands and confirms.`,
|
|
7926
7935
|
_gate: "pair_not_whitelisted"
|
|
7927
7936
|
};
|
|
7928
7937
|
for (const write of guardPassedWrites) {
|
|
@@ -7946,7 +7955,7 @@ ${recipeCtx}`;
|
|
|
7946
7955
|
getTelemetrySink().counter("engine.turn_outcome", {
|
|
7947
7956
|
entry: freshPrompt !== null ? "submit" : "resume",
|
|
7948
7957
|
outcome: "pair_not_whitelisted_continue",
|
|
7949
|
-
pair:
|
|
7958
|
+
pair: badPair.pair
|
|
7950
7959
|
});
|
|
7951
7960
|
continue;
|
|
7952
7961
|
}
|