@botiverse/oar 0.71.0 → 0.72.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (384) hide show
  1. package/README.md +23 -4
  2. package/assets/brands/NOTICE.md +12 -2
  3. package/{LICENSE → assets/brands/QWEN-LICENSE.txt} +3 -2
  4. package/assets/brands/qoder-on-dark.svg +1 -0
  5. package/assets/brands/qoder-on-light.svg +1 -0
  6. package/assets/brands/qoder.svg +1 -0
  7. package/assets/brands/qwen-on-dark.svg +6 -0
  8. package/assets/brands/qwen-on-light.svg +6 -0
  9. package/assets/brands/qwen.svg +6 -0
  10. package/dist/brands.d.ts +16 -0
  11. package/dist/brands.d.ts.map +1 -1
  12. package/dist/brands.js +9 -0
  13. package/dist/brands.js.map +1 -1
  14. package/dist/community/morph/console.js +1 -1
  15. package/dist/community/morph/console.js.map +1 -1
  16. package/dist/community/morph/session.d.ts.map +1 -1
  17. package/dist/community/morph/session.js +1 -0
  18. package/dist/community/morph/session.js.map +1 -1
  19. package/dist/contracts/deliver.d.ts +27 -5
  20. package/dist/contracts/deliver.d.ts.map +1 -1
  21. package/dist/contracts/index.d.ts +3 -2
  22. package/dist/contracts/index.d.ts.map +1 -1
  23. package/dist/contracts/index.js.map +1 -1
  24. package/dist/contracts/login.d.ts +12 -4
  25. package/dist/contracts/login.d.ts.map +1 -1
  26. package/dist/contracts/orientation.d.ts +67 -0
  27. package/dist/contracts/orientation.d.ts.map +1 -0
  28. package/dist/contracts/orientation.js +2 -0
  29. package/dist/contracts/orientation.js.map +1 -0
  30. package/dist/contracts/provider-auth.d.ts +15 -5
  31. package/dist/contracts/provider-auth.d.ts.map +1 -1
  32. package/dist/contracts/records.d.ts +1 -0
  33. package/dist/contracts/records.d.ts.map +1 -1
  34. package/dist/contracts/runtime-failure-error.d.ts +6 -2
  35. package/dist/contracts/runtime-failure-error.d.ts.map +1 -1
  36. package/dist/contracts/runtime-failure-error.js +6 -2
  37. package/dist/contracts/runtime-failure-error.js.map +1 -1
  38. package/dist/contracts/runtime.d.ts +9 -5
  39. package/dist/contracts/runtime.d.ts.map +1 -1
  40. package/dist/contracts/runtime.js.map +1 -1
  41. package/dist/contracts/session-options.d.ts +17 -3
  42. package/dist/contracts/session-options.d.ts.map +1 -1
  43. package/dist/contracts/session.d.ts +10 -4
  44. package/dist/contracts/session.d.ts.map +1 -1
  45. package/dist/index.d.ts +11 -2
  46. package/dist/index.d.ts.map +1 -1
  47. package/dist/index.js +15 -2
  48. package/dist/index.js.map +1 -1
  49. package/dist/observe/conversation.d.ts +2 -0
  50. package/dist/observe/conversation.d.ts.map +1 -1
  51. package/dist/observe/conversation.js +56 -5
  52. package/dist/observe/conversation.js.map +1 -1
  53. package/dist/observe/index.d.ts +1 -0
  54. package/dist/observe/index.d.ts.map +1 -1
  55. package/dist/observe/index.js +1 -0
  56. package/dist/observe/index.js.map +1 -1
  57. package/dist/observe/input-carries.d.ts +5 -0
  58. package/dist/observe/input-carries.d.ts.map +1 -0
  59. package/dist/observe/input-carries.js +13 -0
  60. package/dist/observe/input-carries.js.map +1 -0
  61. package/dist/observe/session-view-inputs.d.ts.map +1 -1
  62. package/dist/observe/session-view-inputs.js +17 -5
  63. package/dist/observe/session-view-inputs.js.map +1 -1
  64. package/dist/observe/usability.d.ts +4 -0
  65. package/dist/observe/usability.d.ts.map +1 -0
  66. package/dist/observe/usability.js +102 -0
  67. package/dist/observe/usability.js.map +1 -0
  68. package/dist/runtimes/antigravity/options.d.ts.map +1 -1
  69. package/dist/runtimes/antigravity/options.js +1 -0
  70. package/dist/runtimes/antigravity/options.js.map +1 -1
  71. package/dist/runtimes/claude/auth-status.d.ts.map +1 -1
  72. package/dist/runtimes/claude/auth-status.js +4 -0
  73. package/dist/runtimes/claude/auth-status.js.map +1 -1
  74. package/dist/runtimes/claude/launch.d.ts +1 -1
  75. package/dist/runtimes/claude/launch.d.ts.map +1 -1
  76. package/dist/runtimes/claude/launch.js +36 -22
  77. package/dist/runtimes/claude/launch.js.map +1 -1
  78. package/dist/runtimes/claude/list-models.d.ts.map +1 -1
  79. package/dist/runtimes/claude/list-models.js +12 -0
  80. package/dist/runtimes/claude/list-models.js.map +1 -1
  81. package/dist/runtimes/claude/projection.d.ts +11 -76
  82. package/dist/runtimes/claude/projection.d.ts.map +1 -1
  83. package/dist/runtimes/claude/projection.js +36 -148
  84. package/dist/runtimes/claude/projection.js.map +1 -1
  85. package/dist/runtimes/claude/prompt-files.d.ts +7 -0
  86. package/dist/runtimes/claude/prompt-files.d.ts.map +1 -0
  87. package/dist/runtimes/claude/prompt-files.js +32 -0
  88. package/dist/runtimes/claude/prompt-files.js.map +1 -0
  89. package/dist/runtimes/claude/service-tier.d.ts +2 -2
  90. package/dist/runtimes/claude/service-tier.d.ts.map +1 -1
  91. package/dist/runtimes/claude/service-tier.js +4 -4
  92. package/dist/runtimes/claude/service-tier.js.map +1 -1
  93. package/dist/runtimes/claude/session.d.ts +1 -0
  94. package/dist/runtimes/claude/session.d.ts.map +1 -1
  95. package/dist/runtimes/claude/session.js +17 -249
  96. package/dist/runtimes/claude/session.js.map +1 -1
  97. package/dist/runtimes/claude/user-configuration.d.ts +9 -0
  98. package/dist/runtimes/claude/user-configuration.d.ts.map +1 -0
  99. package/dist/runtimes/claude/user-configuration.js +83 -0
  100. package/dist/runtimes/claude/user-configuration.js.map +1 -0
  101. package/dist/runtimes/codex/index.d.ts +3 -2
  102. package/dist/runtimes/codex/index.d.ts.map +1 -1
  103. package/dist/runtimes/codex/index.js +2 -0
  104. package/dist/runtimes/codex/index.js.map +1 -1
  105. package/dist/runtimes/codex/login.d.ts +3 -2
  106. package/dist/runtimes/codex/login.d.ts.map +1 -1
  107. package/dist/runtimes/codex/login.js +13 -3
  108. package/dist/runtimes/codex/login.js.map +1 -1
  109. package/dist/runtimes/codex/open.d.ts.map +1 -1
  110. package/dist/runtimes/codex/open.js +7 -1
  111. package/dist/runtimes/codex/open.js.map +1 -1
  112. package/dist/runtimes/codex/options.d.ts +3 -0
  113. package/dist/runtimes/codex/options.d.ts.map +1 -0
  114. package/dist/runtimes/codex/options.js +4 -0
  115. package/dist/runtimes/codex/options.js.map +1 -0
  116. package/dist/runtimes/cursor/auth-status.d.ts +1 -1
  117. package/dist/runtimes/cursor/auth-status.d.ts.map +1 -1
  118. package/dist/runtimes/cursor/auth-status.js +10 -2
  119. package/dist/runtimes/cursor/auth-status.js.map +1 -1
  120. package/dist/runtimes/cursor/index.d.ts +1 -0
  121. package/dist/runtimes/cursor/index.d.ts.map +1 -1
  122. package/dist/runtimes/cursor/index.js +1 -0
  123. package/dist/runtimes/cursor/index.js.map +1 -1
  124. package/dist/runtimes/cursor/model.d.ts.map +1 -1
  125. package/dist/runtimes/cursor/model.js +6 -1
  126. package/dist/runtimes/cursor/model.js.map +1 -1
  127. package/dist/runtimes/cursor/native-environment.d.ts +12 -0
  128. package/dist/runtimes/cursor/native-environment.d.ts.map +1 -0
  129. package/dist/runtimes/cursor/native-environment.js +24 -0
  130. package/dist/runtimes/cursor/native-environment.js.map +1 -0
  131. package/dist/runtimes/cursor/sdk.d.ts +1 -0
  132. package/dist/runtimes/cursor/sdk.d.ts.map +1 -1
  133. package/dist/runtimes/cursor/sdk.js +14 -32
  134. package/dist/runtimes/cursor/sdk.js.map +1 -1
  135. package/dist/runtimes/grok/options.d.ts.map +1 -1
  136. package/dist/runtimes/grok/options.js +1 -0
  137. package/dist/runtimes/grok/options.js.map +1 -1
  138. package/dist/runtimes/kimi/options.d.ts.map +1 -1
  139. package/dist/runtimes/kimi/options.js +1 -0
  140. package/dist/runtimes/kimi/options.js.map +1 -1
  141. package/dist/runtimes/opencode/options.d.ts.map +1 -1
  142. package/dist/runtimes/opencode/options.js +1 -0
  143. package/dist/runtimes/opencode/options.js.map +1 -1
  144. package/dist/runtimes/pi/auth.d.ts.map +1 -1
  145. package/dist/runtimes/pi/auth.js +9 -1
  146. package/dist/runtimes/pi/auth.js.map +1 -1
  147. package/dist/runtimes/pi/index.d.ts +12 -20
  148. package/dist/runtimes/pi/index.d.ts.map +1 -1
  149. package/dist/runtimes/pi/index.js +33 -15
  150. package/dist/runtimes/pi/index.js.map +1 -1
  151. package/dist/runtimes/pi/inventory.d.ts +3 -1
  152. package/dist/runtimes/pi/inventory.d.ts.map +1 -1
  153. package/dist/runtimes/pi/inventory.js +14 -5
  154. package/dist/runtimes/pi/inventory.js.map +1 -1
  155. package/dist/runtimes/pi/lifecycle.d.ts +2 -2
  156. package/dist/runtimes/pi/lifecycle.d.ts.map +1 -1
  157. package/dist/runtimes/pi/lifecycle.js +19 -8
  158. package/dist/runtimes/pi/lifecycle.js.map +1 -1
  159. package/dist/runtimes/pi/list-models.d.ts +2 -0
  160. package/dist/runtimes/pi/list-models.d.ts.map +1 -1
  161. package/dist/runtimes/pi/list-models.js +6 -2
  162. package/dist/runtimes/pi/list-models.js.map +1 -1
  163. package/dist/runtimes/pi/open.d.ts +4 -1
  164. package/dist/runtimes/pi/open.d.ts.map +1 -1
  165. package/dist/runtimes/pi/open.js +13 -7
  166. package/dist/runtimes/pi/open.js.map +1 -1
  167. package/dist/runtimes/pi/options.d.ts +21 -0
  168. package/dist/runtimes/pi/options.d.ts.map +1 -0
  169. package/dist/runtimes/pi/options.js +2 -0
  170. package/dist/runtimes/pi/options.js.map +1 -0
  171. package/dist/runtimes/pi/project.d.ts +7 -0
  172. package/dist/runtimes/pi/project.d.ts.map +1 -0
  173. package/dist/runtimes/pi/project.js +40 -0
  174. package/dist/runtimes/pi/project.js.map +1 -0
  175. package/dist/runtimes/pi/resolve.d.ts.map +1 -1
  176. package/dist/runtimes/pi/resolve.js +19 -2
  177. package/dist/runtimes/pi/resolve.js.map +1 -1
  178. package/dist/runtimes/pi/rpc/control.d.ts +7 -0
  179. package/dist/runtimes/pi/rpc/control.d.ts.map +1 -0
  180. package/dist/runtimes/pi/rpc/control.js +53 -0
  181. package/dist/runtimes/pi/rpc/control.js.map +1 -0
  182. package/dist/runtimes/pi/rpc/credentials.d.ts +4 -0
  183. package/dist/runtimes/pi/rpc/credentials.d.ts.map +1 -0
  184. package/dist/runtimes/pi/rpc/credentials.js +24 -0
  185. package/dist/runtimes/pi/rpc/credentials.js.map +1 -0
  186. package/dist/runtimes/pi/rpc/extension.d.ts +6 -0
  187. package/dist/runtimes/pi/rpc/extension.d.ts.map +1 -0
  188. package/dist/runtimes/pi/rpc/extension.js +68 -0
  189. package/dist/runtimes/pi/rpc/extension.js.map +1 -0
  190. package/dist/runtimes/pi/rpc/launch.d.ts +7 -0
  191. package/dist/runtimes/pi/rpc/launch.d.ts.map +1 -0
  192. package/dist/runtimes/pi/rpc/launch.js +26 -0
  193. package/dist/runtimes/pi/rpc/launch.js.map +1 -0
  194. package/dist/runtimes/pi/rpc/open.d.ts +19 -0
  195. package/dist/runtimes/pi/rpc/open.d.ts.map +1 -0
  196. package/dist/runtimes/pi/rpc/open.js +132 -0
  197. package/dist/runtimes/pi/rpc/open.js.map +1 -0
  198. package/dist/runtimes/pi/rpc/prompt-files.d.ts +4 -0
  199. package/dist/runtimes/pi/rpc/prompt-files.d.ts.map +1 -0
  200. package/dist/runtimes/pi/rpc/prompt-files.js +27 -0
  201. package/dist/runtimes/pi/rpc/prompt-files.js.map +1 -0
  202. package/dist/runtimes/pi/rpc/session.d.ts +5 -0
  203. package/dist/runtimes/pi/rpc/session.d.ts.map +1 -0
  204. package/dist/runtimes/pi/rpc/session.js +217 -0
  205. package/dist/runtimes/pi/rpc/session.js.map +1 -0
  206. package/dist/runtimes/pi/rpc/version.d.ts +3 -0
  207. package/dist/runtimes/pi/rpc/version.d.ts.map +1 -0
  208. package/dist/runtimes/pi/rpc/version.js +23 -0
  209. package/dist/runtimes/pi/rpc/version.js.map +1 -0
  210. package/dist/runtimes/pi/session.d.ts +2 -0
  211. package/dist/runtimes/pi/session.d.ts.map +1 -1
  212. package/dist/runtimes/pi/session.js +6 -8
  213. package/dist/runtimes/pi/session.js.map +1 -1
  214. package/dist/runtimes/pi-durable/options.d.ts.map +1 -1
  215. package/dist/runtimes/pi-durable/options.js +7 -2
  216. package/dist/runtimes/pi-durable/options.js.map +1 -1
  217. package/dist/runtimes/qoder/auth-status.d.ts +6 -0
  218. package/dist/runtimes/qoder/auth-status.d.ts.map +1 -0
  219. package/dist/runtimes/qoder/auth-status.js +22 -0
  220. package/dist/runtimes/qoder/auth-status.js.map +1 -0
  221. package/dist/runtimes/qoder/control.d.ts +14 -0
  222. package/dist/runtimes/qoder/control.d.ts.map +1 -0
  223. package/dist/runtimes/qoder/control.js +79 -0
  224. package/dist/runtimes/qoder/control.js.map +1 -0
  225. package/dist/runtimes/qoder/index.d.ts +22 -0
  226. package/dist/runtimes/qoder/index.d.ts.map +1 -0
  227. package/dist/runtimes/qoder/index.js +16 -0
  228. package/dist/runtimes/qoder/index.js.map +1 -0
  229. package/dist/runtimes/qoder/install.d.ts +6 -0
  230. package/dist/runtimes/qoder/install.d.ts.map +1 -0
  231. package/dist/runtimes/qoder/install.js +15 -0
  232. package/dist/runtimes/qoder/install.js.map +1 -0
  233. package/dist/runtimes/qoder/installation.d.ts +2 -0
  234. package/dist/runtimes/qoder/installation.d.ts.map +1 -0
  235. package/dist/runtimes/qoder/installation.js +5 -0
  236. package/dist/runtimes/qoder/installation.js.map +1 -0
  237. package/dist/runtimes/qoder/launch.d.ts +7 -0
  238. package/dist/runtimes/qoder/launch.d.ts.map +1 -0
  239. package/dist/runtimes/qoder/launch.js +76 -0
  240. package/dist/runtimes/qoder/launch.js.map +1 -0
  241. package/dist/runtimes/qoder/list-models.d.ts +6 -0
  242. package/dist/runtimes/qoder/list-models.d.ts.map +1 -0
  243. package/dist/runtimes/qoder/list-models.js +49 -0
  244. package/dist/runtimes/qoder/list-models.js.map +1 -0
  245. package/dist/runtimes/qoder/login.d.ts +6 -0
  246. package/dist/runtimes/qoder/login.d.ts.map +1 -0
  247. package/dist/runtimes/qoder/login.js +83 -0
  248. package/dist/runtimes/qoder/login.js.map +1 -0
  249. package/dist/runtimes/qoder/options.d.ts +4 -0
  250. package/dist/runtimes/qoder/options.d.ts.map +1 -0
  251. package/dist/runtimes/qoder/options.js +19 -0
  252. package/dist/runtimes/qoder/options.js.map +1 -0
  253. package/dist/runtimes/qoder/projection.d.ts +13 -0
  254. package/dist/runtimes/qoder/projection.d.ts.map +1 -0
  255. package/dist/runtimes/qoder/projection.js +42 -0
  256. package/dist/runtimes/qoder/projection.js.map +1 -0
  257. package/dist/runtimes/qoder/session.d.ts +3 -0
  258. package/dist/runtimes/qoder/session.d.ts.map +1 -0
  259. package/dist/runtimes/qoder/session.js +68 -0
  260. package/dist/runtimes/qoder/session.js.map +1 -0
  261. package/dist/runtimes/qwen/close.d.ts +4 -0
  262. package/dist/runtimes/qwen/close.d.ts.map +1 -0
  263. package/dist/runtimes/qwen/close.js +12 -0
  264. package/dist/runtimes/qwen/close.js.map +1 -0
  265. package/dist/runtimes/qwen/control.d.ts +15 -0
  266. package/dist/runtimes/qwen/control.d.ts.map +1 -0
  267. package/dist/runtimes/qwen/control.js +66 -0
  268. package/dist/runtimes/qwen/control.js.map +1 -0
  269. package/dist/runtimes/qwen/index.d.ts +20 -0
  270. package/dist/runtimes/qwen/index.d.ts.map +1 -0
  271. package/dist/runtimes/qwen/index.js +22 -0
  272. package/dist/runtimes/qwen/index.js.map +1 -0
  273. package/dist/runtimes/qwen/install-paths.d.ts +6 -0
  274. package/dist/runtimes/qwen/install-paths.d.ts.map +1 -0
  275. package/dist/runtimes/qwen/install-paths.js +13 -0
  276. package/dist/runtimes/qwen/install-paths.js.map +1 -0
  277. package/dist/runtimes/qwen/install.d.ts +6 -0
  278. package/dist/runtimes/qwen/install.d.ts.map +1 -0
  279. package/dist/runtimes/qwen/install.js +18 -0
  280. package/dist/runtimes/qwen/install.js.map +1 -0
  281. package/dist/runtimes/qwen/installation.d.ts +2 -0
  282. package/dist/runtimes/qwen/installation.d.ts.map +1 -0
  283. package/dist/runtimes/qwen/installation.js +5 -0
  284. package/dist/runtimes/qwen/installation.js.map +1 -0
  285. package/dist/runtimes/qwen/launch.d.ts +5 -0
  286. package/dist/runtimes/qwen/launch.d.ts.map +1 -0
  287. package/dist/runtimes/qwen/launch.js +25 -0
  288. package/dist/runtimes/qwen/launch.js.map +1 -0
  289. package/dist/runtimes/qwen/list-models.d.ts +6 -0
  290. package/dist/runtimes/qwen/list-models.d.ts.map +1 -0
  291. package/dist/runtimes/qwen/list-models.js +46 -0
  292. package/dist/runtimes/qwen/list-models.js.map +1 -0
  293. package/dist/runtimes/qwen/options.d.ts +5 -0
  294. package/dist/runtimes/qwen/options.d.ts.map +1 -0
  295. package/dist/runtimes/qwen/options.js +27 -0
  296. package/dist/runtimes/qwen/options.js.map +1 -0
  297. package/dist/runtimes/qwen/projection.d.ts +14 -0
  298. package/dist/runtimes/qwen/projection.d.ts.map +1 -0
  299. package/dist/runtimes/qwen/projection.js +41 -0
  300. package/dist/runtimes/qwen/projection.js.map +1 -0
  301. package/dist/runtimes/qwen/session.d.ts +8 -0
  302. package/dist/runtimes/qwen/session.d.ts.map +1 -0
  303. package/dist/runtimes/qwen/session.js +73 -0
  304. package/dist/runtimes/qwen/session.js.map +1 -0
  305. package/dist/shared/acp/terminal.d.ts.map +1 -1
  306. package/dist/shared/acp/terminal.js +13 -3
  307. package/dist/shared/acp/terminal.js.map +1 -1
  308. package/dist/shared/control-input.d.ts +3 -1
  309. package/dist/shared/control-input.d.ts.map +1 -1
  310. package/dist/shared/control-input.js +11 -0
  311. package/dist/shared/control-input.js.map +1 -1
  312. package/dist/shared/deliver-interrupt.d.ts +49 -0
  313. package/dist/shared/deliver-interrupt.d.ts.map +1 -0
  314. package/dist/shared/deliver-interrupt.js +195 -0
  315. package/dist/shared/deliver-interrupt.js.map +1 -0
  316. package/dist/shared/deliver.d.ts.map +1 -1
  317. package/dist/shared/deliver.js +17 -2
  318. package/dist/shared/deliver.js.map +1 -1
  319. package/dist/shared/executable/process-tree.d.ts +1 -1
  320. package/dist/shared/executable/process-tree.d.ts.map +1 -1
  321. package/dist/shared/executable/process-tree.js +25 -2
  322. package/dist/shared/executable/process-tree.js.map +1 -1
  323. package/dist/shared/executable/process.d.ts +10 -5
  324. package/dist/shared/executable/process.d.ts.map +1 -1
  325. package/dist/shared/executable/process.js +25 -12
  326. package/dist/shared/executable/process.js.map +1 -1
  327. package/dist/shared/executable/run.d.ts.map +1 -1
  328. package/dist/shared/executable/run.js +7 -2
  329. package/dist/shared/executable/run.js.map +1 -1
  330. package/dist/shared/orientation/budget.d.ts +12 -0
  331. package/dist/shared/orientation/budget.d.ts.map +1 -0
  332. package/dist/shared/orientation/budget.js +61 -0
  333. package/dist/shared/orientation/budget.js.map +1 -0
  334. package/dist/shared/orientation/customization.d.ts +8 -0
  335. package/dist/shared/orientation/customization.d.ts.map +1 -0
  336. package/dist/shared/orientation/customization.js +57 -0
  337. package/dist/shared/orientation/customization.js.map +1 -0
  338. package/dist/shared/orientation/index.d.ts +5 -0
  339. package/dist/shared/orientation/index.d.ts.map +1 -0
  340. package/dist/shared/orientation/index.js +88 -0
  341. package/dist/shared/orientation/index.js.map +1 -0
  342. package/dist/shared/orientation/slots.d.ts +6 -0
  343. package/dist/shared/orientation/slots.d.ts.map +1 -0
  344. package/dist/shared/orientation/slots.js +26 -0
  345. package/dist/shared/orientation/slots.js.map +1 -0
  346. package/dist/shared/seal-session.d.ts.map +1 -1
  347. package/dist/shared/seal-session.js.map +1 -1
  348. package/dist/shared/session-kernel.d.ts.map +1 -1
  349. package/dist/shared/session-kernel.js +36 -8
  350. package/dist/shared/session-kernel.js.map +1 -1
  351. package/dist/shared/session-options.d.ts +1 -1
  352. package/dist/shared/session-options.d.ts.map +1 -1
  353. package/dist/shared/session-options.js +5 -2
  354. package/dist/shared/session-options.js.map +1 -1
  355. package/dist/{runtimes/claude → shared/stream-json}/content.d.ts +5 -5
  356. package/dist/shared/stream-json/content.d.ts.map +1 -0
  357. package/dist/{runtimes/claude → shared/stream-json}/content.js +16 -10
  358. package/dist/shared/stream-json/content.js.map +1 -0
  359. package/dist/shared/stream-json/input-lifecycle.d.ts +24 -0
  360. package/dist/shared/stream-json/input-lifecycle.d.ts.map +1 -0
  361. package/dist/{runtimes/claude → shared/stream-json}/input-lifecycle.js +15 -11
  362. package/dist/shared/stream-json/input-lifecycle.js.map +1 -0
  363. package/dist/shared/stream-json/profile.d.ts +55 -0
  364. package/dist/shared/stream-json/profile.d.ts.map +1 -0
  365. package/dist/shared/stream-json/profile.js +2 -0
  366. package/dist/shared/stream-json/profile.js.map +1 -0
  367. package/dist/shared/stream-json/projection.d.ts +28 -0
  368. package/dist/shared/stream-json/projection.d.ts.map +1 -0
  369. package/dist/shared/stream-json/projection.js +122 -0
  370. package/dist/shared/stream-json/projection.js.map +1 -0
  371. package/dist/shared/stream-json/session.d.ts +8 -0
  372. package/dist/shared/stream-json/session.d.ts.map +1 -0
  373. package/dist/shared/stream-json/session.js +270 -0
  374. package/dist/shared/stream-json/session.js.map +1 -0
  375. package/dist/shared/stream-json/state.d.ts +25 -0
  376. package/dist/shared/stream-json/state.d.ts.map +1 -0
  377. package/dist/shared/stream-json/state.js +17 -0
  378. package/dist/shared/stream-json/state.js.map +1 -0
  379. package/package.json +1 -1
  380. package/dist/runtimes/claude/content.d.ts.map +0 -1
  381. package/dist/runtimes/claude/content.js.map +0 -1
  382. package/dist/runtimes/claude/input-lifecycle.d.ts +0 -24
  383. package/dist/runtimes/claude/input-lifecycle.d.ts.map +0 -1
  384. package/dist/runtimes/claude/input-lifecycle.js.map +0 -1
@@ -0,0 +1,53 @@
1
+ import { asRecord, parseJson } from "../../../shared/json.js";
2
+ /** Native Pi JSONL correlation. Event observers never wait for a command response. */
3
+ export function piRpcControl(child, receive) {
4
+ let sequence = 0;
5
+ let ended = false;
6
+ const pending = new Map();
7
+ child.onLine((line) => {
8
+ const message = asRecord(parseJson(line));
9
+ if (message === null) {
10
+ return;
11
+ }
12
+ receive(message);
13
+ if (message.type !== "response" || typeof message.id !== "string") {
14
+ return;
15
+ }
16
+ const waiter = pending.get(message.id);
17
+ if (waiter === undefined) {
18
+ return;
19
+ }
20
+ pending.delete(message.id);
21
+ clearTimeout(waiter.timer);
22
+ // This is the bundled version's own protocol, not an arbitrary remote server.
23
+ // oxlint-disable-next-line typescript/consistent-type-assertions, typescript/no-unsafe-type-assertion -- The pinned bundled RPC encoder owns this response union.
24
+ waiter.resolve(message);
25
+ });
26
+ child.onExit((code) => {
27
+ ended = true;
28
+ for (const waiter of pending.values()) {
29
+ clearTimeout(waiter.timer);
30
+ waiter.reject(new Error(`Pi RPC exited (${String(code)}): ${child.diagnostics().stderr}`));
31
+ }
32
+ pending.clear();
33
+ });
34
+ return {
35
+ request: async (command) => {
36
+ if (ended) {
37
+ throw new Error("Pi RPC has exited");
38
+ }
39
+ const id = `oar-pi-${sequence++}`;
40
+ const { promise, resolve, reject } = Promise.withResolvers();
41
+ const timer = setTimeout(() => {
42
+ pending.delete(id);
43
+ reject(new Error(`Pi RPC ${command.type} did not reply within 30 seconds: ${child.diagnostics().stderr}`));
44
+ child.kill();
45
+ }, 30_000);
46
+ pending.set(id, { resolve, reject, timer });
47
+ child.write(`${JSON.stringify({ ...command, id })}\n`);
48
+ const response = await promise;
49
+ return response;
50
+ },
51
+ };
52
+ }
53
+ //# sourceMappingURL=control.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"control.js","sourceRoot":"","sources":["../../../../src/runtimes/pi/rpc/control.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAE9D,sFAAsF;AACtF,MAAM,UAAU,YAAY,CAAC,KAAkB,EAAE,OAAmD;IAGlG,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,KAAK,GAAG,KAAK,CAAC;IAClB,MAAM,OAAO,GAAG,IAAI,GAAG,EAAoG,CAAC;IAC5H,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;QACpB,MAAM,OAAO,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1C,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;YAAC,OAAO;QAAC,CAAC;QACjC,OAAO,CAAC,OAAO,CAAC,CAAC;QACjB,IAAI,OAAO,CAAC,IAAI,KAAK,UAAU,IAAI,OAAO,OAAO,CAAC,EAAE,KAAK,QAAQ,EAAE,CAAC;YAAC,OAAO;QAAC,CAAC;QAC9E,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACvC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YAAC,OAAO;QAAC,CAAC;QACrC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC3B,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC3B,8EAA8E;QAC9E,kKAAkK;QAClK,MAAM,CAAC,OAAO,CAAC,OAAiC,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IACH,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;QACpB,KAAK,GAAG,IAAI,CAAC;QACb,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;YACtC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC3B,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,kBAAkB,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC7F,CAAC;QACD,OAAO,CAAC,KAAK,EAAE,CAAC;IAClB,CAAC,CAAC,CAAC;IACH,OAAO;QACL,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YACzB,IAAI,KAAK,EAAE,CAAC;gBAAC,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;YAAC,CAAC;YACpD,MAAM,EAAE,GAAG,UAAU,QAAQ,EAAE,EAAE,CAAC;YAClC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,aAAa,EAAe,CAAC;YAC1E,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC5B,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBACnB,MAAM,CAAC,IAAI,KAAK,CAAC,UAAU,OAAO,CAAC,IAAI,qCAAqC,KAAK,CAAC,WAAW,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;gBAC3G,KAAK,CAAC,IAAI,EAAE,CAAC;YACf,CAAC,EAAE,MAAM,CAAC,CAAC;YACX,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;YAC5C,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,OAAO,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;YACvD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC;YAC/B,OAAO,QAAQ,CAAC;QAClB,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { Duplex } from "node:stream";
2
+ /** Register each private key before acknowledging the child's native hook. */
3
+ export declare function readPiRpcCredentials(pipe: Duplex, remember: (key: string) => void, failed: () => void): void;
4
+ //# sourceMappingURL=credentials.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../../../../src/runtimes/pi/rpc/credentials.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,8EAA8E;AAC9E,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,EAAE,MAAM,EAAE,MAAM,IAAI,GAAG,IAAI,CAe5G"}
@@ -0,0 +1,24 @@
1
+ import { createInterface } from "node:readline";
2
+ /** Register each private key before acknowledging the child's native hook. */
3
+ export function readPiRpcCredentials(pipe, remember, failed) {
4
+ const lines = createInterface({ input: pipe, crlfDelay: Infinity });
5
+ // readline forwards input errors to its own emitter. Both need listeners,
6
+ // including when a child exits before the acknowledgment can be written.
7
+ pipe.on("error", failed);
8
+ lines.on("error", failed);
9
+ lines.on("line", (line) => {
10
+ try {
11
+ const key = JSON.parse(line);
12
+ if (typeof key !== "string") {
13
+ throw new TypeError("Invalid Pi RPC credential message");
14
+ }
15
+ remember(key);
16
+ // Separate stdout and fd 3 reads have no cross-stream ordering.
17
+ pipe.write("ok\n");
18
+ }
19
+ catch {
20
+ failed();
21
+ }
22
+ });
23
+ }
24
+ //# sourceMappingURL=credentials.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../../../src/runtimes/pi/rpc/credentials.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAGhD,8EAA8E;AAC9E,MAAM,UAAU,oBAAoB,CAAC,IAAY,EAAE,QAA+B,EAAE,MAAkB;IACpG,MAAM,KAAK,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;IACpE,0EAA0E;IAC1E,yEAAyE;IACzE,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACzB,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC1B,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;QACxB,IAAI,CAAC;YACH,MAAM,GAAG,GAAY,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACtC,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;gBAAC,MAAM,IAAI,SAAS,CAAC,mCAAmC,CAAC,CAAC;YAAC,CAAC;YAC1F,QAAQ,CAAC,GAAG,CAAC,CAAC;YACd,gEAAgE;YAChE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACrB,CAAC;QAAC,MAAM,CAAC;YAAC,MAAM,EAAE,CAAC;QAAC,CAAC;IACvB,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,6 @@
1
+ /** Pi loads this module with its own extension loader and SDK aliases.
2
+ * Keep it as source so a single-file host can materialize it without its own
3
+ * source tree. The native RPC tests execute this exact module.
4
+ */
5
+ export declare const piRpcExtensionSource: string;
6
+ //# sourceMappingURL=extension.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extension.d.ts","sourceRoot":"","sources":["../../../../src/runtimes/pi/rpc/extension.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,oBAAoB,QA8DhC,CAAC"}
@@ -0,0 +1,68 @@
1
+ /** Pi loads this module with its own extension loader and SDK aliases.
2
+ * Keep it as source so a single-file host can materialize it without its own
3
+ * source tree. The native RPC tests execute this exact module.
4
+ */
5
+ export const piRpcExtensionSource = String.raw `import { readFileSync, writeFileSync } from "node:fs";
6
+ import path from "node:path";
7
+ import { Socket } from "node:net";
8
+ import { createInterface } from "node:readline";
9
+ import { createCodingTools, createMcpExtension, SettingsManager, VERSION } from "@earendil-works/pi-coding-agent";
10
+
11
+ export default async function oarPiRpcExtension(pi) {
12
+ const directory = process.env.OAR_PI_RPC_DIRECTORY;
13
+ if (directory === undefined) { throw new Error("Missing OAR Pi RPC session configuration"); }
14
+ const keys = new Socket({ fd: 3, readable: true, writable: true });
15
+ keys.unref();
16
+ const acknowledgments = createInterface({ input: keys, crlfDelay: Infinity });
17
+ const waiting = [];
18
+ const fail = () => {
19
+ for (const waiter of waiting.splice(0)) {
20
+ clearTimeout(waiter.timer);
21
+ waiter.reject(new Error("Pi RPC credential pipe closed before acknowledgment"));
22
+ }
23
+ };
24
+ keys.on("error", fail);
25
+ acknowledgments.on("error", fail);
26
+ acknowledgments.on("close", fail);
27
+ acknowledgments.on("line", () => {
28
+ const waiter = waiting.shift();
29
+ if (waiter !== undefined) { clearTimeout(waiter.timer); waiter.resolve(); }
30
+ });
31
+ const config = JSON.parse(readFileSync(path.join(directory, "config.json"), "utf8"));
32
+ if (config.servers.length > 0) {
33
+ await createMcpExtension({ loadConfig: () => ({ servers: [], errors: [] }), logPath: path.join(config.agentDir, "mcp.log") })(pi);
34
+ for (const server of config.servers) { pi.registerMcpServer(server.name, server.config); }
35
+ }
36
+ const remember = async (context) => {
37
+ if (context.model === undefined) { return; }
38
+ const auth = await context.modelRegistry.getApiKeyAndHeaders(context.model);
39
+ if (auth.ok && auth.apiKey !== undefined) {
40
+ // Parent acknowledgment orders registration before provider output on
41
+ // stdout. The key stays in this private pipe, never a file or RPC frame.
42
+ await new Promise((resolve, reject) => {
43
+ if (keys.destroyed) { reject(new Error("Pi RPC credential pipe is closed")); return; }
44
+ const timer = setTimeout(() => { keys.destroy(); fail(); }, 30_000);
45
+ waiting.push({ resolve, reject, timer });
46
+ keys.write(JSON.stringify(auth.apiKey) + "\n");
47
+ });
48
+ }
49
+ };
50
+ pi.on("session_start", async (_event, context) => {
51
+ if (config.resume) {
52
+ // -e loads this extension before user extensions. Reset only native
53
+ // builtins; user session_start handlers still choose their own loadout.
54
+ const tools = pi.getAllTools();
55
+ const builtinNames = new Set(tools.filter((tool) => tool.sourceInfo.path === ("builtin:" + tool.name)).map((tool) => tool.name));
56
+ const defaults = SettingsManager.inMemory(pi.getSettings()).getDefaultTools() ?? createCodingTools(context.cwd).map((tool) => tool.name);
57
+ pi.setActiveTools([...pi.getActiveTools().filter((name) => !builtinNames.has(name)), ...defaults.filter((name) => builtinNames.has(name))]);
58
+ }
59
+ await remember(context);
60
+ writeFileSync(path.join(directory, "ready"), JSON.stringify({
61
+ version: VERSION,
62
+ modelRegistered: context.model !== undefined && context.modelRegistry.find(context.model.provider, context.model.id) !== undefined,
63
+ }), { mode: 0o600 });
64
+ });
65
+ pi.on("model_select", async (_event, context) => { await remember(context); });
66
+ }
67
+ `;
68
+ //# sourceMappingURL=extension.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extension.js","sourceRoot":"","sources":["../../../../src/runtimes/pi/rpc/extension.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8D7C,CAAC"}
@@ -0,0 +1,7 @@
1
+ /** Check the actual executable before starting a session or loading extensions. */
2
+ export declare function piRpcLaunch(command: string | undefined, cwd: string, env: NodeJS.ProcessEnv, args?: readonly string[]): Promise<{
3
+ readonly command: string;
4
+ readonly args: readonly string[];
5
+ readonly version: string;
6
+ }>;
7
+ //# sourceMappingURL=launch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"launch.d.ts","sourceRoot":"","sources":["../../../../src/runtimes/pi/rpc/launch.ts"],"names":[],"mappings":"AAaA,mFAAmF;AACnF,wBAAsB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,UAAU,EAAE,IAAI,GAAE,SAAS,MAAM,EAAO,GAAG,OAAO,CAAC;IACzI,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B,CAAC,CAWD"}
@@ -0,0 +1,26 @@
1
+ import { fileURLToPath } from "node:url";
2
+ import { runExecutable } from "../../../shared/executable/index.js";
3
+ import { assertRan } from "../../../shared/executable/diagnostics.js";
4
+ import { piRpcVersion } from "./version.js";
5
+ function defaultEntry() {
6
+ try {
7
+ return fileURLToPath(import.meta.resolve("@earendil-works/pi-coding-agent/rpc-entry"));
8
+ }
9
+ catch (error) {
10
+ throw new Error('A single-file host must provide command for Pi subprocess execution: createPiRuntime({ execution: "subprocess", command, args }). OAR could not resolve Pi\'s rpc-entry.', { cause: error });
11
+ }
12
+ }
13
+ /** Check the actual executable before starting a session or loading extensions. */
14
+ export async function piRpcLaunch(command, cwd, env, args = []) {
15
+ const version = await piRpcVersion();
16
+ const executable = command ?? process.execPath;
17
+ const entry = command === undefined ? [defaultEntry()] : [...args];
18
+ const result = await runExecutable(executable, [...entry, "--version"], { cwd, env, timeoutMs: 15_000 });
19
+ assertRan(result, "Cannot read the Pi RPC executable version");
20
+ const actual = result.ok ? result.stdout.trim() : "unavailable";
21
+ if (actual !== version) {
22
+ throw new Error(`Pi RPC requires ${version}, matching OAR's bundled Pi; the selected command reports ${actual}. Select a Pi executable of that version with createPiRuntime({ execution: "subprocess", command }).`);
23
+ }
24
+ return { command: executable, args: command === undefined ? entry : [...args, "--mode", "rpc"], version };
25
+ }
26
+ //# sourceMappingURL=launch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"launch.js","sourceRoot":"","sources":["../../../../src/runtimes/pi/rpc/launch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,2CAA2C,CAAC;AAEtE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,SAAS,YAAY;IACnB,IAAI,CAAC;QAAC,OAAO,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,2CAA2C,CAAC,CAAC,CAAC;IAAC,CAAC;IAC/F,OAAO,KAAK,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,0KAA0K,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;IAChN,CAAC;AACH,CAAC;AAED,mFAAmF;AACnF,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAA2B,EAAE,GAAW,EAAE,GAAsB,EAAE,OAA0B,EAAE;IAK9H,MAAM,OAAO,GAAG,MAAM,YAAY,EAAE,CAAC;IACrC,MAAM,UAAU,GAAG,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC;IAC/C,MAAM,KAAK,GAAG,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACnE,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,UAAU,EAAE,CAAC,GAAG,KAAK,EAAE,WAAW,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;IACzG,SAAS,CAAC,MAAM,EAAE,2CAA2C,CAAC,CAAC;IAC/D,MAAM,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC;IAChE,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,mBAAmB,OAAO,6DAA6D,MAAM,sGAAsG,CAAC,CAAC;IACvN,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;AAC5G,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { RpcSessionState, RpcResponse } from "@earendil-works/pi-coding-agent";
2
+ import type { RefusedSessionOptions, SessionOptions } from "../../../contracts/index.js";
3
+ import { type LineProcess } from "../../../shared/executable/index.js";
4
+ import { type PrivateTempDir } from "../../../shared/private-temp.js";
5
+ import type { SessionCredentials } from "../../../shared/session-credentials.js";
6
+ import type { PiRuntimeOptions } from "../options.js";
7
+ import { piRpcControl } from "./control.js";
8
+ export declare const piRpcRefusedSessionOptions: RefusedSessionOptions;
9
+ export declare function piRpcState(response: RpcResponse): RpcSessionState;
10
+ interface OpenPiRpc {
11
+ readonly child: LineProcess;
12
+ readonly control: ReturnType<typeof piRpcControl>;
13
+ readonly state: RpcSessionState;
14
+ readonly directory: PrivateTempDir;
15
+ }
16
+ /** Native RPC startup, with the same bundled version as the in-process runtime. */
17
+ export declare function openPiRpc(options: SessionOptions, credentials: SessionCredentials, receive: (message: Record<string, unknown>) => void, runtime: PiRuntimeOptions): Promise<OpenPiRpc>;
18
+ export {};
19
+ //# sourceMappingURL=open.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"open.d.ts","sourceRoot":"","sources":["../../../../src/runtimes/pi/rpc/open.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AACpF,OAAO,KAAK,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAEzF,OAAO,EAAoB,KAAK,WAAW,EAAE,MAAM,qCAAqC,CAAC;AACzF,OAAO,EAAkB,KAAK,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAEtF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wCAAwC,CAAC;AAIjF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEtD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAO5C,eAAO,MAAM,0BAA0B,EAAE,qBAGxC,CAAC;AAEF,wBAAgB,UAAU,CAAC,QAAQ,EAAE,WAAW,GAAG,eAAe,CAIjE;AAED,UAAU,SAAS;IACjB,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC;IAClD,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAC;CACpC;AAED,mFAAmF;AACnF,wBAAsB,SAAS,CAAC,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,kBAAkB,EAAE,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,EAAE,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,SAAS,CAAC,CA4E5L"}
@@ -0,0 +1,132 @@
1
+ /* oxlint-disable import/max-dependencies -- Native startup composes existing session, model, credential and process helpers. */
2
+ import { existsSync, readFileSync } from "node:fs";
3
+ import { writeFile } from "node:fs/promises";
4
+ import { homedir } from "node:os";
5
+ import path from "node:path";
6
+ import { sessionEnvironment } from "../../../shared/environment.js";
7
+ import { spawnLineProcess } from "../../../shared/executable/index.js";
8
+ import { privateTempDir } from "../../../shared/private-temp.js";
9
+ import { checkSessionName, refuseSessionOptions } from "../../../shared/session-options.js";
10
+ import { piMcpServerConfig, validatePiMcpEnvironment } from "../mcp.js";
11
+ import { piThinkingLevel, piRefusedSessionOptions, piEffortRefusal, checkPiSystemPrompt } from "../open.js";
12
+ import { piFindSessionFile, piSessionDir, splitPiModelId } from "../resolve.js";
13
+ import { checkPiProjectPackages, reportMissingPiPackages } from "../project.js";
14
+ import { piRpcControl } from "./control.js";
15
+ import { readPiRpcCredentials } from "./credentials.js";
16
+ import { piRpcLaunch } from "./launch.js";
17
+ import { piRpcExtensionSource } from "./extension.js";
18
+ import { piRpcPromptFiles } from "./prompt-files.js";
19
+ import { RuntimeFailureError } from "../../../contracts/runtime-failure-error.js";
20
+ export const piRpcRefusedSessionOptions = {
21
+ ...piRefusedSessionOptions,
22
+ launchArgs: "OAR owns Pi's RPC startup arguments; arbitrary CLI flags are not supported",
23
+ };
24
+ export function piRpcState(response) {
25
+ if (!response.success) {
26
+ throw new Error(response.error);
27
+ }
28
+ if (response.command !== "get_state") {
29
+ throw new Error("Pi replied to a different command");
30
+ }
31
+ return response.data;
32
+ }
33
+ /** Native RPC startup, with the same bundled version as the in-process runtime. */
34
+ export async function openPiRpc(options, credentials, receive, runtime) {
35
+ refuseSessionOptions(piRpcRefusedSessionOptions, options);
36
+ checkSessionName(options);
37
+ checkPiSystemPrompt(options.systemPrompt);
38
+ // Removals are already applied to the RPC child's environment. Only the
39
+ // in-process MCP path has to refuse them when re-inheriting the host env.
40
+ validatePiMcpEnvironment({ ...options, env: {} });
41
+ if (options.effort !== undefined) {
42
+ piThinkingLevel(options.effort);
43
+ }
44
+ if (options.model !== undefined) {
45
+ splitPiModelId(options.model);
46
+ }
47
+ const env = sessionEnvironment(options.env);
48
+ const agentDir = path.resolve([env.OAR_PI_AGENT_DIR, env.PI_CODING_AGENT_DIR].find((value) => value !== undefined && value.length > 0)
49
+ ?? path.join(env.HOME ?? env.USERPROFILE ?? homedir(), ".pi", "agent"));
50
+ const sessionDir = piSessionDir(options.cwd, agentDir);
51
+ // This SDK import already serves native session-file lookup. The resolver
52
+ // inspects package metadata without loading extensions or starting services.
53
+ const { SessionManager, SettingsManager } = await import("@earendil-works/pi-coding-agent");
54
+ const settings = SettingsManager.create(options.cwd, agentDir, { projectTrusted: runtime.projectTrusted ?? true });
55
+ await checkPiProjectPackages(options.cwd, agentDir, settings, runtime);
56
+ await reportMissingPiPackages(options.cwd, agentDir, settings);
57
+ const launch = await piRpcLaunch(runtime.command, options.cwd, env, runtime.args);
58
+ const sessionFile = options.resume === undefined ? undefined : await piFindSessionFile(SessionManager, options.resume, options.cwd, sessionDir);
59
+ const hasName = sessionFile !== undefined && SessionManager.open(sessionFile, sessionDir).getEntries().some((entry) => entry.type === "session_info");
60
+ const directory = await privateTempDir("oar-pi-rpc-");
61
+ try {
62
+ await writeFile(path.join(directory.path, "config.json"), JSON.stringify({ agentDir, resume: options.resume !== undefined,
63
+ servers: (options.mcpServers ?? []).map((server) => ({ name: server.name, config: piMcpServerConfig(server) })),
64
+ }), { mode: 0o600 });
65
+ // A bundled host need not ship its own source files or a node_modules tree.
66
+ const extension = path.join(directory.path, "extension.mjs");
67
+ await writeFile(extension, piRpcExtensionSource, { mode: 0o600 });
68
+ const promptArgs = await piRpcPromptFiles(directory.path, options);
69
+ const child = spawnLineProcess(launch.command, [
70
+ ...launch.args,
71
+ runtime.projectTrusted === false ? "--no-approve" : "--approve",
72
+ // The shared preflight refuses missing packages first. Native offline
73
+ // mode also prevents installation if the store changes after that check.
74
+ ...(runtime.allowProjectPackageInstall === true ? [] : ["--offline"]),
75
+ "--no-mcp", "--session-dir", sessionDir, "-e", extension,
76
+ ...(sessionFile === undefined ? [] : ["--session", sessionFile]),
77
+ ...(options.model === undefined ? [] : ["--model", options.model]),
78
+ ...(options.effort === undefined ? [] : ["--thinking", options.effort]),
79
+ ...(options.name === undefined || hasName ? [] : ["--name", options.name]),
80
+ ...promptArgs,
81
+ ...((options.disallowedTools?.length ?? 0) === 0 ? [] : ["--exclude-tools", (options.disallowedTools ?? []).join(",")]),
82
+ ], { cwd: options.cwd, env: { ...env, PI_CODING_AGENT_DIR: agentDir, OAR_PI_RPC_DIRECTORY: directory.path }, killTree: true, shutdown: "stdin", inheritStderr: false, extraPipe: true });
83
+ const keyPipe = child.extraPipe;
84
+ if (keyPipe === undefined) {
85
+ child.kill();
86
+ await child.exited;
87
+ throw new Error("Pi RPC requires a private credential pipe");
88
+ }
89
+ readPiRpcCredentials(keyPipe, credentials.add, () => { child.kill(); });
90
+ const control = piRpcControl(child, receive);
91
+ try {
92
+ await child.spawned;
93
+ const response = await control.request({ type: "get_state" });
94
+ const state = piRpcState(response);
95
+ if (!existsSync(path.join(directory.path, "ready"))) {
96
+ throw new Error(`Pi did not load the OAR RPC extension: ${child.diagnostics().stderr}`);
97
+ }
98
+ // oxlint-disable-next-line typescript/no-unsafe-assignment -- Written only by the bundled extension into this private directory.
99
+ const ready = JSON.parse(readFileSync(path.join(directory.path, "ready"), "utf8"));
100
+ if (ready.version !== launch.version) {
101
+ throw new Error(`Pi RPC session loaded ${ready.version}, expected ${launch.version}`);
102
+ }
103
+ if (options.model !== undefined && !ready.modelRegistered) {
104
+ throw new RuntimeFailureError("model_unavailable", `pi model ${options.model} is not registered in the native model registry`);
105
+ }
106
+ if (options.resume !== undefined && state.sessionId !== options.resume) {
107
+ throw new Error(`Pi resumed a different session: ${state.sessionId}`);
108
+ }
109
+ const effective = state.model === undefined ? null : `${state.model.provider}/${state.model.id}`;
110
+ if (options.model !== undefined && options.model !== effective) {
111
+ throw new Error(`pi did not apply model ${options.model}: the session reports ${effective ?? "no model"}`);
112
+ }
113
+ if (options.effort !== undefined && options.effort !== state.thinkingLevel) {
114
+ const { getSupportedThinkingLevels } = await import("@earendil-works/pi-ai");
115
+ throw new Error(piEffortRefusal(options.effort, { model: state.model, thinkingLevel: state.thinkingLevel,
116
+ getAvailableThinkingLevels: () => state.model === undefined ? [] : getSupportedThinkingLevels(state.model),
117
+ }) ?? "Pi did not apply the requested effort");
118
+ }
119
+ return { child, control, state, directory };
120
+ }
121
+ catch (error) {
122
+ child.kill();
123
+ await child.exited;
124
+ throw credentials.redactValue(error);
125
+ }
126
+ }
127
+ catch (error) {
128
+ directory.remove();
129
+ throw error;
130
+ }
131
+ }
132
+ //# sourceMappingURL=open.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"open.js","sourceRoot":"","sources":["../../../../src/runtimes/pi/rpc/open.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { SessionOptions } from "../../../contracts/session.js";
2
+ /** Pi treats an unreadable path as literal prompt text, so verify before spawning. */
3
+ export declare function piRpcPromptFiles(directory: string, options: SessionOptions): Promise<readonly string[]>;
4
+ //# sourceMappingURL=prompt-files.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-files.d.ts","sourceRoot":"","sources":["../../../../src/runtimes/pi/rpc/prompt-files.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAEpE,sFAAsF;AACtF,wBAAsB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC,CAiB7G"}
@@ -0,0 +1,27 @@
1
+ import { readFile, writeFile } from "node:fs/promises";
2
+ import path from "node:path";
3
+ /** Pi treats an unreadable path as literal prompt text, so verify before spawning. */
4
+ export async function piRpcPromptFiles(directory, options) {
5
+ const args = [];
6
+ for (const [flag, name, text] of [
7
+ ["--system-prompt", "system.txt", options.systemPrompt],
8
+ ["--append-system-prompt", "append.txt", options.appendSystemPrompt],
9
+ ]) {
10
+ if (text === undefined) {
11
+ continue;
12
+ }
13
+ const file = path.join(directory, name);
14
+ await writeFile(file, text, { mode: 0o600, flag: "wx" });
15
+ try {
16
+ if (await readFile(file, "utf8") !== text) {
17
+ throw new Error("The private prompt file did not retain its contents");
18
+ }
19
+ }
20
+ catch (error) {
21
+ throw new Error(`Pi RPC could not read its private ${name} prompt file; the session process was not started`, { cause: error });
22
+ }
23
+ args.push(flag, file);
24
+ }
25
+ return args;
26
+ }
27
+ //# sourceMappingURL=prompt-files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-files.js","sourceRoot":"","sources":["../../../../src/runtimes/pi/rpc/prompt-files.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,sFAAsF;AACtF,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,SAAiB,EAAE,OAAuB;IAC/E,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI;QAC/B,CAAC,iBAAiB,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,CAAC;QACvD,CAAC,wBAAwB,EAAE,YAAY,EAAE,OAAO,CAAC,kBAAkB,CAAC;KAC5D,EAAE,CAAC;QACX,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YAAC,SAAS;QAAC,CAAC;QACrC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QACxC,MAAM,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACzD,IAAI,CAAC;YACH,IAAI,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;gBAAC,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;YAAC,CAAC;QACxH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,qCAAqC,IAAI,mDAAmD,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QAClI,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACxB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { StartSession } from "../../../contracts/session.js";
2
+ import type { PiRuntimeOptions } from "../options.js";
3
+ /** One bundled native RPC process per session; Pi's event fold is shared with the SDK path. */
4
+ export declare const createPiRpcSession: (runtime: PiRuntimeOptions) => StartSession;
5
+ //# sourceMappingURL=session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../../src/runtimes/pi/rpc/session.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAA+B,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAM/F,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAKtD,+FAA+F;AAC/F,eAAO,MAAM,kBAAkB,GAAI,SAAS,gBAAgB,KAAG,YA2K7D,CAAC"}