@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.
- package/README.md +209 -74
- package/assets/manifest.json +14 -5
- package/assets/skills/comet/SKILL.md +17 -282
- package/assets/skills/comet/reference/comet-yaml-fields.md +1 -1
- package/assets/skills/comet/reference/context-recovery.md +3 -3
- package/assets/skills/comet/reference/intent-frame.md +2 -2
- package/assets/skills/comet/reference/scripts.md +2 -2
- package/assets/skills/comet/rules/comet-workflow-guard.en.md +32 -0
- package/assets/skills/comet/rules/comet-workflow-guard.md +32 -0
- package/assets/skills/comet/scripts/comet-entry-runtime.mjs +7834 -0
- package/assets/skills/comet/scripts/comet-hook-router.mjs +10307 -0
- package/assets/skills/comet/scripts/comet-runtime.mjs +612 -499
- package/assets/skills/comet-any/SKILL.md +4 -4
- package/assets/skills/comet-any/reference/authoring-subagents.md +1 -1
- package/assets/skills/comet-any/reference/bundle-authoring.md +1 -1
- package/assets/skills/comet-any/reference/subagents/reference-author.md +1 -1
- package/assets/skills/comet-any/reference/subagents/script-author.md +1 -1
- package/assets/skills/comet-any/reference/subagents/skill-core-author.md +1 -1
- package/assets/skills/comet-any/reference/subagents/skill-reviewer.md +2 -2
- package/assets/skills/comet-any/reference/subagents/workflow-entry-author.md +3 -3
- package/assets/skills/comet-archive/SKILL.md +1 -2
- package/assets/skills/comet-build/SKILL.md +1 -1
- package/assets/skills/comet-classic/SKILL.md +293 -0
- package/assets/skills/comet-design/SKILL.md +1 -1
- package/assets/skills/comet-hotfix/SKILL.md +4 -4
- package/assets/skills/comet-native/SKILL.md +257 -0
- package/assets/skills/comet-native/reference/artifacts.md +204 -0
- package/assets/skills/comet-native/reference/commands.md +118 -0
- package/assets/skills/comet-native/reference/recovery.md +143 -0
- package/assets/skills/comet-native/scripts/comet-native-hook-guard.mjs +4 -0
- package/assets/skills/comet-native/scripts/comet-native-runtime.mjs +28898 -0
- package/assets/skills/comet-open/SKILL.md +4 -4
- package/assets/skills/comet-tweak/SKILL.md +7 -7
- package/assets/skills-zh/comet/SKILL.md +17 -270
- package/assets/skills-zh/comet/reference/comet-yaml-fields.md +1 -1
- package/assets/skills-zh/comet/reference/context-recovery.md +3 -3
- package/assets/skills-zh/comet/reference/intent-frame.md +2 -2
- package/assets/skills-zh/comet/reference/scripts.md +2 -2
- package/assets/skills-zh/comet-any/SKILL.md +4 -4
- package/assets/skills-zh/comet-any/reference/authoring-subagents.md +1 -1
- package/assets/skills-zh/comet-any/reference/bundle-authoring.md +1 -1
- package/assets/skills-zh/comet-any/reference/subagents/reference-author.md +1 -1
- package/assets/skills-zh/comet-any/reference/subagents/script-author.md +1 -1
- package/assets/skills-zh/comet-any/reference/subagents/skill-core-author.md +1 -1
- package/assets/skills-zh/comet-any/reference/subagents/skill-reviewer.md +2 -2
- package/assets/skills-zh/comet-any/reference/subagents/workflow-entry-author.md +3 -3
- package/assets/skills-zh/comet-archive/SKILL.md +1 -2
- package/assets/skills-zh/comet-build/SKILL.md +1 -1
- package/assets/skills-zh/comet-classic/SKILL.md +281 -0
- package/assets/skills-zh/comet-design/SKILL.md +1 -1
- package/assets/skills-zh/comet-hotfix/SKILL.md +4 -4
- package/assets/skills-zh/comet-native/SKILL.md +257 -0
- package/assets/skills-zh/comet-native/reference/artifacts.md +206 -0
- package/assets/skills-zh/comet-native/reference/commands.md +118 -0
- package/assets/skills-zh/comet-native/reference/recovery.md +143 -0
- package/assets/skills-zh/comet-open/SKILL.md +4 -4
- package/assets/skills-zh/comet-tweak/SKILL.md +7 -7
- package/dist/app/cli/index.js +59 -13
- package/dist/app/cli/index.js.map +1 -1
- package/dist/app/commands/command-result.d.ts +6 -0
- package/dist/app/commands/command-result.d.ts.map +1 -0
- package/dist/app/commands/command-result.js +4 -0
- package/dist/app/commands/command-result.js.map +1 -0
- package/dist/app/commands/doctor.d.ts +1 -0
- package/dist/app/commands/doctor.d.ts.map +1 -1
- package/dist/app/commands/doctor.js +201 -26
- package/dist/app/commands/doctor.js.map +1 -1
- package/dist/app/commands/eval.d.ts +3 -1
- package/dist/app/commands/eval.d.ts.map +1 -1
- package/dist/app/commands/eval.js +17 -7
- package/dist/app/commands/eval.js.map +1 -1
- package/dist/app/commands/i18n.d.ts +1 -1
- package/dist/app/commands/i18n.d.ts.map +1 -1
- package/dist/app/commands/i18n.js +6 -2
- package/dist/app/commands/i18n.js.map +1 -1
- package/dist/app/commands/init.d.ts +10 -2
- package/dist/app/commands/init.d.ts.map +1 -1
- package/dist/app/commands/init.js +331 -50
- package/dist/app/commands/init.js.map +1 -1
- package/dist/app/commands/native.d.ts +2 -0
- package/dist/app/commands/native.d.ts.map +1 -0
- package/dist/app/commands/native.js +10 -0
- package/dist/app/commands/native.js.map +1 -0
- package/dist/app/commands/project-scope-selection.d.ts.map +1 -1
- package/dist/app/commands/project-scope-selection.js +2 -0
- package/dist/app/commands/project-scope-selection.js.map +1 -1
- package/dist/app/commands/resume-probe.d.ts.map +1 -1
- package/dist/app/commands/resume-probe.js +8 -2
- package/dist/app/commands/resume-probe.js.map +1 -1
- package/dist/app/commands/status.d.ts +0 -32
- package/dist/app/commands/status.d.ts.map +1 -1
- package/dist/app/commands/status.js +44 -177
- package/dist/app/commands/status.js.map +1 -1
- package/dist/app/commands/update.d.ts +20 -4
- package/dist/app/commands/update.d.ts.map +1 -1
- package/dist/app/commands/update.js +698 -90
- package/dist/app/commands/update.js.map +1 -1
- package/dist/app/commands/workflow.d.ts +6 -0
- package/dist/app/commands/workflow.d.ts.map +1 -0
- package/dist/app/commands/workflow.js +11 -0
- package/dist/app/commands/workflow.js.map +1 -0
- package/dist/config/repository-layout.json +21 -1
- package/dist/domains/comet-classic/classic-archive.d.ts.map +1 -1
- package/dist/domains/comet-classic/classic-archive.js +3 -0
- package/dist/domains/comet-classic/classic-archive.js.map +1 -1
- package/dist/domains/comet-classic/classic-current-change.d.ts +3 -5
- package/dist/domains/comet-classic/classic-current-change.d.ts.map +1 -1
- package/dist/domains/comet-classic/classic-current-change.js +31 -57
- package/dist/domains/comet-classic/classic-current-change.js.map +1 -1
- package/dist/domains/comet-classic/classic-hook-guard.d.ts +9 -0
- package/dist/domains/comet-classic/classic-hook-guard.d.ts.map +1 -1
- package/dist/domains/comet-classic/classic-hook-guard.js +84 -11
- package/dist/domains/comet-classic/classic-hook-guard.js.map +1 -1
- package/dist/domains/comet-classic/classic-project-config.d.ts.map +1 -1
- package/dist/domains/comet-classic/classic-project-config.js +12 -8
- package/dist/domains/comet-classic/classic-project-config.js.map +1 -1
- package/dist/domains/comet-classic/classic-runtime-run.d.ts.map +1 -1
- package/dist/domains/comet-classic/classic-runtime-run.js +9 -1
- package/dist/domains/comet-classic/classic-runtime-run.js.map +1 -1
- package/dist/domains/comet-entry/current-selection-repair.d.ts +17 -0
- package/dist/domains/comet-entry/current-selection-repair.d.ts.map +1 -0
- package/dist/domains/comet-entry/current-selection-repair.js +19 -0
- package/dist/domains/comet-entry/current-selection-repair.js.map +1 -0
- package/dist/domains/comet-entry/current-selection.d.ts +28 -0
- package/dist/domains/comet-entry/current-selection.d.ts.map +1 -0
- package/dist/domains/comet-entry/current-selection.js +116 -0
- package/dist/domains/comet-entry/current-selection.js.map +1 -0
- package/dist/domains/comet-entry/entry-runtime-entry.d.ts +2 -0
- package/dist/domains/comet-entry/entry-runtime-entry.d.ts.map +1 -0
- package/dist/domains/comet-entry/entry-runtime-entry.js +3 -0
- package/dist/domains/comet-entry/entry-runtime-entry.js.map +1 -0
- package/dist/domains/comet-entry/entry-runtime.d.ts +7 -0
- package/dist/domains/comet-entry/entry-runtime.d.ts.map +1 -0
- package/dist/domains/comet-entry/entry-runtime.js +55 -0
- package/dist/domains/comet-entry/entry-runtime.js.map +1 -0
- package/dist/domains/comet-entry/hook-adapter.d.ts +6 -0
- package/dist/domains/comet-entry/hook-adapter.d.ts.map +1 -0
- package/dist/domains/comet-entry/hook-adapter.js +202 -0
- package/dist/domains/comet-entry/hook-adapter.js.map +1 -0
- package/dist/domains/comet-entry/hook-router-entry.d.ts +8 -0
- package/dist/domains/comet-entry/hook-router-entry.d.ts.map +1 -0
- package/dist/domains/comet-entry/hook-router-entry.js +92 -0
- package/dist/domains/comet-entry/hook-router-entry.js.map +1 -0
- package/dist/domains/comet-entry/hook-router.d.ts +32 -0
- package/dist/domains/comet-entry/hook-router.d.ts.map +1 -0
- package/dist/domains/comet-entry/hook-router.js +133 -0
- package/dist/domains/comet-entry/hook-router.js.map +1 -0
- package/dist/domains/comet-entry/hook-types.d.ts +20 -0
- package/dist/domains/comet-entry/hook-types.d.ts.map +1 -0
- package/dist/domains/comet-entry/hook-types.js +2 -0
- package/dist/domains/comet-entry/hook-types.js.map +1 -0
- package/dist/domains/comet-entry/init-workflow.d.ts +16 -0
- package/dist/domains/comet-entry/init-workflow.d.ts.map +1 -0
- package/dist/domains/comet-entry/init-workflow.js +103 -0
- package/dist/domains/comet-entry/init-workflow.js.map +1 -0
- package/dist/domains/comet-entry/project-status.d.ts +3 -0
- package/dist/domains/comet-entry/project-status.d.ts.map +1 -0
- package/dist/domains/comet-entry/project-status.js +222 -0
- package/dist/domains/comet-entry/project-status.js.map +1 -0
- package/dist/domains/comet-entry/resolve-entry.d.ts +3 -0
- package/dist/domains/comet-entry/resolve-entry.d.ts.map +1 -0
- package/dist/domains/comet-entry/resolve-entry.js +22 -0
- package/dist/domains/comet-entry/resolve-entry.js.map +1 -0
- package/dist/domains/comet-entry/resume-probe.d.ts +34 -0
- package/dist/domains/comet-entry/resume-probe.d.ts.map +1 -0
- package/dist/domains/comet-entry/resume-probe.js +458 -0
- package/dist/domains/comet-entry/resume-probe.js.map +1 -0
- package/dist/domains/comet-entry/types.d.ts +59 -0
- package/dist/domains/comet-entry/types.d.ts.map +1 -0
- package/dist/domains/comet-entry/types.js +2 -0
- package/dist/domains/comet-entry/types.js.map +1 -0
- package/dist/domains/comet-entry/workflow-resolution.d.ts +8 -0
- package/dist/domains/comet-entry/workflow-resolution.d.ts.map +1 -0
- package/dist/domains/comet-entry/workflow-resolution.js +16 -0
- package/dist/domains/comet-entry/workflow-resolution.js.map +1 -0
- package/dist/domains/comet-native/index.d.ts +35 -0
- package/dist/domains/comet-native/index.d.ts.map +1 -0
- package/dist/domains/comet-native/index.js +35 -0
- package/dist/domains/comet-native/index.js.map +1 -0
- package/dist/domains/comet-native/native-acceptance.d.ts +42 -0
- package/dist/domains/comet-native/native-acceptance.d.ts.map +1 -0
- package/dist/domains/comet-native/native-acceptance.js +503 -0
- package/dist/domains/comet-native/native-acceptance.js.map +1 -0
- package/dist/domains/comet-native/native-archive-content.d.ts +26 -0
- package/dist/domains/comet-native/native-archive-content.d.ts.map +1 -0
- package/dist/domains/comet-native/native-archive-content.js +159 -0
- package/dist/domains/comet-native/native-archive-content.js.map +1 -0
- package/dist/domains/comet-native/native-archive-inspection.d.ts +9 -0
- package/dist/domains/comet-native/native-archive-inspection.d.ts.map +1 -0
- package/dist/domains/comet-native/native-archive-inspection.js +94 -0
- package/dist/domains/comet-native/native-archive-inspection.js.map +1 -0
- package/dist/domains/comet-native/native-archive-preflight.d.ts +52 -0
- package/dist/domains/comet-native/native-archive-preflight.d.ts.map +1 -0
- package/dist/domains/comet-native/native-archive-preflight.js +214 -0
- package/dist/domains/comet-native/native-archive-preflight.js.map +1 -0
- package/dist/domains/comet-native/native-archive-transaction.d.ts +19 -0
- package/dist/domains/comet-native/native-archive-transaction.d.ts.map +1 -0
- package/dist/domains/comet-native/native-archive-transaction.js +1181 -0
- package/dist/domains/comet-native/native-archive-transaction.js.map +1 -0
- package/dist/domains/comet-native/native-archive.d.ts +36 -0
- package/dist/domains/comet-native/native-archive.d.ts.map +1 -0
- package/dist/domains/comet-native/native-archive.js +403 -0
- package/dist/domains/comet-native/native-archive.js.map +1 -0
- package/dist/domains/comet-native/native-artifacts.d.ts +10 -0
- package/dist/domains/comet-native/native-artifacts.d.ts.map +1 -0
- package/dist/domains/comet-native/native-artifacts.js +204 -0
- package/dist/domains/comet-native/native-artifacts.js.map +1 -0
- package/dist/domains/comet-native/native-atomic-file.d.ts +10 -0
- package/dist/domains/comet-native/native-atomic-file.d.ts.map +1 -0
- package/dist/domains/comet-native/native-atomic-file.js +175 -0
- package/dist/domains/comet-native/native-atomic-file.js.map +1 -0
- package/dist/domains/comet-native/native-bounded-file.d.ts +19 -0
- package/dist/domains/comet-native/native-bounded-file.d.ts.map +1 -0
- package/dist/domains/comet-native/native-bounded-file.js +180 -0
- package/dist/domains/comet-native/native-bounded-file.js.map +1 -0
- package/dist/domains/comet-native/native-build-evidence.d.ts +42 -0
- package/dist/domains/comet-native/native-build-evidence.d.ts.map +1 -0
- package/dist/domains/comet-native/native-build-evidence.js +257 -0
- package/dist/domains/comet-native/native-build-evidence.js.map +1 -0
- package/dist/domains/comet-native/native-canonical-hash.d.ts +10 -0
- package/dist/domains/comet-native/native-canonical-hash.d.ts.map +1 -0
- package/dist/domains/comet-native/native-canonical-hash.js +100 -0
- package/dist/domains/comet-native/native-canonical-hash.js.map +1 -0
- package/dist/domains/comet-native/native-change-recovery.d.ts +11 -0
- package/dist/domains/comet-native/native-change-recovery.d.ts.map +1 -0
- package/dist/domains/comet-native/native-change-recovery.js +15 -0
- package/dist/domains/comet-native/native-change-recovery.js.map +1 -0
- package/dist/domains/comet-native/native-change.d.ts +61 -0
- package/dist/domains/comet-native/native-change.d.ts.map +1 -0
- package/dist/domains/comet-native/native-change.js +696 -0
- package/dist/domains/comet-native/native-change.js.map +1 -0
- package/dist/domains/comet-native/native-check-receipt-model.d.ts +63 -0
- package/dist/domains/comet-native/native-check-receipt-model.d.ts.map +1 -0
- package/dist/domains/comet-native/native-check-receipt-model.js +347 -0
- package/dist/domains/comet-native/native-check-receipt-model.js.map +1 -0
- package/dist/domains/comet-native/native-check-receipt-storage.d.ts +10 -0
- package/dist/domains/comet-native/native-check-receipt-storage.d.ts.map +1 -0
- package/dist/domains/comet-native/native-check-receipt-storage.js +196 -0
- package/dist/domains/comet-native/native-check-receipt-storage.js.map +1 -0
- package/dist/domains/comet-native/native-check-receipt.d.ts +19 -0
- package/dist/domains/comet-native/native-check-receipt.d.ts.map +1 -0
- package/dist/domains/comet-native/native-check-receipt.js +446 -0
- package/dist/domains/comet-native/native-check-receipt.js.map +1 -0
- package/dist/domains/comet-native/native-check.d.ts +18 -0
- package/dist/domains/comet-native/native-check.d.ts.map +1 -0
- package/dist/domains/comet-native/native-check.js +29 -0
- package/dist/domains/comet-native/native-check.js.map +1 -0
- package/dist/domains/comet-native/native-checkpoint-journal.d.ts +13 -0
- package/dist/domains/comet-native/native-checkpoint-journal.d.ts.map +1 -0
- package/dist/domains/comet-native/native-checkpoint-journal.js +53 -0
- package/dist/domains/comet-native/native-checkpoint-journal.js.map +1 -0
- package/dist/domains/comet-native/native-checkpoint-storage.d.ts +43 -0
- package/dist/domains/comet-native/native-checkpoint-storage.d.ts.map +1 -0
- package/dist/domains/comet-native/native-checkpoint-storage.js +487 -0
- package/dist/domains/comet-native/native-checkpoint-storage.js.map +1 -0
- package/dist/domains/comet-native/native-cli-entry.d.ts +2 -0
- package/dist/domains/comet-native/native-cli-entry.d.ts.map +1 -0
- package/dist/domains/comet-native/native-cli-entry.js +18 -0
- package/dist/domains/comet-native/native-cli-entry.js.map +1 -0
- package/dist/domains/comet-native/native-cli.d.ts +7 -0
- package/dist/domains/comet-native/native-cli.d.ts.map +1 -0
- package/dist/domains/comet-native/native-cli.js +642 -0
- package/dist/domains/comet-native/native-cli.js.map +1 -0
- package/dist/domains/comet-native/native-config.d.ts +15 -0
- package/dist/domains/comet-native/native-config.d.ts.map +1 -0
- package/dist/domains/comet-native/native-config.js +281 -0
- package/dist/domains/comet-native/native-config.js.map +1 -0
- package/dist/domains/comet-native/native-conflict-inspection.d.ts +17 -0
- package/dist/domains/comet-native/native-conflict-inspection.d.ts.map +1 -0
- package/dist/domains/comet-native/native-conflict-inspection.js +90 -0
- package/dist/domains/comet-native/native-conflict-inspection.js.map +1 -0
- package/dist/domains/comet-native/native-conflict-radar.d.ts +75 -0
- package/dist/domains/comet-native/native-conflict-radar.d.ts.map +1 -0
- package/dist/domains/comet-native/native-conflict-radar.js +326 -0
- package/dist/domains/comet-native/native-conflict-radar.js.map +1 -0
- package/dist/domains/comet-native/native-continuation.d.ts +9 -0
- package/dist/domains/comet-native/native-continuation.d.ts.map +1 -0
- package/dist/domains/comet-native/native-continuation.js +146 -0
- package/dist/domains/comet-native/native-continuation.js.map +1 -0
- package/dist/domains/comet-native/native-contract-files.d.ts +24 -0
- package/dist/domains/comet-native/native-contract-files.d.ts.map +1 -0
- package/dist/domains/comet-native/native-contract-files.js +66 -0
- package/dist/domains/comet-native/native-contract-files.js.map +1 -0
- package/dist/domains/comet-native/native-contract.d.ts +41 -0
- package/dist/domains/comet-native/native-contract.d.ts.map +1 -0
- package/dist/domains/comet-native/native-contract.js +141 -0
- package/dist/domains/comet-native/native-contract.js.map +1 -0
- package/dist/domains/comet-native/native-diagnostics.d.ts +18 -0
- package/dist/domains/comet-native/native-diagnostics.d.ts.map +1 -0
- package/dist/domains/comet-native/native-diagnostics.js +522 -0
- package/dist/domains/comet-native/native-diagnostics.js.map +1 -0
- package/dist/domains/comet-native/native-doctor.d.ts +12 -0
- package/dist/domains/comet-native/native-doctor.d.ts.map +1 -0
- package/dist/domains/comet-native/native-doctor.js +768 -0
- package/dist/domains/comet-native/native-doctor.js.map +1 -0
- package/dist/domains/comet-native/native-evidence-retention.d.ts +37 -0
- package/dist/domains/comet-native/native-evidence-retention.d.ts.map +1 -0
- package/dist/domains/comet-native/native-evidence-retention.js +885 -0
- package/dist/domains/comet-native/native-evidence-retention.js.map +1 -0
- package/dist/domains/comet-native/native-evidence-storage.d.ts +41 -0
- package/dist/domains/comet-native/native-evidence-storage.d.ts.map +1 -0
- package/dist/domains/comet-native/native-evidence-storage.js +351 -0
- package/dist/domains/comet-native/native-evidence-storage.js.map +1 -0
- package/dist/domains/comet-native/native-findings.d.ts +8 -0
- package/dist/domains/comet-native/native-findings.d.ts.map +1 -0
- package/dist/domains/comet-native/native-findings.js +238 -0
- package/dist/domains/comet-native/native-findings.js.map +1 -0
- package/dist/domains/comet-native/native-guards.d.ts +7 -0
- package/dist/domains/comet-native/native-guards.d.ts.map +1 -0
- package/dist/domains/comet-native/native-guards.js +126 -0
- package/dist/domains/comet-native/native-guards.js.map +1 -0
- package/dist/domains/comet-native/native-hash.d.ts +3 -0
- package/dist/domains/comet-native/native-hash.d.ts.map +1 -0
- package/dist/domains/comet-native/native-hash.js +12 -0
- package/dist/domains/comet-native/native-hash.js.map +1 -0
- package/dist/domains/comet-native/native-hook-guard.d.ts +17 -0
- package/dist/domains/comet-native/native-hook-guard.d.ts.map +1 -0
- package/dist/domains/comet-native/native-hook-guard.js +154 -0
- package/dist/domains/comet-native/native-hook-guard.js.map +1 -0
- package/dist/domains/comet-native/native-lock.d.ts +47 -0
- package/dist/domains/comet-native/native-lock.d.ts.map +1 -0
- package/dist/domains/comet-native/native-lock.js +395 -0
- package/dist/domains/comet-native/native-lock.js.map +1 -0
- package/dist/domains/comet-native/native-mutation-lock.d.ts +5 -0
- package/dist/domains/comet-native/native-mutation-lock.d.ts.map +1 -0
- package/dist/domains/comet-native/native-mutation-lock.js +66 -0
- package/dist/domains/comet-native/native-mutation-lock.js.map +1 -0
- package/dist/domains/comet-native/native-paths.d.ts +10 -0
- package/dist/domains/comet-native/native-paths.d.ts.map +1 -0
- package/dist/domains/comet-native/native-paths.js +171 -0
- package/dist/domains/comet-native/native-paths.js.map +1 -0
- package/dist/domains/comet-native/native-progress-checkpoint.d.ts +13 -0
- package/dist/domains/comet-native/native-progress-checkpoint.d.ts.map +1 -0
- package/dist/domains/comet-native/native-progress-checkpoint.js +104 -0
- package/dist/domains/comet-native/native-progress-checkpoint.js.map +1 -0
- package/dist/domains/comet-native/native-protected-file.d.ts +113 -0
- package/dist/domains/comet-native/native-protected-file.d.ts.map +1 -0
- package/dist/domains/comet-native/native-protected-file.js +509 -0
- package/dist/domains/comet-native/native-protected-file.js.map +1 -0
- package/dist/domains/comet-native/native-redaction.d.ts +2 -0
- package/dist/domains/comet-native/native-redaction.d.ts.map +1 -0
- package/dist/domains/comet-native/native-redaction.js +18 -0
- package/dist/domains/comet-native/native-redaction.js.map +1 -0
- package/dist/domains/comet-native/native-repair-integration.d.ts +42 -0
- package/dist/domains/comet-native/native-repair-integration.d.ts.map +1 -0
- package/dist/domains/comet-native/native-repair-integration.js +184 -0
- package/dist/domains/comet-native/native-repair-integration.js.map +1 -0
- package/dist/domains/comet-native/native-repair-runtime.d.ts +73 -0
- package/dist/domains/comet-native/native-repair-runtime.d.ts.map +1 -0
- package/dist/domains/comet-native/native-repair-runtime.js +509 -0
- package/dist/domains/comet-native/native-repair-runtime.js.map +1 -0
- package/dist/domains/comet-native/native-repair-stagnation.d.ts +85 -0
- package/dist/domains/comet-native/native-repair-stagnation.d.ts.map +1 -0
- package/dist/domains/comet-native/native-repair-stagnation.js +256 -0
- package/dist/domains/comet-native/native-repair-stagnation.js.map +1 -0
- package/dist/domains/comet-native/native-resume-view.d.ts +14 -0
- package/dist/domains/comet-native/native-resume-view.d.ts.map +1 -0
- package/dist/domains/comet-native/native-resume-view.js +105 -0
- package/dist/domains/comet-native/native-resume-view.js.map +1 -0
- package/dist/domains/comet-native/native-revision.d.ts +20 -0
- package/dist/domains/comet-native/native-revision.d.ts.map +1 -0
- package/dist/domains/comet-native/native-revision.js +32 -0
- package/dist/domains/comet-native/native-revision.js.map +1 -0
- package/dist/domains/comet-native/native-root-move.d.ts +20 -0
- package/dist/domains/comet-native/native-root-move.d.ts.map +1 -0
- package/dist/domains/comet-native/native-root-move.js +812 -0
- package/dist/domains/comet-native/native-root-move.js.map +1 -0
- package/dist/domains/comet-native/native-run-consistency.d.ts +3 -0
- package/dist/domains/comet-native/native-run-consistency.d.ts.map +1 -0
- package/dist/domains/comet-native/native-run-consistency.js +136 -0
- package/dist/domains/comet-native/native-run-consistency.js.map +1 -0
- package/dist/domains/comet-native/native-run-store.d.ts +41 -0
- package/dist/domains/comet-native/native-run-store.d.ts.map +1 -0
- package/dist/domains/comet-native/native-run-store.js +451 -0
- package/dist/domains/comet-native/native-run-store.js.map +1 -0
- package/dist/domains/comet-native/native-runtime-package.d.ts +16 -0
- package/dist/domains/comet-native/native-runtime-package.d.ts.map +1 -0
- package/dist/domains/comet-native/native-runtime-package.js +72 -0
- package/dist/domains/comet-native/native-runtime-package.js.map +1 -0
- package/dist/domains/comet-native/native-schema-migration.d.ts +11 -0
- package/dist/domains/comet-native/native-schema-migration.d.ts.map +1 -0
- package/dist/domains/comet-native/native-schema-migration.js +899 -0
- package/dist/domains/comet-native/native-schema-migration.js.map +1 -0
- package/dist/domains/comet-native/native-selection.d.ts +12 -0
- package/dist/domains/comet-native/native-selection.d.ts.map +1 -0
- package/dist/domains/comet-native/native-selection.js +52 -0
- package/dist/domains/comet-native/native-selection.js.map +1 -0
- package/dist/domains/comet-native/native-sensitive-paths.d.ts +7 -0
- package/dist/domains/comet-native/native-sensitive-paths.d.ts.map +1 -0
- package/dist/domains/comet-native/native-sensitive-paths.js +69 -0
- package/dist/domains/comet-native/native-sensitive-paths.js.map +1 -0
- package/dist/domains/comet-native/native-snapshot.d.ts +74 -0
- package/dist/domains/comet-native/native-snapshot.d.ts.map +1 -0
- package/dist/domains/comet-native/native-snapshot.js +2308 -0
- package/dist/domains/comet-native/native-snapshot.js.map +1 -0
- package/dist/domains/comet-native/native-specs.d.ts +12 -0
- package/dist/domains/comet-native/native-specs.d.ts.map +1 -0
- package/dist/domains/comet-native/native-specs.js +270 -0
- package/dist/domains/comet-native/native-specs.js.map +1 -0
- package/dist/domains/comet-native/native-trajectory-limits.d.ts +7 -0
- package/dist/domains/comet-native/native-trajectory-limits.d.ts.map +1 -0
- package/dist/domains/comet-native/native-trajectory-limits.js +13 -0
- package/dist/domains/comet-native/native-trajectory-limits.js.map +1 -0
- package/dist/domains/comet-native/native-trajectory-recovery.d.ts +37 -0
- package/dist/domains/comet-native/native-trajectory-recovery.d.ts.map +1 -0
- package/dist/domains/comet-native/native-trajectory-recovery.js +133 -0
- package/dist/domains/comet-native/native-trajectory-recovery.js.map +1 -0
- package/dist/domains/comet-native/native-trajectory.d.ts +16 -0
- package/dist/domains/comet-native/native-trajectory.d.ts.map +1 -0
- package/dist/domains/comet-native/native-trajectory.js +27 -0
- package/dist/domains/comet-native/native-trajectory.js.map +1 -0
- package/dist/domains/comet-native/native-transaction.d.ts +45 -0
- package/dist/domains/comet-native/native-transaction.d.ts.map +1 -0
- package/dist/domains/comet-native/native-transaction.js +846 -0
- package/dist/domains/comet-native/native-transaction.js.map +1 -0
- package/dist/domains/comet-native/native-transition-evidence.d.ts +4 -0
- package/dist/domains/comet-native/native-transition-evidence.d.ts.map +1 -0
- package/dist/domains/comet-native/native-transition-evidence.js +20 -0
- package/dist/domains/comet-native/native-transition-evidence.js.map +1 -0
- package/dist/domains/comet-native/native-transition-journal.d.ts +30 -0
- package/dist/domains/comet-native/native-transition-journal.d.ts.map +1 -0
- package/dist/domains/comet-native/native-transition-journal.js +819 -0
- package/dist/domains/comet-native/native-transition-journal.js.map +1 -0
- package/dist/domains/comet-native/native-transitions.d.ts +13 -0
- package/dist/domains/comet-native/native-transitions.d.ts.map +1 -0
- package/dist/domains/comet-native/native-transitions.js +632 -0
- package/dist/domains/comet-native/native-transitions.js.map +1 -0
- package/dist/domains/comet-native/native-types.d.ts +547 -0
- package/dist/domains/comet-native/native-types.d.ts.map +1 -0
- package/dist/domains/comet-native/native-types.js +8 -0
- package/dist/domains/comet-native/native-types.js.map +1 -0
- package/dist/domains/comet-native/native-verification-evidence.d.ts +86 -0
- package/dist/domains/comet-native/native-verification-evidence.d.ts.map +1 -0
- package/dist/domains/comet-native/native-verification-evidence.js +480 -0
- package/dist/domains/comet-native/native-verification-evidence.js.map +1 -0
- package/dist/domains/comet-native/native-verification-runtime.d.ts +58 -0
- package/dist/domains/comet-native/native-verification-runtime.d.ts.map +1 -0
- package/dist/domains/comet-native/native-verification-runtime.js +321 -0
- package/dist/domains/comet-native/native-verification-runtime.js.map +1 -0
- package/dist/domains/comet-native/native-verification-scope.d.ts +117 -0
- package/dist/domains/comet-native/native-verification-scope.d.ts.map +1 -0
- package/dist/domains/comet-native/native-verification-scope.js +1040 -0
- package/dist/domains/comet-native/native-verification-scope.js.map +1 -0
- package/dist/domains/comet-native/native-workspace.d.ts +46 -0
- package/dist/domains/comet-native/native-workspace.d.ts.map +1 -0
- package/dist/domains/comet-native/native-workspace.js +276 -0
- package/dist/domains/comet-native/native-workspace.js.map +1 -0
- package/dist/domains/dashboard/collector.d.ts.map +1 -1
- package/dist/domains/dashboard/collector.js +9 -1
- package/dist/domains/dashboard/collector.js.map +1 -1
- package/dist/domains/dashboard/native-adapter.d.ts +157 -0
- package/dist/domains/dashboard/native-adapter.d.ts.map +1 -0
- package/dist/domains/dashboard/native-adapter.js +302 -0
- package/dist/domains/dashboard/native-adapter.js.map +1 -0
- package/dist/domains/dashboard/native-collector.d.ts +6 -0
- package/dist/domains/dashboard/native-collector.d.ts.map +1 -0
- package/dist/domains/dashboard/native-collector.js +285 -0
- package/dist/domains/dashboard/native-collector.js.map +1 -0
- package/dist/domains/dashboard/types.d.ts +5 -0
- package/dist/domains/dashboard/types.d.ts.map +1 -1
- package/dist/domains/dashboard/web/assets/{arc-TGVUG2WN.js → arc-CxdiLJ50.js} +1 -1
- package/dist/domains/dashboard/web/assets/{architectureDiagram-3BPJPVTR-ASHmiHoP.js → architectureDiagram-3BPJPVTR-D5YCQu4e.js} +1 -1
- package/dist/domains/dashboard/web/assets/{blockDiagram-GPEHLZMM-CwASxBKe.js → blockDiagram-GPEHLZMM-8NfdCOQ8.js} +1 -1
- package/dist/domains/dashboard/web/assets/{c4Diagram-AAUBKEIU-BU8z_WNk.js → c4Diagram-AAUBKEIU-B3cFnNT7.js} +1 -1
- package/dist/domains/dashboard/web/assets/channel-B6AFly29.js +1 -0
- package/dist/domains/dashboard/web/assets/{chunk-2J33WTMH-CBGlUx4_.js → chunk-2J33WTMH-CBNfW-Dr.js} +1 -1
- package/dist/domains/dashboard/web/assets/{chunk-4BX2VUAB-CS-iGcFz.js → chunk-4BX2VUAB-vWyemRBr.js} +1 -1
- package/dist/domains/dashboard/web/assets/{chunk-55IACEB6-BUtCVJat.js → chunk-55IACEB6-H6haOo2C.js} +1 -1
- package/dist/domains/dashboard/web/assets/{chunk-727SXJPM-C94tj_pf.js → chunk-727SXJPM-D02UjGND.js} +1 -1
- package/dist/domains/dashboard/web/assets/{chunk-AQP2D5EJ-BFOKcpdG.js → chunk-AQP2D5EJ-wKsbOw_T.js} +1 -1
- package/dist/domains/dashboard/web/assets/{chunk-FMBD7UC4-Dmx8B-st.js → chunk-FMBD7UC4-eYFEZimP.js} +1 -1
- package/dist/domains/dashboard/web/assets/{chunk-ND2GUHAM-DYV00CNn.js → chunk-ND2GUHAM-fMaIDDI2.js} +1 -1
- package/dist/domains/dashboard/web/assets/{chunk-QZHKN3VN-DMJJyQnw.js → chunk-QZHKN3VN-C9rhF6Hm.js} +1 -1
- package/dist/domains/dashboard/web/assets/classDiagram-4FO5ZUOK-BcnrxOTt.js +1 -0
- package/dist/domains/dashboard/web/assets/classDiagram-v2-Q7XG4LA2-BcnrxOTt.js +1 -0
- package/dist/domains/dashboard/web/assets/{cose-bilkent-S5V4N54A-P4nE2rea.js → cose-bilkent-S5V4N54A-CbaShPub.js} +1 -1
- package/dist/domains/dashboard/web/assets/{cynefin-VYW2F7L2-C-R1HXDv.js → cynefin-VYW2F7L2-DN4emAQv.js} +1 -1
- package/dist/domains/dashboard/web/assets/{dagre-BM42HDAG-BH8d-C9z.js → dagre-BM42HDAG-BpSzbk_V.js} +1 -1
- package/dist/domains/dashboard/web/assets/demo-BuVau32v.js +25 -0
- package/dist/domains/dashboard/web/assets/{diagram-2AECGRRQ-DpXTgQIH.js → diagram-2AECGRRQ-CfXwGGpQ.js} +1 -1
- package/dist/domains/dashboard/web/assets/{diagram-5GNKFQAL-DSiFJzSw.js → diagram-5GNKFQAL-DMp0Zmot.js} +1 -1
- package/dist/domains/dashboard/web/assets/{diagram-KO2AKTUF-DULMkben.js → diagram-KO2AKTUF-C7ZvofsM.js} +1 -1
- package/dist/domains/dashboard/web/assets/{diagram-LMA3HP47-Pi8m_NO9.js → diagram-LMA3HP47-BjmxFnap.js} +1 -1
- package/dist/domains/dashboard/web/assets/{diagram-OG6HWLK6-BSe6bCWm.js → diagram-OG6HWLK6-DFBG1Iqy.js} +1 -1
- package/dist/domains/dashboard/web/assets/{erDiagram-TEJ5UH35-zb-FEcbq.js → erDiagram-TEJ5UH35-MpNT7dzt.js} +1 -1
- package/dist/domains/dashboard/web/assets/{flowDiagram-I6XJVG4X-Dr-Gk0z2.js → flowDiagram-I6XJVG4X-_1wAR6c1.js} +1 -1
- package/dist/domains/dashboard/web/assets/{ganttDiagram-6RSMTGT7-qs6Zb2A6.js → ganttDiagram-6RSMTGT7-DJKjDeWl.js} +1 -1
- package/dist/domains/dashboard/web/assets/{gitGraphDiagram-PVQCEYII-BQ314orT.js → gitGraphDiagram-PVQCEYII-BL7yUEn-.js} +1 -1
- package/dist/domains/dashboard/web/assets/index-CjE9mHGb.js +24 -0
- package/dist/domains/dashboard/web/assets/index-D-AGxvI4.css +1 -0
- package/dist/domains/dashboard/web/assets/{infoDiagram-5YYISTIA-O0bQp98A.js → infoDiagram-5YYISTIA-Bt5fqrOd.js} +1 -1
- package/dist/domains/dashboard/web/assets/{ishikawaDiagram-YF4QCWOH-BPC7wbKh.js → ishikawaDiagram-YF4QCWOH-COCMcjBM.js} +1 -1
- package/dist/domains/dashboard/web/assets/{journeyDiagram-JHISSGLW-ohViOd4b.js → journeyDiagram-JHISSGLW-DGcpcWny.js} +1 -1
- package/dist/domains/dashboard/web/assets/{kanban-definition-UN3LZRKU-CHleNdbG.js → kanban-definition-UN3LZRKU-QSBNsWMP.js} +1 -1
- package/dist/domains/dashboard/web/assets/{linear-CyqiW--Q.js → linear-9uyeeBZf.js} +1 -1
- package/dist/domains/dashboard/web/assets/{mermaid.core-qS9XvtaK.js → mermaid.core-CkNdB471.js} +4 -4
- package/dist/domains/dashboard/web/assets/{mindmap-definition-RKZ34NQL-oaGkqO9l.js → mindmap-definition-RKZ34NQL-CiNxI0gP.js} +1 -1
- package/dist/domains/dashboard/web/assets/{pieDiagram-4H26LBE5-CPcB-AFh.js → pieDiagram-4H26LBE5-BLJ6QnRO.js} +1 -1
- package/dist/domains/dashboard/web/assets/{quadrantDiagram-W4KKPZXB-LFy52Qtj.js → quadrantDiagram-W4KKPZXB-CflW-eFH.js} +1 -1
- package/dist/domains/dashboard/web/assets/{requirementDiagram-4Y6WPE33-BdjeaYP_.js → requirementDiagram-4Y6WPE33-B9HLmRWH.js} +1 -1
- package/dist/domains/dashboard/web/assets/{sankeyDiagram-5OEKKPKP-DDJ4styL.js → sankeyDiagram-5OEKKPKP-6xnco5k5.js} +1 -1
- package/dist/domains/dashboard/web/assets/{sequenceDiagram-3UESZ5HK-BL5bFNoz.js → sequenceDiagram-3UESZ5HK-Dp1rujNZ.js} +1 -1
- package/dist/domains/dashboard/web/assets/{stateDiagram-AJRCARHV-BNUfikui.js → stateDiagram-AJRCARHV-C1Xc90ek.js} +1 -1
- package/dist/domains/dashboard/web/assets/stateDiagram-v2-BHNVJYJU-p-qmzXyE.js +1 -0
- package/dist/domains/dashboard/web/assets/{timeline-definition-PNZ67QCA--ps2uu6L.js → timeline-definition-PNZ67QCA-g9s-m5Z4.js} +1 -1
- package/dist/domains/dashboard/web/assets/{vennDiagram-CIIHVFJN-C2q8q26c.js → vennDiagram-CIIHVFJN-rkEyhyCc.js} +1 -1
- package/dist/domains/dashboard/web/assets/{wardleyDiagram-YWT4CUSO-BUH9gXqd.js → wardleyDiagram-YWT4CUSO-CJLrWGXc.js} +1 -1
- package/dist/domains/dashboard/web/assets/{xychartDiagram-2RQKCTM6-B-DielEy.js → xychartDiagram-2RQKCTM6-BxJvPNqo.js} +1 -1
- package/dist/domains/dashboard/web/index.html +2 -2
- package/dist/domains/engine/storage-layout.d.ts +14 -0
- package/dist/domains/engine/storage-layout.d.ts.map +1 -0
- package/dist/domains/engine/storage-layout.js +32 -0
- package/dist/domains/engine/storage-layout.js.map +1 -0
- package/dist/domains/engine/storage-run.d.ts +9 -0
- package/dist/domains/engine/storage-run.d.ts.map +1 -0
- package/dist/domains/engine/storage-run.js +116 -0
- package/dist/domains/engine/storage-run.js.map +1 -0
- package/dist/domains/factory/package.d.ts.map +1 -1
- package/dist/domains/factory/package.js +5 -3
- package/dist/domains/factory/package.js.map +1 -1
- package/dist/domains/integrations/openspec.d.ts.map +1 -1
- package/dist/domains/integrations/openspec.js +8 -6
- package/dist/domains/integrations/openspec.js.map +1 -1
- package/dist/domains/skill/platform-inspect.d.ts +6 -2
- package/dist/domains/skill/platform-inspect.d.ts.map +1 -1
- package/dist/domains/skill/platform-inspect.js +52 -8
- package/dist/domains/skill/platform-inspect.js.map +1 -1
- package/dist/domains/skill/platform-install.d.ts +18 -7
- package/dist/domains/skill/platform-install.d.ts.map +1 -1
- package/dist/domains/skill/platform-install.js +338 -71
- package/dist/domains/skill/platform-install.js.map +1 -1
- package/dist/domains/skill/project-instructions.d.ts.map +1 -1
- package/dist/domains/skill/project-instructions.js +12 -6
- package/dist/domains/skill/project-instructions.js.map +1 -1
- package/dist/domains/skill/uninstall.d.ts.map +1 -1
- package/dist/domains/skill/uninstall.js +15 -3
- package/dist/domains/skill/uninstall.js.map +1 -1
- package/dist/domains/workflow-contract/builtins.d.ts +6 -0
- package/dist/domains/workflow-contract/builtins.d.ts.map +1 -1
- package/dist/domains/workflow-contract/builtins.js +137 -0
- package/dist/domains/workflow-contract/builtins.js.map +1 -1
- package/dist/domains/workflow-contract/index.d.ts +3 -1
- package/dist/domains/workflow-contract/index.d.ts.map +1 -1
- package/dist/domains/workflow-contract/index.js +2 -1
- package/dist/domains/workflow-contract/index.js.map +1 -1
- package/dist/domains/workflow-contract/normalize.d.ts.map +1 -1
- package/dist/domains/workflow-contract/normalize.js +28 -10
- package/dist/domains/workflow-contract/normalize.js.map +1 -1
- package/dist/domains/workflow-contract/project-config.d.ts +7 -0
- package/dist/domains/workflow-contract/project-config.d.ts.map +1 -0
- package/dist/domains/workflow-contract/project-config.js +110 -0
- package/dist/domains/workflow-contract/project-config.js.map +1 -0
- package/dist/domains/workflow-contract/types.d.ts +4 -2
- package/dist/domains/workflow-contract/types.d.ts.map +1 -1
- package/dist/domains/workflow-contract/validation.d.ts.map +1 -1
- package/dist/domains/workflow-contract/validation.js +14 -5
- package/dist/domains/workflow-contract/validation.js.map +1 -1
- package/dist/platform/install/detect.d.ts +3 -1
- package/dist/platform/install/detect.d.ts.map +1 -1
- package/dist/platform/install/detect.js +4 -1
- package/dist/platform/install/detect.js.map +1 -1
- package/dist/platform/install/project-registry.js +2 -2
- package/dist/platform/install/project-registry.js.map +1 -1
- package/dist/platform/paths/repository-layout.d.ts +16 -0
- package/dist/platform/paths/repository-layout.d.ts.map +1 -1
- package/dist/platform/paths/repository-layout.js.map +1 -1
- package/eval/local/README.md +50 -0
- package/eval/local/scripts/compare_baselines.py +127 -1
- package/eval/local/scripts/regression_check.py +3 -4
- package/eval/local/tasks/comet-native-clarification/environment/Dockerfile +27 -0
- package/eval/local/tasks/comet-native-clarification/environment/test_wordcount.py +25 -0
- package/eval/local/tasks/comet-native-clarification/environment/wordcount.py +36 -0
- package/eval/local/tasks/comet-native-clarification/instruction.md +7 -0
- package/eval/local/tasks/comet-native-clarification/task.toml +40 -0
- package/eval/local/tasks/comet-native-clarification/validation/test_native_clarification.py +193 -0
- package/eval/local/tasks/comet-native-clarification-modes/environment/Dockerfile +27 -0
- package/eval/local/tasks/comet-native-clarification-modes/environment/test_wordcount.py +25 -0
- package/eval/local/tasks/comet-native-clarification-modes/environment/wordcount.py +36 -0
- package/eval/local/tasks/comet-native-clarification-modes/instruction.md +13 -0
- package/eval/local/tasks/comet-native-clarification-modes/task.toml +39 -0
- package/eval/local/tasks/comet-native-clarification-modes/validation/test_native_clarification_modes.py +235 -0
- package/eval/local/tasks/comet-native-interrupted-transition/environment/.comet/config.yaml +6 -0
- package/eval/local/tasks/comet-native-interrupted-transition/environment/Dockerfile +28 -0
- package/eval/local/tasks/comet-native-interrupted-transition/environment/docs/comet/changes/add-character-counting/brief.md +17 -0
- package/eval/local/tasks/comet-native-interrupted-transition/environment/docs/comet/changes/add-character-counting/comet-state.yaml +12 -0
- package/eval/local/tasks/comet-native-interrupted-transition/environment/docs/comet/changes/add-character-counting/runtime/transition.json +69 -0
- package/eval/local/tasks/comet-native-interrupted-transition/environment/docs/comet/changes/add-character-counting/specs/character-counting/spec.md +3 -0
- package/eval/local/tasks/comet-native-interrupted-transition/environment/test_wordcount.py +20 -0
- package/eval/local/tasks/comet-native-interrupted-transition/environment/wordcount.py +27 -0
- package/eval/local/tasks/comet-native-interrupted-transition/instruction.md +7 -0
- package/eval/local/tasks/comet-native-interrupted-transition/task.toml +35 -0
- package/eval/local/tasks/comet-native-interrupted-transition/validation/test_native_interrupted_transition.py +63 -0
- package/eval/local/tasks/comet-native-repository-fact/environment/Dockerfile +26 -0
- package/eval/local/tasks/comet-native-repository-fact/environment/PRODUCT_RULES.md +3 -0
- package/eval/local/tasks/comet-native-repository-fact/environment/test_wordcount.py +20 -0
- package/eval/local/tasks/comet-native-repository-fact/environment/wordcount.py +27 -0
- package/eval/local/tasks/comet-native-repository-fact/instruction.md +7 -0
- package/eval/local/tasks/comet-native-repository-fact/task.toml +35 -0
- package/eval/local/tasks/comet-native-repository-fact/validation/test_native_repository_fact.py +53 -0
- package/eval/local/tasks/comet-native-wave-b-decision-resume/environment/Dockerfile +27 -0
- package/eval/local/tasks/comet-native-wave-b-decision-resume/environment/test_wordcount.py +27 -0
- package/eval/local/tasks/comet-native-wave-b-decision-resume/environment/wordcount.py +36 -0
- package/eval/local/tasks/comet-native-wave-b-decision-resume/instruction.md +9 -0
- package/eval/local/tasks/comet-native-wave-b-decision-resume/task.toml +40 -0
- package/eval/local/tasks/comet-native-wave-b-decision-resume/validation/test_native_wave_b_decision_resume.py +208 -0
- package/eval/local/tasks/comet-native-wave-c-verification-integrity/environment/Dockerfile +27 -0
- package/eval/local/tasks/comet-native-wave-c-verification-integrity/environment/test_wordcount.py +27 -0
- package/eval/local/tasks/comet-native-wave-c-verification-integrity/environment/wordcount.py +36 -0
- package/eval/local/tasks/comet-native-wave-c-verification-integrity/instruction.md +11 -0
- package/eval/local/tasks/comet-native-wave-c-verification-integrity/task.toml +36 -0
- package/eval/local/tasks/comet-native-wave-c-verification-integrity/validation/test_native_wave_c_verification_integrity.py +344 -0
- package/eval/local/tasks/comet-native-wave-d-stagnation-stop/environment/Dockerfile +27 -0
- package/eval/local/tasks/comet-native-wave-d-stagnation-stop/environment/test_wordcount.py +27 -0
- package/eval/local/tasks/comet-native-wave-d-stagnation-stop/environment/wordcount.py +36 -0
- package/eval/local/tasks/comet-native-wave-d-stagnation-stop/instruction.md +11 -0
- package/eval/local/tasks/comet-native-wave-d-stagnation-stop/task.toml +37 -0
- package/eval/local/tasks/comet-native-wave-d-stagnation-stop/validation/test_native_wave_d_stagnation_stop.py +284 -0
- package/eval/local/tasks/comet-native-wave-e-parallel-safety/environment/.include-trusted-native-runtime +1 -0
- package/eval/local/tasks/comet-native-wave-e-parallel-safety/environment/Dockerfile +27 -0
- package/eval/local/tasks/comet-native-wave-e-parallel-safety/environment/test_wordcount.py +27 -0
- package/eval/local/tasks/comet-native-wave-e-parallel-safety/environment/wordcount.py +36 -0
- package/eval/local/tasks/comet-native-wave-e-parallel-safety/instruction.md +9 -0
- package/eval/local/tasks/comet-native-wave-e-parallel-safety/task.toml +37 -0
- package/eval/local/tasks/comet-native-wave-e-parallel-safety/validation/test_native_wave_e_parallel_safety.py +309 -0
- package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/environment/.include-current-comet-cli +1 -0
- package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/environment/Dockerfile +31 -0
- package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/environment/current-comet-package.json +18 -0
- package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/environment/current-comet.sh +14 -0
- package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/environment/test_wordcount.py +27 -0
- package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/environment/wordcount.py +36 -0
- package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/instruction.md +7 -0
- package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/task.toml +36 -0
- package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/validation/test_native_wave_f_dashboard_readonly.py +469 -0
- package/eval/local/tasks/comet-native-workflow/environment/Dockerfile +27 -0
- package/eval/local/tasks/comet-native-workflow/environment/test_wordcount.py +25 -0
- package/eval/local/tasks/comet-native-workflow/environment/wordcount.py +36 -0
- package/eval/local/tasks/comet-native-workflow/instruction.md +14 -0
- package/eval/local/tasks/comet-native-workflow/task.toml +36 -0
- package/eval/local/tasks/comet-native-workflow/validation/test_native_workflow.py +149 -0
- package/eval/local/tasks/index.yaml +61 -0
- package/eval/local/tests/conftest.py +407 -22
- package/eval/local/tests/scaffold/test_aligned_comparison.py +1012 -0
- package/eval/local/tests/scaffold/test_conftest_helpers.py +187 -7
- package/eval/local/tests/scaffold/test_logging.py +135 -1
- package/eval/local/tests/scaffold/test_manifests.py +2 -0
- package/eval/local/tests/scaffold/test_native_aligned_eval.py +346 -0
- package/eval/local/tests/scaffold/test_native_wave_evaluations.py +1889 -0
- package/eval/local/tests/scaffold/test_profiles.py +33 -0
- package/eval/local/tests/scaffold/test_sample_quality.py +57 -0
- package/eval/local/tests/scaffold/test_tasks.py +377 -1
- package/eval/local/tests/scaffold/test_treatments.py +59 -13
- package/eval/local/tests/scaffold/test_utils.py +277 -4
- package/eval/local/tests/tasks/__init__.py +1 -0
- package/eval/local/tests/tasks/test_tasks.py +104 -78
- package/eval/local/tests/tasks/test_validation_scripts.py +37 -0
- package/eval/local/treatments/comet/comet_native_phase1.yaml +66 -0
- package/eval/scaffold/python/aligned_comparison.py +1631 -0
- package/eval/scaffold/python/generic_llm_judge.py +3 -1
- package/eval/scaffold/python/llm_judge.py +0 -3
- package/eval/scaffold/python/logging.py +115 -16
- package/eval/scaffold/python/manifests.py +2 -0
- package/eval/scaffold/python/native_eval.py +138 -0
- package/eval/scaffold/python/pass_at_k.py +0 -1
- package/eval/scaffold/python/report_outputs.py +226 -44
- package/eval/scaffold/python/sample_quality.py +45 -2
- package/eval/scaffold/python/tasks.py +11 -0
- package/eval/scaffold/python/utils.py +108 -20
- package/eval/scaffold/python/validation/__init__.py +15 -5
- package/eval/scaffold/python/validation/comet_workflow.py +10 -5
- package/eval/scaffold/python/validation/generic_rubric.py +1 -2
- package/eval/scaffold/python/validation/native_wave.py +2154 -0
- package/eval/scaffold/python/validation/native_workflow.py +252 -0
- package/eval/scaffold/python/validation/rubric.py +0 -2
- package/eval/scaffold/shell/completion-point.sh +18 -0
- package/eval/scaffold/shell/decision-point.sh +35 -0
- package/eval/scaffold/shell/docker.sh +150 -9
- package/eval/scaffold/shell/run-claude-loop.sh +57 -27
- package/package.json +19 -5
- package/dist/domains/dashboard/web/assets/channel-kp6Ng2JJ.js +0 -1
- package/dist/domains/dashboard/web/assets/classDiagram-4FO5ZUOK-yBDjgMY_.js +0 -1
- package/dist/domains/dashboard/web/assets/classDiagram-v2-Q7XG4LA2-yBDjgMY_.js +0 -1
- package/dist/domains/dashboard/web/assets/demo-DQyfozbi.js +0 -1
- package/dist/domains/dashboard/web/assets/index-BLAfkNTu.css +0 -1
- package/dist/domains/dashboard/web/assets/index-DtLUOcAW.js +0 -24
- package/dist/domains/dashboard/web/assets/stateDiagram-v2-BHNVJYJU-DGrsmWts.js +0 -1
- package/eval/.env.example +0 -52
- 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 {
|
|
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
|
-
|
|
23
|
-
|
|
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',
|
|
148
|
-
: ['install',
|
|
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
|
|
174
|
-
|
|
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
|
-
|
|
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
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
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:
|
|
186
|
-
shell:
|
|
311
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
312
|
+
shell: false,
|
|
187
313
|
});
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
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
|
-
|
|
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:
|
|
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
|
|
234
|
-
|
|
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(
|
|
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
|
-
|
|
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 (!
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
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
|
-
|
|
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:
|
|
868
|
+
scope: skipPackageSelfUpdate ? 'skipped' : packageScope,
|
|
359
869
|
status: npmStatus,
|
|
360
|
-
command:
|
|
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,
|
|
897
|
+
log(` $ ${formatSkillUpdateCommand(target.scope, target.platform, languageSkillsDir, targetInstallMode)}`);
|
|
377
898
|
}
|
|
378
|
-
|
|
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
|
|
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,
|
|
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 :
|
|
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:
|
|
1118
|
+
scope: skipPackageSelfUpdate ? 'skipped' : packageScope,
|
|
574
1119
|
status: npmStatus,
|
|
575
|
-
command:
|
|
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 (
|
|
624
|
-
|
|
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: '
|
|
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 (
|
|
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 (
|
|
1260
|
+
if (hasUpdateFailures(result)) {
|
|
710
1261
|
results.push({
|
|
711
1262
|
projectPath,
|
|
712
1263
|
status: 'failed',
|
|
713
|
-
reason:
|
|
1264
|
+
reason: collectCommandFailures(result)
|
|
1265
|
+
.map((failure) => failure.reason)
|
|
1266
|
+
.join('; '),
|
|
714
1267
|
targets: summarizeUpdatedTargets(result.skills.targets),
|
|
715
|
-
failures:
|
|
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 (
|
|
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
|
-
|
|
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 (!
|
|
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
|