@openma/common 0.0.0-stage → 0.9.1

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 (328) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +391 -2
  3. package/dist/acp-artifacts/binary.d.ts +35 -0
  4. package/dist/acp-artifacts/binary.d.ts.map +1 -0
  5. package/dist/acp-artifacts/binary.js +120 -0
  6. package/dist/acp-artifacts/binary.js.map +1 -0
  7. package/dist/acp-artifacts/index.d.ts +7 -0
  8. package/dist/acp-artifacts/index.d.ts.map +1 -0
  9. package/dist/acp-artifacts/index.js +7 -0
  10. package/dist/acp-artifacts/index.js.map +1 -0
  11. package/dist/acp-artifacts/node-abi.d.ts +3 -0
  12. package/dist/acp-artifacts/node-abi.d.ts.map +1 -0
  13. package/dist/acp-artifacts/node-abi.js +17 -0
  14. package/dist/acp-artifacts/node-abi.js.map +1 -0
  15. package/dist/acp-artifacts/npm-cli.d.ts +3 -0
  16. package/dist/acp-artifacts/npm-cli.d.ts.map +1 -0
  17. package/dist/acp-artifacts/npm-cli.js +9 -0
  18. package/dist/acp-artifacts/npm-cli.js.map +1 -0
  19. package/dist/acp-artifacts/npm.d.ts +37 -0
  20. package/dist/acp-artifacts/npm.d.ts.map +1 -0
  21. package/dist/acp-artifacts/npm.js +167 -0
  22. package/dist/acp-artifacts/npm.js.map +1 -0
  23. package/dist/acp-artifacts/registry.d.ts +45 -0
  24. package/dist/acp-artifacts/registry.d.ts.map +1 -0
  25. package/dist/acp-artifacts/registry.js +206 -0
  26. package/dist/acp-artifacts/registry.js.map +1 -0
  27. package/dist/acp-artifacts/shared.d.ts +45 -0
  28. package/dist/acp-artifacts/shared.d.ts.map +1 -0
  29. package/dist/acp-artifacts/shared.js +157 -0
  30. package/dist/acp-artifacts/shared.js.map +1 -0
  31. package/dist/acp-artifacts/uvx.d.ts +32 -0
  32. package/dist/acp-artifacts/uvx.d.ts.map +1 -0
  33. package/dist/acp-artifacts/uvx.js +95 -0
  34. package/dist/acp-artifacts/uvx.js.map +1 -0
  35. package/dist/acp-fork/index.d.ts +51 -0
  36. package/dist/acp-fork/index.d.ts.map +1 -0
  37. package/dist/acp-fork/index.js +116 -0
  38. package/dist/acp-fork/index.js.map +1 -0
  39. package/dist/acp-harnesses/agent-setup.d.ts +118 -0
  40. package/dist/acp-harnesses/agent-setup.d.ts.map +1 -0
  41. package/dist/acp-harnesses/agent-setup.js +717 -0
  42. package/dist/acp-harnesses/agent-setup.js.map +1 -0
  43. package/dist/acp-harnesses/custom-agents.d.ts +81 -0
  44. package/dist/acp-harnesses/custom-agents.d.ts.map +1 -0
  45. package/dist/acp-harnesses/custom-agents.js +361 -0
  46. package/dist/acp-harnesses/custom-agents.js.map +1 -0
  47. package/dist/acp-harnesses/headless-launch.d.ts +34 -0
  48. package/dist/acp-harnesses/headless-launch.d.ts.map +1 -0
  49. package/dist/acp-harnesses/headless-launch.js +67 -0
  50. package/dist/acp-harnesses/headless-launch.js.map +1 -0
  51. package/dist/acp-harnesses/index.d.ts +18 -0
  52. package/dist/acp-harnesses/index.d.ts.map +1 -0
  53. package/dist/acp-harnesses/index.js +58 -0
  54. package/dist/acp-harnesses/index.js.map +1 -0
  55. package/dist/acp-harnesses/install-state.d.ts +86 -0
  56. package/dist/acp-harnesses/install-state.d.ts.map +1 -0
  57. package/dist/acp-harnesses/install-state.js +322 -0
  58. package/dist/acp-harnesses/install-state.js.map +1 -0
  59. package/dist/acp-harnesses/installer.d.ts +145 -0
  60. package/dist/acp-harnesses/installer.d.ts.map +1 -0
  61. package/dist/acp-harnesses/installer.js +716 -0
  62. package/dist/acp-harnesses/installer.js.map +1 -0
  63. package/dist/acp-harnesses/known-agents.d.ts +154 -0
  64. package/dist/acp-harnesses/known-agents.d.ts.map +1 -0
  65. package/dist/acp-harnesses/known-agents.js +240 -0
  66. package/dist/acp-harnesses/known-agents.js.map +1 -0
  67. package/dist/acp-harnesses/launcher.d.ts +27 -0
  68. package/dist/acp-harnesses/launcher.d.ts.map +1 -0
  69. package/dist/acp-harnesses/launcher.js +64 -0
  70. package/dist/acp-harnesses/launcher.js.map +1 -0
  71. package/dist/acp-harnesses/registry-fetch.d.ts +42 -0
  72. package/dist/acp-harnesses/registry-fetch.d.ts.map +1 -0
  73. package/dist/acp-harnesses/registry-fetch.js +132 -0
  74. package/dist/acp-harnesses/registry-fetch.js.map +1 -0
  75. package/dist/acp-harnesses/registry.d.ts +36 -0
  76. package/dist/acp-harnesses/registry.d.ts.map +1 -0
  77. package/dist/acp-harnesses/registry.js +307 -0
  78. package/dist/acp-harnesses/registry.js.map +1 -0
  79. package/dist/acp-runtime/errors.d.ts +7 -0
  80. package/dist/acp-runtime/errors.d.ts.map +1 -0
  81. package/dist/acp-runtime/errors.js +17 -0
  82. package/dist/acp-runtime/errors.js.map +1 -0
  83. package/dist/acp-runtime/fork-support.d.ts +8 -0
  84. package/dist/acp-runtime/fork-support.d.ts.map +1 -0
  85. package/dist/acp-runtime/fork-support.js +20 -0
  86. package/dist/acp-runtime/fork-support.js.map +1 -0
  87. package/dist/acp-runtime/index.d.ts +11 -0
  88. package/dist/acp-runtime/index.d.ts.map +1 -0
  89. package/dist/acp-runtime/index.js +6 -0
  90. package/dist/acp-runtime/index.js.map +1 -0
  91. package/dist/acp-runtime/probe.d.ts +103 -0
  92. package/dist/acp-runtime/probe.d.ts.map +1 -0
  93. package/dist/acp-runtime/probe.js +881 -0
  94. package/dist/acp-runtime/probe.js.map +1 -0
  95. package/dist/acp-runtime/runtime.d.ts +7 -0
  96. package/dist/acp-runtime/runtime.d.ts.map +1 -0
  97. package/dist/acp-runtime/runtime.js +26 -0
  98. package/dist/acp-runtime/runtime.js.map +1 -0
  99. package/dist/acp-runtime/session.d.ts +87 -0
  100. package/dist/acp-runtime/session.d.ts.map +1 -0
  101. package/dist/acp-runtime/session.js +1071 -0
  102. package/dist/acp-runtime/session.js.map +1 -0
  103. package/dist/acp-runtime/spawners/node.d.ts +5 -0
  104. package/dist/acp-runtime/spawners/node.d.ts.map +1 -0
  105. package/dist/acp-runtime/spawners/node.js +244 -0
  106. package/dist/acp-runtime/spawners/node.js.map +1 -0
  107. package/dist/acp-runtime/types.d.ts +180 -0
  108. package/dist/acp-runtime/types.d.ts.map +1 -0
  109. package/dist/acp-runtime/types.js +2 -0
  110. package/dist/acp-runtime/types.js.map +1 -0
  111. package/dist/agent-contract/acp.d.ts +4 -0
  112. package/dist/agent-contract/acp.d.ts.map +1 -0
  113. package/dist/agent-contract/acp.js +273 -0
  114. package/dist/agent-contract/acp.js.map +1 -0
  115. package/dist/agent-contract/index.d.ts +125 -0
  116. package/dist/agent-contract/index.d.ts.map +1 -0
  117. package/dist/agent-contract/index.js +102 -0
  118. package/dist/agent-contract/index.js.map +1 -0
  119. package/dist/agent-contract/managed.d.ts +5 -0
  120. package/dist/agent-contract/managed.d.ts.map +1 -0
  121. package/dist/agent-contract/managed.js +242 -0
  122. package/dist/agent-contract/managed.js.map +1 -0
  123. package/dist/agent-ui/index.d.ts +170 -0
  124. package/dist/agent-ui/index.d.ts.map +1 -0
  125. package/dist/agent-ui/index.js +853 -0
  126. package/dist/agent-ui/index.js.map +1 -0
  127. package/dist/agent-ui/presentation.d.ts +30 -0
  128. package/dist/agent-ui/presentation.d.ts.map +1 -0
  129. package/dist/agent-ui/presentation.js +79 -0
  130. package/dist/agent-ui/presentation.js.map +1 -0
  131. package/dist/agent-ui/react.d.ts +50 -0
  132. package/dist/agent-ui/react.d.ts.map +1 -0
  133. package/dist/agent-ui/react.js +334 -0
  134. package/dist/agent-ui/react.js.map +1 -0
  135. package/dist/brand/index.d.ts +17 -0
  136. package/dist/brand/index.d.ts.map +1 -0
  137. package/dist/brand/index.js +119 -0
  138. package/dist/brand/index.js.map +1 -0
  139. package/dist/brand/openma-logo-mark.svg +7 -0
  140. package/dist/brand/tokens.css +77 -0
  141. package/dist/brand/website.css +67 -0
  142. package/dist/chat-ui/acp.d.ts +26 -0
  143. package/dist/chat-ui/acp.d.ts.map +1 -0
  144. package/dist/chat-ui/acp.js +166 -0
  145. package/dist/chat-ui/acp.js.map +1 -0
  146. package/dist/chat-ui/components.d.ts +230 -0
  147. package/dist/chat-ui/components.d.ts.map +1 -0
  148. package/dist/chat-ui/components.js +561 -0
  149. package/dist/chat-ui/components.js.map +1 -0
  150. package/dist/chat-ui/composer-drafts.d.ts +21 -0
  151. package/dist/chat-ui/composer-drafts.d.ts.map +1 -0
  152. package/dist/chat-ui/composer-drafts.js +58 -0
  153. package/dist/chat-ui/composer-drafts.js.map +1 -0
  154. package/dist/chat-ui/controller.d.ts +61 -0
  155. package/dist/chat-ui/controller.d.ts.map +1 -0
  156. package/dist/chat-ui/controller.js +218 -0
  157. package/dist/chat-ui/controller.js.map +1 -0
  158. package/dist/chat-ui/index.d.ts +8 -0
  159. package/dist/chat-ui/index.d.ts.map +1 -0
  160. package/dist/chat-ui/index.js +8 -0
  161. package/dist/chat-ui/index.js.map +1 -0
  162. package/dist/chat-ui/markdown.d.ts +37 -0
  163. package/dist/chat-ui/markdown.d.ts.map +1 -0
  164. package/dist/chat-ui/markdown.js +33 -0
  165. package/dist/chat-ui/markdown.js.map +1 -0
  166. package/dist/chat-ui/presentation.d.ts +34 -0
  167. package/dist/chat-ui/presentation.d.ts.map +1 -0
  168. package/dist/chat-ui/presentation.js +191 -0
  169. package/dist/chat-ui/presentation.js.map +1 -0
  170. package/dist/chat-ui/styles.css +815 -0
  171. package/dist/chat-ui/utils.d.ts +14 -0
  172. package/dist/chat-ui/utils.d.ts.map +1 -0
  173. package/dist/chat-ui/utils.js +71 -0
  174. package/dist/chat-ui/utils.js.map +1 -0
  175. package/dist/local-runtime/checkpoint.d.ts +28 -0
  176. package/dist/local-runtime/checkpoint.d.ts.map +1 -0
  177. package/dist/local-runtime/checkpoint.js +2 -0
  178. package/dist/local-runtime/checkpoint.js.map +1 -0
  179. package/dist/local-runtime/daemon-connection.d.ts +27 -0
  180. package/dist/local-runtime/daemon-connection.d.ts.map +1 -0
  181. package/dist/local-runtime/daemon-connection.js +161 -0
  182. package/dist/local-runtime/daemon-connection.js.map +1 -0
  183. package/dist/local-runtime/daemon-host.d.ts +39 -0
  184. package/dist/local-runtime/daemon-host.d.ts.map +1 -0
  185. package/dist/local-runtime/daemon-host.js +88 -0
  186. package/dist/local-runtime/daemon-host.js.map +1 -0
  187. package/dist/local-runtime/index.d.ts +6 -0
  188. package/dist/local-runtime/index.d.ts.map +1 -0
  189. package/dist/local-runtime/index.js +5 -0
  190. package/dist/local-runtime/index.js.map +1 -0
  191. package/dist/local-runtime/runtime.d.ts +36 -0
  192. package/dist/local-runtime/runtime.d.ts.map +1 -0
  193. package/dist/local-runtime/runtime.js +82 -0
  194. package/dist/local-runtime/runtime.js.map +1 -0
  195. package/dist/local-runtime/session-host.d.ts +62 -0
  196. package/dist/local-runtime/session-host.d.ts.map +1 -0
  197. package/dist/local-runtime/session-host.js +477 -0
  198. package/dist/local-runtime/session-host.js.map +1 -0
  199. package/dist/managed-runtime/acp-subagents.d.ts +14 -0
  200. package/dist/managed-runtime/acp-subagents.d.ts.map +1 -0
  201. package/dist/managed-runtime/acp-subagents.js +67 -0
  202. package/dist/managed-runtime/acp-subagents.js.map +1 -0
  203. package/dist/managed-runtime/claimed-environment-work.d.ts +61 -0
  204. package/dist/managed-runtime/claimed-environment-work.d.ts.map +1 -0
  205. package/dist/managed-runtime/claimed-environment-work.js +170 -0
  206. package/dist/managed-runtime/claimed-environment-work.js.map +1 -0
  207. package/dist/managed-runtime/contracts.d.ts +31 -0
  208. package/dist/managed-runtime/contracts.d.ts.map +1 -0
  209. package/dist/managed-runtime/contracts.js +2 -0
  210. package/dist/managed-runtime/contracts.js.map +1 -0
  211. package/dist/managed-runtime/http-control.d.ts +67 -0
  212. package/dist/managed-runtime/http-control.d.ts.map +1 -0
  213. package/dist/managed-runtime/http-control.js +465 -0
  214. package/dist/managed-runtime/http-control.js.map +1 -0
  215. package/dist/managed-runtime/index.d.ts +89 -0
  216. package/dist/managed-runtime/index.d.ts.map +1 -0
  217. package/dist/managed-runtime/index.js +215 -0
  218. package/dist/managed-runtime/index.js.map +1 -0
  219. package/dist/managed-runtime/input-identity.d.ts +2 -0
  220. package/dist/managed-runtime/input-identity.d.ts.map +1 -0
  221. package/dist/managed-runtime/input-identity.js +2 -0
  222. package/dist/managed-runtime/input-identity.js.map +1 -0
  223. package/dist/managed-runtime/managed-event-projector.d.ts +24 -0
  224. package/dist/managed-runtime/managed-event-projector.d.ts.map +1 -0
  225. package/dist/managed-runtime/managed-event-projector.js +333 -0
  226. package/dist/managed-runtime/managed-event-projector.js.map +1 -0
  227. package/dist/managed-runtime/semantic-recovery.d.ts +61 -0
  228. package/dist/managed-runtime/semantic-recovery.d.ts.map +1 -0
  229. package/dist/managed-runtime/semantic-recovery.js +167 -0
  230. package/dist/managed-runtime/semantic-recovery.js.map +1 -0
  231. package/dist/project-ui/CreateProjectDialog.d.ts +15 -0
  232. package/dist/project-ui/CreateProjectDialog.d.ts.map +1 -0
  233. package/dist/project-ui/CreateProjectDialog.js +87 -0
  234. package/dist/project-ui/CreateProjectDialog.js.map +1 -0
  235. package/dist/project-ui/ProjectComposer.d.ts +13 -0
  236. package/dist/project-ui/ProjectComposer.d.ts.map +1 -0
  237. package/dist/project-ui/ProjectComposer.js +70 -0
  238. package/dist/project-ui/ProjectComposer.js.map +1 -0
  239. package/dist/project-ui/ProjectConversation.d.ts +10 -0
  240. package/dist/project-ui/ProjectConversation.d.ts.map +1 -0
  241. package/dist/project-ui/ProjectConversation.js +28 -0
  242. package/dist/project-ui/ProjectConversation.js.map +1 -0
  243. package/dist/project-ui/ProjectMessageAttachments.d.ts +4 -0
  244. package/dist/project-ui/ProjectMessageAttachments.d.ts.map +1 -0
  245. package/dist/project-ui/ProjectMessageAttachments.js +28 -0
  246. package/dist/project-ui/ProjectMessageAttachments.js.map +1 -0
  247. package/dist/project-ui/ProjectSettings.d.ts +8 -0
  248. package/dist/project-ui/ProjectSettings.d.ts.map +1 -0
  249. package/dist/project-ui/ProjectSettings.js +65 -0
  250. package/dist/project-ui/ProjectSettings.js.map +1 -0
  251. package/dist/project-ui/Projects.d.ts +18 -0
  252. package/dist/project-ui/Projects.d.ts.map +1 -0
  253. package/dist/project-ui/Projects.js +377 -0
  254. package/dist/project-ui/Projects.js.map +1 -0
  255. package/dist/project-ui/client.d.ts +234 -0
  256. package/dist/project-ui/client.d.ts.map +1 -0
  257. package/dist/project-ui/client.js +42 -0
  258. package/dist/project-ui/client.js.map +1 -0
  259. package/dist/project-ui/controls.d.ts +15 -0
  260. package/dist/project-ui/controls.d.ts.map +1 -0
  261. package/dist/project-ui/controls.js +17 -0
  262. package/dist/project-ui/controls.js.map +1 -0
  263. package/dist/project-ui/index.d.ts +20 -0
  264. package/dist/project-ui/index.d.ts.map +1 -0
  265. package/dist/project-ui/index.js +17 -0
  266. package/dist/project-ui/index.js.map +1 -0
  267. package/dist/project-ui/project-coordinator.d.ts +3 -0
  268. package/dist/project-ui/project-coordinator.d.ts.map +1 -0
  269. package/dist/project-ui/project-coordinator.js +12 -0
  270. package/dist/project-ui/project-coordinator.js.map +1 -0
  271. package/dist/project-ui/project-goals.d.ts +48 -0
  272. package/dist/project-ui/project-goals.d.ts.map +1 -0
  273. package/dist/project-ui/project-goals.js +169 -0
  274. package/dist/project-ui/project-goals.js.map +1 -0
  275. package/dist/project-ui/projects-query.d.ts +19 -0
  276. package/dist/project-ui/projects-query.d.ts.map +1 -0
  277. package/dist/project-ui/projects-query.js +132 -0
  278. package/dist/project-ui/projects-query.js.map +1 -0
  279. package/dist/project-ui/styles.css +847 -0
  280. package/dist/protocol/acp/index.d.ts +52 -0
  281. package/dist/protocol/acp/index.d.ts.map +1 -0
  282. package/dist/protocol/acp/index.js +1056 -0
  283. package/dist/protocol/acp/index.js.map +1 -0
  284. package/dist/protocol/cursor-cloud/index.d.ts +74 -0
  285. package/dist/protocol/cursor-cloud/index.d.ts.map +1 -0
  286. package/dist/protocol/cursor-cloud/index.js +249 -0
  287. package/dist/protocol/cursor-cloud/index.js.map +1 -0
  288. package/dist/protocol/managed/index.d.ts +32 -0
  289. package/dist/protocol/managed/index.d.ts.map +1 -0
  290. package/dist/protocol/managed/index.js +646 -0
  291. package/dist/protocol/managed/index.js.map +1 -0
  292. package/dist/protocol/managed/input-identity.d.ts +3 -0
  293. package/dist/protocol/managed/input-identity.d.ts.map +1 -0
  294. package/dist/protocol/managed/input-identity.js +6 -0
  295. package/dist/protocol/managed/input-identity.js.map +1 -0
  296. package/dist/protocol/openai-agents/index.d.ts +102 -0
  297. package/dist/protocol/openai-agents/index.d.ts.map +1 -0
  298. package/dist/protocol/openai-agents/index.js +142 -0
  299. package/dist/protocol/openai-agents/index.js.map +1 -0
  300. package/dist/session-events/acp-system-notices.d.ts +10 -0
  301. package/dist/session-events/acp-system-notices.d.ts.map +1 -0
  302. package/dist/session-events/acp-system-notices.js +46 -0
  303. package/dist/session-events/acp-system-notices.js.map +1 -0
  304. package/dist/session-events/acp.d.ts +214 -0
  305. package/dist/session-events/acp.d.ts.map +1 -0
  306. package/dist/session-events/acp.js +956 -0
  307. package/dist/session-events/acp.js.map +1 -0
  308. package/dist/session-events/managed.d.ts +141 -0
  309. package/dist/session-events/managed.d.ts.map +1 -0
  310. package/dist/session-events/managed.js +324 -0
  311. package/dist/session-events/managed.js.map +1 -0
  312. package/dist/session-events/openma.d.ts +304 -0
  313. package/dist/session-events/openma.d.ts.map +1 -0
  314. package/dist/session-events/openma.js +438 -0
  315. package/dist/session-events/openma.js.map +1 -0
  316. package/dist/session-kernel/index.d.ts +118 -0
  317. package/dist/session-kernel/index.d.ts.map +1 -0
  318. package/dist/session-kernel/index.js +215 -0
  319. package/dist/session-kernel/index.js.map +1 -0
  320. package/dist/session-orchestrator/index.d.ts +71 -0
  321. package/dist/session-orchestrator/index.d.ts.map +1 -0
  322. package/dist/session-orchestrator/index.js +177 -0
  323. package/dist/session-orchestrator/index.js.map +1 -0
  324. package/dist/session-ui/index.d.ts +96 -0
  325. package/dist/session-ui/index.d.ts.map +1 -0
  326. package/dist/session-ui/index.js +277 -0
  327. package/dist/session-ui/index.js.map +1 -0
  328. package/package.json +222 -4
@@ -0,0 +1,132 @@
1
+ /**
2
+ * Official ACP Registry — fetch, cache, and map to our internal shape.
3
+ *
4
+ * Source of truth: https://cdn.agentclientprotocol.com/registry/v1/latest/registry.json
5
+ * Maintained by the ACP project (Apache 2.0). Auto-updated hourly by their CI
6
+ * when upstream agents publish new versions.
7
+ *
8
+ * 1. App startup: try to fetch the official JSON. Cache to disk with
9
+ * `fetchedAt`.
10
+ * 2. Subsequent loads: serve from cache while it's fresh (1h matches
11
+ * their cron).
12
+ * 3. Network failure: keep using stale cache forever.
13
+ * 4. Cold start with no cache and no network: caller falls back to the
14
+ * static overlay (see registry.ts:loadRegistry).
15
+ *
16
+ * Vendored from @open-managed-agents/acp-runtime (Apache-2.0).
17
+ */
18
+ import { readFile, writeFile, mkdir } from "node:fs/promises";
19
+ import { dirname } from "node:path";
20
+ import { registryShimName, } from "./known-agents.js";
21
+ const REGISTRY_URL = "https://cdn.agentclientprotocol.com/registry/v1/latest/registry.json";
22
+ const DEFAULT_TTL_MS = 60 * 60 * 1000;
23
+ export async function fetchOfficialRegistry(opts) {
24
+ const ttl = opts?.ttlMs ?? DEFAULT_TTL_MS;
25
+ const cachePath = opts?.cachePath;
26
+ if (cachePath) {
27
+ const cached = await readCache(cachePath);
28
+ if (cached && Date.now() - cached.fetchedAt < ttl)
29
+ return cached.data;
30
+ if (cached && opts?.cacheOnly)
31
+ return cached.data;
32
+ }
33
+ if (opts?.cacheOnly) {
34
+ throw new Error("registry cacheOnly=true but no cache exists");
35
+ }
36
+ const controller = new AbortController();
37
+ const timer = setTimeout(() => controller.abort(), 5000);
38
+ try {
39
+ const res = await fetch(REGISTRY_URL, { signal: controller.signal });
40
+ if (!res.ok)
41
+ throw new Error(`registry fetch HTTP ${res.status}`);
42
+ const data = (await res.json());
43
+ if (!Array.isArray(data?.agents)) {
44
+ throw new Error("registry JSON malformed (no .agents array)");
45
+ }
46
+ if (cachePath) {
47
+ await writeCache(cachePath, { fetchedAt: Date.now(), data }).catch(() => { });
48
+ }
49
+ return data;
50
+ }
51
+ catch (e) {
52
+ if (cachePath) {
53
+ const stale = await readCache(cachePath);
54
+ if (stale)
55
+ return stale.data;
56
+ }
57
+ throw e;
58
+ }
59
+ finally {
60
+ clearTimeout(timer);
61
+ }
62
+ }
63
+ async function readCache(path) {
64
+ try {
65
+ const text = await readFile(path, "utf-8");
66
+ const obj = JSON.parse(text);
67
+ if (typeof obj?.fetchedAt !== "number" || !Array.isArray(obj?.data?.agents))
68
+ return null;
69
+ return obj;
70
+ }
71
+ catch {
72
+ return null;
73
+ }
74
+ }
75
+ async function writeCache(path, c) {
76
+ await mkdir(dirname(path), { recursive: true });
77
+ await writeFile(path, JSON.stringify(c, null, 2), "utf-8");
78
+ }
79
+ export function mapOfficialAgent(o) {
80
+ const platformKey = `${process.platform === "win32" ? "windows" : process.platform}-${process.arch === "arm64" ? "aarch64" : process.arch === "x64" ? "x86_64" : process.arch}`;
81
+ let spec = null;
82
+ let installHint;
83
+ let install;
84
+ let registryArgs;
85
+ let registryEnv;
86
+ if (o.distribution.binary?.[platformKey]) {
87
+ const b = o.distribution.binary[platformKey];
88
+ const command = b.cmd.replace(/^\.\//, "").replace(/\.exe$/, "");
89
+ registryArgs = b.args;
90
+ registryEnv = b.env;
91
+ spec = { command: registryShimName(o.id), args: registryArgs, env: registryEnv };
92
+ installHint = `download ${b.archive} and place \`${command}\` on PATH`;
93
+ const archives = {};
94
+ for (const [k, v] of Object.entries(o.distribution.binary)) {
95
+ archives[k] = { url: v.archive, cmd: v.cmd };
96
+ }
97
+ install = { kind: "binary", archives, downloadUrl: o.repository };
98
+ }
99
+ else if (o.distribution.npx) {
100
+ const n = o.distribution.npx;
101
+ registryArgs = n.args;
102
+ registryEnv = n.env;
103
+ spec = { command: registryShimName(o.id), args: registryArgs, env: registryEnv };
104
+ installHint = `npx -y ${n.package}` + (n.args ? " " + n.args.join(" ") : "");
105
+ const lastAt = n.package.lastIndexOf("@");
106
+ const pkgName = lastAt > 0 ? n.package.slice(0, lastAt) : n.package;
107
+ install = { kind: "npm", package: pkgName };
108
+ }
109
+ else if (o.distribution.uvx) {
110
+ const u = o.distribution.uvx;
111
+ registryArgs = u.args;
112
+ registryEnv = u.env;
113
+ spec = { command: registryShimName(o.id), args: registryArgs, env: registryEnv };
114
+ installHint = `uvx ${u.package}` + (u.args ? " " + u.args.join(" ") : "");
115
+ }
116
+ if (!spec)
117
+ return null;
118
+ return {
119
+ id: o.id,
120
+ label: o.name,
121
+ ...(o.icon ? { icon: o.icon } : {}),
122
+ spec,
123
+ version: o.version,
124
+ installHint,
125
+ install,
126
+ registryId: o.id,
127
+ registryDistribution: o.distribution,
128
+ installSource: "registry",
129
+ homepage: o.website ?? o.repository,
130
+ };
131
+ }
132
+ //# sourceMappingURL=registry-fetch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry-fetch.js","sourceRoot":"","sources":["../../src/acp-harnesses/registry-fetch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Agent registry — merges the official ACP registry with the desktop's static
3
+ * overlay, exposes a sync `which`-style detector.
4
+ *
5
+ * Two layers:
6
+ * - **overlay** (known-agents.ts): hand-curated featured entries plus a few
7
+ * agents the official registry doesn't carry (hermes, openclaw).
8
+ * - **official** (registry-fetch.ts): live JSON from
9
+ * cdn.agentclientprotocol.com, fetched once at startup, cached to disk.
10
+ *
11
+ * Detection rule: registry-managed entries resolve from Backchat's managed
12
+ * ACP bin directory. Only entries marked systemPath, plus custom overrides,
13
+ * fall back to the user's system PATH.
14
+ *
15
+ * Vendored from @open-managed-agents/acp-runtime (Apache-2.0).
16
+ */
17
+ import { type KnownAgentEntry } from "./known-agents.js";
18
+ export { OVERLAY_AGENTS, registryShimName, resolveOverlayAgent, type KnownAgentEntry, } from "./known-agents.js";
19
+ export interface ResolveAgentCommandOptions {
20
+ env?: NodeJS.ProcessEnv;
21
+ systemPathFallbackDirs?: string[];
22
+ managedBinDirs?: string[];
23
+ }
24
+ export declare function loadRegistry(opts?: {
25
+ cachePath?: string;
26
+ ttlMs?: number;
27
+ forceRefresh?: boolean;
28
+ cacheOnly?: boolean;
29
+ }): Promise<KnownAgentEntry[]>;
30
+ export declare function getKnownAgents(): readonly KnownAgentEntry[];
31
+ export declare function resolveKnownAgent(id: string): KnownAgentEntry | null;
32
+ export declare function _resetRegistryCache(): void;
33
+ export declare function detect(id: string, options?: ResolveAgentCommandOptions): Promise<KnownAgentEntry | null>;
34
+ export declare function detectEntry(entry: KnownAgentEntry, options?: ResolveAgentCommandOptions): Promise<KnownAgentEntry | null>;
35
+ export declare function detectAll(options?: ResolveAgentCommandOptions): Promise<KnownAgentEntry[]>;
36
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/acp-harnesses/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAMH,OAAO,EAIL,KAAK,eAAe,EACrB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,mBAAmB,EACnB,KAAK,eAAe,GACrB,MAAM,mBAAmB,CAAC;AAE3B,MAAM,WAAW,0BAA0B;IACzC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,sBAAsB,CAAC,EAAE,MAAM,EAAE,CAAC;IAClC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAMD,wBAAsB,YAAY,CAAC,IAAI,CAAC,EAAE;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAqB7B;AAED,wBAAgB,cAAc,IAAI,SAAS,eAAe,EAAE,CAE3D;AAED,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAIpE;AA+CD,wBAAgB,mBAAmB,IAAI,IAAI,CAI1C;AAED,wBAAsB,MAAM,CAC1B,EAAE,EAAE,MAAM,EACV,OAAO,GAAE,0BAA+B,GACvC,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAIjC;AAED,wBAAsB,WAAW,CAC/B,KAAK,EAAE,eAAe,EACtB,OAAO,GAAE,0BAA+B,GACvC,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAiCjC;AA+JD,wBAAsB,SAAS,CAC7B,OAAO,GAAE,0BAA+B,GACvC,OAAO,CAAC,eAAe,EAAE,CAAC,CAI5B"}
@@ -0,0 +1,307 @@
1
+ /**
2
+ * Agent registry — merges the official ACP registry with the desktop's static
3
+ * overlay, exposes a sync `which`-style detector.
4
+ *
5
+ * Two layers:
6
+ * - **overlay** (known-agents.ts): hand-curated featured entries plus a few
7
+ * agents the official registry doesn't carry (hermes, openclaw).
8
+ * - **official** (registry-fetch.ts): live JSON from
9
+ * cdn.agentclientprotocol.com, fetched once at startup, cached to disk.
10
+ *
11
+ * Detection rule: registry-managed entries resolve from Backchat's managed
12
+ * ACP bin directory. Only entries marked systemPath, plus custom overrides,
13
+ * fall back to the user's system PATH.
14
+ *
15
+ * Vendored from @open-managed-agents/acp-runtime (Apache-2.0).
16
+ */
17
+ import { spawnSync } from "node:child_process";
18
+ import { constants } from "node:fs";
19
+ import { access, readdir } from "node:fs/promises";
20
+ import { delimiter, isAbsolute, join } from "node:path";
21
+ import { OVERLAY_AGENTS, registryShimName, } from "./known-agents.js";
22
+ import { fetchOfficialRegistry, mapOfficialAgent } from "./registry-fetch.js";
23
+ export { OVERLAY_AGENTS, registryShimName, resolveOverlayAgent, } from "./known-agents.js";
24
+ let _mergedCache = null;
25
+ let _npmGlobalCache = null;
26
+ let _uvToolCache = null;
27
+ export async function loadRegistry(opts) {
28
+ if (_mergedCache && !opts?.forceRefresh)
29
+ return _mergedCache;
30
+ let officialMapped = [];
31
+ try {
32
+ const reg = await fetchOfficialRegistry({
33
+ cachePath: opts?.cachePath,
34
+ ttlMs: opts?.ttlMs,
35
+ cacheOnly: opts?.cacheOnly,
36
+ });
37
+ for (const o of reg.agents) {
38
+ const m = mapOfficialAgent(o);
39
+ if (m)
40
+ officialMapped.push(m);
41
+ }
42
+ }
43
+ catch (e) {
44
+ process.stderr.write(`! ACP registry fetch failed (${e.message}); using overlay only\n`);
45
+ officialMapped = [];
46
+ }
47
+ _mergedCache = mergeOverlay(officialMapped, OVERLAY_AGENTS);
48
+ return _mergedCache;
49
+ }
50
+ export function getKnownAgents() {
51
+ return _mergedCache ?? OVERLAY_AGENTS;
52
+ }
53
+ export function resolveKnownAgent(id) {
54
+ const list = getKnownAgents();
55
+ for (const e of list)
56
+ if (e.id === id)
57
+ return e;
58
+ return null;
59
+ }
60
+ function mergeOverlay(official, overlay) {
61
+ const overlayById = new Map(overlay.map((e) => [e.id, e]));
62
+ const seenOverlay = new Set();
63
+ const merged = [];
64
+ for (const o of official) {
65
+ const ov = overlayById.get(o.id);
66
+ if (ov) {
67
+ seenOverlay.add(o.id);
68
+ merged.push({
69
+ id: o.id,
70
+ label: ov.label || o.label,
71
+ icon: o.icon ?? ov.icon,
72
+ spec: ov.spec,
73
+ // A replacement distribution owns its version too. Inheriting the
74
+ // original package's version could pin an unrelated package or binary.
75
+ version: ov.version ?? (ov.registryDistribution ? undefined : o.version),
76
+ installHint: ov.installHint || o.installHint,
77
+ homepage: ov.homepage || o.homepage,
78
+ featured: ov.featured,
79
+ systemPath: ov.systemPath,
80
+ systemCommand: ov.systemCommand,
81
+ wraps: ov.wraps,
82
+ install: ov.install ?? o.install,
83
+ registryId: ov.registryId ?? o.registryId,
84
+ registryDistribution: ov.registryDistribution ?? o.registryDistribution,
85
+ installSource: ov.installSource ?? o.installSource,
86
+ downloadUrl: ov.downloadUrl ?? o.downloadUrl,
87
+ downloadKind: ov.downloadKind ?? o.downloadKind,
88
+ configOptions: ov.configOptions ?? o.configOptions,
89
+ headless: ov.headless ?? o.headless,
90
+ pinned: ov.pinned ?? o.pinned,
91
+ });
92
+ }
93
+ else {
94
+ merged.push(o);
95
+ }
96
+ }
97
+ for (const ov of overlay) {
98
+ if (!seenOverlay.has(ov.id))
99
+ merged.push(ov);
100
+ }
101
+ return merged;
102
+ }
103
+ export function _resetRegistryCache() {
104
+ _mergedCache = null;
105
+ _npmGlobalCache = null;
106
+ _uvToolCache = null;
107
+ }
108
+ export async function detect(id, options = {}) {
109
+ const entry = resolveKnownAgent(id);
110
+ if (!entry)
111
+ return null;
112
+ return detectEntry(entry, options);
113
+ }
114
+ export async function detectEntry(entry, options = {}) {
115
+ const managedCommand = await resolveManagedCommand(entry.spec.command, options);
116
+ const allowSystem = Boolean(entry.systemPath || entry.systemCommand);
117
+ if (!managedCommand && entry.installSource === "registry" && !allowSystem) {
118
+ return null;
119
+ }
120
+ let command = managedCommand;
121
+ let args = managedCommand && entry.installSource === "registry"
122
+ ? undefined
123
+ : entry.spec.args;
124
+ if (!command && entry.systemCommand) {
125
+ command = await resolveCommandInDirs(entry.systemCommand, await systemBinDirsWithNodeManagers(options));
126
+ args = entry.spec.args;
127
+ }
128
+ if (!command) {
129
+ command = await resolveSystemCommand(entry, options);
130
+ if (command)
131
+ args = entry.spec.args;
132
+ }
133
+ if (!command)
134
+ return null;
135
+ if (entry.spec.command === "npx" && !isNpxPackageInstalled(entry))
136
+ return null;
137
+ if (entry.spec.command === "uvx" && !isUvxPackageInstalled(entry))
138
+ return null;
139
+ return {
140
+ ...entry,
141
+ spec: {
142
+ ...entry.spec,
143
+ command,
144
+ ...(args ? { args } : { args: undefined }),
145
+ },
146
+ };
147
+ }
148
+ function isNpxPackageInstalled(entry) {
149
+ const pkgSpec = entry.spec.args?.[1];
150
+ if (!pkgSpec)
151
+ return false;
152
+ const lastAt = pkgSpec.lastIndexOf("@");
153
+ const pkgName = lastAt > 0 ? pkgSpec.slice(0, lastAt) : pkgSpec;
154
+ const cache = _npmGlobalCache ?? (_npmGlobalCache = snapshotNpmGlobal());
155
+ return cache.has(pkgName);
156
+ }
157
+ function isUvxPackageInstalled(entry) {
158
+ const pkgSpec = entry.spec.args?.[0];
159
+ if (!pkgSpec)
160
+ return false;
161
+ let pkgName = pkgSpec;
162
+ for (const sep of ["==", "@"]) {
163
+ const idx = pkgName.indexOf(sep, 1);
164
+ if (idx > 0) {
165
+ pkgName = pkgName.slice(0, idx);
166
+ break;
167
+ }
168
+ }
169
+ const cache = _uvToolCache ?? (_uvToolCache = snapshotUvTool());
170
+ return cache.has(pkgName);
171
+ }
172
+ function snapshotNpmGlobal() {
173
+ try {
174
+ const r = spawnSync("npm", ["ls", "-g", "--depth=0", "--parseable"], {
175
+ encoding: "utf-8",
176
+ timeout: 10_000,
177
+ });
178
+ if (r.status !== 0 && !r.stdout)
179
+ return new Set();
180
+ const out = new Set();
181
+ for (const line of (r.stdout ?? "").split("\n")) {
182
+ const trimmed = line.trim();
183
+ if (!trimmed)
184
+ continue;
185
+ const idx = trimmed.lastIndexOf("/node_modules/");
186
+ if (idx < 0)
187
+ continue;
188
+ const tail = trimmed.slice(idx + "/node_modules/".length);
189
+ if (tail)
190
+ out.add(tail);
191
+ }
192
+ return out;
193
+ }
194
+ catch {
195
+ return new Set();
196
+ }
197
+ }
198
+ function snapshotUvTool() {
199
+ try {
200
+ const r = spawnSync("uv", ["tool", "list"], { encoding: "utf-8", timeout: 10_000 });
201
+ if (r.status !== 0 && !r.stdout)
202
+ return new Set();
203
+ const out = new Set();
204
+ for (const line of (r.stdout ?? "").split("\n")) {
205
+ if (!line || line.startsWith(" ") || line.startsWith("warning:"))
206
+ continue;
207
+ const m = line.match(/^([a-zA-Z0-9._-]+)\s+v?\d/);
208
+ if (m && m[1])
209
+ out.add(m[1]);
210
+ }
211
+ return out;
212
+ }
213
+ catch {
214
+ return new Set();
215
+ }
216
+ }
217
+ async function isExecutable(path) {
218
+ try {
219
+ await access(path, constants.X_OK);
220
+ return true;
221
+ }
222
+ catch {
223
+ return false;
224
+ }
225
+ }
226
+ function splitPath(value) {
227
+ return value?.split(delimiter).filter(Boolean) ?? [];
228
+ }
229
+ function managedBinDirs(options) {
230
+ const env = options.env ?? process.env;
231
+ return [...new Set([
232
+ ...(options.managedBinDirs ?? []),
233
+ ...splitPath(env.OPENMA_ACP_BIN_DIR),
234
+ ])];
235
+ }
236
+ function systemBinDirs(options) {
237
+ const env = options.env ?? process.env;
238
+ const home = env.HOME ?? env.USERPROFILE;
239
+ const dirs = splitPath(env.PATH);
240
+ if (options.systemPathFallbackDirs) {
241
+ dirs.push(...options.systemPathFallbackDirs);
242
+ }
243
+ else {
244
+ if (process.platform === "darwin") {
245
+ dirs.push("/opt/homebrew/bin", "/usr/local/bin", "/opt/local/bin");
246
+ }
247
+ dirs.push("/usr/bin", "/bin");
248
+ }
249
+ if (env.PNPM_HOME)
250
+ dirs.push(env.PNPM_HOME);
251
+ if (env.VOLTA_HOME)
252
+ dirs.push(join(env.VOLTA_HOME, "bin"));
253
+ if (home) {
254
+ dirs.push(join(home, ".volta", "bin"), join(home, ".asdf", "shims"), join(home, ".local", "share", "mise", "shims"), join(home, ".mise", "shims"), join(home, ".local", "bin"), join(home, "Library", "pnpm"), join(home, ".bun", "bin"));
255
+ }
256
+ return [...new Set(dirs)];
257
+ }
258
+ async function candidateNodeVersionDirs(root, suffix) {
259
+ const dirs = [];
260
+ try {
261
+ for (const entry of await readdir(root, { withFileTypes: true })) {
262
+ if (entry.isDirectory())
263
+ dirs.push(join(root, entry.name, ...suffix));
264
+ }
265
+ }
266
+ catch {
267
+ // Optional toolchain manager; absence just means no extra bins.
268
+ }
269
+ return dirs;
270
+ }
271
+ async function systemBinDirsWithNodeManagers(options) {
272
+ const env = options.env ?? process.env;
273
+ const home = env.HOME ?? env.USERPROFILE;
274
+ const dirs = systemBinDirs(options);
275
+ const nvmDir = env.NVM_DIR ?? (home ? join(home, ".nvm") : undefined);
276
+ if (nvmDir)
277
+ dirs.push(...(await candidateNodeVersionDirs(join(nvmDir, "versions", "node"), ["bin"])));
278
+ const fnmDir = env.FNM_DIR ?? (home ? join(home, ".fnm") : undefined);
279
+ if (fnmDir)
280
+ dirs.push(...(await candidateNodeVersionDirs(join(fnmDir, "node-versions"), ["installation", "bin"])));
281
+ return [...new Set(dirs)];
282
+ }
283
+ async function resolveCommandInDirs(command, dirs) {
284
+ if (isAbsolute(command))
285
+ return await isExecutable(command) ? command : null;
286
+ for (const dir of dirs) {
287
+ const candidate = join(dir, command);
288
+ if (await isExecutable(candidate))
289
+ return candidate;
290
+ }
291
+ return null;
292
+ }
293
+ async function resolveManagedCommand(command, options) {
294
+ return resolveCommandInDirs(command, managedBinDirs(options));
295
+ }
296
+ async function resolveSystemCommand(entry, options) {
297
+ if (entry.installSource === "registry" && entry.spec.command.startsWith(registryShimName(""))) {
298
+ return null;
299
+ }
300
+ return resolveCommandInDirs(entry.spec.command, await systemBinDirsWithNodeManagers(options));
301
+ }
302
+ export async function detectAll(options = {}) {
303
+ const list = getKnownAgents();
304
+ const results = await Promise.all(list.map((e) => detect(e.id, options)));
305
+ return results.filter((e) => e !== null);
306
+ }
307
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/acp-harnesses/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export declare const ACP_AUTH_REQUIRED_CODE = -32000;
2
+ export declare function isAuthRequired(error: unknown): boolean;
3
+ /** Auth-required JSON-RPC error whose message is the ACP authentication
4
+ * failure, not every -32000. Session setup retries and auth probes use this
5
+ * narrower check; `isAuthRequired` stays code-only for existing callers. */
6
+ export declare function isAuthenticationRequiredError(error: unknown): boolean;
7
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/acp-runtime/errors.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,sBAAsB,SAAS,CAAC;AAI7C,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAMtD;AAED;;4EAE4E;AAC5E,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAIrE"}
@@ -0,0 +1,17 @@
1
+ export const ACP_AUTH_REQUIRED_CODE = -32000;
2
+ const AUTHENTICATION_REQUIRED_MESSAGE = /^Authentication required\b/i;
3
+ export function isAuthRequired(error) {
4
+ return Boolean(error &&
5
+ typeof error === "object" &&
6
+ error.code === ACP_AUTH_REQUIRED_CODE);
7
+ }
8
+ /** Auth-required JSON-RPC error whose message is the ACP authentication
9
+ * failure, not every -32000. Session setup retries and auth probes use this
10
+ * narrower check; `isAuthRequired` stays code-only for existing callers. */
11
+ export function isAuthenticationRequiredError(error) {
12
+ if (!isAuthRequired(error))
13
+ return false;
14
+ const message = error.message;
15
+ return typeof message === "string" && AUTHENTICATION_REQUIRED_MESSAGE.test(message);
16
+ }
17
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/acp-runtime/errors.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,KAAK,CAAC;AAE7C,MAAM,+BAA+B,GAAG,6BAA6B,CAAC;AAEtE,MAAM,UAAU,cAAc,CAAC,KAAc;IAC3C,OAAO,OAAO,CACZ,KAAK;QACH,OAAO,KAAK,KAAK,QAAQ;QACxB,KAA4B,CAAC,IAAI,KAAK,sBAAsB,CAChE,CAAC;AACJ,CAAC;AAED;;4EAE4E;AAC5E,MAAM,UAAU,6BAA6B,CAAC,KAAc;IAC1D,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACzC,MAAM,OAAO,GAAI,KAA+B,CAAC,OAAO,CAAC;IACzD,OAAO,OAAO,OAAO,KAAK,QAAQ,IAAI,+BAA+B,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACtF,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { AcpForkPoint } from "../acp-fork/index.js";
2
+ export { ACP_INCLUSIVE_FORK_CAPABILITY, ACP_INCLUSIVE_FORK_VERSION, acpForkPointsFromMessages, acpInclusiveForkCapabilityMeta, forkSupport, } from "../acp-fork/index.js";
3
+ export type { AcpForkPoint, AcpForkSupport, AcpForkSupportLevel, AcpForkSupportReason, AcpForkSupportSource, AcpInclusiveForkCapability, } from "../acp-fork/index.js";
4
+ /** Inclusive-fork `_meta` carried by `SessionOptions.sessionRequestMeta`.
5
+ * The fingerprint is `sha256:` plus the SHA-256 of the message text's UTF-8 bytes.
6
+ * Node-only: browser clients pass `AcpForkPoint` to the runtime instead of calling this. */
7
+ export declare function acpForkRequestMeta(point: AcpForkPoint): Record<string, unknown>;
8
+ //# sourceMappingURL=fork-support.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fork-support.d.ts","sourceRoot":"","sources":["../../src/acp-runtime/fork-support.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEzD,OAAO,EACL,6BAA6B,EAC7B,0BAA0B,EAC1B,yBAAyB,EACzB,8BAA8B,EAC9B,WAAW,GACZ,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EACV,YAAY,EACZ,cAAc,EACd,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,0BAA0B,GAC3B,MAAM,sBAAsB,CAAC;AAE9B;;4FAE4F;AAC5F,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAa/E"}
@@ -0,0 +1,20 @@
1
+ import { createHash } from "node:crypto";
2
+ export { ACP_INCLUSIVE_FORK_CAPABILITY, ACP_INCLUSIVE_FORK_VERSION, acpForkPointsFromMessages, acpInclusiveForkCapabilityMeta, forkSupport, } from "../acp-fork/index.js";
3
+ /** Inclusive-fork `_meta` carried by `SessionOptions.sessionRequestMeta`.
4
+ * The fingerprint is `sha256:` plus the SHA-256 of the message text's UTF-8 bytes.
5
+ * Node-only: browser clients pass `AcpForkPoint` to the runtime instead of calling this. */
6
+ export function acpForkRequestMeta(point) {
7
+ return {
8
+ jetbrains: {
9
+ air: {
10
+ fork: {
11
+ version: 1,
12
+ messageId: point.messageId,
13
+ messageFingerprint: `sha256:${createHash("sha256").update(point.messageText, "utf8").digest("hex")}`,
14
+ messageOccurrence: point.messageOccurrence,
15
+ },
16
+ },
17
+ },
18
+ };
19
+ }
20
+ //# sourceMappingURL=fork-support.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fork-support.js","sourceRoot":"","sources":["../../src/acp-runtime/fork-support.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC,OAAO,EACL,6BAA6B,EAC7B,0BAA0B,EAC1B,yBAAyB,EACzB,8BAA8B,EAC9B,WAAW,GACZ,MAAM,sBAAsB,CAAC;AAU9B;;4FAE4F;AAC5F,MAAM,UAAU,kBAAkB,CAAC,KAAmB;IACpD,OAAO;QACL,SAAS,EAAE;YACT,GAAG,EAAE;gBACH,IAAI,EAAE;oBACJ,OAAO,EAAE,CAAC;oBACV,SAAS,EAAE,KAAK,CAAC,SAAS;oBAC1B,kBAAkB,EAAE,UAAU,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;oBACpG,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;iBAC3C;aACF;SACF;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,11 @@
1
+ export type { AgentSpec, ChildHandle, Spawner, AcpSession, AcpRuntime, RestartPolicy, SessionOptions, ClientCallbacks, SteeringOutcome, } from "./types.js";
2
+ export type { ContentBlock, PromptCapabilities } from "@agentclientprotocol/sdk";
3
+ export { AcpRuntimeImpl } from "./runtime.js";
4
+ export { AcpSessionImpl, sessionConfigOptionsFromResponse, } from "./session.js";
5
+ export type { AcpSessionConstructOptions } from "./session.js";
6
+ export { ACP_INCLUSIVE_FORK_CAPABILITY, ACP_INCLUSIVE_FORK_VERSION, acpForkPointsFromMessages, acpForkRequestMeta, acpInclusiveForkCapabilityMeta, forkSupport, } from "./fork-support.js";
7
+ export type { AcpForkPoint, AcpForkSupport, AcpForkSupportLevel, AcpForkSupportReason, AcpForkSupportSource, AcpInclusiveForkCapability, } from "./fork-support.js";
8
+ export { ACP_AUTH_REQUIRED_CODE, isAuthRequired, isAuthenticationRequiredError, } from "./errors.js";
9
+ export { authenticateAgent, disposeAllAcpProbes, probeAcpSession, probeAgentSessionConfig, probeAgentAuthStatus, } from "./probe.js";
10
+ export type { AuthenticateAgentOptions, AuthenticateAgentResult, ProbeAcpSessionOptions, ProbeAcpSessionResult, ProbeAgentConfigOptionsOptions, ProbeAgentSessionConfigResult, ProbeAgentAuthMethod, ProbeAgentAuthStatus, ProbeAgentAuthStatusOptions, TerminalAuthLaunchOptions, } from "./probe.js";
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/acp-runtime/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,SAAS,EACT,WAAW,EACX,OAAO,EACP,UAAU,EACV,UAAU,EACV,aAAa,EACb,cAAc,EACd,eAAe,EACf,eAAe,GAChB,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACjF,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EACL,cAAc,EACd,gCAAgC,GACjC,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC;AAC/D,OAAO,EACL,6BAA6B,EAC7B,0BAA0B,EAC1B,yBAAyB,EACzB,kBAAkB,EAClB,8BAA8B,EAC9B,WAAW,GACZ,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EACV,YAAY,EACZ,cAAc,EACd,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,0BAA0B,GAC3B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,sBAAsB,EACtB,cAAc,EACd,6BAA6B,GAC9B,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,eAAe,EACf,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,wBAAwB,EACxB,uBAAuB,EACvB,sBAAsB,EACtB,qBAAqB,EACrB,8BAA8B,EAC9B,6BAA6B,EAC7B,oBAAoB,EACpB,oBAAoB,EACpB,2BAA2B,EAC3B,yBAAyB,GAC1B,MAAM,YAAY,CAAC"}
@@ -0,0 +1,6 @@
1
+ export { AcpRuntimeImpl } from "./runtime.js";
2
+ export { AcpSessionImpl, sessionConfigOptionsFromResponse, } from "./session.js";
3
+ export { ACP_INCLUSIVE_FORK_CAPABILITY, ACP_INCLUSIVE_FORK_VERSION, acpForkPointsFromMessages, acpForkRequestMeta, acpInclusiveForkCapabilityMeta, forkSupport, } from "./fork-support.js";
4
+ export { ACP_AUTH_REQUIRED_CODE, isAuthRequired, isAuthenticationRequiredError, } from "./errors.js";
5
+ export { authenticateAgent, disposeAllAcpProbes, probeAcpSession, probeAgentSessionConfig, probeAgentAuthStatus, } from "./probe.js";
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/acp-runtime/index.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EACL,cAAc,EACd,gCAAgC,GACjC,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,6BAA6B,EAC7B,0BAA0B,EAC1B,yBAAyB,EACzB,kBAAkB,EAClB,8BAA8B,EAC9B,WAAW,GACZ,MAAM,mBAAmB,CAAC;AAS3B,OAAO,EACL,sBAAsB,EACtB,cAAc,EACd,6BAA6B,GAC9B,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,eAAe,EACf,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,YAAY,CAAC"}