@agimon-ai/doompi 0.0.1-alpha.2 → 0.0.1-alpha.21

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 (944) hide show
  1. package/README.md +437 -452
  2. package/assets/doompi-tui.png +0 -0
  3. package/dist/adapters/bootstrapClaim.cjs +2 -0
  4. package/dist/adapters/bootstrapClaim.cjs.map +1 -0
  5. package/dist/adapters/bootstrapClaim.mjs +2 -0
  6. package/dist/adapters/bootstrapClaim.mjs.map +1 -0
  7. package/dist/adapters/bootstrapLocator.cjs +2 -0
  8. package/dist/adapters/bootstrapLocator.cjs.map +1 -0
  9. package/dist/adapters/bootstrapLocator.d.cts +6 -0
  10. package/dist/adapters/bootstrapLocator.d.cts.map +1 -0
  11. package/dist/adapters/bootstrapLocator.d.mts +6 -0
  12. package/dist/adapters/bootstrapLocator.d.mts.map +1 -0
  13. package/dist/adapters/bootstrapLocator.mjs +2 -0
  14. package/dist/adapters/bootstrapLocator.mjs.map +1 -0
  15. package/dist/adapters/compatibility/antigravity.cjs +2 -0
  16. package/dist/{services → adapters}/compatibility/antigravity.cjs.map +1 -1
  17. package/dist/adapters/compatibility/antigravity.d.cts +11 -0
  18. package/dist/{services → adapters}/compatibility/antigravity.d.cts.map +1 -1
  19. package/dist/adapters/compatibility/antigravity.d.mts +11 -0
  20. package/dist/{services → adapters}/compatibility/antigravity.d.mts.map +1 -1
  21. package/dist/adapters/compatibility/antigravity.mjs +2 -0
  22. package/dist/{services → adapters}/compatibility/antigravity.mjs.map +1 -1
  23. package/dist/adapters/compatibility/codex.cjs +2 -0
  24. package/dist/{services → adapters}/compatibility/codex.cjs.map +1 -1
  25. package/dist/adapters/compatibility/codex.d.cts +19 -0
  26. package/dist/{services → adapters}/compatibility/codex.d.cts.map +1 -1
  27. package/dist/adapters/compatibility/codex.d.mts +19 -0
  28. package/dist/{services → adapters}/compatibility/codex.d.mts.map +1 -1
  29. package/dist/adapters/compatibility/codex.mjs +2 -0
  30. package/dist/{services → adapters}/compatibility/codex.mjs.map +1 -1
  31. package/dist/adapters/compatibility/index.cjs +2 -0
  32. package/dist/adapters/compatibility/index.cjs.map +1 -0
  33. package/dist/adapters/compatibility/index.d.cts +16 -0
  34. package/dist/{services → adapters}/compatibility/index.d.cts.map +1 -1
  35. package/dist/adapters/compatibility/index.d.mts +16 -0
  36. package/dist/{services → adapters}/compatibility/index.d.mts.map +1 -1
  37. package/dist/adapters/compatibility/index.mjs +2 -0
  38. package/dist/adapters/compatibility/index.mjs.map +1 -0
  39. package/dist/adapters/compatibility/process.cjs +2 -0
  40. package/dist/{services → adapters}/compatibility/process.cjs.map +1 -1
  41. package/dist/adapters/compatibility/process.d.cts +35 -0
  42. package/dist/{services → adapters}/compatibility/process.d.cts.map +1 -1
  43. package/dist/adapters/compatibility/process.d.mts +35 -0
  44. package/dist/{services → adapters}/compatibility/process.d.mts.map +1 -1
  45. package/dist/adapters/compatibility/process.mjs +2 -0
  46. package/dist/{services → adapters}/compatibility/process.mjs.map +1 -1
  47. package/dist/adapters/compatibility/shared.cjs +2 -0
  48. package/dist/{services → adapters}/compatibility/shared.cjs.map +1 -1
  49. package/dist/adapters/compatibility/shared.d.cts +33 -0
  50. package/dist/{services → adapters}/compatibility/shared.d.cts.map +1 -1
  51. package/dist/adapters/compatibility/shared.d.mts +33 -0
  52. package/dist/{services → adapters}/compatibility/shared.d.mts.map +1 -1
  53. package/dist/adapters/compatibility/shared.mjs +2 -0
  54. package/dist/{services → adapters}/compatibility/shared.mjs.map +1 -1
  55. package/dist/adapters/compatibilityContext.cjs +2 -0
  56. package/dist/adapters/compatibilityContext.cjs.map +1 -0
  57. package/dist/adapters/compatibilityContext.d.cts +23 -0
  58. package/dist/{services → adapters}/compatibilityContext.d.cts.map +1 -1
  59. package/dist/adapters/compatibilityContext.d.mts +23 -0
  60. package/dist/{services → adapters}/compatibilityContext.d.mts.map +1 -1
  61. package/dist/adapters/compatibilityContext.mjs +2 -0
  62. package/dist/adapters/compatibilityContext.mjs.map +1 -0
  63. package/dist/adapters/composer.cjs +2 -0
  64. package/dist/adapters/composer.cjs.map +1 -0
  65. package/dist/adapters/composer.d.cts +113 -0
  66. package/dist/adapters/composer.d.cts.map +1 -0
  67. package/dist/adapters/composer.d.mts +113 -0
  68. package/dist/adapters/composer.d.mts.map +1 -0
  69. package/dist/adapters/composer.mjs +2 -0
  70. package/dist/adapters/composer.mjs.map +1 -0
  71. package/dist/adapters/compositionState.cjs +2 -0
  72. package/dist/adapters/compositionState.cjs.map +1 -0
  73. package/dist/adapters/compositionState.d.cts +12 -0
  74. package/dist/adapters/compositionState.d.cts.map +1 -0
  75. package/dist/adapters/compositionState.d.mts +12 -0
  76. package/dist/adapters/compositionState.d.mts.map +1 -0
  77. package/dist/adapters/compositionState.mjs +2 -0
  78. package/dist/adapters/compositionState.mjs.map +1 -0
  79. package/dist/adapters/config/harnessState.cjs +2 -0
  80. package/dist/adapters/config/harnessState.cjs.map +1 -0
  81. package/dist/adapters/config/harnessState.d.cts +26 -0
  82. package/dist/adapters/config/harnessState.d.cts.map +1 -0
  83. package/dist/adapters/config/harnessState.d.mts +26 -0
  84. package/dist/adapters/config/harnessState.d.mts.map +1 -0
  85. package/dist/adapters/config/harnessState.mjs +2 -0
  86. package/dist/adapters/config/harnessState.mjs.map +1 -0
  87. package/dist/adapters/deferredSkills.cjs +12 -0
  88. package/dist/adapters/deferredSkills.cjs.map +1 -0
  89. package/dist/adapters/deferredSkills.mjs +12 -0
  90. package/dist/adapters/deferredSkills.mjs.map +1 -0
  91. package/dist/adapters/doomPackage.cjs +2 -0
  92. package/dist/adapters/doomPackage.cjs.map +1 -0
  93. package/dist/adapters/doomPackage.mjs +2 -0
  94. package/dist/adapters/doomPackage.mjs.map +1 -0
  95. package/dist/adapters/dpiRunner.cjs +3 -0
  96. package/dist/adapters/dpiRunner.cjs.map +1 -0
  97. package/dist/adapters/dpiRunner.mjs +3 -0
  98. package/dist/adapters/dpiRunner.mjs.map +1 -0
  99. package/dist/adapters/dpiSettings.cjs +2 -0
  100. package/dist/adapters/dpiSettings.cjs.map +1 -0
  101. package/dist/adapters/dpiSettings.mjs +2 -0
  102. package/dist/adapters/dpiSettings.mjs.map +1 -0
  103. package/dist/adapters/extensionCompiler.cjs +3 -0
  104. package/dist/adapters/extensionCompiler.cjs.map +1 -0
  105. package/dist/adapters/extensionCompiler.mjs +3 -0
  106. package/dist/adapters/extensionCompiler.mjs.map +1 -0
  107. package/dist/adapters/harnessContext.cjs +2 -0
  108. package/dist/adapters/harnessContext.cjs.map +1 -0
  109. package/dist/adapters/harnessContext.d.cts +61 -0
  110. package/dist/{services → adapters}/harnessContext.d.cts.map +1 -1
  111. package/dist/adapters/harnessContext.d.mts +61 -0
  112. package/dist/{services → adapters}/harnessContext.d.mts.map +1 -1
  113. package/dist/adapters/harnessContext.mjs +2 -0
  114. package/dist/adapters/harnessContext.mjs.map +1 -0
  115. package/dist/adapters/helpSkills.cjs +2 -0
  116. package/dist/adapters/helpSkills.cjs.map +1 -0
  117. package/dist/adapters/helpSkills.mjs +2 -0
  118. package/dist/adapters/helpSkills.mjs.map +1 -0
  119. package/dist/adapters/layerPackageInstaller.cjs +2 -0
  120. package/dist/adapters/layerPackageInstaller.cjs.map +1 -0
  121. package/dist/adapters/layerPackageInstaller.mjs +2 -0
  122. package/dist/adapters/layerPackageInstaller.mjs.map +1 -0
  123. package/dist/adapters/matrixSwitcher.cjs +2 -0
  124. package/dist/adapters/matrixSwitcher.cjs.map +1 -0
  125. package/dist/adapters/matrixSwitcher.d.cts +46 -0
  126. package/dist/{services → adapters}/matrixSwitcher.d.cts.map +1 -1
  127. package/dist/adapters/matrixSwitcher.d.mts +46 -0
  128. package/dist/{services → adapters}/matrixSwitcher.d.mts.map +1 -1
  129. package/dist/adapters/matrixSwitcher.mjs +2 -0
  130. package/dist/adapters/matrixSwitcher.mjs.map +1 -0
  131. package/dist/adapters/mcpFilter.cjs +3 -0
  132. package/dist/adapters/mcpFilter.cjs.map +1 -0
  133. package/dist/adapters/mcpFilter.d.cts +40 -0
  134. package/dist/adapters/mcpFilter.d.cts.map +1 -0
  135. package/dist/adapters/mcpFilter.d.mts +40 -0
  136. package/dist/adapters/mcpFilter.d.mts.map +1 -0
  137. package/dist/adapters/mcpFilter.mjs +3 -0
  138. package/dist/adapters/mcpFilter.mjs.map +1 -0
  139. package/dist/adapters/modules/moduleResolution.cjs +2 -0
  140. package/dist/adapters/modules/moduleResolution.cjs.map +1 -0
  141. package/dist/adapters/modules/moduleResolution.d.cts +69 -0
  142. package/dist/adapters/modules/moduleResolution.d.cts.map +1 -0
  143. package/dist/adapters/modules/moduleResolution.d.mts +69 -0
  144. package/dist/adapters/modules/moduleResolution.d.mts.map +1 -0
  145. package/dist/adapters/modules/moduleResolution.mjs +2 -0
  146. package/dist/adapters/modules/moduleResolution.mjs.map +1 -0
  147. package/dist/adapters/packageBootstrap.cjs +2 -0
  148. package/dist/adapters/packageBootstrap.cjs.map +1 -0
  149. package/dist/adapters/packageBootstrap.d.cts +8 -0
  150. package/dist/adapters/packageBootstrap.d.cts.map +1 -0
  151. package/dist/adapters/packageBootstrap.d.mts +8 -0
  152. package/dist/adapters/packageBootstrap.d.mts.map +1 -0
  153. package/dist/adapters/packageBootstrap.mjs +2 -0
  154. package/dist/adapters/packageBootstrap.mjs.map +1 -0
  155. package/dist/adapters/piExtensionAlias.cjs +2 -0
  156. package/dist/adapters/piExtensionAlias.cjs.map +1 -0
  157. package/dist/adapters/piExtensionAlias.mjs +2 -0
  158. package/dist/adapters/piExtensionAlias.mjs.map +1 -0
  159. package/dist/adapters/piSettings.cjs +2 -0
  160. package/dist/adapters/piSettings.cjs.map +1 -0
  161. package/dist/adapters/piSettings.d.cts +25 -0
  162. package/dist/adapters/piSettings.d.cts.map +1 -0
  163. package/dist/adapters/piSettings.d.mts +25 -0
  164. package/dist/adapters/piSettings.d.mts.map +1 -0
  165. package/dist/adapters/piSettings.mjs +2 -0
  166. package/dist/adapters/piSettings.mjs.map +1 -0
  167. package/dist/adapters/pluginMaterializer.cjs +2 -0
  168. package/dist/adapters/pluginMaterializer.cjs.map +1 -0
  169. package/dist/adapters/pluginMaterializer.mjs +2 -0
  170. package/dist/adapters/pluginMaterializer.mjs.map +1 -0
  171. package/dist/adapters/projectPiSettings.cjs +2 -0
  172. package/dist/adapters/projectPiSettings.cjs.map +1 -0
  173. package/dist/adapters/projectPiSettings.d.cts +29 -0
  174. package/dist/adapters/projectPiSettings.d.cts.map +1 -0
  175. package/dist/adapters/projectPiSettings.d.mts +29 -0
  176. package/dist/adapters/projectPiSettings.d.mts.map +1 -0
  177. package/dist/adapters/projectPiSettings.mjs +2 -0
  178. package/dist/adapters/projectPiSettings.mjs.map +1 -0
  179. package/dist/adapters/repository/repository.cjs +2 -0
  180. package/dist/adapters/repository/repository.cjs.map +1 -0
  181. package/dist/adapters/repository/repository.d.cts +21 -0
  182. package/dist/adapters/repository/repository.d.cts.map +1 -0
  183. package/dist/adapters/repository/repository.d.mts +21 -0
  184. package/dist/adapters/repository/repository.d.mts.map +1 -0
  185. package/dist/adapters/repository/repository.mjs +2 -0
  186. package/dist/adapters/repository/repository.mjs.map +1 -0
  187. package/dist/adapters/resourceCollector.cjs +3 -0
  188. package/dist/adapters/resourceCollector.cjs.map +1 -0
  189. package/dist/adapters/resourceCollector.d.cts +25 -0
  190. package/dist/adapters/resourceCollector.d.cts.map +1 -0
  191. package/dist/adapters/resourceCollector.d.mts +25 -0
  192. package/dist/adapters/resourceCollector.d.mts.map +1 -0
  193. package/dist/adapters/resourceCollector.mjs +3 -0
  194. package/dist/adapters/resourceCollector.mjs.map +1 -0
  195. package/dist/adapters/runtimeBundle.cjs +2 -0
  196. package/dist/adapters/runtimeBundle.cjs.map +1 -0
  197. package/dist/{services → adapters}/runtimeBundle.d.cts +4 -2
  198. package/dist/adapters/runtimeBundle.d.cts.map +1 -0
  199. package/dist/{services → adapters}/runtimeBundle.d.mts +4 -2
  200. package/dist/adapters/runtimeBundle.d.mts.map +1 -0
  201. package/dist/adapters/runtimeBundle.mjs +2 -0
  202. package/dist/adapters/runtimeBundle.mjs.map +1 -0
  203. package/dist/adapters/serialization/json.cjs +2 -0
  204. package/dist/adapters/serialization/json.cjs.map +1 -0
  205. package/dist/adapters/serialization/json.d.cts +23 -0
  206. package/dist/adapters/serialization/json.d.cts.map +1 -0
  207. package/dist/adapters/serialization/json.d.mts +23 -0
  208. package/dist/adapters/serialization/json.d.mts.map +1 -0
  209. package/dist/adapters/serialization/json.mjs +2 -0
  210. package/dist/adapters/serialization/json.mjs.map +1 -0
  211. package/dist/adapters/sharedBuildCache.cjs +2 -0
  212. package/dist/adapters/sharedBuildCache.cjs.map +1 -0
  213. package/dist/adapters/sharedBuildCache.mjs +2 -0
  214. package/dist/adapters/sharedBuildCache.mjs.map +1 -0
  215. package/dist/adapters/skillCatalog.cjs +2 -0
  216. package/dist/adapters/skillCatalog.cjs.map +1 -0
  217. package/dist/adapters/skillCatalog.d.cts +61 -0
  218. package/dist/adapters/skillCatalog.d.cts.map +1 -0
  219. package/dist/adapters/skillCatalog.d.mts +61 -0
  220. package/dist/adapters/skillCatalog.d.mts.map +1 -0
  221. package/dist/adapters/skillCatalog.mjs +2 -0
  222. package/dist/adapters/skillCatalog.mjs.map +1 -0
  223. package/dist/adapters/skillSources.cjs +2 -0
  224. package/dist/{services → adapters}/skillSources.cjs.map +1 -1
  225. package/dist/adapters/skillSources.d.cts +24 -0
  226. package/dist/{services → adapters}/skillSources.d.cts.map +1 -1
  227. package/dist/adapters/skillSources.d.mts +24 -0
  228. package/dist/{services → adapters}/skillSources.d.mts.map +1 -1
  229. package/dist/adapters/skillSources.mjs +2 -0
  230. package/dist/{services → adapters}/skillSources.mjs.map +1 -1
  231. package/dist/adapters/startupPrecompiler.cjs +2 -0
  232. package/dist/adapters/startupPrecompiler.cjs.map +1 -0
  233. package/dist/adapters/startupPrecompiler.d.cts +13 -0
  234. package/dist/adapters/startupPrecompiler.d.cts.map +1 -0
  235. package/dist/adapters/startupPrecompiler.d.mts +13 -0
  236. package/dist/adapters/startupPrecompiler.d.mts.map +1 -0
  237. package/dist/adapters/startupPrecompiler.mjs +2 -0
  238. package/dist/adapters/startupPrecompiler.mjs.map +1 -0
  239. package/dist/adapters/syncLocation.cjs +2 -0
  240. package/dist/adapters/syncLocation.cjs.map +1 -0
  241. package/dist/adapters/syncLocation.d.cts +19 -0
  242. package/dist/adapters/syncLocation.d.cts.map +1 -0
  243. package/dist/adapters/syncLocation.d.mts +19 -0
  244. package/dist/adapters/syncLocation.d.mts.map +1 -0
  245. package/dist/adapters/syncLocation.mjs +2 -0
  246. package/dist/adapters/syncLocation.mjs.map +1 -0
  247. package/dist/adapters/syncState.cjs +2 -0
  248. package/dist/adapters/syncState.cjs.map +1 -0
  249. package/dist/adapters/syncState.d.cts +153 -0
  250. package/dist/adapters/syncState.d.cts.map +1 -0
  251. package/dist/adapters/syncState.d.mts +153 -0
  252. package/dist/adapters/syncState.d.mts.map +1 -0
  253. package/dist/adapters/syncState.mjs +2 -0
  254. package/dist/adapters/syncState.mjs.map +1 -0
  255. package/dist/adapters/syncStateContract.cjs +2 -0
  256. package/dist/adapters/syncStateContract.cjs.map +1 -0
  257. package/dist/adapters/syncStateContract.d.cts +13 -0
  258. package/dist/adapters/syncStateContract.d.cts.map +1 -0
  259. package/dist/adapters/syncStateContract.d.mts +13 -0
  260. package/dist/adapters/syncStateContract.d.mts.map +1 -0
  261. package/dist/adapters/syncStateContract.mjs +2 -0
  262. package/dist/adapters/syncStateContract.mjs.map +1 -0
  263. package/dist/adapters/syncedRuntimeBuilder.cjs +2 -0
  264. package/dist/adapters/syncedRuntimeBuilder.cjs.map +1 -0
  265. package/dist/adapters/syncedRuntimeBuilder.d.cts +11 -0
  266. package/dist/adapters/syncedRuntimeBuilder.d.cts.map +1 -0
  267. package/dist/adapters/syncedRuntimeBuilder.d.mts +11 -0
  268. package/dist/adapters/syncedRuntimeBuilder.d.mts.map +1 -0
  269. package/dist/adapters/syncedRuntimeBuilder.mjs +2 -0
  270. package/dist/adapters/syncedRuntimeBuilder.mjs.map +1 -0
  271. package/dist/adapters/telemetry/logSinkTelemetry.cjs +2 -0
  272. package/dist/adapters/telemetry/logSinkTelemetry.cjs.map +1 -0
  273. package/dist/adapters/telemetry/logSinkTelemetry.d.cts +51 -0
  274. package/dist/adapters/telemetry/logSinkTelemetry.d.cts.map +1 -0
  275. package/dist/adapters/telemetry/logSinkTelemetry.d.mts +51 -0
  276. package/dist/adapters/telemetry/logSinkTelemetry.d.mts.map +1 -0
  277. package/dist/adapters/telemetry/logSinkTelemetry.mjs +2 -0
  278. package/dist/adapters/telemetry/logSinkTelemetry.mjs.map +1 -0
  279. package/dist/bin/cli.cjs +1 -1
  280. package/dist/bin/cli.cjs.map +1 -1
  281. package/dist/bin/cli.mjs +1 -1
  282. package/dist/bin/cli.mjs.map +1 -1
  283. package/dist/bin/dpi.cjs +3 -0
  284. package/dist/bin/dpi.cjs.map +1 -0
  285. package/dist/bin/dpi.d.cts +1 -0
  286. package/dist/bin/dpi.d.mts +1 -0
  287. package/dist/bin/dpi.mjs +3 -0
  288. package/dist/bin/dpi.mjs.map +1 -0
  289. package/dist/cli/cliApp.cjs +1 -2
  290. package/dist/cli/cliApp.d.cts +2 -45
  291. package/dist/cli/cliApp.d.mts +2 -45
  292. package/dist/cli/cliApp.mjs +1 -2
  293. package/dist/cli/compatibilityOptions.cjs +1 -2
  294. package/dist/cli/compatibilityOptions.d.cts +2 -15
  295. package/dist/cli/compatibilityOptions.d.mts +2 -15
  296. package/dist/cli/compatibilityOptions.mjs +1 -2
  297. package/dist/cli/help.cjs +1 -63
  298. package/dist/cli/help.d.cts +2 -6
  299. package/dist/cli/help.d.mts +2 -6
  300. package/dist/cli/help.mjs +1 -63
  301. package/dist/cli/index.cjs +1 -1
  302. package/dist/cli/index.d.cts +4 -4
  303. package/dist/cli/index.d.mts +4 -4
  304. package/dist/cli/index.mjs +1 -1
  305. package/dist/cli/matrixOptions.cjs +1 -2
  306. package/dist/cli/matrixOptions.d.cts +2 -99
  307. package/dist/cli/matrixOptions.d.mts +2 -99
  308. package/dist/cli/matrixOptions.mjs +1 -2
  309. package/dist/cli/options.cjs +1 -2
  310. package/dist/cli/options.d.cts +2 -7
  311. package/dist/cli/options.d.mts +2 -7
  312. package/dist/cli/options.mjs +1 -2
  313. package/dist/commands/baseCommand.cjs.map +1 -1
  314. package/dist/commands/baseCommand.d.cts +3 -3
  315. package/dist/commands/baseCommand.d.mts +3 -3
  316. package/dist/commands/baseCommand.mjs.map +1 -1
  317. package/dist/commands/buildCommand.cjs +2 -2
  318. package/dist/commands/buildCommand.cjs.map +1 -1
  319. package/dist/commands/buildCommand.mjs +2 -2
  320. package/dist/commands/buildCommand.mjs.map +1 -1
  321. package/dist/commands/cli/cliApp.cjs +2 -0
  322. package/dist/commands/cli/cliApp.cjs.map +1 -0
  323. package/dist/commands/cli/cliApp.d.cts +45 -0
  324. package/dist/commands/cli/cliApp.d.cts.map +1 -0
  325. package/dist/commands/cli/cliApp.d.mts +45 -0
  326. package/dist/commands/cli/cliApp.d.mts.map +1 -0
  327. package/dist/commands/cli/cliApp.mjs +2 -0
  328. package/dist/commands/cli/cliApp.mjs.map +1 -0
  329. package/dist/commands/cli/compatibilityOptions.cjs +2 -0
  330. package/dist/commands/cli/compatibilityOptions.cjs.map +1 -0
  331. package/dist/commands/cli/compatibilityOptions.d.cts +15 -0
  332. package/dist/commands/cli/compatibilityOptions.d.cts.map +1 -0
  333. package/dist/commands/cli/compatibilityOptions.d.mts +15 -0
  334. package/dist/commands/cli/compatibilityOptions.d.mts.map +1 -0
  335. package/dist/commands/cli/compatibilityOptions.mjs +2 -0
  336. package/dist/commands/cli/compatibilityOptions.mjs.map +1 -0
  337. package/dist/commands/cli/help.cjs +68 -0
  338. package/dist/{cli → commands/cli}/help.cjs.map +1 -1
  339. package/dist/commands/cli/help.d.cts +6 -0
  340. package/dist/commands/cli/help.d.cts.map +1 -0
  341. package/dist/commands/cli/help.d.mts +6 -0
  342. package/dist/commands/cli/help.d.mts.map +1 -0
  343. package/dist/commands/cli/help.mjs +68 -0
  344. package/dist/{cli → commands/cli}/help.mjs.map +1 -1
  345. package/dist/commands/cli/index.cjs +1 -0
  346. package/dist/commands/cli/index.d.cts +4 -0
  347. package/dist/commands/cli/index.d.mts +4 -0
  348. package/dist/commands/cli/index.mjs +1 -0
  349. package/dist/commands/cli/matrixOptions.cjs +2 -0
  350. package/dist/commands/cli/matrixOptions.cjs.map +1 -0
  351. package/dist/commands/cli/matrixOptions.d.cts +99 -0
  352. package/dist/commands/cli/matrixOptions.d.cts.map +1 -0
  353. package/dist/commands/cli/matrixOptions.d.mts +99 -0
  354. package/dist/commands/cli/matrixOptions.d.mts.map +1 -0
  355. package/dist/commands/cli/matrixOptions.mjs +2 -0
  356. package/dist/commands/cli/matrixOptions.mjs.map +1 -0
  357. package/dist/commands/cli/options.cjs +2 -0
  358. package/dist/commands/cli/options.cjs.map +1 -0
  359. package/dist/commands/cli/options.d.cts +7 -0
  360. package/dist/commands/cli/options.d.cts.map +1 -0
  361. package/dist/commands/cli/options.d.mts +7 -0
  362. package/dist/commands/cli/options.d.mts.map +1 -0
  363. package/dist/commands/cli/options.mjs +2 -0
  364. package/dist/commands/cli/options.mjs.map +1 -0
  365. package/dist/commands/compatibilityCommand.cjs +1 -1
  366. package/dist/commands/compatibilityCommand.cjs.map +1 -1
  367. package/dist/commands/compatibilityCommand.d.cts +1 -1
  368. package/dist/commands/compatibilityCommand.d.cts.map +1 -1
  369. package/dist/commands/compatibilityCommand.d.mts +1 -1
  370. package/dist/commands/compatibilityCommand.d.mts.map +1 -1
  371. package/dist/commands/compatibilityCommand.mjs +1 -1
  372. package/dist/commands/compatibilityCommand.mjs.map +1 -1
  373. package/dist/commands/emitMcpCommand.cjs +1 -1
  374. package/dist/commands/emitMcpCommand.cjs.map +1 -1
  375. package/dist/commands/emitMcpCommand.d.cts +2 -2
  376. package/dist/commands/emitMcpCommand.d.mts +2 -2
  377. package/dist/commands/emitMcpCommand.mjs +1 -1
  378. package/dist/commands/emitMcpCommand.mjs.map +1 -1
  379. package/dist/commands/explainCommand.cjs +2 -2
  380. package/dist/commands/explainCommand.cjs.map +1 -1
  381. package/dist/commands/explainCommand.d.cts +2 -2
  382. package/dist/commands/explainCommand.d.mts +2 -2
  383. package/dist/commands/explainCommand.mjs +2 -2
  384. package/dist/commands/explainCommand.mjs.map +1 -1
  385. package/dist/commands/index.cjs +1 -1
  386. package/dist/commands/index.d.cts +2 -3
  387. package/dist/commands/index.d.mts +2 -3
  388. package/dist/commands/index.mjs +1 -1
  389. package/dist/commands/initCommand.cjs +1 -2
  390. package/dist/commands/initCommand.cjs.map +1 -1
  391. package/dist/commands/initCommand.d.cts +4 -3
  392. package/dist/commands/initCommand.d.cts.map +1 -1
  393. package/dist/commands/initCommand.d.mts +4 -3
  394. package/dist/commands/initCommand.d.mts.map +1 -1
  395. package/dist/commands/initCommand.mjs +1 -2
  396. package/dist/commands/initCommand.mjs.map +1 -1
  397. package/dist/commands/initPresenter.cjs +3 -0
  398. package/dist/commands/initPresenter.cjs.map +1 -0
  399. package/dist/commands/initPresenter.d.cts +8 -0
  400. package/dist/commands/initPresenter.d.cts.map +1 -0
  401. package/dist/commands/initPresenter.d.mts +8 -0
  402. package/dist/commands/initPresenter.d.mts.map +1 -0
  403. package/dist/commands/initPresenter.mjs +3 -0
  404. package/dist/commands/initPresenter.mjs.map +1 -0
  405. package/dist/commands/launchCommand.cjs +1 -1
  406. package/dist/commands/launchCommand.cjs.map +1 -1
  407. package/dist/commands/launchCommand.d.cts +6 -4
  408. package/dist/commands/launchCommand.d.cts.map +1 -1
  409. package/dist/commands/launchCommand.d.mts +6 -4
  410. package/dist/commands/launchCommand.d.mts.map +1 -1
  411. package/dist/commands/launchCommand.mjs +1 -1
  412. package/dist/commands/launchCommand.mjs.map +1 -1
  413. package/dist/commands/syncCommand.cjs +5 -5
  414. package/dist/commands/syncCommand.cjs.map +1 -1
  415. package/dist/commands/syncCommand.d.cts +19 -7
  416. package/dist/commands/syncCommand.d.cts.map +1 -1
  417. package/dist/commands/syncCommand.d.mts +19 -7
  418. package/dist/commands/syncCommand.d.mts.map +1 -1
  419. package/dist/commands/syncCommand.mjs +5 -5
  420. package/dist/commands/syncCommand.mjs.map +1 -1
  421. package/dist/commands/syncPipeline.cjs +2 -0
  422. package/dist/commands/syncPipeline.cjs.map +1 -0
  423. package/dist/commands/syncPipeline.mjs +2 -0
  424. package/dist/commands/syncPipeline.mjs.map +1 -0
  425. package/dist/config/harnessState.cjs +1 -2
  426. package/dist/config/harnessState.d.cts +2 -24
  427. package/dist/config/harnessState.d.mts +2 -24
  428. package/dist/config/harnessState.mjs +1 -2
  429. package/dist/config/index.cjs +1 -1
  430. package/dist/config/index.d.cts +4 -7
  431. package/dist/config/index.d.mts +4 -7
  432. package/dist/config/index.mjs +1 -1
  433. package/dist/config/projectTrust.cjs +1 -2
  434. package/dist/config/projectTrust.d.cts +2 -14
  435. package/dist/config/projectTrust.d.mts +2 -14
  436. package/dist/config/projectTrust.mjs +1 -2
  437. package/dist/entries/autoStop.cjs +1 -2
  438. package/dist/entries/autoStop.d.cts +2 -6
  439. package/dist/entries/autoStop.d.mts +2 -7
  440. package/dist/entries/autoStop.mjs +1 -2
  441. package/dist/entries/components/matrixPicker.cjs +1 -2
  442. package/dist/entries/components/matrixPicker.d.cts +2 -55
  443. package/dist/entries/components/matrixPicker.d.mts +2 -55
  444. package/dist/entries/components/matrixPicker.mjs +1 -2
  445. package/dist/entries/components/skillsOverlay.cjs +1 -4
  446. package/dist/entries/components/skillsOverlay.d.cts +2 -58
  447. package/dist/entries/components/skillsOverlay.d.mts +2 -58
  448. package/dist/entries/components/skillsOverlay.mjs +1 -4
  449. package/dist/entries/domains.cjs +1 -2
  450. package/dist/entries/domains.d.cts +2 -10
  451. package/dist/entries/domains.d.mts +2 -10
  452. package/dist/entries/domains.mjs +1 -2
  453. package/dist/entries/doom.cjs +1 -2
  454. package/dist/entries/doom.d.cts +2 -13
  455. package/dist/entries/doom.d.mts +2 -14
  456. package/dist/entries/doom.mjs +1 -2
  457. package/dist/entries/effort.cjs +1 -2
  458. package/dist/entries/effort.d.cts +2 -10
  459. package/dist/entries/effort.d.mts +2 -10
  460. package/dist/entries/effort.mjs +1 -2
  461. package/dist/entries/majorMode.cjs +1 -6
  462. package/dist/entries/majorMode.d.cts +2 -29
  463. package/dist/entries/majorMode.d.mts +2 -29
  464. package/dist/entries/majorMode.mjs +1 -6
  465. package/dist/entries/modeCatalog.cjs +1 -0
  466. package/dist/entries/modeCatalog.d.cts +2 -0
  467. package/dist/entries/modeCatalog.d.mts +2 -0
  468. package/dist/entries/modeCatalog.mjs +1 -0
  469. package/dist/entries/notifications.cjs +1 -2
  470. package/dist/entries/notifications.d.cts +2 -13
  471. package/dist/entries/notifications.d.mts +2 -13
  472. package/dist/entries/notifications.mjs +1 -2
  473. package/dist/entries/ollamaProvider.cjs +1 -2
  474. package/dist/entries/ollamaProvider.d.cts +2 -6
  475. package/dist/entries/ollamaProvider.d.mts +2 -7
  476. package/dist/entries/ollamaProvider.mjs +1 -2
  477. package/dist/entries/persona.cjs +1 -2
  478. package/dist/entries/persona.d.cts +2 -14
  479. package/dist/entries/persona.d.mts +2 -15
  480. package/dist/entries/persona.mjs +1 -2
  481. package/dist/entries/profile.cjs +1 -3
  482. package/dist/entries/profile.d.cts +2 -16
  483. package/dist/entries/profile.d.mts +2 -16
  484. package/dist/entries/profile.mjs +1 -3
  485. package/dist/entries/repositoryHooks.cjs +1 -9
  486. package/dist/entries/repositoryHooks.d.cts +2 -7
  487. package/dist/entries/repositoryHooks.d.mts +2 -8
  488. package/dist/entries/repositoryHooks.mjs +1 -9
  489. package/dist/entries/skills.cjs +1 -2
  490. package/dist/entries/skills.d.cts +2 -34
  491. package/dist/entries/skills.d.mts +2 -34
  492. package/dist/entries/skills.mjs +1 -2
  493. package/dist/entries/styleSystem.cjs +1 -4
  494. package/dist/entries/styleSystem.d.cts +2 -32
  495. package/dist/entries/styleSystem.d.mts +2 -32
  496. package/dist/entries/styleSystem.mjs +1 -4
  497. package/dist/extensions/entries/autoStop.cjs +2 -0
  498. package/dist/extensions/entries/autoStop.cjs.map +1 -0
  499. package/dist/extensions/entries/autoStop.d.cts +7 -0
  500. package/dist/extensions/entries/autoStop.d.cts.map +1 -0
  501. package/dist/extensions/entries/autoStop.d.mts +7 -0
  502. package/dist/extensions/entries/autoStop.d.mts.map +1 -0
  503. package/dist/extensions/entries/autoStop.mjs +2 -0
  504. package/dist/extensions/entries/autoStop.mjs.map +1 -0
  505. package/dist/extensions/entries/cacheOptimizer.mjs +2 -0
  506. package/dist/extensions/entries/cacheOptimizer.mjs.map +1 -0
  507. package/dist/extensions/entries/components/matrixPicker.cjs +2 -0
  508. package/dist/extensions/entries/components/matrixPicker.cjs.map +1 -0
  509. package/dist/extensions/entries/components/matrixPicker.d.cts +55 -0
  510. package/dist/extensions/entries/components/matrixPicker.d.cts.map +1 -0
  511. package/dist/extensions/entries/components/matrixPicker.d.mts +55 -0
  512. package/dist/extensions/entries/components/matrixPicker.d.mts.map +1 -0
  513. package/dist/extensions/entries/components/matrixPicker.mjs +2 -0
  514. package/dist/extensions/entries/components/matrixPicker.mjs.map +1 -0
  515. package/dist/extensions/entries/components/skillsOverlay.cjs +4 -0
  516. package/dist/extensions/entries/components/skillsOverlay.cjs.map +1 -0
  517. package/dist/extensions/entries/components/skillsOverlay.d.cts +58 -0
  518. package/dist/extensions/entries/components/skillsOverlay.d.cts.map +1 -0
  519. package/dist/extensions/entries/components/skillsOverlay.d.mts +58 -0
  520. package/dist/extensions/entries/components/skillsOverlay.d.mts.map +1 -0
  521. package/dist/extensions/entries/components/skillsOverlay.mjs +4 -0
  522. package/dist/extensions/entries/components/skillsOverlay.mjs.map +1 -0
  523. package/dist/extensions/entries/domains.cjs +2 -0
  524. package/dist/extensions/entries/domains.cjs.map +1 -0
  525. package/dist/extensions/entries/domains.d.cts +18 -0
  526. package/dist/extensions/entries/domains.d.cts.map +1 -0
  527. package/dist/extensions/entries/domains.d.mts +18 -0
  528. package/dist/extensions/entries/domains.d.mts.map +1 -0
  529. package/dist/extensions/entries/domains.mjs +2 -0
  530. package/dist/extensions/entries/domains.mjs.map +1 -0
  531. package/dist/extensions/entries/doom.cjs +2 -0
  532. package/dist/extensions/entries/doom.cjs.map +1 -0
  533. package/dist/extensions/entries/doom.d.cts +14 -0
  534. package/dist/extensions/entries/doom.d.cts.map +1 -0
  535. package/dist/extensions/entries/doom.d.mts +14 -0
  536. package/dist/extensions/entries/doom.d.mts.map +1 -0
  537. package/dist/extensions/entries/doom.mjs +2 -0
  538. package/dist/extensions/entries/doom.mjs.map +1 -0
  539. package/dist/extensions/entries/effort.cjs +2 -0
  540. package/dist/extensions/entries/effort.cjs.map +1 -0
  541. package/dist/extensions/entries/effort.d.cts +10 -0
  542. package/dist/extensions/entries/effort.d.cts.map +1 -0
  543. package/dist/extensions/entries/effort.d.mts +10 -0
  544. package/dist/extensions/entries/effort.d.mts.map +1 -0
  545. package/dist/extensions/entries/effort.mjs +2 -0
  546. package/dist/extensions/entries/effort.mjs.map +1 -0
  547. package/dist/extensions/entries/majorMode.cjs +6 -0
  548. package/dist/extensions/entries/majorMode.cjs.map +1 -0
  549. package/dist/extensions/entries/majorMode.d.cts +27 -0
  550. package/dist/extensions/entries/majorMode.d.cts.map +1 -0
  551. package/dist/extensions/entries/majorMode.d.mts +27 -0
  552. package/dist/extensions/entries/majorMode.d.mts.map +1 -0
  553. package/dist/extensions/entries/majorMode.mjs +6 -0
  554. package/dist/extensions/entries/majorMode.mjs.map +1 -0
  555. package/dist/extensions/entries/modeCatalog.cjs +2 -0
  556. package/dist/extensions/entries/modeCatalog.cjs.map +1 -0
  557. package/dist/extensions/entries/modeCatalog.d.cts +7 -0
  558. package/dist/extensions/entries/modeCatalog.d.cts.map +1 -0
  559. package/dist/extensions/entries/modeCatalog.d.mts +7 -0
  560. package/dist/extensions/entries/modeCatalog.d.mts.map +1 -0
  561. package/dist/extensions/entries/modeCatalog.mjs +2 -0
  562. package/dist/extensions/entries/modeCatalog.mjs.map +1 -0
  563. package/dist/extensions/entries/notifications.cjs +2 -0
  564. package/dist/extensions/entries/notifications.cjs.map +1 -0
  565. package/dist/extensions/entries/notifications.d.cts +14 -0
  566. package/dist/extensions/entries/notifications.d.cts.map +1 -0
  567. package/dist/extensions/entries/notifications.d.mts +14 -0
  568. package/dist/extensions/entries/notifications.d.mts.map +1 -0
  569. package/dist/extensions/entries/notifications.mjs +2 -0
  570. package/dist/extensions/entries/notifications.mjs.map +1 -0
  571. package/dist/extensions/entries/ollamaProvider.cjs +2 -0
  572. package/dist/extensions/entries/ollamaProvider.cjs.map +1 -0
  573. package/dist/extensions/entries/ollamaProvider.d.cts +7 -0
  574. package/dist/extensions/entries/ollamaProvider.d.cts.map +1 -0
  575. package/dist/extensions/entries/ollamaProvider.d.mts +7 -0
  576. package/dist/extensions/entries/ollamaProvider.d.mts.map +1 -0
  577. package/dist/extensions/entries/ollamaProvider.mjs +2 -0
  578. package/dist/extensions/entries/ollamaProvider.mjs.map +1 -0
  579. package/dist/extensions/entries/persona.cjs +2 -0
  580. package/dist/extensions/entries/persona.cjs.map +1 -0
  581. package/dist/extensions/entries/persona.d.cts +15 -0
  582. package/dist/extensions/entries/persona.d.cts.map +1 -0
  583. package/dist/extensions/entries/persona.d.mts +15 -0
  584. package/dist/extensions/entries/persona.d.mts.map +1 -0
  585. package/dist/extensions/entries/persona.mjs +2 -0
  586. package/dist/extensions/entries/persona.mjs.map +1 -0
  587. package/dist/extensions/entries/profile.cjs +3 -0
  588. package/dist/extensions/entries/profile.cjs.map +1 -0
  589. package/dist/extensions/entries/profile.d.cts +18 -0
  590. package/dist/extensions/entries/profile.d.cts.map +1 -0
  591. package/dist/extensions/entries/profile.d.mts +18 -0
  592. package/dist/extensions/entries/profile.d.mts.map +1 -0
  593. package/dist/extensions/entries/profile.mjs +3 -0
  594. package/dist/extensions/entries/profile.mjs.map +1 -0
  595. package/dist/extensions/entries/repositoryHooks.cjs +9 -0
  596. package/dist/extensions/entries/repositoryHooks.cjs.map +1 -0
  597. package/dist/extensions/entries/repositoryHooks.d.cts +8 -0
  598. package/dist/extensions/entries/repositoryHooks.d.cts.map +1 -0
  599. package/dist/extensions/entries/repositoryHooks.d.mts +8 -0
  600. package/dist/extensions/entries/repositoryHooks.d.mts.map +1 -0
  601. package/dist/extensions/entries/repositoryHooks.mjs +9 -0
  602. package/dist/extensions/entries/repositoryHooks.mjs.map +1 -0
  603. package/dist/extensions/entries/shellTitleController.cjs +27 -0
  604. package/dist/extensions/entries/shellTitleController.cjs.map +1 -0
  605. package/dist/extensions/entries/shellTitleController.d.cts +11 -0
  606. package/dist/extensions/entries/shellTitleController.d.cts.map +1 -0
  607. package/dist/extensions/entries/shellTitleController.d.mts +11 -0
  608. package/dist/extensions/entries/shellTitleController.d.mts.map +1 -0
  609. package/dist/extensions/entries/shellTitleController.mjs +27 -0
  610. package/dist/extensions/entries/shellTitleController.mjs.map +1 -0
  611. package/dist/extensions/entries/skills.cjs +4 -0
  612. package/dist/extensions/entries/skills.cjs.map +1 -0
  613. package/dist/extensions/entries/skills.d.cts +34 -0
  614. package/dist/extensions/entries/skills.d.cts.map +1 -0
  615. package/dist/extensions/entries/skills.d.mts +34 -0
  616. package/dist/extensions/entries/skills.d.mts.map +1 -0
  617. package/dist/extensions/entries/skills.mjs +4 -0
  618. package/dist/extensions/entries/skills.mjs.map +1 -0
  619. package/dist/extensions/entries/styleSystem.cjs +4 -0
  620. package/dist/extensions/entries/styleSystem.cjs.map +1 -0
  621. package/dist/extensions/entries/styleSystem.d.cts +32 -0
  622. package/dist/extensions/entries/styleSystem.d.cts.map +1 -0
  623. package/dist/extensions/entries/styleSystem.d.mts +32 -0
  624. package/dist/extensions/entries/styleSystem.d.mts.map +1 -0
  625. package/dist/extensions/entries/styleSystem.mjs +4 -0
  626. package/dist/{entries/styleSystem.cjs.map → extensions/entries/styleSystem.mjs.map} +1 -1
  627. package/dist/extensions/pi.cjs +1 -0
  628. package/dist/extensions/pi.d.cts +2 -0
  629. package/dist/extensions/pi.d.mts +2 -0
  630. package/dist/extensions/pi.mjs +1 -0
  631. package/dist/extensions/services/domainSwitchHandoff.cjs +2 -0
  632. package/dist/extensions/services/domainSwitchHandoff.cjs.map +1 -0
  633. package/dist/extensions/services/domainSwitchHandoff.mjs +2 -0
  634. package/dist/extensions/services/domainSwitchHandoff.mjs.map +1 -0
  635. package/dist/index.cjs +1 -1
  636. package/dist/index.d.cts +33 -29
  637. package/dist/index.d.mts +33 -29
  638. package/dist/index.mjs +1 -1
  639. package/dist/logSinkTelemetry.cjs +1 -2
  640. package/dist/logSinkTelemetry.d.cts +2 -51
  641. package/dist/logSinkTelemetry.d.mts +2 -51
  642. package/dist/logSinkTelemetry.mjs +1 -2
  643. package/dist/pi-cache-optimizer-D9beVnnH.mjs +50 -0
  644. package/dist/pi-cache-optimizer-D9beVnnH.mjs.map +1 -0
  645. package/dist/schemas/domainVoiceTools.cjs +2 -0
  646. package/dist/schemas/domainVoiceTools.cjs.map +1 -0
  647. package/dist/schemas/domainVoiceTools.mjs +2 -0
  648. package/dist/schemas/domainVoiceTools.mjs.map +1 -0
  649. package/dist/schemas/majorModeVoiceTools.cjs +2 -0
  650. package/dist/schemas/majorModeVoiceTools.cjs.map +1 -0
  651. package/dist/schemas/majorModeVoiceTools.mjs +2 -0
  652. package/dist/schemas/majorModeVoiceTools.mjs.map +1 -0
  653. package/dist/services/compatibility/antigravity.cjs +1 -2
  654. package/dist/services/compatibility/antigravity.d.cts +2 -11
  655. package/dist/services/compatibility/antigravity.d.mts +2 -11
  656. package/dist/services/compatibility/antigravity.mjs +1 -2
  657. package/dist/services/compatibility/codex.cjs +1 -2
  658. package/dist/services/compatibility/codex.d.cts +2 -19
  659. package/dist/services/compatibility/codex.d.mts +2 -19
  660. package/dist/services/compatibility/codex.mjs +1 -2
  661. package/dist/services/compatibility/index.cjs +1 -2
  662. package/dist/services/compatibility/index.d.cts +6 -16
  663. package/dist/services/compatibility/index.d.mts +6 -16
  664. package/dist/services/compatibility/index.mjs +1 -2
  665. package/dist/services/compatibility/process.cjs +1 -2
  666. package/dist/services/compatibility/process.d.cts +2 -35
  667. package/dist/services/compatibility/process.d.mts +2 -35
  668. package/dist/services/compatibility/process.mjs +1 -2
  669. package/dist/services/compatibility/shared.cjs +1 -2
  670. package/dist/services/compatibility/shared.d.cts +2 -33
  671. package/dist/services/compatibility/shared.d.mts +2 -33
  672. package/dist/services/compatibility/shared.mjs +1 -2
  673. package/dist/services/compatibilityContext.cjs +1 -2
  674. package/dist/services/compatibilityContext.d.cts +2 -23
  675. package/dist/services/compatibilityContext.d.mts +2 -23
  676. package/dist/services/compatibilityContext.mjs +1 -2
  677. package/dist/services/composer.cjs +1 -2
  678. package/dist/services/composer.d.cts +4 -135
  679. package/dist/services/composer.d.mts +4 -135
  680. package/dist/services/composer.mjs +1 -2
  681. package/dist/services/config/index.cjs +1 -0
  682. package/dist/services/config/index.d.cts +7 -0
  683. package/dist/services/config/index.d.mts +7 -0
  684. package/dist/services/config/index.mjs +1 -0
  685. package/dist/services/config/projectTrust.cjs +2 -0
  686. package/dist/services/config/projectTrust.cjs.map +1 -0
  687. package/dist/services/config/projectTrust.d.cts +14 -0
  688. package/dist/services/config/projectTrust.d.cts.map +1 -0
  689. package/dist/services/config/projectTrust.d.mts +14 -0
  690. package/dist/services/config/projectTrust.d.mts.map +1 -0
  691. package/dist/services/config/projectTrust.mjs +2 -0
  692. package/dist/services/config/projectTrust.mjs.map +1 -0
  693. package/dist/services/extensionAssembler.cjs +1 -1
  694. package/dist/services/extensionAssembler.cjs.map +1 -1
  695. package/dist/services/extensionAssembler.d.cts +13 -6
  696. package/dist/services/extensionAssembler.d.cts.map +1 -1
  697. package/dist/services/extensionAssembler.d.mts +13 -6
  698. package/dist/services/extensionAssembler.d.mts.map +1 -1
  699. package/dist/services/extensionAssembler.mjs +1 -1
  700. package/dist/services/extensionAssembler.mjs.map +1 -1
  701. package/dist/services/harnessContext.cjs +1 -2
  702. package/dist/services/harnessContext.d.cts +2 -61
  703. package/dist/services/harnessContext.d.mts +2 -61
  704. package/dist/services/harnessContext.mjs +1 -2
  705. package/dist/services/index.cjs +1 -1
  706. package/dist/services/index.d.cts +18 -14
  707. package/dist/services/index.d.mts +18 -14
  708. package/dist/services/index.mjs +1 -1
  709. package/dist/services/matrixSwitcher.cjs +1 -2
  710. package/dist/services/matrixSwitcher.d.cts +2 -46
  711. package/dist/services/matrixSwitcher.d.mts +2 -46
  712. package/dist/services/matrixSwitcher.mjs +1 -2
  713. package/dist/services/mcpFilter.cjs +1 -3
  714. package/dist/services/mcpFilter.d.cts +2 -40
  715. package/dist/services/mcpFilter.d.mts +2 -40
  716. package/dist/services/mcpFilter.mjs +1 -3
  717. package/dist/services/modeCatalog.cjs +2 -0
  718. package/dist/services/modeCatalog.cjs.map +1 -0
  719. package/dist/services/modeCatalog.d.cts +18 -0
  720. package/dist/services/modeCatalog.d.cts.map +1 -0
  721. package/dist/services/modeCatalog.d.mts +18 -0
  722. package/dist/services/modeCatalog.d.mts.map +1 -0
  723. package/dist/services/modeCatalog.mjs +2 -0
  724. package/dist/services/modeCatalog.mjs.map +1 -0
  725. package/dist/services/piSettings.cjs +1 -2
  726. package/dist/services/piSettings.d.cts +2 -24
  727. package/dist/services/piSettings.d.mts +2 -24
  728. package/dist/services/piSettings.mjs +1 -2
  729. package/dist/services/resourceCollector.cjs +1 -3
  730. package/dist/services/resourceCollector.d.cts +2 -23
  731. package/dist/services/resourceCollector.d.mts +2 -23
  732. package/dist/services/resourceCollector.mjs +1 -3
  733. package/dist/services/skillCatalog.cjs +1 -2
  734. package/dist/services/skillCatalog.d.cts +2 -56
  735. package/dist/services/skillCatalog.d.mts +2 -56
  736. package/dist/services/skillCatalog.mjs +1 -2
  737. package/dist/services/skillSources.cjs +1 -2
  738. package/dist/services/skillSources.d.cts +2 -24
  739. package/dist/services/skillSources.d.mts +2 -24
  740. package/dist/services/skillSources.mjs +1 -2
  741. package/dist/services/syncState.cjs +1 -2
  742. package/dist/services/syncState.d.cts +3 -133
  743. package/dist/services/syncState.d.mts +3 -133
  744. package/dist/services/syncState.mjs +1 -2
  745. package/dist/services/tools/toolNames.cjs +2 -0
  746. package/dist/services/tools/toolNames.cjs.map +1 -0
  747. package/dist/services/tools/toolNames.d.cts +25 -0
  748. package/dist/services/tools/toolNames.d.cts.map +1 -0
  749. package/dist/services/tools/toolNames.d.mts +25 -0
  750. package/dist/services/tools/toolNames.d.mts.map +1 -0
  751. package/dist/services/tools/toolNames.mjs +2 -0
  752. package/dist/services/tools/toolNames.mjs.map +1 -0
  753. package/dist/{interfaces → types/interfaces}/compatibility.d.cts +1 -1
  754. package/dist/types/interfaces/compatibility.d.cts.map +1 -0
  755. package/dist/{interfaces → types/interfaces}/compatibility.d.mts +1 -1
  756. package/dist/types/interfaces/compatibility.d.mts.map +1 -0
  757. package/dist/{interfaces → types/interfaces}/harness.d.cts +6 -2
  758. package/dist/types/interfaces/harness.d.cts.map +1 -0
  759. package/dist/{interfaces → types/interfaces}/harness.d.mts +6 -2
  760. package/dist/types/interfaces/harness.d.mts.map +1 -0
  761. package/dist/utils/index.cjs +1 -1
  762. package/dist/utils/index.d.cts +5 -5
  763. package/dist/utils/index.d.mts +5 -5
  764. package/dist/utils/index.mjs +1 -1
  765. package/dist/utils/json.cjs +1 -2
  766. package/dist/utils/json.d.cts +2 -23
  767. package/dist/utils/json.d.mts +2 -23
  768. package/dist/utils/json.mjs +1 -2
  769. package/dist/utils/moduleResolution.cjs +1 -2
  770. package/dist/utils/moduleResolution.d.cts +2 -56
  771. package/dist/utils/moduleResolution.d.mts +2 -56
  772. package/dist/utils/moduleResolution.mjs +1 -2
  773. package/dist/utils/repository.cjs +1 -2
  774. package/dist/utils/repository.d.cts +2 -21
  775. package/dist/utils/repository.d.mts +2 -21
  776. package/dist/utils/repository.mjs +1 -2
  777. package/dist/utils/toolNames.cjs +1 -2
  778. package/dist/utils/toolNames.d.cts +2 -25
  779. package/dist/utils/toolNames.d.mts +2 -25
  780. package/dist/utils/toolNames.mjs +1 -2
  781. package/package.json +59 -37
  782. package/dist/cli/cliApp.cjs.map +0 -1
  783. package/dist/cli/cliApp.d.cts.map +0 -1
  784. package/dist/cli/cliApp.d.mts.map +0 -1
  785. package/dist/cli/cliApp.mjs.map +0 -1
  786. package/dist/cli/compatibilityOptions.cjs.map +0 -1
  787. package/dist/cli/compatibilityOptions.d.cts.map +0 -1
  788. package/dist/cli/compatibilityOptions.d.mts.map +0 -1
  789. package/dist/cli/compatibilityOptions.mjs.map +0 -1
  790. package/dist/cli/help.d.cts.map +0 -1
  791. package/dist/cli/help.d.mts.map +0 -1
  792. package/dist/cli/matrixOptions.cjs.map +0 -1
  793. package/dist/cli/matrixOptions.d.cts.map +0 -1
  794. package/dist/cli/matrixOptions.d.mts.map +0 -1
  795. package/dist/cli/matrixOptions.mjs.map +0 -1
  796. package/dist/cli/options.cjs.map +0 -1
  797. package/dist/cli/options.d.cts.map +0 -1
  798. package/dist/cli/options.d.mts.map +0 -1
  799. package/dist/cli/options.mjs.map +0 -1
  800. package/dist/commands/buildCommand.d.cts +0 -23
  801. package/dist/commands/buildCommand.d.cts.map +0 -1
  802. package/dist/commands/buildCommand.d.mts +0 -23
  803. package/dist/commands/buildCommand.d.mts.map +0 -1
  804. package/dist/config/harnessState.cjs.map +0 -1
  805. package/dist/config/harnessState.d.cts.map +0 -1
  806. package/dist/config/harnessState.d.mts.map +0 -1
  807. package/dist/config/harnessState.mjs.map +0 -1
  808. package/dist/config/projectTrust.cjs.map +0 -1
  809. package/dist/config/projectTrust.d.cts.map +0 -1
  810. package/dist/config/projectTrust.d.mts.map +0 -1
  811. package/dist/config/projectTrust.mjs.map +0 -1
  812. package/dist/entries/addDirCompatibility.cjs +0 -2
  813. package/dist/entries/addDirCompatibility.cjs.map +0 -1
  814. package/dist/entries/addDirCompatibility.d.cts +0 -13
  815. package/dist/entries/addDirCompatibility.d.cts.map +0 -1
  816. package/dist/entries/addDirCompatibility.d.mts +0 -14
  817. package/dist/entries/addDirCompatibility.d.mts.map +0 -1
  818. package/dist/entries/addDirCompatibility.mjs +0 -2
  819. package/dist/entries/addDirCompatibility.mjs.map +0 -1
  820. package/dist/entries/autoStop.cjs.map +0 -1
  821. package/dist/entries/autoStop.d.cts.map +0 -1
  822. package/dist/entries/autoStop.d.mts.map +0 -1
  823. package/dist/entries/autoStop.mjs.map +0 -1
  824. package/dist/entries/components/matrixPicker.cjs.map +0 -1
  825. package/dist/entries/components/matrixPicker.d.cts.map +0 -1
  826. package/dist/entries/components/matrixPicker.d.mts.map +0 -1
  827. package/dist/entries/components/matrixPicker.mjs.map +0 -1
  828. package/dist/entries/components/skillsOverlay.cjs.map +0 -1
  829. package/dist/entries/components/skillsOverlay.d.cts.map +0 -1
  830. package/dist/entries/components/skillsOverlay.d.mts.map +0 -1
  831. package/dist/entries/components/skillsOverlay.mjs.map +0 -1
  832. package/dist/entries/domains.cjs.map +0 -1
  833. package/dist/entries/domains.d.cts.map +0 -1
  834. package/dist/entries/domains.d.mts.map +0 -1
  835. package/dist/entries/domains.mjs.map +0 -1
  836. package/dist/entries/doom.cjs.map +0 -1
  837. package/dist/entries/doom.d.cts.map +0 -1
  838. package/dist/entries/doom.d.mts.map +0 -1
  839. package/dist/entries/doom.mjs.map +0 -1
  840. package/dist/entries/effort.cjs.map +0 -1
  841. package/dist/entries/effort.d.cts.map +0 -1
  842. package/dist/entries/effort.d.mts.map +0 -1
  843. package/dist/entries/effort.mjs.map +0 -1
  844. package/dist/entries/majorMode.cjs.map +0 -1
  845. package/dist/entries/majorMode.d.cts.map +0 -1
  846. package/dist/entries/majorMode.d.mts.map +0 -1
  847. package/dist/entries/majorMode.mjs.map +0 -1
  848. package/dist/entries/notifications.cjs.map +0 -1
  849. package/dist/entries/notifications.d.cts.map +0 -1
  850. package/dist/entries/notifications.d.mts.map +0 -1
  851. package/dist/entries/notifications.mjs.map +0 -1
  852. package/dist/entries/ollamaProvider.cjs.map +0 -1
  853. package/dist/entries/ollamaProvider.d.cts.map +0 -1
  854. package/dist/entries/ollamaProvider.d.mts.map +0 -1
  855. package/dist/entries/ollamaProvider.mjs.map +0 -1
  856. package/dist/entries/persona.cjs.map +0 -1
  857. package/dist/entries/persona.d.cts.map +0 -1
  858. package/dist/entries/persona.d.mts.map +0 -1
  859. package/dist/entries/persona.mjs.map +0 -1
  860. package/dist/entries/profile.cjs.map +0 -1
  861. package/dist/entries/profile.d.cts.map +0 -1
  862. package/dist/entries/profile.d.mts.map +0 -1
  863. package/dist/entries/profile.mjs.map +0 -1
  864. package/dist/entries/repositoryHooks.cjs.map +0 -1
  865. package/dist/entries/repositoryHooks.d.cts.map +0 -1
  866. package/dist/entries/repositoryHooks.d.mts.map +0 -1
  867. package/dist/entries/repositoryHooks.mjs.map +0 -1
  868. package/dist/entries/skills.cjs.map +0 -1
  869. package/dist/entries/skills.d.cts.map +0 -1
  870. package/dist/entries/skills.d.mts.map +0 -1
  871. package/dist/entries/skills.mjs.map +0 -1
  872. package/dist/entries/styleSystem.d.cts.map +0 -1
  873. package/dist/entries/styleSystem.d.mts.map +0 -1
  874. package/dist/entries/styleSystem.mjs.map +0 -1
  875. package/dist/interfaces/compatibility.d.cts.map +0 -1
  876. package/dist/interfaces/compatibility.d.mts.map +0 -1
  877. package/dist/interfaces/harness.d.cts.map +0 -1
  878. package/dist/interfaces/harness.d.mts.map +0 -1
  879. package/dist/logSinkTelemetry.cjs.map +0 -1
  880. package/dist/logSinkTelemetry.d.cts.map +0 -1
  881. package/dist/logSinkTelemetry.d.mts.map +0 -1
  882. package/dist/logSinkTelemetry.mjs.map +0 -1
  883. package/dist/node_modules/.pnpm/@juicesharp_rpiv-ask-user-question@2.2.0_@earendil-works_pi-coding-agent@0.84.1_support_6ba1249e24a50b62791c1c91c9f324c6/node_modules/@juicesharp/rpiv-ask-user-question/events.cjs +0 -2
  884. package/dist/node_modules/.pnpm/@juicesharp_rpiv-ask-user-question@2.2.0_@earendil-works_pi-coding-agent@0.84.1_support_6ba1249e24a50b62791c1c91c9f324c6/node_modules/@juicesharp/rpiv-ask-user-question/events.cjs.map +0 -1
  885. package/dist/node_modules/.pnpm/@juicesharp_rpiv-ask-user-question@2.2.0_@earendil-works_pi-coding-agent@0.84.1_support_6ba1249e24a50b62791c1c91c9f324c6/node_modules/@juicesharp/rpiv-ask-user-question/events.mjs +0 -2
  886. package/dist/node_modules/.pnpm/@juicesharp_rpiv-ask-user-question@2.2.0_@earendil-works_pi-coding-agent@0.84.1_support_6ba1249e24a50b62791c1c91c9f324c6/node_modules/@juicesharp/rpiv-ask-user-question/events.mjs.map +0 -1
  887. package/dist/services/compatibility/index.cjs.map +0 -1
  888. package/dist/services/compatibility/index.mjs.map +0 -1
  889. package/dist/services/compatibilityContext.cjs.map +0 -1
  890. package/dist/services/compatibilityContext.mjs.map +0 -1
  891. package/dist/services/composer.cjs.map +0 -1
  892. package/dist/services/composer.d.cts.map +0 -1
  893. package/dist/services/composer.d.mts.map +0 -1
  894. package/dist/services/composer.mjs.map +0 -1
  895. package/dist/services/extensionCompiler.cjs +0 -3
  896. package/dist/services/extensionCompiler.cjs.map +0 -1
  897. package/dist/services/extensionCompiler.mjs +0 -3
  898. package/dist/services/extensionCompiler.mjs.map +0 -1
  899. package/dist/services/harnessContext.cjs.map +0 -1
  900. package/dist/services/harnessContext.mjs.map +0 -1
  901. package/dist/services/matrixSwitcher.cjs.map +0 -1
  902. package/dist/services/matrixSwitcher.mjs.map +0 -1
  903. package/dist/services/mcpFilter.cjs.map +0 -1
  904. package/dist/services/mcpFilter.d.cts.map +0 -1
  905. package/dist/services/mcpFilter.d.mts.map +0 -1
  906. package/dist/services/mcpFilter.mjs.map +0 -1
  907. package/dist/services/piSettings.cjs.map +0 -1
  908. package/dist/services/piSettings.d.cts.map +0 -1
  909. package/dist/services/piSettings.d.mts.map +0 -1
  910. package/dist/services/piSettings.mjs.map +0 -1
  911. package/dist/services/resourceCollector.cjs.map +0 -1
  912. package/dist/services/resourceCollector.d.cts.map +0 -1
  913. package/dist/services/resourceCollector.d.mts.map +0 -1
  914. package/dist/services/resourceCollector.mjs.map +0 -1
  915. package/dist/services/runtimeBundle.cjs +0 -2
  916. package/dist/services/runtimeBundle.cjs.map +0 -1
  917. package/dist/services/runtimeBundle.d.cts.map +0 -1
  918. package/dist/services/runtimeBundle.d.mts.map +0 -1
  919. package/dist/services/runtimeBundle.mjs +0 -2
  920. package/dist/services/runtimeBundle.mjs.map +0 -1
  921. package/dist/services/skillCatalog.cjs.map +0 -1
  922. package/dist/services/skillCatalog.d.cts.map +0 -1
  923. package/dist/services/skillCatalog.d.mts.map +0 -1
  924. package/dist/services/skillCatalog.mjs.map +0 -1
  925. package/dist/services/syncState.cjs.map +0 -1
  926. package/dist/services/syncState.d.cts.map +0 -1
  927. package/dist/services/syncState.d.mts.map +0 -1
  928. package/dist/services/syncState.mjs.map +0 -1
  929. package/dist/utils/json.cjs.map +0 -1
  930. package/dist/utils/json.d.cts.map +0 -1
  931. package/dist/utils/json.d.mts.map +0 -1
  932. package/dist/utils/json.mjs.map +0 -1
  933. package/dist/utils/moduleResolution.cjs.map +0 -1
  934. package/dist/utils/moduleResolution.d.cts.map +0 -1
  935. package/dist/utils/moduleResolution.d.mts.map +0 -1
  936. package/dist/utils/moduleResolution.mjs.map +0 -1
  937. package/dist/utils/repository.cjs.map +0 -1
  938. package/dist/utils/repository.d.cts.map +0 -1
  939. package/dist/utils/repository.d.mts.map +0 -1
  940. package/dist/utils/repository.mjs.map +0 -1
  941. package/dist/utils/toolNames.cjs.map +0 -1
  942. package/dist/utils/toolNames.d.cts.map +0 -1
  943. package/dist/utils/toolNames.d.mts.map +0 -1
  944. package/dist/utils/toolNames.mjs.map +0 -1
@@ -1,46 +1,2 @@
1
- import { HarnessState as HarnessState$1 } from "../config/harnessState.mjs";
2
- import { DoomHarnessContext } from "@agimon-ai/doompi-config";
3
- import { AgentProfile } from "@agimon-ai/doompi-config/profiles";
4
- import { MajorModesConfig } from "@agimon-ai/doompi-config/majorModes";
5
-
6
- //#region src/services/matrixSwitcher.d.ts
7
- /**
8
- * Live matrix switching.
9
- *
10
- * Every axis writes through the harness state module and relies on Pi's reload
11
- * re-executing extension modules, which drops their module-level caches and
12
- * makes them re-read the environment. That is the same path /domains has always
13
- * used; major mode and profile persona changes now share it.
14
- *
15
- * What reload cannot do is change the SET of loaded extensions: Pi freezes the
16
- * CLI --extension list at construction (resource-loader.js:164) and re-resolves
17
- * that same array on every reload. Callers report those parts as needing a
18
- * relaunch instead of pretending they applied.
19
- */
20
- /** Domains: skills, plugin hooks, MCP config, and subagent directories. */
21
- declare function applyDomains(domainNames: string[], state: DoomHarnessContext): Promise<HarnessState$1>;
22
- /** Applies one major mode and the hook groups its effective layers contribute. */
23
- declare function applyMajorMode(config: MajorModesConfig, majorMode: string, state: DoomHarnessContext): HarnessState$1;
24
- /** Layers that contribute extensions or packages, which reload cannot swap. */
25
- declare function extensionLayers(config: MajorModesConfig, names: string[]): string[];
26
- /** Whether a mode change alters the extension set, and so needs a relaunch. */
27
- declare function needsRelaunch(config: MajorModesConfig, before: string[], after: string[]): boolean;
28
- /**
29
- * Persona: rewrites the assembled prompt file that the persona extension reads.
30
- *
31
- * The extension re-reads the file on reload and appends its block to whatever
32
- * system prompt it is given, so the repository's own AGENTS.md keeps applying
33
- * underneath. Returns false when the directories hold no readable persona.
34
- */
35
- declare function applyPersona(personaDirectory: string, state: DoomHarnessContext, personaRoot?: string): Promise<boolean>;
36
- /**
37
- * Profile: one persona plus the environment defaults it declares.
38
- *
39
- * Lives beside the other switchers rather than in the /profile command,
40
- * because the synced Pi path applies the same switch from its `--profile` flag
41
- * before any command exists to run it.
42
- */
43
- declare function applyProfile(profile: AgentProfile, state: DoomHarnessContext): Promise<string>;
44
- //#endregion
45
- export { applyDomains, applyMajorMode, applyPersona, applyProfile, extensionLayers, needsRelaunch };
46
- //# sourceMappingURL=matrixSwitcher.d.mts.map
1
+ import { applyDomains, applyMajorMode, applyPersona, applyProfile, extensionLayers, needsRelaunch } from "../adapters/matrixSwitcher.mjs";
2
+ export { applyDomains, applyMajorMode, applyPersona, applyProfile, extensionLayers, needsRelaunch };
@@ -1,2 +1 @@
1
- import{requireHarnessPaths as e,updateHarnessState as t}from"../config/harnessState.mjs";import{filterHookDisabledLayers as n}from"./extensionAssembler.mjs";import{resolveMcpAllowlist as r}from"./mcpFilter.mjs";import{collectResources as i}from"./resourceCollector.mjs";import a from"node:path";import{resolvePluginEntries as o,resolveSharedSkills as s}from"@agimon-ai/doompi-config/domains";import{buildPersonaPrompt as c,replaceProfileEnvironment as l}from"@agimon-ai/doompi-config/profiles";import{layerHookGroups as u,resolveLayers as d}from"@agimon-ai/doompi-config/majorModes";import f from"node:fs";async function p(n,c){let{root:l,temporaryDirectory:u}=e(c),d=await i(l,o(l,n,[...c.pluginDirectories]),{agents:c.agents,mcp:c.mcp,temporaryDirectory:u,workflowExtension:c.workflowExtension,sharedSkills:s(l,n),mcpAllowlist:r(l,n)}),f=t({domains:n,skillDirectories:d.skillDirectories,pluginHooks:d.pluginHooks,mcpConfigPath:d.mcpConfigPath});return process.env.PI_SUBAGENT_EXTRA_AGENT_DIRS=d.agentDirectories.join(a.delimiter),process.env.PI_SUBAGENT_EXTRA_SKILL_DIRS=d.skillDirectories.join(a.delimiter),f}function m(e,r,i){let a=n(d(e,r),i.hooks);return t({majorMode:r,layers:a,hookGroups:u(e,a)})}function h(e,t){return t.filter(t=>{let n=e.layers[t];return!!(n&&((n.extensions?.length??0)>0||(n.packages?.length??0)>0))}).sort()}function g(e,t,n){return h(e,t).join(`,`)!==h(e,n).join(`,`)}async function _(n,r,i){let{root:o,temporaryDirectory:s}=e(r),l=c(i??o,n);if(!l)return!1;let u=a.join(s,`persona.md`);return await f.promises.writeFile(u,`${l}\n`,{mode:384}),t({personaFile:u}),!0}async function v(e,n){if(!await _(e.persona,n,e.personaRoot))throw Error(`Profile ${e.name} has no readable persona files`);let r=l(process.env,n.profileEnvironment,e.env);t({profile:e.name,profileEnvironment:r});let i=Object.keys(e.env).sort(),a=i.length>0?`; env defaults ${i.join(`, `)}`:``;return`Loaded ${e.name}: persona ${e.persona}${a}.`}export{p as applyDomains,m as applyMajorMode,_ as applyPersona,v as applyProfile,h as extensionLayers,g as needsRelaunch};
2
- //# sourceMappingURL=matrixSwitcher.mjs.map
1
+ import{applyDomains as e,applyMajorMode as t,applyPersona as n,applyProfile as r,extensionLayers as i,needsRelaunch as a}from"../adapters/matrixSwitcher.mjs";export{e as applyDomains,t as applyMajorMode,n as applyPersona,r as applyProfile,i as extensionLayers,a as needsRelaunch};
@@ -1,3 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../_virtual/_rolldown/runtime.cjs`);let t=require(`node:path`);t=e.__toESM(t,1);let n=require(`@agimon-ai/doompi-config/domains`),r=require(`node:fs`);r=e.__toESM(r,1);let i=require(`yaml`);const a=`agiflow-proxy`;function o(e,t){let r=(0,n.loadDomains)(e),i=(0,n.expandDomainNames)(r,t);if(i.length===0)return;let a=new Set,o=new Set;for(let e of i){let t=r.domains[e]?.mcp;if(!t)return;for(let e of t.servers??[])a.add(e);for(let e of t.proxy??[])o.add(e)}return{servers:[...a],proxy:[...o]}}function s(e,t){if(!t||t.length===0)return e;let n=e.mcpServers??{},r={};for(let[e,i]of Object.entries(n))t.includes(e)&&(r[e]=i);return{...e,mcpServers:r}}function c(e,t){if(!t||t.length===0)return e;let n=(0,i.parse)(e)??{},r=n.mcpServers??{},a={},o=[];for(let[e,n]of Object.entries(r))t.includes(e)?a[e]=n:o.push(e);return`${[`# Generated by doompi for this run. Do not edit.`,`# Upstreams kept: ${Object.keys(a).join(`, `)||`(none)`}`,`# Upstreams removed by the domain allowlist: ${o.join(`, `)||`(none)`}`,``].join(`
2
- `)}${(0,i.stringify)({...n,mcpServers:a})}`}async function l(e,n,i){await r.default.promises.mkdir(i,{recursive:!0});let o=JSON.parse(r.default.readFileSync(e,`utf8`)),s=o.mcpServers??{},c=s[a],l=t.default.join(n,`mcp-config.yaml`);if(c&&r.default.existsSync(l)){let e=[...c.args??[]],n=e.indexOf(`--config`);if(n!==-1){let o=t.default.join(i,`mcp-config.yaml`);await r.default.promises.copyFile(l,o),e[n+1]=o,s[a]={...c,args:e}}}let u=t.default.join(i,`mcp.json`);return await r.default.promises.writeFile(u,`${JSON.stringify({...o,mcpServers:s},null,2)}\n`,{mode:384}),u}async function u(e,n,i,o){if(!n)return e;let l=s(e,n.servers),u=l.mcpServers??{},d=u[a];if(!d||!n.proxy||n.proxy.length===0)return l;let f=[...d.args??[]],p=f.indexOf(`--config`);if(p===-1||!f[p+1])return l;let m=t.default.resolve(i,f[p+1]);if(!r.default.existsSync(m))return l;let h=t.default.join(o,`mcp-config.yaml`);return await r.default.promises.writeFile(h,c(r.default.readFileSync(m,`utf8`),n.proxy),{mode:384}),f[p+1]=h,{...l,mcpServers:{...u,[a]:{...d,args:f}}}}exports.PROXY_SERVER_NAME=a,exports.applyMcpAllowlist=u,exports.filterMcpServers=s,exports.filterProxyConfig=c,exports.persistMcpConfig=l,exports.resolveMcpAllowlist=o;
3
- //# sourceMappingURL=mcpFilter.cjs.map
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../adapters/mcpFilter.cjs`);exports.PROXY_SERVER_NAME=e.PROXY_SERVER_NAME,exports.applyMcpAllowlist=e.applyMcpAllowlist,exports.filterMcpServers=e.filterMcpServers,exports.filterProxyConfig=e.filterProxyConfig,exports.persistMcpConfig=e.persistMcpConfig,exports.resolveMcpAllowlist=e.resolveMcpAllowlist;
@@ -1,40 +1,2 @@
1
- import { DomainMcpAllowlist } from "@agimon-ai/doompi-config/domains";
2
-
3
- //#region src/services/mcpFilter.d.ts
4
- /** Server name in .mcp.json whose upstreams are declared in mcp-config.yaml. */
5
- declare const PROXY_SERVER_NAME = "agiflow-proxy";
6
- type JsonObject = Record<string, unknown>;
7
- /**
8
- * Unions the mcp allowlists of the selected domains.
9
- *
10
- * Returns undefined when any selected domain omits `mcp`, which means "give me
11
- * everything". Filtering only kicks in once every selected domain has opted in,
12
- * so a domain that has not been migrated yet cannot silently lose its tools.
13
- */
14
- declare function resolveMcpAllowlist(repoRoot: string, domainNames: string[]): DomainMcpAllowlist | undefined;
15
- /** Drops servers that are not on the allowlist. An empty list means keep all. */
16
- declare function filterMcpServers(config: JsonObject, allowed?: string[]): JsonObject;
17
- /**
18
- * Rewrites the proxy's upstream list, keeping only allowed servers.
19
- *
20
- * Entries are removed rather than marked disabled so a filtered upstream cannot
21
- * be reached even if the proxy ignores the disabled flag. Comments in the
22
- * source file are not preserved; the result is a per-run temporary file.
23
- */
24
- declare function filterProxyConfig(yamlText: string, allowed?: string[]): string;
25
- /**
26
- * Copies a generated MCP config out of the run directory so another frontend
27
- * can use it, keeping the proxy's --config pointing at the copy.
28
- *
29
- * The run directory is deleted when the harness exits, so emitting for
30
- * claude.sh or codex.sh has to relocate both files together.
31
- */
32
- declare function persistMcpConfig(sourceConfigPath: string, temporaryDirectory: string, targetDirectory: string): Promise<string>;
33
- /**
34
- * Applies the allowlist to a merged MCP config, writing a filtered proxy config
35
- * into the run directory and repointing the proxy at it when needed.
36
- */
37
- declare function applyMcpAllowlist(config: JsonObject, allowlist: DomainMcpAllowlist | undefined, repoRoot: string, temporaryDirectory: string): Promise<JsonObject>;
38
- //#endregion
39
- export { PROXY_SERVER_NAME, applyMcpAllowlist, filterMcpServers, filterProxyConfig, persistMcpConfig, resolveMcpAllowlist };
40
- //# sourceMappingURL=mcpFilter.d.cts.map
1
+ import { PROXY_SERVER_NAME, applyMcpAllowlist, filterMcpServers, filterProxyConfig, persistMcpConfig, resolveMcpAllowlist } from "../adapters/mcpFilter.cjs";
2
+ export { PROXY_SERVER_NAME, applyMcpAllowlist, filterMcpServers, filterProxyConfig, persistMcpConfig, resolveMcpAllowlist };
@@ -1,40 +1,2 @@
1
- import { DomainMcpAllowlist } from "@agimon-ai/doompi-config/domains";
2
-
3
- //#region src/services/mcpFilter.d.ts
4
- /** Server name in .mcp.json whose upstreams are declared in mcp-config.yaml. */
5
- declare const PROXY_SERVER_NAME = "agiflow-proxy";
6
- type JsonObject = Record<string, unknown>;
7
- /**
8
- * Unions the mcp allowlists of the selected domains.
9
- *
10
- * Returns undefined when any selected domain omits `mcp`, which means "give me
11
- * everything". Filtering only kicks in once every selected domain has opted in,
12
- * so a domain that has not been migrated yet cannot silently lose its tools.
13
- */
14
- declare function resolveMcpAllowlist(repoRoot: string, domainNames: string[]): DomainMcpAllowlist | undefined;
15
- /** Drops servers that are not on the allowlist. An empty list means keep all. */
16
- declare function filterMcpServers(config: JsonObject, allowed?: string[]): JsonObject;
17
- /**
18
- * Rewrites the proxy's upstream list, keeping only allowed servers.
19
- *
20
- * Entries are removed rather than marked disabled so a filtered upstream cannot
21
- * be reached even if the proxy ignores the disabled flag. Comments in the
22
- * source file are not preserved; the result is a per-run temporary file.
23
- */
24
- declare function filterProxyConfig(yamlText: string, allowed?: string[]): string;
25
- /**
26
- * Copies a generated MCP config out of the run directory so another frontend
27
- * can use it, keeping the proxy's --config pointing at the copy.
28
- *
29
- * The run directory is deleted when the harness exits, so emitting for
30
- * claude.sh or codex.sh has to relocate both files together.
31
- */
32
- declare function persistMcpConfig(sourceConfigPath: string, temporaryDirectory: string, targetDirectory: string): Promise<string>;
33
- /**
34
- * Applies the allowlist to a merged MCP config, writing a filtered proxy config
35
- * into the run directory and repointing the proxy at it when needed.
36
- */
37
- declare function applyMcpAllowlist(config: JsonObject, allowlist: DomainMcpAllowlist | undefined, repoRoot: string, temporaryDirectory: string): Promise<JsonObject>;
38
- //#endregion
39
- export { PROXY_SERVER_NAME, applyMcpAllowlist, filterMcpServers, filterProxyConfig, persistMcpConfig, resolveMcpAllowlist };
40
- //# sourceMappingURL=mcpFilter.d.mts.map
1
+ import { PROXY_SERVER_NAME, applyMcpAllowlist, filterMcpServers, filterProxyConfig, persistMcpConfig, resolveMcpAllowlist } from "../adapters/mcpFilter.mjs";
2
+ export { PROXY_SERVER_NAME, applyMcpAllowlist, filterMcpServers, filterProxyConfig, persistMcpConfig, resolveMcpAllowlist };
@@ -1,3 +1 @@
1
- import e from"node:path";import{expandDomainNames as t,loadDomains as n}from"@agimon-ai/doompi-config/domains";import r from"node:fs";import{parse as i,stringify as a}from"yaml";const o=`agiflow-proxy`;function s(e,r){let i=n(e),a=t(i,r);if(a.length===0)return;let o=new Set,s=new Set;for(let e of a){let t=i.domains[e]?.mcp;if(!t)return;for(let e of t.servers??[])o.add(e);for(let e of t.proxy??[])s.add(e)}return{servers:[...o],proxy:[...s]}}function c(e,t){if(!t||t.length===0)return e;let n=e.mcpServers??{},r={};for(let[e,i]of Object.entries(n))t.includes(e)&&(r[e]=i);return{...e,mcpServers:r}}function l(e,t){if(!t||t.length===0)return e;let n=i(e)??{},r=n.mcpServers??{},o={},s=[];for(let[e,n]of Object.entries(r))t.includes(e)?o[e]=n:s.push(e);return`${[`# Generated by doompi for this run. Do not edit.`,`# Upstreams kept: ${Object.keys(o).join(`, `)||`(none)`}`,`# Upstreams removed by the domain allowlist: ${s.join(`, `)||`(none)`}`,``].join(`
2
- `)}${a({...n,mcpServers:o})}`}async function u(t,n,i){await r.promises.mkdir(i,{recursive:!0});let a=JSON.parse(r.readFileSync(t,`utf8`)),s=a.mcpServers??{},c=s[o],l=e.join(n,`mcp-config.yaml`);if(c&&r.existsSync(l)){let t=[...c.args??[]],n=t.indexOf(`--config`);if(n!==-1){let a=e.join(i,`mcp-config.yaml`);await r.promises.copyFile(l,a),t[n+1]=a,s[o]={...c,args:t}}}let u=e.join(i,`mcp.json`);return await r.promises.writeFile(u,`${JSON.stringify({...a,mcpServers:s},null,2)}\n`,{mode:384}),u}async function d(t,n,i,a){if(!n)return t;let s=c(t,n.servers),u=s.mcpServers??{},d=u[o];if(!d||!n.proxy||n.proxy.length===0)return s;let f=[...d.args??[]],p=f.indexOf(`--config`);if(p===-1||!f[p+1])return s;let m=e.resolve(i,f[p+1]);if(!r.existsSync(m))return s;let h=e.join(a,`mcp-config.yaml`);return await r.promises.writeFile(h,l(r.readFileSync(m,`utf8`),n.proxy),{mode:384}),f[p+1]=h,{...s,mcpServers:{...u,[o]:{...d,args:f}}}}export{o as PROXY_SERVER_NAME,d as applyMcpAllowlist,c as filterMcpServers,l as filterProxyConfig,u as persistMcpConfig,s as resolveMcpAllowlist};
3
- //# sourceMappingURL=mcpFilter.mjs.map
1
+ import{PROXY_SERVER_NAME as e,applyMcpAllowlist as t,filterMcpServers as n,filterProxyConfig as r,persistMcpConfig as i,resolveMcpAllowlist as a}from"../adapters/mcpFilter.mjs";export{e as PROXY_SERVER_NAME,t as applyMcpAllowlist,n as filterMcpServers,r as filterProxyConfig,i as persistMcpConfig,a as resolveMcpAllowlist};
@@ -0,0 +1,2 @@
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`../_virtual/_rolldown/runtime.cjs`);let e=require(`@agimon-ai/doompi-extension-contracts/mode`),t=require(`@agimon-ai/doompi-extension-contracts/protocol`);function n(e,n,r=!1){return new t.DoomProtocolError({code:e,message:n,retryable:r})}function r(e,t){return e.descriptor.source===t.source&&e.descriptor.id===t.id&&e.ownerGeneration===t.ownerGeneration&&e.registrationId===t.registrationId}function i(e,t){return JSON.stringify(e)===JSON.stringify(t)}function a(e,t){return e.ownerGeneration===t.ownerGeneration&&e.stateRevision===t.stateRevision&&JSON.stringify(e.descriptor)===JSON.stringify(t.descriptor)&&JSON.stringify(e.state)===JSON.stringify(t.state)}function o(o,s){let c=`${e.MINOR_MODE_CATALOG_SOURCE}:${crypto.randomUUID()}`,l=s.actionTimeoutMs??e.MINOR_MODE_ACTION_TIMEOUT_MS,u=new Map,d=new Map,f=new Map,p=new Map,m=[],h=0,g=!1,_=()=>({hostGeneration:c,revision:h,modes:[...u.values()].map(e=>structuredClone(e)).sort((e,t)=>e.descriptor.order-t.descriptor.order||e.descriptor.source.localeCompare(t.descriptor.source)||e.descriptor.id.localeCompare(t.descriptor.id))}),v=()=>{h+=1,o.notify(e.MinorModeCatalogChanged,_())},y=(t,n)=>{p.set(t,n),p.size>e.MINOR_MODE_TERMINAL_OPERATION_LIMIT&&p.delete(p.keys().next().value)},b=(t,n)=>{o.notify(e.MinorModeOwnerCancellation,{hostGeneration:c,operationId:t.request.operationId,mode:structuredClone(t.request.mode),reason:n})},x=e=>{clearTimeout(e.timer),d.delete(e.request.operationId),f.get(e.modeKey)===e.request.operationId&&f.delete(e.modeKey)},S=(e,t,n)=>{x(e),n&&b(e,n);let r={code:t.code,message:t.message,retryable:t.retryable};y(e.request.operationId,{status:`failed`,request:structuredClone(e.request),requesterSource:e.requesterSource,error:r}),e.reject(t)},C=(e,t,n)=>{for(let r of d.values())r.modeKey===e&&S(r,t,n)},w=(t,r)=>{if(g)throw n(e.MINOR_MODE_ERROR_CODE.sessionReplaced,`Minor-mode catalog is disposed.`);if(r.source!==t.descriptor.source)throw n(e.MINOR_MODE_ERROR_CODE.registrationConflict,`Registration source does not match its envelope.`);let i=(0,e.validateMinorModeDefinition)(t.descriptor,t.state);if(i)throw n(e.MINOR_MODE_ERROR_CODE.registrationConflict,i);let o=(0,e.minorModeKey)(t.descriptor),s=u.get(o);if(s){if(!a(s,t))throw n(e.MINOR_MODE_ERROR_CODE.registrationConflict,`Minor mode '${t.descriptor.source}/${t.descriptor.id}' already has a live owner.`);return{hostGeneration:c,registrationId:s.registrationId,catalogRevision:h}}if(u.size>=e.MINOR_MODE_MAX_RECORDS)throw n(e.MINOR_MODE_ERROR_CODE.registrationConflict,`Minor-mode catalog capacity reached.`);let l={descriptor:structuredClone(t.descriptor),state:structuredClone(t.state),ownerGeneration:t.ownerGeneration,registrationId:`minor-mode-registration:${crypto.randomUUID()}`,stateRevision:t.stateRevision};return u.set(o,l),v(),{hostGeneration:c,registrationId:l.registrationId,catalogRevision:h}},T=(t,n)=>{if(n.source!==t.source||t.hostGeneration!==c)return;let i=(0,e.minorModeKey)(t),a=u.get(i);!a||!r(a,t)||t.stateRevision<=a.stateRevision||(0,e.validateMinorModeDefinition)(a.descriptor,t.state)||(u.set(i,{...a,state:structuredClone(t.state),stateRevision:t.stateRevision}),v())},E=(t,i)=>{if(i.source!==t.source||t.hostGeneration!==c)return;let a=(0,e.minorModeKey)(t),o=u.get(a);!o||!r(o,t)||(u.delete(a),C(a,n(e.MINOR_MODE_ERROR_CODE.staleRegistration,`Minor-mode owner unregistered.`),`Minor-mode owner unregistered.`),v())},D=(i,a)=>{if(x(i),a.status===`failed`){let e=new t.DoomProtocolError(a.error);y(i.request.operationId,{status:`failed`,request:structuredClone(i.request),requesterSource:i.requesterSource,error:a.error}),i.reject(e);return}let o=u.get(i.modeKey);if(!o||!r(o,i.request.mode)){let t=n(e.MINOR_MODE_ERROR_CODE.staleRegistration,`Minor-mode owner changed during action.`);y(i.request.operationId,{status:`failed`,request:structuredClone(i.request),requesterSource:i.requesterSource,error:{code:t.code,message:t.message,retryable:t.retryable}}),i.reject(t);return}let s={operationId:i.request.operationId,catalogRevision:h,mode:structuredClone(o),...a.message?{message:a.message}:{}};y(i.request.operationId,{status:`completed`,request:structuredClone(i.request),requesterSource:i.requesterSource,response:s}),i.resolve(s)},O=(e,t)=>{if(t.source!==e.mode.source||e.hostGeneration!==c)return;let n=d.get(e.operationId);if(!n)return;let i=u.get(n.modeKey);!i||!r(i,e.mode)||!r(i,n.request.mode)||D(n,e)},k=(a,m,h)=>{if(h?.aborted)return Promise.reject(n(e.MINOR_MODE_ERROR_CODE.actionAborted,`Minor-mode action was aborted.`));if(g)return Promise.reject(n(e.MINOR_MODE_ERROR_CODE.sessionReplaced,`Minor-mode catalog is disposed.`));let _=p.get(a.operationId);if(_)return _.requesterSource!==m||!i(_.request,a)?Promise.reject(n(e.MINOR_MODE_ERROR_CODE.invalidArguments,`Operation id is already used by another request.`)):_.status===`completed`?Promise.resolve(structuredClone(_.response)):Promise.reject(new t.DoomProtocolError(_.error));let v=d.get(a.operationId);if(v)return v.requesterSource!==m||!i(v.request,a)?Promise.reject(n(e.MINOR_MODE_ERROR_CODE.invalidArguments,`Operation id is already used by another request.`)):new Promise((e,t)=>{let n=v.resolve,r=v.reject;v.resolve=t=>{n(t),e(structuredClone(t))},v.reject=e=>{r(e),t(e)}});let y=(0,e.minorModeKey)(a.mode),b=u.get(y);if(!b)return Promise.reject(n(e.MINOR_MODE_ERROR_CODE.modeNotFound,`Minor mode is unavailable.`));if(!r(b,a.mode))return Promise.reject(n(e.MINOR_MODE_ERROR_CODE.staleRegistration,`Minor-mode reference is stale.`));let x=b.descriptor.actions.find(({id:e})=>e===a.actionId);if(!x)return Promise.reject(n(e.MINOR_MODE_ERROR_CODE.actionNotFound,`Minor-mode action is unknown.`));let C=b.state.actions.find(({id:e})=>e===a.actionId);if(!C?.enabled)return Promise.reject(n(e.MINOR_MODE_ERROR_CODE.actionDisabled,C?.disabledReason??`Action '${a.actionId}' is disabled.`));if(!x.contexts.includes(s.sessionKind))return Promise.reject(n(e.MINOR_MODE_ERROR_CODE.unsupportedContext,`Action '${a.actionId}' is unavailable in ${s.sessionKind} sessions.`));try{(0,e.validateMinorModeActionArguments)(x,a.arguments)}catch(e){return Promise.reject(e)}if(f.has(y))return Promise.reject(n(e.MINOR_MODE_ERROR_CODE.modeBusy,`Minor mode already has an action in flight.`,!0));let w=new Promise((t,r)=>{let i,u=setTimeout(()=>{S(i,n(e.MINOR_MODE_ERROR_CODE.actionTimeout,`Minor-mode owner action timed out.`,!0),`Minor-mode action timed out.`)},l);i={request:structuredClone(a),requesterSource:m,modeKey:y,timer:u,resolve:t,reject:r},d.set(a.operationId,i),f.set(y,a.operationId),o.notify(e.MinorModeOwnerInvocation,{hostGeneration:c,operationId:a.operationId,mode:structuredClone(a.mode),actionId:a.actionId,arguments:structuredClone(a.arguments),sessionKind:s.sessionKind,deadlineAt:Date.now()+l})});if(!h)return w;let T=()=>{let t=d.get(a.operationId);!t||t.requesterSource!==m||S(t,n(e.MINOR_MODE_ERROR_CODE.actionAborted,`Minor-mode action was aborted.`),`Minor-mode action caller aborted.`)};return h.addEventListener(`abort`,T,{once:!0}),w.finally(()=>h.removeEventListener(`abort`,T))};return m.push(o.provide(e.MinorModeRegistration,w),o.provide(e.MinorModeCatalogQuery,()=>_()),o.provide(e.MinorModeAction,(e,t)=>k(e,t.source)),o.onNotification(e.MinorModeStateChanged,(e,t)=>T(e,t)),o.onNotification(e.MinorModeUnregistration,(e,t)=>E(e,t)),o.onNotification(e.MinorModeOwnerOutcome,(e,t)=>O(e,t)),o.onNotification(e.MinorModeActionCancellation,(t,r)=>{let i=d.get(t.operationId);!i||i.requesterSource!==r.source||S(i,n(e.MINOR_MODE_ERROR_CODE.actionAborted,`Minor-mode action was aborted.`),`Minor-mode action caller aborted.`)})),o.notify(e.MinorModeHostAvailable,{hostGeneration:c}),{generation:c,getSnapshot:_,invoke:k,dispose(){if(!g){g=!0;for(let t of d.values())S(t,n(e.MINOR_MODE_ERROR_CODE.sessionReplaced,`Minor-mode catalog session ended.`),`Minor-mode catalog session ended.`);for(let e of m.splice(0))e();u.clear(),f.clear(),p.clear()}}}}exports.createMinorModeCatalogHost=o;
2
+ //# sourceMappingURL=modeCatalog.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modeCatalog.cjs","names":["DoomProtocolError","MINOR_MODE_CATALOG_SOURCE","MINOR_MODE_ACTION_TIMEOUT_MS","MinorModeCatalogChanged","MINOR_MODE_TERMINAL_OPERATION_LIMIT","MinorModeOwnerCancellation","MINOR_MODE_ERROR_CODE","MINOR_MODE_MAX_RECORDS","MinorModeOwnerInvocation","MinorModeRegistration","MinorModeCatalogQuery","MinorModeAction","MinorModeStateChanged","MinorModeUnregistration","MinorModeOwnerOutcome","MinorModeActionCancellation","MinorModeHostAvailable"],"sources":["../../src/services/modeCatalog.ts"],"sourcesContent":["import {\n MINOR_MODE_ACTION_TIMEOUT_MS,\n MINOR_MODE_CATALOG_SOURCE,\n MINOR_MODE_ERROR_CODE,\n MINOR_MODE_MAX_RECORDS,\n MINOR_MODE_TERMINAL_OPERATION_LIMIT,\n MinorModeAction,\n MinorModeActionCancellation,\n type MinorModeActionRequest,\n type MinorModeActionResponse,\n MinorModeCatalogChanged,\n MinorModeCatalogQuery,\n type MinorModeCatalogSnapshot,\n MinorModeHostAvailable,\n MinorModeOwnerCancellation,\n MinorModeOwnerInvocation,\n MinorModeOwnerOutcome,\n type MinorModeOwnerOutcomePayload,\n type MinorModeRecord,\n MinorModeRegistration,\n type MinorModeRegistrationRef,\n type MinorModeRegistrationRequest,\n type MinorModeRegistrationResponse,\n type MinorModeSessionKind,\n MinorModeStateChanged,\n type MinorModeStateChangedPayload,\n MinorModeUnregistration,\n type MinorModeUnregistrationPayload,\n minorModeKey,\n validateMinorModeActionArguments,\n validateMinorModeDefinition,\n} from '@agimon-ai/doompi-extension-contracts/mode';\nimport {\n DoomProtocolError,\n type ProtocolErrorPayload,\n type ProtocolIdentity,\n type ProtocolRuntime,\n} from '@agimon-ai/doompi-extension-contracts/protocol';\n\ninterface PendingOperation {\n request: MinorModeActionRequest;\n requesterSource: string;\n modeKey: string;\n timer: ReturnType<typeof setTimeout>;\n resolve(this: void, value: MinorModeActionResponse): void;\n reject(this: void, error: DoomProtocolError): void;\n}\n\ninterface TerminalSuccess {\n status: 'completed';\n request: MinorModeActionRequest;\n requesterSource: string;\n response: MinorModeActionResponse;\n}\n\ninterface TerminalFailure {\n status: 'failed';\n request: MinorModeActionRequest;\n requesterSource: string;\n error: ProtocolErrorPayload;\n}\n\ntype TerminalOperation = TerminalSuccess | TerminalFailure;\n\nexport interface MinorModeCatalogHostOptions {\n sessionKind: MinorModeSessionKind;\n actionTimeoutMs?: number;\n}\n\nexport interface MinorModeCatalogHost {\n readonly generation: string;\n getSnapshot(): MinorModeCatalogSnapshot;\n invoke(\n request: MinorModeActionRequest,\n requesterSource: string,\n signal?: AbortSignal,\n ): Promise<MinorModeActionResponse>;\n dispose(): void;\n}\n\nfunction protocolError(code: string, message: string, retryable = false): DoomProtocolError {\n return new DoomProtocolError({ code, message, retryable });\n}\n\nfunction sameRegistration(record: MinorModeRecord, ref: MinorModeRegistrationRef): boolean {\n return (\n record.descriptor.source === ref.source &&\n record.descriptor.id === ref.id &&\n record.ownerGeneration === ref.ownerGeneration &&\n record.registrationId === ref.registrationId\n );\n}\n\nfunction sameRequest(left: MinorModeActionRequest, right: MinorModeActionRequest): boolean {\n return JSON.stringify(left) === JSON.stringify(right);\n}\n\nfunction sameRegistrationPayload(record: MinorModeRecord, request: MinorModeRegistrationRequest): boolean {\n return (\n record.ownerGeneration === request.ownerGeneration &&\n record.stateRevision === request.stateRevision &&\n JSON.stringify(record.descriptor) === JSON.stringify(request.descriptor) &&\n JSON.stringify(record.state) === JSON.stringify(request.state)\n );\n}\n\nexport function createMinorModeCatalogHost(\n runtime: ProtocolRuntime,\n options: MinorModeCatalogHostOptions,\n): MinorModeCatalogHost {\n const hostGeneration = `${MINOR_MODE_CATALOG_SOURCE}:${crypto.randomUUID()}`;\n const actionTimeoutMs = options.actionTimeoutMs ?? MINOR_MODE_ACTION_TIMEOUT_MS;\n const records = new Map<string, MinorModeRecord>();\n const pending = new Map<string, PendingOperation>();\n const activeByMode = new Map<string, string>();\n const terminal = new Map<string, TerminalOperation>();\n const disposers: Array<() => void> = [];\n let revision = 0;\n let disposed = false;\n\n const snapshot = (): MinorModeCatalogSnapshot => ({\n hostGeneration,\n revision,\n modes: [...records.values()]\n .map((record) => structuredClone(record))\n .sort(\n (left, right) =>\n left.descriptor.order - right.descriptor.order ||\n left.descriptor.source.localeCompare(right.descriptor.source) ||\n left.descriptor.id.localeCompare(right.descriptor.id),\n ),\n });\n\n const publish = (): void => {\n revision += 1;\n runtime.notify(MinorModeCatalogChanged, snapshot());\n };\n\n const remember = (operationId: string, outcome: TerminalOperation): void => {\n terminal.set(operationId, outcome);\n if (terminal.size > MINOR_MODE_TERMINAL_OPERATION_LIMIT) {\n terminal.delete(terminal.keys().next().value as string);\n }\n };\n\n const cancelOwner = (operation: PendingOperation, reason: string): void => {\n runtime.notify(MinorModeOwnerCancellation, {\n hostGeneration,\n operationId: operation.request.operationId,\n mode: structuredClone(operation.request.mode),\n reason,\n });\n };\n\n const removePending = (operation: PendingOperation): void => {\n clearTimeout(operation.timer);\n pending.delete(operation.request.operationId);\n if (activeByMode.get(operation.modeKey) === operation.request.operationId) {\n activeByMode.delete(operation.modeKey);\n }\n };\n\n const fail = (operation: PendingOperation, error: DoomProtocolError, cancelReason?: string): void => {\n removePending(operation);\n if (cancelReason) cancelOwner(operation, cancelReason);\n const payload = { code: error.code, message: error.message, retryable: error.retryable };\n remember(operation.request.operationId, {\n status: 'failed',\n request: structuredClone(operation.request),\n requesterSource: operation.requesterSource,\n error: payload,\n });\n operation.reject(error);\n };\n\n const cancelModeOperations = (key: string, error: DoomProtocolError, reason: string): void => {\n for (const operation of pending.values()) {\n if (operation.modeKey === key) fail(operation, error, reason);\n }\n };\n\n const register = (\n request: MinorModeRegistrationRequest,\n identity: ProtocolIdentity,\n ): MinorModeRegistrationResponse => {\n if (disposed) throw protocolError(MINOR_MODE_ERROR_CODE.sessionReplaced, 'Minor-mode catalog is disposed.');\n if (identity.source !== request.descriptor.source) {\n throw protocolError(\n MINOR_MODE_ERROR_CODE.registrationConflict,\n 'Registration source does not match its envelope.',\n );\n }\n const definitionError = validateMinorModeDefinition(request.descriptor, request.state);\n if (definitionError) throw protocolError(MINOR_MODE_ERROR_CODE.registrationConflict, definitionError);\n const key = minorModeKey(request.descriptor);\n const existing = records.get(key);\n if (existing) {\n if (!sameRegistrationPayload(existing, request)) {\n throw protocolError(\n MINOR_MODE_ERROR_CODE.registrationConflict,\n `Minor mode '${request.descriptor.source}/${request.descriptor.id}' already has a live owner.`,\n );\n }\n return { hostGeneration, registrationId: existing.registrationId, catalogRevision: revision };\n }\n if (records.size >= MINOR_MODE_MAX_RECORDS) {\n throw protocolError(MINOR_MODE_ERROR_CODE.registrationConflict, 'Minor-mode catalog capacity reached.');\n }\n const record: MinorModeRecord = {\n descriptor: structuredClone(request.descriptor),\n state: structuredClone(request.state),\n ownerGeneration: request.ownerGeneration,\n registrationId: `minor-mode-registration:${crypto.randomUUID()}`,\n stateRevision: request.stateRevision,\n };\n records.set(key, record);\n publish();\n return { hostGeneration, registrationId: record.registrationId, catalogRevision: revision };\n };\n\n const stateChanged = (update: MinorModeStateChangedPayload, identity: ProtocolIdentity): void => {\n if (identity.source !== update.source || update.hostGeneration !== hostGeneration) return;\n const key = minorModeKey(update);\n const record = records.get(key);\n if (!record || !sameRegistration(record, update) || update.stateRevision <= record.stateRevision) return;\n const definitionError = validateMinorModeDefinition(record.descriptor, update.state);\n if (definitionError) return;\n records.set(key, { ...record, state: structuredClone(update.state), stateRevision: update.stateRevision });\n publish();\n };\n\n const unregister = (registration: MinorModeUnregistrationPayload, identity: ProtocolIdentity): void => {\n if (identity.source !== registration.source || registration.hostGeneration !== hostGeneration) return;\n const key = minorModeKey(registration);\n const record = records.get(key);\n if (!record || !sameRegistration(record, registration)) return;\n records.delete(key);\n cancelModeOperations(\n key,\n protocolError(MINOR_MODE_ERROR_CODE.staleRegistration, 'Minor-mode owner unregistered.'),\n 'Minor-mode owner unregistered.',\n );\n publish();\n };\n\n const complete = (operation: PendingOperation, outcome: MinorModeOwnerOutcomePayload): void => {\n removePending(operation);\n if (outcome.status === 'failed') {\n const error = new DoomProtocolError(outcome.error);\n remember(operation.request.operationId, {\n status: 'failed',\n request: structuredClone(operation.request),\n requesterSource: operation.requesterSource,\n error: outcome.error,\n });\n operation.reject(error);\n return;\n }\n const record = records.get(operation.modeKey);\n if (!record || !sameRegistration(record, operation.request.mode)) {\n const error = protocolError(MINOR_MODE_ERROR_CODE.staleRegistration, 'Minor-mode owner changed during action.');\n remember(operation.request.operationId, {\n status: 'failed',\n request: structuredClone(operation.request),\n requesterSource: operation.requesterSource,\n error: { code: error.code, message: error.message, retryable: error.retryable },\n });\n operation.reject(error);\n return;\n }\n const response: MinorModeActionResponse = {\n operationId: operation.request.operationId,\n catalogRevision: revision,\n mode: structuredClone(record),\n ...(outcome.message ? { message: outcome.message } : {}),\n };\n remember(operation.request.operationId, {\n status: 'completed',\n request: structuredClone(operation.request),\n requesterSource: operation.requesterSource,\n response,\n });\n operation.resolve(response);\n };\n\n const ownerOutcome = (outcome: MinorModeOwnerOutcomePayload, identity: ProtocolIdentity): void => {\n if (identity.source !== outcome.mode.source || outcome.hostGeneration !== hostGeneration) return;\n const operation = pending.get(outcome.operationId);\n if (!operation) return;\n const record = records.get(operation.modeKey);\n if (!record || !sameRegistration(record, outcome.mode) || !sameRegistration(record, operation.request.mode)) return;\n complete(operation, outcome);\n };\n\n const invoke = (\n request: MinorModeActionRequest,\n requesterSource: string,\n signal?: AbortSignal,\n ): Promise<MinorModeActionResponse> => {\n if (signal?.aborted) {\n return Promise.reject(protocolError(MINOR_MODE_ERROR_CODE.actionAborted, 'Minor-mode action was aborted.'));\n }\n if (disposed) {\n return Promise.reject(protocolError(MINOR_MODE_ERROR_CODE.sessionReplaced, 'Minor-mode catalog is disposed.'));\n }\n const cached = terminal.get(request.operationId);\n if (cached) {\n if (cached.requesterSource !== requesterSource || !sameRequest(cached.request, request)) {\n return Promise.reject(\n protocolError(MINOR_MODE_ERROR_CODE.invalidArguments, 'Operation id is already used by another request.'),\n );\n }\n return cached.status === 'completed'\n ? Promise.resolve(structuredClone(cached.response))\n : Promise.reject(new DoomProtocolError(cached.error));\n }\n const existingPending = pending.get(request.operationId);\n if (existingPending) {\n if (existingPending.requesterSource !== requesterSource || !sameRequest(existingPending.request, request)) {\n return Promise.reject(\n protocolError(MINOR_MODE_ERROR_CODE.invalidArguments, 'Operation id is already used by another request.'),\n );\n }\n return new Promise((resolve, reject) => {\n const originalResolve = existingPending.resolve;\n const originalReject = existingPending.reject;\n existingPending.resolve = (value) => {\n originalResolve(value);\n resolve(structuredClone(value));\n };\n existingPending.reject = (error) => {\n originalReject(error);\n reject(error);\n };\n });\n }\n const key = minorModeKey(request.mode);\n const record = records.get(key);\n if (!record) return Promise.reject(protocolError(MINOR_MODE_ERROR_CODE.modeNotFound, 'Minor mode is unavailable.'));\n if (!sameRegistration(record, request.mode)) {\n return Promise.reject(protocolError(MINOR_MODE_ERROR_CODE.staleRegistration, 'Minor-mode reference is stale.'));\n }\n const action = record.descriptor.actions.find(({ id }) => id === request.actionId);\n if (!action)\n return Promise.reject(protocolError(MINOR_MODE_ERROR_CODE.actionNotFound, 'Minor-mode action is unknown.'));\n const availability = record.state.actions.find(({ id }) => id === request.actionId);\n if (!availability?.enabled) {\n return Promise.reject(\n protocolError(\n MINOR_MODE_ERROR_CODE.actionDisabled,\n availability?.disabledReason ?? `Action '${request.actionId}' is disabled.`,\n ),\n );\n }\n if (!action.contexts.includes(options.sessionKind)) {\n return Promise.reject(\n protocolError(\n MINOR_MODE_ERROR_CODE.unsupportedContext,\n `Action '${request.actionId}' is unavailable in ${options.sessionKind} sessions.`,\n ),\n );\n }\n try {\n validateMinorModeActionArguments(action, request.arguments);\n } catch (error) {\n return Promise.reject(error);\n }\n if (activeByMode.has(key)) {\n return Promise.reject(\n protocolError(MINOR_MODE_ERROR_CODE.modeBusy, 'Minor mode already has an action in flight.', true),\n );\n }\n\n const actionPromise = new Promise<MinorModeActionResponse>((resolve, reject) => {\n let operation: PendingOperation;\n const timer = setTimeout(() => {\n fail(\n operation,\n protocolError(MINOR_MODE_ERROR_CODE.actionTimeout, 'Minor-mode owner action timed out.', true),\n 'Minor-mode action timed out.',\n );\n }, actionTimeoutMs);\n operation = {\n request: structuredClone(request),\n requesterSource,\n modeKey: key,\n timer,\n resolve,\n reject,\n };\n pending.set(request.operationId, operation);\n activeByMode.set(key, request.operationId);\n runtime.notify(MinorModeOwnerInvocation, {\n hostGeneration,\n operationId: request.operationId,\n mode: structuredClone(request.mode),\n actionId: request.actionId,\n arguments: structuredClone(request.arguments),\n sessionKind: options.sessionKind,\n deadlineAt: Date.now() + actionTimeoutMs,\n });\n });\n if (!signal) return actionPromise;\n const abort = (): void => {\n const operation = pending.get(request.operationId);\n if (!operation || operation.requesterSource !== requesterSource) return;\n fail(\n operation,\n protocolError(MINOR_MODE_ERROR_CODE.actionAborted, 'Minor-mode action was aborted.'),\n 'Minor-mode action caller aborted.',\n );\n };\n signal.addEventListener('abort', abort, { once: true });\n return actionPromise.finally(() => signal.removeEventListener('abort', abort));\n };\n\n disposers.push(\n runtime.provide(MinorModeRegistration, register),\n runtime.provide(MinorModeCatalogQuery, () => snapshot()),\n runtime.provide(MinorModeAction, (request, identity) => invoke(request, identity.source)),\n runtime.onNotification(MinorModeStateChanged, (payload, identity) => stateChanged(payload, identity)),\n runtime.onNotification(MinorModeUnregistration, (payload, identity) => unregister(payload, identity)),\n runtime.onNotification(MinorModeOwnerOutcome, (payload, identity) => ownerOutcome(payload, identity)),\n runtime.onNotification(MinorModeActionCancellation, (cancellation, identity) => {\n const operation = pending.get(cancellation.operationId);\n if (!operation || operation.requesterSource !== identity.source) return;\n fail(\n operation,\n protocolError(MINOR_MODE_ERROR_CODE.actionAborted, 'Minor-mode action was aborted.'),\n 'Minor-mode action caller aborted.',\n );\n }),\n );\n runtime.notify(MinorModeHostAvailable, { hostGeneration });\n\n return {\n generation: hostGeneration,\n getSnapshot: snapshot,\n invoke,\n dispose() {\n if (disposed) return;\n disposed = true;\n for (const operation of pending.values()) {\n fail(\n operation,\n protocolError(MINOR_MODE_ERROR_CODE.sessionReplaced, 'Minor-mode catalog session ended.'),\n 'Minor-mode catalog session ended.',\n );\n }\n for (const dispose of disposers.splice(0)) dispose();\n records.clear();\n activeByMode.clear();\n terminal.clear();\n },\n };\n}\n"],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { MinorModeActionRequest, MinorModeActionResponse, MinorModeCatalogSnapshot, MinorModeSessionKind } from "@agimon-ai/doompi-extension-contracts/mode";
2
+ import { ProtocolRuntime } from "@agimon-ai/doompi-extension-contracts/protocol";
3
+
4
+ //#region src/services/modeCatalog.d.ts
5
+ interface MinorModeCatalogHostOptions {
6
+ sessionKind: MinorModeSessionKind;
7
+ actionTimeoutMs?: number;
8
+ }
9
+ interface MinorModeCatalogHost {
10
+ readonly generation: string;
11
+ getSnapshot(): MinorModeCatalogSnapshot;
12
+ invoke(request: MinorModeActionRequest, requesterSource: string, signal?: AbortSignal): Promise<MinorModeActionResponse>;
13
+ dispose(): void;
14
+ }
15
+ declare function createMinorModeCatalogHost(runtime: ProtocolRuntime, options: MinorModeCatalogHostOptions): MinorModeCatalogHost;
16
+ //#endregion
17
+ export { MinorModeCatalogHost, MinorModeCatalogHostOptions, createMinorModeCatalogHost };
18
+ //# sourceMappingURL=modeCatalog.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modeCatalog.d.cts","names":[],"sources":["../../src/services/modeCatalog.ts"],"mappings":";;;;UAgEiB,2BAAA;EACf,WAAA,EAAa,oBAAA;EACb,eAAA;AAAA;AAAA,UAGe,oBAAA;EAAA,SACN,UAAA;EACT,WAAA,IAAe,wBAAA;EACf,MAAA,CACE,OAAA,EAAS,sBAAA,EACT,eAAA,UACA,MAAA,GAAS,WAAA,GACR,OAAA,CAAQ,uBAAA;EACX,OAAA;AAAA;AAAA,iBA6Bc,0BAAA,CACd,OAAA,EAAS,eAAA,EACT,OAAA,EAAS,2BAAA,GACR,oBAAA"}
@@ -0,0 +1,18 @@
1
+ import { MinorModeActionRequest, MinorModeActionResponse, MinorModeCatalogSnapshot, MinorModeSessionKind } from "@agimon-ai/doompi-extension-contracts/mode";
2
+ import { ProtocolRuntime } from "@agimon-ai/doompi-extension-contracts/protocol";
3
+
4
+ //#region src/services/modeCatalog.d.ts
5
+ interface MinorModeCatalogHostOptions {
6
+ sessionKind: MinorModeSessionKind;
7
+ actionTimeoutMs?: number;
8
+ }
9
+ interface MinorModeCatalogHost {
10
+ readonly generation: string;
11
+ getSnapshot(): MinorModeCatalogSnapshot;
12
+ invoke(request: MinorModeActionRequest, requesterSource: string, signal?: AbortSignal): Promise<MinorModeActionResponse>;
13
+ dispose(): void;
14
+ }
15
+ declare function createMinorModeCatalogHost(runtime: ProtocolRuntime, options: MinorModeCatalogHostOptions): MinorModeCatalogHost;
16
+ //#endregion
17
+ export { MinorModeCatalogHost, MinorModeCatalogHostOptions, createMinorModeCatalogHost };
18
+ //# sourceMappingURL=modeCatalog.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modeCatalog.d.mts","names":[],"sources":["../../src/services/modeCatalog.ts"],"mappings":";;;;UAgEiB,2BAAA;EACf,WAAA,EAAa,oBAAA;EACb,eAAA;AAAA;AAAA,UAGe,oBAAA;EAAA,SACN,UAAA;EACT,WAAA,IAAe,wBAAA;EACf,MAAA,CACE,OAAA,EAAS,sBAAA,EACT,eAAA,UACA,MAAA,GAAS,WAAA,GACR,OAAA,CAAQ,uBAAA;EACX,OAAA;AAAA;AAAA,iBA6Bc,0BAAA,CACd,OAAA,EAAS,eAAA,EACT,OAAA,EAAS,2BAAA,GACR,oBAAA"}
@@ -0,0 +1,2 @@
1
+ import{MINOR_MODE_ACTION_TIMEOUT_MS as e,MINOR_MODE_CATALOG_SOURCE as t,MINOR_MODE_ERROR_CODE as n,MINOR_MODE_MAX_RECORDS as r,MINOR_MODE_TERMINAL_OPERATION_LIMIT as i,MinorModeAction as a,MinorModeActionCancellation as o,MinorModeCatalogChanged as s,MinorModeCatalogQuery as c,MinorModeHostAvailable as l,MinorModeOwnerCancellation as u,MinorModeOwnerInvocation as d,MinorModeOwnerOutcome as f,MinorModeRegistration as p,MinorModeStateChanged as m,MinorModeUnregistration as h,minorModeKey as g,validateMinorModeActionArguments as _,validateMinorModeDefinition as v}from"@agimon-ai/doompi-extension-contracts/mode";import{DoomProtocolError as y}from"@agimon-ai/doompi-extension-contracts/protocol";function b(e,t,n=!1){return new y({code:e,message:t,retryable:n})}function x(e,t){return e.descriptor.source===t.source&&e.descriptor.id===t.id&&e.ownerGeneration===t.ownerGeneration&&e.registrationId===t.registrationId}function S(e,t){return JSON.stringify(e)===JSON.stringify(t)}function C(e,t){return e.ownerGeneration===t.ownerGeneration&&e.stateRevision===t.stateRevision&&JSON.stringify(e.descriptor)===JSON.stringify(t.descriptor)&&JSON.stringify(e.state)===JSON.stringify(t.state)}function w(w,T){let E=`${t}:${crypto.randomUUID()}`,D=T.actionTimeoutMs??e,O=new Map,k=new Map,A=new Map,j=new Map,M=[],N=0,P=!1,F=()=>({hostGeneration:E,revision:N,modes:[...O.values()].map(e=>structuredClone(e)).sort((e,t)=>e.descriptor.order-t.descriptor.order||e.descriptor.source.localeCompare(t.descriptor.source)||e.descriptor.id.localeCompare(t.descriptor.id))}),I=()=>{N+=1,w.notify(s,F())},L=(e,t)=>{j.set(e,t),j.size>i&&j.delete(j.keys().next().value)},R=(e,t)=>{w.notify(u,{hostGeneration:E,operationId:e.request.operationId,mode:structuredClone(e.request.mode),reason:t})},z=e=>{clearTimeout(e.timer),k.delete(e.request.operationId),A.get(e.modeKey)===e.request.operationId&&A.delete(e.modeKey)},B=(e,t,n)=>{z(e),n&&R(e,n);let r={code:t.code,message:t.message,retryable:t.retryable};L(e.request.operationId,{status:`failed`,request:structuredClone(e.request),requesterSource:e.requesterSource,error:r}),e.reject(t)},V=(e,t,n)=>{for(let r of k.values())r.modeKey===e&&B(r,t,n)},H=(e,t)=>{if(P)throw b(n.sessionReplaced,`Minor-mode catalog is disposed.`);if(t.source!==e.descriptor.source)throw b(n.registrationConflict,`Registration source does not match its envelope.`);let i=v(e.descriptor,e.state);if(i)throw b(n.registrationConflict,i);let a=g(e.descriptor),o=O.get(a);if(o){if(!C(o,e))throw b(n.registrationConflict,`Minor mode '${e.descriptor.source}/${e.descriptor.id}' already has a live owner.`);return{hostGeneration:E,registrationId:o.registrationId,catalogRevision:N}}if(O.size>=r)throw b(n.registrationConflict,`Minor-mode catalog capacity reached.`);let s={descriptor:structuredClone(e.descriptor),state:structuredClone(e.state),ownerGeneration:e.ownerGeneration,registrationId:`minor-mode-registration:${crypto.randomUUID()}`,stateRevision:e.stateRevision};return O.set(a,s),I(),{hostGeneration:E,registrationId:s.registrationId,catalogRevision:N}},U=(e,t)=>{if(t.source!==e.source||e.hostGeneration!==E)return;let n=g(e),r=O.get(n);!r||!x(r,e)||e.stateRevision<=r.stateRevision||v(r.descriptor,e.state)||(O.set(n,{...r,state:structuredClone(e.state),stateRevision:e.stateRevision}),I())},W=(e,t)=>{if(t.source!==e.source||e.hostGeneration!==E)return;let r=g(e),i=O.get(r);!i||!x(i,e)||(O.delete(r),V(r,b(n.staleRegistration,`Minor-mode owner unregistered.`),`Minor-mode owner unregistered.`),I())},G=(e,t)=>{if(z(e),t.status===`failed`){let n=new y(t.error);L(e.request.operationId,{status:`failed`,request:structuredClone(e.request),requesterSource:e.requesterSource,error:t.error}),e.reject(n);return}let r=O.get(e.modeKey);if(!r||!x(r,e.request.mode)){let t=b(n.staleRegistration,`Minor-mode owner changed during action.`);L(e.request.operationId,{status:`failed`,request:structuredClone(e.request),requesterSource:e.requesterSource,error:{code:t.code,message:t.message,retryable:t.retryable}}),e.reject(t);return}let i={operationId:e.request.operationId,catalogRevision:N,mode:structuredClone(r),...t.message?{message:t.message}:{}};L(e.request.operationId,{status:`completed`,request:structuredClone(e.request),requesterSource:e.requesterSource,response:i}),e.resolve(i)},K=(e,t)=>{if(t.source!==e.mode.source||e.hostGeneration!==E)return;let n=k.get(e.operationId);if(!n)return;let r=O.get(n.modeKey);!r||!x(r,e.mode)||!x(r,n.request.mode)||G(n,e)},q=(e,t,r)=>{if(r?.aborted)return Promise.reject(b(n.actionAborted,`Minor-mode action was aborted.`));if(P)return Promise.reject(b(n.sessionReplaced,`Minor-mode catalog is disposed.`));let i=j.get(e.operationId);if(i)return i.requesterSource!==t||!S(i.request,e)?Promise.reject(b(n.invalidArguments,`Operation id is already used by another request.`)):i.status===`completed`?Promise.resolve(structuredClone(i.response)):Promise.reject(new y(i.error));let a=k.get(e.operationId);if(a)return a.requesterSource!==t||!S(a.request,e)?Promise.reject(b(n.invalidArguments,`Operation id is already used by another request.`)):new Promise((e,t)=>{let n=a.resolve,r=a.reject;a.resolve=t=>{n(t),e(structuredClone(t))},a.reject=e=>{r(e),t(e)}});let o=g(e.mode),s=O.get(o);if(!s)return Promise.reject(b(n.modeNotFound,`Minor mode is unavailable.`));if(!x(s,e.mode))return Promise.reject(b(n.staleRegistration,`Minor-mode reference is stale.`));let c=s.descriptor.actions.find(({id:t})=>t===e.actionId);if(!c)return Promise.reject(b(n.actionNotFound,`Minor-mode action is unknown.`));let l=s.state.actions.find(({id:t})=>t===e.actionId);if(!l?.enabled)return Promise.reject(b(n.actionDisabled,l?.disabledReason??`Action '${e.actionId}' is disabled.`));if(!c.contexts.includes(T.sessionKind))return Promise.reject(b(n.unsupportedContext,`Action '${e.actionId}' is unavailable in ${T.sessionKind} sessions.`));try{_(c,e.arguments)}catch(e){return Promise.reject(e)}if(A.has(o))return Promise.reject(b(n.modeBusy,`Minor mode already has an action in flight.`,!0));let u=new Promise((r,i)=>{let a,s=setTimeout(()=>{B(a,b(n.actionTimeout,`Minor-mode owner action timed out.`,!0),`Minor-mode action timed out.`)},D);a={request:structuredClone(e),requesterSource:t,modeKey:o,timer:s,resolve:r,reject:i},k.set(e.operationId,a),A.set(o,e.operationId),w.notify(d,{hostGeneration:E,operationId:e.operationId,mode:structuredClone(e.mode),actionId:e.actionId,arguments:structuredClone(e.arguments),sessionKind:T.sessionKind,deadlineAt:Date.now()+D})});if(!r)return u;let f=()=>{let r=k.get(e.operationId);!r||r.requesterSource!==t||B(r,b(n.actionAborted,`Minor-mode action was aborted.`),`Minor-mode action caller aborted.`)};return r.addEventListener(`abort`,f,{once:!0}),u.finally(()=>r.removeEventListener(`abort`,f))};return M.push(w.provide(p,H),w.provide(c,()=>F()),w.provide(a,(e,t)=>q(e,t.source)),w.onNotification(m,(e,t)=>U(e,t)),w.onNotification(h,(e,t)=>W(e,t)),w.onNotification(f,(e,t)=>K(e,t)),w.onNotification(o,(e,t)=>{let r=k.get(e.operationId);!r||r.requesterSource!==t.source||B(r,b(n.actionAborted,`Minor-mode action was aborted.`),`Minor-mode action caller aborted.`)})),w.notify(l,{hostGeneration:E}),{generation:E,getSnapshot:F,invoke:q,dispose(){if(!P){P=!0;for(let e of k.values())B(e,b(n.sessionReplaced,`Minor-mode catalog session ended.`),`Minor-mode catalog session ended.`);for(let e of M.splice(0))e();O.clear(),A.clear(),j.clear()}}}}export{w as createMinorModeCatalogHost};
2
+ //# sourceMappingURL=modeCatalog.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modeCatalog.mjs","names":[],"sources":["../../src/services/modeCatalog.ts"],"sourcesContent":["import {\n MINOR_MODE_ACTION_TIMEOUT_MS,\n MINOR_MODE_CATALOG_SOURCE,\n MINOR_MODE_ERROR_CODE,\n MINOR_MODE_MAX_RECORDS,\n MINOR_MODE_TERMINAL_OPERATION_LIMIT,\n MinorModeAction,\n MinorModeActionCancellation,\n type MinorModeActionRequest,\n type MinorModeActionResponse,\n MinorModeCatalogChanged,\n MinorModeCatalogQuery,\n type MinorModeCatalogSnapshot,\n MinorModeHostAvailable,\n MinorModeOwnerCancellation,\n MinorModeOwnerInvocation,\n MinorModeOwnerOutcome,\n type MinorModeOwnerOutcomePayload,\n type MinorModeRecord,\n MinorModeRegistration,\n type MinorModeRegistrationRef,\n type MinorModeRegistrationRequest,\n type MinorModeRegistrationResponse,\n type MinorModeSessionKind,\n MinorModeStateChanged,\n type MinorModeStateChangedPayload,\n MinorModeUnregistration,\n type MinorModeUnregistrationPayload,\n minorModeKey,\n validateMinorModeActionArguments,\n validateMinorModeDefinition,\n} from '@agimon-ai/doompi-extension-contracts/mode';\nimport {\n DoomProtocolError,\n type ProtocolErrorPayload,\n type ProtocolIdentity,\n type ProtocolRuntime,\n} from '@agimon-ai/doompi-extension-contracts/protocol';\n\ninterface PendingOperation {\n request: MinorModeActionRequest;\n requesterSource: string;\n modeKey: string;\n timer: ReturnType<typeof setTimeout>;\n resolve(this: void, value: MinorModeActionResponse): void;\n reject(this: void, error: DoomProtocolError): void;\n}\n\ninterface TerminalSuccess {\n status: 'completed';\n request: MinorModeActionRequest;\n requesterSource: string;\n response: MinorModeActionResponse;\n}\n\ninterface TerminalFailure {\n status: 'failed';\n request: MinorModeActionRequest;\n requesterSource: string;\n error: ProtocolErrorPayload;\n}\n\ntype TerminalOperation = TerminalSuccess | TerminalFailure;\n\nexport interface MinorModeCatalogHostOptions {\n sessionKind: MinorModeSessionKind;\n actionTimeoutMs?: number;\n}\n\nexport interface MinorModeCatalogHost {\n readonly generation: string;\n getSnapshot(): MinorModeCatalogSnapshot;\n invoke(\n request: MinorModeActionRequest,\n requesterSource: string,\n signal?: AbortSignal,\n ): Promise<MinorModeActionResponse>;\n dispose(): void;\n}\n\nfunction protocolError(code: string, message: string, retryable = false): DoomProtocolError {\n return new DoomProtocolError({ code, message, retryable });\n}\n\nfunction sameRegistration(record: MinorModeRecord, ref: MinorModeRegistrationRef): boolean {\n return (\n record.descriptor.source === ref.source &&\n record.descriptor.id === ref.id &&\n record.ownerGeneration === ref.ownerGeneration &&\n record.registrationId === ref.registrationId\n );\n}\n\nfunction sameRequest(left: MinorModeActionRequest, right: MinorModeActionRequest): boolean {\n return JSON.stringify(left) === JSON.stringify(right);\n}\n\nfunction sameRegistrationPayload(record: MinorModeRecord, request: MinorModeRegistrationRequest): boolean {\n return (\n record.ownerGeneration === request.ownerGeneration &&\n record.stateRevision === request.stateRevision &&\n JSON.stringify(record.descriptor) === JSON.stringify(request.descriptor) &&\n JSON.stringify(record.state) === JSON.stringify(request.state)\n );\n}\n\nexport function createMinorModeCatalogHost(\n runtime: ProtocolRuntime,\n options: MinorModeCatalogHostOptions,\n): MinorModeCatalogHost {\n const hostGeneration = `${MINOR_MODE_CATALOG_SOURCE}:${crypto.randomUUID()}`;\n const actionTimeoutMs = options.actionTimeoutMs ?? MINOR_MODE_ACTION_TIMEOUT_MS;\n const records = new Map<string, MinorModeRecord>();\n const pending = new Map<string, PendingOperation>();\n const activeByMode = new Map<string, string>();\n const terminal = new Map<string, TerminalOperation>();\n const disposers: Array<() => void> = [];\n let revision = 0;\n let disposed = false;\n\n const snapshot = (): MinorModeCatalogSnapshot => ({\n hostGeneration,\n revision,\n modes: [...records.values()]\n .map((record) => structuredClone(record))\n .sort(\n (left, right) =>\n left.descriptor.order - right.descriptor.order ||\n left.descriptor.source.localeCompare(right.descriptor.source) ||\n left.descriptor.id.localeCompare(right.descriptor.id),\n ),\n });\n\n const publish = (): void => {\n revision += 1;\n runtime.notify(MinorModeCatalogChanged, snapshot());\n };\n\n const remember = (operationId: string, outcome: TerminalOperation): void => {\n terminal.set(operationId, outcome);\n if (terminal.size > MINOR_MODE_TERMINAL_OPERATION_LIMIT) {\n terminal.delete(terminal.keys().next().value as string);\n }\n };\n\n const cancelOwner = (operation: PendingOperation, reason: string): void => {\n runtime.notify(MinorModeOwnerCancellation, {\n hostGeneration,\n operationId: operation.request.operationId,\n mode: structuredClone(operation.request.mode),\n reason,\n });\n };\n\n const removePending = (operation: PendingOperation): void => {\n clearTimeout(operation.timer);\n pending.delete(operation.request.operationId);\n if (activeByMode.get(operation.modeKey) === operation.request.operationId) {\n activeByMode.delete(operation.modeKey);\n }\n };\n\n const fail = (operation: PendingOperation, error: DoomProtocolError, cancelReason?: string): void => {\n removePending(operation);\n if (cancelReason) cancelOwner(operation, cancelReason);\n const payload = { code: error.code, message: error.message, retryable: error.retryable };\n remember(operation.request.operationId, {\n status: 'failed',\n request: structuredClone(operation.request),\n requesterSource: operation.requesterSource,\n error: payload,\n });\n operation.reject(error);\n };\n\n const cancelModeOperations = (key: string, error: DoomProtocolError, reason: string): void => {\n for (const operation of pending.values()) {\n if (operation.modeKey === key) fail(operation, error, reason);\n }\n };\n\n const register = (\n request: MinorModeRegistrationRequest,\n identity: ProtocolIdentity,\n ): MinorModeRegistrationResponse => {\n if (disposed) throw protocolError(MINOR_MODE_ERROR_CODE.sessionReplaced, 'Minor-mode catalog is disposed.');\n if (identity.source !== request.descriptor.source) {\n throw protocolError(\n MINOR_MODE_ERROR_CODE.registrationConflict,\n 'Registration source does not match its envelope.',\n );\n }\n const definitionError = validateMinorModeDefinition(request.descriptor, request.state);\n if (definitionError) throw protocolError(MINOR_MODE_ERROR_CODE.registrationConflict, definitionError);\n const key = minorModeKey(request.descriptor);\n const existing = records.get(key);\n if (existing) {\n if (!sameRegistrationPayload(existing, request)) {\n throw protocolError(\n MINOR_MODE_ERROR_CODE.registrationConflict,\n `Minor mode '${request.descriptor.source}/${request.descriptor.id}' already has a live owner.`,\n );\n }\n return { hostGeneration, registrationId: existing.registrationId, catalogRevision: revision };\n }\n if (records.size >= MINOR_MODE_MAX_RECORDS) {\n throw protocolError(MINOR_MODE_ERROR_CODE.registrationConflict, 'Minor-mode catalog capacity reached.');\n }\n const record: MinorModeRecord = {\n descriptor: structuredClone(request.descriptor),\n state: structuredClone(request.state),\n ownerGeneration: request.ownerGeneration,\n registrationId: `minor-mode-registration:${crypto.randomUUID()}`,\n stateRevision: request.stateRevision,\n };\n records.set(key, record);\n publish();\n return { hostGeneration, registrationId: record.registrationId, catalogRevision: revision };\n };\n\n const stateChanged = (update: MinorModeStateChangedPayload, identity: ProtocolIdentity): void => {\n if (identity.source !== update.source || update.hostGeneration !== hostGeneration) return;\n const key = minorModeKey(update);\n const record = records.get(key);\n if (!record || !sameRegistration(record, update) || update.stateRevision <= record.stateRevision) return;\n const definitionError = validateMinorModeDefinition(record.descriptor, update.state);\n if (definitionError) return;\n records.set(key, { ...record, state: structuredClone(update.state), stateRevision: update.stateRevision });\n publish();\n };\n\n const unregister = (registration: MinorModeUnregistrationPayload, identity: ProtocolIdentity): void => {\n if (identity.source !== registration.source || registration.hostGeneration !== hostGeneration) return;\n const key = minorModeKey(registration);\n const record = records.get(key);\n if (!record || !sameRegistration(record, registration)) return;\n records.delete(key);\n cancelModeOperations(\n key,\n protocolError(MINOR_MODE_ERROR_CODE.staleRegistration, 'Minor-mode owner unregistered.'),\n 'Minor-mode owner unregistered.',\n );\n publish();\n };\n\n const complete = (operation: PendingOperation, outcome: MinorModeOwnerOutcomePayload): void => {\n removePending(operation);\n if (outcome.status === 'failed') {\n const error = new DoomProtocolError(outcome.error);\n remember(operation.request.operationId, {\n status: 'failed',\n request: structuredClone(operation.request),\n requesterSource: operation.requesterSource,\n error: outcome.error,\n });\n operation.reject(error);\n return;\n }\n const record = records.get(operation.modeKey);\n if (!record || !sameRegistration(record, operation.request.mode)) {\n const error = protocolError(MINOR_MODE_ERROR_CODE.staleRegistration, 'Minor-mode owner changed during action.');\n remember(operation.request.operationId, {\n status: 'failed',\n request: structuredClone(operation.request),\n requesterSource: operation.requesterSource,\n error: { code: error.code, message: error.message, retryable: error.retryable },\n });\n operation.reject(error);\n return;\n }\n const response: MinorModeActionResponse = {\n operationId: operation.request.operationId,\n catalogRevision: revision,\n mode: structuredClone(record),\n ...(outcome.message ? { message: outcome.message } : {}),\n };\n remember(operation.request.operationId, {\n status: 'completed',\n request: structuredClone(operation.request),\n requesterSource: operation.requesterSource,\n response,\n });\n operation.resolve(response);\n };\n\n const ownerOutcome = (outcome: MinorModeOwnerOutcomePayload, identity: ProtocolIdentity): void => {\n if (identity.source !== outcome.mode.source || outcome.hostGeneration !== hostGeneration) return;\n const operation = pending.get(outcome.operationId);\n if (!operation) return;\n const record = records.get(operation.modeKey);\n if (!record || !sameRegistration(record, outcome.mode) || !sameRegistration(record, operation.request.mode)) return;\n complete(operation, outcome);\n };\n\n const invoke = (\n request: MinorModeActionRequest,\n requesterSource: string,\n signal?: AbortSignal,\n ): Promise<MinorModeActionResponse> => {\n if (signal?.aborted) {\n return Promise.reject(protocolError(MINOR_MODE_ERROR_CODE.actionAborted, 'Minor-mode action was aborted.'));\n }\n if (disposed) {\n return Promise.reject(protocolError(MINOR_MODE_ERROR_CODE.sessionReplaced, 'Minor-mode catalog is disposed.'));\n }\n const cached = terminal.get(request.operationId);\n if (cached) {\n if (cached.requesterSource !== requesterSource || !sameRequest(cached.request, request)) {\n return Promise.reject(\n protocolError(MINOR_MODE_ERROR_CODE.invalidArguments, 'Operation id is already used by another request.'),\n );\n }\n return cached.status === 'completed'\n ? Promise.resolve(structuredClone(cached.response))\n : Promise.reject(new DoomProtocolError(cached.error));\n }\n const existingPending = pending.get(request.operationId);\n if (existingPending) {\n if (existingPending.requesterSource !== requesterSource || !sameRequest(existingPending.request, request)) {\n return Promise.reject(\n protocolError(MINOR_MODE_ERROR_CODE.invalidArguments, 'Operation id is already used by another request.'),\n );\n }\n return new Promise((resolve, reject) => {\n const originalResolve = existingPending.resolve;\n const originalReject = existingPending.reject;\n existingPending.resolve = (value) => {\n originalResolve(value);\n resolve(structuredClone(value));\n };\n existingPending.reject = (error) => {\n originalReject(error);\n reject(error);\n };\n });\n }\n const key = minorModeKey(request.mode);\n const record = records.get(key);\n if (!record) return Promise.reject(protocolError(MINOR_MODE_ERROR_CODE.modeNotFound, 'Minor mode is unavailable.'));\n if (!sameRegistration(record, request.mode)) {\n return Promise.reject(protocolError(MINOR_MODE_ERROR_CODE.staleRegistration, 'Minor-mode reference is stale.'));\n }\n const action = record.descriptor.actions.find(({ id }) => id === request.actionId);\n if (!action)\n return Promise.reject(protocolError(MINOR_MODE_ERROR_CODE.actionNotFound, 'Minor-mode action is unknown.'));\n const availability = record.state.actions.find(({ id }) => id === request.actionId);\n if (!availability?.enabled) {\n return Promise.reject(\n protocolError(\n MINOR_MODE_ERROR_CODE.actionDisabled,\n availability?.disabledReason ?? `Action '${request.actionId}' is disabled.`,\n ),\n );\n }\n if (!action.contexts.includes(options.sessionKind)) {\n return Promise.reject(\n protocolError(\n MINOR_MODE_ERROR_CODE.unsupportedContext,\n `Action '${request.actionId}' is unavailable in ${options.sessionKind} sessions.`,\n ),\n );\n }\n try {\n validateMinorModeActionArguments(action, request.arguments);\n } catch (error) {\n return Promise.reject(error);\n }\n if (activeByMode.has(key)) {\n return Promise.reject(\n protocolError(MINOR_MODE_ERROR_CODE.modeBusy, 'Minor mode already has an action in flight.', true),\n );\n }\n\n const actionPromise = new Promise<MinorModeActionResponse>((resolve, reject) => {\n let operation: PendingOperation;\n const timer = setTimeout(() => {\n fail(\n operation,\n protocolError(MINOR_MODE_ERROR_CODE.actionTimeout, 'Minor-mode owner action timed out.', true),\n 'Minor-mode action timed out.',\n );\n }, actionTimeoutMs);\n operation = {\n request: structuredClone(request),\n requesterSource,\n modeKey: key,\n timer,\n resolve,\n reject,\n };\n pending.set(request.operationId, operation);\n activeByMode.set(key, request.operationId);\n runtime.notify(MinorModeOwnerInvocation, {\n hostGeneration,\n operationId: request.operationId,\n mode: structuredClone(request.mode),\n actionId: request.actionId,\n arguments: structuredClone(request.arguments),\n sessionKind: options.sessionKind,\n deadlineAt: Date.now() + actionTimeoutMs,\n });\n });\n if (!signal) return actionPromise;\n const abort = (): void => {\n const operation = pending.get(request.operationId);\n if (!operation || operation.requesterSource !== requesterSource) return;\n fail(\n operation,\n protocolError(MINOR_MODE_ERROR_CODE.actionAborted, 'Minor-mode action was aborted.'),\n 'Minor-mode action caller aborted.',\n );\n };\n signal.addEventListener('abort', abort, { once: true });\n return actionPromise.finally(() => signal.removeEventListener('abort', abort));\n };\n\n disposers.push(\n runtime.provide(MinorModeRegistration, register),\n runtime.provide(MinorModeCatalogQuery, () => snapshot()),\n runtime.provide(MinorModeAction, (request, identity) => invoke(request, identity.source)),\n runtime.onNotification(MinorModeStateChanged, (payload, identity) => stateChanged(payload, identity)),\n runtime.onNotification(MinorModeUnregistration, (payload, identity) => unregister(payload, identity)),\n runtime.onNotification(MinorModeOwnerOutcome, (payload, identity) => ownerOutcome(payload, identity)),\n runtime.onNotification(MinorModeActionCancellation, (cancellation, identity) => {\n const operation = pending.get(cancellation.operationId);\n if (!operation || operation.requesterSource !== identity.source) return;\n fail(\n operation,\n protocolError(MINOR_MODE_ERROR_CODE.actionAborted, 'Minor-mode action was aborted.'),\n 'Minor-mode action caller aborted.',\n );\n }),\n );\n runtime.notify(MinorModeHostAvailable, { hostGeneration });\n\n return {\n generation: hostGeneration,\n getSnapshot: snapshot,\n invoke,\n dispose() {\n if (disposed) return;\n disposed = true;\n for (const operation of pending.values()) {\n fail(\n operation,\n protocolError(MINOR_MODE_ERROR_CODE.sessionReplaced, 'Minor-mode catalog session ended.'),\n 'Minor-mode catalog session ended.',\n );\n }\n for (const dispose of disposers.splice(0)) dispose();\n records.clear();\n activeByMode.clear();\n terminal.clear();\n },\n };\n}\n"],"mappings":"2rBAgFA,SAAS,EAAc,EAAc,EAAiB,EAAY,GAA0B,CAC1F,OAAO,IAAI,EAAkB,CAAE,OAAM,UAAS,YAAW,CAAC,CAG5D,SAAS,EAAiB,EAAyB,EAAwC,CACzF,OACE,EAAO,WAAW,SAAW,EAAI,QACjC,EAAO,WAAW,KAAO,EAAI,IAC7B,EAAO,kBAAoB,EAAI,iBAC/B,EAAO,iBAAmB,EAAI,eAIlC,SAAS,EAAY,EAA8B,EAAwC,CACzF,OAAO,KAAK,UAAU,EAAK,GAAK,KAAK,UAAU,EAAM,CAGvD,SAAS,EAAwB,EAAyB,EAAgD,CACxG,OACE,EAAO,kBAAoB,EAAQ,iBACnC,EAAO,gBAAkB,EAAQ,eACjC,KAAK,UAAU,EAAO,WAAW,GAAK,KAAK,UAAU,EAAQ,WAAW,EACxE,KAAK,UAAU,EAAO,MAAM,GAAK,KAAK,UAAU,EAAQ,MAAM,CAIlE,SAAgB,EACd,EACA,EACsB,CACtB,IAAM,EAAiB,GAAG,EAA0B,GAAG,OAAO,YAAY,GACpE,EAAkB,EAAQ,iBAAmB,EAC7C,EAAU,IAAI,IACd,EAAU,IAAI,IACd,EAAe,IAAI,IACnB,EAAW,IAAI,IACf,EAA+B,EAAE,CACnC,EAAW,EACX,EAAW,GAET,OAA4C,CAChD,iBACA,WACA,MAAO,CAAC,GAAG,EAAQ,QAAQ,CAAC,CACzB,IAAK,GAAW,gBAAgB,EAAO,CAAC,CACxC,MACE,EAAM,IACL,EAAK,WAAW,MAAQ,EAAM,WAAW,OACzC,EAAK,WAAW,OAAO,cAAc,EAAM,WAAW,OAAO,EAC7D,EAAK,WAAW,GAAG,cAAc,EAAM,WAAW,GAAG,CACxD,CACJ,EAEK,MAAsB,CAC1B,GAAY,EACZ,EAAQ,OAAO,EAAyB,GAAU,CAAC,EAG/C,GAAY,EAAqB,IAAqC,CAC1E,EAAS,IAAI,EAAa,EAAQ,CAC9B,EAAS,KAAO,GAClB,EAAS,OAAO,EAAS,MAAM,CAAC,MAAM,CAAC,MAAgB,EAIrD,GAAe,EAA6B,IAAyB,CACzE,EAAQ,OAAO,EAA4B,CACzC,iBACA,YAAa,EAAU,QAAQ,YAC/B,KAAM,gBAAgB,EAAU,QAAQ,KAAK,CAC7C,SACD,CAAC,EAGE,EAAiB,GAAsC,CAC3D,aAAa,EAAU,MAAM,CAC7B,EAAQ,OAAO,EAAU,QAAQ,YAAY,CACzC,EAAa,IAAI,EAAU,QAAQ,GAAK,EAAU,QAAQ,aAC5D,EAAa,OAAO,EAAU,QAAQ,EAIpC,GAAQ,EAA6B,EAA0B,IAAgC,CACnG,EAAc,EAAU,CACpB,GAAc,EAAY,EAAW,EAAa,CACtD,IAAM,EAAU,CAAE,KAAM,EAAM,KAAM,QAAS,EAAM,QAAS,UAAW,EAAM,UAAW,CACxF,EAAS,EAAU,QAAQ,YAAa,CACtC,OAAQ,SACR,QAAS,gBAAgB,EAAU,QAAQ,CAC3C,gBAAiB,EAAU,gBAC3B,MAAO,EACR,CAAC,CACF,EAAU,OAAO,EAAM,EAGnB,GAAwB,EAAa,EAA0B,IAAyB,CAC5F,IAAK,IAAM,KAAa,EAAQ,QAAQ,CAClC,EAAU,UAAY,GAAK,EAAK,EAAW,EAAO,EAAO,EAI3D,GACJ,EACA,IACkC,CAClC,GAAI,EAAU,MAAM,EAAc,EAAsB,gBAAiB,kCAAkC,CAC3G,GAAI,EAAS,SAAW,EAAQ,WAAW,OACzC,MAAM,EACJ,EAAsB,qBACtB,mDACD,CAEH,IAAM,EAAkB,EAA4B,EAAQ,WAAY,EAAQ,MAAM,CACtF,GAAI,EAAiB,MAAM,EAAc,EAAsB,qBAAsB,EAAgB,CACrG,IAAM,EAAM,EAAa,EAAQ,WAAW,CACtC,EAAW,EAAQ,IAAI,EAAI,CACjC,GAAI,EAAU,CACZ,GAAI,CAAC,EAAwB,EAAU,EAAQ,CAC7C,MAAM,EACJ,EAAsB,qBACtB,eAAe,EAAQ,WAAW,OAAO,GAAG,EAAQ,WAAW,GAAG,6BACnE,CAEH,MAAO,CAAE,iBAAgB,eAAgB,EAAS,eAAgB,gBAAiB,EAAU,CAE/F,GAAI,EAAQ,MAAQ,EAClB,MAAM,EAAc,EAAsB,qBAAsB,uCAAuC,CAEzG,IAAM,EAA0B,CAC9B,WAAY,gBAAgB,EAAQ,WAAW,CAC/C,MAAO,gBAAgB,EAAQ,MAAM,CACrC,gBAAiB,EAAQ,gBACzB,eAAgB,2BAA2B,OAAO,YAAY,GAC9D,cAAe,EAAQ,cACxB,CAGD,OAFA,EAAQ,IAAI,EAAK,EAAO,CACxB,GAAS,CACF,CAAE,iBAAgB,eAAgB,EAAO,eAAgB,gBAAiB,EAAU,EAGvF,GAAgB,EAAsC,IAAqC,CAC/F,GAAI,EAAS,SAAW,EAAO,QAAU,EAAO,iBAAmB,EAAgB,OACnF,IAAM,EAAM,EAAa,EAAO,CAC1B,EAAS,EAAQ,IAAI,EAAI,CAC3B,CAAC,GAAU,CAAC,EAAiB,EAAQ,EAAO,EAAI,EAAO,eAAiB,EAAO,eAC3D,EAA4B,EAAO,WAAY,EAAO,MAC3D,GACnB,EAAQ,IAAI,EAAK,CAAE,GAAG,EAAQ,MAAO,gBAAgB,EAAO,MAAM,CAAE,cAAe,EAAO,cAAe,CAAC,CAC1G,GAAS,GAGL,GAAc,EAA8C,IAAqC,CACrG,GAAI,EAAS,SAAW,EAAa,QAAU,EAAa,iBAAmB,EAAgB,OAC/F,IAAM,EAAM,EAAa,EAAa,CAChC,EAAS,EAAQ,IAAI,EAAI,CAC3B,CAAC,GAAU,CAAC,EAAiB,EAAQ,EAAa,GACtD,EAAQ,OAAO,EAAI,CACnB,EACE,EACA,EAAc,EAAsB,kBAAmB,iCAAiC,CACxF,iCACD,CACD,GAAS,GAGL,GAAY,EAA6B,IAAgD,CAE7F,GADA,EAAc,EAAU,CACpB,EAAQ,SAAW,SAAU,CAC/B,IAAM,EAAQ,IAAI,EAAkB,EAAQ,MAAM,CAClD,EAAS,EAAU,QAAQ,YAAa,CACtC,OAAQ,SACR,QAAS,gBAAgB,EAAU,QAAQ,CAC3C,gBAAiB,EAAU,gBAC3B,MAAO,EAAQ,MAChB,CAAC,CACF,EAAU,OAAO,EAAM,CACvB,OAEF,IAAM,EAAS,EAAQ,IAAI,EAAU,QAAQ,CAC7C,GAAI,CAAC,GAAU,CAAC,EAAiB,EAAQ,EAAU,QAAQ,KAAK,CAAE,CAChE,IAAM,EAAQ,EAAc,EAAsB,kBAAmB,0CAA0C,CAC/G,EAAS,EAAU,QAAQ,YAAa,CACtC,OAAQ,SACR,QAAS,gBAAgB,EAAU,QAAQ,CAC3C,gBAAiB,EAAU,gBAC3B,MAAO,CAAE,KAAM,EAAM,KAAM,QAAS,EAAM,QAAS,UAAW,EAAM,UAAW,CAChF,CAAC,CACF,EAAU,OAAO,EAAM,CACvB,OAEF,IAAM,EAAoC,CACxC,YAAa,EAAU,QAAQ,YAC/B,gBAAiB,EACjB,KAAM,gBAAgB,EAAO,CAC7B,GAAI,EAAQ,QAAU,CAAE,QAAS,EAAQ,QAAS,CAAG,EAAE,CACxD,CACD,EAAS,EAAU,QAAQ,YAAa,CACtC,OAAQ,YACR,QAAS,gBAAgB,EAAU,QAAQ,CAC3C,gBAAiB,EAAU,gBAC3B,WACD,CAAC,CACF,EAAU,QAAQ,EAAS,EAGvB,GAAgB,EAAuC,IAAqC,CAChG,GAAI,EAAS,SAAW,EAAQ,KAAK,QAAU,EAAQ,iBAAmB,EAAgB,OAC1F,IAAM,EAAY,EAAQ,IAAI,EAAQ,YAAY,CAClD,GAAI,CAAC,EAAW,OAChB,IAAM,EAAS,EAAQ,IAAI,EAAU,QAAQ,CACzC,CAAC,GAAU,CAAC,EAAiB,EAAQ,EAAQ,KAAK,EAAI,CAAC,EAAiB,EAAQ,EAAU,QAAQ,KAAK,EAC3G,EAAS,EAAW,EAAQ,EAGxB,GACJ,EACA,EACA,IACqC,CACrC,GAAI,GAAQ,QACV,OAAO,QAAQ,OAAO,EAAc,EAAsB,cAAe,iCAAiC,CAAC,CAE7G,GAAI,EACF,OAAO,QAAQ,OAAO,EAAc,EAAsB,gBAAiB,kCAAkC,CAAC,CAEhH,IAAM,EAAS,EAAS,IAAI,EAAQ,YAAY,CAChD,GAAI,EAMF,OALI,EAAO,kBAAoB,GAAmB,CAAC,EAAY,EAAO,QAAS,EAAQ,CAC9E,QAAQ,OACb,EAAc,EAAsB,iBAAkB,mDAAmD,CAC1G,CAEI,EAAO,SAAW,YACrB,QAAQ,QAAQ,gBAAgB,EAAO,SAAS,CAAC,CACjD,QAAQ,OAAO,IAAI,EAAkB,EAAO,MAAM,CAAC,CAEzD,IAAM,EAAkB,EAAQ,IAAI,EAAQ,YAAY,CACxD,GAAI,EAMF,OALI,EAAgB,kBAAoB,GAAmB,CAAC,EAAY,EAAgB,QAAS,EAAQ,CAChG,QAAQ,OACb,EAAc,EAAsB,iBAAkB,mDAAmD,CAC1G,CAEI,IAAI,SAAS,EAAS,IAAW,CACtC,IAAM,EAAkB,EAAgB,QAClC,EAAiB,EAAgB,OACvC,EAAgB,QAAW,GAAU,CACnC,EAAgB,EAAM,CACtB,EAAQ,gBAAgB,EAAM,CAAC,EAEjC,EAAgB,OAAU,GAAU,CAClC,EAAe,EAAM,CACrB,EAAO,EAAM,GAEf,CAEJ,IAAM,EAAM,EAAa,EAAQ,KAAK,CAChC,EAAS,EAAQ,IAAI,EAAI,CAC/B,GAAI,CAAC,EAAQ,OAAO,QAAQ,OAAO,EAAc,EAAsB,aAAc,6BAA6B,CAAC,CACnH,GAAI,CAAC,EAAiB,EAAQ,EAAQ,KAAK,CACzC,OAAO,QAAQ,OAAO,EAAc,EAAsB,kBAAmB,iCAAiC,CAAC,CAEjH,IAAM,EAAS,EAAO,WAAW,QAAQ,MAAM,CAAE,QAAS,IAAO,EAAQ,SAAS,CAClF,GAAI,CAAC,EACH,OAAO,QAAQ,OAAO,EAAc,EAAsB,eAAgB,gCAAgC,CAAC,CAC7G,IAAM,EAAe,EAAO,MAAM,QAAQ,MAAM,CAAE,QAAS,IAAO,EAAQ,SAAS,CACnF,GAAI,CAAC,GAAc,QACjB,OAAO,QAAQ,OACb,EACE,EAAsB,eACtB,GAAc,gBAAkB,WAAW,EAAQ,SAAS,gBAC7D,CACF,CAEH,GAAI,CAAC,EAAO,SAAS,SAAS,EAAQ,YAAY,CAChD,OAAO,QAAQ,OACb,EACE,EAAsB,mBACtB,WAAW,EAAQ,SAAS,sBAAsB,EAAQ,YAAY,YACvE,CACF,CAEH,GAAI,CACF,EAAiC,EAAQ,EAAQ,UAAU,OACpD,EAAO,CACd,OAAO,QAAQ,OAAO,EAAM,CAE9B,GAAI,EAAa,IAAI,EAAI,CACvB,OAAO,QAAQ,OACb,EAAc,EAAsB,SAAU,8CAA+C,GAAK,CACnG,CAGH,IAAM,EAAgB,IAAI,SAAkC,EAAS,IAAW,CAC9E,IAAI,EACE,EAAQ,eAAiB,CAC7B,EACE,EACA,EAAc,EAAsB,cAAe,qCAAsC,GAAK,CAC9F,+BACD,EACA,EAAgB,CACnB,EAAY,CACV,QAAS,gBAAgB,EAAQ,CACjC,kBACA,QAAS,EACT,QACA,UACA,SACD,CACD,EAAQ,IAAI,EAAQ,YAAa,EAAU,CAC3C,EAAa,IAAI,EAAK,EAAQ,YAAY,CAC1C,EAAQ,OAAO,EAA0B,CACvC,iBACA,YAAa,EAAQ,YACrB,KAAM,gBAAgB,EAAQ,KAAK,CACnC,SAAU,EAAQ,SAClB,UAAW,gBAAgB,EAAQ,UAAU,CAC7C,YAAa,EAAQ,YACrB,WAAY,KAAK,KAAK,CAAG,EAC1B,CAAC,EACF,CACF,GAAI,CAAC,EAAQ,OAAO,EACpB,IAAM,MAAoB,CACxB,IAAM,EAAY,EAAQ,IAAI,EAAQ,YAAY,CAC9C,CAAC,GAAa,EAAU,kBAAoB,GAChD,EACE,EACA,EAAc,EAAsB,cAAe,iCAAiC,CACpF,oCACD,EAGH,OADA,EAAO,iBAAiB,QAAS,EAAO,CAAE,KAAM,GAAM,CAAC,CAChD,EAAc,YAAc,EAAO,oBAAoB,QAAS,EAAM,CAAC,EAsBhF,OAnBA,EAAU,KACR,EAAQ,QAAQ,EAAuB,EAAS,CAChD,EAAQ,QAAQ,MAA6B,GAAU,CAAC,CACxD,EAAQ,QAAQ,GAAkB,EAAS,IAAa,EAAO,EAAS,EAAS,OAAO,CAAC,CACzF,EAAQ,eAAe,GAAwB,EAAS,IAAa,EAAa,EAAS,EAAS,CAAC,CACrG,EAAQ,eAAe,GAA0B,EAAS,IAAa,EAAW,EAAS,EAAS,CAAC,CACrG,EAAQ,eAAe,GAAwB,EAAS,IAAa,EAAa,EAAS,EAAS,CAAC,CACrG,EAAQ,eAAe,GAA8B,EAAc,IAAa,CAC9E,IAAM,EAAY,EAAQ,IAAI,EAAa,YAAY,CACnD,CAAC,GAAa,EAAU,kBAAoB,EAAS,QACzD,EACE,EACA,EAAc,EAAsB,cAAe,iCAAiC,CACpF,oCACD,EACD,CACH,CACD,EAAQ,OAAO,EAAwB,CAAE,iBAAgB,CAAC,CAEnD,CACL,WAAY,EACZ,YAAa,EACb,SACA,SAAU,CACJ,MACJ,GAAW,GACX,IAAK,IAAM,KAAa,EAAQ,QAAQ,CACtC,EACE,EACA,EAAc,EAAsB,gBAAiB,oCAAoC,CACzF,oCACD,CAEH,IAAK,IAAM,KAAW,EAAU,OAAO,EAAE,CAAE,GAAS,CACpD,EAAQ,OAAO,CACf,EAAa,OAAO,CACpB,EAAS,OAAO,GAEnB"}
@@ -1,2 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../_virtual/_rolldown/runtime.cjs`),t=require(`../utils/json.cjs`);require(`../utils/index.cjs`);const n=require(`./syncState.cjs`);let r=require(`node:path`);r=e.__toESM(r,1);const i=`extensions`,a=`themes`,o=`theme`,s=[/(^|\/)entries\/doom\.(ts|mjs|js)$/,/(^|\/)doom\/cache\/sets\/doom-set\.[a-f0-9]+\.mjs$/,/(^|\/)doom\/dist\/[^/]+\.[a-f0-9]+\.mjs$/];function c(e){return r.default.join(e,`.pi`,`settings.json`)}function l(e){return Array.isArray(e)?e.filter(e=>typeof e==`string`):[]}function u(e,t,r){let c=n.settingsRelativePath(t,r.extensionEntry),u=n.settingsRelativePath(t,r.themePath),d=[c,...l(e[i]).filter(e=>!s.some(t=>t.test(e)))],f=[u,...l(e[a]).filter(e=>e!==u)];return{...e,[i]:d,[a]:f,[o]:typeof e[o]==`string`?e[o]:r.themeName}}function d(e){let n=t.readJson(c(e));return t.isRecord(n)?n:{}}function f(e){return`${JSON.stringify(e,null,2)}\n`}function p(e,n){let r=c(e);return t.writeFileAtomic(r,f(u(d(e),e,n))),r}exports.mergePiSettings=u,exports.piSettingsPath=c,exports.readPiSettings=d,exports.serializePiSettings=f,exports.writePiSettings=p;
2
- //# sourceMappingURL=piSettings.cjs.map
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../adapters/piSettings.cjs`);exports.AMBIENT_EXTENSION_FILTER=e.AMBIENT_EXTENSION_FILTER,exports.DOOM_EXTENSION=e.DOOM_EXTENSION,exports.mergePiSettings=e.mergePiSettings,exports.piAgentDirectory=e.piAgentDirectory,exports.piSettingsPath=e.piSettingsPath,exports.piThemeDirectory=e.piThemeDirectory,exports.readPiSettings=e.readPiSettings,exports.serializePiSettings=e.serializePiSettings,exports.writePiSettings=e.writePiSettings;
@@ -1,24 +1,2 @@
1
- import { JsonObject } from "../utils/json.cjs";
2
-
3
- //#region src/services/piSettings.d.ts
4
- interface PiSettingsUpdate {
5
- /** Absolute path to the doom-pi Pi extension. */
6
- extensionEntry: string;
7
- /** Absolute path to the generated theme file. */
8
- themePath: string;
9
- themeName: string;
10
- }
11
- declare function piSettingsPath(repoRoot: string): string;
12
- /**
13
- * Produces the settings content for an update, without writing it.
14
- *
15
- * Split out so `--check` can compare against what a sync would write.
16
- */
17
- declare function mergePiSettings(current: JsonObject, repoRoot: string, update: PiSettingsUpdate): JsonObject;
18
- declare function readPiSettings(repoRoot: string): JsonObject;
19
- declare function serializePiSettings(settings: JsonObject): string;
20
- /** Merges the doom-owned keys into the committed settings file. */
21
- declare function writePiSettings(repoRoot: string, update: PiSettingsUpdate): string;
22
- //#endregion
23
- export { PiSettingsUpdate, mergePiSettings, piSettingsPath, readPiSettings, serializePiSettings, writePiSettings };
24
- //# sourceMappingURL=piSettings.d.cts.map
1
+ import { AMBIENT_EXTENSION_FILTER, DOOM_EXTENSION, PiSettingsUpdate, mergePiSettings, piAgentDirectory, piSettingsPath, piThemeDirectory, readPiSettings, serializePiSettings, writePiSettings } from "../adapters/piSettings.cjs";
2
+ export { AMBIENT_EXTENSION_FILTER, DOOM_EXTENSION, PiSettingsUpdate, mergePiSettings, piAgentDirectory, piSettingsPath, piThemeDirectory, readPiSettings, serializePiSettings, writePiSettings };
@@ -1,24 +1,2 @@
1
- import { JsonObject } from "../utils/json.mjs";
2
-
3
- //#region src/services/piSettings.d.ts
4
- interface PiSettingsUpdate {
5
- /** Absolute path to the doom-pi Pi extension. */
6
- extensionEntry: string;
7
- /** Absolute path to the generated theme file. */
8
- themePath: string;
9
- themeName: string;
10
- }
11
- declare function piSettingsPath(repoRoot: string): string;
12
- /**
13
- * Produces the settings content for an update, without writing it.
14
- *
15
- * Split out so `--check` can compare against what a sync would write.
16
- */
17
- declare function mergePiSettings(current: JsonObject, repoRoot: string, update: PiSettingsUpdate): JsonObject;
18
- declare function readPiSettings(repoRoot: string): JsonObject;
19
- declare function serializePiSettings(settings: JsonObject): string;
20
- /** Merges the doom-owned keys into the committed settings file. */
21
- declare function writePiSettings(repoRoot: string, update: PiSettingsUpdate): string;
22
- //#endregion
23
- export { PiSettingsUpdate, mergePiSettings, piSettingsPath, readPiSettings, serializePiSettings, writePiSettings };
24
- //# sourceMappingURL=piSettings.d.mts.map
1
+ import { AMBIENT_EXTENSION_FILTER, DOOM_EXTENSION, PiSettingsUpdate, mergePiSettings, piAgentDirectory, piSettingsPath, piThemeDirectory, readPiSettings, serializePiSettings, writePiSettings } from "../adapters/piSettings.mjs";
2
+ export { AMBIENT_EXTENSION_FILTER, DOOM_EXTENSION, PiSettingsUpdate, mergePiSettings, piAgentDirectory, piSettingsPath, piThemeDirectory, readPiSettings, serializePiSettings, writePiSettings };
@@ -1,2 +1 @@
1
- import{isRecord as e,readJson as t,writeFileAtomic as n}from"../utils/json.mjs";import"../utils/index.mjs";import{settingsRelativePath as r}from"./syncState.mjs";import i from"node:path";const a=`extensions`,o=`themes`,s=`theme`,c=[/(^|\/)entries\/doom\.(ts|mjs|js)$/,/(^|\/)doom\/cache\/sets\/doom-set\.[a-f0-9]+\.mjs$/,/(^|\/)doom\/dist\/[^/]+\.[a-f0-9]+\.mjs$/];function l(e){return i.join(e,`.pi`,`settings.json`)}function u(e){return Array.isArray(e)?e.filter(e=>typeof e==`string`):[]}function d(e,t,n){let i=r(t,n.extensionEntry),l=r(t,n.themePath),d=[i,...u(e[a]).filter(e=>!c.some(t=>t.test(e)))],f=[l,...u(e[o]).filter(e=>e!==l)];return{...e,[a]:d,[o]:f,[s]:typeof e[s]==`string`?e[s]:n.themeName}}function f(n){let r=t(l(n));return e(r)?r:{}}function p(e){return`${JSON.stringify(e,null,2)}\n`}function m(e,t){let r=l(e);return n(r,p(d(f(e),e,t))),r}export{d as mergePiSettings,l as piSettingsPath,f as readPiSettings,p as serializePiSettings,m as writePiSettings};
2
- //# sourceMappingURL=piSettings.mjs.map
1
+ import{AMBIENT_EXTENSION_FILTER as e,DOOM_EXTENSION as t,mergePiSettings as n,piAgentDirectory as r,piSettingsPath as i,piThemeDirectory as a,readPiSettings as o,serializePiSettings as s,writePiSettings as c}from"../adapters/piSettings.mjs";export{e as AMBIENT_EXTENSION_FILTER,t as DOOM_EXTENSION,n as mergePiSettings,r as piAgentDirectory,i as piSettingsPath,a as piThemeDirectory,o as readPiSettings,s as serializePiSettings,c as writePiSettings};
@@ -1,3 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../_virtual/_rolldown/runtime.cjs`),t=require(`../utils/toolNames.cjs`);require(`../utils/index.cjs`);const n=require(`./mcpFilter.cjs`);let r=require(`node:path`);r=e.__toESM(r,1);let i=require(`node:fs`);i=e.__toESM(i,1);let a=require(`node:crypto`),o=require(`yaml`),s=require(`node:os`);s=e.__toESM(s,1);const c=`agiflow-dispatcher`,l=[`read`,`grep`,`find`,`ls`,`bash`,`launch_workflow`,`list_workflows`],u=r.default.join(`.pi`,`doom`,`cache`,`skills`);function d(e,t,n=process.env){return n.PI_SUBAGENT_CHILD_AGENT===`agiflow-dispatcher`&&n.PI_SUBAGENT_PARENT_SESSION&&t?t:e}function f(e){let t=e.match(/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/);if(!t)throw Error(`Resource is missing YAML frontmatter`);return{attributes:(0,o.parse)(t[1]),body:t[2]??``}}const p={sonnet:`anthropic/claude-sonnet-4-6`,opus:`anthropic/claude-opus-4-6`,haiku:`anthropic/claude-haiku-4-5`};function m(e){let t=e.trim();if(!t||t!==e||t===`.`||t===`..`||t.includes(`\0`)||/[\\/]/.test(t))throw Error(`Unsafe agent name: ${JSON.stringify(e)}`);return t}function h(e){return typeof e==`string`?p[e.toLowerCase()]??e:Array.isArray(e)?e.map(e=>h(e)):e}function g(e){let{attributes:n,body:r}=f(e),i=typeof n.name==`string`?n.name:void 0;if(!i)throw Error(`Agent definition requires a name`);let a=m(i),s=Object.prototype.hasOwnProperty.call(n,`tools`),c=Array.isArray(n.tools)?n.tools.map(String):typeof n.tools==`string`?n.tools.split(`,`).map(e=>e.trim()).filter(Boolean):[],l=[...new Set(c.map(t.toPiToolName).filter(e=>!!e))],u={...n,inheritProjectContext:!0,inheritSkills:!0,systemPromptMode:n.systemPromptMode??`replace`};if(s?u.tools=Array.isArray(n.tools)?l:l.join(`, `):delete u.tools,u.model!==void 0&&(u.model=h(u.model)),u.fallbackModels!==void 0&&(u.fallbackModels=h(u.fallbackModels)),u.memory===`project`||u.memory===`user`)u.memory={scope:u.memory,path:a};else if(u.memory!==void 0&&(typeof u.memory!=`object`||u.memory===null||Array.isArray(u.memory)))throw Error(`Unsupported memory declaration`);return delete u.permissionMode,{name:a,content:`---\n${(0,o.stringify)(u).trim()}\n---\n\n${r.trimStart()}`}}function _(e,t){let n=(0,a.createHash)(`sha256`).update(r.default.resolve(t)).digest(`hex`).slice(0,16);return r.default.join(e,u,`${n}.json`)}function v(e){try{let t=i.default.statSync(e.path);return t.isFile()&&t.size===e.size&&t.mtimeMs===e.mtimeMs&&t.ctimeMs===e.ctimeMs}catch{return!1}}function y(e){try{let t=i.default.statSync(e.path);return t.isDirectory()&&t.mtimeMs===e.mtimeMs&&t.ctimeMs===e.ctimeMs}catch{return!1}}function b(e,t){try{let n=JSON.parse(i.default.readFileSync(e,`utf8`));return n.version!==1||n.root!==r.default.resolve(t)||!Array.isArray(n.files)||!Array.isArray(n.directories)||!n.files.every(v)||!n.directories.every(y)?void 0:n}catch{return}}function x(e,t){i.default.mkdirSync(r.default.dirname(e),{recursive:!0,mode:448});let n=`${e}.${process.pid}.${Date.now()}.tmp`;i.default.writeFileSync(n,`${JSON.stringify(t,null,2)}\n`,{mode:384});try{i.default.renameSync(n,e)}catch(t){if(i.default.rmSync(n,{force:!0}),!i.default.existsSync(e))throw t}}function S(e){let t=[],n=[],o=e=>{if(!i.default.existsSync(e))return;let s=i.default.statSync(e);t.push({path:e,mtimeMs:s.mtimeMs,ctimeMs:s.ctimeMs});for(let t of i.default.readdirSync(e,{withFileTypes:!0})){let s=r.default.join(e,t.name);if(t.isDirectory()){o(s);continue}if(!t.isFile()||t.name!==`SKILL.md`)continue;let c=i.default.readFileSync(s,`utf8`),{attributes:l}=f(c);if(typeof l.name!=`string`)throw Error(`Resource requires a name: ${s}`);let u=i.default.statSync(s);n.push({path:s,name:l.name,digest:(0,a.createHash)(`sha256`).update(c).digest(`hex`),size:u.size,mtimeMs:u.mtimeMs,ctimeMs:u.ctimeMs})}};return o(r.default.resolve(e)),n.sort((e,t)=>e.path.localeCompare(t.path)),t.sort((e,t)=>e.path.localeCompare(t.path)),{version:1,root:r.default.resolve(e),files:n,directories:t}}function C(e,t){if(!i.default.existsSync(t))return[];let n=_(e,t),r=b(n,t),a=r??S(t);return r||x(n,a),a.files.map(({name:e,path:t,digest:n})=>({name:e,path:t,digest:n}))}function w(e){if(!i.default.existsSync(e))return[];let t=[];for(let n of i.default.readdirSync(e,{withFileTypes:!0})){let i=r.default.join(e,n.name);n.isDirectory()&&t.push(...w(i)),n.isFile()&&n.name.endsWith(`.md`)&&t.push(i)}return t}function T(e){let{attributes:t}=f(i.default.readFileSync(e,`utf8`));if(typeof t.name!=`string`)throw Error(`Resource requires a name: ${e}`);return t.name}function E(e,t){let n=new Map,r=new Map;for(let o of e){let e=n.get(o.name),s=o.digest??(0,a.createHash)(`sha256`).update(i.default.readFileSync(o.path)).digest(`hex`);if(e&&r.get(o.name)!==s)throw Error(`Conflicting ${t} "${o.name}": ${e} and ${o.path}`);n.set(o.name,o.path),r.set(o.name,s)}}function D(e){let t={name:c,description:`Selects and launches Agiflow workflows for one loop pass without implementing the work.`,thinking:`high`,systemPromptMode:`replace`,inheritProjectContext:!0,inheritSkills:!0,tools:l.join(`, `),extensions:[e],defaultContext:`fresh`,defaultProgress:!1},n=[`You are the Agiflow workflow dispatcher.`,`Reason about the supplied dispatch context and launch eligible workflows.`,`Launch workflows without monitoring them. After dispatching, report and exit.`,`Follow the task restrictions exactly. Do not implement jobs or edit repository files.`].join(`
2
- `);return`---\n${(0,o.stringify)(t).trim()}\n---\n\n${n}\n`}function O(e){let t={mcpServers:{}},n=t.mcpServers,r=new Map;for(let t of e){if(!i.default.existsSync(t))continue;let e=JSON.parse(i.default.readFileSync(t,`utf8`)).mcpServers??{};for(let[i,a]of Object.entries(e)){let e=n[i];if(e&&JSON.stringify(e)!==JSON.stringify(a))throw Error(`Conflicting MCP server "${i}": ${r.get(i)} and ${t}`);n[i]=a,r.set(i,t)}}return t}function k(e,t){return e?e.some(e=>e.includes(`*`)?RegExp(`^${e.split(`*`).map(A).join(`.*`)}$`).test(t):e===t):!0}function A(e){return e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}async function j(e,t,a){let o=t.map(e=>typeof e==`string`?{directory:e}:e),l=a.temporaryDirectory===void 0,u=a.temporaryDirectory??await i.default.promises.mkdtemp(r.default.join(s.default.tmpdir(),`doom-pi-`));await i.default.promises.mkdir(u,{mode:448,recursive:!0}),await i.default.promises.chmod(u,448);let d=r.default.join(e,`.claude`,`skills`),f=[],p=a.sharedSkills===!1?[]:C(e,d);f.push(...p.map(e=>e.path));let h=[],_=[],v=[],y=[r.default.join(e,`.mcp.json`)];for(let t of o){let n=t.directory,a=r.default.join(n,`skills`);if(i.default.existsSync(a)){let n=C(e,a).filter(e=>k(t.skills,e.name));f.push(...n.map(e=>e.path)),p.push(...n)}let o=r.default.join(n,`agents`);h.push(...w(o).map(e=>({name:T(e),path:e})).filter(e=>k(t.agents,e.name)));let s=r.default.join(n,`hooks`,`hooks.json`);t.hooks!==!1&&i.default.existsSync(s)&&_.push({pluginRoot:n,configPath:s});let c=r.default.join(n,`.mcp.json`);t.mcp!==!1&&i.default.existsSync(c)&&(y.push(c),v.push(c))}if(E(p,`skill`),E(h,`agent`),h.some(e=>e.name===`agiflow-dispatcher`))throw Error(`Conflicting agent "${c}": reserved by the agent harness`);let b=[],x,S=r.default.join(u,`agents`);if(await i.default.promises.rm(S,{recursive:!0,force:!0}),a.agents&&(h.length>0||a.dispatcherWorkflowExtension)){await i.default.promises.mkdir(S,{mode:448});for(let e of h){let t=g(i.default.readFileSync(e.path,`utf8`));await i.default.promises.writeFile(r.default.join(S,`${m(t.name)}.md`),t.content,{mode:384})}a.dispatcherWorkflowExtension&&(x=a.dispatcherWorkflowExtension,await i.default.promises.writeFile(r.default.join(S,`${c}.md`),D(a.dispatcherWorkflowExtension),{mode:384})),b.push(S)}let A;if(a.mcp){A=r.default.join(u,`mcp.json`);let t=await n.applyMcpAllowlist(O(y),a.mcpAllowlist,e,u);await i.default.promises.writeFile(A,`${JSON.stringify(t,null,2)}\n`,{mode:384})}return{temporaryDirectory:u,skillDirectories:f,skillCount:p.length,agentCount:h.length,agentDirectories:b,pluginHooks:_,dispatcherWorkflowExtensionPath:x,mcpConfigPath:A,pluginMcpConfigPaths:v,cleanup:()=>l?i.default.promises.rm(u,{recursive:!0,force:!0}):Promise.resolve()}}exports.DISPATCHER_AGENT_NAME=c,exports.adaptAgentDefinition=g,exports.collectResources=j,exports.discoverSkills=C,exports.mergeMcpConfigs=O,exports.selectWorkflowExtensionForProcess=d;
3
- //# sourceMappingURL=resourceCollector.cjs.map
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../adapters/resourceCollector.cjs`);exports.DISPATCHER_AGENT_NAME=e.DISPATCHER_AGENT_NAME,exports.adaptAgentDefinition=e.adaptAgentDefinition,exports.collectResources=e.collectResources,exports.discoverSkills=e.discoverSkills,exports.discoverSkillsAsync=e.discoverSkillsAsync,exports.mergeMcpConfigs=e.mergeMcpConfigs,exports.mergeMcpConfigsAsync=e.mergeMcpConfigsAsync,exports.selectWorkflowExtensionForProcess=e.selectWorkflowExtensionForProcess;
@@ -1,23 +1,2 @@
1
- import { HarnessResourceOptions, HarnessResources } from "../interfaces/harness.cjs";
2
- import { JsonObject } from "../utils/json.cjs";
3
- import { PluginEntry } from "@agimon-ai/doompi-config/domains";
4
-
5
- //#region src/services/resourceCollector.d.ts
6
- declare const DISPATCHER_AGENT_NAME = "agiflow-dispatcher";
7
- interface NamedResource {
8
- name: string;
9
- path: string;
10
- digest?: string;
11
- }
12
- declare function selectWorkflowExtensionForProcess(workflowExtension: string | undefined, dispatcherWorkflowExtension: string | undefined, environment?: NodeJS.ProcessEnv): string | undefined;
13
- declare function adaptAgentDefinition(content: string): {
14
- name: string;
15
- content: string;
16
- };
17
- /** Cached skill metadata and exact files, ready for Pi without a second tree walk. */
18
- declare function discoverSkills(repoRoot: string, root: string): NamedResource[];
19
- declare function mergeMcpConfigs(configPaths: string[]): JsonObject;
20
- declare function collectResources(repoRoot: string, plugins: Array<string | PluginEntry>, options: HarnessResourceOptions): Promise<HarnessResources>;
21
- //#endregion
22
- export { DISPATCHER_AGENT_NAME, adaptAgentDefinition, collectResources, discoverSkills, mergeMcpConfigs, selectWorkflowExtensionForProcess };
23
- //# sourceMappingURL=resourceCollector.d.cts.map
1
+ import { DISPATCHER_AGENT_NAME, adaptAgentDefinition, collectResources, discoverSkills, discoverSkillsAsync, mergeMcpConfigs, mergeMcpConfigsAsync, selectWorkflowExtensionForProcess } from "../adapters/resourceCollector.cjs";
2
+ export { DISPATCHER_AGENT_NAME, adaptAgentDefinition, collectResources, discoverSkills, discoverSkillsAsync, mergeMcpConfigs, mergeMcpConfigsAsync, selectWorkflowExtensionForProcess };
@@ -1,23 +1,2 @@
1
- import { HarnessResourceOptions, HarnessResources } from "../interfaces/harness.mjs";
2
- import { JsonObject } from "../utils/json.mjs";
3
- import { PluginEntry } from "@agimon-ai/doompi-config/domains";
4
-
5
- //#region src/services/resourceCollector.d.ts
6
- declare const DISPATCHER_AGENT_NAME = "agiflow-dispatcher";
7
- interface NamedResource {
8
- name: string;
9
- path: string;
10
- digest?: string;
11
- }
12
- declare function selectWorkflowExtensionForProcess(workflowExtension: string | undefined, dispatcherWorkflowExtension: string | undefined, environment?: NodeJS.ProcessEnv): string | undefined;
13
- declare function adaptAgentDefinition(content: string): {
14
- name: string;
15
- content: string;
16
- };
17
- /** Cached skill metadata and exact files, ready for Pi without a second tree walk. */
18
- declare function discoverSkills(repoRoot: string, root: string): NamedResource[];
19
- declare function mergeMcpConfigs(configPaths: string[]): JsonObject;
20
- declare function collectResources(repoRoot: string, plugins: Array<string | PluginEntry>, options: HarnessResourceOptions): Promise<HarnessResources>;
21
- //#endregion
22
- export { DISPATCHER_AGENT_NAME, adaptAgentDefinition, collectResources, discoverSkills, mergeMcpConfigs, selectWorkflowExtensionForProcess };
23
- //# sourceMappingURL=resourceCollector.d.mts.map
1
+ import { DISPATCHER_AGENT_NAME, adaptAgentDefinition, collectResources, discoverSkills, discoverSkillsAsync, mergeMcpConfigs, mergeMcpConfigsAsync, selectWorkflowExtensionForProcess } from "../adapters/resourceCollector.mjs";
2
+ export { DISPATCHER_AGENT_NAME, adaptAgentDefinition, collectResources, discoverSkills, discoverSkillsAsync, mergeMcpConfigs, mergeMcpConfigsAsync, selectWorkflowExtensionForProcess };
@@ -1,3 +1 @@
1
- import{toPiToolName as e}from"../utils/toolNames.mjs";import"../utils/index.mjs";import{applyMcpAllowlist as t}from"./mcpFilter.mjs";import n from"node:path";import r from"node:fs";import{createHash as i}from"node:crypto";import{parse as a,stringify as o}from"yaml";import s from"node:os";const c=`agiflow-dispatcher`,l=[`read`,`grep`,`find`,`ls`,`bash`,`launch_workflow`,`list_workflows`],u=n.join(`.pi`,`doom`,`cache`,`skills`);function d(e,t,n=process.env){return n.PI_SUBAGENT_CHILD_AGENT===`agiflow-dispatcher`&&n.PI_SUBAGENT_PARENT_SESSION&&t?t:e}function f(e){let t=e.match(/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/);if(!t)throw Error(`Resource is missing YAML frontmatter`);return{attributes:a(t[1]),body:t[2]??``}}const p={sonnet:`anthropic/claude-sonnet-4-6`,opus:`anthropic/claude-opus-4-6`,haiku:`anthropic/claude-haiku-4-5`};function m(e){let t=e.trim();if(!t||t!==e||t===`.`||t===`..`||t.includes(`\0`)||/[\\/]/.test(t))throw Error(`Unsafe agent name: ${JSON.stringify(e)}`);return t}function h(e){return typeof e==`string`?p[e.toLowerCase()]??e:Array.isArray(e)?e.map(e=>h(e)):e}function g(t){let{attributes:n,body:r}=f(t),i=typeof n.name==`string`?n.name:void 0;if(!i)throw Error(`Agent definition requires a name`);let a=m(i),s=Object.prototype.hasOwnProperty.call(n,`tools`),c=Array.isArray(n.tools)?n.tools.map(String):typeof n.tools==`string`?n.tools.split(`,`).map(e=>e.trim()).filter(Boolean):[],l=[...new Set(c.map(e).filter(e=>!!e))],u={...n,inheritProjectContext:!0,inheritSkills:!0,systemPromptMode:n.systemPromptMode??`replace`};if(s?u.tools=Array.isArray(n.tools)?l:l.join(`, `):delete u.tools,u.model!==void 0&&(u.model=h(u.model)),u.fallbackModels!==void 0&&(u.fallbackModels=h(u.fallbackModels)),u.memory===`project`||u.memory===`user`)u.memory={scope:u.memory,path:a};else if(u.memory!==void 0&&(typeof u.memory!=`object`||u.memory===null||Array.isArray(u.memory)))throw Error(`Unsupported memory declaration`);return delete u.permissionMode,{name:a,content:`---\n${o(u).trim()}\n---\n\n${r.trimStart()}`}}function _(e,t){let r=i(`sha256`).update(n.resolve(t)).digest(`hex`).slice(0,16);return n.join(e,u,`${r}.json`)}function v(e){try{let t=r.statSync(e.path);return t.isFile()&&t.size===e.size&&t.mtimeMs===e.mtimeMs&&t.ctimeMs===e.ctimeMs}catch{return!1}}function y(e){try{let t=r.statSync(e.path);return t.isDirectory()&&t.mtimeMs===e.mtimeMs&&t.ctimeMs===e.ctimeMs}catch{return!1}}function b(e,t){try{let i=JSON.parse(r.readFileSync(e,`utf8`));return i.version!==1||i.root!==n.resolve(t)||!Array.isArray(i.files)||!Array.isArray(i.directories)||!i.files.every(v)||!i.directories.every(y)?void 0:i}catch{return}}function x(e,t){r.mkdirSync(n.dirname(e),{recursive:!0,mode:448});let i=`${e}.${process.pid}.${Date.now()}.tmp`;r.writeFileSync(i,`${JSON.stringify(t,null,2)}\n`,{mode:384});try{r.renameSync(i,e)}catch(t){if(r.rmSync(i,{force:!0}),!r.existsSync(e))throw t}}function S(e){let t=[],a=[],o=e=>{if(!r.existsSync(e))return;let s=r.statSync(e);t.push({path:e,mtimeMs:s.mtimeMs,ctimeMs:s.ctimeMs});for(let t of r.readdirSync(e,{withFileTypes:!0})){let s=n.join(e,t.name);if(t.isDirectory()){o(s);continue}if(!t.isFile()||t.name!==`SKILL.md`)continue;let c=r.readFileSync(s,`utf8`),{attributes:l}=f(c);if(typeof l.name!=`string`)throw Error(`Resource requires a name: ${s}`);let u=r.statSync(s);a.push({path:s,name:l.name,digest:i(`sha256`).update(c).digest(`hex`),size:u.size,mtimeMs:u.mtimeMs,ctimeMs:u.ctimeMs})}};return o(n.resolve(e)),a.sort((e,t)=>e.path.localeCompare(t.path)),t.sort((e,t)=>e.path.localeCompare(t.path)),{version:1,root:n.resolve(e),files:a,directories:t}}function C(e,t){if(!r.existsSync(t))return[];let n=_(e,t),i=b(n,t),a=i??S(t);return i||x(n,a),a.files.map(({name:e,path:t,digest:n})=>({name:e,path:t,digest:n}))}function w(e){if(!r.existsSync(e))return[];let t=[];for(let i of r.readdirSync(e,{withFileTypes:!0})){let r=n.join(e,i.name);i.isDirectory()&&t.push(...w(r)),i.isFile()&&i.name.endsWith(`.md`)&&t.push(r)}return t}function T(e){let{attributes:t}=f(r.readFileSync(e,`utf8`));if(typeof t.name!=`string`)throw Error(`Resource requires a name: ${e}`);return t.name}function E(e,t){let n=new Map,a=new Map;for(let o of e){let e=n.get(o.name),s=o.digest??i(`sha256`).update(r.readFileSync(o.path)).digest(`hex`);if(e&&a.get(o.name)!==s)throw Error(`Conflicting ${t} "${o.name}": ${e} and ${o.path}`);n.set(o.name,o.path),a.set(o.name,s)}}function D(e){let t={name:c,description:`Selects and launches Agiflow workflows for one loop pass without implementing the work.`,thinking:`high`,systemPromptMode:`replace`,inheritProjectContext:!0,inheritSkills:!0,tools:l.join(`, `),extensions:[e],defaultContext:`fresh`,defaultProgress:!1},n=[`You are the Agiflow workflow dispatcher.`,`Reason about the supplied dispatch context and launch eligible workflows.`,`Launch workflows without monitoring them. After dispatching, report and exit.`,`Follow the task restrictions exactly. Do not implement jobs or edit repository files.`].join(`
2
- `);return`---\n${o(t).trim()}\n---\n\n${n}\n`}function O(e){let t={mcpServers:{}},n=t.mcpServers,i=new Map;for(let t of e){if(!r.existsSync(t))continue;let e=JSON.parse(r.readFileSync(t,`utf8`)).mcpServers??{};for(let[r,a]of Object.entries(e)){let e=n[r];if(e&&JSON.stringify(e)!==JSON.stringify(a))throw Error(`Conflicting MCP server "${r}": ${i.get(r)} and ${t}`);n[r]=a,i.set(r,t)}}return t}function k(e,t){return e?e.some(e=>e.includes(`*`)?RegExp(`^${e.split(`*`).map(A).join(`.*`)}$`).test(t):e===t):!0}function A(e){return e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}async function j(e,i,a){let o=i.map(e=>typeof e==`string`?{directory:e}:e),l=a.temporaryDirectory===void 0,u=a.temporaryDirectory??await r.promises.mkdtemp(n.join(s.tmpdir(),`doom-pi-`));await r.promises.mkdir(u,{mode:448,recursive:!0}),await r.promises.chmod(u,448);let d=n.join(e,`.claude`,`skills`),f=[],p=a.sharedSkills===!1?[]:C(e,d);f.push(...p.map(e=>e.path));let h=[],_=[],v=[],y=[n.join(e,`.mcp.json`)];for(let t of o){let i=t.directory,a=n.join(i,`skills`);if(r.existsSync(a)){let n=C(e,a).filter(e=>k(t.skills,e.name));f.push(...n.map(e=>e.path)),p.push(...n)}let o=n.join(i,`agents`);h.push(...w(o).map(e=>({name:T(e),path:e})).filter(e=>k(t.agents,e.name)));let s=n.join(i,`hooks`,`hooks.json`);t.hooks!==!1&&r.existsSync(s)&&_.push({pluginRoot:i,configPath:s});let c=n.join(i,`.mcp.json`);t.mcp!==!1&&r.existsSync(c)&&(y.push(c),v.push(c))}if(E(p,`skill`),E(h,`agent`),h.some(e=>e.name===`agiflow-dispatcher`))throw Error(`Conflicting agent "${c}": reserved by the agent harness`);let b=[],x,S=n.join(u,`agents`);if(await r.promises.rm(S,{recursive:!0,force:!0}),a.agents&&(h.length>0||a.dispatcherWorkflowExtension)){await r.promises.mkdir(S,{mode:448});for(let e of h){let t=g(r.readFileSync(e.path,`utf8`));await r.promises.writeFile(n.join(S,`${m(t.name)}.md`),t.content,{mode:384})}a.dispatcherWorkflowExtension&&(x=a.dispatcherWorkflowExtension,await r.promises.writeFile(n.join(S,`${c}.md`),D(a.dispatcherWorkflowExtension),{mode:384})),b.push(S)}let A;if(a.mcp){A=n.join(u,`mcp.json`);let i=await t(O(y),a.mcpAllowlist,e,u);await r.promises.writeFile(A,`${JSON.stringify(i,null,2)}\n`,{mode:384})}return{temporaryDirectory:u,skillDirectories:f,skillCount:p.length,agentCount:h.length,agentDirectories:b,pluginHooks:_,dispatcherWorkflowExtensionPath:x,mcpConfigPath:A,pluginMcpConfigPaths:v,cleanup:()=>l?r.promises.rm(u,{recursive:!0,force:!0}):Promise.resolve()}}export{c as DISPATCHER_AGENT_NAME,g as adaptAgentDefinition,j as collectResources,C as discoverSkills,O as mergeMcpConfigs,d as selectWorkflowExtensionForProcess};
3
- //# sourceMappingURL=resourceCollector.mjs.map
1
+ import{DISPATCHER_AGENT_NAME as e,adaptAgentDefinition as t,collectResources as n,discoverSkills as r,discoverSkillsAsync as i,mergeMcpConfigs as a,mergeMcpConfigsAsync as o,selectWorkflowExtensionForProcess as s}from"../adapters/resourceCollector.mjs";export{e as DISPATCHER_AGENT_NAME,t as adaptAgentDefinition,n as collectResources,r as discoverSkills,i as discoverSkillsAsync,a as mergeMcpConfigs,o as mergeMcpConfigsAsync,s as selectWorkflowExtensionForProcess};
@@ -1,2 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../_virtual/_rolldown/runtime.cjs`);let t=require(`node:path`);t=e.__toESM(t,1);let n=require(`@agimon-ai/doompi-config/domains`),r=require(`node:fs`);r=e.__toESM(r,1);let i=require(`@earendil-works/pi-coding-agent`);const a=`skills`,o=`.claude/skills`;let s;async function c(){return s??=import(`gpt-tokenizer`),(await s).countTokens}function l(e){let n=e.map(e=>t.default.resolve(e));return e=>{let r=t.default.resolve(e);return n.some(e=>e===r||e.startsWith(`${r}${t.default.sep}`)||r.startsWith(`${e}${t.default.sep}`))}}function u(e,n,r,a,o,s){let c=(0,i.loadSkillsFromDir)({dir:e,source:r});for(let t of c.diagnostics)s.push(`${t.path??e}: ${t.message}`);let l=c.skills.filter(e=>a(t.default.dirname(e.filePath)));return o.push(...l),l.map(e=>({name:e.name,description:e.description,filePath:e.filePath,baseDir:e.baseDir,group:n,owner:r,modelInvocable:!e.disableModelInvocation})).sort((e,t)=>e.name.localeCompare(t.name))}function d(e){return e.sort((e,t)=>e.owner.localeCompare(t.owner))}async function f(e){let{repoRoot:s}=e,f=l(e.activeSkillDirectories),p=[],m=[],h=[];for(let t of e.extensionSources){let e=t.directories.flatMap(e=>u(e,`extensions`,t.source,()=>!0,m,p));e.length>0&&h.push({owner:t.source,skills:e})}let g=[];for(let e of(0,n.resolvePluginEntries)(s,(0,n.listDomainNames)(s),[])){let n=t.default.join(e.directory,a);if(!r.default.existsSync(n))continue;let i=t.default.basename(e.directory),o=u(n,`plugins`,i,f,m,p);o.length>0&&g.push({owner:i,skills:o})}let _=u(t.default.join(s,`.claude`,a),`default`,o,f,m,p),v=_.length>0?[{owner:o,skills:_}]:[],y=[{key:`extensions`,label:`extensions`,owners:d(h)},{key:`plugins`,label:`plugins`,owners:d(g)},{key:`default`,label:`default`,owners:v}],b=await c(),x=(0,i.formatSkillsForPrompt)(m),S=0;for(let e of m)try{S+=b(r.default.readFileSync(e.filePath,`utf8`))}catch(t){p.push(`${e.filePath}: ${t instanceof Error?t.message:String(t)}`)}return{groups:y,skillCount:m.length,promptTokens:x?b(x):0,bodyTokens:S,diagnostics:p}}function p(e,t){for(let n of e.groups)for(let e of n.owners){let n=e.skills.find(e=>e.name===t);if(n)return n}}exports.buildSkillCatalog=f,exports.counter=c,exports.findSkill=p;
2
- //# sourceMappingURL=skillCatalog.cjs.map
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../adapters/skillCatalog.cjs`);exports.buildSkillCatalog=e.buildSkillCatalog,exports.counter=e.counter,exports.findSkill=e.findSkill;