linkshell-cli 0.5.42 → 0.6.1
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/cli/src/commands/host.d.ts +30 -0
- package/dist/cli/src/commands/host.js +278 -0
- package/dist/cli/src/commands/host.js.map +1 -0
- package/dist/cli/src/commands/pair.d.ts +1 -0
- package/dist/cli/src/commands/pair.js +51 -0
- package/dist/cli/src/commands/pair.js.map +1 -0
- package/dist/cli/src/index.js +69 -0
- package/dist/cli/src/index.js.map +1 -1
- package/dist/cli/src/utils/daemon.d.ts +1 -1
- package/dist/cli/src/utils/daemon.js +3 -2
- package/dist/cli/src/utils/daemon.js.map +1 -1
- package/dist/cli/tsconfig.tsbuildinfo +1 -1
- package/dist/host/src/drivers/acp/connection.d.ts +61 -0
- package/dist/host/src/drivers/acp/connection.js +121 -0
- package/dist/host/src/drivers/acp/connection.js.map +1 -0
- package/dist/host/src/drivers/acp/driver.d.ts +110 -0
- package/dist/host/src/drivers/acp/driver.js +438 -0
- package/dist/host/src/drivers/acp/driver.js.map +1 -0
- package/dist/host/src/drivers/acp/mapper.d.ts +49 -0
- package/dist/host/src/drivers/acp/mapper.js +411 -0
- package/dist/host/src/drivers/acp/mapper.js.map +1 -0
- package/dist/host/src/drivers/auth.d.ts +7 -0
- package/dist/host/src/drivers/auth.js +57 -0
- package/dist/host/src/drivers/auth.js.map +1 -0
- package/dist/host/src/drivers/claude/driver.d.ts +76 -0
- package/dist/host/src/drivers/claude/driver.js +331 -0
- package/dist/host/src/drivers/claude/driver.js.map +1 -0
- package/dist/host/src/drivers/claude/transcript.d.ts +335 -0
- package/dist/host/src/drivers/claude/transcript.js +516 -0
- package/dist/host/src/drivers/claude/transcript.js.map +1 -0
- package/dist/host/src/drivers/codex/app-server.d.ts +36 -0
- package/dist/host/src/drivers/codex/app-server.js +144 -0
- package/dist/host/src/drivers/codex/app-server.js.map +1 -0
- package/dist/host/src/drivers/codex/driver.d.ts +89 -0
- package/dist/host/src/drivers/codex/driver.js +452 -0
- package/dist/host/src/drivers/codex/driver.js.map +1 -0
- package/dist/host/src/drivers/codex/mapper.d.ts +61 -0
- package/dist/host/src/drivers/codex/mapper.js +623 -0
- package/dist/host/src/drivers/codex/mapper.js.map +1 -0
- package/dist/host/src/drivers/codex/settings.d.ts +51 -0
- package/dist/host/src/drivers/codex/settings.js +107 -0
- package/dist/host/src/drivers/codex/settings.js.map +1 -0
- package/dist/host/src/drivers/images.d.ts +11 -0
- package/dist/host/src/drivers/images.js +34 -0
- package/dist/host/src/drivers/images.js.map +1 -0
- package/dist/host/src/drivers/nesting.d.ts +6 -0
- package/dist/host/src/drivers/nesting.js +25 -0
- package/dist/host/src/drivers/nesting.js.map +1 -0
- package/dist/host/src/drivers/registry.d.ts +21 -0
- package/dist/host/src/drivers/registry.js +30 -0
- package/dist/host/src/drivers/registry.js.map +1 -0
- package/dist/host/src/drivers/types.d.ts +105 -0
- package/dist/host/src/drivers/types.js +2 -0
- package/dist/host/src/drivers/types.js.map +1 -0
- package/dist/host/src/fs.d.ts +69 -0
- package/dist/host/src/fs.js +198 -0
- package/dist/host/src/fs.js.map +1 -0
- package/dist/host/src/gateway.d.ts +55 -0
- package/dist/host/src/gateway.js +263 -0
- package/dist/host/src/gateway.js.map +1 -0
- package/dist/host/src/host.d.ts +51 -0
- package/dist/host/src/host.js +133 -0
- package/dist/host/src/host.js.map +1 -0
- package/dist/host/src/hub.d.ts +89 -0
- package/dist/host/src/hub.js +592 -0
- package/dist/host/src/hub.js.map +1 -0
- package/dist/host/src/index.d.ts +10 -0
- package/dist/host/src/index.js +10 -0
- package/dist/host/src/index.js.map +1 -0
- package/dist/host/src/ports.d.ts +24 -0
- package/dist/host/src/ports.js +201 -0
- package/dist/host/src/ports.js.map +1 -0
- package/dist/host/src/rpc/client.d.ts +9 -0
- package/dist/host/src/rpc/client.js +42 -0
- package/dist/host/src/rpc/client.js.map +1 -0
- package/dist/host/src/rpc/server.d.ts +52 -0
- package/dist/host/src/rpc/server.js +293 -0
- package/dist/host/src/rpc/server.js.map +1 -0
- package/dist/host/src/screen.d.ts +30 -0
- package/dist/host/src/screen.js +230 -0
- package/dist/host/src/screen.js.map +1 -0
- package/dist/host/src/shell-env.d.ts +8 -0
- package/dist/host/src/shell-env.js +39 -0
- package/dist/host/src/shell-env.js.map +1 -0
- package/dist/host/src/store.d.ts +75 -0
- package/dist/host/src/store.js +265 -0
- package/dist/host/src/store.js.map +1 -0
- package/dist/host/src/terminals.d.ts +55 -0
- package/dist/host/src/terminals.js +367 -0
- package/dist/host/src/terminals.js.map +1 -0
- package/dist/shared-protocol/src/index.d.ts +3345 -3345
- package/dist/wire/src/crypto.d.ts +65 -0
- package/dist/wire/src/crypto.js +253 -0
- package/dist/wire/src/crypto.js.map +1 -0
- package/dist/wire/src/index.d.ts +8 -0
- package/dist/wire/src/index.js +9 -0
- package/dist/wire/src/index.js.map +1 -0
- package/dist/wire/src/model.d.ts +704 -0
- package/dist/wire/src/model.js +163 -0
- package/dist/wire/src/model.js.map +1 -0
- package/dist/wire/src/peer.d.ts +42 -0
- package/dist/wire/src/peer.js +143 -0
- package/dist/wire/src/peer.js.map +1 -0
- package/dist/wire/src/relay-client.d.ts +82 -0
- package/dist/wire/src/relay-client.js +259 -0
- package/dist/wire/src/relay-client.js.map +1 -0
- package/dist/wire/src/relay.d.ts +481 -0
- package/dist/wire/src/relay.js +129 -0
- package/dist/wire/src/relay.js.map +1 -0
- package/dist/wire/src/rpc.d.ts +4170 -0
- package/dist/wire/src/rpc.js +332 -0
- package/dist/wire/src/rpc.js.map +1 -0
- package/dist/wire/src/shell.d.ts +2 -0
- package/dist/wire/src/shell.js +62 -0
- package/dist/wire/src/shell.js.map +1 -0
- package/dist/wire/src/updates.d.ts +3325 -0
- package/dist/wire/src/updates.js +210 -0
- package/dist/wire/src/updates.js.map +1 -0
- package/package.json +8 -3
- package/src/commands/host.ts +297 -0
- package/src/commands/pair.ts +52 -0
- package/src/index.ts +74 -0
- package/src/utils/daemon.ts +4 -3
- package/dist/cli/src/commands/hook.d.ts +0 -6
- package/dist/cli/src/commands/hook.js +0 -120
- package/dist/cli/src/commands/hook.js.map +0 -1
- package/dist/cli/src/runtime/acp/agent-workspace-git.d.ts +0 -63
- package/dist/cli/src/runtime/acp/agent-workspace-git.js +0 -297
- package/dist/cli/src/runtime/acp/agent-workspace-git.js.map +0 -1
- package/dist/cli/src/runtime/acp-relay.d.ts +0 -23
- package/dist/cli/src/runtime/acp-relay.js +0 -73
- package/dist/cli/src/runtime/acp-relay.js.map +0 -1
- package/dist/cli/src/runtime/hook-permission-server.d.ts +0 -36
- package/dist/cli/src/runtime/hook-permission-server.js +0 -147
- package/dist/cli/src/runtime/hook-permission-server.js.map +0 -1
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
import { spawn } from "node:child_process";
|
|
2
|
-
import { createInterface } from "node:readline";
|
|
3
|
-
import { createEnvelope } from "@linkshell/protocol";
|
|
4
|
-
export class AcpRelay {
|
|
5
|
-
child;
|
|
6
|
-
options;
|
|
7
|
-
exited = false;
|
|
8
|
-
constructor(options) {
|
|
9
|
-
this.options = options;
|
|
10
|
-
this.child = spawn(options.command, options.args, {
|
|
11
|
-
cwd: options.cwd,
|
|
12
|
-
env: options.env,
|
|
13
|
-
stdio: ["pipe", "pipe", "pipe"],
|
|
14
|
-
});
|
|
15
|
-
// Read newline-delimited JSON from stdout
|
|
16
|
-
const rl = createInterface({ input: this.child.stdout });
|
|
17
|
-
rl.on("line", (line) => {
|
|
18
|
-
if (!line.trim())
|
|
19
|
-
return;
|
|
20
|
-
try {
|
|
21
|
-
const msg = JSON.parse(line);
|
|
22
|
-
// Wrap JSON-RPC message in acp.rpc envelope and send to gateway
|
|
23
|
-
this.options.send(createEnvelope({
|
|
24
|
-
type: "acp.rpc",
|
|
25
|
-
sessionId: this.options.sessionId,
|
|
26
|
-
terminalId: this.options.terminalId,
|
|
27
|
-
payload: msg,
|
|
28
|
-
}));
|
|
29
|
-
}
|
|
30
|
-
catch (e) {
|
|
31
|
-
this.options.log(`acp-relay: failed to parse stdout line: ${e}`);
|
|
32
|
-
}
|
|
33
|
-
});
|
|
34
|
-
// Log stderr
|
|
35
|
-
this.child.stderr?.on("data", (chunk) => {
|
|
36
|
-
this.options.log(`acp-relay stderr: ${chunk.toString().trimEnd()}`);
|
|
37
|
-
});
|
|
38
|
-
this.child.on("exit", (code, signal) => {
|
|
39
|
-
this.exited = true;
|
|
40
|
-
this.options.log(`acp-relay: process exited (code=${code}, signal=${signal})`);
|
|
41
|
-
});
|
|
42
|
-
this.child.on("error", (err) => {
|
|
43
|
-
this.options.log(`acp-relay: process error: ${err.message}`);
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
/** Forward an acp.rpc envelope payload to the child's stdin */
|
|
47
|
-
write(payload) {
|
|
48
|
-
if (this.exited || !this.child.stdin?.writable)
|
|
49
|
-
return;
|
|
50
|
-
try {
|
|
51
|
-
const line = JSON.stringify(payload) + "\n";
|
|
52
|
-
this.child.stdin.write(line);
|
|
53
|
-
}
|
|
54
|
-
catch (e) {
|
|
55
|
-
this.options.log(`acp-relay: failed to write to stdin: ${e}`);
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
kill() {
|
|
59
|
-
if (!this.exited) {
|
|
60
|
-
this.child.kill("SIGTERM");
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
get isExited() {
|
|
64
|
-
return this.exited;
|
|
65
|
-
}
|
|
66
|
-
get pid() {
|
|
67
|
-
return this.child.pid;
|
|
68
|
-
}
|
|
69
|
-
onExit(cb) {
|
|
70
|
-
this.child.on("exit", cb);
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
//# sourceMappingURL=acp-relay.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"acp-relay.js","sourceRoot":"","sources":["../../../../src/runtime/acp-relay.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
export declare const HOOK_SOCKET_PATH: string;
|
|
2
|
-
export interface HookPermissionRequest {
|
|
3
|
-
requestId: string;
|
|
4
|
-
/** Claude Code hook event name, e.g. "PreToolUse" | "Notification". */
|
|
5
|
-
event: string;
|
|
6
|
-
/** The raw hook JSON: { tool_name, tool_input, session_id, cwd, ... }. */
|
|
7
|
-
payload: Record<string, unknown>;
|
|
8
|
-
}
|
|
9
|
-
/** Local Unix-socket server the bridge runs so `linkshell hook` (installed as a
|
|
10
|
-
* Claude Code PreToolUse/Notification hook) can relay an EXTERNAL session's
|
|
11
|
-
* permission request in, wait, and receive the remote decision back.
|
|
12
|
-
*
|
|
13
|
-
* Self-contained: it only knows sockets. The bridge supplies `onRequest` (to
|
|
14
|
-
* broadcast a permission card to phone/web) and `onNotify` (attention signal),
|
|
15
|
-
* and calls `resolve(requestId, decision)` when the user answers. If nothing
|
|
16
|
-
* resolves a PreToolUse request, the hook's own decision-timeout fires and it
|
|
17
|
-
* fails open — so a hung server never blocks a tool call forever. */
|
|
18
|
-
export declare class HookPermissionServer {
|
|
19
|
-
private readonly deps;
|
|
20
|
-
private server;
|
|
21
|
-
private readonly pending;
|
|
22
|
-
constructor(deps: {
|
|
23
|
-
onRequest: (req: HookPermissionRequest) => void;
|
|
24
|
-
onNotify?: (payload: Record<string, unknown>) => void;
|
|
25
|
-
verbose?: boolean;
|
|
26
|
-
});
|
|
27
|
-
start(): void;
|
|
28
|
-
private onConnection;
|
|
29
|
-
/** Deliver a decision to the waiting hook process. No-op if the request is
|
|
30
|
-
* unknown (already timed out / disconnected). */
|
|
31
|
-
resolve(requestId: string, decision: "allow" | "deny" | "ask"): boolean;
|
|
32
|
-
/** Whether a given requestId is a pending hook request (vs a workspace-driven
|
|
33
|
-
* permission), so the bridge can route permission.respond correctly. */
|
|
34
|
-
has(requestId: string): boolean;
|
|
35
|
-
stop(): void;
|
|
36
|
-
}
|
|
@@ -1,147 +0,0 @@
|
|
|
1
|
-
import { createServer } from "node:net";
|
|
2
|
-
import { existsSync, unlinkSync, mkdirSync } from "node:fs";
|
|
3
|
-
import { homedir } from "node:os";
|
|
4
|
-
import { dirname, join } from "node:path";
|
|
5
|
-
export const HOOK_SOCKET_PATH = join(homedir(), ".linkshell", "hook.sock");
|
|
6
|
-
let seq = 0;
|
|
7
|
-
function newRequestId() {
|
|
8
|
-
seq += 1;
|
|
9
|
-
return `hook-${Date.now().toString(36)}-${seq}`;
|
|
10
|
-
}
|
|
11
|
-
/** Local Unix-socket server the bridge runs so `linkshell hook` (installed as a
|
|
12
|
-
* Claude Code PreToolUse/Notification hook) can relay an EXTERNAL session's
|
|
13
|
-
* permission request in, wait, and receive the remote decision back.
|
|
14
|
-
*
|
|
15
|
-
* Self-contained: it only knows sockets. The bridge supplies `onRequest` (to
|
|
16
|
-
* broadcast a permission card to phone/web) and `onNotify` (attention signal),
|
|
17
|
-
* and calls `resolve(requestId, decision)` when the user answers. If nothing
|
|
18
|
-
* resolves a PreToolUse request, the hook's own decision-timeout fires and it
|
|
19
|
-
* fails open — so a hung server never blocks a tool call forever. */
|
|
20
|
-
export class HookPermissionServer {
|
|
21
|
-
deps;
|
|
22
|
-
server;
|
|
23
|
-
pending = new Map();
|
|
24
|
-
constructor(deps) {
|
|
25
|
-
this.deps = deps;
|
|
26
|
-
}
|
|
27
|
-
start() {
|
|
28
|
-
if (this.server)
|
|
29
|
-
return;
|
|
30
|
-
try {
|
|
31
|
-
mkdirSync(dirname(HOOK_SOCKET_PATH), { recursive: true });
|
|
32
|
-
// A stale socket file from a crashed process blocks bind with EADDRINUSE.
|
|
33
|
-
if (existsSync(HOOK_SOCKET_PATH)) {
|
|
34
|
-
try {
|
|
35
|
-
unlinkSync(HOOK_SOCKET_PATH);
|
|
36
|
-
}
|
|
37
|
-
catch { /* ignore */ }
|
|
38
|
-
}
|
|
39
|
-
const server = createServer((socket) => this.onConnection(socket));
|
|
40
|
-
server.on("error", (err) => {
|
|
41
|
-
if (this.deps.verbose)
|
|
42
|
-
process.stderr.write(`[hook-server] error: ${String(err)}\n`);
|
|
43
|
-
});
|
|
44
|
-
server.listen(HOOK_SOCKET_PATH);
|
|
45
|
-
this.server = server;
|
|
46
|
-
}
|
|
47
|
-
catch (err) {
|
|
48
|
-
if (this.deps.verbose)
|
|
49
|
-
process.stderr.write(`[hook-server] failed to start: ${String(err)}\n`);
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
onConnection(socket) {
|
|
53
|
-
let buffer = "";
|
|
54
|
-
let handled = false;
|
|
55
|
-
socket.setEncoding("utf8");
|
|
56
|
-
socket.on("data", (chunk) => {
|
|
57
|
-
if (handled)
|
|
58
|
-
return;
|
|
59
|
-
buffer += chunk;
|
|
60
|
-
const nl = buffer.indexOf("\n");
|
|
61
|
-
if (nl === -1)
|
|
62
|
-
return;
|
|
63
|
-
handled = true;
|
|
64
|
-
let msg;
|
|
65
|
-
try {
|
|
66
|
-
msg = JSON.parse(buffer.slice(0, nl));
|
|
67
|
-
}
|
|
68
|
-
catch {
|
|
69
|
-
socket.destroy();
|
|
70
|
-
return;
|
|
71
|
-
}
|
|
72
|
-
const event = typeof msg?.event === "string" ? msg.event : "";
|
|
73
|
-
const payload = (msg?.payload && typeof msg.payload === "object" ? msg.payload : {});
|
|
74
|
-
if (event === "PreToolUse") {
|
|
75
|
-
const requestId = newRequestId();
|
|
76
|
-
this.pending.set(requestId, socket);
|
|
77
|
-
socket.on("close", () => this.pending.delete(requestId));
|
|
78
|
-
socket.on("error", () => this.pending.delete(requestId));
|
|
79
|
-
try {
|
|
80
|
-
this.deps.onRequest({ requestId, event, payload });
|
|
81
|
-
}
|
|
82
|
-
catch (err) {
|
|
83
|
-
if (this.deps.verbose)
|
|
84
|
-
process.stderr.write(`[hook-server] onRequest threw: ${String(err)}\n`);
|
|
85
|
-
this.pending.delete(requestId);
|
|
86
|
-
socket.destroy();
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
else {
|
|
90
|
-
// Notification (or anything else): fire the attention signal, no reply.
|
|
91
|
-
try {
|
|
92
|
-
this.deps.onNotify?.(payload);
|
|
93
|
-
}
|
|
94
|
-
catch { /* ignore */ }
|
|
95
|
-
socket.destroy();
|
|
96
|
-
}
|
|
97
|
-
});
|
|
98
|
-
socket.on("error", () => { });
|
|
99
|
-
}
|
|
100
|
-
/** Deliver a decision to the waiting hook process. No-op if the request is
|
|
101
|
-
* unknown (already timed out / disconnected). */
|
|
102
|
-
resolve(requestId, decision) {
|
|
103
|
-
const socket = this.pending.get(requestId);
|
|
104
|
-
if (!socket)
|
|
105
|
-
return false;
|
|
106
|
-
this.pending.delete(requestId);
|
|
107
|
-
try {
|
|
108
|
-
socket.write(JSON.stringify({ decision }) + "\n");
|
|
109
|
-
socket.end();
|
|
110
|
-
}
|
|
111
|
-
catch {
|
|
112
|
-
try {
|
|
113
|
-
socket.destroy();
|
|
114
|
-
}
|
|
115
|
-
catch { /* ignore */ }
|
|
116
|
-
}
|
|
117
|
-
return true;
|
|
118
|
-
}
|
|
119
|
-
/** Whether a given requestId is a pending hook request (vs a workspace-driven
|
|
120
|
-
* permission), so the bridge can route permission.respond correctly. */
|
|
121
|
-
has(requestId) {
|
|
122
|
-
return this.pending.has(requestId);
|
|
123
|
-
}
|
|
124
|
-
stop() {
|
|
125
|
-
for (const socket of this.pending.values()) {
|
|
126
|
-
try {
|
|
127
|
-
socket.destroy();
|
|
128
|
-
}
|
|
129
|
-
catch { /* ignore */ }
|
|
130
|
-
}
|
|
131
|
-
this.pending.clear();
|
|
132
|
-
if (this.server) {
|
|
133
|
-
try {
|
|
134
|
-
this.server.close();
|
|
135
|
-
}
|
|
136
|
-
catch { /* ignore */ }
|
|
137
|
-
this.server = undefined;
|
|
138
|
-
}
|
|
139
|
-
if (existsSync(HOOK_SOCKET_PATH)) {
|
|
140
|
-
try {
|
|
141
|
-
unlinkSync(HOOK_SOCKET_PATH);
|
|
142
|
-
}
|
|
143
|
-
catch { /* ignore */ }
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
//# sourceMappingURL=hook-permission-server.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hook-permission-server.js","sourceRoot":"","sources":["../../../../src/runtime/hook-permission-server.ts"],"names":[],"mappings":"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"}
|