@rpamis/comet 0.4.0-beta.6 → 0.4.0-beta.8
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/LICENSE +21 -21
- 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 +7855 -0
- package/assets/skills/comet/scripts/comet-hook-router.mjs +10336 -0
- package/assets/skills/comet/scripts/comet-runtime.mjs +615 -501
- 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 +28969 -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/bundle/bundle-platform.d.ts.map +1 -1
- package/dist/domains/bundle/bundle-platform.js +1 -1
- package/dist/domains/bundle/bundle-platform.js.map +1 -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-guard.d.ts.map +1 -1
- package/dist/domains/comet-classic/classic-guard.js +3 -2
- package/dist/domains/comet-classic/classic-guard.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 +1180 -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 +179 -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 +184 -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 +200 -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 +449 -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 +887 -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 +355 -0
- package/dist/domains/comet-native/native-evidence-storage.js.map +1 -0
- package/dist/domains/comet-native/native-file-identity.d.ts +9 -0
- package/dist/domains/comet-native/native-file-identity.d.ts.map +1 -0
- package/dist/domains/comet-native/native-file-identity.js +21 -0
- package/dist/domains/comet-native/native-file-identity.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 +398 -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 +510 -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 +452 -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 +2312 -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 +16 -16
- 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/pyproject.toml +4 -4
- 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 +26 -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
|
@@ -5,11 +5,23 @@ import { fileURLToPath } from 'url';
|
|
|
5
5
|
import { parseDocument } from 'yaml';
|
|
6
6
|
import { fileExists, readJson, copyFile, ensureDir } from '../../platform/fs/file-system.js';
|
|
7
7
|
import { getPlatformConfigDir, getPlatformSkillsDir, } from '../../platform/install/platforms.js';
|
|
8
|
-
import {
|
|
8
|
+
import { resolveArtifactLanguage } from './languages.js';
|
|
9
9
|
import { installCometProjectInstructions } from './project-instructions.js';
|
|
10
10
|
import { readJsonObjectFile } from './json-object.js';
|
|
11
|
+
import { projectConfigComment, renderStructuredProjectConfig, } from '../workflow-contract/project-config.js';
|
|
11
12
|
const __filename = fileURLToPath(import.meta.url);
|
|
12
13
|
const __dirname = path.dirname(__filename);
|
|
14
|
+
const HOOK_ROUTER_SCRIPT = 'comet/scripts/comet-hook-router.mjs';
|
|
15
|
+
const LEGACY_HOOK_SCRIPTS = [
|
|
16
|
+
'comet/scripts/comet-hook-guard.mjs',
|
|
17
|
+
'comet-native/scripts/comet-native-hook-guard.mjs',
|
|
18
|
+
];
|
|
19
|
+
const LEGACY_RULE_FILES = ['comet-phase-guard.md', 'comet-native-phase-guard.md'];
|
|
20
|
+
const NATIVE_SHARED_SKILL_PATHS = new Set([
|
|
21
|
+
'comet/SKILL.md',
|
|
22
|
+
'comet/scripts/comet-entry-runtime.mjs',
|
|
23
|
+
'comet/scripts/comet-hook-router.mjs',
|
|
24
|
+
]);
|
|
13
25
|
function planSkillDirectoryCopy(files, destinationRoot) {
|
|
14
26
|
return files
|
|
15
27
|
.map((file) => ({
|
|
@@ -21,12 +33,27 @@ function planSkillDirectoryCopy(files, destinationRoot) {
|
|
|
21
33
|
function getManagedSkillPaths(manifest) {
|
|
22
34
|
return [...new Set([...manifest.skills, ...(manifest.internalSkills ?? [])])];
|
|
23
35
|
}
|
|
36
|
+
function isManagedSkillPathForSelection(skillPath, workflowSelection) {
|
|
37
|
+
if (workflowSelection === 'both')
|
|
38
|
+
return true;
|
|
39
|
+
if (workflowSelection === 'classic')
|
|
40
|
+
return !skillPath.startsWith('comet-native/');
|
|
41
|
+
return (NATIVE_SHARED_SKILL_PATHS.has(skillPath) ||
|
|
42
|
+
skillPath.startsWith('comet-native/') ||
|
|
43
|
+
skillPath.startsWith('comet-any/'));
|
|
44
|
+
}
|
|
45
|
+
function getManagedSkillPathsForSelection(manifest, workflowSelection) {
|
|
46
|
+
return getManagedSkillPaths(manifest).filter((skillPath) => isManagedSkillPathForSelection(skillPath, workflowSelection));
|
|
47
|
+
}
|
|
48
|
+
function getUserFacingSkillPathsForSelection(manifest, workflowSelection) {
|
|
49
|
+
return manifest.skills.filter((skillPath) => isManagedSkillPathForSelection(skillPath, workflowSelection));
|
|
50
|
+
}
|
|
24
51
|
function getUserFacingSkillNames(manifest) {
|
|
25
52
|
return getTopLevelSkillNames(manifest.skills);
|
|
26
53
|
}
|
|
27
|
-
function getManagedSkillReplacementPaths(manifest) {
|
|
54
|
+
function getManagedSkillReplacementPaths(manifest, workflowSelection = 'both') {
|
|
28
55
|
const allowed = new Set();
|
|
29
|
-
for (const skillPath of
|
|
56
|
+
for (const skillPath of getManagedSkillPathsForSelection(manifest, workflowSelection)) {
|
|
30
57
|
const parts = skillPath.split('/').filter(Boolean);
|
|
31
58
|
for (let depth = 1; depth <= parts.length; depth++) {
|
|
32
59
|
allowed.add(parts.slice(0, depth).join('/'));
|
|
@@ -34,9 +61,9 @@ function getManagedSkillReplacementPaths(manifest) {
|
|
|
34
61
|
}
|
|
35
62
|
return allowed;
|
|
36
63
|
}
|
|
37
|
-
function getManagedSkillTopLevelEntries(manifest) {
|
|
64
|
+
function getManagedSkillTopLevelEntries(manifest, workflowSelection = 'both') {
|
|
38
65
|
const entries = new Set();
|
|
39
|
-
for (const skillPath of
|
|
66
|
+
for (const skillPath of getManagedSkillPathsForSelection(manifest, workflowSelection)) {
|
|
40
67
|
const [topLevel] = skillPath.split('/').filter(Boolean);
|
|
41
68
|
if (topLevel)
|
|
42
69
|
entries.add(topLevel);
|
|
@@ -138,11 +165,89 @@ async function lstatOrNull(filePath) {
|
|
|
138
165
|
return await lstat(filePath);
|
|
139
166
|
}
|
|
140
167
|
catch (err) {
|
|
141
|
-
|
|
168
|
+
const code = err.code;
|
|
169
|
+
if (code === 'ENOENT' || code === 'ENOTDIR')
|
|
142
170
|
return null;
|
|
143
171
|
throw err;
|
|
144
172
|
}
|
|
145
173
|
}
|
|
174
|
+
async function prepareManagedSkillCopyTarget(baseDir, platform, scope = 'project', workflowSelection = 'both') {
|
|
175
|
+
const manifest = await readManifest();
|
|
176
|
+
const managedEntries = new Set(getManagedSkillTopLevelEntries(manifest, workflowSelection));
|
|
177
|
+
const skillsRoot = path.join(baseDir, getPlatformSkillsDir(platform, scope), 'skills');
|
|
178
|
+
const rootStat = await lstatOrNull(skillsRoot);
|
|
179
|
+
if (!rootStat)
|
|
180
|
+
return;
|
|
181
|
+
if (rootStat.isSymbolicLink()) {
|
|
182
|
+
let linkedEntries = [];
|
|
183
|
+
try {
|
|
184
|
+
linkedEntries = await readdir(skillsRoot);
|
|
185
|
+
}
|
|
186
|
+
catch (error) {
|
|
187
|
+
if (error.code !== 'ENOENT')
|
|
188
|
+
throw error;
|
|
189
|
+
}
|
|
190
|
+
const unmanagedEntries = linkedEntries.filter((entry) => !managedEntries.has(entry));
|
|
191
|
+
if (unmanagedEntries.length > 0) {
|
|
192
|
+
throw new Error(`Refusing to replace ${skillsRoot} with managed copies because the linked directory contains unmanaged entries: ${unmanagedEntries.join(', ')}`);
|
|
193
|
+
}
|
|
194
|
+
await unlink(skillsRoot);
|
|
195
|
+
await ensureDir(skillsRoot);
|
|
196
|
+
return;
|
|
197
|
+
}
|
|
198
|
+
if (!rootStat.isDirectory())
|
|
199
|
+
return;
|
|
200
|
+
for (const entry of managedEntries) {
|
|
201
|
+
const entryPath = path.join(skillsRoot, entry);
|
|
202
|
+
const entryStat = await lstatOrNull(entryPath);
|
|
203
|
+
if (entryStat?.isSymbolicLink()) {
|
|
204
|
+
await unlink(entryPath);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
async function prepareNativeSkillInstallTarget(baseDir, platform, scope, languageSkillsDir, action) {
|
|
209
|
+
if (action !== 'skip') {
|
|
210
|
+
await prepareManagedSkillCopyTarget(baseDir, platform, scope, 'native');
|
|
211
|
+
}
|
|
212
|
+
if (action === 'overwrite')
|
|
213
|
+
return;
|
|
214
|
+
const skillsRoot = path.join(baseDir, getPlatformSkillsDir(platform, scope), 'skills');
|
|
215
|
+
const assetsDir = getAssetsDir();
|
|
216
|
+
const manifest = await readManifest();
|
|
217
|
+
const requiredFiles = getManagedSkillPaths(manifest)
|
|
218
|
+
.filter((relativePath) => relativePath === 'comet/SKILL.md' ||
|
|
219
|
+
relativePath === 'comet/scripts/comet-entry-runtime.mjs' ||
|
|
220
|
+
relativePath === 'comet/scripts/comet-hook-router.mjs' ||
|
|
221
|
+
relativePath.startsWith('comet-any/') ||
|
|
222
|
+
relativePath.startsWith('comet-native/'))
|
|
223
|
+
.map((relativePath) => {
|
|
224
|
+
const pathParts = relativePath.split('/');
|
|
225
|
+
const sourceDir = relativePath.includes('/scripts/') ? 'skills' : languageSkillsDir;
|
|
226
|
+
return {
|
|
227
|
+
label: `the required Native asset ${relativePath}`,
|
|
228
|
+
destination: path.join(skillsRoot, ...pathParts),
|
|
229
|
+
source: path.join(assetsDir, sourceDir, ...pathParts),
|
|
230
|
+
};
|
|
231
|
+
});
|
|
232
|
+
for (const required of requiredFiles) {
|
|
233
|
+
const destinationStat = await lstatOrNull(required.destination);
|
|
234
|
+
if (!destinationStat) {
|
|
235
|
+
if (action === 'fill')
|
|
236
|
+
continue;
|
|
237
|
+
throw new Error(`Cannot activate Native while skipping existing Comet files because ${required.label} is missing at ${required.destination}`);
|
|
238
|
+
}
|
|
239
|
+
if (!destinationStat.isFile()) {
|
|
240
|
+
throw new Error(`Cannot activate Native because ${required.label} is not a regular file at ${required.destination}; rerun with --overwrite after preserving any custom content`);
|
|
241
|
+
}
|
|
242
|
+
const [installed, bundled] = await Promise.all([
|
|
243
|
+
readFile(required.destination),
|
|
244
|
+
readFile(required.source),
|
|
245
|
+
]);
|
|
246
|
+
if (!installed.equals(bundled)) {
|
|
247
|
+
throw new Error(`Cannot activate Native because ${required.label} differs from the bundled routing contract at ${required.destination}; rerun with --overwrite after preserving any custom content`);
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
}
|
|
146
251
|
async function createSkillsSymlinks(targetRoot, linkRoot, managedEntries, topLevelEntries) {
|
|
147
252
|
const rootStat = await lstatOrNull(linkRoot);
|
|
148
253
|
if (!rootStat || rootStat.isSymbolicLink() || !rootStat.isDirectory()) {
|
|
@@ -169,7 +274,7 @@ async function createSkillsSymlinks(targetRoot, linkRoot, managedEntries, topLev
|
|
|
169
274
|
* 1. Copy skills to central store (.comet/skills/)
|
|
170
275
|
* 2. Create symlinks from the platform skills dir to central store
|
|
171
276
|
*/
|
|
172
|
-
async function installSkillsAsSymlink(baseDir, platform, overwrite, languageSkillsDir = 'skills', scope = 'project') {
|
|
277
|
+
async function installSkillsAsSymlink(baseDir, platform, overwrite, languageSkillsDir = 'skills', scope = 'project', workflowSelection = 'both') {
|
|
173
278
|
const centralDir = getCentralSkillsDir(baseDir, scope);
|
|
174
279
|
const assetsDir = getAssetsDir();
|
|
175
280
|
const manifestPath = path.join(assetsDir, 'manifest.json');
|
|
@@ -180,13 +285,15 @@ async function installSkillsAsSymlink(baseDir, platform, overwrite, languageSkil
|
|
|
180
285
|
if (!manifest || !Array.isArray(manifest.skills)) {
|
|
181
286
|
throw new Error(`Invalid manifest at ${manifestPath}: "skills" must be an array`);
|
|
182
287
|
}
|
|
183
|
-
const
|
|
184
|
-
const
|
|
288
|
+
const managedSkillPaths = getManagedSkillPathsForSelection(manifest, workflowSelection);
|
|
289
|
+
const userFacingSkillPaths = getUserFacingSkillPathsForSelection(manifest, workflowSelection);
|
|
290
|
+
const managedSkillReplacementPaths = getManagedSkillReplacementPaths(manifest, workflowSelection);
|
|
291
|
+
const managedSkillTopLevelEntries = getManagedSkillTopLevelEntries(manifest, workflowSelection);
|
|
185
292
|
// Step 1: Copy skills to central store
|
|
186
293
|
let copied = 0;
|
|
187
294
|
let skippedCount = 0;
|
|
188
295
|
let failedCount = 0;
|
|
189
|
-
for (const skillRelPath of
|
|
296
|
+
for (const skillRelPath of managedSkillPaths) {
|
|
190
297
|
const isScript = skillRelPath.includes('/scripts/');
|
|
191
298
|
const sourceDir = isScript ? 'skills' : languageSkillsDir;
|
|
192
299
|
const src = path.join(assetsDir, sourceDir, skillRelPath);
|
|
@@ -216,23 +323,23 @@ async function installSkillsAsSymlink(baseDir, platform, overwrite, languageSkil
|
|
|
216
323
|
}
|
|
217
324
|
// Handle OpenCode-style platform commands (still need copy, as command content may differ)
|
|
218
325
|
if (OPENCODE_STYLE_PLATFORM_IDS.has(platform.id)) {
|
|
219
|
-
const result = await createOpenCodeCommands(baseDir, platform,
|
|
326
|
+
const result = await createOpenCodeCommands(baseDir, platform, userFacingSkillPaths, overwrite, scope, languageSkillsDir);
|
|
220
327
|
copied += result.copied;
|
|
221
328
|
skippedCount += result.skipped;
|
|
222
329
|
failedCount += result.failed;
|
|
223
330
|
}
|
|
224
331
|
// Handle Pi platform command extension
|
|
225
332
|
if (platform.id === 'pi') {
|
|
226
|
-
const result = await createPiCommandExtension(baseDir, platform,
|
|
333
|
+
const result = await createPiCommandExtension(baseDir, platform, userFacingSkillPaths, overwrite, scope);
|
|
227
334
|
copied += result.copied;
|
|
228
335
|
skippedCount += result.skipped;
|
|
229
336
|
failedCount += result.failed;
|
|
230
337
|
}
|
|
231
338
|
return { copied, skipped: skippedCount, failed: failedCount };
|
|
232
339
|
}
|
|
233
|
-
async function copyCometSkillsForPlatform(baseDir, platform, overwrite, languageSkillsDir = 'skills', scope = 'project', installMode = 'copy') {
|
|
340
|
+
async function copyCometSkillsForPlatform(baseDir, platform, overwrite, languageSkillsDir = 'skills', scope = 'project', installMode = 'copy', workflowSelection = 'both') {
|
|
234
341
|
if (installMode === 'symlink') {
|
|
235
|
-
return installSkillsAsSymlink(baseDir, platform, overwrite, languageSkillsDir, scope);
|
|
342
|
+
return installSkillsAsSymlink(baseDir, platform, overwrite, languageSkillsDir, scope, workflowSelection);
|
|
236
343
|
}
|
|
237
344
|
const assetsDir = getAssetsDir();
|
|
238
345
|
const manifestPath = path.join(assetsDir, 'manifest.json');
|
|
@@ -246,7 +353,9 @@ async function copyCometSkillsForPlatform(baseDir, platform, overwrite, language
|
|
|
246
353
|
let copied = 0;
|
|
247
354
|
let skippedCount = 0;
|
|
248
355
|
let failedCount = 0;
|
|
249
|
-
|
|
356
|
+
const managedSkillPaths = getManagedSkillPathsForSelection(manifest, workflowSelection);
|
|
357
|
+
const userFacingSkillPaths = getUserFacingSkillPathsForSelection(manifest, workflowSelection);
|
|
358
|
+
for (const skillRelPath of managedSkillPaths) {
|
|
250
359
|
const isScript = skillRelPath.includes('/scripts/');
|
|
251
360
|
const sourceDir = isScript ? 'skills' : languageSkillsDir;
|
|
252
361
|
const src = path.join(assetsDir, sourceDir, skillRelPath);
|
|
@@ -269,13 +378,13 @@ async function copyCometSkillsForPlatform(baseDir, platform, overwrite, language
|
|
|
269
378
|
}
|
|
270
379
|
}
|
|
271
380
|
if (OPENCODE_STYLE_PLATFORM_IDS.has(platform.id)) {
|
|
272
|
-
const result = await createOpenCodeCommands(baseDir, platform,
|
|
381
|
+
const result = await createOpenCodeCommands(baseDir, platform, userFacingSkillPaths, overwrite, scope, languageSkillsDir);
|
|
273
382
|
copied += result.copied;
|
|
274
383
|
skippedCount += result.skipped;
|
|
275
384
|
failedCount += result.failed;
|
|
276
385
|
}
|
|
277
386
|
if (platform.id === 'pi') {
|
|
278
|
-
const result = await createPiCommandExtension(baseDir, platform,
|
|
387
|
+
const result = await createPiCommandExtension(baseDir, platform, userFacingSkillPaths, overwrite, scope);
|
|
279
388
|
copied += result.copied;
|
|
280
389
|
skippedCount += result.skipped;
|
|
281
390
|
failedCount += result.failed;
|
|
@@ -410,9 +519,9 @@ async function readManifest() {
|
|
|
410
519
|
const manifestPath = path.join(assetsDir, 'manifest.json');
|
|
411
520
|
return readJson(manifestPath);
|
|
412
521
|
}
|
|
413
|
-
async function getManifestSkills() {
|
|
522
|
+
async function getManifestSkills(workflowSelection = 'both') {
|
|
414
523
|
const manifest = await readManifest();
|
|
415
|
-
return
|
|
524
|
+
return getManagedSkillPathsForSelection(manifest, workflowSelection);
|
|
416
525
|
}
|
|
417
526
|
/**
|
|
418
527
|
* Copy Comet rule files to a platform's rules directory.
|
|
@@ -448,12 +557,21 @@ function selectRulePathsForLanguage(rulePaths, languageId) {
|
|
|
448
557
|
}
|
|
449
558
|
return [...selected.values()].map((entry) => entry.rulePath);
|
|
450
559
|
}
|
|
451
|
-
|
|
560
|
+
function managedRulesForSelection(manifest, _selection) {
|
|
561
|
+
return manifest.rules ?? [];
|
|
562
|
+
}
|
|
563
|
+
function managedHooksForSelection(manifest, _selection) {
|
|
564
|
+
return manifest.hooks ?? {};
|
|
565
|
+
}
|
|
566
|
+
function managedHookScriptPaths(hooksConfig) {
|
|
567
|
+
return [...new Set([...Object.keys(hooksConfig), ...LEGACY_HOOK_SCRIPTS])];
|
|
568
|
+
}
|
|
569
|
+
async function copyCometRulesForPlatform(baseDir, platform, overwrite, languageId, scope = 'project', workflowSelection = 'classic') {
|
|
452
570
|
if (!platform.rulesDir || !platform.rulesFormat) {
|
|
453
571
|
return { copied: 0, skipped: 0, failed: 0 };
|
|
454
572
|
}
|
|
455
573
|
const manifest = await readManifest();
|
|
456
|
-
const rulePaths = selectRulePathsForLanguage(manifest
|
|
574
|
+
const rulePaths = selectRulePathsForLanguage(managedRulesForSelection(manifest, workflowSelection), languageId);
|
|
457
575
|
if (!rulePaths || rulePaths.length === 0) {
|
|
458
576
|
return { copied: 0, skipped: 0, failed: 0 };
|
|
459
577
|
}
|
|
@@ -496,6 +614,20 @@ async function copyCometRulesForPlatform(baseDir, platform, overwrite, languageI
|
|
|
496
614
|
failed++;
|
|
497
615
|
}
|
|
498
616
|
}
|
|
617
|
+
const rulesDestDir = path.join(rulesBase, platform.rulesDir);
|
|
618
|
+
for (const legacyFile of LEGACY_RULE_FILES) {
|
|
619
|
+
const legacyPath = computeRuleDestPath(rulesDestDir, legacyFile, platform.rulesFormat);
|
|
620
|
+
try {
|
|
621
|
+
await rm(legacyPath, { force: true });
|
|
622
|
+
}
|
|
623
|
+
catch (error) {
|
|
624
|
+
const code = error.code;
|
|
625
|
+
if (code === 'ENOENT' || code === 'ENOTDIR')
|
|
626
|
+
continue;
|
|
627
|
+
console.error(` Failed to remove legacy Rule ${legacyPath}: ${error.message}`);
|
|
628
|
+
failed++;
|
|
629
|
+
}
|
|
630
|
+
}
|
|
499
631
|
return { copied, skipped: skippedCount, failed };
|
|
500
632
|
}
|
|
501
633
|
function computeRuleDestPath(rulesDestDir, ruleFileName, rulesFormat) {
|
|
@@ -543,7 +675,7 @@ ${content}`;
|
|
|
543
675
|
* 'copilot' — hooks/*.json with preToolUse
|
|
544
676
|
* 'kiro' — hooks/*.kiro.hook JSON files
|
|
545
677
|
*/
|
|
546
|
-
async function installCometHooksForPlatform(baseDir, platform, scope = 'project') {
|
|
678
|
+
async function installCometHooksForPlatform(baseDir, platform, scope = 'project', workflowSelection = 'classic') {
|
|
547
679
|
if (!platform.supportsHooks) {
|
|
548
680
|
return { status: 'skipped', reason: 'platform does not support hooks' };
|
|
549
681
|
}
|
|
@@ -555,7 +687,7 @@ async function installCometHooksForPlatform(baseDir, platform, scope = 'project'
|
|
|
555
687
|
}
|
|
556
688
|
try {
|
|
557
689
|
const manifest = await readManifest();
|
|
558
|
-
const hooksConfig = manifest
|
|
690
|
+
const hooksConfig = managedHooksForSelection(manifest, workflowSelection);
|
|
559
691
|
if (!hooksConfig || Object.keys(hooksConfig).length === 0) {
|
|
560
692
|
return { status: 'skipped', reason: 'no hooks defined in manifest' };
|
|
561
693
|
}
|
|
@@ -564,31 +696,47 @@ async function installCometHooksForPlatform(baseDir, platform, scope = 'project'
|
|
|
564
696
|
const platformBase = path.join(baseDir, getPlatformConfigDir(platform, scope));
|
|
565
697
|
switch (hookFormat) {
|
|
566
698
|
case 'claude-code': {
|
|
567
|
-
const result = await installClaudeCodeHooks(baseDir, platformBase, skillsDir, hooksConfig, platform.hookConfigFile ?? 'settings.local.json', platform.name);
|
|
699
|
+
const result = await installClaudeCodeHooks(baseDir, platformBase, skillsDir, hooksConfig, platform.hookConfigFile ?? 'settings.local.json', platform.name, { platformId: platform.id, scope });
|
|
568
700
|
if (result.status === 'installed') {
|
|
701
|
+
const failedLegacyFiles = [];
|
|
569
702
|
for (const legacyFile of platform.legacyHookConfigFiles ?? []) {
|
|
570
703
|
try {
|
|
571
|
-
await removeManagedHooksFromJsonFile(path.join(platformBase, legacyFile),
|
|
704
|
+
const cleanup = await removeManagedHooksFromJsonFile(path.join(platformBase, legacyFile), managedHookScriptPaths(hooksConfig));
|
|
705
|
+
if (cleanup.failed > 0)
|
|
706
|
+
failedLegacyFiles.push(legacyFile);
|
|
572
707
|
}
|
|
573
708
|
catch {
|
|
574
|
-
|
|
709
|
+
failedLegacyFiles.push(legacyFile);
|
|
575
710
|
}
|
|
576
711
|
}
|
|
712
|
+
if (failedLegacyFiles.length > 0) {
|
|
713
|
+
return {
|
|
714
|
+
status: 'installed',
|
|
715
|
+
reason: `legacy Hook cleanup failed for ${failedLegacyFiles.join(', ')}`,
|
|
716
|
+
cleanupFailed: failedLegacyFiles.length,
|
|
717
|
+
};
|
|
718
|
+
}
|
|
577
719
|
}
|
|
578
720
|
return result;
|
|
579
721
|
}
|
|
580
722
|
case 'qwen':
|
|
581
723
|
case 'qoder':
|
|
582
724
|
case 'codebuddy':
|
|
583
|
-
return await installQwenStyleHooks(baseDir, platformBase, skillsDir, hooksConfig, platform.name);
|
|
725
|
+
return await installQwenStyleHooks(baseDir, platformBase, skillsDir, hooksConfig, platform.name, { platformId: platform.id, scope });
|
|
584
726
|
case 'gemini':
|
|
585
|
-
return await installGeminiHooks(baseDir, platformBase, skillsDir, hooksConfig, platform.name);
|
|
727
|
+
return await installGeminiHooks(baseDir, platformBase, skillsDir, hooksConfig, platform.name, { platformId: platform.id, scope });
|
|
586
728
|
case 'windsurf':
|
|
587
|
-
return await installWindsurfHooks(baseDir, platformBase, skillsDir, hooksConfig, platform.name);
|
|
729
|
+
return await installWindsurfHooks(baseDir, platformBase, skillsDir, hooksConfig, platform.name, { platformId: platform.id, scope });
|
|
588
730
|
case 'copilot':
|
|
589
|
-
return await installCopilotHooks(baseDir, platformBase, skillsDir, hooksConfig
|
|
731
|
+
return await installCopilotHooks(baseDir, platformBase, skillsDir, hooksConfig, {
|
|
732
|
+
platformId: platform.id,
|
|
733
|
+
scope,
|
|
734
|
+
});
|
|
590
735
|
case 'kiro':
|
|
591
|
-
return await installKiroHooks(baseDir, platformBase, skillsDir, hooksConfig
|
|
736
|
+
return await installKiroHooks(baseDir, platformBase, skillsDir, hooksConfig, {
|
|
737
|
+
platformId: platform.id,
|
|
738
|
+
scope,
|
|
739
|
+
});
|
|
592
740
|
default:
|
|
593
741
|
return { status: 'failed', reason: `unsupported hook format: ${hookFormat}` };
|
|
594
742
|
}
|
|
@@ -601,10 +749,18 @@ function quoteCommandArg(value) {
|
|
|
601
749
|
return `"${value.replaceAll('\\', '/').replaceAll('"', '\\"')}"`;
|
|
602
750
|
}
|
|
603
751
|
/** Build a hook command that is stable even when the hook runner executes from a subdirectory. */
|
|
604
|
-
function buildHookCommand(baseDir, skillsDir, scriptRelPath) {
|
|
752
|
+
function buildHookCommand(baseDir, skillsDir, scriptRelPath, context) {
|
|
605
753
|
const projectRoot = path.resolve(baseDir);
|
|
606
754
|
const scriptPath = path.join(projectRoot, skillsDir, 'skills', ...scriptRelPath.split('/'));
|
|
607
|
-
|
|
755
|
+
let command = `node ${quoteCommandArg(scriptPath)}`;
|
|
756
|
+
if (scriptRelPath === HOOK_ROUTER_SCRIPT && context) {
|
|
757
|
+
command += ` --platform ${quoteCommandArg(context.platformId)}`;
|
|
758
|
+
if (context.scope === 'project') {
|
|
759
|
+
command += ` --project-root ${quoteCommandArg(projectRoot)}`;
|
|
760
|
+
}
|
|
761
|
+
return command;
|
|
762
|
+
}
|
|
763
|
+
return `${command} --project-root ${quoteCommandArg(projectRoot)}`;
|
|
608
764
|
}
|
|
609
765
|
function parseCommandTokens(command) {
|
|
610
766
|
const tokens = [];
|
|
@@ -780,12 +936,12 @@ async function readSettingsJsonObject(settingsPath, platformName) {
|
|
|
780
936
|
* Claude-shaped JSON format used by Claude Code, Codex, and Amazon Q.
|
|
781
937
|
* Defaults to settings.local.json; platform metadata may override the filename.
|
|
782
938
|
*/
|
|
783
|
-
async function installClaudeCodeHooks(baseDir, platformBase, skillsDir, hooksConfig, configFile, platformName) {
|
|
939
|
+
async function installClaudeCodeHooks(baseDir, platformBase, skillsDir, hooksConfig, configFile, platformName, context) {
|
|
784
940
|
const settingsPath = path.join(platformBase, configFile);
|
|
785
941
|
// Group by matcher so hooks sharing the same matcher are merged
|
|
786
942
|
const matcherGroups = {};
|
|
787
943
|
for (const [scriptRelPath, config] of Object.entries(hooksConfig)) {
|
|
788
|
-
const command = buildHookCommand(baseDir, skillsDir, scriptRelPath);
|
|
944
|
+
const command = buildHookCommand(baseDir, skillsDir, scriptRelPath, context);
|
|
789
945
|
if (!matcherGroups[config.matcher]) {
|
|
790
946
|
matcherGroups[config.matcher] = [];
|
|
791
947
|
}
|
|
@@ -795,7 +951,7 @@ async function installClaudeCodeHooks(baseDir, platformBase, skillsDir, hooksCon
|
|
|
795
951
|
const settings = await readSettingsJsonObject(settingsPath, platformName);
|
|
796
952
|
const existingHooks = settings.hooks ?? {};
|
|
797
953
|
const existingPreToolUse = asHookGroup(existingHooks.PreToolUse);
|
|
798
|
-
const merged = mergeHookGroups(existingPreToolUse, newEntries,
|
|
954
|
+
const merged = mergeHookGroups(existingPreToolUse, newEntries, managedHookScriptPaths(hooksConfig));
|
|
799
955
|
settings.hooks = { ...existingHooks, PreToolUse: merged };
|
|
800
956
|
await ensureDir(path.dirname(settingsPath));
|
|
801
957
|
await writeFile(settingsPath, JSON.stringify(settings, null, 2) + '\n', 'utf-8');
|
|
@@ -805,7 +961,7 @@ async function installClaudeCodeHooks(baseDir, platformBase, skillsDir, hooksCon
|
|
|
805
961
|
* Qwen Code / Qoder / CodeBuddy format:
|
|
806
962
|
* Writes to settings.json with { hooks: { PreToolUse: [{ matcher, hooks: [{ type, command }] }] } }
|
|
807
963
|
*/
|
|
808
|
-
async function installQwenStyleHooks(baseDir, platformBase, skillsDir, hooksConfig, platformName) {
|
|
964
|
+
async function installQwenStyleHooks(baseDir, platformBase, skillsDir, hooksConfig, platformName, context) {
|
|
809
965
|
const settingsPath = path.join(platformBase, 'settings.json');
|
|
810
966
|
// Group by matcher
|
|
811
967
|
const matcherGroups = {};
|
|
@@ -815,7 +971,7 @@ async function installQwenStyleHooks(baseDir, platformBase, skillsDir, hooksConf
|
|
|
815
971
|
}
|
|
816
972
|
matcherGroups[config.matcher].push({
|
|
817
973
|
type: 'command',
|
|
818
|
-
command: buildHookCommand(baseDir, skillsDir, scriptRelPath),
|
|
974
|
+
command: buildHookCommand(baseDir, skillsDir, scriptRelPath, context),
|
|
819
975
|
description: config.description,
|
|
820
976
|
});
|
|
821
977
|
}
|
|
@@ -826,7 +982,7 @@ async function installQwenStyleHooks(baseDir, platformBase, skillsDir, hooksConf
|
|
|
826
982
|
const settings = await readSettingsJsonObject(settingsPath, platformName);
|
|
827
983
|
const existingHooks = settings.hooks ?? {};
|
|
828
984
|
const existingPreToolUse = asHookGroup(existingHooks.PreToolUse);
|
|
829
|
-
const merged = mergeHookGroups(existingPreToolUse, preToolUseEntries,
|
|
985
|
+
const merged = mergeHookGroups(existingPreToolUse, preToolUseEntries, managedHookScriptPaths(hooksConfig));
|
|
830
986
|
settings.hooks = { ...existingHooks, PreToolUse: merged };
|
|
831
987
|
await ensureDir(path.dirname(settingsPath));
|
|
832
988
|
await writeFile(settingsPath, JSON.stringify(settings, null, 2) + '\n', 'utf-8');
|
|
@@ -836,7 +992,7 @@ async function installQwenStyleHooks(baseDir, platformBase, skillsDir, hooksConf
|
|
|
836
992
|
* Gemini CLI format:
|
|
837
993
|
* Writes to .gemini/settings.json with { hooks: { BeforeTool: [{ matcher, hooks: [{ type, command }] }] } }
|
|
838
994
|
*/
|
|
839
|
-
async function installGeminiHooks(baseDir, platformBase, skillsDir, hooksConfig, platformName) {
|
|
995
|
+
async function installGeminiHooks(baseDir, platformBase, skillsDir, hooksConfig, platformName, context) {
|
|
840
996
|
const settingsPath = path.join(platformBase, 'settings.json');
|
|
841
997
|
const entries = [];
|
|
842
998
|
for (const [scriptRelPath, config] of Object.entries(hooksConfig)) {
|
|
@@ -845,7 +1001,7 @@ async function installGeminiHooks(baseDir, platformBase, skillsDir, hooksConfig,
|
|
|
845
1001
|
hooks: [
|
|
846
1002
|
{
|
|
847
1003
|
type: 'command',
|
|
848
|
-
command: buildHookCommand(baseDir, skillsDir, scriptRelPath),
|
|
1004
|
+
command: buildHookCommand(baseDir, skillsDir, scriptRelPath, context),
|
|
849
1005
|
name: config.description,
|
|
850
1006
|
},
|
|
851
1007
|
],
|
|
@@ -854,7 +1010,7 @@ async function installGeminiHooks(baseDir, platformBase, skillsDir, hooksConfig,
|
|
|
854
1010
|
const settings = await readSettingsJsonObject(settingsPath, platformName);
|
|
855
1011
|
const existingHooks = settings.hooks ?? {};
|
|
856
1012
|
const existingBeforeTool = asHookGroup(existingHooks.BeforeTool);
|
|
857
|
-
const merged = mergeHookGroups(existingBeforeTool, entries,
|
|
1013
|
+
const merged = mergeHookGroups(existingBeforeTool, entries, managedHookScriptPaths(hooksConfig));
|
|
858
1014
|
settings.hooks = { ...existingHooks, BeforeTool: merged };
|
|
859
1015
|
await ensureDir(path.dirname(settingsPath));
|
|
860
1016
|
await writeFile(settingsPath, JSON.stringify(settings, null, 2) + '\n', 'utf-8');
|
|
@@ -864,12 +1020,12 @@ async function installGeminiHooks(baseDir, platformBase, skillsDir, hooksConfig,
|
|
|
864
1020
|
* Windsurf format:
|
|
865
1021
|
* Writes to .windsurf/hooks.json with { hooks: { pre_write_code: [{ command }] } }
|
|
866
1022
|
*/
|
|
867
|
-
async function installWindsurfHooks(baseDir, platformBase, skillsDir, hooksConfig, platformName) {
|
|
1023
|
+
async function installWindsurfHooks(baseDir, platformBase, skillsDir, hooksConfig, platformName, context) {
|
|
868
1024
|
const hooksPath = path.join(platformBase, 'hooks.json');
|
|
869
1025
|
const entries = [];
|
|
870
1026
|
for (const [scriptRelPath] of Object.entries(hooksConfig)) {
|
|
871
1027
|
entries.push({
|
|
872
|
-
command: buildHookCommand(baseDir, skillsDir, scriptRelPath),
|
|
1028
|
+
command: buildHookCommand(baseDir, skillsDir, scriptRelPath, context),
|
|
873
1029
|
show_output: true,
|
|
874
1030
|
});
|
|
875
1031
|
}
|
|
@@ -878,7 +1034,7 @@ async function installWindsurfHooks(baseDir, platformBase, skillsDir, hooksConfi
|
|
|
878
1034
|
const existingPreWrite = asHookGroup(existingHooks.pre_write_code);
|
|
879
1035
|
const merged = existingPreWrite.filter((entry) => {
|
|
880
1036
|
const command = entry && typeof entry === 'object' ? entry.command : undefined;
|
|
881
|
-
return !isManagedHookCommand(command,
|
|
1037
|
+
return !isManagedHookCommand(command, managedHookScriptPaths(hooksConfig));
|
|
882
1038
|
});
|
|
883
1039
|
merged.push(...entries);
|
|
884
1040
|
hooksFile.hooks = { ...existingHooks, pre_write_code: merged };
|
|
@@ -890,14 +1046,17 @@ async function installWindsurfHooks(baseDir, platformBase, skillsDir, hooksConfi
|
|
|
890
1046
|
* GitHub Copilot format:
|
|
891
1047
|
* Writes to .github/hooks/comet-guard.json with preToolUse hooks config.
|
|
892
1048
|
*/
|
|
893
|
-
async function installCopilotHooks(baseDir, platformBase, skillsDir, hooksConfig) {
|
|
1049
|
+
async function installCopilotHooks(baseDir, platformBase, skillsDir, hooksConfig, context) {
|
|
894
1050
|
const hooksDir = path.join(platformBase, 'hooks');
|
|
895
1051
|
const hookFilePath = path.join(hooksDir, 'comet-guard.json');
|
|
896
1052
|
const scriptEntries = [];
|
|
897
|
-
for (const [scriptRelPath] of Object.entries(hooksConfig)) {
|
|
898
|
-
const cmd = buildHookCommand(baseDir, skillsDir, scriptRelPath);
|
|
1053
|
+
for (const [scriptRelPath, config] of Object.entries(hooksConfig)) {
|
|
1054
|
+
const cmd = buildHookCommand(baseDir, skillsDir, scriptRelPath, context);
|
|
1055
|
+
const matcher = config.matcher === 'Write|Edit'
|
|
1056
|
+
? 'create|edit|str_replace_editor|apply_patch'
|
|
1057
|
+
: config.matcher;
|
|
899
1058
|
// Hook runs through node on every platform; both fields use the same command
|
|
900
|
-
scriptEntries.push({ bash: cmd, powershell: cmd });
|
|
1059
|
+
scriptEntries.push({ matcher, bash: cmd, powershell: cmd });
|
|
901
1060
|
}
|
|
902
1061
|
const hookConfig = {
|
|
903
1062
|
version: 1,
|
|
@@ -913,7 +1072,7 @@ async function installCopilotHooks(baseDir, platformBase, skillsDir, hooksConfig
|
|
|
913
1072
|
* Kiro format:
|
|
914
1073
|
* Writes to .kiro/hooks/comet-phase-guard.kiro.hook as a JSON file.
|
|
915
1074
|
*/
|
|
916
|
-
async function installKiroHooks(baseDir, platformBase, skillsDir, hooksConfig) {
|
|
1075
|
+
async function installKiroHooks(baseDir, platformBase, skillsDir, hooksConfig, context) {
|
|
917
1076
|
const hooksDir = path.join(platformBase, 'hooks');
|
|
918
1077
|
for (const [scriptRelPath, config] of Object.entries(hooksConfig)) {
|
|
919
1078
|
const hookFileName = path.basename(scriptRelPath).replace(/\.mjs$/, '.kiro.hook');
|
|
@@ -931,26 +1090,58 @@ async function installKiroHooks(baseDir, platformBase, skillsDir, hooksConfig) {
|
|
|
931
1090
|
},
|
|
932
1091
|
then: {
|
|
933
1092
|
type: 'runCommand',
|
|
934
|
-
command: buildHookCommand(baseDir, skillsDir, scriptRelPath),
|
|
1093
|
+
command: buildHookCommand(baseDir, skillsDir, scriptRelPath, context),
|
|
935
1094
|
},
|
|
936
1095
|
};
|
|
937
1096
|
await ensureDir(hooksDir);
|
|
938
1097
|
await writeFile(hookFilePath, JSON.stringify(hookConfig, null, 2) + '\n', 'utf-8');
|
|
939
1098
|
}
|
|
1099
|
+
for (const legacyScript of LEGACY_HOOK_SCRIPTS) {
|
|
1100
|
+
const legacyFile = path.join(hooksDir, path.basename(legacyScript).replace(/\.mjs$/u, '.kiro.hook'));
|
|
1101
|
+
await rm(legacyFile, { force: true });
|
|
1102
|
+
}
|
|
940
1103
|
return { status: 'installed' };
|
|
941
1104
|
}
|
|
942
1105
|
function managedConfigFields(language = 'en') {
|
|
943
1106
|
const artifactLanguage = resolveArtifactLanguage(language);
|
|
944
|
-
|
|
1107
|
+
const commentLanguage = artifactLanguage.id === 'zh-CN' ? 'zh-CN' : 'en';
|
|
1108
|
+
const top = [
|
|
1109
|
+
{
|
|
1110
|
+
key: 'ambient_resume',
|
|
1111
|
+
def: 'true',
|
|
1112
|
+
comment: projectConfigComment('ambient_resume', commentLanguage),
|
|
1113
|
+
},
|
|
1114
|
+
];
|
|
1115
|
+
const classic = [
|
|
945
1116
|
{
|
|
946
1117
|
key: 'language',
|
|
947
1118
|
def: artifactLanguage.id,
|
|
948
|
-
comment:
|
|
1119
|
+
comment: projectConfigComment('classic.language', commentLanguage),
|
|
1120
|
+
},
|
|
1121
|
+
{
|
|
1122
|
+
key: 'context_compression',
|
|
1123
|
+
def: 'off',
|
|
1124
|
+
comment: projectConfigComment('classic.context_compression', commentLanguage),
|
|
1125
|
+
},
|
|
1126
|
+
{
|
|
1127
|
+
key: 'review_mode',
|
|
1128
|
+
def: 'standard',
|
|
1129
|
+
comment: projectConfigComment('classic.review_mode', commentLanguage),
|
|
1130
|
+
},
|
|
1131
|
+
{
|
|
1132
|
+
key: 'auto_transition',
|
|
1133
|
+
def: 'true',
|
|
1134
|
+
comment: projectConfigComment('classic.auto_transition', commentLanguage),
|
|
949
1135
|
},
|
|
950
|
-
{ key: 'context_compression', def: 'off', comment: '# context_compression: off | beta' },
|
|
951
|
-
{ key: 'review_mode', def: 'standard', comment: '# review_mode: off | standard | thorough' },
|
|
952
|
-
{ key: 'auto_transition', def: 'true', comment: '# auto_transition: true | false' },
|
|
953
1136
|
];
|
|
1137
|
+
const native = [
|
|
1138
|
+
{
|
|
1139
|
+
key: 'clarification_mode',
|
|
1140
|
+
def: 'sequential',
|
|
1141
|
+
comment: projectConfigComment('native.clarification_mode', commentLanguage),
|
|
1142
|
+
},
|
|
1143
|
+
];
|
|
1144
|
+
return { top, native, classic };
|
|
954
1145
|
}
|
|
955
1146
|
const MANAGED_CONFIG_FIELDS = managedConfigFields();
|
|
956
1147
|
function getManagedConfigFields(language = 'en') {
|
|
@@ -975,36 +1166,112 @@ function parseProjectConfigOverrides(content) {
|
|
|
975
1166
|
}
|
|
976
1167
|
return out;
|
|
977
1168
|
}
|
|
1169
|
+
// Coerce the string forms captured by `parseProjectConfigOverrides` back into YAML scalars
|
|
1170
|
+
// so booleans render as bare true/false rather than quoted strings.
|
|
1171
|
+
function coerceConfigScalar(raw) {
|
|
1172
|
+
if (raw === 'true')
|
|
1173
|
+
return true;
|
|
1174
|
+
if (raw === 'false')
|
|
1175
|
+
return false;
|
|
1176
|
+
return raw;
|
|
1177
|
+
}
|
|
978
1178
|
// `language` is null when the caller has no definitive language selection to assert (e.g.
|
|
979
1179
|
// multiple platforms in the same scope disagree and no --language flag was given) — in that
|
|
980
1180
|
// case the existing config's language is preserved, falling back to 'en' only when absent.
|
|
981
|
-
// A non-null language always overwrites the managed `language` field: init/update
|
|
982
|
-
// specifically to persist the language the user just selected/installed.
|
|
1181
|
+
// A non-null language always overwrites the managed `classic.language` field: init/update
|
|
1182
|
+
// pass it specifically to persist the language the user just selected/installed.
|
|
983
1183
|
function renderProjectConfig(existing, language = null) {
|
|
984
1184
|
const resolvedLanguage = language ?? existing.language ?? 'en';
|
|
985
|
-
const lines = [];
|
|
986
1185
|
const fields = getManagedConfigFields(resolvedLanguage);
|
|
987
|
-
const
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
1186
|
+
const managedKeys = new Set([
|
|
1187
|
+
...fields.top.map((f) => f.key),
|
|
1188
|
+
...fields.classic.map((f) => f.key),
|
|
1189
|
+
]);
|
|
1190
|
+
const root = {};
|
|
1191
|
+
for (const f of fields.top) {
|
|
1192
|
+
root[f.key] = coerceConfigScalar(existing[f.key] ?? f.def);
|
|
992
1193
|
}
|
|
993
1194
|
for (const [k, v] of Object.entries(existing)) {
|
|
994
|
-
if (!
|
|
995
|
-
|
|
1195
|
+
if (!managedKeys.has(k))
|
|
1196
|
+
root[k] = coerceConfigScalar(v);
|
|
1197
|
+
}
|
|
1198
|
+
const classicBlock = {};
|
|
1199
|
+
for (const f of fields.classic) {
|
|
1200
|
+
const value = f.key === 'language' ? resolvedLanguage : (existing[f.key] ?? f.def);
|
|
1201
|
+
classicBlock[f.key] = coerceConfigScalar(value);
|
|
996
1202
|
}
|
|
997
|
-
|
|
998
|
-
return
|
|
1203
|
+
root.classic = classicBlock;
|
|
1204
|
+
return renderStructuredProjectConfig(root, resolvedLanguage === 'zh-CN' ? 'zh-CN' : 'en');
|
|
999
1205
|
}
|
|
1000
1206
|
async function mergeProjectConfig(projectPath, language = null) {
|
|
1001
1207
|
const configPath = path.join(projectPath, '.comet', 'config.yaml');
|
|
1002
1208
|
let existing = {};
|
|
1209
|
+
let existingSource = '';
|
|
1003
1210
|
if (await fileExists(configPath)) {
|
|
1004
|
-
|
|
1211
|
+
existingSource = await readFile(configPath, 'utf-8');
|
|
1212
|
+
existing = parseProjectConfigOverrides(existingSource);
|
|
1005
1213
|
}
|
|
1006
1214
|
await ensureDir(path.dirname(configPath));
|
|
1007
|
-
|
|
1215
|
+
// Preserve the full parsed structure (e.g. the `native:` block) plus any legacy top-level
|
|
1216
|
+
// Classic fields pending migration. Falling back to an empty mapping keeps this idempotent
|
|
1217
|
+
// for a missing or unparseable config.
|
|
1218
|
+
const document = parseDocument(existingSource, { uniqueKeys: false });
|
|
1219
|
+
const parsedRoot = document.errors.length === 0 ? document.toJS() : null;
|
|
1220
|
+
const root = parsedRoot && typeof parsedRoot === 'object' && !Array.isArray(parsedRoot)
|
|
1221
|
+
? { ...parsedRoot }
|
|
1222
|
+
: {};
|
|
1223
|
+
const prevClassic = root.classic && typeof root.classic === 'object' && !Array.isArray(root.classic)
|
|
1224
|
+
? { ...root.classic }
|
|
1225
|
+
: {};
|
|
1226
|
+
const prevNative = root.native && typeof root.native === 'object' && !Array.isArray(root.native)
|
|
1227
|
+
? { ...root.native }
|
|
1228
|
+
: null;
|
|
1229
|
+
const existingClassicLanguage = typeof prevClassic.language === 'string' ? prevClassic.language : undefined;
|
|
1230
|
+
const resolvedLanguage = language ?? existingClassicLanguage ?? existing.language ?? 'en';
|
|
1231
|
+
const fields = getManagedConfigFields(resolvedLanguage);
|
|
1232
|
+
// Top-level managed field (ambient_resume).
|
|
1233
|
+
for (const f of fields.top) {
|
|
1234
|
+
root[f.key] = coerceConfigScalar(existing[f.key] ?? f.def);
|
|
1235
|
+
}
|
|
1236
|
+
// Native settings are managed only when the project already has a Native block. This lets
|
|
1237
|
+
// update add new Native defaults without activating Native in Classic-only installations.
|
|
1238
|
+
if (prevNative) {
|
|
1239
|
+
const nativeBlock = { ...prevNative };
|
|
1240
|
+
for (const f of fields.native) {
|
|
1241
|
+
const value = nativeBlock[f.key] ?? f.def;
|
|
1242
|
+
if (f.key === 'clarification_mode' && value !== 'sequential' && value !== 'batch') {
|
|
1243
|
+
throw new Error('native.clarification_mode must be sequential or batch');
|
|
1244
|
+
}
|
|
1245
|
+
nativeBlock[f.key] = coerceConfigScalar(value);
|
|
1246
|
+
}
|
|
1247
|
+
root.native = nativeBlock;
|
|
1248
|
+
}
|
|
1249
|
+
// Classic block: preserve explicit new-format values, then migrate legacy top-level values,
|
|
1250
|
+
// then apply defaults. An explicit language argument still represents the caller's requested
|
|
1251
|
+
// install/update language and therefore overrides both stored forms.
|
|
1252
|
+
const classicBlock = {};
|
|
1253
|
+
for (const f of fields.classic) {
|
|
1254
|
+
let value;
|
|
1255
|
+
if (f.key === 'language') {
|
|
1256
|
+
value = resolvedLanguage;
|
|
1257
|
+
}
|
|
1258
|
+
else {
|
|
1259
|
+
const legacyTop = root[f.key];
|
|
1260
|
+
if (prevClassic[f.key] !== undefined)
|
|
1261
|
+
value = prevClassic[f.key];
|
|
1262
|
+
else if (legacyTop !== undefined)
|
|
1263
|
+
value = legacyTop;
|
|
1264
|
+
else
|
|
1265
|
+
value = f.def;
|
|
1266
|
+
}
|
|
1267
|
+
classicBlock[f.key] = coerceConfigScalar(value);
|
|
1268
|
+
}
|
|
1269
|
+
// Remove migrated legacy top-level Classic fields so they don't linger at the root.
|
|
1270
|
+
for (const f of fields.classic) {
|
|
1271
|
+
delete root[f.key];
|
|
1272
|
+
}
|
|
1273
|
+
root.classic = classicBlock;
|
|
1274
|
+
await writeFile(configPath, renderStructuredProjectConfig(root, resolvedLanguage === 'zh-CN' ? 'zh-CN' : 'en'), 'utf-8');
|
|
1008
1275
|
}
|
|
1009
1276
|
async function createWorkingDirs(projectPath, language = 'en') {
|
|
1010
1277
|
const dirs = [
|
|
@@ -1018,5 +1285,5 @@ async function createWorkingDirs(projectPath, language = 'en') {
|
|
|
1018
1285
|
await mergeProjectConfig(projectPath, language);
|
|
1019
1286
|
await installCometProjectInstructions(projectPath, language === 'zh-CN' ? 'zh' : 'en');
|
|
1020
1287
|
}
|
|
1021
|
-
export { copyCometSkillsForPlatform, copyCometRulesForPlatform, installCometHooksForPlatform, readManifest, getManagedSkillPaths, getManifestSkills, getUserFacingSkillNames, createWorkingDirs, getAssetsDir, computeRuleDestPath, formatRuleContent, isManagedHookCommand, buildHookCommand, removeManagedHooksFromJsonFile, planSkillDirectoryCopy, mergeProjectConfig, parseProjectConfigOverrides, renderProjectConfig, getCentralSkillsDir, installSkillsAsSymlink, };
|
|
1288
|
+
export { copyCometSkillsForPlatform, copyCometRulesForPlatform, installCometHooksForPlatform, readManifest, getManagedSkillPaths, getManagedSkillPathsForSelection, getManifestSkills, getUserFacingSkillNames, createWorkingDirs, getAssetsDir, computeRuleDestPath, formatRuleContent, isManagedHookCommand, buildHookCommand, removeManagedHooksFromJsonFile, planSkillDirectoryCopy, mergeProjectConfig, parseProjectConfigOverrides, renderProjectConfig, getCentralSkillsDir, installSkillsAsSymlink, prepareManagedSkillCopyTarget, prepareNativeSkillInstallTarget, };
|
|
1022
1289
|
//# sourceMappingURL=platform-install.js.map
|