@rpamis/comet 0.4.0-beta.1 → 0.4.0-beta.10

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 (1301) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +279 -113
  3. package/assets/manifest.json +17 -5
  4. package/assets/skills/comet/SKILL.md +17 -256
  5. package/assets/skills/comet/reference/auto-transition.md +1 -1
  6. package/assets/skills/comet/reference/classic-layout.md +34 -0
  7. package/assets/skills/comet/reference/comet-yaml-fields.md +14 -8
  8. package/assets/skills/comet/reference/context-recovery.md +14 -4
  9. package/assets/skills/comet/reference/decision-point.md +11 -0
  10. package/assets/skills/comet/reference/file-structure.md +2 -2
  11. package/assets/skills/comet/reference/intent-frame.md +3 -3
  12. package/assets/skills/comet/reference/scripts.md +47 -15
  13. package/assets/skills/comet/reference/subagent-dispatch.md +8 -7
  14. package/assets/skills/comet/rules/comet-phase-guard.en.md +34 -31
  15. package/assets/skills/comet/rules/comet-phase-guard.md +34 -32
  16. package/assets/skills/comet/rules/comet-workflow-guard.en.md +32 -0
  17. package/assets/skills/comet/rules/comet-workflow-guard.md +32 -0
  18. package/assets/skills/comet/scripts/comet-entry-runtime.mjs +8074 -0
  19. package/assets/skills/comet/scripts/comet-hook-router.mjs +12786 -0
  20. package/assets/skills/comet/scripts/comet-resume-probe.mjs +3 -0
  21. package/assets/skills/comet/scripts/comet-runtime.mjs +10449 -4105
  22. package/assets/skills/comet-any/SKILL.md +5 -5
  23. package/assets/skills/comet-any/reference/authored-zone-example.md +10 -5
  24. package/assets/skills/comet-any/reference/authoring-subagents.md +1 -1
  25. package/assets/skills/comet-any/reference/bundle-authoring.md +2 -2
  26. package/assets/skills/comet-any/reference/subagents/pause-points-author.md +14 -11
  27. package/assets/skills/comet-any/reference/subagents/reference-author.md +1 -1
  28. package/assets/skills/comet-any/reference/subagents/script-author.md +1 -1
  29. package/assets/skills/comet-any/reference/subagents/skill-core-author.md +1 -1
  30. package/assets/skills/comet-any/reference/subagents/skill-reviewer.md +4 -2
  31. package/assets/skills/comet-any/reference/subagents/workflow-entry-author.md +8 -7
  32. package/assets/skills/comet-archive/SKILL.md +69 -26
  33. package/assets/skills/comet-build/SKILL.md +77 -58
  34. package/assets/skills/comet-classic/SKILL.md +295 -0
  35. package/assets/skills/comet-design/SKILL.md +40 -36
  36. package/assets/skills/comet-hotfix/SKILL.md +57 -35
  37. package/assets/skills/comet-native/SKILL.md +133 -0
  38. package/assets/skills/comet-native/reference/artifacts.md +141 -0
  39. package/assets/skills/comet-native/reference/clarification.md +54 -0
  40. package/assets/skills/comet-native/reference/commands.md +170 -0
  41. package/assets/skills/comet-native/reference/recovery.md +96 -0
  42. package/assets/skills/comet-native/scripts/comet-native-hook-guard.mjs +4 -0
  43. package/assets/skills/comet-native/scripts/comet-native-runtime.mjs +34468 -0
  44. package/assets/skills/comet-open/SKILL.md +119 -59
  45. package/assets/skills/comet-tweak/SKILL.md +52 -27
  46. package/assets/skills/comet-verify/SKILL.md +65 -73
  47. package/assets/skills-zh/comet/SKILL.md +17 -244
  48. package/assets/skills-zh/comet/reference/auto-transition.md +1 -1
  49. package/assets/skills-zh/comet/reference/classic-layout.md +34 -0
  50. package/assets/skills-zh/comet/reference/comet-yaml-fields.md +13 -8
  51. package/assets/skills-zh/comet/reference/context-recovery.md +14 -4
  52. package/assets/skills-zh/comet/reference/decision-point.md +11 -0
  53. package/assets/skills-zh/comet/reference/file-structure.md +2 -2
  54. package/assets/skills-zh/comet/reference/intent-frame.md +3 -3
  55. package/assets/skills-zh/comet/reference/scripts.md +47 -15
  56. package/assets/skills-zh/comet/reference/subagent-dispatch.md +8 -7
  57. package/assets/skills-zh/comet-any/SKILL.md +5 -5
  58. package/assets/skills-zh/comet-any/reference/authored-zone-example.md +10 -5
  59. package/assets/skills-zh/comet-any/reference/authoring-subagents.md +1 -1
  60. package/assets/skills-zh/comet-any/reference/bundle-authoring.md +2 -2
  61. package/assets/skills-zh/comet-any/reference/subagents/pause-points-author.md +14 -12
  62. package/assets/skills-zh/comet-any/reference/subagents/reference-author.md +1 -1
  63. package/assets/skills-zh/comet-any/reference/subagents/script-author.md +1 -1
  64. package/assets/skills-zh/comet-any/reference/subagents/skill-core-author.md +1 -1
  65. package/assets/skills-zh/comet-any/reference/subagents/skill-reviewer.md +4 -2
  66. package/assets/skills-zh/comet-any/reference/subagents/workflow-entry-author.md +8 -7
  67. package/assets/skills-zh/comet-archive/SKILL.md +69 -26
  68. package/assets/skills-zh/comet-build/SKILL.md +77 -58
  69. package/assets/skills-zh/comet-classic/SKILL.md +283 -0
  70. package/assets/skills-zh/comet-design/SKILL.md +40 -36
  71. package/assets/skills-zh/comet-hotfix/SKILL.md +56 -34
  72. package/assets/skills-zh/comet-native/SKILL.md +133 -0
  73. package/assets/skills-zh/comet-native/reference/artifacts.md +141 -0
  74. package/assets/skills-zh/comet-native/reference/clarification.md +54 -0
  75. package/assets/skills-zh/comet-native/reference/commands.md +170 -0
  76. package/assets/skills-zh/comet-native/reference/recovery.md +96 -0
  77. package/assets/skills-zh/comet-open/SKILL.md +118 -58
  78. package/assets/skills-zh/comet-tweak/SKILL.md +51 -26
  79. package/assets/skills-zh/comet-verify/SKILL.md +65 -73
  80. package/dist/app/cli/comet-banner.d.ts +25 -0
  81. package/dist/app/cli/comet-banner.d.ts.map +1 -0
  82. package/dist/app/cli/comet-banner.js +265 -0
  83. package/dist/app/cli/comet-banner.js.map +1 -0
  84. package/dist/app/cli/index.js +113 -16
  85. package/dist/app/cli/index.js.map +1 -1
  86. package/dist/app/commands/classic.d.ts +5 -0
  87. package/dist/app/commands/classic.d.ts.map +1 -0
  88. package/dist/app/commands/classic.js +32 -0
  89. package/dist/app/commands/classic.js.map +1 -0
  90. package/dist/app/commands/command-result.d.ts +6 -0
  91. package/dist/app/commands/command-result.d.ts.map +1 -0
  92. package/dist/app/commands/command-result.js +4 -0
  93. package/dist/app/commands/command-result.js.map +1 -0
  94. package/dist/app/commands/doctor.d.ts +4 -0
  95. package/dist/app/commands/doctor.d.ts.map +1 -1
  96. package/dist/app/commands/doctor.js +926 -95
  97. package/dist/app/commands/doctor.js.map +1 -1
  98. package/dist/app/commands/eval.d.ts +3 -1
  99. package/dist/app/commands/eval.d.ts.map +1 -1
  100. package/dist/app/commands/eval.js +80 -22
  101. package/dist/app/commands/eval.js.map +1 -1
  102. package/dist/app/commands/i18n.d.ts +1 -1
  103. package/dist/app/commands/i18n.d.ts.map +1 -1
  104. package/dist/app/commands/i18n.js +18 -6
  105. package/dist/app/commands/i18n.js.map +1 -1
  106. package/dist/app/commands/init.d.ts +13 -3
  107. package/dist/app/commands/init.d.ts.map +1 -1
  108. package/dist/app/commands/init.js +561 -72
  109. package/dist/app/commands/init.js.map +1 -1
  110. package/dist/app/commands/native.d.ts +2 -0
  111. package/dist/app/commands/native.d.ts.map +1 -0
  112. package/dist/app/commands/native.js +10 -0
  113. package/dist/app/commands/native.js.map +1 -0
  114. package/dist/app/commands/project-scope-selection.d.ts +13 -0
  115. package/dist/app/commands/project-scope-selection.d.ts.map +1 -0
  116. package/dist/app/commands/project-scope-selection.js +35 -0
  117. package/dist/app/commands/project-scope-selection.js.map +1 -0
  118. package/dist/app/commands/resume-probe.d.ts +12 -0
  119. package/dist/app/commands/resume-probe.d.ts.map +1 -0
  120. package/dist/app/commands/resume-probe.js +68 -0
  121. package/dist/app/commands/resume-probe.js.map +1 -0
  122. package/dist/app/commands/status.d.ts.map +1 -1
  123. package/dist/app/commands/status.js +70 -104
  124. package/dist/app/commands/status.js.map +1 -1
  125. package/dist/app/commands/uninstall.d.ts +5 -0
  126. package/dist/app/commands/uninstall.d.ts.map +1 -1
  127. package/dist/app/commands/uninstall.js +264 -53
  128. package/dist/app/commands/uninstall.js.map +1 -1
  129. package/dist/app/commands/update.d.ts +29 -5
  130. package/dist/app/commands/update.d.ts.map +1 -1
  131. package/dist/app/commands/update.js +1419 -127
  132. package/dist/app/commands/update.js.map +1 -1
  133. package/dist/app/commands/workflow.d.ts +6 -0
  134. package/dist/app/commands/workflow.d.ts.map +1 -0
  135. package/dist/app/commands/workflow.js +11 -0
  136. package/dist/app/commands/workflow.js.map +1 -0
  137. package/dist/config/repository-layout.json +29 -3
  138. package/dist/domains/bundle/bundle-platform.d.ts +1 -0
  139. package/dist/domains/bundle/bundle-platform.d.ts.map +1 -1
  140. package/dist/domains/bundle/bundle-platform.js +10 -4
  141. package/dist/domains/bundle/bundle-platform.js.map +1 -1
  142. package/dist/domains/bundle/eval-manifest-runtime.d.ts +8 -0
  143. package/dist/domains/bundle/eval-manifest-runtime.d.ts.map +1 -0
  144. package/dist/domains/bundle/eval-manifest-runtime.js +118 -0
  145. package/dist/domains/bundle/eval-manifest-runtime.js.map +1 -0
  146. package/dist/domains/bundle/eval-run-result.d.ts +22 -0
  147. package/dist/domains/bundle/eval-run-result.d.ts.map +1 -0
  148. package/dist/domains/bundle/eval-run-result.js +207 -0
  149. package/dist/domains/bundle/eval-run-result.js.map +1 -0
  150. package/dist/domains/bundle/eval.d.ts.map +1 -1
  151. package/dist/domains/bundle/eval.js +21 -24
  152. package/dist/domains/bundle/eval.js.map +1 -1
  153. package/dist/domains/bundle/factory.d.ts.map +1 -1
  154. package/dist/domains/bundle/factory.js +2 -9
  155. package/dist/domains/bundle/factory.js.map +1 -1
  156. package/dist/domains/bundle/review-summary.js +1 -1
  157. package/dist/domains/bundle/review-summary.js.map +1 -1
  158. package/dist/domains/bundle/state.d.ts.map +1 -1
  159. package/dist/domains/bundle/state.js +117 -2
  160. package/dist/domains/bundle/state.js.map +1 -1
  161. package/dist/domains/bundle/types.d.ts +1 -1
  162. package/dist/domains/bundle/types.d.ts.map +1 -1
  163. package/dist/domains/comet-classic/classic-archive-pointer.d.ts +8 -0
  164. package/dist/domains/comet-classic/classic-archive-pointer.d.ts.map +1 -0
  165. package/dist/domains/comet-classic/classic-archive-pointer.js +66 -0
  166. package/dist/domains/comet-classic/classic-archive-pointer.js.map +1 -0
  167. package/dist/domains/comet-classic/classic-archive.d.ts +1 -0
  168. package/dist/domains/comet-classic/classic-archive.d.ts.map +1 -1
  169. package/dist/domains/comet-classic/classic-archive.js +205 -114
  170. package/dist/domains/comet-classic/classic-archive.js.map +1 -1
  171. package/dist/domains/comet-classic/classic-branch-binding.d.ts +51 -0
  172. package/dist/domains/comet-classic/classic-branch-binding.d.ts.map +1 -0
  173. package/dist/domains/comet-classic/classic-branch-binding.js +107 -0
  174. package/dist/domains/comet-classic/classic-branch-binding.js.map +1 -0
  175. package/dist/domains/comet-classic/classic-cli.d.ts +3 -1
  176. package/dist/domains/comet-classic/classic-cli.d.ts.map +1 -1
  177. package/dist/domains/comet-classic/classic-cli.js +12 -3
  178. package/dist/domains/comet-classic/classic-cli.js.map +1 -1
  179. package/dist/domains/comet-classic/classic-command-checks.d.ts +20 -0
  180. package/dist/domains/comet-classic/classic-command-checks.d.ts.map +1 -0
  181. package/dist/domains/comet-classic/classic-command-checks.js +94 -0
  182. package/dist/domains/comet-classic/classic-command-checks.js.map +1 -0
  183. package/dist/domains/comet-classic/classic-command-context.d.ts +12 -0
  184. package/dist/domains/comet-classic/classic-command-context.d.ts.map +1 -0
  185. package/dist/domains/comet-classic/classic-command-context.js +42 -0
  186. package/dist/domains/comet-classic/classic-command-context.js.map +1 -0
  187. package/dist/domains/comet-classic/classic-current-change.d.ts +17 -0
  188. package/dist/domains/comet-classic/classic-current-change.d.ts.map +1 -0
  189. package/dist/domains/comet-classic/classic-current-change.js +112 -0
  190. package/dist/domains/comet-classic/classic-current-change.js.map +1 -0
  191. package/dist/domains/comet-classic/classic-diagnostics.d.ts +2 -1
  192. package/dist/domains/comet-classic/classic-diagnostics.d.ts.map +1 -1
  193. package/dist/domains/comet-classic/classic-diagnostics.js +54 -1
  194. package/dist/domains/comet-classic/classic-diagnostics.js.map +1 -1
  195. package/dist/domains/comet-classic/classic-evidence.d.ts +1 -0
  196. package/dist/domains/comet-classic/classic-evidence.d.ts.map +1 -1
  197. package/dist/domains/comet-classic/classic-evidence.js +101 -37
  198. package/dist/domains/comet-classic/classic-evidence.js.map +1 -1
  199. package/dist/domains/comet-classic/classic-guard.d.ts.map +1 -1
  200. package/dist/domains/comet-classic/classic-guard.js +229 -208
  201. package/dist/domains/comet-classic/classic-guard.js.map +1 -1
  202. package/dist/domains/comet-classic/classic-handoff.d.ts.map +1 -1
  203. package/dist/domains/comet-classic/classic-handoff.js +155 -107
  204. package/dist/domains/comet-classic/classic-handoff.js.map +1 -1
  205. package/dist/domains/comet-classic/classic-hook-guard.d.ts +9 -0
  206. package/dist/domains/comet-classic/classic-hook-guard.d.ts.map +1 -1
  207. package/dist/domains/comet-classic/classic-hook-guard.js +406 -54
  208. package/dist/domains/comet-classic/classic-hook-guard.js.map +1 -1
  209. package/dist/domains/comet-classic/classic-layout-initialization.d.ts +86 -0
  210. package/dist/domains/comet-classic/classic-layout-initialization.d.ts.map +1 -0
  211. package/dist/domains/comet-classic/classic-layout-initialization.js +813 -0
  212. package/dist/domains/comet-classic/classic-layout-initialization.js.map +1 -0
  213. package/dist/domains/comet-classic/classic-layout.d.ts +47 -0
  214. package/dist/domains/comet-classic/classic-layout.d.ts.map +1 -0
  215. package/dist/domains/comet-classic/classic-layout.js +227 -0
  216. package/dist/domains/comet-classic/classic-layout.js.map +1 -0
  217. package/dist/domains/comet-classic/classic-migrate.d.ts +4 -0
  218. package/dist/domains/comet-classic/classic-migrate.d.ts.map +1 -1
  219. package/dist/domains/comet-classic/classic-migrate.js +8 -12
  220. package/dist/domains/comet-classic/classic-migrate.js.map +1 -1
  221. package/dist/domains/comet-classic/classic-openspec-command.d.ts +4 -0
  222. package/dist/domains/comet-classic/classic-openspec-command.d.ts.map +1 -0
  223. package/dist/domains/comet-classic/classic-openspec-command.js +45 -0
  224. package/dist/domains/comet-classic/classic-openspec-command.js.map +1 -0
  225. package/dist/domains/comet-classic/classic-openspec-root.d.ts +13 -0
  226. package/dist/domains/comet-classic/classic-openspec-root.d.ts.map +1 -0
  227. package/dist/domains/comet-classic/classic-openspec-root.js +47 -0
  228. package/dist/domains/comet-classic/classic-openspec-root.js.map +1 -0
  229. package/dist/domains/comet-classic/classic-paths.d.ts +11 -1
  230. package/dist/domains/comet-classic/classic-paths.d.ts.map +1 -1
  231. package/dist/domains/comet-classic/classic-paths.js +87 -35
  232. package/dist/domains/comet-classic/classic-paths.js.map +1 -1
  233. package/dist/domains/comet-classic/classic-project-config.d.ts +16 -0
  234. package/dist/domains/comet-classic/classic-project-config.d.ts.map +1 -0
  235. package/dist/domains/comet-classic/classic-project-config.js +36 -0
  236. package/dist/domains/comet-classic/classic-project-config.js.map +1 -0
  237. package/dist/domains/comet-classic/classic-protected-path.d.ts +39 -0
  238. package/dist/domains/comet-classic/classic-protected-path.d.ts.map +1 -0
  239. package/dist/domains/comet-classic/classic-protected-path.js +69 -0
  240. package/dist/domains/comet-classic/classic-protected-path.js.map +1 -0
  241. package/dist/domains/comet-classic/classic-resolver.d.ts.map +1 -1
  242. package/dist/domains/comet-classic/classic-resolver.js +4 -4
  243. package/dist/domains/comet-classic/classic-resolver.js.map +1 -1
  244. package/dist/domains/comet-classic/classic-resume-probe-command.d.ts +3 -0
  245. package/dist/domains/comet-classic/classic-resume-probe-command.d.ts.map +1 -0
  246. package/dist/domains/comet-classic/classic-resume-probe-command.js +59 -0
  247. package/dist/domains/comet-classic/classic-resume-probe-command.js.map +1 -0
  248. package/dist/domains/comet-classic/classic-resume-probe-entry.d.ts +2 -0
  249. package/dist/domains/comet-classic/classic-resume-probe-entry.d.ts.map +1 -0
  250. package/dist/domains/comet-classic/classic-resume-probe-entry.js +4 -0
  251. package/dist/domains/comet-classic/classic-resume-probe-entry.js.map +1 -0
  252. package/dist/domains/comet-classic/classic-resume-probe.d.ts +29 -0
  253. package/dist/domains/comet-classic/classic-resume-probe.d.ts.map +1 -0
  254. package/dist/domains/comet-classic/classic-resume-probe.js +406 -0
  255. package/dist/domains/comet-classic/classic-resume-probe.js.map +1 -0
  256. package/dist/domains/comet-classic/classic-root-command.d.ts +5 -0
  257. package/dist/domains/comet-classic/classic-root-command.d.ts.map +1 -0
  258. package/dist/domains/comet-classic/classic-root-command.js +84 -0
  259. package/dist/domains/comet-classic/classic-root-command.js.map +1 -0
  260. package/dist/domains/comet-classic/classic-root-move.d.ts +119 -0
  261. package/dist/domains/comet-classic/classic-root-move.d.ts.map +1 -0
  262. package/dist/domains/comet-classic/classic-root-move.js +1737 -0
  263. package/dist/domains/comet-classic/classic-root-move.js.map +1 -0
  264. package/dist/domains/comet-classic/classic-runtime-run.d.ts +2 -1
  265. package/dist/domains/comet-classic/classic-runtime-run.d.ts.map +1 -1
  266. package/dist/domains/comet-classic/classic-runtime-run.js +278 -5
  267. package/dist/domains/comet-classic/classic-runtime-run.js.map +1 -1
  268. package/dist/domains/comet-classic/classic-state-command.d.ts.map +1 -1
  269. package/dist/domains/comet-classic/classic-state-command.js +342 -87
  270. package/dist/domains/comet-classic/classic-state-command.js.map +1 -1
  271. package/dist/domains/comet-classic/classic-state-events.d.ts +1 -1
  272. package/dist/domains/comet-classic/classic-state-events.d.ts.map +1 -1
  273. package/dist/domains/comet-classic/classic-state-events.js +3 -4
  274. package/dist/domains/comet-classic/classic-state-events.js.map +1 -1
  275. package/dist/domains/comet-classic/classic-state.d.ts +6 -4
  276. package/dist/domains/comet-classic/classic-state.d.ts.map +1 -1
  277. package/dist/domains/comet-classic/classic-state.js +20 -7
  278. package/dist/domains/comet-classic/classic-state.js.map +1 -1
  279. package/dist/domains/comet-classic/classic-store.d.ts +6 -1
  280. package/dist/domains/comet-classic/classic-store.d.ts.map +1 -1
  281. package/dist/domains/comet-classic/classic-store.js +36 -23
  282. package/dist/domains/comet-classic/classic-store.js.map +1 -1
  283. package/dist/domains/comet-classic/classic-transitions.d.ts +1 -1
  284. package/dist/domains/comet-classic/classic-transitions.d.ts.map +1 -1
  285. package/dist/domains/comet-classic/classic-transitions.js +37 -3
  286. package/dist/domains/comet-classic/classic-transitions.js.map +1 -1
  287. package/dist/domains/comet-classic/classic-validate-command.d.ts.map +1 -1
  288. package/dist/domains/comet-classic/classic-validate-command.js +40 -20
  289. package/dist/domains/comet-classic/classic-validate-command.js.map +1 -1
  290. package/dist/domains/comet-classic/index.d.ts +3 -0
  291. package/dist/domains/comet-classic/index.d.ts.map +1 -1
  292. package/dist/domains/comet-classic/index.js +3 -0
  293. package/dist/domains/comet-classic/index.js.map +1 -1
  294. package/dist/domains/comet-entry/current-selection-repair.d.ts +17 -0
  295. package/dist/domains/comet-entry/current-selection-repair.d.ts.map +1 -0
  296. package/dist/domains/comet-entry/current-selection-repair.js +19 -0
  297. package/dist/domains/comet-entry/current-selection-repair.js.map +1 -0
  298. package/dist/domains/comet-entry/current-selection.d.ts +28 -0
  299. package/dist/domains/comet-entry/current-selection.d.ts.map +1 -0
  300. package/dist/domains/comet-entry/current-selection.js +114 -0
  301. package/dist/domains/comet-entry/current-selection.js.map +1 -0
  302. package/dist/domains/comet-entry/entry-runtime-entry.d.ts +2 -0
  303. package/dist/domains/comet-entry/entry-runtime-entry.d.ts.map +1 -0
  304. package/dist/domains/comet-entry/entry-runtime-entry.js +3 -0
  305. package/dist/domains/comet-entry/entry-runtime-entry.js.map +1 -0
  306. package/dist/domains/comet-entry/entry-runtime.d.ts +7 -0
  307. package/dist/domains/comet-entry/entry-runtime.d.ts.map +1 -0
  308. package/dist/domains/comet-entry/entry-runtime.js +55 -0
  309. package/dist/domains/comet-entry/entry-runtime.js.map +1 -0
  310. package/dist/domains/comet-entry/hook-adapter.d.ts +6 -0
  311. package/dist/domains/comet-entry/hook-adapter.d.ts.map +1 -0
  312. package/dist/domains/comet-entry/hook-adapter.js +202 -0
  313. package/dist/domains/comet-entry/hook-adapter.js.map +1 -0
  314. package/dist/domains/comet-entry/hook-router-entry.d.ts +8 -0
  315. package/dist/domains/comet-entry/hook-router-entry.d.ts.map +1 -0
  316. package/dist/domains/comet-entry/hook-router-entry.js +88 -0
  317. package/dist/domains/comet-entry/hook-router-entry.js.map +1 -0
  318. package/dist/domains/comet-entry/hook-router.d.ts +32 -0
  319. package/dist/domains/comet-entry/hook-router.d.ts.map +1 -0
  320. package/dist/domains/comet-entry/hook-router.js +133 -0
  321. package/dist/domains/comet-entry/hook-router.js.map +1 -0
  322. package/dist/domains/comet-entry/hook-types.d.ts +20 -0
  323. package/dist/domains/comet-entry/hook-types.d.ts.map +1 -0
  324. package/dist/domains/comet-entry/hook-types.js +2 -0
  325. package/dist/domains/comet-entry/hook-types.js.map +1 -0
  326. package/dist/domains/comet-entry/init-workflow.d.ts +19 -0
  327. package/dist/domains/comet-entry/init-workflow.d.ts.map +1 -0
  328. package/dist/domains/comet-entry/init-workflow.js +118 -0
  329. package/dist/domains/comet-entry/init-workflow.js.map +1 -0
  330. package/dist/domains/comet-entry/project-status.d.ts +3 -0
  331. package/dist/domains/comet-entry/project-status.d.ts.map +1 -0
  332. package/dist/domains/comet-entry/project-status.js +291 -0
  333. package/dist/domains/comet-entry/project-status.js.map +1 -0
  334. package/dist/domains/comet-entry/resolve-entry.d.ts +3 -0
  335. package/dist/domains/comet-entry/resolve-entry.d.ts.map +1 -0
  336. package/dist/domains/comet-entry/resolve-entry.js +18 -0
  337. package/dist/domains/comet-entry/resolve-entry.js.map +1 -0
  338. package/dist/domains/comet-entry/resume-probe.d.ts +34 -0
  339. package/dist/domains/comet-entry/resume-probe.d.ts.map +1 -0
  340. package/dist/domains/comet-entry/resume-probe.js +462 -0
  341. package/dist/domains/comet-entry/resume-probe.js.map +1 -0
  342. package/dist/domains/comet-entry/types.d.ts +60 -0
  343. package/dist/domains/comet-entry/types.d.ts.map +1 -0
  344. package/dist/domains/comet-entry/types.js +2 -0
  345. package/dist/domains/comet-entry/types.js.map +1 -0
  346. package/dist/domains/comet-entry/workflow-resolution.d.ts +8 -0
  347. package/dist/domains/comet-entry/workflow-resolution.d.ts.map +1 -0
  348. package/dist/domains/comet-entry/workflow-resolution.js +16 -0
  349. package/dist/domains/comet-entry/workflow-resolution.js.map +1 -0
  350. package/dist/domains/comet-native/index.d.ts +35 -0
  351. package/dist/domains/comet-native/index.d.ts.map +1 -0
  352. package/dist/domains/comet-native/index.js +35 -0
  353. package/dist/domains/comet-native/index.js.map +1 -0
  354. package/dist/domains/comet-native/native-acceptance.d.ts +53 -0
  355. package/dist/domains/comet-native/native-acceptance.d.ts.map +1 -0
  356. package/dist/domains/comet-native/native-acceptance.js +658 -0
  357. package/dist/domains/comet-native/native-acceptance.js.map +1 -0
  358. package/dist/domains/comet-native/native-archive-content.d.ts +26 -0
  359. package/dist/domains/comet-native/native-archive-content.d.ts.map +1 -0
  360. package/dist/domains/comet-native/native-archive-content.js +159 -0
  361. package/dist/domains/comet-native/native-archive-content.js.map +1 -0
  362. package/dist/domains/comet-native/native-archive-inspection.d.ts +9 -0
  363. package/dist/domains/comet-native/native-archive-inspection.d.ts.map +1 -0
  364. package/dist/domains/comet-native/native-archive-inspection.js +97 -0
  365. package/dist/domains/comet-native/native-archive-inspection.js.map +1 -0
  366. package/dist/domains/comet-native/native-archive-preflight.d.ts +54 -0
  367. package/dist/domains/comet-native/native-archive-preflight.d.ts.map +1 -0
  368. package/dist/domains/comet-native/native-archive-preflight.js +222 -0
  369. package/dist/domains/comet-native/native-archive-preflight.js.map +1 -0
  370. package/dist/domains/comet-native/native-archive-transaction.d.ts +20 -0
  371. package/dist/domains/comet-native/native-archive-transaction.d.ts.map +1 -0
  372. package/dist/domains/comet-native/native-archive-transaction.js +1183 -0
  373. package/dist/domains/comet-native/native-archive-transaction.js.map +1 -0
  374. package/dist/domains/comet-native/native-archive.d.ts +36 -0
  375. package/dist/domains/comet-native/native-archive.d.ts.map +1 -0
  376. package/dist/domains/comet-native/native-archive.js +422 -0
  377. package/dist/domains/comet-native/native-archive.js.map +1 -0
  378. package/dist/domains/comet-native/native-artifacts.d.ts +10 -0
  379. package/dist/domains/comet-native/native-artifacts.d.ts.map +1 -0
  380. package/dist/domains/comet-native/native-artifacts.js +204 -0
  381. package/dist/domains/comet-native/native-artifacts.js.map +1 -0
  382. package/dist/domains/comet-native/native-atomic-file.d.ts +10 -0
  383. package/dist/domains/comet-native/native-atomic-file.d.ts.map +1 -0
  384. package/dist/domains/comet-native/native-atomic-file.js +179 -0
  385. package/dist/domains/comet-native/native-atomic-file.js.map +1 -0
  386. package/dist/domains/comet-native/native-bounded-file.d.ts +19 -0
  387. package/dist/domains/comet-native/native-bounded-file.d.ts.map +1 -0
  388. package/dist/domains/comet-native/native-bounded-file.js +184 -0
  389. package/dist/domains/comet-native/native-bounded-file.js.map +1 -0
  390. package/dist/domains/comet-native/native-build-evidence.d.ts +42 -0
  391. package/dist/domains/comet-native/native-build-evidence.d.ts.map +1 -0
  392. package/dist/domains/comet-native/native-build-evidence.js +257 -0
  393. package/dist/domains/comet-native/native-build-evidence.js.map +1 -0
  394. package/dist/domains/comet-native/native-canonical-hash.d.ts +10 -0
  395. package/dist/domains/comet-native/native-canonical-hash.d.ts.map +1 -0
  396. package/dist/domains/comet-native/native-canonical-hash.js +100 -0
  397. package/dist/domains/comet-native/native-canonical-hash.js.map +1 -0
  398. package/dist/domains/comet-native/native-change-recovery.d.ts +11 -0
  399. package/dist/domains/comet-native/native-change-recovery.d.ts.map +1 -0
  400. package/dist/domains/comet-native/native-change-recovery.js +15 -0
  401. package/dist/domains/comet-native/native-change-recovery.js.map +1 -0
  402. package/dist/domains/comet-native/native-change.d.ts +66 -0
  403. package/dist/domains/comet-native/native-change.d.ts.map +1 -0
  404. package/dist/domains/comet-native/native-change.js +834 -0
  405. package/dist/domains/comet-native/native-change.js.map +1 -0
  406. package/dist/domains/comet-native/native-check-receipt-model.d.ts +63 -0
  407. package/dist/domains/comet-native/native-check-receipt-model.d.ts.map +1 -0
  408. package/dist/domains/comet-native/native-check-receipt-model.js +352 -0
  409. package/dist/domains/comet-native/native-check-receipt-model.js.map +1 -0
  410. package/dist/domains/comet-native/native-check-receipt-storage.d.ts +10 -0
  411. package/dist/domains/comet-native/native-check-receipt-storage.d.ts.map +1 -0
  412. package/dist/domains/comet-native/native-check-receipt-storage.js +200 -0
  413. package/dist/domains/comet-native/native-check-receipt-storage.js.map +1 -0
  414. package/dist/domains/comet-native/native-check-receipt.d.ts +19 -0
  415. package/dist/domains/comet-native/native-check-receipt.d.ts.map +1 -0
  416. package/dist/domains/comet-native/native-check-receipt.js +453 -0
  417. package/dist/domains/comet-native/native-check-receipt.js.map +1 -0
  418. package/dist/domains/comet-native/native-check.d.ts +24 -0
  419. package/dist/domains/comet-native/native-check.d.ts.map +1 -0
  420. package/dist/domains/comet-native/native-check.js +38 -0
  421. package/dist/domains/comet-native/native-check.js.map +1 -0
  422. package/dist/domains/comet-native/native-checkpoint-journal.d.ts +13 -0
  423. package/dist/domains/comet-native/native-checkpoint-journal.d.ts.map +1 -0
  424. package/dist/domains/comet-native/native-checkpoint-journal.js +53 -0
  425. package/dist/domains/comet-native/native-checkpoint-journal.js.map +1 -0
  426. package/dist/domains/comet-native/native-checkpoint-storage.d.ts +43 -0
  427. package/dist/domains/comet-native/native-checkpoint-storage.d.ts.map +1 -0
  428. package/dist/domains/comet-native/native-checkpoint-storage.js +487 -0
  429. package/dist/domains/comet-native/native-checkpoint-storage.js.map +1 -0
  430. package/dist/domains/comet-native/native-cli-entry.d.ts +2 -0
  431. package/dist/domains/comet-native/native-cli-entry.d.ts.map +1 -0
  432. package/dist/domains/comet-native/native-cli-entry.js +18 -0
  433. package/dist/domains/comet-native/native-cli-entry.js.map +1 -0
  434. package/dist/domains/comet-native/native-cli.d.ts +7 -0
  435. package/dist/domains/comet-native/native-cli.d.ts.map +1 -0
  436. package/dist/domains/comet-native/native-cli.js +1300 -0
  437. package/dist/domains/comet-native/native-cli.js.map +1 -0
  438. package/dist/domains/comet-native/native-config.d.ts +23 -0
  439. package/dist/domains/comet-native/native-config.d.ts.map +1 -0
  440. package/dist/domains/comet-native/native-config.js +60 -0
  441. package/dist/domains/comet-native/native-config.js.map +1 -0
  442. package/dist/domains/comet-native/native-conflict-inspection.d.ts +17 -0
  443. package/dist/domains/comet-native/native-conflict-inspection.d.ts.map +1 -0
  444. package/dist/domains/comet-native/native-conflict-inspection.js +90 -0
  445. package/dist/domains/comet-native/native-conflict-inspection.js.map +1 -0
  446. package/dist/domains/comet-native/native-conflict-radar.d.ts +75 -0
  447. package/dist/domains/comet-native/native-conflict-radar.d.ts.map +1 -0
  448. package/dist/domains/comet-native/native-conflict-radar.js +326 -0
  449. package/dist/domains/comet-native/native-conflict-radar.js.map +1 -0
  450. package/dist/domains/comet-native/native-continuation.d.ts +12 -0
  451. package/dist/domains/comet-native/native-continuation.d.ts.map +1 -0
  452. package/dist/domains/comet-native/native-continuation.js +201 -0
  453. package/dist/domains/comet-native/native-continuation.js.map +1 -0
  454. package/dist/domains/comet-native/native-contract-files.d.ts +24 -0
  455. package/dist/domains/comet-native/native-contract-files.d.ts.map +1 -0
  456. package/dist/domains/comet-native/native-contract-files.js +66 -0
  457. package/dist/domains/comet-native/native-contract-files.js.map +1 -0
  458. package/dist/domains/comet-native/native-contract.d.ts +41 -0
  459. package/dist/domains/comet-native/native-contract.d.ts.map +1 -0
  460. package/dist/domains/comet-native/native-contract.js +142 -0
  461. package/dist/domains/comet-native/native-contract.js.map +1 -0
  462. package/dist/domains/comet-native/native-controller-trust.d.ts +22 -0
  463. package/dist/domains/comet-native/native-controller-trust.d.ts.map +1 -0
  464. package/dist/domains/comet-native/native-controller-trust.js +153 -0
  465. package/dist/domains/comet-native/native-controller-trust.js.map +1 -0
  466. package/dist/domains/comet-native/native-creation-authorization.d.ts +30 -0
  467. package/dist/domains/comet-native/native-creation-authorization.d.ts.map +1 -0
  468. package/dist/domains/comet-native/native-creation-authorization.js +110 -0
  469. package/dist/domains/comet-native/native-creation-authorization.js.map +1 -0
  470. package/dist/domains/comet-native/native-diagnostics.d.ts +25 -0
  471. package/dist/domains/comet-native/native-diagnostics.d.ts.map +1 -0
  472. package/dist/domains/comet-native/native-diagnostics.js +551 -0
  473. package/dist/domains/comet-native/native-diagnostics.js.map +1 -0
  474. package/dist/domains/comet-native/native-doctor.d.ts +12 -0
  475. package/dist/domains/comet-native/native-doctor.d.ts.map +1 -0
  476. package/dist/domains/comet-native/native-doctor.js +771 -0
  477. package/dist/domains/comet-native/native-doctor.js.map +1 -0
  478. package/dist/domains/comet-native/native-evidence-retention.d.ts +37 -0
  479. package/dist/domains/comet-native/native-evidence-retention.d.ts.map +1 -0
  480. package/dist/domains/comet-native/native-evidence-retention.js +916 -0
  481. package/dist/domains/comet-native/native-evidence-retention.js.map +1 -0
  482. package/dist/domains/comet-native/native-evidence-storage.d.ts +54 -0
  483. package/dist/domains/comet-native/native-evidence-storage.d.ts.map +1 -0
  484. package/dist/domains/comet-native/native-evidence-storage.js +401 -0
  485. package/dist/domains/comet-native/native-evidence-storage.js.map +1 -0
  486. package/dist/domains/comet-native/native-file-identity.d.ts +3 -0
  487. package/dist/domains/comet-native/native-file-identity.d.ts.map +1 -0
  488. package/dist/domains/comet-native/native-file-identity.js +2 -0
  489. package/dist/domains/comet-native/native-file-identity.js.map +1 -0
  490. package/dist/domains/comet-native/native-findings.d.ts +8 -0
  491. package/dist/domains/comet-native/native-findings.d.ts.map +1 -0
  492. package/dist/domains/comet-native/native-findings.js +254 -0
  493. package/dist/domains/comet-native/native-findings.js.map +1 -0
  494. package/dist/domains/comet-native/native-guards.d.ts +8 -0
  495. package/dist/domains/comet-native/native-guards.d.ts.map +1 -0
  496. package/dist/domains/comet-native/native-guards.js +140 -0
  497. package/dist/domains/comet-native/native-guards.js.map +1 -0
  498. package/dist/domains/comet-native/native-hash.d.ts +3 -0
  499. package/dist/domains/comet-native/native-hash.d.ts.map +1 -0
  500. package/dist/domains/comet-native/native-hash.js +12 -0
  501. package/dist/domains/comet-native/native-hash.js.map +1 -0
  502. package/dist/domains/comet-native/native-hook-guard.d.ts +17 -0
  503. package/dist/domains/comet-native/native-hook-guard.d.ts.map +1 -0
  504. package/dist/domains/comet-native/native-hook-guard.js +154 -0
  505. package/dist/domains/comet-native/native-hook-guard.js.map +1 -0
  506. package/dist/domains/comet-native/native-independent-review.d.ts +28 -0
  507. package/dist/domains/comet-native/native-independent-review.d.ts.map +1 -0
  508. package/dist/domains/comet-native/native-independent-review.js +134 -0
  509. package/dist/domains/comet-native/native-independent-review.js.map +1 -0
  510. package/dist/domains/comet-native/native-lock.d.ts +47 -0
  511. package/dist/domains/comet-native/native-lock.d.ts.map +1 -0
  512. package/dist/domains/comet-native/native-lock.js +390 -0
  513. package/dist/domains/comet-native/native-lock.js.map +1 -0
  514. package/dist/domains/comet-native/native-mutation-lock.d.ts +5 -0
  515. package/dist/domains/comet-native/native-mutation-lock.d.ts.map +1 -0
  516. package/dist/domains/comet-native/native-mutation-lock.js +66 -0
  517. package/dist/domains/comet-native/native-mutation-lock.js.map +1 -0
  518. package/dist/domains/comet-native/native-paths.d.ts +10 -0
  519. package/dist/domains/comet-native/native-paths.d.ts.map +1 -0
  520. package/dist/domains/comet-native/native-paths.js +160 -0
  521. package/dist/domains/comet-native/native-paths.js.map +1 -0
  522. package/dist/domains/comet-native/native-progress-checkpoint.d.ts +13 -0
  523. package/dist/domains/comet-native/native-progress-checkpoint.d.ts.map +1 -0
  524. package/dist/domains/comet-native/native-progress-checkpoint.js +104 -0
  525. package/dist/domains/comet-native/native-progress-checkpoint.js.map +1 -0
  526. package/dist/domains/comet-native/native-protected-file.d.ts +113 -0
  527. package/dist/domains/comet-native/native-protected-file.d.ts.map +1 -0
  528. package/dist/domains/comet-native/native-protected-file.js +510 -0
  529. package/dist/domains/comet-native/native-protected-file.js.map +1 -0
  530. package/dist/domains/comet-native/native-redaction.d.ts +2 -0
  531. package/dist/domains/comet-native/native-redaction.d.ts.map +1 -0
  532. package/dist/domains/comet-native/native-redaction.js +18 -0
  533. package/dist/domains/comet-native/native-redaction.js.map +1 -0
  534. package/dist/domains/comet-native/native-repair-integration.d.ts +46 -0
  535. package/dist/domains/comet-native/native-repair-integration.d.ts.map +1 -0
  536. package/dist/domains/comet-native/native-repair-integration.js +235 -0
  537. package/dist/domains/comet-native/native-repair-integration.js.map +1 -0
  538. package/dist/domains/comet-native/native-repair-runtime.d.ts +78 -0
  539. package/dist/domains/comet-native/native-repair-runtime.d.ts.map +1 -0
  540. package/dist/domains/comet-native/native-repair-runtime.js +593 -0
  541. package/dist/domains/comet-native/native-repair-runtime.js.map +1 -0
  542. package/dist/domains/comet-native/native-repair-stagnation.d.ts +89 -0
  543. package/dist/domains/comet-native/native-repair-stagnation.d.ts.map +1 -0
  544. package/dist/domains/comet-native/native-repair-stagnation.js +308 -0
  545. package/dist/domains/comet-native/native-repair-stagnation.js.map +1 -0
  546. package/dist/domains/comet-native/native-resume-view.d.ts +14 -0
  547. package/dist/domains/comet-native/native-resume-view.d.ts.map +1 -0
  548. package/dist/domains/comet-native/native-resume-view.js +105 -0
  549. package/dist/domains/comet-native/native-resume-view.js.map +1 -0
  550. package/dist/domains/comet-native/native-review-contract.d.ts +6 -0
  551. package/dist/domains/comet-native/native-review-contract.d.ts.map +1 -0
  552. package/dist/domains/comet-native/native-review-contract.js +6 -0
  553. package/dist/domains/comet-native/native-review-contract.js.map +1 -0
  554. package/dist/domains/comet-native/native-review-identity.d.ts +50 -0
  555. package/dist/domains/comet-native/native-review-identity.d.ts.map +1 -0
  556. package/dist/domains/comet-native/native-review-identity.js +209 -0
  557. package/dist/domains/comet-native/native-review-identity.js.map +1 -0
  558. package/dist/domains/comet-native/native-review-signer.d.ts +24 -0
  559. package/dist/domains/comet-native/native-review-signer.d.ts.map +1 -0
  560. package/dist/domains/comet-native/native-review-signer.js +125 -0
  561. package/dist/domains/comet-native/native-review-signer.js.map +1 -0
  562. package/dist/domains/comet-native/native-review-trust.d.ts +35 -0
  563. package/dist/domains/comet-native/native-review-trust.d.ts.map +1 -0
  564. package/dist/domains/comet-native/native-review-trust.js +176 -0
  565. package/dist/domains/comet-native/native-review-trust.js.map +1 -0
  566. package/dist/domains/comet-native/native-revision.d.ts +20 -0
  567. package/dist/domains/comet-native/native-revision.d.ts.map +1 -0
  568. package/dist/domains/comet-native/native-revision.js +32 -0
  569. package/dist/domains/comet-native/native-revision.js.map +1 -0
  570. package/dist/domains/comet-native/native-root-move.d.ts +20 -0
  571. package/dist/domains/comet-native/native-root-move.d.ts.map +1 -0
  572. package/dist/domains/comet-native/native-root-move.js +818 -0
  573. package/dist/domains/comet-native/native-root-move.js.map +1 -0
  574. package/dist/domains/comet-native/native-run-consistency.d.ts +3 -0
  575. package/dist/domains/comet-native/native-run-consistency.d.ts.map +1 -0
  576. package/dist/domains/comet-native/native-run-consistency.js +136 -0
  577. package/dist/domains/comet-native/native-run-consistency.js.map +1 -0
  578. package/dist/domains/comet-native/native-run-store.d.ts +41 -0
  579. package/dist/domains/comet-native/native-run-store.d.ts.map +1 -0
  580. package/dist/domains/comet-native/native-run-store.js +452 -0
  581. package/dist/domains/comet-native/native-run-store.js.map +1 -0
  582. package/dist/domains/comet-native/native-runtime-package.d.ts +16 -0
  583. package/dist/domains/comet-native/native-runtime-package.d.ts.map +1 -0
  584. package/dist/domains/comet-native/native-runtime-package.js +72 -0
  585. package/dist/domains/comet-native/native-runtime-package.js.map +1 -0
  586. package/dist/domains/comet-native/native-schema-migration.d.ts +11 -0
  587. package/dist/domains/comet-native/native-schema-migration.d.ts.map +1 -0
  588. package/dist/domains/comet-native/native-schema-migration.js +900 -0
  589. package/dist/domains/comet-native/native-schema-migration.js.map +1 -0
  590. package/dist/domains/comet-native/native-selection.d.ts +12 -0
  591. package/dist/domains/comet-native/native-selection.d.ts.map +1 -0
  592. package/dist/domains/comet-native/native-selection.js +52 -0
  593. package/dist/domains/comet-native/native-selection.js.map +1 -0
  594. package/dist/domains/comet-native/native-sensitive-paths.d.ts +7 -0
  595. package/dist/domains/comet-native/native-sensitive-paths.d.ts.map +1 -0
  596. package/dist/domains/comet-native/native-sensitive-paths.js +69 -0
  597. package/dist/domains/comet-native/native-sensitive-paths.js.map +1 -0
  598. package/dist/domains/comet-native/native-snapshot.d.ts +78 -0
  599. package/dist/domains/comet-native/native-snapshot.d.ts.map +1 -0
  600. package/dist/domains/comet-native/native-snapshot.js +2609 -0
  601. package/dist/domains/comet-native/native-snapshot.js.map +1 -0
  602. package/dist/domains/comet-native/native-specs.d.ts +12 -0
  603. package/dist/domains/comet-native/native-specs.d.ts.map +1 -0
  604. package/dist/domains/comet-native/native-specs.js +270 -0
  605. package/dist/domains/comet-native/native-specs.js.map +1 -0
  606. package/dist/domains/comet-native/native-trajectory-limits.d.ts +7 -0
  607. package/dist/domains/comet-native/native-trajectory-limits.d.ts.map +1 -0
  608. package/dist/domains/comet-native/native-trajectory-limits.js +13 -0
  609. package/dist/domains/comet-native/native-trajectory-limits.js.map +1 -0
  610. package/dist/domains/comet-native/native-trajectory-recovery.d.ts +37 -0
  611. package/dist/domains/comet-native/native-trajectory-recovery.d.ts.map +1 -0
  612. package/dist/domains/comet-native/native-trajectory-recovery.js +133 -0
  613. package/dist/domains/comet-native/native-trajectory-recovery.js.map +1 -0
  614. package/dist/domains/comet-native/native-trajectory.d.ts +16 -0
  615. package/dist/domains/comet-native/native-trajectory.d.ts.map +1 -0
  616. package/dist/domains/comet-native/native-trajectory.js +27 -0
  617. package/dist/domains/comet-native/native-trajectory.js.map +1 -0
  618. package/dist/domains/comet-native/native-transaction.d.ts +45 -0
  619. package/dist/domains/comet-native/native-transaction.d.ts.map +1 -0
  620. package/dist/domains/comet-native/native-transaction.js +846 -0
  621. package/dist/domains/comet-native/native-transaction.js.map +1 -0
  622. package/dist/domains/comet-native/native-transition-evidence.d.ts +4 -0
  623. package/dist/domains/comet-native/native-transition-evidence.d.ts.map +1 -0
  624. package/dist/domains/comet-native/native-transition-evidence.js +27 -0
  625. package/dist/domains/comet-native/native-transition-evidence.js.map +1 -0
  626. package/dist/domains/comet-native/native-transition-journal.d.ts +30 -0
  627. package/dist/domains/comet-native/native-transition-journal.d.ts.map +1 -0
  628. package/dist/domains/comet-native/native-transition-journal.js +819 -0
  629. package/dist/domains/comet-native/native-transition-journal.js.map +1 -0
  630. package/dist/domains/comet-native/native-transitions.d.ts +15 -0
  631. package/dist/domains/comet-native/native-transitions.d.ts.map +1 -0
  632. package/dist/domains/comet-native/native-transitions.js +683 -0
  633. package/dist/domains/comet-native/native-transitions.js.map +1 -0
  634. package/dist/domains/comet-native/native-types.d.ts +556 -0
  635. package/dist/domains/comet-native/native-types.d.ts.map +1 -0
  636. package/dist/domains/comet-native/native-types.js +8 -0
  637. package/dist/domains/comet-native/native-types.js.map +1 -0
  638. package/dist/domains/comet-native/native-verification-evidence.d.ts +136 -0
  639. package/dist/domains/comet-native/native-verification-evidence.d.ts.map +1 -0
  640. package/dist/domains/comet-native/native-verification-evidence.js +824 -0
  641. package/dist/domains/comet-native/native-verification-evidence.js.map +1 -0
  642. package/dist/domains/comet-native/native-verification-receipt-runtime.d.ts +188 -0
  643. package/dist/domains/comet-native/native-verification-receipt-runtime.d.ts.map +1 -0
  644. package/dist/domains/comet-native/native-verification-receipt-runtime.js +1129 -0
  645. package/dist/domains/comet-native/native-verification-receipt-runtime.js.map +1 -0
  646. package/dist/domains/comet-native/native-verification-receipt.d.ts +165 -0
  647. package/dist/domains/comet-native/native-verification-receipt.d.ts.map +1 -0
  648. package/dist/domains/comet-native/native-verification-receipt.js +636 -0
  649. package/dist/domains/comet-native/native-verification-receipt.js.map +1 -0
  650. package/dist/domains/comet-native/native-verification-runtime.d.ts +61 -0
  651. package/dist/domains/comet-native/native-verification-runtime.d.ts.map +1 -0
  652. package/dist/domains/comet-native/native-verification-runtime.js +609 -0
  653. package/dist/domains/comet-native/native-verification-runtime.js.map +1 -0
  654. package/dist/domains/comet-native/native-verification-scope.d.ts +118 -0
  655. package/dist/domains/comet-native/native-verification-scope.d.ts.map +1 -0
  656. package/dist/domains/comet-native/native-verification-scope.js +1045 -0
  657. package/dist/domains/comet-native/native-verification-scope.js.map +1 -0
  658. package/dist/domains/comet-native/native-workspace.d.ts +46 -0
  659. package/dist/domains/comet-native/native-workspace.d.ts.map +1 -0
  660. package/dist/domains/comet-native/native-workspace.js +276 -0
  661. package/dist/domains/comet-native/native-workspace.js.map +1 -0
  662. package/dist/domains/dashboard/collector.d.ts.map +1 -1
  663. package/dist/domains/dashboard/collector.js +182 -75
  664. package/dist/domains/dashboard/collector.js.map +1 -1
  665. package/dist/domains/dashboard/native-adapter.d.ts +157 -0
  666. package/dist/domains/dashboard/native-adapter.d.ts.map +1 -0
  667. package/dist/domains/dashboard/native-adapter.js +302 -0
  668. package/dist/domains/dashboard/native-adapter.js.map +1 -0
  669. package/dist/domains/dashboard/native-collector.d.ts +6 -0
  670. package/dist/domains/dashboard/native-collector.d.ts.map +1 -0
  671. package/dist/domains/dashboard/native-collector.js +289 -0
  672. package/dist/domains/dashboard/native-collector.js.map +1 -0
  673. package/dist/domains/dashboard/types.d.ts +10 -0
  674. package/dist/domains/dashboard/types.d.ts.map +1 -1
  675. package/dist/domains/dashboard/verify-parser.d.ts.map +1 -1
  676. package/dist/domains/dashboard/verify-parser.js +37 -31
  677. package/dist/domains/dashboard/verify-parser.js.map +1 -1
  678. package/dist/domains/dashboard/web/assets/_commonjsHelpers-CqkleIqs.js +1 -0
  679. package/dist/domains/dashboard/web/assets/arc-BXWNV2Qv.js +1 -0
  680. package/dist/domains/dashboard/web/assets/architectureDiagram-3BPJPVTR-CjVHPivo.js +36 -0
  681. package/dist/domains/dashboard/web/assets/blockDiagram-GPEHLZMM-P2PGImSM.js +132 -0
  682. package/dist/domains/dashboard/web/assets/c4Diagram-AAUBKEIU-fTj6Xhs1.js +10 -0
  683. package/dist/domains/dashboard/web/assets/channel--JtnhJr8.js +1 -0
  684. package/dist/domains/dashboard/web/assets/chunk-2J33WTMH-BjFDZ5yo.js +1 -0
  685. package/dist/domains/dashboard/web/assets/chunk-4BX2VUAB-BAUkbZdT.js +1 -0
  686. package/dist/domains/dashboard/web/assets/chunk-55IACEB6-DBmuiYme.js +1 -0
  687. package/dist/domains/dashboard/web/assets/chunk-727SXJPM-Do9ufCgY.js +206 -0
  688. package/dist/domains/dashboard/web/assets/chunk-AQP2D5EJ-qRQWlB5d.js +231 -0
  689. package/dist/domains/dashboard/web/assets/chunk-FMBD7UC4-BzDzeJ4_.js +15 -0
  690. package/dist/domains/dashboard/web/assets/chunk-ND2GUHAM-OQcAmIvL.js +1 -0
  691. package/dist/domains/dashboard/web/assets/chunk-QZHKN3VN-BiRfH4d2.js +1 -0
  692. package/dist/domains/dashboard/web/assets/classDiagram-4FO5ZUOK-BRGmx8Iz.js +1 -0
  693. package/dist/domains/dashboard/web/assets/classDiagram-v2-Q7XG4LA2-BRGmx8Iz.js +1 -0
  694. package/dist/domains/dashboard/web/assets/cose-bilkent-S5V4N54A-CZk37fGn.js +1 -0
  695. package/dist/domains/dashboard/web/assets/cynefin-VYW2F7L2-B3F-qRTJ.js +166 -0
  696. package/dist/domains/dashboard/web/assets/cytoscape.esm-D3_iZ_3b.js +321 -0
  697. package/dist/domains/dashboard/web/assets/dagre-BM42HDAG-D5BQ0eqN.js +4 -0
  698. package/dist/domains/dashboard/web/assets/defaultLocale-DX6XiGOO.js +1 -0
  699. package/dist/domains/dashboard/web/assets/demo-BuVau32v.js +25 -0
  700. package/dist/domains/dashboard/web/assets/diagram-2AECGRRQ-33mXstha.js +43 -0
  701. package/dist/domains/dashboard/web/assets/diagram-5GNKFQAL-BWHCMFvD.js +10 -0
  702. package/dist/domains/dashboard/web/assets/diagram-KO2AKTUF-DrPGimEt.js +3 -0
  703. package/dist/domains/dashboard/web/assets/diagram-LMA3HP47-BBlsg7jG.js +24 -0
  704. package/dist/domains/dashboard/web/assets/diagram-OG6HWLK6-CsaFSpHi.js +24 -0
  705. package/dist/domains/dashboard/web/assets/erDiagram-TEJ5UH35-CoB0mzhk.js +85 -0
  706. package/dist/domains/dashboard/web/assets/flowDiagram-I6XJVG4X-lT53XfSE.js +162 -0
  707. package/dist/domains/dashboard/web/assets/ganttDiagram-6RSMTGT7-D1SQ56fl.js +292 -0
  708. package/dist/domains/dashboard/web/assets/gitGraphDiagram-PVQCEYII-D4oDMS5x.js +106 -0
  709. package/dist/domains/dashboard/web/assets/graph--OzhPTMs.js +1 -0
  710. package/dist/domains/dashboard/web/assets/index-D-AGxvI4.css +1 -0
  711. package/dist/domains/dashboard/web/assets/index-DlSYK56b.js +139 -0
  712. package/dist/domains/dashboard/web/assets/index-Msce_H_q.js +24 -0
  713. package/dist/domains/dashboard/web/assets/index-QO0z6F4w.js +10 -0
  714. package/dist/domains/dashboard/web/assets/infoDiagram-5YYISTIA-BeICn98s.js +2 -0
  715. package/dist/domains/dashboard/web/assets/init-Gi6I4Gst.js +1 -0
  716. package/dist/domains/dashboard/web/assets/ishikawaDiagram-YF4QCWOH-Dkspu33d.js +70 -0
  717. package/dist/domains/dashboard/web/assets/journeyDiagram-JHISSGLW-C-EM1sZl.js +139 -0
  718. package/dist/domains/dashboard/web/assets/kanban-definition-UN3LZRKU-BTbB0IO2.js +89 -0
  719. package/dist/domains/dashboard/web/assets/katex-HP8lGamR.js +257 -0
  720. package/dist/domains/dashboard/web/assets/layout-SsrduOYp.js +1 -0
  721. package/dist/domains/dashboard/web/assets/linear-Cp0UrqDr.js +1 -0
  722. package/dist/domains/dashboard/web/assets/marked.esm-DECB3bxB.js +64 -0
  723. package/dist/domains/dashboard/web/assets/mermaid.core-CucmqsLW.js +301 -0
  724. package/dist/domains/dashboard/web/assets/mindmap-definition-RKZ34NQL-CjEshF1X.js +96 -0
  725. package/dist/domains/dashboard/web/assets/ordinal-Cboi1Yqb.js +1 -0
  726. package/dist/domains/dashboard/web/assets/pieDiagram-4H26LBE5-DrwFnX1b.js +30 -0
  727. package/dist/domains/dashboard/web/assets/purify.es-VaSPOPhr.js +3 -0
  728. package/dist/domains/dashboard/web/assets/quadrantDiagram-W4KKPZXB-CjG6pBR2.js +7 -0
  729. package/dist/domains/dashboard/web/assets/requirementDiagram-4Y6WPE33-BpUQVqCV.js +84 -0
  730. package/dist/domains/dashboard/web/assets/sankeyDiagram-5OEKKPKP-BeGkEvzR.js +40 -0
  731. package/dist/domains/dashboard/web/assets/sequenceDiagram-3UESZ5HK-sSTU3MCO.js +162 -0
  732. package/dist/domains/dashboard/web/assets/stateDiagram-AJRCARHV-CcFBc6qh.js +1 -0
  733. package/dist/domains/dashboard/web/assets/stateDiagram-v2-BHNVJYJU-D5zZYi4x.js +1 -0
  734. package/dist/domains/dashboard/web/assets/timeline-definition-PNZ67QCA-DCN7NjEs.js +120 -0
  735. package/dist/domains/dashboard/web/assets/vennDiagram-CIIHVFJN-DZAN1_rr.js +34 -0
  736. package/dist/domains/dashboard/web/assets/wardleyDiagram-YWT4CUSO-FfkJfr4C.js +78 -0
  737. package/dist/domains/dashboard/web/assets/xychartDiagram-2RQKCTM6-CD8B-EmR.js +7 -0
  738. package/dist/domains/dashboard/web/index.html +16 -16
  739. package/dist/domains/engine/protected-run-file.d.ts +15 -0
  740. package/dist/domains/engine/protected-run-file.d.ts.map +1 -0
  741. package/dist/domains/engine/protected-run-file.js +76 -0
  742. package/dist/domains/engine/protected-run-file.js.map +1 -0
  743. package/dist/domains/engine/run-store.d.ts +12 -11
  744. package/dist/domains/engine/run-store.d.ts.map +1 -1
  745. package/dist/domains/engine/run-store.js +46 -65
  746. package/dist/domains/engine/run-store.js.map +1 -1
  747. package/dist/domains/engine/state.d.ts +4 -3
  748. package/dist/domains/engine/state.d.ts.map +1 -1
  749. package/dist/domains/engine/state.js +10 -21
  750. package/dist/domains/engine/state.js.map +1 -1
  751. package/dist/domains/engine/storage-layout.d.ts +14 -0
  752. package/dist/domains/engine/storage-layout.d.ts.map +1 -0
  753. package/dist/domains/engine/storage-layout.js +32 -0
  754. package/dist/domains/engine/storage-layout.js.map +1 -0
  755. package/dist/domains/engine/storage-run.d.ts +9 -0
  756. package/dist/domains/engine/storage-run.d.ts.map +1 -0
  757. package/dist/domains/engine/storage-run.js +116 -0
  758. package/dist/domains/engine/storage-run.js.map +1 -0
  759. package/dist/domains/engine/types.d.ts +1 -1
  760. package/dist/domains/engine/types.d.ts.map +1 -1
  761. package/dist/domains/factory/package.d.ts.map +1 -1
  762. package/dist/domains/factory/package.js +562 -91
  763. package/dist/domains/factory/package.js.map +1 -1
  764. package/dist/domains/integrations/codegraph.d.ts +13 -2
  765. package/dist/domains/integrations/codegraph.d.ts.map +1 -1
  766. package/dist/domains/integrations/codegraph.js +160 -12
  767. package/dist/domains/integrations/codegraph.js.map +1 -1
  768. package/dist/domains/integrations/openspec.d.ts +12 -2
  769. package/dist/domains/integrations/openspec.d.ts.map +1 -1
  770. package/dist/domains/integrations/openspec.js +256 -47
  771. package/dist/domains/integrations/openspec.js.map +1 -1
  772. package/dist/domains/skill/find.js +8 -7
  773. package/dist/domains/skill/find.js.map +1 -1
  774. package/dist/domains/skill/json-object.d.ts +13 -0
  775. package/dist/domains/skill/json-object.d.ts.map +1 -0
  776. package/dist/domains/skill/json-object.js +24 -0
  777. package/dist/domains/skill/json-object.js.map +1 -0
  778. package/dist/domains/skill/languages.d.ts +2 -1
  779. package/dist/domains/skill/languages.d.ts.map +1 -1
  780. package/dist/domains/skill/languages.js +4 -1
  781. package/dist/domains/skill/languages.js.map +1 -1
  782. package/dist/domains/skill/managed-markdown.d.ts +14 -0
  783. package/dist/domains/skill/managed-markdown.d.ts.map +1 -0
  784. package/dist/domains/skill/managed-markdown.js +126 -0
  785. package/dist/domains/skill/managed-markdown.js.map +1 -0
  786. package/dist/domains/skill/platform-inspect.d.ts +13 -0
  787. package/dist/domains/skill/platform-inspect.d.ts.map +1 -0
  788. package/dist/domains/skill/platform-inspect.js +193 -0
  789. package/dist/domains/skill/platform-inspect.js.map +1 -0
  790. package/dist/domains/skill/platform-install.d.ts +38 -23
  791. package/dist/domains/skill/platform-install.d.ts.map +1 -1
  792. package/dist/domains/skill/platform-install.js +809 -230
  793. package/dist/domains/skill/platform-install.js.map +1 -1
  794. package/dist/domains/skill/project-instructions.d.ts +22 -0
  795. package/dist/domains/skill/project-instructions.d.ts.map +1 -0
  796. package/dist/domains/skill/project-instructions.js +69 -0
  797. package/dist/domains/skill/project-instructions.js.map +1 -0
  798. package/dist/domains/skill/uninstall.d.ts +9 -2
  799. package/dist/domains/skill/uninstall.d.ts.map +1 -1
  800. package/dist/domains/skill/uninstall.js +734 -158
  801. package/dist/domains/skill/uninstall.js.map +1 -1
  802. package/dist/domains/workflow-contract/builtins.d.ts +6 -0
  803. package/dist/domains/workflow-contract/builtins.d.ts.map +1 -1
  804. package/dist/domains/workflow-contract/builtins.js +149 -6
  805. package/dist/domains/workflow-contract/builtins.js.map +1 -1
  806. package/dist/domains/workflow-contract/contained-atomic-write.d.ts +21 -0
  807. package/dist/domains/workflow-contract/contained-atomic-write.d.ts.map +1 -0
  808. package/dist/domains/workflow-contract/contained-atomic-write.js +235 -0
  809. package/dist/domains/workflow-contract/contained-atomic-write.js.map +1 -0
  810. package/dist/domains/workflow-contract/index.d.ts +11 -1
  811. package/dist/domains/workflow-contract/index.d.ts.map +1 -1
  812. package/dist/domains/workflow-contract/index.js +7 -1
  813. package/dist/domains/workflow-contract/index.js.map +1 -1
  814. package/dist/domains/workflow-contract/normalize.d.ts.map +1 -1
  815. package/dist/domains/workflow-contract/normalize.js +30 -11
  816. package/dist/domains/workflow-contract/normalize.js.map +1 -1
  817. package/dist/domains/workflow-contract/project-config-reader.d.ts +24 -0
  818. package/dist/domains/workflow-contract/project-config-reader.d.ts.map +1 -0
  819. package/dist/domains/workflow-contract/project-config-reader.js +54 -0
  820. package/dist/domains/workflow-contract/project-config-reader.js.map +1 -0
  821. package/dist/domains/workflow-contract/project-config-transaction.d.ts +20 -0
  822. package/dist/domains/workflow-contract/project-config-transaction.d.ts.map +1 -0
  823. package/dist/domains/workflow-contract/project-config-transaction.js +293 -0
  824. package/dist/domains/workflow-contract/project-config-transaction.js.map +1 -0
  825. package/dist/domains/workflow-contract/project-config-writer.d.ts +13 -0
  826. package/dist/domains/workflow-contract/project-config-writer.d.ts.map +1 -0
  827. package/dist/domains/workflow-contract/project-config-writer.js +142 -0
  828. package/dist/domains/workflow-contract/project-config-writer.js.map +1 -0
  829. package/dist/domains/workflow-contract/project-config.d.ts +32 -0
  830. package/dist/domains/workflow-contract/project-config.d.ts.map +1 -0
  831. package/dist/domains/workflow-contract/project-config.js +1566 -0
  832. package/dist/domains/workflow-contract/project-config.js.map +1 -0
  833. package/dist/domains/workflow-contract/protected-project-path.d.ts +34 -0
  834. package/dist/domains/workflow-contract/protected-project-path.d.ts.map +1 -0
  835. package/dist/domains/workflow-contract/protected-project-path.js +162 -0
  836. package/dist/domains/workflow-contract/protected-project-path.js.map +1 -0
  837. package/dist/domains/workflow-contract/types.d.ts +67 -2
  838. package/dist/domains/workflow-contract/types.d.ts.map +1 -1
  839. package/dist/domains/workflow-contract/validation.d.ts.map +1 -1
  840. package/dist/domains/workflow-contract/validation.js +14 -5
  841. package/dist/domains/workflow-contract/validation.js.map +1 -1
  842. package/dist/platform/fs/file-identity.d.ts +9 -0
  843. package/dist/platform/fs/file-identity.d.ts.map +1 -0
  844. package/dist/platform/fs/file-identity.js +21 -0
  845. package/dist/platform/fs/file-identity.js.map +1 -0
  846. package/dist/platform/fs/file-system.d.ts +3 -3
  847. package/dist/platform/fs/file-system.d.ts.map +1 -1
  848. package/dist/platform/fs/file-system.js +31 -17
  849. package/dist/platform/fs/file-system.js.map +1 -1
  850. package/dist/platform/fs/race-safe-read.d.ts +47 -0
  851. package/dist/platform/fs/race-safe-read.d.ts.map +1 -0
  852. package/dist/platform/fs/race-safe-read.js +132 -0
  853. package/dist/platform/fs/race-safe-read.js.map +1 -0
  854. package/dist/platform/fs/trusted-readonly-file.d.ts +31 -0
  855. package/dist/platform/fs/trusted-readonly-file.d.ts.map +1 -0
  856. package/dist/platform/fs/trusted-readonly-file.js +107 -0
  857. package/dist/platform/fs/trusted-readonly-file.js.map +1 -0
  858. package/dist/platform/install/detect.d.ts +5 -2
  859. package/dist/platform/install/detect.d.ts.map +1 -1
  860. package/dist/platform/install/detect.js +14 -2
  861. package/dist/platform/install/detect.js.map +1 -1
  862. package/dist/platform/install/platform-targets.d.ts +8 -0
  863. package/dist/platform/install/platform-targets.d.ts.map +1 -0
  864. package/dist/platform/install/platform-targets.js +31 -0
  865. package/dist/platform/install/platform-targets.js.map +1 -0
  866. package/dist/platform/install/platforms.d.ts +10 -1
  867. package/dist/platform/install/platforms.d.ts.map +1 -1
  868. package/dist/platform/install/platforms.js +27 -4
  869. package/dist/platform/install/platforms.js.map +1 -1
  870. package/dist/platform/install/project-registry.d.ts +38 -0
  871. package/dist/platform/install/project-registry.d.ts.map +1 -0
  872. package/dist/platform/install/project-registry.js +213 -0
  873. package/dist/platform/install/project-registry.js.map +1 -0
  874. package/dist/platform/install/skill-root-owner.d.ts +15 -0
  875. package/dist/platform/install/skill-root-owner.d.ts.map +1 -0
  876. package/dist/platform/install/skill-root-owner.js +68 -0
  877. package/dist/platform/install/skill-root-owner.js.map +1 -0
  878. package/dist/platform/paths/git-worktree.d.ts +10 -0
  879. package/dist/platform/paths/git-worktree.d.ts.map +1 -0
  880. package/dist/platform/paths/git-worktree.js +43 -0
  881. package/dist/platform/paths/git-worktree.js.map +1 -0
  882. package/dist/platform/paths/repository-layout.d.ts +16 -0
  883. package/dist/platform/paths/repository-layout.d.ts.map +1 -1
  884. package/dist/platform/paths/repository-layout.js.map +1 -1
  885. package/dist/platform/process/terminate-process-tree.d.ts +3 -0
  886. package/dist/platform/process/terminate-process-tree.d.ts.map +1 -0
  887. package/dist/platform/process/terminate-process-tree.js +65 -0
  888. package/dist/platform/process/terminate-process-tree.js.map +1 -0
  889. package/eval/CLAUDE.md +43 -0
  890. package/eval/README.md +538 -0
  891. package/eval/langsmith/README.md +93 -0
  892. package/eval/langsmith/skills/README.md +5 -0
  893. package/eval/langsmith/tasks/README.md +5 -0
  894. package/eval/langsmith/tests/conftest.py +187 -0
  895. package/eval/langsmith/tests/tasks/test_tasks.py +287 -0
  896. package/eval/langsmith/treatments/README.md +5 -0
  897. package/eval/local/README.md +130 -0
  898. package/eval/local/regression_baseline.json +13 -0
  899. package/eval/local/report-style-demo-assets/quality_cost.en.svg +41 -0
  900. package/eval/local/report-style-demo-assets/quality_cost.zh.svg +41 -0
  901. package/eval/local/report-style-demo-assets/rubric_delta.en.svg +56 -0
  902. package/eval/local/report-style-demo-assets/rubric_delta.zh.svg +56 -0
  903. package/eval/local/report-style-demo-assets/task_outcomes.en.svg +46 -0
  904. package/eval/local/report-style-demo-assets/task_outcomes.zh.svg +46 -0
  905. package/eval/local/report-style-demo.html +867 -0
  906. package/eval/local/scripts/compare_baselines.py +1144 -0
  907. package/eval/local/scripts/generate_report_style_demo_charts.py +322 -0
  908. package/eval/local/scripts/regression_check.py +170 -0
  909. package/eval/local/scripts/render_readme_benchmark_figures.py +416 -0
  910. package/eval/local/scripts/rescore_rubric.py +120 -0
  911. package/eval/local/skills/benchmarks/039-release/comet-classic-039/SKILL.md +282 -0
  912. package/eval/local/skills/benchmarks/039-release/comet-classic-039/reference/auto-transition.md +27 -0
  913. package/eval/local/skills/benchmarks/039-release/comet-classic-039/reference/comet-yaml-fields.md +68 -0
  914. package/eval/local/skills/benchmarks/039-release/comet-classic-039/reference/context-recovery.md +35 -0
  915. package/eval/local/skills/benchmarks/039-release/comet-classic-039/reference/debug-gate.md +17 -0
  916. package/eval/local/skills/benchmarks/039-release/comet-classic-039/reference/decision-point.md +20 -0
  917. package/eval/local/skills/benchmarks/039-release/comet-classic-039/reference/dirty-worktree.md +59 -0
  918. package/eval/local/skills/benchmarks/039-release/comet-classic-039/reference/file-structure.md +28 -0
  919. package/eval/local/skills/benchmarks/039-release/comet-classic-039/reference/subagent-dispatch.md +113 -0
  920. package/eval/local/skills/benchmarks/039-release/comet-classic-039/rules/comet-phase-guard.md +125 -0
  921. package/eval/local/skills/benchmarks/039-release/comet-classic-039/scripts/comet-archive.sh +311 -0
  922. package/eval/local/skills/benchmarks/039-release/comet-classic-039/scripts/comet-env.sh +110 -0
  923. package/eval/local/skills/benchmarks/039-release/comet-classic-039/scripts/comet-guard.sh +778 -0
  924. package/eval/local/skills/benchmarks/039-release/comet-classic-039/scripts/comet-handoff.sh +390 -0
  925. package/eval/local/skills/benchmarks/039-release/comet-classic-039/scripts/comet-hook-guard.sh +336 -0
  926. package/eval/local/skills/benchmarks/039-release/comet-classic-039/scripts/comet-state.sh +1338 -0
  927. package/eval/local/skills/benchmarks/039-release/comet-classic-039/scripts/comet-yaml-validate.sh +225 -0
  928. package/eval/local/skills/benchmarks/039-release/comet-classic-039-archive/SKILL.md +100 -0
  929. package/eval/local/skills/benchmarks/039-release/comet-classic-039-build/SKILL.md +304 -0
  930. package/eval/local/skills/benchmarks/039-release/comet-classic-039-design/SKILL.md +263 -0
  931. package/eval/local/skills/benchmarks/039-release/comet-classic-039-hotfix/SKILL.md +204 -0
  932. package/eval/local/skills/benchmarks/039-release/comet-classic-039-open/SKILL.md +220 -0
  933. package/eval/local/skills/benchmarks/039-release/comet-classic-039-tweak/SKILL.md +180 -0
  934. package/eval/local/skills/benchmarks/039-release/comet-classic-039-verify/SKILL.md +234 -0
  935. package/eval/local/skills/benchmarks/040-beta/comet/SKILL.md +261 -0
  936. package/eval/local/skills/benchmarks/040-beta/comet/reference/auto-transition.md +27 -0
  937. package/eval/local/skills/benchmarks/040-beta/comet/reference/comet-yaml-fields.md +73 -0
  938. package/eval/local/skills/benchmarks/040-beta/comet/reference/context-recovery.md +45 -0
  939. package/eval/local/skills/benchmarks/040-beta/comet/reference/debug-gate.md +33 -0
  940. package/eval/local/skills/benchmarks/040-beta/comet/reference/decision-point.md +31 -0
  941. package/eval/local/skills/benchmarks/040-beta/comet/reference/dirty-worktree.md +59 -0
  942. package/eval/local/skills/benchmarks/040-beta/comet/reference/file-structure.md +28 -0
  943. package/eval/local/skills/benchmarks/040-beta/comet/reference/intent-frame.md +74 -0
  944. package/eval/local/skills/benchmarks/040-beta/comet/reference/scripts.md +69 -0
  945. package/eval/local/skills/benchmarks/040-beta/comet/reference/subagent-dispatch.md +169 -0
  946. package/eval/local/skills/benchmarks/040-beta/comet/rules/comet-phase-guard.md +130 -0
  947. package/eval/local/skills/benchmarks/040-beta/comet/runtime/classic/checks.yaml +6 -0
  948. package/eval/local/skills/benchmarks/040-beta/comet/runtime/classic/guardrails.yaml +13 -0
  949. package/eval/local/skills/benchmarks/040-beta/comet/runtime/classic/skill.yaml +122 -0
  950. package/eval/local/skills/benchmarks/040-beta/comet/scripts/comet-archive.mjs +9515 -0
  951. package/eval/local/skills/benchmarks/040-beta/comet/scripts/comet-env.mjs +15 -0
  952. package/eval/local/skills/benchmarks/040-beta/comet/scripts/comet-guard.mjs +10173 -0
  953. package/eval/local/skills/benchmarks/040-beta/comet/scripts/comet-handoff.mjs +9491 -0
  954. package/eval/local/skills/benchmarks/040-beta/comet/scripts/comet-hook-guard.mjs +9175 -0
  955. package/eval/local/skills/benchmarks/040-beta/comet/scripts/comet-intent.mjs +404 -0
  956. package/eval/local/skills/benchmarks/040-beta/comet/scripts/comet-state.mjs +9273 -0
  957. package/eval/local/skills/benchmarks/040-beta/comet/scripts/comet-yaml-validate.mjs +7627 -0
  958. package/eval/local/skills/benchmarks/040-beta/comet-archive/SKILL.md +110 -0
  959. package/eval/local/skills/benchmarks/040-beta/comet-build/SKILL.md +315 -0
  960. package/eval/local/skills/benchmarks/040-beta/comet-design/SKILL.md +260 -0
  961. package/eval/local/skills/benchmarks/040-beta/comet-hotfix/SKILL.md +190 -0
  962. package/eval/local/skills/benchmarks/040-beta/comet-open/SKILL.md +210 -0
  963. package/eval/local/skills/benchmarks/040-beta/comet-tweak/SKILL.md +183 -0
  964. package/eval/local/skills/benchmarks/040-beta/comet-verify/SKILL.md +230 -0
  965. package/eval/local/skills/benchmarks/dependency/claude-md/comet-workflow/CLAUDE.md +12 -0
  966. package/eval/local/skills/benchmarks/dependency/openspec/openspec-apply-change/SKILL.md +156 -0
  967. package/eval/local/skills/benchmarks/dependency/openspec/openspec-archive-change/SKILL.md +114 -0
  968. package/eval/local/skills/benchmarks/dependency/openspec/openspec-bulk-archive-change/SKILL.md +246 -0
  969. package/eval/local/skills/benchmarks/dependency/openspec/openspec-continue-change/SKILL.md +118 -0
  970. package/eval/local/skills/benchmarks/dependency/openspec/openspec-explore/SKILL.md +288 -0
  971. package/eval/local/skills/benchmarks/dependency/openspec/openspec-ff-change/SKILL.md +101 -0
  972. package/eval/local/skills/benchmarks/dependency/openspec/openspec-new-change/SKILL.md +74 -0
  973. package/eval/local/skills/benchmarks/dependency/openspec/openspec-onboard/SKILL.md +554 -0
  974. package/eval/local/skills/benchmarks/dependency/openspec/openspec-propose/SKILL.md +110 -0
  975. package/eval/local/skills/benchmarks/dependency/openspec/openspec-sync-specs/SKILL.md +138 -0
  976. package/eval/local/skills/benchmarks/dependency/openspec/openspec-verify-change/SKILL.md +168 -0
  977. package/eval/local/skills/benchmarks/dependency/superpowers/brainstorming/SKILL.md +159 -0
  978. package/eval/local/skills/benchmarks/dependency/superpowers/brainstorming/scripts/frame-template.html +213 -0
  979. package/eval/local/skills/benchmarks/dependency/superpowers/brainstorming/scripts/helper.js +167 -0
  980. package/eval/local/skills/benchmarks/dependency/superpowers/brainstorming/scripts/server.cjs +723 -0
  981. package/eval/local/skills/benchmarks/dependency/superpowers/brainstorming/scripts/start-server.sh +209 -0
  982. package/eval/local/skills/benchmarks/dependency/superpowers/brainstorming/scripts/stop-server.sh +120 -0
  983. package/eval/local/skills/benchmarks/dependency/superpowers/brainstorming/spec-document-reviewer-prompt.md +49 -0
  984. package/eval/local/skills/benchmarks/dependency/superpowers/brainstorming/visual-companion.md +291 -0
  985. package/eval/local/skills/benchmarks/dependency/superpowers/dispatching-parallel-agents/SKILL.md +185 -0
  986. package/eval/local/skills/benchmarks/dependency/superpowers/executing-plans/SKILL.md +70 -0
  987. package/eval/local/skills/benchmarks/dependency/superpowers/finishing-a-development-branch/SKILL.md +241 -0
  988. package/eval/local/skills/benchmarks/dependency/superpowers/receiving-code-review/SKILL.md +213 -0
  989. package/eval/local/skills/benchmarks/dependency/superpowers/requesting-code-review/SKILL.md +103 -0
  990. package/eval/local/skills/benchmarks/dependency/superpowers/requesting-code-review/code-reviewer.md +172 -0
  991. package/eval/local/skills/benchmarks/dependency/superpowers/subagent-driven-development/SKILL.md +418 -0
  992. package/eval/local/skills/benchmarks/dependency/superpowers/subagent-driven-development/implementer-prompt.md +139 -0
  993. package/eval/local/skills/benchmarks/dependency/superpowers/subagent-driven-development/scripts/review-package +44 -0
  994. package/eval/local/skills/benchmarks/dependency/superpowers/subagent-driven-development/scripts/sdd-workspace +22 -0
  995. package/eval/local/skills/benchmarks/dependency/superpowers/subagent-driven-development/scripts/task-brief +40 -0
  996. package/eval/local/skills/benchmarks/dependency/superpowers/subagent-driven-development/task-reviewer-prompt.md +188 -0
  997. package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/CREATION-LOG.md +119 -0
  998. package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/SKILL.md +296 -0
  999. package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/condition-based-waiting-example.ts +158 -0
  1000. package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/condition-based-waiting.md +115 -0
  1001. package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/defense-in-depth.md +122 -0
  1002. package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/find-polluter.sh +63 -0
  1003. package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/root-cause-tracing.md +169 -0
  1004. package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/test-academic.md +14 -0
  1005. package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/test-pressure-1.md +58 -0
  1006. package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/test-pressure-2.md +68 -0
  1007. package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/test-pressure-3.md +69 -0
  1008. package/eval/local/skills/benchmarks/dependency/superpowers/test-driven-development/SKILL.md +371 -0
  1009. package/eval/local/skills/benchmarks/dependency/superpowers/test-driven-development/testing-anti-patterns.md +299 -0
  1010. package/eval/local/skills/benchmarks/dependency/superpowers/using-git-worktrees/SKILL.md +202 -0
  1011. package/eval/local/skills/benchmarks/dependency/superpowers/verification-before-completion/SKILL.md +139 -0
  1012. package/eval/local/skills/benchmarks/dependency/superpowers/writing-plans/SKILL.md +174 -0
  1013. package/eval/local/skills/benchmarks/dependency/superpowers/writing-plans/plan-document-reviewer-prompt.md +49 -0
  1014. package/eval/local/skills/benchmarks/dependency/superpowers/writing-skills/SKILL.md +689 -0
  1015. package/eval/local/skills/benchmarks/dependency/superpowers/writing-skills/anthropic-best-practices.md +1150 -0
  1016. package/eval/local/skills/benchmarks/dependency/superpowers/writing-skills/examples/CLAUDE_MD_TESTING.md +189 -0
  1017. package/eval/local/skills/benchmarks/dependency/superpowers/writing-skills/graphviz-conventions.dot +172 -0
  1018. package/eval/local/skills/benchmarks/dependency/superpowers/writing-skills/persuasion-principles.md +187 -0
  1019. package/eval/local/skills/benchmarks/dependency/superpowers/writing-skills/render-graphs.js +168 -0
  1020. package/eval/local/skills/benchmarks/dependency/superpowers/writing-skills/testing-skills-with-subagents.md +384 -0
  1021. package/eval/local/tasks/authoring-skill-smoke/environment/Dockerfile +14 -0
  1022. package/eval/local/tasks/authoring-skill-smoke/instruction.md +4 -0
  1023. package/eval/local/tasks/authoring-skill-smoke/task.toml +21 -0
  1024. package/eval/local/tasks/authoring-skill-smoke/validation/test_authoring_skill_smoke.py +54 -0
  1025. package/eval/local/tasks/comet-agent-memory-routing/environment/Dockerfile +26 -0
  1026. package/eval/local/tasks/comet-agent-memory-routing/environment/agent_system.py +40 -0
  1027. package/eval/local/tasks/comet-agent-memory-routing/environment/test_agent_system.py +29 -0
  1028. package/eval/local/tasks/comet-agent-memory-routing/instruction.md +20 -0
  1029. package/eval/local/tasks/comet-agent-memory-routing/task.toml +24 -0
  1030. package/eval/local/tasks/comet-agent-memory-routing/validation/test_agent_memory_routing.py +24 -0
  1031. package/eval/local/tasks/comet-api-cache-ttl/environment/Dockerfile +35 -0
  1032. package/eval/local/tasks/comet-api-cache-ttl/environment/cache.py +39 -0
  1033. package/eval/local/tasks/comet-api-cache-ttl/environment/test_cache.py +81 -0
  1034. package/eval/local/tasks/comet-api-cache-ttl/instruction.md +33 -0
  1035. package/eval/local/tasks/comet-api-cache-ttl/task.toml +24 -0
  1036. package/eval/local/tasks/comet-api-cache-ttl/validation/test_api_cache_ttl.py +58 -0
  1037. package/eval/local/tasks/comet-classic-layout-lifecycle/environment/.include-current-comet-cli +1 -0
  1038. package/eval/local/tasks/comet-classic-layout-lifecycle/environment/Dockerfile +45 -0
  1039. package/eval/local/tasks/comet-classic-layout-lifecycle/environment/current-comet-package.json +18 -0
  1040. package/eval/local/tasks/comet-classic-layout-lifecycle/environment/current-comet.sh +14 -0
  1041. package/eval/local/tasks/comet-classic-layout-lifecycle/environment/test_wordcount.py +29 -0
  1042. package/eval/local/tasks/comet-classic-layout-lifecycle/environment/wordcount.py +40 -0
  1043. package/eval/local/tasks/comet-classic-layout-lifecycle/instruction.md +18 -0
  1044. package/eval/local/tasks/comet-classic-layout-lifecycle/task.toml +23 -0
  1045. package/eval/local/tasks/comet-classic-layout-lifecycle/validation/test_classic_layout_lifecycle.py +604 -0
  1046. package/eval/local/tasks/comet-cross-file-refactor/environment/Dockerfile +15 -0
  1047. package/eval/local/tasks/comet-cross-file-refactor/environment/cli.py +13 -0
  1048. package/eval/local/tasks/comet-cross-file-refactor/environment/counting.py +13 -0
  1049. package/eval/local/tasks/comet-cross-file-refactor/environment/test_textkit.py +21 -0
  1050. package/eval/local/tasks/comet-cross-file-refactor/instruction.md +16 -0
  1051. package/eval/local/tasks/comet-cross-file-refactor/task.toml +20 -0
  1052. package/eval/local/tasks/comet-cross-file-refactor/validation/test_cross_file_refactor.py +20 -0
  1053. package/eval/local/tasks/comet-dependency-confusion/environment/Dockerfile +25 -0
  1054. package/eval/local/tasks/comet-dependency-confusion/environment/app.py +8 -0
  1055. package/eval/local/tasks/comet-dependency-confusion/environment/settings_loader.py +14 -0
  1056. package/eval/local/tasks/comet-dependency-confusion/environment/test_settings_service.py +19 -0
  1057. package/eval/local/tasks/comet-dependency-confusion/instruction.md +18 -0
  1058. package/eval/local/tasks/comet-dependency-confusion/task.toml +24 -0
  1059. package/eval/local/tasks/comet-dependency-confusion/validation/test_dependency_confusion.py +24 -0
  1060. package/eval/local/tasks/comet-fix-median/environment/Dockerfile +46 -0
  1061. package/eval/local/tasks/comet-fix-median/environment/stats.py +54 -0
  1062. package/eval/local/tasks/comet-fix-median/environment/test_stats.py +68 -0
  1063. package/eval/local/tasks/comet-fix-median/instruction.md +25 -0
  1064. package/eval/local/tasks/comet-fix-median/task.toml +24 -0
  1065. package/eval/local/tasks/comet-fix-median/validation/test_fix_median.py +60 -0
  1066. package/eval/local/tasks/comet-framework-selection/environment/Dockerfile +25 -0
  1067. package/eval/local/tasks/comet-framework-selection/environment/architecture.py +12 -0
  1068. package/eval/local/tasks/comet-framework-selection/environment/test_architecture.py +30 -0
  1069. package/eval/local/tasks/comet-framework-selection/instruction.md +22 -0
  1070. package/eval/local/tasks/comet-framework-selection/task.toml +24 -0
  1071. package/eval/local/tasks/comet-framework-selection/validation/test_framework_selection.py +24 -0
  1072. package/eval/local/tasks/comet-full-workflow/environment/Dockerfile +49 -0
  1073. package/eval/local/tasks/comet-full-workflow/environment/test_wordcount.py +29 -0
  1074. package/eval/local/tasks/comet-full-workflow/environment/wordcount.py +40 -0
  1075. package/eval/local/tasks/comet-full-workflow/instruction.md +18 -0
  1076. package/eval/local/tasks/comet-full-workflow/task.toml +24 -0
  1077. package/eval/local/tasks/comet-full-workflow/validation/test_full_workflow.py +171 -0
  1078. package/eval/local/tasks/comet-graph-execution-review/environment/Dockerfile +25 -0
  1079. package/eval/local/tasks/comet-graph-execution-review/environment/pipeline.py +19 -0
  1080. package/eval/local/tasks/comet-graph-execution-review/environment/test_pipeline.py +53 -0
  1081. package/eval/local/tasks/comet-graph-execution-review/instruction.md +21 -0
  1082. package/eval/local/tasks/comet-graph-execution-review/task.toml +24 -0
  1083. package/eval/local/tasks/comet-graph-execution-review/validation/test_graph_execution_review.py +24 -0
  1084. package/eval/local/tasks/comet-human-approval-flow/environment/Dockerfile +15 -0
  1085. package/eval/local/tasks/comet-human-approval-flow/environment/approvals.py +17 -0
  1086. package/eval/local/tasks/comet-human-approval-flow/environment/test_approvals.py +30 -0
  1087. package/eval/local/tasks/comet-human-approval-flow/instruction.md +15 -0
  1088. package/eval/local/tasks/comet-human-approval-flow/task.toml +20 -0
  1089. package/eval/local/tasks/comet-human-approval-flow/validation/test_human_approval_flow.py +20 -0
  1090. package/eval/local/tasks/comet-layered-streaming-fix/environment/Dockerfile +17 -0
  1091. package/eval/local/tasks/comet-layered-streaming-fix/environment/chat_app.py +19 -0
  1092. package/eval/local/tasks/comet-layered-streaming-fix/environment/test_chat_app.py +15 -0
  1093. package/eval/local/tasks/comet-layered-streaming-fix/instruction.md +14 -0
  1094. package/eval/local/tasks/comet-layered-streaming-fix/task.toml +20 -0
  1095. package/eval/local/tasks/comet-layered-streaming-fix/validation/test_layered_streaming_fix.py +20 -0
  1096. package/eval/local/tasks/comet-native-clarification/environment/Dockerfile +25 -0
  1097. package/eval/local/tasks/comet-native-clarification/environment/test_wordcount.py +25 -0
  1098. package/eval/local/tasks/comet-native-clarification/environment/wordcount.py +36 -0
  1099. package/eval/local/tasks/comet-native-clarification/instruction.md +7 -0
  1100. package/eval/local/tasks/comet-native-clarification/task.toml +40 -0
  1101. package/eval/local/tasks/comet-native-clarification/validation/test_native_clarification.py +193 -0
  1102. package/eval/local/tasks/comet-native-clarification-depth/environment/Dockerfile +25 -0
  1103. package/eval/local/tasks/comet-native-clarification-depth/environment/test_wordcount.py +25 -0
  1104. package/eval/local/tasks/comet-native-clarification-depth/environment/wordcount.py +36 -0
  1105. package/eval/local/tasks/comet-native-clarification-depth/instruction.md +17 -0
  1106. package/eval/local/tasks/comet-native-clarification-depth/task.toml +47 -0
  1107. package/eval/local/tasks/comet-native-clarification-depth/validation/test_native_clarification_depth.py +618 -0
  1108. package/eval/local/tasks/comet-native-clarification-modes/environment/Dockerfile +25 -0
  1109. package/eval/local/tasks/comet-native-clarification-modes/environment/test_wordcount.py +25 -0
  1110. package/eval/local/tasks/comet-native-clarification-modes/environment/wordcount.py +36 -0
  1111. package/eval/local/tasks/comet-native-clarification-modes/instruction.md +13 -0
  1112. package/eval/local/tasks/comet-native-clarification-modes/task.toml +39 -0
  1113. package/eval/local/tasks/comet-native-clarification-modes/validation/test_native_clarification_modes.py +235 -0
  1114. package/eval/local/tasks/comet-native-interrupted-transition/environment/.comet/config.yaml +6 -0
  1115. package/eval/local/tasks/comet-native-interrupted-transition/environment/Dockerfile +26 -0
  1116. package/eval/local/tasks/comet-native-interrupted-transition/environment/docs/comet/changes/add-character-counting/brief.md +17 -0
  1117. package/eval/local/tasks/comet-native-interrupted-transition/environment/docs/comet/changes/add-character-counting/comet-state.yaml +12 -0
  1118. package/eval/local/tasks/comet-native-interrupted-transition/environment/docs/comet/changes/add-character-counting/runtime/transition.json +69 -0
  1119. package/eval/local/tasks/comet-native-interrupted-transition/environment/docs/comet/changes/add-character-counting/specs/character-counting/spec.md +3 -0
  1120. package/eval/local/tasks/comet-native-interrupted-transition/environment/test_wordcount.py +20 -0
  1121. package/eval/local/tasks/comet-native-interrupted-transition/environment/wordcount.py +27 -0
  1122. package/eval/local/tasks/comet-native-interrupted-transition/instruction.md +7 -0
  1123. package/eval/local/tasks/comet-native-interrupted-transition/task.toml +35 -0
  1124. package/eval/local/tasks/comet-native-interrupted-transition/validation/test_native_interrupted_transition.py +63 -0
  1125. package/eval/local/tasks/comet-native-repository-fact/environment/Dockerfile +24 -0
  1126. package/eval/local/tasks/comet-native-repository-fact/environment/PRODUCT_RULES.md +3 -0
  1127. package/eval/local/tasks/comet-native-repository-fact/environment/test_wordcount.py +20 -0
  1128. package/eval/local/tasks/comet-native-repository-fact/environment/wordcount.py +27 -0
  1129. package/eval/local/tasks/comet-native-repository-fact/instruction.md +7 -0
  1130. package/eval/local/tasks/comet-native-repository-fact/task.toml +35 -0
  1131. package/eval/local/tasks/comet-native-repository-fact/validation/test_native_repository_fact.py +53 -0
  1132. package/eval/local/tasks/comet-native-wave-b-decision-resume/environment/Dockerfile +25 -0
  1133. package/eval/local/tasks/comet-native-wave-b-decision-resume/environment/test_wordcount.py +27 -0
  1134. package/eval/local/tasks/comet-native-wave-b-decision-resume/environment/wordcount.py +36 -0
  1135. package/eval/local/tasks/comet-native-wave-b-decision-resume/instruction.md +9 -0
  1136. package/eval/local/tasks/comet-native-wave-b-decision-resume/task.toml +40 -0
  1137. package/eval/local/tasks/comet-native-wave-b-decision-resume/validation/test_native_wave_b_decision_resume.py +208 -0
  1138. package/eval/local/tasks/comet-native-wave-c-verification-integrity/environment/Dockerfile +25 -0
  1139. package/eval/local/tasks/comet-native-wave-c-verification-integrity/environment/test_wordcount.py +27 -0
  1140. package/eval/local/tasks/comet-native-wave-c-verification-integrity/environment/wordcount.py +36 -0
  1141. package/eval/local/tasks/comet-native-wave-c-verification-integrity/instruction.md +11 -0
  1142. package/eval/local/tasks/comet-native-wave-c-verification-integrity/task.toml +36 -0
  1143. package/eval/local/tasks/comet-native-wave-c-verification-integrity/validation/test_native_wave_c_verification_integrity.py +344 -0
  1144. package/eval/local/tasks/comet-native-wave-d-stagnation-stop/environment/Dockerfile +25 -0
  1145. package/eval/local/tasks/comet-native-wave-d-stagnation-stop/environment/test_wordcount.py +27 -0
  1146. package/eval/local/tasks/comet-native-wave-d-stagnation-stop/environment/wordcount.py +36 -0
  1147. package/eval/local/tasks/comet-native-wave-d-stagnation-stop/instruction.md +11 -0
  1148. package/eval/local/tasks/comet-native-wave-d-stagnation-stop/task.toml +37 -0
  1149. package/eval/local/tasks/comet-native-wave-d-stagnation-stop/validation/test_native_wave_d_stagnation_stop.py +284 -0
  1150. package/eval/local/tasks/comet-native-wave-e-parallel-safety/environment/.include-trusted-native-runtime +1 -0
  1151. package/eval/local/tasks/comet-native-wave-e-parallel-safety/environment/Dockerfile +25 -0
  1152. package/eval/local/tasks/comet-native-wave-e-parallel-safety/environment/test_wordcount.py +27 -0
  1153. package/eval/local/tasks/comet-native-wave-e-parallel-safety/environment/wordcount.py +36 -0
  1154. package/eval/local/tasks/comet-native-wave-e-parallel-safety/instruction.md +9 -0
  1155. package/eval/local/tasks/comet-native-wave-e-parallel-safety/task.toml +37 -0
  1156. package/eval/local/tasks/comet-native-wave-e-parallel-safety/validation/test_native_wave_e_parallel_safety.py +309 -0
  1157. package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/environment/.include-current-comet-cli +1 -0
  1158. package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/environment/Dockerfile +29 -0
  1159. package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/environment/current-comet-package.json +18 -0
  1160. package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/environment/current-comet.sh +14 -0
  1161. package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/environment/test_wordcount.py +27 -0
  1162. package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/environment/wordcount.py +36 -0
  1163. package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/instruction.md +7 -0
  1164. package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/task.toml +36 -0
  1165. package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/validation/test_native_wave_f_dashboard_readonly.py +483 -0
  1166. package/eval/local/tasks/comet-native-workflow/environment/.include-trusted-native-review-fixture +1 -0
  1167. package/eval/local/tasks/comet-native-workflow/environment/.include-trusted-native-runtime +1 -0
  1168. package/eval/local/tasks/comet-native-workflow/environment/Dockerfile +26 -0
  1169. package/eval/local/tasks/comet-native-workflow/environment/test_wordcount.py +25 -0
  1170. package/eval/local/tasks/comet-native-workflow/environment/wordcount.py +36 -0
  1171. package/eval/local/tasks/comet-native-workflow/instruction.md +36 -0
  1172. package/eval/local/tasks/comet-native-workflow/task.toml +36 -0
  1173. package/eval/local/tasks/comet-native-workflow/validation/test_native_workflow.py +680 -0
  1174. package/eval/local/tasks/comet-noise-distractor/environment/Dockerfile +15 -0
  1175. package/eval/local/tasks/comet-noise-distractor/environment/distractor.md +4 -0
  1176. package/eval/local/tasks/comet-noise-distractor/environment/invoice.py +5 -0
  1177. package/eval/local/tasks/comet-noise-distractor/environment/test_invoice.py +18 -0
  1178. package/eval/local/tasks/comet-noise-distractor/instruction.md +17 -0
  1179. package/eval/local/tasks/comet-noise-distractor/task.toml +20 -0
  1180. package/eval/local/tasks/comet-noise-distractor/validation/test_noise_distractor.py +20 -0
  1181. package/eval/local/tasks/comet-observability-env-template/environment/Dockerfile +15 -0
  1182. package/eval/local/tasks/comet-observability-env-template/environment/env_writer.py +17 -0
  1183. package/eval/local/tasks/comet-observability-env-template/environment/test_env_writer.py +17 -0
  1184. package/eval/local/tasks/comet-observability-env-template/instruction.md +20 -0
  1185. package/eval/local/tasks/comet-observability-env-template/task.toml +20 -0
  1186. package/eval/local/tasks/comet-observability-env-template/validation/test_observability_env_template.py +46 -0
  1187. package/eval/local/tasks/comet-perf-dedupe/environment/Dockerfile +35 -0
  1188. package/eval/local/tasks/comet-perf-dedupe/environment/dedupe.py +22 -0
  1189. package/eval/local/tasks/comet-perf-dedupe/environment/test_dedupe.py +43 -0
  1190. package/eval/local/tasks/comet-perf-dedupe/instruction.md +25 -0
  1191. package/eval/local/tasks/comet-perf-dedupe/task.toml +24 -0
  1192. package/eval/local/tasks/comet-perf-dedupe/validation/test_perf_dedupe.py +40 -0
  1193. package/eval/local/tasks/comet-persistence-threading/environment/Dockerfile +15 -0
  1194. package/eval/local/tasks/comet-persistence-threading/environment/session_store.py +15 -0
  1195. package/eval/local/tasks/comet-persistence-threading/environment/test_session_store.py +21 -0
  1196. package/eval/local/tasks/comet-persistence-threading/instruction.md +14 -0
  1197. package/eval/local/tasks/comet-persistence-threading/task.toml +20 -0
  1198. package/eval/local/tasks/comet-persistence-threading/validation/test_persistence_threading.py +20 -0
  1199. package/eval/local/tasks/comet-refactor-counter/environment/Dockerfile +35 -0
  1200. package/eval/local/tasks/comet-refactor-counter/environment/test_text_processor.py +57 -0
  1201. package/eval/local/tasks/comet-refactor-counter/environment/text_processor.py +49 -0
  1202. package/eval/local/tasks/comet-refactor-counter/instruction.md +31 -0
  1203. package/eval/local/tasks/comet-refactor-counter/task.toml +24 -0
  1204. package/eval/local/tasks/comet-refactor-counter/validation/test_refactor_counter.py +75 -0
  1205. package/eval/local/tasks/comet-robust-config/environment/Dockerfile +35 -0
  1206. package/eval/local/tasks/comet-robust-config/environment/config_loader.py +56 -0
  1207. package/eval/local/tasks/comet-robust-config/environment/test_config_loader.py +72 -0
  1208. package/eval/local/tasks/comet-robust-config/instruction.md +30 -0
  1209. package/eval/local/tasks/comet-robust-config/task.toml +24 -0
  1210. package/eval/local/tasks/comet-robust-config/validation/test_robust_config.py +37 -0
  1211. package/eval/local/tasks/generic-skill-smoke/environment/Dockerfile +14 -0
  1212. package/eval/local/tasks/generic-skill-smoke/instruction.md +7 -0
  1213. package/eval/local/tasks/generic-skill-smoke/task.toml +21 -0
  1214. package/eval/local/tasks/generic-skill-smoke/validation/test_generic_skill_smoke.py +41 -0
  1215. package/eval/local/tasks/index.yaml +229 -0
  1216. package/eval/local/tasks/workflow-overlay-contract/environment/Dockerfile +16 -0
  1217. package/eval/local/tasks/workflow-overlay-contract/instruction.md +5 -0
  1218. package/eval/local/tasks/workflow-overlay-contract/task.toml +21 -0
  1219. package/eval/local/tasks/workflow-overlay-contract/validation/test_workflow_overlay_contract.py +235 -0
  1220. package/eval/local/tasks/workflow-route-conformance/environment/Dockerfile +14 -0
  1221. package/eval/local/tasks/workflow-route-conformance/instruction.md +5 -0
  1222. package/eval/local/tasks/workflow-route-conformance/task.toml +21 -0
  1223. package/eval/local/tasks/workflow-route-conformance/validation/test_workflow_route_conformance.py +84 -0
  1224. package/eval/local/tests/conftest.py +1946 -0
  1225. package/eval/local/tests/scaffold/test_aligned_comparison.py +1012 -0
  1226. package/eval/local/tests/scaffold/test_attribution.py +48 -0
  1227. package/eval/local/tests/scaffold/test_compare_baselines.py +999 -0
  1228. package/eval/local/tests/scaffold/test_conftest_helpers.py +980 -0
  1229. package/eval/local/tests/scaffold/test_evidence.py +15 -0
  1230. package/eval/local/tests/scaffold/test_langsmith_conftest.py +244 -0
  1231. package/eval/local/tests/scaffold/test_logging.py +377 -0
  1232. package/eval/local/tests/scaffold/test_manifests.py +134 -0
  1233. package/eval/local/tests/scaffold/test_native_aligned_eval.py +353 -0
  1234. package/eval/local/tests/scaffold/test_native_wave_evaluations.py +2183 -0
  1235. package/eval/local/tests/scaffold/test_profiles.py +1149 -0
  1236. package/eval/local/tests/scaffold/test_regression_check.py +19 -0
  1237. package/eval/local/tests/scaffold/test_report_style_demo_charts.py +45 -0
  1238. package/eval/local/tests/scaffold/test_sample_quality.py +268 -0
  1239. package/eval/local/tests/scaffold/test_tasks.py +1013 -0
  1240. package/eval/local/tests/scaffold/test_treatments.py +353 -0
  1241. package/eval/local/tests/scaffold/test_utils.py +561 -0
  1242. package/eval/local/tests/tasks/__init__.py +1 -0
  1243. package/eval/local/tests/tasks/test_tasks.py +474 -0
  1244. package/eval/local/tests/tasks/test_validation_scripts.py +787 -0
  1245. package/eval/local/treatments/comet/comet_classic_docs_layout.yaml +121 -0
  1246. package/eval/local/treatments/comet/comet_full_039.yaml +141 -0
  1247. package/eval/local/treatments/comet/comet_full_040_beta.yaml +140 -0
  1248. package/eval/local/treatments/comet/comet_native_phase1.yaml +66 -0
  1249. package/eval/local/treatments/common/control.yaml +4 -0
  1250. package/eval/pyproject.toml +41 -0
  1251. package/eval/report-html-config.json +6 -0
  1252. package/eval/scaffold/__init__.py +67 -0
  1253. package/eval/scaffold/python/__init__.py +95 -0
  1254. package/eval/scaffold/python/aligned_comparison.py +1632 -0
  1255. package/eval/scaffold/python/attribution.py +43 -0
  1256. package/eval/scaffold/python/evidence.py +38 -0
  1257. package/eval/scaffold/python/external_data_handler.py +18 -0
  1258. package/eval/scaffold/python/generic_llm_judge.py +237 -0
  1259. package/eval/scaffold/python/judge_config.py +168 -0
  1260. package/eval/scaffold/python/llm_judge.py +188 -0
  1261. package/eval/scaffold/python/logging.py +804 -0
  1262. package/eval/scaffold/python/manifests.py +131 -0
  1263. package/eval/scaffold/python/native_eval.py +143 -0
  1264. package/eval/scaffold/python/paper_charts.py +25 -0
  1265. package/eval/scaffold/python/pass_at_k.py +106 -0
  1266. package/eval/scaffold/python/paths.py +56 -0
  1267. package/eval/scaffold/python/profiles.py +127 -0
  1268. package/eval/scaffold/python/report_outputs.py +1573 -0
  1269. package/eval/scaffold/python/sample_quality.py +382 -0
  1270. package/eval/scaffold/python/schema.py +39 -0
  1271. package/eval/scaffold/python/skill_parser.py +469 -0
  1272. package/eval/scaffold/python/tasks.py +343 -0
  1273. package/eval/scaffold/python/treatments.py +271 -0
  1274. package/eval/scaffold/python/utils.py +460 -0
  1275. package/eval/scaffold/python/validation/__init__.py +31 -0
  1276. package/eval/scaffold/python/validation/authoring_rubric.py +328 -0
  1277. package/eval/scaffold/python/validation/comet_workflow.py +227 -0
  1278. package/eval/scaffold/python/validation/core.py +264 -0
  1279. package/eval/scaffold/python/validation/dataset.py +337 -0
  1280. package/eval/scaffold/python/validation/docker.py +106 -0
  1281. package/eval/scaffold/python/validation/evaluator.py +549 -0
  1282. package/eval/scaffold/python/validation/generic_rubric.py +198 -0
  1283. package/eval/scaffold/python/validation/native_wave.py +2154 -0
  1284. package/eval/scaffold/python/validation/native_workflow.py +252 -0
  1285. package/eval/scaffold/python/validation/rubric.py +780 -0
  1286. package/eval/scaffold/python/validation/runner.py +237 -0
  1287. package/eval/scaffold/python/validation/scripts.py +58 -0
  1288. package/eval/scaffold/python/validation/tracing.py +313 -0
  1289. package/eval/scaffold/shell/common.sh +126 -0
  1290. package/eval/scaffold/shell/completion-point.sh +18 -0
  1291. package/eval/scaffold/shell/decision-point.sh +35 -0
  1292. package/eval/scaffold/shell/docker.sh +716 -0
  1293. package/eval/scaffold/shell/native-review-signer-daemon.mjs +144 -0
  1294. package/eval/scaffold/shell/native-review-verifier-daemon.mjs +178 -0
  1295. package/eval/scaffold/shell/run-claude-loop.sh +234 -0
  1296. package/eval/scaffold/shell/setup.sh +259 -0
  1297. package/eval/simulator-instruction.md +9 -0
  1298. package/package.json +64 -10
  1299. package/dist/domains/dashboard/web/assets/demo-DQyfozbi.js +0 -1
  1300. package/dist/domains/dashboard/web/assets/index-BcO3_QlT.css +0 -1
  1301. package/dist/domains/dashboard/web/assets/index-CjU3VXVu.js +0 -22
@@ -1,13 +1,30 @@
1
1
  import path from 'path';
2
2
  import { existsSync } from 'fs';
3
- import { readFile, writeFile, lstat, unlink, symlink, rm } from 'fs/promises';
3
+ import { readFile, writeFile, lstat, unlink, symlink, rm, readdir } from 'fs/promises';
4
4
  import { fileURLToPath } from 'url';
5
- import { parseDocument } from 'yaml';
6
5
  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
+ import { getPlatformConfigDir, getPlatformSkillsDir, } from '../../platform/install/platforms.js';
7
+ import { resolveArtifactLanguage } from './languages.js';
8
+ import { installCometProjectInstructions } from './project-instructions.js';
9
+ import { readJsonObjectFile } from './json-object.js';
10
+ import { assertClassicLayoutInitializationSafe, checkpointClassicLayoutInitialization, } from '../comet-classic/classic-layout-initialization.js';
11
+ import { parseWorkflowProjectConfigDocument, projectConfigComment, renderStructuredProjectConfig, } from '../workflow-contract/project-config.js';
12
+ import { readWorkflowProjectConfigSnapshot } from '../workflow-contract/project-config-reader.js';
13
+ import { writeWorkflowProjectConfigSource } from '../workflow-contract/project-config-writer.js';
14
+ import { ensureProtectedProjectDirectory } from '../workflow-contract/protected-project-path.js';
9
15
  const __filename = fileURLToPath(import.meta.url);
10
16
  const __dirname = path.dirname(__filename);
17
+ const HOOK_ROUTER_SCRIPT = 'comet/scripts/comet-hook-router.mjs';
18
+ const LEGACY_HOOK_SCRIPTS = [
19
+ 'comet/scripts/comet-hook-guard.mjs',
20
+ 'comet-native/scripts/comet-native-hook-guard.mjs',
21
+ ];
22
+ const LEGACY_RULE_FILES = ['comet-phase-guard.md', 'comet-native-phase-guard.md'];
23
+ const NATIVE_SHARED_SKILL_PATHS = new Set([
24
+ 'comet/SKILL.md',
25
+ 'comet/scripts/comet-entry-runtime.mjs',
26
+ 'comet/scripts/comet-hook-router.mjs',
27
+ ]);
11
28
  function planSkillDirectoryCopy(files, destinationRoot) {
12
29
  return files
13
30
  .map((file) => ({
@@ -19,9 +36,75 @@ function planSkillDirectoryCopy(files, destinationRoot) {
19
36
  function getManagedSkillPaths(manifest) {
20
37
  return [...new Set([...manifest.skills, ...(manifest.internalSkills ?? [])])];
21
38
  }
39
+ function isManagedSkillPathForSelection(skillPath, workflowSelection) {
40
+ if (workflowSelection === 'both')
41
+ return true;
42
+ if (workflowSelection === 'classic')
43
+ return !skillPath.startsWith('comet-native/');
44
+ return (NATIVE_SHARED_SKILL_PATHS.has(skillPath) ||
45
+ skillPath.startsWith('comet-native/') ||
46
+ skillPath.startsWith('comet-any/'));
47
+ }
48
+ function getManagedSkillPathsForSelection(manifest, workflowSelection) {
49
+ return getManagedSkillPaths(manifest).filter((skillPath) => isManagedSkillPathForSelection(skillPath, workflowSelection));
50
+ }
51
+ function getUserFacingSkillPathsForSelection(manifest, workflowSelection) {
52
+ return manifest.skills.filter((skillPath) => isManagedSkillPathForSelection(skillPath, workflowSelection));
53
+ }
22
54
  function getUserFacingSkillNames(manifest) {
23
55
  return getTopLevelSkillNames(manifest.skills);
24
56
  }
57
+ function getManagedSkillReplacementPaths(manifest, workflowSelection = 'both') {
58
+ const allowed = new Set();
59
+ for (const skillPath of getManagedSkillPathsForSelection(manifest, workflowSelection)) {
60
+ const parts = skillPath.split('/').filter(Boolean);
61
+ for (let depth = 1; depth <= parts.length; depth++) {
62
+ allowed.add(parts.slice(0, depth).join('/'));
63
+ }
64
+ }
65
+ return allowed;
66
+ }
67
+ function getManagedSkillTopLevelEntries(manifest, workflowSelection = 'both') {
68
+ const entries = new Set();
69
+ for (const skillPath of getManagedSkillPathsForSelection(manifest, workflowSelection)) {
70
+ const [topLevel] = skillPath.split('/').filter(Boolean);
71
+ if (topLevel)
72
+ entries.add(topLevel);
73
+ }
74
+ return [...entries].sort();
75
+ }
76
+ function getManagedEntriesForTopLevel(managedEntries, topLevelEntry) {
77
+ const scopedEntries = new Set();
78
+ const prefix = `${topLevelEntry}/`;
79
+ for (const entry of managedEntries) {
80
+ if (entry.startsWith(prefix)) {
81
+ scopedEntries.add(entry.slice(prefix.length));
82
+ }
83
+ }
84
+ return scopedEntries;
85
+ }
86
+ async function collectDirectoryEntryPaths(root, current = root) {
87
+ const entries = await readdir(current, { withFileTypes: true });
88
+ const paths = [];
89
+ for (const entry of entries) {
90
+ const fullPath = path.join(current, entry.name);
91
+ const relativePath = path.relative(root, fullPath).split(path.sep).join('/');
92
+ paths.push(relativePath);
93
+ if (entry.isDirectory() && !entry.isSymbolicLink()) {
94
+ paths.push(...(await collectDirectoryEntryPaths(root, fullPath)));
95
+ }
96
+ }
97
+ return paths;
98
+ }
99
+ async function assertDirectoryContainsOnlyManagedEntries(dirPath, managedEntries) {
100
+ const entries = await collectDirectoryEntryPaths(dirPath);
101
+ const unmanagedEntries = entries.filter((entry) => !managedEntries.has(entry));
102
+ if (unmanagedEntries.length === 0)
103
+ return;
104
+ const preview = unmanagedEntries.slice(0, 5).join(', ');
105
+ const suffix = unmanagedEntries.length > 5 ? `, and ${unmanagedEntries.length - 5} more` : '';
106
+ 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.`);
107
+ }
25
108
  const OPENCODE_COMMAND_HEADER = `---
26
109
  description: Run the {skillName} Comet workflow
27
110
  ---
@@ -51,37 +134,150 @@ function getCentralSkillsDir(baseDir, _scope) {
51
134
  * Create a symlink from linkPath pointing to target.
52
135
  * On Windows, uses 'junction' type for directory symlinks (no admin required).
53
136
  */
54
- async function createSymlink(target, linkPath) {
137
+ async function createSymlink(target, linkPath, managedEntries) {
55
138
  await ensureDir(path.dirname(linkPath));
56
139
  // Remove existing link/directory if present
140
+ let stat = null;
57
141
  try {
58
- const stat = await lstat(linkPath);
59
- if (stat.isSymbolicLink()) {
142
+ stat = await lstat(linkPath);
143
+ }
144
+ catch (err) {
145
+ if (err.code !== 'ENOENT') {
146
+ throw err;
147
+ }
148
+ }
149
+ if (stat?.isSymbolicLink()) {
150
+ await unlink(linkPath);
151
+ }
152
+ else if (stat?.isDirectory()) {
153
+ // For directories, try unlink first (handles Windows junctions)
154
+ try {
60
155
  await unlink(linkPath);
61
156
  }
62
- else if (stat.isDirectory()) {
63
- // For directories, try unlink first (handles Windows junctions)
64
- try {
65
- await unlink(linkPath);
66
- }
67
- catch {
68
- await rm(linkPath, { recursive: true, force: true });
69
- }
157
+ catch {
158
+ await assertDirectoryContainsOnlyManagedEntries(linkPath, managedEntries);
159
+ await rm(linkPath, { recursive: true, force: true });
70
160
  }
71
161
  }
72
- catch {
73
- // Path doesn't exist, continue
74
- }
75
162
  // Windows uses 'junction' for directory symlinks (no admin privileges required)
76
163
  const type = process.platform === 'win32' ? 'junction' : 'dir';
77
164
  await symlink(target, linkPath, type);
78
165
  }
166
+ async function lstatOrNull(filePath) {
167
+ try {
168
+ return await lstat(filePath);
169
+ }
170
+ catch (err) {
171
+ const code = err.code;
172
+ if (code === 'ENOENT' || code === 'ENOTDIR')
173
+ return null;
174
+ throw err;
175
+ }
176
+ }
177
+ async function prepareManagedSkillCopyTarget(baseDir, platform, scope = 'project', workflowSelection = 'both') {
178
+ const manifest = await readManifest();
179
+ const managedEntries = new Set(getManagedSkillTopLevelEntries(manifest, workflowSelection));
180
+ const skillsRoot = path.join(baseDir, getPlatformSkillsDir(platform, scope), 'skills');
181
+ const rootStat = await lstatOrNull(skillsRoot);
182
+ if (!rootStat)
183
+ return;
184
+ if (rootStat.isSymbolicLink()) {
185
+ let linkedEntries = [];
186
+ try {
187
+ linkedEntries = await readdir(skillsRoot);
188
+ }
189
+ catch (error) {
190
+ if (error.code !== 'ENOENT')
191
+ throw error;
192
+ }
193
+ const unmanagedEntries = linkedEntries.filter((entry) => !managedEntries.has(entry));
194
+ if (unmanagedEntries.length > 0) {
195
+ throw new Error(`Refusing to replace ${skillsRoot} with managed copies because the linked directory contains unmanaged entries: ${unmanagedEntries.join(', ')}`);
196
+ }
197
+ await unlink(skillsRoot);
198
+ await ensureDir(skillsRoot);
199
+ return;
200
+ }
201
+ if (!rootStat.isDirectory())
202
+ return;
203
+ for (const entry of managedEntries) {
204
+ const entryPath = path.join(skillsRoot, entry);
205
+ const entryStat = await lstatOrNull(entryPath);
206
+ if (entryStat?.isSymbolicLink()) {
207
+ await unlink(entryPath);
208
+ }
209
+ }
210
+ }
211
+ async function prepareNativeSkillInstallTarget(baseDir, platform, scope, languageSkillsDir, action) {
212
+ if (action !== 'skip') {
213
+ await prepareManagedSkillCopyTarget(baseDir, platform, scope, 'native');
214
+ }
215
+ if (action === 'overwrite')
216
+ return;
217
+ const skillsRoot = path.join(baseDir, getPlatformSkillsDir(platform, scope), 'skills');
218
+ const assetsDir = getAssetsDir();
219
+ const manifest = await readManifest();
220
+ const requiredFiles = getManagedSkillPaths(manifest)
221
+ .filter((relativePath) => relativePath === 'comet/SKILL.md' ||
222
+ relativePath === 'comet/scripts/comet-entry-runtime.mjs' ||
223
+ relativePath === 'comet/scripts/comet-hook-router.mjs' ||
224
+ relativePath.startsWith('comet-any/') ||
225
+ relativePath.startsWith('comet-native/'))
226
+ .map((relativePath) => {
227
+ const pathParts = relativePath.split('/');
228
+ const sourceDir = relativePath.includes('/scripts/') ? 'skills' : languageSkillsDir;
229
+ return {
230
+ label: `the required Native asset ${relativePath}`,
231
+ destination: path.join(skillsRoot, ...pathParts),
232
+ source: path.join(assetsDir, sourceDir, ...pathParts),
233
+ };
234
+ });
235
+ for (const required of requiredFiles) {
236
+ const destinationStat = await lstatOrNull(required.destination);
237
+ if (!destinationStat) {
238
+ if (action === 'fill')
239
+ continue;
240
+ throw new Error(`Cannot activate Native while skipping existing Comet files because ${required.label} is missing at ${required.destination}`);
241
+ }
242
+ if (!destinationStat.isFile()) {
243
+ throw new Error(`Cannot activate Native because ${required.label} is not a regular file at ${required.destination}; rerun with --overwrite after preserving any custom content`);
244
+ }
245
+ const [installed, bundled] = await Promise.all([
246
+ readFile(required.destination),
247
+ readFile(required.source),
248
+ ]);
249
+ if (!installed.equals(bundled)) {
250
+ throw new Error(`Cannot activate Native because ${required.label} differs from the bundled routing contract at ${required.destination}; rerun with --overwrite after preserving any custom content`);
251
+ }
252
+ }
253
+ }
254
+ async function createSkillsSymlinks(targetRoot, linkRoot, managedEntries, topLevelEntries) {
255
+ const rootStat = await lstatOrNull(linkRoot);
256
+ if (!rootStat || rootStat.isSymbolicLink() || !rootStat.isDirectory()) {
257
+ await createSymlink(targetRoot, linkRoot, managedEntries);
258
+ return 0;
259
+ }
260
+ let failed = 0;
261
+ for (const topLevelEntry of topLevelEntries) {
262
+ const targetEntry = path.join(targetRoot, topLevelEntry);
263
+ const linkEntry = path.join(linkRoot, topLevelEntry);
264
+ const managedEntryScope = getManagedEntriesForTopLevel(managedEntries, topLevelEntry);
265
+ try {
266
+ await createSymlink(targetEntry, linkEntry, managedEntryScope);
267
+ }
268
+ catch (err) {
269
+ failed++;
270
+ console.error(` Failed to create symlink ${linkEntry} -> ${targetEntry}: ${err.message}`);
271
+ }
272
+ }
273
+ return failed;
274
+ }
79
275
  /**
80
276
  * Install skills using symlink mode:
81
277
  * 1. Copy skills to central store (.comet/skills/)
82
- * 2. Create symlink from platform dir to central store
278
+ * 2. Create symlinks from the platform skills dir to central store
83
279
  */
84
- async function installSkillsAsSymlink(baseDir, platform, overwrite, languageSkillsDir = 'skills', scope = 'project') {
280
+ async function installSkillsAsSymlink(baseDir, platform, overwrite, languageSkillsDir = 'skills', scope = 'project', workflowSelection = 'both') {
85
281
  const centralDir = getCentralSkillsDir(baseDir, scope);
86
282
  const assetsDir = getAssetsDir();
87
283
  const manifestPath = path.join(assetsDir, 'manifest.json');
@@ -92,20 +288,24 @@ async function installSkillsAsSymlink(baseDir, platform, overwrite, languageSkil
92
288
  if (!manifest || !Array.isArray(manifest.skills)) {
93
289
  throw new Error(`Invalid manifest at ${manifestPath}: "skills" must be an array`);
94
290
  }
291
+ const managedSkillPaths = getManagedSkillPathsForSelection(manifest, workflowSelection);
292
+ const userFacingSkillPaths = getUserFacingSkillPathsForSelection(manifest, workflowSelection);
293
+ const managedSkillReplacementPaths = getManagedSkillReplacementPaths(manifest, workflowSelection);
294
+ const managedSkillTopLevelEntries = getManagedSkillTopLevelEntries(manifest, workflowSelection);
95
295
  // Step 1: Copy skills to central store
96
296
  let copied = 0;
97
297
  let skippedCount = 0;
98
298
  let failedCount = 0;
99
- for (const skillRelPath of getManagedSkillPaths(manifest)) {
299
+ for (const skillRelPath of managedSkillPaths) {
100
300
  const isScript = skillRelPath.includes('/scripts/');
101
301
  const sourceDir = isScript ? 'skills' : languageSkillsDir;
102
302
  const src = path.join(assetsDir, sourceDir, skillRelPath);
103
303
  const centralDest = path.join(centralDir, 'skills', skillRelPath);
104
- if (!overwrite && (await fileExists(centralDest))) {
105
- skippedCount++;
106
- continue;
107
- }
108
304
  try {
305
+ if (!overwrite && (await fileExists(centralDest))) {
306
+ skippedCount++;
307
+ continue;
308
+ }
109
309
  await copyFile(src, centralDest);
110
310
  copied++;
111
311
  }
@@ -114,11 +314,11 @@ async function installSkillsAsSymlink(baseDir, platform, overwrite, languageSkil
114
314
  console.error(` Failed to copy ${skillRelPath} to central store: ${err.message}`);
115
315
  }
116
316
  }
117
- // Step 2: Create symlink from platform dir to central store
317
+ // Step 2: Create symlinks from platform dir to central store
118
318
  const platformSkillsDir = path.join(baseDir, getPlatformSkillsDir(platform, scope), 'skills');
119
319
  const centralSkillsDir = path.join(centralDir, 'skills');
120
320
  try {
121
- await createSymlink(centralSkillsDir, platformSkillsDir);
321
+ failedCount += await createSkillsSymlinks(centralSkillsDir, platformSkillsDir, managedSkillReplacementPaths, managedSkillTopLevelEntries);
122
322
  }
123
323
  catch (err) {
124
324
  failedCount++;
@@ -126,21 +326,23 @@ async function installSkillsAsSymlink(baseDir, platform, overwrite, languageSkil
126
326
  }
127
327
  // Handle OpenCode-style platform commands (still need copy, as command content may differ)
128
328
  if (OPENCODE_STYLE_PLATFORM_IDS.has(platform.id)) {
129
- const result = await createOpenCodeCommands(baseDir, platform, manifest.skills, overwrite, scope, languageSkillsDir);
329
+ const result = await createOpenCodeCommands(baseDir, platform, userFacingSkillPaths, overwrite, scope, languageSkillsDir);
130
330
  copied += result.copied;
131
331
  skippedCount += result.skipped;
332
+ failedCount += result.failed;
132
333
  }
133
334
  // Handle Pi platform command extension
134
335
  if (platform.id === 'pi') {
135
- const result = await createPiCommandExtension(baseDir, platform, manifest.skills, overwrite, scope);
336
+ const result = await createPiCommandExtension(baseDir, platform, userFacingSkillPaths, overwrite, scope);
136
337
  copied += result.copied;
137
338
  skippedCount += result.skipped;
339
+ failedCount += result.failed;
138
340
  }
139
341
  return { copied, skipped: skippedCount, failed: failedCount };
140
342
  }
141
- async function copyCometSkillsForPlatform(baseDir, platform, overwrite, languageSkillsDir = 'skills', scope = 'project', installMode = 'copy') {
343
+ async function copyCometSkillsForPlatform(baseDir, platform, overwrite, languageSkillsDir = 'skills', scope = 'project', installMode = 'copy', workflowSelection = 'both') {
142
344
  if (installMode === 'symlink') {
143
- return installSkillsAsSymlink(baseDir, platform, overwrite, languageSkillsDir, scope);
345
+ return installSkillsAsSymlink(baseDir, platform, overwrite, languageSkillsDir, scope, workflowSelection);
144
346
  }
145
347
  const assetsDir = getAssetsDir();
146
348
  const manifestPath = path.join(assetsDir, 'manifest.json');
@@ -154,16 +356,18 @@ async function copyCometSkillsForPlatform(baseDir, platform, overwrite, language
154
356
  let copied = 0;
155
357
  let skippedCount = 0;
156
358
  let failedCount = 0;
157
- for (const skillRelPath of getManagedSkillPaths(manifest)) {
359
+ const managedSkillPaths = getManagedSkillPathsForSelection(manifest, workflowSelection);
360
+ const userFacingSkillPaths = getUserFacingSkillPathsForSelection(manifest, workflowSelection);
361
+ for (const skillRelPath of managedSkillPaths) {
158
362
  const isScript = skillRelPath.includes('/scripts/');
159
363
  const sourceDir = isScript ? 'skills' : languageSkillsDir;
160
364
  const src = path.join(assetsDir, sourceDir, skillRelPath);
161
365
  const dest = path.join(baseDir, getPlatformSkillsDir(platform, scope), 'skills', skillRelPath);
162
- if (!overwrite && (await fileExists(dest))) {
163
- skippedCount++;
164
- continue;
165
- }
166
366
  try {
367
+ if (!overwrite && (await fileExists(dest))) {
368
+ skippedCount++;
369
+ continue;
370
+ }
167
371
  await copyFile(src, dest);
168
372
  copied++;
169
373
  }
@@ -177,14 +381,16 @@ async function copyCometSkillsForPlatform(baseDir, platform, overwrite, language
177
381
  }
178
382
  }
179
383
  if (OPENCODE_STYLE_PLATFORM_IDS.has(platform.id)) {
180
- const result = await createOpenCodeCommands(baseDir, platform, manifest.skills, overwrite, scope, languageSkillsDir);
384
+ const result = await createOpenCodeCommands(baseDir, platform, userFacingSkillPaths, overwrite, scope, languageSkillsDir);
181
385
  copied += result.copied;
182
386
  skippedCount += result.skipped;
387
+ failedCount += result.failed;
183
388
  }
184
389
  if (platform.id === 'pi') {
185
- const result = await createPiCommandExtension(baseDir, platform, manifest.skills, overwrite, scope);
390
+ const result = await createPiCommandExtension(baseDir, platform, userFacingSkillPaths, overwrite, scope);
186
391
  copied += result.copied;
187
392
  skippedCount += result.skipped;
393
+ failedCount += result.failed;
188
394
  }
189
395
  return { copied, skipped: skippedCount, failed: failedCount };
190
396
  }
@@ -215,37 +421,46 @@ async function createPiCommandExtension(baseDir, platform, skillPaths, overwrite
215
421
  const platformBase = path.join(baseDir, getPlatformSkillsDir(platform, scope));
216
422
  const settingsPath = path.join(platformBase, 'settings.json');
217
423
  const extensionPath = path.join(platformBase, 'extensions', PI_COMMAND_EXTENSION_FILE);
218
- let settings = {};
219
- if (await fileExists(settingsPath)) {
220
- try {
424
+ let copied = 0;
425
+ let skipped = 0;
426
+ let failed = 0;
427
+ try {
428
+ let settings = {};
429
+ if (await fileExists(settingsPath)) {
221
430
  const parsed = JSON.parse(await readFile(settingsPath, 'utf-8'));
222
431
  if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {
223
432
  throw new Error('expected a JSON object');
224
433
  }
225
434
  settings = parsed;
226
435
  }
227
- catch (err) {
228
- throw new Error(`Invalid Pi settings at ${settingsPath}: ${err.message}`, {
229
- cause: err,
230
- });
436
+ if (settings.enableSkillCommands !== true) {
437
+ settings.enableSkillCommands = true;
438
+ await ensureDir(path.dirname(settingsPath));
439
+ await writeFile(settingsPath, JSON.stringify(settings, null, 2) + '\n', 'utf-8');
440
+ copied++;
231
441
  }
232
442
  }
233
- let copied = 0;
234
- let skipped = 0;
235
- if (settings.enableSkillCommands !== true) {
236
- settings.enableSkillCommands = true;
237
- await ensureDir(path.dirname(settingsPath));
238
- await writeFile(settingsPath, JSON.stringify(settings, null, 2) + '\n', 'utf-8');
239
- copied++;
443
+ catch (err) {
444
+ failed++;
445
+ console.error(` Failed to update Pi settings at ${settingsPath}: ${err.message}`);
240
446
  }
241
- if (!overwrite && (await fileExists(extensionPath))) {
242
- skipped++;
243
- return { copied, skipped };
447
+ if (failed > 0)
448
+ return { copied, skipped, failed };
449
+ try {
450
+ if (!overwrite && (await fileExists(extensionPath))) {
451
+ skipped++;
452
+ }
453
+ else {
454
+ await ensureDir(path.dirname(extensionPath));
455
+ await writeFile(extensionPath, renderPiCommandExtension(getTopLevelSkillNames(skillPaths)), 'utf-8');
456
+ copied++;
457
+ }
244
458
  }
245
- await ensureDir(path.dirname(extensionPath));
246
- await writeFile(extensionPath, renderPiCommandExtension(getTopLevelSkillNames(skillPaths)), 'utf-8');
247
- copied++;
248
- return { copied, skipped };
459
+ catch (err) {
460
+ failed++;
461
+ console.error(` Failed to write Pi command extension at ${extensionPath}: ${err.message}`);
462
+ }
463
+ return { copied, skipped, failed };
249
464
  }
250
465
  function stripFrontmatter(content) {
251
466
  if (!content.startsWith('---\n') && !content.startsWith('---\r\n')) {
@@ -260,6 +475,7 @@ function stripFrontmatter(content) {
260
475
  async function createOpenCodeCommands(baseDir, platform, skillPaths, overwrite, scope, languageSkillsDir) {
261
476
  let copied = 0;
262
477
  let skipped = 0;
478
+ let failed = 0;
263
479
  const assetsDir = getAssetsDir();
264
480
  const commandsDir = path.join(baseDir, getPlatformSkillsDir(platform, scope), 'commands');
265
481
  for (const skillPath of skillPaths) {
@@ -268,17 +484,18 @@ async function createOpenCodeCommands(baseDir, platform, skillPaths, overwrite,
268
484
  continue;
269
485
  const skillName = parts[0];
270
486
  const dest = path.join(commandsDir, `${skillName}.md`);
271
- if (!overwrite && (await fileExists(dest))) {
272
- skipped++;
273
- continue;
274
- }
275
- await ensureDir(path.dirname(dest));
276
- let skillSourcePath = path.join(assetsDir, languageSkillsDir, skillPath);
277
- if (!(await fileExists(skillSourcePath))) {
278
- skillSourcePath = path.join(assetsDir, 'skills', skillPath);
279
- }
280
- const skillBody = stripFrontmatter(await readFile(skillSourcePath, 'utf-8'));
281
- const content = `${OPENCODE_COMMAND_HEADER.replace('{skillName}', skillName)}
487
+ try {
488
+ if (!overwrite && (await fileExists(dest))) {
489
+ skipped++;
490
+ continue;
491
+ }
492
+ await ensureDir(path.dirname(dest));
493
+ let skillSourcePath = path.join(assetsDir, languageSkillsDir, skillPath);
494
+ if (!(await fileExists(skillSourcePath))) {
495
+ skillSourcePath = path.join(assetsDir, 'skills', skillPath);
496
+ }
497
+ const skillBody = stripFrontmatter(await readFile(skillSourcePath, 'utf-8'));
498
+ const content = `${OPENCODE_COMMAND_HEADER.replace('{skillName}', skillName)}
282
499
  Equivalent Comet skill: \`${skillName}\`
283
500
  Command name: \`/${skillName}\`
284
501
 
@@ -290,19 +507,24 @@ $ARGUMENTS
290
507
 
291
508
  ${skillBody}
292
509
  `;
293
- await writeFile(dest, content, 'utf-8');
294
- copied++;
510
+ await writeFile(dest, content, 'utf-8');
511
+ copied++;
512
+ }
513
+ catch (err) {
514
+ failed++;
515
+ console.error(` Failed to create OpenCode command ${dest}: ${err.message}`);
516
+ }
295
517
  }
296
- return { copied, skipped };
518
+ return { copied, skipped, failed };
297
519
  }
298
520
  async function readManifest() {
299
521
  const assetsDir = getAssetsDir();
300
522
  const manifestPath = path.join(assetsDir, 'manifest.json');
301
523
  return readJson(manifestPath);
302
524
  }
303
- async function getManifestSkills() {
525
+ async function getManifestSkills(workflowSelection = 'both') {
304
526
  const manifest = await readManifest();
305
- return getManagedSkillPaths(manifest);
527
+ return getManagedSkillPathsForSelection(manifest, workflowSelection);
306
528
  }
307
529
  /**
308
530
  * Copy Comet rule files to a platform's rules directory.
@@ -312,14 +534,49 @@ async function getManifestSkills() {
312
534
  * 'copilot' = GitHub Copilot .instructions.md with applyTo frontmatter
313
535
  * Skips platforms without rulesDir.
314
536
  */
315
- async function copyCometRulesForPlatform(baseDir, platform, overwrite, scope = 'project') {
537
+ // Rule variants share a base name and differ only by a `.en.md` suffix
538
+ // (e.g. `comet-phase-guard.md` = zh default, `comet-phase-guard.en.md` = en).
539
+ // Centralized here so the naming convention only needs to change in one place.
540
+ const EN_RULE_SUFFIX = /\.en\.md$/;
541
+ function isEnglishRuleVariant(ruleRelPath) {
542
+ return EN_RULE_SUFFIX.test(ruleRelPath);
543
+ }
544
+ function toRuleBaseName(ruleRelPath) {
545
+ return ruleRelPath.replace(EN_RULE_SUFFIX, '.md');
546
+ }
547
+ // Pick exactly one variant per base name for the requested language, falling
548
+ // back to whichever variant exists if there's no per-language pair.
549
+ function selectRulePathsForLanguage(rulePaths, languageId) {
550
+ const wantEnglish = languageId === 'en';
551
+ const selected = new Map();
552
+ for (const rulePath of rulePaths) {
553
+ const isEnglishVariant = isEnglishRuleVariant(rulePath);
554
+ const baseKey = toRuleBaseName(rulePath);
555
+ const matched = isEnglishVariant === wantEnglish;
556
+ const existing = selected.get(baseKey);
557
+ if (!existing || (matched && !existing.matched)) {
558
+ selected.set(baseKey, { rulePath, matched });
559
+ }
560
+ }
561
+ return [...selected.values()].map((entry) => entry.rulePath);
562
+ }
563
+ function managedRulesForSelection(manifest, _selection) {
564
+ return manifest.rules ?? [];
565
+ }
566
+ function managedHooksForSelection(manifest, _selection) {
567
+ return manifest.hooks ?? {};
568
+ }
569
+ function managedHookScriptPaths(hooksConfig) {
570
+ return [...new Set([...Object.keys(hooksConfig), ...LEGACY_HOOK_SCRIPTS])];
571
+ }
572
+ async function copyCometRulesForPlatform(baseDir, platform, overwrite, languageId, scope = 'project', workflowSelection = 'classic') {
316
573
  if (!platform.rulesDir || !platform.rulesFormat) {
317
- return { copied: 0, skipped: 0 };
574
+ return { copied: 0, skipped: 0, failed: 0 };
318
575
  }
319
576
  const manifest = await readManifest();
320
- const rulePaths = manifest.rules;
577
+ const rulePaths = selectRulePathsForLanguage(managedRulesForSelection(manifest, workflowSelection), languageId);
321
578
  if (!rulePaths || rulePaths.length === 0) {
322
- return { copied: 0, skipped: 0 };
579
+ return { copied: 0, skipped: 0, failed: 0 };
323
580
  }
324
581
  const assetsDir = getAssetsDir();
325
582
  // Support platforms whose rules live outside the skills config dir
@@ -331,20 +588,24 @@ async function copyCometRulesForPlatform(baseDir, platform, overwrite, scope = '
331
588
  : path.join(baseDir, getPlatformSkillsDir(platform, scope));
332
589
  let copied = 0;
333
590
  let skippedCount = 0;
591
+ let failed = 0;
334
592
  for (const ruleRelPath of rulePaths) {
335
593
  const src = path.join(assetsDir, 'skills', ruleRelPath);
336
- if (!(await fileExists(src))) {
337
- console.error(` Rule source not found: ${ruleRelPath}`);
338
- continue;
339
- }
340
- const ruleFileName = path.basename(ruleRelPath);
341
- const rulesDestDir = path.join(rulesBase, platform.rulesDir);
342
- const dest = computeRuleDestPath(rulesDestDir, ruleFileName, platform.rulesFormat);
343
- if (!overwrite && (await fileExists(dest))) {
344
- skippedCount++;
345
- continue;
346
- }
347
594
  try {
595
+ if (!(await fileExists(src))) {
596
+ console.error(` Rule source not found: ${ruleRelPath}`);
597
+ failed++;
598
+ continue;
599
+ }
600
+ // Normalize the `.en` infix away so the installed file name is the same
601
+ // regardless of which language variant was selected.
602
+ const ruleFileName = toRuleBaseName(path.basename(ruleRelPath));
603
+ const rulesDestDir = path.join(rulesBase, platform.rulesDir);
604
+ const dest = computeRuleDestPath(rulesDestDir, ruleFileName, platform.rulesFormat);
605
+ if (!overwrite && (await fileExists(dest))) {
606
+ skippedCount++;
607
+ continue;
608
+ }
348
609
  const content = await readFile(src, 'utf-8');
349
610
  await ensureDir(path.dirname(dest));
350
611
  const formatted = formatRuleContent(content, ruleFileName, platform.rulesFormat);
@@ -353,9 +614,24 @@ async function copyCometRulesForPlatform(baseDir, platform, overwrite, scope = '
353
614
  }
354
615
  catch (err) {
355
616
  console.error(` Failed to copy rule ${ruleRelPath}: ${err.message}`);
617
+ failed++;
356
618
  }
357
619
  }
358
- return { copied, skipped: skippedCount };
620
+ const rulesDestDir = path.join(rulesBase, platform.rulesDir);
621
+ for (const legacyFile of LEGACY_RULE_FILES) {
622
+ const legacyPath = computeRuleDestPath(rulesDestDir, legacyFile, platform.rulesFormat);
623
+ try {
624
+ await rm(legacyPath, { force: true });
625
+ }
626
+ catch (error) {
627
+ const code = error.code;
628
+ if (code === 'ENOENT' || code === 'ENOTDIR')
629
+ continue;
630
+ console.error(` Failed to remove legacy Rule ${legacyPath}: ${error.message}`);
631
+ failed++;
632
+ }
633
+ }
634
+ return { copied, skipped: skippedCount, failed };
359
635
  }
360
636
  function computeRuleDestPath(rulesDestDir, ruleFileName, rulesFormat) {
361
637
  if (rulesFormat === 'mdc') {
@@ -392,57 +668,154 @@ ${content}`;
392
668
  /**
393
669
  * Install Comet hooks for platforms that support them.
394
670
  * Supports multiple hook formats:
395
- * 'claude-code' — settings.local.json with PreToolUse array (Claude Code, Codex, Amazon Q)
671
+ * 'claude-code' — Claude-shaped JSON with PreToolUse array; defaults to settings.local.json,
672
+ * with platform metadata able to override the filename
396
673
  * 'qwen' — settings.json with PreToolUse/hooks array (Qwen Code)
397
674
  * 'qoder' — settings.json with PreToolUse/hooks array (Qoder)
675
+ * 'codebuddy' — settings.json with PreToolUse/hooks array (CodeBuddy Code)
398
676
  * 'gemini' — settings.json with hooks.BeforeTool array (Gemini CLI)
399
677
  * 'windsurf' — hooks.json with pre_write_code array
400
678
  * 'copilot' — hooks/*.json with preToolUse
401
679
  * 'kiro' — hooks/*.kiro.hook JSON files
402
680
  */
403
- async function installCometHooksForPlatform(baseDir, platform, scope = 'project') {
404
- if (!platform.supportsHooks || !platform.hookFormat) {
405
- return { installed: false, reason: 'platform does not support hooks' };
681
+ async function installCometHooksForPlatform(baseDir, platform, scope = 'project', workflowSelection = 'classic') {
682
+ if (!platform.supportsHooks) {
683
+ return { status: 'skipped', reason: 'platform does not support hooks' };
406
684
  }
407
- const manifest = await readManifest();
408
- const hooksConfig = manifest.hooks;
409
- if (!hooksConfig || Object.keys(hooksConfig).length === 0) {
410
- return { installed: false, reason: 'no hooks defined in manifest' };
685
+ if (!platform.hookFormat) {
686
+ return {
687
+ status: 'failed',
688
+ reason: 'hook-capable platform does not declare a hook format',
689
+ };
411
690
  }
412
- const hookFormat = platform.hookFormat;
413
- const skillsDir = getPlatformSkillsDir(platform, scope);
414
- const platformBase = path.join(baseDir, skillsDir);
415
691
  try {
692
+ const manifest = await readManifest();
693
+ const hooksConfig = managedHooksForSelection(manifest, workflowSelection);
694
+ if (!hooksConfig || Object.keys(hooksConfig).length === 0) {
695
+ return { status: 'skipped', reason: 'no hooks defined in manifest' };
696
+ }
697
+ const hookFormat = platform.hookFormat;
698
+ const skillsDir = getPlatformSkillsDir(platform, scope);
699
+ const platformBase = path.join(baseDir, getPlatformConfigDir(platform, scope));
416
700
  switch (hookFormat) {
417
- case 'claude-code':
418
- return installClaudeCodeHooks(baseDir, platformBase, skillsDir, hooksConfig);
701
+ case 'claude-code': {
702
+ const result = await installClaudeCodeHooks(baseDir, platformBase, skillsDir, hooksConfig, platform.hookConfigFile ?? 'settings.local.json', platform.name, { platformId: platform.id, scope });
703
+ if (result.status === 'installed') {
704
+ const failedLegacyFiles = [];
705
+ for (const legacyFile of platform.legacyHookConfigFiles ?? []) {
706
+ try {
707
+ const cleanup = await removeManagedHooksFromJsonFile(path.join(platformBase, legacyFile), managedHookScriptPaths(hooksConfig));
708
+ if (cleanup.failed > 0)
709
+ failedLegacyFiles.push(legacyFile);
710
+ }
711
+ catch {
712
+ failedLegacyFiles.push(legacyFile);
713
+ }
714
+ }
715
+ if (failedLegacyFiles.length > 0) {
716
+ return {
717
+ status: 'installed',
718
+ reason: `legacy Hook cleanup failed for ${failedLegacyFiles.join(', ')}`,
719
+ cleanupFailed: failedLegacyFiles.length,
720
+ };
721
+ }
722
+ }
723
+ return result;
724
+ }
419
725
  case 'qwen':
420
726
  case 'qoder':
421
- return installQwenStyleHooks(baseDir, platformBase, skillsDir, hooksConfig, hookFormat);
727
+ case 'codebuddy':
728
+ return await installQwenStyleHooks(baseDir, platformBase, skillsDir, hooksConfig, platform.name, { platformId: platform.id, scope });
422
729
  case 'gemini':
423
- return installGeminiHooks(baseDir, platformBase, skillsDir, hooksConfig);
730
+ return await installGeminiHooks(baseDir, platformBase, skillsDir, hooksConfig, platform.name, { platformId: platform.id, scope });
424
731
  case 'windsurf':
425
- return installWindsurfHooks(baseDir, platformBase, skillsDir, hooksConfig);
732
+ return await installWindsurfHooks(baseDir, platformBase, skillsDir, hooksConfig, platform.name, { platformId: platform.id, scope });
426
733
  case 'copilot':
427
- return installCopilotHooks(baseDir, platformBase, skillsDir, hooksConfig);
734
+ return await installCopilotHooks(baseDir, platformBase, skillsDir, hooksConfig, {
735
+ platformId: platform.id,
736
+ scope,
737
+ });
428
738
  case 'kiro':
429
- return installKiroHooks(baseDir, platformBase, skillsDir, hooksConfig);
739
+ return await installKiroHooks(baseDir, platformBase, skillsDir, hooksConfig, {
740
+ platformId: platform.id,
741
+ scope,
742
+ });
430
743
  default:
431
- return { installed: false, reason: `unsupported hook format: ${hookFormat}` };
744
+ return { status: 'failed', reason: `unsupported hook format: ${hookFormat}` };
432
745
  }
433
746
  }
434
747
  catch (err) {
435
- return { installed: false, reason: err.message };
748
+ return { status: 'failed', reason: err.message };
436
749
  }
437
750
  }
438
751
  function quoteCommandArg(value) {
439
752
  return `"${value.replaceAll('\\', '/').replaceAll('"', '\\"')}"`;
440
753
  }
441
754
  /** Build a hook command that is stable even when the hook runner executes from a subdirectory. */
442
- function buildHookCommand(baseDir, skillsDir, scriptRelPath) {
755
+ function buildHookCommand(baseDir, skillsDir, scriptRelPath, context) {
443
756
  const projectRoot = path.resolve(baseDir);
444
757
  const scriptPath = path.join(projectRoot, skillsDir, 'skills', ...scriptRelPath.split('/'));
445
- return `node ${quoteCommandArg(scriptPath)} --project-root ${quoteCommandArg(projectRoot)}`;
758
+ let command = `node ${quoteCommandArg(scriptPath)}`;
759
+ if (scriptRelPath === HOOK_ROUTER_SCRIPT && context) {
760
+ command += ` --platform ${quoteCommandArg(context.platformId)}`;
761
+ if (context.scope === 'project') {
762
+ command += ` --project-root ${quoteCommandArg(projectRoot)}`;
763
+ }
764
+ return command;
765
+ }
766
+ return `${command} --project-root ${quoteCommandArg(projectRoot)}`;
767
+ }
768
+ function parseCommandTokens(command) {
769
+ const tokens = [];
770
+ let current = '';
771
+ let quote;
772
+ let tokenStarted = false;
773
+ let quoteClosed = false;
774
+ for (let index = 0; index < command.length; index++) {
775
+ const character = command[index];
776
+ if (quote) {
777
+ if (character === quote) {
778
+ quote = undefined;
779
+ quoteClosed = true;
780
+ }
781
+ else if (character === '\\' && command[index + 1] === quote) {
782
+ current += quote;
783
+ index++;
784
+ }
785
+ else {
786
+ current += character;
787
+ }
788
+ continue;
789
+ }
790
+ if (character === '\r' || character === '\n' || ';|&<>`'.includes(character)) {
791
+ return undefined;
792
+ }
793
+ if (/\s/u.test(character)) {
794
+ if (tokenStarted) {
795
+ tokens.push(current);
796
+ current = '';
797
+ tokenStarted = false;
798
+ quoteClosed = false;
799
+ }
800
+ continue;
801
+ }
802
+ if (quoteClosed)
803
+ return undefined;
804
+ if (character === '"' || character === "'") {
805
+ if (tokenStarted)
806
+ return undefined;
807
+ quote = character;
808
+ tokenStarted = true;
809
+ continue;
810
+ }
811
+ current += character;
812
+ tokenStarted = true;
813
+ }
814
+ if (quote)
815
+ return undefined;
816
+ if (tokenStarted)
817
+ tokens.push(current);
818
+ return tokens;
446
819
  }
447
820
  function isManagedHookCommand(command, scriptRelPaths) {
448
821
  if (typeof command !== 'string')
@@ -450,28 +823,38 @@ function isManagedHookCommand(command, scriptRelPaths) {
450
823
  // Match both the current `node .../comet-hook-guard.mjs` form and the legacy
451
824
  // `bash .../comet-hook-guard.sh` form so uninstall also cleans up hooks
452
825
  // written by older Comet releases. Compare basenames without extension.
453
- const commandPath = command
454
- .trim()
455
- .match(/^(?:node|bash|sh)\s+["']?([^"'\s]+)["']?(?:\s|$)/)?.[1]
456
- ?.replace(/\\/g, '/');
457
- if (!commandPath)
826
+ const tokens = parseCommandTokens(command.trim());
827
+ if (!tokens || tokens.length < 2 || !['node', 'bash', 'sh'].includes(tokens[0]))
458
828
  return false;
829
+ const commandPath = tokens[1].replace(/\\/g, '/');
459
830
  const normalize = (value) => value.replace(/\.(?:sh|mjs)$/u, '');
460
831
  return scriptRelPaths.some((scriptRelPath) => normalize(commandPath).endsWith(`/skills/${normalize(scriptRelPath.replace(/\\/g, '/'))}`));
461
832
  }
462
833
  function mergeHookGroups(existingGroups, newGroups, scriptRelPaths) {
463
- const mergedGroups = existingGroups.flatMap((group) => {
464
- if (!Array.isArray(group.hooks))
465
- return [group];
466
- const hooks = group.hooks.filter((hook) => !isManagedHookCommand(hook.command, scriptRelPaths));
467
- if (hooks.length === 0 && group.hooks.length > 0)
468
- return [];
469
- return [{ ...group, hooks }];
834
+ const mergedGroups = existingGroups.map((group) => {
835
+ if (!group || typeof group !== 'object' || Array.isArray(group))
836
+ return group;
837
+ const record = group;
838
+ if (!Array.isArray(record.hooks))
839
+ return record;
840
+ const hooks = record.hooks.filter((hook) => {
841
+ const command = hook && typeof hook === 'object' ? hook.command : undefined;
842
+ return !isManagedHookCommand(command, scriptRelPaths);
843
+ });
844
+ return { ...record, hooks };
470
845
  });
471
846
  for (const newGroup of newGroups) {
472
- const existingGroup = mergedGroups.find((group) => group.matcher === newGroup.matcher && Array.isArray(group.hooks));
473
- if (existingGroup) {
474
- existingGroup.hooks = [...existingGroup.hooks, ...newGroup.hooks];
847
+ const existingGroupIndex = mergedGroups.findIndex((group) => Boolean(group) &&
848
+ typeof group === 'object' &&
849
+ !Array.isArray(group) &&
850
+ group.matcher === newGroup.matcher &&
851
+ Array.isArray(group.hooks));
852
+ if (existingGroupIndex >= 0) {
853
+ const existingGroup = mergedGroups[existingGroupIndex];
854
+ mergedGroups[existingGroupIndex] = {
855
+ ...existingGroup,
856
+ hooks: [...existingGroup.hooks, ...newGroup.hooks],
857
+ };
475
858
  }
476
859
  else {
477
860
  mergedGroups.push(newGroup);
@@ -487,44 +870,101 @@ function mergeHookGroups(existingGroups, newGroups, scriptRelPaths) {
487
870
  function asHookGroup(value) {
488
871
  return Array.isArray(value) ? value : [];
489
872
  }
873
+ async function removeManagedHooksFromJsonFile(settingsPath, scriptRelPaths) {
874
+ if (!(await fileExists(settingsPath)))
875
+ return { removed: 0, failed: 0 };
876
+ let source;
877
+ try {
878
+ source = await readFile(settingsPath, 'utf-8');
879
+ }
880
+ catch {
881
+ return { removed: 0, failed: 1 };
882
+ }
883
+ let settings;
884
+ try {
885
+ const parsed = JSON.parse(source);
886
+ if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {
887
+ return { removed: 0, failed: 1 };
888
+ }
889
+ settings = parsed;
890
+ }
891
+ catch {
892
+ return { removed: 0, failed: 1 };
893
+ }
894
+ const existingHooks = settings.hooks;
895
+ const existingPreToolUse = existingHooks?.PreToolUse;
896
+ if (!existingHooks || !Array.isArray(existingPreToolUse)) {
897
+ return { removed: 0, failed: 0 };
898
+ }
899
+ let removed = 0;
900
+ const filtered = existingPreToolUse.map((group) => {
901
+ if (!group || typeof group !== 'object')
902
+ return group;
903
+ const record = group;
904
+ if (!Array.isArray(record.hooks))
905
+ return record;
906
+ const handlers = record.hooks.filter((handler) => {
907
+ const command = handler && typeof handler === 'object'
908
+ ? handler.command
909
+ : undefined;
910
+ const managed = isManagedHookCommand(command, scriptRelPaths);
911
+ if (managed)
912
+ removed++;
913
+ return !managed;
914
+ });
915
+ return { ...record, hooks: handlers };
916
+ });
917
+ if (removed === 0)
918
+ return { removed: 0, failed: 0 };
919
+ existingHooks.PreToolUse = filtered;
920
+ try {
921
+ await writeFile(settingsPath, JSON.stringify(settings, null, 2) + '\n', 'utf-8');
922
+ }
923
+ catch {
924
+ return { removed: 0, failed: 1 };
925
+ }
926
+ return { removed, failed: 0 };
927
+ }
928
+ async function readSettingsJsonObject(settingsPath, platformName) {
929
+ const result = await readJsonObjectFile(settingsPath);
930
+ if (result.status === 'missing')
931
+ return {};
932
+ if (result.status === 'present')
933
+ return result.value;
934
+ throw new Error(`Invalid ${platformName} settings at ${settingsPath}: ${result.error.message}`, {
935
+ cause: result.error,
936
+ });
937
+ }
490
938
  /**
491
- * Claude Code, Codex, Amazon Q format:
492
- * Writes to settings.local.json with { hooks: { PreToolUse: [...] } }
939
+ * Claude-shaped JSON format used by Claude Code, Codex, and Amazon Q.
940
+ * Defaults to settings.local.json; platform metadata may override the filename.
493
941
  */
494
- async function installClaudeCodeHooks(baseDir, platformBase, skillsDir, hooksConfig) {
495
- const settingsPath = path.join(platformBase, 'settings.local.json');
942
+ async function installClaudeCodeHooks(baseDir, platformBase, skillsDir, hooksConfig, configFile, platformName, context) {
943
+ const settingsPath = path.join(platformBase, configFile);
496
944
  // Group by matcher so hooks sharing the same matcher are merged
497
945
  const matcherGroups = {};
498
946
  for (const [scriptRelPath, config] of Object.entries(hooksConfig)) {
499
- const command = buildHookCommand(baseDir, skillsDir, scriptRelPath);
947
+ const command = buildHookCommand(baseDir, skillsDir, scriptRelPath, context);
500
948
  if (!matcherGroups[config.matcher]) {
501
949
  matcherGroups[config.matcher] = [];
502
950
  }
503
951
  matcherGroups[config.matcher].push({ type: 'command', command });
504
952
  }
505
953
  const newEntries = Object.entries(matcherGroups).map(([matcher, hooks]) => ({ matcher, hooks }));
506
- let settings = {};
507
- if (await fileExists(settingsPath)) {
508
- try {
509
- settings = JSON.parse(await readFile(settingsPath, 'utf-8'));
510
- }
511
- catch {
512
- settings = {};
513
- }
514
- }
954
+ const settings = await readSettingsJsonObject(settingsPath, platformName);
515
955
  const existingHooks = settings.hooks ?? {};
516
956
  const existingPreToolUse = asHookGroup(existingHooks.PreToolUse);
517
- const merged = mergeHookGroups(existingPreToolUse, newEntries, Object.keys(hooksConfig));
957
+ const merged = mergeHookGroups(existingPreToolUse, newEntries, managedHookScriptPaths(hooksConfig));
518
958
  settings.hooks = { ...existingHooks, PreToolUse: merged };
519
959
  await ensureDir(path.dirname(settingsPath));
520
960
  await writeFile(settingsPath, JSON.stringify(settings, null, 2) + '\n', 'utf-8');
521
- return { installed: true };
961
+ return { status: 'installed' };
522
962
  }
523
963
  /**
524
- * Qwen Code / Qoder format:
964
+ * Qwen Code / Qoder / CodeBuddy format:
525
965
  * Writes to settings.json with { hooks: { PreToolUse: [{ matcher, hooks: [{ type, command }] }] } }
526
966
  */
527
- async function installQwenStyleHooks(baseDir, platformBase, skillsDir, hooksConfig, _hookFormat) {
967
+ async function installQwenStyleHooks(baseDir, platformBase, skillsDir, hooksConfig, platformName, context) {
528
968
  const settingsPath = path.join(platformBase, 'settings.json');
529
969
  // Group by matcher
530
970
  const matcherGroups = {};
@@ -534,7 +974,7 @@ async function installQwenStyleHooks(baseDir, platformBase, skillsDir, hooksConf
534
974
  }
535
975
  matcherGroups[config.matcher].push({
536
976
  type: 'command',
537
- command: buildHookCommand(baseDir, skillsDir, scriptRelPath),
977
+ command: buildHookCommand(baseDir, skillsDir, scriptRelPath, context),
538
978
  description: config.description,
539
979
  });
540
980
  }
@@ -542,28 +982,20 @@ async function installQwenStyleHooks(baseDir, platformBase, skillsDir, hooksConf
542
982
  matcher,
543
983
  hooks,
544
984
  }));
545
- let settings = {};
546
- if (await fileExists(settingsPath)) {
547
- try {
548
- settings = JSON.parse(await readFile(settingsPath, 'utf-8'));
549
- }
550
- catch {
551
- settings = {};
552
- }
553
- }
985
+ const settings = await readSettingsJsonObject(settingsPath, platformName);
554
986
  const existingHooks = settings.hooks ?? {};
555
987
  const existingPreToolUse = asHookGroup(existingHooks.PreToolUse);
556
- const merged = mergeHookGroups(existingPreToolUse, preToolUseEntries, Object.keys(hooksConfig));
988
+ const merged = mergeHookGroups(existingPreToolUse, preToolUseEntries, managedHookScriptPaths(hooksConfig));
557
989
  settings.hooks = { ...existingHooks, PreToolUse: merged };
558
990
  await ensureDir(path.dirname(settingsPath));
559
991
  await writeFile(settingsPath, JSON.stringify(settings, null, 2) + '\n', 'utf-8');
560
- return { installed: true };
992
+ return { status: 'installed' };
561
993
  }
562
994
  /**
563
995
  * Gemini CLI format:
564
996
  * Writes to .gemini/settings.json with { hooks: { BeforeTool: [{ matcher, hooks: [{ type, command }] }] } }
565
997
  */
566
- async function installGeminiHooks(baseDir, platformBase, skillsDir, hooksConfig) {
998
+ async function installGeminiHooks(baseDir, platformBase, skillsDir, hooksConfig, platformName, context) {
567
999
  const settingsPath = path.join(platformBase, 'settings.json');
568
1000
  const entries = [];
569
1001
  for (const [scriptRelPath, config] of Object.entries(hooksConfig)) {
@@ -572,72 +1004,62 @@ async function installGeminiHooks(baseDir, platformBase, skillsDir, hooksConfig)
572
1004
  hooks: [
573
1005
  {
574
1006
  type: 'command',
575
- command: buildHookCommand(baseDir, skillsDir, scriptRelPath),
1007
+ command: buildHookCommand(baseDir, skillsDir, scriptRelPath, context),
576
1008
  name: config.description,
577
1009
  },
578
1010
  ],
579
1011
  });
580
1012
  }
581
- let settings = {};
582
- if (await fileExists(settingsPath)) {
583
- try {
584
- settings = JSON.parse(await readFile(settingsPath, 'utf-8'));
585
- }
586
- catch {
587
- settings = {};
588
- }
589
- }
1013
+ const settings = await readSettingsJsonObject(settingsPath, platformName);
590
1014
  const existingHooks = settings.hooks ?? {};
591
1015
  const existingBeforeTool = asHookGroup(existingHooks.BeforeTool);
592
- const merged = mergeHookGroups(existingBeforeTool, entries, Object.keys(hooksConfig));
1016
+ const merged = mergeHookGroups(existingBeforeTool, entries, managedHookScriptPaths(hooksConfig));
593
1017
  settings.hooks = { ...existingHooks, BeforeTool: merged };
594
1018
  await ensureDir(path.dirname(settingsPath));
595
1019
  await writeFile(settingsPath, JSON.stringify(settings, null, 2) + '\n', 'utf-8');
596
- return { installed: true };
1020
+ return { status: 'installed' };
597
1021
  }
598
1022
  /**
599
1023
  * Windsurf format:
600
1024
  * Writes to .windsurf/hooks.json with { hooks: { pre_write_code: [{ command }] } }
601
1025
  */
602
- async function installWindsurfHooks(baseDir, platformBase, skillsDir, hooksConfig) {
1026
+ async function installWindsurfHooks(baseDir, platformBase, skillsDir, hooksConfig, platformName, context) {
603
1027
  const hooksPath = path.join(platformBase, 'hooks.json');
604
1028
  const entries = [];
605
1029
  for (const [scriptRelPath] of Object.entries(hooksConfig)) {
606
1030
  entries.push({
607
- command: buildHookCommand(baseDir, skillsDir, scriptRelPath),
1031
+ command: buildHookCommand(baseDir, skillsDir, scriptRelPath, context),
608
1032
  show_output: true,
609
1033
  });
610
1034
  }
611
- let hooksFile = {};
612
- if (await fileExists(hooksPath)) {
613
- try {
614
- hooksFile = JSON.parse(await readFile(hooksPath, 'utf-8'));
615
- }
616
- catch {
617
- hooksFile = {};
618
- }
619
- }
1035
+ const hooksFile = await readSettingsJsonObject(hooksPath, platformName);
620
1036
  const existingHooks = hooksFile.hooks ?? {};
621
1037
  const existingPreWrite = asHookGroup(existingHooks.pre_write_code);
622
- const merged = existingPreWrite.filter((entry) => !isManagedHookCommand(entry.command, Object.keys(hooksConfig)));
1038
+ const merged = existingPreWrite.filter((entry) => {
1039
+ const command = entry && typeof entry === 'object' ? entry.command : undefined;
1040
+ return !isManagedHookCommand(command, managedHookScriptPaths(hooksConfig));
1041
+ });
623
1042
  merged.push(...entries);
624
1043
  hooksFile.hooks = { ...existingHooks, pre_write_code: merged };
625
1044
  await ensureDir(path.dirname(hooksPath));
626
1045
  await writeFile(hooksPath, JSON.stringify(hooksFile, null, 2) + '\n', 'utf-8');
627
- return { installed: true };
1046
+ return { status: 'installed' };
628
1047
  }
629
1048
  /**
630
1049
  * GitHub Copilot format:
631
1050
  * Writes to .github/hooks/comet-guard.json with preToolUse hooks config.
632
1051
  */
633
- async function installCopilotHooks(baseDir, platformBase, skillsDir, hooksConfig) {
1052
+ async function installCopilotHooks(baseDir, platformBase, skillsDir, hooksConfig, context) {
634
1053
  const hooksDir = path.join(platformBase, 'hooks');
635
1054
  const hookFilePath = path.join(hooksDir, 'comet-guard.json');
636
1055
  const scriptEntries = [];
637
- for (const [scriptRelPath] of Object.entries(hooksConfig)) {
638
- const cmd = buildHookCommand(baseDir, skillsDir, scriptRelPath);
1056
+ for (const [scriptRelPath, config] of Object.entries(hooksConfig)) {
1057
+ const cmd = buildHookCommand(baseDir, skillsDir, scriptRelPath, context);
1058
+ const matcher = config.matcher === 'Write|Edit'
1059
+ ? 'create|edit|str_replace_editor|apply_patch'
1060
+ : config.matcher;
639
1061
  // Hook runs through node on every platform; both fields use the same command
640
- scriptEntries.push({ bash: cmd, powershell: cmd });
1062
+ scriptEntries.push({ matcher, bash: cmd, powershell: cmd });
641
1063
  }
642
1064
  const hookConfig = {
643
1065
  version: 1,
@@ -647,13 +1069,13 @@ async function installCopilotHooks(baseDir, platformBase, skillsDir, hooksConfig
647
1069
  };
648
1070
  await ensureDir(hooksDir);
649
1071
  await writeFile(hookFilePath, JSON.stringify(hookConfig, null, 2) + '\n', 'utf-8');
650
- return { installed: true };
1072
+ return { status: 'installed' };
651
1073
  }
652
1074
  /**
653
1075
  * Kiro format:
654
1076
  * Writes to .kiro/hooks/comet-phase-guard.kiro.hook as a JSON file.
655
1077
  */
656
- async function installKiroHooks(baseDir, platformBase, skillsDir, hooksConfig) {
1078
+ async function installKiroHooks(baseDir, platformBase, skillsDir, hooksConfig, context) {
657
1079
  const hooksDir = path.join(platformBase, 'hooks');
658
1080
  for (const [scriptRelPath, config] of Object.entries(hooksConfig)) {
659
1081
  const hookFileName = path.basename(scriptRelPath).replace(/\.mjs$/, '.kiro.hook');
@@ -671,42 +1093,71 @@ async function installKiroHooks(baseDir, platformBase, skillsDir, hooksConfig) {
671
1093
  },
672
1094
  then: {
673
1095
  type: 'runCommand',
674
- command: buildHookCommand(baseDir, skillsDir, scriptRelPath),
1096
+ command: buildHookCommand(baseDir, skillsDir, scriptRelPath, context),
675
1097
  },
676
1098
  };
677
1099
  await ensureDir(hooksDir);
678
1100
  await writeFile(hookFilePath, JSON.stringify(hookConfig, null, 2) + '\n', 'utf-8');
679
1101
  }
680
- return { installed: true };
1102
+ for (const legacyScript of LEGACY_HOOK_SCRIPTS) {
1103
+ const legacyFile = path.join(hooksDir, path.basename(legacyScript).replace(/\.mjs$/u, '.kiro.hook'));
1104
+ await rm(legacyFile, { force: true });
1105
+ }
1106
+ return { status: 'installed' };
681
1107
  }
682
1108
  function managedConfigFields(language = 'en') {
683
1109
  const artifactLanguage = resolveArtifactLanguage(language);
684
- return [
1110
+ const commentLanguage = artifactLanguage.id === 'zh-CN' ? 'zh-CN' : 'en';
1111
+ const top = [
1112
+ {
1113
+ key: 'ambient_resume',
1114
+ def: 'true',
1115
+ comment: projectConfigComment('ambient_resume', commentLanguage),
1116
+ },
1117
+ ];
1118
+ const classic = [
1119
+ {
1120
+ key: 'artifact_layout',
1121
+ def: 'legacy',
1122
+ comment: projectConfigComment('classic.artifact_layout', commentLanguage),
1123
+ },
685
1124
  {
686
1125
  key: 'language',
687
1126
  def: artifactLanguage.id,
688
- comment: `# language: ${formatSupportedArtifactLanguages()}`,
1127
+ comment: projectConfigComment('classic.language', commentLanguage),
1128
+ },
1129
+ {
1130
+ key: 'context_compression',
1131
+ def: 'off',
1132
+ comment: projectConfigComment('classic.context_compression', commentLanguage),
1133
+ },
1134
+ {
1135
+ key: 'review_mode',
1136
+ def: 'standard',
1137
+ comment: projectConfigComment('classic.review_mode', commentLanguage),
1138
+ },
1139
+ {
1140
+ key: 'auto_transition',
1141
+ def: 'true',
1142
+ comment: projectConfigComment('classic.auto_transition', commentLanguage),
1143
+ },
1144
+ ];
1145
+ const native = [
1146
+ {
1147
+ key: 'clarification_mode',
1148
+ def: 'sequential',
1149
+ comment: projectConfigComment('native.clarification_mode', commentLanguage),
689
1150
  },
690
- { key: 'context_compression', def: 'off', comment: '# context_compression: off | beta' },
691
- { key: 'review_mode', def: 'standard', comment: '# review_mode: off | standard | thorough' },
692
- { key: 'auto_transition', def: 'true', comment: '# auto_transition: true | false' },
693
1151
  ];
1152
+ return { top, native, classic };
694
1153
  }
695
1154
  const MANAGED_CONFIG_FIELDS = managedConfigFields();
696
1155
  function getManagedConfigFields(language = 'en') {
697
1156
  return language === 'en' ? MANAGED_CONFIG_FIELDS : managedConfigFields(language);
698
1157
  }
699
- function parseProjectConfigOverrides(content) {
700
- if (!content.trim())
701
- return {};
702
- const doc = parseDocument(content, { uniqueKeys: false });
703
- if (doc.errors.length > 0)
704
- return {};
705
- const js = doc.toJS();
706
- if (!js || typeof js !== 'object' || Array.isArray(js))
707
- return {};
1158
+ function projectConfigOverrides(value) {
708
1159
  const out = {};
709
- for (const [k, v] of Object.entries(js)) {
1160
+ for (const [k, v] of Object.entries(value)) {
710
1161
  if (v === null || v === undefined)
711
1162
  continue;
712
1163
  if (typeof v === 'string' || typeof v === 'number' || typeof v === 'boolean') {
@@ -715,40 +1166,168 @@ function parseProjectConfigOverrides(content) {
715
1166
  }
716
1167
  return out;
717
1168
  }
718
- function renderProjectConfig(existing, language = 'en') {
719
- const lines = [];
720
- const fields = getManagedConfigFields(language);
721
- const managed = new Set(fields.map((f) => f.key));
722
- for (const f of fields) {
723
- lines.push(f.comment);
724
- lines.push(`${f.key}: ${existing[f.key] ?? f.def}`);
1169
+ function parseProjectConfigOverrides(content) {
1170
+ if (!content.trim())
1171
+ return {};
1172
+ return projectConfigOverrides(parseWorkflowProjectConfigDocument(content, { allowPartialProject: true }).value);
1173
+ }
1174
+ // Coerce the string forms captured by `parseProjectConfigOverrides` back into YAML scalars
1175
+ // so booleans render as bare true/false rather than quoted strings.
1176
+ function coerceConfigScalar(raw) {
1177
+ if (raw === 'true')
1178
+ return true;
1179
+ if (raw === 'false')
1180
+ return false;
1181
+ return raw;
1182
+ }
1183
+ // `language` is null when the caller has no definitive language selection to assert (e.g.
1184
+ // multiple platforms in the same scope disagree and no --language flag was given) — in that
1185
+ // case the existing config's language is preserved, falling back to 'en' only when absent.
1186
+ // A non-null language always overwrites the managed `classic.language` field: init/update
1187
+ // pass it specifically to persist the language the user just selected/installed.
1188
+ function renderProjectConfig(existing, language = null) {
1189
+ const resolvedLanguage = language ?? existing.language ?? 'en';
1190
+ const fields = getManagedConfigFields(resolvedLanguage);
1191
+ const managedKeys = new Set([
1192
+ ...fields.top.map((f) => f.key),
1193
+ ...fields.classic.map((f) => f.key),
1194
+ ]);
1195
+ const root = {};
1196
+ for (const f of fields.top) {
1197
+ root[f.key] = coerceConfigScalar(existing[f.key] ?? f.def);
725
1198
  }
726
1199
  for (const [k, v] of Object.entries(existing)) {
727
- if (!managed.has(k))
728
- lines.push(`${k}: ${v}`);
1200
+ if (!managedKeys.has(k))
1201
+ root[k] = coerceConfigScalar(v);
729
1202
  }
730
- lines.push('');
731
- return lines.join('\n');
1203
+ const classicBlock = {};
1204
+ for (const f of fields.classic) {
1205
+ const value = f.key === 'language' ? resolvedLanguage : (existing[f.key] ?? f.def);
1206
+ classicBlock[f.key] = coerceConfigScalar(value);
1207
+ }
1208
+ root.classic = classicBlock;
1209
+ return renderStructuredProjectConfig(root, resolvedLanguage === 'zh-CN' ? 'zh-CN' : 'en');
732
1210
  }
733
- async function mergeProjectConfig(projectPath, language = 'en') {
734
- const configPath = path.join(projectPath, '.comet', 'config.yaml');
1211
+ async function mergeProjectConfig(projectPath, language = null, artifactLayoutDefault = 'legacy', completeProjectConfig = false, enableClassicWorkflow = completeProjectConfig) {
735
1212
  let existing = {};
736
- if (await fileExists(configPath)) {
737
- existing = parseProjectConfigOverrides(await readFile(configPath, 'utf-8'));
1213
+ let parsedRoot = {};
1214
+ const snapshot = await readWorkflowProjectConfigSnapshot(projectPath, {
1215
+ allowPartialProject: true,
1216
+ });
1217
+ const parsed = snapshot.document;
1218
+ if (parsed) {
1219
+ parsedRoot = parsed.value;
1220
+ existing = projectConfigOverrides(parsedRoot);
1221
+ }
1222
+ // Preserve the full shared-parser value (including unknown extensions) plus
1223
+ // legacy top-level Classic fields pending migration.
1224
+ const root = { ...parsedRoot };
1225
+ if (completeProjectConfig) {
1226
+ root.schema = 'comet.project.v1';
1227
+ const inferredDefault = root.default_workflow === 'native' || root.default_workflow === 'classic'
1228
+ ? root.default_workflow
1229
+ : root.native && typeof root.native === 'object' && !Array.isArray(root.native)
1230
+ ? 'native'
1231
+ : 'classic';
1232
+ root.default_workflow = inferredDefault;
1233
+ const workflows = Array.isArray(root.workflows)
1234
+ ? root.workflows.filter((workflow) => workflow === 'native' || workflow === 'classic')
1235
+ : [inferredDefault];
1236
+ if (enableClassicWorkflow && !workflows.includes('classic'))
1237
+ workflows.push('classic');
1238
+ root.workflows = workflows;
738
1239
  }
739
- await ensureDir(path.dirname(configPath));
740
- await writeFile(configPath, renderProjectConfig(existing, language), 'utf-8');
1240
+ const prevClassic = root.classic && typeof root.classic === 'object' && !Array.isArray(root.classic)
1241
+ ? { ...root.classic }
1242
+ : {};
1243
+ const prevNative = root.native && typeof root.native === 'object' && !Array.isArray(root.native)
1244
+ ? { ...root.native }
1245
+ : null;
1246
+ const existingClassicLanguage = typeof prevClassic.language === 'string' ? prevClassic.language : undefined;
1247
+ const resolvedLanguage = language ?? existingClassicLanguage ?? existing.language ?? 'en';
1248
+ const fields = getManagedConfigFields(resolvedLanguage);
1249
+ // Top-level managed field (ambient_resume).
1250
+ for (const f of fields.top) {
1251
+ root[f.key] = coerceConfigScalar(existing[f.key] ?? f.def);
1252
+ }
1253
+ // Native settings are managed only when the project already has a Native block. This lets
1254
+ // update add new Native defaults without activating Native in Classic-only installations.
1255
+ if (prevNative) {
1256
+ const nativeBlock = { ...prevNative };
1257
+ for (const f of fields.native) {
1258
+ const value = nativeBlock[f.key] ?? f.def;
1259
+ if (f.key === 'clarification_mode' && value !== 'sequential' && value !== 'batch') {
1260
+ throw new Error('native.clarification_mode must be sequential or batch');
1261
+ }
1262
+ nativeBlock[f.key] = coerceConfigScalar(value);
1263
+ }
1264
+ if (nativeBlock.snapshot === undefined) {
1265
+ nativeBlock.snapshot = {
1266
+ include: ['**/*'],
1267
+ exclude: [],
1268
+ max_files: 10_000,
1269
+ max_total_bytes: 256 * 1024 * 1024,
1270
+ max_duration_ms: 60_000,
1271
+ };
1272
+ }
1273
+ root.native = nativeBlock;
1274
+ }
1275
+ // Classic block: preserve explicit new-format values and unknown extension fields, then migrate legacy top-level values,
1276
+ // then apply defaults. An explicit language argument still represents the caller's requested
1277
+ // install/update language and therefore overrides both stored forms.
1278
+ const shouldMergeClassic = !completeProjectConfig || enableClassicWorkflow || root.classic;
1279
+ if (shouldMergeClassic) {
1280
+ const classicBlock = { ...prevClassic };
1281
+ for (const f of fields.classic) {
1282
+ let value;
1283
+ if (f.key === 'language') {
1284
+ value = resolvedLanguage;
1285
+ }
1286
+ else if (f.key === 'artifact_layout') {
1287
+ value = prevClassic[f.key] ?? artifactLayoutDefault;
1288
+ }
1289
+ else {
1290
+ const legacyTop = root[f.key];
1291
+ if (prevClassic[f.key] !== undefined)
1292
+ value = prevClassic[f.key];
1293
+ else if (legacyTop !== undefined)
1294
+ value = legacyTop;
1295
+ else
1296
+ value = f.def;
1297
+ }
1298
+ classicBlock[f.key] = coerceConfigScalar(value);
1299
+ }
1300
+ root.classic = classicBlock;
1301
+ // Remove migrated legacy top-level Classic fields so they don't linger at the root.
1302
+ for (const f of fields.classic) {
1303
+ delete root[f.key];
1304
+ }
1305
+ }
1306
+ const output = renderStructuredProjectConfig(root, resolvedLanguage === 'zh-CN' ? 'zh-CN' : 'en');
1307
+ parseWorkflowProjectConfigDocument(output, { allowPartialProject: true });
1308
+ await writeWorkflowProjectConfigSource(projectPath, output, {
1309
+ allowPartialProject: !completeProjectConfig,
1310
+ expectedIdentity: snapshot.identity,
1311
+ });
741
1312
  }
742
- async function createWorkingDirs(projectPath, language = 'en') {
1313
+ async function createWorkingDirs(projectPath, language = 'en', artifactLayout = 'docs', initializationPermit) {
1314
+ const layout = await assertClassicLayoutInitializationSafe(projectPath, artifactLayout, initializationPermit);
743
1315
  const dirs = [
744
- path.join(projectPath, 'docs', 'superpowers', 'specs'),
745
- path.join(projectPath, 'docs', 'superpowers', 'plans'),
1316
+ layout.archiveDir,
1317
+ layout.specsDir,
1318
+ layout.superpowersSpecsDir,
1319
+ layout.superpowersPlansDir,
1320
+ layout.superpowersReportsDir,
746
1321
  path.join(projectPath, '.comet'),
747
1322
  ];
748
1323
  for (const dir of dirs) {
749
- await ensureDir(dir);
1324
+ const relative = path.relative(layout.projectRoot, dir).replaceAll('\\', '/');
1325
+ await ensureProtectedProjectDirectory(layout.projectRoot, relative, {
1326
+ label: `Classic working directory ${relative}`,
1327
+ });
750
1328
  }
751
- await mergeProjectConfig(projectPath, language);
1329
+ await checkpointClassicLayoutInitialization(projectPath, layout.initializationPermit);
1330
+ await installCometProjectInstructions(projectPath, language === 'zh-CN' ? 'zh' : 'en');
752
1331
  }
753
- export { copyCometSkillsForPlatform, copyCometRulesForPlatform, installCometHooksForPlatform, readManifest, getManagedSkillPaths, getManifestSkills, getUserFacingSkillNames, createWorkingDirs, getAssetsDir, computeRuleDestPath, formatRuleContent, isManagedHookCommand, planSkillDirectoryCopy, mergeProjectConfig, parseProjectConfigOverrides, renderProjectConfig, getCentralSkillsDir, installSkillsAsSymlink, };
1332
+ export { copyCometSkillsForPlatform, copyCometRulesForPlatform, installCometHooksForPlatform, readManifest, getManagedSkillPaths, getManagedSkillPathsForSelection, getManifestSkills, getUserFacingSkillNames, createWorkingDirs, getAssetsDir, computeRuleDestPath, formatRuleContent, isManagedHookCommand, buildHookCommand, removeManagedHooksFromJsonFile, planSkillDirectoryCopy, mergeProjectConfig, parseProjectConfigOverrides, renderProjectConfig, getCentralSkillsDir, installSkillsAsSymlink, prepareManagedSkillCopyTarget, prepareNativeSkillInstallTarget, };
754
1333
  //# sourceMappingURL=platform-install.js.map