@openma/common 0.0.0-stage → 0.9.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 (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 +872 -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 @@
1
+ {"version":3,"file":"headless-launch.js","sourceRoot":"","sources":["../../src/acp-harnesses/headless-launch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ export interface AcpHarnessSpec {
2
+ /** Stable id persisted by products and attached to sessions. */
3
+ id: string;
4
+ label: string;
5
+ command: string;
6
+ args: string[];
7
+ env?: Record<string, string>;
8
+ }
9
+ /**
10
+ * Browser-safe baseline catalog for OpenMA products that launch ACP agents
11
+ * from the user's PATH. Products may append or replace entries when they also
12
+ * implement managed installation or registry discovery.
13
+ */
14
+ export declare const DEFAULT_ACP_HARNESSES: readonly AcpHarnessSpec[];
15
+ export declare function cloneAcpHarnesses(harnesses: readonly AcpHarnessSpec[]): AcpHarnessSpec[];
16
+ /** Safely restores a persisted product-owned harness catalog. */
17
+ export declare function normalizeAcpHarnesses(value: unknown): AcpHarnessSpec[];
18
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/acp-harnesses/index.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,gEAAgE;IAChE,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B;AAED;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,EAAE,SAAS,cAAc,EAMjD,CAAC;AAEX,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,SAAS,cAAc,EAAE,GACnC,cAAc,EAAE,CAMlB;AAED,iEAAiE;AACjE,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,cAAc,EAAE,CActE"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Browser-safe baseline catalog for OpenMA products that launch ACP agents
3
+ * from the user's PATH. Products may append or replace entries when they also
4
+ * implement managed installation or registry discovery.
5
+ */
6
+ export const DEFAULT_ACP_HARNESSES = [
7
+ { id: "claude-acp", label: "Claude", command: "claude-agent-acp", args: [] },
8
+ { id: "codex-acp", label: "Codex", command: "codex-acp", args: [] },
9
+ { id: "gemini", label: "Gemini CLI", command: "gemini", args: ["--acp"] },
10
+ { id: "opencode", label: "OpenCode", command: "opencode", args: ["acp"] },
11
+ { id: "kimi", label: "Kimi Code", command: "kimi", args: ["acp"] },
12
+ ];
13
+ export function cloneAcpHarnesses(harnesses) {
14
+ return harnesses.map((harness) => ({
15
+ ...harness,
16
+ args: [...harness.args],
17
+ ...(harness.env ? { env: { ...harness.env } } : {}),
18
+ }));
19
+ }
20
+ /** Safely restores a persisted product-owned harness catalog. */
21
+ export function normalizeAcpHarnesses(value) {
22
+ if (!Array.isArray(value))
23
+ return [];
24
+ const seen = new Set();
25
+ return value.flatMap((candidate) => {
26
+ const record = asRecord(candidate);
27
+ const id = nonEmptyString(record?.id);
28
+ const label = nonEmptyString(record?.label);
29
+ const command = nonEmptyString(record?.command);
30
+ const args = stringArray(record?.args);
31
+ if (!id || !label || !command || !args || seen.has(id))
32
+ return [];
33
+ seen.add(id);
34
+ const env = stringRecord(record?.env);
35
+ return [{ id, label, command, args, ...(env ? { env } : {}) }];
36
+ });
37
+ }
38
+ function asRecord(value) {
39
+ return value !== null && typeof value === "object" && !Array.isArray(value)
40
+ ? value
41
+ : undefined;
42
+ }
43
+ function nonEmptyString(value) {
44
+ return typeof value === "string" && value.trim() ? value.trim() : undefined;
45
+ }
46
+ function stringArray(value) {
47
+ return Array.isArray(value) && value.every((item) => typeof item === "string")
48
+ ? [...value]
49
+ : undefined;
50
+ }
51
+ function stringRecord(value) {
52
+ const record = asRecord(value);
53
+ if (!record || Object.values(record).some((item) => typeof item !== "string")) {
54
+ return undefined;
55
+ }
56
+ return Object.fromEntries(Object.entries(record).map(([key, item]) => [key, String(item)]));
57
+ }
58
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/acp-harnesses/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,86 @@
1
+ import type { KnownAgentEntry } from "./known-agents.js";
2
+ /** Harness ids whose latest version comes from npm, not the public ACP registry snapshot. */
3
+ export declare const OPENMA_NPM_HARNESS_IDS: Set<string>;
4
+ export interface AcpHarnessInstallState {
5
+ installed: boolean;
6
+ installedVersion?: string;
7
+ latestVersion?: string;
8
+ updateAvailable?: boolean;
9
+ }
10
+ export interface ReadAcpHarnessInstallStateOptions {
11
+ entry: KnownAgentEntry;
12
+ binDir: string;
13
+ installRoot?: string;
14
+ fetchImpl?: typeof fetch;
15
+ npmRegistryUrls?: string[];
16
+ }
17
+ export declare function usesOpenMaNpmLatestSource(entry: KnownAgentEntry): boolean;
18
+ export declare function readAcpHarnessInstallState(options: ReadAcpHarnessInstallStateOptions): Promise<AcpHarnessInstallState>;
19
+ export interface AcpHarnessPinState {
20
+ package: {
21
+ name: string;
22
+ pinned: string;
23
+ installed?: string;
24
+ };
25
+ dependencies: Array<{
26
+ name: string;
27
+ pinned: string;
28
+ installed?: string;
29
+ }>;
30
+ /** Every pinned package is installed at exactly its pinned version. */
31
+ satisfied: boolean;
32
+ }
33
+ /** Orders by UTF-16 code unit, the same on every machine. `localeCompare` follows the host locale. */
34
+ export declare function compareCodePoints(left: string, right: string): number;
35
+ export declare function isExactVersion(version: string | undefined): version is string;
36
+ /** Dependency pins in a stable order. Throws when one is not an exact version. */
37
+ export declare function exactDependencyPins(pins: Record<string, string> | undefined): Array<[string, string]>;
38
+ export interface AcpHarnessPinnedPackages {
39
+ package: {
40
+ name: string;
41
+ version: string;
42
+ };
43
+ dependencies: Array<[string, string]>;
44
+ }
45
+ /**
46
+ * The exact versions an entry pins. Throws when the entry pins nothing or
47
+ * names anything other than an exact version: the installer and the state
48
+ * reader refuse the same input.
49
+ */
50
+ export declare function acpHarnessPinnedPackages(entry: KnownAgentEntry): AcpHarnessPinnedPackages;
51
+ /**
52
+ * Where a pinned install lives. Its launcher name and its state directory
53
+ * differ from the product install's, so the two can share one bin directory
54
+ * and install root without overwriting each other.
55
+ */
56
+ export declare function pinnedAcpHarnessPaths(entry: KnownAgentEntry, binDir: string, options?: {
57
+ platform?: NodeJS.Platform;
58
+ }): {
59
+ stateId: string;
60
+ launcherName: string;
61
+ launcherPath: string;
62
+ };
63
+ /**
64
+ * Compares the install a pinned launcher points at with the exact versions
65
+ * the registry entry pins. Reads only local files. Null when the entry pins
66
+ * nothing; throws when its pins are not exact versions.
67
+ */
68
+ export declare function readAcpHarnessPinState(options: {
69
+ entry: KnownAgentEntry;
70
+ shimPath: string;
71
+ }): Promise<AcpHarnessPinState | null>;
72
+ export declare function npmPackageNameFromSpec(packageSpec: string): string;
73
+ export declare function npmVersionFromSpec(packageSpec: string): string | undefined;
74
+ export declare function latestNpmPackageVersion(packageName: string, options?: {
75
+ fetchImpl?: typeof fetch;
76
+ npmRegistryUrls?: string[];
77
+ }): Promise<string | undefined>;
78
+ export declare function readInstalledNpmPackageVersion(options: {
79
+ shimPath: string;
80
+ packageName: string;
81
+ installRoot?: string;
82
+ registryId?: string;
83
+ }): Promise<string | undefined>;
84
+ export declare function installedNpmPackageVersionFromShim(shimPath: string, packageName: string): Promise<string | undefined>;
85
+ export declare function isStrictlyNewerVersion(candidate?: string, current?: string): boolean;
86
+ //# sourceMappingURL=install-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-state.d.ts","sourceRoot":"","sources":["../../src/acp-harnesses/install-state.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,322 @@
1
+ import { access, readFile, readdir } from "node:fs/promises";
2
+ import { basename, join } from "node:path";
3
+ import { launcherTarget } from "./launcher.js";
4
+ /** Harness ids whose latest version comes from npm, not the public ACP registry snapshot. */
5
+ export const OPENMA_NPM_HARNESS_IDS = new Set(["pi-acp", "dsh-acp"]);
6
+ export function usesOpenMaNpmLatestSource(entry) {
7
+ const registryId = entry.registryId ?? entry.id;
8
+ return OPENMA_NPM_HARNESS_IDS.has(registryId) || OPENMA_NPM_HARNESS_IDS.has(entry.id);
9
+ }
10
+ export async function readAcpHarnessInstallState(options) {
11
+ const installRoot = options.installRoot ?? options.binDir;
12
+ const registryLatestVersion = usesOpenMaNpmLatestSource(options.entry)
13
+ ? undefined
14
+ : options.entry.version;
15
+ if (!options.entry.installSource) {
16
+ return {
17
+ installed: false,
18
+ ...(registryLatestVersion ? { latestVersion: registryLatestVersion } : {}),
19
+ };
20
+ }
21
+ const shimPath = join(options.binDir, basename(options.entry.spec.command));
22
+ const installed = await access(shimPath).then(() => true, () => false);
23
+ if (!installed) {
24
+ return {
25
+ installed: false,
26
+ ...(registryLatestVersion ? { latestVersion: registryLatestVersion } : {}),
27
+ };
28
+ }
29
+ const npmPackageName = options.entry.registryDistribution?.npx?.package
30
+ ? npmPackageNameFromSpec(options.entry.registryDistribution.npx.package)
31
+ : undefined;
32
+ const registryId = options.entry.registryId;
33
+ const [metadata, installedNpmVersion, npmLatestVersion] = await Promise.all([
34
+ options.entry.installSource === "registry" && registryId
35
+ ? readRegistryInstallMetadata(installRoot, registryId)
36
+ : Promise.resolve(null),
37
+ npmPackageName
38
+ ? readInstalledNpmPackageVersion({
39
+ shimPath,
40
+ packageName: npmPackageName,
41
+ installRoot,
42
+ registryId,
43
+ })
44
+ : Promise.resolve(undefined),
45
+ !registryLatestVersion && npmPackageName && usesOpenMaNpmLatestSource(options.entry)
46
+ ? latestNpmPackageVersion(npmPackageName, {
47
+ fetchImpl: options.fetchImpl,
48
+ npmRegistryUrls: options.npmRegistryUrls,
49
+ })
50
+ : Promise.resolve(undefined),
51
+ ]);
52
+ const installedVersion = installedNpmVersion ?? metadata?.version;
53
+ const latestVersion = registryLatestVersion ?? npmLatestVersion;
54
+ const updateAvailable = options.entry.installSource === "registry"
55
+ && Boolean(installedVersion)
56
+ && Boolean(latestVersion)
57
+ && isStrictlyNewerVersion(latestVersion, installedVersion);
58
+ return {
59
+ installed: true,
60
+ ...(installedVersion ? { installedVersion } : {}),
61
+ ...(latestVersion ? { latestVersion } : {}),
62
+ ...(updateAvailable ? { updateAvailable: true } : {}),
63
+ };
64
+ }
65
+ /** Orders by UTF-16 code unit, the same on every machine. `localeCompare` follows the host locale. */
66
+ export function compareCodePoints(left, right) {
67
+ return left < right ? -1 : left > right ? 1 : 0;
68
+ }
69
+ const EXACT_VERSION = /^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/;
70
+ export function isExactVersion(version) {
71
+ return version !== undefined && EXACT_VERSION.test(version);
72
+ }
73
+ /** Dependency pins in a stable order. Throws when one is not an exact version. */
74
+ export function exactDependencyPins(pins) {
75
+ const entries = Object.entries(pins ?? {}).sort(([left], [right]) => compareCodePoints(left, right));
76
+ for (const [name, version] of entries) {
77
+ if (!isExactVersion(version)) {
78
+ throw new Error(`npm override for ${name} must be an exact version, got ${JSON.stringify(version)}`);
79
+ }
80
+ }
81
+ return entries;
82
+ }
83
+ /**
84
+ * The exact versions an entry pins. Throws when the entry pins nothing or
85
+ * names anything other than an exact version: the installer and the state
86
+ * reader refuse the same input.
87
+ */
88
+ export function acpHarnessPinnedPackages(entry) {
89
+ if (!entry.pinned || !entry.registryId) {
90
+ throw new Error(`${entry.label} (${entry.id}) has no pinned install`);
91
+ }
92
+ const version = npmVersionFromSpec(entry.pinned.package);
93
+ if (!isExactVersion(version)) {
94
+ throw new Error(`${entry.label} (${entry.id}) pins ${entry.pinned.package}, which is not an exact version`);
95
+ }
96
+ return {
97
+ package: { name: npmPackageNameFromSpec(entry.pinned.package), version },
98
+ dependencies: exactDependencyPins(entry.pinned.dependencies),
99
+ };
100
+ }
101
+ /**
102
+ * Where a pinned install lives. Its launcher name and its state directory
103
+ * differ from the product install's, so the two can share one bin directory
104
+ * and install root without overwriting each other.
105
+ */
106
+ export function pinnedAcpHarnessPaths(entry, binDir, options = {}) {
107
+ const windows = (options.platform ?? process.platform) === "win32";
108
+ const base = `${posixBasename(entry.spec.command)}-pinned`;
109
+ const launcherName = windows ? `${base}.cmd` : base;
110
+ return {
111
+ stateId: `${entry.registryId ?? entry.id}-pinned`,
112
+ launcherName,
113
+ launcherPath: join(binDir, launcherName),
114
+ };
115
+ }
116
+ function posixBasename(command) {
117
+ return command.replaceAll("\\", "/").split("/").at(-1);
118
+ }
119
+ /**
120
+ * Compares the install a pinned launcher points at with the exact versions
121
+ * the registry entry pins. Reads only local files. Null when the entry pins
122
+ * nothing; throws when its pins are not exact versions.
123
+ */
124
+ export async function readAcpHarnessPinState(options) {
125
+ if (!options.entry.pinned)
126
+ return null;
127
+ const pins = acpHarnessPinnedPackages(options.entry);
128
+ const installedPackage = await installedNpmPackageVersionFromShim(options.shimPath, pins.package.name);
129
+ const dependencies = await Promise.all(pins.dependencies.map(async ([dependency, version]) => {
130
+ const installed = await installedNpmPackageVersionFromShim(options.shimPath, dependency);
131
+ return { name: dependency, pinned: version, ...(installed ? { installed } : {}) };
132
+ }));
133
+ return {
134
+ package: {
135
+ name: pins.package.name,
136
+ pinned: pins.package.version,
137
+ ...(installedPackage ? { installed: installedPackage } : {}),
138
+ },
139
+ dependencies,
140
+ satisfied: installedPackage === pins.package.version
141
+ && dependencies.every((dependency) => dependency.installed === dependency.pinned),
142
+ };
143
+ }
144
+ export function npmPackageNameFromSpec(packageSpec) {
145
+ if (packageSpec.startsWith("@")) {
146
+ const versionIndex = packageSpec.indexOf("@", 1);
147
+ return versionIndex > 0 ? packageSpec.slice(0, versionIndex) : packageSpec;
148
+ }
149
+ const versionIndex = packageSpec.lastIndexOf("@");
150
+ return versionIndex > 0 ? packageSpec.slice(0, versionIndex) : packageSpec;
151
+ }
152
+ export function npmVersionFromSpec(packageSpec) {
153
+ if (packageSpec.startsWith("@")) {
154
+ const versionIndex = packageSpec.indexOf("@", 1);
155
+ return versionIndex > 0 ? packageSpec.slice(versionIndex + 1) : undefined;
156
+ }
157
+ const versionIndex = packageSpec.lastIndexOf("@");
158
+ return versionIndex > 0 ? packageSpec.slice(versionIndex + 1) : undefined;
159
+ }
160
+ export async function latestNpmPackageVersion(packageName, options = {}) {
161
+ const fetchImpl = options.fetchImpl ?? fetch;
162
+ const registryUrls = options.npmRegistryUrls?.length
163
+ ? options.npmRegistryUrls
164
+ : [undefined];
165
+ for (const registryUrl of registryUrls) {
166
+ try {
167
+ const base = registryUrl ?? "https://registry.npmjs.org";
168
+ const url = `${base.replace(/\/$/, "")}/${encodeURIComponent(packageName)}`;
169
+ const response = await fetchImpl(url, {
170
+ headers: { accept: "application/vnd.npm.install-v1+json" },
171
+ signal: AbortSignal.timeout(5_000),
172
+ });
173
+ if (!response.ok)
174
+ continue;
175
+ const parsed = await response.json();
176
+ const latest = parsed["dist-tags"]?.latest;
177
+ if (typeof latest === "string" && latest.length > 0) {
178
+ return latest;
179
+ }
180
+ }
181
+ catch {
182
+ // Try the next registry mirror.
183
+ }
184
+ }
185
+ return undefined;
186
+ }
187
+ export async function readInstalledNpmPackageVersion(options) {
188
+ const fromShim = await installedNpmPackageVersionFromShim(options.shimPath, options.packageName);
189
+ if (fromShim)
190
+ return fromShim;
191
+ if (!options.installRoot || !options.registryId)
192
+ return undefined;
193
+ return await scanRegistryInstallPackageVersion(options.installRoot, options.registryId, options.packageName);
194
+ }
195
+ export async function installedNpmPackageVersionFromShim(shimPath, packageName) {
196
+ try {
197
+ const commandPath = launcherTarget(await readFile(shimPath, "utf8"));
198
+ if (!commandPath)
199
+ return undefined;
200
+ return await readPackageJsonVersion(join(dirnameFromShim(commandPath), "node_modules", ...packageName.split("/"), "package.json"));
201
+ }
202
+ catch {
203
+ return undefined;
204
+ }
205
+ }
206
+ function dirnameFromShim(commandPath) {
207
+ const normalized = commandPath.replaceAll("\\", "/");
208
+ const marker = "/node_modules/.bin/";
209
+ const markerIndex = normalized.lastIndexOf(marker);
210
+ if (markerIndex < 0) {
211
+ throw new Error(`Shim does not point at an npm prefix: ${commandPath}`);
212
+ }
213
+ return normalized.slice(0, markerIndex);
214
+ }
215
+ async function scanRegistryInstallPackageVersion(installRoot, registryId, packageName) {
216
+ const registryDir = join(installRoot, "registry", sanitizePathComponent(registryId));
217
+ let entries;
218
+ try {
219
+ entries = await readdir(registryDir);
220
+ }
221
+ catch {
222
+ return undefined;
223
+ }
224
+ for (const entry of entries) {
225
+ if (!entry.startsWith("v_"))
226
+ continue;
227
+ const version = await readPackageJsonVersion(join(registryDir, entry, "node_modules", ...packageName.split("/"), "package.json"));
228
+ if (version)
229
+ return version;
230
+ }
231
+ return undefined;
232
+ }
233
+ async function readPackageJsonVersion(packageJsonPath) {
234
+ try {
235
+ const parsed = JSON.parse(await readFile(packageJsonPath, "utf8"));
236
+ return typeof parsed.version === "string" && parsed.version.length > 0
237
+ ? parsed.version
238
+ : undefined;
239
+ }
240
+ catch {
241
+ return undefined;
242
+ }
243
+ }
244
+ async function readRegistryInstallMetadata(installRoot, registryId) {
245
+ try {
246
+ const parsed = JSON.parse(await readFile(join(installRoot, "registry", sanitizePathComponent(registryId), "install.json"), "utf8"));
247
+ if (parsed.source !== "registry" || parsed.registryId !== registryId || typeof parsed.shimName !== "string") {
248
+ return null;
249
+ }
250
+ return {
251
+ source: "registry",
252
+ registryId: parsed.registryId,
253
+ shimName: parsed.shimName,
254
+ ...(typeof parsed.version === "string" && parsed.version.length > 0 ? { version: parsed.version } : {}),
255
+ installedAt: typeof parsed.installedAt === "string" ? parsed.installedAt : "",
256
+ };
257
+ }
258
+ catch {
259
+ return null;
260
+ }
261
+ }
262
+ function sanitizePathComponent(input) {
263
+ const sanitized = input.replace(/[^a-zA-Z0-9._-]/g, "-");
264
+ return sanitized.length > 0 ? sanitized : "unknown";
265
+ }
266
+ export function isStrictlyNewerVersion(candidate, current) {
267
+ if (!candidate || !current)
268
+ return false;
269
+ const parsedCandidate = parseSemver(candidate);
270
+ const parsedCurrent = parseSemver(current);
271
+ if (!parsedCandidate || !parsedCurrent)
272
+ return false;
273
+ return compareSemver(parsedCandidate, parsedCurrent) > 0;
274
+ }
275
+ function parseSemver(version) {
276
+ const match = version.trim().match(/^v?(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?(?:\+[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?$/);
277
+ if (!match)
278
+ return null;
279
+ const core = match.slice(1, 4).map(Number);
280
+ if (core.some((part) => !Number.isSafeInteger(part)))
281
+ return null;
282
+ return {
283
+ core: core,
284
+ prerelease: match[4]?.split(".") ?? [],
285
+ };
286
+ }
287
+ function compareSemver(left, right) {
288
+ for (let index = 0; index < left.core.length; index += 1) {
289
+ const difference = left.core[index] - right.core[index];
290
+ if (difference !== 0)
291
+ return difference;
292
+ }
293
+ if (left.prerelease.length === 0 || right.prerelease.length === 0) {
294
+ return right.prerelease.length - left.prerelease.length;
295
+ }
296
+ const length = Math.max(left.prerelease.length, right.prerelease.length);
297
+ for (let index = 0; index < length; index += 1) {
298
+ const leftPart = left.prerelease[index];
299
+ const rightPart = right.prerelease[index];
300
+ if (leftPart === undefined)
301
+ return -1;
302
+ if (rightPart === undefined)
303
+ return 1;
304
+ if (leftPart === rightPart)
305
+ continue;
306
+ const leftIsNumeric = /^\d+$/.test(leftPart);
307
+ const rightIsNumeric = /^\d+$/.test(rightPart);
308
+ if (leftIsNumeric && rightIsNumeric) {
309
+ const normalizedLeft = leftPart.replace(/^0+(?=\d)/, "");
310
+ const normalizedRight = rightPart.replace(/^0+(?=\d)/, "");
311
+ if (normalizedLeft.length !== normalizedRight.length) {
312
+ return normalizedLeft.length - normalizedRight.length;
313
+ }
314
+ return normalizedLeft < normalizedRight ? -1 : 1;
315
+ }
316
+ if (leftIsNumeric !== rightIsNumeric)
317
+ return leftIsNumeric ? -1 : 1;
318
+ return leftPart < rightPart ? -1 : 1;
319
+ }
320
+ return 0;
321
+ }
322
+ //# sourceMappingURL=install-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-state.js","sourceRoot":"","sources":["../../src/acp-harnesses/install-state.ts"],"names":[],"mappings":"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"}