openchrome-mcp 1.2.4 → 1.2.5
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/cdp/client.d.ts.map +1 -1
- package/dist/cdp/client.js +9 -0
- package/dist/cdp/client.js.map +1 -1
- package/dist/chrome/launcher.d.ts +32 -15
- package/dist/chrome/launcher.d.ts.map +1 -1
- package/dist/chrome/launcher.js +136 -116
- package/dist/chrome/launcher.js.map +1 -1
- package/dist/chrome/profile-manager.d.ts +108 -0
- package/dist/chrome/profile-manager.d.ts.map +1 -0
- package/dist/chrome/profile-manager.js +372 -0
- package/dist/chrome/profile-manager.js.map +1 -0
- package/dist/chrome/sqlite-cookie-copy.d.ts +46 -0
- package/dist/chrome/sqlite-cookie-copy.d.ts.map +1 -0
- package/dist/chrome/sqlite-cookie-copy.js +145 -0
- package/dist/chrome/sqlite-cookie-copy.js.map +1 -0
- package/dist/cli/claude-session.js +0 -0
- package/dist/cli/index.js +0 -0
- package/dist/config/defaults.d.ts +4 -0
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +5 -1
- package/dist/config/defaults.js.map +1 -1
- package/dist/config/global.d.ts +2 -0
- package/dist/config/global.d.ts.map +1 -1
- package/dist/config/global.js.map +1 -1
- package/dist/hints/hint-engine.d.ts +36 -2
- package/dist/hints/hint-engine.d.ts.map +1 -1
- package/dist/hints/hint-engine.js +96 -27
- package/dist/hints/hint-engine.js.map +1 -1
- package/dist/hints/index.d.ts +1 -1
- package/dist/hints/index.d.ts.map +1 -1
- package/dist/hints/rules/repetition-detection.d.ts.map +1 -1
- package/dist/hints/rules/repetition-detection.js +21 -0
- package/dist/hints/rules/repetition-detection.js.map +1 -1
- package/dist/index.js +17 -1
- package/dist/index.js.map +1 -1
- package/dist/mcp-server.d.ts +12 -1
- package/dist/mcp-server.d.ts.map +1 -1
- package/dist/mcp-server.js +162 -20
- package/dist/mcp-server.js.map +1 -1
- package/dist/resources/usage-guide.d.ts +1 -1
- package/dist/resources/usage-guide.d.ts.map +1 -1
- package/dist/resources/usage-guide.js +22 -0
- package/dist/resources/usage-guide.js.map +1 -1
- package/dist/session-manager.d.ts +4 -0
- package/dist/session-manager.d.ts.map +1 -1
- package/dist/session-manager.js +56 -0
- package/dist/session-manager.js.map +1 -1
- package/dist/tools/click-element.d.ts.map +1 -1
- package/dist/tools/click-element.js +6 -2
- package/dist/tools/click-element.js.map +1 -1
- package/dist/tools/computer.d.ts.map +1 -1
- package/dist/tools/computer.js +32 -3
- package/dist/tools/computer.js.map +1 -1
- package/dist/tools/find.d.ts.map +1 -1
- package/dist/tools/find.js +16 -6
- package/dist/tools/find.js.map +1 -1
- package/dist/tools/form-input.d.ts.map +1 -1
- package/dist/tools/form-input.js +20 -0
- package/dist/tools/form-input.js.map +1 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +2 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/javascript.d.ts.map +1 -1
- package/dist/tools/javascript.js +38 -2
- package/dist/tools/javascript.js.map +1 -1
- package/dist/tools/navigate.d.ts.map +1 -1
- package/dist/tools/navigate.js +27 -0
- package/dist/tools/navigate.js.map +1 -1
- package/dist/tools/profile-status.d.ts +10 -0
- package/dist/tools/profile-status.d.ts.map +1 -0
- package/dist/tools/profile-status.js +101 -0
- package/dist/tools/profile-status.js.map +1 -0
- package/dist/tools/wait-and-click.d.ts.map +1 -1
- package/dist/tools/wait-and-click.js +3 -1
- package/dist/tools/wait-and-click.js.map +1 -1
- package/dist/utils/format-age.d.ts +5 -0
- package/dist/utils/format-age.d.ts.map +1 -0
- package/dist/utils/format-age.js +15 -0
- package/dist/utils/format-age.js.map +1 -0
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/pid-manager.d.ts +6 -0
- package/dist/utils/pid-manager.d.ts.map +1 -0
- package/dist/utils/pid-manager.js +132 -0
- package/dist/utils/pid-manager.js.map +1 -0
- package/dist/utils/ref-id-manager.d.ts +19 -1
- package/dist/utils/ref-id-manager.d.ts.map +1 -1
- package/dist/utils/ref-id-manager.js +49 -2
- package/dist/utils/ref-id-manager.js.map +1 -1
- package/package.json +4 -1
- package/dist/chrome/profile-detector.d.ts +0 -52
- package/dist/chrome/profile-detector.d.ts.map +0 -1
- package/dist/chrome/profile-detector.js +0 -246
- package/dist/chrome/profile-detector.js.map +0 -1
- package/dist/hints/rules/dom-mode-suggestion.d.ts +0 -6
- package/dist/hints/rules/dom-mode-suggestion.d.ts.map +0 -1
- package/dist/hints/rules/dom-mode-suggestion.js +0 -24
- package/dist/hints/rules/dom-mode-suggestion.js.map +0 -1
- package/dist/types/profile.d.ts +0 -76
- package/dist/types/profile.d.ts.map +0 -1
- package/dist/types/profile.js +0 -35
- package/dist/types/profile.js.map +0 -1
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Atomic SQLite Cookie Copy
|
|
4
|
+
*
|
|
5
|
+
* Chrome stores cookies in a SQLite database using WAL (Write-Ahead Log) mode.
|
|
6
|
+
* The database state spans up to three files: `Cookies`, `Cookies-wal`, and
|
|
7
|
+
* `Cookies-shm`. A naive sequential `fs.copyFileSync` of these files while
|
|
8
|
+
* Chrome is writing produces an inconsistent copy — the main DB and WAL may
|
|
9
|
+
* represent different transaction states, causing Chrome to silently discard
|
|
10
|
+
* the corrupted database and start with an empty cookie jar.
|
|
11
|
+
*
|
|
12
|
+
* This module implements a 3-tier fallback chain for atomic cookie copying:
|
|
13
|
+
* 1. `better-sqlite3` — VACUUM INTO for a clean, synchronous atomic copy
|
|
14
|
+
* 2. `sqlite3` CLI — `.backup` command via child_process
|
|
15
|
+
* 3. Raw `fs.copyFileSync` — last resort, copies main DB only (no WAL/SHM)
|
|
16
|
+
*/
|
|
17
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
18
|
+
if (k2 === undefined) k2 = k;
|
|
19
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
20
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
21
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
22
|
+
}
|
|
23
|
+
Object.defineProperty(o, k2, desc);
|
|
24
|
+
}) : (function(o, m, k, k2) {
|
|
25
|
+
if (k2 === undefined) k2 = k;
|
|
26
|
+
o[k2] = m[k];
|
|
27
|
+
}));
|
|
28
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
29
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
30
|
+
}) : function(o, v) {
|
|
31
|
+
o["default"] = v;
|
|
32
|
+
});
|
|
33
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
34
|
+
var ownKeys = function(o) {
|
|
35
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
36
|
+
var ar = [];
|
|
37
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
38
|
+
return ar;
|
|
39
|
+
};
|
|
40
|
+
return ownKeys(o);
|
|
41
|
+
};
|
|
42
|
+
return function (mod) {
|
|
43
|
+
if (mod && mod.__esModule) return mod;
|
|
44
|
+
var result = {};
|
|
45
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
46
|
+
__setModuleDefault(result, mod);
|
|
47
|
+
return result;
|
|
48
|
+
};
|
|
49
|
+
})();
|
|
50
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
51
|
+
exports._deps = void 0;
|
|
52
|
+
exports.copyCookiesAtomic = copyCookiesAtomic;
|
|
53
|
+
const fs = __importStar(require("fs"));
|
|
54
|
+
const path = __importStar(require("path"));
|
|
55
|
+
const child_process_1 = require("child_process");
|
|
56
|
+
/**
|
|
57
|
+
* @internal Attempt atomic copy via better-sqlite3's VACUUM INTO.
|
|
58
|
+
*/
|
|
59
|
+
function attemptBetterSqlite3Copy(sourcePath, destPath) {
|
|
60
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
61
|
+
const Database = require('better-sqlite3');
|
|
62
|
+
const db = new Database(sourcePath, { readonly: true, fileMustExist: true });
|
|
63
|
+
try {
|
|
64
|
+
// VACUUM INTO creates a fully checkpointed, single-file copy —
|
|
65
|
+
// no WAL file is produced and no WAL file needs to be present.
|
|
66
|
+
const escapedDest = destPath.replace(/'/g, "''");
|
|
67
|
+
db.exec(`VACUUM INTO '${escapedDest}'`);
|
|
68
|
+
}
|
|
69
|
+
finally {
|
|
70
|
+
db.close();
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* @internal Mutable dispatch table for testability.
|
|
75
|
+
* Tests can spy on `_deps.attemptBetterSqlite3Copy` to control the fallback chain.
|
|
76
|
+
*/
|
|
77
|
+
exports._deps = {
|
|
78
|
+
attemptBetterSqlite3Copy,
|
|
79
|
+
};
|
|
80
|
+
/**
|
|
81
|
+
* Copy the Chrome Cookies SQLite database from one Default profile directory
|
|
82
|
+
* to another using a 3-tier fallback chain for atomic consistency:
|
|
83
|
+
*
|
|
84
|
+
* Tier 1: better-sqlite3 `VACUUM INTO` — synchronous, atomic, WAL-aware
|
|
85
|
+
* Tier 2: sqlite3 CLI `.backup` — atomic, WAL-aware, no npm dep required
|
|
86
|
+
* Tier 3: fs.copyFileSync — fast but non-atomic; recent WAL transactions may be absent
|
|
87
|
+
*
|
|
88
|
+
* @param sourceDefaultDir Path to the source Chrome `Default` profile directory
|
|
89
|
+
* @param destDefaultDir Path to the destination `Default` directory (must already exist)
|
|
90
|
+
* @returns Result indicating which method succeeded, or `none` if all failed
|
|
91
|
+
*/
|
|
92
|
+
function copyCookiesAtomic(sourceDefaultDir, destDefaultDir) {
|
|
93
|
+
const sourcePath = path.join(sourceDefaultDir, 'Cookies');
|
|
94
|
+
const destPath = path.join(destDefaultDir, 'Cookies');
|
|
95
|
+
// Guard: source Cookies file must exist
|
|
96
|
+
if (!fs.existsSync(sourcePath)) {
|
|
97
|
+
return {
|
|
98
|
+
method: 'none',
|
|
99
|
+
success: false,
|
|
100
|
+
warning: 'Source Cookies file not found',
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
// -------------------------------------------------------------------------
|
|
104
|
+
// Tier 1: better-sqlite3 — VACUUM INTO (synchronous, atomic, WAL-aware)
|
|
105
|
+
// -------------------------------------------------------------------------
|
|
106
|
+
try {
|
|
107
|
+
// VACUUM INTO requires the destination to not exist; remove stale file first.
|
|
108
|
+
if (fs.existsSync(destPath)) {
|
|
109
|
+
fs.unlinkSync(destPath);
|
|
110
|
+
}
|
|
111
|
+
exports._deps.attemptBetterSqlite3Copy(sourcePath, destPath);
|
|
112
|
+
return { method: 'better-sqlite3', success: true };
|
|
113
|
+
}
|
|
114
|
+
catch {
|
|
115
|
+
// better-sqlite3 not installed, or VACUUM INTO failed — fall through
|
|
116
|
+
}
|
|
117
|
+
// -------------------------------------------------------------------------
|
|
118
|
+
// Tier 2: sqlite3 CLI — .backup command
|
|
119
|
+
// -------------------------------------------------------------------------
|
|
120
|
+
try {
|
|
121
|
+
(0, child_process_1.execFileSync)('sqlite3', [sourcePath, `.backup '${destPath.replace(/'/g, "''")}'`], {
|
|
122
|
+
timeout: 5000,
|
|
123
|
+
stdio: 'ignore',
|
|
124
|
+
});
|
|
125
|
+
return { method: 'sqlite3-cli', success: true };
|
|
126
|
+
}
|
|
127
|
+
catch {
|
|
128
|
+
// sqlite3 CLI not available or backup failed — fall through
|
|
129
|
+
}
|
|
130
|
+
// -------------------------------------------------------------------------
|
|
131
|
+
// Tier 3: Raw file copy (last resort — non-atomic, WAL not included)
|
|
132
|
+
// -------------------------------------------------------------------------
|
|
133
|
+
try {
|
|
134
|
+
fs.copyFileSync(sourcePath, destPath);
|
|
135
|
+
// Explicitly do NOT copy WAL/SHM files — an inconsistent WAL applied to
|
|
136
|
+
// a partial main-db snapshot is worse than no WAL at all.
|
|
137
|
+
const warning = 'Used non-atomic file copy (sqlite3 unavailable). Some recent cookies may be missing.';
|
|
138
|
+
return { method: 'file-copy', success: true, warning };
|
|
139
|
+
}
|
|
140
|
+
catch {
|
|
141
|
+
const warning = 'All cookie copy methods failed.';
|
|
142
|
+
return { method: 'none', success: false, warning };
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=sqlite-cookie-copy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlite-cookie-copy.js","sourceRoot":"","sources":["../../src/chrome/sqlite-cookie-copy.ts"],"names":[],"mappings":"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"}
|
|
File without changes
|
package/dist/cli/index.js
CHANGED
|
File without changes
|
|
@@ -21,4 +21,8 @@ export declare const MAX_SEARCH_CANDIDATES = 30;
|
|
|
21
21
|
export declare const DEFAULT_PROTOCOL_TIMEOUT_MS = 30000;
|
|
22
22
|
/** Screenshot-specific timeout. Shorter than protocol timeout for fast fallback. */
|
|
23
23
|
export declare const DEFAULT_SCREENSHOT_TIMEOUT_MS = 15000;
|
|
24
|
+
/** Maximum number of tabs (targets) per worker. Oldest tab is closed when limit is reached. */
|
|
25
|
+
export declare const DEFAULT_MAX_TARGETS_PER_WORKER = 5;
|
|
26
|
+
/** Memory pressure threshold in bytes (500MB). Below this free memory, aggressive cleanup triggers. */
|
|
27
|
+
export declare const DEFAULT_MEMORY_PRESSURE_THRESHOLD: number;
|
|
24
28
|
//# sourceMappingURL=defaults.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,+FAA+F;AAC/F,eAAO,MAAM,0BAA0B,KAAK,CAAC;AAE7C,sGAAsG;AACtG,eAAO,MAAM,gBAAgB,QAAQ,CAAC;AAEtC,2CAA2C;AAC3C,eAAO,MAAM,gBAAgB;;;CAAyC,CAAC;AAEvE,kDAAkD;AAClD,eAAO,MAAM,6BAA6B,QAAQ,CAAC;AAEnD,gFAAgF;AAChF,eAAO,MAAM,qBAAqB,KAAK,CAAC;AAExC,yEAAyE;AACzE,eAAO,MAAM,2BAA2B,QAAQ,CAAC;AAEjD,oFAAoF;AACpF,eAAO,MAAM,6BAA6B,QAAQ,CAAC"}
|
|
1
|
+
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,+FAA+F;AAC/F,eAAO,MAAM,0BAA0B,KAAK,CAAC;AAE7C,sGAAsG;AACtG,eAAO,MAAM,gBAAgB,QAAQ,CAAC;AAEtC,2CAA2C;AAC3C,eAAO,MAAM,gBAAgB;;;CAAyC,CAAC;AAEvE,kDAAkD;AAClD,eAAO,MAAM,6BAA6B,QAAQ,CAAC;AAEnD,gFAAgF;AAChF,eAAO,MAAM,qBAAqB,KAAK,CAAC;AAExC,yEAAyE;AACzE,eAAO,MAAM,2BAA2B,QAAQ,CAAC;AAEjD,oFAAoF;AACpF,eAAO,MAAM,6BAA6B,QAAQ,CAAC;AAEnD,+FAA+F;AAC/F,eAAO,MAAM,8BAA8B,IAAI,CAAC;AAEhD,uGAAuG;AACvG,eAAO,MAAM,iCAAiC,QAAoB,CAAC"}
|
package/dist/config/defaults.js
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* Update this single file instead of hunting across tools/cdp/chrome.
|
|
7
7
|
*/
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
exports.DEFAULT_SCREENSHOT_TIMEOUT_MS = exports.DEFAULT_PROTOCOL_TIMEOUT_MS = exports.MAX_SEARCH_CANDIDATES = exports.DEFAULT_NAVIGATION_TIMEOUT_MS = exports.DEFAULT_VIEWPORT = exports.MAX_OUTPUT_CHARS = exports.DEFAULT_SCREENSHOT_QUALITY = void 0;
|
|
9
|
+
exports.DEFAULT_MEMORY_PRESSURE_THRESHOLD = exports.DEFAULT_MAX_TARGETS_PER_WORKER = exports.DEFAULT_SCREENSHOT_TIMEOUT_MS = exports.DEFAULT_PROTOCOL_TIMEOUT_MS = exports.MAX_SEARCH_CANDIDATES = exports.DEFAULT_NAVIGATION_TIMEOUT_MS = exports.DEFAULT_VIEWPORT = exports.MAX_OUTPUT_CHARS = exports.DEFAULT_SCREENSHOT_QUALITY = void 0;
|
|
10
10
|
/** WebP screenshot quality (0-100). Directly affects LLM token consumption via base64 size. */
|
|
11
11
|
exports.DEFAULT_SCREENSHOT_QUALITY = 60;
|
|
12
12
|
/** Maximum characters returned in page content output (read_page, DOM serializer, batch_paginate). */
|
|
@@ -21,4 +21,8 @@ exports.MAX_SEARCH_CANDIDATES = 30;
|
|
|
21
21
|
exports.DEFAULT_PROTOCOL_TIMEOUT_MS = 30000;
|
|
22
22
|
/** Screenshot-specific timeout. Shorter than protocol timeout for fast fallback. */
|
|
23
23
|
exports.DEFAULT_SCREENSHOT_TIMEOUT_MS = 15000;
|
|
24
|
+
/** Maximum number of tabs (targets) per worker. Oldest tab is closed when limit is reached. */
|
|
25
|
+
exports.DEFAULT_MAX_TARGETS_PER_WORKER = 5;
|
|
26
|
+
/** Memory pressure threshold in bytes (500MB). Below this free memory, aggressive cleanup triggers. */
|
|
27
|
+
exports.DEFAULT_MEMORY_PRESSURE_THRESHOLD = 500 * 1024 * 1024;
|
|
24
28
|
//# sourceMappingURL=defaults.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,+FAA+F;AAClF,QAAA,0BAA0B,GAAG,EAAE,CAAC;AAE7C,sGAAsG;AACzF,QAAA,gBAAgB,GAAG,KAAK,CAAC;AAEtC,2CAA2C;AAC9B,QAAA,gBAAgB,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAW,CAAC;AAEvE,kDAAkD;AACrC,QAAA,6BAA6B,GAAG,KAAK,CAAC;AAEnD,gFAAgF;AACnE,QAAA,qBAAqB,GAAG,EAAE,CAAC;AAExC,yEAAyE;AAC5D,QAAA,2BAA2B,GAAG,KAAK,CAAC;AAEjD,oFAAoF;AACvE,QAAA,6BAA6B,GAAG,KAAK,CAAC"}
|
|
1
|
+
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,+FAA+F;AAClF,QAAA,0BAA0B,GAAG,EAAE,CAAC;AAE7C,sGAAsG;AACzF,QAAA,gBAAgB,GAAG,KAAK,CAAC;AAEtC,2CAA2C;AAC9B,QAAA,gBAAgB,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAW,CAAC;AAEvE,kDAAkD;AACrC,QAAA,6BAA6B,GAAG,KAAK,CAAC;AAEnD,gFAAgF;AACnE,QAAA,qBAAqB,GAAG,EAAE,CAAC;AAExC,yEAAyE;AAC5D,QAAA,2BAA2B,GAAG,KAAK,CAAC;AAEjD,oFAAoF;AACvE,QAAA,6BAA6B,GAAG,KAAK,CAAC;AAEnD,+FAA+F;AAClF,QAAA,8BAA8B,GAAG,CAAC,CAAC;AAEhD,uGAAuG;AAC1F,QAAA,iCAAiC,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC"}
|
package/dist/config/global.d.ts
CHANGED
|
@@ -14,6 +14,8 @@ export interface GlobalConfig {
|
|
|
14
14
|
useHeadlessShell?: boolean;
|
|
15
15
|
/** Run Chrome in headless mode (default: true when auto-launch is enabled) */
|
|
16
16
|
headless?: boolean;
|
|
17
|
+
/** If true, quit running Chrome to reuse the real profile instead of using temp profile (default: false) */
|
|
18
|
+
restartChrome?: boolean;
|
|
17
19
|
/** Chrome Pool settings for managing multiple Chrome instances */
|
|
18
20
|
pool?: {
|
|
19
21
|
/** Enable the Chrome pool (default: true) */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"global.d.ts","sourceRoot":"","sources":["../../src/config/global.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,YAAY;IAC3B,mCAAmC;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,yDAAyD;IACzD,UAAU,EAAE,OAAO,CAAC;IACpB,6GAA6G;IAC7G,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iEAAiE;IACjE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,8DAA8D;IAC9D,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,kEAAkE;IAClE,IAAI,CAAC,EAAE;QACL,6CAA6C;QAC7C,OAAO,EAAE,OAAO,CAAC;QACjB,kEAAkE;QAClE,YAAY,EAAE,MAAM,CAAC;QACrB,oGAAoG;QACpG,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,yDAAyD;IACzD,MAAM,CAAC,EAAE;QACP,0CAA0C;QAC1C,OAAO,EAAE,OAAO,CAAC;QACjB,gDAAgD;QAChD,cAAc,EAAE,MAAM,CAAC;QACvB,+BAA+B;QAC/B,cAAc,CAAC,EAAE;YACf,WAAW,CAAC,EAAE,MAAM,CAAC;YACrB,UAAU,CAAC,EAAE,MAAM,CAAC;SACrB,CAAC;QACF,2BAA2B;QAC3B,UAAU,CAAC,EAAE;YACX,UAAU,CAAC,EAAE,MAAM,CAAC;SACrB,CAAC;KACH,CAAC;CACH;AAOD;;GAEG;AACH,wBAAgB,eAAe,IAAI,YAAY,CAE9C;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI,CAEtE"}
|
|
1
|
+
{"version":3,"file":"global.d.ts","sourceRoot":"","sources":["../../src/config/global.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,YAAY;IAC3B,mCAAmC;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,yDAAyD;IACzD,UAAU,EAAE,OAAO,CAAC;IACpB,6GAA6G;IAC7G,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iEAAiE;IACjE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,8DAA8D;IAC9D,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,4GAA4G;IAC5G,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,kEAAkE;IAClE,IAAI,CAAC,EAAE;QACL,6CAA6C;QAC7C,OAAO,EAAE,OAAO,CAAC;QACjB,kEAAkE;QAClE,YAAY,EAAE,MAAM,CAAC;QACrB,oGAAoG;QACpG,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,yDAAyD;IACzD,MAAM,CAAC,EAAE;QACP,0CAA0C;QAC1C,OAAO,EAAE,OAAO,CAAC;QACjB,gDAAgD;QAChD,cAAc,EAAE,MAAM,CAAC;QACvB,+BAA+B;QAC/B,cAAc,CAAC,EAAE;YACf,WAAW,CAAC,EAAE,MAAM,CAAC;YACrB,UAAU,CAAC,EAAE,MAAM,CAAC;SACrB,CAAC;QACF,2BAA2B;QAC3B,UAAU,CAAC,EAAE;YACX,UAAU,CAAC,EAAE,MAAM,CAAC;SACrB,CAAC;KACH,CAAC;CACH;AAOD;;GAEG;AACH,wBAAgB,eAAe,IAAI,YAAY,CAE9C;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI,CAEtE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"global.js","sourceRoot":"","sources":["../../src/config/global.ts"],"names":[],"mappings":";AAAA;;GAEG;;
|
|
1
|
+
{"version":3,"file":"global.js","sourceRoot":"","sources":["../../src/config/global.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAoDH,0CAEC;AAKD,0CAEC;AAjBD,MAAM,MAAM,GAAiB;IAC3B,IAAI,EAAE,IAAI;IACV,UAAU,EAAE,KAAK;CAClB,CAAC;AAEF;;GAEG;AACH,SAAgB,eAAe;IAC7B,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,SAAgB,eAAe,CAAC,SAAgC;IAC9D,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AACnC,CAAC"}
|
|
@@ -4,6 +4,12 @@
|
|
|
4
4
|
* Rules are sorted by priority (lower = higher priority) and evaluated first-match-wins.
|
|
5
5
|
* Uses ActivityTracker's recent calls for sequence/pattern detection.
|
|
6
6
|
* Integrates PatternLearner for adaptive error→recovery learning.
|
|
7
|
+
*
|
|
8
|
+
* Escalation system (issue #71):
|
|
9
|
+
* - Fire count 1-2: info severity (original hint text)
|
|
10
|
+
* - Fire count 3-4: warning severity (⚠️ WARNING prefix)
|
|
11
|
+
* - Fire count 5+: critical severity (🛑 CRITICAL prefix + action history)
|
|
12
|
+
* Fire counts accumulate per rule across the session and never reset.
|
|
7
13
|
*/
|
|
8
14
|
import type { ToolCallEvent } from '../dashboard/types';
|
|
9
15
|
import type { ActivityTracker } from '../dashboard/activity-tracker';
|
|
@@ -19,12 +25,31 @@ export interface HintRule {
|
|
|
19
25
|
priority: number;
|
|
20
26
|
match(ctx: HintContext): string | null;
|
|
21
27
|
}
|
|
28
|
+
export type HintSeverity = 'info' | 'warning' | 'critical';
|
|
22
29
|
export interface HintLogEntry {
|
|
23
30
|
timestamp: number;
|
|
24
31
|
toolName: string;
|
|
25
32
|
isError: boolean;
|
|
26
33
|
matchedRule: string | null;
|
|
27
34
|
hint: string | null;
|
|
35
|
+
severity: HintSeverity | null;
|
|
36
|
+
fireCount: number;
|
|
37
|
+
}
|
|
38
|
+
export interface HintResult {
|
|
39
|
+
severity: HintSeverity;
|
|
40
|
+
rule: string;
|
|
41
|
+
fireCount: number;
|
|
42
|
+
hint: string;
|
|
43
|
+
rawHint: string;
|
|
44
|
+
suggestion?: {
|
|
45
|
+
tool?: string;
|
|
46
|
+
reason: string;
|
|
47
|
+
};
|
|
48
|
+
context?: {
|
|
49
|
+
element?: string;
|
|
50
|
+
coordinates?: string;
|
|
51
|
+
ref?: string;
|
|
52
|
+
};
|
|
28
53
|
}
|
|
29
54
|
export declare class HintEngine {
|
|
30
55
|
private rules;
|
|
@@ -46,10 +71,19 @@ export declare class HintEngine {
|
|
|
46
71
|
*/
|
|
47
72
|
enableLearning(dirPath: string): void;
|
|
48
73
|
/**
|
|
49
|
-
* Evaluate rules and return the first matching hint, or null.
|
|
74
|
+
* Evaluate rules and return the first matching structured hint, or null.
|
|
50
75
|
* Also feeds the learner for adaptive pattern detection.
|
|
76
|
+
*
|
|
77
|
+
* Returns HintResult with escalating severity based on per-rule fire count:
|
|
78
|
+
* - 1-2 firings: info (original hint text)
|
|
79
|
+
* - 3-4 firings: warning (⚠️ WARNING prefix)
|
|
80
|
+
* - 5+ firings: critical (🛑 CRITICAL prefix + action history)
|
|
51
81
|
*/
|
|
52
|
-
getHint(toolName: string, result: Record<string, unknown>, isError: boolean):
|
|
82
|
+
getHint(toolName: string, result: Record<string, unknown>, isError: boolean): HintResult | null;
|
|
83
|
+
private getSeverity;
|
|
84
|
+
private formatHintMessage;
|
|
85
|
+
private extractContext;
|
|
86
|
+
private extractSuggestion;
|
|
53
87
|
/**
|
|
54
88
|
* Extract text content from an MCPResult for pattern matching.
|
|
55
89
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hint-engine.d.ts","sourceRoot":"","sources":["../../src/hints/hint-engine.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"hint-engine.d.ts","sourceRoot":"","sources":["../../src/hints/hint-engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AASnD,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,aAAa,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,GAAG,EAAE,WAAW,GAAG,MAAM,GAAG,IAAI,CAAC;CACxC;AAED,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,SAAS,GAAG,UAAU,CAAC;AAE3D,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,YAAY,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE;QACX,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,OAAO,CAAC,EAAE;QACR,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,KAAK,CAAa;IAC1B,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,cAAc,CAAkC;IAGxD,OAAO,CAAC,SAAS,CAA+B;IAChD,OAAO,CAAC,SAAS,CAAgB;IACjC,OAAO,CAAC,UAAU,CAA+B;IACjD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAO;gBAEjC,eAAe,EAAE,eAAe;IAsB5C;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAUpC;;OAEG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAIrC;;;;;;;;OAQG;IACH,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,OAAO,GAAG,UAAU,GAAG,IAAI;IAyE/F,OAAO,CAAC,WAAW;IAMnB,OAAO,CAAC,iBAAiB;IAWzB,OAAO,CAAC,cAAc;IAkBtB,OAAO,CAAC,iBAAiB;IAYzB;;OAEG;IACH,OAAO,CAAC,WAAW;IAUnB;;OAEG;IACH,OAAO,CAAC,GAAG;IAUX;;OAEG;IACH,OAAO,CAAC,WAAW;IASnB;;OAEG;IACH,OAAO,IAAI,IAAI;IAYf;;OAEG;IACH,QAAQ,IAAI,QAAQ,EAAE;IAItB;;OAEG;IACH,UAAU,IAAI,cAAc;CAG7B"}
|
|
@@ -5,6 +5,12 @@
|
|
|
5
5
|
* Rules are sorted by priority (lower = higher priority) and evaluated first-match-wins.
|
|
6
6
|
* Uses ActivityTracker's recent calls for sequence/pattern detection.
|
|
7
7
|
* Integrates PatternLearner for adaptive error→recovery learning.
|
|
8
|
+
*
|
|
9
|
+
* Escalation system (issue #71):
|
|
10
|
+
* - Fire count 1-2: info severity (original hint text)
|
|
11
|
+
* - Fire count 3-4: warning severity (⚠️ WARNING prefix)
|
|
12
|
+
* - Fire count 5+: critical severity (🛑 CRITICAL prefix + action history)
|
|
13
|
+
* Fire counts accumulate per rule across the session and never reset.
|
|
8
14
|
*/
|
|
9
15
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
10
16
|
if (k2 === undefined) k2 = k;
|
|
@@ -56,7 +62,7 @@ class HintEngine {
|
|
|
56
62
|
activityTracker;
|
|
57
63
|
learner;
|
|
58
64
|
logFilePath = null;
|
|
59
|
-
hintEscalation = new Map(); // ruleName ->
|
|
65
|
+
hintEscalation = new Map(); // ruleName -> session fire count
|
|
60
66
|
// Buffered async write stream
|
|
61
67
|
logStream = null;
|
|
62
68
|
logBuffer = [];
|
|
@@ -101,52 +107,115 @@ class HintEngine {
|
|
|
101
107
|
this.learner.enablePersistence(dirPath);
|
|
102
108
|
}
|
|
103
109
|
/**
|
|
104
|
-
* Evaluate rules and return the first matching hint, or null.
|
|
110
|
+
* Evaluate rules and return the first matching structured hint, or null.
|
|
105
111
|
* Also feeds the learner for adaptive pattern detection.
|
|
112
|
+
*
|
|
113
|
+
* Returns HintResult with escalating severity based on per-rule fire count:
|
|
114
|
+
* - 1-2 firings: info (original hint text)
|
|
115
|
+
* - 3-4 firings: warning (⚠️ WARNING prefix)
|
|
116
|
+
* - 5+ firings: critical (🛑 CRITICAL prefix + action history)
|
|
106
117
|
*/
|
|
107
118
|
getHint(toolName, result, isError) {
|
|
108
119
|
const resultText = this.extractText(result);
|
|
109
120
|
const recentCalls = this.activityTracker.getRecentCalls(5);
|
|
110
121
|
const ctx = { toolName, resultText, isError, recentCalls };
|
|
111
122
|
let matchedRule = null;
|
|
112
|
-
let
|
|
123
|
+
let rawHint = null;
|
|
113
124
|
for (const rule of this.rules) {
|
|
114
125
|
const h = rule.match(ctx);
|
|
115
126
|
if (h) {
|
|
116
127
|
matchedRule = rule.name;
|
|
117
|
-
|
|
128
|
+
rawHint = h;
|
|
118
129
|
break;
|
|
119
130
|
}
|
|
120
131
|
}
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
if (newCount >= 3) {
|
|
127
|
-
hint = `🚨 CRITICAL (repeated ${newCount}x): ${hint}`;
|
|
132
|
+
if (!rawHint || !matchedRule) {
|
|
133
|
+
// Feed the learner even on miss
|
|
134
|
+
this.learner.onToolComplete(toolName, isError);
|
|
135
|
+
if (isError) {
|
|
136
|
+
this.learner.onMiss(toolName, resultText);
|
|
128
137
|
}
|
|
129
|
-
|
|
130
|
-
|
|
138
|
+
this.log({ timestamp: Date.now(), toolName, isError, matchedRule: null, hint: null, severity: null, fireCount: 0 });
|
|
139
|
+
return null;
|
|
140
|
+
}
|
|
141
|
+
// Track fire count per rule (accumulates across session, never resets)
|
|
142
|
+
const fireCount = (this.hintEscalation.get(matchedRule) || 0) + 1;
|
|
143
|
+
this.hintEscalation.set(matchedRule, fireCount);
|
|
144
|
+
const severity = this.getSeverity(fireCount);
|
|
145
|
+
let formattedHint = this.formatHintMessage(severity, rawHint, fireCount);
|
|
146
|
+
// Context-aware: extract element/coordinate info from result
|
|
147
|
+
const context = this.extractContext(resultText);
|
|
148
|
+
// For critical hints (5+), add action history to force strategy change
|
|
149
|
+
if (severity === 'critical') {
|
|
150
|
+
const recentTools = recentCalls.slice(0, 5).map(c => c.toolName);
|
|
151
|
+
const toolCounts = recentTools.reduce((acc, t) => { acc[t] = (acc[t] || 0) + 1; return acc; }, {});
|
|
152
|
+
const summary = Object.entries(toolCounts).map(([t, c]) => `${t}×${c}`).join(', ');
|
|
153
|
+
formattedHint += ` Previous actions: [${summary}].`;
|
|
154
|
+
if (context?.coordinates) {
|
|
155
|
+
formattedHint += ` Last coordinates: ${context.coordinates}.`;
|
|
131
156
|
}
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
if (key !== matchedRule)
|
|
135
|
-
this.hintEscalation.set(key, 0);
|
|
157
|
+
if (context?.element) {
|
|
158
|
+
formattedHint += ` Hit element: ${context.element}.`;
|
|
136
159
|
}
|
|
137
160
|
}
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
161
|
+
const suggestion = this.extractSuggestion(rawHint);
|
|
162
|
+
const hintResult = {
|
|
163
|
+
severity,
|
|
164
|
+
rule: matchedRule,
|
|
165
|
+
fireCount,
|
|
166
|
+
hint: formattedHint,
|
|
167
|
+
rawHint,
|
|
168
|
+
...(suggestion && { suggestion }),
|
|
169
|
+
...(context && { context }),
|
|
170
|
+
};
|
|
171
|
+
// Feed the learner
|
|
143
172
|
this.learner.onToolComplete(toolName, isError);
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
173
|
+
this.log({ timestamp: Date.now(), toolName, isError, matchedRule, hint: formattedHint, severity, fireCount });
|
|
174
|
+
return hintResult;
|
|
175
|
+
}
|
|
176
|
+
getSeverity(fireCount) {
|
|
177
|
+
if (fireCount <= 2)
|
|
178
|
+
return 'info';
|
|
179
|
+
if (fireCount <= 4)
|
|
180
|
+
return 'warning';
|
|
181
|
+
return 'critical';
|
|
182
|
+
}
|
|
183
|
+
formatHintMessage(severity, rawHint, fireCount) {
|
|
184
|
+
switch (severity) {
|
|
185
|
+
case 'info':
|
|
186
|
+
return rawHint; // Keep original text (already has "Hint:" prefix from rules)
|
|
187
|
+
case 'warning':
|
|
188
|
+
return `⚠️ WARNING (${fireCount}x): ${rawHint}`;
|
|
189
|
+
case 'critical':
|
|
190
|
+
return `🛑 CRITICAL (${fireCount}x — you MUST change approach): ${rawHint}`;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
extractContext(resultText) {
|
|
194
|
+
const context = {};
|
|
195
|
+
// Extract coordinates from "Clicked at (X, Y)" or "(X,Y)" patterns
|
|
196
|
+
const coordMatch = resultText.match(/\((\d+),\s*(\d+)\)/);
|
|
197
|
+
if (coordMatch)
|
|
198
|
+
context.coordinates = `(${coordMatch[1]}, ${coordMatch[2]})`;
|
|
199
|
+
// Extract element info from "Hit: ..." line
|
|
200
|
+
const hitMatch = resultText.match(/Hit:\s*(.+?)(?:\n|$)/);
|
|
201
|
+
if (hitMatch)
|
|
202
|
+
context.element = hitMatch[1].trim();
|
|
203
|
+
// Extract ref ID
|
|
204
|
+
const refMatch = resultText.match(/ref[_=]["']?(\w+)/i);
|
|
205
|
+
if (refMatch)
|
|
206
|
+
context.ref = refMatch[1];
|
|
207
|
+
return Object.keys(context).length > 0 ? context : undefined;
|
|
208
|
+
}
|
|
209
|
+
extractSuggestion(rawHint) {
|
|
210
|
+
// Extract tool name from common patterns like "Use X", "Try X", "Prefer X"
|
|
211
|
+
const toolMatch = rawHint.match(/\b(?:Use|Try|Prefer)\s+(\w+)(?:\(|[\s,.])/i);
|
|
212
|
+
if (toolMatch) {
|
|
213
|
+
return {
|
|
214
|
+
tool: toolMatch[1],
|
|
215
|
+
reason: rawHint,
|
|
216
|
+
};
|
|
147
217
|
}
|
|
148
|
-
|
|
149
|
-
return hint;
|
|
218
|
+
return undefined;
|
|
150
219
|
}
|
|
151
220
|
/**
|
|
152
221
|
* Extract text content from an MCPResult for pattern matching.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hint-engine.js","sourceRoot":"","sources":["../../src/hints/hint-engine.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"hint-engine.js","sourceRoot":"","sources":["../../src/hints/hint-engine.ts"],"names":[],"mappings":"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"}
|
package/dist/hints/index.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Hints module — Proactive hint system
|
|
3
3
|
*/
|
|
4
4
|
export { HintEngine } from './hint-engine';
|
|
5
|
-
export type { HintContext, HintRule, HintLogEntry } from './hint-engine';
|
|
5
|
+
export type { HintContext, HintRule, HintLogEntry, HintSeverity, HintResult } from './hint-engine';
|
|
6
6
|
export { PatternLearner } from './pattern-learner';
|
|
7
7
|
export type { LearnedPattern } from './pattern-learner';
|
|
8
8
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hints/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hints/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AACnG,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repetition-detection.d.ts","sourceRoot":"","sources":["../../../src/hints/rules/repetition-detection.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAe,MAAM,gBAAgB,CAAC;AA4C5D,eAAO,MAAM,wBAAwB,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"repetition-detection.d.ts","sourceRoot":"","sources":["../../../src/hints/rules/repetition-detection.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAe,MAAM,gBAAgB,CAAC;AA4C5D,eAAO,MAAM,wBAAwB,EAAE,QAAQ,EA4N9C,CAAC"}
|
|
@@ -125,6 +125,27 @@ exports.repetitionDetectionRules = [
|
|
|
125
125
|
return null;
|
|
126
126
|
},
|
|
127
127
|
},
|
|
128
|
+
{
|
|
129
|
+
name: 'empty-result-streak',
|
|
130
|
+
priority: 89,
|
|
131
|
+
match(ctx) {
|
|
132
|
+
if (ctx.toolName !== 'javascript_tool')
|
|
133
|
+
return null;
|
|
134
|
+
if (ctx.isError)
|
|
135
|
+
return null;
|
|
136
|
+
const trimmed = ctx.resultText.trim();
|
|
137
|
+
if (trimmed !== '' && trimmed !== 'null' && trimmed !== '[]' && trimmed !== '{}' && trimmed !== 'undefined') {
|
|
138
|
+
return null;
|
|
139
|
+
}
|
|
140
|
+
const recentJsCalls = ctx.recentCalls.filter((c) => c.toolName === 'javascript_tool' && c.result === 'success');
|
|
141
|
+
if (recentJsCalls.length < 2)
|
|
142
|
+
return null;
|
|
143
|
+
const attemptCount = recentJsCalls.length + 1;
|
|
144
|
+
return (`Hint: javascript_tool returned empty/null results — attempt #${attemptCount} with no useful output. ` +
|
|
145
|
+
'The target element likely does not exist on this page or the selector is wrong. ' +
|
|
146
|
+
'Use read_page mode="dom" to check actual page structure before retrying.');
|
|
147
|
+
},
|
|
148
|
+
},
|
|
128
149
|
{
|
|
129
150
|
name: 'js-escalation-ladder',
|
|
130
151
|
priority: 92,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repetition-detection.js","sourceRoot":"","sources":["../../../src/hints/rules/repetition-detection.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAIH;;GAEG;AACH,SAAS,mBAAmB,CAAC,GAAgB,EAAE,SAAiB;IAC9D,IAAI,GAAG,CAAC,WAAW,CAAC,MAAM,GAAG,SAAS;QAAE,OAAO,KAAK,CAAC;IACrD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;QACnC,MAAM,IAAI,GAAG,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QAChC,IAAI,IAAI,CAAC,QAAQ,KAAK,GAAG,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,OAAO;YAAE,OAAO,KAAK,CAAC;IAC9E,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,GAAgB;IACzC,IAAI,GAAG,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IAC7C,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,WAAW,CAAC;IAClC,4CAA4C;IAC5C,kDAAkD;IAClD,OAAO,CACL,CAAC,CAAC,QAAQ,KAAK,GAAG,CAAC,QAAQ;QAC3B,CAAC,CAAC,QAAQ,KAAK,GAAG,CAAC,QAAQ;QAC3B,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,QAAQ,CAC1B,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,kBAAkB,CAAC,GAAgB;IAC1C,IAAI,GAAG,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IAC7C,MAAM,IAAI,GAAG,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAChC,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IACpC,OAAO,CACL,IAAI,CAAC,QAAQ,KAAK,GAAG,CAAC,QAAQ;QAC9B,QAAQ,CAAC,QAAQ,KAAK,GAAG,CAAC,QAAQ;QAClC,IAAI,CAAC,MAAM,KAAK,SAAS;QACzB,QAAQ,CAAC,MAAM,KAAK,SAAS,CAC9B,CAAC;AACJ,CAAC;AAEY,QAAA,wBAAwB,GAAe;IAClD;QACE,IAAI,EAAE,mBAAmB;QACzB,QAAQ,EAAE,EAAE;QACZ,KAAK,CAAC,GAAgB;YACpB,+EAA+E;YAC/E,IAAI,GAAG,CAAC,QAAQ,KAAK,UAAU;gBAAE,OAAO,IAAI,CAAC;YAE7C,+DAA+D;YAC/D,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,CAAC,IAAI,CACnC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,QAAQ,KAAK,UAAU,IAAI,CAAC,CAAC,QAAQ,KAAK,UAAU,CAAC,CACnG,CAAC;YACF,IAAI,CAAC,QAAQ;gBAAE,OAAO,IAAI,CAAC;YAE3B,iFAAiF;YACjF,uEAAuE;YACvE,MAAM,YAAY,GAAG,GAAG,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC;gBAC7C,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,QAAQ,KAAK,UAAU;gBAC3C,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,KAAK,YAAY,CAAC;YACpD,IAAI,CAAC,YAAY,IAAI,GAAG,CAAC,QAAQ,KAAK,UAAU;gBAAE,OAAO,IAAI,CAAC;YAE9D,OAAO,6BAA6B,QAAQ,CAAC,QAAQ,SAAS,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAS,GAAG,IAAI,CAAC,uHAAuH,CAAC;QAC7N,CAAC;KACF;IACD;QACE,IAAI,EAAE,wBAAwB;QAC9B,QAAQ,EAAE,EAAE,EAAE,0DAA0D;QACxE,KAAK,CAAC,GAAG;YACP,IAAI,GAAG,CAAC,QAAQ,KAAK,UAAU;gBAAE,OAAO,IAAI,CAAC;YAC7C,IAAI,GAAG,CAAC,OAAO;gBAAE,OAAO,IAAI,CAAC;YAE7B,kEAAkE;YAClE,MAAM,YAAY,GAAG,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAC9C,CAAC,CAAC,QAAQ,KAAK,UAAU;gBACzB,CAAC,CAAC,MAAM,KAAK,SAAS;gBACtB,CAAC,CAAC,IAAI,EAAE,MAAM,KAAK,YAAY;gBAC/B,CAAC,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM;gBACzB,CAAC,CAAC,IAAI,EAAE,MAAM,KAAK,KAAK;gBACxB,CAAC,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM;gBACzB,CAAC,CAAC,IAAI,EAAE,MAAM,KAAK,QAAQ,CAC5B,CAAC;YAEF,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC;gBAAE,OAAO,IAAI,CAAC;YAEzC,0CAA0C;YAC1C,MAAM,cAAc,GAAG,qDAAqD,CAAC,IAAI,CAC/E,GAAG,CAAC,UAAU,CACf,IAAI,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YAEvC,IAAI,CAAC,cAAc;gBAAE,OAAO,IAAI,CAAC;YAEjC,2DAA2D;YAC3D,OAAO,CACL,qEAAqE;gBACrE,qDAAqD;gBACrD,gFAAgF;gBAChF,mFAAmF,CACpF,CAAC;QACJ,CAAC;KACF;IACD;QACE,IAAI,EAAE,8BAA8B;QACpC,QAAQ,EAAE,EAAE;QACZ,KAAK,CAAC,GAAG;YACP,+DAA+D;YAC/D,IAAI,GAAG,CAAC,QAAQ,KAAK,UAAU;gBAAE,OAAO,IAAI,CAAC;YAC7C,IAAI,GAAG,CAAC,OAAO;gBAAE,OAAO,IAAI,CAAC;YAE7B,MAAM,MAAM,GAAG,GAAG,CAAC,WAAW,CAAC;YAC/B,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;gBAAE,OAAO,IAAI,CAAC;YAEnC,IAAI,eAAe,GAAG,CAAC,CAAC;YACxB,IAAI,UAAU,GAAG,CAAC,CAAC;YACnB,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;gBAC1B,IAAI,IAAI,CAAC,QAAQ,KAAK,UAAU,EAAE,CAAC;oBACjC,IAAI,IAAI,CAAC,IAAI,EAAE,MAAM,KAAK,YAAY;wBAAE,eAAe,EAAE,CAAC;yBACrD,IAAI,CAAC,YAAY,EAAE,aAAa,EAAE,cAAc,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,MAAgB,CAAC;wBAAE,UAAU,EAAE,CAAC;gBAC7G,CAAC;YACH,CAAC;YAED,IAAI,eAAe,IAAI,CAAC,IAAI,UAAU,IAAI,CAAC,EAAE,CAAC;gBAC5C,OAAO,CACL,oDAAoD;oBACpD,2GAA2G;oBAC3G,uDAAuD,CACxD,CAAC;YACJ,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC;KACF;IACD;QACE,IAAI,EAAE,sBAAsB;QAC5B,QAAQ,EAAE,EAAE;QACZ,KAAK,CAAC,GAAG;YACP,IAAI,GAAG,CAAC,QAAQ,KAAK,iBAAiB;gBAAE,OAAO,IAAI,CAAC;YAEpD,qCAAqC;YACrC,MAAM,WAAW,GAAG,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,iBAAiB,CAAC,CAAC,MAAM,CAAC;YACzF,IAAI,WAAW,GAAG,CAAC;gBAAE,OAAO,IAAI,CAAC;YAEjC,8CAA8C;YAC9C,OAAO,CACL,8EAA8E;gBAC9E,mGAAmG;gBACnG,qEAAqE,CACtE,CAAC;QACJ,CAAC;KACF;IACD;QACE,IAAI,EAAE,wBAAwB;QAC9B,QAAQ,EAAE,GAAG;QACb,KAAK,CAAC,GAAG;YACP,IAAI,CAAC,GAAG,CAAC,OAAO;gBAAE,OAAO,IAAI,CAAC;YAC9B,IAAI,mBAAmB,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC;gBAChC,OAAO,SAAS,GAAG,CAAC,QAAQ,WAAW,CAAC,GAAG,CAAC,oDAAoD,CAAC;YACnG,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;KACF;IACD;QACE,IAAI,EAAE,kBAAkB;QACxB,QAAQ,EAAE,GAAG;QACb,KAAK,CAAC,GAAG;YACP,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC;gBAAE,OAAO,IAAI,CAAC;YACzC,MAAM,SAAS,GAAG,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;YAC9C,OAAO,SAAS,GAAG,CAAC,QAAQ,IAAI,SAAS,kEAAkE,CAAC;QAC9G,CAAC;KACF;IACD;QACE,IAAI,EAAE,uBAAuB;QAC7B,QAAQ,EAAE,GAAG;QACb,KAAK,CAAC,GAAG;YACP,IAAI,GAAG,CAAC,OAAO;gBAAE,OAAO,IAAI,CAAC;YAC7B,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC;gBAAE,OAAO,IAAI,CAAC;YAC1C,OAAO,SAAS,GAAG,CAAC,QAAQ,6EAA6E,CAAC;QAC5G,CAAC;KACF;IACD;QACE,IAAI,EAAE,wBAAwB;QAC9B,QAAQ,EAAE,GAAG;QACb,KAAK,CAAC,GAAG;YACP,IAAI,GAAG,CAAC,QAAQ,KAAK,UAAU;gBAAE,OAAO,IAAI,CAAC;YAE7C,MAAM,aAAa,GAAG,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC;YAC7E,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC;gBAAE,OAAO,IAAI,CAAC;YAE1C,MAAM,IAAI,GAAa,aAAa;iBACjC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAE,CAAC,CAAC,IAAI,EAAE,GAAc,IAAI,EAAE,CAAC;iBACvC,MAAM,CAAC,OAAO,CAAC,CAAC;YAEnB,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;gBAAE,OAAO,IAAI,CAAC;YAEjC,8CAA8C;YAC9C,MAAM,YAAY,GAAG,mBAAmB,CAAC;YACzC,4CAA4C;YAC5C,MAAM,WAAW,GAAG,sBAAsB,CAAC;YAE3C,KAAK,MAAM,KAAK,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,EAAE,CAAC;gBAChD,MAAM,QAAQ,GAAa,EAAE,CAAC;gBAC9B,IAAI,QAAQ,GAAkB,IAAI,CAAC;gBAEnC,IAAI,QAAQ,GAAG,IAAI,CAAC;gBACpB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;oBACvB,MAAM,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;oBAC3B,IAAI,CAAC,CAAC,EAAE,CAAC;wBAAC,QAAQ,GAAG,KAAK,CAAC;wBAAC,MAAM;oBAAC,CAAC;oBAEpC,MAAM,MAAM,GAAG,KAAK,KAAK,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACpD,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;oBAEpC,IAAI,CAAC,QAAQ,EAAE,CAAC;wBACd,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;oBACzE,CAAC;gBACH,CAAC;gBAED,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,QAAQ;oBAAE,SAAS;gBAE5D,+BAA+B;gBAC/B,MAAM,MAAM,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBACnD,IAAI,cAAc,GAAG,IAAI,CAAC;gBAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBACvC,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;wBAAC,cAAc,GAAG,KAAK,CAAC;wBAAC,MAAM;oBAAC,CAAC;gBACzE,CAAC;gBAED,IAAI,cAAc,EAAE,CAAC;oBACnB,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;oBAC5B,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;oBAC1C,OAAO,CACL,0CAA0C,QAAQ,KAAK;wBACvD,mDAAmD,QAAQ,gBAAgB,SAAS,aAAa,OAAO,IAAI;wBAC5G,+DAA+D,CAChE,CAAC;gBACJ,CAAC;YACH,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC;KACF;CACF,CAAC"}
|
|
1
|
+
{"version":3,"file":"repetition-detection.js","sourceRoot":"","sources":["../../../src/hints/rules/repetition-detection.ts"],"names":[],"mappings":"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"}
|