linkshell-cli 0.9.0 → 0.10.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.
- package/README.md +11 -6
- package/dist/cli/src/commands/gateway.d.ts +2 -0
- package/dist/cli/src/commands/gateway.js +29 -0
- package/dist/cli/src/commands/gateway.js.map +1 -0
- package/dist/cli/src/commands/host.d.ts +2 -0
- package/dist/cli/src/commands/host.js +12 -2
- package/dist/cli/src/commands/host.js.map +1 -1
- package/dist/cli/src/commands/setup.js +4 -2
- package/dist/cli/src/commands/setup.js.map +1 -1
- package/dist/cli/src/index.js +12 -334
- package/dist/cli/src/index.js.map +1 -1
- package/dist/cli/src/utils/daemon.d.ts +0 -7
- package/dist/cli/src/utils/daemon.js +1 -18
- package/dist/cli/src/utils/daemon.js.map +1 -1
- package/dist/cli/tsconfig.tsbuildinfo +1 -1
- package/dist/gateway/src/accounts.d.ts +6 -0
- package/dist/gateway/src/accounts.js +32 -0
- package/dist/gateway/src/accounts.js.map +1 -0
- package/dist/gateway/src/index.d.ts +4 -0
- package/dist/gateway/src/index.js +5 -0
- package/dist/gateway/src/index.js.map +1 -0
- package/dist/gateway/src/main.d.ts +1 -0
- package/dist/gateway/src/main.js +57 -0
- package/dist/gateway/src/main.js.map +1 -0
- package/dist/gateway/src/rate-limit.d.ts +22 -0
- package/dist/gateway/src/rate-limit.js +66 -0
- package/dist/gateway/src/rate-limit.js.map +1 -0
- package/dist/gateway/src/relay.d.ts +84 -0
- package/dist/gateway/src/relay.js +434 -0
- package/dist/gateway/src/relay.js.map +1 -0
- package/dist/gateway/src/serve.d.ts +34 -0
- package/dist/gateway/src/serve.js +102 -0
- package/dist/gateway/src/serve.js.map +1 -0
- package/dist/gateway/src/store.d.ts +35 -0
- package/dist/gateway/src/store.js +109 -0
- package/dist/gateway/src/store.js.map +1 -0
- package/dist/gateway/src/subscription.d.ts +18 -0
- package/dist/gateway/src/subscription.js +46 -0
- package/dist/gateway/src/subscription.js.map +1 -0
- package/dist/host/src/drivers/claude/transcript.d.ts +23 -23
- package/dist/host/src/fs.d.ts +3 -3
- package/dist/host/src/input.d.ts +4 -4
- package/dist/host/src/terminals.d.ts +1 -1
- package/dist/wire/src/model.d.ts +6 -6
- package/dist/wire/src/relay.d.ts +8 -8
- package/dist/wire/src/rpc.d.ts +818 -818
- package/dist/wire/src/updates.d.ts +18 -18
- package/package.json +4 -13
- package/src/commands/gateway.ts +31 -0
- package/src/commands/host.ts +13 -2
- package/src/commands/setup.ts +4 -2
- package/src/index.ts +14 -429
- package/src/utils/daemon.ts +2 -27
- package/dist/cli/src/config.d.ts +0 -14
- package/dist/cli/src/config.js +0 -23
- package/dist/cli/src/config.js.map +0 -1
- package/dist/cli/src/machine-id.d.ts +0 -6
- package/dist/cli/src/machine-id.js +0 -50
- package/dist/cli/src/machine-id.js.map +0 -1
- package/dist/cli/src/providers.d.ts +0 -13
- package/dist/cli/src/providers.js +0 -77
- package/dist/cli/src/providers.js.map +0 -1
- package/dist/cli/src/runtime/acp/acp-client.d.ts +0 -128
- package/dist/cli/src/runtime/acp/acp-client.js +0 -430
- package/dist/cli/src/runtime/acp/acp-client.js.map +0 -1
- package/dist/cli/src/runtime/acp/agent-process-discovery.d.ts +0 -48
- package/dist/cli/src/runtime/acp/agent-process-discovery.js +0 -278
- package/dist/cli/src/runtime/acp/agent-process-discovery.js.map +0 -1
- package/dist/cli/src/runtime/acp/agent-session.d.ts +0 -62
- package/dist/cli/src/runtime/acp/agent-session.js +0 -1081
- package/dist/cli/src/runtime/acp/agent-session.js.map +0 -1
- package/dist/cli/src/runtime/acp/agent-workspace.d.ts +0 -311
- package/dist/cli/src/runtime/acp/agent-workspace.js +0 -6083
- package/dist/cli/src/runtime/acp/agent-workspace.js.map +0 -1
- package/dist/cli/src/runtime/acp/claude-sdk-client.d.ts +0 -121
- package/dist/cli/src/runtime/acp/claude-sdk-client.js +0 -1147
- package/dist/cli/src/runtime/acp/claude-sdk-client.js.map +0 -1
- package/dist/cli/src/runtime/acp/claude-stream-json-client.d.ts +0 -53
- package/dist/cli/src/runtime/acp/claude-stream-json-client.js +0 -552
- package/dist/cli/src/runtime/acp/claude-stream-json-client.js.map +0 -1
- package/dist/cli/src/runtime/acp/json-rpc.d.ts +0 -22
- package/dist/cli/src/runtime/acp/json-rpc.js +0 -160
- package/dist/cli/src/runtime/acp/json-rpc.js.map +0 -1
- package/dist/cli/src/runtime/acp/provider-resolver.d.ts +0 -16
- package/dist/cli/src/runtime/acp/provider-resolver.js +0 -132
- package/dist/cli/src/runtime/acp/provider-resolver.js.map +0 -1
- package/dist/cli/src/runtime/bridge-session.d.ts +0 -97
- package/dist/cli/src/runtime/bridge-session.js +0 -1364
- package/dist/cli/src/runtime/bridge-session.js.map +0 -1
- package/dist/cli/src/runtime/hook-command.d.ts +0 -9
- package/dist/cli/src/runtime/hook-command.js +0 -80
- package/dist/cli/src/runtime/hook-command.js.map +0 -1
- package/dist/cli/src/runtime/screen-fallback.d.ts +0 -22
- package/dist/cli/src/runtime/screen-fallback.js +0 -202
- package/dist/cli/src/runtime/screen-fallback.js.map +0 -1
- package/dist/cli/src/runtime/screen-share.d.ts +0 -34
- package/dist/cli/src/runtime/screen-share.js +0 -376
- package/dist/cli/src/runtime/screen-share.js.map +0 -1
- package/dist/cli/src/runtime/scrollback.d.ts +0 -11
- package/dist/cli/src/runtime/scrollback.js +0 -33
- package/dist/cli/src/runtime/scrollback.js.map +0 -1
- package/dist/cli/src/runtime/usage-report.d.ts +0 -34
- package/dist/cli/src/runtime/usage-report.js +0 -332
- package/dist/cli/src/runtime/usage-report.js.map +0 -1
- package/dist/cli/src/utils/keep-awake.d.ts +0 -6
- package/dist/cli/src/utils/keep-awake.js +0 -48
- package/dist/cli/src/utils/keep-awake.js.map +0 -1
- package/dist/cli/src/utils/lan-ip.d.ts +0 -9
- package/dist/cli/src/utils/lan-ip.js +0 -61
- package/dist/cli/src/utils/lan-ip.js.map +0 -1
- package/dist/host/src/input-helper.d.ts +0 -1
- package/dist/host/src/input-helper.js +0 -564
- package/dist/host/src/input-helper.js.map +0 -1
- package/dist/shared-protocol/src/index.d.ts +0 -17029
- package/dist/shared-protocol/src/index.js +0 -1064
- package/dist/shared-protocol/src/index.js.map +0 -1
- package/scripts/copy-web.mjs +0 -34
- package/src/config.ts +0 -36
- package/src/machine-id.ts +0 -61
- package/src/providers.ts +0 -97
- package/src/runtime/acp/acp-client.ts +0 -521
- package/src/runtime/acp/agent-process-discovery.ts +0 -308
- package/src/runtime/acp/agent-session.ts +0 -1186
- package/src/runtime/acp/agent-workspace.ts +0 -6590
- package/src/runtime/acp/claude-sdk-client.ts +0 -1221
- package/src/runtime/acp/claude-stream-json-client.ts +0 -633
- package/src/runtime/acp/json-rpc.ts +0 -184
- package/src/runtime/acp/provider-resolver.ts +0 -154
- package/src/runtime/bridge-session.ts +0 -1549
- package/src/runtime/hook-command.ts +0 -73
- package/src/runtime/screen-fallback.ts +0 -235
- package/src/runtime/screen-share.ts +0 -426
- package/src/runtime/scrollback.ts +0 -43
- package/src/runtime/usage-report.ts +0 -342
- package/src/utils/keep-awake.ts +0 -61
- package/src/utils/lan-ip.ts +0 -61
- package/web/assets/FileBrowser-wOAfY-xj.js +0 -2
- package/web/assets/PortPreview-Cbvv7yzA.js +0 -2
- package/web/assets/TerminalPanel-CTSklkct.js +0 -1
- package/web/assets/UsageDashboard-CJ1AsNmd.js +0 -1
- package/web/assets/index-BsnDaeCt.css +0 -33
- package/web/assets/index-q85psYZ5.js +0 -36
- package/web/assets/vendor-highlight-NXWAAyIv.js +0 -5
- package/web/assets/vendor-react-M7xG3qiw.js +0 -49
- package/web/assets/vendor-xterm-D15THcI4.js +0 -9
- package/web/index.html +0 -37
- package/web/logos/claude.png +0 -0
- package/web/logos/codex.png +0 -0
- package/web/logos/copilot.png +0 -0
- package/web/logos/gemini.png +0 -0
- package/web/logos/linkshell-1024.png +0 -0
- package/web/logos/linkshell-splash.png +0 -0
- package/web/logos/linkshell.png +0 -0
|
@@ -1,160 +0,0 @@
|
|
|
1
|
-
import { spawn } from "node:child_process";
|
|
2
|
-
export class JsonRpcStdioTransport {
|
|
3
|
-
command;
|
|
4
|
-
framing;
|
|
5
|
-
onNotification;
|
|
6
|
-
onRequest;
|
|
7
|
-
onExit;
|
|
8
|
-
child;
|
|
9
|
-
nextId = 1;
|
|
10
|
-
pending = new Map();
|
|
11
|
-
buffer = "";
|
|
12
|
-
closed = false;
|
|
13
|
-
constructor(command, framing, onNotification, onRequest, onExit) {
|
|
14
|
-
this.command = command;
|
|
15
|
-
this.framing = framing;
|
|
16
|
-
this.onNotification = onNotification;
|
|
17
|
-
this.onRequest = onRequest;
|
|
18
|
-
this.onExit = onExit;
|
|
19
|
-
}
|
|
20
|
-
start(cwd) {
|
|
21
|
-
if (this.child)
|
|
22
|
-
return;
|
|
23
|
-
this.closed = false;
|
|
24
|
-
this.child = spawn(this.command, {
|
|
25
|
-
cwd,
|
|
26
|
-
shell: true,
|
|
27
|
-
stdio: ["pipe", "pipe", "pipe"],
|
|
28
|
-
env: process.env,
|
|
29
|
-
});
|
|
30
|
-
this.child.stdout.setEncoding("utf8");
|
|
31
|
-
this.child.stderr.setEncoding("utf8");
|
|
32
|
-
this.child.stdout.on("data", (chunk) => this.read(chunk));
|
|
33
|
-
this.child.stderr.on("data", (chunk) => {
|
|
34
|
-
const trimmed = chunk.trim();
|
|
35
|
-
if (trimmed)
|
|
36
|
-
process.stderr.write(`[agent:stderr] ${trimmed}\n`);
|
|
37
|
-
});
|
|
38
|
-
this.child.on("error", (error) => this.failAll(error.message));
|
|
39
|
-
this.child.on("exit", (code, signal) => {
|
|
40
|
-
this.failAll(`ACP agent exited (code=${code ?? "null"}, signal=${signal ?? "null"})`);
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
request(method, params, timeoutMs = 30_000) {
|
|
44
|
-
if (!this.child || this.child.stdin.destroyed) {
|
|
45
|
-
return Promise.reject(new Error("ACP agent is not running"));
|
|
46
|
-
}
|
|
47
|
-
const id = this.nextId++;
|
|
48
|
-
const message = { jsonrpc: "2.0", id, method, params };
|
|
49
|
-
return new Promise((resolve, reject) => {
|
|
50
|
-
const timer = timeoutMs && timeoutMs > 0
|
|
51
|
-
? setTimeout(() => {
|
|
52
|
-
this.pending.delete(id);
|
|
53
|
-
reject(new Error(`ACP request timed out: ${method}`));
|
|
54
|
-
}, timeoutMs)
|
|
55
|
-
: undefined;
|
|
56
|
-
this.pending.set(id, { resolve, reject, timer });
|
|
57
|
-
this.write(message);
|
|
58
|
-
});
|
|
59
|
-
}
|
|
60
|
-
notify(method, params) {
|
|
61
|
-
this.write({ jsonrpc: "2.0", method, params });
|
|
62
|
-
}
|
|
63
|
-
stop() {
|
|
64
|
-
const child = this.child;
|
|
65
|
-
this.child = undefined;
|
|
66
|
-
if (child && !child.killed)
|
|
67
|
-
child.kill("SIGTERM");
|
|
68
|
-
this.failAll("ACP transport stopped");
|
|
69
|
-
}
|
|
70
|
-
write(message) {
|
|
71
|
-
const raw = JSON.stringify(message);
|
|
72
|
-
if (this.framing === "newline") {
|
|
73
|
-
this.child?.stdin.write(`${raw}\n`);
|
|
74
|
-
return;
|
|
75
|
-
}
|
|
76
|
-
this.child?.stdin.write(`Content-Length: ${Buffer.byteLength(raw, "utf8")}\r\n\r\n${raw}`);
|
|
77
|
-
}
|
|
78
|
-
read(chunk) {
|
|
79
|
-
this.buffer += chunk;
|
|
80
|
-
while (this.buffer.length > 0) {
|
|
81
|
-
const contentLengthMatch = this.buffer.match(/^Content-Length:\s*(\d+)\r?\n/i);
|
|
82
|
-
if (contentLengthMatch) {
|
|
83
|
-
const headerEnd = this.buffer.indexOf("\r\n\r\n");
|
|
84
|
-
const altHeaderEnd = this.buffer.indexOf("\n\n");
|
|
85
|
-
const end = headerEnd >= 0 ? headerEnd + 4 : altHeaderEnd >= 0 ? altHeaderEnd + 2 : -1;
|
|
86
|
-
if (end < 0)
|
|
87
|
-
return;
|
|
88
|
-
const length = Number(contentLengthMatch[1]);
|
|
89
|
-
if (this.buffer.length < end + length)
|
|
90
|
-
return;
|
|
91
|
-
const raw = this.buffer.slice(end, end + length);
|
|
92
|
-
this.buffer = this.buffer.slice(end + length);
|
|
93
|
-
this.dispatch(raw);
|
|
94
|
-
continue;
|
|
95
|
-
}
|
|
96
|
-
const newline = this.buffer.indexOf("\n");
|
|
97
|
-
if (newline < 0)
|
|
98
|
-
return;
|
|
99
|
-
const raw = this.buffer.slice(0, newline).trim();
|
|
100
|
-
this.buffer = this.buffer.slice(newline + 1);
|
|
101
|
-
if (raw)
|
|
102
|
-
this.dispatch(raw);
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
dispatch(raw) {
|
|
106
|
-
let message;
|
|
107
|
-
try {
|
|
108
|
-
message = JSON.parse(raw);
|
|
109
|
-
}
|
|
110
|
-
catch {
|
|
111
|
-
return;
|
|
112
|
-
}
|
|
113
|
-
if ("id" in message && ("result" in message || "error" in message)) {
|
|
114
|
-
const pending = this.pending.get(message.id);
|
|
115
|
-
if (!pending)
|
|
116
|
-
return;
|
|
117
|
-
this.pending.delete(message.id);
|
|
118
|
-
if (pending.timer)
|
|
119
|
-
clearTimeout(pending.timer);
|
|
120
|
-
const response = message;
|
|
121
|
-
if (response.error)
|
|
122
|
-
pending.reject(new Error(response.error.message));
|
|
123
|
-
else
|
|
124
|
-
pending.resolve(response.result);
|
|
125
|
-
return;
|
|
126
|
-
}
|
|
127
|
-
if ("method" in message && "id" in message) {
|
|
128
|
-
Promise.resolve(this.onRequest(message.method, message.params))
|
|
129
|
-
.then((result) => this.write({ jsonrpc: "2.0", id: message.id, result }))
|
|
130
|
-
.catch((error) => {
|
|
131
|
-
this.write({
|
|
132
|
-
jsonrpc: "2.0",
|
|
133
|
-
id: message.id,
|
|
134
|
-
error: {
|
|
135
|
-
code: -32000,
|
|
136
|
-
message: error instanceof Error ? error.message : String(error),
|
|
137
|
-
},
|
|
138
|
-
});
|
|
139
|
-
});
|
|
140
|
-
return;
|
|
141
|
-
}
|
|
142
|
-
if ("method" in message) {
|
|
143
|
-
this.onNotification(message.method, message.params);
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
failAll(message) {
|
|
147
|
-
if (this.closed)
|
|
148
|
-
return;
|
|
149
|
-
this.closed = true;
|
|
150
|
-
this.child = undefined;
|
|
151
|
-
this.onExit(message);
|
|
152
|
-
for (const [, pending] of this.pending) {
|
|
153
|
-
if (pending.timer)
|
|
154
|
-
clearTimeout(pending.timer);
|
|
155
|
-
pending.reject(new Error(message));
|
|
156
|
-
}
|
|
157
|
-
this.pending.clear();
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
//# sourceMappingURL=json-rpc.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"json-rpc.js","sourceRoot":"","sources":["../../../../../src/runtime/acp/json-rpc.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import type { KnownAgentProvider } from "./agent-process-discovery.js";
|
|
2
|
-
export type AgentProvider = string;
|
|
3
|
-
export type { KnownAgentProvider };
|
|
4
|
-
export type AgentProtocol = "acp" | "codex-app-server" | "claude-agent-sdk" | "claude-stream-json";
|
|
5
|
-
export type AgentFraming = "content-length" | "newline";
|
|
6
|
-
export interface AgentCommandConfig {
|
|
7
|
-
command: string;
|
|
8
|
-
provider: AgentProvider;
|
|
9
|
-
protocol: AgentProtocol;
|
|
10
|
-
framing: AgentFraming;
|
|
11
|
-
}
|
|
12
|
-
export declare function resolveAgentCommand(input: {
|
|
13
|
-
provider: AgentProvider;
|
|
14
|
-
command?: string;
|
|
15
|
-
}): AgentCommandConfig | null;
|
|
16
|
-
export declare function detectAvailableProviders(): AgentProvider[];
|
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
import { execSync } from "node:child_process";
|
|
2
|
-
import { createRequire } from "node:module";
|
|
3
|
-
import { homedir } from "node:os";
|
|
4
|
-
import { existsSync } from "node:fs";
|
|
5
|
-
const require = createRequire(import.meta.url);
|
|
6
|
-
export function resolveAgentCommand(input) {
|
|
7
|
-
const explicit = input.command?.trim();
|
|
8
|
-
if (explicit) {
|
|
9
|
-
const isCodexAppServer = /\bcodex\b/.test(explicit) && /\bapp-server\b/.test(explicit);
|
|
10
|
-
const isClaudeCli = input.provider === "claude" && /\bclaude\b/.test(explicit);
|
|
11
|
-
return {
|
|
12
|
-
provider: input.provider,
|
|
13
|
-
command: explicit,
|
|
14
|
-
protocol: isCodexAppServer ? "codex-app-server" : isClaudeCli ? "claude-stream-json" : "acp",
|
|
15
|
-
// Gemini --acp, cursor-agent acp, and other ACP CLIs speak NDJSON, not LSP Content-Length.
|
|
16
|
-
framing: "newline",
|
|
17
|
-
};
|
|
18
|
-
}
|
|
19
|
-
if (input.provider === "codex") {
|
|
20
|
-
return {
|
|
21
|
-
provider: "codex",
|
|
22
|
-
command: "codex app-server --listen stdio://",
|
|
23
|
-
protocol: "codex-app-server",
|
|
24
|
-
framing: "newline",
|
|
25
|
-
};
|
|
26
|
-
}
|
|
27
|
-
if (input.provider === "claude") {
|
|
28
|
-
if (process.env.LINKSHELL_CLAUDE_PROVIDER !== "stream-json" && hasPackage("@anthropic-ai/claude-agent-sdk")) {
|
|
29
|
-
return {
|
|
30
|
-
provider: "claude",
|
|
31
|
-
command: "claude-agent-sdk",
|
|
32
|
-
protocol: "claude-agent-sdk",
|
|
33
|
-
framing: "newline",
|
|
34
|
-
};
|
|
35
|
-
}
|
|
36
|
-
return {
|
|
37
|
-
provider: "claude",
|
|
38
|
-
command: "claude --print --output-format stream-json --input-format stream-json --verbose --permission-mode bypassPermissions",
|
|
39
|
-
protocol: "claude-stream-json",
|
|
40
|
-
framing: "newline",
|
|
41
|
-
};
|
|
42
|
-
}
|
|
43
|
-
if (input.provider === "gemini") {
|
|
44
|
-
return {
|
|
45
|
-
provider: "gemini",
|
|
46
|
-
command: "gemini --acp",
|
|
47
|
-
protocol: "acp",
|
|
48
|
-
framing: "newline",
|
|
49
|
-
};
|
|
50
|
-
}
|
|
51
|
-
if (input.provider === "cursor") {
|
|
52
|
-
return {
|
|
53
|
-
provider: "cursor",
|
|
54
|
-
command: "cursor-agent acp",
|
|
55
|
-
protocol: "acp",
|
|
56
|
-
framing: "newline",
|
|
57
|
-
};
|
|
58
|
-
}
|
|
59
|
-
if (input.provider === "grok") {
|
|
60
|
-
return {
|
|
61
|
-
provider: "grok",
|
|
62
|
-
command: "grok agent stdio",
|
|
63
|
-
protocol: "acp",
|
|
64
|
-
framing: "newline",
|
|
65
|
-
};
|
|
66
|
-
}
|
|
67
|
-
// copilot / opencode / kimi / custom: PTY-only unless caller passes --agent-command
|
|
68
|
-
return null;
|
|
69
|
-
}
|
|
70
|
-
function hasPackage(name) {
|
|
71
|
-
try {
|
|
72
|
-
require.resolve(name);
|
|
73
|
-
return true;
|
|
74
|
-
}
|
|
75
|
-
catch {
|
|
76
|
-
return false;
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
function resolveBinary(bin) {
|
|
80
|
-
// 1. Try which (PATH lookup)
|
|
81
|
-
try {
|
|
82
|
-
const path = execSync(`which ${bin}`, { encoding: "utf8", stdio: ["ignore", "pipe", "ignore"] }).trim();
|
|
83
|
-
if (path && existsSync(path))
|
|
84
|
-
return path;
|
|
85
|
-
}
|
|
86
|
-
catch { /* not in PATH */ }
|
|
87
|
-
// 2. Common install locations (daemon may have a stripped PATH)
|
|
88
|
-
const home = homedir();
|
|
89
|
-
const candidates = [
|
|
90
|
-
`${home}/.npm-global/bin/${bin}`,
|
|
91
|
-
`${home}/.local/bin/${bin}`,
|
|
92
|
-
`/opt/homebrew/bin/${bin}`,
|
|
93
|
-
`/usr/local/bin/${bin}`,
|
|
94
|
-
`${home}/.nvm/versions/node/*/bin/${bin}`,
|
|
95
|
-
];
|
|
96
|
-
for (const candidate of candidates) {
|
|
97
|
-
// expand glob if present
|
|
98
|
-
if (candidate.includes("*")) {
|
|
99
|
-
try {
|
|
100
|
-
const expanded = execSync(`ls ${candidate} 2>/dev/null`, { encoding: "utf8", stdio: ["ignore", "pipe", "ignore"] }).trim().split("\n")[0];
|
|
101
|
-
if (expanded && existsSync(expanded))
|
|
102
|
-
return expanded;
|
|
103
|
-
}
|
|
104
|
-
catch {
|
|
105
|
-
continue;
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
else if (existsSync(candidate)) {
|
|
109
|
-
return candidate;
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
return null;
|
|
113
|
-
}
|
|
114
|
-
const INSTALL_BINARIES = [
|
|
115
|
-
{ provider: "claude", binaries: ["claude"] },
|
|
116
|
-
{ provider: "codex", binaries: ["codex"] },
|
|
117
|
-
{ provider: "gemini", binaries: ["gemini"] },
|
|
118
|
-
{ provider: "copilot", binaries: ["copilot"] },
|
|
119
|
-
{ provider: "opencode", binaries: ["opencode", "opencode-ai"] },
|
|
120
|
-
{ provider: "cursor", binaries: ["cursor-agent"] },
|
|
121
|
-
{ provider: "grok", binaries: ["grok"] },
|
|
122
|
-
{ provider: "kimi", binaries: ["kimi"] },
|
|
123
|
-
];
|
|
124
|
-
export function detectAvailableProviders() {
|
|
125
|
-
const available = [];
|
|
126
|
-
for (const entry of INSTALL_BINARIES) {
|
|
127
|
-
if (entry.binaries.some((bin) => resolveBinary(bin)))
|
|
128
|
-
available.push(entry.provider);
|
|
129
|
-
}
|
|
130
|
-
return available;
|
|
131
|
-
}
|
|
132
|
-
//# sourceMappingURL=provider-resolver.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"provider-resolver.js","sourceRoot":"","sources":["../../../../../src/runtime/acp/provider-resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
import type { ProviderConfig } from "../providers.js";
|
|
2
|
-
import { type AgentProvider } from "./acp/provider-resolver.js";
|
|
3
|
-
export interface BridgeSessionOptions {
|
|
4
|
-
gatewayUrl: string;
|
|
5
|
-
gatewayHttpUrl: string;
|
|
6
|
-
pairingGateway?: string;
|
|
7
|
-
sessionId?: string;
|
|
8
|
-
cols: number;
|
|
9
|
-
rows: number;
|
|
10
|
-
clientName: string;
|
|
11
|
-
hostname?: string;
|
|
12
|
-
verbose?: boolean;
|
|
13
|
-
screen?: boolean;
|
|
14
|
-
providerConfig: ProviderConfig;
|
|
15
|
-
authToken?: string;
|
|
16
|
-
keepAwake?: boolean;
|
|
17
|
-
agentUi?: boolean;
|
|
18
|
-
agentProvider?: AgentProvider;
|
|
19
|
-
agentCommand?: string;
|
|
20
|
-
/**
|
|
21
|
-
* Confinement root for client-driven filesystem operations
|
|
22
|
-
* (terminal.browse / terminal.file.read / terminal.mkdir).
|
|
23
|
-
* Defaults to the user's home directory. Paths resolving outside this root are rejected.
|
|
24
|
-
*/
|
|
25
|
-
fileRoot?: string;
|
|
26
|
-
/**
|
|
27
|
-
* Ports the tunnel proxy is allowed to connect to on 127.0.0.1.
|
|
28
|
-
* Defaults to DEFAULT_TUNNEL_PORTS when omitted.
|
|
29
|
-
*/
|
|
30
|
-
allowedTunnelPorts?: number[];
|
|
31
|
-
}
|
|
32
|
-
export declare function resolvePairingGateway(gatewayHttpUrl: string, pairingGateway?: string): string | undefined;
|
|
33
|
-
export declare function resolveAgentWorkspaceProviders(options: {
|
|
34
|
-
agentProvider?: AgentProvider;
|
|
35
|
-
agentCommand?: string;
|
|
36
|
-
}): AgentProvider[];
|
|
37
|
-
export declare class BridgeSession {
|
|
38
|
-
private readonly options;
|
|
39
|
-
private socket;
|
|
40
|
-
private terminals;
|
|
41
|
-
private heartbeatTimer;
|
|
42
|
-
private wsPingTimer;
|
|
43
|
-
private awaitingPong;
|
|
44
|
-
private reconnectTimer;
|
|
45
|
-
private reconnectAttempts;
|
|
46
|
-
private reconnecting;
|
|
47
|
-
private sessionId;
|
|
48
|
-
private hostToken;
|
|
49
|
-
private exited;
|
|
50
|
-
private stopped;
|
|
51
|
-
private screenCapture;
|
|
52
|
-
private screenShare;
|
|
53
|
-
private tunnelSockets;
|
|
54
|
-
private keepAwake;
|
|
55
|
-
private agentSession;
|
|
56
|
-
private agentWorkspace;
|
|
57
|
-
private outboundAgentQueue;
|
|
58
|
-
private machineIdentity;
|
|
59
|
-
private readonly defaultCwd;
|
|
60
|
-
private readonly fileRoot;
|
|
61
|
-
private readonly allowedTunnelPorts;
|
|
62
|
-
private exitedTerminalTimers;
|
|
63
|
-
private onAllTerminalsExited;
|
|
64
|
-
constructor(options: BridgeSessionOptions);
|
|
65
|
-
/** Register a callback invoked once all terminals exit naturally (process self-cleanup). */
|
|
66
|
-
setOnAllTerminalsExited(handler: () => void | Promise<void>): void;
|
|
67
|
-
/**
|
|
68
|
-
* Resolve a client-supplied path inside the confinement root.
|
|
69
|
-
* Returns the absolute resolved path, or null if it escapes the root.
|
|
70
|
-
*/
|
|
71
|
-
private resolveConfinedPath;
|
|
72
|
-
private log;
|
|
73
|
-
start(): Promise<void>;
|
|
74
|
-
private createPairing;
|
|
75
|
-
private resolveAuthToken;
|
|
76
|
-
private maybeRefreshTokenForClose;
|
|
77
|
-
private connectGateway;
|
|
78
|
-
private handleMessage;
|
|
79
|
-
private handleTunnelRequest;
|
|
80
|
-
private handleTunnelWsUpgrade;
|
|
81
|
-
private handleTunnelWsData;
|
|
82
|
-
private handleTunnelWsClose;
|
|
83
|
-
private sendTunnelError;
|
|
84
|
-
private sendTerminalList;
|
|
85
|
-
private replayFrom;
|
|
86
|
-
private spawnTerminal;
|
|
87
|
-
private send;
|
|
88
|
-
private startHeartbeat;
|
|
89
|
-
private stopHeartbeat;
|
|
90
|
-
private startWsPing;
|
|
91
|
-
private stopWsPing;
|
|
92
|
-
private startScreenCapture;
|
|
93
|
-
private startFallbackCapture;
|
|
94
|
-
private stopScreenCapture;
|
|
95
|
-
private scheduleReconnect;
|
|
96
|
-
stop(exitCode?: number): void;
|
|
97
|
-
}
|