@linkshell/gateway 0.3.9 → 0.4.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.
Files changed (41) hide show
  1. package/Dockerfile +1 -3
  2. package/README.md +13 -14
  3. package/dist/gateway/src/agent-permission-http.d.ts +74 -19
  4. package/dist/gateway/src/agent-permission-http.js +56 -16
  5. package/dist/gateway/src/agent-permission-http.js.map +1 -1
  6. package/dist/gateway/src/embedded.js +61 -153
  7. package/dist/gateway/src/embedded.js.map +1 -1
  8. package/dist/gateway/src/index.js +98 -193
  9. package/dist/gateway/src/index.js.map +1 -1
  10. package/dist/gateway/src/pairings.d.ts +3 -3
  11. package/dist/gateway/src/pairings.js +5 -4
  12. package/dist/gateway/src/pairings.js.map +1 -1
  13. package/dist/gateway/src/relay.d.ts +2 -2
  14. package/dist/gateway/src/relay.js +85 -161
  15. package/dist/gateway/src/relay.js.map +1 -1
  16. package/dist/gateway/src/sessions.d.ts +28 -42
  17. package/dist/gateway/src/sessions.js +145 -200
  18. package/dist/gateway/src/sessions.js.map +1 -1
  19. package/dist/gateway/src/state-store.d.ts +6 -9
  20. package/dist/gateway/src/state-store.js +19 -26
  21. package/dist/gateway/src/state-store.js.map +1 -1
  22. package/dist/gateway/src/tokens.d.ts +7 -27
  23. package/dist/gateway/src/tokens.js +60 -86
  24. package/dist/gateway/src/tokens.js.map +1 -1
  25. package/dist/gateway/src/tunnel.d.ts +13 -11
  26. package/dist/gateway/src/tunnel.js +36 -36
  27. package/dist/gateway/src/tunnel.js.map +1 -1
  28. package/dist/gateway/tsconfig.tsbuildinfo +1 -1
  29. package/dist/shared-protocol/src/index.d.ts +11978 -3423
  30. package/dist/shared-protocol/src/index.js +114 -163
  31. package/dist/shared-protocol/src/index.js.map +1 -1
  32. package/package.json +11 -11
  33. package/src/agent-permission-http.ts +63 -20
  34. package/src/embedded.ts +60 -158
  35. package/src/index.ts +98 -199
  36. package/src/pairings.ts +7 -6
  37. package/src/relay.ts +97 -193
  38. package/src/sessions.ts +150 -213
  39. package/src/state-store.ts +25 -41
  40. package/src/tokens.ts +63 -109
  41. package/src/tunnel.ts +43 -49
package/Dockerfile CHANGED
@@ -7,13 +7,12 @@ COPY package.json pnpm-workspace.yaml pnpm-lock.yaml ./
7
7
  COPY packages/shared-protocol/package.json packages/shared-protocol/
8
8
  COPY packages/gateway/package.json packages/gateway/
9
9
 
10
- RUN pnpm install --frozen-lockfile --filter @linkshell/protocol... --filter @linkshell/gateway...
10
+ RUN pnpm install --frozen-lockfile --filter @linkshell/gateway --filter @linkshell/protocol
11
11
 
12
12
  COPY packages/shared-protocol/ packages/shared-protocol/
13
13
  COPY packages/gateway/ packages/gateway/
14
14
  COPY tsconfig.base.json ./
15
15
 
16
- RUN pnpm install --offline --frozen-lockfile --filter @linkshell/protocol... --filter @linkshell/gateway...
17
16
  RUN pnpm --filter @linkshell/protocol build && pnpm --filter @linkshell/gateway build
18
17
 
19
18
  # Prune to production deps only
@@ -46,6 +45,5 @@ USER linkshell
46
45
  ENV NODE_ENV=production
47
46
  ENV PORT=8787
48
47
  EXPOSE 8787
49
- HEALTHCHECK --interval=30s --timeout=3s --start-period=10s --retries=3 CMD wget -qO- "http://127.0.0.1:${PORT:-8787}/healthz" >/dev/null || exit 1
50
48
 
51
49
  CMD ["node", "packages/gateway/dist/gateway/src/index.js"]
package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  LinkShell Gateway — WebSocket 消息中转服务,连接 CLI 和手机 App。
4
4
 
5
- Gateway 不运行任何终端进程,只负责配对、主机设备授权和消息路由。
5
+ Gateway 不运行任何终端进程,只负责配对、会话管理和消息路由。
6
6
 
7
7
  ## 部署
8
8
 
@@ -30,36 +30,35 @@ PORT=8787 node packages/gateway/dist/gateway/src/index.js
30
30
  | `SUPABASE_URL` | - | Supabase 项目 URL |
31
31
  | `SUPABASE_ANON_KEY` | - | Supabase anon key |
32
32
  | `SUPABASE_SERVICE_ROLE_KEY` | - | 服务端订阅检查和 Gateway 状态持久化使用 |
33
- | `SUPABASE_GATEWAY_AUTHORIZATION_TABLE` | `linkshell_gateway_device_authorizations` | 客户端到主机设备的长期授权表 |
34
- | `SUPABASE_GATEWAY_PAIRING_TABLE` | `linkshell_gateway_pairing_challenges` | 配对挑战持久化表 |
33
+ | `SUPABASE_GATEWAY_TOKEN_TABLE` | `linkshell_gateway_tokens` | 设备 token 持久化表 |
34
+ | `SUPABASE_GATEWAY_PAIRING_TABLE` | `linkshell_gateway_pairings` | 配对状态持久化表 |
35
35
  | `PAIRING_TTL_MS` | `600000` | 配对码有效期,默认 10 分钟 |
36
36
 
37
- 启用官方服务版部署时,先在 Supabase 执行 `docs/supabase-gateway-state.sql`。表不存在时 Gateway 会退回内存态,但 Docker 重启后设备授权和未过期配对挑战不会恢复。
37
+ 启用官方服务版部署时,先在 Supabase 执行 `docs/supabase-gateway-state.sql`。表不存在时 Gateway 会退回内存态,但 Docker 重启后设备 token 和未过期配对状态不会恢复。
38
38
 
39
39
  ## API
40
40
 
41
41
  | 方法 | 路径 | 说明 |
42
42
  |------|------|------|
43
43
  | `GET` | `/healthz` | 健康检查 |
44
- | `POST` | `/pairings` | 主机设备创建配对挑战(返回 6 位 code,默认 10 分钟有效) |
45
- | `POST` | `/pairings/claim` | 客户端用 code 换取 `hostDeviceId`、`deviceToken`、`authorizationId` |
44
+ | `POST` | `/pairings` | 创建配对(返回 6 位 code,默认 10 分钟有效) |
45
+ | `POST` | `/pairings/claim` | code 换取 sessionId |
46
46
  | `GET` | `/pairings/:code/status` | 查询配对状态 |
47
- | `GET` | `/devices` | 用设备 token 列出已授权主机设备 |
48
- | `GET` | `/devices/:hostDeviceId` | 主机设备详情 |
49
- | `DELETE` | `/devices/:hostDeviceId/authorizations/:authorizationId` | 撤销客户端设备授权 |
50
- | `WS` | `/ws?hostDeviceId=&role=` | 实时连接(role=host client) |
51
- | `GET/POST` | `/tunnel/:hostDeviceId/:port/**` | HTTP 端口转发 |
52
- | `WS` | `/tunnel/:hostDeviceId/:port/**` | WebSocket 端口转发(HMR) |
47
+ | `GET` | `/sessions` | 列出活跃会话 |
48
+ | `GET` | `/sessions/:id` | 会话详情 |
49
+ | `WS` | `/ws?sessionId=&role=` | 实时连接(role=host 或 client) |
50
+ | `GET/POST` | `/tunnel/:sessionId/:port/**` | HTTP 端口转发 |
51
+ | `WS` | `/tunnel/:sessionId/:port/**` | WebSocket 端口转发(HMR) |
53
52
 
54
53
  ## 特性
55
54
 
56
- - 内存态主机设备管理,可选 Supabase 持久化设备授权和配对挑战
55
+ - 内存态会话管理,可选 Supabase 持久化设备 token 和配对状态
57
56
  - ACK 追踪 + 输出缓存(最近 200 条,client 重连时快速重放)
58
57
  - 单设备控制权管理(claim/grant/reject/release)
59
58
  - Agent Workspace v2 envelope 透传,支持 capabilities、snapshot、event、permission 和 structured input
60
59
  - Tunnel proxy 支持 HTTP 与 WebSocket,移动端可预览本地 dev server
61
60
  - 心跳 ping/pong 检测死连接(20s 间隔)
62
- - 主机断开保留 60s,空闲 30min 清理
61
+ - 会话 TTL(host 断开保留 60s,空闲 30min 清理)
63
62
  - IP 限流(配对 30 req/min,WebSocket 20 conn/min)
64
63
  - CORS 支持
65
64
  - 协议版本协商
@@ -1,33 +1,88 @@
1
1
  import { z } from "zod";
2
- import type { DeviceManager } from "./sessions.js";
2
+ import type { SessionManager } from "./sessions.js";
3
3
  import type { TokenManager } from "./tokens.js";
4
- export declare const agentPermissionHttpBodySchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
4
+ export declare const agentPermissionHttpBodySchema: z.ZodDiscriminatedUnion<"protocol", [z.ZodObject<{
5
5
  protocol: z.ZodLiteral<"v2">;
6
- hostDeviceId: z.ZodString;
6
+ sessionId: z.ZodString;
7
7
  conversationId: z.ZodString;
8
8
  requestId: z.ZodString;
9
- outcome: z.ZodEnum<{
10
- allow: "allow";
11
- deny: "deny";
12
- cancelled: "cancelled";
13
- }>;
9
+ outcome: z.ZodEnum<["allow", "deny", "cancelled"]>;
14
10
  optionId: z.ZodOptional<z.ZodString>;
15
11
  terminalId: z.ZodOptional<z.ZodString>;
16
12
  agentSessionId: z.ZodOptional<z.ZodString>;
17
- }, z.core.$strip>, z.ZodObject<{
13
+ }, "strip", z.ZodTypeAny, {
14
+ sessionId: string;
15
+ requestId: string;
16
+ outcome: "allow" | "deny" | "cancelled";
17
+ conversationId: string;
18
+ protocol: "v2";
19
+ terminalId?: string | undefined;
20
+ agentSessionId?: string | undefined;
21
+ optionId?: string | undefined;
22
+ }, {
23
+ sessionId: string;
24
+ requestId: string;
25
+ outcome: "allow" | "deny" | "cancelled";
26
+ conversationId: string;
27
+ protocol: "v2";
28
+ terminalId?: string | undefined;
29
+ agentSessionId?: string | undefined;
30
+ optionId?: string | undefined;
31
+ }>, z.ZodObject<{
32
+ protocol: z.ZodLiteral<"legacy">;
33
+ sessionId: z.ZodString;
34
+ conversationId: z.ZodOptional<z.ZodString>;
35
+ agentSessionId: z.ZodOptional<z.ZodString>;
36
+ requestId: z.ZodString;
37
+ outcome: z.ZodEnum<["allow", "deny", "cancelled"]>;
38
+ optionId: z.ZodOptional<z.ZodString>;
39
+ terminalId: z.ZodOptional<z.ZodString>;
40
+ }, "strip", z.ZodTypeAny, {
41
+ sessionId: string;
42
+ requestId: string;
43
+ outcome: "allow" | "deny" | "cancelled";
44
+ protocol: "legacy";
45
+ terminalId?: string | undefined;
46
+ agentSessionId?: string | undefined;
47
+ optionId?: string | undefined;
48
+ conversationId?: string | undefined;
49
+ }, {
50
+ sessionId: string;
51
+ requestId: string;
52
+ outcome: "allow" | "deny" | "cancelled";
53
+ protocol: "legacy";
54
+ terminalId?: string | undefined;
55
+ agentSessionId?: string | undefined;
56
+ optionId?: string | undefined;
57
+ conversationId?: string | undefined;
58
+ }>, z.ZodObject<{
18
59
  protocol: z.ZodLiteral<"terminal">;
19
- hostDeviceId: z.ZodString;
60
+ sessionId: z.ZodString;
20
61
  conversationId: z.ZodOptional<z.ZodString>;
21
62
  requestId: z.ZodString;
22
- outcome: z.ZodEnum<{
23
- allow: "allow";
24
- deny: "deny";
25
- cancelled: "cancelled";
26
- }>;
63
+ outcome: z.ZodEnum<["allow", "deny", "cancelled"]>;
27
64
  optionId: z.ZodOptional<z.ZodString>;
28
65
  terminalId: z.ZodOptional<z.ZodString>;
29
66
  agentSessionId: z.ZodOptional<z.ZodString>;
30
- }, z.core.$strip>], "protocol">;
67
+ }, "strip", z.ZodTypeAny, {
68
+ sessionId: string;
69
+ requestId: string;
70
+ outcome: "allow" | "deny" | "cancelled";
71
+ protocol: "terminal";
72
+ terminalId?: string | undefined;
73
+ agentSessionId?: string | undefined;
74
+ optionId?: string | undefined;
75
+ conversationId?: string | undefined;
76
+ }, {
77
+ sessionId: string;
78
+ requestId: string;
79
+ outcome: "allow" | "deny" | "cancelled";
80
+ protocol: "terminal";
81
+ terminalId?: string | undefined;
82
+ agentSessionId?: string | undefined;
83
+ optionId?: string | undefined;
84
+ conversationId?: string | undefined;
85
+ }>]>;
31
86
  export type AgentPermissionHttpBody = z.infer<typeof agentPermissionHttpBodySchema>;
32
87
  export type AgentPermissionHttpResult = {
33
88
  status: number;
@@ -38,7 +93,7 @@ export type AgentPermissionHttpResult = {
38
93
  ack?: AgentPermissionAck;
39
94
  body: {
40
95
  ok?: true;
41
- error?: "unauthorized" | "device_not_found" | "host_not_connected" | "invalid_payload" | "permission_not_delivered" | "permission_ack_timeout";
96
+ error?: "unauthorized" | "session_not_found" | "host_not_connected" | "invalid_payload" | "permission_not_delivered" | "permission_ack_timeout";
42
97
  message?: string;
43
98
  resolved?: boolean;
44
99
  delivered?: boolean;
@@ -53,12 +108,12 @@ export type AgentPermissionAck = {
53
108
  message?: string;
54
109
  };
55
110
  export declare function resolveAgentPermissionHttpAck(input: {
56
- hostDeviceId: string;
111
+ sessionId: string;
57
112
  ack: AgentPermissionAck;
58
113
  }): boolean;
59
114
  export declare function forwardAgentPermissionHttp(input: {
60
115
  token: string | null;
61
116
  body: AgentPermissionHttpBody;
62
- sessionManager: DeviceManager;
117
+ sessionManager: SessionManager;
63
118
  tokenManager: TokenManager;
64
119
  }): Promise<AgentPermissionHttpResult>;
@@ -5,7 +5,7 @@ const PERMISSION_ACK_TIMEOUT_MS = 12_000;
5
5
  export const agentPermissionHttpBodySchema = z.discriminatedUnion("protocol", [
6
6
  z.object({
7
7
  protocol: z.literal("v2"),
8
- hostDeviceId: z.string().min(1),
8
+ sessionId: z.string().min(1),
9
9
  conversationId: z.string().min(1),
10
10
  requestId: z.string().min(1),
11
11
  outcome: permissionOutcomeSchema,
@@ -13,9 +13,19 @@ export const agentPermissionHttpBodySchema = z.discriminatedUnion("protocol", [
13
13
  terminalId: z.string().optional(),
14
14
  agentSessionId: z.string().optional(),
15
15
  }),
16
+ z.object({
17
+ protocol: z.literal("legacy"),
18
+ sessionId: z.string().min(1),
19
+ conversationId: z.string().optional(),
20
+ agentSessionId: z.string().optional(),
21
+ requestId: z.string().min(1),
22
+ outcome: permissionOutcomeSchema,
23
+ optionId: z.string().optional(),
24
+ terminalId: z.string().optional(),
25
+ }),
16
26
  z.object({
17
27
  protocol: z.literal("terminal"),
18
- hostDeviceId: z.string().min(1),
28
+ sessionId: z.string().min(1),
19
29
  conversationId: z.string().optional(),
20
30
  requestId: z.string().min(1),
21
31
  outcome: permissionOutcomeSchema,
@@ -25,11 +35,11 @@ export const agentPermissionHttpBodySchema = z.discriminatedUnion("protocol", [
25
35
  }),
26
36
  ]);
27
37
  const pendingAcks = new Map();
28
- function ackKey(hostDeviceId, requestId) {
29
- return `${hostDeviceId}:${requestId}`;
38
+ function ackKey(sessionId, requestId) {
39
+ return `${sessionId}:${requestId}`;
30
40
  }
31
41
  export function resolveAgentPermissionHttpAck(input) {
32
- const key = ackKey(input.hostDeviceId, input.ack.requestId);
42
+ const key = ackKey(input.sessionId, input.ack.requestId);
33
43
  const pending = pendingAcks.get(key);
34
44
  if (!pending)
35
45
  return false;
@@ -38,8 +48,8 @@ export function resolveAgentPermissionHttpAck(input) {
38
48
  pending.resolve(input.ack);
39
49
  return true;
40
50
  }
41
- function waitForAck(hostDeviceId, requestId) {
42
- const key = ackKey(hostDeviceId, requestId);
51
+ function waitForAck(sessionId, requestId) {
52
+ const key = ackKey(sessionId, requestId);
43
53
  const existing = pendingAcks.get(key);
44
54
  if (existing) {
45
55
  pendingAcks.delete(key);
@@ -62,8 +72,7 @@ function waitForAck(hostDeviceId, requestId) {
62
72
  }
63
73
  export async function forwardAgentPermissionHttp(input) {
64
74
  const { token, body, sessionManager, tokenManager } = input;
65
- const { hostDeviceId } = body;
66
- if (!token || !tokenManager.owns(token, hostDeviceId)) {
75
+ if (!token || !tokenManager.owns(token, body.sessionId)) {
67
76
  return {
68
77
  status: 401,
69
78
  body: {
@@ -72,13 +81,13 @@ export async function forwardAgentPermissionHttp(input) {
72
81
  },
73
82
  };
74
83
  }
75
- const session = sessionManager.get(hostDeviceId);
84
+ const session = sessionManager.get(body.sessionId);
76
85
  if (!session) {
77
86
  return {
78
87
  status: 404,
79
88
  body: {
80
- error: "device_not_found",
81
- message: "Host device not found",
89
+ error: "session_not_found",
90
+ message: "Session not found",
82
91
  },
83
92
  };
84
93
  }
@@ -94,7 +103,7 @@ export async function forwardAgentPermissionHttp(input) {
94
103
  try {
95
104
  const envelopes = createPermissionEnvelopes(body);
96
105
  const waitsForDelivery = envelopes.some((envelope) => envelope.type === "permission.decision");
97
- const ackPromise = waitsForDelivery ? waitForAck(hostDeviceId, body.requestId) : null;
106
+ const ackPromise = waitsForDelivery ? waitForAck(body.sessionId, body.requestId) : null;
98
107
  for (const envelope of envelopes) {
99
108
  session.host.socket.send(serializeEnvelope(envelope));
100
109
  }
@@ -164,7 +173,6 @@ export async function forwardAgentPermissionHttp(input) {
164
173
  }
165
174
  }
166
175
  function createPermissionEnvelopes(body) {
167
- const { hostDeviceId } = body;
168
176
  if (body.protocol === "v2") {
169
177
  const payload = parseTypedPayload("agent.v2.permission.respond", {
170
178
  conversationId: body.conversationId,
@@ -174,18 +182,50 @@ function createPermissionEnvelopes(body) {
174
182
  });
175
183
  return [createEnvelope({
176
184
  type: "agent.v2.permission.respond",
177
- hostDeviceId,
185
+ sessionId: body.sessionId,
178
186
  deviceId: "live-activity",
179
187
  payload,
180
188
  })];
181
189
  }
190
+ if (body.protocol === "legacy") {
191
+ const legacyPayload = parseTypedPayload("agent.permission.response", {
192
+ agentSessionId: body.agentSessionId || undefined,
193
+ requestId: body.requestId,
194
+ outcome: body.outcome,
195
+ optionId: body.optionId || undefined,
196
+ });
197
+ const envelopes = [createEnvelope({
198
+ type: "agent.permission.response",
199
+ sessionId: body.sessionId,
200
+ deviceId: "live-activity",
201
+ payload: legacyPayload,
202
+ })];
203
+ // `pr-*` requests are terminal PermissionRequest hooks surfaced through the
204
+ // legacy Agent UI channel. Send the terminal decision too so older hosts, and
205
+ // hosts that route hook permissions through terminal handling, can resolve it
206
+ // without involving the mobile websocket/controller path.
207
+ if (body.requestId.startsWith("pr-")) {
208
+ const decisionPayload = parseTypedPayload("permission.decision", {
209
+ requestId: body.requestId,
210
+ decision: body.outcome === "allow" ? "allow" : "deny",
211
+ });
212
+ envelopes.push(createEnvelope({
213
+ type: "permission.decision",
214
+ sessionId: body.sessionId,
215
+ terminalId: body.terminalId ?? "default",
216
+ deviceId: "live-activity",
217
+ payload: decisionPayload,
218
+ }));
219
+ }
220
+ return envelopes;
221
+ }
182
222
  const payload = parseTypedPayload("permission.decision", {
183
223
  requestId: body.requestId,
184
224
  decision: body.outcome === "allow" ? "allow" : "deny",
185
225
  });
186
226
  return [createEnvelope({
187
227
  type: "permission.decision",
188
- hostDeviceId,
228
+ sessionId: body.sessionId,
189
229
  terminalId: body.terminalId ?? "default",
190
230
  deviceId: "live-activity",
191
231
  payload,
@@ -1 +1 @@
1
- {"version":3,"file":"agent-permission-http.js","sourceRoot":"","sources":["../../../src/agent-permission-http.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent-permission-http.js","sourceRoot":"","sources":["../../../src/agent-permission-http.ts"],"names":[],"mappings":"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"}