peaks-loop 4.0.53 → 4.1.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/CHANGELOG.md +85 -0
- package/README-en.md +16 -1
- package/README.md +15 -1
- package/config/eslint/.peaks-rules.cjs +158 -13
- package/config/eslint/tsconfig.lint.json +47 -0
- package/dist/cli/cli-envelope.d.ts +114 -0
- package/dist/cli/cli-envelope.js +85 -0
- package/dist/cli/cli-helpers.d.ts +1 -1
- package/dist/cli/cli-helpers.js +8 -4
- package/dist/cli/commands/_cli-error-envelope.js +1 -1
- package/dist/cli/commands/_register.js +85 -38
- package/dist/cli/commands/_super.js +40 -7
- package/dist/cli/commands/adapter-commands-s2a.js +8 -7
- package/dist/cli/commands/adapter-commands.d.ts +2 -2
- package/dist/cli/commands/adapter-commands.js +7 -8
- package/dist/cli/commands/api-diff-commands.js +5 -4
- package/dist/cli/commands/asset-commands.d.ts +2 -2
- package/dist/cli/commands/asset-commands.js +135 -132
- package/dist/cli/commands/audit-commands.d.ts +1 -1
- package/dist/cli/commands/audit-commands.js +75 -32
- package/dist/cli/commands/autonomous-swarm-commands.d.ts +1 -1
- package/dist/cli/commands/autonomous-swarm-commands.js +14 -8
- package/dist/cli/commands/baseline-commands.js +34 -9
- package/dist/cli/commands/bee-commands.d.ts +1 -1
- package/dist/cli/commands/bee-commands.js +18 -21
- package/dist/cli/commands/best-practice-scan-command.js +6 -34
- package/dist/cli/commands/best-practice-scan-helpers.d.ts +12 -0
- package/dist/cli/commands/best-practice-scan-helpers.js +37 -0
- package/dist/cli/commands/capability-commands.d.ts +1 -1
- package/dist/cli/commands/capability-commands.js +14 -4
- package/dist/cli/commands/capability-worker-config-sc-commands.d.ts +1 -1
- package/dist/cli/commands/changeset-commands.js +21 -18
- package/dist/cli/commands/code-gate-command.js +9 -2
- package/dist/cli/commands/code-job-shape-commands-read-job-shape.d.ts +15 -0
- package/dist/cli/commands/code-job-shape-commands-read-job-shape.js +70 -0
- package/dist/cli/commands/code-job-shape-commands.js +21 -45
- package/dist/cli/commands/code-mode-gate-commands.d.ts +15 -1
- package/dist/cli/commands/code-mode-gate-commands.js +19 -199
- package/dist/cli/commands/code-mode-gate-plan-command.d.ts +14 -0
- package/dist/cli/commands/code-mode-gate-plan-command.js +23 -0
- package/dist/cli/commands/code-mode-gate-should-pause-command.d.ts +24 -0
- package/dist/cli/commands/code-mode-gate-should-pause-command.js +137 -0
- package/dist/cli/commands/code-mode-gate-should-pause-envelope.d.ts +59 -0
- package/dist/cli/commands/code-mode-gate-should-pause-envelope.js +144 -0
- package/dist/cli/commands/code-orchestrator-can-do.js +4 -4
- package/dist/cli/commands/code-review-commands.js +18 -3
- package/dist/cli/commands/code-run-command.js +44 -7
- package/dist/cli/commands/code-runtime-commands.d.ts +17 -0
- package/dist/cli/commands/code-runtime-commands.js +105 -73
- package/dist/cli/commands/codegraph-commands.js +175 -11
- package/dist/cli/commands/codegraph-status-command.js +6 -2
- package/dist/cli/commands/compact-command.js +52 -26
- package/dist/cli/commands/complexity-commands.js +6 -7
- package/dist/cli/commands/config-commands.d.ts +1 -1
- package/dist/cli/commands/config-commands.js +33 -9
- package/dist/cli/commands/container-commands.js +39 -15
- package/dist/cli/commands/context-commands.d.ts +1 -1
- package/dist/cli/commands/context-commands.js +40 -13
- package/dist/cli/commands/core/artifacts-command.js +11 -3
- package/dist/cli/commands/core/binding-commands.js +9 -6
- package/dist/cli/commands/core/doctor-command.js +7 -4
- package/dist/cli/commands/core/memory-command.js +81 -22
- package/dist/cli/commands/core/proxy-command.js +3 -1
- package/dist/cli/commands/core/session-command.js +16 -8
- package/dist/cli/commands/core/skill-command.js +31 -16
- package/dist/cli/commands/core/standards-command.js +55 -13
- package/dist/cli/commands/cron-commands-actions.d.ts +43 -0
- package/dist/cli/commands/cron-commands-actions.js +128 -0
- package/dist/cli/commands/cron-commands-schedule.d.ts +86 -0
- package/dist/cli/commands/cron-commands-schedule.js +151 -0
- package/dist/cli/commands/cron-commands.d.ts +35 -32
- package/dist/cli/commands/cron-commands.js +167 -211
- package/dist/cli/commands/cron-scheduler-commands.js +40 -20
- package/dist/cli/commands/cron-scheduler-persist.d.ts +110 -0
- package/dist/cli/commands/cron-scheduler-persist.js +171 -0
- package/dist/cli/commands/dashboard-long-run.js +45 -14
- package/dist/cli/commands/dashboard-summary.js +15 -5
- package/dist/cli/commands/dispatch-commands.js +69 -34
- package/dist/cli/commands/dispatch-from-dag.js +9 -10
- package/dist/cli/commands/doc-commands.js +8 -9
- package/dist/cli/commands/doctor/invoke-from-code.js +1 -1
- package/dist/cli/commands/e2e-verify-env.d.ts +19 -0
- package/dist/cli/commands/e2e-verify-env.js +19 -0
- package/dist/cli/commands/e2e-verify.d.ts +3 -14
- package/dist/cli/commands/e2e-verify.js +49 -29
- package/dist/cli/commands/ecc-commands.d.ts +1 -1
- package/dist/cli/commands/ecc-commands.js +8 -17
- package/dist/cli/commands/evidence-commands.js +10 -6
- package/dist/cli/commands/evolution-commands.d.ts +2 -2
- package/dist/cli/commands/evolution-commands.js +109 -115
- package/dist/cli/commands/feedback-commands-helpers.d.ts +22 -0
- package/dist/cli/commands/feedback-commands-helpers.js +33 -0
- package/dist/cli/commands/feedback-commands.js +15 -38
- package/dist/cli/commands/final-review-commands.d.ts +1 -1
- package/dist/cli/commands/final-review-commands.js +24 -22
- package/dist/cli/commands/fixture-commands.d.ts +1 -1
- package/dist/cli/commands/fixture-commands.js +17 -6
- package/dist/cli/commands/fork-commands-sync-verify.d.ts +12 -0
- package/dist/cli/commands/fork-commands-sync-verify.js +72 -0
- package/dist/cli/commands/fork-commands.js +19 -51
- package/dist/cli/commands/fresh-context-commands.js +3 -1
- package/dist/cli/commands/gate-commands-enforce.d.ts +82 -0
- package/dist/cli/commands/gate-commands-enforce.js +210 -0
- package/dist/cli/commands/gate-commands.d.ts +1 -1
- package/dist/cli/commands/gate-commands.js +85 -205
- package/dist/cli/commands/governance-classify-contract-commands.d.ts +1 -1
- package/dist/cli/commands/governance-classify-contract-commands.js +28 -17
- package/dist/cli/commands/heartbeat-commands-action.d.ts +7 -0
- package/dist/cli/commands/heartbeat-commands-action.js +192 -0
- package/dist/cli/commands/heartbeat-commands-validation.d.ts +57 -0
- package/dist/cli/commands/heartbeat-commands-validation.js +120 -0
- package/dist/cli/commands/heartbeat-commands.d.ts +27 -6
- package/dist/cli/commands/heartbeat-commands.js +19 -198
- package/dist/cli/commands/hook-handle.d.ts +1 -1
- package/dist/cli/commands/hook-handle.js +46 -13
- package/dist/cli/commands/hooks-commands.d.ts +1 -1
- package/dist/cli/commands/hooks-commands.js +18 -6
- package/dist/cli/commands/ide-commands.d.ts +1 -1
- package/dist/cli/commands/ide-commands.js +5 -3
- package/dist/cli/commands/impact-commands.js +8 -2
- package/dist/cli/commands/job-add-slice-command.d.ts +43 -0
- package/dist/cli/commands/job-add-slice-command.js +151 -0
- package/dist/cli/commands/job-commands.d.ts +64 -0
- package/dist/cli/commands/job-commands.js +134 -63
- package/dist/cli/commands/lease-metrics-commands-support.d.ts +73 -0
- package/dist/cli/commands/lease-metrics-commands-support.js +67 -0
- package/dist/cli/commands/lease-metrics-commands.d.ts +3 -44
- package/dist/cli/commands/lease-metrics-commands.js +21 -61
- package/dist/cli/commands/lease-stats-commands.d.ts +1 -1
- package/dist/cli/commands/lease-stats-commands.js +9 -6
- package/dist/cli/commands/lint-commands.d.ts +9 -3
- package/dist/cli/commands/lint-commands.js +15 -8
- package/dist/cli/commands/log-commands.d.ts +1 -1
- package/dist/cli/commands/log-commands.js +8 -6
- package/dist/cli/commands/loop-commands.d.ts +1 -1
- package/dist/cli/commands/loop-commands.js +50 -50
- package/dist/cli/commands/loop-eval-commands.d.ts +1 -1
- package/dist/cli/commands/loop-eval-commands.js +101 -30
- package/dist/cli/commands/memory-commands.js +21 -13
- package/dist/cli/commands/migrate-1-4-1-command.js +1 -1
- package/dist/cli/commands/migrate-v2-10-to-v2-11-command.js +2 -2
- package/dist/cli/commands/mut-commands-helpers.d.ts +30 -0
- package/dist/cli/commands/mut-commands-helpers.js +43 -0
- package/dist/cli/commands/mut-commands.js +16 -58
- package/dist/cli/commands/observability-commands-queries.d.ts +37 -0
- package/dist/cli/commands/observability-commands-queries.js +113 -0
- package/dist/cli/commands/observability-commands.d.ts +1 -1
- package/dist/cli/commands/observability-commands.js +7 -92
- package/dist/cli/commands/openspec-commands.d.ts +1 -1
- package/dist/cli/commands/openspec-commands.js +20 -8
- package/dist/cli/commands/outer-cache-commands.js +18 -7
- package/dist/cli/commands/perf-audit-commands.d.ts +1 -1
- package/dist/cli/commands/perf-audit-commands.js +12 -7
- package/dist/cli/commands/perf-commands.d.ts +1 -1
- package/dist/cli/commands/perf-commands.js +5 -5
- package/dist/cli/commands/playwright-commands.d.ts +1 -1
- package/dist/cli/commands/playwright-commands.js +20 -8
- package/dist/cli/commands/polyrepo-commands.js +21 -19
- package/dist/cli/commands/prd-blocks-commands.js +1 -3
- package/dist/cli/commands/prd-commands.d.ts +1 -1
- package/dist/cli/commands/prd-commands.js +21 -2
- package/dist/cli/commands/preferences-commands.js +13 -12
- package/dist/cli/commands/primer-command.js +5 -5
- package/dist/cli/commands/project-commands.d.ts +1 -1
- package/dist/cli/commands/project-commands.js +33 -9
- package/dist/cli/commands/qa-business-review-commands.js +16 -12
- package/dist/cli/commands/qa-commands.d.ts +1 -1
- package/dist/cli/commands/qa-commands.js +3 -5
- package/dist/cli/commands/release-commands.d.ts +3 -1
- package/dist/cli/commands/release-commands.js +33 -22
- package/dist/cli/commands/request-commands.js +47 -30
- package/dist/cli/commands/request-format-helpers.js +1 -1
- package/dist/cli/commands/retrospective-commands.d.ts +18 -11
- package/dist/cli/commands/retrospective-commands.js +24 -173
- package/dist/cli/commands/retrospective-index-command.d.ts +26 -0
- package/dist/cli/commands/retrospective-index-command.js +99 -0
- package/dist/cli/commands/retrospective-project-root.d.ts +9 -0
- package/dist/cli/commands/retrospective-project-root.js +15 -0
- package/dist/cli/commands/retrospective-search-command.d.ts +27 -0
- package/dist/cli/commands/retrospective-search-command.js +97 -0
- package/dist/cli/commands/retrospective-show-command.d.ts +23 -0
- package/dist/cli/commands/retrospective-show-command.js +80 -0
- package/dist/cli/commands/reviewer-commands.d.ts +1 -1
- package/dist/cli/commands/role-commands.js +14 -9
- package/dist/cli/commands/runtime-commands.js +14 -7
- package/dist/cli/commands/sc-commands.d.ts +1 -1
- package/dist/cli/commands/sc-commands.js +39 -6
- package/dist/cli/commands/scan-commands.js +36 -13
- package/dist/cli/commands/security-audit-commands.d.ts +1 -1
- package/dist/cli/commands/security-audit-commands.js +12 -7
- package/dist/cli/commands/sediment-commands.d.ts +2 -2
- package/dist/cli/commands/sediment-commands.js +146 -139
- package/dist/cli/commands/session-24h-mode.js +15 -2
- package/dist/cli/commands/session-checkpoint-command.js +1 -1
- package/dist/cli/commands/session-migrate-skill-name.js +1 -1
- package/dist/cli/commands/shadcn-commands.d.ts +1 -1
- package/dist/cli/commands/shadcn-commands.js +3 -1
- package/dist/cli/commands/share-commands.js +38 -39
- package/dist/cli/commands/skill-conformance-commands.d.ts +1 -1
- package/dist/cli/commands/skill-conformance-commands.js +1 -1
- package/dist/cli/commands/skill-loop-engineering-readiness-commands.js +16 -17
- package/dist/cli/commands/skill-visibility.js +2 -2
- package/dist/cli/commands/slice-commands.d.ts +1 -1
- package/dist/cli/commands/slice-commands.js +36 -12
- package/dist/cli/commands/slice-integrate-commands.js +6 -7
- package/dist/cli/commands/slice-review-commands-helpers.d.ts +26 -0
- package/dist/cli/commands/slice-review-commands-helpers.js +26 -0
- package/dist/cli/commands/slice-review-commands.js +16 -24
- package/dist/cli/commands/smoke-commands-add-path.d.ts +14 -0
- package/dist/cli/commands/smoke-commands-add-path.js +39 -0
- package/dist/cli/commands/smoke-commands-define.d.ts +18 -0
- package/dist/cli/commands/smoke-commands-define.js +97 -0
- package/dist/cli/commands/smoke-commands-run.d.ts +18 -0
- package/dist/cli/commands/smoke-commands-run.js +119 -0
- package/dist/cli/commands/smoke-commands.d.ts +10 -1
- package/dist/cli/commands/smoke-commands.js +17 -179
- package/dist/cli/commands/sop-commands.d.ts +1 -1
- package/dist/cli/commands/sop-commands.js +38 -10
- package/dist/cli/commands/statusline-commands.d.ts +1 -1
- package/dist/cli/commands/statusline-commands.js +21 -10
- package/dist/cli/commands/sub-agent/detached.js +3 -3
- package/dist/cli/commands/sub-agent-dispatch-guard.d.ts +1 -1
- package/dist/cli/commands/sub-agent-shared.d.ts +23 -0
- package/dist/cli/commands/sub-agent-shared.js +40 -1
- package/dist/cli/commands/sub-agent-shutdown-commands.js +17 -9
- package/dist/cli/commands/swarm-commands.d.ts +1 -1
- package/dist/cli/commands/swarm-commands.js +13 -6
- package/dist/cli/commands/tech-commands-helpers.d.ts +37 -0
- package/dist/cli/commands/tech-commands-helpers.js +24 -0
- package/dist/cli/commands/tech-commands.d.ts +2 -29
- package/dist/cli/commands/tech-commands.js +15 -28
- package/dist/cli/commands/test-commands.js +27 -7
- package/dist/cli/commands/upgrade-commands.d.ts +1 -1
- package/dist/cli/commands/user-touchpoint-commands.js +1 -3
- package/dist/cli/commands/verdict-aggregate-command.d.ts +1 -1
- package/dist/cli/commands/verdict-aggregate-command.js +20 -7
- package/dist/cli/commands/vm-commands.js +48 -19
- package/dist/cli/commands/wave-plan-commands.js +5 -2
- package/dist/cli/commands/web-commands.js +14 -4
- package/dist/cli/commands/web-lifecycle-commands.js +5 -3
- package/dist/cli/commands/workflow-commands.d.ts +1 -1
- package/dist/cli/commands/workflow-commands.js +64 -29
- package/dist/cli/commands/workflow-lifecycle-commands.js +19 -17
- package/dist/cli/commands/workflow-plan-commands-actions.d.ts +20 -0
- package/dist/cli/commands/workflow-plan-commands-actions.js +115 -0
- package/dist/cli/commands/workflow-plan-commands-session.d.ts +17 -0
- package/dist/cli/commands/workflow-plan-commands-session.js +59 -0
- package/dist/cli/commands/workflow-plan-commands.d.ts +10 -21
- package/dist/cli/commands/workflow-plan-commands.js +15 -141
- package/dist/cli/commands/workspace/clean-command.js +4 -1
- package/dist/cli/commands/workspace/helpers.js +2 -1
- package/dist/cli/commands/workspace/init-command.js +80 -20
- package/dist/cli/commands/workspace/reconcile-command.js +3 -1
- package/dist/cli/commands/workspace-commands.d.ts +1 -1
- package/dist/cli/commands/workspace-commands.js +1 -1
- package/dist/cli/commands/worktree-auth-commands.d.ts +1 -1
- package/dist/cli/commands/worktree-auth-commands.js +16 -169
- package/dist/cli/commands/worktree-auth-grant-command.d.ts +14 -0
- package/dist/cli/commands/worktree-auth-grant-command.js +118 -0
- package/dist/cli/commands/worktree-auth-manage-commands.d.ts +17 -0
- package/dist/cli/commands/worktree-auth-manage-commands.js +128 -0
- package/dist/cli/commands/worktree-lease-commands.d.ts +1 -1
- package/dist/cli/commands/worktree-lease-commands.js +65 -37
- package/dist/cli/index.js +6 -2
- package/dist/cli/program.js +6 -3
- package/dist/hooks/pre-tool-use-sub-agent.js +1 -6
- package/dist/reporters/bdd-reporter.js +9 -3
- package/dist/services/24h-mode/auto-engage.d.ts +19 -0
- package/dist/services/24h-mode/auto-engage.js +35 -0
- package/dist/services/24h-mode/decider.js +5 -1
- package/dist/services/24h-mode/store.js +4 -2
- package/dist/services/adapter/adapter-registry.js +20 -8
- package/dist/services/adapter/adapter.d.ts +2 -2
- package/dist/services/adapter/auto-adapter.d.ts +2 -2
- package/dist/services/adapter/auto-adapter.js +1 -1
- package/dist/services/adapter/claude-adapter.d.ts +1 -1
- package/dist/services/adapter/claude-adapter.js +8 -8
- package/dist/services/adapter/codex-adapter.d.ts +2 -2
- package/dist/services/adapter/codex-adapter.js +20 -8
- package/dist/services/adapter/copilot-adapter.d.ts +2 -2
- package/dist/services/adapter/copilot-adapter.js +20 -8
- package/dist/services/artifacts/artifact-prerequisites.js +44 -8
- package/dist/services/artifacts/artifact-service.js +3 -1
- package/dist/services/artifacts/artifact-template-bodies.d.ts +12 -0
- package/dist/services/artifacts/artifact-template-bodies.js +165 -0
- package/dist/services/artifacts/artifact-templates.js +26 -168
- package/dist/services/artifacts/request-artifact-service.js +14 -7
- package/dist/services/artifacts/request-artifact-state-helpers.d.ts +3 -2
- package/dist/services/artifacts/request-artifact-state-helpers.js +3 -5
- package/dist/services/artifacts/workspace-artifact-helpers.d.ts +28 -0
- package/dist/services/artifacts/workspace-artifact-helpers.js +54 -0
- package/dist/services/artifacts/workspace-service.d.ts +3 -22
- package/dist/services/artifacts/workspace-service.js +10 -60
- package/dist/services/audit/artifact-writer.js +21 -21
- package/dist/services/audit/audit-goal-service.js +2 -2
- package/dist/services/audit/backing-detector.js +7 -4
- package/dist/services/audit/classifier.js +3 -3
- package/dist/services/audit/decision-writer.js +13 -9
- package/dist/services/audit/enforcer-liveness.js +1 -1
- package/dist/services/audit/enforcers/active-skill-resolver.js +15 -7
- package/dist/services/audit/enforcers/design-draft-confirm.js +4 -4
- package/dist/services/audit/enforcers/lint-audit-regression.js +10 -5
- package/dist/services/audit/enforcers/lint-bee-runtime-contract.js +16 -8
- package/dist/services/audit/enforcers/lint-catalog-governance.js +8 -4
- package/dist/services/audit/enforcers/lint-output-style.js +4 -2
- package/dist/services/audit/enforcers/lint-peaks-code-runtime.js +8 -3
- package/dist/services/audit/enforcers/lint-peaks-skill-runtime.js +8 -3
- package/dist/services/audit/enforcers/lint-peaks-ui-sc-txt-runtime.js +20 -20
- package/dist/services/audit/enforcers/lint-prd-artifact-handoff.js +5 -5
- package/dist/services/audit/enforcers/lint-prd-source-snapshot.d.ts +1 -1
- package/dist/services/audit/enforcers/lint-prd-source-snapshot.js +5 -5
- package/dist/services/audit/enforcers/lint-qa-gateguard-and-runtime.js +10 -10
- package/dist/services/audit/enforcers/lint-rd-handoff-coverage.js +10 -8
- package/dist/services/audit/enforcers/lint-reference-shape.js +50 -18
- package/dist/services/audit/enforcers/lint-skill-presence-mandatory.js +5 -5
- package/dist/services/audit/enforcers/lint-style.js +44 -11
- package/dist/services/audit/enforcers/lint-workflow-shape.js +4 -2
- package/dist/services/audit/enforcers/login-gate.js +2 -6
- package/dist/services/audit/enforcers/mock-placement.js +2 -2
- package/dist/services/audit/enforcers/no-root-pollution.js +38 -9
- package/dist/services/audit/enforcers/pre-rd-scan.js +1 -1
- package/dist/services/audit/enforcers/prototype-fidelity.js +1 -1
- package/dist/services/audit/enforcers/resume-detection.js +5 -4
- package/dist/services/audit/prose-ratio-calculator.js +1 -1
- package/dist/services/audit/red-line-catalog-p2-a-bee-runtime.d.ts +39 -0
- package/dist/services/audit/red-line-catalog-p2-a-bee-runtime.js +205 -0
- package/dist/services/audit/red-line-catalog-p2-a-lint-style.d.ts +52 -0
- package/dist/services/audit/red-line-catalog-p2-a-lint-style.js +205 -0
- package/dist/services/audit/red-line-catalog-p2-a.js +3 -374
- package/dist/services/audit/red-line-catalog-p2-b.js +26 -26
- package/dist/services/audit/red-line-catalog.js +26 -38
- package/dist/services/audit/red-lines-service.js +64 -49
- package/dist/services/audit/scanners/openspec-scanner.js +2 -2
- package/dist/services/audit/scanners/rules-tree-scanner.js +2 -2
- package/dist/services/audit/scanners/skills-tree-scanner.js +2 -2
- package/dist/services/audit/static-service.js +3 -3
- package/dist/services/audit-independent/index.d.ts +2 -2
- package/dist/services/audit-independent/index.js +2 -2
- package/dist/services/audit-independent/perf-audit-service.js +19 -8
- package/dist/services/audit-independent/security-audit-service.js +31 -16
- package/dist/services/autonomous-swarm/autonomous-swarm-service.js +75 -46
- package/dist/services/best-practice/output-formatter.js +7 -1
- package/dist/services/capability-audit-service/cross-check.js +11 -5
- package/dist/services/capability-audit-service/runner.js +15 -7
- package/dist/services/capability-baseline/store.js +16 -4
- package/dist/services/capability-baseline/types.js +15 -3
- package/dist/services/capability-baseline/validator.js +43 -7
- package/dist/services/capability-guard-runner/contracts/J02.js +36 -6
- package/dist/services/capability-guard-runner/contracts/J03.js +20 -11
- package/dist/services/capability-guard-runner/contracts/J04.js +24 -15
- package/dist/services/capability-guard-runner/contracts/J05.js +26 -10
- package/dist/services/capability-guard-runner/contracts/J07.js +8 -2
- package/dist/services/capability-guard-runner/contracts/J08.js +22 -5
- package/dist/services/capability-guard-runner/contracts/J10.js +6 -2
- package/dist/services/capability-guard-runner/contracts/J11.d.ts +5 -0
- package/dist/services/capability-guard-runner/contracts/J11.js +14 -2
- package/dist/services/capability-guard-runner/contracts/J12.js +12 -3
- package/dist/services/capability-guard-runner/diff.js +1 -5
- package/dist/services/changeset/changeset-check-service.js +1 -3
- package/dist/services/classify/classify-service.js +20 -8
- package/dist/services/classify/classify-types.js +22 -9
- package/dist/services/code/auto-compact-lifecycle.js +62 -39
- package/dist/services/code/auto-compact-modes.js +2 -2
- package/dist/services/code/auto-compact-orchestrator.js +14 -9
- package/dist/services/code/batch-heartbeat-poller.d.ts +10 -0
- package/dist/services/code/batch-heartbeat-poller.js +17 -1
- package/dist/services/code/compact-event-settle-types.d.ts +80 -0
- package/dist/services/code/compact-event-settle-types.js +20 -0
- package/dist/services/code/compact-event-settle.d.ts +3 -68
- package/dist/services/code/compact-event-settle.js +14 -10
- package/dist/services/code/dag-orchestrator.js +32 -26
- package/dist/services/code/job-shape-decision.js +3 -1
- package/dist/services/code/mode-gate-types.d.ts +57 -0
- package/dist/services/code/mode-gate-types.js +67 -0
- package/dist/services/code/mode-gate.d.ts +4 -58
- package/dist/services/code/mode-gate.js +24 -60
- package/dist/services/code/orchestrator-can-do-advisories.d.ts +30 -0
- package/dist/services/code/orchestrator-can-do-advisories.js +81 -0
- package/dist/services/code/orchestrator-can-do-probes.d.ts +30 -0
- package/dist/services/code/orchestrator-can-do-probes.js +77 -0
- package/dist/services/code/orchestrator-can-do.d.ts +11 -22
- package/dist/services/code/orchestrator-can-do.js +37 -137
- package/dist/services/code/post-compact-checkpoint.d.ts +28 -0
- package/dist/services/code/post-compact-checkpoint.js +57 -0
- package/dist/services/code/post-compact-detector.js +16 -48
- package/dist/services/code/step-08-gate.d.ts +4 -3
- package/dist/services/code/step-08-gate.js +21 -9
- package/dist/services/code-review/ecc-bridge.js +23 -23
- package/dist/services/codegraph/codegraph-autorefresh.js +56 -39
- package/dist/services/codegraph/codegraph-config-repair-writer.d.ts +44 -0
- package/dist/services/codegraph/codegraph-config-repair-writer.js +116 -14
- package/dist/services/codegraph/codegraph-exclude-integrity.js +4 -1
- package/dist/services/codegraph/codegraph-exclude-repair.d.ts +23 -1
- package/dist/services/codegraph/codegraph-exclude-repair.js +7 -2
- package/dist/services/codegraph/codegraph-index-integrity.js +1 -1
- package/dist/services/codegraph/codegraph-preflight-service.d.ts +3 -26
- package/dist/services/codegraph/codegraph-preflight-service.js +16 -37
- package/dist/services/codegraph/codegraph-preflight-structure.d.ts +32 -0
- package/dist/services/codegraph/codegraph-preflight-structure.js +33 -0
- package/dist/services/codegraph/codegraph-process-runner.js +12 -1
- package/dist/services/codegraph/codegraph-service.js +9 -1
- package/dist/services/compact/request-transition-hook.js +2 -1
- package/dist/services/compact/suggest-service.d.ts +3 -61
- package/dist/services/compact/suggest-service.js +9 -12
- package/dist/services/compact/suggest-types.d.ts +76 -0
- package/dist/services/compact/suggest-types.js +10 -0
- package/dist/services/compact-history/compact-history-service.js +2 -2
- package/dist/services/compact-statusline/compact-lifecycle-store.d.ts +2 -32
- package/dist/services/compact-statusline/compact-lifecycle-store.js +7 -12
- package/dist/services/compact-statusline/compact-lifecycle-types.d.ts +32 -0
- package/dist/services/compact-statusline/compact-lifecycle-types.js +8 -0
- package/dist/services/compact-statusline/compact-statusline-cell-table.d.ts +42 -0
- package/dist/services/compact-statusline/compact-statusline-cell-table.js +63 -0
- package/dist/services/compact-statusline/compact-statusline-service.d.ts +4 -21
- package/dist/services/compact-statusline/compact-statusline-service.js +9 -101
- package/dist/services/compact-statusline/compact-statusline-state.d.ts +4 -0
- package/dist/services/compact-statusline/compact-statusline-state.js +50 -0
- package/dist/services/config/config-migration.js +2 -2
- package/dist/services/config/config-restore.js +1 -1
- package/dist/services/config/config-rollback.js +1 -1
- package/dist/services/config/config-safety.js +28 -10
- package/dist/services/config/config-service.js +114 -31
- package/dist/services/config/model-routing.js +5 -2
- package/dist/services/config/proxy-service.js +6 -1
- package/dist/services/config/workspace-state-service.js +17 -5
- package/dist/services/context/auto-compact-dispatcher-input.d.ts +38 -0
- package/dist/services/context/auto-compact-dispatcher-input.js +9 -0
- package/dist/services/context/auto-compact-dispatcher.d.ts +2 -30
- package/dist/services/context/auto-compact-reader-input.d.ts +30 -0
- package/dist/services/context/auto-compact-reader-input.js +8 -0
- package/dist/services/context/auto-compact-reader.d.ts +2 -24
- package/dist/services/context/auto-compact-reader.js +4 -1
- package/dist/services/context/auto-compact-thresholds.d.ts +54 -0
- package/dist/services/context/auto-compact-thresholds.js +19 -0
- package/dist/services/context/auto-compact-types.d.ts +2 -46
- package/dist/services/context/auto-compact-types.js +1 -11
- package/dist/services/context/build-dispatch-system-prompt.js +2 -2
- package/dist/services/context/collector.js +8 -10
- package/dist/services/context/context-audit-hint.js +7 -5
- package/dist/services/context/context-audit-keys.d.ts +15 -0
- package/dist/services/context/context-audit-keys.js +77 -0
- package/dist/services/context/context-audit-limits.d.ts +20 -0
- package/dist/services/context/context-audit-limits.js +31 -0
- package/dist/services/context/context-audit-scan.d.ts +19 -0
- package/dist/services/context/context-audit-scan.js +246 -0
- package/dist/services/context/context-audit-types.d.ts +65 -0
- package/dist/services/context/context-audit-types.js +10 -0
- package/dist/services/context/context-audit.d.ts +13 -59
- package/dist/services/context/context-audit.js +38 -254
- package/dist/services/context/context-builder.js +4 -4
- package/dist/services/context/context-schema.d.ts +1 -1
- package/dist/services/context/context-schema.js +13 -13
- package/dist/services/context/doc-retriever.js +2 -2
- package/dist/services/context/harness-context-witness.js +43 -24
- package/dist/services/context/harness-window-config.js +27 -7
- package/dist/services/context/ide-detect.js +2 -1
- package/dist/services/context/index.d.ts +1 -1
- package/dist/services/context/memory-index-reader.js +3 -9
- package/dist/services/context/memory-preflight-config.js +3 -5
- package/dist/services/context/memory-preflight-service.d.ts +2 -20
- package/dist/services/context/memory-preflight-service.js +37 -68
- package/dist/services/context/memory-preflight-support.d.ts +48 -0
- package/dist/services/context/memory-preflight-support.js +56 -0
- package/dist/services/context/post-compact-reinjection.js +3 -3
- package/dist/services/context/renderer.js +7 -3
- package/dist/services/context/spillover-store.js +3 -1
- package/dist/services/context/summary-view.js +1 -1
- package/dist/services/context/threshold.js +2 -2
- package/dist/services/context/tokenizer.js +3 -3
- package/dist/services/crystallization/crystallization-brief-schema.d.ts +80 -0
- package/dist/services/crystallization/crystallization-brief-schema.js +159 -0
- package/dist/services/crystallization/crystallization-service.d.ts +7 -7
- package/dist/services/crystallization/crystallization-service.js +56 -55
- package/dist/services/crystallization/crystallization-store.d.ts +2 -2
- package/dist/services/crystallization/crystallization-store.js +37 -20
- package/dist/services/crystallization/crystallization-types.d.ts +4 -56
- package/dist/services/crystallization/crystallization-types.js +31 -184
- package/dist/services/crystallization/evidence-brief-builder.d.ts +3 -3
- package/dist/services/crystallization/evidence-brief-builder.js +32 -38
- package/dist/services/crystallization/index.d.ts +4 -4
- package/dist/services/crystallization/index.js +4 -4
- package/dist/services/dashboard/project-dashboard-service.js +7 -1
- package/dist/services/dispatch/await-batch-helpers.d.ts +55 -0
- package/dist/services/dispatch/await-batch-helpers.js +206 -0
- package/dist/services/dispatch/await-batch.d.ts +50 -7
- package/dist/services/dispatch/await-batch.js +97 -194
- package/dist/services/dispatch/batch-counter.js +2 -1
- package/dist/services/dispatch/conflict-replay.js +2 -2
- package/dist/services/dispatch/contract-store.js +5 -2
- package/dist/services/dispatch/dispatch-record-input-types.d.ts +81 -0
- package/dist/services/dispatch/dispatch-record-input-types.js +1 -0
- package/dist/services/dispatch/dispatch-record-types.d.ts +6 -73
- package/dist/services/dispatch/dispatch-record-upgrade-fields.d.ts +72 -0
- package/dist/services/dispatch/dispatch-record-upgrade-fields.js +242 -0
- package/dist/services/dispatch/dispatch-record-upgrade-guards.d.ts +15 -0
- package/dist/services/dispatch/dispatch-record-upgrade-guards.js +55 -0
- package/dist/services/dispatch/dispatch-record-upgrade.d.ts +2 -4
- package/dist/services/dispatch/dispatch-record-upgrade.js +21 -213
- package/dist/services/dispatch/dispatch-record-writer.js +54 -26
- package/dist/services/dispatch/dispatch-sub-agent.js +7 -2
- package/dist/services/dispatch/e2e-fixtures.js +1 -1
- package/dist/services/dispatch/isolation-lease.js +39 -17
- package/dist/services/dispatch/merge-back-runner.js +51 -11
- package/dist/services/dispatch/service-shutdown.js +4 -1
- package/dist/services/dispatch/slice-dag-types.d.ts +116 -0
- package/dist/services/dispatch/slice-dag-types.js +41 -0
- package/dist/services/dispatch/slice-dag.d.ts +3 -109
- package/dist/services/dispatch/slice-dag.js +13 -36
- package/dist/services/dispatch/sub-agent-batch-await.d.ts +47 -0
- package/dist/services/dispatch/sub-agent-batch-await.js +73 -0
- package/dist/services/dispatch/sub-agent-dispatcher-types.d.ts +122 -0
- package/dist/services/dispatch/sub-agent-dispatcher-types.js +12 -0
- package/dist/services/dispatch/sub-agent-dispatcher.d.ts +3 -145
- package/dist/services/dispatch/sub-agent-dispatcher.js +14 -70
- package/dist/services/dispatch/test-tool-detection.js +12 -1
- package/dist/services/doc/doc-generator.js +19 -4
- package/dist/services/doctor/doctor-service/checks/check-id-schema.js +16 -8
- package/dist/services/doctor/doctor-service/checks/codegraph-capability.d.ts +7 -2
- package/dist/services/doctor/doctor-service/checks/codegraph-capability.js +26 -8
- package/dist/services/doctor/doctor-service/checks/codegraph-exclude-integrity.js +16 -8
- package/dist/services/doctor/doctor-service/checks/codegraph-index-integrity.js +16 -8
- package/dist/services/doctor/doctor-service/checks/dist-source-version.js +18 -9
- package/dist/services/doctor/doctor-service/checks/ecc-hooks-schema-drift.js +20 -10
- package/dist/services/doctor/doctor-service/checks/gateguard-conflict.js +18 -9
- package/dist/services/doctor/doctor-service/checks/l3-memory-health.js +25 -11
- package/dist/services/doctor/doctor-service/checks/l3-orphan-sessions.js +12 -6
- package/dist/services/doctor/doctor-service/checks/multi-binary-drift.d.ts +7 -16
- package/dist/services/doctor/doctor-service/checks/multi-binary-drift.js +50 -70
- package/dist/services/doctor/doctor-service/checks/schema-validity.js +5 -1
- package/dist/services/doctor/doctor-service/checks/skill-presence.js +4 -2
- package/dist/services/doctor/doctor-service/checks/statusline-install.js +8 -4
- package/dist/services/doctor/doctor-service/checks/statusline-runtime.js +8 -4
- package/dist/services/doctor/doctor-service/checks/user-config.js +4 -2
- package/dist/services/doctor/doctor-service/checks/workspace-init.js +8 -4
- package/dist/services/doctor/doctor-service/checks/workspace-layout.js +19 -11
- package/dist/services/doctor/doctor-service/index.js +4 -2
- package/dist/services/doctor/doctor-service/multi-binary-drift-helpers.d.ts +40 -0
- package/dist/services/doctor/doctor-service/multi-binary-drift-helpers.js +49 -0
- package/dist/services/doctor/doctor-service/plugin-registry.js +1 -1
- package/dist/services/doctor/doctor-service/probe-types.d.ts +210 -0
- package/dist/services/doctor/doctor-service/probe-types.js +14 -0
- package/dist/services/doctor/doctor-service/types.d.ts +7 -197
- package/dist/services/doctor/index.d.ts +1 -1
- package/dist/services/doctor/index.js +1 -1
- package/dist/services/env/shell-probe.js +8 -2
- package/dist/services/evidence/evidence-body-builders.d.ts +23 -0
- package/dist/services/evidence/evidence-body-builders.js +197 -0
- package/dist/services/evidence/evidence-generator.js +16 -189
- package/dist/services/evolution/evolution-constraints.d.ts +43 -0
- package/dist/services/evolution/evolution-constraints.js +54 -0
- package/dist/services/evolution/evolution-evaluation-schema.d.ts +43 -0
- package/dist/services/evolution/evolution-evaluation-schema.js +43 -0
- package/dist/services/evolution/evolution-service.d.ts +6 -6
- package/dist/services/evolution/evolution-service.js +58 -58
- package/dist/services/evolution/evolution-store.d.ts +2 -2
- package/dist/services/evolution/evolution-store.js +37 -51
- package/dist/services/evolution/evolution-types.d.ts +2 -22
- package/dist/services/evolution/evolution-types.js +41 -101
- package/dist/services/evolution/independent-evaluator-runner.d.ts +3 -3
- package/dist/services/evolution/independent-evaluator-runner.js +20 -22
- package/dist/services/evolution/regression-skeptic-runner.d.ts +2 -2
- package/dist/services/evolution/regression-skeptic-runner.js +18 -18
- package/dist/services/feedback/feedback-promotion-service.js +48 -12
- package/dist/services/feedback/promotion-artifact-evidence.d.ts +2 -16
- package/dist/services/feedback/promotion-artifact-evidence.js +6 -83
- package/dist/services/feedback/promotion-artifact-json-evidence.d.ts +29 -0
- package/dist/services/feedback/promotion-artifact-json-evidence.js +39 -0
- package/dist/services/feedback/promotion-source-comments.d.ts +47 -0
- package/dist/services/feedback/promotion-source-comments.js +61 -0
- package/dist/services/final-review/final-review-contract.d.ts +26 -0
- package/dist/services/final-review/final-review-contract.js +14 -0
- package/dist/services/final-review/final-review-delivery.d.ts +63 -0
- package/dist/services/final-review/final-review-delivery.js +124 -0
- package/dist/services/final-review/final-review-evidence-budget.d.ts +125 -0
- package/dist/services/final-review/final-review-evidence-budget.js +218 -0
- package/dist/services/final-review/final-review-evidence-collect.d.ts +4 -0
- package/dist/services/final-review/final-review-evidence-collect.js +230 -0
- package/dist/services/final-review/final-review-evidence-sources.d.ts +138 -0
- package/dist/services/final-review/final-review-evidence-sources.js +139 -0
- package/dist/services/final-review/final-review-fifth-dim.d.ts +8 -0
- package/dist/services/final-review/final-review-fifth-dim.js +20 -0
- package/dist/services/final-review/final-review-gates.d.ts +119 -0
- package/dist/services/final-review/final-review-gates.js +214 -0
- package/dist/services/final-review/final-review-output-budget.d.ts +88 -0
- package/dist/services/final-review/final-review-output-budget.js +161 -0
- package/dist/services/final-review/final-review-prompt.d.ts +35 -0
- package/dist/services/final-review/final-review-prompt.js +112 -0
- package/dist/services/final-review/final-review-reviewer.d.ts +57 -0
- package/dist/services/final-review/final-review-reviewer.js +95 -0
- package/dist/services/final-review/final-review-runner.d.ts +3 -0
- package/dist/services/final-review/final-review-runner.js +158 -0
- package/dist/services/final-review/final-review-service.d.ts +119 -373
- package/dist/services/final-review/final-review-service.js +48 -1380
- package/dist/services/final-review/final-review-verdicts.d.ts +60 -0
- package/dist/services/final-review/final-review-verdicts.js +91 -0
- package/dist/services/final-review/index.d.ts +3 -3
- package/dist/services/final-review/index.js +2 -2
- package/dist/services/final-review/pre-post-diff.js +32 -29
- package/dist/services/fixture/fixture-capture-service.js +14 -6
- package/dist/services/fresh-context/trigger-scan.js +13 -2
- package/dist/services/fuzzy-matching/fuzzy-match-service.js +1 -1
- package/dist/services/fuzzy-matching/fzf-pick-service.js +6 -1
- package/dist/services/hooks/pre-tool-code-gate.js +2 -2
- package/dist/services/hooks/presence-marker-detector.js +12 -2
- package/dist/services/hooks/worktree-authorization-gate.js +21 -7
- package/dist/services/ide/adapters/claude-code-adapter.js +30 -17
- package/dist/services/ide/adapters/codex-adapter.js +3 -5
- package/dist/services/ide/adapters/cursor-adapter.js +3 -5
- package/dist/services/ide/adapters/hermes-adapter.js +2 -4
- package/dist/services/ide/adapters/openclaw-adapter.js +2 -4
- package/dist/services/ide/adapters/qoder-adapter.js +2 -4
- package/dist/services/ide/adapters/tongyi-lingma-adapter.js +1 -1
- package/dist/services/ide/adapters/trae-adapter.js +3 -5
- package/dist/services/ide/adapters/zcode-adapter.js +8 -7
- package/dist/services/ide/current-model-detector.js +2 -1
- package/dist/services/ide/ide-compact-types.d.ts +153 -0
- package/dist/services/ide/ide-compact-types.js +1 -0
- package/dist/services/ide/ide-registry.js +1 -1
- package/dist/services/ide/ide-types.d.ts +7 -145
- package/dist/services/ide/resource-profile.js +1 -1
- package/dist/services/ide/shared/atomic-json.js +2 -1
- package/dist/services/impact/impact-scan-service.js +12 -5
- package/dist/services/job/job-commit-verification.d.ts +73 -0
- package/dist/services/job/job-commit-verification.js +72 -0
- package/dist/services/job/job-orchestrator.d.ts +42 -0
- package/dist/services/job/job-orchestrator.js +110 -10
- package/dist/services/job/job-progress-store.d.ts +75 -5
- package/dist/services/job/job-progress-store.js +83 -6
- package/dist/services/job/job-rotation.d.ts +1 -1
- package/dist/services/job/job-rotation.js +5 -1
- package/dist/services/job/job-state-store.js +2 -2
- package/dist/services/job/job-types.js +49 -20
- package/dist/services/job/subagent-job-wrapper.d.ts +1 -1
- package/dist/services/job/subagent-job-wrapper.js +5 -1
- package/dist/services/job-snapshot/snapshot.js +2 -2
- package/dist/services/karpathy-cost/karpathy-cost-check-service.js +23 -13
- package/dist/services/legacy/legacy-detector.js +51 -5
- package/dist/services/lint/detect-eslint.js +10 -4
- package/dist/services/lint/detect-ocr-18.js +11 -3
- package/dist/services/lint/eslint-runner-support.d.ts +22 -0
- package/dist/services/lint/eslint-runner-support.js +185 -0
- package/dist/services/lint/eslint-runner-types.d.ts +69 -0
- package/dist/services/lint/eslint-runner-types.js +11 -0
- package/dist/services/lint/eslint-runner.d.ts +4 -56
- package/dist/services/lint/eslint-runner.js +24 -178
- package/dist/services/lint/npx-resolver.js +1 -3
- package/dist/services/lint/ocr-18-acquire.js +15 -4
- package/dist/services/lint/ocr-multilang-adapter.js +4 -5
- package/dist/services/llm/anthropic-runner.js +4 -1
- package/dist/services/log/log-commands-service.js +2 -6
- package/dist/services/log/logger.js +15 -12
- package/dist/services/log/retention.js +3 -2
- package/dist/services/loop/evaluator-dispatcher.js +78 -42
- package/dist/services/loop/loop-bee-relation-service.d.ts +4 -4
- package/dist/services/loop/loop-bee-relation-service.js +36 -40
- package/dist/services/loop/loop-bee-relation-store.d.ts +3 -3
- package/dist/services/loop/loop-bee-relation-store.js +9 -11
- package/dist/services/loop/loop-bee-relation-types.d.ts +1 -1
- package/dist/services/loop/loop-bee-relation-types.js +14 -25
- package/dist/services/loop/loop-release-service.d.ts +2 -2
- package/dist/services/loop/loop-release-service.js +3 -3
- package/dist/services/loop/loop-release-store.d.ts +2 -2
- package/dist/services/loop/loop-release-store.js +4 -6
- package/dist/services/loop/loop-release-types.d.ts +1 -1
- package/dist/services/loop/loop-release-types.js +21 -31
- package/dist/services/loop/monotonic-guard-types.d.ts +51 -0
- package/dist/services/loop/monotonic-guard-types.js +9 -0
- package/dist/services/loop/monotonic-guard.d.ts +2 -43
- package/dist/services/loop/monotonic-runner-types.d.ts +63 -0
- package/dist/services/loop/monotonic-runner-types.js +17 -0
- package/dist/services/loop/monotonic-runner.d.ts +3 -34
- package/dist/services/loop/monotonic-runner.js +10 -20
- package/dist/services/loop/run-driver.js +16 -8
- package/dist/services/loop/spec-service.d.ts +0 -5
- package/dist/services/loop/spec-service.js +49 -9
- package/dist/services/memory/llm-reranker-core.d.ts +108 -0
- package/dist/services/memory/llm-reranker-core.js +105 -0
- package/dist/services/memory/llm-reranker.d.ts +3 -94
- package/dist/services/memory/llm-reranker.js +13 -102
- package/dist/services/memory/memory-ingest-service.d.ts +1 -22
- package/dist/services/memory/memory-ingest-service.js +29 -76
- package/dist/services/memory/memory-ingest-support.d.ts +23 -0
- package/dist/services/memory/memory-ingest-support.js +81 -0
- package/dist/services/memory/memory-rotate-service.js +41 -8
- package/dist/services/memory/memory-search-service.js +8 -4
- package/dist/services/memory/project-context-service.js +26 -5
- package/dist/services/memory/project-memory-service/index/kind-dispatch.d.ts +2 -7
- package/dist/services/memory/project-memory-service/index/kind-dispatch.js +17 -136
- package/dist/services/memory/project-memory-service/index/project-memory-plan-exec.d.ts +7 -0
- package/dist/services/memory/project-memory-service/index/project-memory-plan-exec.js +150 -0
- package/dist/services/memory/project-memory-service/index/ranking.js +6 -3
- package/dist/services/memory/project-memory-service/index/reindex.js +14 -5
- package/dist/services/memory/project-memory-service/index.d.ts +1 -1
- package/dist/services/memory/project-memory-service/index.js +1 -1
- package/dist/services/memory/project-memory-service/memory-kinds.d.ts +31 -0
- package/dist/services/memory/project-memory-service/memory-kinds.js +87 -0
- package/dist/services/memory/project-memory-service/parsers/frontmatter-parse.d.ts +24 -0
- package/dist/services/memory/project-memory-service/parsers/frontmatter-parse.js +104 -0
- package/dist/services/memory/project-memory-service/parsers/frontmatter.d.ts +2 -24
- package/dist/services/memory/project-memory-service/parsers/frontmatter.js +28 -79
- package/dist/services/memory/project-memory-service/parsers/markdown-pure.js +15 -3
- package/dist/services/memory/project-memory-service/store/atomic-write.d.ts +59 -0
- package/dist/services/memory/project-memory-service/store/atomic-write.js +189 -17
- package/dist/services/memory/project-memory-service/store/paths.js +2 -1
- package/dist/services/memory/project-memory-service/types.d.ts +3 -31
- package/dist/services/memory/project-memory-service/types.js +1 -76
- package/dist/services/migrate-skill-name/migrate.js +1 -1
- package/dist/services/migrate-skill-name/schema.js +1 -1
- package/dist/services/mode/mode-enforcement.js +4 -2
- package/dist/services/mode/mode-status-service.d.ts +27 -9
- package/dist/services/mode/mode-status-service.js +64 -12
- package/dist/services/observability/aggregation-helpers.d.ts +22 -0
- package/dist/services/observability/aggregation-helpers.js +65 -0
- package/dist/services/observability/aggregation-types.d.ts +66 -0
- package/dist/services/observability/aggregation-types.js +34 -0
- package/dist/services/observability/aggregation.d.ts +5 -53
- package/dist/services/observability/aggregation.js +17 -80
- package/dist/services/observability/jsonl-store.js +2 -1
- package/dist/services/observability/observability-schema.d.ts +71 -0
- package/dist/services/observability/observability-schema.js +64 -0
- package/dist/services/observability/observability-service.d.ts +3 -56
- package/dist/services/observability/observability-service.js +9 -49
- package/dist/services/openspec/coverage-evidence-reader.js +18 -11
- package/dist/services/openspec/openspec-archive-service.js +31 -24
- package/dist/services/openspec/openspec-init-service.js +8 -2
- package/dist/services/openspec/openspec-propose-from-doctor-service.js +1 -1
- package/dist/services/openspec/openspec-scan-service.js +4 -1
- package/dist/services/openspec/openspec-validate-service.js +26 -5
- package/dist/services/perf/perf-baseline-service.js +2 -6
- package/dist/services/polyrepo/polyrepo-dispatcher.js +2 -1
- package/dist/services/polyrepo/polyrepo-scanner.js +4 -1
- package/dist/services/prd/gate-evidence-derivation.d.ts +160 -0
- package/dist/services/prd/gate-evidence-derivation.js +270 -0
- package/dist/services/prd/handoff-auto-regen.js +13 -1
- package/dist/services/prd/handoff-frontmatter-shape.d.ts +42 -0
- package/dist/services/prd/handoff-frontmatter-shape.js +67 -0
- package/dist/services/prd/handoff-frontmatter.d.ts +1 -1
- package/dist/services/prd/handoff-frontmatter.js +63 -1
- package/dist/services/prd/handoff-gate-evidence.d.ts +95 -1
- package/dist/services/prd/handoff-gate-evidence.js +125 -57
- package/dist/services/prd/handoff-path-resolution.d.ts +37 -0
- package/dist/services/prd/handoff-path-resolution.js +101 -0
- package/dist/services/prd/handoff-service.d.ts +22 -38
- package/dist/services/prd/handoff-service.js +38 -127
- package/dist/services/prd/handoff-types.d.ts +40 -0
- package/dist/services/prd/handoff-types.js +28 -1
- package/dist/services/prd/prd-blocks-checker.js +28 -8
- package/dist/services/prd/project-scan-bootstrap-service.js +1 -5
- package/dist/services/prd/project-scan-reader.d.ts +7 -0
- package/dist/services/prd/project-scan-reader.js +8 -5
- package/dist/services/prd/project-scan-sediment.js +1 -4
- package/dist/services/preferences/preferences-service.js +6 -8
- package/dist/services/preferences/preferences-types.js +4 -4
- package/dist/services/qa/bdd-test-style-contract.d.ts +41 -0
- package/dist/services/qa/bdd-test-style-contract.js +37 -0
- package/dist/services/qa/bdd-test-style-verifier.d.ts +2 -24
- package/dist/services/qa/bdd-test-style-verifier.js +5 -31
- package/dist/services/qa/browser-event-logger.js +2 -1
- package/dist/services/qa/qa-business-review-state.js +20 -5
- package/dist/services/qa/screenshot-archive-service.js +1 -3
- package/dist/services/rd/ast-gate.js +2 -2
- package/dist/services/rd/impl.js +1 -1
- package/dist/services/rd/rd-service.js +117 -43
- package/dist/services/rd/reviewer-dispatch-policy.d.ts +36 -8
- package/dist/services/rd/reviewer-dispatch-policy.js +40 -15
- package/dist/services/rd/standards-diagnostic.js +4 -1
- package/dist/services/rd/strategy.js +10 -3
- package/dist/services/rd/tactical-stage.js +2 -2
- package/dist/services/rd/types.js +9 -7
- package/dist/services/rd-swarm/rd-swarm-service.d.ts +2 -45
- package/dist/services/rd-swarm/rd-swarm-service.js +140 -21
- package/dist/services/rd-swarm/rd-swarm-types.d.ts +54 -0
- package/dist/services/rd-swarm/rd-swarm-types.js +10 -0
- package/dist/services/recommendations/capability-map-service.js +10 -2
- package/dist/services/recommendations/capability-seed-items.js +81 -14
- package/dist/services/recommendations/capability-seed-mappings.js +420 -48
- package/dist/services/recommendations/capability-seed-sources-mcp-server.d.ts +9 -0
- package/dist/services/recommendations/capability-seed-sources-mcp-server.js +233 -0
- package/dist/services/recommendations/capability-seed-sources.js +127 -32
- package/dist/services/release/release-state.d.ts +2 -2
- package/dist/services/release/release-state.js +44 -15
- package/dist/services/release/version-precheck-layer-changeset.d.ts +2 -0
- package/dist/services/release/version-precheck-layer-changeset.js +43 -0
- package/dist/services/release/version-precheck-service.d.ts +11 -36
- package/dist/services/release/version-precheck-service.js +20 -104
- package/dist/services/release/version-precheck-support.d.ts +53 -0
- package/dist/services/release/version-precheck-support.js +64 -0
- package/dist/services/retrospective/retrospective-index.js +17 -3
- package/dist/services/retrospective/retrospective-search-service.js +6 -2
- package/dist/services/retrospective/retrospective-show.js +4 -1
- package/dist/services/reviewer/model-family.js +7 -1
- package/dist/services/reviewer/providers/anthropic.d.ts +5 -0
- package/dist/services/reviewer/providers/anthropic.js +10 -1
- package/dist/services/reviewer/providers/openai.d.ts +5 -0
- package/dist/services/reviewer/providers/openai.js +10 -1
- package/dist/services/reviewer/reviewer-config.js +4 -2
- package/dist/services/reviewer/reviewer-service.d.ts +2 -36
- package/dist/services/reviewer/reviewer-service.js +2 -1
- package/dist/services/reviewer/reviewer-types.d.ts +43 -0
- package/dist/services/reviewer/reviewer-types.js +1 -0
- package/dist/services/role/role-registry.js +9 -1
- package/dist/services/runtime/runtime-detector.js +4 -1
- package/dist/services/runtime/vendors/claude-code.js +14 -6
- package/dist/services/runtime/vendors/codex.js +11 -3
- package/dist/services/runtime/vendors/copilot.js +11 -3
- package/dist/services/sc/sc-service.js +28 -15
- package/dist/services/scan/acceptance-coverage-service.js +4 -1
- package/dist/services/scan/api-diff-openapi-schema-read.d.ts +67 -0
- package/dist/services/scan/api-diff-openapi-schema-read.js +154 -0
- package/dist/services/scan/api-diff-openapi.d.ts +16 -2
- package/dist/services/scan/api-diff-openapi.js +19 -123
- package/dist/services/scan/api-diff-recorded.js +16 -3
- package/dist/services/scan/api-diff-service.js +49 -16
- package/dist/services/scan/api-diff-types.js +12 -3
- package/dist/services/scan/api-surface-helpers.d.ts +13 -0
- package/dist/services/scan/api-surface-helpers.js +31 -0
- package/dist/services/scan/api-surface-service.d.ts +2 -45
- package/dist/services/scan/api-surface-service.js +15 -26
- package/dist/services/scan/api-surface-types.d.ts +54 -0
- package/dist/services/scan/api-surface-types.js +10 -0
- package/dist/services/scan/archetype-detection.d.ts +37 -0
- package/dist/services/scan/archetype-detection.js +142 -0
- package/dist/services/scan/archetype-service.js +36 -125
- package/dist/services/scan/diff-scope-service.js +35 -15
- package/dist/services/scan/existing-system-service.js +16 -99
- package/dist/services/scan/existing-system-visual-tokens.d.ts +20 -0
- package/dist/services/scan/existing-system-visual-tokens.js +123 -0
- package/dist/services/scan/file-size-policy.d.ts +86 -0
- package/dist/services/scan/file-size-policy.js +184 -0
- package/dist/services/scan/file-size-scan.d.ts +30 -3
- package/dist/services/scan/file-size-scan.js +47 -9
- package/dist/services/scan/karpathy-service.js +6 -1
- package/dist/services/scan/orphan-service.js +86 -20
- package/dist/services/scan/type-sanity-service.js +104 -10
- package/dist/services/sediment/dispose-confirm.d.ts +2 -2
- package/dist/services/sediment/dispose-confirm.js +2 -2
- package/dist/services/sediment/json-schema.d.ts +1 -1
- package/dist/services/sediment/json-schema.js +25 -13
- package/dist/services/sediment/manifest-lint.d.ts +1 -12
- package/dist/services/sediment/manifest-lint.js +1 -7
- package/dist/services/sediment/pool-paths.js +13 -9
- package/dist/services/sediment/pool-read.d.ts +1 -1
- package/dist/services/sediment/pool-read.js +42 -18
- package/dist/services/sediment/pool-rebuild-index.d.ts +1 -1
- package/dist/services/sediment/pool-rebuild-index.js +5 -5
- package/dist/services/sediment/pool-write.d.ts +1 -1
- package/dist/services/sediment/pool-write.js +7 -7
- package/dist/services/sediment/promotion-gate.d.ts +1 -1
- package/dist/services/sediment/promotion-gate.js +9 -9
- package/dist/services/sediment/types.d.ts +8 -8
- package/dist/services/session/binding-status-service.js +14 -4
- package/dist/services/session/caller-binding-service.js +2 -1
- package/dist/services/session/getSessionDir.js +4 -1
- package/dist/services/session/index.d.ts +1 -1
- package/dist/services/session/index.js +1 -1
- package/dist/services/session/resolve-caller-id.js +7 -5
- package/dist/services/session/session-binding-bridge.js +26 -25
- package/dist/services/session/session-checkpoint-service.js +1 -1
- package/dist/services/session/session-file-schema.d.ts +70 -0
- package/dist/services/session/session-file-schema.js +68 -0
- package/dist/services/session/session-manager.d.ts +6 -6
- package/dist/services/session/session-manager.js +30 -29
- package/dist/services/session/session-resume-service.js +2 -1
- package/dist/services/share/bundle-format-constants.d.ts +85 -0
- package/dist/services/share/bundle-format-constants.js +100 -0
- package/dist/services/share/bundle-reader.d.ts +3 -3
- package/dist/services/share/bundle-reader.js +75 -68
- package/dist/services/share/bundle-types.d.ts +3 -70
- package/dist/services/share/bundle-types.js +38 -107
- package/dist/services/share/bundle-writer.d.ts +3 -3
- package/dist/services/share/bundle-writer.js +101 -91
- package/dist/services/share/run-state-contract.d.ts +1 -1
- package/dist/services/share/run-state-contract.js +7 -13
- package/dist/services/signal/cancel-handler.js +2 -1
- package/dist/services/skill/resume-detector.js +6 -4
- package/dist/services/skill/skill-scheduler.js +3 -1
- package/dist/services/skill/skill-search-service.js +4 -4
- package/dist/services/skillhub/release-diff.d.ts +2 -2
- package/dist/services/skillhub/release-diff.js +6 -10
- package/dist/services/skillhub/release-export.d.ts +2 -2
- package/dist/services/skillhub/release-export.js +15 -17
- package/dist/services/skillhub/release-gc-blobs.d.ts +2 -2
- package/dist/services/skillhub/release-gc-blobs.js +4 -4
- package/dist/services/skillhub/release-import.d.ts +2 -2
- package/dist/services/skillhub/release-import.js +13 -12
- package/dist/services/skillhub/release-retain.d.ts +3 -3
- package/dist/services/skillhub/release-retain.js +22 -22
- package/dist/services/skillhub/sqlite-store.d.ts +1 -1
- package/dist/services/skillhub/sqlite-store.js +12 -11
- package/dist/services/skillhub/tar-runtime.js +15 -15
- package/dist/services/skillhub/types.d.ts +4 -4
- package/dist/services/skills/hooks-codegate-superpowers.js +16 -7
- package/dist/services/skills/hooks-settings-service.js +61 -19
- package/dist/services/skills/presence-lease-service.js +26 -16
- package/dist/services/skills/presence-lease-types.d.ts +1 -1
- package/dist/services/skills/presence-lease-types.js +1 -1
- package/dist/services/skills/skill-conformance-service.js +40 -8
- package/dist/services/skills/skill-presence-service.js +16 -14
- package/dist/services/skills/skill-runbook-service.js +2 -1
- package/dist/services/skills/skill-statusline-model.d.ts +128 -0
- package/dist/services/skills/skill-statusline-model.js +163 -0
- package/dist/services/skills/skill-statusline-renderer.js +4 -3
- package/dist/services/skills/skill-statusline-service.d.ts +3 -100
- package/dist/services/skills/skill-statusline-service.js +56 -163
- package/dist/services/skills/statusline-palette.js +11 -6
- package/dist/services/skills/statusline-settings-service.js +2 -1
- package/dist/services/skills/sync-service-support.d.ts +65 -0
- package/dist/services/skills/sync-service-support.js +50 -0
- package/dist/services/skills/sync-service.d.ts +3 -66
- package/dist/services/skills/sync-service.js +15 -53
- package/dist/services/slice/calibration-store.js +8 -2
- package/dist/services/slice/cross-pass-edge-merger.d.ts +3 -28
- package/dist/services/slice/cross-pass-edge-merger.js +13 -63
- package/dist/services/slice/cross-pass-edge-static-scan-support.d.ts +69 -0
- package/dist/services/slice/cross-pass-edge-static-scan-support.js +74 -0
- package/dist/services/slice/granularity-decider.js +2 -2
- package/dist/services/slice/slice-archive-service.js +8 -3
- package/dist/services/slice/slice-check-service.js +19 -8
- package/dist/services/slice/slice-decompose-runners.js +61 -23
- package/dist/services/slice/slice-decompose-service.js +4 -4
- package/dist/services/slice/slice-review-state.js +8 -2
- package/dist/services/smoke/smoke-paths-state.js +9 -2
- package/dist/services/sop/gate-enforce-service.js +9 -2
- package/dist/services/sop/sop-advance-service.js +14 -2
- package/dist/services/sop/sop-check-service.js +16 -4
- package/dist/services/sop/sop-paths.js +3 -1
- package/dist/services/sop/sop-registry-service.js +5 -1
- package/dist/services/sop/sop-service.js +29 -7
- package/dist/services/sop/sop-types.js +5 -1
- package/dist/services/standards/ide-aware-standards-service.js +2 -2
- package/dist/services/standards/loop-engineering-lint.js +12 -5
- package/dist/services/standards/loop-engineering-readiness-lint.js +5 -5
- package/dist/services/standards/migrate-claude-rules-service.js +9 -7
- package/dist/services/standards/missing-standards-detector.js +1 -3
- package/dist/services/standards/project-context-support.d.ts +50 -0
- package/dist/services/standards/project-context-support.js +244 -0
- package/dist/services/standards/project-context-types.d.ts +30 -0
- package/dist/services/standards/project-context-types.js +11 -0
- package/dist/services/standards/project-context.d.ts +10 -22
- package/dist/services/standards/project-context.js +27 -214
- package/dist/services/standards/project-standards-service.js +43 -12
- package/dist/services/standards/standards-render-common.d.ts +15 -0
- package/dist/services/standards/standards-render-common.js +49 -0
- package/dist/services/standards/standards-render.d.ts +1 -2
- package/dist/services/standards/standards-render.js +31 -58
- package/dist/services/standards/ui-library-dispatch-block.js +1 -1
- package/dist/services/tech/tech-change-id-service.js +7 -7
- package/dist/services/tech/tech-service.js +73 -26
- package/dist/services/test-cache/test-cache-service.js +8 -3
- package/dist/services/upgrade/1x-detector-service.js +5 -3
- package/dist/services/upgrade/gitignore-migrate-service.js +5 -5
- package/dist/services/upgrade/upgrade-service.js +36 -13
- package/dist/services/verdict/envelope-parsers.d.ts +84 -0
- package/dist/services/verdict/envelope-parsers.js +146 -0
- package/dist/services/verdict/envelopes.d.ts +50 -60
- package/dist/services/verdict/envelopes.js +18 -156
- package/dist/services/verdict/verdict-aggregator.js +27 -3
- package/dist/services/vm/vm-lease.js +15 -3
- package/dist/services/web/aria-node.d.ts +27 -0
- package/dist/services/web/aria-node.js +1 -0
- package/dist/services/web/browser-acquire.js +3 -1
- package/dist/services/web/browser-cache-probe.d.ts +18 -0
- package/dist/services/web/browser-cache-probe.js +110 -0
- package/dist/services/web/browser-session-manager.js +6 -2
- package/dist/services/web/daemon-registry.js +4 -1
- package/dist/services/web/playwright-loader.d.ts +2 -70
- package/dist/services/web/playwright-types.d.ts +75 -0
- package/dist/services/web/playwright-types.js +1 -0
- package/dist/services/web/snapshot-pruner.d.ts +2 -23
- package/dist/services/web/snapshot-pruner.js +8 -3
- package/dist/services/web/web-daemon-service.js +1 -3
- package/dist/services/web/web-install-service.d.ts +3 -32
- package/dist/services/web/web-install-service.js +21 -100
- package/dist/services/web/web-install-types.d.ts +31 -0
- package/dist/services/web/web-install-types.js +13 -0
- package/dist/services/web/web-login-profile.js +7 -5
- package/dist/services/web/web-protocol.js +3 -1
- package/dist/services/workflow/pipeline-verify-gate-support.js +63 -17
- package/dist/services/workflow/pipeline-verify-service.js +17 -6
- package/dist/services/workflow/plan-reader.js +5 -1
- package/dist/services/workflow/plan-refresher.js +20 -6
- package/dist/services/workflow/plan-trigger-detector.js +31 -8
- package/dist/services/workflow/provision-dispatch-node.js +8 -3
- package/dist/services/workflow/workflow-autonomous-resume-helpers.d.ts +3 -1
- package/dist/services/workflow/workflow-autonomous-resume-helpers.js +35 -144
- package/dist/services/workflow/workflow-autonomous-resume-validation.d.ts +16 -0
- package/dist/services/workflow/workflow-autonomous-resume-validation.js +155 -0
- package/dist/services/workflow/workflow-autonomous-service.js +25 -13
- package/dist/services/workflow/workflow-graph-store-helpers.d.ts +51 -0
- package/dist/services/workflow/workflow-graph-store-helpers.js +111 -0
- package/dist/services/workflow/workflow-graph-store.d.ts +2 -35
- package/dist/services/workflow/workflow-graph-store.js +30 -107
- package/dist/services/workflow/workflow-graph-types.js +3 -3
- package/dist/services/workflow/workflow-inflight-probe.js +14 -7
- package/dist/services/workflow/workflow-loader.js +5 -1
- package/dist/services/workflow/workflow-node-lifecycle.js +22 -21
- package/dist/services/workflow/workflow-presence-lifecycle-types.d.ts +50 -0
- package/dist/services/workflow/workflow-presence-lifecycle-types.js +1 -0
- package/dist/services/workflow/workflow-presence-lifecycle.d.ts +2 -42
- package/dist/services/workflow/workflow-presence-lifecycle.js +19 -21
- package/dist/services/workflow/workflow-router-service.js +169 -27
- package/dist/services/workflow/workflow-skip-service.js +14 -4
- package/dist/services/workflow/workflow-spec-builders.d.ts +15 -0
- package/dist/services/workflow/workflow-spec-builders.js +121 -0
- package/dist/services/workflow/workflow-spec.d.ts +7 -6
- package/dist/services/workflow/workflow-spec.js +22 -116
- package/dist/services/workflow/workflow-state-store.js +2 -1
- package/dist/services/workspace/migrate-1-4-1-service.js +80 -14
- package/dist/services/workspace/migrate-service.js +66 -16
- package/dist/services/workspace/reconcile-migrate.js +6 -2
- package/dist/services/workspace/reconcile-service.js +37 -16
- package/dist/services/workspace/workspace-claude-settings-materializer.js +7 -5
- package/dist/services/workspace/workspace-clean-service.js +4 -1
- package/dist/services/workspace/workspace-service.js +11 -3
- package/dist/services/workspace/workspace-state-service.js +1 -1
- package/dist/services/worktree/git-worktree-parser.js +13 -3
- package/dist/services/worktree/host-worktree-reconciler.js +8 -4
- package/dist/services/worktree/long-path-cleanup.js +23 -6
- package/dist/services/worktree/worktree-gc-guard.js +3 -1
- package/dist/services/worktree/worktree-lease-types.d.ts +53 -0
- package/dist/services/worktree/worktree-lease-types.js +10 -0
- package/dist/services/worktree/worktree-lease.d.ts +2 -44
- package/dist/shared/array-guards.d.ts +30 -0
- package/dist/shared/array-guards.js +32 -0
- package/dist/shared/format-md-compact-internals.d.ts +26 -0
- package/dist/shared/format-md-compact-internals.js +125 -0
- package/dist/shared/format-md-compact.js +1 -117
- package/dist/shared/fs-utils.js +2 -1
- package/dist/shared/incrementing-number.js +3 -3
- package/dist/shared/json-parse.d.ts +71 -0
- package/dist/shared/json-parse.js +32 -0
- package/dist/shared/json-schema-mini.js +3 -1
- package/dist/shared/path-safety.js +3 -1
- package/dist/shared/path-utils.d.ts +20 -0
- package/dist/shared/path-utils.js +26 -0
- package/dist/shared/planner-response.js +3 -3
- package/dist/shared/stale-policy.js +1 -3
- package/dist/skills/peaks-maker/index.js +11 -11
- package/package.json +32 -9
- package/scripts/clean-dist.mjs +1 -2
- package/scripts/copy-templates.mjs +2 -4
- package/scripts/install-skills.mjs +305 -125
- package/scripts/sync-version.mjs +25 -8
- package/scripts/watch.mjs +8 -2
- package/skills/bee/peaks-rd/SKILL.md +1 -1
- package/skills/bee/peaks-rd/references/rd-fanout-contracts.md +26 -10
- package/skills/bee/peaks-rd/references/rd-sub-agent-dispatch.md +1 -1
- package/skills/bee/peaks-rd/references/writing-handoff-frontmatter.md +6 -1
- package/skills/peaks-code/SKILL.md +1 -1
- package/skills/peaks-code/references/periodic-checkpoint.md +7 -5
- package/skills/peaks-code/references/startup-sequence.md +1 -1
- package/skills/peaks-final-review/SKILL.md +1 -1
- /package/{docs → contracts}/test-style-contract.md +0 -0
|
@@ -67,9 +67,14 @@ function getCurrentCommitHash(workspaceRoot) {
|
|
|
67
67
|
if (!workspaceRoot)
|
|
68
68
|
return null;
|
|
69
69
|
try {
|
|
70
|
-
return execFileSync('git', ['rev-parse', 'HEAD'], {
|
|
70
|
+
return execFileSync('git', ['rev-parse', 'HEAD'], {
|
|
71
|
+
cwd: workspaceRoot,
|
|
72
|
+
encoding: 'utf-8',
|
|
73
|
+
windowsHide: true
|
|
74
|
+
}).trim();
|
|
71
75
|
}
|
|
72
|
-
catch {
|
|
76
|
+
catch {
|
|
77
|
+
// TODO(g2): legacy silent catch — grace: 1 minor release (v2.14.0)
|
|
73
78
|
return null;
|
|
74
79
|
}
|
|
75
80
|
}
|
|
@@ -117,11 +122,11 @@ function isRetainedArtifactFile(filePath, artifactWorkspacePath, changesRoot, ch
|
|
|
117
122
|
const changesRootRealPath = realpathSync(changesRoot);
|
|
118
123
|
const changeDirRealPath = realpathSync(changeDir);
|
|
119
124
|
const fileRealPath = realpathSync(filePath);
|
|
120
|
-
return !lstatSync(changesRoot).isSymbolicLink()
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
+
return (!lstatSync(changesRoot).isSymbolicLink() &&
|
|
126
|
+
!lstatSync(changeDir).isSymbolicLink() &&
|
|
127
|
+
isInsidePath(changesRootRealPath, artifactWorkspaceRealPath) &&
|
|
128
|
+
isInsidePath(changeDirRealPath, changesRootRealPath) &&
|
|
129
|
+
isInsidePath(fileRealPath, changeDirRealPath));
|
|
125
130
|
}
|
|
126
131
|
catch {
|
|
127
132
|
return false;
|
|
@@ -178,7 +183,8 @@ function readSessionJsonBinding(projectRoot) {
|
|
|
178
183
|
return parsed.sessionId;
|
|
179
184
|
}
|
|
180
185
|
}
|
|
181
|
-
catch {
|
|
186
|
+
catch {
|
|
187
|
+
// TODO(g2): legacy silent catch — grace: 1 minor release (v2.14.0)
|
|
182
188
|
return null;
|
|
183
189
|
}
|
|
184
190
|
return null;
|
|
@@ -227,7 +233,8 @@ function findSessionOwningSlice(projectRoot, sliceId) {
|
|
|
227
233
|
try {
|
|
228
234
|
topLevel = readdirSync(peaksRoot);
|
|
229
235
|
}
|
|
230
|
-
catch {
|
|
236
|
+
catch {
|
|
237
|
+
// TODO(g2): legacy silent catch — grace: 1 minor release (v2.14.0)
|
|
231
238
|
return null;
|
|
232
239
|
}
|
|
233
240
|
topLevel.sort();
|
|
@@ -327,7 +334,10 @@ export function resolveArtifactSession(projectRoot, sliceId) {
|
|
|
327
334
|
}
|
|
328
335
|
const findHit = findSessionOwningSlice(projectRoot, sliceId);
|
|
329
336
|
if (findHit !== null) {
|
|
330
|
-
return {
|
|
337
|
+
return {
|
|
338
|
+
resolvedSessionId: findHit,
|
|
339
|
+
candidateSources: ['active-skill', 'session-json', 'find-fallback']
|
|
340
|
+
};
|
|
331
341
|
}
|
|
332
342
|
return { resolvedSessionId: null, candidateSources: [] };
|
|
333
343
|
}
|
|
@@ -345,7 +355,9 @@ export function getChangeTraceabilityStatus() {
|
|
|
345
355
|
path: resolve('.peaks', '<session-id>', ...artifact.path),
|
|
346
356
|
exists: false
|
|
347
357
|
})),
|
|
348
|
-
nextActions: [
|
|
358
|
+
nextActions: [
|
|
359
|
+
'Add a workspace: peaks config workspace add --id <id> --name <name> --path <path>'
|
|
360
|
+
]
|
|
349
361
|
};
|
|
350
362
|
}
|
|
351
363
|
const artifactWorkspacePath = getLocalArtifactPath(workspace);
|
|
@@ -448,7 +460,9 @@ export function validateArtifactRetention(sliceId) {
|
|
|
448
460
|
return {
|
|
449
461
|
valid: false,
|
|
450
462
|
missingArtifacts: ['Invalid slice id'],
|
|
451
|
-
warnings: [
|
|
463
|
+
warnings: [
|
|
464
|
+
'Slice id must stay inside .peaks/_runtime/<session-id> and only contain letters, numbers, dots, underscores, or hyphens'
|
|
465
|
+
],
|
|
452
466
|
resolvedSessionId: null,
|
|
453
467
|
candidateSources: []
|
|
454
468
|
};
|
|
@@ -506,9 +520,8 @@ export function validateArtifactRetention(sliceId) {
|
|
|
506
520
|
candidateSources: resolution.candidateSources
|
|
507
521
|
};
|
|
508
522
|
}
|
|
509
|
-
const missingArtifacts = RETENTION_REQUIREMENTS
|
|
510
|
-
.
|
|
511
|
-
.filter((rel) => !legacyPresent(...rel.split('/')) && !resolvedPresent(...rel.split('/')));
|
|
523
|
+
const missingArtifacts = RETENTION_REQUIREMENTS.map(([folder, file]) => `${folder}/${file}`).filter((rel) => !legacyPresent(...rel.split('/')) &&
|
|
524
|
+
!resolvedPresent(...rel.split('/')));
|
|
512
525
|
// If the legacy check is short (i.e. we're missing a lot of legacy-named
|
|
513
526
|
// files) but the resolver landed on a real session, ALSO accept the
|
|
514
527
|
// modern set. The legacy set was designed for an older workflow naming
|
|
@@ -56,7 +56,10 @@ function extractTestCases(qaBody) {
|
|
|
56
56
|
continue;
|
|
57
57
|
const acceptanceMatch = ACCEPTANCE_FIELD_PATTERN.exec(raw);
|
|
58
58
|
if (acceptanceMatch !== null) {
|
|
59
|
-
const refs = (acceptanceMatch[1] ?? '')
|
|
59
|
+
const refs = (acceptanceMatch[1] ?? '')
|
|
60
|
+
.split(/[,\s]+/)
|
|
61
|
+
.map((part) => part.trim())
|
|
62
|
+
.filter((part) => part.length > 0);
|
|
60
63
|
current.ids.push(...refs);
|
|
61
64
|
}
|
|
62
65
|
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* api-diff-openapi-schema-read — the schema-node readers behind
|
|
3
|
+
* `api-diff-openapi.ts`.
|
|
4
|
+
*
|
|
5
|
+
* Hoisted verbatim by the wave-5 file-size split
|
|
6
|
+
* (rid 2026-10-01-wave5-w5-2-slice-scan): the `$ref` / composition primitives a
|
|
7
|
+
* schema node is read with, the flat-field-set constants, the content and
|
|
8
|
+
* parameter accessors, and `loadApiDocument` (which the parent re-exports so
|
|
9
|
+
* `./api-diff-openapi.js` stays the public import path). The analysis that
|
|
10
|
+
* *judges* a document — `schemaToTypeString`, `collectFields`,
|
|
11
|
+
* `parseOpenApiDocument`, `splitTopLevel`, `normalizeType` — stays in the
|
|
12
|
+
* parent, because those carry the file's lint findings.
|
|
13
|
+
*
|
|
14
|
+
* The parent <-> sibling import is a deliberate cycle, safe under
|
|
15
|
+
* `module: NodeNext`: every cross-boundary reference is a hoisted function
|
|
16
|
+
* declaration read at call time, never at module init (lint-gate.md 4e).
|
|
17
|
+
*/
|
|
18
|
+
import { type ParsedDocument } from './api-diff-types.js';
|
|
19
|
+
/**
|
|
20
|
+
* OpenAPI scalar types mapped to their TypeScript spelling. `integer` is NOT a
|
|
21
|
+
* TypeScript type — an unmapped `integer` produced a false `number -> integer`
|
|
22
|
+
* exact line against a recorded `id: number`.
|
|
23
|
+
*/
|
|
24
|
+
declare const SCALAR_TYPES: Readonly<Record<string, string>>;
|
|
25
|
+
declare const COMPOSITION_KEYS: readonly ["allOf", "oneOf", "anyOf"];
|
|
26
|
+
declare function refName(ref: string): string;
|
|
27
|
+
/** Resolves a `$ref` chain. Callers that only need the NAME must not use this — see `schemaToTypeString`. */
|
|
28
|
+
declare function deref(schema: unknown, doc: Record<string, unknown>, depth: number): Record<string, unknown> | null;
|
|
29
|
+
/** The composition/open-shape construct a schema node carries, if any — those cannot be flattened without a compiler. */
|
|
30
|
+
declare function unreadableConstruct(node: Record<string, unknown>): string | null;
|
|
31
|
+
export { COMPOSITION_KEYS, deref, refName, SCALAR_TYPES, unreadableConstruct };
|
|
32
|
+
type SchemaRead = {
|
|
33
|
+
fields: Map<string, string>;
|
|
34
|
+
incompleteReason: string | null;
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* Flat leaf fields of a body/response schema. Arrays descend one level into
|
|
38
|
+
* `items`. The ROOT `$ref` is resolved on purpose — a top-level `$ref` response
|
|
39
|
+
* IS the interface — while nested refs stay named (see `schemaToTypeString`).
|
|
40
|
+
*
|
|
41
|
+
* A node carrying `allOf`/`oneOf`/`anyOf` or `additionalProperties` alongside its
|
|
42
|
+
* own `properties` is INCOMPLETE: the sibling properties made the location look
|
|
43
|
+
* non-empty, so there was neither suppression nor a note, and a field declared
|
|
44
|
+
* under `allOf` was reported as an exact `-> (absent)`.
|
|
45
|
+
*/
|
|
46
|
+
declare const UNRESOLVED_REF = "its schema is a `$ref` chain deeper than the reader resolves";
|
|
47
|
+
declare const NO_PROPERTIES = "its schema lists no `properties`, so no field set could be read from it";
|
|
48
|
+
export { NO_PROPERTIES, type SchemaRead, UNRESOLVED_REF };
|
|
49
|
+
declare function jsonContent(content: unknown): unknown;
|
|
50
|
+
declare function schemaOf(media: unknown): unknown;
|
|
51
|
+
/**
|
|
52
|
+
* The `parameters` array of an OpenAPI object, or `[]` when absent.
|
|
53
|
+
*
|
|
54
|
+
* S10 (2026-09-20): the call sites used to inline
|
|
55
|
+
* `Array.isArray(x['parameters']) ? x['parameters'] : []`, and because
|
|
56
|
+
* `Array.isArray` is typed `arg is any[]` the ternary's type was `any[]` —
|
|
57
|
+
* which then flowed into `collectParameters`. Returning `readonly unknown[]`
|
|
58
|
+
* stops the `any` at this function boundary without asserting anything about
|
|
59
|
+
* the elements: `collectParameters` already narrows each entry itself
|
|
60
|
+
* (`Array.isArray` + `isRecord`), and that is the only place that knows what a
|
|
61
|
+
* parameter may contain.
|
|
62
|
+
*/
|
|
63
|
+
declare function parametersOf(record: Record<string, unknown>): readonly unknown[];
|
|
64
|
+
declare function collectParameters(parameters: unknown, locations: Map<string, Map<string, string>>): void;
|
|
65
|
+
export { collectParameters, jsonContent, parametersOf, schemaOf };
|
|
66
|
+
/** Reads and parses `.json` / `.yaml` / `.yml`. Throws `ApiDiffInputError` on anything else. */
|
|
67
|
+
export declare function loadApiDocument(file: string): ParsedDocument;
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* api-diff-openapi-schema-read — the schema-node readers behind
|
|
3
|
+
* `api-diff-openapi.ts`.
|
|
4
|
+
*
|
|
5
|
+
* Hoisted verbatim by the wave-5 file-size split
|
|
6
|
+
* (rid 2026-10-01-wave5-w5-2-slice-scan): the `$ref` / composition primitives a
|
|
7
|
+
* schema node is read with, the flat-field-set constants, the content and
|
|
8
|
+
* parameter accessors, and `loadApiDocument` (which the parent re-exports so
|
|
9
|
+
* `./api-diff-openapi.js` stays the public import path). The analysis that
|
|
10
|
+
* *judges* a document — `schemaToTypeString`, `collectFields`,
|
|
11
|
+
* `parseOpenApiDocument`, `splitTopLevel`, `normalizeType` — stays in the
|
|
12
|
+
* parent, because those carry the file's lint findings.
|
|
13
|
+
*
|
|
14
|
+
* The parent <-> sibling import is a deliberate cycle, safe under
|
|
15
|
+
* `module: NodeNext`: every cross-boundary reference is a hoisted function
|
|
16
|
+
* declaration read at call time, never at module init (lint-gate.md 4e).
|
|
17
|
+
*/
|
|
18
|
+
import { readFileSync } from 'node:fs';
|
|
19
|
+
import { parse as parseYaml } from 'yaml';
|
|
20
|
+
import { ApiDiffInputError, isRecord } from './api-diff-types.js';
|
|
21
|
+
import { parseOpenApiDocument, schemaToTypeString } from './api-diff-openapi.js';
|
|
22
|
+
const MAX_REF_DEPTH = 4;
|
|
23
|
+
/**
|
|
24
|
+
* OpenAPI scalar types mapped to their TypeScript spelling. `integer` is NOT a
|
|
25
|
+
* TypeScript type — an unmapped `integer` produced a false `number -> integer`
|
|
26
|
+
* exact line against a recorded `id: number`.
|
|
27
|
+
*/
|
|
28
|
+
const SCALAR_TYPES = {
|
|
29
|
+
string: 'string',
|
|
30
|
+
number: 'number',
|
|
31
|
+
integer: 'number',
|
|
32
|
+
boolean: 'boolean'
|
|
33
|
+
};
|
|
34
|
+
const COMPOSITION_KEYS = ['allOf', 'oneOf', 'anyOf'];
|
|
35
|
+
function refName(ref) {
|
|
36
|
+
const tail = ref.slice(ref.lastIndexOf('/') + 1);
|
|
37
|
+
return tail.length > 0 ? tail : ref;
|
|
38
|
+
}
|
|
39
|
+
/** Resolves a `$ref` chain. Callers that only need the NAME must not use this — see `schemaToTypeString`. */
|
|
40
|
+
function deref(schema, doc, depth) {
|
|
41
|
+
if (!isRecord(schema))
|
|
42
|
+
return null;
|
|
43
|
+
const ref = schema['$ref'];
|
|
44
|
+
if (typeof ref === 'string' && depth < MAX_REF_DEPTH) {
|
|
45
|
+
let node = doc;
|
|
46
|
+
for (const part of ref.replace(/^#\//, '').split('/')) {
|
|
47
|
+
if (!isRecord(node))
|
|
48
|
+
return null;
|
|
49
|
+
node = node[part];
|
|
50
|
+
}
|
|
51
|
+
return deref(node, doc, depth + 1);
|
|
52
|
+
}
|
|
53
|
+
return schema;
|
|
54
|
+
}
|
|
55
|
+
/** The composition/open-shape construct a schema node carries, if any — those cannot be flattened without a compiler. */
|
|
56
|
+
function unreadableConstruct(node) {
|
|
57
|
+
for (const key of COMPOSITION_KEYS) {
|
|
58
|
+
const value = node[key];
|
|
59
|
+
if (Array.isArray(value) && value.length > 0) {
|
|
60
|
+
return `it composes schemas with \`${key}\`, which cannot be flattened here`;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
const additional = node['additionalProperties'];
|
|
64
|
+
if (additional !== undefined && additional !== false) {
|
|
65
|
+
return 'it declares `additionalProperties`, so it may carry fields it does not list';
|
|
66
|
+
}
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
export { COMPOSITION_KEYS, deref, refName, SCALAR_TYPES, unreadableConstruct };
|
|
70
|
+
/**
|
|
71
|
+
* Flat leaf fields of a body/response schema. Arrays descend one level into
|
|
72
|
+
* `items`. The ROOT `$ref` is resolved on purpose — a top-level `$ref` response
|
|
73
|
+
* IS the interface — while nested refs stay named (see `schemaToTypeString`).
|
|
74
|
+
*
|
|
75
|
+
* A node carrying `allOf`/`oneOf`/`anyOf` or `additionalProperties` alongside its
|
|
76
|
+
* own `properties` is INCOMPLETE: the sibling properties made the location look
|
|
77
|
+
* non-empty, so there was neither suppression nor a note, and a field declared
|
|
78
|
+
* under `allOf` was reported as an exact `-> (absent)`.
|
|
79
|
+
*/
|
|
80
|
+
const UNRESOLVED_REF = 'its schema is a `$ref` chain deeper than the reader resolves';
|
|
81
|
+
const NO_PROPERTIES = 'its schema lists no `properties`, so no field set could be read from it';
|
|
82
|
+
export { NO_PROPERTIES, UNRESOLVED_REF };
|
|
83
|
+
function jsonContent(content) {
|
|
84
|
+
if (!isRecord(content))
|
|
85
|
+
return undefined;
|
|
86
|
+
if (content['application/json'] !== undefined)
|
|
87
|
+
return content['application/json'];
|
|
88
|
+
return Object.values(content)[0];
|
|
89
|
+
}
|
|
90
|
+
function schemaOf(media) {
|
|
91
|
+
return isRecord(media) ? media['schema'] : undefined;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* The `parameters` array of an OpenAPI object, or `[]` when absent.
|
|
95
|
+
*
|
|
96
|
+
* S10 (2026-09-20): the call sites used to inline
|
|
97
|
+
* `Array.isArray(x['parameters']) ? x['parameters'] : []`, and because
|
|
98
|
+
* `Array.isArray` is typed `arg is any[]` the ternary's type was `any[]` —
|
|
99
|
+
* which then flowed into `collectParameters`. Returning `readonly unknown[]`
|
|
100
|
+
* stops the `any` at this function boundary without asserting anything about
|
|
101
|
+
* the elements: `collectParameters` already narrows each entry itself
|
|
102
|
+
* (`Array.isArray` + `isRecord`), and that is the only place that knows what a
|
|
103
|
+
* parameter may contain.
|
|
104
|
+
*/
|
|
105
|
+
function parametersOf(record) {
|
|
106
|
+
const value = record['parameters'];
|
|
107
|
+
return Array.isArray(value) ? value : [];
|
|
108
|
+
}
|
|
109
|
+
function collectParameters(parameters, locations) {
|
|
110
|
+
if (!Array.isArray(parameters))
|
|
111
|
+
return;
|
|
112
|
+
for (const raw of parameters) {
|
|
113
|
+
if (!isRecord(raw))
|
|
114
|
+
continue;
|
|
115
|
+
const where = raw['in'];
|
|
116
|
+
const name = raw['name'];
|
|
117
|
+
if (where !== 'path' && where !== 'query')
|
|
118
|
+
continue;
|
|
119
|
+
if (typeof name !== 'string')
|
|
120
|
+
continue;
|
|
121
|
+
const key = where === 'path' ? 'pathParams' : 'queryParams';
|
|
122
|
+
const bucket = locations.get(key) ?? new Map();
|
|
123
|
+
bucket.set(name, schemaToTypeString(raw['schema'], {}, 0));
|
|
124
|
+
locations.set(key, bucket);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
export { collectParameters, jsonContent, parametersOf, schemaOf };
|
|
128
|
+
/** Reads and parses `.json` / `.yaml` / `.yml`. Throws `ApiDiffInputError` on anything else. */
|
|
129
|
+
export function loadApiDocument(file) {
|
|
130
|
+
let raw;
|
|
131
|
+
try {
|
|
132
|
+
raw = readFileSync(file, 'utf8');
|
|
133
|
+
}
|
|
134
|
+
catch (error) {
|
|
135
|
+
throw new ApiDiffInputError('UNREADABLE', `cannot read ${file}: ${error.message}`);
|
|
136
|
+
}
|
|
137
|
+
const lower = file.toLowerCase();
|
|
138
|
+
let parsed;
|
|
139
|
+
try {
|
|
140
|
+
if (lower.endsWith('.yaml') || lower.endsWith('.yml'))
|
|
141
|
+
parsed = parseYaml(raw);
|
|
142
|
+
else if (lower.endsWith('.json') || raw.trimStart().startsWith('{'))
|
|
143
|
+
parsed = JSON.parse(raw);
|
|
144
|
+
else
|
|
145
|
+
parsed = parseYaml(raw);
|
|
146
|
+
}
|
|
147
|
+
catch (error) {
|
|
148
|
+
throw new ApiDiffInputError('PARSE_FAILED', `cannot parse ${file} as JSON or YAML: ${error.message}`);
|
|
149
|
+
}
|
|
150
|
+
if (!isRecord(parsed)) {
|
|
151
|
+
throw new ApiDiffInputError('NOT_AN_OBJECT', `${file} did not parse to an object`);
|
|
152
|
+
}
|
|
153
|
+
return parseOpenApiDocument(file, parsed);
|
|
154
|
+
}
|
|
@@ -14,9 +14,23 @@
|
|
|
14
14
|
* never presented as complete.
|
|
15
15
|
*/
|
|
16
16
|
import { type ParsedDocument } from './api-diff-types.js';
|
|
17
|
+
import { loadApiDocument } from './api-diff-openapi-schema-read.js';
|
|
18
|
+
export { loadApiDocument };
|
|
19
|
+
/**
|
|
20
|
+
* Renders an OpenAPI schema as a TypeScript-ish type text. Arrays render as
|
|
21
|
+
* `Array<X>` (not `X[]`) on purpose: `normalizeType` rewrites both sides
|
|
22
|
+
* identically, so a recorded `X[]` and a document `Array<X>` still compare equal.
|
|
23
|
+
*
|
|
24
|
+
* A `$ref` is answered with its referenced NAME and never dereferenced. Checking
|
|
25
|
+
* after `deref()` made `refName` unreachable for every ref inside
|
|
26
|
+
* `MAX_REF_DEPTH`, so a nested `owner: {$ref: User}` was reported as `object`
|
|
27
|
+
* against a recorded `owner: User` — an exact line for a field that did not
|
|
28
|
+
* change. The name is the faithful reading, and it is what a recorded interface
|
|
29
|
+
* writes.
|
|
30
|
+
*/
|
|
31
|
+
declare function schemaToTypeString(schema: unknown, doc: Record<string, unknown>, depth: number): string;
|
|
32
|
+
export { schemaToTypeString };
|
|
17
33
|
export declare function parseOpenApiDocument(file: string, doc: Record<string, unknown>): ParsedDocument;
|
|
18
|
-
/** Reads and parses `.json` / `.yaml` / `.yml`. Throws `ApiDiffInputError` on anything else. */
|
|
19
|
-
export declare function loadApiDocument(file: string): ParsedDocument;
|
|
20
34
|
/**
|
|
21
35
|
* Normalizes type text so `Array<string>`, `string[]`, `string | null` and
|
|
22
36
|
* `string|null` compare equal.
|
|
@@ -13,56 +13,9 @@
|
|
|
13
13
|
* incomplete, which suppresses every exact line for that location. Partial is
|
|
14
14
|
* never presented as complete.
|
|
15
15
|
*/
|
|
16
|
-
import { readFileSync } from 'node:fs';
|
|
17
|
-
import { parse as parseYaml } from 'yaml';
|
|
18
16
|
import { ApiDiffInputError, HTTP_METHODS, isRecord } from './api-diff-types.js';
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
* OpenAPI scalar types mapped to their TypeScript spelling. `integer` is NOT a
|
|
22
|
-
* TypeScript type — an unmapped `integer` produced a false `number -> integer`
|
|
23
|
-
* exact line against a recorded `id: number`.
|
|
24
|
-
*/
|
|
25
|
-
const SCALAR_TYPES = {
|
|
26
|
-
string: 'string',
|
|
27
|
-
number: 'number',
|
|
28
|
-
integer: 'number',
|
|
29
|
-
boolean: 'boolean'
|
|
30
|
-
};
|
|
31
|
-
const COMPOSITION_KEYS = ['allOf', 'oneOf', 'anyOf'];
|
|
32
|
-
function refName(ref) {
|
|
33
|
-
const tail = ref.slice(ref.lastIndexOf('/') + 1);
|
|
34
|
-
return tail.length > 0 ? tail : ref;
|
|
35
|
-
}
|
|
36
|
-
/** Resolves a `$ref` chain. Callers that only need the NAME must not use this — see `schemaToTypeString`. */
|
|
37
|
-
function deref(schema, doc, depth) {
|
|
38
|
-
if (!isRecord(schema))
|
|
39
|
-
return null;
|
|
40
|
-
const ref = schema['$ref'];
|
|
41
|
-
if (typeof ref === 'string' && depth < MAX_REF_DEPTH) {
|
|
42
|
-
let node = doc;
|
|
43
|
-
for (const part of ref.replace(/^#\//, '').split('/')) {
|
|
44
|
-
if (!isRecord(node))
|
|
45
|
-
return null;
|
|
46
|
-
node = node[part];
|
|
47
|
-
}
|
|
48
|
-
return deref(node, doc, depth + 1);
|
|
49
|
-
}
|
|
50
|
-
return schema;
|
|
51
|
-
}
|
|
52
|
-
/** The composition/open-shape construct a schema node carries, if any — those cannot be flattened without a compiler. */
|
|
53
|
-
function unreadableConstruct(node) {
|
|
54
|
-
for (const key of COMPOSITION_KEYS) {
|
|
55
|
-
const value = node[key];
|
|
56
|
-
if (Array.isArray(value) && value.length > 0) {
|
|
57
|
-
return `it composes schemas with \`${key}\`, which cannot be flattened here`;
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
const additional = node['additionalProperties'];
|
|
61
|
-
if (additional !== undefined && additional !== false) {
|
|
62
|
-
return 'it declares `additionalProperties`, so it may carry fields it does not list';
|
|
63
|
-
}
|
|
64
|
-
return null;
|
|
65
|
-
}
|
|
17
|
+
import { collectParameters, COMPOSITION_KEYS, deref, jsonContent, loadApiDocument, NO_PROPERTIES, parametersOf, refName, SCALAR_TYPES, schemaOf, unreadableConstruct, UNRESOLVED_REF } from './api-diff-openapi-schema-read.js';
|
|
18
|
+
export { loadApiDocument };
|
|
66
19
|
/**
|
|
67
20
|
* Renders an OpenAPI schema as a TypeScript-ish type text. Arrays render as
|
|
68
21
|
* `Array<X>` (not `X[]`) on purpose: `normalizeType` rewrites both sides
|
|
@@ -87,7 +40,9 @@ function schemaToTypeString(schema, doc, depth) {
|
|
|
87
40
|
const enumValues = node['enum'];
|
|
88
41
|
let base;
|
|
89
42
|
if (Array.isArray(enumValues) && enumValues.length > 0) {
|
|
90
|
-
base = enumValues
|
|
43
|
+
base = enumValues
|
|
44
|
+
.map((value) => (typeof value === 'string' ? JSON.stringify(value) : String(value)))
|
|
45
|
+
.join(' | ');
|
|
91
46
|
}
|
|
92
47
|
else if (COMPOSITION_KEYS.some((key) => Array.isArray(node[key]) && node[key].length > 0)) {
|
|
93
48
|
const key = COMPOSITION_KEYS.find((candidate) => Array.isArray(node[candidate]));
|
|
@@ -101,7 +56,9 @@ function schemaToTypeString(schema, doc, depth) {
|
|
|
101
56
|
// leaked an unmapped `integer`, which this file's own comment records as a
|
|
102
57
|
// source of false `number -> integer` exact lines.
|
|
103
58
|
base = node['type']
|
|
104
|
-
.map((entry) =>
|
|
59
|
+
.map((entry) => typeof entry === 'string' && SCALAR_TYPES[entry] !== undefined
|
|
60
|
+
? SCALAR_TYPES[entry]
|
|
61
|
+
: String(entry))
|
|
105
62
|
.join(' | ');
|
|
106
63
|
}
|
|
107
64
|
else {
|
|
@@ -122,18 +79,7 @@ function schemaToTypeString(schema, doc, depth) {
|
|
|
122
79
|
}
|
|
123
80
|
return nullable ? `${base} | null` : base;
|
|
124
81
|
}
|
|
125
|
-
|
|
126
|
-
* Flat leaf fields of a body/response schema. Arrays descend one level into
|
|
127
|
-
* `items`. The ROOT `$ref` is resolved on purpose — a top-level `$ref` response
|
|
128
|
-
* IS the interface — while nested refs stay named (see `schemaToTypeString`).
|
|
129
|
-
*
|
|
130
|
-
* A node carrying `allOf`/`oneOf`/`anyOf` or `additionalProperties` alongside its
|
|
131
|
-
* own `properties` is INCOMPLETE: the sibling properties made the location look
|
|
132
|
-
* non-empty, so there was neither suppression nor a note, and a field declared
|
|
133
|
-
* under `allOf` was reported as an exact `-> (absent)`.
|
|
134
|
-
*/
|
|
135
|
-
const UNRESOLVED_REF = 'its schema is a `$ref` chain deeper than the reader resolves';
|
|
136
|
-
const NO_PROPERTIES = 'its schema lists no `properties`, so no field set could be read from it';
|
|
82
|
+
export { schemaToTypeString };
|
|
137
83
|
function collectFields(schema, doc) {
|
|
138
84
|
const fields = new Map();
|
|
139
85
|
const node = deref(schema, doc, 0);
|
|
@@ -179,34 +125,6 @@ function collectFields(schema, doc) {
|
|
|
179
125
|
}
|
|
180
126
|
return { fields, incompleteReason: null };
|
|
181
127
|
}
|
|
182
|
-
function jsonContent(content) {
|
|
183
|
-
if (!isRecord(content))
|
|
184
|
-
return undefined;
|
|
185
|
-
if (content['application/json'] !== undefined)
|
|
186
|
-
return content['application/json'];
|
|
187
|
-
return Object.values(content)[0];
|
|
188
|
-
}
|
|
189
|
-
function schemaOf(media) {
|
|
190
|
-
return isRecord(media) ? media['schema'] : undefined;
|
|
191
|
-
}
|
|
192
|
-
function collectParameters(parameters, locations) {
|
|
193
|
-
if (!Array.isArray(parameters))
|
|
194
|
-
return;
|
|
195
|
-
for (const raw of parameters) {
|
|
196
|
-
if (!isRecord(raw))
|
|
197
|
-
continue;
|
|
198
|
-
const where = raw['in'];
|
|
199
|
-
const name = raw['name'];
|
|
200
|
-
if (where !== 'path' && where !== 'query')
|
|
201
|
-
continue;
|
|
202
|
-
if (typeof name !== 'string')
|
|
203
|
-
continue;
|
|
204
|
-
const key = where === 'path' ? 'pathParams' : 'queryParams';
|
|
205
|
-
const bucket = locations.get(key) ?? new Map();
|
|
206
|
-
bucket.set(name, schemaToTypeString(raw['schema'], {}, 0));
|
|
207
|
-
locations.set(key, bucket);
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
128
|
export function parseOpenApiDocument(file, doc) {
|
|
211
129
|
const version = doc['openapi'];
|
|
212
130
|
if (typeof version !== 'string' || !/^3\.\d+/.test(version.trim())) {
|
|
@@ -234,8 +152,8 @@ export function parseOpenApiDocument(file, doc) {
|
|
|
234
152
|
if (read.incompleteReason !== null)
|
|
235
153
|
locationIssues.set(location, read.incompleteReason);
|
|
236
154
|
};
|
|
237
|
-
const shared =
|
|
238
|
-
const own =
|
|
155
|
+
const shared = parametersOf(pathItem);
|
|
156
|
+
const own = parametersOf(opRaw);
|
|
239
157
|
collectParameters([...shared, ...own], locations);
|
|
240
158
|
const requestBody = opRaw['requestBody'];
|
|
241
159
|
const bodySchema = schemaOf(jsonContent(isRecord(requestBody) ? requestBody['content'] : undefined));
|
|
@@ -263,34 +181,9 @@ export function parseOpenApiDocument(file, doc) {
|
|
|
263
181
|
}
|
|
264
182
|
const info = doc['info'];
|
|
265
183
|
const title = isRecord(info) && typeof info['title'] === 'string' ? info['title'] : undefined;
|
|
266
|
-
return title === undefined
|
|
267
|
-
}
|
|
268
|
-
|
|
269
|
-
export function loadApiDocument(file) {
|
|
270
|
-
let raw;
|
|
271
|
-
try {
|
|
272
|
-
raw = readFileSync(file, 'utf8');
|
|
273
|
-
}
|
|
274
|
-
catch (error) {
|
|
275
|
-
throw new ApiDiffInputError('UNREADABLE', `cannot read ${file}: ${error.message}`);
|
|
276
|
-
}
|
|
277
|
-
const lower = file.toLowerCase();
|
|
278
|
-
let parsed;
|
|
279
|
-
try {
|
|
280
|
-
if (lower.endsWith('.yaml') || lower.endsWith('.yml'))
|
|
281
|
-
parsed = parseYaml(raw);
|
|
282
|
-
else if (lower.endsWith('.json') || raw.trimStart().startsWith('{'))
|
|
283
|
-
parsed = JSON.parse(raw);
|
|
284
|
-
else
|
|
285
|
-
parsed = parseYaml(raw);
|
|
286
|
-
}
|
|
287
|
-
catch (error) {
|
|
288
|
-
throw new ApiDiffInputError('PARSE_FAILED', `cannot parse ${file} as JSON or YAML: ${error.message}`);
|
|
289
|
-
}
|
|
290
|
-
if (!isRecord(parsed)) {
|
|
291
|
-
throw new ApiDiffInputError('NOT_AN_OBJECT', `${file} did not parse to an object`);
|
|
292
|
-
}
|
|
293
|
-
return parseOpenApiDocument(file, parsed);
|
|
184
|
+
return title === undefined
|
|
185
|
+
? { openapi: version, operations }
|
|
186
|
+
: { openapi: version, title, operations };
|
|
294
187
|
}
|
|
295
188
|
/** Splits on a separator that sits at bracket depth 0, leaving `("a" | "b")[]` and `Record<string, number>` intact. */
|
|
296
189
|
function splitTopLevel(text, separator) {
|
|
@@ -344,7 +237,10 @@ function splitTopLevel(text, separator) {
|
|
|
344
237
|
* `X | undefined` used to become `X | undefined | undefined`.
|
|
345
238
|
*/
|
|
346
239
|
export function normalizeType(text) {
|
|
347
|
-
let out = text
|
|
240
|
+
let out = text
|
|
241
|
+
.trim()
|
|
242
|
+
.replace(/[;,]\s*$/, '')
|
|
243
|
+
.replace(/\s+/g, ' ');
|
|
348
244
|
out = out.replace(/'([^'\\]*)'/g, '"$1"');
|
|
349
245
|
out = out.replace(/\s*\|\s*/g, ' | ').replace(/\s*&\s*/g, ' & ');
|
|
350
246
|
const union = splitTopLevel(out, ' | ');
|
|
@@ -352,7 +248,7 @@ export function normalizeType(text) {
|
|
|
352
248
|
out = [...new Set(union)].join(' | ');
|
|
353
249
|
out = out.replace(/\s*\[\s*\]/g, '[]');
|
|
354
250
|
for (let pass = 0; pass < 3; pass += 1) {
|
|
355
|
-
out = out.replace(/Array<([^<>]*)>/g, (_all, inner) =>
|
|
251
|
+
out = out.replace(/Array<([^<>]*)>/g, (_all, inner) => /[|&]/.test(inner) ? `(${inner})[]` : `${inner}[]`);
|
|
356
252
|
}
|
|
357
253
|
out = out.replace(/\s*<\s*/g, '<').replace(/\s*>\s*/g, '>');
|
|
358
254
|
return out.trim();
|
|
@@ -19,8 +19,19 @@ const MAX_HITS_PER_NAME = 5;
|
|
|
19
19
|
const MAX_SCAN_FILE_BYTES = 2 * 1024 * 1024;
|
|
20
20
|
const SCAN_EXTENSIONS = ['.ts', '.tsx', '.js', '.jsx', '.mjs', '.cjs', '.vue', '.json', '.html'];
|
|
21
21
|
const SKIP_DIRS = new Set([
|
|
22
|
-
'node_modules',
|
|
23
|
-
'.
|
|
22
|
+
'node_modules',
|
|
23
|
+
'.git',
|
|
24
|
+
'dist',
|
|
25
|
+
'build',
|
|
26
|
+
'out',
|
|
27
|
+
'coverage',
|
|
28
|
+
'.next',
|
|
29
|
+
'.nuxt',
|
|
30
|
+
'.output',
|
|
31
|
+
'.peaks',
|
|
32
|
+
'.turbo',
|
|
33
|
+
'.cache',
|
|
34
|
+
'__pycache__'
|
|
24
35
|
]);
|
|
25
36
|
// ---------------------------------------------------------------------------
|
|
26
37
|
// Recorded interface extraction (NO TypeScript compiler)
|
|
@@ -218,7 +229,9 @@ function truncate(text, max = 40) {
|
|
|
218
229
|
export function parseRecordedInterfaces(source, file) {
|
|
219
230
|
const lines = stripComments(source).split(/\r?\n/);
|
|
220
231
|
const fileBalanced = braceBalance(lines.join('\n')) === 0;
|
|
221
|
-
const fileReason = fileBalanced
|
|
232
|
+
const fileReason = fileBalanced
|
|
233
|
+
? null
|
|
234
|
+
: 'the file has unbalanced braces, so its structure could not be read';
|
|
222
235
|
const found = [];
|
|
223
236
|
let i = 0;
|
|
224
237
|
while (i < lines.length) {
|