@xenosystem/agent-interface-host 0.1.3

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 (482) hide show
  1. package/LICENSE +67 -0
  2. package/dist/acp/AcpAgentRegistryService.d.ts +77 -0
  3. package/dist/acp/AcpAgentRegistryService.d.ts.map +1 -0
  4. package/dist/acp/AcpAgentRegistryService.js +754 -0
  5. package/dist/acp/AcpAgentRegistryService.js.map +1 -0
  6. package/dist/acp/AcpAgentTurnExecutionAdapter.d.ts +56 -0
  7. package/dist/acp/AcpAgentTurnExecutionAdapter.d.ts.map +1 -0
  8. package/dist/acp/AcpAgentTurnExecutionAdapter.js +323 -0
  9. package/dist/acp/AcpAgentTurnExecutionAdapter.js.map +1 -0
  10. package/dist/acp/AcpApprovalPortAdapter.d.ts +41 -0
  11. package/dist/acp/AcpApprovalPortAdapter.d.ts.map +1 -0
  12. package/dist/acp/AcpApprovalPortAdapter.js +82 -0
  13. package/dist/acp/AcpApprovalPortAdapter.js.map +1 -0
  14. package/dist/acp/AcpCoordinationBridge.d.ts +13 -0
  15. package/dist/acp/AcpCoordinationBridge.d.ts.map +1 -0
  16. package/dist/acp/AcpCoordinationBridge.js +13 -0
  17. package/dist/acp/AcpCoordinationBridge.js.map +1 -0
  18. package/dist/acp/AcpDiagnosticsService.d.ts +61 -0
  19. package/dist/acp/AcpDiagnosticsService.d.ts.map +1 -0
  20. package/dist/acp/AcpDiagnosticsService.js +203 -0
  21. package/dist/acp/AcpDiagnosticsService.js.map +1 -0
  22. package/dist/acp/AcpExternalCertificationHarness.d.ts +47 -0
  23. package/dist/acp/AcpExternalCertificationHarness.d.ts.map +1 -0
  24. package/dist/acp/AcpExternalCertificationHarness.js +176 -0
  25. package/dist/acp/AcpExternalCertificationHarness.js.map +1 -0
  26. package/dist/acp/AcpHostBridge.d.ts +81 -0
  27. package/dist/acp/AcpHostBridge.d.ts.map +1 -0
  28. package/dist/acp/AcpHostBridge.js +101 -0
  29. package/dist/acp/AcpHostBridge.js.map +1 -0
  30. package/dist/acp/AcpInteractivePermissionBridge.d.ts +77 -0
  31. package/dist/acp/AcpInteractivePermissionBridge.d.ts.map +1 -0
  32. package/dist/acp/AcpInteractivePermissionBridge.js +127 -0
  33. package/dist/acp/AcpInteractivePermissionBridge.js.map +1 -0
  34. package/dist/acp/AcpPermissionBridge.d.ts +19 -0
  35. package/dist/acp/AcpPermissionBridge.d.ts.map +1 -0
  36. package/dist/acp/AcpPermissionBridge.js +110 -0
  37. package/dist/acp/AcpPermissionBridge.js.map +1 -0
  38. package/dist/acp/AcpPermissionPolicy.d.ts +111 -0
  39. package/dist/acp/AcpPermissionPolicy.d.ts.map +1 -0
  40. package/dist/acp/AcpPermissionPolicy.js +167 -0
  41. package/dist/acp/AcpPermissionPolicy.js.map +1 -0
  42. package/dist/acp/AcpProcessSupervisor.d.ts +134 -0
  43. package/dist/acp/AcpProcessSupervisor.d.ts.map +1 -0
  44. package/dist/acp/AcpProcessSupervisor.js +674 -0
  45. package/dist/acp/AcpProcessSupervisor.js.map +1 -0
  46. package/dist/acp/AcpProviderApprovalService.d.ts +27 -0
  47. package/dist/acp/AcpProviderApprovalService.d.ts.map +1 -0
  48. package/dist/acp/AcpProviderApprovalService.js +128 -0
  49. package/dist/acp/AcpProviderApprovalService.js.map +1 -0
  50. package/dist/acp/AcpProviderCatalogService.d.ts +69 -0
  51. package/dist/acp/AcpProviderCatalogService.d.ts.map +1 -0
  52. package/dist/acp/AcpProviderCatalogService.js +707 -0
  53. package/dist/acp/AcpProviderCatalogService.js.map +1 -0
  54. package/dist/acp/AcpProviderModelService.d.ts +6 -0
  55. package/dist/acp/AcpProviderModelService.d.ts.map +1 -0
  56. package/dist/acp/AcpProviderModelService.js +274 -0
  57. package/dist/acp/AcpProviderModelService.js.map +1 -0
  58. package/dist/acp/AcpProviderVersionReadiness.d.ts +6 -0
  59. package/dist/acp/AcpProviderVersionReadiness.d.ts.map +1 -0
  60. package/dist/acp/AcpProviderVersionReadiness.js +100 -0
  61. package/dist/acp/AcpProviderVersionReadiness.js.map +1 -0
  62. package/dist/acp/AcpRuntimeEventMapper.d.ts +16 -0
  63. package/dist/acp/AcpRuntimeEventMapper.d.ts.map +1 -0
  64. package/dist/acp/AcpRuntimeEventMapper.js +326 -0
  65. package/dist/acp/AcpRuntimeEventMapper.js.map +1 -0
  66. package/dist/acp/AcpSessionService.d.ts +65 -0
  67. package/dist/acp/AcpSessionService.d.ts.map +1 -0
  68. package/dist/acp/AcpSessionService.js +931 -0
  69. package/dist/acp/AcpSessionService.js.map +1 -0
  70. package/dist/acp/DurableAcpPermissionPolicyStore.d.ts +25 -0
  71. package/dist/acp/DurableAcpPermissionPolicyStore.d.ts.map +1 -0
  72. package/dist/acp/DurableAcpPermissionPolicyStore.js +100 -0
  73. package/dist/acp/DurableAcpPermissionPolicyStore.js.map +1 -0
  74. package/dist/acp/acpCommandSafety.d.ts +63 -0
  75. package/dist/acp/acpCommandSafety.d.ts.map +1 -0
  76. package/dist/acp/acpCommandSafety.js +90 -0
  77. package/dist/acp/acpCommandSafety.js.map +1 -0
  78. package/dist/acp/acpErrors.d.ts +47 -0
  79. package/dist/acp/acpErrors.d.ts.map +1 -0
  80. package/dist/acp/acpErrors.js +93 -0
  81. package/dist/acp/acpErrors.js.map +1 -0
  82. package/dist/acp/acpRedaction.d.ts +9 -0
  83. package/dist/acp/acpRedaction.d.ts.map +1 -0
  84. package/dist/acp/acpRedaction.js +69 -0
  85. package/dist/acp/acpRedaction.js.map +1 -0
  86. package/dist/acp/acpSessionResume.d.ts +8 -0
  87. package/dist/acp/acpSessionResume.d.ts.map +1 -0
  88. package/dist/acp/acpSessionResume.js +31 -0
  89. package/dist/acp/acpSessionResume.js.map +1 -0
  90. package/dist/acp/acpTypes.d.ts +467 -0
  91. package/dist/acp/acpTypes.d.ts.map +1 -0
  92. package/dist/acp/acpTypes.js +2 -0
  93. package/dist/acp/acpTypes.js.map +1 -0
  94. package/dist/agent/chooseDirectoryBridge.d.ts +29 -0
  95. package/dist/agent/chooseDirectoryBridge.d.ts.map +1 -0
  96. package/dist/agent/chooseDirectoryBridge.js +116 -0
  97. package/dist/agent/chooseDirectoryBridge.js.map +1 -0
  98. package/dist/agent/permissionProfiles.d.ts +29 -0
  99. package/dist/agent/permissionProfiles.d.ts.map +1 -0
  100. package/dist/agent/permissionProfiles.js +107 -0
  101. package/dist/agent/permissionProfiles.js.map +1 -0
  102. package/dist/agent/runtimeAuthorityPrompt.d.ts +13 -0
  103. package/dist/agent/runtimeAuthorityPrompt.d.ts.map +1 -0
  104. package/dist/agent/runtimeAuthorityPrompt.js +45 -0
  105. package/dist/agent/runtimeAuthorityPrompt.js.map +1 -0
  106. package/dist/agent/runtimeModeOutputGuard.d.ts +6 -0
  107. package/dist/agent/runtimeModeOutputGuard.d.ts.map +1 -0
  108. package/dist/agent/runtimeModeOutputGuard.js +40 -0
  109. package/dist/agent/runtimeModeOutputGuard.js.map +1 -0
  110. package/dist/agent/workspacePlacementBridge.d.ts +29 -0
  111. package/dist/agent/workspacePlacementBridge.d.ts.map +1 -0
  112. package/dist/agent/workspacePlacementBridge.js +143 -0
  113. package/dist/agent/workspacePlacementBridge.js.map +1 -0
  114. package/dist/agentSearch/AgentSearchService.d.ts +81 -0
  115. package/dist/agentSearch/AgentSearchService.d.ts.map +1 -0
  116. package/dist/agentSearch/AgentSearchService.js +1038 -0
  117. package/dist/agentSearch/AgentSearchService.js.map +1 -0
  118. package/dist/agentSearch/JsonInvertedIndexAdapter.d.ts +44 -0
  119. package/dist/agentSearch/JsonInvertedIndexAdapter.d.ts.map +1 -0
  120. package/dist/agentSearch/JsonInvertedIndexAdapter.js +307 -0
  121. package/dist/agentSearch/JsonInvertedIndexAdapter.js.map +1 -0
  122. package/dist/agentSearch/SearchIndexAdapter.d.ts +33 -0
  123. package/dist/agentSearch/SearchIndexAdapter.d.ts.map +1 -0
  124. package/dist/agentSearch/SearchIndexAdapter.js +2 -0
  125. package/dist/agentSearch/SearchIndexAdapter.js.map +1 -0
  126. package/dist/agentSearch/SearchSourceWatcher.d.ts +29 -0
  127. package/dist/agentSearch/SearchSourceWatcher.d.ts.map +1 -0
  128. package/dist/agentSearch/SearchSourceWatcher.js +150 -0
  129. package/dist/agentSearch/SearchSourceWatcher.js.map +1 -0
  130. package/dist/agentSearch/SqliteFtsIndexAdapter.d.ts +58 -0
  131. package/dist/agentSearch/SqliteFtsIndexAdapter.d.ts.map +1 -0
  132. package/dist/agentSearch/SqliteFtsIndexAdapter.js +420 -0
  133. package/dist/agentSearch/SqliteFtsIndexAdapter.js.map +1 -0
  134. package/dist/agentSearch/conversationIndexer.d.ts +69 -0
  135. package/dist/agentSearch/conversationIndexer.d.ts.map +1 -0
  136. package/dist/agentSearch/conversationIndexer.js +313 -0
  137. package/dist/agentSearch/conversationIndexer.js.map +1 -0
  138. package/dist/agentSearch/searchTypes.d.ts +264 -0
  139. package/dist/agentSearch/searchTypes.d.ts.map +1 -0
  140. package/dist/agentSearch/searchTypes.js +2 -0
  141. package/dist/agentSearch/searchTypes.js.map +1 -0
  142. package/dist/agentSearch/searchUtils.d.ts +12 -0
  143. package/dist/agentSearch/searchUtils.d.ts.map +1 -0
  144. package/dist/agentSearch/searchUtils.js +125 -0
  145. package/dist/agentSearch/searchUtils.js.map +1 -0
  146. package/dist/agentSearch/workspaceMetadataIndexer.d.ts +3 -0
  147. package/dist/agentSearch/workspaceMetadataIndexer.d.ts.map +1 -0
  148. package/dist/agentSearch/workspaceMetadataIndexer.js +125 -0
  149. package/dist/agentSearch/workspaceMetadataIndexer.js.map +1 -0
  150. package/dist/cli/CliControlPlaneService.d.ts +269 -0
  151. package/dist/cli/CliControlPlaneService.d.ts.map +1 -0
  152. package/dist/cli/CliControlPlaneService.js +1874 -0
  153. package/dist/cli/CliControlPlaneService.js.map +1 -0
  154. package/dist/cloud/XenoCloudAgentTurnExecutionAdapter.d.ts +91 -0
  155. package/dist/cloud/XenoCloudAgentTurnExecutionAdapter.d.ts.map +1 -0
  156. package/dist/cloud/XenoCloudAgentTurnExecutionAdapter.js +379 -0
  157. package/dist/cloud/XenoCloudAgentTurnExecutionAdapter.js.map +1 -0
  158. package/dist/codebase/CodebaseIntelligenceService.d.ts +68 -0
  159. package/dist/codebase/CodebaseIntelligenceService.d.ts.map +1 -0
  160. package/dist/codebase/CodebaseIntelligenceService.js +1717 -0
  161. package/dist/codebase/CodebaseIntelligenceService.js.map +1 -0
  162. package/dist/codebase/LanguageServerProcessManager.d.ts +85 -0
  163. package/dist/codebase/LanguageServerProcessManager.d.ts.map +1 -0
  164. package/dist/codebase/LanguageServerProcessManager.js +607 -0
  165. package/dist/codebase/LanguageServerProcessManager.js.map +1 -0
  166. package/dist/codebase/codeTypes.d.ts +485 -0
  167. package/dist/codebase/codeTypes.d.ts.map +1 -0
  168. package/dist/codebase/codeTypes.js +2 -0
  169. package/dist/codebase/codeTypes.js.map +1 -0
  170. package/dist/codebase/codeUtils.d.ts +24 -0
  171. package/dist/codebase/codeUtils.d.ts.map +1 -0
  172. package/dist/codebase/codeUtils.js +177 -0
  173. package/dist/codebase/codeUtils.js.map +1 -0
  174. package/dist/codebase/contextPacks.d.ts +18 -0
  175. package/dist/codebase/contextPacks.d.ts.map +1 -0
  176. package/dist/codebase/contextPacks.js +180 -0
  177. package/dist/codebase/contextPacks.js.map +1 -0
  178. package/dist/codebase/dependencyGraph.d.ts +3 -0
  179. package/dist/codebase/dependencyGraph.d.ts.map +1 -0
  180. package/dist/codebase/dependencyGraph.js +209 -0
  181. package/dist/codebase/dependencyGraph.js.map +1 -0
  182. package/dist/codebase/fileIndexer.d.ts +27 -0
  183. package/dist/codebase/fileIndexer.d.ts.map +1 -0
  184. package/dist/codebase/fileIndexer.js +167 -0
  185. package/dist/codebase/fileIndexer.js.map +1 -0
  186. package/dist/codebase/symbolIndexer.d.ts +3 -0
  187. package/dist/codebase/symbolIndexer.d.ts.map +1 -0
  188. package/dist/codebase/symbolIndexer.js +184 -0
  189. package/dist/codebase/symbolIndexer.js.map +1 -0
  190. package/dist/codebase/whatChanged.d.ts +4 -0
  191. package/dist/codebase/whatChanged.d.ts.map +1 -0
  192. package/dist/codebase/whatChanged.js +138 -0
  193. package/dist/codebase/whatChanged.js.map +1 -0
  194. package/dist/coordination/CoordinationService.d.ts +166 -0
  195. package/dist/coordination/CoordinationService.d.ts.map +1 -0
  196. package/dist/coordination/CoordinationService.js +247 -0
  197. package/dist/coordination/CoordinationService.js.map +1 -0
  198. package/dist/coordination/claims.d.ts +122 -0
  199. package/dist/coordination/claims.d.ts.map +1 -0
  200. package/dist/coordination/claims.js +196 -0
  201. package/dist/coordination/claims.js.map +1 -0
  202. package/dist/coordination/coordinationTools.d.ts +40 -0
  203. package/dist/coordination/coordinationTools.d.ts.map +1 -0
  204. package/dist/coordination/coordinationTools.js +92 -0
  205. package/dist/coordination/coordinationTools.js.map +1 -0
  206. package/dist/coordination/laneBridge.d.ts +84 -0
  207. package/dist/coordination/laneBridge.d.ts.map +1 -0
  208. package/dist/coordination/laneBridge.js +86 -0
  209. package/dist/coordination/laneBridge.js.map +1 -0
  210. package/dist/coordination/messages.d.ts +225 -0
  211. package/dist/coordination/messages.d.ts.map +1 -0
  212. package/dist/coordination/messages.js +335 -0
  213. package/dist/coordination/messages.js.map +1 -0
  214. package/dist/coordination/permissionWaitRegistry.d.ts +32 -0
  215. package/dist/coordination/permissionWaitRegistry.d.ts.map +1 -0
  216. package/dist/coordination/permissionWaitRegistry.js +59 -0
  217. package/dist/coordination/permissionWaitRegistry.js.map +1 -0
  218. package/dist/coordination/query.d.ts +187 -0
  219. package/dist/coordination/query.d.ts.map +1 -0
  220. package/dist/coordination/query.js +138 -0
  221. package/dist/coordination/query.js.map +1 -0
  222. package/dist/coordination/renderInbox.d.ts +15 -0
  223. package/dist/coordination/renderInbox.d.ts.map +1 -0
  224. package/dist/coordination/renderInbox.js +19 -0
  225. package/dist/coordination/renderInbox.js.map +1 -0
  226. package/dist/coordination/runtimeEvents.d.ts +53 -0
  227. package/dist/coordination/runtimeEvents.d.ts.map +1 -0
  228. package/dist/coordination/runtimeEvents.js +112 -0
  229. package/dist/coordination/runtimeEvents.js.map +1 -0
  230. package/dist/detachedHostService.d.ts +77 -0
  231. package/dist/detachedHostService.d.ts.map +1 -0
  232. package/dist/detachedHostService.js +66 -0
  233. package/dist/detachedHostService.js.map +1 -0
  234. package/dist/detachedHostSupervisor.d.ts +102 -0
  235. package/dist/detachedHostSupervisor.d.ts.map +1 -0
  236. package/dist/detachedHostSupervisor.js +168 -0
  237. package/dist/detachedHostSupervisor.js.map +1 -0
  238. package/dist/durableRuntimeEventStore.d.ts +49 -0
  239. package/dist/durableRuntimeEventStore.d.ts.map +1 -0
  240. package/dist/durableRuntimeEventStore.js +364 -0
  241. package/dist/durableRuntimeEventStore.js.map +1 -0
  242. package/dist/engineering/EngineeringWorkbenchService.d.ts +142 -0
  243. package/dist/engineering/EngineeringWorkbenchService.d.ts.map +1 -0
  244. package/dist/engineering/EngineeringWorkbenchService.js +2301 -0
  245. package/dist/engineering/EngineeringWorkbenchService.js.map +1 -0
  246. package/dist/engineering/LandingService.d.ts +112 -0
  247. package/dist/engineering/LandingService.d.ts.map +1 -0
  248. package/dist/engineering/LandingService.js +239 -0
  249. package/dist/engineering/LandingService.js.map +1 -0
  250. package/dist/engineering/engineeringTypes.d.ts +2 -0
  251. package/dist/engineering/engineeringTypes.d.ts.map +1 -0
  252. package/dist/engineering/engineeringTypes.js +2 -0
  253. package/dist/engineering/engineeringTypes.js.map +1 -0
  254. package/dist/engineering/patchReview.d.ts +11 -0
  255. package/dist/engineering/patchReview.d.ts.map +1 -0
  256. package/dist/engineering/patchReview.js +174 -0
  257. package/dist/engineering/patchReview.js.map +1 -0
  258. package/dist/index.d.ts +834 -0
  259. package/dist/index.d.ts.map +1 -0
  260. package/dist/index.js +3242 -0
  261. package/dist/index.js.map +1 -0
  262. package/dist/intake/IntakeService.d.ts +84 -0
  263. package/dist/intake/IntakeService.d.ts.map +1 -0
  264. package/dist/intake/IntakeService.js +117 -0
  265. package/dist/intake/IntakeService.js.map +1 -0
  266. package/dist/intake/RepositoryTodoIntakeSource.d.ts +72 -0
  267. package/dist/intake/RepositoryTodoIntakeSource.d.ts.map +1 -0
  268. package/dist/intake/RepositoryTodoIntakeSource.js +168 -0
  269. package/dist/intake/RepositoryTodoIntakeSource.js.map +1 -0
  270. package/dist/intake/WorkspaceTodoIntakeSource.d.ts +53 -0
  271. package/dist/intake/WorkspaceTodoIntakeSource.d.ts.map +1 -0
  272. package/dist/intake/WorkspaceTodoIntakeSource.js +81 -0
  273. package/dist/intake/WorkspaceTodoIntakeSource.js.map +1 -0
  274. package/dist/isolation/CommandExecution.d.ts +132 -0
  275. package/dist/isolation/CommandExecution.d.ts.map +1 -0
  276. package/dist/isolation/CommandExecution.js +48 -0
  277. package/dist/isolation/CommandExecution.js.map +1 -0
  278. package/dist/isolation/LocalCommandExecutor.d.ts +27 -0
  279. package/dist/isolation/LocalCommandExecutor.d.ts.map +1 -0
  280. package/dist/isolation/LocalCommandExecutor.js +97 -0
  281. package/dist/isolation/LocalCommandExecutor.js.map +1 -0
  282. package/dist/isolation/RunExecutionEnvironment.d.ts +135 -0
  283. package/dist/isolation/RunExecutionEnvironment.d.ts.map +1 -0
  284. package/dist/isolation/RunExecutionEnvironment.js +206 -0
  285. package/dist/isolation/RunExecutionEnvironment.js.map +1 -0
  286. package/dist/isolation/RunIsolationService.d.ts +90 -0
  287. package/dist/isolation/RunIsolationService.d.ts.map +1 -0
  288. package/dist/isolation/RunIsolationService.js +86 -0
  289. package/dist/isolation/RunIsolationService.js.map +1 -0
  290. package/dist/isolation/SandboxCommandExecutor.d.ts +93 -0
  291. package/dist/isolation/SandboxCommandExecutor.d.ts.map +1 -0
  292. package/dist/isolation/SandboxCommandExecutor.js +189 -0
  293. package/dist/isolation/SandboxCommandExecutor.js.map +1 -0
  294. package/dist/knowledge/WorkspaceKnowledgeService.d.ts +71 -0
  295. package/dist/knowledge/WorkspaceKnowledgeService.d.ts.map +1 -0
  296. package/dist/knowledge/WorkspaceKnowledgeService.js +103 -0
  297. package/dist/knowledge/WorkspaceKnowledgeService.js.map +1 -0
  298. package/dist/localHostAuthority.d.ts +24 -0
  299. package/dist/localHostAuthority.d.ts.map +1 -0
  300. package/dist/localHostAuthority.js +87 -0
  301. package/dist/localHostAuthority.js.map +1 -0
  302. package/dist/localHostLease.d.ts +51 -0
  303. package/dist/localHostLease.d.ts.map +1 -0
  304. package/dist/localHostLease.js +167 -0
  305. package/dist/localHostLease.js.map +1 -0
  306. package/dist/localHostPaths.d.ts +30 -0
  307. package/dist/localHostPaths.d.ts.map +1 -0
  308. package/dist/localHostPaths.js +60 -0
  309. package/dist/localHostPaths.js.map +1 -0
  310. package/dist/localRpcTransport.d.ts +21 -0
  311. package/dist/localRpcTransport.d.ts.map +1 -0
  312. package/dist/localRpcTransport.js +423 -0
  313. package/dist/localRpcTransport.js.map +1 -0
  314. package/dist/node.d.ts +104 -0
  315. package/dist/node.d.ts.map +1 -0
  316. package/dist/node.js +103 -0
  317. package/dist/node.js.map +1 -0
  318. package/dist/observation/DirectoryBaselineScanner.d.ts +44 -0
  319. package/dist/observation/DirectoryBaselineScanner.d.ts.map +1 -0
  320. package/dist/observation/DirectoryBaselineScanner.js +112 -0
  321. package/dist/observation/DirectoryBaselineScanner.js.map +1 -0
  322. package/dist/observation/MountContentReader.d.ts +63 -0
  323. package/dist/observation/MountContentReader.d.ts.map +1 -0
  324. package/dist/observation/MountContentReader.js +158 -0
  325. package/dist/observation/MountContentReader.js.map +1 -0
  326. package/dist/observation/RunObservationService.d.ts +229 -0
  327. package/dist/observation/RunObservationService.d.ts.map +1 -0
  328. package/dist/observation/RunObservationService.js +248 -0
  329. package/dist/observation/RunObservationService.js.map +1 -0
  330. package/dist/observation/XenoUseObservationSource.d.ts +42 -0
  331. package/dist/observation/XenoUseObservationSource.d.ts.map +1 -0
  332. package/dist/observation/XenoUseObservationSource.js +104 -0
  333. package/dist/observation/XenoUseObservationSource.js.map +1 -0
  334. package/dist/observation/XenoUseRunObserver.d.ts +140 -0
  335. package/dist/observation/XenoUseRunObserver.d.ts.map +1 -0
  336. package/dist/observation/XenoUseRunObserver.js +256 -0
  337. package/dist/observation/XenoUseRunObserver.js.map +1 -0
  338. package/dist/pluginMcp/PluginMcpManagerService.d.ts +141 -0
  339. package/dist/pluginMcp/PluginMcpManagerService.d.ts.map +1 -0
  340. package/dist/pluginMcp/PluginMcpManagerService.js +1821 -0
  341. package/dist/pluginMcp/PluginMcpManagerService.js.map +1 -0
  342. package/dist/pluginMcp/pluginMcpTypes.d.ts +349 -0
  343. package/dist/pluginMcp/pluginMcpTypes.d.ts.map +1 -0
  344. package/dist/pluginMcp/pluginMcpTypes.js +2 -0
  345. package/dist/pluginMcp/pluginMcpTypes.js.map +1 -0
  346. package/dist/policy/WorkspacePolicyService.d.ts +83 -0
  347. package/dist/policy/WorkspacePolicyService.d.ts.map +1 -0
  348. package/dist/policy/WorkspacePolicyService.js +809 -0
  349. package/dist/policy/WorkspacePolicyService.js.map +1 -0
  350. package/dist/policy/policyGuard.d.ts +27 -0
  351. package/dist/policy/policyGuard.d.ts.map +1 -0
  352. package/dist/policy/policyGuard.js +143 -0
  353. package/dist/policy/policyGuard.js.map +1 -0
  354. package/dist/policy/policyTypes.d.ts +190 -0
  355. package/dist/policy/policyTypes.d.ts.map +1 -0
  356. package/dist/policy/policyTypes.js +2 -0
  357. package/dist/policy/policyTypes.js.map +1 -0
  358. package/dist/runtime/RuntimeEventStore.d.ts +42 -0
  359. package/dist/runtime/RuntimeEventStore.d.ts.map +1 -0
  360. package/dist/runtime/RuntimeEventStore.js +412 -0
  361. package/dist/runtime/RuntimeEventStore.js.map +1 -0
  362. package/dist/runtime/RuntimeEventStoreRepositoryAdapter.d.ts +21 -0
  363. package/dist/runtime/RuntimeEventStoreRepositoryAdapter.d.ts.map +1 -0
  364. package/dist/runtime/RuntimeEventStoreRepositoryAdapter.js +41 -0
  365. package/dist/runtime/RuntimeEventStoreRepositoryAdapter.js.map +1 -0
  366. package/dist/runtime/RuntimeTimelineProjection.d.ts +5 -0
  367. package/dist/runtime/RuntimeTimelineProjection.d.ts.map +1 -0
  368. package/dist/runtime/RuntimeTimelineProjection.js +705 -0
  369. package/dist/runtime/RuntimeTimelineProjection.js.map +1 -0
  370. package/dist/runtime/runtimeEventTypes.d.ts +73 -0
  371. package/dist/runtime/runtimeEventTypes.d.ts.map +1 -0
  372. package/dist/runtime/runtimeEventTypes.js +2 -0
  373. package/dist/runtime/runtimeEventTypes.js.map +1 -0
  374. package/dist/sdk/SdkNativeAgentTurnExecutionAdapter.d.ts +117 -0
  375. package/dist/sdk/SdkNativeAgentTurnExecutionAdapter.d.ts.map +1 -0
  376. package/dist/sdk/SdkNativeAgentTurnExecutionAdapter.js +214 -0
  377. package/dist/sdk/SdkNativeAgentTurnExecutionAdapter.js.map +1 -0
  378. package/dist/session/AgentSessionService.d.ts +285 -0
  379. package/dist/session/AgentSessionService.d.ts.map +1 -0
  380. package/dist/session/AgentSessionService.js +444 -0
  381. package/dist/session/AgentSessionService.js.map +1 -0
  382. package/dist/session/bufferedSessionPty.d.ts +27 -0
  383. package/dist/session/bufferedSessionPty.d.ts.map +1 -0
  384. package/dist/session/bufferedSessionPty.js +49 -0
  385. package/dist/session/bufferedSessionPty.js.map +1 -0
  386. package/dist/session/renderSupport.d.ts +53 -0
  387. package/dist/session/renderSupport.d.ts.map +1 -0
  388. package/dist/session/renderSupport.js +41 -0
  389. package/dist/session/renderSupport.js.map +1 -0
  390. package/dist/session/runtimeEventChannel.d.ts +56 -0
  391. package/dist/session/runtimeEventChannel.d.ts.map +1 -0
  392. package/dist/session/runtimeEventChannel.js +53 -0
  393. package/dist/session/runtimeEventChannel.js.map +1 -0
  394. package/dist/state/JsonAgentStateRepository.d.ts +29 -0
  395. package/dist/state/JsonAgentStateRepository.d.ts.map +1 -0
  396. package/dist/state/JsonAgentStateRepository.js +165 -0
  397. package/dist/state/JsonAgentStateRepository.js.map +1 -0
  398. package/dist/state/SqliteAgentStateRepository.d.ts +58 -0
  399. package/dist/state/SqliteAgentStateRepository.d.ts.map +1 -0
  400. package/dist/state/SqliteAgentStateRepository.js +777 -0
  401. package/dist/state/SqliteAgentStateRepository.js.map +1 -0
  402. package/dist/state/createAgentStateRepository.d.ts +4 -0
  403. package/dist/state/createAgentStateRepository.d.ts.map +1 -0
  404. package/dist/state/createAgentStateRepository.js +12 -0
  405. package/dist/state/createAgentStateRepository.js.map +1 -0
  406. package/dist/state/stateSanitizers.d.ts +7 -0
  407. package/dist/state/stateSanitizers.d.ts.map +1 -0
  408. package/dist/state/stateSanitizers.js +87 -0
  409. package/dist/state/stateSanitizers.js.map +1 -0
  410. package/dist/subagents/AcpSubagentExecutionAdapter.d.ts +12 -0
  411. package/dist/subagents/AcpSubagentExecutionAdapter.d.ts.map +1 -0
  412. package/dist/subagents/AcpSubagentExecutionAdapter.js +119 -0
  413. package/dist/subagents/AcpSubagentExecutionAdapter.js.map +1 -0
  414. package/dist/subagents/CliSubagentExecutionAdapter.d.ts +13 -0
  415. package/dist/subagents/CliSubagentExecutionAdapter.d.ts.map +1 -0
  416. package/dist/subagents/CliSubagentExecutionAdapter.js +217 -0
  417. package/dist/subagents/CliSubagentExecutionAdapter.js.map +1 -0
  418. package/dist/subagents/HostTurnSubagentExecutionAdapter.d.ts +78 -0
  419. package/dist/subagents/HostTurnSubagentExecutionAdapter.d.ts.map +1 -0
  420. package/dist/subagents/HostTurnSubagentExecutionAdapter.js +160 -0
  421. package/dist/subagents/HostTurnSubagentExecutionAdapter.js.map +1 -0
  422. package/dist/subagents/SubagentRunService.d.ts +103 -0
  423. package/dist/subagents/SubagentRunService.d.ts.map +1 -0
  424. package/dist/subagents/SubagentRunService.js +1183 -0
  425. package/dist/subagents/SubagentRunService.js.map +1 -0
  426. package/dist/subagents/SubagentScheduler.d.ts +167 -0
  427. package/dist/subagents/SubagentScheduler.d.ts.map +1 -0
  428. package/dist/subagents/SubagentScheduler.js +530 -0
  429. package/dist/subagents/SubagentScheduler.js.map +1 -0
  430. package/dist/subagents/TeamAgentRouter.d.ts +104 -0
  431. package/dist/subagents/TeamAgentRouter.d.ts.map +1 -0
  432. package/dist/subagents/TeamAgentRouter.js +435 -0
  433. package/dist/subagents/TeamAgentRouter.js.map +1 -0
  434. package/dist/subagents/capabilityMatcher.d.ts +3 -0
  435. package/dist/subagents/capabilityMatcher.d.ts.map +1 -0
  436. package/dist/subagents/capabilityMatcher.js +127 -0
  437. package/dist/subagents/capabilityMatcher.js.map +1 -0
  438. package/dist/subagents/subagentRunPort.d.ts +43 -0
  439. package/dist/subagents/subagentRunPort.d.ts.map +1 -0
  440. package/dist/subagents/subagentRunPort.js +24 -0
  441. package/dist/subagents/subagentRunPort.js.map +1 -0
  442. package/dist/subagents/subagentTypes.d.ts +330 -0
  443. package/dist/subagents/subagentTypes.d.ts.map +1 -0
  444. package/dist/subagents/subagentTypes.js +2 -0
  445. package/dist/subagents/subagentTypes.js.map +1 -0
  446. package/dist/subagents/subagentWorkspaceAuthority.d.ts +29 -0
  447. package/dist/subagents/subagentWorkspaceAuthority.d.ts.map +1 -0
  448. package/dist/subagents/subagentWorkspaceAuthority.js +173 -0
  449. package/dist/subagents/subagentWorkspaceAuthority.js.map +1 -0
  450. package/dist/support/SupportDiagnosticsService.d.ts +87 -0
  451. package/dist/support/SupportDiagnosticsService.d.ts.map +1 -0
  452. package/dist/support/SupportDiagnosticsService.js +1199 -0
  453. package/dist/support/SupportDiagnosticsService.js.map +1 -0
  454. package/dist/turns/DurableInterruptedTurnStore.d.ts +14 -0
  455. package/dist/turns/DurableInterruptedTurnStore.d.ts.map +1 -0
  456. package/dist/turns/DurableInterruptedTurnStore.js +63 -0
  457. package/dist/turns/DurableInterruptedTurnStore.js.map +1 -0
  458. package/dist/turns/interruptedTurns.d.ts +50 -0
  459. package/dist/turns/interruptedTurns.d.ts.map +1 -0
  460. package/dist/turns/interruptedTurns.js +54 -0
  461. package/dist/turns/interruptedTurns.js.map +1 -0
  462. package/dist/turns/turnAdmission.d.ts +113 -0
  463. package/dist/turns/turnAdmission.d.ts.map +1 -0
  464. package/dist/turns/turnAdmission.js +136 -0
  465. package/dist/turns/turnAdmission.js.map +1 -0
  466. package/dist/workspace/WorkspaceHostService.d.ts +126 -0
  467. package/dist/workspace/WorkspaceHostService.d.ts.map +1 -0
  468. package/dist/workspace/WorkspaceHostService.js +841 -0
  469. package/dist/workspace/WorkspaceHostService.js.map +1 -0
  470. package/dist/workspace/WorkspaceShellService.d.ts +71 -0
  471. package/dist/workspace/WorkspaceShellService.d.ts.map +1 -0
  472. package/dist/workspace/WorkspaceShellService.js +273 -0
  473. package/dist/workspace/WorkspaceShellService.js.map +1 -0
  474. package/dist/workspace/fileAssociations.d.ts +12 -0
  475. package/dist/workspace/fileAssociations.d.ts.map +1 -0
  476. package/dist/workspace/fileAssociations.js +202 -0
  477. package/dist/workspace/fileAssociations.js.map +1 -0
  478. package/dist/workspace/scrollbackBuffer.d.ts +48 -0
  479. package/dist/workspace/scrollbackBuffer.d.ts.map +1 -0
  480. package/dist/workspace/scrollbackBuffer.js +94 -0
  481. package/dist/workspace/scrollbackBuffer.js.map +1 -0
  482. package/package.json +42 -0
@@ -0,0 +1,101 @@
1
+ import { UnavailableCoordinationLaneBridge, } from '../coordination/laneBridge.js';
2
+ import { XENO_ACP_COORDINATION_CLAIM_METHOD, XENO_ACP_COORDINATION_QUERY_METHOD, XENO_ACP_COORDINATION_SEND_METHOD, } from './AcpCoordinationBridge.js';
3
+ import { AcpUnsupportedMethodError } from './acpErrors.js';
4
+ export const XENO_ACP_META_KEY = 'xeno.dev';
5
+ export const XENO_ACP_CHOOSE_DIRECTORY_METHOD = 'xeno.dev/choose_directory';
6
+ export const XENO_ACP_CHOOSE_WORKSPACE_PLACEMENT_METHOD = 'xeno.dev/choose_workspace_placement';
7
+ /**
8
+ * Every host method an ACP agent may call, by the name it is ADVERTISED under.
9
+ *
10
+ * 🔴 ONE table, because dispatch and advertisement are two halves of the same
11
+ * fact and a method with only one of them is unreachable.
12
+ *
13
+ * Advertisement is not documentation: `initialize` sends this list, and an
14
+ * agent that never receives a method's name never calls it. A dispatcher
15
+ * handling a method nobody was told about is "built, tested, unreachable"
16
+ * wearing a protocol — the shape this repo has now hit five times. Deriving the
17
+ * advertisement from this array makes the mismatch unrepresentable rather than
18
+ * merely tested for; a mutation setting one entry to `false` no longer compiles
19
+ * into anything, because there is nowhere to write it.
20
+ */
21
+ export const XENO_ACP_HOST_REQUEST_METHODS = {
22
+ chooseDirectory: XENO_ACP_CHOOSE_DIRECTORY_METHOD,
23
+ chooseWorkspacePlacement: XENO_ACP_CHOOSE_WORKSPACE_PLACEMENT_METHOD,
24
+ coordinationSend: XENO_ACP_COORDINATION_SEND_METHOD,
25
+ coordinationQuery: XENO_ACP_COORDINATION_QUERY_METHOD,
26
+ coordinationClaim: XENO_ACP_COORDINATION_CLAIM_METHOD,
27
+ };
28
+ /** The `_meta['xeno.dev'].hostRequests` payload, derived, never hand-listed. */
29
+ export function xenoAcpHostRequestAdvertisement() {
30
+ return Object.fromEntries(Object.keys(XENO_ACP_HOST_REQUEST_METHODS).map((name) => [name, true]));
31
+ }
32
+ export class FailClosedAcpHostBridge {
33
+ async chooseDirectory() {
34
+ return {
35
+ cancelled: true,
36
+ error: 'XENO ACP host choose-directory bridge is not available.',
37
+ };
38
+ }
39
+ async chooseWorkspacePlacement() {
40
+ return {
41
+ cancelled: true,
42
+ error: 'XENO ACP host workspace-placement bridge is not available.',
43
+ };
44
+ }
45
+ }
46
+ export function parseChooseDirectoryRequest(value) {
47
+ if (!value || typeof value !== 'object' || Array.isArray(value))
48
+ return {};
49
+ const record = value;
50
+ return {
51
+ sessionId: typeof record.sessionId === 'string' && record.sessionId.trim() ? record.sessionId.trim() : undefined,
52
+ requestId: typeof record.requestId === 'string' && record.requestId.trim() ? record.requestId.trim() : undefined,
53
+ title: typeof record.title === 'string' && record.title.trim() ? record.title.trim().slice(0, 160) : undefined,
54
+ toolCallId: typeof record.toolCallId === 'string' && record.toolCallId.trim()
55
+ ? record.toolCallId.trim().slice(0, 256)
56
+ : undefined,
57
+ };
58
+ }
59
+ export function parseChooseWorkspacePlacementRequest(value) {
60
+ if (!value || typeof value !== 'object' || Array.isArray(value))
61
+ return {};
62
+ const record = value;
63
+ return {
64
+ sessionId: typeof record.sessionId === 'string' && record.sessionId.trim() ? record.sessionId.trim() : undefined,
65
+ requestId: typeof record.requestId === 'string' && record.requestId.trim() ? record.requestId.trim() : undefined,
66
+ directory: typeof record.directory === 'string' && record.directory.trim() ? record.directory.trim().slice(0, 2000) : undefined,
67
+ title: typeof record.title === 'string' && record.title.trim() ? record.title.trim().slice(0, 160) : undefined,
68
+ toolCallId: typeof record.toolCallId === 'string' && record.toolCallId.trim()
69
+ ? record.toolCallId.trim().slice(0, 256)
70
+ : undefined,
71
+ };
72
+ }
73
+ export async function handleAcpHostExtensionRequest(method, params, bridge = new FailClosedAcpHostBridge(),
74
+ /**
75
+ * Coordination — §5.2b's three primitives, on the surface that already exists.
76
+ *
77
+ * 🔴 Defaults to the UNAVAILABLE bridge, not to a working one and not to
78
+ * silence. A host without coordination mounted must say so by name: "no
79
+ * peers" and "this host cannot coordinate" are the same empty list and
80
+ * opposite meanings, and an agent told the first concludes it is working
81
+ * alone — then edits a file another run has claimed.
82
+ */
83
+ coordination = new UnavailableCoordinationLaneBridge()) {
84
+ if (method === XENO_ACP_CHOOSE_DIRECTORY_METHOD) {
85
+ return bridge.chooseDirectory(parseChooseDirectoryRequest(params));
86
+ }
87
+ if (method === XENO_ACP_CHOOSE_WORKSPACE_PLACEMENT_METHOD) {
88
+ return bridge.chooseWorkspacePlacement(parseChooseWorkspacePlacementRequest(params));
89
+ }
90
+ if (method === XENO_ACP_COORDINATION_SEND_METHOD)
91
+ return coordination.send(params);
92
+ if (method === XENO_ACP_COORDINATION_QUERY_METHOD)
93
+ return coordination.query(params);
94
+ if (method === XENO_ACP_COORDINATION_CLAIM_METHOD)
95
+ return coordination.claim(params);
96
+ throw new AcpUnsupportedMethodError(method);
97
+ }
98
+ export function cancelAcpHostBridge(bridge, reason = 'ACP prompt cancelled.') {
99
+ bridge.cancelOutstanding?.(reason);
100
+ }
101
+ //# sourceMappingURL=AcpHostBridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AcpHostBridge.js","sourceRoot":"","sources":["../../src/acp/AcpHostBridge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,77 @@
1
+ import type { AcpPermissionOutcome, AcpPermissionRequest } from './acpTypes.js';
2
+ import type { AcpPermissionBridge } from './AcpPermissionBridge.js';
3
+ /**
4
+ * THE INTERACTIVE HALF of ACP permissions (ADE spec §10b.0).
5
+ *
6
+ * `PolicyGatedAcpPermissionBridge` decides what stored rules can decide. This is
7
+ * the delegate it falls back to: it asks a human.
8
+ *
9
+ * Until now there was no such delegate, so the composed adapter fell through to
10
+ * `FailClosedAcpPermissionBridge` and every ACP permission request was refused
11
+ * without anyone being asked.
12
+ *
13
+ * ## Why this publishes through the host rather than to a window
14
+ *
15
+ * The SDK-native lane raises its prompts with `mainWindow.webContents.send`,
16
+ * which bypasses the host entirely — which is why the contract advertises
17
+ * `elicitation.permission.requested` and the host has never once published it
18
+ * (`createElicitationSurfaceMessenger()` had no callers).
19
+ *
20
+ * This bridge takes that messenger instead. The host publishes, surfaces
21
+ * subscribe, and the renderer stays a renderer: it is handed a request and
22
+ * returns an answer, and holds no authority over the outcome (§7). It also
23
+ * means the prompt reaches EVERY attached surface rather than one window, which
24
+ * is a prerequisite for the detached host.
25
+ *
26
+ * ## Fail-closed, deliberately and visibly
27
+ *
28
+ * Anything other than an explicit grant — a denial, a cancelled turn, a timeout,
29
+ * a shutdown — resolves to a refusal. The one thing that must never happen is a
30
+ * request answered "allow" because nobody answered it.
31
+ */
32
+ export interface AcpInteractivePermissionSurfaceMessenger {
33
+ send(channel: string, payload: Record<string, unknown>): void;
34
+ }
35
+ export interface AcpInteractivePermissionBridgeOptions {
36
+ messenger: AcpInteractivePermissionSurfaceMessenger;
37
+ /**
38
+ * How long to wait for a human before refusing. A permission prompt with no
39
+ * answer must not pin an agent turn open forever.
40
+ */
41
+ timeoutMs?: undefined | number;
42
+ newPermissionId?: undefined | (() => string);
43
+ }
44
+ export interface AcpPermissionAnswer {
45
+ permissionId: string;
46
+ granted: boolean;
47
+ /**
48
+ * An explicit choice among the options the agent offered — how a surface
49
+ * expresses "allow always" rather than "allow once".
50
+ *
51
+ * VALIDATED against the offered set before use. The renderer is untrusted
52
+ * (§7): an id it invents must never be forwarded to an agent, because the
53
+ * agent decides what each id means and an unknown one could map to anything.
54
+ */
55
+ selectedOptionId?: undefined | string;
56
+ }
57
+ /** Whether this bridge owned the answered permission id. */
58
+ export interface AcpPermissionAnswerResult {
59
+ handled: boolean;
60
+ }
61
+ export declare class AcpInteractivePermissionBridge implements AcpPermissionBridge {
62
+ private readonly messenger;
63
+ private readonly timeoutMs;
64
+ private readonly newPermissionId;
65
+ private readonly pending;
66
+ constructor(options: AcpInteractivePermissionBridgeOptions);
67
+ requestPermission(request: AcpPermissionRequest): Promise<AcpPermissionOutcome>;
68
+ /**
69
+ * Routes a surface answer. Returns `handled: false` when the id belongs to
70
+ * another lane, so a composite interaction service can fall through rather
71
+ * than swallowing an SDK-native answer.
72
+ */
73
+ answerPermission(answer: AcpPermissionAnswer): AcpPermissionAnswerResult;
74
+ cancelOutstanding(): void;
75
+ get pendingCount(): number;
76
+ }
77
+ //# sourceMappingURL=AcpInteractivePermissionBridge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AcpInteractivePermissionBridge.d.ts","sourceRoot":"","sources":["../../src/acp/AcpInteractivePermissionBridge.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAA;AAC/E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAGnE;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,MAAM,WAAW,wCAAwC;IACvD,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAA;CAC9D;AAED,MAAM,WAAW,qCAAqC;IACpD,SAAS,EAAE,wCAAwC,CAAA;IACnD;;;OAGG;IACH,SAAS,CAAC,EAAE,SAAS,GAAG,MAAM,CAAA;IAC9B,eAAe,CAAC,EAAE,SAAS,GAAG,CAAC,MAAM,MAAM,CAAC,CAAA;CAC7C;AAED,MAAM,WAAW,mBAAmB;IAClC,YAAY,EAAE,MAAM,CAAA;IACpB,OAAO,EAAE,OAAO,CAAA;IAChB;;;;;;;OAOG;IACH,gBAAgB,CAAC,EAAE,SAAS,GAAG,MAAM,CAAA;CACtC;AAED,4DAA4D;AAC5D,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,OAAO,CAAA;CACjB;AAUD,qBAAa,8BAA+B,YAAW,mBAAmB;IACxE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA0C;IACpE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAQ;IAClC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAc;IAC9C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA0C;gBAEtD,OAAO,EAAE,qCAAqC;IAMpD,iBAAiB,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAuDrF;;;;OAIG;IACH,gBAAgB,CAAC,MAAM,EAAE,mBAAmB,GAAG,yBAAyB;IA+CxE,iBAAiB,IAAI,IAAI;IAMzB,IAAI,YAAY,IAAI,MAAM,CAEzB;CACF"}
@@ -0,0 +1,127 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ import { selectOptionForDecision } from './AcpPermissionPolicy.js';
3
+ const DEFAULT_TIMEOUT_MS = 10 * 60_000;
4
+ export class AcpInteractivePermissionBridge {
5
+ messenger;
6
+ timeoutMs;
7
+ newPermissionId;
8
+ pending = new Map();
9
+ constructor(options) {
10
+ this.messenger = options.messenger;
11
+ this.timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;
12
+ this.newPermissionId = options.newPermissionId || (() => `acp-permission-${randomUUID()}`);
13
+ }
14
+ async requestPermission(request) {
15
+ // Prefer the host's journalled id — see AcpPermissionRequest.hostPermissionId.
16
+ // Minting a second id here is how a prompt becomes unanswerable.
17
+ const permissionId = request.hostPermissionId || this.newPermissionId();
18
+ return await new Promise((resolve) => {
19
+ const settle = (outcome) => {
20
+ const entry = this.pending.get(permissionId);
21
+ if (!entry)
22
+ return;
23
+ if (entry.timer)
24
+ clearTimeout(entry.timer);
25
+ this.pending.delete(permissionId);
26
+ resolve(outcome);
27
+ };
28
+ const timer = this.timeoutMs > 0
29
+ ? setTimeout(() => { settle({ outcome: 'cancelled' }); }, this.timeoutMs)
30
+ : undefined;
31
+ timer?.unref?.();
32
+ this.pending.set(permissionId, { resolve: settle, request, timer });
33
+ try {
34
+ // Same channel and shape the renderer already renders for the
35
+ // SDK-native lane, so no second prompt UI is needed. `toolName` and
36
+ // `path` come from the ACP toolCall, which is why carrying it through
37
+ // the parse was the prerequisite for this.
38
+ this.messenger.send('agent:permission-request', {
39
+ // REQUIRED by the surface: it routes the prompt onto a conversation
40
+ // by this id and drops any permission event without one.
41
+ requestId: request.hostRequestId,
42
+ permissionId,
43
+ source: 'acp',
44
+ sessionId: request.sessionId,
45
+ toolName: request.toolCall?.title || request.toolCall?.kind || 'ACP tool call',
46
+ toolKind: request.toolCall?.kind,
47
+ // A human-readable action description, matching how the SDK-native
48
+ // lane uses this field (it sends `actionText`, not a filesystem path).
49
+ path: (request.toolCall?.locations || []).map((location) => location.path).join(', ')
50
+ || request.toolCall?.title
51
+ || request.toolCall?.kind
52
+ || 'ACP tool call',
53
+ directory: (request.toolCall?.locations || [])[0]?.path,
54
+ options: (request.options || []).map((option) => ({
55
+ id: option.id,
56
+ label: option.label,
57
+ kind: option.kind,
58
+ })),
59
+ allowAlwaysOptionId: (request.options || []).find((option) => option.kind === 'allow_always')?.id,
60
+ rejectAlwaysOptionId: (request.options || []).find((option) => option.kind === 'reject_always')?.id,
61
+ });
62
+ }
63
+ catch {
64
+ // A surface that cannot be reached is a refusal, not an approval.
65
+ settle({ outcome: 'cancelled' });
66
+ }
67
+ });
68
+ }
69
+ /**
70
+ * Routes a surface answer. Returns `handled: false` when the id belongs to
71
+ * another lane, so a composite interaction service can fall through rather
72
+ * than swallowing an SDK-native answer.
73
+ */
74
+ answerPermission(answer) {
75
+ const entry = this.pending.get(answer.permissionId);
76
+ if (!entry)
77
+ return { handled: false };
78
+ /**
79
+ * An explicit choice is honoured for BOTH directions — "always deny" is as
80
+ * real a choice as "always allow" — but only after two checks:
81
+ *
82
+ * 1. the id was actually offered by the agent, and
83
+ * 2. its KIND agrees with `granted`.
84
+ *
85
+ * The second matters more than it looks. Without it, a renderer bug or a
86
+ * hostile one could send `granted: false` alongside an `allow_always` id and
87
+ * the host would grant a permission the user had just refused. A mismatch
88
+ * is therefore ignored in favour of the safe mapping, never trusted.
89
+ */
90
+ const offered = answer.selectedOptionId
91
+ ? (entry.request.options || []).find((option) => option.id === answer.selectedOptionId)
92
+ : undefined;
93
+ const agreesWithAnswer = offered?.kind
94
+ ? (answer.granted
95
+ ? offered.kind === 'allow_once' || offered.kind === 'allow_always'
96
+ : offered.kind === 'reject_once' || offered.kind === 'reject_always')
97
+ : false;
98
+ if (offered && agreesWithAnswer) {
99
+ entry.resolve({ outcome: 'selected', selectedOptionId: offered.id });
100
+ return { handled: true };
101
+ }
102
+ if (!answer.granted) {
103
+ const rejection = selectOptionForDecision(entry.request.options, 'deny');
104
+ entry.resolve(rejection
105
+ ? { outcome: 'selected', selectedOptionId: rejection.id }
106
+ : { outcome: 'cancelled' });
107
+ return { handled: true };
108
+ }
109
+ const approval = selectOptionForDecision(entry.request.options, 'allow');
110
+ // A grant we cannot express is NOT an approval. Selecting an arbitrary
111
+ // option id here would authorise something other than what the user
112
+ // approved, so it degrades to a refusal.
113
+ entry.resolve(approval
114
+ ? { outcome: 'selected', selectedOptionId: approval.id }
115
+ : { outcome: 'cancelled' });
116
+ return { handled: true };
117
+ }
118
+ cancelOutstanding() {
119
+ for (const permissionId of [...this.pending.keys()]) {
120
+ this.pending.get(permissionId)?.resolve({ outcome: 'cancelled' });
121
+ }
122
+ }
123
+ get pendingCount() {
124
+ return this.pending.size;
125
+ }
126
+ }
127
+ //# sourceMappingURL=AcpInteractivePermissionBridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AcpInteractivePermissionBridge.js","sourceRoot":"","sources":["../../src/acp/AcpInteractivePermissionBridge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { AcpPermissionOutcome, AcpPermissionRequest } from './acpTypes.js';
2
+ export interface AcpPermissionBridge {
3
+ requestPermission(request: AcpPermissionRequest): Promise<AcpPermissionOutcome>;
4
+ cancelOutstanding?(reason?: undefined | string): void;
5
+ }
6
+ export declare class FailClosedAcpPermissionBridge implements AcpPermissionBridge {
7
+ requestPermission(): Promise<AcpPermissionOutcome>;
8
+ }
9
+ export declare class DeterministicAcpPermissionBridge implements AcpPermissionBridge {
10
+ private readonly decision;
11
+ private cancelled;
12
+ constructor(decision?: AcpPermissionOutcome);
13
+ requestPermission(request: AcpPermissionRequest): Promise<AcpPermissionOutcome>;
14
+ cancelOutstanding(): void;
15
+ }
16
+ export declare function parsePermissionRequest(value: unknown): AcpPermissionRequest;
17
+ export declare function handleAcpPermissionRequest(request: unknown, bridge?: AcpPermissionBridge): Promise<Record<string, unknown>>;
18
+ export declare function cancelAcpPermissionBridge(bridge: AcpPermissionBridge, reason?: string): void;
19
+ //# sourceMappingURL=AcpPermissionBridge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AcpPermissionBridge.d.ts","sourceRoot":"","sources":["../../src/acp/AcpPermissionBridge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EAEpB,oBAAoB,EAGrB,MAAM,eAAe,CAAA;AAEtB,MAAM,WAAW,mBAAmB;IAClC,iBAAiB,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAA;IAC/E,iBAAiB,CAAC,CAAC,MAAM,CAAC,EAAE,SAAS,GAAG,MAAM,GAAG,IAAI,CAAA;CACtD;AAED,qBAAa,6BAA8B,YAAW,mBAAmB;IACjE,iBAAiB,IAAI,OAAO,CAAC,oBAAoB,CAAC;CAGzD;AAED,qBAAa,gCAAiC,YAAW,mBAAmB;IAG9D,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAFrC,OAAO,CAAC,SAAS,CAAQ;gBAEI,QAAQ,GAAE,oBAAyE;IAE1G,iBAAiB,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAWrF,iBAAiB,IAAI,IAAI;CAG1B;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,oBAAoB,CA6B3E;AA6CD,wBAAsB,0BAA0B,CAC9C,OAAO,EAAE,OAAO,EAChB,MAAM,GAAE,mBAAyD,GAChE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAKlC;AAED,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,mBAAmB,EAAE,MAAM,SAA0B,GAAG,IAAI,CAI7G"}
@@ -0,0 +1,110 @@
1
+ export class FailClosedAcpPermissionBridge {
2
+ async requestPermission() {
3
+ return { outcome: 'cancelled' };
4
+ }
5
+ }
6
+ export class DeterministicAcpPermissionBridge {
7
+ decision;
8
+ cancelled = false;
9
+ constructor(decision = { outcome: 'selected', selectedOptionId: 'allow' }) {
10
+ this.decision = decision;
11
+ }
12
+ async requestPermission(request) {
13
+ if (this.cancelled)
14
+ return { outcome: 'cancelled' };
15
+ if (this.decision.outcome === 'selected') {
16
+ const requestedIds = new Set((request.options || []).map((option) => option.id));
17
+ if (requestedIds.size > 0 && !requestedIds.has(this.decision.selectedOptionId)) {
18
+ return { outcome: 'cancelled' };
19
+ }
20
+ }
21
+ return this.decision;
22
+ }
23
+ cancelOutstanding() {
24
+ this.cancelled = true;
25
+ }
26
+ }
27
+ export function parsePermissionRequest(value) {
28
+ if (!value || typeof value !== 'object' || Array.isArray(value))
29
+ return {};
30
+ const record = value;
31
+ const options = Array.isArray(record.options)
32
+ ? record.options
33
+ .filter((option) => !!option && typeof option === 'object' && !Array.isArray(option))
34
+ .map((option) => ({
35
+ id: typeof option.id === 'string'
36
+ ? option.id
37
+ : typeof option.optionId === 'string' ? option.optionId : '',
38
+ label: typeof option.label === 'string'
39
+ ? option.label
40
+ : typeof option.name === 'string' ? option.name : undefined,
41
+ description: typeof option.description === 'string' ? option.description : undefined,
42
+ ...(typeof option.kind === 'string' && OPTION_KINDS.has(option.kind)
43
+ ? { kind: option.kind }
44
+ : {}),
45
+ }))
46
+ .filter((option) => option.id)
47
+ : undefined;
48
+ return {
49
+ sessionId: typeof record.sessionId === 'string' ? record.sessionId : undefined,
50
+ prompt: typeof record.prompt === 'string' ? record.prompt : undefined,
51
+ options,
52
+ toolCall: parsePermissionToolCall(record.toolCall),
53
+ metadata: record.metadata && typeof record.metadata === 'object' && !Array.isArray(record.metadata)
54
+ ? record.metadata
55
+ : undefined,
56
+ };
57
+ }
58
+ const OPTION_KINDS = new Set([
59
+ 'allow_once', 'allow_always', 'reject_once', 'reject_always',
60
+ ]);
61
+ const TOOL_KINDS = new Set([
62
+ 'read', 'edit', 'delete', 'move', 'search', 'execute', 'think', 'fetch', 'switch_mode', 'other',
63
+ ]);
64
+ /**
65
+ * ACP requires `toolCall` on every permission request. It is the only thing
66
+ * that says WHAT is being permitted, so it is parsed defensively rather than
67
+ * trusted: an agent is untrusted input, and a malformed field must degrade to
68
+ * "unknown" instead of throwing inside the permission path — a parser that
69
+ * throws here would fail a permission request open or closed by accident
70
+ * rather than by decision.
71
+ */
72
+ function parsePermissionToolCall(value) {
73
+ if (!value || typeof value !== 'object' || Array.isArray(value))
74
+ return undefined;
75
+ const record = value;
76
+ const kind = typeof record.kind === 'string' && TOOL_KINDS.has(record.kind)
77
+ ? record.kind
78
+ : undefined;
79
+ const locations = Array.isArray(record.locations)
80
+ ? record.locations
81
+ .filter((entry) => !!entry && typeof entry === 'object' && !Array.isArray(entry))
82
+ .map((entry) => ({
83
+ path: typeof entry.path === 'string' ? entry.path : '',
84
+ ...(typeof entry.line === 'number' && Number.isFinite(entry.line) ? { line: entry.line } : {}),
85
+ }))
86
+ .filter((entry) => entry.path)
87
+ : undefined;
88
+ const toolCall = {
89
+ ...(typeof record.toolCallId === 'string' ? { toolCallId: record.toolCallId } : {}),
90
+ ...(typeof record.title === 'string' ? { title: record.title } : {}),
91
+ ...(kind ? { kind } : {}),
92
+ ...(locations && locations.length > 0 ? { locations } : {}),
93
+ ...(record.rawInput && typeof record.rawInput === 'object' && !Array.isArray(record.rawInput)
94
+ ? { rawInput: record.rawInput }
95
+ : {}),
96
+ };
97
+ return Object.keys(toolCall).length > 0 ? toolCall : undefined;
98
+ }
99
+ export async function handleAcpPermissionRequest(request, bridge = new FailClosedAcpPermissionBridge()) {
100
+ const outcome = await bridge.requestPermission(parsePermissionRequest(request));
101
+ return outcome.outcome === 'selected'
102
+ ? { outcome: { outcome: 'selected', optionId: outcome.selectedOptionId } }
103
+ : { outcome: { outcome: 'cancelled' } };
104
+ }
105
+ export function cancelAcpPermissionBridge(bridge, reason = 'ACP prompt cancelled.') {
106
+ if (bridge.cancelOutstanding) {
107
+ bridge.cancelOutstanding(reason);
108
+ }
109
+ }
110
+ //# sourceMappingURL=AcpPermissionBridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AcpPermissionBridge.js","sourceRoot":"","sources":["../../src/acp/AcpPermissionBridge.ts"],"names":[],"mappings":"AAaA,MAAM,OAAO,6BAA6B;IACxC,KAAK,CAAC,iBAAiB;QACrB,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,CAAA;IACjC,CAAC;CACF;AAED,MAAM,OAAO,gCAAgC;IAGd;IAFrB,SAAS,GAAG,KAAK,CAAA;IAEzB,YAA6B,WAAiC,EAAE,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,OAAO,EAAE;QAAnF,aAAQ,GAAR,QAAQ,CAA2E;IAAG,CAAC;IAEpH,KAAK,CAAC,iBAAiB,CAAC,OAA6B;QACnD,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,CAAA;QACnD,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;YACzC,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAA;YAChF,IAAI,YAAY,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;gBAC/E,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,CAAA;YACjC,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC,QAAQ,CAAA;IACtB,CAAC;IAED,iBAAiB;QACf,IAAI,CAAC,SAAS,GAAG,IAAI,CAAA;IACvB,CAAC;CACF;AAED,MAAM,UAAU,sBAAsB,CAAC,KAAc;IACnD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,CAAA;IAC1E,MAAM,MAAM,GAAG,KAAgC,CAAA;IAC/C,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC;QAC3C,CAAC,CAAC,MAAM,CAAC,OAAO;aACb,MAAM,CAAC,CAAC,MAAM,EAAqC,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;aACvH,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAChB,EAAE,EAAE,OAAO,MAAM,CAAC,EAAE,KAAK,QAAQ;gBAC/B,CAAC,CAAC,MAAM,CAAC,EAAE;gBACX,CAAC,CAAC,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;YAC9D,KAAK,EAAE,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ;gBACrC,CAAC,CAAC,MAAM,CAAC,KAAK;gBACd,CAAC,CAAC,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;YAC7D,WAAW,EAAE,OAAO,MAAM,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;YACpF,GAAG,CAAC,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,IAA+B,CAAC;gBAC7F,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAA+B,EAAE;gBAClD,CAAC,CAAC,EAAE,CAAC;SACR,CAAC,CAAC;aACF,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;QAChC,CAAC,CAAC,SAAS,CAAA;IACb,OAAO;QACL,SAAS,EAAE,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;QAC9E,MAAM,EAAE,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;QACrE,OAAO;QACP,QAAQ,EAAE,uBAAuB,CAAC,MAAM,CAAC,QAAQ,CAAC;QAClD,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC;YACjG,CAAC,CAAC,MAAM,CAAC,QAAmC;YAC5C,CAAC,CAAC,SAAS;KACd,CAAA;AACH,CAAC;AAED,MAAM,YAAY,GAAG,IAAI,GAAG,CAA0B;IACpD,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe;CAC7D,CAAC,CAAA;AAEF,MAAM,UAAU,GAAG,IAAI,GAAG,CAAc;IACtC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO;CAChG,CAAC,CAAA;AAEF;;;;;;;GAOG;AACH,SAAS,uBAAuB,CAAC,KAAc;IAC7C,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAA;IACjF,MAAM,MAAM,GAAG,KAAgC,CAAA;IAC/C,MAAM,IAAI,GAAG,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,IAAmB,CAAC;QACxF,CAAC,CAAC,MAAM,CAAC,IAAmB;QAC5B,CAAC,CAAC,SAAS,CAAA;IACb,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC;QAC/C,CAAC,CAAC,MAAM,CAAC,SAAS;aACf,MAAM,CAAC,CAAC,KAAK,EAAoC,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;aAClH,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACf,IAAI,EAAE,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;YACtD,GAAG,CAAC,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC/F,CAAC,CAAC;aACF,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;QAChC,CAAC,CAAC,SAAS,CAAA;IACb,MAAM,QAAQ,GAA0B;QACtC,GAAG,CAAC,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnF,GAAG,CAAC,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACpE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzB,GAAG,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,GAAG,CAAC,MAAM,CAAC,QAAQ,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC;YAC3F,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAmC,EAAE;YAC1D,CAAC,CAAC,EAAE,CAAC;KACR,CAAA;IACD,OAAO,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAA;AAChE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,OAAgB,EAChB,SAA8B,IAAI,6BAA6B,EAAE;IAEjE,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC,CAAA;IAC/E,OAAO,OAAO,CAAC,OAAO,KAAK,UAAU;QACnC,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,CAAC,gBAAgB,EAAE,EAAE;QAC1E,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,CAAA;AAC3C,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,MAA2B,EAAE,MAAM,GAAG,uBAAuB;IACrG,IAAI,MAAM,CAAC,iBAAiB,EAAE,CAAC;QAC7B,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAA;IAClC,CAAC;AACH,CAAC"}
@@ -0,0 +1,111 @@
1
+ import type { AcpPermissionOption, AcpPermissionOutcome, AcpPermissionRequest, AcpToolKind } from './acpTypes.js';
2
+ import type { AcpPermissionBridge } from './AcpPermissionBridge.js';
3
+ /**
4
+ * CLIENT-SIDE PERMISSION POLICY (ADE spec §7 "one authority", §9 step 1).
5
+ *
6
+ * ACP's `allow_always` says "remember the choice" and carries NO scope — a
7
+ * `PermissionOption` has `optionId`, `name`, `kind` and nothing else. The
8
+ * protocol therefore cannot express "allow always for paths under X".
9
+ *
10
+ * That is not a gap, it is a relocation, and this file is where the relocation
11
+ * lands: in ACP the CLIENT answers, so the scope algebra belongs here. The user
12
+ * picks "always", WE record what "always" means, and we answer matching requests
13
+ * without asking again. The agent simply asks every time.
14
+ *
15
+ * Why that is better than the agent remembering (which is what the SDK-native
16
+ * lane does today): one policy engine serves every agent, ours and third-party,
17
+ * and the rules are inspectable and auditable in one place. An agent-held policy
18
+ * is per-agent, invisible to the host, and impossible to review across a fleet.
19
+ *
20
+ * ## Rules this file will not bend
21
+ *
22
+ * - **Deny wins.** A matching deny beats any matching allow, whatever the order.
23
+ * - **Every location must be covered.** A rule scoped to one directory must not
24
+ * authorise a tool call that also touches a second, unrelated one.
25
+ * - **Never guess an option.** A stored `allow` is only actionable if the agent
26
+ * actually offered an allow-kind option. If it did not, the decision degrades
27
+ * to `ask` rather than picking something that looks plausible — selecting the
28
+ * wrong option id here means granting the wrong thing.
29
+ * - **Unknown means ask.** No tool call, no kind, or no locations against a
30
+ * path-scoped rule all resolve to `ask`, never to allow.
31
+ */
32
+ export type AcpPermissionDecision = 'allow' | 'deny' | 'ask';
33
+ export interface AcpPermissionRule {
34
+ id: string;
35
+ decision: 'allow' | 'deny';
36
+ /** Restrict to one class of operation. Omitted means any kind. */
37
+ kind?: undefined | AcpToolKind;
38
+ /**
39
+ * Restrict to a directory subtree. Omitted means the rule is UNSCOPED and
40
+ * applies regardless of path — deliberately representable, because "allow all
41
+ * `read`" is a legitimate choice, but callers should treat it as such.
42
+ */
43
+ pathPrefix?: undefined | string;
44
+ createdAt?: undefined | number;
45
+ }
46
+ export interface AcpPermissionPolicyStore {
47
+ list(): AcpPermissionRule[];
48
+ add(rule: AcpPermissionRule): void;
49
+ }
50
+ export declare class InMemoryAcpPermissionPolicyStore implements AcpPermissionPolicyStore {
51
+ private readonly rules;
52
+ constructor(initial?: AcpPermissionRule[]);
53
+ list(): AcpPermissionRule[];
54
+ add(rule: AcpPermissionRule): void;
55
+ }
56
+ /**
57
+ * Case- and separator-insensitive containment with a BOUNDARY check.
58
+ *
59
+ * `C:/repo` must not match `C:/repo-evil`. A bare `startsWith` says it does,
60
+ * and that is the classic way a scoped grant silently becomes a wider one.
61
+ */
62
+ export declare function isWithinPathPrefix(path: string, prefix: string): boolean;
63
+ export interface AcpPermissionPolicyEvaluation {
64
+ decision: AcpPermissionDecision;
65
+ ruleId?: undefined | string;
66
+ }
67
+ export declare function evaluateAcpPermissionPolicy(request: AcpPermissionRequest, rules: readonly AcpPermissionRule[]): AcpPermissionPolicyEvaluation;
68
+ /**
69
+ * The option to select for a decision, or undefined when the agent offered
70
+ * nothing that means it. Undefined must escalate to a human — never a guess.
71
+ */
72
+ export declare function selectOptionForDecision(options: readonly AcpPermissionOption[] | undefined, decision: 'allow' | 'deny'): AcpPermissionOption | undefined;
73
+ /** Derives the rule to store when a user picks an `*_always` option. */
74
+ export declare function ruleFromAlwaysChoice(request: AcpPermissionRequest, optionKind: string, id: string, now: number): AcpPermissionRule | undefined;
75
+ export interface PolicyGatedAcpPermissionBridgeOptions {
76
+ store: AcpPermissionPolicyStore;
77
+ /** Consulted only when policy says `ask`. */
78
+ delegate: AcpPermissionBridge;
79
+ /** Reports every decision, so a silent auto-answer is still observable. */
80
+ onDecision?: undefined | ((event: AcpPermissionPolicyDecisionEvent) => void);
81
+ now?: undefined | (() => number);
82
+ newRuleId?: undefined | (() => string);
83
+ }
84
+ export interface AcpPermissionPolicyDecisionEvent {
85
+ decision: AcpPermissionDecision;
86
+ ruleId?: undefined | string;
87
+ source: 'policy' | 'user';
88
+ outcome: AcpPermissionOutcome;
89
+ /** Set when a decision could not be applied and had to escalate. */
90
+ escalationReason?: undefined | string;
91
+ }
92
+ /**
93
+ * Answers permission requests from stored policy, delegating anything the
94
+ * policy cannot decide.
95
+ *
96
+ * Note it never *reports* an allow it could not actually express: if the policy
97
+ * says allow and the agent offered no allow-kind option, the request escalates
98
+ * with a named reason rather than being answered.
99
+ */
100
+ export declare class PolicyGatedAcpPermissionBridge implements AcpPermissionBridge {
101
+ private readonly store;
102
+ private readonly delegate;
103
+ private readonly onDecision;
104
+ private readonly now;
105
+ private readonly newRuleId;
106
+ private ruleCounter;
107
+ constructor(options: PolicyGatedAcpPermissionBridgeOptions);
108
+ requestPermission(request: AcpPermissionRequest): Promise<AcpPermissionOutcome>;
109
+ cancelOutstanding(reason?: undefined | string): void;
110
+ }
111
+ //# sourceMappingURL=AcpPermissionPolicy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AcpPermissionPolicy.d.ts","sourceRoot":"","sources":["../../src/acp/AcpPermissionPolicy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,WAAW,EACZ,MAAM,eAAe,CAAA;AACtB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAEnE;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,MAAM,MAAM,qBAAqB,GAAG,OAAO,GAAG,MAAM,GAAG,KAAK,CAAA;AAE5D,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAA;IACV,QAAQ,EAAE,OAAO,GAAG,MAAM,CAAA;IAC1B,kEAAkE;IAClE,IAAI,CAAC,EAAE,SAAS,GAAG,WAAW,CAAA;IAC9B;;;;OAIG;IACH,UAAU,CAAC,EAAE,SAAS,GAAG,MAAM,CAAA;IAC/B,SAAS,CAAC,EAAE,SAAS,GAAG,MAAM,CAAA;CAC/B;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,IAAI,iBAAiB,EAAE,CAAA;IAC3B,GAAG,CAAC,IAAI,EAAE,iBAAiB,GAAG,IAAI,CAAA;CACnC;AAED,qBAAa,gCAAiC,YAAW,wBAAwB;IAC/E,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA0B;gBAEpC,OAAO,GAAE,iBAAiB,EAAO;IAI7C,IAAI,IAAI,iBAAiB,EAAE;IAI3B,GAAG,CAAC,IAAI,EAAE,iBAAiB,GAAG,IAAI;CAGnC;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAQxE;AAgBD,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,EAAE,qBAAqB,CAAA;IAC/B,MAAM,CAAC,EAAE,SAAS,GAAG,MAAM,CAAA;CAC5B;AAED,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,oBAAoB,EAC7B,KAAK,EAAE,SAAS,iBAAiB,EAAE,GAClC,6BAA6B,CAS/B;AAKD;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,SAAS,mBAAmB,EAAE,GAAG,SAAS,EACnD,QAAQ,EAAE,OAAO,GAAG,MAAM,GACzB,mBAAmB,GAAG,SAAS,CAOjC;AAED,wEAAwE;AACxE,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,oBAAoB,EAC7B,UAAU,EAAE,MAAM,EAClB,EAAE,EAAE,MAAM,EACV,GAAG,EAAE,MAAM,GACV,iBAAiB,GAAG,SAAS,CAgB/B;AAoBD,MAAM,WAAW,qCAAqC;IACpD,KAAK,EAAE,wBAAwB,CAAA;IAC/B,6CAA6C;IAC7C,QAAQ,EAAE,mBAAmB,CAAA;IAC7B,2EAA2E;IAC3E,UAAU,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,KAAK,EAAE,gCAAgC,KAAK,IAAI,CAAC,CAAA;IAC5E,GAAG,CAAC,EAAE,SAAS,GAAG,CAAC,MAAM,MAAM,CAAC,CAAA;IAChC,SAAS,CAAC,EAAE,SAAS,GAAG,CAAC,MAAM,MAAM,CAAC,CAAA;CACvC;AAED,MAAM,WAAW,gCAAgC;IAC/C,QAAQ,EAAE,qBAAqB,CAAA;IAC/B,MAAM,CAAC,EAAE,SAAS,GAAG,MAAM,CAAA;IAC3B,MAAM,EAAE,QAAQ,GAAG,MAAM,CAAA;IACzB,OAAO,EAAE,oBAAoB,CAAA;IAC7B,oEAAoE;IACpE,gBAAgB,CAAC,EAAE,SAAS,GAAG,MAAM,CAAA;CACtC;AAED;;;;;;;GAOG;AACH,qBAAa,8BAA+B,YAAW,mBAAmB;IACxE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA0B;IAChD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqB;IAC9C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAiE;IAC5F,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAc;IAClC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAc;IACxC,OAAO,CAAC,WAAW,CAAI;gBAEX,OAAO,EAAE,qCAAqC;IAQpD,iBAAiB,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAiCrF,iBAAiB,CAAC,MAAM,CAAC,EAAE,SAAS,GAAG,MAAM,GAAG,IAAI;CAGrD"}