@panorama-ai/gateway 2.29.14 → 2.30.181

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 (320) hide show
  1. package/README.md +167 -10
  2. package/dist/child-process-env.d.ts.map +1 -1
  3. package/dist/child-process-env.js +1 -0
  4. package/dist/child-process-env.js.map +1 -1
  5. package/dist/cli-args.d.ts +11 -0
  6. package/dist/cli-args.d.ts.map +1 -0
  7. package/dist/cli-args.js +72 -0
  8. package/dist/cli-args.js.map +1 -0
  9. package/dist/cli-command-discovery.d.ts +17 -0
  10. package/dist/cli-command-discovery.d.ts.map +1 -0
  11. package/dist/cli-command-discovery.js +229 -0
  12. package/dist/cli-command-discovery.js.map +1 -0
  13. package/dist/cli-env.d.ts +7 -0
  14. package/dist/cli-env.d.ts.map +1 -0
  15. package/dist/cli-env.js +82 -0
  16. package/dist/cli-env.js.map +1 -0
  17. package/dist/cli-output.d.ts +23 -0
  18. package/dist/cli-output.d.ts.map +1 -0
  19. package/dist/cli-output.js +86 -0
  20. package/dist/cli-output.js.map +1 -0
  21. package/dist/cli-provider-commands.d.ts +59 -0
  22. package/dist/cli-provider-commands.d.ts.map +1 -0
  23. package/dist/cli-provider-commands.js +157 -0
  24. package/dist/cli-provider-commands.js.map +1 -0
  25. package/dist/cli-providers/claude.d.ts.map +1 -1
  26. package/dist/cli-providers/claude.js +11 -110
  27. package/dist/cli-providers/claude.js.map +1 -1
  28. package/dist/cli-providers/codex.d.ts.map +1 -1
  29. package/dist/cli-providers/codex.js +13 -53
  30. package/dist/cli-providers/codex.js.map +1 -1
  31. package/dist/cli-providers/gemini.d.ts.map +1 -1
  32. package/dist/cli-providers/gemini.js +18 -88
  33. package/dist/cli-providers/gemini.js.map +1 -1
  34. package/dist/cli-providers/types.d.ts +3 -1
  35. package/dist/cli-providers/types.d.ts.map +1 -1
  36. package/dist/cli-providers/types.js.map +1 -1
  37. package/dist/database.types.d.ts +4209 -759
  38. package/dist/database.types.d.ts.map +1 -1
  39. package/dist/database.types.js +0 -3
  40. package/dist/database.types.js.map +1 -1
  41. package/dist/debug-redaction.d.ts +11 -0
  42. package/dist/debug-redaction.d.ts.map +1 -1
  43. package/dist/debug-redaction.js +33 -4
  44. package/dist/debug-redaction.js.map +1 -1
  45. package/dist/finalize-subagent-run.d.ts +28 -0
  46. package/dist/finalize-subagent-run.d.ts.map +1 -0
  47. package/dist/finalize-subagent-run.js +34 -0
  48. package/dist/finalize-subagent-run.js.map +1 -0
  49. package/dist/gateway-capability-services.d.ts +10 -0
  50. package/dist/gateway-capability-services.d.ts.map +1 -0
  51. package/dist/gateway-capability-services.js +40 -0
  52. package/dist/gateway-capability-services.js.map +1 -0
  53. package/dist/gateway-cli-commands.d.ts +25 -0
  54. package/dist/gateway-cli-commands.d.ts.map +1 -0
  55. package/dist/gateway-cli-commands.js +202 -0
  56. package/dist/gateway-cli-commands.js.map +1 -0
  57. package/dist/gateway-command-runner.d.ts +48 -0
  58. package/dist/gateway-command-runner.d.ts.map +1 -0
  59. package/dist/gateway-command-runner.js +154 -0
  60. package/dist/gateway-command-runner.js.map +1 -0
  61. package/dist/gateway-control-plane.d.ts +44 -0
  62. package/dist/gateway-control-plane.d.ts.map +1 -0
  63. package/dist/gateway-control-plane.js +147 -0
  64. package/dist/gateway-control-plane.js.map +1 -0
  65. package/dist/gateway-daemon.d.ts +41 -0
  66. package/dist/gateway-daemon.d.ts.map +1 -0
  67. package/dist/gateway-daemon.js +69 -0
  68. package/dist/gateway-daemon.js.map +1 -0
  69. package/dist/gateway-doctor.d.ts +45 -0
  70. package/dist/gateway-doctor.d.ts.map +1 -0
  71. package/dist/gateway-doctor.js +81 -0
  72. package/dist/gateway-doctor.js.map +1 -0
  73. package/dist/gateway-execution-support.d.ts +56 -0
  74. package/dist/gateway-execution-support.d.ts.map +1 -0
  75. package/dist/gateway-execution-support.js +135 -0
  76. package/dist/gateway-execution-support.js.map +1 -0
  77. package/dist/gateway-job-controller.d.ts +68 -0
  78. package/dist/gateway-job-controller.d.ts.map +1 -0
  79. package/dist/gateway-job-controller.js +266 -0
  80. package/dist/gateway-job-controller.js.map +1 -0
  81. package/dist/gateway-job-handlers.d.ts +76 -0
  82. package/dist/gateway-job-handlers.d.ts.map +1 -0
  83. package/dist/gateway-job-handlers.js +235 -0
  84. package/dist/gateway-job-handlers.js.map +1 -0
  85. package/dist/gateway-job-processor.d.ts +24 -0
  86. package/dist/gateway-job-processor.d.ts.map +1 -0
  87. package/dist/gateway-job-processor.js +90 -0
  88. package/dist/gateway-job-processor.js.map +1 -0
  89. package/dist/gateway-job-store.d.ts +13 -0
  90. package/dist/gateway-job-store.d.ts.map +1 -0
  91. package/dist/gateway-job-store.js +106 -0
  92. package/dist/gateway-job-store.js.map +1 -0
  93. package/dist/gateway-jobs.d.ts +31 -0
  94. package/dist/gateway-jobs.d.ts.map +1 -0
  95. package/dist/gateway-jobs.js +52 -0
  96. package/dist/gateway-jobs.js.map +1 -0
  97. package/dist/gateway-lifecycle.d.ts +43 -0
  98. package/dist/gateway-lifecycle.d.ts.map +1 -0
  99. package/dist/gateway-lifecycle.js +62 -0
  100. package/dist/gateway-lifecycle.js.map +1 -0
  101. package/dist/gateway-local-runtime.d.ts +68 -0
  102. package/dist/gateway-local-runtime.d.ts.map +1 -0
  103. package/dist/gateway-local-runtime.js +208 -0
  104. package/dist/gateway-local-runtime.js.map +1 -0
  105. package/dist/gateway-model-run.d.ts +48 -0
  106. package/dist/gateway-model-run.d.ts.map +1 -0
  107. package/dist/gateway-model-run.js +205 -0
  108. package/dist/gateway-model-run.js.map +1 -0
  109. package/dist/gateway-operational-status.d.ts +1 -1
  110. package/dist/gateway-operational-status.d.ts.map +1 -1
  111. package/dist/gateway-operational-status.js +7 -14
  112. package/dist/gateway-operational-status.js.map +1 -1
  113. package/dist/gateway-pairing.d.ts +58 -0
  114. package/dist/gateway-pairing.d.ts.map +1 -0
  115. package/dist/gateway-pairing.js +151 -0
  116. package/dist/gateway-pairing.js.map +1 -0
  117. package/dist/gateway-provider-capabilities.d.ts +59 -0
  118. package/dist/gateway-provider-capabilities.d.ts.map +1 -0
  119. package/dist/gateway-provider-capabilities.js +231 -0
  120. package/dist/gateway-provider-capabilities.js.map +1 -0
  121. package/dist/gateway-provider-health.d.ts +19 -0
  122. package/dist/gateway-provider-health.d.ts.map +1 -0
  123. package/dist/gateway-provider-health.js +75 -0
  124. package/dist/gateway-provider-health.js.map +1 -0
  125. package/dist/gateway-provider-runtime.d.ts +72 -0
  126. package/dist/gateway-provider-runtime.d.ts.map +1 -0
  127. package/dist/gateway-provider-runtime.js +169 -0
  128. package/dist/gateway-provider-runtime.js.map +1 -0
  129. package/dist/gateway-restart.d.ts +8 -0
  130. package/dist/gateway-restart.d.ts.map +1 -0
  131. package/dist/gateway-restart.js +129 -0
  132. package/dist/gateway-restart.js.map +1 -0
  133. package/dist/gateway-run-helpers.d.ts +35 -0
  134. package/dist/gateway-run-helpers.d.ts.map +1 -0
  135. package/dist/gateway-run-helpers.js +203 -0
  136. package/dist/gateway-run-helpers.js.map +1 -0
  137. package/dist/gateway-runtime-provider-health.d.ts +31 -0
  138. package/dist/gateway-runtime-provider-health.d.ts.map +1 -0
  139. package/dist/gateway-runtime-provider-health.js +99 -0
  140. package/dist/gateway-runtime-provider-health.js.map +1 -0
  141. package/dist/gateway-runtime-state.d.ts +35 -0
  142. package/dist/gateway-runtime-state.d.ts.map +1 -0
  143. package/dist/gateway-runtime-state.js +18 -0
  144. package/dist/gateway-runtime-state.js.map +1 -0
  145. package/dist/gateway-shell-exec.d.ts +46 -0
  146. package/dist/gateway-shell-exec.d.ts.map +1 -0
  147. package/dist/gateway-shell-exec.js +130 -0
  148. package/dist/gateway-shell-exec.js.map +1 -0
  149. package/dist/gateway-start-command.d.ts +28 -0
  150. package/dist/gateway-start-command.d.ts.map +1 -0
  151. package/dist/gateway-start-command.js +101 -0
  152. package/dist/gateway-start-command.js.map +1 -0
  153. package/dist/gateway-state.d.ts +29 -0
  154. package/dist/gateway-state.d.ts.map +1 -0
  155. package/dist/gateway-state.js +97 -0
  156. package/dist/gateway-state.js.map +1 -0
  157. package/dist/gateway-subagent-run-finalizer.d.ts +27 -0
  158. package/dist/gateway-subagent-run-finalizer.d.ts.map +1 -0
  159. package/dist/gateway-subagent-run-finalizer.js +196 -0
  160. package/dist/gateway-subagent-run-finalizer.js.map +1 -0
  161. package/dist/gateway-subagent-run-job.d.ts +4 -0
  162. package/dist/gateway-subagent-run-job.d.ts.map +1 -0
  163. package/dist/gateway-subagent-run-job.js +430 -0
  164. package/dist/gateway-subagent-run-job.js.map +1 -0
  165. package/dist/gateway-subagent-run-target.d.ts +16 -0
  166. package/dist/gateway-subagent-run-target.d.ts.map +1 -0
  167. package/dist/gateway-subagent-run-target.js +239 -0
  168. package/dist/gateway-subagent-run-target.js.map +1 -0
  169. package/dist/gateway-subagent-run-types.d.ts +110 -0
  170. package/dist/gateway-subagent-run-types.d.ts.map +1 -0
  171. package/dist/gateway-subagent-run-types.js +2 -0
  172. package/dist/gateway-subagent-run-types.js.map +1 -0
  173. package/dist/index.js +11671 -5503
  174. package/dist/index.js.map +7 -1
  175. package/dist/local-runtime/heartbeat-supervisor.d.ts +39 -0
  176. package/dist/local-runtime/heartbeat-supervisor.d.ts.map +1 -0
  177. package/dist/local-runtime/heartbeat-supervisor.js +96 -0
  178. package/dist/local-runtime/heartbeat-supervisor.js.map +1 -0
  179. package/dist/local-runtime/restart-supervisor.d.ts +27 -0
  180. package/dist/local-runtime/restart-supervisor.d.ts.map +1 -0
  181. package/dist/local-runtime/restart-supervisor.js +169 -0
  182. package/dist/local-runtime/restart-supervisor.js.map +1 -0
  183. package/dist/local-runtime/runtime-utils.d.ts +20 -0
  184. package/dist/local-runtime/runtime-utils.d.ts.map +1 -0
  185. package/dist/local-runtime/runtime-utils.js +54 -0
  186. package/dist/local-runtime/runtime-utils.js.map +1 -0
  187. package/dist/local-runtime/shutdown-supervisor.d.ts +32 -0
  188. package/dist/local-runtime/shutdown-supervisor.d.ts.map +1 -0
  189. package/dist/local-runtime/shutdown-supervisor.js +110 -0
  190. package/dist/local-runtime/shutdown-supervisor.js.map +1 -0
  191. package/dist/local-runtime/types.d.ts +26 -0
  192. package/dist/local-runtime/types.d.ts.map +1 -0
  193. package/dist/local-runtime/types.js +2 -0
  194. package/dist/local-runtime/types.js.map +1 -0
  195. package/dist/managed-runtime/config.d.ts +20 -0
  196. package/dist/managed-runtime/config.d.ts.map +1 -0
  197. package/dist/managed-runtime/config.js +80 -0
  198. package/dist/managed-runtime/config.js.map +1 -0
  199. package/dist/managed-runtime/control-client.d.ts +66 -0
  200. package/dist/managed-runtime/control-client.d.ts.map +1 -0
  201. package/dist/managed-runtime/control-client.js +142 -0
  202. package/dist/managed-runtime/control-client.js.map +1 -0
  203. package/dist/managed-runtime/dependencies.d.ts +17 -0
  204. package/dist/managed-runtime/dependencies.d.ts.map +1 -0
  205. package/dist/managed-runtime/dependencies.js +28 -0
  206. package/dist/managed-runtime/dependencies.js.map +1 -0
  207. package/dist/managed-runtime/execution-dispatcher.d.ts +25 -0
  208. package/dist/managed-runtime/execution-dispatcher.d.ts.map +1 -0
  209. package/dist/managed-runtime/execution-dispatcher.js +155 -0
  210. package/dist/managed-runtime/execution-dispatcher.js.map +1 -0
  211. package/dist/managed-runtime/heartbeat.d.ts +7 -0
  212. package/dist/managed-runtime/heartbeat.d.ts.map +1 -0
  213. package/dist/managed-runtime/heartbeat.js +44 -0
  214. package/dist/managed-runtime/heartbeat.js.map +1 -0
  215. package/dist/managed-runtime/host-state.d.ts +15 -0
  216. package/dist/managed-runtime/host-state.d.ts.map +1 -0
  217. package/dist/managed-runtime/host-state.js +50 -0
  218. package/dist/managed-runtime/host-state.js.map +1 -0
  219. package/dist/managed-runtime/realtime.d.ts +25 -0
  220. package/dist/managed-runtime/realtime.d.ts.map +1 -0
  221. package/dist/managed-runtime/realtime.js +189 -0
  222. package/dist/managed-runtime/realtime.js.map +1 -0
  223. package/dist/managed-runtime/runtime-utils.d.ts +8 -0
  224. package/dist/managed-runtime/runtime-utils.d.ts.map +1 -0
  225. package/dist/managed-runtime/runtime-utils.js +39 -0
  226. package/dist/managed-runtime/runtime-utils.js.map +1 -0
  227. package/dist/managed-runtime/shell-execution.d.ts +33 -0
  228. package/dist/managed-runtime/shell-execution.d.ts.map +1 -0
  229. package/dist/managed-runtime/shell-execution.js +186 -0
  230. package/dist/managed-runtime/shell-execution.js.map +1 -0
  231. package/dist/managed-runtime/step-result.d.ts +22 -0
  232. package/dist/managed-runtime/step-result.d.ts.map +1 -0
  233. package/dist/managed-runtime/step-result.js +252 -0
  234. package/dist/managed-runtime/step-result.js.map +1 -0
  235. package/dist/managed-runtime/wake-signal.d.ts +5 -0
  236. package/dist/managed-runtime/wake-signal.d.ts.map +1 -0
  237. package/dist/managed-runtime/wake-signal.js +29 -0
  238. package/dist/managed-runtime/wake-signal.js.map +1 -0
  239. package/dist/managed-runtime.d.ts +8 -0
  240. package/dist/managed-runtime.d.ts.map +1 -0
  241. package/dist/managed-runtime.js +224 -0
  242. package/dist/managed-runtime.js.map +1 -0
  243. package/dist/{subagent-process-control.d.ts → process-control.d.ts} +1 -1
  244. package/dist/process-control.d.ts.map +1 -0
  245. package/dist/{subagent-process-control.js → process-control.js} +1 -1
  246. package/dist/process-control.js.map +1 -0
  247. package/dist/process-output-capture.d.ts +21 -0
  248. package/dist/process-output-capture.d.ts.map +1 -0
  249. package/dist/process-output-capture.js +47 -0
  250. package/dist/process-output-capture.js.map +1 -0
  251. package/dist/provider-runtime-utils.d.ts +24 -0
  252. package/dist/provider-runtime-utils.d.ts.map +1 -0
  253. package/dist/provider-runtime-utils.js +97 -0
  254. package/dist/provider-runtime-utils.js.map +1 -0
  255. package/dist/remote-shell-resource.d.ts +11 -0
  256. package/dist/remote-shell-resource.d.ts.map +1 -1
  257. package/dist/remote-shell-resource.js +66 -12
  258. package/dist/remote-shell-resource.js.map +1 -1
  259. package/dist/stream-json-collector.d.ts +1 -2
  260. package/dist/stream-json-collector.d.ts.map +1 -1
  261. package/dist/stream-json-collector.js +7 -18
  262. package/dist/stream-json-collector.js.map +1 -1
  263. package/dist/subagent-adapters/claude-code.d.ts.map +1 -1
  264. package/dist/subagent-adapters/claude-code.js +1 -5
  265. package/dist/subagent-adapters/claude-code.js.map +1 -1
  266. package/dist/subagent-adapters/codex.d.ts.map +1 -1
  267. package/dist/subagent-adapters/codex.js +5 -22
  268. package/dist/subagent-adapters/codex.js.map +1 -1
  269. package/dist/subagent-adapters/gemini.d.ts.map +1 -1
  270. package/dist/subagent-adapters/gemini.js +9 -56
  271. package/dist/subagent-adapters/gemini.js.map +1 -1
  272. package/dist/subagent-adapters/output-format.d.ts +3 -0
  273. package/dist/subagent-adapters/output-format.d.ts.map +1 -0
  274. package/dist/subagent-adapters/output-format.js +12 -0
  275. package/dist/subagent-adapters/output-format.js.map +1 -0
  276. package/dist/subagent-adapters/types.d.ts +4 -1
  277. package/dist/subagent-adapters/types.d.ts.map +1 -1
  278. package/dist/subagent-adapters/types.js.map +1 -1
  279. package/dist/subagent-cancel-job.d.ts +25 -0
  280. package/dist/subagent-cancel-job.d.ts.map +1 -0
  281. package/dist/subagent-cancel-job.js +295 -0
  282. package/dist/subagent-cancel-job.js.map +1 -0
  283. package/dist/subagent-failure.d.ts +11 -0
  284. package/dist/subagent-failure.d.ts.map +1 -0
  285. package/dist/subagent-failure.js +99 -0
  286. package/dist/subagent-failure.js.map +1 -0
  287. package/dist/subagent-full-control.d.ts.map +1 -1
  288. package/dist/subagent-full-control.js +7 -4
  289. package/dist/subagent-full-control.js.map +1 -1
  290. package/dist/subagent-output-persistence.d.ts +12 -0
  291. package/dist/subagent-output-persistence.d.ts.map +1 -0
  292. package/dist/subagent-output-persistence.js +15 -0
  293. package/dist/subagent-output-persistence.js.map +1 -0
  294. package/dist/subagent-run-events.d.ts +17 -0
  295. package/dist/subagent-run-events.d.ts.map +1 -0
  296. package/dist/subagent-run-events.js +60 -0
  297. package/dist/subagent-run-events.js.map +1 -0
  298. package/dist/subagent-run-execution.d.ts +39 -0
  299. package/dist/subagent-run-execution.d.ts.map +1 -0
  300. package/dist/subagent-run-execution.js +145 -0
  301. package/dist/subagent-run-execution.js.map +1 -0
  302. package/dist/subagent-run-helpers.d.ts +35 -0
  303. package/dist/subagent-run-helpers.d.ts.map +1 -0
  304. package/dist/subagent-run-helpers.js +88 -0
  305. package/dist/subagent-run-helpers.js.map +1 -0
  306. package/dist/subagent-run-job.d.ts +33 -0
  307. package/dist/subagent-run-job.d.ts.map +1 -0
  308. package/dist/subagent-run-job.js +74 -0
  309. package/dist/subagent-run-job.js.map +1 -0
  310. package/dist/subagent-run-store.d.ts +6 -0
  311. package/dist/subagent-run-store.d.ts.map +1 -0
  312. package/dist/subagent-run-store.js +22 -0
  313. package/dist/subagent-run-store.js.map +1 -0
  314. package/dist/subagent-shutdown-cancellation.d.ts +22 -0
  315. package/dist/subagent-shutdown-cancellation.d.ts.map +1 -0
  316. package/dist/subagent-shutdown-cancellation.js +127 -0
  317. package/dist/subagent-shutdown-cancellation.js.map +1 -0
  318. package/package.json +6 -3
  319. package/dist/subagent-process-control.d.ts.map +0 -1
  320. package/dist/subagent-process-control.js.map +0 -1
package/README.md CHANGED
@@ -1,6 +1,12 @@
1
1
  # Panorama Gateway
2
2
 
3
- Gateway service for connecting CLI capabilities on a host machine to a Panorama team. A team can pair multiple gateways from different machines; each gateway instance is identified by its own `gateway_id`.
3
+ Gateway service for connecting host-side runtime capabilities to Panorama.
4
+
5
+ In local mode, a team can pair multiple gateways from different machines; each
6
+ gateway instance is identified by its own `gateway_id`.
7
+
8
+ In managed mode, Panorama provisions the host and starts the gateway with scoped
9
+ managed-runtime credentials.
4
10
 
5
11
  ## Usage
6
12
 
@@ -30,6 +36,16 @@ Start this gateway and begin listening for jobs (foreground in dev, background f
30
36
  pnpm --filter @panorama-ai/gateway dev -- start
31
37
  ```
32
38
 
39
+ Run as a Panorama-managed host runtime:
40
+
41
+ ```bash
42
+ panorama-gateway start --mode managed
43
+ ```
44
+
45
+ Managed mode is only intended for Panorama-provisioned hosts with the managed
46
+ runtime environment contract described below. It is not a replacement for
47
+ locally paired user gateways.
48
+
33
49
  Force this gateway into the background (built binary only):
34
50
 
35
51
  ```bash
@@ -55,7 +71,8 @@ Check this gateway's status:
55
71
  pnpm --filter @panorama-ai/gateway dev -- status
56
72
  ```
57
73
 
58
- Manage install-level full-control on this host:
74
+ Manage host machine control on this host (the CLI command is still `full-control`
75
+ for compatibility):
59
76
 
60
77
  ```bash
61
78
  pnpm --filter @panorama-ai/gateway dev -- full-control status
@@ -75,6 +92,7 @@ Optional flags:
75
92
  - `--verbose`, `-v` (show technical details like paths, IDs, and PIDs)
76
93
  - `--env local|dev|test|stage|prod`
77
94
  - `--env-file /path/to/.env`
95
+ - `--mode local|managed` (`start` only; default `local`)
78
96
  - `--foreground` (run in the foreground)
79
97
  - `--daemon` (force background for built CLI)
80
98
  - `--config-dir /path/to/dir`
@@ -102,24 +120,108 @@ You can always point to a specific env file with `--env-file`.
102
120
 
103
121
  The gateway runs CLI providers using the current user environment (HOME, PATH, etc.) so it matches what you see when running the CLIs directly.
104
122
 
105
- ## Execution and Security Model
123
+ Managed mode is for Panorama-provisioned runtimes. It reads the managed Linux
124
+ host environment contract:
125
+
126
+ - `PANORAMA_AGENT_ID`
127
+ - `PANORAMA_LINUX_HOST_ID`
128
+ - `PANORAMA_LINUX_HOST_ATTEMPT_GENERATION`
129
+ - `PANORAMA_SUPABASE_URL`
130
+ - `PANORAMA_SUPABASE_ANON_KEY`
131
+ - `PANORAMA_LINUX_HOST_CONTROL_URL`
132
+ - `PANORAMA_LINUX_HOST_CONTROL_TOKEN`
133
+ - `PANORAMA_TOOL_EXECUTION_URL`
134
+ - `PANORAMA_TOOL_EXECUTION_TOKEN`
135
+ - `PANORAMA_MANAGED_RUNTIME_ID` (optional)
136
+ - `PANORAMA_MANAGED_RUNTIME_RETRY_BACKOFF_MS` (optional)
137
+ - `PANORAMA_MANAGED_RUNTIME_CONTROL_TIMEOUT_MS` (optional, default `30000`)
138
+ - `PANORAMA_MANAGED_RUNTIME_OUTPUT_CAPTURE_BYTES` (optional, default `5000000`)
139
+ - `PANORAMA_MANAGED_RUNTIME_HEARTBEAT_INTERVAL_MS` (optional)
140
+ - `PANORAMA_MANAGED_RUNTIME_MAX_CONSECUTIVE_HEARTBEAT_FAILURES` (optional)
141
+
142
+ ## Runtime Structure
143
+
144
+ The gateway package is published to NPM as a single CLI, but internally it has
145
+ separate runtime boundaries for local and managed execution.
146
+
147
+ Local runtime modules:
148
+
149
+ - `src/gateway-local-runtime.ts` owns local startup orchestration: paired
150
+ session loading, provider validation, job controller wiring, signal handling,
151
+ and lifecycle coordination.
152
+ - `src/local-runtime/heartbeat-supervisor.ts` owns local capability refreshes
153
+ and heartbeat reporting.
154
+ - `src/local-runtime/restart-supervisor.ts` owns package/probe watching and
155
+ drain-before-restart behavior.
156
+ - `src/local-runtime/shutdown-supervisor.ts` owns drain, termination, offline
157
+ heartbeat, and residual job cleanup behavior.
158
+
159
+ Managed runtime modules:
160
+
161
+ - `src/managed-runtime.ts` owns managed startup orchestration and dependency
162
+ wiring.
163
+ - `src/managed-runtime/control-client.ts` owns managed host-control HTTP calls.
164
+ - `src/managed-runtime/realtime.ts` owns Supabase session setup and wake-signal
165
+ subscription behavior.
166
+ - `src/managed-runtime/execution-dispatcher.ts` owns managed shell execution
167
+ dispatch, result capture, and completion reporting.
168
+ - `src/managed-runtime/heartbeat.ts`, `src/managed-runtime/host-state.ts`, and
169
+ `src/managed-runtime/wake-signal.ts` own managed heartbeat, host identity
170
+ derivation, and wake-signal parsing helpers.
171
+
172
+ Shared runtime helpers:
173
+
174
+ - `src/process-output-capture.ts` owns bounded stdout/stderr capture for shell
175
+ execution, provider streaming, and managed command execution.
176
+ - `src/provider-runtime-utils.ts` owns provider environment construction and
177
+ command/result parsing helpers used by CLI provider adapters.
178
+ - `src/subagent-adapters/output-format.ts` owns shared subagent output format
179
+ normalization.
180
+
181
+ The key split is not "VM versus non-VM"; it is which control surface drives the
182
+ host. Local mode is driven by a paired gateway session and user-delegated host
183
+ capabilities. Managed mode is driven by Panorama-scoped runtime credentials and
184
+ managed host control.
185
+
186
+ ## Execution Bridge and Trust Model
187
+
188
+ The gateway has two runtime modes:
189
+
190
+ - Local mode connects Panorama's control plane to a machine/account the team
191
+ controls.
192
+ - Managed mode connects Panorama's control plane to a Panorama-provisioned host
193
+ using scoped runtime credentials.
194
+
195
+ Local mode:
106
196
 
107
197
  - Gateway processes run as the logged-in user and are designed to behave like direct local CLI usage.
108
- - Provider child processes inherit user environment semantics, but gateway-internal secrets are scrubbed before launch.
109
- - Provider/runtime isolation relies on built-in provider controls (for example Codex read-only sandbox + tool flags), not heavyweight host isolation.
198
+ - Gateway hosts are a **user-delegated host** trust zone. Treat gateway access
199
+ as equivalent to local CLI access for that user account.
200
+ - Provider child processes inherit user environment semantics, but
201
+ gateway-internal secrets are scrubbed before launch.
202
+ - Provider-side execution controls rely on built-in provider flags (for example
203
+ Codex read-only sandbox + tool flags), not heavyweight host isolation.
110
204
  - Machine-control capabilities are layered:
111
- - install-level host toggle (`panorama-gateway full-control enable`)
112
- - team-level gateway toggle (Team Integrations UI / `set-gateway-full-control`)
205
+ - host machine-control toggle (`panorama-gateway full-control enable`)
206
+ - team-level gateway machine-control toggle (Team Integrations UI / `set-gateway-full-control`)
113
207
  - resource-level opt-in (`config.full_control=true` for gateway subagents, `metadata.full_control=true` for `remote_shell` resources)
114
208
  - Gateway state is stored locally under `~/.panorama/gateway` by default and includes pairing/session tokens needed for reconnects.
115
209
  - On POSIX platforms, gateway state directories/files are enforced as owner-only (`0700` for dirs, `0600` for files).
116
210
 
211
+ Managed mode:
212
+
213
+ - Gateway processes run as Panorama-managed runtime participants.
214
+ - Managed hosts use scoped control and tool execution tokens.
215
+ - Shell child processes receive the tool execution token, not the host control
216
+ token.
217
+ - Managed mode does not use paired-user gateway session material.
218
+
117
219
  Recommended deployment model:
118
220
 
119
221
  - Use a machine/account you control (for example a dedicated cloud VM user) for each gateway instance.
120
222
  - A team can pair multiple gateways (e.g. different developer machines, CI hosts, or VMs). Each gateway gets its own `gateway_id` and reports status independently.
121
223
  - Treat gateway host access as equivalent to local CLI access for that user account.
122
- - For Panorama-managed VM guest images, start from `packages/gateway/vm-template/Dockerfile` and keep the guest runtime scoped to its linked VM identity.
224
+ - For Panorama-managed VM guest images, start from `packages/gateway/vm-template/Dockerfile` and keep the guest gateway bridge scoped to its linked VM identity.
123
225
 
124
226
  If you hit a permission hardening error, fix ownership/permissions on the gateway state path and re-run `pair` or `start`.
125
227
 
@@ -145,11 +247,66 @@ Gateway currently handles:
145
247
 
146
248
  - `diagnostic` jobs for host/provider validation
147
249
  - `model_run` jobs for provider model execution
148
- - `subagent_run` and `subagent_cancel` jobs for delegated gateway subagents
149
- - `shell_session` jobs for remote shell sessions (`open`, `write`, `read`, `status`, `close`) via remote shell resources
250
+ - `subagent_run` and `subagent_cancel` jobs for delegated provider harnesses on
251
+ gateway hosts
252
+ - `shell_exec` jobs for remote shell execution via remote shell resources
150
253
 
151
254
  For JSON model runs, the worker prefers providers that support explicit output schema mode. JSON streaming support is optional and used as a compatibility path when schema mode is unavailable.
152
255
 
256
+ Existing capability names map to these product surfaces:
257
+
258
+ - `model_execution` means the gateway can run local Claude/Codex/Gemini model
259
+ calls and gateway subagents. Gateway subagents default to restricted provider
260
+ sandboxes unless `config.full_control=true` explicitly requests elevated
261
+ provider mode.
262
+ - `remote_shell` means the gateway can receive `shell_exec` jobs through a
263
+ `remote_shell` resource.
264
+ - `machine_control` means direct host-control authority is available for
265
+ elevated gateway subagents and remote shell command execution.
266
+ - `linux_agent_executions` is separate from gateway jobs; it is the
267
+ embodied/Linux-agent command-execution queue used by Linux-runtime agents.
268
+
269
+ Remote shell execution contract:
270
+
271
+ - `shell_exec` runs one foreground shell command through the host shell with
272
+ `-lc`.
273
+ - Commands start from `/`; callers must include `cd /path && ...` when they
274
+ want another working directory.
275
+ - The default timeout is 30 seconds and the maximum accepted timeout is 10
276
+ minutes.
277
+ - Stdout/stderr are returned inline with truncation flags. Remote shell exec
278
+ does not create overflow artifacts.
279
+ - The gateway does not track background processes after the foreground command
280
+ exits. Callers may start background work intentionally, but they must manage
281
+ it with later shell commands.
282
+
153
283
  ## CLI Provider Notes
154
284
 
155
285
  See `packages/gateway/CLI_PROVIDERS.md` for current findings on Claude Code, Codex CLI, and Gemini CLI usage patterns.
286
+
287
+ ## Packaging and Smoke Checks
288
+
289
+ The gateway is expected to remain publishable to NPM. The package publishes
290
+ only the built `dist` output and this README; source files are not part of the
291
+ runtime package.
292
+
293
+ Run these checks before shipping gateway runtime changes:
294
+
295
+ ```bash
296
+ pnpm --filter @panorama-ai/gateway test
297
+ pnpm --filter @panorama-ai/gateway build
298
+ pnpm --filter @panorama-ai/gateway verify:packaged-cli
299
+ ```
300
+
301
+ Use targeted smoke tests when changing one runtime surface:
302
+
303
+ ```bash
304
+ pnpm --filter @panorama-ai/gateway exec tsx --test test/gateway-start-command.test.ts test/gateway-local-runtime.test.ts test/local-runtime-heartbeat-supervisor.test.ts test/local-runtime-restart-supervisor.test.ts test/local-runtime-shutdown-supervisor.test.ts
305
+ pnpm --filter @panorama-ai/gateway exec tsx --test test/managed-runtime.test.ts test/managed-runtime-helpers.test.ts
306
+ ```
307
+
308
+ `panorama-gateway start` requires paired local gateway state. `panorama-gateway
309
+ start --mode managed` requires Panorama-managed runtime credentials. Prefer the
310
+ packaged CLI check plus targeted runtime tests for local development smoke
311
+ validation unless you are intentionally testing against a live paired gateway or
312
+ managed host.
@@ -1 +1 @@
1
- {"version":3,"file":"child-process-env.d.ts","sourceRoot":"","sources":["../src/child-process-env.ts"],"names":[],"mappings":"AAoBA,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAI5D;AAED,wBAAgB,uBAAuB,CACrC,OAAO,GAAE,MAAM,CAAC,UAAwB,GACvC,MAAM,CAAC,UAAU,CAQnB;AAED,wBAAgB,2BAA2B,CAAC,MAAM,CAAC,EAAE;IACnD,OAAO,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;CAC9B,GAAG,MAAM,CAAC,UAAU,CAoBpB"}
1
+ {"version":3,"file":"child-process-env.d.ts","sourceRoot":"","sources":["../src/child-process-env.ts"],"names":[],"mappings":"AAqBA,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAI5D;AAED,wBAAgB,uBAAuB,CACrC,OAAO,GAAE,MAAM,CAAC,UAAwB,GACvC,MAAM,CAAC,UAAU,CAQnB;AAED,wBAAgB,2BAA2B,CAAC,MAAM,CAAC,EAAE;IACnD,OAAO,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;CAC9B,GAAG,MAAM,CAAC,UAAU,CAoBpB"}
@@ -6,6 +6,7 @@ const GATEWAY_CHILD_ENV_BLOCKED_KEYS = new Set([
6
6
  'SUPABASE_ANON_KEY',
7
7
  'SUPABASE_PUBLISHABLE_KEY',
8
8
  'SUPABASE_SERVICE_ROLE_KEY',
9
+ 'SUPABASE_SECRET_KEY',
9
10
  'PANORAMA_SUPABASE_URL',
10
11
  'PANORAMA_SUPABASE_ANON_KEY',
11
12
  'PANORAMA_ENV',
@@ -1 +1 @@
1
- {"version":3,"file":"child-process-env.js","sourceRoot":"","sources":["../src/child-process-env.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,cAAc,CAAA;AAElC,MAAM,8BAA8B,GAAG,IAAI,GAAG,CAAC;IAC7C,cAAc;IACd,kBAAkB;IAClB,cAAc;IACd,mBAAmB;IACnB,0BAA0B;IAC1B,2BAA2B;IAC3B,uBAAuB;IACvB,4BAA4B;IAC5B,cAAc;IACd,mBAAmB;IACnB,mBAAmB;IACnB,oBAAoB;IACpB,sBAAsB;CACvB,CAAC,CAAA;AAEF,MAAM,kCAAkC,GAAG,CAAC,mBAAmB,CAAC,CAAA;AAEhE,MAAM,UAAU,uBAAuB,CAAC,GAAW;IACjD,IAAI,CAAC,GAAG;QAAE,OAAO,KAAK,CAAA;IACtB,IAAI,8BAA8B,CAAC,GAAG,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAA;IACxD,OAAO,kCAAkC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAA;AACpF,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,UAA6B,OAAO,CAAC,GAAG;IAExC,MAAM,GAAG,GAAsB,EAAE,CAAA;IACjC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACnD,IAAI,KAAK,KAAK,SAAS;YAAE,SAAQ;QACjC,IAAI,uBAAuB,CAAC,GAAG,CAAC;YAAE,SAAQ;QAC1C,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;IAClB,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,MAI3C;IACC,MAAM,OAAO,GAAG,MAAM,EAAE,OAAO,IAAI,OAAO,CAAC,GAAG,CAAA;IAC9C,MAAM,GAAG,GAAG,uBAAuB,CAAC,OAAO,CAAC,CAAA;IAC5C,MAAM,MAAM,GAAG,MAAM,EAAE,MAAM,CAAA;IAC7B,IAAI,MAAM,EAAE,CAAC;QACX,GAAG,CAAC,MAAM,GAAG,MAAM,CAAA;QACnB,GAAG,CAAC,GAAG,GAAG,MAAM,CAAA;QAChB,GAAG,CAAC,IAAI,GAAG,MAAM,CAAA;IACnB,CAAC;IACD,MAAM,SAAS,GAAG,MAAM,EAAE,SAAS,CAAA;IACnC,IAAI,SAAS,EAAE,CAAC;QACd,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YACrD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,OAAO,GAAG,CAAC,GAAG,CAAC,CAAA;YACjB,CAAC;iBAAM,CAAC;gBACN,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;YAClB,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC"}
1
+ {"version":3,"file":"child-process-env.js","sourceRoot":"","sources":["../src/child-process-env.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,cAAc,CAAA;AAElC,MAAM,8BAA8B,GAAG,IAAI,GAAG,CAAC;IAC7C,cAAc;IACd,kBAAkB;IAClB,cAAc;IACd,mBAAmB;IACnB,0BAA0B;IAC1B,2BAA2B;IAC3B,qBAAqB;IACrB,uBAAuB;IACvB,4BAA4B;IAC5B,cAAc;IACd,mBAAmB;IACnB,mBAAmB;IACnB,oBAAoB;IACpB,sBAAsB;CACvB,CAAC,CAAA;AAEF,MAAM,kCAAkC,GAAG,CAAC,mBAAmB,CAAC,CAAA;AAEhE,MAAM,UAAU,uBAAuB,CAAC,GAAW;IACjD,IAAI,CAAC,GAAG;QAAE,OAAO,KAAK,CAAA;IACtB,IAAI,8BAA8B,CAAC,GAAG,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAA;IACxD,OAAO,kCAAkC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAA;AACpF,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,UAA6B,OAAO,CAAC,GAAG;IAExC,MAAM,GAAG,GAAsB,EAAE,CAAA;IACjC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACnD,IAAI,KAAK,KAAK,SAAS;YAAE,SAAQ;QACjC,IAAI,uBAAuB,CAAC,GAAG,CAAC;YAAE,SAAQ;QAC1C,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;IAClB,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,MAI3C;IACC,MAAM,OAAO,GAAG,MAAM,EAAE,OAAO,IAAI,OAAO,CAAC,GAAG,CAAA;IAC9C,MAAM,GAAG,GAAG,uBAAuB,CAAC,OAAO,CAAC,CAAA;IAC5C,MAAM,MAAM,GAAG,MAAM,EAAE,MAAM,CAAA;IAC7B,IAAI,MAAM,EAAE,CAAC;QACX,GAAG,CAAC,MAAM,GAAG,MAAM,CAAA;QACnB,GAAG,CAAC,GAAG,GAAG,MAAM,CAAA;QAChB,GAAG,CAAC,IAAI,GAAG,MAAM,CAAA;IACnB,CAAC;IACD,MAAM,SAAS,GAAG,MAAM,EAAE,SAAS,CAAA;IACnC,IAAI,SAAS,EAAE,CAAC;QACd,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YACrD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,OAAO,GAAG,CAAC,GAAG,CAAC,CAAA;YACjB,CAAC;iBAAM,CAAC;gBACN,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;YAClB,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC"}
@@ -0,0 +1,11 @@
1
+ export interface ParsedArgs {
2
+ command: string | null;
3
+ positional: string[];
4
+ options: Record<string, string | boolean>;
5
+ }
6
+ export type GatewayRuntimeMode = 'local' | 'managed';
7
+ export declare function parseArgs(argv: string[]): ParsedArgs;
8
+ export declare function getStringOption(options: ParsedArgs['options'], key: string): string | undefined;
9
+ export declare function resolveGatewayRuntimeMode(options: ParsedArgs['options'], env?: NodeJS.ProcessEnv): GatewayRuntimeMode;
10
+ export declare function parseBooleanInput(value: unknown): boolean | null;
11
+ //# sourceMappingURL=cli-args.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-args.d.ts","sourceRoot":"","sources":["../src/cli-args.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAA;CAC1C;AAED,MAAM,MAAM,kBAAkB,GAAG,OAAO,GAAG,SAAS,CAAA;AAEpD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CAyCpD;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,UAAU,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAI/F;AAED,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,UAAU,CAAC,SAAS,CAAC,EAC9B,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,kBAAkB,CAOpB;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,GAAG,IAAI,CAsBhE"}
@@ -0,0 +1,72 @@
1
+ export function parseArgs(argv) {
2
+ const normalizedArgv = argv[0] === '--' ? argv.slice(1) : argv;
3
+ const positional = [];
4
+ const options = {};
5
+ for (let i = 0; i < normalizedArgv.length; i += 1) {
6
+ const arg = normalizedArgv[i];
7
+ if (!arg)
8
+ continue;
9
+ if (arg === '--') {
10
+ positional.push(...normalizedArgv.slice(i + 1));
11
+ break;
12
+ }
13
+ if (arg.startsWith('--')) {
14
+ const [flag, inlineValue] = arg.slice(2).split('=');
15
+ if (inlineValue !== undefined) {
16
+ options[flag] = inlineValue;
17
+ continue;
18
+ }
19
+ const next = normalizedArgv[i + 1];
20
+ if (next && !next.startsWith('--')) {
21
+ options[flag] = next;
22
+ i += 1;
23
+ }
24
+ else {
25
+ options[flag] = true;
26
+ }
27
+ continue;
28
+ }
29
+ if (arg.startsWith('-') && arg.length > 1) {
30
+ options[arg.slice(1)] = true;
31
+ continue;
32
+ }
33
+ positional.push(arg);
34
+ }
35
+ const command = positional.shift() ?? null;
36
+ return { command, positional, options };
37
+ }
38
+ export function getStringOption(options, key) {
39
+ const value = options[key];
40
+ if (typeof value === 'string')
41
+ return value;
42
+ return undefined;
43
+ }
44
+ export function resolveGatewayRuntimeMode(options, env = process.env) {
45
+ const rawMode = getStringOption(options, 'mode') || env.PANORAMA_GATEWAY_MODE || 'local';
46
+ const mode = rawMode.trim().toLowerCase();
47
+ if (mode === 'local' || mode === 'managed') {
48
+ return mode;
49
+ }
50
+ throw new Error(`Unsupported gateway mode: ${rawMode}`);
51
+ }
52
+ export function parseBooleanInput(value) {
53
+ if (typeof value === 'boolean')
54
+ return value;
55
+ if (typeof value === 'string') {
56
+ const normalized = value.trim().toLowerCase();
57
+ if (normalized === 'true' ||
58
+ normalized === '1' ||
59
+ normalized === 'yes' ||
60
+ normalized === 'on') {
61
+ return true;
62
+ }
63
+ if (normalized === 'false' ||
64
+ normalized === '0' ||
65
+ normalized === 'no' ||
66
+ normalized === 'off') {
67
+ return false;
68
+ }
69
+ }
70
+ return null;
71
+ }
72
+ //# sourceMappingURL=cli-args.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-args.js","sourceRoot":"","sources":["../src/cli-args.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ export interface CommandDiscoveryOptions {
2
+ env?: NodeJS.ProcessEnv;
3
+ homeDir?: string;
4
+ platform?: NodeJS.Platform;
5
+ maxClaudeWrapperBytes?: number;
6
+ }
7
+ export declare function expandHomePath(value: string, homeDir?: string): string;
8
+ export declare function extractClaudeWrapperTarget(commandPath: string, options?: CommandDiscoveryOptions): string | null;
9
+ export declare function isBrokenClaudeWrapper(commandPath: string, options?: CommandDiscoveryOptions): boolean;
10
+ export declare function isExecutableCandidate(candidate: string, platform?: NodeJS.Platform): boolean;
11
+ export declare function collectBinDirs(options?: CommandDiscoveryOptions): string[];
12
+ export declare function expandCommandExtensions(command: string, options?: Pick<CommandDiscoveryOptions, 'env' | 'platform'>): string[];
13
+ export declare function collectCommandCandidates(command: string, extraCandidates: string[], options?: CommandDiscoveryOptions): string[];
14
+ export declare function resolveClaudeFallbackCommand(commandPath: string, options?: CommandDiscoveryOptions): string | null;
15
+ export declare function extractVersion(text: string): string | null;
16
+ export declare function compareVersions(a: string, b: string): number;
17
+ //# sourceMappingURL=cli-command-discovery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-command-discovery.d.ts","sourceRoot":"","sources":["../src/cli-command-discovery.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,uBAAuB;IACtC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;IACvB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAA;IAC1B,qBAAqB,CAAC,EAAE,MAAM,CAAA;CAC/B;AAWD,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,MAAqB,GAAG,MAAM,CAKpF;AAED,wBAAgB,0BAA0B,CACxC,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,uBAA4B,GACpC,MAAM,GAAG,IAAI,CAaf;AAED,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAQT;AAED,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,MAAM,EACjB,QAAQ,GAAE,MAAM,CAAC,QAA2B,GAC3C,OAAO,CAUT;AAED,wBAAgB,cAAc,CAAC,OAAO,GAAE,uBAA4B,GAAG,MAAM,EAAE,CAyD9E;AAED,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,IAAI,CAAC,uBAAuB,EAAE,KAAK,GAAG,UAAU,CAAM,GAC9D,MAAM,EAAE,CASV;AAED,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,MAAM,EACf,eAAe,EAAE,MAAM,EAAE,EACzB,OAAO,GAAE,uBAA4B,GACpC,MAAM,EAAE,CA0BV;AAED,wBAAgB,4BAA4B,CAC1C,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,uBAA4B,GACpC,MAAM,GAAG,IAAI,CAiCf;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQ1D;AAED,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CA4B5D"}
@@ -0,0 +1,229 @@
1
+ import fsSync from 'node:fs';
2
+ import os from 'node:os';
3
+ import path from 'node:path';
4
+ const DEFAULT_MAX_CLAUDE_WRAPPER_BYTES = 4096;
5
+ function resolveOptions(options = {}) {
6
+ return {
7
+ env: options.env ?? process.env,
8
+ homeDir: options.homeDir ?? os.homedir(),
9
+ platform: options.platform ?? process.platform,
10
+ maxClaudeWrapperBytes: options.maxClaudeWrapperBytes ?? DEFAULT_MAX_CLAUDE_WRAPPER_BYTES,
11
+ };
12
+ }
13
+ export function expandHomePath(value, homeDir = os.homedir()) {
14
+ if (value.startsWith('~/')) {
15
+ return path.join(homeDir, value.slice(2));
16
+ }
17
+ return value;
18
+ }
19
+ export function extractClaudeWrapperTarget(commandPath, options = {}) {
20
+ const { homeDir, maxClaudeWrapperBytes } = resolveOptions(options);
21
+ try {
22
+ const stat = fsSync.statSync(commandPath);
23
+ if (!stat.isFile() || stat.size > maxClaudeWrapperBytes)
24
+ return null;
25
+ const raw = fsSync.readFileSync(commandPath, 'utf8');
26
+ const match = raw.match(/exec\s+(?:"([^"]+)"|'([^']+)'|([^\s]+))/);
27
+ const target = match?.[1] ?? match?.[2] ?? match?.[3];
28
+ if (!target)
29
+ return null;
30
+ return expandHomePath(target, homeDir);
31
+ }
32
+ catch {
33
+ return null;
34
+ }
35
+ }
36
+ export function isBrokenClaudeWrapper(commandPath, options = {}) {
37
+ const target = extractClaudeWrapperTarget(commandPath, options);
38
+ if (!target)
39
+ return false;
40
+ try {
41
+ return !fsSync.existsSync(target);
42
+ }
43
+ catch {
44
+ return false;
45
+ }
46
+ }
47
+ export function isExecutableCandidate(candidate, platform = process.platform) {
48
+ try {
49
+ const stat = fsSync.statSync(candidate);
50
+ if (!stat.isFile())
51
+ return false;
52
+ if (platform === 'win32')
53
+ return true;
54
+ fsSync.accessSync(candidate, fsSync.constants.X_OK);
55
+ return true;
56
+ }
57
+ catch {
58
+ return false;
59
+ }
60
+ }
61
+ export function collectBinDirs(options = {}) {
62
+ const { env, homeDir, platform } = resolveOptions(options);
63
+ const dirs = new Set();
64
+ const addDir = (dir) => {
65
+ if (!dir)
66
+ return;
67
+ const resolved = expandHomePath(dir, homeDir);
68
+ if (!resolved)
69
+ return;
70
+ dirs.add(path.resolve(resolved));
71
+ };
72
+ const addPrefixBin = (prefix) => {
73
+ if (!prefix)
74
+ return;
75
+ const resolved = expandHomePath(prefix, homeDir);
76
+ if (!resolved)
77
+ return;
78
+ dirs.add(path.resolve(resolved, 'bin'));
79
+ };
80
+ addDir(env.PNPM_HOME);
81
+ addPrefixBin(env.NPM_CONFIG_PREFIX);
82
+ addPrefixBin(env.npm_config_prefix);
83
+ addDir(env.VOLTA_HOME ? path.join(env.VOLTA_HOME, 'bin') : null);
84
+ addDir(env.BUN_INSTALL ? path.join(env.BUN_INSTALL, 'bin') : null);
85
+ addPrefixBin(env.HOMEBREW_PREFIX);
86
+ addPrefixBin(env.BREW_PREFIX);
87
+ if (env.ASDF_DATA_DIR) {
88
+ addDir(path.join(env.ASDF_DATA_DIR, 'shims'));
89
+ }
90
+ if (platform === 'darwin') {
91
+ addDir('/opt/homebrew/bin');
92
+ addDir('/usr/local/bin');
93
+ addDir(path.join(homeDir, 'Library', 'pnpm'));
94
+ }
95
+ if (platform !== 'win32') {
96
+ addDir('/usr/local/bin');
97
+ addDir('/usr/bin');
98
+ addDir('/bin');
99
+ addDir(path.join(homeDir, '.local', 'bin'));
100
+ addDir(path.join(homeDir, 'bin'));
101
+ addDir(path.join(homeDir, '.npm-global', 'bin'));
102
+ addDir(path.join(homeDir, '.nvm', 'versions', 'node', 'current', 'bin'));
103
+ addDir(path.join(homeDir, '.asdf', 'shims'));
104
+ addDir(path.join(homeDir, '.nix-profile', 'bin'));
105
+ }
106
+ const pathDelimiter = platform === 'win32' ? ';' : ':';
107
+ const pathEntries = (env.PATH ?? '')
108
+ .split(pathDelimiter)
109
+ .map((entry) => entry.trim())
110
+ .filter(Boolean);
111
+ for (const entry of pathEntries) {
112
+ addDir(entry);
113
+ }
114
+ return Array.from(dirs);
115
+ }
116
+ export function expandCommandExtensions(command, options = {}) {
117
+ const env = options.env ?? process.env;
118
+ const platform = options.platform ?? process.platform;
119
+ if (platform !== 'win32')
120
+ return [command];
121
+ const extList = (env.PATHEXT ?? '.EXE;.CMD;.BAT')
122
+ .split(';')
123
+ .map((entry) => entry.trim())
124
+ .filter(Boolean);
125
+ return extList.map((ext) => `${command}${ext.toLowerCase()}`);
126
+ }
127
+ export function collectCommandCandidates(command, extraCandidates, options = {}) {
128
+ const resolvedOptions = resolveOptions(options);
129
+ const candidates = new Set();
130
+ const addCandidate = (value) => {
131
+ if (!value)
132
+ return;
133
+ const resolved = expandHomePath(value, resolvedOptions.homeDir);
134
+ candidates.add(resolved);
135
+ };
136
+ extraCandidates.forEach(addCandidate);
137
+ const binDirs = collectBinDirs(resolvedOptions);
138
+ const extensions = expandCommandExtensions(command, resolvedOptions);
139
+ for (const dir of binDirs) {
140
+ for (const extCommand of extensions) {
141
+ const candidate = path.join(dir, extCommand);
142
+ if (isExecutableCandidate(candidate, resolvedOptions.platform)) {
143
+ candidates.add(candidate);
144
+ }
145
+ }
146
+ }
147
+ candidates.add(command);
148
+ return Array.from(candidates);
149
+ }
150
+ export function resolveClaudeFallbackCommand(commandPath, options = {}) {
151
+ const resolvedOptions = resolveOptions(options);
152
+ if (!isBrokenClaudeWrapper(commandPath, resolvedOptions))
153
+ return null;
154
+ const excluded = new Set();
155
+ const addExcluded = (value) => {
156
+ if (!value)
157
+ return;
158
+ excluded.add(path.resolve(value));
159
+ try {
160
+ excluded.add(fsSync.realpathSync(value));
161
+ }
162
+ catch {
163
+ // ignore realpath errors
164
+ }
165
+ };
166
+ addExcluded(commandPath);
167
+ const candidates = [path.join(resolvedOptions.homeDir, '.claude', 'claude')];
168
+ for (const candidate of candidates) {
169
+ if (excluded.has(path.resolve(candidate)))
170
+ continue;
171
+ if (isExecutableCandidate(candidate, resolvedOptions.platform))
172
+ return candidate;
173
+ }
174
+ const extensions = expandCommandExtensions('claude', resolvedOptions);
175
+ for (const dir of collectBinDirs(resolvedOptions)) {
176
+ for (const extCommand of extensions) {
177
+ const candidate = path.join(dir, extCommand);
178
+ if (excluded.has(path.resolve(candidate)))
179
+ continue;
180
+ if (isExecutableCandidate(candidate, resolvedOptions.platform))
181
+ return candidate;
182
+ }
183
+ }
184
+ return null;
185
+ }
186
+ export function extractVersion(text) {
187
+ const normalized = text.trim();
188
+ if (!normalized)
189
+ return null;
190
+ const match = normalized.match(/v?(\d+\.\d+\.\d+(?:[-+][0-9A-Za-z.-]+)?)/);
191
+ if (match?.[1])
192
+ return match[1];
193
+ const fallback = normalized.match(/v?(\d+\.\d+)/);
194
+ if (fallback?.[1])
195
+ return `${fallback[1]}.0`;
196
+ return null;
197
+ }
198
+ export function compareVersions(a, b) {
199
+ const parse = (value) => {
200
+ const cleaned = value.replace(/^v/i, '');
201
+ const [main, pre] = cleaned.split('-', 2);
202
+ const parts = main.split('.').map((part) => Number.parseInt(part, 10));
203
+ if (parts.some((part) => Number.isNaN(part)))
204
+ return null;
205
+ return { parts, pre: pre ?? null };
206
+ };
207
+ const parsedA = parse(a);
208
+ const parsedB = parse(b);
209
+ if (!parsedA || !parsedB)
210
+ return 0;
211
+ const length = Math.max(parsedA.parts.length, parsedB.parts.length);
212
+ for (let i = 0; i < length; i += 1) {
213
+ const left = parsedA.parts[i] ?? 0;
214
+ const right = parsedB.parts[i] ?? 0;
215
+ if (left !== right)
216
+ return left > right ? 1 : -1;
217
+ }
218
+ if (parsedA.pre && !parsedB.pre)
219
+ return -1;
220
+ if (!parsedA.pre && parsedB.pre)
221
+ return 1;
222
+ if (parsedA.pre && parsedB.pre) {
223
+ if (parsedA.pre === parsedB.pre)
224
+ return 0;
225
+ return parsedA.pre > parsedB.pre ? 1 : -1;
226
+ }
227
+ return 0;
228
+ }
229
+ //# sourceMappingURL=cli-command-discovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-command-discovery.js","sourceRoot":"","sources":["../src/cli-command-discovery.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { type ParsedArgs } from './cli-args.js';
2
+ export declare function applyOptionEnvOverrides(options: ParsedArgs['options'], env?: NodeJS.ProcessEnv): void;
3
+ export declare function buildGatewayEnvOverrides(options: ParsedArgs['options']): NodeJS.ProcessEnv;
4
+ export declare function normalizeEnvName(raw: string | undefined): string | null;
5
+ export declare function parseBooleanEnv(value: string | undefined, fallback: boolean): boolean;
6
+ export declare function parseNumberEnv(value: string | undefined, fallback: number): number;
7
+ //# sourceMappingURL=cli-env.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-env.d.ts","sourceRoot":"","sources":["../src/cli-env.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,KAAK,UAAU,EAAE,MAAM,eAAe,CAAA;AAIhE,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,UAAU,CAAC,SAAS,CAAC,EAC9B,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,IAAI,CAaN;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,UAAU,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,UAAU,CAuB1F;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAQvE;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,CAUrF;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAKlF"}