@maiaos/cli 0.1.0-canary.2

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 (413) hide show
  1. package/README.md +287 -0
  2. package/dist/bin/maia.NOTICES.txt +59 -0
  3. package/dist/bin/maia.cdx.json +145 -0
  4. package/dist/bin/maia.mjs +2 -0
  5. package/dist/bootstrap/index.d.ts +3 -0
  6. package/dist/bootstrap/index.js +3 -0
  7. package/dist/bootstrap/process.d.ts +5 -0
  8. package/dist/bootstrap/process.js +45 -0
  9. package/dist/bootstrap/run.d.ts +25 -0
  10. package/dist/bootstrap/run.js +95 -0
  11. package/dist/bootstrap/stdio.d.ts +4 -0
  12. package/dist/bootstrap/stdio.js +9 -0
  13. package/dist/cli/cli.d.ts +17 -0
  14. package/dist/cli/cli.js +481 -0
  15. package/dist/cli/environment.d.ts +8 -0
  16. package/dist/cli/environment.js +12 -0
  17. package/dist/cli/index.d.ts +2 -0
  18. package/dist/cli/index.js +2 -0
  19. package/dist/cli/services.d.ts +4 -0
  20. package/dist/cli/services.js +4 -0
  21. package/dist/command-line/context.d.ts +178 -0
  22. package/dist/command-line/context.js +2 -0
  23. package/dist/command-line/index.d.ts +7 -0
  24. package/dist/command-line/index.js +6 -0
  25. package/dist/command-line/input/arguments.d.ts +55 -0
  26. package/dist/command-line/input/arguments.js +220 -0
  27. package/dist/command-line/input/index.d.ts +4 -0
  28. package/dist/command-line/input/index.js +4 -0
  29. package/dist/command-line/input/prompt.d.ts +8 -0
  30. package/dist/command-line/input/prompt.js +44 -0
  31. package/dist/command-line/input/stdin-stream.d.ts +4 -0
  32. package/dist/command-line/input/stdin-stream.js +3 -0
  33. package/dist/command-line/input/stdin.d.ts +11 -0
  34. package/dist/command-line/input/stdin.js +23 -0
  35. package/dist/command-line/json-decoder.d.ts +3 -0
  36. package/dist/command-line/json-decoder.js +3 -0
  37. package/dist/command-line/json.d.ts +3 -0
  38. package/dist/command-line/json.js +4 -0
  39. package/dist/command-line/output.d.ts +57 -0
  40. package/dist/command-line/output.js +94 -0
  41. package/dist/command-line/rows.d.ts +10 -0
  42. package/dist/command-line/rows.js +32 -0
  43. package/dist/command-line/two-phase.d.ts +57 -0
  44. package/dist/command-line/two-phase.js +148 -0
  45. package/dist/command-receipt/command.d.ts +4 -0
  46. package/dist/command-receipt/command.js +59 -0
  47. package/dist/command-receipt/compact-list.d.ts +20 -0
  48. package/dist/command-receipt/compact-list.js +29 -0
  49. package/dist/command-receipt/index.d.ts +3 -0
  50. package/dist/command-receipt/index.js +3 -0
  51. package/dist/command-tree/commands.d.ts +17 -0
  52. package/dist/command-tree/commands.js +41 -0
  53. package/dist/command-tree/completion.d.ts +6 -0
  54. package/dist/command-tree/completion.js +36 -0
  55. package/dist/command-tree/grammar.d.ts +18 -0
  56. package/dist/command-tree/grammar.js +160 -0
  57. package/dist/command-tree/help.d.ts +62 -0
  58. package/dist/command-tree/help.js +219 -0
  59. package/dist/command-tree/index.d.ts +8 -0
  60. package/dist/command-tree/index.js +6 -0
  61. package/dist/command-tree/local.d.ts +3 -0
  62. package/dist/command-tree/local.js +126 -0
  63. package/dist/command-tree/placeholder.d.ts +3 -0
  64. package/dist/command-tree/placeholder.js +4 -0
  65. package/dist/command-tree/row.d.ts +29 -0
  66. package/dist/command-tree/row.js +2 -0
  67. package/dist/command-tree/suggest.d.ts +3 -0
  68. package/dist/command-tree/suggest.js +81 -0
  69. package/dist/command-tree/tree.d.ts +34 -0
  70. package/dist/command-tree/tree.js +124 -0
  71. package/dist/connection/client.d.ts +692 -0
  72. package/dist/connection/client.js +28 -0
  73. package/dist/connection/commands.d.ts +15 -0
  74. package/dist/connection/commands.js +118 -0
  75. package/dist/connection/index.d.ts +7 -0
  76. package/dist/connection/index.js +7 -0
  77. package/dist/connection/input.d.ts +50 -0
  78. package/dist/connection/input.js +90 -0
  79. package/dist/connection/login.d.ts +13 -0
  80. package/dist/connection/login.js +69 -0
  81. package/dist/connection/output/format.d.ts +32 -0
  82. package/dist/connection/output/format.js +94 -0
  83. package/dist/connection/output/index.d.ts +2 -0
  84. package/dist/connection/output/index.js +2 -0
  85. package/dist/connection/resolve.d.ts +60 -0
  86. package/dist/connection/resolve.js +30 -0
  87. package/dist/connection/signin.d.ts +4 -0
  88. package/dist/connection/signin.js +32 -0
  89. package/dist/connection/system.d.ts +4 -0
  90. package/dist/connection/system.js +190 -0
  91. package/dist/connection/tree/index.d.ts +2 -0
  92. package/dist/connection/tree/index.js +2 -0
  93. package/dist/connection/tree/tree.d.ts +3 -0
  94. package/dist/connection/tree/tree.js +209 -0
  95. package/dist/container/client.d.ts +142 -0
  96. package/dist/container/client.js +11 -0
  97. package/dist/container/commands.d.ts +7 -0
  98. package/dist/container/commands.js +100 -0
  99. package/dist/container/index.d.ts +3 -0
  100. package/dist/container/index.js +3 -0
  101. package/dist/container/output/format.d.ts +11 -0
  102. package/dist/container/output/format.js +28 -0
  103. package/dist/container/output/index.d.ts +2 -0
  104. package/dist/container/output/index.js +2 -0
  105. package/dist/context/client.d.ts +7 -0
  106. package/dist/context/client.js +21 -0
  107. package/dist/context/commands.d.ts +3 -0
  108. package/dist/context/commands.js +27 -0
  109. package/dist/context/index.d.ts +3 -0
  110. package/dist/context/index.js +3 -0
  111. package/dist/development/cli.d.ts +3 -0
  112. package/dist/development/cli.js +44 -0
  113. package/dist/execution/client.d.ts +25 -0
  114. package/dist/execution/client.js +24 -0
  115. package/dist/execution/index.d.ts +3 -0
  116. package/dist/execution/index.js +3 -0
  117. package/dist/execution/relocation.d.ts +6 -0
  118. package/dist/execution/relocation.js +123 -0
  119. package/dist/execution/tree/index.d.ts +2 -0
  120. package/dist/execution/tree/index.js +2 -0
  121. package/dist/execution/tree/tree.d.ts +3 -0
  122. package/dist/execution/tree/tree.js +137 -0
  123. package/dist/hold/client.d.ts +137 -0
  124. package/dist/hold/client.js +12 -0
  125. package/dist/hold/commands.d.ts +5 -0
  126. package/dist/hold/commands.js +91 -0
  127. package/dist/hold/index.d.ts +3 -0
  128. package/dist/hold/index.js +3 -0
  129. package/dist/hold/output/format.d.ts +11 -0
  130. package/dist/hold/output/format.js +29 -0
  131. package/dist/hold/output/index.d.ts +2 -0
  132. package/dist/hold/output/index.js +2 -0
  133. package/dist/hold/tree/index.d.ts +2 -0
  134. package/dist/hold/tree/index.js +2 -0
  135. package/dist/hold/tree/tree.d.ts +3 -0
  136. package/dist/hold/tree/tree.js +96 -0
  137. package/dist/import/client.d.ts +14 -0
  138. package/dist/import/client.js +16 -0
  139. package/dist/import/commands.d.ts +5 -0
  140. package/dist/import/commands.js +76 -0
  141. package/dist/import/index.d.ts +3 -0
  142. package/dist/import/index.js +3 -0
  143. package/dist/import/input.d.ts +16 -0
  144. package/dist/import/input.js +92 -0
  145. package/dist/import/output.d.ts +6 -0
  146. package/dist/import/output.js +40 -0
  147. package/dist/index.d.ts +2 -0
  148. package/dist/index.js +2 -0
  149. package/dist/integration/client.d.ts +1284 -0
  150. package/dist/integration/client.js +24 -0
  151. package/dist/integration/commands.d.ts +10 -0
  152. package/dist/integration/commands.js +104 -0
  153. package/dist/integration/index.d.ts +3 -0
  154. package/dist/integration/index.js +3 -0
  155. package/dist/integration/output.d.ts +22 -0
  156. package/dist/integration/output.js +20 -0
  157. package/dist/local-node/call.d.ts +7 -0
  158. package/dist/local-node/call.js +13 -0
  159. package/dist/local-node/client.d.ts +67 -0
  160. package/dist/local-node/client.js +241 -0
  161. package/dist/local-node/index.d.ts +3 -0
  162. package/dist/local-node/index.js +3 -0
  163. package/dist/login/agent-provider.d.ts +20 -0
  164. package/dist/login/agent-provider.js +109 -0
  165. package/dist/login/commands.d.ts +4 -0
  166. package/dist/login/commands.js +93 -0
  167. package/dist/login/failure.d.ts +3 -0
  168. package/dist/login/failure.js +14 -0
  169. package/dist/login/gateway.d.ts +12 -0
  170. package/dist/login/gateway.js +71 -0
  171. package/dist/login/index.d.ts +3 -0
  172. package/dist/login/index.js +2 -0
  173. package/dist/login/menu.d.ts +4 -0
  174. package/dist/login/menu.js +105 -0
  175. package/dist/login/output/format.d.ts +16 -0
  176. package/dist/login/output/format.js +31 -0
  177. package/dist/login/output/index.d.ts +2 -0
  178. package/dist/login/output/index.js +2 -0
  179. package/dist/login/vendor-account.d.ts +95 -0
  180. package/dist/login/vendor-account.js +75 -0
  181. package/dist/login/vendor-input.d.ts +14 -0
  182. package/dist/login/vendor-input.js +36 -0
  183. package/dist/mcp/calls.d.ts +7 -0
  184. package/dist/mcp/calls.js +202 -0
  185. package/dist/mcp/commands.d.ts +9 -0
  186. package/dist/mcp/commands.js +21 -0
  187. package/dist/mcp/index.d.ts +2 -0
  188. package/dist/mcp/index.js +2 -0
  189. package/dist/mcp/server.d.ts +11 -0
  190. package/dist/mcp/server.js +57 -0
  191. package/dist/orchestration/client.d.ts +78 -0
  192. package/dist/orchestration/client.js +89 -0
  193. package/dist/orchestration/commands.d.ts +14 -0
  194. package/dist/orchestration/commands.js +312 -0
  195. package/dist/orchestration/index.d.ts +3 -0
  196. package/dist/orchestration/index.js +3 -0
  197. package/dist/orchestration/output/compact-aggregate.d.ts +121 -0
  198. package/dist/orchestration/output/compact-aggregate.js +110 -0
  199. package/dist/orchestration/output/compact-run-list.d.ts +20 -0
  200. package/dist/orchestration/output/compact-run-list.js +16 -0
  201. package/dist/orchestration/output/human.d.ts +80 -0
  202. package/dist/orchestration/output/human.js +252 -0
  203. package/dist/orchestration/output/index.d.ts +4 -0
  204. package/dist/orchestration/output/index.js +4 -0
  205. package/dist/orchestration/tree/index.d.ts +2 -0
  206. package/dist/orchestration/tree/index.js +2 -0
  207. package/dist/orchestration/tree/tree.d.ts +3 -0
  208. package/dist/orchestration/tree/tree.js +142 -0
  209. package/dist/port-lease/client.d.ts +160 -0
  210. package/dist/port-lease/client.js +11 -0
  211. package/dist/port-lease/commands.d.ts +6 -0
  212. package/dist/port-lease/commands.js +17 -0
  213. package/dist/port-lease/index.d.ts +3 -0
  214. package/dist/port-lease/index.js +3 -0
  215. package/dist/port-lease/input.d.ts +65 -0
  216. package/dist/port-lease/input.js +67 -0
  217. package/dist/port-lease/output/format.d.ts +11 -0
  218. package/dist/port-lease/output/format.js +24 -0
  219. package/dist/port-lease/output/index.d.ts +2 -0
  220. package/dist/port-lease/output/index.js +2 -0
  221. package/dist/presentation/client.d.ts +10 -0
  222. package/dist/presentation/client.js +9 -0
  223. package/dist/presentation/commands.d.ts +6 -0
  224. package/dist/presentation/commands.js +78 -0
  225. package/dist/presentation/index.d.ts +4 -0
  226. package/dist/presentation/index.js +3 -0
  227. package/dist/presentation/output/format.d.ts +11 -0
  228. package/dist/presentation/output/format.js +32 -0
  229. package/dist/presentation/output/index.d.ts +3 -0
  230. package/dist/presentation/output/index.js +2 -0
  231. package/dist/project-guard/client.d.ts +88 -0
  232. package/dist/project-guard/client.js +7 -0
  233. package/dist/project-guard/commands.d.ts +4 -0
  234. package/dist/project-guard/commands.js +39 -0
  235. package/dist/project-guard/index.d.ts +3 -0
  236. package/dist/project-guard/index.js +3 -0
  237. package/dist/project-guard/input.d.ts +18 -0
  238. package/dist/project-guard/input.js +47 -0
  239. package/dist/project-guard/output/format.d.ts +11 -0
  240. package/dist/project-guard/output/format.js +35 -0
  241. package/dist/project-guard/output/index.d.ts +2 -0
  242. package/dist/project-guard/output/index.js +2 -0
  243. package/dist/project-workspace/client.d.ts +86 -0
  244. package/dist/project-workspace/client.js +159 -0
  245. package/dist/project-workspace/commands.d.ts +30 -0
  246. package/dist/project-workspace/commands.js +700 -0
  247. package/dist/project-workspace/index.d.ts +5 -0
  248. package/dist/project-workspace/index.js +5 -0
  249. package/dist/project-workspace/metadata-client.d.ts +99 -0
  250. package/dist/project-workspace/metadata-client.js +8 -0
  251. package/dist/project-workspace/metadata-commands.d.ts +4 -0
  252. package/dist/project-workspace/metadata-commands.js +56 -0
  253. package/dist/project-workspace/output/human.d.ts +126 -0
  254. package/dist/project-workspace/output/human.js +103 -0
  255. package/dist/project-workspace/output/index.d.ts +3 -0
  256. package/dist/project-workspace/output/index.js +3 -0
  257. package/dist/project-workspace/output/metadata.d.ts +11 -0
  258. package/dist/project-workspace/output/metadata.js +17 -0
  259. package/dist/project-workspace/tree/index.d.ts +2 -0
  260. package/dist/project-workspace/tree/index.js +2 -0
  261. package/dist/project-workspace/tree/tree.d.ts +3 -0
  262. package/dist/project-workspace/tree/tree.js +197 -0
  263. package/dist/provider/client.d.ts +6 -0
  264. package/dist/provider/client.js +5 -0
  265. package/dist/provider/commands.d.ts +3 -0
  266. package/dist/provider/commands.js +38 -0
  267. package/dist/provider/index.d.ts +3 -0
  268. package/dist/provider/index.js +3 -0
  269. package/dist/reference/commands.d.ts +3 -0
  270. package/dist/reference/commands.js +39 -0
  271. package/dist/reference/index.d.ts +3 -0
  272. package/dist/reference/index.js +3 -0
  273. package/dist/reference/resolve.d.ts +29 -0
  274. package/dist/reference/resolve.js +294 -0
  275. package/dist/reference/tree/index.d.ts +2 -0
  276. package/dist/reference/tree/index.js +2 -0
  277. package/dist/reference/tree/tree.d.ts +3 -0
  278. package/dist/reference/tree/tree.js +17 -0
  279. package/dist/remote-node/client.d.ts +258 -0
  280. package/dist/remote-node/client.js +12 -0
  281. package/dist/remote-node/commands.d.ts +6 -0
  282. package/dist/remote-node/commands.js +264 -0
  283. package/dist/remote-node/connector.d.ts +59 -0
  284. package/dist/remote-node/connector.js +122 -0
  285. package/dist/remote-node/index.d.ts +4 -0
  286. package/dist/remote-node/index.js +4 -0
  287. package/dist/remote-node/reachability.d.ts +22 -0
  288. package/dist/remote-node/reachability.js +34 -0
  289. package/dist/remote-node/text.d.ts +9 -0
  290. package/dist/remote-node/text.js +64 -0
  291. package/dist/remote-node/tree/index.d.ts +2 -0
  292. package/dist/remote-node/tree/index.js +2 -0
  293. package/dist/remote-node/tree/tree.d.ts +3 -0
  294. package/dist/remote-node/tree/tree.js +51 -0
  295. package/dist/run-ledger/client.d.ts +358 -0
  296. package/dist/run-ledger/client.js +13 -0
  297. package/dist/run-ledger/commands.d.ts +8 -0
  298. package/dist/run-ledger/commands.js +19 -0
  299. package/dist/run-ledger/index.d.ts +3 -0
  300. package/dist/run-ledger/index.js +3 -0
  301. package/dist/run-ledger/input.d.ts +42 -0
  302. package/dist/run-ledger/input.js +107 -0
  303. package/dist/run-ledger/output/format.d.ts +11 -0
  304. package/dist/run-ledger/output/format.js +49 -0
  305. package/dist/run-ledger/output/index.d.ts +2 -0
  306. package/dist/run-ledger/output/index.js +2 -0
  307. package/dist/session/agent-permission.d.ts +63 -0
  308. package/dist/session/agent-permission.js +20 -0
  309. package/dist/session/approval/client.d.ts +117 -0
  310. package/dist/session/approval/client.js +7 -0
  311. package/dist/session/approval/commands.d.ts +7 -0
  312. package/dist/session/approval/commands.js +123 -0
  313. package/dist/session/approval/index.d.ts +3 -0
  314. package/dist/session/approval/index.js +3 -0
  315. package/dist/session/approval/output/format.d.ts +12 -0
  316. package/dist/session/approval/output/format.js +25 -0
  317. package/dist/session/approval/output/index.d.ts +2 -0
  318. package/dist/session/approval/output/index.js +2 -0
  319. package/dist/session/attach-client.d.ts +16 -0
  320. package/dist/session/attach-client.js +8 -0
  321. package/dist/session/attach-render.d.ts +16 -0
  322. package/dist/session/attach-render.js +154 -0
  323. package/dist/session/attach.d.ts +5 -0
  324. package/dist/session/attach.js +106 -0
  325. package/dist/session/client.d.ts +132 -0
  326. package/dist/session/client.js +128 -0
  327. package/dist/session/coding-client.d.ts +16 -0
  328. package/dist/session/coding-client.js +15 -0
  329. package/dist/session/coding-commands.d.ts +4 -0
  330. package/dist/session/coding-commands.js +50 -0
  331. package/dist/session/commands.d.ts +13 -0
  332. package/dist/session/commands.js +488 -0
  333. package/dist/session/create-tasks.d.ts +20 -0
  334. package/dist/session/create-tasks.js +110 -0
  335. package/dist/session/index.d.ts +9 -0
  336. package/dist/session/index.js +7 -0
  337. package/dist/session/interaction/client.d.ts +347 -0
  338. package/dist/session/interaction/client.js +15 -0
  339. package/dist/session/interaction/commands.d.ts +7 -0
  340. package/dist/session/interaction/commands.js +101 -0
  341. package/dist/session/interaction/index.d.ts +3 -0
  342. package/dist/session/interaction/index.js +3 -0
  343. package/dist/session/interaction/input.d.ts +15 -0
  344. package/dist/session/interaction/input.js +46 -0
  345. package/dist/session/interaction/output/format.d.ts +11 -0
  346. package/dist/session/interaction/output/format.js +3 -0
  347. package/dist/session/interaction/output/index.d.ts +2 -0
  348. package/dist/session/interaction/output/index.js +2 -0
  349. package/dist/session/output/diff.d.ts +3 -0
  350. package/dist/session/output/diff.js +30 -0
  351. package/dist/session/output/failure.d.ts +11 -0
  352. package/dist/session/output/failure.js +24 -0
  353. package/dist/session/output/human.d.ts +112 -0
  354. package/dist/session/output/human.js +71 -0
  355. package/dist/session/output/index.d.ts +6 -0
  356. package/dist/session/output/index.js +6 -0
  357. package/dist/session/output/observe.d.ts +4 -0
  358. package/dist/session/output/observe.js +46 -0
  359. package/dist/session/output/tasks.d.ts +19 -0
  360. package/dist/session/output/tasks.js +34 -0
  361. package/dist/session/rename.d.ts +3 -0
  362. package/dist/session/rename.js +37 -0
  363. package/dist/session/task-file.d.ts +5 -0
  364. package/dist/session/task-file.js +23 -0
  365. package/dist/session/tree/index.d.ts +2 -0
  366. package/dist/session/tree/index.js +2 -0
  367. package/dist/session/tree/tree.d.ts +3 -0
  368. package/dist/session/tree/tree.js +309 -0
  369. package/dist/session/turn/client.d.ts +25 -0
  370. package/dist/session/turn/client.js +40 -0
  371. package/dist/session/turn/commands.d.ts +6 -0
  372. package/dist/session/turn/commands.js +157 -0
  373. package/dist/session/turn/index.d.ts +4 -0
  374. package/dist/session/turn/index.js +3 -0
  375. package/dist/session/turn/output.d.ts +42 -0
  376. package/dist/session/turn/output.js +38 -0
  377. package/dist/status/client.d.ts +119 -0
  378. package/dist/status/client.js +5 -0
  379. package/dist/status/command.d.ts +4 -0
  380. package/dist/status/command.js +40 -0
  381. package/dist/status/doctor.d.ts +15 -0
  382. package/dist/status/doctor.js +111 -0
  383. package/dist/status/index.d.ts +5 -0
  384. package/dist/status/index.js +4 -0
  385. package/dist/status/output/compact.d.ts +31 -0
  386. package/dist/status/output/compact.js +46 -0
  387. package/dist/status/output/human.d.ts +7 -0
  388. package/dist/status/output/human.js +30 -0
  389. package/dist/status/output/index.d.ts +3 -0
  390. package/dist/status/output/index.js +3 -0
  391. package/dist/terminal/arguments.d.ts +13 -0
  392. package/dist/terminal/arguments.js +79 -0
  393. package/dist/terminal/client.d.ts +79 -0
  394. package/dist/terminal/client.js +68 -0
  395. package/dist/terminal/commands.d.ts +7 -0
  396. package/dist/terminal/commands.js +131 -0
  397. package/dist/terminal/control-commands.d.ts +10 -0
  398. package/dist/terminal/control-commands.js +212 -0
  399. package/dist/terminal/index.d.ts +4 -0
  400. package/dist/terminal/index.js +4 -0
  401. package/dist/terminal/output/compact-list.d.ts +147 -0
  402. package/dist/terminal/output/compact-list.js +152 -0
  403. package/dist/terminal/output/human.d.ts +59 -0
  404. package/dist/terminal/output/human.js +55 -0
  405. package/dist/terminal/output/index.d.ts +3 -0
  406. package/dist/terminal/output/index.js +3 -0
  407. package/dist/terminal/tree/index.d.ts +2 -0
  408. package/dist/terminal/tree/index.js +2 -0
  409. package/dist/terminal/tree/tree.d.ts +3 -0
  410. package/dist/terminal/tree/tree.js +104 -0
  411. package/guidance/maia-cli/SKILL.md +58 -0
  412. package/guidance/maia-orchestration/SKILL.md +54 -0
  413. package/package.json +76 -0
@@ -0,0 +1,24 @@
1
+ import { integrationApplyClaudeCodeParametersSchema, integrationApplyCodexParametersSchema, integrationPlanClaudeCodeParametersSchema, integrationPlanCodexParametersSchema, integrationRemoveClaudeCodeParametersSchema, integrationRemoveCodexParametersSchema, integrationStatusClaudeCodeParametersSchema, integrationStatusCodexParametersSchema, } from "@maiaos/sdk";
2
+ const readClient = (node) => ({
3
+ planCodexIntegration: (input) => node.runValidatedNodeOperation(input, integrationPlanCodexParametersSchema, (client, parameters, options) => client.planCodexIntegration(parameters, options)),
4
+ statusCodexIntegration: (input) => node.runValidatedNodeOperation(input, integrationStatusCodexParametersSchema, (client, parameters, options) => client.statusCodexIntegration(parameters, options)),
5
+ });
6
+ const mutationClient = (node) => ({
7
+ applyCodexIntegration: (input) => node.runValidatedNodeOperation(input, integrationApplyCodexParametersSchema, (client, parameters, options) => client.applyCodexIntegration(parameters, options), { commandId: input.commandId }),
8
+ removeCodexIntegration: (input) => node.runValidatedNodeOperation(input, integrationRemoveCodexParametersSchema, (client, parameters, options) => client.removeCodexIntegration(parameters, options), { commandId: input.commandId }),
9
+ });
10
+ const claudeCodeReadClient = (node) => ({
11
+ planClaudeCodeIntegration: (input) => node.runValidatedNodeOperation(input, integrationPlanClaudeCodeParametersSchema, (client, parameters, options) => client.planClaudeCodeIntegration(parameters, options)),
12
+ statusClaudeCodeIntegration: (input) => node.runValidatedNodeOperation(input, integrationStatusClaudeCodeParametersSchema, (client, parameters, options) => client.statusClaudeCodeIntegration(parameters, options)),
13
+ });
14
+ const claudeCodeMutationClient = (node) => ({
15
+ applyClaudeCodeIntegration: (input) => node.runValidatedNodeOperation(input, integrationApplyClaudeCodeParametersSchema, (client, parameters, options) => client.applyClaudeCodeIntegration(parameters, options), { commandId: input.commandId }),
16
+ removeClaudeCodeIntegration: (input) => node.runValidatedNodeOperation(input, integrationRemoveClaudeCodeParametersSchema, (client, parameters, options) => client.removeClaudeCodeIntegration(parameters, options), { commandId: input.commandId }),
17
+ });
18
+ export const makeIntegrationClient = (node) => ({
19
+ ...readClient(node),
20
+ ...mutationClient(node),
21
+ ...claudeCodeReadClient(node),
22
+ ...claudeCodeMutationClient(node),
23
+ });
24
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1,10 @@
1
+ import { type CommandContext, type CommandEffect } from "../command-line/index.js";
2
+ export declare const runPlanCodex: (tokens: readonly string[], context: CommandContext) => CommandEffect;
3
+ export declare const runStatusCodex: (tokens: readonly string[], context: CommandContext) => CommandEffect;
4
+ export declare const runApplyCodex: (tokens: readonly string[], context: CommandContext) => CommandEffect;
5
+ export declare const runRemoveCodex: (tokens: readonly string[], context: CommandContext) => CommandEffect;
6
+ export declare const runPlanClaudeCode: (tokens: readonly string[], context: CommandContext) => CommandEffect;
7
+ export declare const runStatusClaudeCode: (tokens: readonly string[], context: CommandContext) => CommandEffect;
8
+ export declare const runApplyClaudeCode: (tokens: readonly string[], context: CommandContext) => CommandEffect;
9
+ export declare const runRemoveClaudeCode: (tokens: readonly string[], context: CommandContext) => CommandEffect;
10
+ //# sourceMappingURL=commands.d.ts.map
@@ -0,0 +1,104 @@
1
+ import * as Effect from "effect/Effect";
2
+ import { CliArgumentError, parseOptions, reportError, requirePositionals, writeNodeResult, } from "../command-line/index.js";
3
+ import { commandIdentifier } from "../local-node/index.js";
4
+ import { formatIntegrationApply, formatIntegrationPlan, formatIntegrationRemove, formatIntegrationStatus, } from "./output.js";
5
+ const withInput = (operation, input) => operation === undefined ? undefined : () => operation(input);
6
+ const codexOperations = (dependencies, commandId) => ({
7
+ apply: dependencies.applyCodexIntegration,
8
+ plan: withInput(dependencies.planCodexIntegration, { integration: "codex" }),
9
+ remove: withInput(dependencies.removeCodexIntegration, {
10
+ commandId,
11
+ integration: "codex",
12
+ }),
13
+ status: withInput(dependencies.statusCodexIntegration, {
14
+ integration: "codex",
15
+ }),
16
+ });
17
+ const claudeCodeOperations = (dependencies, commandId) => ({
18
+ apply: dependencies.applyClaudeCodeIntegration,
19
+ plan: withInput(dependencies.planClaudeCodeIntegration, {
20
+ integration: "claude-code",
21
+ }),
22
+ remove: withInput(dependencies.removeClaudeCodeIntegration, {
23
+ commandId,
24
+ integration: "claude-code",
25
+ }),
26
+ status: withInput(dependencies.statusClaudeCodeIntegration, {
27
+ integration: "claude-code",
28
+ }),
29
+ });
30
+ const vendorOperations = (dependencies, vendor, commandId) => vendor === "codex"
31
+ ? codexOperations(dependencies, commandId)
32
+ : claudeCodeOperations(dependencies, commandId);
33
+ const missingClient = (context) => reportError({
34
+ code: "internal_error",
35
+ message: "The integration client is unavailable.",
36
+ retryable: false,
37
+ }, context);
38
+ const readCommandId = (tokens, options = []) => {
39
+ const parsed = parseOptions(tokens, new Set(["--command-id", ...options]));
40
+ requirePositionals(parsed.positionals, 0);
41
+ return {
42
+ commandId: parsed.options.get("--command-id"),
43
+ options: parsed.options,
44
+ };
45
+ };
46
+ const APPLY_PRESENTER = {
47
+ toResult: (result) => ({ command: "integration.apply", result }),
48
+ toText: formatIntegrationApply,
49
+ };
50
+ const PLAN_PRESENTER = {
51
+ toResult: (result) => ({ command: "integration.plan", result }),
52
+ toText: formatIntegrationPlan,
53
+ };
54
+ const REMOVE_PRESENTER = {
55
+ toResult: (result) => ({ command: "integration.remove", result }),
56
+ toText: formatIntegrationRemove,
57
+ };
58
+ const STATUS_PRESENTER = {
59
+ toResult: (result) => ({ command: "integration.status", result }),
60
+ toText: formatIntegrationStatus,
61
+ };
62
+ const runReads = (input, rest, context) => Effect.gen(function* () {
63
+ requirePositionals(parseOptions(rest, new Set()).positionals, 0);
64
+ const operations = vendorOperations(context.dependencies, input.vendor, "");
65
+ if (input.action === "plan")
66
+ return operations.plan === undefined
67
+ ? missingClient(context)
68
+ : writeNodeResult(yield* operations.plan(), context, PLAN_PRESENTER);
69
+ return operations.status === undefined
70
+ ? missingClient(context)
71
+ : writeNodeResult(yield* operations.status(), context, STATUS_PRESENTER);
72
+ });
73
+ const runApply = (vendor, rest, context) => Effect.gen(function* () {
74
+ const parsed = readCommandId(rest, ["--plan"]);
75
+ const planId = parsed.options.get("--plan");
76
+ if (planId === undefined)
77
+ throw new CliArgumentError("Option '--plan' is required.");
78
+ const commandId = yield* commandIdentifier(parsed.commandId);
79
+ const { apply } = vendorOperations(context.dependencies, vendor, commandId);
80
+ return apply === undefined
81
+ ? missingClient(context)
82
+ : writeNodeResult(yield* apply({ commandId, planId }), context, APPLY_PRESENTER);
83
+ });
84
+ const runMutations = (input, rest, context) => Effect.gen(function* () {
85
+ if (input.action === "apply")
86
+ return yield* runApply(input.vendor, rest, context);
87
+ const commandId = yield* commandIdentifier(readCommandId(rest).commandId);
88
+ const { remove } = vendorOperations(context.dependencies, input.vendor, commandId);
89
+ return remove === undefined
90
+ ? missingClient(context)
91
+ : writeNodeResult(yield* remove(), context, REMOVE_PRESENTER);
92
+ });
93
+ const integrationLeaf = (action, vendor) => (tokens, context) => action === "plan" || action === "status"
94
+ ? runReads({ action, vendor }, tokens, context)
95
+ : runMutations({ action, vendor }, tokens, context);
96
+ export const runPlanCodex = integrationLeaf("plan", "codex");
97
+ export const runStatusCodex = integrationLeaf("status", "codex");
98
+ export const runApplyCodex = integrationLeaf("apply", "codex");
99
+ export const runRemoveCodex = integrationLeaf("remove", "codex");
100
+ export const runPlanClaudeCode = integrationLeaf("plan", "claude-code");
101
+ export const runStatusClaudeCode = integrationLeaf("status", "claude-code");
102
+ export const runApplyClaudeCode = integrationLeaf("apply", "claude-code");
103
+ export const runRemoveClaudeCode = integrationLeaf("remove", "claude-code");
104
+ //# sourceMappingURL=commands.js.map
@@ -0,0 +1,3 @@
1
+ export { type IntegrationCliDependencies, makeIntegrationClient, } from "./client.js";
2
+ export { runApplyClaudeCode, runApplyCodex, runPlanClaudeCode, runPlanCodex, runRemoveClaudeCode, runRemoveCodex, runStatusClaudeCode, runStatusCodex, } from "./commands.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,3 @@
1
+ export { makeIntegrationClient, } from "./client.js";
2
+ export { runApplyClaudeCode, runApplyCodex, runPlanClaudeCode, runPlanCodex, runRemoveClaudeCode, runRemoveCodex, runStatusClaudeCode, runStatusCodex, } from "./commands.js";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,22 @@
1
+ import type { IntegrationApplyClaudeCodeResult, IntegrationApplyCodexResult, IntegrationApplyPiRpcResult, IntegrationPlanClaudeCodeResult, IntegrationPlanCodexResult, IntegrationPlanPiRpcResult, IntegrationRemoveClaudeCodeResult, IntegrationRemoveCodexResult, IntegrationRemovePiRpcResult, IntegrationStatusClaudeCodeResult, IntegrationStatusCodexResult, IntegrationStatusPiRpcResult } from "@maiaos/sdk";
2
+ export type CliIntegrationPlan = {
3
+ readonly command: "integration.plan";
4
+ readonly result: IntegrationPlanClaudeCodeResult | IntegrationPlanCodexResult | IntegrationPlanPiRpcResult;
5
+ };
6
+ export type CliIntegrationApply = {
7
+ readonly command: "integration.apply";
8
+ readonly result: IntegrationApplyClaudeCodeResult | IntegrationApplyCodexResult | IntegrationApplyPiRpcResult;
9
+ };
10
+ export type CliIntegrationRemove = {
11
+ readonly command: "integration.remove";
12
+ readonly result: IntegrationRemoveClaudeCodeResult | IntegrationRemoveCodexResult | IntegrationRemovePiRpcResult;
13
+ };
14
+ export type CliIntegrationStatus = {
15
+ readonly command: "integration.status";
16
+ readonly result: IntegrationStatusClaudeCodeResult | IntegrationStatusCodexResult | IntegrationStatusPiRpcResult;
17
+ };
18
+ export declare const formatIntegrationPlan: ({ result, }: CliIntegrationPlan) => string;
19
+ export declare const formatIntegrationApply: ({ result, }: CliIntegrationApply) => string;
20
+ export declare const formatIntegrationRemove: ({ result, }: CliIntegrationRemove) => string;
21
+ export declare const formatIntegrationStatus: ({ result, }: CliIntegrationStatus) => string;
22
+ //# sourceMappingURL=output.d.ts.map
@@ -0,0 +1,20 @@
1
+ export const formatIntegrationPlan = ({ result, }) => {
2
+ const { integration, plan } = result;
3
+ const { expiresAt, planId, target } = plan;
4
+ const identity = target.adapter === "pi-rpc"
5
+ ? target.packageClosure.closureSha256
6
+ : `${target.executablePath}\t${target.executableSha256}`;
7
+ return `${integration}\tplanned\t${planId}\t${expiresAt}\t${identity}\nnext: maia integration apply ${integration} --plan ${planId}\n`;
8
+ };
9
+ export const formatIntegrationApply = ({ result, }) => `${result.integration}\t${result.authorization.state}\t${result.authorization.revision}\n`;
10
+ export const formatIntegrationRemove = ({ result, }) => `${result.integration}\t${result.outcome}\t${result.authorization.revision}\n`;
11
+ export const formatIntegrationStatus = ({ result, }) => {
12
+ const [item] = result.items;
13
+ if (!item.authorizationAvailable)
14
+ return `${result.integration}\tunavailable\t${item.reason}\t${item.nextAction}\n`;
15
+ const recovery = item.nextAction === "inspect_cleanup_unknown"
16
+ ? `\nnext: end any ${result.integration} or maia-process-host process left from before a crash, then maia integration remove ${result.integration}, plan and apply`
17
+ : "";
18
+ return `${result.integration}\t${item.authorization.state}\t${item.authorization.revision}\t${item.nextAction}${recovery}\n`;
19
+ };
20
+ //# sourceMappingURL=output.js.map
@@ -0,0 +1,7 @@
1
+ import type { LocalNodeCallMethod, LocalNodeCallParameters, LocalNodeCallResult } from "@maiaos/sdk";
2
+ import type { CliNodeEffect, CliNodeOperations } from "./client.js";
3
+ export type CliNodeCall = <TMethod extends LocalNodeCallMethod>(method: TMethod, parameters: LocalNodeCallParameters<TMethod>) => CliNodeEffect<LocalNodeCallResult<TMethod>>;
4
+ export declare const makeCallClient: (node: CliNodeOperations) => {
5
+ readonly call: CliNodeCall;
6
+ };
7
+ //# sourceMappingURL=call.d.ts.map
@@ -0,0 +1,13 @@
1
+ const commandIdOf = (parameters) => {
2
+ const commandId = typeof parameters === "object" && parameters !== null
3
+ ? Reflect.get(parameters, "commandId")
4
+ : undefined;
5
+ return typeof commandId === "string" ? commandId : undefined;
6
+ };
7
+ export const makeCallClient = (node) => ({
8
+ call: (method, parameters) => {
9
+ const commandId = commandIdOf(parameters);
10
+ return node.runNodeClientOperation((client, options) => client.call(method, parameters, options), commandId === undefined ? undefined : { commandId });
11
+ },
12
+ });
13
+ //# sourceMappingURL=call.js.map
@@ -0,0 +1,67 @@
1
+ import type { LocalNodeRequestOptions, LocalNodeStatusResult, ProtocolError } from "@maiaos/sdk";
2
+ import type { DiscoveredNodeApiEffectConnection, LocalNodeEffectClient, NodeApiEffectDiscoveryOptions } from "@maiaos/sdk/node/effect";
3
+ import * as Crypto from "effect/Crypto";
4
+ import * as Effect from "effect/Effect";
5
+ import * as Schedule from "effect/Schedule";
6
+ export type CliMutationRecovery = {
7
+ readonly commandId: string;
8
+ };
9
+ export type CliNodeResult<TValue> = {
10
+ readonly error: ProtocolError;
11
+ readonly ok: false;
12
+ readonly recovery?: CliMutationRecovery;
13
+ } | {
14
+ readonly ok: true;
15
+ readonly value: TValue;
16
+ };
17
+ export type CliNodeConnection = Pick<DiscoveredNodeApiEffectConnection, "client" | "status">;
18
+ export type CliNodeConnector = (options: NodeApiEffectDiscoveryOptions) => Effect.Effect<CliNodeConnection, unknown, Crypto.Crypto>;
19
+ export declare const newCliIdentifier: (prefix: "command" | "request") => Effect.Effect<string, never, Crypto.Crypto>;
20
+ export declare const commandIdentifier: (commandId: string | undefined) => Effect.Effect<string, never, Crypto.Crypto>;
21
+ export declare const fillCommandIdentifier: (input: unknown) => Effect.Effect<unknown, never, Crypto.Crypto>;
22
+ export declare const connectLocalNode: CliNodeConnector;
23
+ export declare const outcomeCanBeAmbiguous: (error: unknown) => boolean;
24
+ export declare const invalidNodeInput: <TValue>(schemaError?: unknown) => Effect.Effect<CliNodeResult<TValue>>;
25
+ export type ParameterSchema<TParameters> = {
26
+ readonly safeParse: (input: unknown) => {
27
+ readonly data: TParameters;
28
+ readonly success: true;
29
+ } | {
30
+ readonly error?: unknown;
31
+ readonly success: false;
32
+ };
33
+ };
34
+ export type CliNodeEffect<TValue> = Effect.Effect<CliNodeResult<TValue>, never, Crypto.Crypto>;
35
+ export type CliNodeOperations = {
36
+ readonly asCoordinator: () => CliNodeOperations;
37
+ readonly asSession: () => CliNodeOperations;
38
+ readonly readStatus: Effect.Effect<LocalNodeStatusResult, unknown, Crypto.Crypto>;
39
+ readonly runDiscoveryOperation: <TValue>(operation: (options: NodeApiEffectDiscoveryOptions) => Effect.Effect<TValue, unknown, Crypto.Crypto>, recovery?: CliMutationRecovery) => CliNodeEffect<TValue>;
40
+ readonly runNodeClientOperation: <TValue>(operation: (client: LocalNodeEffectClient, options: LocalNodeRequestOptions) => Effect.Effect<TValue, unknown>, recovery?: CliMutationRecovery) => CliNodeEffect<TValue>;
41
+ readonly runValidatedNodeOperation: <TParameters, TValue>(input: unknown, schema: ParameterSchema<TParameters>, operation: (client: LocalNodeEffectClient, parameters: TParameters, options: LocalNodeRequestOptions) => Effect.Effect<TValue, unknown>, recovery?: CliMutationRecovery) => CliNodeEffect<TValue>;
42
+ };
43
+ export type CliNodeOperationsOptions = {
44
+ readonly connector?: CliNodeConnector;
45
+ readonly discoveryOptions?: Effect.Effect<NodeApiEffectDiscoveryOptions, unknown> | NodeApiEffectDiscoveryOptions;
46
+ readonly remote?: boolean;
47
+ readonly requireSession?: boolean;
48
+ };
49
+ export type CliNodeBinding = {
50
+ readonly connector?: CliNodeConnector;
51
+ readonly profile?: string;
52
+ readonly remote?: boolean;
53
+ };
54
+ type LazyNodeDependencyInput<TModule, TClient> = {
55
+ readonly arguments_: readonly unknown[];
56
+ readonly binding: CliNodeBinding;
57
+ readonly loadClient: () => Promise<TModule>;
58
+ readonly makeClient: (module: TModule, node: CliNodeOperations) => TClient;
59
+ readonly name: keyof TClient;
60
+ };
61
+ export declare const isBriefSaturation: (error: unknown) => boolean;
62
+ export declare const SATURATION_RETRY: Schedule.Schedule<import("effect/Duration").Duration, unknown, never, never>;
63
+ export declare const makeCliNodeOperations: (options?: CliNodeOperationsOptions) => CliNodeOperations;
64
+ export declare const discoveryOptionsFor: (profile: string | undefined) => Effect.Effect<NodeApiEffectDiscoveryOptions, unknown>;
65
+ export declare const runLazyNodeDependency: <TModule, TClient>(input: LazyNodeDependencyInput<TModule, TClient>) => Effect.Effect<unknown, unknown, Crypto.Crypto>;
66
+ export {};
67
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1,241 @@
1
+ import { protocolErrorSchema } from "@maiaos/sdk";
2
+ import * as Cause from "effect/Cause";
3
+ import * as Config from "effect/Config";
4
+ import * as Crypto from "effect/Crypto";
5
+ import * as Data from "effect/Data";
6
+ import * as Effect from "effect/Effect";
7
+ import * as Option from "effect/Option";
8
+ import * as Predicate from "effect/Predicate";
9
+ import * as Schedule from "effect/Schedule";
10
+ export const newCliIdentifier = (prefix) => Effect.gen(function* () {
11
+ const crypto = yield* Crypto.Crypto;
12
+ const uuid = yield* Effect.orDie(crypto.randomUUIDv4);
13
+ return `${prefix}_${uuid.replaceAll("-", "")}`;
14
+ });
15
+ export const commandIdentifier = (commandId) => commandId === undefined
16
+ ? newCliIdentifier("command")
17
+ : Effect.succeed(commandId);
18
+ export const fillCommandIdentifier = (input) => typeof input === "object" &&
19
+ input !== null &&
20
+ "commandId" in input &&
21
+ input.commandId === undefined
22
+ ? Effect.map(newCliIdentifier("command"), (commandId) => ({
23
+ ...input,
24
+ commandId,
25
+ }))
26
+ : Effect.succeed(input);
27
+ const testRuntimeRootMissing = () => new Error("The CLI test runtime root is missing.");
28
+ const cliDiscoveryOptions = Effect.gen(function* () {
29
+ const testMode = yield* Config.option(Config.String("MAIA_CLI_TEST_MODE"));
30
+ if (Option.getOrUndefined(testMode) !== "1")
31
+ return {};
32
+ const root = yield* Config.option(Config.String("MAIA_CLI_TEST_RUNTIME_ROOT"));
33
+ return Option.isSome(root)
34
+ ? { runtimeRootOverride: root.value }
35
+ : yield* Effect.fail(testRuntimeRootMissing());
36
+ });
37
+ export const connectLocalNode = (options) => Effect.promise(() => import("@maiaos/sdk/node/effect")).pipe(Effect.flatMap((sdk) => sdk.connectNodeApiEffect(options)));
38
+ class CliLocalNodeError extends Data.TaggedError("CliLocalNodeError") {
39
+ }
40
+ const SESSION_CREDENTIAL_VARIABLE = "MAIA_SESSION_CREDENTIAL";
41
+ const SESSION_NODE_ORIGIN_VARIABLE = "MAIA_NODE_ORIGIN";
42
+ const SESSION_NODE_ORIGIN = /^http:\/\/127\.0\.0\.1:[1-9]\d{0,4}$/u;
43
+ const sessionLaunchInvalid = () => new CliLocalNodeError({
44
+ error: {
45
+ code: "configuration_invalid",
46
+ message: `${SESSION_CREDENTIAL_VARIABLE} is set without a valid ${SESSION_NODE_ORIGIN_VARIABLE}.`,
47
+ retryable: false,
48
+ },
49
+ });
50
+ const sessionRemoteDenied = () => new CliLocalNodeError({
51
+ error: {
52
+ code: "role_denied",
53
+ message: "A Session credential cannot address another Node with --node.",
54
+ retryable: false,
55
+ },
56
+ });
57
+ const remoteDiscoveryDenied = () => new CliLocalNodeError({
58
+ error: {
59
+ code: "invalid_argument",
60
+ message: "Attached Session operations cannot run with --node.",
61
+ retryable: false,
62
+ },
63
+ });
64
+ const sessionAttachmentDenied = () => new CliLocalNodeError({
65
+ error: {
66
+ code: "role_denied",
67
+ message: "A Session credential cannot run attached operations.",
68
+ retryable: false,
69
+ },
70
+ });
71
+ const sessionLaunch = Effect.gen(function* () {
72
+ const credential = yield* Config.option(Config.String(SESSION_CREDENTIAL_VARIABLE));
73
+ const origin = yield* Config.option(Config.String(SESSION_NODE_ORIGIN_VARIABLE));
74
+ if (Option.isNone(credential) && Option.isNone(origin))
75
+ return Option.none();
76
+ if (Option.isNone(credential) ||
77
+ Option.isNone(origin) ||
78
+ !SESSION_NODE_ORIGIN.test(origin.value))
79
+ return yield* Effect.fail(sessionLaunchInvalid());
80
+ return Option.some({ credential: credential.value, origin: origin.value });
81
+ });
82
+ const connectSession = (options) => Effect.promise(() => import("@maiaos/sdk/node/effect")).pipe(Effect.flatMap((sdk) => sdk.connectSessionNodeApiEffect(options)));
83
+ const LOCAL_DEADLINE_ERROR = {
84
+ code: "deadline_exceeded",
85
+ message: "Local request expired before dispatch.",
86
+ retryable: true,
87
+ };
88
+ const LOCAL_OUTCOME_UNKNOWN_ERROR = {
89
+ code: "outcome_unknown",
90
+ message: "Local request outcome unknown.",
91
+ retryable: false,
92
+ };
93
+ const LOCAL_SATURATED_ERROR = {
94
+ code: "saturated",
95
+ message: "Local node saturated.",
96
+ retryable: true,
97
+ };
98
+ const maiaClientErrorCode = (error) => {
99
+ if (!(error instanceof Error) ||
100
+ error.name !== "MaiaClientError" ||
101
+ !("code" in error) ||
102
+ typeof error.code !== "string")
103
+ return undefined;
104
+ return error.code;
105
+ };
106
+ const localOperationError = (code) => {
107
+ if (code === "deadline_exceeded")
108
+ return LOCAL_DEADLINE_ERROR;
109
+ if (code === "outcome_unknown")
110
+ return LOCAL_OUTCOME_UNKNOWN_ERROR;
111
+ if (code === "saturated")
112
+ return LOCAL_SATURATED_ERROR;
113
+ };
114
+ const operationError = (error) => {
115
+ if (error instanceof CliLocalNodeError)
116
+ return error.error;
117
+ const remoteError = error instanceof Error && "remoteError" in error
118
+ ? error.remoteError
119
+ : undefined;
120
+ const parsed = protocolErrorSchema.safeParse(remoteError);
121
+ if (parsed.success)
122
+ return parsed.data;
123
+ const clientErrorCode = maiaClientErrorCode(error);
124
+ if (clientErrorCode === "invalid_request") {
125
+ return {
126
+ code: "invalid_argument",
127
+ message: "Command input is invalid.",
128
+ retryable: false,
129
+ };
130
+ }
131
+ if (clientErrorCode !== undefined) {
132
+ const local = localOperationError(clientErrorCode);
133
+ if (local !== undefined)
134
+ return local;
135
+ }
136
+ return {
137
+ code: "node_unavailable",
138
+ message: "The local Maia node is unavailable: start it with 'maia-node --desktop', or 'pnpm dev:node' in a dev worktree, then retry.",
139
+ retryable: true,
140
+ };
141
+ };
142
+ export const outcomeCanBeAmbiguous = (error) => maiaClientErrorCode(error) === "outcome_unknown";
143
+ const MAX_INPUT_ISSUE_LENGTH = 512;
144
+ const inputIssue = (error) => {
145
+ const text = Predicate.hasProperty(error, "message") && Predicate.isString(error.message)
146
+ ? error.message.replaceAll(/\s*\n\s*/gu, " ").trim()
147
+ : "";
148
+ if (text === "")
149
+ return "";
150
+ return `: ${text.length > MAX_INPUT_ISSUE_LENGTH ? `${text.slice(0, MAX_INPUT_ISSUE_LENGTH)}…` : text}`;
151
+ };
152
+ export const invalidNodeInput = (schemaError) => Effect.succeed({
153
+ error: {
154
+ code: "invalid_argument",
155
+ message: `The command input is invalid${inputIssue(schemaError)}.`,
156
+ retryable: false,
157
+ },
158
+ ok: false,
159
+ });
160
+ const failedOperation = (error, recovery) => ({
161
+ error: operationError(error),
162
+ ok: false,
163
+ ...(recovery !== undefined && outcomeCanBeAmbiguous(error)
164
+ ? { recovery }
165
+ : {}),
166
+ });
167
+ const completeOperation = (program, recovery) => program.pipe(Effect.map((value) => ({ ok: true, value })), Effect.catchCause((cause) => Cause.hasInterruptsOnly(cause)
168
+ ? Effect.interrupt
169
+ : Effect.succeed(failedOperation(Cause.squash(cause), recovery))));
170
+ const discoveryOptionsOf = (source) => {
171
+ if (source === undefined)
172
+ return cliDiscoveryOptions;
173
+ return Effect.isEffect(source) ? source : Effect.succeed(source);
174
+ };
175
+ export const isBriefSaturation = (error) => {
176
+ const remoteError = error instanceof Error && "remoteError" in error
177
+ ? error.remoteError
178
+ : undefined;
179
+ const parsed = protocolErrorSchema.safeParse(remoteError);
180
+ if (parsed.success)
181
+ return (parsed.data.code === "saturated" && parsed.data.saturation === "admission");
182
+ return maiaClientErrorCode(error) === "saturated";
183
+ };
184
+ export const SATURATION_RETRY = Schedule.exponential("100 millis").pipe(Schedule.jittered);
185
+ const SATURATION_RETRIES = 4;
186
+ const nodeClientOperation = (connect) => (operation, recovery) => completeOperation(Effect.gen(function* () {
187
+ const connection = yield* connect;
188
+ return yield* newCliIdentifier("request").pipe(Effect.flatMap((messageId) => operation(connection.client, { messageId })), Effect.retry({
189
+ schedule: SATURATION_RETRY,
190
+ times: SATURATION_RETRIES,
191
+ while: isBriefSaturation,
192
+ }));
193
+ }), recovery);
194
+ const validatedNodeOperation = (runNodeClientOperation) => (input, schema, operation, recovery) => {
195
+ const parameters = schema.safeParse(input);
196
+ if (!parameters.success)
197
+ return invalidNodeInput(parameters.error);
198
+ return runNodeClientOperation((client, requestOptions) => operation(client, parameters.data, requestOptions), recovery);
199
+ };
200
+ const asSessionOr = (operator, session, required = false) => Effect.flatMap(sessionLaunch, Option.match({
201
+ onNone: () => (required ? Effect.fail(sessionLaunchInvalid()) : operator),
202
+ onSome: session,
203
+ }));
204
+ const coordinatorOptions = (options) => ({
205
+ ...options,
206
+ discoveryOptions: Effect.map(discoveryOptionsOf(options.discoveryOptions), (discovered) => ({ ...discovered, principal: "coordinator" })),
207
+ });
208
+ const boundSession = (options) => options.remote === true
209
+ ? () => Effect.fail(sessionRemoteDenied())
210
+ : connectSession;
211
+ export const makeCliNodeOperations = (options = {}) => {
212
+ const discoveryOptions = discoveryOptionsOf(options.discoveryOptions);
213
+ const connector = options.connector ?? connectLocalNode;
214
+ const connect = asSessionOr(Effect.flatMap(discoveryOptions, connector), boundSession(options), options.requireSession === true);
215
+ const runNodeClientOperation = nodeClientOperation(connect);
216
+ return {
217
+ asCoordinator: () => makeCliNodeOperations(coordinatorOptions(options)),
218
+ asSession: () => makeCliNodeOperations({ ...options, requireSession: true }),
219
+ readStatus: Effect.map(connect, (connection) => connection.status),
220
+ runDiscoveryOperation: (operation, recovery) => completeOperation(options.remote === true
221
+ ? Effect.fail(remoteDiscoveryDenied())
222
+ : asSessionOr(Effect.flatMap(discoveryOptions, operation), () => Effect.fail(sessionAttachmentDenied())), recovery),
223
+ runNodeClientOperation,
224
+ runValidatedNodeOperation: validatedNodeOperation(runNodeClientOperation),
225
+ };
226
+ };
227
+ export const discoveryOptionsFor = (profile) => Effect.map(cliDiscoveryOptions, (options) => ({
228
+ ...options,
229
+ ...(profile === undefined ? {} : { profile }),
230
+ }));
231
+ export const runLazyNodeDependency = (input) => Effect.promise(input.loadClient).pipe(Effect.flatMap((clientModule) => {
232
+ const { connector, profile, remote } = input.binding;
233
+ const client = input.makeClient(clientModule, makeCliNodeOperations({
234
+ ...(connector === undefined ? {} : { connector }),
235
+ discoveryOptions: discoveryOptionsFor(profile),
236
+ ...(remote === true ? { remote: true } : {}),
237
+ }));
238
+ const operation = client[input.name];
239
+ return operation(...input.arguments_);
240
+ }));
241
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1,3 @@
1
+ export { type CliNodeCall, makeCallClient } from "./call.js";
2
+ export { type CliMutationRecovery, type CliNodeBinding, type CliNodeConnection, type CliNodeConnector, type CliNodeEffect, type CliNodeOperations, type CliNodeOperationsOptions, type CliNodeResult, commandIdentifier, connectLocalNode, discoveryOptionsFor, fillCommandIdentifier, invalidNodeInput, makeCliNodeOperations, newCliIdentifier, outcomeCanBeAmbiguous, type ParameterSchema, runLazyNodeDependency, } from "./client.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,3 @@
1
+ export { makeCallClient } from "./call.js";
2
+ export { commandIdentifier, connectLocalNode, discoveryOptionsFor, fillCommandIdentifier, invalidNodeInput, makeCliNodeOperations, newCliIdentifier, outcomeCanBeAmbiguous, runLazyNodeDependency, } from "./client.js";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,20 @@
1
+ import type { MaiaAgentProvider, MaiaLoginInteraction, MaiaProviderAuthType } from "@maiaos/agent";
2
+ import { Effect } from "effect";
3
+ import { type CommandContext } from "../command-line/index.js";
4
+ export type AgentProviderAccess = {
5
+ readonly list: () => Effect.Effect<readonly MaiaAgentProvider[], unknown>;
6
+ readonly login: (input: {
7
+ readonly authType: MaiaProviderAuthType;
8
+ readonly interaction: MaiaLoginInteraction;
9
+ readonly providerId: string;
10
+ }) => Effect.Effect<void, unknown>;
11
+ };
12
+ export declare const listAgentProviders: (context: CommandContext) => Effect.Effect<readonly MaiaAgentProvider[], Error, never>;
13
+ type AgentLoginInput = {
14
+ readonly atTerminal: boolean;
15
+ readonly keyFromStdin: boolean;
16
+ readonly providerId: string;
17
+ };
18
+ export declare const signInAgentProvider: (context: CommandContext, input: AgentLoginInput) => Effect.Effect<MaiaAgentProvider, Error, never>;
19
+ export {};
20
+ //# sourceMappingURL=agent-provider.d.ts.map