aws-runtime-bridge 1.9.10 → 1.9.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapter/AcodeSdkAdapter.d.ts +40 -0
- package/dist/adapter/AcodeSdkAdapter.d.ts.map +1 -1
- package/dist/adapter/AcodeSdkAdapter.js +376 -10
- package/dist/adapter/AcodeSdkAdapter.test.js +155 -8
- package/dist/adapter/ClaudeSdkAdapter.d.ts.map +1 -1
- package/dist/adapter/ClaudeSdkAdapter.js +17 -1
- package/dist/adapter/CodexSdkAdapter.d.ts.map +1 -1
- package/dist/adapter/CodexSdkAdapter.js +15 -1
- package/dist/adapter/OpencodeSdkAdapter.d.ts.map +1 -1
- package/dist/adapter/OpencodeSdkAdapter.js +56 -4
- package/dist/adapter/instance-ai-config-resolver.d.ts +49 -0
- package/dist/adapter/instance-ai-config-resolver.d.ts.map +1 -0
- package/dist/adapter/instance-ai-config-resolver.js +46 -0
- package/dist/adapter/types.d.ts +29 -2
- package/dist/adapter/types.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/dist/routes/dashboard.d.ts.map +1 -1
- package/dist/routes/dashboard.js +749 -15
- package/dist/routes/events.d.ts +7 -0
- package/dist/routes/events.d.ts.map +1 -0
- package/dist/routes/events.js +22 -0
- package/dist/routes/file-browser.d.ts +1 -1
- package/dist/routes/file-browser.d.ts.map +1 -1
- package/dist/routes/file-browser.js +25 -9
- package/dist/routes/file-snapshot.d.ts +10 -0
- package/dist/routes/file-snapshot.d.ts.map +1 -0
- package/dist/routes/file-snapshot.js +156 -0
- package/dist/routes/git.d.ts +10 -0
- package/dist/routes/git.d.ts.map +1 -1
- package/dist/routes/git.js +405 -2
- package/dist/routes/git.test.js +39 -2
- package/dist/routes/instance.js +3 -1
- package/dist/routes/memory.d.ts +3 -0
- package/dist/routes/memory.d.ts.map +1 -1
- package/dist/routes/memory.js +3 -0
- package/dist/routes/terminal.d.ts +17 -3
- package/dist/routes/terminal.d.ts.map +1 -1
- package/dist/routes/terminal.js +464 -47
- package/dist/routes/terminal.test.js +37 -9
- package/dist/services/agent-event-store.d.ts +60 -0
- package/dist/services/agent-event-store.d.ts.map +1 -0
- package/dist/services/agent-event-store.js +68 -0
- package/dist/services/event-delta-pusher.d.ts +40 -0
- package/dist/services/event-delta-pusher.d.ts.map +1 -0
- package/dist/services/event-delta-pusher.js +95 -0
- package/dist/services/fileSnapshotStore.d.ts +96 -0
- package/dist/services/fileSnapshotStore.d.ts.map +1 -0
- package/dist/services/fileSnapshotStore.js +500 -0
- package/dist/services/instance-ai-config-service.d.ts +49 -0
- package/dist/services/instance-ai-config-service.d.ts.map +1 -0
- package/dist/services/instance-ai-config-service.js +174 -0
- package/dist/services/panel-auth.d.ts +8 -0
- package/dist/services/panel-auth.d.ts.map +1 -1
- package/dist/services/panel-auth.js +8 -0
- package/dist/services/ring-buffer.d.ts +67 -0
- package/dist/services/ring-buffer.d.ts.map +1 -0
- package/dist/services/ring-buffer.js +103 -0
- package/dist/services/session-output.d.ts +49 -3
- package/dist/services/session-output.d.ts.map +1 -1
- package/dist/services/session-output.js +115 -2
- package/dist/utils/instance-ai-config-debug-logger.d.ts +37 -0
- package/dist/utils/instance-ai-config-debug-logger.d.ts.map +1 -0
- package/dist/utils/instance-ai-config-debug-logger.js +63 -0
- package/dist/utils/logger.d.ts +18 -0
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +48 -4
- package/package/acode/dist/built-in-file-tools.d.ts +1 -1
- package/package/acode/dist/built-in-file-tools.d.ts.map +1 -1
- package/package/acode/dist/built-in-file-tools.js +5 -3
- package/package/acode/dist/builtins/commandArtifacts.d.ts +8 -1
- package/package/acode/dist/builtins/commandArtifacts.d.ts.map +1 -1
- package/package/acode/dist/builtins/commandArtifacts.js +24 -4
- package/package/acode/dist/builtins/shellCommandResult.d.ts +1 -0
- package/package/acode/dist/builtins/shellCommandResult.d.ts.map +1 -1
- package/package/acode/dist/builtins/shellCommandResult.js +3 -3
- package/package/acode/dist/builtins/shellCommandRunner.d.ts +1 -0
- package/package/acode/dist/builtins/shellCommandRunner.d.ts.map +1 -1
- package/package/acode/dist/builtins/shellCommandRunner.js +1 -0
- package/package/acode/dist/builtins/shellOutputDecoder.d.ts +25 -2
- package/package/acode/dist/builtins/shellOutputDecoder.d.ts.map +1 -1
- package/package/acode/dist/builtins/shellOutputDecoder.js +69 -5
- package/package/acode/dist/cli.js +2 -0
- package/package/acode/dist/runtime.d.ts.map +1 -1
- package/package/acode/dist/runtime.js +156 -5
- package/package/acode/dist/types.d.ts +1 -0
- package/package/acode/dist/types.d.ts.map +1 -1
- package/package/aws-client-agent-mcp/dist/agent-client.d.ts +10 -3
- package/package/aws-client-agent-mcp/dist/agent-client.d.ts.map +1 -1
- package/package/aws-client-agent-mcp/dist/agent-client.js +33 -11
- package/package/aws-client-agent-mcp/dist/agent-client.js.map +1 -1
- package/package/aws-client-agent-mcp/dist/context-manager.d.ts +136 -0
- package/package/aws-client-agent-mcp/dist/context-manager.d.ts.map +1 -0
- package/package/aws-client-agent-mcp/dist/context-manager.js +473 -0
- package/package/aws-client-agent-mcp/dist/context-manager.js.map +1 -0
- package/package/aws-client-agent-mcp/dist/context-manager.test.d.ts +6 -0
- package/package/aws-client-agent-mcp/dist/context-manager.test.d.ts.map +1 -0
- package/package/aws-client-agent-mcp/dist/context-manager.test.js +307 -0
- package/package/aws-client-agent-mcp/dist/context-manager.test.js.map +1 -0
- package/package/aws-client-agent-mcp/dist/http-client.d.ts +11 -0
- package/package/aws-client-agent-mcp/dist/http-client.d.ts.map +1 -1
- package/package/aws-client-agent-mcp/dist/http-client.js +67 -0
- package/package/aws-client-agent-mcp/dist/http-client.js.map +1 -1
- package/package/aws-client-agent-mcp/dist/mcp-server.d.ts +166 -10
- package/package/aws-client-agent-mcp/dist/mcp-server.d.ts.map +1 -1
- package/package/aws-client-agent-mcp/dist/mcp-server.js +933 -41
- package/package/aws-client-agent-mcp/dist/mcp-server.js.map +1 -1
- package/package/aws-client-agent-mcp/dist/mcp-server.test.js +150 -130
- package/package/aws-client-agent-mcp/dist/mcp-server.test.js.map +1 -1
- package/package/aws-client-agent-mcp/dist/mcp-tools.d.ts +15 -1
- package/package/aws-client-agent-mcp/dist/mcp-tools.d.ts.map +1 -1
- package/package/aws-client-agent-mcp/dist/mcp-tools.js +62 -2
- package/package/aws-client-agent-mcp/dist/mcp-tools.js.map +1 -1
- package/package/aws-client-agent-mcp/dist/memory-store.d.ts +58 -1
- package/package/aws-client-agent-mcp/dist/memory-store.d.ts.map +1 -1
- package/package/aws-client-agent-mcp/dist/memory-store.js +246 -15
- package/package/aws-client-agent-mcp/dist/memory-store.js.map +1 -1
- package/package/aws-client-agent-mcp/dist/memory-tools.d.ts +8 -0
- package/package/aws-client-agent-mcp/dist/memory-tools.d.ts.map +1 -1
- package/package/aws-client-agent-mcp/dist/memory-tools.js +106 -2
- package/package/aws-client-agent-mcp/dist/memory-tools.js.map +1 -1
- package/package/aws-client-agent-mcp/dist/server-memory-store.d.ts +7 -1
- package/package/aws-client-agent-mcp/dist/server-memory-store.d.ts.map +1 -1
- package/package/aws-client-agent-mcp/dist/server-memory-store.js +18 -0
- package/package/aws-client-agent-mcp/dist/server-memory-store.js.map +1 -1
- package/package/aws-client-agent-mcp/dist/types.d.ts +103 -2
- package/package/aws-client-agent-mcp/dist/types.d.ts.map +1 -1
- package/package/aws-client-agent-mcp/dist/types.js.map +1 -1
- package/package/aws-client-agent-mcp/dist/websocket-client.d.ts +27 -2
- package/package/aws-client-agent-mcp/dist/websocket-client.d.ts.map +1 -1
- package/package/aws-client-agent-mcp/dist/websocket-client.js +123 -5
- package/package/aws-client-agent-mcp/dist/websocket-client.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { EventEmitter } from "node:events";
|
|
2
|
-
import { describe, expect, it, vi } from "vitest";
|
|
2
|
+
import { describe, expect, it, vi, beforeEach, afterEach } from "vitest";
|
|
3
3
|
import { AcodeSdkAdapter, isFailedAcodeTurnComplete, } from "./AcodeSdkAdapter.js";
|
|
4
4
|
class FailedTurnRuntime extends EventEmitter {
|
|
5
5
|
constructor(config) {
|
|
@@ -837,7 +837,7 @@ describe("AcodeSdkAdapter turn completion state", () => {
|
|
|
837
837
|
type: "turn_complete",
|
|
838
838
|
data: { usage: { inputTokens: 31, outputTokens: 58 } },
|
|
839
839
|
});
|
|
840
|
-
expect(statuses.at(-1)).
|
|
840
|
+
expect(statuses.at(-1)).toMatchObject({
|
|
841
841
|
status: "waiting_input",
|
|
842
842
|
usage: { inputTokens: 31, outputTokens: 58 },
|
|
843
843
|
});
|
|
@@ -862,7 +862,7 @@ describe("AcodeSdkAdapter turn completion state", () => {
|
|
|
862
862
|
});
|
|
863
863
|
await adapter.sendMessage("session-reset-context", "finish work");
|
|
864
864
|
expect(adapter.getConversation("session-reset-context")).toHaveLength(2);
|
|
865
|
-
expect(statuses.at(-1)).
|
|
865
|
+
expect(statuses.at(-1)).toMatchObject({
|
|
866
866
|
status: "waiting_input",
|
|
867
867
|
usage: { inputTokens: 7, outputTokens: 3 },
|
|
868
868
|
});
|
|
@@ -872,7 +872,7 @@ describe("AcodeSdkAdapter turn completion state", () => {
|
|
|
872
872
|
expect(adapter.hasSession("session-reset-context")).toBe(true);
|
|
873
873
|
expect(adapter.getSessionStatus("session-reset-context")).toBe("waiting_input");
|
|
874
874
|
expect(adapter.getConversation("session-reset-context")).toEqual([]);
|
|
875
|
-
expect(statuses.at(-1)).
|
|
875
|
+
expect(statuses.at(-1)).toMatchObject({
|
|
876
876
|
status: "waiting_input",
|
|
877
877
|
usage: { inputTokens: 0, outputTokens: 0 },
|
|
878
878
|
});
|
|
@@ -1157,10 +1157,12 @@ describe("AcodeSdkAdapter turn completion state", () => {
|
|
|
1157
1157
|
requestBody: '{"model":"test-model"}',
|
|
1158
1158
|
},
|
|
1159
1159
|
});
|
|
1160
|
-
expect(statuses).
|
|
1161
|
-
|
|
1162
|
-
|
|
1163
|
-
|
|
1160
|
+
expect(statuses).toEqual(expect.arrayContaining([
|
|
1161
|
+
expect.objectContaining({
|
|
1162
|
+
status: "thinking",
|
|
1163
|
+
usage: expect.objectContaining({ inputTokens: 6800, outputTokens: 0 }),
|
|
1164
|
+
}),
|
|
1165
|
+
]));
|
|
1164
1166
|
});
|
|
1165
1167
|
it("forwards ACode thinking deltas as realtime thinking provider events", async () => {
|
|
1166
1168
|
const adapter = new AcodeSdkAdapter();
|
|
@@ -1851,3 +1853,148 @@ describe("AcodeSdkAdapter turn completion state", () => {
|
|
|
1851
1853
|
}
|
|
1852
1854
|
});
|
|
1853
1855
|
});
|
|
1856
|
+
/**
|
|
1857
|
+
* 用于验证 AcodeSdkAdapter 在 startSession 阶段传给 ACodeRuntime 的 config 是否符合
|
|
1858
|
+
* "instance > global > default" 优先级。Stub 会在构造时把 model / configPath 缓存到
|
|
1859
|
+
* lastConfig 供断言读取。
|
|
1860
|
+
*/
|
|
1861
|
+
class CapturingConfigRuntime extends EventEmitter {
|
|
1862
|
+
constructor(config) {
|
|
1863
|
+
super();
|
|
1864
|
+
CapturingConfigRuntime.lastConfig = { ...config };
|
|
1865
|
+
}
|
|
1866
|
+
async start() { }
|
|
1867
|
+
async submit(_message) { }
|
|
1868
|
+
async abort() { }
|
|
1869
|
+
async stop() { }
|
|
1870
|
+
}
|
|
1871
|
+
describe("AcodeSdkAdapter instance AI configuration priority", () => {
|
|
1872
|
+
let tempDir;
|
|
1873
|
+
let globalAcodePath;
|
|
1874
|
+
let perInstanceAcodePath;
|
|
1875
|
+
beforeEach(async () => {
|
|
1876
|
+
const { mkdir, mkdtemp, writeFile } = await import("node:fs/promises");
|
|
1877
|
+
const os = await import("node:os");
|
|
1878
|
+
const path = await import("node:path");
|
|
1879
|
+
tempDir = await mkdtemp(path.join(os.tmpdir(), "acode-adapter-ai-"));
|
|
1880
|
+
globalAcodePath = path.join(tempDir, "global", ".acode", "config.json");
|
|
1881
|
+
perInstanceAcodePath = path.join(tempDir, "instance-acode-config.json");
|
|
1882
|
+
await mkdir(path.dirname(globalAcodePath), { recursive: true });
|
|
1883
|
+
await writeFile(globalAcodePath, JSON.stringify({
|
|
1884
|
+
provider: {
|
|
1885
|
+
default: {
|
|
1886
|
+
model: "global-model",
|
|
1887
|
+
options: {
|
|
1888
|
+
baseURL: "https://global.example.com/v1",
|
|
1889
|
+
apiKey: "sk-global",
|
|
1890
|
+
},
|
|
1891
|
+
},
|
|
1892
|
+
},
|
|
1893
|
+
}), "utf-8");
|
|
1894
|
+
process.env.AWS_RUNTIME_HOME_DIR = tempDir;
|
|
1895
|
+
process.env.AWS_RUNTIME_ACODE_CONFIG_FILE = globalAcodePath;
|
|
1896
|
+
});
|
|
1897
|
+
afterEach(async () => {
|
|
1898
|
+
const { rm } = await import("node:fs/promises");
|
|
1899
|
+
delete process.env.AWS_RUNTIME_HOME_DIR;
|
|
1900
|
+
delete process.env.AWS_RUNTIME_ACODE_CONFIG_FILE;
|
|
1901
|
+
CapturingConfigRuntime.lastConfig = undefined;
|
|
1902
|
+
await rm(tempDir, { recursive: true, force: true });
|
|
1903
|
+
});
|
|
1904
|
+
it("无 instance 覆盖时使用全局 acode.json 的 model 与 configPath", async () => {
|
|
1905
|
+
const adapter = new AcodeSdkAdapter();
|
|
1906
|
+
adapter.setRuntimeConstructorForTest(CapturingConfigRuntime);
|
|
1907
|
+
await adapter.startSession("s-default", {
|
|
1908
|
+
command: "acode",
|
|
1909
|
+
workingDirectory: process.cwd(),
|
|
1910
|
+
autoAccept: true,
|
|
1911
|
+
extraMcpServers: {},
|
|
1912
|
+
envOverrides: {},
|
|
1913
|
+
});
|
|
1914
|
+
expect(CapturingConfigRuntime.lastConfig?.configPath).toBe(globalAcodePath);
|
|
1915
|
+
expect(CapturingConfigRuntime.lastConfig?.model).toBe("global-model");
|
|
1916
|
+
adapter.cleanup();
|
|
1917
|
+
});
|
|
1918
|
+
it("per-instance instanceAiConfig.model 覆盖全局 model", async () => {
|
|
1919
|
+
const adapter = new AcodeSdkAdapter();
|
|
1920
|
+
adapter.setRuntimeConstructorForTest(CapturingConfigRuntime);
|
|
1921
|
+
await adapter.startSession("s-instance-model", {
|
|
1922
|
+
command: "acode",
|
|
1923
|
+
workingDirectory: process.cwd(),
|
|
1924
|
+
autoAccept: true,
|
|
1925
|
+
mcpConfigPath: perInstanceAcodePath,
|
|
1926
|
+
instanceAiConfig: { model: "instance-model" },
|
|
1927
|
+
extraMcpServers: {},
|
|
1928
|
+
envOverrides: {},
|
|
1929
|
+
});
|
|
1930
|
+
// 没有 per-instance 文件时,adapter 仍使用调用方传入的 mcpConfigPath
|
|
1931
|
+
expect(CapturingConfigRuntime.lastConfig?.configPath).toBe(perInstanceAcodePath);
|
|
1932
|
+
expect(CapturingConfigRuntime.lastConfig?.model).toBe("instance-model");
|
|
1933
|
+
adapter.cleanup();
|
|
1934
|
+
});
|
|
1935
|
+
it("per-instance 文件已 deep-merge 时,baseURL/apiKey 从文件读取(instance 优先)", async () => {
|
|
1936
|
+
const { writeFile } = await import("node:fs/promises");
|
|
1937
|
+
await writeFile(perInstanceAcodePath, JSON.stringify({
|
|
1938
|
+
provider: {
|
|
1939
|
+
default: {
|
|
1940
|
+
model: "instance-file-model",
|
|
1941
|
+
options: {
|
|
1942
|
+
baseURL: "https://instance.example.com/v1",
|
|
1943
|
+
apiKey: "sk-instance",
|
|
1944
|
+
},
|
|
1945
|
+
},
|
|
1946
|
+
},
|
|
1947
|
+
mcpServers: { "kept-from-global": { type: "stdio", command: "x" } },
|
|
1948
|
+
}), "utf-8");
|
|
1949
|
+
const adapter = new AcodeSdkAdapter();
|
|
1950
|
+
adapter.setRuntimeConstructorForTest(CapturingConfigRuntime);
|
|
1951
|
+
await adapter.startSession("s-instance-file", {
|
|
1952
|
+
command: "acode",
|
|
1953
|
+
workingDirectory: process.cwd(),
|
|
1954
|
+
autoAccept: true,
|
|
1955
|
+
mcpConfigPath: perInstanceAcodePath,
|
|
1956
|
+
extraMcpServers: {},
|
|
1957
|
+
envOverrides: {},
|
|
1958
|
+
});
|
|
1959
|
+
expect(CapturingConfigRuntime.lastConfig?.configPath).toBe(perInstanceAcodePath);
|
|
1960
|
+
// model 走 per-instance 文件的 provider.default.model
|
|
1961
|
+
expect(CapturingConfigRuntime.lastConfig?.model).toBe("instance-file-model");
|
|
1962
|
+
adapter.cleanup();
|
|
1963
|
+
});
|
|
1964
|
+
it("per-session model 优先于 per-instance file model 与全局", async () => {
|
|
1965
|
+
const { writeFile } = await import("node:fs/promises");
|
|
1966
|
+
await writeFile(perInstanceAcodePath, JSON.stringify({
|
|
1967
|
+
provider: {
|
|
1968
|
+
default: { model: "instance-file-model" },
|
|
1969
|
+
},
|
|
1970
|
+
}), "utf-8");
|
|
1971
|
+
const adapter = new AcodeSdkAdapter();
|
|
1972
|
+
adapter.setRuntimeConstructorForTest(CapturingConfigRuntime);
|
|
1973
|
+
await adapter.startSession("s-session-wins", {
|
|
1974
|
+
command: "acode",
|
|
1975
|
+
workingDirectory: process.cwd(),
|
|
1976
|
+
autoAccept: true,
|
|
1977
|
+
mcpConfigPath: perInstanceAcodePath,
|
|
1978
|
+
model: "session-model",
|
|
1979
|
+
extraMcpServers: {},
|
|
1980
|
+
envOverrides: {},
|
|
1981
|
+
});
|
|
1982
|
+
expect(CapturingConfigRuntime.lastConfig?.model).toBe("session-model");
|
|
1983
|
+
adapter.cleanup();
|
|
1984
|
+
});
|
|
1985
|
+
it("全空时回退默认 'acode-default'", async () => {
|
|
1986
|
+
const adapter = new AcodeSdkAdapter();
|
|
1987
|
+
adapter.setRuntimeConstructorForTest(CapturingConfigRuntime);
|
|
1988
|
+
await adapter.startSession("s-all-empty", {
|
|
1989
|
+
command: "acode",
|
|
1990
|
+
workingDirectory: process.cwd(),
|
|
1991
|
+
autoAccept: true,
|
|
1992
|
+
// 指向一个不存在的 per-instance 文件,模拟 instance & global 都为空
|
|
1993
|
+
mcpConfigPath: perInstanceAcodePath,
|
|
1994
|
+
extraMcpServers: {},
|
|
1995
|
+
envOverrides: {},
|
|
1996
|
+
});
|
|
1997
|
+
expect(CapturingConfigRuntime.lastConfig?.model).toBe("acode-default");
|
|
1998
|
+
adapter.cleanup();
|
|
1999
|
+
});
|
|
2000
|
+
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClaudeSdkAdapter.d.ts","sourceRoot":"","sources":["../../src/adapter/ClaudeSdkAdapter.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ClaudeSdkAdapter.d.ts","sourceRoot":"","sources":["../../src/adapter/ClaudeSdkAdapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1005,7 +1005,23 @@ export class ClaudeSdkAdapter extends EventEmitter {
|
|
|
1005
1005
|
});
|
|
1006
1006
|
// ★ 更新状态为等待输入
|
|
1007
1007
|
session.status = 'waiting_input';
|
|
1008
|
-
|
|
1008
|
+
// ★ 修复:当空闲检测即将重新启动 poll_message 轮询时,在 status-change 中
|
|
1009
|
+
// 保留 idle 动作信息,避免 bridge 清空动作字段导致前端显示 "空闲"。
|
|
1010
|
+
const willResumePolling = (() => {
|
|
1011
|
+
const idleCmds = this.idleCommands.get(sessionId);
|
|
1012
|
+
return Boolean(idleCmds?.idleInputCommand && this.isMessagePollingIdleCommand(idleCmds.idleInputCommand));
|
|
1013
|
+
})();
|
|
1014
|
+
if (willResumePolling) {
|
|
1015
|
+
this.emit('status-change', sessionId, 'waiting_input', {
|
|
1016
|
+
actionType: 'idle',
|
|
1017
|
+
actionLabel: '监听消息',
|
|
1018
|
+
actionDetail: 'aws-mcp/poll_message',
|
|
1019
|
+
usage: session.totalUsage,
|
|
1020
|
+
});
|
|
1021
|
+
}
|
|
1022
|
+
else {
|
|
1023
|
+
this.emit('status-change', sessionId, 'waiting_input', { usage: session.totalUsage });
|
|
1024
|
+
}
|
|
1009
1025
|
// 如果有空闲命令配置,启动空闲检测
|
|
1010
1026
|
if (this.idleCommands.has(sessionId)) {
|
|
1011
1027
|
this.startIdleDetection(sessionId);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CodexSdkAdapter.d.ts","sourceRoot":"","sources":["../../src/adapter/CodexSdkAdapter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAiB3C,OAAO,KAAK,EAEV,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EAEnB,aAAa,EAEd,MAAM,YAAY,CAAC;AA2RpB,qBAAa,eAAgB,SAAQ,YAAa,YAAW,mBAAmB;IAC9E,QAAQ,CAAC,UAAU,WAAW;IAC9B,QAAQ,CAAC,WAAW,WAAW;IAE/B,OAAO,CAAC,QAAQ,CAAwC;IACxD,OAAO,CAAC,SAAS,CAAC,CAAiB;IAE7B,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IAmE5E,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqC9D,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAKrE,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAI7F,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE;QAAE,gBAAgB,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAanG,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKlD,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBlD,aAAa,CACjB,SAAS,EAAE,MAAM,EACjB,iBAAiB,EAAE,MAAM,EACzB,MAAM,EAAE,oBAAoB,GAC3B,OAAO,CAAC,IAAI,CAAC;IA4BhB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,mBAAmB,EAAE;IAIzD,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAItC,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAK3D,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAI9D,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAIrD,OAAO,IAAI,IAAI;IAOf;;;OAGG;YACW,OAAO;IA6BrB,OAAO,CAAC,iBAAiB;IA8BzB,OAAO,CAAC,wBAAwB;IAYhC,OAAO,CAAC,kBAAkB;YAqCZ,OAAO;IAiCrB,OAAO,CAAC,iBAAiB;IAgCzB,OAAO,CAAC,gBAAgB;IA+ExB,OAAO,CAAC,aAAa;IAgBrB,OAAO,CAAC,kBAAkB;IAe1B,OAAO,CAAC,kBAAkB;IAuD1B,OAAO,CAAC,YAAY;
|
|
1
|
+
{"version":3,"file":"CodexSdkAdapter.d.ts","sourceRoot":"","sources":["../../src/adapter/CodexSdkAdapter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAiB3C,OAAO,KAAK,EAEV,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EAEnB,aAAa,EAEd,MAAM,YAAY,CAAC;AA2RpB,qBAAa,eAAgB,SAAQ,YAAa,YAAW,mBAAmB;IAC9E,QAAQ,CAAC,UAAU,WAAW;IAC9B,QAAQ,CAAC,WAAW,WAAW;IAE/B,OAAO,CAAC,QAAQ,CAAwC;IACxD,OAAO,CAAC,SAAS,CAAC,CAAiB;IAE7B,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IAmE5E,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqC9D,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAKrE,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAI7F,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE;QAAE,gBAAgB,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAanG,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKlD,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBlD,aAAa,CACjB,SAAS,EAAE,MAAM,EACjB,iBAAiB,EAAE,MAAM,EACzB,MAAM,EAAE,oBAAoB,GAC3B,OAAO,CAAC,IAAI,CAAC;IA4BhB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,mBAAmB,EAAE;IAIzD,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAItC,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAK3D,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAI9D,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAIrD,OAAO,IAAI,IAAI;IAOf;;;OAGG;YACW,OAAO;IA6BrB,OAAO,CAAC,iBAAiB;IA8BzB,OAAO,CAAC,wBAAwB;IAYhC,OAAO,CAAC,kBAAkB;YAqCZ,OAAO;IAiCrB,OAAO,CAAC,iBAAiB;IAgCzB,OAAO,CAAC,gBAAgB;IA+ExB,OAAO,CAAC,aAAa;IAgBrB,OAAO,CAAC,kBAAkB;IAe1B,OAAO,CAAC,kBAAkB;IAuD1B,OAAO,CAAC,YAAY;IA0CpB,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,kBAAkB;IA2C1B,OAAO,CAAC,iBAAiB;IASzB,OAAO,CAAC,cAAc;YAcR,cAAc;IAyB5B,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,2BAA2B;CAOpC"}
|
|
@@ -714,7 +714,21 @@ export class CodexSdkAdapter extends EventEmitter {
|
|
|
714
714
|
}
|
|
715
715
|
this.emitEvent({ type: 'turn_complete', sessionId, timestamp, data: { usage: mappedUsage } });
|
|
716
716
|
session.adapterSession.status = 'waiting_input';
|
|
717
|
-
|
|
717
|
+
// ★ 修复:当空闲检测即将重新启动 poll_message 轮询时,在 status-change 中
|
|
718
|
+
// 保留 idle 动作信息,避免 bridge 清空动作字段导致前端显示 "空闲"。
|
|
719
|
+
const idleInputCommand = session.idleCommands?.idleInputCommand;
|
|
720
|
+
const willResumePolling = Boolean(idleInputCommand && this.isMessagePollingIdleCommand(idleInputCommand));
|
|
721
|
+
if (willResumePolling) {
|
|
722
|
+
this.emit('status-change', sessionId, 'waiting_input', {
|
|
723
|
+
actionType: 'idle',
|
|
724
|
+
actionLabel: '监听消息',
|
|
725
|
+
actionDetail: 'aws-mcp/poll_message',
|
|
726
|
+
usage: mappedUsage,
|
|
727
|
+
});
|
|
728
|
+
}
|
|
729
|
+
else {
|
|
730
|
+
this.emit('status-change', sessionId, 'waiting_input');
|
|
731
|
+
}
|
|
718
732
|
session.lastActivityAt = Date.now();
|
|
719
733
|
this.startIdleDetection(sessionId);
|
|
720
734
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OpencodeSdkAdapter.d.ts","sourceRoot":"","sources":["../../src/adapter/OpencodeSdkAdapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAiB3C,OAAO,EAKL,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EAExB,KAAK,aAAa,EACnB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"OpencodeSdkAdapter.d.ts","sourceRoot":"","sources":["../../src/adapter/OpencodeSdkAdapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAiB3C,OAAO,EAKL,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EAExB,KAAK,aAAa,EACnB,MAAM,YAAY,CAAC;AA8HpB,qBAAa,kBAAmB,SAAQ,YAAa,YAAW,mBAAmB;IACjF,QAAQ,CAAC,UAAU,cAAc;IACjC,QAAQ,CAAC,WAAW,cAAc;IAElC,OAAO,CAAC,QAAQ,CAA2C;IAC3D,OAAO,CAAC,SAAS,CAAC,CAAoB;IAEhC,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IA2J5E,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,iBAAiB,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAqDzG,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBnE,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAI7F,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE;QAAE,gBAAgB,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAUnG,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAclD,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA4BxD,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,mBAAmB,EAAE;IAIzD,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAItC,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAI3D,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAI9D,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAOpD,OAAO,IAAI,IAAI;IAaf;;;OAGG;YACW,OAAO;YA2BP,aAAa;IAmB3B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAO3B;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAahC;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAY7B,OAAO,CAAC,YAAY;YAYN,UAAU;IAuBxB,OAAO,CAAC,mBAAmB;IAiJ3B,OAAO,CAAC,gBAAgB;IAkHxB,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,kBAAkB;IAuC1B,OAAO,CAAC,iBAAiB;IASzB,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,2BAA2B;CAOpC"}
|
|
@@ -84,6 +84,23 @@ function hasErrorCode(error) {
|
|
|
84
84
|
function isMissingPackageError(error, packageName) {
|
|
85
85
|
return hasErrorCode(error) && error.code === 'ERR_MODULE_NOT_FOUND' && error.message.includes(packageName);
|
|
86
86
|
}
|
|
87
|
+
// ============ 模型解析 ============
|
|
88
|
+
/**
|
|
89
|
+
* 解析 OpenCode 模型规格。
|
|
90
|
+
* OpenCode 原生格式为 "provider/model"(如 "anthropic/claude-sonnet-4-5")。
|
|
91
|
+
* 若用户只提供模型名(不含 "/"),则仅返回 modelID,providerID 留空让 OpenCode 自动选择。
|
|
92
|
+
*/
|
|
93
|
+
function parseOpenCodeModelSpec(model) {
|
|
94
|
+
if (!model || !model.trim())
|
|
95
|
+
return undefined;
|
|
96
|
+
const trimmed = model.trim();
|
|
97
|
+
const slashIndex = trimmed.indexOf('/');
|
|
98
|
+
if (slashIndex > 0) {
|
|
99
|
+
return { providerID: trimmed.slice(0, slashIndex), modelID: trimmed.slice(slashIndex + 1) };
|
|
100
|
+
}
|
|
101
|
+
// 纯模型名,无 provider 前缀
|
|
102
|
+
return { modelID: trimmed };
|
|
103
|
+
}
|
|
87
104
|
// ============ Adapter ============
|
|
88
105
|
export class OpencodeSdkAdapter extends EventEmitter {
|
|
89
106
|
constructor() {
|
|
@@ -127,6 +144,14 @@ export class OpencodeSdkAdapter extends EventEmitter {
|
|
|
127
144
|
(process.platform === 'win32' && !path.isAbsolute(openCodeCommand));
|
|
128
145
|
console.log(`[OpencodeSdkAdapter] shell=${useShell}`);
|
|
129
146
|
const env = { ...process.env, ...config.envOverrides };
|
|
147
|
+
// ★ 实例级模型覆盖:通过 OPENCODE_CONFIG_CONTENT 注入(OpenCode 标准 inline config,优先级 6)
|
|
148
|
+
// 参考:https://opencode.ai/docs/config/ — "Inline config (OPENCODE_CONFIG_CONTENT env var) - runtime overrides"
|
|
149
|
+
const parsedModel = parseOpenCodeModelSpec(config.model);
|
|
150
|
+
if (parsedModel?.modelID) {
|
|
151
|
+
const inlineConfig = { model: config.model.trim() };
|
|
152
|
+
env.OPENCODE_CONFIG_CONTENT = JSON.stringify(inlineConfig);
|
|
153
|
+
console.log(`[OpencodeSdkAdapter] ★★★ 实例级模型覆盖 ★★★ OPENCODE_CONFIG_CONTENT=${env.OPENCODE_CONFIG_CONTENT}`);
|
|
154
|
+
}
|
|
130
155
|
const proc = spawn(openCodeCommand, ['serve', '--port', String(port)], {
|
|
131
156
|
cwd: config.workingDirectory,
|
|
132
157
|
stdio: ['ignore', 'pipe', 'pipe'],
|
|
@@ -236,11 +261,19 @@ export class OpencodeSdkAdapter extends EventEmitter {
|
|
|
236
261
|
this.stopIdleDetection(sessionId);
|
|
237
262
|
}
|
|
238
263
|
try {
|
|
264
|
+
// ★ 实例级模型覆盖:per-message model override
|
|
265
|
+
// 仅当模型含 "provider/model" 格式时传入(OpenCode SDK 要求 providerID + modelID)
|
|
266
|
+
const parsedModel = parseOpenCodeModelSpec(session.config.model);
|
|
267
|
+
const promptBody = {
|
|
268
|
+
parts: [{ type: 'text', text: message }],
|
|
269
|
+
};
|
|
270
|
+
if (parsedModel?.providerID && parsedModel?.modelID) {
|
|
271
|
+
promptBody.model = { providerID: parsedModel.providerID, modelID: parsedModel.modelID };
|
|
272
|
+
console.log(`[OpencodeSdkAdapter] ★★★ per-message model ★★★ provider=${parsedModel.providerID}, model=${parsedModel.modelID}`);
|
|
273
|
+
}
|
|
239
274
|
await session.client.session.prompt({
|
|
240
275
|
path: { id: session.opencodeSessionId },
|
|
241
|
-
body:
|
|
242
|
-
parts: [{ type: 'text', text: message }],
|
|
243
|
-
},
|
|
276
|
+
body: promptBody,
|
|
244
277
|
query: { directory: session.workingDirectory },
|
|
245
278
|
});
|
|
246
279
|
}
|
|
@@ -517,7 +550,26 @@ export class OpencodeSdkAdapter extends EventEmitter {
|
|
|
517
550
|
data: { usage: session.adapterSession.totalUsage },
|
|
518
551
|
});
|
|
519
552
|
session.adapterSession.status = 'waiting_input';
|
|
520
|
-
|
|
553
|
+
// ★ 修复:当空闲检测即将重新启动 poll_message 轮询时,在 status-change 中
|
|
554
|
+
// 保留 idle 动作信息,避免 bridge 清空动作字段导致前端显示 "空闲"。
|
|
555
|
+
// 核心场景:agent 处理完一轮消息后 session.idle 触发,此时 last action
|
|
556
|
+
// 是工作工具(bash/edit_file 等),而非 idle/mcp。如果此处不传递动作信息,
|
|
557
|
+
// bridge 的 shouldPreservePrevAction 判定会因 last action type 不匹配而
|
|
558
|
+
// 跳过保留,轮询恢复前出现 "空闲" 闪显。
|
|
559
|
+
const idleInputCommand = session.idleCommands?.idleInputCommand;
|
|
560
|
+
const willResumePolling = Boolean(idleInputCommand && this.isMessagePollingIdleCommand(idleInputCommand));
|
|
561
|
+
if (willResumePolling) {
|
|
562
|
+
// 传递预置的 idle 动作信息,让 bridge 直接更新/保留 poll_message 动作显示
|
|
563
|
+
this.emit('status-change', sessionId, 'waiting_input', {
|
|
564
|
+
actionType: 'idle',
|
|
565
|
+
actionLabel: '监听消息',
|
|
566
|
+
actionDetail: 'aws-mcp/poll_message',
|
|
567
|
+
usage: session.adapterSession.totalUsage,
|
|
568
|
+
});
|
|
569
|
+
}
|
|
570
|
+
else {
|
|
571
|
+
this.emit('status-change', sessionId, 'waiting_input', { usage: session.adapterSession.totalUsage });
|
|
572
|
+
}
|
|
521
573
|
this.startIdleDetection(sessionId);
|
|
522
574
|
break;
|
|
523
575
|
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Instance AI 配置仲裁器
|
|
3
|
+
*
|
|
4
|
+
* 按 "instance > global > default" 三层优先级仲裁 ACode 的
|
|
5
|
+
* model/baseURL/apiKey 配置。
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* 实例级 AI 配置(来自 per-session model + per-instance instanceAiConfig)。
|
|
9
|
+
*/
|
|
10
|
+
export interface InstanceAiConfig {
|
|
11
|
+
model?: string;
|
|
12
|
+
baseURL?: string;
|
|
13
|
+
apiKey?: string;
|
|
14
|
+
effort?: string;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* 仲裁结果。
|
|
18
|
+
*/
|
|
19
|
+
export interface ResolvedAcodeProviderConfig {
|
|
20
|
+
/** 最终选定的 model */
|
|
21
|
+
model: string;
|
|
22
|
+
/** 最终选定的 baseURL,可能为空 */
|
|
23
|
+
baseURL?: string;
|
|
24
|
+
/** 最终选定的 apiKey,可能为空 */
|
|
25
|
+
apiKey?: string;
|
|
26
|
+
/** 最终选定的 effort,可能为空 */
|
|
27
|
+
effort?: string;
|
|
28
|
+
/** 各字段的来源标签 */
|
|
29
|
+
source: {
|
|
30
|
+
model: string;
|
|
31
|
+
baseURL: string;
|
|
32
|
+
apiKey: string;
|
|
33
|
+
effort: string;
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* 仲裁 ACode provider 配置。
|
|
38
|
+
*
|
|
39
|
+
* 优先级:instance > global > default
|
|
40
|
+
* - instance:来自 per-session model + per-instance instanceAiConfig
|
|
41
|
+
* - global:来自 acode.json 顶层 provider.default
|
|
42
|
+
* - default:调用方提供的默认值
|
|
43
|
+
*
|
|
44
|
+
* @param instanceConfig 请求级实例配置(含 perSessionModel 覆盖后的 instanceAiConfig)
|
|
45
|
+
* @param globalConfig 全局 acode.json 中的 provider.default 层
|
|
46
|
+
* @param defaultModel 兜底默认模型名
|
|
47
|
+
*/
|
|
48
|
+
export declare function resolveAcodeProviderConfig(instanceConfig: InstanceAiConfig, globalConfig: InstanceAiConfig | undefined, defaultModel: string): ResolvedAcodeProviderConfig;
|
|
49
|
+
//# sourceMappingURL=instance-ai-config-resolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instance-ai-config-resolver.d.ts","sourceRoot":"","sources":["../../src/adapter/instance-ai-config-resolver.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C,kBAAkB;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,yBAAyB;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,wBAAwB;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,wBAAwB;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe;IACf,MAAM,EAAE;QACN,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAeD;;;;;;;;;;;GAWG;AACH,wBAAgB,0BAA0B,CACxC,cAAc,EAAE,gBAAgB,EAChC,YAAY,EAAE,gBAAgB,GAAG,SAAS,EAC1C,YAAY,EAAE,MAAM,GACnB,2BAA2B,CAkC7B"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Instance AI 配置仲裁器
|
|
3
|
+
*
|
|
4
|
+
* 按 "instance > global > default" 三层优先级仲裁 ACode 的
|
|
5
|
+
* model/baseURL/apiKey 配置。
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* 解析来源标签。
|
|
9
|
+
*/
|
|
10
|
+
function pickSource(instanceVal, globalVal, _defaultLabel) {
|
|
11
|
+
if (instanceVal !== undefined)
|
|
12
|
+
return { value: instanceVal, source: "instance" };
|
|
13
|
+
if (globalVal !== undefined)
|
|
14
|
+
return { value: globalVal, source: "global" };
|
|
15
|
+
return { value: undefined, source: _defaultLabel ?? "default" };
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* 仲裁 ACode provider 配置。
|
|
19
|
+
*
|
|
20
|
+
* 优先级:instance > global > default
|
|
21
|
+
* - instance:来自 per-session model + per-instance instanceAiConfig
|
|
22
|
+
* - global:来自 acode.json 顶层 provider.default
|
|
23
|
+
* - default:调用方提供的默认值
|
|
24
|
+
*
|
|
25
|
+
* @param instanceConfig 请求级实例配置(含 perSessionModel 覆盖后的 instanceAiConfig)
|
|
26
|
+
* @param globalConfig 全局 acode.json 中的 provider.default 层
|
|
27
|
+
* @param defaultModel 兜底默认模型名
|
|
28
|
+
*/
|
|
29
|
+
export function resolveAcodeProviderConfig(instanceConfig, globalConfig, defaultModel) {
|
|
30
|
+
const modelResult = pickSource(instanceConfig.model, globalConfig?.model, defaultModel);
|
|
31
|
+
const baseURLResult = pickSource(instanceConfig.baseURL, globalConfig?.baseURL, undefined);
|
|
32
|
+
const apiKeyResult = pickSource(instanceConfig.apiKey, globalConfig?.apiKey, undefined);
|
|
33
|
+
const effortResult = pickSource(instanceConfig.effort, globalConfig?.effort, undefined);
|
|
34
|
+
return {
|
|
35
|
+
model: modelResult.value ?? defaultModel,
|
|
36
|
+
...(baseURLResult.value ? { baseURL: baseURLResult.value } : {}),
|
|
37
|
+
...(apiKeyResult.value ? { apiKey: apiKeyResult.value } : {}),
|
|
38
|
+
...(effortResult.value ? { effort: effortResult.value } : {}),
|
|
39
|
+
source: {
|
|
40
|
+
model: modelResult.source,
|
|
41
|
+
baseURL: baseURLResult.source,
|
|
42
|
+
apiKey: apiKeyResult.source,
|
|
43
|
+
effort: effortResult.source,
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
}
|
package/dist/adapter/types.d.ts
CHANGED
|
@@ -57,12 +57,16 @@ export declare function getToolActionInfo(toolName: string | undefined, toolInpu
|
|
|
57
57
|
export interface RuntimeTokenUsage {
|
|
58
58
|
inputTokens: number;
|
|
59
59
|
outputTokens: number;
|
|
60
|
+
/** Model context window token limit used for the used/limit display. */
|
|
61
|
+
contextLimit?: number;
|
|
60
62
|
}
|
|
61
63
|
export type CommandOutputStream = "stdout" | "stderr" | "mixed";
|
|
62
64
|
export interface RuntimeStatusActionInfo {
|
|
63
65
|
actionType?: ToolActionType;
|
|
64
66
|
actionLabel?: string;
|
|
65
67
|
actionDetail?: string;
|
|
68
|
+
/** 工具调用输入参数的 JSON 序列化字符串,用于在时间线上展示 */
|
|
69
|
+
actionInput?: string;
|
|
66
70
|
actionResult?: string;
|
|
67
71
|
actionId?: string;
|
|
68
72
|
usage?: RuntimeTokenUsage;
|
|
@@ -144,11 +148,27 @@ export interface ProviderEvent {
|
|
|
144
148
|
commandLineCount?: number;
|
|
145
149
|
};
|
|
146
150
|
}
|
|
151
|
+
/**
|
|
152
|
+
* 实例自配置 AI provider 覆盖(仅 ACode 适配器消费)。
|
|
153
|
+
*
|
|
154
|
+
* 优先级:API 请求体(per-launch)> 环境变量 > bridge 下的 instance-acode-config.json 文件。
|
|
155
|
+
* 实例配置优先于 acode.json 全局 provider.default 配置;AcodeSdkAdapter 内部按
|
|
156
|
+
* "instance > global > default" 三层逐字段仲裁 model / baseURL / apiKey。
|
|
157
|
+
*/
|
|
158
|
+
export interface AdapterInstanceAiConfig {
|
|
159
|
+
model?: string;
|
|
160
|
+
baseURL?: string;
|
|
161
|
+
apiKey?: string;
|
|
162
|
+
/** Per-instance model reasoning effort (minimal|low|medium|high|xhigh) */
|
|
163
|
+
effort?: string;
|
|
164
|
+
}
|
|
147
165
|
export interface AdapterSessionConfig {
|
|
148
166
|
/** CLI 命令(支持绝对路径) */
|
|
149
167
|
command: string;
|
|
150
168
|
/** 工作目录 */
|
|
151
169
|
workingDirectory: string;
|
|
170
|
+
/** Agent ID(用于 spillover 文件路径隔离) */
|
|
171
|
+
agentId?: string;
|
|
152
172
|
/** 初始 prompt(创建会话后自动发送) */
|
|
153
173
|
initialPrompt?: string;
|
|
154
174
|
/** 初始 prompt 是否显示为用户消息 */
|
|
@@ -161,14 +181,20 @@ export interface AdapterSessionConfig {
|
|
|
161
181
|
preset: string;
|
|
162
182
|
append: string;
|
|
163
183
|
};
|
|
164
|
-
/**
|
|
184
|
+
/** 模型名称覆盖(per-session 粒度,优先级最高) */
|
|
165
185
|
model?: string;
|
|
166
186
|
/** 最大对话轮次(0=无限) */
|
|
167
187
|
maxTurns?: number;
|
|
168
188
|
/** 允许的工具列表(空=全部) */
|
|
169
189
|
allowedTools?: string[];
|
|
170
|
-
/** MCP
|
|
190
|
+
/** MCP 配置路径;如为 per-instance 文件则由 instance-ai-config-service 写入 */
|
|
171
191
|
mcpConfigPath?: string;
|
|
192
|
+
/**
|
|
193
|
+
* 实例自配置 AI provider 覆盖(仅 ACode 消费)。AcodeSdkAdapter 内部会按
|
|
194
|
+
* "instance > global > default" 优先级仲裁,并将 baseURL/apiKey 写入
|
|
195
|
+
* per-instance acode.json 后作为 configPath 使用。
|
|
196
|
+
*/
|
|
197
|
+
instanceAiConfig?: AdapterInstanceAiConfig;
|
|
172
198
|
/** Provider 特定参数 */
|
|
173
199
|
providerArgs?: string[];
|
|
174
200
|
/** 环境变量覆盖 */
|
|
@@ -199,6 +225,7 @@ export interface AdapterSession {
|
|
|
199
225
|
totalUsage: {
|
|
200
226
|
inputTokens: number;
|
|
201
227
|
outputTokens: number;
|
|
228
|
+
contextLimit?: number;
|
|
202
229
|
};
|
|
203
230
|
/** SDK 进程 PID(用于检测进程是否存活) */
|
|
204
231
|
pid?: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/adapter/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAI3C,MAAM,MAAM,aAAa,GACrB,UAAU,GACV,UAAU,GACV,YAAY,GACZ,eAAe,GACf,WAAW,GACX,YAAY,GACZ,OAAO,CAAC;AAIZ,MAAM,MAAM,iBAAiB,GACzB,YAAY,GACZ,YAAY,GACZ,UAAU,GACV,gBAAgB,GAChB,gBAAgB,GAChB,cAAc,GACd,oBAAoB,GACpB,mBAAmB,GACnB,gBAAgB,GAChB,eAAe,GACf,kBAAkB,GAClB,OAAO,CAAC;AAIZ;;;GAGG;AACH,MAAM,MAAM,cAAc,GACtB,OAAO,GACP,KAAK,GACL,MAAM,GACN,WAAW,GACX,YAAY,GACZ,WAAW,GACX,MAAM,GACN,QAAQ,GACR,KAAK,GACL,YAAY,GACZ,KAAK,GACL,UAAU,GACV,OAAO,CAAC;AAEZ;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,aAAa;IACb,UAAU,EAAE,cAAc,CAAC;IAC3B,iBAAiB;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,qBAAqB;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,iCAAiC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY;IACZ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAUD;;;GAGG;AACH,wBAAgB,kCAAkC,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQvE;AAED;;;GAGG;AACH,wBAAgB,iCAAiC,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAWvE;AAED;;GAEG;AACH,wBAAgB,yCAAyC,CACvD,KAAK,EAAE,OAAO,GACb,OAAO,CAgBT;AA4CD,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAsBjE;AAWD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnC,QAAQ,CAAC,EAAE,YAAY,GACtB,cAAc,CA8ahB;AAED,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/adapter/types.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -18,6 +18,7 @@ import { mcpRouter } from "./routes/mcp.js";
|
|
|
18
18
|
import { terminalRouter, sdkSessions } from "./routes/terminal.js";
|
|
19
19
|
import { sessionsRouter } from "./routes/sessions.js";
|
|
20
20
|
import { gitRouter } from "./routes/git.js";
|
|
21
|
+
import { fileSnapshotRouter } from "./routes/file-snapshot.js";
|
|
21
22
|
import { memoryRouter } from "./routes/memory.js";
|
|
22
23
|
import { fileBrowserRouter } from "./routes/file-browser.js";
|
|
23
24
|
import { aiSourcesRouter } from "./routes/ai-sources.js";
|
|
@@ -26,6 +27,7 @@ import { systemMetricsRouter } from "./routes/system-metrics.js";
|
|
|
26
27
|
import { attachPtyWebSocketServer, closeAllPtySessions, ptyRouter, ptySessions, } from "./routes/pty.js";
|
|
27
28
|
import { runtimeBindingRouter, logRuntimeBindingStartupState, } from "./routes/runtime-binding.js";
|
|
28
29
|
import { dashboardRouter } from "./routes/dashboard.js";
|
|
30
|
+
import { eventsRouter } from "./routes/events.js";
|
|
29
31
|
import { loadPersistedSessions, savePersistedSessions, } from "./services/terminal-persistence.js";
|
|
30
32
|
import { detectOrphanProcesses } from "./services/process-detector.js";
|
|
31
33
|
import { startOrphanMonitor, stopOrphanMonitor, } from "./services/orphan-monitor.js";
|
|
@@ -295,7 +297,9 @@ app.use("/runtime", terminalRouter);
|
|
|
295
297
|
app.use("/runtime", sessionsRouter);
|
|
296
298
|
app.use("/runtime", processesRouter);
|
|
297
299
|
app.use("/runtime", systemMetricsRouter);
|
|
300
|
+
app.use("/runtime", eventsRouter);
|
|
298
301
|
app.use("/runtime", gitRouter);
|
|
302
|
+
app.use("/runtime", fileSnapshotRouter);
|
|
299
303
|
app.use("/runtime", memoryRouter);
|
|
300
304
|
app.use("/runtime", aiSourcesRouter);
|
|
301
305
|
app.use("/pty", ptyRouter);
|
|
@@ -473,7 +477,7 @@ async function gracefulShutdown(signal, server, preserveSessions = false) {
|
|
|
473
477
|
logger.info(`[runtime-bridge] 优雅关闭完成 (耗时 ${elapsed}ms),停止 ${sdkCount} SDK 会话`);
|
|
474
478
|
server.close(() => {
|
|
475
479
|
logger.info("[runtime-bridge] HTTP 服务器已关闭");
|
|
476
|
-
process.exit(0);
|
|
480
|
+
process.exit(process.exitCode || 0);
|
|
477
481
|
});
|
|
478
482
|
// 强制退出超时(防止卡住)
|
|
479
483
|
setTimeout(() => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../src/routes/dashboard.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../src/routes/dashboard.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAuFH,eAAO,MAAM,eAAe,4CAAW,CAAC"}
|