@accelerator-mzq/forge 1.4.0
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 -0
- package/LICENSE-THIRD-PARTY.md +50 -0
- package/README.md +159 -0
- package/dist/cli/commands/ack.d.ts +7 -0
- package/dist/cli/commands/ack.d.ts.map +1 -0
- package/dist/cli/commands/ack.js +223 -0
- package/dist/cli/commands/ack.js.map +1 -0
- package/dist/cli/commands/archive.d.ts +44 -0
- package/dist/cli/commands/archive.d.ts.map +1 -0
- package/dist/cli/commands/archive.js +689 -0
- package/dist/cli/commands/archive.js.map +1 -0
- package/dist/cli/commands/backlog.d.ts +3 -0
- package/dist/cli/commands/backlog.d.ts.map +1 -0
- package/dist/cli/commands/backlog.js +55 -0
- package/dist/cli/commands/backlog.js.map +1 -0
- package/dist/cli/commands/config.d.ts +3 -0
- package/dist/cli/commands/config.d.ts.map +1 -0
- package/dist/cli/commands/config.js +107 -0
- package/dist/cli/commands/config.js.map +1 -0
- package/dist/cli/commands/evidence.d.ts +7 -0
- package/dist/cli/commands/evidence.d.ts.map +1 -0
- package/dist/cli/commands/evidence.js +662 -0
- package/dist/cli/commands/evidence.js.map +1 -0
- package/dist/cli/commands/finding.d.ts +3 -0
- package/dist/cli/commands/finding.d.ts.map +1 -0
- package/dist/cli/commands/finding.js +93 -0
- package/dist/cli/commands/finding.js.map +1 -0
- package/dist/cli/commands/init.d.ts +3 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +126 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/legacy-bridge.d.ts +11 -0
- package/dist/cli/commands/legacy-bridge.d.ts.map +1 -0
- package/dist/cli/commands/legacy-bridge.js +586 -0
- package/dist/cli/commands/legacy-bridge.js.map +1 -0
- package/dist/cli/commands/migrate.d.ts +3 -0
- package/dist/cli/commands/migrate.d.ts.map +1 -0
- package/dist/cli/commands/migrate.js +34 -0
- package/dist/cli/commands/migrate.js.map +1 -0
- package/dist/cli/commands/monitor.d.ts +3 -0
- package/dist/cli/commands/monitor.d.ts.map +1 -0
- package/dist/cli/commands/monitor.js +113 -0
- package/dist/cli/commands/monitor.js.map +1 -0
- package/dist/cli/commands/preflight.d.ts +7 -0
- package/dist/cli/commands/preflight.d.ts.map +1 -0
- package/dist/cli/commands/preflight.js +63 -0
- package/dist/cli/commands/preflight.js.map +1 -0
- package/dist/cli/commands/scope.d.ts +3 -0
- package/dist/cli/commands/scope.d.ts.map +1 -0
- package/dist/cli/commands/scope.js +32 -0
- package/dist/cli/commands/scope.js.map +1 -0
- package/dist/cli/commands/stage-extensions.d.ts +45 -0
- package/dist/cli/commands/stage-extensions.d.ts.map +1 -0
- package/dist/cli/commands/stage-extensions.js +590 -0
- package/dist/cli/commands/stage-extensions.js.map +1 -0
- package/dist/cli/commands/update.d.ts +3 -0
- package/dist/cli/commands/update.d.ts.map +1 -0
- package/dist/cli/commands/update.js +98 -0
- package/dist/cli/commands/update.js.map +1 -0
- package/dist/cli/commands/upgrade.d.ts +3 -0
- package/dist/cli/commands/upgrade.d.ts.map +1 -0
- package/dist/cli/commands/upgrade.js +277 -0
- package/dist/cli/commands/upgrade.js.map +1 -0
- package/dist/cli/commands/validate.d.ts +3 -0
- package/dist/cli/commands/validate.d.ts.map +1 -0
- package/dist/cli/commands/validate.js +66 -0
- package/dist/cli/commands/validate.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +69 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/core/ack-log.d.ts +107 -0
- package/dist/core/ack-log.d.ts.map +1 -0
- package/dist/core/ack-log.js +197 -0
- package/dist/core/ack-log.js.map +1 -0
- package/dist/core/archive/ack-log-consistency.d.ts +15 -0
- package/dist/core/archive/ack-log-consistency.d.ts.map +1 -0
- package/dist/core/archive/ack-log-consistency.js +164 -0
- package/dist/core/archive/ack-log-consistency.js.map +1 -0
- package/dist/core/archive/fence.d.ts +66 -0
- package/dist/core/archive/fence.d.ts.map +1 -0
- package/dist/core/archive/fence.js +218 -0
- package/dist/core/archive/fence.js.map +1 -0
- package/dist/core/archive/index.d.ts +4 -0
- package/dist/core/archive/index.d.ts.map +1 -0
- package/dist/core/archive/index.js +6 -0
- package/dist/core/archive/index.js.map +1 -0
- package/dist/core/archive/legacy-exemption.d.ts +14 -0
- package/dist/core/archive/legacy-exemption.d.ts.map +1 -0
- package/dist/core/archive/legacy-exemption.js +82 -0
- package/dist/core/archive/legacy-exemption.js.map +1 -0
- package/dist/core/archive/lock.d.ts +46 -0
- package/dist/core/archive/lock.d.ts.map +1 -0
- package/dist/core/archive/lock.js +98 -0
- package/dist/core/archive/lock.js.map +1 -0
- package/dist/core/archive/pause-decisions-fence.d.ts +13 -0
- package/dist/core/archive/pause-decisions-fence.d.ts.map +1 -0
- package/dist/core/archive/pause-decisions-fence.js +384 -0
- package/dist/core/archive/pause-decisions-fence.js.map +1 -0
- package/dist/core/archive/process-evidence-fence.d.ts +110 -0
- package/dist/core/archive/process-evidence-fence.d.ts.map +1 -0
- package/dist/core/archive/process-evidence-fence.js +449 -0
- package/dist/core/archive/process-evidence-fence.js.map +1 -0
- package/dist/core/archive/process-evidence-rerun.d.ts +9 -0
- package/dist/core/archive/process-evidence-rerun.d.ts.map +1 -0
- package/dist/core/archive/process-evidence-rerun.js +238 -0
- package/dist/core/archive/process-evidence-rerun.js.map +1 -0
- package/dist/core/archive/recover-prompt.d.ts +10 -0
- package/dist/core/archive/recover-prompt.d.ts.map +1 -0
- package/dist/core/archive/recover-prompt.js +29 -0
- package/dist/core/archive/recover-prompt.js.map +1 -0
- package/dist/core/archive/recover.d.ts +83 -0
- package/dist/core/archive/recover.d.ts.map +1 -0
- package/dist/core/archive/recover.js +219 -0
- package/dist/core/archive/recover.js.map +1 -0
- package/dist/core/archive/resume-summary.d.ts +22 -0
- package/dist/core/archive/resume-summary.d.ts.map +1 -0
- package/dist/core/archive/resume-summary.js +82 -0
- package/dist/core/archive/resume-summary.js.map +1 -0
- package/dist/core/archive/summary-builder.d.ts +28 -0
- package/dist/core/archive/summary-builder.d.ts.map +1 -0
- package/dist/core/archive/summary-builder.js +287 -0
- package/dist/core/archive/summary-builder.js.map +1 -0
- package/dist/core/archive/summary-render.d.ts +8 -0
- package/dist/core/archive/summary-render.d.ts.map +1 -0
- package/dist/core/archive/summary-render.js +64 -0
- package/dist/core/archive/summary-render.js.map +1 -0
- package/dist/core/archive/three-level-fence.d.ts +10 -0
- package/dist/core/archive/three-level-fence.d.ts.map +1 -0
- package/dist/core/archive/three-level-fence.js +93 -0
- package/dist/core/archive/three-level-fence.js.map +1 -0
- package/dist/core/archive/transaction.d.ts +41 -0
- package/dist/core/archive/transaction.d.ts.map +1 -0
- package/dist/core/archive/transaction.js +184 -0
- package/dist/core/archive/transaction.js.map +1 -0
- package/dist/core/archive/verify-findings-fence.d.ts +11 -0
- package/dist/core/archive/verify-findings-fence.d.ts.map +1 -0
- package/dist/core/archive/verify-findings-fence.js +80 -0
- package/dist/core/archive/verify-findings-fence.js.map +1 -0
- package/dist/core/archive/version-retrograde-fence.d.ts +10 -0
- package/dist/core/archive/version-retrograde-fence.d.ts.map +1 -0
- package/dist/core/archive/version-retrograde-fence.js +103 -0
- package/dist/core/archive/version-retrograde-fence.js.map +1 -0
- package/dist/core/artifact-graph/builder.d.ts +16 -0
- package/dist/core/artifact-graph/builder.d.ts.map +1 -0
- package/dist/core/artifact-graph/builder.js +32 -0
- package/dist/core/artifact-graph/builder.js.map +1 -0
- package/dist/core/artifact-graph/index.d.ts +3 -0
- package/dist/core/artifact-graph/index.d.ts.map +1 -0
- package/dist/core/artifact-graph/index.js +4 -0
- package/dist/core/artifact-graph/index.js.map +1 -0
- package/dist/core/artifact-graph/types.d.ts +14 -0
- package/dist/core/artifact-graph/types.d.ts.map +1 -0
- package/dist/core/artifact-graph/types.js +2 -0
- package/dist/core/artifact-graph/types.js.map +1 -0
- package/dist/core/backlog/assets/backlog-readme.md +11 -0
- package/dist/core/backlog/index.d.ts +20 -0
- package/dist/core/backlog/index.d.ts.map +1 -0
- package/dist/core/backlog/index.js +60 -0
- package/dist/core/backlog/index.js.map +1 -0
- package/dist/core/backlog/render.d.ts +51 -0
- package/dist/core/backlog/render.d.ts.map +1 -0
- package/dist/core/backlog/render.js +196 -0
- package/dist/core/backlog/render.js.map +1 -0
- package/dist/core/bootstrap/index.d.ts +2 -0
- package/dist/core/bootstrap/index.d.ts.map +1 -0
- package/dist/core/bootstrap/index.js +5 -0
- package/dist/core/bootstrap/index.js.map +1 -0
- package/dist/core/canonical-json.d.ts +11 -0
- package/dist/core/canonical-json.d.ts.map +1 -0
- package/dist/core/canonical-json.js +43 -0
- package/dist/core/canonical-json.js.map +1 -0
- package/dist/core/git/utils.d.ts +27 -0
- package/dist/core/git/utils.d.ts.map +1 -0
- package/dist/core/git/utils.js +53 -0
- package/dist/core/git/utils.js.map +1 -0
- package/dist/core/harness-adapters/claude.d.ts +13 -0
- package/dist/core/harness-adapters/claude.d.ts.map +1 -0
- package/dist/core/harness-adapters/claude.js +53 -0
- package/dist/core/harness-adapters/claude.js.map +1 -0
- package/dist/core/harness-adapters/codex.d.ts +14 -0
- package/dist/core/harness-adapters/codex.d.ts.map +1 -0
- package/dist/core/harness-adapters/codex.js +60 -0
- package/dist/core/harness-adapters/codex.js.map +1 -0
- package/dist/core/harness-adapters/detector.d.ts +15 -0
- package/dist/core/harness-adapters/detector.d.ts.map +1 -0
- package/dist/core/harness-adapters/detector.js +45 -0
- package/dist/core/harness-adapters/detector.js.map +1 -0
- package/dist/core/harness-adapters/hash-compare.d.ts +21 -0
- package/dist/core/harness-adapters/hash-compare.d.ts.map +1 -0
- package/dist/core/harness-adapters/hash-compare.js +49 -0
- package/dist/core/harness-adapters/hash-compare.js.map +1 -0
- package/dist/core/harness-adapters/index.d.ts +8 -0
- package/dist/core/harness-adapters/index.d.ts.map +1 -0
- package/dist/core/harness-adapters/index.js +8 -0
- package/dist/core/harness-adapters/index.js.map +1 -0
- package/dist/core/harness-adapters/interface.d.ts +52 -0
- package/dist/core/harness-adapters/interface.d.ts.map +1 -0
- package/dist/core/harness-adapters/interface.js +3 -0
- package/dist/core/harness-adapters/interface.js.map +1 -0
- package/dist/core/harness-adapters/legacy-detector.d.ts +14 -0
- package/dist/core/harness-adapters/legacy-detector.d.ts.map +1 -0
- package/dist/core/harness-adapters/legacy-detector.js +83 -0
- package/dist/core/harness-adapters/legacy-detector.js.map +1 -0
- package/dist/core/harness-adapters/transaction.d.ts +12 -0
- package/dist/core/harness-adapters/transaction.d.ts.map +1 -0
- package/dist/core/harness-adapters/transaction.js +113 -0
- package/dist/core/harness-adapters/transaction.js.map +1 -0
- package/dist/core/harness-adapters/types.d.ts +45 -0
- package/dist/core/harness-adapters/types.d.ts.map +1 -0
- package/dist/core/harness-adapters/types.js +3 -0
- package/dist/core/harness-adapters/types.js.map +1 -0
- package/dist/core/hash/content.d.ts +10 -0
- package/dist/core/hash/content.d.ts.map +1 -0
- package/dist/core/hash/content.js +131 -0
- package/dist/core/hash/content.js.map +1 -0
- package/dist/core/hash/diff.d.ts +26 -0
- package/dist/core/hash/diff.d.ts.map +1 -0
- package/dist/core/hash/diff.js +40 -0
- package/dist/core/hash/diff.js.map +1 -0
- package/dist/core/hash/index.d.ts +6 -0
- package/dist/core/hash/index.d.ts.map +1 -0
- package/dist/core/hash/index.js +7 -0
- package/dist/core/hash/index.js.map +1 -0
- package/dist/core/hash/log.d.ts +7 -0
- package/dist/core/hash/log.d.ts.map +1 -0
- package/dist/core/hash/log.js +14 -0
- package/dist/core/hash/log.js.map +1 -0
- package/dist/core/hash/tasks.d.ts +9 -0
- package/dist/core/hash/tasks.d.ts.map +1 -0
- package/dist/core/hash/tasks.js +20 -0
- package/dist/core/hash/tasks.js.map +1 -0
- package/dist/core/legacy-bridge/ack.d.ts +30 -0
- package/dist/core/legacy-bridge/ack.d.ts.map +1 -0
- package/dist/core/legacy-bridge/ack.js +133 -0
- package/dist/core/legacy-bridge/ack.js.map +1 -0
- package/dist/core/legacy-bridge/anchors.d.ts +15 -0
- package/dist/core/legacy-bridge/anchors.d.ts.map +1 -0
- package/dist/core/legacy-bridge/anchors.js +119 -0
- package/dist/core/legacy-bridge/anchors.js.map +1 -0
- package/dist/core/legacy-bridge/budget.d.ts +39 -0
- package/dist/core/legacy-bridge/budget.d.ts.map +1 -0
- package/dist/core/legacy-bridge/budget.js +83 -0
- package/dist/core/legacy-bridge/budget.js.map +1 -0
- package/dist/core/legacy-bridge/conflict.d.ts +44 -0
- package/dist/core/legacy-bridge/conflict.d.ts.map +1 -0
- package/dist/core/legacy-bridge/conflict.js +105 -0
- package/dist/core/legacy-bridge/conflict.js.map +1 -0
- package/dist/core/legacy-bridge/diff-report.d.ts +14 -0
- package/dist/core/legacy-bridge/diff-report.d.ts.map +1 -0
- package/dist/core/legacy-bridge/diff-report.js +105 -0
- package/dist/core/legacy-bridge/diff-report.js.map +1 -0
- package/dist/core/legacy-bridge/encoding.d.ts +42 -0
- package/dist/core/legacy-bridge/encoding.d.ts.map +1 -0
- package/dist/core/legacy-bridge/encoding.js +104 -0
- package/dist/core/legacy-bridge/encoding.js.map +1 -0
- package/dist/core/legacy-bridge/excel.d.ts +32 -0
- package/dist/core/legacy-bridge/excel.d.ts.map +1 -0
- package/dist/core/legacy-bridge/excel.js +124 -0
- package/dist/core/legacy-bridge/excel.js.map +1 -0
- package/dist/core/legacy-bridge/hash-anchor.d.ts +23 -0
- package/dist/core/legacy-bridge/hash-anchor.d.ts.map +1 -0
- package/dist/core/legacy-bridge/hash-anchor.js +55 -0
- package/dist/core/legacy-bridge/hash-anchor.js.map +1 -0
- package/dist/core/legacy-bridge/indexer.d.ts +28 -0
- package/dist/core/legacy-bridge/indexer.d.ts.map +1 -0
- package/dist/core/legacy-bridge/indexer.js +145 -0
- package/dist/core/legacy-bridge/indexer.js.map +1 -0
- package/dist/core/legacy-bridge/mapper.d.ts +40 -0
- package/dist/core/legacy-bridge/mapper.d.ts.map +1 -0
- package/dist/core/legacy-bridge/mapper.js +241 -0
- package/dist/core/legacy-bridge/mapper.js.map +1 -0
- package/dist/core/legacy-bridge/quality-judge.d.ts +65 -0
- package/dist/core/legacy-bridge/quality-judge.d.ts.map +1 -0
- package/dist/core/legacy-bridge/quality-judge.js +277 -0
- package/dist/core/legacy-bridge/quality-judge.js.map +1 -0
- package/dist/core/legacy-bridge/redact.d.ts +28 -0
- package/dist/core/legacy-bridge/redact.d.ts.map +1 -0
- package/dist/core/legacy-bridge/redact.js +121 -0
- package/dist/core/legacy-bridge/redact.js.map +1 -0
- package/dist/core/legacy-bridge/regenerator.d.ts +50 -0
- package/dist/core/legacy-bridge/regenerator.d.ts.map +1 -0
- package/dist/core/legacy-bridge/regenerator.js +193 -0
- package/dist/core/legacy-bridge/regenerator.js.map +1 -0
- package/dist/core/legacy-bridge/resolve.d.ts +28 -0
- package/dist/core/legacy-bridge/resolve.d.ts.map +1 -0
- package/dist/core/legacy-bridge/resolve.js +75 -0
- package/dist/core/legacy-bridge/resolve.js.map +1 -0
- package/dist/core/legacy-bridge/sync-check.d.ts +47 -0
- package/dist/core/legacy-bridge/sync-check.d.ts.map +1 -0
- package/dist/core/legacy-bridge/sync-check.js +198 -0
- package/dist/core/legacy-bridge/sync-check.js.map +1 -0
- package/dist/core/legacy-bridge/types.d.ts +114 -0
- package/dist/core/legacy-bridge/types.d.ts.map +1 -0
- package/dist/core/legacy-bridge/types.js +4 -0
- package/dist/core/legacy-bridge/types.js.map +1 -0
- package/dist/core/markers/index.d.ts +3 -0
- package/dist/core/markers/index.d.ts.map +1 -0
- package/dist/core/markers/index.js +3 -0
- package/dist/core/markers/index.js.map +1 -0
- package/dist/core/markers/parse.d.ts +12 -0
- package/dist/core/markers/parse.d.ts.map +1 -0
- package/dist/core/markers/parse.js +31 -0
- package/dist/core/markers/parse.js.map +1 -0
- package/dist/core/markers/types.d.ts +142 -0
- package/dist/core/markers/types.d.ts.map +1 -0
- package/dist/core/markers/types.js +3 -0
- package/dist/core/markers/types.js.map +1 -0
- package/dist/core/migrate/ack.d.ts +13 -0
- package/dist/core/migrate/ack.d.ts.map +1 -0
- package/dist/core/migrate/ack.js +62 -0
- package/dist/core/migrate/ack.js.map +1 -0
- package/dist/core/migrate/archive-detect.d.ts +19 -0
- package/dist/core/migrate/archive-detect.d.ts.map +1 -0
- package/dist/core/migrate/archive-detect.js +89 -0
- package/dist/core/migrate/archive-detect.js.map +1 -0
- package/dist/core/migrate/budget.d.ts +7 -0
- package/dist/core/migrate/budget.d.ts.map +1 -0
- package/dist/core/migrate/budget.js +25 -0
- package/dist/core/migrate/budget.js.map +1 -0
- package/dist/core/migrate/conflict.d.ts +49 -0
- package/dist/core/migrate/conflict.d.ts.map +1 -0
- package/dist/core/migrate/conflict.js +99 -0
- package/dist/core/migrate/conflict.js.map +1 -0
- package/dist/core/migrate/index.d.ts +7 -0
- package/dist/core/migrate/index.d.ts.map +1 -0
- package/dist/core/migrate/index.js +389 -0
- package/dist/core/migrate/index.js.map +1 -0
- package/dist/core/migrate/markdown-aware.d.ts +27 -0
- package/dist/core/migrate/markdown-aware.d.ts.map +1 -0
- package/dist/core/migrate/markdown-aware.js +112 -0
- package/dist/core/migrate/markdown-aware.js.map +1 -0
- package/dist/core/migrate/quality.d.ts +66 -0
- package/dist/core/migrate/quality.d.ts.map +1 -0
- package/dist/core/migrate/quality.js +302 -0
- package/dist/core/migrate/quality.js.map +1 -0
- package/dist/core/migrate/regenerate.d.ts +24 -0
- package/dist/core/migrate/regenerate.d.ts.map +1 -0
- package/dist/core/migrate/regenerate.js +145 -0
- package/dist/core/migrate/regenerate.js.map +1 -0
- package/dist/core/migrate/report.d.ts +36 -0
- package/dist/core/migrate/report.d.ts.map +1 -0
- package/dist/core/migrate/report.js +154 -0
- package/dist/core/migrate/report.js.map +1 -0
- package/dist/core/migrate/sources/index.d.ts +4 -0
- package/dist/core/migrate/sources/index.d.ts.map +1 -0
- package/dist/core/migrate/sources/index.js +17 -0
- package/dist/core/migrate/sources/index.js.map +1 -0
- package/dist/core/migrate/sources/openspec.d.ts +14 -0
- package/dist/core/migrate/sources/openspec.d.ts.map +1 -0
- package/dist/core/migrate/sources/openspec.js +453 -0
- package/dist/core/migrate/sources/openspec.js.map +1 -0
- package/dist/core/migrate/sources/superpowers.d.ts +12 -0
- package/dist/core/migrate/sources/superpowers.d.ts.map +1 -0
- package/dist/core/migrate/sources/superpowers.js +310 -0
- package/dist/core/migrate/sources/superpowers.js.map +1 -0
- package/dist/core/migrate/types.d.ts +183 -0
- package/dist/core/migrate/types.d.ts.map +1 -0
- package/dist/core/migrate/types.js +5 -0
- package/dist/core/migrate/types.js.map +1 -0
- package/dist/core/migrate/utils.d.ts +2 -0
- package/dist/core/migrate/utils.d.ts.map +1 -0
- package/dist/core/migrate/utils.js +28 -0
- package/dist/core/migrate/utils.js.map +1 -0
- package/dist/core/monitor/artifact-observer.d.ts +9 -0
- package/dist/core/monitor/artifact-observer.d.ts.map +1 -0
- package/dist/core/monitor/artifact-observer.js +180 -0
- package/dist/core/monitor/artifact-observer.js.map +1 -0
- package/dist/core/monitor/config.d.ts +16 -0
- package/dist/core/monitor/config.d.ts.map +1 -0
- package/dist/core/monitor/config.js +48 -0
- package/dist/core/monitor/config.js.map +1 -0
- package/dist/core/monitor/divergence-map.d.ts +5 -0
- package/dist/core/monitor/divergence-map.d.ts.map +1 -0
- package/dist/core/monitor/divergence-map.js +92 -0
- package/dist/core/monitor/divergence-map.js.map +1 -0
- package/dist/core/monitor/exit-handler.d.ts +6 -0
- package/dist/core/monitor/exit-handler.d.ts.map +1 -0
- package/dist/core/monitor/exit-handler.js +27 -0
- package/dist/core/monitor/exit-handler.js.map +1 -0
- package/dist/core/monitor/health-verdict.d.ts +9 -0
- package/dist/core/monitor/health-verdict.d.ts.map +1 -0
- package/dist/core/monitor/health-verdict.js +55 -0
- package/dist/core/monitor/health-verdict.js.map +1 -0
- package/dist/core/monitor/report-renderer.d.ts +4 -0
- package/dist/core/monitor/report-renderer.d.ts.map +1 -0
- package/dist/core/monitor/report-renderer.js +82 -0
- package/dist/core/monitor/report-renderer.js.map +1 -0
- package/dist/core/monitor/trace-store.d.ts +39 -0
- package/dist/core/monitor/trace-store.d.ts.map +1 -0
- package/dist/core/monitor/trace-store.js +130 -0
- package/dist/core/monitor/trace-store.js.map +1 -0
- package/dist/core/monitor/types.d.ts +63 -0
- package/dist/core/monitor/types.d.ts.map +1 -0
- package/dist/core/monitor/types.js +26 -0
- package/dist/core/monitor/types.js.map +1 -0
- package/dist/core/parse/design.d.ts +14 -0
- package/dist/core/parse/design.d.ts.map +1 -0
- package/dist/core/parse/design.js +17 -0
- package/dist/core/parse/design.js.map +1 -0
- package/dist/core/parse/fenced-yaml.d.ts +18 -0
- package/dist/core/parse/fenced-yaml.d.ts.map +1 -0
- package/dist/core/parse/fenced-yaml.js +45 -0
- package/dist/core/parse/fenced-yaml.js.map +1 -0
- package/dist/core/parse/index.d.ts +7 -0
- package/dist/core/parse/index.d.ts.map +1 -0
- package/dist/core/parse/index.js +8 -0
- package/dist/core/parse/index.js.map +1 -0
- package/dist/core/parse/markdown.d.ts +30 -0
- package/dist/core/parse/markdown.d.ts.map +1 -0
- package/dist/core/parse/markdown.js +66 -0
- package/dist/core/parse/markdown.js.map +1 -0
- package/dist/core/parse/proposal.d.ts +18 -0
- package/dist/core/parse/proposal.d.ts.map +1 -0
- package/dist/core/parse/proposal.js +22 -0
- package/dist/core/parse/proposal.js.map +1 -0
- package/dist/core/parse/specs.d.ts +25 -0
- package/dist/core/parse/specs.d.ts.map +1 -0
- package/dist/core/parse/specs.js +58 -0
- package/dist/core/parse/specs.js.map +1 -0
- package/dist/core/parse/tasks.d.ts +33 -0
- package/dist/core/parse/tasks.d.ts.map +1 -0
- package/dist/core/parse/tasks.js +82 -0
- package/dist/core/parse/tasks.js.map +1 -0
- package/dist/core/parse/yaml.d.ts +13 -0
- package/dist/core/parse/yaml.d.ts.map +1 -0
- package/dist/core/parse/yaml.js +39 -0
- package/dist/core/parse/yaml.js.map +1 -0
- package/dist/core/process-evidence-freeze-warnings.d.ts +24 -0
- package/dist/core/process-evidence-freeze-warnings.d.ts.map +1 -0
- package/dist/core/process-evidence-freeze-warnings.js +153 -0
- package/dist/core/process-evidence-freeze-warnings.js.map +1 -0
- package/dist/core/schema/index.d.ts +5 -0
- package/dist/core/schema/index.d.ts.map +1 -0
- package/dist/core/schema/index.js +6 -0
- package/dist/core/schema/index.js.map +1 -0
- package/dist/core/schema/model-tiers-config.d.ts +41 -0
- package/dist/core/schema/model-tiers-config.d.ts.map +1 -0
- package/dist/core/schema/model-tiers-config.js +85 -0
- package/dist/core/schema/model-tiers-config.js.map +1 -0
- package/dist/core/schema/process-verification-config.d.ts +18 -0
- package/dist/core/schema/process-verification-config.d.ts.map +1 -0
- package/dist/core/schema/process-verification-config.js +74 -0
- package/dist/core/schema/process-verification-config.js.map +1 -0
- package/dist/core/schema/stage-extensions-config.d.ts +28 -0
- package/dist/core/schema/stage-extensions-config.d.ts.map +1 -0
- package/dist/core/schema/stage-extensions-config.js +228 -0
- package/dist/core/schema/stage-extensions-config.js.map +1 -0
- package/dist/core/schema/types.d.ts +262 -0
- package/dist/core/schema/types.d.ts.map +1 -0
- package/dist/core/schema/types.js +51 -0
- package/dist/core/schema/types.js.map +1 -0
- package/dist/core/schema/writing-plans-config.d.ts +11 -0
- package/dist/core/schema/writing-plans-config.d.ts.map +1 -0
- package/dist/core/schema/writing-plans-config.js +40 -0
- package/dist/core/schema/writing-plans-config.js.map +1 -0
- package/dist/core/schemas/archive-summary.d.ts +131 -0
- package/dist/core/schemas/archive-summary.d.ts.map +1 -0
- package/dist/core/schemas/archive-summary.js +31 -0
- package/dist/core/schemas/archive-summary.js.map +1 -0
- package/dist/core/schemas/process-evidence.d.ts +156 -0
- package/dist/core/schemas/process-evidence.d.ts.map +1 -0
- package/dist/core/schemas/process-evidence.js +12 -0
- package/dist/core/schemas/process-evidence.js.map +1 -0
- package/dist/core/schemas/scope-entries.d.ts +68 -0
- package/dist/core/schemas/scope-entries.d.ts.map +1 -0
- package/dist/core/schemas/scope-entries.js +47 -0
- package/dist/core/schemas/scope-entries.js.map +1 -0
- package/dist/core/schemas/severity.d.ts +58 -0
- package/dist/core/schemas/severity.d.ts.map +1 -0
- package/dist/core/schemas/severity.js +26 -0
- package/dist/core/schemas/severity.js.map +1 -0
- package/dist/core/scope/aggregator.d.ts +49 -0
- package/dist/core/scope/aggregator.d.ts.map +1 -0
- package/dist/core/scope/aggregator.js +141 -0
- package/dist/core/scope/aggregator.js.map +1 -0
- package/dist/core/scope/index.d.ts +2 -0
- package/dist/core/scope/index.d.ts.map +1 -0
- package/dist/core/scope/index.js +2 -0
- package/dist/core/scope/index.js.map +1 -0
- package/dist/core/specs-sync/apply.d.ts +8 -0
- package/dist/core/specs-sync/apply.d.ts.map +1 -0
- package/dist/core/specs-sync/apply.js +26 -0
- package/dist/core/specs-sync/apply.js.map +1 -0
- package/dist/core/specs-sync/deltas.d.ts +15 -0
- package/dist/core/specs-sync/deltas.d.ts.map +1 -0
- package/dist/core/specs-sync/deltas.js +27 -0
- package/dist/core/specs-sync/deltas.js.map +1 -0
- package/dist/core/specs-sync/index.d.ts +3 -0
- package/dist/core/specs-sync/index.d.ts.map +1 -0
- package/dist/core/specs-sync/index.js +4 -0
- package/dist/core/specs-sync/index.js.map +1 -0
- package/dist/core/stage-extensions/convergence-judge.d.ts +35 -0
- package/dist/core/stage-extensions/convergence-judge.d.ts.map +1 -0
- package/dist/core/stage-extensions/convergence-judge.js +47 -0
- package/dist/core/stage-extensions/convergence-judge.js.map +1 -0
- package/dist/core/stage-extensions/index.d.ts +13 -0
- package/dist/core/stage-extensions/index.d.ts.map +1 -0
- package/dist/core/stage-extensions/index.js +11 -0
- package/dist/core/stage-extensions/index.js.map +1 -0
- package/dist/core/stage-extensions/output-watcher.d.ts +93 -0
- package/dist/core/stage-extensions/output-watcher.d.ts.map +1 -0
- package/dist/core/stage-extensions/output-watcher.js +163 -0
- package/dist/core/stage-extensions/output-watcher.js.map +1 -0
- package/dist/core/stage-extensions/severity-mapper.d.ts +21 -0
- package/dist/core/stage-extensions/severity-mapper.d.ts.map +1 -0
- package/dist/core/stage-extensions/severity-mapper.js +26 -0
- package/dist/core/stage-extensions/severity-mapper.js.map +1 -0
- package/dist/core/stage-extensions/state-machine.d.ts +43 -0
- package/dist/core/stage-extensions/state-machine.d.ts.map +1 -0
- package/dist/core/stage-extensions/state-machine.js +19 -0
- package/dist/core/stage-extensions/state-machine.js.map +1 -0
- package/dist/core/stage-extensions/thread-map.d.ts +60 -0
- package/dist/core/stage-extensions/thread-map.d.ts.map +1 -0
- package/dist/core/stage-extensions/thread-map.js +107 -0
- package/dist/core/stage-extensions/thread-map.js.map +1 -0
- package/dist/core/stage-extensions/trend-analyzer.d.ts +29 -0
- package/dist/core/stage-extensions/trend-analyzer.d.ts.map +1 -0
- package/dist/core/stage-extensions/trend-analyzer.js +60 -0
- package/dist/core/stage-extensions/trend-analyzer.js.map +1 -0
- package/dist/core/stage-extensions/types.d.ts +39 -0
- package/dist/core/stage-extensions/types.d.ts.map +1 -0
- package/dist/core/stage-extensions/types.js +5 -0
- package/dist/core/stage-extensions/types.js.map +1 -0
- package/dist/core/staging-lock.d.ts +36 -0
- package/dist/core/staging-lock.d.ts.map +1 -0
- package/dist/core/staging-lock.js +122 -0
- package/dist/core/staging-lock.js.map +1 -0
- package/dist/core/templates/commands/ack-confirm.md +32 -0
- package/dist/core/templates/commands/apply.md +220 -0
- package/dist/core/templates/commands/archive.md +178 -0
- package/dist/core/templates/commands/brainstorm.md +58 -0
- package/dist/core/templates/commands/codex-adversarial.md +95 -0
- package/dist/core/templates/commands/explore.md +29 -0
- package/dist/core/templates/commands/index.d.ts +12 -0
- package/dist/core/templates/commands/index.d.ts.map +1 -0
- package/dist/core/templates/commands/index.js +26 -0
- package/dist/core/templates/commands/index.js.map +1 -0
- package/dist/core/templates/commands/propose.md +90 -0
- package/dist/core/templates/commands/review.md +105 -0
- package/dist/core/templates/commands/upgrade.md +58 -0
- package/dist/core/templates/commands/verify.md +186 -0
- package/dist/core/templates/index.d.ts +3 -0
- package/dist/core/templates/index.d.ts.map +1 -0
- package/dist/core/templates/index.js +5 -0
- package/dist/core/templates/index.js.map +1 -0
- package/dist/core/templates/skills/_shared/scope-category-guidance.md +40 -0
- package/dist/core/templates/skills/brainstorming.md +161 -0
- package/dist/core/templates/skills/dispatching-parallel-agents.md +209 -0
- package/dist/core/templates/skills/exploring.md +476 -0
- package/dist/core/templates/skills/finishing-a-development-branch.md +251 -0
- package/dist/core/templates/skills/index.d.ts +17 -0
- package/dist/core/templates/skills/index.d.ts.map +1 -0
- package/dist/core/templates/skills/index.js +53 -0
- package/dist/core/templates/skills/index.js.map +1 -0
- package/dist/core/templates/skills/process-evidence.md +146 -0
- package/dist/core/templates/skills/receiving-code-review.md +294 -0
- package/dist/core/templates/skills/requesting-code-review.md +108 -0
- package/dist/core/templates/skills/subagent-driven-development.md +405 -0
- package/dist/core/templates/skills/subagent-driven-discipline/references/codex-tools.md +72 -0
- package/dist/core/templates/skills/subagent-driven-discipline/references/opencode-tools.md +104 -0
- package/dist/core/templates/skills/subagent-driven-discipline.md +725 -0
- package/dist/core/templates/skills/systematic-debugging.md +297 -0
- package/dist/core/templates/skills/test-driven-development.md +402 -0
- package/dist/core/templates/skills/using-forge.md +163 -0
- package/dist/core/templates/skills/using-git-worktrees.md +229 -0
- package/dist/core/templates/skills/verification-before-completion.md +175 -0
- package/dist/core/templates/skills/verifying-three-dimensions.md +245 -0
- package/dist/core/templates/skills/writing-plans.md +259 -0
- package/dist/core/templates/skills/writing-skills.md +214 -0
- package/dist/core/test-reporters/index.d.ts +41 -0
- package/dist/core/test-reporters/index.d.ts.map +1 -0
- package/dist/core/test-reporters/index.js +39 -0
- package/dist/core/test-reporters/index.js.map +1 -0
- package/dist/core/test-reporters/junit.d.ts +8 -0
- package/dist/core/test-reporters/junit.d.ts.map +1 -0
- package/dist/core/test-reporters/junit.js +94 -0
- package/dist/core/test-reporters/junit.js.map +1 -0
- package/dist/core/test-reporters/tap.d.ts +18 -0
- package/dist/core/test-reporters/tap.d.ts.map +1 -0
- package/dist/core/test-reporters/tap.js +73 -0
- package/dist/core/test-reporters/tap.js.map +1 -0
- package/dist/core/test-reporters/vitest-json.d.ts +8 -0
- package/dist/core/test-reporters/vitest-json.d.ts.map +1 -0
- package/dist/core/test-reporters/vitest-json.js +56 -0
- package/dist/core/test-reporters/vitest-json.js.map +1 -0
- package/dist/core/upgrade/resign-markers.d.ts +14 -0
- package/dist/core/upgrade/resign-markers.d.ts.map +1 -0
- package/dist/core/upgrade/resign-markers.js +245 -0
- package/dist/core/upgrade/resign-markers.js.map +1 -0
- package/dist/core/validate/archive-summary-schema.d.ts +8 -0
- package/dist/core/validate/archive-summary-schema.d.ts.map +1 -0
- package/dist/core/validate/archive-summary-schema.js +186 -0
- package/dist/core/validate/archive-summary-schema.js.map +1 -0
- package/dist/core/validate/auto-findings.d.ts +36 -0
- package/dist/core/validate/auto-findings.d.ts.map +1 -0
- package/dist/core/validate/auto-findings.js +38 -0
- package/dist/core/validate/auto-findings.js.map +1 -0
- package/dist/core/validate/candidate-validators.d.ts +22 -0
- package/dist/core/validate/candidate-validators.d.ts.map +1 -0
- package/dist/core/validate/candidate-validators.js +46 -0
- package/dist/core/validate/candidate-validators.js.map +1 -0
- package/dist/core/validate/change.d.ts +3 -0
- package/dist/core/validate/change.d.ts.map +1 -0
- package/dist/core/validate/change.js +205 -0
- package/dist/core/validate/change.js.map +1 -0
- package/dist/core/validate/coverage-gap.d.ts +37 -0
- package/dist/core/validate/coverage-gap.d.ts.map +1 -0
- package/dist/core/validate/coverage-gap.js +181 -0
- package/dist/core/validate/coverage-gap.js.map +1 -0
- package/dist/core/validate/finding-hash.d.ts +14 -0
- package/dist/core/validate/finding-hash.d.ts.map +1 -0
- package/dist/core/validate/finding-hash.js +29 -0
- package/dist/core/validate/finding-hash.js.map +1 -0
- package/dist/core/validate/index.d.ts +15 -0
- package/dist/core/validate/index.d.ts.map +1 -0
- package/dist/core/validate/index.js +19 -0
- package/dist/core/validate/index.js.map +1 -0
- package/dist/core/validate/marker-integrity.d.ts +28 -0
- package/dist/core/validate/marker-integrity.d.ts.map +1 -0
- package/dist/core/validate/marker-integrity.js +170 -0
- package/dist/core/validate/marker-integrity.js.map +1 -0
- package/dist/core/validate/marker-schema.d.ts +10 -0
- package/dist/core/validate/marker-schema.d.ts.map +1 -0
- package/dist/core/validate/marker-schema.js +661 -0
- package/dist/core/validate/marker-schema.js.map +1 -0
- package/dist/core/validate/orphan-tmp.d.ts +13 -0
- package/dist/core/validate/orphan-tmp.d.ts.map +1 -0
- package/dist/core/validate/orphan-tmp.js +49 -0
- package/dist/core/validate/orphan-tmp.js.map +1 -0
- package/dist/core/validate/proposal.d.ts +4 -0
- package/dist/core/validate/proposal.d.ts.map +1 -0
- package/dist/core/validate/proposal.js +40 -0
- package/dist/core/validate/proposal.js.map +1 -0
- package/dist/core/validate/scope-entries.d.ts +23 -0
- package/dist/core/validate/scope-entries.d.ts.map +1 -0
- package/dist/core/validate/scope-entries.js +108 -0
- package/dist/core/validate/scope-entries.js.map +1 -0
- package/dist/core/validate/specs.d.ts +4 -0
- package/dist/core/validate/specs.d.ts.map +1 -0
- package/dist/core/validate/specs.js +74 -0
- package/dist/core/validate/specs.js.map +1 -0
- package/dist/core/validate/tasks.d.ts +4 -0
- package/dist/core/validate/tasks.d.ts.map +1 -0
- package/dist/core/validate/tasks.js +48 -0
- package/dist/core/validate/tasks.js.map +1 -0
- package/dist/core/validate/test-failure-stub.d.ts +23 -0
- package/dist/core/validate/test-failure-stub.d.ts.map +1 -0
- package/dist/core/validate/test-failure-stub.js +21 -0
- package/dist/core/validate/test-failure-stub.js.map +1 -0
- package/dist/core/validate/types.d.ts +33 -0
- package/dist/core/validate/types.d.ts.map +1 -0
- package/dist/core/validate/types.js +20 -0
- package/dist/core/validate/types.js.map +1 -0
- package/dist/core/worktree.d.ts +52 -0
- package/dist/core/worktree.d.ts.map +1 -0
- package/dist/core/worktree.js +145 -0
- package/dist/core/worktree.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -0
- package/package.json +82 -0
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
// src/core/migrate/quality.ts
|
|
2
|
+
// quality:facts 抽取 + judge + callAnthropic 封装 — Plan 8e Task 5.3-5.9
|
|
3
|
+
// 对应 spec §2.8 步骤 6-7 + M15 facts 目标分桶 + M9 不复用 legacy-bridge quality
|
|
4
|
+
// ============================================================================
|
|
5
|
+
// Errors
|
|
6
|
+
// ============================================================================
|
|
7
|
+
/** abort 后 SDK 抛错统一映射类型(spec §2.8 v4 修订) */
|
|
8
|
+
export class AbortInterrupted extends Error {
|
|
9
|
+
constructor() {
|
|
10
|
+
super('LLM call interrupted by AbortController');
|
|
11
|
+
this.name = 'AbortInterrupted';
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
/** quality 失败:facts 不足 / parse 错 / fidelity 低 */
|
|
15
|
+
export class QualityFailure extends Error {
|
|
16
|
+
reason;
|
|
17
|
+
constructor(reason) {
|
|
18
|
+
super(`quality fail: ${reason}`);
|
|
19
|
+
this.reason = reason;
|
|
20
|
+
this.name = 'QualityFailure';
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
// ============================================================================
|
|
24
|
+
// 模型常量
|
|
25
|
+
// ============================================================================
|
|
26
|
+
// quality(extract + judge)用 sonnet(快+便宜),实际生成走 opus 在 regenerate.ts
|
|
27
|
+
const QUALITY_MODEL = 'claude-sonnet-4-6';
|
|
28
|
+
// spec M15 v3 阈值:< 5 条 facts 视为信息密度不足,直接 fail
|
|
29
|
+
const MIN_FACTS = 5;
|
|
30
|
+
// ============================================================================
|
|
31
|
+
// Task 5.3:callAnthropic({signal}) 统一封装
|
|
32
|
+
// ============================================================================
|
|
33
|
+
/**
|
|
34
|
+
* 统一封装 SDK 调用:transient AbortError → AbortInterrupted。
|
|
35
|
+
* 注意:input.signal 必传,中断信号穿透到 SDK 层。
|
|
36
|
+
*/
|
|
37
|
+
export async function callAnthropic(client, input) {
|
|
38
|
+
try {
|
|
39
|
+
const result = await client.messages.create({
|
|
40
|
+
model: input.model,
|
|
41
|
+
max_tokens: input.maxTokens,
|
|
42
|
+
messages: [{ role: 'user', content: input.prompt }],
|
|
43
|
+
}, { signal: input.signal });
|
|
44
|
+
// TS strict 下 content 是 union ContentBlock[];用 type guard narrow 到 TextBlock
|
|
45
|
+
const block = result.content.find((b) => b.type === 'text');
|
|
46
|
+
return block?.text ?? '';
|
|
47
|
+
}
|
|
48
|
+
catch (err) {
|
|
49
|
+
const name = err.name;
|
|
50
|
+
// SDK 抛 AbortError 或 signal 已 abort → 统一映射 AbortInterrupted
|
|
51
|
+
if (name === 'AbortError' || input.signal.aborted) {
|
|
52
|
+
throw new AbortInterrupted();
|
|
53
|
+
}
|
|
54
|
+
throw err;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
// ============================================================================
|
|
58
|
+
// 通用 facts 解析(容忍 ```json fence + 去重 + MIN_FACTS 阈值)
|
|
59
|
+
// ============================================================================
|
|
60
|
+
/** 容忍 LLM ```json 包裹 + 解析 JSON 数组 + 去重 + 阈值检查 */
|
|
61
|
+
function parseFactsResponse(text) {
|
|
62
|
+
// 容忍 ```json fence(legacy-bridge I-3 修)
|
|
63
|
+
const cleaned = text
|
|
64
|
+
.trim()
|
|
65
|
+
.replace(/^```(?:json|JSON)?\r?\n/, '')
|
|
66
|
+
.replace(/\r?\n```\s*$/, '')
|
|
67
|
+
.trim();
|
|
68
|
+
let parsed;
|
|
69
|
+
try {
|
|
70
|
+
parsed = JSON.parse(cleaned);
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
throw new QualityFailure('parse-error');
|
|
74
|
+
}
|
|
75
|
+
if (!Array.isArray(parsed))
|
|
76
|
+
throw new QualityFailure('parse-error');
|
|
77
|
+
// 字段宽松解析 + 默认值兜底
|
|
78
|
+
const facts = parsed
|
|
79
|
+
.map((item) => {
|
|
80
|
+
const o = item;
|
|
81
|
+
return {
|
|
82
|
+
text: typeof o.text === 'string' ? o.text : '',
|
|
83
|
+
section: typeof o.section === 'string' ? o.section : '(unstructured)',
|
|
84
|
+
critical: typeof o.critical === 'boolean' ? o.critical : false,
|
|
85
|
+
};
|
|
86
|
+
})
|
|
87
|
+
.filter((f) => f.text.trim().length > 0);
|
|
88
|
+
// 重复 facts 去重(text 小写完全相等去重 — 简化策略,任务 5.7)
|
|
89
|
+
const seen = new Set();
|
|
90
|
+
const unique = facts.filter((f) => {
|
|
91
|
+
const key = f.text.toLowerCase().trim();
|
|
92
|
+
if (seen.has(key))
|
|
93
|
+
return false;
|
|
94
|
+
seen.add(key);
|
|
95
|
+
return true;
|
|
96
|
+
});
|
|
97
|
+
// 任务 5.10:< 5 条直接 fail(spec M15 v3 阈值)
|
|
98
|
+
if (unique.length < MIN_FACTS) {
|
|
99
|
+
throw new QualityFailure('too-few-facts');
|
|
100
|
+
}
|
|
101
|
+
return unique;
|
|
102
|
+
}
|
|
103
|
+
// ============================================================================
|
|
104
|
+
// 三套 prompt(Task 5.4-5.6)— positive/negative examples 区分
|
|
105
|
+
// ============================================================================
|
|
106
|
+
// Task 5.4 — 通用 extractFacts(给 OpenSpec 已有件,无目标分桶)
|
|
107
|
+
const EXTRACT_FACTS_PROMPT = (content, n) => `从下面"原文"中抽出最多 ${n} 条关键事实。
|
|
108
|
+
关键事实定义:数字 / 字段约束 / 业务规则 / 合规条款 / 设计决策 / 接口契约 / 错误码。
|
|
109
|
+
每条 fact 必须是单句、可独立验证的陈述。
|
|
110
|
+
|
|
111
|
+
# 输出格式(严格 JSON 数组)
|
|
112
|
+
每项含 { "text": string, "section": string, "critical": boolean }
|
|
113
|
+
- text:简短陈述(<= 80 字),保留原文中的具体数值 / 字段名
|
|
114
|
+
- section:原文中所属章节锚(如 "§4.5" 或 "## 接口";若无章节,填 "(unstructured)")
|
|
115
|
+
- critical:true 仅当该事实属于合规 / 安全 / 业务硬约束;其余 false
|
|
116
|
+
|
|
117
|
+
# 抽取标准
|
|
118
|
+
positive(应抽):
|
|
119
|
+
- "rate-limit:每用户 60 req/min"(数值约束)
|
|
120
|
+
- "字段 user_id 必须 UUID v4"(字段约束)
|
|
121
|
+
- "PII 数据不落盘"(合规)
|
|
122
|
+
|
|
123
|
+
negative(不抽):
|
|
124
|
+
- "本系统采用微服务架构"(过泛,无可验证陈述)
|
|
125
|
+
- "团队约定使用 TypeScript"(开发约定,非业务事实)
|
|
126
|
+
- "// TODO: 后面优化"(注释非事实)
|
|
127
|
+
|
|
128
|
+
# 原文
|
|
129
|
+
${content}
|
|
130
|
+
|
|
131
|
+
仅输出 JSON 数组,不输出 preamble、不带 markdown code fence。`;
|
|
132
|
+
// Task 5.5 — extractMotivationFacts(design → proposal 校验)
|
|
133
|
+
// M15 facts 目标分桶:proposal 关注"问题/动机/约束",不进实现细节
|
|
134
|
+
const EXTRACT_MOTIVATION_PROMPT = (designContent) => `从下面"design 文档"中**只抽取"问题 / 动机 / 约束 / 背景"类事实**。
|
|
135
|
+
用途:验证后续生成的 proposal.md 是否完整覆盖动机。
|
|
136
|
+
**严格按目标分桶过滤,实现层细节不要进来**。
|
|
137
|
+
|
|
138
|
+
# 抽取标准
|
|
139
|
+
|
|
140
|
+
positive(应抽 — 动机 / 约束 / 背景):
|
|
141
|
+
- "用户当前无法 X,需 Y 因为 Z"(动机阐述)
|
|
142
|
+
- "系统约束:必须 < 100ms p99 响应"(性能约束)
|
|
143
|
+
- "依赖 module A v2.0+;v1 接口不兼容"(背景依赖)
|
|
144
|
+
- "合规要求:PII 数据不存盘"(critical 约束)
|
|
145
|
+
- "选 hashmap 因为 read >> write 比例 100:1"(设计决策的 why,不是 how)
|
|
146
|
+
|
|
147
|
+
negative(不抽 — 实现细节 / 执行步骤 / 接口定义):
|
|
148
|
+
- "实现:用 Map<string, User> 存储"(实现 how)
|
|
149
|
+
- "Step 1: 创建 schema"(任务步骤,该进 tasks)
|
|
150
|
+
- "POST /api/users 入参 { name, email }"(接口定义,该进 specs)
|
|
151
|
+
- "架构图:gateway → service → db"(架构图,实现层)
|
|
152
|
+
- 单纯方案描述无 why
|
|
153
|
+
|
|
154
|
+
# 输出格式(严格 JSON 数组)
|
|
155
|
+
{ "text": string(<= 80 字), "section": string, "critical": boolean }
|
|
156
|
+
critical=true 仅当该约束是合规 / 安全 / 业务硬底线。
|
|
157
|
+
|
|
158
|
+
# 阈值
|
|
159
|
+
**至少抽 5 条;< 5 条说明 design 缺动机阐述,即视为 fail。**
|
|
160
|
+
|
|
161
|
+
# design 文档
|
|
162
|
+
${designContent}
|
|
163
|
+
|
|
164
|
+
仅输出 JSON 数组,不输出 preamble。`;
|
|
165
|
+
// Task 5.6 — extractBehaviorFacts(tasks → specs 校验)
|
|
166
|
+
// M15 facts 目标分桶:specs 关注"行为/输出/给定条件",不进动机
|
|
167
|
+
const EXTRACT_BEHAVIOR_PROMPT = (tasksContent) => `从下面"tasks/plan 文档"中**只抽取"行为 / 输出 / 给定条件 / 错误处理"类事实**。
|
|
168
|
+
用途:验证后续生成的 specs/<area>.md 是否完整覆盖行为契约。
|
|
169
|
+
**严格按目标分桶过滤,动机 / 实现细节不要进来**。
|
|
170
|
+
|
|
171
|
+
# 抽取标准
|
|
172
|
+
|
|
173
|
+
positive(应抽 — 行为 / 输出 / 输入 / 错误):
|
|
174
|
+
- "task-1: 用户登录后跳到 /home"(行为)
|
|
175
|
+
- "task-2: 输入空 username → 返 400 + 错误码 USER_REQUIRED"(行为 + 错误)
|
|
176
|
+
- "task-3: 配置 retries=3, backoff=exponential"(给定参数)
|
|
177
|
+
- "成功响应:status=200, body 含 user_id 和 token"(输出契约)
|
|
178
|
+
- "task-5: 重复提交相同 idempotency-key → 返同一结果"(幂等行为)
|
|
179
|
+
|
|
180
|
+
negative(不抽 — 动机 / 实现 / 流程):
|
|
181
|
+
- "动机:简化 onboarding"(动机,该进 motivation)
|
|
182
|
+
- "依赖 lodash@4 的 debounce"(实现细节)
|
|
183
|
+
- "提交后跑 lint 和 typecheck"(开发流程,非产品行为)
|
|
184
|
+
- "项目背景:取代旧 v1 系统"(背景说明)
|
|
185
|
+
- "PR 合并需 2 人 review"(协作流程)
|
|
186
|
+
|
|
187
|
+
# 输出格式(严格 JSON 数组)
|
|
188
|
+
{ "text": string(<= 80 字), "section": string, "critical": boolean }
|
|
189
|
+
critical=true 仅当该行为是合规 / 安全 / 业务硬契约。
|
|
190
|
+
|
|
191
|
+
# 阈值
|
|
192
|
+
**至少抽 5 条;< 5 条 fail。**
|
|
193
|
+
|
|
194
|
+
# tasks 文档
|
|
195
|
+
${tasksContent}
|
|
196
|
+
|
|
197
|
+
仅输出 JSON 数组,不输出 preamble。`;
|
|
198
|
+
// ============================================================================
|
|
199
|
+
// Task 5.4-5.6:三个 extract 入口
|
|
200
|
+
// ============================================================================
|
|
201
|
+
/**
|
|
202
|
+
* 通用 extractFacts:给 OpenSpec 已有件用(spec.md / proposal.md 等),不分桶。
|
|
203
|
+
* 默认 n=30;tokens 上限 4096(覆盖 30 条 80 字 + 字段)。
|
|
204
|
+
*/
|
|
205
|
+
export async function extractFacts(client, content, signal, n = 30) {
|
|
206
|
+
const text = await callAnthropic(client, {
|
|
207
|
+
model: QUALITY_MODEL,
|
|
208
|
+
prompt: EXTRACT_FACTS_PROMPT(content, n),
|
|
209
|
+
maxTokens: 4096,
|
|
210
|
+
signal,
|
|
211
|
+
});
|
|
212
|
+
return parseFactsResponse(text);
|
|
213
|
+
}
|
|
214
|
+
/** extractMotivationFacts:从 design 抽"问题/动机/约束",用于 proposal 校验。 */
|
|
215
|
+
export async function extractMotivationFacts(client, designContent, signal) {
|
|
216
|
+
const text = await callAnthropic(client, {
|
|
217
|
+
model: QUALITY_MODEL,
|
|
218
|
+
prompt: EXTRACT_MOTIVATION_PROMPT(designContent),
|
|
219
|
+
maxTokens: 4096,
|
|
220
|
+
signal,
|
|
221
|
+
});
|
|
222
|
+
return parseFactsResponse(text);
|
|
223
|
+
}
|
|
224
|
+
/** extractBehaviorFacts:从 tasks 抽"行为/输出",用于 specs 校验。 */
|
|
225
|
+
export async function extractBehaviorFacts(client, tasksContent, signal) {
|
|
226
|
+
const text = await callAnthropic(client, {
|
|
227
|
+
model: QUALITY_MODEL,
|
|
228
|
+
prompt: EXTRACT_BEHAVIOR_PROMPT(tasksContent),
|
|
229
|
+
maxTokens: 4096,
|
|
230
|
+
signal,
|
|
231
|
+
});
|
|
232
|
+
return parseFactsResponse(text);
|
|
233
|
+
}
|
|
234
|
+
// ============================================================================
|
|
235
|
+
// Task 5.8:judgeAll(三态判断 + 聚合 critical/total rate)
|
|
236
|
+
// ============================================================================
|
|
237
|
+
/** judge prompt:三态判断 preserved / paraphrased / lost */
|
|
238
|
+
const JUDGE_PROMPT = (generatedBody, fact) => `判断下面这条"原文事实"是否在"生成产物"里被保留。
|
|
239
|
+
|
|
240
|
+
# 三态定义
|
|
241
|
+
- preserved:字面量或数值一致(原文数字 / 字段名 / 错误码 / 状态码 在产物中可找到)
|
|
242
|
+
- paraphrased:同义改写但语义等价(无遗漏数值 / 约束 / 关键名词)
|
|
243
|
+
- lost:完全没提到 / 漏关键数值 / 漏约束 / 改成不同含义
|
|
244
|
+
|
|
245
|
+
# 原文事实
|
|
246
|
+
- 章节:${fact.section}
|
|
247
|
+
- 重要级:${fact.critical ? 'critical' : 'non-critical'}
|
|
248
|
+
- 内容:${fact.text}
|
|
249
|
+
|
|
250
|
+
# 生成产物
|
|
251
|
+
${generatedBody}
|
|
252
|
+
|
|
253
|
+
# 输出格式
|
|
254
|
+
第 1 行只输出一个词:preserved / paraphrased / lost
|
|
255
|
+
第 2 行起(可省):简短理由(<= 50 字)`;
|
|
256
|
+
/**
|
|
257
|
+
* judgeAll:并行 judge 每条 fact,聚合 critical+total rate。
|
|
258
|
+
* 通过条件:criticalRate === 1 AND totalRate >= threshold。
|
|
259
|
+
*/
|
|
260
|
+
export async function judgeAll(client, generatedBody, facts, threshold, signal) {
|
|
261
|
+
// 并行 judge(每个 fact 独立调用,Promise.all 聚合)
|
|
262
|
+
const judges = await Promise.all(facts.map(async (fact) => {
|
|
263
|
+
const text = await callAnthropic(client, {
|
|
264
|
+
model: QUALITY_MODEL,
|
|
265
|
+
prompt: JUDGE_PROMPT(generatedBody, fact),
|
|
266
|
+
maxTokens: 256,
|
|
267
|
+
signal,
|
|
268
|
+
});
|
|
269
|
+
const firstLine = (text.split('\n')[0] ?? '').trim().toLowerCase();
|
|
270
|
+
// 解析失败默认 lost(防 LLM 输出意外格式 → 保守判 lost,不假装通过)
|
|
271
|
+
const state = firstLine === 'preserved' || firstLine === 'paraphrased' || firstLine === 'lost'
|
|
272
|
+
? firstLine
|
|
273
|
+
: 'lost';
|
|
274
|
+
return { fact, state };
|
|
275
|
+
}));
|
|
276
|
+
const critical = judges.filter((j) => j.fact.critical);
|
|
277
|
+
const critPreserved = critical.filter((j) => j.state !== 'lost');
|
|
278
|
+
const totalPreserved = judges.filter((j) => j.state !== 'lost');
|
|
279
|
+
// critical 列表为空时视为 1(无 critical 约束)
|
|
280
|
+
const criticalRate = critical.length === 0 ? 1 : critPreserved.length / critical.length;
|
|
281
|
+
const totalRate = judges.length === 0 ? 1 : totalPreserved.length / judges.length;
|
|
282
|
+
const lostFacts = judges.filter((j) => j.state === 'lost').map((j) => j.fact);
|
|
283
|
+
return {
|
|
284
|
+
passed: criticalRate >= 1 && totalRate >= threshold,
|
|
285
|
+
totalRate,
|
|
286
|
+
criticalRate,
|
|
287
|
+
lostFacts,
|
|
288
|
+
};
|
|
289
|
+
}
|
|
290
|
+
// ============================================================================
|
|
291
|
+
// Task 5.9:getFidelityThreshold
|
|
292
|
+
// ============================================================================
|
|
293
|
+
/**
|
|
294
|
+
* fidelity threshold:
|
|
295
|
+
* - superpowers 0.6(LLM 生成质量约束;非 brownfield 路径 — superpowers 是专属 plugin 产物,
|
|
296
|
+
* 与 legacy-bridge brownfield 是不同的迁移源,prompt 不混用;阈值偏松因 plugin 产物结构噪声)
|
|
297
|
+
* - openspec 0.9(spec 严格,行为契约期望高保真)
|
|
298
|
+
*/
|
|
299
|
+
export function getFidelityThreshold(sourceId) {
|
|
300
|
+
return sourceId === 'superpowers' ? 0.6 : 0.9;
|
|
301
|
+
}
|
|
302
|
+
//# sourceMappingURL=quality.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quality.js","sourceRoot":"","sources":["../../../src/core/migrate/quality.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { type AnthropicClient } from './quality.js';
|
|
2
|
+
import type { ClassificationPlan, MigrateSource, TraceOp } from './types.js';
|
|
3
|
+
export interface RegenerateContext {
|
|
4
|
+
source: MigrateSource;
|
|
5
|
+
plan: ClassificationPlan;
|
|
6
|
+
cwd: string;
|
|
7
|
+
abortController: AbortController;
|
|
8
|
+
client: AnthropicClient;
|
|
9
|
+
/** 追加一条 TraceOp 到 trace.json */
|
|
10
|
+
appendTraceOp: (op: TraceOp) => Promise<void>;
|
|
11
|
+
}
|
|
12
|
+
export interface RegenerateResult {
|
|
13
|
+
succeeded: number;
|
|
14
|
+
failed: number;
|
|
15
|
+
/** .partial 文件路径列表(给 report 汇总显示) */
|
|
16
|
+
partials: string[];
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* runRegenerate:遍历 missing artifacts,逐件 regenerate。
|
|
20
|
+
* 失败写 .partial 文件(spec §3.1),用户可查看失败原因。
|
|
21
|
+
* AbortInterrupted → 立即 break,不继续处理后续件。
|
|
22
|
+
*/
|
|
23
|
+
export declare function runRegenerate(ctx: RegenerateContext): Promise<RegenerateResult>;
|
|
24
|
+
//# sourceMappingURL=regenerate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"regenerate.d.ts","sourceRoot":"","sources":["../../../src/core/migrate/regenerate.ts"],"names":[],"mappings":"AAOA,OAAO,EASL,KAAK,eAAe,EACrB,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EACV,kBAAkB,EAElB,aAAa,EACb,OAAO,EAER,MAAM,YAAY,CAAC;AASpB,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,aAAa,CAAC;IACtB,IAAI,EAAE,kBAAkB,CAAC;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,eAAe,EAAE,eAAe,CAAC;IACjC,MAAM,EAAE,eAAe,CAAC;IACxB,gCAAgC;IAChC,aAAa,EAAE,CAAC,EAAE,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/C;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,qCAAqC;IACrC,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAMD;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,GAAG,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA8CrF"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
// src/core/migrate/regenerate.ts
|
|
2
|
+
// --regenerate 主流程 — Plan 8e Task 5.11
|
|
3
|
+
// Spec §2.8 v3 完整流程 + §5.1 复用 legacy-bridge/redact
|
|
4
|
+
import { readFile, writeFile } from 'node:fs/promises';
|
|
5
|
+
import { join } from 'node:path';
|
|
6
|
+
import { redact } from '../legacy-bridge/redact.js';
|
|
7
|
+
import { callAnthropic, extractFacts, extractMotivationFacts, extractBehaviorFacts, judgeAll, getFidelityThreshold, QualityFailure, AbortInterrupted, } from './quality.js';
|
|
8
|
+
// 生成用 opus(质量高);extract+judge 用 sonnet(quality.ts 内部已固定)
|
|
9
|
+
const REGEN_MODEL = 'claude-opus-4-7';
|
|
10
|
+
// ============================================================================
|
|
11
|
+
// 主流程
|
|
12
|
+
// ============================================================================
|
|
13
|
+
/**
|
|
14
|
+
* runRegenerate:遍历 missing artifacts,逐件 regenerate。
|
|
15
|
+
* 失败写 .partial 文件(spec §3.1),用户可查看失败原因。
|
|
16
|
+
* AbortInterrupted → 立即 break,不继续处理后续件。
|
|
17
|
+
*/
|
|
18
|
+
export async function runRegenerate(ctx) {
|
|
19
|
+
const result = { succeeded: 0, failed: 0, partials: [] };
|
|
20
|
+
// 枚举缺件(由 MigrateSource.listMissingArtifacts 提供)
|
|
21
|
+
const missing = ctx.source.listMissingArtifacts(ctx.plan);
|
|
22
|
+
// 按源类型取 fidelity 阈值(superpowers 0.6 / openspec 0.9)
|
|
23
|
+
const threshold = getFidelityThreshold(ctx.source.id);
|
|
24
|
+
for (const m of missing) {
|
|
25
|
+
// 检查 abort 信号,若已中断则停止遍历
|
|
26
|
+
if (ctx.abortController.signal.aborted)
|
|
27
|
+
break;
|
|
28
|
+
try {
|
|
29
|
+
const generated = await regenerateOne(m, ctx, threshold);
|
|
30
|
+
const targetAbs = join(ctx.cwd, m.targetPath);
|
|
31
|
+
await writeFile(targetAbs, generated, 'utf8');
|
|
32
|
+
// 写 TraceOp:regen 字段记录 model / facts 占位(facts 数量在 judgeAll 内部处理)
|
|
33
|
+
await ctx.appendTraceOp({
|
|
34
|
+
from: null,
|
|
35
|
+
to: targetAbs,
|
|
36
|
+
// MissingArtifact.kind 是 'proposal'|'specs';TraceOp.kind 是 ArtifactKind
|
|
37
|
+
// 'specs' 不在 ArtifactKind 里,映射为 'spec'
|
|
38
|
+
kind: m.kind === 'specs' ? 'spec' : 'proposal',
|
|
39
|
+
transform: ['regen'],
|
|
40
|
+
validate: 'ok',
|
|
41
|
+
regen: { model: REGEN_MODEL, facts: 0, passed: 0, threshold },
|
|
42
|
+
writtenAt: new Date().toISOString(),
|
|
43
|
+
status: 'committed',
|
|
44
|
+
});
|
|
45
|
+
result.succeeded++;
|
|
46
|
+
}
|
|
47
|
+
catch (err) {
|
|
48
|
+
// 分类错误原因:quality 失败 / 中断 / 网络
|
|
49
|
+
const reason = err instanceof QualityFailure
|
|
50
|
+
? `quality-fail: ${err.reason}`
|
|
51
|
+
: err instanceof AbortInterrupted
|
|
52
|
+
? 'interrupted'
|
|
53
|
+
: 'network-error';
|
|
54
|
+
// .partial 文件:写失败原因注释,让用户知道哪件失败(spec §3.1)
|
|
55
|
+
const partialPath = join(ctx.cwd, `${m.targetPath}.partial-${m.kind}.md`);
|
|
56
|
+
await writeFile(partialPath, `<!-- regen failed: ${reason} -->\n`, 'utf8');
|
|
57
|
+
result.partials.push(partialPath);
|
|
58
|
+
result.failed++;
|
|
59
|
+
// AbortInterrupted → 立即终止整个循环
|
|
60
|
+
if (err instanceof AbortInterrupted)
|
|
61
|
+
break;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return result;
|
|
65
|
+
}
|
|
66
|
+
// ============================================================================
|
|
67
|
+
// 单件 regenerate
|
|
68
|
+
// ============================================================================
|
|
69
|
+
/**
|
|
70
|
+
* regenerateOne:
|
|
71
|
+
* 1. 读 facts source(M15 目标分桶:design → motivation / tasks → behavior / self → generic)
|
|
72
|
+
* 2. redact — 发 LLM 前去除敏感信息(spec §5.1 复用 legacy-bridge/redact)
|
|
73
|
+
* 3. callAnthropic opus 生成目标产物
|
|
74
|
+
* 4. extractFacts 抽 facts 验证覆盖度
|
|
75
|
+
* 5. judgeAll 判定 fidelity,低于阈值抛 QualityFailure
|
|
76
|
+
* 6. 写盘前二次检查 abort(spec §3.1)
|
|
77
|
+
*/
|
|
78
|
+
async function regenerateOne(m, ctx, threshold) {
|
|
79
|
+
// ---- 步骤 1:读 facts source ----
|
|
80
|
+
let factsSourceContent;
|
|
81
|
+
if (m.factsSource === 'design') {
|
|
82
|
+
// 从 plan.changes 找对应 slug 的 design 文件
|
|
83
|
+
const designFile = findArtifact(ctx.plan, m.changeSlug, 'design');
|
|
84
|
+
factsSourceContent = designFile ? await readFile(designFile.absPath, 'utf8') : '';
|
|
85
|
+
}
|
|
86
|
+
else if (m.factsSource === 'tasks') {
|
|
87
|
+
// 从 plan.changes 找对应 slug 的 tasks 文件
|
|
88
|
+
const tasksFile = findArtifact(ctx.plan, m.changeSlug, 'tasks');
|
|
89
|
+
factsSourceContent = tasksFile ? await readFile(tasksFile.absPath, 'utf8') : '';
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
// 'self' 路径:从 sourceAbsPath 读已有件作 facts 源(C2 修);无 sourceAbsPath 则留空
|
|
93
|
+
if (m.sourceAbsPath) {
|
|
94
|
+
factsSourceContent = await readFile(m.sourceAbsPath, 'utf8');
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
factsSourceContent = '';
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
// ---- 步骤 2:redact — 使用内置默认规则(DEFAULT_REDACT_RULES 已内置于 redact()) ----
|
|
101
|
+
const { redactedText } = redact(factsSourceContent);
|
|
102
|
+
// ---- 步骤 3:调 SDK 生成目标(用 opus,质量高) ----
|
|
103
|
+
// proposal:依据 design 输出 forge 格式 proposal.md
|
|
104
|
+
// specs:依据 tasks 输出 forge 格式 specs/<area>.md
|
|
105
|
+
const targetPrompt = m.kind === 'proposal'
|
|
106
|
+
? `基于下面 design,生成符合 forge 格式的 proposal.md(# 标题 + ## Why + ## What):\n\n${redactedText}`
|
|
107
|
+
: `基于下面 tasks,生成符合 forge 格式的 specs/<area>.md(# 标题 + ## Scenario: <id> + **Given/When/Then**):\n\n${redactedText}`;
|
|
108
|
+
const generated = await callAnthropic(ctx.client, {
|
|
109
|
+
model: REGEN_MODEL,
|
|
110
|
+
prompt: targetPrompt,
|
|
111
|
+
maxTokens: 4096,
|
|
112
|
+
signal: ctx.abortController.signal,
|
|
113
|
+
});
|
|
114
|
+
// ---- 步骤 4:抽 facts(M15 目标分桶决定用哪种 extractor) ----
|
|
115
|
+
// design → extractMotivationFacts(问题/动机/约束)
|
|
116
|
+
// tasks → extractBehaviorFacts(行为/输出)
|
|
117
|
+
// self → extractFacts(通用)
|
|
118
|
+
const facts = m.factsSource === 'design'
|
|
119
|
+
? await extractMotivationFacts(ctx.client, redactedText, ctx.abortController.signal)
|
|
120
|
+
: m.factsSource === 'tasks'
|
|
121
|
+
? await extractBehaviorFacts(ctx.client, redactedText, ctx.abortController.signal)
|
|
122
|
+
: await extractFacts(ctx.client, redactedText, ctx.abortController.signal);
|
|
123
|
+
// ---- 步骤 5:judge — 验生成产物覆盖了多少 facts ----
|
|
124
|
+
const judge = await judgeAll(ctx.client, generated, facts, threshold, ctx.abortController.signal);
|
|
125
|
+
if (!judge.passed) {
|
|
126
|
+
// fidelity 不达标 → 抛 QualityFailure(主流程写 .partial)
|
|
127
|
+
throw new QualityFailure('low-fidelity');
|
|
128
|
+
}
|
|
129
|
+
// ---- 步骤 6:写盘前二次检查 abort(spec §3.1) ----
|
|
130
|
+
if (ctx.abortController.signal.aborted)
|
|
131
|
+
throw new AbortInterrupted();
|
|
132
|
+
return generated;
|
|
133
|
+
}
|
|
134
|
+
// ============================================================================
|
|
135
|
+
// 工具函数
|
|
136
|
+
// ============================================================================
|
|
137
|
+
/**
|
|
138
|
+
* findArtifact:从 ClassificationPlan 中找指定 slug 的 design/tasks 文件。
|
|
139
|
+
* 返回 undefined 表示对应产物不存在(调用方回退到空字符串)。
|
|
140
|
+
*/
|
|
141
|
+
function findArtifact(plan, slug, kind) {
|
|
142
|
+
const change = plan.changes.find((c) => c.slug === slug);
|
|
143
|
+
return change?.artifacts[kind];
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=regenerate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"regenerate.js","sourceRoot":"","sources":["../../../src/core/migrate/regenerate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { MigrateTrace, TraceOp } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Journal:NDJSON 行式写入 + 每步 fsync
|
|
4
|
+
* crash 时半完成 ops 仍可被 readTrace 重建
|
|
5
|
+
*/
|
|
6
|
+
export declare class Journal {
|
|
7
|
+
private readonly fh;
|
|
8
|
+
private constructor();
|
|
9
|
+
/** 打开 journal 文件(append 模式) */
|
|
10
|
+
static open(filePath: string): Promise<Journal>;
|
|
11
|
+
/** 追加一个 op,立即 fsync 防 crash 丢数据 */
|
|
12
|
+
append(op: TraceOp): Promise<void>;
|
|
13
|
+
/** 关闭文件句柄 */
|
|
14
|
+
close(): Promise<void>;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* reader 优先级:.json > .ndjson(重建)> .tmp(忽略,返 null)
|
|
18
|
+
* 说明:
|
|
19
|
+
* - .json 是末态原子 rename 写成的,可信
|
|
20
|
+
* - .ndjson 是 crash 半完成态,可重建 ops
|
|
21
|
+
* - .tmp 是崩溃中的写入,不可读(可能不完整)
|
|
22
|
+
*/
|
|
23
|
+
export declare function readTrace(dir: string): Promise<MigrateTrace | null>;
|
|
24
|
+
/**
|
|
25
|
+
* 末态原子 rename 三步走:
|
|
26
|
+
* 1. 写 .tmp(完整 final trace JSON)
|
|
27
|
+
* 2. fs.rename .tmp → .json(POSIX 原子)
|
|
28
|
+
* 3. 删 .ndjson(若存在)
|
|
29
|
+
*/
|
|
30
|
+
export declare function finalizeAndRename(dir: string, finalTrace: MigrateTrace): Promise<void>;
|
|
31
|
+
/**
|
|
32
|
+
* 写 migrate-report.md(spec §3.4)
|
|
33
|
+
* 磁盘满或写入失败时:降级 stderr 输出全文(spec §3.1)
|
|
34
|
+
*/
|
|
35
|
+
export declare function writeReportMd(dir: string, finalTrace: MigrateTrace): Promise<void>;
|
|
36
|
+
//# sourceMappingURL=report.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../../src/core/migrate/report.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAY,MAAM,YAAY,CAAC;AAOlE;;;GAGG;AACH,qBAAa,OAAO;IACE,OAAO,CAAC,QAAQ,CAAC,EAAE;IAAvC,OAAO;IAEP,+BAA+B;WAClB,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAKrD,mCAAmC;IAC7B,MAAM,CAAC,EAAE,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAMxC,aAAa;IACP,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B;AAED;;;;;;GAMG;AACH,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CA2CzE;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAa5F;AAED;;;GAGG;AACH,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA2CxF"}
|