aws-runtime-bridge 1.8.7 → 1.9.0

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.
@@ -17,6 +17,7 @@ export interface SdkSessionEntry {
17
17
  providerId: string;
18
18
  seq: number;
19
19
  runtimeAccessToken?: string;
20
+ schedulerBaseUrl?: string;
20
21
  currentRuntimeStatus?: string;
21
22
  currentRuntimeActionType?: string;
22
23
  currentRuntimeActionLabel?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"terminal.d.ts","sourceRoot":"","sources":["../../src/routes/terminal.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"terminal.d.ts","sourceRoot":"","sources":["../../src/routes/terminal.ts"],"names":[],"mappings":"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"}
@@ -233,7 +233,10 @@ function appendCommandOutput(entry, output) {
233
233
  return;
234
234
  }
235
235
  entry.seq += 1;
236
- void sendOutput(entry.agentId, output, entry.sessionId, entry.seq);
236
+ void sendOutput(entry.agentId, output, entry.sessionId, entry.seq, undefined, {
237
+ runtimeAccessToken: entry.runtimeAccessToken,
238
+ schedulerBaseUrl: entry.schedulerBaseUrl,
239
+ });
237
240
  }
238
241
  /**
239
242
  * 生成显示在终端输出流中的工作目录提示符。
@@ -307,6 +310,9 @@ async function executeTerminalCommand(sessionId, commandValue) {
307
310
  actionType: "bash",
308
311
  actionLabel: "终端命令",
309
312
  actionDetail: displayCommand,
313
+ }, undefined, {
314
+ runtimeAccessToken: entry.runtimeAccessToken,
315
+ schedulerBaseUrl: entry.schedulerBaseUrl,
310
316
  });
311
317
  const child = spawn(command, {
312
318
  cwd: state.currentDirectory,
@@ -398,7 +404,10 @@ async function executeTerminalCommand(sessionId, commandValue) {
398
404
  appendCommandOutput(entry, `\r\n[signal ${signal}]\r\n`);
399
405
  }
400
406
  appendCommandOutput(entry, formatTerminalPrompt(state.currentDirectory));
401
- void sendStatus(entry.agentId, sessionId, "waiting_input");
407
+ void sendStatus(entry.agentId, sessionId, "waiting_input", undefined, undefined, {
408
+ runtimeAccessToken: entry.runtimeAccessToken,
409
+ schedulerBaseUrl: entry.schedulerBaseUrl,
410
+ });
402
411
  });
403
412
  return { started: true, cwd: state.currentDirectory };
404
413
  }
@@ -626,12 +635,16 @@ function formatSdkToolLogMessage(event, phaseLabel) {
626
635
  function resolveSdkToolLogDetail(event, actionInfo) {
627
636
  const input = event.data.toolInput;
628
637
  if (actionInfo.actionType === "bash") {
629
- return getCommandDisplayDetail(input) || event.data.actionDetail || actionInfo.actionDetail;
638
+ return (getCommandDisplayDetail(input) ||
639
+ event.data.actionDetail ||
640
+ actionInfo.actionDetail);
630
641
  }
631
642
  if (actionInfo.actionType === "read_file" ||
632
643
  actionInfo.actionType === "edit_file" ||
633
644
  actionInfo.actionType === "write_file") {
634
- return getFileDisplayDetail(input) || event.data.actionDetail || actionInfo.actionDetail;
645
+ return (getFileDisplayDetail(input) ||
646
+ event.data.actionDetail ||
647
+ actionInfo.actionDetail);
635
648
  }
636
649
  return event.data.actionDetail || actionInfo.actionDetail;
637
650
  }
@@ -730,7 +743,10 @@ export function resolveRuntimeStatusFromProviderEvent(event) {
730
743
  actionInfo: {
731
744
  actionType: event.data.actionType || inferredAction.actionType,
732
745
  actionLabel: event.data.actionLabel || inferredAction.actionLabel,
733
- actionDetail: actionDetail || event.data.actionDetail || inferredAction.actionDetail || event.data.toolName,
746
+ actionDetail: actionDetail ||
747
+ event.data.actionDetail ||
748
+ inferredAction.actionDetail ||
749
+ event.data.toolName,
734
750
  actionId: event.data.actionId || event.data.toolUseId,
735
751
  },
736
752
  };
@@ -740,7 +756,10 @@ export function resolveRuntimeStatusFromProviderEvent(event) {
740
756
  actionInfo: {
741
757
  actionType: event.data.actionType || inferredAction.actionType,
742
758
  actionLabel: event.data.actionLabel || inferredAction.actionLabel,
743
- actionDetail: actionDetail || event.data.actionDetail || inferredAction.actionDetail || event.data.toolName,
759
+ actionDetail: actionDetail ||
760
+ event.data.actionDetail ||
761
+ inferredAction.actionDetail ||
762
+ event.data.toolName,
744
763
  actionId: event.data.actionId || event.data.toolUseId,
745
764
  },
746
765
  };
@@ -772,7 +791,10 @@ function forwardSdkOutputEvent(event, entry) {
772
791
  return;
773
792
  }
774
793
  entry.seq += 1;
775
- void sendOutput(entry.agentId, output, event.sessionId, entry.seq, buildSdkOutputMetadata(event), { runtimeAccessToken: entry.runtimeAccessToken });
794
+ void sendOutput(entry.agentId, output, event.sessionId, entry.seq, buildSdkOutputMetadata(event), {
795
+ runtimeAccessToken: entry.runtimeAccessToken,
796
+ schedulerBaseUrl: entry.schedulerBaseUrl,
797
+ });
776
798
  }
777
799
  export function resolveSdkProviderId(command) {
778
800
  return resolveSdkProviderIdByCommand(command);
@@ -792,13 +814,17 @@ function wireSdkAdapterEvents(adapter, definition) {
792
814
  console.log(`[${definition.displayName} Adapter] Event: ${event.type} for session ${event.sessionId}`);
793
815
  const runtimeStatus = resolveRuntimeStatusFromProviderEvent(event);
794
816
  if (runtimeStatus) {
795
- void sendStatus(entry.agentId, event.sessionId, runtimeStatus.status, runtimeStatus.actionInfo, resolveStatusChangeUsage(runtimeStatus.actionInfo), { runtimeAccessToken: entry.runtimeAccessToken });
817
+ void sendStatus(entry.agentId, event.sessionId, runtimeStatus.status, runtimeStatus.actionInfo, resolveStatusChangeUsage(runtimeStatus.actionInfo), {
818
+ runtimeAccessToken: entry.runtimeAccessToken,
819
+ schedulerBaseUrl: entry.schedulerBaseUrl,
820
+ });
796
821
  }
797
822
  forwardSdkOutputEvent(event, entry);
798
823
  const toolResultActionInfo = buildToolResultTimelineActionInfo(event);
799
824
  if (toolResultActionInfo) {
800
825
  void sendStatus(entry.agentId, event.sessionId, "tool_result", toolResultActionInfo, undefined, {
801
826
  runtimeAccessToken: entry.runtimeAccessToken,
827
+ schedulerBaseUrl: entry.schedulerBaseUrl,
802
828
  });
803
829
  }
804
830
  }
@@ -819,6 +845,7 @@ function wireSdkAdapterEvents(adapter, definition) {
819
845
  });
820
846
  void sendStatus(entry.agentId, sessionId, status, actionInfo, resolveStatusChangeUsage(actionInfo), {
821
847
  runtimeAccessToken: entry.runtimeAccessToken,
848
+ schedulerBaseUrl: entry.schedulerBaseUrl,
822
849
  });
823
850
  }
824
851
  });
@@ -828,6 +855,7 @@ function wireSdkAdapterEvents(adapter, definition) {
828
855
  console.log(`[${definition.displayName} Adapter] AskUserQuestion for agent ${entry.agentId}`);
829
856
  void sendQuestionRequest(entry.agentId, data.sessionId, Array.isArray(data.questions) ? data.questions : [], {
830
857
  runtimeAccessToken: entry.runtimeAccessToken,
858
+ schedulerBaseUrl: entry.schedulerBaseUrl,
831
859
  });
832
860
  }
833
861
  });
@@ -874,6 +902,7 @@ async function startSdkSession(req, res) {
874
902
  let sessionId = null;
875
903
  const normalizedAgentId = String(agentId || "").trim();
876
904
  const runtimeAccessToken = String(req.body?.runtimeAccessToken || "").trim() || undefined;
905
+ const requestedSchedulerBaseUrl = String(req.body?.schedulerBaseUrl || "").trim() || undefined;
877
906
  try {
878
907
  ensureAdapterInitialized();
879
908
  if (!normalizedAgentId) {
@@ -949,6 +978,7 @@ async function startSdkSession(req, res) {
949
978
  providerId, // 记录使用的 provider
950
979
  seq: 0,
951
980
  runtimeAccessToken,
981
+ schedulerBaseUrl: requestedSchedulerBaseUrl,
952
982
  });
953
983
  // 启动 SDK 会话
954
984
  await adapter.startSession(sessionId, config);
@@ -1175,6 +1205,7 @@ terminalRouter.post("/sdk/stop", validateToken, async (req, res) => {
1175
1205
  await processManager.removeProcess(entry.agentId);
1176
1206
  await sendStatus(entry.agentId, null, "stopped", undefined, undefined, {
1177
1207
  runtimeAccessToken: entry.runtimeAccessToken,
1208
+ schedulerBaseUrl: entry.schedulerBaseUrl,
1178
1209
  });
1179
1210
  res.json({ ok: true, status: "stopped" });
1180
1211
  }
@@ -1366,6 +1397,7 @@ terminalRouter.post("/stop", validateToken, async (req, res) => {
1366
1397
  await processManager.removeProcess(agentId);
1367
1398
  await sendStatus(agentId, null, "stopped", undefined, undefined, {
1368
1399
  runtimeAccessToken: sdkEntry.runtimeAccessToken,
1400
+ schedulerBaseUrl: sdkEntry.schedulerBaseUrl,
1369
1401
  });
1370
1402
  res.json({ ok: true, status: "stopped", mode: "sdk" });
1371
1403
  }
@@ -1400,6 +1432,7 @@ terminalRouter.post("/stop-all", validateToken, async (_req, res) => {
1400
1432
  stoppedSdk.push(sessionId);
1401
1433
  await sendStatus(entry.agentId, null, "stopped", undefined, undefined, {
1402
1434
  runtimeAccessToken: entry.runtimeAccessToken,
1435
+ schedulerBaseUrl: entry.schedulerBaseUrl,
1403
1436
  });
1404
1437
  }
1405
1438
  catch (error) {
@@ -14,6 +14,7 @@ interface RuntimeStatusActionInfo {
14
14
  }
15
15
  export interface RuntimeCallbackAuthOptions {
16
16
  runtimeAccessToken?: string;
17
+ schedulerBaseUrl?: string;
17
18
  }
18
19
  export interface RuntimeOutputMetadata {
19
20
  sourceEventType?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"session-output.d.ts","sourceRoot":"","sources":["../../src/services/session-output.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAE3C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAI3C,UAAU,uBAAuB;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,0BAA0B;IACzC,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,qBAAqB;IACpC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IACrC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAmBD,aAAa;AACb,eAAO,MAAM,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAa,CAAC;AAExD;;;;;;;GAOG;AACH,wBAAsB,UAAU,CAC9B,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,GAAG,IAAI,EACxB,MAAM,EAAE,MAAM,EACd,UAAU,CAAC,EAAE,uBAAuB,EACpC,KAAK,CAAC,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,EACrD,WAAW,CAAC,EAAE,0BAA0B,GACvC,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC,CA0C7C;AAED;;;;;;;GAOG;AACH,wBAAsB,UAAU,CAC9B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM,EACX,QAAQ,CAAC,EAAE,qBAAqB,EAChC,WAAW,CAAC,EAAE,0BAA0B,GACvC,OAAO,CAAC,IAAI,CAAC,CAcf;AAED;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,OAAO,EAAE,EACpB,WAAW,CAAC,EAAE,0BAA0B,GACvC,OAAO,CAAC,IAAI,CAAC,CAcf;AAED,MAAM,WAAW,yBAAyB;IACxC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,yBAAyB,GACjC,OAAO,CAAC,IAAI,CAAC,CAcf;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAgBzE;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAa3D;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAqCzE"}
1
+ {"version":3,"file":"session-output.d.ts","sourceRoot":"","sources":["../../src/services/session-output.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAG3C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAI3C,UAAU,uBAAuB;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,0BAA0B;IACzC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,qBAAqB;IACpC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IACrC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AA8BD,aAAa;AACb,eAAO,MAAM,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAa,CAAC;AAExD;;;;;;;GAOG;AACH,wBAAsB,UAAU,CAC9B,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,GAAG,IAAI,EACxB,MAAM,EAAE,MAAM,EACd,UAAU,CAAC,EAAE,uBAAuB,EACpC,KAAK,CAAC,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,EACrD,WAAW,CAAC,EAAE,0BAA0B,GACvC,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC,CA4C7C;AAED;;;;;;;GAOG;AACH,wBAAsB,UAAU,CAC9B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM,EACX,QAAQ,CAAC,EAAE,qBAAqB,EAChC,WAAW,CAAC,EAAE,0BAA0B,GACvC,OAAO,CAAC,IAAI,CAAC,CA2Bf;AAED;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,OAAO,EAAE,EACpB,WAAW,CAAC,EAAE,0BAA0B,GACvC,OAAO,CAAC,IAAI,CAAC,CAef;AAED,MAAM,WAAW,yBAAyB;IACxC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,yBAAyB,GACjC,OAAO,CAAC,IAAI,CAAC,CAef;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAgBzE;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAa3D;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAqCzE"}
@@ -4,15 +4,22 @@
4
4
  * 管理终端会话的输出缓冲和刷新机制
5
5
  */
6
6
  import axios from "axios";
7
- import { schedulerBaseUrl } from "../config.js";
7
+ import { resolveSchedulerBaseUrlFrom } from "../config.js";
8
8
  import { logger } from "../utils/logger.js";
9
9
  import { getRuntimeAccessToken } from "./runtime-binding.js";
10
- function runtimeAuthHeaders(options) {
10
+ function runtimeAuthHeaders(options, callbackBaseUrl = resolveRuntimeCallbackBaseUrl(options)) {
11
11
  const token = options?.runtimeAccessToken ||
12
- getRuntimeAccessToken(undefined, schedulerBaseUrl) ||
12
+ getRuntimeAccessToken(undefined, callbackBaseUrl) ||
13
13
  getRuntimeAccessToken();
14
14
  return token ? { "X-Runtime-Token": token } : undefined;
15
15
  }
16
+ /**
17
+ * 解析 Runtime 回调的调度中心地址。
18
+ * 主流程:优先使用启动请求携带的 scheduler 地址;否则按环境变量、单自动注册目标、默认值依次回退。
19
+ */
20
+ function resolveRuntimeCallbackBaseUrl(options) {
21
+ return resolveSchedulerBaseUrlFrom(options?.schedulerBaseUrl).url;
22
+ }
16
23
  /** 输出刷新防抖时间:合并启动期高频小块输出,降低 HTTP/WebSocket 压力。 */
17
24
  const OUTPUT_FLUSH_DEBOUNCE_MS = 100;
18
25
  /** 单个会话待发送输出上限,避免调度器不可达时内存无限增长。 */
@@ -49,19 +56,21 @@ export async function sendStatus(agentId, sessionId, status, actionInfo, usage,
49
56
  payload.inputTokens = usage.inputTokens;
50
57
  payload.outputTokens = usage.outputTokens;
51
58
  }
52
- const headers = runtimeAuthHeaders(authOptions);
59
+ const callbackBaseUrl = resolveRuntimeCallbackBaseUrl(authOptions);
60
+ const headers = runtimeAuthHeaders(authOptions, callbackBaseUrl);
53
61
  if (!headers) {
54
- logger.warn("Skip runtime status callback because runtime token is missing", { agentId, sessionId, status });
62
+ logger.warn("Skip runtime status callback because runtime token is missing", { agentId, sessionId, status, schedulerBaseUrl: callbackBaseUrl });
55
63
  return undefined;
56
64
  }
57
65
  try {
58
- return await axios.post(`${schedulerBaseUrl}/api/runtime/callback/status`, payload, { headers });
66
+ return await axios.post(`${callbackBaseUrl}/api/runtime/callback/status`, payload, { headers });
59
67
  }
60
68
  catch (error) {
61
69
  logger.warn("Runtime status callback failed", {
62
70
  agentId,
63
71
  sessionId,
64
72
  status,
73
+ schedulerBaseUrl: callbackBaseUrl,
65
74
  error,
66
75
  });
67
76
  return undefined;
@@ -77,14 +86,24 @@ export async function sendStatus(agentId, sessionId, status, actionInfo, usage,
77
86
  */
78
87
  export async function sendOutput(agentId, output, sessionId, seq, metadata, authOptions) {
79
88
  try {
80
- const headers = runtimeAuthHeaders(authOptions);
89
+ const callbackBaseUrl = resolveRuntimeCallbackBaseUrl(authOptions);
90
+ const headers = runtimeAuthHeaders(authOptions, callbackBaseUrl);
81
91
  if (!headers) {
92
+ logger.warn("Skip runtime output callback because runtime token is missing", {
93
+ agentId,
94
+ sessionId,
95
+ schedulerBaseUrl: callbackBaseUrl,
96
+ });
82
97
  return;
83
98
  }
84
- await axios.post(`${schedulerBaseUrl}/api/runtime/callback/output`, { agentId, output, sessionId, seq, ...metadata }, { headers });
99
+ await axios.post(`${callbackBaseUrl}/api/runtime/callback/output`, { agentId, output, sessionId, seq, ...metadata }, { headers });
85
100
  }
86
- catch {
87
- // ignore transient callback failures
101
+ catch (error) {
102
+ logger.warn("Runtime output callback failed", {
103
+ agentId,
104
+ sessionId,
105
+ error,
106
+ });
88
107
  }
89
108
  }
90
109
  /**
@@ -96,11 +115,12 @@ export async function sendOutput(agentId, output, sessionId, seq, metadata, auth
96
115
  */
97
116
  export async function sendQuestionRequest(agentId, sessionId, questions, authOptions) {
98
117
  try {
99
- const headers = runtimeAuthHeaders(authOptions);
118
+ const callbackBaseUrl = resolveRuntimeCallbackBaseUrl(authOptions);
119
+ const headers = runtimeAuthHeaders(authOptions, callbackBaseUrl);
100
120
  if (!headers) {
101
121
  return;
102
122
  }
103
- await axios.post(`${schedulerBaseUrl}/api/runtime/callback/question`, { agentId, sessionId, questions }, { headers });
123
+ await axios.post(`${callbackBaseUrl}/api/runtime/callback/question`, { agentId, sessionId, questions }, { headers });
104
124
  }
105
125
  catch {
106
126
  // ignore transient callback failures
@@ -111,11 +131,12 @@ export async function sendQuestionRequest(agentId, sessionId, questions, authOpt
111
131
  */
112
132
  export async function sendFileChanged(payload) {
113
133
  try {
114
- const headers = runtimeAuthHeaders();
134
+ const callbackBaseUrl = resolveRuntimeCallbackBaseUrl();
135
+ const headers = runtimeAuthHeaders(undefined, callbackBaseUrl);
115
136
  if (!headers) {
116
137
  return;
117
138
  }
118
- await axios.post(`${schedulerBaseUrl}/api/runtime/callback/file-changed`, payload, { headers });
139
+ await axios.post(`${callbackBaseUrl}/api/runtime/callback/file-changed`, payload, { headers });
119
140
  }
120
141
  catch {
121
142
  // ignore transient callback failures
@@ -5,6 +5,7 @@ import axios from "axios";
5
5
  import { afterEach, describe, expect, it, vi } from "vitest";
6
6
  import { logger } from "../utils/logger.js";
7
7
  import { appendSessionOutput, sendOutput, sendStatus, sessions, } from "./session-output.js";
8
+ import { getRuntimeAccessToken } from "./runtime-binding.js";
8
9
  vi.mock("axios", () => ({
9
10
  default: {
10
11
  post: vi.fn(),
@@ -20,6 +21,7 @@ vi.mock("../utils/logger.js", () => ({
20
21
  }));
21
22
  const mockedAxiosPost = axios.post;
22
23
  const mockedLogger = vi.mocked(logger);
24
+ const mockedGetRuntimeAccessToken = vi.mocked(getRuntimeAccessToken);
23
25
  const createSession = (overrides = {}) => ({
24
26
  agentId: "agent-1",
25
27
  workspacePath: "D:/workspace",
@@ -133,4 +135,43 @@ describe("session-output service", () => {
133
135
  sourceEventType: "text_delta",
134
136
  }, { headers: { "X-Runtime-Token": "session-runtime-token" } });
135
137
  });
138
+ it("uses launch scheduler URL for Docker-deployed scheduler callbacks", async () => {
139
+ mockedAxiosPost.mockResolvedValue({ data: { ok: true } });
140
+ await sendStatus("agent-1", "session-1", "thinking", undefined, undefined, {
141
+ runtimeAccessToken: "session-runtime-token",
142
+ schedulerBaseUrl: "http://127.0.0.1:7380",
143
+ });
144
+ await sendOutput("agent-1", "[ACode] 正在请求模型 gpt-test:hello", "session-1", 8, { sourceEventType: "ai_request", logCategory: "acode" }, {
145
+ runtimeAccessToken: "session-runtime-token",
146
+ schedulerBaseUrl: "http://127.0.0.1:7380",
147
+ });
148
+ expect(mockedAxiosPost).toHaveBeenNthCalledWith(1, "http://127.0.0.1:7380/api/runtime/callback/status", {
149
+ agentId: "agent-1",
150
+ sessionId: "session-1",
151
+ status: "thinking",
152
+ }, { headers: { "X-Runtime-Token": "session-runtime-token" } });
153
+ expect(mockedAxiosPost).toHaveBeenNthCalledWith(2, "http://127.0.0.1:7380/api/runtime/callback/output", {
154
+ agentId: "agent-1",
155
+ output: "[ACode] 正在请求模型 gpt-test:hello",
156
+ sessionId: "session-1",
157
+ seq: 8,
158
+ sourceEventType: "ai_request",
159
+ logCategory: "acode",
160
+ }, { headers: { "X-Runtime-Token": "session-runtime-token" } });
161
+ });
162
+ it("looks up persisted runtime token by launch scheduler URL when explicit token is missing", async () => {
163
+ mockedAxiosPost.mockResolvedValueOnce({ data: { ok: true } });
164
+ mockedGetRuntimeAccessToken.mockImplementationOnce((_, serverBaseUrl) => serverBaseUrl === "http://127.0.0.1:7380"
165
+ ? "scoped-7380-token"
166
+ : undefined);
167
+ await sendStatus("agent-1", "session-1", "thinking", undefined, undefined, {
168
+ schedulerBaseUrl: "http://127.0.0.1:7380",
169
+ });
170
+ expect(mockedGetRuntimeAccessToken).toHaveBeenNthCalledWith(1, undefined, "http://127.0.0.1:7380");
171
+ expect(mockedAxiosPost).toHaveBeenCalledWith("http://127.0.0.1:7380/api/runtime/callback/status", {
172
+ agentId: "agent-1",
173
+ sessionId: "session-1",
174
+ status: "thinking",
175
+ }, { headers: { "X-Runtime-Token": "scoped-7380-token" } });
176
+ });
136
177
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "aws-runtime-bridge",
3
- "version": "1.8.7",
3
+ "version": "1.9.0",
4
4
  "description": "AgentsWorkStudio runtime bridge service for machine-level agent runtime integration",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",