@rpamis/comet 0.3.9 → 0.4.0-beta.2

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 (623) hide show
  1. package/README.md +371 -222
  2. package/assets/manifest.json +33 -12
  3. package/assets/skills/comet/SKILL.md +87 -102
  4. package/assets/skills/comet/reference/auto-transition.md +1 -1
  5. package/assets/skills/comet/reference/comet-yaml-fields.md +11 -4
  6. package/assets/skills/comet/reference/context-recovery.md +12 -2
  7. package/assets/skills/comet/reference/debug-gate.md +17 -1
  8. package/assets/skills/comet/reference/decision-point.md +13 -2
  9. package/assets/skills/comet/reference/intent-frame.md +74 -0
  10. package/assets/skills/comet/reference/scripts.md +69 -0
  11. package/assets/skills/comet/reference/subagent-dispatch.md +79 -23
  12. package/assets/skills/comet/rules/comet-phase-guard.en.md +18 -10
  13. package/assets/skills/comet/rules/comet-phase-guard.md +17 -10
  14. package/assets/skills/comet/runtime/classic/checks.yaml +6 -0
  15. package/assets/skills/comet/runtime/classic/guardrails.yaml +13 -0
  16. package/assets/skills/comet/runtime/classic/skill.yaml +122 -0
  17. package/assets/skills/comet/scripts/comet-archive.mjs +3 -0
  18. package/assets/skills/comet/scripts/comet-env.mjs +15 -0
  19. package/assets/skills/comet/scripts/comet-guard.mjs +3 -0
  20. package/assets/skills/comet/scripts/comet-handoff.mjs +3 -0
  21. package/assets/skills/comet/scripts/comet-hook-guard.mjs +3 -0
  22. package/assets/skills/comet/scripts/comet-intent.mjs +3 -0
  23. package/assets/skills/comet/scripts/comet-runtime.mjs +12941 -0
  24. package/assets/skills/comet/scripts/comet-state.mjs +3 -0
  25. package/assets/skills/comet/scripts/comet-yaml-validate.mjs +3 -0
  26. package/assets/skills/comet-any/SKILL.md +118 -0
  27. package/assets/skills/comet-any/reference/authored-zone-example.md +100 -0
  28. package/assets/skills/comet-any/reference/authoring-protocol.json +91 -0
  29. package/assets/skills/comet-any/reference/authoring-subagents.md +102 -0
  30. package/assets/skills/comet-any/reference/bundle-authoring.md +166 -0
  31. package/assets/skills/comet-any/reference/eval-provider.md +83 -0
  32. package/assets/skills/comet-any/reference/subagents/pause-points-author.md +75 -0
  33. package/assets/skills/comet-any/reference/subagents/reference-author.md +77 -0
  34. package/assets/skills/comet-any/reference/subagents/script-author.md +81 -0
  35. package/assets/skills/comet-any/reference/subagents/skill-core-author.md +129 -0
  36. package/assets/skills/comet-any/reference/subagents/skill-reviewer.md +124 -0
  37. package/assets/skills/comet-any/reference/subagents/workflow-entry-author.md +100 -0
  38. package/assets/skills/comet-archive/SKILL.md +25 -15
  39. package/assets/skills/comet-build/SKILL.md +51 -40
  40. package/assets/skills/comet-design/SKILL.md +14 -18
  41. package/assets/skills/comet-hotfix/SKILL.md +33 -43
  42. package/assets/skills/comet-open/SKILL.md +10 -20
  43. package/assets/skills/comet-tweak/SKILL.md +71 -65
  44. package/assets/skills/comet-verify/SKILL.md +31 -35
  45. package/assets/skills-zh/comet/SKILL.md +87 -101
  46. package/assets/skills-zh/comet/reference/auto-transition.md +3 -3
  47. package/assets/skills-zh/comet/reference/comet-yaml-fields.md +8 -4
  48. package/assets/skills-zh/comet/reference/context-recovery.md +11 -1
  49. package/assets/skills-zh/comet/reference/debug-gate.md +17 -1
  50. package/assets/skills-zh/comet/reference/decision-point.md +13 -2
  51. package/assets/skills-zh/comet/reference/intent-frame.md +74 -0
  52. package/assets/skills-zh/comet/reference/scripts.md +69 -0
  53. package/assets/skills-zh/comet/reference/subagent-dispatch.md +67 -18
  54. package/assets/skills-zh/comet/runtime/classic/checks.yaml +6 -0
  55. package/assets/skills-zh/comet/runtime/classic/guardrails.yaml +13 -0
  56. package/assets/skills-zh/comet/runtime/classic/skill.yaml +122 -0
  57. package/assets/skills-zh/comet-any/SKILL.md +118 -0
  58. package/assets/skills-zh/comet-any/reference/authored-zone-example.md +100 -0
  59. package/assets/skills-zh/comet-any/reference/authoring-protocol.json +91 -0
  60. package/assets/skills-zh/comet-any/reference/authoring-subagents.md +107 -0
  61. package/assets/skills-zh/comet-any/reference/bundle-authoring.md +166 -0
  62. package/assets/skills-zh/comet-any/reference/eval-provider.md +66 -0
  63. package/assets/skills-zh/comet-any/reference/subagents/pause-points-author.md +79 -0
  64. package/assets/skills-zh/comet-any/reference/subagents/reference-author.md +81 -0
  65. package/assets/skills-zh/comet-any/reference/subagents/script-author.md +84 -0
  66. package/assets/skills-zh/comet-any/reference/subagents/skill-core-author.md +129 -0
  67. package/assets/skills-zh/comet-any/reference/subagents/skill-reviewer.md +124 -0
  68. package/assets/skills-zh/comet-any/reference/subagents/workflow-entry-author.md +98 -0
  69. package/assets/skills-zh/comet-archive/SKILL.md +25 -15
  70. package/assets/skills-zh/comet-build/SKILL.md +41 -43
  71. package/assets/skills-zh/comet-design/SKILL.md +14 -18
  72. package/assets/skills-zh/comet-hotfix/SKILL.md +37 -47
  73. package/assets/skills-zh/comet-open/SKILL.md +12 -22
  74. package/assets/skills-zh/comet-tweak/SKILL.md +70 -63
  75. package/assets/skills-zh/comet-verify/SKILL.md +28 -30
  76. package/bin/comet.js +1 -1
  77. package/dist/{cli → app/cli}/index.d.ts.map +1 -1
  78. package/dist/app/cli/index.js +430 -0
  79. package/dist/app/cli/index.js.map +1 -0
  80. package/dist/app/commands/bundle.d.ts +51 -0
  81. package/dist/app/commands/bundle.d.ts.map +1 -0
  82. package/dist/app/commands/bundle.js +387 -0
  83. package/dist/app/commands/bundle.js.map +1 -0
  84. package/dist/app/commands/creator.d.ts +14 -0
  85. package/dist/app/commands/creator.d.ts.map +1 -0
  86. package/dist/app/commands/creator.js +82 -0
  87. package/dist/app/commands/creator.js.map +1 -0
  88. package/dist/app/commands/dashboard.d.ts +16 -0
  89. package/dist/app/commands/dashboard.d.ts.map +1 -0
  90. package/dist/app/commands/dashboard.js +53 -0
  91. package/dist/app/commands/dashboard.js.map +1 -0
  92. package/dist/{commands → app/commands}/doctor.d.ts +1 -1
  93. package/dist/app/commands/doctor.d.ts.map +1 -0
  94. package/dist/{commands → app/commands}/doctor.js +110 -60
  95. package/dist/app/commands/doctor.js.map +1 -0
  96. package/dist/app/commands/eval.d.ts +17 -0
  97. package/dist/app/commands/eval.d.ts.map +1 -0
  98. package/dist/app/commands/eval.js +169 -0
  99. package/dist/app/commands/eval.js.map +1 -0
  100. package/dist/app/commands/i18n.d.ts +4 -0
  101. package/dist/app/commands/i18n.d.ts.map +1 -0
  102. package/dist/{commands → app/commands}/i18n.js +22 -2
  103. package/dist/app/commands/i18n.js.map +1 -0
  104. package/dist/{commands → app/commands}/init.d.ts +3 -1
  105. package/dist/app/commands/init.d.ts.map +1 -0
  106. package/dist/{commands → app/commands}/init.js +82 -32
  107. package/dist/app/commands/init.js.map +1 -0
  108. package/dist/app/commands/platform-select-prompt.d.ts +38 -0
  109. package/dist/app/commands/platform-select-prompt.d.ts.map +1 -0
  110. package/dist/app/commands/platform-select-prompt.js +141 -0
  111. package/dist/app/commands/platform-select-prompt.js.map +1 -0
  112. package/dist/app/commands/publish.d.ts +7 -0
  113. package/dist/app/commands/publish.d.ts.map +1 -0
  114. package/dist/app/commands/publish.js +14 -0
  115. package/dist/app/commands/publish.js.map +1 -0
  116. package/dist/app/commands/skill.d.ts +23 -0
  117. package/dist/app/commands/skill.d.ts.map +1 -0
  118. package/dist/app/commands/skill.js +208 -0
  119. package/dist/app/commands/skill.js.map +1 -0
  120. package/dist/app/commands/status.d.ts.map +1 -0
  121. package/dist/app/commands/status.js +159 -0
  122. package/dist/app/commands/status.js.map +1 -0
  123. package/dist/{commands → app/commands}/uninstall.d.ts +1 -1
  124. package/dist/app/commands/uninstall.d.ts.map +1 -0
  125. package/dist/{commands → app/commands}/uninstall.js +3 -3
  126. package/dist/app/commands/uninstall.js.map +1 -0
  127. package/dist/{commands → app/commands}/update.d.ts +4 -3
  128. package/dist/app/commands/update.d.ts.map +1 -0
  129. package/dist/{commands → app/commands}/update.js +43 -15
  130. package/dist/app/commands/update.js.map +1 -0
  131. package/dist/config/repository-layout.json +98 -0
  132. package/dist/domains/bundle/authoring.d.ts +82 -0
  133. package/dist/domains/bundle/authoring.d.ts.map +1 -0
  134. package/dist/domains/bundle/authoring.js +185 -0
  135. package/dist/domains/bundle/authoring.js.map +1 -0
  136. package/dist/domains/bundle/bundle-platform.d.ts +39 -0
  137. package/dist/domains/bundle/bundle-platform.d.ts.map +1 -0
  138. package/dist/domains/bundle/bundle-platform.js +287 -0
  139. package/dist/domains/bundle/bundle-platform.js.map +1 -0
  140. package/dist/domains/bundle/candidates.d.ts +29 -0
  141. package/dist/domains/bundle/candidates.d.ts.map +1 -0
  142. package/dist/domains/bundle/candidates.js +37 -0
  143. package/dist/domains/bundle/candidates.js.map +1 -0
  144. package/dist/domains/bundle/compatibility-benchmark.d.ts +12 -0
  145. package/dist/domains/bundle/compatibility-benchmark.d.ts.map +1 -0
  146. package/dist/domains/bundle/compatibility-benchmark.js +224 -0
  147. package/dist/domains/bundle/compatibility-benchmark.js.map +1 -0
  148. package/dist/domains/bundle/compiler.d.ts +5 -0
  149. package/dist/domains/bundle/compiler.d.ts.map +1 -0
  150. package/dist/domains/bundle/compiler.js +106 -0
  151. package/dist/domains/bundle/compiler.js.map +1 -0
  152. package/dist/domains/bundle/distribute.d.ts +33 -0
  153. package/dist/domains/bundle/distribute.d.ts.map +1 -0
  154. package/dist/domains/bundle/distribute.js +166 -0
  155. package/dist/domains/bundle/distribute.js.map +1 -0
  156. package/dist/domains/bundle/draft.d.ts +19 -0
  157. package/dist/domains/bundle/draft.d.ts.map +1 -0
  158. package/dist/domains/bundle/draft.js +82 -0
  159. package/dist/domains/bundle/draft.js.map +1 -0
  160. package/dist/domains/bundle/eval.d.ts +36 -0
  161. package/dist/domains/bundle/eval.d.ts.map +1 -0
  162. package/dist/domains/bundle/eval.js +501 -0
  163. package/dist/domains/bundle/eval.js.map +1 -0
  164. package/dist/domains/bundle/factory-compose.d.ts +12 -0
  165. package/dist/domains/bundle/factory-compose.d.ts.map +1 -0
  166. package/dist/domains/bundle/factory-compose.js +309 -0
  167. package/dist/domains/bundle/factory-compose.js.map +1 -0
  168. package/dist/domains/bundle/factory-guide.d.ts +37 -0
  169. package/dist/domains/bundle/factory-guide.d.ts.map +1 -0
  170. package/dist/domains/bundle/factory-guide.js +96 -0
  171. package/dist/domains/bundle/factory-guide.js.map +1 -0
  172. package/dist/domains/bundle/factory-plan.d.ts +48 -0
  173. package/dist/domains/bundle/factory-plan.d.ts.map +1 -0
  174. package/dist/domains/bundle/factory-plan.js +172 -0
  175. package/dist/domains/bundle/factory-plan.js.map +1 -0
  176. package/dist/domains/bundle/factory-proposal.d.ts +31 -0
  177. package/dist/domains/bundle/factory-proposal.d.ts.map +1 -0
  178. package/dist/domains/bundle/factory-proposal.js +225 -0
  179. package/dist/domains/bundle/factory-proposal.js.map +1 -0
  180. package/dist/domains/bundle/factory-resolve.d.ts +11 -0
  181. package/dist/domains/bundle/factory-resolve.d.ts.map +1 -0
  182. package/dist/domains/bundle/factory-resolve.js +121 -0
  183. package/dist/domains/bundle/factory-resolve.js.map +1 -0
  184. package/dist/domains/bundle/factory.d.ts +17 -0
  185. package/dist/domains/bundle/factory.d.ts.map +1 -0
  186. package/dist/domains/bundle/factory.js +511 -0
  187. package/dist/domains/bundle/factory.js.map +1 -0
  188. package/dist/domains/bundle/hash.d.ts +3 -0
  189. package/dist/domains/bundle/hash.d.ts.map +1 -0
  190. package/dist/domains/bundle/hash.js +72 -0
  191. package/dist/domains/bundle/hash.js.map +1 -0
  192. package/dist/domains/bundle/load.d.ts +4 -0
  193. package/dist/domains/bundle/load.d.ts.map +1 -0
  194. package/dist/domains/bundle/load.js +355 -0
  195. package/dist/domains/bundle/load.js.map +1 -0
  196. package/dist/domains/bundle/next-action.d.ts +37 -0
  197. package/dist/domains/bundle/next-action.d.ts.map +1 -0
  198. package/dist/domains/bundle/next-action.js +185 -0
  199. package/dist/domains/bundle/next-action.js.map +1 -0
  200. package/dist/domains/bundle/platform.d.ts +21 -0
  201. package/dist/domains/bundle/platform.d.ts.map +1 -0
  202. package/dist/domains/bundle/platform.js +170 -0
  203. package/dist/domains/bundle/platform.js.map +1 -0
  204. package/dist/domains/bundle/preferences.d.ts +11 -0
  205. package/dist/domains/bundle/preferences.d.ts.map +1 -0
  206. package/dist/domains/bundle/preferences.js +17 -0
  207. package/dist/domains/bundle/preferences.js.map +1 -0
  208. package/dist/domains/bundle/publish.d.ts +14 -0
  209. package/dist/domains/bundle/publish.d.ts.map +1 -0
  210. package/dist/domains/bundle/publish.js +159 -0
  211. package/dist/domains/bundle/publish.js.map +1 -0
  212. package/dist/domains/bundle/readiness-user-summary.d.ts +25 -0
  213. package/dist/domains/bundle/readiness-user-summary.d.ts.map +1 -0
  214. package/dist/domains/bundle/readiness-user-summary.js +186 -0
  215. package/dist/domains/bundle/readiness-user-summary.js.map +1 -0
  216. package/dist/domains/bundle/review-summary.d.ts +36 -0
  217. package/dist/domains/bundle/review-summary.d.ts.map +1 -0
  218. package/dist/domains/bundle/review-summary.js +348 -0
  219. package/dist/domains/bundle/review-summary.js.map +1 -0
  220. package/dist/domains/bundle/state.d.ts +7 -0
  221. package/dist/domains/bundle/state.d.ts.map +1 -0
  222. package/dist/domains/bundle/state.js +132 -0
  223. package/dist/domains/bundle/state.js.map +1 -0
  224. package/dist/domains/bundle/types.d.ts +347 -0
  225. package/dist/domains/bundle/types.d.ts.map +1 -0
  226. package/dist/domains/bundle/types.js.map +1 -0
  227. package/dist/domains/bundle/user-facing.d.ts +48 -0
  228. package/dist/domains/bundle/user-facing.d.ts.map +1 -0
  229. package/dist/domains/bundle/user-facing.js +73 -0
  230. package/dist/domains/bundle/user-facing.js.map +1 -0
  231. package/dist/domains/bundle/validate.d.ts +5 -0
  232. package/dist/domains/bundle/validate.d.ts.map +1 -0
  233. package/dist/domains/bundle/validate.js +292 -0
  234. package/dist/domains/bundle/validate.js.map +1 -0
  235. package/dist/domains/comet-classic/classic-archive-entry.d.ts +2 -0
  236. package/dist/domains/comet-classic/classic-archive-entry.d.ts.map +1 -0
  237. package/dist/domains/comet-classic/classic-archive-entry.js +4 -0
  238. package/dist/domains/comet-classic/classic-archive-entry.js.map +1 -0
  239. package/dist/domains/comet-classic/classic-archive.d.ts +3 -0
  240. package/dist/domains/comet-classic/classic-archive.d.ts.map +1 -0
  241. package/dist/domains/comet-classic/classic-archive.js +392 -0
  242. package/dist/domains/comet-classic/classic-archive.js.map +1 -0
  243. package/dist/domains/comet-classic/classic-cli.d.ts +15 -0
  244. package/dist/domains/comet-classic/classic-cli.d.ts.map +1 -0
  245. package/dist/domains/comet-classic/classic-cli.js +94 -0
  246. package/dist/domains/comet-classic/classic-cli.js.map +1 -0
  247. package/dist/domains/comet-classic/classic-diagnostics.d.ts +16 -0
  248. package/dist/domains/comet-classic/classic-diagnostics.d.ts.map +1 -0
  249. package/dist/domains/comet-classic/classic-diagnostics.js +57 -0
  250. package/dist/domains/comet-classic/classic-diagnostics.js.map +1 -0
  251. package/dist/domains/comet-classic/classic-evidence.d.ts +10 -0
  252. package/dist/domains/comet-classic/classic-evidence.d.ts.map +1 -0
  253. package/dist/domains/comet-classic/classic-evidence.js +114 -0
  254. package/dist/domains/comet-classic/classic-evidence.js.map +1 -0
  255. package/dist/domains/comet-classic/classic-guard-entry.d.ts +2 -0
  256. package/dist/domains/comet-classic/classic-guard-entry.d.ts.map +1 -0
  257. package/dist/domains/comet-classic/classic-guard-entry.js +4 -0
  258. package/dist/domains/comet-classic/classic-guard-entry.js.map +1 -0
  259. package/dist/domains/comet-classic/classic-guard.d.ts +3 -0
  260. package/dist/domains/comet-classic/classic-guard.d.ts.map +1 -0
  261. package/dist/domains/comet-classic/classic-guard.js +833 -0
  262. package/dist/domains/comet-classic/classic-guard.js.map +1 -0
  263. package/dist/domains/comet-classic/classic-handoff-entry.d.ts +2 -0
  264. package/dist/domains/comet-classic/classic-handoff-entry.d.ts.map +1 -0
  265. package/dist/domains/comet-classic/classic-handoff-entry.js +4 -0
  266. package/dist/domains/comet-classic/classic-handoff-entry.js.map +1 -0
  267. package/dist/domains/comet-classic/classic-handoff.d.ts +3 -0
  268. package/dist/domains/comet-classic/classic-handoff.d.ts.map +1 -0
  269. package/dist/domains/comet-classic/classic-handoff.js +478 -0
  270. package/dist/domains/comet-classic/classic-handoff.js.map +1 -0
  271. package/dist/domains/comet-classic/classic-hook-guard-entry.d.ts +2 -0
  272. package/dist/domains/comet-classic/classic-hook-guard-entry.d.ts.map +1 -0
  273. package/dist/domains/comet-classic/classic-hook-guard-entry.js +4 -0
  274. package/dist/domains/comet-classic/classic-hook-guard-entry.js.map +1 -0
  275. package/dist/domains/comet-classic/classic-hook-guard.d.ts +3 -0
  276. package/dist/domains/comet-classic/classic-hook-guard.d.ts.map +1 -0
  277. package/dist/domains/comet-classic/classic-hook-guard.js +382 -0
  278. package/dist/domains/comet-classic/classic-hook-guard.js.map +1 -0
  279. package/dist/domains/comet-classic/classic-intent-command.d.ts +3 -0
  280. package/dist/domains/comet-classic/classic-intent-command.d.ts.map +1 -0
  281. package/dist/domains/comet-classic/classic-intent-command.js +40 -0
  282. package/dist/domains/comet-classic/classic-intent-command.js.map +1 -0
  283. package/dist/domains/comet-classic/classic-intent-entry.d.ts +2 -0
  284. package/dist/domains/comet-classic/classic-intent-entry.d.ts.map +1 -0
  285. package/dist/domains/comet-classic/classic-intent-entry.js +4 -0
  286. package/dist/domains/comet-classic/classic-intent-entry.js.map +1 -0
  287. package/dist/domains/comet-classic/classic-intent.d.ts +79 -0
  288. package/dist/domains/comet-classic/classic-intent.d.ts.map +1 -0
  289. package/dist/domains/comet-classic/classic-intent.js +307 -0
  290. package/dist/domains/comet-classic/classic-intent.js.map +1 -0
  291. package/dist/domains/comet-classic/classic-migrate.d.ts +18 -0
  292. package/dist/domains/comet-classic/classic-migrate.d.ts.map +1 -0
  293. package/dist/domains/comet-classic/classic-migrate.js +184 -0
  294. package/dist/domains/comet-classic/classic-migrate.js.map +1 -0
  295. package/dist/domains/comet-classic/classic-paths.d.ts +8 -0
  296. package/dist/domains/comet-classic/classic-paths.d.ts.map +1 -0
  297. package/dist/domains/comet-classic/classic-paths.js +61 -0
  298. package/dist/domains/comet-classic/classic-paths.js.map +1 -0
  299. package/dist/domains/comet-classic/classic-resolver.d.ts +10 -0
  300. package/dist/domains/comet-classic/classic-resolver.d.ts.map +1 -0
  301. package/dist/domains/comet-classic/classic-resolver.js +89 -0
  302. package/dist/domains/comet-classic/classic-resolver.js.map +1 -0
  303. package/dist/domains/comet-classic/classic-runtime-evals.d.ts +9 -0
  304. package/dist/domains/comet-classic/classic-runtime-evals.d.ts.map +1 -0
  305. package/dist/domains/comet-classic/classic-runtime-evals.js +45 -0
  306. package/dist/domains/comet-classic/classic-runtime-evals.js.map +1 -0
  307. package/dist/domains/comet-classic/classic-runtime-run.d.ts +7 -0
  308. package/dist/domains/comet-classic/classic-runtime-run.d.ts.map +1 -0
  309. package/dist/domains/comet-classic/classic-runtime-run.js +105 -0
  310. package/dist/domains/comet-classic/classic-runtime-run.js.map +1 -0
  311. package/dist/domains/comet-classic/classic-script-entry.d.ts +3 -0
  312. package/dist/domains/comet-classic/classic-script-entry.d.ts.map +1 -0
  313. package/dist/domains/comet-classic/classic-script-entry.js +31 -0
  314. package/dist/domains/comet-classic/classic-script-entry.js.map +1 -0
  315. package/dist/domains/comet-classic/classic-state-command.d.ts +3 -0
  316. package/dist/domains/comet-classic/classic-state-command.d.ts.map +1 -0
  317. package/dist/domains/comet-classic/classic-state-command.js +984 -0
  318. package/dist/domains/comet-classic/classic-state-command.js.map +1 -0
  319. package/dist/domains/comet-classic/classic-state-entry.d.ts +2 -0
  320. package/dist/domains/comet-classic/classic-state-entry.d.ts.map +1 -0
  321. package/dist/domains/comet-classic/classic-state-entry.js +4 -0
  322. package/dist/domains/comet-classic/classic-state-entry.js.map +1 -0
  323. package/dist/domains/comet-classic/classic-state-events.d.ts +18 -0
  324. package/dist/domains/comet-classic/classic-state-events.d.ts.map +1 -0
  325. package/dist/domains/comet-classic/classic-state-events.js +15 -0
  326. package/dist/domains/comet-classic/classic-state-events.js.map +1 -0
  327. package/dist/domains/comet-classic/classic-state.d.ts +69 -0
  328. package/dist/domains/comet-classic/classic-state.d.ts.map +1 -0
  329. package/dist/domains/comet-classic/classic-state.js +238 -0
  330. package/dist/domains/comet-classic/classic-state.js.map +1 -0
  331. package/dist/domains/comet-classic/classic-store.d.ts +7 -0
  332. package/dist/domains/comet-classic/classic-store.d.ts.map +1 -0
  333. package/dist/domains/comet-classic/classic-store.js +127 -0
  334. package/dist/domains/comet-classic/classic-store.js.map +1 -0
  335. package/dist/domains/comet-classic/classic-transitions.d.ts +24 -0
  336. package/dist/domains/comet-classic/classic-transitions.d.ts.map +1 -0
  337. package/dist/domains/comet-classic/classic-transitions.js +124 -0
  338. package/dist/domains/comet-classic/classic-transitions.js.map +1 -0
  339. package/dist/domains/comet-classic/classic-validate-command.d.ts +3 -0
  340. package/dist/domains/comet-classic/classic-validate-command.d.ts.map +1 -0
  341. package/dist/domains/comet-classic/classic-validate-command.js +154 -0
  342. package/dist/domains/comet-classic/classic-validate-command.js.map +1 -0
  343. package/dist/domains/comet-classic/classic-validate-entry.d.ts +2 -0
  344. package/dist/domains/comet-classic/classic-validate-entry.d.ts.map +1 -0
  345. package/dist/domains/comet-classic/classic-validate-entry.js +4 -0
  346. package/dist/domains/comet-classic/classic-validate-entry.js.map +1 -0
  347. package/dist/domains/comet-classic/index.d.ts +20 -0
  348. package/dist/domains/comet-classic/index.d.ts.map +1 -0
  349. package/dist/domains/comet-classic/index.js +20 -0
  350. package/dist/domains/comet-classic/index.js.map +1 -0
  351. package/dist/domains/dashboard/collector.d.ts +12 -0
  352. package/dist/domains/dashboard/collector.d.ts.map +1 -0
  353. package/dist/domains/dashboard/collector.js +475 -0
  354. package/dist/domains/dashboard/collector.js.map +1 -0
  355. package/dist/domains/dashboard/git.d.ts +8 -0
  356. package/dist/domains/dashboard/git.d.ts.map +1 -0
  357. package/dist/domains/dashboard/git.js +69 -0
  358. package/dist/domains/dashboard/git.js.map +1 -0
  359. package/dist/domains/dashboard/next-action.d.ts +17 -0
  360. package/dist/domains/dashboard/next-action.d.ts.map +1 -0
  361. package/dist/domains/dashboard/next-action.js +83 -0
  362. package/dist/domains/dashboard/next-action.js.map +1 -0
  363. package/dist/domains/dashboard/open-browser.d.ts +9 -0
  364. package/dist/domains/dashboard/open-browser.d.ts.map +1 -0
  365. package/dist/domains/dashboard/open-browser.js +40 -0
  366. package/dist/domains/dashboard/open-browser.js.map +1 -0
  367. package/dist/domains/dashboard/risk.d.ts +24 -0
  368. package/dist/domains/dashboard/risk.d.ts.map +1 -0
  369. package/dist/domains/dashboard/risk.js +97 -0
  370. package/dist/domains/dashboard/risk.js.map +1 -0
  371. package/dist/domains/dashboard/server.d.ts +21 -0
  372. package/dist/domains/dashboard/server.d.ts.map +1 -0
  373. package/dist/domains/dashboard/server.js +149 -0
  374. package/dist/domains/dashboard/server.js.map +1 -0
  375. package/dist/domains/dashboard/task-parser.d.ts +13 -0
  376. package/dist/domains/dashboard/task-parser.d.ts.map +1 -0
  377. package/dist/domains/dashboard/task-parser.js +82 -0
  378. package/dist/domains/dashboard/task-parser.js.map +1 -0
  379. package/dist/domains/dashboard/types.d.ts +122 -0
  380. package/dist/domains/dashboard/types.d.ts.map +1 -0
  381. package/dist/domains/dashboard/types.js +10 -0
  382. package/dist/domains/dashboard/types.js.map +1 -0
  383. package/dist/domains/dashboard/verify-parser.d.ts +18 -0
  384. package/dist/domains/dashboard/verify-parser.d.ts.map +1 -0
  385. package/dist/domains/dashboard/verify-parser.js +94 -0
  386. package/dist/domains/dashboard/verify-parser.js.map +1 -0
  387. package/dist/domains/dashboard/web/assets/demo-DQyfozbi.js +1 -0
  388. package/dist/domains/dashboard/web/assets/index-BcO3_QlT.css +1 -0
  389. package/dist/domains/dashboard/web/assets/index-CjU3VXVu.js +22 -0
  390. package/dist/domains/dashboard/web/favicon.png +0 -0
  391. package/dist/domains/dashboard/web/index.html +16 -0
  392. package/dist/domains/dashboard/yaml.d.ts +13 -0
  393. package/dist/domains/dashboard/yaml.d.ts.map +1 -0
  394. package/dist/domains/dashboard/yaml.js +61 -0
  395. package/dist/domains/dashboard/yaml.js.map +1 -0
  396. package/dist/domains/engine/evals.d.ts +4 -0
  397. package/dist/domains/engine/evals.d.ts.map +1 -0
  398. package/dist/domains/engine/evals.js +25 -0
  399. package/dist/domains/engine/evals.js.map +1 -0
  400. package/dist/domains/engine/guardrails.d.ts +10 -0
  401. package/dist/domains/engine/guardrails.d.ts.map +1 -0
  402. package/dist/domains/engine/guardrails.js +25 -0
  403. package/dist/domains/engine/guardrails.js.map +1 -0
  404. package/dist/domains/engine/loop.d.ts +15 -0
  405. package/dist/domains/engine/loop.d.ts.map +1 -0
  406. package/dist/domains/engine/loop.js +126 -0
  407. package/dist/domains/engine/loop.js.map +1 -0
  408. package/dist/domains/engine/manual-run.d.ts +30 -0
  409. package/dist/domains/engine/manual-run.d.ts.map +1 -0
  410. package/dist/domains/engine/manual-run.js +184 -0
  411. package/dist/domains/engine/manual-run.js.map +1 -0
  412. package/dist/domains/engine/resolver.d.ts +20 -0
  413. package/dist/domains/engine/resolver.d.ts.map +1 -0
  414. package/dist/domains/engine/resolver.js +36 -0
  415. package/dist/domains/engine/resolver.js.map +1 -0
  416. package/dist/domains/engine/run-store.d.ts +13 -0
  417. package/dist/domains/engine/run-store.d.ts.map +1 -0
  418. package/dist/domains/engine/run-store.js +100 -0
  419. package/dist/domains/engine/run-store.js.map +1 -0
  420. package/dist/domains/engine/runtime-types.d.ts +11 -0
  421. package/dist/domains/engine/runtime-types.d.ts.map +1 -0
  422. package/dist/domains/engine/runtime-types.js +2 -0
  423. package/dist/domains/engine/runtime-types.js.map +1 -0
  424. package/dist/domains/engine/standalone-run.d.ts +13 -0
  425. package/dist/domains/engine/standalone-run.d.ts.map +1 -0
  426. package/dist/domains/engine/standalone-run.js +27 -0
  427. package/dist/domains/engine/standalone-run.js.map +1 -0
  428. package/dist/domains/engine/state.d.ts +10 -0
  429. package/dist/domains/engine/state.d.ts.map +1 -0
  430. package/dist/domains/engine/state.js +160 -0
  431. package/dist/domains/engine/state.js.map +1 -0
  432. package/dist/domains/engine/types.d.ts +51 -0
  433. package/dist/domains/engine/types.d.ts.map +1 -0
  434. package/dist/domains/engine/types.js +2 -0
  435. package/dist/domains/engine/types.js.map +1 -0
  436. package/dist/domains/eval/index.d.ts +7 -0
  437. package/dist/domains/eval/index.d.ts.map +1 -0
  438. package/dist/domains/eval/index.js +11 -0
  439. package/dist/domains/eval/index.js.map +1 -0
  440. package/dist/domains/eval/repository-benchmarks.d.ts +6 -0
  441. package/dist/domains/eval/repository-benchmarks.d.ts.map +1 -0
  442. package/dist/domains/eval/repository-benchmarks.js +10 -0
  443. package/dist/domains/eval/repository-benchmarks.js.map +1 -0
  444. package/dist/domains/factory/artifacts.d.ts +53 -0
  445. package/dist/domains/factory/artifacts.d.ts.map +1 -0
  446. package/dist/domains/factory/artifacts.js +8 -0
  447. package/dist/domains/factory/artifacts.js.map +1 -0
  448. package/dist/domains/factory/package.d.ts +7 -0
  449. package/dist/domains/factory/package.d.ts.map +1 -0
  450. package/dist/domains/factory/package.js +1511 -0
  451. package/dist/domains/factory/package.js.map +1 -0
  452. package/dist/domains/factory/types.d.ts +127 -0
  453. package/dist/domains/factory/types.d.ts.map +1 -0
  454. package/dist/domains/factory/types.js +2 -0
  455. package/dist/domains/factory/types.js.map +1 -0
  456. package/dist/{core → domains/integrations}/codegraph.d.ts +1 -1
  457. package/dist/domains/integrations/codegraph.d.ts.map +1 -0
  458. package/dist/{core → domains/integrations}/codegraph.js +1 -1
  459. package/dist/domains/integrations/codegraph.js.map +1 -0
  460. package/dist/domains/integrations/openspec.d.ts +18 -0
  461. package/dist/domains/integrations/openspec.d.ts.map +1 -0
  462. package/dist/{core → domains/integrations}/openspec.js +102 -25
  463. package/dist/domains/integrations/openspec.js.map +1 -0
  464. package/dist/{core → domains/integrations}/superpowers.d.ts +10 -2
  465. package/dist/domains/integrations/superpowers.d.ts.map +1 -0
  466. package/dist/{core → domains/integrations}/superpowers.js +59 -13
  467. package/dist/domains/integrations/superpowers.js.map +1 -0
  468. package/dist/domains/skill/discovery.d.ts +17 -0
  469. package/dist/domains/skill/discovery.d.ts.map +1 -0
  470. package/dist/domains/skill/discovery.js +80 -0
  471. package/dist/domains/skill/discovery.js.map +1 -0
  472. package/dist/domains/skill/find.d.ts +41 -0
  473. package/dist/domains/skill/find.d.ts.map +1 -0
  474. package/dist/domains/skill/find.js +251 -0
  475. package/dist/domains/skill/find.js.map +1 -0
  476. package/dist/domains/skill/install.d.ts +11 -0
  477. package/dist/domains/skill/install.d.ts.map +1 -0
  478. package/dist/domains/skill/install.js +82 -0
  479. package/dist/domains/skill/install.js.map +1 -0
  480. package/dist/domains/skill/inventory.d.ts +19 -0
  481. package/dist/domains/skill/inventory.d.ts.map +1 -0
  482. package/dist/domains/skill/inventory.js +64 -0
  483. package/dist/domains/skill/inventory.js.map +1 -0
  484. package/dist/domains/skill/languages.d.ts +19 -0
  485. package/dist/domains/skill/languages.d.ts.map +1 -0
  486. package/dist/domains/skill/languages.js +21 -0
  487. package/dist/domains/skill/languages.js.map +1 -0
  488. package/dist/domains/skill/load.d.ts +5 -0
  489. package/dist/domains/skill/load.d.ts.map +1 -0
  490. package/dist/domains/skill/load.js +313 -0
  491. package/dist/domains/skill/load.js.map +1 -0
  492. package/dist/domains/skill/platform-install.d.ts +79 -0
  493. package/dist/domains/skill/platform-install.d.ts.map +1 -0
  494. package/dist/{core/skills.js → domains/skill/platform-install.js} +311 -54
  495. package/dist/domains/skill/platform-install.js.map +1 -0
  496. package/dist/domains/skill/preferences.d.ts +42 -0
  497. package/dist/domains/skill/preferences.d.ts.map +1 -0
  498. package/dist/domains/skill/preferences.js +118 -0
  499. package/dist/domains/skill/preferences.js.map +1 -0
  500. package/dist/domains/skill/snapshot.d.ts +8 -0
  501. package/dist/domains/skill/snapshot.d.ts.map +1 -0
  502. package/dist/domains/skill/snapshot.js +184 -0
  503. package/dist/domains/skill/snapshot.js.map +1 -0
  504. package/dist/domains/skill/types.d.ts +85 -0
  505. package/dist/domains/skill/types.d.ts.map +1 -0
  506. package/dist/domains/skill/types.js +2 -0
  507. package/dist/{core → domains/skill}/types.js.map +1 -1
  508. package/dist/{core → domains/skill}/uninstall.d.ts +2 -18
  509. package/dist/domains/skill/uninstall.d.ts.map +1 -0
  510. package/dist/{core → domains/skill}/uninstall.js +15 -66
  511. package/dist/domains/skill/uninstall.js.map +1 -0
  512. package/dist/domains/skill/validate.d.ts +3 -0
  513. package/dist/domains/skill/validate.d.ts.map +1 -0
  514. package/dist/domains/skill/validate.js +81 -0
  515. package/dist/domains/skill/validate.js.map +1 -0
  516. package/dist/domains/workflow-contract/builtins.d.ts +8 -0
  517. package/dist/domains/workflow-contract/builtins.d.ts.map +1 -0
  518. package/dist/domains/workflow-contract/builtins.js +229 -0
  519. package/dist/domains/workflow-contract/builtins.js.map +1 -0
  520. package/dist/domains/workflow-contract/hash.d.ts +3 -0
  521. package/dist/domains/workflow-contract/hash.d.ts.map +1 -0
  522. package/dist/domains/workflow-contract/hash.js +16 -0
  523. package/dist/domains/workflow-contract/hash.js.map +1 -0
  524. package/dist/domains/workflow-contract/index.d.ts +6 -0
  525. package/dist/domains/workflow-contract/index.d.ts.map +1 -0
  526. package/dist/domains/workflow-contract/index.js +5 -0
  527. package/dist/domains/workflow-contract/index.js.map +1 -0
  528. package/dist/domains/workflow-contract/normalize.d.ts +3 -0
  529. package/dist/domains/workflow-contract/normalize.d.ts.map +1 -0
  530. package/dist/domains/workflow-contract/normalize.js +146 -0
  531. package/dist/domains/workflow-contract/normalize.js.map +1 -0
  532. package/dist/domains/workflow-contract/types.d.ts +128 -0
  533. package/dist/domains/workflow-contract/types.d.ts.map +1 -0
  534. package/dist/domains/workflow-contract/types.js +2 -0
  535. package/dist/domains/workflow-contract/types.js.map +1 -0
  536. package/dist/domains/workflow-contract/validation.d.ts +3 -0
  537. package/dist/domains/workflow-contract/validation.d.ts.map +1 -0
  538. package/dist/domains/workflow-contract/validation.js +180 -0
  539. package/dist/domains/workflow-contract/validation.js.map +1 -0
  540. package/dist/platform/fs/file-system.d.ts.map +1 -0
  541. package/dist/platform/fs/file-system.js.map +1 -0
  542. package/dist/platform/install/detect.d.ts.map +1 -0
  543. package/dist/{core → platform/install}/detect.js +4 -3
  544. package/dist/platform/install/detect.js.map +1 -0
  545. package/dist/platform/install/platforms.d.ts.map +1 -0
  546. package/dist/{core → platform/install}/platforms.js +41 -0
  547. package/dist/platform/install/platforms.js.map +1 -0
  548. package/dist/platform/install/types.d.ts +3 -0
  549. package/dist/platform/install/types.d.ts.map +1 -0
  550. package/dist/platform/install/types.js +2 -0
  551. package/dist/platform/install/types.js.map +1 -0
  552. package/dist/platform/paths/repository-layout.d.ts +22 -0
  553. package/dist/platform/paths/repository-layout.d.ts.map +1 -0
  554. package/dist/platform/paths/repository-layout.js +11 -0
  555. package/dist/platform/paths/repository-layout.js.map +1 -0
  556. package/dist/platform/process/command-error.d.ts.map +1 -0
  557. package/dist/platform/process/command-error.js.map +1 -0
  558. package/dist/platform/process/shell-quote.d.ts +22 -0
  559. package/dist/platform/process/shell-quote.d.ts.map +1 -0
  560. package/dist/platform/process/shell-quote.js +34 -0
  561. package/dist/platform/process/shell-quote.js.map +1 -0
  562. package/dist/platform/version/version.d.ts.map +1 -0
  563. package/dist/{core → platform/version}/version.js +16 -3
  564. package/dist/platform/version/version.js.map +1 -0
  565. package/package.json +41 -15
  566. package/assets/skills/comet/scripts/comet-archive.sh +0 -311
  567. package/assets/skills/comet/scripts/comet-env.sh +0 -110
  568. package/assets/skills/comet/scripts/comet-guard.sh +0 -778
  569. package/assets/skills/comet/scripts/comet-handoff.sh +0 -390
  570. package/assets/skills/comet/scripts/comet-hook-guard.sh +0 -336
  571. package/assets/skills/comet/scripts/comet-state.sh +0 -1338
  572. package/assets/skills/comet/scripts/comet-yaml-validate.sh +0 -225
  573. package/dist/cli/index.js +0 -84
  574. package/dist/cli/index.js.map +0 -1
  575. package/dist/commands/doctor.d.ts.map +0 -1
  576. package/dist/commands/doctor.js.map +0 -1
  577. package/dist/commands/i18n.d.ts +0 -4
  578. package/dist/commands/i18n.d.ts.map +0 -1
  579. package/dist/commands/i18n.js.map +0 -1
  580. package/dist/commands/init.d.ts.map +0 -1
  581. package/dist/commands/init.js.map +0 -1
  582. package/dist/commands/status.d.ts.map +0 -1
  583. package/dist/commands/status.js +0 -108
  584. package/dist/commands/status.js.map +0 -1
  585. package/dist/commands/uninstall.d.ts.map +0 -1
  586. package/dist/commands/uninstall.js.map +0 -1
  587. package/dist/commands/update.d.ts.map +0 -1
  588. package/dist/commands/update.js.map +0 -1
  589. package/dist/core/codegraph.d.ts.map +0 -1
  590. package/dist/core/codegraph.js.map +0 -1
  591. package/dist/core/command-error.d.ts.map +0 -1
  592. package/dist/core/command-error.js.map +0 -1
  593. package/dist/core/detect.d.ts.map +0 -1
  594. package/dist/core/detect.js.map +0 -1
  595. package/dist/core/openspec.d.ts +0 -11
  596. package/dist/core/openspec.d.ts.map +0 -1
  597. package/dist/core/openspec.js.map +0 -1
  598. package/dist/core/platforms.d.ts.map +0 -1
  599. package/dist/core/platforms.js.map +0 -1
  600. package/dist/core/skills.d.ts +0 -58
  601. package/dist/core/skills.d.ts.map +0 -1
  602. package/dist/core/skills.js.map +0 -1
  603. package/dist/core/superpowers.d.ts.map +0 -1
  604. package/dist/core/superpowers.js.map +0 -1
  605. package/dist/core/types.d.ts +0 -2
  606. package/dist/core/types.d.ts.map +0 -1
  607. package/dist/core/uninstall.d.ts.map +0 -1
  608. package/dist/core/uninstall.js.map +0 -1
  609. package/dist/core/version.d.ts.map +0 -1
  610. package/dist/core/version.js.map +0 -1
  611. package/dist/utils/file-system.d.ts.map +0 -1
  612. package/dist/utils/file-system.js.map +0 -1
  613. /package/dist/{cli → app/cli}/index.d.ts +0 -0
  614. /package/dist/{commands → app/commands}/status.d.ts +0 -0
  615. /package/dist/{core → domains/bundle}/types.js +0 -0
  616. /package/dist/{utils → platform/fs}/file-system.d.ts +0 -0
  617. /package/dist/{utils → platform/fs}/file-system.js +0 -0
  618. /package/dist/{core → platform/install}/detect.d.ts +0 -0
  619. /package/dist/{core → platform/install}/platforms.d.ts +0 -0
  620. /package/dist/{core → platform/process}/command-error.d.ts +0 -0
  621. /package/dist/{core → platform/process}/command-error.js +0 -0
  622. /package/dist/{core → platform/version}/version.d.ts +0 -0
  623. /package/scripts/{postinstall.js → install/postinstall.js} +0 -0
@@ -0,0 +1,79 @@
1
+ import { type Platform } from '../../platform/install/platforms.js';
2
+ import type { InstallScope, InstallMode } from '../../platform/install/types.js';
3
+ import type { LanguageConfig, SkillLanguageId } from './languages.js';
4
+ type HookConfig = {
5
+ matcher: string;
6
+ description: string;
7
+ };
8
+ type Manifest = {
9
+ version: string;
10
+ skills: string[];
11
+ internalSkills?: string[];
12
+ rules?: string[];
13
+ hooks?: Record<string, HookConfig>;
14
+ languages?: LanguageConfig[];
15
+ };
16
+ interface PlannedSkillSourceFile {
17
+ relativePath: string;
18
+ source: string;
19
+ }
20
+ interface PlannedSkillFile {
21
+ source: string;
22
+ destination: string;
23
+ }
24
+ declare function planSkillDirectoryCopy(files: readonly PlannedSkillSourceFile[], destinationRoot: string): PlannedSkillFile[];
25
+ declare function getManagedSkillPaths(manifest: Manifest): string[];
26
+ declare function getUserFacingSkillNames(manifest: Manifest): string[];
27
+ declare function getAssetsDir(): string;
28
+ /**
29
+ * Get the central skills directory for symlink mode.
30
+ * Project scope: <project>/.comet/skills/
31
+ * Global scope: ~/.comet/skills/
32
+ */
33
+ declare function getCentralSkillsDir(baseDir: string, _scope: InstallScope): string;
34
+ /**
35
+ * Install skills using symlink mode:
36
+ * 1. Copy skills to central store (.comet/skills/)
37
+ * 2. Create symlink from platform dir to central store
38
+ */
39
+ declare function installSkillsAsSymlink(baseDir: string, platform: Platform, overwrite: boolean, languageSkillsDir?: string, scope?: InstallScope): Promise<{
40
+ copied: number;
41
+ skipped: number;
42
+ failed: number;
43
+ }>;
44
+ declare function copyCometSkillsForPlatform(baseDir: string, platform: Platform, overwrite: boolean, languageSkillsDir?: string, scope?: InstallScope, installMode?: InstallMode): Promise<{
45
+ copied: number;
46
+ skipped: number;
47
+ failed: number;
48
+ }>;
49
+ declare function readManifest(): Promise<Manifest>;
50
+ declare function getManifestSkills(): Promise<string[]>;
51
+ declare function copyCometRulesForPlatform(baseDir: string, platform: Platform, overwrite: boolean, languageId: SkillLanguageId, scope?: InstallScope): Promise<{
52
+ copied: number;
53
+ skipped: number;
54
+ }>;
55
+ declare function computeRuleDestPath(rulesDestDir: string, ruleFileName: string, rulesFormat: string): string;
56
+ declare function formatRuleContent(content: string, ruleFileName: string, rulesFormat: string): string;
57
+ /**
58
+ * Install Comet hooks for platforms that support them.
59
+ * Supports multiple hook formats:
60
+ * 'claude-code' — settings.local.json with PreToolUse array (Claude Code, Codex, Amazon Q)
61
+ * 'qwen' — settings.json with PreToolUse/hooks array (Qwen Code)
62
+ * 'qoder' — settings.json with PreToolUse/hooks array (Qoder)
63
+ * 'gemini' — settings.json with hooks.BeforeTool array (Gemini CLI)
64
+ * 'windsurf' — hooks.json with pre_write_code array
65
+ * 'copilot' — hooks/*.json with preToolUse
66
+ * 'kiro' — hooks/*.kiro.hook JSON files
67
+ */
68
+ declare function installCometHooksForPlatform(baseDir: string, platform: Platform, scope?: InstallScope): Promise<{
69
+ installed: boolean;
70
+ reason?: string;
71
+ }>;
72
+ declare function isManagedHookCommand(command: unknown, scriptRelPaths: string[]): boolean;
73
+ declare function parseProjectConfigOverrides(content: string): Record<string, string>;
74
+ declare function renderProjectConfig(existing: Record<string, string>, language?: string): string;
75
+ declare function mergeProjectConfig(projectPath: string, language?: string): Promise<void>;
76
+ declare function createWorkingDirs(projectPath: string, language?: string): Promise<void>;
77
+ export { copyCometSkillsForPlatform, copyCometRulesForPlatform, installCometHooksForPlatform, readManifest, getManagedSkillPaths, getManifestSkills, getUserFacingSkillNames, createWorkingDirs, getAssetsDir, computeRuleDestPath, formatRuleContent, isManagedHookCommand, planSkillDirectoryCopy, mergeProjectConfig, parseProjectConfigOverrides, renderProjectConfig, getCentralSkillsDir, installSkillsAsSymlink, };
78
+ export type { Manifest, LanguageConfig, PlannedSkillFile, PlannedSkillSourceFile };
79
+ //# sourceMappingURL=platform-install.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform-install.d.ts","sourceRoot":"","sources":["../../../domains/skill/platform-install.ts"],"names":[],"mappings":"AAOA,OAAO,EAAwB,KAAK,QAAQ,EAAE,MAAM,qCAAqC,CAAC;AAC1F,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAEjF,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAKtE,KAAK,UAAU,GAAG;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,KAAK,QAAQ,GAAG;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACnC,SAAS,CAAC,EAAE,cAAc,EAAE,CAAC;CAC9B,CAAC;AAEF,UAAU,sBAAsB;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,gBAAgB;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,iBAAS,sBAAsB,CAC7B,KAAK,EAAE,SAAS,sBAAsB,EAAE,EACxC,eAAe,EAAE,MAAM,GACtB,gBAAgB,EAAE,CASpB;AAED,iBAAS,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,EAAE,CAE1D;AAED,iBAAS,uBAAuB,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,EAAE,CAE7D;AAuDD,iBAAS,YAAY,IAAI,MAAM,CAY9B;AAED;;;;GAIG;AACH,iBAAS,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,MAAM,CAE1E;AAwCD;;;;GAIG;AACH,iBAAe,sBAAsB,CACnC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,OAAO,EAClB,iBAAiB,GAAE,MAAiB,EACpC,KAAK,GAAE,YAAwB,GAC9B,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAmF9D;AAED,iBAAe,0BAA0B,CACvC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,OAAO,EAClB,iBAAiB,GAAE,MAAiB,EACpC,KAAK,GAAE,YAAwB,EAC/B,WAAW,GAAE,WAAoB,GAChC,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAuE9D;AA6ID,iBAAe,YAAY,IAAI,OAAO,CAAC,QAAQ,CAAC,CAI/C;AAED,iBAAe,iBAAiB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAGpD;AA2CD,iBAAe,yBAAyB,CACtC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,OAAO,EAClB,UAAU,EAAE,eAAe,EAC3B,KAAK,GAAE,YAAwB,GAC9B,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAqD9C;AAED,iBAAS,mBAAmB,CAC1B,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,GAClB,MAAM,CASR;AAED,iBAAS,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAqB7F;AAED;;;;;;;;;;GAUG;AACH,iBAAe,4BAA4B,CACzC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,QAAQ,EAClB,KAAK,GAAE,YAAwB,GAC9B,OAAO,CAAC;IAAE,SAAS,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAoClD;AAaD,iBAAS,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,GAAG,OAAO,CAgBjF;AA0UD,iBAAS,2BAA2B,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAc5E;AAED,iBAAS,mBAAmB,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,QAAQ,GAAE,MAAa,GAAG,MAAM,CAa9F;AAED,iBAAe,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ7F;AAED,iBAAe,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAY5F;AAED,OAAO,EACL,0BAA0B,EAC1B,yBAAyB,EACzB,4BAA4B,EAC5B,YAAY,EACZ,oBAAoB,EACpB,iBAAiB,EACjB,uBAAuB,EACvB,iBAAiB,EACjB,YAAY,EACZ,mBAAmB,EACnB,iBAAiB,EACjB,oBAAoB,EACpB,sBAAsB,EACtB,kBAAkB,EAClB,2BAA2B,EAC3B,mBAAmB,EACnB,mBAAmB,EACnB,sBAAsB,GACvB,CAAC;AACF,YAAY,EAAE,QAAQ,EAAE,cAAc,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,CAAC"}
@@ -1,19 +1,184 @@
1
1
  import path from 'path';
2
- import { readFile, writeFile } from 'fs/promises';
2
+ import { existsSync } from 'fs';
3
+ import { readFile, writeFile, lstat, unlink, symlink, rm, readdir } from 'fs/promises';
3
4
  import { fileURLToPath } from 'url';
4
- import { fileExists, readJson, copyFile, ensureDir } from '../utils/file-system.js';
5
- import { getPlatformSkillsDir } from './platforms.js';
5
+ import { parseDocument } from 'yaml';
6
+ import { fileExists, readJson, copyFile, ensureDir } from '../../platform/fs/file-system.js';
7
+ import { getPlatformSkillsDir } from '../../platform/install/platforms.js';
8
+ import { formatSupportedArtifactLanguages, resolveArtifactLanguage } from './languages.js';
6
9
  const __filename = fileURLToPath(import.meta.url);
7
10
  const __dirname = path.dirname(__filename);
11
+ function planSkillDirectoryCopy(files, destinationRoot) {
12
+ return files
13
+ .map((file) => ({
14
+ source: file.source,
15
+ destination: path.join(destinationRoot, ...file.relativePath.split('/')),
16
+ }))
17
+ .sort((left, right) => left.destination < right.destination ? -1 : left.destination > right.destination ? 1 : 0);
18
+ }
19
+ function getManagedSkillPaths(manifest) {
20
+ return [...new Set([...manifest.skills, ...(manifest.internalSkills ?? [])])];
21
+ }
22
+ function getUserFacingSkillNames(manifest) {
23
+ return getTopLevelSkillNames(manifest.skills);
24
+ }
25
+ function getManagedSkillReplacementPaths(manifest) {
26
+ const allowed = new Set();
27
+ for (const skillPath of getManagedSkillPaths(manifest)) {
28
+ const parts = skillPath.split('/').filter(Boolean);
29
+ for (let depth = 1; depth <= parts.length; depth++) {
30
+ allowed.add(parts.slice(0, depth).join('/'));
31
+ }
32
+ }
33
+ return allowed;
34
+ }
35
+ async function collectDirectoryEntryPaths(root, current = root) {
36
+ const entries = await readdir(current, { withFileTypes: true });
37
+ const paths = [];
38
+ for (const entry of entries) {
39
+ const fullPath = path.join(current, entry.name);
40
+ const relativePath = path.relative(root, fullPath).split(path.sep).join('/');
41
+ paths.push(relativePath);
42
+ if (entry.isDirectory() && !entry.isSymbolicLink()) {
43
+ paths.push(...(await collectDirectoryEntryPaths(root, fullPath)));
44
+ }
45
+ }
46
+ return paths;
47
+ }
48
+ async function assertDirectoryContainsOnlyManagedEntries(dirPath, managedEntries) {
49
+ const entries = await collectDirectoryEntryPaths(dirPath);
50
+ const unmanagedEntries = entries.filter((entry) => !managedEntries.has(entry));
51
+ if (unmanagedEntries.length === 0)
52
+ return;
53
+ const preview = unmanagedEntries.slice(0, 5).join(', ');
54
+ const suffix = unmanagedEntries.length > 5 ? `, and ${unmanagedEntries.length - 5} more` : '';
55
+ throw new Error(`Refusing to replace ${dirPath} with a symlink because it contains unmanaged entries: ${preview}${suffix}. Move them aside or use copy install mode.`);
56
+ }
8
57
  const OPENCODE_COMMAND_HEADER = `---
9
58
  description: Run the {skillName} Comet workflow
10
59
  ---
11
60
  `;
12
61
  const PI_COMMAND_EXTENSION_FILE = 'comet-commands.ts';
62
+ const OPENCODE_STYLE_PLATFORM_IDS = new Set(['opencode', 'mimocode']);
13
63
  function getAssetsDir() {
14
- return path.resolve(__dirname, '..', '..', 'assets');
64
+ const directAssets = path.resolve(__dirname, '..', '..', 'assets');
65
+ if (existsSync(path.join(directAssets, 'manifest.json'))) {
66
+ return directAssets;
67
+ }
68
+ const packageRootAssets = path.resolve(__dirname, '..', '..', '..', 'assets');
69
+ if (existsSync(path.join(packageRootAssets, 'manifest.json'))) {
70
+ return packageRootAssets;
71
+ }
72
+ return directAssets;
73
+ }
74
+ /**
75
+ * Get the central skills directory for symlink mode.
76
+ * Project scope: <project>/.comet/skills/
77
+ * Global scope: ~/.comet/skills/
78
+ */
79
+ function getCentralSkillsDir(baseDir, _scope) {
80
+ return path.join(baseDir, '.comet', 'skills');
81
+ }
82
+ /**
83
+ * Create a symlink from linkPath pointing to target.
84
+ * On Windows, uses 'junction' type for directory symlinks (no admin required).
85
+ */
86
+ async function createSymlink(target, linkPath, managedEntries) {
87
+ await ensureDir(path.dirname(linkPath));
88
+ // Remove existing link/directory if present
89
+ let stat = null;
90
+ try {
91
+ stat = await lstat(linkPath);
92
+ }
93
+ catch (err) {
94
+ if (err.code !== 'ENOENT') {
95
+ throw err;
96
+ }
97
+ }
98
+ if (stat?.isSymbolicLink()) {
99
+ await unlink(linkPath);
100
+ }
101
+ else if (stat?.isDirectory()) {
102
+ // For directories, try unlink first (handles Windows junctions)
103
+ try {
104
+ await unlink(linkPath);
105
+ }
106
+ catch {
107
+ await assertDirectoryContainsOnlyManagedEntries(linkPath, managedEntries);
108
+ await rm(linkPath, { recursive: true, force: true });
109
+ }
110
+ }
111
+ // Windows uses 'junction' for directory symlinks (no admin privileges required)
112
+ const type = process.platform === 'win32' ? 'junction' : 'dir';
113
+ await symlink(target, linkPath, type);
114
+ }
115
+ /**
116
+ * Install skills using symlink mode:
117
+ * 1. Copy skills to central store (.comet/skills/)
118
+ * 2. Create symlink from platform dir to central store
119
+ */
120
+ async function installSkillsAsSymlink(baseDir, platform, overwrite, languageSkillsDir = 'skills', scope = 'project') {
121
+ const centralDir = getCentralSkillsDir(baseDir, scope);
122
+ const assetsDir = getAssetsDir();
123
+ const manifestPath = path.join(assetsDir, 'manifest.json');
124
+ if (!(await fileExists(manifestPath))) {
125
+ throw new Error(`Manifest not found at ${manifestPath}`);
126
+ }
127
+ const manifest = await readJson(manifestPath);
128
+ if (!manifest || !Array.isArray(manifest.skills)) {
129
+ throw new Error(`Invalid manifest at ${manifestPath}: "skills" must be an array`);
130
+ }
131
+ const managedSkillReplacementPaths = getManagedSkillReplacementPaths(manifest);
132
+ // Step 1: Copy skills to central store
133
+ let copied = 0;
134
+ let skippedCount = 0;
135
+ let failedCount = 0;
136
+ for (const skillRelPath of getManagedSkillPaths(manifest)) {
137
+ const isScript = skillRelPath.includes('/scripts/');
138
+ const sourceDir = isScript ? 'skills' : languageSkillsDir;
139
+ const src = path.join(assetsDir, sourceDir, skillRelPath);
140
+ const centralDest = path.join(centralDir, 'skills', skillRelPath);
141
+ if (!overwrite && (await fileExists(centralDest))) {
142
+ skippedCount++;
143
+ continue;
144
+ }
145
+ try {
146
+ await copyFile(src, centralDest);
147
+ copied++;
148
+ }
149
+ catch (err) {
150
+ failedCount++;
151
+ console.error(` Failed to copy ${skillRelPath} to central store: ${err.message}`);
152
+ }
153
+ }
154
+ // Step 2: Create symlink from platform dir to central store
155
+ const platformSkillsDir = path.join(baseDir, getPlatformSkillsDir(platform, scope), 'skills');
156
+ const centralSkillsDir = path.join(centralDir, 'skills');
157
+ try {
158
+ await createSymlink(centralSkillsDir, platformSkillsDir, managedSkillReplacementPaths);
159
+ }
160
+ catch (err) {
161
+ failedCount++;
162
+ console.error(` Failed to create symlink ${platformSkillsDir} -> ${centralSkillsDir}: ${err.message}`);
163
+ }
164
+ // Handle OpenCode-style platform commands (still need copy, as command content may differ)
165
+ if (OPENCODE_STYLE_PLATFORM_IDS.has(platform.id)) {
166
+ const result = await createOpenCodeCommands(baseDir, platform, manifest.skills, overwrite, scope, languageSkillsDir);
167
+ copied += result.copied;
168
+ skippedCount += result.skipped;
169
+ }
170
+ // Handle Pi platform command extension
171
+ if (platform.id === 'pi') {
172
+ const result = await createPiCommandExtension(baseDir, platform, manifest.skills, overwrite, scope);
173
+ copied += result.copied;
174
+ skippedCount += result.skipped;
175
+ }
176
+ return { copied, skipped: skippedCount, failed: failedCount };
15
177
  }
16
- async function copyCometSkillsForPlatform(baseDir, platform, overwrite, languageSkillsDir = 'skills', scope = 'project') {
178
+ async function copyCometSkillsForPlatform(baseDir, platform, overwrite, languageSkillsDir = 'skills', scope = 'project', installMode = 'copy') {
179
+ if (installMode === 'symlink') {
180
+ return installSkillsAsSymlink(baseDir, platform, overwrite, languageSkillsDir, scope);
181
+ }
17
182
  const assetsDir = getAssetsDir();
18
183
  const manifestPath = path.join(assetsDir, 'manifest.json');
19
184
  if (!(await fileExists(manifestPath))) {
@@ -25,7 +190,8 @@ async function copyCometSkillsForPlatform(baseDir, platform, overwrite, language
25
190
  }
26
191
  let copied = 0;
27
192
  let skippedCount = 0;
28
- for (const skillRelPath of manifest.skills) {
193
+ let failedCount = 0;
194
+ for (const skillRelPath of getManagedSkillPaths(manifest)) {
29
195
  const isScript = skillRelPath.includes('/scripts/');
30
196
  const sourceDir = isScript ? 'skills' : languageSkillsDir;
31
197
  const src = path.join(assetsDir, sourceDir, skillRelPath);
@@ -39,10 +205,15 @@ async function copyCometSkillsForPlatform(baseDir, platform, overwrite, language
39
205
  copied++;
40
206
  }
41
207
  catch (err) {
208
+ // Surface the failure via the returned `failed` count instead of
209
+ // swallowing it, so a half-installed state (e.g. a missing
210
+ // comet-hook-guard.mjs) is visible in the summary rather than silently
211
+ // breaking phase guard downstream.
212
+ failedCount++;
42
213
  console.error(` Failed to copy ${skillRelPath}: ${err.message}`);
43
214
  }
44
215
  }
45
- if (platform.id === 'opencode') {
216
+ if (OPENCODE_STYLE_PLATFORM_IDS.has(platform.id)) {
46
217
  const result = await createOpenCodeCommands(baseDir, platform, manifest.skills, overwrite, scope, languageSkillsDir);
47
218
  copied += result.copied;
48
219
  skippedCount += result.skipped;
@@ -52,7 +223,7 @@ async function copyCometSkillsForPlatform(baseDir, platform, overwrite, language
52
223
  copied += result.copied;
53
224
  skippedCount += result.skipped;
54
225
  }
55
- return { copied, skipped: skippedCount };
226
+ return { copied, skipped: skippedCount, failed: failedCount };
56
227
  }
57
228
  function getTopLevelSkillNames(skillPaths) {
58
229
  return skillPaths.flatMap((skillPath) => {
@@ -168,7 +339,7 @@ async function readManifest() {
168
339
  }
169
340
  async function getManifestSkills() {
170
341
  const manifest = await readManifest();
171
- return manifest.skills;
342
+ return getManagedSkillPaths(manifest);
172
343
  }
173
344
  /**
174
345
  * Copy Comet rule files to a platform's rules directory.
@@ -178,12 +349,38 @@ async function getManifestSkills() {
178
349
  * 'copilot' = GitHub Copilot .instructions.md with applyTo frontmatter
179
350
  * Skips platforms without rulesDir.
180
351
  */
181
- async function copyCometRulesForPlatform(baseDir, platform, overwrite, scope = 'project') {
352
+ // Rule variants share a base name and differ only by a `.en.md` suffix
353
+ // (e.g. `comet-phase-guard.md` = zh default, `comet-phase-guard.en.md` = en).
354
+ // Centralized here so the naming convention only needs to change in one place.
355
+ const EN_RULE_SUFFIX = /\.en\.md$/;
356
+ function isEnglishRuleVariant(ruleRelPath) {
357
+ return EN_RULE_SUFFIX.test(ruleRelPath);
358
+ }
359
+ function toRuleBaseName(ruleRelPath) {
360
+ return ruleRelPath.replace(EN_RULE_SUFFIX, '.md');
361
+ }
362
+ // Pick exactly one variant per base name for the requested language, falling
363
+ // back to whichever variant exists if there's no per-language pair.
364
+ function selectRulePathsForLanguage(rulePaths, languageId) {
365
+ const wantEnglish = languageId === 'en';
366
+ const selected = new Map();
367
+ for (const rulePath of rulePaths) {
368
+ const isEnglishVariant = isEnglishRuleVariant(rulePath);
369
+ const baseKey = toRuleBaseName(rulePath);
370
+ const matched = isEnglishVariant === wantEnglish;
371
+ const existing = selected.get(baseKey);
372
+ if (!existing || (matched && !existing.matched)) {
373
+ selected.set(baseKey, { rulePath, matched });
374
+ }
375
+ }
376
+ return [...selected.values()].map((entry) => entry.rulePath);
377
+ }
378
+ async function copyCometRulesForPlatform(baseDir, platform, overwrite, languageId, scope = 'project') {
182
379
  if (!platform.rulesDir || !platform.rulesFormat) {
183
380
  return { copied: 0, skipped: 0 };
184
381
  }
185
382
  const manifest = await readManifest();
186
- const rulePaths = manifest.rules;
383
+ const rulePaths = selectRulePathsForLanguage(manifest.rules ?? [], languageId);
187
384
  if (!rulePaths || rulePaths.length === 0) {
188
385
  return { copied: 0, skipped: 0 };
189
386
  }
@@ -203,7 +400,9 @@ async function copyCometRulesForPlatform(baseDir, platform, overwrite, scope = '
203
400
  console.error(` Rule source not found: ${ruleRelPath}`);
204
401
  continue;
205
402
  }
206
- const ruleFileName = path.basename(ruleRelPath);
403
+ // Normalize the `.en` infix away so the installed file name is the same
404
+ // regardless of which language variant was selected.
405
+ const ruleFileName = toRuleBaseName(path.basename(ruleRelPath));
207
406
  const rulesDestDir = path.join(rulesBase, platform.rulesDir);
208
407
  const dest = computeRuleDestPath(rulesDestDir, ruleFileName, platform.rulesFormat);
209
408
  if (!overwrite && (await fileExists(dest))) {
@@ -281,18 +480,18 @@ async function installCometHooksForPlatform(baseDir, platform, scope = 'project'
281
480
  try {
282
481
  switch (hookFormat) {
283
482
  case 'claude-code':
284
- return installClaudeCodeHooks(platformBase, skillsDir, hooksConfig);
483
+ return installClaudeCodeHooks(baseDir, platformBase, skillsDir, hooksConfig);
285
484
  case 'qwen':
286
485
  case 'qoder':
287
- return installQwenStyleHooks(platformBase, skillsDir, hooksConfig, hookFormat);
486
+ return installQwenStyleHooks(baseDir, platformBase, skillsDir, hooksConfig, hookFormat);
288
487
  case 'gemini':
289
- return installGeminiHooks(platformBase, skillsDir, hooksConfig);
488
+ return installGeminiHooks(baseDir, platformBase, skillsDir, hooksConfig);
290
489
  case 'windsurf':
291
- return installWindsurfHooks(platformBase, skillsDir, hooksConfig);
490
+ return installWindsurfHooks(baseDir, platformBase, skillsDir, hooksConfig);
292
491
  case 'copilot':
293
- return installCopilotHooks(platformBase, skillsDir, hooksConfig);
492
+ return installCopilotHooks(baseDir, platformBase, skillsDir, hooksConfig);
294
493
  case 'kiro':
295
- return installKiroHooks(platformBase, skillsDir, hooksConfig);
494
+ return installKiroHooks(baseDir, platformBase, skillsDir, hooksConfig);
296
495
  default:
297
496
  return { installed: false, reason: `unsupported hook format: ${hookFormat}` };
298
497
  }
@@ -301,20 +500,29 @@ async function installCometHooksForPlatform(baseDir, platform, scope = 'project'
301
500
  return { installed: false, reason: err.message };
302
501
  }
303
502
  }
304
- /** Build the command path for a hook script given its manifest rel path and skillsDir */
305
- function buildHookCommand(skillsDir, scriptRelPath) {
306
- return `bash ${skillsDir}/skills/${scriptRelPath}`;
503
+ function quoteCommandArg(value) {
504
+ return `"${value.replaceAll('\\', '/').replaceAll('"', '\\"')}"`;
505
+ }
506
+ /** Build a hook command that is stable even when the hook runner executes from a subdirectory. */
507
+ function buildHookCommand(baseDir, skillsDir, scriptRelPath) {
508
+ const projectRoot = path.resolve(baseDir);
509
+ const scriptPath = path.join(projectRoot, skillsDir, 'skills', ...scriptRelPath.split('/'));
510
+ return `node ${quoteCommandArg(scriptPath)} --project-root ${quoteCommandArg(projectRoot)}`;
307
511
  }
308
512
  function isManagedHookCommand(command, scriptRelPaths) {
309
513
  if (typeof command !== 'string')
310
514
  return false;
515
+ // Match both the current `node .../comet-hook-guard.mjs` form and the legacy
516
+ // `bash .../comet-hook-guard.sh` form so uninstall also cleans up hooks
517
+ // written by older Comet releases. Compare basenames without extension.
311
518
  const commandPath = command
312
519
  .trim()
313
- .match(/^bash\s+["']?([^"'\s]+)["']?(?:\s|$)/)?.[1]
520
+ .match(/^(?:node|bash|sh)\s+["']?([^"'\s]+)["']?(?:\s|$)/)?.[1]
314
521
  ?.replace(/\\/g, '/');
315
522
  if (!commandPath)
316
523
  return false;
317
- return scriptRelPaths.some((scriptRelPath) => commandPath.endsWith(`/skills/${scriptRelPath.replace(/\\/g, '/')}`));
524
+ const normalize = (value) => value.replace(/\.(?:sh|mjs)$/u, '');
525
+ return scriptRelPaths.some((scriptRelPath) => normalize(commandPath).endsWith(`/skills/${normalize(scriptRelPath.replace(/\\/g, '/'))}`));
318
526
  }
319
527
  function mergeHookGroups(existingGroups, newGroups, scriptRelPaths) {
320
528
  const mergedGroups = existingGroups.flatMap((group) => {
@@ -348,12 +556,12 @@ function asHookGroup(value) {
348
556
  * Claude Code, Codex, Amazon Q format:
349
557
  * Writes to settings.local.json with { hooks: { PreToolUse: [...] } }
350
558
  */
351
- async function installClaudeCodeHooks(platformBase, skillsDir, hooksConfig) {
559
+ async function installClaudeCodeHooks(baseDir, platformBase, skillsDir, hooksConfig) {
352
560
  const settingsPath = path.join(platformBase, 'settings.local.json');
353
561
  // Group by matcher so hooks sharing the same matcher are merged
354
562
  const matcherGroups = {};
355
563
  for (const [scriptRelPath, config] of Object.entries(hooksConfig)) {
356
- const command = buildHookCommand(skillsDir, scriptRelPath);
564
+ const command = buildHookCommand(baseDir, skillsDir, scriptRelPath);
357
565
  if (!matcherGroups[config.matcher]) {
358
566
  matcherGroups[config.matcher] = [];
359
567
  }
@@ -381,7 +589,7 @@ async function installClaudeCodeHooks(platformBase, skillsDir, hooksConfig) {
381
589
  * Qwen Code / Qoder format:
382
590
  * Writes to settings.json with { hooks: { PreToolUse: [{ matcher, hooks: [{ type, command }] }] } }
383
591
  */
384
- async function installQwenStyleHooks(platformBase, skillsDir, hooksConfig, _hookFormat) {
592
+ async function installQwenStyleHooks(baseDir, platformBase, skillsDir, hooksConfig, _hookFormat) {
385
593
  const settingsPath = path.join(platformBase, 'settings.json');
386
594
  // Group by matcher
387
595
  const matcherGroups = {};
@@ -391,7 +599,7 @@ async function installQwenStyleHooks(platformBase, skillsDir, hooksConfig, _hook
391
599
  }
392
600
  matcherGroups[config.matcher].push({
393
601
  type: 'command',
394
- command: buildHookCommand(skillsDir, scriptRelPath),
602
+ command: buildHookCommand(baseDir, skillsDir, scriptRelPath),
395
603
  description: config.description,
396
604
  });
397
605
  }
@@ -420,7 +628,7 @@ async function installQwenStyleHooks(platformBase, skillsDir, hooksConfig, _hook
420
628
  * Gemini CLI format:
421
629
  * Writes to .gemini/settings.json with { hooks: { BeforeTool: [{ matcher, hooks: [{ type, command }] }] } }
422
630
  */
423
- async function installGeminiHooks(platformBase, skillsDir, hooksConfig) {
631
+ async function installGeminiHooks(baseDir, platformBase, skillsDir, hooksConfig) {
424
632
  const settingsPath = path.join(platformBase, 'settings.json');
425
633
  const entries = [];
426
634
  for (const [scriptRelPath, config] of Object.entries(hooksConfig)) {
@@ -429,7 +637,7 @@ async function installGeminiHooks(platformBase, skillsDir, hooksConfig) {
429
637
  hooks: [
430
638
  {
431
639
  type: 'command',
432
- command: buildHookCommand(skillsDir, scriptRelPath),
640
+ command: buildHookCommand(baseDir, skillsDir, scriptRelPath),
433
641
  name: config.description,
434
642
  },
435
643
  ],
@@ -456,12 +664,12 @@ async function installGeminiHooks(platformBase, skillsDir, hooksConfig) {
456
664
  * Windsurf format:
457
665
  * Writes to .windsurf/hooks.json with { hooks: { pre_write_code: [{ command }] } }
458
666
  */
459
- async function installWindsurfHooks(platformBase, skillsDir, hooksConfig) {
667
+ async function installWindsurfHooks(baseDir, platformBase, skillsDir, hooksConfig) {
460
668
  const hooksPath = path.join(platformBase, 'hooks.json');
461
669
  const entries = [];
462
670
  for (const [scriptRelPath] of Object.entries(hooksConfig)) {
463
671
  entries.push({
464
- command: buildHookCommand(skillsDir, scriptRelPath),
672
+ command: buildHookCommand(baseDir, skillsDir, scriptRelPath),
465
673
  show_output: true,
466
674
  });
467
675
  }
@@ -487,14 +695,14 @@ async function installWindsurfHooks(platformBase, skillsDir, hooksConfig) {
487
695
  * GitHub Copilot format:
488
696
  * Writes to .github/hooks/comet-guard.json with preToolUse hooks config.
489
697
  */
490
- async function installCopilotHooks(platformBase, skillsDir, hooksConfig) {
698
+ async function installCopilotHooks(baseDir, platformBase, skillsDir, hooksConfig) {
491
699
  const hooksDir = path.join(platformBase, 'hooks');
492
700
  const hookFilePath = path.join(hooksDir, 'comet-guard.json');
493
701
  const scriptEntries = [];
494
702
  for (const [scriptRelPath] of Object.entries(hooksConfig)) {
495
- const cmd = buildHookCommand(skillsDir, scriptRelPath);
496
- // Script requires bash; PowerShell field wraps bash invocation for Windows
497
- scriptEntries.push({ bash: cmd, powershell: `bash -c '${cmd}'` });
703
+ const cmd = buildHookCommand(baseDir, skillsDir, scriptRelPath);
704
+ // Hook runs through node on every platform; both fields use the same command
705
+ scriptEntries.push({ bash: cmd, powershell: cmd });
498
706
  }
499
707
  const hookConfig = {
500
708
  version: 1,
@@ -510,10 +718,10 @@ async function installCopilotHooks(platformBase, skillsDir, hooksConfig) {
510
718
  * Kiro format:
511
719
  * Writes to .kiro/hooks/comet-phase-guard.kiro.hook as a JSON file.
512
720
  */
513
- async function installKiroHooks(platformBase, skillsDir, hooksConfig) {
721
+ async function installKiroHooks(baseDir, platformBase, skillsDir, hooksConfig) {
514
722
  const hooksDir = path.join(platformBase, 'hooks');
515
723
  for (const [scriptRelPath, config] of Object.entries(hooksConfig)) {
516
- const hookFileName = path.basename(scriptRelPath).replace(/\.sh$/, '.kiro.hook');
724
+ const hookFileName = path.basename(scriptRelPath).replace(/\.mjs$/, '.kiro.hook');
517
725
  const hookFilePath = path.join(hooksDir, hookFileName);
518
726
  // Map Write|Edit matcher to Kiro's write tool category
519
727
  const toolName = config.matcher === 'Write|Edit' ? 'write' : '*';
@@ -528,7 +736,7 @@ async function installKiroHooks(platformBase, skillsDir, hooksConfig) {
528
736
  },
529
737
  then: {
530
738
  type: 'runCommand',
531
- command: buildHookCommand(skillsDir, scriptRelPath),
739
+ command: buildHookCommand(baseDir, skillsDir, scriptRelPath),
532
740
  },
533
741
  };
534
742
  await ensureDir(hooksDir);
@@ -536,7 +744,67 @@ async function installKiroHooks(platformBase, skillsDir, hooksConfig) {
536
744
  }
537
745
  return { installed: true };
538
746
  }
539
- async function createWorkingDirs(projectPath) {
747
+ function managedConfigFields(language = 'en') {
748
+ const artifactLanguage = resolveArtifactLanguage(language);
749
+ return [
750
+ {
751
+ key: 'language',
752
+ def: artifactLanguage.id,
753
+ comment: `# language: ${formatSupportedArtifactLanguages()}`,
754
+ },
755
+ { key: 'context_compression', def: 'off', comment: '# context_compression: off | beta' },
756
+ { key: 'review_mode', def: 'standard', comment: '# review_mode: off | standard | thorough' },
757
+ { key: 'auto_transition', def: 'true', comment: '# auto_transition: true | false' },
758
+ ];
759
+ }
760
+ const MANAGED_CONFIG_FIELDS = managedConfigFields();
761
+ function getManagedConfigFields(language = 'en') {
762
+ return language === 'en' ? MANAGED_CONFIG_FIELDS : managedConfigFields(language);
763
+ }
764
+ function parseProjectConfigOverrides(content) {
765
+ if (!content.trim())
766
+ return {};
767
+ const doc = parseDocument(content, { uniqueKeys: false });
768
+ if (doc.errors.length > 0)
769
+ return {};
770
+ const js = doc.toJS();
771
+ if (!js || typeof js !== 'object' || Array.isArray(js))
772
+ return {};
773
+ const out = {};
774
+ for (const [k, v] of Object.entries(js)) {
775
+ if (v === null || v === undefined)
776
+ continue;
777
+ if (typeof v === 'string' || typeof v === 'number' || typeof v === 'boolean') {
778
+ out[k] = String(v);
779
+ }
780
+ }
781
+ return out;
782
+ }
783
+ function renderProjectConfig(existing, language = 'en') {
784
+ const lines = [];
785
+ const fields = getManagedConfigFields(language);
786
+ const managed = new Set(fields.map((f) => f.key));
787
+ for (const f of fields) {
788
+ lines.push(f.comment);
789
+ lines.push(`${f.key}: ${existing[f.key] ?? f.def}`);
790
+ }
791
+ for (const [k, v] of Object.entries(existing)) {
792
+ if (!managed.has(k))
793
+ lines.push(`${k}: ${v}`);
794
+ }
795
+ lines.push('');
796
+ return lines.join('\n');
797
+ }
798
+ async function mergeProjectConfig(projectPath, language = 'en') {
799
+ const configPath = path.join(projectPath, '.comet', 'config.yaml');
800
+ let existing = {};
801
+ if (await fileExists(configPath)) {
802
+ existing = parseProjectConfigOverrides(await readFile(configPath, 'utf-8'));
803
+ }
804
+ await ensureDir(path.dirname(configPath));
805
+ await writeFile(configPath, renderProjectConfig(existing, language), 'utf-8');
806
+ }
807
+ async function createWorkingDirs(projectPath, language = 'en') {
540
808
  const dirs = [
541
809
  path.join(projectPath, 'docs', 'superpowers', 'specs'),
542
810
  path.join(projectPath, 'docs', 'superpowers', 'plans'),
@@ -545,18 +813,7 @@ async function createWorkingDirs(projectPath) {
545
813
  for (const dir of dirs) {
546
814
  await ensureDir(dir);
547
815
  }
548
- const configPath = path.join(projectPath, '.comet', 'config.yaml');
549
- if (!(await fileExists(configPath))) {
550
- await writeFile(configPath, [
551
- '# context_compression: off | beta',
552
- 'context_compression: off',
553
- '# review_mode: off | standard | thorough',
554
- 'review_mode: off',
555
- '# auto_transition: true | false',
556
- 'auto_transition: true',
557
- '',
558
- ].join('\n'), 'utf-8');
559
- }
560
- }
561
- export { copyCometSkillsForPlatform, copyCometRulesForPlatform, installCometHooksForPlatform, readManifest, getManifestSkills, createWorkingDirs, getAssetsDir, computeRuleDestPath, isManagedHookCommand, };
562
- //# sourceMappingURL=skills.js.map
816
+ await mergeProjectConfig(projectPath, language);
817
+ }
818
+ export { copyCometSkillsForPlatform, copyCometRulesForPlatform, installCometHooksForPlatform, readManifest, getManagedSkillPaths, getManifestSkills, getUserFacingSkillNames, createWorkingDirs, getAssetsDir, computeRuleDestPath, formatRuleContent, isManagedHookCommand, planSkillDirectoryCopy, mergeProjectConfig, parseProjectConfigOverrides, renderProjectConfig, getCentralSkillsDir, installSkillsAsSymlink, };
819
+ //# sourceMappingURL=platform-install.js.map