@rpamis/comet 0.3.9 → 0.4.0-beta.2
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 +371 -222
- package/assets/manifest.json +33 -12
- package/assets/skills/comet/SKILL.md +87 -102
- package/assets/skills/comet/reference/auto-transition.md +1 -1
- package/assets/skills/comet/reference/comet-yaml-fields.md +11 -4
- package/assets/skills/comet/reference/context-recovery.md +12 -2
- package/assets/skills/comet/reference/debug-gate.md +17 -1
- package/assets/skills/comet/reference/decision-point.md +13 -2
- package/assets/skills/comet/reference/intent-frame.md +74 -0
- package/assets/skills/comet/reference/scripts.md +69 -0
- package/assets/skills/comet/reference/subagent-dispatch.md +79 -23
- package/assets/skills/comet/rules/comet-phase-guard.en.md +18 -10
- package/assets/skills/comet/rules/comet-phase-guard.md +17 -10
- package/assets/skills/comet/runtime/classic/checks.yaml +6 -0
- package/assets/skills/comet/runtime/classic/guardrails.yaml +13 -0
- package/assets/skills/comet/runtime/classic/skill.yaml +122 -0
- package/assets/skills/comet/scripts/comet-archive.mjs +3 -0
- package/assets/skills/comet/scripts/comet-env.mjs +15 -0
- package/assets/skills/comet/scripts/comet-guard.mjs +3 -0
- package/assets/skills/comet/scripts/comet-handoff.mjs +3 -0
- package/assets/skills/comet/scripts/comet-hook-guard.mjs +3 -0
- package/assets/skills/comet/scripts/comet-intent.mjs +3 -0
- package/assets/skills/comet/scripts/comet-runtime.mjs +12941 -0
- package/assets/skills/comet/scripts/comet-state.mjs +3 -0
- package/assets/skills/comet/scripts/comet-yaml-validate.mjs +3 -0
- package/assets/skills/comet-any/SKILL.md +118 -0
- package/assets/skills/comet-any/reference/authored-zone-example.md +100 -0
- package/assets/skills/comet-any/reference/authoring-protocol.json +91 -0
- package/assets/skills/comet-any/reference/authoring-subagents.md +102 -0
- package/assets/skills/comet-any/reference/bundle-authoring.md +166 -0
- package/assets/skills/comet-any/reference/eval-provider.md +83 -0
- package/assets/skills/comet-any/reference/subagents/pause-points-author.md +75 -0
- package/assets/skills/comet-any/reference/subagents/reference-author.md +77 -0
- package/assets/skills/comet-any/reference/subagents/script-author.md +81 -0
- package/assets/skills/comet-any/reference/subagents/skill-core-author.md +129 -0
- package/assets/skills/comet-any/reference/subagents/skill-reviewer.md +124 -0
- package/assets/skills/comet-any/reference/subagents/workflow-entry-author.md +100 -0
- package/assets/skills/comet-archive/SKILL.md +25 -15
- package/assets/skills/comet-build/SKILL.md +51 -40
- package/assets/skills/comet-design/SKILL.md +14 -18
- package/assets/skills/comet-hotfix/SKILL.md +33 -43
- package/assets/skills/comet-open/SKILL.md +10 -20
- package/assets/skills/comet-tweak/SKILL.md +71 -65
- package/assets/skills/comet-verify/SKILL.md +31 -35
- package/assets/skills-zh/comet/SKILL.md +87 -101
- package/assets/skills-zh/comet/reference/auto-transition.md +3 -3
- package/assets/skills-zh/comet/reference/comet-yaml-fields.md +8 -4
- package/assets/skills-zh/comet/reference/context-recovery.md +11 -1
- package/assets/skills-zh/comet/reference/debug-gate.md +17 -1
- package/assets/skills-zh/comet/reference/decision-point.md +13 -2
- package/assets/skills-zh/comet/reference/intent-frame.md +74 -0
- package/assets/skills-zh/comet/reference/scripts.md +69 -0
- package/assets/skills-zh/comet/reference/subagent-dispatch.md +67 -18
- package/assets/skills-zh/comet/runtime/classic/checks.yaml +6 -0
- package/assets/skills-zh/comet/runtime/classic/guardrails.yaml +13 -0
- package/assets/skills-zh/comet/runtime/classic/skill.yaml +122 -0
- package/assets/skills-zh/comet-any/SKILL.md +118 -0
- package/assets/skills-zh/comet-any/reference/authored-zone-example.md +100 -0
- package/assets/skills-zh/comet-any/reference/authoring-protocol.json +91 -0
- package/assets/skills-zh/comet-any/reference/authoring-subagents.md +107 -0
- package/assets/skills-zh/comet-any/reference/bundle-authoring.md +166 -0
- package/assets/skills-zh/comet-any/reference/eval-provider.md +66 -0
- package/assets/skills-zh/comet-any/reference/subagents/pause-points-author.md +79 -0
- package/assets/skills-zh/comet-any/reference/subagents/reference-author.md +81 -0
- package/assets/skills-zh/comet-any/reference/subagents/script-author.md +84 -0
- package/assets/skills-zh/comet-any/reference/subagents/skill-core-author.md +129 -0
- package/assets/skills-zh/comet-any/reference/subagents/skill-reviewer.md +124 -0
- package/assets/skills-zh/comet-any/reference/subagents/workflow-entry-author.md +98 -0
- package/assets/skills-zh/comet-archive/SKILL.md +25 -15
- package/assets/skills-zh/comet-build/SKILL.md +41 -43
- package/assets/skills-zh/comet-design/SKILL.md +14 -18
- package/assets/skills-zh/comet-hotfix/SKILL.md +37 -47
- package/assets/skills-zh/comet-open/SKILL.md +12 -22
- package/assets/skills-zh/comet-tweak/SKILL.md +70 -63
- package/assets/skills-zh/comet-verify/SKILL.md +28 -30
- package/bin/comet.js +1 -1
- package/dist/{cli → app/cli}/index.d.ts.map +1 -1
- package/dist/app/cli/index.js +430 -0
- package/dist/app/cli/index.js.map +1 -0
- package/dist/app/commands/bundle.d.ts +51 -0
- package/dist/app/commands/bundle.d.ts.map +1 -0
- package/dist/app/commands/bundle.js +387 -0
- package/dist/app/commands/bundle.js.map +1 -0
- package/dist/app/commands/creator.d.ts +14 -0
- package/dist/app/commands/creator.d.ts.map +1 -0
- package/dist/app/commands/creator.js +82 -0
- package/dist/app/commands/creator.js.map +1 -0
- package/dist/app/commands/dashboard.d.ts +16 -0
- package/dist/app/commands/dashboard.d.ts.map +1 -0
- package/dist/app/commands/dashboard.js +53 -0
- package/dist/app/commands/dashboard.js.map +1 -0
- package/dist/{commands → app/commands}/doctor.d.ts +1 -1
- package/dist/app/commands/doctor.d.ts.map +1 -0
- package/dist/{commands → app/commands}/doctor.js +110 -60
- package/dist/app/commands/doctor.js.map +1 -0
- package/dist/app/commands/eval.d.ts +17 -0
- package/dist/app/commands/eval.d.ts.map +1 -0
- package/dist/app/commands/eval.js +169 -0
- package/dist/app/commands/eval.js.map +1 -0
- package/dist/app/commands/i18n.d.ts +4 -0
- package/dist/app/commands/i18n.d.ts.map +1 -0
- package/dist/{commands → app/commands}/i18n.js +22 -2
- package/dist/app/commands/i18n.js.map +1 -0
- package/dist/{commands → app/commands}/init.d.ts +3 -1
- package/dist/app/commands/init.d.ts.map +1 -0
- package/dist/{commands → app/commands}/init.js +82 -32
- package/dist/app/commands/init.js.map +1 -0
- package/dist/app/commands/platform-select-prompt.d.ts +38 -0
- package/dist/app/commands/platform-select-prompt.d.ts.map +1 -0
- package/dist/app/commands/platform-select-prompt.js +141 -0
- package/dist/app/commands/platform-select-prompt.js.map +1 -0
- package/dist/app/commands/publish.d.ts +7 -0
- package/dist/app/commands/publish.d.ts.map +1 -0
- package/dist/app/commands/publish.js +14 -0
- package/dist/app/commands/publish.js.map +1 -0
- package/dist/app/commands/skill.d.ts +23 -0
- package/dist/app/commands/skill.d.ts.map +1 -0
- package/dist/app/commands/skill.js +208 -0
- package/dist/app/commands/skill.js.map +1 -0
- package/dist/app/commands/status.d.ts.map +1 -0
- package/dist/app/commands/status.js +159 -0
- package/dist/app/commands/status.js.map +1 -0
- package/dist/{commands → app/commands}/uninstall.d.ts +1 -1
- package/dist/app/commands/uninstall.d.ts.map +1 -0
- package/dist/{commands → app/commands}/uninstall.js +3 -3
- package/dist/app/commands/uninstall.js.map +1 -0
- package/dist/{commands → app/commands}/update.d.ts +4 -3
- package/dist/app/commands/update.d.ts.map +1 -0
- package/dist/{commands → app/commands}/update.js +43 -15
- package/dist/app/commands/update.js.map +1 -0
- package/dist/config/repository-layout.json +98 -0
- package/dist/domains/bundle/authoring.d.ts +82 -0
- package/dist/domains/bundle/authoring.d.ts.map +1 -0
- package/dist/domains/bundle/authoring.js +185 -0
- package/dist/domains/bundle/authoring.js.map +1 -0
- package/dist/domains/bundle/bundle-platform.d.ts +39 -0
- package/dist/domains/bundle/bundle-platform.d.ts.map +1 -0
- package/dist/domains/bundle/bundle-platform.js +287 -0
- package/dist/domains/bundle/bundle-platform.js.map +1 -0
- package/dist/domains/bundle/candidates.d.ts +29 -0
- package/dist/domains/bundle/candidates.d.ts.map +1 -0
- package/dist/domains/bundle/candidates.js +37 -0
- package/dist/domains/bundle/candidates.js.map +1 -0
- package/dist/domains/bundle/compatibility-benchmark.d.ts +12 -0
- package/dist/domains/bundle/compatibility-benchmark.d.ts.map +1 -0
- package/dist/domains/bundle/compatibility-benchmark.js +224 -0
- package/dist/domains/bundle/compatibility-benchmark.js.map +1 -0
- package/dist/domains/bundle/compiler.d.ts +5 -0
- package/dist/domains/bundle/compiler.d.ts.map +1 -0
- package/dist/domains/bundle/compiler.js +106 -0
- package/dist/domains/bundle/compiler.js.map +1 -0
- package/dist/domains/bundle/distribute.d.ts +33 -0
- package/dist/domains/bundle/distribute.d.ts.map +1 -0
- package/dist/domains/bundle/distribute.js +166 -0
- package/dist/domains/bundle/distribute.js.map +1 -0
- package/dist/domains/bundle/draft.d.ts +19 -0
- package/dist/domains/bundle/draft.d.ts.map +1 -0
- package/dist/domains/bundle/draft.js +82 -0
- package/dist/domains/bundle/draft.js.map +1 -0
- package/dist/domains/bundle/eval.d.ts +36 -0
- package/dist/domains/bundle/eval.d.ts.map +1 -0
- package/dist/domains/bundle/eval.js +501 -0
- package/dist/domains/bundle/eval.js.map +1 -0
- package/dist/domains/bundle/factory-compose.d.ts +12 -0
- package/dist/domains/bundle/factory-compose.d.ts.map +1 -0
- package/dist/domains/bundle/factory-compose.js +309 -0
- package/dist/domains/bundle/factory-compose.js.map +1 -0
- package/dist/domains/bundle/factory-guide.d.ts +37 -0
- package/dist/domains/bundle/factory-guide.d.ts.map +1 -0
- package/dist/domains/bundle/factory-guide.js +96 -0
- package/dist/domains/bundle/factory-guide.js.map +1 -0
- package/dist/domains/bundle/factory-plan.d.ts +48 -0
- package/dist/domains/bundle/factory-plan.d.ts.map +1 -0
- package/dist/domains/bundle/factory-plan.js +172 -0
- package/dist/domains/bundle/factory-plan.js.map +1 -0
- package/dist/domains/bundle/factory-proposal.d.ts +31 -0
- package/dist/domains/bundle/factory-proposal.d.ts.map +1 -0
- package/dist/domains/bundle/factory-proposal.js +225 -0
- package/dist/domains/bundle/factory-proposal.js.map +1 -0
- package/dist/domains/bundle/factory-resolve.d.ts +11 -0
- package/dist/domains/bundle/factory-resolve.d.ts.map +1 -0
- package/dist/domains/bundle/factory-resolve.js +121 -0
- package/dist/domains/bundle/factory-resolve.js.map +1 -0
- package/dist/domains/bundle/factory.d.ts +17 -0
- package/dist/domains/bundle/factory.d.ts.map +1 -0
- package/dist/domains/bundle/factory.js +511 -0
- package/dist/domains/bundle/factory.js.map +1 -0
- package/dist/domains/bundle/hash.d.ts +3 -0
- package/dist/domains/bundle/hash.d.ts.map +1 -0
- package/dist/domains/bundle/hash.js +72 -0
- package/dist/domains/bundle/hash.js.map +1 -0
- package/dist/domains/bundle/load.d.ts +4 -0
- package/dist/domains/bundle/load.d.ts.map +1 -0
- package/dist/domains/bundle/load.js +355 -0
- package/dist/domains/bundle/load.js.map +1 -0
- package/dist/domains/bundle/next-action.d.ts +37 -0
- package/dist/domains/bundle/next-action.d.ts.map +1 -0
- package/dist/domains/bundle/next-action.js +185 -0
- package/dist/domains/bundle/next-action.js.map +1 -0
- package/dist/domains/bundle/platform.d.ts +21 -0
- package/dist/domains/bundle/platform.d.ts.map +1 -0
- package/dist/domains/bundle/platform.js +170 -0
- package/dist/domains/bundle/platform.js.map +1 -0
- package/dist/domains/bundle/preferences.d.ts +11 -0
- package/dist/domains/bundle/preferences.d.ts.map +1 -0
- package/dist/domains/bundle/preferences.js +17 -0
- package/dist/domains/bundle/preferences.js.map +1 -0
- package/dist/domains/bundle/publish.d.ts +14 -0
- package/dist/domains/bundle/publish.d.ts.map +1 -0
- package/dist/domains/bundle/publish.js +159 -0
- package/dist/domains/bundle/publish.js.map +1 -0
- package/dist/domains/bundle/readiness-user-summary.d.ts +25 -0
- package/dist/domains/bundle/readiness-user-summary.d.ts.map +1 -0
- package/dist/domains/bundle/readiness-user-summary.js +186 -0
- package/dist/domains/bundle/readiness-user-summary.js.map +1 -0
- package/dist/domains/bundle/review-summary.d.ts +36 -0
- package/dist/domains/bundle/review-summary.d.ts.map +1 -0
- package/dist/domains/bundle/review-summary.js +348 -0
- package/dist/domains/bundle/review-summary.js.map +1 -0
- package/dist/domains/bundle/state.d.ts +7 -0
- package/dist/domains/bundle/state.d.ts.map +1 -0
- package/dist/domains/bundle/state.js +132 -0
- package/dist/domains/bundle/state.js.map +1 -0
- package/dist/domains/bundle/types.d.ts +347 -0
- package/dist/domains/bundle/types.d.ts.map +1 -0
- package/dist/domains/bundle/types.js.map +1 -0
- package/dist/domains/bundle/user-facing.d.ts +48 -0
- package/dist/domains/bundle/user-facing.d.ts.map +1 -0
- package/dist/domains/bundle/user-facing.js +73 -0
- package/dist/domains/bundle/user-facing.js.map +1 -0
- package/dist/domains/bundle/validate.d.ts +5 -0
- package/dist/domains/bundle/validate.d.ts.map +1 -0
- package/dist/domains/bundle/validate.js +292 -0
- package/dist/domains/bundle/validate.js.map +1 -0
- package/dist/domains/comet-classic/classic-archive-entry.d.ts +2 -0
- package/dist/domains/comet-classic/classic-archive-entry.d.ts.map +1 -0
- package/dist/domains/comet-classic/classic-archive-entry.js +4 -0
- package/dist/domains/comet-classic/classic-archive-entry.js.map +1 -0
- package/dist/domains/comet-classic/classic-archive.d.ts +3 -0
- package/dist/domains/comet-classic/classic-archive.d.ts.map +1 -0
- package/dist/domains/comet-classic/classic-archive.js +392 -0
- package/dist/domains/comet-classic/classic-archive.js.map +1 -0
- package/dist/domains/comet-classic/classic-cli.d.ts +15 -0
- package/dist/domains/comet-classic/classic-cli.d.ts.map +1 -0
- package/dist/domains/comet-classic/classic-cli.js +94 -0
- package/dist/domains/comet-classic/classic-cli.js.map +1 -0
- package/dist/domains/comet-classic/classic-diagnostics.d.ts +16 -0
- package/dist/domains/comet-classic/classic-diagnostics.d.ts.map +1 -0
- package/dist/domains/comet-classic/classic-diagnostics.js +57 -0
- package/dist/domains/comet-classic/classic-diagnostics.js.map +1 -0
- package/dist/domains/comet-classic/classic-evidence.d.ts +10 -0
- package/dist/domains/comet-classic/classic-evidence.d.ts.map +1 -0
- package/dist/domains/comet-classic/classic-evidence.js +114 -0
- package/dist/domains/comet-classic/classic-evidence.js.map +1 -0
- package/dist/domains/comet-classic/classic-guard-entry.d.ts +2 -0
- package/dist/domains/comet-classic/classic-guard-entry.d.ts.map +1 -0
- package/dist/domains/comet-classic/classic-guard-entry.js +4 -0
- package/dist/domains/comet-classic/classic-guard-entry.js.map +1 -0
- package/dist/domains/comet-classic/classic-guard.d.ts +3 -0
- package/dist/domains/comet-classic/classic-guard.d.ts.map +1 -0
- package/dist/domains/comet-classic/classic-guard.js +833 -0
- package/dist/domains/comet-classic/classic-guard.js.map +1 -0
- package/dist/domains/comet-classic/classic-handoff-entry.d.ts +2 -0
- package/dist/domains/comet-classic/classic-handoff-entry.d.ts.map +1 -0
- package/dist/domains/comet-classic/classic-handoff-entry.js +4 -0
- package/dist/domains/comet-classic/classic-handoff-entry.js.map +1 -0
- package/dist/domains/comet-classic/classic-handoff.d.ts +3 -0
- package/dist/domains/comet-classic/classic-handoff.d.ts.map +1 -0
- package/dist/domains/comet-classic/classic-handoff.js +478 -0
- package/dist/domains/comet-classic/classic-handoff.js.map +1 -0
- package/dist/domains/comet-classic/classic-hook-guard-entry.d.ts +2 -0
- package/dist/domains/comet-classic/classic-hook-guard-entry.d.ts.map +1 -0
- package/dist/domains/comet-classic/classic-hook-guard-entry.js +4 -0
- package/dist/domains/comet-classic/classic-hook-guard-entry.js.map +1 -0
- package/dist/domains/comet-classic/classic-hook-guard.d.ts +3 -0
- package/dist/domains/comet-classic/classic-hook-guard.d.ts.map +1 -0
- package/dist/domains/comet-classic/classic-hook-guard.js +382 -0
- package/dist/domains/comet-classic/classic-hook-guard.js.map +1 -0
- package/dist/domains/comet-classic/classic-intent-command.d.ts +3 -0
- package/dist/domains/comet-classic/classic-intent-command.d.ts.map +1 -0
- package/dist/domains/comet-classic/classic-intent-command.js +40 -0
- package/dist/domains/comet-classic/classic-intent-command.js.map +1 -0
- package/dist/domains/comet-classic/classic-intent-entry.d.ts +2 -0
- package/dist/domains/comet-classic/classic-intent-entry.d.ts.map +1 -0
- package/dist/domains/comet-classic/classic-intent-entry.js +4 -0
- package/dist/domains/comet-classic/classic-intent-entry.js.map +1 -0
- package/dist/domains/comet-classic/classic-intent.d.ts +79 -0
- package/dist/domains/comet-classic/classic-intent.d.ts.map +1 -0
- package/dist/domains/comet-classic/classic-intent.js +307 -0
- package/dist/domains/comet-classic/classic-intent.js.map +1 -0
- package/dist/domains/comet-classic/classic-migrate.d.ts +18 -0
- package/dist/domains/comet-classic/classic-migrate.d.ts.map +1 -0
- package/dist/domains/comet-classic/classic-migrate.js +184 -0
- package/dist/domains/comet-classic/classic-migrate.js.map +1 -0
- package/dist/domains/comet-classic/classic-paths.d.ts +8 -0
- package/dist/domains/comet-classic/classic-paths.d.ts.map +1 -0
- package/dist/domains/comet-classic/classic-paths.js +61 -0
- package/dist/domains/comet-classic/classic-paths.js.map +1 -0
- package/dist/domains/comet-classic/classic-resolver.d.ts +10 -0
- package/dist/domains/comet-classic/classic-resolver.d.ts.map +1 -0
- package/dist/domains/comet-classic/classic-resolver.js +89 -0
- package/dist/domains/comet-classic/classic-resolver.js.map +1 -0
- package/dist/domains/comet-classic/classic-runtime-evals.d.ts +9 -0
- package/dist/domains/comet-classic/classic-runtime-evals.d.ts.map +1 -0
- package/dist/domains/comet-classic/classic-runtime-evals.js +45 -0
- package/dist/domains/comet-classic/classic-runtime-evals.js.map +1 -0
- package/dist/domains/comet-classic/classic-runtime-run.d.ts +7 -0
- package/dist/domains/comet-classic/classic-runtime-run.d.ts.map +1 -0
- package/dist/domains/comet-classic/classic-runtime-run.js +105 -0
- package/dist/domains/comet-classic/classic-runtime-run.js.map +1 -0
- package/dist/domains/comet-classic/classic-script-entry.d.ts +3 -0
- package/dist/domains/comet-classic/classic-script-entry.d.ts.map +1 -0
- package/dist/domains/comet-classic/classic-script-entry.js +31 -0
- package/dist/domains/comet-classic/classic-script-entry.js.map +1 -0
- package/dist/domains/comet-classic/classic-state-command.d.ts +3 -0
- package/dist/domains/comet-classic/classic-state-command.d.ts.map +1 -0
- package/dist/domains/comet-classic/classic-state-command.js +984 -0
- package/dist/domains/comet-classic/classic-state-command.js.map +1 -0
- package/dist/domains/comet-classic/classic-state-entry.d.ts +2 -0
- package/dist/domains/comet-classic/classic-state-entry.d.ts.map +1 -0
- package/dist/domains/comet-classic/classic-state-entry.js +4 -0
- package/dist/domains/comet-classic/classic-state-entry.js.map +1 -0
- package/dist/domains/comet-classic/classic-state-events.d.ts +18 -0
- package/dist/domains/comet-classic/classic-state-events.d.ts.map +1 -0
- package/dist/domains/comet-classic/classic-state-events.js +15 -0
- package/dist/domains/comet-classic/classic-state-events.js.map +1 -0
- package/dist/domains/comet-classic/classic-state.d.ts +69 -0
- package/dist/domains/comet-classic/classic-state.d.ts.map +1 -0
- package/dist/domains/comet-classic/classic-state.js +238 -0
- package/dist/domains/comet-classic/classic-state.js.map +1 -0
- package/dist/domains/comet-classic/classic-store.d.ts +7 -0
- package/dist/domains/comet-classic/classic-store.d.ts.map +1 -0
- package/dist/domains/comet-classic/classic-store.js +127 -0
- package/dist/domains/comet-classic/classic-store.js.map +1 -0
- package/dist/domains/comet-classic/classic-transitions.d.ts +24 -0
- package/dist/domains/comet-classic/classic-transitions.d.ts.map +1 -0
- package/dist/domains/comet-classic/classic-transitions.js +124 -0
- package/dist/domains/comet-classic/classic-transitions.js.map +1 -0
- package/dist/domains/comet-classic/classic-validate-command.d.ts +3 -0
- package/dist/domains/comet-classic/classic-validate-command.d.ts.map +1 -0
- package/dist/domains/comet-classic/classic-validate-command.js +154 -0
- package/dist/domains/comet-classic/classic-validate-command.js.map +1 -0
- package/dist/domains/comet-classic/classic-validate-entry.d.ts +2 -0
- package/dist/domains/comet-classic/classic-validate-entry.d.ts.map +1 -0
- package/dist/domains/comet-classic/classic-validate-entry.js +4 -0
- package/dist/domains/comet-classic/classic-validate-entry.js.map +1 -0
- package/dist/domains/comet-classic/index.d.ts +20 -0
- package/dist/domains/comet-classic/index.d.ts.map +1 -0
- package/dist/domains/comet-classic/index.js +20 -0
- package/dist/domains/comet-classic/index.js.map +1 -0
- package/dist/domains/dashboard/collector.d.ts +12 -0
- package/dist/domains/dashboard/collector.d.ts.map +1 -0
- package/dist/domains/dashboard/collector.js +475 -0
- package/dist/domains/dashboard/collector.js.map +1 -0
- package/dist/domains/dashboard/git.d.ts +8 -0
- package/dist/domains/dashboard/git.d.ts.map +1 -0
- package/dist/domains/dashboard/git.js +69 -0
- package/dist/domains/dashboard/git.js.map +1 -0
- package/dist/domains/dashboard/next-action.d.ts +17 -0
- package/dist/domains/dashboard/next-action.d.ts.map +1 -0
- package/dist/domains/dashboard/next-action.js +83 -0
- package/dist/domains/dashboard/next-action.js.map +1 -0
- package/dist/domains/dashboard/open-browser.d.ts +9 -0
- package/dist/domains/dashboard/open-browser.d.ts.map +1 -0
- package/dist/domains/dashboard/open-browser.js +40 -0
- package/dist/domains/dashboard/open-browser.js.map +1 -0
- package/dist/domains/dashboard/risk.d.ts +24 -0
- package/dist/domains/dashboard/risk.d.ts.map +1 -0
- package/dist/domains/dashboard/risk.js +97 -0
- package/dist/domains/dashboard/risk.js.map +1 -0
- package/dist/domains/dashboard/server.d.ts +21 -0
- package/dist/domains/dashboard/server.d.ts.map +1 -0
- package/dist/domains/dashboard/server.js +149 -0
- package/dist/domains/dashboard/server.js.map +1 -0
- package/dist/domains/dashboard/task-parser.d.ts +13 -0
- package/dist/domains/dashboard/task-parser.d.ts.map +1 -0
- package/dist/domains/dashboard/task-parser.js +82 -0
- package/dist/domains/dashboard/task-parser.js.map +1 -0
- package/dist/domains/dashboard/types.d.ts +122 -0
- package/dist/domains/dashboard/types.d.ts.map +1 -0
- package/dist/domains/dashboard/types.js +10 -0
- package/dist/domains/dashboard/types.js.map +1 -0
- package/dist/domains/dashboard/verify-parser.d.ts +18 -0
- package/dist/domains/dashboard/verify-parser.d.ts.map +1 -0
- package/dist/domains/dashboard/verify-parser.js +94 -0
- package/dist/domains/dashboard/verify-parser.js.map +1 -0
- package/dist/domains/dashboard/web/assets/demo-DQyfozbi.js +1 -0
- package/dist/domains/dashboard/web/assets/index-BcO3_QlT.css +1 -0
- package/dist/domains/dashboard/web/assets/index-CjU3VXVu.js +22 -0
- package/dist/domains/dashboard/web/favicon.png +0 -0
- package/dist/domains/dashboard/web/index.html +16 -0
- package/dist/domains/dashboard/yaml.d.ts +13 -0
- package/dist/domains/dashboard/yaml.d.ts.map +1 -0
- package/dist/domains/dashboard/yaml.js +61 -0
- package/dist/domains/dashboard/yaml.js.map +1 -0
- package/dist/domains/engine/evals.d.ts +4 -0
- package/dist/domains/engine/evals.d.ts.map +1 -0
- package/dist/domains/engine/evals.js +25 -0
- package/dist/domains/engine/evals.js.map +1 -0
- package/dist/domains/engine/guardrails.d.ts +10 -0
- package/dist/domains/engine/guardrails.d.ts.map +1 -0
- package/dist/domains/engine/guardrails.js +25 -0
- package/dist/domains/engine/guardrails.js.map +1 -0
- package/dist/domains/engine/loop.d.ts +15 -0
- package/dist/domains/engine/loop.d.ts.map +1 -0
- package/dist/domains/engine/loop.js +126 -0
- package/dist/domains/engine/loop.js.map +1 -0
- package/dist/domains/engine/manual-run.d.ts +30 -0
- package/dist/domains/engine/manual-run.d.ts.map +1 -0
- package/dist/domains/engine/manual-run.js +184 -0
- package/dist/domains/engine/manual-run.js.map +1 -0
- package/dist/domains/engine/resolver.d.ts +20 -0
- package/dist/domains/engine/resolver.d.ts.map +1 -0
- package/dist/domains/engine/resolver.js +36 -0
- package/dist/domains/engine/resolver.js.map +1 -0
- package/dist/domains/engine/run-store.d.ts +13 -0
- package/dist/domains/engine/run-store.d.ts.map +1 -0
- package/dist/domains/engine/run-store.js +100 -0
- package/dist/domains/engine/run-store.js.map +1 -0
- package/dist/domains/engine/runtime-types.d.ts +11 -0
- package/dist/domains/engine/runtime-types.d.ts.map +1 -0
- package/dist/domains/engine/runtime-types.js +2 -0
- package/dist/domains/engine/runtime-types.js.map +1 -0
- package/dist/domains/engine/standalone-run.d.ts +13 -0
- package/dist/domains/engine/standalone-run.d.ts.map +1 -0
- package/dist/domains/engine/standalone-run.js +27 -0
- package/dist/domains/engine/standalone-run.js.map +1 -0
- package/dist/domains/engine/state.d.ts +10 -0
- package/dist/domains/engine/state.d.ts.map +1 -0
- package/dist/domains/engine/state.js +160 -0
- package/dist/domains/engine/state.js.map +1 -0
- package/dist/domains/engine/types.d.ts +51 -0
- package/dist/domains/engine/types.d.ts.map +1 -0
- package/dist/domains/engine/types.js +2 -0
- package/dist/domains/engine/types.js.map +1 -0
- package/dist/domains/eval/index.d.ts +7 -0
- package/dist/domains/eval/index.d.ts.map +1 -0
- package/dist/domains/eval/index.js +11 -0
- package/dist/domains/eval/index.js.map +1 -0
- package/dist/domains/eval/repository-benchmarks.d.ts +6 -0
- package/dist/domains/eval/repository-benchmarks.d.ts.map +1 -0
- package/dist/domains/eval/repository-benchmarks.js +10 -0
- package/dist/domains/eval/repository-benchmarks.js.map +1 -0
- package/dist/domains/factory/artifacts.d.ts +53 -0
- package/dist/domains/factory/artifacts.d.ts.map +1 -0
- package/dist/domains/factory/artifacts.js +8 -0
- package/dist/domains/factory/artifacts.js.map +1 -0
- package/dist/domains/factory/package.d.ts +7 -0
- package/dist/domains/factory/package.d.ts.map +1 -0
- package/dist/domains/factory/package.js +1511 -0
- package/dist/domains/factory/package.js.map +1 -0
- package/dist/domains/factory/types.d.ts +127 -0
- package/dist/domains/factory/types.d.ts.map +1 -0
- package/dist/domains/factory/types.js +2 -0
- package/dist/domains/factory/types.js.map +1 -0
- package/dist/{core → domains/integrations}/codegraph.d.ts +1 -1
- package/dist/domains/integrations/codegraph.d.ts.map +1 -0
- package/dist/{core → domains/integrations}/codegraph.js +1 -1
- package/dist/domains/integrations/codegraph.js.map +1 -0
- package/dist/domains/integrations/openspec.d.ts +18 -0
- package/dist/domains/integrations/openspec.d.ts.map +1 -0
- package/dist/{core → domains/integrations}/openspec.js +102 -25
- package/dist/domains/integrations/openspec.js.map +1 -0
- package/dist/{core → domains/integrations}/superpowers.d.ts +10 -2
- package/dist/domains/integrations/superpowers.d.ts.map +1 -0
- package/dist/{core → domains/integrations}/superpowers.js +59 -13
- package/dist/domains/integrations/superpowers.js.map +1 -0
- package/dist/domains/skill/discovery.d.ts +17 -0
- package/dist/domains/skill/discovery.d.ts.map +1 -0
- package/dist/domains/skill/discovery.js +80 -0
- package/dist/domains/skill/discovery.js.map +1 -0
- package/dist/domains/skill/find.d.ts +41 -0
- package/dist/domains/skill/find.d.ts.map +1 -0
- package/dist/domains/skill/find.js +251 -0
- package/dist/domains/skill/find.js.map +1 -0
- package/dist/domains/skill/install.d.ts +11 -0
- package/dist/domains/skill/install.d.ts.map +1 -0
- package/dist/domains/skill/install.js +82 -0
- package/dist/domains/skill/install.js.map +1 -0
- package/dist/domains/skill/inventory.d.ts +19 -0
- package/dist/domains/skill/inventory.d.ts.map +1 -0
- package/dist/domains/skill/inventory.js +64 -0
- package/dist/domains/skill/inventory.js.map +1 -0
- package/dist/domains/skill/languages.d.ts +19 -0
- package/dist/domains/skill/languages.d.ts.map +1 -0
- package/dist/domains/skill/languages.js +21 -0
- package/dist/domains/skill/languages.js.map +1 -0
- package/dist/domains/skill/load.d.ts +5 -0
- package/dist/domains/skill/load.d.ts.map +1 -0
- package/dist/domains/skill/load.js +313 -0
- package/dist/domains/skill/load.js.map +1 -0
- package/dist/domains/skill/platform-install.d.ts +79 -0
- package/dist/domains/skill/platform-install.d.ts.map +1 -0
- package/dist/{core/skills.js → domains/skill/platform-install.js} +311 -54
- package/dist/domains/skill/platform-install.js.map +1 -0
- package/dist/domains/skill/preferences.d.ts +42 -0
- package/dist/domains/skill/preferences.d.ts.map +1 -0
- package/dist/domains/skill/preferences.js +118 -0
- package/dist/domains/skill/preferences.js.map +1 -0
- package/dist/domains/skill/snapshot.d.ts +8 -0
- package/dist/domains/skill/snapshot.d.ts.map +1 -0
- package/dist/domains/skill/snapshot.js +184 -0
- package/dist/domains/skill/snapshot.js.map +1 -0
- package/dist/domains/skill/types.d.ts +85 -0
- package/dist/domains/skill/types.d.ts.map +1 -0
- package/dist/domains/skill/types.js +2 -0
- package/dist/{core → domains/skill}/types.js.map +1 -1
- package/dist/{core → domains/skill}/uninstall.d.ts +2 -18
- package/dist/domains/skill/uninstall.d.ts.map +1 -0
- package/dist/{core → domains/skill}/uninstall.js +15 -66
- package/dist/domains/skill/uninstall.js.map +1 -0
- package/dist/domains/skill/validate.d.ts +3 -0
- package/dist/domains/skill/validate.d.ts.map +1 -0
- package/dist/domains/skill/validate.js +81 -0
- package/dist/domains/skill/validate.js.map +1 -0
- package/dist/domains/workflow-contract/builtins.d.ts +8 -0
- package/dist/domains/workflow-contract/builtins.d.ts.map +1 -0
- package/dist/domains/workflow-contract/builtins.js +229 -0
- package/dist/domains/workflow-contract/builtins.js.map +1 -0
- package/dist/domains/workflow-contract/hash.d.ts +3 -0
- package/dist/domains/workflow-contract/hash.d.ts.map +1 -0
- package/dist/domains/workflow-contract/hash.js +16 -0
- package/dist/domains/workflow-contract/hash.js.map +1 -0
- package/dist/domains/workflow-contract/index.d.ts +6 -0
- package/dist/domains/workflow-contract/index.d.ts.map +1 -0
- package/dist/domains/workflow-contract/index.js +5 -0
- package/dist/domains/workflow-contract/index.js.map +1 -0
- package/dist/domains/workflow-contract/normalize.d.ts +3 -0
- package/dist/domains/workflow-contract/normalize.d.ts.map +1 -0
- package/dist/domains/workflow-contract/normalize.js +146 -0
- package/dist/domains/workflow-contract/normalize.js.map +1 -0
- package/dist/domains/workflow-contract/types.d.ts +128 -0
- package/dist/domains/workflow-contract/types.d.ts.map +1 -0
- package/dist/domains/workflow-contract/types.js +2 -0
- package/dist/domains/workflow-contract/types.js.map +1 -0
- package/dist/domains/workflow-contract/validation.d.ts +3 -0
- package/dist/domains/workflow-contract/validation.d.ts.map +1 -0
- package/dist/domains/workflow-contract/validation.js +180 -0
- package/dist/domains/workflow-contract/validation.js.map +1 -0
- package/dist/platform/fs/file-system.d.ts.map +1 -0
- package/dist/platform/fs/file-system.js.map +1 -0
- package/dist/platform/install/detect.d.ts.map +1 -0
- package/dist/{core → platform/install}/detect.js +4 -3
- package/dist/platform/install/detect.js.map +1 -0
- package/dist/platform/install/platforms.d.ts.map +1 -0
- package/dist/{core → platform/install}/platforms.js +41 -0
- package/dist/platform/install/platforms.js.map +1 -0
- package/dist/platform/install/types.d.ts +3 -0
- package/dist/platform/install/types.d.ts.map +1 -0
- package/dist/platform/install/types.js +2 -0
- package/dist/platform/install/types.js.map +1 -0
- package/dist/platform/paths/repository-layout.d.ts +22 -0
- package/dist/platform/paths/repository-layout.d.ts.map +1 -0
- package/dist/platform/paths/repository-layout.js +11 -0
- package/dist/platform/paths/repository-layout.js.map +1 -0
- package/dist/platform/process/command-error.d.ts.map +1 -0
- package/dist/platform/process/command-error.js.map +1 -0
- package/dist/platform/process/shell-quote.d.ts +22 -0
- package/dist/platform/process/shell-quote.d.ts.map +1 -0
- package/dist/platform/process/shell-quote.js +34 -0
- package/dist/platform/process/shell-quote.js.map +1 -0
- package/dist/platform/version/version.d.ts.map +1 -0
- package/dist/{core → platform/version}/version.js +16 -3
- package/dist/platform/version/version.js.map +1 -0
- package/package.json +41 -15
- package/assets/skills/comet/scripts/comet-archive.sh +0 -311
- package/assets/skills/comet/scripts/comet-env.sh +0 -110
- package/assets/skills/comet/scripts/comet-guard.sh +0 -778
- package/assets/skills/comet/scripts/comet-handoff.sh +0 -390
- package/assets/skills/comet/scripts/comet-hook-guard.sh +0 -336
- package/assets/skills/comet/scripts/comet-state.sh +0 -1338
- package/assets/skills/comet/scripts/comet-yaml-validate.sh +0 -225
- package/dist/cli/index.js +0 -84
- package/dist/cli/index.js.map +0 -1
- package/dist/commands/doctor.d.ts.map +0 -1
- package/dist/commands/doctor.js.map +0 -1
- package/dist/commands/i18n.d.ts +0 -4
- package/dist/commands/i18n.d.ts.map +0 -1
- package/dist/commands/i18n.js.map +0 -1
- package/dist/commands/init.d.ts.map +0 -1
- package/dist/commands/init.js.map +0 -1
- package/dist/commands/status.d.ts.map +0 -1
- package/dist/commands/status.js +0 -108
- package/dist/commands/status.js.map +0 -1
- package/dist/commands/uninstall.d.ts.map +0 -1
- package/dist/commands/uninstall.js.map +0 -1
- package/dist/commands/update.d.ts.map +0 -1
- package/dist/commands/update.js.map +0 -1
- package/dist/core/codegraph.d.ts.map +0 -1
- package/dist/core/codegraph.js.map +0 -1
- package/dist/core/command-error.d.ts.map +0 -1
- package/dist/core/command-error.js.map +0 -1
- package/dist/core/detect.d.ts.map +0 -1
- package/dist/core/detect.js.map +0 -1
- package/dist/core/openspec.d.ts +0 -11
- package/dist/core/openspec.d.ts.map +0 -1
- package/dist/core/openspec.js.map +0 -1
- package/dist/core/platforms.d.ts.map +0 -1
- package/dist/core/platforms.js.map +0 -1
- package/dist/core/skills.d.ts +0 -58
- package/dist/core/skills.d.ts.map +0 -1
- package/dist/core/skills.js.map +0 -1
- package/dist/core/superpowers.d.ts.map +0 -1
- package/dist/core/superpowers.js.map +0 -1
- package/dist/core/types.d.ts +0 -2
- package/dist/core/types.d.ts.map +0 -1
- package/dist/core/uninstall.d.ts.map +0 -1
- package/dist/core/uninstall.js.map +0 -1
- package/dist/core/version.d.ts.map +0 -1
- package/dist/core/version.js.map +0 -1
- package/dist/utils/file-system.d.ts.map +0 -1
- package/dist/utils/file-system.js.map +0 -1
- /package/dist/{cli → app/cli}/index.d.ts +0 -0
- /package/dist/{commands → app/commands}/status.d.ts +0 -0
- /package/dist/{core → domains/bundle}/types.js +0 -0
- /package/dist/{utils → platform/fs}/file-system.d.ts +0 -0
- /package/dist/{utils → platform/fs}/file-system.js +0 -0
- /package/dist/{core → platform/install}/detect.d.ts +0 -0
- /package/dist/{core → platform/install}/platforms.d.ts +0 -0
- /package/dist/{core → platform/process}/command-error.d.ts +0 -0
- /package/dist/{core → platform/process}/command-error.js +0 -0
- /package/dist/{core → platform/version}/version.d.ts +0 -0
- /package/scripts/{postinstall.js → install/postinstall.js} +0 -0
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { type Platform } from '../../platform/install/platforms.js';
|
|
2
|
+
import type { InstallScope, InstallMode } from '../../platform/install/types.js';
|
|
3
|
+
import type { LanguageConfig, SkillLanguageId } from './languages.js';
|
|
4
|
+
type HookConfig = {
|
|
5
|
+
matcher: string;
|
|
6
|
+
description: string;
|
|
7
|
+
};
|
|
8
|
+
type Manifest = {
|
|
9
|
+
version: string;
|
|
10
|
+
skills: string[];
|
|
11
|
+
internalSkills?: string[];
|
|
12
|
+
rules?: string[];
|
|
13
|
+
hooks?: Record<string, HookConfig>;
|
|
14
|
+
languages?: LanguageConfig[];
|
|
15
|
+
};
|
|
16
|
+
interface PlannedSkillSourceFile {
|
|
17
|
+
relativePath: string;
|
|
18
|
+
source: string;
|
|
19
|
+
}
|
|
20
|
+
interface PlannedSkillFile {
|
|
21
|
+
source: string;
|
|
22
|
+
destination: string;
|
|
23
|
+
}
|
|
24
|
+
declare function planSkillDirectoryCopy(files: readonly PlannedSkillSourceFile[], destinationRoot: string): PlannedSkillFile[];
|
|
25
|
+
declare function getManagedSkillPaths(manifest: Manifest): string[];
|
|
26
|
+
declare function getUserFacingSkillNames(manifest: Manifest): string[];
|
|
27
|
+
declare function getAssetsDir(): string;
|
|
28
|
+
/**
|
|
29
|
+
* Get the central skills directory for symlink mode.
|
|
30
|
+
* Project scope: <project>/.comet/skills/
|
|
31
|
+
* Global scope: ~/.comet/skills/
|
|
32
|
+
*/
|
|
33
|
+
declare function getCentralSkillsDir(baseDir: string, _scope: InstallScope): string;
|
|
34
|
+
/**
|
|
35
|
+
* Install skills using symlink mode:
|
|
36
|
+
* 1. Copy skills to central store (.comet/skills/)
|
|
37
|
+
* 2. Create symlink from platform dir to central store
|
|
38
|
+
*/
|
|
39
|
+
declare function installSkillsAsSymlink(baseDir: string, platform: Platform, overwrite: boolean, languageSkillsDir?: string, scope?: InstallScope): Promise<{
|
|
40
|
+
copied: number;
|
|
41
|
+
skipped: number;
|
|
42
|
+
failed: number;
|
|
43
|
+
}>;
|
|
44
|
+
declare function copyCometSkillsForPlatform(baseDir: string, platform: Platform, overwrite: boolean, languageSkillsDir?: string, scope?: InstallScope, installMode?: InstallMode): Promise<{
|
|
45
|
+
copied: number;
|
|
46
|
+
skipped: number;
|
|
47
|
+
failed: number;
|
|
48
|
+
}>;
|
|
49
|
+
declare function readManifest(): Promise<Manifest>;
|
|
50
|
+
declare function getManifestSkills(): Promise<string[]>;
|
|
51
|
+
declare function copyCometRulesForPlatform(baseDir: string, platform: Platform, overwrite: boolean, languageId: SkillLanguageId, scope?: InstallScope): Promise<{
|
|
52
|
+
copied: number;
|
|
53
|
+
skipped: number;
|
|
54
|
+
}>;
|
|
55
|
+
declare function computeRuleDestPath(rulesDestDir: string, ruleFileName: string, rulesFormat: string): string;
|
|
56
|
+
declare function formatRuleContent(content: string, ruleFileName: string, rulesFormat: string): string;
|
|
57
|
+
/**
|
|
58
|
+
* Install Comet hooks for platforms that support them.
|
|
59
|
+
* Supports multiple hook formats:
|
|
60
|
+
* 'claude-code' — settings.local.json with PreToolUse array (Claude Code, Codex, Amazon Q)
|
|
61
|
+
* 'qwen' — settings.json with PreToolUse/hooks array (Qwen Code)
|
|
62
|
+
* 'qoder' — settings.json with PreToolUse/hooks array (Qoder)
|
|
63
|
+
* 'gemini' — settings.json with hooks.BeforeTool array (Gemini CLI)
|
|
64
|
+
* 'windsurf' — hooks.json with pre_write_code array
|
|
65
|
+
* 'copilot' — hooks/*.json with preToolUse
|
|
66
|
+
* 'kiro' — hooks/*.kiro.hook JSON files
|
|
67
|
+
*/
|
|
68
|
+
declare function installCometHooksForPlatform(baseDir: string, platform: Platform, scope?: InstallScope): Promise<{
|
|
69
|
+
installed: boolean;
|
|
70
|
+
reason?: string;
|
|
71
|
+
}>;
|
|
72
|
+
declare function isManagedHookCommand(command: unknown, scriptRelPaths: string[]): boolean;
|
|
73
|
+
declare function parseProjectConfigOverrides(content: string): Record<string, string>;
|
|
74
|
+
declare function renderProjectConfig(existing: Record<string, string>, language?: string): string;
|
|
75
|
+
declare function mergeProjectConfig(projectPath: string, language?: string): Promise<void>;
|
|
76
|
+
declare function createWorkingDirs(projectPath: string, language?: string): Promise<void>;
|
|
77
|
+
export { copyCometSkillsForPlatform, copyCometRulesForPlatform, installCometHooksForPlatform, readManifest, getManagedSkillPaths, getManifestSkills, getUserFacingSkillNames, createWorkingDirs, getAssetsDir, computeRuleDestPath, formatRuleContent, isManagedHookCommand, planSkillDirectoryCopy, mergeProjectConfig, parseProjectConfigOverrides, renderProjectConfig, getCentralSkillsDir, installSkillsAsSymlink, };
|
|
78
|
+
export type { Manifest, LanguageConfig, PlannedSkillFile, PlannedSkillSourceFile };
|
|
79
|
+
//# sourceMappingURL=platform-install.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platform-install.d.ts","sourceRoot":"","sources":["../../../domains/skill/platform-install.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,19 +1,184 @@
|
|
|
1
1
|
import path from 'path';
|
|
2
|
-
import {
|
|
2
|
+
import { existsSync } from 'fs';
|
|
3
|
+
import { readFile, writeFile, lstat, unlink, symlink, rm, readdir } from 'fs/promises';
|
|
3
4
|
import { fileURLToPath } from 'url';
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
5
|
+
import { parseDocument } from 'yaml';
|
|
6
|
+
import { fileExists, readJson, copyFile, ensureDir } from '../../platform/fs/file-system.js';
|
|
7
|
+
import { getPlatformSkillsDir } from '../../platform/install/platforms.js';
|
|
8
|
+
import { formatSupportedArtifactLanguages, resolveArtifactLanguage } from './languages.js';
|
|
6
9
|
const __filename = fileURLToPath(import.meta.url);
|
|
7
10
|
const __dirname = path.dirname(__filename);
|
|
11
|
+
function planSkillDirectoryCopy(files, destinationRoot) {
|
|
12
|
+
return files
|
|
13
|
+
.map((file) => ({
|
|
14
|
+
source: file.source,
|
|
15
|
+
destination: path.join(destinationRoot, ...file.relativePath.split('/')),
|
|
16
|
+
}))
|
|
17
|
+
.sort((left, right) => left.destination < right.destination ? -1 : left.destination > right.destination ? 1 : 0);
|
|
18
|
+
}
|
|
19
|
+
function getManagedSkillPaths(manifest) {
|
|
20
|
+
return [...new Set([...manifest.skills, ...(manifest.internalSkills ?? [])])];
|
|
21
|
+
}
|
|
22
|
+
function getUserFacingSkillNames(manifest) {
|
|
23
|
+
return getTopLevelSkillNames(manifest.skills);
|
|
24
|
+
}
|
|
25
|
+
function getManagedSkillReplacementPaths(manifest) {
|
|
26
|
+
const allowed = new Set();
|
|
27
|
+
for (const skillPath of getManagedSkillPaths(manifest)) {
|
|
28
|
+
const parts = skillPath.split('/').filter(Boolean);
|
|
29
|
+
for (let depth = 1; depth <= parts.length; depth++) {
|
|
30
|
+
allowed.add(parts.slice(0, depth).join('/'));
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return allowed;
|
|
34
|
+
}
|
|
35
|
+
async function collectDirectoryEntryPaths(root, current = root) {
|
|
36
|
+
const entries = await readdir(current, { withFileTypes: true });
|
|
37
|
+
const paths = [];
|
|
38
|
+
for (const entry of entries) {
|
|
39
|
+
const fullPath = path.join(current, entry.name);
|
|
40
|
+
const relativePath = path.relative(root, fullPath).split(path.sep).join('/');
|
|
41
|
+
paths.push(relativePath);
|
|
42
|
+
if (entry.isDirectory() && !entry.isSymbolicLink()) {
|
|
43
|
+
paths.push(...(await collectDirectoryEntryPaths(root, fullPath)));
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return paths;
|
|
47
|
+
}
|
|
48
|
+
async function assertDirectoryContainsOnlyManagedEntries(dirPath, managedEntries) {
|
|
49
|
+
const entries = await collectDirectoryEntryPaths(dirPath);
|
|
50
|
+
const unmanagedEntries = entries.filter((entry) => !managedEntries.has(entry));
|
|
51
|
+
if (unmanagedEntries.length === 0)
|
|
52
|
+
return;
|
|
53
|
+
const preview = unmanagedEntries.slice(0, 5).join(', ');
|
|
54
|
+
const suffix = unmanagedEntries.length > 5 ? `, and ${unmanagedEntries.length - 5} more` : '';
|
|
55
|
+
throw new Error(`Refusing to replace ${dirPath} with a symlink because it contains unmanaged entries: ${preview}${suffix}. Move them aside or use copy install mode.`);
|
|
56
|
+
}
|
|
8
57
|
const OPENCODE_COMMAND_HEADER = `---
|
|
9
58
|
description: Run the {skillName} Comet workflow
|
|
10
59
|
---
|
|
11
60
|
`;
|
|
12
61
|
const PI_COMMAND_EXTENSION_FILE = 'comet-commands.ts';
|
|
62
|
+
const OPENCODE_STYLE_PLATFORM_IDS = new Set(['opencode', 'mimocode']);
|
|
13
63
|
function getAssetsDir() {
|
|
14
|
-
|
|
64
|
+
const directAssets = path.resolve(__dirname, '..', '..', 'assets');
|
|
65
|
+
if (existsSync(path.join(directAssets, 'manifest.json'))) {
|
|
66
|
+
return directAssets;
|
|
67
|
+
}
|
|
68
|
+
const packageRootAssets = path.resolve(__dirname, '..', '..', '..', 'assets');
|
|
69
|
+
if (existsSync(path.join(packageRootAssets, 'manifest.json'))) {
|
|
70
|
+
return packageRootAssets;
|
|
71
|
+
}
|
|
72
|
+
return directAssets;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Get the central skills directory for symlink mode.
|
|
76
|
+
* Project scope: <project>/.comet/skills/
|
|
77
|
+
* Global scope: ~/.comet/skills/
|
|
78
|
+
*/
|
|
79
|
+
function getCentralSkillsDir(baseDir, _scope) {
|
|
80
|
+
return path.join(baseDir, '.comet', 'skills');
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Create a symlink from linkPath pointing to target.
|
|
84
|
+
* On Windows, uses 'junction' type for directory symlinks (no admin required).
|
|
85
|
+
*/
|
|
86
|
+
async function createSymlink(target, linkPath, managedEntries) {
|
|
87
|
+
await ensureDir(path.dirname(linkPath));
|
|
88
|
+
// Remove existing link/directory if present
|
|
89
|
+
let stat = null;
|
|
90
|
+
try {
|
|
91
|
+
stat = await lstat(linkPath);
|
|
92
|
+
}
|
|
93
|
+
catch (err) {
|
|
94
|
+
if (err.code !== 'ENOENT') {
|
|
95
|
+
throw err;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
if (stat?.isSymbolicLink()) {
|
|
99
|
+
await unlink(linkPath);
|
|
100
|
+
}
|
|
101
|
+
else if (stat?.isDirectory()) {
|
|
102
|
+
// For directories, try unlink first (handles Windows junctions)
|
|
103
|
+
try {
|
|
104
|
+
await unlink(linkPath);
|
|
105
|
+
}
|
|
106
|
+
catch {
|
|
107
|
+
await assertDirectoryContainsOnlyManagedEntries(linkPath, managedEntries);
|
|
108
|
+
await rm(linkPath, { recursive: true, force: true });
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
// Windows uses 'junction' for directory symlinks (no admin privileges required)
|
|
112
|
+
const type = process.platform === 'win32' ? 'junction' : 'dir';
|
|
113
|
+
await symlink(target, linkPath, type);
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Install skills using symlink mode:
|
|
117
|
+
* 1. Copy skills to central store (.comet/skills/)
|
|
118
|
+
* 2. Create symlink from platform dir to central store
|
|
119
|
+
*/
|
|
120
|
+
async function installSkillsAsSymlink(baseDir, platform, overwrite, languageSkillsDir = 'skills', scope = 'project') {
|
|
121
|
+
const centralDir = getCentralSkillsDir(baseDir, scope);
|
|
122
|
+
const assetsDir = getAssetsDir();
|
|
123
|
+
const manifestPath = path.join(assetsDir, 'manifest.json');
|
|
124
|
+
if (!(await fileExists(manifestPath))) {
|
|
125
|
+
throw new Error(`Manifest not found at ${manifestPath}`);
|
|
126
|
+
}
|
|
127
|
+
const manifest = await readJson(manifestPath);
|
|
128
|
+
if (!manifest || !Array.isArray(manifest.skills)) {
|
|
129
|
+
throw new Error(`Invalid manifest at ${manifestPath}: "skills" must be an array`);
|
|
130
|
+
}
|
|
131
|
+
const managedSkillReplacementPaths = getManagedSkillReplacementPaths(manifest);
|
|
132
|
+
// Step 1: Copy skills to central store
|
|
133
|
+
let copied = 0;
|
|
134
|
+
let skippedCount = 0;
|
|
135
|
+
let failedCount = 0;
|
|
136
|
+
for (const skillRelPath of getManagedSkillPaths(manifest)) {
|
|
137
|
+
const isScript = skillRelPath.includes('/scripts/');
|
|
138
|
+
const sourceDir = isScript ? 'skills' : languageSkillsDir;
|
|
139
|
+
const src = path.join(assetsDir, sourceDir, skillRelPath);
|
|
140
|
+
const centralDest = path.join(centralDir, 'skills', skillRelPath);
|
|
141
|
+
if (!overwrite && (await fileExists(centralDest))) {
|
|
142
|
+
skippedCount++;
|
|
143
|
+
continue;
|
|
144
|
+
}
|
|
145
|
+
try {
|
|
146
|
+
await copyFile(src, centralDest);
|
|
147
|
+
copied++;
|
|
148
|
+
}
|
|
149
|
+
catch (err) {
|
|
150
|
+
failedCount++;
|
|
151
|
+
console.error(` Failed to copy ${skillRelPath} to central store: ${err.message}`);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
// Step 2: Create symlink from platform dir to central store
|
|
155
|
+
const platformSkillsDir = path.join(baseDir, getPlatformSkillsDir(platform, scope), 'skills');
|
|
156
|
+
const centralSkillsDir = path.join(centralDir, 'skills');
|
|
157
|
+
try {
|
|
158
|
+
await createSymlink(centralSkillsDir, platformSkillsDir, managedSkillReplacementPaths);
|
|
159
|
+
}
|
|
160
|
+
catch (err) {
|
|
161
|
+
failedCount++;
|
|
162
|
+
console.error(` Failed to create symlink ${platformSkillsDir} -> ${centralSkillsDir}: ${err.message}`);
|
|
163
|
+
}
|
|
164
|
+
// Handle OpenCode-style platform commands (still need copy, as command content may differ)
|
|
165
|
+
if (OPENCODE_STYLE_PLATFORM_IDS.has(platform.id)) {
|
|
166
|
+
const result = await createOpenCodeCommands(baseDir, platform, manifest.skills, overwrite, scope, languageSkillsDir);
|
|
167
|
+
copied += result.copied;
|
|
168
|
+
skippedCount += result.skipped;
|
|
169
|
+
}
|
|
170
|
+
// Handle Pi platform command extension
|
|
171
|
+
if (platform.id === 'pi') {
|
|
172
|
+
const result = await createPiCommandExtension(baseDir, platform, manifest.skills, overwrite, scope);
|
|
173
|
+
copied += result.copied;
|
|
174
|
+
skippedCount += result.skipped;
|
|
175
|
+
}
|
|
176
|
+
return { copied, skipped: skippedCount, failed: failedCount };
|
|
15
177
|
}
|
|
16
|
-
async function copyCometSkillsForPlatform(baseDir, platform, overwrite, languageSkillsDir = 'skills', scope = 'project') {
|
|
178
|
+
async function copyCometSkillsForPlatform(baseDir, platform, overwrite, languageSkillsDir = 'skills', scope = 'project', installMode = 'copy') {
|
|
179
|
+
if (installMode === 'symlink') {
|
|
180
|
+
return installSkillsAsSymlink(baseDir, platform, overwrite, languageSkillsDir, scope);
|
|
181
|
+
}
|
|
17
182
|
const assetsDir = getAssetsDir();
|
|
18
183
|
const manifestPath = path.join(assetsDir, 'manifest.json');
|
|
19
184
|
if (!(await fileExists(manifestPath))) {
|
|
@@ -25,7 +190,8 @@ async function copyCometSkillsForPlatform(baseDir, platform, overwrite, language
|
|
|
25
190
|
}
|
|
26
191
|
let copied = 0;
|
|
27
192
|
let skippedCount = 0;
|
|
28
|
-
|
|
193
|
+
let failedCount = 0;
|
|
194
|
+
for (const skillRelPath of getManagedSkillPaths(manifest)) {
|
|
29
195
|
const isScript = skillRelPath.includes('/scripts/');
|
|
30
196
|
const sourceDir = isScript ? 'skills' : languageSkillsDir;
|
|
31
197
|
const src = path.join(assetsDir, sourceDir, skillRelPath);
|
|
@@ -39,10 +205,15 @@ async function copyCometSkillsForPlatform(baseDir, platform, overwrite, language
|
|
|
39
205
|
copied++;
|
|
40
206
|
}
|
|
41
207
|
catch (err) {
|
|
208
|
+
// Surface the failure via the returned `failed` count instead of
|
|
209
|
+
// swallowing it, so a half-installed state (e.g. a missing
|
|
210
|
+
// comet-hook-guard.mjs) is visible in the summary rather than silently
|
|
211
|
+
// breaking phase guard downstream.
|
|
212
|
+
failedCount++;
|
|
42
213
|
console.error(` Failed to copy ${skillRelPath}: ${err.message}`);
|
|
43
214
|
}
|
|
44
215
|
}
|
|
45
|
-
if (platform.id
|
|
216
|
+
if (OPENCODE_STYLE_PLATFORM_IDS.has(platform.id)) {
|
|
46
217
|
const result = await createOpenCodeCommands(baseDir, platform, manifest.skills, overwrite, scope, languageSkillsDir);
|
|
47
218
|
copied += result.copied;
|
|
48
219
|
skippedCount += result.skipped;
|
|
@@ -52,7 +223,7 @@ async function copyCometSkillsForPlatform(baseDir, platform, overwrite, language
|
|
|
52
223
|
copied += result.copied;
|
|
53
224
|
skippedCount += result.skipped;
|
|
54
225
|
}
|
|
55
|
-
return { copied, skipped: skippedCount };
|
|
226
|
+
return { copied, skipped: skippedCount, failed: failedCount };
|
|
56
227
|
}
|
|
57
228
|
function getTopLevelSkillNames(skillPaths) {
|
|
58
229
|
return skillPaths.flatMap((skillPath) => {
|
|
@@ -168,7 +339,7 @@ async function readManifest() {
|
|
|
168
339
|
}
|
|
169
340
|
async function getManifestSkills() {
|
|
170
341
|
const manifest = await readManifest();
|
|
171
|
-
return manifest
|
|
342
|
+
return getManagedSkillPaths(manifest);
|
|
172
343
|
}
|
|
173
344
|
/**
|
|
174
345
|
* Copy Comet rule files to a platform's rules directory.
|
|
@@ -178,12 +349,38 @@ async function getManifestSkills() {
|
|
|
178
349
|
* 'copilot' = GitHub Copilot .instructions.md with applyTo frontmatter
|
|
179
350
|
* Skips platforms without rulesDir.
|
|
180
351
|
*/
|
|
181
|
-
|
|
352
|
+
// Rule variants share a base name and differ only by a `.en.md` suffix
|
|
353
|
+
// (e.g. `comet-phase-guard.md` = zh default, `comet-phase-guard.en.md` = en).
|
|
354
|
+
// Centralized here so the naming convention only needs to change in one place.
|
|
355
|
+
const EN_RULE_SUFFIX = /\.en\.md$/;
|
|
356
|
+
function isEnglishRuleVariant(ruleRelPath) {
|
|
357
|
+
return EN_RULE_SUFFIX.test(ruleRelPath);
|
|
358
|
+
}
|
|
359
|
+
function toRuleBaseName(ruleRelPath) {
|
|
360
|
+
return ruleRelPath.replace(EN_RULE_SUFFIX, '.md');
|
|
361
|
+
}
|
|
362
|
+
// Pick exactly one variant per base name for the requested language, falling
|
|
363
|
+
// back to whichever variant exists if there's no per-language pair.
|
|
364
|
+
function selectRulePathsForLanguage(rulePaths, languageId) {
|
|
365
|
+
const wantEnglish = languageId === 'en';
|
|
366
|
+
const selected = new Map();
|
|
367
|
+
for (const rulePath of rulePaths) {
|
|
368
|
+
const isEnglishVariant = isEnglishRuleVariant(rulePath);
|
|
369
|
+
const baseKey = toRuleBaseName(rulePath);
|
|
370
|
+
const matched = isEnglishVariant === wantEnglish;
|
|
371
|
+
const existing = selected.get(baseKey);
|
|
372
|
+
if (!existing || (matched && !existing.matched)) {
|
|
373
|
+
selected.set(baseKey, { rulePath, matched });
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
return [...selected.values()].map((entry) => entry.rulePath);
|
|
377
|
+
}
|
|
378
|
+
async function copyCometRulesForPlatform(baseDir, platform, overwrite, languageId, scope = 'project') {
|
|
182
379
|
if (!platform.rulesDir || !platform.rulesFormat) {
|
|
183
380
|
return { copied: 0, skipped: 0 };
|
|
184
381
|
}
|
|
185
382
|
const manifest = await readManifest();
|
|
186
|
-
const rulePaths = manifest.rules;
|
|
383
|
+
const rulePaths = selectRulePathsForLanguage(manifest.rules ?? [], languageId);
|
|
187
384
|
if (!rulePaths || rulePaths.length === 0) {
|
|
188
385
|
return { copied: 0, skipped: 0 };
|
|
189
386
|
}
|
|
@@ -203,7 +400,9 @@ async function copyCometRulesForPlatform(baseDir, platform, overwrite, scope = '
|
|
|
203
400
|
console.error(` Rule source not found: ${ruleRelPath}`);
|
|
204
401
|
continue;
|
|
205
402
|
}
|
|
206
|
-
|
|
403
|
+
// Normalize the `.en` infix away so the installed file name is the same
|
|
404
|
+
// regardless of which language variant was selected.
|
|
405
|
+
const ruleFileName = toRuleBaseName(path.basename(ruleRelPath));
|
|
207
406
|
const rulesDestDir = path.join(rulesBase, platform.rulesDir);
|
|
208
407
|
const dest = computeRuleDestPath(rulesDestDir, ruleFileName, platform.rulesFormat);
|
|
209
408
|
if (!overwrite && (await fileExists(dest))) {
|
|
@@ -281,18 +480,18 @@ async function installCometHooksForPlatform(baseDir, platform, scope = 'project'
|
|
|
281
480
|
try {
|
|
282
481
|
switch (hookFormat) {
|
|
283
482
|
case 'claude-code':
|
|
284
|
-
return installClaudeCodeHooks(platformBase, skillsDir, hooksConfig);
|
|
483
|
+
return installClaudeCodeHooks(baseDir, platformBase, skillsDir, hooksConfig);
|
|
285
484
|
case 'qwen':
|
|
286
485
|
case 'qoder':
|
|
287
|
-
return installQwenStyleHooks(platformBase, skillsDir, hooksConfig, hookFormat);
|
|
486
|
+
return installQwenStyleHooks(baseDir, platformBase, skillsDir, hooksConfig, hookFormat);
|
|
288
487
|
case 'gemini':
|
|
289
|
-
return installGeminiHooks(platformBase, skillsDir, hooksConfig);
|
|
488
|
+
return installGeminiHooks(baseDir, platformBase, skillsDir, hooksConfig);
|
|
290
489
|
case 'windsurf':
|
|
291
|
-
return installWindsurfHooks(platformBase, skillsDir, hooksConfig);
|
|
490
|
+
return installWindsurfHooks(baseDir, platformBase, skillsDir, hooksConfig);
|
|
292
491
|
case 'copilot':
|
|
293
|
-
return installCopilotHooks(platformBase, skillsDir, hooksConfig);
|
|
492
|
+
return installCopilotHooks(baseDir, platformBase, skillsDir, hooksConfig);
|
|
294
493
|
case 'kiro':
|
|
295
|
-
return installKiroHooks(platformBase, skillsDir, hooksConfig);
|
|
494
|
+
return installKiroHooks(baseDir, platformBase, skillsDir, hooksConfig);
|
|
296
495
|
default:
|
|
297
496
|
return { installed: false, reason: `unsupported hook format: ${hookFormat}` };
|
|
298
497
|
}
|
|
@@ -301,20 +500,29 @@ async function installCometHooksForPlatform(baseDir, platform, scope = 'project'
|
|
|
301
500
|
return { installed: false, reason: err.message };
|
|
302
501
|
}
|
|
303
502
|
}
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
503
|
+
function quoteCommandArg(value) {
|
|
504
|
+
return `"${value.replaceAll('\\', '/').replaceAll('"', '\\"')}"`;
|
|
505
|
+
}
|
|
506
|
+
/** Build a hook command that is stable even when the hook runner executes from a subdirectory. */
|
|
507
|
+
function buildHookCommand(baseDir, skillsDir, scriptRelPath) {
|
|
508
|
+
const projectRoot = path.resolve(baseDir);
|
|
509
|
+
const scriptPath = path.join(projectRoot, skillsDir, 'skills', ...scriptRelPath.split('/'));
|
|
510
|
+
return `node ${quoteCommandArg(scriptPath)} --project-root ${quoteCommandArg(projectRoot)}`;
|
|
307
511
|
}
|
|
308
512
|
function isManagedHookCommand(command, scriptRelPaths) {
|
|
309
513
|
if (typeof command !== 'string')
|
|
310
514
|
return false;
|
|
515
|
+
// Match both the current `node .../comet-hook-guard.mjs` form and the legacy
|
|
516
|
+
// `bash .../comet-hook-guard.sh` form so uninstall also cleans up hooks
|
|
517
|
+
// written by older Comet releases. Compare basenames without extension.
|
|
311
518
|
const commandPath = command
|
|
312
519
|
.trim()
|
|
313
|
-
.match(/^bash\s+["']?([^"'\s]+)["']?(?:\s|$)/)?.[1]
|
|
520
|
+
.match(/^(?:node|bash|sh)\s+["']?([^"'\s]+)["']?(?:\s|$)/)?.[1]
|
|
314
521
|
?.replace(/\\/g, '/');
|
|
315
522
|
if (!commandPath)
|
|
316
523
|
return false;
|
|
317
|
-
|
|
524
|
+
const normalize = (value) => value.replace(/\.(?:sh|mjs)$/u, '');
|
|
525
|
+
return scriptRelPaths.some((scriptRelPath) => normalize(commandPath).endsWith(`/skills/${normalize(scriptRelPath.replace(/\\/g, '/'))}`));
|
|
318
526
|
}
|
|
319
527
|
function mergeHookGroups(existingGroups, newGroups, scriptRelPaths) {
|
|
320
528
|
const mergedGroups = existingGroups.flatMap((group) => {
|
|
@@ -348,12 +556,12 @@ function asHookGroup(value) {
|
|
|
348
556
|
* Claude Code, Codex, Amazon Q format:
|
|
349
557
|
* Writes to settings.local.json with { hooks: { PreToolUse: [...] } }
|
|
350
558
|
*/
|
|
351
|
-
async function installClaudeCodeHooks(platformBase, skillsDir, hooksConfig) {
|
|
559
|
+
async function installClaudeCodeHooks(baseDir, platformBase, skillsDir, hooksConfig) {
|
|
352
560
|
const settingsPath = path.join(platformBase, 'settings.local.json');
|
|
353
561
|
// Group by matcher so hooks sharing the same matcher are merged
|
|
354
562
|
const matcherGroups = {};
|
|
355
563
|
for (const [scriptRelPath, config] of Object.entries(hooksConfig)) {
|
|
356
|
-
const command = buildHookCommand(skillsDir, scriptRelPath);
|
|
564
|
+
const command = buildHookCommand(baseDir, skillsDir, scriptRelPath);
|
|
357
565
|
if (!matcherGroups[config.matcher]) {
|
|
358
566
|
matcherGroups[config.matcher] = [];
|
|
359
567
|
}
|
|
@@ -381,7 +589,7 @@ async function installClaudeCodeHooks(platformBase, skillsDir, hooksConfig) {
|
|
|
381
589
|
* Qwen Code / Qoder format:
|
|
382
590
|
* Writes to settings.json with { hooks: { PreToolUse: [{ matcher, hooks: [{ type, command }] }] } }
|
|
383
591
|
*/
|
|
384
|
-
async function installQwenStyleHooks(platformBase, skillsDir, hooksConfig, _hookFormat) {
|
|
592
|
+
async function installQwenStyleHooks(baseDir, platformBase, skillsDir, hooksConfig, _hookFormat) {
|
|
385
593
|
const settingsPath = path.join(platformBase, 'settings.json');
|
|
386
594
|
// Group by matcher
|
|
387
595
|
const matcherGroups = {};
|
|
@@ -391,7 +599,7 @@ async function installQwenStyleHooks(platformBase, skillsDir, hooksConfig, _hook
|
|
|
391
599
|
}
|
|
392
600
|
matcherGroups[config.matcher].push({
|
|
393
601
|
type: 'command',
|
|
394
|
-
command: buildHookCommand(skillsDir, scriptRelPath),
|
|
602
|
+
command: buildHookCommand(baseDir, skillsDir, scriptRelPath),
|
|
395
603
|
description: config.description,
|
|
396
604
|
});
|
|
397
605
|
}
|
|
@@ -420,7 +628,7 @@ async function installQwenStyleHooks(platformBase, skillsDir, hooksConfig, _hook
|
|
|
420
628
|
* Gemini CLI format:
|
|
421
629
|
* Writes to .gemini/settings.json with { hooks: { BeforeTool: [{ matcher, hooks: [{ type, command }] }] } }
|
|
422
630
|
*/
|
|
423
|
-
async function installGeminiHooks(platformBase, skillsDir, hooksConfig) {
|
|
631
|
+
async function installGeminiHooks(baseDir, platformBase, skillsDir, hooksConfig) {
|
|
424
632
|
const settingsPath = path.join(platformBase, 'settings.json');
|
|
425
633
|
const entries = [];
|
|
426
634
|
for (const [scriptRelPath, config] of Object.entries(hooksConfig)) {
|
|
@@ -429,7 +637,7 @@ async function installGeminiHooks(platformBase, skillsDir, hooksConfig) {
|
|
|
429
637
|
hooks: [
|
|
430
638
|
{
|
|
431
639
|
type: 'command',
|
|
432
|
-
command: buildHookCommand(skillsDir, scriptRelPath),
|
|
640
|
+
command: buildHookCommand(baseDir, skillsDir, scriptRelPath),
|
|
433
641
|
name: config.description,
|
|
434
642
|
},
|
|
435
643
|
],
|
|
@@ -456,12 +664,12 @@ async function installGeminiHooks(platformBase, skillsDir, hooksConfig) {
|
|
|
456
664
|
* Windsurf format:
|
|
457
665
|
* Writes to .windsurf/hooks.json with { hooks: { pre_write_code: [{ command }] } }
|
|
458
666
|
*/
|
|
459
|
-
async function installWindsurfHooks(platformBase, skillsDir, hooksConfig) {
|
|
667
|
+
async function installWindsurfHooks(baseDir, platformBase, skillsDir, hooksConfig) {
|
|
460
668
|
const hooksPath = path.join(platformBase, 'hooks.json');
|
|
461
669
|
const entries = [];
|
|
462
670
|
for (const [scriptRelPath] of Object.entries(hooksConfig)) {
|
|
463
671
|
entries.push({
|
|
464
|
-
command: buildHookCommand(skillsDir, scriptRelPath),
|
|
672
|
+
command: buildHookCommand(baseDir, skillsDir, scriptRelPath),
|
|
465
673
|
show_output: true,
|
|
466
674
|
});
|
|
467
675
|
}
|
|
@@ -487,14 +695,14 @@ async function installWindsurfHooks(platformBase, skillsDir, hooksConfig) {
|
|
|
487
695
|
* GitHub Copilot format:
|
|
488
696
|
* Writes to .github/hooks/comet-guard.json with preToolUse hooks config.
|
|
489
697
|
*/
|
|
490
|
-
async function installCopilotHooks(platformBase, skillsDir, hooksConfig) {
|
|
698
|
+
async function installCopilotHooks(baseDir, platformBase, skillsDir, hooksConfig) {
|
|
491
699
|
const hooksDir = path.join(platformBase, 'hooks');
|
|
492
700
|
const hookFilePath = path.join(hooksDir, 'comet-guard.json');
|
|
493
701
|
const scriptEntries = [];
|
|
494
702
|
for (const [scriptRelPath] of Object.entries(hooksConfig)) {
|
|
495
|
-
const cmd = buildHookCommand(skillsDir, scriptRelPath);
|
|
496
|
-
//
|
|
497
|
-
scriptEntries.push({ bash: cmd, powershell:
|
|
703
|
+
const cmd = buildHookCommand(baseDir, skillsDir, scriptRelPath);
|
|
704
|
+
// Hook runs through node on every platform; both fields use the same command
|
|
705
|
+
scriptEntries.push({ bash: cmd, powershell: cmd });
|
|
498
706
|
}
|
|
499
707
|
const hookConfig = {
|
|
500
708
|
version: 1,
|
|
@@ -510,10 +718,10 @@ async function installCopilotHooks(platformBase, skillsDir, hooksConfig) {
|
|
|
510
718
|
* Kiro format:
|
|
511
719
|
* Writes to .kiro/hooks/comet-phase-guard.kiro.hook as a JSON file.
|
|
512
720
|
*/
|
|
513
|
-
async function installKiroHooks(platformBase, skillsDir, hooksConfig) {
|
|
721
|
+
async function installKiroHooks(baseDir, platformBase, skillsDir, hooksConfig) {
|
|
514
722
|
const hooksDir = path.join(platformBase, 'hooks');
|
|
515
723
|
for (const [scriptRelPath, config] of Object.entries(hooksConfig)) {
|
|
516
|
-
const hookFileName = path.basename(scriptRelPath).replace(/\.
|
|
724
|
+
const hookFileName = path.basename(scriptRelPath).replace(/\.mjs$/, '.kiro.hook');
|
|
517
725
|
const hookFilePath = path.join(hooksDir, hookFileName);
|
|
518
726
|
// Map Write|Edit matcher to Kiro's write tool category
|
|
519
727
|
const toolName = config.matcher === 'Write|Edit' ? 'write' : '*';
|
|
@@ -528,7 +736,7 @@ async function installKiroHooks(platformBase, skillsDir, hooksConfig) {
|
|
|
528
736
|
},
|
|
529
737
|
then: {
|
|
530
738
|
type: 'runCommand',
|
|
531
|
-
command: buildHookCommand(skillsDir, scriptRelPath),
|
|
739
|
+
command: buildHookCommand(baseDir, skillsDir, scriptRelPath),
|
|
532
740
|
},
|
|
533
741
|
};
|
|
534
742
|
await ensureDir(hooksDir);
|
|
@@ -536,7 +744,67 @@ async function installKiroHooks(platformBase, skillsDir, hooksConfig) {
|
|
|
536
744
|
}
|
|
537
745
|
return { installed: true };
|
|
538
746
|
}
|
|
539
|
-
|
|
747
|
+
function managedConfigFields(language = 'en') {
|
|
748
|
+
const artifactLanguage = resolveArtifactLanguage(language);
|
|
749
|
+
return [
|
|
750
|
+
{
|
|
751
|
+
key: 'language',
|
|
752
|
+
def: artifactLanguage.id,
|
|
753
|
+
comment: `# language: ${formatSupportedArtifactLanguages()}`,
|
|
754
|
+
},
|
|
755
|
+
{ key: 'context_compression', def: 'off', comment: '# context_compression: off | beta' },
|
|
756
|
+
{ key: 'review_mode', def: 'standard', comment: '# review_mode: off | standard | thorough' },
|
|
757
|
+
{ key: 'auto_transition', def: 'true', comment: '# auto_transition: true | false' },
|
|
758
|
+
];
|
|
759
|
+
}
|
|
760
|
+
const MANAGED_CONFIG_FIELDS = managedConfigFields();
|
|
761
|
+
function getManagedConfigFields(language = 'en') {
|
|
762
|
+
return language === 'en' ? MANAGED_CONFIG_FIELDS : managedConfigFields(language);
|
|
763
|
+
}
|
|
764
|
+
function parseProjectConfigOverrides(content) {
|
|
765
|
+
if (!content.trim())
|
|
766
|
+
return {};
|
|
767
|
+
const doc = parseDocument(content, { uniqueKeys: false });
|
|
768
|
+
if (doc.errors.length > 0)
|
|
769
|
+
return {};
|
|
770
|
+
const js = doc.toJS();
|
|
771
|
+
if (!js || typeof js !== 'object' || Array.isArray(js))
|
|
772
|
+
return {};
|
|
773
|
+
const out = {};
|
|
774
|
+
for (const [k, v] of Object.entries(js)) {
|
|
775
|
+
if (v === null || v === undefined)
|
|
776
|
+
continue;
|
|
777
|
+
if (typeof v === 'string' || typeof v === 'number' || typeof v === 'boolean') {
|
|
778
|
+
out[k] = String(v);
|
|
779
|
+
}
|
|
780
|
+
}
|
|
781
|
+
return out;
|
|
782
|
+
}
|
|
783
|
+
function renderProjectConfig(existing, language = 'en') {
|
|
784
|
+
const lines = [];
|
|
785
|
+
const fields = getManagedConfigFields(language);
|
|
786
|
+
const managed = new Set(fields.map((f) => f.key));
|
|
787
|
+
for (const f of fields) {
|
|
788
|
+
lines.push(f.comment);
|
|
789
|
+
lines.push(`${f.key}: ${existing[f.key] ?? f.def}`);
|
|
790
|
+
}
|
|
791
|
+
for (const [k, v] of Object.entries(existing)) {
|
|
792
|
+
if (!managed.has(k))
|
|
793
|
+
lines.push(`${k}: ${v}`);
|
|
794
|
+
}
|
|
795
|
+
lines.push('');
|
|
796
|
+
return lines.join('\n');
|
|
797
|
+
}
|
|
798
|
+
async function mergeProjectConfig(projectPath, language = 'en') {
|
|
799
|
+
const configPath = path.join(projectPath, '.comet', 'config.yaml');
|
|
800
|
+
let existing = {};
|
|
801
|
+
if (await fileExists(configPath)) {
|
|
802
|
+
existing = parseProjectConfigOverrides(await readFile(configPath, 'utf-8'));
|
|
803
|
+
}
|
|
804
|
+
await ensureDir(path.dirname(configPath));
|
|
805
|
+
await writeFile(configPath, renderProjectConfig(existing, language), 'utf-8');
|
|
806
|
+
}
|
|
807
|
+
async function createWorkingDirs(projectPath, language = 'en') {
|
|
540
808
|
const dirs = [
|
|
541
809
|
path.join(projectPath, 'docs', 'superpowers', 'specs'),
|
|
542
810
|
path.join(projectPath, 'docs', 'superpowers', 'plans'),
|
|
@@ -545,18 +813,7 @@ async function createWorkingDirs(projectPath) {
|
|
|
545
813
|
for (const dir of dirs) {
|
|
546
814
|
await ensureDir(dir);
|
|
547
815
|
}
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
'context_compression: off',
|
|
553
|
-
'# review_mode: off | standard | thorough',
|
|
554
|
-
'review_mode: off',
|
|
555
|
-
'# auto_transition: true | false',
|
|
556
|
-
'auto_transition: true',
|
|
557
|
-
'',
|
|
558
|
-
].join('\n'), 'utf-8');
|
|
559
|
-
}
|
|
560
|
-
}
|
|
561
|
-
export { copyCometSkillsForPlatform, copyCometRulesForPlatform, installCometHooksForPlatform, readManifest, getManifestSkills, createWorkingDirs, getAssetsDir, computeRuleDestPath, isManagedHookCommand, };
|
|
562
|
-
//# sourceMappingURL=skills.js.map
|
|
816
|
+
await mergeProjectConfig(projectPath, language);
|
|
817
|
+
}
|
|
818
|
+
export { copyCometSkillsForPlatform, copyCometRulesForPlatform, installCometHooksForPlatform, readManifest, getManagedSkillPaths, getManifestSkills, getUserFacingSkillNames, createWorkingDirs, getAssetsDir, computeRuleDestPath, formatRuleContent, isManagedHookCommand, planSkillDirectoryCopy, mergeProjectConfig, parseProjectConfigOverrides, renderProjectConfig, getCentralSkillsDir, installSkillsAsSymlink, };
|
|
819
|
+
//# sourceMappingURL=platform-install.js.map
|