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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (944) hide show
  1. package/README.md +437 -452
  2. package/assets/doompi-tui.png +0 -0
  3. package/dist/adapters/bootstrapClaim.cjs +2 -0
  4. package/dist/adapters/bootstrapClaim.cjs.map +1 -0
  5. package/dist/adapters/bootstrapClaim.mjs +2 -0
  6. package/dist/adapters/bootstrapClaim.mjs.map +1 -0
  7. package/dist/adapters/bootstrapLocator.cjs +2 -0
  8. package/dist/adapters/bootstrapLocator.cjs.map +1 -0
  9. package/dist/adapters/bootstrapLocator.d.cts +6 -0
  10. package/dist/adapters/bootstrapLocator.d.cts.map +1 -0
  11. package/dist/adapters/bootstrapLocator.d.mts +6 -0
  12. package/dist/adapters/bootstrapLocator.d.mts.map +1 -0
  13. package/dist/adapters/bootstrapLocator.mjs +2 -0
  14. package/dist/adapters/bootstrapLocator.mjs.map +1 -0
  15. package/dist/adapters/compatibility/antigravity.cjs +2 -0
  16. package/dist/{services → adapters}/compatibility/antigravity.cjs.map +1 -1
  17. package/dist/adapters/compatibility/antigravity.d.cts +11 -0
  18. package/dist/{services → adapters}/compatibility/antigravity.d.cts.map +1 -1
  19. package/dist/adapters/compatibility/antigravity.d.mts +11 -0
  20. package/dist/{services → adapters}/compatibility/antigravity.d.mts.map +1 -1
  21. package/dist/adapters/compatibility/antigravity.mjs +2 -0
  22. package/dist/{services → adapters}/compatibility/antigravity.mjs.map +1 -1
  23. package/dist/adapters/compatibility/codex.cjs +2 -0
  24. package/dist/{services → adapters}/compatibility/codex.cjs.map +1 -1
  25. package/dist/adapters/compatibility/codex.d.cts +19 -0
  26. package/dist/{services → adapters}/compatibility/codex.d.cts.map +1 -1
  27. package/dist/adapters/compatibility/codex.d.mts +19 -0
  28. package/dist/{services → adapters}/compatibility/codex.d.mts.map +1 -1
  29. package/dist/adapters/compatibility/codex.mjs +2 -0
  30. package/dist/{services → adapters}/compatibility/codex.mjs.map +1 -1
  31. package/dist/adapters/compatibility/index.cjs +2 -0
  32. package/dist/adapters/compatibility/index.cjs.map +1 -0
  33. package/dist/adapters/compatibility/index.d.cts +16 -0
  34. package/dist/{services → adapters}/compatibility/index.d.cts.map +1 -1
  35. package/dist/adapters/compatibility/index.d.mts +16 -0
  36. package/dist/{services → adapters}/compatibility/index.d.mts.map +1 -1
  37. package/dist/adapters/compatibility/index.mjs +2 -0
  38. package/dist/adapters/compatibility/index.mjs.map +1 -0
  39. package/dist/adapters/compatibility/process.cjs +2 -0
  40. package/dist/{services → adapters}/compatibility/process.cjs.map +1 -1
  41. package/dist/adapters/compatibility/process.d.cts +35 -0
  42. package/dist/{services → adapters}/compatibility/process.d.cts.map +1 -1
  43. package/dist/adapters/compatibility/process.d.mts +35 -0
  44. package/dist/{services → adapters}/compatibility/process.d.mts.map +1 -1
  45. package/dist/adapters/compatibility/process.mjs +2 -0
  46. package/dist/{services → adapters}/compatibility/process.mjs.map +1 -1
  47. package/dist/adapters/compatibility/shared.cjs +2 -0
  48. package/dist/{services → adapters}/compatibility/shared.cjs.map +1 -1
  49. package/dist/adapters/compatibility/shared.d.cts +33 -0
  50. package/dist/{services → adapters}/compatibility/shared.d.cts.map +1 -1
  51. package/dist/adapters/compatibility/shared.d.mts +33 -0
  52. package/dist/{services → adapters}/compatibility/shared.d.mts.map +1 -1
  53. package/dist/adapters/compatibility/shared.mjs +2 -0
  54. package/dist/{services → adapters}/compatibility/shared.mjs.map +1 -1
  55. package/dist/adapters/compatibilityContext.cjs +2 -0
  56. package/dist/adapters/compatibilityContext.cjs.map +1 -0
  57. package/dist/adapters/compatibilityContext.d.cts +23 -0
  58. package/dist/{services → adapters}/compatibilityContext.d.cts.map +1 -1
  59. package/dist/adapters/compatibilityContext.d.mts +23 -0
  60. package/dist/{services → adapters}/compatibilityContext.d.mts.map +1 -1
  61. package/dist/adapters/compatibilityContext.mjs +2 -0
  62. package/dist/adapters/compatibilityContext.mjs.map +1 -0
  63. package/dist/adapters/composer.cjs +2 -0
  64. package/dist/adapters/composer.cjs.map +1 -0
  65. package/dist/adapters/composer.d.cts +113 -0
  66. package/dist/adapters/composer.d.cts.map +1 -0
  67. package/dist/adapters/composer.d.mts +113 -0
  68. package/dist/adapters/composer.d.mts.map +1 -0
  69. package/dist/adapters/composer.mjs +2 -0
  70. package/dist/adapters/composer.mjs.map +1 -0
  71. package/dist/adapters/compositionState.cjs +2 -0
  72. package/dist/adapters/compositionState.cjs.map +1 -0
  73. package/dist/adapters/compositionState.d.cts +12 -0
  74. package/dist/adapters/compositionState.d.cts.map +1 -0
  75. package/dist/adapters/compositionState.d.mts +12 -0
  76. package/dist/adapters/compositionState.d.mts.map +1 -0
  77. package/dist/adapters/compositionState.mjs +2 -0
  78. package/dist/adapters/compositionState.mjs.map +1 -0
  79. package/dist/adapters/config/harnessState.cjs +2 -0
  80. package/dist/adapters/config/harnessState.cjs.map +1 -0
  81. package/dist/adapters/config/harnessState.d.cts +26 -0
  82. package/dist/adapters/config/harnessState.d.cts.map +1 -0
  83. package/dist/adapters/config/harnessState.d.mts +26 -0
  84. package/dist/adapters/config/harnessState.d.mts.map +1 -0
  85. package/dist/adapters/config/harnessState.mjs +2 -0
  86. package/dist/adapters/config/harnessState.mjs.map +1 -0
  87. package/dist/adapters/deferredSkills.cjs +12 -0
  88. package/dist/adapters/deferredSkills.cjs.map +1 -0
  89. package/dist/adapters/deferredSkills.mjs +12 -0
  90. package/dist/adapters/deferredSkills.mjs.map +1 -0
  91. package/dist/adapters/doomPackage.cjs +2 -0
  92. package/dist/adapters/doomPackage.cjs.map +1 -0
  93. package/dist/adapters/doomPackage.mjs +2 -0
  94. package/dist/adapters/doomPackage.mjs.map +1 -0
  95. package/dist/adapters/dpiRunner.cjs +3 -0
  96. package/dist/adapters/dpiRunner.cjs.map +1 -0
  97. package/dist/adapters/dpiRunner.mjs +3 -0
  98. package/dist/adapters/dpiRunner.mjs.map +1 -0
  99. package/dist/adapters/dpiSettings.cjs +2 -0
  100. package/dist/adapters/dpiSettings.cjs.map +1 -0
  101. package/dist/adapters/dpiSettings.mjs +2 -0
  102. package/dist/adapters/dpiSettings.mjs.map +1 -0
  103. package/dist/adapters/extensionCompiler.cjs +3 -0
  104. package/dist/adapters/extensionCompiler.cjs.map +1 -0
  105. package/dist/adapters/extensionCompiler.mjs +3 -0
  106. package/dist/adapters/extensionCompiler.mjs.map +1 -0
  107. package/dist/adapters/harnessContext.cjs +2 -0
  108. package/dist/adapters/harnessContext.cjs.map +1 -0
  109. package/dist/adapters/harnessContext.d.cts +61 -0
  110. package/dist/{services → adapters}/harnessContext.d.cts.map +1 -1
  111. package/dist/adapters/harnessContext.d.mts +61 -0
  112. package/dist/{services → adapters}/harnessContext.d.mts.map +1 -1
  113. package/dist/adapters/harnessContext.mjs +2 -0
  114. package/dist/adapters/harnessContext.mjs.map +1 -0
  115. package/dist/adapters/helpSkills.cjs +2 -0
  116. package/dist/adapters/helpSkills.cjs.map +1 -0
  117. package/dist/adapters/helpSkills.mjs +2 -0
  118. package/dist/adapters/helpSkills.mjs.map +1 -0
  119. package/dist/adapters/layerPackageInstaller.cjs +2 -0
  120. package/dist/adapters/layerPackageInstaller.cjs.map +1 -0
  121. package/dist/adapters/layerPackageInstaller.mjs +2 -0
  122. package/dist/adapters/layerPackageInstaller.mjs.map +1 -0
  123. package/dist/adapters/matrixSwitcher.cjs +2 -0
  124. package/dist/adapters/matrixSwitcher.cjs.map +1 -0
  125. package/dist/adapters/matrixSwitcher.d.cts +46 -0
  126. package/dist/{services → adapters}/matrixSwitcher.d.cts.map +1 -1
  127. package/dist/adapters/matrixSwitcher.d.mts +46 -0
  128. package/dist/{services → adapters}/matrixSwitcher.d.mts.map +1 -1
  129. package/dist/adapters/matrixSwitcher.mjs +2 -0
  130. package/dist/adapters/matrixSwitcher.mjs.map +1 -0
  131. package/dist/adapters/mcpFilter.cjs +3 -0
  132. package/dist/adapters/mcpFilter.cjs.map +1 -0
  133. package/dist/adapters/mcpFilter.d.cts +40 -0
  134. package/dist/adapters/mcpFilter.d.cts.map +1 -0
  135. package/dist/adapters/mcpFilter.d.mts +40 -0
  136. package/dist/adapters/mcpFilter.d.mts.map +1 -0
  137. package/dist/adapters/mcpFilter.mjs +3 -0
  138. package/dist/adapters/mcpFilter.mjs.map +1 -0
  139. package/dist/adapters/modules/moduleResolution.cjs +2 -0
  140. package/dist/adapters/modules/moduleResolution.cjs.map +1 -0
  141. package/dist/adapters/modules/moduleResolution.d.cts +69 -0
  142. package/dist/adapters/modules/moduleResolution.d.cts.map +1 -0
  143. package/dist/adapters/modules/moduleResolution.d.mts +69 -0
  144. package/dist/adapters/modules/moduleResolution.d.mts.map +1 -0
  145. package/dist/adapters/modules/moduleResolution.mjs +2 -0
  146. package/dist/adapters/modules/moduleResolution.mjs.map +1 -0
  147. package/dist/adapters/packageBootstrap.cjs +2 -0
  148. package/dist/adapters/packageBootstrap.cjs.map +1 -0
  149. package/dist/adapters/packageBootstrap.d.cts +8 -0
  150. package/dist/adapters/packageBootstrap.d.cts.map +1 -0
  151. package/dist/adapters/packageBootstrap.d.mts +8 -0
  152. package/dist/adapters/packageBootstrap.d.mts.map +1 -0
  153. package/dist/adapters/packageBootstrap.mjs +2 -0
  154. package/dist/adapters/packageBootstrap.mjs.map +1 -0
  155. package/dist/adapters/piExtensionAlias.cjs +2 -0
  156. package/dist/adapters/piExtensionAlias.cjs.map +1 -0
  157. package/dist/adapters/piExtensionAlias.mjs +2 -0
  158. package/dist/adapters/piExtensionAlias.mjs.map +1 -0
  159. package/dist/adapters/piSettings.cjs +2 -0
  160. package/dist/adapters/piSettings.cjs.map +1 -0
  161. package/dist/adapters/piSettings.d.cts +25 -0
  162. package/dist/adapters/piSettings.d.cts.map +1 -0
  163. package/dist/adapters/piSettings.d.mts +25 -0
  164. package/dist/adapters/piSettings.d.mts.map +1 -0
  165. package/dist/adapters/piSettings.mjs +2 -0
  166. package/dist/adapters/piSettings.mjs.map +1 -0
  167. package/dist/adapters/pluginMaterializer.cjs +2 -0
  168. package/dist/adapters/pluginMaterializer.cjs.map +1 -0
  169. package/dist/adapters/pluginMaterializer.mjs +2 -0
  170. package/dist/adapters/pluginMaterializer.mjs.map +1 -0
  171. package/dist/adapters/projectPiSettings.cjs +2 -0
  172. package/dist/adapters/projectPiSettings.cjs.map +1 -0
  173. package/dist/adapters/projectPiSettings.d.cts +29 -0
  174. package/dist/adapters/projectPiSettings.d.cts.map +1 -0
  175. package/dist/adapters/projectPiSettings.d.mts +29 -0
  176. package/dist/adapters/projectPiSettings.d.mts.map +1 -0
  177. package/dist/adapters/projectPiSettings.mjs +2 -0
  178. package/dist/adapters/projectPiSettings.mjs.map +1 -0
  179. package/dist/adapters/repository/repository.cjs +2 -0
  180. package/dist/adapters/repository/repository.cjs.map +1 -0
  181. package/dist/adapters/repository/repository.d.cts +21 -0
  182. package/dist/adapters/repository/repository.d.cts.map +1 -0
  183. package/dist/adapters/repository/repository.d.mts +21 -0
  184. package/dist/adapters/repository/repository.d.mts.map +1 -0
  185. package/dist/adapters/repository/repository.mjs +2 -0
  186. package/dist/adapters/repository/repository.mjs.map +1 -0
  187. package/dist/adapters/resourceCollector.cjs +3 -0
  188. package/dist/adapters/resourceCollector.cjs.map +1 -0
  189. package/dist/adapters/resourceCollector.d.cts +25 -0
  190. package/dist/adapters/resourceCollector.d.cts.map +1 -0
  191. package/dist/adapters/resourceCollector.d.mts +25 -0
  192. package/dist/adapters/resourceCollector.d.mts.map +1 -0
  193. package/dist/adapters/resourceCollector.mjs +3 -0
  194. package/dist/adapters/resourceCollector.mjs.map +1 -0
  195. package/dist/adapters/runtimeBundle.cjs +2 -0
  196. package/dist/adapters/runtimeBundle.cjs.map +1 -0
  197. package/dist/{services → adapters}/runtimeBundle.d.cts +4 -2
  198. package/dist/adapters/runtimeBundle.d.cts.map +1 -0
  199. package/dist/{services → adapters}/runtimeBundle.d.mts +4 -2
  200. package/dist/adapters/runtimeBundle.d.mts.map +1 -0
  201. package/dist/adapters/runtimeBundle.mjs +2 -0
  202. package/dist/adapters/runtimeBundle.mjs.map +1 -0
  203. package/dist/adapters/serialization/json.cjs +2 -0
  204. package/dist/adapters/serialization/json.cjs.map +1 -0
  205. package/dist/adapters/serialization/json.d.cts +23 -0
  206. package/dist/adapters/serialization/json.d.cts.map +1 -0
  207. package/dist/adapters/serialization/json.d.mts +23 -0
  208. package/dist/adapters/serialization/json.d.mts.map +1 -0
  209. package/dist/adapters/serialization/json.mjs +2 -0
  210. package/dist/adapters/serialization/json.mjs.map +1 -0
  211. package/dist/adapters/sharedBuildCache.cjs +2 -0
  212. package/dist/adapters/sharedBuildCache.cjs.map +1 -0
  213. package/dist/adapters/sharedBuildCache.mjs +2 -0
  214. package/dist/adapters/sharedBuildCache.mjs.map +1 -0
  215. package/dist/adapters/skillCatalog.cjs +2 -0
  216. package/dist/adapters/skillCatalog.cjs.map +1 -0
  217. package/dist/adapters/skillCatalog.d.cts +61 -0
  218. package/dist/adapters/skillCatalog.d.cts.map +1 -0
  219. package/dist/adapters/skillCatalog.d.mts +61 -0
  220. package/dist/adapters/skillCatalog.d.mts.map +1 -0
  221. package/dist/adapters/skillCatalog.mjs +2 -0
  222. package/dist/adapters/skillCatalog.mjs.map +1 -0
  223. package/dist/adapters/skillSources.cjs +2 -0
  224. package/dist/{services → adapters}/skillSources.cjs.map +1 -1
  225. package/dist/adapters/skillSources.d.cts +24 -0
  226. package/dist/{services → adapters}/skillSources.d.cts.map +1 -1
  227. package/dist/adapters/skillSources.d.mts +24 -0
  228. package/dist/{services → adapters}/skillSources.d.mts.map +1 -1
  229. package/dist/adapters/skillSources.mjs +2 -0
  230. package/dist/{services → adapters}/skillSources.mjs.map +1 -1
  231. package/dist/adapters/startupPrecompiler.cjs +2 -0
  232. package/dist/adapters/startupPrecompiler.cjs.map +1 -0
  233. package/dist/adapters/startupPrecompiler.d.cts +13 -0
  234. package/dist/adapters/startupPrecompiler.d.cts.map +1 -0
  235. package/dist/adapters/startupPrecompiler.d.mts +13 -0
  236. package/dist/adapters/startupPrecompiler.d.mts.map +1 -0
  237. package/dist/adapters/startupPrecompiler.mjs +2 -0
  238. package/dist/adapters/startupPrecompiler.mjs.map +1 -0
  239. package/dist/adapters/syncLocation.cjs +2 -0
  240. package/dist/adapters/syncLocation.cjs.map +1 -0
  241. package/dist/adapters/syncLocation.d.cts +19 -0
  242. package/dist/adapters/syncLocation.d.cts.map +1 -0
  243. package/dist/adapters/syncLocation.d.mts +19 -0
  244. package/dist/adapters/syncLocation.d.mts.map +1 -0
  245. package/dist/adapters/syncLocation.mjs +2 -0
  246. package/dist/adapters/syncLocation.mjs.map +1 -0
  247. package/dist/adapters/syncState.cjs +2 -0
  248. package/dist/adapters/syncState.cjs.map +1 -0
  249. package/dist/adapters/syncState.d.cts +153 -0
  250. package/dist/adapters/syncState.d.cts.map +1 -0
  251. package/dist/adapters/syncState.d.mts +153 -0
  252. package/dist/adapters/syncState.d.mts.map +1 -0
  253. package/dist/adapters/syncState.mjs +2 -0
  254. package/dist/adapters/syncState.mjs.map +1 -0
  255. package/dist/adapters/syncStateContract.cjs +2 -0
  256. package/dist/adapters/syncStateContract.cjs.map +1 -0
  257. package/dist/adapters/syncStateContract.d.cts +13 -0
  258. package/dist/adapters/syncStateContract.d.cts.map +1 -0
  259. package/dist/adapters/syncStateContract.d.mts +13 -0
  260. package/dist/adapters/syncStateContract.d.mts.map +1 -0
  261. package/dist/adapters/syncStateContract.mjs +2 -0
  262. package/dist/adapters/syncStateContract.mjs.map +1 -0
  263. package/dist/adapters/syncedRuntimeBuilder.cjs +2 -0
  264. package/dist/adapters/syncedRuntimeBuilder.cjs.map +1 -0
  265. package/dist/adapters/syncedRuntimeBuilder.d.cts +11 -0
  266. package/dist/adapters/syncedRuntimeBuilder.d.cts.map +1 -0
  267. package/dist/adapters/syncedRuntimeBuilder.d.mts +11 -0
  268. package/dist/adapters/syncedRuntimeBuilder.d.mts.map +1 -0
  269. package/dist/adapters/syncedRuntimeBuilder.mjs +2 -0
  270. package/dist/adapters/syncedRuntimeBuilder.mjs.map +1 -0
  271. package/dist/adapters/telemetry/logSinkTelemetry.cjs +2 -0
  272. package/dist/adapters/telemetry/logSinkTelemetry.cjs.map +1 -0
  273. package/dist/adapters/telemetry/logSinkTelemetry.d.cts +51 -0
  274. package/dist/adapters/telemetry/logSinkTelemetry.d.cts.map +1 -0
  275. package/dist/adapters/telemetry/logSinkTelemetry.d.mts +51 -0
  276. package/dist/adapters/telemetry/logSinkTelemetry.d.mts.map +1 -0
  277. package/dist/adapters/telemetry/logSinkTelemetry.mjs +2 -0
  278. package/dist/adapters/telemetry/logSinkTelemetry.mjs.map +1 -0
  279. package/dist/bin/cli.cjs +1 -1
  280. package/dist/bin/cli.cjs.map +1 -1
  281. package/dist/bin/cli.mjs +1 -1
  282. package/dist/bin/cli.mjs.map +1 -1
  283. package/dist/bin/dpi.cjs +3 -0
  284. package/dist/bin/dpi.cjs.map +1 -0
  285. package/dist/bin/dpi.d.cts +1 -0
  286. package/dist/bin/dpi.d.mts +1 -0
  287. package/dist/bin/dpi.mjs +3 -0
  288. package/dist/bin/dpi.mjs.map +1 -0
  289. package/dist/cli/cliApp.cjs +1 -2
  290. package/dist/cli/cliApp.d.cts +2 -45
  291. package/dist/cli/cliApp.d.mts +2 -45
  292. package/dist/cli/cliApp.mjs +1 -2
  293. package/dist/cli/compatibilityOptions.cjs +1 -2
  294. package/dist/cli/compatibilityOptions.d.cts +2 -15
  295. package/dist/cli/compatibilityOptions.d.mts +2 -15
  296. package/dist/cli/compatibilityOptions.mjs +1 -2
  297. package/dist/cli/help.cjs +1 -63
  298. package/dist/cli/help.d.cts +2 -6
  299. package/dist/cli/help.d.mts +2 -6
  300. package/dist/cli/help.mjs +1 -63
  301. package/dist/cli/index.cjs +1 -1
  302. package/dist/cli/index.d.cts +4 -4
  303. package/dist/cli/index.d.mts +4 -4
  304. package/dist/cli/index.mjs +1 -1
  305. package/dist/cli/matrixOptions.cjs +1 -2
  306. package/dist/cli/matrixOptions.d.cts +2 -99
  307. package/dist/cli/matrixOptions.d.mts +2 -99
  308. package/dist/cli/matrixOptions.mjs +1 -2
  309. package/dist/cli/options.cjs +1 -2
  310. package/dist/cli/options.d.cts +2 -7
  311. package/dist/cli/options.d.mts +2 -7
  312. package/dist/cli/options.mjs +1 -2
  313. package/dist/commands/baseCommand.cjs.map +1 -1
  314. package/dist/commands/baseCommand.d.cts +3 -3
  315. package/dist/commands/baseCommand.d.mts +3 -3
  316. package/dist/commands/baseCommand.mjs.map +1 -1
  317. package/dist/commands/buildCommand.cjs +2 -2
  318. package/dist/commands/buildCommand.cjs.map +1 -1
  319. package/dist/commands/buildCommand.mjs +2 -2
  320. package/dist/commands/buildCommand.mjs.map +1 -1
  321. package/dist/commands/cli/cliApp.cjs +2 -0
  322. package/dist/commands/cli/cliApp.cjs.map +1 -0
  323. package/dist/commands/cli/cliApp.d.cts +45 -0
  324. package/dist/commands/cli/cliApp.d.cts.map +1 -0
  325. package/dist/commands/cli/cliApp.d.mts +45 -0
  326. package/dist/commands/cli/cliApp.d.mts.map +1 -0
  327. package/dist/commands/cli/cliApp.mjs +2 -0
  328. package/dist/commands/cli/cliApp.mjs.map +1 -0
  329. package/dist/commands/cli/compatibilityOptions.cjs +2 -0
  330. package/dist/commands/cli/compatibilityOptions.cjs.map +1 -0
  331. package/dist/commands/cli/compatibilityOptions.d.cts +15 -0
  332. package/dist/commands/cli/compatibilityOptions.d.cts.map +1 -0
  333. package/dist/commands/cli/compatibilityOptions.d.mts +15 -0
  334. package/dist/commands/cli/compatibilityOptions.d.mts.map +1 -0
  335. package/dist/commands/cli/compatibilityOptions.mjs +2 -0
  336. package/dist/commands/cli/compatibilityOptions.mjs.map +1 -0
  337. package/dist/commands/cli/help.cjs +68 -0
  338. package/dist/{cli → commands/cli}/help.cjs.map +1 -1
  339. package/dist/commands/cli/help.d.cts +6 -0
  340. package/dist/commands/cli/help.d.cts.map +1 -0
  341. package/dist/commands/cli/help.d.mts +6 -0
  342. package/dist/commands/cli/help.d.mts.map +1 -0
  343. package/dist/commands/cli/help.mjs +68 -0
  344. package/dist/{cli → commands/cli}/help.mjs.map +1 -1
  345. package/dist/commands/cli/index.cjs +1 -0
  346. package/dist/commands/cli/index.d.cts +4 -0
  347. package/dist/commands/cli/index.d.mts +4 -0
  348. package/dist/commands/cli/index.mjs +1 -0
  349. package/dist/commands/cli/matrixOptions.cjs +2 -0
  350. package/dist/commands/cli/matrixOptions.cjs.map +1 -0
  351. package/dist/commands/cli/matrixOptions.d.cts +99 -0
  352. package/dist/commands/cli/matrixOptions.d.cts.map +1 -0
  353. package/dist/commands/cli/matrixOptions.d.mts +99 -0
  354. package/dist/commands/cli/matrixOptions.d.mts.map +1 -0
  355. package/dist/commands/cli/matrixOptions.mjs +2 -0
  356. package/dist/commands/cli/matrixOptions.mjs.map +1 -0
  357. package/dist/commands/cli/options.cjs +2 -0
  358. package/dist/commands/cli/options.cjs.map +1 -0
  359. package/dist/commands/cli/options.d.cts +7 -0
  360. package/dist/commands/cli/options.d.cts.map +1 -0
  361. package/dist/commands/cli/options.d.mts +7 -0
  362. package/dist/commands/cli/options.d.mts.map +1 -0
  363. package/dist/commands/cli/options.mjs +2 -0
  364. package/dist/commands/cli/options.mjs.map +1 -0
  365. package/dist/commands/compatibilityCommand.cjs +1 -1
  366. package/dist/commands/compatibilityCommand.cjs.map +1 -1
  367. package/dist/commands/compatibilityCommand.d.cts +1 -1
  368. package/dist/commands/compatibilityCommand.d.cts.map +1 -1
  369. package/dist/commands/compatibilityCommand.d.mts +1 -1
  370. package/dist/commands/compatibilityCommand.d.mts.map +1 -1
  371. package/dist/commands/compatibilityCommand.mjs +1 -1
  372. package/dist/commands/compatibilityCommand.mjs.map +1 -1
  373. package/dist/commands/emitMcpCommand.cjs +1 -1
  374. package/dist/commands/emitMcpCommand.cjs.map +1 -1
  375. package/dist/commands/emitMcpCommand.d.cts +2 -2
  376. package/dist/commands/emitMcpCommand.d.mts +2 -2
  377. package/dist/commands/emitMcpCommand.mjs +1 -1
  378. package/dist/commands/emitMcpCommand.mjs.map +1 -1
  379. package/dist/commands/explainCommand.cjs +2 -2
  380. package/dist/commands/explainCommand.cjs.map +1 -1
  381. package/dist/commands/explainCommand.d.cts +2 -2
  382. package/dist/commands/explainCommand.d.mts +2 -2
  383. package/dist/commands/explainCommand.mjs +2 -2
  384. package/dist/commands/explainCommand.mjs.map +1 -1
  385. package/dist/commands/index.cjs +1 -1
  386. package/dist/commands/index.d.cts +2 -3
  387. package/dist/commands/index.d.mts +2 -3
  388. package/dist/commands/index.mjs +1 -1
  389. package/dist/commands/initCommand.cjs +1 -2
  390. package/dist/commands/initCommand.cjs.map +1 -1
  391. package/dist/commands/initCommand.d.cts +4 -3
  392. package/dist/commands/initCommand.d.cts.map +1 -1
  393. package/dist/commands/initCommand.d.mts +4 -3
  394. package/dist/commands/initCommand.d.mts.map +1 -1
  395. package/dist/commands/initCommand.mjs +1 -2
  396. package/dist/commands/initCommand.mjs.map +1 -1
  397. package/dist/commands/initPresenter.cjs +3 -0
  398. package/dist/commands/initPresenter.cjs.map +1 -0
  399. package/dist/commands/initPresenter.d.cts +8 -0
  400. package/dist/commands/initPresenter.d.cts.map +1 -0
  401. package/dist/commands/initPresenter.d.mts +8 -0
  402. package/dist/commands/initPresenter.d.mts.map +1 -0
  403. package/dist/commands/initPresenter.mjs +3 -0
  404. package/dist/commands/initPresenter.mjs.map +1 -0
  405. package/dist/commands/launchCommand.cjs +1 -1
  406. package/dist/commands/launchCommand.cjs.map +1 -1
  407. package/dist/commands/launchCommand.d.cts +6 -4
  408. package/dist/commands/launchCommand.d.cts.map +1 -1
  409. package/dist/commands/launchCommand.d.mts +6 -4
  410. package/dist/commands/launchCommand.d.mts.map +1 -1
  411. package/dist/commands/launchCommand.mjs +1 -1
  412. package/dist/commands/launchCommand.mjs.map +1 -1
  413. package/dist/commands/syncCommand.cjs +5 -5
  414. package/dist/commands/syncCommand.cjs.map +1 -1
  415. package/dist/commands/syncCommand.d.cts +19 -7
  416. package/dist/commands/syncCommand.d.cts.map +1 -1
  417. package/dist/commands/syncCommand.d.mts +19 -7
  418. package/dist/commands/syncCommand.d.mts.map +1 -1
  419. package/dist/commands/syncCommand.mjs +5 -5
  420. package/dist/commands/syncCommand.mjs.map +1 -1
  421. package/dist/commands/syncPipeline.cjs +2 -0
  422. package/dist/commands/syncPipeline.cjs.map +1 -0
  423. package/dist/commands/syncPipeline.mjs +2 -0
  424. package/dist/commands/syncPipeline.mjs.map +1 -0
  425. package/dist/config/harnessState.cjs +1 -2
  426. package/dist/config/harnessState.d.cts +2 -24
  427. package/dist/config/harnessState.d.mts +2 -24
  428. package/dist/config/harnessState.mjs +1 -2
  429. package/dist/config/index.cjs +1 -1
  430. package/dist/config/index.d.cts +4 -7
  431. package/dist/config/index.d.mts +4 -7
  432. package/dist/config/index.mjs +1 -1
  433. package/dist/config/projectTrust.cjs +1 -2
  434. package/dist/config/projectTrust.d.cts +2 -14
  435. package/dist/config/projectTrust.d.mts +2 -14
  436. package/dist/config/projectTrust.mjs +1 -2
  437. package/dist/entries/autoStop.cjs +1 -2
  438. package/dist/entries/autoStop.d.cts +2 -6
  439. package/dist/entries/autoStop.d.mts +2 -7
  440. package/dist/entries/autoStop.mjs +1 -2
  441. package/dist/entries/components/matrixPicker.cjs +1 -2
  442. package/dist/entries/components/matrixPicker.d.cts +2 -55
  443. package/dist/entries/components/matrixPicker.d.mts +2 -55
  444. package/dist/entries/components/matrixPicker.mjs +1 -2
  445. package/dist/entries/components/skillsOverlay.cjs +1 -4
  446. package/dist/entries/components/skillsOverlay.d.cts +2 -58
  447. package/dist/entries/components/skillsOverlay.d.mts +2 -58
  448. package/dist/entries/components/skillsOverlay.mjs +1 -4
  449. package/dist/entries/domains.cjs +1 -2
  450. package/dist/entries/domains.d.cts +2 -10
  451. package/dist/entries/domains.d.mts +2 -10
  452. package/dist/entries/domains.mjs +1 -2
  453. package/dist/entries/doom.cjs +1 -2
  454. package/dist/entries/doom.d.cts +2 -13
  455. package/dist/entries/doom.d.mts +2 -14
  456. package/dist/entries/doom.mjs +1 -2
  457. package/dist/entries/effort.cjs +1 -2
  458. package/dist/entries/effort.d.cts +2 -10
  459. package/dist/entries/effort.d.mts +2 -10
  460. package/dist/entries/effort.mjs +1 -2
  461. package/dist/entries/majorMode.cjs +1 -6
  462. package/dist/entries/majorMode.d.cts +2 -29
  463. package/dist/entries/majorMode.d.mts +2 -29
  464. package/dist/entries/majorMode.mjs +1 -6
  465. package/dist/entries/modeCatalog.cjs +1 -0
  466. package/dist/entries/modeCatalog.d.cts +2 -0
  467. package/dist/entries/modeCatalog.d.mts +2 -0
  468. package/dist/entries/modeCatalog.mjs +1 -0
  469. package/dist/entries/notifications.cjs +1 -2
  470. package/dist/entries/notifications.d.cts +2 -13
  471. package/dist/entries/notifications.d.mts +2 -13
  472. package/dist/entries/notifications.mjs +1 -2
  473. package/dist/entries/ollamaProvider.cjs +1 -2
  474. package/dist/entries/ollamaProvider.d.cts +2 -6
  475. package/dist/entries/ollamaProvider.d.mts +2 -7
  476. package/dist/entries/ollamaProvider.mjs +1 -2
  477. package/dist/entries/persona.cjs +1 -2
  478. package/dist/entries/persona.d.cts +2 -14
  479. package/dist/entries/persona.d.mts +2 -15
  480. package/dist/entries/persona.mjs +1 -2
  481. package/dist/entries/profile.cjs +1 -3
  482. package/dist/entries/profile.d.cts +2 -16
  483. package/dist/entries/profile.d.mts +2 -16
  484. package/dist/entries/profile.mjs +1 -3
  485. package/dist/entries/repositoryHooks.cjs +1 -9
  486. package/dist/entries/repositoryHooks.d.cts +2 -7
  487. package/dist/entries/repositoryHooks.d.mts +2 -8
  488. package/dist/entries/repositoryHooks.mjs +1 -9
  489. package/dist/entries/skills.cjs +1 -2
  490. package/dist/entries/skills.d.cts +2 -34
  491. package/dist/entries/skills.d.mts +2 -34
  492. package/dist/entries/skills.mjs +1 -2
  493. package/dist/entries/styleSystem.cjs +1 -4
  494. package/dist/entries/styleSystem.d.cts +2 -32
  495. package/dist/entries/styleSystem.d.mts +2 -32
  496. package/dist/entries/styleSystem.mjs +1 -4
  497. package/dist/extensions/entries/autoStop.cjs +2 -0
  498. package/dist/extensions/entries/autoStop.cjs.map +1 -0
  499. package/dist/extensions/entries/autoStop.d.cts +7 -0
  500. package/dist/extensions/entries/autoStop.d.cts.map +1 -0
  501. package/dist/extensions/entries/autoStop.d.mts +7 -0
  502. package/dist/extensions/entries/autoStop.d.mts.map +1 -0
  503. package/dist/extensions/entries/autoStop.mjs +2 -0
  504. package/dist/extensions/entries/autoStop.mjs.map +1 -0
  505. package/dist/extensions/entries/cacheOptimizer.mjs +2 -0
  506. package/dist/extensions/entries/cacheOptimizer.mjs.map +1 -0
  507. package/dist/extensions/entries/components/matrixPicker.cjs +2 -0
  508. package/dist/extensions/entries/components/matrixPicker.cjs.map +1 -0
  509. package/dist/extensions/entries/components/matrixPicker.d.cts +55 -0
  510. package/dist/extensions/entries/components/matrixPicker.d.cts.map +1 -0
  511. package/dist/extensions/entries/components/matrixPicker.d.mts +55 -0
  512. package/dist/extensions/entries/components/matrixPicker.d.mts.map +1 -0
  513. package/dist/extensions/entries/components/matrixPicker.mjs +2 -0
  514. package/dist/extensions/entries/components/matrixPicker.mjs.map +1 -0
  515. package/dist/extensions/entries/components/skillsOverlay.cjs +4 -0
  516. package/dist/extensions/entries/components/skillsOverlay.cjs.map +1 -0
  517. package/dist/extensions/entries/components/skillsOverlay.d.cts +58 -0
  518. package/dist/extensions/entries/components/skillsOverlay.d.cts.map +1 -0
  519. package/dist/extensions/entries/components/skillsOverlay.d.mts +58 -0
  520. package/dist/extensions/entries/components/skillsOverlay.d.mts.map +1 -0
  521. package/dist/extensions/entries/components/skillsOverlay.mjs +4 -0
  522. package/dist/extensions/entries/components/skillsOverlay.mjs.map +1 -0
  523. package/dist/extensions/entries/domains.cjs +2 -0
  524. package/dist/extensions/entries/domains.cjs.map +1 -0
  525. package/dist/extensions/entries/domains.d.cts +18 -0
  526. package/dist/extensions/entries/domains.d.cts.map +1 -0
  527. package/dist/extensions/entries/domains.d.mts +18 -0
  528. package/dist/extensions/entries/domains.d.mts.map +1 -0
  529. package/dist/extensions/entries/domains.mjs +2 -0
  530. package/dist/extensions/entries/domains.mjs.map +1 -0
  531. package/dist/extensions/entries/doom.cjs +2 -0
  532. package/dist/extensions/entries/doom.cjs.map +1 -0
  533. package/dist/extensions/entries/doom.d.cts +14 -0
  534. package/dist/extensions/entries/doom.d.cts.map +1 -0
  535. package/dist/extensions/entries/doom.d.mts +14 -0
  536. package/dist/extensions/entries/doom.d.mts.map +1 -0
  537. package/dist/extensions/entries/doom.mjs +2 -0
  538. package/dist/extensions/entries/doom.mjs.map +1 -0
  539. package/dist/extensions/entries/effort.cjs +2 -0
  540. package/dist/extensions/entries/effort.cjs.map +1 -0
  541. package/dist/extensions/entries/effort.d.cts +10 -0
  542. package/dist/extensions/entries/effort.d.cts.map +1 -0
  543. package/dist/extensions/entries/effort.d.mts +10 -0
  544. package/dist/extensions/entries/effort.d.mts.map +1 -0
  545. package/dist/extensions/entries/effort.mjs +2 -0
  546. package/dist/extensions/entries/effort.mjs.map +1 -0
  547. package/dist/extensions/entries/majorMode.cjs +6 -0
  548. package/dist/extensions/entries/majorMode.cjs.map +1 -0
  549. package/dist/extensions/entries/majorMode.d.cts +27 -0
  550. package/dist/extensions/entries/majorMode.d.cts.map +1 -0
  551. package/dist/extensions/entries/majorMode.d.mts +27 -0
  552. package/dist/extensions/entries/majorMode.d.mts.map +1 -0
  553. package/dist/extensions/entries/majorMode.mjs +6 -0
  554. package/dist/extensions/entries/majorMode.mjs.map +1 -0
  555. package/dist/extensions/entries/modeCatalog.cjs +2 -0
  556. package/dist/extensions/entries/modeCatalog.cjs.map +1 -0
  557. package/dist/extensions/entries/modeCatalog.d.cts +7 -0
  558. package/dist/extensions/entries/modeCatalog.d.cts.map +1 -0
  559. package/dist/extensions/entries/modeCatalog.d.mts +7 -0
  560. package/dist/extensions/entries/modeCatalog.d.mts.map +1 -0
  561. package/dist/extensions/entries/modeCatalog.mjs +2 -0
  562. package/dist/extensions/entries/modeCatalog.mjs.map +1 -0
  563. package/dist/extensions/entries/notifications.cjs +2 -0
  564. package/dist/extensions/entries/notifications.cjs.map +1 -0
  565. package/dist/extensions/entries/notifications.d.cts +14 -0
  566. package/dist/extensions/entries/notifications.d.cts.map +1 -0
  567. package/dist/extensions/entries/notifications.d.mts +14 -0
  568. package/dist/extensions/entries/notifications.d.mts.map +1 -0
  569. package/dist/extensions/entries/notifications.mjs +2 -0
  570. package/dist/extensions/entries/notifications.mjs.map +1 -0
  571. package/dist/extensions/entries/ollamaProvider.cjs +2 -0
  572. package/dist/extensions/entries/ollamaProvider.cjs.map +1 -0
  573. package/dist/extensions/entries/ollamaProvider.d.cts +7 -0
  574. package/dist/extensions/entries/ollamaProvider.d.cts.map +1 -0
  575. package/dist/extensions/entries/ollamaProvider.d.mts +7 -0
  576. package/dist/extensions/entries/ollamaProvider.d.mts.map +1 -0
  577. package/dist/extensions/entries/ollamaProvider.mjs +2 -0
  578. package/dist/extensions/entries/ollamaProvider.mjs.map +1 -0
  579. package/dist/extensions/entries/persona.cjs +2 -0
  580. package/dist/extensions/entries/persona.cjs.map +1 -0
  581. package/dist/extensions/entries/persona.d.cts +15 -0
  582. package/dist/extensions/entries/persona.d.cts.map +1 -0
  583. package/dist/extensions/entries/persona.d.mts +15 -0
  584. package/dist/extensions/entries/persona.d.mts.map +1 -0
  585. package/dist/extensions/entries/persona.mjs +2 -0
  586. package/dist/extensions/entries/persona.mjs.map +1 -0
  587. package/dist/extensions/entries/profile.cjs +3 -0
  588. package/dist/extensions/entries/profile.cjs.map +1 -0
  589. package/dist/extensions/entries/profile.d.cts +18 -0
  590. package/dist/extensions/entries/profile.d.cts.map +1 -0
  591. package/dist/extensions/entries/profile.d.mts +18 -0
  592. package/dist/extensions/entries/profile.d.mts.map +1 -0
  593. package/dist/extensions/entries/profile.mjs +3 -0
  594. package/dist/extensions/entries/profile.mjs.map +1 -0
  595. package/dist/extensions/entries/repositoryHooks.cjs +9 -0
  596. package/dist/extensions/entries/repositoryHooks.cjs.map +1 -0
  597. package/dist/extensions/entries/repositoryHooks.d.cts +8 -0
  598. package/dist/extensions/entries/repositoryHooks.d.cts.map +1 -0
  599. package/dist/extensions/entries/repositoryHooks.d.mts +8 -0
  600. package/dist/extensions/entries/repositoryHooks.d.mts.map +1 -0
  601. package/dist/extensions/entries/repositoryHooks.mjs +9 -0
  602. package/dist/extensions/entries/repositoryHooks.mjs.map +1 -0
  603. package/dist/extensions/entries/shellTitleController.cjs +27 -0
  604. package/dist/extensions/entries/shellTitleController.cjs.map +1 -0
  605. package/dist/extensions/entries/shellTitleController.d.cts +11 -0
  606. package/dist/extensions/entries/shellTitleController.d.cts.map +1 -0
  607. package/dist/extensions/entries/shellTitleController.d.mts +11 -0
  608. package/dist/extensions/entries/shellTitleController.d.mts.map +1 -0
  609. package/dist/extensions/entries/shellTitleController.mjs +27 -0
  610. package/dist/extensions/entries/shellTitleController.mjs.map +1 -0
  611. package/dist/extensions/entries/skills.cjs +4 -0
  612. package/dist/extensions/entries/skills.cjs.map +1 -0
  613. package/dist/extensions/entries/skills.d.cts +34 -0
  614. package/dist/extensions/entries/skills.d.cts.map +1 -0
  615. package/dist/extensions/entries/skills.d.mts +34 -0
  616. package/dist/extensions/entries/skills.d.mts.map +1 -0
  617. package/dist/extensions/entries/skills.mjs +4 -0
  618. package/dist/extensions/entries/skills.mjs.map +1 -0
  619. package/dist/extensions/entries/styleSystem.cjs +4 -0
  620. package/dist/extensions/entries/styleSystem.cjs.map +1 -0
  621. package/dist/extensions/entries/styleSystem.d.cts +32 -0
  622. package/dist/extensions/entries/styleSystem.d.cts.map +1 -0
  623. package/dist/extensions/entries/styleSystem.d.mts +32 -0
  624. package/dist/extensions/entries/styleSystem.d.mts.map +1 -0
  625. package/dist/extensions/entries/styleSystem.mjs +4 -0
  626. package/dist/{entries/styleSystem.cjs.map → extensions/entries/styleSystem.mjs.map} +1 -1
  627. package/dist/extensions/pi.cjs +1 -0
  628. package/dist/extensions/pi.d.cts +2 -0
  629. package/dist/extensions/pi.d.mts +2 -0
  630. package/dist/extensions/pi.mjs +1 -0
  631. package/dist/extensions/services/domainSwitchHandoff.cjs +2 -0
  632. package/dist/extensions/services/domainSwitchHandoff.cjs.map +1 -0
  633. package/dist/extensions/services/domainSwitchHandoff.mjs +2 -0
  634. package/dist/extensions/services/domainSwitchHandoff.mjs.map +1 -0
  635. package/dist/index.cjs +1 -1
  636. package/dist/index.d.cts +33 -29
  637. package/dist/index.d.mts +33 -29
  638. package/dist/index.mjs +1 -1
  639. package/dist/logSinkTelemetry.cjs +1 -2
  640. package/dist/logSinkTelemetry.d.cts +2 -51
  641. package/dist/logSinkTelemetry.d.mts +2 -51
  642. package/dist/logSinkTelemetry.mjs +1 -2
  643. package/dist/pi-cache-optimizer-D9beVnnH.mjs +50 -0
  644. package/dist/pi-cache-optimizer-D9beVnnH.mjs.map +1 -0
  645. package/dist/schemas/domainVoiceTools.cjs +2 -0
  646. package/dist/schemas/domainVoiceTools.cjs.map +1 -0
  647. package/dist/schemas/domainVoiceTools.mjs +2 -0
  648. package/dist/schemas/domainVoiceTools.mjs.map +1 -0
  649. package/dist/schemas/majorModeVoiceTools.cjs +2 -0
  650. package/dist/schemas/majorModeVoiceTools.cjs.map +1 -0
  651. package/dist/schemas/majorModeVoiceTools.mjs +2 -0
  652. package/dist/schemas/majorModeVoiceTools.mjs.map +1 -0
  653. package/dist/services/compatibility/antigravity.cjs +1 -2
  654. package/dist/services/compatibility/antigravity.d.cts +2 -11
  655. package/dist/services/compatibility/antigravity.d.mts +2 -11
  656. package/dist/services/compatibility/antigravity.mjs +1 -2
  657. package/dist/services/compatibility/codex.cjs +1 -2
  658. package/dist/services/compatibility/codex.d.cts +2 -19
  659. package/dist/services/compatibility/codex.d.mts +2 -19
  660. package/dist/services/compatibility/codex.mjs +1 -2
  661. package/dist/services/compatibility/index.cjs +1 -2
  662. package/dist/services/compatibility/index.d.cts +6 -16
  663. package/dist/services/compatibility/index.d.mts +6 -16
  664. package/dist/services/compatibility/index.mjs +1 -2
  665. package/dist/services/compatibility/process.cjs +1 -2
  666. package/dist/services/compatibility/process.d.cts +2 -35
  667. package/dist/services/compatibility/process.d.mts +2 -35
  668. package/dist/services/compatibility/process.mjs +1 -2
  669. package/dist/services/compatibility/shared.cjs +1 -2
  670. package/dist/services/compatibility/shared.d.cts +2 -33
  671. package/dist/services/compatibility/shared.d.mts +2 -33
  672. package/dist/services/compatibility/shared.mjs +1 -2
  673. package/dist/services/compatibilityContext.cjs +1 -2
  674. package/dist/services/compatibilityContext.d.cts +2 -23
  675. package/dist/services/compatibilityContext.d.mts +2 -23
  676. package/dist/services/compatibilityContext.mjs +1 -2
  677. package/dist/services/composer.cjs +1 -2
  678. package/dist/services/composer.d.cts +4 -135
  679. package/dist/services/composer.d.mts +4 -135
  680. package/dist/services/composer.mjs +1 -2
  681. package/dist/services/config/index.cjs +1 -0
  682. package/dist/services/config/index.d.cts +7 -0
  683. package/dist/services/config/index.d.mts +7 -0
  684. package/dist/services/config/index.mjs +1 -0
  685. package/dist/services/config/projectTrust.cjs +2 -0
  686. package/dist/services/config/projectTrust.cjs.map +1 -0
  687. package/dist/services/config/projectTrust.d.cts +14 -0
  688. package/dist/services/config/projectTrust.d.cts.map +1 -0
  689. package/dist/services/config/projectTrust.d.mts +14 -0
  690. package/dist/services/config/projectTrust.d.mts.map +1 -0
  691. package/dist/services/config/projectTrust.mjs +2 -0
  692. package/dist/services/config/projectTrust.mjs.map +1 -0
  693. package/dist/services/extensionAssembler.cjs +1 -1
  694. package/dist/services/extensionAssembler.cjs.map +1 -1
  695. package/dist/services/extensionAssembler.d.cts +13 -6
  696. package/dist/services/extensionAssembler.d.cts.map +1 -1
  697. package/dist/services/extensionAssembler.d.mts +13 -6
  698. package/dist/services/extensionAssembler.d.mts.map +1 -1
  699. package/dist/services/extensionAssembler.mjs +1 -1
  700. package/dist/services/extensionAssembler.mjs.map +1 -1
  701. package/dist/services/harnessContext.cjs +1 -2
  702. package/dist/services/harnessContext.d.cts +2 -61
  703. package/dist/services/harnessContext.d.mts +2 -61
  704. package/dist/services/harnessContext.mjs +1 -2
  705. package/dist/services/index.cjs +1 -1
  706. package/dist/services/index.d.cts +18 -14
  707. package/dist/services/index.d.mts +18 -14
  708. package/dist/services/index.mjs +1 -1
  709. package/dist/services/matrixSwitcher.cjs +1 -2
  710. package/dist/services/matrixSwitcher.d.cts +2 -46
  711. package/dist/services/matrixSwitcher.d.mts +2 -46
  712. package/dist/services/matrixSwitcher.mjs +1 -2
  713. package/dist/services/mcpFilter.cjs +1 -3
  714. package/dist/services/mcpFilter.d.cts +2 -40
  715. package/dist/services/mcpFilter.d.mts +2 -40
  716. package/dist/services/mcpFilter.mjs +1 -3
  717. package/dist/services/modeCatalog.cjs +2 -0
  718. package/dist/services/modeCatalog.cjs.map +1 -0
  719. package/dist/services/modeCatalog.d.cts +18 -0
  720. package/dist/services/modeCatalog.d.cts.map +1 -0
  721. package/dist/services/modeCatalog.d.mts +18 -0
  722. package/dist/services/modeCatalog.d.mts.map +1 -0
  723. package/dist/services/modeCatalog.mjs +2 -0
  724. package/dist/services/modeCatalog.mjs.map +1 -0
  725. package/dist/services/piSettings.cjs +1 -2
  726. package/dist/services/piSettings.d.cts +2 -24
  727. package/dist/services/piSettings.d.mts +2 -24
  728. package/dist/services/piSettings.mjs +1 -2
  729. package/dist/services/resourceCollector.cjs +1 -3
  730. package/dist/services/resourceCollector.d.cts +2 -23
  731. package/dist/services/resourceCollector.d.mts +2 -23
  732. package/dist/services/resourceCollector.mjs +1 -3
  733. package/dist/services/skillCatalog.cjs +1 -2
  734. package/dist/services/skillCatalog.d.cts +2 -56
  735. package/dist/services/skillCatalog.d.mts +2 -56
  736. package/dist/services/skillCatalog.mjs +1 -2
  737. package/dist/services/skillSources.cjs +1 -2
  738. package/dist/services/skillSources.d.cts +2 -24
  739. package/dist/services/skillSources.d.mts +2 -24
  740. package/dist/services/skillSources.mjs +1 -2
  741. package/dist/services/syncState.cjs +1 -2
  742. package/dist/services/syncState.d.cts +3 -133
  743. package/dist/services/syncState.d.mts +3 -133
  744. package/dist/services/syncState.mjs +1 -2
  745. package/dist/services/tools/toolNames.cjs +2 -0
  746. package/dist/services/tools/toolNames.cjs.map +1 -0
  747. package/dist/services/tools/toolNames.d.cts +25 -0
  748. package/dist/services/tools/toolNames.d.cts.map +1 -0
  749. package/dist/services/tools/toolNames.d.mts +25 -0
  750. package/dist/services/tools/toolNames.d.mts.map +1 -0
  751. package/dist/services/tools/toolNames.mjs +2 -0
  752. package/dist/services/tools/toolNames.mjs.map +1 -0
  753. package/dist/{interfaces → types/interfaces}/compatibility.d.cts +1 -1
  754. package/dist/types/interfaces/compatibility.d.cts.map +1 -0
  755. package/dist/{interfaces → types/interfaces}/compatibility.d.mts +1 -1
  756. package/dist/types/interfaces/compatibility.d.mts.map +1 -0
  757. package/dist/{interfaces → types/interfaces}/harness.d.cts +6 -2
  758. package/dist/types/interfaces/harness.d.cts.map +1 -0
  759. package/dist/{interfaces → types/interfaces}/harness.d.mts +6 -2
  760. package/dist/types/interfaces/harness.d.mts.map +1 -0
  761. package/dist/utils/index.cjs +1 -1
  762. package/dist/utils/index.d.cts +5 -5
  763. package/dist/utils/index.d.mts +5 -5
  764. package/dist/utils/index.mjs +1 -1
  765. package/dist/utils/json.cjs +1 -2
  766. package/dist/utils/json.d.cts +2 -23
  767. package/dist/utils/json.d.mts +2 -23
  768. package/dist/utils/json.mjs +1 -2
  769. package/dist/utils/moduleResolution.cjs +1 -2
  770. package/dist/utils/moduleResolution.d.cts +2 -56
  771. package/dist/utils/moduleResolution.d.mts +2 -56
  772. package/dist/utils/moduleResolution.mjs +1 -2
  773. package/dist/utils/repository.cjs +1 -2
  774. package/dist/utils/repository.d.cts +2 -21
  775. package/dist/utils/repository.d.mts +2 -21
  776. package/dist/utils/repository.mjs +1 -2
  777. package/dist/utils/toolNames.cjs +1 -2
  778. package/dist/utils/toolNames.d.cts +2 -25
  779. package/dist/utils/toolNames.d.mts +2 -25
  780. package/dist/utils/toolNames.mjs +1 -2
  781. package/package.json +59 -37
  782. package/dist/cli/cliApp.cjs.map +0 -1
  783. package/dist/cli/cliApp.d.cts.map +0 -1
  784. package/dist/cli/cliApp.d.mts.map +0 -1
  785. package/dist/cli/cliApp.mjs.map +0 -1
  786. package/dist/cli/compatibilityOptions.cjs.map +0 -1
  787. package/dist/cli/compatibilityOptions.d.cts.map +0 -1
  788. package/dist/cli/compatibilityOptions.d.mts.map +0 -1
  789. package/dist/cli/compatibilityOptions.mjs.map +0 -1
  790. package/dist/cli/help.d.cts.map +0 -1
  791. package/dist/cli/help.d.mts.map +0 -1
  792. package/dist/cli/matrixOptions.cjs.map +0 -1
  793. package/dist/cli/matrixOptions.d.cts.map +0 -1
  794. package/dist/cli/matrixOptions.d.mts.map +0 -1
  795. package/dist/cli/matrixOptions.mjs.map +0 -1
  796. package/dist/cli/options.cjs.map +0 -1
  797. package/dist/cli/options.d.cts.map +0 -1
  798. package/dist/cli/options.d.mts.map +0 -1
  799. package/dist/cli/options.mjs.map +0 -1
  800. package/dist/commands/buildCommand.d.cts +0 -23
  801. package/dist/commands/buildCommand.d.cts.map +0 -1
  802. package/dist/commands/buildCommand.d.mts +0 -23
  803. package/dist/commands/buildCommand.d.mts.map +0 -1
  804. package/dist/config/harnessState.cjs.map +0 -1
  805. package/dist/config/harnessState.d.cts.map +0 -1
  806. package/dist/config/harnessState.d.mts.map +0 -1
  807. package/dist/config/harnessState.mjs.map +0 -1
  808. package/dist/config/projectTrust.cjs.map +0 -1
  809. package/dist/config/projectTrust.d.cts.map +0 -1
  810. package/dist/config/projectTrust.d.mts.map +0 -1
  811. package/dist/config/projectTrust.mjs.map +0 -1
  812. package/dist/entries/addDirCompatibility.cjs +0 -2
  813. package/dist/entries/addDirCompatibility.cjs.map +0 -1
  814. package/dist/entries/addDirCompatibility.d.cts +0 -13
  815. package/dist/entries/addDirCompatibility.d.cts.map +0 -1
  816. package/dist/entries/addDirCompatibility.d.mts +0 -14
  817. package/dist/entries/addDirCompatibility.d.mts.map +0 -1
  818. package/dist/entries/addDirCompatibility.mjs +0 -2
  819. package/dist/entries/addDirCompatibility.mjs.map +0 -1
  820. package/dist/entries/autoStop.cjs.map +0 -1
  821. package/dist/entries/autoStop.d.cts.map +0 -1
  822. package/dist/entries/autoStop.d.mts.map +0 -1
  823. package/dist/entries/autoStop.mjs.map +0 -1
  824. package/dist/entries/components/matrixPicker.cjs.map +0 -1
  825. package/dist/entries/components/matrixPicker.d.cts.map +0 -1
  826. package/dist/entries/components/matrixPicker.d.mts.map +0 -1
  827. package/dist/entries/components/matrixPicker.mjs.map +0 -1
  828. package/dist/entries/components/skillsOverlay.cjs.map +0 -1
  829. package/dist/entries/components/skillsOverlay.d.cts.map +0 -1
  830. package/dist/entries/components/skillsOverlay.d.mts.map +0 -1
  831. package/dist/entries/components/skillsOverlay.mjs.map +0 -1
  832. package/dist/entries/domains.cjs.map +0 -1
  833. package/dist/entries/domains.d.cts.map +0 -1
  834. package/dist/entries/domains.d.mts.map +0 -1
  835. package/dist/entries/domains.mjs.map +0 -1
  836. package/dist/entries/doom.cjs.map +0 -1
  837. package/dist/entries/doom.d.cts.map +0 -1
  838. package/dist/entries/doom.d.mts.map +0 -1
  839. package/dist/entries/doom.mjs.map +0 -1
  840. package/dist/entries/effort.cjs.map +0 -1
  841. package/dist/entries/effort.d.cts.map +0 -1
  842. package/dist/entries/effort.d.mts.map +0 -1
  843. package/dist/entries/effort.mjs.map +0 -1
  844. package/dist/entries/majorMode.cjs.map +0 -1
  845. package/dist/entries/majorMode.d.cts.map +0 -1
  846. package/dist/entries/majorMode.d.mts.map +0 -1
  847. package/dist/entries/majorMode.mjs.map +0 -1
  848. package/dist/entries/notifications.cjs.map +0 -1
  849. package/dist/entries/notifications.d.cts.map +0 -1
  850. package/dist/entries/notifications.d.mts.map +0 -1
  851. package/dist/entries/notifications.mjs.map +0 -1
  852. package/dist/entries/ollamaProvider.cjs.map +0 -1
  853. package/dist/entries/ollamaProvider.d.cts.map +0 -1
  854. package/dist/entries/ollamaProvider.d.mts.map +0 -1
  855. package/dist/entries/ollamaProvider.mjs.map +0 -1
  856. package/dist/entries/persona.cjs.map +0 -1
  857. package/dist/entries/persona.d.cts.map +0 -1
  858. package/dist/entries/persona.d.mts.map +0 -1
  859. package/dist/entries/persona.mjs.map +0 -1
  860. package/dist/entries/profile.cjs.map +0 -1
  861. package/dist/entries/profile.d.cts.map +0 -1
  862. package/dist/entries/profile.d.mts.map +0 -1
  863. package/dist/entries/profile.mjs.map +0 -1
  864. package/dist/entries/repositoryHooks.cjs.map +0 -1
  865. package/dist/entries/repositoryHooks.d.cts.map +0 -1
  866. package/dist/entries/repositoryHooks.d.mts.map +0 -1
  867. package/dist/entries/repositoryHooks.mjs.map +0 -1
  868. package/dist/entries/skills.cjs.map +0 -1
  869. package/dist/entries/skills.d.cts.map +0 -1
  870. package/dist/entries/skills.d.mts.map +0 -1
  871. package/dist/entries/skills.mjs.map +0 -1
  872. package/dist/entries/styleSystem.d.cts.map +0 -1
  873. package/dist/entries/styleSystem.d.mts.map +0 -1
  874. package/dist/entries/styleSystem.mjs.map +0 -1
  875. package/dist/interfaces/compatibility.d.cts.map +0 -1
  876. package/dist/interfaces/compatibility.d.mts.map +0 -1
  877. package/dist/interfaces/harness.d.cts.map +0 -1
  878. package/dist/interfaces/harness.d.mts.map +0 -1
  879. package/dist/logSinkTelemetry.cjs.map +0 -1
  880. package/dist/logSinkTelemetry.d.cts.map +0 -1
  881. package/dist/logSinkTelemetry.d.mts.map +0 -1
  882. package/dist/logSinkTelemetry.mjs.map +0 -1
  883. package/dist/node_modules/.pnpm/@juicesharp_rpiv-ask-user-question@2.2.0_@earendil-works_pi-coding-agent@0.84.1_support_6ba1249e24a50b62791c1c91c9f324c6/node_modules/@juicesharp/rpiv-ask-user-question/events.cjs +0 -2
  884. package/dist/node_modules/.pnpm/@juicesharp_rpiv-ask-user-question@2.2.0_@earendil-works_pi-coding-agent@0.84.1_support_6ba1249e24a50b62791c1c91c9f324c6/node_modules/@juicesharp/rpiv-ask-user-question/events.cjs.map +0 -1
  885. package/dist/node_modules/.pnpm/@juicesharp_rpiv-ask-user-question@2.2.0_@earendil-works_pi-coding-agent@0.84.1_support_6ba1249e24a50b62791c1c91c9f324c6/node_modules/@juicesharp/rpiv-ask-user-question/events.mjs +0 -2
  886. package/dist/node_modules/.pnpm/@juicesharp_rpiv-ask-user-question@2.2.0_@earendil-works_pi-coding-agent@0.84.1_support_6ba1249e24a50b62791c1c91c9f324c6/node_modules/@juicesharp/rpiv-ask-user-question/events.mjs.map +0 -1
  887. package/dist/services/compatibility/index.cjs.map +0 -1
  888. package/dist/services/compatibility/index.mjs.map +0 -1
  889. package/dist/services/compatibilityContext.cjs.map +0 -1
  890. package/dist/services/compatibilityContext.mjs.map +0 -1
  891. package/dist/services/composer.cjs.map +0 -1
  892. package/dist/services/composer.d.cts.map +0 -1
  893. package/dist/services/composer.d.mts.map +0 -1
  894. package/dist/services/composer.mjs.map +0 -1
  895. package/dist/services/extensionCompiler.cjs +0 -3
  896. package/dist/services/extensionCompiler.cjs.map +0 -1
  897. package/dist/services/extensionCompiler.mjs +0 -3
  898. package/dist/services/extensionCompiler.mjs.map +0 -1
  899. package/dist/services/harnessContext.cjs.map +0 -1
  900. package/dist/services/harnessContext.mjs.map +0 -1
  901. package/dist/services/matrixSwitcher.cjs.map +0 -1
  902. package/dist/services/matrixSwitcher.mjs.map +0 -1
  903. package/dist/services/mcpFilter.cjs.map +0 -1
  904. package/dist/services/mcpFilter.d.cts.map +0 -1
  905. package/dist/services/mcpFilter.d.mts.map +0 -1
  906. package/dist/services/mcpFilter.mjs.map +0 -1
  907. package/dist/services/piSettings.cjs.map +0 -1
  908. package/dist/services/piSettings.d.cts.map +0 -1
  909. package/dist/services/piSettings.d.mts.map +0 -1
  910. package/dist/services/piSettings.mjs.map +0 -1
  911. package/dist/services/resourceCollector.cjs.map +0 -1
  912. package/dist/services/resourceCollector.d.cts.map +0 -1
  913. package/dist/services/resourceCollector.d.mts.map +0 -1
  914. package/dist/services/resourceCollector.mjs.map +0 -1
  915. package/dist/services/runtimeBundle.cjs +0 -2
  916. package/dist/services/runtimeBundle.cjs.map +0 -1
  917. package/dist/services/runtimeBundle.d.cts.map +0 -1
  918. package/dist/services/runtimeBundle.d.mts.map +0 -1
  919. package/dist/services/runtimeBundle.mjs +0 -2
  920. package/dist/services/runtimeBundle.mjs.map +0 -1
  921. package/dist/services/skillCatalog.cjs.map +0 -1
  922. package/dist/services/skillCatalog.d.cts.map +0 -1
  923. package/dist/services/skillCatalog.d.mts.map +0 -1
  924. package/dist/services/skillCatalog.mjs.map +0 -1
  925. package/dist/services/syncState.cjs.map +0 -1
  926. package/dist/services/syncState.d.cts.map +0 -1
  927. package/dist/services/syncState.d.mts.map +0 -1
  928. package/dist/services/syncState.mjs.map +0 -1
  929. package/dist/utils/json.cjs.map +0 -1
  930. package/dist/utils/json.d.cts.map +0 -1
  931. package/dist/utils/json.d.mts.map +0 -1
  932. package/dist/utils/json.mjs.map +0 -1
  933. package/dist/utils/moduleResolution.cjs.map +0 -1
  934. package/dist/utils/moduleResolution.d.cts.map +0 -1
  935. package/dist/utils/moduleResolution.d.mts.map +0 -1
  936. package/dist/utils/moduleResolution.mjs.map +0 -1
  937. package/dist/utils/repository.cjs.map +0 -1
  938. package/dist/utils/repository.d.cts.map +0 -1
  939. package/dist/utils/repository.d.mts.map +0 -1
  940. package/dist/utils/repository.mjs.map +0 -1
  941. package/dist/utils/toolNames.cjs.map +0 -1
  942. package/dist/utils/toolNames.d.cts.map +0 -1
  943. package/dist/utils/toolNames.d.mts.map +0 -1
  944. package/dist/utils/toolNames.mjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options.cjs","names":["DEFAULT_MAJOR_MODE","resolveInheritedProfile","resolveInheritedMajorMode","matchesOption","REMOVED_TARGET_OPTION","MAJOR_MODE_OPTION","REMOVED_LAYER_OPTION","REMOVED_LAYERS_OPTION","DOMAINS_OPTION","readOption","parseMajorMode","PROFILE_OPTION","parseProfileValue","parseCsv","path","ADD_DIRECTORY_OPTION","defaultDomainsForMajorMode","resolveAdditionalDirectories"],"sources":["../../../src/commands/cli/options.ts"],"sourcesContent":["import path from 'node:path';\nimport type { HarnessOutputFormat, HarnessPreset, ParsedHarnessArgs } from '../../types/interfaces/index.ts';\nimport {\n ADD_DIRECTORY_OPTION,\n DEFAULT_MAJOR_MODE,\n DOMAIN_OPTION,\n DOMAINS_OPTION,\n DOOMPI_PRESET_ENV,\n defaultDomainsForMajorMode,\n MAJOR_MODE_OPTION,\n matchesOption,\n PROFILE_OPTION,\n parseCsv,\n parseMajorMode,\n parseProfileValue,\n REMOVED_LAYER_OPTION,\n REMOVED_LAYERS_OPTION,\n REMOVED_TARGET_OPTION,\n readOption,\n resolveAdditionalDirectories,\n resolveInheritedMajorMode,\n resolveInheritedProfile,\n} from './matrixOptions.ts';\n\nconst KIMI_FOR_CODING = 'kimi-for-coding';\nconst KIMI_FOR_CODING_HIGHSPEED = 'kimi-for-coding-highspeed';\nconst KIMI_K2_6 = 'kimi-k2.6';\nconst DEFAULT_PRESET = 'default';\nconst KIMI_PRESET = 'kimi';\nconst OLLAMA_PRESET = 'ollama';\nconst OLLAMA_PREFIX = 'ollama/';\nconst KIMI_CODING_PREFIX = 'kimi-coding/';\nconst CLOUD_SUFFIX = ':cloud';\nconst NATIVE_FORMAT = 'native';\nconst KIMI_CODE_MODEL_ENV = 'KIMI_CODE_MODEL';\nconst OLLAMA_CLAUDE_MODEL_ENV = 'OLLAMA_CLAUDE_MODEL';\nconst MODEL_OPTION = '--model';\nconst MODEL_SHORT_OPTION = '-m';\nconst MODE_OPTION = '--mode';\nconst THINKING_OPTION = '--thinking';\nconst PRINT_OPTION = '--print';\nconst PRINT_SHORT_OPTION = '-p';\nconst APPROVE_OPTION = '--approve';\nconst APPROVE_SHORT_OPTION = '-a';\nconst PROFILES_OPTION = '--profiles';\nconst NO_DOMAINS_OPTION = '--no-domains';\nconst PRESET_OPTION = '--preset';\nconst EFFORT_OPTION = '--effort';\nconst OUTPUT_FORMAT_OPTION = '--output-format';\nconst MUTE_OPTION = '--mute';\nconst VIBE_LINT_FORMAT = 'vibe-lint';\nconst STREAM_JSON_FORMAT = 'stream-json';\nconst JSON_FORMAT = 'json';\nconst EXPLAIN_OPTION = '--explain';\nconst EMIT_MCP_OPTION = '--emit-mcp';\nconst PLUGIN_DIRECTORY_OPTION = '--plugin-dir';\nconst CWD_OPTION = '--cwd';\nconst CD_OPTION = '--cd';\nconst AUTOMATION_OPTION = '--automation';\nconst AUTO_STOP_OPTION = '--auto-stop';\nconst ALLOW_PROTECTED_WRITES_OPTION = '--allow-protected-writes';\nconst HOOKS_OPTION = '--hooks';\nconst MCP_OPTION = '--mcp';\nconst AGENTS_OPTION = '--agents';\nconst NO_HOOKS_OPTION = '--no-hooks';\nconst NO_MCP_OPTION = '--no-mcp';\nconst NO_AGENTS_OPTION = '--no-agents';\nconst VERBOSE_OPTION = '--verbose';\nconst DANGEROUSLY_SKIP_PERMISSIONS_OPTION = '--dangerously-skip-permissions';\nconst HELP_OPTION = '--help';\nconst HELP_SHORT_OPTION = '-h';\nconst VERSION_OPTION = '--version';\nconst VERSION_SHORT_OPTION = '-v';\n\nconst KIMI_ALIASES = new Map([\n ['k2p5', KIMI_FOR_CODING],\n ['k2p6', KIMI_FOR_CODING],\n ['k2p7', KIMI_FOR_CODING],\n ['kimi-k2.5', KIMI_FOR_CODING],\n [KIMI_K2_6, KIMI_FOR_CODING],\n ['kimi-k2.7-code', KIMI_FOR_CODING],\n [KIMI_FOR_CODING, KIMI_FOR_CODING],\n [KIMI_FOR_CODING_HIGHSPEED, KIMI_FOR_CODING_HIGHSPEED],\n]);\n\nfunction parsePreset(value: string): HarnessPreset {\n if (value === DEFAULT_PRESET || value === KIMI_PRESET || value === OLLAMA_PRESET) return value;\n throw new Error(`Unsupported preset: ${value}`);\n}\n\nfunction hasOption(args: string[], ...names: string[]): boolean {\n return args.some((arg) => names.includes(arg) || names.some((name) => arg.startsWith(`${name}=`)));\n}\n\nfunction modelValue(args: string[]): { index: number; value: string; inline: boolean } | undefined {\n for (let index = 0; index < args.length; index += 1) {\n if (args[index] === MODEL_OPTION || args[index] === MODEL_SHORT_OPTION) {\n const value = args[index + 1];\n if (value) return { index, value, inline: false };\n }\n if (args[index]?.startsWith(`${MODEL_OPTION}=`)) {\n return { index, value: args[index].slice(`${MODEL_OPTION}=`.length), inline: true };\n }\n }\n return undefined;\n}\n\nfunction replaceModel(args: string[], value: string): void {\n const selected = modelValue(args);\n if (!selected) {\n args.unshift(MODEL_OPTION, value);\n } else if (selected.inline) {\n args[selected.index] = `${MODEL_OPTION}=${value}`;\n } else {\n args[selected.index + 1] = value;\n }\n}\n\nfunction normalizeProviderArgs(preset: HarnessPreset, piArgs: string[], environment: NodeJS.ProcessEnv): void {\n const selected = modelValue(piArgs);\n if (preset === KIMI_PRESET) {\n const value = selected?.value ?? environment[KIMI_CODE_MODEL_ENV] ?? KIMI_FOR_CODING;\n const unqualified = value.includes('/') ? value.slice(value.indexOf('/') + 1) : value;\n replaceModel(piArgs, `${KIMI_CODING_PREFIX}${KIMI_ALIASES.get(unqualified) ?? unqualified}`);\n }\n if (preset === OLLAMA_PRESET) {\n const value = selected?.value ?? environment[OLLAMA_CLAUDE_MODEL_ENV] ?? KIMI_K2_6;\n const unqualified = value.startsWith(OLLAMA_PREFIX) ? value.slice(OLLAMA_PREFIX.length) : value;\n replaceModel(\n piArgs,\n `${OLLAMA_PREFIX}${unqualified.includes(':') ? unqualified : `${unqualified}${CLOUD_SUFFIX}`}`,\n );\n }\n}\n\n/**\n * Answers `--help` and `--version` without reading the environment.\n *\n * The caller only looks at `help` and `version` for these, and never launches,\n * so the options carry defaults rather than a resolved matrix. This exists so a\n * stale export cannot break the one command that explains how to fix it.\n */\nfunction parseInformationalArgs(args: string[], currentDirectory: string): ParsedHarnessArgs | undefined {\n const help = args.some((arg) => arg === HELP_OPTION || arg === HELP_SHORT_OPTION);\n const version = args.some((arg) => arg === VERSION_OPTION || arg === VERSION_SHORT_OPTION);\n if (!help && !version) return undefined;\n return {\n options: {\n cwd: currentDirectory,\n profile: undefined,\n domains: [],\n majorMode: DEFAULT_MAJOR_MODE,\n explain: false,\n emitMcp: undefined,\n pluginDirectories: [],\n additionalDirectories: [],\n preset: DEFAULT_PRESET,\n outputFormat: NATIVE_FORMAT,\n mute: false,\n automation: false,\n autoStop: false,\n allowProtectedWrites: false,\n hooks: true,\n mcp: true,\n agents: true,\n piArgs: [],\n },\n help,\n version,\n };\n}\n\nexport function parseHarnessArgs(\n args: string[],\n environment: NodeJS.ProcessEnv = process.env,\n currentDirectory = process.cwd(),\n defaultMajorMode: string = DEFAULT_MAJOR_MODE,\n defaultDomains?: readonly string[],\n): ParsedHarnessArgs {\n const informational = parseInformationalArgs(args, currentDirectory);\n if (informational) return informational;\n\n let profile = resolveInheritedProfile(environment);\n let profileProvided = false;\n let majorMode = resolveInheritedMajorMode(environment, defaultMajorMode);\n let majorModeProvided = false;\n const domains: string[] = [];\n // Directory options are collected verbatim and resolved once after the loop,\n // so a relative path means the same thing regardless of where --cwd appears\n // in the argument list.\n const pluginDirectoryValues: string[] = [];\n const additionalDirectoryValues: string[] = [];\n const piArgs: string[] = [];\n let cwd = currentDirectory;\n let preset = parsePreset(environment[DOOMPI_PRESET_ENV] ?? DEFAULT_PRESET);\n let outputFormat: HarnessOutputFormat = NATIVE_FORMAT;\n let domainsDisabled = false;\n let mute = false;\n let automation = false;\n let autoStop = false;\n let allowProtectedWrites = false;\n let hooks = true;\n let mcp = true;\n let agents = true;\n let help = false;\n let version = false;\n let explain = false;\n let emitMcp: string | undefined;\n\n for (let index = 0; index < args.length; index += 1) {\n const arg = args[index]!;\n\n if (matchesOption(arg, REMOVED_TARGET_OPTION)) {\n throw new Error(`${REMOVED_TARGET_OPTION} was replaced by ${MAJOR_MODE_OPTION}`);\n }\n if (matchesOption(arg, REMOVED_LAYER_OPTION)) {\n throw new Error(`${REMOVED_LAYER_OPTION} was replaced by ${MAJOR_MODE_OPTION}`);\n }\n if (matchesOption(arg, REMOVED_LAYERS_OPTION)) {\n throw new Error(`${REMOVED_LAYERS_OPTION} was removed; select one major mode with ${MAJOR_MODE_OPTION}`);\n }\n if (matchesOption(arg, PROFILES_OPTION)) {\n throw new Error(`${PROFILES_OPTION} was replaced by ${DOMAINS_OPTION}`);\n }\n\n const majorModeMatch = readOption(args, index, MAJOR_MODE_OPTION);\n if (majorModeMatch) {\n if (majorModeProvided) throw new Error(`${MAJOR_MODE_OPTION} can only be provided once`);\n majorMode = parseMajorMode(majorModeMatch.value, MAJOR_MODE_OPTION);\n majorModeProvided = true;\n index = majorModeMatch.nextIndex;\n continue;\n }\n\n const profileMatch = readOption(args, index, PROFILE_OPTION);\n if (profileMatch) {\n if (profileProvided) throw new Error(`${PROFILE_OPTION} can only be provided once`);\n profile = parseProfileValue(profileMatch.value, PROFILE_OPTION);\n profileProvided = true;\n index = profileMatch.nextIndex;\n continue;\n }\n\n const domainMatch = readOption(args, index, DOMAINS_OPTION) ?? readOption(args, index, DOMAIN_OPTION);\n if (domainMatch) {\n domains.push(...parseCsv(domainMatch.value));\n index = domainMatch.nextIndex;\n continue;\n }\n\n const emitMcpMatch = readOption(args, index, EMIT_MCP_OPTION);\n if (emitMcpMatch) {\n emitMcp = path.resolve(currentDirectory, emitMcpMatch.value);\n index = emitMcpMatch.nextIndex;\n continue;\n }\n\n const pluginDirectoryMatch = readOption(args, index, PLUGIN_DIRECTORY_OPTION);\n if (pluginDirectoryMatch) {\n pluginDirectoryValues.push(pluginDirectoryMatch.value);\n index = pluginDirectoryMatch.nextIndex;\n continue;\n }\n\n const addDirectoryMatch = readOption(args, index, ADD_DIRECTORY_OPTION);\n if (addDirectoryMatch) {\n additionalDirectoryValues.push(addDirectoryMatch.value);\n index = addDirectoryMatch.nextIndex;\n continue;\n }\n\n const presetMatch = readOption(args, index, PRESET_OPTION);\n if (presetMatch) {\n preset = parsePreset(presetMatch.value);\n index = presetMatch.nextIndex;\n continue;\n }\n\n const cwdMatch = readOption(args, index, CWD_OPTION) ?? readOption(args, index, CD_OPTION);\n if (cwdMatch) {\n cwd = path.resolve(currentDirectory, cwdMatch.value);\n index = cwdMatch.nextIndex;\n continue;\n }\n\n const effortMatch = readOption(args, index, EFFORT_OPTION);\n if (effortMatch) {\n if (effortMatch.inline) piArgs.push(`${THINKING_OPTION}=${effortMatch.value}`);\n else piArgs.push(THINKING_OPTION, effortMatch.value);\n index = effortMatch.nextIndex;\n continue;\n }\n\n const outputFormatMatch = readOption(args, index, OUTPUT_FORMAT_OPTION);\n if (outputFormatMatch) {\n const requested = outputFormatMatch.value;\n if (requested === VIBE_LINT_FORMAT) {\n outputFormat = VIBE_LINT_FORMAT;\n } else {\n const mode = requested === STREAM_JSON_FORMAT ? JSON_FORMAT : requested;\n if (outputFormatMatch.inline) piArgs.push(`${MODE_OPTION}=${mode}`);\n else piArgs.push(MODE_OPTION, mode);\n }\n index = outputFormatMatch.nextIndex;\n continue;\n }\n\n if (arg === NO_DOMAINS_OPTION) domainsDisabled = true;\n else if (arg === EXPLAIN_OPTION) explain = true;\n else if (arg === AUTOMATION_OPTION) automation = true;\n else if (arg === MUTE_OPTION) mute = true;\n else if (arg === AUTO_STOP_OPTION) autoStop = true;\n else if (arg === ALLOW_PROTECTED_WRITES_OPTION) allowProtectedWrites = true;\n else if (arg === HOOKS_OPTION) hooks = true;\n else if (arg === MCP_OPTION) mcp = true;\n else if (arg === AGENTS_OPTION) agents = true;\n else if (arg === NO_HOOKS_OPTION) hooks = false;\n else if (arg === NO_MCP_OPTION) mcp = false;\n else if (arg === NO_AGENTS_OPTION) agents = false;\n else if (arg === HELP_OPTION || arg === HELP_SHORT_OPTION) help = true;\n else if (arg === VERSION_OPTION || arg === VERSION_SHORT_OPTION) version = true;\n // Accepted for Claude Code compatibility and deliberately not forwarded.\n else if (arg !== VERBOSE_OPTION && arg !== DANGEROUSLY_SKIP_PERMISSIONS_OPTION) piArgs.push(arg);\n }\n\n if (domainsDisabled && domains.length > 0) {\n throw new Error(`${NO_DOMAINS_OPTION} cannot be combined with ${DOMAINS_OPTION}`);\n }\n if (!domainsDisabled && domains.length === 0 && pluginDirectoryValues.length === 0) {\n domains.push(...defaultDomainsForMajorMode(majorMode, environment, defaultDomains));\n }\n if (automation) {\n if (!hasOption(piArgs, PRINT_OPTION, PRINT_SHORT_OPTION)) piArgs.unshift(PRINT_OPTION);\n if (!hasOption(piArgs, MODE_OPTION)) piArgs.unshift(MODE_OPTION, JSON_FORMAT);\n if (!hasOption(piArgs, APPROVE_OPTION, APPROVE_SHORT_OPTION)) piArgs.unshift(APPROVE_OPTION);\n }\n if (\n autoStop &&\n (automation ||\n outputFormat === VIBE_LINT_FORMAT ||\n hasOption(piArgs, PRINT_OPTION, PRINT_SHORT_OPTION, MODE_OPTION))\n ) {\n throw new Error(`${AUTO_STOP_OPTION} only supports interactive Pi mode`);\n }\n normalizeProviderArgs(preset, piArgs, environment);\n\n return {\n options: {\n cwd,\n profile,\n domains,\n majorMode,\n explain,\n emitMcp,\n pluginDirectories: pluginDirectoryValues.map((value) => path.resolve(currentDirectory, value)),\n additionalDirectories: [\n ...new Set([\n ...resolveAdditionalDirectories(environment, currentDirectory),\n ...additionalDirectoryValues.map((value) => path.resolve(currentDirectory, value)),\n ]),\n ],\n preset,\n outputFormat,\n mute,\n automation,\n autoStop,\n allowProtectedWrites,\n hooks,\n mcp,\n agents,\n piArgs,\n },\n help,\n version,\n };\n}\n"],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { ParsedHarnessArgs } from "../../types/interfaces/harness.cjs";
2
+
3
+ //#region src/commands/cli/options.d.ts
4
+ declare function parseHarnessArgs(args: string[], environment?: NodeJS.ProcessEnv, currentDirectory?: string, defaultMajorMode?: string, defaultDomains?: readonly string[]): ParsedHarnessArgs;
5
+ //#endregion
6
+ export { parseHarnessArgs };
7
+ //# sourceMappingURL=options.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options.d.cts","names":[],"sources":["../../../src/commands/cli/options.ts"],"mappings":";;;iBA4KgB,gBAAA,CACd,IAAA,YACA,WAAA,GAAa,MAAA,CAAO,UAAA,EACpB,gBAAA,WACA,gBAAA,WACA,cAAA,uBACC,iBAAA"}
@@ -0,0 +1,7 @@
1
+ import { ParsedHarnessArgs } from "../../types/interfaces/harness.mjs";
2
+
3
+ //#region src/commands/cli/options.d.ts
4
+ declare function parseHarnessArgs(args: string[], environment?: NodeJS.ProcessEnv, currentDirectory?: string, defaultMajorMode?: string, defaultDomains?: readonly string[]): ParsedHarnessArgs;
5
+ //#endregion
6
+ export { parseHarnessArgs };
7
+ //# sourceMappingURL=options.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options.d.mts","names":[],"sources":["../../../src/commands/cli/options.ts"],"mappings":";;;iBA4KgB,gBAAA,CACd,IAAA,YACA,WAAA,GAAa,MAAA,CAAO,UAAA,EACpB,gBAAA,WACA,gBAAA,WACA,cAAA,uBACC,iBAAA"}
@@ -0,0 +1,2 @@
1
+ import{ADD_DIRECTORY_OPTION as e,DEFAULT_MAJOR_MODE as t,DOMAINS_OPTION as n,MAJOR_MODE_OPTION as r,PROFILE_OPTION as i,REMOVED_LAYERS_OPTION as ee,REMOVED_LAYER_OPTION as te,REMOVED_TARGET_OPTION as ne,defaultDomainsForMajorMode as a,matchesOption as o,parseCsv as re,parseMajorMode as ie,parseProfileValue as ae,readOption as s,resolveAdditionalDirectories as c,resolveInheritedMajorMode as l,resolveInheritedProfile as u}from"./matrixOptions.mjs";import d from"node:path";const f=`kimi-for-coding`,p=`kimi-for-coding-highspeed`,m=`kimi-k2.6`,h=`default`,g=`kimi`,_=`ollama`,v=`ollama/`,y=`native`,b=`--model`,x=`--mode`,S=`--thinking`,C=`--print`,w=`--approve`,T=`--profiles`,E=`--no-domains`,D=`vibe-lint`,O=`json`,k=`--auto-stop`,A=`--help`,j=`--version`,M=new Map([[`k2p5`,f],[`k2p6`,f],[`k2p7`,f],[`kimi-k2.5`,f],[m,f],[`kimi-k2.7-code`,f],[f,f],[p,p]]);function N(e){if(e===h||e===g||e===_)return e;throw Error(`Unsupported preset: ${e}`)}function P(e,...t){return e.some(e=>t.includes(e)||t.some(t=>e.startsWith(`${t}=`)))}function F(e){for(let t=0;t<e.length;t+=1){if(e[t]===b||e[t]===`-m`){let n=e[t+1];if(n)return{index:t,value:n,inline:!1}}if(e[t]?.startsWith(`${b}=`))return{index:t,value:e[t].slice(`${b}=`.length),inline:!0}}}function I(e,t){let n=F(e);n?n.inline?e[n.index]=`${b}=${t}`:e[n.index+1]=t:e.unshift(b,t)}function oe(e,t,n){let r=F(t);if(e===g){let e=r?.value??n.KIMI_CODE_MODEL??f,i=e.includes(`/`)?e.slice(e.indexOf(`/`)+1):e;I(t,`kimi-coding/${M.get(i)??i}`)}if(e===_){let e=r?.value??n.OLLAMA_CLAUDE_MODEL??m,i=e.startsWith(v)?e.slice(7):e;I(t,`${v}${i.includes(`:`)?i:`${i}:cloud`}`)}}function se(e,n){let r=e.some(e=>e===A||e===`-h`),i=e.some(e=>e===j||e===`-v`);if(!(!r&&!i))return{options:{cwd:n,profile:void 0,domains:[],majorMode:t,explain:!1,emitMcp:void 0,pluginDirectories:[],additionalDirectories:[],preset:h,outputFormat:y,mute:!1,automation:!1,autoStop:!1,allowProtectedWrites:!1,hooks:!0,mcp:!0,agents:!0,piArgs:[]},help:r,version:i}}function L(f,p=process.env,m=process.cwd(),g=t,_){let v=se(f,m);if(v)return v;let b=u(p),M=!1,F=l(p,g),I=!1,L=[],R=[],z=[],B=[],V=m,H=N(p.DOOMPI_PRESET??h),U=y,W=!1,G=!1,K=!1,q=!1,J=!1,Y=!0,X=!0,Z=!0,Q=!1,$=!1,ce=!1,le;for(let t=0;t<f.length;t+=1){let a=f[t];if(o(a,`--target`))throw Error(`${ne} was replaced by ${r}`);if(o(a,`--layer`))throw Error(`${te} was replaced by ${r}`);if(o(a,`--layers`))throw Error(`${ee} was removed; select one major mode with ${r}`);if(o(a,T))throw Error(`${T} was replaced by ${n}`);let c=s(f,t,r);if(c){if(I)throw Error(`${r} can only be provided once`);F=ie(c.value,r),I=!0,t=c.nextIndex;continue}let l=s(f,t,i);if(l){if(M)throw Error(`${i} can only be provided once`);b=ae(l.value,i),M=!0,t=l.nextIndex;continue}let u=s(f,t,`--domains`)??s(f,t,`--domain`);if(u){L.push(...re(u.value)),t=u.nextIndex;continue}let p=s(f,t,`--emit-mcp`);if(p){le=d.resolve(m,p.value),t=p.nextIndex;continue}let h=s(f,t,`--plugin-dir`);if(h){R.push(h.value),t=h.nextIndex;continue}let g=s(f,t,e);if(g){z.push(g.value),t=g.nextIndex;continue}let _=s(f,t,`--preset`);if(_){H=N(_.value),t=_.nextIndex;continue}let v=s(f,t,`--cwd`)??s(f,t,`--cd`);if(v){V=d.resolve(m,v.value),t=v.nextIndex;continue}let y=s(f,t,`--effort`);if(y){y.inline?B.push(`${S}=${y.value}`):B.push(S,y.value),t=y.nextIndex;continue}let C=s(f,t,`--output-format`);if(C){let e=C.value;if(e===D)U=D;else{let t=e===`stream-json`?O:e;C.inline?B.push(`${x}=${t}`):B.push(x,t)}t=C.nextIndex;continue}a===E?W=!0:a===`--explain`?ce=!0:a===`--automation`?K=!0:a===`--mute`?G=!0:a===k?q=!0:a===`--allow-protected-writes`?J=!0:a===`--hooks`?Y=!0:a===`--mcp`?X=!0:a===`--agents`?Z=!0:a===`--no-hooks`?Y=!1:a===`--no-mcp`?X=!1:a===`--no-agents`?Z=!1:a===A||a===`-h`?Q=!0:a===j||a===`-v`?$=!0:a!==`--verbose`&&a!==`--dangerously-skip-permissions`&&B.push(a)}if(W&&L.length>0)throw Error(`${E} cannot be combined with ${n}`);if(!W&&L.length===0&&R.length===0&&L.push(...a(F,p,_)),K&&(P(B,C,`-p`)||B.unshift(C),P(B,x)||B.unshift(x,O),P(B,w,`-a`)||B.unshift(w)),q&&(K||U===D||P(B,C,`-p`,x)))throw Error(`${k} only supports interactive Pi mode`);return oe(H,B,p),{options:{cwd:V,profile:b,domains:L,majorMode:F,explain:ce,emitMcp:le,pluginDirectories:R.map(e=>d.resolve(m,e)),additionalDirectories:[...new Set([...c(p,m),...z.map(e=>d.resolve(m,e))])],preset:H,outputFormat:U,mute:G,automation:K,autoStop:q,allowProtectedWrites:J,hooks:Y,mcp:X,agents:Z,piArgs:B},help:Q,version:$}}export{L as parseHarnessArgs};
2
+ //# sourceMappingURL=options.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options.mjs","names":[],"sources":["../../../src/commands/cli/options.ts"],"sourcesContent":["import path from 'node:path';\nimport type { HarnessOutputFormat, HarnessPreset, ParsedHarnessArgs } from '../../types/interfaces/index.ts';\nimport {\n ADD_DIRECTORY_OPTION,\n DEFAULT_MAJOR_MODE,\n DOMAIN_OPTION,\n DOMAINS_OPTION,\n DOOMPI_PRESET_ENV,\n defaultDomainsForMajorMode,\n MAJOR_MODE_OPTION,\n matchesOption,\n PROFILE_OPTION,\n parseCsv,\n parseMajorMode,\n parseProfileValue,\n REMOVED_LAYER_OPTION,\n REMOVED_LAYERS_OPTION,\n REMOVED_TARGET_OPTION,\n readOption,\n resolveAdditionalDirectories,\n resolveInheritedMajorMode,\n resolveInheritedProfile,\n} from './matrixOptions.ts';\n\nconst KIMI_FOR_CODING = 'kimi-for-coding';\nconst KIMI_FOR_CODING_HIGHSPEED = 'kimi-for-coding-highspeed';\nconst KIMI_K2_6 = 'kimi-k2.6';\nconst DEFAULT_PRESET = 'default';\nconst KIMI_PRESET = 'kimi';\nconst OLLAMA_PRESET = 'ollama';\nconst OLLAMA_PREFIX = 'ollama/';\nconst KIMI_CODING_PREFIX = 'kimi-coding/';\nconst CLOUD_SUFFIX = ':cloud';\nconst NATIVE_FORMAT = 'native';\nconst KIMI_CODE_MODEL_ENV = 'KIMI_CODE_MODEL';\nconst OLLAMA_CLAUDE_MODEL_ENV = 'OLLAMA_CLAUDE_MODEL';\nconst MODEL_OPTION = '--model';\nconst MODEL_SHORT_OPTION = '-m';\nconst MODE_OPTION = '--mode';\nconst THINKING_OPTION = '--thinking';\nconst PRINT_OPTION = '--print';\nconst PRINT_SHORT_OPTION = '-p';\nconst APPROVE_OPTION = '--approve';\nconst APPROVE_SHORT_OPTION = '-a';\nconst PROFILES_OPTION = '--profiles';\nconst NO_DOMAINS_OPTION = '--no-domains';\nconst PRESET_OPTION = '--preset';\nconst EFFORT_OPTION = '--effort';\nconst OUTPUT_FORMAT_OPTION = '--output-format';\nconst MUTE_OPTION = '--mute';\nconst VIBE_LINT_FORMAT = 'vibe-lint';\nconst STREAM_JSON_FORMAT = 'stream-json';\nconst JSON_FORMAT = 'json';\nconst EXPLAIN_OPTION = '--explain';\nconst EMIT_MCP_OPTION = '--emit-mcp';\nconst PLUGIN_DIRECTORY_OPTION = '--plugin-dir';\nconst CWD_OPTION = '--cwd';\nconst CD_OPTION = '--cd';\nconst AUTOMATION_OPTION = '--automation';\nconst AUTO_STOP_OPTION = '--auto-stop';\nconst ALLOW_PROTECTED_WRITES_OPTION = '--allow-protected-writes';\nconst HOOKS_OPTION = '--hooks';\nconst MCP_OPTION = '--mcp';\nconst AGENTS_OPTION = '--agents';\nconst NO_HOOKS_OPTION = '--no-hooks';\nconst NO_MCP_OPTION = '--no-mcp';\nconst NO_AGENTS_OPTION = '--no-agents';\nconst VERBOSE_OPTION = '--verbose';\nconst DANGEROUSLY_SKIP_PERMISSIONS_OPTION = '--dangerously-skip-permissions';\nconst HELP_OPTION = '--help';\nconst HELP_SHORT_OPTION = '-h';\nconst VERSION_OPTION = '--version';\nconst VERSION_SHORT_OPTION = '-v';\n\nconst KIMI_ALIASES = new Map([\n ['k2p5', KIMI_FOR_CODING],\n ['k2p6', KIMI_FOR_CODING],\n ['k2p7', KIMI_FOR_CODING],\n ['kimi-k2.5', KIMI_FOR_CODING],\n [KIMI_K2_6, KIMI_FOR_CODING],\n ['kimi-k2.7-code', KIMI_FOR_CODING],\n [KIMI_FOR_CODING, KIMI_FOR_CODING],\n [KIMI_FOR_CODING_HIGHSPEED, KIMI_FOR_CODING_HIGHSPEED],\n]);\n\nfunction parsePreset(value: string): HarnessPreset {\n if (value === DEFAULT_PRESET || value === KIMI_PRESET || value === OLLAMA_PRESET) return value;\n throw new Error(`Unsupported preset: ${value}`);\n}\n\nfunction hasOption(args: string[], ...names: string[]): boolean {\n return args.some((arg) => names.includes(arg) || names.some((name) => arg.startsWith(`${name}=`)));\n}\n\nfunction modelValue(args: string[]): { index: number; value: string; inline: boolean } | undefined {\n for (let index = 0; index < args.length; index += 1) {\n if (args[index] === MODEL_OPTION || args[index] === MODEL_SHORT_OPTION) {\n const value = args[index + 1];\n if (value) return { index, value, inline: false };\n }\n if (args[index]?.startsWith(`${MODEL_OPTION}=`)) {\n return { index, value: args[index].slice(`${MODEL_OPTION}=`.length), inline: true };\n }\n }\n return undefined;\n}\n\nfunction replaceModel(args: string[], value: string): void {\n const selected = modelValue(args);\n if (!selected) {\n args.unshift(MODEL_OPTION, value);\n } else if (selected.inline) {\n args[selected.index] = `${MODEL_OPTION}=${value}`;\n } else {\n args[selected.index + 1] = value;\n }\n}\n\nfunction normalizeProviderArgs(preset: HarnessPreset, piArgs: string[], environment: NodeJS.ProcessEnv): void {\n const selected = modelValue(piArgs);\n if (preset === KIMI_PRESET) {\n const value = selected?.value ?? environment[KIMI_CODE_MODEL_ENV] ?? KIMI_FOR_CODING;\n const unqualified = value.includes('/') ? value.slice(value.indexOf('/') + 1) : value;\n replaceModel(piArgs, `${KIMI_CODING_PREFIX}${KIMI_ALIASES.get(unqualified) ?? unqualified}`);\n }\n if (preset === OLLAMA_PRESET) {\n const value = selected?.value ?? environment[OLLAMA_CLAUDE_MODEL_ENV] ?? KIMI_K2_6;\n const unqualified = value.startsWith(OLLAMA_PREFIX) ? value.slice(OLLAMA_PREFIX.length) : value;\n replaceModel(\n piArgs,\n `${OLLAMA_PREFIX}${unqualified.includes(':') ? unqualified : `${unqualified}${CLOUD_SUFFIX}`}`,\n );\n }\n}\n\n/**\n * Answers `--help` and `--version` without reading the environment.\n *\n * The caller only looks at `help` and `version` for these, and never launches,\n * so the options carry defaults rather than a resolved matrix. This exists so a\n * stale export cannot break the one command that explains how to fix it.\n */\nfunction parseInformationalArgs(args: string[], currentDirectory: string): ParsedHarnessArgs | undefined {\n const help = args.some((arg) => arg === HELP_OPTION || arg === HELP_SHORT_OPTION);\n const version = args.some((arg) => arg === VERSION_OPTION || arg === VERSION_SHORT_OPTION);\n if (!help && !version) return undefined;\n return {\n options: {\n cwd: currentDirectory,\n profile: undefined,\n domains: [],\n majorMode: DEFAULT_MAJOR_MODE,\n explain: false,\n emitMcp: undefined,\n pluginDirectories: [],\n additionalDirectories: [],\n preset: DEFAULT_PRESET,\n outputFormat: NATIVE_FORMAT,\n mute: false,\n automation: false,\n autoStop: false,\n allowProtectedWrites: false,\n hooks: true,\n mcp: true,\n agents: true,\n piArgs: [],\n },\n help,\n version,\n };\n}\n\nexport function parseHarnessArgs(\n args: string[],\n environment: NodeJS.ProcessEnv = process.env,\n currentDirectory = process.cwd(),\n defaultMajorMode: string = DEFAULT_MAJOR_MODE,\n defaultDomains?: readonly string[],\n): ParsedHarnessArgs {\n const informational = parseInformationalArgs(args, currentDirectory);\n if (informational) return informational;\n\n let profile = resolveInheritedProfile(environment);\n let profileProvided = false;\n let majorMode = resolveInheritedMajorMode(environment, defaultMajorMode);\n let majorModeProvided = false;\n const domains: string[] = [];\n // Directory options are collected verbatim and resolved once after the loop,\n // so a relative path means the same thing regardless of where --cwd appears\n // in the argument list.\n const pluginDirectoryValues: string[] = [];\n const additionalDirectoryValues: string[] = [];\n const piArgs: string[] = [];\n let cwd = currentDirectory;\n let preset = parsePreset(environment[DOOMPI_PRESET_ENV] ?? DEFAULT_PRESET);\n let outputFormat: HarnessOutputFormat = NATIVE_FORMAT;\n let domainsDisabled = false;\n let mute = false;\n let automation = false;\n let autoStop = false;\n let allowProtectedWrites = false;\n let hooks = true;\n let mcp = true;\n let agents = true;\n let help = false;\n let version = false;\n let explain = false;\n let emitMcp: string | undefined;\n\n for (let index = 0; index < args.length; index += 1) {\n const arg = args[index]!;\n\n if (matchesOption(arg, REMOVED_TARGET_OPTION)) {\n throw new Error(`${REMOVED_TARGET_OPTION} was replaced by ${MAJOR_MODE_OPTION}`);\n }\n if (matchesOption(arg, REMOVED_LAYER_OPTION)) {\n throw new Error(`${REMOVED_LAYER_OPTION} was replaced by ${MAJOR_MODE_OPTION}`);\n }\n if (matchesOption(arg, REMOVED_LAYERS_OPTION)) {\n throw new Error(`${REMOVED_LAYERS_OPTION} was removed; select one major mode with ${MAJOR_MODE_OPTION}`);\n }\n if (matchesOption(arg, PROFILES_OPTION)) {\n throw new Error(`${PROFILES_OPTION} was replaced by ${DOMAINS_OPTION}`);\n }\n\n const majorModeMatch = readOption(args, index, MAJOR_MODE_OPTION);\n if (majorModeMatch) {\n if (majorModeProvided) throw new Error(`${MAJOR_MODE_OPTION} can only be provided once`);\n majorMode = parseMajorMode(majorModeMatch.value, MAJOR_MODE_OPTION);\n majorModeProvided = true;\n index = majorModeMatch.nextIndex;\n continue;\n }\n\n const profileMatch = readOption(args, index, PROFILE_OPTION);\n if (profileMatch) {\n if (profileProvided) throw new Error(`${PROFILE_OPTION} can only be provided once`);\n profile = parseProfileValue(profileMatch.value, PROFILE_OPTION);\n profileProvided = true;\n index = profileMatch.nextIndex;\n continue;\n }\n\n const domainMatch = readOption(args, index, DOMAINS_OPTION) ?? readOption(args, index, DOMAIN_OPTION);\n if (domainMatch) {\n domains.push(...parseCsv(domainMatch.value));\n index = domainMatch.nextIndex;\n continue;\n }\n\n const emitMcpMatch = readOption(args, index, EMIT_MCP_OPTION);\n if (emitMcpMatch) {\n emitMcp = path.resolve(currentDirectory, emitMcpMatch.value);\n index = emitMcpMatch.nextIndex;\n continue;\n }\n\n const pluginDirectoryMatch = readOption(args, index, PLUGIN_DIRECTORY_OPTION);\n if (pluginDirectoryMatch) {\n pluginDirectoryValues.push(pluginDirectoryMatch.value);\n index = pluginDirectoryMatch.nextIndex;\n continue;\n }\n\n const addDirectoryMatch = readOption(args, index, ADD_DIRECTORY_OPTION);\n if (addDirectoryMatch) {\n additionalDirectoryValues.push(addDirectoryMatch.value);\n index = addDirectoryMatch.nextIndex;\n continue;\n }\n\n const presetMatch = readOption(args, index, PRESET_OPTION);\n if (presetMatch) {\n preset = parsePreset(presetMatch.value);\n index = presetMatch.nextIndex;\n continue;\n }\n\n const cwdMatch = readOption(args, index, CWD_OPTION) ?? readOption(args, index, CD_OPTION);\n if (cwdMatch) {\n cwd = path.resolve(currentDirectory, cwdMatch.value);\n index = cwdMatch.nextIndex;\n continue;\n }\n\n const effortMatch = readOption(args, index, EFFORT_OPTION);\n if (effortMatch) {\n if (effortMatch.inline) piArgs.push(`${THINKING_OPTION}=${effortMatch.value}`);\n else piArgs.push(THINKING_OPTION, effortMatch.value);\n index = effortMatch.nextIndex;\n continue;\n }\n\n const outputFormatMatch = readOption(args, index, OUTPUT_FORMAT_OPTION);\n if (outputFormatMatch) {\n const requested = outputFormatMatch.value;\n if (requested === VIBE_LINT_FORMAT) {\n outputFormat = VIBE_LINT_FORMAT;\n } else {\n const mode = requested === STREAM_JSON_FORMAT ? JSON_FORMAT : requested;\n if (outputFormatMatch.inline) piArgs.push(`${MODE_OPTION}=${mode}`);\n else piArgs.push(MODE_OPTION, mode);\n }\n index = outputFormatMatch.nextIndex;\n continue;\n }\n\n if (arg === NO_DOMAINS_OPTION) domainsDisabled = true;\n else if (arg === EXPLAIN_OPTION) explain = true;\n else if (arg === AUTOMATION_OPTION) automation = true;\n else if (arg === MUTE_OPTION) mute = true;\n else if (arg === AUTO_STOP_OPTION) autoStop = true;\n else if (arg === ALLOW_PROTECTED_WRITES_OPTION) allowProtectedWrites = true;\n else if (arg === HOOKS_OPTION) hooks = true;\n else if (arg === MCP_OPTION) mcp = true;\n else if (arg === AGENTS_OPTION) agents = true;\n else if (arg === NO_HOOKS_OPTION) hooks = false;\n else if (arg === NO_MCP_OPTION) mcp = false;\n else if (arg === NO_AGENTS_OPTION) agents = false;\n else if (arg === HELP_OPTION || arg === HELP_SHORT_OPTION) help = true;\n else if (arg === VERSION_OPTION || arg === VERSION_SHORT_OPTION) version = true;\n // Accepted for Claude Code compatibility and deliberately not forwarded.\n else if (arg !== VERBOSE_OPTION && arg !== DANGEROUSLY_SKIP_PERMISSIONS_OPTION) piArgs.push(arg);\n }\n\n if (domainsDisabled && domains.length > 0) {\n throw new Error(`${NO_DOMAINS_OPTION} cannot be combined with ${DOMAINS_OPTION}`);\n }\n if (!domainsDisabled && domains.length === 0 && pluginDirectoryValues.length === 0) {\n domains.push(...defaultDomainsForMajorMode(majorMode, environment, defaultDomains));\n }\n if (automation) {\n if (!hasOption(piArgs, PRINT_OPTION, PRINT_SHORT_OPTION)) piArgs.unshift(PRINT_OPTION);\n if (!hasOption(piArgs, MODE_OPTION)) piArgs.unshift(MODE_OPTION, JSON_FORMAT);\n if (!hasOption(piArgs, APPROVE_OPTION, APPROVE_SHORT_OPTION)) piArgs.unshift(APPROVE_OPTION);\n }\n if (\n autoStop &&\n (automation ||\n outputFormat === VIBE_LINT_FORMAT ||\n hasOption(piArgs, PRINT_OPTION, PRINT_SHORT_OPTION, MODE_OPTION))\n ) {\n throw new Error(`${AUTO_STOP_OPTION} only supports interactive Pi mode`);\n }\n normalizeProviderArgs(preset, piArgs, environment);\n\n return {\n options: {\n cwd,\n profile,\n domains,\n majorMode,\n explain,\n emitMcp,\n pluginDirectories: pluginDirectoryValues.map((value) => path.resolve(currentDirectory, value)),\n additionalDirectories: [\n ...new Set([\n ...resolveAdditionalDirectories(environment, currentDirectory),\n ...additionalDirectoryValues.map((value) => path.resolve(currentDirectory, value)),\n ]),\n ],\n preset,\n outputFormat,\n mute,\n automation,\n autoStop,\n allowProtectedWrites,\n hooks,\n mcp,\n agents,\n piArgs,\n },\n help,\n version,\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(`../cli/compatibilityOptions.cjs`),n=require(`../logSinkTelemetry.cjs`);require(`../config/index.cjs`);const r=require(`../utils/repository.cjs`);require(`../utils/index.cjs`);const i=require(`../services/compatibilityContext.cjs`),a=require(`../services/compatibility/index.cjs`);require(`../services/index.cjs`);let o=require(`node:path`);o=e.__toESM(o,1);let s=require(`@agimon-ai/doompi-config/majorModes`),c=require(`@agimon-ai/doompi-config/domains`);var l=class{name=`compat`;telemetry;constructor(e=n.createHarnessTelemetry()){this.telemetry=e}matches(e){return e[0]===this.name}async execute(e,l=process.env,u=process.cwd()){let d=t.parseCompatibilityProvider(e[1]),f=l.DOOMPI_ROOT,p=f?o.default.resolve(f):r.findRepositoryRoot(u),m=t.parseCompatibilityArgs(e.slice(2),l,u,(0,s.loadMajorModesConfig)(p).defaultMajorMode,(0,c.loadDomains)(p).defaultDomains),h=Date.now();return this.telemetry.runInSpan(`doom_pi.compatibility`,{"harness.provider":d,"harness.mode":`compatibility`},async()=>{let e=await i.buildCompatibilityContext({repoRoot:p,provider:d,...m.options});try{let t=await a.launchCompatibility(e);return this.telemetry.recordEvent(n.HARNESS_EVENT.launchCompleted,{"harness.provider":d,"harness.exit_code":t,"harness.duration_ms":Date.now()-h}),t}catch(e){throw await this.telemetry.recordError(n.HARNESS_EVENT.compatibilityLaunchFailed,e,{"harness.provider":d,"harness.duration_ms":Date.now()-h}),e}finally{await e.cleanup()}})}};exports.CompatibilityCommand=l;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../_virtual/_rolldown/runtime.cjs`),t=require(`../adapters/repository/repository.cjs`);require(`../utils/index.cjs`);const n=require(`./cli/compatibilityOptions.cjs`),r=require(`../adapters/telemetry/logSinkTelemetry.cjs`);require(`../services/config/index.cjs`);const i=require(`../adapters/compatibility/index.cjs`),a=require(`../adapters/compatibilityContext.cjs`);require(`../services/index.cjs`);let o=require(`node:path`);o=e.__toESM(o,1);let s=require(`@agimon-ai/doompi-config/majorModes`),c=require(`@agimon-ai/doompi-config/domains`);var l=class{name=`compat`;telemetry;constructor(e=r.createHarnessTelemetry()){this.telemetry=e}matches(e){return e[0]===this.name}async execute(e,l=process.env,u=process.cwd()){let d=n.parseCompatibilityProvider(e[1]),f=l.DOOMPI_ROOT,p=f?o.default.resolve(f):t.findRepositoryRoot(u),m=n.parseCompatibilityArgs(e.slice(2),l,u,(0,s.loadMajorModesConfig)(p).defaultMajorMode,(0,c.loadDomains)(p).defaultDomains),h=Date.now();return this.telemetry.runInSpan(`doom_pi.compatibility`,{"harness.provider":d,"harness.mode":`compatibility`},async()=>{let e=await a.buildCompatibilityContext({repoRoot:p,provider:d,...m.options});try{let t=await i.launchCompatibility(e);return this.telemetry.recordEvent(r.HARNESS_EVENT.launchCompleted,{"harness.provider":d,"harness.exit_code":t,"harness.duration_ms":Date.now()-h}),t}catch(e){throw await this.telemetry.recordError(r.HARNESS_EVENT.compatibilityLaunchFailed,e,{"harness.provider":d,"harness.duration_ms":Date.now()-h}),e}finally{await e.cleanup()}})}};exports.CompatibilityCommand=l;
2
2
  //# sourceMappingURL=compatibilityCommand.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"compatibilityCommand.cjs","names":["createHarnessTelemetry","parseCompatibilityProvider","path","findRepositoryRoot","parseCompatibilityArgs","buildCompatibilityContext","launchCompatibility","HARNESS_EVENT"],"sources":["../../src/commands/compatibilityCommand.ts"],"sourcesContent":["import path from 'node:path';\nimport { parseCompatibilityArgs, parseCompatibilityProvider } from '../cli/compatibilityOptions.ts';\nimport { loadDomains, loadMajorModesConfig } from '../config/index.ts';\nimport { createHarnessTelemetry, HARNESS_EVENT, type HarnessTelemetry } from '../logSinkTelemetry.ts';\nimport { buildCompatibilityContext, launchCompatibility } from '../services/index.ts';\nimport { findRepositoryRoot } from '../utils/index.ts';\n\nconst COMPAT_COMMAND = 'compat';\nconst HARNESS_ROOT_ENV = 'DOOMPI_ROOT';\n\n/** Launches a non-Pi frontend with the doom-pi matrix resolved for that run. */\nexport class CompatibilityCommand {\n readonly name = COMPAT_COMMAND;\n private readonly telemetry: HarnessTelemetry;\n\n // Not a constructor parameter property: the launcher scripts run this file\n // straight from source under Node's strip-only TypeScript mode, which\n // rejects them.\n constructor(telemetry: HarnessTelemetry = createHarnessTelemetry()) {\n this.telemetry = telemetry;\n }\n\n matches(args: string[]): boolean {\n return args[0] === this.name;\n }\n\n async execute(\n args: string[],\n environment: NodeJS.ProcessEnv = process.env,\n currentDirectory = process.cwd(),\n ): Promise<number> {\n const provider = parseCompatibilityProvider(args[1]);\n const inheritedRoot = environment[HARNESS_ROOT_ENV];\n const repoRoot = inheritedRoot ? path.resolve(inheritedRoot) : findRepositoryRoot(currentDirectory);\n const parsed = parseCompatibilityArgs(\n args.slice(2),\n environment,\n currentDirectory,\n loadMajorModesConfig(repoRoot).defaultMajorMode,\n loadDomains(repoRoot).defaultDomains,\n );\n const startedAt = Date.now();\n\n // Compatibility launches shell out to a third-party CLI and to state-sync\n // scripts, so most of what can go wrong here is invisible to Pi entirely.\n return this.telemetry.runInSpan(\n 'doom_pi.compatibility',\n { 'harness.provider': provider, 'harness.mode': 'compatibility' },\n async () => {\n const context = await buildCompatibilityContext({ repoRoot, provider, ...parsed.options });\n try {\n const exitCode = await launchCompatibility(context);\n void this.telemetry.recordEvent(HARNESS_EVENT.launchCompleted, {\n 'harness.provider': provider,\n 'harness.exit_code': exitCode,\n 'harness.duration_ms': Date.now() - startedAt,\n });\n return exitCode;\n } catch (error) {\n await this.telemetry.recordError(HARNESS_EVENT.compatibilityLaunchFailed, error, {\n 'harness.provider': provider,\n 'harness.duration_ms': Date.now() - startedAt,\n });\n throw error;\n } finally {\n await context.cleanup();\n }\n },\n );\n }\n}\n"],"mappings":"2kBAWA,IAAa,EAAb,KAAkC,CAChC,KAAgB,SAChB,UAKA,YAAY,EAA8BA,EAAAA,wBAAwB,CAAE,CAClE,KAAK,UAAY,EAGnB,QAAQ,EAAyB,CAC/B,OAAO,EAAK,KAAO,KAAK,KAG1B,MAAM,QACJ,EACA,EAAiC,QAAQ,IACzC,EAAmB,QAAQ,KAAK,CACf,CACjB,IAAM,EAAWC,EAAAA,2BAA2B,EAAK,GAAG,CAC9C,EAAgB,EAAY,YAC5B,EAAW,EAAgBC,EAAAA,QAAK,QAAQ,EAAc,CAAGC,EAAAA,mBAAmB,EAAiB,CAC7F,EAASC,EAAAA,uBACb,EAAK,MAAM,EAAE,CACb,EACA,GAAA,EAAA,EAAA,sBACqB,EAAS,CAAC,kBAAA,EAAA,EAAA,aACnB,EAAS,CAAC,eACvB,CACK,EAAY,KAAK,KAAK,CAI5B,OAAO,KAAK,UAAU,UACpB,wBACA,CAAE,mBAAoB,EAAU,eAAgB,gBAAiB,CACjE,SAAY,CACV,IAAM,EAAU,MAAMC,EAAAA,0BAA0B,CAAE,WAAU,WAAU,GAAG,EAAO,QAAS,CAAC,CAC1F,GAAI,CACF,IAAM,EAAW,MAAMC,EAAAA,oBAAoB,EAAQ,CAMnD,OALK,KAAK,UAAU,YAAYC,EAAAA,cAAc,gBAAiB,CAC7D,mBAAoB,EACpB,oBAAqB,EACrB,sBAAuB,KAAK,KAAK,CAAG,EACrC,CAAC,CACK,QACA,EAAO,CAKd,MAJA,MAAM,KAAK,UAAU,YAAYA,EAAAA,cAAc,0BAA2B,EAAO,CAC/E,mBAAoB,EACpB,sBAAuB,KAAK,KAAK,CAAG,EACrC,CAAC,CACI,SACE,CACR,MAAM,EAAQ,SAAS,GAG5B"}
1
+ {"version":3,"file":"compatibilityCommand.cjs","names":["createHarnessTelemetry","parseCompatibilityProvider","path","findRepositoryRoot","parseCompatibilityArgs","buildCompatibilityContext","launchCompatibility","HARNESS_EVENT"],"sources":["../../src/commands/compatibilityCommand.ts"],"sourcesContent":["import path from 'node:path';\nimport {\n createHarnessTelemetry,\n HARNESS_EVENT,\n type HarnessTelemetry,\n} from '../adapters/telemetry/logSinkTelemetry.ts';\nimport { loadDomains, loadMajorModesConfig } from '../services/config/index.ts';\nimport { buildCompatibilityContext, launchCompatibility } from '../services/index.ts';\nimport { findRepositoryRoot } from '../utils/index.ts';\nimport { parseCompatibilityArgs, parseCompatibilityProvider } from './cli/compatibilityOptions.ts';\n\nconst COMPAT_COMMAND = 'compat';\nconst HARNESS_ROOT_ENV = 'DOOMPI_ROOT';\n\n/** Launches a non-Pi frontend with the doom-pi matrix resolved for that run. */\nexport class CompatibilityCommand {\n readonly name = COMPAT_COMMAND;\n private readonly telemetry: HarnessTelemetry;\n\n // Not a constructor parameter property: the launcher scripts run this file\n // straight from source under Node's strip-only TypeScript mode, which\n // rejects them.\n constructor(telemetry: HarnessTelemetry = createHarnessTelemetry()) {\n this.telemetry = telemetry;\n }\n\n matches(args: string[]): boolean {\n return args[0] === this.name;\n }\n\n async execute(\n args: string[],\n environment: NodeJS.ProcessEnv = process.env,\n currentDirectory = process.cwd(),\n ): Promise<number> {\n const provider = parseCompatibilityProvider(args[1]);\n const inheritedRoot = environment[HARNESS_ROOT_ENV];\n const repoRoot = inheritedRoot ? path.resolve(inheritedRoot) : findRepositoryRoot(currentDirectory);\n const parsed = parseCompatibilityArgs(\n args.slice(2),\n environment,\n currentDirectory,\n loadMajorModesConfig(repoRoot).defaultMajorMode,\n loadDomains(repoRoot).defaultDomains,\n );\n const startedAt = Date.now();\n\n // Compatibility launches shell out to a third-party CLI and to state-sync\n // scripts, so most of what can go wrong here is invisible to Pi entirely.\n return this.telemetry.runInSpan(\n 'doom_pi.compatibility',\n { 'harness.provider': provider, 'harness.mode': 'compatibility' },\n async () => {\n const context = await buildCompatibilityContext({ repoRoot, provider, ...parsed.options });\n try {\n const exitCode = await launchCompatibility(context);\n void this.telemetry.recordEvent(HARNESS_EVENT.launchCompleted, {\n 'harness.provider': provider,\n 'harness.exit_code': exitCode,\n 'harness.duration_ms': Date.now() - startedAt,\n });\n return exitCode;\n } catch (error) {\n await this.telemetry.recordError(HARNESS_EVENT.compatibilityLaunchFailed, error, {\n 'harness.provider': provider,\n 'harness.duration_ms': Date.now() - startedAt,\n });\n throw error;\n } finally {\n await context.cleanup();\n }\n },\n );\n }\n}\n"],"mappings":"onBAeA,IAAa,EAAb,KAAkC,CAChC,KAAgB,SAChB,UAKA,YAAY,EAA8BA,EAAAA,wBAAwB,CAAE,CAClE,KAAK,UAAY,EAGnB,QAAQ,EAAyB,CAC/B,OAAO,EAAK,KAAO,KAAK,KAG1B,MAAM,QACJ,EACA,EAAiC,QAAQ,IACzC,EAAmB,QAAQ,KAAK,CACf,CACjB,IAAM,EAAWC,EAAAA,2BAA2B,EAAK,GAAG,CAC9C,EAAgB,EAAY,YAC5B,EAAW,EAAgBC,EAAAA,QAAK,QAAQ,EAAc,CAAGC,EAAAA,mBAAmB,EAAiB,CAC7F,EAASC,EAAAA,uBACb,EAAK,MAAM,EAAE,CACb,EACA,GAAA,EAAA,EAAA,sBACqB,EAAS,CAAC,kBAAA,EAAA,EAAA,aACnB,EAAS,CAAC,eACvB,CACK,EAAY,KAAK,KAAK,CAI5B,OAAO,KAAK,UAAU,UACpB,wBACA,CAAE,mBAAoB,EAAU,eAAgB,gBAAiB,CACjE,SAAY,CACV,IAAM,EAAU,MAAMC,EAAAA,0BAA0B,CAAE,WAAU,WAAU,GAAG,EAAO,QAAS,CAAC,CAC1F,GAAI,CACF,IAAM,EAAW,MAAMC,EAAAA,oBAAoB,EAAQ,CAMnD,OALK,KAAK,UAAU,YAAYC,EAAAA,cAAc,gBAAiB,CAC7D,mBAAoB,EACpB,oBAAqB,EACrB,sBAAuB,KAAK,KAAK,CAAG,EACrC,CAAC,CACK,QACA,EAAO,CAKd,MAJA,MAAM,KAAK,UAAU,YAAYA,EAAAA,cAAc,0BAA2B,EAAO,CAC/E,mBAAoB,EACpB,sBAAuB,KAAK,KAAK,CAAG,EACrC,CAAC,CACI,SACE,CACR,MAAM,EAAQ,SAAS,GAG5B"}
@@ -1,4 +1,4 @@
1
- import { HarnessTelemetry } from "../logSinkTelemetry.cjs";
1
+ import { HarnessTelemetry } from "../adapters/telemetry/logSinkTelemetry.cjs";
2
2
 
3
3
  //#region src/commands/compatibilityCommand.d.ts
4
4
  /** Launches a non-Pi frontend with the doom-pi matrix resolved for that run. */
@@ -1 +1 @@
1
- {"version":3,"file":"compatibilityCommand.d.cts","names":[],"sources":["../../src/commands/compatibilityCommand.ts"],"mappings":";;;;cAWa,oBAAA;EAAA,SACF,IAAA;EAAA,iBACQ,SAAA;cAKL,SAAA,GAAW,gBAAA;EAIvB,OAAA,CAAQ,IAAA;EAIF,OAAA,CACJ,IAAA,YACA,WAAA,GAAa,MAAA,CAAO,UAAA,EACpB,gBAAA,YACC,OAAA;AAAA"}
1
+ {"version":3,"file":"compatibilityCommand.d.cts","names":[],"sources":["../../src/commands/compatibilityCommand.ts"],"mappings":";;;;cAea,oBAAA;EAAA,SACF,IAAA;EAAA,iBACQ,SAAA;cAKL,SAAA,GAAW,gBAAA;EAIvB,OAAA,CAAQ,IAAA;EAIF,OAAA,CACJ,IAAA,YACA,WAAA,GAAa,MAAA,CAAO,UAAA,EACpB,gBAAA,YACC,OAAA;AAAA"}
@@ -1,4 +1,4 @@
1
- import { HarnessTelemetry } from "../logSinkTelemetry.mjs";
1
+ import { HarnessTelemetry } from "../adapters/telemetry/logSinkTelemetry.mjs";
2
2
 
3
3
  //#region src/commands/compatibilityCommand.d.ts
4
4
  /** Launches a non-Pi frontend with the doom-pi matrix resolved for that run. */
@@ -1 +1 @@
1
- {"version":3,"file":"compatibilityCommand.d.mts","names":[],"sources":["../../src/commands/compatibilityCommand.ts"],"mappings":";;;;cAWa,oBAAA;EAAA,SACF,IAAA;EAAA,iBACQ,SAAA;cAKL,SAAA,GAAW,gBAAA;EAIvB,OAAA,CAAQ,IAAA;EAIF,OAAA,CACJ,IAAA,YACA,WAAA,GAAa,MAAA,CAAO,UAAA,EACpB,gBAAA,YACC,OAAA;AAAA"}
1
+ {"version":3,"file":"compatibilityCommand.d.mts","names":[],"sources":["../../src/commands/compatibilityCommand.ts"],"mappings":";;;;cAea,oBAAA;EAAA,SACF,IAAA;EAAA,iBACQ,SAAA;cAKL,SAAA,GAAW,gBAAA;EAIvB,OAAA,CAAQ,IAAA;EAIF,OAAA,CACJ,IAAA,YACA,WAAA,GAAa,MAAA,CAAO,UAAA,EACpB,gBAAA,YACC,OAAA;AAAA"}
@@ -1,2 +1,2 @@
1
- import{parseCompatibilityArgs as e,parseCompatibilityProvider as t}from"../cli/compatibilityOptions.mjs";import{HARNESS_EVENT as n,createHarnessTelemetry as r}from"../logSinkTelemetry.mjs";import{loadDomains as i,loadMajorModesConfig as a}from"../config/index.mjs";import{findRepositoryRoot as o}from"../utils/repository.mjs";import"../utils/index.mjs";import{buildCompatibilityContext as s}from"../services/compatibilityContext.mjs";import{launchCompatibility as c}from"../services/compatibility/index.mjs";import"../services/index.mjs";import l from"node:path";var u=class{name=`compat`;telemetry;constructor(e=r()){this.telemetry=e}matches(e){return e[0]===this.name}async execute(r,u=process.env,d=process.cwd()){let f=t(r[1]),p=u.DOOMPI_ROOT,m=p?l.resolve(p):o(d),h=e(r.slice(2),u,d,a(m).defaultMajorMode,i(m).defaultDomains),g=Date.now();return this.telemetry.runInSpan(`doom_pi.compatibility`,{"harness.provider":f,"harness.mode":`compatibility`},async()=>{let e=await s({repoRoot:m,provider:f,...h.options});try{let t=await c(e);return this.telemetry.recordEvent(n.launchCompleted,{"harness.provider":f,"harness.exit_code":t,"harness.duration_ms":Date.now()-g}),t}catch(e){throw await this.telemetry.recordError(n.compatibilityLaunchFailed,e,{"harness.provider":f,"harness.duration_ms":Date.now()-g}),e}finally{await e.cleanup()}})}};export{u as CompatibilityCommand};
1
+ import{findRepositoryRoot as e}from"../adapters/repository/repository.mjs";import"../utils/index.mjs";import{parseCompatibilityArgs as t,parseCompatibilityProvider as n}from"./cli/compatibilityOptions.mjs";import{HARNESS_EVENT as r,createHarnessTelemetry as i}from"../adapters/telemetry/logSinkTelemetry.mjs";import{loadDomains as a,loadMajorModesConfig as o}from"../services/config/index.mjs";import{launchCompatibility as s}from"../adapters/compatibility/index.mjs";import{buildCompatibilityContext as c}from"../adapters/compatibilityContext.mjs";import"../services/index.mjs";import l from"node:path";var u=class{name=`compat`;telemetry;constructor(e=i()){this.telemetry=e}matches(e){return e[0]===this.name}async execute(i,u=process.env,d=process.cwd()){let f=n(i[1]),p=u.DOOMPI_ROOT,m=p?l.resolve(p):e(d),h=t(i.slice(2),u,d,o(m).defaultMajorMode,a(m).defaultDomains),g=Date.now();return this.telemetry.runInSpan(`doom_pi.compatibility`,{"harness.provider":f,"harness.mode":`compatibility`},async()=>{let e=await c({repoRoot:m,provider:f,...h.options});try{let t=await s(e);return this.telemetry.recordEvent(r.launchCompleted,{"harness.provider":f,"harness.exit_code":t,"harness.duration_ms":Date.now()-g}),t}catch(e){throw await this.telemetry.recordError(r.compatibilityLaunchFailed,e,{"harness.provider":f,"harness.duration_ms":Date.now()-g}),e}finally{await e.cleanup()}})}};export{u as CompatibilityCommand};
2
2
  //# sourceMappingURL=compatibilityCommand.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"compatibilityCommand.mjs","names":[],"sources":["../../src/commands/compatibilityCommand.ts"],"sourcesContent":["import path from 'node:path';\nimport { parseCompatibilityArgs, parseCompatibilityProvider } from '../cli/compatibilityOptions.ts';\nimport { loadDomains, loadMajorModesConfig } from '../config/index.ts';\nimport { createHarnessTelemetry, HARNESS_EVENT, type HarnessTelemetry } from '../logSinkTelemetry.ts';\nimport { buildCompatibilityContext, launchCompatibility } from '../services/index.ts';\nimport { findRepositoryRoot } from '../utils/index.ts';\n\nconst COMPAT_COMMAND = 'compat';\nconst HARNESS_ROOT_ENV = 'DOOMPI_ROOT';\n\n/** Launches a non-Pi frontend with the doom-pi matrix resolved for that run. */\nexport class CompatibilityCommand {\n readonly name = COMPAT_COMMAND;\n private readonly telemetry: HarnessTelemetry;\n\n // Not a constructor parameter property: the launcher scripts run this file\n // straight from source under Node's strip-only TypeScript mode, which\n // rejects them.\n constructor(telemetry: HarnessTelemetry = createHarnessTelemetry()) {\n this.telemetry = telemetry;\n }\n\n matches(args: string[]): boolean {\n return args[0] === this.name;\n }\n\n async execute(\n args: string[],\n environment: NodeJS.ProcessEnv = process.env,\n currentDirectory = process.cwd(),\n ): Promise<number> {\n const provider = parseCompatibilityProvider(args[1]);\n const inheritedRoot = environment[HARNESS_ROOT_ENV];\n const repoRoot = inheritedRoot ? path.resolve(inheritedRoot) : findRepositoryRoot(currentDirectory);\n const parsed = parseCompatibilityArgs(\n args.slice(2),\n environment,\n currentDirectory,\n loadMajorModesConfig(repoRoot).defaultMajorMode,\n loadDomains(repoRoot).defaultDomains,\n );\n const startedAt = Date.now();\n\n // Compatibility launches shell out to a third-party CLI and to state-sync\n // scripts, so most of what can go wrong here is invisible to Pi entirely.\n return this.telemetry.runInSpan(\n 'doom_pi.compatibility',\n { 'harness.provider': provider, 'harness.mode': 'compatibility' },\n async () => {\n const context = await buildCompatibilityContext({ repoRoot, provider, ...parsed.options });\n try {\n const exitCode = await launchCompatibility(context);\n void this.telemetry.recordEvent(HARNESS_EVENT.launchCompleted, {\n 'harness.provider': provider,\n 'harness.exit_code': exitCode,\n 'harness.duration_ms': Date.now() - startedAt,\n });\n return exitCode;\n } catch (error) {\n await this.telemetry.recordError(HARNESS_EVENT.compatibilityLaunchFailed, error, {\n 'harness.provider': provider,\n 'harness.duration_ms': Date.now() - startedAt,\n });\n throw error;\n } finally {\n await context.cleanup();\n }\n },\n );\n }\n}\n"],"mappings":"mjBAWA,IAAa,EAAb,KAAkC,CAChC,KAAgB,SAChB,UAKA,YAAY,EAA8B,GAAwB,CAAE,CAClE,KAAK,UAAY,EAGnB,QAAQ,EAAyB,CAC/B,OAAO,EAAK,KAAO,KAAK,KAG1B,MAAM,QACJ,EACA,EAAiC,QAAQ,IACzC,EAAmB,QAAQ,KAAK,CACf,CACjB,IAAM,EAAW,EAA2B,EAAK,GAAG,CAC9C,EAAgB,EAAY,YAC5B,EAAW,EAAgB,EAAK,QAAQ,EAAc,CAAG,EAAmB,EAAiB,CAC7F,EAAS,EACb,EAAK,MAAM,EAAE,CACb,EACA,EACA,EAAqB,EAAS,CAAC,iBAC/B,EAAY,EAAS,CAAC,eACvB,CACK,EAAY,KAAK,KAAK,CAI5B,OAAO,KAAK,UAAU,UACpB,wBACA,CAAE,mBAAoB,EAAU,eAAgB,gBAAiB,CACjE,SAAY,CACV,IAAM,EAAU,MAAM,EAA0B,CAAE,WAAU,WAAU,GAAG,EAAO,QAAS,CAAC,CAC1F,GAAI,CACF,IAAM,EAAW,MAAM,EAAoB,EAAQ,CAMnD,OALK,KAAK,UAAU,YAAY,EAAc,gBAAiB,CAC7D,mBAAoB,EACpB,oBAAqB,EACrB,sBAAuB,KAAK,KAAK,CAAG,EACrC,CAAC,CACK,QACA,EAAO,CAKd,MAJA,MAAM,KAAK,UAAU,YAAY,EAAc,0BAA2B,EAAO,CAC/E,mBAAoB,EACpB,sBAAuB,KAAK,KAAK,CAAG,EACrC,CAAC,CACI,SACE,CACR,MAAM,EAAQ,SAAS,GAG5B"}
1
+ {"version":3,"file":"compatibilityCommand.mjs","names":[],"sources":["../../src/commands/compatibilityCommand.ts"],"sourcesContent":["import path from 'node:path';\nimport {\n createHarnessTelemetry,\n HARNESS_EVENT,\n type HarnessTelemetry,\n} from '../adapters/telemetry/logSinkTelemetry.ts';\nimport { loadDomains, loadMajorModesConfig } from '../services/config/index.ts';\nimport { buildCompatibilityContext, launchCompatibility } from '../services/index.ts';\nimport { findRepositoryRoot } from '../utils/index.ts';\nimport { parseCompatibilityArgs, parseCompatibilityProvider } from './cli/compatibilityOptions.ts';\n\nconst COMPAT_COMMAND = 'compat';\nconst HARNESS_ROOT_ENV = 'DOOMPI_ROOT';\n\n/** Launches a non-Pi frontend with the doom-pi matrix resolved for that run. */\nexport class CompatibilityCommand {\n readonly name = COMPAT_COMMAND;\n private readonly telemetry: HarnessTelemetry;\n\n // Not a constructor parameter property: the launcher scripts run this file\n // straight from source under Node's strip-only TypeScript mode, which\n // rejects them.\n constructor(telemetry: HarnessTelemetry = createHarnessTelemetry()) {\n this.telemetry = telemetry;\n }\n\n matches(args: string[]): boolean {\n return args[0] === this.name;\n }\n\n async execute(\n args: string[],\n environment: NodeJS.ProcessEnv = process.env,\n currentDirectory = process.cwd(),\n ): Promise<number> {\n const provider = parseCompatibilityProvider(args[1]);\n const inheritedRoot = environment[HARNESS_ROOT_ENV];\n const repoRoot = inheritedRoot ? path.resolve(inheritedRoot) : findRepositoryRoot(currentDirectory);\n const parsed = parseCompatibilityArgs(\n args.slice(2),\n environment,\n currentDirectory,\n loadMajorModesConfig(repoRoot).defaultMajorMode,\n loadDomains(repoRoot).defaultDomains,\n );\n const startedAt = Date.now();\n\n // Compatibility launches shell out to a third-party CLI and to state-sync\n // scripts, so most of what can go wrong here is invisible to Pi entirely.\n return this.telemetry.runInSpan(\n 'doom_pi.compatibility',\n { 'harness.provider': provider, 'harness.mode': 'compatibility' },\n async () => {\n const context = await buildCompatibilityContext({ repoRoot, provider, ...parsed.options });\n try {\n const exitCode = await launchCompatibility(context);\n void this.telemetry.recordEvent(HARNESS_EVENT.launchCompleted, {\n 'harness.provider': provider,\n 'harness.exit_code': exitCode,\n 'harness.duration_ms': Date.now() - startedAt,\n });\n return exitCode;\n } catch (error) {\n await this.telemetry.recordError(HARNESS_EVENT.compatibilityLaunchFailed, error, {\n 'harness.provider': provider,\n 'harness.duration_ms': Date.now() - startedAt,\n });\n throw error;\n } finally {\n await context.cleanup();\n }\n },\n );\n }\n}\n"],"mappings":"4lBAeA,IAAa,EAAb,KAAkC,CAChC,KAAgB,SAChB,UAKA,YAAY,EAA8B,GAAwB,CAAE,CAClE,KAAK,UAAY,EAGnB,QAAQ,EAAyB,CAC/B,OAAO,EAAK,KAAO,KAAK,KAG1B,MAAM,QACJ,EACA,EAAiC,QAAQ,IACzC,EAAmB,QAAQ,KAAK,CACf,CACjB,IAAM,EAAW,EAA2B,EAAK,GAAG,CAC9C,EAAgB,EAAY,YAC5B,EAAW,EAAgB,EAAK,QAAQ,EAAc,CAAG,EAAmB,EAAiB,CAC7F,EAAS,EACb,EAAK,MAAM,EAAE,CACb,EACA,EACA,EAAqB,EAAS,CAAC,iBAC/B,EAAY,EAAS,CAAC,eACvB,CACK,EAAY,KAAK,KAAK,CAI5B,OAAO,KAAK,UAAU,UACpB,wBACA,CAAE,mBAAoB,EAAU,eAAgB,gBAAiB,CACjE,SAAY,CACV,IAAM,EAAU,MAAM,EAA0B,CAAE,WAAU,WAAU,GAAG,EAAO,QAAS,CAAC,CAC1F,GAAI,CACF,IAAM,EAAW,MAAM,EAAoB,EAAQ,CAMnD,OALK,KAAK,UAAU,YAAY,EAAc,gBAAiB,CAC7D,mBAAoB,EACpB,oBAAqB,EACrB,sBAAuB,KAAK,KAAK,CAAG,EACrC,CAAC,CACK,QACA,EAAO,CAKd,MAJA,MAAM,KAAK,UAAU,YAAY,EAAc,0BAA2B,EAAO,CAC/E,mBAAoB,EACpB,sBAAuB,KAAK,KAAK,CAAG,EACrC,CAAC,CACI,SACE,CACR,MAAM,EAAQ,SAAS,GAG5B"}
@@ -1,2 +1,2 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./baseCommand.cjs`),t=require(`../services/mcpFilter.cjs`);require(`../services/index.cjs`);var n=class extends e.BaseCommand{name=`emit-mcp`;matches(e){return!!e.emitMcp}async execute(e){let{options:n,resources:r}=e;if(!n.emitMcp)throw Error(`--emit-mcp requires a target directory`);if(!r.mcpConfigPath)throw Error(`--emit-mcp requires MCP to be enabled`);let i=await t.persistMcpConfig(r.mcpConfigPath,r.temporaryDirectory,n.emitMcp);return process.stdout.write(`${i}\n`),0}};exports.EmitMcpCommand=n;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./baseCommand.cjs`),t=require(`../adapters/mcpFilter.cjs`);require(`../services/index.cjs`);var n=class extends e.BaseCommand{name=`emit-mcp`;matches(e){return!!e.emitMcp}async execute(e){let{options:n,resources:r}=e;if(!n.emitMcp)throw Error(`--emit-mcp requires a target directory`);if(!r.mcpConfigPath)throw Error(`--emit-mcp requires MCP to be enabled`);let i=await t.persistMcpConfig(r.mcpConfigPath,r.temporaryDirectory,n.emitMcp);return process.stdout.write(`${i}\n`),0}};exports.EmitMcpCommand=n;
2
2
  //# sourceMappingURL=emitMcpCommand.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"emitMcpCommand.cjs","names":["BaseCommand","persistMcpConfig"],"sources":["../../src/commands/emitMcpCommand.ts"],"sourcesContent":["import type { HarnessOptions } from '../interfaces/index.ts';\nimport { type HarnessContext, persistMcpConfig } from '../services/index.ts';\nimport { BaseCommand } from './baseCommand.ts';\n\n/**\n * Writes the resolved MCP config to a directory and exits.\n *\n * Lets claude.sh and codex.sh reuse the same domain-scoped MCP surface instead\n * of reimplementing the filter in shell.\n */\nexport class EmitMcpCommand extends BaseCommand {\n readonly name = 'emit-mcp';\n\n matches(options: HarnessOptions): boolean {\n return Boolean(options.emitMcp);\n }\n\n async execute(context: HarnessContext): Promise<number> {\n const { options, resources } = context;\n if (!options.emitMcp) throw new Error('--emit-mcp requires a target directory');\n if (!resources.mcpConfigPath) throw new Error('--emit-mcp requires MCP to be enabled');\n\n const emitted = await persistMcpConfig(resources.mcpConfigPath, resources.temporaryDirectory, options.emitMcp);\n process.stdout.write(`${emitted}\\n`);\n return 0;\n }\n}\n"],"mappings":"gLAUA,IAAa,EAAb,cAAoCA,EAAAA,WAAY,CAC9C,KAAgB,WAEhB,QAAQ,EAAkC,CACxC,MAAO,EAAQ,EAAQ,QAGzB,MAAM,QAAQ,EAA0C,CACtD,GAAM,CAAE,UAAS,aAAc,EAC/B,GAAI,CAAC,EAAQ,QAAS,MAAU,MAAM,yCAAyC,CAC/E,GAAI,CAAC,EAAU,cAAe,MAAU,MAAM,wCAAwC,CAEtF,IAAM,EAAU,MAAMC,EAAAA,iBAAiB,EAAU,cAAe,EAAU,mBAAoB,EAAQ,QAAQ,CAE9G,OADA,QAAQ,OAAO,MAAM,GAAG,EAAQ,IAAI,CAC7B"}
1
+ {"version":3,"file":"emitMcpCommand.cjs","names":["BaseCommand","persistMcpConfig"],"sources":["../../src/commands/emitMcpCommand.ts"],"sourcesContent":["import { type HarnessContext, persistMcpConfig } from '../services/index.ts';\nimport type { HarnessOptions } from '../types/interfaces/index.ts';\nimport { BaseCommand } from './baseCommand.ts';\n\n/**\n * Writes the resolved MCP config to a directory and exits.\n *\n * Lets claude.sh and codex.sh reuse the same domain-scoped MCP surface instead\n * of reimplementing the filter in shell.\n */\nexport class EmitMcpCommand extends BaseCommand {\n readonly name = 'emit-mcp';\n\n matches(options: HarnessOptions): boolean {\n return Boolean(options.emitMcp);\n }\n\n async execute(context: HarnessContext): Promise<number> {\n const { options, resources } = context;\n if (!options.emitMcp) throw new Error('--emit-mcp requires a target directory');\n if (!resources.mcpConfigPath) throw new Error('--emit-mcp requires MCP to be enabled');\n\n const emitted = await persistMcpConfig(resources.mcpConfigPath, resources.temporaryDirectory, options.emitMcp);\n process.stdout.write(`${emitted}\\n`);\n return 0;\n }\n}\n"],"mappings":"gLAUA,IAAa,EAAb,cAAoCA,EAAAA,WAAY,CAC9C,KAAgB,WAEhB,QAAQ,EAAkC,CACxC,MAAO,EAAQ,EAAQ,QAGzB,MAAM,QAAQ,EAA0C,CACtD,GAAM,CAAE,UAAS,aAAc,EAC/B,GAAI,CAAC,EAAQ,QAAS,MAAU,MAAM,yCAAyC,CAC/E,GAAI,CAAC,EAAU,cAAe,MAAU,MAAM,wCAAwC,CAEtF,IAAM,EAAU,MAAMC,EAAAA,iBAAiB,EAAU,cAAe,EAAU,mBAAoB,EAAQ,QAAQ,CAE9G,OADA,QAAQ,OAAO,MAAM,GAAG,EAAQ,IAAI,CAC7B"}
@@ -1,5 +1,5 @@
1
- import { HarnessOptions } from "../interfaces/harness.cjs";
2
- import { HarnessContext } from "../services/harnessContext.cjs";
1
+ import { HarnessOptions } from "../types/interfaces/harness.cjs";
2
+ import { HarnessContext } from "../adapters/harnessContext.cjs";
3
3
  import { BaseCommand } from "./baseCommand.cjs";
4
4
 
5
5
  //#region src/commands/emitMcpCommand.d.ts
@@ -1,5 +1,5 @@
1
- import { HarnessOptions } from "../interfaces/harness.mjs";
2
- import { HarnessContext } from "../services/harnessContext.mjs";
1
+ import { HarnessOptions } from "../types/interfaces/harness.mjs";
2
+ import { HarnessContext } from "../adapters/harnessContext.mjs";
3
3
  import { BaseCommand } from "./baseCommand.mjs";
4
4
 
5
5
  //#region src/commands/emitMcpCommand.d.ts
@@ -1,2 +1,2 @@
1
- import{BaseCommand as e}from"./baseCommand.mjs";import{persistMcpConfig as t}from"../services/mcpFilter.mjs";import"../services/index.mjs";var n=class extends e{name=`emit-mcp`;matches(e){return!!e.emitMcp}async execute(e){let{options:n,resources:r}=e;if(!n.emitMcp)throw Error(`--emit-mcp requires a target directory`);if(!r.mcpConfigPath)throw Error(`--emit-mcp requires MCP to be enabled`);let i=await t(r.mcpConfigPath,r.temporaryDirectory,n.emitMcp);return process.stdout.write(`${i}\n`),0}};export{n as EmitMcpCommand};
1
+ import{BaseCommand as e}from"./baseCommand.mjs";import{persistMcpConfig as t}from"../adapters/mcpFilter.mjs";import"../services/index.mjs";var n=class extends e{name=`emit-mcp`;matches(e){return!!e.emitMcp}async execute(e){let{options:n,resources:r}=e;if(!n.emitMcp)throw Error(`--emit-mcp requires a target directory`);if(!r.mcpConfigPath)throw Error(`--emit-mcp requires MCP to be enabled`);let i=await t(r.mcpConfigPath,r.temporaryDirectory,n.emitMcp);return process.stdout.write(`${i}\n`),0}};export{n as EmitMcpCommand};
2
2
  //# sourceMappingURL=emitMcpCommand.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"emitMcpCommand.mjs","names":[],"sources":["../../src/commands/emitMcpCommand.ts"],"sourcesContent":["import type { HarnessOptions } from '../interfaces/index.ts';\nimport { type HarnessContext, persistMcpConfig } from '../services/index.ts';\nimport { BaseCommand } from './baseCommand.ts';\n\n/**\n * Writes the resolved MCP config to a directory and exits.\n *\n * Lets claude.sh and codex.sh reuse the same domain-scoped MCP surface instead\n * of reimplementing the filter in shell.\n */\nexport class EmitMcpCommand extends BaseCommand {\n readonly name = 'emit-mcp';\n\n matches(options: HarnessOptions): boolean {\n return Boolean(options.emitMcp);\n }\n\n async execute(context: HarnessContext): Promise<number> {\n const { options, resources } = context;\n if (!options.emitMcp) throw new Error('--emit-mcp requires a target directory');\n if (!resources.mcpConfigPath) throw new Error('--emit-mcp requires MCP to be enabled');\n\n const emitted = await persistMcpConfig(resources.mcpConfigPath, resources.temporaryDirectory, options.emitMcp);\n process.stdout.write(`${emitted}\\n`);\n return 0;\n }\n}\n"],"mappings":"2IAUA,IAAa,EAAb,cAAoC,CAAY,CAC9C,KAAgB,WAEhB,QAAQ,EAAkC,CACxC,MAAO,EAAQ,EAAQ,QAGzB,MAAM,QAAQ,EAA0C,CACtD,GAAM,CAAE,UAAS,aAAc,EAC/B,GAAI,CAAC,EAAQ,QAAS,MAAU,MAAM,yCAAyC,CAC/E,GAAI,CAAC,EAAU,cAAe,MAAU,MAAM,wCAAwC,CAEtF,IAAM,EAAU,MAAM,EAAiB,EAAU,cAAe,EAAU,mBAAoB,EAAQ,QAAQ,CAE9G,OADA,QAAQ,OAAO,MAAM,GAAG,EAAQ,IAAI,CAC7B"}
1
+ {"version":3,"file":"emitMcpCommand.mjs","names":[],"sources":["../../src/commands/emitMcpCommand.ts"],"sourcesContent":["import { type HarnessContext, persistMcpConfig } from '../services/index.ts';\nimport type { HarnessOptions } from '../types/interfaces/index.ts';\nimport { BaseCommand } from './baseCommand.ts';\n\n/**\n * Writes the resolved MCP config to a directory and exits.\n *\n * Lets claude.sh and codex.sh reuse the same domain-scoped MCP surface instead\n * of reimplementing the filter in shell.\n */\nexport class EmitMcpCommand extends BaseCommand {\n readonly name = 'emit-mcp';\n\n matches(options: HarnessOptions): boolean {\n return Boolean(options.emitMcp);\n }\n\n async execute(context: HarnessContext): Promise<number> {\n const { options, resources } = context;\n if (!options.emitMcp) throw new Error('--emit-mcp requires a target directory');\n if (!resources.mcpConfigPath) throw new Error('--emit-mcp requires MCP to be enabled');\n\n const emitted = await persistMcpConfig(resources.mcpConfigPath, resources.temporaryDirectory, options.emitMcp);\n process.stdout.write(`${emitted}\\n`);\n return 0;\n }\n}\n"],"mappings":"2IAUA,IAAa,EAAb,cAAoC,CAAY,CAC9C,KAAgB,WAEhB,QAAQ,EAAkC,CACxC,MAAO,EAAQ,EAAQ,QAGzB,MAAM,QAAQ,EAA0C,CACtD,GAAM,CAAE,UAAS,aAAc,EAC/B,GAAI,CAAC,EAAQ,QAAS,MAAU,MAAM,yCAAyC,CAC/E,GAAI,CAAC,EAAU,cAAe,MAAU,MAAM,wCAAwC,CAEtF,IAAM,EAAU,MAAM,EAAiB,EAAU,cAAe,EAAU,mBAAoB,EAAQ,QAAQ,CAE9G,OADA,QAAQ,OAAO,MAAM,GAAG,EAAQ,IAAI,CAC7B"}
@@ -1,4 +1,4 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../_virtual/_rolldown/runtime.cjs`),t=require(`./baseCommand.cjs`),n=require(`../services/skillCatalog.cjs`);let r=require(`node:path`);r=e.__toESM(r,1);let i=require(`@agimon-ai/doompi-config`),a=require(`node:fs`);a=e.__toESM(a,1);function o(e){return JSON.parse(a.default.readFileSync(e,`utf8`)).mcpServers??{}}function s(e){let t=(e,t,n=`(none)`)=>`${e}:\n${t.length===0?` ${n}`:t.map(e=>` ${e}`).join(`
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../_virtual/_rolldown/runtime.cjs`),t=require(`./baseCommand.cjs`),n=require(`../adapters/skillCatalog.cjs`);let r=require(`node:path`);r=e.__toESM(r,1);let i=require(`node:fs`);i=e.__toESM(i,1);let a=require(`@agimon-ai/doompi-config`);function o(e){return JSON.parse(i.default.readFileSync(e,`utf8`)).mcpServers??{}}function s(e){let t=(e,t,n=`(none)`)=>`${e}:\n${t.length===0?` ${n}`:t.map(e=>` ${e}`).join(`
2
2
  `)}\n`;return[`doompi resolved matrix
3
3
 
4
4
  `,`major mode: ${e.majorMode}\n\n`,t(`profile`,e.profile?[e.profile]:[],`(none)`),`
@@ -17,5 +17,5 @@ context cost (tokens)
17
17
  `,c(`skills prompt`,e.skillPromptTokens,`always on`),c(`persona`,e.personaTokens,`always on`),c(`startup total`,t),c(`skill bodies`,e.skillBodyTokens,`read on demand`),`
18
18
  Excludes MCP tool schemas, which the servers only report once connected,
19
19
  `,` and skills contributed by extensions, which register after startup.
20
- `].join(``)}var u=class extends t.BaseCommand{name=`explain`;matches(e){return e.explain}async cost(e){let{options:t,resources:r}=e;try{let[a,o]=await Promise.all([n.buildSkillCatalog({repoRoot:t.repoRoot,activeSkillDirectories:r.skillDirectories,extensionSources:[]}),n.counter()]),s=e.personaDirectory?(0,i.buildPersonaPrompt)(e.personaRoot??t.repoRoot,e.personaDirectory):void 0;return{skillPromptTokens:a.promptTokens,skillBodyTokens:a.bodyTokens,personaTokens:s?o(s):0}}catch(e){let t=e instanceof Error?e.message:String(e);process.stderr.write(`[doompi] ${this.name}: could not price the selection: ${t}\n`);return}}async execute(e){let{options:t,resources:n,plugins:r,mcpAllowlist:i}=e,a=await this.cost(e);return process.stdout.write(s({cost:a,majorMode:t.majorMode,profile:e.profile,persona:e.personaDirectory,domains:t.domains,plugins:r.map(e=>e.directory),layers:e.selectedLayers,hookGroups:e.hookGroups,hooksEnabled:t.hooks,skillDirectories:n.skillDirectories,skillCount:n.skillCount,agentCount:n.agentCount,agentDirectories:n.agentDirectories,mcpConfigPath:n.mcpConfigPath,mcpServers:n.mcpConfigPath?Object.keys(o(n.mcpConfigPath)):[],mcpProxyUpstreams:i?.proxy,mcpFiltered:!!i})),0}};exports.ExplainCommand=u,exports.explainMatrix=s;
20
+ `].join(``)}var u=class extends t.BaseCommand{name=`explain`;matches(e){return e.explain}async cost(e){let{options:t,resources:r}=e;try{let[i,o]=await Promise.all([n.buildSkillCatalog({repoRoot:t.repoRoot,activeSkillDirectories:r.skillDirectories,extensionSources:[]}),n.counter()]),s=e.personaDirectory?(0,a.buildPersonaPrompt)(e.personaRoot??t.repoRoot,e.personaDirectory):void 0;return{skillPromptTokens:i.promptTokens,skillBodyTokens:i.bodyTokens,personaTokens:s?o(s):0}}catch(e){let t=e instanceof Error?e.message:String(e);process.stderr.write(`[doompi] ${this.name}: could not price the selection: ${t}\n`);return}}async execute(e){let{options:t,resources:n,plugins:r,mcpAllowlist:i}=e,a=await this.cost(e);return process.stdout.write(s({cost:a,majorMode:t.majorMode,profile:e.profile,persona:e.personaDirectory,domains:t.domains,plugins:r.map(e=>e.directory),layers:e.selectedLayers,hookGroups:e.hookGroups,hooksEnabled:t.hooks,skillDirectories:n.skillDirectories,skillCount:n.skillCount,agentCount:n.agentCount,agentDirectories:n.agentDirectories,mcpConfigPath:n.mcpConfigPath,mcpServers:n.mcpConfigPath?Object.keys(o(n.mcpConfigPath)):[],mcpProxyUpstreams:i?.proxy,mcpFiltered:!!i})),0}};exports.ExplainCommand=u,exports.explainMatrix=s;
21
21
  //# sourceMappingURL=explainCommand.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"explainCommand.cjs","names":["fs","path","BaseCommand","buildSkillCatalog","counter"],"sources":["../../src/commands/explainCommand.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\nimport { buildPersonaPrompt } from '@agimon-ai/doompi-config';\nimport type { HarnessOptions } from '../interfaces/index.ts';\nimport type { HarnessContext } from '../services/index.ts';\nimport { buildSkillCatalog, counter } from '../services/skillCatalog.ts';\nimport { BaseCommand } from './baseCommand.ts';\n\n/**\n * What the selection costs before the first prompt, in tokens.\n *\n * MCP tool schemas are deliberately absent: they come from the servers at\n * connect time, and pricing them here would mean spawning every configured\n * server and running a handshake on a command that is meant to be instant.\n * `startupTokens` is therefore a floor, not a total, and the rendering says so.\n */\nexport interface MatrixCost {\n /** The always-on skill block Pi puts in the system prompt. */\n skillPromptTokens: number;\n /** Skill bodies on disk, read only when a skill is invoked. */\n skillBodyTokens: number;\n /** The persona prompt, when a profile selected one. */\n personaTokens: number;\n}\n\nexport interface MatrixExplanation {\n majorMode: string;\n profile?: string;\n persona?: string;\n domains: string[];\n plugins: string[];\n layers: string[];\n hookGroups: string[];\n hooksEnabled: boolean;\n skillDirectories: string[];\n skillCount: number;\n agentCount: number;\n agentDirectories: string[];\n mcpConfigPath?: string;\n mcpServers: string[];\n mcpProxyUpstreams?: string[];\n mcpFiltered: boolean;\n cost?: MatrixCost;\n}\n\nfunction readMcpServers(configPath: string): Record<string, unknown> {\n const config = JSON.parse(fs.readFileSync(configPath, 'utf8')) as { mcpServers?: Record<string, unknown> };\n return config.mcpServers ?? {};\n}\n\n/**\n * Renders the resolved matrix for --explain. Composition spans three config\n * files, so this answers \"why is that loaded\" in one command instead of a\n * manual trace through domains, major modes, and plugin subsets.\n */\nexport function explainMatrix(explanation: MatrixExplanation): string {\n const section = (label: string, values: string[], empty = '(none)'): string =>\n `${label}:\\n${values.length === 0 ? ` ${empty}` : values.map((value) => ` ${value}`).join('\\n')}\\n`;\n\n return [\n `doompi resolved matrix\\n\\n`,\n `major mode: ${explanation.majorMode}\\n\\n`,\n section('profile', explanation.profile ? [explanation.profile] : [], '(none)'),\n '\\n',\n section('persona', explanation.persona ? [explanation.persona] : [], '(none)'),\n '\\n',\n section('domains (content)', explanation.domains),\n '\\n',\n section('layers (behavior, from the major mode)', explanation.layers, 'core only'),\n '\\n',\n section(\n 'hook groups from layers',\n explanation.hookGroups,\n explanation.hooksEnabled ? '(core groups only)' : '(hooks disabled)',\n ),\n '\\n',\n section(\n 'plugins',\n explanation.plugins.map((directory) => path.basename(directory)),\n ),\n '\\n',\n section(\n 'skill paths',\n explanation.skillDirectories.map((directory) => path.relative(process.cwd(), directory)),\n ),\n '\\n',\n section(\n explanation.mcpFiltered ? 'mcp servers (filtered by domain allowlist)' : 'mcp servers (unfiltered)',\n explanation.mcpServers,\n '(mcp disabled)',\n ),\n '\\n',\n explanation.mcpProxyUpstreams\n ? section('mcp proxy upstreams (filtered)', explanation.mcpProxyUpstreams)\n : 'mcp proxy upstreams:\\n (unfiltered, every upstream in mcp-config.yaml)\\n',\n '\\n',\n `skills: ${explanation.skillCount} (from ${explanation.skillDirectories.length} paths)\\n`,\n `agents: ${explanation.agentCount}\\n`,\n `mcp config: ${explanation.mcpConfigPath ?? '(disabled)'}\\n`,\n explanation.cost ? renderCost(explanation.cost) : '',\n ].join('');\n}\n\nconst TOKEN_COLUMN = 9;\n\nfunction tokenLine(label: string, tokens: number, note = ''): string {\n const row = ` ${label.padEnd(16)}${tokens.toLocaleString('en-US').padStart(TOKEN_COLUMN)}`;\n return `${note ? `${row} ${note}` : row}\\n`;\n}\n\n/**\n * The bill, rendered last so the sections above keep their order.\n *\n * Every figure is derived from files on disk, so two runs of the same selection\n * print the same numbers and a reader can reproduce them without trusting this\n * output.\n */\nfunction renderCost(cost: MatrixCost): string {\n const startup = cost.skillPromptTokens + cost.personaTokens;\n return [\n '\\ncontext cost (tokens)\\n',\n tokenLine('skills prompt', cost.skillPromptTokens, 'always on'),\n tokenLine('persona', cost.personaTokens, 'always on'),\n tokenLine('startup total', startup),\n tokenLine('skill bodies', cost.skillBodyTokens, 'read on demand'),\n '\\n Excludes MCP tool schemas, which the servers only report once connected,\\n',\n ' and skills contributed by extensions, which register after startup.\\n',\n ].join('');\n}\n\n/** Prints the fully resolved matrix instead of launching Pi. */\nexport class ExplainCommand extends BaseCommand {\n readonly name = 'explain';\n\n matches(options: HarnessOptions): boolean {\n return options.explain;\n }\n\n /**\n * Prices the selection from files on disk.\n *\n * `extensionSources` is empty because extensions publish their skill\n * directories over the session event bus, which has not started here. The\n * rendering names that gap rather than presenting the figure as a total.\n */\n private async cost(context: HarnessContext): Promise<MatrixCost | undefined> {\n const { options, resources } = context;\n try {\n const [catalog, countTokens] = await Promise.all([\n buildSkillCatalog({\n repoRoot: options.repoRoot,\n activeSkillDirectories: resources.skillDirectories,\n extensionSources: [],\n }),\n counter(),\n ]);\n const persona = context.personaDirectory\n ? buildPersonaPrompt(context.personaRoot ?? options.repoRoot, context.personaDirectory)\n : undefined;\n return {\n skillPromptTokens: catalog.promptTokens,\n skillBodyTokens: catalog.bodyTokens,\n personaTokens: persona ? countTokens(persona) : 0,\n };\n } catch (error) {\n // Pricing reads the skill files, so an unreadable one must not take the\n // whole explanation down: the resolved matrix is the point, the bill is\n // the extra. Reported rather than swallowed.\n const detail = error instanceof Error ? error.message : String(error);\n process.stderr.write(`[doompi] ${this.name}: could not price the selection: ${detail}\\n`);\n return undefined;\n }\n }\n\n async execute(context: HarnessContext): Promise<number> {\n const { options, resources, plugins, mcpAllowlist } = context;\n const cost = await this.cost(context);\n\n process.stdout.write(\n explainMatrix({\n cost,\n majorMode: options.majorMode,\n profile: context.profile,\n persona: context.personaDirectory,\n domains: options.domains,\n plugins: plugins.map((entry) => entry.directory),\n layers: context.selectedLayers,\n hookGroups: context.hookGroups,\n hooksEnabled: options.hooks,\n skillDirectories: resources.skillDirectories,\n skillCount: resources.skillCount,\n agentCount: resources.agentCount,\n agentDirectories: resources.agentDirectories,\n mcpConfigPath: resources.mcpConfigPath,\n // Read back from the generated config so this reports what Pi will\n // actually load, not what the allowlist intended.\n mcpServers: resources.mcpConfigPath ? Object.keys(readMcpServers(resources.mcpConfigPath)) : [],\n mcpProxyUpstreams: mcpAllowlist?.proxy,\n mcpFiltered: Boolean(mcpAllowlist),\n }),\n );\n return 0;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"explainCommand.cjs","names":["fs","path","BaseCommand","buildSkillCatalog","counter"],"sources":["../../src/commands/explainCommand.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\nimport { buildPersonaPrompt } from '@agimon-ai/doompi-config';\nimport type { HarnessContext } from '../services/index.ts';\nimport { buildSkillCatalog, counter } from '../adapters/skillCatalog.ts';\nimport type { HarnessOptions } from '../types/interfaces/index.ts';\nimport { BaseCommand } from './baseCommand.ts';\n\n/**\n * What the selection costs before the first prompt, in tokens.\n *\n * MCP tool schemas are deliberately absent: they come from the servers at\n * connect time, and pricing them here would mean spawning every configured\n * server and running a handshake on a command that is meant to be instant.\n * `startupTokens` is therefore a floor, not a total, and the rendering says so.\n */\nexport interface MatrixCost {\n /** The always-on skill block Pi puts in the system prompt. */\n skillPromptTokens: number;\n /** Skill bodies on disk, read only when a skill is invoked. */\n skillBodyTokens: number;\n /** The persona prompt, when a profile selected one. */\n personaTokens: number;\n}\n\nexport interface MatrixExplanation {\n majorMode: string;\n profile?: string;\n persona?: string;\n domains: string[];\n plugins: string[];\n layers: string[];\n hookGroups: string[];\n hooksEnabled: boolean;\n skillDirectories: string[];\n skillCount: number;\n agentCount: number;\n agentDirectories: string[];\n mcpConfigPath?: string;\n mcpServers: string[];\n mcpProxyUpstreams?: string[];\n mcpFiltered: boolean;\n cost?: MatrixCost;\n}\n\nfunction readMcpServers(configPath: string): Record<string, unknown> {\n const config = JSON.parse(fs.readFileSync(configPath, 'utf8')) as { mcpServers?: Record<string, unknown> };\n return config.mcpServers ?? {};\n}\n\n/**\n * Renders the resolved matrix for --explain. Composition spans three config\n * files, so this answers \"why is that loaded\" in one command instead of a\n * manual trace through domains, major modes, and plugin subsets.\n */\nexport function explainMatrix(explanation: MatrixExplanation): string {\n const section = (label: string, values: string[], empty = '(none)'): string =>\n `${label}:\\n${values.length === 0 ? ` ${empty}` : values.map((value) => ` ${value}`).join('\\n')}\\n`;\n\n return [\n `doompi resolved matrix\\n\\n`,\n `major mode: ${explanation.majorMode}\\n\\n`,\n section('profile', explanation.profile ? [explanation.profile] : [], '(none)'),\n '\\n',\n section('persona', explanation.persona ? [explanation.persona] : [], '(none)'),\n '\\n',\n section('domains (content)', explanation.domains),\n '\\n',\n section('layers (behavior, from the major mode)', explanation.layers, 'core only'),\n '\\n',\n section(\n 'hook groups from layers',\n explanation.hookGroups,\n explanation.hooksEnabled ? '(core groups only)' : '(hooks disabled)',\n ),\n '\\n',\n section(\n 'plugins',\n explanation.plugins.map((directory) => path.basename(directory)),\n ),\n '\\n',\n section(\n 'skill paths',\n explanation.skillDirectories.map((directory) => path.relative(process.cwd(), directory)),\n ),\n '\\n',\n section(\n explanation.mcpFiltered ? 'mcp servers (filtered by domain allowlist)' : 'mcp servers (unfiltered)',\n explanation.mcpServers,\n '(mcp disabled)',\n ),\n '\\n',\n explanation.mcpProxyUpstreams\n ? section('mcp proxy upstreams (filtered)', explanation.mcpProxyUpstreams)\n : 'mcp proxy upstreams:\\n (unfiltered, every upstream in mcp-config.yaml)\\n',\n '\\n',\n `skills: ${explanation.skillCount} (from ${explanation.skillDirectories.length} paths)\\n`,\n `agents: ${explanation.agentCount}\\n`,\n `mcp config: ${explanation.mcpConfigPath ?? '(disabled)'}\\n`,\n explanation.cost ? renderCost(explanation.cost) : '',\n ].join('');\n}\n\nconst TOKEN_COLUMN = 9;\n\nfunction tokenLine(label: string, tokens: number, note = ''): string {\n const row = ` ${label.padEnd(16)}${tokens.toLocaleString('en-US').padStart(TOKEN_COLUMN)}`;\n return `${note ? `${row} ${note}` : row}\\n`;\n}\n\n/**\n * The bill, rendered last so the sections above keep their order.\n *\n * Every figure is derived from files on disk, so two runs of the same selection\n * print the same numbers and a reader can reproduce them without trusting this\n * output.\n */\nfunction renderCost(cost: MatrixCost): string {\n const startup = cost.skillPromptTokens + cost.personaTokens;\n return [\n '\\ncontext cost (tokens)\\n',\n tokenLine('skills prompt', cost.skillPromptTokens, 'always on'),\n tokenLine('persona', cost.personaTokens, 'always on'),\n tokenLine('startup total', startup),\n tokenLine('skill bodies', cost.skillBodyTokens, 'read on demand'),\n '\\n Excludes MCP tool schemas, which the servers only report once connected,\\n',\n ' and skills contributed by extensions, which register after startup.\\n',\n ].join('');\n}\n\n/** Prints the fully resolved matrix instead of launching Pi. */\nexport class ExplainCommand extends BaseCommand {\n readonly name = 'explain';\n\n matches(options: HarnessOptions): boolean {\n return options.explain;\n }\n\n /**\n * Prices the selection from files on disk.\n *\n * `extensionSources` is empty because extensions publish their skill\n * directories over the session event bus, which has not started here. The\n * rendering names that gap rather than presenting the figure as a total.\n */\n private async cost(context: HarnessContext): Promise<MatrixCost | undefined> {\n const { options, resources } = context;\n try {\n const [catalog, countTokens] = await Promise.all([\n buildSkillCatalog({\n repoRoot: options.repoRoot,\n activeSkillDirectories: resources.skillDirectories,\n extensionSources: [],\n }),\n counter(),\n ]);\n const persona = context.personaDirectory\n ? buildPersonaPrompt(context.personaRoot ?? options.repoRoot, context.personaDirectory)\n : undefined;\n return {\n skillPromptTokens: catalog.promptTokens,\n skillBodyTokens: catalog.bodyTokens,\n personaTokens: persona ? countTokens(persona) : 0,\n };\n } catch (error) {\n // Pricing reads the skill files, so an unreadable one must not take the\n // whole explanation down: the resolved matrix is the point, the bill is\n // the extra. Reported rather than swallowed.\n const detail = error instanceof Error ? error.message : String(error);\n process.stderr.write(`[doompi] ${this.name}: could not price the selection: ${detail}\\n`);\n return undefined;\n }\n }\n\n async execute(context: HarnessContext): Promise<number> {\n const { options, resources, plugins, mcpAllowlist } = context;\n const cost = await this.cost(context);\n\n process.stdout.write(\n explainMatrix({\n cost,\n majorMode: options.majorMode,\n profile: context.profile,\n persona: context.personaDirectory,\n domains: options.domains,\n plugins: plugins.map((entry) => entry.directory),\n layers: context.selectedLayers,\n hookGroups: context.hookGroups,\n hooksEnabled: options.hooks,\n skillDirectories: resources.skillDirectories,\n skillCount: resources.skillCount,\n agentCount: resources.agentCount,\n agentDirectories: resources.agentDirectories,\n mcpConfigPath: resources.mcpConfigPath,\n // Read back from the generated config so this reports what Pi will\n // actually load, not what the allowlist intended.\n mcpServers: resources.mcpConfigPath ? Object.keys(readMcpServers(resources.mcpConfigPath)) : [],\n mcpProxyUpstreams: mcpAllowlist?.proxy,\n mcpFiltered: Boolean(mcpAllowlist),\n }),\n );\n return 0;\n }\n}\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import { HarnessOptions } from "../interfaces/harness.cjs";
2
- import { HarnessContext } from "../services/harnessContext.cjs";
1
+ import { HarnessOptions } from "../types/interfaces/harness.cjs";
2
+ import { HarnessContext } from "../adapters/harnessContext.cjs";
3
3
  import { BaseCommand } from "./baseCommand.cjs";
4
4
 
5
5
  //#region src/commands/explainCommand.d.ts
@@ -1,5 +1,5 @@
1
- import { HarnessOptions } from "../interfaces/harness.mjs";
2
- import { HarnessContext } from "../services/harnessContext.mjs";
1
+ import { HarnessOptions } from "../types/interfaces/harness.mjs";
2
+ import { HarnessContext } from "../adapters/harnessContext.mjs";
3
3
  import { BaseCommand } from "./baseCommand.mjs";
4
4
 
5
5
  //#region src/commands/explainCommand.d.ts
@@ -1,4 +1,4 @@
1
- import{BaseCommand as e}from"./baseCommand.mjs";import{buildSkillCatalog as t,counter as n}from"../services/skillCatalog.mjs";import r from"node:path";import{buildPersonaPrompt as i}from"@agimon-ai/doompi-config";import a from"node:fs";function o(e){return JSON.parse(a.readFileSync(e,`utf8`)).mcpServers??{}}function s(e){let t=(e,t,n=`(none)`)=>`${e}:\n${t.length===0?` ${n}`:t.map(e=>` ${e}`).join(`
1
+ import{BaseCommand as e}from"./baseCommand.mjs";import{buildSkillCatalog as t,counter as n}from"../adapters/skillCatalog.mjs";import r from"node:path";import i from"node:fs";import{buildPersonaPrompt as a}from"@agimon-ai/doompi-config";function o(e){return JSON.parse(i.readFileSync(e,`utf8`)).mcpServers??{}}function s(e){let t=(e,t,n=`(none)`)=>`${e}:\n${t.length===0?` ${n}`:t.map(e=>` ${e}`).join(`
2
2
  `)}\n`;return[`doompi resolved matrix
3
3
 
4
4
  `,`major mode: ${e.majorMode}\n\n`,t(`profile`,e.profile?[e.profile]:[],`(none)`),`
@@ -17,5 +17,5 @@ context cost (tokens)
17
17
  `,c(`skills prompt`,e.skillPromptTokens,`always on`),c(`persona`,e.personaTokens,`always on`),c(`startup total`,t),c(`skill bodies`,e.skillBodyTokens,`read on demand`),`
18
18
  Excludes MCP tool schemas, which the servers only report once connected,
19
19
  `,` and skills contributed by extensions, which register after startup.
20
- `].join(``)}var u=class extends e{name=`explain`;matches(e){return e.explain}async cost(e){let{options:r,resources:a}=e;try{let[o,s]=await Promise.all([t({repoRoot:r.repoRoot,activeSkillDirectories:a.skillDirectories,extensionSources:[]}),n()]),c=e.personaDirectory?i(e.personaRoot??r.repoRoot,e.personaDirectory):void 0;return{skillPromptTokens:o.promptTokens,skillBodyTokens:o.bodyTokens,personaTokens:c?s(c):0}}catch(e){let t=e instanceof Error?e.message:String(e);process.stderr.write(`[doompi] ${this.name}: could not price the selection: ${t}\n`);return}}async execute(e){let{options:t,resources:n,plugins:r,mcpAllowlist:i}=e,a=await this.cost(e);return process.stdout.write(s({cost:a,majorMode:t.majorMode,profile:e.profile,persona:e.personaDirectory,domains:t.domains,plugins:r.map(e=>e.directory),layers:e.selectedLayers,hookGroups:e.hookGroups,hooksEnabled:t.hooks,skillDirectories:n.skillDirectories,skillCount:n.skillCount,agentCount:n.agentCount,agentDirectories:n.agentDirectories,mcpConfigPath:n.mcpConfigPath,mcpServers:n.mcpConfigPath?Object.keys(o(n.mcpConfigPath)):[],mcpProxyUpstreams:i?.proxy,mcpFiltered:!!i})),0}};export{u as ExplainCommand,s as explainMatrix};
20
+ `].join(``)}var u=class extends e{name=`explain`;matches(e){return e.explain}async cost(e){let{options:r,resources:i}=e;try{let[o,s]=await Promise.all([t({repoRoot:r.repoRoot,activeSkillDirectories:i.skillDirectories,extensionSources:[]}),n()]),c=e.personaDirectory?a(e.personaRoot??r.repoRoot,e.personaDirectory):void 0;return{skillPromptTokens:o.promptTokens,skillBodyTokens:o.bodyTokens,personaTokens:c?s(c):0}}catch(e){let t=e instanceof Error?e.message:String(e);process.stderr.write(`[doompi] ${this.name}: could not price the selection: ${t}\n`);return}}async execute(e){let{options:t,resources:n,plugins:r,mcpAllowlist:i}=e,a=await this.cost(e);return process.stdout.write(s({cost:a,majorMode:t.majorMode,profile:e.profile,persona:e.personaDirectory,domains:t.domains,plugins:r.map(e=>e.directory),layers:e.selectedLayers,hookGroups:e.hookGroups,hooksEnabled:t.hooks,skillDirectories:n.skillDirectories,skillCount:n.skillCount,agentCount:n.agentCount,agentDirectories:n.agentDirectories,mcpConfigPath:n.mcpConfigPath,mcpServers:n.mcpConfigPath?Object.keys(o(n.mcpConfigPath)):[],mcpProxyUpstreams:i?.proxy,mcpFiltered:!!i})),0}};export{u as ExplainCommand,s as explainMatrix};
21
21
  //# sourceMappingURL=explainCommand.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"explainCommand.mjs","names":[],"sources":["../../src/commands/explainCommand.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\nimport { buildPersonaPrompt } from '@agimon-ai/doompi-config';\nimport type { HarnessOptions } from '../interfaces/index.ts';\nimport type { HarnessContext } from '../services/index.ts';\nimport { buildSkillCatalog, counter } from '../services/skillCatalog.ts';\nimport { BaseCommand } from './baseCommand.ts';\n\n/**\n * What the selection costs before the first prompt, in tokens.\n *\n * MCP tool schemas are deliberately absent: they come from the servers at\n * connect time, and pricing them here would mean spawning every configured\n * server and running a handshake on a command that is meant to be instant.\n * `startupTokens` is therefore a floor, not a total, and the rendering says so.\n */\nexport interface MatrixCost {\n /** The always-on skill block Pi puts in the system prompt. */\n skillPromptTokens: number;\n /** Skill bodies on disk, read only when a skill is invoked. */\n skillBodyTokens: number;\n /** The persona prompt, when a profile selected one. */\n personaTokens: number;\n}\n\nexport interface MatrixExplanation {\n majorMode: string;\n profile?: string;\n persona?: string;\n domains: string[];\n plugins: string[];\n layers: string[];\n hookGroups: string[];\n hooksEnabled: boolean;\n skillDirectories: string[];\n skillCount: number;\n agentCount: number;\n agentDirectories: string[];\n mcpConfigPath?: string;\n mcpServers: string[];\n mcpProxyUpstreams?: string[];\n mcpFiltered: boolean;\n cost?: MatrixCost;\n}\n\nfunction readMcpServers(configPath: string): Record<string, unknown> {\n const config = JSON.parse(fs.readFileSync(configPath, 'utf8')) as { mcpServers?: Record<string, unknown> };\n return config.mcpServers ?? {};\n}\n\n/**\n * Renders the resolved matrix for --explain. Composition spans three config\n * files, so this answers \"why is that loaded\" in one command instead of a\n * manual trace through domains, major modes, and plugin subsets.\n */\nexport function explainMatrix(explanation: MatrixExplanation): string {\n const section = (label: string, values: string[], empty = '(none)'): string =>\n `${label}:\\n${values.length === 0 ? ` ${empty}` : values.map((value) => ` ${value}`).join('\\n')}\\n`;\n\n return [\n `doompi resolved matrix\\n\\n`,\n `major mode: ${explanation.majorMode}\\n\\n`,\n section('profile', explanation.profile ? [explanation.profile] : [], '(none)'),\n '\\n',\n section('persona', explanation.persona ? [explanation.persona] : [], '(none)'),\n '\\n',\n section('domains (content)', explanation.domains),\n '\\n',\n section('layers (behavior, from the major mode)', explanation.layers, 'core only'),\n '\\n',\n section(\n 'hook groups from layers',\n explanation.hookGroups,\n explanation.hooksEnabled ? '(core groups only)' : '(hooks disabled)',\n ),\n '\\n',\n section(\n 'plugins',\n explanation.plugins.map((directory) => path.basename(directory)),\n ),\n '\\n',\n section(\n 'skill paths',\n explanation.skillDirectories.map((directory) => path.relative(process.cwd(), directory)),\n ),\n '\\n',\n section(\n explanation.mcpFiltered ? 'mcp servers (filtered by domain allowlist)' : 'mcp servers (unfiltered)',\n explanation.mcpServers,\n '(mcp disabled)',\n ),\n '\\n',\n explanation.mcpProxyUpstreams\n ? section('mcp proxy upstreams (filtered)', explanation.mcpProxyUpstreams)\n : 'mcp proxy upstreams:\\n (unfiltered, every upstream in mcp-config.yaml)\\n',\n '\\n',\n `skills: ${explanation.skillCount} (from ${explanation.skillDirectories.length} paths)\\n`,\n `agents: ${explanation.agentCount}\\n`,\n `mcp config: ${explanation.mcpConfigPath ?? '(disabled)'}\\n`,\n explanation.cost ? renderCost(explanation.cost) : '',\n ].join('');\n}\n\nconst TOKEN_COLUMN = 9;\n\nfunction tokenLine(label: string, tokens: number, note = ''): string {\n const row = ` ${label.padEnd(16)}${tokens.toLocaleString('en-US').padStart(TOKEN_COLUMN)}`;\n return `${note ? `${row} ${note}` : row}\\n`;\n}\n\n/**\n * The bill, rendered last so the sections above keep their order.\n *\n * Every figure is derived from files on disk, so two runs of the same selection\n * print the same numbers and a reader can reproduce them without trusting this\n * output.\n */\nfunction renderCost(cost: MatrixCost): string {\n const startup = cost.skillPromptTokens + cost.personaTokens;\n return [\n '\\ncontext cost (tokens)\\n',\n tokenLine('skills prompt', cost.skillPromptTokens, 'always on'),\n tokenLine('persona', cost.personaTokens, 'always on'),\n tokenLine('startup total', startup),\n tokenLine('skill bodies', cost.skillBodyTokens, 'read on demand'),\n '\\n Excludes MCP tool schemas, which the servers only report once connected,\\n',\n ' and skills contributed by extensions, which register after startup.\\n',\n ].join('');\n}\n\n/** Prints the fully resolved matrix instead of launching Pi. */\nexport class ExplainCommand extends BaseCommand {\n readonly name = 'explain';\n\n matches(options: HarnessOptions): boolean {\n return options.explain;\n }\n\n /**\n * Prices the selection from files on disk.\n *\n * `extensionSources` is empty because extensions publish their skill\n * directories over the session event bus, which has not started here. The\n * rendering names that gap rather than presenting the figure as a total.\n */\n private async cost(context: HarnessContext): Promise<MatrixCost | undefined> {\n const { options, resources } = context;\n try {\n const [catalog, countTokens] = await Promise.all([\n buildSkillCatalog({\n repoRoot: options.repoRoot,\n activeSkillDirectories: resources.skillDirectories,\n extensionSources: [],\n }),\n counter(),\n ]);\n const persona = context.personaDirectory\n ? buildPersonaPrompt(context.personaRoot ?? options.repoRoot, context.personaDirectory)\n : undefined;\n return {\n skillPromptTokens: catalog.promptTokens,\n skillBodyTokens: catalog.bodyTokens,\n personaTokens: persona ? countTokens(persona) : 0,\n };\n } catch (error) {\n // Pricing reads the skill files, so an unreadable one must not take the\n // whole explanation down: the resolved matrix is the point, the bill is\n // the extra. Reported rather than swallowed.\n const detail = error instanceof Error ? error.message : String(error);\n process.stderr.write(`[doompi] ${this.name}: could not price the selection: ${detail}\\n`);\n return undefined;\n }\n }\n\n async execute(context: HarnessContext): Promise<number> {\n const { options, resources, plugins, mcpAllowlist } = context;\n const cost = await this.cost(context);\n\n process.stdout.write(\n explainMatrix({\n cost,\n majorMode: options.majorMode,\n profile: context.profile,\n persona: context.personaDirectory,\n domains: options.domains,\n plugins: plugins.map((entry) => entry.directory),\n layers: context.selectedLayers,\n hookGroups: context.hookGroups,\n hooksEnabled: options.hooks,\n skillDirectories: resources.skillDirectories,\n skillCount: resources.skillCount,\n agentCount: resources.agentCount,\n agentDirectories: resources.agentDirectories,\n mcpConfigPath: resources.mcpConfigPath,\n // Read back from the generated config so this reports what Pi will\n // actually load, not what the allowlist intended.\n mcpServers: resources.mcpConfigPath ? Object.keys(readMcpServers(resources.mcpConfigPath)) : [],\n mcpProxyUpstreams: mcpAllowlist?.proxy,\n mcpFiltered: Boolean(mcpAllowlist),\n }),\n );\n return 0;\n }\n}\n"],"mappings":"4OA6CA,SAAS,EAAe,EAA6C,CAEnE,OADe,KAAK,MAAM,EAAG,aAAa,EAAY,OAAO,CAChD,CAAC,YAAc,EAAE,CAQhC,SAAgB,EAAc,EAAwC,CACpE,IAAM,GAAW,EAAe,EAAkB,EAAQ,WACxD,GAAG,EAAM,KAAK,EAAO,SAAW,EAAI,KAAK,IAAU,EAAO,IAAK,GAAU,KAAK,IAAQ,CAAC,KAAK;EAAK,CAAC,IAEpG,MAAO,CACL;;EACA,eAAe,EAAY,UAAU,MACrC,EAAQ,UAAW,EAAY,QAAU,CAAC,EAAY,QAAQ,CAAG,EAAE,CAAE,SAAS,CAC9E;EACA,EAAQ,UAAW,EAAY,QAAU,CAAC,EAAY,QAAQ,CAAG,EAAE,CAAE,SAAS,CAC9E;EACA,EAAQ,oBAAqB,EAAY,QAAQ,CACjD;EACA,EAAQ,yCAA0C,EAAY,OAAQ,YAAY,CAClF;EACA,EACE,0BACA,EAAY,WACZ,EAAY,aAAe,qBAAuB,mBACnD,CACD;EACA,EACE,UACA,EAAY,QAAQ,IAAK,GAAc,EAAK,SAAS,EAAU,CAAC,CACjE,CACD;EACA,EACE,cACA,EAAY,iBAAiB,IAAK,GAAc,EAAK,SAAS,QAAQ,KAAK,CAAE,EAAU,CAAC,CACzF,CACD;EACA,EACE,EAAY,YAAc,6CAA+C,2BACzE,EAAY,WACZ,iBACD,CACD;EACA,EAAY,kBACR,EAAQ,iCAAkC,EAAY,kBAAkB,CACxE;;EACJ;EACA,WAAW,EAAY,WAAW,SAAS,EAAY,iBAAiB,OAAO,WAC/E,WAAW,EAAY,WAAW,IAClC,eAAe,EAAY,eAAiB,aAAa,IACzD,EAAY,KAAO,EAAW,EAAY,KAAK,CAAG,GACnD,CAAC,KAAK,GAAG,CAKZ,SAAS,EAAU,EAAe,EAAgB,EAAO,GAAY,CACnE,IAAM,EAAM,KAAK,EAAM,OAAO,GAAG,GAAG,EAAO,eAAe,QAAQ,CAAC,SAAS,EAAa,GACzF,MAAO,GAAG,EAAO,GAAG,EAAI,IAAI,IAAS,EAAI,IAU3C,SAAS,EAAW,EAA0B,CAC5C,IAAM,EAAU,EAAK,kBAAoB,EAAK,cAC9C,MAAO,CACL;;EACA,EAAU,gBAAiB,EAAK,kBAAmB,YAAY,CAC/D,EAAU,UAAW,EAAK,cAAe,YAAY,CACrD,EAAU,gBAAiB,EAAQ,CACnC,EAAU,eAAgB,EAAK,gBAAiB,iBAAiB,CACjE;;EACA;EACD,CAAC,KAAK,GAAG,CAIZ,IAAa,EAAb,cAAoC,CAAY,CAC9C,KAAgB,UAEhB,QAAQ,EAAkC,CACxC,OAAO,EAAQ,QAUjB,MAAc,KAAK,EAA0D,CAC3E,GAAM,CAAE,UAAS,aAAc,EAC/B,GAAI,CACF,GAAM,CAAC,EAAS,GAAe,MAAM,QAAQ,IAAI,CAC/C,EAAkB,CAChB,SAAU,EAAQ,SAClB,uBAAwB,EAAU,iBAClC,iBAAkB,EAAE,CACrB,CAAC,CACF,GAAS,CACV,CAAC,CACI,EAAU,EAAQ,iBACpB,EAAmB,EAAQ,aAAe,EAAQ,SAAU,EAAQ,iBAAiB,CACrF,IAAA,GACJ,MAAO,CACL,kBAAmB,EAAQ,aAC3B,gBAAiB,EAAQ,WACzB,cAAe,EAAU,EAAY,EAAQ,CAAG,EACjD,OACM,EAAO,CAId,IAAM,EAAS,aAAiB,MAAQ,EAAM,QAAU,OAAO,EAAM,CACrE,QAAQ,OAAO,MAAM,YAAY,KAAK,KAAK,mCAAmC,EAAO,IAAI,CACzF,QAIJ,MAAM,QAAQ,EAA0C,CACtD,GAAM,CAAE,UAAS,YAAW,UAAS,gBAAiB,EAChD,EAAO,MAAM,KAAK,KAAK,EAAQ,CAyBrC,OAvBA,QAAQ,OAAO,MACb,EAAc,CACZ,OACA,UAAW,EAAQ,UACnB,QAAS,EAAQ,QACjB,QAAS,EAAQ,iBACjB,QAAS,EAAQ,QACjB,QAAS,EAAQ,IAAK,GAAU,EAAM,UAAU,CAChD,OAAQ,EAAQ,eAChB,WAAY,EAAQ,WACpB,aAAc,EAAQ,MACtB,iBAAkB,EAAU,iBAC5B,WAAY,EAAU,WACtB,WAAY,EAAU,WACtB,iBAAkB,EAAU,iBAC5B,cAAe,EAAU,cAGzB,WAAY,EAAU,cAAgB,OAAO,KAAK,EAAe,EAAU,cAAc,CAAC,CAAG,EAAE,CAC/F,kBAAmB,GAAc,MACjC,YAAa,EAAQ,EACtB,CAAC,CACH,CACM"}
1
+ {"version":3,"file":"explainCommand.mjs","names":[],"sources":["../../src/commands/explainCommand.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\nimport { buildPersonaPrompt } from '@agimon-ai/doompi-config';\nimport type { HarnessContext } from '../services/index.ts';\nimport { buildSkillCatalog, counter } from '../adapters/skillCatalog.ts';\nimport type { HarnessOptions } from '../types/interfaces/index.ts';\nimport { BaseCommand } from './baseCommand.ts';\n\n/**\n * What the selection costs before the first prompt, in tokens.\n *\n * MCP tool schemas are deliberately absent: they come from the servers at\n * connect time, and pricing them here would mean spawning every configured\n * server and running a handshake on a command that is meant to be instant.\n * `startupTokens` is therefore a floor, not a total, and the rendering says so.\n */\nexport interface MatrixCost {\n /** The always-on skill block Pi puts in the system prompt. */\n skillPromptTokens: number;\n /** Skill bodies on disk, read only when a skill is invoked. */\n skillBodyTokens: number;\n /** The persona prompt, when a profile selected one. */\n personaTokens: number;\n}\n\nexport interface MatrixExplanation {\n majorMode: string;\n profile?: string;\n persona?: string;\n domains: string[];\n plugins: string[];\n layers: string[];\n hookGroups: string[];\n hooksEnabled: boolean;\n skillDirectories: string[];\n skillCount: number;\n agentCount: number;\n agentDirectories: string[];\n mcpConfigPath?: string;\n mcpServers: string[];\n mcpProxyUpstreams?: string[];\n mcpFiltered: boolean;\n cost?: MatrixCost;\n}\n\nfunction readMcpServers(configPath: string): Record<string, unknown> {\n const config = JSON.parse(fs.readFileSync(configPath, 'utf8')) as { mcpServers?: Record<string, unknown> };\n return config.mcpServers ?? {};\n}\n\n/**\n * Renders the resolved matrix for --explain. Composition spans three config\n * files, so this answers \"why is that loaded\" in one command instead of a\n * manual trace through domains, major modes, and plugin subsets.\n */\nexport function explainMatrix(explanation: MatrixExplanation): string {\n const section = (label: string, values: string[], empty = '(none)'): string =>\n `${label}:\\n${values.length === 0 ? ` ${empty}` : values.map((value) => ` ${value}`).join('\\n')}\\n`;\n\n return [\n `doompi resolved matrix\\n\\n`,\n `major mode: ${explanation.majorMode}\\n\\n`,\n section('profile', explanation.profile ? [explanation.profile] : [], '(none)'),\n '\\n',\n section('persona', explanation.persona ? [explanation.persona] : [], '(none)'),\n '\\n',\n section('domains (content)', explanation.domains),\n '\\n',\n section('layers (behavior, from the major mode)', explanation.layers, 'core only'),\n '\\n',\n section(\n 'hook groups from layers',\n explanation.hookGroups,\n explanation.hooksEnabled ? '(core groups only)' : '(hooks disabled)',\n ),\n '\\n',\n section(\n 'plugins',\n explanation.plugins.map((directory) => path.basename(directory)),\n ),\n '\\n',\n section(\n 'skill paths',\n explanation.skillDirectories.map((directory) => path.relative(process.cwd(), directory)),\n ),\n '\\n',\n section(\n explanation.mcpFiltered ? 'mcp servers (filtered by domain allowlist)' : 'mcp servers (unfiltered)',\n explanation.mcpServers,\n '(mcp disabled)',\n ),\n '\\n',\n explanation.mcpProxyUpstreams\n ? section('mcp proxy upstreams (filtered)', explanation.mcpProxyUpstreams)\n : 'mcp proxy upstreams:\\n (unfiltered, every upstream in mcp-config.yaml)\\n',\n '\\n',\n `skills: ${explanation.skillCount} (from ${explanation.skillDirectories.length} paths)\\n`,\n `agents: ${explanation.agentCount}\\n`,\n `mcp config: ${explanation.mcpConfigPath ?? '(disabled)'}\\n`,\n explanation.cost ? renderCost(explanation.cost) : '',\n ].join('');\n}\n\nconst TOKEN_COLUMN = 9;\n\nfunction tokenLine(label: string, tokens: number, note = ''): string {\n const row = ` ${label.padEnd(16)}${tokens.toLocaleString('en-US').padStart(TOKEN_COLUMN)}`;\n return `${note ? `${row} ${note}` : row}\\n`;\n}\n\n/**\n * The bill, rendered last so the sections above keep their order.\n *\n * Every figure is derived from files on disk, so two runs of the same selection\n * print the same numbers and a reader can reproduce them without trusting this\n * output.\n */\nfunction renderCost(cost: MatrixCost): string {\n const startup = cost.skillPromptTokens + cost.personaTokens;\n return [\n '\\ncontext cost (tokens)\\n',\n tokenLine('skills prompt', cost.skillPromptTokens, 'always on'),\n tokenLine('persona', cost.personaTokens, 'always on'),\n tokenLine('startup total', startup),\n tokenLine('skill bodies', cost.skillBodyTokens, 'read on demand'),\n '\\n Excludes MCP tool schemas, which the servers only report once connected,\\n',\n ' and skills contributed by extensions, which register after startup.\\n',\n ].join('');\n}\n\n/** Prints the fully resolved matrix instead of launching Pi. */\nexport class ExplainCommand extends BaseCommand {\n readonly name = 'explain';\n\n matches(options: HarnessOptions): boolean {\n return options.explain;\n }\n\n /**\n * Prices the selection from files on disk.\n *\n * `extensionSources` is empty because extensions publish their skill\n * directories over the session event bus, which has not started here. The\n * rendering names that gap rather than presenting the figure as a total.\n */\n private async cost(context: HarnessContext): Promise<MatrixCost | undefined> {\n const { options, resources } = context;\n try {\n const [catalog, countTokens] = await Promise.all([\n buildSkillCatalog({\n repoRoot: options.repoRoot,\n activeSkillDirectories: resources.skillDirectories,\n extensionSources: [],\n }),\n counter(),\n ]);\n const persona = context.personaDirectory\n ? buildPersonaPrompt(context.personaRoot ?? options.repoRoot, context.personaDirectory)\n : undefined;\n return {\n skillPromptTokens: catalog.promptTokens,\n skillBodyTokens: catalog.bodyTokens,\n personaTokens: persona ? countTokens(persona) : 0,\n };\n } catch (error) {\n // Pricing reads the skill files, so an unreadable one must not take the\n // whole explanation down: the resolved matrix is the point, the bill is\n // the extra. Reported rather than swallowed.\n const detail = error instanceof Error ? error.message : String(error);\n process.stderr.write(`[doompi] ${this.name}: could not price the selection: ${detail}\\n`);\n return undefined;\n }\n }\n\n async execute(context: HarnessContext): Promise<number> {\n const { options, resources, plugins, mcpAllowlist } = context;\n const cost = await this.cost(context);\n\n process.stdout.write(\n explainMatrix({\n cost,\n majorMode: options.majorMode,\n profile: context.profile,\n persona: context.personaDirectory,\n domains: options.domains,\n plugins: plugins.map((entry) => entry.directory),\n layers: context.selectedLayers,\n hookGroups: context.hookGroups,\n hooksEnabled: options.hooks,\n skillDirectories: resources.skillDirectories,\n skillCount: resources.skillCount,\n agentCount: resources.agentCount,\n agentDirectories: resources.agentDirectories,\n mcpConfigPath: resources.mcpConfigPath,\n // Read back from the generated config so this reports what Pi will\n // actually load, not what the allowlist intended.\n mcpServers: resources.mcpConfigPath ? Object.keys(readMcpServers(resources.mcpConfigPath)) : [],\n mcpProxyUpstreams: mcpAllowlist?.proxy,\n mcpFiltered: Boolean(mcpAllowlist),\n }),\n );\n return 0;\n }\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./baseCommand.cjs`),t=require(`./syncCommand.cjs`),n=require(`./buildCommand.cjs`),r=require(`./compatibilityCommand.cjs`),i=require(`./emitMcpCommand.cjs`),a=require(`./explainCommand.cjs`),o=require(`./initCommand.cjs`),s=require(`./launchCommand.cjs`);exports.BaseCommand=e.BaseCommand,exports.BuildCommand=n.BuildCommand,exports.CompatibilityCommand=r.CompatibilityCommand,exports.EmitMcpCommand=i.EmitMcpCommand,exports.ExplainCommand=a.ExplainCommand,exports.InitCommand=o.InitCommand,exports.LaunchCommand=s.LaunchCommand,exports.SyncCommand=t.SyncCommand,exports.collectDrift=t.collectDrift,exports.explainMatrix=a.explainMatrix,exports.formatBuildResult=n.formatBuildResult,exports.formatSyncResult=t.formatSyncResult,exports.recordedEnvironment=t.recordedEnvironment,exports.selectionEnvironment=t.selectionEnvironment,exports.toSelection=t.toSelection;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./baseCommand.cjs`),t=require(`./compatibilityCommand.cjs`),n=require(`./emitMcpCommand.cjs`),r=require(`./explainCommand.cjs`),i=require(`./initCommand.cjs`),a=require(`./launchCommand.cjs`),o=require(`./syncCommand.cjs`);exports.BaseCommand=e.BaseCommand,exports.CompatibilityCommand=t.CompatibilityCommand,exports.EmitMcpCommand=n.EmitMcpCommand,exports.ExplainCommand=r.ExplainCommand,exports.InitCommand=i.InitCommand,exports.LaunchCommand=a.LaunchCommand,exports.SyncCommand=o.SyncCommand,exports.collectDrift=o.collectDrift,exports.explainMatrix=r.explainMatrix,exports.formatSyncResult=o.formatSyncResult,exports.recordedEnvironment=o.recordedEnvironment,exports.selectionEnvironment=o.selectionEnvironment,exports.toSelection=o.toSelection;
@@ -2,8 +2,7 @@ import { BaseCommand } from "./baseCommand.cjs";
2
2
  import { CompatibilityCommand } from "./compatibilityCommand.cjs";
3
3
  import { EmitMcpCommand } from "./emitMcpCommand.cjs";
4
4
  import { ExplainCommand, MatrixExplanation, explainMatrix } from "./explainCommand.cjs";
5
- import { BuildCommand, BuildResult, formatBuildResult } from "./buildCommand.cjs";
6
5
  import { InitCommand } from "./initCommand.cjs";
7
6
  import { LaunchCommand } from "./launchCommand.cjs";
8
- import { SyncCommand, SyncResult, collectDrift, formatSyncResult, recordedEnvironment, selectionEnvironment, toSelection } from "./syncCommand.cjs";
9
- export { BaseCommand, BuildCommand, type BuildResult, CompatibilityCommand, EmitMcpCommand, ExplainCommand, InitCommand, LaunchCommand, type MatrixExplanation, SyncCommand, type SyncResult, collectDrift, explainMatrix, formatBuildResult, formatSyncResult, recordedEnvironment, selectionEnvironment, toSelection };
7
+ import { SyncCommand, SyncCommandOptions, SyncResult, SyncSettingsMode, collectDrift, formatSyncResult, recordedEnvironment, selectionEnvironment, toSelection } from "./syncCommand.cjs";
8
+ export { BaseCommand, CompatibilityCommand, EmitMcpCommand, ExplainCommand, InitCommand, LaunchCommand, type MatrixExplanation, SyncCommand, type SyncCommandOptions, type SyncResult, type SyncSettingsMode, collectDrift, explainMatrix, formatSyncResult, recordedEnvironment, selectionEnvironment, toSelection };
@@ -2,8 +2,7 @@ import { BaseCommand } from "./baseCommand.mjs";
2
2
  import { CompatibilityCommand } from "./compatibilityCommand.mjs";
3
3
  import { EmitMcpCommand } from "./emitMcpCommand.mjs";
4
4
  import { ExplainCommand, MatrixExplanation, explainMatrix } from "./explainCommand.mjs";
5
- import { BuildCommand, BuildResult, formatBuildResult } from "./buildCommand.mjs";
6
5
  import { InitCommand } from "./initCommand.mjs";
7
6
  import { LaunchCommand } from "./launchCommand.mjs";
8
- import { SyncCommand, SyncResult, collectDrift, formatSyncResult, recordedEnvironment, selectionEnvironment, toSelection } from "./syncCommand.mjs";
9
- export { BaseCommand, BuildCommand, type BuildResult, CompatibilityCommand, EmitMcpCommand, ExplainCommand, InitCommand, LaunchCommand, type MatrixExplanation, SyncCommand, type SyncResult, collectDrift, explainMatrix, formatBuildResult, formatSyncResult, recordedEnvironment, selectionEnvironment, toSelection };
7
+ import { SyncCommand, SyncCommandOptions, SyncResult, SyncSettingsMode, collectDrift, formatSyncResult, recordedEnvironment, selectionEnvironment, toSelection } from "./syncCommand.mjs";
8
+ export { BaseCommand, CompatibilityCommand, EmitMcpCommand, ExplainCommand, InitCommand, LaunchCommand, type MatrixExplanation, SyncCommand, type SyncCommandOptions, type SyncResult, type SyncSettingsMode, collectDrift, explainMatrix, formatSyncResult, recordedEnvironment, selectionEnvironment, toSelection };
@@ -1 +1 @@
1
- import{BaseCommand as e}from"./baseCommand.mjs";import{SyncCommand as t,collectDrift as n,formatSyncResult as r,recordedEnvironment as i,selectionEnvironment as a,toSelection as o}from"./syncCommand.mjs";import{BuildCommand as s,formatBuildResult as c}from"./buildCommand.mjs";import{CompatibilityCommand as l}from"./compatibilityCommand.mjs";import{EmitMcpCommand as u}from"./emitMcpCommand.mjs";import{ExplainCommand as d,explainMatrix as f}from"./explainCommand.mjs";import{InitCommand as p}from"./initCommand.mjs";import{LaunchCommand as m}from"./launchCommand.mjs";export{e as BaseCommand,s as BuildCommand,l as CompatibilityCommand,u as EmitMcpCommand,d as ExplainCommand,p as InitCommand,m as LaunchCommand,t as SyncCommand,n as collectDrift,f as explainMatrix,c as formatBuildResult,r as formatSyncResult,i as recordedEnvironment,a as selectionEnvironment,o as toSelection};
1
+ import{BaseCommand as e}from"./baseCommand.mjs";import{CompatibilityCommand as t}from"./compatibilityCommand.mjs";import{EmitMcpCommand as n}from"./emitMcpCommand.mjs";import{ExplainCommand as r,explainMatrix as i}from"./explainCommand.mjs";import{InitCommand as a}from"./initCommand.mjs";import{LaunchCommand as o}from"./launchCommand.mjs";import{SyncCommand as s,collectDrift as c,formatSyncResult as l,recordedEnvironment as u,selectionEnvironment as d,toSelection as f}from"./syncCommand.mjs";export{e as BaseCommand,t as CompatibilityCommand,n as EmitMcpCommand,r as ExplainCommand,a as InitCommand,o as LaunchCommand,s as SyncCommand,c as collectDrift,i as explainMatrix,l as formatSyncResult,u as recordedEnvironment,d as selectionEnvironment,f as toSelection};
@@ -1,3 +1,2 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../_virtual/_rolldown/runtime.cjs`);let t=require(`@agimon-ai/doompi-config`),n=require(`node:os`);n=e.__toESM(n,1);const r=`--force`;function i(e){return e.length===0?`(none)`:e.join(`, `)}function a(e){let t=[`Doom config directory: ${e.directory}`,`Created: ${i(e.created)}`,`Preserved: ${i(e.preserved)}`];return e.replaced.length>0&&t.push(`Replaced: ${i(e.replaced)}`),t.join(`
2
- `)}var o=class{name=`init`;matches(e){return e[0]===this.name}async execute(e,i=n.default.homedir(),o=process.stdout){let s=e.slice(1),c=s.find(e=>e!==r);if(c!==void 0)throw Error(`doompi init does not accept ${c}`);let l=(0,t.initializeGlobalDoomConfig)(i,{force:s.includes(r)});return o.write(`${a(l)}\n`),0}};exports.InitCommand=o;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../_virtual/_rolldown/runtime.cjs`);require(`../services/config/index.cjs`);const t=require(`../adapters/piSettings.cjs`),n=require(`../adapters/piExtensionAlias.cjs`),r=require(`./initPresenter.cjs`);let i=require(`node:fs`);i=e.__toESM(i,1);let a=require(`node:os`);a=e.__toESM(a,1);let o=require(`@agimon-ai/doompi-config`),s=require(`@agimon-ai/doompi-ui/theme`);const c=`--force`;function l(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 u(e,r){let a=t.piAgentDirectory(r,e),o=t.readPiSettings(a),c=t.piThemeDirectory(a);await i.default.promises.mkdir(c,{recursive:!0});let l=await(0,s.writeDefaultTheme)(c),u=n.writePiExtensionAlias(a);return{settingsPath:t.writePiSettings(a,{themePath:l,themeName:s.DEFAULT_THEME_NAME}),themePath:l,aliasPath:u,before:o,after:t.readPiSettings(a)}}var d=class{name=`init`;matches(e){return e[0]===this.name}async execute(e,n=a.default.homedir(),i=process.stdout,s=process.env){let d=e.slice(1),f=d.find(e=>e!==c);if(f!==void 0)throw Error(`doompi init does not accept ${f}`);let p=new r.InitPresenter(i,s);p.brand();let m=(0,o.globalDoomConfigDirectory)(n);p.stage(1,2,`WRITE CONFIGURATION`,m);let h;try{h=(0,o.initializeGlobalDoomConfig)(n,{force:d.includes(c)}),p.stageReady(`Configuration files are ready.`)}catch(e){throw p.stageFailed(`Configuration setup failed.`,[`Fix the reported path or permissions, then run doompi init again.`]),l(`writing configuration`,m,e)}let g=t.piAgentDirectory(s,n);p.stage(2,2,`REGISTER WITH PI`,g);let _;try{_=await u(n,s),p.stageReady(`Pi integration is ready.`)}catch(e){throw p.stageFailed(`Pi integration failed.`,[`Your DoomPi configuration remains at ${h.directory}.`,`Fix the reported settings or filesystem issue, then run doompi init again.`]),l(`registering with Pi`,g,e)}return p.complete(h,_),0}};exports.InitCommand=d;
3
2
  //# sourceMappingURL=initCommand.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"initCommand.cjs","names":["os"],"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":"wMAGA,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,EAAgBA,EAAAA,QAAG,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,GAAA,EAAA,EAAA,4BAAoC,EAAe,CAAE,MAAO,EAAM,SAAS,EAAW,CAAE,CAAC,CAE/F,OADA,EAAO,MAAM,GAAG,EAAiB,EAAO,CAAC,IAAI,CACtC"}
1
+ {"version":3,"file":"initCommand.cjs","names":["piAgentDirectory","readPiSettings","piThemeDirectory","fs","writePiExtensionAlias","writePiSettings","DEFAULT_THEME_NAME","os","InitPresenter"],"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":"mcAYA,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,EAAiBA,EAAAA,iBAAiB,EAAa,EAAc,CAC7D,EAASC,EAAAA,eAAe,EAAe,CACvC,EAAiBC,EAAAA,iBAAiB,EAAe,CACvD,MAAMC,EAAAA,QAAG,SAAS,MAAM,EAAgB,CAAE,UAAW,GAAM,CAAC,CAC5D,IAAM,EAAY,MAAA,EAAA,EAAA,mBAAwB,EAAe,CACnD,EAAYC,EAAAA,sBAAsB,EAAe,CAEvD,MAAO,CACL,aAFmBC,EAAAA,gBAAgB,EAAgB,CAAE,YAAW,UAAWC,EAAAA,mBAAoB,CAEnF,CACZ,YACA,YACA,SACA,MAAOL,EAAAA,eAAe,EAAe,CACtC,CAIH,IAAa,EAAb,KAAyB,CACvB,KAAgB,OAEhB,QAAQ,EAAyB,CAC/B,OAAO,EAAK,KAAO,KAAK,KAG1B,MAAM,QACJ,EACA,EAAgBM,EAAAA,QAAG,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,IAAIC,EAAAA,cAAc,EAAQ,EAAY,CACxD,EAAU,OAAO,CAEjB,IAAM,GAAA,EAAA,EAAA,2BAA4C,EAAc,CAChE,EAAU,MAAM,EAAG,EAAmB,sBAAuB,EAAgB,CAC7E,IAAI,EACJ,GAAI,CACF,GAAA,EAAA,EAAA,4BAA0C,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,EAAiBR,EAAAA,iBAAiB,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"}
@@ -1,10 +1,11 @@
1
+ import { InitOutput } from "./initPresenter.cjs";
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.cts","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.cts","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"}