@accomplish_ai/agent-core 0.3.1 → 0.3.2
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/common/constants/model-display.d.ts.map +1 -1
- package/dist/common/constants/model-display.js +1 -0
- package/dist/common/constants/model-display.js.map +1 -1
- package/dist/common/index.d.ts +2 -2
- package/dist/common/index.d.ts.map +1 -1
- package/dist/common/index.js.map +1 -1
- package/dist/common/types/auth.d.ts +13 -1
- package/dist/common/types/auth.d.ts.map +1 -1
- package/dist/common/types/connector.d.ts +32 -0
- package/dist/common/types/connector.d.ts.map +1 -0
- package/dist/common/types/connector.js +2 -0
- package/dist/common/types/connector.js.map +1 -0
- package/dist/common/types/index.d.ts +3 -2
- package/dist/common/types/index.d.ts.map +1 -1
- package/dist/common/types/index.js.map +1 -1
- package/dist/common/types/provider.d.ts +3 -2
- package/dist/common/types/provider.d.ts.map +1 -1
- package/dist/common/types/provider.js +7 -0
- package/dist/common/types/provider.js.map +1 -1
- package/dist/common/types/providerSettings.d.ts +10 -3
- package/dist/common/types/providerSettings.d.ts.map +1 -1
- package/dist/common/types/providerSettings.js +2 -0
- package/dist/common/types/providerSettings.js.map +1 -1
- package/dist/common.d.ts +3 -2
- package/dist/common.d.ts.map +1 -1
- package/dist/common.js.map +1 -1
- package/dist/connectors/mcp-oauth.d.ts +53 -0
- package/dist/connectors/mcp-oauth.d.ts.map +1 -0
- package/dist/connectors/mcp-oauth.js +176 -0
- package/dist/connectors/mcp-oauth.js.map +1 -0
- package/dist/factories/storage.d.ts.map +1 -1
- package/dist/factories/storage.js +24 -0
- package/dist/factories/storage.js.map +1 -1
- package/dist/index.d.ts +5 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/opencode/config-builder.d.ts.map +1 -1
- package/dist/opencode/config-builder.js +41 -4
- package/dist/opencode/config-builder.js.map +1 -1
- package/dist/opencode/config-generator.d.ts +8 -0
- package/dist/opencode/config-generator.d.ts.map +1 -1
- package/dist/opencode/config-generator.js +33 -0
- package/dist/opencode/config-generator.js.map +1 -1
- package/dist/opencode/environment.d.ts +5 -1
- package/dist/opencode/environment.d.ts.map +1 -1
- package/dist/opencode/environment.js +14 -0
- package/dist/opencode/environment.js.map +1 -1
- package/dist/providers/ollama.d.ts.map +1 -1
- package/dist/providers/ollama.js +8 -8
- package/dist/providers/ollama.js.map +1 -1
- package/dist/providers/tool-support-testing.d.ts +2 -1
- package/dist/providers/tool-support-testing.d.ts.map +1 -1
- package/dist/providers/tool-support-testing.js +29 -6
- package/dist/providers/tool-support-testing.js.map +1 -1
- package/dist/providers/validation.d.ts.map +1 -1
- package/dist/providers/validation.js +1 -0
- package/dist/providers/validation.js.map +1 -1
- package/dist/providers/vertex.d.ts +38 -0
- package/dist/providers/vertex.d.ts.map +1 -0
- package/dist/providers/vertex.js +209 -0
- package/dist/providers/vertex.js.map +1 -0
- package/dist/storage/index.d.ts +1 -0
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +1 -0
- package/dist/storage/index.js.map +1 -1
- package/dist/storage/migrations/index.d.ts +1 -1
- package/dist/storage/migrations/index.d.ts.map +1 -1
- package/dist/storage/migrations/index.js +3 -1
- package/dist/storage/migrations/index.js.map +1 -1
- package/dist/storage/migrations/v007-connectors.d.ts +3 -0
- package/dist/storage/migrations/v007-connectors.d.ts.map +1 -0
- package/dist/storage/migrations/v007-connectors.js +23 -0
- package/dist/storage/migrations/v007-connectors.js.map +1 -0
- package/dist/storage/repositories/connectors.d.ts +10 -0
- package/dist/storage/repositories/connectors.d.ts.map +1 -0
- package/dist/storage/repositories/connectors.js +78 -0
- package/dist/storage/repositories/connectors.js.map +1 -0
- package/dist/storage/repositories/index.d.ts +1 -0
- package/dist/storage/repositories/index.d.ts.map +1 -1
- package/dist/storage/repositories/index.js +1 -0
- package/dist/storage/repositories/index.js.map +1 -1
- package/dist/types/storage.d.ts +29 -3
- package/dist/types/storage.d.ts.map +1 -1
- package/mcp-tools/dev-browser-mcp/dist/index.mjs +201 -36
- package/package.json +1 -1
|
@@ -5,6 +5,7 @@ import { migration as v003 } from './v003-lmstudio.js';
|
|
|
5
5
|
import { migration as v004 } from './v004-openai-base-url.js';
|
|
6
6
|
import { migration as v005 } from './v005-task-todos.js';
|
|
7
7
|
import { migration as v006 } from './v006-skills.js';
|
|
8
|
+
import { migration as v007 } from './v007-connectors.js';
|
|
8
9
|
const migrations = [
|
|
9
10
|
v001,
|
|
10
11
|
v002,
|
|
@@ -12,12 +13,13 @@ const migrations = [
|
|
|
12
13
|
v004,
|
|
13
14
|
v005,
|
|
14
15
|
v006,
|
|
16
|
+
v007,
|
|
15
17
|
];
|
|
16
18
|
export function registerMigration(migration) {
|
|
17
19
|
migrations.push(migration);
|
|
18
20
|
migrations.sort((a, b) => a.version - b.version);
|
|
19
21
|
}
|
|
20
|
-
export const CURRENT_VERSION =
|
|
22
|
+
export const CURRENT_VERSION = 7;
|
|
21
23
|
export function getStoredVersion(db) {
|
|
22
24
|
try {
|
|
23
25
|
const tableExists = db
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/storage/migrations/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAQhE,OAAO,EAAE,SAAS,IAAI,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,SAAS,IAAI,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,SAAS,IAAI,IAAI,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,SAAS,IAAI,IAAI,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,SAAS,IAAI,IAAI,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,SAAS,IAAI,IAAI,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/storage/migrations/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"v007-connectors.d.ts","sourceRoot":"","sources":["../../../src/storage/migrations/v007-connectors.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,eAAO,MAAM,SAAS,EAAE,SAsBvB,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export const migration = {
|
|
2
|
+
version: 7,
|
|
3
|
+
up: (db) => {
|
|
4
|
+
db.exec(`
|
|
5
|
+
CREATE TABLE connectors (
|
|
6
|
+
id TEXT PRIMARY KEY,
|
|
7
|
+
name TEXT NOT NULL,
|
|
8
|
+
url TEXT NOT NULL,
|
|
9
|
+
status TEXT NOT NULL DEFAULT 'disconnected'
|
|
10
|
+
CHECK (status IN ('connected', 'disconnected', 'error', 'connecting')),
|
|
11
|
+
is_enabled INTEGER NOT NULL DEFAULT 1,
|
|
12
|
+
oauth_metadata_json TEXT,
|
|
13
|
+
client_registration_json TEXT,
|
|
14
|
+
last_connected_at TEXT,
|
|
15
|
+
created_at TEXT NOT NULL,
|
|
16
|
+
updated_at TEXT NOT NULL
|
|
17
|
+
)
|
|
18
|
+
`);
|
|
19
|
+
db.exec(`CREATE INDEX idx_connectors_enabled ON connectors(is_enabled)`);
|
|
20
|
+
db.exec(`CREATE INDEX idx_connectors_status ON connectors(status)`);
|
|
21
|
+
},
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=v007-connectors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"v007-connectors.js","sourceRoot":"","sources":["../../../src/storage/migrations/v007-connectors.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,SAAS,GAAc;IAClC,OAAO,EAAE,CAAC;IACV,EAAE,EAAE,CAAC,EAAY,EAAE,EAAE;QACnB,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;;KAcP,CAAC,CAAC;QAEH,EAAE,CAAC,IAAI,CAAC,+DAA+D,CAAC,CAAC;QACzE,EAAE,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC;IACtE,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { McpConnector, ConnectorStatus } from '../../common/types/connector.js';
|
|
2
|
+
export declare function getAllConnectors(): McpConnector[];
|
|
3
|
+
export declare function getEnabledConnectors(): McpConnector[];
|
|
4
|
+
export declare function getConnectorById(id: string): McpConnector | null;
|
|
5
|
+
export declare function upsertConnector(connector: McpConnector): void;
|
|
6
|
+
export declare function setConnectorEnabled(id: string, enabled: boolean): void;
|
|
7
|
+
export declare function setConnectorStatus(id: string, status: ConnectorStatus): void;
|
|
8
|
+
export declare function deleteConnector(id: string): void;
|
|
9
|
+
export declare function clearAllConnectors(): void;
|
|
10
|
+
//# sourceMappingURL=connectors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connectors.d.ts","sourceRoot":"","sources":["../../../src/storage/repositories/connectors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,eAAe,EAGhB,MAAM,iCAAiC,CAAC;AAyCzC,wBAAgB,gBAAgB,IAAI,YAAY,EAAE,CAIjD;AAED,wBAAgB,oBAAoB,IAAI,YAAY,EAAE,CAMrD;AAED,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAIhE;AAED,wBAAgB,eAAe,CAAC,SAAS,EAAE,YAAY,GAAG,IAAI,CA0B7D;AAED,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAItE;AAED,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,IAAI,CAI5E;AAED,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAGhD;AAED,wBAAgB,kBAAkB,IAAI,IAAI,CAGzC"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { getDatabase } from '../database.js';
|
|
2
|
+
function safeJsonParse(json) {
|
|
3
|
+
if (!json)
|
|
4
|
+
return undefined;
|
|
5
|
+
try {
|
|
6
|
+
return JSON.parse(json);
|
|
7
|
+
}
|
|
8
|
+
catch {
|
|
9
|
+
console.error('Failed to parse JSON from database:', json.slice(0, 100));
|
|
10
|
+
return undefined;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
function rowToConnector(row) {
|
|
14
|
+
return {
|
|
15
|
+
id: row.id,
|
|
16
|
+
name: row.name,
|
|
17
|
+
url: row.url,
|
|
18
|
+
status: row.status,
|
|
19
|
+
isEnabled: row.is_enabled === 1,
|
|
20
|
+
oauthMetadata: safeJsonParse(row.oauth_metadata_json),
|
|
21
|
+
clientRegistration: safeJsonParse(row.client_registration_json),
|
|
22
|
+
lastConnectedAt: row.last_connected_at || undefined,
|
|
23
|
+
createdAt: row.created_at,
|
|
24
|
+
updatedAt: row.updated_at,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
export function getAllConnectors() {
|
|
28
|
+
const db = getDatabase();
|
|
29
|
+
const rows = db.prepare('SELECT * FROM connectors ORDER BY created_at DESC').all();
|
|
30
|
+
return rows.map(rowToConnector);
|
|
31
|
+
}
|
|
32
|
+
export function getEnabledConnectors() {
|
|
33
|
+
const db = getDatabase();
|
|
34
|
+
const rows = db
|
|
35
|
+
.prepare('SELECT * FROM connectors WHERE is_enabled = 1 ORDER BY created_at DESC')
|
|
36
|
+
.all();
|
|
37
|
+
return rows.map(rowToConnector);
|
|
38
|
+
}
|
|
39
|
+
export function getConnectorById(id) {
|
|
40
|
+
const db = getDatabase();
|
|
41
|
+
const row = db.prepare('SELECT * FROM connectors WHERE id = ?').get(id);
|
|
42
|
+
return row ? rowToConnector(row) : null;
|
|
43
|
+
}
|
|
44
|
+
export function upsertConnector(connector) {
|
|
45
|
+
const db = getDatabase();
|
|
46
|
+
db.prepare(`
|
|
47
|
+
INSERT INTO connectors (id, name, url, status, is_enabled, oauth_metadata_json, client_registration_json, last_connected_at, created_at, updated_at)
|
|
48
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
49
|
+
ON CONFLICT(id) DO UPDATE SET
|
|
50
|
+
name = excluded.name,
|
|
51
|
+
url = excluded.url,
|
|
52
|
+
status = excluded.status,
|
|
53
|
+
is_enabled = excluded.is_enabled,
|
|
54
|
+
oauth_metadata_json = excluded.oauth_metadata_json,
|
|
55
|
+
client_registration_json = excluded.client_registration_json,
|
|
56
|
+
last_connected_at = excluded.last_connected_at,
|
|
57
|
+
updated_at = excluded.updated_at
|
|
58
|
+
`).run(connector.id, connector.name, connector.url, connector.status, connector.isEnabled ? 1 : 0, connector.oauthMetadata ? JSON.stringify(connector.oauthMetadata) : null, connector.clientRegistration ? JSON.stringify(connector.clientRegistration) : null, connector.lastConnectedAt || null, connector.createdAt, connector.updatedAt);
|
|
59
|
+
}
|
|
60
|
+
export function setConnectorEnabled(id, enabled) {
|
|
61
|
+
const db = getDatabase();
|
|
62
|
+
db.prepare('UPDATE connectors SET is_enabled = ?, updated_at = ? WHERE id = ?')
|
|
63
|
+
.run(enabled ? 1 : 0, new Date().toISOString(), id);
|
|
64
|
+
}
|
|
65
|
+
export function setConnectorStatus(id, status) {
|
|
66
|
+
const db = getDatabase();
|
|
67
|
+
db.prepare('UPDATE connectors SET status = ?, updated_at = ? WHERE id = ?')
|
|
68
|
+
.run(status, new Date().toISOString(), id);
|
|
69
|
+
}
|
|
70
|
+
export function deleteConnector(id) {
|
|
71
|
+
const db = getDatabase();
|
|
72
|
+
db.prepare('DELETE FROM connectors WHERE id = ?').run(id);
|
|
73
|
+
}
|
|
74
|
+
export function clearAllConnectors() {
|
|
75
|
+
const db = getDatabase();
|
|
76
|
+
db.prepare('DELETE FROM connectors').run();
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=connectors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connectors.js","sourceRoot":"","sources":["../../../src/storage/repositories/connectors.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,4 +2,5 @@ export { getDebugMode, setDebugMode, getOnboardingComplete, setOnboardingComplet
|
|
|
2
2
|
export { getProviderSettings, setActiveProvider, getActiveProviderId, getConnectedProvider, setConnectedProvider, removeConnectedProvider, updateProviderModel, setProviderDebugMode, getProviderDebugMode, clearProviderSettings, getActiveProviderModel, hasReadyProvider, getConnectedProviderIds, } from './providerSettings.js';
|
|
3
3
|
export { getTasks, getTask, saveTask, updateTaskStatus, addTaskMessage, updateTaskSessionId, updateTaskSummary, deleteTask, clearHistory, setMaxHistoryItems, clearTaskHistoryStore, flushPendingTasks, getTodosForTask, saveTodosForTask, clearTodosForTask, type StoredTask, } from './taskHistory.js';
|
|
4
4
|
export { getAllSkills, getEnabledSkills, getSkillById, upsertSkill, setSkillEnabled, deleteSkill, clearAllSkills, } from './skills.js';
|
|
5
|
+
export { getAllConnectors, getEnabledConnectors, getConnectorById, upsertConnector, setConnectorEnabled, setConnectorStatus, deleteConnector, clearAllConnectors, } from './connectors.js';
|
|
5
6
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/storage/repositories/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,qBAAqB,EACrB,qBAAqB,EACrB,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,qBAAqB,EACrB,qBAAqB,EACrB,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,KAAK,WAAW,GACjB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EACjB,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,uBAAuB,EACvB,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,EACrB,sBAAsB,EACtB,gBAAgB,EAChB,uBAAuB,GACxB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,QAAQ,EACR,OAAO,EACP,QAAQ,EACR,gBAAgB,EAChB,cAAc,EACd,mBAAmB,EACnB,iBAAiB,EACjB,UAAU,EACV,YAAY,EACZ,kBAAkB,EAClB,qBAAqB,EACrB,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,KAAK,UAAU,GAChB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,eAAe,EACf,WAAW,EACX,cAAc,GACf,MAAM,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/storage/repositories/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,qBAAqB,EACrB,qBAAqB,EACrB,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,qBAAqB,EACrB,qBAAqB,EACrB,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,KAAK,WAAW,GACjB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EACjB,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,uBAAuB,EACvB,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,EACrB,sBAAsB,EACtB,gBAAgB,EAChB,uBAAuB,GACxB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,QAAQ,EACR,OAAO,EACP,QAAQ,EACR,gBAAgB,EAChB,cAAc,EACd,mBAAmB,EACnB,iBAAiB,EACjB,UAAU,EACV,YAAY,EACZ,kBAAkB,EAClB,qBAAqB,EACrB,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,KAAK,UAAU,GAChB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,eAAe,EACf,WAAW,EACX,cAAc,GACf,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,gBAAgB,EAChB,eAAe,EACf,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,EACf,kBAAkB,GACnB,MAAM,iBAAiB,CAAC"}
|
|
@@ -2,4 +2,5 @@ export { getDebugMode, setDebugMode, getOnboardingComplete, setOnboardingComplet
|
|
|
2
2
|
export { getProviderSettings, setActiveProvider, getActiveProviderId, getConnectedProvider, setConnectedProvider, removeConnectedProvider, updateProviderModel, setProviderDebugMode, getProviderDebugMode, clearProviderSettings, getActiveProviderModel, hasReadyProvider, getConnectedProviderIds, } from './providerSettings.js';
|
|
3
3
|
export { getTasks, getTask, saveTask, updateTaskStatus, addTaskMessage, updateTaskSessionId, updateTaskSummary, deleteTask, clearHistory, setMaxHistoryItems, clearTaskHistoryStore, flushPendingTasks, getTodosForTask, saveTodosForTask, clearTodosForTask, } from './taskHistory.js';
|
|
4
4
|
export { getAllSkills, getEnabledSkills, getSkillById, upsertSkill, setSkillEnabled, deleteSkill, clearAllSkills, } from './skills.js';
|
|
5
|
+
export { getAllConnectors, getEnabledConnectors, getConnectorById, upsertConnector, setConnectorEnabled, setConnectorStatus, deleteConnector, clearAllConnectors, } from './connectors.js';
|
|
5
6
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/storage/repositories/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,qBAAqB,EACrB,qBAAqB,EACrB,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,qBAAqB,EACrB,qBAAqB,EACrB,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,gBAAgB,GAEjB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EACjB,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,uBAAuB,EACvB,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,EACrB,sBAAsB,EACtB,gBAAgB,EAChB,uBAAuB,GACxB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,QAAQ,EACR,OAAO,EACP,QAAQ,EACR,gBAAgB,EAChB,cAAc,EACd,mBAAmB,EACnB,iBAAiB,EACjB,UAAU,EACV,YAAY,EACZ,kBAAkB,EAClB,qBAAqB,EACrB,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EAChB,iBAAiB,GAElB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,eAAe,EACf,WAAW,EACX,cAAc,GACf,MAAM,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/storage/repositories/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,qBAAqB,EACrB,qBAAqB,EACrB,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,qBAAqB,EACrB,qBAAqB,EACrB,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,gBAAgB,GAEjB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EACjB,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,uBAAuB,EACvB,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,EACrB,sBAAsB,EACtB,gBAAgB,EAChB,uBAAuB,GACxB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,QAAQ,EACR,OAAO,EACP,QAAQ,EACR,gBAAgB,EAChB,cAAc,EACd,mBAAmB,EACnB,iBAAiB,EACjB,UAAU,EACV,YAAY,EACZ,kBAAkB,EAClB,qBAAqB,EACrB,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EAChB,iBAAiB,GAElB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,eAAe,EACf,WAAW,EACX,cAAc,GACf,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,gBAAgB,EAChB,eAAe,EACf,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,EACf,kBAAkB,GACnB,MAAM,iBAAiB,CAAC"}
|
package/dist/types/storage.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import type { Task, TaskStatus, TaskMessage } from '../common/types/task.js';
|
|
|
2
2
|
import type { TodoItem } from '../common/types/todo.js';
|
|
3
3
|
import type { SelectedModel, OllamaConfig, LiteLLMConfig, AzureFoundryConfig, LMStudioConfig } from '../common/types/provider.js';
|
|
4
4
|
import type { ProviderId, ProviderSettings, ConnectedProvider } from '../common/types/providerSettings.js';
|
|
5
|
+
import type { McpConnector, ConnectorStatus, OAuthTokens } from '../common/types/connector.js';
|
|
5
6
|
/** Options for creating a Storage instance */
|
|
6
7
|
export interface StorageOptions {
|
|
7
8
|
/** Path to the SQLite database file */
|
|
@@ -161,6 +162,31 @@ export interface SecureStorageAPI {
|
|
|
161
162
|
/** Delete all stored credentials */
|
|
162
163
|
clearSecureStorage(): void;
|
|
163
164
|
}
|
|
165
|
+
/** API for MCP connector management and OAuth token storage */
|
|
166
|
+
export interface ConnectorStorageAPI {
|
|
167
|
+
/** Get all connectors */
|
|
168
|
+
getAllConnectors(): McpConnector[];
|
|
169
|
+
/** Get only enabled connectors */
|
|
170
|
+
getEnabledConnectors(): McpConnector[];
|
|
171
|
+
/** Get a connector by ID */
|
|
172
|
+
getConnectorById(id: string): McpConnector | null;
|
|
173
|
+
/** Create or update a connector */
|
|
174
|
+
upsertConnector(connector: McpConnector): void;
|
|
175
|
+
/** Enable or disable a connector */
|
|
176
|
+
setConnectorEnabled(id: string, enabled: boolean): void;
|
|
177
|
+
/** Update a connector's status */
|
|
178
|
+
setConnectorStatus(id: string, status: ConnectorStatus): void;
|
|
179
|
+
/** Delete a connector */
|
|
180
|
+
deleteConnector(id: string): void;
|
|
181
|
+
/** Delete all connectors */
|
|
182
|
+
clearAllConnectors(): void;
|
|
183
|
+
/** Store OAuth tokens for a connector (encrypted) */
|
|
184
|
+
storeConnectorTokens(connectorId: string, tokens: OAuthTokens): void;
|
|
185
|
+
/** Retrieve OAuth tokens for a connector */
|
|
186
|
+
getConnectorTokens(connectorId: string): OAuthTokens | null;
|
|
187
|
+
/** Delete OAuth tokens for a connector */
|
|
188
|
+
deleteConnectorTokens(connectorId: string): void;
|
|
189
|
+
}
|
|
164
190
|
/** API for database initialization and lifecycle management */
|
|
165
191
|
export interface DatabaseLifecycleAPI {
|
|
166
192
|
/** Initialize the database, creating it if needed and running migrations */
|
|
@@ -172,8 +198,8 @@ export interface DatabaseLifecycleAPI {
|
|
|
172
198
|
/** Get the path to the current database file */
|
|
173
199
|
getDatabasePath(): string | null;
|
|
174
200
|
}
|
|
175
|
-
/** Unified storage API combining task, settings, provider, secure storage, and database lifecycle operations */
|
|
176
|
-
export interface StorageAPI extends TaskStorageAPI, AppSettingsAPI, ProviderSettingsAPI, SecureStorageAPI, DatabaseLifecycleAPI {
|
|
201
|
+
/** Unified storage API combining task, settings, provider, secure storage, connector, and database lifecycle operations */
|
|
202
|
+
export interface StorageAPI extends TaskStorageAPI, AppSettingsAPI, ProviderSettingsAPI, SecureStorageAPI, ConnectorStorageAPI, DatabaseLifecycleAPI {
|
|
177
203
|
}
|
|
178
|
-
export type { Task, TaskStatus, TaskMessage, TodoItem, SelectedModel, OllamaConfig, LiteLLMConfig, AzureFoundryConfig, LMStudioConfig, ProviderId, ProviderSettings, ConnectedProvider, };
|
|
204
|
+
export type { Task, TaskStatus, TaskMessage, TodoItem, SelectedModel, OllamaConfig, LiteLLMConfig, AzureFoundryConfig, LMStudioConfig, ProviderId, ProviderSettings, ConnectedProvider, McpConnector, ConnectorStatus, OAuthTokens, };
|
|
179
205
|
//# sourceMappingURL=storage.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/types/storage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC7E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EACZ,aAAa,EACb,kBAAkB,EAClB,cAAc,EACf,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EACV,UAAU,EACV,gBAAgB,EAChB,iBAAiB,EAClB,MAAM,qCAAqC,CAAC;
|
|
1
|
+
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/types/storage.ts"],"names":[],"mappings":"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"}
|
|
@@ -21020,14 +21020,23 @@ async function connectBuiltin() {
|
|
|
21020
21020
|
}
|
|
21021
21021
|
const info = await res.json();
|
|
21022
21022
|
cachedServerMode = info.mode || "normal";
|
|
21023
|
-
|
|
21023
|
+
const b = await chromium.connectOverCDP(info.wsEndpoint);
|
|
21024
|
+
try {
|
|
21025
|
+
const cdpSession = await b.newBrowserCDPSession();
|
|
21026
|
+
await cdpSession.send("Browser.setDownloadBehavior", { behavior: "default" });
|
|
21027
|
+
await cdpSession.detach();
|
|
21028
|
+
} catch (err) {
|
|
21029
|
+
console.error("[dev-browser-mcp] Failed to reset download behavior:", err);
|
|
21030
|
+
}
|
|
21031
|
+
return b;
|
|
21024
21032
|
}
|
|
21033
|
+
var DEFAULT_VIEWPORT = { width: 1280, height: 720 };
|
|
21025
21034
|
async function getPageBuiltin(pageName) {
|
|
21026
21035
|
const fullName = getFullPageName(pageName);
|
|
21027
21036
|
const res = await fetchWithRetry(`${config2.devBrowserUrl}/pages`, {
|
|
21028
21037
|
method: "POST",
|
|
21029
21038
|
headers: { "Content-Type": "application/json" },
|
|
21030
|
-
body: JSON.stringify({ name: fullName })
|
|
21039
|
+
body: JSON.stringify({ name: fullName, viewport: DEFAULT_VIEWPORT })
|
|
21031
21040
|
});
|
|
21032
21041
|
if (!res.ok) {
|
|
21033
21042
|
throw new Error(`Failed to get page: ${await res.text()}`);
|
|
@@ -21184,6 +21193,34 @@ function toAIFriendlyError(error2, selector) {
|
|
|
21184
21193
|
`${message}. Try taking a new browser_snapshot() to see the current page state before retrying.`
|
|
21185
21194
|
);
|
|
21186
21195
|
}
|
|
21196
|
+
var CANVAS_APPS = [
|
|
21197
|
+
{ pattern: /docs\.google\.com/, name: "Google Docs" },
|
|
21198
|
+
{ pattern: /sheets\.google\.com/, name: "Google Sheets" },
|
|
21199
|
+
{ pattern: /slides\.google\.com/, name: "Google Slides" },
|
|
21200
|
+
{ pattern: /figma\.com/, name: "Figma" },
|
|
21201
|
+
{ pattern: /canva\.com/, name: "Canva" },
|
|
21202
|
+
{ pattern: /miro\.com/, name: "Miro" }
|
|
21203
|
+
];
|
|
21204
|
+
function isCanvasApp(url2) {
|
|
21205
|
+
const match = CANVAS_APPS.find((app) => app.pattern.test(url2));
|
|
21206
|
+
return match ? match.name : null;
|
|
21207
|
+
}
|
|
21208
|
+
async function getElementCoordinates(element) {
|
|
21209
|
+
try {
|
|
21210
|
+
const box = await element.boundingBox();
|
|
21211
|
+
if (!box) return null;
|
|
21212
|
+
return {
|
|
21213
|
+
x: Math.round(box.x),
|
|
21214
|
+
y: Math.round(box.y),
|
|
21215
|
+
width: Math.round(box.width),
|
|
21216
|
+
height: Math.round(box.height),
|
|
21217
|
+
centerX: Math.round(box.x + box.width / 2),
|
|
21218
|
+
centerY: Math.round(box.y + box.height / 2)
|
|
21219
|
+
};
|
|
21220
|
+
} catch {
|
|
21221
|
+
return null;
|
|
21222
|
+
}
|
|
21223
|
+
}
|
|
21187
21224
|
var activePageOverride = null;
|
|
21188
21225
|
var glowingPage = null;
|
|
21189
21226
|
var pagesWithGlowListeners = /* @__PURE__ */ new WeakSet();
|
|
@@ -22135,7 +22172,56 @@ var SNAPSHOT_SCRIPT = `
|
|
|
22135
22172
|
const lines = [];
|
|
22136
22173
|
let nodesToRender = ariaSnapshot.root.role === "fragment" ? ariaSnapshot.root.children : [ariaSnapshot.root];
|
|
22137
22174
|
|
|
22138
|
-
const
|
|
22175
|
+
const USELESS_ROLES = ['generic', 'none', 'presentation'];
|
|
22176
|
+
const pruneTree = (node) => {
|
|
22177
|
+
if (typeof node === 'string') return node;
|
|
22178
|
+
if (node.children && node.children.length > 0) {
|
|
22179
|
+
node.children = node.children.map(child => pruneTree(child)).filter(child => child !== null);
|
|
22180
|
+
}
|
|
22181
|
+
const isUselessRole = USELESS_ROLES.includes(node.role);
|
|
22182
|
+
const hasNoLabel = !node.name;
|
|
22183
|
+
const childCount = node.children ? node.children.length : 0;
|
|
22184
|
+
if (isUselessRole && hasNoLabel && childCount === 1) return node.children[0];
|
|
22185
|
+
if (isUselessRole && hasNoLabel && childCount === 0) return null;
|
|
22186
|
+
return node;
|
|
22187
|
+
};
|
|
22188
|
+
if (!snapshotOptions.rawTree) {
|
|
22189
|
+
nodesToRender = nodesToRender.map(n => pruneTree(n)).filter(n => n !== null);
|
|
22190
|
+
}
|
|
22191
|
+
|
|
22192
|
+
if (snapshotOptions.interactiveOnly) {
|
|
22193
|
+
const collectTextFromDescendants = (node, maxDepth) => {
|
|
22194
|
+
if (maxDepth === undefined) maxDepth = 10;
|
|
22195
|
+
if (maxDepth <= 0) return '';
|
|
22196
|
+
if (typeof node === 'string') return node.trim();
|
|
22197
|
+
const texts = [];
|
|
22198
|
+
if (node.name && node.name.trim()) {
|
|
22199
|
+
texts.push(node.name.trim());
|
|
22200
|
+
} else if (node.children) {
|
|
22201
|
+
for (let i = 0; i < node.children.length; i++) {
|
|
22202
|
+
const childText = collectTextFromDescendants(node.children[i], maxDepth - 1);
|
|
22203
|
+
if (childText) texts.push(childText);
|
|
22204
|
+
}
|
|
22205
|
+
}
|
|
22206
|
+
return texts.join(' ').replace(/\\s+/g, ' ').trim().slice(0, 100);
|
|
22207
|
+
};
|
|
22208
|
+
const promoteTextToInteractive = (node) => {
|
|
22209
|
+
if (typeof node === 'string') return;
|
|
22210
|
+
if (INTERACTIVE_ROLES.includes(node.role) && !node.name) {
|
|
22211
|
+
const promotedText = collectTextFromDescendants(node);
|
|
22212
|
+
if (promotedText) node.name = promotedText;
|
|
22213
|
+
}
|
|
22214
|
+
if (node.children) {
|
|
22215
|
+
for (let i = 0; i < node.children.length; i++) promoteTextToInteractive(node.children[i]);
|
|
22216
|
+
}
|
|
22217
|
+
};
|
|
22218
|
+
nodesToRender.forEach(n => promoteTextToInteractive(n));
|
|
22219
|
+
}
|
|
22220
|
+
|
|
22221
|
+
const prunedRoot = ariaSnapshot.root.role === "fragment"
|
|
22222
|
+
? { ...ariaSnapshot.root, children: nodesToRender }
|
|
22223
|
+
: (nodesToRender[0] || ariaSnapshot.root);
|
|
22224
|
+
const scoredElements = collectScoredElements(prunedRoot, snapshotOptions);
|
|
22139
22225
|
|
|
22140
22226
|
const truncateResult = truncateWithBudget(scoredElements, maxElements, maxTokens);
|
|
22141
22227
|
|
|
@@ -22180,6 +22266,10 @@ var SNAPSHOT_SCRIPT = `
|
|
|
22180
22266
|
key += " [ref=" + ariaNode.ref + "]";
|
|
22181
22267
|
if (renderCursorPointer && hasPointerCursor(ariaNode)) key += " [cursor=pointer]";
|
|
22182
22268
|
}
|
|
22269
|
+
if (snapshotOptions.includeBoundingBoxes !== false && ariaNode.box?.rect) {
|
|
22270
|
+
const r = ariaNode.box.rect;
|
|
22271
|
+
key += " [" + Math.round(r.x) + ", " + Math.round(r.y) + ", " + Math.round(r.width) + ", " + Math.round(r.height) + "]";
|
|
22272
|
+
}
|
|
22183
22273
|
return key;
|
|
22184
22274
|
};
|
|
22185
22275
|
|
|
@@ -23140,18 +23230,20 @@ The page has loaded. Use browser_snapshot() to see the page elements and find in
|
|
|
23140
23230
|
maxTokens: validatedMaxTokens
|
|
23141
23231
|
};
|
|
23142
23232
|
const rawSnapshot = await getAISnapshot(page2, snapshotOptions);
|
|
23143
|
-
|
|
23233
|
+
let viewport = page2.viewportSize();
|
|
23234
|
+
if (!viewport || viewport.width === 0 && viewport.height === 0) {
|
|
23235
|
+
try {
|
|
23236
|
+
const windowSize = await page2.evaluate(() => ({
|
|
23237
|
+
width: window.innerWidth,
|
|
23238
|
+
height: window.innerHeight
|
|
23239
|
+
}));
|
|
23240
|
+
viewport = windowSize;
|
|
23241
|
+
} catch {
|
|
23242
|
+
}
|
|
23243
|
+
}
|
|
23144
23244
|
const url2 = page2.url();
|
|
23145
23245
|
const title = await page2.title();
|
|
23146
|
-
const
|
|
23147
|
-
{ pattern: /docs\.google\.com/, name: "Google Docs" },
|
|
23148
|
-
{ pattern: /sheets\.google\.com/, name: "Google Sheets" },
|
|
23149
|
-
{ pattern: /slides\.google\.com/, name: "Google Slides" },
|
|
23150
|
-
{ pattern: /figma\.com/, name: "Figma" },
|
|
23151
|
-
{ pattern: /canva\.com/, name: "Canva" },
|
|
23152
|
-
{ pattern: /miro\.com/, name: "Miro" }
|
|
23153
|
-
];
|
|
23154
|
-
const detectedApp = canvasApps.find((app) => app.pattern.test(url2));
|
|
23246
|
+
const detectedCanvasApp = isCanvasApp(url2);
|
|
23155
23247
|
const manager = getSnapshotManager();
|
|
23156
23248
|
const result = manager.processSnapshot(rawSnapshot, url2, title, {
|
|
23157
23249
|
fullSnapshot: full_snapshot,
|
|
@@ -23180,15 +23272,11 @@ The page has loaded. Use browser_snapshot() to see the page elements and find in
|
|
|
23180
23272
|
output += `Mode: Interactive elements only (buttons, links, inputs)
|
|
23181
23273
|
`;
|
|
23182
23274
|
}
|
|
23183
|
-
if (
|
|
23275
|
+
if (detectedCanvasApp) {
|
|
23184
23276
|
output += `
|
|
23185
|
-
\u26A0\uFE0F CANVAS APP DETECTED: ${
|
|
23186
|
-
`;
|
|
23187
|
-
output += `This app uses canvas rendering. Element refs may not work for the main content area.
|
|
23188
|
-
`;
|
|
23189
|
-
output += `Use: browser_click(position="center-lower") then browser_keyboard(action="type", text="...")
|
|
23277
|
+
\u26A0\uFE0F CANVAS APP DETECTED: ${detectedCanvasApp}
|
|
23190
23278
|
`;
|
|
23191
|
-
output += `
|
|
23279
|
+
output += `This app uses canvas rendering. Ref-based clicks auto-fallback to coordinate clicks.
|
|
23192
23280
|
`;
|
|
23193
23281
|
}
|
|
23194
23282
|
if (result.type === "diff") {
|
|
@@ -23242,9 +23330,32 @@ ${result.content}`;
|
|
|
23242
23330
|
isError: true
|
|
23243
23331
|
};
|
|
23244
23332
|
}
|
|
23245
|
-
|
|
23246
|
-
|
|
23247
|
-
|
|
23333
|
+
const canvasApp = isCanvasApp(page2.url());
|
|
23334
|
+
if (canvasApp) {
|
|
23335
|
+
const coords = await getElementCoordinates(element);
|
|
23336
|
+
if (!coords) {
|
|
23337
|
+
return {
|
|
23338
|
+
content: [{ type: "text", text: `Element [ref=${ref}] has no bounding box on ${canvasApp} canvas app. Try browser_click with explicit x/y coordinates or position="center".` }],
|
|
23339
|
+
isError: true
|
|
23340
|
+
};
|
|
23341
|
+
}
|
|
23342
|
+
await page2.mouse.click(coords.centerX, coords.centerY, clickOptions);
|
|
23343
|
+
await waitForPageLoad(page2);
|
|
23344
|
+
return { content: [{ type: "text", text: `Clicked element [ref=${ref}] at (${coords.centerX}, ${coords.centerY}) [box: ${coords.x}, ${coords.y}, ${coords.width}, ${coords.height}]${clickDesc} (canvas app: ${canvasApp})` }] };
|
|
23345
|
+
}
|
|
23346
|
+
try {
|
|
23347
|
+
await element.click(clickOptions);
|
|
23348
|
+
await waitForPageLoad(page2);
|
|
23349
|
+
return { content: [{ type: "text", text: `Clicked element [ref=${ref}]${clickDesc}` }] };
|
|
23350
|
+
} catch (clickErr) {
|
|
23351
|
+
const coords = await getElementCoordinates(element);
|
|
23352
|
+
if (coords) {
|
|
23353
|
+
await page2.mouse.click(coords.centerX, coords.centerY, clickOptions);
|
|
23354
|
+
await waitForPageLoad(page2);
|
|
23355
|
+
return { content: [{ type: "text", text: `Clicked element [ref=${ref}] [box: ${coords.x}, ${coords.y}, ${coords.width}, ${coords.height}]${clickDesc} (coordinate fallback \u2014 DOM click failed)` }] };
|
|
23356
|
+
}
|
|
23357
|
+
throw clickErr;
|
|
23358
|
+
}
|
|
23248
23359
|
} else if (selector) {
|
|
23249
23360
|
await page2.click(selector, clickOptions);
|
|
23250
23361
|
await waitForPageLoad(page2);
|
|
@@ -23291,17 +23402,52 @@ ${result.content}`;
|
|
|
23291
23402
|
isError: true
|
|
23292
23403
|
};
|
|
23293
23404
|
}
|
|
23294
|
-
await element.click();
|
|
23295
|
-
await element.fill(text);
|
|
23296
|
-
if (press_enter) {
|
|
23297
|
-
await element.press("Enter");
|
|
23298
|
-
await waitForPageLoad(page2);
|
|
23299
|
-
}
|
|
23300
23405
|
const target = ref ? `[ref=${ref}]` : `"${selector}"`;
|
|
23301
23406
|
const enterNote = press_enter ? " and pressed Enter" : "";
|
|
23302
|
-
|
|
23303
|
-
|
|
23304
|
-
|
|
23407
|
+
const canvasApp = isCanvasApp(page2.url());
|
|
23408
|
+
if (canvasApp) {
|
|
23409
|
+
const coords = await getElementCoordinates(element);
|
|
23410
|
+
if (!coords) {
|
|
23411
|
+
return {
|
|
23412
|
+
content: [{ type: "text", text: `Element ${target} has no bounding box on ${canvasApp} canvas app. Try browser_click(position="center-lower") then browser_keyboard(action="type", text="...").` }],
|
|
23413
|
+
isError: true
|
|
23414
|
+
};
|
|
23415
|
+
}
|
|
23416
|
+
await page2.mouse.click(coords.centerX, coords.centerY);
|
|
23417
|
+
await page2.keyboard.type(text);
|
|
23418
|
+
if (press_enter) {
|
|
23419
|
+
await page2.keyboard.press("Enter");
|
|
23420
|
+
await waitForPageLoad(page2);
|
|
23421
|
+
}
|
|
23422
|
+
return {
|
|
23423
|
+
content: [{ type: "text", text: `Typed "${text}" into ${target} [box: ${coords.x}, ${coords.y}, ${coords.width}, ${coords.height}]${enterNote} (canvas app: ${canvasApp})` }]
|
|
23424
|
+
};
|
|
23425
|
+
}
|
|
23426
|
+
try {
|
|
23427
|
+
await element.click();
|
|
23428
|
+
await element.fill(text);
|
|
23429
|
+
if (press_enter) {
|
|
23430
|
+
await element.press("Enter");
|
|
23431
|
+
await waitForPageLoad(page2);
|
|
23432
|
+
}
|
|
23433
|
+
return {
|
|
23434
|
+
content: [{ type: "text", text: `Typed "${text}" into ${target}${enterNote}` }]
|
|
23435
|
+
};
|
|
23436
|
+
} catch (fillErr) {
|
|
23437
|
+
const coords = await getElementCoordinates(element);
|
|
23438
|
+
if (coords) {
|
|
23439
|
+
await page2.mouse.click(coords.centerX, coords.centerY);
|
|
23440
|
+
await page2.keyboard.type(text);
|
|
23441
|
+
if (press_enter) {
|
|
23442
|
+
await page2.keyboard.press("Enter");
|
|
23443
|
+
await waitForPageLoad(page2);
|
|
23444
|
+
}
|
|
23445
|
+
return {
|
|
23446
|
+
content: [{ type: "text", text: `Typed "${text}" into ${target} [box: ${coords.x}, ${coords.y}, ${coords.width}, ${coords.height}]${enterNote} (coordinate fallback \u2014 DOM fill failed)` }]
|
|
23447
|
+
};
|
|
23448
|
+
}
|
|
23449
|
+
throw fillErr;
|
|
23450
|
+
}
|
|
23305
23451
|
} catch (err) {
|
|
23306
23452
|
const targetDesc = ref ? `[ref=${ref}]` : selector || "element";
|
|
23307
23453
|
const friendlyError = toAIFriendlyError(err, targetDesc);
|
|
@@ -23758,10 +23904,29 @@ ${snapshotResult}` });
|
|
|
23758
23904
|
isError: true
|
|
23759
23905
|
};
|
|
23760
23906
|
}
|
|
23761
|
-
|
|
23762
|
-
|
|
23763
|
-
|
|
23764
|
-
|
|
23907
|
+
const hoverCanvasApp = isCanvasApp(page2.url());
|
|
23908
|
+
if (hoverCanvasApp) {
|
|
23909
|
+
const coords = await getElementCoordinates(element);
|
|
23910
|
+
if (coords) {
|
|
23911
|
+
await page2.mouse.move(coords.centerX, coords.centerY);
|
|
23912
|
+
return { content: [{ type: "text", text: `Hovered over [ref=${ref}] at (${coords.centerX}, ${coords.centerY}) [box: ${coords.x}, ${coords.y}, ${coords.width}, ${coords.height}] (coordinate hover \u2014 ${hoverCanvasApp} canvas app)` }] };
|
|
23913
|
+
}
|
|
23914
|
+
return {
|
|
23915
|
+
content: [{ type: "text", text: `Element [ref=${ref}] has no bounding box \u2014 cannot coordinate-hover on ${hoverCanvasApp} canvas app. Try browser_hover with explicit x/y coordinates.` }],
|
|
23916
|
+
isError: true
|
|
23917
|
+
};
|
|
23918
|
+
}
|
|
23919
|
+
try {
|
|
23920
|
+
await element.hover();
|
|
23921
|
+
return { content: [{ type: "text", text: `Hovered over [ref=${ref}]` }] };
|
|
23922
|
+
} catch (hoverErr) {
|
|
23923
|
+
const coords = await getElementCoordinates(element);
|
|
23924
|
+
if (coords) {
|
|
23925
|
+
await page2.mouse.move(coords.centerX, coords.centerY);
|
|
23926
|
+
return { content: [{ type: "text", text: `Hovered over [ref=${ref}] at (${coords.centerX}, ${coords.centerY}) [box: ${coords.x}, ${coords.y}, ${coords.width}, ${coords.height}] (coordinate fallback \u2014 DOM hover failed)` }] };
|
|
23927
|
+
}
|
|
23928
|
+
throw hoverErr;
|
|
23929
|
+
}
|
|
23765
23930
|
}
|
|
23766
23931
|
if (selector) {
|
|
23767
23932
|
await page2.hover(selector);
|