@sentropic/h2a-runtime 0.81.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 (253) hide show
  1. package/dist/account-pool.d.ts +168 -0
  2. package/dist/account-pool.d.ts.map +1 -0
  3. package/dist/account-pool.js +385 -0
  4. package/dist/account-pool.js.map +1 -0
  5. package/dist/agents-projection.d.ts +56 -0
  6. package/dist/agents-projection.d.ts.map +1 -0
  7. package/dist/agents-projection.js +82 -0
  8. package/dist/agents-projection.js.map +1 -0
  9. package/dist/attach.d.ts +75 -0
  10. package/dist/attach.d.ts.map +1 -0
  11. package/dist/attach.js +432 -0
  12. package/dist/attach.js.map +1 -0
  13. package/dist/auth-bundle.d.ts +21 -0
  14. package/dist/auth-bundle.d.ts.map +1 -0
  15. package/dist/auth-bundle.js +112 -0
  16. package/dist/auth-bundle.js.map +1 -0
  17. package/dist/auth-diagnostics.d.ts +18 -0
  18. package/dist/auth-diagnostics.d.ts.map +1 -0
  19. package/dist/auth-diagnostics.js +23 -0
  20. package/dist/auth-diagnostics.js.map +1 -0
  21. package/dist/auth-login.d.ts +9 -0
  22. package/dist/auth-login.d.ts.map +1 -0
  23. package/dist/auth-login.js +21 -0
  24. package/dist/auth-login.js.map +1 -0
  25. package/dist/auth-refresh.d.ts +32 -0
  26. package/dist/auth-refresh.d.ts.map +1 -0
  27. package/dist/auth-refresh.js +83 -0
  28. package/dist/auth-refresh.js.map +1 -0
  29. package/dist/auth-tools.d.ts +55 -0
  30. package/dist/auth-tools.d.ts.map +1 -0
  31. package/dist/auth-tools.js +163 -0
  32. package/dist/auth-tools.js.map +1 -0
  33. package/dist/browser-bridge-local.d.ts +27 -0
  34. package/dist/browser-bridge-local.d.ts.map +1 -0
  35. package/dist/browser-bridge-local.js +51 -0
  36. package/dist/browser-bridge-local.js.map +1 -0
  37. package/dist/browser.d.ts +53 -0
  38. package/dist/browser.d.ts.map +1 -0
  39. package/dist/browser.js +61 -0
  40. package/dist/browser.js.map +1 -0
  41. package/dist/conductor-launch.d.ts +179 -0
  42. package/dist/conductor-launch.d.ts.map +1 -0
  43. package/dist/conductor-launch.js +414 -0
  44. package/dist/conductor-launch.js.map +1 -0
  45. package/dist/config.d.ts +182 -0
  46. package/dist/config.d.ts.map +1 -0
  47. package/dist/config.js +334 -0
  48. package/dist/config.js.map +1 -0
  49. package/dist/conv-guard.d.ts +76 -0
  50. package/dist/conv-guard.d.ts.map +1 -0
  51. package/dist/conv-guard.js +131 -0
  52. package/dist/conv-guard.js.map +1 -0
  53. package/dist/convsync.d.ts +24 -0
  54. package/dist/convsync.d.ts.map +1 -0
  55. package/dist/convsync.js +108 -0
  56. package/dist/convsync.js.map +1 -0
  57. package/dist/cred-health.d.ts +96 -0
  58. package/dist/cred-health.d.ts.map +1 -0
  59. package/dist/cred-health.js +170 -0
  60. package/dist/cred-health.js.map +1 -0
  61. package/dist/delegate.d.ts +406 -0
  62. package/dist/delegate.d.ts.map +1 -0
  63. package/dist/delegate.js +739 -0
  64. package/dist/delegate.js.map +1 -0
  65. package/dist/enroll.d.ts +91 -0
  66. package/dist/enroll.d.ts.map +1 -0
  67. package/dist/enroll.js +248 -0
  68. package/dist/enroll.js.map +1 -0
  69. package/dist/fanout.d.ts +63 -0
  70. package/dist/fanout.d.ts.map +1 -0
  71. package/dist/fanout.js +115 -0
  72. package/dist/fanout.js.map +1 -0
  73. package/dist/forward.d.ts +66 -0
  74. package/dist/forward.d.ts.map +1 -0
  75. package/dist/forward.js +141 -0
  76. package/dist/forward.js.map +1 -0
  77. package/dist/gitdiff.d.ts +31 -0
  78. package/dist/gitdiff.d.ts.map +1 -0
  79. package/dist/gitdiff.js +133 -0
  80. package/dist/gitdiff.js.map +1 -0
  81. package/dist/h2a-bridge.d.ts +102 -0
  82. package/dist/h2a-bridge.d.ts.map +1 -0
  83. package/dist/h2a-bridge.js +333 -0
  84. package/dist/h2a-bridge.js.map +1 -0
  85. package/dist/h2a-jobs.d.ts +235 -0
  86. package/dist/h2a-jobs.d.ts.map +1 -0
  87. package/dist/h2a-jobs.js +388 -0
  88. package/dist/h2a-jobs.js.map +1 -0
  89. package/dist/h2a-ping.d.ts +38 -0
  90. package/dist/h2a-ping.d.ts.map +1 -0
  91. package/dist/h2a-ping.js +58 -0
  92. package/dist/h2a-ping.js.map +1 -0
  93. package/dist/index.d.ts +98 -0
  94. package/dist/index.d.ts.map +1 -0
  95. package/dist/index.js +5887 -0
  96. package/dist/index.js.map +1 -0
  97. package/dist/interactive-throttle.d.ts +164 -0
  98. package/dist/interactive-throttle.d.ts.map +1 -0
  99. package/dist/interactive-throttle.js +194 -0
  100. package/dist/interactive-throttle.js.map +1 -0
  101. package/dist/lineage-client.d.ts +77 -0
  102. package/dist/lineage-client.d.ts.map +1 -0
  103. package/dist/lineage-client.js +117 -0
  104. package/dist/lineage-client.js.map +1 -0
  105. package/dist/lineage-lease.d.ts +152 -0
  106. package/dist/lineage-lease.d.ts.map +1 -0
  107. package/dist/lineage-lease.js +303 -0
  108. package/dist/lineage-lease.js.map +1 -0
  109. package/dist/llm-gateway-runtime/accounts.d.ts +48 -0
  110. package/dist/llm-gateway-runtime/accounts.d.ts.map +1 -0
  111. package/dist/llm-gateway-runtime/accounts.js +226 -0
  112. package/dist/llm-gateway-runtime/accounts.js.map +1 -0
  113. package/dist/llm-gateway-runtime/index.d.ts +4 -0
  114. package/dist/llm-gateway-runtime/index.d.ts.map +1 -0
  115. package/dist/llm-gateway-runtime/index.js +58 -0
  116. package/dist/llm-gateway-runtime/index.js.map +1 -0
  117. package/dist/llm-gateway-runtime/model-catalog.d.ts +36 -0
  118. package/dist/llm-gateway-runtime/model-catalog.d.ts.map +1 -0
  119. package/dist/llm-gateway-runtime/model-catalog.js +146 -0
  120. package/dist/llm-gateway-runtime/model-catalog.js.map +1 -0
  121. package/dist/llm-gateway-runtime/proxy-anthropic.d.ts +3 -0
  122. package/dist/llm-gateway-runtime/proxy-anthropic.d.ts.map +1 -0
  123. package/dist/llm-gateway-runtime/proxy-anthropic.js +139 -0
  124. package/dist/llm-gateway-runtime/proxy-anthropic.js.map +1 -0
  125. package/dist/llm-gateway-runtime/proxy-openai.d.ts +117 -0
  126. package/dist/llm-gateway-runtime/proxy-openai.d.ts.map +1 -0
  127. package/dist/llm-gateway-runtime/proxy-openai.js +1132 -0
  128. package/dist/llm-gateway-runtime/proxy-openai.js.map +1 -0
  129. package/dist/llm-gateway-runtime/session-ledger.d.ts +32 -0
  130. package/dist/llm-gateway-runtime/session-ledger.d.ts.map +1 -0
  131. package/dist/llm-gateway-runtime/session-ledger.js +62 -0
  132. package/dist/llm-gateway-runtime/session-ledger.js.map +1 -0
  133. package/dist/llm-gateway-runtime/sticky.d.ts +40 -0
  134. package/dist/llm-gateway-runtime/sticky.d.ts.map +1 -0
  135. package/dist/llm-gateway-runtime/sticky.js +254 -0
  136. package/dist/llm-gateway-runtime/sticky.js.map +1 -0
  137. package/dist/llm-mesh.d.ts +102 -0
  138. package/dist/llm-mesh.d.ts.map +1 -0
  139. package/dist/llm-mesh.js +433 -0
  140. package/dist/llm-mesh.js.map +1 -0
  141. package/dist/migrate-candidates.d.ts +35 -0
  142. package/dist/migrate-candidates.d.ts.map +1 -0
  143. package/dist/migrate-candidates.js +128 -0
  144. package/dist/migrate-candidates.js.map +1 -0
  145. package/dist/migrate.d.ts +125 -0
  146. package/dist/migrate.d.ts.map +1 -0
  147. package/dist/migrate.js +561 -0
  148. package/dist/migrate.js.map +1 -0
  149. package/dist/plugin-manifest.d.ts +143 -0
  150. package/dist/plugin-manifest.d.ts.map +1 -0
  151. package/dist/plugin-manifest.js +233 -0
  152. package/dist/plugin-manifest.js.map +1 -0
  153. package/dist/plugin.d.ts +274 -0
  154. package/dist/plugin.d.ts.map +1 -0
  155. package/dist/plugin.js +919 -0
  156. package/dist/plugin.js.map +1 -0
  157. package/dist/pod-liveness.d.ts +51 -0
  158. package/dist/pod-liveness.d.ts.map +1 -0
  159. package/dist/pod-liveness.js +80 -0
  160. package/dist/pod-liveness.js.map +1 -0
  161. package/dist/profile-menu.d.ts +7 -0
  162. package/dist/profile-menu.d.ts.map +1 -0
  163. package/dist/profile-menu.js +52 -0
  164. package/dist/profile-menu.js.map +1 -0
  165. package/dist/profiles.d.ts +23 -0
  166. package/dist/profiles.d.ts.map +1 -0
  167. package/dist/profiles.js +66 -0
  168. package/dist/profiles.js.map +1 -0
  169. package/dist/protocol-local.d.ts +27 -0
  170. package/dist/protocol-local.d.ts.map +1 -0
  171. package/dist/protocol-local.js +12 -0
  172. package/dist/protocol-local.js.map +1 -0
  173. package/dist/pty.d.ts +26 -0
  174. package/dist/pty.d.ts.map +1 -0
  175. package/dist/pty.js +45 -0
  176. package/dist/pty.js.map +1 -0
  177. package/dist/readiness.d.ts +38 -0
  178. package/dist/readiness.d.ts.map +1 -0
  179. package/dist/readiness.js +169 -0
  180. package/dist/readiness.js.map +1 -0
  181. package/dist/registry.d.ts +258 -0
  182. package/dist/registry.d.ts.map +1 -0
  183. package/dist/registry.js +570 -0
  184. package/dist/registry.js.map +1 -0
  185. package/dist/relaunch.d.ts +52 -0
  186. package/dist/relaunch.d.ts.map +1 -0
  187. package/dist/relaunch.js +76 -0
  188. package/dist/relaunch.js.map +1 -0
  189. package/dist/restore.d.ts +165 -0
  190. package/dist/restore.d.ts.map +1 -0
  191. package/dist/restore.js +530 -0
  192. package/dist/restore.js.map +1 -0
  193. package/dist/run.d.ts +29 -0
  194. package/dist/run.d.ts.map +1 -0
  195. package/dist/run.js +206 -0
  196. package/dist/run.js.map +1 -0
  197. package/dist/secrets.d.ts +25 -0
  198. package/dist/secrets.d.ts.map +1 -0
  199. package/dist/secrets.js +98 -0
  200. package/dist/secrets.js.map +1 -0
  201. package/dist/session-restore.d.ts +26 -0
  202. package/dist/session-restore.d.ts.map +1 -0
  203. package/dist/session-restore.js +122 -0
  204. package/dist/session-restore.js.map +1 -0
  205. package/dist/skills-sync.d.ts +126 -0
  206. package/dist/skills-sync.d.ts.map +1 -0
  207. package/dist/skills-sync.js +255 -0
  208. package/dist/skills-sync.js.map +1 -0
  209. package/dist/smoke.d.ts +23 -0
  210. package/dist/smoke.d.ts.map +1 -0
  211. package/dist/smoke.js +138 -0
  212. package/dist/smoke.js.map +1 -0
  213. package/dist/soft-refresh.d.ts +107 -0
  214. package/dist/soft-refresh.d.ts.map +1 -0
  215. package/dist/soft-refresh.js +426 -0
  216. package/dist/soft-refresh.js.map +1 -0
  217. package/dist/sync-status.d.ts +22 -0
  218. package/dist/sync-status.d.ts.map +1 -0
  219. package/dist/sync-status.js +41 -0
  220. package/dist/sync-status.js.map +1 -0
  221. package/dist/sync.d.ts +77 -0
  222. package/dist/sync.d.ts.map +1 -0
  223. package/dist/sync.js +302 -0
  224. package/dist/sync.js.map +1 -0
  225. package/dist/throttle-signatures.d.ts +43 -0
  226. package/dist/throttle-signatures.d.ts.map +1 -0
  227. package/dist/throttle-signatures.js +116 -0
  228. package/dist/throttle-signatures.js.map +1 -0
  229. package/dist/tmux.d.ts +286 -0
  230. package/dist/tmux.d.ts.map +1 -0
  231. package/dist/tmux.js +970 -0
  232. package/dist/tmux.js.map +1 -0
  233. package/dist/tunnel.d.ts +25 -0
  234. package/dist/tunnel.d.ts.map +1 -0
  235. package/dist/tunnel.js +127 -0
  236. package/dist/tunnel.js.map +1 -0
  237. package/dist/workspace-merge.d.ts +17 -0
  238. package/dist/workspace-merge.d.ts.map +1 -0
  239. package/dist/workspace-merge.js +153 -0
  240. package/dist/workspace-merge.js.map +1 -0
  241. package/dist/workspace-sync-incremental.d.ts +64 -0
  242. package/dist/workspace-sync-incremental.d.ts.map +1 -0
  243. package/dist/workspace-sync-incremental.js +199 -0
  244. package/dist/workspace-sync-incremental.js.map +1 -0
  245. package/dist/workspace-sync.d.ts +3 -0
  246. package/dist/workspace-sync.d.ts.map +1 -0
  247. package/dist/workspace-sync.js +187 -0
  248. package/dist/workspace-sync.js.map +1 -0
  249. package/dist/workspace.d.ts +70 -0
  250. package/dist/workspace.d.ts.map +1 -0
  251. package/dist/workspace.js +173 -0
  252. package/dist/workspace.js.map +1 -0
  253. package/package.json +44 -0
@@ -0,0 +1,82 @@
1
+ export function agentInstanceForJob(job) {
2
+ return `remote-job:${job.tool}:${job.id}`;
3
+ }
4
+ export function projectJobAgent(job) {
5
+ const remote = job.kind === "remote";
6
+ const state = (job.jobState ?? "pending");
7
+ return {
8
+ id: `job:${job.id}`,
9
+ ownerSystem: "remote",
10
+ authoritativeForObjectiveState: false,
11
+ kind: "delegated-job",
12
+ tool: job.tool,
13
+ state,
14
+ cwd: job.originCwd ?? job.cwd,
15
+ ...(job.label !== undefined ? { label: job.label } : {}),
16
+ ...(job.tmuxSession !== undefined ? { tmuxSession: job.tmuxSession } : {}),
17
+ ...(job.remoteId !== undefined ? { remoteSessionId: job.remoteId } : {}),
18
+ jobId: job.id,
19
+ h2aInstance: agentInstanceForJob(job),
20
+ sources: [{ kind: "job-registry", id: job.id }],
21
+ conflicts: [],
22
+ capabilities: {
23
+ attach: !job.headless,
24
+ logs: true,
25
+ remote,
26
+ objectiveStateAuthority: false,
27
+ },
28
+ };
29
+ }
30
+ export function projectLocalSessionAgent(row) {
31
+ const id = `local:${row.slug}`;
32
+ return {
33
+ id,
34
+ ownerSystem: "remote",
35
+ authoritativeForObjectiveState: false,
36
+ kind: "local-session",
37
+ tool: row.profile,
38
+ state: row.state,
39
+ cwd: row.path,
40
+ ...(row.displayName !== undefined ? { label: row.displayName } : {}),
41
+ tmuxSession: `remote-${row.slug}`,
42
+ sources: [{ kind: "local-tmux", id: row.slug }],
43
+ conflicts: row.badge === "guess" ? ["not-enrolled-in-registry"] : [],
44
+ capabilities: {
45
+ attach: true,
46
+ logs: true,
47
+ remote: false,
48
+ objectiveStateAuthority: false,
49
+ },
50
+ };
51
+ }
52
+ export function projectRemoteAgents(args) {
53
+ const agents = [
54
+ ...args.jobs.map(projectJobAgent),
55
+ ...args.localRows.map(projectLocalSessionAgent),
56
+ ].sort((a, b) => a.id.localeCompare(b.id));
57
+ return {
58
+ kind: "remote-agents-list",
59
+ version: 1,
60
+ agents,
61
+ warnings: [],
62
+ degraded: false,
63
+ };
64
+ }
65
+ export function projectRemoteAgentInspect(agent) {
66
+ return {
67
+ kind: "remote-agent-detail",
68
+ version: 1,
69
+ agent,
70
+ related: { jobs: [], sessions: [], logs: [] },
71
+ warnings: [],
72
+ };
73
+ }
74
+ export function findProjectedAgent(agents, selector) {
75
+ return agents.find((agent) => agent.id === selector ||
76
+ agent.jobId === selector ||
77
+ agent.tmuxSession === selector ||
78
+ agent.remoteSessionId === selector ||
79
+ agent.h2aInstance === selector ||
80
+ agent.label === selector);
81
+ }
82
+ //# sourceMappingURL=agents-projection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agents-projection.js","sourceRoot":"","sources":["../src/agents-projection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,75 @@
1
+ export type InputRetryOptions = {
2
+ readonly maxAttempts?: number;
3
+ readonly baseDelayMs?: number;
4
+ readonly maxDelayMs?: number;
5
+ };
6
+ export type AttachOptions = {
7
+ readonly baseUrl: string;
8
+ readonly sessionId: string;
9
+ readonly stdin?: NodeJS.ReadStream;
10
+ readonly stdout?: NodeJS.WriteStream;
11
+ readonly stderr?: NodeJS.WriteStream;
12
+ readonly fetchImpl?: typeof fetch;
13
+ readonly inputRetry?: InputRetryOptions;
14
+ };
15
+ export type AttachResult = {
16
+ readonly close: () => Promise<void>;
17
+ readonly finished: Promise<void>;
18
+ };
19
+ export declare function attach(options: AttachOptions): Promise<AttachResult>;
20
+ export declare function listRemoteSessions(baseUrl: string, fetchImpl?: typeof fetch): Promise<ReadonlyArray<{
21
+ id: string;
22
+ profile: string;
23
+ target: string;
24
+ createdAt: string;
25
+ workspaceId?: string;
26
+ workspacePath?: string;
27
+ displayName?: string;
28
+ cliSessionId?: string;
29
+ }>>;
30
+ export declare function stopRemoteSession(baseUrl: string, sessionId: string, reason?: string, fetchImpl?: typeof fetch): Promise<{
31
+ accepted: boolean;
32
+ }>;
33
+ export declare function getRemoteSession(baseUrl: string, sessionId: string, fetchImpl?: typeof fetch): Promise<{
34
+ session: {
35
+ id: string;
36
+ profile: string;
37
+ };
38
+ }>;
39
+ export declare function refreshRemoteSession(baseUrl: string, sessionId: string, credentials: Readonly<Record<string, string>>, fetchImpl?: typeof fetch, displayName?: string): Promise<{
40
+ sessionId: string;
41
+ accepted: boolean;
42
+ }>;
43
+ /**
44
+ * Rename a session's display name in the store without touching the Pod.
45
+ * Calls PATCH /sessions/:id with body { displayName }.
46
+ */
47
+ export declare function renameRemoteSession(baseUrl: string, sessionId: string, displayName: string, fetchImpl?: typeof fetch): Promise<{
48
+ sessionId: string;
49
+ displayName: string;
50
+ accepted: boolean;
51
+ }>;
52
+ /**
53
+ * Probe whether a session's terminal can receive input (i.e. the session-agent
54
+ * is connected). Sends an empty (no-op) input frame: 202 = agent connected,
55
+ * 503 = no agent (deaf/zombie), anything else = unknown.
56
+ */
57
+ export declare function sessionTerminalHealth(baseUrl: string, sessionId: string, fetchImpl?: typeof fetch): Promise<"ready" | "agent-down" | "unknown">;
58
+ export declare function createRemoteSession(baseUrl: string, body: {
59
+ profile: string;
60
+ target?: string;
61
+ resume?: string;
62
+ startupArgs?: readonly string[];
63
+ displayName?: string;
64
+ credentials?: Readonly<Record<string, string>>;
65
+ metadata?: Readonly<Record<string, unknown>>;
66
+ workspaceSync?: boolean;
67
+ workspaceExport?: boolean;
68
+ workspaceId?: string;
69
+ workspacePath?: string;
70
+ home?: string;
71
+ agentImage?: string;
72
+ }, fetchImpl?: typeof fetch): Promise<{
73
+ id: string;
74
+ }>;
75
+ //# sourceMappingURL=attach.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attach.d.ts","sourceRoot":"","sources":["../src/attach.ts"],"names":[],"mappings":"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"}
package/dist/attach.js ADDED
@@ -0,0 +1,432 @@
1
+ import { authHeaders, DEFAULT_SESSION_TARGET } from "./config.js";
2
+ import { ensureConnected } from "./tunnel.js";
3
+ const DEFAULT_INPUT_RETRY = {
4
+ maxAttempts: 6,
5
+ baseDelayMs: 200,
6
+ maxDelayMs: 1600,
7
+ };
8
+ function joinUrl(base, path) {
9
+ return `${base.replace(/\/$/, "")}${path}`;
10
+ }
11
+ function parseSseEvents(buffer) {
12
+ const events = [];
13
+ const chunks = buffer.split("\n\n");
14
+ const rest = chunks.pop() ?? "";
15
+ for (const chunk of chunks) {
16
+ if (!chunk.trim())
17
+ continue;
18
+ let eventName;
19
+ const dataLines = [];
20
+ for (const line of chunk.split("\n")) {
21
+ if (line.startsWith("event:"))
22
+ eventName = line.slice(6).trim();
23
+ else if (line.startsWith("data:"))
24
+ dataLines.push(line.slice(5).trim());
25
+ }
26
+ if (dataLines.length === 0)
27
+ continue;
28
+ const entry = {
29
+ data: dataLines.join("\n"),
30
+ };
31
+ if (eventName !== undefined)
32
+ entry.event = eventName;
33
+ events.push(entry);
34
+ }
35
+ return { events, rest };
36
+ }
37
+ export async function attach(options) {
38
+ const baseUrl = options.baseUrl;
39
+ const sessionId = options.sessionId;
40
+ const stdin = options.stdin ?? process.stdin;
41
+ const stdout = options.stdout ?? process.stdout;
42
+ const stderr = options.stderr ?? process.stderr;
43
+ const doFetch = options.fetchImpl ?? fetch;
44
+ const controller = new AbortController();
45
+ const sseResponse = await doFetch(joinUrl(baseUrl, `/sessions/${sessionId}/events`), {
46
+ headers: { accept: "text/event-stream", ...authHeaders() },
47
+ signal: controller.signal,
48
+ });
49
+ if (!sseResponse.ok || !sseResponse.body) {
50
+ throw new Error(`attach: SSE stream returned ${sseResponse.status} ${sseResponse.statusText}`);
51
+ }
52
+ let reader = sseResponse.body.getReader();
53
+ const decoder = new TextDecoder("utf-8");
54
+ let finishedResolve;
55
+ const finished = new Promise((resolve) => {
56
+ finishedResolve = resolve;
57
+ });
58
+ const wasRaw = stdin.isTTY
59
+ ? Boolean(stdin.isRaw)
60
+ : false;
61
+ if (stdin.isTTY)
62
+ stdin.setRawMode?.(true);
63
+ stdin.resume();
64
+ if (stdin.isTTY) {
65
+ stderr.write("[remote] press Ctrl+P Ctrl+Q to detach (session keeps running)\n");
66
+ }
67
+ const retry = { ...DEFAULT_INPUT_RETRY, ...(options.inputRetry ?? {}) };
68
+ let aborted = false;
69
+ let queueTail = Promise.resolve();
70
+ const postInput = async (data) => {
71
+ for (let attempt = 1; attempt <= retry.maxAttempts; attempt++) {
72
+ if (aborted)
73
+ return;
74
+ try {
75
+ const response = await doFetch(joinUrl(baseUrl, `/sessions/${sessionId}/terminal/input`), {
76
+ method: "POST",
77
+ headers: { "content-type": "application/json", ...authHeaders() },
78
+ body: JSON.stringify({
79
+ terminalId: "operator",
80
+ data,
81
+ encoding: "utf8",
82
+ }),
83
+ });
84
+ if (response.ok)
85
+ return;
86
+ if (response.status < 500) {
87
+ stderr.write(`[remote] input rejected (${response.status} ${response.statusText}); not retried\n`);
88
+ return;
89
+ }
90
+ }
91
+ catch (error) {
92
+ if (aborted)
93
+ return;
94
+ if (attempt === retry.maxAttempts) {
95
+ stderr.write(`[remote] input abandoned after ${retry.maxAttempts} attempts: ${String(error)}\n`);
96
+ return;
97
+ }
98
+ }
99
+ if (attempt < retry.maxAttempts) {
100
+ const delay = Math.min(retry.maxDelayMs, retry.baseDelayMs * 2 ** (attempt - 1));
101
+ await new Promise((resolve) => setTimeout(resolve, delay));
102
+ }
103
+ }
104
+ stderr.write(`[remote] input abandoned after ${retry.maxAttempts} attempts\n`);
105
+ };
106
+ const enqueueInput = (data) => {
107
+ queueTail = queueTail.then(() => postInput(data));
108
+ };
109
+ const sendResize = async () => {
110
+ const columns = Math.max(1, stdout.columns ?? 80);
111
+ const rows = Math.max(1, stdout.rows ?? 24);
112
+ try {
113
+ await doFetch(joinUrl(baseUrl, `/sessions/${sessionId}/terminal/resize`), {
114
+ method: "POST",
115
+ headers: { "content-type": "application/json", ...authHeaders() },
116
+ body: JSON.stringify({
117
+ terminalId: "operator",
118
+ columns,
119
+ rows,
120
+ }),
121
+ });
122
+ }
123
+ catch (error) {
124
+ stderr.write(`[remote] resize failed: ${String(error)}\n`);
125
+ }
126
+ };
127
+ const CTRL_P = 0x10;
128
+ const CTRL_Q = 0x11;
129
+ const DETACH_TIMEOUT_MS = 1500;
130
+ let detachPending = false;
131
+ let detachTimer = null;
132
+ const onStdin = (chunk) => {
133
+ const bytes = typeof chunk === "string" ? Buffer.from(chunk, "utf8") : chunk;
134
+ const passthrough = [];
135
+ const flushPassthrough = () => {
136
+ if (passthrough.length === 0)
137
+ return;
138
+ enqueueInput(Buffer.from(passthrough).toString("utf8"));
139
+ passthrough.length = 0;
140
+ };
141
+ for (let i = 0; i < bytes.length; i++) {
142
+ const byte = bytes[i];
143
+ if (detachPending) {
144
+ if (byte === CTRL_Q) {
145
+ detachPending = false;
146
+ if (detachTimer) {
147
+ clearTimeout(detachTimer);
148
+ detachTimer = null;
149
+ }
150
+ flushPassthrough();
151
+ if (stdin.isTTY)
152
+ stderr.write("\n[remote] detached\n");
153
+ void close();
154
+ return;
155
+ }
156
+ detachPending = false;
157
+ if (detachTimer) {
158
+ clearTimeout(detachTimer);
159
+ detachTimer = null;
160
+ }
161
+ passthrough.push(CTRL_P, byte);
162
+ continue;
163
+ }
164
+ if (byte === CTRL_P) {
165
+ flushPassthrough();
166
+ detachPending = true;
167
+ detachTimer = setTimeout(() => {
168
+ if (!detachPending)
169
+ return;
170
+ detachPending = false;
171
+ detachTimer = null;
172
+ enqueueInput("\x10");
173
+ }, DETACH_TIMEOUT_MS);
174
+ continue;
175
+ }
176
+ passthrough.push(byte);
177
+ }
178
+ flushPassthrough();
179
+ };
180
+ const onResize = () => {
181
+ void sendResize();
182
+ };
183
+ stdin.on("data", onStdin);
184
+ stdout.on?.("resize", onResize);
185
+ let closed = false;
186
+ const close = async () => {
187
+ if (closed)
188
+ return;
189
+ closed = true;
190
+ if (detachTimer) {
191
+ clearTimeout(detachTimer);
192
+ detachTimer = null;
193
+ }
194
+ stdin.off?.("data", onStdin);
195
+ // Give already-queued inputs a brief window to finish before aborting retries
196
+ await Promise.race([
197
+ queueTail.catch(() => { }),
198
+ new Promise((resolve) => setTimeout(resolve, 500).unref?.()),
199
+ ]);
200
+ aborted = true;
201
+ controller.abort();
202
+ stdout.off?.("resize", onResize);
203
+ if (stdin.isTTY)
204
+ stdin.setRawMode?.(wasRaw);
205
+ stdin.pause();
206
+ finishedResolve();
207
+ };
208
+ (async () => {
209
+ let buffer = "";
210
+ // Outer loop: stream → on unexpected end (network change / sleep / tunnel
211
+ // drop / CP restart) reconnect instead of dying. The wrapped session keeps
212
+ // running server-side; only output buffered during the gap is missed.
213
+ for (;;) {
214
+ try {
215
+ for (;;) {
216
+ const { value, done } = await reader.read();
217
+ if (done)
218
+ break;
219
+ buffer += decoder.decode(value, { stream: true });
220
+ const { events, rest } = parseSseEvents(buffer);
221
+ buffer = rest;
222
+ for (const ev of events) {
223
+ if (ev.event &&
224
+ ev.event !== "terminal.output" &&
225
+ ev.event !== "terminal.exited")
226
+ continue;
227
+ try {
228
+ const envelope = JSON.parse(ev.data);
229
+ if (envelope.type === "terminal.output") {
230
+ const payload = envelope.payload;
231
+ if (typeof payload.data === "string")
232
+ stdout.write(payload.data);
233
+ }
234
+ else if (envelope.type === "terminal.exited") {
235
+ await close();
236
+ return;
237
+ }
238
+ }
239
+ catch {
240
+ // ignore malformed
241
+ }
242
+ }
243
+ }
244
+ }
245
+ catch {
246
+ // stream aborted or network error -> reconnect below (or exit if closed)
247
+ }
248
+ if (closed)
249
+ return;
250
+ // Reconnect: heal the tunnel and reopen the events stream.
251
+ stderr.write("\r\n[remote] connection lost — reconnecting…\r\n");
252
+ buffer = "";
253
+ let reopened = false;
254
+ for (let attempt = 0; attempt < 120 && !closed; attempt++) {
255
+ try {
256
+ await ensureConnected(baseUrl, stderr);
257
+ const resp = await doFetch(joinUrl(baseUrl, `/sessions/${sessionId}/events`), {
258
+ headers: { accept: "text/event-stream", ...authHeaders() },
259
+ signal: controller.signal,
260
+ });
261
+ if (resp.status === 404) {
262
+ stderr.write("[remote] session ended\r\n");
263
+ await close();
264
+ return;
265
+ }
266
+ if (resp.ok && resp.body) {
267
+ reader = resp.body.getReader();
268
+ reopened = true;
269
+ stderr.write("[remote] reconnected\r\n");
270
+ break;
271
+ }
272
+ }
273
+ catch {
274
+ // keep retrying
275
+ }
276
+ if (closed)
277
+ return;
278
+ await new Promise((r) => setTimeout(r, 1000));
279
+ }
280
+ if (!reopened) {
281
+ await close();
282
+ return;
283
+ }
284
+ }
285
+ })();
286
+ return { close, finished };
287
+ }
288
+ export async function listRemoteSessions(baseUrl, fetchImpl = fetch) {
289
+ const response = await fetchImpl(joinUrl(baseUrl, "/sessions"), {
290
+ headers: { ...authHeaders() },
291
+ });
292
+ if (!response.ok) {
293
+ throw new Error(`listRemoteSessions: ${response.status} ${response.statusText}`);
294
+ }
295
+ const json = (await response.json());
296
+ return json.sessions;
297
+ }
298
+ export async function stopRemoteSession(baseUrl, sessionId, reason, fetchImpl = fetch) {
299
+ const body = {};
300
+ if (reason)
301
+ body.reason = reason;
302
+ const response = await fetchImpl(joinUrl(baseUrl, `/sessions/${sessionId}/stop`), {
303
+ method: "POST",
304
+ headers: { "content-type": "application/json", ...authHeaders() },
305
+ body: JSON.stringify(body),
306
+ });
307
+ if (!response.ok) {
308
+ throw new Error(`stopRemoteSession: ${response.status} ${response.statusText}`);
309
+ }
310
+ const json = (await response.json());
311
+ return { accepted: json.accepted };
312
+ }
313
+ export async function getRemoteSession(baseUrl, sessionId, fetchImpl = fetch) {
314
+ const response = await fetchImpl(joinUrl(baseUrl, `/sessions/${sessionId}`), {
315
+ headers: { ...authHeaders() },
316
+ });
317
+ if (!response.ok) {
318
+ throw new Error(`getRemoteSession: ${response.status} ${response.statusText}`);
319
+ }
320
+ return (await response.json());
321
+ }
322
+ export async function refreshRemoteSession(baseUrl, sessionId, credentials, fetchImpl = fetch, displayName) {
323
+ // displayName rides as a query param (the JSON body is the free-form
324
+ // path→base64 credentials map, so it has no room for a named field). The
325
+ // control-plane stamps it onto the session descriptor before recreating the
326
+ // Pod, so the new name sticks (and survives the next announce/refresh).
327
+ const path = `/sessions/${sessionId}/credentials`;
328
+ const url = displayName && displayName.length > 0
329
+ ? `${joinUrl(baseUrl, path)}?displayName=${encodeURIComponent(displayName)}`
330
+ : joinUrl(baseUrl, path);
331
+ const response = await fetchImpl(url, {
332
+ method: "POST",
333
+ headers: { "content-type": "application/json", ...authHeaders() },
334
+ body: JSON.stringify(credentials),
335
+ });
336
+ if (!response.ok) {
337
+ throw new Error(`refreshRemoteSession: ${response.status} ${response.statusText}`);
338
+ }
339
+ const json = (await response.json());
340
+ return { sessionId: json.sessionId, accepted: json.accepted };
341
+ }
342
+ /**
343
+ * Rename a session's display name in the store without touching the Pod.
344
+ * Calls PATCH /sessions/:id with body { displayName }.
345
+ */
346
+ export async function renameRemoteSession(baseUrl, sessionId, displayName, fetchImpl = fetch) {
347
+ const response = await fetchImpl(joinUrl(baseUrl, `/sessions/${sessionId}`), {
348
+ method: "PATCH",
349
+ headers: { "content-type": "application/json", ...authHeaders() },
350
+ body: JSON.stringify({ displayName }),
351
+ });
352
+ if (!response.ok) {
353
+ throw new Error(`renameRemoteSession: ${response.status} ${response.statusText}`);
354
+ }
355
+ const json = (await response.json());
356
+ return {
357
+ sessionId: json.sessionId,
358
+ displayName: json.displayName,
359
+ accepted: json.accepted,
360
+ };
361
+ }
362
+ /**
363
+ * Probe whether a session's terminal can receive input (i.e. the session-agent
364
+ * is connected). Sends an empty (no-op) input frame: 202 = agent connected,
365
+ * 503 = no agent (deaf/zombie), anything else = unknown.
366
+ */
367
+ export async function sessionTerminalHealth(baseUrl, sessionId, fetchImpl = fetch) {
368
+ try {
369
+ const response = await fetchImpl(joinUrl(baseUrl, `/sessions/${sessionId}/terminal/input`), {
370
+ method: "POST",
371
+ headers: { "content-type": "application/json", ...authHeaders() },
372
+ body: JSON.stringify({
373
+ terminalId: sessionId,
374
+ data: "",
375
+ encoding: "utf8",
376
+ }),
377
+ });
378
+ if (response.status === 202)
379
+ return "ready";
380
+ if (response.status === 503)
381
+ return "agent-down";
382
+ return "unknown";
383
+ }
384
+ catch {
385
+ return "unknown";
386
+ }
387
+ }
388
+ export async function createRemoteSession(baseUrl, body, fetchImpl = fetch) {
389
+ const payload = {
390
+ profile: body.profile,
391
+ target: body.target ?? DEFAULT_SESSION_TARGET,
392
+ };
393
+ if (body.displayName)
394
+ payload.displayName = body.displayName;
395
+ if (body.workspaceSync)
396
+ payload.workspaceSync = true;
397
+ if (body.workspaceExport)
398
+ payload.workspaceExport = true;
399
+ if (body.workspaceId)
400
+ payload.workspaceId = body.workspaceId;
401
+ if (body.workspacePath)
402
+ payload.workspacePath = body.workspacePath;
403
+ if (body.home)
404
+ payload.home = body.home;
405
+ if (body.agentImage)
406
+ payload.agentImage = body.agentImage;
407
+ if (body.resume !== undefined ||
408
+ (body.startupArgs?.length ?? 0) > 0 ||
409
+ body.metadata !== undefined) {
410
+ const metadata = {
411
+ ...(body.metadata ?? {}),
412
+ ...(body.resume !== undefined ? { resume: body.resume } : {}),
413
+ ...(body.startupArgs?.length
414
+ ? { startup: { args: body.startupArgs } }
415
+ : {}),
416
+ };
417
+ payload.metadata = metadata;
418
+ }
419
+ if (body.credentials && Object.keys(body.credentials).length > 0)
420
+ payload.credentials = body.credentials;
421
+ const response = await fetchImpl(joinUrl(baseUrl, "/sessions"), {
422
+ method: "POST",
423
+ headers: { "content-type": "application/json", ...authHeaders() },
424
+ body: JSON.stringify(payload),
425
+ });
426
+ if (!response.ok) {
427
+ throw new Error(`createRemoteSession: ${response.status} ${response.statusText}`);
428
+ }
429
+ const json = (await response.json());
430
+ return { id: json.session.id };
431
+ }
432
+ //# sourceMappingURL=attach.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attach.js","sourceRoot":"","sources":["../src/attach.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import type { CliProfile } from "./protocol-local.js";
2
+ /**
3
+ * For each CLI profile, the set of HOME-relative files we copy to the Pod's
4
+ * Secret so the in-cluster binary can read its OAuth credentials without
5
+ * re-authing in-Pod.
6
+ */
7
+ export declare const PROFILE_AUTH_FILES: Readonly<Record<CliProfile, ReadonlyArray<string>>>;
8
+ export type AuthBundle = Readonly<Record<string, string>>;
9
+ export declare class AuthBundleMissingError extends Error {
10
+ readonly profile: CliProfile;
11
+ readonly knownPaths: ReadonlyArray<string>;
12
+ readonly refreshHint: string;
13
+ constructor(profile: CliProfile, knownPaths: ReadonlyArray<string>, refreshHint: string);
14
+ }
15
+ export type CollectAuthOptions = {
16
+ readonly home?: string;
17
+ readonly readFileImpl?: (path: string) => Promise<Uint8Array | Buffer>;
18
+ };
19
+ export declare function collectProfileAuth(profile: CliProfile, options?: CollectAuthOptions): Promise<AuthBundle>;
20
+ export declare function assertRequiredAuthBundle(profile: CliProfile, bundle: AuthBundle): void;
21
+ //# sourceMappingURL=auth-bundle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-bundle.d.ts","sourceRoot":"","sources":["../src/auth-bundle.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEtD;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,EAAE,QAAQ,CACvC,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,CAsB1C,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAO1D,qBAAa,sBAAuB,SAAQ,KAAK;IAE7C,QAAQ,CAAC,OAAO,EAAE,UAAU;IAC5B,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC,MAAM,CAAC;IAC1C,QAAQ,CAAC,WAAW,EAAE,MAAM;gBAFnB,OAAO,EAAE,UAAU,EACnB,UAAU,EAAE,aAAa,CAAC,MAAM,CAAC,EACjC,WAAW,EAAE,MAAM;CAS/B;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,GAAG,MAAM,CAAC,CAAC;CACxE,CAAC;AAEF,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,UAAU,EACnB,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,UAAU,CAAC,CAuBrB;AA2CD,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,UAAU,EACnB,MAAM,EAAE,UAAU,GACjB,IAAI,CAQN"}