claude-code-infinite 1.0.32 → 1.0.34
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 +34 -11
- package/dist/cli-args.d.ts +7 -0
- package/dist/cli-args.d.ts.map +1 -1
- package/dist/cli-args.js +19 -0
- package/dist/cli-args.js.map +1 -1
- package/dist/cli-main.js +28 -10
- package/dist/cli-main.js.map +1 -1
- package/dist/count-tokens.d.ts +7 -3
- package/dist/count-tokens.d.ts.map +1 -1
- package/dist/count-tokens.js +6 -2
- package/dist/count-tokens.js.map +1 -1
- package/dist/hooks.d.ts +21 -1
- package/dist/hooks.d.ts.map +1 -1
- package/dist/hooks.js +36 -6
- package/dist/hooks.js.map +1 -1
- package/dist/host-session.d.ts +12 -0
- package/dist/host-session.d.ts.map +1 -0
- package/dist/host-session.js +12 -0
- package/dist/host-session.js.map +1 -0
- package/dist/image-refs.d.ts +24 -2
- package/dist/image-refs.d.ts.map +1 -1
- package/dist/image-refs.js +67 -20
- package/dist/image-refs.js.map +1 -1
- package/dist/index-wait-413.d.ts +26 -0
- package/dist/index-wait-413.d.ts.map +1 -0
- package/dist/index-wait-413.js +113 -0
- package/dist/index-wait-413.js.map +1 -0
- package/dist/memtree-finder.d.ts +70 -6
- package/dist/memtree-finder.d.ts.map +1 -1
- package/dist/memtree-finder.js +150 -20
- package/dist/memtree-finder.js.map +1 -1
- package/dist/memtree-handover.d.ts +13 -0
- package/dist/memtree-handover.d.ts.map +1 -0
- package/dist/memtree-handover.js +231 -0
- package/dist/memtree-handover.js.map +1 -0
- package/dist/memtree-mcp-config.d.ts +2 -2
- package/dist/memtree-mcp-config.d.ts.map +1 -1
- package/dist/memtree-mcp-config.js +8 -5
- package/dist/memtree-mcp-config.js.map +1 -1
- package/dist/memtree-mcp.d.ts +182 -2
- package/dist/memtree-mcp.d.ts.map +1 -1
- package/dist/memtree-mcp.js +357 -38
- package/dist/memtree-mcp.js.map +1 -1
- package/dist/memtree-newest.d.ts +21 -3
- package/dist/memtree-newest.d.ts.map +1 -1
- package/dist/memtree-newest.js +43 -11
- package/dist/memtree-newest.js.map +1 -1
- package/dist/memtree-times.d.ts +33 -0
- package/dist/memtree-times.d.ts.map +1 -1
- package/dist/memtree-times.js +77 -0
- package/dist/memtree-times.js.map +1 -1
- package/dist/memtree-tools.d.ts +19 -5
- package/dist/memtree-tools.d.ts.map +1 -1
- package/dist/memtree-tools.js +97 -23
- package/dist/memtree-tools.js.map +1 -1
- package/dist/memtree.d.ts +109 -3
- package/dist/memtree.d.ts.map +1 -1
- package/dist/memtree.js +382 -21
- package/dist/memtree.js.map +1 -1
- package/dist/network-failure.d.ts +28 -0
- package/dist/network-failure.d.ts.map +1 -0
- package/dist/network-failure.js +67 -0
- package/dist/network-failure.js.map +1 -0
- package/dist/open-url.d.ts +49 -0
- package/dist/open-url.d.ts.map +1 -0
- package/dist/open-url.js +100 -0
- package/dist/open-url.js.map +1 -0
- package/dist/prefix-store.d.ts +4 -0
- package/dist/prefix-store.d.ts.map +1 -1
- package/dist/prefix-store.js +8 -4
- package/dist/prefix-store.js.map +1 -1
- package/dist/project-trees.d.ts +15 -7
- package/dist/project-trees.d.ts.map +1 -1
- package/dist/project-trees.js +20 -9
- package/dist/project-trees.js.map +1 -1
- package/dist/proxy.d.ts +125 -1
- package/dist/proxy.d.ts.map +1 -1
- package/dist/proxy.js +838 -74
- package/dist/proxy.js.map +1 -1
- package/dist/reqlog.d.ts +34 -0
- package/dist/reqlog.d.ts.map +1 -1
- package/dist/reqlog.js.map +1 -1
- package/dist/resume-guidance.d.ts +9 -3
- package/dist/resume-guidance.d.ts.map +1 -1
- package/dist/resume-guidance.js +9 -3
- package/dist/resume-guidance.js.map +1 -1
- package/dist/route-fallback.d.ts +77 -11
- package/dist/route-fallback.d.ts.map +1 -1
- package/dist/route-fallback.js +157 -33
- package/dist/route-fallback.js.map +1 -1
- package/dist/route-identity.d.ts +6 -2
- package/dist/route-identity.d.ts.map +1 -1
- package/dist/route-identity.js +209 -16
- package/dist/route-identity.js.map +1 -1
- package/dist/subagent-hint.d.ts +28 -0
- package/dist/subagent-hint.d.ts.map +1 -1
- package/dist/subagent-hint.js +37 -0
- package/dist/subagent-hint.js.map +1 -1
- package/package.json +1 -1
package/dist/route-fallback.js
CHANGED
|
@@ -9,6 +9,14 @@ export function fitsFallbackBudget(inputTokens, outputTokens, budgetTokens, cont
|
|
|
9
9
|
}
|
|
10
10
|
/** How long a lane may wait for MemTree to finish indexing before refusing. */
|
|
11
11
|
export const INDEX_WAIT_DEADLINE_MS = 10 * 60_000;
|
|
12
|
+
/**
|
|
13
|
+
* The most a lane waits for an index whose time left the server stated (a 413's
|
|
14
|
+
* Retry-After): longer estimates refuse at once, and later ones extend a wait only to here.
|
|
15
|
+
*/
|
|
16
|
+
export const INDEX_WAIT_MAX_MS = 15 * 60_000;
|
|
17
|
+
/** A stated time left is waited for this much longer (estimates run over: 2026-11-09). */
|
|
18
|
+
export const INDEX_WAIT_MARGIN_RATIO = 0.5;
|
|
19
|
+
export const INDEX_WAIT_MARGIN_MS = 2 * 60_000;
|
|
12
20
|
/** Seconds Claude Code waits between retries while the index catches up. */
|
|
13
21
|
export const INDEX_WAIT_RETRY_AFTER_SECONDS = 30;
|
|
14
22
|
export const FINAL_REFUSAL_MESSAGE = "MemTree couldn't fit this request in the model's context window. If MemTree is " +
|
|
@@ -25,21 +33,66 @@ export const FINAL_REFUSAL_MESSAGE = "MemTree couldn't fit this request in the m
|
|
|
25
33
|
export class RouteFallbackFailures {
|
|
26
34
|
capacity;
|
|
27
35
|
indexWaitMs;
|
|
36
|
+
indexWaitMaxMs;
|
|
28
37
|
failures = new Map();
|
|
29
|
-
/**
|
|
38
|
+
/**
|
|
39
|
+
* Lane -> when its index wait began and when it ends; `over` once it ended but the
|
|
40
|
+
* strike table had no room to record the refusal (still refused, never extended).
|
|
41
|
+
*/
|
|
30
42
|
indexWaits = new Map();
|
|
31
|
-
|
|
43
|
+
/** Lane -> when it was last seen waiting for its index; a delivery does not clear it. */
|
|
44
|
+
indexWaitSeen = new Map();
|
|
45
|
+
constructor(capacity = 128,
|
|
46
|
+
/** A wait's length when the server stated no time left. */
|
|
47
|
+
indexWaitMs = INDEX_WAIT_DEADLINE_MS, indexWaitMaxMs = INDEX_WAIT_MAX_MS) {
|
|
32
48
|
this.capacity = capacity;
|
|
33
49
|
this.indexWaitMs = indexWaitMs;
|
|
50
|
+
this.indexWaitMaxMs = indexWaitMaxMs;
|
|
34
51
|
}
|
|
35
52
|
fail(lane, context = {}) {
|
|
36
53
|
if (context.awaitingIndex) {
|
|
37
|
-
const waiting = this.waitForIndex(lane, context.now ?? Date.now());
|
|
54
|
+
const waiting = this.waitForIndex(lane, context.now ?? Date.now(), context.indexSecondsLeft);
|
|
38
55
|
if (waiting)
|
|
39
56
|
return waiting;
|
|
40
57
|
}
|
|
41
58
|
return this.strike(lane);
|
|
42
59
|
}
|
|
60
|
+
/**
|
|
61
|
+
* Note MemTree saying the lane's index is still catching up (a held request's 413):
|
|
62
|
+
* starts the lane's wait, or extends it by the stated time left. False once waiting
|
|
63
|
+
* can no longer pay off (the estimate is past the cap, the wait's deadline passed, or
|
|
64
|
+
* the lane was refused), so a held request stops asking and is refused.
|
|
65
|
+
*/
|
|
66
|
+
indexWaitOpen(lane, secondsLeft, now = Date.now()) {
|
|
67
|
+
return this.track(lane, now, secondsLeft) !== "closed";
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* indexWaitOpen, and when the lane's wait ends: its deadline (Infinity when no slot was
|
|
71
|
+
* free to track it), or undefined once closed.
|
|
72
|
+
*/
|
|
73
|
+
indexWaitDeadline(lane, secondsLeft, now = Date.now()) {
|
|
74
|
+
const state = this.track(lane, now, secondsLeft);
|
|
75
|
+
if (state === "closed")
|
|
76
|
+
return undefined;
|
|
77
|
+
return state === "untracked" ? Infinity : this.indexWaits.get(lane).deadline;
|
|
78
|
+
}
|
|
79
|
+
/** Whether the lane is waiting for its index (a wait started, not yet ended). */
|
|
80
|
+
indexWaiting(lane) {
|
|
81
|
+
const wait = this.indexWaits.get(lane);
|
|
82
|
+
return wait !== undefined && !wait.over;
|
|
83
|
+
}
|
|
84
|
+
/** Whether the lane waits for its index now, or did at any time from `since` on. */
|
|
85
|
+
indexWaitSince(lane, since) {
|
|
86
|
+
return this.indexWaiting(lane) || (this.indexWaitSeen.get(lane) ?? -Infinity) >= since;
|
|
87
|
+
}
|
|
88
|
+
/** The time left MemTree last stated for the lane's index wait, if any. */
|
|
89
|
+
indexSecondsLeft(lane) {
|
|
90
|
+
return this.indexWaits.get(lane)?.secondsLeft;
|
|
91
|
+
}
|
|
92
|
+
/** Whether a stated time left is too long to wait for at all (refused at once). */
|
|
93
|
+
hopeless(secondsLeft) {
|
|
94
|
+
return secondsLeft !== undefined && secondsLeft * 1000 > this.indexWaitMaxMs;
|
|
95
|
+
}
|
|
43
96
|
succeeded(lane) {
|
|
44
97
|
this.failures.delete(lane);
|
|
45
98
|
this.indexWaits.delete(lane);
|
|
@@ -57,53 +110,115 @@ export class RouteFallbackFailures {
|
|
|
57
110
|
return attempt <= 2 ? retryError(attempt, "1", RETRY_MESSAGE) : refusal(attempt);
|
|
58
111
|
}
|
|
59
112
|
/**
|
|
60
|
-
* A 503 while the lane's wait is within its deadline; a 400 once it passes
|
|
61
|
-
* The deadline is
|
|
62
|
-
*
|
|
63
|
-
*
|
|
64
|
-
*
|
|
113
|
+
* A 503 while the lane's wait is within its deadline; a 400 once it passes, or at once
|
|
114
|
+
* for a stated time left past the cap. The deadline is set when the wait starts (the
|
|
115
|
+
* stated time plus a margin, else indexWaitMs); a later stated time may extend it up to
|
|
116
|
+
* indexWaitMaxMs from the start, and only a delivery clears it: an expired wait becomes
|
|
117
|
+
* a terminal strike state, and an active wait is never evicted. A lane already refused,
|
|
118
|
+
* or arriving while every wait slot is active, gets no wait (undefined) and falls back
|
|
119
|
+
* to the strikes.
|
|
65
120
|
*/
|
|
66
|
-
waitForIndex(lane, now) {
|
|
121
|
+
waitForIndex(lane, now, secondsLeft) {
|
|
122
|
+
const state = this.track(lane, now, secondsLeft);
|
|
123
|
+
if (state === "untracked")
|
|
124
|
+
return undefined;
|
|
125
|
+
return state === "open" ? this.indexWaitError(lane, secondsLeft) : refusal(3);
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Start or extend the lane's wait: "open" while the index may still land in time,
|
|
129
|
+
* "closed" once it may not (and the lane is refused until a delivery), "untracked"
|
|
130
|
+
* when every wait slot is taken (the strikes decide).
|
|
131
|
+
*/
|
|
132
|
+
track(lane, now, secondsLeft) {
|
|
133
|
+
const state = this.trackWait(lane, now, secondsLeft);
|
|
134
|
+
if (state !== "closed")
|
|
135
|
+
this.seen(lane, now);
|
|
136
|
+
return state;
|
|
137
|
+
}
|
|
138
|
+
/** Note the lane waiting for its index at `now` (bounded: oldest first out). */
|
|
139
|
+
seen(lane, now) {
|
|
140
|
+
this.indexWaitSeen.delete(lane);
|
|
141
|
+
this.indexWaitSeen.set(lane, now);
|
|
142
|
+
if (this.indexWaitSeen.size > this.capacity) {
|
|
143
|
+
this.indexWaitSeen.delete(this.indexWaitSeen.keys().next().value);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
trackWait(lane, now, secondsLeft) {
|
|
147
|
+
if ((this.failures.get(lane) ?? 0) >= 3)
|
|
148
|
+
return "closed";
|
|
67
149
|
const wait = this.indexWaits.get(lane);
|
|
150
|
+
if (wait?.over)
|
|
151
|
+
return "closed";
|
|
152
|
+
if (this.hopeless(secondsLeft))
|
|
153
|
+
return this.close(lane);
|
|
68
154
|
if (wait === undefined) {
|
|
69
|
-
if ((this.failures.get(lane) ?? 0) >= 3)
|
|
70
|
-
return undefined;
|
|
71
155
|
this.retireExpiredWaits(now);
|
|
72
156
|
if (this.indexWaits.size >= this.capacity)
|
|
73
|
-
return
|
|
74
|
-
this.indexWaits.set(lane, now)
|
|
75
|
-
|
|
157
|
+
return "untracked";
|
|
158
|
+
this.indexWaits.set(lane, { started: now, deadline: this.deadline(now, now, secondsLeft),
|
|
159
|
+
secondsLeft });
|
|
160
|
+
return "open";
|
|
76
161
|
}
|
|
77
|
-
if (
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
162
|
+
if (secondsLeft !== undefined) {
|
|
163
|
+
wait.secondsLeft = secondsLeft;
|
|
164
|
+
wait.deadline = Math.max(wait.deadline, this.deadline(wait.started, now, secondsLeft));
|
|
165
|
+
}
|
|
166
|
+
return now < wait.deadline ? "open" : this.close(lane);
|
|
167
|
+
}
|
|
168
|
+
/** When a wait begun at `started` ends, given the time left stated at `now`. */
|
|
169
|
+
deadline(started, now, secondsLeft) {
|
|
170
|
+
if (secondsLeft === undefined)
|
|
171
|
+
return started + this.indexWaitMs;
|
|
172
|
+
const ms = secondsLeft * 1000;
|
|
173
|
+
return Math.min(started + this.indexWaitMaxMs, now + ms + ms * INDEX_WAIT_MARGIN_RATIO + INDEX_WAIT_MARGIN_MS);
|
|
81
174
|
}
|
|
82
|
-
indexWaitError(lane) {
|
|
83
|
-
|
|
175
|
+
indexWaitError(lane, secondsLeft) {
|
|
176
|
+
const retryAfter = secondsLeft === undefined ? INDEX_WAIT_RETRY_AFTER_SECONDS
|
|
177
|
+
: Math.max(1, Math.min(INDEX_WAIT_RETRY_AFTER_SECONDS, Math.ceil(secondsLeft)));
|
|
178
|
+
return retryError(this.failures.get(lane) ?? 0, String(retryAfter), indexWaitStatus(secondsLeft));
|
|
84
179
|
}
|
|
85
180
|
/** Free the slots of waits past their deadline, keeping them refused. */
|
|
86
181
|
retireExpiredWaits(now) {
|
|
87
|
-
for (const [lane,
|
|
88
|
-
if (now
|
|
89
|
-
this.
|
|
182
|
+
for (const [lane, wait] of this.indexWaits) {
|
|
183
|
+
if (now >= wait.deadline)
|
|
184
|
+
this.close(lane);
|
|
90
185
|
}
|
|
91
186
|
}
|
|
92
187
|
/**
|
|
93
|
-
*
|
|
94
|
-
*
|
|
95
|
-
*
|
|
188
|
+
* End the lane's wait in the terminal strike state. If the strike table is full a wait
|
|
189
|
+
* keeps its slot instead, marked over (still refused, never extended), so no lane can
|
|
190
|
+
* be re-admitted with a fresh deadline; with neither, the refusal stands for this
|
|
191
|
+
* request only.
|
|
96
192
|
*/
|
|
97
|
-
|
|
98
|
-
if (
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
193
|
+
close(lane) {
|
|
194
|
+
if (this.failures.has(lane) || this.failures.size < this.capacity) {
|
|
195
|
+
this.failures.set(lane, 3);
|
|
196
|
+
this.indexWaits.delete(lane);
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
const wait = this.indexWaits.get(lane);
|
|
200
|
+
if (wait)
|
|
201
|
+
wait.over = true;
|
|
202
|
+
}
|
|
203
|
+
return "closed";
|
|
102
204
|
}
|
|
103
205
|
}
|
|
104
206
|
const RETRY_MESSAGE = "MemTree could not produce a usable compressed request; retrying within a bounded limit.";
|
|
105
|
-
|
|
106
|
-
|
|
207
|
+
/**
|
|
208
|
+
* The one-line status a waiting turn shows (Claude Code prints a 503's message on its
|
|
209
|
+
* retry line): how long the server expects, when it said.
|
|
210
|
+
*/
|
|
211
|
+
export function indexWaitStatus(secondsLeft) {
|
|
212
|
+
const left = secondsLeft === undefined ? ""
|
|
213
|
+
: `, ${timeLeftText(secondsLeft)} left by its estimate`;
|
|
214
|
+
return `MemTree is catching up on this session's index${left}. ` +
|
|
215
|
+
"This turn continues on its own once it's ready.";
|
|
216
|
+
}
|
|
217
|
+
/** "about 1 minute", "about 5 minutes" (whole minutes, rounded up). */
|
|
218
|
+
export function timeLeftText(seconds) {
|
|
219
|
+
const minutes = Math.max(1, Math.ceil(seconds / 60));
|
|
220
|
+
return minutes === 1 ? "about 1 minute" : `about ${minutes} minutes`;
|
|
221
|
+
}
|
|
107
222
|
/**
|
|
108
223
|
* The refusal while MemTree is paused (402): only compression could fit the
|
|
109
224
|
* request, and a retry cannot pay, so it is final at once and outside the
|
|
@@ -113,6 +228,15 @@ export function pausedRefusal(message) {
|
|
|
113
228
|
return { ...refusal(0), body: { type: "error",
|
|
114
229
|
error: { type: "invalid_request_error", message } } };
|
|
115
230
|
}
|
|
231
|
+
/**
|
|
232
|
+
* The refusal while MemTree can't be reached (network-failure.ts): nothing says the request
|
|
233
|
+
* can't fit, so it is retryable and outside the strike episode (attempt 0). No retry-after:
|
|
234
|
+
* Claude Code backs off as for its own connection errors, giving the network time to return.
|
|
235
|
+
*/
|
|
236
|
+
export function unreachableRefusal(message) {
|
|
237
|
+
return { status: 503, attempt: 0, headers: { "x-should-retry": "true" },
|
|
238
|
+
body: { type: "error", error: { type: "api_error", message } } };
|
|
239
|
+
}
|
|
116
240
|
function retryError(attempt, retryAfter, message) {
|
|
117
241
|
return {
|
|
118
242
|
status: 503,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route-fallback.js","sourceRoot":"","sources":["../src/route-fallback.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACpE,OAAO,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEhG;;oEAEoE;AACpE,MAAM,UAAU,kBAAkB,CAChC,WAAmB,EACnB,YAAoB,EACpB,YAAoB,EACpB,aAAqB,EACrB,KAAc;IAEd,OAAO,CAAC,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,CAAC,CAAC,KAAK,CACnE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAChD,IAAI,UAAU,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,aAAa;QACzE,MAAM,EAAE,iBAAiB,CAAC,KAAK,EAAE,YAAY,CAAC,EAAE,CAAC,CAAC;AACtD,CAAC;AASD,+EAA+E;AAC/E,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAE,GAAG,MAAM,CAAC;AAClD,4EAA4E;AAC5E,MAAM,CAAC,MAAM,8BAA8B,GAAG,EAAE,CAAC;AAEjD,MAAM,CAAC,MAAM,qBAAqB,GAChC,iFAAiF;IACjF,8DAA8D,mBAAmB,GAAG;IACpF,GAAG,oBAAoB,4CAA4C;IACnE,IAAI,mBAAmB,IAAI,uBAAuB,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"route-fallback.js","sourceRoot":"","sources":["../src/route-fallback.ts"],"names":[],"mappings":"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"}
|
package/dist/route-identity.d.ts
CHANGED
|
@@ -9,6 +9,8 @@ export declare function stablePrefixMessageHash(message: Message): string;
|
|
|
9
9
|
export declare function prefixIdentity(messages: Message[], kind: PrefixIdentity): {
|
|
10
10
|
originalPrefixHashes: string[];
|
|
11
11
|
originalMediaFreeHashes: string[];
|
|
12
|
+
originalPortableHashes: string[];
|
|
13
|
+
originalPortableMediaFreeHashes: string[];
|
|
12
14
|
};
|
|
13
15
|
/**
|
|
14
16
|
* Whether `message` still stands where a prefix's message stood: unchanged, or the same
|
|
@@ -17,9 +19,11 @@ export declare function prefixIdentity(messages: Message[], kind: PrefixIdentity
|
|
|
17
19
|
* becomes a placeholder, a top-level one is dropped, an emptied message becomes the
|
|
18
20
|
* placeholder. That counts only when the message has no media left, so an attachment
|
|
19
21
|
* replaced by another never matches; a removed one is indistinguishable from eviction.
|
|
20
|
-
*
|
|
22
|
+
* A newer Claude Code can also render the same history differently on resume (see
|
|
23
|
+
* portableHash), with media kept or (no media left) evicted the same way.
|
|
24
|
+
* Prefixes stored before media-free or portable hashes existed match exactly only.
|
|
21
25
|
*/
|
|
22
|
-
export declare function prefixMessageMatches(message: Message, kind: PrefixIdentity, exact: string, mediaFree: string | undefined): boolean;
|
|
26
|
+
export declare function prefixMessageMatches(message: Message, kind: PrefixIdentity, exact: string, mediaFree: string | undefined, portable?: string, portableMediaFree?: string): boolean;
|
|
23
27
|
/**
|
|
24
28
|
* Whether `newer` carries everything `older` does: every message of `older` after the
|
|
25
29
|
* system prompt (whose billing line changes per call), in place and unchanged apart from
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route-identity.d.ts","sourceRoot":"","sources":["../src/route-identity.ts"],"names":[],"mappings":"AACA,OAAO,EAA2B,KAAK,OAAO,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"route-identity.d.ts","sourceRoot":"","sources":["../src/route-identity.ts"],"names":[],"mappings":"AACA,OAAO,EAA2B,KAAK,OAAO,EAAE,MAAM,YAAY,CAAC;AAoBnE,gFAAgF;AAChF,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEhD,qFAAqF;AACrF,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAEzD;AAED,mFAAmF;AACnF,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAEhE;AAED,qEAAqE;AACrE,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,cAAc,GACxC;IACD,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAAC,uBAAuB,EAAE,MAAM,EAAE,CAAC;IAClE,sBAAsB,EAAE,MAAM,EAAE,CAAC;IAAC,+BAA+B,EAAE,MAAM,EAAE,CAAC;CAC7E,CAQA;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,EACpF,QAAQ,CAAC,EAAE,MAAM,EAAE,iBAAiB,CAAC,EAAE,MAAM,GAC5C,OAAO,CAQT;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,OAAO,CAK1E;AAED,sFAAsF;AACtF,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAE7D"}
|
package/dist/route-identity.js
CHANGED
|
@@ -2,17 +2,18 @@ import { createHash } from "node:crypto";
|
|
|
2
2
|
import { stripSystemReminderText } from "./turns.js";
|
|
3
3
|
// Request messages are immutable snapshots. Weak keys retain no completed request.
|
|
4
4
|
// Route installation stores these digests, not the original megabytes of history.
|
|
5
|
-
const
|
|
6
|
-
|
|
7
|
-
const
|
|
8
|
-
const
|
|
5
|
+
const hashCaches = new Map();
|
|
6
|
+
/** Each message's tool input JSON strings (jsonStringFields), computed once. */
|
|
7
|
+
const jsonFieldCache = new WeakMap();
|
|
8
|
+
const EXACT = { media: "keep" };
|
|
9
|
+
const MEDIA_FREE = { media: "drop" };
|
|
9
10
|
/** Hash each incoming message once, then reuse it across route candidates/checks. */
|
|
10
11
|
export function routeMessageHash(message) {
|
|
11
|
-
return messageHash(message, false,
|
|
12
|
+
return messageHash(message, false, EXACT);
|
|
12
13
|
}
|
|
13
14
|
/** Stable prefixes span turns in which Claude can omit earlier thinking blocks. */
|
|
14
15
|
export function stablePrefixMessageHash(message) {
|
|
15
|
-
return messageHash(message, stableShape(message),
|
|
16
|
+
return messageHash(message, stableShape(message), EXACT);
|
|
16
17
|
}
|
|
17
18
|
/** The identities a prefix stores for the messages it stands for. */
|
|
18
19
|
export function prefixIdentity(messages, kind) {
|
|
@@ -20,6 +21,8 @@ export function prefixIdentity(messages, kind) {
|
|
|
20
21
|
return {
|
|
21
22
|
originalPrefixHashes: messages.map(exact),
|
|
22
23
|
originalMediaFreeHashes: messages.map((m) => mediaFreeHash(m, kind)),
|
|
24
|
+
originalPortableHashes: messages.map((m) => portableIdentity(m, kind, "keep")),
|
|
25
|
+
originalPortableMediaFreeHashes: messages.map((m) => portableIdentity(m, kind, "drop")),
|
|
23
26
|
};
|
|
24
27
|
}
|
|
25
28
|
/**
|
|
@@ -29,14 +32,21 @@ export function prefixIdentity(messages, kind) {
|
|
|
29
32
|
* becomes a placeholder, a top-level one is dropped, an emptied message becomes the
|
|
30
33
|
* placeholder. That counts only when the message has no media left, so an attachment
|
|
31
34
|
* replaced by another never matches; a removed one is indistinguishable from eviction.
|
|
32
|
-
*
|
|
35
|
+
* A newer Claude Code can also render the same history differently on resume (see
|
|
36
|
+
* portableHash), with media kept or (no media left) evicted the same way.
|
|
37
|
+
* Prefixes stored before media-free or portable hashes existed match exactly only.
|
|
33
38
|
*/
|
|
34
|
-
export function prefixMessageMatches(message, kind, exact, mediaFree) {
|
|
39
|
+
export function prefixMessageMatches(message, kind, exact, mediaFree, portable, portableMediaFree) {
|
|
35
40
|
const hash = kind === "stable" ? stablePrefixMessageHash(message) : routeMessageHash(message);
|
|
36
41
|
if (hash === exact)
|
|
37
42
|
return true;
|
|
38
|
-
|
|
39
|
-
|
|
43
|
+
if (portable !== undefined && portableMatches(message, kind, "keep", portable))
|
|
44
|
+
return true;
|
|
45
|
+
if (carriesMedia(message.content))
|
|
46
|
+
return false;
|
|
47
|
+
return (mediaFree !== undefined && mediaFreeHash(message, kind) === mediaFree) ||
|
|
48
|
+
(portableMediaFree !== undefined &&
|
|
49
|
+
portableMatches(message, kind, "drop", portableMediaFree));
|
|
40
50
|
}
|
|
41
51
|
/**
|
|
42
52
|
* Whether `newer` carries everything `older` does: every message of `older` after the
|
|
@@ -55,15 +65,84 @@ export function mediaFreeMessageHash(message) {
|
|
|
55
65
|
return mediaFreeHash(message, "route");
|
|
56
66
|
}
|
|
57
67
|
function mediaFreeHash(message, kind) {
|
|
58
|
-
return messageHash(message, kind === "stable" && stableShape(message),
|
|
68
|
+
return messageHash(message, kind === "stable" && stableShape(message), MEDIA_FREE);
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* An identity that also ignores how Claude Code renders unchanged history, which differs
|
|
72
|
+
* between versions (2.1.302 -> 2.1.319 on 2026-11-09): a reminder inside a tool result's
|
|
73
|
+
* text or in a block of its own, a tool result's text as a string or a text block, a tool
|
|
74
|
+
* input value as the JSON string the model sent or the value a newer Claude Code parsed
|
|
75
|
+
* it to. Followed by the digests of the message's tool input JSON strings, so that one
|
|
76
|
+
* still a string is held to the very string stored (portableMatches).
|
|
77
|
+
*/
|
|
78
|
+
function portableIdentity(message, kind, media) {
|
|
79
|
+
const fields = jsonStringFields(message);
|
|
80
|
+
const hash = portableHash(message, kind, media);
|
|
81
|
+
return fields.size ? `${hash}|${JSON.stringify([...fields].sort())}` : hash;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Whether `message` matches a stored portableIdentity: the same content as rendered either
|
|
85
|
+
* way, and each tool input it still sends as a JSON string the same string as stored there
|
|
86
|
+
* (so two strings that parse alike never match); one parsed since matches by its value.
|
|
87
|
+
*/
|
|
88
|
+
function portableMatches(message, kind, media, stored) {
|
|
89
|
+
const split = stored.indexOf("|");
|
|
90
|
+
const hash = split === -1 ? stored : stored.slice(0, split);
|
|
91
|
+
if (portableHash(message, kind, media) !== hash)
|
|
92
|
+
return false;
|
|
93
|
+
const fields = jsonStringFields(message);
|
|
94
|
+
if (!fields.size)
|
|
95
|
+
return true;
|
|
96
|
+
let storedFields;
|
|
97
|
+
try {
|
|
98
|
+
storedFields = new Map(split === -1 ? [] : JSON.parse(stored.slice(split + 1)));
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
return false;
|
|
102
|
+
}
|
|
103
|
+
for (const [field, digest] of fields)
|
|
104
|
+
if (storedFields.get(field) !== digest)
|
|
105
|
+
return false;
|
|
106
|
+
return true;
|
|
107
|
+
}
|
|
108
|
+
function portableHash(message, kind, media) {
|
|
109
|
+
return messageHash(message, kind === "stable" && stableShape(message), { media, portable: true });
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* The message's tool input values that are JSON strings portableContent parses: tool use
|
|
113
|
+
* id and input key -> a digest of the string as sent.
|
|
114
|
+
*/
|
|
115
|
+
function jsonStringFields(message) {
|
|
116
|
+
const cached = jsonFieldCache.get(message);
|
|
117
|
+
if (cached)
|
|
118
|
+
return cached;
|
|
119
|
+
const fields = new Map();
|
|
120
|
+
const content = Array.isArray(message.content) ? message.content : [];
|
|
121
|
+
content.forEach((part, index) => {
|
|
122
|
+
if (part?.type !== "tool_use" || !isPlainObject(part.input))
|
|
123
|
+
return;
|
|
124
|
+
for (const [key, value] of Object.entries(part.input)) {
|
|
125
|
+
if (typeof value !== "string" || parsedJson(value) === value)
|
|
126
|
+
continue;
|
|
127
|
+
const digest = createHash("sha256").update(value, "utf16le").digest("hex");
|
|
128
|
+
fields.set(JSON.stringify([part.id ?? `#${index}`, key]), digest);
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
jsonFieldCache.set(message, fields);
|
|
132
|
+
return fields;
|
|
59
133
|
}
|
|
60
134
|
function stableShape(message) {
|
|
61
135
|
return message.role === "assistant" && Array.isArray(message.content);
|
|
62
136
|
}
|
|
63
|
-
function
|
|
64
|
-
const
|
|
65
|
-
|
|
66
|
-
|
|
137
|
+
function hashCache(stable, mode) {
|
|
138
|
+
const key = `${stable}:${mode.media}:${mode.portable === true}`;
|
|
139
|
+
let cache = hashCaches.get(key);
|
|
140
|
+
if (!cache)
|
|
141
|
+
hashCaches.set(key, cache = new WeakMap());
|
|
142
|
+
return cache;
|
|
143
|
+
}
|
|
144
|
+
function messageHash(message, stable, mode) {
|
|
145
|
+
const cache = hashCache(stable, mode);
|
|
67
146
|
const cached = cache.get(message);
|
|
68
147
|
if (cached !== undefined)
|
|
69
148
|
return cached;
|
|
@@ -73,8 +152,10 @@ function messageHash(message, stable, mediaFree) {
|
|
|
73
152
|
}
|
|
74
153
|
const blocks = typeof content === "string" ? [{ type: "text", text: content }] : content;
|
|
75
154
|
const reminded = normalizeReminders(blocks);
|
|
155
|
+
const kept = mode.media === "drop" ? withoutMedia(reminded) : reminded;
|
|
76
156
|
const normalized = {
|
|
77
|
-
...message,
|
|
157
|
+
...message,
|
|
158
|
+
content: stripBlockCache(mode.portable ? withoutToolLoadedNotes(portableContent(kept)) : kept),
|
|
78
159
|
};
|
|
79
160
|
const hash = createHash("sha256");
|
|
80
161
|
updateCanonical(hash, normalized);
|
|
@@ -102,6 +183,118 @@ function normalizeReminders(content) {
|
|
|
102
183
|
return part;
|
|
103
184
|
});
|
|
104
185
|
}
|
|
186
|
+
/**
|
|
187
|
+
* Content with rendering choices canonicalized (portableHash): text blocks left empty by
|
|
188
|
+
* reminder removal dropped, a tool result's string as one text block, and tool input
|
|
189
|
+
* values that are JSON strings of an object or array parsed (losslessly: parsedJson).
|
|
190
|
+
*/
|
|
191
|
+
function portableContent(content) {
|
|
192
|
+
if (!Array.isArray(content))
|
|
193
|
+
return content;
|
|
194
|
+
return content.filter((part) => !isEmptyText(part)).map((part) => {
|
|
195
|
+
if (!part || typeof part !== "object")
|
|
196
|
+
return part;
|
|
197
|
+
if (part.type === "tool_result") {
|
|
198
|
+
const inner = typeof part.content === "string"
|
|
199
|
+
? [{ type: "text", text: part.content }] : part.content;
|
|
200
|
+
return { ...part, content: portableContent(inner) };
|
|
201
|
+
}
|
|
202
|
+
if (part.type === "tool_use" && isPlainObject(part.input)) {
|
|
203
|
+
return { ...part, input: parsedJsonValues(part.input) };
|
|
204
|
+
}
|
|
205
|
+
return part;
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
/** Claude Code's note after a ToolSearch result that loaded tools; sent or not by model. */
|
|
209
|
+
const TOOL_LOADED_RE = /^Tool loaded\.(?:\n\[id:[^\]\n]+\])*\n?$/;
|
|
210
|
+
/**
|
|
211
|
+
* Top-level content without each "Tool loaded." note that follows the turn's tool
|
|
212
|
+
* results when one of them holds only tool references. On the same Claude Code
|
|
213
|
+
* (2.1.321), Opus 5.5 gets the note and Fable 5.2 does not, so a model switch changed
|
|
214
|
+
* old messages (2026-11-09). Mirrors polychat's rerender_match.portable_message.
|
|
215
|
+
*/
|
|
216
|
+
function withoutToolLoadedNotes(content) {
|
|
217
|
+
if (!Array.isArray(content))
|
|
218
|
+
return content;
|
|
219
|
+
return content.filter((part, index) => !(isToolLoadedNote(part) && followsLoadedTools(content, index)));
|
|
220
|
+
}
|
|
221
|
+
function isToolLoadedNote(part) {
|
|
222
|
+
return part?.type === "text" && typeof part.text === "string" &&
|
|
223
|
+
TOOL_LOADED_RE.test(part.text) &&
|
|
224
|
+
Object.keys(part).every((key) => key === "type" || key === "text" || key === "cache_control");
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Whether the run of tool results ending just before `index` loads tools. Earlier notes
|
|
228
|
+
* are skipped: two ToolSearch calls in one turn leave two notes.
|
|
229
|
+
*/
|
|
230
|
+
function followsLoadedTools(content, index) {
|
|
231
|
+
for (let i = index - 1; i >= 0; i--) {
|
|
232
|
+
const part = content[i];
|
|
233
|
+
if (isToolLoadedNote(part))
|
|
234
|
+
continue;
|
|
235
|
+
if (part?.type !== "tool_result")
|
|
236
|
+
return false;
|
|
237
|
+
if (Array.isArray(part.content) && part.content.length > 0 &&
|
|
238
|
+
part.content.every((inner) => inner?.type === "tool_reference"))
|
|
239
|
+
return true;
|
|
240
|
+
}
|
|
241
|
+
return false;
|
|
242
|
+
}
|
|
243
|
+
function isEmptyText(part) {
|
|
244
|
+
return typeof part === "string" ? part === "" :
|
|
245
|
+
part?.type === "text" && part.text === "" &&
|
|
246
|
+
Object.keys(part).every((key) => key === "type" || key === "text" || key === "cache_control");
|
|
247
|
+
}
|
|
248
|
+
/** Defined properties only (Object.fromEntries keeps an own `__proto__` key as data). */
|
|
249
|
+
function parsedJsonValues(input) {
|
|
250
|
+
return Object.fromEntries(Object.entries(input).map(([key, value]) => [key, parsedJson(value)]));
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* A string holding a JSON object or array, parsed, when parsing loses nothing: the string
|
|
254
|
+
* is the parse's own serialization apart from whitespace between tokens. Anything lossy
|
|
255
|
+
* (duplicate keys, numbers past double precision or written another way, escapes
|
|
256
|
+
* JSON.stringify would not write) stays the string it is, so it matches only itself.
|
|
257
|
+
*/
|
|
258
|
+
function parsedJson(value) {
|
|
259
|
+
if (typeof value !== "string" || !/^\s*[[{]/.test(value))
|
|
260
|
+
return value;
|
|
261
|
+
let parsed;
|
|
262
|
+
try {
|
|
263
|
+
parsed = JSON.parse(value);
|
|
264
|
+
}
|
|
265
|
+
catch {
|
|
266
|
+
return value;
|
|
267
|
+
}
|
|
268
|
+
if (!parsed || typeof parsed !== "object")
|
|
269
|
+
return value;
|
|
270
|
+
return JSON.stringify(parsed) === withoutJsonWhitespace(value) ? parsed : value;
|
|
271
|
+
}
|
|
272
|
+
/** JSON text without the whitespace between its tokens (strings kept as written). */
|
|
273
|
+
function withoutJsonWhitespace(text) {
|
|
274
|
+
let out = "";
|
|
275
|
+
let inString = false;
|
|
276
|
+
for (let i = 0; i < text.length; i++) {
|
|
277
|
+
const ch = text[i];
|
|
278
|
+
if (inString) {
|
|
279
|
+
out += ch;
|
|
280
|
+
if (ch === "\\")
|
|
281
|
+
out += text[++i] ?? "";
|
|
282
|
+
else if (ch === '"')
|
|
283
|
+
inString = false;
|
|
284
|
+
}
|
|
285
|
+
else if (ch === '"') {
|
|
286
|
+
inString = true;
|
|
287
|
+
out += ch;
|
|
288
|
+
}
|
|
289
|
+
else if (ch !== " " && ch !== "\n" && ch !== "\r" && ch !== "\t") {
|
|
290
|
+
out += ch;
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
return out;
|
|
294
|
+
}
|
|
295
|
+
function isPlainObject(value) {
|
|
296
|
+
return !!value && typeof value === "object" && !Array.isArray(value);
|
|
297
|
+
}
|
|
105
298
|
/**
|
|
106
299
|
* Claude Code's stand-ins for media it removed from its own history. After the API
|
|
107
300
|
* rejects media it removes a message left empty altogether; that shifts positions and
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route-identity.js","sourceRoot":"","sources":["../src/route-identity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAa,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,uBAAuB,EAAgB,MAAM,YAAY,CAAC;AAEnE,mFAAmF;AACnF,kFAAkF;AAClF,MAAM,WAAW,GAAG,IAAI,OAAO,EAAmB,CAAC;AACnD,MAAM,YAAY,GAAG,IAAI,OAAO,EAAmB,CAAC;AACpD,MAAM,oBAAoB,GAAG,IAAI,OAAO,EAAmB,CAAC;AAC5D,MAAM,qBAAqB,GAAG,IAAI,OAAO,EAAmB,CAAC;AAK7D,qFAAqF;AACrF,MAAM,UAAU,gBAAgB,CAAC,OAAgB;IAC/C,OAAO,WAAW,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AAC5C,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,uBAAuB,CAAC,OAAgB;IACtD,OAAO,WAAW,CAAC,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC;AAC3D,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,cAAc,CAC5B,QAAmB,EAAE,IAAoB;IAEzC,MAAM,KAAK,GAAG,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,gBAAgB,CAAC;IAC7E,OAAO;QACL,oBAAoB,EAAE,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;QACzC,uBAAuB,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;KACrE,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,oBAAoB,CAClC,OAAgB,EAAE,IAAoB,EAAE,KAAa,EAAE,SAA6B;IAEpF,MAAM,IAAI,GAAG,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC9F,IAAI,IAAI,KAAK,KAAK;QAAE,OAAO,IAAI,CAAC;IAChC,OAAO,SAAS,KAAK,SAAS,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC;QAC9D,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,SAAS,CAAC;AAC/C,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,KAAgB,EAAE,KAAgB;IAC/D,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;IAC/D,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;IAC/D,OAAO,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,CACpD,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,gBAAgB,CAAC,OAAO,CAAC,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACnG,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACnD,OAAO,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AACzC,CAAC;AAED,SAAS,aAAa,CAAC,OAAgB,EAAE,IAAoB;IAC3D,OAAO,WAAW,CAAC,OAAO,EAAE,IAAI,KAAK,QAAQ,IAAI,WAAW,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC;AAC/E,CAAC;AAED,SAAS,WAAW,CAAC,OAAgB;IACnC,OAAO,OAAO,CAAC,IAAI,KAAK,WAAW,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AACxE,CAAC;AAED,SAAS,WAAW,CAAC,OAAgB,EAAE,MAAe,EAAE,SAAkB;IACxE,MAAM,KAAK,GAAG,SAAS;QACrB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,oBAAoB,CAAC;QACzD,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAClC,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IACxC,IAAI,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAC9B,IAAI,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACrC,OAAO,GAAG,OAAO,CAAC,MAAM,CACtB,CAAC,IAAS,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,UAAU,IAAI,IAAI,EAAE,IAAI,KAAK,mBAAmB,CAC/E,CAAC;IACJ,CAAC;IACD,MAAM,MAAM,GAAG,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IACzF,MAAM,QAAQ,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC5C,MAAM,UAAU,GAAG;QACjB,GAAG,OAAO,EAAE,OAAO,EAAE,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;KACpF,CAAC;IACF,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IAClC,eAAe,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAClC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAClC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC3B,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,sFAAsF;AACtF,SAAS,kBAAkB,CAAC,OAAgB;IAC1C,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,uBAAuB,CAAC,OAAO,CAAC,CAAC;IACzE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QAAE,OAAO,OAAO,CAAC;IAC5C,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QAC1B,IAAI,OAAO,IAAI,KAAK,QAAQ;YAAE,OAAO,uBAAuB,CAAC,IAAI,CAAC,CAAC;QACnE,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QACnD,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC1D,OAAO,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/D,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;YAChC,OAAO,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAChE,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC;IACjC,gCAAgC,EAAE,wCAAwC;CAC3E,CAAC,CAAC;AAEH,oFAAoF;AACpF,SAAS,YAAY,CAAC,OAAgB;IACpC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QAAE,OAAO,OAAO,CAAC;IAC5C,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACxE,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa;QAC7D,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;QAClD,CAAC,CAAC,IAAI,CAAC,CAAC;AACd,CAAC;AAED,mFAAmF;AACnF,SAAS,YAAY,CAAC,OAAgB;IACpC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1C,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,IAAS,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,IAAI,IAAI,EAAE,IAAI,KAAK,UAAU;QACpF,CAAC,IAAI,EAAE,IAAI,KAAK,aAAa,IAAI,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAClE,CAAC;AAED,SAAS,oBAAoB,CAAC,IAAS;IACrC,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACpD,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU;QAAE,OAAO,IAAI,CAAC;IACnE,OAAO,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACnE,CAAC;AAED,wFAAwF;AACxF,SAAS,eAAe,CAAC,OAAgB;IACvC,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QAAE,OAAO,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAChE,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,OAAO,CAAC;IAC5D,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,GAAG,OAAkC,CAAC;IACjF,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,SAAS,eAAe,CAAC,IAAU,EAAE,KAAc;IACjD,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QAC1C,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACnB,CAAC;SAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACrC,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IAC5D,CAAC;SAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACrC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACnE,CAAC;SAAM,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;QACtC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACjC,CAAC;SAAM,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAChC,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QACjC,KAAK,MAAM,IAAI,IAAI,KAAK;YAAE,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACxD,CAAC;SAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACrC,MAAM,MAAM,GAAG,KAAgC,CAAC;QAChD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC;QACnF,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAChC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,eAAe,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YAC3B,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,SAAS,CAAC,2CAA2C,CAAC,CAAC;IACnE,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"route-identity.js","sourceRoot":"","sources":["../src/route-identity.ts"],"names":[],"mappings":"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"}
|