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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (944) hide show
  1. package/README.md +437 -452
  2. package/assets/doompi-tui.png +0 -0
  3. package/dist/adapters/bootstrapClaim.cjs +2 -0
  4. package/dist/adapters/bootstrapClaim.cjs.map +1 -0
  5. package/dist/adapters/bootstrapClaim.mjs +2 -0
  6. package/dist/adapters/bootstrapClaim.mjs.map +1 -0
  7. package/dist/adapters/bootstrapLocator.cjs +2 -0
  8. package/dist/adapters/bootstrapLocator.cjs.map +1 -0
  9. package/dist/adapters/bootstrapLocator.d.cts +6 -0
  10. package/dist/adapters/bootstrapLocator.d.cts.map +1 -0
  11. package/dist/adapters/bootstrapLocator.d.mts +6 -0
  12. package/dist/adapters/bootstrapLocator.d.mts.map +1 -0
  13. package/dist/adapters/bootstrapLocator.mjs +2 -0
  14. package/dist/adapters/bootstrapLocator.mjs.map +1 -0
  15. package/dist/adapters/compatibility/antigravity.cjs +2 -0
  16. package/dist/{services → adapters}/compatibility/antigravity.cjs.map +1 -1
  17. package/dist/adapters/compatibility/antigravity.d.cts +11 -0
  18. package/dist/{services → adapters}/compatibility/antigravity.d.cts.map +1 -1
  19. package/dist/adapters/compatibility/antigravity.d.mts +11 -0
  20. package/dist/{services → adapters}/compatibility/antigravity.d.mts.map +1 -1
  21. package/dist/adapters/compatibility/antigravity.mjs +2 -0
  22. package/dist/{services → adapters}/compatibility/antigravity.mjs.map +1 -1
  23. package/dist/adapters/compatibility/codex.cjs +2 -0
  24. package/dist/{services → adapters}/compatibility/codex.cjs.map +1 -1
  25. package/dist/adapters/compatibility/codex.d.cts +19 -0
  26. package/dist/{services → adapters}/compatibility/codex.d.cts.map +1 -1
  27. package/dist/adapters/compatibility/codex.d.mts +19 -0
  28. package/dist/{services → adapters}/compatibility/codex.d.mts.map +1 -1
  29. package/dist/adapters/compatibility/codex.mjs +2 -0
  30. package/dist/{services → adapters}/compatibility/codex.mjs.map +1 -1
  31. package/dist/adapters/compatibility/index.cjs +2 -0
  32. package/dist/adapters/compatibility/index.cjs.map +1 -0
  33. package/dist/adapters/compatibility/index.d.cts +16 -0
  34. package/dist/{services → adapters}/compatibility/index.d.cts.map +1 -1
  35. package/dist/adapters/compatibility/index.d.mts +16 -0
  36. package/dist/{services → adapters}/compatibility/index.d.mts.map +1 -1
  37. package/dist/adapters/compatibility/index.mjs +2 -0
  38. package/dist/adapters/compatibility/index.mjs.map +1 -0
  39. package/dist/adapters/compatibility/process.cjs +2 -0
  40. package/dist/{services → adapters}/compatibility/process.cjs.map +1 -1
  41. package/dist/adapters/compatibility/process.d.cts +35 -0
  42. package/dist/{services → adapters}/compatibility/process.d.cts.map +1 -1
  43. package/dist/adapters/compatibility/process.d.mts +35 -0
  44. package/dist/{services → adapters}/compatibility/process.d.mts.map +1 -1
  45. package/dist/adapters/compatibility/process.mjs +2 -0
  46. package/dist/{services → adapters}/compatibility/process.mjs.map +1 -1
  47. package/dist/adapters/compatibility/shared.cjs +2 -0
  48. package/dist/{services → adapters}/compatibility/shared.cjs.map +1 -1
  49. package/dist/adapters/compatibility/shared.d.cts +33 -0
  50. package/dist/{services → adapters}/compatibility/shared.d.cts.map +1 -1
  51. package/dist/adapters/compatibility/shared.d.mts +33 -0
  52. package/dist/{services → adapters}/compatibility/shared.d.mts.map +1 -1
  53. package/dist/adapters/compatibility/shared.mjs +2 -0
  54. package/dist/{services → adapters}/compatibility/shared.mjs.map +1 -1
  55. package/dist/adapters/compatibilityContext.cjs +2 -0
  56. package/dist/adapters/compatibilityContext.cjs.map +1 -0
  57. package/dist/adapters/compatibilityContext.d.cts +23 -0
  58. package/dist/{services → adapters}/compatibilityContext.d.cts.map +1 -1
  59. package/dist/adapters/compatibilityContext.d.mts +23 -0
  60. package/dist/{services → adapters}/compatibilityContext.d.mts.map +1 -1
  61. package/dist/adapters/compatibilityContext.mjs +2 -0
  62. package/dist/adapters/compatibilityContext.mjs.map +1 -0
  63. package/dist/adapters/composer.cjs +2 -0
  64. package/dist/adapters/composer.cjs.map +1 -0
  65. package/dist/adapters/composer.d.cts +113 -0
  66. package/dist/adapters/composer.d.cts.map +1 -0
  67. package/dist/adapters/composer.d.mts +113 -0
  68. package/dist/adapters/composer.d.mts.map +1 -0
  69. package/dist/adapters/composer.mjs +2 -0
  70. package/dist/adapters/composer.mjs.map +1 -0
  71. package/dist/adapters/compositionState.cjs +2 -0
  72. package/dist/adapters/compositionState.cjs.map +1 -0
  73. package/dist/adapters/compositionState.d.cts +12 -0
  74. package/dist/adapters/compositionState.d.cts.map +1 -0
  75. package/dist/adapters/compositionState.d.mts +12 -0
  76. package/dist/adapters/compositionState.d.mts.map +1 -0
  77. package/dist/adapters/compositionState.mjs +2 -0
  78. package/dist/adapters/compositionState.mjs.map +1 -0
  79. package/dist/adapters/config/harnessState.cjs +2 -0
  80. package/dist/adapters/config/harnessState.cjs.map +1 -0
  81. package/dist/adapters/config/harnessState.d.cts +26 -0
  82. package/dist/adapters/config/harnessState.d.cts.map +1 -0
  83. package/dist/adapters/config/harnessState.d.mts +26 -0
  84. package/dist/adapters/config/harnessState.d.mts.map +1 -0
  85. package/dist/adapters/config/harnessState.mjs +2 -0
  86. package/dist/adapters/config/harnessState.mjs.map +1 -0
  87. package/dist/adapters/deferredSkills.cjs +12 -0
  88. package/dist/adapters/deferredSkills.cjs.map +1 -0
  89. package/dist/adapters/deferredSkills.mjs +12 -0
  90. package/dist/adapters/deferredSkills.mjs.map +1 -0
  91. package/dist/adapters/doomPackage.cjs +2 -0
  92. package/dist/adapters/doomPackage.cjs.map +1 -0
  93. package/dist/adapters/doomPackage.mjs +2 -0
  94. package/dist/adapters/doomPackage.mjs.map +1 -0
  95. package/dist/adapters/dpiRunner.cjs +3 -0
  96. package/dist/adapters/dpiRunner.cjs.map +1 -0
  97. package/dist/adapters/dpiRunner.mjs +3 -0
  98. package/dist/adapters/dpiRunner.mjs.map +1 -0
  99. package/dist/adapters/dpiSettings.cjs +2 -0
  100. package/dist/adapters/dpiSettings.cjs.map +1 -0
  101. package/dist/adapters/dpiSettings.mjs +2 -0
  102. package/dist/adapters/dpiSettings.mjs.map +1 -0
  103. package/dist/adapters/extensionCompiler.cjs +3 -0
  104. package/dist/adapters/extensionCompiler.cjs.map +1 -0
  105. package/dist/adapters/extensionCompiler.mjs +3 -0
  106. package/dist/adapters/extensionCompiler.mjs.map +1 -0
  107. package/dist/adapters/harnessContext.cjs +2 -0
  108. package/dist/adapters/harnessContext.cjs.map +1 -0
  109. package/dist/adapters/harnessContext.d.cts +61 -0
  110. package/dist/{services → adapters}/harnessContext.d.cts.map +1 -1
  111. package/dist/adapters/harnessContext.d.mts +61 -0
  112. package/dist/{services → adapters}/harnessContext.d.mts.map +1 -1
  113. package/dist/adapters/harnessContext.mjs +2 -0
  114. package/dist/adapters/harnessContext.mjs.map +1 -0
  115. package/dist/adapters/helpSkills.cjs +2 -0
  116. package/dist/adapters/helpSkills.cjs.map +1 -0
  117. package/dist/adapters/helpSkills.mjs +2 -0
  118. package/dist/adapters/helpSkills.mjs.map +1 -0
  119. package/dist/adapters/layerPackageInstaller.cjs +2 -0
  120. package/dist/adapters/layerPackageInstaller.cjs.map +1 -0
  121. package/dist/adapters/layerPackageInstaller.mjs +2 -0
  122. package/dist/adapters/layerPackageInstaller.mjs.map +1 -0
  123. package/dist/adapters/matrixSwitcher.cjs +2 -0
  124. package/dist/adapters/matrixSwitcher.cjs.map +1 -0
  125. package/dist/adapters/matrixSwitcher.d.cts +46 -0
  126. package/dist/{services → adapters}/matrixSwitcher.d.cts.map +1 -1
  127. package/dist/adapters/matrixSwitcher.d.mts +46 -0
  128. package/dist/{services → adapters}/matrixSwitcher.d.mts.map +1 -1
  129. package/dist/adapters/matrixSwitcher.mjs +2 -0
  130. package/dist/adapters/matrixSwitcher.mjs.map +1 -0
  131. package/dist/adapters/mcpFilter.cjs +3 -0
  132. package/dist/adapters/mcpFilter.cjs.map +1 -0
  133. package/dist/adapters/mcpFilter.d.cts +40 -0
  134. package/dist/adapters/mcpFilter.d.cts.map +1 -0
  135. package/dist/adapters/mcpFilter.d.mts +40 -0
  136. package/dist/adapters/mcpFilter.d.mts.map +1 -0
  137. package/dist/adapters/mcpFilter.mjs +3 -0
  138. package/dist/adapters/mcpFilter.mjs.map +1 -0
  139. package/dist/adapters/modules/moduleResolution.cjs +2 -0
  140. package/dist/adapters/modules/moduleResolution.cjs.map +1 -0
  141. package/dist/adapters/modules/moduleResolution.d.cts +69 -0
  142. package/dist/adapters/modules/moduleResolution.d.cts.map +1 -0
  143. package/dist/adapters/modules/moduleResolution.d.mts +69 -0
  144. package/dist/adapters/modules/moduleResolution.d.mts.map +1 -0
  145. package/dist/adapters/modules/moduleResolution.mjs +2 -0
  146. package/dist/adapters/modules/moduleResolution.mjs.map +1 -0
  147. package/dist/adapters/packageBootstrap.cjs +2 -0
  148. package/dist/adapters/packageBootstrap.cjs.map +1 -0
  149. package/dist/adapters/packageBootstrap.d.cts +8 -0
  150. package/dist/adapters/packageBootstrap.d.cts.map +1 -0
  151. package/dist/adapters/packageBootstrap.d.mts +8 -0
  152. package/dist/adapters/packageBootstrap.d.mts.map +1 -0
  153. package/dist/adapters/packageBootstrap.mjs +2 -0
  154. package/dist/adapters/packageBootstrap.mjs.map +1 -0
  155. package/dist/adapters/piExtensionAlias.cjs +2 -0
  156. package/dist/adapters/piExtensionAlias.cjs.map +1 -0
  157. package/dist/adapters/piExtensionAlias.mjs +2 -0
  158. package/dist/adapters/piExtensionAlias.mjs.map +1 -0
  159. package/dist/adapters/piSettings.cjs +2 -0
  160. package/dist/adapters/piSettings.cjs.map +1 -0
  161. package/dist/adapters/piSettings.d.cts +25 -0
  162. package/dist/adapters/piSettings.d.cts.map +1 -0
  163. package/dist/adapters/piSettings.d.mts +25 -0
  164. package/dist/adapters/piSettings.d.mts.map +1 -0
  165. package/dist/adapters/piSettings.mjs +2 -0
  166. package/dist/adapters/piSettings.mjs.map +1 -0
  167. package/dist/adapters/pluginMaterializer.cjs +2 -0
  168. package/dist/adapters/pluginMaterializer.cjs.map +1 -0
  169. package/dist/adapters/pluginMaterializer.mjs +2 -0
  170. package/dist/adapters/pluginMaterializer.mjs.map +1 -0
  171. package/dist/adapters/projectPiSettings.cjs +2 -0
  172. package/dist/adapters/projectPiSettings.cjs.map +1 -0
  173. package/dist/adapters/projectPiSettings.d.cts +29 -0
  174. package/dist/adapters/projectPiSettings.d.cts.map +1 -0
  175. package/dist/adapters/projectPiSettings.d.mts +29 -0
  176. package/dist/adapters/projectPiSettings.d.mts.map +1 -0
  177. package/dist/adapters/projectPiSettings.mjs +2 -0
  178. package/dist/adapters/projectPiSettings.mjs.map +1 -0
  179. package/dist/adapters/repository/repository.cjs +2 -0
  180. package/dist/adapters/repository/repository.cjs.map +1 -0
  181. package/dist/adapters/repository/repository.d.cts +21 -0
  182. package/dist/adapters/repository/repository.d.cts.map +1 -0
  183. package/dist/adapters/repository/repository.d.mts +21 -0
  184. package/dist/adapters/repository/repository.d.mts.map +1 -0
  185. package/dist/adapters/repository/repository.mjs +2 -0
  186. package/dist/adapters/repository/repository.mjs.map +1 -0
  187. package/dist/adapters/resourceCollector.cjs +3 -0
  188. package/dist/adapters/resourceCollector.cjs.map +1 -0
  189. package/dist/adapters/resourceCollector.d.cts +25 -0
  190. package/dist/adapters/resourceCollector.d.cts.map +1 -0
  191. package/dist/adapters/resourceCollector.d.mts +25 -0
  192. package/dist/adapters/resourceCollector.d.mts.map +1 -0
  193. package/dist/adapters/resourceCollector.mjs +3 -0
  194. package/dist/adapters/resourceCollector.mjs.map +1 -0
  195. package/dist/adapters/runtimeBundle.cjs +2 -0
  196. package/dist/adapters/runtimeBundle.cjs.map +1 -0
  197. package/dist/{services → adapters}/runtimeBundle.d.cts +4 -2
  198. package/dist/adapters/runtimeBundle.d.cts.map +1 -0
  199. package/dist/{services → adapters}/runtimeBundle.d.mts +4 -2
  200. package/dist/adapters/runtimeBundle.d.mts.map +1 -0
  201. package/dist/adapters/runtimeBundle.mjs +2 -0
  202. package/dist/adapters/runtimeBundle.mjs.map +1 -0
  203. package/dist/adapters/serialization/json.cjs +2 -0
  204. package/dist/adapters/serialization/json.cjs.map +1 -0
  205. package/dist/adapters/serialization/json.d.cts +23 -0
  206. package/dist/adapters/serialization/json.d.cts.map +1 -0
  207. package/dist/adapters/serialization/json.d.mts +23 -0
  208. package/dist/adapters/serialization/json.d.mts.map +1 -0
  209. package/dist/adapters/serialization/json.mjs +2 -0
  210. package/dist/adapters/serialization/json.mjs.map +1 -0
  211. package/dist/adapters/sharedBuildCache.cjs +2 -0
  212. package/dist/adapters/sharedBuildCache.cjs.map +1 -0
  213. package/dist/adapters/sharedBuildCache.mjs +2 -0
  214. package/dist/adapters/sharedBuildCache.mjs.map +1 -0
  215. package/dist/adapters/skillCatalog.cjs +2 -0
  216. package/dist/adapters/skillCatalog.cjs.map +1 -0
  217. package/dist/adapters/skillCatalog.d.cts +61 -0
  218. package/dist/adapters/skillCatalog.d.cts.map +1 -0
  219. package/dist/adapters/skillCatalog.d.mts +61 -0
  220. package/dist/adapters/skillCatalog.d.mts.map +1 -0
  221. package/dist/adapters/skillCatalog.mjs +2 -0
  222. package/dist/adapters/skillCatalog.mjs.map +1 -0
  223. package/dist/adapters/skillSources.cjs +2 -0
  224. package/dist/{services → adapters}/skillSources.cjs.map +1 -1
  225. package/dist/adapters/skillSources.d.cts +24 -0
  226. package/dist/{services → adapters}/skillSources.d.cts.map +1 -1
  227. package/dist/adapters/skillSources.d.mts +24 -0
  228. package/dist/{services → adapters}/skillSources.d.mts.map +1 -1
  229. package/dist/adapters/skillSources.mjs +2 -0
  230. package/dist/{services → adapters}/skillSources.mjs.map +1 -1
  231. package/dist/adapters/startupPrecompiler.cjs +2 -0
  232. package/dist/adapters/startupPrecompiler.cjs.map +1 -0
  233. package/dist/adapters/startupPrecompiler.d.cts +13 -0
  234. package/dist/adapters/startupPrecompiler.d.cts.map +1 -0
  235. package/dist/adapters/startupPrecompiler.d.mts +13 -0
  236. package/dist/adapters/startupPrecompiler.d.mts.map +1 -0
  237. package/dist/adapters/startupPrecompiler.mjs +2 -0
  238. package/dist/adapters/startupPrecompiler.mjs.map +1 -0
  239. package/dist/adapters/syncLocation.cjs +2 -0
  240. package/dist/adapters/syncLocation.cjs.map +1 -0
  241. package/dist/adapters/syncLocation.d.cts +19 -0
  242. package/dist/adapters/syncLocation.d.cts.map +1 -0
  243. package/dist/adapters/syncLocation.d.mts +19 -0
  244. package/dist/adapters/syncLocation.d.mts.map +1 -0
  245. package/dist/adapters/syncLocation.mjs +2 -0
  246. package/dist/adapters/syncLocation.mjs.map +1 -0
  247. package/dist/adapters/syncState.cjs +2 -0
  248. package/dist/adapters/syncState.cjs.map +1 -0
  249. package/dist/adapters/syncState.d.cts +153 -0
  250. package/dist/adapters/syncState.d.cts.map +1 -0
  251. package/dist/adapters/syncState.d.mts +153 -0
  252. package/dist/adapters/syncState.d.mts.map +1 -0
  253. package/dist/adapters/syncState.mjs +2 -0
  254. package/dist/adapters/syncState.mjs.map +1 -0
  255. package/dist/adapters/syncStateContract.cjs +2 -0
  256. package/dist/adapters/syncStateContract.cjs.map +1 -0
  257. package/dist/adapters/syncStateContract.d.cts +13 -0
  258. package/dist/adapters/syncStateContract.d.cts.map +1 -0
  259. package/dist/adapters/syncStateContract.d.mts +13 -0
  260. package/dist/adapters/syncStateContract.d.mts.map +1 -0
  261. package/dist/adapters/syncStateContract.mjs +2 -0
  262. package/dist/adapters/syncStateContract.mjs.map +1 -0
  263. package/dist/adapters/syncedRuntimeBuilder.cjs +2 -0
  264. package/dist/adapters/syncedRuntimeBuilder.cjs.map +1 -0
  265. package/dist/adapters/syncedRuntimeBuilder.d.cts +11 -0
  266. package/dist/adapters/syncedRuntimeBuilder.d.cts.map +1 -0
  267. package/dist/adapters/syncedRuntimeBuilder.d.mts +11 -0
  268. package/dist/adapters/syncedRuntimeBuilder.d.mts.map +1 -0
  269. package/dist/adapters/syncedRuntimeBuilder.mjs +2 -0
  270. package/dist/adapters/syncedRuntimeBuilder.mjs.map +1 -0
  271. package/dist/adapters/telemetry/logSinkTelemetry.cjs +2 -0
  272. package/dist/adapters/telemetry/logSinkTelemetry.cjs.map +1 -0
  273. package/dist/adapters/telemetry/logSinkTelemetry.d.cts +51 -0
  274. package/dist/adapters/telemetry/logSinkTelemetry.d.cts.map +1 -0
  275. package/dist/adapters/telemetry/logSinkTelemetry.d.mts +51 -0
  276. package/dist/adapters/telemetry/logSinkTelemetry.d.mts.map +1 -0
  277. package/dist/adapters/telemetry/logSinkTelemetry.mjs +2 -0
  278. package/dist/adapters/telemetry/logSinkTelemetry.mjs.map +1 -0
  279. package/dist/bin/cli.cjs +1 -1
  280. package/dist/bin/cli.cjs.map +1 -1
  281. package/dist/bin/cli.mjs +1 -1
  282. package/dist/bin/cli.mjs.map +1 -1
  283. package/dist/bin/dpi.cjs +3 -0
  284. package/dist/bin/dpi.cjs.map +1 -0
  285. package/dist/bin/dpi.d.cts +1 -0
  286. package/dist/bin/dpi.d.mts +1 -0
  287. package/dist/bin/dpi.mjs +3 -0
  288. package/dist/bin/dpi.mjs.map +1 -0
  289. package/dist/cli/cliApp.cjs +1 -2
  290. package/dist/cli/cliApp.d.cts +2 -45
  291. package/dist/cli/cliApp.d.mts +2 -45
  292. package/dist/cli/cliApp.mjs +1 -2
  293. package/dist/cli/compatibilityOptions.cjs +1 -2
  294. package/dist/cli/compatibilityOptions.d.cts +2 -15
  295. package/dist/cli/compatibilityOptions.d.mts +2 -15
  296. package/dist/cli/compatibilityOptions.mjs +1 -2
  297. package/dist/cli/help.cjs +1 -63
  298. package/dist/cli/help.d.cts +2 -6
  299. package/dist/cli/help.d.mts +2 -6
  300. package/dist/cli/help.mjs +1 -63
  301. package/dist/cli/index.cjs +1 -1
  302. package/dist/cli/index.d.cts +4 -4
  303. package/dist/cli/index.d.mts +4 -4
  304. package/dist/cli/index.mjs +1 -1
  305. package/dist/cli/matrixOptions.cjs +1 -2
  306. package/dist/cli/matrixOptions.d.cts +2 -99
  307. package/dist/cli/matrixOptions.d.mts +2 -99
  308. package/dist/cli/matrixOptions.mjs +1 -2
  309. package/dist/cli/options.cjs +1 -2
  310. package/dist/cli/options.d.cts +2 -7
  311. package/dist/cli/options.d.mts +2 -7
  312. package/dist/cli/options.mjs +1 -2
  313. package/dist/commands/baseCommand.cjs.map +1 -1
  314. package/dist/commands/baseCommand.d.cts +3 -3
  315. package/dist/commands/baseCommand.d.mts +3 -3
  316. package/dist/commands/baseCommand.mjs.map +1 -1
  317. package/dist/commands/buildCommand.cjs +2 -2
  318. package/dist/commands/buildCommand.cjs.map +1 -1
  319. package/dist/commands/buildCommand.mjs +2 -2
  320. package/dist/commands/buildCommand.mjs.map +1 -1
  321. package/dist/commands/cli/cliApp.cjs +2 -0
  322. package/dist/commands/cli/cliApp.cjs.map +1 -0
  323. package/dist/commands/cli/cliApp.d.cts +45 -0
  324. package/dist/commands/cli/cliApp.d.cts.map +1 -0
  325. package/dist/commands/cli/cliApp.d.mts +45 -0
  326. package/dist/commands/cli/cliApp.d.mts.map +1 -0
  327. package/dist/commands/cli/cliApp.mjs +2 -0
  328. package/dist/commands/cli/cliApp.mjs.map +1 -0
  329. package/dist/commands/cli/compatibilityOptions.cjs +2 -0
  330. package/dist/commands/cli/compatibilityOptions.cjs.map +1 -0
  331. package/dist/commands/cli/compatibilityOptions.d.cts +15 -0
  332. package/dist/commands/cli/compatibilityOptions.d.cts.map +1 -0
  333. package/dist/commands/cli/compatibilityOptions.d.mts +15 -0
  334. package/dist/commands/cli/compatibilityOptions.d.mts.map +1 -0
  335. package/dist/commands/cli/compatibilityOptions.mjs +2 -0
  336. package/dist/commands/cli/compatibilityOptions.mjs.map +1 -0
  337. package/dist/commands/cli/help.cjs +68 -0
  338. package/dist/{cli → commands/cli}/help.cjs.map +1 -1
  339. package/dist/commands/cli/help.d.cts +6 -0
  340. package/dist/commands/cli/help.d.cts.map +1 -0
  341. package/dist/commands/cli/help.d.mts +6 -0
  342. package/dist/commands/cli/help.d.mts.map +1 -0
  343. package/dist/commands/cli/help.mjs +68 -0
  344. package/dist/{cli → commands/cli}/help.mjs.map +1 -1
  345. package/dist/commands/cli/index.cjs +1 -0
  346. package/dist/commands/cli/index.d.cts +4 -0
  347. package/dist/commands/cli/index.d.mts +4 -0
  348. package/dist/commands/cli/index.mjs +1 -0
  349. package/dist/commands/cli/matrixOptions.cjs +2 -0
  350. package/dist/commands/cli/matrixOptions.cjs.map +1 -0
  351. package/dist/commands/cli/matrixOptions.d.cts +99 -0
  352. package/dist/commands/cli/matrixOptions.d.cts.map +1 -0
  353. package/dist/commands/cli/matrixOptions.d.mts +99 -0
  354. package/dist/commands/cli/matrixOptions.d.mts.map +1 -0
  355. package/dist/commands/cli/matrixOptions.mjs +2 -0
  356. package/dist/commands/cli/matrixOptions.mjs.map +1 -0
  357. package/dist/commands/cli/options.cjs +2 -0
  358. package/dist/commands/cli/options.cjs.map +1 -0
  359. package/dist/commands/cli/options.d.cts +7 -0
  360. package/dist/commands/cli/options.d.cts.map +1 -0
  361. package/dist/commands/cli/options.d.mts +7 -0
  362. package/dist/commands/cli/options.d.mts.map +1 -0
  363. package/dist/commands/cli/options.mjs +2 -0
  364. package/dist/commands/cli/options.mjs.map +1 -0
  365. package/dist/commands/compatibilityCommand.cjs +1 -1
  366. package/dist/commands/compatibilityCommand.cjs.map +1 -1
  367. package/dist/commands/compatibilityCommand.d.cts +1 -1
  368. package/dist/commands/compatibilityCommand.d.cts.map +1 -1
  369. package/dist/commands/compatibilityCommand.d.mts +1 -1
  370. package/dist/commands/compatibilityCommand.d.mts.map +1 -1
  371. package/dist/commands/compatibilityCommand.mjs +1 -1
  372. package/dist/commands/compatibilityCommand.mjs.map +1 -1
  373. package/dist/commands/emitMcpCommand.cjs +1 -1
  374. package/dist/commands/emitMcpCommand.cjs.map +1 -1
  375. package/dist/commands/emitMcpCommand.d.cts +2 -2
  376. package/dist/commands/emitMcpCommand.d.mts +2 -2
  377. package/dist/commands/emitMcpCommand.mjs +1 -1
  378. package/dist/commands/emitMcpCommand.mjs.map +1 -1
  379. package/dist/commands/explainCommand.cjs +2 -2
  380. package/dist/commands/explainCommand.cjs.map +1 -1
  381. package/dist/commands/explainCommand.d.cts +2 -2
  382. package/dist/commands/explainCommand.d.mts +2 -2
  383. package/dist/commands/explainCommand.mjs +2 -2
  384. package/dist/commands/explainCommand.mjs.map +1 -1
  385. package/dist/commands/index.cjs +1 -1
  386. package/dist/commands/index.d.cts +2 -3
  387. package/dist/commands/index.d.mts +2 -3
  388. package/dist/commands/index.mjs +1 -1
  389. package/dist/commands/initCommand.cjs +1 -2
  390. package/dist/commands/initCommand.cjs.map +1 -1
  391. package/dist/commands/initCommand.d.cts +4 -3
  392. package/dist/commands/initCommand.d.cts.map +1 -1
  393. package/dist/commands/initCommand.d.mts +4 -3
  394. package/dist/commands/initCommand.d.mts.map +1 -1
  395. package/dist/commands/initCommand.mjs +1 -2
  396. package/dist/commands/initCommand.mjs.map +1 -1
  397. package/dist/commands/initPresenter.cjs +3 -0
  398. package/dist/commands/initPresenter.cjs.map +1 -0
  399. package/dist/commands/initPresenter.d.cts +8 -0
  400. package/dist/commands/initPresenter.d.cts.map +1 -0
  401. package/dist/commands/initPresenter.d.mts +8 -0
  402. package/dist/commands/initPresenter.d.mts.map +1 -0
  403. package/dist/commands/initPresenter.mjs +3 -0
  404. package/dist/commands/initPresenter.mjs.map +1 -0
  405. package/dist/commands/launchCommand.cjs +1 -1
  406. package/dist/commands/launchCommand.cjs.map +1 -1
  407. package/dist/commands/launchCommand.d.cts +6 -4
  408. package/dist/commands/launchCommand.d.cts.map +1 -1
  409. package/dist/commands/launchCommand.d.mts +6 -4
  410. package/dist/commands/launchCommand.d.mts.map +1 -1
  411. package/dist/commands/launchCommand.mjs +1 -1
  412. package/dist/commands/launchCommand.mjs.map +1 -1
  413. package/dist/commands/syncCommand.cjs +5 -5
  414. package/dist/commands/syncCommand.cjs.map +1 -1
  415. package/dist/commands/syncCommand.d.cts +19 -7
  416. package/dist/commands/syncCommand.d.cts.map +1 -1
  417. package/dist/commands/syncCommand.d.mts +19 -7
  418. package/dist/commands/syncCommand.d.mts.map +1 -1
  419. package/dist/commands/syncCommand.mjs +5 -5
  420. package/dist/commands/syncCommand.mjs.map +1 -1
  421. package/dist/commands/syncPipeline.cjs +2 -0
  422. package/dist/commands/syncPipeline.cjs.map +1 -0
  423. package/dist/commands/syncPipeline.mjs +2 -0
  424. package/dist/commands/syncPipeline.mjs.map +1 -0
  425. package/dist/config/harnessState.cjs +1 -2
  426. package/dist/config/harnessState.d.cts +2 -24
  427. package/dist/config/harnessState.d.mts +2 -24
  428. package/dist/config/harnessState.mjs +1 -2
  429. package/dist/config/index.cjs +1 -1
  430. package/dist/config/index.d.cts +4 -7
  431. package/dist/config/index.d.mts +4 -7
  432. package/dist/config/index.mjs +1 -1
  433. package/dist/config/projectTrust.cjs +1 -2
  434. package/dist/config/projectTrust.d.cts +2 -14
  435. package/dist/config/projectTrust.d.mts +2 -14
  436. package/dist/config/projectTrust.mjs +1 -2
  437. package/dist/entries/autoStop.cjs +1 -2
  438. package/dist/entries/autoStop.d.cts +2 -6
  439. package/dist/entries/autoStop.d.mts +2 -7
  440. package/dist/entries/autoStop.mjs +1 -2
  441. package/dist/entries/components/matrixPicker.cjs +1 -2
  442. package/dist/entries/components/matrixPicker.d.cts +2 -55
  443. package/dist/entries/components/matrixPicker.d.mts +2 -55
  444. package/dist/entries/components/matrixPicker.mjs +1 -2
  445. package/dist/entries/components/skillsOverlay.cjs +1 -4
  446. package/dist/entries/components/skillsOverlay.d.cts +2 -58
  447. package/dist/entries/components/skillsOverlay.d.mts +2 -58
  448. package/dist/entries/components/skillsOverlay.mjs +1 -4
  449. package/dist/entries/domains.cjs +1 -2
  450. package/dist/entries/domains.d.cts +2 -10
  451. package/dist/entries/domains.d.mts +2 -10
  452. package/dist/entries/domains.mjs +1 -2
  453. package/dist/entries/doom.cjs +1 -2
  454. package/dist/entries/doom.d.cts +2 -13
  455. package/dist/entries/doom.d.mts +2 -14
  456. package/dist/entries/doom.mjs +1 -2
  457. package/dist/entries/effort.cjs +1 -2
  458. package/dist/entries/effort.d.cts +2 -10
  459. package/dist/entries/effort.d.mts +2 -10
  460. package/dist/entries/effort.mjs +1 -2
  461. package/dist/entries/majorMode.cjs +1 -6
  462. package/dist/entries/majorMode.d.cts +2 -29
  463. package/dist/entries/majorMode.d.mts +2 -29
  464. package/dist/entries/majorMode.mjs +1 -6
  465. package/dist/entries/modeCatalog.cjs +1 -0
  466. package/dist/entries/modeCatalog.d.cts +2 -0
  467. package/dist/entries/modeCatalog.d.mts +2 -0
  468. package/dist/entries/modeCatalog.mjs +1 -0
  469. package/dist/entries/notifications.cjs +1 -2
  470. package/dist/entries/notifications.d.cts +2 -13
  471. package/dist/entries/notifications.d.mts +2 -13
  472. package/dist/entries/notifications.mjs +1 -2
  473. package/dist/entries/ollamaProvider.cjs +1 -2
  474. package/dist/entries/ollamaProvider.d.cts +2 -6
  475. package/dist/entries/ollamaProvider.d.mts +2 -7
  476. package/dist/entries/ollamaProvider.mjs +1 -2
  477. package/dist/entries/persona.cjs +1 -2
  478. package/dist/entries/persona.d.cts +2 -14
  479. package/dist/entries/persona.d.mts +2 -15
  480. package/dist/entries/persona.mjs +1 -2
  481. package/dist/entries/profile.cjs +1 -3
  482. package/dist/entries/profile.d.cts +2 -16
  483. package/dist/entries/profile.d.mts +2 -16
  484. package/dist/entries/profile.mjs +1 -3
  485. package/dist/entries/repositoryHooks.cjs +1 -9
  486. package/dist/entries/repositoryHooks.d.cts +2 -7
  487. package/dist/entries/repositoryHooks.d.mts +2 -8
  488. package/dist/entries/repositoryHooks.mjs +1 -9
  489. package/dist/entries/skills.cjs +1 -2
  490. package/dist/entries/skills.d.cts +2 -34
  491. package/dist/entries/skills.d.mts +2 -34
  492. package/dist/entries/skills.mjs +1 -2
  493. package/dist/entries/styleSystem.cjs +1 -4
  494. package/dist/entries/styleSystem.d.cts +2 -32
  495. package/dist/entries/styleSystem.d.mts +2 -32
  496. package/dist/entries/styleSystem.mjs +1 -4
  497. package/dist/extensions/entries/autoStop.cjs +2 -0
  498. package/dist/extensions/entries/autoStop.cjs.map +1 -0
  499. package/dist/extensions/entries/autoStop.d.cts +7 -0
  500. package/dist/extensions/entries/autoStop.d.cts.map +1 -0
  501. package/dist/extensions/entries/autoStop.d.mts +7 -0
  502. package/dist/extensions/entries/autoStop.d.mts.map +1 -0
  503. package/dist/extensions/entries/autoStop.mjs +2 -0
  504. package/dist/extensions/entries/autoStop.mjs.map +1 -0
  505. package/dist/extensions/entries/cacheOptimizer.mjs +2 -0
  506. package/dist/extensions/entries/cacheOptimizer.mjs.map +1 -0
  507. package/dist/extensions/entries/components/matrixPicker.cjs +2 -0
  508. package/dist/extensions/entries/components/matrixPicker.cjs.map +1 -0
  509. package/dist/extensions/entries/components/matrixPicker.d.cts +55 -0
  510. package/dist/extensions/entries/components/matrixPicker.d.cts.map +1 -0
  511. package/dist/extensions/entries/components/matrixPicker.d.mts +55 -0
  512. package/dist/extensions/entries/components/matrixPicker.d.mts.map +1 -0
  513. package/dist/extensions/entries/components/matrixPicker.mjs +2 -0
  514. package/dist/extensions/entries/components/matrixPicker.mjs.map +1 -0
  515. package/dist/extensions/entries/components/skillsOverlay.cjs +4 -0
  516. package/dist/extensions/entries/components/skillsOverlay.cjs.map +1 -0
  517. package/dist/extensions/entries/components/skillsOverlay.d.cts +58 -0
  518. package/dist/extensions/entries/components/skillsOverlay.d.cts.map +1 -0
  519. package/dist/extensions/entries/components/skillsOverlay.d.mts +58 -0
  520. package/dist/extensions/entries/components/skillsOverlay.d.mts.map +1 -0
  521. package/dist/extensions/entries/components/skillsOverlay.mjs +4 -0
  522. package/dist/extensions/entries/components/skillsOverlay.mjs.map +1 -0
  523. package/dist/extensions/entries/domains.cjs +2 -0
  524. package/dist/extensions/entries/domains.cjs.map +1 -0
  525. package/dist/extensions/entries/domains.d.cts +18 -0
  526. package/dist/extensions/entries/domains.d.cts.map +1 -0
  527. package/dist/extensions/entries/domains.d.mts +18 -0
  528. package/dist/extensions/entries/domains.d.mts.map +1 -0
  529. package/dist/extensions/entries/domains.mjs +2 -0
  530. package/dist/extensions/entries/domains.mjs.map +1 -0
  531. package/dist/extensions/entries/doom.cjs +2 -0
  532. package/dist/extensions/entries/doom.cjs.map +1 -0
  533. package/dist/extensions/entries/doom.d.cts +14 -0
  534. package/dist/extensions/entries/doom.d.cts.map +1 -0
  535. package/dist/extensions/entries/doom.d.mts +14 -0
  536. package/dist/extensions/entries/doom.d.mts.map +1 -0
  537. package/dist/extensions/entries/doom.mjs +2 -0
  538. package/dist/extensions/entries/doom.mjs.map +1 -0
  539. package/dist/extensions/entries/effort.cjs +2 -0
  540. package/dist/extensions/entries/effort.cjs.map +1 -0
  541. package/dist/extensions/entries/effort.d.cts +10 -0
  542. package/dist/extensions/entries/effort.d.cts.map +1 -0
  543. package/dist/extensions/entries/effort.d.mts +10 -0
  544. package/dist/extensions/entries/effort.d.mts.map +1 -0
  545. package/dist/extensions/entries/effort.mjs +2 -0
  546. package/dist/extensions/entries/effort.mjs.map +1 -0
  547. package/dist/extensions/entries/majorMode.cjs +6 -0
  548. package/dist/extensions/entries/majorMode.cjs.map +1 -0
  549. package/dist/extensions/entries/majorMode.d.cts +27 -0
  550. package/dist/extensions/entries/majorMode.d.cts.map +1 -0
  551. package/dist/extensions/entries/majorMode.d.mts +27 -0
  552. package/dist/extensions/entries/majorMode.d.mts.map +1 -0
  553. package/dist/extensions/entries/majorMode.mjs +6 -0
  554. package/dist/extensions/entries/majorMode.mjs.map +1 -0
  555. package/dist/extensions/entries/modeCatalog.cjs +2 -0
  556. package/dist/extensions/entries/modeCatalog.cjs.map +1 -0
  557. package/dist/extensions/entries/modeCatalog.d.cts +7 -0
  558. package/dist/extensions/entries/modeCatalog.d.cts.map +1 -0
  559. package/dist/extensions/entries/modeCatalog.d.mts +7 -0
  560. package/dist/extensions/entries/modeCatalog.d.mts.map +1 -0
  561. package/dist/extensions/entries/modeCatalog.mjs +2 -0
  562. package/dist/extensions/entries/modeCatalog.mjs.map +1 -0
  563. package/dist/extensions/entries/notifications.cjs +2 -0
  564. package/dist/extensions/entries/notifications.cjs.map +1 -0
  565. package/dist/extensions/entries/notifications.d.cts +14 -0
  566. package/dist/extensions/entries/notifications.d.cts.map +1 -0
  567. package/dist/extensions/entries/notifications.d.mts +14 -0
  568. package/dist/extensions/entries/notifications.d.mts.map +1 -0
  569. package/dist/extensions/entries/notifications.mjs +2 -0
  570. package/dist/extensions/entries/notifications.mjs.map +1 -0
  571. package/dist/extensions/entries/ollamaProvider.cjs +2 -0
  572. package/dist/extensions/entries/ollamaProvider.cjs.map +1 -0
  573. package/dist/extensions/entries/ollamaProvider.d.cts +7 -0
  574. package/dist/extensions/entries/ollamaProvider.d.cts.map +1 -0
  575. package/dist/extensions/entries/ollamaProvider.d.mts +7 -0
  576. package/dist/extensions/entries/ollamaProvider.d.mts.map +1 -0
  577. package/dist/extensions/entries/ollamaProvider.mjs +2 -0
  578. package/dist/extensions/entries/ollamaProvider.mjs.map +1 -0
  579. package/dist/extensions/entries/persona.cjs +2 -0
  580. package/dist/extensions/entries/persona.cjs.map +1 -0
  581. package/dist/extensions/entries/persona.d.cts +15 -0
  582. package/dist/extensions/entries/persona.d.cts.map +1 -0
  583. package/dist/extensions/entries/persona.d.mts +15 -0
  584. package/dist/extensions/entries/persona.d.mts.map +1 -0
  585. package/dist/extensions/entries/persona.mjs +2 -0
  586. package/dist/extensions/entries/persona.mjs.map +1 -0
  587. package/dist/extensions/entries/profile.cjs +3 -0
  588. package/dist/extensions/entries/profile.cjs.map +1 -0
  589. package/dist/extensions/entries/profile.d.cts +18 -0
  590. package/dist/extensions/entries/profile.d.cts.map +1 -0
  591. package/dist/extensions/entries/profile.d.mts +18 -0
  592. package/dist/extensions/entries/profile.d.mts.map +1 -0
  593. package/dist/extensions/entries/profile.mjs +3 -0
  594. package/dist/extensions/entries/profile.mjs.map +1 -0
  595. package/dist/extensions/entries/repositoryHooks.cjs +9 -0
  596. package/dist/extensions/entries/repositoryHooks.cjs.map +1 -0
  597. package/dist/extensions/entries/repositoryHooks.d.cts +8 -0
  598. package/dist/extensions/entries/repositoryHooks.d.cts.map +1 -0
  599. package/dist/extensions/entries/repositoryHooks.d.mts +8 -0
  600. package/dist/extensions/entries/repositoryHooks.d.mts.map +1 -0
  601. package/dist/extensions/entries/repositoryHooks.mjs +9 -0
  602. package/dist/extensions/entries/repositoryHooks.mjs.map +1 -0
  603. package/dist/extensions/entries/shellTitleController.cjs +27 -0
  604. package/dist/extensions/entries/shellTitleController.cjs.map +1 -0
  605. package/dist/extensions/entries/shellTitleController.d.cts +11 -0
  606. package/dist/extensions/entries/shellTitleController.d.cts.map +1 -0
  607. package/dist/extensions/entries/shellTitleController.d.mts +11 -0
  608. package/dist/extensions/entries/shellTitleController.d.mts.map +1 -0
  609. package/dist/extensions/entries/shellTitleController.mjs +27 -0
  610. package/dist/extensions/entries/shellTitleController.mjs.map +1 -0
  611. package/dist/extensions/entries/skills.cjs +4 -0
  612. package/dist/extensions/entries/skills.cjs.map +1 -0
  613. package/dist/extensions/entries/skills.d.cts +34 -0
  614. package/dist/extensions/entries/skills.d.cts.map +1 -0
  615. package/dist/extensions/entries/skills.d.mts +34 -0
  616. package/dist/extensions/entries/skills.d.mts.map +1 -0
  617. package/dist/extensions/entries/skills.mjs +4 -0
  618. package/dist/extensions/entries/skills.mjs.map +1 -0
  619. package/dist/extensions/entries/styleSystem.cjs +4 -0
  620. package/dist/extensions/entries/styleSystem.cjs.map +1 -0
  621. package/dist/extensions/entries/styleSystem.d.cts +32 -0
  622. package/dist/extensions/entries/styleSystem.d.cts.map +1 -0
  623. package/dist/extensions/entries/styleSystem.d.mts +32 -0
  624. package/dist/extensions/entries/styleSystem.d.mts.map +1 -0
  625. package/dist/extensions/entries/styleSystem.mjs +4 -0
  626. package/dist/{entries/styleSystem.cjs.map → extensions/entries/styleSystem.mjs.map} +1 -1
  627. package/dist/extensions/pi.cjs +1 -0
  628. package/dist/extensions/pi.d.cts +2 -0
  629. package/dist/extensions/pi.d.mts +2 -0
  630. package/dist/extensions/pi.mjs +1 -0
  631. package/dist/extensions/services/domainSwitchHandoff.cjs +2 -0
  632. package/dist/extensions/services/domainSwitchHandoff.cjs.map +1 -0
  633. package/dist/extensions/services/domainSwitchHandoff.mjs +2 -0
  634. package/dist/extensions/services/domainSwitchHandoff.mjs.map +1 -0
  635. package/dist/index.cjs +1 -1
  636. package/dist/index.d.cts +33 -29
  637. package/dist/index.d.mts +33 -29
  638. package/dist/index.mjs +1 -1
  639. package/dist/logSinkTelemetry.cjs +1 -2
  640. package/dist/logSinkTelemetry.d.cts +2 -51
  641. package/dist/logSinkTelemetry.d.mts +2 -51
  642. package/dist/logSinkTelemetry.mjs +1 -2
  643. package/dist/pi-cache-optimizer-D9beVnnH.mjs +50 -0
  644. package/dist/pi-cache-optimizer-D9beVnnH.mjs.map +1 -0
  645. package/dist/schemas/domainVoiceTools.cjs +2 -0
  646. package/dist/schemas/domainVoiceTools.cjs.map +1 -0
  647. package/dist/schemas/domainVoiceTools.mjs +2 -0
  648. package/dist/schemas/domainVoiceTools.mjs.map +1 -0
  649. package/dist/schemas/majorModeVoiceTools.cjs +2 -0
  650. package/dist/schemas/majorModeVoiceTools.cjs.map +1 -0
  651. package/dist/schemas/majorModeVoiceTools.mjs +2 -0
  652. package/dist/schemas/majorModeVoiceTools.mjs.map +1 -0
  653. package/dist/services/compatibility/antigravity.cjs +1 -2
  654. package/dist/services/compatibility/antigravity.d.cts +2 -11
  655. package/dist/services/compatibility/antigravity.d.mts +2 -11
  656. package/dist/services/compatibility/antigravity.mjs +1 -2
  657. package/dist/services/compatibility/codex.cjs +1 -2
  658. package/dist/services/compatibility/codex.d.cts +2 -19
  659. package/dist/services/compatibility/codex.d.mts +2 -19
  660. package/dist/services/compatibility/codex.mjs +1 -2
  661. package/dist/services/compatibility/index.cjs +1 -2
  662. package/dist/services/compatibility/index.d.cts +6 -16
  663. package/dist/services/compatibility/index.d.mts +6 -16
  664. package/dist/services/compatibility/index.mjs +1 -2
  665. package/dist/services/compatibility/process.cjs +1 -2
  666. package/dist/services/compatibility/process.d.cts +2 -35
  667. package/dist/services/compatibility/process.d.mts +2 -35
  668. package/dist/services/compatibility/process.mjs +1 -2
  669. package/dist/services/compatibility/shared.cjs +1 -2
  670. package/dist/services/compatibility/shared.d.cts +2 -33
  671. package/dist/services/compatibility/shared.d.mts +2 -33
  672. package/dist/services/compatibility/shared.mjs +1 -2
  673. package/dist/services/compatibilityContext.cjs +1 -2
  674. package/dist/services/compatibilityContext.d.cts +2 -23
  675. package/dist/services/compatibilityContext.d.mts +2 -23
  676. package/dist/services/compatibilityContext.mjs +1 -2
  677. package/dist/services/composer.cjs +1 -2
  678. package/dist/services/composer.d.cts +4 -135
  679. package/dist/services/composer.d.mts +4 -135
  680. package/dist/services/composer.mjs +1 -2
  681. package/dist/services/config/index.cjs +1 -0
  682. package/dist/services/config/index.d.cts +7 -0
  683. package/dist/services/config/index.d.mts +7 -0
  684. package/dist/services/config/index.mjs +1 -0
  685. package/dist/services/config/projectTrust.cjs +2 -0
  686. package/dist/services/config/projectTrust.cjs.map +1 -0
  687. package/dist/services/config/projectTrust.d.cts +14 -0
  688. package/dist/services/config/projectTrust.d.cts.map +1 -0
  689. package/dist/services/config/projectTrust.d.mts +14 -0
  690. package/dist/services/config/projectTrust.d.mts.map +1 -0
  691. package/dist/services/config/projectTrust.mjs +2 -0
  692. package/dist/services/config/projectTrust.mjs.map +1 -0
  693. package/dist/services/extensionAssembler.cjs +1 -1
  694. package/dist/services/extensionAssembler.cjs.map +1 -1
  695. package/dist/services/extensionAssembler.d.cts +13 -6
  696. package/dist/services/extensionAssembler.d.cts.map +1 -1
  697. package/dist/services/extensionAssembler.d.mts +13 -6
  698. package/dist/services/extensionAssembler.d.mts.map +1 -1
  699. package/dist/services/extensionAssembler.mjs +1 -1
  700. package/dist/services/extensionAssembler.mjs.map +1 -1
  701. package/dist/services/harnessContext.cjs +1 -2
  702. package/dist/services/harnessContext.d.cts +2 -61
  703. package/dist/services/harnessContext.d.mts +2 -61
  704. package/dist/services/harnessContext.mjs +1 -2
  705. package/dist/services/index.cjs +1 -1
  706. package/dist/services/index.d.cts +18 -14
  707. package/dist/services/index.d.mts +18 -14
  708. package/dist/services/index.mjs +1 -1
  709. package/dist/services/matrixSwitcher.cjs +1 -2
  710. package/dist/services/matrixSwitcher.d.cts +2 -46
  711. package/dist/services/matrixSwitcher.d.mts +2 -46
  712. package/dist/services/matrixSwitcher.mjs +1 -2
  713. package/dist/services/mcpFilter.cjs +1 -3
  714. package/dist/services/mcpFilter.d.cts +2 -40
  715. package/dist/services/mcpFilter.d.mts +2 -40
  716. package/dist/services/mcpFilter.mjs +1 -3
  717. package/dist/services/modeCatalog.cjs +2 -0
  718. package/dist/services/modeCatalog.cjs.map +1 -0
  719. package/dist/services/modeCatalog.d.cts +18 -0
  720. package/dist/services/modeCatalog.d.cts.map +1 -0
  721. package/dist/services/modeCatalog.d.mts +18 -0
  722. package/dist/services/modeCatalog.d.mts.map +1 -0
  723. package/dist/services/modeCatalog.mjs +2 -0
  724. package/dist/services/modeCatalog.mjs.map +1 -0
  725. package/dist/services/piSettings.cjs +1 -2
  726. package/dist/services/piSettings.d.cts +2 -24
  727. package/dist/services/piSettings.d.mts +2 -24
  728. package/dist/services/piSettings.mjs +1 -2
  729. package/dist/services/resourceCollector.cjs +1 -3
  730. package/dist/services/resourceCollector.d.cts +2 -23
  731. package/dist/services/resourceCollector.d.mts +2 -23
  732. package/dist/services/resourceCollector.mjs +1 -3
  733. package/dist/services/skillCatalog.cjs +1 -2
  734. package/dist/services/skillCatalog.d.cts +2 -56
  735. package/dist/services/skillCatalog.d.mts +2 -56
  736. package/dist/services/skillCatalog.mjs +1 -2
  737. package/dist/services/skillSources.cjs +1 -2
  738. package/dist/services/skillSources.d.cts +2 -24
  739. package/dist/services/skillSources.d.mts +2 -24
  740. package/dist/services/skillSources.mjs +1 -2
  741. package/dist/services/syncState.cjs +1 -2
  742. package/dist/services/syncState.d.cts +3 -133
  743. package/dist/services/syncState.d.mts +3 -133
  744. package/dist/services/syncState.mjs +1 -2
  745. package/dist/services/tools/toolNames.cjs +2 -0
  746. package/dist/services/tools/toolNames.cjs.map +1 -0
  747. package/dist/services/tools/toolNames.d.cts +25 -0
  748. package/dist/services/tools/toolNames.d.cts.map +1 -0
  749. package/dist/services/tools/toolNames.d.mts +25 -0
  750. package/dist/services/tools/toolNames.d.mts.map +1 -0
  751. package/dist/services/tools/toolNames.mjs +2 -0
  752. package/dist/services/tools/toolNames.mjs.map +1 -0
  753. package/dist/{interfaces → types/interfaces}/compatibility.d.cts +1 -1
  754. package/dist/types/interfaces/compatibility.d.cts.map +1 -0
  755. package/dist/{interfaces → types/interfaces}/compatibility.d.mts +1 -1
  756. package/dist/types/interfaces/compatibility.d.mts.map +1 -0
  757. package/dist/{interfaces → types/interfaces}/harness.d.cts +6 -2
  758. package/dist/types/interfaces/harness.d.cts.map +1 -0
  759. package/dist/{interfaces → types/interfaces}/harness.d.mts +6 -2
  760. package/dist/types/interfaces/harness.d.mts.map +1 -0
  761. package/dist/utils/index.cjs +1 -1
  762. package/dist/utils/index.d.cts +5 -5
  763. package/dist/utils/index.d.mts +5 -5
  764. package/dist/utils/index.mjs +1 -1
  765. package/dist/utils/json.cjs +1 -2
  766. package/dist/utils/json.d.cts +2 -23
  767. package/dist/utils/json.d.mts +2 -23
  768. package/dist/utils/json.mjs +1 -2
  769. package/dist/utils/moduleResolution.cjs +1 -2
  770. package/dist/utils/moduleResolution.d.cts +2 -56
  771. package/dist/utils/moduleResolution.d.mts +2 -56
  772. package/dist/utils/moduleResolution.mjs +1 -2
  773. package/dist/utils/repository.cjs +1 -2
  774. package/dist/utils/repository.d.cts +2 -21
  775. package/dist/utils/repository.d.mts +2 -21
  776. package/dist/utils/repository.mjs +1 -2
  777. package/dist/utils/toolNames.cjs +1 -2
  778. package/dist/utils/toolNames.d.cts +2 -25
  779. package/dist/utils/toolNames.d.mts +2 -25
  780. package/dist/utils/toolNames.mjs +1 -2
  781. package/package.json +59 -37
  782. package/dist/cli/cliApp.cjs.map +0 -1
  783. package/dist/cli/cliApp.d.cts.map +0 -1
  784. package/dist/cli/cliApp.d.mts.map +0 -1
  785. package/dist/cli/cliApp.mjs.map +0 -1
  786. package/dist/cli/compatibilityOptions.cjs.map +0 -1
  787. package/dist/cli/compatibilityOptions.d.cts.map +0 -1
  788. package/dist/cli/compatibilityOptions.d.mts.map +0 -1
  789. package/dist/cli/compatibilityOptions.mjs.map +0 -1
  790. package/dist/cli/help.d.cts.map +0 -1
  791. package/dist/cli/help.d.mts.map +0 -1
  792. package/dist/cli/matrixOptions.cjs.map +0 -1
  793. package/dist/cli/matrixOptions.d.cts.map +0 -1
  794. package/dist/cli/matrixOptions.d.mts.map +0 -1
  795. package/dist/cli/matrixOptions.mjs.map +0 -1
  796. package/dist/cli/options.cjs.map +0 -1
  797. package/dist/cli/options.d.cts.map +0 -1
  798. package/dist/cli/options.d.mts.map +0 -1
  799. package/dist/cli/options.mjs.map +0 -1
  800. package/dist/commands/buildCommand.d.cts +0 -23
  801. package/dist/commands/buildCommand.d.cts.map +0 -1
  802. package/dist/commands/buildCommand.d.mts +0 -23
  803. package/dist/commands/buildCommand.d.mts.map +0 -1
  804. package/dist/config/harnessState.cjs.map +0 -1
  805. package/dist/config/harnessState.d.cts.map +0 -1
  806. package/dist/config/harnessState.d.mts.map +0 -1
  807. package/dist/config/harnessState.mjs.map +0 -1
  808. package/dist/config/projectTrust.cjs.map +0 -1
  809. package/dist/config/projectTrust.d.cts.map +0 -1
  810. package/dist/config/projectTrust.d.mts.map +0 -1
  811. package/dist/config/projectTrust.mjs.map +0 -1
  812. package/dist/entries/addDirCompatibility.cjs +0 -2
  813. package/dist/entries/addDirCompatibility.cjs.map +0 -1
  814. package/dist/entries/addDirCompatibility.d.cts +0 -13
  815. package/dist/entries/addDirCompatibility.d.cts.map +0 -1
  816. package/dist/entries/addDirCompatibility.d.mts +0 -14
  817. package/dist/entries/addDirCompatibility.d.mts.map +0 -1
  818. package/dist/entries/addDirCompatibility.mjs +0 -2
  819. package/dist/entries/addDirCompatibility.mjs.map +0 -1
  820. package/dist/entries/autoStop.cjs.map +0 -1
  821. package/dist/entries/autoStop.d.cts.map +0 -1
  822. package/dist/entries/autoStop.d.mts.map +0 -1
  823. package/dist/entries/autoStop.mjs.map +0 -1
  824. package/dist/entries/components/matrixPicker.cjs.map +0 -1
  825. package/dist/entries/components/matrixPicker.d.cts.map +0 -1
  826. package/dist/entries/components/matrixPicker.d.mts.map +0 -1
  827. package/dist/entries/components/matrixPicker.mjs.map +0 -1
  828. package/dist/entries/components/skillsOverlay.cjs.map +0 -1
  829. package/dist/entries/components/skillsOverlay.d.cts.map +0 -1
  830. package/dist/entries/components/skillsOverlay.d.mts.map +0 -1
  831. package/dist/entries/components/skillsOverlay.mjs.map +0 -1
  832. package/dist/entries/domains.cjs.map +0 -1
  833. package/dist/entries/domains.d.cts.map +0 -1
  834. package/dist/entries/domains.d.mts.map +0 -1
  835. package/dist/entries/domains.mjs.map +0 -1
  836. package/dist/entries/doom.cjs.map +0 -1
  837. package/dist/entries/doom.d.cts.map +0 -1
  838. package/dist/entries/doom.d.mts.map +0 -1
  839. package/dist/entries/doom.mjs.map +0 -1
  840. package/dist/entries/effort.cjs.map +0 -1
  841. package/dist/entries/effort.d.cts.map +0 -1
  842. package/dist/entries/effort.d.mts.map +0 -1
  843. package/dist/entries/effort.mjs.map +0 -1
  844. package/dist/entries/majorMode.cjs.map +0 -1
  845. package/dist/entries/majorMode.d.cts.map +0 -1
  846. package/dist/entries/majorMode.d.mts.map +0 -1
  847. package/dist/entries/majorMode.mjs.map +0 -1
  848. package/dist/entries/notifications.cjs.map +0 -1
  849. package/dist/entries/notifications.d.cts.map +0 -1
  850. package/dist/entries/notifications.d.mts.map +0 -1
  851. package/dist/entries/notifications.mjs.map +0 -1
  852. package/dist/entries/ollamaProvider.cjs.map +0 -1
  853. package/dist/entries/ollamaProvider.d.cts.map +0 -1
  854. package/dist/entries/ollamaProvider.d.mts.map +0 -1
  855. package/dist/entries/ollamaProvider.mjs.map +0 -1
  856. package/dist/entries/persona.cjs.map +0 -1
  857. package/dist/entries/persona.d.cts.map +0 -1
  858. package/dist/entries/persona.d.mts.map +0 -1
  859. package/dist/entries/persona.mjs.map +0 -1
  860. package/dist/entries/profile.cjs.map +0 -1
  861. package/dist/entries/profile.d.cts.map +0 -1
  862. package/dist/entries/profile.d.mts.map +0 -1
  863. package/dist/entries/profile.mjs.map +0 -1
  864. package/dist/entries/repositoryHooks.cjs.map +0 -1
  865. package/dist/entries/repositoryHooks.d.cts.map +0 -1
  866. package/dist/entries/repositoryHooks.d.mts.map +0 -1
  867. package/dist/entries/repositoryHooks.mjs.map +0 -1
  868. package/dist/entries/skills.cjs.map +0 -1
  869. package/dist/entries/skills.d.cts.map +0 -1
  870. package/dist/entries/skills.d.mts.map +0 -1
  871. package/dist/entries/skills.mjs.map +0 -1
  872. package/dist/entries/styleSystem.d.cts.map +0 -1
  873. package/dist/entries/styleSystem.d.mts.map +0 -1
  874. package/dist/entries/styleSystem.mjs.map +0 -1
  875. package/dist/interfaces/compatibility.d.cts.map +0 -1
  876. package/dist/interfaces/compatibility.d.mts.map +0 -1
  877. package/dist/interfaces/harness.d.cts.map +0 -1
  878. package/dist/interfaces/harness.d.mts.map +0 -1
  879. package/dist/logSinkTelemetry.cjs.map +0 -1
  880. package/dist/logSinkTelemetry.d.cts.map +0 -1
  881. package/dist/logSinkTelemetry.d.mts.map +0 -1
  882. package/dist/logSinkTelemetry.mjs.map +0 -1
  883. package/dist/node_modules/.pnpm/@juicesharp_rpiv-ask-user-question@2.2.0_@earendil-works_pi-coding-agent@0.84.1_support_6ba1249e24a50b62791c1c91c9f324c6/node_modules/@juicesharp/rpiv-ask-user-question/events.cjs +0 -2
  884. package/dist/node_modules/.pnpm/@juicesharp_rpiv-ask-user-question@2.2.0_@earendil-works_pi-coding-agent@0.84.1_support_6ba1249e24a50b62791c1c91c9f324c6/node_modules/@juicesharp/rpiv-ask-user-question/events.cjs.map +0 -1
  885. package/dist/node_modules/.pnpm/@juicesharp_rpiv-ask-user-question@2.2.0_@earendil-works_pi-coding-agent@0.84.1_support_6ba1249e24a50b62791c1c91c9f324c6/node_modules/@juicesharp/rpiv-ask-user-question/events.mjs +0 -2
  886. package/dist/node_modules/.pnpm/@juicesharp_rpiv-ask-user-question@2.2.0_@earendil-works_pi-coding-agent@0.84.1_support_6ba1249e24a50b62791c1c91c9f324c6/node_modules/@juicesharp/rpiv-ask-user-question/events.mjs.map +0 -1
  887. package/dist/services/compatibility/index.cjs.map +0 -1
  888. package/dist/services/compatibility/index.mjs.map +0 -1
  889. package/dist/services/compatibilityContext.cjs.map +0 -1
  890. package/dist/services/compatibilityContext.mjs.map +0 -1
  891. package/dist/services/composer.cjs.map +0 -1
  892. package/dist/services/composer.d.cts.map +0 -1
  893. package/dist/services/composer.d.mts.map +0 -1
  894. package/dist/services/composer.mjs.map +0 -1
  895. package/dist/services/extensionCompiler.cjs +0 -3
  896. package/dist/services/extensionCompiler.cjs.map +0 -1
  897. package/dist/services/extensionCompiler.mjs +0 -3
  898. package/dist/services/extensionCompiler.mjs.map +0 -1
  899. package/dist/services/harnessContext.cjs.map +0 -1
  900. package/dist/services/harnessContext.mjs.map +0 -1
  901. package/dist/services/matrixSwitcher.cjs.map +0 -1
  902. package/dist/services/matrixSwitcher.mjs.map +0 -1
  903. package/dist/services/mcpFilter.cjs.map +0 -1
  904. package/dist/services/mcpFilter.d.cts.map +0 -1
  905. package/dist/services/mcpFilter.d.mts.map +0 -1
  906. package/dist/services/mcpFilter.mjs.map +0 -1
  907. package/dist/services/piSettings.cjs.map +0 -1
  908. package/dist/services/piSettings.d.cts.map +0 -1
  909. package/dist/services/piSettings.d.mts.map +0 -1
  910. package/dist/services/piSettings.mjs.map +0 -1
  911. package/dist/services/resourceCollector.cjs.map +0 -1
  912. package/dist/services/resourceCollector.d.cts.map +0 -1
  913. package/dist/services/resourceCollector.d.mts.map +0 -1
  914. package/dist/services/resourceCollector.mjs.map +0 -1
  915. package/dist/services/runtimeBundle.cjs +0 -2
  916. package/dist/services/runtimeBundle.cjs.map +0 -1
  917. package/dist/services/runtimeBundle.d.cts.map +0 -1
  918. package/dist/services/runtimeBundle.d.mts.map +0 -1
  919. package/dist/services/runtimeBundle.mjs +0 -2
  920. package/dist/services/runtimeBundle.mjs.map +0 -1
  921. package/dist/services/skillCatalog.cjs.map +0 -1
  922. package/dist/services/skillCatalog.d.cts.map +0 -1
  923. package/dist/services/skillCatalog.d.mts.map +0 -1
  924. package/dist/services/skillCatalog.mjs.map +0 -1
  925. package/dist/services/syncState.cjs.map +0 -1
  926. package/dist/services/syncState.d.cts.map +0 -1
  927. package/dist/services/syncState.d.mts.map +0 -1
  928. package/dist/services/syncState.mjs.map +0 -1
  929. package/dist/utils/json.cjs.map +0 -1
  930. package/dist/utils/json.d.cts.map +0 -1
  931. package/dist/utils/json.d.mts.map +0 -1
  932. package/dist/utils/json.mjs.map +0 -1
  933. package/dist/utils/moduleResolution.cjs.map +0 -1
  934. package/dist/utils/moduleResolution.d.cts.map +0 -1
  935. package/dist/utils/moduleResolution.d.mts.map +0 -1
  936. package/dist/utils/moduleResolution.mjs.map +0 -1
  937. package/dist/utils/repository.cjs.map +0 -1
  938. package/dist/utils/repository.d.cts.map +0 -1
  939. package/dist/utils/repository.d.mts.map +0 -1
  940. package/dist/utils/repository.mjs.map +0 -1
  941. package/dist/utils/toolNames.cjs.map +0 -1
  942. package/dist/utils/toolNames.d.cts.map +0 -1
  943. package/dist/utils/toolNames.d.mts.map +0 -1
  944. package/dist/utils/toolNames.mjs.map +0 -1
@@ -1,10 +1,11 @@
1
+ import { InitOutput } from "./initPresenter.mjs";
2
+
1
3
  //#region src/commands/initCommand.d.ts
2
- type InitOutput = Pick<NodeJS.WritableStream, 'write'>;
3
- /** Handles the repository-independent `doom-pi init` command. */
4
+ /** Handles the repository-independent `doompi init` command. */
4
5
  declare class InitCommand {
5
6
  readonly name = "init";
6
7
  matches(args: string[]): boolean;
7
- execute(args: string[], homeDirectory?: string, output?: InitOutput): Promise<number>;
8
+ execute(args: string[], homeDirectory?: string, output?: InitOutput, environment?: NodeJS.ProcessEnv): Promise<number>;
8
9
  }
9
10
  //#endregion
10
11
  export { InitCommand };
@@ -1 +1 @@
1
- {"version":3,"file":"initCommand.d.mts","names":[],"sources":["../../src/commands/initCommand.ts"],"mappings":";KAOK,UAAA,GAAa,IAAA,CAAK,MAAA,CAAO,cAAA;;cAkBjB,WAAA;EAAA,SACF,IAAA;EAET,OAAA,CAAQ,IAAA;EAIF,OAAA,CAAQ,IAAA,YAAgB,aAAA,WAA8B,MAAA,GAAQ,UAAA,GAA8B,OAAA;AAAA"}
1
+ {"version":3,"file":"initCommand.d.mts","names":[],"sources":["../../src/commands/initCommand.ts"],"mappings":";;;;cA0Ca,WAAA;EAAA,SACF,IAAA;EAET,OAAA,CAAQ,IAAA;EAIF,OAAA,CACJ,IAAA,YACA,aAAA,WACA,MAAA,GAAQ,UAAA,EACR,WAAA,GAAa,MAAA,CAAO,UAAA,GACnB,OAAA;AAAA"}
@@ -1,3 +1,2 @@
1
- import{initializeGlobalDoomConfig as e}from"@agimon-ai/doompi-config";import t from"node:os";const n=`--force`;function r(e){return e.length===0?`(none)`:e.join(`, `)}function i(e){let t=[`Doom config directory: ${e.directory}`,`Created: ${r(e.created)}`,`Preserved: ${r(e.preserved)}`];return e.replaced.length>0&&t.push(`Replaced: ${r(e.replaced)}`),t.join(`
2
- `)}var a=class{name=`init`;matches(e){return e[0]===this.name}async execute(r,a=t.homedir(),o=process.stdout){let s=r.slice(1),c=s.find(e=>e!==n);if(c!==void 0)throw Error(`doompi init does not accept ${c}`);let l=e(a,{force:s.includes(n)});return o.write(`${i(l)}\n`),0}};export{a as InitCommand};
1
+ import{DEFAULT_THEME_NAME as e,writeDefaultTheme as t}from"../services/config/index.mjs";import{piAgentDirectory as n,piThemeDirectory as r,readPiSettings as i,writePiSettings as a}from"../adapters/piSettings.mjs";import{writePiExtensionAlias as o}from"../adapters/piExtensionAlias.mjs";import{InitPresenter as s}from"./initPresenter.mjs";import c from"node:fs";import l from"node:os";import{globalDoomConfigDirectory as u,initializeGlobalDoomConfig as d}from"@agimon-ai/doompi-config";const f=`--force`;function p(e,t,n){let r=n instanceof Error?n.message:String(n);return Error(`doompi init failed while ${e} at ${t}: ${r}`,{cause:n})}async function m(s,l){let u=n(l,s),d=i(u),f=r(u);await c.promises.mkdir(f,{recursive:!0});let p=await t(f),m=o(u);return{settingsPath:a(u,{themePath:p,themeName:e}),themePath:p,aliasPath:m,before:d,after:i(u)}}var h=class{name=`init`;matches(e){return e[0]===this.name}async execute(e,t=l.homedir(),r=process.stdout,i=process.env){let a=e.slice(1),o=a.find(e=>e!==f);if(o!==void 0)throw Error(`doompi init does not accept ${o}`);let c=new s(r,i);c.brand();let h=u(t);c.stage(1,2,`WRITE CONFIGURATION`,h);let g;try{g=d(t,{force:a.includes(f)}),c.stageReady(`Configuration files are ready.`)}catch(e){throw c.stageFailed(`Configuration setup failed.`,[`Fix the reported path or permissions, then run doompi init again.`]),p(`writing configuration`,h,e)}let _=n(i,t);c.stage(2,2,`REGISTER WITH PI`,_);let v;try{v=await m(t,i),c.stageReady(`Pi integration is ready.`)}catch(e){throw c.stageFailed(`Pi integration failed.`,[`Your DoomPi configuration remains at ${g.directory}.`,`Fix the reported settings or filesystem issue, then run doompi init again.`]),p(`registering with Pi`,_,e)}return c.complete(g,v),0}};export{h as InitCommand};
3
2
  //# sourceMappingURL=initCommand.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"initCommand.mjs","names":[],"sources":["../../src/commands/initCommand.ts"],"sourcesContent":["import os from 'node:os';\nimport { initializeGlobalDoomConfig, type GlobalDoomInitResult } from '@agimon-ai/doompi-config';\n\nconst INIT_COMMAND = 'init';\nconst EMPTY_FILE_LIST = '(none)';\nconst FORCE_FLAG = '--force';\n\ntype InitOutput = Pick<NodeJS.WritableStream, 'write'>;\n\nfunction formatFileNames(fileNames: readonly string[]): string {\n return fileNames.length === 0 ? EMPTY_FILE_LIST : fileNames.join(', ');\n}\n\nfunction formatInitResult(result: GlobalDoomInitResult): string {\n const lines = [\n `Doom config directory: ${result.directory}`,\n `Created: ${formatFileNames(result.created)}`,\n `Preserved: ${formatFileNames(result.preserved)}`,\n ];\n // Only meaningful under --force, and silence would hide a destructive run.\n if (result.replaced.length > 0) lines.push(`Replaced: ${formatFileNames(result.replaced)}`);\n return lines.join('\\n');\n}\n\n/** Handles the repository-independent `doom-pi init` command. */\nexport class InitCommand {\n readonly name = INIT_COMMAND;\n\n matches(args: string[]): boolean {\n return args[0] === this.name;\n }\n\n async execute(args: string[], homeDirectory = os.homedir(), output: InitOutput = process.stdout): Promise<number> {\n const flags = args.slice(1);\n const unknown = flags.find((flag) => flag !== FORCE_FLAG);\n if (unknown !== undefined) throw new Error(`doompi init does not accept ${unknown}`);\n\n const result = initializeGlobalDoomConfig(homeDirectory, { force: flags.includes(FORCE_FLAG) });\n output.write(`${formatInitResult(result)}\\n`);\n return 0;\n }\n}\n"],"mappings":"6FAGA,MAEM,EAAa,UAInB,SAAS,EAAgB,EAAsC,CAC7D,OAAO,EAAU,SAAW,EAAI,SAAkB,EAAU,KAAK,KAAK,CAGxE,SAAS,EAAiB,EAAsC,CAC9D,IAAM,EAAQ,CACZ,0BAA0B,EAAO,YACjC,YAAY,EAAgB,EAAO,QAAQ,GAC3C,cAAc,EAAgB,EAAO,UAAU,GAChD,CAGD,OADI,EAAO,SAAS,OAAS,GAAG,EAAM,KAAK,aAAa,EAAgB,EAAO,SAAS,GAAG,CACpF,EAAM,KAAK;EAAK,CAIzB,IAAa,EAAb,KAAyB,CACvB,KAAgB,OAEhB,QAAQ,EAAyB,CAC/B,OAAO,EAAK,KAAO,KAAK,KAG1B,MAAM,QAAQ,EAAgB,EAAgB,EAAG,SAAS,CAAE,EAAqB,QAAQ,OAAyB,CAChH,IAAM,EAAQ,EAAK,MAAM,EAAE,CACrB,EAAU,EAAM,KAAM,GAAS,IAAS,EAAW,CACzD,GAAI,IAAY,IAAA,GAAW,MAAU,MAAM,+BAA+B,IAAU,CAEpF,IAAM,EAAS,EAA2B,EAAe,CAAE,MAAO,EAAM,SAAS,EAAW,CAAE,CAAC,CAE/F,OADA,EAAO,MAAM,GAAG,EAAiB,EAAO,CAAC,IAAI,CACtC"}
1
+ {"version":3,"file":"initCommand.mjs","names":[],"sources":["../../src/commands/initCommand.ts"],"sourcesContent":["import fs from 'node:fs';\nimport os from 'node:os';\nimport {\n type GlobalDoomInitResult,\n globalDoomConfigDirectory,\n initializeGlobalDoomConfig,\n} from '@agimon-ai/doompi-config';\nimport { writePiExtensionAlias } from '../adapters/piExtensionAlias.ts';\nimport { piAgentDirectory, piThemeDirectory, readPiSettings, writePiSettings } from '../adapters/piSettings.ts';\nimport { DEFAULT_THEME_NAME, writeDefaultTheme } from '../services/config/index.ts';\nimport { InitPresenter, type InitOutput, type PiIntegrationSummary } from './initPresenter.ts';\n\nconst INIT_COMMAND = 'init';\nconst FORCE_FLAG = '--force';\nconst SETUP_STAGE_COUNT = 2;\n\nfunction setupFailure(activity: string, target: string, error: unknown): Error {\n const detail = error instanceof Error ? error.message : String(error);\n return new Error(`doompi init failed while ${activity} at ${target}: ${detail}`, { cause: error });\n}\n\nasync function initializePiIntegration(\n homeDirectory: string,\n environment: NodeJS.ProcessEnv,\n): Promise<PiIntegrationSummary> {\n const agentDirectory = piAgentDirectory(environment, homeDirectory);\n const before = readPiSettings(agentDirectory);\n const themeDirectory = piThemeDirectory(agentDirectory);\n await fs.promises.mkdir(themeDirectory, { recursive: true });\n const themePath = await writeDefaultTheme(themeDirectory);\n const aliasPath = writePiExtensionAlias(agentDirectory);\n const settingsPath = writePiSettings(agentDirectory, { themePath, themeName: DEFAULT_THEME_NAME });\n return {\n settingsPath,\n themePath,\n aliasPath,\n before,\n after: readPiSettings(agentDirectory),\n };\n}\n\n/** Handles the repository-independent `doompi init` command. */\nexport class InitCommand {\n readonly name = INIT_COMMAND;\n\n matches(args: string[]): boolean {\n return args[0] === this.name;\n }\n\n async execute(\n args: string[],\n homeDirectory = os.homedir(),\n output: InitOutput = process.stdout,\n environment: NodeJS.ProcessEnv = process.env,\n ): Promise<number> {\n const flags = args.slice(1);\n const unknown = flags.find((flag) => flag !== FORCE_FLAG);\n if (unknown !== undefined) throw new Error(`doompi init does not accept ${unknown}`);\n\n const presenter = new InitPresenter(output, environment);\n presenter.brand();\n\n const configDirectory = globalDoomConfigDirectory(homeDirectory);\n presenter.stage(1, SETUP_STAGE_COUNT, 'WRITE CONFIGURATION', configDirectory);\n let configResult: GlobalDoomInitResult;\n try {\n configResult = initializeGlobalDoomConfig(homeDirectory, { force: flags.includes(FORCE_FLAG) });\n presenter.stageReady('Configuration files are ready.');\n } catch (error) {\n presenter.stageFailed('Configuration setup failed.', [\n 'Fix the reported path or permissions, then run doompi init again.',\n ]);\n throw setupFailure('writing configuration', configDirectory, error);\n }\n\n const agentDirectory = piAgentDirectory(environment, homeDirectory);\n presenter.stage(2, SETUP_STAGE_COUNT, 'REGISTER WITH PI', agentDirectory);\n let piResult: PiIntegrationSummary;\n try {\n piResult = await initializePiIntegration(homeDirectory, environment);\n presenter.stageReady('Pi integration is ready.');\n } catch (error) {\n presenter.stageFailed('Pi integration failed.', [\n `Your DoomPi configuration remains at ${configResult.directory}.`,\n 'Fix the reported settings or filesystem issue, then run doompi init again.',\n ]);\n throw setupFailure('registering with Pi', agentDirectory, error);\n }\n\n presenter.complete(configResult, piResult);\n return 0;\n }\n}\n"],"mappings":"seAYA,MACM,EAAa,UAGnB,SAAS,EAAa,EAAkB,EAAgB,EAAuB,CAC7E,IAAM,EAAS,aAAiB,MAAQ,EAAM,QAAU,OAAO,EAAM,CACrE,OAAW,MAAM,4BAA4B,EAAS,MAAM,EAAO,IAAI,IAAU,CAAE,MAAO,EAAO,CAAC,CAGpG,eAAe,EACb,EACA,EAC+B,CAC/B,IAAM,EAAiB,EAAiB,EAAa,EAAc,CAC7D,EAAS,EAAe,EAAe,CACvC,EAAiB,EAAiB,EAAe,CACvD,MAAM,EAAG,SAAS,MAAM,EAAgB,CAAE,UAAW,GAAM,CAAC,CAC5D,IAAM,EAAY,MAAM,EAAkB,EAAe,CACnD,EAAY,EAAsB,EAAe,CAEvD,MAAO,CACL,aAFmB,EAAgB,EAAgB,CAAE,YAAW,UAAW,EAAoB,CAEnF,CACZ,YACA,YACA,SACA,MAAO,EAAe,EAAe,CACtC,CAIH,IAAa,EAAb,KAAyB,CACvB,KAAgB,OAEhB,QAAQ,EAAyB,CAC/B,OAAO,EAAK,KAAO,KAAK,KAG1B,MAAM,QACJ,EACA,EAAgB,EAAG,SAAS,CAC5B,EAAqB,QAAQ,OAC7B,EAAiC,QAAQ,IACxB,CACjB,IAAM,EAAQ,EAAK,MAAM,EAAE,CACrB,EAAU,EAAM,KAAM,GAAS,IAAS,EAAW,CACzD,GAAI,IAAY,IAAA,GAAW,MAAU,MAAM,+BAA+B,IAAU,CAEpF,IAAM,EAAY,IAAI,EAAc,EAAQ,EAAY,CACxD,EAAU,OAAO,CAEjB,IAAM,EAAkB,EAA0B,EAAc,CAChE,EAAU,MAAM,EAAG,EAAmB,sBAAuB,EAAgB,CAC7E,IAAI,EACJ,GAAI,CACF,EAAe,EAA2B,EAAe,CAAE,MAAO,EAAM,SAAS,EAAW,CAAE,CAAC,CAC/F,EAAU,WAAW,iCAAiC,OAC/C,EAAO,CAId,MAHA,EAAU,YAAY,8BAA+B,CACnD,oEACD,CAAC,CACI,EAAa,wBAAyB,EAAiB,EAAM,CAGrE,IAAM,EAAiB,EAAiB,EAAa,EAAc,CACnE,EAAU,MAAM,EAAG,EAAmB,mBAAoB,EAAe,CACzE,IAAI,EACJ,GAAI,CACF,EAAW,MAAM,EAAwB,EAAe,EAAY,CACpE,EAAU,WAAW,2BAA2B,OACzC,EAAO,CAKd,MAJA,EAAU,YAAY,yBAA0B,CAC9C,wCAAwC,EAAa,UAAU,GAC/D,6EACD,CAAC,CACI,EAAa,sBAAuB,EAAgB,EAAM,CAIlE,OADA,EAAU,SAAS,EAAc,EAAS,CACnC"}
@@ -0,0 +1,3 @@
1
+ require(`../_virtual/_rolldown/runtime.cjs`),require(`../services/config/index.cjs`);const e=require(`../adapters/piSettings.cjs`);let t=require(`@agimon-ai/doompi-config`),n=require(`@agimon-ai/doompi-ui/theme`);const r=`─`.repeat(72),i=`━━━━━━━━`,a=[`extensions`,`themes`,`theme`,`quietStartup`],o={"config.yaml":`project trust and optional voice defaults`,"modes.yaml":`layers, packages, and the default major mode`,"domains.yaml":`plugin catalog, domain groups, and aliases`,"profiles.yaml":`profile roots, personas, and string environment defaults`};function s(e,t){let n=t.FORCE_COLOR;return n===`0`?!1:n===void 0?t.NO_COLOR===void 0?e.isTTY===!0&&t.TERM!==`dumb`:!1:!0}function c(e,t){let n=Number.parseInt(t.slice(1),16),r=n>>16&255,i=n>>8&255,a=n&255;return`${String(e)};2;${String(r)};${String(i)};${String(a)}`}function l(e,t,n={}){if(!e)return e=>e;let r=[c(38,t)];n.background&&r.push(c(48,n.background)),n.bold&&r.unshift(`1`);let i=`[${r.join(`;`)}m`;return e=>`${i}${e}`}function u(e){let{vars:t}=n.DEFAULT_THEME,r=l(e,t.blue),i=l(e,t.bg,{background:t.blue,bold:!0});return{accent:r,badge:e?e=>i(` ${e} `):e=>e,error:l(e,t.red,{bold:!0}),heading:l(e,t.magenta,{bold:!0}),key:l(e,t.cyan),kept:l(e,t.violet),muted:l(e,t.comment),path:l(e,t.cyan),strong:l(e,t.fg,{bold:!0}),success:l(e,t.green,{bold:!0}),warning:l(e,t.yellow)}}function d(e,t){if(e.created.includes(t))return`CREATED`;if(e.replaced.includes(t))return`REPLACED`;if(e.preserved.includes(t))return`KEPT`;throw Error(`doompi init did not classify generated file: ${t}`)}function f(e){if(Array.isArray(e))return e.find(e=>typeof e==`string`)}var p=class{output;palette;constructor(e,t){this.output=e,this.palette=u(s(e,t))}brand(){let e=this.palette;this.write([e.muted(`BOOT / INIT`),`${e.accent(`DOOM`)} ${e.badge(`PI`)} ${e.heading(`INITIALIZE`)}`,e.muted(`Pi, configured for focus.`),`${e.accent(i)} ${e.heading(`SETUP`)}`,``])}stage(e,t,n,r){let i=this.palette;this.write([`${i.accent(`[${String(e)}/${String(t)}]`)} ${i.strong(n)}`,` ${i.muted(`TARGET`)} ${i.path(r)}`])}stageReady(e){this.write([` ${this.palette.success(`● READY`)} ${e}`])}stageFailed(e,t){this.write([` ${this.palette.error(`● FAILED`)} ${e}`,...t.map(e=>` ${this.palette.warning(e)}`)])}complete(e,t){this.write([``,...this.formatPiIntegration(t)]),this.write([``,...this.formatConfigResult(e)]),this.write([``,this.sectionHeading(`NEXT`),` ${this.palette.accent(`01`)} Open ${this.palette.path(e.directory)}.`,` ${this.palette.accent(`02`)} Edit the YAML files to match how you want Pi to work.`,` ${this.palette.accent(`03`)} From the repository you want to configure, run:`,``,` ${this.palette.badge(`doompi sync`)}`,``,`${this.palette.success(i)} ${this.palette.success(`READY`)} Edit your config, then sync it.`])}formatPiIntegration(t){let r=a.filter(e=>this.settingsValueChanged(t,e)),i=typeof t.after.theme==`string`?t.after.theme:n.DEFAULT_THEME_NAME,o=i===n.DEFAULT_THEME_NAME?`selected ${this.palette.path(`"${n.DEFAULT_THEME_NAME}"`)} when no prior theme was set`:`kept your existing selection ${this.palette.path(`"${i}"`)}`,s=f(t.after.themes)??t.themePath,c=r.length===0?this.palette.success(`No settings edits were needed; DoomPi entries were already current.`):`${this.palette.warning(`Updated ${String(r.length)} managed key${r.length===1?``:`s`}.`)} ${this.palette.muted(`Unrelated settings were preserved.`)}`;return[this.sectionHeading(`PI GLOBAL SETTINGS`),` ${this.palette.path(t.settingsPath)}`,` ${this.palette.muted(`Pi defaults to ~/.pi/agent/settings.json and honors PI_CODING_AGENT_DIR.`)}`,` ${c}`,this.settingLine(t,`extensions`,`load ${this.palette.path(`"${e.DOOM_EXTENSION}"`)} first; ${this.palette.path(`"${e.AMBIENT_EXTENSION_FILTER}"`)} keeps layer loading explicit`),this.settingLine(t,`themes`,`registered ${this.palette.path(`"${s}"`)}`),this.settingLine(t,`theme`,o),this.settingLine(t,`quietStartup`,`true for a concise Pi startup`),` ${this.palette.muted(`RESOURCES`)}`,` ${this.palette.muted(`ALIAS`.padEnd(7))}${this.palette.path(t.aliasPath)}`,` ${this.palette.muted(`THEME`.padEnd(7))}${this.palette.path(t.themePath)}`]}formatConfigResult(e){let n=[this.sectionHeading(`DOOMPI CONFIGURATION`),` ${this.palette.path(e.directory)}`,...t.GLOBAL_DOOM_SEED_FILES.map(t=>{let n=d(e,t);return` ${this.fileStatus(n)} ${this.palette.key(t.padEnd(13))} ${this.palette.muted(`—`)} ${o[t]}`})];return e.preserved.length>0&&n.push(` ${this.palette.kept(`KEPT`)} ${this.palette.muted(`files retain your existing edits.`)}`),e.replaced.length>0&&n.push(` ${this.palette.warning(`REPLACED`)} ${this.palette.muted(`files were restored from the templates because --force was used.`)}`),n}settingLine(e,t,n){return` ${this.settingsValueChanged(e,t)?this.palette.warning(`UPDATED`.padEnd(8)):this.palette.success(`READY`.padEnd(8))} ${this.palette.key(`${t}:`.padEnd(14))}${n}`}settingsValueChanged(e,t){return JSON.stringify(e.before[t])!==JSON.stringify(e.after[t])}fileStatus(e){let t=e.padEnd(8);return e===`CREATED`?this.palette.accent(t):e===`REPLACED`?this.palette.warning(t):this.palette.kept(t)}sectionHeading(e){return`${this.palette.muted(r)}\n${this.palette.heading(e)}`}write(e){this.output.write(`${e.join(`
2
+ `)}\n`)}};exports.InitPresenter=p;
3
+ //# sourceMappingURL=initPresenter.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"initPresenter.cjs","names":["DEFAULT_THEME","DEFAULT_THEME_NAME","DOOM_EXTENSION","AMBIENT_EXTENSION_FILTER","GLOBAL_DOOM_SEED_FILES"],"sources":["../../src/commands/initPresenter.ts"],"sourcesContent":["import { GLOBAL_DOOM_SEED_FILES, type GlobalDoomInitResult } from '@agimon-ai/doompi-config';\nimport { AMBIENT_EXTENSION_FILTER, DOOM_EXTENSION } from '../adapters/piSettings.ts';\nimport { DEFAULT_THEME, DEFAULT_THEME_NAME } from '../services/config/index.ts';\n\nconst FORCE_COLOR_ENV = 'FORCE_COLOR';\nconst NO_COLOR_ENV = 'NO_COLOR';\nconst DUMB_TERMINAL = 'dumb';\nconst ANSI_PREFIX = '\\u001B[';\nconst ANSI_RESET = `${ANSI_PREFIX}0m`;\nconst SECTION_RULE = '─'.repeat(72);\nconst READY_RULE = '━━━━━━━━';\nconst SETTINGS_KEYS = ['extensions', 'themes', 'theme', 'quietStartup'] as const;\n\nexport interface InitOutput {\n write: NodeJS.WritableStream['write'];\n isTTY?: boolean;\n}\n\nexport interface PiIntegrationSummary {\n settingsPath: string;\n themePath: string;\n aliasPath: string;\n before: Record<string, unknown>;\n after: Record<string, unknown>;\n}\n\ntype SeedFile = (typeof GLOBAL_DOOM_SEED_FILES)[number];\ntype SeedFileStatus = 'CREATED' | 'KEPT' | 'REPLACED';\ntype Paint = (text: string) => string;\n\ninterface InitPalette {\n accent: Paint;\n badge: Paint;\n error: Paint;\n heading: Paint;\n key: Paint;\n kept: Paint;\n muted: Paint;\n path: Paint;\n strong: Paint;\n success: Paint;\n warning: Paint;\n}\n\ninterface PaintOptions {\n background?: string;\n bold?: boolean;\n}\n\nconst SEED_FILE_GUIDANCE: Readonly<Record<SeedFile, string>> = {\n 'config.yaml': 'project trust and optional voice defaults',\n 'modes.yaml': 'layers, packages, and the default major mode',\n 'domains.yaml': 'plugin catalog, domain groups, and aliases',\n 'profiles.yaml': 'profile roots, personas, and string environment defaults',\n};\n\nfunction colorEnabled(output: InitOutput, environment: NodeJS.ProcessEnv): boolean {\n const forced = environment[FORCE_COLOR_ENV];\n if (forced === '0') return false;\n if (forced !== undefined) return true;\n if (environment[NO_COLOR_ENV] !== undefined) return false;\n return output.isTTY === true && environment.TERM !== DUMB_TERMINAL;\n}\n\nfunction rgbCode(prefix: 38 | 48, hex: string): string {\n const value = Number.parseInt(hex.slice(1), 16);\n const red = (value >> 16) & 0xff;\n const green = (value >> 8) & 0xff;\n const blue = value & 0xff;\n return `${String(prefix)};2;${String(red)};${String(green)};${String(blue)}`;\n}\n\nfunction painter(enabled: boolean, foreground: string, options: PaintOptions = {}): Paint {\n if (!enabled) return (text) => text;\n const codes = [rgbCode(38, foreground)];\n if (options.background) codes.push(rgbCode(48, options.background));\n if (options.bold) codes.unshift('1');\n const opening = `${ANSI_PREFIX}${codes.join(';')}m`;\n return (text) => `${opening}${text}${ANSI_RESET}`;\n}\n\nfunction createPalette(enabled: boolean): InitPalette {\n const { vars } = DEFAULT_THEME;\n const accent = painter(enabled, vars.blue);\n const badgePaint = painter(enabled, vars.bg, { background: vars.blue, bold: true });\n return {\n accent,\n badge: enabled ? (text) => badgePaint(` ${text} `) : (text) => text,\n error: painter(enabled, vars.red, { bold: true }),\n heading: painter(enabled, vars.magenta, { bold: true }),\n key: painter(enabled, vars.cyan),\n kept: painter(enabled, vars.violet),\n muted: painter(enabled, vars.comment),\n path: painter(enabled, vars.cyan),\n strong: painter(enabled, vars.fg, { bold: true }),\n success: painter(enabled, vars.green, { bold: true }),\n warning: painter(enabled, vars.yellow),\n };\n}\n\nfunction seedFileStatus(result: GlobalDoomInitResult, fileName: SeedFile): SeedFileStatus {\n if (result.created.includes(fileName)) return 'CREATED';\n if (result.replaced.includes(fileName)) return 'REPLACED';\n if (result.preserved.includes(fileName)) return 'KEPT';\n throw new Error(`doompi init did not classify generated file: ${fileName}`);\n}\n\nfunction firstString(value: unknown): string | undefined {\n if (!Array.isArray(value)) return undefined;\n return value.find((entry): entry is string => typeof entry === 'string');\n}\n\n/** Streams the init command using the same Doom One semantic palette as the Pi TUI. */\nexport class InitPresenter {\n private readonly output: InitOutput;\n private readonly palette: InitPalette;\n\n constructor(output: InitOutput, environment: NodeJS.ProcessEnv) {\n this.output = output;\n this.palette = createPalette(colorEnabled(output, environment));\n }\n\n brand(): void {\n const color = this.palette;\n this.write([\n color.muted('BOOT / INIT'),\n `${color.accent('DOOM')} ${color.badge('PI')} ${color.heading('INITIALIZE')}`,\n color.muted('Pi, configured for focus.'),\n `${color.accent(READY_RULE)} ${color.heading('SETUP')}`,\n '',\n ]);\n }\n\n stage(step: number, total: number, label: string, target: string): void {\n const color = this.palette;\n this.write([\n `${color.accent(`[${String(step)}/${String(total)}]`)} ${color.strong(label)}`,\n ` ${color.muted('TARGET')} ${color.path(target)}`,\n ]);\n }\n\n stageReady(message: string): void {\n this.write([` ${this.palette.success('● READY')} ${message}`]);\n }\n\n stageFailed(message: string, detail: readonly string[]): void {\n this.write([\n ` ${this.palette.error('● FAILED')} ${message}`,\n ...detail.map((line) => ` ${this.palette.warning(line)}`),\n ]);\n }\n\n complete(config: GlobalDoomInitResult, pi: PiIntegrationSummary): void {\n this.write(['', ...this.formatPiIntegration(pi)]);\n this.write(['', ...this.formatConfigResult(config)]);\n this.write([\n '',\n this.sectionHeading('NEXT'),\n ` ${this.palette.accent('01')} Open ${this.palette.path(config.directory)}.`,\n ` ${this.palette.accent('02')} Edit the YAML files to match how you want Pi to work.`,\n ` ${this.palette.accent('03')} From the repository you want to configure, run:`,\n '',\n ` ${this.palette.badge('doompi sync')}`,\n '',\n `${this.palette.success(READY_RULE)} ${this.palette.success('READY')} Edit your config, then sync it.`,\n ]);\n }\n\n private formatPiIntegration(result: PiIntegrationSummary): string[] {\n const changedKeys = SETTINGS_KEYS.filter((key) => this.settingsValueChanged(result, key));\n const selectedTheme = typeof result.after.theme === 'string' ? result.after.theme : DEFAULT_THEME_NAME;\n const themeDescription =\n selectedTheme === DEFAULT_THEME_NAME\n ? `selected ${this.palette.path(`\"${DEFAULT_THEME_NAME}\"`)} when no prior theme was set`\n : `kept your existing selection ${this.palette.path(`\"${selectedTheme}\"`)}`;\n const registeredTheme = firstString(result.after.themes) ?? result.themePath;\n const summary =\n changedKeys.length === 0\n ? this.palette.success('No settings edits were needed; DoomPi entries were already current.')\n : `${this.palette.warning(\n `Updated ${String(changedKeys.length)} managed key${changedKeys.length === 1 ? '' : 's'}.`,\n )} ${this.palette.muted('Unrelated settings were preserved.')}`;\n\n return [\n this.sectionHeading('PI GLOBAL SETTINGS'),\n ` ${this.palette.path(result.settingsPath)}`,\n ` ${this.palette.muted('Pi defaults to ~/.pi/agent/settings.json and honors PI_CODING_AGENT_DIR.')}`,\n ` ${summary}`,\n this.settingLine(\n result,\n 'extensions',\n `load ${this.palette.path(`\"${DOOM_EXTENSION}\"`)} first; ${this.palette.path(\n `\"${AMBIENT_EXTENSION_FILTER}\"`,\n )} keeps layer loading explicit`,\n ),\n this.settingLine(result, 'themes', `registered ${this.palette.path(`\"${registeredTheme}\"`)}`),\n this.settingLine(result, 'theme', themeDescription),\n this.settingLine(result, 'quietStartup', 'true for a concise Pi startup'),\n ` ${this.palette.muted('RESOURCES')}`,\n ` ${this.palette.muted('ALIAS'.padEnd(7))}${this.palette.path(result.aliasPath)}`,\n ` ${this.palette.muted('THEME'.padEnd(7))}${this.palette.path(result.themePath)}`,\n ];\n }\n\n private formatConfigResult(result: GlobalDoomInitResult): string[] {\n const lines = [\n this.sectionHeading('DOOMPI CONFIGURATION'),\n ` ${this.palette.path(result.directory)}`,\n ...GLOBAL_DOOM_SEED_FILES.map((fileName) => {\n const status = seedFileStatus(result, fileName);\n return ` ${this.fileStatus(status)} ${this.palette.key(fileName.padEnd(13))} ${this.palette.muted('—')} ${SEED_FILE_GUIDANCE[fileName]}`;\n }),\n ];\n if (result.preserved.length > 0) {\n lines.push(` ${this.palette.kept('KEPT')} ${this.palette.muted('files retain your existing edits.')}`);\n }\n if (result.replaced.length > 0) {\n lines.push(\n ` ${this.palette.warning('REPLACED')} ${this.palette.muted(\n 'files were restored from the templates because --force was used.',\n )}`,\n );\n }\n return lines;\n }\n\n private settingLine(result: PiIntegrationSummary, key: (typeof SETTINGS_KEYS)[number], description: string): string {\n const changed = this.settingsValueChanged(result, key);\n const status = changed ? this.palette.warning('UPDATED'.padEnd(8)) : this.palette.success('READY'.padEnd(8));\n return ` ${status} ${this.palette.key(`${key}:`.padEnd(14))}${description}`;\n }\n\n private settingsValueChanged(result: PiIntegrationSummary, key: (typeof SETTINGS_KEYS)[number]): boolean {\n return JSON.stringify(result.before[key]) !== JSON.stringify(result.after[key]);\n }\n\n private fileStatus(status: SeedFileStatus): string {\n const padded = status.padEnd(8);\n if (status === 'CREATED') return this.palette.accent(padded);\n if (status === 'REPLACED') return this.palette.warning(padded);\n return this.palette.kept(padded);\n }\n\n private sectionHeading(title: string): string {\n return `${this.palette.muted(SECTION_RULE)}\\n${this.palette.heading(title)}`;\n }\n\n private write(lines: readonly string[]): void {\n this.output.write(`${lines.join('\\n')}\\n`);\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ //#region src/commands/initPresenter.d.ts
2
+ interface InitOutput {
3
+ write: NodeJS.WritableStream['write'];
4
+ isTTY?: boolean;
5
+ }
6
+ //#endregion
7
+ export { InitOutput };
8
+ //# sourceMappingURL=initPresenter.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"initPresenter.d.cts","names":[],"sources":["../../src/commands/initPresenter.ts"],"mappings":";UAaiB,UAAA;EACf,KAAA,EAAO,MAAA,CAAO,cAAA;EACd,KAAA;AAAA"}
@@ -0,0 +1,8 @@
1
+ //#region src/commands/initPresenter.d.ts
2
+ interface InitOutput {
3
+ write: NodeJS.WritableStream['write'];
4
+ isTTY?: boolean;
5
+ }
6
+ //#endregion
7
+ export { InitOutput };
8
+ //# sourceMappingURL=initPresenter.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"initPresenter.d.mts","names":[],"sources":["../../src/commands/initPresenter.ts"],"mappings":";UAaiB,UAAA;EACf,KAAA,EAAO,MAAA,CAAO,cAAA;EACd,KAAA;AAAA"}
@@ -0,0 +1,3 @@
1
+ import{DEFAULT_THEME as e,DEFAULT_THEME_NAME as t}from"../services/config/index.mjs";import{AMBIENT_EXTENSION_FILTER as n,DOOM_EXTENSION as r}from"../adapters/piSettings.mjs";import{GLOBAL_DOOM_SEED_FILES as i}from"@agimon-ai/doompi-config";const a=`─`.repeat(72),o=`━━━━━━━━`,s=[`extensions`,`themes`,`theme`,`quietStartup`],c={"config.yaml":`project trust and optional voice defaults`,"modes.yaml":`layers, packages, and the default major mode`,"domains.yaml":`plugin catalog, domain groups, and aliases`,"profiles.yaml":`profile roots, personas, and string environment defaults`};function l(e,t){let n=t.FORCE_COLOR;return n===`0`?!1:n===void 0?t.NO_COLOR===void 0?e.isTTY===!0&&t.TERM!==`dumb`:!1:!0}function u(e,t){let n=Number.parseInt(t.slice(1),16),r=n>>16&255,i=n>>8&255,a=n&255;return`${String(e)};2;${String(r)};${String(i)};${String(a)}`}function d(e,t,n={}){if(!e)return e=>e;let r=[u(38,t)];n.background&&r.push(u(48,n.background)),n.bold&&r.unshift(`1`);let i=`[${r.join(`;`)}m`;return e=>`${i}${e}`}function f(t){let{vars:n}=e,r=d(t,n.blue),i=d(t,n.bg,{background:n.blue,bold:!0});return{accent:r,badge:t?e=>i(` ${e} `):e=>e,error:d(t,n.red,{bold:!0}),heading:d(t,n.magenta,{bold:!0}),key:d(t,n.cyan),kept:d(t,n.violet),muted:d(t,n.comment),path:d(t,n.cyan),strong:d(t,n.fg,{bold:!0}),success:d(t,n.green,{bold:!0}),warning:d(t,n.yellow)}}function p(e,t){if(e.created.includes(t))return`CREATED`;if(e.replaced.includes(t))return`REPLACED`;if(e.preserved.includes(t))return`KEPT`;throw Error(`doompi init did not classify generated file: ${t}`)}function m(e){if(Array.isArray(e))return e.find(e=>typeof e==`string`)}var h=class{output;palette;constructor(e,t){this.output=e,this.palette=f(l(e,t))}brand(){let e=this.palette;this.write([e.muted(`BOOT / INIT`),`${e.accent(`DOOM`)} ${e.badge(`PI`)} ${e.heading(`INITIALIZE`)}`,e.muted(`Pi, configured for focus.`),`${e.accent(o)} ${e.heading(`SETUP`)}`,``])}stage(e,t,n,r){let i=this.palette;this.write([`${i.accent(`[${String(e)}/${String(t)}]`)} ${i.strong(n)}`,` ${i.muted(`TARGET`)} ${i.path(r)}`])}stageReady(e){this.write([` ${this.palette.success(`● READY`)} ${e}`])}stageFailed(e,t){this.write([` ${this.palette.error(`● FAILED`)} ${e}`,...t.map(e=>` ${this.palette.warning(e)}`)])}complete(e,t){this.write([``,...this.formatPiIntegration(t)]),this.write([``,...this.formatConfigResult(e)]),this.write([``,this.sectionHeading(`NEXT`),` ${this.palette.accent(`01`)} Open ${this.palette.path(e.directory)}.`,` ${this.palette.accent(`02`)} Edit the YAML files to match how you want Pi to work.`,` ${this.palette.accent(`03`)} From the repository you want to configure, run:`,``,` ${this.palette.badge(`doompi sync`)}`,``,`${this.palette.success(o)} ${this.palette.success(`READY`)} Edit your config, then sync it.`])}formatPiIntegration(e){let i=s.filter(t=>this.settingsValueChanged(e,t)),a=typeof e.after.theme==`string`?e.after.theme:t,o=a===t?`selected ${this.palette.path(`"${t}"`)} when no prior theme was set`:`kept your existing selection ${this.palette.path(`"${a}"`)}`,c=m(e.after.themes)??e.themePath,l=i.length===0?this.palette.success(`No settings edits were needed; DoomPi entries were already current.`):`${this.palette.warning(`Updated ${String(i.length)} managed key${i.length===1?``:`s`}.`)} ${this.palette.muted(`Unrelated settings were preserved.`)}`;return[this.sectionHeading(`PI GLOBAL SETTINGS`),` ${this.palette.path(e.settingsPath)}`,` ${this.palette.muted(`Pi defaults to ~/.pi/agent/settings.json and honors PI_CODING_AGENT_DIR.`)}`,` ${l}`,this.settingLine(e,`extensions`,`load ${this.palette.path(`"${r}"`)} first; ${this.palette.path(`"${n}"`)} keeps layer loading explicit`),this.settingLine(e,`themes`,`registered ${this.palette.path(`"${c}"`)}`),this.settingLine(e,`theme`,o),this.settingLine(e,`quietStartup`,`true for a concise Pi startup`),` ${this.palette.muted(`RESOURCES`)}`,` ${this.palette.muted(`ALIAS`.padEnd(7))}${this.palette.path(e.aliasPath)}`,` ${this.palette.muted(`THEME`.padEnd(7))}${this.palette.path(e.themePath)}`]}formatConfigResult(e){let t=[this.sectionHeading(`DOOMPI CONFIGURATION`),` ${this.palette.path(e.directory)}`,...i.map(t=>{let n=p(e,t);return` ${this.fileStatus(n)} ${this.palette.key(t.padEnd(13))} ${this.palette.muted(`—`)} ${c[t]}`})];return e.preserved.length>0&&t.push(` ${this.palette.kept(`KEPT`)} ${this.palette.muted(`files retain your existing edits.`)}`),e.replaced.length>0&&t.push(` ${this.palette.warning(`REPLACED`)} ${this.palette.muted(`files were restored from the templates because --force was used.`)}`),t}settingLine(e,t,n){return` ${this.settingsValueChanged(e,t)?this.palette.warning(`UPDATED`.padEnd(8)):this.palette.success(`READY`.padEnd(8))} ${this.palette.key(`${t}:`.padEnd(14))}${n}`}settingsValueChanged(e,t){return JSON.stringify(e.before[t])!==JSON.stringify(e.after[t])}fileStatus(e){let t=e.padEnd(8);return e===`CREATED`?this.palette.accent(t):e===`REPLACED`?this.palette.warning(t):this.palette.kept(t)}sectionHeading(e){return`${this.palette.muted(a)}\n${this.palette.heading(e)}`}write(e){this.output.write(`${e.join(`
2
+ `)}\n`)}};export{h as InitPresenter};
3
+ //# sourceMappingURL=initPresenter.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"initPresenter.mjs","names":[],"sources":["../../src/commands/initPresenter.ts"],"sourcesContent":["import { GLOBAL_DOOM_SEED_FILES, type GlobalDoomInitResult } from '@agimon-ai/doompi-config';\nimport { AMBIENT_EXTENSION_FILTER, DOOM_EXTENSION } from '../adapters/piSettings.ts';\nimport { DEFAULT_THEME, DEFAULT_THEME_NAME } from '../services/config/index.ts';\n\nconst FORCE_COLOR_ENV = 'FORCE_COLOR';\nconst NO_COLOR_ENV = 'NO_COLOR';\nconst DUMB_TERMINAL = 'dumb';\nconst ANSI_PREFIX = '\\u001B[';\nconst ANSI_RESET = `${ANSI_PREFIX}0m`;\nconst SECTION_RULE = '─'.repeat(72);\nconst READY_RULE = '━━━━━━━━';\nconst SETTINGS_KEYS = ['extensions', 'themes', 'theme', 'quietStartup'] as const;\n\nexport interface InitOutput {\n write: NodeJS.WritableStream['write'];\n isTTY?: boolean;\n}\n\nexport interface PiIntegrationSummary {\n settingsPath: string;\n themePath: string;\n aliasPath: string;\n before: Record<string, unknown>;\n after: Record<string, unknown>;\n}\n\ntype SeedFile = (typeof GLOBAL_DOOM_SEED_FILES)[number];\ntype SeedFileStatus = 'CREATED' | 'KEPT' | 'REPLACED';\ntype Paint = (text: string) => string;\n\ninterface InitPalette {\n accent: Paint;\n badge: Paint;\n error: Paint;\n heading: Paint;\n key: Paint;\n kept: Paint;\n muted: Paint;\n path: Paint;\n strong: Paint;\n success: Paint;\n warning: Paint;\n}\n\ninterface PaintOptions {\n background?: string;\n bold?: boolean;\n}\n\nconst SEED_FILE_GUIDANCE: Readonly<Record<SeedFile, string>> = {\n 'config.yaml': 'project trust and optional voice defaults',\n 'modes.yaml': 'layers, packages, and the default major mode',\n 'domains.yaml': 'plugin catalog, domain groups, and aliases',\n 'profiles.yaml': 'profile roots, personas, and string environment defaults',\n};\n\nfunction colorEnabled(output: InitOutput, environment: NodeJS.ProcessEnv): boolean {\n const forced = environment[FORCE_COLOR_ENV];\n if (forced === '0') return false;\n if (forced !== undefined) return true;\n if (environment[NO_COLOR_ENV] !== undefined) return false;\n return output.isTTY === true && environment.TERM !== DUMB_TERMINAL;\n}\n\nfunction rgbCode(prefix: 38 | 48, hex: string): string {\n const value = Number.parseInt(hex.slice(1), 16);\n const red = (value >> 16) & 0xff;\n const green = (value >> 8) & 0xff;\n const blue = value & 0xff;\n return `${String(prefix)};2;${String(red)};${String(green)};${String(blue)}`;\n}\n\nfunction painter(enabled: boolean, foreground: string, options: PaintOptions = {}): Paint {\n if (!enabled) return (text) => text;\n const codes = [rgbCode(38, foreground)];\n if (options.background) codes.push(rgbCode(48, options.background));\n if (options.bold) codes.unshift('1');\n const opening = `${ANSI_PREFIX}${codes.join(';')}m`;\n return (text) => `${opening}${text}${ANSI_RESET}`;\n}\n\nfunction createPalette(enabled: boolean): InitPalette {\n const { vars } = DEFAULT_THEME;\n const accent = painter(enabled, vars.blue);\n const badgePaint = painter(enabled, vars.bg, { background: vars.blue, bold: true });\n return {\n accent,\n badge: enabled ? (text) => badgePaint(` ${text} `) : (text) => text,\n error: painter(enabled, vars.red, { bold: true }),\n heading: painter(enabled, vars.magenta, { bold: true }),\n key: painter(enabled, vars.cyan),\n kept: painter(enabled, vars.violet),\n muted: painter(enabled, vars.comment),\n path: painter(enabled, vars.cyan),\n strong: painter(enabled, vars.fg, { bold: true }),\n success: painter(enabled, vars.green, { bold: true }),\n warning: painter(enabled, vars.yellow),\n };\n}\n\nfunction seedFileStatus(result: GlobalDoomInitResult, fileName: SeedFile): SeedFileStatus {\n if (result.created.includes(fileName)) return 'CREATED';\n if (result.replaced.includes(fileName)) return 'REPLACED';\n if (result.preserved.includes(fileName)) return 'KEPT';\n throw new Error(`doompi init did not classify generated file: ${fileName}`);\n}\n\nfunction firstString(value: unknown): string | undefined {\n if (!Array.isArray(value)) return undefined;\n return value.find((entry): entry is string => typeof entry === 'string');\n}\n\n/** Streams the init command using the same Doom One semantic palette as the Pi TUI. */\nexport class InitPresenter {\n private readonly output: InitOutput;\n private readonly palette: InitPalette;\n\n constructor(output: InitOutput, environment: NodeJS.ProcessEnv) {\n this.output = output;\n this.palette = createPalette(colorEnabled(output, environment));\n }\n\n brand(): void {\n const color = this.palette;\n this.write([\n color.muted('BOOT / INIT'),\n `${color.accent('DOOM')} ${color.badge('PI')} ${color.heading('INITIALIZE')}`,\n color.muted('Pi, configured for focus.'),\n `${color.accent(READY_RULE)} ${color.heading('SETUP')}`,\n '',\n ]);\n }\n\n stage(step: number, total: number, label: string, target: string): void {\n const color = this.palette;\n this.write([\n `${color.accent(`[${String(step)}/${String(total)}]`)} ${color.strong(label)}`,\n ` ${color.muted('TARGET')} ${color.path(target)}`,\n ]);\n }\n\n stageReady(message: string): void {\n this.write([` ${this.palette.success('● READY')} ${message}`]);\n }\n\n stageFailed(message: string, detail: readonly string[]): void {\n this.write([\n ` ${this.palette.error('● FAILED')} ${message}`,\n ...detail.map((line) => ` ${this.palette.warning(line)}`),\n ]);\n }\n\n complete(config: GlobalDoomInitResult, pi: PiIntegrationSummary): void {\n this.write(['', ...this.formatPiIntegration(pi)]);\n this.write(['', ...this.formatConfigResult(config)]);\n this.write([\n '',\n this.sectionHeading('NEXT'),\n ` ${this.palette.accent('01')} Open ${this.palette.path(config.directory)}.`,\n ` ${this.palette.accent('02')} Edit the YAML files to match how you want Pi to work.`,\n ` ${this.palette.accent('03')} From the repository you want to configure, run:`,\n '',\n ` ${this.palette.badge('doompi sync')}`,\n '',\n `${this.palette.success(READY_RULE)} ${this.palette.success('READY')} Edit your config, then sync it.`,\n ]);\n }\n\n private formatPiIntegration(result: PiIntegrationSummary): string[] {\n const changedKeys = SETTINGS_KEYS.filter((key) => this.settingsValueChanged(result, key));\n const selectedTheme = typeof result.after.theme === 'string' ? result.after.theme : DEFAULT_THEME_NAME;\n const themeDescription =\n selectedTheme === DEFAULT_THEME_NAME\n ? `selected ${this.palette.path(`\"${DEFAULT_THEME_NAME}\"`)} when no prior theme was set`\n : `kept your existing selection ${this.palette.path(`\"${selectedTheme}\"`)}`;\n const registeredTheme = firstString(result.after.themes) ?? result.themePath;\n const summary =\n changedKeys.length === 0\n ? this.palette.success('No settings edits were needed; DoomPi entries were already current.')\n : `${this.palette.warning(\n `Updated ${String(changedKeys.length)} managed key${changedKeys.length === 1 ? '' : 's'}.`,\n )} ${this.palette.muted('Unrelated settings were preserved.')}`;\n\n return [\n this.sectionHeading('PI GLOBAL SETTINGS'),\n ` ${this.palette.path(result.settingsPath)}`,\n ` ${this.palette.muted('Pi defaults to ~/.pi/agent/settings.json and honors PI_CODING_AGENT_DIR.')}`,\n ` ${summary}`,\n this.settingLine(\n result,\n 'extensions',\n `load ${this.palette.path(`\"${DOOM_EXTENSION}\"`)} first; ${this.palette.path(\n `\"${AMBIENT_EXTENSION_FILTER}\"`,\n )} keeps layer loading explicit`,\n ),\n this.settingLine(result, 'themes', `registered ${this.palette.path(`\"${registeredTheme}\"`)}`),\n this.settingLine(result, 'theme', themeDescription),\n this.settingLine(result, 'quietStartup', 'true for a concise Pi startup'),\n ` ${this.palette.muted('RESOURCES')}`,\n ` ${this.palette.muted('ALIAS'.padEnd(7))}${this.palette.path(result.aliasPath)}`,\n ` ${this.palette.muted('THEME'.padEnd(7))}${this.palette.path(result.themePath)}`,\n ];\n }\n\n private formatConfigResult(result: GlobalDoomInitResult): string[] {\n const lines = [\n this.sectionHeading('DOOMPI CONFIGURATION'),\n ` ${this.palette.path(result.directory)}`,\n ...GLOBAL_DOOM_SEED_FILES.map((fileName) => {\n const status = seedFileStatus(result, fileName);\n return ` ${this.fileStatus(status)} ${this.palette.key(fileName.padEnd(13))} ${this.palette.muted('—')} ${SEED_FILE_GUIDANCE[fileName]}`;\n }),\n ];\n if (result.preserved.length > 0) {\n lines.push(` ${this.palette.kept('KEPT')} ${this.palette.muted('files retain your existing edits.')}`);\n }\n if (result.replaced.length > 0) {\n lines.push(\n ` ${this.palette.warning('REPLACED')} ${this.palette.muted(\n 'files were restored from the templates because --force was used.',\n )}`,\n );\n }\n return lines;\n }\n\n private settingLine(result: PiIntegrationSummary, key: (typeof SETTINGS_KEYS)[number], description: string): string {\n const changed = this.settingsValueChanged(result, key);\n const status = changed ? this.palette.warning('UPDATED'.padEnd(8)) : this.palette.success('READY'.padEnd(8));\n return ` ${status} ${this.palette.key(`${key}:`.padEnd(14))}${description}`;\n }\n\n private settingsValueChanged(result: PiIntegrationSummary, key: (typeof SETTINGS_KEYS)[number]): boolean {\n return JSON.stringify(result.before[key]) !== JSON.stringify(result.after[key]);\n }\n\n private fileStatus(status: SeedFileStatus): string {\n const padded = status.padEnd(8);\n if (status === 'CREATED') return this.palette.accent(padded);\n if (status === 'REPLACED') return this.palette.warning(padded);\n return this.palette.kept(padded);\n }\n\n private sectionHeading(title: string): string {\n return `${this.palette.muted(SECTION_RULE)}\\n${this.palette.heading(title)}`;\n }\n\n private write(lines: readonly string[]): void {\n this.output.write(`${lines.join('\\n')}\\n`);\n }\n}\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../_virtual/_rolldown/runtime.cjs`),t=require(`./baseCommand.cjs`),n=require(`../config/projectTrust.cjs`),r=require(`../logSinkTelemetry.cjs`);require(`../config/index.cjs`);const i=require(`../utils/json.cjs`),a=require(`../utils/moduleResolution.cjs`);require(`../utils/index.cjs`);const o=require(`../services/compatibility/process.cjs`);let s=require(`cross-spawn`);s=e.__toESM(s,1);const c=`vibe-lint`,l=`pipe`;function u(e){let t;try{t=JSON.parse(e)}catch(e){throw Error(`Expected a JSON vibe-lint invocation on stdin`,{cause:e})}if(!i.isRecord(t)||typeof t.prompt!=`string`||typeof t.systemPrompt!=`string`)throw Error(`A vibe-lint invocation requires string prompt and systemPrompt fields`);if(t.maxTokens!==void 0&&typeof t.maxTokens!=`number`)throw Error(`A vibe-lint invocation maxTokens field must be a number`);if(t.screenshotPaths!==void 0&&(!Array.isArray(t.screenshotPaths)||!t.screenshotPaths.every(e=>typeof e==`string`)))throw Error(`A vibe-lint invocation screenshotPaths field must be an array of strings`);return{prompt:t.prompt,systemPrompt:t.systemPrompt,maxTokens:t.maxTokens,screenshotPaths:t.screenshotPaths}}function d(e,t){return[...e,`--print`,...n.hasProjectTrustOption(e)?[]:[`--approve`],`--no-session`,`--system-prompt`,t.systemPrompt,...(t.screenshotPaths??[]).map(e=>`@${e}`),t.prompt]}function f(e){return`${JSON.stringify({content:e.trim()})}\n`}function p(e,t){return[`--no-themes`,`--theme`,t,...e]}async function m(){let e=[];for await(let t of process.stdin)e.push(Buffer.isBuffer(t)?t:Buffer.from(String(t)));return Buffer.concat(e).toString(`utf-8`)}var h=class extends t.BaseCommand{name=`launch`;matches(e){return!0}async execute(e,t){let{options:i,environment:h}=e,{buildRuntimeBundle:g,createRuntimeExtensionPlan:_}=await Promise.resolve().then(()=>require(`../services/runtimeBundle.cjs`)),{extensions:v,childExtensions:y}=_(e);h.DOOMPI_CHILD_EXTENSIONS=JSON.stringify(y);let b=v;try{b=[(await g(e,{extensions:v,childExtensions:y})).bundle],h.DOOMPI_EXTENSIONS_PROVIDED=`1`}catch(e){let t=e instanceof Error?e.message:String(e);process.stderr.write(`[doompi] extension bundle unavailable; using individual entries: ${t}\n`)}let x;try{x=n.loadDoomConfig(i.repoRoot)}catch(e){throw await t.recordError(r.HARNESS_EVENT.configLoadFailed,e,{"harness.phase":`load_config`}),e}t.recordEvent(r.HARNESS_EVENT.projectTrustResolved,{"harness.project_trust":x.projectTrust,"harness.project_trust.overridden":n.hasProjectTrustOption(i.piArgs)});let S=n.applyProjectTrust(i.piArgs,x);S=p(S,e.defaultThemePath);for(let e of b)S=[`--extension`,e,...S];if(i.outputFormat===c){let e=u(await m());S=d(S,e)}let C=Date.now(),w=(0,s.default)(process.execPath,[a.piCliPath(),...S],{cwd:i.cwd,env:h,stdio:i.outputFormat===c?[`ignore`,l,l]:`inherit`}),T=``;if(i.outputFormat===c){if(!w.stdout||!w.stderr)throw Error(`Failed to open Pi output streams`);w.stdout.on(`data`,e=>{T+=e.toString()}),w.stderr.on(`data`,e=>{process.stderr.write(e)})}let E=o.forwardSignals(w),D=await t.runInSpan(`doom_pi.pi_session`,{"harness.extension.count":b.length,"harness.mode":i.outputFormat},()=>o.waitForExit(w)).catch(async e=>{throw await t.recordError(r.HARNESS_EVENT.launchFailed,e,{"harness.duration_ms":Date.now()-C}),e}).finally(E);return t.recordEvent(r.HARNESS_EVENT.launchCompleted,{"harness.exit_code":D,"harness.duration_ms":Date.now()-C,"harness.mode":i.outputFormat??`default`}),i.outputFormat===c&&D===0&&process.stdout.write(f(T)),D}};exports.LaunchCommand=h,exports.buildVibeLintPiArgs=d,exports.formatVibeLintResponse=f,exports.overridePiThemes=p,exports.parseVibeLintInvocation=u;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../_virtual/_rolldown/runtime.cjs`),t=require(`../adapters/modules/moduleResolution.cjs`),n=require(`../adapters/serialization/json.cjs`);require(`../utils/index.cjs`);const r=require(`./baseCommand.cjs`),i=require(`../adapters/telemetry/logSinkTelemetry.cjs`),a=require(`../services/config/projectTrust.cjs`);require(`../services/config/index.cjs`);const o=require(`../adapters/compatibility/process.cjs`);let s=require(`node:crypto`),c=require(`cross-spawn`);c=e.__toESM(c,1);let l=require(`@agimon-ai/doompi-extension-contracts/child-process`);const u=`vibe-lint`,d=`pipe`,f=`ELICITATION_SESSION_ID`;function p(e){let t=e[f]?.trim()||(0,s.randomUUID)();return e[f]=t,t}function m(e){let t;try{t=JSON.parse(e)}catch(e){throw Error(`Expected a JSON vibe-lint invocation on stdin`,{cause:e})}if(!n.isRecord(t)||typeof t.prompt!=`string`||typeof t.systemPrompt!=`string`)throw Error(`A vibe-lint invocation requires string prompt and systemPrompt fields`);if(t.maxTokens!==void 0&&typeof t.maxTokens!=`number`)throw Error(`A vibe-lint invocation maxTokens field must be a number`);if(t.screenshotPaths!==void 0&&(!Array.isArray(t.screenshotPaths)||!t.screenshotPaths.every(e=>typeof e==`string`)))throw Error(`A vibe-lint invocation screenshotPaths field must be an array of strings`);return{prompt:t.prompt,systemPrompt:t.systemPrompt,maxTokens:t.maxTokens,screenshotPaths:t.screenshotPaths}}function h(e,t){return[...e,`--print`,...a.hasProjectTrustOption(e)?[]:[`--approve`],`--no-session`,`--system-prompt`,t.systemPrompt,...(t.screenshotPaths??[]).map(e=>`@${e}`),t.prompt]}function g(e){return`${JSON.stringify({content:e.trim()})}\n`}function _(e,t){return[`--no-themes`,`--theme`,t,...e]}async function v(){let e=[];for await(let t of process.stdin)e.push(Buffer.isBuffer(t)?t:Buffer.from(String(t)));return Buffer.concat(e).toString(`utf-8`)}var y=class extends r.BaseCommand{name=`launch`;matches(e){return!0}async execute(e,n){let{options:r,environment:s}=e;p(s);let{buildRuntimeBundle:f,createRuntimeExtensionPlan:y}=await Promise.resolve().then(()=>require(`../adapters/runtimeBundle.cjs`)),{extensions:b,childExtensions:x}=y(e);s.DOOMPI_CHILD_EXTENSIONS=JSON.stringify(x);let S=b;try{S=[(await f(e,{extensions:b,childExtensions:x})).bundle],s[l.DOOMPI_EXTENSIONS_PROVIDED_ENV]=`1`}catch(e){let t=e instanceof Error?e.message:String(e);process.stderr.write(`[doompi] extension bundle unavailable; using individual entries: ${t}\n`)}let C;try{C=a.loadDoomConfig(r.repoRoot)}catch(e){throw await n.recordError(i.HARNESS_EVENT.configLoadFailed,e,{"harness.phase":`load_config`}),e}n.recordEvent(i.HARNESS_EVENT.projectTrustResolved,{"harness.project_trust":C.projectTrust,"harness.project_trust.overridden":a.hasProjectTrustOption(r.piArgs)});let w=a.applyProjectTrust(r.piArgs,C);w=_(w,e.defaultThemePath);for(let e of S)w=[`--extension`,e,...w];if(r.outputFormat===u){let e=m(await v());w=h(w,e)}let T=Date.now(),E=(0,c.default)(process.execPath,[t.piCliPath(),...w],{cwd:r.cwd,env:s,stdio:r.outputFormat===u?[`ignore`,d,d]:`inherit`}),D=``;if(r.outputFormat===u){if(!E.stdout||!E.stderr)throw Error(`Failed to open Pi output streams`);E.stdout.on(`data`,e=>{D+=e.toString()}),E.stderr.on(`data`,e=>{process.stderr.write(e)})}let O=o.forwardSignals(E),k=await n.runInSpan(`doom_pi.pi_session`,{"harness.extension.count":S.length,"harness.mode":r.outputFormat},()=>o.waitForExit(E)).catch(async e=>{throw await n.recordError(i.HARNESS_EVENT.launchFailed,e,{"harness.duration_ms":Date.now()-T}),e}).finally(O);return n.recordEvent(i.HARNESS_EVENT.launchCompleted,{"harness.exit_code":k,"harness.duration_ms":Date.now()-T,"harness.mode":r.outputFormat??`default`}),r.outputFormat===u&&k===0&&process.stdout.write(g(D)),k}};exports.LaunchCommand=y,exports.buildVibeLintPiArgs=h,exports.ensureElicitationSessionId=p,exports.formatVibeLintResponse=g,exports.overridePiThemes=_,exports.parseVibeLintInvocation=m;
2
2
  //# sourceMappingURL=launchCommand.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"launchCommand.cjs","names":["isRecord","hasProjectTrustOption","BaseCommand","loadDoomConfig","HARNESS_EVENT","applyProjectTrust","piCliPath","forwardSignals","waitForExit"],"sources":["../../src/commands/launchCommand.ts"],"sourcesContent":["import spawn from 'cross-spawn';\nimport { applyProjectTrust, hasProjectTrustOption, loadDoomConfig, type DoomConfig } from '../config/index.ts';\nimport type { HarnessOptions } from '../interfaces/index.ts';\nimport { HARNESS_EVENT, type HarnessTelemetry } from '../logSinkTelemetry.ts';\nimport type { HarnessContext } from '../services/index.ts';\nimport { forwardSignals, waitForExit } from '../services/compatibility/process.ts';\nimport { isRecord, piCliPath } from '../utils/index.ts';\nimport { BaseCommand } from './baseCommand.ts';\n\nconst VIBE_LINT_FORMAT = 'vibe-lint';\nconst PRINT_OPTION = '--print';\nconst APPROVE_OPTION = '--approve';\nconst NO_SESSION_OPTION = '--no-session';\nconst SYSTEM_PROMPT_OPTION = '--system-prompt';\nconst THEME_OPTION = '--theme';\nconst NO_THEMES_OPTION = '--no-themes';\nconst EXTENSION_OPTION = '--extension';\nconst IGNORE_STDIO = 'ignore';\nconst PIPE_STDIO = 'pipe';\nconst INHERIT_STDIO = 'inherit';\nconst EXTERNAL_EXTENSIONS_ENV = 'DOOMPI_EXTENSIONS_PROVIDED';\nconst ENABLED_ENV = '1';\n\nexport interface VibeLintInvocation {\n prompt: string;\n systemPrompt: string;\n maxTokens?: number;\n screenshotPaths?: string[];\n}\n\nexport function parseVibeLintInvocation(input: string): VibeLintInvocation {\n let parsed: unknown;\n try {\n parsed = JSON.parse(input);\n } catch (error) {\n throw new Error('Expected a JSON vibe-lint invocation on stdin', { cause: error });\n }\n\n if (!isRecord(parsed) || typeof parsed.prompt !== 'string' || typeof parsed.systemPrompt !== 'string') {\n throw new Error('A vibe-lint invocation requires string prompt and systemPrompt fields');\n }\n if (parsed.maxTokens !== undefined && typeof parsed.maxTokens !== 'number') {\n throw new Error('A vibe-lint invocation maxTokens field must be a number');\n }\n if (\n parsed.screenshotPaths !== undefined &&\n (!Array.isArray(parsed.screenshotPaths) || !parsed.screenshotPaths.every((value) => typeof value === 'string'))\n ) {\n throw new Error('A vibe-lint invocation screenshotPaths field must be an array of strings');\n }\n\n return {\n prompt: parsed.prompt,\n systemPrompt: parsed.systemPrompt,\n maxTokens: parsed.maxTokens,\n screenshotPaths: parsed.screenshotPaths as string[] | undefined,\n };\n}\n\nexport function buildVibeLintPiArgs(piArgs: string[], invocation: VibeLintInvocation): string[] {\n return [\n ...piArgs,\n PRINT_OPTION,\n ...(!hasProjectTrustOption(piArgs) ? [APPROVE_OPTION] : []),\n // Reviews are disposable and must not appear in Pi's resume history.\n NO_SESSION_OPTION,\n SYSTEM_PROMPT_OPTION,\n invocation.systemPrompt,\n ...(invocation.screenshotPaths ?? []).map((screenshotPath) => `@${screenshotPath}`),\n invocation.prompt,\n ];\n}\n\nexport function formatVibeLintResponse(content: string): string {\n return `${JSON.stringify({ content: content.trim() })}\\n`;\n}\n\n/** Ignores configured themes and loads only themes explicitly passed to the launcher. */\nexport function overridePiThemes(piArgs: string[], themePath: string): string[] {\n return [NO_THEMES_OPTION, THEME_OPTION, themePath, ...piArgs];\n}\n\nasync function readStdin(): Promise<string> {\n const chunks: Buffer[] = [];\n for await (const chunk of process.stdin) {\n chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(String(chunk)));\n }\n return Buffer.concat(chunks).toString('utf-8');\n}\n\n/**\n * Spawns Pi with the resolved extensions, environment, and theme.\n *\n * This is the default command: it matches whenever no diagnostic flag claimed\n * the run.\n */\nexport class LaunchCommand extends BaseCommand {\n readonly name = 'launch';\n\n matches(_options: HarnessOptions): boolean {\n return true;\n }\n\n async execute(context: HarnessContext, telemetry: HarnessTelemetry): Promise<number> {\n const { options, environment } = context;\n\n const { buildRuntimeBundle, createRuntimeExtensionPlan } = await import('../services/runtimeBundle.ts');\n const { extensions, childExtensions } = createRuntimeExtensionPlan(context);\n environment.DOOMPI_CHILD_EXTENSIONS = JSON.stringify(childExtensions);\n\n // Pi normally imports each package entry separately. Flattening the exact\n // Pi load order into one graph removes repeated module resolution and parse\n // work. The graph manifest makes the common path a stat-only cache hit;\n // compilation failure keeps the historical extension list intact.\n let launchExtensions = extensions;\n try {\n const built = await buildRuntimeBundle(context, { extensions, childExtensions });\n launchExtensions = [built.bundle];\n // A synced repository also has the doom wrapper in project settings. It\n // must not compose the same factories after this aggregate has run.\n environment[EXTERNAL_EXTENSIONS_ENV] = ENABLED_ENV;\n } catch (error) {\n const detail = error instanceof Error ? error.message : String(error);\n process.stderr.write(`[doompi] extension bundle unavailable; using individual entries: ${detail}\\n`);\n }\n\n // A malformed .doom/config.yaml aborts the launch, and the message only\n // reaches the terminal that ran it, so record it before it propagates.\n let doomConfig: DoomConfig;\n try {\n doomConfig = loadDoomConfig(options.repoRoot);\n } catch (error) {\n await telemetry.recordError(HARNESS_EVENT.configLoadFailed, error, { 'harness.phase': 'load_config' });\n throw error;\n }\n\n // Whether a session ran with repository approval is the single most useful\n // fact when reconstructing what an agent was allowed to do.\n void telemetry.recordEvent(HARNESS_EVENT.projectTrustResolved, {\n 'harness.project_trust': doomConfig.projectTrust,\n 'harness.project_trust.overridden': hasProjectTrustOption(options.piArgs),\n });\n\n let piArgs = applyProjectTrust(options.piArgs, doomConfig);\n piArgs = overridePiThemes(piArgs, context.defaultThemePath);\n for (const extension of launchExtensions) piArgs = [EXTENSION_OPTION, extension, ...piArgs];\n\n if (options.outputFormat === VIBE_LINT_FORMAT) {\n const invocation = parseVibeLintInvocation(await readStdin());\n piArgs = buildVibeLintPiArgs(piArgs, invocation);\n }\n\n const startedAt = Date.now();\n const child = spawn(process.execPath, [piCliPath(), ...piArgs], {\n cwd: options.cwd,\n env: environment,\n stdio: options.outputFormat === VIBE_LINT_FORMAT ? [IGNORE_STDIO, PIPE_STDIO, PIPE_STDIO] : INHERIT_STDIO,\n });\n let stdout = '';\n if (options.outputFormat === VIBE_LINT_FORMAT) {\n if (!child.stdout || !child.stderr) throw new Error('Failed to open Pi output streams');\n child.stdout.on('data', (chunk: string | Buffer) => {\n stdout += chunk.toString();\n });\n child.stderr.on('data', (chunk: string | Buffer) => {\n process.stderr.write(chunk);\n });\n }\n\n // Shared with the compatibility providers, so a second Ctrl-C still reaches\n // the child and SIGHUP and SIGQUIT are forwarded too.\n const stopForwarding = forwardSignals(child);\n const result = await telemetry\n .runInSpan(\n 'doom_pi.pi_session',\n {\n 'harness.extension.count': launchExtensions.length,\n 'harness.mode': options.outputFormat,\n },\n () => waitForExit(child),\n )\n .catch(async (error: unknown) => {\n // A spawn error means Pi never started, which is invisible to the\n // session telemetry the child would otherwise have reported.\n await telemetry.recordError(HARNESS_EVENT.launchFailed, error, {\n 'harness.duration_ms': Date.now() - startedAt,\n });\n throw error;\n })\n .finally(stopForwarding);\n\n void telemetry.recordEvent(HARNESS_EVENT.launchCompleted, {\n 'harness.exit_code': result,\n 'harness.duration_ms': Date.now() - startedAt,\n 'harness.mode': options.outputFormat ?? 'default',\n });\n\n if (options.outputFormat === VIBE_LINT_FORMAT && result === 0) {\n process.stdout.write(formatVibeLintResponse(stdout));\n }\n return result;\n }\n}\n"],"mappings":"wdASA,MAAM,EAAmB,YASnB,EAAa,OAYnB,SAAgB,EAAwB,EAAmC,CACzE,IAAI,EACJ,GAAI,CACF,EAAS,KAAK,MAAM,EAAM,OACnB,EAAO,CACd,MAAU,MAAM,gDAAiD,CAAE,MAAO,EAAO,CAAC,CAGpF,GAAI,CAACA,EAAAA,SAAS,EAAO,EAAI,OAAO,EAAO,QAAW,UAAY,OAAO,EAAO,cAAiB,SAC3F,MAAU,MAAM,wEAAwE,CAE1F,GAAI,EAAO,YAAc,IAAA,IAAa,OAAO,EAAO,WAAc,SAChE,MAAU,MAAM,0DAA0D,CAE5E,GACE,EAAO,kBAAoB,IAAA,KAC1B,CAAC,MAAM,QAAQ,EAAO,gBAAgB,EAAI,CAAC,EAAO,gBAAgB,MAAO,GAAU,OAAO,GAAU,SAAS,EAE9G,MAAU,MAAM,2EAA2E,CAG7F,MAAO,CACL,OAAQ,EAAO,OACf,aAAc,EAAO,aACrB,UAAW,EAAO,UAClB,gBAAiB,EAAO,gBACzB,CAGH,SAAgB,EAAoB,EAAkB,EAA0C,CAC9F,MAAO,CACL,GAAG,EACH,UACA,GAAKC,EAAAA,sBAAsB,EAAO,CAAsB,EAAE,CAArB,CAAC,YAAe,CAErD,eACA,kBACA,EAAW,aACX,IAAI,EAAW,iBAAmB,EAAE,EAAE,IAAK,GAAmB,IAAI,IAAiB,CACnF,EAAW,OACZ,CAGH,SAAgB,EAAuB,EAAyB,CAC9D,MAAO,GAAG,KAAK,UAAU,CAAE,QAAS,EAAQ,MAAM,CAAE,CAAC,CAAC,IAIxD,SAAgB,EAAiB,EAAkB,EAA6B,CAC9E,MAAO,CAAC,cAAkB,UAAc,EAAW,GAAG,EAAO,CAG/D,eAAe,GAA6B,CAC1C,IAAM,EAAmB,EAAE,CAC3B,UAAW,IAAM,KAAS,QAAQ,MAChC,EAAO,KAAK,OAAO,SAAS,EAAM,CAAG,EAAQ,OAAO,KAAK,OAAO,EAAM,CAAC,CAAC,CAE1E,OAAO,OAAO,OAAO,EAAO,CAAC,SAAS,QAAQ,CAShD,IAAa,EAAb,cAAmCC,EAAAA,WAAY,CAC7C,KAAgB,SAEhB,QAAQ,EAAmC,CACzC,MAAO,GAGT,MAAM,QAAQ,EAAyB,EAA8C,CACnF,GAAM,CAAE,UAAS,eAAgB,EAE3B,CAAE,qBAAoB,8BAA+B,MAAA,QAAA,SAAA,CAAA,SAAA,QAAM,gCAAA,CAAA,CAC3D,CAAE,aAAY,mBAAoB,EAA2B,EAAQ,CAC3E,EAAY,wBAA0B,KAAK,UAAU,EAAgB,CAMrE,IAAI,EAAmB,EACvB,GAAI,CAEF,EAAmB,EAAC,MADA,EAAmB,EAAS,CAAE,aAAY,kBAAiB,CAAC,EACtD,OAAO,CAGjC,EAAY,2BAA2B,UAChC,EAAO,CACd,IAAM,EAAS,aAAiB,MAAQ,EAAM,QAAU,OAAO,EAAM,CACrE,QAAQ,OAAO,MAAM,oEAAoE,EAAO,IAAI,CAKtG,IAAI,EACJ,GAAI,CACF,EAAaC,EAAAA,eAAe,EAAQ,SAAS,OACtC,EAAO,CAEd,MADA,MAAM,EAAU,YAAYC,EAAAA,cAAc,iBAAkB,EAAO,CAAE,gBAAiB,cAAe,CAAC,CAChG,EAKH,EAAU,YAAYA,EAAAA,cAAc,qBAAsB,CAC7D,wBAAyB,EAAW,aACpC,mCAAoCH,EAAAA,sBAAsB,EAAQ,OAAO,CAC1E,CAAC,CAEF,IAAI,EAASI,EAAAA,kBAAkB,EAAQ,OAAQ,EAAW,CAC1D,EAAS,EAAiB,EAAQ,EAAQ,iBAAiB,CAC3D,IAAK,IAAM,KAAa,EAAkB,EAAS,CAAC,cAAkB,EAAW,GAAG,EAAO,CAE3F,GAAI,EAAQ,eAAiB,EAAkB,CAC7C,IAAM,EAAa,EAAwB,MAAM,GAAW,CAAC,CAC7D,EAAS,EAAoB,EAAQ,EAAW,CAGlD,IAAM,EAAY,KAAK,KAAK,CACtB,GAAA,EAAA,EAAA,SAAc,QAAQ,SAAU,CAACC,EAAAA,WAAW,CAAE,GAAG,EAAO,CAAE,CAC9D,IAAK,EAAQ,IACb,IAAK,EACL,MAAO,EAAQ,eAAiB,EAAmB,CAAC,SAAc,EAAY,EAAW,CAAG,UAC7F,CAAC,CACE,EAAS,GACb,GAAI,EAAQ,eAAiB,EAAkB,CAC7C,GAAI,CAAC,EAAM,QAAU,CAAC,EAAM,OAAQ,MAAU,MAAM,mCAAmC,CACvF,EAAM,OAAO,GAAG,OAAS,GAA2B,CAClD,GAAU,EAAM,UAAU,EAC1B,CACF,EAAM,OAAO,GAAG,OAAS,GAA2B,CAClD,QAAQ,OAAO,MAAM,EAAM,EAC3B,CAKJ,IAAM,EAAiBC,EAAAA,eAAe,EAAM,CACtC,EAAS,MAAM,EAClB,UACC,qBACA,CACE,0BAA2B,EAAiB,OAC5C,eAAgB,EAAQ,aACzB,KACKC,EAAAA,YAAY,EAAM,CACzB,CACA,MAAM,KAAO,IAAmB,CAM/B,MAHA,MAAM,EAAU,YAAYJ,EAAAA,cAAc,aAAc,EAAO,CAC7D,sBAAuB,KAAK,KAAK,CAAG,EACrC,CAAC,CACI,GACN,CACD,QAAQ,EAAe,CAW1B,OATK,EAAU,YAAYA,EAAAA,cAAc,gBAAiB,CACxD,oBAAqB,EACrB,sBAAuB,KAAK,KAAK,CAAG,EACpC,eAAgB,EAAQ,cAAgB,UACzC,CAAC,CAEE,EAAQ,eAAiB,GAAoB,IAAW,GAC1D,QAAQ,OAAO,MAAM,EAAuB,EAAO,CAAC,CAE/C"}
1
+ {"version":3,"file":"launchCommand.cjs","names":["isRecord","hasProjectTrustOption","BaseCommand","DOOMPI_EXTENSIONS_PROVIDED_ENV","loadDoomConfig","HARNESS_EVENT","applyProjectTrust","piCliPath","forwardSignals","waitForExit"],"sources":["../../src/commands/launchCommand.ts"],"sourcesContent":["import { randomUUID } from 'node:crypto';\nimport { DOOMPI_EXTENSIONS_PROVIDED_ENV } from '@agimon-ai/doompi-extension-contracts/child-process';\nimport spawn from 'cross-spawn';\nimport { forwardSignals, waitForExit } from '../adapters/compatibility/process.ts';\nimport { HARNESS_EVENT, type HarnessTelemetry } from '../adapters/telemetry/logSinkTelemetry.ts';\nimport { applyProjectTrust, type DoomConfig, hasProjectTrustOption, loadDoomConfig } from '../services/config/index.ts';\nimport type { HarnessContext } from '../services/index.ts';\nimport type { HarnessOptions } from '../types/interfaces/index.ts';\nimport { isRecord, piCliPath } from '../utils/index.ts';\nimport { BaseCommand } from './baseCommand.ts';\n\nconst VIBE_LINT_FORMAT = 'vibe-lint';\nconst PRINT_OPTION = '--print';\nconst APPROVE_OPTION = '--approve';\nconst NO_SESSION_OPTION = '--no-session';\nconst SYSTEM_PROMPT_OPTION = '--system-prompt';\nconst THEME_OPTION = '--theme';\nconst NO_THEMES_OPTION = '--no-themes';\nconst EXTENSION_OPTION = '--extension';\nconst IGNORE_STDIO = 'ignore';\nconst PIPE_STDIO = 'pipe';\nconst INHERIT_STDIO = 'inherit';\nconst ENABLED_ENV = '1';\nconst ELICITATION_SESSION_ENV = 'ELICITATION_SESSION_ID';\n\n/** Gives each Doompi launch a stable fallback identity without replacing one supplied by its caller. */\nexport function ensureElicitationSessionId(environment: NodeJS.ProcessEnv): string {\n const provided = environment[ELICITATION_SESSION_ENV]?.trim();\n const sessionId = provided || randomUUID();\n environment[ELICITATION_SESSION_ENV] = sessionId;\n return sessionId;\n}\n\nexport interface VibeLintInvocation {\n prompt: string;\n systemPrompt: string;\n maxTokens?: number;\n screenshotPaths?: string[];\n}\n\nexport function parseVibeLintInvocation(input: string): VibeLintInvocation {\n let parsed: unknown;\n try {\n parsed = JSON.parse(input);\n } catch (error) {\n throw new Error('Expected a JSON vibe-lint invocation on stdin', { cause: error });\n }\n\n if (!isRecord(parsed) || typeof parsed.prompt !== 'string' || typeof parsed.systemPrompt !== 'string') {\n throw new Error('A vibe-lint invocation requires string prompt and systemPrompt fields');\n }\n if (parsed.maxTokens !== undefined && typeof parsed.maxTokens !== 'number') {\n throw new Error('A vibe-lint invocation maxTokens field must be a number');\n }\n if (\n parsed.screenshotPaths !== undefined &&\n (!Array.isArray(parsed.screenshotPaths) || !parsed.screenshotPaths.every((value) => typeof value === 'string'))\n ) {\n throw new Error('A vibe-lint invocation screenshotPaths field must be an array of strings');\n }\n\n return {\n prompt: parsed.prompt,\n systemPrompt: parsed.systemPrompt,\n maxTokens: parsed.maxTokens,\n screenshotPaths: parsed.screenshotPaths as string[] | undefined,\n };\n}\n\nexport function buildVibeLintPiArgs(piArgs: string[], invocation: VibeLintInvocation): string[] {\n return [\n ...piArgs,\n PRINT_OPTION,\n ...(!hasProjectTrustOption(piArgs) ? [APPROVE_OPTION] : []),\n // Reviews are disposable and must not appear in Pi's resume history.\n NO_SESSION_OPTION,\n SYSTEM_PROMPT_OPTION,\n invocation.systemPrompt,\n ...(invocation.screenshotPaths ?? []).map((screenshotPath) => `@${screenshotPath}`),\n invocation.prompt,\n ];\n}\n\nexport function formatVibeLintResponse(content: string): string {\n return `${JSON.stringify({ content: content.trim() })}\\n`;\n}\n\n/** Ignores configured themes and loads only themes explicitly passed to the launcher. */\nexport function overridePiThemes(piArgs: string[], themePath: string): string[] {\n return [NO_THEMES_OPTION, THEME_OPTION, themePath, ...piArgs];\n}\n\nasync function readStdin(): Promise<string> {\n const chunks: Buffer[] = [];\n for await (const chunk of process.stdin) {\n chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(String(chunk)));\n }\n return Buffer.concat(chunks).toString('utf-8');\n}\n\n/**\n * Spawns Pi with the resolved extensions, environment, and theme.\n *\n * This is the default command: it matches whenever no diagnostic flag claimed\n * the run.\n */\nexport class LaunchCommand extends BaseCommand {\n readonly name = 'launch';\n\n matches(_options: HarnessOptions): boolean {\n return true;\n }\n\n async execute(context: HarnessContext, telemetry: HarnessTelemetry): Promise<number> {\n const { options, environment } = context;\n ensureElicitationSessionId(environment);\n\n const { buildRuntimeBundle, createRuntimeExtensionPlan } = await import('../adapters/runtimeBundle.ts');\n const { extensions, childExtensions } = createRuntimeExtensionPlan(context);\n environment.DOOMPI_CHILD_EXTENSIONS = JSON.stringify(childExtensions);\n\n // Pi normally imports each package entry separately. Flattening the exact\n // Pi load order into one graph removes repeated module resolution and parse\n // work. The graph manifest makes the common path a stat-only cache hit;\n // compilation failure keeps the historical extension list intact.\n let launchExtensions = extensions;\n try {\n const built = await buildRuntimeBundle(context, { extensions, childExtensions });\n launchExtensions = [built.bundle];\n // A synced repository also has the doom wrapper in project settings. It\n // must not compose the same factories after this aggregate has run.\n environment[DOOMPI_EXTENSIONS_PROVIDED_ENV] = ENABLED_ENV;\n } catch (error) {\n const detail = error instanceof Error ? error.message : String(error);\n process.stderr.write(`[doompi] extension bundle unavailable; using individual entries: ${detail}\\n`);\n }\n\n // A malformed .doom/config.yaml aborts the launch, and the message only\n // reaches the terminal that ran it, so record it before it propagates.\n let doomConfig: DoomConfig;\n try {\n doomConfig = loadDoomConfig(options.repoRoot);\n } catch (error) {\n await telemetry.recordError(HARNESS_EVENT.configLoadFailed, error, { 'harness.phase': 'load_config' });\n throw error;\n }\n\n // Whether a session ran with repository approval is the single most useful\n // fact when reconstructing what an agent was allowed to do.\n void telemetry.recordEvent(HARNESS_EVENT.projectTrustResolved, {\n 'harness.project_trust': doomConfig.projectTrust,\n 'harness.project_trust.overridden': hasProjectTrustOption(options.piArgs),\n });\n\n let piArgs = applyProjectTrust(options.piArgs, doomConfig);\n piArgs = overridePiThemes(piArgs, context.defaultThemePath);\n for (const extension of launchExtensions) piArgs = [EXTENSION_OPTION, extension, ...piArgs];\n\n if (options.outputFormat === VIBE_LINT_FORMAT) {\n const invocation = parseVibeLintInvocation(await readStdin());\n piArgs = buildVibeLintPiArgs(piArgs, invocation);\n }\n\n const startedAt = Date.now();\n const child = spawn(process.execPath, [piCliPath(), ...piArgs], {\n cwd: options.cwd,\n env: environment,\n stdio: options.outputFormat === VIBE_LINT_FORMAT ? [IGNORE_STDIO, PIPE_STDIO, PIPE_STDIO] : INHERIT_STDIO,\n });\n let stdout = '';\n if (options.outputFormat === VIBE_LINT_FORMAT) {\n if (!child.stdout || !child.stderr) throw new Error('Failed to open Pi output streams');\n child.stdout.on('data', (chunk: string | Buffer) => {\n stdout += chunk.toString();\n });\n child.stderr.on('data', (chunk: string | Buffer) => {\n process.stderr.write(chunk);\n });\n }\n\n // Shared with the compatibility providers, so a second Ctrl-C still reaches\n // the child and SIGHUP and SIGQUIT are forwarded too.\n const stopForwarding = forwardSignals(child);\n const result = await telemetry\n .runInSpan(\n 'doom_pi.pi_session',\n {\n 'harness.extension.count': launchExtensions.length,\n 'harness.mode': options.outputFormat,\n },\n () => waitForExit(child),\n )\n .catch(async (error: unknown) => {\n // A spawn error means Pi never started, which is invisible to the\n // session telemetry the child would otherwise have reported.\n await telemetry.recordError(HARNESS_EVENT.launchFailed, error, {\n 'harness.duration_ms': Date.now() - startedAt,\n });\n throw error;\n })\n .finally(stopForwarding);\n\n void telemetry.recordEvent(HARNESS_EVENT.launchCompleted, {\n 'harness.exit_code': result,\n 'harness.duration_ms': Date.now() - startedAt,\n 'harness.mode': options.outputFormat ?? 'default',\n });\n\n if (options.outputFormat === VIBE_LINT_FORMAT && result === 0) {\n process.stdout.write(formatVibeLintResponse(stdout));\n }\n return result;\n }\n}\n"],"mappings":"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"}
@@ -1,9 +1,11 @@
1
- import { HarnessOptions } from "../interfaces/harness.cjs";
2
- import { HarnessTelemetry } from "../logSinkTelemetry.cjs";
3
- import { HarnessContext } from "../services/harnessContext.cjs";
1
+ import { HarnessTelemetry } from "../adapters/telemetry/logSinkTelemetry.cjs";
2
+ import { HarnessOptions } from "../types/interfaces/harness.cjs";
3
+ import { HarnessContext } from "../adapters/harnessContext.cjs";
4
4
  import { BaseCommand } from "./baseCommand.cjs";
5
5
 
6
6
  //#region src/commands/launchCommand.d.ts
7
+ /** Gives each Doompi launch a stable fallback identity without replacing one supplied by its caller. */
8
+ declare function ensureElicitationSessionId(environment: NodeJS.ProcessEnv): string;
7
9
  interface VibeLintInvocation {
8
10
  prompt: string;
9
11
  systemPrompt: string;
@@ -27,5 +29,5 @@ declare class LaunchCommand extends BaseCommand {
27
29
  execute(context: HarnessContext, telemetry: HarnessTelemetry): Promise<number>;
28
30
  }
29
31
  //#endregion
30
- export { LaunchCommand, VibeLintInvocation, buildVibeLintPiArgs, formatVibeLintResponse, overridePiThemes, parseVibeLintInvocation };
32
+ export { LaunchCommand, VibeLintInvocation, buildVibeLintPiArgs, ensureElicitationSessionId, formatVibeLintResponse, overridePiThemes, parseVibeLintInvocation };
31
33
  //# sourceMappingURL=launchCommand.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"launchCommand.d.cts","names":[],"sources":["../../src/commands/launchCommand.ts"],"mappings":";;;;;;UAuBiB,kBAAA;EACf,MAAA;EACA,YAAA;EACA,SAAA;EACA,eAAA;AAAA;AAAA,iBAGc,uBAAA,CAAwB,KAAA,WAAgB,kBAAA;AAAA,iBA6BxC,mBAAA,CAAoB,MAAA,YAAkB,UAAA,EAAY,kBAAA;AAAA,iBAclD,sBAAA,CAAuB,OAAA;;iBAKvB,gBAAA,CAAiB,MAAA,YAAkB,SAAA;;;AAhDnD;;;;cAkEa,aAAA,SAAsB,WAAA;EAAA,SACxB,IAAA;EAET,OAAA,CAAQ,QAAA,EAAU,cAAA;EAIZ,OAAA,CAAQ,OAAA,EAAS,cAAA,EAAgB,SAAA,EAAW,gBAAA,GAAmB,OAAA;AAAA"}
1
+ {"version":3,"file":"launchCommand.d.cts","names":[],"sources":["../../src/commands/launchCommand.ts"],"mappings":";;;;;;;iBA0BgB,0BAAA,CAA2B,WAAA,EAAa,MAAA,CAAO,UAAA;AAAA,UAO9C,kBAAA;EACf,MAAA;EACA,YAAA;EACA,SAAA;EACA,eAAA;AAAA;AAAA,iBAGc,uBAAA,CAAwB,KAAA,WAAgB,kBAAA;AAAA,iBA6BxC,mBAAA,CAAoB,MAAA,YAAkB,UAAA,EAAY,kBAAA;AAAA,iBAclD,sBAAA,CAAuB,OAAA;;iBAKvB,gBAAA,CAAiB,MAAA,YAAkB,SAAA;;;;;;;cAkBtC,aAAA,SAAsB,WAAA;EAAA,SACxB,IAAA;EAET,OAAA,CAAQ,QAAA,EAAU,cAAA;EAIZ,OAAA,CAAQ,OAAA,EAAS,cAAA,EAAgB,SAAA,EAAW,gBAAA,GAAmB,OAAA;AAAA"}
@@ -1,9 +1,11 @@
1
- import { HarnessOptions } from "../interfaces/harness.mjs";
2
- import { HarnessTelemetry } from "../logSinkTelemetry.mjs";
3
- import { HarnessContext } from "../services/harnessContext.mjs";
1
+ import { HarnessTelemetry } from "../adapters/telemetry/logSinkTelemetry.mjs";
2
+ import { HarnessOptions } from "../types/interfaces/harness.mjs";
3
+ import { HarnessContext } from "../adapters/harnessContext.mjs";
4
4
  import { BaseCommand } from "./baseCommand.mjs";
5
5
 
6
6
  //#region src/commands/launchCommand.d.ts
7
+ /** Gives each Doompi launch a stable fallback identity without replacing one supplied by its caller. */
8
+ declare function ensureElicitationSessionId(environment: NodeJS.ProcessEnv): string;
7
9
  interface VibeLintInvocation {
8
10
  prompt: string;
9
11
  systemPrompt: string;
@@ -27,5 +29,5 @@ declare class LaunchCommand extends BaseCommand {
27
29
  execute(context: HarnessContext, telemetry: HarnessTelemetry): Promise<number>;
28
30
  }
29
31
  //#endregion
30
- export { LaunchCommand, VibeLintInvocation, buildVibeLintPiArgs, formatVibeLintResponse, overridePiThemes, parseVibeLintInvocation };
32
+ export { LaunchCommand, VibeLintInvocation, buildVibeLintPiArgs, ensureElicitationSessionId, formatVibeLintResponse, overridePiThemes, parseVibeLintInvocation };
31
33
  //# sourceMappingURL=launchCommand.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"launchCommand.d.mts","names":[],"sources":["../../src/commands/launchCommand.ts"],"mappings":";;;;;;UAuBiB,kBAAA;EACf,MAAA;EACA,YAAA;EACA,SAAA;EACA,eAAA;AAAA;AAAA,iBAGc,uBAAA,CAAwB,KAAA,WAAgB,kBAAA;AAAA,iBA6BxC,mBAAA,CAAoB,MAAA,YAAkB,UAAA,EAAY,kBAAA;AAAA,iBAclD,sBAAA,CAAuB,OAAA;;iBAKvB,gBAAA,CAAiB,MAAA,YAAkB,SAAA;;;AAhDnD;;;;cAkEa,aAAA,SAAsB,WAAA;EAAA,SACxB,IAAA;EAET,OAAA,CAAQ,QAAA,EAAU,cAAA;EAIZ,OAAA,CAAQ,OAAA,EAAS,cAAA,EAAgB,SAAA,EAAW,gBAAA,GAAmB,OAAA;AAAA"}
1
+ {"version":3,"file":"launchCommand.d.mts","names":[],"sources":["../../src/commands/launchCommand.ts"],"mappings":";;;;;;;iBA0BgB,0BAAA,CAA2B,WAAA,EAAa,MAAA,CAAO,UAAA;AAAA,UAO9C,kBAAA;EACf,MAAA;EACA,YAAA;EACA,SAAA;EACA,eAAA;AAAA;AAAA,iBAGc,uBAAA,CAAwB,KAAA,WAAgB,kBAAA;AAAA,iBA6BxC,mBAAA,CAAoB,MAAA,YAAkB,UAAA,EAAY,kBAAA;AAAA,iBAclD,sBAAA,CAAuB,OAAA;;iBAKvB,gBAAA,CAAiB,MAAA,YAAkB,SAAA;;;;;;;cAkBtC,aAAA,SAAsB,WAAA;EAAA,SACxB,IAAA;EAET,OAAA,CAAQ,QAAA,EAAU,cAAA;EAIZ,OAAA,CAAQ,OAAA,EAAS,cAAA,EAAgB,SAAA,EAAW,gBAAA,GAAmB,OAAA;AAAA"}
@@ -1,2 +1,2 @@
1
- import{BaseCommand as e}from"./baseCommand.mjs";import{applyProjectTrust as t,hasProjectTrustOption as n,loadDoomConfig as r}from"../config/projectTrust.mjs";import{HARNESS_EVENT as i}from"../logSinkTelemetry.mjs";import"../config/index.mjs";import{isRecord as a}from"../utils/json.mjs";import{piCliPath as o}from"../utils/moduleResolution.mjs";import"../utils/index.mjs";import{forwardSignals as s,waitForExit as c}from"../services/compatibility/process.mjs";import l from"cross-spawn";const u=`vibe-lint`,d=`pipe`;function f(e){let t;try{t=JSON.parse(e)}catch(e){throw Error(`Expected a JSON vibe-lint invocation on stdin`,{cause:e})}if(!a(t)||typeof t.prompt!=`string`||typeof t.systemPrompt!=`string`)throw Error(`A vibe-lint invocation requires string prompt and systemPrompt fields`);if(t.maxTokens!==void 0&&typeof t.maxTokens!=`number`)throw Error(`A vibe-lint invocation maxTokens field must be a number`);if(t.screenshotPaths!==void 0&&(!Array.isArray(t.screenshotPaths)||!t.screenshotPaths.every(e=>typeof e==`string`)))throw Error(`A vibe-lint invocation screenshotPaths field must be an array of strings`);return{prompt:t.prompt,systemPrompt:t.systemPrompt,maxTokens:t.maxTokens,screenshotPaths:t.screenshotPaths}}function p(e,t){return[...e,`--print`,...n(e)?[]:[`--approve`],`--no-session`,`--system-prompt`,t.systemPrompt,...(t.screenshotPaths??[]).map(e=>`@${e}`),t.prompt]}function m(e){return`${JSON.stringify({content:e.trim()})}\n`}function h(e,t){return[`--no-themes`,`--theme`,t,...e]}async function g(){let e=[];for await(let t of process.stdin)e.push(Buffer.isBuffer(t)?t:Buffer.from(String(t)));return Buffer.concat(e).toString(`utf-8`)}var _=class extends e{name=`launch`;matches(e){return!0}async execute(e,a){let{options:_,environment:v}=e,{buildRuntimeBundle:y,createRuntimeExtensionPlan:b}=await import(`../services/runtimeBundle.mjs`),{extensions:x,childExtensions:S}=b(e);v.DOOMPI_CHILD_EXTENSIONS=JSON.stringify(S);let C=x;try{C=[(await y(e,{extensions:x,childExtensions:S})).bundle],v.DOOMPI_EXTENSIONS_PROVIDED=`1`}catch(e){let t=e instanceof Error?e.message:String(e);process.stderr.write(`[doompi] extension bundle unavailable; using individual entries: ${t}\n`)}let w;try{w=r(_.repoRoot)}catch(e){throw await a.recordError(i.configLoadFailed,e,{"harness.phase":`load_config`}),e}a.recordEvent(i.projectTrustResolved,{"harness.project_trust":w.projectTrust,"harness.project_trust.overridden":n(_.piArgs)});let T=t(_.piArgs,w);T=h(T,e.defaultThemePath);for(let e of C)T=[`--extension`,e,...T];if(_.outputFormat===u){let e=f(await g());T=p(T,e)}let E=Date.now(),D=l(process.execPath,[o(),...T],{cwd:_.cwd,env:v,stdio:_.outputFormat===u?[`ignore`,d,d]:`inherit`}),O=``;if(_.outputFormat===u){if(!D.stdout||!D.stderr)throw Error(`Failed to open Pi output streams`);D.stdout.on(`data`,e=>{O+=e.toString()}),D.stderr.on(`data`,e=>{process.stderr.write(e)})}let k=s(D),A=await a.runInSpan(`doom_pi.pi_session`,{"harness.extension.count":C.length,"harness.mode":_.outputFormat},()=>c(D)).catch(async e=>{throw await a.recordError(i.launchFailed,e,{"harness.duration_ms":Date.now()-E}),e}).finally(k);return a.recordEvent(i.launchCompleted,{"harness.exit_code":A,"harness.duration_ms":Date.now()-E,"harness.mode":_.outputFormat??`default`}),_.outputFormat===u&&A===0&&process.stdout.write(m(O)),A}};export{_ as LaunchCommand,p as buildVibeLintPiArgs,m as formatVibeLintResponse,h as overridePiThemes,f as parseVibeLintInvocation};
1
+ import{piCliPath as e}from"../adapters/modules/moduleResolution.mjs";import{isRecord as t}from"../adapters/serialization/json.mjs";import"../utils/index.mjs";import{BaseCommand as n}from"./baseCommand.mjs";import{HARNESS_EVENT as r}from"../adapters/telemetry/logSinkTelemetry.mjs";import{applyProjectTrust as i,hasProjectTrustOption as a,loadDoomConfig as o}from"../services/config/projectTrust.mjs";import"../services/config/index.mjs";import{forwardSignals as s,waitForExit as c}from"../adapters/compatibility/process.mjs";import{randomUUID as l}from"node:crypto";import u from"cross-spawn";import{DOOMPI_EXTENSIONS_PROVIDED_ENV as d}from"@agimon-ai/doompi-extension-contracts/child-process";const f=`vibe-lint`,p=`pipe`,m=`ELICITATION_SESSION_ID`;function h(e){let t=e[m]?.trim()||l();return e[m]=t,t}function g(e){let n;try{n=JSON.parse(e)}catch(e){throw Error(`Expected a JSON vibe-lint invocation on stdin`,{cause:e})}if(!t(n)||typeof n.prompt!=`string`||typeof n.systemPrompt!=`string`)throw Error(`A vibe-lint invocation requires string prompt and systemPrompt fields`);if(n.maxTokens!==void 0&&typeof n.maxTokens!=`number`)throw Error(`A vibe-lint invocation maxTokens field must be a number`);if(n.screenshotPaths!==void 0&&(!Array.isArray(n.screenshotPaths)||!n.screenshotPaths.every(e=>typeof e==`string`)))throw Error(`A vibe-lint invocation screenshotPaths field must be an array of strings`);return{prompt:n.prompt,systemPrompt:n.systemPrompt,maxTokens:n.maxTokens,screenshotPaths:n.screenshotPaths}}function _(e,t){return[...e,`--print`,...a(e)?[]:[`--approve`],`--no-session`,`--system-prompt`,t.systemPrompt,...(t.screenshotPaths??[]).map(e=>`@${e}`),t.prompt]}function v(e){return`${JSON.stringify({content:e.trim()})}\n`}function y(e,t){return[`--no-themes`,`--theme`,t,...e]}async function b(){let e=[];for await(let t of process.stdin)e.push(Buffer.isBuffer(t)?t:Buffer.from(String(t)));return Buffer.concat(e).toString(`utf-8`)}var x=class extends n{name=`launch`;matches(e){return!0}async execute(t,n){let{options:l,environment:m}=t;h(m);let{buildRuntimeBundle:x,createRuntimeExtensionPlan:S}=await import(`../adapters/runtimeBundle.mjs`),{extensions:C,childExtensions:w}=S(t);m.DOOMPI_CHILD_EXTENSIONS=JSON.stringify(w);let T=C;try{T=[(await x(t,{extensions:C,childExtensions:w})).bundle],m[d]=`1`}catch(e){let t=e instanceof Error?e.message:String(e);process.stderr.write(`[doompi] extension bundle unavailable; using individual entries: ${t}\n`)}let E;try{E=o(l.repoRoot)}catch(e){throw await n.recordError(r.configLoadFailed,e,{"harness.phase":`load_config`}),e}n.recordEvent(r.projectTrustResolved,{"harness.project_trust":E.projectTrust,"harness.project_trust.overridden":a(l.piArgs)});let D=i(l.piArgs,E);D=y(D,t.defaultThemePath);for(let e of T)D=[`--extension`,e,...D];if(l.outputFormat===f){let e=g(await b());D=_(D,e)}let O=Date.now(),k=u(process.execPath,[e(),...D],{cwd:l.cwd,env:m,stdio:l.outputFormat===f?[`ignore`,p,p]:`inherit`}),A=``;if(l.outputFormat===f){if(!k.stdout||!k.stderr)throw Error(`Failed to open Pi output streams`);k.stdout.on(`data`,e=>{A+=e.toString()}),k.stderr.on(`data`,e=>{process.stderr.write(e)})}let j=s(k),M=await n.runInSpan(`doom_pi.pi_session`,{"harness.extension.count":T.length,"harness.mode":l.outputFormat},()=>c(k)).catch(async e=>{throw await n.recordError(r.launchFailed,e,{"harness.duration_ms":Date.now()-O}),e}).finally(j);return n.recordEvent(r.launchCompleted,{"harness.exit_code":M,"harness.duration_ms":Date.now()-O,"harness.mode":l.outputFormat??`default`}),l.outputFormat===f&&M===0&&process.stdout.write(v(A)),M}};export{x as LaunchCommand,_ as buildVibeLintPiArgs,h as ensureElicitationSessionId,v as formatVibeLintResponse,y as overridePiThemes,g as parseVibeLintInvocation};
2
2
  //# sourceMappingURL=launchCommand.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"launchCommand.mjs","names":[],"sources":["../../src/commands/launchCommand.ts"],"sourcesContent":["import spawn from 'cross-spawn';\nimport { applyProjectTrust, hasProjectTrustOption, loadDoomConfig, type DoomConfig } from '../config/index.ts';\nimport type { HarnessOptions } from '../interfaces/index.ts';\nimport { HARNESS_EVENT, type HarnessTelemetry } from '../logSinkTelemetry.ts';\nimport type { HarnessContext } from '../services/index.ts';\nimport { forwardSignals, waitForExit } from '../services/compatibility/process.ts';\nimport { isRecord, piCliPath } from '../utils/index.ts';\nimport { BaseCommand } from './baseCommand.ts';\n\nconst VIBE_LINT_FORMAT = 'vibe-lint';\nconst PRINT_OPTION = '--print';\nconst APPROVE_OPTION = '--approve';\nconst NO_SESSION_OPTION = '--no-session';\nconst SYSTEM_PROMPT_OPTION = '--system-prompt';\nconst THEME_OPTION = '--theme';\nconst NO_THEMES_OPTION = '--no-themes';\nconst EXTENSION_OPTION = '--extension';\nconst IGNORE_STDIO = 'ignore';\nconst PIPE_STDIO = 'pipe';\nconst INHERIT_STDIO = 'inherit';\nconst EXTERNAL_EXTENSIONS_ENV = 'DOOMPI_EXTENSIONS_PROVIDED';\nconst ENABLED_ENV = '1';\n\nexport interface VibeLintInvocation {\n prompt: string;\n systemPrompt: string;\n maxTokens?: number;\n screenshotPaths?: string[];\n}\n\nexport function parseVibeLintInvocation(input: string): VibeLintInvocation {\n let parsed: unknown;\n try {\n parsed = JSON.parse(input);\n } catch (error) {\n throw new Error('Expected a JSON vibe-lint invocation on stdin', { cause: error });\n }\n\n if (!isRecord(parsed) || typeof parsed.prompt !== 'string' || typeof parsed.systemPrompt !== 'string') {\n throw new Error('A vibe-lint invocation requires string prompt and systemPrompt fields');\n }\n if (parsed.maxTokens !== undefined && typeof parsed.maxTokens !== 'number') {\n throw new Error('A vibe-lint invocation maxTokens field must be a number');\n }\n if (\n parsed.screenshotPaths !== undefined &&\n (!Array.isArray(parsed.screenshotPaths) || !parsed.screenshotPaths.every((value) => typeof value === 'string'))\n ) {\n throw new Error('A vibe-lint invocation screenshotPaths field must be an array of strings');\n }\n\n return {\n prompt: parsed.prompt,\n systemPrompt: parsed.systemPrompt,\n maxTokens: parsed.maxTokens,\n screenshotPaths: parsed.screenshotPaths as string[] | undefined,\n };\n}\n\nexport function buildVibeLintPiArgs(piArgs: string[], invocation: VibeLintInvocation): string[] {\n return [\n ...piArgs,\n PRINT_OPTION,\n ...(!hasProjectTrustOption(piArgs) ? [APPROVE_OPTION] : []),\n // Reviews are disposable and must not appear in Pi's resume history.\n NO_SESSION_OPTION,\n SYSTEM_PROMPT_OPTION,\n invocation.systemPrompt,\n ...(invocation.screenshotPaths ?? []).map((screenshotPath) => `@${screenshotPath}`),\n invocation.prompt,\n ];\n}\n\nexport function formatVibeLintResponse(content: string): string {\n return `${JSON.stringify({ content: content.trim() })}\\n`;\n}\n\n/** Ignores configured themes and loads only themes explicitly passed to the launcher. */\nexport function overridePiThemes(piArgs: string[], themePath: string): string[] {\n return [NO_THEMES_OPTION, THEME_OPTION, themePath, ...piArgs];\n}\n\nasync function readStdin(): Promise<string> {\n const chunks: Buffer[] = [];\n for await (const chunk of process.stdin) {\n chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(String(chunk)));\n }\n return Buffer.concat(chunks).toString('utf-8');\n}\n\n/**\n * Spawns Pi with the resolved extensions, environment, and theme.\n *\n * This is the default command: it matches whenever no diagnostic flag claimed\n * the run.\n */\nexport class LaunchCommand extends BaseCommand {\n readonly name = 'launch';\n\n matches(_options: HarnessOptions): boolean {\n return true;\n }\n\n async execute(context: HarnessContext, telemetry: HarnessTelemetry): Promise<number> {\n const { options, environment } = context;\n\n const { buildRuntimeBundle, createRuntimeExtensionPlan } = await import('../services/runtimeBundle.ts');\n const { extensions, childExtensions } = createRuntimeExtensionPlan(context);\n environment.DOOMPI_CHILD_EXTENSIONS = JSON.stringify(childExtensions);\n\n // Pi normally imports each package entry separately. Flattening the exact\n // Pi load order into one graph removes repeated module resolution and parse\n // work. The graph manifest makes the common path a stat-only cache hit;\n // compilation failure keeps the historical extension list intact.\n let launchExtensions = extensions;\n try {\n const built = await buildRuntimeBundle(context, { extensions, childExtensions });\n launchExtensions = [built.bundle];\n // A synced repository also has the doom wrapper in project settings. It\n // must not compose the same factories after this aggregate has run.\n environment[EXTERNAL_EXTENSIONS_ENV] = ENABLED_ENV;\n } catch (error) {\n const detail = error instanceof Error ? error.message : String(error);\n process.stderr.write(`[doompi] extension bundle unavailable; using individual entries: ${detail}\\n`);\n }\n\n // A malformed .doom/config.yaml aborts the launch, and the message only\n // reaches the terminal that ran it, so record it before it propagates.\n let doomConfig: DoomConfig;\n try {\n doomConfig = loadDoomConfig(options.repoRoot);\n } catch (error) {\n await telemetry.recordError(HARNESS_EVENT.configLoadFailed, error, { 'harness.phase': 'load_config' });\n throw error;\n }\n\n // Whether a session ran with repository approval is the single most useful\n // fact when reconstructing what an agent was allowed to do.\n void telemetry.recordEvent(HARNESS_EVENT.projectTrustResolved, {\n 'harness.project_trust': doomConfig.projectTrust,\n 'harness.project_trust.overridden': hasProjectTrustOption(options.piArgs),\n });\n\n let piArgs = applyProjectTrust(options.piArgs, doomConfig);\n piArgs = overridePiThemes(piArgs, context.defaultThemePath);\n for (const extension of launchExtensions) piArgs = [EXTENSION_OPTION, extension, ...piArgs];\n\n if (options.outputFormat === VIBE_LINT_FORMAT) {\n const invocation = parseVibeLintInvocation(await readStdin());\n piArgs = buildVibeLintPiArgs(piArgs, invocation);\n }\n\n const startedAt = Date.now();\n const child = spawn(process.execPath, [piCliPath(), ...piArgs], {\n cwd: options.cwd,\n env: environment,\n stdio: options.outputFormat === VIBE_LINT_FORMAT ? [IGNORE_STDIO, PIPE_STDIO, PIPE_STDIO] : INHERIT_STDIO,\n });\n let stdout = '';\n if (options.outputFormat === VIBE_LINT_FORMAT) {\n if (!child.stdout || !child.stderr) throw new Error('Failed to open Pi output streams');\n child.stdout.on('data', (chunk: string | Buffer) => {\n stdout += chunk.toString();\n });\n child.stderr.on('data', (chunk: string | Buffer) => {\n process.stderr.write(chunk);\n });\n }\n\n // Shared with the compatibility providers, so a second Ctrl-C still reaches\n // the child and SIGHUP and SIGQUIT are forwarded too.\n const stopForwarding = forwardSignals(child);\n const result = await telemetry\n .runInSpan(\n 'doom_pi.pi_session',\n {\n 'harness.extension.count': launchExtensions.length,\n 'harness.mode': options.outputFormat,\n },\n () => waitForExit(child),\n )\n .catch(async (error: unknown) => {\n // A spawn error means Pi never started, which is invisible to the\n // session telemetry the child would otherwise have reported.\n await telemetry.recordError(HARNESS_EVENT.launchFailed, error, {\n 'harness.duration_ms': Date.now() - startedAt,\n });\n throw error;\n })\n .finally(stopForwarding);\n\n void telemetry.recordEvent(HARNESS_EVENT.launchCompleted, {\n 'harness.exit_code': result,\n 'harness.duration_ms': Date.now() - startedAt,\n 'harness.mode': options.outputFormat ?? 'default',\n });\n\n if (options.outputFormat === VIBE_LINT_FORMAT && result === 0) {\n process.stdout.write(formatVibeLintResponse(stdout));\n }\n return result;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"launchCommand.mjs","names":[],"sources":["../../src/commands/launchCommand.ts"],"sourcesContent":["import { randomUUID } from 'node:crypto';\nimport { DOOMPI_EXTENSIONS_PROVIDED_ENV } from '@agimon-ai/doompi-extension-contracts/child-process';\nimport spawn from 'cross-spawn';\nimport { forwardSignals, waitForExit } from '../adapters/compatibility/process.ts';\nimport { HARNESS_EVENT, type HarnessTelemetry } from '../adapters/telemetry/logSinkTelemetry.ts';\nimport { applyProjectTrust, type DoomConfig, hasProjectTrustOption, loadDoomConfig } from '../services/config/index.ts';\nimport type { HarnessContext } from '../services/index.ts';\nimport type { HarnessOptions } from '../types/interfaces/index.ts';\nimport { isRecord, piCliPath } from '../utils/index.ts';\nimport { BaseCommand } from './baseCommand.ts';\n\nconst VIBE_LINT_FORMAT = 'vibe-lint';\nconst PRINT_OPTION = '--print';\nconst APPROVE_OPTION = '--approve';\nconst NO_SESSION_OPTION = '--no-session';\nconst SYSTEM_PROMPT_OPTION = '--system-prompt';\nconst THEME_OPTION = '--theme';\nconst NO_THEMES_OPTION = '--no-themes';\nconst EXTENSION_OPTION = '--extension';\nconst IGNORE_STDIO = 'ignore';\nconst PIPE_STDIO = 'pipe';\nconst INHERIT_STDIO = 'inherit';\nconst ENABLED_ENV = '1';\nconst ELICITATION_SESSION_ENV = 'ELICITATION_SESSION_ID';\n\n/** Gives each Doompi launch a stable fallback identity without replacing one supplied by its caller. */\nexport function ensureElicitationSessionId(environment: NodeJS.ProcessEnv): string {\n const provided = environment[ELICITATION_SESSION_ENV]?.trim();\n const sessionId = provided || randomUUID();\n environment[ELICITATION_SESSION_ENV] = sessionId;\n return sessionId;\n}\n\nexport interface VibeLintInvocation {\n prompt: string;\n systemPrompt: string;\n maxTokens?: number;\n screenshotPaths?: string[];\n}\n\nexport function parseVibeLintInvocation(input: string): VibeLintInvocation {\n let parsed: unknown;\n try {\n parsed = JSON.parse(input);\n } catch (error) {\n throw new Error('Expected a JSON vibe-lint invocation on stdin', { cause: error });\n }\n\n if (!isRecord(parsed) || typeof parsed.prompt !== 'string' || typeof parsed.systemPrompt !== 'string') {\n throw new Error('A vibe-lint invocation requires string prompt and systemPrompt fields');\n }\n if (parsed.maxTokens !== undefined && typeof parsed.maxTokens !== 'number') {\n throw new Error('A vibe-lint invocation maxTokens field must be a number');\n }\n if (\n parsed.screenshotPaths !== undefined &&\n (!Array.isArray(parsed.screenshotPaths) || !parsed.screenshotPaths.every((value) => typeof value === 'string'))\n ) {\n throw new Error('A vibe-lint invocation screenshotPaths field must be an array of strings');\n }\n\n return {\n prompt: parsed.prompt,\n systemPrompt: parsed.systemPrompt,\n maxTokens: parsed.maxTokens,\n screenshotPaths: parsed.screenshotPaths as string[] | undefined,\n };\n}\n\nexport function buildVibeLintPiArgs(piArgs: string[], invocation: VibeLintInvocation): string[] {\n return [\n ...piArgs,\n PRINT_OPTION,\n ...(!hasProjectTrustOption(piArgs) ? [APPROVE_OPTION] : []),\n // Reviews are disposable and must not appear in Pi's resume history.\n NO_SESSION_OPTION,\n SYSTEM_PROMPT_OPTION,\n invocation.systemPrompt,\n ...(invocation.screenshotPaths ?? []).map((screenshotPath) => `@${screenshotPath}`),\n invocation.prompt,\n ];\n}\n\nexport function formatVibeLintResponse(content: string): string {\n return `${JSON.stringify({ content: content.trim() })}\\n`;\n}\n\n/** Ignores configured themes and loads only themes explicitly passed to the launcher. */\nexport function overridePiThemes(piArgs: string[], themePath: string): string[] {\n return [NO_THEMES_OPTION, THEME_OPTION, themePath, ...piArgs];\n}\n\nasync function readStdin(): Promise<string> {\n const chunks: Buffer[] = [];\n for await (const chunk of process.stdin) {\n chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(String(chunk)));\n }\n return Buffer.concat(chunks).toString('utf-8');\n}\n\n/**\n * Spawns Pi with the resolved extensions, environment, and theme.\n *\n * This is the default command: it matches whenever no diagnostic flag claimed\n * the run.\n */\nexport class LaunchCommand extends BaseCommand {\n readonly name = 'launch';\n\n matches(_options: HarnessOptions): boolean {\n return true;\n }\n\n async execute(context: HarnessContext, telemetry: HarnessTelemetry): Promise<number> {\n const { options, environment } = context;\n ensureElicitationSessionId(environment);\n\n const { buildRuntimeBundle, createRuntimeExtensionPlan } = await import('../adapters/runtimeBundle.ts');\n const { extensions, childExtensions } = createRuntimeExtensionPlan(context);\n environment.DOOMPI_CHILD_EXTENSIONS = JSON.stringify(childExtensions);\n\n // Pi normally imports each package entry separately. Flattening the exact\n // Pi load order into one graph removes repeated module resolution and parse\n // work. The graph manifest makes the common path a stat-only cache hit;\n // compilation failure keeps the historical extension list intact.\n let launchExtensions = extensions;\n try {\n const built = await buildRuntimeBundle(context, { extensions, childExtensions });\n launchExtensions = [built.bundle];\n // A synced repository also has the doom wrapper in project settings. It\n // must not compose the same factories after this aggregate has run.\n environment[DOOMPI_EXTENSIONS_PROVIDED_ENV] = ENABLED_ENV;\n } catch (error) {\n const detail = error instanceof Error ? error.message : String(error);\n process.stderr.write(`[doompi] extension bundle unavailable; using individual entries: ${detail}\\n`);\n }\n\n // A malformed .doom/config.yaml aborts the launch, and the message only\n // reaches the terminal that ran it, so record it before it propagates.\n let doomConfig: DoomConfig;\n try {\n doomConfig = loadDoomConfig(options.repoRoot);\n } catch (error) {\n await telemetry.recordError(HARNESS_EVENT.configLoadFailed, error, { 'harness.phase': 'load_config' });\n throw error;\n }\n\n // Whether a session ran with repository approval is the single most useful\n // fact when reconstructing what an agent was allowed to do.\n void telemetry.recordEvent(HARNESS_EVENT.projectTrustResolved, {\n 'harness.project_trust': doomConfig.projectTrust,\n 'harness.project_trust.overridden': hasProjectTrustOption(options.piArgs),\n });\n\n let piArgs = applyProjectTrust(options.piArgs, doomConfig);\n piArgs = overridePiThemes(piArgs, context.defaultThemePath);\n for (const extension of launchExtensions) piArgs = [EXTENSION_OPTION, extension, ...piArgs];\n\n if (options.outputFormat === VIBE_LINT_FORMAT) {\n const invocation = parseVibeLintInvocation(await readStdin());\n piArgs = buildVibeLintPiArgs(piArgs, invocation);\n }\n\n const startedAt = Date.now();\n const child = spawn(process.execPath, [piCliPath(), ...piArgs], {\n cwd: options.cwd,\n env: environment,\n stdio: options.outputFormat === VIBE_LINT_FORMAT ? [IGNORE_STDIO, PIPE_STDIO, PIPE_STDIO] : INHERIT_STDIO,\n });\n let stdout = '';\n if (options.outputFormat === VIBE_LINT_FORMAT) {\n if (!child.stdout || !child.stderr) throw new Error('Failed to open Pi output streams');\n child.stdout.on('data', (chunk: string | Buffer) => {\n stdout += chunk.toString();\n });\n child.stderr.on('data', (chunk: string | Buffer) => {\n process.stderr.write(chunk);\n });\n }\n\n // Shared with the compatibility providers, so a second Ctrl-C still reaches\n // the child and SIGHUP and SIGQUIT are forwarded too.\n const stopForwarding = forwardSignals(child);\n const result = await telemetry\n .runInSpan(\n 'doom_pi.pi_session',\n {\n 'harness.extension.count': launchExtensions.length,\n 'harness.mode': options.outputFormat,\n },\n () => waitForExit(child),\n )\n .catch(async (error: unknown) => {\n // A spawn error means Pi never started, which is invisible to the\n // session telemetry the child would otherwise have reported.\n await telemetry.recordError(HARNESS_EVENT.launchFailed, error, {\n 'harness.duration_ms': Date.now() - startedAt,\n });\n throw error;\n })\n .finally(stopForwarding);\n\n void telemetry.recordEvent(HARNESS_EVENT.launchCompleted, {\n 'harness.exit_code': result,\n 'harness.duration_ms': Date.now() - startedAt,\n 'harness.mode': options.outputFormat ?? 'default',\n });\n\n if (options.outputFormat === VIBE_LINT_FORMAT && result === 0) {\n process.stdout.write(formatVibeLintResponse(stdout));\n }\n return result;\n }\n}\n"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../_virtual/_rolldown/runtime.cjs`),t=require(`../cli/matrixOptions.cjs`),n=require(`../cli/options.cjs`),r=require(`../config/projectTrust.cjs`);require(`../config/index.cjs`);const i=require(`../utils/moduleResolution.cjs`),a=require(`../utils/repository.cjs`);require(`../utils/index.cjs`);const o=require(`../services/extensionAssembler.cjs`),s=require(`../services/resourceCollector.cjs`),c=require(`../services/harnessContext.cjs`),l=require(`../services/extensionCompiler.cjs`),u=require(`../services/runtimeBundle.cjs`),d=require(`../services/syncState.cjs`),f=require(`../services/piSettings.cjs`);let p=require(`node:path`);p=e.__toESM(p,1);let m=require(`node:fs`);m=e.__toESM(m,1);let h=require(`node:child_process`),g=require(`@agimon-ai/doompi-config`),_=require(`@agimon-ai/doompi-config/majorModes`),v=require(`@agimon-ai/doompi-config/domains`),y=require(`@agimon-ai/doompi-ui/theme`);const b=`--check`,x=p.default.join(`tools`,`harness`,`emit-hooks.mjs`),S=`cache`,C=`dist`,w=`doom`,T=`(none)`,E=[`DOOMPI_`],D=[`CLAUDE_PROJECT_DIR`,`CODEX_REPO_ROOT`,`ORIGINAL_REPO_PATH`,`MCP_UI_VIEWER`],O=new Set([`DOOMPI_CHILD_EXTENSIONS`,`DOOMPI_COMPOSED`,`DOOMPI_MUTE`,`DOOMPI_TEMP_DIR`,g.HARNESS_STATE_POINTER,`PI_SUBAGENT_PI_BINARY`]);function k(e){let t={};for(let[n,r]of Object.entries(e))r===void 0||O.has(n)||(D.includes(n)||E.some(e=>n.startsWith(e)))&&(t[n]=r);return t}function A(e,n){let{selection:i}=r.loadDoomConfig(e);return i?{...n,...i.majorMode&&!n.DOOMPI_MAJOR_MODE?{[t.DOOMPI_MAJOR_MODE_ENV]:i.majorMode}:{},...i.profile&&!n.DOOMPI_PROFILE?{[t.DOOMPI_PROFILE_ENV]:i.profile}:{},...i.domains&&n.DOOMPI_DOMAINS===void 0?{[t.DOOMPI_DOMAINS_ENV]:i.domains.join(`,`)}:{}}:n}function j(e){return{majorMode:e.majorMode,domains:e.domains,profile:e.profile,preset:e.preset}}function M(e,t,n){if(!n)return[`no sync state: run doompi sync`];let r=[],a=n.selection;(a.majorMode!==t.majorMode||a.profile!==t.profile||a.preset!==t.preset||a.domains.join(`,`)!==t.domains.join(`,`))&&r.push(`selection changed since the last sync`),d.computeInputsHash(e,a)!==n.inputsHash&&r.push(`.doom configuration changed`),JSON.stringify(d.recordResolvedEntries((0,_.loadMajorModesConfig)(e),o.createLayerResolvers(e)))!==JSON.stringify(n.resolved)&&r.push(`resolved extension paths changed`);let s=f.readPiSettings(e);return f.serializePiSettings(f.mergePiSettings(s,e,{extensionEntry:n.bootstrap??i.ownEntry(w),themePath:n.baseline.themePath,themeName:n.baseline.themeName}))!==f.serializePiSettings(s)&&r.push(`.pi/settings.json is out of date`),r}function N(e,t){let n=p.default.join(e,x);if(!m.default.existsSync(n))return;let r=(0,h.spawnSync)(process.execPath,[n,`--write`],{cwd:e,encoding:`utf8`});if(r.status===0){t.write(`hooks: regenerated for Claude Code and Codex
2
- `);return}t.write(`hooks: emit-hooks failed (${r.stderr?.trim()||`exit ${String(r.status)}`})\n`)}function P(e,t){let{selection:n}=e;return[`mode: ${n.majorMode}`,`domains: ${n.domains.join(`, `)||T}`,`profile: ${n.profile??T}`,`skills: ${e.skillCount}`,`agents: ${e.agentCount}`,`mcp: ${e.mcpServers.join(`, `)||T}`,`state: ${e.statePath}`,`settings: ${e.settingsPath}`,``,`Run pi from the repository root to use it.`,...t===`always`?[`Pi asks once before loading project extensions: answer yes, or run /trust in the session.`]:[],``].join(`
3
- `)}async function F(e,t,n,r,i,a){let c={},f=(e,n)=>({majorMode:e,domains:[...t.options.domains],profile:t.options.profile,preset:t.options.preset,mute:n,autoStop:!1,agents:t.options.agents,mcp:t.options.mcp}),p=(e,i)=>{let a=d.createMapResolvers(n,i?void 0:r),c=s.selectWorkflowExtensionForProcess(a.optionalPackageEntry(o.CONTEXT_PACKAGES.workflow),a.optionalPackageEntry(o.CONTEXT_PACKAGES.dispatcherWorkflow),t.environment);return{base:{agents:t.options.agents,autoStop:!1,preset:t.options.preset,mcpEntry:t.options.mcp?a.optionalPackageEntry(o.CONTEXT_PACKAGES.mcp):void 0,personaEntry:a.ownEntry(o.PERSONA_ENTRY),workflowExtension:c,majorModesConfig:t.majorModesConfig,resolvers:a},layers:e}};for(let[n,r]of Object.entries(t.majorModesConfig.majorMode)){let s=o.filterHookDisabledLayers(r,t.options.hooks);for(let r of[!1,!0]){let d=p(s,!0),m=p(s,!1),h=[...o.assembleExtensions({...d.base,layers:d.layers,mute:r})].reverse(),g=[...o.assembleExtensions({...m.base,layers:m.layers,mute:r})].reverse(),_=o.assembleChildExtensions({...d.base,layers:d.layers,agents:!1,mute:!0}),v=l.extensionSetKey(g);try{c[v]=(await u.compileModeExtension({repoRoot:e,selection:f(n,r),extensionPaths:h,childExtensionPaths:_,skillPaths:t.skillPaths,pluginRoots:t.pluginRoots,outputName:`${n}${r?`.mute`:``}`,cacheDirectory:i,outputDirectory:a})).bundle}catch(e){let t=e instanceof Error?e.message:String(e);process.stderr.write(`[doompi] could not precompile ${n}${r?` (mute)`:``}: ${t}\n`)}}}return c}var I=class{name=`sync`;matches(e){return e[0]===this.name}async execute(e,t=process.env,i=process.cwd(),o=process.stdout){let s=e.includes(b),c=e.slice(1).filter(e=>e!==b),l=t.DOOMPI_ROOT,u=l?p.default.resolve(l):a.findRepositoryRoot(i),f=(0,_.loadMajorModesConfig)(u).defaultMajorMode,m=(0,v.loadDomains)(u).defaultDomains,h=n.parseHarnessArgs(c,A(u,t),i,f,m),g=j(h.options);if(s){let e=M(u,g,d.readSyncState(u));return e.length===0?(o.write(`doompi sync is up to date
4
- `),0):(o.write(`doompi sync is out of date:\n${e.map(e=>` ${e}`).join(`
5
- `)}\n`),1)}let y=await this.stage(u,h.options);return N(u,o),o.write(P(y,r.loadDoomConfig(u).projectTrust)),0}async stage(e,t){let n=d.syncDirectory(e),r=new Set([`run`,S,C]);for(let e of m.default.existsSync(n)?m.default.readdirSync(n):[])r.has(e)||m.default.rmSync(p.default.join(n,e),{recursive:!0,force:!0});let a=await c.buildHarnessContext({...t,repoRoot:e,cwd:e,resourceDirectory:n}),s=j(t),u=d.recordResolvedEntries(a.majorModesConfig,o.createLayerResolvers(e)),h=p.default.join(n,S),_=p.default.join(n,C),v=await l.compileResolvedEntries(u,h),b=await F(e,{options:t,majorModesConfig:a.majorModesConfig,environment:a.environment,skillPaths:a.resources.skillDirectories,pluginRoots:a.plugins.map(e=>e.directory)},u,v,h,_),x=await l.compileExtensionSet([i.ownEntry(w)],h,{outputDirectory:_,outputName:`bootstrap`}),T={version:5,root:e,inputsHash:d.computeInputsHash(e,s),selection:s,env:k(a.environment),fileState:{profileEnvironment:(0,g.loadHarnessState)(a.environment).state.profileEnvironment,pluginHooks:a.resources.pluginHooks},resolved:u,compiled:v,bundles:b,bootstrap:x,baseline:{mcpConfigPath:a.resources.mcpConfigPath,personaFile:a.environment.DOOMPI_PERSONA_FILE,themePath:a.defaultThemePath,themeName:y.DEFAULT_THEME_NAME}};return{statePath:await d.writeSyncState(e,T),settingsPath:f.writePiSettings(e,{extensionEntry:x,themePath:T.baseline.themePath,themeName:T.baseline.themeName}),selection:s,mcpServers:T.baseline.mcpConfigPath?d.readMcpServerNames(T.baseline.mcpConfigPath):[],skillCount:a.resources.skillCount,agentCount:a.resources.agentCount}}};exports.SyncCommand=I,exports.collectDrift=M,exports.formatSyncResult=P,exports.recordedEnvironment=k,exports.selectionEnvironment=A,exports.toSelection=j;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../_virtual/_rolldown/runtime.cjs`),t=require(`../adapters/repository/repository.cjs`),n=require(`../adapters/syncLocation.cjs`);require(`../utils/index.cjs`);const r=require(`../services/extensionAssembler.cjs`);require(`../adapters/syncStateContract.cjs`);const i=require(`../adapters/syncState.cjs`),a=require(`./cli/matrixOptions.cjs`),o=require(`./cli/options.cjs`),s=require(`../services/config/projectTrust.cjs`);require(`../services/config/index.cjs`);const c=require(`../adapters/harnessContext.cjs`),l=require(`../adapters/piSettings.cjs`),u=require(`../adapters/piExtensionAlias.cjs`),d=require(`../adapters/projectPiSettings.cjs`);let f=require(`node:path`);f=e.__toESM(f,1);let p=require(`node:fs`);p=e.__toESM(p,1);let m=require(`node:os`);m=e.__toESM(m,1);let h=require(`node:child_process`),g=require(`@agimon-ai/doompi-config/harnessStore`),_=require(`@agimon-ai/doompi-config/majorModes`),v=require(`@agimon-ai/doompi-ui/theme`),y=require(`@agimon-ai/doompi-config/domains`);const b=`--check`,x=f.default.join(`tools`,`harness`,`emit-hooks.mjs`),S=`(none)`,C=[`DOOMPI_`],w=[`CLAUDE_PROJECT_DIR`,`CODEX_REPO_ROOT`,`ORIGINAL_REPO_PATH`,`MCP_UI_VIEWER`],T=new Set([`DOOMPI_CHILD_EXTENSIONS`,`DOOMPI_COMPOSED`,`DOOMPI_MUTE`,`DOOMPI_TEMP_DIR`,g.HARNESS_STATE_POINTER,`PI_SUBAGENT_PI_BINARY`]);function E(e){let t={};for(let[n,r]of Object.entries(e))r===void 0||T.has(n)||(w.includes(n)||C.some(e=>n.startsWith(e)))&&(t[n]=r);return t}function D(e,t){let{selection:n}=s.loadDoomConfig(e);return n?{...t,...n.majorMode&&!t.DOOMPI_MAJOR_MODE?{[a.DOOMPI_MAJOR_MODE_ENV]:n.majorMode}:{},...n.profile&&!t.DOOMPI_PROFILE?{[a.DOOMPI_PROFILE_ENV]:n.profile}:{},...n.domains&&t.DOOMPI_DOMAINS===void 0?{[a.DOOMPI_DOMAINS_ENV]:n.domains.join(`,`)}:{}}:t}function O(e){return{majorMode:e.majorMode,domains:e.domains,profile:e.profile,preset:e.preset}}function k(e,t,n,a=process.env,o=`persisted`){if(!n)return[`no sync state: run doompi sync`];let s=[];i.syncStateRootMatches(e,n.root)||s.push(`sync state belongs to a different repository`);let c=n.selection;(c.majorMode!==t.majorMode||c.profile!==t.profile||c.preset!==t.preset||c.domains.join(`,`)!==t.domains.join(`,`))&&s.push(`selection changed since the last sync`),i.computeInputsHash(e,c,a.HOME??m.default.homedir())!==n.inputsHash&&s.push(`.doom configuration changed`),JSON.stringify(i.recordResolvedEntries((0,_.loadMajorModesConfig)(e),r.createLayerResolvers(e)))!==JSON.stringify(n.resolved)&&s.push(`resolved extension paths changed`);let h=l.piAgentDirectory(a),g=f.default.join(l.piThemeDirectory(h),`${v.DEFAULT_THEME_NAME}.json`);if(o===`persisted`){let t=l.readPiSettings(h);l.serializePiSettings(l.mergePiSettings(t,h,{themePath:g,themeName:v.DEFAULT_THEME_NAME}))!==l.serializePiSettings(t)&&s.push(`Pi user settings are out of date`),d.projectRegistersDoom(e)&&s.push(d.DUPLICATE_REGISTRATION_DRIFT)}u.piExtensionAliasIsCurrent(h)||s.push(`Pi user extension alias is out of date`);let y=`${JSON.stringify(v.DEFAULT_THEME,null,2)}\n`;return(!p.default.existsSync(g)||p.default.readFileSync(g,`utf8`)!==y)&&s.push(`Pi user theme is out of date`),(n.baseline.themePath!==g||n.baseline.themeName!==v.DEFAULT_THEME_NAME)&&s.push(`synced theme location is out of date`),s}function A(e,t){let n=f.default.join(e,x);if(!p.default.existsSync(n))return;let r=(0,h.spawnSync)(process.execPath,[n,`--write`],{cwd:e,encoding:`utf8`});if(r.status===0){t.write(`hooks: regenerated for Claude Code and Codex
2
+ `);return}t.write(`hooks: emit-hooks failed (${r.stderr?.trim()||`exit ${String(r.status)}`})\n`)}function j(e,t=`pi`){let{selection:n}=e;return[`mode: ${n.majorMode}`,`domains: ${n.domains.join(`, `)||S}`,`profile: ${n.profile??S}`,`skills: ${e.skillCount}`,`agents: ${e.agentCount}`,`mcp: ${e.mcpServers.join(`, `)||S}`,`state: ${e.statePath}`,...e.settingsPath?[`settings: ${e.settingsPath}`]:[],...e.projectSettingsPath?[`project: removed duplicate registration from ${e.projectSettingsPath}`]:[],``,`Run ${t} from the repository root to use it.`,``].join(`
3
+ `)}var M=class{name=`sync`;settingsMode;homeDirectory;constructor(e={}){this.settingsMode=e.settingsMode??`persisted`,this.homeDirectory=e.homeDirectory}matches(e){return e[0]===this.name}async execute(e,r=process.env,a=process.cwd(),s=process.stdout){let c=e.includes(b),l=e.slice(1).filter(e=>e!==b),u=r.DOOMPI_ROOT,d=u?f.default.resolve(u):t.findRepositoryRoot(a),p=(0,_.loadMajorModesConfig)(d).defaultMajorMode,h=(0,y.loadDomains)(d).defaultDomains,g=o.parseHarnessArgs(l,D(d,r),a,p,h),v=O(g.options),x=this.homeDirectory??r.HOME??m.default.homedir();if(c){let e;try{e=i.readLocatedSyncState(d,x)}catch(e){let t=e instanceof Error?e.message:String(e);return s.write(`doompi sync is out of date:\n ${t}\n`),1}let t=k(d,v,e?.state,r,this.settingsMode);return e?.layout===`legacy`&&t.unshift(`legacy repository-local sync state requires migration`),t.length===0?(s.write(`doompi sync is up to date
4
+ `),0):(s.write(`doompi sync is out of date:\n${t.map(e=>` ${e}`).join(`
5
+ `)}\n`),1)}let S=await n.acquireSyncLocationLock(n.resolveSyncLocation(d,x)),C;try{C=await this.stage(d,g.options,r,x)}finally{await S()}return A(d,s),s.write(j(C,this.settingsMode===`embedded`?`dpi`:`pi`)),0}async stage(e,t,a,o){let s=n.resolveSyncLocation(e,o),m=s.directory,h=new Set([`run`,`cache`,`dist`,`.sync.lock`]);for(let e of p.default.existsSync(m)?p.default.readdirSync(m):[])h.has(e)||p.default.rmSync(f.default.join(m,e),{recursive:!0,force:!0});let _=await c.buildHarnessContext({...t,repoRoot:e,homeDirectory:o,cwd:e,resourceDirectory:m}),y=O(t),b=i.recordResolvedEntries(_.majorModesConfig,r.createLayerResolvers(e)),x=l.piAgentDirectory(a),S=l.piThemeDirectory(x);await p.default.promises.mkdir(S,{recursive:!0});let C=await(0,v.writeDefaultTheme)(S);f.default.resolve(_.defaultThemePath)!==f.default.resolve(C)&&await p.default.promises.rm(_.defaultThemePath,{force:!0});let w={version:9,root:e,identity:s.identity,inputsHash:i.computeInputsHash(e,y,o),selection:y,env:E(_.environment),fileState:{profileEnvironment:(0,g.loadHarnessState)(_.environment).state.profileEnvironment,pluginHooks:_.resources.pluginHooks},resolved:b,baseline:{mcpConfigPath:_.resources.mcpConfigPath,personaFile:_.environment.DOOMPI_PERSONA_FILE,themePath:C,themeName:v.DEFAULT_THEME_NAME}},T=await i.writeSyncState(e,w,o);u.writePiExtensionAlias(x);let D=this.settingsMode===`persisted`?l.writePiSettings(x,{themePath:w.baseline.themePath,themeName:w.baseline.themeName}):void 0,k=this.settingsMode===`persisted`?d.writeProjectPiSettings(e):void 0;return{statePath:T,...D?{settingsPath:D}:{},...k?{projectSettingsPath:k}:{},selection:y,mcpServers:w.baseline.mcpConfigPath?i.readMcpServerNames(w.baseline.mcpConfigPath):[],skillCount:_.resources.skillCount,agentCount:_.resources.agentCount}}};exports.SyncCommand=M,exports.collectDrift=k,exports.formatSyncResult=j,exports.recordedEnvironment=E,exports.selectionEnvironment=D,exports.toSelection=O;
6
6
  //# sourceMappingURL=syncCommand.cjs.map