@desklink/host 0.1.0 → 0.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/NOTICE +3 -0
- package/README.md +72 -16
- package/bin/desklink-host.mjs +14 -3
- package/dist/bridge.d.ts.map +1 -1
- package/dist/bridge.js +5 -1
- package/dist/bridge.js.map +1 -1
- package/dist/engineProcess.d.ts.map +1 -1
- package/dist/engineProcess.js +17 -5
- package/dist/engineProcess.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/keeper.d.ts +52 -0
- package/dist/keeper.d.ts.map +1 -0
- package/dist/keeper.js +101 -0
- package/dist/keeper.js.map +1 -0
- package/dist/protocol.d.ts +42 -5
- package/dist/protocol.d.ts.map +1 -1
- package/dist/protocol.js +1 -1
- package/dist/protocol.js.map +1 -1
- package/dist/resolveEngine.d.ts +3 -2
- package/dist/resolveEngine.d.ts.map +1 -1
- package/dist/resolveEngine.js +20 -5
- package/dist/resolveEngine.js.map +1 -1
- package/docs/BOUNDARY.md +11 -6
- package/docs/PROTOCOL.md +297 -33
- package/engine/Cargo.lock +196 -1
- package/engine/Cargo.toml +26 -5
- package/engine/build.rs +98 -23
- package/engine/native/agent_overlay_mac.m +133 -0
- package/engine/native/agent_overlay_wayland.c +192 -0
- package/engine/native/agent_overlay_x11.c +103 -0
- package/engine/native/mac_stream.mm +188 -0
- package/engine/src/capture.rs +169 -19
- package/engine/src/capture_mac.rs +145 -0
- package/engine/src/clipboard_mac.rs +182 -0
- package/engine/src/convert.rs +57 -1
- package/engine/src/indicator.rs +162 -0
- package/engine/src/input.rs +12 -0
- package/engine/src/input_mac.rs +312 -0
- package/engine/src/keeper.rs +622 -0
- package/engine/src/keymap.rs +25 -0
- package/engine/src/keymap_mac.rs +209 -0
- package/engine/src/mac.rs +722 -0
- package/engine/src/main.rs +158 -2
- package/engine/src/peer.rs +429 -22
- package/engine/src/portal.rs +4 -0
- package/engine/src/portal_mac.rs +68 -0
- package/engine/src/protocol.rs +186 -3
- package/engine/src/session.rs +1307 -100
- package/engine/src/x11.rs +23 -3
- package/engine/src/x11_mac.rs +40 -0
- package/examples/reference-client.html +33 -4
- package/package.json +2 -2
package/dist/protocol.d.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* expressed for a caller. They deliberately contain nothing about any particular
|
|
6
6
|
* application: a machine id, a chat or an account has no place here.
|
|
7
7
|
*/
|
|
8
|
-
export declare const PROTOCOL_VERSION =
|
|
8
|
+
export declare const PROTOCOL_VERSION = 3;
|
|
9
9
|
export interface EngineError {
|
|
10
10
|
code: string;
|
|
11
11
|
message: string;
|
|
@@ -16,6 +16,7 @@ export interface EngineCapabilities {
|
|
|
16
16
|
platform: string;
|
|
17
17
|
session: {
|
|
18
18
|
kind: string;
|
|
19
|
+
on_console?: boolean;
|
|
19
20
|
};
|
|
20
21
|
/** Whether the X11 backend can reach a server here, and that server's screen size. */
|
|
21
22
|
x11: {
|
|
@@ -29,6 +30,26 @@ export interface EngineCapabilities {
|
|
|
29
30
|
formats: string[];
|
|
30
31
|
cursor: string;
|
|
31
32
|
audio: boolean;
|
|
33
|
+
displays?: Array<{
|
|
34
|
+
id: number;
|
|
35
|
+
width: number;
|
|
36
|
+
height: number;
|
|
37
|
+
scale: number;
|
|
38
|
+
points: {
|
|
39
|
+
width: number;
|
|
40
|
+
height: number;
|
|
41
|
+
};
|
|
42
|
+
origin: {
|
|
43
|
+
x: number;
|
|
44
|
+
y: number;
|
|
45
|
+
};
|
|
46
|
+
main: boolean;
|
|
47
|
+
}>;
|
|
48
|
+
grant?: string;
|
|
49
|
+
unavailable_reason?: {
|
|
50
|
+
reason: string;
|
|
51
|
+
remedy: string;
|
|
52
|
+
} | null;
|
|
32
53
|
};
|
|
33
54
|
encode: {
|
|
34
55
|
codecs: string[];
|
|
@@ -69,13 +90,14 @@ export interface SurfaceGeometry {
|
|
|
69
90
|
};
|
|
70
91
|
}
|
|
71
92
|
/**
|
|
72
|
-
* Which desktop to capture. Absent means the
|
|
73
|
-
*
|
|
74
|
-
* alternative for a machine whose screen-cast portal does not work, and it is
|
|
75
|
-
* what a host with no Wayland session uses.
|
|
93
|
+
* Which desktop to capture. Absent means the platform default; macOS can target
|
|
94
|
+
* a specific display while Linux uses the portal or an explicit X display.
|
|
76
95
|
*/
|
|
77
96
|
export type SourceRequest = {
|
|
78
97
|
kind: 'portal';
|
|
98
|
+
} | {
|
|
99
|
+
kind: 'display';
|
|
100
|
+
display_id?: number;
|
|
79
101
|
} | {
|
|
80
102
|
kind: 'x11';
|
|
81
103
|
display?: string;
|
|
@@ -97,6 +119,8 @@ export interface OpenSessionRequest {
|
|
|
97
119
|
ttlSeconds?: number;
|
|
98
120
|
/** Also listen for ICE over TCP on the loopback, for a client behind a local forward. */
|
|
99
121
|
loopbackTcp?: boolean;
|
|
122
|
+
/** Local cursor feedback for an agent session; off for human phone control. */
|
|
123
|
+
agentIndicator?: boolean;
|
|
100
124
|
}
|
|
101
125
|
export interface OpenedSession {
|
|
102
126
|
sessionId: string;
|
|
@@ -131,6 +155,13 @@ export type EngineEvent = {
|
|
|
131
155
|
sdpMid: string | null;
|
|
132
156
|
sdpMLineIndex: number | null;
|
|
133
157
|
};
|
|
158
|
+
} | {
|
|
159
|
+
event: 'session.frame.changed';
|
|
160
|
+
params: {
|
|
161
|
+
sessionId: string;
|
|
162
|
+
seq: number;
|
|
163
|
+
damage: number[][];
|
|
164
|
+
};
|
|
134
165
|
} | {
|
|
135
166
|
event: 'session.state';
|
|
136
167
|
params: {
|
|
@@ -145,6 +176,12 @@ export type EngineEvent = {
|
|
|
145
176
|
sessionId: string;
|
|
146
177
|
token: string;
|
|
147
178
|
};
|
|
179
|
+
} | {
|
|
180
|
+
event: 'session.capture.stopped';
|
|
181
|
+
params: {
|
|
182
|
+
sessionId: string;
|
|
183
|
+
reason: string;
|
|
184
|
+
};
|
|
148
185
|
} | {
|
|
149
186
|
event: 'session.revoked';
|
|
150
187
|
params: {
|
package/dist/protocol.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAElC,MAAM,WAAW,WAAW;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"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"}
|
package/dist/protocol.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* expressed for a caller. They deliberately contain nothing about any particular
|
|
6
6
|
* application: a machine id, a chat or an account has no place here.
|
|
7
7
|
*/
|
|
8
|
-
export const PROTOCOL_VERSION =
|
|
8
|
+
export const PROTOCOL_VERSION = 3;
|
|
9
9
|
/** A protocol-level failure carrying the engine's stable error code. */
|
|
10
10
|
export class EngineRefused extends Error {
|
|
11
11
|
code;
|
package/dist/protocol.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAwHlC,wEAAwE;AACxE,MAAM,OAAO,aAAc,SAAQ,KAAK;IAC3B,IAAI,CAAS;IAEtB,YAAY,IAAY,EAAE,OAAe;QACrC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;QAC5B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACrB,CAAC;CACJ"}
|
package/dist/resolveEngine.d.ts
CHANGED
|
@@ -16,6 +16,7 @@ export interface ResolvedEngine {
|
|
|
16
16
|
args: string[];
|
|
17
17
|
origin: 'configured' | 'prebuilt' | 'package';
|
|
18
18
|
}
|
|
19
|
+
export declare function macosEngineEnabled(platform?: NodeJS.Platform, flag?: string | undefined): boolean;
|
|
19
20
|
export declare function enginePackageRoot(): string;
|
|
20
21
|
/**
|
|
21
22
|
* The platform package for this machine.
|
|
@@ -25,10 +26,10 @@ export declare function enginePackageRoot(): string;
|
|
|
25
26
|
* because npm's own `libc` selector is not honoured by every client.
|
|
26
27
|
*/
|
|
27
28
|
export declare function platformTag(platform?: string, arch?: string, glibc?: boolean | undefined): string;
|
|
28
|
-
export declare function resolveEngine(configured?: string | undefined): ResolvedEngine | null;
|
|
29
|
+
export declare function resolveEngine(configured?: string | undefined, root?: string): ResolvedEngine | null;
|
|
29
30
|
/**
|
|
30
31
|
* Why the engine is missing, in words fit to show a user. `null` means it is
|
|
31
32
|
* there.
|
|
32
33
|
*/
|
|
33
|
-
export declare function explainMissingEngine(configured?: string | undefined): string | null;
|
|
34
|
+
export declare function explainMissingEngine(configured?: string | undefined, root?: string): string | null;
|
|
34
35
|
//# sourceMappingURL=resolveEngine.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolveEngine.d.ts","sourceRoot":"","sources":["../src/resolveEngine.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;;GAYG;AAEH,MAAM,WAAW,cAAc;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,MAAM,EAAE,YAAY,GAAG,UAAU,GAAG,SAAS,CAAC;CACjD;AAKD,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CACvB,QAAQ,GAAE,MAAyB,EACnC,IAAI,GAAE,MAAqB,EAC3B,KAAK,GAAE,OAAO,GAAG,SAAsB,GACxC,MAAM,CAGR;AAiCD,wBAAgB,aAAa,CAAC,UAAU,qBAAmC,GAAG,cAAc,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"resolveEngine.d.ts","sourceRoot":"","sources":["../src/resolveEngine.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;;GAYG;AAEH,MAAM,WAAW,cAAc;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,MAAM,EAAE,YAAY,GAAG,UAAU,GAAG,SAAS,CAAC;CACjD;AAKD,wBAAgB,kBAAkB,CAAC,QAAQ,kBAAmB,EAAE,IAAI,qBAA6B,GAAG,OAAO,CAE1G;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CACvB,QAAQ,GAAE,MAAyB,EACnC,IAAI,GAAE,MAAqB,EAC3B,KAAK,GAAE,OAAO,GAAG,SAAsB,GACxC,MAAM,CAGR;AAiCD,wBAAgB,aAAa,CAAC,UAAU,qBAAmC,EAAE,IAAI,SAAsB,GAAG,cAAc,GAAG,IAAI,CAgB9H;AAWD;;;GAGG;AACH,wBAAgB,oBAAoB,CAChC,UAAU,qBAAmC,EAC7C,IAAI,SAAsB,GAC3B,MAAM,GAAG,IAAI,CA2Bf"}
|
package/dist/resolveEngine.js
CHANGED
|
@@ -3,7 +3,10 @@ import { createRequire } from 'node:module';
|
|
|
3
3
|
import { dirname, join, resolve } from 'node:path';
|
|
4
4
|
import { fileURLToPath } from 'node:url';
|
|
5
5
|
/** Platforms with a published platform package. */
|
|
6
|
-
const PREBUILT_PLATFORMS = ['linux-x64-gnu'];
|
|
6
|
+
const PREBUILT_PLATFORMS = ['linux-x64-gnu', 'darwin-arm64'];
|
|
7
|
+
export function macosEngineEnabled(platform = process.platform, flag = process.env.DESKLINK_MACOS) {
|
|
8
|
+
return platform !== 'darwin' || flag === '1';
|
|
9
|
+
}
|
|
7
10
|
export function enginePackageRoot() {
|
|
8
11
|
return resolve(dirname(fileURLToPath(import.meta.url)), '..');
|
|
9
12
|
}
|
|
@@ -50,7 +53,9 @@ function buildCandidates(root) {
|
|
|
50
53
|
join(root, 'bin', 'desklink-host'),
|
|
51
54
|
];
|
|
52
55
|
}
|
|
53
|
-
export function resolveEngine(configured = process.env.MUXR_DESKLINK_ENGINE) {
|
|
56
|
+
export function resolveEngine(configured = process.env.MUXR_DESKLINK_ENGINE, root = enginePackageRoot()) {
|
|
57
|
+
if (!macosEngineEnabled())
|
|
58
|
+
return null;
|
|
54
59
|
if (configured !== undefined && configured.trim() !== '') {
|
|
55
60
|
if (!isExecutable(configured))
|
|
56
61
|
return null;
|
|
@@ -60,7 +65,7 @@ export function resolveEngine(configured = process.env.MUXR_DESKLINK_ENGINE) {
|
|
|
60
65
|
if (prebuilt !== null && isExecutable(prebuilt)) {
|
|
61
66
|
return { command: prebuilt, args: ['serve'], origin: 'prebuilt' };
|
|
62
67
|
}
|
|
63
|
-
for (const candidate of buildCandidates(
|
|
68
|
+
for (const candidate of buildCandidates(root)) {
|
|
64
69
|
if (isExecutable(candidate)) {
|
|
65
70
|
return { command: candidate, args: ['serve'], origin: 'package' };
|
|
66
71
|
}
|
|
@@ -81,8 +86,11 @@ function isExecutable(path) {
|
|
|
81
86
|
* Why the engine is missing, in words fit to show a user. `null` means it is
|
|
82
87
|
* there.
|
|
83
88
|
*/
|
|
84
|
-
export function explainMissingEngine(configured = process.env.MUXR_DESKLINK_ENGINE) {
|
|
85
|
-
|
|
89
|
+
export function explainMissingEngine(configured = process.env.MUXR_DESKLINK_ENGINE, root = enginePackageRoot()) {
|
|
90
|
+
if (!macosEngineEnabled()) {
|
|
91
|
+
return 'The macOS desktop engine is experimental and off; set DESKLINK_MACOS=1 to try it.';
|
|
92
|
+
}
|
|
93
|
+
const resolved = resolveEngine(configured, root);
|
|
86
94
|
if (resolved !== null)
|
|
87
95
|
return null;
|
|
88
96
|
if (configured !== undefined && configured.trim() !== '') {
|
|
@@ -91,6 +99,13 @@ export function explainMissingEngine(configured = process.env.MUXR_DESKLINK_ENGI
|
|
|
91
99
|
}
|
|
92
100
|
return `The desktop engine at ${configured} is not an executable file.`;
|
|
93
101
|
}
|
|
102
|
+
if (process.platform === 'darwin') {
|
|
103
|
+
const tag = platformTag();
|
|
104
|
+
if (PREBUILT_PLATFORMS.includes(tag)) {
|
|
105
|
+
return `The prebuilt desktop engine for ${tag} is missing. It arrives as the optional dependency @desklink/host-${tag}: reinstall without omitting optional dependencies, or point MUXR_DESKLINK_ENGINE at an engine built from source.`;
|
|
106
|
+
}
|
|
107
|
+
return `There is no prebuilt desktop engine for ${tag}. Build it from source (see the @desklink/host README) and point MUXR_DESKLINK_ENGINE at the binary.`;
|
|
108
|
+
}
|
|
94
109
|
if (process.platform !== 'linux') {
|
|
95
110
|
return `The desktop engine runs on Linux only; ${process.platform} is not supported yet.`;
|
|
96
111
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolveEngine.js","sourceRoot":"","sources":["../src/resolveEngine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAsBzC,mDAAmD;AACnD,MAAM,kBAAkB,GAAG,CAAC,eAAe,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"resolveEngine.js","sourceRoot":"","sources":["../src/resolveEngine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAsBzC,mDAAmD;AACnD,MAAM,kBAAkB,GAAG,CAAC,eAAe,EAAE,cAAc,CAAC,CAAC;AAE7D,MAAM,UAAU,kBAAkB,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,EAAE,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc;IAC7F,OAAO,QAAQ,KAAK,QAAQ,IAAI,IAAI,KAAK,GAAG,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC7B,OAAO,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AAClE,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CACvB,WAAmB,OAAO,CAAC,QAAQ,EACnC,OAAe,OAAO,CAAC,IAAI,EAC3B,QAA6B,QAAQ,EAAE;IAEvC,IAAI,QAAQ,KAAK,OAAO;QAAE,OAAO,SAAS,IAAI,IAAI,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;IACrF,OAAO,GAAG,QAAQ,IAAI,IAAI,EAAE,CAAC;AACjC,CAAC;AAED,yEAAyE;AACzE,SAAS,QAAQ;IACb,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;QAAE,OAAO,SAAS,CAAC;IACnD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,EAA+D,CAAC;IAC1G,OAAO,MAAM,EAAE,MAAM,EAAE,mBAAmB,KAAK,SAAS,CAAC;AAC7D,CAAC;AAED,SAAS,cAAc;IACnB,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/C,MAAM,IAAI,GAAG,kBAAkB,WAAW,EAAE,EAAE,CAAC;IAC/C,IAAI,CAAC;QACD,mEAAmE;QACnE,2DAA2D;QAC3D,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,IAAI,eAAe,CAA0D,CAAC;QAC1G,MAAM,QAAQ,GAAG,QAAQ,CAAC,UAAU,IAAI,QAAQ,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,CAAC;QACxE,IAAI,OAAO,QAAQ,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QAC9C,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,IAAI,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;QACzE,OAAO,IAAI,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,IAAI,CAAC;IAChB,CAAC;AACL,CAAC;AAED,SAAS,eAAe,CAAC,IAAY;IACjC,OAAO;QACH,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,eAAe,CAAC;QAC1D,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,eAAe,CAAC;QACxD,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,eAAe,CAAC;KACrC,CAAC;AACN,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,IAAI,GAAG,iBAAiB,EAAE;IACnG,IAAI,CAAC,kBAAkB,EAAE;QAAE,OAAO,IAAI,CAAC;IACvC,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACvD,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC;YAAE,OAAO,IAAI,CAAC;QAC3C,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;IAC1E,CAAC;IACD,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC;IAClC,IAAI,QAAQ,KAAK,IAAI,IAAI,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC9C,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;IACtE,CAAC;IACD,KAAK,MAAM,SAAS,IAAI,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5C,IAAI,YAAY,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1B,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;QACtE,CAAC;IACL,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,SAAS,YAAY,CAAC,IAAY;IAC9B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACpC,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC5B,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;QAAE,OAAO,KAAK,CAAC;IACjC,6EAA6E;IAC7E,mDAAmD;IACnD,OAAO,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;AACrC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAChC,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAC7C,IAAI,GAAG,iBAAiB,EAAE;IAE1B,IAAI,CAAC,kBAAkB,EAAE,EAAE,CAAC;QACxB,OAAO,mFAAmF,CAAC;IAC/F,CAAC;IACD,MAAM,QAAQ,GAAG,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IACjD,IAAI,QAAQ,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACnC,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACvD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC1B,OAAO,qDAAqD,UAAU,IAAI,CAAC;QAC/E,CAAC;QACD,OAAO,yBAAyB,UAAU,6BAA6B,CAAC;IAC5E,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAChC,MAAM,GAAG,GAAG,WAAW,EAAE,CAAC;QAC1B,IAAI,kBAAkB,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACnC,OAAO,mCAAmC,GAAG,qEAAqE,GAAG,mHAAmH,CAAC;QAC7O,CAAC;QACD,OAAO,2CAA2C,GAAG,sGAAsG,CAAC;IAChK,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QAC/B,OAAO,0CAA0C,OAAO,CAAC,QAAQ,wBAAwB,CAAC;IAC9F,CAAC;IACD,MAAM,GAAG,GAAG,WAAW,EAAE,CAAC;IAC1B,IAAI,kBAAkB,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACnC,OAAO,mCAAmC,GAAG,qEAAqE,GAAG,mHAAmH,CAAC;IAC7O,CAAC;IACD,OAAO,2CAA2C,GAAG,sGAAsG,CAAC;AAChK,CAAC"}
|
package/docs/BOUNDARY.md
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
# Boundary sketch —
|
|
1
|
+
# Boundary sketch — host and React Native client
|
|
2
2
|
|
|
3
|
-
Written before implementation
|
|
4
|
-
|
|
3
|
+
Written before implementation for the host/client split; the separate agent CLI
|
|
4
|
+
is listed in the [repository README](../../../README.md). Status markers are
|
|
5
|
+
honest: `[decided]`, `[open]`.
|
|
5
6
|
|
|
6
7
|
## Why two packages and not one
|
|
7
8
|
|
|
@@ -17,9 +18,13 @@ mean the phone pins a native host build, or the host pins a mobile runtime.
|
|
|
17
18
|
apply authenticated input to the same desktop".
|
|
18
19
|
|
|
19
20
|
- In: `session.open`, SDP/ICE, scoped WebRTC control-channel input, explicit
|
|
20
|
-
clipboard read/write, close
|
|
21
|
-
|
|
22
|
-
|
|
21
|
+
clipboard read/write, close — and `session.feed`, which supplies the access
|
|
22
|
+
units of a consumer-encoded `encoded` source. See `docs/PROTOCOL.md`.
|
|
23
|
+
- Out: one video track — VP9 the engine encodes from a captured desktop, or
|
|
24
|
+
H.264 it only packetizes for a consumer-fed `encoded` source, whose control
|
|
25
|
+
messages are forwarded to the consumer instead of applied — and session
|
|
26
|
+
notifications. Metrics are a request, not an event; the wire contract is in
|
|
27
|
+
`docs/PROTOCOL.md`.
|
|
23
28
|
- Process shape: per-user, on-demand, spawned by a consumer that already owns
|
|
24
29
|
the session, spoken to over an inherited private channel. No listener, no
|
|
25
30
|
daemon, no autostart, no root.
|