@alan-ai-hq/agent-manager 0.1.113 → 0.1.115

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 (655) hide show
  1. package/LICENSE +88 -0
  2. package/dist/__tests__/binding-switch-git.test.d.ts +2 -0
  3. package/dist/__tests__/binding-switch-git.test.d.ts.map +1 -0
  4. package/dist/__tests__/binding-switch-git.test.js +555 -0
  5. package/dist/__tests__/binding-switch-git.test.js.map +1 -0
  6. package/dist/__tests__/cli-ensure-install.test.d.ts +2 -0
  7. package/dist/__tests__/cli-ensure-install.test.d.ts.map +1 -0
  8. package/dist/__tests__/cli-ensure-install.test.js +177 -0
  9. package/dist/__tests__/cli-ensure-install.test.js.map +1 -0
  10. package/dist/__tests__/cli-executable.test.d.ts +2 -0
  11. package/dist/__tests__/cli-executable.test.d.ts.map +1 -0
  12. package/dist/__tests__/cli-executable.test.js +155 -0
  13. package/dist/__tests__/cli-executable.test.js.map +1 -0
  14. package/dist/__tests__/cli-executable.windows.test.d.ts +2 -0
  15. package/dist/__tests__/cli-executable.windows.test.d.ts.map +1 -0
  16. package/dist/__tests__/cli-executable.windows.test.js +123 -0
  17. package/dist/__tests__/cli-executable.windows.test.js.map +1 -0
  18. package/dist/__tests__/cli-help.test.d.ts +2 -0
  19. package/dist/__tests__/cli-help.test.d.ts.map +1 -0
  20. package/dist/__tests__/cli-help.test.js +47 -0
  21. package/dist/__tests__/cli-help.test.js.map +1 -0
  22. package/dist/__tests__/computer-readiness.test.d.ts +2 -0
  23. package/dist/__tests__/computer-readiness.test.d.ts.map +1 -0
  24. package/dist/__tests__/computer-readiness.test.js +63 -0
  25. package/dist/__tests__/computer-readiness.test.js.map +1 -0
  26. package/dist/__tests__/core-agent-provider-auth-env.test.d.ts +2 -0
  27. package/dist/__tests__/core-agent-provider-auth-env.test.d.ts.map +1 -0
  28. package/dist/__tests__/core-agent-provider-auth-env.test.js +93 -0
  29. package/dist/__tests__/core-agent-provider-auth-env.test.js.map +1 -0
  30. package/dist/__tests__/core-agent-workflow-context.test.d.ts +2 -0
  31. package/dist/__tests__/core-agent-workflow-context.test.d.ts.map +1 -0
  32. package/dist/__tests__/core-agent-workflow-context.test.js +139 -0
  33. package/dist/__tests__/core-agent-workflow-context.test.js.map +1 -0
  34. package/dist/__tests__/daemon-native-hooks.test.d.ts +2 -0
  35. package/dist/__tests__/daemon-native-hooks.test.d.ts.map +1 -0
  36. package/dist/__tests__/daemon-native-hooks.test.js +94 -0
  37. package/dist/__tests__/daemon-native-hooks.test.js.map +1 -0
  38. package/dist/__tests__/daemon-reconcile-ask.test.d.ts +2 -0
  39. package/dist/__tests__/daemon-reconcile-ask.test.d.ts.map +1 -0
  40. package/dist/__tests__/daemon-reconcile-ask.test.js +100 -0
  41. package/dist/__tests__/daemon-reconcile-ask.test.js.map +1 -0
  42. package/dist/__tests__/daemon-runner-status.test.d.ts +2 -0
  43. package/dist/__tests__/daemon-runner-status.test.d.ts.map +1 -0
  44. package/dist/__tests__/daemon-runner-status.test.js +102 -0
  45. package/dist/__tests__/daemon-runner-status.test.js.map +1 -0
  46. package/dist/__tests__/daemon-socket.integration.test.d.ts +2 -0
  47. package/dist/__tests__/daemon-socket.integration.test.d.ts.map +1 -0
  48. package/dist/__tests__/daemon-socket.integration.test.js +435 -0
  49. package/dist/__tests__/daemon-socket.integration.test.js.map +1 -0
  50. package/dist/__tests__/daemon.test.d.ts +2 -0
  51. package/dist/__tests__/daemon.test.d.ts.map +1 -0
  52. package/dist/__tests__/daemon.test.js +4884 -0
  53. package/dist/__tests__/daemon.test.js.map +1 -0
  54. package/dist/__tests__/ensure-shared-checkout-branch.test.d.ts +2 -0
  55. package/dist/__tests__/ensure-shared-checkout-branch.test.d.ts.map +1 -0
  56. package/dist/__tests__/ensure-shared-checkout-branch.test.js +129 -0
  57. package/dist/__tests__/ensure-shared-checkout-branch.test.js.map +1 -0
  58. package/dist/__tests__/event-journal-stress.test.d.ts +2 -0
  59. package/dist/__tests__/event-journal-stress.test.d.ts.map +1 -0
  60. package/dist/__tests__/event-journal-stress.test.js +124 -0
  61. package/dist/__tests__/event-journal-stress.test.js.map +1 -0
  62. package/dist/__tests__/event-journal.test.d.ts +2 -0
  63. package/dist/__tests__/event-journal.test.d.ts.map +1 -0
  64. package/dist/__tests__/event-journal.test.js +264 -0
  65. package/dist/__tests__/event-journal.test.js.map +1 -0
  66. package/dist/__tests__/event-outbox-persist-failure.test.d.ts +2 -0
  67. package/dist/__tests__/event-outbox-persist-failure.test.d.ts.map +1 -0
  68. package/dist/__tests__/event-outbox-persist-failure.test.js +143 -0
  69. package/dist/__tests__/event-outbox-persist-failure.test.js.map +1 -0
  70. package/dist/__tests__/event-outbox.test.d.ts +2 -0
  71. package/dist/__tests__/event-outbox.test.d.ts.map +1 -0
  72. package/dist/__tests__/event-outbox.test.js +602 -0
  73. package/dist/__tests__/event-outbox.test.js.map +1 -0
  74. package/dist/__tests__/execution-activity-tracker.test.d.ts +2 -0
  75. package/dist/__tests__/execution-activity-tracker.test.d.ts.map +1 -0
  76. package/dist/__tests__/execution-activity-tracker.test.js +64 -0
  77. package/dist/__tests__/execution-activity-tracker.test.js.map +1 -0
  78. package/dist/__tests__/execution-lease-client.test.d.ts +2 -0
  79. package/dist/__tests__/execution-lease-client.test.d.ts.map +1 -0
  80. package/dist/__tests__/execution-lease-client.test.js +274 -0
  81. package/dist/__tests__/execution-lease-client.test.js.map +1 -0
  82. package/dist/__tests__/fake-provider-cli.test.d.ts +2 -0
  83. package/dist/__tests__/fake-provider-cli.test.d.ts.map +1 -0
  84. package/dist/__tests__/fake-provider-cli.test.js +46 -0
  85. package/dist/__tests__/fake-provider-cli.test.js.map +1 -0
  86. package/dist/__tests__/generated-images.test.d.ts +2 -0
  87. package/dist/__tests__/generated-images.test.d.ts.map +1 -0
  88. package/dist/__tests__/generated-images.test.js +132 -0
  89. package/dist/__tests__/generated-images.test.js.map +1 -0
  90. package/dist/__tests__/helpers/sandbox-outbox.d.ts +3 -0
  91. package/dist/__tests__/helpers/sandbox-outbox.d.ts.map +1 -0
  92. package/dist/__tests__/helpers/sandbox-outbox.js +23 -0
  93. package/dist/__tests__/helpers/sandbox-outbox.js.map +1 -0
  94. package/dist/__tests__/install-command.test.d.ts +2 -0
  95. package/dist/__tests__/install-command.test.d.ts.map +1 -0
  96. package/dist/__tests__/install-command.test.js +185 -0
  97. package/dist/__tests__/install-command.test.js.map +1 -0
  98. package/dist/__tests__/integration-cli.test.d.ts +2 -0
  99. package/dist/__tests__/integration-cli.test.d.ts.map +1 -0
  100. package/dist/__tests__/integration-cli.test.js +150 -0
  101. package/dist/__tests__/integration-cli.test.js.map +1 -0
  102. package/dist/__tests__/lifecycle-contracts.test.d.ts +2 -0
  103. package/dist/__tests__/lifecycle-contracts.test.d.ts.map +1 -0
  104. package/dist/__tests__/lifecycle-contracts.test.js +66 -0
  105. package/dist/__tests__/lifecycle-contracts.test.js.map +1 -0
  106. package/dist/__tests__/lifecycle-logger.test.d.ts +2 -0
  107. package/dist/__tests__/lifecycle-logger.test.d.ts.map +1 -0
  108. package/dist/__tests__/lifecycle-logger.test.js +49 -0
  109. package/dist/__tests__/lifecycle-logger.test.js.map +1 -0
  110. package/dist/__tests__/local-daemon-lifecycle.test.d.ts +2 -0
  111. package/dist/__tests__/local-daemon-lifecycle.test.d.ts.map +1 -0
  112. package/dist/__tests__/local-daemon-lifecycle.test.js +594 -0
  113. package/dist/__tests__/local-daemon-lifecycle.test.js.map +1 -0
  114. package/dist/__tests__/local-git-status.test.d.ts +2 -0
  115. package/dist/__tests__/local-git-status.test.d.ts.map +1 -0
  116. package/dist/__tests__/local-git-status.test.js +31 -0
  117. package/dist/__tests__/local-git-status.test.js.map +1 -0
  118. package/dist/__tests__/mcp-config-adapters-files.test.d.ts +2 -0
  119. package/dist/__tests__/mcp-config-adapters-files.test.d.ts.map +1 -0
  120. package/dist/__tests__/mcp-config-adapters-files.test.js +486 -0
  121. package/dist/__tests__/mcp-config-adapters-files.test.js.map +1 -0
  122. package/dist/__tests__/mcp-config-adapters.test.d.ts +2 -0
  123. package/dist/__tests__/mcp-config-adapters.test.d.ts.map +1 -0
  124. package/dist/__tests__/mcp-config-adapters.test.js +492 -0
  125. package/dist/__tests__/mcp-config-adapters.test.js.map +1 -0
  126. package/dist/__tests__/mcp-sync.test.d.ts +2 -0
  127. package/dist/__tests__/mcp-sync.test.d.ts.map +1 -0
  128. package/dist/__tests__/mcp-sync.test.js +21 -0
  129. package/dist/__tests__/mcp-sync.test.js.map +1 -0
  130. package/dist/__tests__/model-scan-runner.test.d.ts +2 -0
  131. package/dist/__tests__/model-scan-runner.test.d.ts.map +1 -0
  132. package/dist/__tests__/model-scan-runner.test.js +80 -0
  133. package/dist/__tests__/model-scan-runner.test.js.map +1 -0
  134. package/dist/__tests__/native-hook-command.test.d.ts +2 -0
  135. package/dist/__tests__/native-hook-command.test.d.ts.map +1 -0
  136. package/dist/__tests__/native-hook-command.test.js +386 -0
  137. package/dist/__tests__/native-hook-command.test.js.map +1 -0
  138. package/dist/__tests__/native-hook-config.test.d.ts +2 -0
  139. package/dist/__tests__/native-hook-config.test.d.ts.map +1 -0
  140. package/dist/__tests__/native-hook-config.test.js +374 -0
  141. package/dist/__tests__/native-hook-config.test.js.map +1 -0
  142. package/dist/__tests__/native-hook-drain.test.d.ts +2 -0
  143. package/dist/__tests__/native-hook-drain.test.d.ts.map +1 -0
  144. package/dist/__tests__/native-hook-drain.test.js +197 -0
  145. package/dist/__tests__/native-hook-drain.test.js.map +1 -0
  146. package/dist/__tests__/native-hook-inbox.test.d.ts +2 -0
  147. package/dist/__tests__/native-hook-inbox.test.d.ts.map +1 -0
  148. package/dist/__tests__/native-hook-inbox.test.js +139 -0
  149. package/dist/__tests__/native-hook-inbox.test.js.map +1 -0
  150. package/dist/__tests__/native-session.test.d.ts +2 -0
  151. package/dist/__tests__/native-session.test.d.ts.map +1 -0
  152. package/dist/__tests__/native-session.test.js +41 -0
  153. package/dist/__tests__/native-session.test.js.map +1 -0
  154. package/dist/__tests__/native-stream-outbox.test.d.ts +2 -0
  155. package/dist/__tests__/native-stream-outbox.test.d.ts.map +1 -0
  156. package/dist/__tests__/native-stream-outbox.test.js +231 -0
  157. package/dist/__tests__/native-stream-outbox.test.js.map +1 -0
  158. package/dist/__tests__/native-stream-platform.test.d.ts +2 -0
  159. package/dist/__tests__/native-stream-platform.test.d.ts.map +1 -0
  160. package/dist/__tests__/native-stream-platform.test.js +20 -0
  161. package/dist/__tests__/native-stream-platform.test.js.map +1 -0
  162. package/dist/__tests__/native-transcript-cursor.test.d.ts +2 -0
  163. package/dist/__tests__/native-transcript-cursor.test.d.ts.map +1 -0
  164. package/dist/__tests__/native-transcript-cursor.test.js +60 -0
  165. package/dist/__tests__/native-transcript-cursor.test.js.map +1 -0
  166. package/dist/__tests__/native-transcript-stream.test.d.ts +2 -0
  167. package/dist/__tests__/native-transcript-stream.test.d.ts.map +1 -0
  168. package/dist/__tests__/native-transcript-stream.test.js +378 -0
  169. package/dist/__tests__/native-transcript-stream.test.js.map +1 -0
  170. package/dist/__tests__/network-diagnostics.test.d.ts +2 -0
  171. package/dist/__tests__/network-diagnostics.test.d.ts.map +1 -0
  172. package/dist/__tests__/network-diagnostics.test.js +26 -0
  173. package/dist/__tests__/network-diagnostics.test.js.map +1 -0
  174. package/dist/__tests__/observable-map.test.d.ts +2 -0
  175. package/dist/__tests__/observable-map.test.d.ts.map +1 -0
  176. package/dist/__tests__/observable-map.test.js +54 -0
  177. package/dist/__tests__/observable-map.test.js.map +1 -0
  178. package/dist/__tests__/outbox-baseline.bench.test.d.ts +2 -0
  179. package/dist/__tests__/outbox-baseline.bench.test.d.ts.map +1 -0
  180. package/dist/__tests__/outbox-baseline.bench.test.js +108 -0
  181. package/dist/__tests__/outbox-baseline.bench.test.js.map +1 -0
  182. package/dist/__tests__/provider-auth-preflight.test.d.ts +2 -0
  183. package/dist/__tests__/provider-auth-preflight.test.d.ts.map +1 -0
  184. package/dist/__tests__/provider-auth-preflight.test.js +123 -0
  185. package/dist/__tests__/provider-auth-preflight.test.js.map +1 -0
  186. package/dist/__tests__/provider-model-discovery.test.d.ts +2 -0
  187. package/dist/__tests__/provider-model-discovery.test.d.ts.map +1 -0
  188. package/dist/__tests__/provider-model-discovery.test.js +1071 -0
  189. package/dist/__tests__/provider-model-discovery.test.js.map +1 -0
  190. package/dist/__tests__/resource-diagnostics.test.d.ts +2 -0
  191. package/dist/__tests__/resource-diagnostics.test.d.ts.map +1 -0
  192. package/dist/__tests__/resource-diagnostics.test.js +138 -0
  193. package/dist/__tests__/resource-diagnostics.test.js.map +1 -0
  194. package/dist/__tests__/resume-fallback-env.test.d.ts +2 -0
  195. package/dist/__tests__/resume-fallback-env.test.d.ts.map +1 -0
  196. package/dist/__tests__/resume-fallback-env.test.js +28 -0
  197. package/dist/__tests__/resume-fallback-env.test.js.map +1 -0
  198. package/dist/__tests__/run-journal.test.d.ts +2 -0
  199. package/dist/__tests__/run-journal.test.d.ts.map +1 -0
  200. package/dist/__tests__/run-journal.test.js +121 -0
  201. package/dist/__tests__/run-journal.test.js.map +1 -0
  202. package/dist/__tests__/run-start-gate.test.d.ts +2 -0
  203. package/dist/__tests__/run-start-gate.test.d.ts.map +1 -0
  204. package/dist/__tests__/run-start-gate.test.js +18 -0
  205. package/dist/__tests__/run-start-gate.test.js.map +1 -0
  206. package/dist/__tests__/runtime-capabilities-sync.test.d.ts +2 -0
  207. package/dist/__tests__/runtime-capabilities-sync.test.d.ts.map +1 -0
  208. package/dist/__tests__/runtime-capabilities-sync.test.js +66 -0
  209. package/dist/__tests__/runtime-capabilities-sync.test.js.map +1 -0
  210. package/dist/__tests__/runtime-config.test.d.ts +2 -0
  211. package/dist/__tests__/runtime-config.test.d.ts.map +1 -0
  212. package/dist/__tests__/runtime-config.test.js +137 -0
  213. package/dist/__tests__/runtime-config.test.js.map +1 -0
  214. package/dist/__tests__/runtime-presenter-heartbeat.test.d.ts +2 -0
  215. package/dist/__tests__/runtime-presenter-heartbeat.test.d.ts.map +1 -0
  216. package/dist/__tests__/runtime-presenter-heartbeat.test.js +253 -0
  217. package/dist/__tests__/runtime-presenter-heartbeat.test.js.map +1 -0
  218. package/dist/__tests__/runtime-registration.test.d.ts +2 -0
  219. package/dist/__tests__/runtime-registration.test.d.ts.map +1 -0
  220. package/dist/__tests__/runtime-registration.test.js +109 -0
  221. package/dist/__tests__/runtime-registration.test.js.map +1 -0
  222. package/dist/__tests__/sandbox-outbox-storage.test.d.ts +2 -0
  223. package/dist/__tests__/sandbox-outbox-storage.test.d.ts.map +1 -0
  224. package/dist/__tests__/sandbox-outbox-storage.test.js +81 -0
  225. package/dist/__tests__/sandbox-outbox-storage.test.js.map +1 -0
  226. package/dist/__tests__/sandbox-outbox.test.d.ts +2 -0
  227. package/dist/__tests__/sandbox-outbox.test.d.ts.map +1 -0
  228. package/dist/__tests__/sandbox-outbox.test.js +300 -0
  229. package/dist/__tests__/sandbox-outbox.test.js.map +1 -0
  230. package/dist/__tests__/sandbox-workflow-context.test.d.ts +2 -0
  231. package/dist/__tests__/sandbox-workflow-context.test.d.ts.map +1 -0
  232. package/dist/__tests__/sandbox-workflow-context.test.js +600 -0
  233. package/dist/__tests__/sandbox-workflow-context.test.js.map +1 -0
  234. package/dist/__tests__/service-manager-deadline.test.d.ts +2 -0
  235. package/dist/__tests__/service-manager-deadline.test.d.ts.map +1 -0
  236. package/dist/__tests__/service-manager-deadline.test.js +36 -0
  237. package/dist/__tests__/service-manager-deadline.test.js.map +1 -0
  238. package/dist/__tests__/service-manager.test.d.ts +2 -0
  239. package/dist/__tests__/service-manager.test.d.ts.map +1 -0
  240. package/dist/__tests__/service-manager.test.js +769 -0
  241. package/dist/__tests__/service-manager.test.js.map +1 -0
  242. package/dist/__tests__/service-stop-ownership.test.d.ts +2 -0
  243. package/dist/__tests__/service-stop-ownership.test.d.ts.map +1 -0
  244. package/dist/__tests__/service-stop-ownership.test.js +89 -0
  245. package/dist/__tests__/service-stop-ownership.test.js.map +1 -0
  246. package/dist/__tests__/skill-invocation.test.d.ts +2 -0
  247. package/dist/__tests__/skill-invocation.test.d.ts.map +1 -0
  248. package/dist/__tests__/skill-invocation.test.js +40 -0
  249. package/dist/__tests__/skill-invocation.test.js.map +1 -0
  250. package/dist/__tests__/sleep-inhibitor-real.test.d.ts +2 -0
  251. package/dist/__tests__/sleep-inhibitor-real.test.d.ts.map +1 -0
  252. package/dist/__tests__/sleep-inhibitor-real.test.js +68 -0
  253. package/dist/__tests__/sleep-inhibitor-real.test.js.map +1 -0
  254. package/dist/__tests__/sleep-inhibitor.test.d.ts +2 -0
  255. package/dist/__tests__/sleep-inhibitor.test.d.ts.map +1 -0
  256. package/dist/__tests__/sleep-inhibitor.test.js +236 -0
  257. package/dist/__tests__/sleep-inhibitor.test.js.map +1 -0
  258. package/dist/__tests__/status-local-workspace.test.d.ts +2 -0
  259. package/dist/__tests__/status-local-workspace.test.d.ts.map +1 -0
  260. package/dist/__tests__/status-local-workspace.test.js +121 -0
  261. package/dist/__tests__/status-local-workspace.test.js.map +1 -0
  262. package/dist/__tests__/suspension-detector.test.d.ts +2 -0
  263. package/dist/__tests__/suspension-detector.test.d.ts.map +1 -0
  264. package/dist/__tests__/suspension-detector.test.js +112 -0
  265. package/dist/__tests__/suspension-detector.test.js.map +1 -0
  266. package/dist/__tests__/web-presenter-parent-events.test.d.ts +2 -0
  267. package/dist/__tests__/web-presenter-parent-events.test.d.ts.map +1 -0
  268. package/dist/__tests__/web-presenter-parent-events.test.js +168 -0
  269. package/dist/__tests__/web-presenter-parent-events.test.js.map +1 -0
  270. package/dist/__tests__/workspace-probe-concurrency.test.d.ts +2 -0
  271. package/dist/__tests__/workspace-probe-concurrency.test.d.ts.map +1 -0
  272. package/dist/__tests__/workspace-probe-concurrency.test.js +54 -0
  273. package/dist/__tests__/workspace-probe-concurrency.test.js.map +1 -0
  274. package/dist/__tests__/workspace-relocation.test.d.ts +2 -0
  275. package/dist/__tests__/workspace-relocation.test.d.ts.map +1 -0
  276. package/dist/__tests__/workspace-relocation.test.js +66 -0
  277. package/dist/__tests__/workspace-relocation.test.js.map +1 -0
  278. package/dist/__tests__/workspace-rpc.test.d.ts +2 -0
  279. package/dist/__tests__/workspace-rpc.test.d.ts.map +1 -0
  280. package/dist/__tests__/workspace-rpc.test.js +90 -0
  281. package/dist/__tests__/workspace-rpc.test.js.map +1 -0
  282. package/dist/__tests__/workspace-run-lease.test.d.ts +2 -0
  283. package/dist/__tests__/workspace-run-lease.test.d.ts.map +1 -0
  284. package/dist/__tests__/workspace-run-lease.test.js +331 -0
  285. package/dist/__tests__/workspace-run-lease.test.js.map +1 -0
  286. package/dist/__tests__/ws-client-connection.test.d.ts +2 -0
  287. package/dist/__tests__/ws-client-connection.test.d.ts.map +1 -0
  288. package/dist/__tests__/ws-client-connection.test.js +295 -0
  289. package/dist/__tests__/ws-client-connection.test.js.map +1 -0
  290. package/dist/__tests__/ws-client-heartbeat-volatile.test.d.ts +2 -0
  291. package/dist/__tests__/ws-client-heartbeat-volatile.test.d.ts.map +1 -0
  292. package/dist/__tests__/ws-client-heartbeat-volatile.test.js +63 -0
  293. package/dist/__tests__/ws-client-heartbeat-volatile.test.js.map +1 -0
  294. package/dist/__tests__/ws-client-heartbeat.integration.test.d.ts +2 -0
  295. package/dist/__tests__/ws-client-heartbeat.integration.test.d.ts.map +1 -0
  296. package/dist/__tests__/ws-client-heartbeat.integration.test.js +236 -0
  297. package/dist/__tests__/ws-client-heartbeat.integration.test.js.map +1 -0
  298. package/dist/__tests__/ws-client-user-message-ack.integration.test.d.ts +2 -0
  299. package/dist/__tests__/ws-client-user-message-ack.integration.test.d.ts.map +1 -0
  300. package/dist/__tests__/ws-client-user-message-ack.integration.test.js +211 -0
  301. package/dist/__tests__/ws-client-user-message-ack.integration.test.js.map +1 -0
  302. package/dist/antigravity-api-key-config.d.ts +2 -0
  303. package/dist/antigravity-api-key-config.d.ts.map +1 -0
  304. package/dist/antigravity-api-key-config.js +79 -0
  305. package/dist/antigravity-api-key-config.js.map +1 -0
  306. package/dist/binding-switch-git.d.ts +26 -0
  307. package/dist/binding-switch-git.d.ts.map +1 -0
  308. package/dist/binding-switch-git.js +871 -0
  309. package/dist/binding-switch-git.js.map +1 -0
  310. package/dist/cli-ensure-install.d.ts +34 -0
  311. package/dist/cli-ensure-install.d.ts.map +1 -0
  312. package/dist/cli-ensure-install.js +154 -0
  313. package/dist/cli-ensure-install.js.map +1 -0
  314. package/dist/cli-executable.d.ts +44 -0
  315. package/dist/cli-executable.d.ts.map +1 -0
  316. package/dist/cli-executable.js +435 -0
  317. package/dist/cli-executable.js.map +1 -0
  318. package/dist/cli-help.d.ts +11 -0
  319. package/dist/cli-help.d.ts.map +1 -0
  320. package/dist/cli-help.js +65 -0
  321. package/dist/cli-help.js.map +1 -0
  322. package/dist/computer-readiness.d.ts +41 -0
  323. package/dist/computer-readiness.d.ts.map +1 -0
  324. package/dist/computer-readiness.js +191 -0
  325. package/dist/computer-readiness.js.map +1 -0
  326. package/dist/core-agent.d.ts +32 -0
  327. package/dist/core-agent.d.ts.map +1 -0
  328. package/dist/core-agent.js +331 -0
  329. package/dist/core-agent.js.map +1 -0
  330. package/dist/daemon-execute.d.ts +42 -0
  331. package/dist/daemon-execute.d.ts.map +1 -0
  332. package/dist/daemon-execute.js +666 -0
  333. package/dist/daemon-execute.js.map +1 -0
  334. package/dist/daemon-helpers.d.ts +150 -0
  335. package/dist/daemon-helpers.d.ts.map +1 -0
  336. package/dist/daemon-helpers.js +157 -0
  337. package/dist/daemon-helpers.js.map +1 -0
  338. package/dist/daemon-local-control.d.ts +208 -0
  339. package/dist/daemon-local-control.d.ts.map +1 -0
  340. package/dist/daemon-local-control.js +826 -0
  341. package/dist/daemon-local-control.js.map +1 -0
  342. package/dist/daemon-local-http.d.ts +57 -0
  343. package/dist/daemon-local-http.d.ts.map +1 -0
  344. package/dist/daemon-local-http.js +375 -0
  345. package/dist/daemon-local-http.js.map +1 -0
  346. package/dist/daemon-native-hooks.d.ts +17 -0
  347. package/dist/daemon-native-hooks.d.ts.map +1 -0
  348. package/dist/daemon-native-hooks.js +54 -0
  349. package/dist/daemon-native-hooks.js.map +1 -0
  350. package/dist/daemon-provider-scan.d.ts +33 -0
  351. package/dist/daemon-provider-scan.d.ts.map +1 -0
  352. package/dist/daemon-provider-scan.js +187 -0
  353. package/dist/daemon-provider-scan.js.map +1 -0
  354. package/dist/daemon-runner-status.d.ts +164 -0
  355. package/dist/daemon-runner-status.d.ts.map +1 -0
  356. package/dist/daemon-runner-status.js +424 -0
  357. package/dist/daemon-runner-status.js.map +1 -0
  358. package/dist/daemon-start.d.ts +5 -0
  359. package/dist/daemon-start.d.ts.map +1 -0
  360. package/dist/daemon-start.js +1313 -0
  361. package/dist/daemon-start.js.map +1 -0
  362. package/dist/daemon-workspace.d.ts +36 -0
  363. package/dist/daemon-workspace.d.ts.map +1 -0
  364. package/dist/daemon-workspace.js +154 -0
  365. package/dist/daemon-workspace.js.map +1 -0
  366. package/dist/daemon.d.ts +59 -0
  367. package/dist/daemon.d.ts.map +1 -0
  368. package/dist/daemon.js +681 -0
  369. package/dist/daemon.js.map +1 -0
  370. package/dist/event-journal-crypto.d.ts +14 -0
  371. package/dist/event-journal-crypto.d.ts.map +1 -0
  372. package/dist/event-journal-crypto.js +89 -0
  373. package/dist/event-journal-crypto.js.map +1 -0
  374. package/dist/event-journal-paths.d.ts +10 -0
  375. package/dist/event-journal-paths.d.ts.map +1 -0
  376. package/dist/event-journal-paths.js +29 -0
  377. package/dist/event-journal-paths.js.map +1 -0
  378. package/dist/event-journal-recovery.d.ts +83 -0
  379. package/dist/event-journal-recovery.d.ts.map +1 -0
  380. package/dist/event-journal-recovery.js +333 -0
  381. package/dist/event-journal-recovery.js.map +1 -0
  382. package/dist/event-journal-types.d.ts +54 -0
  383. package/dist/event-journal-types.d.ts.map +1 -0
  384. package/dist/event-journal-types.js +10 -0
  385. package/dist/event-journal-types.js.map +1 -0
  386. package/dist/event-journal-writer.d.ts +44 -0
  387. package/dist/event-journal-writer.d.ts.map +1 -0
  388. package/dist/event-journal-writer.js +182 -0
  389. package/dist/event-journal-writer.js.map +1 -0
  390. package/dist/event-outbox.d.ts +113 -0
  391. package/dist/event-outbox.d.ts.map +1 -0
  392. package/dist/event-outbox.js +707 -0
  393. package/dist/event-outbox.js.map +1 -0
  394. package/dist/execution-activity-tracker.d.ts +43 -0
  395. package/dist/execution-activity-tracker.d.ts.map +1 -0
  396. package/dist/execution-activity-tracker.js +116 -0
  397. package/dist/execution-activity-tracker.js.map +1 -0
  398. package/dist/execution-lease-client.d.ts +62 -0
  399. package/dist/execution-lease-client.d.ts.map +1 -0
  400. package/dist/execution-lease-client.js +271 -0
  401. package/dist/execution-lease-client.js.map +1 -0
  402. package/dist/fake-provider-cli.d.ts +13 -0
  403. package/dist/fake-provider-cli.d.ts.map +1 -0
  404. package/dist/fake-provider-cli.js +53 -0
  405. package/dist/fake-provider-cli.js.map +1 -0
  406. package/dist/generated-images.d.ts +2 -0
  407. package/dist/generated-images.d.ts.map +1 -0
  408. package/dist/generated-images.js +2 -0
  409. package/dist/generated-images.js.map +1 -0
  410. package/dist/index.cjs +47033 -45514
  411. package/dist/index.d.ts +2 -0
  412. package/dist/index.d.ts.map +1 -0
  413. package/dist/index.js +224 -0
  414. package/dist/index.js.map +1 -0
  415. package/dist/install-command.d.ts +2 -0
  416. package/dist/install-command.d.ts.map +1 -0
  417. package/dist/install-command.js +96 -0
  418. package/dist/install-command.js.map +1 -0
  419. package/dist/integration-cli.d.ts +14 -0
  420. package/dist/integration-cli.d.ts.map +1 -0
  421. package/dist/integration-cli.js +80 -0
  422. package/dist/integration-cli.js.map +1 -0
  423. package/dist/lifecycle-logger.d.ts +25 -0
  424. package/dist/lifecycle-logger.d.ts.map +1 -0
  425. package/dist/lifecycle-logger.js +73 -0
  426. package/dist/lifecycle-logger.js.map +1 -0
  427. package/dist/local-daemon-lifecycle.d.ts +112 -0
  428. package/dist/local-daemon-lifecycle.d.ts.map +1 -0
  429. package/dist/local-daemon-lifecycle.js +433 -0
  430. package/dist/local-daemon-lifecycle.js.map +1 -0
  431. package/dist/local-git-status.d.ts +14 -0
  432. package/dist/local-git-status.d.ts.map +1 -0
  433. package/dist/local-git-status.js +43 -0
  434. package/dist/local-git-status.js.map +1 -0
  435. package/dist/managed-mcp.d.ts +7 -0
  436. package/dist/managed-mcp.d.ts.map +1 -0
  437. package/dist/managed-mcp.js +16 -0
  438. package/dist/managed-mcp.js.map +1 -0
  439. package/dist/mcp-config-adapters.d.ts +57 -0
  440. package/dist/mcp-config-adapters.d.ts.map +1 -0
  441. package/dist/mcp-config-adapters.js +929 -0
  442. package/dist/mcp-config-adapters.js.map +1 -0
  443. package/dist/mcp-sync.d.ts +44 -0
  444. package/dist/mcp-sync.d.ts.map +1 -0
  445. package/dist/mcp-sync.js +68 -0
  446. package/dist/mcp-sync.js.map +1 -0
  447. package/dist/model-scan-runner.d.ts +15 -0
  448. package/dist/model-scan-runner.d.ts.map +1 -0
  449. package/dist/model-scan-runner.js +56 -0
  450. package/dist/model-scan-runner.js.map +1 -0
  451. package/dist/native-hook-command.d.ts +31 -0
  452. package/dist/native-hook-command.d.ts.map +1 -0
  453. package/dist/native-hook-command.js +289 -0
  454. package/dist/native-hook-command.js.map +1 -0
  455. package/dist/native-hook-config.d.ts +43 -0
  456. package/dist/native-hook-config.d.ts.map +1 -0
  457. package/dist/native-hook-config.js +601 -0
  458. package/dist/native-hook-config.js.map +1 -0
  459. package/dist/native-hook-drain.d.ts +34 -0
  460. package/dist/native-hook-drain.d.ts.map +1 -0
  461. package/dist/native-hook-drain.js +83 -0
  462. package/dist/native-hook-drain.js.map +1 -0
  463. package/dist/native-hook-inbox.d.ts +40 -0
  464. package/dist/native-hook-inbox.d.ts.map +1 -0
  465. package/dist/native-hook-inbox.js +217 -0
  466. package/dist/native-hook-inbox.js.map +1 -0
  467. package/dist/native-project-config.d.ts +11 -0
  468. package/dist/native-project-config.d.ts.map +1 -0
  469. package/dist/native-project-config.js +49 -0
  470. package/dist/native-project-config.js.map +1 -0
  471. package/dist/native-session.d.ts +20 -0
  472. package/dist/native-session.d.ts.map +1 -0
  473. package/dist/native-session.js +213 -0
  474. package/dist/native-session.js.map +1 -0
  475. package/dist/native-stream-journal.d.ts +22 -0
  476. package/dist/native-stream-journal.d.ts.map +1 -0
  477. package/dist/native-stream-journal.js +98 -0
  478. package/dist/native-stream-journal.js.map +1 -0
  479. package/dist/native-stream-outbox.d.ts +40 -0
  480. package/dist/native-stream-outbox.d.ts.map +1 -0
  481. package/dist/native-stream-outbox.js +358 -0
  482. package/dist/native-stream-outbox.js.map +1 -0
  483. package/dist/native-stream-platform.d.ts +4 -0
  484. package/dist/native-stream-platform.d.ts.map +1 -0
  485. package/dist/native-stream-platform.js +11 -0
  486. package/dist/native-stream-platform.js.map +1 -0
  487. package/dist/native-transcript-cursor.d.ts +33 -0
  488. package/dist/native-transcript-cursor.d.ts.map +1 -0
  489. package/dist/native-transcript-cursor.js +108 -0
  490. package/dist/native-transcript-cursor.js.map +1 -0
  491. package/dist/native-transcript-stream.d.ts +20 -0
  492. package/dist/native-transcript-stream.d.ts.map +1 -0
  493. package/dist/native-transcript-stream.js +438 -0
  494. package/dist/native-transcript-stream.js.map +1 -0
  495. package/dist/network-diagnostics.d.ts +8 -0
  496. package/dist/network-diagnostics.d.ts.map +1 -0
  497. package/dist/network-diagnostics.js +56 -0
  498. package/dist/network-diagnostics.js.map +1 -0
  499. package/dist/observable-map.d.ts +13 -0
  500. package/dist/observable-map.d.ts.map +1 -0
  501. package/dist/observable-map.js +30 -0
  502. package/dist/observable-map.js.map +1 -0
  503. package/dist/provider-auth-preflight.d.ts +19 -0
  504. package/dist/provider-auth-preflight.d.ts.map +1 -0
  505. package/dist/provider-auth-preflight.js +107 -0
  506. package/dist/provider-auth-preflight.js.map +1 -0
  507. package/dist/provider-model-discovery.d.ts +33 -0
  508. package/dist/provider-model-discovery.d.ts.map +1 -0
  509. package/dist/provider-model-discovery.js +731 -0
  510. package/dist/provider-model-discovery.js.map +1 -0
  511. package/dist/resource-diagnostics.d.ts +21 -0
  512. package/dist/resource-diagnostics.d.ts.map +1 -0
  513. package/dist/resource-diagnostics.js +161 -0
  514. package/dist/resource-diagnostics.js.map +1 -0
  515. package/dist/resume-fallback-env.d.ts +3 -0
  516. package/dist/resume-fallback-env.d.ts.map +1 -0
  517. package/dist/resume-fallback-env.js +14 -0
  518. package/dist/resume-fallback-env.js.map +1 -0
  519. package/dist/run-journal.d.ts +51 -0
  520. package/dist/run-journal.d.ts.map +1 -0
  521. package/dist/run-journal.js +193 -0
  522. package/dist/run-journal.js.map +1 -0
  523. package/dist/runtime-backends.d.ts +2 -0
  524. package/dist/runtime-backends.d.ts.map +1 -0
  525. package/dist/runtime-backends.js +2 -0
  526. package/dist/runtime-backends.js.map +1 -0
  527. package/dist/runtime-capabilities-sync.d.ts +40 -0
  528. package/dist/runtime-capabilities-sync.d.ts.map +1 -0
  529. package/dist/runtime-capabilities-sync.js +56 -0
  530. package/dist/runtime-capabilities-sync.js.map +1 -0
  531. package/dist/runtime-config.d.ts +26 -0
  532. package/dist/runtime-config.d.ts.map +1 -0
  533. package/dist/runtime-config.js +170 -0
  534. package/dist/runtime-config.js.map +1 -0
  535. package/dist/runtime-presenter.d.ts +81 -0
  536. package/dist/runtime-presenter.d.ts.map +1 -0
  537. package/dist/runtime-presenter.js +422 -0
  538. package/dist/runtime-presenter.js.map +1 -0
  539. package/dist/runtime-registration.d.ts +40 -0
  540. package/dist/runtime-registration.d.ts.map +1 -0
  541. package/dist/runtime-registration.js +143 -0
  542. package/dist/runtime-registration.js.map +1 -0
  543. package/dist/sandbox-outbox-storage.d.ts +13 -0
  544. package/dist/sandbox-outbox-storage.d.ts.map +1 -0
  545. package/dist/sandbox-outbox-storage.js +98 -0
  546. package/dist/sandbox-outbox-storage.js.map +1 -0
  547. package/dist/sandbox-outbox.d.ts +115 -0
  548. package/dist/sandbox-outbox.d.ts.map +1 -0
  549. package/dist/sandbox-outbox.js +213 -0
  550. package/dist/sandbox-outbox.js.map +1 -0
  551. package/dist/sandbox.d.ts +34 -0
  552. package/dist/sandbox.d.ts.map +1 -0
  553. package/dist/sandbox.js +469 -0
  554. package/dist/sandbox.js.map +1 -0
  555. package/dist/service-manager.d.ts +113 -0
  556. package/dist/service-manager.d.ts.map +1 -0
  557. package/dist/service-manager.js +1065 -0
  558. package/dist/service-manager.js.map +1 -0
  559. package/dist/skills/__tests__/local-skill-source.test.d.ts +2 -0
  560. package/dist/skills/__tests__/local-skill-source.test.d.ts.map +1 -0
  561. package/dist/skills/__tests__/local-skill-source.test.js +373 -0
  562. package/dist/skills/__tests__/local-skill-source.test.js.map +1 -0
  563. package/dist/skills/__tests__/managed-skill-store.test.d.ts +2 -0
  564. package/dist/skills/__tests__/managed-skill-store.test.d.ts.map +1 -0
  565. package/dist/skills/__tests__/managed-skill-store.test.js +114 -0
  566. package/dist/skills/__tests__/managed-skill-store.test.js.map +1 -0
  567. package/dist/skills/__tests__/runtime-skill-coordinator.test.d.ts +2 -0
  568. package/dist/skills/__tests__/runtime-skill-coordinator.test.d.ts.map +1 -0
  569. package/dist/skills/__tests__/runtime-skill-coordinator.test.js +251 -0
  570. package/dist/skills/__tests__/runtime-skill-coordinator.test.js.map +1 -0
  571. package/dist/skills/__tests__/runtime-skill-manager.test.d.ts +2 -0
  572. package/dist/skills/__tests__/runtime-skill-manager.test.d.ts.map +1 -0
  573. package/dist/skills/__tests__/runtime-skill-manager.test.js +664 -0
  574. package/dist/skills/__tests__/runtime-skill-manager.test.js.map +1 -0
  575. package/dist/skills/__tests__/skill-bundle.test.d.ts +2 -0
  576. package/dist/skills/__tests__/skill-bundle.test.d.ts.map +1 -0
  577. package/dist/skills/__tests__/skill-bundle.test.js +42 -0
  578. package/dist/skills/__tests__/skill-bundle.test.js.map +1 -0
  579. package/dist/skills/__tests__/skill-control-client.test.d.ts +2 -0
  580. package/dist/skills/__tests__/skill-control-client.test.d.ts.map +1 -0
  581. package/dist/skills/__tests__/skill-control-client.test.js +49 -0
  582. package/dist/skills/__tests__/skill-control-client.test.js.map +1 -0
  583. package/dist/skills/__tests__/skill-source-config.test.d.ts +2 -0
  584. package/dist/skills/__tests__/skill-source-config.test.d.ts.map +1 -0
  585. package/dist/skills/__tests__/skill-source-config.test.js +295 -0
  586. package/dist/skills/__tests__/skill-source-config.test.js.map +1 -0
  587. package/dist/skills/local-skill-source.d.ts +77 -0
  588. package/dist/skills/local-skill-source.d.ts.map +1 -0
  589. package/dist/skills/local-skill-source.js +660 -0
  590. package/dist/skills/local-skill-source.js.map +1 -0
  591. package/dist/skills/managed-skill-store.d.ts +44 -0
  592. package/dist/skills/managed-skill-store.d.ts.map +1 -0
  593. package/dist/skills/managed-skill-store.js +160 -0
  594. package/dist/skills/managed-skill-store.js.map +1 -0
  595. package/dist/skills/runtime-skill-coordinator.d.ts +35 -0
  596. package/dist/skills/runtime-skill-coordinator.d.ts.map +1 -0
  597. package/dist/skills/runtime-skill-coordinator.js +166 -0
  598. package/dist/skills/runtime-skill-coordinator.js.map +1 -0
  599. package/dist/skills/runtime-skill-manager.d.ts +89 -0
  600. package/dist/skills/runtime-skill-manager.d.ts.map +1 -0
  601. package/dist/skills/runtime-skill-manager.js +934 -0
  602. package/dist/skills/runtime-skill-manager.js.map +1 -0
  603. package/dist/skills/skill-bundle.d.ts +2 -0
  604. package/dist/skills/skill-bundle.d.ts.map +1 -0
  605. package/dist/skills/skill-bundle.js +2 -0
  606. package/dist/skills/skill-bundle.js.map +1 -0
  607. package/dist/skills/skill-cli.d.ts +2 -0
  608. package/dist/skills/skill-cli.d.ts.map +1 -0
  609. package/dist/skills/skill-cli.js +81 -0
  610. package/dist/skills/skill-cli.js.map +1 -0
  611. package/dist/skills/skill-control-client.d.ts +20 -0
  612. package/dist/skills/skill-control-client.d.ts.map +1 -0
  613. package/dist/skills/skill-control-client.js +56 -0
  614. package/dist/skills/skill-control-client.js.map +1 -0
  615. package/dist/skills/skill-invocation.d.ts +10 -0
  616. package/dist/skills/skill-invocation.d.ts.map +1 -0
  617. package/dist/skills/skill-invocation.js +24 -0
  618. package/dist/skills/skill-invocation.js.map +1 -0
  619. package/dist/sleep-inhibitor.d.ts +32 -0
  620. package/dist/sleep-inhibitor.d.ts.map +1 -0
  621. package/dist/sleep-inhibitor.js +297 -0
  622. package/dist/sleep-inhibitor.js.map +1 -0
  623. package/dist/suspension-detector.d.ts +24 -0
  624. package/dist/suspension-detector.d.ts.map +1 -0
  625. package/dist/suspension-detector.js +59 -0
  626. package/dist/suspension-detector.js.map +1 -0
  627. package/dist/types.d.ts +2 -0
  628. package/dist/types.d.ts.map +1 -0
  629. package/dist/types.js +2 -0
  630. package/dist/types.js.map +1 -0
  631. package/dist/version.d.ts +2 -0
  632. package/dist/version.d.ts.map +1 -0
  633. package/dist/version.js +2 -0
  634. package/dist/version.js.map +1 -0
  635. package/dist/web-presenter.d.ts +52 -0
  636. package/dist/web-presenter.d.ts.map +1 -0
  637. package/dist/web-presenter.js +264 -0
  638. package/dist/web-presenter.js.map +1 -0
  639. package/dist/workspace-relocation.d.ts +22 -0
  640. package/dist/workspace-relocation.d.ts.map +1 -0
  641. package/dist/workspace-relocation.js +90 -0
  642. package/dist/workspace-relocation.js.map +1 -0
  643. package/dist/workspace-rpc.d.ts +2 -0
  644. package/dist/workspace-rpc.d.ts.map +1 -0
  645. package/dist/workspace-rpc.js +15 -0
  646. package/dist/workspace-rpc.js.map +1 -0
  647. package/dist/workspace-run-lease.d.ts +116 -0
  648. package/dist/workspace-run-lease.d.ts.map +1 -0
  649. package/dist/workspace-run-lease.js +320 -0
  650. package/dist/workspace-run-lease.js.map +1 -0
  651. package/dist/ws-client.d.ts +168 -0
  652. package/dist/ws-client.d.ts.map +1 -0
  653. package/dist/ws-client.js +440 -0
  654. package/dist/ws-client.js.map +1 -0
  655. package/package.json +4 -3
@@ -0,0 +1,929 @@
1
+ import { createHash, randomBytes } from "node:crypto";
2
+ import { copyFileSync, existsSync, mkdirSync, readFileSync, renameSync, rmSync, statSync, writeFileSync, } from "node:fs";
3
+ import { homedir } from "node:os";
4
+ import { dirname, join } from "node:path";
5
+ import { parse as parseToml, stringify as stringifyToml } from "smol-toml";
6
+ let log = {
7
+ info: (...args) => console.info("[mcp-config-adapters]", ...args),
8
+ warn: (...args) => console.warn("[mcp-config-adapters]", ...args),
9
+ debug: () => { },
10
+ };
11
+ export function setMcpAdaptersLogger(logger) {
12
+ log = logger;
13
+ }
14
+ let homeDirectoryOverride;
15
+ function homeDirectory() {
16
+ return homeDirectoryOverride ?? homedir();
17
+ }
18
+ class MalformedToolConfigError extends Error {
19
+ }
20
+ function parseJsonSafe(content) {
21
+ if (!content)
22
+ return {};
23
+ try {
24
+ const parsed = JSON.parse(content);
25
+ if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) {
26
+ return parsed;
27
+ }
28
+ }
29
+ catch {
30
+ // Throw one typed error below so the caller can preserve and back up the file.
31
+ }
32
+ throw new MalformedToolConfigError("Existing tool config is malformed");
33
+ }
34
+ function readFileOr(path) {
35
+ return existsSync(path) ? readFileSync(path, "utf-8") : null;
36
+ }
37
+ function acquireConfigLock(path) {
38
+ mkdirSync(dirname(path), { recursive: true });
39
+ const lockPath = `${path}.alan-lock`;
40
+ const startedAt = Date.now();
41
+ while (true) {
42
+ try {
43
+ mkdirSync(lockPath);
44
+ return () => rmSync(lockPath, { recursive: true, force: true });
45
+ }
46
+ catch (error) {
47
+ const code = error && typeof error === "object" && "code" in error ? error.code : undefined;
48
+ if (code !== "EEXIST")
49
+ throw error;
50
+ try {
51
+ if (Date.now() - statSync(lockPath).mtimeMs > 30_000) {
52
+ rmSync(lockPath, { recursive: true, force: true });
53
+ continue;
54
+ }
55
+ }
56
+ catch {
57
+ continue;
58
+ }
59
+ if (Date.now() - startedAt >= 2_000) {
60
+ throw new Error(`Alan could not safely update ${path}`);
61
+ }
62
+ Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, 20);
63
+ }
64
+ }
65
+ }
66
+ function writeFileSafe(path, content) {
67
+ mkdirSync(dirname(path), { recursive: true });
68
+ const pendingPath = `${path}.alan-pending-${process.pid}-${randomBytes(6).toString("hex")}`;
69
+ try {
70
+ writeFileSync(pendingPath, content, { encoding: "utf8", mode: 0o600, flag: "wx" });
71
+ renameSync(pendingPath, path);
72
+ }
73
+ finally {
74
+ rmSync(pendingPath, { force: true });
75
+ }
76
+ }
77
+ function saveMalformedBackup(path, content) {
78
+ const hash = createHash("sha256").update(content).digest("hex").slice(0, 16);
79
+ const backupPath = `${path}.alan-backup-${hash}`;
80
+ if (!existsSync(backupPath))
81
+ copyFileSync(path, backupPath);
82
+ return backupPath;
83
+ }
84
+ const claudeAdapter = {
85
+ cli: "Claude Code",
86
+ get configPath() {
87
+ return join(homeDirectory(), ".claude.json");
88
+ },
89
+ get guardDir() {
90
+ return homeDirectory();
91
+ },
92
+ merge(existing, servers) {
93
+ const config = parseJsonSafe(existing);
94
+ const mcpServers = (config.mcpServers ?? {});
95
+ for (const s of servers) {
96
+ if (s.kind === "http") {
97
+ mcpServers[s.name] = { type: "http", url: s.url, headers: s.headers };
98
+ }
99
+ else {
100
+ mcpServers[s.name] = {
101
+ command: s.command,
102
+ ...(s.args?.length ? { args: s.args } : {}),
103
+ ...(s.env && Object.keys(s.env).length > 0 ? { env: s.env } : {}),
104
+ };
105
+ }
106
+ }
107
+ config.mcpServers = mcpServers;
108
+ return JSON.stringify(config, null, 2);
109
+ },
110
+ remove(existing, serverNames) {
111
+ const config = parseJsonSafe(existing);
112
+ const mcpServers = (config.mcpServers ?? {});
113
+ for (const name of serverNames)
114
+ delete mcpServers[name];
115
+ config.mcpServers = mcpServers;
116
+ return JSON.stringify(config, null, 2);
117
+ },
118
+ };
119
+ const codexAdapter = {
120
+ cli: "Codex",
121
+ get configPath() {
122
+ return join(homeDirectory(), ".codex", "config.toml");
123
+ },
124
+ get guardDir() {
125
+ return join(homeDirectory(), ".codex");
126
+ },
127
+ merge(existing, servers) {
128
+ let config = {};
129
+ if (existing) {
130
+ try {
131
+ config = parseToml(existing);
132
+ }
133
+ catch {
134
+ throw new MalformedToolConfigError("Existing tool config is malformed");
135
+ }
136
+ }
137
+ const mcpServers = (config.mcp_servers ?? {});
138
+ for (const s of servers) {
139
+ if (s.kind === "http") {
140
+ // Codex headers are process-local; keep config.toml URL-only so credentials never persist.
141
+ mcpServers[s.name] = {
142
+ url: s.url,
143
+ ...(s.name !== "alan" && Object.keys(s.headers).length > 0
144
+ ? { http_headers: s.headers }
145
+ : {}),
146
+ };
147
+ }
148
+ else {
149
+ mcpServers[s.name] = {
150
+ command: s.command,
151
+ ...(s.args?.length ? { args: s.args } : {}),
152
+ ...(s.env && Object.keys(s.env).length > 0 ? { env: s.env } : {}),
153
+ };
154
+ }
155
+ }
156
+ config.mcp_servers = mcpServers;
157
+ return stringifyToml(config);
158
+ },
159
+ remove(existing, serverNames) {
160
+ if (!existing)
161
+ return "";
162
+ let config = {};
163
+ try {
164
+ config = parseToml(existing);
165
+ }
166
+ catch {
167
+ return existing;
168
+ }
169
+ const mcpServers = (config.mcp_servers ?? {});
170
+ for (const name of serverNames)
171
+ delete mcpServers[name];
172
+ config.mcp_servers = mcpServers;
173
+ return stringifyToml(config);
174
+ },
175
+ };
176
+ const cursorAdapter = {
177
+ cli: "Cursor",
178
+ get configPath() {
179
+ return join(homeDirectory(), ".cursor", "mcp.json");
180
+ },
181
+ get guardDir() {
182
+ return join(homeDirectory(), ".cursor");
183
+ },
184
+ merge(existing, servers) {
185
+ const config = parseJsonSafe(existing);
186
+ const mcpServers = (config.mcpServers ?? {});
187
+ for (const s of servers) {
188
+ if (s.kind === "http") {
189
+ mcpServers[s.name] = {
190
+ type: "http",
191
+ url: s.url,
192
+ headers: s.headers,
193
+ };
194
+ }
195
+ else {
196
+ mcpServers[s.name] = {
197
+ command: s.command,
198
+ ...(s.args?.length ? { args: s.args } : {}),
199
+ ...(s.env && Object.keys(s.env).length > 0 ? { env: s.env } : {}),
200
+ };
201
+ }
202
+ }
203
+ config.mcpServers = mcpServers;
204
+ return JSON.stringify(config, null, 2);
205
+ },
206
+ remove(existing, serverNames) {
207
+ const config = parseJsonSafe(existing);
208
+ const mcpServers = (config.mcpServers ?? {});
209
+ for (const name of serverNames)
210
+ delete mcpServers[name];
211
+ config.mcpServers = mcpServers;
212
+ return JSON.stringify(config, null, 2);
213
+ },
214
+ };
215
+ function createAntigravityAdapter() {
216
+ return {
217
+ cli: "Antigravity CLI",
218
+ get configPath() {
219
+ return join(homeDirectory(), ".gemini", "config", "mcp_config.json");
220
+ },
221
+ get guardDir() {
222
+ return join(homeDirectory(), ".gemini", "config");
223
+ },
224
+ // Antigravity sends `initialize` without ever completing OAuth
225
+ // (google-antigravity/antigravity-cli#25), so a credential-free entry only
226
+ // loops 401s against /mcp. Gemini CLI is the Google client that gets one.
227
+ supportsHeaderlessHttp: false,
228
+ merge(existing, servers) {
229
+ const config = parseJsonSafe(existing);
230
+ const mcpServers = (config.mcpServers ?? {});
231
+ for (const s of servers) {
232
+ if (s.kind === "http") {
233
+ mcpServers[s.name] = { serverUrl: s.url, headers: s.headers };
234
+ }
235
+ else {
236
+ mcpServers[s.name] = {
237
+ command: s.command,
238
+ ...(s.args?.length ? { args: s.args } : {}),
239
+ ...(s.env && Object.keys(s.env).length > 0 ? { env: s.env } : {}),
240
+ };
241
+ }
242
+ }
243
+ config.mcpServers = mcpServers;
244
+ return JSON.stringify(config, null, 2);
245
+ },
246
+ remove(existing, serverNames) {
247
+ const config = parseJsonSafe(existing);
248
+ const mcpServers = (config.mcpServers ?? {});
249
+ for (const name of serverNames)
250
+ delete mcpServers[name];
251
+ config.mcpServers = mcpServers;
252
+ return JSON.stringify(config, null, 2);
253
+ },
254
+ };
255
+ }
256
+ const antigravityAdapter = createAntigravityAdapter();
257
+ // Gemini CLI: `httpUrl` selects streamable HTTP; a headerless entry triggers
258
+ // its automatic OAuth discovery on the first 401.
259
+ const geminiAdapter = {
260
+ cli: "Gemini CLI",
261
+ get configPath() {
262
+ return join(homeDirectory(), ".gemini", "settings.json");
263
+ },
264
+ get guardDir() {
265
+ return join(homeDirectory(), ".gemini");
266
+ },
267
+ merge(existing, servers) {
268
+ const config = parseJsonSafe(existing);
269
+ const mcpServers = (config.mcpServers ?? {});
270
+ for (const s of servers) {
271
+ if (s.kind === "http") {
272
+ mcpServers[s.name] = { httpUrl: s.url, headers: s.headers };
273
+ }
274
+ else {
275
+ mcpServers[s.name] = {
276
+ command: s.command,
277
+ ...(s.args?.length ? { args: s.args } : {}),
278
+ ...(s.env && Object.keys(s.env).length > 0 ? { env: s.env } : {}),
279
+ };
280
+ }
281
+ }
282
+ config.mcpServers = mcpServers;
283
+ return JSON.stringify(config, null, 2);
284
+ },
285
+ remove(existing, serverNames) {
286
+ const config = parseJsonSafe(existing);
287
+ const mcpServers = (config.mcpServers ?? {});
288
+ for (const name of serverNames)
289
+ delete mcpServers[name];
290
+ config.mcpServers = mcpServers;
291
+ return JSON.stringify(config, null, 2);
292
+ },
293
+ };
294
+ const kimiAdapter = {
295
+ cli: "Kimi CLI",
296
+ get configPath() {
297
+ return join(homeDirectory(), ".kimi", "mcp.json");
298
+ },
299
+ get guardDir() {
300
+ return join(homeDirectory(), ".kimi");
301
+ },
302
+ merge(existing, servers) {
303
+ const config = parseJsonSafe(existing);
304
+ const mcpServers = (config.mcpServers ?? {});
305
+ for (const s of servers) {
306
+ if (s.kind === "http") {
307
+ mcpServers[s.name] = { url: s.url, headers: s.headers };
308
+ }
309
+ else {
310
+ mcpServers[s.name] = {
311
+ command: s.command,
312
+ ...(s.args?.length ? { args: s.args } : {}),
313
+ ...(s.env && Object.keys(s.env).length > 0 ? { env: s.env } : {}),
314
+ };
315
+ }
316
+ }
317
+ config.mcpServers = mcpServers;
318
+ return JSON.stringify(config, null, 2);
319
+ },
320
+ remove(existing, serverNames) {
321
+ const config = parseJsonSafe(existing);
322
+ const mcpServers = (config.mcpServers ?? {});
323
+ for (const name of serverNames)
324
+ delete mcpServers[name];
325
+ config.mcpServers = mcpServers;
326
+ return JSON.stringify(config, null, 2);
327
+ },
328
+ };
329
+ const opencodeAdapter = {
330
+ cli: "OpenCode",
331
+ get configPath() {
332
+ return join(homeDirectory(), ".config", "opencode", "opencode.json");
333
+ },
334
+ get guardDir() {
335
+ return join(homeDirectory(), ".config", "opencode");
336
+ },
337
+ merge(existing, servers) {
338
+ const config = parseJsonSafe(existing);
339
+ const mcp = (config.mcp ?? {});
340
+ for (const s of servers) {
341
+ if (s.kind === "http") {
342
+ mcp[s.name] = { type: "remote", url: s.url, headers: s.headers };
343
+ }
344
+ else {
345
+ mcp[s.name] = {
346
+ type: "local",
347
+ command: [s.command, ...(s.args ?? [])],
348
+ ...(s.env && Object.keys(s.env).length > 0 ? { environment: s.env } : {}),
349
+ };
350
+ }
351
+ }
352
+ config.mcp = mcp;
353
+ return JSON.stringify(config, null, 2);
354
+ },
355
+ remove(existing, serverNames) {
356
+ const config = parseJsonSafe(existing);
357
+ const mcp = (config.mcp ?? {});
358
+ for (const name of serverNames)
359
+ delete mcp[name];
360
+ config.mcp = mcp;
361
+ return JSON.stringify(config, null, 2);
362
+ },
363
+ };
364
+ const factoryAdapter = {
365
+ cli: "Factory Droid",
366
+ get configPath() {
367
+ return join(homeDirectory(), ".factory", "mcp.json");
368
+ },
369
+ get guardDir() {
370
+ return join(homeDirectory(), ".factory");
371
+ },
372
+ merge(existing, servers) {
373
+ const config = parseJsonSafe(existing);
374
+ const mcpServers = (config.mcpServers ?? {});
375
+ for (const s of servers) {
376
+ if (s.kind === "http") {
377
+ mcpServers[s.name] = {
378
+ type: "http",
379
+ url: s.url,
380
+ disabled: false,
381
+ ...(s.headers && Object.keys(s.headers).length > 0 ? { headers: s.headers } : {}),
382
+ };
383
+ }
384
+ else {
385
+ mcpServers[s.name] = {
386
+ type: "stdio",
387
+ command: s.command,
388
+ disabled: false,
389
+ ...(s.args?.length ? { args: s.args } : {}),
390
+ ...(s.env && Object.keys(s.env).length > 0 ? { env: s.env } : {}),
391
+ };
392
+ }
393
+ }
394
+ config.mcpServers = mcpServers;
395
+ return JSON.stringify(config, null, 2);
396
+ },
397
+ remove(existing, serverNames) {
398
+ const config = parseJsonSafe(existing);
399
+ const mcpServers = (config.mcpServers ?? {});
400
+ for (const name of serverNames)
401
+ delete mcpServers[name];
402
+ config.mcpServers = mcpServers;
403
+ return JSON.stringify(config, null, 2);
404
+ },
405
+ };
406
+ const ampAdapter = {
407
+ cli: "Amp",
408
+ get configPath() {
409
+ return join(homeDirectory(), ".config", "amp", "settings.json");
410
+ },
411
+ get guardDir() {
412
+ return join(homeDirectory(), ".config", "amp");
413
+ },
414
+ merge(existing, servers) {
415
+ const config = parseJsonSafe(existing);
416
+ const mcpServers = (config["amp.mcpServers"] ?? {});
417
+ for (const s of servers) {
418
+ if (s.kind === "http") {
419
+ mcpServers[s.name] = { url: s.url, headers: s.headers };
420
+ }
421
+ else {
422
+ mcpServers[s.name] = {
423
+ command: s.command,
424
+ ...(s.args?.length ? { args: s.args } : {}),
425
+ };
426
+ }
427
+ }
428
+ config["amp.mcpServers"] = mcpServers;
429
+ return JSON.stringify(config, null, 2);
430
+ },
431
+ remove(existing, serverNames) {
432
+ const config = parseJsonSafe(existing);
433
+ const mcpServers = (config["amp.mcpServers"] ?? {});
434
+ for (const name of serverNames)
435
+ delete mcpServers[name];
436
+ config["amp.mcpServers"] = mcpServers;
437
+ return JSON.stringify(config, null, 2);
438
+ },
439
+ };
440
+ const commandCodeAdapter = {
441
+ cli: "Command Code",
442
+ get configPath() {
443
+ return join(homeDirectory(), ".commandcode", "mcp.json");
444
+ },
445
+ get guardDir() {
446
+ return join(homeDirectory(), ".commandcode");
447
+ },
448
+ merge(existing, servers) {
449
+ const config = parseJsonSafe(existing);
450
+ const mcpServers = (config.mcpServers ?? {});
451
+ for (const s of servers) {
452
+ if (s.kind === "http") {
453
+ mcpServers[s.name] = {
454
+ transport: "http",
455
+ enabled: true,
456
+ url: s.url,
457
+ ...(s.headers && Object.keys(s.headers).length > 0 ? { headers: s.headers } : {}),
458
+ };
459
+ }
460
+ else {
461
+ mcpServers[s.name] = {
462
+ transport: "stdio",
463
+ enabled: true,
464
+ command: s.command,
465
+ ...(s.args?.length ? { args: s.args } : {}),
466
+ ...(s.env && Object.keys(s.env).length > 0 ? { env: s.env } : {}),
467
+ };
468
+ }
469
+ }
470
+ config.mcpServers = mcpServers;
471
+ return JSON.stringify(config, null, 2);
472
+ },
473
+ remove(existing, serverNames) {
474
+ const config = parseJsonSafe(existing);
475
+ const mcpServers = (config.mcpServers ?? {});
476
+ for (const name of serverNames)
477
+ delete mcpServers[name];
478
+ config.mcpServers = mcpServers;
479
+ return JSON.stringify(config, null, 2);
480
+ },
481
+ };
482
+ const ALL_ADAPTERS = [
483
+ claudeAdapter,
484
+ codexAdapter,
485
+ cursorAdapter,
486
+ antigravityAdapter,
487
+ geminiAdapter,
488
+ kimiAdapter,
489
+ commandCodeAdapter,
490
+ opencodeAdapter,
491
+ factoryAdapter,
492
+ ampAdapter,
493
+ ];
494
+ export const _adapters = {
495
+ claude: claudeAdapter,
496
+ codex: codexAdapter,
497
+ cursor: cursorAdapter,
498
+ antigravity: antigravityAdapter,
499
+ gemini: geminiAdapter,
500
+ kimi: kimiAdapter,
501
+ commandcode: commandCodeAdapter,
502
+ opencode: opencodeAdapter,
503
+ factory: factoryAdapter,
504
+ amp: ampAdapter,
505
+ setHomeDirectoryForTests(value) {
506
+ homeDirectoryOverride = value;
507
+ },
508
+ };
509
+ function serverEntry(adapter, content, name) {
510
+ if (adapter === codexAdapter) {
511
+ const parsed = parseToml(content);
512
+ const servers = parsed.mcp_servers;
513
+ return servers && typeof servers === "object"
514
+ ? servers[name]
515
+ : undefined;
516
+ }
517
+ const parsed = parseJsonSafe(content);
518
+ const key = adapter === opencodeAdapter ? "mcp" : adapter === ampAdapter ? "amp.mcpServers" : "mcpServers";
519
+ const servers = parsed[key];
520
+ return servers && typeof servers === "object"
521
+ ? servers[name]
522
+ : undefined;
523
+ }
524
+ function canonicalize(value) {
525
+ if (Array.isArray(value))
526
+ return value.map(canonicalize);
527
+ if (value && typeof value === "object") {
528
+ return Object.fromEntries(Object.entries(value)
529
+ .sort(([a], [b]) => a.localeCompare(b))
530
+ .map(([key, entry]) => [key, canonicalize(entry)]));
531
+ }
532
+ return value;
533
+ }
534
+ function entriesMatch(actual, expected) {
535
+ return JSON.stringify(canonicalize(actual)) === JSON.stringify(canonicalize(expected));
536
+ }
537
+ const ALAN_SESSION_HEADER_NAMES = new Set([
538
+ "x-conversation-id",
539
+ "x-team-id",
540
+ "x-allowed-tools",
541
+ "x-alan-run-reference",
542
+ "x-alan-run-id",
543
+ ]);
544
+ function normalizeAlanSessionHeaders(actual, expected) {
545
+ if (!actual || typeof actual !== "object" || Array.isArray(actual))
546
+ return actual;
547
+ if (!expected || typeof expected !== "object" || Array.isArray(expected))
548
+ return actual;
549
+ const normalized = { ...actual };
550
+ const expectedHeaders = expected;
551
+ const hadAlanSessionMarker = Object.keys(normalized).some((key) => ALAN_SESSION_HEADER_NAMES.has(key.toLowerCase()));
552
+ for (const key of Object.keys(normalized)) {
553
+ if (ALAN_SESSION_HEADER_NAMES.has(key.toLowerCase()))
554
+ delete normalized[key];
555
+ }
556
+ if (hadAlanSessionMarker) {
557
+ const expectedAuthorization = Object.entries(expectedHeaders).find(([key]) => key.toLowerCase() === "authorization");
558
+ for (const key of Object.keys(normalized)) {
559
+ if (key.toLowerCase() === "authorization")
560
+ delete normalized[key];
561
+ }
562
+ if (expectedAuthorization) {
563
+ normalized[expectedAuthorization[0]] = expectedAuthorization[1];
564
+ }
565
+ }
566
+ return normalized;
567
+ }
568
+ function normalizeAlanRuntimeEntry(actual, expected) {
569
+ if (Array.isArray(actual)) {
570
+ if (!Array.isArray(expected))
571
+ return actual;
572
+ return actual.map((entry, index) => normalizeAlanRuntimeEntry(entry, expected[index]));
573
+ }
574
+ if (!actual || typeof actual !== "object" || Array.isArray(actual))
575
+ return actual;
576
+ if (!expected || typeof expected !== "object" || Array.isArray(expected))
577
+ return actual;
578
+ const expectedRecord = expected;
579
+ return Object.fromEntries(Object.entries(actual).map(([key, value]) => [
580
+ key,
581
+ key.toLowerCase() === "headers" || key.toLowerCase() === "http_headers"
582
+ ? normalizeAlanSessionHeaders(value, expectedRecord[key])
583
+ : normalizeAlanRuntimeEntry(value, expectedRecord[key]),
584
+ ]));
585
+ }
586
+ function matchesAlanManagedEntry(actual, expected) {
587
+ return (entriesMatch(actual, expected) ||
588
+ entriesMatch(normalizeAlanRuntimeEntry(actual, expected), expected));
589
+ }
590
+ const LOCAL_ALAN_MCP_HOSTS = new Set(["localhost", "127.0.0.1", "0.0.0.0"]);
591
+ const LEGACY_LOCAL_ALAN_MCP_PORTS = new Set(["8400"]);
592
+ const ALAN_MCP_HOST_SUFFIXES = [".tryalan.ai"];
593
+ function normalizeMcpPathname(pathname) {
594
+ const trimmed = pathname.replace(/\/+$/, "");
595
+ return trimmed.length > 0 ? trimmed : "/";
596
+ }
597
+ function urlsShareAlanMcpEndpoint(left, right) {
598
+ try {
599
+ const a = new URL(left);
600
+ const b = new URL(right);
601
+ return (a.origin === b.origin && normalizeMcpPathname(a.pathname) === normalizeMcpPathname(b.pathname));
602
+ }
603
+ catch {
604
+ return left === right;
605
+ }
606
+ }
607
+ function configuredAlanMcpUrlsFromEnv() {
608
+ const urls = [];
609
+ for (const raw of [
610
+ process.env.ALAN_MCP_DESKTOP_URL,
611
+ process.env.ALAN_MCP_PUBLIC_URL,
612
+ process.env.ALAN_LOCAL_API_URL,
613
+ ]) {
614
+ const value = raw?.trim();
615
+ if (!value)
616
+ continue;
617
+ try {
618
+ const parsed = new URL(value);
619
+ if (normalizeMcpPathname(parsed.pathname) === "/mcp") {
620
+ urls.push(parsed.toString());
621
+ continue;
622
+ }
623
+ parsed.pathname = "/mcp";
624
+ urls.push(parsed.toString());
625
+ }
626
+ catch {
627
+ urls.push(value.endsWith("/mcp") ? value : `${value.replace(/\/$/, "")}/mcp`);
628
+ }
629
+ }
630
+ return urls;
631
+ }
632
+ function extractHttpUrlFromEntry(entry) {
633
+ if (!entry || typeof entry !== "object")
634
+ return undefined;
635
+ const record = entry;
636
+ for (const key of ["url", "httpUrl", "serverUrl"]) {
637
+ const value = record[key];
638
+ if (typeof value === "string" && value.length > 0)
639
+ return value;
640
+ }
641
+ for (const value of Object.values(record)) {
642
+ if (!value || typeof value !== "object")
643
+ continue;
644
+ const nested = extractHttpUrlFromEntry(value);
645
+ if (nested)
646
+ return nested;
647
+ }
648
+ return undefined;
649
+ }
650
+ function isAlanSelfRegistrationEntry(entry) {
651
+ const url = extractHttpUrlFromEntry(entry);
652
+ if (!url)
653
+ return false;
654
+ try {
655
+ const parsed = new URL(url);
656
+ if (normalizeMcpPathname(parsed.pathname) !== "/mcp")
657
+ return false;
658
+ const host = parsed.hostname.toLowerCase();
659
+ if (LOCAL_ALAN_MCP_HOSTS.has(host) && LEGACY_LOCAL_ALAN_MCP_PORTS.has(parsed.port)) {
660
+ return true;
661
+ }
662
+ if (ALAN_MCP_HOST_SUFFIXES.some((suffix) => host.endsWith(suffix)))
663
+ return true;
664
+ return configuredAlanMcpUrlsFromEnv().some((configured) => urlsShareAlanMcpEndpoint(configured, url));
665
+ }
666
+ catch {
667
+ return false;
668
+ }
669
+ }
670
+ // Alan session headers mark ownership across local/prod URL drift; bare `alan` names do not.
671
+ function hasAlanManagedSignature(entry) {
672
+ if (!entry || typeof entry !== "object")
673
+ return false;
674
+ for (const [key, value] of Object.entries(entry)) {
675
+ const lower = key.toLowerCase();
676
+ if ((lower === "headers" || lower === "http_headers") && value && typeof value === "object") {
677
+ const headerNames = Object.keys(value);
678
+ if (headerNames.some((name) => ALAN_SESSION_HEADER_NAMES.has(name.toLowerCase()))) {
679
+ return true;
680
+ }
681
+ }
682
+ // Recurse into nested tables (codex TOML parses http_headers as a child object).
683
+ if (value && typeof value === "object" && hasAlanManagedSignature(value))
684
+ return true;
685
+ }
686
+ return false;
687
+ }
688
+ function isLegacyAlanProxyEntry(entry) {
689
+ if (!entry || typeof entry !== "object" || Array.isArray(entry))
690
+ return false;
691
+ const record = entry;
692
+ const command = typeof record.command === "string" ? record.command : "";
693
+ const args = Array.isArray(record.args) ? record.args : [];
694
+ return /(^|[/\\])alan-agent(?:\.cmd|\.exe)?$/.test(command) && args.includes("mcp-proxy");
695
+ }
696
+ function isHeaderlessHttpServer(server) {
697
+ return server.kind === "http" && Object.keys(server.headers).length === 0;
698
+ }
699
+ function expectedServerEntry(adapter, server) {
700
+ return serverEntry(adapter, adapter.merge(null, [server]), server.name);
701
+ }
702
+ function isManagedServerList(entries) {
703
+ return entries.length === 0 || typeof entries[0] !== "string";
704
+ }
705
+ function isAlanOwnedMcpEntry(entry, desiredEntry, previousEntry) {
706
+ return (hasAlanManagedSignature(entry) ||
707
+ isLegacyAlanProxyEntry(entry) ||
708
+ isAlanSelfRegistrationEntry(entry) ||
709
+ matchesAlanManagedEntry(entry, desiredEntry) ||
710
+ (previousEntry !== undefined && matchesAlanManagedEntry(entry, previousEntry)));
711
+ }
712
+ export function syncMcpToAllClis(servers, oldManagedServers = []) {
713
+ const written = [];
714
+ const failures = [];
715
+ for (const adapter of ALL_ADAPTERS) {
716
+ if (!existsSync(adapter.guardDir)) {
717
+ log.debug("MCP Adapters", `Skipping ${adapter.cli} — guard dir not found`, {
718
+ guardDir: adapter.guardDir,
719
+ });
720
+ continue;
721
+ }
722
+ const releaseLock = acquireConfigLock(adapter.configPath);
723
+ try {
724
+ const existing = readFileOr(adapter.configPath);
725
+ const previousServers = isManagedServerList(oldManagedServers) ? oldManagedServers : [];
726
+ const previousNames = isManagedServerList(oldManagedServers)
727
+ ? oldManagedServers.map((server) => server.name)
728
+ : oldManagedServers;
729
+ const previousByName = new Map(previousServers.map((server) => [server.name, server]));
730
+ const adapterServers = adapter.supportsHeaderlessHttp === false
731
+ ? servers.filter((server) => !isHeaderlessHttpServer(server))
732
+ : servers;
733
+ const skippedNames = servers
734
+ .filter((server) => !adapterServers.includes(server))
735
+ .map((server) => server.name);
736
+ if (existing) {
737
+ for (const server of adapterServers) {
738
+ const currentEntry = serverEntry(adapter, existing, server.name);
739
+ if (currentEntry === undefined)
740
+ continue;
741
+ const desiredEntry = expectedServerEntry(adapter, server);
742
+ const previous = previousByName.get(server.name);
743
+ const previousEntry = previous ? expectedServerEntry(adapter, previous) : undefined;
744
+ if (!isAlanOwnedMcpEntry(currentEntry, desiredEntry, previousEntry)) {
745
+ throw new Error(`an unowned entry already uses the name ${server.name}`);
746
+ }
747
+ }
748
+ }
749
+ const currentNames = new Set(adapterServers.map((s) => s.name));
750
+ const toRemove = [
751
+ ...previousNames.filter((name) => !currentNames.has(name)),
752
+ ...skippedNames.filter((name) => !previousNames.includes(name)),
753
+ ];
754
+ if (!existing && skippedNames.length > 0 && adapterServers.length === 0) {
755
+ log.debug("MCP Adapters", `Skipping ${adapter.cli} — nothing it can authenticate`, {
756
+ configPath: adapter.configPath,
757
+ });
758
+ continue;
759
+ }
760
+ let content;
761
+ if (toRemove.length > 0) {
762
+ const ownedNames = existing
763
+ ? toRemove.filter((name) => {
764
+ const entry = serverEntry(adapter, existing, name);
765
+ const previous = previousByName.get(name);
766
+ return (hasAlanManagedSignature(entry) ||
767
+ isLegacyAlanProxyEntry(entry) ||
768
+ isAlanSelfRegistrationEntry(entry) ||
769
+ (previous !== undefined &&
770
+ matchesAlanManagedEntry(entry, expectedServerEntry(adapter, previous))));
771
+ })
772
+ : [];
773
+ const cleaned = adapter.remove(existing, ownedNames);
774
+ content = adapter.merge(cleaned, adapterServers);
775
+ }
776
+ else {
777
+ content = adapter.merge(existing, adapterServers);
778
+ }
779
+ if (existing === content) {
780
+ log.debug("MCP Adapters", `${adapter.cli} already current`, {
781
+ configPath: adapter.configPath,
782
+ });
783
+ continue;
784
+ }
785
+ writeFileSafe(adapter.configPath, content);
786
+ written.push(adapter.cli);
787
+ log.info("MCP Adapters", `Synced to ${adapter.cli}`, {
788
+ configPath: adapter.configPath,
789
+ serverCount: servers.length,
790
+ });
791
+ }
792
+ catch (err) {
793
+ const existing = readFileOr(adapter.configPath);
794
+ const backupPath = err instanceof MalformedToolConfigError && existing !== null
795
+ ? saveMalformedBackup(adapter.configPath, existing)
796
+ : undefined;
797
+ const message = `${adapter.cli}: ${err instanceof Error ? err.message : String(err)}${backupPath ? `; review ${backupPath}` : ""}`;
798
+ failures.push(message);
799
+ log.warn("MCP Adapters", `Failed to sync to ${adapter.cli}`, {
800
+ error: message,
801
+ });
802
+ }
803
+ finally {
804
+ releaseLock();
805
+ }
806
+ }
807
+ if (failures.length > 0)
808
+ throw new Error(failures.join(" | "));
809
+ return written;
810
+ }
811
+ export function removeMcpFromAllClis(managedServers) {
812
+ if (managedServers.length === 0)
813
+ return;
814
+ const ownershipKnown = isManagedServerList(managedServers);
815
+ for (const adapter of ALL_ADAPTERS) {
816
+ if (!existsSync(adapter.guardDir))
817
+ continue;
818
+ const releaseLock = acquireConfigLock(adapter.configPath);
819
+ try {
820
+ const existing = readFileOr(adapter.configPath);
821
+ if (!existing)
822
+ continue;
823
+ const ownedNames = ownershipKnown
824
+ ? managedServers
825
+ .filter((server) => matchesAlanManagedEntry(serverEntry(adapter, existing, server.name), expectedServerEntry(adapter, server)))
826
+ .map((server) => server.name)
827
+ : [];
828
+ if (ownedNames.length === 0)
829
+ continue;
830
+ const content = adapter.remove(existing, ownedNames);
831
+ writeFileSafe(adapter.configPath, content);
832
+ log.info("MCP Adapters", `Cleaned up ${adapter.cli}`, {
833
+ removed: ownedNames,
834
+ });
835
+ }
836
+ catch (err) {
837
+ const existing = readFileOr(adapter.configPath);
838
+ const backupPath = err instanceof MalformedToolConfigError && existing !== null
839
+ ? saveMalformedBackup(adapter.configPath, existing)
840
+ : undefined;
841
+ log.warn("MCP Adapters", `Failed to clean up ${adapter.cli}`, {
842
+ error: `${err instanceof Error ? err.message : String(err)}${backupPath ? `; review ${backupPath}` : ""}`,
843
+ });
844
+ }
845
+ finally {
846
+ releaseLock();
847
+ }
848
+ }
849
+ }
850
+ const DEFAULT_ALAN_MCP_NAMES = ["alan"];
851
+ // Prefer false negatives; bare `alan` server names are not enough.
852
+ export function inspectAlanMcpPresence(expectedServers = [], candidateNames = DEFAULT_ALAN_MCP_NAMES) {
853
+ const configuredClis = [];
854
+ const inspectedClis = [];
855
+ const serverNamesFound = new Set();
856
+ const names = new Set([
857
+ ...candidateNames,
858
+ ...expectedServers.map((server) => server.name),
859
+ ]);
860
+ const expectedByName = new Map(expectedServers.map((server) => [server.name, server]));
861
+ for (const adapter of ALL_ADAPTERS) {
862
+ if (!existsSync(adapter.guardDir))
863
+ continue;
864
+ inspectedClis.push(adapter.cli);
865
+ const existing = readFileOr(adapter.configPath);
866
+ if (!existing)
867
+ continue;
868
+ let foundOnCli = false;
869
+ for (const name of names) {
870
+ let entry;
871
+ try {
872
+ entry = serverEntry(adapter, existing, name);
873
+ }
874
+ catch {
875
+ // Malformed config — cannot prove Alan MCP is present.
876
+ continue;
877
+ }
878
+ if (entry === undefined)
879
+ continue;
880
+ const expected = expectedByName.get(name);
881
+ const matchesExpected = expected
882
+ ? matchesAlanManagedEntry(entry, expectedServerEntry(adapter, expected))
883
+ : false;
884
+ if (!hasAlanManagedSignature(entry) &&
885
+ !isLegacyAlanProxyEntry(entry) &&
886
+ !matchesExpected &&
887
+ !isAlanSelfRegistrationEntry(entry)) {
888
+ continue;
889
+ }
890
+ foundOnCli = true;
891
+ serverNamesFound.add(name);
892
+ }
893
+ if (foundOnCli)
894
+ configuredClis.push(adapter.cli);
895
+ }
896
+ return {
897
+ configured: configuredClis.length > 0,
898
+ configuredClis,
899
+ inspectedClis,
900
+ serverNamesFound: [...serverNamesFound],
901
+ };
902
+ }
903
+ export function toManagedMcpServers(mcpServers) {
904
+ const result = [];
905
+ for (const [name, config] of Object.entries(mcpServers)) {
906
+ if (!config || typeof config !== "object")
907
+ continue;
908
+ const c = config;
909
+ if (c.command && typeof c.command === "string") {
910
+ result.push({
911
+ name,
912
+ kind: "stdio",
913
+ command: c.command,
914
+ args: c.args ?? undefined,
915
+ env: c.env ?? undefined,
916
+ });
917
+ }
918
+ else {
919
+ result.push({
920
+ name,
921
+ kind: "http",
922
+ url: c.url ?? "",
923
+ headers: c.headers ?? {},
924
+ });
925
+ }
926
+ }
927
+ return result;
928
+ }
929
+ //# sourceMappingURL=mcp-config-adapters.js.map