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.
Files changed (135) hide show
  1. package/dist/cli/src/commands/host.d.ts +30 -0
  2. package/dist/cli/src/commands/host.js +278 -0
  3. package/dist/cli/src/commands/host.js.map +1 -0
  4. package/dist/cli/src/commands/pair.d.ts +1 -0
  5. package/dist/cli/src/commands/pair.js +51 -0
  6. package/dist/cli/src/commands/pair.js.map +1 -0
  7. package/dist/cli/src/index.js +69 -0
  8. package/dist/cli/src/index.js.map +1 -1
  9. package/dist/cli/src/utils/daemon.d.ts +1 -1
  10. package/dist/cli/src/utils/daemon.js +3 -2
  11. package/dist/cli/src/utils/daemon.js.map +1 -1
  12. package/dist/cli/tsconfig.tsbuildinfo +1 -1
  13. package/dist/host/src/drivers/acp/connection.d.ts +61 -0
  14. package/dist/host/src/drivers/acp/connection.js +121 -0
  15. package/dist/host/src/drivers/acp/connection.js.map +1 -0
  16. package/dist/host/src/drivers/acp/driver.d.ts +110 -0
  17. package/dist/host/src/drivers/acp/driver.js +438 -0
  18. package/dist/host/src/drivers/acp/driver.js.map +1 -0
  19. package/dist/host/src/drivers/acp/mapper.d.ts +49 -0
  20. package/dist/host/src/drivers/acp/mapper.js +411 -0
  21. package/dist/host/src/drivers/acp/mapper.js.map +1 -0
  22. package/dist/host/src/drivers/auth.d.ts +7 -0
  23. package/dist/host/src/drivers/auth.js +57 -0
  24. package/dist/host/src/drivers/auth.js.map +1 -0
  25. package/dist/host/src/drivers/claude/driver.d.ts +76 -0
  26. package/dist/host/src/drivers/claude/driver.js +331 -0
  27. package/dist/host/src/drivers/claude/driver.js.map +1 -0
  28. package/dist/host/src/drivers/claude/transcript.d.ts +335 -0
  29. package/dist/host/src/drivers/claude/transcript.js +516 -0
  30. package/dist/host/src/drivers/claude/transcript.js.map +1 -0
  31. package/dist/host/src/drivers/codex/app-server.d.ts +36 -0
  32. package/dist/host/src/drivers/codex/app-server.js +144 -0
  33. package/dist/host/src/drivers/codex/app-server.js.map +1 -0
  34. package/dist/host/src/drivers/codex/driver.d.ts +89 -0
  35. package/dist/host/src/drivers/codex/driver.js +452 -0
  36. package/dist/host/src/drivers/codex/driver.js.map +1 -0
  37. package/dist/host/src/drivers/codex/mapper.d.ts +61 -0
  38. package/dist/host/src/drivers/codex/mapper.js +623 -0
  39. package/dist/host/src/drivers/codex/mapper.js.map +1 -0
  40. package/dist/host/src/drivers/codex/settings.d.ts +51 -0
  41. package/dist/host/src/drivers/codex/settings.js +107 -0
  42. package/dist/host/src/drivers/codex/settings.js.map +1 -0
  43. package/dist/host/src/drivers/images.d.ts +11 -0
  44. package/dist/host/src/drivers/images.js +34 -0
  45. package/dist/host/src/drivers/images.js.map +1 -0
  46. package/dist/host/src/drivers/nesting.d.ts +6 -0
  47. package/dist/host/src/drivers/nesting.js +25 -0
  48. package/dist/host/src/drivers/nesting.js.map +1 -0
  49. package/dist/host/src/drivers/registry.d.ts +21 -0
  50. package/dist/host/src/drivers/registry.js +30 -0
  51. package/dist/host/src/drivers/registry.js.map +1 -0
  52. package/dist/host/src/drivers/types.d.ts +105 -0
  53. package/dist/host/src/drivers/types.js +2 -0
  54. package/dist/host/src/drivers/types.js.map +1 -0
  55. package/dist/host/src/fs.d.ts +69 -0
  56. package/dist/host/src/fs.js +198 -0
  57. package/dist/host/src/fs.js.map +1 -0
  58. package/dist/host/src/gateway.d.ts +55 -0
  59. package/dist/host/src/gateway.js +263 -0
  60. package/dist/host/src/gateway.js.map +1 -0
  61. package/dist/host/src/host.d.ts +51 -0
  62. package/dist/host/src/host.js +133 -0
  63. package/dist/host/src/host.js.map +1 -0
  64. package/dist/host/src/hub.d.ts +89 -0
  65. package/dist/host/src/hub.js +592 -0
  66. package/dist/host/src/hub.js.map +1 -0
  67. package/dist/host/src/index.d.ts +10 -0
  68. package/dist/host/src/index.js +10 -0
  69. package/dist/host/src/index.js.map +1 -0
  70. package/dist/host/src/ports.d.ts +24 -0
  71. package/dist/host/src/ports.js +201 -0
  72. package/dist/host/src/ports.js.map +1 -0
  73. package/dist/host/src/rpc/client.d.ts +9 -0
  74. package/dist/host/src/rpc/client.js +42 -0
  75. package/dist/host/src/rpc/client.js.map +1 -0
  76. package/dist/host/src/rpc/server.d.ts +52 -0
  77. package/dist/host/src/rpc/server.js +293 -0
  78. package/dist/host/src/rpc/server.js.map +1 -0
  79. package/dist/host/src/screen.d.ts +30 -0
  80. package/dist/host/src/screen.js +230 -0
  81. package/dist/host/src/screen.js.map +1 -0
  82. package/dist/host/src/shell-env.d.ts +8 -0
  83. package/dist/host/src/shell-env.js +39 -0
  84. package/dist/host/src/shell-env.js.map +1 -0
  85. package/dist/host/src/store.d.ts +75 -0
  86. package/dist/host/src/store.js +265 -0
  87. package/dist/host/src/store.js.map +1 -0
  88. package/dist/host/src/terminals.d.ts +55 -0
  89. package/dist/host/src/terminals.js +367 -0
  90. package/dist/host/src/terminals.js.map +1 -0
  91. package/dist/shared-protocol/src/index.d.ts +3345 -3345
  92. package/dist/wire/src/crypto.d.ts +65 -0
  93. package/dist/wire/src/crypto.js +253 -0
  94. package/dist/wire/src/crypto.js.map +1 -0
  95. package/dist/wire/src/index.d.ts +8 -0
  96. package/dist/wire/src/index.js +9 -0
  97. package/dist/wire/src/index.js.map +1 -0
  98. package/dist/wire/src/model.d.ts +704 -0
  99. package/dist/wire/src/model.js +163 -0
  100. package/dist/wire/src/model.js.map +1 -0
  101. package/dist/wire/src/peer.d.ts +42 -0
  102. package/dist/wire/src/peer.js +143 -0
  103. package/dist/wire/src/peer.js.map +1 -0
  104. package/dist/wire/src/relay-client.d.ts +82 -0
  105. package/dist/wire/src/relay-client.js +259 -0
  106. package/dist/wire/src/relay-client.js.map +1 -0
  107. package/dist/wire/src/relay.d.ts +481 -0
  108. package/dist/wire/src/relay.js +129 -0
  109. package/dist/wire/src/relay.js.map +1 -0
  110. package/dist/wire/src/rpc.d.ts +4170 -0
  111. package/dist/wire/src/rpc.js +332 -0
  112. package/dist/wire/src/rpc.js.map +1 -0
  113. package/dist/wire/src/shell.d.ts +2 -0
  114. package/dist/wire/src/shell.js +62 -0
  115. package/dist/wire/src/shell.js.map +1 -0
  116. package/dist/wire/src/updates.d.ts +3325 -0
  117. package/dist/wire/src/updates.js +210 -0
  118. package/dist/wire/src/updates.js.map +1 -0
  119. package/package.json +8 -3
  120. package/src/commands/host.ts +297 -0
  121. package/src/commands/pair.ts +52 -0
  122. package/src/index.ts +74 -0
  123. package/src/utils/daemon.ts +4 -3
  124. package/dist/cli/src/commands/hook.d.ts +0 -6
  125. package/dist/cli/src/commands/hook.js +0 -120
  126. package/dist/cli/src/commands/hook.js.map +0 -1
  127. package/dist/cli/src/runtime/acp/agent-workspace-git.d.ts +0 -63
  128. package/dist/cli/src/runtime/acp/agent-workspace-git.js +0 -297
  129. package/dist/cli/src/runtime/acp/agent-workspace-git.js.map +0 -1
  130. package/dist/cli/src/runtime/acp-relay.d.ts +0 -23
  131. package/dist/cli/src/runtime/acp-relay.js +0 -73
  132. package/dist/cli/src/runtime/acp-relay.js.map +0 -1
  133. package/dist/cli/src/runtime/hook-permission-server.d.ts +0 -36
  134. package/dist/cli/src/runtime/hook-permission-server.js +0 -147
  135. 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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"}