@viraatdas/rudder 3.1.7 → 3.1.12

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.
@@ -58,6 +58,8 @@ export type AdoptResult = {
58
58
  * caller reports, not something to drop silently).
59
59
  */
60
60
  export declare function findMoveCandidates(repoRoot: string, runIds?: string[]): Promise<MoveCandidate[]>;
61
+ /** Newest Codex main-thread session whose rollout ran in `cwd` (subagent threads skipped). */
62
+ export declare function findCodexMainThreadForCwd(cwd: string, root?: string): Promise<string | null>;
61
63
  /** Where `codex resume` finds a session: ~/.codex/sessions/<y>/<m>/<d>/rollout-…-<id>.jsonl. */
62
64
  export declare function codexSessionsDir(): string;
63
65
  export declare function findCodexRollout(sessionId: string, root?: string): Promise<string | null>;
package/dist/move-home.js CHANGED
@@ -29,6 +29,7 @@ export const MOVE_BUNDLE_VERSION = 1;
29
29
  const MOVE_REF_PREFIX = "refs/rudder-move/";
30
30
  /** Statuses a run can be in and still be worth moving: work not yet finished. */
31
31
  const MOVABLE_STATUSES = new Set(["running", "created", "steering", "verifying", "paused", "orphaned"]);
32
+ const NAMED_MOVABLE_STATUSES = new Set(["completed", "failed", "cancelled"]);
32
33
  /**
33
34
  * Local agents that can move: unfinished runs with an isolated workspace that
34
35
  * still exists. Main-checkout rows, planners and cloud-command rows point at
@@ -54,15 +55,26 @@ export async function findMoveCandidates(repoRoot, runIds) {
54
55
  }
55
56
  adoptLegacyWorkspaceKey(record);
56
57
  const status = String(record.status ?? "");
58
+ // Named explicitly, a finished agent (an interrupted turn reads as done)
59
+ // can move too: the person asked for that one.
60
+ const named = Boolean(runIds && runIds.length > 0);
57
61
  const workspace = (record.workspace ?? {});
58
62
  const workspaceDir = typeof workspace.path === "string" ? workspace.path : "";
59
- if (!MOVABLE_STATUSES.has(status) || workspace.enabled !== true || !workspaceDir) {
63
+ if (!(MOVABLE_STATUSES.has(status) || (named && NAMED_MOVABLE_STATUSES.has(status))) || workspace.enabled !== true || !workspaceDir) {
60
64
  continue;
61
65
  }
62
66
  if (path.resolve(workspaceDir) === path.resolve(repoRoot) || !(await pathExists(workspaceDir))) {
63
67
  continue;
64
68
  }
65
69
  const session = (record.session ?? {});
70
+ let sessionId = typeof session.nativeSessionId === "string" && session.nativeSessionId.trim()
71
+ ? session.nativeSessionId.trim()
72
+ : undefined;
73
+ // A Codex row whose id was never pinned: its conversation is the newest
74
+ // MAIN thread (not a subagent's) that ran in its workspace.
75
+ if (!sessionId && String(record.backend ?? "") === "codex") {
76
+ sessionId = (await findCodexMainThreadForCwd(workspaceDir)) ?? undefined;
77
+ }
66
78
  out.push({
67
79
  runId: name,
68
80
  task: String(record.task ?? ""),
@@ -71,13 +83,55 @@ export async function findMoveCandidates(repoRoot, runIds) {
71
83
  status,
72
84
  workspacePath: workspaceDir,
73
85
  workspaceName: typeof workspace.workspaceName === "string" ? workspace.workspaceName : undefined,
74
- sessionId: typeof session.nativeSessionId === "string" && session.nativeSessionId.trim()
75
- ? session.nativeSessionId.trim()
76
- : undefined,
86
+ sessionId,
77
87
  });
78
88
  }
79
89
  return out;
80
90
  }
91
+ /** Newest Codex main-thread session whose rollout ran in `cwd` (subagent threads skipped). */
92
+ export async function findCodexMainThreadForCwd(cwd, root = codexSessionsDir()) {
93
+ const target = path.resolve(cwd);
94
+ const files = [];
95
+ async function walk(dir, depth) {
96
+ for (const entry of await fsp.readdir(dir, { withFileTypes: true }).catch(() => [])) {
97
+ const full = path.join(dir, entry.name);
98
+ if (entry.isDirectory() && depth < 4) {
99
+ await walk(full, depth + 1);
100
+ }
101
+ else if (entry.isFile() && entry.name.startsWith("rollout-") && entry.name.endsWith(".jsonl")) {
102
+ const stat = await fsp.stat(full).catch(() => null);
103
+ if (stat && Date.now() - stat.mtimeMs < 14 * 24 * 3600 * 1000) {
104
+ files.push({ file: full, mtime: stat.mtimeMs });
105
+ }
106
+ }
107
+ }
108
+ }
109
+ await walk(root, 0);
110
+ files.sort((a, b) => b.mtime - a.mtime);
111
+ for (const { file } of files.slice(0, 400)) {
112
+ const head = await fsp.open(file, "r").then(async (handle) => {
113
+ try {
114
+ const buffer = Buffer.alloc(16384);
115
+ const { bytesRead } = await handle.read(buffer, 0, buffer.length, 0);
116
+ return buffer.subarray(0, bytesRead).toString("utf8");
117
+ }
118
+ finally {
119
+ await handle.close();
120
+ }
121
+ }).catch(() => "");
122
+ // The session_meta line carries Codex's whole instructions, so it can be
123
+ // longer than what was read: pick the fields out instead of parsing it.
124
+ if (!head.includes('"type":"session_meta"') || !head.includes('"source":"cli"')) {
125
+ continue;
126
+ }
127
+ const id = /[{,]"id":"([A-Za-z0-9-]+)"/.exec(head)?.[1];
128
+ const rolloutCwd = /"cwd":"((?:[^"\\]|\\.)*)"/.exec(head)?.[1];
129
+ if (id && rolloutCwd && path.resolve(rolloutCwd) === target) {
130
+ return id;
131
+ }
132
+ }
133
+ return null;
134
+ }
81
135
  /** Where `codex resume` finds a session: ~/.codex/sessions/<y>/<m>/<d>/rollout-…-<id>.jsonl. */
82
136
  export function codexSessionsDir() {
83
137
  const codexHome = process.env.CODEX_HOME?.trim() || path.join(os.homedir(), ".codex");
@@ -1 +1 @@
1
- {"version":3,"file":"move-home.js","sourceRoot":"","sources":["../src/move-home.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"move-home.js","sourceRoot":"","sources":["../src/move-home.ts"],"names":[],"mappings":"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"}
Binary file
@@ -0,0 +1,67 @@
1
+ export type PredictorOptions = {
2
+ /** Predict only once the smoothed round trip is at least this (ms). */
3
+ thresholdMs?: number;
4
+ /** A prediction not confirmed within this long is rolled back (ms). */
5
+ timeoutMs?: number;
6
+ /** After a rollback, stop predicting for this long (ms). */
7
+ cooldownMs?: number;
8
+ /** false keeps the screen model (for repaints) without predicting. */
9
+ predict?: boolean;
10
+ now?: () => number;
11
+ };
12
+ export declare class EchoPredictor {
13
+ private readonly model;
14
+ private readonly out;
15
+ private readonly thresholdMs;
16
+ private readonly timeoutMs;
17
+ private readonly cooldownMs;
18
+ private readonly predict;
19
+ private readonly now;
20
+ private predictions;
21
+ private pendingWrites;
22
+ private inSyncFrame;
23
+ private midEscape;
24
+ private cursorVisible;
25
+ private sawFrame;
26
+ private caret;
27
+ private hold;
28
+ private holdSince;
29
+ private suspendedUntil;
30
+ private srtt;
31
+ private timer;
32
+ rollbacks: number;
33
+ confirmed: number;
34
+ constructor(cols: number, rows: number, out: (text: string) => void, options?: PredictorOptions);
35
+ get cols(): number;
36
+ /**
37
+ * Redraw cells [col, col + width) of a row exactly as the cloud last drew
38
+ * them, leaving the cursor where it was. Used to take an overlay (the
39
+ * reconnecting badge) back off the screen without asking the cloud.
40
+ */
41
+ paintRegion(row: number, col: number, width: number): string;
42
+ /** Feed a measured round trip (ms); predictions start above the threshold. */
43
+ noteRtt(ms: number): void;
44
+ get active(): boolean;
45
+ resize(cols: number, rows: number): void;
46
+ dispose(): void;
47
+ /** Bytes the cloud drew. Call after writing them to the real terminal. */
48
+ onServerData(data: Buffer | string): void;
49
+ /** Keystrokes the user typed (already sent to the cloud). */
50
+ onInput(data: Buffer | string): void;
51
+ private atBoundary;
52
+ private setHold;
53
+ private predictChar;
54
+ private predictBackspace;
55
+ /** Draw every pending prediction and park the cursor after the last one. */
56
+ private show;
57
+ private reconcile;
58
+ /** Repaint every predicted cell from the model and put the cursor back. */
59
+ private rollback;
60
+ private ensureTimer;
61
+ private cellChar;
62
+ private cellBlank;
63
+ /** SGR + character that redraws one cell exactly as the model has it. */
64
+ private cellPaint;
65
+ }
66
+ /** Whether a chunk stops inside an escape sequence (the next chunk finishes it). */
67
+ export declare function endsMidEscape(text: string): boolean;
@@ -0,0 +1,369 @@
1
+ // Predictive local echo for `rudder cloud` (the mosh trick).
2
+ //
3
+ // A keystroke to the cloud dashboard takes a round trip (~100ms from the US
4
+ // west coast to the machine in Virginia) before its echo is drawn. The
5
+ // dashboard always parks the real terminal cursor on the input caret (the task
6
+ // box, or the agent's composer), so the client can draw a typed character at
7
+ // the caret immediately and let the cloud's frame confirm it.
8
+ //
9
+ // The client keeps an exact model of the screen the cloud has drawn (xterm's
10
+ // headless terminal, fed only the cloud's bytes). Predictions are written to
11
+ // the real terminal BETWEEN cloud frames (never inside a synchronized-output
12
+ // frame or a half-received escape sequence), so they never tear a frame. A
13
+ // prediction is confirmed when the model shows the same character in that
14
+ // cell; one the cloud contradicts, or that is not echoed in time, is rolled
15
+ // back by repainting its cell from the model. Predictions only start once the
16
+ // measured round trip is worth hiding, and only on a visible caret over a
17
+ // blank cell (typing at the end of the input, the common case).
18
+ import { createRequire } from "node:module";
19
+ const require = createRequire(import.meta.url);
20
+ const { Terminal } = require("@xterm/headless");
21
+ const SYNC_BEGIN = "\x1b[?2026h";
22
+ const SYNC_END = "\x1b[?2026l";
23
+ const CURSOR_SHOW = "\x1b[?25h";
24
+ const CURSOR_HIDE = "\x1b[?25l";
25
+ export class EchoPredictor {
26
+ model;
27
+ out;
28
+ thresholdMs;
29
+ timeoutMs;
30
+ cooldownMs;
31
+ predict;
32
+ now;
33
+ predictions = [];
34
+ pendingWrites = 0;
35
+ inSyncFrame = false;
36
+ midEscape = false;
37
+ cursorVisible = true;
38
+ sawFrame = false;
39
+ // Where the caret was when the last complete cloud frame ended. Mid-frame the
40
+ // model's cursor is wherever the cloud happens to be drawing.
41
+ caret = null;
42
+ // A key we cannot predict (Enter, arrows, a mouse report) changes the screen
43
+ // in ways the model has not seen yet: hold until the cloud catches up.
44
+ hold = false;
45
+ holdSince = 0;
46
+ suspendedUntil = 0;
47
+ srtt = null;
48
+ timer = null;
49
+ rollbacks = 0;
50
+ confirmed = 0;
51
+ constructor(cols, rows, out, options = {}) {
52
+ this.model = new Terminal({ cols, rows, allowProposedApi: true, scrollback: 0 });
53
+ this.out = out;
54
+ this.thresholdMs = options.thresholdMs ?? 30;
55
+ this.timeoutMs = options.timeoutMs ?? 1200;
56
+ this.cooldownMs = options.cooldownMs ?? 1000;
57
+ this.predict = options.predict ?? true;
58
+ this.now = options.now ?? (() => Date.now());
59
+ }
60
+ get cols() {
61
+ return this.model.cols;
62
+ }
63
+ /**
64
+ * Redraw cells [col, col + width) of a row exactly as the cloud last drew
65
+ * them, leaving the cursor where it was. Used to take an overlay (the
66
+ * reconnecting badge) back off the screen without asking the cloud.
67
+ */
68
+ paintRegion(row, col, width) {
69
+ const line = this.model.buffer.active.getLine(row);
70
+ let start = Math.max(0, col);
71
+ // Starting on the right half of a wide character would split it.
72
+ if (start > 0 && line?.getCell(start)?.getWidth() === 0) {
73
+ start -= 1;
74
+ }
75
+ const end = Math.min(this.model.cols, col + width);
76
+ let text = `\x1b7\x1b[${row + 1};${start + 1}H`;
77
+ for (let c = start; c < end; c += 1) {
78
+ if (line?.getCell(c)?.getWidth() === 0) {
79
+ continue;
80
+ }
81
+ text += this.cellPaint(row, c);
82
+ }
83
+ return `${text}\x1b[0m\x1b8`;
84
+ }
85
+ /** Feed a measured round trip (ms); predictions start above the threshold. */
86
+ noteRtt(ms) {
87
+ if (!Number.isFinite(ms) || ms < 0) {
88
+ return;
89
+ }
90
+ this.srtt = this.srtt === null ? ms : this.srtt * 0.8 + ms * 0.2;
91
+ }
92
+ get active() {
93
+ return this.srtt !== null && this.srtt >= this.thresholdMs;
94
+ }
95
+ resize(cols, rows) {
96
+ this.rollback();
97
+ this.model.resize(Math.max(1, cols), Math.max(1, rows));
98
+ }
99
+ dispose() {
100
+ if (process.env.RUDDER_PREDICT_DEBUG === "1") {
101
+ process.stderr.write(`\npredict: srtt=${this.srtt?.toFixed(0) ?? "?"}ms confirmed=${this.confirmed} rollbacks=${this.rollbacks}\n`);
102
+ }
103
+ if (this.timer) {
104
+ clearInterval(this.timer);
105
+ this.timer = null;
106
+ }
107
+ this.model.dispose();
108
+ }
109
+ /** Bytes the cloud drew. Call after writing them to the real terminal. */
110
+ onServerData(data) {
111
+ const text = typeof data === "string" ? data : data.toString("utf8");
112
+ const lastBegin = text.lastIndexOf(SYNC_BEGIN);
113
+ const lastEnd = text.lastIndexOf(SYNC_END);
114
+ if (lastBegin !== -1 || lastEnd !== -1) {
115
+ this.inSyncFrame = lastBegin > lastEnd;
116
+ if (lastEnd > lastBegin) {
117
+ this.sawFrame = true;
118
+ }
119
+ }
120
+ const lastShow = text.lastIndexOf(CURSOR_SHOW);
121
+ const lastHide = text.lastIndexOf(CURSOR_HIDE);
122
+ if (lastShow !== -1 || lastHide !== -1) {
123
+ this.cursorVisible = lastShow > lastHide;
124
+ }
125
+ this.midEscape = endsMidEscape(text);
126
+ this.pendingWrites += 1;
127
+ this.model.write(text, () => {
128
+ this.pendingWrites -= 1;
129
+ if (this.pendingWrites === 0) {
130
+ if (this.atBoundary()) {
131
+ const buffer = this.model.buffer.active;
132
+ this.caret = { row: buffer.cursorY, col: buffer.cursorX };
133
+ }
134
+ this.reconcile();
135
+ }
136
+ });
137
+ }
138
+ /** Keystrokes the user typed (already sent to the cloud). */
139
+ onInput(data) {
140
+ const bytes = typeof data === "string" ? Buffer.from(data, "utf8") : data;
141
+ if (!this.predict || !this.active) {
142
+ return;
143
+ }
144
+ for (const byte of bytes) {
145
+ if (byte >= 0x20 && byte <= 0x7e) {
146
+ if (!this.predictChar(String.fromCharCode(byte))) {
147
+ this.setHold();
148
+ return;
149
+ }
150
+ }
151
+ else if (byte === 0x7f || byte === 0x08) {
152
+ if (!this.predictBackspace()) {
153
+ this.setHold();
154
+ return;
155
+ }
156
+ }
157
+ else {
158
+ this.setHold();
159
+ return;
160
+ }
161
+ }
162
+ }
163
+ atBoundary() {
164
+ return this.pendingWrites === 0 && !this.inSyncFrame && !this.midEscape;
165
+ }
166
+ setHold() {
167
+ this.hold = true;
168
+ this.holdSince = this.now();
169
+ }
170
+ predictChar(ch) {
171
+ if (this.hold) {
172
+ // The key that set the hold has had time to come back only after about
173
+ // one round trip, and the model must have caught up with it.
174
+ const settle = (this.srtt ?? 0) * 1.5 + 50;
175
+ if (this.pendingWrites !== 0 || this.now() - this.holdSince < settle) {
176
+ return false;
177
+ }
178
+ this.hold = false;
179
+ }
180
+ if (!this.sawFrame || !this.cursorVisible || this.now() < this.suspendedUntil) {
181
+ return false;
182
+ }
183
+ let row;
184
+ let col;
185
+ const last = this.predictions[this.predictions.length - 1];
186
+ if (last) {
187
+ row = last.row;
188
+ col = last.col + 1;
189
+ }
190
+ else {
191
+ if (!this.caret) {
192
+ return false;
193
+ }
194
+ row = this.caret.row;
195
+ col = this.caret.col;
196
+ }
197
+ // Leave the last column alone (wrapping is the cloud's call), and only
198
+ // type over blank cells: typing at the end of the input.
199
+ if (col >= this.model.cols - 1 || !this.cellBlank(row, col)) {
200
+ return false;
201
+ }
202
+ const prediction = { row, col, ch, at: this.now(), shown: false };
203
+ this.predictions.push(prediction);
204
+ this.ensureTimer();
205
+ if (this.atBoundary()) {
206
+ this.show();
207
+ }
208
+ return true;
209
+ }
210
+ predictBackspace() {
211
+ const last = this.predictions.pop();
212
+ if (!last) {
213
+ // Deleting text the cloud already drew: let the cloud do it.
214
+ return false;
215
+ }
216
+ if (last.shown && this.atBoundary()) {
217
+ this.out(`\x1b[${last.row + 1};${last.col + 1}H${this.cellPaint(last.row, last.col)}\x1b[0m\x1b[${last.row + 1};${last.col + 1}H`);
218
+ }
219
+ return true;
220
+ }
221
+ /** Draw every pending prediction and park the cursor after the last one. */
222
+ show() {
223
+ if (this.predictions.length === 0) {
224
+ return;
225
+ }
226
+ let text = "\x1b[0m";
227
+ for (const prediction of this.predictions) {
228
+ text += `\x1b[${prediction.row + 1};${prediction.col + 1}H${prediction.ch}`;
229
+ prediction.shown = true;
230
+ }
231
+ this.out(text);
232
+ }
233
+ reconcile() {
234
+ if (this.pendingWrites !== 0) {
235
+ return;
236
+ }
237
+ if (this.predictions.length === 0) {
238
+ return;
239
+ }
240
+ // Confirm in order: the cloud echoes keystrokes in the order they were sent.
241
+ while (this.predictions.length > 0) {
242
+ const first = this.predictions[0];
243
+ if (this.cellChar(first.row, first.col) !== first.ch) {
244
+ break;
245
+ }
246
+ this.predictions.shift();
247
+ this.confirmed += 1;
248
+ }
249
+ if (this.predictions.length === 0) {
250
+ return;
251
+ }
252
+ const first = this.predictions[0];
253
+ if (!this.atBoundary() || !this.caret) {
254
+ // Mid-frame the cursor is wherever the cloud is drawing: judge at the end.
255
+ return;
256
+ }
257
+ // The cloud moved its caret past a prediction without drawing it, or onto
258
+ // another row: the key did something other than type.
259
+ const contradicted = this.caret.row !== first.row
260
+ || this.caret.col > first.col
261
+ || !this.cellBlank(first.row, first.col);
262
+ if (contradicted || this.now() - first.at > this.timeoutMs) {
263
+ this.rollback();
264
+ return;
265
+ }
266
+ if (this.atBoundary()) {
267
+ // The cloud's frame may have repainted these cells: draw them again.
268
+ this.show();
269
+ }
270
+ }
271
+ /** Repaint every predicted cell from the model and put the cursor back. */
272
+ rollback() {
273
+ if (this.predictions.length === 0) {
274
+ return;
275
+ }
276
+ const shown = this.predictions.filter((prediction) => prediction.shown);
277
+ this.predictions = [];
278
+ this.rollbacks += 1;
279
+ this.suspendedUntil = this.now() + this.cooldownMs;
280
+ if (shown.length === 0 || !this.atBoundary()) {
281
+ return;
282
+ }
283
+ let text = "";
284
+ for (const prediction of shown) {
285
+ text += `\x1b[${prediction.row + 1};${prediction.col + 1}H${this.cellPaint(prediction.row, prediction.col)}`;
286
+ }
287
+ const buffer = this.model.buffer.active;
288
+ text += `\x1b[0m\x1b[${buffer.cursorY + 1};${buffer.cursorX + 1}H`;
289
+ this.out(text);
290
+ }
291
+ ensureTimer() {
292
+ if (this.timer) {
293
+ return;
294
+ }
295
+ this.timer = setInterval(() => {
296
+ if (this.predictions.length === 0) {
297
+ if (this.timer) {
298
+ clearInterval(this.timer);
299
+ this.timer = null;
300
+ }
301
+ return;
302
+ }
303
+ if (this.pendingWrites === 0 && this.now() - this.predictions[0].at > this.timeoutMs) {
304
+ this.rollback();
305
+ }
306
+ }, 100);
307
+ this.timer.unref?.();
308
+ }
309
+ cellChar(row, col) {
310
+ return this.model.buffer.active.getLine(row)?.getCell(col)?.getChars() ?? "";
311
+ }
312
+ cellBlank(row, col) {
313
+ const chars = this.cellChar(row, col);
314
+ return chars === "" || chars === " ";
315
+ }
316
+ /** SGR + character that redraws one cell exactly as the model has it. */
317
+ cellPaint(row, col) {
318
+ const cell = this.model.buffer.active.getLine(row)?.getCell(col);
319
+ if (!cell) {
320
+ return "\x1b[0m ";
321
+ }
322
+ const codes = ["0"];
323
+ if (cell.isBold())
324
+ codes.push("1");
325
+ if (cell.isDim())
326
+ codes.push("2");
327
+ if (cell.isItalic())
328
+ codes.push("3");
329
+ if (cell.isUnderline())
330
+ codes.push("4");
331
+ if (cell.isInverse())
332
+ codes.push("7");
333
+ if (cell.isFgRGB()) {
334
+ const c = cell.getFgColor();
335
+ codes.push(`38;2;${(c >> 16) & 255};${(c >> 8) & 255};${c & 255}`);
336
+ }
337
+ else if (cell.isFgPalette()) {
338
+ codes.push(`38;5;${cell.getFgColor()}`);
339
+ }
340
+ if (cell.isBgRGB()) {
341
+ const c = cell.getBgColor();
342
+ codes.push(`48;2;${(c >> 16) & 255};${(c >> 8) & 255};${c & 255}`);
343
+ }
344
+ else if (cell.isBgPalette()) {
345
+ codes.push(`48;5;${cell.getBgColor()}`);
346
+ }
347
+ return `\x1b[${codes.join(";")}m${cell.getChars() || " "}`;
348
+ }
349
+ }
350
+ /** Whether a chunk stops inside an escape sequence (the next chunk finishes it). */
351
+ export function endsMidEscape(text) {
352
+ const tail = text.slice(-256);
353
+ const esc = tail.lastIndexOf("\x1b");
354
+ if (esc === -1) {
355
+ return false;
356
+ }
357
+ const rest = tail.slice(esc);
358
+ if (rest.length === 1) {
359
+ return true;
360
+ }
361
+ if (rest[1] === "[") {
362
+ return !/^\x1b\[[0-?]*[ -/]*[@-~]/.test(rest);
363
+ }
364
+ if (rest[1] === "]" || rest[1] === "P" || rest[1] === "_") {
365
+ return !/(\x07|\x1b\\)/.test(rest.slice(2));
366
+ }
367
+ return false;
368
+ }
369
+ //# sourceMappingURL=predict.js.map