@openagt/dashboard 0.10.0 → 0.11.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 (170) hide show
  1. package/README.md +1 -6
  2. package/dist/built-in.d.ts +8 -1
  3. package/dist/built-in.d.ts.map +1 -1
  4. package/dist/built-in.js +12 -3
  5. package/dist/built-in.js.map +1 -1
  6. package/dist/cli.d.ts +4 -10
  7. package/dist/cli.d.ts.map +1 -1
  8. package/dist/cli.js +11 -67
  9. package/dist/cli.js.map +1 -1
  10. package/dist/client.d.ts +2 -1
  11. package/dist/client.d.ts.map +1 -1
  12. package/dist/client.js +3 -4
  13. package/dist/client.js.map +1 -1
  14. package/dist/daemon-runtime.d.ts +12 -12
  15. package/dist/daemon-runtime.d.ts.map +1 -1
  16. package/dist/daemon-runtime.js +96 -35
  17. package/dist/daemon-runtime.js.map +1 -1
  18. package/dist/daemon.d.ts +3 -14
  19. package/dist/daemon.d.ts.map +1 -1
  20. package/dist/daemon.js +15 -26
  21. package/dist/daemon.js.map +1 -1
  22. package/dist/dashboard/bridge-endpoints.d.ts +5 -5
  23. package/dist/dashboard/bridge-endpoints.js +5 -5
  24. package/dist/dashboard/http.d.ts +1 -1
  25. package/dist/dashboard/http.js +1 -1
  26. package/dist/dashboard/machine-call.d.ts +10 -0
  27. package/dist/dashboard/machine-call.d.ts.map +1 -0
  28. package/dist/dashboard/machine-call.js +86 -0
  29. package/dist/dashboard/machine-call.js.map +1 -0
  30. package/dist/dashboard/relay-endpoints.d.ts +26 -17
  31. package/dist/dashboard/relay-endpoints.d.ts.map +1 -1
  32. package/dist/dashboard/relay-endpoints.js +70 -27
  33. package/dist/dashboard/relay-endpoints.js.map +1 -1
  34. package/dist/dashboard/remote-run.d.ts +77 -32
  35. package/dist/dashboard/remote-run.d.ts.map +1 -1
  36. package/dist/dashboard/remote-run.js +120 -42
  37. package/dist/dashboard/remote-run.js.map +1 -1
  38. package/dist/dashboard/rpc-serve.d.ts +19 -25
  39. package/dist/dashboard/rpc-serve.d.ts.map +1 -1
  40. package/dist/dashboard/rpc-serve.js +11 -22
  41. package/dist/dashboard/rpc-serve.js.map +1 -1
  42. package/dist/dashboard/screen.d.ts +53 -0
  43. package/dist/dashboard/screen.d.ts.map +1 -0
  44. package/dist/dashboard/screen.js +175 -0
  45. package/dist/dashboard/screen.js.map +1 -0
  46. package/dist/dashboard/server.d.ts +18 -19
  47. package/dist/dashboard/server.d.ts.map +1 -1
  48. package/dist/dashboard/server.js +52 -81
  49. package/dist/dashboard/server.js.map +1 -1
  50. package/dist/dashboard/types.d.ts +6 -14
  51. package/dist/dashboard/types.d.ts.map +1 -1
  52. package/dist/dashboard/web-start-endpoints.d.ts +2 -2
  53. package/dist/dashboard/web-start-endpoints.js +1 -1
  54. package/dist/dashboard-bundle/assets/main-9Xb8Ao4p.css +2 -0
  55. package/dist/dashboard-bundle/assets/main-DTyyQ0jM.js +140 -0
  56. package/dist/dashboard-bundle/assets/{module-gKz-ZvkG.js → module-DKd-4BTU.js} +4 -4
  57. package/dist/dashboard-bundle/host/module.js +1 -1
  58. package/dist/dashboard-bundle/index.html +3 -3
  59. package/dist/dashboard-rpc/context.d.ts +4 -4
  60. package/dist/dashboard-rpc/context.js +5 -5
  61. package/dist/dashboard-rpc/context.js.map +1 -1
  62. package/dist/dashboard-rpc/control.d.ts +1 -1
  63. package/dist/dashboard-rpc/control.js +7 -7
  64. package/dist/dashboard-rpc/control.js.map +1 -1
  65. package/dist/dashboard-rpc/events.d.ts +1 -1
  66. package/dist/dashboard-rpc/events.js +1 -1
  67. package/dist/dashboard-rpc/index.d.ts +1 -1
  68. package/dist/dashboard-rpc/index.d.ts.map +1 -1
  69. package/dist/dashboard-rpc/index.js +3 -3
  70. package/dist/dashboard-rpc/index.js.map +1 -1
  71. package/dist/dashboard-rpc/machines.d.ts +52 -0
  72. package/dist/dashboard-rpc/machines.d.ts.map +1 -0
  73. package/dist/dashboard-rpc/machines.js +82 -0
  74. package/dist/dashboard-rpc/machines.js.map +1 -0
  75. package/dist/dashboard-rpc/modules.d.ts +1 -1
  76. package/dist/dashboard-rpc/modules.js +2 -2
  77. package/dist/dashboard-rpc/modules.js.map +1 -1
  78. package/dist/dashboard-rpc/projects.d.ts +2 -0
  79. package/dist/dashboard-rpc/projects.d.ts.map +1 -1
  80. package/dist/dashboard-rpc/projects.js +3 -2
  81. package/dist/dashboard-rpc/projects.js.map +1 -1
  82. package/dist/dashboard-rpc/reads.d.ts +3 -4
  83. package/dist/dashboard-rpc/reads.d.ts.map +1 -1
  84. package/dist/dashboard-rpc/reads.js +5 -6
  85. package/dist/dashboard-rpc/reads.js.map +1 -1
  86. package/dist/dashboard-rpc/relay-agent.d.ts +3 -3
  87. package/dist/dashboard-rpc/relay-agent.js +3 -3
  88. package/dist/dashboard-rpc/relay-dispatch.d.ts +4 -4
  89. package/dist/dashboard-rpc/relay-dispatch.d.ts.map +1 -1
  90. package/dist/dashboard-rpc/relay-dispatch.js +7 -7
  91. package/dist/dashboard-rpc/relay-dispatch.js.map +1 -1
  92. package/dist/dashboard-rpc/test-context.js +1 -1
  93. package/dist/dashboard-rpc/test-context.js.map +1 -1
  94. package/dist/events.d.ts +4 -3
  95. package/dist/events.d.ts.map +1 -1
  96. package/dist/loopback-host.d.ts +3 -5
  97. package/dist/loopback-host.d.ts.map +1 -1
  98. package/dist/loopback-host.js +3 -5
  99. package/dist/loopback-host.js.map +1 -1
  100. package/dist/machine-link.d.ts +21 -0
  101. package/dist/machine-link.d.ts.map +1 -0
  102. package/dist/machine-link.js +20 -0
  103. package/dist/machine-link.js.map +1 -0
  104. package/dist/module-server.d.ts +1 -1
  105. package/dist/module-types/dashboard/lib/draft-handoff.d.ts +5 -9
  106. package/dist/module-types/dashboard/module/index.d.ts +45 -0
  107. package/dist/module-types/src/built-in.d.ts +8 -1
  108. package/dist/module-types/src/client.d.ts +2 -1
  109. package/dist/module-types/src/dashboard/bridge-endpoints.d.ts +5 -5
  110. package/dist/module-types/src/dashboard/http.d.ts +1 -1
  111. package/dist/module-types/src/dashboard/machine-call.d.ts +9 -0
  112. package/dist/module-types/src/dashboard/remote-run.d.ts +77 -32
  113. package/dist/module-types/src/dashboard/rpc-serve.d.ts +19 -25
  114. package/dist/module-types/src/dashboard/types.d.ts +6 -14
  115. package/dist/module-types/src/dashboard-rpc/context.d.ts +4 -4
  116. package/dist/module-types/src/dashboard-rpc/control.d.ts +1 -1
  117. package/dist/module-types/src/dashboard-rpc/events.d.ts +1 -1
  118. package/dist/module-types/src/dashboard-rpc/index.d.ts +1 -1
  119. package/dist/module-types/src/dashboard-rpc/machines.d.ts +51 -0
  120. package/dist/module-types/src/dashboard-rpc/modules.d.ts +1 -1
  121. package/dist/module-types/src/dashboard-rpc/projects.d.ts +2 -0
  122. package/dist/module-types/src/dashboard-rpc/reads.d.ts +3 -4
  123. package/dist/module-types/src/dashboard-rpc/relay-agent.d.ts +3 -3
  124. package/dist/module-types/src/events.d.ts +4 -3
  125. package/dist/module-types/src/loopback-host.d.ts +3 -5
  126. package/dist/module-types/src/machine-link.d.ts +20 -0
  127. package/dist/module-types/src/registry.d.ts +59 -16
  128. package/dist/module-types/src/repository-address.d.ts +22 -0
  129. package/dist/module-types/src/screens.d.ts +13 -0
  130. package/dist/module-types/src/store/agent-store.d.ts +2 -2
  131. package/dist/module-types/src/version.d.ts +1 -0
  132. package/dist/package-services.d.ts +27 -0
  133. package/dist/package-services.d.ts.map +1 -0
  134. package/dist/package-services.js +62 -0
  135. package/dist/package-services.js.map +1 -0
  136. package/dist/registry.d.ts +59 -16
  137. package/dist/registry.d.ts.map +1 -1
  138. package/dist/registry.js +91 -20
  139. package/dist/registry.js.map +1 -1
  140. package/dist/repository-address.d.ts +23 -0
  141. package/dist/repository-address.d.ts.map +1 -0
  142. package/dist/repository-address.js +38 -0
  143. package/dist/repository-address.js.map +1 -0
  144. package/dist/screens.d.ts +14 -0
  145. package/dist/screens.d.ts.map +1 -0
  146. package/dist/screens.js +40 -0
  147. package/dist/screens.js.map +1 -0
  148. package/dist/store/agent-store.d.ts +2 -2
  149. package/dist/store/agent-store.d.ts.map +1 -1
  150. package/dist/version.d.ts +2 -0
  151. package/dist/version.d.ts.map +1 -0
  152. package/dist/version.js +26 -0
  153. package/dist/version.js.map +1 -0
  154. package/package.json +13 -10
  155. package/dist/dashboard-bundle/assets/main-Q7JMdMJI.css +0 -2
  156. package/dist/dashboard-bundle/assets/main-fDZWGOub.js +0 -140
  157. package/dist/dashboard-rpc/devices.d.ts +0 -9
  158. package/dist/dashboard-rpc/devices.d.ts.map +0 -1
  159. package/dist/dashboard-rpc/devices.js +0 -12
  160. package/dist/dashboard-rpc/devices.js.map +0 -1
  161. package/dist/install.d.ts +0 -31
  162. package/dist/install.d.ts.map +0 -1
  163. package/dist/install.js +0 -54
  164. package/dist/install.js.map +0 -1
  165. package/dist/module-types/src/dashboard-rpc/devices.d.ts +0 -8
  166. package/dist/module-types/src/openagent-gitignore.d.ts +0 -11
  167. package/dist/openagent-gitignore.d.ts +0 -12
  168. package/dist/openagent-gitignore.d.ts.map +0 -1
  169. package/dist/openagent-gitignore.js +0 -19
  170. package/dist/openagent-gitignore.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"remote-run.js","sourceRoot":"","sources":["../../src/dashboard/remote-run.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"remote-run.js","sourceRoot":"","sources":["../../src/dashboard/remote-run.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,7 @@ import type { BridgeBrowserOwner } from '../bridge-browser.js';
7
7
  import type { ProjectErrorsReader } from '../project-errors.js';
8
8
  import type { AddProjectResult, RemoveProjectResult, StartAgentOptions, StartAgentResult } from './types.js';
9
9
  import type { AgentMeta } from '../store/index.js';
10
+ import type { RemoteTarget } from './remote-run.js';
10
11
  /** Wired by the daemon so `sendStart` can reach the daemon's own `startAgent` closure. */
11
12
  export type StartAgentHandler = (prompt: string, options: StartAgentOptions, projectId?: string) => StartAgentResult | Promise<StartAgentResult>;
12
13
  /** Wired by the daemon so `sendAddProject` can install + register a repo (#433). */
@@ -14,19 +15,20 @@ export type AddProjectHandler = (path: string, share: boolean) => AddProjectResu
14
15
  /** Wired by the daemon so `sendRemoveProject` can take a project off the list, by its id, and with `files` remove what OpenAgent left in its folder. */
15
16
  export type RemoveProjectHandler = (projectId: string, files: boolean) => RemoveProjectResult | Promise<RemoveProjectResult>;
16
17
  /** Resolve an agent to its live event stream: the relay feeds `onEvents` from its own in-memory stream
17
- * rather than a file on disk (#426), and the daemon feeds an agent it is relaying from a device (#1067).
18
+ * rather than a file on disk (#426), and the daemon feeds an agent it is relaying from a machine (#1067).
18
19
  * Returns undefined when there is no in-memory stream, so `onEvents` falls back to tailing the log. */
19
20
  export type EventsSource = (projectId: string, agentId?: string) => AsyncIterable<OpenAgentEvent> | undefined;
20
- /** Look up the device a relayed agent (#1067) executes on, or undefined for an ordinary local agent. The
21
+ /** Look up the machine a relayed agent (#1067) executes on, or undefined for an ordinary local agent. The
21
22
  * daemon wires this from its live relayed-agent map; a run-scoped RPC uses it to forward a remote agent's
22
- * read/steer/handoff to that device instead of resolving a (nonexistent) local checkout. */
23
+ * read/steer/handoff to that machine instead of resolving a (nonexistent) local checkout. */
23
24
  export interface RemoteAgents {
24
- target(agentId: string | undefined): {
25
- url: string;
26
- token: string;
27
- } | undefined;
25
+ target(agentId: string | undefined): RemoteTarget | undefined;
28
26
  /** A project's relayed run stubs (#1077), so `onAgents` can show a remote agent in the list and re-open it after a reload. */
29
27
  list(projectId: string): AgentMeta[];
28
+ /** Whether a run relayed from here is still at work on the machine at `url`. */
29
+ working(url: string): boolean;
30
+ /** How the machine at `url` is reached since it was added again, for the runs kept from before. */
31
+ rekey(url: string, key: string, pin?: string): void;
30
32
  }
31
33
  /**
32
34
  * What every RPC acts through.
@@ -40,10 +42,10 @@ export interface DashboardContext {
40
42
  startAgent: StartAgentHandler;
41
43
  addProject: AddProjectHandler;
42
44
  removeProject: RemoveProjectHandler;
43
- /** The in-memory event stream for an agent relayed from a connected device (#1067), else undefined. */
45
+ /** The in-memory event stream for an agent relayed from a saved machine (#1067), else undefined. */
44
46
  eventsSource: EventsSource;
45
47
  /** The relayed-agent lookup (#1067 slice 2), so a run-scoped RPC can tell a local agent from one
46
- * running on a connected device and forward the call there. */
48
+ * running on a saved machine and forward the call there. */
47
49
  remote: RemoteAgents;
48
50
  /** The user-preferences store (#410), over the registry file. */
49
51
  preferences: PreferencesStore;
@@ -72,16 +74,12 @@ export declare function isSameOriginRequest(req: IncomingMessage): boolean;
72
74
  * the mount, `sendStart` included, is reachable from a page the user merely visited.
73
75
  *
74
76
  * The `Host` header is what still gives the attacker away: it carries the name the browser was
75
- * asked for (`evil.com`), not the address it resolved to. So when we are bound to loopback, the
76
- * only `Host` a real user's browser can send is a loopback one (or the bound address itself) —
77
- * anything else is a rebound name and is rejected. An absent `Host` is rejected too when we are
78
- * enforcing: HTTP/1.1 requires it, and every browser sends it.
79
- *
80
- * A non-loopback bind (`--host`, #1051) is reached by a hostname we cannot predict, so there is
81
- * no allowlist to check against; that case gates behind the shared daemon token instead. Hosts
82
- * that never pass a bind host at all (the relay, which serves a public domain) are unaffected.
77
+ * asked for (`evil.com`), not the address it resolved to. The dashboard listens on this
78
+ * computer's own address only, so the only `Host` a real user's browser can send is a loopback
79
+ * one — anything else is a rebound name and is rejected. An absent `Host` is rejected too:
80
+ * HTTP/1.1 requires it, and every browser sends it.
83
81
  */
84
- export declare function isExpectedHost(req: IncomingMessage, boundHost: string | undefined): boolean;
82
+ export declare function isExpectedHost(req: IncomingMessage): boolean;
85
83
  /** Where the dashboard's RPCs live. One prefix, so the static handler can decline it by path. */
86
84
  export declare const RPC_PREFIX = "/_rpc";
87
85
  /**
@@ -90,17 +88,13 @@ export declare const RPC_PREFIX = "/_rpc";
90
88
  * `sendStart` reaches the daemon's own `startAgent` through the wired {@link DashboardContext}.
91
89
  *
92
90
  * Cross-origin POSTs are rejected (CSRF: a page on evil.com must not steer or start a session), as
93
- * are requests carrying someone else's `Host` when we are bound to loopback (DNS rebinding: the
94
- * same page must not reach us by pointing its own name at `127.0.0.1`). Pass `opts.host` — the
95
- * address the server is bound to — to enable that second check. Returns whether the request was
96
- * the RPC surface's.
91
+ * are requests carrying someone else's `Host` (DNS rebinding: the same page must not reach us by
92
+ * pointing its own name at `127.0.0.1`). Returns whether the request was the RPC surface's.
97
93
  *
98
94
  * This replaced Telefunc (F3), which required a build-time transform over every `.telefunc.ts`
99
95
  * file, a registration table pinning each RPC to the client-baked key of the *dashboard* source
100
96
  * path it was re-exported from, and a request-context indirection for wiring that never varied
101
97
  * per request. What it bought over this was type-safety across a package boundary that A7 removed.
102
98
  */
103
- export declare function makeRpcMount(context: DashboardContext, opts?: {
104
- host?: string;
105
- }): (req: IncomingMessage, res: ServerResponse) => Promise<boolean>;
99
+ export declare function makeRpcMount(context: DashboardContext): (req: IncomingMessage, res: ServerResponse) => Promise<boolean>;
106
100
  //# sourceMappingURL=rpc-serve.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"rpc-serve.d.ts","sourceRoot":"","sources":["../../src/dashboard/rpc-serve.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rpc-serve.d.ts","sourceRoot":"","sources":["../../src/dashboard/rpc-serve.ts"],"names":[],"mappings":"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"}
@@ -33,23 +33,14 @@ export function isSameOriginRequest(req) {
33
33
  * the mount, `sendStart` included, is reachable from a page the user merely visited.
34
34
  *
35
35
  * The `Host` header is what still gives the attacker away: it carries the name the browser was
36
- * asked for (`evil.com`), not the address it resolved to. So when we are bound to loopback, the
37
- * only `Host` a real user's browser can send is a loopback one (or the bound address itself) —
38
- * anything else is a rebound name and is rejected. An absent `Host` is rejected too when we are
39
- * enforcing: HTTP/1.1 requires it, and every browser sends it.
40
- *
41
- * A non-loopback bind (`--host`, #1051) is reached by a hostname we cannot predict, so there is
42
- * no allowlist to check against; that case gates behind the shared daemon token instead. Hosts
43
- * that never pass a bind host at all (the relay, which serves a public domain) are unaffected.
36
+ * asked for (`evil.com`), not the address it resolved to. The dashboard listens on this
37
+ * computer's own address only, so the only `Host` a real user's browser can send is a loopback
38
+ * one — anything else is a rebound name and is rejected. An absent `Host` is rejected too:
39
+ * HTTP/1.1 requires it, and every browser sends it.
44
40
  */
45
- export function isExpectedHost(req, boundHost) {
46
- if (boundHost === undefined || !isLoopbackHost(boundHost))
47
- return true;
41
+ export function isExpectedHost(req) {
48
42
  const header = req.headers.host;
49
- if (!header)
50
- return false;
51
- const hostname = hostnameFromHostHeader(header);
52
- return isLoopbackHost(hostname) || hostname === boundHost;
43
+ return header !== undefined && header !== '' && isLoopbackHost(hostnameFromHostHeader(header));
53
44
  }
54
45
  /** Where the dashboard's RPCs live. One prefix, so the static handler can decline it by path. */
55
46
  export const RPC_PREFIX = '/_rpc';
@@ -87,7 +78,7 @@ async function serveEventStream(req, res, url) {
87
78
  'content-type': 'text/event-stream',
88
79
  'cache-control': 'no-store',
89
80
  connection: 'keep-alive',
90
- // The daemon is behind nothing, but a proxy in front of a `--host` bind would otherwise buffer.
81
+ // What passes a device's request on to the daemon must not hold the lines back.
91
82
  'x-accel-buffering': 'no',
92
83
  });
93
84
  let finished = false;
@@ -118,17 +109,15 @@ async function serveEventStream(req, res, url) {
118
109
  * `sendStart` reaches the daemon's own `startAgent` through the wired {@link DashboardContext}.
119
110
  *
120
111
  * Cross-origin POSTs are rejected (CSRF: a page on evil.com must not steer or start a session), as
121
- * are requests carrying someone else's `Host` when we are bound to loopback (DNS rebinding: the
122
- * same page must not reach us by pointing its own name at `127.0.0.1`). Pass `opts.host` — the
123
- * address the server is bound to — to enable that second check. Returns whether the request was
124
- * the RPC surface's.
112
+ * are requests carrying someone else's `Host` (DNS rebinding: the same page must not reach us by
113
+ * pointing its own name at `127.0.0.1`). Returns whether the request was the RPC surface's.
125
114
  *
126
115
  * This replaced Telefunc (F3), which required a build-time transform over every `.telefunc.ts`
127
116
  * file, a registration table pinning each RPC to the client-baked key of the *dashboard* source
128
117
  * path it was re-exported from, and a request-context indirection for wiring that never varied
129
118
  * per request. What it bought over this was type-safety across a package boundary that A7 removed.
130
119
  */
131
- export function makeRpcMount(context, opts = {}) {
120
+ export function makeRpcMount(context) {
132
121
  setDashboardContext(context);
133
122
  return async (req, res) => {
134
123
  // A fixed base, like every other request parse here: only the path and the query are read,
@@ -142,7 +131,7 @@ export function makeRpcMount(context, opts = {}) {
142
131
  res.end('cross-origin request forbidden');
143
132
  return true;
144
133
  }
145
- if (!isExpectedHost(req, opts.host)) {
134
+ if (!isExpectedHost(req)) {
146
135
  res.writeHead(403, { 'content-type': 'text/plain' });
147
136
  res.end('unexpected Host header');
148
137
  return true;
@@ -1 +1 @@
1
- {"version":3,"file":"rpc-serve.js","sourceRoot":"","sources":["../../src/dashboard/rpc-serve.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rpc-serve.js","sourceRoot":"","sources":["../../src/dashboard/rpc-serve.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ import type { IncomingMessage, ServerResponse } from 'node:http';
2
+ import type { RemoteTarget } from './remote-run.js';
3
+ /**
4
+ * A run's live screen, for whoever watches the run from this OpenAgent: on this computer, on a
5
+ * phone that got in, or on another computer that follows the run. A `screen` line in the run's
6
+ * diary names where the screen answers, on the loopback of the computer the run is on. That
7
+ * address is reached by nothing but the OpenAgent of that computer, which passes on two calls
8
+ * and no other:
9
+ *
10
+ * - `GET /_screen/stream?project=<id>&run=<id>`: what the screen shows, as the screen's own bytes.
11
+ * - `POST /_screen/input?project=<id>&run=<id>`: what the person did on it, as JSON.
12
+ *
13
+ * For a run this computer follows on another machine, both are asked of that machine
14
+ * (`/_relay/screen/…`), with this computer's key there.
15
+ *
16
+ * What a screen answers is written by whatever the agent ran, and for a run on another machine
17
+ * it comes from that machine. So it is never a page here: the bytes are answered as bytes no
18
+ * browser renders or runs, and the answer to an input is its status alone. What draws the screen
19
+ * is this OpenAgent's own.
20
+ */
21
+ export declare const SCREEN_PREFIX = "/_screen";
22
+ /** The two calls a screen takes. */
23
+ export type ScreenCall = 'stream' | 'input';
24
+ export interface ScreenHandlers {
25
+ /** Where the live screen of a run on this computer answers; nothing when the run has none. */
26
+ local: (projectId: string, agentId: string) => Promise<string | undefined>;
27
+ /** The machine a run this computer follows is on; nothing for a run of this computer's own. */
28
+ remote: (agentId: string) => RemoteTarget | undefined;
29
+ }
30
+ /** The call a path names, when it names one. */
31
+ export declare function screenCallOf(pathname: string, prefix: string): ScreenCall | undefined;
32
+ /**
33
+ * The address one call to a screen goes to. Only a screen on this computer's own loopback is
34
+ * called, at its own two paths: the line that names it was written by whatever the agent ran.
35
+ */
36
+ export declare function screenCallAddress(screen: string, call: ScreenCall): string | undefined;
37
+ /**
38
+ * Where the live screen of the run whose diary is the file at `diary` answers; nothing when it
39
+ * has none, or no diary. Only the lines that can say so are read as JSON, a screen's and a run's
40
+ * end: a diary is as long as the run, and this is asked for as long as someone looks.
41
+ */
42
+ export declare function screenInDiary(diary: string): Promise<string | undefined>;
43
+ /**
44
+ * `find`, asked at most once in a while for the same run, and once for all who ask at the same
45
+ * moment: where a screen answers changes only when a browser opens or closes. Only a run's own
46
+ * screen is kept: an ask that found none is asked again, and keeps nothing.
47
+ */
48
+ export declare function kept(find: ScreenHandlers['local'], now?: () => number): ScreenHandlers['local'];
49
+ /** Route a `/_screen/*` request of this computer's own dashboard, or of a device that got in. */
50
+ export declare function handleScreenRequest(req: IncomingMessage, res: ServerResponse, pathname: string, handlers: ScreenHandlers | undefined): Promise<void>;
51
+ /** Pass one call on to the screen at `screen`, on this computer; a 404 when there is none. */
52
+ export declare function passToScreen(req: IncomingMessage, res: ServerResponse, call: ScreenCall, screen: string | undefined): Promise<void>;
53
+ //# sourceMappingURL=screen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"screen.d.ts","sourceRoot":"","sources":["../../src/dashboard/screen.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAMhE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAEnD;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,aAAa,aAAa,CAAA;AAEvC,oCAAoC;AACpC,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,OAAO,CAAA;AAE3C,MAAM,WAAW,cAAc;IAC7B,8FAA8F;IAC9F,KAAK,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;IAC1E,+FAA+F;IAC/F,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,YAAY,GAAG,SAAS,CAAA;CACtD;AAeD,gDAAgD;AAChD,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAGrF;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,SAAS,CAStF;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAW9E;AAKD;;;;GAIG;AACH,wBAAgB,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,OAAO,CAAC,EAAE,GAAG,GAAE,MAAM,MAAiB,GAAG,cAAc,CAAC,OAAO,CAAC,CAmBzG;AAED,iGAAiG;AACjG,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAY1J;AAED,8FAA8F;AAC9F,wBAAsB,YAAY,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAIzI"}
@@ -0,0 +1,175 @@
1
+ import { readFile } from 'node:fs/promises';
2
+ import { Readable } from 'node:stream';
3
+ import { eventsOf, isRunId } from '../store/index.js';
4
+ import { liveScreen } from '../screens.js';
5
+ import { end, readJsonBody } from './http.js';
6
+ import { machineFetch } from './machine-call.js';
7
+ /**
8
+ * A run's live screen, for whoever watches the run from this OpenAgent: on this computer, on a
9
+ * phone that got in, or on another computer that follows the run. A `screen` line in the run's
10
+ * diary names where the screen answers, on the loopback of the computer the run is on. That
11
+ * address is reached by nothing but the OpenAgent of that computer, which passes on two calls
12
+ * and no other:
13
+ *
14
+ * - `GET /_screen/stream?project=<id>&run=<id>`: what the screen shows, as the screen's own bytes.
15
+ * - `POST /_screen/input?project=<id>&run=<id>`: what the person did on it, as JSON.
16
+ *
17
+ * For a run this computer follows on another machine, both are asked of that machine
18
+ * (`/_relay/screen/…`), with this computer's key there.
19
+ *
20
+ * What a screen answers is written by whatever the agent ran, and for a run on another machine
21
+ * it comes from that machine. So it is never a page here: the bytes are answered as bytes no
22
+ * browser renders or runs, and the answer to an input is its status alone. What draws the screen
23
+ * is this OpenAgent's own.
24
+ */
25
+ export const SCREEN_PREFIX = '/_screen';
26
+ /** A person's click or a few typed letters, generously. */
27
+ const MAX_INPUT = 16 * 1024;
28
+ /** How long a screen gets to take an input. */
29
+ const INPUT_TIMEOUT_MS = 15_000;
30
+ /** The headers of every answer: bytes, kept by nobody, that no browser takes for a page or runs. */
31
+ const INERT = {
32
+ 'content-type': 'application/octet-stream',
33
+ 'cache-control': 'no-store',
34
+ 'x-content-type-options': 'nosniff',
35
+ 'content-security-policy': "sandbox; default-src 'none'",
36
+ };
37
+ /** The call a path names, when it names one. */
38
+ export function screenCallOf(pathname, prefix) {
39
+ const rest = pathname.slice(prefix.length + 1);
40
+ return pathname.startsWith(`${prefix}/`) && (rest === 'stream' || rest === 'input') ? rest : undefined;
41
+ }
42
+ /**
43
+ * The address one call to a screen goes to. Only a screen on this computer's own loopback is
44
+ * called, at its own two paths: the line that names it was written by whatever the agent ran.
45
+ */
46
+ export function screenCallAddress(screen, call) {
47
+ let at;
48
+ try {
49
+ at = new URL(screen);
50
+ }
51
+ catch {
52
+ return undefined;
53
+ }
54
+ if (at.protocol !== 'http:' || at.hostname !== '127.0.0.1' || !at.port || at.pathname !== '/')
55
+ return undefined;
56
+ return `http://127.0.0.1:${at.port}/${call}${at.search}`;
57
+ }
58
+ /**
59
+ * Where the live screen of the run whose diary is the file at `diary` answers; nothing when it
60
+ * has none, or no diary. Only the lines that can say so are read as JSON, a screen's and a run's
61
+ * end: a diary is as long as the run, and this is asked for as long as someone looks.
62
+ */
63
+ export async function screenInDiary(diary) {
64
+ const text = await readFile(diary, 'utf8').catch(() => '');
65
+ const lines = text.split('\n').flatMap(line => {
66
+ if (!line.includes('"screen"') && !line.includes('"ended"'))
67
+ return [];
68
+ try {
69
+ return [JSON.parse(line)];
70
+ }
71
+ catch {
72
+ return [];
73
+ }
74
+ });
75
+ return liveScreen(eventsOf(lines));
76
+ }
77
+ /** How long an answer of {@link kept} is good for: a person's clicks come in bursts, and each would read the whole diary. */
78
+ const KEPT_MS = 2_000;
79
+ /**
80
+ * `find`, asked at most once in a while for the same run, and once for all who ask at the same
81
+ * moment: where a screen answers changes only when a browser opens or closes. Only a run's own
82
+ * screen is kept: an ask that found none is asked again, and keeps nothing.
83
+ */
84
+ export function kept(find, now = Date.now) {
85
+ const answers = new Map();
86
+ return (projectId, agentId) => {
87
+ const key = `${projectId}\n${agentId}`;
88
+ const answer = answers.get(key);
89
+ if (answer && answer.until > now())
90
+ return answer.screen;
91
+ for (const [old, { until }] of answers)
92
+ if (until <= now())
93
+ answers.delete(old);
94
+ const screen = find(projectId, agentId);
95
+ answers.set(key, { screen, until: now() + KEPT_MS });
96
+ void screen.then(found => {
97
+ if (found === undefined && answers.get(key)?.screen === screen)
98
+ answers.delete(key);
99
+ }, () => {
100
+ if (answers.get(key)?.screen === screen)
101
+ answers.delete(key);
102
+ });
103
+ return screen;
104
+ };
105
+ }
106
+ /** Route a `/_screen/*` request of this computer's own dashboard, or of a device that got in. */
107
+ export async function handleScreenRequest(req, res, pathname, handlers) {
108
+ const call = screenCallOf(pathname, SCREEN_PREFIX);
109
+ if (!handlers || !call)
110
+ return end(res, 404, 'not found');
111
+ const query = new URL(req.url ?? '/', 'http://localhost').searchParams;
112
+ const projectId = query.get('project');
113
+ const agentId = query.get('run');
114
+ if (!projectId || !agentId)
115
+ return end(res, 400, 'missing project or run');
116
+ if (!isRunId(agentId))
117
+ return end(res, 400, 'not a run');
118
+ const remote = handlers.remote(agentId);
119
+ if (!remote)
120
+ return passToScreen(req, res, call, await handlers.local(projectId, agentId).catch(() => undefined));
121
+ const at = `${remote.url.replace(/\/+$/, '')}/_relay/screen/${call}?run=${encodeURIComponent(agentId)}&project=${encodeURIComponent(remote.project)}`;
122
+ await pass(req, res, call, init => machineFetch(at, remote.pin, { ...init, headers: { ...init.headers, authorization: `Bearer ${remote.key}` } }));
123
+ }
124
+ /** Pass one call on to the screen at `screen`, on this computer; a 404 when there is none. */
125
+ export async function passToScreen(req, res, call, screen) {
126
+ const at = screen === undefined ? undefined : screenCallAddress(screen, call);
127
+ if (at === undefined)
128
+ return end(res, 404, 'no screen');
129
+ await pass(req, res, call, init => fetch(at, { ...init, redirect: 'error' }));
130
+ }
131
+ /** Make the call with `ask`, and answer what it came to: a stream as inert bytes, an input as its status alone. */
132
+ async function pass(req, res, call, ask) {
133
+ const method = call === 'stream' ? 'GET' : 'POST';
134
+ if (req.method !== method)
135
+ return end(res, 405, 'method not allowed', { allow: method });
136
+ // Whoever asked going away ends the call: a screen nobody watches is asked for nothing.
137
+ const gone = new AbortController();
138
+ res.once('close', () => gone.abort());
139
+ if (call === 'input') {
140
+ let body;
141
+ try {
142
+ body = await readJsonBody(req, MAX_INPUT);
143
+ }
144
+ catch {
145
+ return end(res, 400, 'invalid request body');
146
+ }
147
+ const answer = await ask({
148
+ method,
149
+ headers: { 'content-type': 'application/json' },
150
+ body: JSON.stringify(body),
151
+ signal: AbortSignal.any([gone.signal, AbortSignal.timeout(INPUT_TIMEOUT_MS)]),
152
+ }).catch(() => undefined);
153
+ void answer?.body?.cancel().catch(() => { });
154
+ if (!answer)
155
+ return end(res, 502, 'the screen did not answer');
156
+ if (answer.status === 404)
157
+ return end(res, 404, 'no screen');
158
+ return end(res, answer.ok ? 204 : answer.status === 400 ? 400 : 502, '');
159
+ }
160
+ const answer = await ask({ method, headers: {}, signal: gone.signal }).catch(() => undefined);
161
+ if (res.destroyed)
162
+ return void answer?.body?.cancel().catch(() => { });
163
+ if (!answer?.ok || !answer.body) {
164
+ void answer?.body?.cancel().catch(() => { });
165
+ return end(res, answer?.status === 404 ? 404 : 502, answer?.status === 404 ? 'no screen' : 'the screen did not answer');
166
+ }
167
+ res.writeHead(200, INERT);
168
+ // The first picture may be a while away: the headers go now.
169
+ res.flushHeaders();
170
+ const bytes = Readable.fromWeb(answer.body);
171
+ // A screen that went away mid-stream ends the answer, so the watcher asks again instead of waiting for ever.
172
+ bytes.once('error', () => res.destroy());
173
+ bytes.pipe(res);
174
+ }
175
+ //# sourceMappingURL=screen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"screen.js","sourceRoot":"","sources":["../../src/dashboard/screen.ts"],"names":[],"mappings":"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"}
@@ -9,8 +9,6 @@ import type { EventsSource, RemoteAgents } from './rpc-serve.js';
9
9
  export interface DashboardOptions {
10
10
  /** Port to bind. Default `4200`; pass `0` for an ephemeral port. */
11
11
  port?: number;
12
- /** Host to bind. Default `127.0.0.1` (localhost only). */
13
- host?: string;
14
12
  /**
15
13
  * Called when the browser starts a run (#345): the `sendStart` RPC reaches this through the
16
14
  * wired dashboard context. Wire it to the project's start hook.
@@ -44,40 +42,41 @@ export interface DashboardOptions {
44
42
  */
45
43
  clientBundleDir?: string;
46
44
  /**
47
- * The shared token that guards a non-loopback bind (#1051): with it set, every route (static
48
- * bundle, `/_rpc`, `/_relay`) needs a valid `oa_daemon` cookie or a matching
49
- * `?token=`, else 401. Omit for a loopback bind, where the guard is a no-op and local UX is
50
- * byte-identical. A separate concern from the CSRF origin check in rpc-serve.ts.
51
- */
52
- token?: string;
53
- /**
54
- * The live-events source for a run this daemon is relaying from a connected device (#1067):
45
+ * The live-events source for a run this daemon is relaying from a saved machine (#1067):
55
46
  * a stream for such a run, else undefined so `onEvents` tails the run's diary off disk.
56
47
  */
57
48
  eventsSource: EventsSource;
58
49
  /**
59
50
  * The relayed-agent lookup the read RPCs consult (#1067 slice 2). A run-scoped RPC uses it to
60
- * forward a remote agent's read/steer/handoff to the device that owns it.
51
+ * forward a remote agent's read/steer/handoff to the machine that owns it.
61
52
  */
62
53
  remote: RemoteAgents;
63
54
  /**
64
55
  * Serve a relay-started run's events back to the daemon that relayed it here (#1067): the
65
- * `/_relay/*` endpoints (start + events, plus the slice-2 `rpc`). All are fronted by the same
66
- * `token` guard above, so a device without the cookie cannot start or read a run.
56
+ * `/_relay/*` endpoints (start + events, plus the slice-2 `rpc`). The daemon listens on its
57
+ * own computer only, so a call from another machine reaches them through whatever this
58
+ * computer opened to the network, which lets in only a machine that holds a key of its own.
67
59
  */
68
60
  relay?: {
69
- tailEvents: (agentId: string, onEvent: (event: import('../events.js').OpenAgentEvent) => void) => () => void;
61
+ /** This machine's own id for its project cloned from an address, which is how a relayed call names one. */
62
+ project: (address: string) => Promise<string | undefined>;
63
+ tailEvents: (projectId: string, agentId: string, onEvent: (event: import('../events.js').OpenAgentEvent) => void) => () => void;
70
64
  /** Run one whitelisted run-scoped RPC against this daemon's own checkout (#1067 slice 2). */
71
- rpc?: (fn: string, args: unknown[]) => Promise<unknown>;
65
+ rpc?: (projectId: string, fn: string, args: unknown[]) => Promise<unknown>;
72
66
  };
67
+ /**
68
+ * Where the live screen of a run on this computer answers (screen.ts): what the `/_screen/*`
69
+ * routes, and the relay's for another machine, pass a watcher's calls on to. Absent leaves
70
+ * every screen route 404.
71
+ */
72
+ screen?: (projectId: string, agentId: string) => Promise<string | undefined>;
73
73
  /**
74
74
  * The browser bridge (#1237): the token a Claude web extension presents to report the question
75
75
  * its cloud session is parked on. Absent leaves every `/_bridge/*` route 404, which is default.
76
76
  *
77
- * Deliberately not {@link token}. That one guards a non-loopback bind and is absent on a normal
78
- * loopback daemon, where what keeps other origins out of `/_rpc` is the same-origin check.
79
- * The bridge is the one route meant to be reached from another origin, so neither protects it
80
- * and it authenticates on its own.
77
+ * What keeps other origins out of `/_rpc` is the same-origin check. The bridge is the one
78
+ * route meant to be reached from another origin, so that check does not protect it and it
79
+ * authenticates on its own.
81
80
  */
82
81
  bridgeToken?: string;
83
82
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/dashboard/server.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AACtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAC7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAC/D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAK9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAC5G,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAOhE,0CAA0C;AAC1C,MAAM,WAAW,gBAAgB;IAC/B,oEAAoE;IACpE,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,0DAA0D;IAC1D,IAAI,CAAC,EAAE,MAAM,CAAA;IACb;;;OAGG;IACH,OAAO,EAAE,CACP,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,iBAAiB,EAC1B,SAAS,CAAC,EAAE,MAAM,KACf,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAA;IACjD;;;OAGG;IACH,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,gBAAgB,CAAC,GAAG,gBAAgB,CAAA;IAC5F,+HAA+H;IAC/H,eAAe,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,mBAAmB,CAAC,GAAG,mBAAmB,CAAA;IAC1G;;;OAGG;IACH,WAAW,EAAE,gBAAgB,CAAA;IAC7B,yDAAyD;IACzD,KAAK,EAAE,WAAW,CAAA;IAClB,2EAA2E;IAC3E,MAAM,EAAE,YAAY,CAAA;IACpB,oFAAoF;IACpF,aAAa,EAAE,mBAAmB,CAAA;IAClC,iHAAiH;IACjH,aAAa,EAAE,kBAAkB,CAAA;IACjC;;;;;OAKG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IACd;;;OAGG;IACH,YAAY,EAAE,YAAY,CAAA;IAC1B;;;OAGG;IACH,MAAM,EAAE,YAAY,CAAA;IACpB;;;;OAIG;IACH,KAAK,CAAC,EAAE;QACN,UAAU,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,cAAc,EAAE,cAAc,KAAK,IAAI,KAAK,MAAM,IAAI,CAAA;QAC5G,6FAA6F;QAC7F,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;KACxD,CAAA;IACD;;;;;;;;OAQG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,uBAAuB,EAAE,aAAa,EAAE,CAAC,CAAA;CAChF;AAED,oEAAoE;AACpE,MAAM,WAAW,SAAS;IACxB,uBAAuB;IACvB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,mCAAmC;IACnC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACvB;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,SAAS,CAAC,CAwIzE"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/dashboard/server.ts"],"names":[],"mappings":"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"}