@rpamis/comet 0.4.0-beta.6 → 0.4.0-beta.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +209 -74
- package/assets/manifest.json +14 -5
- package/assets/skills/comet/SKILL.md +17 -282
- package/assets/skills/comet/reference/comet-yaml-fields.md +1 -1
- package/assets/skills/comet/reference/context-recovery.md +3 -3
- package/assets/skills/comet/reference/intent-frame.md +2 -2
- package/assets/skills/comet/reference/scripts.md +2 -2
- package/assets/skills/comet/rules/comet-workflow-guard.en.md +32 -0
- package/assets/skills/comet/rules/comet-workflow-guard.md +32 -0
- package/assets/skills/comet/scripts/comet-entry-runtime.mjs +7834 -0
- package/assets/skills/comet/scripts/comet-hook-router.mjs +10307 -0
- package/assets/skills/comet/scripts/comet-runtime.mjs +612 -499
- package/assets/skills/comet-any/SKILL.md +4 -4
- package/assets/skills/comet-any/reference/authoring-subagents.md +1 -1
- package/assets/skills/comet-any/reference/bundle-authoring.md +1 -1
- package/assets/skills/comet-any/reference/subagents/reference-author.md +1 -1
- package/assets/skills/comet-any/reference/subagents/script-author.md +1 -1
- package/assets/skills/comet-any/reference/subagents/skill-core-author.md +1 -1
- package/assets/skills/comet-any/reference/subagents/skill-reviewer.md +2 -2
- package/assets/skills/comet-any/reference/subagents/workflow-entry-author.md +3 -3
- package/assets/skills/comet-archive/SKILL.md +1 -2
- package/assets/skills/comet-build/SKILL.md +1 -1
- package/assets/skills/comet-classic/SKILL.md +293 -0
- package/assets/skills/comet-design/SKILL.md +1 -1
- package/assets/skills/comet-hotfix/SKILL.md +4 -4
- package/assets/skills/comet-native/SKILL.md +257 -0
- package/assets/skills/comet-native/reference/artifacts.md +204 -0
- package/assets/skills/comet-native/reference/commands.md +118 -0
- package/assets/skills/comet-native/reference/recovery.md +143 -0
- package/assets/skills/comet-native/scripts/comet-native-hook-guard.mjs +4 -0
- package/assets/skills/comet-native/scripts/comet-native-runtime.mjs +28898 -0
- package/assets/skills/comet-open/SKILL.md +4 -4
- package/assets/skills/comet-tweak/SKILL.md +7 -7
- package/assets/skills-zh/comet/SKILL.md +17 -270
- package/assets/skills-zh/comet/reference/comet-yaml-fields.md +1 -1
- package/assets/skills-zh/comet/reference/context-recovery.md +3 -3
- package/assets/skills-zh/comet/reference/intent-frame.md +2 -2
- package/assets/skills-zh/comet/reference/scripts.md +2 -2
- package/assets/skills-zh/comet-any/SKILL.md +4 -4
- package/assets/skills-zh/comet-any/reference/authoring-subagents.md +1 -1
- package/assets/skills-zh/comet-any/reference/bundle-authoring.md +1 -1
- package/assets/skills-zh/comet-any/reference/subagents/reference-author.md +1 -1
- package/assets/skills-zh/comet-any/reference/subagents/script-author.md +1 -1
- package/assets/skills-zh/comet-any/reference/subagents/skill-core-author.md +1 -1
- package/assets/skills-zh/comet-any/reference/subagents/skill-reviewer.md +2 -2
- package/assets/skills-zh/comet-any/reference/subagents/workflow-entry-author.md +3 -3
- package/assets/skills-zh/comet-archive/SKILL.md +1 -2
- package/assets/skills-zh/comet-build/SKILL.md +1 -1
- package/assets/skills-zh/comet-classic/SKILL.md +281 -0
- package/assets/skills-zh/comet-design/SKILL.md +1 -1
- package/assets/skills-zh/comet-hotfix/SKILL.md +4 -4
- package/assets/skills-zh/comet-native/SKILL.md +257 -0
- package/assets/skills-zh/comet-native/reference/artifacts.md +206 -0
- package/assets/skills-zh/comet-native/reference/commands.md +118 -0
- package/assets/skills-zh/comet-native/reference/recovery.md +143 -0
- package/assets/skills-zh/comet-open/SKILL.md +4 -4
- package/assets/skills-zh/comet-tweak/SKILL.md +7 -7
- package/dist/app/cli/index.js +59 -13
- package/dist/app/cli/index.js.map +1 -1
- package/dist/app/commands/command-result.d.ts +6 -0
- package/dist/app/commands/command-result.d.ts.map +1 -0
- package/dist/app/commands/command-result.js +4 -0
- package/dist/app/commands/command-result.js.map +1 -0
- package/dist/app/commands/doctor.d.ts +1 -0
- package/dist/app/commands/doctor.d.ts.map +1 -1
- package/dist/app/commands/doctor.js +201 -26
- package/dist/app/commands/doctor.js.map +1 -1
- package/dist/app/commands/eval.d.ts +3 -1
- package/dist/app/commands/eval.d.ts.map +1 -1
- package/dist/app/commands/eval.js +17 -7
- package/dist/app/commands/eval.js.map +1 -1
- package/dist/app/commands/i18n.d.ts +1 -1
- package/dist/app/commands/i18n.d.ts.map +1 -1
- package/dist/app/commands/i18n.js +6 -2
- package/dist/app/commands/i18n.js.map +1 -1
- package/dist/app/commands/init.d.ts +10 -2
- package/dist/app/commands/init.d.ts.map +1 -1
- package/dist/app/commands/init.js +331 -50
- package/dist/app/commands/init.js.map +1 -1
- package/dist/app/commands/native.d.ts +2 -0
- package/dist/app/commands/native.d.ts.map +1 -0
- package/dist/app/commands/native.js +10 -0
- package/dist/app/commands/native.js.map +1 -0
- package/dist/app/commands/project-scope-selection.d.ts.map +1 -1
- package/dist/app/commands/project-scope-selection.js +2 -0
- package/dist/app/commands/project-scope-selection.js.map +1 -1
- package/dist/app/commands/resume-probe.d.ts.map +1 -1
- package/dist/app/commands/resume-probe.js +8 -2
- package/dist/app/commands/resume-probe.js.map +1 -1
- package/dist/app/commands/status.d.ts +0 -32
- package/dist/app/commands/status.d.ts.map +1 -1
- package/dist/app/commands/status.js +44 -177
- package/dist/app/commands/status.js.map +1 -1
- package/dist/app/commands/update.d.ts +20 -4
- package/dist/app/commands/update.d.ts.map +1 -1
- package/dist/app/commands/update.js +698 -90
- package/dist/app/commands/update.js.map +1 -1
- package/dist/app/commands/workflow.d.ts +6 -0
- package/dist/app/commands/workflow.d.ts.map +1 -0
- package/dist/app/commands/workflow.js +11 -0
- package/dist/app/commands/workflow.js.map +1 -0
- package/dist/config/repository-layout.json +21 -1
- package/dist/domains/comet-classic/classic-archive.d.ts.map +1 -1
- package/dist/domains/comet-classic/classic-archive.js +3 -0
- package/dist/domains/comet-classic/classic-archive.js.map +1 -1
- package/dist/domains/comet-classic/classic-current-change.d.ts +3 -5
- package/dist/domains/comet-classic/classic-current-change.d.ts.map +1 -1
- package/dist/domains/comet-classic/classic-current-change.js +31 -57
- package/dist/domains/comet-classic/classic-current-change.js.map +1 -1
- package/dist/domains/comet-classic/classic-hook-guard.d.ts +9 -0
- package/dist/domains/comet-classic/classic-hook-guard.d.ts.map +1 -1
- package/dist/domains/comet-classic/classic-hook-guard.js +84 -11
- package/dist/domains/comet-classic/classic-hook-guard.js.map +1 -1
- package/dist/domains/comet-classic/classic-project-config.d.ts.map +1 -1
- package/dist/domains/comet-classic/classic-project-config.js +12 -8
- package/dist/domains/comet-classic/classic-project-config.js.map +1 -1
- package/dist/domains/comet-classic/classic-runtime-run.d.ts.map +1 -1
- package/dist/domains/comet-classic/classic-runtime-run.js +9 -1
- package/dist/domains/comet-classic/classic-runtime-run.js.map +1 -1
- package/dist/domains/comet-entry/current-selection-repair.d.ts +17 -0
- package/dist/domains/comet-entry/current-selection-repair.d.ts.map +1 -0
- package/dist/domains/comet-entry/current-selection-repair.js +19 -0
- package/dist/domains/comet-entry/current-selection-repair.js.map +1 -0
- package/dist/domains/comet-entry/current-selection.d.ts +28 -0
- package/dist/domains/comet-entry/current-selection.d.ts.map +1 -0
- package/dist/domains/comet-entry/current-selection.js +116 -0
- package/dist/domains/comet-entry/current-selection.js.map +1 -0
- package/dist/domains/comet-entry/entry-runtime-entry.d.ts +2 -0
- package/dist/domains/comet-entry/entry-runtime-entry.d.ts.map +1 -0
- package/dist/domains/comet-entry/entry-runtime-entry.js +3 -0
- package/dist/domains/comet-entry/entry-runtime-entry.js.map +1 -0
- package/dist/domains/comet-entry/entry-runtime.d.ts +7 -0
- package/dist/domains/comet-entry/entry-runtime.d.ts.map +1 -0
- package/dist/domains/comet-entry/entry-runtime.js +55 -0
- package/dist/domains/comet-entry/entry-runtime.js.map +1 -0
- package/dist/domains/comet-entry/hook-adapter.d.ts +6 -0
- package/dist/domains/comet-entry/hook-adapter.d.ts.map +1 -0
- package/dist/domains/comet-entry/hook-adapter.js +202 -0
- package/dist/domains/comet-entry/hook-adapter.js.map +1 -0
- package/dist/domains/comet-entry/hook-router-entry.d.ts +8 -0
- package/dist/domains/comet-entry/hook-router-entry.d.ts.map +1 -0
- package/dist/domains/comet-entry/hook-router-entry.js +92 -0
- package/dist/domains/comet-entry/hook-router-entry.js.map +1 -0
- package/dist/domains/comet-entry/hook-router.d.ts +32 -0
- package/dist/domains/comet-entry/hook-router.d.ts.map +1 -0
- package/dist/domains/comet-entry/hook-router.js +133 -0
- package/dist/domains/comet-entry/hook-router.js.map +1 -0
- package/dist/domains/comet-entry/hook-types.d.ts +20 -0
- package/dist/domains/comet-entry/hook-types.d.ts.map +1 -0
- package/dist/domains/comet-entry/hook-types.js +2 -0
- package/dist/domains/comet-entry/hook-types.js.map +1 -0
- package/dist/domains/comet-entry/init-workflow.d.ts +16 -0
- package/dist/domains/comet-entry/init-workflow.d.ts.map +1 -0
- package/dist/domains/comet-entry/init-workflow.js +103 -0
- package/dist/domains/comet-entry/init-workflow.js.map +1 -0
- package/dist/domains/comet-entry/project-status.d.ts +3 -0
- package/dist/domains/comet-entry/project-status.d.ts.map +1 -0
- package/dist/domains/comet-entry/project-status.js +222 -0
- package/dist/domains/comet-entry/project-status.js.map +1 -0
- package/dist/domains/comet-entry/resolve-entry.d.ts +3 -0
- package/dist/domains/comet-entry/resolve-entry.d.ts.map +1 -0
- package/dist/domains/comet-entry/resolve-entry.js +22 -0
- package/dist/domains/comet-entry/resolve-entry.js.map +1 -0
- package/dist/domains/comet-entry/resume-probe.d.ts +34 -0
- package/dist/domains/comet-entry/resume-probe.d.ts.map +1 -0
- package/dist/domains/comet-entry/resume-probe.js +458 -0
- package/dist/domains/comet-entry/resume-probe.js.map +1 -0
- package/dist/domains/comet-entry/types.d.ts +59 -0
- package/dist/domains/comet-entry/types.d.ts.map +1 -0
- package/dist/domains/comet-entry/types.js +2 -0
- package/dist/domains/comet-entry/types.js.map +1 -0
- package/dist/domains/comet-entry/workflow-resolution.d.ts +8 -0
- package/dist/domains/comet-entry/workflow-resolution.d.ts.map +1 -0
- package/dist/domains/comet-entry/workflow-resolution.js +16 -0
- package/dist/domains/comet-entry/workflow-resolution.js.map +1 -0
- package/dist/domains/comet-native/index.d.ts +35 -0
- package/dist/domains/comet-native/index.d.ts.map +1 -0
- package/dist/domains/comet-native/index.js +35 -0
- package/dist/domains/comet-native/index.js.map +1 -0
- package/dist/domains/comet-native/native-acceptance.d.ts +42 -0
- package/dist/domains/comet-native/native-acceptance.d.ts.map +1 -0
- package/dist/domains/comet-native/native-acceptance.js +503 -0
- package/dist/domains/comet-native/native-acceptance.js.map +1 -0
- package/dist/domains/comet-native/native-archive-content.d.ts +26 -0
- package/dist/domains/comet-native/native-archive-content.d.ts.map +1 -0
- package/dist/domains/comet-native/native-archive-content.js +159 -0
- package/dist/domains/comet-native/native-archive-content.js.map +1 -0
- package/dist/domains/comet-native/native-archive-inspection.d.ts +9 -0
- package/dist/domains/comet-native/native-archive-inspection.d.ts.map +1 -0
- package/dist/domains/comet-native/native-archive-inspection.js +94 -0
- package/dist/domains/comet-native/native-archive-inspection.js.map +1 -0
- package/dist/domains/comet-native/native-archive-preflight.d.ts +52 -0
- package/dist/domains/comet-native/native-archive-preflight.d.ts.map +1 -0
- package/dist/domains/comet-native/native-archive-preflight.js +214 -0
- package/dist/domains/comet-native/native-archive-preflight.js.map +1 -0
- package/dist/domains/comet-native/native-archive-transaction.d.ts +19 -0
- package/dist/domains/comet-native/native-archive-transaction.d.ts.map +1 -0
- package/dist/domains/comet-native/native-archive-transaction.js +1181 -0
- package/dist/domains/comet-native/native-archive-transaction.js.map +1 -0
- package/dist/domains/comet-native/native-archive.d.ts +36 -0
- package/dist/domains/comet-native/native-archive.d.ts.map +1 -0
- package/dist/domains/comet-native/native-archive.js +403 -0
- package/dist/domains/comet-native/native-archive.js.map +1 -0
- package/dist/domains/comet-native/native-artifacts.d.ts +10 -0
- package/dist/domains/comet-native/native-artifacts.d.ts.map +1 -0
- package/dist/domains/comet-native/native-artifacts.js +204 -0
- package/dist/domains/comet-native/native-artifacts.js.map +1 -0
- package/dist/domains/comet-native/native-atomic-file.d.ts +10 -0
- package/dist/domains/comet-native/native-atomic-file.d.ts.map +1 -0
- package/dist/domains/comet-native/native-atomic-file.js +175 -0
- package/dist/domains/comet-native/native-atomic-file.js.map +1 -0
- package/dist/domains/comet-native/native-bounded-file.d.ts +19 -0
- package/dist/domains/comet-native/native-bounded-file.d.ts.map +1 -0
- package/dist/domains/comet-native/native-bounded-file.js +180 -0
- package/dist/domains/comet-native/native-bounded-file.js.map +1 -0
- package/dist/domains/comet-native/native-build-evidence.d.ts +42 -0
- package/dist/domains/comet-native/native-build-evidence.d.ts.map +1 -0
- package/dist/domains/comet-native/native-build-evidence.js +257 -0
- package/dist/domains/comet-native/native-build-evidence.js.map +1 -0
- package/dist/domains/comet-native/native-canonical-hash.d.ts +10 -0
- package/dist/domains/comet-native/native-canonical-hash.d.ts.map +1 -0
- package/dist/domains/comet-native/native-canonical-hash.js +100 -0
- package/dist/domains/comet-native/native-canonical-hash.js.map +1 -0
- package/dist/domains/comet-native/native-change-recovery.d.ts +11 -0
- package/dist/domains/comet-native/native-change-recovery.d.ts.map +1 -0
- package/dist/domains/comet-native/native-change-recovery.js +15 -0
- package/dist/domains/comet-native/native-change-recovery.js.map +1 -0
- package/dist/domains/comet-native/native-change.d.ts +61 -0
- package/dist/domains/comet-native/native-change.d.ts.map +1 -0
- package/dist/domains/comet-native/native-change.js +696 -0
- package/dist/domains/comet-native/native-change.js.map +1 -0
- package/dist/domains/comet-native/native-check-receipt-model.d.ts +63 -0
- package/dist/domains/comet-native/native-check-receipt-model.d.ts.map +1 -0
- package/dist/domains/comet-native/native-check-receipt-model.js +347 -0
- package/dist/domains/comet-native/native-check-receipt-model.js.map +1 -0
- package/dist/domains/comet-native/native-check-receipt-storage.d.ts +10 -0
- package/dist/domains/comet-native/native-check-receipt-storage.d.ts.map +1 -0
- package/dist/domains/comet-native/native-check-receipt-storage.js +196 -0
- package/dist/domains/comet-native/native-check-receipt-storage.js.map +1 -0
- package/dist/domains/comet-native/native-check-receipt.d.ts +19 -0
- package/dist/domains/comet-native/native-check-receipt.d.ts.map +1 -0
- package/dist/domains/comet-native/native-check-receipt.js +446 -0
- package/dist/domains/comet-native/native-check-receipt.js.map +1 -0
- package/dist/domains/comet-native/native-check.d.ts +18 -0
- package/dist/domains/comet-native/native-check.d.ts.map +1 -0
- package/dist/domains/comet-native/native-check.js +29 -0
- package/dist/domains/comet-native/native-check.js.map +1 -0
- package/dist/domains/comet-native/native-checkpoint-journal.d.ts +13 -0
- package/dist/domains/comet-native/native-checkpoint-journal.d.ts.map +1 -0
- package/dist/domains/comet-native/native-checkpoint-journal.js +53 -0
- package/dist/domains/comet-native/native-checkpoint-journal.js.map +1 -0
- package/dist/domains/comet-native/native-checkpoint-storage.d.ts +43 -0
- package/dist/domains/comet-native/native-checkpoint-storage.d.ts.map +1 -0
- package/dist/domains/comet-native/native-checkpoint-storage.js +487 -0
- package/dist/domains/comet-native/native-checkpoint-storage.js.map +1 -0
- package/dist/domains/comet-native/native-cli-entry.d.ts +2 -0
- package/dist/domains/comet-native/native-cli-entry.d.ts.map +1 -0
- package/dist/domains/comet-native/native-cli-entry.js +18 -0
- package/dist/domains/comet-native/native-cli-entry.js.map +1 -0
- package/dist/domains/comet-native/native-cli.d.ts +7 -0
- package/dist/domains/comet-native/native-cli.d.ts.map +1 -0
- package/dist/domains/comet-native/native-cli.js +642 -0
- package/dist/domains/comet-native/native-cli.js.map +1 -0
- package/dist/domains/comet-native/native-config.d.ts +15 -0
- package/dist/domains/comet-native/native-config.d.ts.map +1 -0
- package/dist/domains/comet-native/native-config.js +281 -0
- package/dist/domains/comet-native/native-config.js.map +1 -0
- package/dist/domains/comet-native/native-conflict-inspection.d.ts +17 -0
- package/dist/domains/comet-native/native-conflict-inspection.d.ts.map +1 -0
- package/dist/domains/comet-native/native-conflict-inspection.js +90 -0
- package/dist/domains/comet-native/native-conflict-inspection.js.map +1 -0
- package/dist/domains/comet-native/native-conflict-radar.d.ts +75 -0
- package/dist/domains/comet-native/native-conflict-radar.d.ts.map +1 -0
- package/dist/domains/comet-native/native-conflict-radar.js +326 -0
- package/dist/domains/comet-native/native-conflict-radar.js.map +1 -0
- package/dist/domains/comet-native/native-continuation.d.ts +9 -0
- package/dist/domains/comet-native/native-continuation.d.ts.map +1 -0
- package/dist/domains/comet-native/native-continuation.js +146 -0
- package/dist/domains/comet-native/native-continuation.js.map +1 -0
- package/dist/domains/comet-native/native-contract-files.d.ts +24 -0
- package/dist/domains/comet-native/native-contract-files.d.ts.map +1 -0
- package/dist/domains/comet-native/native-contract-files.js +66 -0
- package/dist/domains/comet-native/native-contract-files.js.map +1 -0
- package/dist/domains/comet-native/native-contract.d.ts +41 -0
- package/dist/domains/comet-native/native-contract.d.ts.map +1 -0
- package/dist/domains/comet-native/native-contract.js +141 -0
- package/dist/domains/comet-native/native-contract.js.map +1 -0
- package/dist/domains/comet-native/native-diagnostics.d.ts +18 -0
- package/dist/domains/comet-native/native-diagnostics.d.ts.map +1 -0
- package/dist/domains/comet-native/native-diagnostics.js +522 -0
- package/dist/domains/comet-native/native-diagnostics.js.map +1 -0
- package/dist/domains/comet-native/native-doctor.d.ts +12 -0
- package/dist/domains/comet-native/native-doctor.d.ts.map +1 -0
- package/dist/domains/comet-native/native-doctor.js +768 -0
- package/dist/domains/comet-native/native-doctor.js.map +1 -0
- package/dist/domains/comet-native/native-evidence-retention.d.ts +37 -0
- package/dist/domains/comet-native/native-evidence-retention.d.ts.map +1 -0
- package/dist/domains/comet-native/native-evidence-retention.js +885 -0
- package/dist/domains/comet-native/native-evidence-retention.js.map +1 -0
- package/dist/domains/comet-native/native-evidence-storage.d.ts +41 -0
- package/dist/domains/comet-native/native-evidence-storage.d.ts.map +1 -0
- package/dist/domains/comet-native/native-evidence-storage.js +351 -0
- package/dist/domains/comet-native/native-evidence-storage.js.map +1 -0
- package/dist/domains/comet-native/native-findings.d.ts +8 -0
- package/dist/domains/comet-native/native-findings.d.ts.map +1 -0
- package/dist/domains/comet-native/native-findings.js +238 -0
- package/dist/domains/comet-native/native-findings.js.map +1 -0
- package/dist/domains/comet-native/native-guards.d.ts +7 -0
- package/dist/domains/comet-native/native-guards.d.ts.map +1 -0
- package/dist/domains/comet-native/native-guards.js +126 -0
- package/dist/domains/comet-native/native-guards.js.map +1 -0
- package/dist/domains/comet-native/native-hash.d.ts +3 -0
- package/dist/domains/comet-native/native-hash.d.ts.map +1 -0
- package/dist/domains/comet-native/native-hash.js +12 -0
- package/dist/domains/comet-native/native-hash.js.map +1 -0
- package/dist/domains/comet-native/native-hook-guard.d.ts +17 -0
- package/dist/domains/comet-native/native-hook-guard.d.ts.map +1 -0
- package/dist/domains/comet-native/native-hook-guard.js +154 -0
- package/dist/domains/comet-native/native-hook-guard.js.map +1 -0
- package/dist/domains/comet-native/native-lock.d.ts +47 -0
- package/dist/domains/comet-native/native-lock.d.ts.map +1 -0
- package/dist/domains/comet-native/native-lock.js +395 -0
- package/dist/domains/comet-native/native-lock.js.map +1 -0
- package/dist/domains/comet-native/native-mutation-lock.d.ts +5 -0
- package/dist/domains/comet-native/native-mutation-lock.d.ts.map +1 -0
- package/dist/domains/comet-native/native-mutation-lock.js +66 -0
- package/dist/domains/comet-native/native-mutation-lock.js.map +1 -0
- package/dist/domains/comet-native/native-paths.d.ts +10 -0
- package/dist/domains/comet-native/native-paths.d.ts.map +1 -0
- package/dist/domains/comet-native/native-paths.js +171 -0
- package/dist/domains/comet-native/native-paths.js.map +1 -0
- package/dist/domains/comet-native/native-progress-checkpoint.d.ts +13 -0
- package/dist/domains/comet-native/native-progress-checkpoint.d.ts.map +1 -0
- package/dist/domains/comet-native/native-progress-checkpoint.js +104 -0
- package/dist/domains/comet-native/native-progress-checkpoint.js.map +1 -0
- package/dist/domains/comet-native/native-protected-file.d.ts +113 -0
- package/dist/domains/comet-native/native-protected-file.d.ts.map +1 -0
- package/dist/domains/comet-native/native-protected-file.js +509 -0
- package/dist/domains/comet-native/native-protected-file.js.map +1 -0
- package/dist/domains/comet-native/native-redaction.d.ts +2 -0
- package/dist/domains/comet-native/native-redaction.d.ts.map +1 -0
- package/dist/domains/comet-native/native-redaction.js +18 -0
- package/dist/domains/comet-native/native-redaction.js.map +1 -0
- package/dist/domains/comet-native/native-repair-integration.d.ts +42 -0
- package/dist/domains/comet-native/native-repair-integration.d.ts.map +1 -0
- package/dist/domains/comet-native/native-repair-integration.js +184 -0
- package/dist/domains/comet-native/native-repair-integration.js.map +1 -0
- package/dist/domains/comet-native/native-repair-runtime.d.ts +73 -0
- package/dist/domains/comet-native/native-repair-runtime.d.ts.map +1 -0
- package/dist/domains/comet-native/native-repair-runtime.js +509 -0
- package/dist/domains/comet-native/native-repair-runtime.js.map +1 -0
- package/dist/domains/comet-native/native-repair-stagnation.d.ts +85 -0
- package/dist/domains/comet-native/native-repair-stagnation.d.ts.map +1 -0
- package/dist/domains/comet-native/native-repair-stagnation.js +256 -0
- package/dist/domains/comet-native/native-repair-stagnation.js.map +1 -0
- package/dist/domains/comet-native/native-resume-view.d.ts +14 -0
- package/dist/domains/comet-native/native-resume-view.d.ts.map +1 -0
- package/dist/domains/comet-native/native-resume-view.js +105 -0
- package/dist/domains/comet-native/native-resume-view.js.map +1 -0
- package/dist/domains/comet-native/native-revision.d.ts +20 -0
- package/dist/domains/comet-native/native-revision.d.ts.map +1 -0
- package/dist/domains/comet-native/native-revision.js +32 -0
- package/dist/domains/comet-native/native-revision.js.map +1 -0
- package/dist/domains/comet-native/native-root-move.d.ts +20 -0
- package/dist/domains/comet-native/native-root-move.d.ts.map +1 -0
- package/dist/domains/comet-native/native-root-move.js +812 -0
- package/dist/domains/comet-native/native-root-move.js.map +1 -0
- package/dist/domains/comet-native/native-run-consistency.d.ts +3 -0
- package/dist/domains/comet-native/native-run-consistency.d.ts.map +1 -0
- package/dist/domains/comet-native/native-run-consistency.js +136 -0
- package/dist/domains/comet-native/native-run-consistency.js.map +1 -0
- package/dist/domains/comet-native/native-run-store.d.ts +41 -0
- package/dist/domains/comet-native/native-run-store.d.ts.map +1 -0
- package/dist/domains/comet-native/native-run-store.js +451 -0
- package/dist/domains/comet-native/native-run-store.js.map +1 -0
- package/dist/domains/comet-native/native-runtime-package.d.ts +16 -0
- package/dist/domains/comet-native/native-runtime-package.d.ts.map +1 -0
- package/dist/domains/comet-native/native-runtime-package.js +72 -0
- package/dist/domains/comet-native/native-runtime-package.js.map +1 -0
- package/dist/domains/comet-native/native-schema-migration.d.ts +11 -0
- package/dist/domains/comet-native/native-schema-migration.d.ts.map +1 -0
- package/dist/domains/comet-native/native-schema-migration.js +899 -0
- package/dist/domains/comet-native/native-schema-migration.js.map +1 -0
- package/dist/domains/comet-native/native-selection.d.ts +12 -0
- package/dist/domains/comet-native/native-selection.d.ts.map +1 -0
- package/dist/domains/comet-native/native-selection.js +52 -0
- package/dist/domains/comet-native/native-selection.js.map +1 -0
- package/dist/domains/comet-native/native-sensitive-paths.d.ts +7 -0
- package/dist/domains/comet-native/native-sensitive-paths.d.ts.map +1 -0
- package/dist/domains/comet-native/native-sensitive-paths.js +69 -0
- package/dist/domains/comet-native/native-sensitive-paths.js.map +1 -0
- package/dist/domains/comet-native/native-snapshot.d.ts +74 -0
- package/dist/domains/comet-native/native-snapshot.d.ts.map +1 -0
- package/dist/domains/comet-native/native-snapshot.js +2308 -0
- package/dist/domains/comet-native/native-snapshot.js.map +1 -0
- package/dist/domains/comet-native/native-specs.d.ts +12 -0
- package/dist/domains/comet-native/native-specs.d.ts.map +1 -0
- package/dist/domains/comet-native/native-specs.js +270 -0
- package/dist/domains/comet-native/native-specs.js.map +1 -0
- package/dist/domains/comet-native/native-trajectory-limits.d.ts +7 -0
- package/dist/domains/comet-native/native-trajectory-limits.d.ts.map +1 -0
- package/dist/domains/comet-native/native-trajectory-limits.js +13 -0
- package/dist/domains/comet-native/native-trajectory-limits.js.map +1 -0
- package/dist/domains/comet-native/native-trajectory-recovery.d.ts +37 -0
- package/dist/domains/comet-native/native-trajectory-recovery.d.ts.map +1 -0
- package/dist/domains/comet-native/native-trajectory-recovery.js +133 -0
- package/dist/domains/comet-native/native-trajectory-recovery.js.map +1 -0
- package/dist/domains/comet-native/native-trajectory.d.ts +16 -0
- package/dist/domains/comet-native/native-trajectory.d.ts.map +1 -0
- package/dist/domains/comet-native/native-trajectory.js +27 -0
- package/dist/domains/comet-native/native-trajectory.js.map +1 -0
- package/dist/domains/comet-native/native-transaction.d.ts +45 -0
- package/dist/domains/comet-native/native-transaction.d.ts.map +1 -0
- package/dist/domains/comet-native/native-transaction.js +846 -0
- package/dist/domains/comet-native/native-transaction.js.map +1 -0
- package/dist/domains/comet-native/native-transition-evidence.d.ts +4 -0
- package/dist/domains/comet-native/native-transition-evidence.d.ts.map +1 -0
- package/dist/domains/comet-native/native-transition-evidence.js +20 -0
- package/dist/domains/comet-native/native-transition-evidence.js.map +1 -0
- package/dist/domains/comet-native/native-transition-journal.d.ts +30 -0
- package/dist/domains/comet-native/native-transition-journal.d.ts.map +1 -0
- package/dist/domains/comet-native/native-transition-journal.js +819 -0
- package/dist/domains/comet-native/native-transition-journal.js.map +1 -0
- package/dist/domains/comet-native/native-transitions.d.ts +13 -0
- package/dist/domains/comet-native/native-transitions.d.ts.map +1 -0
- package/dist/domains/comet-native/native-transitions.js +632 -0
- package/dist/domains/comet-native/native-transitions.js.map +1 -0
- package/dist/domains/comet-native/native-types.d.ts +547 -0
- package/dist/domains/comet-native/native-types.d.ts.map +1 -0
- package/dist/domains/comet-native/native-types.js +8 -0
- package/dist/domains/comet-native/native-types.js.map +1 -0
- package/dist/domains/comet-native/native-verification-evidence.d.ts +86 -0
- package/dist/domains/comet-native/native-verification-evidence.d.ts.map +1 -0
- package/dist/domains/comet-native/native-verification-evidence.js +480 -0
- package/dist/domains/comet-native/native-verification-evidence.js.map +1 -0
- package/dist/domains/comet-native/native-verification-runtime.d.ts +58 -0
- package/dist/domains/comet-native/native-verification-runtime.d.ts.map +1 -0
- package/dist/domains/comet-native/native-verification-runtime.js +321 -0
- package/dist/domains/comet-native/native-verification-runtime.js.map +1 -0
- package/dist/domains/comet-native/native-verification-scope.d.ts +117 -0
- package/dist/domains/comet-native/native-verification-scope.d.ts.map +1 -0
- package/dist/domains/comet-native/native-verification-scope.js +1040 -0
- package/dist/domains/comet-native/native-verification-scope.js.map +1 -0
- package/dist/domains/comet-native/native-workspace.d.ts +46 -0
- package/dist/domains/comet-native/native-workspace.d.ts.map +1 -0
- package/dist/domains/comet-native/native-workspace.js +276 -0
- package/dist/domains/comet-native/native-workspace.js.map +1 -0
- package/dist/domains/dashboard/collector.d.ts.map +1 -1
- package/dist/domains/dashboard/collector.js +9 -1
- package/dist/domains/dashboard/collector.js.map +1 -1
- package/dist/domains/dashboard/native-adapter.d.ts +157 -0
- package/dist/domains/dashboard/native-adapter.d.ts.map +1 -0
- package/dist/domains/dashboard/native-adapter.js +302 -0
- package/dist/domains/dashboard/native-adapter.js.map +1 -0
- package/dist/domains/dashboard/native-collector.d.ts +6 -0
- package/dist/domains/dashboard/native-collector.d.ts.map +1 -0
- package/dist/domains/dashboard/native-collector.js +285 -0
- package/dist/domains/dashboard/native-collector.js.map +1 -0
- package/dist/domains/dashboard/types.d.ts +5 -0
- package/dist/domains/dashboard/types.d.ts.map +1 -1
- package/dist/domains/dashboard/web/assets/{arc-TGVUG2WN.js → arc-CxdiLJ50.js} +1 -1
- package/dist/domains/dashboard/web/assets/{architectureDiagram-3BPJPVTR-ASHmiHoP.js → architectureDiagram-3BPJPVTR-D5YCQu4e.js} +1 -1
- package/dist/domains/dashboard/web/assets/{blockDiagram-GPEHLZMM-CwASxBKe.js → blockDiagram-GPEHLZMM-8NfdCOQ8.js} +1 -1
- package/dist/domains/dashboard/web/assets/{c4Diagram-AAUBKEIU-BU8z_WNk.js → c4Diagram-AAUBKEIU-B3cFnNT7.js} +1 -1
- package/dist/domains/dashboard/web/assets/channel-B6AFly29.js +1 -0
- package/dist/domains/dashboard/web/assets/{chunk-2J33WTMH-CBGlUx4_.js → chunk-2J33WTMH-CBNfW-Dr.js} +1 -1
- package/dist/domains/dashboard/web/assets/{chunk-4BX2VUAB-CS-iGcFz.js → chunk-4BX2VUAB-vWyemRBr.js} +1 -1
- package/dist/domains/dashboard/web/assets/{chunk-55IACEB6-BUtCVJat.js → chunk-55IACEB6-H6haOo2C.js} +1 -1
- package/dist/domains/dashboard/web/assets/{chunk-727SXJPM-C94tj_pf.js → chunk-727SXJPM-D02UjGND.js} +1 -1
- package/dist/domains/dashboard/web/assets/{chunk-AQP2D5EJ-BFOKcpdG.js → chunk-AQP2D5EJ-wKsbOw_T.js} +1 -1
- package/dist/domains/dashboard/web/assets/{chunk-FMBD7UC4-Dmx8B-st.js → chunk-FMBD7UC4-eYFEZimP.js} +1 -1
- package/dist/domains/dashboard/web/assets/{chunk-ND2GUHAM-DYV00CNn.js → chunk-ND2GUHAM-fMaIDDI2.js} +1 -1
- package/dist/domains/dashboard/web/assets/{chunk-QZHKN3VN-DMJJyQnw.js → chunk-QZHKN3VN-C9rhF6Hm.js} +1 -1
- package/dist/domains/dashboard/web/assets/classDiagram-4FO5ZUOK-BcnrxOTt.js +1 -0
- package/dist/domains/dashboard/web/assets/classDiagram-v2-Q7XG4LA2-BcnrxOTt.js +1 -0
- package/dist/domains/dashboard/web/assets/{cose-bilkent-S5V4N54A-P4nE2rea.js → cose-bilkent-S5V4N54A-CbaShPub.js} +1 -1
- package/dist/domains/dashboard/web/assets/{cynefin-VYW2F7L2-C-R1HXDv.js → cynefin-VYW2F7L2-DN4emAQv.js} +1 -1
- package/dist/domains/dashboard/web/assets/{dagre-BM42HDAG-BH8d-C9z.js → dagre-BM42HDAG-BpSzbk_V.js} +1 -1
- package/dist/domains/dashboard/web/assets/demo-BuVau32v.js +25 -0
- package/dist/domains/dashboard/web/assets/{diagram-2AECGRRQ-DpXTgQIH.js → diagram-2AECGRRQ-CfXwGGpQ.js} +1 -1
- package/dist/domains/dashboard/web/assets/{diagram-5GNKFQAL-DSiFJzSw.js → diagram-5GNKFQAL-DMp0Zmot.js} +1 -1
- package/dist/domains/dashboard/web/assets/{diagram-KO2AKTUF-DULMkben.js → diagram-KO2AKTUF-C7ZvofsM.js} +1 -1
- package/dist/domains/dashboard/web/assets/{diagram-LMA3HP47-Pi8m_NO9.js → diagram-LMA3HP47-BjmxFnap.js} +1 -1
- package/dist/domains/dashboard/web/assets/{diagram-OG6HWLK6-BSe6bCWm.js → diagram-OG6HWLK6-DFBG1Iqy.js} +1 -1
- package/dist/domains/dashboard/web/assets/{erDiagram-TEJ5UH35-zb-FEcbq.js → erDiagram-TEJ5UH35-MpNT7dzt.js} +1 -1
- package/dist/domains/dashboard/web/assets/{flowDiagram-I6XJVG4X-Dr-Gk0z2.js → flowDiagram-I6XJVG4X-_1wAR6c1.js} +1 -1
- package/dist/domains/dashboard/web/assets/{ganttDiagram-6RSMTGT7-qs6Zb2A6.js → ganttDiagram-6RSMTGT7-DJKjDeWl.js} +1 -1
- package/dist/domains/dashboard/web/assets/{gitGraphDiagram-PVQCEYII-BQ314orT.js → gitGraphDiagram-PVQCEYII-BL7yUEn-.js} +1 -1
- package/dist/domains/dashboard/web/assets/index-CjE9mHGb.js +24 -0
- package/dist/domains/dashboard/web/assets/index-D-AGxvI4.css +1 -0
- package/dist/domains/dashboard/web/assets/{infoDiagram-5YYISTIA-O0bQp98A.js → infoDiagram-5YYISTIA-Bt5fqrOd.js} +1 -1
- package/dist/domains/dashboard/web/assets/{ishikawaDiagram-YF4QCWOH-BPC7wbKh.js → ishikawaDiagram-YF4QCWOH-COCMcjBM.js} +1 -1
- package/dist/domains/dashboard/web/assets/{journeyDiagram-JHISSGLW-ohViOd4b.js → journeyDiagram-JHISSGLW-DGcpcWny.js} +1 -1
- package/dist/domains/dashboard/web/assets/{kanban-definition-UN3LZRKU-CHleNdbG.js → kanban-definition-UN3LZRKU-QSBNsWMP.js} +1 -1
- package/dist/domains/dashboard/web/assets/{linear-CyqiW--Q.js → linear-9uyeeBZf.js} +1 -1
- package/dist/domains/dashboard/web/assets/{mermaid.core-qS9XvtaK.js → mermaid.core-CkNdB471.js} +4 -4
- package/dist/domains/dashboard/web/assets/{mindmap-definition-RKZ34NQL-oaGkqO9l.js → mindmap-definition-RKZ34NQL-CiNxI0gP.js} +1 -1
- package/dist/domains/dashboard/web/assets/{pieDiagram-4H26LBE5-CPcB-AFh.js → pieDiagram-4H26LBE5-BLJ6QnRO.js} +1 -1
- package/dist/domains/dashboard/web/assets/{quadrantDiagram-W4KKPZXB-LFy52Qtj.js → quadrantDiagram-W4KKPZXB-CflW-eFH.js} +1 -1
- package/dist/domains/dashboard/web/assets/{requirementDiagram-4Y6WPE33-BdjeaYP_.js → requirementDiagram-4Y6WPE33-B9HLmRWH.js} +1 -1
- package/dist/domains/dashboard/web/assets/{sankeyDiagram-5OEKKPKP-DDJ4styL.js → sankeyDiagram-5OEKKPKP-6xnco5k5.js} +1 -1
- package/dist/domains/dashboard/web/assets/{sequenceDiagram-3UESZ5HK-BL5bFNoz.js → sequenceDiagram-3UESZ5HK-Dp1rujNZ.js} +1 -1
- package/dist/domains/dashboard/web/assets/{stateDiagram-AJRCARHV-BNUfikui.js → stateDiagram-AJRCARHV-C1Xc90ek.js} +1 -1
- package/dist/domains/dashboard/web/assets/stateDiagram-v2-BHNVJYJU-p-qmzXyE.js +1 -0
- package/dist/domains/dashboard/web/assets/{timeline-definition-PNZ67QCA--ps2uu6L.js → timeline-definition-PNZ67QCA-g9s-m5Z4.js} +1 -1
- package/dist/domains/dashboard/web/assets/{vennDiagram-CIIHVFJN-C2q8q26c.js → vennDiagram-CIIHVFJN-rkEyhyCc.js} +1 -1
- package/dist/domains/dashboard/web/assets/{wardleyDiagram-YWT4CUSO-BUH9gXqd.js → wardleyDiagram-YWT4CUSO-CJLrWGXc.js} +1 -1
- package/dist/domains/dashboard/web/assets/{xychartDiagram-2RQKCTM6-B-DielEy.js → xychartDiagram-2RQKCTM6-BxJvPNqo.js} +1 -1
- package/dist/domains/dashboard/web/index.html +2 -2
- package/dist/domains/engine/storage-layout.d.ts +14 -0
- package/dist/domains/engine/storage-layout.d.ts.map +1 -0
- package/dist/domains/engine/storage-layout.js +32 -0
- package/dist/domains/engine/storage-layout.js.map +1 -0
- package/dist/domains/engine/storage-run.d.ts +9 -0
- package/dist/domains/engine/storage-run.d.ts.map +1 -0
- package/dist/domains/engine/storage-run.js +116 -0
- package/dist/domains/engine/storage-run.js.map +1 -0
- package/dist/domains/factory/package.d.ts.map +1 -1
- package/dist/domains/factory/package.js +5 -3
- package/dist/domains/factory/package.js.map +1 -1
- package/dist/domains/integrations/openspec.d.ts.map +1 -1
- package/dist/domains/integrations/openspec.js +8 -6
- package/dist/domains/integrations/openspec.js.map +1 -1
- package/dist/domains/skill/platform-inspect.d.ts +6 -2
- package/dist/domains/skill/platform-inspect.d.ts.map +1 -1
- package/dist/domains/skill/platform-inspect.js +52 -8
- package/dist/domains/skill/platform-inspect.js.map +1 -1
- package/dist/domains/skill/platform-install.d.ts +18 -7
- package/dist/domains/skill/platform-install.d.ts.map +1 -1
- package/dist/domains/skill/platform-install.js +338 -71
- package/dist/domains/skill/platform-install.js.map +1 -1
- package/dist/domains/skill/project-instructions.d.ts.map +1 -1
- package/dist/domains/skill/project-instructions.js +12 -6
- package/dist/domains/skill/project-instructions.js.map +1 -1
- package/dist/domains/skill/uninstall.d.ts.map +1 -1
- package/dist/domains/skill/uninstall.js +15 -3
- package/dist/domains/skill/uninstall.js.map +1 -1
- package/dist/domains/workflow-contract/builtins.d.ts +6 -0
- package/dist/domains/workflow-contract/builtins.d.ts.map +1 -1
- package/dist/domains/workflow-contract/builtins.js +137 -0
- package/dist/domains/workflow-contract/builtins.js.map +1 -1
- package/dist/domains/workflow-contract/index.d.ts +3 -1
- package/dist/domains/workflow-contract/index.d.ts.map +1 -1
- package/dist/domains/workflow-contract/index.js +2 -1
- package/dist/domains/workflow-contract/index.js.map +1 -1
- package/dist/domains/workflow-contract/normalize.d.ts.map +1 -1
- package/dist/domains/workflow-contract/normalize.js +28 -10
- package/dist/domains/workflow-contract/normalize.js.map +1 -1
- package/dist/domains/workflow-contract/project-config.d.ts +7 -0
- package/dist/domains/workflow-contract/project-config.d.ts.map +1 -0
- package/dist/domains/workflow-contract/project-config.js +110 -0
- package/dist/domains/workflow-contract/project-config.js.map +1 -0
- package/dist/domains/workflow-contract/types.d.ts +4 -2
- package/dist/domains/workflow-contract/types.d.ts.map +1 -1
- package/dist/domains/workflow-contract/validation.d.ts.map +1 -1
- package/dist/domains/workflow-contract/validation.js +14 -5
- package/dist/domains/workflow-contract/validation.js.map +1 -1
- package/dist/platform/install/detect.d.ts +3 -1
- package/dist/platform/install/detect.d.ts.map +1 -1
- package/dist/platform/install/detect.js +4 -1
- package/dist/platform/install/detect.js.map +1 -1
- package/dist/platform/install/project-registry.js +2 -2
- package/dist/platform/install/project-registry.js.map +1 -1
- package/dist/platform/paths/repository-layout.d.ts +16 -0
- package/dist/platform/paths/repository-layout.d.ts.map +1 -1
- package/dist/platform/paths/repository-layout.js.map +1 -1
- package/eval/local/README.md +50 -0
- package/eval/local/scripts/compare_baselines.py +127 -1
- package/eval/local/scripts/regression_check.py +3 -4
- package/eval/local/tasks/comet-native-clarification/environment/Dockerfile +27 -0
- package/eval/local/tasks/comet-native-clarification/environment/test_wordcount.py +25 -0
- package/eval/local/tasks/comet-native-clarification/environment/wordcount.py +36 -0
- package/eval/local/tasks/comet-native-clarification/instruction.md +7 -0
- package/eval/local/tasks/comet-native-clarification/task.toml +40 -0
- package/eval/local/tasks/comet-native-clarification/validation/test_native_clarification.py +193 -0
- package/eval/local/tasks/comet-native-clarification-modes/environment/Dockerfile +27 -0
- package/eval/local/tasks/comet-native-clarification-modes/environment/test_wordcount.py +25 -0
- package/eval/local/tasks/comet-native-clarification-modes/environment/wordcount.py +36 -0
- package/eval/local/tasks/comet-native-clarification-modes/instruction.md +13 -0
- package/eval/local/tasks/comet-native-clarification-modes/task.toml +39 -0
- package/eval/local/tasks/comet-native-clarification-modes/validation/test_native_clarification_modes.py +235 -0
- package/eval/local/tasks/comet-native-interrupted-transition/environment/.comet/config.yaml +6 -0
- package/eval/local/tasks/comet-native-interrupted-transition/environment/Dockerfile +28 -0
- package/eval/local/tasks/comet-native-interrupted-transition/environment/docs/comet/changes/add-character-counting/brief.md +17 -0
- package/eval/local/tasks/comet-native-interrupted-transition/environment/docs/comet/changes/add-character-counting/comet-state.yaml +12 -0
- package/eval/local/tasks/comet-native-interrupted-transition/environment/docs/comet/changes/add-character-counting/runtime/transition.json +69 -0
- package/eval/local/tasks/comet-native-interrupted-transition/environment/docs/comet/changes/add-character-counting/specs/character-counting/spec.md +3 -0
- package/eval/local/tasks/comet-native-interrupted-transition/environment/test_wordcount.py +20 -0
- package/eval/local/tasks/comet-native-interrupted-transition/environment/wordcount.py +27 -0
- package/eval/local/tasks/comet-native-interrupted-transition/instruction.md +7 -0
- package/eval/local/tasks/comet-native-interrupted-transition/task.toml +35 -0
- package/eval/local/tasks/comet-native-interrupted-transition/validation/test_native_interrupted_transition.py +63 -0
- package/eval/local/tasks/comet-native-repository-fact/environment/Dockerfile +26 -0
- package/eval/local/tasks/comet-native-repository-fact/environment/PRODUCT_RULES.md +3 -0
- package/eval/local/tasks/comet-native-repository-fact/environment/test_wordcount.py +20 -0
- package/eval/local/tasks/comet-native-repository-fact/environment/wordcount.py +27 -0
- package/eval/local/tasks/comet-native-repository-fact/instruction.md +7 -0
- package/eval/local/tasks/comet-native-repository-fact/task.toml +35 -0
- package/eval/local/tasks/comet-native-repository-fact/validation/test_native_repository_fact.py +53 -0
- package/eval/local/tasks/comet-native-wave-b-decision-resume/environment/Dockerfile +27 -0
- package/eval/local/tasks/comet-native-wave-b-decision-resume/environment/test_wordcount.py +27 -0
- package/eval/local/tasks/comet-native-wave-b-decision-resume/environment/wordcount.py +36 -0
- package/eval/local/tasks/comet-native-wave-b-decision-resume/instruction.md +9 -0
- package/eval/local/tasks/comet-native-wave-b-decision-resume/task.toml +40 -0
- package/eval/local/tasks/comet-native-wave-b-decision-resume/validation/test_native_wave_b_decision_resume.py +208 -0
- package/eval/local/tasks/comet-native-wave-c-verification-integrity/environment/Dockerfile +27 -0
- package/eval/local/tasks/comet-native-wave-c-verification-integrity/environment/test_wordcount.py +27 -0
- package/eval/local/tasks/comet-native-wave-c-verification-integrity/environment/wordcount.py +36 -0
- package/eval/local/tasks/comet-native-wave-c-verification-integrity/instruction.md +11 -0
- package/eval/local/tasks/comet-native-wave-c-verification-integrity/task.toml +36 -0
- package/eval/local/tasks/comet-native-wave-c-verification-integrity/validation/test_native_wave_c_verification_integrity.py +344 -0
- package/eval/local/tasks/comet-native-wave-d-stagnation-stop/environment/Dockerfile +27 -0
- package/eval/local/tasks/comet-native-wave-d-stagnation-stop/environment/test_wordcount.py +27 -0
- package/eval/local/tasks/comet-native-wave-d-stagnation-stop/environment/wordcount.py +36 -0
- package/eval/local/tasks/comet-native-wave-d-stagnation-stop/instruction.md +11 -0
- package/eval/local/tasks/comet-native-wave-d-stagnation-stop/task.toml +37 -0
- package/eval/local/tasks/comet-native-wave-d-stagnation-stop/validation/test_native_wave_d_stagnation_stop.py +284 -0
- package/eval/local/tasks/comet-native-wave-e-parallel-safety/environment/.include-trusted-native-runtime +1 -0
- package/eval/local/tasks/comet-native-wave-e-parallel-safety/environment/Dockerfile +27 -0
- package/eval/local/tasks/comet-native-wave-e-parallel-safety/environment/test_wordcount.py +27 -0
- package/eval/local/tasks/comet-native-wave-e-parallel-safety/environment/wordcount.py +36 -0
- package/eval/local/tasks/comet-native-wave-e-parallel-safety/instruction.md +9 -0
- package/eval/local/tasks/comet-native-wave-e-parallel-safety/task.toml +37 -0
- package/eval/local/tasks/comet-native-wave-e-parallel-safety/validation/test_native_wave_e_parallel_safety.py +309 -0
- package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/environment/.include-current-comet-cli +1 -0
- package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/environment/Dockerfile +31 -0
- package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/environment/current-comet-package.json +18 -0
- package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/environment/current-comet.sh +14 -0
- package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/environment/test_wordcount.py +27 -0
- package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/environment/wordcount.py +36 -0
- package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/instruction.md +7 -0
- package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/task.toml +36 -0
- package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/validation/test_native_wave_f_dashboard_readonly.py +469 -0
- package/eval/local/tasks/comet-native-workflow/environment/Dockerfile +27 -0
- package/eval/local/tasks/comet-native-workflow/environment/test_wordcount.py +25 -0
- package/eval/local/tasks/comet-native-workflow/environment/wordcount.py +36 -0
- package/eval/local/tasks/comet-native-workflow/instruction.md +14 -0
- package/eval/local/tasks/comet-native-workflow/task.toml +36 -0
- package/eval/local/tasks/comet-native-workflow/validation/test_native_workflow.py +149 -0
- package/eval/local/tasks/index.yaml +61 -0
- package/eval/local/tests/conftest.py +407 -22
- package/eval/local/tests/scaffold/test_aligned_comparison.py +1012 -0
- package/eval/local/tests/scaffold/test_conftest_helpers.py +187 -7
- package/eval/local/tests/scaffold/test_logging.py +135 -1
- package/eval/local/tests/scaffold/test_manifests.py +2 -0
- package/eval/local/tests/scaffold/test_native_aligned_eval.py +346 -0
- package/eval/local/tests/scaffold/test_native_wave_evaluations.py +1889 -0
- package/eval/local/tests/scaffold/test_profiles.py +33 -0
- package/eval/local/tests/scaffold/test_sample_quality.py +57 -0
- package/eval/local/tests/scaffold/test_tasks.py +377 -1
- package/eval/local/tests/scaffold/test_treatments.py +59 -13
- package/eval/local/tests/scaffold/test_utils.py +277 -4
- package/eval/local/tests/tasks/__init__.py +1 -0
- package/eval/local/tests/tasks/test_tasks.py +104 -78
- package/eval/local/tests/tasks/test_validation_scripts.py +37 -0
- package/eval/local/treatments/comet/comet_native_phase1.yaml +66 -0
- package/eval/scaffold/python/aligned_comparison.py +1631 -0
- package/eval/scaffold/python/generic_llm_judge.py +3 -1
- package/eval/scaffold/python/llm_judge.py +0 -3
- package/eval/scaffold/python/logging.py +115 -16
- package/eval/scaffold/python/manifests.py +2 -0
- package/eval/scaffold/python/native_eval.py +138 -0
- package/eval/scaffold/python/pass_at_k.py +0 -1
- package/eval/scaffold/python/report_outputs.py +226 -44
- package/eval/scaffold/python/sample_quality.py +45 -2
- package/eval/scaffold/python/tasks.py +11 -0
- package/eval/scaffold/python/utils.py +108 -20
- package/eval/scaffold/python/validation/__init__.py +15 -5
- package/eval/scaffold/python/validation/comet_workflow.py +10 -5
- package/eval/scaffold/python/validation/generic_rubric.py +1 -2
- package/eval/scaffold/python/validation/native_wave.py +2154 -0
- package/eval/scaffold/python/validation/native_workflow.py +252 -0
- package/eval/scaffold/python/validation/rubric.py +0 -2
- package/eval/scaffold/shell/completion-point.sh +18 -0
- package/eval/scaffold/shell/decision-point.sh +35 -0
- package/eval/scaffold/shell/docker.sh +150 -9
- package/eval/scaffold/shell/run-claude-loop.sh +57 -27
- package/package.json +19 -5
- package/dist/domains/dashboard/web/assets/channel-kp6Ng2JJ.js +0 -1
- package/dist/domains/dashboard/web/assets/classDiagram-4FO5ZUOK-yBDjgMY_.js +0 -1
- package/dist/domains/dashboard/web/assets/classDiagram-v2-Q7XG4LA2-yBDjgMY_.js +0 -1
- package/dist/domains/dashboard/web/assets/demo-DQyfozbi.js +0 -1
- package/dist/domains/dashboard/web/assets/index-BLAfkNTu.css +0 -1
- package/dist/domains/dashboard/web/assets/index-DtLUOcAW.js +0 -24
- package/dist/domains/dashboard/web/assets/stateDiagram-v2-BHNVJYJU-DGrsmWts.js +0 -1
- package/eval/.env.example +0 -52
- package/eval/langsmith/.env.example +0 -16
|
@@ -12,12 +12,13 @@ Supports pytest-xdist parallel execution via worker coordination.
|
|
|
12
12
|
"""
|
|
13
13
|
|
|
14
14
|
import json
|
|
15
|
+
import hashlib
|
|
15
16
|
import os
|
|
17
|
+
import re
|
|
16
18
|
import shutil
|
|
17
19
|
import subprocess
|
|
18
20
|
import tempfile
|
|
19
21
|
import time
|
|
20
|
-
import uuid
|
|
21
22
|
from contextlib import contextmanager
|
|
22
23
|
from datetime import datetime
|
|
23
24
|
from pathlib import Path
|
|
@@ -25,9 +26,8 @@ from types import SimpleNamespace
|
|
|
25
26
|
from typing import Any
|
|
26
27
|
|
|
27
28
|
import pytest
|
|
28
|
-
from dotenv import load_dotenv
|
|
29
29
|
|
|
30
|
-
from scaffold import run_claude_in_docker,
|
|
30
|
+
from scaffold import run_claude_in_docker, run_python_in_docker, run_shell
|
|
31
31
|
from scaffold.python import (
|
|
32
32
|
ExperimentLogger,
|
|
33
33
|
TreatmentResult,
|
|
@@ -42,6 +42,30 @@ from scaffold.python import (
|
|
|
42
42
|
)
|
|
43
43
|
from scaffold.python.sample_quality import infer_sample_quality
|
|
44
44
|
from scaffold.python.skill_parser import SCRIPT_EXTENSIONS
|
|
45
|
+
from scaffold.python.utils import run_claude_loop_in_docker
|
|
46
|
+
from scaffold.python.aligned_comparison import (
|
|
47
|
+
EXPECTED_CASE_MATRIX_FILENAME,
|
|
48
|
+
build_execution_identity,
|
|
49
|
+
expected_case_matrix_payload,
|
|
50
|
+
parse_expected_case_matrix,
|
|
51
|
+
)
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def _extract_loop_turns(stderr: str | None) -> int | None:
|
|
55
|
+
match = re.search(r"\[loop\] finished after (\d+) turns", stderr or "")
|
|
56
|
+
return int(match.group(1)) if match else None
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
def _extract_loop_interaction(stderr: str | None) -> dict[str, int | None]:
|
|
60
|
+
source = stderr or ""
|
|
61
|
+
return {
|
|
62
|
+
"actual_turns": _extract_loop_turns(source),
|
|
63
|
+
"decision_points": source.count("[loop] decision point detected"),
|
|
64
|
+
"deterministic_replies": source.count("[loop] deterministic decision reply applied"),
|
|
65
|
+
"completion_signals": source.count("[loop] workflow completion detected"),
|
|
66
|
+
"fresh_resume_boundaries": source.count("[loop] fresh resume boundary detected"),
|
|
67
|
+
}
|
|
68
|
+
|
|
45
69
|
|
|
46
70
|
# =============================================================================
|
|
47
71
|
# CONSTANTS
|
|
@@ -49,6 +73,7 @@ from scaffold.python.skill_parser import SCRIPT_EXTENSIONS
|
|
|
49
73
|
|
|
50
74
|
PROJECT_ROOT = Path(__file__).parent.parent
|
|
51
75
|
EVAL_ROOT = PROJECT_ROOT.parent
|
|
76
|
+
REPOSITORY_ROOT = EVAL_ROOT.parent
|
|
52
77
|
|
|
53
78
|
# Shared files for xdist worker coordination
|
|
54
79
|
XDIST_EXPERIMENT_FILE = PROJECT_ROOT / ".pytest_experiment_id"
|
|
@@ -70,6 +95,239 @@ COMET_WORKFLOW_CLAUDE_MD_PATH = (
|
|
|
70
95
|
/ "CLAUDE.md"
|
|
71
96
|
)
|
|
72
97
|
|
|
98
|
+
CURRENT_COMET_CLI_MARKER = ".include-current-comet-cli"
|
|
99
|
+
CURRENT_COMET_BUILD_SCHEMA = "comet.eval.current-comet-build.v1"
|
|
100
|
+
TRUSTED_NATIVE_RUNTIME_MARKER = ".include-trusted-native-runtime"
|
|
101
|
+
TRUSTED_NATIVE_RUNTIME_SCHEMA = "comet.eval.trusted-native-runtime.v1"
|
|
102
|
+
MODEL_EXECUTION_ENV_KEYS = (
|
|
103
|
+
"ANTHROPIC_BASE_URL",
|
|
104
|
+
"ANTHROPIC_MODEL",
|
|
105
|
+
"ANTHROPIC_DEFAULT_HAIKU_MODEL",
|
|
106
|
+
"ANTHROPIC_DEFAULT_SONNET_MODEL",
|
|
107
|
+
"ANTHROPIC_DEFAULT_OPUS_MODEL",
|
|
108
|
+
"ANTHROPIC_DEFAULT_OPUS_MODEL_NAME",
|
|
109
|
+
"ANTHROPIC_DEFAULT_SONNET_MODEL_NAME",
|
|
110
|
+
"CLAUDE_CODE_SUBAGENT_MODEL",
|
|
111
|
+
)
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
def _selected_claude_model() -> str | None:
|
|
115
|
+
"""Resolve the exact model selector passed to Claude without persisting it."""
|
|
116
|
+
return os.environ.get("BENCH_CC_MODEL") or os.environ.get("ANTHROPIC_MODEL")
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
def _model_execution_config() -> dict[str, str | None]:
|
|
120
|
+
"""Return only model-routing values; credentials are deliberately excluded."""
|
|
121
|
+
return {key: os.environ.get(key) for key in MODEL_EXECUTION_ENV_KEYS}
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
def _capture_execution_identity(test_dir: Path, *, model: str | None, interaction):
|
|
125
|
+
"""Capture an immutable image/tool identity and a safe report payload."""
|
|
126
|
+
result = run_shell(
|
|
127
|
+
"docker.sh",
|
|
128
|
+
"execution-identity",
|
|
129
|
+
str(test_dir),
|
|
130
|
+
timeout=300,
|
|
131
|
+
check=False,
|
|
132
|
+
)
|
|
133
|
+
if result.returncode != 0:
|
|
134
|
+
raise RuntimeError("Could not verify eval Docker/Claude execution identity")
|
|
135
|
+
try:
|
|
136
|
+
raw = json.loads(result.stdout)
|
|
137
|
+
except (TypeError, json.JSONDecodeError) as error:
|
|
138
|
+
raise RuntimeError("Eval execution identity output is not valid JSON") from error
|
|
139
|
+
report_identity = build_execution_identity(
|
|
140
|
+
raw,
|
|
141
|
+
model=model,
|
|
142
|
+
model_config=_model_execution_config(),
|
|
143
|
+
interaction=interaction,
|
|
144
|
+
)
|
|
145
|
+
return SimpleNamespace(
|
|
146
|
+
runtime_image_id=raw["runtime_image_id"],
|
|
147
|
+
report_identity=report_identity,
|
|
148
|
+
)
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
def _regular_tree_files(root: Path) -> list[Path]:
|
|
152
|
+
files: list[Path] = []
|
|
153
|
+
for path in sorted(root.rglob("*")):
|
|
154
|
+
if path.is_symlink():
|
|
155
|
+
raise ValueError(f"Current Comet snapshot source contains a symbolic link: {path}")
|
|
156
|
+
if path.is_file():
|
|
157
|
+
files.append(path)
|
|
158
|
+
return files
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
def _tree_digest(root: Path, files: list[Path] | None = None) -> tuple[str, int]:
|
|
162
|
+
digest = hashlib.sha256()
|
|
163
|
+
selected = files if files is not None else _regular_tree_files(root)
|
|
164
|
+
for path in selected:
|
|
165
|
+
relative = path.relative_to(root).as_posix()
|
|
166
|
+
payload = path.read_bytes()
|
|
167
|
+
digest.update(relative.encode("utf-8"))
|
|
168
|
+
digest.update(b"\0")
|
|
169
|
+
digest.update(str(len(payload)).encode("ascii"))
|
|
170
|
+
digest.update(b"\0")
|
|
171
|
+
digest.update(hashlib.sha256(payload).hexdigest().encode("ascii"))
|
|
172
|
+
digest.update(b"\n")
|
|
173
|
+
return digest.hexdigest(), len(selected)
|
|
174
|
+
|
|
175
|
+
|
|
176
|
+
def _build_current_comet_dist(checkout: Path, output: Path) -> str:
|
|
177
|
+
"""Compile the checkout's TypeScript into an isolated, timestamp-free dist tree."""
|
|
178
|
+
node = shutil.which("node")
|
|
179
|
+
tsc = checkout / "node_modules/typescript/bin/tsc"
|
|
180
|
+
compiler_package = checkout / "node_modules/typescript/package.json"
|
|
181
|
+
if not node or not tsc.is_file() or not compiler_package.is_file():
|
|
182
|
+
raise FileNotFoundError("Current Comet source build requires local Node.js and TypeScript")
|
|
183
|
+
compiler = json.loads(compiler_package.read_text(encoding="utf-8"))
|
|
184
|
+
version = compiler.get("version")
|
|
185
|
+
if not isinstance(version, str) or not version:
|
|
186
|
+
raise ValueError("Current Comet TypeScript compiler version is invalid")
|
|
187
|
+
result = subprocess.run(
|
|
188
|
+
[
|
|
189
|
+
node,
|
|
190
|
+
str(tsc),
|
|
191
|
+
"--pretty",
|
|
192
|
+
"false",
|
|
193
|
+
"--outDir",
|
|
194
|
+
str(output),
|
|
195
|
+
"--declaration",
|
|
196
|
+
"false",
|
|
197
|
+
"--declarationMap",
|
|
198
|
+
"false",
|
|
199
|
+
"--sourceMap",
|
|
200
|
+
"false",
|
|
201
|
+
"--incremental",
|
|
202
|
+
"false",
|
|
203
|
+
],
|
|
204
|
+
cwd=checkout,
|
|
205
|
+
capture_output=True,
|
|
206
|
+
text=True,
|
|
207
|
+
timeout=180,
|
|
208
|
+
check=False,
|
|
209
|
+
)
|
|
210
|
+
if result.returncode != 0:
|
|
211
|
+
detail = (result.stdout + "\n" + result.stderr).strip()
|
|
212
|
+
raise RuntimeError(f"Current Comet source build failed: {detail[-4000:]}")
|
|
213
|
+
required = [output / "app/cli/index.js", output / "domains/dashboard/native-adapter.js"]
|
|
214
|
+
missing = [str(path) for path in required if not path.is_file()]
|
|
215
|
+
if missing:
|
|
216
|
+
raise FileNotFoundError(f"Current Comet source build omitted required output: {missing}")
|
|
217
|
+
return version
|
|
218
|
+
|
|
219
|
+
|
|
220
|
+
def _copy_current_comet_cli_snapshot(environment_dir: Path, test_dir: Path) -> None:
|
|
221
|
+
"""Expose the current checkout's built CLI to task containers on request.
|
|
222
|
+
|
|
223
|
+
The task workspace is the only host directory mounted into Docker. A task
|
|
224
|
+
carrying ``CURRENT_COMET_CLI_MARKER`` therefore needs an explicit snapshot
|
|
225
|
+
of this checkout's bin/dist package rather than a published npm version.
|
|
226
|
+
"""
|
|
227
|
+
if not (environment_dir / CURRENT_COMET_CLI_MARKER).is_file():
|
|
228
|
+
return
|
|
229
|
+
|
|
230
|
+
target = test_dir / "_eval_current_comet"
|
|
231
|
+
if target.exists():
|
|
232
|
+
shutil.rmtree(target)
|
|
233
|
+
target.mkdir(parents=True)
|
|
234
|
+
package_file = REPOSITORY_ROOT / "package.json"
|
|
235
|
+
bin_dir = REPOSITORY_ROOT / "bin"
|
|
236
|
+
source_roots = [
|
|
237
|
+
REPOSITORY_ROOT / "app",
|
|
238
|
+
REPOSITORY_ROOT / "domains",
|
|
239
|
+
REPOSITORY_ROOT / "platform",
|
|
240
|
+
]
|
|
241
|
+
source_files = [
|
|
242
|
+
path
|
|
243
|
+
for root in source_roots
|
|
244
|
+
for path in _regular_tree_files(root)
|
|
245
|
+
if path.suffix in {".ts", ".tsx", ".json"}
|
|
246
|
+
]
|
|
247
|
+
source_files.extend(
|
|
248
|
+
path
|
|
249
|
+
for path in (
|
|
250
|
+
REPOSITORY_ROOT / "tsconfig.json",
|
|
251
|
+
package_file,
|
|
252
|
+
REPOSITORY_ROOT / "bin/comet.js",
|
|
253
|
+
)
|
|
254
|
+
if path.is_file()
|
|
255
|
+
)
|
|
256
|
+
if not package_file.is_file() or not bin_dir.is_dir() or not source_files:
|
|
257
|
+
raise FileNotFoundError("Current Comet source snapshot is incomplete")
|
|
258
|
+
source_hash, source_count = _tree_digest(REPOSITORY_ROOT, sorted(set(source_files)))
|
|
259
|
+
with tempfile.TemporaryDirectory(prefix="comet-eval-source-build-") as temporary:
|
|
260
|
+
built_dist = Path(temporary) / "dist"
|
|
261
|
+
compiler_version = _build_current_comet_dist(REPOSITORY_ROOT, built_dist)
|
|
262
|
+
shutil.copytree(built_dist, target / "dist")
|
|
263
|
+
shutil.copytree(bin_dir, target / "bin")
|
|
264
|
+
shutil.copy2(package_file, target / "package.json")
|
|
265
|
+
snapshot_files = [
|
|
266
|
+
path for relative in ("bin", "dist") for path in _regular_tree_files(target / relative)
|
|
267
|
+
] + [target / "package.json"]
|
|
268
|
+
snapshot_hash, snapshot_count = _tree_digest(target, sorted(snapshot_files))
|
|
269
|
+
identity = {
|
|
270
|
+
"schema": CURRENT_COMET_BUILD_SCHEMA,
|
|
271
|
+
"sourceHash": source_hash,
|
|
272
|
+
"sourceFileCount": source_count,
|
|
273
|
+
"snapshotHash": snapshot_hash,
|
|
274
|
+
"snapshotFileCount": snapshot_count,
|
|
275
|
+
"packageHash": hashlib.sha256((target / "package.json").read_bytes()).hexdigest(),
|
|
276
|
+
"entryHash": hashlib.sha256((target / "dist/app/cli/index.js").read_bytes()).hexdigest(),
|
|
277
|
+
"nativeAdapterHash": hashlib.sha256(
|
|
278
|
+
(target / "dist/domains/dashboard/native-adapter.js").read_bytes()
|
|
279
|
+
).hexdigest(),
|
|
280
|
+
"compilerVersion": compiler_version,
|
|
281
|
+
}
|
|
282
|
+
(target / "build-identity.json").write_text(
|
|
283
|
+
json.dumps(identity, indent=2) + "\n", encoding="utf-8"
|
|
284
|
+
)
|
|
285
|
+
|
|
286
|
+
|
|
287
|
+
def _copy_trusted_native_runtime_snapshot(
|
|
288
|
+
environment_dir: Path,
|
|
289
|
+
test_dir: Path,
|
|
290
|
+
skills: dict[str, Any] | None,
|
|
291
|
+
) -> None:
|
|
292
|
+
"""Snapshot the controller-selected Native runtime before the Agent starts."""
|
|
293
|
+
if not (environment_dir / TRUSTED_NATIVE_RUNTIME_MARKER).is_file():
|
|
294
|
+
return
|
|
295
|
+
config = (skills or {}).get("comet-native")
|
|
296
|
+
if not isinstance(config, dict):
|
|
297
|
+
raise ValueError("Trusted Native oracle requires the comet-native Skill source")
|
|
298
|
+
source_dir = config.get("source_dir")
|
|
299
|
+
scripts_dir = config.get("scripts_dir")
|
|
300
|
+
candidates = []
|
|
301
|
+
if source_dir:
|
|
302
|
+
candidates.append(Path(source_dir) / "scripts/comet-native-runtime.mjs")
|
|
303
|
+
if scripts_dir:
|
|
304
|
+
candidates.append(Path(scripts_dir) / "comet-native-runtime.mjs")
|
|
305
|
+
source = next(
|
|
306
|
+
(
|
|
307
|
+
candidate
|
|
308
|
+
for candidate in candidates
|
|
309
|
+
if candidate.is_file() and not candidate.is_symlink()
|
|
310
|
+
),
|
|
311
|
+
None,
|
|
312
|
+
)
|
|
313
|
+
if source is None:
|
|
314
|
+
raise FileNotFoundError("Controller-selected Comet Native runtime is unavailable")
|
|
315
|
+
|
|
316
|
+
target_root = test_dir / "_eval_trusted_oracles"
|
|
317
|
+
if target_root.exists():
|
|
318
|
+
shutil.rmtree(target_root)
|
|
319
|
+
target_root.mkdir(parents=True)
|
|
320
|
+
target = target_root / "comet-native-runtime.mjs"
|
|
321
|
+
shutil.copyfile(source, target)
|
|
322
|
+
identity = {
|
|
323
|
+
"schema": TRUSTED_NATIVE_RUNTIME_SCHEMA,
|
|
324
|
+
"runtimeFile": target.name,
|
|
325
|
+
"runtimeHash": hashlib.sha256(target.read_bytes()).hexdigest(),
|
|
326
|
+
}
|
|
327
|
+
(target_root / "native-runtime-identity.json").write_text(
|
|
328
|
+
json.dumps(identity, indent=2) + "\n", encoding="utf-8"
|
|
329
|
+
)
|
|
330
|
+
|
|
73
331
|
|
|
74
332
|
# =============================================================================
|
|
75
333
|
# PYTEST HOOKS
|
|
@@ -149,6 +407,10 @@ def pytest_addoption(parser):
|
|
|
149
407
|
|
|
150
408
|
def pytest_configure(config):
|
|
151
409
|
"""Register experiment plugin (decision deferred to sessionstart)."""
|
|
410
|
+
config.addinivalue_line(
|
|
411
|
+
"markers",
|
|
412
|
+
"eval_case(repetition): controller-owned task/treatment/repetition identity",
|
|
413
|
+
)
|
|
152
414
|
global _plugin
|
|
153
415
|
_plugin = ExperimentPlugin(config)
|
|
154
416
|
config.pluginmanager.register(_plugin, "experiment_plugin")
|
|
@@ -198,6 +460,22 @@ class ExperimentPlugin:
|
|
|
198
460
|
print(f"Logging to: {self.logger.base_dir}")
|
|
199
461
|
print(f"{'=' * 60}\n")
|
|
200
462
|
|
|
463
|
+
def pytest_collection_finish(self, session):
|
|
464
|
+
"""Persist the full collected case matrix before any model run starts."""
|
|
465
|
+
if not self.logger:
|
|
466
|
+
return
|
|
467
|
+
cases = _expected_cases_from_items(session.items)
|
|
468
|
+
if not cases:
|
|
469
|
+
return
|
|
470
|
+
payload = expected_case_matrix_payload(cases)
|
|
471
|
+
_persist_expected_case_matrix(self.logger.base_dir, payload)
|
|
472
|
+
self.logger.metadata["expected_case_matrix"] = {
|
|
473
|
+
"schema": payload["schema"],
|
|
474
|
+
"matrix_hash": payload["matrix_hash"],
|
|
475
|
+
"case_count": len(payload["cases"]),
|
|
476
|
+
"path": EXPECTED_CASE_MATRIX_FILENAME,
|
|
477
|
+
}
|
|
478
|
+
|
|
201
479
|
def pytest_sessionfinish(self, session, exitstatus):
|
|
202
480
|
"""Generate and save summary at session end."""
|
|
203
481
|
if not self.logger:
|
|
@@ -209,6 +487,7 @@ class ExperimentPlugin:
|
|
|
209
487
|
if self.is_xdist_master:
|
|
210
488
|
time.sleep(1)
|
|
211
489
|
|
|
490
|
+
self._reload_expected_case_matrix_metadata()
|
|
212
491
|
self._reload_results_from_reports()
|
|
213
492
|
|
|
214
493
|
if self.logger.results:
|
|
@@ -217,6 +496,23 @@ class ExperimentPlugin:
|
|
|
217
496
|
|
|
218
497
|
_cleanup_experiment_coordination()
|
|
219
498
|
|
|
499
|
+
def _reload_expected_case_matrix_metadata(self):
|
|
500
|
+
"""Attach the worker-written matrix to controller-finalized metadata."""
|
|
501
|
+
path = self.logger.base_dir / EXPECTED_CASE_MATRIX_FILENAME
|
|
502
|
+
if not path.is_file():
|
|
503
|
+
return
|
|
504
|
+
try:
|
|
505
|
+
payload = json.loads(path.read_text(encoding="utf-8"))
|
|
506
|
+
matrix = parse_expected_case_matrix(payload)
|
|
507
|
+
except (OSError, json.JSONDecodeError, ValueError) as error:
|
|
508
|
+
raise RuntimeError("Expected case matrix became invalid before finalize") from error
|
|
509
|
+
self.logger.metadata["expected_case_matrix"] = {
|
|
510
|
+
"schema": payload["schema"],
|
|
511
|
+
"matrix_hash": matrix.matrix_hash,
|
|
512
|
+
"case_count": len(matrix.cases),
|
|
513
|
+
"path": EXPECTED_CASE_MATRIX_FILENAME,
|
|
514
|
+
}
|
|
515
|
+
|
|
220
516
|
def get_rep_number(self, treatment_name: str) -> int:
|
|
221
517
|
"""Get the next repetition number for a treatment."""
|
|
222
518
|
if treatment_name not in self.run_counter:
|
|
@@ -395,8 +691,12 @@ def _resolve_interaction_config(task, profile_name: str, config):
|
|
|
395
691
|
mode = task_interaction.mode or profile_default.mode
|
|
396
692
|
max_turns = task_interaction.max_turns or profile_default.max_turns
|
|
397
693
|
simulator_prompt = task_interaction.simulator_prompt or profile_default.simulator_prompt
|
|
398
|
-
decision_patterns = list(
|
|
694
|
+
decision_patterns = list(
|
|
695
|
+
task_interaction.decision_patterns or profile_default.decision_patterns
|
|
696
|
+
)
|
|
697
|
+
decision_reply = task_interaction.decision_reply or profile_default.decision_reply
|
|
399
698
|
continue_prompt = task_interaction.continue_prompt or profile_default.continue_prompt
|
|
699
|
+
fresh_resume_marker = task_interaction.fresh_resume_marker
|
|
400
700
|
|
|
401
701
|
mode_override = config.getoption("--interaction-mode")
|
|
402
702
|
if mode_override:
|
|
@@ -423,7 +723,9 @@ def _resolve_interaction_config(task, profile_name: str, config):
|
|
|
423
723
|
max_turns=max_turns,
|
|
424
724
|
simulator_prompt=simulator_prompt,
|
|
425
725
|
decision_patterns=decision_patterns,
|
|
726
|
+
decision_reply=decision_reply,
|
|
426
727
|
continue_prompt=continue_prompt,
|
|
728
|
+
fresh_resume_marker=fresh_resume_marker,
|
|
427
729
|
)
|
|
428
730
|
|
|
429
731
|
|
|
@@ -499,6 +801,48 @@ def _get_or_create_experiment_id(name: str, use_coordination: bool) -> str:
|
|
|
499
801
|
return experiment_id
|
|
500
802
|
|
|
501
803
|
|
|
804
|
+
def _expected_cases_from_items(items) -> list[tuple[str, str, int]]:
|
|
805
|
+
"""Read explicit eval-case marks from the complete pytest collection."""
|
|
806
|
+
cases: list[tuple[str, str, int]] = []
|
|
807
|
+
for item in items:
|
|
808
|
+
callspec = getattr(item, "callspec", None)
|
|
809
|
+
marker = item.get_closest_marker("eval_case")
|
|
810
|
+
if callspec is None or marker is None:
|
|
811
|
+
continue
|
|
812
|
+
task = callspec.params.get("task_name")
|
|
813
|
+
treatment = callspec.params.get("treatment_name")
|
|
814
|
+
repetition = marker.kwargs.get("repetition")
|
|
815
|
+
if not isinstance(task, str) or not isinstance(treatment, str):
|
|
816
|
+
raise pytest.UsageError("eval_case is missing task/treatment parameters")
|
|
817
|
+
if isinstance(repetition, bool) or not isinstance(repetition, int) or repetition < 1:
|
|
818
|
+
raise pytest.UsageError("eval_case repetition must be a positive integer")
|
|
819
|
+
cases.append((task, treatment, repetition))
|
|
820
|
+
return cases
|
|
821
|
+
|
|
822
|
+
|
|
823
|
+
def _persist_expected_case_matrix(base_dir: Path, payload: dict[str, Any]) -> None:
|
|
824
|
+
"""Write one xdist-shared matrix; workers must agree byte-for-byte."""
|
|
825
|
+
canonical = parse_expected_case_matrix(payload)
|
|
826
|
+
path = base_dir / EXPECTED_CASE_MATRIX_FILENAME
|
|
827
|
+
lock_path = base_dir / f".{EXPECTED_CASE_MATRIX_FILENAME}.lock"
|
|
828
|
+
serialized = json.dumps(payload, indent=2, sort_keys=True) + "\n"
|
|
829
|
+
with file_lock(lock_path):
|
|
830
|
+
if path.exists():
|
|
831
|
+
try:
|
|
832
|
+
existing = parse_expected_case_matrix(json.loads(path.read_text(encoding="utf-8")))
|
|
833
|
+
except (OSError, json.JSONDecodeError, ValueError) as error:
|
|
834
|
+
raise RuntimeError("Existing expected case matrix is invalid") from error
|
|
835
|
+
if existing != canonical:
|
|
836
|
+
raise RuntimeError("pytest workers collected different expected case matrices")
|
|
837
|
+
return
|
|
838
|
+
temporary = path.with_name(f".{path.name}.{os.getpid()}.{time.time_ns()}.tmp")
|
|
839
|
+
try:
|
|
840
|
+
temporary.write_text(serialized, encoding="utf-8")
|
|
841
|
+
os.replace(temporary, path)
|
|
842
|
+
finally:
|
|
843
|
+
temporary.unlink(missing_ok=True)
|
|
844
|
+
|
|
845
|
+
|
|
502
846
|
def _snapshot_dynamic_skill_package(test_dir: Path, skill_hints: dict[str, Any]) -> str | None:
|
|
503
847
|
"""Copy a manifest target package and generated Node Skills into the workspace.
|
|
504
848
|
|
|
@@ -564,8 +908,9 @@ def verify_environment(project_root, request):
|
|
|
564
908
|
if _is_unit_tests_only(request.config):
|
|
565
909
|
return
|
|
566
910
|
|
|
567
|
-
|
|
568
|
-
|
|
911
|
+
from scaffold.python.utils import load_eval_environment
|
|
912
|
+
|
|
913
|
+
load_eval_environment()
|
|
569
914
|
|
|
570
915
|
# Check uv (Python package manager)
|
|
571
916
|
if shutil.which("uv") is None:
|
|
@@ -580,9 +925,7 @@ def verify_environment(project_root, request):
|
|
|
580
925
|
if os.name == "nt" and BASH_EXEC == "bash":
|
|
581
926
|
# _resolve_bash() fell back to bare "bash" — verify it actually works
|
|
582
927
|
try:
|
|
583
|
-
bash_check = subprocess.run(
|
|
584
|
-
["bash", "--version"], capture_output=True, timeout=5
|
|
585
|
-
)
|
|
928
|
+
bash_check = subprocess.run(["bash", "--version"], capture_output=True, timeout=5)
|
|
586
929
|
if bash_check.returncode != 0:
|
|
587
930
|
raise FileNotFoundError
|
|
588
931
|
except (FileNotFoundError, subprocess.TimeoutExpired):
|
|
@@ -669,6 +1012,8 @@ def setup_test_context(test_dir):
|
|
|
669
1012
|
|
|
670
1013
|
def _copy_environment(environment_dir: Path) -> None:
|
|
671
1014
|
for item in environment_dir.iterdir():
|
|
1015
|
+
if item.name in {CURRENT_COMET_CLI_MARKER, TRUSTED_NATIVE_RUNTIME_MARKER}:
|
|
1016
|
+
continue
|
|
672
1017
|
dest = test_dir / item.name
|
|
673
1018
|
if item.is_dir():
|
|
674
1019
|
if dest.exists() and dest.is_dir():
|
|
@@ -678,6 +1023,7 @@ def setup_test_context(test_dir):
|
|
|
678
1023
|
else:
|
|
679
1024
|
dest.parent.mkdir(parents=True, exist_ok=True)
|
|
680
1025
|
shutil.copy2(item, dest)
|
|
1026
|
+
_copy_current_comet_cli_snapshot(environment_dir, test_dir)
|
|
681
1027
|
|
|
682
1028
|
def _write_claude_md(content_file: str) -> None:
|
|
683
1029
|
claude_dir = test_dir / ".claude"
|
|
@@ -720,6 +1066,7 @@ def setup_test_context(test_dir):
|
|
|
720
1066
|
|
|
721
1067
|
if environment_dir and environment_dir.exists():
|
|
722
1068
|
_copy_environment(environment_dir)
|
|
1069
|
+
_copy_trusted_native_runtime_snapshot(environment_dir, test_dir, skills)
|
|
723
1070
|
|
|
724
1071
|
if claude_md:
|
|
725
1072
|
with tempfile.NamedTemporaryFile(
|
|
@@ -747,42 +1094,66 @@ def run_claude(test_dir, experiment_logger, request):
|
|
|
747
1094
|
is replaced by the multi-turn ``run-claude-loop`` driver, which simulates a
|
|
748
1095
|
user replying at the workflow's decision points.
|
|
749
1096
|
"""
|
|
750
|
-
default_model =
|
|
751
|
-
|
|
752
|
-
def _run(
|
|
1097
|
+
default_model = _selected_claude_model()
|
|
1098
|
+
|
|
1099
|
+
def _run(
|
|
1100
|
+
prompt: str,
|
|
1101
|
+
timeout: int = 600,
|
|
1102
|
+
model: str = None,
|
|
1103
|
+
interaction=None,
|
|
1104
|
+
image_id: str | None = None,
|
|
1105
|
+
):
|
|
753
1106
|
mdl = model or default_model
|
|
754
|
-
if (
|
|
755
|
-
|
|
756
|
-
and not os.environ.get("CC_LANGSMITH_LOG_FILE")
|
|
1107
|
+
if os.environ.get("TRACE_TO_LANGSMITH", "").lower() == "true" and not os.environ.get(
|
|
1108
|
+
"CC_LANGSMITH_LOG_FILE"
|
|
757
1109
|
):
|
|
758
1110
|
os.environ["CC_LANGSMITH_LOG_FILE"] = "/workspace/langsmith-hook.log"
|
|
759
1111
|
use_loop = interaction is not None and interaction.mode == "auto_user"
|
|
760
1112
|
if not use_loop:
|
|
761
|
-
result = run_claude_in_docker(
|
|
1113
|
+
result = run_claude_in_docker(
|
|
1114
|
+
test_dir,
|
|
1115
|
+
prompt,
|
|
1116
|
+
timeout=timeout,
|
|
1117
|
+
model=mdl,
|
|
1118
|
+
image_id=image_id,
|
|
1119
|
+
)
|
|
762
1120
|
else:
|
|
763
1121
|
task_prompt_file = test_dir / ".eval-task-prompt.txt"
|
|
764
1122
|
task_prompt_file.write_text(prompt, encoding="utf-8")
|
|
765
1123
|
loop_args = [
|
|
766
1124
|
"run-claude-loop",
|
|
767
1125
|
test_dir,
|
|
768
|
-
"
|
|
1126
|
+
"@//workspace/.eval-task-prompt.txt",
|
|
769
1127
|
"--max-turns",
|
|
770
1128
|
str(interaction.max_turns),
|
|
771
1129
|
]
|
|
772
1130
|
if mdl:
|
|
773
1131
|
loop_args += ["--model", mdl]
|
|
1132
|
+
if image_id:
|
|
1133
|
+
loop_args += ["--image-id", image_id]
|
|
774
1134
|
if interaction.continue_prompt:
|
|
775
1135
|
loop_args += ["--continue-prompt", interaction.continue_prompt]
|
|
776
1136
|
for pattern in interaction.decision_patterns:
|
|
777
1137
|
loop_args += ["--decision-pattern", pattern]
|
|
1138
|
+
if interaction.decision_reply:
|
|
1139
|
+
loop_args += ["--decision-reply", interaction.decision_reply]
|
|
1140
|
+
if interaction.fresh_resume_marker:
|
|
1141
|
+
loop_args += ["--fresh-resume-marker", interaction.fresh_resume_marker]
|
|
778
1142
|
|
|
779
1143
|
prompt_file = None
|
|
780
1144
|
try:
|
|
781
|
-
if interaction.simulator_prompt:
|
|
1145
|
+
if interaction.simulator_prompt and not interaction.decision_reply:
|
|
782
1146
|
prompt_file = test_dir / ".eval-simulator-prompt.txt"
|
|
783
1147
|
prompt_file.write_text(interaction.simulator_prompt, encoding="utf-8")
|
|
784
|
-
loop_args += [
|
|
785
|
-
|
|
1148
|
+
loop_args += [
|
|
1149
|
+
"--simulator-prompt-file",
|
|
1150
|
+
"//workspace/.eval-simulator-prompt.txt",
|
|
1151
|
+
]
|
|
1152
|
+
result = run_claude_loop_in_docker(
|
|
1153
|
+
test_dir,
|
|
1154
|
+
loop_args[2:],
|
|
1155
|
+
timeout=timeout + 60,
|
|
1156
|
+
)
|
|
786
1157
|
finally:
|
|
787
1158
|
task_prompt_file.unlink(missing_ok=True)
|
|
788
1159
|
if prompt_file and prompt_file.exists():
|
|
@@ -874,6 +1245,7 @@ def record_result(test_dir, experiment_logger, request):
|
|
|
874
1245
|
"profile": events.get("profile"),
|
|
875
1246
|
"skill_sources": events.get("skill_sources", []),
|
|
876
1247
|
"eval_manifest": events.get("eval_manifest"),
|
|
1248
|
+
"case_manifest": events.get("case_manifest"),
|
|
877
1249
|
"interaction": events.get("interaction", {}),
|
|
878
1250
|
"artifact_references": artifact_references,
|
|
879
1251
|
"failure_attribution": failure_attribution,
|
|
@@ -934,6 +1306,7 @@ def _build_report_payload(
|
|
|
934
1306
|
"profile": events.get("profile"),
|
|
935
1307
|
"skill_sources": events.get("skill_sources", []),
|
|
936
1308
|
"eval_manifest": events.get("eval_manifest"),
|
|
1309
|
+
"case_manifest": events.get("case_manifest"),
|
|
937
1310
|
"interaction": events.get("interaction", {}),
|
|
938
1311
|
"artifact_references": artifact_references,
|
|
939
1312
|
"failure_attribution": failure_attribution,
|
|
@@ -1028,14 +1401,25 @@ def _build_docker_image_with_lock(environment_dir: Path) -> str | None:
|
|
|
1028
1401
|
|
|
1029
1402
|
|
|
1030
1403
|
@contextmanager
|
|
1031
|
-
def file_lock(path: Path):
|
|
1404
|
+
def file_lock(path: Path, timeout: float = 600):
|
|
1032
1405
|
"""Cross-platform exclusive file lock for pytest-xdist coordination."""
|
|
1033
1406
|
path.parent.mkdir(parents=True, exist_ok=True)
|
|
1034
1407
|
with open(path, "a+b") as lock_file:
|
|
1035
1408
|
if os.name == "nt":
|
|
1036
1409
|
import msvcrt
|
|
1037
1410
|
|
|
1038
|
-
|
|
1411
|
+
deadline = time.monotonic() + timeout
|
|
1412
|
+
while True:
|
|
1413
|
+
lock_file.seek(0)
|
|
1414
|
+
try:
|
|
1415
|
+
msvcrt.locking(lock_file.fileno(), msvcrt.LK_NBLCK, 1)
|
|
1416
|
+
break
|
|
1417
|
+
except OSError as error:
|
|
1418
|
+
if error.errno not in {13, 36}:
|
|
1419
|
+
raise
|
|
1420
|
+
if time.monotonic() >= deadline:
|
|
1421
|
+
raise
|
|
1422
|
+
time.sleep(0.05)
|
|
1039
1423
|
try:
|
|
1040
1424
|
yield
|
|
1041
1425
|
finally:
|
|
@@ -1098,6 +1482,7 @@ def _save_artifacts(base_dir: Path, treatment_name: str, rep: int, test_dir: Pat
|
|
|
1098
1482
|
exclude_dirs = {
|
|
1099
1483
|
".claude",
|
|
1100
1484
|
".git",
|
|
1485
|
+
"_eval_current_comet",
|
|
1101
1486
|
"node_modules",
|
|
1102
1487
|
"__pycache__",
|
|
1103
1488
|
"scaffold",
|