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.
Files changed (104) hide show
  1. package/dist/cdp/client.d.ts.map +1 -1
  2. package/dist/cdp/client.js +9 -0
  3. package/dist/cdp/client.js.map +1 -1
  4. package/dist/chrome/launcher.d.ts +32 -15
  5. package/dist/chrome/launcher.d.ts.map +1 -1
  6. package/dist/chrome/launcher.js +136 -116
  7. package/dist/chrome/launcher.js.map +1 -1
  8. package/dist/chrome/profile-manager.d.ts +108 -0
  9. package/dist/chrome/profile-manager.d.ts.map +1 -0
  10. package/dist/chrome/profile-manager.js +372 -0
  11. package/dist/chrome/profile-manager.js.map +1 -0
  12. package/dist/chrome/sqlite-cookie-copy.d.ts +46 -0
  13. package/dist/chrome/sqlite-cookie-copy.d.ts.map +1 -0
  14. package/dist/chrome/sqlite-cookie-copy.js +145 -0
  15. package/dist/chrome/sqlite-cookie-copy.js.map +1 -0
  16. package/dist/cli/claude-session.js +0 -0
  17. package/dist/cli/index.js +0 -0
  18. package/dist/config/defaults.d.ts +4 -0
  19. package/dist/config/defaults.d.ts.map +1 -1
  20. package/dist/config/defaults.js +5 -1
  21. package/dist/config/defaults.js.map +1 -1
  22. package/dist/config/global.d.ts +2 -0
  23. package/dist/config/global.d.ts.map +1 -1
  24. package/dist/config/global.js.map +1 -1
  25. package/dist/hints/hint-engine.d.ts +36 -2
  26. package/dist/hints/hint-engine.d.ts.map +1 -1
  27. package/dist/hints/hint-engine.js +96 -27
  28. package/dist/hints/hint-engine.js.map +1 -1
  29. package/dist/hints/index.d.ts +1 -1
  30. package/dist/hints/index.d.ts.map +1 -1
  31. package/dist/hints/rules/repetition-detection.d.ts.map +1 -1
  32. package/dist/hints/rules/repetition-detection.js +21 -0
  33. package/dist/hints/rules/repetition-detection.js.map +1 -1
  34. package/dist/index.js +17 -1
  35. package/dist/index.js.map +1 -1
  36. package/dist/mcp-server.d.ts +12 -1
  37. package/dist/mcp-server.d.ts.map +1 -1
  38. package/dist/mcp-server.js +162 -20
  39. package/dist/mcp-server.js.map +1 -1
  40. package/dist/resources/usage-guide.d.ts +1 -1
  41. package/dist/resources/usage-guide.d.ts.map +1 -1
  42. package/dist/resources/usage-guide.js +22 -0
  43. package/dist/resources/usage-guide.js.map +1 -1
  44. package/dist/session-manager.d.ts +4 -0
  45. package/dist/session-manager.d.ts.map +1 -1
  46. package/dist/session-manager.js +56 -0
  47. package/dist/session-manager.js.map +1 -1
  48. package/dist/tools/click-element.d.ts.map +1 -1
  49. package/dist/tools/click-element.js +6 -2
  50. package/dist/tools/click-element.js.map +1 -1
  51. package/dist/tools/computer.d.ts.map +1 -1
  52. package/dist/tools/computer.js +32 -3
  53. package/dist/tools/computer.js.map +1 -1
  54. package/dist/tools/find.d.ts.map +1 -1
  55. package/dist/tools/find.js +16 -6
  56. package/dist/tools/find.js.map +1 -1
  57. package/dist/tools/form-input.d.ts.map +1 -1
  58. package/dist/tools/form-input.js +20 -0
  59. package/dist/tools/form-input.js.map +1 -1
  60. package/dist/tools/index.d.ts.map +1 -1
  61. package/dist/tools/index.js +2 -0
  62. package/dist/tools/index.js.map +1 -1
  63. package/dist/tools/javascript.d.ts.map +1 -1
  64. package/dist/tools/javascript.js +38 -2
  65. package/dist/tools/javascript.js.map +1 -1
  66. package/dist/tools/navigate.d.ts.map +1 -1
  67. package/dist/tools/navigate.js +27 -0
  68. package/dist/tools/navigate.js.map +1 -1
  69. package/dist/tools/profile-status.d.ts +10 -0
  70. package/dist/tools/profile-status.d.ts.map +1 -0
  71. package/dist/tools/profile-status.js +101 -0
  72. package/dist/tools/profile-status.js.map +1 -0
  73. package/dist/tools/wait-and-click.d.ts.map +1 -1
  74. package/dist/tools/wait-and-click.js +3 -1
  75. package/dist/tools/wait-and-click.js.map +1 -1
  76. package/dist/utils/format-age.d.ts +5 -0
  77. package/dist/utils/format-age.d.ts.map +1 -0
  78. package/dist/utils/format-age.js +15 -0
  79. package/dist/utils/format-age.js.map +1 -0
  80. package/dist/utils/index.d.ts +1 -0
  81. package/dist/utils/index.d.ts.map +1 -1
  82. package/dist/utils/index.js +1 -0
  83. package/dist/utils/index.js.map +1 -1
  84. package/dist/utils/pid-manager.d.ts +6 -0
  85. package/dist/utils/pid-manager.d.ts.map +1 -0
  86. package/dist/utils/pid-manager.js +132 -0
  87. package/dist/utils/pid-manager.js.map +1 -0
  88. package/dist/utils/ref-id-manager.d.ts +19 -1
  89. package/dist/utils/ref-id-manager.d.ts.map +1 -1
  90. package/dist/utils/ref-id-manager.js +49 -2
  91. package/dist/utils/ref-id-manager.js.map +1 -1
  92. package/package.json +4 -1
  93. package/dist/chrome/profile-detector.d.ts +0 -52
  94. package/dist/chrome/profile-detector.d.ts.map +0 -1
  95. package/dist/chrome/profile-detector.js +0 -246
  96. package/dist/chrome/profile-detector.js.map +0 -1
  97. package/dist/hints/rules/dom-mode-suggestion.d.ts +0 -6
  98. package/dist/hints/rules/dom-mode-suggestion.d.ts.map +0 -1
  99. package/dist/hints/rules/dom-mode-suggestion.js +0 -24
  100. package/dist/hints/rules/dom-mode-suggestion.js.map +0 -1
  101. package/dist/types/profile.d.ts +0 -76
  102. package/dist/types/profile.d.ts.map +0 -1
  103. package/dist/types/profile.js +0 -35
  104. 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"}
@@ -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"}
@@ -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;;AAkDH,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"}
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): string | null;
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;;;;;;GAMG;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,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;CACrB;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;;;OAGG;IACH,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI;IAoD3F;;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"}
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 -> consecutive count
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 hint = null;
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
- hint = h;
128
+ rawHint = h;
118
129
  break;
119
130
  }
120
131
  }
121
- // Escalation tracking: repeat matches of the same rule get increasing urgency
122
- if (hint) {
123
- const prevCount = this.hintEscalation.get(matchedRule) || 0;
124
- const newCount = prevCount + 1;
125
- this.hintEscalation.set(matchedRule, newCount);
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
- else if (newCount >= 2) {
130
- hint = `⚠️ REPEATED: ${hint}`;
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
- // Reset escalation counters for all other rules
133
- for (const [key] of this.hintEscalation) {
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
- else {
139
- // No rule matched — reset all escalation state
140
- this.hintEscalation.clear();
141
- }
142
- // Feed the learner: observe every completion for recovery detection
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
- // If no rule matched an error, start learning observation
145
- if (hint === null && isError) {
146
- this.learner.onMiss(toolName, resultText);
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
- this.log({ timestamp: Date.now(), toolName, isError, matchedRule, hint });
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;;;;;;GAMG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,uCAAyB;AACzB,2CAA6B;AAG7B,uDAAmD;AACnD,2DAA4D;AAC5D,yEAAyE;AACzE,mEAAoE;AACpE,uEAAwE;AACxE,uEAAwE;AACxE,yDAA2D;AAC3D,yDAAyD;AAuBzD,MAAa,UAAU;IACb,KAAK,CAAa;IAClB,eAAe,CAAkB;IACjC,OAAO,CAAiB;IACxB,WAAW,GAAkB,IAAI,CAAC;IAClC,cAAc,GAAwB,IAAI,GAAG,EAAE,CAAC,CAAC,gCAAgC;IAEzF,8BAA8B;IACtB,SAAS,GAA0B,IAAI,CAAC;IACxC,SAAS,GAAa,EAAE,CAAC;IACzB,UAAU,GAA0B,IAAI,CAAC;IACzC,MAAM,CAAU,cAAc,GAAG,GAAG,CAAC,CAAC,KAAK;IAEnD,YAAY,eAAgC;QAC1C,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;QACvC,IAAI,CAAC,OAAO,GAAG,IAAI,gCAAc,EAAE,CAAC;QAEpC,8EAA8E;QAC9E,2EAA2E;QAC3E,IAAI,CAAC,KAAK,GAAG;YACX,GAAG,mCAAkB,EAAS,mBAAmB;YACjD,GAAG,+CAAwB,EAAI,mBAAmB;YAClD,GAAG,gDAAwB,EAAI,mBAAmB;YAClD,GAAG,+CAAwB,EAAI,mBAAmB;YAClD,GAAG,2CAAsB,EAAM,mBAAmB;YAClD,GAAG,IAAA,kCAAkB,EAAC,IAAI,CAAC,OAAO,CAAC,EAAE,eAAe;YACpD,GAAG,gCAAgB,EAAY,mBAAmB;SACnD,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;QAE1C,yCAAyC;QACzC,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;YACtB,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,OAAe;QAC3B,IAAI,CAAC;YACH,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3C,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC;YAC9F,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QAC1E,CAAC;QAAC,MAAM,CAAC;YACP,sBAAsB;QACxB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,cAAc,CAAC,OAAe;QAC5B,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAC1C,CAAC;IAED;;;OAGG;IACH,OAAO,CAAC,QAAgB,EAAE,MAA+B,EAAE,OAAgB;QACzE,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAC5C,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;QAE3D,MAAM,GAAG,GAAgB,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;QAExE,IAAI,WAAW,GAAkB,IAAI,CAAC;QACtC,IAAI,IAAI,GAAkB,IAAI,CAAC;QAE/B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC9B,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC1B,IAAI,CAAC,EAAE,CAAC;gBACN,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC;gBACxB,IAAI,GAAG,CAAC,CAAC;gBACT,MAAM;YACR,CAAC;QACH,CAAC;QAED,8EAA8E;QAC9E,IAAI,IAAI,EAAE,CAAC;YACT,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,WAAY,CAAC,IAAI,CAAC,CAAC;YAC7D,MAAM,QAAQ,GAAG,SAAS,GAAG,CAAC,CAAC;YAC/B,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,WAAY,EAAE,QAAQ,CAAC,CAAC;YAEhD,IAAI,QAAQ,IAAI,CAAC,EAAE,CAAC;gBAClB,IAAI,GAAG,yBAAyB,QAAQ,OAAO,IAAI,EAAE,CAAC;YACxD,CAAC;iBAAM,IAAI,QAAQ,IAAI,CAAC,EAAE,CAAC;gBACzB,IAAI,GAAG,gBAAgB,IAAI,EAAE,CAAC;YAChC,CAAC;YAED,gDAAgD;YAChD,KAAK,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;gBACxC,IAAI,GAAG,KAAK,WAAW;oBAAE,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YAC3D,CAAC;QACH,CAAC;aAAM,CAAC;YACN,+CAA+C;YAC/C,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;QAC9B,CAAC;QAED,oEAAoE;QACpE,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAE/C,0DAA0D;QAC1D,IAAI,IAAI,KAAK,IAAI,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAC5C,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;QAE1E,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACK,WAAW,CAAC,MAA+B;QACjD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;YAAE,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAE3D,OAAO,OAAO;aACX,MAAM,CAAC,CAAC,CAA0B,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC;aACzD,GAAG,CAAC,CAAC,CAA0B,EAAE,EAAE,CAAC,CAAC,CAAC,IAAc,CAAC;aACrD,IAAI,CAAC,IAAI,CAAC,CAAC;IAChB,CAAC;IAED;;OAEG;IACK,GAAG,CAAC,KAAmB;QAC7B,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE,OAAO;QAC5B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;QAClD,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,GAAG,EAAE;gBAChC,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,CAAC,EAAE,UAAU,CAAC,cAAc,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IAED;;OAEG;IACK,WAAW;QACjB,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YAChD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACrC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC3B,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QACtB,CAAC;QACD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,OAAO;QACL,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC;YACrB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACxB,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC9B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACzB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED;;OAEG;IACH,UAAU;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;;AAhLH,gCAiLC"}
1
+ {"version":3,"file":"hint-engine.js","sourceRoot":"","sources":["../../src/hints/hint-engine.ts"],"names":[],"mappings":"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"}
@@ -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;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,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,EAsM9C,CAAC"}
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":"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"}
1
+ {"version":3,"file":"repetition-detection.js","sourceRoot":"","sources":["../../../src/hints/rules/repetition-detection.ts"],"names":[],"mappings":"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"}