@hehanlin/open-agent-bridge 0.6.3

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 (65) hide show
  1. package/README.md +36 -0
  2. package/dist/adapters/acpAdapter.d.ts +45 -0
  3. package/dist/adapters/acpAdapter.js +171 -0
  4. package/dist/adapters/acpAdapter.js.map +1 -0
  5. package/dist/adapters/adapter.d.ts +50 -0
  6. package/dist/adapters/adapter.js +2 -0
  7. package/dist/adapters/adapter.js.map +1 -0
  8. package/dist/adapters/registry.d.ts +7 -0
  9. package/dist/adapters/registry.js +34 -0
  10. package/dist/adapters/registry.js.map +1 -0
  11. package/dist/agent/agentManager.d.ts +45 -0
  12. package/dist/agent/agentManager.js +110 -0
  13. package/dist/agent/agentManager.js.map +1 -0
  14. package/dist/cli.d.ts +13 -0
  15. package/dist/cli.js +178 -0
  16. package/dist/cli.js.map +1 -0
  17. package/dist/config.d.ts +15 -0
  18. package/dist/config.js +39 -0
  19. package/dist/config.js.map +1 -0
  20. package/dist/detect/acpProbe.d.ts +5 -0
  21. package/dist/detect/acpProbe.js +61 -0
  22. package/dist/detect/acpProbe.js.map +1 -0
  23. package/dist/detect/frameworkDetector.d.ts +30 -0
  24. package/dist/detect/frameworkDetector.js +88 -0
  25. package/dist/detect/frameworkDetector.js.map +1 -0
  26. package/dist/frontier/frontierClient.d.ts +37 -0
  27. package/dist/frontier/frontierClient.js +103 -0
  28. package/dist/frontier/frontierClient.js.map +1 -0
  29. package/dist/frontier/frontierKey.d.ts +19 -0
  30. package/dist/frontier/frontierKey.js +45 -0
  31. package/dist/frontier/frontierKey.js.map +1 -0
  32. package/dist/frontier/health.d.ts +18 -0
  33. package/dist/frontier/health.js +29 -0
  34. package/dist/frontier/health.js.map +1 -0
  35. package/dist/frontier/watchdog.d.ts +23 -0
  36. package/dist/frontier/watchdog.js +47 -0
  37. package/dist/frontier/watchdog.js.map +1 -0
  38. package/dist/fsx/localFs.d.ts +15 -0
  39. package/dist/fsx/localFs.js +29 -0
  40. package/dist/fsx/localFs.js.map +1 -0
  41. package/dist/fsx/safePath.d.ts +1 -0
  42. package/dist/fsx/safePath.js +44 -0
  43. package/dist/fsx/safePath.js.map +1 -0
  44. package/dist/hub/asyncQueue.d.ts +6 -0
  45. package/dist/hub/asyncQueue.js +30 -0
  46. package/dist/hub/asyncQueue.js.map +1 -0
  47. package/dist/hub/hub.d.ts +55 -0
  48. package/dist/hub/hub.js +328 -0
  49. package/dist/hub/hub.js.map +1 -0
  50. package/dist/install/autostart.d.ts +20 -0
  51. package/dist/install/autostart.js +76 -0
  52. package/dist/install/autostart.js.map +1 -0
  53. package/dist/mock/mockRun.d.ts +9 -0
  54. package/dist/mock/mockRun.js +94 -0
  55. package/dist/mock/mockRun.js.map +1 -0
  56. package/dist/store/seq.d.ts +12 -0
  57. package/dist/store/seq.js +55 -0
  58. package/dist/store/seq.js.map +1 -0
  59. package/dist/store/store.d.ts +26 -0
  60. package/dist/store/store.js +88 -0
  61. package/dist/store/store.js.map +1 -0
  62. package/dist/types.d.ts +36 -0
  63. package/dist/types.js +9 -0
  64. package/dist/types.js.map +1 -0
  65. package/package.json +32 -0
@@ -0,0 +1,26 @@
1
+ import type { Framework } from '../types.js';
2
+ export interface AgentConfig {
3
+ agentId: string;
4
+ framework: Framework;
5
+ name: string;
6
+ workspace: string;
7
+ acpSessions: Record<string, string>;
8
+ disconnectedAt?: number;
9
+ cozeIdentity?: string;
10
+ }
11
+ export declare class Store {
12
+ private readonly oaHome;
13
+ constructor(oaHome: string);
14
+ saveDeviceToken(token: string): Promise<void>;
15
+ loadDeviceToken(): Promise<string | null>;
16
+ ensureAgentDir(agentId: string): Promise<{
17
+ workspace: string;
18
+ logs: string;
19
+ }>;
20
+ writeAgentConfig(agentId: string, cfg: AgentConfig): Promise<void>;
21
+ readAgentConfig(agentId: string): Promise<AgentConfig | null>;
22
+ listAgents(): Promise<AgentConfig[]>;
23
+ private deviceTokenPath;
24
+ private agentRoot;
25
+ private configPath;
26
+ }
@@ -0,0 +1,88 @@
1
+ import { mkdir, readFile, readdir, rename, writeFile, chmod } from 'node:fs/promises';
2
+ import { join } from 'node:path';
3
+ export class Store {
4
+ oaHome;
5
+ constructor(oaHome) {
6
+ this.oaHome = oaHome;
7
+ }
8
+ async saveDeviceToken(token) {
9
+ await mkdir(this.oaHome, { recursive: true, mode: 0o700 });
10
+ await atomicWrite0600(this.deviceTokenPath(), token);
11
+ }
12
+ async loadDeviceToken() {
13
+ try {
14
+ return await readFile(this.deviceTokenPath(), 'utf8');
15
+ }
16
+ catch (error) {
17
+ if (isNotFound(error)) {
18
+ return null;
19
+ }
20
+ throw error;
21
+ }
22
+ }
23
+ async ensureAgentDir(agentId) {
24
+ const root = this.agentRoot(agentId);
25
+ const workspace = join(root, 'workspace');
26
+ const logs = join(root, 'logs');
27
+ await mkdir(workspace, { recursive: true, mode: 0o700 });
28
+ await mkdir(logs, { recursive: true, mode: 0o700 });
29
+ return { workspace, logs };
30
+ }
31
+ async writeAgentConfig(agentId, cfg) {
32
+ await this.ensureAgentDir(agentId);
33
+ await atomicWrite0600(this.configPath(agentId), `${JSON.stringify(cfg, null, 2)}\n`);
34
+ }
35
+ async readAgentConfig(agentId) {
36
+ try {
37
+ const raw = await readFile(this.configPath(agentId), 'utf8');
38
+ return JSON.parse(raw);
39
+ }
40
+ catch (error) {
41
+ if (isNotFound(error)) {
42
+ return null;
43
+ }
44
+ throw error;
45
+ }
46
+ }
47
+ async listAgents() {
48
+ const agentsDir = join(this.oaHome, 'agents');
49
+ let entries;
50
+ try {
51
+ entries = await readdir(agentsDir);
52
+ }
53
+ catch (error) {
54
+ if (isNotFound(error)) {
55
+ return [];
56
+ }
57
+ throw error;
58
+ }
59
+ const configs = [];
60
+ for (const entry of entries.sort()) {
61
+ const cfg = await this.readAgentConfig(entry);
62
+ if (cfg) {
63
+ configs.push(cfg);
64
+ }
65
+ }
66
+ return configs;
67
+ }
68
+ deviceTokenPath() {
69
+ return join(this.oaHome, 'device_token');
70
+ }
71
+ agentRoot(agentId) {
72
+ return join(this.oaHome, 'agents', agentId);
73
+ }
74
+ configPath(agentId) {
75
+ return join(this.agentRoot(agentId), 'config.json');
76
+ }
77
+ }
78
+ async function atomicWrite0600(path, content) {
79
+ const tmp = `${path}.tmp-${process.pid}-${Date.now()}`;
80
+ await writeFile(tmp, content, { mode: 0o600 });
81
+ await chmod(tmp, 0o600);
82
+ await rename(tmp, path);
83
+ await chmod(path, 0o600);
84
+ }
85
+ function isNotFound(error) {
86
+ return typeof error === 'object' && error !== null && 'code' in error && error.code === 'ENOENT';
87
+ }
88
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/store/store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAQ,SAAS,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC5F,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAajC,MAAM,OAAO,KAAK;IACa;IAA7B,YAA6B,MAAc;QAAd,WAAM,GAAN,MAAM,CAAQ;IAAG,CAAC;IAE/C,KAAK,CAAC,eAAe,CAAC,KAAa;QACjC,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAC3D,MAAM,eAAe,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,KAAK,CAAC,CAAC;IACvD,CAAC;IAED,KAAK,CAAC,eAAe;QACnB,IAAI,CAAC;YACH,OAAO,MAAM,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,MAAM,CAAC,CAAC;QACxD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;gBACtB,OAAO,IAAI,CAAC;YACd,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,OAAe;QAClC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACrC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAChC,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACzD,MAAM,KAAK,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACpD,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,OAAe,EAAE,GAAgB;QACtD,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QACnC,MAAM,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IACvF,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,OAAe;QACnC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,CAAC;YAC7D,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAgB,CAAC;QACxC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;gBACtB,OAAO,IAAI,CAAC;YACd,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,UAAU;QACd,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC9C,IAAI,OAAiB,CAAC;QACtB,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,CAAC;QACrC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;gBACtB,OAAO,EAAE,CAAC;YACZ,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;QAED,MAAM,OAAO,GAAkB,EAAE,CAAC;QAClC,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;YACnC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;YAC9C,IAAI,GAAG,EAAE,CAAC;gBACR,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACpB,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,eAAe;QACrB,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAC3C,CAAC;IAEO,SAAS,CAAC,OAAe;QAC/B,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;IAEO,UAAU,CAAC,OAAe;QAChC,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,aAAa,CAAC,CAAC;IACtD,CAAC;CACF;AAED,KAAK,UAAU,eAAe,CAAC,IAAY,EAAE,OAAe;IAC1D,MAAM,GAAG,GAAG,GAAG,IAAI,QAAQ,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;IACvD,MAAM,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC/C,MAAM,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACxB,MAAM,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACxB,MAAM,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAC3B,CAAC;AAED,SAAS,UAAU,CAAC,KAAc;IAChC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC;AACnG,CAAC"}
@@ -0,0 +1,36 @@
1
+ export type Framework = 'claude-code' | 'codex' | 'openclaw' | 'hermes';
2
+ export interface JsonRpcRequest {
3
+ jsonrpc: '2.0';
4
+ id?: string | number;
5
+ method: string;
6
+ params?: Record<string, unknown>;
7
+ }
8
+ export interface JsonRpcResponse {
9
+ jsonrpc: '2.0';
10
+ id: string | number;
11
+ result?: unknown;
12
+ error?: {
13
+ code: number;
14
+ message: string;
15
+ data?: unknown;
16
+ };
17
+ }
18
+ export interface DownMeta {
19
+ agentId: string;
20
+ cloudSessionId?: string;
21
+ triggerMsgId?: string;
22
+ groupId?: string;
23
+ turn?: number;
24
+ }
25
+ export interface UpMeta {
26
+ agentId: string;
27
+ cloud_session_id: string;
28
+ turn: number;
29
+ seq: number;
30
+ messageId?: string;
31
+ }
32
+ export type OaErrorCode = 'E_AGENT_NOT_FOUND' | 'E_AGENT_DISCONNECTED' | 'E_FRAMEWORK_UNSUPPORTED' | 'E_FS_PATH_ESCAPE' | 'MODEL_MODALITY_UNSUPPORTED' | 'E_APPROVAL_TIMEOUT' | 'E_SESSION_BUSY' | 'E_SPAWN_BACKOFF' | 'E_FRAME_TOO_LARGE';
33
+ export declare class OaError extends Error {
34
+ code: OaErrorCode;
35
+ constructor(code: OaErrorCode, message?: string);
36
+ }
package/dist/types.js ADDED
@@ -0,0 +1,9 @@
1
+ export class OaError extends Error {
2
+ code;
3
+ constructor(code, message) {
4
+ super(message ?? code);
5
+ this.code = code;
6
+ this.name = 'OaError';
7
+ }
8
+ }
9
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AA2CA,MAAM,OAAO,OAAQ,SAAQ,KAAK;IAEvB;IADT,YACS,IAAiB,EACxB,OAAgB;QAEhB,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC;QAHhB,SAAI,GAAJ,IAAI,CAAa;QAIxB,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC;IACxB,CAAC;CACF"}
package/package.json ADDED
@@ -0,0 +1,32 @@
1
+ {
2
+ "name": "@hehanlin/open-agent-bridge",
3
+ "version": "0.6.3",
4
+ "type": "module",
5
+ "bin": {
6
+ "open-agent-bridge": "dist/cli.js"
7
+ },
8
+ "engines": {
9
+ "node": ">=18"
10
+ },
11
+ "scripts": {
12
+ "build": "tsc",
13
+ "test": "vitest run",
14
+ "prepack": "npm run build"
15
+ },
16
+ "files": [
17
+ "dist"
18
+ ],
19
+ "dependencies": {
20
+ "@agentclientprotocol/claude-agent-acp": "^0.44.0",
21
+ "@byted/frontier-web-sdk": "^1.25.13",
22
+ "@zed-industries/agent-client-protocol": "^0.4.5",
23
+ "@zed-industries/codex-acp": "^0.16.0",
24
+ "ws": "^8.18.3"
25
+ },
26
+ "devDependencies": {
27
+ "@types/node": "^24.0.0",
28
+ "@types/ws": "^8.18.1",
29
+ "typescript": "^5.8.0",
30
+ "vitest": "^3.2.0"
31
+ }
32
+ }