@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.
Files changed (86) hide show
  1. package/dist/common/constants/model-display.d.ts.map +1 -1
  2. package/dist/common/constants/model-display.js +1 -0
  3. package/dist/common/constants/model-display.js.map +1 -1
  4. package/dist/common/index.d.ts +2 -2
  5. package/dist/common/index.d.ts.map +1 -1
  6. package/dist/common/index.js.map +1 -1
  7. package/dist/common/types/auth.d.ts +13 -1
  8. package/dist/common/types/auth.d.ts.map +1 -1
  9. package/dist/common/types/connector.d.ts +32 -0
  10. package/dist/common/types/connector.d.ts.map +1 -0
  11. package/dist/common/types/connector.js +2 -0
  12. package/dist/common/types/connector.js.map +1 -0
  13. package/dist/common/types/index.d.ts +3 -2
  14. package/dist/common/types/index.d.ts.map +1 -1
  15. package/dist/common/types/index.js.map +1 -1
  16. package/dist/common/types/provider.d.ts +3 -2
  17. package/dist/common/types/provider.d.ts.map +1 -1
  18. package/dist/common/types/provider.js +7 -0
  19. package/dist/common/types/provider.js.map +1 -1
  20. package/dist/common/types/providerSettings.d.ts +10 -3
  21. package/dist/common/types/providerSettings.d.ts.map +1 -1
  22. package/dist/common/types/providerSettings.js +2 -0
  23. package/dist/common/types/providerSettings.js.map +1 -1
  24. package/dist/common.d.ts +3 -2
  25. package/dist/common.d.ts.map +1 -1
  26. package/dist/common.js.map +1 -1
  27. package/dist/connectors/mcp-oauth.d.ts +53 -0
  28. package/dist/connectors/mcp-oauth.d.ts.map +1 -0
  29. package/dist/connectors/mcp-oauth.js +176 -0
  30. package/dist/connectors/mcp-oauth.js.map +1 -0
  31. package/dist/factories/storage.d.ts.map +1 -1
  32. package/dist/factories/storage.js +24 -0
  33. package/dist/factories/storage.js.map +1 -1
  34. package/dist/index.d.ts +5 -2
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +3 -0
  37. package/dist/index.js.map +1 -1
  38. package/dist/opencode/config-builder.d.ts.map +1 -1
  39. package/dist/opencode/config-builder.js +41 -4
  40. package/dist/opencode/config-builder.js.map +1 -1
  41. package/dist/opencode/config-generator.d.ts +8 -0
  42. package/dist/opencode/config-generator.d.ts.map +1 -1
  43. package/dist/opencode/config-generator.js +33 -0
  44. package/dist/opencode/config-generator.js.map +1 -1
  45. package/dist/opencode/environment.d.ts +5 -1
  46. package/dist/opencode/environment.d.ts.map +1 -1
  47. package/dist/opencode/environment.js +14 -0
  48. package/dist/opencode/environment.js.map +1 -1
  49. package/dist/providers/ollama.d.ts.map +1 -1
  50. package/dist/providers/ollama.js +8 -8
  51. package/dist/providers/ollama.js.map +1 -1
  52. package/dist/providers/tool-support-testing.d.ts +2 -1
  53. package/dist/providers/tool-support-testing.d.ts.map +1 -1
  54. package/dist/providers/tool-support-testing.js +29 -6
  55. package/dist/providers/tool-support-testing.js.map +1 -1
  56. package/dist/providers/validation.d.ts.map +1 -1
  57. package/dist/providers/validation.js +1 -0
  58. package/dist/providers/validation.js.map +1 -1
  59. package/dist/providers/vertex.d.ts +38 -0
  60. package/dist/providers/vertex.d.ts.map +1 -0
  61. package/dist/providers/vertex.js +209 -0
  62. package/dist/providers/vertex.js.map +1 -0
  63. package/dist/storage/index.d.ts +1 -0
  64. package/dist/storage/index.d.ts.map +1 -1
  65. package/dist/storage/index.js +1 -0
  66. package/dist/storage/index.js.map +1 -1
  67. package/dist/storage/migrations/index.d.ts +1 -1
  68. package/dist/storage/migrations/index.d.ts.map +1 -1
  69. package/dist/storage/migrations/index.js +3 -1
  70. package/dist/storage/migrations/index.js.map +1 -1
  71. package/dist/storage/migrations/v007-connectors.d.ts +3 -0
  72. package/dist/storage/migrations/v007-connectors.d.ts.map +1 -0
  73. package/dist/storage/migrations/v007-connectors.js +23 -0
  74. package/dist/storage/migrations/v007-connectors.js.map +1 -0
  75. package/dist/storage/repositories/connectors.d.ts +10 -0
  76. package/dist/storage/repositories/connectors.d.ts.map +1 -0
  77. package/dist/storage/repositories/connectors.js +78 -0
  78. package/dist/storage/repositories/connectors.js.map +1 -0
  79. package/dist/storage/repositories/index.d.ts +1 -0
  80. package/dist/storage/repositories/index.d.ts.map +1 -1
  81. package/dist/storage/repositories/index.js +1 -0
  82. package/dist/storage/repositories/index.js.map +1 -1
  83. package/dist/types/storage.d.ts +29 -3
  84. package/dist/types/storage.d.ts.map +1 -1
  85. package/mcp-tools/dev-browser-mcp/dist/index.mjs +201 -36
  86. 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 = 6;
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":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/storage/migrations/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Migration } from './index.js';
2
+ export declare const migration: Migration;
3
+ //# sourceMappingURL=v007-connectors.d.ts.map
@@ -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"}
@@ -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":"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"}
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
- return chromium.connectOverCDP(info.wsEndpoint);
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 scoredElements = collectScoredElements(ariaSnapshot.root, snapshotOptions);
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
- const viewport = page2.viewportSize();
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 canvasApps = [
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 (detectedApp) {
23275
+ if (detectedCanvasApp) {
23184
23276
  output += `
23185
- \u26A0\uFE0F CANVAS APP DETECTED: ${detectedApp.name}
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 += `(center-lower avoids UI overlays like Google Docs AI suggestions)
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
- await element.click(clickOptions);
23246
- await waitForPageLoad(page2);
23247
- return { content: [{ type: "text", text: `Clicked element [ref=${ref}]${clickDesc}` }] };
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
- return {
23303
- content: [{ type: "text", text: `Typed "${text}" into ${target}${enterNote}` }]
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
- await element.hover();
23762
- return {
23763
- content: [{ type: "text", text: `Hovered over [ref=${ref}]` }]
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);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@accomplish_ai/agent-core",
3
- "version": "0.3.1",
3
+ "version": "0.3.2",
4
4
  "description": "Core logic for Accomplish - OpenCode adapter, storage, providers, MCP tools, and skills",
5
5
  "type": "module",
6
6
  "license": "MIT",