@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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills.cjs","names":["provideSkillSources","createActiveHelpSkillView"],"sources":["../../../src/extensions/entries/skills.ts"],"sourcesContent":["import { requireDoomConfigContext } from '@agimon-ai/doompi-config/piContext';\nimport { type DoomLeaderContribution, registerDoomLeaderContribution } from '@agimon-ai/doompi-ui/leader';\nimport type { ExtensionAPI } from '@earendil-works/pi-coding-agent';\nimport type { DeferredSkillSnapshot } from '../../adapters/deferredSkills.ts';\nimport { createActiveHelpSkillView } from '../../adapters/helpSkills.ts';\nimport { provideSkillSources } from '../../adapters/skillSources.ts';\n\nconst SKILLS_COMMAND = 'skills';\nconst SKILL_INVOCATION_PREFIX = '/skill:';\nconst SKILL_COMMAND_PREFIX = 'skill:';\nconst LEADER_SOURCE = '@agimon-ai/doompi';\nconst INFO = 'info';\nconst WARNING = 'warning';\nconst ERROR = 'error';\n\ninterface SkillReadinessGeneration {\n readonly id: number;\n readonly ready: Promise<DeferredSkillSnapshot>;\n diagnosticsShown: boolean;\n}\n\nexport const SKILLS_LEADER_CONTRIBUTION = {\n source: LEADER_SOURCE,\n bindings: [\n {\n id: 'skills.browse',\n path: [\n // Label and order repeat the core extension group exactly; the registry\n // rejects a contribution whose shared prefix disagrees.\n { key: 'e', label: 'extension', order: 50 },\n { key: 's', label: 'skills', detail: 'browse catalog' },\n ],\n command: { name: SKILLS_COMMAND },\n },\n ],\n} satisfies DoomLeaderContribution;\n\n/**\n * Prefills the draft rather than submitting it.\n *\n * `/skill:<name>` is expanded by Pi inside `prompt()`, which only the editor's\n * own submission path reaches: `sendUserMessage` sets `expandPromptTemplates`\n * false and would deliver the literal text. Leaving the command in the editor\n * keeps the expansion and costs one keystroke.\n */\nexport function skillInvocation(name: string): string {\n return `${SKILL_INVOCATION_PREFIX}${name} `;\n}\n\nfunction loadedSkillCommandNames(pi: ExtensionAPI): string[] {\n if (typeof pi.getCommands !== 'function') return [];\n return pi\n .getCommands()\n .filter((command) => command.source === 'skill' && command.name.startsWith(SKILL_COMMAND_PREFIX))\n .map((command) => command.name.slice(SKILL_COMMAND_PREFIX.length));\n}\n\nfunction failedSnapshot(cwd: string, error: unknown): DeferredSkillSnapshot {\n return {\n skills: [],\n diagnostics: [`${cwd}: ${error instanceof Error ? error.message : String(error)}`],\n };\n}\n\nexport function skillsExtension(pi: ExtensionAPI): void {\n const sources = provideSkillSources(pi);\n const helpSkillView = createActiveHelpSkillView(pi);\n let deferredSkillsPromise: Promise<typeof import('../../adapters/deferredSkills.ts')> | undefined;\n let harnessStatePromise: Promise<typeof import('../../adapters/config/harnessState.ts')> | undefined;\n let skillCatalogPromise: Promise<typeof import('../../adapters/skillCatalog.ts')> | undefined;\n let overlayPromise: Promise<typeof import('./components/skillsOverlay.ts')> | undefined;\n let generationSequence = 0;\n let currentGeneration: SkillReadinessGeneration | undefined;\n let shownHelpDiagnosticKey = '';\n\n const loadDeferredSkills = () => (deferredSkillsPromise ??= import('../../adapters/deferredSkills.ts'));\n const loadHarnessState = () => (harnessStatePromise ??= import('../../adapters/config/harnessState.ts'));\n const loadSkillCatalog = () => (skillCatalogPromise ??= import('../../adapters/skillCatalog.ts'));\n const loadOverlay = () => (overlayPromise ??= import('./components/skillsOverlay.ts'));\n\n const currentSnapshot = async (generation: SkillReadinessGeneration): Promise<DeferredSkillSnapshot | undefined> => {\n const snapshot = await generation.ready;\n return currentGeneration === generation ? snapshot : undefined;\n };\n\n registerDoomLeaderContribution(pi, SKILLS_LEADER_CONTRIBUTION);\n\n pi.on('session_start', (_event, ctx) => {\n const state = requireDoomConfigContext(ctx).harness;\n const id = ++generationSequence;\n const ready = loadDeferredSkills()\n .then(({ DeferredSkillLoader }) =>\n new DeferredSkillLoader({ cwd: ctx.cwd, skillPaths: state.skillDirectories }).start(),\n )\n .catch((error: unknown) => failedSnapshot(ctx.cwd, error));\n currentGeneration = { id, ready, diagnosticsShown: false };\n shownHelpDiagnosticKey = '';\n });\n\n pi.on('input', async (event) => {\n if (!event.text.startsWith(SKILL_INVOCATION_PREFIX)) return { action: 'continue' };\n\n const generation = currentGeneration;\n if (!generation) return { action: 'continue' };\n const snapshot = await currentSnapshot(generation);\n if (!snapshot) return { action: 'continue' };\n\n const inventory = helpSkillView.merge({\n normalSkills: [],\n deferredSkills: snapshot.skills,\n normalSkillNames: loadedSkillCommandNames(pi),\n });\n const { expandDeferredSkillCommand } = await loadDeferredSkills();\n const text = expandDeferredSkillCommand(event.text, inventory.additionalSkills);\n return text === event.text ? { action: 'continue' } : { action: 'transform', text, images: event.images };\n });\n\n pi.on('before_agent_start', async (event, ctx) => {\n const generation = currentGeneration;\n if (!generation) return undefined;\n const snapshot = await currentSnapshot(generation);\n if (!snapshot) return undefined;\n\n if (!generation.diagnosticsShown && snapshot.diagnostics.length > 0) {\n generation.diagnosticsShown = true;\n ctx.ui.notify(`Skill discovery:\\n${snapshot.diagnostics.join('\\n')}`, WARNING);\n }\n const inventory = helpSkillView.merge({\n normalSkills: event.systemPromptOptions.skills ?? [],\n deferredSkills: snapshot.skills,\n });\n if (inventory.diagnosticKey !== shownHelpDiagnosticKey) {\n shownHelpDiagnosticKey = inventory.diagnosticKey;\n if (inventory.diagnostics.length > 0) {\n ctx.ui.notify(`Package Help:\\n${inventory.diagnostics.join('\\n')}`, WARNING);\n }\n }\n if (inventory.additionalSkills.length === 0) return undefined;\n\n const { buildPromptWithDeferredSkills } = await loadDeferredSkills();\n return {\n systemPrompt: buildPromptWithDeferredSkills(event.systemPrompt, event.systemPromptOptions, [\n ...inventory.additionalSkills,\n ]),\n };\n });\n\n pi.registerCommand(SKILLS_COMMAND, {\n description: 'Browse the skills this session loaded, and what other domains would add',\n handler: async (_args, ctx) => {\n if (!ctx.hasUI || ctx.mode !== 'tui') {\n ctx.ui.notify('/skills requires interactive mode', ERROR);\n return;\n }\n\n const state = requireDoomConfigContext(ctx).harness;\n const [{ requireHarnessRoot }, { buildSkillCatalog }, { openSkillsOverlay }] = await Promise.all([\n loadHarnessState(),\n loadSkillCatalog(),\n loadOverlay(),\n ]);\n const repoRoot = requireHarnessRoot(state);\n const generation = currentGeneration;\n const deferredSnapshot = generation ? await currentSnapshot(generation) : undefined;\n const inventory = helpSkillView.merge({\n normalSkills: ctx.getSystemPromptOptions().skills ?? [],\n deferredSkills: deferredSnapshot?.skills ?? [],\n });\n const catalog = await buildSkillCatalog({\n repoRoot,\n activeSkillDirectories: state.skillDirectories,\n extensionSources: sources.list(),\n helpSkills: inventory.helpSkills,\n helpDiagnostics: inventory.diagnostics,\n });\n\n const result = await openSkillsOverlay(ctx, { catalog, repoRoot });\n if (!result) return;\n const { skill } = result;\n ctx.ui.setEditorText(skillInvocation(skill.name));\n ctx.ui.notify(`Loaded ${skill.name} into the prompt. Press enter to run it.`, INFO);\n },\n });\n\n pi.on('session_shutdown', () => {\n helpSkillView.dispose();\n });\n}\n\nexport default skillsExtension;\n"],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import { ExtensionAPI } from "@earendil-works/pi-coding-agent";
2
+
3
+ //#region src/extensions/entries/skills.d.ts
4
+ declare const SKILLS_LEADER_CONTRIBUTION: {
5
+ source: string;
6
+ bindings: {
7
+ id: string;
8
+ path: [{
9
+ key: string;
10
+ label: string;
11
+ order: number;
12
+ }, {
13
+ key: string;
14
+ label: string;
15
+ detail: string;
16
+ }];
17
+ command: {
18
+ name: string;
19
+ };
20
+ }[];
21
+ };
22
+ /**
23
+ * Prefills the draft rather than submitting it.
24
+ *
25
+ * `/skill:<name>` is expanded by Pi inside `prompt()`, which only the editor's
26
+ * own submission path reaches: `sendUserMessage` sets `expandPromptTemplates`
27
+ * false and would deliver the literal text. Leaving the command in the editor
28
+ * keeps the expansion and costs one keystroke.
29
+ */
30
+ declare function skillInvocation(name: string): string;
31
+ declare function skillsExtension(pi: ExtensionAPI): void;
32
+ //#endregion
33
+ export { SKILLS_LEADER_CONTRIBUTION, skillInvocation, skillsExtension };
34
+ //# sourceMappingURL=skills.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills.d.cts","names":[],"sources":["../../../src/extensions/entries/skills.ts"],"mappings":";;;cAqBa,0BAAA;;;;;;;;;;;;;;;;;;;;AAwBb;;;;;AAmBA;iBAnBgB,eAAA,CAAgB,IAAA;AAAA,iBAmBhB,eAAA,CAAgB,EAAA,EAAI,YAAA"}
@@ -0,0 +1,34 @@
1
+ import { ExtensionAPI } from "@earendil-works/pi-coding-agent";
2
+
3
+ //#region src/extensions/entries/skills.d.ts
4
+ declare const SKILLS_LEADER_CONTRIBUTION: {
5
+ source: string;
6
+ bindings: {
7
+ id: string;
8
+ path: [{
9
+ key: string;
10
+ label: string;
11
+ order: number;
12
+ }, {
13
+ key: string;
14
+ label: string;
15
+ detail: string;
16
+ }];
17
+ command: {
18
+ name: string;
19
+ };
20
+ }[];
21
+ };
22
+ /**
23
+ * Prefills the draft rather than submitting it.
24
+ *
25
+ * `/skill:<name>` is expanded by Pi inside `prompt()`, which only the editor's
26
+ * own submission path reaches: `sendUserMessage` sets `expandPromptTemplates`
27
+ * false and would deliver the literal text. Leaving the command in the editor
28
+ * keeps the expansion and costs one keystroke.
29
+ */
30
+ declare function skillInvocation(name: string): string;
31
+ declare function skillsExtension(pi: ExtensionAPI): void;
32
+ //#endregion
33
+ export { SKILLS_LEADER_CONTRIBUTION, skillInvocation, skillsExtension };
34
+ //# sourceMappingURL=skills.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills.d.mts","names":[],"sources":["../../../src/extensions/entries/skills.ts"],"mappings":";;;cAqBa,0BAAA;;;;;;;;;;;;;;;;;;;;AAwBb;;;;;AAmBA;iBAnBgB,eAAA,CAAgB,IAAA;AAAA,iBAmBhB,eAAA,CAAgB,EAAA,EAAI,YAAA"}
@@ -0,0 +1,4 @@
1
+ import{createActiveHelpSkillView as e}from"../../adapters/helpSkills.mjs";import{provideSkillSources as t}from"../../adapters/skillSources.mjs";import{requireDoomConfigContext as n}from"@agimon-ai/doompi-config/piContext";import{registerDoomLeaderContribution as r}from"@agimon-ai/doompi-ui/leader";const i=`skills`,a=`/skill:`,o=`warning`,s={source:`@agimon-ai/doompi`,bindings:[{id:`skills.browse`,path:[{key:`e`,label:`extension`,order:50},{key:`s`,label:`skills`,detail:`browse catalog`}],command:{name:i}}]};function c(e){return`${a}${e} `}function l(e){return typeof e.getCommands==`function`?e.getCommands().filter(e=>e.source===`skill`&&e.name.startsWith(`skill:`)).map(e=>e.name.slice(6)):[]}function u(e,t){return{skills:[],diagnostics:[`${e}: ${t instanceof Error?t.message:String(t)}`]}}function d(d){let f=t(d),p=e(d),m,h,g,_,v=0,y,b=``,x=()=>m??=import(`../../adapters/deferredSkills.mjs`),S=()=>h??=import(`../../adapters/config/harnessState.mjs`),C=()=>g??=import(`../../adapters/skillCatalog.mjs`),w=()=>_??=import(`./components/skillsOverlay.mjs`),T=async e=>{let t=await e.ready;return y===e?t:void 0};r(d,s),d.on(`session_start`,(e,t)=>{let r=n(t).harness;y={id:++v,ready:x().then(({DeferredSkillLoader:e})=>new e({cwd:t.cwd,skillPaths:r.skillDirectories}).start()).catch(e=>u(t.cwd,e)),diagnosticsShown:!1},b=``}),d.on(`input`,async e=>{if(!e.text.startsWith(a))return{action:`continue`};let t=y;if(!t)return{action:`continue`};let n=await T(t);if(!n)return{action:`continue`};let r=p.merge({normalSkills:[],deferredSkills:n.skills,normalSkillNames:l(d)}),{expandDeferredSkillCommand:i}=await x(),o=i(e.text,r.additionalSkills);return o===e.text?{action:`continue`}:{action:`transform`,text:o,images:e.images}}),d.on(`before_agent_start`,async(e,t)=>{let n=y;if(!n)return;let r=await T(n);if(!r)return;!n.diagnosticsShown&&r.diagnostics.length>0&&(n.diagnosticsShown=!0,t.ui.notify(`Skill discovery:\n${r.diagnostics.join(`
2
+ `)}`,o));let i=p.merge({normalSkills:e.systemPromptOptions.skills??[],deferredSkills:r.skills});if(i.diagnosticKey!==b&&(b=i.diagnosticKey,i.diagnostics.length>0&&t.ui.notify(`Package Help:\n${i.diagnostics.join(`
3
+ `)}`,o)),i.additionalSkills.length===0)return;let{buildPromptWithDeferredSkills:a}=await x();return{systemPrompt:a(e.systemPrompt,e.systemPromptOptions,[...i.additionalSkills])}}),d.registerCommand(i,{description:`Browse the skills this session loaded, and what other domains would add`,handler:async(e,t)=>{if(!t.hasUI||t.mode!==`tui`){t.ui.notify(`/skills requires interactive mode`,`error`);return}let r=n(t).harness,[{requireHarnessRoot:i},{buildSkillCatalog:a},{openSkillsOverlay:o}]=await Promise.all([S(),C(),w()]),s=i(r),l=y,u=l?await T(l):void 0,d=p.merge({normalSkills:t.getSystemPromptOptions().skills??[],deferredSkills:u?.skills??[]}),m=await o(t,{catalog:await a({repoRoot:s,activeSkillDirectories:r.skillDirectories,extensionSources:f.list(),helpSkills:d.helpSkills,helpDiagnostics:d.diagnostics}),repoRoot:s});if(!m)return;let{skill:h}=m;t.ui.setEditorText(c(h.name)),t.ui.notify(`Loaded ${h.name} into the prompt. Press enter to run it.`,`info`)}}),d.on(`session_shutdown`,()=>{p.dispose()})}export{s as SKILLS_LEADER_CONTRIBUTION,d as default,c as skillInvocation};
4
+ //# sourceMappingURL=skills.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills.mjs","names":[],"sources":["../../../src/extensions/entries/skills.ts"],"sourcesContent":["import { requireDoomConfigContext } from '@agimon-ai/doompi-config/piContext';\nimport { type DoomLeaderContribution, registerDoomLeaderContribution } from '@agimon-ai/doompi-ui/leader';\nimport type { ExtensionAPI } from '@earendil-works/pi-coding-agent';\nimport type { DeferredSkillSnapshot } from '../../adapters/deferredSkills.ts';\nimport { createActiveHelpSkillView } from '../../adapters/helpSkills.ts';\nimport { provideSkillSources } from '../../adapters/skillSources.ts';\n\nconst SKILLS_COMMAND = 'skills';\nconst SKILL_INVOCATION_PREFIX = '/skill:';\nconst SKILL_COMMAND_PREFIX = 'skill:';\nconst LEADER_SOURCE = '@agimon-ai/doompi';\nconst INFO = 'info';\nconst WARNING = 'warning';\nconst ERROR = 'error';\n\ninterface SkillReadinessGeneration {\n readonly id: number;\n readonly ready: Promise<DeferredSkillSnapshot>;\n diagnosticsShown: boolean;\n}\n\nexport const SKILLS_LEADER_CONTRIBUTION = {\n source: LEADER_SOURCE,\n bindings: [\n {\n id: 'skills.browse',\n path: [\n // Label and order repeat the core extension group exactly; the registry\n // rejects a contribution whose shared prefix disagrees.\n { key: 'e', label: 'extension', order: 50 },\n { key: 's', label: 'skills', detail: 'browse catalog' },\n ],\n command: { name: SKILLS_COMMAND },\n },\n ],\n} satisfies DoomLeaderContribution;\n\n/**\n * Prefills the draft rather than submitting it.\n *\n * `/skill:<name>` is expanded by Pi inside `prompt()`, which only the editor's\n * own submission path reaches: `sendUserMessage` sets `expandPromptTemplates`\n * false and would deliver the literal text. Leaving the command in the editor\n * keeps the expansion and costs one keystroke.\n */\nexport function skillInvocation(name: string): string {\n return `${SKILL_INVOCATION_PREFIX}${name} `;\n}\n\nfunction loadedSkillCommandNames(pi: ExtensionAPI): string[] {\n if (typeof pi.getCommands !== 'function') return [];\n return pi\n .getCommands()\n .filter((command) => command.source === 'skill' && command.name.startsWith(SKILL_COMMAND_PREFIX))\n .map((command) => command.name.slice(SKILL_COMMAND_PREFIX.length));\n}\n\nfunction failedSnapshot(cwd: string, error: unknown): DeferredSkillSnapshot {\n return {\n skills: [],\n diagnostics: [`${cwd}: ${error instanceof Error ? error.message : String(error)}`],\n };\n}\n\nexport function skillsExtension(pi: ExtensionAPI): void {\n const sources = provideSkillSources(pi);\n const helpSkillView = createActiveHelpSkillView(pi);\n let deferredSkillsPromise: Promise<typeof import('../../adapters/deferredSkills.ts')> | undefined;\n let harnessStatePromise: Promise<typeof import('../../adapters/config/harnessState.ts')> | undefined;\n let skillCatalogPromise: Promise<typeof import('../../adapters/skillCatalog.ts')> | undefined;\n let overlayPromise: Promise<typeof import('./components/skillsOverlay.ts')> | undefined;\n let generationSequence = 0;\n let currentGeneration: SkillReadinessGeneration | undefined;\n let shownHelpDiagnosticKey = '';\n\n const loadDeferredSkills = () => (deferredSkillsPromise ??= import('../../adapters/deferredSkills.ts'));\n const loadHarnessState = () => (harnessStatePromise ??= import('../../adapters/config/harnessState.ts'));\n const loadSkillCatalog = () => (skillCatalogPromise ??= import('../../adapters/skillCatalog.ts'));\n const loadOverlay = () => (overlayPromise ??= import('./components/skillsOverlay.ts'));\n\n const currentSnapshot = async (generation: SkillReadinessGeneration): Promise<DeferredSkillSnapshot | undefined> => {\n const snapshot = await generation.ready;\n return currentGeneration === generation ? snapshot : undefined;\n };\n\n registerDoomLeaderContribution(pi, SKILLS_LEADER_CONTRIBUTION);\n\n pi.on('session_start', (_event, ctx) => {\n const state = requireDoomConfigContext(ctx).harness;\n const id = ++generationSequence;\n const ready = loadDeferredSkills()\n .then(({ DeferredSkillLoader }) =>\n new DeferredSkillLoader({ cwd: ctx.cwd, skillPaths: state.skillDirectories }).start(),\n )\n .catch((error: unknown) => failedSnapshot(ctx.cwd, error));\n currentGeneration = { id, ready, diagnosticsShown: false };\n shownHelpDiagnosticKey = '';\n });\n\n pi.on('input', async (event) => {\n if (!event.text.startsWith(SKILL_INVOCATION_PREFIX)) return { action: 'continue' };\n\n const generation = currentGeneration;\n if (!generation) return { action: 'continue' };\n const snapshot = await currentSnapshot(generation);\n if (!snapshot) return { action: 'continue' };\n\n const inventory = helpSkillView.merge({\n normalSkills: [],\n deferredSkills: snapshot.skills,\n normalSkillNames: loadedSkillCommandNames(pi),\n });\n const { expandDeferredSkillCommand } = await loadDeferredSkills();\n const text = expandDeferredSkillCommand(event.text, inventory.additionalSkills);\n return text === event.text ? { action: 'continue' } : { action: 'transform', text, images: event.images };\n });\n\n pi.on('before_agent_start', async (event, ctx) => {\n const generation = currentGeneration;\n if (!generation) return undefined;\n const snapshot = await currentSnapshot(generation);\n if (!snapshot) return undefined;\n\n if (!generation.diagnosticsShown && snapshot.diagnostics.length > 0) {\n generation.diagnosticsShown = true;\n ctx.ui.notify(`Skill discovery:\\n${snapshot.diagnostics.join('\\n')}`, WARNING);\n }\n const inventory = helpSkillView.merge({\n normalSkills: event.systemPromptOptions.skills ?? [],\n deferredSkills: snapshot.skills,\n });\n if (inventory.diagnosticKey !== shownHelpDiagnosticKey) {\n shownHelpDiagnosticKey = inventory.diagnosticKey;\n if (inventory.diagnostics.length > 0) {\n ctx.ui.notify(`Package Help:\\n${inventory.diagnostics.join('\\n')}`, WARNING);\n }\n }\n if (inventory.additionalSkills.length === 0) return undefined;\n\n const { buildPromptWithDeferredSkills } = await loadDeferredSkills();\n return {\n systemPrompt: buildPromptWithDeferredSkills(event.systemPrompt, event.systemPromptOptions, [\n ...inventory.additionalSkills,\n ]),\n };\n });\n\n pi.registerCommand(SKILLS_COMMAND, {\n description: 'Browse the skills this session loaded, and what other domains would add',\n handler: async (_args, ctx) => {\n if (!ctx.hasUI || ctx.mode !== 'tui') {\n ctx.ui.notify('/skills requires interactive mode', ERROR);\n return;\n }\n\n const state = requireDoomConfigContext(ctx).harness;\n const [{ requireHarnessRoot }, { buildSkillCatalog }, { openSkillsOverlay }] = await Promise.all([\n loadHarnessState(),\n loadSkillCatalog(),\n loadOverlay(),\n ]);\n const repoRoot = requireHarnessRoot(state);\n const generation = currentGeneration;\n const deferredSnapshot = generation ? await currentSnapshot(generation) : undefined;\n const inventory = helpSkillView.merge({\n normalSkills: ctx.getSystemPromptOptions().skills ?? [],\n deferredSkills: deferredSnapshot?.skills ?? [],\n });\n const catalog = await buildSkillCatalog({\n repoRoot,\n activeSkillDirectories: state.skillDirectories,\n extensionSources: sources.list(),\n helpSkills: inventory.helpSkills,\n helpDiagnostics: inventory.diagnostics,\n });\n\n const result = await openSkillsOverlay(ctx, { catalog, repoRoot });\n if (!result) return;\n const { skill } = result;\n ctx.ui.setEditorText(skillInvocation(skill.name));\n ctx.ui.notify(`Loaded ${skill.name} into the prompt. Press enter to run it.`, INFO);\n },\n });\n\n pi.on('session_shutdown', () => {\n helpSkillView.dispose();\n });\n}\n\nexport default skillsExtension;\n"],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ const e=require(`../../_virtual/_rolldown/runtime.cjs`),t=require(`../../adapters/telemetry/logSinkTelemetry.cjs`);let n=require(`node:path`);n=e.__toESM(n,1);let r=require(`node:fs`);r=e.__toESM(r,1);let i=require(`node:os`);i=e.__toESM(i,1);let a=require(`@agimon-ai/doompi-config/piContext`),o=require(`node:child_process`);const s=`style-system`,c=`${s}.config.yaml`,l=`Playground`,u=/\.stories\.(?:ts|tsx)$/,d=/export\s+const\s+([A-Z][A-Za-z0-9_]*)\b/g;function f(e,t){if(e.isError||e.toolName!==`write`&&e.toolName!==`edit`)return;let r=e.input;if(!(typeof r.path!=`string`||!u.test(r.path)))return n.default.resolve(t,r.path)}function p(e,t){let i=n.default.dirname(e),a=n.default.resolve(t);for(;i.startsWith(a);){if(r.default.existsSync(n.default.join(i,c)))return n.default.relative(a,i)||`.`;let e=n.default.dirname(i);if(e===i)break;i=e}}function m(e,t){return t.match(/title\s*:\s*['"]([^'"]+)['"]/)?.[1]?.trim()||n.default.basename(e).replace(/\.stories\.(?:ts|tsx)$/,``)}function h(e){if(/export\s+const\s+Playground\b/.test(e))return l;let t=d.exec(e)?.[1];return d.lastIndex=0,t??l}function g(e,t){if(!u.test(e)||!r.default.existsSync(e))return;let n=p(e,t);if(!n)return;let i=r.default.readFileSync(e,`utf8`);return{storyPath:e,projectPath:n,componentName:m(e,i),storyName:h(i)}}function _(e){let t=e.trim();if(!t)throw Error(`${s} returned no output`);return JSON.parse(t)}async function v(e,t){let n=[`exec`,s,`get-ui-component`,`--component-name`,e.componentName,`--app-path`,e.projectPath,`--story-name`,e.storyName];return new Promise((e,r)=>{let i=(0,o.spawn)(`pnpm`,n,{cwd:t,env:{...process.env,LOG_LEVEL:process.env.LOG_LEVEL??`info`},stdio:[`ignore`,`pipe`,`pipe`]}),a=``,c=``,l=setTimeout(()=>i.kill(`SIGTERM`),12e4);i.stdout.on(`data`,e=>{a+=e.toString()}),i.stderr.on(`data`,e=>{c+=e.toString()}),i.once(`error`,e=>{clearTimeout(l),r(e)}),i.once(`exit`,t=>{if(clearTimeout(l),t!==0){r(Error(c.trim()||`${s} exited with code ${t??`unknown`}`));return}try{e(_(a))}catch(e){r(e)}})})}async function y(e,t,a=r.default.mkdtempSync(n.default.join(i.default.tmpdir(),`agent-harness-style-system-`))){let o=n.default.join(a,`${s}-visuals`);await r.default.promises.mkdir(o,{recursive:!0,mode:448});let c=n.default.basename(t.storyPath).replace(/[^a-zA-Z0-9.-]/g,`-`).replace(/\.stories\./,`.`),l=n.default.join(o,`${Date.now()}-${c}.png`);return await r.default.promises.copyFile(e,l),await r.default.promises.chmod(l,384),l}function b(e,t,n){return[`Style-system visual generated for the story you just changed.`,...[`Image path: ${n}`,`Story file: ${t.storyFilePath??e.storyPath}`,`Component: ${t.componentTitle??e.componentName}`,`Story: ${t.renderedStory??e.storyName}`,t.colorScheme?`Color scheme: ${t.colorScheme}`:void 0,t.dimensions?`Dimensions: ${t.dimensions}`:void 0].filter(e=>!!e),`The image is saved and ready to inspect: call the read tool on the image path above to view it.`,`If the layout, spacing, color, overflow, or hierarchy looks wrong, adjust the UI and story, then let this hook render it again.`].join(`
2
+ `)}function x(e,t){let n=t instanceof Error?t.message:String(t);return[`Your file change was applied, but ${s} could not generate a visual for it.`,`Story file: ${e.storyPath}`,`Command: pnpm exec ${s} get-ui-component --component-name ${JSON.stringify(e.componentName)} --app-path ${JSON.stringify(e.projectPath)} --story-name ${JSON.stringify(e.storyName)}`,`Error: ${n}`,`Do not treat the UI as visually verified. Run the command above to investigate.`].join(`
3
+ `)}function S(e,o=t.createHarnessTelemetry()){e.on(`tool_result`,async(e,c)=>{let l=f(e,c.cwd);if(!l)return;let u=(0,a.requireDoomConfigContext)(c).harness,d=u.root??c.cwd,p=g(l,d);if(!p)return;let m=`style-system:${e.toolCallId}`;c.hasUI&&c.ui.setStatus(m,`Rendering ${p.componentName} visual...`);try{let t=await v(p,d);if(!t.imagePath)throw Error(`${s} did not return an imagePath`);let a=await y(t.imagePath,p,u.temporaryDirectory??r.default.mkdtempSync(n.default.join(i.default.tmpdir(),`agent-harness-style-system-`)));return{content:[...e.content,{type:`text`,text:b(p,t,a)}]}}catch(n){return o.recordWarning(t.HARNESS_EVENT.styleSystemRenderFailed,n,{"style_system.component":p.componentName}),{content:[...e.content,{type:`text`,text:x(p,n)}]}}finally{c.hasUI&&c.ui.setStatus(m,void 0)}})}exports.copyImageToHarnessTemp=y,exports.default=S,exports.eventPath=f,exports.failureMessage=x,exports.inferStoryRenderRequest=g,exports.parseStyleSystemOutput=_,exports.successMessage=b;
4
+ //# sourceMappingURL=styleSystem.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"styleSystem.cjs","names":["path","fs","os","createHarnessTelemetry","HARNESS_EVENT"],"sources":["../../../src/extensions/entries/styleSystem.ts"],"sourcesContent":["import { spawn } from 'node:child_process';\nimport fs from 'node:fs';\nimport os from 'node:os';\nimport path from 'node:path';\nimport { requireDoomConfigContext } from '@agimon-ai/doompi-config/piContext';\nimport type { ExtensionAPI, ToolResultEvent } from '@earendil-works/pi-coding-agent';\nimport {\n createHarnessTelemetry,\n HARNESS_EVENT,\n type HarnessTelemetry,\n} from '../../adapters/telemetry/logSinkTelemetry.ts';\n\ninterface StoryRenderRequest {\n storyPath: string;\n projectPath: string;\n componentName: string;\n storyName: string;\n}\n\ninterface StyleSystemResult {\n imagePath?: string;\n storyFilePath?: string;\n componentTitle?: string;\n renderedStory?: string;\n colorScheme?: string;\n viewport?: { width: number; height: number };\n dimensions?: string;\n}\n\nconst STYLE_SYSTEM_PACKAGE = 'style-system';\nconst STYLE_SYSTEM_CONFIG_FILE = `${STYLE_SYSTEM_PACKAGE}.config.yaml`;\nconst DEFAULT_STORY_NAME = 'Playground';\nconst STORY_FILE_PATTERN = /\\.stories\\.(?:ts|tsx)$/;\nconst EXPORT_STORY_PATTERN = /export\\s+const\\s+([A-Z][A-Za-z0-9_]*)\\b/g;\nconst TOOL_TIMEOUT_MS = 120_000;\n\nexport function eventPath(event: ToolResultEvent, cwd: string): string | undefined {\n if (event.isError || (event.toolName !== 'write' && event.toolName !== 'edit')) return undefined;\n const input = event.input as { path?: unknown };\n if (typeof input.path !== 'string' || !STORY_FILE_PATTERN.test(input.path)) return undefined;\n return path.resolve(cwd, input.path);\n}\n\nfunction findStyleSystemProject(startFile: string, root: string): string | undefined {\n let directory = path.dirname(startFile);\n const resolvedRoot = path.resolve(root);\n while (directory.startsWith(resolvedRoot)) {\n if (fs.existsSync(path.join(directory, STYLE_SYSTEM_CONFIG_FILE))) {\n return path.relative(resolvedRoot, directory) || '.';\n }\n const parent = path.dirname(directory);\n if (parent === directory) break;\n directory = parent;\n }\n return undefined;\n}\n\nfunction inferComponentName(storyPath: string, content: string): string {\n const title = content.match(/title\\s*:\\s*['\"]([^'\"]+)['\"]/)?.[1]?.trim();\n if (title) return title;\n return path.basename(storyPath).replace(/\\.stories\\.(?:ts|tsx)$/, '');\n}\n\nfunction inferStoryName(content: string): string {\n if (/export\\s+const\\s+Playground\\b/.test(content)) return DEFAULT_STORY_NAME;\n const firstExportedStory = EXPORT_STORY_PATTERN.exec(content)?.[1];\n EXPORT_STORY_PATTERN.lastIndex = 0;\n return firstExportedStory ?? DEFAULT_STORY_NAME;\n}\n\nexport function inferStoryRenderRequest(storyPath: string, root: string): StoryRenderRequest | undefined {\n if (!STORY_FILE_PATTERN.test(storyPath) || !fs.existsSync(storyPath)) return undefined;\n const projectPath = findStyleSystemProject(storyPath, root);\n if (!projectPath) return undefined;\n const content = fs.readFileSync(storyPath, 'utf8');\n return {\n storyPath,\n projectPath,\n componentName: inferComponentName(storyPath, content),\n storyName: inferStoryName(content),\n };\n}\n\nexport function parseStyleSystemOutput(stdout: string): StyleSystemResult {\n const text = stdout.trim();\n if (!text) throw new Error(`${STYLE_SYSTEM_PACKAGE} returned no output`);\n return JSON.parse(text) as StyleSystemResult;\n}\n\n/* v8 ignore next 57 */\nasync function runStyleSystem(request: StoryRenderRequest, root: string): Promise<StyleSystemResult> {\n const args = [\n 'exec',\n STYLE_SYSTEM_PACKAGE,\n 'get-ui-component',\n '--component-name',\n request.componentName,\n '--app-path',\n request.projectPath,\n '--story-name',\n request.storyName,\n ];\n\n return new Promise((resolve, reject) => {\n const child = spawn('pnpm', args, {\n cwd: root,\n env: { ...process.env, LOG_LEVEL: process.env.LOG_LEVEL ?? 'info' },\n stdio: ['ignore', 'pipe', 'pipe'],\n });\n let stdout = '';\n let stderr = '';\n const timer = setTimeout(() => child.kill('SIGTERM'), TOOL_TIMEOUT_MS);\n child.stdout.on('data', (chunk: Buffer) => {\n stdout += chunk.toString();\n });\n child.stderr.on('data', (chunk: Buffer) => {\n stderr += chunk.toString();\n });\n child.once('error', (error) => {\n clearTimeout(timer);\n reject(error);\n });\n child.once('exit', (code) => {\n clearTimeout(timer);\n if (code !== 0) {\n reject(new Error(stderr.trim() || `${STYLE_SYSTEM_PACKAGE} exited with code ${code ?? 'unknown'}`));\n return;\n }\n try {\n resolve(parseStyleSystemOutput(stdout));\n } catch (error) {\n reject(error);\n }\n });\n });\n}\n\nexport async function copyImageToHarnessTemp(\n imagePath: string,\n request: StoryRenderRequest,\n outputDirectory: string = fs.mkdtempSync(path.join(os.tmpdir(), 'agent-harness-style-system-')),\n): Promise<string> {\n const targetDirectory = path.join(outputDirectory, `${STYLE_SYSTEM_PACKAGE}-visuals`);\n await fs.promises.mkdir(targetDirectory, { recursive: true, mode: 0o700 });\n const baseName = path\n .basename(request.storyPath)\n .replace(/[^a-zA-Z0-9.-]/g, '-')\n .replace(/\\.stories\\./, '.');\n const targetPath = path.join(targetDirectory, `${Date.now()}-${baseName}.png`);\n await fs.promises.copyFile(imagePath, targetPath);\n await fs.promises.chmod(targetPath, 0o600);\n return targetPath;\n}\n\nexport function successMessage(\n request: StoryRenderRequest,\n result: StyleSystemResult,\n copiedImagePath: string,\n): string {\n const details = [\n `Image path: ${copiedImagePath}`,\n `Story file: ${result.storyFilePath ?? request.storyPath}`,\n `Component: ${result.componentTitle ?? request.componentName}`,\n `Story: ${result.renderedStory ?? request.storyName}`,\n result.colorScheme ? `Color scheme: ${result.colorScheme}` : undefined,\n result.dimensions ? `Dimensions: ${result.dimensions}` : undefined,\n ].filter((line): line is string => Boolean(line));\n\n return [\n 'Style-system visual generated for the story you just changed.',\n ...details,\n 'The image is saved and ready to inspect: call the read tool on the image path above to view it.',\n 'If the layout, spacing, color, overflow, or hierarchy looks wrong, adjust the UI and story, then let this hook render it again.',\n ].join('\\n');\n}\n\nexport function failureMessage(request: StoryRenderRequest, error: unknown): string {\n const message = error instanceof Error ? error.message : String(error);\n return [\n `Your file change was applied, but ${STYLE_SYSTEM_PACKAGE} could not generate a visual for it.`,\n `Story file: ${request.storyPath}`,\n `Command: pnpm exec ${STYLE_SYSTEM_PACKAGE} get-ui-component --component-name ${JSON.stringify(request.componentName)} --app-path ${JSON.stringify(request.projectPath)} --story-name ${JSON.stringify(request.storyName)}`,\n `Error: ${message}`,\n 'Do not treat the UI as visually verified. Run the command above to investigate.',\n ].join('\\n');\n}\n\n/* v8 ignore next 23 */\n// Pi's extension loader resolves this default export and rejects the module\n// without it (\"Extension does not export a valid factory function\"). This must\n// stay a default export; see the pi-extension override in vibe-lint.config.yaml.\nexport default function styleSystemVisuals(\n pi: ExtensionAPI,\n telemetry: HarnessTelemetry = createHarnessTelemetry(),\n): void {\n pi.on('tool_result', async (event, ctx) => {\n const changedPath = eventPath(event, ctx.cwd);\n if (!changedPath) return undefined;\n\n const harness = requireDoomConfigContext(ctx).harness;\n const root = harness.root ?? ctx.cwd;\n const request = inferStoryRenderRequest(changedPath, root);\n if (!request) return undefined;\n const statusKey = `style-system:${event.toolCallId}`;\n if (ctx.hasUI) ctx.ui.setStatus(statusKey, `Rendering ${request.componentName} visual...`);\n\n try {\n const result = await runStyleSystem(request, root);\n if (!result.imagePath) throw new Error(`${STYLE_SYSTEM_PACKAGE} did not return an imagePath`);\n const copiedImagePath = await copyImageToHarnessTemp(\n result.imagePath,\n request,\n harness.temporaryDirectory ?? fs.mkdtempSync(path.join(os.tmpdir(), 'agent-harness-style-system-')),\n );\n return {\n content: [...event.content, { type: 'text' as const, text: successMessage(request, result, copiedImagePath) }],\n };\n } catch (error) {\n void telemetry.recordWarning(HARNESS_EVENT.styleSystemRenderFailed, error, {\n 'style_system.component': request.componentName,\n });\n // The tool itself succeeded; only this hook failed. Surface the reason without\n // reporting the write as failed, which would invite a retry of a change that landed.\n return {\n content: [...event.content, { type: 'text' as const, text: failureMessage(request, error) }],\n };\n } finally {\n if (ctx.hasUI) ctx.ui.setStatus(statusKey, undefined);\n }\n });\n}\n"],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import { HarnessTelemetry } from "../../adapters/telemetry/logSinkTelemetry.cjs";
2
+ import { ExtensionAPI, ToolResultEvent } from "@earendil-works/pi-coding-agent";
3
+
4
+ //#region src/extensions/entries/styleSystem.d.ts
5
+ interface StoryRenderRequest {
6
+ storyPath: string;
7
+ projectPath: string;
8
+ componentName: string;
9
+ storyName: string;
10
+ }
11
+ interface StyleSystemResult {
12
+ imagePath?: string;
13
+ storyFilePath?: string;
14
+ componentTitle?: string;
15
+ renderedStory?: string;
16
+ colorScheme?: string;
17
+ viewport?: {
18
+ width: number;
19
+ height: number;
20
+ };
21
+ dimensions?: string;
22
+ }
23
+ declare function eventPath(event: ToolResultEvent, cwd: string): string | undefined;
24
+ declare function inferStoryRenderRequest(storyPath: string, root: string): StoryRenderRequest | undefined;
25
+ declare function parseStyleSystemOutput(stdout: string): StyleSystemResult;
26
+ declare function copyImageToHarnessTemp(imagePath: string, request: StoryRenderRequest, outputDirectory?: string): Promise<string>;
27
+ declare function successMessage(request: StoryRenderRequest, result: StyleSystemResult, copiedImagePath: string): string;
28
+ declare function failureMessage(request: StoryRenderRequest, error: unknown): string;
29
+ declare function styleSystemVisuals(pi: ExtensionAPI, telemetry?: HarnessTelemetry): void;
30
+ //#endregion
31
+ export { copyImageToHarnessTemp, eventPath, failureMessage, inferStoryRenderRequest, parseStyleSystemOutput, styleSystemVisuals, successMessage };
32
+ //# sourceMappingURL=styleSystem.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"styleSystem.d.cts","names":[],"sources":["../../../src/extensions/entries/styleSystem.ts"],"mappings":";;;;UAYU,kBAAA;EACR,SAAA;EACA,WAAA;EACA,aAAA;EACA,SAAA;AAAA;AAAA,UAGQ,iBAAA;EACR,SAAA;EACA,aAAA;EACA,cAAA;EACA,aAAA;EACA,WAAA;EACA,QAAA;IAAa,KAAA;IAAe,MAAA;EAAA;EAC5B,UAAA;AAAA;AAAA,iBAUc,SAAA,CAAU,KAAA,EAAO,eAAA,EAAiB,GAAA;AAAA,iBAkClC,uBAAA,CAAwB,SAAA,UAAmB,IAAA,WAAe,kBAAA;AAAA,iBAa1D,sBAAA,CAAuB,MAAA,WAAiB,iBAAA;AAAA,iBAsDlC,sBAAA,CACpB,SAAA,UACA,OAAA,EAAS,kBAAA,EACT,eAAA,YACC,OAAA;AAAA,iBAaa,cAAA,CACd,OAAA,EAAS,kBAAA,EACT,MAAA,EAAQ,iBAAA,EACR,eAAA;AAAA,iBAmBc,cAAA,CAAe,OAAA,EAAS,kBAAA,EAAoB,KAAA;AAAA,iBAepC,kBAAA,CACtB,EAAA,EAAI,YAAA,EACJ,SAAA,GAAW,gBAAA"}
@@ -0,0 +1,32 @@
1
+ import { HarnessTelemetry } from "../../adapters/telemetry/logSinkTelemetry.mjs";
2
+ import { ExtensionAPI, ToolResultEvent } from "@earendil-works/pi-coding-agent";
3
+
4
+ //#region src/extensions/entries/styleSystem.d.ts
5
+ interface StoryRenderRequest {
6
+ storyPath: string;
7
+ projectPath: string;
8
+ componentName: string;
9
+ storyName: string;
10
+ }
11
+ interface StyleSystemResult {
12
+ imagePath?: string;
13
+ storyFilePath?: string;
14
+ componentTitle?: string;
15
+ renderedStory?: string;
16
+ colorScheme?: string;
17
+ viewport?: {
18
+ width: number;
19
+ height: number;
20
+ };
21
+ dimensions?: string;
22
+ }
23
+ declare function eventPath(event: ToolResultEvent, cwd: string): string | undefined;
24
+ declare function inferStoryRenderRequest(storyPath: string, root: string): StoryRenderRequest | undefined;
25
+ declare function parseStyleSystemOutput(stdout: string): StyleSystemResult;
26
+ declare function copyImageToHarnessTemp(imagePath: string, request: StoryRenderRequest, outputDirectory?: string): Promise<string>;
27
+ declare function successMessage(request: StoryRenderRequest, result: StyleSystemResult, copiedImagePath: string): string;
28
+ declare function failureMessage(request: StoryRenderRequest, error: unknown): string;
29
+ declare function styleSystemVisuals(pi: ExtensionAPI, telemetry?: HarnessTelemetry): void;
30
+ //#endregion
31
+ export { copyImageToHarnessTemp, eventPath, failureMessage, inferStoryRenderRequest, parseStyleSystemOutput, styleSystemVisuals, successMessage };
32
+ //# sourceMappingURL=styleSystem.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"styleSystem.d.mts","names":[],"sources":["../../../src/extensions/entries/styleSystem.ts"],"mappings":";;;;UAYU,kBAAA;EACR,SAAA;EACA,WAAA;EACA,aAAA;EACA,SAAA;AAAA;AAAA,UAGQ,iBAAA;EACR,SAAA;EACA,aAAA;EACA,cAAA;EACA,aAAA;EACA,WAAA;EACA,QAAA;IAAa,KAAA;IAAe,MAAA;EAAA;EAC5B,UAAA;AAAA;AAAA,iBAUc,SAAA,CAAU,KAAA,EAAO,eAAA,EAAiB,GAAA;AAAA,iBAkClC,uBAAA,CAAwB,SAAA,UAAmB,IAAA,WAAe,kBAAA;AAAA,iBAa1D,sBAAA,CAAuB,MAAA,WAAiB,iBAAA;AAAA,iBAsDlC,sBAAA,CACpB,SAAA,UACA,OAAA,EAAS,kBAAA,EACT,eAAA,YACC,OAAA;AAAA,iBAaa,cAAA,CACd,OAAA,EAAS,kBAAA,EACT,MAAA,EAAQ,iBAAA,EACR,eAAA;AAAA,iBAmBc,cAAA,CAAe,OAAA,EAAS,kBAAA,EAAoB,KAAA;AAAA,iBAepC,kBAAA,CACtB,EAAA,EAAI,YAAA,EACJ,SAAA,GAAW,gBAAA"}
@@ -0,0 +1,4 @@
1
+ import{HARNESS_EVENT as e,createHarnessTelemetry as t}from"../../adapters/telemetry/logSinkTelemetry.mjs";import n from"node:path";import r from"node:fs";import i from"node:os";import{requireDoomConfigContext as a}from"@agimon-ai/doompi-config/piContext";import{spawn as o}from"node:child_process";const s=`style-system`,c=`${s}.config.yaml`,l=`Playground`,u=/\.stories\.(?:ts|tsx)$/,d=/export\s+const\s+([A-Z][A-Za-z0-9_]*)\b/g;function f(e,t){if(e.isError||e.toolName!==`write`&&e.toolName!==`edit`)return;let r=e.input;if(!(typeof r.path!=`string`||!u.test(r.path)))return n.resolve(t,r.path)}function p(e,t){let i=n.dirname(e),a=n.resolve(t);for(;i.startsWith(a);){if(r.existsSync(n.join(i,c)))return n.relative(a,i)||`.`;let e=n.dirname(i);if(e===i)break;i=e}}function m(e,t){return t.match(/title\s*:\s*['"]([^'"]+)['"]/)?.[1]?.trim()||n.basename(e).replace(/\.stories\.(?:ts|tsx)$/,``)}function h(e){if(/export\s+const\s+Playground\b/.test(e))return l;let t=d.exec(e)?.[1];return d.lastIndex=0,t??l}function g(e,t){if(!u.test(e)||!r.existsSync(e))return;let n=p(e,t);if(!n)return;let i=r.readFileSync(e,`utf8`);return{storyPath:e,projectPath:n,componentName:m(e,i),storyName:h(i)}}function _(e){let t=e.trim();if(!t)throw Error(`${s} returned no output`);return JSON.parse(t)}async function v(e,t){let n=[`exec`,s,`get-ui-component`,`--component-name`,e.componentName,`--app-path`,e.projectPath,`--story-name`,e.storyName];return new Promise((e,r)=>{let i=o(`pnpm`,n,{cwd:t,env:{...process.env,LOG_LEVEL:process.env.LOG_LEVEL??`info`},stdio:[`ignore`,`pipe`,`pipe`]}),a=``,c=``,l=setTimeout(()=>i.kill(`SIGTERM`),12e4);i.stdout.on(`data`,e=>{a+=e.toString()}),i.stderr.on(`data`,e=>{c+=e.toString()}),i.once(`error`,e=>{clearTimeout(l),r(e)}),i.once(`exit`,t=>{if(clearTimeout(l),t!==0){r(Error(c.trim()||`${s} exited with code ${t??`unknown`}`));return}try{e(_(a))}catch(e){r(e)}})})}async function y(e,t,a=r.mkdtempSync(n.join(i.tmpdir(),`agent-harness-style-system-`))){let o=n.join(a,`${s}-visuals`);await r.promises.mkdir(o,{recursive:!0,mode:448});let c=n.basename(t.storyPath).replace(/[^a-zA-Z0-9.-]/g,`-`).replace(/\.stories\./,`.`),l=n.join(o,`${Date.now()}-${c}.png`);return await r.promises.copyFile(e,l),await r.promises.chmod(l,384),l}function b(e,t,n){return[`Style-system visual generated for the story you just changed.`,...[`Image path: ${n}`,`Story file: ${t.storyFilePath??e.storyPath}`,`Component: ${t.componentTitle??e.componentName}`,`Story: ${t.renderedStory??e.storyName}`,t.colorScheme?`Color scheme: ${t.colorScheme}`:void 0,t.dimensions?`Dimensions: ${t.dimensions}`:void 0].filter(e=>!!e),`The image is saved and ready to inspect: call the read tool on the image path above to view it.`,`If the layout, spacing, color, overflow, or hierarchy looks wrong, adjust the UI and story, then let this hook render it again.`].join(`
2
+ `)}function x(e,t){let n=t instanceof Error?t.message:String(t);return[`Your file change was applied, but ${s} could not generate a visual for it.`,`Story file: ${e.storyPath}`,`Command: pnpm exec ${s} get-ui-component --component-name ${JSON.stringify(e.componentName)} --app-path ${JSON.stringify(e.projectPath)} --story-name ${JSON.stringify(e.storyName)}`,`Error: ${n}`,`Do not treat the UI as visually verified. Run the command above to investigate.`].join(`
3
+ `)}function S(o,c=t()){o.on(`tool_result`,async(t,o)=>{let l=f(t,o.cwd);if(!l)return;let u=a(o).harness,d=u.root??o.cwd,p=g(l,d);if(!p)return;let m=`style-system:${t.toolCallId}`;o.hasUI&&o.ui.setStatus(m,`Rendering ${p.componentName} visual...`);try{let e=await v(p,d);if(!e.imagePath)throw Error(`${s} did not return an imagePath`);let a=await y(e.imagePath,p,u.temporaryDirectory??r.mkdtempSync(n.join(i.tmpdir(),`agent-harness-style-system-`)));return{content:[...t.content,{type:`text`,text:b(p,e,a)}]}}catch(n){return c.recordWarning(e.styleSystemRenderFailed,n,{"style_system.component":p.componentName}),{content:[...t.content,{type:`text`,text:x(p,n)}]}}finally{o.hasUI&&o.ui.setStatus(m,void 0)}})}export{y as copyImageToHarnessTemp,S as default,f as eventPath,x as failureMessage,g as inferStoryRenderRequest,_ as parseStyleSystemOutput,b as successMessage};
4
+ //# sourceMappingURL=styleSystem.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"styleSystem.cjs","names":["path","fs","os","createHarnessTelemetry","HARNESS_EVENT"],"sources":["../../src/entries/styleSystem.ts"],"sourcesContent":["import { spawn } from 'node:child_process';\nimport fs from 'node:fs';\nimport os from 'node:os';\nimport path from 'node:path';\nimport { requireDoomConfigContext } from '@agimon-ai/doompi-config';\nimport type { ExtensionAPI, ToolResultEvent } from '@earendil-works/pi-coding-agent';\nimport { createHarnessTelemetry, HARNESS_EVENT, type HarnessTelemetry } from '../logSinkTelemetry.ts';\n\ninterface StoryRenderRequest {\n storyPath: string;\n projectPath: string;\n componentName: string;\n storyName: string;\n}\n\ninterface StyleSystemResult {\n imagePath?: string;\n storyFilePath?: string;\n componentTitle?: string;\n renderedStory?: string;\n colorScheme?: string;\n viewport?: { width: number; height: number };\n dimensions?: string;\n}\n\nconst STYLE_SYSTEM_PACKAGE = 'style-system';\nconst STYLE_SYSTEM_CONFIG_FILE = `${STYLE_SYSTEM_PACKAGE}.config.yaml`;\nconst DEFAULT_STORY_NAME = 'Playground';\nconst STORY_FILE_PATTERN = /\\.stories\\.(?:ts|tsx)$/;\nconst EXPORT_STORY_PATTERN = /export\\s+const\\s+([A-Z][A-Za-z0-9_]*)\\b/g;\nconst TOOL_TIMEOUT_MS = 120_000;\n\nexport function eventPath(event: ToolResultEvent, cwd: string): string | undefined {\n if (event.isError || (event.toolName !== 'write' && event.toolName !== 'edit')) return undefined;\n const input = event.input as { path?: unknown };\n if (typeof input.path !== 'string' || !STORY_FILE_PATTERN.test(input.path)) return undefined;\n return path.resolve(cwd, input.path);\n}\n\nfunction findStyleSystemProject(startFile: string, root: string): string | undefined {\n let directory = path.dirname(startFile);\n const resolvedRoot = path.resolve(root);\n while (directory.startsWith(resolvedRoot)) {\n if (fs.existsSync(path.join(directory, STYLE_SYSTEM_CONFIG_FILE))) {\n return path.relative(resolvedRoot, directory) || '.';\n }\n const parent = path.dirname(directory);\n if (parent === directory) break;\n directory = parent;\n }\n return undefined;\n}\n\nfunction inferComponentName(storyPath: string, content: string): string {\n const title = content.match(/title\\s*:\\s*['\"]([^'\"]+)['\"]/)?.[1]?.trim();\n if (title) return title;\n return path.basename(storyPath).replace(/\\.stories\\.(?:ts|tsx)$/, '');\n}\n\nfunction inferStoryName(content: string): string {\n if (/export\\s+const\\s+Playground\\b/.test(content)) return DEFAULT_STORY_NAME;\n const firstExportedStory = EXPORT_STORY_PATTERN.exec(content)?.[1];\n EXPORT_STORY_PATTERN.lastIndex = 0;\n return firstExportedStory ?? DEFAULT_STORY_NAME;\n}\n\nexport function inferStoryRenderRequest(storyPath: string, root: string): StoryRenderRequest | undefined {\n if (!STORY_FILE_PATTERN.test(storyPath) || !fs.existsSync(storyPath)) return undefined;\n const projectPath = findStyleSystemProject(storyPath, root);\n if (!projectPath) return undefined;\n const content = fs.readFileSync(storyPath, 'utf8');\n return {\n storyPath,\n projectPath,\n componentName: inferComponentName(storyPath, content),\n storyName: inferStoryName(content),\n };\n}\n\nexport function parseStyleSystemOutput(stdout: string): StyleSystemResult {\n const text = stdout.trim();\n if (!text) throw new Error(`${STYLE_SYSTEM_PACKAGE} returned no output`);\n return JSON.parse(text) as StyleSystemResult;\n}\n\n/* v8 ignore next 57 */\nasync function runStyleSystem(request: StoryRenderRequest, root: string): Promise<StyleSystemResult> {\n const args = [\n 'exec',\n STYLE_SYSTEM_PACKAGE,\n 'get-ui-component',\n '--component-name',\n request.componentName,\n '--app-path',\n request.projectPath,\n '--story-name',\n request.storyName,\n ];\n\n return new Promise((resolve, reject) => {\n const child = spawn('pnpm', args, {\n cwd: root,\n env: { ...process.env, LOG_LEVEL: process.env.LOG_LEVEL ?? 'info' },\n stdio: ['ignore', 'pipe', 'pipe'],\n });\n let stdout = '';\n let stderr = '';\n const timer = setTimeout(() => child.kill('SIGTERM'), TOOL_TIMEOUT_MS);\n child.stdout.on('data', (chunk: Buffer) => {\n stdout += chunk.toString();\n });\n child.stderr.on('data', (chunk: Buffer) => {\n stderr += chunk.toString();\n });\n child.once('error', (error) => {\n clearTimeout(timer);\n reject(error);\n });\n child.once('exit', (code) => {\n clearTimeout(timer);\n if (code !== 0) {\n reject(new Error(stderr.trim() || `${STYLE_SYSTEM_PACKAGE} exited with code ${code ?? 'unknown'}`));\n return;\n }\n try {\n resolve(parseStyleSystemOutput(stdout));\n } catch (error) {\n reject(error);\n }\n });\n });\n}\n\nexport async function copyImageToHarnessTemp(\n imagePath: string,\n request: StoryRenderRequest,\n outputDirectory: string = fs.mkdtempSync(path.join(os.tmpdir(), 'agent-harness-style-system-')),\n): Promise<string> {\n const targetDirectory = path.join(outputDirectory, `${STYLE_SYSTEM_PACKAGE}-visuals`);\n await fs.promises.mkdir(targetDirectory, { recursive: true, mode: 0o700 });\n const baseName = path\n .basename(request.storyPath)\n .replace(/[^a-zA-Z0-9.-]/g, '-')\n .replace(/\\.stories\\./, '.');\n const targetPath = path.join(targetDirectory, `${Date.now()}-${baseName}.png`);\n await fs.promises.copyFile(imagePath, targetPath);\n await fs.promises.chmod(targetPath, 0o600);\n return targetPath;\n}\n\nexport function successMessage(\n request: StoryRenderRequest,\n result: StyleSystemResult,\n copiedImagePath: string,\n): string {\n const details = [\n `Image path: ${copiedImagePath}`,\n `Story file: ${result.storyFilePath ?? request.storyPath}`,\n `Component: ${result.componentTitle ?? request.componentName}`,\n `Story: ${result.renderedStory ?? request.storyName}`,\n result.colorScheme ? `Color scheme: ${result.colorScheme}` : undefined,\n result.dimensions ? `Dimensions: ${result.dimensions}` : undefined,\n ].filter((line): line is string => Boolean(line));\n\n return [\n 'Style-system visual generated for the story you just changed.',\n ...details,\n 'The image is saved and ready to inspect: call the read tool on the image path above to view it.',\n 'If the layout, spacing, color, overflow, or hierarchy looks wrong, adjust the UI and story, then let this hook render it again.',\n ].join('\\n');\n}\n\nexport function failureMessage(request: StoryRenderRequest, error: unknown): string {\n const message = error instanceof Error ? error.message : String(error);\n return [\n `Your file change was applied, but ${STYLE_SYSTEM_PACKAGE} could not generate a visual for it.`,\n `Story file: ${request.storyPath}`,\n `Command: pnpm exec ${STYLE_SYSTEM_PACKAGE} get-ui-component --component-name ${JSON.stringify(request.componentName)} --app-path ${JSON.stringify(request.projectPath)} --story-name ${JSON.stringify(request.storyName)}`,\n `Error: ${message}`,\n 'Do not treat the UI as visually verified. Run the command above to investigate.',\n ].join('\\n');\n}\n\n/* v8 ignore next 23 */\n// Pi's extension loader resolves this default export and rejects the module\n// without it (\"Extension does not export a valid factory function\"). This must\n// stay a default export; see the pi-extension override in vibe-lint.config.yaml.\nexport default function styleSystemVisuals(\n pi: ExtensionAPI,\n telemetry: HarnessTelemetry = createHarnessTelemetry(),\n): void {\n pi.on('tool_result', async (event, ctx) => {\n const changedPath = eventPath(event, ctx.cwd);\n if (!changedPath) return undefined;\n\n const harness = requireDoomConfigContext(ctx).harness;\n const root = harness.root ?? ctx.cwd;\n const request = inferStoryRenderRequest(changedPath, root);\n if (!request) return undefined;\n const statusKey = `style-system:${event.toolCallId}`;\n if (ctx.hasUI) ctx.ui.setStatus(statusKey, `Rendering ${request.componentName} visual...`);\n\n try {\n const result = await runStyleSystem(request, root);\n if (!result.imagePath) throw new Error(`${STYLE_SYSTEM_PACKAGE} did not return an imagePath`);\n const copiedImagePath = await copyImageToHarnessTemp(\n result.imagePath,\n request,\n harness.temporaryDirectory ?? fs.mkdtempSync(path.join(os.tmpdir(), 'agent-harness-style-system-')),\n );\n return {\n content: [...event.content, { type: 'text' as const, text: successMessage(request, result, copiedImagePath) }],\n };\n } catch (error) {\n void telemetry.recordWarning(HARNESS_EVENT.styleSystemRenderFailed, error, {\n 'style_system.component': request.componentName,\n });\n // The tool itself succeeded; only this hook failed. Surface the reason without\n // reporting the write as failed, which would invite a retry of a change that landed.\n return {\n content: [...event.content, { type: 'text' as const, text: failureMessage(request, error) }],\n };\n } finally {\n if (ctx.hasUI) ctx.ui.setStatus(statusKey, undefined);\n }\n });\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"styleSystem.mjs","names":[],"sources":["../../../src/extensions/entries/styleSystem.ts"],"sourcesContent":["import { spawn } from 'node:child_process';\nimport fs from 'node:fs';\nimport os from 'node:os';\nimport path from 'node:path';\nimport { requireDoomConfigContext } from '@agimon-ai/doompi-config/piContext';\nimport type { ExtensionAPI, ToolResultEvent } from '@earendil-works/pi-coding-agent';\nimport {\n createHarnessTelemetry,\n HARNESS_EVENT,\n type HarnessTelemetry,\n} from '../../adapters/telemetry/logSinkTelemetry.ts';\n\ninterface StoryRenderRequest {\n storyPath: string;\n projectPath: string;\n componentName: string;\n storyName: string;\n}\n\ninterface StyleSystemResult {\n imagePath?: string;\n storyFilePath?: string;\n componentTitle?: string;\n renderedStory?: string;\n colorScheme?: string;\n viewport?: { width: number; height: number };\n dimensions?: string;\n}\n\nconst STYLE_SYSTEM_PACKAGE = 'style-system';\nconst STYLE_SYSTEM_CONFIG_FILE = `${STYLE_SYSTEM_PACKAGE}.config.yaml`;\nconst DEFAULT_STORY_NAME = 'Playground';\nconst STORY_FILE_PATTERN = /\\.stories\\.(?:ts|tsx)$/;\nconst EXPORT_STORY_PATTERN = /export\\s+const\\s+([A-Z][A-Za-z0-9_]*)\\b/g;\nconst TOOL_TIMEOUT_MS = 120_000;\n\nexport function eventPath(event: ToolResultEvent, cwd: string): string | undefined {\n if (event.isError || (event.toolName !== 'write' && event.toolName !== 'edit')) return undefined;\n const input = event.input as { path?: unknown };\n if (typeof input.path !== 'string' || !STORY_FILE_PATTERN.test(input.path)) return undefined;\n return path.resolve(cwd, input.path);\n}\n\nfunction findStyleSystemProject(startFile: string, root: string): string | undefined {\n let directory = path.dirname(startFile);\n const resolvedRoot = path.resolve(root);\n while (directory.startsWith(resolvedRoot)) {\n if (fs.existsSync(path.join(directory, STYLE_SYSTEM_CONFIG_FILE))) {\n return path.relative(resolvedRoot, directory) || '.';\n }\n const parent = path.dirname(directory);\n if (parent === directory) break;\n directory = parent;\n }\n return undefined;\n}\n\nfunction inferComponentName(storyPath: string, content: string): string {\n const title = content.match(/title\\s*:\\s*['\"]([^'\"]+)['\"]/)?.[1]?.trim();\n if (title) return title;\n return path.basename(storyPath).replace(/\\.stories\\.(?:ts|tsx)$/, '');\n}\n\nfunction inferStoryName(content: string): string {\n if (/export\\s+const\\s+Playground\\b/.test(content)) return DEFAULT_STORY_NAME;\n const firstExportedStory = EXPORT_STORY_PATTERN.exec(content)?.[1];\n EXPORT_STORY_PATTERN.lastIndex = 0;\n return firstExportedStory ?? DEFAULT_STORY_NAME;\n}\n\nexport function inferStoryRenderRequest(storyPath: string, root: string): StoryRenderRequest | undefined {\n if (!STORY_FILE_PATTERN.test(storyPath) || !fs.existsSync(storyPath)) return undefined;\n const projectPath = findStyleSystemProject(storyPath, root);\n if (!projectPath) return undefined;\n const content = fs.readFileSync(storyPath, 'utf8');\n return {\n storyPath,\n projectPath,\n componentName: inferComponentName(storyPath, content),\n storyName: inferStoryName(content),\n };\n}\n\nexport function parseStyleSystemOutput(stdout: string): StyleSystemResult {\n const text = stdout.trim();\n if (!text) throw new Error(`${STYLE_SYSTEM_PACKAGE} returned no output`);\n return JSON.parse(text) as StyleSystemResult;\n}\n\n/* v8 ignore next 57 */\nasync function runStyleSystem(request: StoryRenderRequest, root: string): Promise<StyleSystemResult> {\n const args = [\n 'exec',\n STYLE_SYSTEM_PACKAGE,\n 'get-ui-component',\n '--component-name',\n request.componentName,\n '--app-path',\n request.projectPath,\n '--story-name',\n request.storyName,\n ];\n\n return new Promise((resolve, reject) => {\n const child = spawn('pnpm', args, {\n cwd: root,\n env: { ...process.env, LOG_LEVEL: process.env.LOG_LEVEL ?? 'info' },\n stdio: ['ignore', 'pipe', 'pipe'],\n });\n let stdout = '';\n let stderr = '';\n const timer = setTimeout(() => child.kill('SIGTERM'), TOOL_TIMEOUT_MS);\n child.stdout.on('data', (chunk: Buffer) => {\n stdout += chunk.toString();\n });\n child.stderr.on('data', (chunk: Buffer) => {\n stderr += chunk.toString();\n });\n child.once('error', (error) => {\n clearTimeout(timer);\n reject(error);\n });\n child.once('exit', (code) => {\n clearTimeout(timer);\n if (code !== 0) {\n reject(new Error(stderr.trim() || `${STYLE_SYSTEM_PACKAGE} exited with code ${code ?? 'unknown'}`));\n return;\n }\n try {\n resolve(parseStyleSystemOutput(stdout));\n } catch (error) {\n reject(error);\n }\n });\n });\n}\n\nexport async function copyImageToHarnessTemp(\n imagePath: string,\n request: StoryRenderRequest,\n outputDirectory: string = fs.mkdtempSync(path.join(os.tmpdir(), 'agent-harness-style-system-')),\n): Promise<string> {\n const targetDirectory = path.join(outputDirectory, `${STYLE_SYSTEM_PACKAGE}-visuals`);\n await fs.promises.mkdir(targetDirectory, { recursive: true, mode: 0o700 });\n const baseName = path\n .basename(request.storyPath)\n .replace(/[^a-zA-Z0-9.-]/g, '-')\n .replace(/\\.stories\\./, '.');\n const targetPath = path.join(targetDirectory, `${Date.now()}-${baseName}.png`);\n await fs.promises.copyFile(imagePath, targetPath);\n await fs.promises.chmod(targetPath, 0o600);\n return targetPath;\n}\n\nexport function successMessage(\n request: StoryRenderRequest,\n result: StyleSystemResult,\n copiedImagePath: string,\n): string {\n const details = [\n `Image path: ${copiedImagePath}`,\n `Story file: ${result.storyFilePath ?? request.storyPath}`,\n `Component: ${result.componentTitle ?? request.componentName}`,\n `Story: ${result.renderedStory ?? request.storyName}`,\n result.colorScheme ? `Color scheme: ${result.colorScheme}` : undefined,\n result.dimensions ? `Dimensions: ${result.dimensions}` : undefined,\n ].filter((line): line is string => Boolean(line));\n\n return [\n 'Style-system visual generated for the story you just changed.',\n ...details,\n 'The image is saved and ready to inspect: call the read tool on the image path above to view it.',\n 'If the layout, spacing, color, overflow, or hierarchy looks wrong, adjust the UI and story, then let this hook render it again.',\n ].join('\\n');\n}\n\nexport function failureMessage(request: StoryRenderRequest, error: unknown): string {\n const message = error instanceof Error ? error.message : String(error);\n return [\n `Your file change was applied, but ${STYLE_SYSTEM_PACKAGE} could not generate a visual for it.`,\n `Story file: ${request.storyPath}`,\n `Command: pnpm exec ${STYLE_SYSTEM_PACKAGE} get-ui-component --component-name ${JSON.stringify(request.componentName)} --app-path ${JSON.stringify(request.projectPath)} --story-name ${JSON.stringify(request.storyName)}`,\n `Error: ${message}`,\n 'Do not treat the UI as visually verified. Run the command above to investigate.',\n ].join('\\n');\n}\n\n/* v8 ignore next 23 */\n// Pi's extension loader resolves this default export and rejects the module\n// without it (\"Extension does not export a valid factory function\"). This must\n// stay a default export; see the pi-extension override in vibe-lint.config.yaml.\nexport default function styleSystemVisuals(\n pi: ExtensionAPI,\n telemetry: HarnessTelemetry = createHarnessTelemetry(),\n): void {\n pi.on('tool_result', async (event, ctx) => {\n const changedPath = eventPath(event, ctx.cwd);\n if (!changedPath) return undefined;\n\n const harness = requireDoomConfigContext(ctx).harness;\n const root = harness.root ?? ctx.cwd;\n const request = inferStoryRenderRequest(changedPath, root);\n if (!request) return undefined;\n const statusKey = `style-system:${event.toolCallId}`;\n if (ctx.hasUI) ctx.ui.setStatus(statusKey, `Rendering ${request.componentName} visual...`);\n\n try {\n const result = await runStyleSystem(request, root);\n if (!result.imagePath) throw new Error(`${STYLE_SYSTEM_PACKAGE} did not return an imagePath`);\n const copiedImagePath = await copyImageToHarnessTemp(\n result.imagePath,\n request,\n harness.temporaryDirectory ?? fs.mkdtempSync(path.join(os.tmpdir(), 'agent-harness-style-system-')),\n );\n return {\n content: [...event.content, { type: 'text' as const, text: successMessage(request, result, copiedImagePath) }],\n };\n } catch (error) {\n void telemetry.recordWarning(HARNESS_EVENT.styleSystemRenderFailed, error, {\n 'style_system.component': request.componentName,\n });\n // The tool itself succeeded; only this hook failed. Surface the reason without\n // reporting the write as failed, which would invite a retry of a change that landed.\n return {\n content: [...event.content, { type: 'text' as const, text: failureMessage(request, error) }],\n };\n } finally {\n if (ctx.hasUI) ctx.ui.setStatus(statusKey, undefined);\n }\n });\n}\n"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ const e=require(`../adapters/packageBootstrap.cjs`);module.exports=e;
@@ -0,0 +1,2 @@
1
+ import { packageBootstrap } from "../adapters/packageBootstrap.cjs";
2
+ export = packageBootstrap;
@@ -0,0 +1,2 @@
1
+ import { packageBootstrap } from "../adapters/packageBootstrap.mjs";
2
+ export { packageBootstrap as default };
@@ -0,0 +1 @@
1
+ import e from"../adapters/packageBootstrap.mjs";export{e as default};
@@ -0,0 +1,2 @@
1
+ const e=Symbol.for(`@agimon-ai/doompi.domain-switch-handoff.v1`),t=/^[A-Za-z0-9@][A-Za-z0-9@/._:-]*$/u;function n(){let t=globalThis;return t[e]??={records:new Map}}function r(e){return Error(`Invalid domain switch handoff ${e}.`)}function i(e,t,n,i){let o=e.trim();if(!o||o.length>n||a(o)||i&&!i.test(o))throw r(t);return o}function a(e){for(let t of e){let e=t.codePointAt(0);if(e!==void 0&&(e<=31||e===127))return!0}return!1}function o(e){return i(e,`session id`,256)}function s(e){return i(e,`host generation`,256)}function c(e){return i(e,`operation id`,128,t)}function l(e){return i(e,`reload handoff token`,256,t)}function u(e){return i(e,`token`,256,t)}function d(e){if(e.length>32)throw Error(`A maximum of 32 domains may be selected.`);let n=[],r=new Set;for(let a of e){let e=i(a,`domain name`,128,t);r.has(e)||(r.add(e),n.push(e))}return n}function f(e=Date.now()){for(let[t,r]of n().records)r.expiresAt<=e&&n().records.delete(t)}function p(e,t){return e.sessionId===o(t.sessionId)?t.hostGeneration===void 0||e.hostGeneration===s(t.hostGeneration):!1}function m(e){return{...e,domains:[...e.domains]}}function h(e,t){f();let r=o(t.sessionId),i=s(t.hostGeneration),a=c(t.operationId),u=d(t.domains),p=l(t.reloadHandoffToken),h=Date.now(),g={token:`doom-domain-switch:${crypto.randomUUID()}`,sessionId:r,hostGeneration:i,operationId:a,domains:u,reloadHandoffToken:p,createdAt:h,expiresAt:h+3e4,ownerGeneration:e};return n().records.set(g.token,g),m(g)}function g(e,t){f();let r=u(t),i=n().records.get(r);if(!(!i||!p(i,e))&&(n().records.delete(r),!(i.expiresAt<=Date.now())))return m(i)}function _(e,t){f();let r=u(t),i=n().records.get(r);return!i||!p(i,e)?!1:n().records.delete(r)}function v(e,t){f();let r=o(t),i=0;for(let[t,a]of n().records)a.ownerGeneration!==e||a.sessionId!==r||(n().records.delete(t),i+=1);return i}function y(e){let t=0;for(let[r,i]of n().records)i.ownerGeneration===e&&(n().records.delete(r),t+=1);return t}function b(){let e=crypto.randomUUID(),t=!1;return{ownerGeneration:e,issue(n){if(t)throw Error(`Domain switch handoff store is disposed.`);return h(e,n)},consume(e,n){if(!t)return g(n,e)},discard(e,n){return t?!1:_(n,e)},clearSession(n){return t?0:v(e,n)},dispose(){return t?0:(t=!0,y(e))}}}b(),exports.createDomainSwitchHandoffStore=b;
2
+ //# sourceMappingURL=domainSwitchHandoff.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domainSwitchHandoff.cjs","names":[],"sources":["../../../src/extensions/services/domainSwitchHandoff.ts"],"sourcesContent":["const DOMAIN_SWITCH_HANDOFF_REGISTRY_KEY = '@agimon-ai/doompi.domain-switch-handoff.v1';\nconst DOMAIN_SWITCH_HANDOFF_SYMBOL = Symbol.for(DOMAIN_SWITCH_HANDOFF_REGISTRY_KEY);\nconst DOMAIN_SWITCH_TOKEN_PREFIX = 'doom-domain-switch:';\nconst SAFE_NAME = /^[A-Za-z0-9@][A-Za-z0-9@/._:-]*$/u;\n\nexport const DOMAIN_SWITCH_HANDOFF_TTL_MS = 30_000;\nexport const DOMAIN_SWITCH_HANDOFF_MAX_DOMAINS = 32;\nexport const DOMAIN_SWITCH_HANDOFF_MAX_IDENTIFIER_LENGTH = 256;\nexport const DOMAIN_SWITCH_HANDOFF_MAX_OPERATION_LENGTH = 128;\n\nexport interface DomainSwitchHandoffIdentity {\n readonly sessionId: string;\n readonly hostGeneration?: string;\n}\n\nexport interface DomainSwitchHandoffRequest extends DomainSwitchHandoffIdentity {\n readonly hostGeneration: string;\n readonly operationId: string;\n readonly domains: readonly string[];\n readonly reloadHandoffToken: string;\n}\n\nexport interface DomainSwitchHandoff extends DomainSwitchHandoffRequest {\n readonly token: string;\n readonly createdAt: number;\n readonly expiresAt: number;\n}\n\ninterface StoredDomainSwitchHandoff extends DomainSwitchHandoff {\n readonly ownerGeneration: string;\n}\n\ninterface HandoffRegistry {\n readonly records: Map<string, StoredDomainSwitchHandoff>;\n}\n\nexport interface DomainSwitchHandoffStore {\n readonly ownerGeneration: string;\n issue(request: DomainSwitchHandoffRequest): DomainSwitchHandoff;\n consume(token: string, identity: DomainSwitchHandoffIdentity): DomainSwitchHandoff | undefined;\n discard(token: string, identity: DomainSwitchHandoffIdentity): boolean;\n clearSession(sessionId: string): number;\n dispose(): number;\n}\n\ntype HandoffGlobal = typeof globalThis & { [DOMAIN_SWITCH_HANDOFF_SYMBOL]?: HandoffRegistry };\n\nfunction registry(): HandoffRegistry {\n const root = globalThis as HandoffGlobal;\n return (root[DOMAIN_SWITCH_HANDOFF_SYMBOL] ??= { records: new Map() });\n}\n\nfunction invalid(label: string): Error {\n return new Error(`Invalid domain switch handoff ${label}.`);\n}\n\nfunction normalized(value: string, label: string, maximum: number, pattern?: RegExp): string {\n const text = value.trim();\n if (!text || text.length > maximum || hasControlCharacter(text) || (pattern && !pattern.test(text))) {\n throw invalid(label);\n }\n return text;\n}\n\nfunction hasControlCharacter(value: string): boolean {\n for (const character of value) {\n const code = character.codePointAt(0);\n if (code !== undefined && (code <= 0x1f || code === 0x7f)) return true;\n }\n return false;\n}\n\nfunction sessionId(value: string): string {\n return normalized(value, 'session id', DOMAIN_SWITCH_HANDOFF_MAX_IDENTIFIER_LENGTH);\n}\n\nfunction hostGeneration(value: string): string {\n return normalized(value, 'host generation', DOMAIN_SWITCH_HANDOFF_MAX_IDENTIFIER_LENGTH);\n}\n\nfunction operationId(value: string): string {\n return normalized(value, 'operation id', DOMAIN_SWITCH_HANDOFF_MAX_OPERATION_LENGTH, SAFE_NAME);\n}\n\nfunction reloadToken(value: string): string {\n return normalized(value, 'reload handoff token', DOMAIN_SWITCH_HANDOFF_MAX_IDENTIFIER_LENGTH, SAFE_NAME);\n}\n\nfunction token(value: string): string {\n return normalized(value, 'token', DOMAIN_SWITCH_HANDOFF_MAX_IDENTIFIER_LENGTH, SAFE_NAME);\n}\n\nfunction domains(values: readonly string[]): string[] {\n if (values.length > DOMAIN_SWITCH_HANDOFF_MAX_DOMAINS) {\n throw new Error(`A maximum of ${DOMAIN_SWITCH_HANDOFF_MAX_DOMAINS} domains may be selected.`);\n }\n const result: string[] = [];\n const seen = new Set<string>();\n for (const value of values) {\n const name = normalized(value, 'domain name', DOMAIN_SWITCH_HANDOFF_MAX_OPERATION_LENGTH, SAFE_NAME);\n if (seen.has(name)) continue;\n seen.add(name);\n result.push(name);\n }\n return result;\n}\n\nfunction prune(now = Date.now()): void {\n for (const [key, record] of registry().records) {\n if (record.expiresAt <= now) registry().records.delete(key);\n }\n}\n\nfunction identityMatches(record: DomainSwitchHandoff, identity: DomainSwitchHandoffIdentity): boolean {\n if (record.sessionId !== sessionId(identity.sessionId)) return false;\n return identity.hostGeneration === undefined || record.hostGeneration === hostGeneration(identity.hostGeneration);\n}\n\nfunction copy(record: DomainSwitchHandoff): DomainSwitchHandoff {\n return { ...record, domains: [...record.domains] };\n}\n\nfunction issue(ownerGeneration: string, request: DomainSwitchHandoffRequest): DomainSwitchHandoff {\n prune();\n const normalizedSessionId = sessionId(request.sessionId);\n const normalizedHostGeneration = hostGeneration(request.hostGeneration);\n const normalizedOperationId = operationId(request.operationId);\n const normalizedDomains = domains(request.domains);\n const normalizedReloadToken = reloadToken(request.reloadHandoffToken);\n const createdAt = Date.now();\n const record: StoredDomainSwitchHandoff = {\n token: `${DOMAIN_SWITCH_TOKEN_PREFIX}${crypto.randomUUID()}`,\n sessionId: normalizedSessionId,\n hostGeneration: normalizedHostGeneration,\n operationId: normalizedOperationId,\n domains: normalizedDomains,\n reloadHandoffToken: normalizedReloadToken,\n createdAt,\n expiresAt: createdAt + DOMAIN_SWITCH_HANDOFF_TTL_MS,\n ownerGeneration,\n };\n registry().records.set(record.token, record);\n return copy(record);\n}\n\nfunction consume(identity: DomainSwitchHandoffIdentity, handoffToken: string): DomainSwitchHandoff | undefined {\n prune();\n const normalizedToken = token(handoffToken);\n const record = registry().records.get(normalizedToken);\n if (!record || !identityMatches(record, identity)) return undefined;\n registry().records.delete(normalizedToken);\n if (record.expiresAt <= Date.now()) return undefined;\n return copy(record);\n}\n\nfunction discard(identity: DomainSwitchHandoffIdentity, handoffToken: string): boolean {\n prune();\n const normalizedToken = token(handoffToken);\n const record = registry().records.get(normalizedToken);\n if (!record || !identityMatches(record, identity)) return false;\n return registry().records.delete(normalizedToken);\n}\n\nfunction clearOwnedSession(ownerGeneration: string, requestedSessionId: string): number {\n prune();\n const normalizedSessionId = sessionId(requestedSessionId);\n let removed = 0;\n for (const [key, record] of registry().records) {\n if (record.ownerGeneration !== ownerGeneration || record.sessionId !== normalizedSessionId) continue;\n registry().records.delete(key);\n removed += 1;\n }\n return removed;\n}\n\nfunction disposeOwner(ownerGeneration: string): number {\n let removed = 0;\n for (const [key, record] of registry().records) {\n if (record.ownerGeneration !== ownerGeneration) continue;\n registry().records.delete(key);\n removed += 1;\n }\n return removed;\n}\n\nexport function createDomainSwitchHandoffStore(): DomainSwitchHandoffStore {\n const ownerGeneration = crypto.randomUUID();\n let disposed = false;\n return {\n ownerGeneration,\n issue(request) {\n if (disposed) throw new Error('Domain switch handoff store is disposed.');\n return issue(ownerGeneration, request);\n },\n consume(handoffToken, identity) {\n if (disposed) return undefined;\n return consume(identity, handoffToken);\n },\n discard(handoffToken, identity) {\n if (disposed) return false;\n return discard(identity, handoffToken);\n },\n clearSession(requestedSessionId) {\n if (disposed) return 0;\n return clearOwnedSession(ownerGeneration, requestedSessionId);\n },\n dispose() {\n if (disposed) return 0;\n disposed = true;\n return disposeOwner(ownerGeneration);\n },\n };\n}\n\nconst defaultStore = createDomainSwitchHandoffStore();\n\nexport function prepareDomainSwitchHandoff(request: DomainSwitchHandoffRequest): DomainSwitchHandoff {\n return defaultStore.issue(request);\n}\n\nexport const createDomainSwitchHandoff = prepareDomainSwitchHandoff;\n\nexport function consumeDomainSwitchHandoff(\n handoffToken: string,\n identity: DomainSwitchHandoffIdentity,\n): DomainSwitchHandoff | undefined {\n return defaultStore.consume(handoffToken, identity);\n}\n\nexport const resolveDomainSwitchHandoff = consumeDomainSwitchHandoff;\n\nexport function discardDomainSwitchHandoff(handoffToken: string, identity: DomainSwitchHandoffIdentity): boolean {\n return defaultStore.discard(handoffToken, identity);\n}\n\nexport function clearDomainSwitchHandoffs(sessionIdValue: string): number {\n return defaultStore.clearSession(sessionIdValue);\n}\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ const e=Symbol.for(`@agimon-ai/doompi.domain-switch-handoff.v1`),t=/^[A-Za-z0-9@][A-Za-z0-9@/._:-]*$/u;function n(){let t=globalThis;return t[e]??={records:new Map}}function r(e){return Error(`Invalid domain switch handoff ${e}.`)}function i(e,t,n,i){let o=e.trim();if(!o||o.length>n||a(o)||i&&!i.test(o))throw r(t);return o}function a(e){for(let t of e){let e=t.codePointAt(0);if(e!==void 0&&(e<=31||e===127))return!0}return!1}function o(e){return i(e,`session id`,256)}function s(e){return i(e,`host generation`,256)}function c(e){return i(e,`operation id`,128,t)}function l(e){return i(e,`reload handoff token`,256,t)}function u(e){return i(e,`token`,256,t)}function d(e){if(e.length>32)throw Error(`A maximum of 32 domains may be selected.`);let n=[],r=new Set;for(let a of e){let e=i(a,`domain name`,128,t);r.has(e)||(r.add(e),n.push(e))}return n}function f(e=Date.now()){for(let[t,r]of n().records)r.expiresAt<=e&&n().records.delete(t)}function p(e,t){return e.sessionId===o(t.sessionId)?t.hostGeneration===void 0||e.hostGeneration===s(t.hostGeneration):!1}function m(e){return{...e,domains:[...e.domains]}}function h(e,t){f();let r=o(t.sessionId),i=s(t.hostGeneration),a=c(t.operationId),u=d(t.domains),p=l(t.reloadHandoffToken),h=Date.now(),g={token:`doom-domain-switch:${crypto.randomUUID()}`,sessionId:r,hostGeneration:i,operationId:a,domains:u,reloadHandoffToken:p,createdAt:h,expiresAt:h+3e4,ownerGeneration:e};return n().records.set(g.token,g),m(g)}function g(e,t){f();let r=u(t),i=n().records.get(r);if(!(!i||!p(i,e))&&(n().records.delete(r),!(i.expiresAt<=Date.now())))return m(i)}function _(e,t){f();let r=u(t),i=n().records.get(r);return!i||!p(i,e)?!1:n().records.delete(r)}function v(e,t){f();let r=o(t),i=0;for(let[t,a]of n().records)a.ownerGeneration!==e||a.sessionId!==r||(n().records.delete(t),i+=1);return i}function y(e){let t=0;for(let[r,i]of n().records)i.ownerGeneration===e&&(n().records.delete(r),t+=1);return t}function b(){let e=crypto.randomUUID(),t=!1;return{ownerGeneration:e,issue(n){if(t)throw Error(`Domain switch handoff store is disposed.`);return h(e,n)},consume(e,n){if(!t)return g(n,e)},discard(e,n){return t?!1:_(n,e)},clearSession(n){return t?0:v(e,n)},dispose(){return t?0:(t=!0,y(e))}}}b();export{b as createDomainSwitchHandoffStore};
2
+ //# sourceMappingURL=domainSwitchHandoff.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domainSwitchHandoff.mjs","names":[],"sources":["../../../src/extensions/services/domainSwitchHandoff.ts"],"sourcesContent":["const DOMAIN_SWITCH_HANDOFF_REGISTRY_KEY = '@agimon-ai/doompi.domain-switch-handoff.v1';\nconst DOMAIN_SWITCH_HANDOFF_SYMBOL = Symbol.for(DOMAIN_SWITCH_HANDOFF_REGISTRY_KEY);\nconst DOMAIN_SWITCH_TOKEN_PREFIX = 'doom-domain-switch:';\nconst SAFE_NAME = /^[A-Za-z0-9@][A-Za-z0-9@/._:-]*$/u;\n\nexport const DOMAIN_SWITCH_HANDOFF_TTL_MS = 30_000;\nexport const DOMAIN_SWITCH_HANDOFF_MAX_DOMAINS = 32;\nexport const DOMAIN_SWITCH_HANDOFF_MAX_IDENTIFIER_LENGTH = 256;\nexport const DOMAIN_SWITCH_HANDOFF_MAX_OPERATION_LENGTH = 128;\n\nexport interface DomainSwitchHandoffIdentity {\n readonly sessionId: string;\n readonly hostGeneration?: string;\n}\n\nexport interface DomainSwitchHandoffRequest extends DomainSwitchHandoffIdentity {\n readonly hostGeneration: string;\n readonly operationId: string;\n readonly domains: readonly string[];\n readonly reloadHandoffToken: string;\n}\n\nexport interface DomainSwitchHandoff extends DomainSwitchHandoffRequest {\n readonly token: string;\n readonly createdAt: number;\n readonly expiresAt: number;\n}\n\ninterface StoredDomainSwitchHandoff extends DomainSwitchHandoff {\n readonly ownerGeneration: string;\n}\n\ninterface HandoffRegistry {\n readonly records: Map<string, StoredDomainSwitchHandoff>;\n}\n\nexport interface DomainSwitchHandoffStore {\n readonly ownerGeneration: string;\n issue(request: DomainSwitchHandoffRequest): DomainSwitchHandoff;\n consume(token: string, identity: DomainSwitchHandoffIdentity): DomainSwitchHandoff | undefined;\n discard(token: string, identity: DomainSwitchHandoffIdentity): boolean;\n clearSession(sessionId: string): number;\n dispose(): number;\n}\n\ntype HandoffGlobal = typeof globalThis & { [DOMAIN_SWITCH_HANDOFF_SYMBOL]?: HandoffRegistry };\n\nfunction registry(): HandoffRegistry {\n const root = globalThis as HandoffGlobal;\n return (root[DOMAIN_SWITCH_HANDOFF_SYMBOL] ??= { records: new Map() });\n}\n\nfunction invalid(label: string): Error {\n return new Error(`Invalid domain switch handoff ${label}.`);\n}\n\nfunction normalized(value: string, label: string, maximum: number, pattern?: RegExp): string {\n const text = value.trim();\n if (!text || text.length > maximum || hasControlCharacter(text) || (pattern && !pattern.test(text))) {\n throw invalid(label);\n }\n return text;\n}\n\nfunction hasControlCharacter(value: string): boolean {\n for (const character of value) {\n const code = character.codePointAt(0);\n if (code !== undefined && (code <= 0x1f || code === 0x7f)) return true;\n }\n return false;\n}\n\nfunction sessionId(value: string): string {\n return normalized(value, 'session id', DOMAIN_SWITCH_HANDOFF_MAX_IDENTIFIER_LENGTH);\n}\n\nfunction hostGeneration(value: string): string {\n return normalized(value, 'host generation', DOMAIN_SWITCH_HANDOFF_MAX_IDENTIFIER_LENGTH);\n}\n\nfunction operationId(value: string): string {\n return normalized(value, 'operation id', DOMAIN_SWITCH_HANDOFF_MAX_OPERATION_LENGTH, SAFE_NAME);\n}\n\nfunction reloadToken(value: string): string {\n return normalized(value, 'reload handoff token', DOMAIN_SWITCH_HANDOFF_MAX_IDENTIFIER_LENGTH, SAFE_NAME);\n}\n\nfunction token(value: string): string {\n return normalized(value, 'token', DOMAIN_SWITCH_HANDOFF_MAX_IDENTIFIER_LENGTH, SAFE_NAME);\n}\n\nfunction domains(values: readonly string[]): string[] {\n if (values.length > DOMAIN_SWITCH_HANDOFF_MAX_DOMAINS) {\n throw new Error(`A maximum of ${DOMAIN_SWITCH_HANDOFF_MAX_DOMAINS} domains may be selected.`);\n }\n const result: string[] = [];\n const seen = new Set<string>();\n for (const value of values) {\n const name = normalized(value, 'domain name', DOMAIN_SWITCH_HANDOFF_MAX_OPERATION_LENGTH, SAFE_NAME);\n if (seen.has(name)) continue;\n seen.add(name);\n result.push(name);\n }\n return result;\n}\n\nfunction prune(now = Date.now()): void {\n for (const [key, record] of registry().records) {\n if (record.expiresAt <= now) registry().records.delete(key);\n }\n}\n\nfunction identityMatches(record: DomainSwitchHandoff, identity: DomainSwitchHandoffIdentity): boolean {\n if (record.sessionId !== sessionId(identity.sessionId)) return false;\n return identity.hostGeneration === undefined || record.hostGeneration === hostGeneration(identity.hostGeneration);\n}\n\nfunction copy(record: DomainSwitchHandoff): DomainSwitchHandoff {\n return { ...record, domains: [...record.domains] };\n}\n\nfunction issue(ownerGeneration: string, request: DomainSwitchHandoffRequest): DomainSwitchHandoff {\n prune();\n const normalizedSessionId = sessionId(request.sessionId);\n const normalizedHostGeneration = hostGeneration(request.hostGeneration);\n const normalizedOperationId = operationId(request.operationId);\n const normalizedDomains = domains(request.domains);\n const normalizedReloadToken = reloadToken(request.reloadHandoffToken);\n const createdAt = Date.now();\n const record: StoredDomainSwitchHandoff = {\n token: `${DOMAIN_SWITCH_TOKEN_PREFIX}${crypto.randomUUID()}`,\n sessionId: normalizedSessionId,\n hostGeneration: normalizedHostGeneration,\n operationId: normalizedOperationId,\n domains: normalizedDomains,\n reloadHandoffToken: normalizedReloadToken,\n createdAt,\n expiresAt: createdAt + DOMAIN_SWITCH_HANDOFF_TTL_MS,\n ownerGeneration,\n };\n registry().records.set(record.token, record);\n return copy(record);\n}\n\nfunction consume(identity: DomainSwitchHandoffIdentity, handoffToken: string): DomainSwitchHandoff | undefined {\n prune();\n const normalizedToken = token(handoffToken);\n const record = registry().records.get(normalizedToken);\n if (!record || !identityMatches(record, identity)) return undefined;\n registry().records.delete(normalizedToken);\n if (record.expiresAt <= Date.now()) return undefined;\n return copy(record);\n}\n\nfunction discard(identity: DomainSwitchHandoffIdentity, handoffToken: string): boolean {\n prune();\n const normalizedToken = token(handoffToken);\n const record = registry().records.get(normalizedToken);\n if (!record || !identityMatches(record, identity)) return false;\n return registry().records.delete(normalizedToken);\n}\n\nfunction clearOwnedSession(ownerGeneration: string, requestedSessionId: string): number {\n prune();\n const normalizedSessionId = sessionId(requestedSessionId);\n let removed = 0;\n for (const [key, record] of registry().records) {\n if (record.ownerGeneration !== ownerGeneration || record.sessionId !== normalizedSessionId) continue;\n registry().records.delete(key);\n removed += 1;\n }\n return removed;\n}\n\nfunction disposeOwner(ownerGeneration: string): number {\n let removed = 0;\n for (const [key, record] of registry().records) {\n if (record.ownerGeneration !== ownerGeneration) continue;\n registry().records.delete(key);\n removed += 1;\n }\n return removed;\n}\n\nexport function createDomainSwitchHandoffStore(): DomainSwitchHandoffStore {\n const ownerGeneration = crypto.randomUUID();\n let disposed = false;\n return {\n ownerGeneration,\n issue(request) {\n if (disposed) throw new Error('Domain switch handoff store is disposed.');\n return issue(ownerGeneration, request);\n },\n consume(handoffToken, identity) {\n if (disposed) return undefined;\n return consume(identity, handoffToken);\n },\n discard(handoffToken, identity) {\n if (disposed) return false;\n return discard(identity, handoffToken);\n },\n clearSession(requestedSessionId) {\n if (disposed) return 0;\n return clearOwnedSession(ownerGeneration, requestedSessionId);\n },\n dispose() {\n if (disposed) return 0;\n disposed = true;\n return disposeOwner(ownerGeneration);\n },\n };\n}\n\nconst defaultStore = createDomainSwitchHandoffStore();\n\nexport function prepareDomainSwitchHandoff(request: DomainSwitchHandoffRequest): DomainSwitchHandoff {\n return defaultStore.issue(request);\n}\n\nexport const createDomainSwitchHandoff = prepareDomainSwitchHandoff;\n\nexport function consumeDomainSwitchHandoff(\n handoffToken: string,\n identity: DomainSwitchHandoffIdentity,\n): DomainSwitchHandoff | undefined {\n return defaultStore.consume(handoffToken, identity);\n}\n\nexport const resolveDomainSwitchHandoff = consumeDomainSwitchHandoff;\n\nexport function discardDomainSwitchHandoff(handoffToken: string, identity: DomainSwitchHandoffIdentity): boolean {\n return defaultStore.discard(handoffToken, identity);\n}\n\nexport function clearDomainSwitchHandoffs(sessionIdValue: string): number {\n return defaultStore.clearSession(sessionIdValue);\n}\n"],"mappings":"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"}
package/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`./_virtual/_rolldown/runtime.cjs`);const e=require(`./cli/help.cjs`),t=require(`./cli/options.cjs`),n=require(`./cli/cliApp.cjs`),r=require(`./cli/compatibilityOptions.cjs`);require(`./cli/index.cjs`);const i=require(`./commands/baseCommand.cjs`),a=require(`./config/projectTrust.cjs`),o=require(`./config/harnessState.cjs`);require(`./config/index.cjs`);const s=require(`./utils/json.cjs`),c=require(`./utils/moduleResolution.cjs`),l=require(`./utils/repository.cjs`),u=require(`./utils/toolNames.cjs`);require(`./utils/index.cjs`);const d=require(`./services/extensionAssembler.cjs`),f=require(`./services/mcpFilter.cjs`),p=require(`./services/resourceCollector.cjs`),m=require(`./services/harnessContext.cjs`),h=require(`./services/runtimeBundle.cjs`),g=require(`./services/syncState.cjs`),_=require(`./services/piSettings.cjs`),v=require(`./commands/syncCommand.cjs`),y=require(`./commands/buildCommand.cjs`),b=require(`./services/compatibilityContext.cjs`),x=require(`./services/compatibility/process.cjs`),S=require(`./services/compatibility/antigravity.cjs`),C=require(`./services/compatibility/codex.cjs`),w=require(`./services/compatibility/index.cjs`),T=require(`./services/matrixSwitcher.cjs`),E=require(`./services/composer.cjs`);require(`./services/index.cjs`);const D=require(`./commands/compatibilityCommand.cjs`),O=require(`./commands/emitMcpCommand.cjs`),k=require(`./commands/explainCommand.cjs`),A=require(`./commands/initCommand.cjs`),j=require(`./commands/launchCommand.cjs`);require(`./commands/index.cjs`);let M=require(`@agimon-ai/doompi-ui/theme`),N=require(`@agimon-ai/doompi-config/domains`),P=require(`@agimon-ai/doompi-config`),F=require(`@agimon-ai/doompi-config/profiles`),I=require(`@agimon-ai/doompi-config/majorModes`);exports.BaseCommand=i.BaseCommand,exports.BuildCommand=y.BuildCommand,exports.COMPOSED_ENV=E.COMPOSED_ENV,exports.CONTEXT_PACKAGES=d.CONTEXT_PACKAGES,exports.CliApp=n.CliApp,exports.CompatibilityCommand=D.CompatibilityCommand,Object.defineProperty(exports,`DEFAULT_THEME`,{enumerable:!0,get:function(){return M.DEFAULT_THEME}}),Object.defineProperty(exports,`DEFAULT_THEME_NAME`,{enumerable:!0,get:function(){return M.DEFAULT_THEME_NAME}}),exports.DISPATCHER_AGENT_NAME=p.DISPATCHER_AGENT_NAME,Object.defineProperty(exports,`DOOM_DIR`,{enumerable:!0,get:function(){return N.DOOM_DIR}}),exports.DOOM_FLAGS=E.DOOM_FLAGS,exports.EmitMcpCommand=O.EmitMcpCommand,exports.ExplainCommand=k.ExplainCommand,exports.HARNESS_STATE_KEYS=P.HARNESS_STATE_KEYS,exports.HARNESS_STATE_POINTER=P.HARNESS_STATE_POINTER,exports.HARNESS_VERSION=e.HARNESS_VERSION,exports.InitCommand=A.InitCommand,exports.LAYER_RESOLVERS=d.LAYER_RESOLVERS,exports.LaunchCommand=j.LaunchCommand,exports.MUTE_ENV=E.MUTE_ENV,exports.OLLAMA_PRESET=d.OLLAMA_PRESET,exports.PERSONA_ENTRY=d.PERSONA_ENTRY,Object.defineProperty(exports,`PERSONA_FILES`,{enumerable:!0,get:function(){return F.PERSONA_FILES}}),exports.PROXY_SERVER_NAME=f.PROXY_SERVER_NAME,exports.SyncCommand=v.SyncCommand,exports.adaptAgentDefinition=p.adaptAgentDefinition,exports.adaptAntigravityMcpDefinition=S.adaptAntigravityMcpDefinition,exports.alreadyComposed=E.alreadyComposed,exports.antigravityCompatibilityArgs=S.antigravityCompatibilityArgs,exports.applyDomains=T.applyDomains,exports.applyMajorMode=T.applyMajorMode,exports.applyMcpAllowlist=f.applyMcpAllowlist,exports.applyPersona=T.applyPersona,exports.applyProfile=T.applyProfile,Object.defineProperty(exports,`applyProfileEnvironment`,{enumerable:!0,get:function(){return F.applyProfileEnvironment}}),exports.applyProjectTrust=a.applyProjectTrust,exports.assembleChildExtensions=d.assembleChildExtensions,exports.assembleExtensions=d.assembleExtensions,exports.buildCompatibilityContext=b.buildCompatibilityContext,exports.buildHarnessContext=m.buildHarnessContext,Object.defineProperty(exports,`buildPersonaPrompt`,{enumerable:!0,get:function(){return F.buildPersonaPrompt}}),exports.buildRuntimeBundle=h.buildRuntimeBundle,exports.claudeCompatibilityArgs=w.claudeCompatibilityArgs,exports.cleanupRunDirectory=E.cleanupRunDirectory,exports.codexCompatibilityArgs=C.codexCompatibilityArgs,exports.collectDrift=v.collectDrift,exports.collectResources=p.collectResources,exports.compileModeExtension=h.compileModeExtension,exports.composeDoomSession=E.composeDoomSession,exports.composeLoadOrder=E.composeLoadOrder,exports.computeInputsHash=g.computeInputsHash,exports.configurePreset=m.configurePreset,exports.consumerPackageEntry=c.consumerPackageEntry,exports.createHarnessSession=P.createHarnessSession,exports.createMapResolvers=g.createMapResolvers,exports.createRecordingResolvers=g.createRecordingResolvers,exports.createRuntimeExtensionPlan=h.createRuntimeExtensionPlan,Object.defineProperty(exports,`domainCompletionItems`,{enumerable:!0,get:function(){return N.domainCompletionItems}}),Object.defineProperty(exports,`domainCompletionPrefix`,{enumerable:!0,get:function(){return N.domainCompletionPrefix}}),exports.explainMatrix=k.explainMatrix,exports.extensionLayers=T.extensionLayers,exports.extensionsProvidedExternally=E.extensionsProvidedExternally,exports.filterHookDisabledLayers=d.filterHookDisabledLayers,exports.filterMcpServers=f.filterMcpServers,exports.filterProxyConfig=f.filterProxyConfig,exports.findRepositoryRoot=l.findRepositoryRoot,exports.findSyncedRoot=E.findSyncedRoot,exports.formatBuildResult=y.formatBuildResult,exports.formatSyncResult=v.formatSyncResult,exports.getHarnessState=o.getHarnessState,exports.harnessRoot=P.harnessRoot,exports.hasProjectTrustOption=a.hasProjectTrustOption,exports.isRecord=s.isRecord,exports.isRepositoryRoot=l.isRepositoryRoot,exports.launchCompatibility=w.launchCompatibility,Object.defineProperty(exports,`layerEntries`,{enumerable:!0,get:function(){return I.layerEntries}}),Object.defineProperty(exports,`layerHookGroups`,{enumerable:!0,get:function(){return I.layerHookGroups}}),Object.defineProperty(exports,`listDomainNames`,{enumerable:!0,get:function(){return N.listDomainNames}}),Object.defineProperty(exports,`listProfileNames`,{enumerable:!0,get:function(){return F.listProfileNames}}),exports.loadComposedExtensions=E.loadComposedExtensions,Object.defineProperty(exports,`loadDomains`,{enumerable:!0,get:function(){return N.loadDomains}}),exports.loadDoomConfig=a.loadDoomConfig,exports.loadHarnessState=P.loadHarnessState,Object.defineProperty(exports,`loadMajorModesConfig`,{enumerable:!0,get:function(){return I.loadMajorModesConfig}}),Object.defineProperty(exports,`loadProfiles`,{enumerable:!0,get:function(){return F.loadProfiles}}),exports.localEntry=c.localEntry,exports.mergeMcpConfigs=p.mergeMcpConfigs,exports.mergePiSettings=_.mergePiSettings,exports.needsRelaunch=T.needsRelaunch,exports.optionalPackageEntry=c.optionalPackageEntry,exports.ownEntry=c.ownEntry,exports.packageEntry=c.packageEntry,exports.parseCompatibilityArgs=r.parseCompatibilityArgs,exports.parseCompatibilityProvider=r.parseCompatibilityProvider,exports.parseHarnessArgs=t.parseHarnessArgs,exports.persistMcpConfig=f.persistMcpConfig,exports.piCliPath=c.piCliPath,exports.piSettingsPath=_.piSettingsPath,exports.prepareRunDirectory=E.prepareRunDirectory,exports.printHelp=e.printHelp,exports.projectHarnessEnvironment=P.projectHarnessEnvironment,exports.readHarnessState=o.readHarnessState,exports.readJson=s.readJson,exports.readMcpServerNames=g.readMcpServerNames,exports.readPiSettings=_.readPiSettings,exports.readStartupFlags=E.readStartupFlags,exports.readSyncState=g.readSyncState,exports.recordResolvedEntries=g.recordResolvedEntries,exports.recordedEnvironment=v.recordedEnvironment,exports.refreshHarnessState=o.refreshHarnessState,exports.registerDoomFlags=E.registerDoomFlags,Object.defineProperty(exports,`replaceProfileEnvironment`,{enumerable:!0,get:function(){return F.replaceProfileEnvironment}}),exports.requireHarnessPaths=P.requireHarnessPaths,exports.requireHarnessRoot=P.requireHarnessRoot,exports.resetHarnessStore=P.resetHarnessStore,exports.resolveHarnessProfile=m.resolveHarnessProfile,Object.defineProperty(exports,`resolveLayers`,{enumerable:!0,get:function(){return I.resolveLayers}}),exports.resolveMcpAllowlist=f.resolveMcpAllowlist,Object.defineProperty(exports,`resolvePluginDirectories`,{enumerable:!0,get:function(){return N.resolvePluginDirectories}}),Object.defineProperty(exports,`resolvePluginEntries`,{enumerable:!0,get:function(){return N.resolvePluginEntries}}),Object.defineProperty(exports,`resolveProfile`,{enumerable:!0,get:function(){return F.resolveProfile}}),Object.defineProperty(exports,`resolveSharedSkills`,{enumerable:!0,get:function(){return N.resolveSharedSkills}}),exports.runCli=n.runCli,exports.runDirectory=g.runDirectory,exports.runHarness=n.runHarness,exports.runInteractive=x.runInteractive,exports.selectWorkflowExtensionForProcess=p.selectWorkflowExtensionForProcess,exports.selectionEnvironment=v.selectionEnvironment,exports.serializePiSettings=_.serializePiSettings,exports.serializeSyncState=g.serializeSyncState,exports.settingsRelativePath=g.settingsRelativePath,exports.signalExitCode=x.signalExitCode,exports.splitPackageSpecifier=c.splitPackageSpecifier,exports.startSyncedSession=E.startSyncedSession,exports.supportsCodexManagedProfile=C.supportsCodexManagedProfile,exports.syncDirectory=g.syncDirectory,exports.syncStatePath=g.syncStatePath,exports.toClaudeToolName=u.toClaudeToolName,exports.toPiToolName=u.toPiToolName,exports.toSelection=v.toSelection,exports.updateHarnessState=o.updateHarnessState,Object.defineProperty(exports,`writeDefaultTheme`,{enumerable:!0,get:function(){return M.writeDefaultTheme}}),exports.writeFileAtomic=s.writeFileAtomic,exports.writeJson=s.writeJson,exports.writePiSettings=_.writePiSettings,exports.writeSyncState=g.writeSyncState;
1
+ Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}}),require(`./_virtual/_rolldown/runtime.cjs`);const e=require(`./adapters/repository/repository.cjs`),t=require(`./adapters/modules/moduleResolution.cjs`),n=require(`./adapters/serialization/json.cjs`),r=require(`./services/tools/toolNames.cjs`);require(`./utils/index.cjs`);const i=require(`./services/extensionAssembler.cjs`),a=require(`./adapters/syncState.cjs`),o=require(`./adapters/bootstrapLocator.cjs`),s=require(`./adapters/packageBootstrap.cjs`),c=require(`./commands/cli/help.cjs`),l=require(`./commands/cli/options.cjs`),u=require(`./commands/cli/cliApp.cjs`),d=require(`./commands/cli/compatibilityOptions.cjs`);require(`./commands/cli/index.cjs`);const f=require(`./commands/baseCommand.cjs`),p=require(`./adapters/config/harnessState.cjs`),m=require(`./services/config/projectTrust.cjs`);require(`./services/config/index.cjs`);const h=require(`./adapters/compatibility/process.cjs`),g=require(`./adapters/compatibility/antigravity.cjs`),_=require(`./adapters/compatibility/codex.cjs`),v=require(`./adapters/compatibility/index.cjs`),y=require(`./adapters/mcpFilter.cjs`),b=require(`./adapters/resourceCollector.cjs`),x=require(`./adapters/compatibilityContext.cjs`),S=require(`./adapters/compositionState.cjs`),C=require(`./adapters/harnessContext.cjs`),w=require(`./adapters/composer.cjs`),T=require(`./adapters/matrixSwitcher.cjs`),E=require(`./services/modeCatalog.cjs`),D=require(`./adapters/piSettings.cjs`),O=require(`./adapters/projectPiSettings.cjs`),k=require(`./adapters/runtimeBundle.cjs`);require(`./services/index.cjs`);const A=require(`./commands/compatibilityCommand.cjs`),j=require(`./commands/emitMcpCommand.cjs`),M=require(`./commands/explainCommand.cjs`),N=require(`./commands/initCommand.cjs`),P=require(`./commands/launchCommand.cjs`),F=require(`./commands/syncCommand.cjs`);require(`./commands/index.cjs`);let I=require(`@agimon-ai/doompi-ui/theme`),L=require(`@agimon-ai/doompi-config/domains`),R=require(`@agimon-ai/doompi-config/harnessState`),z=require(`@agimon-ai/doompi-config/harnessStore`),B=require(`@agimon-ai/doompi-config/profiles`),V=require(`@agimon-ai/doompi-config/majorModes`);exports.BaseCommand=f.BaseCommand,exports.COMPOSED_ENV=S.COMPOSED_ENV,exports.CONTEXT_PACKAGES=i.CONTEXT_PACKAGES,exports.CliApp=u.CliApp,exports.CompatibilityCommand=A.CompatibilityCommand,Object.defineProperty(exports,`DEFAULT_THEME`,{enumerable:!0,get:function(){return I.DEFAULT_THEME}}),Object.defineProperty(exports,`DEFAULT_THEME_NAME`,{enumerable:!0,get:function(){return I.DEFAULT_THEME_NAME}}),exports.DISPATCHER_AGENT_NAME=b.DISPATCHER_AGENT_NAME,Object.defineProperty(exports,`DOOM_DIR`,{enumerable:!0,get:function(){return L.DOOM_DIR}}),exports.DOOM_FLAGS=w.DOOM_FLAGS,exports.DUPLICATE_REGISTRATION_DRIFT=O.DUPLICATE_REGISTRATION_DRIFT,exports.EmitMcpCommand=j.EmitMcpCommand,exports.ExplainCommand=M.ExplainCommand,exports.HARNESS_STATE_KEYS=R.HARNESS_STATE_KEYS,exports.HARNESS_STATE_POINTER=z.HARNESS_STATE_POINTER,exports.HARNESS_VERSION=c.HARNESS_VERSION,exports.InitCommand=N.InitCommand,exports.LAYER_RESOLVERS=i.LAYER_RESOLVERS,exports.LaunchCommand=P.LaunchCommand,exports.MUTE_ENV=S.MUTE_ENV,exports.OLLAMA_PRESET=i.OLLAMA_PRESET,exports.PERSONA_ENTRY=i.PERSONA_ENTRY,Object.defineProperty(exports,`PERSONA_FILES`,{enumerable:!0,get:function(){return B.PERSONA_FILES}}),exports.PROXY_SERVER_NAME=y.PROXY_SERVER_NAME,exports.SyncCommand=F.SyncCommand,exports.adaptAgentDefinition=b.adaptAgentDefinition,exports.adaptAntigravityMcpDefinition=g.adaptAntigravityMcpDefinition,exports.alreadyComposed=S.alreadyComposed,exports.antigravityCompatibilityArgs=g.antigravityCompatibilityArgs,exports.applyDomains=T.applyDomains,exports.applyMajorMode=T.applyMajorMode,exports.applyMcpAllowlist=y.applyMcpAllowlist,exports.applyPersona=T.applyPersona,exports.applyProfile=T.applyProfile,Object.defineProperty(exports,`applyProfileEnvironment`,{enumerable:!0,get:function(){return B.applyProfileEnvironment}}),exports.applyProjectTrust=m.applyProjectTrust,exports.assembleChildExtensions=i.assembleChildExtensions,exports.assembleExtensions=i.assembleExtensions,exports.buildCompatibilityContext=x.buildCompatibilityContext,exports.buildHarnessContext=C.buildHarnessContext,Object.defineProperty(exports,`buildPersonaPrompt`,{enumerable:!0,get:function(){return B.buildPersonaPrompt}}),exports.buildRuntimeBundle=k.buildRuntimeBundle,exports.claudeCompatibilityArgs=v.claudeCompatibilityArgs,exports.cleanupRunDirectory=w.cleanupRunDirectory,exports.codexCompatibilityArgs=_.codexCompatibilityArgs,exports.collectDrift=F.collectDrift,exports.collectResources=b.collectResources,exports.compileModeExtension=k.compileModeExtension,exports.composeDoomSession=w.composeDoomSession,exports.composeLoadOrder=w.composeLoadOrder,exports.computeInputsHash=a.computeInputsHash,exports.configurePreset=C.configurePreset,exports.consumerPackageEntries=t.consumerPackageEntries,exports.consumerPackageEntry=t.consumerPackageEntry,exports.createHarnessSession=z.createHarnessSession,exports.createMapResolvers=a.createMapResolvers,exports.createMinorModeCatalogHost=E.createMinorModeCatalogHost,exports.createRecordingResolvers=a.createRecordingResolvers,exports.createRuntimeExtensionPlan=k.createRuntimeExtensionPlan,exports.default=s,Object.defineProperty(exports,`domainCompletionItems`,{enumerable:!0,get:function(){return L.domainCompletionItems}}),Object.defineProperty(exports,`domainCompletionPrefix`,{enumerable:!0,get:function(){return L.domainCompletionPrefix}}),exports.explainMatrix=M.explainMatrix,exports.extensionLayers=T.extensionLayers,exports.extensionsProvidedExternally=w.extensionsProvidedExternally,exports.filterHookDisabledLayers=i.filterHookDisabledLayers,exports.filterMcpServers=y.filterMcpServers,exports.filterProxyConfig=y.filterProxyConfig,exports.findRepositoryRoot=e.findRepositoryRoot,exports.findSyncedRoot=o.findSyncedRoot,exports.formatSyncResult=F.formatSyncResult,exports.getHarnessState=p.getHarnessState,exports.harnessRoot=z.harnessRoot,exports.hasProjectTrustOption=m.hasProjectTrustOption,exports.isRecord=n.isRecord,exports.isRepositoryRoot=e.isRepositoryRoot,exports.launchCompatibility=v.launchCompatibility,Object.defineProperty(exports,`layerEntries`,{enumerable:!0,get:function(){return V.layerEntries}}),Object.defineProperty(exports,`layerHookGroups`,{enumerable:!0,get:function(){return V.layerHookGroups}}),Object.defineProperty(exports,`listDomainNames`,{enumerable:!0,get:function(){return L.listDomainNames}}),Object.defineProperty(exports,`listProfileNames`,{enumerable:!0,get:function(){return B.listProfileNames}}),exports.loadComposedExtensions=w.loadComposedExtensions,Object.defineProperty(exports,`loadDomains`,{enumerable:!0,get:function(){return L.loadDomains}}),exports.loadDoomConfig=m.loadDoomConfig,exports.loadHarnessState=z.loadHarnessState,Object.defineProperty(exports,`loadMajorModesConfig`,{enumerable:!0,get:function(){return V.loadMajorModesConfig}}),Object.defineProperty(exports,`loadProfiles`,{enumerable:!0,get:function(){return B.loadProfiles}}),exports.localEntries=t.localEntries,exports.localEntry=t.localEntry,exports.localPackageName=t.localPackageName,exports.mergeMcpConfigs=b.mergeMcpConfigs,exports.mergePiSettings=D.mergePiSettings,exports.mergeProjectPiSettings=O.mergeProjectPiSettings,exports.needsRelaunch=T.needsRelaunch,exports.optionalPackageEntries=t.optionalPackageEntries,exports.optionalPackageEntry=t.optionalPackageEntry,exports.ownEntry=t.ownEntry,exports.packageEntries=t.packageEntries,exports.packageEntry=t.packageEntry,exports.parseCompatibilityArgs=d.parseCompatibilityArgs,exports.parseCompatibilityProvider=d.parseCompatibilityProvider,exports.parseHarnessArgs=l.parseHarnessArgs,exports.persistMcpConfig=y.persistMcpConfig,exports.piCliPath=t.piCliPath,exports.piSettingsPath=D.piSettingsPath,exports.prepareRunDirectory=w.prepareRunDirectory,exports.printHelp=c.printHelp,exports.projectHarnessEnvironment=R.projectHarnessEnvironment,exports.projectPiSettingsPath=O.projectPiSettingsPath,exports.projectRegistersDoom=O.projectRegistersDoom,exports.readHarnessState=p.readHarnessState,exports.readJson=n.readJson,exports.readMcpServerNames=a.readMcpServerNames,exports.readPiSettings=D.readPiSettings,exports.readProjectPiSettings=O.readProjectPiSettings,exports.readStartupFlags=w.readStartupFlags,exports.readSyncState=a.readSyncState,exports.recordResolvedEntries=a.recordResolvedEntries,exports.recordedEnvironment=F.recordedEnvironment,exports.refreshHarnessState=p.refreshHarnessState,exports.registerDoomFlags=w.registerDoomFlags,Object.defineProperty(exports,`replaceProfileEnvironment`,{enumerable:!0,get:function(){return B.replaceProfileEnvironment}}),exports.requireHarnessPaths=z.requireHarnessPaths,exports.requireHarnessRoot=z.requireHarnessRoot,exports.resetHarnessStore=z.resetHarnessStore,exports.resolveHarnessProfile=C.resolveHarnessProfile,Object.defineProperty(exports,`resolveLayers`,{enumerable:!0,get:function(){return V.resolveLayers}}),exports.resolveMcpAllowlist=y.resolveMcpAllowlist,Object.defineProperty(exports,`resolvePackageConfigurations`,{enumerable:!0,get:function(){return V.resolvePackageConfigurations}}),Object.defineProperty(exports,`resolvePluginDirectories`,{enumerable:!0,get:function(){return L.resolvePluginDirectories}}),Object.defineProperty(exports,`resolvePluginEntries`,{enumerable:!0,get:function(){return L.resolvePluginEntries}}),Object.defineProperty(exports,`resolveProfile`,{enumerable:!0,get:function(){return B.resolveProfile}}),Object.defineProperty(exports,`resolveSharedSkills`,{enumerable:!0,get:function(){return L.resolveSharedSkills}}),exports.runCli=u.runCli,exports.runDirectory=a.runDirectory,exports.runHarness=u.runHarness,exports.runInteractive=h.runInteractive,exports.selectWorkflowExtensionForProcess=b.selectWorkflowExtensionForProcess,exports.selectionEnvironment=F.selectionEnvironment,exports.serializePiSettings=D.serializePiSettings,exports.serializeProjectPiSettings=O.serializeProjectPiSettings,exports.serializeSyncState=a.serializeSyncState,exports.settingsRelativePath=a.settingsRelativePath,exports.signalExitCode=h.signalExitCode,exports.splitPackageSpecifier=t.splitPackageSpecifier,exports.startSyncedSession=w.startSyncedSession,exports.supportsCodexManagedProfile=_.supportsCodexManagedProfile,exports.syncDirectory=a.syncDirectory,exports.syncStatePath=a.syncStatePath,exports.toClaudeToolName=r.toClaudeToolName,exports.toPiToolName=r.toPiToolName,exports.toSelection=F.toSelection,exports.updateHarnessState=p.updateHarnessState,Object.defineProperty(exports,`writeDefaultTheme`,{enumerable:!0,get:function(){return I.writeDefaultTheme}}),exports.writeFileAtomic=n.writeFileAtomic,exports.writeJson=n.writeJson,exports.writePiSettings=D.writePiSettings,exports.writeProjectPiSettings=O.writeProjectPiSettings,exports.writeSyncState=a.writeSyncState;