@winmatrix/agent-sdk 1.0.3 → 1.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. package/dist/adapters/claude/ClaudeAdapter.d.ts +60 -1
  2. package/dist/adapters/claude/ClaudeAdapter.d.ts.map +1 -1
  3. package/dist/adapters/claude/ClaudeAdapter.js +404 -84
  4. package/dist/adapters/claude/ClaudeAdapter.js.map +1 -1
  5. package/dist/adapters/claude/ClaudeInvocationUsageTracker.d.ts +17 -0
  6. package/dist/adapters/claude/ClaudeInvocationUsageTracker.d.ts.map +1 -0
  7. package/dist/adapters/claude/ClaudeInvocationUsageTracker.js +79 -0
  8. package/dist/adapters/claude/ClaudeInvocationUsageTracker.js.map +1 -0
  9. package/dist/adapters/claude/ClaudeStreamParser.d.ts +19 -0
  10. package/dist/adapters/claude/ClaudeStreamParser.d.ts.map +1 -1
  11. package/dist/adapters/claude/ClaudeStreamParser.js +92 -0
  12. package/dist/adapters/claude/ClaudeStreamParser.js.map +1 -1
  13. package/dist/adapters/claude/claudeCommand.js +1 -1
  14. package/dist/adapters/claude/claudeCommand.js.map +1 -1
  15. package/dist/adapters/codex/CodexAdapter.d.ts +20 -0
  16. package/dist/adapters/codex/CodexAdapter.d.ts.map +1 -0
  17. package/dist/adapters/codex/CodexAdapter.js +313 -0
  18. package/dist/adapters/codex/CodexAdapter.js.map +1 -0
  19. package/dist/adapters/hermes/HermesAdapter.d.ts +10 -1
  20. package/dist/adapters/hermes/HermesAdapter.d.ts.map +1 -1
  21. package/dist/adapters/hermes/HermesAdapter.js +225 -21
  22. package/dist/adapters/hermes/HermesAdapter.js.map +1 -1
  23. package/dist/adapters/hermes/HermesInvocationUsageReader.d.ts +26 -0
  24. package/dist/adapters/hermes/HermesInvocationUsageReader.d.ts.map +1 -0
  25. package/dist/adapters/hermes/HermesInvocationUsageReader.js +128 -0
  26. package/dist/adapters/hermes/HermesInvocationUsageReader.js.map +1 -0
  27. package/dist/adapters/openclaw/OpenClawAdapter.d.ts +12 -37
  28. package/dist/adapters/openclaw/OpenClawAdapter.d.ts.map +1 -1
  29. package/dist/adapters/openclaw/OpenClawAdapter.js +191 -635
  30. package/dist/adapters/openclaw/OpenClawAdapter.js.map +1 -1
  31. package/dist/core/AgentAdapter.d.ts +75 -1
  32. package/dist/core/AgentAdapter.d.ts.map +1 -1
  33. package/dist/core/AgentAdapter.js +25 -0
  34. package/dist/core/AgentAdapter.js.map +1 -1
  35. package/dist/core/RuntimeDetector.d.ts.map +1 -1
  36. package/dist/core/RuntimeDetector.js +52 -19
  37. package/dist/core/RuntimeDetector.js.map +1 -1
  38. package/dist/core/WinMatrixAgentClient.d.ts +30 -4
  39. package/dist/core/WinMatrixAgentClient.d.ts.map +1 -1
  40. package/dist/core/WinMatrixAgentClient.js +122 -12
  41. package/dist/core/WinMatrixAgentClient.js.map +1 -1
  42. package/dist/index.d.ts +15 -20
  43. package/dist/index.d.ts.map +1 -1
  44. package/dist/index.js +8 -19
  45. package/dist/index.js.map +1 -1
  46. package/dist/observability/WorkstationTokenUsageRecorder.d.ts +54 -0
  47. package/dist/observability/WorkstationTokenUsageRecorder.d.ts.map +1 -0
  48. package/dist/observability/WorkstationTokenUsageRecorder.js +264 -0
  49. package/dist/observability/WorkstationTokenUsageRecorder.js.map +1 -0
  50. package/dist/utils/envSanitizer.d.ts +38 -0
  51. package/dist/utils/envSanitizer.d.ts.map +1 -0
  52. package/dist/utils/envSanitizer.js +94 -0
  53. package/dist/utils/envSanitizer.js.map +1 -0
  54. package/dist/utils/errorClassification.d.ts +26 -0
  55. package/dist/utils/errorClassification.d.ts.map +1 -0
  56. package/dist/utils/errorClassification.js +52 -0
  57. package/dist/utils/errorClassification.js.map +1 -0
  58. package/dist/utils/processUtils.d.ts +10 -0
  59. package/dist/utils/processUtils.d.ts.map +1 -1
  60. package/dist/utils/processUtils.js +42 -9
  61. package/dist/utils/processUtils.js.map +1 -1
  62. package/dist/utils/resumeFallback.d.ts +4 -0
  63. package/dist/utils/resumeFallback.d.ts.map +1 -0
  64. package/dist/utils/resumeFallback.js +65 -0
  65. package/dist/utils/resumeFallback.js.map +1 -0
  66. package/package.json +8 -4
  67. package/dist/adapters/openclaw/unwrapOpenClawPayloads.d.ts +0 -6
  68. package/dist/adapters/openclaw/unwrapOpenClawPayloads.d.ts.map +0 -1
  69. package/dist/adapters/openclaw/unwrapOpenClawPayloads.js +0 -24
  70. package/dist/adapters/openclaw/unwrapOpenClawPayloads.js.map +0 -1
  71. package/dist/runtime/DualRuntimeBridge.d.ts +0 -38
  72. package/dist/runtime/DualRuntimeBridge.d.ts.map +0 -1
  73. package/dist/runtime/DualRuntimeBridge.js +0 -321
  74. package/dist/runtime/DualRuntimeBridge.js.map +0 -1
  75. package/dist/runtime/bridgeConfigLoader.d.ts +0 -14
  76. package/dist/runtime/bridgeConfigLoader.d.ts.map +0 -1
  77. package/dist/runtime/bridgeConfigLoader.js +0 -133
  78. package/dist/runtime/bridgeConfigLoader.js.map +0 -1
  79. package/dist/runtime/bridgeConfigTypes.d.ts +0 -26
  80. package/dist/runtime/bridgeConfigTypes.d.ts.map +0 -1
  81. package/dist/runtime/bridgeConfigTypes.js +0 -6
  82. package/dist/runtime/bridgeConfigTypes.js.map +0 -1
  83. package/dist/runtime/bridgeHome.d.ts +0 -19
  84. package/dist/runtime/bridgeHome.d.ts.map +0 -1
  85. package/dist/runtime/bridgeHome.js +0 -61
  86. package/dist/runtime/bridgeHome.js.map +0 -1
  87. package/dist/runtime/bridgeReconnectPolicy.d.ts +0 -8
  88. package/dist/runtime/bridgeReconnectPolicy.d.ts.map +0 -1
  89. package/dist/runtime/bridgeReconnectPolicy.js +0 -16
  90. package/dist/runtime/bridgeReconnectPolicy.js.map +0 -1
  91. package/dist/runtime/bridgeTaskJournal.d.ts +0 -7
  92. package/dist/runtime/bridgeTaskJournal.d.ts.map +0 -1
  93. package/dist/runtime/bridgeTaskJournal.js +0 -66
  94. package/dist/runtime/bridgeTaskJournal.js.map +0 -1
  95. package/dist/runtime/localRuntimeAvailabilityMonitor.d.ts +0 -22
  96. package/dist/runtime/localRuntimeAvailabilityMonitor.d.ts.map +0 -1
  97. package/dist/runtime/localRuntimeAvailabilityMonitor.js +0 -81
  98. package/dist/runtime/localRuntimeAvailabilityMonitor.js.map +0 -1
  99. package/dist/runtime/runDualRuntimeBridge.d.ts +0 -2
  100. package/dist/runtime/runDualRuntimeBridge.d.ts.map +0 -1
  101. package/dist/runtime/runDualRuntimeBridge.js +0 -32
  102. package/dist/runtime/runDualRuntimeBridge.js.map +0 -1
@@ -0,0 +1,65 @@
1
+ const RESUME_SESSION_ERROR_PATTERNS = [
2
+ /session .*not found/i,
3
+ /session .*not exist/i,
4
+ /session .*does not exist/i,
5
+ /session .*expired/i,
6
+ /session .*invalid/i,
7
+ /invalid .*session/i,
8
+ /unknown .*session/i,
9
+ /missing .*session/i,
10
+ /resume .*not found/i,
11
+ /resume .*expired/i,
12
+ /resume .*invalid/i,
13
+ /thread .*not found/i,
14
+ /thread .*not exist/i,
15
+ /thread .*does not exist/i,
16
+ /thread .*expired/i,
17
+ /thread .*invalid/i,
18
+ /no conversation/i,
19
+ /conversation .*not found/i,
20
+ ];
21
+ export function isLikelyResumeSessionError(message) {
22
+ return RESUME_SESSION_ERROR_PATTERNS.some((pattern) => pattern.test(message));
23
+ }
24
+ /**
25
+ * 是否按"会话失效"处理(harden-external-computer-daemon P2.2/D6):
26
+ * 优先采信 adapter 显式给出的错误码;regex 仅作为未分类时的兜底。
27
+ */
28
+ function isResumeSessionError(event) {
29
+ if (event.code) {
30
+ return event.code === 'session_expired';
31
+ }
32
+ return isLikelyResumeSessionError(event.message);
33
+ }
34
+ export async function* executeWithResumeFallback(task, signal, executeOnce) {
35
+ if (!(task.resumeSession && task.sessionId)) {
36
+ yield* executeOnce(task, signal);
37
+ return;
38
+ }
39
+ const bufferedEvents = [];
40
+ for await (const event of executeOnce(task, signal)) {
41
+ if (event.type === 'error') {
42
+ if (isResumeSessionError(event)) {
43
+ yield* executeOnce({ ...task, sessionId: undefined, resumeSession: false }, signal);
44
+ return;
45
+ }
46
+ yield* bufferedEvents;
47
+ yield event;
48
+ return;
49
+ }
50
+ if (event.type === 'result') {
51
+ // resume 返回空 content → session 可能过期/无效(claude CLI --resume 无效 session 返回空 result 不报错)
52
+ const isEmptyResumeResult = !(event.content || '').trim();
53
+ if (isEmptyResumeResult || isLikelyResumeSessionError(event.content)) {
54
+ yield* executeOnce({ ...task, sessionId: undefined, resumeSession: false }, signal);
55
+ return;
56
+ }
57
+ yield* bufferedEvents;
58
+ yield event;
59
+ return;
60
+ }
61
+ bufferedEvents.push(event);
62
+ }
63
+ yield* bufferedEvents;
64
+ }
65
+ //# sourceMappingURL=resumeFallback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resumeFallback.js","sourceRoot":"","sources":["../../src/utils/resumeFallback.ts"],"names":[],"mappings":"AAEA,MAAM,6BAA6B,GAAG;IACpC,sBAAsB;IACtB,sBAAsB;IACtB,2BAA2B;IAC3B,oBAAoB;IACpB,oBAAoB;IACpB,oBAAoB;IACpB,oBAAoB;IACpB,oBAAoB;IACpB,qBAAqB;IACrB,mBAAmB;IACnB,mBAAmB;IACnB,qBAAqB;IACrB,qBAAqB;IACrB,0BAA0B;IAC1B,mBAAmB;IACnB,mBAAmB;IACnB,kBAAkB;IAClB,2BAA2B;CAC5B,CAAC;AAEF,MAAM,UAAU,0BAA0B,CAAC,OAAe;IACxD,OAAO,6BAA6B,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AAChF,CAAC;AAED;;;GAGG;AACH,SAAS,oBAAoB,CAAC,KAAyC;IACrE,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;QACf,OAAO,KAAK,CAAC,IAAI,KAAK,iBAAiB,CAAC;IAC1C,CAAC;IACD,OAAO,0BAA0B,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,yBAAyB,CAC9C,IAAsB,EACtB,MAA+B,EAC/B,WAA2F;IAE3F,IAAI,CAAC,CAAC,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QAC5C,KAAK,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACjC,OAAO;IACT,CAAC;IAED,MAAM,cAAc,GAAmB,EAAE,CAAC;IAC1C,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC;QACpD,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC3B,IAAI,oBAAoB,CAAC,KAAK,CAAC,EAAE,CAAC;gBAChC,KAAK,CAAC,CAAC,WAAW,CAAC,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,KAAK,EAAE,EAAE,MAAM,CAAC,CAAC;gBACpF,OAAO;YACT,CAAC;YACD,KAAK,CAAC,CAAC,cAAc,CAAC;YACtB,MAAM,KAAK,CAAC;YACZ,OAAO;QACT,CAAC;QAED,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC5B,sFAAsF;YACtF,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YAC1D,IAAI,mBAAmB,IAAI,0BAA0B,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;gBACrE,KAAK,CAAC,CAAC,WAAW,CAAC,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,KAAK,EAAE,EAAE,MAAM,CAAC,CAAC;gBACpF,OAAO;YACT,CAAC;YACD,KAAK,CAAC,CAAC,cAAc,CAAC;YACtB,MAAM,KAAK,CAAC;YACZ,OAAO;QACT,CAAC;QAED,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,CAAC,cAAc,CAAC;AACxB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@winmatrix/agent-sdk",
3
- "version": "1.0.3",
3
+ "version": "1.0.5",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -30,6 +30,11 @@
30
30
  "import": "./dist/adapters/hermes/HermesAdapter.js",
31
31
  "default": "./dist/adapters/hermes/HermesAdapter.js"
32
32
  },
33
+ "./adapters/codex": {
34
+ "types": "./dist/adapters/codex/CodexAdapter.d.ts",
35
+ "import": "./dist/adapters/codex/CodexAdapter.js",
36
+ "default": "./dist/adapters/codex/CodexAdapter.js"
37
+ },
33
38
  "./adapters/openclaw": {
34
39
  "types": "./dist/adapters/openclaw/OpenClawAdapter.d.ts",
35
40
  "import": "./dist/adapters/openclaw/OpenClawAdapter.js",
@@ -54,8 +59,8 @@
54
59
  "node": ">=18"
55
60
  },
56
61
  "dependencies": {
57
- "@winmatrix/protocol": "^1.0.3",
58
- "ws": "^8.16.0"
62
+ "@winmatrix/protocol": "^1.0.4",
63
+ "@anthropic-ai/claude-agent-sdk": "^0.3.0"
59
64
  },
60
65
  "peerDependencies": {
61
66
  "zod": ">=3.0.0"
@@ -67,7 +72,6 @@
67
72
  },
68
73
  "devDependencies": {
69
74
  "@types/node": "^22.15.0",
70
- "@types/ws": "^8.5.10",
71
75
  "typescript": "^5.4.0",
72
76
  "vitest": "^4.0.18"
73
77
  }
@@ -1,6 +0,0 @@
1
- /**
2
- * OpenClaw `--json` returns `{ payloads: [{ text: "..." }], meta: {...} }`.
3
- * Extract joined text; for Hermes or non-envelope JSON, returns the original string unchanged.
4
- */
5
- export declare function unwrapOpenClawPayloads(text: string): string;
6
- //# sourceMappingURL=unwrapOpenClawPayloads.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"unwrapOpenClawPayloads.d.ts","sourceRoot":"","sources":["../../../src/adapters/openclaw/unwrapOpenClawPayloads.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAkB3D"}
@@ -1,24 +0,0 @@
1
- /**
2
- * OpenClaw `--json` returns `{ payloads: [{ text: "..." }], meta: {...} }`.
3
- * Extract joined text; for Hermes or non-envelope JSON, returns the original string unchanged.
4
- */
5
- export function unwrapOpenClawPayloads(text) {
6
- try {
7
- const parsed = JSON.parse(text);
8
- if (typeof parsed === 'object' && parsed !== null
9
- && 'payloads' in parsed
10
- && Array.isArray(parsed.payloads)) {
11
- const payloads = parsed.payloads;
12
- if (payloads.length > 0) {
13
- const texts = payloads.map((p) => p.text ?? '').filter(Boolean);
14
- if (texts.length > 0)
15
- return texts.join('\n');
16
- }
17
- }
18
- }
19
- catch {
20
- // Not JSON — return raw text (hermes -Q output, etc.)
21
- }
22
- return text;
23
- }
24
- //# sourceMappingURL=unwrapOpenClawPayloads.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"unwrapOpenClawPayloads.js","sourceRoot":"","sources":["../../../src/adapters/openclaw/unwrapOpenClawPayloads.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CAAC,IAAY;IACjD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAY,CAAC;QAC3C,IACE,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI;eAC1C,UAAU,IAAI,MAAM;eACpB,KAAK,CAAC,OAAO,CAAE,MAAiC,CAAC,QAAQ,CAAC,EAC7D,CAAC;YACD,MAAM,QAAQ,GAAI,MAAkD,CAAC,QAAS,CAAC;YAC/E,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxB,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBAChE,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;oBAAE,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAChD,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,sDAAsD;IACxD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -1,38 +0,0 @@
1
- /**
2
- * Dual runtime bridge for WinMatrix Agent SDK.
3
- *
4
- * Connects local Hermes/OpenClaw runtimes to WinMatrix using a shared
5
- * WebSocket endpoint, while each runtime keeps its own registration identity.
6
- */
7
- type RuntimeKind = 'hermes' | 'openclaw';
8
- export type RuntimeConfig = {
9
- kind: RuntimeKind;
10
- endpoint?: string;
11
- endpointToken?: string;
12
- command?: string;
13
- commandTimeoutMs?: number;
14
- maxConcurrentTasks: number;
15
- agentId: string;
16
- apiKey: string;
17
- agentName: string;
18
- agentType: string;
19
- /** WinMatrix MCP Bridge URL(统一传递给所有适酝器类型) */
20
- mcpBridgeUrl?: string;
21
- /** MCP Bridge 认话 token */
22
- mcpApiKey?: string;
23
- };
24
- export type BridgeConfig = {
25
- wsUrl: string;
26
- runtimes: RuntimeConfig[];
27
- };
28
- export type BridgeHandle = {
29
- stop: () => void;
30
- states: () => Array<{
31
- runtime: RuntimeKind;
32
- state: string;
33
- }>;
34
- };
35
- export declare function validateBridgeRuntimeList(runtimes: RuntimeConfig[]): void;
36
- export declare function startDualRuntimeBridge(config: BridgeConfig): Promise<BridgeHandle>;
37
- export {};
38
- //# sourceMappingURL=DualRuntimeBridge.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DualRuntimeBridge.d.ts","sourceRoot":"","sources":["../../src/runtime/DualRuntimeBridge.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAiBH,KAAK,WAAW,GAAG,QAAQ,GAAG,UAAU,CAAC;AAsEzC,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,WAAW,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,6CAA6C;IAC7C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0BAA0B;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,aAAa,EAAE,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,MAAM,EAAE,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,WAAW,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC9D,CAAC;AA0DF,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,IAAI,CAazE;AAED,wBAAsB,sBAAsB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAiOxF"}
@@ -1,321 +0,0 @@
1
- /**
2
- * Dual runtime bridge for WinMatrix Agent SDK.
3
- *
4
- * Connects local Hermes/OpenClaw runtimes to WinMatrix using a shared
5
- * WebSocket endpoint, while each runtime keeps its own registration identity.
6
- */
7
- import { HermesAdapter } from '../adapters/hermes/HermesAdapter.js';
8
- import { OpenClawAdapter } from '../adapters/openclaw/OpenClawAdapter.js';
9
- import { unwrapOpenClawPayloads } from '../adapters/openclaw/unwrapOpenClawPayloads.js';
10
- import { WinMatrixAgentClient } from '../core/WinMatrixAgentClient.js';
11
- import { exec } from 'node:child_process';
12
- import { promisify } from 'node:util';
13
- import { ensureBridgeHomeLayout, getBridgeHomeDir, logPendingTasksRecoveryHint } from './bridgeHome.js';
14
- import { recordTaskFinished, recordTaskStarted } from './bridgeTaskJournal.js';
15
- import { isNonRecoverableExternalAgentAuthError, nextReconnectDelayMs, } from './bridgeReconnectPolicy.js';
16
- import { startLocalRuntimeAvailabilityMonitor } from './localRuntimeAvailabilityMonitor.js';
17
- function clearBridgeReconnectTimer(m) {
18
- if (m.reconnectTimer) {
19
- clearTimeout(m.reconnectTimer);
20
- m.reconnectTimer = null;
21
- }
22
- }
23
- /**
24
- * Blocking until TCP + register succeeds, or a non-recoverable auth error propagates out.
25
- */
26
- async function waitUntilBridgeRegistered(m) {
27
- let delayMs = 1000;
28
- for (;;) {
29
- try {
30
- await m.client.connect();
31
- return;
32
- }
33
- catch (err) {
34
- if (isNonRecoverableExternalAgentAuthError(err)) {
35
- throw err;
36
- }
37
- const msg = err instanceof Error ? err.message : String(err);
38
- console.warn(`[bridge:${m.runtime}] connect failed (${msg}), retry in ${delayMs}ms (recoverable transport/server)`);
39
- await new Promise((resolve) => setTimeout(resolve, delayMs));
40
- delayMs = nextReconnectDelayMs(delayMs);
41
- }
42
- }
43
- }
44
- function scheduleManagedBridgeReconnect(m) {
45
- if (m.stopped)
46
- return;
47
- if (m.reconnectTimer)
48
- return;
49
- const delay = m.reconnectDelayMs;
50
- m.reconnectDelayMs = nextReconnectDelayMs(m.reconnectDelayMs);
51
- m.reconnectTimer = setTimeout(() => {
52
- m.reconnectTimer = null;
53
- void (async () => {
54
- try {
55
- await m.client.connect();
56
- m.reconnectDelayMs = 1000;
57
- console.log(`[bridge:${m.runtime}] reconnected`);
58
- }
59
- catch (err) {
60
- if (isNonRecoverableExternalAgentAuthError(err)) {
61
- console.error(`[bridge:${m.runtime}] reconnect stopped: credentials/registration rejected by server (${err instanceof Error ? err.message : String(err)})`);
62
- return;
63
- }
64
- const msg = err instanceof Error ? err.message : String(err);
65
- console.warn(`[bridge:${m.runtime}] reconnect failed: ${msg}, will retry`);
66
- scheduleManagedBridgeReconnect(m);
67
- }
68
- })();
69
- }, delay);
70
- }
71
- function maskSecret(value) {
72
- if (value.length <= 8)
73
- return '****';
74
- return `${value.slice(0, 4)}***${value.slice(-4)}`;
75
- }
76
- const execAsync = promisify(exec);
77
- function shellEscapeSingleQuoted(value) {
78
- return `'${value.replace(/'/g, `'\\''`)}'`;
79
- }
80
- async function runCommandTask(commandTemplate, input, timeoutMs, context) {
81
- const hasPlaceholder = commandTemplate.includes('{input}');
82
- const command = hasPlaceholder
83
- ? commandTemplate.replaceAll('{input}', shellEscapeSingleQuoted(input))
84
- : commandTemplate;
85
- const { stdout, stderr } = await execAsync(command, {
86
- timeout: timeoutMs,
87
- env: {
88
- ...process.env,
89
- WINMATRIX_TASK_INPUT: input,
90
- ...(context?.projectId ? { WINMATRIX_PROJECT_ID: context.projectId } : {}),
91
- ...(context?.projectName ? { WINMATRIX_PROJECT_NAME: context.projectName } : {}),
92
- ...(context?.projectCode ? { WINMATRIX_PROJECT_CODE: context.projectCode } : {}),
93
- },
94
- maxBuffer: 1024 * 1024 * 8,
95
- });
96
- const out = (stdout ?? '').trim();
97
- const err = (stderr ?? '').trim();
98
- if (!out && err)
99
- return err;
100
- return out || '{}';
101
- }
102
- function summarizeOutput(value) {
103
- return `len=${value.length}`;
104
- }
105
- function sanitizeEndpoint(url) {
106
- try {
107
- const parsed = new URL(url);
108
- return parsed.origin;
109
- }
110
- catch {
111
- return '<invalid-url>';
112
- }
113
- }
114
- function sanitizeCommand(cmd) {
115
- const binary = cmd.split(/\s+/)[0] ?? '';
116
- return binary.length > 40 ? `${binary.slice(0, 37)}...` : binary;
117
- }
118
- export function validateBridgeRuntimeList(runtimes) {
119
- if (runtimes.length === 0) {
120
- throw new Error('No runtime enabled. Set at least one of hermes / openclaw in bridge.config.json (or disable flags).');
121
- }
122
- for (const runtime of runtimes) {
123
- if (!runtime.command && !runtime.endpoint) {
124
- throw new Error(`Runtime ${runtime.kind} requires either command or endpoint in bridge.config.json.`);
125
- }
126
- }
127
- }
128
- export async function startDualRuntimeBridge(config) {
129
- ensureBridgeHomeLayout();
130
- console.log(`[bridge] user data dir=${getBridgeHomeDir()}`);
131
- logPendingTasksRecoveryHint();
132
- const managed = [];
133
- for (const runtime of config.runtimes) {
134
- const client = new WinMatrixAgentClient({
135
- url: config.wsUrl,
136
- agentId: runtime.agentId,
137
- apiKey: runtime.apiKey,
138
- name: runtime.agentName,
139
- agentType: runtime.agentType,
140
- capabilities: {
141
- streaming: true,
142
- toolCall: true,
143
- cancellation: true,
144
- maxConcurrentTasks: runtime.maxConcurrentTasks,
145
- },
146
- bridgeHooks: {
147
- onTaskAssigned: (task) => recordTaskStarted(runtime.kind, task),
148
- onTaskCompleted: (taskId) => recordTaskFinished(runtime.kind, taskId, 'complete'),
149
- onTaskFailed: (taskId) => recordTaskFinished(runtime.kind, taskId, 'fail'),
150
- },
151
- /** Reconnect/backoff lives in bridge (below), not in WinMatrixAgentClient. */
152
- autoReconnect: false,
153
- });
154
- const m = {
155
- runtime: runtime.kind,
156
- client,
157
- reconnectTimer: null,
158
- reconnectDelayMs: 1000,
159
- stopped: false,
160
- };
161
- client.on('disconnect', () => {
162
- console.log(`[bridge:${runtime.kind}] disconnected`);
163
- if (m.stopped)
164
- return;
165
- /* Fresh backoff sequence after an unexpected socket drop �?bridge owns retries. */
166
- m.reconnectDelayMs = 1000;
167
- scheduleManagedBridgeReconnect(m);
168
- });
169
- client.on('error', (err) => {
170
- const msg = err instanceof Error ? err.message : String(err);
171
- console.error(`[bridge:${runtime.kind}] error: ${msg}`);
172
- });
173
- if (runtime.command) {
174
- client.on('task', (async (payload) => {
175
- const task = payload;
176
- const startedAt = Date.now();
177
- // 命令模弝下将 systemPrompt 拼接�?input 剝方
178
- const effectiveInput = task.systemPrompt
179
- ? `${task.systemPrompt}\n\n---\n\n${task.input}`
180
- : task.input;
181
- console.log(`[bridge:${runtime.kind}] task start taskId=${task.taskId} inputLength=${effectiveInput.length} timeoutMs=${runtime.commandTimeoutMs ?? 180000}`);
182
- try {
183
- const text = await runCommandTask(runtime.command, effectiveInput, runtime.commandTimeoutMs ?? 180000, task.context);
184
- console.log(`[bridge:${runtime.kind}] runtime output taskId=${task.taskId} length=${text.length} summary=${summarizeOutput(text)}`);
185
- const unwrapped = unwrapOpenClawPayloads(text);
186
- let result = unwrapped;
187
- try {
188
- result = JSON.parse(unwrapped);
189
- }
190
- catch {
191
- // Keep plain text output.
192
- }
193
- client.completeTask(task.taskId, result);
194
- console.log(`[bridge:${runtime.kind}] task complete taskId=${task.taskId} mode=runtime durationMs=${Date.now() - startedAt}`);
195
- }
196
- catch (err) {
197
- const msg = err instanceof Error ? err.message : String(err);
198
- client.failTask(task.taskId, msg);
199
- console.error(`[bridge:${runtime.kind}] task failed taskId=${task.taskId} durationMs=${Date.now() - startedAt} error=${msg}`);
200
- }
201
- }));
202
- }
203
- else {
204
- // New AgentAdapter-based execution (native protocol)
205
- const adapter = runtime.kind === 'hermes'
206
- ? new HermesAdapter({
207
- mcpBridgeUrl: runtime.mcpBridgeUrl ?? runtime.endpoint,
208
- mcpApiKey: runtime.mcpApiKey ?? runtime.endpointToken,
209
- })
210
- : new OpenClawAdapter({
211
- token: runtime.endpointToken,
212
- mcpBridgeUrl: runtime.mcpBridgeUrl,
213
- mcpApiKey: runtime.mcpApiKey ?? runtime.endpointToken,
214
- });
215
- // Session query handler: route server RPC to adapter
216
- client.setSessionQueryHandler(async (method, params) => {
217
- if (method === 'session.list') {
218
- return adapter.listSessions?.(params) ?? { sessions: [], total: 0 };
219
- }
220
- if (method === 'session.get') {
221
- const p = params;
222
- return (adapter.getSession?.(p.sessionId, p) ?? {
223
- session: { id: p.sessionId, summary: 'N/A', createdAt: '', lastActivityAt: '' },
224
- messageCount: 0,
225
- truncated: false,
226
- userPrompts: [],
227
- assistantText: '',
228
- lastAssistantText: '',
229
- });
230
- }
231
- throw new Error(`Unsupported session method: ${method}`);
232
- });
233
- client.on('task', (async (payload) => {
234
- const task = payload;
235
- const startedAt = Date.now();
236
- console.log(`[bridge:${runtime.kind}] task start taskId=${task.taskId} inputLength=${task.input.length}`);
237
- try {
238
- for await (const event of adapter.execute({
239
- taskId: task.taskId,
240
- input: task.input,
241
- workDir: undefined,
242
- systemPrompt: task.systemPrompt,
243
- })) {
244
- if (m.stopped)
245
- break;
246
- if (event.type === 'thinking') {
247
- client.sendFrame({
248
- type: 'event',
249
- event: 'task.delta',
250
- payload: {
251
- taskId: task.taskId,
252
- content: event.content,
253
- meta: { stream: 'thinking' },
254
- },
255
- });
256
- continue;
257
- }
258
- switch (event.type) {
259
- case 'delta':
260
- client.streamDelta(task.taskId, event.content);
261
- break;
262
- case 'tool_call':
263
- try {
264
- const toolResult = await client.callTool(event.name, event.args, task.taskId);
265
- // Tool result handled by adapter via MCP bridge
266
- void toolResult;
267
- }
268
- catch (err) {
269
- console.error(`[bridge:${runtime.kind}] tool call failed tool=${event.name} error=${err instanceof Error ? err.message : String(err)}`);
270
- }
271
- break;
272
- case 'result':
273
- client.completeTask(task.taskId, event.content, event.sessionId, event.usage);
274
- console.log(`[bridge:${runtime.kind}] task complete taskId=${task.taskId} sessionId=${event.sessionId ?? '-'} durationMs=${Date.now() - startedAt}`);
275
- return;
276
- case 'error':
277
- client.failTask(task.taskId, event.message);
278
- console.error(`[bridge:${runtime.kind}] task error taskId=${task.taskId} error=${event.message}`);
279
- return;
280
- }
281
- }
282
- }
283
- catch (err) {
284
- const msg = err instanceof Error ? err.message : String(err);
285
- client.failTask(task.taskId, msg);
286
- console.error(`[bridge:${runtime.kind}] task failed taskId=${task.taskId} durationMs=${Date.now() - startedAt} error=${msg}`);
287
- }
288
- }));
289
- }
290
- console.log(`[bridge:${runtime.kind}] connecting ws=${sanitizeEndpoint(config.wsUrl)} agentId=${runtime.agentId} apiKey=${maskSecret(runtime.apiKey)} mode=${runtime.command ? 'command' : 'http'} maxConcurrentTasks=${runtime.maxConcurrentTasks} target=${runtime.command ? sanitizeCommand(runtime.command) : (runtime.endpoint ? sanitizeEndpoint(runtime.endpoint) : '(none)')}`);
291
- managed.push(m);
292
- await waitUntilBridgeRegistered(m);
293
- console.log(`[bridge:${runtime.kind}] registered state=${client.getState()}`);
294
- m.disposeLocalRuntimeAvailability = startLocalRuntimeAvailabilityMonitor({
295
- client,
296
- runtimeKind: runtime.kind,
297
- mode: runtime.command ? 'command' : 'endpoint',
298
- endpointUrl: runtime.endpoint,
299
- isStopped: () => m.stopped,
300
- });
301
- }
302
- const heartbeat = setInterval(() => {
303
- const line = managed
304
- .map((item) => `${item.runtime}:${item.client.getState()}`)
305
- .join(' ');
306
- console.log(`[bridge] states ${line}`);
307
- }, 20_000);
308
- return {
309
- stop: () => {
310
- clearInterval(heartbeat);
311
- for (const item of managed) {
312
- item.stopped = true;
313
- clearBridgeReconnectTimer(item);
314
- item.disposeLocalRuntimeAvailability?.();
315
- item.client.disconnect();
316
- }
317
- },
318
- states: () => managed.map((item) => ({ runtime: item.runtime, state: item.client.getState() })),
319
- };
320
- }
321
- //# sourceMappingURL=DualRuntimeBridge.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DualRuntimeBridge.js","sourceRoot":"","sources":["../../src/runtime/DualRuntimeBridge.ts"],"names":[],"mappings":"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"}
@@ -1,14 +0,0 @@
1
- import type { BridgeConfig } from './DualRuntimeBridge.js';
2
- export declare const DEFAULT_BRIDGE_CONFIG_BASENAME = "bridge.config.json";
3
- /** 解析任意 JSON 对象为运行时配置(供测试或外部嵌入调用)。 */
4
- export declare function loadBridgeConfigFromJsonObject(data: unknown): BridgeConfig;
5
- export declare function loadBridgeConfigFromJsonFile(absPath: string): BridgeConfig;
6
- /**
7
- * 解析顺序:
8
- * 1. 若设置了 `WINMATRIX_BRIDGE_CONFIG`,仅从该路径读 JSON(文件必须存在);
9
- * 2. 否则读取用户目录 `{WINMATRIX_BRIDGE_HOME or ~/.winmatrix-bridge}/bridge.config.json`。
10
- *
11
- * 不再从 `.env` 或进程环境变量读取桥接配置。
12
- */
13
- export declare function loadBridgeConfig(): BridgeConfig;
14
- //# sourceMappingURL=bridgeConfigLoader.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"bridgeConfigLoader.d.ts","sourceRoot":"","sources":["../../src/runtime/bridgeConfigLoader.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAiB,MAAM,wBAAwB,CAAC;AAK1E,eAAO,MAAM,8BAA8B,uBAAuB,CAAC;AA8EnE,sCAAsC;AACtC,wBAAgB,8BAA8B,CAAC,IAAI,EAAE,OAAO,GAAG,YAAY,CAgB1E;AAED,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,CAS1E;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,IAAI,YAAY,CAY/C"}