@richhardry/codor 0.10.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 (388) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +293 -0
  3. package/bin/codor.mjs +7 -0
  4. package/node_modules/@codor/adapter-antigravity/dist/adapter.d.ts +41 -0
  5. package/node_modules/@codor/adapter-antigravity/dist/adapter.d.ts.map +1 -0
  6. package/node_modules/@codor/adapter-antigravity/dist/adapter.js +275 -0
  7. package/node_modules/@codor/adapter-antigravity/dist/adapter.js.map +1 -0
  8. package/node_modules/@codor/adapter-antigravity/dist/index.d.ts +2 -0
  9. package/node_modules/@codor/adapter-antigravity/dist/index.d.ts.map +1 -0
  10. package/node_modules/@codor/adapter-antigravity/dist/index.js +2 -0
  11. package/node_modules/@codor/adapter-antigravity/dist/index.js.map +1 -0
  12. package/node_modules/@codor/adapter-antigravity/package.json +18 -0
  13. package/node_modules/@codor/adapter-claude-code/dist/adapter.d.ts +94 -0
  14. package/node_modules/@codor/adapter-claude-code/dist/adapter.d.ts.map +1 -0
  15. package/node_modules/@codor/adapter-claude-code/dist/adapter.js +785 -0
  16. package/node_modules/@codor/adapter-claude-code/dist/adapter.js.map +1 -0
  17. package/node_modules/@codor/adapter-claude-code/dist/index.d.ts +8 -0
  18. package/node_modules/@codor/adapter-claude-code/dist/index.d.ts.map +1 -0
  19. package/node_modules/@codor/adapter-claude-code/dist/index.js +5 -0
  20. package/node_modules/@codor/adapter-claude-code/dist/index.js.map +1 -0
  21. package/node_modules/@codor/adapter-claude-code/dist/limits-probe.d.ts +18 -0
  22. package/node_modules/@codor/adapter-claude-code/dist/limits-probe.d.ts.map +1 -0
  23. package/node_modules/@codor/adapter-claude-code/dist/limits-probe.js +67 -0
  24. package/node_modules/@codor/adapter-claude-code/dist/limits-probe.js.map +1 -0
  25. package/node_modules/@codor/adapter-claude-code/dist/peek.d.ts +3 -0
  26. package/node_modules/@codor/adapter-claude-code/dist/peek.d.ts.map +1 -0
  27. package/node_modules/@codor/adapter-claude-code/dist/peek.js +128 -0
  28. package/node_modules/@codor/adapter-claude-code/dist/peek.js.map +1 -0
  29. package/node_modules/@codor/adapter-claude-code/dist/query.d.ts +9 -0
  30. package/node_modules/@codor/adapter-claude-code/dist/query.d.ts.map +1 -0
  31. package/node_modules/@codor/adapter-claude-code/dist/query.js +7 -0
  32. package/node_modules/@codor/adapter-claude-code/dist/query.js.map +1 -0
  33. package/node_modules/@codor/adapter-claude-code/dist/translate.d.ts +40 -0
  34. package/node_modules/@codor/adapter-claude-code/dist/translate.d.ts.map +1 -0
  35. package/node_modules/@codor/adapter-claude-code/dist/translate.js +505 -0
  36. package/node_modules/@codor/adapter-claude-code/dist/translate.js.map +1 -0
  37. package/node_modules/@codor/adapter-claude-code/package.json +18 -0
  38. package/node_modules/@codor/adapter-codex/dist/adapter.d.ts +105 -0
  39. package/node_modules/@codor/adapter-codex/dist/adapter.d.ts.map +1 -0
  40. package/node_modules/@codor/adapter-codex/dist/adapter.js +625 -0
  41. package/node_modules/@codor/adapter-codex/dist/adapter.js.map +1 -0
  42. package/node_modules/@codor/adapter-codex/dist/app-server-transport.d.ts +39 -0
  43. package/node_modules/@codor/adapter-codex/dist/app-server-transport.d.ts.map +1 -0
  44. package/node_modules/@codor/adapter-codex/dist/app-server-transport.js +186 -0
  45. package/node_modules/@codor/adapter-codex/dist/app-server-transport.js.map +1 -0
  46. package/node_modules/@codor/adapter-codex/dist/index.d.ts +8 -0
  47. package/node_modules/@codor/adapter-codex/dist/index.d.ts.map +1 -0
  48. package/node_modules/@codor/adapter-codex/dist/index.js +5 -0
  49. package/node_modules/@codor/adapter-codex/dist/index.js.map +1 -0
  50. package/node_modules/@codor/adapter-codex/dist/limits-probe.d.ts +18 -0
  51. package/node_modules/@codor/adapter-codex/dist/limits-probe.d.ts.map +1 -0
  52. package/node_modules/@codor/adapter-codex/dist/limits-probe.js +87 -0
  53. package/node_modules/@codor/adapter-codex/dist/limits-probe.js.map +1 -0
  54. package/node_modules/@codor/adapter-codex/dist/peek.d.ts +3 -0
  55. package/node_modules/@codor/adapter-codex/dist/peek.d.ts.map +1 -0
  56. package/node_modules/@codor/adapter-codex/dist/peek.js +98 -0
  57. package/node_modules/@codor/adapter-codex/dist/peek.js.map +1 -0
  58. package/node_modules/@codor/adapter-codex/dist/translate.d.ts +17 -0
  59. package/node_modules/@codor/adapter-codex/dist/translate.d.ts.map +1 -0
  60. package/node_modules/@codor/adapter-codex/dist/translate.js +286 -0
  61. package/node_modules/@codor/adapter-codex/dist/translate.js.map +1 -0
  62. package/node_modules/@codor/adapter-codex/package.json +17 -0
  63. package/node_modules/@codor/adapter-copilot/dist/adapter.d.ts +40 -0
  64. package/node_modules/@codor/adapter-copilot/dist/adapter.d.ts.map +1 -0
  65. package/node_modules/@codor/adapter-copilot/dist/adapter.js +190 -0
  66. package/node_modules/@codor/adapter-copilot/dist/adapter.js.map +1 -0
  67. package/node_modules/@codor/adapter-copilot/dist/index.d.ts +4 -0
  68. package/node_modules/@codor/adapter-copilot/dist/index.d.ts.map +1 -0
  69. package/node_modules/@codor/adapter-copilot/dist/index.js +3 -0
  70. package/node_modules/@codor/adapter-copilot/dist/index.js.map +1 -0
  71. package/node_modules/@codor/adapter-copilot/dist/translate.d.ts +11 -0
  72. package/node_modules/@codor/adapter-copilot/dist/translate.d.ts.map +1 -0
  73. package/node_modules/@codor/adapter-copilot/dist/translate.js +184 -0
  74. package/node_modules/@codor/adapter-copilot/dist/translate.js.map +1 -0
  75. package/node_modules/@codor/adapter-copilot/package.json +18 -0
  76. package/node_modules/@codor/adapter-cursor/dist/adapter.d.ts +32 -0
  77. package/node_modules/@codor/adapter-cursor/dist/adapter.d.ts.map +1 -0
  78. package/node_modules/@codor/adapter-cursor/dist/adapter.js +179 -0
  79. package/node_modules/@codor/adapter-cursor/dist/adapter.js.map +1 -0
  80. package/node_modules/@codor/adapter-cursor/dist/index.d.ts +9 -0
  81. package/node_modules/@codor/adapter-cursor/dist/index.d.ts.map +1 -0
  82. package/node_modules/@codor/adapter-cursor/dist/index.js +8 -0
  83. package/node_modules/@codor/adapter-cursor/dist/index.js.map +1 -0
  84. package/node_modules/@codor/adapter-cursor/dist/translate.d.ts +15 -0
  85. package/node_modules/@codor/adapter-cursor/dist/translate.d.ts.map +1 -0
  86. package/node_modules/@codor/adapter-cursor/dist/translate.js +164 -0
  87. package/node_modules/@codor/adapter-cursor/dist/translate.js.map +1 -0
  88. package/node_modules/@codor/adapter-cursor/package.json +17 -0
  89. package/node_modules/@codor/adapter-gemini/dist/adapter.d.ts +36 -0
  90. package/node_modules/@codor/adapter-gemini/dist/adapter.d.ts.map +1 -0
  91. package/node_modules/@codor/adapter-gemini/dist/adapter.js +245 -0
  92. package/node_modules/@codor/adapter-gemini/dist/adapter.js.map +1 -0
  93. package/node_modules/@codor/adapter-gemini/dist/index.d.ts +4 -0
  94. package/node_modules/@codor/adapter-gemini/dist/index.d.ts.map +1 -0
  95. package/node_modules/@codor/adapter-gemini/dist/index.js +3 -0
  96. package/node_modules/@codor/adapter-gemini/dist/index.js.map +1 -0
  97. package/node_modules/@codor/adapter-gemini/dist/translate.d.ts +12 -0
  98. package/node_modules/@codor/adapter-gemini/dist/translate.d.ts.map +1 -0
  99. package/node_modules/@codor/adapter-gemini/dist/translate.js +123 -0
  100. package/node_modules/@codor/adapter-gemini/dist/translate.js.map +1 -0
  101. package/node_modules/@codor/adapter-gemini/package.json +18 -0
  102. package/node_modules/@codor/adapter-opencode/dist/adapter.d.ts +42 -0
  103. package/node_modules/@codor/adapter-opencode/dist/adapter.d.ts.map +1 -0
  104. package/node_modules/@codor/adapter-opencode/dist/adapter.js +240 -0
  105. package/node_modules/@codor/adapter-opencode/dist/adapter.js.map +1 -0
  106. package/node_modules/@codor/adapter-opencode/dist/index.d.ts +4 -0
  107. package/node_modules/@codor/adapter-opencode/dist/index.d.ts.map +1 -0
  108. package/node_modules/@codor/adapter-opencode/dist/index.js +3 -0
  109. package/node_modules/@codor/adapter-opencode/dist/index.js.map +1 -0
  110. package/node_modules/@codor/adapter-opencode/dist/translate.d.ts +12 -0
  111. package/node_modules/@codor/adapter-opencode/dist/translate.d.ts.map +1 -0
  112. package/node_modules/@codor/adapter-opencode/dist/translate.js +144 -0
  113. package/node_modules/@codor/adapter-opencode/dist/translate.js.map +1 -0
  114. package/node_modules/@codor/adapter-opencode/package.json +18 -0
  115. package/node_modules/@codor/cli/dist/artifact.d.ts +33 -0
  116. package/node_modules/@codor/cli/dist/artifact.d.ts.map +1 -0
  117. package/node_modules/@codor/cli/dist/artifact.js +183 -0
  118. package/node_modules/@codor/cli/dist/artifact.js.map +1 -0
  119. package/node_modules/@codor/cli/dist/attach.d.ts +25 -0
  120. package/node_modules/@codor/cli/dist/attach.d.ts.map +1 -0
  121. package/node_modules/@codor/cli/dist/attach.js +133 -0
  122. package/node_modules/@codor/cli/dist/attach.js.map +1 -0
  123. package/node_modules/@codor/cli/dist/connection.d.ts +21 -0
  124. package/node_modules/@codor/cli/dist/connection.d.ts.map +1 -0
  125. package/node_modules/@codor/cli/dist/connection.js +130 -0
  126. package/node_modules/@codor/cli/dist/connection.js.map +1 -0
  127. package/node_modules/@codor/cli/dist/detect.d.ts +14 -0
  128. package/node_modules/@codor/cli/dist/detect.d.ts.map +1 -0
  129. package/node_modules/@codor/cli/dist/detect.js +99 -0
  130. package/node_modules/@codor/cli/dist/detect.js.map +1 -0
  131. package/node_modules/@codor/cli/dist/index.d.ts +17 -0
  132. package/node_modules/@codor/cli/dist/index.d.ts.map +1 -0
  133. package/node_modules/@codor/cli/dist/index.js +24 -0
  134. package/node_modules/@codor/cli/dist/index.js.map +1 -0
  135. package/node_modules/@codor/cli/dist/mirror.d.ts +4 -0
  136. package/node_modules/@codor/cli/dist/mirror.d.ts.map +1 -0
  137. package/node_modules/@codor/cli/dist/mirror.js +93 -0
  138. package/node_modules/@codor/cli/dist/mirror.js.map +1 -0
  139. package/node_modules/@codor/cli/dist/program.d.ts +17 -0
  140. package/node_modules/@codor/cli/dist/program.d.ts.map +1 -0
  141. package/node_modules/@codor/cli/dist/program.js +1068 -0
  142. package/node_modules/@codor/cli/dist/program.js.map +1 -0
  143. package/node_modules/@codor/cli/dist/runtime-install.d.ts +61 -0
  144. package/node_modules/@codor/cli/dist/runtime-install.d.ts.map +1 -0
  145. package/node_modules/@codor/cli/dist/runtime-install.js +122 -0
  146. package/node_modules/@codor/cli/dist/runtime-install.js.map +1 -0
  147. package/node_modules/@codor/cli/dist/runtime-paths.d.ts +24 -0
  148. package/node_modules/@codor/cli/dist/runtime-paths.d.ts.map +1 -0
  149. package/node_modules/@codor/cli/dist/runtime-paths.js +69 -0
  150. package/node_modules/@codor/cli/dist/runtime-paths.js.map +1 -0
  151. package/node_modules/@codor/cli/dist/setup-flow.d.ts +69 -0
  152. package/node_modules/@codor/cli/dist/setup-flow.d.ts.map +1 -0
  153. package/node_modules/@codor/cli/dist/setup-flow.js +110 -0
  154. package/node_modules/@codor/cli/dist/setup-flow.js.map +1 -0
  155. package/node_modules/@codor/cli/dist/setup-session.d.ts +105 -0
  156. package/node_modules/@codor/cli/dist/setup-session.d.ts.map +1 -0
  157. package/node_modules/@codor/cli/dist/setup-session.js +346 -0
  158. package/node_modules/@codor/cli/dist/setup-session.js.map +1 -0
  159. package/node_modules/@codor/cli/dist/setup-ui.d.ts +93 -0
  160. package/node_modules/@codor/cli/dist/setup-ui.d.ts.map +1 -0
  161. package/node_modules/@codor/cli/dist/setup-ui.js +249 -0
  162. package/node_modules/@codor/cli/dist/setup-ui.js.map +1 -0
  163. package/node_modules/@codor/cli/dist/setup.d.ts +108 -0
  164. package/node_modules/@codor/cli/dist/setup.d.ts.map +1 -0
  165. package/node_modules/@codor/cli/dist/setup.js +878 -0
  166. package/node_modules/@codor/cli/dist/setup.js.map +1 -0
  167. package/node_modules/@codor/cli/dist/terminal-keys.d.ts +26 -0
  168. package/node_modules/@codor/cli/dist/terminal-keys.d.ts.map +1 -0
  169. package/node_modules/@codor/cli/dist/terminal-keys.js +70 -0
  170. package/node_modules/@codor/cli/dist/terminal-keys.js.map +1 -0
  171. package/node_modules/@codor/cli/dist/terminal-qr.d.ts +2 -0
  172. package/node_modules/@codor/cli/dist/terminal-qr.d.ts.map +1 -0
  173. package/node_modules/@codor/cli/dist/terminal-qr.js +30 -0
  174. package/node_modules/@codor/cli/dist/terminal-qr.js.map +1 -0
  175. package/node_modules/@codor/cli/dist/up.d.ts +52 -0
  176. package/node_modules/@codor/cli/dist/up.d.ts.map +1 -0
  177. package/node_modules/@codor/cli/dist/up.js +178 -0
  178. package/node_modules/@codor/cli/dist/up.js.map +1 -0
  179. package/node_modules/@codor/cli/package.json +24 -0
  180. package/node_modules/@codor/cli/packaging/systemd/codor.service +21 -0
  181. package/node_modules/@codor/cli/runtime/web/assets/LandingPage-BOmG5kSw.js +31 -0
  182. package/node_modules/@codor/cli/runtime/web/assets/LedgerPage-CecuTS8-.js +1 -0
  183. package/node_modules/@codor/cli/runtime/web/assets/NoChannels-CYiBXGQd.js +11 -0
  184. package/node_modules/@codor/cli/runtime/web/assets/PairingCodeInput-Cr6XDWx-.js +1 -0
  185. package/node_modules/@codor/cli/runtime/web/assets/PairingPage-CQBWNA2L.js +6 -0
  186. package/node_modules/@codor/cli/runtime/web/assets/SettingsPage-DGLbSXE7.js +16 -0
  187. package/node_modules/@codor/cli/runtime/web/assets/StartupUnavailable-DdQBHip_.js +1 -0
  188. package/node_modules/@codor/cli/runtime/web/assets/arrow-left-BOpjMuRi.js +6 -0
  189. package/node_modules/@codor/cli/runtime/web/assets/browser-BWQYNOsD.js +6 -0
  190. package/node_modules/@codor/cli/runtime/web/assets/graph-toBZHlC0.js +1 -0
  191. package/node_modules/@codor/cli/runtime/web/assets/index-Cxi54Xim.js +408 -0
  192. package/node_modules/@codor/cli/runtime/web/assets/index-DjwJakJC.css +1 -0
  193. package/node_modules/@codor/cli/runtime/web/assets/qr-DpynCwP9.js +8 -0
  194. package/node_modules/@codor/cli/runtime/web/assets/react-C8w-UNLI.js +32 -0
  195. package/node_modules/@codor/cli/runtime/web/assets/sodium-DtsvMzX9.js +1 -0
  196. package/node_modules/@codor/cli/runtime/web/codor-192.png +0 -0
  197. package/node_modules/@codor/cli/runtime/web/codor-512.png +0 -0
  198. package/node_modules/@codor/cli/runtime/web/codor-apple-touch-180.png +0 -0
  199. package/node_modules/@codor/cli/runtime/web/codor-favicon.svg +86 -0
  200. package/node_modules/@codor/cli/runtime/web/codor-mark.svg +86 -0
  201. package/node_modules/@codor/cli/runtime/web/codor-maskable-512.png +0 -0
  202. package/node_modules/@codor/cli/runtime/web/codor-og.png +0 -0
  203. package/node_modules/@codor/cli/runtime/web/fonts/BitcountPropSingle-latin.woff2 +0 -0
  204. package/node_modules/@codor/cli/runtime/web/fonts/Geist-Variable.woff2 +0 -0
  205. package/node_modules/@codor/cli/runtime/web/fonts/GeistMono-Variable.woff2 +0 -0
  206. package/node_modules/@codor/cli/runtime/web/fonts/OFL.txt +93 -0
  207. package/node_modules/@codor/cli/runtime/web/index.html +53 -0
  208. package/node_modules/@codor/cli/runtime/web/manifest.webmanifest +1 -0
  209. package/node_modules/@codor/cli/runtime/web/sw.js +2 -0
  210. package/node_modules/@codor/protocol/dist/adapter.d.ts +118 -0
  211. package/node_modules/@codor/protocol/dist/adapter.d.ts.map +1 -0
  212. package/node_modules/@codor/protocol/dist/adapter.js +15 -0
  213. package/node_modules/@codor/protocol/dist/adapter.js.map +1 -0
  214. package/node_modules/@codor/protocol/dist/body.d.ts +14 -0
  215. package/node_modules/@codor/protocol/dist/body.d.ts.map +1 -0
  216. package/node_modules/@codor/protocol/dist/body.js +50 -0
  217. package/node_modules/@codor/protocol/dist/body.js.map +1 -0
  218. package/node_modules/@codor/protocol/dist/changelog.d.ts +30 -0
  219. package/node_modules/@codor/protocol/dist/changelog.d.ts.map +1 -0
  220. package/node_modules/@codor/protocol/dist/changelog.js +19 -0
  221. package/node_modules/@codor/protocol/dist/changelog.js.map +1 -0
  222. package/node_modules/@codor/protocol/dist/default-recipient.d.ts +8 -0
  223. package/node_modules/@codor/protocol/dist/default-recipient.d.ts.map +1 -0
  224. package/node_modules/@codor/protocol/dist/default-recipient.js +19 -0
  225. package/node_modules/@codor/protocol/dist/default-recipient.js.map +1 -0
  226. package/node_modules/@codor/protocol/dist/delivery.d.ts +42 -0
  227. package/node_modules/@codor/protocol/dist/delivery.d.ts.map +1 -0
  228. package/node_modules/@codor/protocol/dist/delivery.js +44 -0
  229. package/node_modules/@codor/protocol/dist/delivery.js.map +1 -0
  230. package/node_modules/@codor/protocol/dist/events.d.ts +284 -0
  231. package/node_modules/@codor/protocol/dist/events.d.ts.map +1 -0
  232. package/node_modules/@codor/protocol/dist/events.js +150 -0
  233. package/node_modules/@codor/protocol/dist/events.js.map +1 -0
  234. package/node_modules/@codor/protocol/dist/ids.d.ts +19 -0
  235. package/node_modules/@codor/protocol/dist/ids.d.ts.map +1 -0
  236. package/node_modules/@codor/protocol/dist/ids.js +27 -0
  237. package/node_modules/@codor/protocol/dist/ids.js.map +1 -0
  238. package/node_modules/@codor/protocol/dist/index.d.ts +14 -0
  239. package/node_modules/@codor/protocol/dist/index.d.ts.map +1 -0
  240. package/node_modules/@codor/protocol/dist/index.js +14 -0
  241. package/node_modules/@codor/protocol/dist/index.js.map +1 -0
  242. package/node_modules/@codor/protocol/dist/interaction.d.ts +45 -0
  243. package/node_modules/@codor/protocol/dist/interaction.d.ts.map +1 -0
  244. package/node_modules/@codor/protocol/dist/interaction.js +33 -0
  245. package/node_modules/@codor/protocol/dist/interaction.js.map +1 -0
  246. package/node_modules/@codor/protocol/dist/member.d.ts +146 -0
  247. package/node_modules/@codor/protocol/dist/member.d.ts.map +1 -0
  248. package/node_modules/@codor/protocol/dist/member.js +169 -0
  249. package/node_modules/@codor/protocol/dist/member.js.map +1 -0
  250. package/node_modules/@codor/protocol/dist/message.d.ts +166 -0
  251. package/node_modules/@codor/protocol/dist/message.d.ts.map +1 -0
  252. package/node_modules/@codor/protocol/dist/message.js +95 -0
  253. package/node_modules/@codor/protocol/dist/message.js.map +1 -0
  254. package/node_modules/@codor/protocol/dist/observability.d.ts +80 -0
  255. package/node_modules/@codor/protocol/dist/observability.d.ts.map +1 -0
  256. package/node_modules/@codor/protocol/dist/observability.js +41 -0
  257. package/node_modules/@codor/protocol/dist/observability.js.map +1 -0
  258. package/node_modules/@codor/protocol/dist/room.d.ts +430 -0
  259. package/node_modules/@codor/protocol/dist/room.d.ts.map +1 -0
  260. package/node_modules/@codor/protocol/dist/room.js +142 -0
  261. package/node_modules/@codor/protocol/dist/room.js.map +1 -0
  262. package/node_modules/@codor/protocol/dist/ws.d.ts +1348 -0
  263. package/node_modules/@codor/protocol/dist/ws.d.ts.map +1 -0
  264. package/node_modules/@codor/protocol/dist/ws.js +282 -0
  265. package/node_modules/@codor/protocol/dist/ws.js.map +1 -0
  266. package/node_modules/@codor/protocol/package.json +17 -0
  267. package/node_modules/@codor/switchboard/dist/adapter-registry.d.ts +14 -0
  268. package/node_modules/@codor/switchboard/dist/adapter-registry.d.ts.map +1 -0
  269. package/node_modules/@codor/switchboard/dist/adapter-registry.js +175 -0
  270. package/node_modules/@codor/switchboard/dist/adapter-registry.js.map +1 -0
  271. package/node_modules/@codor/switchboard/dist/authorization.d.ts +13 -0
  272. package/node_modules/@codor/switchboard/dist/authorization.d.ts.map +1 -0
  273. package/node_modules/@codor/switchboard/dist/authorization.js +96 -0
  274. package/node_modules/@codor/switchboard/dist/authorization.js.map +1 -0
  275. package/node_modules/@codor/switchboard/dist/blobs.d.ts +17 -0
  276. package/node_modules/@codor/switchboard/dist/blobs.d.ts.map +1 -0
  277. package/node_modules/@codor/switchboard/dist/blobs.js +54 -0
  278. package/node_modules/@codor/switchboard/dist/blobs.js.map +1 -0
  279. package/node_modules/@codor/switchboard/dist/collaboration.d.ts +115 -0
  280. package/node_modules/@codor/switchboard/dist/collaboration.d.ts.map +1 -0
  281. package/node_modules/@codor/switchboard/dist/collaboration.js +123 -0
  282. package/node_modules/@codor/switchboard/dist/collaboration.js.map +1 -0
  283. package/node_modules/@codor/switchboard/dist/continuation.d.ts +33 -0
  284. package/node_modules/@codor/switchboard/dist/continuation.d.ts.map +1 -0
  285. package/node_modules/@codor/switchboard/dist/continuation.js +177 -0
  286. package/node_modules/@codor/switchboard/dist/continuation.js.map +1 -0
  287. package/node_modules/@codor/switchboard/dist/crypto/browser-sessions.d.ts +22 -0
  288. package/node_modules/@codor/switchboard/dist/crypto/browser-sessions.d.ts.map +1 -0
  289. package/node_modules/@codor/switchboard/dist/crypto/browser-sessions.js +92 -0
  290. package/node_modules/@codor/switchboard/dist/crypto/browser-sessions.js.map +1 -0
  291. package/node_modules/@codor/switchboard/dist/crypto/challenge.d.ts +37 -0
  292. package/node_modules/@codor/switchboard/dist/crypto/challenge.d.ts.map +1 -0
  293. package/node_modules/@codor/switchboard/dist/crypto/challenge.js +132 -0
  294. package/node_modules/@codor/switchboard/dist/crypto/challenge.js.map +1 -0
  295. package/node_modules/@codor/switchboard/dist/crypto/keys.d.ts +41 -0
  296. package/node_modules/@codor/switchboard/dist/crypto/keys.d.ts.map +1 -0
  297. package/node_modules/@codor/switchboard/dist/crypto/keys.js +145 -0
  298. package/node_modules/@codor/switchboard/dist/crypto/keys.js.map +1 -0
  299. package/node_modules/@codor/switchboard/dist/crypto/pairing.d.ts +53 -0
  300. package/node_modules/@codor/switchboard/dist/crypto/pairing.d.ts.map +1 -0
  301. package/node_modules/@codor/switchboard/dist/crypto/pairing.js +182 -0
  302. package/node_modules/@codor/switchboard/dist/crypto/pairing.js.map +1 -0
  303. package/node_modules/@codor/switchboard/dist/crypto/roomkeys.d.ts +30 -0
  304. package/node_modules/@codor/switchboard/dist/crypto/roomkeys.d.ts.map +1 -0
  305. package/node_modules/@codor/switchboard/dist/crypto/roomkeys.js +101 -0
  306. package/node_modules/@codor/switchboard/dist/crypto/roomkeys.js.map +1 -0
  307. package/node_modules/@codor/switchboard/dist/daemon.d.ts +545 -0
  308. package/node_modules/@codor/switchboard/dist/daemon.d.ts.map +1 -0
  309. package/node_modules/@codor/switchboard/dist/daemon.js +3907 -0
  310. package/node_modules/@codor/switchboard/dist/daemon.js.map +1 -0
  311. package/node_modules/@codor/switchboard/dist/fake-adapter.d.ts +103 -0
  312. package/node_modules/@codor/switchboard/dist/fake-adapter.d.ts.map +1 -0
  313. package/node_modules/@codor/switchboard/dist/fake-adapter.js +228 -0
  314. package/node_modules/@codor/switchboard/dist/fake-adapter.js.map +1 -0
  315. package/node_modules/@codor/switchboard/dist/index.d.ts +44 -0
  316. package/node_modules/@codor/switchboard/dist/index.d.ts.map +1 -0
  317. package/node_modules/@codor/switchboard/dist/index.js +24 -0
  318. package/node_modules/@codor/switchboard/dist/index.js.map +1 -0
  319. package/node_modules/@codor/switchboard/dist/ledger/resolve.d.ts +12 -0
  320. package/node_modules/@codor/switchboard/dist/ledger/resolve.d.ts.map +1 -0
  321. package/node_modules/@codor/switchboard/dist/ledger/resolve.js +17 -0
  322. package/node_modules/@codor/switchboard/dist/ledger/resolve.js.map +1 -0
  323. package/node_modules/@codor/switchboard/dist/ledger/vault.d.ts +47 -0
  324. package/node_modules/@codor/switchboard/dist/ledger/vault.d.ts.map +1 -0
  325. package/node_modules/@codor/switchboard/dist/ledger/vault.js +175 -0
  326. package/node_modules/@codor/switchboard/dist/ledger/vault.js.map +1 -0
  327. package/node_modules/@codor/switchboard/dist/ledger/watch.d.ts +73 -0
  328. package/node_modules/@codor/switchboard/dist/ledger/watch.d.ts.map +1 -0
  329. package/node_modules/@codor/switchboard/dist/ledger/watch.js +232 -0
  330. package/node_modules/@codor/switchboard/dist/ledger/watch.js.map +1 -0
  331. package/node_modules/@codor/switchboard/dist/local-dirs.d.ts +14 -0
  332. package/node_modules/@codor/switchboard/dist/local-dirs.d.ts.map +1 -0
  333. package/node_modules/@codor/switchboard/dist/local-dirs.js +40 -0
  334. package/node_modules/@codor/switchboard/dist/local-dirs.js.map +1 -0
  335. package/node_modules/@codor/switchboard/dist/local-socket.d.ts +3 -0
  336. package/node_modules/@codor/switchboard/dist/local-socket.d.ts.map +1 -0
  337. package/node_modules/@codor/switchboard/dist/local-socket.js +16 -0
  338. package/node_modules/@codor/switchboard/dist/local-socket.js.map +1 -0
  339. package/node_modules/@codor/switchboard/dist/pricing.d.ts +32 -0
  340. package/node_modules/@codor/switchboard/dist/pricing.d.ts.map +1 -0
  341. package/node_modules/@codor/switchboard/dist/pricing.js +64 -0
  342. package/node_modules/@codor/switchboard/dist/pricing.js.map +1 -0
  343. package/node_modules/@codor/switchboard/dist/process-liveness.d.ts +2 -0
  344. package/node_modules/@codor/switchboard/dist/process-liveness.d.ts.map +1 -0
  345. package/node_modules/@codor/switchboard/dist/process-liveness.js +9 -0
  346. package/node_modules/@codor/switchboard/dist/process-liveness.js.map +1 -0
  347. package/node_modules/@codor/switchboard/dist/push/producer.d.ts +54 -0
  348. package/node_modules/@codor/switchboard/dist/push/producer.d.ts.map +1 -0
  349. package/node_modules/@codor/switchboard/dist/push/producer.js +168 -0
  350. package/node_modules/@codor/switchboard/dist/push/producer.js.map +1 -0
  351. package/node_modules/@codor/switchboard/dist/push/subscriptions.d.ts +29 -0
  352. package/node_modules/@codor/switchboard/dist/push/subscriptions.d.ts.map +1 -0
  353. package/node_modules/@codor/switchboard/dist/push/subscriptions.js +83 -0
  354. package/node_modules/@codor/switchboard/dist/push/subscriptions.js.map +1 -0
  355. package/node_modules/@codor/switchboard/dist/redact.d.ts +11 -0
  356. package/node_modules/@codor/switchboard/dist/redact.d.ts.map +1 -0
  357. package/node_modules/@codor/switchboard/dist/redact.js +65 -0
  358. package/node_modules/@codor/switchboard/dist/redact.js.map +1 -0
  359. package/node_modules/@codor/switchboard/dist/residency.d.ts +110 -0
  360. package/node_modules/@codor/switchboard/dist/residency.d.ts.map +1 -0
  361. package/node_modules/@codor/switchboard/dist/residency.js +587 -0
  362. package/node_modules/@codor/switchboard/dist/residency.js.map +1 -0
  363. package/node_modules/@codor/switchboard/dist/router.d.ts +120 -0
  364. package/node_modules/@codor/switchboard/dist/router.d.ts.map +1 -0
  365. package/node_modules/@codor/switchboard/dist/router.js +198 -0
  366. package/node_modules/@codor/switchboard/dist/router.js.map +1 -0
  367. package/node_modules/@codor/switchboard/dist/server.d.ts +50 -0
  368. package/node_modules/@codor/switchboard/dist/server.d.ts.map +1 -0
  369. package/node_modules/@codor/switchboard/dist/server.js +1425 -0
  370. package/node_modules/@codor/switchboard/dist/server.js.map +1 -0
  371. package/node_modules/@codor/switchboard/dist/store.d.ts +534 -0
  372. package/node_modules/@codor/switchboard/dist/store.d.ts.map +1 -0
  373. package/node_modules/@codor/switchboard/dist/store.js +2625 -0
  374. package/node_modules/@codor/switchboard/dist/store.js.map +1 -0
  375. package/node_modules/@codor/switchboard/dist/transport/hyperswarm.d.ts +59 -0
  376. package/node_modules/@codor/switchboard/dist/transport/hyperswarm.d.ts.map +1 -0
  377. package/node_modules/@codor/switchboard/dist/transport/hyperswarm.js +183 -0
  378. package/node_modules/@codor/switchboard/dist/transport/hyperswarm.js.map +1 -0
  379. package/node_modules/@codor/switchboard/dist/transport/peer.d.ts +87 -0
  380. package/node_modules/@codor/switchboard/dist/transport/peer.d.ts.map +1 -0
  381. package/node_modules/@codor/switchboard/dist/transport/peer.js +316 -0
  382. package/node_modules/@codor/switchboard/dist/transport/peer.js.map +1 -0
  383. package/node_modules/@codor/switchboard/dist/working-directory.d.ts +2 -0
  384. package/node_modules/@codor/switchboard/dist/working-directory.d.ts.map +1 -0
  385. package/node_modules/@codor/switchboard/dist/working-directory.js +26 -0
  386. package/node_modules/@codor/switchboard/dist/working-directory.js.map +1 -0
  387. package/node_modules/@codor/switchboard/package.json +33 -0
  388. package/package.json +58 -0
@@ -0,0 +1,785 @@
1
+ import { execFile } from 'node:child_process';
2
+ import { randomUUID } from 'node:crypto';
3
+ import { readdirSync } from 'node:fs';
4
+ import { homedir } from 'node:os';
5
+ import { join } from 'node:path';
6
+ import { PolicySchema, ThinkingLevelSchema } from '@codor/protocol';
7
+ import { probeClaudeLimits } from './limits-probe.js';
8
+ import { peekClaudeContextUsage } from './peek.js';
9
+ import { claudeQuery, } from './query.js';
10
+ import { claudeContextWindow, createTurnTranslator, wireEventFromHook, } from './translate.js';
11
+ const SESSION_FILE_RE = /^([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\.jsonl$/;
12
+ const CLAUDE_SETTING_SOURCES = [
13
+ 'user',
14
+ 'project',
15
+ 'local',
16
+ ];
17
+ // harn:assume harness-declares-supported-thinking-levels ref=claude-thinking-level-declaration
18
+ export const CLAUDE_THINKING_LEVELS = [
19
+ 'low',
20
+ 'medium',
21
+ 'high',
22
+ 'xhigh',
23
+ 'max',
24
+ 'ultracode',
25
+ ];
26
+ function invalidPolicy(policy) {
27
+ return new Error(`unknown policy '${policy}'; valid policies: ${PolicySchema.options.join(', ')}`);
28
+ }
29
+ function assertThinkingLevel(thinking) {
30
+ if (thinking === undefined)
31
+ return;
32
+ if (!CLAUDE_THINKING_LEVELS.includes(thinking)) {
33
+ throw new Error(`adapter 'claude-code' does not support thinking level '${thinking}'; ` +
34
+ `valid levels: ${CLAUDE_THINKING_LEVELS.join(', ')}`);
35
+ }
36
+ }
37
+ // harn:end harness-declares-supported-thinking-levels
38
+ // harn:assume canonical-spawn-controls-enforced ref=claude-spawn-control-mapping
39
+ export function claudePermissionMode(policy) {
40
+ if (policy === undefined)
41
+ return undefined;
42
+ if (!PolicySchema.safeParse(policy).success)
43
+ throw invalidPolicy(policy);
44
+ return {
45
+ 'read-only': 'plan',
46
+ 'workspace-write': 'acceptEdits',
47
+ 'full-access': 'bypassPermissions',
48
+ }[policy];
49
+ }
50
+ function claudeThinkingOptions(thinking) {
51
+ if (thinking === undefined)
52
+ return {};
53
+ ThinkingLevelSchema.parse(thinking);
54
+ assertThinkingLevel(thinking);
55
+ if (thinking === 'ultracode') {
56
+ return {
57
+ thinking: { type: 'adaptive' },
58
+ effort: 'xhigh',
59
+ settings: { ultracode: true },
60
+ };
61
+ }
62
+ return {
63
+ thinking: { type: 'adaptive' },
64
+ effort: thinking,
65
+ };
66
+ }
67
+ function createAsyncMessageInput() {
68
+ const queue = [];
69
+ const resolvers = [];
70
+ let closed = false;
71
+ return {
72
+ push(item) {
73
+ if (closed)
74
+ throw new Error('Claude SDK input is closed');
75
+ const resolve = resolvers.shift();
76
+ if (resolve)
77
+ resolve({ value: item, done: false });
78
+ else
79
+ queue.push(item);
80
+ },
81
+ end() {
82
+ closed = true;
83
+ while (resolvers.length > 0) {
84
+ resolvers.shift()?.({ value: undefined, done: true });
85
+ }
86
+ },
87
+ iterable: {
88
+ [Symbol.asyncIterator]() {
89
+ return {
90
+ next: () => {
91
+ const value = queue.shift();
92
+ if (value !== undefined)
93
+ return Promise.resolve({ value, done: false });
94
+ if (closed)
95
+ return Promise.resolve({ value: undefined, done: true });
96
+ return new Promise((resolve) => resolvers.push(resolve));
97
+ },
98
+ };
99
+ },
100
+ },
101
+ };
102
+ }
103
+ /**
104
+ * Compaction runs as its own engine turn and can legitimately take minutes on a
105
+ * long session; bound it so an engine that accepts `/compact` and then goes
106
+ * quiet surfaces as an error instead of a spinner that never resolves.
107
+ */
108
+ const COMPACTION_TIMEOUT_MS = 180_000;
109
+ function sortedEnvironment(env) {
110
+ return JSON.stringify(Object.entries(env)
111
+ .filter((entry) => entry[1] !== undefined)
112
+ .sort(([left], [right]) => left.localeCompare(right)));
113
+ }
114
+ function queryIdentity(session) {
115
+ return {
116
+ cwd: session.cwd,
117
+ model: session.model,
118
+ policy: session.policy,
119
+ thinking: session.thinking,
120
+ env: sortedEnvironment({ ...process.env, ...session.env }),
121
+ };
122
+ }
123
+ function sameIdentity(left, right) {
124
+ return left !== undefined &&
125
+ left.cwd === right.cwd &&
126
+ left.model === right.model &&
127
+ left.policy === right.policy &&
128
+ left.thinking === right.thinking &&
129
+ left.env === right.env;
130
+ }
131
+ function asQuestion(input) {
132
+ if (!Array.isArray(input.questions))
133
+ return undefined;
134
+ const first = input.questions[0];
135
+ if (typeof first !== 'object' || first === null)
136
+ return undefined;
137
+ const source = first;
138
+ const options = Array.isArray(source.options)
139
+ ? source.options.flatMap((value) => {
140
+ if (typeof value !== 'object' || value === null)
141
+ return [];
142
+ const option = value;
143
+ return typeof option.label === 'string'
144
+ ? [{
145
+ label: option.label,
146
+ ...(typeof option.description === 'string' && { description: option.description }),
147
+ }]
148
+ : [];
149
+ })
150
+ : undefined;
151
+ return {
152
+ ...(typeof source.question === 'string' && { question: source.question }),
153
+ ...(options !== undefined && { options }),
154
+ ...(typeof source.multiSelect === 'boolean' && { multiSelect: source.multiSelect }),
155
+ };
156
+ }
157
+ export function cardFromSdkPermission(interactionId, toolName, input, options = {}) {
158
+ if (toolName === 'AskUserQuestion') {
159
+ const question = asQuestion(input);
160
+ return {
161
+ interaction_id: interactionId,
162
+ kind: 'ask',
163
+ prompt: question?.question ?? options.title ?? '',
164
+ options: question?.options,
165
+ multi: question?.multiSelect ?? false,
166
+ };
167
+ }
168
+ const command = typeof input.command === 'string' ? input.command : undefined;
169
+ return {
170
+ interaction_id: interactionId,
171
+ kind: 'approval',
172
+ prompt: options.title ?? `Allow ${toolName}?`,
173
+ options: [
174
+ { label: 'allow once' },
175
+ { label: 'allow always' },
176
+ { label: 'deny' },
177
+ ],
178
+ tool: toolName,
179
+ detail: command ?? options.description ?? JSON.stringify(input),
180
+ };
181
+ }
182
+ function questionAnswers(input, answer) {
183
+ if (typeof answer === 'object' && answer !== null && !Array.isArray(answer)) {
184
+ return answer;
185
+ }
186
+ const question = asQuestion(input)?.question ?? '';
187
+ return {
188
+ [question]: Array.isArray(answer) ? answer.join(', ') : String(answer ?? ''),
189
+ };
190
+ }
191
+ function defaultInboxHookRunner(context) {
192
+ return new Promise((resolve, reject) => {
193
+ // harn:assume codor-runtime-identity-is-a-clean-break ref=adapter-runtime-identity
194
+ execFile('codor', ['inbox', '--new', '--consume', '--format', 'hook'], { cwd: context.cwd, env: context.env, maxBuffer: 256 * 1024 }, (error, stdout) => {
195
+ if (error) {
196
+ reject(error);
197
+ return;
198
+ }
199
+ const output = stdout.trim();
200
+ if (output === '') {
201
+ resolve(undefined);
202
+ return;
203
+ }
204
+ try {
205
+ resolve(JSON.parse(output));
206
+ }
207
+ catch (parseError) {
208
+ reject(parseError);
209
+ }
210
+ });
211
+ // harn:end codor-runtime-identity-is-a-clean-break
212
+ });
213
+ }
214
+ /**
215
+ * Claude Code adapter backed by one long-lived Agent SDK query per member.
216
+ * query() owns the Claude runtime/control transport; Codor owns turn
217
+ * normalization, durable interaction cards, and session recovery.
218
+ */
219
+ export class ClaudeCodeAdapter {
220
+ id = 'claude-code';
221
+ capabilities = {
222
+ resume: true,
223
+ discover: true,
224
+ interactiveAttach: true,
225
+ ask: true,
226
+ approvals: 'runtime',
227
+ extensions: true,
228
+ thinking: true,
229
+ thinking_levels: CLAUDE_THINKING_LEVELS,
230
+ // harn:assume live-inbox-capability-is-evidence-backed ref=claude-live-inbox-capability
231
+ live_inbox: true,
232
+ // harn:end live-inbox-capability-is-evidence-backed
233
+ // harn:assume harness-declares-what-a-policy-becomes ref=adapter-policy-declarations
234
+ policies: {
235
+ 'read-only': 'plan',
236
+ 'workspace-write': 'acceptEdits',
237
+ 'full-access': 'bypassPermissions',
238
+ },
239
+ // harn:end harness-declares-what-a-policy-becomes
240
+ };
241
+ runtimes = new WeakMap();
242
+ memberRuntimes = new Map();
243
+ queryFactory;
244
+ inboxHookRunner;
245
+ constructor(options = {}) {
246
+ this.queryFactory = options.queryFactory ?? ((input) => claudeQuery(input));
247
+ this.inboxHookRunner = options.inboxHookRunner ?? defaultInboxHookRunner;
248
+ }
249
+ spawn(opts) {
250
+ claudePermissionMode(opts.policy);
251
+ if (opts.thinking !== undefined) {
252
+ ThinkingLevelSchema.parse(opts.thinking);
253
+ assertThinkingLevel(opts.thinking);
254
+ }
255
+ return {
256
+ harness: this.id,
257
+ cwd: opts.cwd,
258
+ model: opts.model,
259
+ policy: opts.policy,
260
+ thinking: opts.thinking,
261
+ };
262
+ }
263
+ // harn:assume adapters-own-their-model-catalog ref=claude-code-model-catalog
264
+ listModels() {
265
+ return Promise.resolve({
266
+ models: ['haiku', 'sonnet', 'opus', 'fable'],
267
+ source: 'curated',
268
+ });
269
+ }
270
+ // harn:end adapters-own-their-model-catalog
271
+ // harn:assume context-peek-reads-session-artifacts ref=claude-context-peek
272
+ peekContextUsage(session_ref) {
273
+ return Promise.resolve(peekClaudeContextUsage(session_ref, claudeContextWindow));
274
+ }
275
+ // harn:end context-peek-reads-session-artifacts
276
+ attach(session_ref) {
277
+ return { harness: this.id, session_ref, cwd: process.cwd() };
278
+ }
279
+ // harn:assume claude-agent-sdk-query-is-the-session-runtime ref=claude-sdk-session-lifecycle
280
+ async *deliver(session, payload, hooks = {}) {
281
+ const runtime = this.runtimeFor(session);
282
+ await this.prepareRuntime(runtime, session);
283
+ if (runtime.active !== null) {
284
+ throw new Error('a Claude turn is already in flight for this member');
285
+ }
286
+ const turn = {
287
+ translator: createTurnTranslator(runtime.context),
288
+ hooks,
289
+ queue: [],
290
+ wake: null,
291
+ terminal: false,
292
+ done: false,
293
+ interrupted: false,
294
+ reportedSessionRef: session.session_ref,
295
+ };
296
+ runtime.active = turn;
297
+ try {
298
+ try {
299
+ await this.ensureQuery(runtime);
300
+ hooks.onStarted?.({});
301
+ this.startQueryPump(runtime);
302
+ runtime.input.push({
303
+ type: 'user',
304
+ message: {
305
+ role: 'user',
306
+ content: [{ type: 'text', text: payload }],
307
+ },
308
+ parent_tool_use_id: null,
309
+ uuid: randomUUID(),
310
+ session_id: session.session_ref ?? '',
311
+ });
312
+ }
313
+ catch (error) {
314
+ const detail = error instanceof Error ? error.message : String(error);
315
+ this.push(turn, [{ type: 'run.completed', status: 'failed', error: detail }]);
316
+ turn.terminal = true;
317
+ turn.done = true;
318
+ await this.retireQuery(runtime);
319
+ }
320
+ while (true) {
321
+ if (turn.queue.length > 0) {
322
+ yield turn.queue.shift();
323
+ continue;
324
+ }
325
+ if (turn.done)
326
+ break;
327
+ await new Promise((resolve) => {
328
+ turn.wake = resolve;
329
+ });
330
+ turn.wake = null;
331
+ }
332
+ }
333
+ finally {
334
+ if (runtime.active === turn)
335
+ runtime.active = null;
336
+ if (!turn.terminal) {
337
+ this.completeTurn(runtime, turn, {
338
+ type: 'run.completed',
339
+ status: 'interrupted',
340
+ });
341
+ void this.retireQuery(runtime);
342
+ }
343
+ }
344
+ }
345
+ runtimeFor(session) {
346
+ const existing = this.runtimes.get(session);
347
+ if (existing !== undefined) {
348
+ existing.session = session;
349
+ return existing;
350
+ }
351
+ const memberKey = session.env?.CODOR_MEMBER_ID;
352
+ const memberRuntime = memberKey === undefined
353
+ ? undefined
354
+ : this.memberRuntimes.get(memberKey);
355
+ const runtime = memberRuntime ?? {
356
+ session,
357
+ ...(memberKey !== undefined && { memberKey }),
358
+ query: null,
359
+ input: null,
360
+ pump: null,
361
+ retiring: null,
362
+ active: null,
363
+ context: {
364
+ ...(session.session_ref !== undefined && { sessionId: session.session_ref }),
365
+ },
366
+ pendingPermissions: new Map(),
367
+ pendingCompaction: null,
368
+ };
369
+ runtime.session = session;
370
+ this.runtimes.set(session, runtime);
371
+ if (memberKey !== undefined)
372
+ this.memberRuntimes.set(memberKey, runtime);
373
+ return runtime;
374
+ }
375
+ async prepareRuntime(runtime, session) {
376
+ if (runtime.retiring !== null)
377
+ await runtime.retiring;
378
+ const nextIdentity = queryIdentity(session);
379
+ if (runtime.query !== null && !sameIdentity(runtime.identity, nextIdentity)) {
380
+ await this.retireQuery(runtime);
381
+ }
382
+ runtime.session = session;
383
+ runtime.context.sessionId = session.session_ref ?? runtime.context.sessionId;
384
+ if (runtime.query === null)
385
+ runtime.identity = nextIdentity;
386
+ }
387
+ async ensureQuery(runtime) {
388
+ if (runtime.retiring !== null)
389
+ await runtime.retiring;
390
+ if (runtime.query !== null)
391
+ return;
392
+ // A query that just exited clears runtime.query from inside its pump before
393
+ // the pump's completion callback clears runtime.pump. Do not install the
394
+ // replacement in that narrow window or startQueryPump would mistake the
395
+ // settled, previous pump for the replacement's pump.
396
+ if (runtime.pump !== null)
397
+ await runtime.pump;
398
+ if (runtime.query !== null)
399
+ return;
400
+ const input = createAsyncMessageInput();
401
+ const query = claudeQuery({ prompt: input.iterable, options: this.queryOptions(runtime) }, this.queryFactory);
402
+ runtime.input = input;
403
+ runtime.query = query;
404
+ runtime.identity = queryIdentity(runtime.session);
405
+ }
406
+ startQueryPump(runtime) {
407
+ if (runtime.query === null || runtime.pump !== null)
408
+ return;
409
+ const pump = this.runQueryPump(runtime, runtime.query);
410
+ runtime.pump = pump;
411
+ void pump.finally(() => {
412
+ if (runtime.pump === pump)
413
+ runtime.pump = null;
414
+ });
415
+ }
416
+ queryOptions(runtime) {
417
+ const session = runtime.session;
418
+ const permissionMode = claudePermissionMode(session.policy);
419
+ const extensionHook = async (input) => {
420
+ const event = wireEventFromHook(input);
421
+ if (event !== undefined && runtime.active !== null)
422
+ this.push(runtime.active, [event]);
423
+ return {};
424
+ };
425
+ // harn:assume claude-sdk-hooks-are-authoritative ref=claude-sdk-hook-callbacks
426
+ const postToolUseHook = async () => {
427
+ const current = runtime.session;
428
+ // harn:assume live-inbox-capability-is-evidence-backed ref=claude-post-tool-use-hook
429
+ return await this.inboxHookRunner({
430
+ cwd: current.cwd,
431
+ env: { ...process.env, ...current.env },
432
+ }) ?? {};
433
+ // harn:end live-inbox-capability-is-evidence-backed
434
+ };
435
+ // harn:end claude-sdk-hooks-are-authoritative
436
+ return {
437
+ cwd: session.cwd,
438
+ includePartialMessages: true,
439
+ systemPrompt: { type: 'preset', preset: 'claude_code' },
440
+ settingSources: CLAUDE_SETTING_SOURCES,
441
+ canUseTool: this.permissionCallback(runtime),
442
+ hooks: {
443
+ SubagentStart: [{ hooks: [extensionHook] }],
444
+ SubagentStop: [{ hooks: [extensionHook] }],
445
+ PostToolUse: [{ hooks: [postToolUseHook] }],
446
+ },
447
+ allowDangerouslySkipPermissions: true,
448
+ ...(permissionMode !== undefined && { permissionMode }),
449
+ ...(session.model !== undefined && { model: session.model }),
450
+ ...(session.session_ref !== undefined && { resume: session.session_ref }),
451
+ ...claudeThinkingOptions(session.thinking),
452
+ // harn:assume adapter-children-inherit-session-env ref=claude-child-environment
453
+ env: { ...process.env, ...session.env },
454
+ // harn:end adapter-children-inherit-session-env
455
+ };
456
+ }
457
+ permissionCallback(runtime) {
458
+ // harn:assume claude-sdk-permissions-back-codor-interactions ref=claude-sdk-permission-callback
459
+ return async (toolName, input, options) => {
460
+ const turn = runtime.active;
461
+ if (turn === null || turn.done) {
462
+ throw new Error('Claude requested permission without an active turn');
463
+ }
464
+ const interactionId = `permission-${randomUUID()}`;
465
+ const card = cardFromSdkPermission(interactionId, toolName, input, options);
466
+ this.push(turn, [
467
+ card.kind === 'ask'
468
+ ? { type: 'ask.raised', card }
469
+ : { type: 'approval.raised', card },
470
+ ]);
471
+ return await new Promise((resolve, reject) => {
472
+ const abort = () => {
473
+ runtime.pendingPermissions.delete(interactionId);
474
+ reject(new Error('Claude permission request aborted'));
475
+ };
476
+ if (options.signal.aborted) {
477
+ abort();
478
+ return;
479
+ }
480
+ options.signal.addEventListener('abort', abort, { once: true });
481
+ runtime.pendingPermissions.set(interactionId, {
482
+ toolName,
483
+ input,
484
+ suggestions: options.suggestions,
485
+ resolve,
486
+ reject,
487
+ cleanup: () => options.signal.removeEventListener('abort', abort),
488
+ });
489
+ });
490
+ };
491
+ // harn:end claude-sdk-permissions-back-codor-interactions
492
+ }
493
+ async runQueryPump(runtime, query) {
494
+ let failure;
495
+ try {
496
+ for await (const message of query) {
497
+ if (runtime.query !== query)
498
+ return;
499
+ this.routeMessage(runtime, message);
500
+ }
501
+ }
502
+ catch (error) {
503
+ failure = error instanceof Error ? error : new Error(String(error));
504
+ }
505
+ finally {
506
+ if (runtime.query === query) {
507
+ runtime.query = null;
508
+ runtime.input?.end();
509
+ runtime.input = null;
510
+ // A query that ended can never deliver the boundary: fail now with the
511
+ // real reason instead of leaving the operator on a 180s timeout.
512
+ this.failCompaction(runtime, failure ?? new Error('Claude query closed before compaction completed'));
513
+ this.rejectPendingPermissions(runtime, failure ?? new Error('Claude SDK query ended before permission resolution'));
514
+ const turn = runtime.active;
515
+ if (turn !== null && !turn.terminal) {
516
+ this.completeTurn(runtime, turn, turn.interrupted
517
+ ? { type: 'run.completed', status: 'interrupted' }
518
+ : {
519
+ type: 'run.completed',
520
+ status: 'failed',
521
+ error: failure?.message ?? 'Claude SDK query ended before terminal result',
522
+ });
523
+ }
524
+ }
525
+ }
526
+ }
527
+ routeMessage(runtime, message) {
528
+ const turn = runtime.active;
529
+ if (turn === null || turn.done) {
530
+ this.observeCompaction(runtime, message);
531
+ return;
532
+ }
533
+ const events = turn.translator.push(message);
534
+ this.push(turn, events);
535
+ const discovered = turn.translator.sessionId();
536
+ if (discovered !== undefined && discovered !== turn.reportedSessionRef) {
537
+ runtime.context.sessionId = discovered;
538
+ runtime.session.session_ref = discovered;
539
+ turn.reportedSessionRef = discovered;
540
+ turn.hooks.onSessionRef?.(discovered);
541
+ }
542
+ if (events.some((event) => event.type === 'run.completed')) {
543
+ turn.terminal = true;
544
+ turn.done = true;
545
+ turn.wake?.();
546
+ }
547
+ }
548
+ push(turn, events) {
549
+ if (events.length === 0)
550
+ return;
551
+ turn.queue.push(...events);
552
+ turn.wake?.();
553
+ }
554
+ completeTurn(runtime, turn, event) {
555
+ if (turn.terminal)
556
+ return;
557
+ this.rejectPendingPermissions(runtime, new Error('Claude turn ended before permission resolution'));
558
+ this.push(turn, [event]);
559
+ turn.terminal = true;
560
+ turn.done = true;
561
+ turn.wake?.();
562
+ }
563
+ rejectPendingPermissions(runtime, error) {
564
+ for (const [id, pending] of runtime.pendingPermissions) {
565
+ pending.cleanup();
566
+ pending.reject(error);
567
+ runtime.pendingPermissions.delete(id);
568
+ }
569
+ }
570
+ async retireQuery(runtime, removeRuntime = false) {
571
+ if (runtime.retiring !== null)
572
+ return await runtime.retiring;
573
+ this.failCompaction(runtime, new Error('Claude query retired before compaction completed'));
574
+ const query = runtime.query;
575
+ const input = runtime.input;
576
+ const pump = runtime.pump;
577
+ runtime.query = null;
578
+ runtime.input = null;
579
+ this.rejectPendingPermissions(runtime, new Error('Claude SDK query retired'));
580
+ const retiring = (async () => {
581
+ if (query !== null) {
582
+ try {
583
+ await query.interrupt();
584
+ }
585
+ catch {
586
+ // A crashed query is already unavailable; close/return still release it.
587
+ }
588
+ input?.end();
589
+ query.close();
590
+ try {
591
+ await query.return?.();
592
+ }
593
+ catch {
594
+ // The iterator may already have failed.
595
+ }
596
+ }
597
+ await pump?.catch(() => undefined);
598
+ if (removeRuntime && runtime.memberKey !== undefined) {
599
+ this.memberRuntimes.delete(runtime.memberKey);
600
+ }
601
+ })();
602
+ runtime.retiring = retiring;
603
+ try {
604
+ await retiring;
605
+ }
606
+ finally {
607
+ if (runtime.retiring === retiring)
608
+ runtime.retiring = null;
609
+ }
610
+ }
611
+ // harn:end claude-agent-sdk-query-is-the-session-runtime
612
+ probeLimits() {
613
+ return probeClaudeLimits();
614
+ }
615
+ // harn:assume claude-sdk-permissions-back-codor-interactions ref=claude-sdk-permission-callback
616
+ async respondInteraction(session, interaction_id, answer) {
617
+ const runtime = this.runtimes.get(session)
618
+ ?? (session.env?.CODOR_MEMBER_ID === undefined
619
+ ? undefined
620
+ : this.memberRuntimes.get(session.env.CODOR_MEMBER_ID));
621
+ const pending = runtime?.pendingPermissions.get(interaction_id);
622
+ if (runtime === undefined || pending === undefined) {
623
+ throw new Error(`no pending interaction ${interaction_id}`);
624
+ }
625
+ runtime.pendingPermissions.delete(interaction_id);
626
+ pending.cleanup();
627
+ if (pending.toolName === 'AskUserQuestion') {
628
+ pending.resolve({
629
+ behavior: 'allow',
630
+ updatedInput: {
631
+ ...pending.input,
632
+ answers: questionAnswers(pending.input, answer),
633
+ },
634
+ });
635
+ return;
636
+ }
637
+ const choice = typeof answer === 'string' ? answer : 'deny';
638
+ if (choice === 'deny') {
639
+ pending.resolve({ behavior: 'deny', message: 'denied by codor operator' });
640
+ return;
641
+ }
642
+ pending.resolve({
643
+ behavior: 'allow',
644
+ updatedInput: pending.input,
645
+ ...(choice === 'allow always' &&
646
+ pending.suggestions !== undefined &&
647
+ pending.suggestions.length > 0 && {
648
+ updatedPermissions: pending.suggestions,
649
+ }),
650
+ });
651
+ }
652
+ // harn:end claude-sdk-permissions-back-codor-interactions
653
+ /**
654
+ * Compact this session using Claude's OWN compaction: an unwrapped `/compact`
655
+ * pushed into the persistent SDK query, exactly as a human typing it would.
656
+ * Only ever called for an idle session — a turn in flight is refused rather
657
+ * than raced, because compaction rewrites the very history the turn is using.
658
+ * Resolves with the re-baselined context the compact_boundary reports, so the
659
+ * ring updates without waiting for a next turn; the boundary's timeline items
660
+ * are NOT journaled — compaction outside a run is member state, not evidence.
661
+ */
662
+ async compactSession(session) {
663
+ const runtime = this.liveRuntime(session);
664
+ if (runtime === undefined)
665
+ throw new Error('no live Claude session to compact');
666
+ if (runtime.active !== null && !runtime.active.terminal) {
667
+ throw new Error('cannot compact while a turn is in flight');
668
+ }
669
+ if (runtime.pendingCompaction !== null)
670
+ throw new Error('a compaction is already in flight');
671
+ await this.ensureQuery(runtime);
672
+ this.startQueryPump(runtime);
673
+ const settled = new Promise((resolve, reject) => {
674
+ const timer = setTimeout(() => this.failCompaction(runtime, new Error('Claude compaction timed out')), COMPACTION_TIMEOUT_MS);
675
+ timer.unref?.();
676
+ runtime.pendingCompaction = {
677
+ translator: createTurnTranslator(runtime.context),
678
+ settle: resolve,
679
+ fail: reject,
680
+ timer,
681
+ };
682
+ });
683
+ try {
684
+ runtime.input.push({
685
+ type: 'user',
686
+ message: { role: 'user', content: [{ type: 'text', text: '/compact' }] },
687
+ parent_tool_use_id: null,
688
+ uuid: randomUUID(),
689
+ session_id: session.session_ref ?? '',
690
+ });
691
+ }
692
+ catch (error) {
693
+ this.clearCompaction(runtime);
694
+ throw error instanceof Error ? error : new Error(String(error));
695
+ }
696
+ return await settled;
697
+ }
698
+ /**
699
+ * The pump drops every message while no turn is active — which is precisely
700
+ * when a manual compaction runs — so the boundary is observed here instead.
701
+ * Only the engine's own re-baseline settles it: a boundary that reports no
702
+ * post-token count resolves undefined rather than clobbering a good gauge.
703
+ */
704
+ observeCompaction(runtime, message) {
705
+ const pending = runtime.pendingCompaction;
706
+ if (pending === null)
707
+ return;
708
+ let events;
709
+ try {
710
+ events = pending.translator.push(message);
711
+ }
712
+ catch (error) {
713
+ this.failCompaction(runtime, error instanceof Error ? error : new Error(String(error)));
714
+ return;
715
+ }
716
+ const usage = events.find((event) => event.type === 'usage_updated');
717
+ const completed = events.some((event) => event.type === 'timeline' &&
718
+ event.item.type === 'compaction' &&
719
+ event.item.status === 'completed');
720
+ if (!completed)
721
+ return;
722
+ this.clearCompaction(runtime);
723
+ pending.settle(usage?.type === 'usage_updated' ? usage.usage : undefined);
724
+ }
725
+ /** Every terminal path clears the pending state; none may leak a promise. */
726
+ clearCompaction(runtime) {
727
+ const pending = runtime.pendingCompaction;
728
+ if (pending === null)
729
+ return null;
730
+ clearTimeout(pending.timer);
731
+ runtime.pendingCompaction = null;
732
+ return pending;
733
+ }
734
+ failCompaction(runtime, error) {
735
+ this.clearCompaction(runtime)?.fail(error);
736
+ }
737
+ /** Find-only: the runtime this session already has, never creating one. */
738
+ liveRuntime(session) {
739
+ return this.runtimes.get(session)
740
+ ?? (session.env?.CODOR_MEMBER_ID === undefined
741
+ ? undefined
742
+ : this.memberRuntimes.get(session.env.CODOR_MEMBER_ID));
743
+ }
744
+ interrupt(session) {
745
+ const runtime = this.liveRuntime(session);
746
+ if (runtime === undefined)
747
+ return;
748
+ const turn = runtime.active;
749
+ if (turn !== null && !turn.terminal) {
750
+ turn.interrupted = true;
751
+ this.completeTurn(runtime, turn, { type: 'run.completed', status: 'interrupted' });
752
+ }
753
+ void this.retireQuery(runtime, true);
754
+ }
755
+ /** Session ids from the transcript store (~/.claude/projects/<cwd-slug>/). */
756
+ discoverSessions() {
757
+ const refs = [];
758
+ const root = join(process.env.CLAUDE_CONFIG_DIR ?? join(homedir(), '.claude'), 'projects');
759
+ let projects;
760
+ try {
761
+ projects = readdirSync(root, { withFileTypes: true });
762
+ }
763
+ catch {
764
+ return refs;
765
+ }
766
+ for (const project of projects) {
767
+ if (!project.isDirectory())
768
+ continue;
769
+ let files;
770
+ try {
771
+ files = readdirSync(join(root, project.name));
772
+ }
773
+ catch {
774
+ continue;
775
+ }
776
+ for (const file of files) {
777
+ const match = SESSION_FILE_RE.exec(file);
778
+ if (match)
779
+ refs.push(match[1]);
780
+ }
781
+ }
782
+ return refs;
783
+ }
784
+ }
785
+ //# sourceMappingURL=adapter.js.map