@rpamis/comet 0.4.0-beta.1 → 0.4.0-beta.10
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 +279 -113
- package/assets/manifest.json +17 -5
- package/assets/skills/comet/SKILL.md +17 -256
- package/assets/skills/comet/reference/auto-transition.md +1 -1
- package/assets/skills/comet/reference/classic-layout.md +34 -0
- package/assets/skills/comet/reference/comet-yaml-fields.md +14 -8
- package/assets/skills/comet/reference/context-recovery.md +14 -4
- package/assets/skills/comet/reference/decision-point.md +11 -0
- package/assets/skills/comet/reference/file-structure.md +2 -2
- package/assets/skills/comet/reference/intent-frame.md +3 -3
- package/assets/skills/comet/reference/scripts.md +47 -15
- package/assets/skills/comet/reference/subagent-dispatch.md +8 -7
- package/assets/skills/comet/rules/comet-phase-guard.en.md +34 -31
- package/assets/skills/comet/rules/comet-phase-guard.md +34 -32
- 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 +8074 -0
- package/assets/skills/comet/scripts/comet-hook-router.mjs +12786 -0
- package/assets/skills/comet/scripts/comet-resume-probe.mjs +3 -0
- package/assets/skills/comet/scripts/comet-runtime.mjs +10449 -4105
- package/assets/skills/comet-any/SKILL.md +5 -5
- package/assets/skills/comet-any/reference/authored-zone-example.md +10 -5
- package/assets/skills/comet-any/reference/authoring-subagents.md +1 -1
- package/assets/skills/comet-any/reference/bundle-authoring.md +2 -2
- package/assets/skills/comet-any/reference/subagents/pause-points-author.md +14 -11
- 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 +4 -2
- package/assets/skills/comet-any/reference/subagents/workflow-entry-author.md +8 -7
- package/assets/skills/comet-archive/SKILL.md +69 -26
- package/assets/skills/comet-build/SKILL.md +77 -58
- package/assets/skills/comet-classic/SKILL.md +295 -0
- package/assets/skills/comet-design/SKILL.md +40 -36
- package/assets/skills/comet-hotfix/SKILL.md +57 -35
- package/assets/skills/comet-native/SKILL.md +133 -0
- package/assets/skills/comet-native/reference/artifacts.md +141 -0
- package/assets/skills/comet-native/reference/clarification.md +54 -0
- package/assets/skills/comet-native/reference/commands.md +170 -0
- package/assets/skills/comet-native/reference/recovery.md +96 -0
- package/assets/skills/comet-native/scripts/comet-native-hook-guard.mjs +4 -0
- package/assets/skills/comet-native/scripts/comet-native-runtime.mjs +34468 -0
- package/assets/skills/comet-open/SKILL.md +119 -59
- package/assets/skills/comet-tweak/SKILL.md +52 -27
- package/assets/skills/comet-verify/SKILL.md +65 -73
- package/assets/skills-zh/comet/SKILL.md +17 -244
- package/assets/skills-zh/comet/reference/auto-transition.md +1 -1
- package/assets/skills-zh/comet/reference/classic-layout.md +34 -0
- package/assets/skills-zh/comet/reference/comet-yaml-fields.md +13 -8
- package/assets/skills-zh/comet/reference/context-recovery.md +14 -4
- package/assets/skills-zh/comet/reference/decision-point.md +11 -0
- package/assets/skills-zh/comet/reference/file-structure.md +2 -2
- package/assets/skills-zh/comet/reference/intent-frame.md +3 -3
- package/assets/skills-zh/comet/reference/scripts.md +47 -15
- package/assets/skills-zh/comet/reference/subagent-dispatch.md +8 -7
- package/assets/skills-zh/comet-any/SKILL.md +5 -5
- package/assets/skills-zh/comet-any/reference/authored-zone-example.md +10 -5
- package/assets/skills-zh/comet-any/reference/authoring-subagents.md +1 -1
- package/assets/skills-zh/comet-any/reference/bundle-authoring.md +2 -2
- package/assets/skills-zh/comet-any/reference/subagents/pause-points-author.md +14 -12
- 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 +4 -2
- package/assets/skills-zh/comet-any/reference/subagents/workflow-entry-author.md +8 -7
- package/assets/skills-zh/comet-archive/SKILL.md +69 -26
- package/assets/skills-zh/comet-build/SKILL.md +77 -58
- package/assets/skills-zh/comet-classic/SKILL.md +283 -0
- package/assets/skills-zh/comet-design/SKILL.md +40 -36
- package/assets/skills-zh/comet-hotfix/SKILL.md +56 -34
- package/assets/skills-zh/comet-native/SKILL.md +133 -0
- package/assets/skills-zh/comet-native/reference/artifacts.md +141 -0
- package/assets/skills-zh/comet-native/reference/clarification.md +54 -0
- package/assets/skills-zh/comet-native/reference/commands.md +170 -0
- package/assets/skills-zh/comet-native/reference/recovery.md +96 -0
- package/assets/skills-zh/comet-open/SKILL.md +118 -58
- package/assets/skills-zh/comet-tweak/SKILL.md +51 -26
- package/assets/skills-zh/comet-verify/SKILL.md +65 -73
- package/dist/app/cli/comet-banner.d.ts +25 -0
- package/dist/app/cli/comet-banner.d.ts.map +1 -0
- package/dist/app/cli/comet-banner.js +265 -0
- package/dist/app/cli/comet-banner.js.map +1 -0
- package/dist/app/cli/index.js +113 -16
- package/dist/app/cli/index.js.map +1 -1
- package/dist/app/commands/classic.d.ts +5 -0
- package/dist/app/commands/classic.d.ts.map +1 -0
- package/dist/app/commands/classic.js +32 -0
- package/dist/app/commands/classic.js.map +1 -0
- 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 +4 -0
- package/dist/app/commands/doctor.d.ts.map +1 -1
- package/dist/app/commands/doctor.js +926 -95
- 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 +80 -22
- 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 +18 -6
- package/dist/app/commands/i18n.js.map +1 -1
- package/dist/app/commands/init.d.ts +13 -3
- package/dist/app/commands/init.d.ts.map +1 -1
- package/dist/app/commands/init.js +561 -72
- 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 +13 -0
- package/dist/app/commands/project-scope-selection.d.ts.map +1 -0
- package/dist/app/commands/project-scope-selection.js +35 -0
- package/dist/app/commands/project-scope-selection.js.map +1 -0
- package/dist/app/commands/resume-probe.d.ts +12 -0
- package/dist/app/commands/resume-probe.d.ts.map +1 -0
- package/dist/app/commands/resume-probe.js +68 -0
- package/dist/app/commands/resume-probe.js.map +1 -0
- package/dist/app/commands/status.d.ts.map +1 -1
- package/dist/app/commands/status.js +70 -104
- package/dist/app/commands/status.js.map +1 -1
- package/dist/app/commands/uninstall.d.ts +5 -0
- package/dist/app/commands/uninstall.d.ts.map +1 -1
- package/dist/app/commands/uninstall.js +264 -53
- package/dist/app/commands/uninstall.js.map +1 -1
- package/dist/app/commands/update.d.ts +29 -5
- package/dist/app/commands/update.d.ts.map +1 -1
- package/dist/app/commands/update.js +1419 -127
- 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 +29 -3
- package/dist/domains/bundle/bundle-platform.d.ts +1 -0
- package/dist/domains/bundle/bundle-platform.d.ts.map +1 -1
- package/dist/domains/bundle/bundle-platform.js +10 -4
- package/dist/domains/bundle/bundle-platform.js.map +1 -1
- package/dist/domains/bundle/eval-manifest-runtime.d.ts +8 -0
- package/dist/domains/bundle/eval-manifest-runtime.d.ts.map +1 -0
- package/dist/domains/bundle/eval-manifest-runtime.js +118 -0
- package/dist/domains/bundle/eval-manifest-runtime.js.map +1 -0
- package/dist/domains/bundle/eval-run-result.d.ts +22 -0
- package/dist/domains/bundle/eval-run-result.d.ts.map +1 -0
- package/dist/domains/bundle/eval-run-result.js +207 -0
- package/dist/domains/bundle/eval-run-result.js.map +1 -0
- package/dist/domains/bundle/eval.d.ts.map +1 -1
- package/dist/domains/bundle/eval.js +21 -24
- package/dist/domains/bundle/eval.js.map +1 -1
- package/dist/domains/bundle/factory.d.ts.map +1 -1
- package/dist/domains/bundle/factory.js +2 -9
- package/dist/domains/bundle/factory.js.map +1 -1
- package/dist/domains/bundle/review-summary.js +1 -1
- package/dist/domains/bundle/review-summary.js.map +1 -1
- package/dist/domains/bundle/state.d.ts.map +1 -1
- package/dist/domains/bundle/state.js +117 -2
- package/dist/domains/bundle/state.js.map +1 -1
- package/dist/domains/bundle/types.d.ts +1 -1
- package/dist/domains/bundle/types.d.ts.map +1 -1
- package/dist/domains/comet-classic/classic-archive-pointer.d.ts +8 -0
- package/dist/domains/comet-classic/classic-archive-pointer.d.ts.map +1 -0
- package/dist/domains/comet-classic/classic-archive-pointer.js +66 -0
- package/dist/domains/comet-classic/classic-archive-pointer.js.map +1 -0
- package/dist/domains/comet-classic/classic-archive.d.ts +1 -0
- package/dist/domains/comet-classic/classic-archive.d.ts.map +1 -1
- package/dist/domains/comet-classic/classic-archive.js +205 -114
- package/dist/domains/comet-classic/classic-archive.js.map +1 -1
- package/dist/domains/comet-classic/classic-branch-binding.d.ts +51 -0
- package/dist/domains/comet-classic/classic-branch-binding.d.ts.map +1 -0
- package/dist/domains/comet-classic/classic-branch-binding.js +107 -0
- package/dist/domains/comet-classic/classic-branch-binding.js.map +1 -0
- package/dist/domains/comet-classic/classic-cli.d.ts +3 -1
- package/dist/domains/comet-classic/classic-cli.d.ts.map +1 -1
- package/dist/domains/comet-classic/classic-cli.js +12 -3
- package/dist/domains/comet-classic/classic-cli.js.map +1 -1
- package/dist/domains/comet-classic/classic-command-checks.d.ts +20 -0
- package/dist/domains/comet-classic/classic-command-checks.d.ts.map +1 -0
- package/dist/domains/comet-classic/classic-command-checks.js +94 -0
- package/dist/domains/comet-classic/classic-command-checks.js.map +1 -0
- package/dist/domains/comet-classic/classic-command-context.d.ts +12 -0
- package/dist/domains/comet-classic/classic-command-context.d.ts.map +1 -0
- package/dist/domains/comet-classic/classic-command-context.js +42 -0
- package/dist/domains/comet-classic/classic-command-context.js.map +1 -0
- package/dist/domains/comet-classic/classic-current-change.d.ts +17 -0
- package/dist/domains/comet-classic/classic-current-change.d.ts.map +1 -0
- package/dist/domains/comet-classic/classic-current-change.js +112 -0
- package/dist/domains/comet-classic/classic-current-change.js.map +1 -0
- package/dist/domains/comet-classic/classic-diagnostics.d.ts +2 -1
- package/dist/domains/comet-classic/classic-diagnostics.d.ts.map +1 -1
- package/dist/domains/comet-classic/classic-diagnostics.js +54 -1
- package/dist/domains/comet-classic/classic-diagnostics.js.map +1 -1
- package/dist/domains/comet-classic/classic-evidence.d.ts +1 -0
- package/dist/domains/comet-classic/classic-evidence.d.ts.map +1 -1
- package/dist/domains/comet-classic/classic-evidence.js +101 -37
- package/dist/domains/comet-classic/classic-evidence.js.map +1 -1
- package/dist/domains/comet-classic/classic-guard.d.ts.map +1 -1
- package/dist/domains/comet-classic/classic-guard.js +229 -208
- package/dist/domains/comet-classic/classic-guard.js.map +1 -1
- package/dist/domains/comet-classic/classic-handoff.d.ts.map +1 -1
- package/dist/domains/comet-classic/classic-handoff.js +155 -107
- package/dist/domains/comet-classic/classic-handoff.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 +406 -54
- package/dist/domains/comet-classic/classic-hook-guard.js.map +1 -1
- package/dist/domains/comet-classic/classic-layout-initialization.d.ts +86 -0
- package/dist/domains/comet-classic/classic-layout-initialization.d.ts.map +1 -0
- package/dist/domains/comet-classic/classic-layout-initialization.js +813 -0
- package/dist/domains/comet-classic/classic-layout-initialization.js.map +1 -0
- package/dist/domains/comet-classic/classic-layout.d.ts +47 -0
- package/dist/domains/comet-classic/classic-layout.d.ts.map +1 -0
- package/dist/domains/comet-classic/classic-layout.js +227 -0
- package/dist/domains/comet-classic/classic-layout.js.map +1 -0
- package/dist/domains/comet-classic/classic-migrate.d.ts +4 -0
- package/dist/domains/comet-classic/classic-migrate.d.ts.map +1 -1
- package/dist/domains/comet-classic/classic-migrate.js +8 -12
- package/dist/domains/comet-classic/classic-migrate.js.map +1 -1
- package/dist/domains/comet-classic/classic-openspec-command.d.ts +4 -0
- package/dist/domains/comet-classic/classic-openspec-command.d.ts.map +1 -0
- package/dist/domains/comet-classic/classic-openspec-command.js +45 -0
- package/dist/domains/comet-classic/classic-openspec-command.js.map +1 -0
- package/dist/domains/comet-classic/classic-openspec-root.d.ts +13 -0
- package/dist/domains/comet-classic/classic-openspec-root.d.ts.map +1 -0
- package/dist/domains/comet-classic/classic-openspec-root.js +47 -0
- package/dist/domains/comet-classic/classic-openspec-root.js.map +1 -0
- package/dist/domains/comet-classic/classic-paths.d.ts +11 -1
- package/dist/domains/comet-classic/classic-paths.d.ts.map +1 -1
- package/dist/domains/comet-classic/classic-paths.js +87 -35
- package/dist/domains/comet-classic/classic-paths.js.map +1 -1
- package/dist/domains/comet-classic/classic-project-config.d.ts +16 -0
- package/dist/domains/comet-classic/classic-project-config.d.ts.map +1 -0
- package/dist/domains/comet-classic/classic-project-config.js +36 -0
- package/dist/domains/comet-classic/classic-project-config.js.map +1 -0
- package/dist/domains/comet-classic/classic-protected-path.d.ts +39 -0
- package/dist/domains/comet-classic/classic-protected-path.d.ts.map +1 -0
- package/dist/domains/comet-classic/classic-protected-path.js +69 -0
- package/dist/domains/comet-classic/classic-protected-path.js.map +1 -0
- package/dist/domains/comet-classic/classic-resolver.d.ts.map +1 -1
- package/dist/domains/comet-classic/classic-resolver.js +4 -4
- package/dist/domains/comet-classic/classic-resolver.js.map +1 -1
- package/dist/domains/comet-classic/classic-resume-probe-command.d.ts +3 -0
- package/dist/domains/comet-classic/classic-resume-probe-command.d.ts.map +1 -0
- package/dist/domains/comet-classic/classic-resume-probe-command.js +59 -0
- package/dist/domains/comet-classic/classic-resume-probe-command.js.map +1 -0
- package/dist/domains/comet-classic/classic-resume-probe-entry.d.ts +2 -0
- package/dist/domains/comet-classic/classic-resume-probe-entry.d.ts.map +1 -0
- package/dist/domains/comet-classic/classic-resume-probe-entry.js +4 -0
- package/dist/domains/comet-classic/classic-resume-probe-entry.js.map +1 -0
- package/dist/domains/comet-classic/classic-resume-probe.d.ts +29 -0
- package/dist/domains/comet-classic/classic-resume-probe.d.ts.map +1 -0
- package/dist/domains/comet-classic/classic-resume-probe.js +406 -0
- package/dist/domains/comet-classic/classic-resume-probe.js.map +1 -0
- package/dist/domains/comet-classic/classic-root-command.d.ts +5 -0
- package/dist/domains/comet-classic/classic-root-command.d.ts.map +1 -0
- package/dist/domains/comet-classic/classic-root-command.js +84 -0
- package/dist/domains/comet-classic/classic-root-command.js.map +1 -0
- package/dist/domains/comet-classic/classic-root-move.d.ts +119 -0
- package/dist/domains/comet-classic/classic-root-move.d.ts.map +1 -0
- package/dist/domains/comet-classic/classic-root-move.js +1737 -0
- package/dist/domains/comet-classic/classic-root-move.js.map +1 -0
- package/dist/domains/comet-classic/classic-runtime-run.d.ts +2 -1
- package/dist/domains/comet-classic/classic-runtime-run.d.ts.map +1 -1
- package/dist/domains/comet-classic/classic-runtime-run.js +278 -5
- package/dist/domains/comet-classic/classic-runtime-run.js.map +1 -1
- package/dist/domains/comet-classic/classic-state-command.d.ts.map +1 -1
- package/dist/domains/comet-classic/classic-state-command.js +342 -87
- package/dist/domains/comet-classic/classic-state-command.js.map +1 -1
- package/dist/domains/comet-classic/classic-state-events.d.ts +1 -1
- package/dist/domains/comet-classic/classic-state-events.d.ts.map +1 -1
- package/dist/domains/comet-classic/classic-state-events.js +3 -4
- package/dist/domains/comet-classic/classic-state-events.js.map +1 -1
- package/dist/domains/comet-classic/classic-state.d.ts +6 -4
- package/dist/domains/comet-classic/classic-state.d.ts.map +1 -1
- package/dist/domains/comet-classic/classic-state.js +20 -7
- package/dist/domains/comet-classic/classic-state.js.map +1 -1
- package/dist/domains/comet-classic/classic-store.d.ts +6 -1
- package/dist/domains/comet-classic/classic-store.d.ts.map +1 -1
- package/dist/domains/comet-classic/classic-store.js +36 -23
- package/dist/domains/comet-classic/classic-store.js.map +1 -1
- package/dist/domains/comet-classic/classic-transitions.d.ts +1 -1
- package/dist/domains/comet-classic/classic-transitions.d.ts.map +1 -1
- package/dist/domains/comet-classic/classic-transitions.js +37 -3
- package/dist/domains/comet-classic/classic-transitions.js.map +1 -1
- package/dist/domains/comet-classic/classic-validate-command.d.ts.map +1 -1
- package/dist/domains/comet-classic/classic-validate-command.js +40 -20
- package/dist/domains/comet-classic/classic-validate-command.js.map +1 -1
- package/dist/domains/comet-classic/index.d.ts +3 -0
- package/dist/domains/comet-classic/index.d.ts.map +1 -1
- package/dist/domains/comet-classic/index.js +3 -0
- package/dist/domains/comet-classic/index.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 +114 -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 +88 -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 +19 -0
- package/dist/domains/comet-entry/init-workflow.d.ts.map +1 -0
- package/dist/domains/comet-entry/init-workflow.js +118 -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 +291 -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 +18 -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 +462 -0
- package/dist/domains/comet-entry/resume-probe.js.map +1 -0
- package/dist/domains/comet-entry/types.d.ts +60 -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 +53 -0
- package/dist/domains/comet-native/native-acceptance.d.ts.map +1 -0
- package/dist/domains/comet-native/native-acceptance.js +658 -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 +97 -0
- package/dist/domains/comet-native/native-archive-inspection.js.map +1 -0
- package/dist/domains/comet-native/native-archive-preflight.d.ts +54 -0
- package/dist/domains/comet-native/native-archive-preflight.d.ts.map +1 -0
- package/dist/domains/comet-native/native-archive-preflight.js +222 -0
- package/dist/domains/comet-native/native-archive-preflight.js.map +1 -0
- package/dist/domains/comet-native/native-archive-transaction.d.ts +20 -0
- package/dist/domains/comet-native/native-archive-transaction.d.ts.map +1 -0
- package/dist/domains/comet-native/native-archive-transaction.js +1183 -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 +422 -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 +66 -0
- package/dist/domains/comet-native/native-change.d.ts.map +1 -0
- package/dist/domains/comet-native/native-change.js +834 -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 +352 -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 +453 -0
- package/dist/domains/comet-native/native-check-receipt.js.map +1 -0
- package/dist/domains/comet-native/native-check.d.ts +24 -0
- package/dist/domains/comet-native/native-check.d.ts.map +1 -0
- package/dist/domains/comet-native/native-check.js +38 -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 +1300 -0
- package/dist/domains/comet-native/native-cli.js.map +1 -0
- package/dist/domains/comet-native/native-config.d.ts +23 -0
- package/dist/domains/comet-native/native-config.d.ts.map +1 -0
- package/dist/domains/comet-native/native-config.js +60 -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 +12 -0
- package/dist/domains/comet-native/native-continuation.d.ts.map +1 -0
- package/dist/domains/comet-native/native-continuation.js +201 -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 +142 -0
- package/dist/domains/comet-native/native-contract.js.map +1 -0
- package/dist/domains/comet-native/native-controller-trust.d.ts +22 -0
- package/dist/domains/comet-native/native-controller-trust.d.ts.map +1 -0
- package/dist/domains/comet-native/native-controller-trust.js +153 -0
- package/dist/domains/comet-native/native-controller-trust.js.map +1 -0
- package/dist/domains/comet-native/native-creation-authorization.d.ts +30 -0
- package/dist/domains/comet-native/native-creation-authorization.d.ts.map +1 -0
- package/dist/domains/comet-native/native-creation-authorization.js +110 -0
- package/dist/domains/comet-native/native-creation-authorization.js.map +1 -0
- package/dist/domains/comet-native/native-diagnostics.d.ts +25 -0
- package/dist/domains/comet-native/native-diagnostics.d.ts.map +1 -0
- package/dist/domains/comet-native/native-diagnostics.js +551 -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 +771 -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 +916 -0
- package/dist/domains/comet-native/native-evidence-retention.js.map +1 -0
- package/dist/domains/comet-native/native-evidence-storage.d.ts +54 -0
- package/dist/domains/comet-native/native-evidence-storage.d.ts.map +1 -0
- package/dist/domains/comet-native/native-evidence-storage.js +401 -0
- package/dist/domains/comet-native/native-evidence-storage.js.map +1 -0
- package/dist/domains/comet-native/native-file-identity.d.ts +3 -0
- package/dist/domains/comet-native/native-file-identity.d.ts.map +1 -0
- package/dist/domains/comet-native/native-file-identity.js +2 -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 +254 -0
- package/dist/domains/comet-native/native-findings.js.map +1 -0
- package/dist/domains/comet-native/native-guards.d.ts +8 -0
- package/dist/domains/comet-native/native-guards.d.ts.map +1 -0
- package/dist/domains/comet-native/native-guards.js +140 -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-independent-review.d.ts +28 -0
- package/dist/domains/comet-native/native-independent-review.d.ts.map +1 -0
- package/dist/domains/comet-native/native-independent-review.js +134 -0
- package/dist/domains/comet-native/native-independent-review.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 +390 -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 +160 -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 +46 -0
- package/dist/domains/comet-native/native-repair-integration.d.ts.map +1 -0
- package/dist/domains/comet-native/native-repair-integration.js +235 -0
- package/dist/domains/comet-native/native-repair-integration.js.map +1 -0
- package/dist/domains/comet-native/native-repair-runtime.d.ts +78 -0
- package/dist/domains/comet-native/native-repair-runtime.d.ts.map +1 -0
- package/dist/domains/comet-native/native-repair-runtime.js +593 -0
- package/dist/domains/comet-native/native-repair-runtime.js.map +1 -0
- package/dist/domains/comet-native/native-repair-stagnation.d.ts +89 -0
- package/dist/domains/comet-native/native-repair-stagnation.d.ts.map +1 -0
- package/dist/domains/comet-native/native-repair-stagnation.js +308 -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-review-contract.d.ts +6 -0
- package/dist/domains/comet-native/native-review-contract.d.ts.map +1 -0
- package/dist/domains/comet-native/native-review-contract.js +6 -0
- package/dist/domains/comet-native/native-review-contract.js.map +1 -0
- package/dist/domains/comet-native/native-review-identity.d.ts +50 -0
- package/dist/domains/comet-native/native-review-identity.d.ts.map +1 -0
- package/dist/domains/comet-native/native-review-identity.js +209 -0
- package/dist/domains/comet-native/native-review-identity.js.map +1 -0
- package/dist/domains/comet-native/native-review-signer.d.ts +24 -0
- package/dist/domains/comet-native/native-review-signer.d.ts.map +1 -0
- package/dist/domains/comet-native/native-review-signer.js +125 -0
- package/dist/domains/comet-native/native-review-signer.js.map +1 -0
- package/dist/domains/comet-native/native-review-trust.d.ts +35 -0
- package/dist/domains/comet-native/native-review-trust.d.ts.map +1 -0
- package/dist/domains/comet-native/native-review-trust.js +176 -0
- package/dist/domains/comet-native/native-review-trust.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 +818 -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 +900 -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 +78 -0
- package/dist/domains/comet-native/native-snapshot.d.ts.map +1 -0
- package/dist/domains/comet-native/native-snapshot.js +2609 -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 +27 -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 +15 -0
- package/dist/domains/comet-native/native-transitions.d.ts.map +1 -0
- package/dist/domains/comet-native/native-transitions.js +683 -0
- package/dist/domains/comet-native/native-transitions.js.map +1 -0
- package/dist/domains/comet-native/native-types.d.ts +556 -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 +136 -0
- package/dist/domains/comet-native/native-verification-evidence.d.ts.map +1 -0
- package/dist/domains/comet-native/native-verification-evidence.js +824 -0
- package/dist/domains/comet-native/native-verification-evidence.js.map +1 -0
- package/dist/domains/comet-native/native-verification-receipt-runtime.d.ts +188 -0
- package/dist/domains/comet-native/native-verification-receipt-runtime.d.ts.map +1 -0
- package/dist/domains/comet-native/native-verification-receipt-runtime.js +1129 -0
- package/dist/domains/comet-native/native-verification-receipt-runtime.js.map +1 -0
- package/dist/domains/comet-native/native-verification-receipt.d.ts +165 -0
- package/dist/domains/comet-native/native-verification-receipt.d.ts.map +1 -0
- package/dist/domains/comet-native/native-verification-receipt.js +636 -0
- package/dist/domains/comet-native/native-verification-receipt.js.map +1 -0
- package/dist/domains/comet-native/native-verification-runtime.d.ts +61 -0
- package/dist/domains/comet-native/native-verification-runtime.d.ts.map +1 -0
- package/dist/domains/comet-native/native-verification-runtime.js +609 -0
- package/dist/domains/comet-native/native-verification-runtime.js.map +1 -0
- package/dist/domains/comet-native/native-verification-scope.d.ts +118 -0
- package/dist/domains/comet-native/native-verification-scope.d.ts.map +1 -0
- package/dist/domains/comet-native/native-verification-scope.js +1045 -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 +182 -75
- 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 +289 -0
- package/dist/domains/dashboard/native-collector.js.map +1 -0
- package/dist/domains/dashboard/types.d.ts +10 -0
- package/dist/domains/dashboard/types.d.ts.map +1 -1
- package/dist/domains/dashboard/verify-parser.d.ts.map +1 -1
- package/dist/domains/dashboard/verify-parser.js +37 -31
- package/dist/domains/dashboard/verify-parser.js.map +1 -1
- package/dist/domains/dashboard/web/assets/_commonjsHelpers-CqkleIqs.js +1 -0
- package/dist/domains/dashboard/web/assets/arc-BXWNV2Qv.js +1 -0
- package/dist/domains/dashboard/web/assets/architectureDiagram-3BPJPVTR-CjVHPivo.js +36 -0
- package/dist/domains/dashboard/web/assets/blockDiagram-GPEHLZMM-P2PGImSM.js +132 -0
- package/dist/domains/dashboard/web/assets/c4Diagram-AAUBKEIU-fTj6Xhs1.js +10 -0
- package/dist/domains/dashboard/web/assets/channel--JtnhJr8.js +1 -0
- package/dist/domains/dashboard/web/assets/chunk-2J33WTMH-BjFDZ5yo.js +1 -0
- package/dist/domains/dashboard/web/assets/chunk-4BX2VUAB-BAUkbZdT.js +1 -0
- package/dist/domains/dashboard/web/assets/chunk-55IACEB6-DBmuiYme.js +1 -0
- package/dist/domains/dashboard/web/assets/chunk-727SXJPM-Do9ufCgY.js +206 -0
- package/dist/domains/dashboard/web/assets/chunk-AQP2D5EJ-qRQWlB5d.js +231 -0
- package/dist/domains/dashboard/web/assets/chunk-FMBD7UC4-BzDzeJ4_.js +15 -0
- package/dist/domains/dashboard/web/assets/chunk-ND2GUHAM-OQcAmIvL.js +1 -0
- package/dist/domains/dashboard/web/assets/chunk-QZHKN3VN-BiRfH4d2.js +1 -0
- package/dist/domains/dashboard/web/assets/classDiagram-4FO5ZUOK-BRGmx8Iz.js +1 -0
- package/dist/domains/dashboard/web/assets/classDiagram-v2-Q7XG4LA2-BRGmx8Iz.js +1 -0
- package/dist/domains/dashboard/web/assets/cose-bilkent-S5V4N54A-CZk37fGn.js +1 -0
- package/dist/domains/dashboard/web/assets/cynefin-VYW2F7L2-B3F-qRTJ.js +166 -0
- package/dist/domains/dashboard/web/assets/cytoscape.esm-D3_iZ_3b.js +321 -0
- package/dist/domains/dashboard/web/assets/dagre-BM42HDAG-D5BQ0eqN.js +4 -0
- package/dist/domains/dashboard/web/assets/defaultLocale-DX6XiGOO.js +1 -0
- package/dist/domains/dashboard/web/assets/demo-BuVau32v.js +25 -0
- package/dist/domains/dashboard/web/assets/diagram-2AECGRRQ-33mXstha.js +43 -0
- package/dist/domains/dashboard/web/assets/diagram-5GNKFQAL-BWHCMFvD.js +10 -0
- package/dist/domains/dashboard/web/assets/diagram-KO2AKTUF-DrPGimEt.js +3 -0
- package/dist/domains/dashboard/web/assets/diagram-LMA3HP47-BBlsg7jG.js +24 -0
- package/dist/domains/dashboard/web/assets/diagram-OG6HWLK6-CsaFSpHi.js +24 -0
- package/dist/domains/dashboard/web/assets/erDiagram-TEJ5UH35-CoB0mzhk.js +85 -0
- package/dist/domains/dashboard/web/assets/flowDiagram-I6XJVG4X-lT53XfSE.js +162 -0
- package/dist/domains/dashboard/web/assets/ganttDiagram-6RSMTGT7-D1SQ56fl.js +292 -0
- package/dist/domains/dashboard/web/assets/gitGraphDiagram-PVQCEYII-D4oDMS5x.js +106 -0
- package/dist/domains/dashboard/web/assets/graph--OzhPTMs.js +1 -0
- package/dist/domains/dashboard/web/assets/index-D-AGxvI4.css +1 -0
- package/dist/domains/dashboard/web/assets/index-DlSYK56b.js +139 -0
- package/dist/domains/dashboard/web/assets/index-Msce_H_q.js +24 -0
- package/dist/domains/dashboard/web/assets/index-QO0z6F4w.js +10 -0
- package/dist/domains/dashboard/web/assets/infoDiagram-5YYISTIA-BeICn98s.js +2 -0
- package/dist/domains/dashboard/web/assets/init-Gi6I4Gst.js +1 -0
- package/dist/domains/dashboard/web/assets/ishikawaDiagram-YF4QCWOH-Dkspu33d.js +70 -0
- package/dist/domains/dashboard/web/assets/journeyDiagram-JHISSGLW-C-EM1sZl.js +139 -0
- package/dist/domains/dashboard/web/assets/kanban-definition-UN3LZRKU-BTbB0IO2.js +89 -0
- package/dist/domains/dashboard/web/assets/katex-HP8lGamR.js +257 -0
- package/dist/domains/dashboard/web/assets/layout-SsrduOYp.js +1 -0
- package/dist/domains/dashboard/web/assets/linear-Cp0UrqDr.js +1 -0
- package/dist/domains/dashboard/web/assets/marked.esm-DECB3bxB.js +64 -0
- package/dist/domains/dashboard/web/assets/mermaid.core-CucmqsLW.js +301 -0
- package/dist/domains/dashboard/web/assets/mindmap-definition-RKZ34NQL-CjEshF1X.js +96 -0
- package/dist/domains/dashboard/web/assets/ordinal-Cboi1Yqb.js +1 -0
- package/dist/domains/dashboard/web/assets/pieDiagram-4H26LBE5-DrwFnX1b.js +30 -0
- package/dist/domains/dashboard/web/assets/purify.es-VaSPOPhr.js +3 -0
- package/dist/domains/dashboard/web/assets/quadrantDiagram-W4KKPZXB-CjG6pBR2.js +7 -0
- package/dist/domains/dashboard/web/assets/requirementDiagram-4Y6WPE33-BpUQVqCV.js +84 -0
- package/dist/domains/dashboard/web/assets/sankeyDiagram-5OEKKPKP-BeGkEvzR.js +40 -0
- package/dist/domains/dashboard/web/assets/sequenceDiagram-3UESZ5HK-sSTU3MCO.js +162 -0
- package/dist/domains/dashboard/web/assets/stateDiagram-AJRCARHV-CcFBc6qh.js +1 -0
- package/dist/domains/dashboard/web/assets/stateDiagram-v2-BHNVJYJU-D5zZYi4x.js +1 -0
- package/dist/domains/dashboard/web/assets/timeline-definition-PNZ67QCA-DCN7NjEs.js +120 -0
- package/dist/domains/dashboard/web/assets/vennDiagram-CIIHVFJN-DZAN1_rr.js +34 -0
- package/dist/domains/dashboard/web/assets/wardleyDiagram-YWT4CUSO-FfkJfr4C.js +78 -0
- package/dist/domains/dashboard/web/assets/xychartDiagram-2RQKCTM6-CD8B-EmR.js +7 -0
- package/dist/domains/dashboard/web/index.html +16 -16
- package/dist/domains/engine/protected-run-file.d.ts +15 -0
- package/dist/domains/engine/protected-run-file.d.ts.map +1 -0
- package/dist/domains/engine/protected-run-file.js +76 -0
- package/dist/domains/engine/protected-run-file.js.map +1 -0
- package/dist/domains/engine/run-store.d.ts +12 -11
- package/dist/domains/engine/run-store.d.ts.map +1 -1
- package/dist/domains/engine/run-store.js +46 -65
- package/dist/domains/engine/run-store.js.map +1 -1
- package/dist/domains/engine/state.d.ts +4 -3
- package/dist/domains/engine/state.d.ts.map +1 -1
- package/dist/domains/engine/state.js +10 -21
- package/dist/domains/engine/state.js.map +1 -1
- 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/engine/types.d.ts +1 -1
- package/dist/domains/engine/types.d.ts.map +1 -1
- package/dist/domains/factory/package.d.ts.map +1 -1
- package/dist/domains/factory/package.js +562 -91
- package/dist/domains/factory/package.js.map +1 -1
- package/dist/domains/integrations/codegraph.d.ts +13 -2
- package/dist/domains/integrations/codegraph.d.ts.map +1 -1
- package/dist/domains/integrations/codegraph.js +160 -12
- package/dist/domains/integrations/codegraph.js.map +1 -1
- package/dist/domains/integrations/openspec.d.ts +12 -2
- package/dist/domains/integrations/openspec.d.ts.map +1 -1
- package/dist/domains/integrations/openspec.js +256 -47
- package/dist/domains/integrations/openspec.js.map +1 -1
- package/dist/domains/skill/find.js +8 -7
- package/dist/domains/skill/find.js.map +1 -1
- package/dist/domains/skill/json-object.d.ts +13 -0
- package/dist/domains/skill/json-object.d.ts.map +1 -0
- package/dist/domains/skill/json-object.js +24 -0
- package/dist/domains/skill/json-object.js.map +1 -0
- package/dist/domains/skill/languages.d.ts +2 -1
- package/dist/domains/skill/languages.d.ts.map +1 -1
- package/dist/domains/skill/languages.js +4 -1
- package/dist/domains/skill/languages.js.map +1 -1
- package/dist/domains/skill/managed-markdown.d.ts +14 -0
- package/dist/domains/skill/managed-markdown.d.ts.map +1 -0
- package/dist/domains/skill/managed-markdown.js +126 -0
- package/dist/domains/skill/managed-markdown.js.map +1 -0
- package/dist/domains/skill/platform-inspect.d.ts +13 -0
- package/dist/domains/skill/platform-inspect.d.ts.map +1 -0
- package/dist/domains/skill/platform-inspect.js +193 -0
- package/dist/domains/skill/platform-inspect.js.map +1 -0
- package/dist/domains/skill/platform-install.d.ts +38 -23
- package/dist/domains/skill/platform-install.d.ts.map +1 -1
- package/dist/domains/skill/platform-install.js +809 -230
- package/dist/domains/skill/platform-install.js.map +1 -1
- package/dist/domains/skill/project-instructions.d.ts +22 -0
- package/dist/domains/skill/project-instructions.d.ts.map +1 -0
- package/dist/domains/skill/project-instructions.js +69 -0
- package/dist/domains/skill/project-instructions.js.map +1 -0
- package/dist/domains/skill/uninstall.d.ts +9 -2
- package/dist/domains/skill/uninstall.d.ts.map +1 -1
- package/dist/domains/skill/uninstall.js +734 -158
- 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 +149 -6
- package/dist/domains/workflow-contract/builtins.js.map +1 -1
- package/dist/domains/workflow-contract/contained-atomic-write.d.ts +21 -0
- package/dist/domains/workflow-contract/contained-atomic-write.d.ts.map +1 -0
- package/dist/domains/workflow-contract/contained-atomic-write.js +235 -0
- package/dist/domains/workflow-contract/contained-atomic-write.js.map +1 -0
- package/dist/domains/workflow-contract/index.d.ts +11 -1
- package/dist/domains/workflow-contract/index.d.ts.map +1 -1
- package/dist/domains/workflow-contract/index.js +7 -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 +30 -11
- package/dist/domains/workflow-contract/normalize.js.map +1 -1
- package/dist/domains/workflow-contract/project-config-reader.d.ts +24 -0
- package/dist/domains/workflow-contract/project-config-reader.d.ts.map +1 -0
- package/dist/domains/workflow-contract/project-config-reader.js +54 -0
- package/dist/domains/workflow-contract/project-config-reader.js.map +1 -0
- package/dist/domains/workflow-contract/project-config-transaction.d.ts +20 -0
- package/dist/domains/workflow-contract/project-config-transaction.d.ts.map +1 -0
- package/dist/domains/workflow-contract/project-config-transaction.js +293 -0
- package/dist/domains/workflow-contract/project-config-transaction.js.map +1 -0
- package/dist/domains/workflow-contract/project-config-writer.d.ts +13 -0
- package/dist/domains/workflow-contract/project-config-writer.d.ts.map +1 -0
- package/dist/domains/workflow-contract/project-config-writer.js +142 -0
- package/dist/domains/workflow-contract/project-config-writer.js.map +1 -0
- package/dist/domains/workflow-contract/project-config.d.ts +32 -0
- package/dist/domains/workflow-contract/project-config.d.ts.map +1 -0
- package/dist/domains/workflow-contract/project-config.js +1566 -0
- package/dist/domains/workflow-contract/project-config.js.map +1 -0
- package/dist/domains/workflow-contract/protected-project-path.d.ts +34 -0
- package/dist/domains/workflow-contract/protected-project-path.d.ts.map +1 -0
- package/dist/domains/workflow-contract/protected-project-path.js +162 -0
- package/dist/domains/workflow-contract/protected-project-path.js.map +1 -0
- package/dist/domains/workflow-contract/types.d.ts +67 -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/fs/file-identity.d.ts +9 -0
- package/dist/platform/fs/file-identity.d.ts.map +1 -0
- package/dist/platform/fs/file-identity.js +21 -0
- package/dist/platform/fs/file-identity.js.map +1 -0
- package/dist/platform/fs/file-system.d.ts +3 -3
- package/dist/platform/fs/file-system.d.ts.map +1 -1
- package/dist/platform/fs/file-system.js +31 -17
- package/dist/platform/fs/file-system.js.map +1 -1
- package/dist/platform/fs/race-safe-read.d.ts +47 -0
- package/dist/platform/fs/race-safe-read.d.ts.map +1 -0
- package/dist/platform/fs/race-safe-read.js +132 -0
- package/dist/platform/fs/race-safe-read.js.map +1 -0
- package/dist/platform/fs/trusted-readonly-file.d.ts +31 -0
- package/dist/platform/fs/trusted-readonly-file.d.ts.map +1 -0
- package/dist/platform/fs/trusted-readonly-file.js +107 -0
- package/dist/platform/fs/trusted-readonly-file.js.map +1 -0
- package/dist/platform/install/detect.d.ts +5 -2
- package/dist/platform/install/detect.d.ts.map +1 -1
- package/dist/platform/install/detect.js +14 -2
- package/dist/platform/install/detect.js.map +1 -1
- package/dist/platform/install/platform-targets.d.ts +8 -0
- package/dist/platform/install/platform-targets.d.ts.map +1 -0
- package/dist/platform/install/platform-targets.js +31 -0
- package/dist/platform/install/platform-targets.js.map +1 -0
- package/dist/platform/install/platforms.d.ts +10 -1
- package/dist/platform/install/platforms.d.ts.map +1 -1
- package/dist/platform/install/platforms.js +27 -4
- package/dist/platform/install/platforms.js.map +1 -1
- package/dist/platform/install/project-registry.d.ts +38 -0
- package/dist/platform/install/project-registry.d.ts.map +1 -0
- package/dist/platform/install/project-registry.js +213 -0
- package/dist/platform/install/project-registry.js.map +1 -0
- package/dist/platform/install/skill-root-owner.d.ts +15 -0
- package/dist/platform/install/skill-root-owner.d.ts.map +1 -0
- package/dist/platform/install/skill-root-owner.js +68 -0
- package/dist/platform/install/skill-root-owner.js.map +1 -0
- package/dist/platform/paths/git-worktree.d.ts +10 -0
- package/dist/platform/paths/git-worktree.d.ts.map +1 -0
- package/dist/platform/paths/git-worktree.js +43 -0
- package/dist/platform/paths/git-worktree.js.map +1 -0
- 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/dist/platform/process/terminate-process-tree.d.ts +3 -0
- package/dist/platform/process/terminate-process-tree.d.ts.map +1 -0
- package/dist/platform/process/terminate-process-tree.js +65 -0
- package/dist/platform/process/terminate-process-tree.js.map +1 -0
- package/eval/CLAUDE.md +43 -0
- package/eval/README.md +538 -0
- package/eval/langsmith/README.md +93 -0
- package/eval/langsmith/skills/README.md +5 -0
- package/eval/langsmith/tasks/README.md +5 -0
- package/eval/langsmith/tests/conftest.py +187 -0
- package/eval/langsmith/tests/tasks/test_tasks.py +287 -0
- package/eval/langsmith/treatments/README.md +5 -0
- package/eval/local/README.md +130 -0
- package/eval/local/regression_baseline.json +13 -0
- package/eval/local/report-style-demo-assets/quality_cost.en.svg +41 -0
- package/eval/local/report-style-demo-assets/quality_cost.zh.svg +41 -0
- package/eval/local/report-style-demo-assets/rubric_delta.en.svg +56 -0
- package/eval/local/report-style-demo-assets/rubric_delta.zh.svg +56 -0
- package/eval/local/report-style-demo-assets/task_outcomes.en.svg +46 -0
- package/eval/local/report-style-demo-assets/task_outcomes.zh.svg +46 -0
- package/eval/local/report-style-demo.html +867 -0
- package/eval/local/scripts/compare_baselines.py +1144 -0
- package/eval/local/scripts/generate_report_style_demo_charts.py +322 -0
- package/eval/local/scripts/regression_check.py +170 -0
- package/eval/local/scripts/render_readme_benchmark_figures.py +416 -0
- package/eval/local/scripts/rescore_rubric.py +120 -0
- package/eval/local/skills/benchmarks/039-release/comet-classic-039/SKILL.md +282 -0
- package/eval/local/skills/benchmarks/039-release/comet-classic-039/reference/auto-transition.md +27 -0
- package/eval/local/skills/benchmarks/039-release/comet-classic-039/reference/comet-yaml-fields.md +68 -0
- package/eval/local/skills/benchmarks/039-release/comet-classic-039/reference/context-recovery.md +35 -0
- package/eval/local/skills/benchmarks/039-release/comet-classic-039/reference/debug-gate.md +17 -0
- package/eval/local/skills/benchmarks/039-release/comet-classic-039/reference/decision-point.md +20 -0
- package/eval/local/skills/benchmarks/039-release/comet-classic-039/reference/dirty-worktree.md +59 -0
- package/eval/local/skills/benchmarks/039-release/comet-classic-039/reference/file-structure.md +28 -0
- package/eval/local/skills/benchmarks/039-release/comet-classic-039/reference/subagent-dispatch.md +113 -0
- package/eval/local/skills/benchmarks/039-release/comet-classic-039/rules/comet-phase-guard.md +125 -0
- package/eval/local/skills/benchmarks/039-release/comet-classic-039/scripts/comet-archive.sh +311 -0
- package/eval/local/skills/benchmarks/039-release/comet-classic-039/scripts/comet-env.sh +110 -0
- package/eval/local/skills/benchmarks/039-release/comet-classic-039/scripts/comet-guard.sh +778 -0
- package/eval/local/skills/benchmarks/039-release/comet-classic-039/scripts/comet-handoff.sh +390 -0
- package/eval/local/skills/benchmarks/039-release/comet-classic-039/scripts/comet-hook-guard.sh +336 -0
- package/eval/local/skills/benchmarks/039-release/comet-classic-039/scripts/comet-state.sh +1338 -0
- package/eval/local/skills/benchmarks/039-release/comet-classic-039/scripts/comet-yaml-validate.sh +225 -0
- package/eval/local/skills/benchmarks/039-release/comet-classic-039-archive/SKILL.md +100 -0
- package/eval/local/skills/benchmarks/039-release/comet-classic-039-build/SKILL.md +304 -0
- package/eval/local/skills/benchmarks/039-release/comet-classic-039-design/SKILL.md +263 -0
- package/eval/local/skills/benchmarks/039-release/comet-classic-039-hotfix/SKILL.md +204 -0
- package/eval/local/skills/benchmarks/039-release/comet-classic-039-open/SKILL.md +220 -0
- package/eval/local/skills/benchmarks/039-release/comet-classic-039-tweak/SKILL.md +180 -0
- package/eval/local/skills/benchmarks/039-release/comet-classic-039-verify/SKILL.md +234 -0
- package/eval/local/skills/benchmarks/040-beta/comet/SKILL.md +261 -0
- package/eval/local/skills/benchmarks/040-beta/comet/reference/auto-transition.md +27 -0
- package/eval/local/skills/benchmarks/040-beta/comet/reference/comet-yaml-fields.md +73 -0
- package/eval/local/skills/benchmarks/040-beta/comet/reference/context-recovery.md +45 -0
- package/eval/local/skills/benchmarks/040-beta/comet/reference/debug-gate.md +33 -0
- package/eval/local/skills/benchmarks/040-beta/comet/reference/decision-point.md +31 -0
- package/eval/local/skills/benchmarks/040-beta/comet/reference/dirty-worktree.md +59 -0
- package/eval/local/skills/benchmarks/040-beta/comet/reference/file-structure.md +28 -0
- package/eval/local/skills/benchmarks/040-beta/comet/reference/intent-frame.md +74 -0
- package/eval/local/skills/benchmarks/040-beta/comet/reference/scripts.md +69 -0
- package/eval/local/skills/benchmarks/040-beta/comet/reference/subagent-dispatch.md +169 -0
- package/eval/local/skills/benchmarks/040-beta/comet/rules/comet-phase-guard.md +130 -0
- package/eval/local/skills/benchmarks/040-beta/comet/runtime/classic/checks.yaml +6 -0
- package/eval/local/skills/benchmarks/040-beta/comet/runtime/classic/guardrails.yaml +13 -0
- package/eval/local/skills/benchmarks/040-beta/comet/runtime/classic/skill.yaml +122 -0
- package/eval/local/skills/benchmarks/040-beta/comet/scripts/comet-archive.mjs +9515 -0
- package/eval/local/skills/benchmarks/040-beta/comet/scripts/comet-env.mjs +15 -0
- package/eval/local/skills/benchmarks/040-beta/comet/scripts/comet-guard.mjs +10173 -0
- package/eval/local/skills/benchmarks/040-beta/comet/scripts/comet-handoff.mjs +9491 -0
- package/eval/local/skills/benchmarks/040-beta/comet/scripts/comet-hook-guard.mjs +9175 -0
- package/eval/local/skills/benchmarks/040-beta/comet/scripts/comet-intent.mjs +404 -0
- package/eval/local/skills/benchmarks/040-beta/comet/scripts/comet-state.mjs +9273 -0
- package/eval/local/skills/benchmarks/040-beta/comet/scripts/comet-yaml-validate.mjs +7627 -0
- package/eval/local/skills/benchmarks/040-beta/comet-archive/SKILL.md +110 -0
- package/eval/local/skills/benchmarks/040-beta/comet-build/SKILL.md +315 -0
- package/eval/local/skills/benchmarks/040-beta/comet-design/SKILL.md +260 -0
- package/eval/local/skills/benchmarks/040-beta/comet-hotfix/SKILL.md +190 -0
- package/eval/local/skills/benchmarks/040-beta/comet-open/SKILL.md +210 -0
- package/eval/local/skills/benchmarks/040-beta/comet-tweak/SKILL.md +183 -0
- package/eval/local/skills/benchmarks/040-beta/comet-verify/SKILL.md +230 -0
- package/eval/local/skills/benchmarks/dependency/claude-md/comet-workflow/CLAUDE.md +12 -0
- package/eval/local/skills/benchmarks/dependency/openspec/openspec-apply-change/SKILL.md +156 -0
- package/eval/local/skills/benchmarks/dependency/openspec/openspec-archive-change/SKILL.md +114 -0
- package/eval/local/skills/benchmarks/dependency/openspec/openspec-bulk-archive-change/SKILL.md +246 -0
- package/eval/local/skills/benchmarks/dependency/openspec/openspec-continue-change/SKILL.md +118 -0
- package/eval/local/skills/benchmarks/dependency/openspec/openspec-explore/SKILL.md +288 -0
- package/eval/local/skills/benchmarks/dependency/openspec/openspec-ff-change/SKILL.md +101 -0
- package/eval/local/skills/benchmarks/dependency/openspec/openspec-new-change/SKILL.md +74 -0
- package/eval/local/skills/benchmarks/dependency/openspec/openspec-onboard/SKILL.md +554 -0
- package/eval/local/skills/benchmarks/dependency/openspec/openspec-propose/SKILL.md +110 -0
- package/eval/local/skills/benchmarks/dependency/openspec/openspec-sync-specs/SKILL.md +138 -0
- package/eval/local/skills/benchmarks/dependency/openspec/openspec-verify-change/SKILL.md +168 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/brainstorming/SKILL.md +159 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/brainstorming/scripts/frame-template.html +213 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/brainstorming/scripts/helper.js +167 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/brainstorming/scripts/server.cjs +723 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/brainstorming/scripts/start-server.sh +209 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/brainstorming/scripts/stop-server.sh +120 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/brainstorming/spec-document-reviewer-prompt.md +49 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/brainstorming/visual-companion.md +291 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/dispatching-parallel-agents/SKILL.md +185 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/executing-plans/SKILL.md +70 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/finishing-a-development-branch/SKILL.md +241 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/receiving-code-review/SKILL.md +213 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/requesting-code-review/SKILL.md +103 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/requesting-code-review/code-reviewer.md +172 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/subagent-driven-development/SKILL.md +418 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/subagent-driven-development/implementer-prompt.md +139 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/subagent-driven-development/scripts/review-package +44 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/subagent-driven-development/scripts/sdd-workspace +22 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/subagent-driven-development/scripts/task-brief +40 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/subagent-driven-development/task-reviewer-prompt.md +188 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/CREATION-LOG.md +119 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/SKILL.md +296 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/condition-based-waiting-example.ts +158 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/condition-based-waiting.md +115 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/defense-in-depth.md +122 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/find-polluter.sh +63 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/root-cause-tracing.md +169 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/test-academic.md +14 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/test-pressure-1.md +58 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/test-pressure-2.md +68 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/test-pressure-3.md +69 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/test-driven-development/SKILL.md +371 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/test-driven-development/testing-anti-patterns.md +299 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/using-git-worktrees/SKILL.md +202 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/verification-before-completion/SKILL.md +139 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/writing-plans/SKILL.md +174 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/writing-plans/plan-document-reviewer-prompt.md +49 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/writing-skills/SKILL.md +689 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/writing-skills/anthropic-best-practices.md +1150 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/writing-skills/examples/CLAUDE_MD_TESTING.md +189 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/writing-skills/graphviz-conventions.dot +172 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/writing-skills/persuasion-principles.md +187 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/writing-skills/render-graphs.js +168 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/writing-skills/testing-skills-with-subagents.md +384 -0
- package/eval/local/tasks/authoring-skill-smoke/environment/Dockerfile +14 -0
- package/eval/local/tasks/authoring-skill-smoke/instruction.md +4 -0
- package/eval/local/tasks/authoring-skill-smoke/task.toml +21 -0
- package/eval/local/tasks/authoring-skill-smoke/validation/test_authoring_skill_smoke.py +54 -0
- package/eval/local/tasks/comet-agent-memory-routing/environment/Dockerfile +26 -0
- package/eval/local/tasks/comet-agent-memory-routing/environment/agent_system.py +40 -0
- package/eval/local/tasks/comet-agent-memory-routing/environment/test_agent_system.py +29 -0
- package/eval/local/tasks/comet-agent-memory-routing/instruction.md +20 -0
- package/eval/local/tasks/comet-agent-memory-routing/task.toml +24 -0
- package/eval/local/tasks/comet-agent-memory-routing/validation/test_agent_memory_routing.py +24 -0
- package/eval/local/tasks/comet-api-cache-ttl/environment/Dockerfile +35 -0
- package/eval/local/tasks/comet-api-cache-ttl/environment/cache.py +39 -0
- package/eval/local/tasks/comet-api-cache-ttl/environment/test_cache.py +81 -0
- package/eval/local/tasks/comet-api-cache-ttl/instruction.md +33 -0
- package/eval/local/tasks/comet-api-cache-ttl/task.toml +24 -0
- package/eval/local/tasks/comet-api-cache-ttl/validation/test_api_cache_ttl.py +58 -0
- package/eval/local/tasks/comet-classic-layout-lifecycle/environment/.include-current-comet-cli +1 -0
- package/eval/local/tasks/comet-classic-layout-lifecycle/environment/Dockerfile +45 -0
- package/eval/local/tasks/comet-classic-layout-lifecycle/environment/current-comet-package.json +18 -0
- package/eval/local/tasks/comet-classic-layout-lifecycle/environment/current-comet.sh +14 -0
- package/eval/local/tasks/comet-classic-layout-lifecycle/environment/test_wordcount.py +29 -0
- package/eval/local/tasks/comet-classic-layout-lifecycle/environment/wordcount.py +40 -0
- package/eval/local/tasks/comet-classic-layout-lifecycle/instruction.md +18 -0
- package/eval/local/tasks/comet-classic-layout-lifecycle/task.toml +23 -0
- package/eval/local/tasks/comet-classic-layout-lifecycle/validation/test_classic_layout_lifecycle.py +604 -0
- package/eval/local/tasks/comet-cross-file-refactor/environment/Dockerfile +15 -0
- package/eval/local/tasks/comet-cross-file-refactor/environment/cli.py +13 -0
- package/eval/local/tasks/comet-cross-file-refactor/environment/counting.py +13 -0
- package/eval/local/tasks/comet-cross-file-refactor/environment/test_textkit.py +21 -0
- package/eval/local/tasks/comet-cross-file-refactor/instruction.md +16 -0
- package/eval/local/tasks/comet-cross-file-refactor/task.toml +20 -0
- package/eval/local/tasks/comet-cross-file-refactor/validation/test_cross_file_refactor.py +20 -0
- package/eval/local/tasks/comet-dependency-confusion/environment/Dockerfile +25 -0
- package/eval/local/tasks/comet-dependency-confusion/environment/app.py +8 -0
- package/eval/local/tasks/comet-dependency-confusion/environment/settings_loader.py +14 -0
- package/eval/local/tasks/comet-dependency-confusion/environment/test_settings_service.py +19 -0
- package/eval/local/tasks/comet-dependency-confusion/instruction.md +18 -0
- package/eval/local/tasks/comet-dependency-confusion/task.toml +24 -0
- package/eval/local/tasks/comet-dependency-confusion/validation/test_dependency_confusion.py +24 -0
- package/eval/local/tasks/comet-fix-median/environment/Dockerfile +46 -0
- package/eval/local/tasks/comet-fix-median/environment/stats.py +54 -0
- package/eval/local/tasks/comet-fix-median/environment/test_stats.py +68 -0
- package/eval/local/tasks/comet-fix-median/instruction.md +25 -0
- package/eval/local/tasks/comet-fix-median/task.toml +24 -0
- package/eval/local/tasks/comet-fix-median/validation/test_fix_median.py +60 -0
- package/eval/local/tasks/comet-framework-selection/environment/Dockerfile +25 -0
- package/eval/local/tasks/comet-framework-selection/environment/architecture.py +12 -0
- package/eval/local/tasks/comet-framework-selection/environment/test_architecture.py +30 -0
- package/eval/local/tasks/comet-framework-selection/instruction.md +22 -0
- package/eval/local/tasks/comet-framework-selection/task.toml +24 -0
- package/eval/local/tasks/comet-framework-selection/validation/test_framework_selection.py +24 -0
- package/eval/local/tasks/comet-full-workflow/environment/Dockerfile +49 -0
- package/eval/local/tasks/comet-full-workflow/environment/test_wordcount.py +29 -0
- package/eval/local/tasks/comet-full-workflow/environment/wordcount.py +40 -0
- package/eval/local/tasks/comet-full-workflow/instruction.md +18 -0
- package/eval/local/tasks/comet-full-workflow/task.toml +24 -0
- package/eval/local/tasks/comet-full-workflow/validation/test_full_workflow.py +171 -0
- package/eval/local/tasks/comet-graph-execution-review/environment/Dockerfile +25 -0
- package/eval/local/tasks/comet-graph-execution-review/environment/pipeline.py +19 -0
- package/eval/local/tasks/comet-graph-execution-review/environment/test_pipeline.py +53 -0
- package/eval/local/tasks/comet-graph-execution-review/instruction.md +21 -0
- package/eval/local/tasks/comet-graph-execution-review/task.toml +24 -0
- package/eval/local/tasks/comet-graph-execution-review/validation/test_graph_execution_review.py +24 -0
- package/eval/local/tasks/comet-human-approval-flow/environment/Dockerfile +15 -0
- package/eval/local/tasks/comet-human-approval-flow/environment/approvals.py +17 -0
- package/eval/local/tasks/comet-human-approval-flow/environment/test_approvals.py +30 -0
- package/eval/local/tasks/comet-human-approval-flow/instruction.md +15 -0
- package/eval/local/tasks/comet-human-approval-flow/task.toml +20 -0
- package/eval/local/tasks/comet-human-approval-flow/validation/test_human_approval_flow.py +20 -0
- package/eval/local/tasks/comet-layered-streaming-fix/environment/Dockerfile +17 -0
- package/eval/local/tasks/comet-layered-streaming-fix/environment/chat_app.py +19 -0
- package/eval/local/tasks/comet-layered-streaming-fix/environment/test_chat_app.py +15 -0
- package/eval/local/tasks/comet-layered-streaming-fix/instruction.md +14 -0
- package/eval/local/tasks/comet-layered-streaming-fix/task.toml +20 -0
- package/eval/local/tasks/comet-layered-streaming-fix/validation/test_layered_streaming_fix.py +20 -0
- package/eval/local/tasks/comet-native-clarification/environment/Dockerfile +25 -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-depth/environment/Dockerfile +25 -0
- package/eval/local/tasks/comet-native-clarification-depth/environment/test_wordcount.py +25 -0
- package/eval/local/tasks/comet-native-clarification-depth/environment/wordcount.py +36 -0
- package/eval/local/tasks/comet-native-clarification-depth/instruction.md +17 -0
- package/eval/local/tasks/comet-native-clarification-depth/task.toml +47 -0
- package/eval/local/tasks/comet-native-clarification-depth/validation/test_native_clarification_depth.py +618 -0
- package/eval/local/tasks/comet-native-clarification-modes/environment/Dockerfile +25 -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 +26 -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 +24 -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 +25 -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 +25 -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 +25 -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 +25 -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 +29 -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 +483 -0
- package/eval/local/tasks/comet-native-workflow/environment/.include-trusted-native-review-fixture +1 -0
- package/eval/local/tasks/comet-native-workflow/environment/.include-trusted-native-runtime +1 -0
- package/eval/local/tasks/comet-native-workflow/environment/Dockerfile +26 -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 +36 -0
- package/eval/local/tasks/comet-native-workflow/task.toml +36 -0
- package/eval/local/tasks/comet-native-workflow/validation/test_native_workflow.py +680 -0
- package/eval/local/tasks/comet-noise-distractor/environment/Dockerfile +15 -0
- package/eval/local/tasks/comet-noise-distractor/environment/distractor.md +4 -0
- package/eval/local/tasks/comet-noise-distractor/environment/invoice.py +5 -0
- package/eval/local/tasks/comet-noise-distractor/environment/test_invoice.py +18 -0
- package/eval/local/tasks/comet-noise-distractor/instruction.md +17 -0
- package/eval/local/tasks/comet-noise-distractor/task.toml +20 -0
- package/eval/local/tasks/comet-noise-distractor/validation/test_noise_distractor.py +20 -0
- package/eval/local/tasks/comet-observability-env-template/environment/Dockerfile +15 -0
- package/eval/local/tasks/comet-observability-env-template/environment/env_writer.py +17 -0
- package/eval/local/tasks/comet-observability-env-template/environment/test_env_writer.py +17 -0
- package/eval/local/tasks/comet-observability-env-template/instruction.md +20 -0
- package/eval/local/tasks/comet-observability-env-template/task.toml +20 -0
- package/eval/local/tasks/comet-observability-env-template/validation/test_observability_env_template.py +46 -0
- package/eval/local/tasks/comet-perf-dedupe/environment/Dockerfile +35 -0
- package/eval/local/tasks/comet-perf-dedupe/environment/dedupe.py +22 -0
- package/eval/local/tasks/comet-perf-dedupe/environment/test_dedupe.py +43 -0
- package/eval/local/tasks/comet-perf-dedupe/instruction.md +25 -0
- package/eval/local/tasks/comet-perf-dedupe/task.toml +24 -0
- package/eval/local/tasks/comet-perf-dedupe/validation/test_perf_dedupe.py +40 -0
- package/eval/local/tasks/comet-persistence-threading/environment/Dockerfile +15 -0
- package/eval/local/tasks/comet-persistence-threading/environment/session_store.py +15 -0
- package/eval/local/tasks/comet-persistence-threading/environment/test_session_store.py +21 -0
- package/eval/local/tasks/comet-persistence-threading/instruction.md +14 -0
- package/eval/local/tasks/comet-persistence-threading/task.toml +20 -0
- package/eval/local/tasks/comet-persistence-threading/validation/test_persistence_threading.py +20 -0
- package/eval/local/tasks/comet-refactor-counter/environment/Dockerfile +35 -0
- package/eval/local/tasks/comet-refactor-counter/environment/test_text_processor.py +57 -0
- package/eval/local/tasks/comet-refactor-counter/environment/text_processor.py +49 -0
- package/eval/local/tasks/comet-refactor-counter/instruction.md +31 -0
- package/eval/local/tasks/comet-refactor-counter/task.toml +24 -0
- package/eval/local/tasks/comet-refactor-counter/validation/test_refactor_counter.py +75 -0
- package/eval/local/tasks/comet-robust-config/environment/Dockerfile +35 -0
- package/eval/local/tasks/comet-robust-config/environment/config_loader.py +56 -0
- package/eval/local/tasks/comet-robust-config/environment/test_config_loader.py +72 -0
- package/eval/local/tasks/comet-robust-config/instruction.md +30 -0
- package/eval/local/tasks/comet-robust-config/task.toml +24 -0
- package/eval/local/tasks/comet-robust-config/validation/test_robust_config.py +37 -0
- package/eval/local/tasks/generic-skill-smoke/environment/Dockerfile +14 -0
- package/eval/local/tasks/generic-skill-smoke/instruction.md +7 -0
- package/eval/local/tasks/generic-skill-smoke/task.toml +21 -0
- package/eval/local/tasks/generic-skill-smoke/validation/test_generic_skill_smoke.py +41 -0
- package/eval/local/tasks/index.yaml +229 -0
- package/eval/local/tasks/workflow-overlay-contract/environment/Dockerfile +16 -0
- package/eval/local/tasks/workflow-overlay-contract/instruction.md +5 -0
- package/eval/local/tasks/workflow-overlay-contract/task.toml +21 -0
- package/eval/local/tasks/workflow-overlay-contract/validation/test_workflow_overlay_contract.py +235 -0
- package/eval/local/tasks/workflow-route-conformance/environment/Dockerfile +14 -0
- package/eval/local/tasks/workflow-route-conformance/instruction.md +5 -0
- package/eval/local/tasks/workflow-route-conformance/task.toml +21 -0
- package/eval/local/tasks/workflow-route-conformance/validation/test_workflow_route_conformance.py +84 -0
- package/eval/local/tests/conftest.py +1946 -0
- package/eval/local/tests/scaffold/test_aligned_comparison.py +1012 -0
- package/eval/local/tests/scaffold/test_attribution.py +48 -0
- package/eval/local/tests/scaffold/test_compare_baselines.py +999 -0
- package/eval/local/tests/scaffold/test_conftest_helpers.py +980 -0
- package/eval/local/tests/scaffold/test_evidence.py +15 -0
- package/eval/local/tests/scaffold/test_langsmith_conftest.py +244 -0
- package/eval/local/tests/scaffold/test_logging.py +377 -0
- package/eval/local/tests/scaffold/test_manifests.py +134 -0
- package/eval/local/tests/scaffold/test_native_aligned_eval.py +353 -0
- package/eval/local/tests/scaffold/test_native_wave_evaluations.py +2183 -0
- package/eval/local/tests/scaffold/test_profiles.py +1149 -0
- package/eval/local/tests/scaffold/test_regression_check.py +19 -0
- package/eval/local/tests/scaffold/test_report_style_demo_charts.py +45 -0
- package/eval/local/tests/scaffold/test_sample_quality.py +268 -0
- package/eval/local/tests/scaffold/test_tasks.py +1013 -0
- package/eval/local/tests/scaffold/test_treatments.py +353 -0
- package/eval/local/tests/scaffold/test_utils.py +561 -0
- package/eval/local/tests/tasks/__init__.py +1 -0
- package/eval/local/tests/tasks/test_tasks.py +474 -0
- package/eval/local/tests/tasks/test_validation_scripts.py +787 -0
- package/eval/local/treatments/comet/comet_classic_docs_layout.yaml +121 -0
- package/eval/local/treatments/comet/comet_full_039.yaml +141 -0
- package/eval/local/treatments/comet/comet_full_040_beta.yaml +140 -0
- package/eval/local/treatments/comet/comet_native_phase1.yaml +66 -0
- package/eval/local/treatments/common/control.yaml +4 -0
- package/eval/pyproject.toml +41 -0
- package/eval/report-html-config.json +6 -0
- package/eval/scaffold/__init__.py +67 -0
- package/eval/scaffold/python/__init__.py +95 -0
- package/eval/scaffold/python/aligned_comparison.py +1632 -0
- package/eval/scaffold/python/attribution.py +43 -0
- package/eval/scaffold/python/evidence.py +38 -0
- package/eval/scaffold/python/external_data_handler.py +18 -0
- package/eval/scaffold/python/generic_llm_judge.py +237 -0
- package/eval/scaffold/python/judge_config.py +168 -0
- package/eval/scaffold/python/llm_judge.py +188 -0
- package/eval/scaffold/python/logging.py +804 -0
- package/eval/scaffold/python/manifests.py +131 -0
- package/eval/scaffold/python/native_eval.py +143 -0
- package/eval/scaffold/python/paper_charts.py +25 -0
- package/eval/scaffold/python/pass_at_k.py +106 -0
- package/eval/scaffold/python/paths.py +56 -0
- package/eval/scaffold/python/profiles.py +127 -0
- package/eval/scaffold/python/report_outputs.py +1573 -0
- package/eval/scaffold/python/sample_quality.py +382 -0
- package/eval/scaffold/python/schema.py +39 -0
- package/eval/scaffold/python/skill_parser.py +469 -0
- package/eval/scaffold/python/tasks.py +343 -0
- package/eval/scaffold/python/treatments.py +271 -0
- package/eval/scaffold/python/utils.py +460 -0
- package/eval/scaffold/python/validation/__init__.py +31 -0
- package/eval/scaffold/python/validation/authoring_rubric.py +328 -0
- package/eval/scaffold/python/validation/comet_workflow.py +227 -0
- package/eval/scaffold/python/validation/core.py +264 -0
- package/eval/scaffold/python/validation/dataset.py +337 -0
- package/eval/scaffold/python/validation/docker.py +106 -0
- package/eval/scaffold/python/validation/evaluator.py +549 -0
- package/eval/scaffold/python/validation/generic_rubric.py +198 -0
- 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 +780 -0
- package/eval/scaffold/python/validation/runner.py +237 -0
- package/eval/scaffold/python/validation/scripts.py +58 -0
- package/eval/scaffold/python/validation/tracing.py +313 -0
- package/eval/scaffold/shell/common.sh +126 -0
- package/eval/scaffold/shell/completion-point.sh +18 -0
- package/eval/scaffold/shell/decision-point.sh +35 -0
- package/eval/scaffold/shell/docker.sh +716 -0
- package/eval/scaffold/shell/native-review-signer-daemon.mjs +144 -0
- package/eval/scaffold/shell/native-review-verifier-daemon.mjs +178 -0
- package/eval/scaffold/shell/run-claude-loop.sh +234 -0
- package/eval/scaffold/shell/setup.sh +259 -0
- package/eval/simulator-instruction.md +9 -0
- package/package.json +64 -10
- package/dist/domains/dashboard/web/assets/demo-DQyfozbi.js +0 -1
- package/dist/domains/dashboard/web/assets/index-BcO3_QlT.css +0 -1
- package/dist/domains/dashboard/web/assets/index-CjU3VXVu.js +0 -22
|
@@ -1,13 +1,30 @@
|
|
|
1
1
|
import path from 'path';
|
|
2
2
|
import { existsSync } from 'fs';
|
|
3
|
-
import { readFile, writeFile, lstat, unlink, symlink, rm } from 'fs/promises';
|
|
3
|
+
import { readFile, writeFile, lstat, unlink, symlink, rm, readdir } from 'fs/promises';
|
|
4
4
|
import { fileURLToPath } from 'url';
|
|
5
|
-
import { parseDocument } from 'yaml';
|
|
6
5
|
import { fileExists, readJson, copyFile, ensureDir } from '../../platform/fs/file-system.js';
|
|
7
|
-
import { getPlatformSkillsDir } from '../../platform/install/platforms.js';
|
|
8
|
-
import {
|
|
6
|
+
import { getPlatformConfigDir, getPlatformSkillsDir, } from '../../platform/install/platforms.js';
|
|
7
|
+
import { resolveArtifactLanguage } from './languages.js';
|
|
8
|
+
import { installCometProjectInstructions } from './project-instructions.js';
|
|
9
|
+
import { readJsonObjectFile } from './json-object.js';
|
|
10
|
+
import { assertClassicLayoutInitializationSafe, checkpointClassicLayoutInitialization, } from '../comet-classic/classic-layout-initialization.js';
|
|
11
|
+
import { parseWorkflowProjectConfigDocument, projectConfigComment, renderStructuredProjectConfig, } from '../workflow-contract/project-config.js';
|
|
12
|
+
import { readWorkflowProjectConfigSnapshot } from '../workflow-contract/project-config-reader.js';
|
|
13
|
+
import { writeWorkflowProjectConfigSource } from '../workflow-contract/project-config-writer.js';
|
|
14
|
+
import { ensureProtectedProjectDirectory } from '../workflow-contract/protected-project-path.js';
|
|
9
15
|
const __filename = fileURLToPath(import.meta.url);
|
|
10
16
|
const __dirname = path.dirname(__filename);
|
|
17
|
+
const HOOK_ROUTER_SCRIPT = 'comet/scripts/comet-hook-router.mjs';
|
|
18
|
+
const LEGACY_HOOK_SCRIPTS = [
|
|
19
|
+
'comet/scripts/comet-hook-guard.mjs',
|
|
20
|
+
'comet-native/scripts/comet-native-hook-guard.mjs',
|
|
21
|
+
];
|
|
22
|
+
const LEGACY_RULE_FILES = ['comet-phase-guard.md', 'comet-native-phase-guard.md'];
|
|
23
|
+
const NATIVE_SHARED_SKILL_PATHS = new Set([
|
|
24
|
+
'comet/SKILL.md',
|
|
25
|
+
'comet/scripts/comet-entry-runtime.mjs',
|
|
26
|
+
'comet/scripts/comet-hook-router.mjs',
|
|
27
|
+
]);
|
|
11
28
|
function planSkillDirectoryCopy(files, destinationRoot) {
|
|
12
29
|
return files
|
|
13
30
|
.map((file) => ({
|
|
@@ -19,9 +36,75 @@ function planSkillDirectoryCopy(files, destinationRoot) {
|
|
|
19
36
|
function getManagedSkillPaths(manifest) {
|
|
20
37
|
return [...new Set([...manifest.skills, ...(manifest.internalSkills ?? [])])];
|
|
21
38
|
}
|
|
39
|
+
function isManagedSkillPathForSelection(skillPath, workflowSelection) {
|
|
40
|
+
if (workflowSelection === 'both')
|
|
41
|
+
return true;
|
|
42
|
+
if (workflowSelection === 'classic')
|
|
43
|
+
return !skillPath.startsWith('comet-native/');
|
|
44
|
+
return (NATIVE_SHARED_SKILL_PATHS.has(skillPath) ||
|
|
45
|
+
skillPath.startsWith('comet-native/') ||
|
|
46
|
+
skillPath.startsWith('comet-any/'));
|
|
47
|
+
}
|
|
48
|
+
function getManagedSkillPathsForSelection(manifest, workflowSelection) {
|
|
49
|
+
return getManagedSkillPaths(manifest).filter((skillPath) => isManagedSkillPathForSelection(skillPath, workflowSelection));
|
|
50
|
+
}
|
|
51
|
+
function getUserFacingSkillPathsForSelection(manifest, workflowSelection) {
|
|
52
|
+
return manifest.skills.filter((skillPath) => isManagedSkillPathForSelection(skillPath, workflowSelection));
|
|
53
|
+
}
|
|
22
54
|
function getUserFacingSkillNames(manifest) {
|
|
23
55
|
return getTopLevelSkillNames(manifest.skills);
|
|
24
56
|
}
|
|
57
|
+
function getManagedSkillReplacementPaths(manifest, workflowSelection = 'both') {
|
|
58
|
+
const allowed = new Set();
|
|
59
|
+
for (const skillPath of getManagedSkillPathsForSelection(manifest, workflowSelection)) {
|
|
60
|
+
const parts = skillPath.split('/').filter(Boolean);
|
|
61
|
+
for (let depth = 1; depth <= parts.length; depth++) {
|
|
62
|
+
allowed.add(parts.slice(0, depth).join('/'));
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return allowed;
|
|
66
|
+
}
|
|
67
|
+
function getManagedSkillTopLevelEntries(manifest, workflowSelection = 'both') {
|
|
68
|
+
const entries = new Set();
|
|
69
|
+
for (const skillPath of getManagedSkillPathsForSelection(manifest, workflowSelection)) {
|
|
70
|
+
const [topLevel] = skillPath.split('/').filter(Boolean);
|
|
71
|
+
if (topLevel)
|
|
72
|
+
entries.add(topLevel);
|
|
73
|
+
}
|
|
74
|
+
return [...entries].sort();
|
|
75
|
+
}
|
|
76
|
+
function getManagedEntriesForTopLevel(managedEntries, topLevelEntry) {
|
|
77
|
+
const scopedEntries = new Set();
|
|
78
|
+
const prefix = `${topLevelEntry}/`;
|
|
79
|
+
for (const entry of managedEntries) {
|
|
80
|
+
if (entry.startsWith(prefix)) {
|
|
81
|
+
scopedEntries.add(entry.slice(prefix.length));
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return scopedEntries;
|
|
85
|
+
}
|
|
86
|
+
async function collectDirectoryEntryPaths(root, current = root) {
|
|
87
|
+
const entries = await readdir(current, { withFileTypes: true });
|
|
88
|
+
const paths = [];
|
|
89
|
+
for (const entry of entries) {
|
|
90
|
+
const fullPath = path.join(current, entry.name);
|
|
91
|
+
const relativePath = path.relative(root, fullPath).split(path.sep).join('/');
|
|
92
|
+
paths.push(relativePath);
|
|
93
|
+
if (entry.isDirectory() && !entry.isSymbolicLink()) {
|
|
94
|
+
paths.push(...(await collectDirectoryEntryPaths(root, fullPath)));
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return paths;
|
|
98
|
+
}
|
|
99
|
+
async function assertDirectoryContainsOnlyManagedEntries(dirPath, managedEntries) {
|
|
100
|
+
const entries = await collectDirectoryEntryPaths(dirPath);
|
|
101
|
+
const unmanagedEntries = entries.filter((entry) => !managedEntries.has(entry));
|
|
102
|
+
if (unmanagedEntries.length === 0)
|
|
103
|
+
return;
|
|
104
|
+
const preview = unmanagedEntries.slice(0, 5).join(', ');
|
|
105
|
+
const suffix = unmanagedEntries.length > 5 ? `, and ${unmanagedEntries.length - 5} more` : '';
|
|
106
|
+
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.`);
|
|
107
|
+
}
|
|
25
108
|
const OPENCODE_COMMAND_HEADER = `---
|
|
26
109
|
description: Run the {skillName} Comet workflow
|
|
27
110
|
---
|
|
@@ -51,37 +134,150 @@ function getCentralSkillsDir(baseDir, _scope) {
|
|
|
51
134
|
* Create a symlink from linkPath pointing to target.
|
|
52
135
|
* On Windows, uses 'junction' type for directory symlinks (no admin required).
|
|
53
136
|
*/
|
|
54
|
-
async function createSymlink(target, linkPath) {
|
|
137
|
+
async function createSymlink(target, linkPath, managedEntries) {
|
|
55
138
|
await ensureDir(path.dirname(linkPath));
|
|
56
139
|
// Remove existing link/directory if present
|
|
140
|
+
let stat = null;
|
|
57
141
|
try {
|
|
58
|
-
|
|
59
|
-
|
|
142
|
+
stat = await lstat(linkPath);
|
|
143
|
+
}
|
|
144
|
+
catch (err) {
|
|
145
|
+
if (err.code !== 'ENOENT') {
|
|
146
|
+
throw err;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
if (stat?.isSymbolicLink()) {
|
|
150
|
+
await unlink(linkPath);
|
|
151
|
+
}
|
|
152
|
+
else if (stat?.isDirectory()) {
|
|
153
|
+
// For directories, try unlink first (handles Windows junctions)
|
|
154
|
+
try {
|
|
60
155
|
await unlink(linkPath);
|
|
61
156
|
}
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
await unlink(linkPath);
|
|
66
|
-
}
|
|
67
|
-
catch {
|
|
68
|
-
await rm(linkPath, { recursive: true, force: true });
|
|
69
|
-
}
|
|
157
|
+
catch {
|
|
158
|
+
await assertDirectoryContainsOnlyManagedEntries(linkPath, managedEntries);
|
|
159
|
+
await rm(linkPath, { recursive: true, force: true });
|
|
70
160
|
}
|
|
71
161
|
}
|
|
72
|
-
catch {
|
|
73
|
-
// Path doesn't exist, continue
|
|
74
|
-
}
|
|
75
162
|
// Windows uses 'junction' for directory symlinks (no admin privileges required)
|
|
76
163
|
const type = process.platform === 'win32' ? 'junction' : 'dir';
|
|
77
164
|
await symlink(target, linkPath, type);
|
|
78
165
|
}
|
|
166
|
+
async function lstatOrNull(filePath) {
|
|
167
|
+
try {
|
|
168
|
+
return await lstat(filePath);
|
|
169
|
+
}
|
|
170
|
+
catch (err) {
|
|
171
|
+
const code = err.code;
|
|
172
|
+
if (code === 'ENOENT' || code === 'ENOTDIR')
|
|
173
|
+
return null;
|
|
174
|
+
throw err;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
async function prepareManagedSkillCopyTarget(baseDir, platform, scope = 'project', workflowSelection = 'both') {
|
|
178
|
+
const manifest = await readManifest();
|
|
179
|
+
const managedEntries = new Set(getManagedSkillTopLevelEntries(manifest, workflowSelection));
|
|
180
|
+
const skillsRoot = path.join(baseDir, getPlatformSkillsDir(platform, scope), 'skills');
|
|
181
|
+
const rootStat = await lstatOrNull(skillsRoot);
|
|
182
|
+
if (!rootStat)
|
|
183
|
+
return;
|
|
184
|
+
if (rootStat.isSymbolicLink()) {
|
|
185
|
+
let linkedEntries = [];
|
|
186
|
+
try {
|
|
187
|
+
linkedEntries = await readdir(skillsRoot);
|
|
188
|
+
}
|
|
189
|
+
catch (error) {
|
|
190
|
+
if (error.code !== 'ENOENT')
|
|
191
|
+
throw error;
|
|
192
|
+
}
|
|
193
|
+
const unmanagedEntries = linkedEntries.filter((entry) => !managedEntries.has(entry));
|
|
194
|
+
if (unmanagedEntries.length > 0) {
|
|
195
|
+
throw new Error(`Refusing to replace ${skillsRoot} with managed copies because the linked directory contains unmanaged entries: ${unmanagedEntries.join(', ')}`);
|
|
196
|
+
}
|
|
197
|
+
await unlink(skillsRoot);
|
|
198
|
+
await ensureDir(skillsRoot);
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
if (!rootStat.isDirectory())
|
|
202
|
+
return;
|
|
203
|
+
for (const entry of managedEntries) {
|
|
204
|
+
const entryPath = path.join(skillsRoot, entry);
|
|
205
|
+
const entryStat = await lstatOrNull(entryPath);
|
|
206
|
+
if (entryStat?.isSymbolicLink()) {
|
|
207
|
+
await unlink(entryPath);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
async function prepareNativeSkillInstallTarget(baseDir, platform, scope, languageSkillsDir, action) {
|
|
212
|
+
if (action !== 'skip') {
|
|
213
|
+
await prepareManagedSkillCopyTarget(baseDir, platform, scope, 'native');
|
|
214
|
+
}
|
|
215
|
+
if (action === 'overwrite')
|
|
216
|
+
return;
|
|
217
|
+
const skillsRoot = path.join(baseDir, getPlatformSkillsDir(platform, scope), 'skills');
|
|
218
|
+
const assetsDir = getAssetsDir();
|
|
219
|
+
const manifest = await readManifest();
|
|
220
|
+
const requiredFiles = getManagedSkillPaths(manifest)
|
|
221
|
+
.filter((relativePath) => relativePath === 'comet/SKILL.md' ||
|
|
222
|
+
relativePath === 'comet/scripts/comet-entry-runtime.mjs' ||
|
|
223
|
+
relativePath === 'comet/scripts/comet-hook-router.mjs' ||
|
|
224
|
+
relativePath.startsWith('comet-any/') ||
|
|
225
|
+
relativePath.startsWith('comet-native/'))
|
|
226
|
+
.map((relativePath) => {
|
|
227
|
+
const pathParts = relativePath.split('/');
|
|
228
|
+
const sourceDir = relativePath.includes('/scripts/') ? 'skills' : languageSkillsDir;
|
|
229
|
+
return {
|
|
230
|
+
label: `the required Native asset ${relativePath}`,
|
|
231
|
+
destination: path.join(skillsRoot, ...pathParts),
|
|
232
|
+
source: path.join(assetsDir, sourceDir, ...pathParts),
|
|
233
|
+
};
|
|
234
|
+
});
|
|
235
|
+
for (const required of requiredFiles) {
|
|
236
|
+
const destinationStat = await lstatOrNull(required.destination);
|
|
237
|
+
if (!destinationStat) {
|
|
238
|
+
if (action === 'fill')
|
|
239
|
+
continue;
|
|
240
|
+
throw new Error(`Cannot activate Native while skipping existing Comet files because ${required.label} is missing at ${required.destination}`);
|
|
241
|
+
}
|
|
242
|
+
if (!destinationStat.isFile()) {
|
|
243
|
+
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`);
|
|
244
|
+
}
|
|
245
|
+
const [installed, bundled] = await Promise.all([
|
|
246
|
+
readFile(required.destination),
|
|
247
|
+
readFile(required.source),
|
|
248
|
+
]);
|
|
249
|
+
if (!installed.equals(bundled)) {
|
|
250
|
+
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`);
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
async function createSkillsSymlinks(targetRoot, linkRoot, managedEntries, topLevelEntries) {
|
|
255
|
+
const rootStat = await lstatOrNull(linkRoot);
|
|
256
|
+
if (!rootStat || rootStat.isSymbolicLink() || !rootStat.isDirectory()) {
|
|
257
|
+
await createSymlink(targetRoot, linkRoot, managedEntries);
|
|
258
|
+
return 0;
|
|
259
|
+
}
|
|
260
|
+
let failed = 0;
|
|
261
|
+
for (const topLevelEntry of topLevelEntries) {
|
|
262
|
+
const targetEntry = path.join(targetRoot, topLevelEntry);
|
|
263
|
+
const linkEntry = path.join(linkRoot, topLevelEntry);
|
|
264
|
+
const managedEntryScope = getManagedEntriesForTopLevel(managedEntries, topLevelEntry);
|
|
265
|
+
try {
|
|
266
|
+
await createSymlink(targetEntry, linkEntry, managedEntryScope);
|
|
267
|
+
}
|
|
268
|
+
catch (err) {
|
|
269
|
+
failed++;
|
|
270
|
+
console.error(` Failed to create symlink ${linkEntry} -> ${targetEntry}: ${err.message}`);
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
return failed;
|
|
274
|
+
}
|
|
79
275
|
/**
|
|
80
276
|
* Install skills using symlink mode:
|
|
81
277
|
* 1. Copy skills to central store (.comet/skills/)
|
|
82
|
-
* 2. Create
|
|
278
|
+
* 2. Create symlinks from the platform skills dir to central store
|
|
83
279
|
*/
|
|
84
|
-
async function installSkillsAsSymlink(baseDir, platform, overwrite, languageSkillsDir = 'skills', scope = 'project') {
|
|
280
|
+
async function installSkillsAsSymlink(baseDir, platform, overwrite, languageSkillsDir = 'skills', scope = 'project', workflowSelection = 'both') {
|
|
85
281
|
const centralDir = getCentralSkillsDir(baseDir, scope);
|
|
86
282
|
const assetsDir = getAssetsDir();
|
|
87
283
|
const manifestPath = path.join(assetsDir, 'manifest.json');
|
|
@@ -92,20 +288,24 @@ async function installSkillsAsSymlink(baseDir, platform, overwrite, languageSkil
|
|
|
92
288
|
if (!manifest || !Array.isArray(manifest.skills)) {
|
|
93
289
|
throw new Error(`Invalid manifest at ${manifestPath}: "skills" must be an array`);
|
|
94
290
|
}
|
|
291
|
+
const managedSkillPaths = getManagedSkillPathsForSelection(manifest, workflowSelection);
|
|
292
|
+
const userFacingSkillPaths = getUserFacingSkillPathsForSelection(manifest, workflowSelection);
|
|
293
|
+
const managedSkillReplacementPaths = getManagedSkillReplacementPaths(manifest, workflowSelection);
|
|
294
|
+
const managedSkillTopLevelEntries = getManagedSkillTopLevelEntries(manifest, workflowSelection);
|
|
95
295
|
// Step 1: Copy skills to central store
|
|
96
296
|
let copied = 0;
|
|
97
297
|
let skippedCount = 0;
|
|
98
298
|
let failedCount = 0;
|
|
99
|
-
for (const skillRelPath of
|
|
299
|
+
for (const skillRelPath of managedSkillPaths) {
|
|
100
300
|
const isScript = skillRelPath.includes('/scripts/');
|
|
101
301
|
const sourceDir = isScript ? 'skills' : languageSkillsDir;
|
|
102
302
|
const src = path.join(assetsDir, sourceDir, skillRelPath);
|
|
103
303
|
const centralDest = path.join(centralDir, 'skills', skillRelPath);
|
|
104
|
-
if (!overwrite && (await fileExists(centralDest))) {
|
|
105
|
-
skippedCount++;
|
|
106
|
-
continue;
|
|
107
|
-
}
|
|
108
304
|
try {
|
|
305
|
+
if (!overwrite && (await fileExists(centralDest))) {
|
|
306
|
+
skippedCount++;
|
|
307
|
+
continue;
|
|
308
|
+
}
|
|
109
309
|
await copyFile(src, centralDest);
|
|
110
310
|
copied++;
|
|
111
311
|
}
|
|
@@ -114,11 +314,11 @@ async function installSkillsAsSymlink(baseDir, platform, overwrite, languageSkil
|
|
|
114
314
|
console.error(` Failed to copy ${skillRelPath} to central store: ${err.message}`);
|
|
115
315
|
}
|
|
116
316
|
}
|
|
117
|
-
// Step 2: Create
|
|
317
|
+
// Step 2: Create symlinks from platform dir to central store
|
|
118
318
|
const platformSkillsDir = path.join(baseDir, getPlatformSkillsDir(platform, scope), 'skills');
|
|
119
319
|
const centralSkillsDir = path.join(centralDir, 'skills');
|
|
120
320
|
try {
|
|
121
|
-
await
|
|
321
|
+
failedCount += await createSkillsSymlinks(centralSkillsDir, platformSkillsDir, managedSkillReplacementPaths, managedSkillTopLevelEntries);
|
|
122
322
|
}
|
|
123
323
|
catch (err) {
|
|
124
324
|
failedCount++;
|
|
@@ -126,21 +326,23 @@ async function installSkillsAsSymlink(baseDir, platform, overwrite, languageSkil
|
|
|
126
326
|
}
|
|
127
327
|
// Handle OpenCode-style platform commands (still need copy, as command content may differ)
|
|
128
328
|
if (OPENCODE_STYLE_PLATFORM_IDS.has(platform.id)) {
|
|
129
|
-
const result = await createOpenCodeCommands(baseDir, platform,
|
|
329
|
+
const result = await createOpenCodeCommands(baseDir, platform, userFacingSkillPaths, overwrite, scope, languageSkillsDir);
|
|
130
330
|
copied += result.copied;
|
|
131
331
|
skippedCount += result.skipped;
|
|
332
|
+
failedCount += result.failed;
|
|
132
333
|
}
|
|
133
334
|
// Handle Pi platform command extension
|
|
134
335
|
if (platform.id === 'pi') {
|
|
135
|
-
const result = await createPiCommandExtension(baseDir, platform,
|
|
336
|
+
const result = await createPiCommandExtension(baseDir, platform, userFacingSkillPaths, overwrite, scope);
|
|
136
337
|
copied += result.copied;
|
|
137
338
|
skippedCount += result.skipped;
|
|
339
|
+
failedCount += result.failed;
|
|
138
340
|
}
|
|
139
341
|
return { copied, skipped: skippedCount, failed: failedCount };
|
|
140
342
|
}
|
|
141
|
-
async function copyCometSkillsForPlatform(baseDir, platform, overwrite, languageSkillsDir = 'skills', scope = 'project', installMode = 'copy') {
|
|
343
|
+
async function copyCometSkillsForPlatform(baseDir, platform, overwrite, languageSkillsDir = 'skills', scope = 'project', installMode = 'copy', workflowSelection = 'both') {
|
|
142
344
|
if (installMode === 'symlink') {
|
|
143
|
-
return installSkillsAsSymlink(baseDir, platform, overwrite, languageSkillsDir, scope);
|
|
345
|
+
return installSkillsAsSymlink(baseDir, platform, overwrite, languageSkillsDir, scope, workflowSelection);
|
|
144
346
|
}
|
|
145
347
|
const assetsDir = getAssetsDir();
|
|
146
348
|
const manifestPath = path.join(assetsDir, 'manifest.json');
|
|
@@ -154,16 +356,18 @@ async function copyCometSkillsForPlatform(baseDir, platform, overwrite, language
|
|
|
154
356
|
let copied = 0;
|
|
155
357
|
let skippedCount = 0;
|
|
156
358
|
let failedCount = 0;
|
|
157
|
-
|
|
359
|
+
const managedSkillPaths = getManagedSkillPathsForSelection(manifest, workflowSelection);
|
|
360
|
+
const userFacingSkillPaths = getUserFacingSkillPathsForSelection(manifest, workflowSelection);
|
|
361
|
+
for (const skillRelPath of managedSkillPaths) {
|
|
158
362
|
const isScript = skillRelPath.includes('/scripts/');
|
|
159
363
|
const sourceDir = isScript ? 'skills' : languageSkillsDir;
|
|
160
364
|
const src = path.join(assetsDir, sourceDir, skillRelPath);
|
|
161
365
|
const dest = path.join(baseDir, getPlatformSkillsDir(platform, scope), 'skills', skillRelPath);
|
|
162
|
-
if (!overwrite && (await fileExists(dest))) {
|
|
163
|
-
skippedCount++;
|
|
164
|
-
continue;
|
|
165
|
-
}
|
|
166
366
|
try {
|
|
367
|
+
if (!overwrite && (await fileExists(dest))) {
|
|
368
|
+
skippedCount++;
|
|
369
|
+
continue;
|
|
370
|
+
}
|
|
167
371
|
await copyFile(src, dest);
|
|
168
372
|
copied++;
|
|
169
373
|
}
|
|
@@ -177,14 +381,16 @@ async function copyCometSkillsForPlatform(baseDir, platform, overwrite, language
|
|
|
177
381
|
}
|
|
178
382
|
}
|
|
179
383
|
if (OPENCODE_STYLE_PLATFORM_IDS.has(platform.id)) {
|
|
180
|
-
const result = await createOpenCodeCommands(baseDir, platform,
|
|
384
|
+
const result = await createOpenCodeCommands(baseDir, platform, userFacingSkillPaths, overwrite, scope, languageSkillsDir);
|
|
181
385
|
copied += result.copied;
|
|
182
386
|
skippedCount += result.skipped;
|
|
387
|
+
failedCount += result.failed;
|
|
183
388
|
}
|
|
184
389
|
if (platform.id === 'pi') {
|
|
185
|
-
const result = await createPiCommandExtension(baseDir, platform,
|
|
390
|
+
const result = await createPiCommandExtension(baseDir, platform, userFacingSkillPaths, overwrite, scope);
|
|
186
391
|
copied += result.copied;
|
|
187
392
|
skippedCount += result.skipped;
|
|
393
|
+
failedCount += result.failed;
|
|
188
394
|
}
|
|
189
395
|
return { copied, skipped: skippedCount, failed: failedCount };
|
|
190
396
|
}
|
|
@@ -215,37 +421,46 @@ async function createPiCommandExtension(baseDir, platform, skillPaths, overwrite
|
|
|
215
421
|
const platformBase = path.join(baseDir, getPlatformSkillsDir(platform, scope));
|
|
216
422
|
const settingsPath = path.join(platformBase, 'settings.json');
|
|
217
423
|
const extensionPath = path.join(platformBase, 'extensions', PI_COMMAND_EXTENSION_FILE);
|
|
218
|
-
let
|
|
219
|
-
|
|
220
|
-
|
|
424
|
+
let copied = 0;
|
|
425
|
+
let skipped = 0;
|
|
426
|
+
let failed = 0;
|
|
427
|
+
try {
|
|
428
|
+
let settings = {};
|
|
429
|
+
if (await fileExists(settingsPath)) {
|
|
221
430
|
const parsed = JSON.parse(await readFile(settingsPath, 'utf-8'));
|
|
222
431
|
if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {
|
|
223
432
|
throw new Error('expected a JSON object');
|
|
224
433
|
}
|
|
225
434
|
settings = parsed;
|
|
226
435
|
}
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
436
|
+
if (settings.enableSkillCommands !== true) {
|
|
437
|
+
settings.enableSkillCommands = true;
|
|
438
|
+
await ensureDir(path.dirname(settingsPath));
|
|
439
|
+
await writeFile(settingsPath, JSON.stringify(settings, null, 2) + '\n', 'utf-8');
|
|
440
|
+
copied++;
|
|
231
441
|
}
|
|
232
442
|
}
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
settings.enableSkillCommands = true;
|
|
237
|
-
await ensureDir(path.dirname(settingsPath));
|
|
238
|
-
await writeFile(settingsPath, JSON.stringify(settings, null, 2) + '\n', 'utf-8');
|
|
239
|
-
copied++;
|
|
443
|
+
catch (err) {
|
|
444
|
+
failed++;
|
|
445
|
+
console.error(` Failed to update Pi settings at ${settingsPath}: ${err.message}`);
|
|
240
446
|
}
|
|
241
|
-
if (
|
|
242
|
-
skipped
|
|
243
|
-
|
|
447
|
+
if (failed > 0)
|
|
448
|
+
return { copied, skipped, failed };
|
|
449
|
+
try {
|
|
450
|
+
if (!overwrite && (await fileExists(extensionPath))) {
|
|
451
|
+
skipped++;
|
|
452
|
+
}
|
|
453
|
+
else {
|
|
454
|
+
await ensureDir(path.dirname(extensionPath));
|
|
455
|
+
await writeFile(extensionPath, renderPiCommandExtension(getTopLevelSkillNames(skillPaths)), 'utf-8');
|
|
456
|
+
copied++;
|
|
457
|
+
}
|
|
244
458
|
}
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
459
|
+
catch (err) {
|
|
460
|
+
failed++;
|
|
461
|
+
console.error(` Failed to write Pi command extension at ${extensionPath}: ${err.message}`);
|
|
462
|
+
}
|
|
463
|
+
return { copied, skipped, failed };
|
|
249
464
|
}
|
|
250
465
|
function stripFrontmatter(content) {
|
|
251
466
|
if (!content.startsWith('---\n') && !content.startsWith('---\r\n')) {
|
|
@@ -260,6 +475,7 @@ function stripFrontmatter(content) {
|
|
|
260
475
|
async function createOpenCodeCommands(baseDir, platform, skillPaths, overwrite, scope, languageSkillsDir) {
|
|
261
476
|
let copied = 0;
|
|
262
477
|
let skipped = 0;
|
|
478
|
+
let failed = 0;
|
|
263
479
|
const assetsDir = getAssetsDir();
|
|
264
480
|
const commandsDir = path.join(baseDir, getPlatformSkillsDir(platform, scope), 'commands');
|
|
265
481
|
for (const skillPath of skillPaths) {
|
|
@@ -268,17 +484,18 @@ async function createOpenCodeCommands(baseDir, platform, skillPaths, overwrite,
|
|
|
268
484
|
continue;
|
|
269
485
|
const skillName = parts[0];
|
|
270
486
|
const dest = path.join(commandsDir, `${skillName}.md`);
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
487
|
+
try {
|
|
488
|
+
if (!overwrite && (await fileExists(dest))) {
|
|
489
|
+
skipped++;
|
|
490
|
+
continue;
|
|
491
|
+
}
|
|
492
|
+
await ensureDir(path.dirname(dest));
|
|
493
|
+
let skillSourcePath = path.join(assetsDir, languageSkillsDir, skillPath);
|
|
494
|
+
if (!(await fileExists(skillSourcePath))) {
|
|
495
|
+
skillSourcePath = path.join(assetsDir, 'skills', skillPath);
|
|
496
|
+
}
|
|
497
|
+
const skillBody = stripFrontmatter(await readFile(skillSourcePath, 'utf-8'));
|
|
498
|
+
const content = `${OPENCODE_COMMAND_HEADER.replace('{skillName}', skillName)}
|
|
282
499
|
Equivalent Comet skill: \`${skillName}\`
|
|
283
500
|
Command name: \`/${skillName}\`
|
|
284
501
|
|
|
@@ -290,19 +507,24 @@ $ARGUMENTS
|
|
|
290
507
|
|
|
291
508
|
${skillBody}
|
|
292
509
|
`;
|
|
293
|
-
|
|
294
|
-
|
|
510
|
+
await writeFile(dest, content, 'utf-8');
|
|
511
|
+
copied++;
|
|
512
|
+
}
|
|
513
|
+
catch (err) {
|
|
514
|
+
failed++;
|
|
515
|
+
console.error(` Failed to create OpenCode command ${dest}: ${err.message}`);
|
|
516
|
+
}
|
|
295
517
|
}
|
|
296
|
-
return { copied, skipped };
|
|
518
|
+
return { copied, skipped, failed };
|
|
297
519
|
}
|
|
298
520
|
async function readManifest() {
|
|
299
521
|
const assetsDir = getAssetsDir();
|
|
300
522
|
const manifestPath = path.join(assetsDir, 'manifest.json');
|
|
301
523
|
return readJson(manifestPath);
|
|
302
524
|
}
|
|
303
|
-
async function getManifestSkills() {
|
|
525
|
+
async function getManifestSkills(workflowSelection = 'both') {
|
|
304
526
|
const manifest = await readManifest();
|
|
305
|
-
return
|
|
527
|
+
return getManagedSkillPathsForSelection(manifest, workflowSelection);
|
|
306
528
|
}
|
|
307
529
|
/**
|
|
308
530
|
* Copy Comet rule files to a platform's rules directory.
|
|
@@ -312,14 +534,49 @@ async function getManifestSkills() {
|
|
|
312
534
|
* 'copilot' = GitHub Copilot .instructions.md with applyTo frontmatter
|
|
313
535
|
* Skips platforms without rulesDir.
|
|
314
536
|
*/
|
|
315
|
-
|
|
537
|
+
// Rule variants share a base name and differ only by a `.en.md` suffix
|
|
538
|
+
// (e.g. `comet-phase-guard.md` = zh default, `comet-phase-guard.en.md` = en).
|
|
539
|
+
// Centralized here so the naming convention only needs to change in one place.
|
|
540
|
+
const EN_RULE_SUFFIX = /\.en\.md$/;
|
|
541
|
+
function isEnglishRuleVariant(ruleRelPath) {
|
|
542
|
+
return EN_RULE_SUFFIX.test(ruleRelPath);
|
|
543
|
+
}
|
|
544
|
+
function toRuleBaseName(ruleRelPath) {
|
|
545
|
+
return ruleRelPath.replace(EN_RULE_SUFFIX, '.md');
|
|
546
|
+
}
|
|
547
|
+
// Pick exactly one variant per base name for the requested language, falling
|
|
548
|
+
// back to whichever variant exists if there's no per-language pair.
|
|
549
|
+
function selectRulePathsForLanguage(rulePaths, languageId) {
|
|
550
|
+
const wantEnglish = languageId === 'en';
|
|
551
|
+
const selected = new Map();
|
|
552
|
+
for (const rulePath of rulePaths) {
|
|
553
|
+
const isEnglishVariant = isEnglishRuleVariant(rulePath);
|
|
554
|
+
const baseKey = toRuleBaseName(rulePath);
|
|
555
|
+
const matched = isEnglishVariant === wantEnglish;
|
|
556
|
+
const existing = selected.get(baseKey);
|
|
557
|
+
if (!existing || (matched && !existing.matched)) {
|
|
558
|
+
selected.set(baseKey, { rulePath, matched });
|
|
559
|
+
}
|
|
560
|
+
}
|
|
561
|
+
return [...selected.values()].map((entry) => entry.rulePath);
|
|
562
|
+
}
|
|
563
|
+
function managedRulesForSelection(manifest, _selection) {
|
|
564
|
+
return manifest.rules ?? [];
|
|
565
|
+
}
|
|
566
|
+
function managedHooksForSelection(manifest, _selection) {
|
|
567
|
+
return manifest.hooks ?? {};
|
|
568
|
+
}
|
|
569
|
+
function managedHookScriptPaths(hooksConfig) {
|
|
570
|
+
return [...new Set([...Object.keys(hooksConfig), ...LEGACY_HOOK_SCRIPTS])];
|
|
571
|
+
}
|
|
572
|
+
async function copyCometRulesForPlatform(baseDir, platform, overwrite, languageId, scope = 'project', workflowSelection = 'classic') {
|
|
316
573
|
if (!platform.rulesDir || !platform.rulesFormat) {
|
|
317
|
-
return { copied: 0, skipped: 0 };
|
|
574
|
+
return { copied: 0, skipped: 0, failed: 0 };
|
|
318
575
|
}
|
|
319
576
|
const manifest = await readManifest();
|
|
320
|
-
const rulePaths = manifest
|
|
577
|
+
const rulePaths = selectRulePathsForLanguage(managedRulesForSelection(manifest, workflowSelection), languageId);
|
|
321
578
|
if (!rulePaths || rulePaths.length === 0) {
|
|
322
|
-
return { copied: 0, skipped: 0 };
|
|
579
|
+
return { copied: 0, skipped: 0, failed: 0 };
|
|
323
580
|
}
|
|
324
581
|
const assetsDir = getAssetsDir();
|
|
325
582
|
// Support platforms whose rules live outside the skills config dir
|
|
@@ -331,20 +588,24 @@ async function copyCometRulesForPlatform(baseDir, platform, overwrite, scope = '
|
|
|
331
588
|
: path.join(baseDir, getPlatformSkillsDir(platform, scope));
|
|
332
589
|
let copied = 0;
|
|
333
590
|
let skippedCount = 0;
|
|
591
|
+
let failed = 0;
|
|
334
592
|
for (const ruleRelPath of rulePaths) {
|
|
335
593
|
const src = path.join(assetsDir, 'skills', ruleRelPath);
|
|
336
|
-
if (!(await fileExists(src))) {
|
|
337
|
-
console.error(` Rule source not found: ${ruleRelPath}`);
|
|
338
|
-
continue;
|
|
339
|
-
}
|
|
340
|
-
const ruleFileName = path.basename(ruleRelPath);
|
|
341
|
-
const rulesDestDir = path.join(rulesBase, platform.rulesDir);
|
|
342
|
-
const dest = computeRuleDestPath(rulesDestDir, ruleFileName, platform.rulesFormat);
|
|
343
|
-
if (!overwrite && (await fileExists(dest))) {
|
|
344
|
-
skippedCount++;
|
|
345
|
-
continue;
|
|
346
|
-
}
|
|
347
594
|
try {
|
|
595
|
+
if (!(await fileExists(src))) {
|
|
596
|
+
console.error(` Rule source not found: ${ruleRelPath}`);
|
|
597
|
+
failed++;
|
|
598
|
+
continue;
|
|
599
|
+
}
|
|
600
|
+
// Normalize the `.en` infix away so the installed file name is the same
|
|
601
|
+
// regardless of which language variant was selected.
|
|
602
|
+
const ruleFileName = toRuleBaseName(path.basename(ruleRelPath));
|
|
603
|
+
const rulesDestDir = path.join(rulesBase, platform.rulesDir);
|
|
604
|
+
const dest = computeRuleDestPath(rulesDestDir, ruleFileName, platform.rulesFormat);
|
|
605
|
+
if (!overwrite && (await fileExists(dest))) {
|
|
606
|
+
skippedCount++;
|
|
607
|
+
continue;
|
|
608
|
+
}
|
|
348
609
|
const content = await readFile(src, 'utf-8');
|
|
349
610
|
await ensureDir(path.dirname(dest));
|
|
350
611
|
const formatted = formatRuleContent(content, ruleFileName, platform.rulesFormat);
|
|
@@ -353,9 +614,24 @@ async function copyCometRulesForPlatform(baseDir, platform, overwrite, scope = '
|
|
|
353
614
|
}
|
|
354
615
|
catch (err) {
|
|
355
616
|
console.error(` Failed to copy rule ${ruleRelPath}: ${err.message}`);
|
|
617
|
+
failed++;
|
|
356
618
|
}
|
|
357
619
|
}
|
|
358
|
-
|
|
620
|
+
const rulesDestDir = path.join(rulesBase, platform.rulesDir);
|
|
621
|
+
for (const legacyFile of LEGACY_RULE_FILES) {
|
|
622
|
+
const legacyPath = computeRuleDestPath(rulesDestDir, legacyFile, platform.rulesFormat);
|
|
623
|
+
try {
|
|
624
|
+
await rm(legacyPath, { force: true });
|
|
625
|
+
}
|
|
626
|
+
catch (error) {
|
|
627
|
+
const code = error.code;
|
|
628
|
+
if (code === 'ENOENT' || code === 'ENOTDIR')
|
|
629
|
+
continue;
|
|
630
|
+
console.error(` Failed to remove legacy Rule ${legacyPath}: ${error.message}`);
|
|
631
|
+
failed++;
|
|
632
|
+
}
|
|
633
|
+
}
|
|
634
|
+
return { copied, skipped: skippedCount, failed };
|
|
359
635
|
}
|
|
360
636
|
function computeRuleDestPath(rulesDestDir, ruleFileName, rulesFormat) {
|
|
361
637
|
if (rulesFormat === 'mdc') {
|
|
@@ -392,57 +668,154 @@ ${content}`;
|
|
|
392
668
|
/**
|
|
393
669
|
* Install Comet hooks for platforms that support them.
|
|
394
670
|
* Supports multiple hook formats:
|
|
395
|
-
* 'claude-code' —
|
|
671
|
+
* 'claude-code' — Claude-shaped JSON with PreToolUse array; defaults to settings.local.json,
|
|
672
|
+
* with platform metadata able to override the filename
|
|
396
673
|
* 'qwen' — settings.json with PreToolUse/hooks array (Qwen Code)
|
|
397
674
|
* 'qoder' — settings.json with PreToolUse/hooks array (Qoder)
|
|
675
|
+
* 'codebuddy' — settings.json with PreToolUse/hooks array (CodeBuddy Code)
|
|
398
676
|
* 'gemini' — settings.json with hooks.BeforeTool array (Gemini CLI)
|
|
399
677
|
* 'windsurf' — hooks.json with pre_write_code array
|
|
400
678
|
* 'copilot' — hooks/*.json with preToolUse
|
|
401
679
|
* 'kiro' — hooks/*.kiro.hook JSON files
|
|
402
680
|
*/
|
|
403
|
-
async function installCometHooksForPlatform(baseDir, platform, scope = 'project') {
|
|
404
|
-
if (!platform.supportsHooks
|
|
405
|
-
return {
|
|
681
|
+
async function installCometHooksForPlatform(baseDir, platform, scope = 'project', workflowSelection = 'classic') {
|
|
682
|
+
if (!platform.supportsHooks) {
|
|
683
|
+
return { status: 'skipped', reason: 'platform does not support hooks' };
|
|
406
684
|
}
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
685
|
+
if (!platform.hookFormat) {
|
|
686
|
+
return {
|
|
687
|
+
status: 'failed',
|
|
688
|
+
reason: 'hook-capable platform does not declare a hook format',
|
|
689
|
+
};
|
|
411
690
|
}
|
|
412
|
-
const hookFormat = platform.hookFormat;
|
|
413
|
-
const skillsDir = getPlatformSkillsDir(platform, scope);
|
|
414
|
-
const platformBase = path.join(baseDir, skillsDir);
|
|
415
691
|
try {
|
|
692
|
+
const manifest = await readManifest();
|
|
693
|
+
const hooksConfig = managedHooksForSelection(manifest, workflowSelection);
|
|
694
|
+
if (!hooksConfig || Object.keys(hooksConfig).length === 0) {
|
|
695
|
+
return { status: 'skipped', reason: 'no hooks defined in manifest' };
|
|
696
|
+
}
|
|
697
|
+
const hookFormat = platform.hookFormat;
|
|
698
|
+
const skillsDir = getPlatformSkillsDir(platform, scope);
|
|
699
|
+
const platformBase = path.join(baseDir, getPlatformConfigDir(platform, scope));
|
|
416
700
|
switch (hookFormat) {
|
|
417
|
-
case 'claude-code':
|
|
418
|
-
|
|
701
|
+
case 'claude-code': {
|
|
702
|
+
const result = await installClaudeCodeHooks(baseDir, platformBase, skillsDir, hooksConfig, platform.hookConfigFile ?? 'settings.local.json', platform.name, { platformId: platform.id, scope });
|
|
703
|
+
if (result.status === 'installed') {
|
|
704
|
+
const failedLegacyFiles = [];
|
|
705
|
+
for (const legacyFile of platform.legacyHookConfigFiles ?? []) {
|
|
706
|
+
try {
|
|
707
|
+
const cleanup = await removeManagedHooksFromJsonFile(path.join(platformBase, legacyFile), managedHookScriptPaths(hooksConfig));
|
|
708
|
+
if (cleanup.failed > 0)
|
|
709
|
+
failedLegacyFiles.push(legacyFile);
|
|
710
|
+
}
|
|
711
|
+
catch {
|
|
712
|
+
failedLegacyFiles.push(legacyFile);
|
|
713
|
+
}
|
|
714
|
+
}
|
|
715
|
+
if (failedLegacyFiles.length > 0) {
|
|
716
|
+
return {
|
|
717
|
+
status: 'installed',
|
|
718
|
+
reason: `legacy Hook cleanup failed for ${failedLegacyFiles.join(', ')}`,
|
|
719
|
+
cleanupFailed: failedLegacyFiles.length,
|
|
720
|
+
};
|
|
721
|
+
}
|
|
722
|
+
}
|
|
723
|
+
return result;
|
|
724
|
+
}
|
|
419
725
|
case 'qwen':
|
|
420
726
|
case 'qoder':
|
|
421
|
-
|
|
727
|
+
case 'codebuddy':
|
|
728
|
+
return await installQwenStyleHooks(baseDir, platformBase, skillsDir, hooksConfig, platform.name, { platformId: platform.id, scope });
|
|
422
729
|
case 'gemini':
|
|
423
|
-
return installGeminiHooks(baseDir, platformBase, skillsDir, hooksConfig);
|
|
730
|
+
return await installGeminiHooks(baseDir, platformBase, skillsDir, hooksConfig, platform.name, { platformId: platform.id, scope });
|
|
424
731
|
case 'windsurf':
|
|
425
|
-
return installWindsurfHooks(baseDir, platformBase, skillsDir, hooksConfig);
|
|
732
|
+
return await installWindsurfHooks(baseDir, platformBase, skillsDir, hooksConfig, platform.name, { platformId: platform.id, scope });
|
|
426
733
|
case 'copilot':
|
|
427
|
-
return installCopilotHooks(baseDir, platformBase, skillsDir, hooksConfig
|
|
734
|
+
return await installCopilotHooks(baseDir, platformBase, skillsDir, hooksConfig, {
|
|
735
|
+
platformId: platform.id,
|
|
736
|
+
scope,
|
|
737
|
+
});
|
|
428
738
|
case 'kiro':
|
|
429
|
-
return installKiroHooks(baseDir, platformBase, skillsDir, hooksConfig
|
|
739
|
+
return await installKiroHooks(baseDir, platformBase, skillsDir, hooksConfig, {
|
|
740
|
+
platformId: platform.id,
|
|
741
|
+
scope,
|
|
742
|
+
});
|
|
430
743
|
default:
|
|
431
|
-
return {
|
|
744
|
+
return { status: 'failed', reason: `unsupported hook format: ${hookFormat}` };
|
|
432
745
|
}
|
|
433
746
|
}
|
|
434
747
|
catch (err) {
|
|
435
|
-
return {
|
|
748
|
+
return { status: 'failed', reason: err.message };
|
|
436
749
|
}
|
|
437
750
|
}
|
|
438
751
|
function quoteCommandArg(value) {
|
|
439
752
|
return `"${value.replaceAll('\\', '/').replaceAll('"', '\\"')}"`;
|
|
440
753
|
}
|
|
441
754
|
/** Build a hook command that is stable even when the hook runner executes from a subdirectory. */
|
|
442
|
-
function buildHookCommand(baseDir, skillsDir, scriptRelPath) {
|
|
755
|
+
function buildHookCommand(baseDir, skillsDir, scriptRelPath, context) {
|
|
443
756
|
const projectRoot = path.resolve(baseDir);
|
|
444
757
|
const scriptPath = path.join(projectRoot, skillsDir, 'skills', ...scriptRelPath.split('/'));
|
|
445
|
-
|
|
758
|
+
let command = `node ${quoteCommandArg(scriptPath)}`;
|
|
759
|
+
if (scriptRelPath === HOOK_ROUTER_SCRIPT && context) {
|
|
760
|
+
command += ` --platform ${quoteCommandArg(context.platformId)}`;
|
|
761
|
+
if (context.scope === 'project') {
|
|
762
|
+
command += ` --project-root ${quoteCommandArg(projectRoot)}`;
|
|
763
|
+
}
|
|
764
|
+
return command;
|
|
765
|
+
}
|
|
766
|
+
return `${command} --project-root ${quoteCommandArg(projectRoot)}`;
|
|
767
|
+
}
|
|
768
|
+
function parseCommandTokens(command) {
|
|
769
|
+
const tokens = [];
|
|
770
|
+
let current = '';
|
|
771
|
+
let quote;
|
|
772
|
+
let tokenStarted = false;
|
|
773
|
+
let quoteClosed = false;
|
|
774
|
+
for (let index = 0; index < command.length; index++) {
|
|
775
|
+
const character = command[index];
|
|
776
|
+
if (quote) {
|
|
777
|
+
if (character === quote) {
|
|
778
|
+
quote = undefined;
|
|
779
|
+
quoteClosed = true;
|
|
780
|
+
}
|
|
781
|
+
else if (character === '\\' && command[index + 1] === quote) {
|
|
782
|
+
current += quote;
|
|
783
|
+
index++;
|
|
784
|
+
}
|
|
785
|
+
else {
|
|
786
|
+
current += character;
|
|
787
|
+
}
|
|
788
|
+
continue;
|
|
789
|
+
}
|
|
790
|
+
if (character === '\r' || character === '\n' || ';|&<>`'.includes(character)) {
|
|
791
|
+
return undefined;
|
|
792
|
+
}
|
|
793
|
+
if (/\s/u.test(character)) {
|
|
794
|
+
if (tokenStarted) {
|
|
795
|
+
tokens.push(current);
|
|
796
|
+
current = '';
|
|
797
|
+
tokenStarted = false;
|
|
798
|
+
quoteClosed = false;
|
|
799
|
+
}
|
|
800
|
+
continue;
|
|
801
|
+
}
|
|
802
|
+
if (quoteClosed)
|
|
803
|
+
return undefined;
|
|
804
|
+
if (character === '"' || character === "'") {
|
|
805
|
+
if (tokenStarted)
|
|
806
|
+
return undefined;
|
|
807
|
+
quote = character;
|
|
808
|
+
tokenStarted = true;
|
|
809
|
+
continue;
|
|
810
|
+
}
|
|
811
|
+
current += character;
|
|
812
|
+
tokenStarted = true;
|
|
813
|
+
}
|
|
814
|
+
if (quote)
|
|
815
|
+
return undefined;
|
|
816
|
+
if (tokenStarted)
|
|
817
|
+
tokens.push(current);
|
|
818
|
+
return tokens;
|
|
446
819
|
}
|
|
447
820
|
function isManagedHookCommand(command, scriptRelPaths) {
|
|
448
821
|
if (typeof command !== 'string')
|
|
@@ -450,28 +823,38 @@ function isManagedHookCommand(command, scriptRelPaths) {
|
|
|
450
823
|
// Match both the current `node .../comet-hook-guard.mjs` form and the legacy
|
|
451
824
|
// `bash .../comet-hook-guard.sh` form so uninstall also cleans up hooks
|
|
452
825
|
// written by older Comet releases. Compare basenames without extension.
|
|
453
|
-
const
|
|
454
|
-
|
|
455
|
-
.match(/^(?:node|bash|sh)\s+["']?([^"'\s]+)["']?(?:\s|$)/)?.[1]
|
|
456
|
-
?.replace(/\\/g, '/');
|
|
457
|
-
if (!commandPath)
|
|
826
|
+
const tokens = parseCommandTokens(command.trim());
|
|
827
|
+
if (!tokens || tokens.length < 2 || !['node', 'bash', 'sh'].includes(tokens[0]))
|
|
458
828
|
return false;
|
|
829
|
+
const commandPath = tokens[1].replace(/\\/g, '/');
|
|
459
830
|
const normalize = (value) => value.replace(/\.(?:sh|mjs)$/u, '');
|
|
460
831
|
return scriptRelPaths.some((scriptRelPath) => normalize(commandPath).endsWith(`/skills/${normalize(scriptRelPath.replace(/\\/g, '/'))}`));
|
|
461
832
|
}
|
|
462
833
|
function mergeHookGroups(existingGroups, newGroups, scriptRelPaths) {
|
|
463
|
-
const mergedGroups = existingGroups.
|
|
464
|
-
if (!Array.isArray(group
|
|
465
|
-
return
|
|
466
|
-
const
|
|
467
|
-
if (
|
|
468
|
-
return
|
|
469
|
-
|
|
834
|
+
const mergedGroups = existingGroups.map((group) => {
|
|
835
|
+
if (!group || typeof group !== 'object' || Array.isArray(group))
|
|
836
|
+
return group;
|
|
837
|
+
const record = group;
|
|
838
|
+
if (!Array.isArray(record.hooks))
|
|
839
|
+
return record;
|
|
840
|
+
const hooks = record.hooks.filter((hook) => {
|
|
841
|
+
const command = hook && typeof hook === 'object' ? hook.command : undefined;
|
|
842
|
+
return !isManagedHookCommand(command, scriptRelPaths);
|
|
843
|
+
});
|
|
844
|
+
return { ...record, hooks };
|
|
470
845
|
});
|
|
471
846
|
for (const newGroup of newGroups) {
|
|
472
|
-
const
|
|
473
|
-
|
|
474
|
-
|
|
847
|
+
const existingGroupIndex = mergedGroups.findIndex((group) => Boolean(group) &&
|
|
848
|
+
typeof group === 'object' &&
|
|
849
|
+
!Array.isArray(group) &&
|
|
850
|
+
group.matcher === newGroup.matcher &&
|
|
851
|
+
Array.isArray(group.hooks));
|
|
852
|
+
if (existingGroupIndex >= 0) {
|
|
853
|
+
const existingGroup = mergedGroups[existingGroupIndex];
|
|
854
|
+
mergedGroups[existingGroupIndex] = {
|
|
855
|
+
...existingGroup,
|
|
856
|
+
hooks: [...existingGroup.hooks, ...newGroup.hooks],
|
|
857
|
+
};
|
|
475
858
|
}
|
|
476
859
|
else {
|
|
477
860
|
mergedGroups.push(newGroup);
|
|
@@ -487,44 +870,101 @@ function mergeHookGroups(existingGroups, newGroups, scriptRelPaths) {
|
|
|
487
870
|
function asHookGroup(value) {
|
|
488
871
|
return Array.isArray(value) ? value : [];
|
|
489
872
|
}
|
|
873
|
+
async function removeManagedHooksFromJsonFile(settingsPath, scriptRelPaths) {
|
|
874
|
+
if (!(await fileExists(settingsPath)))
|
|
875
|
+
return { removed: 0, failed: 0 };
|
|
876
|
+
let source;
|
|
877
|
+
try {
|
|
878
|
+
source = await readFile(settingsPath, 'utf-8');
|
|
879
|
+
}
|
|
880
|
+
catch {
|
|
881
|
+
return { removed: 0, failed: 1 };
|
|
882
|
+
}
|
|
883
|
+
let settings;
|
|
884
|
+
try {
|
|
885
|
+
const parsed = JSON.parse(source);
|
|
886
|
+
if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {
|
|
887
|
+
return { removed: 0, failed: 1 };
|
|
888
|
+
}
|
|
889
|
+
settings = parsed;
|
|
890
|
+
}
|
|
891
|
+
catch {
|
|
892
|
+
return { removed: 0, failed: 1 };
|
|
893
|
+
}
|
|
894
|
+
const existingHooks = settings.hooks;
|
|
895
|
+
const existingPreToolUse = existingHooks?.PreToolUse;
|
|
896
|
+
if (!existingHooks || !Array.isArray(existingPreToolUse)) {
|
|
897
|
+
return { removed: 0, failed: 0 };
|
|
898
|
+
}
|
|
899
|
+
let removed = 0;
|
|
900
|
+
const filtered = existingPreToolUse.map((group) => {
|
|
901
|
+
if (!group || typeof group !== 'object')
|
|
902
|
+
return group;
|
|
903
|
+
const record = group;
|
|
904
|
+
if (!Array.isArray(record.hooks))
|
|
905
|
+
return record;
|
|
906
|
+
const handlers = record.hooks.filter((handler) => {
|
|
907
|
+
const command = handler && typeof handler === 'object'
|
|
908
|
+
? handler.command
|
|
909
|
+
: undefined;
|
|
910
|
+
const managed = isManagedHookCommand(command, scriptRelPaths);
|
|
911
|
+
if (managed)
|
|
912
|
+
removed++;
|
|
913
|
+
return !managed;
|
|
914
|
+
});
|
|
915
|
+
return { ...record, hooks: handlers };
|
|
916
|
+
});
|
|
917
|
+
if (removed === 0)
|
|
918
|
+
return { removed: 0, failed: 0 };
|
|
919
|
+
existingHooks.PreToolUse = filtered;
|
|
920
|
+
try {
|
|
921
|
+
await writeFile(settingsPath, JSON.stringify(settings, null, 2) + '\n', 'utf-8');
|
|
922
|
+
}
|
|
923
|
+
catch {
|
|
924
|
+
return { removed: 0, failed: 1 };
|
|
925
|
+
}
|
|
926
|
+
return { removed, failed: 0 };
|
|
927
|
+
}
|
|
928
|
+
async function readSettingsJsonObject(settingsPath, platformName) {
|
|
929
|
+
const result = await readJsonObjectFile(settingsPath);
|
|
930
|
+
if (result.status === 'missing')
|
|
931
|
+
return {};
|
|
932
|
+
if (result.status === 'present')
|
|
933
|
+
return result.value;
|
|
934
|
+
throw new Error(`Invalid ${platformName} settings at ${settingsPath}: ${result.error.message}`, {
|
|
935
|
+
cause: result.error,
|
|
936
|
+
});
|
|
937
|
+
}
|
|
490
938
|
/**
|
|
491
|
-
* Claude Code, Codex, Amazon Q
|
|
492
|
-
*
|
|
939
|
+
* Claude-shaped JSON format used by Claude Code, Codex, and Amazon Q.
|
|
940
|
+
* Defaults to settings.local.json; platform metadata may override the filename.
|
|
493
941
|
*/
|
|
494
|
-
async function installClaudeCodeHooks(baseDir, platformBase, skillsDir, hooksConfig) {
|
|
495
|
-
const settingsPath = path.join(platformBase,
|
|
942
|
+
async function installClaudeCodeHooks(baseDir, platformBase, skillsDir, hooksConfig, configFile, platformName, context) {
|
|
943
|
+
const settingsPath = path.join(platformBase, configFile);
|
|
496
944
|
// Group by matcher so hooks sharing the same matcher are merged
|
|
497
945
|
const matcherGroups = {};
|
|
498
946
|
for (const [scriptRelPath, config] of Object.entries(hooksConfig)) {
|
|
499
|
-
const command = buildHookCommand(baseDir, skillsDir, scriptRelPath);
|
|
947
|
+
const command = buildHookCommand(baseDir, skillsDir, scriptRelPath, context);
|
|
500
948
|
if (!matcherGroups[config.matcher]) {
|
|
501
949
|
matcherGroups[config.matcher] = [];
|
|
502
950
|
}
|
|
503
951
|
matcherGroups[config.matcher].push({ type: 'command', command });
|
|
504
952
|
}
|
|
505
953
|
const newEntries = Object.entries(matcherGroups).map(([matcher, hooks]) => ({ matcher, hooks }));
|
|
506
|
-
|
|
507
|
-
if (await fileExists(settingsPath)) {
|
|
508
|
-
try {
|
|
509
|
-
settings = JSON.parse(await readFile(settingsPath, 'utf-8'));
|
|
510
|
-
}
|
|
511
|
-
catch {
|
|
512
|
-
settings = {};
|
|
513
|
-
}
|
|
514
|
-
}
|
|
954
|
+
const settings = await readSettingsJsonObject(settingsPath, platformName);
|
|
515
955
|
const existingHooks = settings.hooks ?? {};
|
|
516
956
|
const existingPreToolUse = asHookGroup(existingHooks.PreToolUse);
|
|
517
|
-
const merged = mergeHookGroups(existingPreToolUse, newEntries,
|
|
957
|
+
const merged = mergeHookGroups(existingPreToolUse, newEntries, managedHookScriptPaths(hooksConfig));
|
|
518
958
|
settings.hooks = { ...existingHooks, PreToolUse: merged };
|
|
519
959
|
await ensureDir(path.dirname(settingsPath));
|
|
520
960
|
await writeFile(settingsPath, JSON.stringify(settings, null, 2) + '\n', 'utf-8');
|
|
521
|
-
return {
|
|
961
|
+
return { status: 'installed' };
|
|
522
962
|
}
|
|
523
963
|
/**
|
|
524
|
-
* Qwen Code / Qoder format:
|
|
964
|
+
* Qwen Code / Qoder / CodeBuddy format:
|
|
525
965
|
* Writes to settings.json with { hooks: { PreToolUse: [{ matcher, hooks: [{ type, command }] }] } }
|
|
526
966
|
*/
|
|
527
|
-
async function installQwenStyleHooks(baseDir, platformBase, skillsDir, hooksConfig,
|
|
967
|
+
async function installQwenStyleHooks(baseDir, platformBase, skillsDir, hooksConfig, platformName, context) {
|
|
528
968
|
const settingsPath = path.join(platformBase, 'settings.json');
|
|
529
969
|
// Group by matcher
|
|
530
970
|
const matcherGroups = {};
|
|
@@ -534,7 +974,7 @@ async function installQwenStyleHooks(baseDir, platformBase, skillsDir, hooksConf
|
|
|
534
974
|
}
|
|
535
975
|
matcherGroups[config.matcher].push({
|
|
536
976
|
type: 'command',
|
|
537
|
-
command: buildHookCommand(baseDir, skillsDir, scriptRelPath),
|
|
977
|
+
command: buildHookCommand(baseDir, skillsDir, scriptRelPath, context),
|
|
538
978
|
description: config.description,
|
|
539
979
|
});
|
|
540
980
|
}
|
|
@@ -542,28 +982,20 @@ async function installQwenStyleHooks(baseDir, platformBase, skillsDir, hooksConf
|
|
|
542
982
|
matcher,
|
|
543
983
|
hooks,
|
|
544
984
|
}));
|
|
545
|
-
|
|
546
|
-
if (await fileExists(settingsPath)) {
|
|
547
|
-
try {
|
|
548
|
-
settings = JSON.parse(await readFile(settingsPath, 'utf-8'));
|
|
549
|
-
}
|
|
550
|
-
catch {
|
|
551
|
-
settings = {};
|
|
552
|
-
}
|
|
553
|
-
}
|
|
985
|
+
const settings = await readSettingsJsonObject(settingsPath, platformName);
|
|
554
986
|
const existingHooks = settings.hooks ?? {};
|
|
555
987
|
const existingPreToolUse = asHookGroup(existingHooks.PreToolUse);
|
|
556
|
-
const merged = mergeHookGroups(existingPreToolUse, preToolUseEntries,
|
|
988
|
+
const merged = mergeHookGroups(existingPreToolUse, preToolUseEntries, managedHookScriptPaths(hooksConfig));
|
|
557
989
|
settings.hooks = { ...existingHooks, PreToolUse: merged };
|
|
558
990
|
await ensureDir(path.dirname(settingsPath));
|
|
559
991
|
await writeFile(settingsPath, JSON.stringify(settings, null, 2) + '\n', 'utf-8');
|
|
560
|
-
return {
|
|
992
|
+
return { status: 'installed' };
|
|
561
993
|
}
|
|
562
994
|
/**
|
|
563
995
|
* Gemini CLI format:
|
|
564
996
|
* Writes to .gemini/settings.json with { hooks: { BeforeTool: [{ matcher, hooks: [{ type, command }] }] } }
|
|
565
997
|
*/
|
|
566
|
-
async function installGeminiHooks(baseDir, platformBase, skillsDir, hooksConfig) {
|
|
998
|
+
async function installGeminiHooks(baseDir, platformBase, skillsDir, hooksConfig, platformName, context) {
|
|
567
999
|
const settingsPath = path.join(platformBase, 'settings.json');
|
|
568
1000
|
const entries = [];
|
|
569
1001
|
for (const [scriptRelPath, config] of Object.entries(hooksConfig)) {
|
|
@@ -572,72 +1004,62 @@ async function installGeminiHooks(baseDir, platformBase, skillsDir, hooksConfig)
|
|
|
572
1004
|
hooks: [
|
|
573
1005
|
{
|
|
574
1006
|
type: 'command',
|
|
575
|
-
command: buildHookCommand(baseDir, skillsDir, scriptRelPath),
|
|
1007
|
+
command: buildHookCommand(baseDir, skillsDir, scriptRelPath, context),
|
|
576
1008
|
name: config.description,
|
|
577
1009
|
},
|
|
578
1010
|
],
|
|
579
1011
|
});
|
|
580
1012
|
}
|
|
581
|
-
|
|
582
|
-
if (await fileExists(settingsPath)) {
|
|
583
|
-
try {
|
|
584
|
-
settings = JSON.parse(await readFile(settingsPath, 'utf-8'));
|
|
585
|
-
}
|
|
586
|
-
catch {
|
|
587
|
-
settings = {};
|
|
588
|
-
}
|
|
589
|
-
}
|
|
1013
|
+
const settings = await readSettingsJsonObject(settingsPath, platformName);
|
|
590
1014
|
const existingHooks = settings.hooks ?? {};
|
|
591
1015
|
const existingBeforeTool = asHookGroup(existingHooks.BeforeTool);
|
|
592
|
-
const merged = mergeHookGroups(existingBeforeTool, entries,
|
|
1016
|
+
const merged = mergeHookGroups(existingBeforeTool, entries, managedHookScriptPaths(hooksConfig));
|
|
593
1017
|
settings.hooks = { ...existingHooks, BeforeTool: merged };
|
|
594
1018
|
await ensureDir(path.dirname(settingsPath));
|
|
595
1019
|
await writeFile(settingsPath, JSON.stringify(settings, null, 2) + '\n', 'utf-8');
|
|
596
|
-
return {
|
|
1020
|
+
return { status: 'installed' };
|
|
597
1021
|
}
|
|
598
1022
|
/**
|
|
599
1023
|
* Windsurf format:
|
|
600
1024
|
* Writes to .windsurf/hooks.json with { hooks: { pre_write_code: [{ command }] } }
|
|
601
1025
|
*/
|
|
602
|
-
async function installWindsurfHooks(baseDir, platformBase, skillsDir, hooksConfig) {
|
|
1026
|
+
async function installWindsurfHooks(baseDir, platformBase, skillsDir, hooksConfig, platformName, context) {
|
|
603
1027
|
const hooksPath = path.join(platformBase, 'hooks.json');
|
|
604
1028
|
const entries = [];
|
|
605
1029
|
for (const [scriptRelPath] of Object.entries(hooksConfig)) {
|
|
606
1030
|
entries.push({
|
|
607
|
-
command: buildHookCommand(baseDir, skillsDir, scriptRelPath),
|
|
1031
|
+
command: buildHookCommand(baseDir, skillsDir, scriptRelPath, context),
|
|
608
1032
|
show_output: true,
|
|
609
1033
|
});
|
|
610
1034
|
}
|
|
611
|
-
|
|
612
|
-
if (await fileExists(hooksPath)) {
|
|
613
|
-
try {
|
|
614
|
-
hooksFile = JSON.parse(await readFile(hooksPath, 'utf-8'));
|
|
615
|
-
}
|
|
616
|
-
catch {
|
|
617
|
-
hooksFile = {};
|
|
618
|
-
}
|
|
619
|
-
}
|
|
1035
|
+
const hooksFile = await readSettingsJsonObject(hooksPath, platformName);
|
|
620
1036
|
const existingHooks = hooksFile.hooks ?? {};
|
|
621
1037
|
const existingPreWrite = asHookGroup(existingHooks.pre_write_code);
|
|
622
|
-
const merged = existingPreWrite.filter((entry) =>
|
|
1038
|
+
const merged = existingPreWrite.filter((entry) => {
|
|
1039
|
+
const command = entry && typeof entry === 'object' ? entry.command : undefined;
|
|
1040
|
+
return !isManagedHookCommand(command, managedHookScriptPaths(hooksConfig));
|
|
1041
|
+
});
|
|
623
1042
|
merged.push(...entries);
|
|
624
1043
|
hooksFile.hooks = { ...existingHooks, pre_write_code: merged };
|
|
625
1044
|
await ensureDir(path.dirname(hooksPath));
|
|
626
1045
|
await writeFile(hooksPath, JSON.stringify(hooksFile, null, 2) + '\n', 'utf-8');
|
|
627
|
-
return {
|
|
1046
|
+
return { status: 'installed' };
|
|
628
1047
|
}
|
|
629
1048
|
/**
|
|
630
1049
|
* GitHub Copilot format:
|
|
631
1050
|
* Writes to .github/hooks/comet-guard.json with preToolUse hooks config.
|
|
632
1051
|
*/
|
|
633
|
-
async function installCopilotHooks(baseDir, platformBase, skillsDir, hooksConfig) {
|
|
1052
|
+
async function installCopilotHooks(baseDir, platformBase, skillsDir, hooksConfig, context) {
|
|
634
1053
|
const hooksDir = path.join(platformBase, 'hooks');
|
|
635
1054
|
const hookFilePath = path.join(hooksDir, 'comet-guard.json');
|
|
636
1055
|
const scriptEntries = [];
|
|
637
|
-
for (const [scriptRelPath] of Object.entries(hooksConfig)) {
|
|
638
|
-
const cmd = buildHookCommand(baseDir, skillsDir, scriptRelPath);
|
|
1056
|
+
for (const [scriptRelPath, config] of Object.entries(hooksConfig)) {
|
|
1057
|
+
const cmd = buildHookCommand(baseDir, skillsDir, scriptRelPath, context);
|
|
1058
|
+
const matcher = config.matcher === 'Write|Edit'
|
|
1059
|
+
? 'create|edit|str_replace_editor|apply_patch'
|
|
1060
|
+
: config.matcher;
|
|
639
1061
|
// Hook runs through node on every platform; both fields use the same command
|
|
640
|
-
scriptEntries.push({ bash: cmd, powershell: cmd });
|
|
1062
|
+
scriptEntries.push({ matcher, bash: cmd, powershell: cmd });
|
|
641
1063
|
}
|
|
642
1064
|
const hookConfig = {
|
|
643
1065
|
version: 1,
|
|
@@ -647,13 +1069,13 @@ async function installCopilotHooks(baseDir, platformBase, skillsDir, hooksConfig
|
|
|
647
1069
|
};
|
|
648
1070
|
await ensureDir(hooksDir);
|
|
649
1071
|
await writeFile(hookFilePath, JSON.stringify(hookConfig, null, 2) + '\n', 'utf-8');
|
|
650
|
-
return {
|
|
1072
|
+
return { status: 'installed' };
|
|
651
1073
|
}
|
|
652
1074
|
/**
|
|
653
1075
|
* Kiro format:
|
|
654
1076
|
* Writes to .kiro/hooks/comet-phase-guard.kiro.hook as a JSON file.
|
|
655
1077
|
*/
|
|
656
|
-
async function installKiroHooks(baseDir, platformBase, skillsDir, hooksConfig) {
|
|
1078
|
+
async function installKiroHooks(baseDir, platformBase, skillsDir, hooksConfig, context) {
|
|
657
1079
|
const hooksDir = path.join(platformBase, 'hooks');
|
|
658
1080
|
for (const [scriptRelPath, config] of Object.entries(hooksConfig)) {
|
|
659
1081
|
const hookFileName = path.basename(scriptRelPath).replace(/\.mjs$/, '.kiro.hook');
|
|
@@ -671,42 +1093,71 @@ async function installKiroHooks(baseDir, platformBase, skillsDir, hooksConfig) {
|
|
|
671
1093
|
},
|
|
672
1094
|
then: {
|
|
673
1095
|
type: 'runCommand',
|
|
674
|
-
command: buildHookCommand(baseDir, skillsDir, scriptRelPath),
|
|
1096
|
+
command: buildHookCommand(baseDir, skillsDir, scriptRelPath, context),
|
|
675
1097
|
},
|
|
676
1098
|
};
|
|
677
1099
|
await ensureDir(hooksDir);
|
|
678
1100
|
await writeFile(hookFilePath, JSON.stringify(hookConfig, null, 2) + '\n', 'utf-8');
|
|
679
1101
|
}
|
|
680
|
-
|
|
1102
|
+
for (const legacyScript of LEGACY_HOOK_SCRIPTS) {
|
|
1103
|
+
const legacyFile = path.join(hooksDir, path.basename(legacyScript).replace(/\.mjs$/u, '.kiro.hook'));
|
|
1104
|
+
await rm(legacyFile, { force: true });
|
|
1105
|
+
}
|
|
1106
|
+
return { status: 'installed' };
|
|
681
1107
|
}
|
|
682
1108
|
function managedConfigFields(language = 'en') {
|
|
683
1109
|
const artifactLanguage = resolveArtifactLanguage(language);
|
|
684
|
-
|
|
1110
|
+
const commentLanguage = artifactLanguage.id === 'zh-CN' ? 'zh-CN' : 'en';
|
|
1111
|
+
const top = [
|
|
1112
|
+
{
|
|
1113
|
+
key: 'ambient_resume',
|
|
1114
|
+
def: 'true',
|
|
1115
|
+
comment: projectConfigComment('ambient_resume', commentLanguage),
|
|
1116
|
+
},
|
|
1117
|
+
];
|
|
1118
|
+
const classic = [
|
|
1119
|
+
{
|
|
1120
|
+
key: 'artifact_layout',
|
|
1121
|
+
def: 'legacy',
|
|
1122
|
+
comment: projectConfigComment('classic.artifact_layout', commentLanguage),
|
|
1123
|
+
},
|
|
685
1124
|
{
|
|
686
1125
|
key: 'language',
|
|
687
1126
|
def: artifactLanguage.id,
|
|
688
|
-
comment:
|
|
1127
|
+
comment: projectConfigComment('classic.language', commentLanguage),
|
|
1128
|
+
},
|
|
1129
|
+
{
|
|
1130
|
+
key: 'context_compression',
|
|
1131
|
+
def: 'off',
|
|
1132
|
+
comment: projectConfigComment('classic.context_compression', commentLanguage),
|
|
1133
|
+
},
|
|
1134
|
+
{
|
|
1135
|
+
key: 'review_mode',
|
|
1136
|
+
def: 'standard',
|
|
1137
|
+
comment: projectConfigComment('classic.review_mode', commentLanguage),
|
|
1138
|
+
},
|
|
1139
|
+
{
|
|
1140
|
+
key: 'auto_transition',
|
|
1141
|
+
def: 'true',
|
|
1142
|
+
comment: projectConfigComment('classic.auto_transition', commentLanguage),
|
|
1143
|
+
},
|
|
1144
|
+
];
|
|
1145
|
+
const native = [
|
|
1146
|
+
{
|
|
1147
|
+
key: 'clarification_mode',
|
|
1148
|
+
def: 'sequential',
|
|
1149
|
+
comment: projectConfigComment('native.clarification_mode', commentLanguage),
|
|
689
1150
|
},
|
|
690
|
-
{ key: 'context_compression', def: 'off', comment: '# context_compression: off | beta' },
|
|
691
|
-
{ key: 'review_mode', def: 'standard', comment: '# review_mode: off | standard | thorough' },
|
|
692
|
-
{ key: 'auto_transition', def: 'true', comment: '# auto_transition: true | false' },
|
|
693
1151
|
];
|
|
1152
|
+
return { top, native, classic };
|
|
694
1153
|
}
|
|
695
1154
|
const MANAGED_CONFIG_FIELDS = managedConfigFields();
|
|
696
1155
|
function getManagedConfigFields(language = 'en') {
|
|
697
1156
|
return language === 'en' ? MANAGED_CONFIG_FIELDS : managedConfigFields(language);
|
|
698
1157
|
}
|
|
699
|
-
function
|
|
700
|
-
if (!content.trim())
|
|
701
|
-
return {};
|
|
702
|
-
const doc = parseDocument(content, { uniqueKeys: false });
|
|
703
|
-
if (doc.errors.length > 0)
|
|
704
|
-
return {};
|
|
705
|
-
const js = doc.toJS();
|
|
706
|
-
if (!js || typeof js !== 'object' || Array.isArray(js))
|
|
707
|
-
return {};
|
|
1158
|
+
function projectConfigOverrides(value) {
|
|
708
1159
|
const out = {};
|
|
709
|
-
for (const [k, v] of Object.entries(
|
|
1160
|
+
for (const [k, v] of Object.entries(value)) {
|
|
710
1161
|
if (v === null || v === undefined)
|
|
711
1162
|
continue;
|
|
712
1163
|
if (typeof v === 'string' || typeof v === 'number' || typeof v === 'boolean') {
|
|
@@ -715,40 +1166,168 @@ function parseProjectConfigOverrides(content) {
|
|
|
715
1166
|
}
|
|
716
1167
|
return out;
|
|
717
1168
|
}
|
|
718
|
-
function
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
1169
|
+
function parseProjectConfigOverrides(content) {
|
|
1170
|
+
if (!content.trim())
|
|
1171
|
+
return {};
|
|
1172
|
+
return projectConfigOverrides(parseWorkflowProjectConfigDocument(content, { allowPartialProject: true }).value);
|
|
1173
|
+
}
|
|
1174
|
+
// Coerce the string forms captured by `parseProjectConfigOverrides` back into YAML scalars
|
|
1175
|
+
// so booleans render as bare true/false rather than quoted strings.
|
|
1176
|
+
function coerceConfigScalar(raw) {
|
|
1177
|
+
if (raw === 'true')
|
|
1178
|
+
return true;
|
|
1179
|
+
if (raw === 'false')
|
|
1180
|
+
return false;
|
|
1181
|
+
return raw;
|
|
1182
|
+
}
|
|
1183
|
+
// `language` is null when the caller has no definitive language selection to assert (e.g.
|
|
1184
|
+
// multiple platforms in the same scope disagree and no --language flag was given) — in that
|
|
1185
|
+
// case the existing config's language is preserved, falling back to 'en' only when absent.
|
|
1186
|
+
// A non-null language always overwrites the managed `classic.language` field: init/update
|
|
1187
|
+
// pass it specifically to persist the language the user just selected/installed.
|
|
1188
|
+
function renderProjectConfig(existing, language = null) {
|
|
1189
|
+
const resolvedLanguage = language ?? existing.language ?? 'en';
|
|
1190
|
+
const fields = getManagedConfigFields(resolvedLanguage);
|
|
1191
|
+
const managedKeys = new Set([
|
|
1192
|
+
...fields.top.map((f) => f.key),
|
|
1193
|
+
...fields.classic.map((f) => f.key),
|
|
1194
|
+
]);
|
|
1195
|
+
const root = {};
|
|
1196
|
+
for (const f of fields.top) {
|
|
1197
|
+
root[f.key] = coerceConfigScalar(existing[f.key] ?? f.def);
|
|
725
1198
|
}
|
|
726
1199
|
for (const [k, v] of Object.entries(existing)) {
|
|
727
|
-
if (!
|
|
728
|
-
|
|
1200
|
+
if (!managedKeys.has(k))
|
|
1201
|
+
root[k] = coerceConfigScalar(v);
|
|
729
1202
|
}
|
|
730
|
-
|
|
731
|
-
|
|
1203
|
+
const classicBlock = {};
|
|
1204
|
+
for (const f of fields.classic) {
|
|
1205
|
+
const value = f.key === 'language' ? resolvedLanguage : (existing[f.key] ?? f.def);
|
|
1206
|
+
classicBlock[f.key] = coerceConfigScalar(value);
|
|
1207
|
+
}
|
|
1208
|
+
root.classic = classicBlock;
|
|
1209
|
+
return renderStructuredProjectConfig(root, resolvedLanguage === 'zh-CN' ? 'zh-CN' : 'en');
|
|
732
1210
|
}
|
|
733
|
-
async function mergeProjectConfig(projectPath, language = '
|
|
734
|
-
const configPath = path.join(projectPath, '.comet', 'config.yaml');
|
|
1211
|
+
async function mergeProjectConfig(projectPath, language = null, artifactLayoutDefault = 'legacy', completeProjectConfig = false, enableClassicWorkflow = completeProjectConfig) {
|
|
735
1212
|
let existing = {};
|
|
736
|
-
|
|
737
|
-
|
|
1213
|
+
let parsedRoot = {};
|
|
1214
|
+
const snapshot = await readWorkflowProjectConfigSnapshot(projectPath, {
|
|
1215
|
+
allowPartialProject: true,
|
|
1216
|
+
});
|
|
1217
|
+
const parsed = snapshot.document;
|
|
1218
|
+
if (parsed) {
|
|
1219
|
+
parsedRoot = parsed.value;
|
|
1220
|
+
existing = projectConfigOverrides(parsedRoot);
|
|
1221
|
+
}
|
|
1222
|
+
// Preserve the full shared-parser value (including unknown extensions) plus
|
|
1223
|
+
// legacy top-level Classic fields pending migration.
|
|
1224
|
+
const root = { ...parsedRoot };
|
|
1225
|
+
if (completeProjectConfig) {
|
|
1226
|
+
root.schema = 'comet.project.v1';
|
|
1227
|
+
const inferredDefault = root.default_workflow === 'native' || root.default_workflow === 'classic'
|
|
1228
|
+
? root.default_workflow
|
|
1229
|
+
: root.native && typeof root.native === 'object' && !Array.isArray(root.native)
|
|
1230
|
+
? 'native'
|
|
1231
|
+
: 'classic';
|
|
1232
|
+
root.default_workflow = inferredDefault;
|
|
1233
|
+
const workflows = Array.isArray(root.workflows)
|
|
1234
|
+
? root.workflows.filter((workflow) => workflow === 'native' || workflow === 'classic')
|
|
1235
|
+
: [inferredDefault];
|
|
1236
|
+
if (enableClassicWorkflow && !workflows.includes('classic'))
|
|
1237
|
+
workflows.push('classic');
|
|
1238
|
+
root.workflows = workflows;
|
|
738
1239
|
}
|
|
739
|
-
|
|
740
|
-
|
|
1240
|
+
const prevClassic = root.classic && typeof root.classic === 'object' && !Array.isArray(root.classic)
|
|
1241
|
+
? { ...root.classic }
|
|
1242
|
+
: {};
|
|
1243
|
+
const prevNative = root.native && typeof root.native === 'object' && !Array.isArray(root.native)
|
|
1244
|
+
? { ...root.native }
|
|
1245
|
+
: null;
|
|
1246
|
+
const existingClassicLanguage = typeof prevClassic.language === 'string' ? prevClassic.language : undefined;
|
|
1247
|
+
const resolvedLanguage = language ?? existingClassicLanguage ?? existing.language ?? 'en';
|
|
1248
|
+
const fields = getManagedConfigFields(resolvedLanguage);
|
|
1249
|
+
// Top-level managed field (ambient_resume).
|
|
1250
|
+
for (const f of fields.top) {
|
|
1251
|
+
root[f.key] = coerceConfigScalar(existing[f.key] ?? f.def);
|
|
1252
|
+
}
|
|
1253
|
+
// Native settings are managed only when the project already has a Native block. This lets
|
|
1254
|
+
// update add new Native defaults without activating Native in Classic-only installations.
|
|
1255
|
+
if (prevNative) {
|
|
1256
|
+
const nativeBlock = { ...prevNative };
|
|
1257
|
+
for (const f of fields.native) {
|
|
1258
|
+
const value = nativeBlock[f.key] ?? f.def;
|
|
1259
|
+
if (f.key === 'clarification_mode' && value !== 'sequential' && value !== 'batch') {
|
|
1260
|
+
throw new Error('native.clarification_mode must be sequential or batch');
|
|
1261
|
+
}
|
|
1262
|
+
nativeBlock[f.key] = coerceConfigScalar(value);
|
|
1263
|
+
}
|
|
1264
|
+
if (nativeBlock.snapshot === undefined) {
|
|
1265
|
+
nativeBlock.snapshot = {
|
|
1266
|
+
include: ['**/*'],
|
|
1267
|
+
exclude: [],
|
|
1268
|
+
max_files: 10_000,
|
|
1269
|
+
max_total_bytes: 256 * 1024 * 1024,
|
|
1270
|
+
max_duration_ms: 60_000,
|
|
1271
|
+
};
|
|
1272
|
+
}
|
|
1273
|
+
root.native = nativeBlock;
|
|
1274
|
+
}
|
|
1275
|
+
// Classic block: preserve explicit new-format values and unknown extension fields, then migrate legacy top-level values,
|
|
1276
|
+
// then apply defaults. An explicit language argument still represents the caller's requested
|
|
1277
|
+
// install/update language and therefore overrides both stored forms.
|
|
1278
|
+
const shouldMergeClassic = !completeProjectConfig || enableClassicWorkflow || root.classic;
|
|
1279
|
+
if (shouldMergeClassic) {
|
|
1280
|
+
const classicBlock = { ...prevClassic };
|
|
1281
|
+
for (const f of fields.classic) {
|
|
1282
|
+
let value;
|
|
1283
|
+
if (f.key === 'language') {
|
|
1284
|
+
value = resolvedLanguage;
|
|
1285
|
+
}
|
|
1286
|
+
else if (f.key === 'artifact_layout') {
|
|
1287
|
+
value = prevClassic[f.key] ?? artifactLayoutDefault;
|
|
1288
|
+
}
|
|
1289
|
+
else {
|
|
1290
|
+
const legacyTop = root[f.key];
|
|
1291
|
+
if (prevClassic[f.key] !== undefined)
|
|
1292
|
+
value = prevClassic[f.key];
|
|
1293
|
+
else if (legacyTop !== undefined)
|
|
1294
|
+
value = legacyTop;
|
|
1295
|
+
else
|
|
1296
|
+
value = f.def;
|
|
1297
|
+
}
|
|
1298
|
+
classicBlock[f.key] = coerceConfigScalar(value);
|
|
1299
|
+
}
|
|
1300
|
+
root.classic = classicBlock;
|
|
1301
|
+
// Remove migrated legacy top-level Classic fields so they don't linger at the root.
|
|
1302
|
+
for (const f of fields.classic) {
|
|
1303
|
+
delete root[f.key];
|
|
1304
|
+
}
|
|
1305
|
+
}
|
|
1306
|
+
const output = renderStructuredProjectConfig(root, resolvedLanguage === 'zh-CN' ? 'zh-CN' : 'en');
|
|
1307
|
+
parseWorkflowProjectConfigDocument(output, { allowPartialProject: true });
|
|
1308
|
+
await writeWorkflowProjectConfigSource(projectPath, output, {
|
|
1309
|
+
allowPartialProject: !completeProjectConfig,
|
|
1310
|
+
expectedIdentity: snapshot.identity,
|
|
1311
|
+
});
|
|
741
1312
|
}
|
|
742
|
-
async function createWorkingDirs(projectPath, language = 'en') {
|
|
1313
|
+
async function createWorkingDirs(projectPath, language = 'en', artifactLayout = 'docs', initializationPermit) {
|
|
1314
|
+
const layout = await assertClassicLayoutInitializationSafe(projectPath, artifactLayout, initializationPermit);
|
|
743
1315
|
const dirs = [
|
|
744
|
-
|
|
745
|
-
|
|
1316
|
+
layout.archiveDir,
|
|
1317
|
+
layout.specsDir,
|
|
1318
|
+
layout.superpowersSpecsDir,
|
|
1319
|
+
layout.superpowersPlansDir,
|
|
1320
|
+
layout.superpowersReportsDir,
|
|
746
1321
|
path.join(projectPath, '.comet'),
|
|
747
1322
|
];
|
|
748
1323
|
for (const dir of dirs) {
|
|
749
|
-
|
|
1324
|
+
const relative = path.relative(layout.projectRoot, dir).replaceAll('\\', '/');
|
|
1325
|
+
await ensureProtectedProjectDirectory(layout.projectRoot, relative, {
|
|
1326
|
+
label: `Classic working directory ${relative}`,
|
|
1327
|
+
});
|
|
750
1328
|
}
|
|
751
|
-
await
|
|
1329
|
+
await checkpointClassicLayoutInitialization(projectPath, layout.initializationPermit);
|
|
1330
|
+
await installCometProjectInstructions(projectPath, language === 'zh-CN' ? 'zh' : 'en');
|
|
752
1331
|
}
|
|
753
|
-
export { copyCometSkillsForPlatform, copyCometRulesForPlatform, installCometHooksForPlatform, readManifest, getManagedSkillPaths, getManifestSkills, getUserFacingSkillNames, createWorkingDirs, getAssetsDir, computeRuleDestPath, formatRuleContent, isManagedHookCommand, planSkillDirectoryCopy, mergeProjectConfig, parseProjectConfigOverrides, renderProjectConfig, getCentralSkillsDir, installSkillsAsSymlink, };
|
|
1332
|
+
export { copyCometSkillsForPlatform, copyCometRulesForPlatform, installCometHooksForPlatform, readManifest, getManagedSkillPaths, getManagedSkillPathsForSelection, getManifestSkills, getUserFacingSkillNames, createWorkingDirs, getAssetsDir, computeRuleDestPath, formatRuleContent, isManagedHookCommand, buildHookCommand, removeManagedHooksFromJsonFile, planSkillDirectoryCopy, mergeProjectConfig, parseProjectConfigOverrides, renderProjectConfig, getCentralSkillsDir, installSkillsAsSymlink, prepareManagedSkillCopyTarget, prepareNativeSkillInstallTarget, };
|
|
754
1333
|
//# sourceMappingURL=platform-install.js.map
|