@rpamis/comet 0.4.0-beta.6 → 0.4.0-beta.7

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 (687) hide show
  1. package/README.md +209 -74
  2. package/assets/manifest.json +14 -5
  3. package/assets/skills/comet/SKILL.md +17 -282
  4. package/assets/skills/comet/reference/comet-yaml-fields.md +1 -1
  5. package/assets/skills/comet/reference/context-recovery.md +3 -3
  6. package/assets/skills/comet/reference/intent-frame.md +2 -2
  7. package/assets/skills/comet/reference/scripts.md +2 -2
  8. package/assets/skills/comet/rules/comet-workflow-guard.en.md +32 -0
  9. package/assets/skills/comet/rules/comet-workflow-guard.md +32 -0
  10. package/assets/skills/comet/scripts/comet-entry-runtime.mjs +7834 -0
  11. package/assets/skills/comet/scripts/comet-hook-router.mjs +10307 -0
  12. package/assets/skills/comet/scripts/comet-runtime.mjs +612 -499
  13. package/assets/skills/comet-any/SKILL.md +4 -4
  14. package/assets/skills/comet-any/reference/authoring-subagents.md +1 -1
  15. package/assets/skills/comet-any/reference/bundle-authoring.md +1 -1
  16. package/assets/skills/comet-any/reference/subagents/reference-author.md +1 -1
  17. package/assets/skills/comet-any/reference/subagents/script-author.md +1 -1
  18. package/assets/skills/comet-any/reference/subagents/skill-core-author.md +1 -1
  19. package/assets/skills/comet-any/reference/subagents/skill-reviewer.md +2 -2
  20. package/assets/skills/comet-any/reference/subagents/workflow-entry-author.md +3 -3
  21. package/assets/skills/comet-archive/SKILL.md +1 -2
  22. package/assets/skills/comet-build/SKILL.md +1 -1
  23. package/assets/skills/comet-classic/SKILL.md +293 -0
  24. package/assets/skills/comet-design/SKILL.md +1 -1
  25. package/assets/skills/comet-hotfix/SKILL.md +4 -4
  26. package/assets/skills/comet-native/SKILL.md +257 -0
  27. package/assets/skills/comet-native/reference/artifacts.md +204 -0
  28. package/assets/skills/comet-native/reference/commands.md +118 -0
  29. package/assets/skills/comet-native/reference/recovery.md +143 -0
  30. package/assets/skills/comet-native/scripts/comet-native-hook-guard.mjs +4 -0
  31. package/assets/skills/comet-native/scripts/comet-native-runtime.mjs +28898 -0
  32. package/assets/skills/comet-open/SKILL.md +4 -4
  33. package/assets/skills/comet-tweak/SKILL.md +7 -7
  34. package/assets/skills-zh/comet/SKILL.md +17 -270
  35. package/assets/skills-zh/comet/reference/comet-yaml-fields.md +1 -1
  36. package/assets/skills-zh/comet/reference/context-recovery.md +3 -3
  37. package/assets/skills-zh/comet/reference/intent-frame.md +2 -2
  38. package/assets/skills-zh/comet/reference/scripts.md +2 -2
  39. package/assets/skills-zh/comet-any/SKILL.md +4 -4
  40. package/assets/skills-zh/comet-any/reference/authoring-subagents.md +1 -1
  41. package/assets/skills-zh/comet-any/reference/bundle-authoring.md +1 -1
  42. package/assets/skills-zh/comet-any/reference/subagents/reference-author.md +1 -1
  43. package/assets/skills-zh/comet-any/reference/subagents/script-author.md +1 -1
  44. package/assets/skills-zh/comet-any/reference/subagents/skill-core-author.md +1 -1
  45. package/assets/skills-zh/comet-any/reference/subagents/skill-reviewer.md +2 -2
  46. package/assets/skills-zh/comet-any/reference/subagents/workflow-entry-author.md +3 -3
  47. package/assets/skills-zh/comet-archive/SKILL.md +1 -2
  48. package/assets/skills-zh/comet-build/SKILL.md +1 -1
  49. package/assets/skills-zh/comet-classic/SKILL.md +281 -0
  50. package/assets/skills-zh/comet-design/SKILL.md +1 -1
  51. package/assets/skills-zh/comet-hotfix/SKILL.md +4 -4
  52. package/assets/skills-zh/comet-native/SKILL.md +257 -0
  53. package/assets/skills-zh/comet-native/reference/artifacts.md +206 -0
  54. package/assets/skills-zh/comet-native/reference/commands.md +118 -0
  55. package/assets/skills-zh/comet-native/reference/recovery.md +143 -0
  56. package/assets/skills-zh/comet-open/SKILL.md +4 -4
  57. package/assets/skills-zh/comet-tweak/SKILL.md +7 -7
  58. package/dist/app/cli/index.js +59 -13
  59. package/dist/app/cli/index.js.map +1 -1
  60. package/dist/app/commands/command-result.d.ts +6 -0
  61. package/dist/app/commands/command-result.d.ts.map +1 -0
  62. package/dist/app/commands/command-result.js +4 -0
  63. package/dist/app/commands/command-result.js.map +1 -0
  64. package/dist/app/commands/doctor.d.ts +1 -0
  65. package/dist/app/commands/doctor.d.ts.map +1 -1
  66. package/dist/app/commands/doctor.js +201 -26
  67. package/dist/app/commands/doctor.js.map +1 -1
  68. package/dist/app/commands/eval.d.ts +3 -1
  69. package/dist/app/commands/eval.d.ts.map +1 -1
  70. package/dist/app/commands/eval.js +17 -7
  71. package/dist/app/commands/eval.js.map +1 -1
  72. package/dist/app/commands/i18n.d.ts +1 -1
  73. package/dist/app/commands/i18n.d.ts.map +1 -1
  74. package/dist/app/commands/i18n.js +6 -2
  75. package/dist/app/commands/i18n.js.map +1 -1
  76. package/dist/app/commands/init.d.ts +10 -2
  77. package/dist/app/commands/init.d.ts.map +1 -1
  78. package/dist/app/commands/init.js +331 -50
  79. package/dist/app/commands/init.js.map +1 -1
  80. package/dist/app/commands/native.d.ts +2 -0
  81. package/dist/app/commands/native.d.ts.map +1 -0
  82. package/dist/app/commands/native.js +10 -0
  83. package/dist/app/commands/native.js.map +1 -0
  84. package/dist/app/commands/project-scope-selection.d.ts.map +1 -1
  85. package/dist/app/commands/project-scope-selection.js +2 -0
  86. package/dist/app/commands/project-scope-selection.js.map +1 -1
  87. package/dist/app/commands/resume-probe.d.ts.map +1 -1
  88. package/dist/app/commands/resume-probe.js +8 -2
  89. package/dist/app/commands/resume-probe.js.map +1 -1
  90. package/dist/app/commands/status.d.ts +0 -32
  91. package/dist/app/commands/status.d.ts.map +1 -1
  92. package/dist/app/commands/status.js +44 -177
  93. package/dist/app/commands/status.js.map +1 -1
  94. package/dist/app/commands/update.d.ts +20 -4
  95. package/dist/app/commands/update.d.ts.map +1 -1
  96. package/dist/app/commands/update.js +698 -90
  97. package/dist/app/commands/update.js.map +1 -1
  98. package/dist/app/commands/workflow.d.ts +6 -0
  99. package/dist/app/commands/workflow.d.ts.map +1 -0
  100. package/dist/app/commands/workflow.js +11 -0
  101. package/dist/app/commands/workflow.js.map +1 -0
  102. package/dist/config/repository-layout.json +21 -1
  103. package/dist/domains/comet-classic/classic-archive.d.ts.map +1 -1
  104. package/dist/domains/comet-classic/classic-archive.js +3 -0
  105. package/dist/domains/comet-classic/classic-archive.js.map +1 -1
  106. package/dist/domains/comet-classic/classic-current-change.d.ts +3 -5
  107. package/dist/domains/comet-classic/classic-current-change.d.ts.map +1 -1
  108. package/dist/domains/comet-classic/classic-current-change.js +31 -57
  109. package/dist/domains/comet-classic/classic-current-change.js.map +1 -1
  110. package/dist/domains/comet-classic/classic-hook-guard.d.ts +9 -0
  111. package/dist/domains/comet-classic/classic-hook-guard.d.ts.map +1 -1
  112. package/dist/domains/comet-classic/classic-hook-guard.js +84 -11
  113. package/dist/domains/comet-classic/classic-hook-guard.js.map +1 -1
  114. package/dist/domains/comet-classic/classic-project-config.d.ts.map +1 -1
  115. package/dist/domains/comet-classic/classic-project-config.js +12 -8
  116. package/dist/domains/comet-classic/classic-project-config.js.map +1 -1
  117. package/dist/domains/comet-classic/classic-runtime-run.d.ts.map +1 -1
  118. package/dist/domains/comet-classic/classic-runtime-run.js +9 -1
  119. package/dist/domains/comet-classic/classic-runtime-run.js.map +1 -1
  120. package/dist/domains/comet-entry/current-selection-repair.d.ts +17 -0
  121. package/dist/domains/comet-entry/current-selection-repair.d.ts.map +1 -0
  122. package/dist/domains/comet-entry/current-selection-repair.js +19 -0
  123. package/dist/domains/comet-entry/current-selection-repair.js.map +1 -0
  124. package/dist/domains/comet-entry/current-selection.d.ts +28 -0
  125. package/dist/domains/comet-entry/current-selection.d.ts.map +1 -0
  126. package/dist/domains/comet-entry/current-selection.js +116 -0
  127. package/dist/domains/comet-entry/current-selection.js.map +1 -0
  128. package/dist/domains/comet-entry/entry-runtime-entry.d.ts +2 -0
  129. package/dist/domains/comet-entry/entry-runtime-entry.d.ts.map +1 -0
  130. package/dist/domains/comet-entry/entry-runtime-entry.js +3 -0
  131. package/dist/domains/comet-entry/entry-runtime-entry.js.map +1 -0
  132. package/dist/domains/comet-entry/entry-runtime.d.ts +7 -0
  133. package/dist/domains/comet-entry/entry-runtime.d.ts.map +1 -0
  134. package/dist/domains/comet-entry/entry-runtime.js +55 -0
  135. package/dist/domains/comet-entry/entry-runtime.js.map +1 -0
  136. package/dist/domains/comet-entry/hook-adapter.d.ts +6 -0
  137. package/dist/domains/comet-entry/hook-adapter.d.ts.map +1 -0
  138. package/dist/domains/comet-entry/hook-adapter.js +202 -0
  139. package/dist/domains/comet-entry/hook-adapter.js.map +1 -0
  140. package/dist/domains/comet-entry/hook-router-entry.d.ts +8 -0
  141. package/dist/domains/comet-entry/hook-router-entry.d.ts.map +1 -0
  142. package/dist/domains/comet-entry/hook-router-entry.js +92 -0
  143. package/dist/domains/comet-entry/hook-router-entry.js.map +1 -0
  144. package/dist/domains/comet-entry/hook-router.d.ts +32 -0
  145. package/dist/domains/comet-entry/hook-router.d.ts.map +1 -0
  146. package/dist/domains/comet-entry/hook-router.js +133 -0
  147. package/dist/domains/comet-entry/hook-router.js.map +1 -0
  148. package/dist/domains/comet-entry/hook-types.d.ts +20 -0
  149. package/dist/domains/comet-entry/hook-types.d.ts.map +1 -0
  150. package/dist/domains/comet-entry/hook-types.js +2 -0
  151. package/dist/domains/comet-entry/hook-types.js.map +1 -0
  152. package/dist/domains/comet-entry/init-workflow.d.ts +16 -0
  153. package/dist/domains/comet-entry/init-workflow.d.ts.map +1 -0
  154. package/dist/domains/comet-entry/init-workflow.js +103 -0
  155. package/dist/domains/comet-entry/init-workflow.js.map +1 -0
  156. package/dist/domains/comet-entry/project-status.d.ts +3 -0
  157. package/dist/domains/comet-entry/project-status.d.ts.map +1 -0
  158. package/dist/domains/comet-entry/project-status.js +222 -0
  159. package/dist/domains/comet-entry/project-status.js.map +1 -0
  160. package/dist/domains/comet-entry/resolve-entry.d.ts +3 -0
  161. package/dist/domains/comet-entry/resolve-entry.d.ts.map +1 -0
  162. package/dist/domains/comet-entry/resolve-entry.js +22 -0
  163. package/dist/domains/comet-entry/resolve-entry.js.map +1 -0
  164. package/dist/domains/comet-entry/resume-probe.d.ts +34 -0
  165. package/dist/domains/comet-entry/resume-probe.d.ts.map +1 -0
  166. package/dist/domains/comet-entry/resume-probe.js +458 -0
  167. package/dist/domains/comet-entry/resume-probe.js.map +1 -0
  168. package/dist/domains/comet-entry/types.d.ts +59 -0
  169. package/dist/domains/comet-entry/types.d.ts.map +1 -0
  170. package/dist/domains/comet-entry/types.js +2 -0
  171. package/dist/domains/comet-entry/types.js.map +1 -0
  172. package/dist/domains/comet-entry/workflow-resolution.d.ts +8 -0
  173. package/dist/domains/comet-entry/workflow-resolution.d.ts.map +1 -0
  174. package/dist/domains/comet-entry/workflow-resolution.js +16 -0
  175. package/dist/domains/comet-entry/workflow-resolution.js.map +1 -0
  176. package/dist/domains/comet-native/index.d.ts +35 -0
  177. package/dist/domains/comet-native/index.d.ts.map +1 -0
  178. package/dist/domains/comet-native/index.js +35 -0
  179. package/dist/domains/comet-native/index.js.map +1 -0
  180. package/dist/domains/comet-native/native-acceptance.d.ts +42 -0
  181. package/dist/domains/comet-native/native-acceptance.d.ts.map +1 -0
  182. package/dist/domains/comet-native/native-acceptance.js +503 -0
  183. package/dist/domains/comet-native/native-acceptance.js.map +1 -0
  184. package/dist/domains/comet-native/native-archive-content.d.ts +26 -0
  185. package/dist/domains/comet-native/native-archive-content.d.ts.map +1 -0
  186. package/dist/domains/comet-native/native-archive-content.js +159 -0
  187. package/dist/domains/comet-native/native-archive-content.js.map +1 -0
  188. package/dist/domains/comet-native/native-archive-inspection.d.ts +9 -0
  189. package/dist/domains/comet-native/native-archive-inspection.d.ts.map +1 -0
  190. package/dist/domains/comet-native/native-archive-inspection.js +94 -0
  191. package/dist/domains/comet-native/native-archive-inspection.js.map +1 -0
  192. package/dist/domains/comet-native/native-archive-preflight.d.ts +52 -0
  193. package/dist/domains/comet-native/native-archive-preflight.d.ts.map +1 -0
  194. package/dist/domains/comet-native/native-archive-preflight.js +214 -0
  195. package/dist/domains/comet-native/native-archive-preflight.js.map +1 -0
  196. package/dist/domains/comet-native/native-archive-transaction.d.ts +19 -0
  197. package/dist/domains/comet-native/native-archive-transaction.d.ts.map +1 -0
  198. package/dist/domains/comet-native/native-archive-transaction.js +1181 -0
  199. package/dist/domains/comet-native/native-archive-transaction.js.map +1 -0
  200. package/dist/domains/comet-native/native-archive.d.ts +36 -0
  201. package/dist/domains/comet-native/native-archive.d.ts.map +1 -0
  202. package/dist/domains/comet-native/native-archive.js +403 -0
  203. package/dist/domains/comet-native/native-archive.js.map +1 -0
  204. package/dist/domains/comet-native/native-artifacts.d.ts +10 -0
  205. package/dist/domains/comet-native/native-artifacts.d.ts.map +1 -0
  206. package/dist/domains/comet-native/native-artifacts.js +204 -0
  207. package/dist/domains/comet-native/native-artifacts.js.map +1 -0
  208. package/dist/domains/comet-native/native-atomic-file.d.ts +10 -0
  209. package/dist/domains/comet-native/native-atomic-file.d.ts.map +1 -0
  210. package/dist/domains/comet-native/native-atomic-file.js +175 -0
  211. package/dist/domains/comet-native/native-atomic-file.js.map +1 -0
  212. package/dist/domains/comet-native/native-bounded-file.d.ts +19 -0
  213. package/dist/domains/comet-native/native-bounded-file.d.ts.map +1 -0
  214. package/dist/domains/comet-native/native-bounded-file.js +180 -0
  215. package/dist/domains/comet-native/native-bounded-file.js.map +1 -0
  216. package/dist/domains/comet-native/native-build-evidence.d.ts +42 -0
  217. package/dist/domains/comet-native/native-build-evidence.d.ts.map +1 -0
  218. package/dist/domains/comet-native/native-build-evidence.js +257 -0
  219. package/dist/domains/comet-native/native-build-evidence.js.map +1 -0
  220. package/dist/domains/comet-native/native-canonical-hash.d.ts +10 -0
  221. package/dist/domains/comet-native/native-canonical-hash.d.ts.map +1 -0
  222. package/dist/domains/comet-native/native-canonical-hash.js +100 -0
  223. package/dist/domains/comet-native/native-canonical-hash.js.map +1 -0
  224. package/dist/domains/comet-native/native-change-recovery.d.ts +11 -0
  225. package/dist/domains/comet-native/native-change-recovery.d.ts.map +1 -0
  226. package/dist/domains/comet-native/native-change-recovery.js +15 -0
  227. package/dist/domains/comet-native/native-change-recovery.js.map +1 -0
  228. package/dist/domains/comet-native/native-change.d.ts +61 -0
  229. package/dist/domains/comet-native/native-change.d.ts.map +1 -0
  230. package/dist/domains/comet-native/native-change.js +696 -0
  231. package/dist/domains/comet-native/native-change.js.map +1 -0
  232. package/dist/domains/comet-native/native-check-receipt-model.d.ts +63 -0
  233. package/dist/domains/comet-native/native-check-receipt-model.d.ts.map +1 -0
  234. package/dist/domains/comet-native/native-check-receipt-model.js +347 -0
  235. package/dist/domains/comet-native/native-check-receipt-model.js.map +1 -0
  236. package/dist/domains/comet-native/native-check-receipt-storage.d.ts +10 -0
  237. package/dist/domains/comet-native/native-check-receipt-storage.d.ts.map +1 -0
  238. package/dist/domains/comet-native/native-check-receipt-storage.js +196 -0
  239. package/dist/domains/comet-native/native-check-receipt-storage.js.map +1 -0
  240. package/dist/domains/comet-native/native-check-receipt.d.ts +19 -0
  241. package/dist/domains/comet-native/native-check-receipt.d.ts.map +1 -0
  242. package/dist/domains/comet-native/native-check-receipt.js +446 -0
  243. package/dist/domains/comet-native/native-check-receipt.js.map +1 -0
  244. package/dist/domains/comet-native/native-check.d.ts +18 -0
  245. package/dist/domains/comet-native/native-check.d.ts.map +1 -0
  246. package/dist/domains/comet-native/native-check.js +29 -0
  247. package/dist/domains/comet-native/native-check.js.map +1 -0
  248. package/dist/domains/comet-native/native-checkpoint-journal.d.ts +13 -0
  249. package/dist/domains/comet-native/native-checkpoint-journal.d.ts.map +1 -0
  250. package/dist/domains/comet-native/native-checkpoint-journal.js +53 -0
  251. package/dist/domains/comet-native/native-checkpoint-journal.js.map +1 -0
  252. package/dist/domains/comet-native/native-checkpoint-storage.d.ts +43 -0
  253. package/dist/domains/comet-native/native-checkpoint-storage.d.ts.map +1 -0
  254. package/dist/domains/comet-native/native-checkpoint-storage.js +487 -0
  255. package/dist/domains/comet-native/native-checkpoint-storage.js.map +1 -0
  256. package/dist/domains/comet-native/native-cli-entry.d.ts +2 -0
  257. package/dist/domains/comet-native/native-cli-entry.d.ts.map +1 -0
  258. package/dist/domains/comet-native/native-cli-entry.js +18 -0
  259. package/dist/domains/comet-native/native-cli-entry.js.map +1 -0
  260. package/dist/domains/comet-native/native-cli.d.ts +7 -0
  261. package/dist/domains/comet-native/native-cli.d.ts.map +1 -0
  262. package/dist/domains/comet-native/native-cli.js +642 -0
  263. package/dist/domains/comet-native/native-cli.js.map +1 -0
  264. package/dist/domains/comet-native/native-config.d.ts +15 -0
  265. package/dist/domains/comet-native/native-config.d.ts.map +1 -0
  266. package/dist/domains/comet-native/native-config.js +281 -0
  267. package/dist/domains/comet-native/native-config.js.map +1 -0
  268. package/dist/domains/comet-native/native-conflict-inspection.d.ts +17 -0
  269. package/dist/domains/comet-native/native-conflict-inspection.d.ts.map +1 -0
  270. package/dist/domains/comet-native/native-conflict-inspection.js +90 -0
  271. package/dist/domains/comet-native/native-conflict-inspection.js.map +1 -0
  272. package/dist/domains/comet-native/native-conflict-radar.d.ts +75 -0
  273. package/dist/domains/comet-native/native-conflict-radar.d.ts.map +1 -0
  274. package/dist/domains/comet-native/native-conflict-radar.js +326 -0
  275. package/dist/domains/comet-native/native-conflict-radar.js.map +1 -0
  276. package/dist/domains/comet-native/native-continuation.d.ts +9 -0
  277. package/dist/domains/comet-native/native-continuation.d.ts.map +1 -0
  278. package/dist/domains/comet-native/native-continuation.js +146 -0
  279. package/dist/domains/comet-native/native-continuation.js.map +1 -0
  280. package/dist/domains/comet-native/native-contract-files.d.ts +24 -0
  281. package/dist/domains/comet-native/native-contract-files.d.ts.map +1 -0
  282. package/dist/domains/comet-native/native-contract-files.js +66 -0
  283. package/dist/domains/comet-native/native-contract-files.js.map +1 -0
  284. package/dist/domains/comet-native/native-contract.d.ts +41 -0
  285. package/dist/domains/comet-native/native-contract.d.ts.map +1 -0
  286. package/dist/domains/comet-native/native-contract.js +141 -0
  287. package/dist/domains/comet-native/native-contract.js.map +1 -0
  288. package/dist/domains/comet-native/native-diagnostics.d.ts +18 -0
  289. package/dist/domains/comet-native/native-diagnostics.d.ts.map +1 -0
  290. package/dist/domains/comet-native/native-diagnostics.js +522 -0
  291. package/dist/domains/comet-native/native-diagnostics.js.map +1 -0
  292. package/dist/domains/comet-native/native-doctor.d.ts +12 -0
  293. package/dist/domains/comet-native/native-doctor.d.ts.map +1 -0
  294. package/dist/domains/comet-native/native-doctor.js +768 -0
  295. package/dist/domains/comet-native/native-doctor.js.map +1 -0
  296. package/dist/domains/comet-native/native-evidence-retention.d.ts +37 -0
  297. package/dist/domains/comet-native/native-evidence-retention.d.ts.map +1 -0
  298. package/dist/domains/comet-native/native-evidence-retention.js +885 -0
  299. package/dist/domains/comet-native/native-evidence-retention.js.map +1 -0
  300. package/dist/domains/comet-native/native-evidence-storage.d.ts +41 -0
  301. package/dist/domains/comet-native/native-evidence-storage.d.ts.map +1 -0
  302. package/dist/domains/comet-native/native-evidence-storage.js +351 -0
  303. package/dist/domains/comet-native/native-evidence-storage.js.map +1 -0
  304. package/dist/domains/comet-native/native-findings.d.ts +8 -0
  305. package/dist/domains/comet-native/native-findings.d.ts.map +1 -0
  306. package/dist/domains/comet-native/native-findings.js +238 -0
  307. package/dist/domains/comet-native/native-findings.js.map +1 -0
  308. package/dist/domains/comet-native/native-guards.d.ts +7 -0
  309. package/dist/domains/comet-native/native-guards.d.ts.map +1 -0
  310. package/dist/domains/comet-native/native-guards.js +126 -0
  311. package/dist/domains/comet-native/native-guards.js.map +1 -0
  312. package/dist/domains/comet-native/native-hash.d.ts +3 -0
  313. package/dist/domains/comet-native/native-hash.d.ts.map +1 -0
  314. package/dist/domains/comet-native/native-hash.js +12 -0
  315. package/dist/domains/comet-native/native-hash.js.map +1 -0
  316. package/dist/domains/comet-native/native-hook-guard.d.ts +17 -0
  317. package/dist/domains/comet-native/native-hook-guard.d.ts.map +1 -0
  318. package/dist/domains/comet-native/native-hook-guard.js +154 -0
  319. package/dist/domains/comet-native/native-hook-guard.js.map +1 -0
  320. package/dist/domains/comet-native/native-lock.d.ts +47 -0
  321. package/dist/domains/comet-native/native-lock.d.ts.map +1 -0
  322. package/dist/domains/comet-native/native-lock.js +395 -0
  323. package/dist/domains/comet-native/native-lock.js.map +1 -0
  324. package/dist/domains/comet-native/native-mutation-lock.d.ts +5 -0
  325. package/dist/domains/comet-native/native-mutation-lock.d.ts.map +1 -0
  326. package/dist/domains/comet-native/native-mutation-lock.js +66 -0
  327. package/dist/domains/comet-native/native-mutation-lock.js.map +1 -0
  328. package/dist/domains/comet-native/native-paths.d.ts +10 -0
  329. package/dist/domains/comet-native/native-paths.d.ts.map +1 -0
  330. package/dist/domains/comet-native/native-paths.js +171 -0
  331. package/dist/domains/comet-native/native-paths.js.map +1 -0
  332. package/dist/domains/comet-native/native-progress-checkpoint.d.ts +13 -0
  333. package/dist/domains/comet-native/native-progress-checkpoint.d.ts.map +1 -0
  334. package/dist/domains/comet-native/native-progress-checkpoint.js +104 -0
  335. package/dist/domains/comet-native/native-progress-checkpoint.js.map +1 -0
  336. package/dist/domains/comet-native/native-protected-file.d.ts +113 -0
  337. package/dist/domains/comet-native/native-protected-file.d.ts.map +1 -0
  338. package/dist/domains/comet-native/native-protected-file.js +509 -0
  339. package/dist/domains/comet-native/native-protected-file.js.map +1 -0
  340. package/dist/domains/comet-native/native-redaction.d.ts +2 -0
  341. package/dist/domains/comet-native/native-redaction.d.ts.map +1 -0
  342. package/dist/domains/comet-native/native-redaction.js +18 -0
  343. package/dist/domains/comet-native/native-redaction.js.map +1 -0
  344. package/dist/domains/comet-native/native-repair-integration.d.ts +42 -0
  345. package/dist/domains/comet-native/native-repair-integration.d.ts.map +1 -0
  346. package/dist/domains/comet-native/native-repair-integration.js +184 -0
  347. package/dist/domains/comet-native/native-repair-integration.js.map +1 -0
  348. package/dist/domains/comet-native/native-repair-runtime.d.ts +73 -0
  349. package/dist/domains/comet-native/native-repair-runtime.d.ts.map +1 -0
  350. package/dist/domains/comet-native/native-repair-runtime.js +509 -0
  351. package/dist/domains/comet-native/native-repair-runtime.js.map +1 -0
  352. package/dist/domains/comet-native/native-repair-stagnation.d.ts +85 -0
  353. package/dist/domains/comet-native/native-repair-stagnation.d.ts.map +1 -0
  354. package/dist/domains/comet-native/native-repair-stagnation.js +256 -0
  355. package/dist/domains/comet-native/native-repair-stagnation.js.map +1 -0
  356. package/dist/domains/comet-native/native-resume-view.d.ts +14 -0
  357. package/dist/domains/comet-native/native-resume-view.d.ts.map +1 -0
  358. package/dist/domains/comet-native/native-resume-view.js +105 -0
  359. package/dist/domains/comet-native/native-resume-view.js.map +1 -0
  360. package/dist/domains/comet-native/native-revision.d.ts +20 -0
  361. package/dist/domains/comet-native/native-revision.d.ts.map +1 -0
  362. package/dist/domains/comet-native/native-revision.js +32 -0
  363. package/dist/domains/comet-native/native-revision.js.map +1 -0
  364. package/dist/domains/comet-native/native-root-move.d.ts +20 -0
  365. package/dist/domains/comet-native/native-root-move.d.ts.map +1 -0
  366. package/dist/domains/comet-native/native-root-move.js +812 -0
  367. package/dist/domains/comet-native/native-root-move.js.map +1 -0
  368. package/dist/domains/comet-native/native-run-consistency.d.ts +3 -0
  369. package/dist/domains/comet-native/native-run-consistency.d.ts.map +1 -0
  370. package/dist/domains/comet-native/native-run-consistency.js +136 -0
  371. package/dist/domains/comet-native/native-run-consistency.js.map +1 -0
  372. package/dist/domains/comet-native/native-run-store.d.ts +41 -0
  373. package/dist/domains/comet-native/native-run-store.d.ts.map +1 -0
  374. package/dist/domains/comet-native/native-run-store.js +451 -0
  375. package/dist/domains/comet-native/native-run-store.js.map +1 -0
  376. package/dist/domains/comet-native/native-runtime-package.d.ts +16 -0
  377. package/dist/domains/comet-native/native-runtime-package.d.ts.map +1 -0
  378. package/dist/domains/comet-native/native-runtime-package.js +72 -0
  379. package/dist/domains/comet-native/native-runtime-package.js.map +1 -0
  380. package/dist/domains/comet-native/native-schema-migration.d.ts +11 -0
  381. package/dist/domains/comet-native/native-schema-migration.d.ts.map +1 -0
  382. package/dist/domains/comet-native/native-schema-migration.js +899 -0
  383. package/dist/domains/comet-native/native-schema-migration.js.map +1 -0
  384. package/dist/domains/comet-native/native-selection.d.ts +12 -0
  385. package/dist/domains/comet-native/native-selection.d.ts.map +1 -0
  386. package/dist/domains/comet-native/native-selection.js +52 -0
  387. package/dist/domains/comet-native/native-selection.js.map +1 -0
  388. package/dist/domains/comet-native/native-sensitive-paths.d.ts +7 -0
  389. package/dist/domains/comet-native/native-sensitive-paths.d.ts.map +1 -0
  390. package/dist/domains/comet-native/native-sensitive-paths.js +69 -0
  391. package/dist/domains/comet-native/native-sensitive-paths.js.map +1 -0
  392. package/dist/domains/comet-native/native-snapshot.d.ts +74 -0
  393. package/dist/domains/comet-native/native-snapshot.d.ts.map +1 -0
  394. package/dist/domains/comet-native/native-snapshot.js +2308 -0
  395. package/dist/domains/comet-native/native-snapshot.js.map +1 -0
  396. package/dist/domains/comet-native/native-specs.d.ts +12 -0
  397. package/dist/domains/comet-native/native-specs.d.ts.map +1 -0
  398. package/dist/domains/comet-native/native-specs.js +270 -0
  399. package/dist/domains/comet-native/native-specs.js.map +1 -0
  400. package/dist/domains/comet-native/native-trajectory-limits.d.ts +7 -0
  401. package/dist/domains/comet-native/native-trajectory-limits.d.ts.map +1 -0
  402. package/dist/domains/comet-native/native-trajectory-limits.js +13 -0
  403. package/dist/domains/comet-native/native-trajectory-limits.js.map +1 -0
  404. package/dist/domains/comet-native/native-trajectory-recovery.d.ts +37 -0
  405. package/dist/domains/comet-native/native-trajectory-recovery.d.ts.map +1 -0
  406. package/dist/domains/comet-native/native-trajectory-recovery.js +133 -0
  407. package/dist/domains/comet-native/native-trajectory-recovery.js.map +1 -0
  408. package/dist/domains/comet-native/native-trajectory.d.ts +16 -0
  409. package/dist/domains/comet-native/native-trajectory.d.ts.map +1 -0
  410. package/dist/domains/comet-native/native-trajectory.js +27 -0
  411. package/dist/domains/comet-native/native-trajectory.js.map +1 -0
  412. package/dist/domains/comet-native/native-transaction.d.ts +45 -0
  413. package/dist/domains/comet-native/native-transaction.d.ts.map +1 -0
  414. package/dist/domains/comet-native/native-transaction.js +846 -0
  415. package/dist/domains/comet-native/native-transaction.js.map +1 -0
  416. package/dist/domains/comet-native/native-transition-evidence.d.ts +4 -0
  417. package/dist/domains/comet-native/native-transition-evidence.d.ts.map +1 -0
  418. package/dist/domains/comet-native/native-transition-evidence.js +20 -0
  419. package/dist/domains/comet-native/native-transition-evidence.js.map +1 -0
  420. package/dist/domains/comet-native/native-transition-journal.d.ts +30 -0
  421. package/dist/domains/comet-native/native-transition-journal.d.ts.map +1 -0
  422. package/dist/domains/comet-native/native-transition-journal.js +819 -0
  423. package/dist/domains/comet-native/native-transition-journal.js.map +1 -0
  424. package/dist/domains/comet-native/native-transitions.d.ts +13 -0
  425. package/dist/domains/comet-native/native-transitions.d.ts.map +1 -0
  426. package/dist/domains/comet-native/native-transitions.js +632 -0
  427. package/dist/domains/comet-native/native-transitions.js.map +1 -0
  428. package/dist/domains/comet-native/native-types.d.ts +547 -0
  429. package/dist/domains/comet-native/native-types.d.ts.map +1 -0
  430. package/dist/domains/comet-native/native-types.js +8 -0
  431. package/dist/domains/comet-native/native-types.js.map +1 -0
  432. package/dist/domains/comet-native/native-verification-evidence.d.ts +86 -0
  433. package/dist/domains/comet-native/native-verification-evidence.d.ts.map +1 -0
  434. package/dist/domains/comet-native/native-verification-evidence.js +480 -0
  435. package/dist/domains/comet-native/native-verification-evidence.js.map +1 -0
  436. package/dist/domains/comet-native/native-verification-runtime.d.ts +58 -0
  437. package/dist/domains/comet-native/native-verification-runtime.d.ts.map +1 -0
  438. package/dist/domains/comet-native/native-verification-runtime.js +321 -0
  439. package/dist/domains/comet-native/native-verification-runtime.js.map +1 -0
  440. package/dist/domains/comet-native/native-verification-scope.d.ts +117 -0
  441. package/dist/domains/comet-native/native-verification-scope.d.ts.map +1 -0
  442. package/dist/domains/comet-native/native-verification-scope.js +1040 -0
  443. package/dist/domains/comet-native/native-verification-scope.js.map +1 -0
  444. package/dist/domains/comet-native/native-workspace.d.ts +46 -0
  445. package/dist/domains/comet-native/native-workspace.d.ts.map +1 -0
  446. package/dist/domains/comet-native/native-workspace.js +276 -0
  447. package/dist/domains/comet-native/native-workspace.js.map +1 -0
  448. package/dist/domains/dashboard/collector.d.ts.map +1 -1
  449. package/dist/domains/dashboard/collector.js +9 -1
  450. package/dist/domains/dashboard/collector.js.map +1 -1
  451. package/dist/domains/dashboard/native-adapter.d.ts +157 -0
  452. package/dist/domains/dashboard/native-adapter.d.ts.map +1 -0
  453. package/dist/domains/dashboard/native-adapter.js +302 -0
  454. package/dist/domains/dashboard/native-adapter.js.map +1 -0
  455. package/dist/domains/dashboard/native-collector.d.ts +6 -0
  456. package/dist/domains/dashboard/native-collector.d.ts.map +1 -0
  457. package/dist/domains/dashboard/native-collector.js +285 -0
  458. package/dist/domains/dashboard/native-collector.js.map +1 -0
  459. package/dist/domains/dashboard/types.d.ts +5 -0
  460. package/dist/domains/dashboard/types.d.ts.map +1 -1
  461. package/dist/domains/dashboard/web/assets/{arc-TGVUG2WN.js → arc-CxdiLJ50.js} +1 -1
  462. package/dist/domains/dashboard/web/assets/{architectureDiagram-3BPJPVTR-ASHmiHoP.js → architectureDiagram-3BPJPVTR-D5YCQu4e.js} +1 -1
  463. package/dist/domains/dashboard/web/assets/{blockDiagram-GPEHLZMM-CwASxBKe.js → blockDiagram-GPEHLZMM-8NfdCOQ8.js} +1 -1
  464. package/dist/domains/dashboard/web/assets/{c4Diagram-AAUBKEIU-BU8z_WNk.js → c4Diagram-AAUBKEIU-B3cFnNT7.js} +1 -1
  465. package/dist/domains/dashboard/web/assets/channel-B6AFly29.js +1 -0
  466. package/dist/domains/dashboard/web/assets/{chunk-2J33WTMH-CBGlUx4_.js → chunk-2J33WTMH-CBNfW-Dr.js} +1 -1
  467. package/dist/domains/dashboard/web/assets/{chunk-4BX2VUAB-CS-iGcFz.js → chunk-4BX2VUAB-vWyemRBr.js} +1 -1
  468. package/dist/domains/dashboard/web/assets/{chunk-55IACEB6-BUtCVJat.js → chunk-55IACEB6-H6haOo2C.js} +1 -1
  469. package/dist/domains/dashboard/web/assets/{chunk-727SXJPM-C94tj_pf.js → chunk-727SXJPM-D02UjGND.js} +1 -1
  470. package/dist/domains/dashboard/web/assets/{chunk-AQP2D5EJ-BFOKcpdG.js → chunk-AQP2D5EJ-wKsbOw_T.js} +1 -1
  471. package/dist/domains/dashboard/web/assets/{chunk-FMBD7UC4-Dmx8B-st.js → chunk-FMBD7UC4-eYFEZimP.js} +1 -1
  472. package/dist/domains/dashboard/web/assets/{chunk-ND2GUHAM-DYV00CNn.js → chunk-ND2GUHAM-fMaIDDI2.js} +1 -1
  473. package/dist/domains/dashboard/web/assets/{chunk-QZHKN3VN-DMJJyQnw.js → chunk-QZHKN3VN-C9rhF6Hm.js} +1 -1
  474. package/dist/domains/dashboard/web/assets/classDiagram-4FO5ZUOK-BcnrxOTt.js +1 -0
  475. package/dist/domains/dashboard/web/assets/classDiagram-v2-Q7XG4LA2-BcnrxOTt.js +1 -0
  476. package/dist/domains/dashboard/web/assets/{cose-bilkent-S5V4N54A-P4nE2rea.js → cose-bilkent-S5V4N54A-CbaShPub.js} +1 -1
  477. package/dist/domains/dashboard/web/assets/{cynefin-VYW2F7L2-C-R1HXDv.js → cynefin-VYW2F7L2-DN4emAQv.js} +1 -1
  478. package/dist/domains/dashboard/web/assets/{dagre-BM42HDAG-BH8d-C9z.js → dagre-BM42HDAG-BpSzbk_V.js} +1 -1
  479. package/dist/domains/dashboard/web/assets/demo-BuVau32v.js +25 -0
  480. package/dist/domains/dashboard/web/assets/{diagram-2AECGRRQ-DpXTgQIH.js → diagram-2AECGRRQ-CfXwGGpQ.js} +1 -1
  481. package/dist/domains/dashboard/web/assets/{diagram-5GNKFQAL-DSiFJzSw.js → diagram-5GNKFQAL-DMp0Zmot.js} +1 -1
  482. package/dist/domains/dashboard/web/assets/{diagram-KO2AKTUF-DULMkben.js → diagram-KO2AKTUF-C7ZvofsM.js} +1 -1
  483. package/dist/domains/dashboard/web/assets/{diagram-LMA3HP47-Pi8m_NO9.js → diagram-LMA3HP47-BjmxFnap.js} +1 -1
  484. package/dist/domains/dashboard/web/assets/{diagram-OG6HWLK6-BSe6bCWm.js → diagram-OG6HWLK6-DFBG1Iqy.js} +1 -1
  485. package/dist/domains/dashboard/web/assets/{erDiagram-TEJ5UH35-zb-FEcbq.js → erDiagram-TEJ5UH35-MpNT7dzt.js} +1 -1
  486. package/dist/domains/dashboard/web/assets/{flowDiagram-I6XJVG4X-Dr-Gk0z2.js → flowDiagram-I6XJVG4X-_1wAR6c1.js} +1 -1
  487. package/dist/domains/dashboard/web/assets/{ganttDiagram-6RSMTGT7-qs6Zb2A6.js → ganttDiagram-6RSMTGT7-DJKjDeWl.js} +1 -1
  488. package/dist/domains/dashboard/web/assets/{gitGraphDiagram-PVQCEYII-BQ314orT.js → gitGraphDiagram-PVQCEYII-BL7yUEn-.js} +1 -1
  489. package/dist/domains/dashboard/web/assets/index-CjE9mHGb.js +24 -0
  490. package/dist/domains/dashboard/web/assets/index-D-AGxvI4.css +1 -0
  491. package/dist/domains/dashboard/web/assets/{infoDiagram-5YYISTIA-O0bQp98A.js → infoDiagram-5YYISTIA-Bt5fqrOd.js} +1 -1
  492. package/dist/domains/dashboard/web/assets/{ishikawaDiagram-YF4QCWOH-BPC7wbKh.js → ishikawaDiagram-YF4QCWOH-COCMcjBM.js} +1 -1
  493. package/dist/domains/dashboard/web/assets/{journeyDiagram-JHISSGLW-ohViOd4b.js → journeyDiagram-JHISSGLW-DGcpcWny.js} +1 -1
  494. package/dist/domains/dashboard/web/assets/{kanban-definition-UN3LZRKU-CHleNdbG.js → kanban-definition-UN3LZRKU-QSBNsWMP.js} +1 -1
  495. package/dist/domains/dashboard/web/assets/{linear-CyqiW--Q.js → linear-9uyeeBZf.js} +1 -1
  496. package/dist/domains/dashboard/web/assets/{mermaid.core-qS9XvtaK.js → mermaid.core-CkNdB471.js} +4 -4
  497. package/dist/domains/dashboard/web/assets/{mindmap-definition-RKZ34NQL-oaGkqO9l.js → mindmap-definition-RKZ34NQL-CiNxI0gP.js} +1 -1
  498. package/dist/domains/dashboard/web/assets/{pieDiagram-4H26LBE5-CPcB-AFh.js → pieDiagram-4H26LBE5-BLJ6QnRO.js} +1 -1
  499. package/dist/domains/dashboard/web/assets/{quadrantDiagram-W4KKPZXB-LFy52Qtj.js → quadrantDiagram-W4KKPZXB-CflW-eFH.js} +1 -1
  500. package/dist/domains/dashboard/web/assets/{requirementDiagram-4Y6WPE33-BdjeaYP_.js → requirementDiagram-4Y6WPE33-B9HLmRWH.js} +1 -1
  501. package/dist/domains/dashboard/web/assets/{sankeyDiagram-5OEKKPKP-DDJ4styL.js → sankeyDiagram-5OEKKPKP-6xnco5k5.js} +1 -1
  502. package/dist/domains/dashboard/web/assets/{sequenceDiagram-3UESZ5HK-BL5bFNoz.js → sequenceDiagram-3UESZ5HK-Dp1rujNZ.js} +1 -1
  503. package/dist/domains/dashboard/web/assets/{stateDiagram-AJRCARHV-BNUfikui.js → stateDiagram-AJRCARHV-C1Xc90ek.js} +1 -1
  504. package/dist/domains/dashboard/web/assets/stateDiagram-v2-BHNVJYJU-p-qmzXyE.js +1 -0
  505. package/dist/domains/dashboard/web/assets/{timeline-definition-PNZ67QCA--ps2uu6L.js → timeline-definition-PNZ67QCA-g9s-m5Z4.js} +1 -1
  506. package/dist/domains/dashboard/web/assets/{vennDiagram-CIIHVFJN-C2q8q26c.js → vennDiagram-CIIHVFJN-rkEyhyCc.js} +1 -1
  507. package/dist/domains/dashboard/web/assets/{wardleyDiagram-YWT4CUSO-BUH9gXqd.js → wardleyDiagram-YWT4CUSO-CJLrWGXc.js} +1 -1
  508. package/dist/domains/dashboard/web/assets/{xychartDiagram-2RQKCTM6-B-DielEy.js → xychartDiagram-2RQKCTM6-BxJvPNqo.js} +1 -1
  509. package/dist/domains/dashboard/web/index.html +2 -2
  510. package/dist/domains/engine/storage-layout.d.ts +14 -0
  511. package/dist/domains/engine/storage-layout.d.ts.map +1 -0
  512. package/dist/domains/engine/storage-layout.js +32 -0
  513. package/dist/domains/engine/storage-layout.js.map +1 -0
  514. package/dist/domains/engine/storage-run.d.ts +9 -0
  515. package/dist/domains/engine/storage-run.d.ts.map +1 -0
  516. package/dist/domains/engine/storage-run.js +116 -0
  517. package/dist/domains/engine/storage-run.js.map +1 -0
  518. package/dist/domains/factory/package.d.ts.map +1 -1
  519. package/dist/domains/factory/package.js +5 -3
  520. package/dist/domains/factory/package.js.map +1 -1
  521. package/dist/domains/integrations/openspec.d.ts.map +1 -1
  522. package/dist/domains/integrations/openspec.js +8 -6
  523. package/dist/domains/integrations/openspec.js.map +1 -1
  524. package/dist/domains/skill/platform-inspect.d.ts +6 -2
  525. package/dist/domains/skill/platform-inspect.d.ts.map +1 -1
  526. package/dist/domains/skill/platform-inspect.js +52 -8
  527. package/dist/domains/skill/platform-inspect.js.map +1 -1
  528. package/dist/domains/skill/platform-install.d.ts +18 -7
  529. package/dist/domains/skill/platform-install.d.ts.map +1 -1
  530. package/dist/domains/skill/platform-install.js +338 -71
  531. package/dist/domains/skill/platform-install.js.map +1 -1
  532. package/dist/domains/skill/project-instructions.d.ts.map +1 -1
  533. package/dist/domains/skill/project-instructions.js +12 -6
  534. package/dist/domains/skill/project-instructions.js.map +1 -1
  535. package/dist/domains/skill/uninstall.d.ts.map +1 -1
  536. package/dist/domains/skill/uninstall.js +15 -3
  537. package/dist/domains/skill/uninstall.js.map +1 -1
  538. package/dist/domains/workflow-contract/builtins.d.ts +6 -0
  539. package/dist/domains/workflow-contract/builtins.d.ts.map +1 -1
  540. package/dist/domains/workflow-contract/builtins.js +137 -0
  541. package/dist/domains/workflow-contract/builtins.js.map +1 -1
  542. package/dist/domains/workflow-contract/index.d.ts +3 -1
  543. package/dist/domains/workflow-contract/index.d.ts.map +1 -1
  544. package/dist/domains/workflow-contract/index.js +2 -1
  545. package/dist/domains/workflow-contract/index.js.map +1 -1
  546. package/dist/domains/workflow-contract/normalize.d.ts.map +1 -1
  547. package/dist/domains/workflow-contract/normalize.js +28 -10
  548. package/dist/domains/workflow-contract/normalize.js.map +1 -1
  549. package/dist/domains/workflow-contract/project-config.d.ts +7 -0
  550. package/dist/domains/workflow-contract/project-config.d.ts.map +1 -0
  551. package/dist/domains/workflow-contract/project-config.js +110 -0
  552. package/dist/domains/workflow-contract/project-config.js.map +1 -0
  553. package/dist/domains/workflow-contract/types.d.ts +4 -2
  554. package/dist/domains/workflow-contract/types.d.ts.map +1 -1
  555. package/dist/domains/workflow-contract/validation.d.ts.map +1 -1
  556. package/dist/domains/workflow-contract/validation.js +14 -5
  557. package/dist/domains/workflow-contract/validation.js.map +1 -1
  558. package/dist/platform/install/detect.d.ts +3 -1
  559. package/dist/platform/install/detect.d.ts.map +1 -1
  560. package/dist/platform/install/detect.js +4 -1
  561. package/dist/platform/install/detect.js.map +1 -1
  562. package/dist/platform/install/project-registry.js +2 -2
  563. package/dist/platform/install/project-registry.js.map +1 -1
  564. package/dist/platform/paths/repository-layout.d.ts +16 -0
  565. package/dist/platform/paths/repository-layout.d.ts.map +1 -1
  566. package/dist/platform/paths/repository-layout.js.map +1 -1
  567. package/eval/local/README.md +50 -0
  568. package/eval/local/scripts/compare_baselines.py +127 -1
  569. package/eval/local/scripts/regression_check.py +3 -4
  570. package/eval/local/tasks/comet-native-clarification/environment/Dockerfile +27 -0
  571. package/eval/local/tasks/comet-native-clarification/environment/test_wordcount.py +25 -0
  572. package/eval/local/tasks/comet-native-clarification/environment/wordcount.py +36 -0
  573. package/eval/local/tasks/comet-native-clarification/instruction.md +7 -0
  574. package/eval/local/tasks/comet-native-clarification/task.toml +40 -0
  575. package/eval/local/tasks/comet-native-clarification/validation/test_native_clarification.py +193 -0
  576. package/eval/local/tasks/comet-native-clarification-modes/environment/Dockerfile +27 -0
  577. package/eval/local/tasks/comet-native-clarification-modes/environment/test_wordcount.py +25 -0
  578. package/eval/local/tasks/comet-native-clarification-modes/environment/wordcount.py +36 -0
  579. package/eval/local/tasks/comet-native-clarification-modes/instruction.md +13 -0
  580. package/eval/local/tasks/comet-native-clarification-modes/task.toml +39 -0
  581. package/eval/local/tasks/comet-native-clarification-modes/validation/test_native_clarification_modes.py +235 -0
  582. package/eval/local/tasks/comet-native-interrupted-transition/environment/.comet/config.yaml +6 -0
  583. package/eval/local/tasks/comet-native-interrupted-transition/environment/Dockerfile +28 -0
  584. package/eval/local/tasks/comet-native-interrupted-transition/environment/docs/comet/changes/add-character-counting/brief.md +17 -0
  585. package/eval/local/tasks/comet-native-interrupted-transition/environment/docs/comet/changes/add-character-counting/comet-state.yaml +12 -0
  586. package/eval/local/tasks/comet-native-interrupted-transition/environment/docs/comet/changes/add-character-counting/runtime/transition.json +69 -0
  587. package/eval/local/tasks/comet-native-interrupted-transition/environment/docs/comet/changes/add-character-counting/specs/character-counting/spec.md +3 -0
  588. package/eval/local/tasks/comet-native-interrupted-transition/environment/test_wordcount.py +20 -0
  589. package/eval/local/tasks/comet-native-interrupted-transition/environment/wordcount.py +27 -0
  590. package/eval/local/tasks/comet-native-interrupted-transition/instruction.md +7 -0
  591. package/eval/local/tasks/comet-native-interrupted-transition/task.toml +35 -0
  592. package/eval/local/tasks/comet-native-interrupted-transition/validation/test_native_interrupted_transition.py +63 -0
  593. package/eval/local/tasks/comet-native-repository-fact/environment/Dockerfile +26 -0
  594. package/eval/local/tasks/comet-native-repository-fact/environment/PRODUCT_RULES.md +3 -0
  595. package/eval/local/tasks/comet-native-repository-fact/environment/test_wordcount.py +20 -0
  596. package/eval/local/tasks/comet-native-repository-fact/environment/wordcount.py +27 -0
  597. package/eval/local/tasks/comet-native-repository-fact/instruction.md +7 -0
  598. package/eval/local/tasks/comet-native-repository-fact/task.toml +35 -0
  599. package/eval/local/tasks/comet-native-repository-fact/validation/test_native_repository_fact.py +53 -0
  600. package/eval/local/tasks/comet-native-wave-b-decision-resume/environment/Dockerfile +27 -0
  601. package/eval/local/tasks/comet-native-wave-b-decision-resume/environment/test_wordcount.py +27 -0
  602. package/eval/local/tasks/comet-native-wave-b-decision-resume/environment/wordcount.py +36 -0
  603. package/eval/local/tasks/comet-native-wave-b-decision-resume/instruction.md +9 -0
  604. package/eval/local/tasks/comet-native-wave-b-decision-resume/task.toml +40 -0
  605. package/eval/local/tasks/comet-native-wave-b-decision-resume/validation/test_native_wave_b_decision_resume.py +208 -0
  606. package/eval/local/tasks/comet-native-wave-c-verification-integrity/environment/Dockerfile +27 -0
  607. package/eval/local/tasks/comet-native-wave-c-verification-integrity/environment/test_wordcount.py +27 -0
  608. package/eval/local/tasks/comet-native-wave-c-verification-integrity/environment/wordcount.py +36 -0
  609. package/eval/local/tasks/comet-native-wave-c-verification-integrity/instruction.md +11 -0
  610. package/eval/local/tasks/comet-native-wave-c-verification-integrity/task.toml +36 -0
  611. package/eval/local/tasks/comet-native-wave-c-verification-integrity/validation/test_native_wave_c_verification_integrity.py +344 -0
  612. package/eval/local/tasks/comet-native-wave-d-stagnation-stop/environment/Dockerfile +27 -0
  613. package/eval/local/tasks/comet-native-wave-d-stagnation-stop/environment/test_wordcount.py +27 -0
  614. package/eval/local/tasks/comet-native-wave-d-stagnation-stop/environment/wordcount.py +36 -0
  615. package/eval/local/tasks/comet-native-wave-d-stagnation-stop/instruction.md +11 -0
  616. package/eval/local/tasks/comet-native-wave-d-stagnation-stop/task.toml +37 -0
  617. package/eval/local/tasks/comet-native-wave-d-stagnation-stop/validation/test_native_wave_d_stagnation_stop.py +284 -0
  618. package/eval/local/tasks/comet-native-wave-e-parallel-safety/environment/.include-trusted-native-runtime +1 -0
  619. package/eval/local/tasks/comet-native-wave-e-parallel-safety/environment/Dockerfile +27 -0
  620. package/eval/local/tasks/comet-native-wave-e-parallel-safety/environment/test_wordcount.py +27 -0
  621. package/eval/local/tasks/comet-native-wave-e-parallel-safety/environment/wordcount.py +36 -0
  622. package/eval/local/tasks/comet-native-wave-e-parallel-safety/instruction.md +9 -0
  623. package/eval/local/tasks/comet-native-wave-e-parallel-safety/task.toml +37 -0
  624. package/eval/local/tasks/comet-native-wave-e-parallel-safety/validation/test_native_wave_e_parallel_safety.py +309 -0
  625. package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/environment/.include-current-comet-cli +1 -0
  626. package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/environment/Dockerfile +31 -0
  627. package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/environment/current-comet-package.json +18 -0
  628. package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/environment/current-comet.sh +14 -0
  629. package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/environment/test_wordcount.py +27 -0
  630. package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/environment/wordcount.py +36 -0
  631. package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/instruction.md +7 -0
  632. package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/task.toml +36 -0
  633. package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/validation/test_native_wave_f_dashboard_readonly.py +469 -0
  634. package/eval/local/tasks/comet-native-workflow/environment/Dockerfile +27 -0
  635. package/eval/local/tasks/comet-native-workflow/environment/test_wordcount.py +25 -0
  636. package/eval/local/tasks/comet-native-workflow/environment/wordcount.py +36 -0
  637. package/eval/local/tasks/comet-native-workflow/instruction.md +14 -0
  638. package/eval/local/tasks/comet-native-workflow/task.toml +36 -0
  639. package/eval/local/tasks/comet-native-workflow/validation/test_native_workflow.py +149 -0
  640. package/eval/local/tasks/index.yaml +61 -0
  641. package/eval/local/tests/conftest.py +407 -22
  642. package/eval/local/tests/scaffold/test_aligned_comparison.py +1012 -0
  643. package/eval/local/tests/scaffold/test_conftest_helpers.py +187 -7
  644. package/eval/local/tests/scaffold/test_logging.py +135 -1
  645. package/eval/local/tests/scaffold/test_manifests.py +2 -0
  646. package/eval/local/tests/scaffold/test_native_aligned_eval.py +346 -0
  647. package/eval/local/tests/scaffold/test_native_wave_evaluations.py +1889 -0
  648. package/eval/local/tests/scaffold/test_profiles.py +33 -0
  649. package/eval/local/tests/scaffold/test_sample_quality.py +57 -0
  650. package/eval/local/tests/scaffold/test_tasks.py +377 -1
  651. package/eval/local/tests/scaffold/test_treatments.py +59 -13
  652. package/eval/local/tests/scaffold/test_utils.py +277 -4
  653. package/eval/local/tests/tasks/__init__.py +1 -0
  654. package/eval/local/tests/tasks/test_tasks.py +104 -78
  655. package/eval/local/tests/tasks/test_validation_scripts.py +37 -0
  656. package/eval/local/treatments/comet/comet_native_phase1.yaml +66 -0
  657. package/eval/scaffold/python/aligned_comparison.py +1631 -0
  658. package/eval/scaffold/python/generic_llm_judge.py +3 -1
  659. package/eval/scaffold/python/llm_judge.py +0 -3
  660. package/eval/scaffold/python/logging.py +115 -16
  661. package/eval/scaffold/python/manifests.py +2 -0
  662. package/eval/scaffold/python/native_eval.py +138 -0
  663. package/eval/scaffold/python/pass_at_k.py +0 -1
  664. package/eval/scaffold/python/report_outputs.py +226 -44
  665. package/eval/scaffold/python/sample_quality.py +45 -2
  666. package/eval/scaffold/python/tasks.py +11 -0
  667. package/eval/scaffold/python/utils.py +108 -20
  668. package/eval/scaffold/python/validation/__init__.py +15 -5
  669. package/eval/scaffold/python/validation/comet_workflow.py +10 -5
  670. package/eval/scaffold/python/validation/generic_rubric.py +1 -2
  671. package/eval/scaffold/python/validation/native_wave.py +2154 -0
  672. package/eval/scaffold/python/validation/native_workflow.py +252 -0
  673. package/eval/scaffold/python/validation/rubric.py +0 -2
  674. package/eval/scaffold/shell/completion-point.sh +18 -0
  675. package/eval/scaffold/shell/decision-point.sh +35 -0
  676. package/eval/scaffold/shell/docker.sh +150 -9
  677. package/eval/scaffold/shell/run-claude-loop.sh +57 -27
  678. package/package.json +19 -5
  679. package/dist/domains/dashboard/web/assets/channel-kp6Ng2JJ.js +0 -1
  680. package/dist/domains/dashboard/web/assets/classDiagram-4FO5ZUOK-yBDjgMY_.js +0 -1
  681. package/dist/domains/dashboard/web/assets/classDiagram-v2-Q7XG4LA2-yBDjgMY_.js +0 -1
  682. package/dist/domains/dashboard/web/assets/demo-DQyfozbi.js +0 -1
  683. package/dist/domains/dashboard/web/assets/index-BLAfkNTu.css +0 -1
  684. package/dist/domains/dashboard/web/assets/index-DtLUOcAW.js +0 -24
  685. package/dist/domains/dashboard/web/assets/stateDiagram-v2-BHNVJYJU-DGrsmWts.js +0 -1
  686. package/eval/.env.example +0 -52
  687. package/eval/langsmith/.env.example +0 -16
@@ -5,11 +5,23 @@ import { fileURLToPath } from 'url';
5
5
  import { parseDocument } from 'yaml';
6
6
  import { fileExists, readJson, copyFile, ensureDir } from '../../platform/fs/file-system.js';
7
7
  import { getPlatformConfigDir, getPlatformSkillsDir, } from '../../platform/install/platforms.js';
8
- import { formatSupportedArtifactLanguages, resolveArtifactLanguage } from './languages.js';
8
+ import { resolveArtifactLanguage } from './languages.js';
9
9
  import { installCometProjectInstructions } from './project-instructions.js';
10
10
  import { readJsonObjectFile } from './json-object.js';
11
+ import { projectConfigComment, renderStructuredProjectConfig, } from '../workflow-contract/project-config.js';
11
12
  const __filename = fileURLToPath(import.meta.url);
12
13
  const __dirname = path.dirname(__filename);
14
+ const HOOK_ROUTER_SCRIPT = 'comet/scripts/comet-hook-router.mjs';
15
+ const LEGACY_HOOK_SCRIPTS = [
16
+ 'comet/scripts/comet-hook-guard.mjs',
17
+ 'comet-native/scripts/comet-native-hook-guard.mjs',
18
+ ];
19
+ const LEGACY_RULE_FILES = ['comet-phase-guard.md', 'comet-native-phase-guard.md'];
20
+ const NATIVE_SHARED_SKILL_PATHS = new Set([
21
+ 'comet/SKILL.md',
22
+ 'comet/scripts/comet-entry-runtime.mjs',
23
+ 'comet/scripts/comet-hook-router.mjs',
24
+ ]);
13
25
  function planSkillDirectoryCopy(files, destinationRoot) {
14
26
  return files
15
27
  .map((file) => ({
@@ -21,12 +33,27 @@ function planSkillDirectoryCopy(files, destinationRoot) {
21
33
  function getManagedSkillPaths(manifest) {
22
34
  return [...new Set([...manifest.skills, ...(manifest.internalSkills ?? [])])];
23
35
  }
36
+ function isManagedSkillPathForSelection(skillPath, workflowSelection) {
37
+ if (workflowSelection === 'both')
38
+ return true;
39
+ if (workflowSelection === 'classic')
40
+ return !skillPath.startsWith('comet-native/');
41
+ return (NATIVE_SHARED_SKILL_PATHS.has(skillPath) ||
42
+ skillPath.startsWith('comet-native/') ||
43
+ skillPath.startsWith('comet-any/'));
44
+ }
45
+ function getManagedSkillPathsForSelection(manifest, workflowSelection) {
46
+ return getManagedSkillPaths(manifest).filter((skillPath) => isManagedSkillPathForSelection(skillPath, workflowSelection));
47
+ }
48
+ function getUserFacingSkillPathsForSelection(manifest, workflowSelection) {
49
+ return manifest.skills.filter((skillPath) => isManagedSkillPathForSelection(skillPath, workflowSelection));
50
+ }
24
51
  function getUserFacingSkillNames(manifest) {
25
52
  return getTopLevelSkillNames(manifest.skills);
26
53
  }
27
- function getManagedSkillReplacementPaths(manifest) {
54
+ function getManagedSkillReplacementPaths(manifest, workflowSelection = 'both') {
28
55
  const allowed = new Set();
29
- for (const skillPath of getManagedSkillPaths(manifest)) {
56
+ for (const skillPath of getManagedSkillPathsForSelection(manifest, workflowSelection)) {
30
57
  const parts = skillPath.split('/').filter(Boolean);
31
58
  for (let depth = 1; depth <= parts.length; depth++) {
32
59
  allowed.add(parts.slice(0, depth).join('/'));
@@ -34,9 +61,9 @@ function getManagedSkillReplacementPaths(manifest) {
34
61
  }
35
62
  return allowed;
36
63
  }
37
- function getManagedSkillTopLevelEntries(manifest) {
64
+ function getManagedSkillTopLevelEntries(manifest, workflowSelection = 'both') {
38
65
  const entries = new Set();
39
- for (const skillPath of getManagedSkillPaths(manifest)) {
66
+ for (const skillPath of getManagedSkillPathsForSelection(manifest, workflowSelection)) {
40
67
  const [topLevel] = skillPath.split('/').filter(Boolean);
41
68
  if (topLevel)
42
69
  entries.add(topLevel);
@@ -138,11 +165,89 @@ async function lstatOrNull(filePath) {
138
165
  return await lstat(filePath);
139
166
  }
140
167
  catch (err) {
141
- if (err.code === 'ENOENT')
168
+ const code = err.code;
169
+ if (code === 'ENOENT' || code === 'ENOTDIR')
142
170
  return null;
143
171
  throw err;
144
172
  }
145
173
  }
174
+ async function prepareManagedSkillCopyTarget(baseDir, platform, scope = 'project', workflowSelection = 'both') {
175
+ const manifest = await readManifest();
176
+ const managedEntries = new Set(getManagedSkillTopLevelEntries(manifest, workflowSelection));
177
+ const skillsRoot = path.join(baseDir, getPlatformSkillsDir(platform, scope), 'skills');
178
+ const rootStat = await lstatOrNull(skillsRoot);
179
+ if (!rootStat)
180
+ return;
181
+ if (rootStat.isSymbolicLink()) {
182
+ let linkedEntries = [];
183
+ try {
184
+ linkedEntries = await readdir(skillsRoot);
185
+ }
186
+ catch (error) {
187
+ if (error.code !== 'ENOENT')
188
+ throw error;
189
+ }
190
+ const unmanagedEntries = linkedEntries.filter((entry) => !managedEntries.has(entry));
191
+ if (unmanagedEntries.length > 0) {
192
+ throw new Error(`Refusing to replace ${skillsRoot} with managed copies because the linked directory contains unmanaged entries: ${unmanagedEntries.join(', ')}`);
193
+ }
194
+ await unlink(skillsRoot);
195
+ await ensureDir(skillsRoot);
196
+ return;
197
+ }
198
+ if (!rootStat.isDirectory())
199
+ return;
200
+ for (const entry of managedEntries) {
201
+ const entryPath = path.join(skillsRoot, entry);
202
+ const entryStat = await lstatOrNull(entryPath);
203
+ if (entryStat?.isSymbolicLink()) {
204
+ await unlink(entryPath);
205
+ }
206
+ }
207
+ }
208
+ async function prepareNativeSkillInstallTarget(baseDir, platform, scope, languageSkillsDir, action) {
209
+ if (action !== 'skip') {
210
+ await prepareManagedSkillCopyTarget(baseDir, platform, scope, 'native');
211
+ }
212
+ if (action === 'overwrite')
213
+ return;
214
+ const skillsRoot = path.join(baseDir, getPlatformSkillsDir(platform, scope), 'skills');
215
+ const assetsDir = getAssetsDir();
216
+ const manifest = await readManifest();
217
+ const requiredFiles = getManagedSkillPaths(manifest)
218
+ .filter((relativePath) => relativePath === 'comet/SKILL.md' ||
219
+ relativePath === 'comet/scripts/comet-entry-runtime.mjs' ||
220
+ relativePath === 'comet/scripts/comet-hook-router.mjs' ||
221
+ relativePath.startsWith('comet-any/') ||
222
+ relativePath.startsWith('comet-native/'))
223
+ .map((relativePath) => {
224
+ const pathParts = relativePath.split('/');
225
+ const sourceDir = relativePath.includes('/scripts/') ? 'skills' : languageSkillsDir;
226
+ return {
227
+ label: `the required Native asset ${relativePath}`,
228
+ destination: path.join(skillsRoot, ...pathParts),
229
+ source: path.join(assetsDir, sourceDir, ...pathParts),
230
+ };
231
+ });
232
+ for (const required of requiredFiles) {
233
+ const destinationStat = await lstatOrNull(required.destination);
234
+ if (!destinationStat) {
235
+ if (action === 'fill')
236
+ continue;
237
+ throw new Error(`Cannot activate Native while skipping existing Comet files because ${required.label} is missing at ${required.destination}`);
238
+ }
239
+ if (!destinationStat.isFile()) {
240
+ 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`);
241
+ }
242
+ const [installed, bundled] = await Promise.all([
243
+ readFile(required.destination),
244
+ readFile(required.source),
245
+ ]);
246
+ if (!installed.equals(bundled)) {
247
+ 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`);
248
+ }
249
+ }
250
+ }
146
251
  async function createSkillsSymlinks(targetRoot, linkRoot, managedEntries, topLevelEntries) {
147
252
  const rootStat = await lstatOrNull(linkRoot);
148
253
  if (!rootStat || rootStat.isSymbolicLink() || !rootStat.isDirectory()) {
@@ -169,7 +274,7 @@ async function createSkillsSymlinks(targetRoot, linkRoot, managedEntries, topLev
169
274
  * 1. Copy skills to central store (.comet/skills/)
170
275
  * 2. Create symlinks from the platform skills dir to central store
171
276
  */
172
- async function installSkillsAsSymlink(baseDir, platform, overwrite, languageSkillsDir = 'skills', scope = 'project') {
277
+ async function installSkillsAsSymlink(baseDir, platform, overwrite, languageSkillsDir = 'skills', scope = 'project', workflowSelection = 'both') {
173
278
  const centralDir = getCentralSkillsDir(baseDir, scope);
174
279
  const assetsDir = getAssetsDir();
175
280
  const manifestPath = path.join(assetsDir, 'manifest.json');
@@ -180,13 +285,15 @@ async function installSkillsAsSymlink(baseDir, platform, overwrite, languageSkil
180
285
  if (!manifest || !Array.isArray(manifest.skills)) {
181
286
  throw new Error(`Invalid manifest at ${manifestPath}: "skills" must be an array`);
182
287
  }
183
- const managedSkillReplacementPaths = getManagedSkillReplacementPaths(manifest);
184
- const managedSkillTopLevelEntries = getManagedSkillTopLevelEntries(manifest);
288
+ const managedSkillPaths = getManagedSkillPathsForSelection(manifest, workflowSelection);
289
+ const userFacingSkillPaths = getUserFacingSkillPathsForSelection(manifest, workflowSelection);
290
+ const managedSkillReplacementPaths = getManagedSkillReplacementPaths(manifest, workflowSelection);
291
+ const managedSkillTopLevelEntries = getManagedSkillTopLevelEntries(manifest, workflowSelection);
185
292
  // Step 1: Copy skills to central store
186
293
  let copied = 0;
187
294
  let skippedCount = 0;
188
295
  let failedCount = 0;
189
- for (const skillRelPath of getManagedSkillPaths(manifest)) {
296
+ for (const skillRelPath of managedSkillPaths) {
190
297
  const isScript = skillRelPath.includes('/scripts/');
191
298
  const sourceDir = isScript ? 'skills' : languageSkillsDir;
192
299
  const src = path.join(assetsDir, sourceDir, skillRelPath);
@@ -216,23 +323,23 @@ async function installSkillsAsSymlink(baseDir, platform, overwrite, languageSkil
216
323
  }
217
324
  // Handle OpenCode-style platform commands (still need copy, as command content may differ)
218
325
  if (OPENCODE_STYLE_PLATFORM_IDS.has(platform.id)) {
219
- const result = await createOpenCodeCommands(baseDir, platform, manifest.skills, overwrite, scope, languageSkillsDir);
326
+ const result = await createOpenCodeCommands(baseDir, platform, userFacingSkillPaths, overwrite, scope, languageSkillsDir);
220
327
  copied += result.copied;
221
328
  skippedCount += result.skipped;
222
329
  failedCount += result.failed;
223
330
  }
224
331
  // Handle Pi platform command extension
225
332
  if (platform.id === 'pi') {
226
- const result = await createPiCommandExtension(baseDir, platform, manifest.skills, overwrite, scope);
333
+ const result = await createPiCommandExtension(baseDir, platform, userFacingSkillPaths, overwrite, scope);
227
334
  copied += result.copied;
228
335
  skippedCount += result.skipped;
229
336
  failedCount += result.failed;
230
337
  }
231
338
  return { copied, skipped: skippedCount, failed: failedCount };
232
339
  }
233
- async function copyCometSkillsForPlatform(baseDir, platform, overwrite, languageSkillsDir = 'skills', scope = 'project', installMode = 'copy') {
340
+ async function copyCometSkillsForPlatform(baseDir, platform, overwrite, languageSkillsDir = 'skills', scope = 'project', installMode = 'copy', workflowSelection = 'both') {
234
341
  if (installMode === 'symlink') {
235
- return installSkillsAsSymlink(baseDir, platform, overwrite, languageSkillsDir, scope);
342
+ return installSkillsAsSymlink(baseDir, platform, overwrite, languageSkillsDir, scope, workflowSelection);
236
343
  }
237
344
  const assetsDir = getAssetsDir();
238
345
  const manifestPath = path.join(assetsDir, 'manifest.json');
@@ -246,7 +353,9 @@ async function copyCometSkillsForPlatform(baseDir, platform, overwrite, language
246
353
  let copied = 0;
247
354
  let skippedCount = 0;
248
355
  let failedCount = 0;
249
- for (const skillRelPath of getManagedSkillPaths(manifest)) {
356
+ const managedSkillPaths = getManagedSkillPathsForSelection(manifest, workflowSelection);
357
+ const userFacingSkillPaths = getUserFacingSkillPathsForSelection(manifest, workflowSelection);
358
+ for (const skillRelPath of managedSkillPaths) {
250
359
  const isScript = skillRelPath.includes('/scripts/');
251
360
  const sourceDir = isScript ? 'skills' : languageSkillsDir;
252
361
  const src = path.join(assetsDir, sourceDir, skillRelPath);
@@ -269,13 +378,13 @@ async function copyCometSkillsForPlatform(baseDir, platform, overwrite, language
269
378
  }
270
379
  }
271
380
  if (OPENCODE_STYLE_PLATFORM_IDS.has(platform.id)) {
272
- const result = await createOpenCodeCommands(baseDir, platform, manifest.skills, overwrite, scope, languageSkillsDir);
381
+ const result = await createOpenCodeCommands(baseDir, platform, userFacingSkillPaths, overwrite, scope, languageSkillsDir);
273
382
  copied += result.copied;
274
383
  skippedCount += result.skipped;
275
384
  failedCount += result.failed;
276
385
  }
277
386
  if (platform.id === 'pi') {
278
- const result = await createPiCommandExtension(baseDir, platform, manifest.skills, overwrite, scope);
387
+ const result = await createPiCommandExtension(baseDir, platform, userFacingSkillPaths, overwrite, scope);
279
388
  copied += result.copied;
280
389
  skippedCount += result.skipped;
281
390
  failedCount += result.failed;
@@ -410,9 +519,9 @@ async function readManifest() {
410
519
  const manifestPath = path.join(assetsDir, 'manifest.json');
411
520
  return readJson(manifestPath);
412
521
  }
413
- async function getManifestSkills() {
522
+ async function getManifestSkills(workflowSelection = 'both') {
414
523
  const manifest = await readManifest();
415
- return getManagedSkillPaths(manifest);
524
+ return getManagedSkillPathsForSelection(manifest, workflowSelection);
416
525
  }
417
526
  /**
418
527
  * Copy Comet rule files to a platform's rules directory.
@@ -448,12 +557,21 @@ function selectRulePathsForLanguage(rulePaths, languageId) {
448
557
  }
449
558
  return [...selected.values()].map((entry) => entry.rulePath);
450
559
  }
451
- async function copyCometRulesForPlatform(baseDir, platform, overwrite, languageId, scope = 'project') {
560
+ function managedRulesForSelection(manifest, _selection) {
561
+ return manifest.rules ?? [];
562
+ }
563
+ function managedHooksForSelection(manifest, _selection) {
564
+ return manifest.hooks ?? {};
565
+ }
566
+ function managedHookScriptPaths(hooksConfig) {
567
+ return [...new Set([...Object.keys(hooksConfig), ...LEGACY_HOOK_SCRIPTS])];
568
+ }
569
+ async function copyCometRulesForPlatform(baseDir, platform, overwrite, languageId, scope = 'project', workflowSelection = 'classic') {
452
570
  if (!platform.rulesDir || !platform.rulesFormat) {
453
571
  return { copied: 0, skipped: 0, failed: 0 };
454
572
  }
455
573
  const manifest = await readManifest();
456
- const rulePaths = selectRulePathsForLanguage(manifest.rules ?? [], languageId);
574
+ const rulePaths = selectRulePathsForLanguage(managedRulesForSelection(manifest, workflowSelection), languageId);
457
575
  if (!rulePaths || rulePaths.length === 0) {
458
576
  return { copied: 0, skipped: 0, failed: 0 };
459
577
  }
@@ -496,6 +614,20 @@ async function copyCometRulesForPlatform(baseDir, platform, overwrite, languageI
496
614
  failed++;
497
615
  }
498
616
  }
617
+ const rulesDestDir = path.join(rulesBase, platform.rulesDir);
618
+ for (const legacyFile of LEGACY_RULE_FILES) {
619
+ const legacyPath = computeRuleDestPath(rulesDestDir, legacyFile, platform.rulesFormat);
620
+ try {
621
+ await rm(legacyPath, { force: true });
622
+ }
623
+ catch (error) {
624
+ const code = error.code;
625
+ if (code === 'ENOENT' || code === 'ENOTDIR')
626
+ continue;
627
+ console.error(` Failed to remove legacy Rule ${legacyPath}: ${error.message}`);
628
+ failed++;
629
+ }
630
+ }
499
631
  return { copied, skipped: skippedCount, failed };
500
632
  }
501
633
  function computeRuleDestPath(rulesDestDir, ruleFileName, rulesFormat) {
@@ -543,7 +675,7 @@ ${content}`;
543
675
  * 'copilot' — hooks/*.json with preToolUse
544
676
  * 'kiro' — hooks/*.kiro.hook JSON files
545
677
  */
546
- async function installCometHooksForPlatform(baseDir, platform, scope = 'project') {
678
+ async function installCometHooksForPlatform(baseDir, platform, scope = 'project', workflowSelection = 'classic') {
547
679
  if (!platform.supportsHooks) {
548
680
  return { status: 'skipped', reason: 'platform does not support hooks' };
549
681
  }
@@ -555,7 +687,7 @@ async function installCometHooksForPlatform(baseDir, platform, scope = 'project'
555
687
  }
556
688
  try {
557
689
  const manifest = await readManifest();
558
- const hooksConfig = manifest.hooks;
690
+ const hooksConfig = managedHooksForSelection(manifest, workflowSelection);
559
691
  if (!hooksConfig || Object.keys(hooksConfig).length === 0) {
560
692
  return { status: 'skipped', reason: 'no hooks defined in manifest' };
561
693
  }
@@ -564,31 +696,47 @@ async function installCometHooksForPlatform(baseDir, platform, scope = 'project'
564
696
  const platformBase = path.join(baseDir, getPlatformConfigDir(platform, scope));
565
697
  switch (hookFormat) {
566
698
  case 'claude-code': {
567
- const result = await installClaudeCodeHooks(baseDir, platformBase, skillsDir, hooksConfig, platform.hookConfigFile ?? 'settings.local.json', platform.name);
699
+ const result = await installClaudeCodeHooks(baseDir, platformBase, skillsDir, hooksConfig, platform.hookConfigFile ?? 'settings.local.json', platform.name, { platformId: platform.id, scope });
568
700
  if (result.status === 'installed') {
701
+ const failedLegacyFiles = [];
569
702
  for (const legacyFile of platform.legacyHookConfigFiles ?? []) {
570
703
  try {
571
- await removeManagedHooksFromJsonFile(path.join(platformBase, legacyFile), Object.keys(hooksConfig));
704
+ const cleanup = await removeManagedHooksFromJsonFile(path.join(platformBase, legacyFile), managedHookScriptPaths(hooksConfig));
705
+ if (cleanup.failed > 0)
706
+ failedLegacyFiles.push(legacyFile);
572
707
  }
573
708
  catch {
574
- // Historical Hook cleanup is best-effort after canonical install succeeds.
709
+ failedLegacyFiles.push(legacyFile);
575
710
  }
576
711
  }
712
+ if (failedLegacyFiles.length > 0) {
713
+ return {
714
+ status: 'installed',
715
+ reason: `legacy Hook cleanup failed for ${failedLegacyFiles.join(', ')}`,
716
+ cleanupFailed: failedLegacyFiles.length,
717
+ };
718
+ }
577
719
  }
578
720
  return result;
579
721
  }
580
722
  case 'qwen':
581
723
  case 'qoder':
582
724
  case 'codebuddy':
583
- return await installQwenStyleHooks(baseDir, platformBase, skillsDir, hooksConfig, platform.name);
725
+ return await installQwenStyleHooks(baseDir, platformBase, skillsDir, hooksConfig, platform.name, { platformId: platform.id, scope });
584
726
  case 'gemini':
585
- return await installGeminiHooks(baseDir, platformBase, skillsDir, hooksConfig, platform.name);
727
+ return await installGeminiHooks(baseDir, platformBase, skillsDir, hooksConfig, platform.name, { platformId: platform.id, scope });
586
728
  case 'windsurf':
587
- return await installWindsurfHooks(baseDir, platformBase, skillsDir, hooksConfig, platform.name);
729
+ return await installWindsurfHooks(baseDir, platformBase, skillsDir, hooksConfig, platform.name, { platformId: platform.id, scope });
588
730
  case 'copilot':
589
- return await installCopilotHooks(baseDir, platformBase, skillsDir, hooksConfig);
731
+ return await installCopilotHooks(baseDir, platformBase, skillsDir, hooksConfig, {
732
+ platformId: platform.id,
733
+ scope,
734
+ });
590
735
  case 'kiro':
591
- return await installKiroHooks(baseDir, platformBase, skillsDir, hooksConfig);
736
+ return await installKiroHooks(baseDir, platformBase, skillsDir, hooksConfig, {
737
+ platformId: platform.id,
738
+ scope,
739
+ });
592
740
  default:
593
741
  return { status: 'failed', reason: `unsupported hook format: ${hookFormat}` };
594
742
  }
@@ -601,10 +749,18 @@ function quoteCommandArg(value) {
601
749
  return `"${value.replaceAll('\\', '/').replaceAll('"', '\\"')}"`;
602
750
  }
603
751
  /** Build a hook command that is stable even when the hook runner executes from a subdirectory. */
604
- function buildHookCommand(baseDir, skillsDir, scriptRelPath) {
752
+ function buildHookCommand(baseDir, skillsDir, scriptRelPath, context) {
605
753
  const projectRoot = path.resolve(baseDir);
606
754
  const scriptPath = path.join(projectRoot, skillsDir, 'skills', ...scriptRelPath.split('/'));
607
- return `node ${quoteCommandArg(scriptPath)} --project-root ${quoteCommandArg(projectRoot)}`;
755
+ let command = `node ${quoteCommandArg(scriptPath)}`;
756
+ if (scriptRelPath === HOOK_ROUTER_SCRIPT && context) {
757
+ command += ` --platform ${quoteCommandArg(context.platformId)}`;
758
+ if (context.scope === 'project') {
759
+ command += ` --project-root ${quoteCommandArg(projectRoot)}`;
760
+ }
761
+ return command;
762
+ }
763
+ return `${command} --project-root ${quoteCommandArg(projectRoot)}`;
608
764
  }
609
765
  function parseCommandTokens(command) {
610
766
  const tokens = [];
@@ -780,12 +936,12 @@ async function readSettingsJsonObject(settingsPath, platformName) {
780
936
  * Claude-shaped JSON format used by Claude Code, Codex, and Amazon Q.
781
937
  * Defaults to settings.local.json; platform metadata may override the filename.
782
938
  */
783
- async function installClaudeCodeHooks(baseDir, platformBase, skillsDir, hooksConfig, configFile, platformName) {
939
+ async function installClaudeCodeHooks(baseDir, platformBase, skillsDir, hooksConfig, configFile, platformName, context) {
784
940
  const settingsPath = path.join(platformBase, configFile);
785
941
  // Group by matcher so hooks sharing the same matcher are merged
786
942
  const matcherGroups = {};
787
943
  for (const [scriptRelPath, config] of Object.entries(hooksConfig)) {
788
- const command = buildHookCommand(baseDir, skillsDir, scriptRelPath);
944
+ const command = buildHookCommand(baseDir, skillsDir, scriptRelPath, context);
789
945
  if (!matcherGroups[config.matcher]) {
790
946
  matcherGroups[config.matcher] = [];
791
947
  }
@@ -795,7 +951,7 @@ async function installClaudeCodeHooks(baseDir, platformBase, skillsDir, hooksCon
795
951
  const settings = await readSettingsJsonObject(settingsPath, platformName);
796
952
  const existingHooks = settings.hooks ?? {};
797
953
  const existingPreToolUse = asHookGroup(existingHooks.PreToolUse);
798
- const merged = mergeHookGroups(existingPreToolUse, newEntries, Object.keys(hooksConfig));
954
+ const merged = mergeHookGroups(existingPreToolUse, newEntries, managedHookScriptPaths(hooksConfig));
799
955
  settings.hooks = { ...existingHooks, PreToolUse: merged };
800
956
  await ensureDir(path.dirname(settingsPath));
801
957
  await writeFile(settingsPath, JSON.stringify(settings, null, 2) + '\n', 'utf-8');
@@ -805,7 +961,7 @@ async function installClaudeCodeHooks(baseDir, platformBase, skillsDir, hooksCon
805
961
  * Qwen Code / Qoder / CodeBuddy format:
806
962
  * Writes to settings.json with { hooks: { PreToolUse: [{ matcher, hooks: [{ type, command }] }] } }
807
963
  */
808
- async function installQwenStyleHooks(baseDir, platformBase, skillsDir, hooksConfig, platformName) {
964
+ async function installQwenStyleHooks(baseDir, platformBase, skillsDir, hooksConfig, platformName, context) {
809
965
  const settingsPath = path.join(platformBase, 'settings.json');
810
966
  // Group by matcher
811
967
  const matcherGroups = {};
@@ -815,7 +971,7 @@ async function installQwenStyleHooks(baseDir, platformBase, skillsDir, hooksConf
815
971
  }
816
972
  matcherGroups[config.matcher].push({
817
973
  type: 'command',
818
- command: buildHookCommand(baseDir, skillsDir, scriptRelPath),
974
+ command: buildHookCommand(baseDir, skillsDir, scriptRelPath, context),
819
975
  description: config.description,
820
976
  });
821
977
  }
@@ -826,7 +982,7 @@ async function installQwenStyleHooks(baseDir, platformBase, skillsDir, hooksConf
826
982
  const settings = await readSettingsJsonObject(settingsPath, platformName);
827
983
  const existingHooks = settings.hooks ?? {};
828
984
  const existingPreToolUse = asHookGroup(existingHooks.PreToolUse);
829
- const merged = mergeHookGroups(existingPreToolUse, preToolUseEntries, Object.keys(hooksConfig));
985
+ const merged = mergeHookGroups(existingPreToolUse, preToolUseEntries, managedHookScriptPaths(hooksConfig));
830
986
  settings.hooks = { ...existingHooks, PreToolUse: merged };
831
987
  await ensureDir(path.dirname(settingsPath));
832
988
  await writeFile(settingsPath, JSON.stringify(settings, null, 2) + '\n', 'utf-8');
@@ -836,7 +992,7 @@ async function installQwenStyleHooks(baseDir, platformBase, skillsDir, hooksConf
836
992
  * Gemini CLI format:
837
993
  * Writes to .gemini/settings.json with { hooks: { BeforeTool: [{ matcher, hooks: [{ type, command }] }] } }
838
994
  */
839
- async function installGeminiHooks(baseDir, platformBase, skillsDir, hooksConfig, platformName) {
995
+ async function installGeminiHooks(baseDir, platformBase, skillsDir, hooksConfig, platformName, context) {
840
996
  const settingsPath = path.join(platformBase, 'settings.json');
841
997
  const entries = [];
842
998
  for (const [scriptRelPath, config] of Object.entries(hooksConfig)) {
@@ -845,7 +1001,7 @@ async function installGeminiHooks(baseDir, platformBase, skillsDir, hooksConfig,
845
1001
  hooks: [
846
1002
  {
847
1003
  type: 'command',
848
- command: buildHookCommand(baseDir, skillsDir, scriptRelPath),
1004
+ command: buildHookCommand(baseDir, skillsDir, scriptRelPath, context),
849
1005
  name: config.description,
850
1006
  },
851
1007
  ],
@@ -854,7 +1010,7 @@ async function installGeminiHooks(baseDir, platformBase, skillsDir, hooksConfig,
854
1010
  const settings = await readSettingsJsonObject(settingsPath, platformName);
855
1011
  const existingHooks = settings.hooks ?? {};
856
1012
  const existingBeforeTool = asHookGroup(existingHooks.BeforeTool);
857
- const merged = mergeHookGroups(existingBeforeTool, entries, Object.keys(hooksConfig));
1013
+ const merged = mergeHookGroups(existingBeforeTool, entries, managedHookScriptPaths(hooksConfig));
858
1014
  settings.hooks = { ...existingHooks, BeforeTool: merged };
859
1015
  await ensureDir(path.dirname(settingsPath));
860
1016
  await writeFile(settingsPath, JSON.stringify(settings, null, 2) + '\n', 'utf-8');
@@ -864,12 +1020,12 @@ async function installGeminiHooks(baseDir, platformBase, skillsDir, hooksConfig,
864
1020
  * Windsurf format:
865
1021
  * Writes to .windsurf/hooks.json with { hooks: { pre_write_code: [{ command }] } }
866
1022
  */
867
- async function installWindsurfHooks(baseDir, platformBase, skillsDir, hooksConfig, platformName) {
1023
+ async function installWindsurfHooks(baseDir, platformBase, skillsDir, hooksConfig, platformName, context) {
868
1024
  const hooksPath = path.join(platformBase, 'hooks.json');
869
1025
  const entries = [];
870
1026
  for (const [scriptRelPath] of Object.entries(hooksConfig)) {
871
1027
  entries.push({
872
- command: buildHookCommand(baseDir, skillsDir, scriptRelPath),
1028
+ command: buildHookCommand(baseDir, skillsDir, scriptRelPath, context),
873
1029
  show_output: true,
874
1030
  });
875
1031
  }
@@ -878,7 +1034,7 @@ async function installWindsurfHooks(baseDir, platformBase, skillsDir, hooksConfi
878
1034
  const existingPreWrite = asHookGroup(existingHooks.pre_write_code);
879
1035
  const merged = existingPreWrite.filter((entry) => {
880
1036
  const command = entry && typeof entry === 'object' ? entry.command : undefined;
881
- return !isManagedHookCommand(command, Object.keys(hooksConfig));
1037
+ return !isManagedHookCommand(command, managedHookScriptPaths(hooksConfig));
882
1038
  });
883
1039
  merged.push(...entries);
884
1040
  hooksFile.hooks = { ...existingHooks, pre_write_code: merged };
@@ -890,14 +1046,17 @@ async function installWindsurfHooks(baseDir, platformBase, skillsDir, hooksConfi
890
1046
  * GitHub Copilot format:
891
1047
  * Writes to .github/hooks/comet-guard.json with preToolUse hooks config.
892
1048
  */
893
- async function installCopilotHooks(baseDir, platformBase, skillsDir, hooksConfig) {
1049
+ async function installCopilotHooks(baseDir, platformBase, skillsDir, hooksConfig, context) {
894
1050
  const hooksDir = path.join(platformBase, 'hooks');
895
1051
  const hookFilePath = path.join(hooksDir, 'comet-guard.json');
896
1052
  const scriptEntries = [];
897
- for (const [scriptRelPath] of Object.entries(hooksConfig)) {
898
- const cmd = buildHookCommand(baseDir, skillsDir, scriptRelPath);
1053
+ for (const [scriptRelPath, config] of Object.entries(hooksConfig)) {
1054
+ const cmd = buildHookCommand(baseDir, skillsDir, scriptRelPath, context);
1055
+ const matcher = config.matcher === 'Write|Edit'
1056
+ ? 'create|edit|str_replace_editor|apply_patch'
1057
+ : config.matcher;
899
1058
  // Hook runs through node on every platform; both fields use the same command
900
- scriptEntries.push({ bash: cmd, powershell: cmd });
1059
+ scriptEntries.push({ matcher, bash: cmd, powershell: cmd });
901
1060
  }
902
1061
  const hookConfig = {
903
1062
  version: 1,
@@ -913,7 +1072,7 @@ async function installCopilotHooks(baseDir, platformBase, skillsDir, hooksConfig
913
1072
  * Kiro format:
914
1073
  * Writes to .kiro/hooks/comet-phase-guard.kiro.hook as a JSON file.
915
1074
  */
916
- async function installKiroHooks(baseDir, platformBase, skillsDir, hooksConfig) {
1075
+ async function installKiroHooks(baseDir, platformBase, skillsDir, hooksConfig, context) {
917
1076
  const hooksDir = path.join(platformBase, 'hooks');
918
1077
  for (const [scriptRelPath, config] of Object.entries(hooksConfig)) {
919
1078
  const hookFileName = path.basename(scriptRelPath).replace(/\.mjs$/, '.kiro.hook');
@@ -931,26 +1090,58 @@ async function installKiroHooks(baseDir, platformBase, skillsDir, hooksConfig) {
931
1090
  },
932
1091
  then: {
933
1092
  type: 'runCommand',
934
- command: buildHookCommand(baseDir, skillsDir, scriptRelPath),
1093
+ command: buildHookCommand(baseDir, skillsDir, scriptRelPath, context),
935
1094
  },
936
1095
  };
937
1096
  await ensureDir(hooksDir);
938
1097
  await writeFile(hookFilePath, JSON.stringify(hookConfig, null, 2) + '\n', 'utf-8');
939
1098
  }
1099
+ for (const legacyScript of LEGACY_HOOK_SCRIPTS) {
1100
+ const legacyFile = path.join(hooksDir, path.basename(legacyScript).replace(/\.mjs$/u, '.kiro.hook'));
1101
+ await rm(legacyFile, { force: true });
1102
+ }
940
1103
  return { status: 'installed' };
941
1104
  }
942
1105
  function managedConfigFields(language = 'en') {
943
1106
  const artifactLanguage = resolveArtifactLanguage(language);
944
- return [
1107
+ const commentLanguage = artifactLanguage.id === 'zh-CN' ? 'zh-CN' : 'en';
1108
+ const top = [
1109
+ {
1110
+ key: 'ambient_resume',
1111
+ def: 'true',
1112
+ comment: projectConfigComment('ambient_resume', commentLanguage),
1113
+ },
1114
+ ];
1115
+ const classic = [
945
1116
  {
946
1117
  key: 'language',
947
1118
  def: artifactLanguage.id,
948
- comment: `# language: ${formatSupportedArtifactLanguages()}`,
1119
+ comment: projectConfigComment('classic.language', commentLanguage),
1120
+ },
1121
+ {
1122
+ key: 'context_compression',
1123
+ def: 'off',
1124
+ comment: projectConfigComment('classic.context_compression', commentLanguage),
1125
+ },
1126
+ {
1127
+ key: 'review_mode',
1128
+ def: 'standard',
1129
+ comment: projectConfigComment('classic.review_mode', commentLanguage),
1130
+ },
1131
+ {
1132
+ key: 'auto_transition',
1133
+ def: 'true',
1134
+ comment: projectConfigComment('classic.auto_transition', commentLanguage),
949
1135
  },
950
- { key: 'context_compression', def: 'off', comment: '# context_compression: off | beta' },
951
- { key: 'review_mode', def: 'standard', comment: '# review_mode: off | standard | thorough' },
952
- { key: 'auto_transition', def: 'true', comment: '# auto_transition: true | false' },
953
1136
  ];
1137
+ const native = [
1138
+ {
1139
+ key: 'clarification_mode',
1140
+ def: 'sequential',
1141
+ comment: projectConfigComment('native.clarification_mode', commentLanguage),
1142
+ },
1143
+ ];
1144
+ return { top, native, classic };
954
1145
  }
955
1146
  const MANAGED_CONFIG_FIELDS = managedConfigFields();
956
1147
  function getManagedConfigFields(language = 'en') {
@@ -975,36 +1166,112 @@ function parseProjectConfigOverrides(content) {
975
1166
  }
976
1167
  return out;
977
1168
  }
1169
+ // Coerce the string forms captured by `parseProjectConfigOverrides` back into YAML scalars
1170
+ // so booleans render as bare true/false rather than quoted strings.
1171
+ function coerceConfigScalar(raw) {
1172
+ if (raw === 'true')
1173
+ return true;
1174
+ if (raw === 'false')
1175
+ return false;
1176
+ return raw;
1177
+ }
978
1178
  // `language` is null when the caller has no definitive language selection to assert (e.g.
979
1179
  // multiple platforms in the same scope disagree and no --language flag was given) — in that
980
1180
  // case the existing config's language is preserved, falling back to 'en' only when absent.
981
- // A non-null language always overwrites the managed `language` field: init/update pass it
982
- // specifically to persist the language the user just selected/installed.
1181
+ // A non-null language always overwrites the managed `classic.language` field: init/update
1182
+ // pass it specifically to persist the language the user just selected/installed.
983
1183
  function renderProjectConfig(existing, language = null) {
984
1184
  const resolvedLanguage = language ?? existing.language ?? 'en';
985
- const lines = [];
986
1185
  const fields = getManagedConfigFields(resolvedLanguage);
987
- const managed = new Set(fields.map((f) => f.key));
988
- for (const f of fields) {
989
- lines.push(f.comment);
990
- const value = f.key === 'language' ? resolvedLanguage : (existing[f.key] ?? f.def);
991
- lines.push(`${f.key}: ${value}`);
1186
+ const managedKeys = new Set([
1187
+ ...fields.top.map((f) => f.key),
1188
+ ...fields.classic.map((f) => f.key),
1189
+ ]);
1190
+ const root = {};
1191
+ for (const f of fields.top) {
1192
+ root[f.key] = coerceConfigScalar(existing[f.key] ?? f.def);
992
1193
  }
993
1194
  for (const [k, v] of Object.entries(existing)) {
994
- if (!managed.has(k))
995
- lines.push(`${k}: ${v}`);
1195
+ if (!managedKeys.has(k))
1196
+ root[k] = coerceConfigScalar(v);
1197
+ }
1198
+ const classicBlock = {};
1199
+ for (const f of fields.classic) {
1200
+ const value = f.key === 'language' ? resolvedLanguage : (existing[f.key] ?? f.def);
1201
+ classicBlock[f.key] = coerceConfigScalar(value);
996
1202
  }
997
- lines.push('');
998
- return lines.join('\n');
1203
+ root.classic = classicBlock;
1204
+ return renderStructuredProjectConfig(root, resolvedLanguage === 'zh-CN' ? 'zh-CN' : 'en');
999
1205
  }
1000
1206
  async function mergeProjectConfig(projectPath, language = null) {
1001
1207
  const configPath = path.join(projectPath, '.comet', 'config.yaml');
1002
1208
  let existing = {};
1209
+ let existingSource = '';
1003
1210
  if (await fileExists(configPath)) {
1004
- existing = parseProjectConfigOverrides(await readFile(configPath, 'utf-8'));
1211
+ existingSource = await readFile(configPath, 'utf-8');
1212
+ existing = parseProjectConfigOverrides(existingSource);
1005
1213
  }
1006
1214
  await ensureDir(path.dirname(configPath));
1007
- await writeFile(configPath, renderProjectConfig(existing, language), 'utf-8');
1215
+ // Preserve the full parsed structure (e.g. the `native:` block) plus any legacy top-level
1216
+ // Classic fields pending migration. Falling back to an empty mapping keeps this idempotent
1217
+ // for a missing or unparseable config.
1218
+ const document = parseDocument(existingSource, { uniqueKeys: false });
1219
+ const parsedRoot = document.errors.length === 0 ? document.toJS() : null;
1220
+ const root = parsedRoot && typeof parsedRoot === 'object' && !Array.isArray(parsedRoot)
1221
+ ? { ...parsedRoot }
1222
+ : {};
1223
+ const prevClassic = root.classic && typeof root.classic === 'object' && !Array.isArray(root.classic)
1224
+ ? { ...root.classic }
1225
+ : {};
1226
+ const prevNative = root.native && typeof root.native === 'object' && !Array.isArray(root.native)
1227
+ ? { ...root.native }
1228
+ : null;
1229
+ const existingClassicLanguage = typeof prevClassic.language === 'string' ? prevClassic.language : undefined;
1230
+ const resolvedLanguage = language ?? existingClassicLanguage ?? existing.language ?? 'en';
1231
+ const fields = getManagedConfigFields(resolvedLanguage);
1232
+ // Top-level managed field (ambient_resume).
1233
+ for (const f of fields.top) {
1234
+ root[f.key] = coerceConfigScalar(existing[f.key] ?? f.def);
1235
+ }
1236
+ // Native settings are managed only when the project already has a Native block. This lets
1237
+ // update add new Native defaults without activating Native in Classic-only installations.
1238
+ if (prevNative) {
1239
+ const nativeBlock = { ...prevNative };
1240
+ for (const f of fields.native) {
1241
+ const value = nativeBlock[f.key] ?? f.def;
1242
+ if (f.key === 'clarification_mode' && value !== 'sequential' && value !== 'batch') {
1243
+ throw new Error('native.clarification_mode must be sequential or batch');
1244
+ }
1245
+ nativeBlock[f.key] = coerceConfigScalar(value);
1246
+ }
1247
+ root.native = nativeBlock;
1248
+ }
1249
+ // Classic block: preserve explicit new-format values, then migrate legacy top-level values,
1250
+ // then apply defaults. An explicit language argument still represents the caller's requested
1251
+ // install/update language and therefore overrides both stored forms.
1252
+ const classicBlock = {};
1253
+ for (const f of fields.classic) {
1254
+ let value;
1255
+ if (f.key === 'language') {
1256
+ value = resolvedLanguage;
1257
+ }
1258
+ else {
1259
+ const legacyTop = root[f.key];
1260
+ if (prevClassic[f.key] !== undefined)
1261
+ value = prevClassic[f.key];
1262
+ else if (legacyTop !== undefined)
1263
+ value = legacyTop;
1264
+ else
1265
+ value = f.def;
1266
+ }
1267
+ classicBlock[f.key] = coerceConfigScalar(value);
1268
+ }
1269
+ // Remove migrated legacy top-level Classic fields so they don't linger at the root.
1270
+ for (const f of fields.classic) {
1271
+ delete root[f.key];
1272
+ }
1273
+ root.classic = classicBlock;
1274
+ await writeFile(configPath, renderStructuredProjectConfig(root, resolvedLanguage === 'zh-CN' ? 'zh-CN' : 'en'), 'utf-8');
1008
1275
  }
1009
1276
  async function createWorkingDirs(projectPath, language = 'en') {
1010
1277
  const dirs = [
@@ -1018,5 +1285,5 @@ async function createWorkingDirs(projectPath, language = 'en') {
1018
1285
  await mergeProjectConfig(projectPath, language);
1019
1286
  await installCometProjectInstructions(projectPath, language === 'zh-CN' ? 'zh' : 'en');
1020
1287
  }
1021
- export { copyCometSkillsForPlatform, copyCometRulesForPlatform, installCometHooksForPlatform, readManifest, getManagedSkillPaths, getManifestSkills, getUserFacingSkillNames, createWorkingDirs, getAssetsDir, computeRuleDestPath, formatRuleContent, isManagedHookCommand, buildHookCommand, removeManagedHooksFromJsonFile, planSkillDirectoryCopy, mergeProjectConfig, parseProjectConfigOverrides, renderProjectConfig, getCentralSkillsDir, installSkillsAsSymlink, };
1288
+ export { copyCometSkillsForPlatform, copyCometRulesForPlatform, installCometHooksForPlatform, readManifest, getManagedSkillPaths, getManagedSkillPathsForSelection, getManifestSkills, getUserFacingSkillNames, createWorkingDirs, getAssetsDir, computeRuleDestPath, formatRuleContent, isManagedHookCommand, buildHookCommand, removeManagedHooksFromJsonFile, planSkillDirectoryCopy, mergeProjectConfig, parseProjectConfigOverrides, renderProjectConfig, getCentralSkillsDir, installSkillsAsSymlink, prepareManagedSkillCopyTarget, prepareNativeSkillInstallTarget, };
1022
1289
  //# sourceMappingURL=platform-install.js.map