btcp-browser-agent 0.1.0 → 0.1.1

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 (136) hide show
  1. package/package.json +8 -9
  2. package/packages/core/dist/actions.d.ts +97 -0
  3. package/packages/core/dist/actions.js +940 -0
  4. package/packages/core/dist/errors.d.ts +138 -0
  5. package/packages/core/dist/errors.js +157 -0
  6. package/packages/core/dist/index.d.ts +120 -0
  7. package/packages/core/dist/index.js +134 -0
  8. package/packages/core/dist/ref-map.d.ts +16 -0
  9. package/packages/core/dist/ref-map.js +91 -0
  10. package/packages/core/dist/snapshot.d.ts +37 -0
  11. package/packages/core/dist/snapshot.js +751 -0
  12. package/packages/core/dist/types.d.ts +396 -0
  13. package/packages/core/dist/types.js +7 -0
  14. package/packages/extension/dist/background.d.ts +227 -0
  15. package/packages/extension/dist/background.js +737 -0
  16. package/packages/extension/dist/content.d.ts +18 -0
  17. package/packages/extension/dist/content.js +149 -0
  18. package/packages/extension/dist/index.d.ts +228 -0
  19. package/packages/extension/dist/index.js +350 -0
  20. package/packages/extension/dist/session-manager.d.ts +87 -0
  21. package/packages/extension/dist/session-manager.js +322 -0
  22. package/packages/extension/{src/session-types.ts → dist/session-types.d.ts} +113 -144
  23. package/packages/extension/dist/session-types.js +5 -0
  24. package/packages/extension/dist/types.d.ts +88 -0
  25. package/packages/extension/dist/types.js +7 -0
  26. package/CLAUDE.md +0 -230
  27. package/SKILL.md +0 -143
  28. package/SNAPSHOT_IMPROVEMENTS.md +0 -302
  29. package/USAGE.md +0 -146
  30. package/dist/index.d.ts.map +0 -1
  31. package/dist/index.js.map +0 -1
  32. package/docs/browser-cli-design.md +0 -500
  33. package/examples/chrome-extension/CHANGELOG.md +0 -210
  34. package/examples/chrome-extension/DEBUG.md +0 -231
  35. package/examples/chrome-extension/ERROR_FIXED.md +0 -147
  36. package/examples/chrome-extension/QUICK_TEST.md +0 -189
  37. package/examples/chrome-extension/README.md +0 -149
  38. package/examples/chrome-extension/SESSION_ONLY_MODE.md +0 -305
  39. package/examples/chrome-extension/TEST_WITH_YOUR_TABS.md +0 -97
  40. package/examples/chrome-extension/build.js +0 -43
  41. package/examples/chrome-extension/manifest.json +0 -37
  42. package/examples/chrome-extension/package-lock.json +0 -1063
  43. package/examples/chrome-extension/package.json +0 -21
  44. package/examples/chrome-extension/popup.html +0 -195
  45. package/examples/chrome-extension/src/background.ts +0 -12
  46. package/examples/chrome-extension/src/content.ts +0 -7
  47. package/examples/chrome-extension/src/popup.ts +0 -303
  48. package/examples/chrome-extension/src/scenario-google-github.ts +0 -389
  49. package/examples/chrome-extension/test-page.html +0 -127
  50. package/examples/chrome-extension/tests/README.md +0 -206
  51. package/examples/chrome-extension/tests/scenario-google-to-github-star.ts +0 -380
  52. package/examples/chrome-extension/tsconfig.json +0 -14
  53. package/examples/snapshots/README.md +0 -207
  54. package/examples/snapshots/amazon-com-detail.html +0 -9528
  55. package/examples/snapshots/amazon-com-detail.snapshot.txt +0 -997
  56. package/examples/snapshots/convert-snapshots.ts +0 -97
  57. package/examples/snapshots/edition-cnn-com.html +0 -13292
  58. package/examples/snapshots/edition-cnn-com.snapshot.txt +0 -562
  59. package/examples/snapshots/github-com-microsoft-vscode.html +0 -2916
  60. package/examples/snapshots/github-com-microsoft-vscode.snapshot.txt +0 -455
  61. package/examples/snapshots/google-search.html +0 -20012
  62. package/examples/snapshots/google-search.snapshot.txt +0 -195
  63. package/examples/snapshots/metadata.json +0 -86
  64. package/examples/snapshots/npr-org-templates.html +0 -2031
  65. package/examples/snapshots/npr-org-templates.snapshot.txt +0 -224
  66. package/examples/snapshots/stackoverflow-com.html +0 -5216
  67. package/examples/snapshots/stackoverflow-com.snapshot.txt +0 -2404
  68. package/examples/snapshots/test-all-mode.html +0 -46
  69. package/examples/snapshots/test-all-mode.snapshot.txt +0 -5
  70. package/examples/snapshots/validate.test.ts +0 -296
  71. package/packages/cli/package.json +0 -42
  72. package/packages/cli/src/__tests__/cli.test.ts +0 -434
  73. package/packages/cli/src/__tests__/errors.test.ts +0 -226
  74. package/packages/cli/src/__tests__/executor.test.ts +0 -275
  75. package/packages/cli/src/__tests__/formatter.test.ts +0 -260
  76. package/packages/cli/src/__tests__/parser.test.ts +0 -288
  77. package/packages/cli/src/__tests__/suggestions.test.ts +0 -255
  78. package/packages/cli/src/commands/back.ts +0 -22
  79. package/packages/cli/src/commands/check.ts +0 -33
  80. package/packages/cli/src/commands/clear.ts +0 -33
  81. package/packages/cli/src/commands/click.ts +0 -32
  82. package/packages/cli/src/commands/closetab.ts +0 -31
  83. package/packages/cli/src/commands/eval.ts +0 -41
  84. package/packages/cli/src/commands/fill.ts +0 -30
  85. package/packages/cli/src/commands/focus.ts +0 -33
  86. package/packages/cli/src/commands/forward.ts +0 -22
  87. package/packages/cli/src/commands/goto.ts +0 -34
  88. package/packages/cli/src/commands/help.ts +0 -162
  89. package/packages/cli/src/commands/hover.ts +0 -34
  90. package/packages/cli/src/commands/index.ts +0 -129
  91. package/packages/cli/src/commands/newtab.ts +0 -35
  92. package/packages/cli/src/commands/press.ts +0 -40
  93. package/packages/cli/src/commands/reload.ts +0 -25
  94. package/packages/cli/src/commands/screenshot.ts +0 -27
  95. package/packages/cli/src/commands/scroll.ts +0 -64
  96. package/packages/cli/src/commands/select.ts +0 -35
  97. package/packages/cli/src/commands/snapshot.ts +0 -21
  98. package/packages/cli/src/commands/tab.ts +0 -32
  99. package/packages/cli/src/commands/tabs.ts +0 -26
  100. package/packages/cli/src/commands/text.ts +0 -27
  101. package/packages/cli/src/commands/title.ts +0 -17
  102. package/packages/cli/src/commands/type.ts +0 -38
  103. package/packages/cli/src/commands/uncheck.ts +0 -33
  104. package/packages/cli/src/commands/url.ts +0 -17
  105. package/packages/cli/src/commands/wait.ts +0 -54
  106. package/packages/cli/src/errors.ts +0 -164
  107. package/packages/cli/src/executor.ts +0 -68
  108. package/packages/cli/src/formatter.ts +0 -215
  109. package/packages/cli/src/index.ts +0 -257
  110. package/packages/cli/src/parser.ts +0 -195
  111. package/packages/cli/src/suggestions.ts +0 -207
  112. package/packages/cli/src/terminal/Terminal.ts +0 -365
  113. package/packages/cli/src/terminal/index.ts +0 -5
  114. package/packages/cli/src/types.ts +0 -155
  115. package/packages/cli/tsconfig.json +0 -20
  116. package/packages/core/package.json +0 -35
  117. package/packages/core/src/actions.ts +0 -1210
  118. package/packages/core/src/errors.ts +0 -296
  119. package/packages/core/src/index.test.ts +0 -638
  120. package/packages/core/src/index.ts +0 -220
  121. package/packages/core/src/ref-map.ts +0 -107
  122. package/packages/core/src/snapshot.ts +0 -873
  123. package/packages/core/src/types.ts +0 -536
  124. package/packages/core/tsconfig.json +0 -23
  125. package/packages/extension/README.md +0 -129
  126. package/packages/extension/package.json +0 -43
  127. package/packages/extension/src/background.ts +0 -888
  128. package/packages/extension/src/content.ts +0 -172
  129. package/packages/extension/src/index.ts +0 -579
  130. package/packages/extension/src/session-manager.ts +0 -385
  131. package/packages/extension/src/types.ts +0 -162
  132. package/packages/extension/tsconfig.json +0 -28
  133. package/src/index.ts +0 -64
  134. package/tsconfig.build.json +0 -12
  135. package/tsconfig.json +0 -26
  136. package/vitest.config.ts +0 -13
@@ -1,296 +0,0 @@
1
- /**
2
- * Error handling utilities for BTCP Browser Agent
3
- *
4
- * Provides structured error types with machine-readable codes and
5
- * actionable suggestions to help AI agents self-correct.
6
- */
7
-
8
- /**
9
- * Machine-readable error codes for programmatic error handling
10
- */
11
- export enum ErrorCode {
12
- /** Element not found with given selector */
13
- ELEMENT_NOT_FOUND = 'ELEMENT_NOT_FOUND',
14
-
15
- /** Element exists but doesn't support the requested action */
16
- ELEMENT_NOT_COMPATIBLE = 'ELEMENT_NOT_COMPATIBLE',
17
-
18
- /** Ref ID has expired (cleared by new snapshot) */
19
- REF_EXPIRED = 'REF_EXPIRED',
20
-
21
- /** Invalid selector syntax or format */
22
- INVALID_SELECTOR = 'INVALID_SELECTOR',
23
-
24
- /** Operation timed out waiting for condition */
25
- TIMEOUT = 'TIMEOUT',
26
-
27
- /** Element exists but is not visible */
28
- ELEMENT_NOT_VISIBLE = 'ELEMENT_NOT_VISIBLE',
29
-
30
- /** Element exists but is disabled */
31
- ELEMENT_DISABLED = 'ELEMENT_DISABLED',
32
-
33
- /** Conflicting parameters provided to command */
34
- INVALID_PARAMETERS = 'INVALID_PARAMETERS',
35
-
36
- /** Element is not in the expected state */
37
- INVALID_STATE = 'INVALID_STATE',
38
-
39
- /** Network or navigation error */
40
- NAVIGATION_ERROR = 'NAVIGATION_ERROR',
41
- }
42
-
43
- /**
44
- * Structured context information for errors
45
- */
46
- export interface ErrorContext {
47
- /** The selector that was used */
48
- selector?: string;
49
-
50
- /** Expected element type or role */
51
- expectedType?: string;
52
-
53
- /** Actual element type or role found */
54
- actualType?: string;
55
-
56
- /** Current state of the element */
57
- elementState?: {
58
- attached: boolean;
59
- visible: boolean;
60
- enabled: boolean;
61
- };
62
-
63
- /** Actions available for this element */
64
- availableActions?: string[];
65
-
66
- /** Similar selectors that were found */
67
- similarSelectors?: Array<{
68
- selector: string;
69
- role: string;
70
- name: string;
71
- similarity?: number;
72
- }>;
73
-
74
- /** Nearby interactive elements */
75
- nearbyElements?: Array<{
76
- ref: string;
77
- role: string;
78
- name: string;
79
- }>;
80
-
81
- /** Additional context-specific data */
82
- [key: string]: any;
83
- }
84
-
85
- /**
86
- * Detailed error with structured data for AI agents
87
- *
88
- * Provides both human-readable messages and machine-readable
89
- * error codes, context, and recovery suggestions.
90
- *
91
- * @example
92
- * ```typescript
93
- * throw new DetailedError(
94
- * ErrorCode.ELEMENT_NOT_FOUND,
95
- * "Element not found: #submit-btn",
96
- * {
97
- * selector: "#submit-btn",
98
- * similarSelectors: [
99
- * { selector: "#submit-button", role: "button", name: "Submit" }
100
- * ]
101
- * },
102
- * [
103
- * "Try using selector: #submit-button",
104
- * "Run snapshot({ interactive: true }) to see all clickable elements"
105
- * ]
106
- * );
107
- * ```
108
- */
109
- export class DetailedError extends Error {
110
- public readonly code: ErrorCode;
111
- public readonly context: ErrorContext;
112
- public readonly suggestions: string[];
113
-
114
- constructor(
115
- code: ErrorCode,
116
- message: string,
117
- context: ErrorContext = {},
118
- suggestions: string[] = []
119
- ) {
120
- // Build enhanced message with suggestions
121
- let fullMessage = message;
122
-
123
- if (suggestions.length > 0) {
124
- fullMessage += '\n\nSuggestions:';
125
- suggestions.forEach(suggestion => {
126
- fullMessage += `\n - ${suggestion}`;
127
- });
128
- }
129
-
130
- super(fullMessage);
131
- this.name = 'DetailedError';
132
- this.code = code;
133
- this.context = context;
134
- this.suggestions = suggestions;
135
- }
136
-
137
- /**
138
- * Convert to structured object for API responses
139
- */
140
- toJSON() {
141
- return {
142
- name: this.name,
143
- message: this.message,
144
- code: this.code,
145
- context: this.context,
146
- suggestions: this.suggestions,
147
- };
148
- }
149
- }
150
-
151
- /**
152
- * Helper function to create element not found error with suggestions
153
- */
154
- export function createElementNotFoundError(
155
- selector: string,
156
- options: {
157
- similarSelectors?: Array<{ selector: string; role: string; name: string }>;
158
- nearbyElements?: Array<{ ref: string; role: string; name: string }>;
159
- isRef?: boolean;
160
- } = {}
161
- ): DetailedError {
162
- const { similarSelectors = [], nearbyElements = [], isRef = false } = options;
163
-
164
- const suggestions: string[] = [];
165
-
166
- if (isRef) {
167
- suggestions.push(
168
- 'Ref may have expired. Refs are cleared on snapshot() calls and page navigation.',
169
- 'Call snapshot() again to get fresh refs.'
170
- );
171
- }
172
-
173
- if (similarSelectors.length > 0) {
174
- suggestions.push(
175
- `Similar selectors found: ${similarSelectors.map(s => s.selector).join(', ')}`
176
- );
177
- }
178
-
179
- if (nearbyElements.length > 0) {
180
- suggestions.push(
181
- 'Run snapshot({ interactive: true }) to see all clickable elements'
182
- );
183
- }
184
-
185
- return new DetailedError(
186
- isRef ? ErrorCode.REF_EXPIRED : ErrorCode.ELEMENT_NOT_FOUND,
187
- `Element not found: ${selector}`,
188
- {
189
- selector,
190
- similarSelectors,
191
- nearbyElements,
192
- },
193
- suggestions
194
- );
195
- }
196
-
197
- /**
198
- * Helper function to create element not compatible error
199
- */
200
- export function createElementNotCompatibleError(
201
- selector: string,
202
- action: string,
203
- actualType: string,
204
- expectedTypes: string[],
205
- availableActions: string[] = []
206
- ): DetailedError {
207
- const suggestions: string[] = [];
208
-
209
- if (availableActions.length > 0) {
210
- suggestions.push(
211
- `Available actions for ${actualType}: ${availableActions.join(', ')}`
212
- );
213
- }
214
-
215
- suggestions.push(
216
- `Use snapshot() to verify element type before attempting action`
217
- );
218
-
219
- return new DetailedError(
220
- ErrorCode.ELEMENT_NOT_COMPATIBLE,
221
- `Element ${selector} is ${actualType}, cannot perform action: ${action}`,
222
- {
223
- selector,
224
- actualType,
225
- expectedType: expectedTypes.join(' or '),
226
- availableActions,
227
- },
228
- suggestions
229
- );
230
- }
231
-
232
- /**
233
- * Helper function to create timeout error with state information
234
- */
235
- export function createTimeoutError(
236
- selector: string | undefined,
237
- expectedState: string,
238
- currentState?: {
239
- attached: boolean;
240
- visible: boolean;
241
- enabled: boolean;
242
- }
243
- ): DetailedError {
244
- const suggestions: string[] = [];
245
-
246
- if (currentState) {
247
- if (currentState.attached && !currentState.visible && expectedState === 'visible') {
248
- suggestions.push(
249
- 'Element is attached but not visible. Check CSS display/visibility properties.',
250
- 'Try state="attached" if you just need element to exist in DOM.'
251
- );
252
- }
253
-
254
- if (currentState.attached && currentState.visible && !currentState.enabled && expectedState === 'enabled') {
255
- suggestions.push(
256
- 'Element is visible but disabled. Check disabled attribute or aria-disabled.',
257
- 'Wait for the condition that enables the element, or use force option if available.'
258
- );
259
- }
260
- }
261
-
262
- suggestions.push('Increase timeout value if element appears slowly.');
263
-
264
- const message = selector
265
- ? `Timeout waiting for ${selector} to be ${expectedState}`
266
- : `Timeout waiting for page to be ${expectedState}`;
267
-
268
- return new DetailedError(
269
- ErrorCode.TIMEOUT,
270
- message,
271
- {
272
- selector,
273
- expectedType: expectedState,
274
- elementState: currentState,
275
- },
276
- suggestions
277
- );
278
- }
279
-
280
- /**
281
- * Helper function to create invalid parameters error
282
- */
283
- export function createInvalidParametersError(
284
- message: string,
285
- conflictingParams: string[],
286
- suggestion: string
287
- ): DetailedError {
288
- return new DetailedError(
289
- ErrorCode.INVALID_PARAMETERS,
290
- message,
291
- {
292
- conflictingParams,
293
- },
294
- [suggestion]
295
- );
296
- }