vibe-remote-protocol 1.0.0 → 1.2.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/dist/binary-protocol.d.ts +45 -0
- package/dist/binary-protocol.d.ts.map +1 -1
- package/dist/binary-protocol.js +94 -2
- package/dist/binary-protocol.js.map +1 -1
- package/dist/index.d.ts +6 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -3
- package/dist/index.js.map +1 -1
- package/dist/messages.d.ts +18 -1
- package/dist/messages.d.ts.map +1 -1
- package/dist/messages.js.map +1 -1
- package/fixtures/binary-protocol-v3.fixtures.json +30 -0
- package/package.json +2 -3
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
* - PROTOCOL_ERROR 송신 helpers
|
|
12
12
|
* - APP_JSON encoder
|
|
13
13
|
*/
|
|
14
|
+
import type { MsgFcmSend } from './messages';
|
|
14
15
|
export declare const OPCODE: {
|
|
15
16
|
readonly PTY_DATA: 0;
|
|
16
17
|
readonly APP_JSON: 1;
|
|
@@ -32,6 +33,16 @@ export declare const PROTOCOL_ERROR_REASON: {
|
|
|
32
33
|
* 과 *동시* 변경 필수.
|
|
33
34
|
*/
|
|
34
35
|
export declare const PROTOCOL_VERSION_V3 = 3;
|
|
36
|
+
/**
|
|
37
|
+
* Grid(터미널) 의 server-side RESIZE 상한 — wire 계약의 canonical 정의처.
|
|
38
|
+
*
|
|
39
|
+
* `MsgGridResizeCapped`("server-side RESIZE cap (500×200)") / `MsgCapAck.max_cols/max_rows`
|
|
40
|
+
* 가 prose 로 가리키는 그 값. desktop `GridEmulator`·`ssh-manager` 와 relay
|
|
41
|
+
* `FrameSnapshotService` 가 **동일 값으로 clamp** 해야 하므로, 각 소비자가 복제하지 말고 여기서
|
|
42
|
+
* import 한다(복제 시 cap 변경이 소비자별로 silently 어긋남).
|
|
43
|
+
*/
|
|
44
|
+
export declare const GRID_MAX_COLS = 500;
|
|
45
|
+
export declare const GRID_MAX_ROWS = 200;
|
|
35
46
|
/**
|
|
36
47
|
* frame 의 opcode 만 빠르게 식별. binary frame 검증 + 라우팅 분기에 사용.
|
|
37
48
|
* empty buffer 면 -1 리턴 (호출자가 close 결정).
|
|
@@ -50,10 +61,29 @@ export declare function readOpcode(buffer: Buffer): number;
|
|
|
50
61
|
export declare function isAppJsonSessionAttachLike(buffer: Buffer): boolean;
|
|
51
62
|
/**
|
|
52
63
|
* APP_JSON session_attach payload 를 JSON parse. malformed / 잘못된 type 이면 null.
|
|
64
|
+
*
|
|
65
|
+
* [동적 frame-snapshot 20260615] `cols`/`rows` 도 함께 반환한다. 모바일은 session_attach 에
|
|
66
|
+
* 자신의 viewport 크기를 동봉하며(`connection_provider.dart:1626` — `_ptyWidth` 실측 또는
|
|
67
|
+
* `_lastViewportCols` seed), relay 가 last-frame snapshot 을 `dumpAnsi` 하기 *직전* 에 emulator
|
|
68
|
+
* grid 를 이 크기로 resize 하는 데 쓴다. 80×40 고정 grid 에서 reflow 된 화면이 모바일 viewport
|
|
69
|
+
* 와 한 틱 어긋나던 문제(non-sync.md §0)를 고친다. 양수 정수일 때만 포함(아니면 omit) — 호출자가
|
|
70
|
+
* `undefined` 면 기본/마지막 크기를 유지하도록.
|
|
53
71
|
*/
|
|
54
72
|
export declare function parseAppJsonSessionAttach(buffer: Buffer): {
|
|
55
73
|
machineId: string;
|
|
74
|
+
cols?: number;
|
|
75
|
+
rows?: number;
|
|
56
76
|
} | null;
|
|
77
|
+
/**
|
|
78
|
+
* APP_JSON frame 이 `"fcm.send"` 를 포함하는지 fast path 검사. relay 가 host→relay 의
|
|
79
|
+
* 발송 요청만 가로채려 [isAppJsonSessionAttachLike] 와 동일하게 substring 가드한다.
|
|
80
|
+
*/
|
|
81
|
+
export declare function isAppJsonFcmSendLike(buffer: Buffer): boolean;
|
|
82
|
+
/**
|
|
83
|
+
* APP_JSON fcm.send payload 파싱. malformed / 잘못된 type / tokens·payload 형식 오류면
|
|
84
|
+
* null. relay 가 가로채 firebase-admin 으로 발송할 때 사용한다.
|
|
85
|
+
*/
|
|
86
|
+
export declare function parseAppJsonFcmSend(buffer: Buffer): MsgFcmSend | null;
|
|
57
87
|
/**
|
|
58
88
|
* FRAME_SNAPSHOT (0x03) frame encode.
|
|
59
89
|
*
|
|
@@ -75,4 +105,19 @@ export declare function encodeAppJson(data: object): Buffer;
|
|
|
75
105
|
* Wire format: `[0x02] [cols: BE u32] [rows: BE u32]`
|
|
76
106
|
*/
|
|
77
107
|
export declare function encodeResize(cols: number, rows: number): Buffer;
|
|
108
|
+
/**
|
|
109
|
+
* RESIZE (0x02) frame decode — `[0x02] [cols: BE u32] [rows: BE u32]` (총 9 bytes).
|
|
110
|
+
*
|
|
111
|
+
* opcode 불일치 / 9 bytes 미만이면 null. cols/rows 의 의미 검증(>0, cap)은 호출자 책임 —
|
|
112
|
+
* 디코더는 wire 를 그대로 읽기만 한다.
|
|
113
|
+
*
|
|
114
|
+
* [동적 frame-snapshot 20260615] relay 가 mobile→host RESIZE 를 forward 하면서 동시에
|
|
115
|
+
* 가로채(`RelayService.handleMessage`) emulator grid 를 이 크기로 resize 하는 데 쓴다.
|
|
116
|
+
* attach 사이에 흐르는 PTY_DATA 를 올바른 폭으로 누적·해석하기 위함(session_attach 의
|
|
117
|
+
* dump-직전 resize 가 PRIMARY, 이쪽은 SECONDARY).
|
|
118
|
+
*/
|
|
119
|
+
export declare function decodeResize(buffer: Buffer): {
|
|
120
|
+
cols: number;
|
|
121
|
+
rows: number;
|
|
122
|
+
} | null;
|
|
78
123
|
//# sourceMappingURL=binary-protocol.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"binary-protocol.d.ts","sourceRoot":"","sources":["../src/binary-protocol.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,eAAO,MAAM,MAAM;;;;;;;;CAQT,CAAC;AAEX,eAAO,MAAM,qBAAqB;;;;;CAKxB,CAAC;AAEX;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,IAAI,CAAC;AAErC;;;GAGG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAGjD;AAED;;;;;;;;;GASG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAKlE;AAED
|
|
1
|
+
{"version":3,"file":"binary-protocol.d.ts","sourceRoot":"","sources":["../src/binary-protocol.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,eAAO,MAAM,MAAM;;;;;;;;CAQT,CAAC;AAEX,eAAO,MAAM,qBAAqB;;;;;CAKxB,CAAC;AAEX;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,IAAI,CAAC;AAErC;;;;;;;GAOG;AACH,eAAO,MAAM,aAAa,MAAM,CAAC;AACjC,eAAO,MAAM,aAAa,MAAM,CAAC;AAEjC;;;GAGG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAGjD;AAED;;;;;;;;;GASG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAKlE;AAED;;;;;;;;;GASG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,MAAM,GACb;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CA2B5D;AASD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAI5D;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAmBrE;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,GACX,MAAM,CAeR;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAK1D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAMlD;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAM/D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,MAAM,GACb;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAOvC"}
|
package/dist/binary-protocol.js
CHANGED
|
@@ -13,14 +13,17 @@
|
|
|
13
13
|
* - APP_JSON encoder
|
|
14
14
|
*/
|
|
15
15
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
-
exports.PROTOCOL_VERSION_V3 = exports.PROTOCOL_ERROR_REASON = exports.OPCODE = void 0;
|
|
16
|
+
exports.GRID_MAX_ROWS = exports.GRID_MAX_COLS = exports.PROTOCOL_VERSION_V3 = exports.PROTOCOL_ERROR_REASON = exports.OPCODE = void 0;
|
|
17
17
|
exports.readOpcode = readOpcode;
|
|
18
18
|
exports.isAppJsonSessionAttachLike = isAppJsonSessionAttachLike;
|
|
19
19
|
exports.parseAppJsonSessionAttach = parseAppJsonSessionAttach;
|
|
20
|
+
exports.isAppJsonFcmSendLike = isAppJsonFcmSendLike;
|
|
21
|
+
exports.parseAppJsonFcmSend = parseAppJsonFcmSend;
|
|
20
22
|
exports.encodeFrameSnapshotPush = encodeFrameSnapshotPush;
|
|
21
23
|
exports.encodeProtocolError = encodeProtocolError;
|
|
22
24
|
exports.encodeAppJson = encodeAppJson;
|
|
23
25
|
exports.encodeResize = encodeResize;
|
|
26
|
+
exports.decodeResize = decodeResize;
|
|
24
27
|
exports.OPCODE = {
|
|
25
28
|
PTY_DATA: 0x00,
|
|
26
29
|
APP_JSON: 0x01,
|
|
@@ -42,6 +45,16 @@ exports.PROTOCOL_ERROR_REASON = {
|
|
|
42
45
|
* 과 *동시* 변경 필수.
|
|
43
46
|
*/
|
|
44
47
|
exports.PROTOCOL_VERSION_V3 = 3;
|
|
48
|
+
/**
|
|
49
|
+
* Grid(터미널) 의 server-side RESIZE 상한 — wire 계약의 canonical 정의처.
|
|
50
|
+
*
|
|
51
|
+
* `MsgGridResizeCapped`("server-side RESIZE cap (500×200)") / `MsgCapAck.max_cols/max_rows`
|
|
52
|
+
* 가 prose 로 가리키는 그 값. desktop `GridEmulator`·`ssh-manager` 와 relay
|
|
53
|
+
* `FrameSnapshotService` 가 **동일 값으로 clamp** 해야 하므로, 각 소비자가 복제하지 말고 여기서
|
|
54
|
+
* import 한다(복제 시 cap 변경이 소비자별로 silently 어긋남).
|
|
55
|
+
*/
|
|
56
|
+
exports.GRID_MAX_COLS = 500;
|
|
57
|
+
exports.GRID_MAX_ROWS = 200;
|
|
45
58
|
/**
|
|
46
59
|
* frame 의 opcode 만 빠르게 식별. binary frame 검증 + 라우팅 분기에 사용.
|
|
47
60
|
* empty buffer 면 -1 리턴 (호출자가 close 결정).
|
|
@@ -71,8 +84,17 @@ function isAppJsonSessionAttachLike(buffer) {
|
|
|
71
84
|
}
|
|
72
85
|
/**
|
|
73
86
|
* APP_JSON session_attach payload 를 JSON parse. malformed / 잘못된 type 이면 null.
|
|
87
|
+
*
|
|
88
|
+
* [동적 frame-snapshot 20260615] `cols`/`rows` 도 함께 반환한다. 모바일은 session_attach 에
|
|
89
|
+
* 자신의 viewport 크기를 동봉하며(`connection_provider.dart:1626` — `_ptyWidth` 실측 또는
|
|
90
|
+
* `_lastViewportCols` seed), relay 가 last-frame snapshot 을 `dumpAnsi` 하기 *직전* 에 emulator
|
|
91
|
+
* grid 를 이 크기로 resize 하는 데 쓴다. 80×40 고정 grid 에서 reflow 된 화면이 모바일 viewport
|
|
92
|
+
* 와 한 틱 어긋나던 문제(non-sync.md §0)를 고친다. 양수 정수일 때만 포함(아니면 omit) — 호출자가
|
|
93
|
+
* `undefined` 면 기본/마지막 크기를 유지하도록.
|
|
74
94
|
*/
|
|
75
95
|
function parseAppJsonSessionAttach(buffer) {
|
|
96
|
+
if (buffer.length < 1)
|
|
97
|
+
return null;
|
|
76
98
|
if (buffer.readUInt8(0) !== exports.OPCODE.APP_JSON)
|
|
77
99
|
return null;
|
|
78
100
|
const text = buffer.toString('utf-8', 1);
|
|
@@ -89,9 +111,58 @@ function parseAppJsonSessionAttach(buffer) {
|
|
|
89
111
|
return null;
|
|
90
112
|
}
|
|
91
113
|
const rawMachineId = parsed.machineId;
|
|
92
|
-
|
|
114
|
+
const result = {
|
|
93
115
|
machineId: typeof rawMachineId === 'string' ? rawMachineId : '',
|
|
94
116
|
};
|
|
117
|
+
// cols/rows 는 양수 정수일 때만 채택(아니면 omit) — 호출자가 undefined 면 기본/마지막 크기 유지.
|
|
118
|
+
const cols = toPositiveInt(parsed.cols);
|
|
119
|
+
const rows = toPositiveInt(parsed.rows);
|
|
120
|
+
if (cols !== undefined)
|
|
121
|
+
result.cols = cols;
|
|
122
|
+
if (rows !== undefined)
|
|
123
|
+
result.rows = rows;
|
|
124
|
+
return result;
|
|
125
|
+
}
|
|
126
|
+
/** 양수 유한 숫자면 floor 한 값을, 아니면 undefined. cols/rows 채택 규칙(module-private). */
|
|
127
|
+
function toPositiveInt(x) {
|
|
128
|
+
return typeof x === 'number' && Number.isFinite(x) && x > 0
|
|
129
|
+
? Math.floor(x)
|
|
130
|
+
: undefined;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* APP_JSON frame 이 `"fcm.send"` 를 포함하는지 fast path 검사. relay 가 host→relay 의
|
|
134
|
+
* 발송 요청만 가로채려 [isAppJsonSessionAttachLike] 와 동일하게 substring 가드한다.
|
|
135
|
+
*/
|
|
136
|
+
function isAppJsonFcmSendLike(buffer) {
|
|
137
|
+
if (buffer.length < 2)
|
|
138
|
+
return false;
|
|
139
|
+
if (buffer.readUInt8(0) !== exports.OPCODE.APP_JSON)
|
|
140
|
+
return false;
|
|
141
|
+
return buffer.toString('utf-8', 1).includes('"fcm.send"');
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* APP_JSON fcm.send payload 파싱. malformed / 잘못된 type / tokens·payload 형식 오류면
|
|
145
|
+
* null. relay 가 가로채 firebase-admin 으로 발송할 때 사용한다.
|
|
146
|
+
*/
|
|
147
|
+
function parseAppJsonFcmSend(buffer) {
|
|
148
|
+
if (buffer.readUInt8(0) !== exports.OPCODE.APP_JSON)
|
|
149
|
+
return null;
|
|
150
|
+
let parsed;
|
|
151
|
+
try {
|
|
152
|
+
parsed = JSON.parse(buffer.toString('utf-8', 1));
|
|
153
|
+
}
|
|
154
|
+
catch {
|
|
155
|
+
return null;
|
|
156
|
+
}
|
|
157
|
+
if (!parsed ||
|
|
158
|
+
typeof parsed !== 'object' ||
|
|
159
|
+
parsed.type !== 'fcm.send' ||
|
|
160
|
+
!Array.isArray(parsed.tokens) ||
|
|
161
|
+
typeof parsed.payload !== 'object' ||
|
|
162
|
+
parsed.payload === null) {
|
|
163
|
+
return null;
|
|
164
|
+
}
|
|
165
|
+
return parsed;
|
|
95
166
|
}
|
|
96
167
|
/**
|
|
97
168
|
* FRAME_SNAPSHOT (0x03) frame encode.
|
|
@@ -146,4 +217,25 @@ function encodeResize(cols, rows) {
|
|
|
146
217
|
frame.writeUInt32BE(rows, 5);
|
|
147
218
|
return frame;
|
|
148
219
|
}
|
|
220
|
+
/**
|
|
221
|
+
* RESIZE (0x02) frame decode — `[0x02] [cols: BE u32] [rows: BE u32]` (총 9 bytes).
|
|
222
|
+
*
|
|
223
|
+
* opcode 불일치 / 9 bytes 미만이면 null. cols/rows 의 의미 검증(>0, cap)은 호출자 책임 —
|
|
224
|
+
* 디코더는 wire 를 그대로 읽기만 한다.
|
|
225
|
+
*
|
|
226
|
+
* [동적 frame-snapshot 20260615] relay 가 mobile→host RESIZE 를 forward 하면서 동시에
|
|
227
|
+
* 가로채(`RelayService.handleMessage`) emulator grid 를 이 크기로 resize 하는 데 쓴다.
|
|
228
|
+
* attach 사이에 흐르는 PTY_DATA 를 올바른 폭으로 누적·해석하기 위함(session_attach 의
|
|
229
|
+
* dump-직전 resize 가 PRIMARY, 이쪽은 SECONDARY).
|
|
230
|
+
*/
|
|
231
|
+
function decodeResize(buffer) {
|
|
232
|
+
if (buffer.length < 9)
|
|
233
|
+
return null;
|
|
234
|
+
if (buffer.readUInt8(0) !== exports.OPCODE.RESIZE)
|
|
235
|
+
return null;
|
|
236
|
+
return {
|
|
237
|
+
cols: buffer.readUInt32BE(1),
|
|
238
|
+
rows: buffer.readUInt32BE(5),
|
|
239
|
+
};
|
|
240
|
+
}
|
|
149
241
|
//# sourceMappingURL=binary-protocol.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"binary-protocol.js","sourceRoot":"","sources":["../src/binary-protocol.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;GAYG;;;
|
|
1
|
+
{"version":3,"file":"binary-protocol.js","sourceRoot":"","sources":["../src/binary-protocol.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -2,12 +2,14 @@
|
|
|
2
2
|
* @vibe-remote/protocol — VibeRemote binary WebSocket protocol v3.
|
|
3
3
|
*
|
|
4
4
|
* Public API:
|
|
5
|
-
* -
|
|
5
|
+
* - 상수: OPCODE, PROTOCOL_ERROR_REASON, PROTOCOL_VERSION_V3, GRID_MAX_COLS, GRID_MAX_ROWS
|
|
6
6
|
* - encoders: encodeAppJson, encodeFrameSnapshotPush, encodeProtocolError, encodeResize
|
|
7
|
-
* -
|
|
7
|
+
* - decoders: decodeResize
|
|
8
|
+
* - inspectors: readOpcode, isAppJsonSessionAttachLike, parseAppJsonSessionAttach,
|
|
9
|
+
* isAppJsonFcmSendLike, parseAppJsonFcmSend
|
|
8
10
|
* - APP_JSON 메시지 타입: AppJsonMessage 및 모든 Msg* 인터페이스
|
|
9
11
|
*/
|
|
10
|
-
export { OPCODE, PROTOCOL_ERROR_REASON, PROTOCOL_VERSION_V3, readOpcode, isAppJsonSessionAttachLike, parseAppJsonSessionAttach, encodeFrameSnapshotPush, encodeProtocolError, encodeAppJson, encodeResize, } from './binary-protocol';
|
|
11
|
-
export type { AppJsonMessage, Machine, PtyStatus, ClaudeState, ClientCapability, SnapshotReqReason, PtyAuthorityMode, MsgHello, MsgHelloAck, MsgCapReq, MsgCapAck, MsgSnapshotReq, MsgMachineList, MsgSessionAttach, MsgConnectionStatus, MsgTerminalData, MsgClaudeState, MsgPtyStatus, MsgGitResult, MsgSessionReplay, MsgGridResizeCapped, MsgProtocolMismatch, MsgPing, MsgPong, MsgError, MsgInput, } from './messages';
|
|
12
|
+
export { OPCODE, PROTOCOL_ERROR_REASON, PROTOCOL_VERSION_V3, GRID_MAX_COLS, GRID_MAX_ROWS, readOpcode, isAppJsonSessionAttachLike, parseAppJsonSessionAttach, isAppJsonFcmSendLike, parseAppJsonFcmSend, encodeFrameSnapshotPush, encodeProtocolError, encodeAppJson, encodeResize, decodeResize, } from './binary-protocol';
|
|
13
|
+
export type { AppJsonMessage, Machine, PtyStatus, ClaudeState, ClientCapability, SnapshotReqReason, PtyAuthorityMode, MsgHello, MsgHelloAck, MsgCapReq, MsgCapAck, MsgSnapshotReq, MsgMachineList, MsgSessionAttach, MsgConnectionStatus, MsgTerminalData, MsgClaudeState, MsgPtyStatus, MsgGitResult, MsgSessionReplay, MsgGridResizeCapped, MsgProtocolMismatch, MsgPing, MsgPong, MsgError, MsgInput, MsgFcmSend, } from './messages';
|
|
12
14
|
export { isAppJsonMessage } from './messages';
|
|
13
15
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EACL,MAAM,EACN,qBAAqB,EACrB,mBAAmB,EACnB,aAAa,EACb,aAAa,EACb,UAAU,EACV,0BAA0B,EAC1B,yBAAyB,EACzB,oBAAoB,EACpB,mBAAmB,EACnB,uBAAuB,EACvB,mBAAmB,EACnB,aAAa,EACb,YAAY,EACZ,YAAY,GACb,MAAM,mBAAmB,CAAC;AAE3B,YAAY,EACV,cAAc,EACd,OAAO,EACP,SAAS,EACT,WAAW,EACX,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,QAAQ,EACR,WAAW,EACX,SAAS,EACT,SAAS,EACT,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,mBAAmB,EACnB,eAAe,EACf,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,OAAO,EACP,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,UAAU,GACX,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -3,24 +3,31 @@
|
|
|
3
3
|
* @vibe-remote/protocol — VibeRemote binary WebSocket protocol v3.
|
|
4
4
|
*
|
|
5
5
|
* Public API:
|
|
6
|
-
* -
|
|
6
|
+
* - 상수: OPCODE, PROTOCOL_ERROR_REASON, PROTOCOL_VERSION_V3, GRID_MAX_COLS, GRID_MAX_ROWS
|
|
7
7
|
* - encoders: encodeAppJson, encodeFrameSnapshotPush, encodeProtocolError, encodeResize
|
|
8
|
-
* -
|
|
8
|
+
* - decoders: decodeResize
|
|
9
|
+
* - inspectors: readOpcode, isAppJsonSessionAttachLike, parseAppJsonSessionAttach,
|
|
10
|
+
* isAppJsonFcmSendLike, parseAppJsonFcmSend
|
|
9
11
|
* - APP_JSON 메시지 타입: AppJsonMessage 및 모든 Msg* 인터페이스
|
|
10
12
|
*/
|
|
11
13
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.isAppJsonMessage = exports.encodeResize = exports.encodeAppJson = exports.encodeProtocolError = exports.encodeFrameSnapshotPush = exports.parseAppJsonSessionAttach = exports.isAppJsonSessionAttachLike = exports.readOpcode = exports.PROTOCOL_VERSION_V3 = exports.PROTOCOL_ERROR_REASON = exports.OPCODE = void 0;
|
|
14
|
+
exports.isAppJsonMessage = exports.decodeResize = exports.encodeResize = exports.encodeAppJson = exports.encodeProtocolError = exports.encodeFrameSnapshotPush = exports.parseAppJsonFcmSend = exports.isAppJsonFcmSendLike = exports.parseAppJsonSessionAttach = exports.isAppJsonSessionAttachLike = exports.readOpcode = exports.GRID_MAX_ROWS = exports.GRID_MAX_COLS = exports.PROTOCOL_VERSION_V3 = exports.PROTOCOL_ERROR_REASON = exports.OPCODE = void 0;
|
|
13
15
|
var binary_protocol_1 = require("./binary-protocol");
|
|
14
16
|
Object.defineProperty(exports, "OPCODE", { enumerable: true, get: function () { return binary_protocol_1.OPCODE; } });
|
|
15
17
|
Object.defineProperty(exports, "PROTOCOL_ERROR_REASON", { enumerable: true, get: function () { return binary_protocol_1.PROTOCOL_ERROR_REASON; } });
|
|
16
18
|
Object.defineProperty(exports, "PROTOCOL_VERSION_V3", { enumerable: true, get: function () { return binary_protocol_1.PROTOCOL_VERSION_V3; } });
|
|
19
|
+
Object.defineProperty(exports, "GRID_MAX_COLS", { enumerable: true, get: function () { return binary_protocol_1.GRID_MAX_COLS; } });
|
|
20
|
+
Object.defineProperty(exports, "GRID_MAX_ROWS", { enumerable: true, get: function () { return binary_protocol_1.GRID_MAX_ROWS; } });
|
|
17
21
|
Object.defineProperty(exports, "readOpcode", { enumerable: true, get: function () { return binary_protocol_1.readOpcode; } });
|
|
18
22
|
Object.defineProperty(exports, "isAppJsonSessionAttachLike", { enumerable: true, get: function () { return binary_protocol_1.isAppJsonSessionAttachLike; } });
|
|
19
23
|
Object.defineProperty(exports, "parseAppJsonSessionAttach", { enumerable: true, get: function () { return binary_protocol_1.parseAppJsonSessionAttach; } });
|
|
24
|
+
Object.defineProperty(exports, "isAppJsonFcmSendLike", { enumerable: true, get: function () { return binary_protocol_1.isAppJsonFcmSendLike; } });
|
|
25
|
+
Object.defineProperty(exports, "parseAppJsonFcmSend", { enumerable: true, get: function () { return binary_protocol_1.parseAppJsonFcmSend; } });
|
|
20
26
|
Object.defineProperty(exports, "encodeFrameSnapshotPush", { enumerable: true, get: function () { return binary_protocol_1.encodeFrameSnapshotPush; } });
|
|
21
27
|
Object.defineProperty(exports, "encodeProtocolError", { enumerable: true, get: function () { return binary_protocol_1.encodeProtocolError; } });
|
|
22
28
|
Object.defineProperty(exports, "encodeAppJson", { enumerable: true, get: function () { return binary_protocol_1.encodeAppJson; } });
|
|
23
29
|
Object.defineProperty(exports, "encodeResize", { enumerable: true, get: function () { return binary_protocol_1.encodeResize; } });
|
|
30
|
+
Object.defineProperty(exports, "decodeResize", { enumerable: true, get: function () { return binary_protocol_1.decodeResize; } });
|
|
24
31
|
var messages_1 = require("./messages");
|
|
25
32
|
Object.defineProperty(exports, "isAppJsonMessage", { enumerable: true, get: function () { return messages_1.isAppJsonMessage; } });
|
|
26
33
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;;AAEH,qDAgB2B;AAfzB,yGAAA,MAAM,OAAA;AACN,wHAAA,qBAAqB,OAAA;AACrB,sHAAA,mBAAmB,OAAA;AACnB,gHAAA,aAAa,OAAA;AACb,gHAAA,aAAa,OAAA;AACb,6GAAA,UAAU,OAAA;AACV,6HAAA,0BAA0B,OAAA;AAC1B,4HAAA,yBAAyB,OAAA;AACzB,uHAAA,oBAAoB,OAAA;AACpB,sHAAA,mBAAmB,OAAA;AACnB,0HAAA,uBAAuB,OAAA;AACvB,sHAAA,mBAAmB,OAAA;AACnB,gHAAA,aAAa,OAAA;AACb,+GAAA,YAAY,OAAA;AACZ,+GAAA,YAAY,OAAA;AAiCd,uCAA8C;AAArC,4GAAA,gBAAgB,OAAA"}
|
package/dist/messages.d.ts
CHANGED
|
@@ -149,8 +149,25 @@ export interface MsgInput {
|
|
|
149
149
|
machineId?: string;
|
|
150
150
|
data: string;
|
|
151
151
|
}
|
|
152
|
+
/**
|
|
153
|
+
* desktop → relay: 앱이 killed 된 폰에 보낼 FCM 푸시 발송 요청. relay 가 이 메시지를
|
|
154
|
+
* 가로채(`fcm.send`) firebase-admin 으로 발송하는 **무상태 발송 프록시**의 진입점이다
|
|
155
|
+
* (FCM Phase 3 AUTHORITATIVE). 발송키(service account)는 relay 단독 보유 — desktop/mobile
|
|
156
|
+
* 은 미보유(엔드유저 PC 유출 차단). desktop 이 userData 토큰맵에서 대상 토큰을 조회해 채운다.
|
|
157
|
+
*/
|
|
158
|
+
export interface MsgFcmSend {
|
|
159
|
+
type: 'fcm.send';
|
|
160
|
+
/** 발송 대상 FCM device token. 같은 세션에 여러 기기가 등록됐으면 복수. */
|
|
161
|
+
tokens: string[];
|
|
162
|
+
/**
|
|
163
|
+
* FCM data payload(값 전부 string) — relay 가 그대로 messaging `data` 로 전달한다.
|
|
164
|
+
* 키는 모바일 `buildAgentPushSpec` 계약: `type`('approval_request'|'turn_complete'),
|
|
165
|
+
* `machineId`, `eventId`, `title`, `body`, `isHighRisk`, `allowQuickApprove`, `nonce`.
|
|
166
|
+
*/
|
|
167
|
+
payload: Record<string, string>;
|
|
168
|
+
}
|
|
152
169
|
/** discriminated union — APP_JSON payload 의 모든 정식 타입. */
|
|
153
|
-
export type AppJsonMessage = MsgHello | MsgHelloAck | MsgCapReq | MsgCapAck | MsgSnapshotReq | MsgMachineList | MsgSessionAttach | MsgConnectionStatus | MsgTerminalData | MsgClaudeState | MsgPtyStatus | MsgGitResult | MsgSessionReplay | MsgGridResizeCapped | MsgProtocolMismatch | MsgPing | MsgPong | MsgError | MsgInput;
|
|
170
|
+
export type AppJsonMessage = MsgHello | MsgHelloAck | MsgCapReq | MsgCapAck | MsgSnapshotReq | MsgMachineList | MsgSessionAttach | MsgConnectionStatus | MsgTerminalData | MsgClaudeState | MsgPtyStatus | MsgGitResult | MsgSessionReplay | MsgGridResizeCapped | MsgProtocolMismatch | MsgPing | MsgPong | MsgError | MsgInput | MsgFcmSend;
|
|
154
171
|
/** type discriminator 로 좁히는 helper. */
|
|
155
172
|
export declare function isAppJsonMessage<T extends AppJsonMessage['type']>(msg: unknown, type: T): msg is Extract<AppJsonMessage, {
|
|
156
173
|
type: T;
|
package/dist/messages.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../src/messages.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../src/messages.ts"],"names":[],"mappings":"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"}
|
package/dist/messages.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../src/messages.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;
|
|
1
|
+
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../src/messages.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;AAoNH,4CASC;AAVD,uCAAuC;AACvC,SAAgB,gBAAgB,CAC9B,GAAY,EACZ,IAAO;IAEP,OAAO,CACL,OAAO,GAAG,KAAK,QAAQ;QACvB,GAAG,KAAK,IAAI;QACX,GAA0B,CAAC,IAAI,KAAK,IAAI,CAC1C,CAAC;AACJ,CAAC"}
|
|
@@ -166,6 +166,36 @@
|
|
|
166
166
|
{ "r": 0, "c": 0, "ch": "X", "fg": 1, "bg": 0, "attrs": 1 }
|
|
167
167
|
]
|
|
168
168
|
}
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
"name": "APP_JSON — claude_state (complete + eventId + summary, v1.1.0)",
|
|
172
|
+
"opcode": 1,
|
|
173
|
+
"wireHex": "01 7B 22 74 79 70 65 22 3A 22 63 6C 61 75 64 65 5F 73 74 61 74 65 22 2C 22 6D 61 63 68 69 6E 65 49 64 22 3A 22 6D 31 22 2C 22 73 74 61 74 65 22 3A 22 63 6F 6D 70 6C 65 74 65 22 2C 22 65 76 65 6E 74 49 64 22 3A 22 6D 31 23 34 32 22 2C 22 73 75 6D 6D 61 72 79 22 3A 7B 22 6B 69 6E 64 22 3A 22 63 6F 64 65 22 2C 22 70 72 65 76 69 65 77 22 3A 22 67 65 6E 65 72 61 74 65 64 20 66 6F 6F 28 29 22 7D 7D",
|
|
174
|
+
"expected": {
|
|
175
|
+
"type": "app_json",
|
|
176
|
+
"json": {
|
|
177
|
+
"type": "claude_state",
|
|
178
|
+
"machineId": "m1",
|
|
179
|
+
"state": "complete",
|
|
180
|
+
"eventId": "m1#42",
|
|
181
|
+
"summary": { "kind": "code", "preview": "generated foo()" }
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
},
|
|
185
|
+
{
|
|
186
|
+
"name": "APP_JSON — claude_state (awaiting-approval permission, v1.1.0)",
|
|
187
|
+
"opcode": 1,
|
|
188
|
+
"wireHex": "01 7B 22 74 79 70 65 22 3A 22 63 6C 61 75 64 65 5F 73 74 61 74 65 22 2C 22 6D 61 63 68 69 6E 65 49 64 22 3A 22 6D 31 22 2C 22 73 74 61 74 65 22 3A 22 61 77 61 69 74 69 6E 67 2D 61 70 70 72 6F 76 61 6C 22 2C 22 65 76 65 6E 74 49 64 22 3A 22 6D 31 23 34 33 22 2C 22 73 75 6D 6D 61 72 79 22 3A 7B 22 6B 69 6E 64 22 3A 22 70 65 72 6D 69 73 73 69 6F 6E 22 2C 22 70 72 65 76 69 65 77 22 3A 22 42 61 73 68 3A 20 72 6D 20 2D 72 66 20 62 75 69 6C 64 22 7D 7D",
|
|
189
|
+
"expected": {
|
|
190
|
+
"type": "app_json",
|
|
191
|
+
"json": {
|
|
192
|
+
"type": "claude_state",
|
|
193
|
+
"machineId": "m1",
|
|
194
|
+
"state": "awaiting-approval",
|
|
195
|
+
"eventId": "m1#43",
|
|
196
|
+
"summary": { "kind": "permission", "preview": "Bash: rm -rf build" }
|
|
197
|
+
}
|
|
198
|
+
}
|
|
169
199
|
}
|
|
170
200
|
],
|
|
171
201
|
"malformed": [
|
package/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vibe-remote-protocol",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"description": "VibeRemote binary WebSocket protocol v3 — opcode constants, encoders/decoders, and TypeScript message types shared by relay, desktop agent, and mobile clients.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "jun-young1993",
|
|
7
7
|
"homepage": "https://github.com/june-glre/vibe-remote-protocol",
|
|
8
8
|
"repository": {
|
|
9
9
|
"type": "git",
|
|
10
|
-
"url": "
|
|
10
|
+
"url": "https://github.com/june-glre/vibe-remote-protocol.git"
|
|
11
11
|
},
|
|
12
12
|
"keywords": [
|
|
13
13
|
"vibe-remote",
|
|
@@ -47,5 +47,4 @@
|
|
|
47
47
|
"publishConfig": {
|
|
48
48
|
"access": "public"
|
|
49
49
|
}
|
|
50
|
-
|
|
51
50
|
}
|