@aria-cli/tools 1.0.12 → 1.0.13

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 (576) hide show
  1. package/dist/ask-user-interaction.d.ts +1 -0
  2. package/dist/ask-user-interaction.d.ts.map +1 -0
  3. package/dist/ask-user-interaction.js +1 -0
  4. package/dist/ask-user-interaction.js.map +1 -0
  5. package/dist/cache/web-cache.d.ts +1 -0
  6. package/dist/cache/web-cache.d.ts.map +1 -0
  7. package/dist/cache/web-cache.js +1 -0
  8. package/dist/cache/web-cache.js.map +1 -0
  9. package/dist/definitions/arion.d.ts +1 -0
  10. package/dist/definitions/arion.d.ts.map +1 -0
  11. package/dist/definitions/arion.js +1 -0
  12. package/dist/definitions/arion.js.map +1 -0
  13. package/dist/definitions/browser/browser.d.ts +1 -0
  14. package/dist/definitions/browser/browser.d.ts.map +1 -0
  15. package/dist/definitions/browser/browser.js +1 -0
  16. package/dist/definitions/browser/browser.js.map +1 -0
  17. package/dist/definitions/browser/index.d.ts +1 -0
  18. package/dist/definitions/browser/index.d.ts.map +1 -0
  19. package/dist/definitions/browser/index.js +1 -0
  20. package/dist/definitions/browser/index.js.map +1 -0
  21. package/dist/definitions/browser/pw-downloads.d.ts +1 -0
  22. package/dist/definitions/browser/pw-downloads.d.ts.map +1 -0
  23. package/dist/definitions/browser/pw-downloads.js +1 -0
  24. package/dist/definitions/browser/pw-downloads.js.map +1 -0
  25. package/dist/definitions/browser/pw-interactions.d.ts +1 -0
  26. package/dist/definitions/browser/pw-interactions.d.ts.map +1 -0
  27. package/dist/definitions/browser/pw-interactions.js +1 -0
  28. package/dist/definitions/browser/pw-interactions.js.map +1 -0
  29. package/dist/definitions/browser/pw-responses.d.ts +1 -0
  30. package/dist/definitions/browser/pw-responses.d.ts.map +1 -0
  31. package/dist/definitions/browser/pw-responses.js +1 -0
  32. package/dist/definitions/browser/pw-responses.js.map +1 -0
  33. package/dist/definitions/browser/pw-session.d.ts +1 -0
  34. package/dist/definitions/browser/pw-session.d.ts.map +1 -0
  35. package/dist/definitions/browser/pw-session.js +1 -0
  36. package/dist/definitions/browser/pw-session.js.map +1 -0
  37. package/dist/definitions/browser/pw-shared.d.ts +1 -0
  38. package/dist/definitions/browser/pw-shared.d.ts.map +1 -0
  39. package/dist/definitions/browser/pw-shared.js +1 -0
  40. package/dist/definitions/browser/pw-shared.js.map +1 -0
  41. package/dist/definitions/browser/pw-snapshot.d.ts +1 -0
  42. package/dist/definitions/browser/pw-snapshot.d.ts.map +1 -0
  43. package/dist/definitions/browser/pw-snapshot.js +1 -0
  44. package/dist/definitions/browser/pw-snapshot.js.map +1 -0
  45. package/dist/definitions/browser/pw-state.d.ts +1 -0
  46. package/dist/definitions/browser/pw-state.d.ts.map +1 -0
  47. package/dist/definitions/browser/pw-state.js +1 -0
  48. package/dist/definitions/browser/pw-state.js.map +1 -0
  49. package/dist/definitions/browser/types.d.ts +1 -0
  50. package/dist/definitions/browser/types.d.ts.map +1 -0
  51. package/dist/definitions/browser/types.js +1 -0
  52. package/dist/definitions/browser/types.js.map +1 -0
  53. package/dist/definitions/code-intelligence.d.ts +1 -0
  54. package/dist/definitions/code-intelligence.d.ts.map +1 -0
  55. package/dist/definitions/code-intelligence.js +1 -0
  56. package/dist/definitions/code-intelligence.js.map +1 -0
  57. package/dist/definitions/core.d.ts +1 -0
  58. package/dist/definitions/core.d.ts.map +1 -0
  59. package/dist/definitions/core.js +1 -0
  60. package/dist/definitions/core.js.map +1 -0
  61. package/dist/definitions/delegation.d.ts +1 -0
  62. package/dist/definitions/delegation.d.ts.map +1 -0
  63. package/dist/definitions/delegation.js +1 -0
  64. package/dist/definitions/delegation.js.map +1 -0
  65. package/dist/definitions/deploy.d.ts +1 -0
  66. package/dist/definitions/deploy.d.ts.map +1 -0
  67. package/dist/definitions/deploy.js +1 -0
  68. package/dist/definitions/deploy.js.map +1 -0
  69. package/dist/definitions/filesystem.d.ts +1 -0
  70. package/dist/definitions/filesystem.d.ts.map +1 -0
  71. package/dist/definitions/filesystem.js +1 -0
  72. package/dist/definitions/filesystem.js.map +1 -0
  73. package/dist/definitions/frg.d.ts +1 -0
  74. package/dist/definitions/frg.d.ts.map +1 -0
  75. package/dist/definitions/frg.js +1 -0
  76. package/dist/definitions/frg.js.map +1 -0
  77. package/dist/definitions/index.d.ts +1 -0
  78. package/dist/definitions/index.d.ts.map +1 -0
  79. package/dist/definitions/index.js +1 -0
  80. package/dist/definitions/index.js.map +1 -0
  81. package/dist/definitions/memory.d.ts +1 -0
  82. package/dist/definitions/memory.d.ts.map +1 -0
  83. package/dist/definitions/memory.js +1 -0
  84. package/dist/definitions/memory.js.map +1 -0
  85. package/dist/definitions/messaging.d.ts +1 -0
  86. package/dist/definitions/messaging.d.ts.map +1 -0
  87. package/dist/definitions/messaging.js +1 -0
  88. package/dist/definitions/messaging.js.map +1 -0
  89. package/dist/definitions/meta.d.ts +1 -0
  90. package/dist/definitions/meta.d.ts.map +1 -0
  91. package/dist/definitions/meta.js +1 -0
  92. package/dist/definitions/meta.js.map +1 -0
  93. package/dist/definitions/network.d.ts +1 -0
  94. package/dist/definitions/network.d.ts.map +1 -0
  95. package/dist/definitions/network.js +1 -0
  96. package/dist/definitions/network.js.map +1 -0
  97. package/dist/definitions/outlook.d.ts +1 -0
  98. package/dist/definitions/outlook.d.ts.map +1 -0
  99. package/dist/definitions/outlook.js +1 -0
  100. package/dist/definitions/outlook.js.map +1 -0
  101. package/dist/definitions/patch/apply-patch.d.ts +1 -0
  102. package/dist/definitions/patch/apply-patch.d.ts.map +1 -0
  103. package/dist/definitions/patch/apply-patch.js +1 -0
  104. package/dist/definitions/patch/apply-patch.js.map +1 -0
  105. package/dist/definitions/patch/fuzzy-match.d.ts +1 -0
  106. package/dist/definitions/patch/fuzzy-match.d.ts.map +1 -0
  107. package/dist/definitions/patch/fuzzy-match.js +1 -0
  108. package/dist/definitions/patch/fuzzy-match.js.map +1 -0
  109. package/dist/definitions/patch/index.d.ts +1 -0
  110. package/dist/definitions/patch/index.d.ts.map +1 -0
  111. package/dist/definitions/patch/index.js +1 -0
  112. package/dist/definitions/patch/index.js.map +1 -0
  113. package/dist/definitions/patch/patch-parser.d.ts +1 -0
  114. package/dist/definitions/patch/patch-parser.d.ts.map +1 -0
  115. package/dist/definitions/patch/patch-parser.js +1 -0
  116. package/dist/definitions/patch/patch-parser.js.map +1 -0
  117. package/dist/definitions/patch/sandbox-paths.d.ts +1 -0
  118. package/dist/definitions/patch/sandbox-paths.d.ts.map +1 -0
  119. package/dist/definitions/patch/sandbox-paths.js +1 -0
  120. package/dist/definitions/patch/sandbox-paths.js.map +1 -0
  121. package/dist/definitions/process/index.d.ts +1 -0
  122. package/dist/definitions/process/index.d.ts.map +1 -0
  123. package/dist/definitions/process/index.js +1 -0
  124. package/dist/definitions/process/index.js.map +1 -0
  125. package/dist/definitions/process/process-registry.d.ts +1 -0
  126. package/dist/definitions/process/process-registry.d.ts.map +1 -0
  127. package/dist/definitions/process/process-registry.js +1 -0
  128. package/dist/definitions/process/process-registry.js.map +1 -0
  129. package/dist/definitions/process/process.d.ts +1 -0
  130. package/dist/definitions/process/process.d.ts.map +1 -0
  131. package/dist/definitions/process/process.js +1 -0
  132. package/dist/definitions/process/process.js.map +1 -0
  133. package/dist/definitions/process/pty-keys.d.ts +1 -0
  134. package/dist/definitions/process/pty-keys.d.ts.map +1 -0
  135. package/dist/definitions/process/pty-keys.js +1 -0
  136. package/dist/definitions/process/pty-keys.js.map +1 -0
  137. package/dist/definitions/process/session-slug.d.ts +1 -0
  138. package/dist/definitions/process/session-slug.d.ts.map +1 -0
  139. package/dist/definitions/process/session-slug.js +1 -0
  140. package/dist/definitions/process/session-slug.js.map +1 -0
  141. package/dist/definitions/quip.d.ts +1 -0
  142. package/dist/definitions/quip.d.ts.map +1 -0
  143. package/dist/definitions/quip.js +1 -0
  144. package/dist/definitions/quip.js.map +1 -0
  145. package/dist/definitions/search.d.ts +1 -0
  146. package/dist/definitions/search.d.ts.map +1 -0
  147. package/dist/definitions/search.js +1 -0
  148. package/dist/definitions/search.js.map +1 -0
  149. package/dist/definitions/session-history.d.ts +1 -0
  150. package/dist/definitions/session-history.d.ts.map +1 -0
  151. package/dist/definitions/session-history.js +1 -0
  152. package/dist/definitions/session-history.js.map +1 -0
  153. package/dist/definitions/shell.d.ts +1 -0
  154. package/dist/definitions/shell.d.ts.map +1 -0
  155. package/dist/definitions/shell.js +1 -0
  156. package/dist/definitions/shell.js.map +1 -0
  157. package/dist/definitions/slack.d.ts +1 -0
  158. package/dist/definitions/slack.d.ts.map +1 -0
  159. package/dist/definitions/slack.js +1 -0
  160. package/dist/definitions/slack.js.map +1 -0
  161. package/dist/definitions/web.d.ts +1 -0
  162. package/dist/definitions/web.d.ts.map +1 -0
  163. package/dist/definitions/web.js +1 -0
  164. package/dist/definitions/web.js.map +1 -0
  165. package/dist/executors/apply-patch.d.ts +1 -0
  166. package/dist/executors/apply-patch.d.ts.map +1 -0
  167. package/dist/executors/apply-patch.js +1 -0
  168. package/dist/executors/apply-patch.js.map +1 -0
  169. package/dist/executors/arion.d.ts +1 -0
  170. package/dist/executors/arion.d.ts.map +1 -0
  171. package/dist/executors/arion.js +1 -0
  172. package/dist/executors/arion.js.map +1 -0
  173. package/dist/executors/code-intelligence.d.ts +1 -0
  174. package/dist/executors/code-intelligence.d.ts.map +1 -0
  175. package/dist/executors/code-intelligence.js +1 -0
  176. package/dist/executors/code-intelligence.js.map +1 -0
  177. package/dist/executors/deploy.d.ts +1 -0
  178. package/dist/executors/deploy.d.ts.map +1 -0
  179. package/dist/executors/deploy.js +1 -0
  180. package/dist/executors/deploy.js.map +1 -0
  181. package/dist/executors/filesystem.d.ts +1 -0
  182. package/dist/executors/filesystem.d.ts.map +1 -0
  183. package/dist/executors/filesystem.js +1 -0
  184. package/dist/executors/filesystem.js.map +1 -0
  185. package/dist/executors/frg-freshness.d.ts +1 -0
  186. package/dist/executors/frg-freshness.d.ts.map +1 -0
  187. package/dist/executors/frg-freshness.js +1 -0
  188. package/dist/executors/frg-freshness.js.map +1 -0
  189. package/dist/executors/frg.d.ts +1 -0
  190. package/dist/executors/frg.d.ts.map +1 -0
  191. package/dist/executors/frg.js +1 -0
  192. package/dist/executors/frg.js.map +1 -0
  193. package/dist/executors/index.d.ts +1 -0
  194. package/dist/executors/index.d.ts.map +1 -0
  195. package/dist/executors/index.js +1 -0
  196. package/dist/executors/index.js.map +1 -0
  197. package/dist/executors/learning-meta.d.ts +1 -0
  198. package/dist/executors/learning-meta.d.ts.map +1 -0
  199. package/dist/executors/learning-meta.js +1 -0
  200. package/dist/executors/learning-meta.js.map +1 -0
  201. package/dist/executors/lsp-client.d.ts +1 -0
  202. package/dist/executors/lsp-client.d.ts.map +1 -0
  203. package/dist/executors/lsp-client.js +1 -0
  204. package/dist/executors/lsp-client.js.map +1 -0
  205. package/dist/executors/memory.d.ts +1 -0
  206. package/dist/executors/memory.d.ts.map +1 -0
  207. package/dist/executors/memory.js +1 -0
  208. package/dist/executors/memory.js.map +1 -0
  209. package/dist/executors/meta.d.ts +1 -0
  210. package/dist/executors/meta.d.ts.map +1 -0
  211. package/dist/executors/meta.js +1 -0
  212. package/dist/executors/meta.js.map +1 -0
  213. package/dist/executors/process-registry.d.ts +1 -0
  214. package/dist/executors/process-registry.d.ts.map +1 -0
  215. package/dist/executors/process-registry.js +1 -0
  216. package/dist/executors/process-registry.js.map +1 -0
  217. package/dist/executors/pty-session-store.d.ts +1 -0
  218. package/dist/executors/pty-session-store.d.ts.map +1 -0
  219. package/dist/executors/pty-session-store.js +1 -0
  220. package/dist/executors/pty-session-store.js.map +1 -0
  221. package/dist/executors/pty.d.ts +1 -0
  222. package/dist/executors/pty.d.ts.map +1 -0
  223. package/dist/executors/pty.js +1 -0
  224. package/dist/executors/pty.js.map +1 -0
  225. package/dist/executors/restart.d.ts +1 -0
  226. package/dist/executors/restart.d.ts.map +1 -0
  227. package/dist/executors/restart.js +1 -0
  228. package/dist/executors/restart.js.map +1 -0
  229. package/dist/executors/search-freshness.d.ts +1 -0
  230. package/dist/executors/search-freshness.d.ts.map +1 -0
  231. package/dist/executors/search-freshness.js +1 -0
  232. package/dist/executors/search-freshness.js.map +1 -0
  233. package/dist/executors/search-types.d.ts +1 -0
  234. package/dist/executors/search-types.d.ts.map +1 -0
  235. package/dist/executors/search-types.js +1 -0
  236. package/dist/executors/search-types.js.map +1 -0
  237. package/dist/executors/search.d.ts +1 -0
  238. package/dist/executors/search.d.ts.map +1 -0
  239. package/dist/executors/search.js +1 -0
  240. package/dist/executors/search.js.map +1 -0
  241. package/dist/executors/self-diagnose.d.ts +1 -0
  242. package/dist/executors/self-diagnose.d.ts.map +1 -0
  243. package/dist/executors/self-diagnose.js +1 -0
  244. package/dist/executors/self-diagnose.js.map +1 -0
  245. package/dist/executors/session-history.d.ts +1 -0
  246. package/dist/executors/session-history.d.ts.map +1 -0
  247. package/dist/executors/session-history.js +1 -0
  248. package/dist/executors/session-history.js.map +1 -0
  249. package/dist/executors/shell-safety.d.ts +1 -0
  250. package/dist/executors/shell-safety.d.ts.map +1 -0
  251. package/dist/executors/shell-safety.js +1 -0
  252. package/dist/executors/shell-safety.js.map +1 -0
  253. package/dist/executors/shell.d.ts +1 -0
  254. package/dist/executors/shell.d.ts.map +1 -0
  255. package/dist/executors/shell.js +1 -0
  256. package/dist/executors/shell.js.map +1 -0
  257. package/dist/executors/utils.d.ts +1 -0
  258. package/dist/executors/utils.d.ts.map +1 -0
  259. package/dist/executors/utils.js +1 -0
  260. package/dist/executors/utils.js.map +1 -0
  261. package/dist/executors/web.d.ts +1 -0
  262. package/dist/executors/web.d.ts.map +1 -0
  263. package/dist/executors/web.js +1 -0
  264. package/dist/executors/web.js.map +1 -0
  265. package/dist/extraction/content-extraction.d.ts +1 -0
  266. package/dist/extraction/content-extraction.d.ts.map +1 -0
  267. package/dist/extraction/content-extraction.js +1 -0
  268. package/dist/extraction/content-extraction.js.map +1 -0
  269. package/dist/extraction/index.d.ts +1 -0
  270. package/dist/extraction/index.d.ts.map +1 -0
  271. package/dist/extraction/index.js +1 -0
  272. package/dist/extraction/index.js.map +1 -0
  273. package/dist/headless-control-contract.d.ts +1 -0
  274. package/dist/headless-control-contract.d.ts.map +1 -0
  275. package/dist/headless-control-contract.js +1 -0
  276. package/dist/headless-control-contract.js.map +1 -0
  277. package/dist/index.d.ts +1 -0
  278. package/dist/index.d.ts.map +1 -0
  279. package/dist/index.js +1 -0
  280. package/dist/index.js.map +1 -0
  281. package/dist/local-control-http-auth.d.ts +1 -0
  282. package/dist/local-control-http-auth.d.ts.map +1 -0
  283. package/dist/local-control-http-auth.js +1 -0
  284. package/dist/local-control-http-auth.js.map +1 -0
  285. package/dist/mcp/client.d.ts +1 -0
  286. package/dist/mcp/client.d.ts.map +1 -0
  287. package/dist/mcp/client.js +1 -0
  288. package/dist/mcp/client.js.map +1 -0
  289. package/dist/mcp/connection.d.ts +1 -0
  290. package/dist/mcp/connection.d.ts.map +1 -0
  291. package/dist/mcp/connection.js +1 -0
  292. package/dist/mcp/connection.js.map +1 -0
  293. package/dist/mcp/index.d.ts +1 -0
  294. package/dist/mcp/index.d.ts.map +1 -0
  295. package/dist/mcp/index.js +1 -0
  296. package/dist/mcp/index.js.map +1 -0
  297. package/dist/mcp/jsonrpc.d.ts +1 -0
  298. package/dist/mcp/jsonrpc.d.ts.map +1 -0
  299. package/dist/mcp/jsonrpc.js +1 -0
  300. package/dist/mcp/jsonrpc.js.map +1 -0
  301. package/dist/mcp/types.d.ts +1 -0
  302. package/dist/mcp/types.d.ts.map +1 -0
  303. package/dist/mcp/types.js +1 -0
  304. package/dist/mcp/types.js.map +1 -0
  305. package/dist/network-control-adapter.d.ts +1 -0
  306. package/dist/network-control-adapter.d.ts.map +1 -0
  307. package/dist/network-control-adapter.js +1 -0
  308. package/dist/network-control-adapter.js.map +1 -0
  309. package/dist/network-runtime/address-types.d.ts +1 -0
  310. package/dist/network-runtime/address-types.d.ts.map +1 -0
  311. package/dist/network-runtime/address-types.js +1 -0
  312. package/dist/network-runtime/address-types.js.map +1 -0
  313. package/dist/network-runtime/db-owner-fencing.d.ts +1 -0
  314. package/dist/network-runtime/db-owner-fencing.d.ts.map +1 -0
  315. package/dist/network-runtime/db-owner-fencing.js +1 -0
  316. package/dist/network-runtime/db-owner-fencing.js.map +1 -0
  317. package/dist/network-runtime/delivery-receipts.d.ts +1 -0
  318. package/dist/network-runtime/delivery-receipts.d.ts.map +1 -0
  319. package/dist/network-runtime/delivery-receipts.js +1 -0
  320. package/dist/network-runtime/delivery-receipts.js.map +1 -0
  321. package/dist/network-runtime/direct-endpoint-authority.d.ts +1 -0
  322. package/dist/network-runtime/direct-endpoint-authority.d.ts.map +1 -0
  323. package/dist/network-runtime/direct-endpoint-authority.js +1 -0
  324. package/dist/network-runtime/direct-endpoint-authority.js.map +1 -0
  325. package/dist/network-runtime/index.d.ts +1 -0
  326. package/dist/network-runtime/index.d.ts.map +1 -0
  327. package/dist/network-runtime/index.js +1 -0
  328. package/dist/network-runtime/index.js.map +1 -0
  329. package/dist/network-runtime/local-control-contract.d.ts +1 -0
  330. package/dist/network-runtime/local-control-contract.d.ts.map +1 -0
  331. package/dist/network-runtime/local-control-contract.js +1 -0
  332. package/dist/network-runtime/local-control-contract.js.map +1 -0
  333. package/dist/network-runtime/node-store-contract.d.ts +1 -0
  334. package/dist/network-runtime/node-store-contract.d.ts.map +1 -0
  335. package/dist/network-runtime/node-store-contract.js +1 -0
  336. package/dist/network-runtime/node-store-contract.js.map +1 -0
  337. package/dist/network-runtime/pair-route-contract.d.ts +1 -0
  338. package/dist/network-runtime/pair-route-contract.d.ts.map +1 -0
  339. package/dist/network-runtime/pair-route-contract.js +1 -0
  340. package/dist/network-runtime/pair-route-contract.js.map +1 -0
  341. package/dist/network-runtime/peer-capabilities.d.ts +1 -0
  342. package/dist/network-runtime/peer-capabilities.d.ts.map +1 -0
  343. package/dist/network-runtime/peer-capabilities.js +1 -0
  344. package/dist/network-runtime/peer-capabilities.js.map +1 -0
  345. package/dist/network-runtime/peer-principal-ref.d.ts +1 -0
  346. package/dist/network-runtime/peer-principal-ref.d.ts.map +1 -0
  347. package/dist/network-runtime/peer-principal-ref.js +1 -0
  348. package/dist/network-runtime/peer-principal-ref.js.map +1 -0
  349. package/dist/network-runtime/peer-state-machine.d.ts +1 -0
  350. package/dist/network-runtime/peer-state-machine.d.ts.map +1 -0
  351. package/dist/network-runtime/peer-state-machine.js +1 -0
  352. package/dist/network-runtime/peer-state-machine.js.map +1 -0
  353. package/dist/network-runtime/protocol-schemas.d.ts +1 -0
  354. package/dist/network-runtime/protocol-schemas.d.ts.map +1 -0
  355. package/dist/network-runtime/protocol-schemas.js +1 -0
  356. package/dist/network-runtime/protocol-schemas.js.map +1 -0
  357. package/dist/network-runtime/runtime-bootstrap-contract.d.ts +1 -0
  358. package/dist/network-runtime/runtime-bootstrap-contract.d.ts.map +1 -0
  359. package/dist/network-runtime/runtime-bootstrap-contract.js +1 -0
  360. package/dist/network-runtime/runtime-bootstrap-contract.js.map +1 -0
  361. package/dist/outlook/desktop-session.d.ts +1 -0
  362. package/dist/outlook/desktop-session.d.ts.map +1 -0
  363. package/dist/outlook/desktop-session.js +1 -0
  364. package/dist/outlook/desktop-session.js.map +1 -0
  365. package/dist/policy.d.ts +1 -0
  366. package/dist/policy.d.ts.map +1 -0
  367. package/dist/policy.js +1 -0
  368. package/dist/policy.js.map +1 -0
  369. package/dist/providers/brave.d.ts +1 -0
  370. package/dist/providers/brave.d.ts.map +1 -0
  371. package/dist/providers/brave.js +1 -0
  372. package/dist/providers/brave.js.map +1 -0
  373. package/dist/providers/duckduckgo.d.ts +1 -0
  374. package/dist/providers/duckduckgo.d.ts.map +1 -0
  375. package/dist/providers/duckduckgo.js +1 -0
  376. package/dist/providers/duckduckgo.js.map +1 -0
  377. package/dist/providers/exa.d.ts +1 -0
  378. package/dist/providers/exa.d.ts.map +1 -0
  379. package/dist/providers/exa.js +1 -0
  380. package/dist/providers/exa.js.map +1 -0
  381. package/dist/providers/firecrawl.d.ts +1 -0
  382. package/dist/providers/firecrawl.d.ts.map +1 -0
  383. package/dist/providers/firecrawl.js +1 -0
  384. package/dist/providers/firecrawl.js.map +1 -0
  385. package/dist/providers/index.d.ts +1 -0
  386. package/dist/providers/index.d.ts.map +1 -0
  387. package/dist/providers/index.js +1 -0
  388. package/dist/providers/index.js.map +1 -0
  389. package/dist/providers/jina.d.ts +1 -0
  390. package/dist/providers/jina.d.ts.map +1 -0
  391. package/dist/providers/jina.js +1 -0
  392. package/dist/providers/jina.js.map +1 -0
  393. package/dist/providers/router.d.ts +1 -0
  394. package/dist/providers/router.d.ts.map +1 -0
  395. package/dist/providers/router.js +1 -0
  396. package/dist/providers/router.js.map +1 -0
  397. package/dist/providers/search-provider.d.ts +1 -0
  398. package/dist/providers/search-provider.d.ts.map +1 -0
  399. package/dist/providers/search-provider.js +1 -0
  400. package/dist/providers/search-provider.js.map +1 -0
  401. package/dist/providers/tavily.d.ts +1 -0
  402. package/dist/providers/tavily.d.ts.map +1 -0
  403. package/dist/providers/tavily.js +1 -0
  404. package/dist/providers/tavily.js.map +1 -0
  405. package/dist/quip/desktop-session.d.ts +1 -0
  406. package/dist/quip/desktop-session.d.ts.map +1 -0
  407. package/dist/quip/desktop-session.js +1 -0
  408. package/dist/quip/desktop-session.js.map +1 -0
  409. package/dist/registry/index.d.ts +1 -0
  410. package/dist/registry/index.d.ts.map +1 -0
  411. package/dist/registry/index.js +1 -0
  412. package/dist/registry/index.js.map +1 -0
  413. package/dist/registry/registry.d.ts +1 -0
  414. package/dist/registry/registry.d.ts.map +1 -0
  415. package/dist/registry/registry.js +1 -0
  416. package/dist/registry/registry.js.map +1 -0
  417. package/dist/runtime-socket-local-control-client.d.ts +1 -0
  418. package/dist/runtime-socket-local-control-client.d.ts.map +1 -0
  419. package/dist/runtime-socket-local-control-client.js +1 -0
  420. package/dist/runtime-socket-local-control-client.js.map +1 -0
  421. package/dist/security/dns-normalization.d.ts +1 -0
  422. package/dist/security/dns-normalization.d.ts.map +1 -0
  423. package/dist/security/dns-normalization.js +1 -0
  424. package/dist/security/dns-normalization.js.map +1 -0
  425. package/dist/security/dns-pinning.d.ts +1 -0
  426. package/dist/security/dns-pinning.d.ts.map +1 -0
  427. package/dist/security/dns-pinning.js +1 -0
  428. package/dist/security/dns-pinning.js.map +1 -0
  429. package/dist/security/external-content.d.ts +1 -0
  430. package/dist/security/external-content.d.ts.map +1 -0
  431. package/dist/security/external-content.js +1 -0
  432. package/dist/security/external-content.js.map +1 -0
  433. package/dist/security/ssrf.d.ts +1 -0
  434. package/dist/security/ssrf.d.ts.map +1 -0
  435. package/dist/security/ssrf.js +1 -0
  436. package/dist/security/ssrf.js.map +1 -0
  437. package/dist/slack/desktop-session.d.ts +1 -0
  438. package/dist/slack/desktop-session.d.ts.map +1 -0
  439. package/dist/slack/desktop-session.js +1 -0
  440. package/dist/slack/desktop-session.js.map +1 -0
  441. package/dist/tool-factory.d.ts +1 -0
  442. package/dist/tool-factory.d.ts.map +1 -0
  443. package/dist/tool-factory.js +1 -0
  444. package/dist/tool-factory.js.map +1 -0
  445. package/dist/types.d.ts +1 -0
  446. package/dist/types.d.ts.map +1 -0
  447. package/dist/types.js +1 -0
  448. package/dist/types.js.map +1 -0
  449. package/dist/utils/retry.d.ts +1 -0
  450. package/dist/utils/retry.d.ts.map +1 -0
  451. package/dist/utils/retry.js +1 -0
  452. package/dist/utils/retry.js.map +1 -0
  453. package/dist/utils/safe-parse-json.d.ts +1 -0
  454. package/dist/utils/safe-parse-json.d.ts.map +1 -0
  455. package/dist/utils/safe-parse-json.js +1 -0
  456. package/dist/utils/safe-parse-json.js.map +1 -0
  457. package/dist/utils/url.d.ts +1 -0
  458. package/dist/utils/url.d.ts.map +1 -0
  459. package/dist/utils/url.js +1 -0
  460. package/dist/utils/url.js.map +1 -0
  461. package/dist-cjs/index.js +400 -435
  462. package/dist-cjs/network-runtime/index.js +8 -172
  463. package/package.json +6 -6
  464. package/dist-cjs/ask-user-interaction.js +0 -27
  465. package/dist-cjs/cache/web-cache.js +0 -70
  466. package/dist-cjs/definitions/arion.js +0 -107
  467. package/dist-cjs/definitions/browser/browser.js +0 -421
  468. package/dist-cjs/definitions/browser/index.js +0 -8
  469. package/dist-cjs/definitions/browser/pw-downloads.js +0 -117
  470. package/dist-cjs/definitions/browser/pw-interactions.js +0 -213
  471. package/dist-cjs/definitions/browser/pw-responses.js +0 -84
  472. package/dist-cjs/definitions/browser/pw-session.js +0 -326
  473. package/dist-cjs/definitions/browser/pw-shared.js +0 -72
  474. package/dist-cjs/definitions/browser/pw-snapshot.js +0 -307
  475. package/dist-cjs/definitions/browser/pw-state.js +0 -70
  476. package/dist-cjs/definitions/browser/types.js +0 -5
  477. package/dist-cjs/definitions/code-intelligence.js +0 -473
  478. package/dist-cjs/definitions/core.js +0 -133
  479. package/dist-cjs/definitions/delegation.js +0 -515
  480. package/dist-cjs/definitions/deploy.js +0 -68
  481. package/dist-cjs/definitions/filesystem.js +0 -199
  482. package/dist-cjs/definitions/frg.js +0 -66
  483. package/dist-cjs/definitions/index.js +0 -43
  484. package/dist-cjs/definitions/memory.js +0 -126
  485. package/dist-cjs/definitions/messaging.js +0 -631
  486. package/dist-cjs/definitions/meta.js +0 -352
  487. package/dist-cjs/definitions/network.js +0 -162
  488. package/dist-cjs/definitions/outlook.js +0 -280
  489. package/dist-cjs/definitions/patch/apply-patch.js +0 -191
  490. package/dist-cjs/definitions/patch/fuzzy-match.js +0 -172
  491. package/dist-cjs/definitions/patch/index.js +0 -5
  492. package/dist-cjs/definitions/patch/patch-parser.js +0 -215
  493. package/dist-cjs/definitions/patch/sandbox-paths.js +0 -113
  494. package/dist-cjs/definitions/process/index.js +0 -8
  495. package/dist-cjs/definitions/process/process-registry.js +0 -231
  496. package/dist-cjs/definitions/process/process.js +0 -389
  497. package/dist-cjs/definitions/process/pty-keys.js +0 -259
  498. package/dist-cjs/definitions/process/session-slug.js +0 -145
  499. package/dist-cjs/definitions/quip.js +0 -198
  500. package/dist-cjs/definitions/search.js +0 -63
  501. package/dist-cjs/definitions/session-history.js +0 -72
  502. package/dist-cjs/definitions/shell.js +0 -184
  503. package/dist-cjs/definitions/slack.js +0 -183
  504. package/dist-cjs/definitions/web.js +0 -112
  505. package/dist-cjs/executors/apply-patch.js +0 -938
  506. package/dist-cjs/executors/arion.js +0 -125
  507. package/dist-cjs/executors/code-intelligence.js +0 -925
  508. package/dist-cjs/executors/deploy.js +0 -869
  509. package/dist-cjs/executors/filesystem.js +0 -1167
  510. package/dist-cjs/executors/frg-freshness.js +0 -627
  511. package/dist-cjs/executors/frg.js +0 -334
  512. package/dist-cjs/executors/index.js +0 -143
  513. package/dist-cjs/executors/learning-meta.js +0 -1165
  514. package/dist-cjs/executors/lsp-client.js +0 -310
  515. package/dist-cjs/executors/memory.js +0 -796
  516. package/dist-cjs/executors/meta.js +0 -226
  517. package/dist-cjs/executors/process-registry.js +0 -469
  518. package/dist-cjs/executors/pty-session-store.js +0 -34
  519. package/dist-cjs/executors/pty.js +0 -312
  520. package/dist-cjs/executors/restart.js +0 -155
  521. package/dist-cjs/executors/search-freshness.js +0 -234
  522. package/dist-cjs/executors/search-types.js +0 -56
  523. package/dist-cjs/executors/search.js +0 -102
  524. package/dist-cjs/executors/self-diagnose.js +0 -434
  525. package/dist-cjs/executors/session-history.js +0 -320
  526. package/dist-cjs/executors/shell-safety.js +0 -478
  527. package/dist-cjs/executors/shell.js +0 -1001
  528. package/dist-cjs/executors/utils.js +0 -73
  529. package/dist-cjs/executors/web.js +0 -547
  530. package/dist-cjs/extraction/content-extraction.js +0 -243
  531. package/dist-cjs/extraction/index.js +0 -8
  532. package/dist-cjs/headless-control-contract.js +0 -972
  533. package/dist-cjs/local-control-http-auth.js +0 -5
  534. package/dist-cjs/mcp/client.js +0 -185
  535. package/dist-cjs/mcp/connection.js +0 -484
  536. package/dist-cjs/mcp/index.js +0 -30
  537. package/dist-cjs/mcp/jsonrpc.js +0 -148
  538. package/dist-cjs/mcp/types.js +0 -8
  539. package/dist-cjs/network-control-adapter.js +0 -77
  540. package/dist-cjs/network-runtime/address-types.js +0 -168
  541. package/dist-cjs/network-runtime/db-owner-fencing.js +0 -76
  542. package/dist-cjs/network-runtime/delivery-receipts.js +0 -276
  543. package/dist-cjs/network-runtime/direct-endpoint-authority.js +0 -29
  544. package/dist-cjs/network-runtime/local-control-contract.js +0 -633
  545. package/dist-cjs/network-runtime/node-store-contract.js +0 -38
  546. package/dist-cjs/network-runtime/pair-route-contract.js +0 -80
  547. package/dist-cjs/network-runtime/peer-capabilities.js +0 -37
  548. package/dist-cjs/network-runtime/peer-principal-ref.js +0 -15
  549. package/dist-cjs/network-runtime/peer-state-machine.js +0 -129
  550. package/dist-cjs/network-runtime/protocol-schemas.js +0 -212
  551. package/dist-cjs/network-runtime/runtime-bootstrap-contract.js +0 -63
  552. package/dist-cjs/outlook/desktop-session.js +0 -318
  553. package/dist-cjs/policy.js +0 -155
  554. package/dist-cjs/providers/brave.js +0 -66
  555. package/dist-cjs/providers/duckduckgo.js +0 -180
  556. package/dist-cjs/providers/exa.js +0 -67
  557. package/dist-cjs/providers/firecrawl.js +0 -59
  558. package/dist-cjs/providers/index.js +0 -17
  559. package/dist-cjs/providers/jina.js +0 -53
  560. package/dist-cjs/providers/router.js +0 -100
  561. package/dist-cjs/providers/search-provider.js +0 -36
  562. package/dist-cjs/providers/tavily.js +0 -58
  563. package/dist-cjs/quip/desktop-session.js +0 -353
  564. package/dist-cjs/registry/index.js +0 -6
  565. package/dist-cjs/registry/registry.js +0 -761
  566. package/dist-cjs/runtime-socket-local-control-client.js +0 -367
  567. package/dist-cjs/security/dns-normalization.js +0 -22
  568. package/dist-cjs/security/dns-pinning.js +0 -160
  569. package/dist-cjs/security/external-content.js +0 -95
  570. package/dist-cjs/security/ssrf.js +0 -221
  571. package/dist-cjs/slack/desktop-session.js +0 -366
  572. package/dist-cjs/tool-factory.js +0 -50
  573. package/dist-cjs/types.js +0 -8
  574. package/dist-cjs/utils/retry.js +0 -169
  575. package/dist-cjs/utils/safe-parse-json.js +0 -164
  576. package/dist-cjs/utils/url.js +0 -23
@@ -1,869 +0,0 @@
1
- "use strict";
2
- /**
3
- * @aria/tools - Deploy tool executor
4
- *
5
- * Deploys ARIA to a remote machine via SSH. Handles OS detection,
6
- * Node.js installation, repo setup, keypair generation, TLS cert
7
- * discovery/provisioning, firewall configuration, config writing,
8
- * daemon startup, and health check.
9
- */
10
- Object.defineProperty(exports, "__esModule", { value: true });
11
- exports.PINNED_PNPM_VERSION = void 0;
12
- exports.detectOS = detectOS;
13
- exports.detectLinuxDistro = detectLinuxDistro;
14
- exports.getNodeInstallCommand = getNodeInstallCommand;
15
- exports.getFirewallCommands = getFirewallCommands;
16
- exports.discoverTlsCerts = discoverTlsCerts;
17
- exports.buildConfigJson = buildConfigJson;
18
- exports.buildHealthCheckUrl = buildHealthCheckUrl;
19
- exports.validateRepoUrl = validateRepoUrl;
20
- exports.validateBranch = validateBranch;
21
- exports.validateArionName = validateArionName;
22
- exports.validateSshKeyPath = validateSshKeyPath;
23
- exports.validateCommitHash = validateCommitHash;
24
- exports.getFirewallUndoCommands = getFirewallUndoCommands;
25
- exports.buildRollbackCommands = buildRollbackCommands;
26
- exports.deepMergeConfig = deepMergeConfig;
27
- exports.getKeyPermissionCommands = getKeyPermissionCommands;
28
- exports.sshExec = sshExec;
29
- exports.executeDeploy = executeDeploy;
30
- const node_child_process_1 = require("node:child_process");
31
- const utils_js_1 = require("./utils.js");
32
- // ============================================================================
33
- // Pure Helper Functions (exported for testing)
34
- // ============================================================================
35
- /**
36
- * Detect OS type from `uname -s` output.
37
- */
38
- function detectOS(unameOutput) {
39
- const trimmed = unameOutput.trim();
40
- if (!trimmed || trimmed === "UNKNOWN") {
41
- return { os: "unknown" };
42
- }
43
- if (trimmed === "Linux") {
44
- return { os: "linux" };
45
- }
46
- if (trimmed === "Darwin") {
47
- return { os: "darwin" };
48
- }
49
- // MINGW, MSYS, CYGWIN, or Windows-style output
50
- if (/^(MINGW|MSYS|CYGWIN)/i.test(trimmed) || /windows/i.test(trimmed)) {
51
- return { os: "windows" };
52
- }
53
- return { os: "unknown" };
54
- }
55
- /**
56
- * Detect Linux distribution from /etc/os-release content.
57
- * Returns the package manager type to use.
58
- */
59
- function detectLinuxDistro(osReleaseContent) {
60
- const lower = osReleaseContent.toLowerCase();
61
- // Extract ID and ID_LIKE fields
62
- const idMatch = lower.match(/^id=(.+)$/m);
63
- const idLikeMatch = lower.match(/^id_like=(.+)$/m);
64
- const id = idMatch?.[1]?.replace(/"/g, "").trim() ?? "";
65
- const idLike = idLikeMatch?.[1]?.replace(/"/g, "").trim() ?? "";
66
- // Alpine
67
- if (id === "alpine") {
68
- return "apk";
69
- }
70
- // Debian/Ubuntu family
71
- if (id === "debian" ||
72
- id === "ubuntu" ||
73
- idLike.includes("debian") ||
74
- idLike.includes("ubuntu")) {
75
- return "apt";
76
- }
77
- // RHEL/Fedora/CentOS/Amazon Linux family
78
- if (id === "fedora" ||
79
- id === "rhel" ||
80
- id === "centos" ||
81
- id === "amzn" ||
82
- id === "rocky" ||
83
- id === "almalinux" ||
84
- idLike.includes("fedora") ||
85
- idLike.includes("rhel") ||
86
- idLike.includes("centos") ||
87
- idLike.includes("suse")) {
88
- return "dnf";
89
- }
90
- // Default to apt (nvm-based install works universally)
91
- return "apt";
92
- }
93
- /**
94
- * Get the shell command to install Node.js for a given OS and distro.
95
- */
96
- function getNodeInstallCommand(osInfo, distro) {
97
- switch (osInfo.os) {
98
- case "linux":
99
- switch (distro) {
100
- case "apk":
101
- return "apk add --no-cache nodejs npm";
102
- case "dnf":
103
- return "dnf module install -y nodejs:22 || dnf install -y nodejs";
104
- case "apt":
105
- default:
106
- return ("curl -fsSL https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash && " +
107
- 'export NVM_DIR="$HOME/.nvm" && . "$NVM_DIR/nvm.sh" && nvm install 22');
108
- }
109
- case "darwin":
110
- return ("command -v brew >/dev/null && brew install node@22 || " +
111
- "{ curl -fsSL https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash && " +
112
- 'export NVM_DIR="$HOME/.nvm" && . "$NVM_DIR/nvm.sh" && nvm install 22; }');
113
- case "windows":
114
- return "winget install --id OpenJS.NodeJS.LTS --accept-source-agreements --accept-package-agreements";
115
- default:
116
- throw new Error(`Unsupported OS: ${osInfo.os}. Deploy supports Linux, macOS, and Windows.`);
117
- }
118
- }
119
- /**
120
- * Generate firewall commands to open ARIA ports (443/tcp + 51820/udp).
121
- */
122
- function getFirewallCommands(firewallType) {
123
- switch (firewallType) {
124
- case "ufw":
125
- return "ufw allow 443/tcp && ufw allow 51820/udp";
126
- case "iptables":
127
- return ("iptables -A INPUT -p tcp --dport 443 -j ACCEPT && " +
128
- "iptables -A INPUT -p udp --dport 51820 -j ACCEPT");
129
- case "firewalld":
130
- return ("firewall-cmd --permanent --add-port=443/tcp && " +
131
- "firewall-cmd --permanent --add-port=51820/udp && " +
132
- "firewall-cmd --reload");
133
- case "windows":
134
- return ('netsh advfirewall firewall add rule name="ARIA HTTPS" dir=in action=allow protocol=tcp localport=443 && ' +
135
- 'netsh advfirewall firewall add rule name="ARIA WireGuard" dir=in action=allow protocol=udp localport=51820');
136
- case "none":
137
- return "";
138
- }
139
- }
140
- /**
141
- * Parse TLS cert discovery output from the remote host.
142
- * The discovery script outputs JSON: { found, type?, cert?, key? }
143
- */
144
- function discoverTlsCerts(sshOutput) {
145
- if (!sshOutput || !sshOutput.trim()) {
146
- return { found: false };
147
- }
148
- try {
149
- const data = JSON.parse(sshOutput.trim());
150
- if (data.found === true && data.cert && data.key) {
151
- return {
152
- found: true,
153
- type: data.type,
154
- cert: data.cert,
155
- key: data.key,
156
- };
157
- }
158
- return { found: false };
159
- }
160
- catch {
161
- return { found: false };
162
- }
163
- }
164
- /**
165
- * Build the config JSON object for ~/.aria/config.json.
166
- */
167
- function buildConfigJson(params) {
168
- const config = {
169
- arion_name: params.arionName,
170
- };
171
- if (params.coordinationUrl) {
172
- config.coordination_url = params.coordinationUrl;
173
- }
174
- if (params.tlsCert && params.tlsKey) {
175
- config.tls = {
176
- cert: params.tlsCert,
177
- key: params.tlsKey,
178
- };
179
- }
180
- return config;
181
- }
182
- /**
183
- * Construct the health check URL for the deployed daemon.
184
- */
185
- function buildHealthCheckUrl(host, port) {
186
- const p = port ?? 443;
187
- return `https://${host}:${p}/api/v1/network/peers`;
188
- }
189
- function buildRemoteRuntimePidLookupCommand(repoDir) {
190
- return `
191
- export NVM_DIR="$HOME/.nvm" && [ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"
192
- cd ${repoDir} && node --input-type=module <<'NODE'
193
- import { resolveOrCreateNode, resolveRuntimeRootDirectory, readRuntimeOwnerRecord } from "./packages/server/dist/index.js";
194
- const ariaHome = process.env.ARIA_HOME || (process.env.HOME + "/.aria");
195
- const resolved = await resolveOrCreateNode({ ariaHome });
196
- const record = readRuntimeOwnerRecord(resolveRuntimeRootDirectory(), resolved.nodeId);
197
- if (record?.runtimePid) {
198
- console.log(String(record.runtimePid));
199
- }
200
- NODE
201
- `;
202
- }
203
- function buildRemoteRuntimeStatusLookupCommand(repoDir) {
204
- return `
205
- export NVM_DIR="$HOME/.nvm" && [ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"
206
- cd ${repoDir} && node --input-type=module <<'NODE'
207
- import { createRuntimeSocketLocalControlClient } from "./packages/tools/dist/index.js";
208
- import { resolveOrCreateNode, resolveRuntimeRootDirectory, readRuntimeOwnerRecord } from "./packages/server/dist/index.js";
209
- const ariaHome = process.env.ARIA_HOME || (process.env.HOME + "/.aria");
210
- const resolved = await resolveOrCreateNode({ ariaHome });
211
- const record = readRuntimeOwnerRecord(resolveRuntimeRootDirectory(), resolved.nodeId);
212
- if (!record?.runtimeSocket) {
213
- process.exit(1);
214
- }
215
- const client = createRuntimeSocketLocalControlClient({ runtimeSocket: record.runtimeSocket });
216
- const status = await client.getRuntimeStatus();
217
- console.log(JSON.stringify(status));
218
- NODE
219
- `;
220
- }
221
- // ============================================================================
222
- // Input Validators (A1 — prevent shell injection)
223
- // ============================================================================
224
- /**
225
- * Validate git repo URL — must be HTTPS with no shell metacharacters.
226
- */
227
- function validateRepoUrl(url) {
228
- if (!url)
229
- return null;
230
- if (!/^https?:\/\/[a-zA-Z0-9.-]+\/[a-zA-Z0-9_.\/-]+(?:\.git)?$/.test(url)) {
231
- return "Invalid repo URL format. Use 'https://host/org/repo.git'.";
232
- }
233
- return null;
234
- }
235
- /**
236
- * Validate branch name — alphanumeric, dots, slashes, hyphens, underscores.
237
- * Rejects shell metacharacters and path traversal.
238
- */
239
- function validateBranch(branch) {
240
- if (!branch)
241
- return null;
242
- if (!/^[a-zA-Z0-9_.\/-]+$/.test(branch) || branch.includes("..")) {
243
- return "Invalid branch name. Alphanumeric, dots, slashes, hyphens only.";
244
- }
245
- return null;
246
- }
247
- /**
248
- * Validate arion name — alphanumeric, underscores, hyphens only.
249
- */
250
- function validateArionName(name) {
251
- if (!name)
252
- return null;
253
- if (!/^[a-zA-Z0-9_-]+$/.test(name)) {
254
- return "Invalid arion name. Alphanumeric, underscores, hyphens only.";
255
- }
256
- return null;
257
- }
258
- /**
259
- * Validate SSH key path — reject traversal and shell metacharacters.
260
- */
261
- function validateSshKeyPath(keyPath) {
262
- if (!keyPath)
263
- return null;
264
- if (keyPath.includes("..") || /[;|&`$(){}!<>]/.test(keyPath)) {
265
- return "Invalid SSH key path. No traversal or shell metacharacters.";
266
- }
267
- return null;
268
- }
269
- /**
270
- * Validate git commit hash — must be 7-64 lowercase hex characters.
271
- * Rejects non-hex, too-short, and shell injection attempts.
272
- */
273
- function validateCommitHash(hash) {
274
- if (!hash)
275
- return null;
276
- if (!/^[a-f0-9]{7,64}$/.test(hash)) {
277
- return "Invalid commit hash. Must be 7-64 lowercase hex characters.";
278
- }
279
- return null;
280
- }
281
- /**
282
- * Pinned pnpm version — matches packageManager field in root package.json.
283
- * Prevents unpinned `pnpm@latest` from pulling a compromised version.
284
- */
285
- exports.PINNED_PNPM_VERSION = "10.28.2";
286
- /**
287
- * Get firewall undo commands to reverse port-opening rules.
288
- */
289
- function getFirewallUndoCommands(firewallType) {
290
- switch (firewallType) {
291
- case "ufw":
292
- return "ufw delete allow 443/tcp && ufw delete allow 51820/udp";
293
- case "iptables":
294
- return ("iptables -D INPUT -p tcp --dport 443 -j ACCEPT && " +
295
- "iptables -D INPUT -p udp --dport 51820 -j ACCEPT");
296
- case "firewalld":
297
- return ("firewall-cmd --permanent --remove-port=443/tcp && " +
298
- "firewall-cmd --permanent --remove-port=51820/udp && " +
299
- "firewall-cmd --reload");
300
- case "windows":
301
- return ('netsh advfirewall firewall delete rule name="ARIA HTTPS" && ' +
302
- 'netsh advfirewall firewall delete rule name="ARIA WireGuard"');
303
- case "none":
304
- return "";
305
- }
306
- }
307
- /**
308
- * Build rollback commands from recorded deploy steps.
309
- * Returns commands in reverse order (last step undone first).
310
- * Skips steps with empty undoCmd.
311
- */
312
- function buildRollbackCommands(steps) {
313
- return steps
314
- .filter((s) => s.undoCmd.length > 0)
315
- .reverse()
316
- .map((s) => s.undoCmd);
317
- }
318
- // ============================================================================
319
- // Idempotency — Deep Merge Config (A3)
320
- // ============================================================================
321
- /**
322
- * Deep-merge two config objects. Preserves nested objects from existing config
323
- * while applying updates. Does not mutate inputs.
324
- */
325
- function deepMergeConfig(existing, update) {
326
- const result = {};
327
- // Copy all existing keys
328
- for (const key of Object.keys(existing)) {
329
- const val = existing[key];
330
- if (val !== null && typeof val === "object" && !Array.isArray(val)) {
331
- result[key] = { ...val };
332
- }
333
- else {
334
- result[key] = val;
335
- }
336
- }
337
- // Apply updates
338
- for (const key of Object.keys(update)) {
339
- const updateVal = update[key];
340
- const existingVal = result[key];
341
- if (updateVal !== null &&
342
- typeof updateVal === "object" &&
343
- !Array.isArray(updateVal) &&
344
- existingVal !== null &&
345
- typeof existingVal === "object" &&
346
- !Array.isArray(existingVal)) {
347
- // Recursive merge for nested objects
348
- result[key] = deepMergeConfig(existingVal, updateVal);
349
- }
350
- else {
351
- result[key] = updateVal;
352
- }
353
- }
354
- return result;
355
- }
356
- // ============================================================================
357
- // Key Permissions (A3)
358
- // ============================================================================
359
- /**
360
- * Get chmod commands to restrict key and config file permissions to owner-only.
361
- */
362
- function getKeyPermissionCommands() {
363
- return "chmod 600 ~/.aria/signing-key.json && chmod 600 ~/.aria/config.json";
364
- }
365
- // ============================================================================
366
- // SSH Helper
367
- // ============================================================================
368
- /**
369
- * Validate SSH target format — prevent command injection.
370
- */
371
- function validateTarget(target) {
372
- if (!target) {
373
- return "target is required (e.g. 'user@host')";
374
- }
375
- // Block shell metacharacters that could enable injection
376
- if (/[;|&`$(){}!<>\s]/.test(target)) {
377
- return "Invalid target format. Use 'user@host' or 'hostname'.";
378
- }
379
- return null;
380
- }
381
- /**
382
- * Execute a command on the remote host via SSH.
383
- * Returns { stdout, stderr, exitCode }.
384
- */
385
- function sshExec(target, command, options) {
386
- return new Promise((resolve, reject) => {
387
- const args = [
388
- "-o",
389
- "StrictHostKeyChecking=accept-new",
390
- "-o",
391
- "ConnectTimeout=10",
392
- "-o",
393
- "BatchMode=yes",
394
- ];
395
- if (options?.sshKeyPath) {
396
- args.push("-i", options.sshKeyPath);
397
- }
398
- args.push(target, command);
399
- const child = (0, node_child_process_1.spawn)("ssh", args, {
400
- stdio: ["ignore", "pipe", "pipe"],
401
- });
402
- let stdout = "";
403
- let stderr = "";
404
- child.stdout.on("data", (data) => {
405
- stdout += data.toString();
406
- });
407
- child.stderr.on("data", (data) => {
408
- stderr += data.toString();
409
- });
410
- const timeoutMs = options?.timeoutMs ?? 120_000;
411
- const timer = setTimeout(() => {
412
- child.kill("SIGTERM");
413
- reject(new Error(`SSH command timed out after ${timeoutMs}ms: ${command}`));
414
- }, timeoutMs);
415
- if (options?.abortSignal) {
416
- options.abortSignal.addEventListener("abort", () => {
417
- child.kill("SIGTERM");
418
- clearTimeout(timer);
419
- reject(new Error("SSH command aborted"));
420
- }, { once: true });
421
- }
422
- child.on("close", (code) => {
423
- clearTimeout(timer);
424
- resolve({ stdout: stdout.trim(), stderr: stderr.trim(), exitCode: code ?? 1 });
425
- });
426
- child.on("error", (err) => {
427
- clearTimeout(timer);
428
- reject(err);
429
- });
430
- });
431
- }
432
- // ============================================================================
433
- // TLS Discovery Script (run on remote host)
434
- // ============================================================================
435
- const TLS_DISCOVERY_SCRIPT = `
436
- node -e "
437
- const fs = require('fs');
438
- const path = require('path');
439
-
440
- // Check Let's Encrypt first
441
- const leDirs = ['/etc/letsencrypt/live'];
442
- for (const dir of leDirs) {
443
- try {
444
- const domains = fs.readdirSync(dir).filter(d => !d.startsWith('.'));
445
- for (const domain of domains) {
446
- const cert = path.join(dir, domain, 'fullchain.pem');
447
- const key = path.join(dir, domain, 'privkey.pem');
448
- if (fs.existsSync(cert) && fs.existsSync(key)) {
449
- console.log(JSON.stringify({ found: true, type: 'letsencrypt', cert, key }));
450
- process.exit(0);
451
- }
452
- }
453
- } catch {}
454
- }
455
-
456
- // Check standard SSL locations
457
- const sslPairs = [
458
- ['/etc/ssl/certs/server.crt', '/etc/ssl/private/server.key'],
459
- ['/etc/ssl/certs/aria.crt', '/etc/ssl/private/aria.key'],
460
- ];
461
- for (const [cert, key] of sslPairs) {
462
- if (fs.existsSync(cert) && fs.existsSync(key)) {
463
- console.log(JSON.stringify({ found: true, type: 'real-ca', cert, key }));
464
- process.exit(0);
465
- }
466
- }
467
-
468
- console.log(JSON.stringify({ found: false }));
469
- "
470
- `;
471
- // ============================================================================
472
- // Firewall Detection Script (run on remote host)
473
- // ============================================================================
474
- const FIREWALL_DETECT_SCRIPT = `
475
- if command -v ufw >/dev/null 2>&1; then echo "ufw"
476
- elif command -v firewall-cmd >/dev/null 2>&1; then echo "firewalld"
477
- elif command -v iptables >/dev/null 2>&1; then echo "iptables"
478
- else echo "none"
479
- fi
480
- `;
481
- // ============================================================================
482
- // Deploy Executor
483
- // ============================================================================
484
- /**
485
- * Deploy ARIA to a remote machine via SSH.
486
- *
487
- * Steps:
488
- * 1. SSH connectivity check
489
- * 2. OS detection (uname -s)
490
- * 3. Linux distro detection (for package manager selection)
491
- * 4. Install Node.js 20+ if missing
492
- * 5. Enable corepack + pnpm
493
- * 6. Clone or update repo
494
- * 7. pnpm install && pnpm build
495
- * 8. Generate Ed25519 signing keypair if not present
496
- * 9. TLS cert discovery + optional provisioning
497
- * 10. Firewall port opening (443/tcp + 51820/udp)
498
- * 11. Write ~/.aria/config.json
499
- * 12. Start daemon on port 443
500
- * 13. Health check (curl endpoint)
501
- */
502
- async function executeDeploy(input, ctx) {
503
- // Validate all inputs before any SSH calls (A1 — prevent shell injection)
504
- const targetError = validateTarget(input.target);
505
- if (targetError) {
506
- return (0, utils_js_1.fail)(targetError);
507
- }
508
- const repoErr = validateRepoUrl(input.repo_url ?? "");
509
- if (repoErr)
510
- return (0, utils_js_1.fail)(repoErr);
511
- const branchErr = validateBranch(input.branch ?? "");
512
- if (branchErr)
513
- return (0, utils_js_1.fail)(branchErr);
514
- const nameErr = validateArionName(input.arion_name ?? "");
515
- if (nameErr)
516
- return (0, utils_js_1.fail)(nameErr);
517
- const keyErr = validateSshKeyPath(input.ssh_key_path ?? "");
518
- if (keyErr)
519
- return (0, utils_js_1.fail)(keyErr);
520
- const hashErr = validateCommitHash(input.commit_hash ?? "");
521
- if (hashErr)
522
- return (0, utils_js_1.fail)(hashErr);
523
- const sshOpts = { sshKeyPath: input.ssh_key_path, abortSignal: ctx.abortSignal };
524
- const branch = input.branch ?? "main";
525
- const repoUrl = input.repo_url ?? "https://github.com/aria-ai/aria.git";
526
- // Request user confirmation — this is a dangerous operation
527
- const confirmed = await ctx.confirm(`Deploy ARIA to ${input.target}? This will install Node.js, clone the repo, build, and start the daemon.`);
528
- if (!confirmed) {
529
- return (0, utils_js_1.fail)("User cancelled deployment");
530
- }
531
- // Track mutating steps for rollback on failure (A2)
532
- const completedSteps = [];
533
- let deployFailed = false;
534
- try {
535
- // Step 1: SSH connectivity check
536
- const connectivity = await sshExec(input.target, "echo ARIA_SSH_OK", sshOpts);
537
- if (connectivity.exitCode !== 0 || !connectivity.stdout.includes("ARIA_SSH_OK")) {
538
- return (0, utils_js_1.fail)(`SSH connectivity failed to ${input.target}: ${connectivity.stderr || "no response"}`);
539
- }
540
- // Step 2: Detect OS
541
- const osResult = await sshExec(input.target, "uname -s 2>/dev/null || echo UNKNOWN", sshOpts);
542
- const osInfo = detectOS(osResult.stdout);
543
- if (osInfo.os === "unknown") {
544
- return (0, utils_js_1.fail)(`Unsupported OS detected from uname: ${osResult.stdout.trim()}`);
545
- }
546
- // Step 3: Detect Linux distro for package manager selection
547
- let distro = "apt";
548
- if (osInfo.os === "linux") {
549
- const distroResult = await sshExec(input.target, "cat /etc/os-release 2>/dev/null || echo ''", sshOpts);
550
- distro = detectLinuxDistro(distroResult.stdout);
551
- }
552
- // Step 4: Install Node.js 20+ if not present
553
- const nodeCheck = await sshExec(input.target, 'node --version 2>/dev/null || echo "NO_NODE"', sshOpts);
554
- const hasNode = nodeCheck.stdout.startsWith("v") && parseInt(nodeCheck.stdout.slice(1), 10) >= 20;
555
- if (!hasNode) {
556
- const installCmd = getNodeInstallCommand(osInfo, distro);
557
- const installResult = await sshExec(input.target, installCmd, {
558
- ...sshOpts,
559
- timeoutMs: 300_000,
560
- });
561
- if (installResult.exitCode !== 0) {
562
- return (0, utils_js_1.fail)(`Node.js installation failed: ${installResult.stderr}`);
563
- }
564
- }
565
- // Step 5: Enable corepack + pnpm (pinned version — never use @latest)
566
- const corepackCmd = `export NVM_DIR="$HOME/.nvm" && [ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"; corepack enable && corepack prepare pnpm@${exports.PINNED_PNPM_VERSION} --activate`;
567
- const corepackResult = await sshExec(input.target, corepackCmd, sshOpts);
568
- if (corepackResult.exitCode !== 0) {
569
- return (0, utils_js_1.fail)(`corepack/pnpm setup failed: ${corepackResult.stderr}`);
570
- }
571
- // Step 6: Clone or update repo
572
- const repoDir = "~/aria";
573
- const cloneCmd = `
574
- export NVM_DIR="$HOME/.nvm" && [ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"
575
- if [ -d ${repoDir}/.git ]; then
576
- cd ${repoDir} && git fetch origin && git checkout ${branch} && git pull origin ${branch}
577
- else
578
- git clone --branch ${branch} ${repoUrl} ${repoDir}
579
- fi
580
- `;
581
- const cloneResult = await sshExec(input.target, cloneCmd, {
582
- ...sshOpts,
583
- timeoutMs: 180_000,
584
- });
585
- if (cloneResult.exitCode !== 0) {
586
- return (0, utils_js_1.fail)(`Repo clone/update failed: ${cloneResult.stderr}`);
587
- }
588
- // Step 6b: Pin to exact commit hash if provided (prevents MITM on branch refs)
589
- if (input.commit_hash) {
590
- const checkoutResult = await sshExec(input.target, `cd ${repoDir} && git checkout ${input.commit_hash}`, sshOpts);
591
- if (checkoutResult.exitCode !== 0) {
592
- return (0, utils_js_1.fail)(`Commit hash checkout failed: ${checkoutResult.stderr}`);
593
- }
594
- }
595
- // Step 6c: Verify GPG signature on HEAD if requested
596
- if (input.verify_signatures) {
597
- const gpgResult = await sshExec(input.target, `cd ${repoDir} && git verify-commit HEAD`, sshOpts);
598
- if (gpgResult.exitCode !== 0) {
599
- return (0, utils_js_1.fail)(`GPG signature verification failed: ${gpgResult.stderr}. ` +
600
- `Set verify_signatures=false to skip.`);
601
- }
602
- }
603
- // Step 7: pnpm install && pnpm build
604
- const buildCmd = `
605
- export NVM_DIR="$HOME/.nvm" && [ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"
606
- cd ${repoDir} && pnpm install --frozen-lockfile && pnpm store verify && pnpm build
607
- `;
608
- const buildResult = await sshExec(input.target, buildCmd, {
609
- ...sshOpts,
610
- timeoutMs: 600_000,
611
- });
612
- if (buildResult.exitCode !== 0) {
613
- return (0, utils_js_1.fail)(`Build failed: ${buildResult.stderr}`);
614
- }
615
- // Step 8: Generate Ed25519 signing keypair if not present
616
- const keypairCmd = `
617
- mkdir -p ~/.aria
618
- if [ ! -f ~/.aria/signing-key.json ]; then
619
- node -e "
620
- const crypto = require('crypto');
621
- const { publicKey, privateKey } = crypto.generateKeyPairSync('ed25519');
622
- const pub = publicKey.export({ type: 'spki', format: 'der' }).toString('base64');
623
- const priv = privateKey.export({ type: 'pkcs8', format: 'der' }).toString('base64');
624
- const fp = crypto.createHash('sha256').update(Buffer.from(pub, 'base64')).digest('hex');
625
- const data = JSON.stringify({ publicKey: pub, privateKey: priv, fingerprint: fp }, null, 2);
626
- require('fs').writeFileSync(process.env.HOME + '/.aria/signing-key.json', data, { mode: 0o600 });
627
- console.log(JSON.stringify({ publicKey: pub, fingerprint: fp }));
628
- "
629
- else
630
- node -e "
631
- const data = JSON.parse(require('fs').readFileSync(process.env.HOME + '/.aria/signing-key.json', 'utf8'));
632
- console.log(JSON.stringify({ publicKey: data.publicKey, fingerprint: data.fingerprint }));
633
- "
634
- fi
635
- `;
636
- const keypairResult = await sshExec(input.target, keypairCmd, sshOpts);
637
- if (keypairResult.exitCode !== 0) {
638
- return (0, utils_js_1.fail)(`Keypair generation failed: ${keypairResult.stderr}`);
639
- }
640
- completedSteps.push({ name: "keypair", undoCmd: "" }); // keypair is not rolled back (idempotent)
641
- // A3: Set key file permissions (chmod 600)
642
- const chmodKeyResult = await sshExec(input.target, "chmod 600 ~/.aria/signing-key.json", sshOpts);
643
- if (chmodKeyResult.exitCode !== 0) {
644
- // Non-fatal — best effort
645
- }
646
- let fingerprint = null;
647
- try {
648
- const keypairData = JSON.parse(keypairResult.stdout);
649
- fingerprint = keypairData.fingerprint ?? null;
650
- }
651
- catch {
652
- // Non-fatal — fingerprint is informational
653
- }
654
- // Step 9: TLS cert discovery + optional provisioning
655
- const tlsResult = await sshExec(input.target, TLS_DISCOVERY_SCRIPT, sshOpts);
656
- let tlsInfo = discoverTlsCerts(tlsResult.stdout);
657
- let tlsType = null;
658
- if (tlsInfo.found && tlsInfo.type) {
659
- tlsType = tlsInfo.type;
660
- }
661
- else {
662
- // Try Let's Encrypt auto-provisioning
663
- const hostnameResult = await sshExec(input.target, "hostname -f 2>/dev/null || hostname", sshOpts);
664
- const hostname = hostnameResult.stdout.trim();
665
- // Only attempt certbot if we have a domain name (not just an IP)
666
- if (hostname && !/^[\d.]+$/.test(hostname) && !/^[\da-f:]+$/i.test(hostname)) {
667
- const certbotResult = await sshExec(input.target, `command -v certbot >/dev/null 2>&1 && certbot certonly --standalone -d ${hostname} --non-interactive --agree-tos --register-unsafely-without-email 2>&1 || echo "NO_CERTBOT"`, { ...sshOpts, timeoutMs: 120_000 });
668
- if (certbotResult.exitCode === 0 && !certbotResult.stdout.includes("NO_CERTBOT")) {
669
- tlsInfo = {
670
- found: true,
671
- type: "letsencrypt",
672
- cert: `/etc/letsencrypt/live/${hostname}/fullchain.pem`,
673
- key: `/etc/letsencrypt/live/${hostname}/privkey.pem`,
674
- };
675
- tlsType = "letsencrypt";
676
- }
677
- }
678
- // Fall back to ARIA private CA
679
- if (!tlsType) {
680
- const privateCaCmd = `
681
- export NVM_DIR="$HOME/.nvm" && [ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"
682
- cd ~/aria && node -e "
683
- const { ensureMeshCerts } = require('./packages/server/dist/tls/mesh-certs.js');
684
- ensureMeshCerts().then(r => console.log(JSON.stringify({ cert: r.certPath, key: r.keyPath })));
685
- " 2>/dev/null || echo '{"cert":"~/.aria/tls/server.crt","key":"~/.aria/tls/server.key"}'
686
- `;
687
- const privateCaResult = await sshExec(input.target, privateCaCmd, sshOpts);
688
- try {
689
- const caPaths = JSON.parse(privateCaResult.stdout);
690
- tlsInfo = {
691
- found: true,
692
- type: "private-ca",
693
- cert: caPaths.cert,
694
- key: caPaths.key,
695
- };
696
- tlsType = "private-ca";
697
- }
698
- catch {
699
- // TLS setup failed, proceed without — daemon may still start on HTTP
700
- }
701
- }
702
- }
703
- // Step 10: Firewall port opening (A2 — tracked for rollback)
704
- let firewallType = "none";
705
- if (osInfo.os === "linux") {
706
- const fwDetect = await sshExec(input.target, FIREWALL_DETECT_SCRIPT, sshOpts);
707
- firewallType = fwDetect.stdout.trim();
708
- const fwCmds = getFirewallCommands(firewallType);
709
- if (fwCmds) {
710
- const fwResult = await sshExec(input.target, fwCmds, sshOpts);
711
- if (fwResult.exitCode === 0) {
712
- completedSteps.push({
713
- name: "firewall",
714
- undoCmd: getFirewallUndoCommands(firewallType),
715
- });
716
- }
717
- // Best-effort — don't fail the deploy if firewall commands fail (may need sudo)
718
- }
719
- }
720
- // Derive arion name from target hostname if not provided
721
- const host = input.target.includes("@") ? input.target.split("@")[1] : input.target;
722
- const arionName = input.arion_name ?? host.replace(/[^a-zA-Z0-9-]/g, "-");
723
- // Step 11: Write ~/.aria/config.json (A3 — deep merge for idempotency)
724
- const configObj = buildConfigJson({
725
- arionName,
726
- coordinationUrl: input.coordination_url,
727
- tlsCert: tlsInfo.found ? tlsInfo.cert : undefined,
728
- tlsKey: tlsInfo.found ? tlsInfo.key : undefined,
729
- });
730
- const configJson = JSON.stringify(configObj);
731
- // Escape for shell — replace single quotes
732
- const escapedConfig = configJson.replace(/'/g, "'\\''");
733
- const configCmd = `
734
- mkdir -p ~/.aria
735
- if [ -f ~/.aria/config.json ]; then
736
- node -e "
737
- const fs = require('fs');
738
- const existing = JSON.parse(fs.readFileSync(process.env.HOME + '/.aria/config.json', 'utf8'));
739
- const updates = JSON.parse('${escapedConfig}');
740
- // Deep merge: preserve nested objects
741
- function deepMerge(target, source) {
742
- for (const key of Object.keys(source)) {
743
- if (source[key] && typeof source[key] === 'object' && !Array.isArray(source[key]) &&
744
- target[key] && typeof target[key] === 'object' && !Array.isArray(target[key])) {
745
- deepMerge(target[key], source[key]);
746
- } else {
747
- target[key] = source[key];
748
- }
749
- }
750
- return target;
751
- }
752
- deepMerge(existing, updates);
753
- fs.writeFileSync(process.env.HOME + '/.aria/config.json', JSON.stringify(existing, null, 2), { mode: 0o600 });
754
- "
755
- else
756
- echo '${escapedConfig}' > ~/.aria/config.json && chmod 600 ~/.aria/config.json
757
- fi
758
- `;
759
- const configResult = await sshExec(input.target, configCmd, sshOpts);
760
- if (configResult.exitCode !== 0) {
761
- deployFailed = true;
762
- return (0, utils_js_1.fail)(`Config write failed: ${configResult.stderr}`);
763
- }
764
- completedSteps.push({ name: "config", undoCmd: "rm -f ~/.aria/config.json" });
765
- // A3: Set config file permissions (chmod 600)
766
- await sshExec(input.target, "chmod 600 ~/.aria/config.json", sshOpts);
767
- // Step 12: Start daemon (nohup, backgrounded) on port 443
768
- const runtimePidLookupCmd = buildRemoteRuntimePidLookupCommand(repoDir);
769
- const runtimeStatusLookupCmd = buildRemoteRuntimeStatusLookupCommand(repoDir);
770
- const daemonCmd = `
771
- # Kill existing daemon if running
772
- PID=$(${runtimePidLookupCmd} 2>/dev/null || true)
773
- [ -n "$PID" ] && kill "$PID" 2>/dev/null || true
774
- export NVM_DIR="$HOME/.nvm" && [ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"
775
- cd ${repoDir}
776
- nohup node packages/cli/bin/aria.js daemon --arion ${arionName} --port 443 > ~/.aria/daemon.log 2>&1 &
777
- echo $!
778
- `;
779
- const daemonResult = await sshExec(input.target, daemonCmd, sshOpts);
780
- if (daemonResult.exitCode !== 0) {
781
- deployFailed = true;
782
- return (0, utils_js_1.fail)(`Daemon start failed: ${daemonResult.stderr}`);
783
- }
784
- completedSteps.push({
785
- name: "daemon",
786
- undoCmd: `PID=$(${runtimePidLookupCmd} 2>/dev/null || true); [ -n "$PID" ] && kill "$PID" 2>/dev/null || true`,
787
- });
788
- // Step 13: Health check — wait for runtime owner/socket status then verify endpoint (A3 — mandatory)
789
- const healthCmd = `
790
- for i in $(seq 1 15); do
791
- STATUS=$(${runtimeStatusLookupCmd} 2>/dev/null || true)
792
- if [ -n "$STATUS" ]; then
793
- echo "$STATUS"
794
- exit 0
795
- fi
796
- sleep 1
797
- done
798
- echo "TIMEOUT"
799
- exit 1
800
- `;
801
- const healthResult = await sshExec(input.target, healthCmd, {
802
- ...sshOpts,
803
- timeoutMs: 30_000,
804
- });
805
- let port = null;
806
- if (healthResult.exitCode === 0 && !healthResult.stdout.includes("TIMEOUT")) {
807
- try {
808
- const runtimeStatus = JSON.parse(healthResult.stdout);
809
- port = runtimeStatus.port ?? null;
810
- }
811
- catch {
812
- // Non-fatal
813
- }
814
- }
815
- // A3: Mandatory health check — verify HTTP(S) endpoint returns 2xx
816
- if (port) {
817
- const healthUrl = buildHealthCheckUrl(host, port);
818
- const curlCmd = `curl -sSk -o /dev/null -w "%{http_code}" ${healthUrl} 2>/dev/null || echo "000"`;
819
- const curlResult = await sshExec(input.target, curlCmd, {
820
- ...sshOpts,
821
- timeoutMs: 10_000,
822
- });
823
- const httpCode = parseInt(curlResult.stdout.trim(), 10);
824
- if (isNaN(httpCode) || httpCode < 200 || httpCode >= 300) {
825
- deployFailed = true;
826
- return (0, utils_js_1.fail)(`Health check failed: ${healthUrl} returned HTTP ${curlResult.stdout.trim()}. ` +
827
- `Check ~/.aria/daemon.log on ${input.target}.`);
828
- }
829
- }
830
- else if (healthResult.exitCode !== 0) {
831
- deployFailed = true;
832
- return (0, utils_js_1.fail)(`Health check failed: runtime owner/socket status not available within 15s. ` +
833
- `Check ~/.aria/daemon.log on ${input.target}.`);
834
- }
835
- const output = {
836
- success: true,
837
- host,
838
- port,
839
- fingerprint,
840
- arionName,
841
- tlsType,
842
- };
843
- const statusLine = `Daemon running (port ${port ?? "unknown"})`;
844
- const tlsLine = tlsType ? `TLS: ${tlsType}` : "TLS: none (HTTP only)";
845
- return (0, utils_js_1.success)(`ARIA deployed to ${input.target}.\n` +
846
- `Arion: ${arionName}\n` +
847
- `Fingerprint: ${fingerprint ?? "unknown"}\n` +
848
- `${tlsLine}\n` +
849
- `${statusLine}`, output);
850
- }
851
- catch (error) {
852
- deployFailed = true;
853
- return (0, utils_js_1.fail)(`Deploy failed: ${error instanceof Error ? error.message : String(error)}`);
854
- }
855
- finally {
856
- // A2: Rollback on failure — undo completed steps in reverse order
857
- if (deployFailed && completedSteps.length > 0) {
858
- const rollbackCmds = buildRollbackCommands(completedSteps);
859
- for (const cmd of rollbackCmds) {
860
- try {
861
- await sshExec(input.target, cmd, sshOpts);
862
- }
863
- catch {
864
- // Best-effort rollback — don't throw during cleanup
865
- }
866
- }
867
- }
868
- }
869
- }