@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
@@ -6,7 +6,7 @@ import { spawn } from 'child_process';
6
6
  import { select } from '@inquirer/prompts';
7
7
  import { fileExists, readJson } from '../../platform/fs/file-system.js';
8
8
  import { getBaseDir } from '../../platform/install/detect.js';
9
- import { copyCometSkillsForPlatform, copyCometRulesForPlatform, installCometHooksForPlatform, getManifestSkills, mergeProjectConfig, } from '../../domains/skill/platform-install.js';
9
+ import { copyCometSkillsForPlatform, copyCometRulesForPlatform, installCometHooksForPlatform, getManifestSkills, mergeProjectConfig, prepareManagedSkillCopyTarget, } from '../../domains/skill/platform-install.js';
10
10
  import { removeLegacyCometSkillsForPlatform } from '../../domains/skill/uninstall.js';
11
11
  import { installCometProjectInstructions } from '../../domains/skill/project-instructions.js';
12
12
  import { LANGUAGES } from '../../domains/skill/languages.js';
@@ -14,13 +14,34 @@ import { getPlatformSkillsDir, getPlatformSkillsDirs, } from '../../platform/ins
14
14
  import { resolveCanonicalSkillRootOwners } from '../../platform/install/skill-root-owner.js';
15
15
  import { listProjectRegistryEntries, removeProjectInstallation, upsertProjectInstallation, } from '../../platform/install/project-registry.js';
16
16
  import { hasCodegraphProjectIndex, installCodegraph, } from '../../domains/integrations/codegraph.js';
17
- import { printVersionInfo } from '../../platform/version/version.js';
17
+ import { discoverNativeProject } from '../../domains/comet-native/native-paths.js';
18
+ import { readProjectConfig } from '../../domains/comet-native/native-config.js';
19
+ import { resolveCometEntry } from '../../domains/comet-entry/resolve-entry.js';
20
+ import { migrateLegacyClassicSelection } from '../../domains/comet-entry/current-selection.js';
21
+ import { getLatestVersion, printVersionInfo } from '../../platform/version/version.js';
18
22
  import { t } from './i18n.js';
19
23
  import { assertProjectScopeOptions, resolveProjectScopeMode } from './project-scope-selection.js';
20
24
  const PACKAGE_NAME = '@rpamis/comet';
21
25
  const OFFICIAL_REGISTRY = 'https://registry.npmjs.org';
22
- function createNpmUpdateFailure(scope) {
23
- const error = new Error(`npm package update failed (${scope} scope)`);
26
+ const CANDIDATE_COMMAND_LIMITS = {
27
+ timeoutMs: 15_000,
28
+ maxOutputBytes: 256 * 1024,
29
+ };
30
+ const NPM_INSPECTION_LIMITS = {
31
+ timeoutMs: 15_000,
32
+ maxOutputBytes: 64 * 1024,
33
+ };
34
+ const CANDIDATE_INSTALL_LIMITS = {
35
+ timeoutMs: 3 * 60_000,
36
+ maxOutputBytes: 4 * 1024 * 1024,
37
+ };
38
+ const NPM_MUTATION_LIMITS = {
39
+ timeoutMs: 10 * 60_000,
40
+ maxOutputBytes: 8 * 1024 * 1024,
41
+ };
42
+ function createNpmUpdateFailure(scope, reason) {
43
+ const detail = reason ? `: ${reason}` : '';
44
+ const error = new Error(`npm package update failed (${scope} scope)${detail}`);
24
45
  error.npmScope = scope;
25
46
  return error;
26
47
  }
@@ -142,13 +163,84 @@ async function detectCometPackageScope(projectPath, packageRoot = path.resolve(p
142
163
  }
143
164
  return 'global';
144
165
  }
145
- function buildNpmUpdateArgs(scope) {
166
+ function buildNpmUpdateArgs(scope, version = 'latest') {
167
+ const packageSpec = `${PACKAGE_NAME}@${version}`;
146
168
  return scope === 'global'
147
- ? ['install', '-g', `${PACKAGE_NAME}@latest`, '--registry', OFFICIAL_REGISTRY]
148
- : ['install', `${PACKAGE_NAME}@latest`, '--registry', OFFICIAL_REGISTRY];
169
+ ? ['install', '-g', packageSpec, '--registry', OFFICIAL_REGISTRY]
170
+ : ['install', packageSpec, '--registry', OFFICIAL_REGISTRY];
149
171
  }
150
- function formatNpmUpdateCommand(scope) {
151
- return ['npm', ...buildNpmUpdateArgs(scope)].join(' ');
172
+ function formatNpmUpdateCommand(scope, version = 'latest') {
173
+ return ['npm', ...buildNpmUpdateArgs(scope, version)].join(' ');
174
+ }
175
+ function parseSemver(version) {
176
+ const match = /^v?(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?(?:\+[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?$/u.exec(version);
177
+ if (!match)
178
+ return null;
179
+ return {
180
+ major: Number(match[1]),
181
+ minor: Number(match[2]),
182
+ patch: Number(match[3]),
183
+ prerelease: match[4]?.split('.') ?? [],
184
+ };
185
+ }
186
+ function comparePrereleaseIdentifiers(left, right) {
187
+ if (left.length === 0 || right.length === 0) {
188
+ if (left.length === right.length)
189
+ return 0;
190
+ return left.length === 0 ? 1 : -1;
191
+ }
192
+ for (let index = 0; index < Math.max(left.length, right.length); index++) {
193
+ const leftPart = left[index];
194
+ const rightPart = right[index];
195
+ if (leftPart === undefined)
196
+ return -1;
197
+ if (rightPart === undefined)
198
+ return 1;
199
+ if (leftPart === rightPart)
200
+ continue;
201
+ const leftNumeric = /^\d+$/u.test(leftPart);
202
+ const rightNumeric = /^\d+$/u.test(rightPart);
203
+ if (leftNumeric && rightNumeric)
204
+ return Number(leftPart) - Number(rightPart);
205
+ if (leftNumeric !== rightNumeric)
206
+ return leftNumeric ? -1 : 1;
207
+ return leftPart < rightPart ? -1 : 1;
208
+ }
209
+ return 0;
210
+ }
211
+ function compareSemverVersions(left, right) {
212
+ for (const field of ['major', 'minor', 'patch']) {
213
+ if (left[field] !== right[field])
214
+ return left[field] - right[field];
215
+ }
216
+ return comparePrereleaseIdentifiers(left.prerelease, right.prerelease);
217
+ }
218
+ function resolveNpmSelfUpdatePlan(currentVersion, registryVersion) {
219
+ const current = parseSemver(currentVersion);
220
+ const registry = parseSemver(registryVersion);
221
+ if (!current) {
222
+ return {
223
+ action: 'fail',
224
+ reason: `current Comet version is not valid semver: ${currentVersion}`,
225
+ };
226
+ }
227
+ if (!registry) {
228
+ return {
229
+ action: 'fail',
230
+ reason: `registry Comet version is not valid semver: ${registryVersion}`,
231
+ };
232
+ }
233
+ const comparison = compareSemverVersions(registry, current);
234
+ if (comparison < 0) {
235
+ return {
236
+ action: 'skip',
237
+ reason: `registry version ${registryVersion} is older than current version ${currentVersion}`,
238
+ };
239
+ }
240
+ if (comparison === 0) {
241
+ return { action: 'skip', reason: `Comet ${currentVersion} is already installed` };
242
+ }
243
+ return { action: 'update', version: registryVersion };
152
244
  }
153
245
  function formatSkillUpdateCommand(scope, platform, languageSkillsDir, installMode = 'copy') {
154
246
  const destPrefix = scope === 'global' ? '~/' : '';
@@ -170,34 +262,397 @@ async function selectInstallMode(options, lang) {
170
262
  ],
171
263
  });
172
264
  }
173
- function getNpmExecutable() {
174
- return process.platform === 'win32' ? 'npm.cmd' : 'npm';
265
+ async function resolveNpmCliPath() {
266
+ const candidates = new Set();
267
+ const addStandardCandidates = (baseDir) => {
268
+ candidates.add(path.join(baseDir, 'node_modules', 'npm', 'bin', 'npm-cli.js'));
269
+ candidates.add(path.resolve(baseDir, '..', 'lib', 'node_modules', 'npm', 'bin', 'npm-cli.js'));
270
+ };
271
+ const npmExecPath = process.env.npm_execpath;
272
+ if (npmExecPath && path.basename(npmExecPath).toLowerCase() === 'npm-cli.js') {
273
+ candidates.add(path.resolve(npmExecPath));
274
+ }
275
+ addStandardCandidates(path.dirname(process.execPath));
276
+ const pathValue = process.env.PATH ?? process.env.Path ?? '';
277
+ for (const entry of pathValue.split(path.delimiter).filter(Boolean)) {
278
+ addStandardCandidates(entry);
279
+ const npmExecutable = path.join(entry, process.platform === 'win32' ? 'npm.cmd' : 'npm');
280
+ try {
281
+ const resolved = await fs.realpath(npmExecutable);
282
+ if (path.basename(resolved).toLowerCase() === 'npm-cli.js')
283
+ candidates.add(resolved);
284
+ }
285
+ catch (error) {
286
+ if (error.code !== 'ENOENT')
287
+ throw error;
288
+ }
289
+ }
290
+ for (const candidate of candidates) {
291
+ try {
292
+ return await resolveRegularContainedFile(candidate, path.resolve(candidate, '..', '..'), 'npm CLI');
293
+ }
294
+ catch (error) {
295
+ if (error.code !== 'ENOENT')
296
+ throw error;
297
+ }
298
+ }
299
+ throw new Error('Unable to locate npm CLI (npm-cli.js) without using a shell');
175
300
  }
176
- async function updateCometNpmPackage(scope, projectPath, log, jsonMode = false) {
177
- const args = buildNpmUpdateArgs(scope);
178
- const cwd = scope === 'global' ? process.cwd() : projectPath;
301
+ function runCapturedProcess(command, args, cwd, limits) {
179
302
  return new Promise((resolve) => {
180
- // In JSON mode, discard npm's stdout/stderr so it cannot corrupt the JSON
181
- // document emitted on stdout. 'ignore' avoids the pipe backpressure a
182
- // verbose npm install could otherwise cause.
183
- const child = spawn(getNpmExecutable(), args, {
303
+ const stdoutChunks = [];
304
+ const stderrChunks = [];
305
+ let capturedBytes = 0;
306
+ let spawnError = null;
307
+ let limitReason = null;
308
+ let forceKillTimer = null;
309
+ const child = spawn(command, args, {
184
310
  cwd,
185
- stdio: jsonMode ? 'ignore' : 'inherit',
186
- shell: true,
311
+ stdio: ['ignore', 'pipe', 'pipe'],
312
+ shell: false,
187
313
  });
188
- child.on('error', (err) => {
189
- log(` npm package: failed to launch npm — ${err.message}`);
190
- resolve(false);
191
- });
192
- child.on('exit', (code) => {
193
- if (code !== 0) {
194
- log(` npm package: update failed (exit code ${code}). Unable to reach the official npm registry at ${OFFICIAL_REGISTRY}.`);
195
- log(` Check your network connection or firewall settings and try again.`);
314
+ const terminate = (reason) => {
315
+ if (limitReason !== null)
316
+ return;
317
+ limitReason = reason;
318
+ child.kill();
319
+ forceKillTimer = setTimeout(() => child.kill('SIGKILL'), 1_000);
320
+ forceKillTimer.unref?.();
321
+ };
322
+ const capture = (target, chunk) => {
323
+ const bytes = Buffer.isBuffer(chunk) ? chunk : Buffer.from(String(chunk));
324
+ if (!limits) {
325
+ target.push(bytes);
326
+ return;
327
+ }
328
+ const remaining = Math.max(0, limits.maxOutputBytes - capturedBytes);
329
+ if (remaining > 0)
330
+ target.push(bytes.subarray(0, remaining));
331
+ capturedBytes += bytes.length;
332
+ if (capturedBytes > limits.maxOutputBytes) {
333
+ terminate(`process output exceeded ${limits.maxOutputBytes} bytes`);
196
334
  }
197
- resolve(code === 0);
335
+ };
336
+ child.stdout?.on('data', (chunk) => capture(stdoutChunks, chunk));
337
+ child.stderr?.on('data', (chunk) => capture(stderrChunks, chunk));
338
+ child.on('error', (error) => {
339
+ spawnError = error;
340
+ });
341
+ const timeout = limits
342
+ ? setTimeout(() => terminate(`process timed out after ${limits.timeoutMs}ms`), limits.timeoutMs)
343
+ : null;
344
+ timeout?.unref?.();
345
+ child.on('close', (exitCode) => {
346
+ if (timeout)
347
+ clearTimeout(timeout);
348
+ if (forceKillTimer)
349
+ clearTimeout(forceKillTimer);
350
+ const stdout = Buffer.concat(stdoutChunks).toString('utf8');
351
+ const stderr = Buffer.concat(stderrChunks).toString('utf8');
352
+ const success = spawnError === null && limitReason === null && exitCode === 0;
353
+ const captured = (stderr.trim() || stdout.trim()).slice(-4000);
354
+ resolve({
355
+ success,
356
+ exitCode,
357
+ stdout,
358
+ stderr,
359
+ reason: success
360
+ ? undefined
361
+ : (limitReason ??
362
+ (spawnError
363
+ ? `failed to launch ${command}: ${spawnError.message}`
364
+ : captured || `${command} exited with code ${exitCode ?? 'unknown'}`)),
365
+ });
198
366
  });
199
367
  });
200
368
  }
369
+ function runNpmCli(npmCliPath, args, cwd, limits = NPM_INSPECTION_LIMITS) {
370
+ return runCapturedProcess(process.execPath, [npmCliPath, ...args], cwd, limits);
371
+ }
372
+ async function removeDirectoryWithRetry(directory, attempts = 3) {
373
+ let lastError = null;
374
+ for (let attempt = 1; attempt <= attempts; attempt++) {
375
+ try {
376
+ await fs.rm(directory, { recursive: true, force: true });
377
+ return null;
378
+ }
379
+ catch (error) {
380
+ lastError = error;
381
+ if (attempt < attempts) {
382
+ await new Promise((resolve) => setTimeout(resolve, attempt * 25));
383
+ }
384
+ }
385
+ }
386
+ return lastError;
387
+ }
388
+ async function resolveRegularContainedFile(file, root, label) {
389
+ const [realRoot, realFile] = await Promise.all([fs.realpath(root), fs.realpath(file)]);
390
+ const stat = await fs.lstat(realFile);
391
+ if (!stat.isFile() || stat.isSymbolicLink() || !isSameOrInside(realFile, realRoot)) {
392
+ throw new Error(`${label} must be a regular file inside ${realRoot}`);
393
+ }
394
+ return realFile;
395
+ }
396
+ async function readCometPackage(packageRoot) {
397
+ const resolvedPackageRoot = path.resolve(packageRoot);
398
+ const realPackageRoot = await fs.realpath(resolvedPackageRoot);
399
+ const packageRootStat = await fs.lstat(realPackageRoot);
400
+ if (!packageRootStat.isDirectory() || packageRootStat.isSymbolicLink()) {
401
+ throw new Error(`Comet package root is not a real directory: ${packageRoot}`);
402
+ }
403
+ const packageJsonPath = await resolveRegularContainedFile(path.join(resolvedPackageRoot, 'package.json'), resolvedPackageRoot, 'Comet package.json');
404
+ const pkg = await readJson(packageJsonPath);
405
+ if (typeof pkg.version !== 'string') {
406
+ throw new Error(`Comet package has no valid version: ${packageJsonPath}`);
407
+ }
408
+ const binReference = typeof pkg.bin === 'string' ? pkg.bin : pkg.bin?.comet;
409
+ if (!binReference)
410
+ throw new Error(`Comet package has no comet bin: ${packageJsonPath}`);
411
+ const binPath = path.resolve(resolvedPackageRoot, binReference);
412
+ if (!isSameOrInside(binPath, resolvedPackageRoot)) {
413
+ throw new Error(`Comet package bin is invalid: ${binReference}`);
414
+ }
415
+ let realBinPath;
416
+ try {
417
+ realBinPath = await resolveRegularContainedFile(binPath, resolvedPackageRoot, 'Comet package bin');
418
+ }
419
+ catch (error) {
420
+ throw new Error(`Comet package bin is invalid: ${binReference}`, { cause: error });
421
+ }
422
+ return { packageRoot: resolvedPackageRoot, version: pkg.version, binPath: realBinPath };
423
+ }
424
+ async function readInstalledCometPackage(scope, projectPath, npmCliPath) {
425
+ if (scope === 'project') {
426
+ const [rootResult, prefixResult] = await Promise.all([
427
+ runNpmCli(npmCliPath, ['root'], projectPath),
428
+ runNpmCli(npmCliPath, ['prefix'], projectPath),
429
+ ]);
430
+ const npmRoot = parseNpmAbsolutePath(rootResult, 'npm root');
431
+ const npmPrefix = parseNpmAbsolutePath(prefixResult, 'npm prefix');
432
+ const installedPackage = await readCometPackage(path.join(npmRoot, '@rpamis', 'comet'));
433
+ return {
434
+ ...installedPackage,
435
+ projectMetadataRoots: [...new Set([path.resolve(projectPath), npmPrefix])],
436
+ };
437
+ }
438
+ const rootResult = await runNpmCli(npmCliPath, ['root', '--global'], projectPath);
439
+ const npmRoot = parseNpmAbsolutePath(rootResult, 'npm root --global');
440
+ return readCometPackage(path.join(npmRoot, '@rpamis', 'comet'));
441
+ }
442
+ function parseNpmAbsolutePath(result, command) {
443
+ if (!result.success) {
444
+ throw new Error(`Unable to resolve ${command}: ${result.reason ?? 'unknown error'}`);
445
+ }
446
+ const outputPath = result.stdout
447
+ .split(/\r?\n/u)
448
+ .map((line) => line.trim())
449
+ .filter(Boolean)
450
+ .at(-1);
451
+ if (!outputPath || !path.isAbsolute(outputPath)) {
452
+ throw new Error(`${command} returned an invalid path: ${outputPath ?? '<empty>'}`);
453
+ }
454
+ return path.resolve(outputPath);
455
+ }
456
+ async function validateCometPackageCommands(candidate, expectedVersion) {
457
+ const checks = [
458
+ {
459
+ args: ['--version'],
460
+ accepts: (stdout) => stdout.trim() === expectedVersion,
461
+ label: 'version command',
462
+ },
463
+ {
464
+ args: ['workflow', 'resolve', '--help'],
465
+ accepts: (stdout) => stdout.includes('Usage: comet workflow resolve'),
466
+ label: 'workflow resolve command',
467
+ },
468
+ {
469
+ args: ['native', '--help'],
470
+ accepts: (stdout) => stdout.includes('Usage: comet native'),
471
+ label: 'native command',
472
+ },
473
+ ];
474
+ for (const check of checks) {
475
+ const result = await runCapturedProcess(process.execPath, [candidate.binPath, ...check.args], candidate.packageRoot, CANDIDATE_COMMAND_LIMITS);
476
+ if (!result.success || !check.accepts(result.stdout)) {
477
+ return {
478
+ ...result,
479
+ success: false,
480
+ reason: `candidate ${check.label} failed: ${result.reason ?? 'unexpected command contract'}`,
481
+ };
482
+ }
483
+ }
484
+ return { success: true, exitCode: 0, stdout: '', stderr: '' };
485
+ }
486
+ async function validateRegistryCometPackage(version, npmCliPath) {
487
+ let validationDir;
488
+ try {
489
+ validationDir = await fs.mkdtemp(path.join(os.tmpdir(), 'comet-self-update-'));
490
+ }
491
+ catch (error) {
492
+ return {
493
+ success: false,
494
+ exitCode: null,
495
+ stdout: '',
496
+ stderr: '',
497
+ reason: `unable to create candidate prefix: ${error.message}`,
498
+ };
499
+ }
500
+ let result;
501
+ try {
502
+ const install = await runNpmCli(npmCliPath, [
503
+ 'install',
504
+ '--prefix',
505
+ validationDir,
506
+ '--ignore-scripts',
507
+ '--no-save',
508
+ '--package-lock=false',
509
+ `${PACKAGE_NAME}@${version}`,
510
+ '--registry',
511
+ OFFICIAL_REGISTRY,
512
+ ], validationDir, CANDIDATE_INSTALL_LIMITS);
513
+ if (!install.success) {
514
+ result = {
515
+ ...install,
516
+ reason: `candidate package install failed: ${install.reason ?? 'unknown error'}`,
517
+ };
518
+ }
519
+ else {
520
+ const candidate = await readCometPackage(path.join(validationDir, 'node_modules', '@rpamis', 'comet'));
521
+ if (candidate.version !== version) {
522
+ result = {
523
+ success: false,
524
+ exitCode: null,
525
+ stdout: '',
526
+ stderr: '',
527
+ reason: `candidate package version mismatch: expected ${version}, got ${candidate.version}`,
528
+ };
529
+ }
530
+ else {
531
+ result = await validateCometPackageCommands(candidate, version);
532
+ }
533
+ }
534
+ }
535
+ catch (error) {
536
+ result = {
537
+ success: false,
538
+ exitCode: null,
539
+ stdout: '',
540
+ stderr: '',
541
+ reason: `candidate package validation failed: ${error.message}`,
542
+ };
543
+ }
544
+ const cleanupError = await removeDirectoryWithRetry(validationDir);
545
+ if (!cleanupError)
546
+ return result;
547
+ return {
548
+ ...result,
549
+ success: false,
550
+ reason: result.reason
551
+ ? `${result.reason}; temporary cleanup failed: ${cleanupError.message}`
552
+ : `candidate validation temporary cleanup failed: ${cleanupError.message}`,
553
+ };
554
+ }
555
+ const PROJECT_INSTALL_METADATA = [
556
+ 'package.json',
557
+ 'package-lock.json',
558
+ 'npm-shrinkwrap.json',
559
+ 'pnpm-lock.yaml',
560
+ 'yarn.lock',
561
+ ];
562
+ async function snapshotProjectInstallMetadata(metadataRoots) {
563
+ const filePaths = [
564
+ ...new Set(metadataRoots.flatMap((metadataRoot) => PROJECT_INSTALL_METADATA.map((relativePath) => path.join(metadataRoot, relativePath)))),
565
+ ];
566
+ return Promise.all(filePaths.map(async (filePath) => {
567
+ try {
568
+ return { filePath, content: await fs.readFile(filePath) };
569
+ }
570
+ catch (error) {
571
+ if (error.code === 'ENOENT')
572
+ return { filePath, content: null };
573
+ throw error;
574
+ }
575
+ }));
576
+ }
577
+ async function restoreProjectInstallMetadata(snapshots) {
578
+ const failures = [];
579
+ for (const snapshot of snapshots) {
580
+ try {
581
+ if (snapshot.content === null) {
582
+ await fs.rm(snapshot.filePath, { force: true });
583
+ }
584
+ else {
585
+ await fs.writeFile(snapshot.filePath, snapshot.content);
586
+ }
587
+ }
588
+ catch (error) {
589
+ failures.push(`${path.basename(snapshot.filePath)}: ${error.message}`);
590
+ }
591
+ }
592
+ return failures.length > 0 ? failures.join('; ') : null;
593
+ }
594
+ async function installCometNpmVersion(npmCliPath, scope, projectPath, version) {
595
+ const cwd = scope === 'global' ? process.cwd() : projectPath;
596
+ return runNpmCli(npmCliPath, buildNpmUpdateArgs(scope, version), cwd, NPM_MUTATION_LIMITS);
597
+ }
598
+ async function updateCometNpmPackage(npmCliPath, scope, projectPath, targetVersion, installedPackage, log) {
599
+ const validation = await validateRegistryCometPackage(targetVersion, npmCliPath);
600
+ if (!validation.success) {
601
+ log(` npm package: candidate validation failed: ${validation.reason}`);
602
+ return { success: false, exitCode: validation.exitCode, reason: validation.reason };
603
+ }
604
+ let metadata;
605
+ if (scope === 'project') {
606
+ try {
607
+ metadata = await snapshotProjectInstallMetadata(installedPackage.projectMetadataRoots ?? [projectPath]);
608
+ }
609
+ catch (error) {
610
+ return {
611
+ success: false,
612
+ exitCode: null,
613
+ reason: `unable to snapshot project package metadata: ${error.message}`,
614
+ };
615
+ }
616
+ }
617
+ const install = await installCometNpmVersion(npmCliPath, scope, projectPath, targetVersion);
618
+ let installReason = install.reason;
619
+ if (install.success) {
620
+ try {
621
+ const installedAfterUpdate = await readCometPackage(installedPackage.packageRoot);
622
+ if (installedAfterUpdate.version === targetVersion) {
623
+ return { success: true, exitCode: install.exitCode };
624
+ }
625
+ installReason = `installed package version mismatch: expected ${targetVersion}, got ${installedAfterUpdate.version}`;
626
+ }
627
+ catch (error) {
628
+ installReason = `unable to verify installed package: ${error.message}`;
629
+ }
630
+ }
631
+ const primaryReason = installReason ?? 'npm package installation failed';
632
+ log(` npm package: update failed; restoring ${installedPackage.version}...`);
633
+ const rollback = await installCometNpmVersion(npmCliPath, scope, projectPath, installedPackage.version);
634
+ let rollbackReason = rollback.reason ?? null;
635
+ if (rollback.success) {
636
+ try {
637
+ const restored = await readCometPackage(installedPackage.packageRoot);
638
+ if (restored.version !== installedPackage.version) {
639
+ rollbackReason = `restored package version mismatch: expected ${installedPackage.version}, got ${restored.version}`;
640
+ }
641
+ }
642
+ catch (error) {
643
+ rollbackReason = `unable to verify restored package: ${error.message}`;
644
+ }
645
+ }
646
+ const metadataRestoreError = metadata ? await restoreProjectInstallMetadata(metadata) : null;
647
+ const details = [
648
+ primaryReason,
649
+ rollbackReason
650
+ ? `rollback to ${installedPackage.version} failed: ${rollbackReason}`
651
+ : `restored ${installedPackage.version}`,
652
+ metadataRestoreError ? `project metadata restore failed: ${metadataRestoreError}` : null,
653
+ ].filter((detail) => detail !== null);
654
+ return { success: false, exitCode: install.exitCode, reason: details.join('; ') };
655
+ }
201
656
  async function promptCodegraphInstall(lang) {
202
657
  return select({
203
658
  message: t(lang, 'installCodegraph'),
@@ -209,7 +664,8 @@ async function promptCodegraphInstall(lang) {
209
664
  }
210
665
  function currentProjectJson(result) {
211
666
  return {
212
- status: hasComponentFailures(result) ? 'incomplete' : 'complete',
667
+ status: hasUpdateFailures(result) ? 'incomplete' : 'complete',
668
+ failures: collectCommandFailures(result),
213
669
  npm: result.npm,
214
670
  skills: {
215
671
  totalCopied: result.skills.totalCopied,
@@ -230,21 +686,8 @@ function hasComponentFailures(result) {
230
686
  result.rules.totalFailed > 0 ||
231
687
  result.hooks.totalFailed > 0);
232
688
  }
233
- function componentFailureReason(result) {
234
- const reasons = [];
235
- if (result.skills.totalFailed > 0) {
236
- reasons.push(`Skill update failed (${result.skills.totalFailed})`);
237
- }
238
- if (result.rules.totalFailed > 0) {
239
- reasons.push(`Rule update failed (${result.rules.totalFailed})`);
240
- }
241
- if (result.hooks.totalFailed > 0) {
242
- reasons.push(`Hook update failed (${result.hooks.totalFailed})`);
243
- }
244
- if (result.skills.cleanupFailed > 0) {
245
- reasons.push(`legacy Skill cleanup failed (${result.skills.cleanupFailed})`);
246
- }
247
- return reasons.join('; ');
689
+ function hasUpdateFailures(result) {
690
+ return (result.npm.status === 'failed' || result.codegraph === 'failed' || hasComponentFailures(result));
248
691
  }
249
692
  function collectComponentFailures(result) {
250
693
  const skillFailures = result.skills.targets.flatMap((target) => {
@@ -295,6 +738,21 @@ function collectComponentFailures(result) {
295
738
  });
296
739
  return [...skillFailures, ...ruleFailures, ...hookFailures];
297
740
  }
741
+ function collectCommandFailures(result) {
742
+ const failures = [];
743
+ if (result.npm.status === 'failed') {
744
+ failures.push({
745
+ component: 'npm',
746
+ scope: result.npm.scope === 'skipped' ? undefined : result.npm.scope,
747
+ reason: result.npm.reason ?? 'npm package update failed',
748
+ });
749
+ }
750
+ failures.push(...collectComponentFailures(result));
751
+ if (result.codegraph === 'failed') {
752
+ failures.push({ component: 'CodeGraph', reason: 'CodeGraph installation failed' });
753
+ }
754
+ return failures;
755
+ }
298
756
  function summarizeTargets(targets) {
299
757
  return targets.map((target) => ({
300
758
  scope: target.scope,
@@ -320,33 +778,85 @@ async function upsertUpdatedProjectTargets(projectPath, result) {
320
778
  language: target.language,
321
779
  })), 'update');
322
780
  }
323
- async function updateSingleProject(projectPath, options, log) {
781
+ async function updateSingleProject(startPath, options, log) {
324
782
  const lang = options.language ?? 'en';
783
+ const includesProjectScope = options.targetScopes
784
+ ? options.targetScopes.includes('project')
785
+ : options.scope !== 'global';
786
+ const projectPath = includesProjectScope ? await discoverNativeProject(startPath) : startPath;
787
+ const projectEntry = includesProjectScope ? await resolveCometEntry(projectPath) : null;
788
+ const projectConfig = includesProjectScope ? await readProjectConfig(projectPath) : null;
789
+ const configuredWorkflows = projectConfig?.workflows ?? (projectConfig ? [projectConfig.default_workflow] : null);
790
+ const nativeProject = configuredWorkflows
791
+ ? configuredWorkflows.includes('native')
792
+ : projectEntry?.workflow === 'native';
793
+ const classicProject = configuredWorkflows
794
+ ? configuredWorkflows.includes('classic')
795
+ : projectEntry?.workflow === 'classic';
796
+ const projectWorkflowSelection = nativeProject && classicProject ? 'both' : nativeProject ? 'native' : 'classic';
325
797
  const packageScope = options.scope && !options.targetScopes
326
798
  ? options.scope
327
799
  : await detectCometPackageScope(projectPath);
328
800
  let npmStatus = 'skipped';
329
- const skipRepeatedGlobalNpm = !options.skipNpm && packageScope === 'global' && options.skipGlobalNpmUpdate === true;
801
+ let npmExitCode = null;
802
+ let npmReason = options.npmSkipReason;
803
+ let npmCommand = null;
804
+ const skipPackageSelfUpdate = options.skipPackageSelfUpdate ?? options.skipNpm === true;
805
+ const skipRepeatedGlobalNpm = !skipPackageSelfUpdate && packageScope === 'global' && options.skipGlobalNpmUpdate === true;
330
806
  if (skipRepeatedGlobalNpm) {
807
+ npmReason = 'global scope self-update already attempted';
331
808
  log(` ${t(lang, 'updatingNpmPackage')}: skipped (global scope already attempted)`);
332
809
  }
333
- else if (!options.skipNpm) {
334
- log(` ${t(lang, 'updatingNpmPackage')} (${packageScope} scope)...`);
335
- log(` $ ${formatNpmUpdateCommand(packageScope)}`);
336
- const npmUpdated = await updateCometNpmPackage(packageScope, projectPath, log, options.json === true);
337
- if (npmUpdated) {
338
- npmStatus = 'updated';
339
- log(` ${t(lang, 'npmPackageUpdated')} ${PACKAGE_NAME}`);
810
+ else if (!skipPackageSelfUpdate) {
811
+ let npmCliPath = null;
812
+ let installedPackage = null;
813
+ try {
814
+ npmCliPath = await resolveNpmCliPath();
815
+ installedPackage = await readInstalledCometPackage(packageScope, projectPath, npmCliPath);
340
816
  }
341
- else {
817
+ catch (error) {
818
+ npmStatus = 'failed';
819
+ npmReason = `unable to inspect installed Comet package: ${error.message}`;
820
+ }
821
+ const registryVersion = installedPackage ? await getLatestVersion() : null;
822
+ if (installedPackage && registryVersion === null) {
342
823
  npmStatus = 'failed';
824
+ npmReason = 'unable to resolve the latest Comet version from the npm registry';
825
+ }
826
+ else if (installedPackage && registryVersion && npmCliPath) {
827
+ const plan = resolveNpmSelfUpdatePlan(installedPackage.version, registryVersion);
828
+ if (plan.action === 'skip') {
829
+ npmStatus = 'skipped';
830
+ npmReason = plan.reason;
831
+ log(` ${t(lang, 'updatingNpmPackage')}: skipped (${plan.reason})`);
832
+ }
833
+ else if (plan.action === 'fail') {
834
+ npmStatus = 'failed';
835
+ npmReason = plan.reason;
836
+ }
837
+ else {
838
+ npmCommand = formatNpmUpdateCommand(packageScope, plan.version);
839
+ log(` ${t(lang, 'updatingNpmPackage')} (${packageScope} scope)...`);
840
+ log(` $ ${npmCommand}`);
841
+ const npmResult = await updateCometNpmPackage(npmCliPath, packageScope, projectPath, plan.version, installedPackage, log);
842
+ npmExitCode = npmResult.exitCode;
843
+ npmReason = npmResult.reason;
844
+ if (npmResult.success) {
845
+ npmStatus = 'updated';
846
+ log(` ${t(lang, 'npmPackageUpdated')} ${PACKAGE_NAME}@${plan.version}`);
847
+ }
848
+ else {
849
+ npmStatus = 'failed';
850
+ }
851
+ }
852
+ }
853
+ if (npmStatus === 'failed') {
343
854
  log(` ${t(lang, options.failOnNpmFailure ? 'npmPackageFailedBlocking' : 'npmPackageFailed')}`);
344
855
  if (options.failOnNpmFailure) {
345
- throw createNpmUpdateFailure(packageScope);
856
+ throw createNpmUpdateFailure(packageScope, npmReason);
346
857
  }
347
858
  }
348
859
  }
349
- const installMode = await selectInstallMode(options, lang);
350
860
  const targets = await detectInstalledCometTargets(projectPath, {
351
861
  scopes: options.targetScopes ?? (options.scope ? [options.scope] : undefined),
352
862
  respectDetectionPaths: options.scope === undefined,
@@ -355,9 +865,11 @@ async function updateSingleProject(projectPath, options, log) {
355
865
  return {
356
866
  projectPath,
357
867
  npm: {
358
- scope: options.skipNpm ? 'skipped' : packageScope,
868
+ scope: skipPackageSelfUpdate ? 'skipped' : packageScope,
359
869
  status: npmStatus,
360
- command: options.skipNpm || skipRepeatedGlobalNpm ? null : formatNpmUpdateCommand(packageScope),
870
+ command: npmCommand,
871
+ exitCode: npmExitCode,
872
+ reason: npmReason,
361
873
  },
362
874
  skills: { totalCopied: 0, totalFailed: 0, cleanupFailed: 0, targets: [] },
363
875
  rules: { totalCopied: 0, totalFailed: 0, targets: [] },
@@ -366,16 +878,27 @@ async function updateSingleProject(projectPath, options, log) {
366
878
  codegraph: 'skipped',
367
879
  };
368
880
  }
881
+ const hasClassicCompatibleTarget = targets.some((target) => target.scope === 'global' || classicProject);
882
+ const selectedInstallMode = hasClassicCompatibleTarget
883
+ ? await selectInstallMode(options, lang)
884
+ : 'copy';
885
+ const installModeFor = (target) => nativeProject && target.scope === 'project' ? 'copy' : selectedInstallMode;
886
+ const reportedInstallMode = targets.every((target) => nativeProject && target.scope === 'project')
887
+ ? 'copy'
888
+ : selectedInstallMode;
369
889
  log(`\n ${t(lang, 'updatingSkillsOnTargets')} ${targets.length} target(s):`);
370
890
  for (const target of targets) {
371
891
  const language = options.language ?? target.language;
372
892
  const scopeLabel = target.scope === 'global' ? 'global' : `project (${projectPath})`;
373
893
  const languageId = resolveTargetLanguage(options.language, target.language);
374
894
  const languageSkillsDir = languageToSkillsDir(languageId);
895
+ const targetInstallMode = installModeFor(target);
375
896
  log(` - ${target.platform.name} (${scopeLabel}, ${language})`);
376
- log(` $ ${formatSkillUpdateCommand(target.scope, target.platform, languageSkillsDir, installMode)}`);
897
+ log(` $ ${formatSkillUpdateCommand(target.scope, target.platform, languageSkillsDir, targetInstallMode)}`);
377
898
  }
378
- log(`\n ${t(lang, 'copyingSkillsFiles')} ${(await getManifestSkills()).length} skill files...\n`);
899
+ const targetWorkflowSelections = targets.map((target) => target.scope === 'global' ? 'classic' : projectWorkflowSelection);
900
+ const updateSkillPaths = new Set((await Promise.all([...new Set(targetWorkflowSelections)].map((selection) => getManifestSkills(selection)))).flat());
901
+ log(`\n ${t(lang, 'copyingSkillsFiles')} ${updateSkillPaths.size} skill files...\n`);
379
902
  let totalCopied = 0;
380
903
  let totalFailed = 0;
381
904
  let totalCleanupFailed = 0;
@@ -391,7 +914,13 @@ async function updateSingleProject(projectPath, options, log) {
391
914
  const baseDir = getBaseDir(target.scope, projectPath);
392
915
  const languageId = resolveTargetLanguage(options.language, target.language);
393
916
  const languageSkillsDir = languageToSkillsDir(languageId);
394
- const { copied, skipped, failed } = await copyCometSkillsForPlatform(baseDir, target.platform, true, languageSkillsDir, target.scope, installMode);
917
+ const targetInstallMode = installModeFor(target);
918
+ const nativeProjectTarget = nativeProject && target.scope === 'project';
919
+ const targetWorkflowSelection = target.scope === 'global' ? 'classic' : projectWorkflowSelection;
920
+ if (nativeProjectTarget) {
921
+ await prepareManagedSkillCopyTarget(baseDir, target.platform, target.scope, targetWorkflowSelection);
922
+ }
923
+ const { copied, skipped, failed } = await copyCometSkillsForPlatform(baseDir, target.platform, true, languageSkillsDir, target.scope, targetInstallMode, targetWorkflowSelection);
395
924
  const cleanupResult = failed === 0
396
925
  ? await removeLegacyCometSkillsForPlatform(baseDir, target.platform, target.scope)
397
926
  : { removed: 0, failed: 0 };
@@ -413,7 +942,7 @@ async function updateSingleProject(projectPath, options, log) {
413
942
  ? `legacy Skill cleanup failed (${cleanupResult.failed})`
414
943
  : undefined,
415
944
  cleanupFailed: cleanupResult.failed,
416
- command: formatSkillUpdateCommand(target.scope, target.platform, languageSkillsDir, installMode),
945
+ command: formatSkillUpdateCommand(target.scope, target.platform, languageSkillsDir, targetInstallMode),
417
946
  });
418
947
  log(` ${target.platform.name} (${target.scope}, ${languageSkillsDir}): ${copied} ${t(lang, 'skillsCopiedSkipped')} ${skipped} skipped`);
419
948
  if (cleanupResult.failed > 0) {
@@ -442,7 +971,7 @@ async function updateSingleProject(projectPath, options, log) {
442
971
  continue;
443
972
  }
444
973
  try {
445
- const ruleResult = await copyCometRulesForPlatform(baseDir, target.platform, true, languageId, target.scope);
974
+ const ruleResult = await copyCometRulesForPlatform(baseDir, target.platform, true, languageId, target.scope, target.scope === 'global' ? 'classic' : projectWorkflowSelection);
446
975
  totalRulesCopied += ruleResult.copied;
447
976
  totalRulesFailed += ruleResult.failed;
448
977
  const ruleStatus = ruleResult.failed > 0 ? 'failed' : ruleResult.copied > 0 ? 'copied' : 'skipped';
@@ -482,8 +1011,8 @@ async function updateSingleProject(projectPath, options, log) {
482
1011
  log(` Comet rules -> ${target.platform.name}: ${t(lang, 'rulesFailed')} (${reason})`);
483
1012
  }
484
1013
  try {
485
- const { status, reason } = await installCometHooksForPlatform(baseDir, target.platform, target.scope);
486
- const hookFailed = status === 'failed' ? 1 : 0;
1014
+ const { status, reason, cleanupFailed = 0, } = await installCometHooksForPlatform(baseDir, target.platform, target.scope, target.scope === 'global' ? 'classic' : projectWorkflowSelection);
1015
+ const hookFailed = status === 'failed' ? 1 : cleanupFailed;
487
1016
  totalHooksFailed += hookFailed;
488
1017
  hookTargetResults.push({
489
1018
  scope: target.scope,
@@ -496,6 +1025,9 @@ async function updateSingleProject(projectPath, options, log) {
496
1025
  if (status === 'installed') {
497
1026
  totalHooksInstalled++;
498
1027
  log(` Comet hooks -> ${target.platform.name}: ${t(lang, 'hooksUpdated')}`);
1028
+ if (cleanupFailed > 0) {
1029
+ log(` Comet hooks -> ${target.platform.name}: ${reason}`);
1030
+ }
499
1031
  }
500
1032
  else if (status === 'failed') {
501
1033
  log(` Comet hooks -> ${target.platform.name}: ${t(lang, 'hooksFailed')} (${reason})`);
@@ -518,6 +1050,16 @@ async function updateSingleProject(projectPath, options, log) {
518
1050
  log(` Comet hooks -> ${target.platform.name}: ${t(lang, 'hooksFailed')} (${reason})`);
519
1051
  }
520
1052
  }
1053
+ const projectRouterInstalled = hookTargetResults.some((target) => target.scope === 'project' && target.status === 'installed');
1054
+ const projectHookFailed = hookTargetResults.some((target) => target.scope === 'project' && target.status === 'failed');
1055
+ if (includesProjectScope &&
1056
+ projectRouterInstalled &&
1057
+ !projectHookFailed &&
1058
+ (projectWorkflowSelection === 'classic' || projectWorkflowSelection === 'both')) {
1059
+ if (await migrateLegacyClassicSelection(projectPath)) {
1060
+ log(' Comet current selection -> migrated Classic v1 to shared v2');
1061
+ }
1062
+ }
521
1063
  for (const scope of ['project', 'global']) {
522
1064
  const scopeTargets = targets.filter((candidate) => candidate.scope === scope);
523
1065
  if (scopeTargets.length === 0)
@@ -553,6 +1095,9 @@ async function updateSingleProject(projectPath, options, log) {
553
1095
  if (options.json) {
554
1096
  codegraphStatus = 'skipped';
555
1097
  }
1098
+ else if (nativeProject) {
1099
+ codegraphStatus = 'skipped';
1100
+ }
556
1101
  else if (codegraphAlreadyIndexed) {
557
1102
  log('\n CodeGraph: skipped (existing .codegraph index detected)');
558
1103
  }
@@ -570,15 +1115,17 @@ async function updateSingleProject(projectPath, options, log) {
570
1115
  return {
571
1116
  projectPath,
572
1117
  npm: {
573
- scope: options.skipNpm ? 'skipped' : packageScope,
1118
+ scope: skipPackageSelfUpdate ? 'skipped' : packageScope,
574
1119
  status: npmStatus,
575
- command: options.skipNpm || skipRepeatedGlobalNpm ? null : formatNpmUpdateCommand(packageScope),
1120
+ command: npmCommand,
1121
+ exitCode: npmExitCode,
1122
+ reason: npmReason,
576
1123
  },
577
1124
  skills: {
578
1125
  totalCopied,
579
1126
  totalFailed,
580
1127
  cleanupFailed: totalCleanupFailed,
581
- installMode,
1128
+ installMode: reportedInstallMode,
582
1129
  targets: targetResults,
583
1130
  },
584
1131
  rules: {
@@ -620,8 +1167,11 @@ function logSingleProjectSummary(result, options, log) {
620
1167
  log(` ${t(lang, 'summaryCodegraph')} ${result.codegraph}`);
621
1168
  log(` ${t(lang, 'summaryScope')} ${scopes}`);
622
1169
  log(` ${t(lang, 'summaryLanguage')} ${languages}`);
623
- if (hasComponentFailures(result)) {
624
- log(`\n Update incomplete. ${componentFailureReason(result)}.\n`);
1170
+ if (hasUpdateFailures(result)) {
1171
+ const reasons = collectCommandFailures(result)
1172
+ .map((failure) => failure.reason)
1173
+ .join('; ');
1174
+ log(`\n Update incomplete. ${reasons}.\n`);
625
1175
  }
626
1176
  else {
627
1177
  log(`\n ${t(lang, 'updateComplete')}\n`);
@@ -652,7 +1202,7 @@ async function updateAllIndexedProjects(registryProjects, options, log) {
652
1202
  catch (error) {
653
1203
  results.push({
654
1204
  projectPath,
655
- status: 'skipped',
1205
+ status: 'failed',
656
1206
  reason: `unable to inspect project: ${error.message}`,
657
1207
  targets: [],
658
1208
  });
@@ -673,7 +1223,7 @@ async function updateAllIndexedProjects(registryProjects, options, log) {
673
1223
  });
674
1224
  if (!confirmed) {
675
1225
  log(`\n ${t(lang, 'cancelled')}\n`);
676
- return;
1226
+ return { status: 'complete' };
677
1227
  }
678
1228
  }
679
1229
  const runOptions = {
@@ -688,7 +1238,8 @@ async function updateAllIndexedProjects(registryProjects, options, log) {
688
1238
  runOptions.installMode = await selectInstallMode(options, lang);
689
1239
  }
690
1240
  let globalNpmAttempted = false;
691
- for (const project of runnableProjects) {
1241
+ for (let index = 0; index < runnableProjects.length; index++) {
1242
+ const project = runnableProjects[index];
692
1243
  const { projectPath, targets } = project;
693
1244
  try {
694
1245
  const result = await updateSingleProject(projectPath, { ...runOptions, skipGlobalNpmUpdate: globalNpmAttempted }, log);
@@ -706,13 +1257,15 @@ async function updateAllIndexedProjects(registryProjects, options, log) {
706
1257
  });
707
1258
  continue;
708
1259
  }
709
- if (hasComponentFailures(result)) {
1260
+ if (hasUpdateFailures(result)) {
710
1261
  results.push({
711
1262
  projectPath,
712
1263
  status: 'failed',
713
- reason: componentFailureReason(result),
1264
+ reason: collectCommandFailures(result)
1265
+ .map((failure) => failure.reason)
1266
+ .join('; '),
714
1267
  targets: summarizeUpdatedTargets(result.skills.targets),
715
- failures: collectComponentFailures(result),
1268
+ failures: collectCommandFailures(result),
716
1269
  });
717
1270
  continue;
718
1271
  }
@@ -730,64 +1283,119 @@ async function updateAllIndexedProjects(registryProjects, options, log) {
730
1283
  });
731
1284
  }
732
1285
  catch (error) {
1286
+ const npmFailure = isGlobalNpmUpdateFailure(error);
733
1287
  results.push({
734
1288
  projectPath,
735
1289
  status: 'failed',
736
1290
  reason: error.message,
737
1291
  targets: summarizeTargets(targets),
1292
+ failures: npmFailure
1293
+ ? [
1294
+ {
1295
+ component: 'npm',
1296
+ scope: 'global',
1297
+ reason: error.message,
1298
+ },
1299
+ ]
1300
+ : undefined,
738
1301
  });
739
- if (isGlobalNpmUpdateFailure(error))
1302
+ if (npmFailure) {
1303
+ for (const remaining of runnableProjects.slice(index + 1)) {
1304
+ results.push({
1305
+ projectPath: remaining.projectPath,
1306
+ status: 'not_attempted',
1307
+ reason: 'not attempted because the global npm package update failed',
1308
+ targets: summarizeTargets(remaining.targets),
1309
+ });
1310
+ }
740
1311
  break;
1312
+ }
741
1313
  }
742
1314
  }
743
1315
  if (options.json) {
744
1316
  console.log(JSON.stringify({
745
1317
  mode: 'all-projects',
1318
+ status: results.some((result) => result.status === 'failed' || result.status === 'not_attempted')
1319
+ ? 'incomplete'
1320
+ : 'complete',
746
1321
  registry: {
747
1322
  projectsFound: registryProjects.length,
748
1323
  staleRemoved,
749
1324
  },
750
1325
  projects: results,
751
1326
  }, null, 2));
752
- return;
1327
+ return {
1328
+ status: results.some((result) => result.status === 'failed' || result.status === 'not_attempted')
1329
+ ? 'incomplete'
1330
+ : 'complete',
1331
+ };
753
1332
  }
754
1333
  log(`\n Updated ${results.filter((result) => result.status === 'updated').length} indexed project(s).`);
1334
+ for (const result of results.filter((candidate) => candidate.status !== 'updated')) {
1335
+ log(` ${result.projectPath}: ${result.status} (${result.reason ?? 'no reason provided'})`);
1336
+ }
1337
+ return {
1338
+ status: results.some((result) => result.status === 'failed' || result.status === 'not_attempted')
1339
+ ? 'incomplete'
1340
+ : 'complete',
1341
+ };
1342
+ }
1343
+ function resolveSelfUpdateOptions(options, refreshesOnlyCurrentProject) {
1344
+ if (options.selfUpdate && (options.skipSelfUpdate || options.skipNpm)) {
1345
+ throw new Error('--self-update cannot be combined with --skip-self-update or --skip-npm');
1346
+ }
1347
+ if (options.skipSelfUpdate || options.skipNpm) {
1348
+ return {
1349
+ ...options,
1350
+ skipPackageSelfUpdate: true,
1351
+ npmSkipReason: options.skipSelfUpdate
1352
+ ? 'self-update disabled by --skip-self-update'
1353
+ : 'self-update disabled by --skip-npm',
1354
+ };
1355
+ }
1356
+ if (refreshesOnlyCurrentProject && !options.selfUpdate) {
1357
+ return {
1358
+ ...options,
1359
+ skipPackageSelfUpdate: true,
1360
+ npmSkipReason: 'self-update disabled for current-project updates; pass --self-update to opt in',
1361
+ };
1362
+ }
1363
+ return { ...options, skipPackageSelfUpdate: false };
755
1364
  }
756
1365
  export async function updateCommand(targetPath, options = {}) {
757
1366
  const projectPath = path.resolve(targetPath);
758
1367
  const log = options.json ? () => undefined : console.log;
759
1368
  const lang = options.language ?? 'en';
760
1369
  assertProjectScopeOptions(options);
761
- const registryProjects = await listProjectRegistryEntries({
762
- strict: options.allProjects === true,
763
- });
1370
+ const registryProjects = await listProjectRegistryEntries({ strict: true });
764
1371
  log(`\n ${t(lang, 'updateTitle')}`);
765
1372
  if (!options.json) {
766
1373
  await printVersionInfo(log);
767
1374
  }
768
1375
  log('');
769
1376
  const scopeMode = await resolveProjectScopeMode('update', options, registryProjects.length);
1377
+ options = resolveSelfUpdateOptions(options, options.currentProject === true || scopeMode === 'current-project');
770
1378
  if (scopeMode === 'all-projects') {
771
- await updateAllIndexedProjects(registryProjects, options, log);
772
- return;
1379
+ return updateAllIndexedProjects(registryProjects, options, log);
773
1380
  }
774
1381
  const result = await updateSingleProject(projectPath, options, log);
775
1382
  if (result.skills.targets.length === 0) {
776
1383
  if (options.json) {
777
1384
  console.log(JSON.stringify(currentProjectJson(result), null, 2));
778
- return;
1385
+ return { status: hasUpdateFailures(result) ? 'incomplete' : 'complete' };
779
1386
  }
780
1387
  log(`\n ${t(lang, 'noInstallsFound')}\n`);
781
- return;
1388
+ return { status: hasUpdateFailures(result) ? 'incomplete' : 'complete' };
782
1389
  }
783
- if (!hasComponentFailures(result)) {
784
- await upsertUpdatedProjectTargets(projectPath, result);
1390
+ if (!hasUpdateFailures(result)) {
1391
+ await upsertUpdatedProjectTargets(result.projectPath, result);
785
1392
  }
786
1393
  if (options.json) {
787
1394
  console.log(JSON.stringify(currentProjectJson(result), null, 2));
788
- return;
1395
+ return { status: hasUpdateFailures(result) ? 'incomplete' : 'complete' };
789
1396
  }
790
1397
  logSingleProjectSummary(result, options, log);
1398
+ return { status: hasUpdateFailures(result) ? 'incomplete' : 'complete' };
791
1399
  }
792
- export { buildNpmUpdateArgs, detectCometPackageScope, detectInstalledCometLanguage, detectInstalledCometTargets, formatNpmUpdateCommand, formatSkillUpdateCommand, };
1400
+ export { buildNpmUpdateArgs, detectCometPackageScope, detectInstalledCometLanguage, detectInstalledCometTargets, formatNpmUpdateCommand, formatSkillUpdateCommand, resolveNpmSelfUpdatePlan, };
793
1401
  //# sourceMappingURL=update.js.map