@planu/cli 4.14.1 → 5.1.1
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 +82 -0
- package/LICENSE +55 -12
- package/README.md +10 -2
- package/dist/cli/commands/install.d.ts +1 -12
- package/dist/cli/commands/install.js +9 -65
- package/dist/cli/commands/job.js +4 -3
- package/dist/cli/commands/spec.js +12 -3
- package/dist/cli/commands/validate.js +2 -2
- package/dist/cli/router.js +1 -3
- package/dist/config/environment-schema.json +1 -3
- package/dist/config/official-sdd-tools.d.ts +4 -0
- package/dist/config/official-sdd-tools.js +35 -0
- package/dist/config/product-public.d.ts +139 -3
- package/dist/config/product-public.js +8 -1
- package/dist/config/product-public.json +7 -36
- package/dist/config/registries/hosts/codex.json +20 -363
- package/dist/config/release-policy.json +84 -2
- package/dist/config/runtime-policy.json +12 -1
- package/dist/config/skill-templates/planu-resume-work.md +2 -2
- package/dist/core/index.d.ts +1 -1
- package/dist/core/spec-validator.d.ts +4 -4
- package/dist/core/spec-validator.js +33 -19
- package/dist/engine/abortable-process-runner.d.ts +20 -2
- package/dist/engine/abortable-process-runner.js +243 -74
- package/dist/engine/ambiguity-scorer.js +4 -26
- package/dist/engine/auth/scope-mapper.js +1 -7
- package/dist/engine/autopilot/state-updater.js +4 -4
- package/dist/engine/cascade-hooks/hooks/review-enricher.hook.js +9 -6
- package/dist/engine/cascade-hooks/state-drift-detector.d.ts +3 -3
- package/dist/engine/cascade-hooks/state-drift-detector.js +1 -1
- package/dist/engine/ci-generator/planu-config.js +1 -7
- package/dist/engine/clarification-gate/gate.d.ts +3 -3
- package/dist/engine/code-scanner/layer-scanner.js +6 -22
- package/dist/engine/core-bridge.d.ts +3 -3
- package/dist/engine/cost-guardrails.d.ts +1 -1
- package/dist/engine/cost-guardrails.js +1 -1
- package/dist/engine/criterion-identity.d.ts +1 -0
- package/dist/engine/criterion-identity.js +7 -0
- package/dist/engine/dashboard/data-loader.js +2 -7
- package/dist/engine/dashboard/templates-layout.js +0 -3
- package/dist/engine/dashboard/templates-project.js +1 -13
- package/dist/engine/docs-site-generator/data-collector.d.ts +1 -1
- package/dist/engine/docs-site-generator/data-collector.js +7 -28
- package/dist/engine/docs-site-generator/tools-renderer.js +3 -10
- package/dist/engine/evidence-gates/artifact-reader.d.ts +12 -1
- package/dist/engine/evidence-gates/artifact-reader.js +174 -4
- package/dist/engine/evidence-gates/evidence-autofill.d.ts +10 -0
- package/dist/engine/evidence-gates/evidence-autofill.js +148 -0
- package/dist/engine/evidence-gates/evidence-skeletons.d.ts +19 -0
- package/dist/engine/evidence-gates/evidence-skeletons.js +69 -0
- package/dist/engine/evidence-gates/lifecycle-gate.js +4 -3
- package/dist/engine/evidence-gates/reconciliation-freshness.d.ts +11 -0
- package/dist/engine/evidence-gates/reconciliation-freshness.js +72 -0
- package/dist/engine/evidence-index/done-drift.d.ts +1 -1
- package/dist/engine/evidence-index/done-drift.js +40 -18
- package/dist/engine/execution/context.js +3 -0
- package/dist/engine/execution/durable-job-heartbeat-runtime.d.ts +4 -0
- package/dist/engine/execution/durable-job-heartbeat-runtime.js +400 -0
- package/dist/engine/execution/job-runtime.d.ts +30 -0
- package/dist/engine/execution/job-runtime.js +114 -6
- package/dist/engine/execution/operation-journal.js +10 -4
- package/dist/engine/execution/public-job-sanitizer.d.ts +4 -0
- package/dist/engine/execution/public-job-sanitizer.js +31 -0
- package/dist/engine/execution/validate-job-executor.d.ts +12 -1
- package/dist/engine/execution/validate-job-executor.js +549 -86
- package/dist/engine/execution/validate-job-payload.js +107 -50
- package/dist/engine/execution/validate-job-recovery.js +1 -1
- package/dist/engine/execution/validate-worker-runtime.d.ts +5 -0
- package/dist/engine/execution/validate-worker-runtime.js +90 -2
- package/dist/engine/execution/validate-worker-thread.js +17 -24
- package/dist/engine/handoff-artifacts/schemas.d.ts +2 -1
- package/dist/engine/handoff-artifacts/schemas.js +33 -0
- package/dist/engine/handoff-packager.d.ts +19 -0
- package/dist/engine/handoff-packager.js +415 -13
- package/dist/engine/hooks/effort-configurator.js +1 -1
- package/dist/engine/impact-detector/test-break-predictor.js +3 -3
- package/dist/engine/impact-detector/tool-registration.js +1 -1
- package/dist/engine/implementation-contract/renderer.js +23 -8
- package/dist/engine/lifecycle-reconciliation-io.d.ts +11 -0
- package/dist/engine/lifecycle-reconciliation-io.js +180 -0
- package/dist/engine/lifecycle-reconciliation.d.ts +16 -0
- package/dist/engine/lifecycle-reconciliation.js +406 -0
- package/dist/engine/local-first/tool-classification.js +2 -0
- package/dist/engine/macos-keychain-native-port.d.ts +5 -0
- package/dist/engine/macos-keychain-native-port.js +19 -7
- package/dist/engine/migrations/remove-commercial-state.d.ts +3 -0
- package/dist/engine/migrations/remove-commercial-state.js +343 -0
- package/dist/engine/minimality/policy-loader.js +247 -6
- package/dist/engine/network-policy.js +1 -0
- package/dist/engine/planu-core.darwin-arm64.node.manifest.json +7 -7
- package/dist/engine/planu-core.darwin-arm64.node.sbom.json +20 -20
- package/dist/engine/planu-core.darwin-x64.node.manifest.json +7 -7
- package/dist/engine/planu-core.darwin-x64.node.sbom.json +20 -20
- package/dist/engine/planu-core.linux-arm64-gnu.node.manifest.json +7 -7
- package/dist/engine/planu-core.linux-arm64-gnu.node.sbom.json +20 -20
- package/dist/engine/planu-core.linux-arm64-musl.node.manifest.json +7 -7
- package/dist/engine/planu-core.linux-arm64-musl.node.sbom.json +20 -20
- package/dist/engine/planu-core.linux-x64-gnu.node.manifest.json +7 -7
- package/dist/engine/planu-core.linux-x64-gnu.node.sbom.json +20 -20
- package/dist/engine/planu-core.linux-x64-musl.node.manifest.json +7 -7
- package/dist/engine/planu-core.linux-x64-musl.node.sbom.json +20 -20
- package/dist/engine/planu-core.win32-arm64-msvc.node.manifest.json +7 -7
- package/dist/engine/planu-core.win32-arm64-msvc.node.sbom.json +20 -20
- package/dist/engine/planu-core.win32-x64-msvc.node.manifest.json +7 -7
- package/dist/engine/planu-core.win32-x64-msvc.node.sbom.json +20 -20
- package/dist/engine/readiness-checker.d.ts +1 -16
- package/dist/engine/readiness-checker.js +27 -88
- package/dist/engine/reverse-engineer/api-detector.js +2 -13
- package/dist/engine/reverse-engineer/complexity-analyzer.js +2 -13
- package/dist/engine/reverse-engineer/config-analyzer.js +2 -13
- package/dist/engine/reverse-engineer/dependency-graph.js +2 -13
- package/dist/engine/reverse-engineer/test-analyzer.js +2 -13
- package/dist/engine/reverse-engineer/walk-ignore.d.ts +3 -0
- package/dist/engine/reverse-engineer/walk-ignore.js +26 -0
- package/dist/engine/runtime-policy.d.ts +2 -0
- package/dist/engine/runtime-policy.js +42 -5
- package/dist/engine/runtime-security/rate-limiter.js +0 -1
- package/dist/engine/safety/contained-project-file.d.ts +3 -0
- package/dist/engine/safety/contained-project-file.js +23 -0
- package/dist/engine/scope-boundaries/contradiction-checker.js +63 -1
- package/dist/engine/scope-boundaries/scope-validator.js +45 -7
- package/dist/engine/session/checkpoint-writer.js +0 -9
- package/dist/engine/spec-format/acceptance-criteria.d.ts +6 -2
- package/dist/engine/spec-format/acceptance-criteria.js +82 -22
- package/dist/engine/spec-format/markdown-sections.d.ts +14 -0
- package/dist/engine/spec-format/markdown-sections.js +105 -0
- package/dist/engine/spec-format/read-technical-section.js +33 -5
- package/dist/engine/spec-format/technical-md-populator.js +3 -2
- package/dist/engine/spec-format/text-fences.js +20 -2
- package/dist/engine/spec-format/unified-spec-builder.d.ts +7 -0
- package/dist/engine/spec-format/unified-spec-builder.js +202 -0
- package/dist/engine/spec-migrator/canonical-deduplicator.d.ts +18 -0
- package/dist/engine/spec-migrator/canonical-deduplicator.js +479 -0
- package/dist/engine/spec-migrator/filesystem-import.d.ts +4 -8
- package/dist/engine/spec-migrator/filesystem-import.js +121 -14
- package/dist/engine/spec-migrator/frontmatter-parser.js +32 -15
- package/dist/engine/spec-migrator/index.d.ts +1 -0
- package/dist/engine/spec-migrator/index.js +1 -0
- package/dist/engine/spec-state-machine/transition-spec.d.ts +6 -1
- package/dist/engine/spec-state-machine/transition-spec.js +10 -1
- package/dist/engine/spec-state-syncer.js +1 -1
- package/dist/engine/technical-enricher/index.js +16 -8
- package/dist/engine/technical-enricher/render-enriched.d.ts +1 -0
- package/dist/engine/technical-enricher/render-enriched.js +42 -14
- package/dist/engine/telemetry/health-checker.js +53 -17
- package/dist/engine/telemetry/telemetry-client.js +26 -8
- package/dist/engine/text-signal-boundaries.d.ts +2 -0
- package/dist/engine/text-signal-boundaries.js +25 -2
- package/dist/engine/time/relative-date.d.ts +3 -0
- package/dist/engine/time/relative-date.js +16 -0
- package/dist/engine/timing/budget.d.ts +11 -0
- package/dist/engine/timing/budget.js +31 -9
- package/dist/engine/token-optimizer/analytics.d.ts +1 -1
- package/dist/engine/token-optimizer/analytics.js +5 -6
- package/dist/engine/usage-tracker/core.d.ts +2 -2
- package/dist/engine/usage-tracker/core.js +1 -2
- package/dist/engine/usage-tracker/index.d.ts +0 -3
- package/dist/engine/usage-tracker/index.js +0 -3
- package/dist/engine/usage-tracker/stats.d.ts +2 -2
- package/dist/engine/usage-tracker/stats.js +1 -28
- package/dist/engine/validation/durable-validation.d.ts +1 -1
- package/dist/engine/validation/durable-validation.js +3 -82
- package/dist/engine/validation/validation-freshness.d.ts +11 -1
- package/dist/engine/validation/validation-freshness.js +231 -91
- package/dist/engine/validation/validation-receipt.d.ts +9 -6
- package/dist/engine/validation/validation-receipt.js +84 -24
- package/dist/engine/validation/validation-source-digest.d.ts +2 -0
- package/dist/engine/validation/validation-source-digest.js +86 -0
- package/dist/engine/validation/validation-submission.d.ts +5 -4
- package/dist/engine/validation/validation-submission.js +25 -11
- package/dist/engine/validation/validation-worktree.d.ts +21 -0
- package/dist/engine/validation/validation-worktree.js +260 -0
- package/dist/engine/validation-impact-planner.d.ts +14 -2
- package/dist/engine/validation-impact-planner.js +0 -3
- package/dist/engine/validator/dor-dod.d.ts +1 -0
- package/dist/engine/validator/dor-dod.js +5 -3
- package/dist/engine/validator/extractors.d.ts +1 -5
- package/dist/engine/validator/extractors.js +24 -69
- package/dist/engine/validator/spec-compliance-runner.d.ts +12 -24
- package/dist/engine/validator/spec-compliance-runner.js +429 -211
- package/dist/engine/validator.js +35 -22
- package/dist/index.js +4 -16
- package/dist/resources/usage-stats-resource.js +2 -18
- package/dist/security/adapters/linux-secret-service.js +7 -3
- package/dist/security/adapters/windows-credential-manager.js +6 -4
- package/dist/server/routes/specs.js +13 -1
- package/dist/storage/base-store.d.ts +1 -1
- package/dist/storage/base-store.js +1 -1
- package/dist/storage/feedback-remote.d.ts +2 -3
- package/dist/storage/feedback-remote.js +45 -31
- package/dist/storage/global-store.d.ts +1 -17
- package/dist/storage/global-store.js +1 -42
- package/dist/storage/index.d.ts +0 -2
- package/dist/storage/index.js +0 -2
- package/dist/storage/migrations/canonical-storage.js +124 -11
- package/dist/storage/runtime-db.d.ts +9 -0
- package/dist/storage/runtime-db.js +64 -8
- package/dist/storage/spec-store.d.ts +14 -2
- package/dist/storage/spec-store.js +104 -14
- package/dist/storage/status-store/atomic-status-write.d.ts +5 -0
- package/dist/storage/status-store/atomic-status-write.js +57 -0
- package/dist/storage/status-store/file-lock.js +30 -11
- package/dist/storage/status-store/self-healing.js +3 -3
- package/dist/storage/status-store/version-sync.d.ts +2 -1
- package/dist/storage/status-store/version-sync.js +35 -40
- package/dist/storage/usage-store.d.ts +1 -5
- package/dist/storage/usage-store.js +0 -35
- package/dist/tools/auto-update-handler.d.ts +3 -3
- package/dist/tools/auto-update-handler.js +3 -3
- package/dist/tools/challenge-spec/resilience-challenge-scenarios.d.ts +2 -1
- package/dist/tools/challenge-spec/resilience-challenge-scenarios.js +10 -7
- package/dist/tools/challenge-spec/scenario-collector.js +1 -1
- package/dist/tools/challenge-spec/scenarios-data.js +1 -1
- package/dist/tools/challenge-spec/scenarios-utils.d.ts +1 -1
- package/dist/tools/challenge-spec/scenarios-utils.js +35 -11
- package/dist/tools/challenge-spec-helpers.d.ts +10 -1
- package/dist/tools/challenge-spec-helpers.js +63 -22
- package/dist/tools/challenge-spec.js +23 -8
- package/dist/tools/check-readiness.js +38 -14
- package/dist/tools/configure-telemetry.js +30 -2
- package/dist/tools/create-spec/spec-builder.d.ts +7 -0
- package/dist/tools/create-spec/spec-builder.js +19 -15
- package/dist/tools/create-spec.d.ts +1 -0
- package/dist/tools/create-spec.js +584 -309
- package/dist/tools/git/branch-ops.d.ts +1 -1
- package/dist/tools/git/branch-ops.js +3 -2
- package/dist/tools/init-project/handler.js +10 -12
- package/dist/tools/init-project/host-assets-writer.js +26 -1
- package/dist/tools/init-project/lint-scaffolder.d.ts +3 -3
- package/dist/tools/init-project/migration-runner.d.ts +2 -4
- package/dist/tools/init-project/migration-runner.js +3 -2
- package/dist/tools/init-project/portable-index-reconciler.d.ts +4 -0
- package/dist/tools/init-project/portable-index-reconciler.js +14 -0
- package/dist/tools/init-project/result-builder.js +1 -3
- package/dist/tools/jobs/handlers.js +38 -6
- package/dist/tools/list-specs.js +5 -26
- package/dist/tools/merge-risk-handler.js +2 -2
- package/dist/tools/package-handoff.js +2 -0
- package/dist/tools/reconcile-spec.js +0 -27
- package/dist/tools/register-agent-squad-tools.js +2 -2
- package/dist/tools/register-platform-tools/design-stack-tools.js +11 -11
- package/dist/tools/register-platform-tools/lifecycle-infra-tools.js +7 -7
- package/dist/tools/register-sdd-tools.d.ts +1 -1
- package/dist/tools/register-sdd-tools.js +2 -29
- package/dist/tools/register-spec-tools/analysis-tools.js +8 -8
- package/dist/tools/register-spec-tools/core-spec-tools.js +29 -19
- package/dist/tools/safe-handler.d.ts +5 -13
- package/dist/tools/safe-handler.js +7 -23
- package/dist/tools/schemas/index.d.ts +1 -1
- package/dist/tools/schemas/index.js +1 -1
- package/dist/tools/schemas/output-schemas.d.ts +0 -23
- package/dist/tools/schemas/output-schemas.js +0 -28
- package/dist/tools/schemas/spec.d.ts +4 -0
- package/dist/tools/schemas/spec.js +3 -0
- package/dist/tools/schemas/validate-output-schema.d.ts +11 -0
- package/dist/tools/schemas/validate-output-schema.js +7 -0
- package/dist/tools/spec-prompt-handler.js +3 -3
- package/dist/tools/sync-spec-state-handler.d.ts +1 -1
- package/dist/tools/sync-spec-state-handler.js +50 -2
- package/dist/tools/tool-entry.d.ts +4 -4
- package/dist/tools/tool-entry.js +3 -3
- package/dist/tools/tool-registry/core-tools.js +31 -15
- package/dist/tools/tool-registry/group-infra.js +27 -110
- package/dist/tools/tool-registry/group-quality-compliance.js +26 -26
- package/dist/tools/tool-registry/inventory.d.ts +2 -0
- package/dist/tools/tool-registry/inventory.js +2 -0
- package/dist/tools/tool-registry-helpers.d.ts +3 -3
- package/dist/tools/tool-registry-helpers.js +3 -3
- package/dist/tools/tool-usage-report/registered-tools.d.ts +1 -1
- package/dist/tools/tool-usage-report/registered-tools.js +3 -15
- package/dist/tools/update-status/approval-gates.js +3 -0
- package/dist/tools/update-status/batch.d.ts +6 -2
- package/dist/tools/update-status/batch.js +58 -1
- package/dist/tools/update-status/dod-gates.d.ts +16 -1
- package/dist/tools/update-status/dod-gates.js +191 -1
- package/dist/tools/update-status/done-receipt-verifier.d.ts +8 -0
- package/dist/tools/update-status/done-receipt-verifier.js +75 -27
- package/dist/tools/update-status/evidence-gate.d.ts +4 -0
- package/dist/tools/update-status/evidence-gate.js +103 -3
- package/dist/tools/update-status/file-sync.d.ts +4 -3
- package/dist/tools/update-status/file-sync.js +57 -6
- package/dist/tools/update-status/index.d.ts +25 -1
- package/dist/tools/update-status/index.js +292 -78
- package/dist/tools/update-status/response-builder.js +3 -3
- package/dist/tools/update-status/side-effects.d.ts +2 -0
- package/dist/tools/update-status/side-effects.js +2 -2
- package/dist/tools/update-status/transition-guard.js +45 -16
- package/dist/tools/update-status-actions.d.ts +4 -2
- package/dist/tools/update-status-actions.js +16 -14
- package/dist/tools/usage-report.js +1 -16
- package/dist/tools/usage-stats.js +1 -18
- package/dist/tools/usage-tracking.d.ts +4 -0
- package/dist/tools/usage-tracking.js +20 -0
- package/dist/tools/validate-lint.d.ts +1 -0
- package/dist/tools/validate-lint.js +1 -1
- package/dist/tools/validate.d.ts +2 -1
- package/dist/tools/validate.js +114 -34
- package/dist/tools/workspace-dashboard-handler.js +38 -0
- package/dist/transports/http-transport.js +6 -8
- package/dist/transports/mcp-types.d.ts +0 -2
- package/dist/transports/session-context.js +1 -1
- package/dist/types/cascade-hooks.d.ts +1 -1
- package/dist/types/ci.d.ts +0 -4
- package/dist/types/clarification-token.d.ts +1 -1
- package/dist/types/claude-code-runtime.d.ts +0 -27
- package/dist/types/commercial-migration.d.ts +17 -0
- package/dist/types/commercial-migration.js +2 -0
- package/dist/types/common/primitives.d.ts +0 -2
- package/dist/types/core-bridge.d.ts +4 -10
- package/dist/types/dashboard.d.ts +3 -7
- package/dist/types/docs.d.ts +0 -1
- package/dist/types/durable-job.d.ts +4 -4
- package/dist/types/durable-validation.d.ts +100 -2
- package/dist/types/durable-validation.js +165 -1
- package/dist/types/errors/structured-error.d.ts +3 -3
- package/dist/types/estimation.d.ts +2 -0
- package/dist/types/evidence-autofill.d.ts +34 -0
- package/dist/types/evidence-autofill.js +2 -0
- package/dist/types/evidence-gates.d.ts +9 -1
- package/dist/types/execution.d.ts +2 -0
- package/dist/types/gemini-integration.d.ts +0 -11
- package/dist/types/handoff-artifacts.d.ts +41 -0
- package/dist/types/hooks-advanced.d.ts +0 -13
- package/dist/types/impact-detection.d.ts +2 -2
- package/dist/types/index.d.ts +3 -6
- package/dist/types/index.js +2 -5
- package/dist/types/kiro-integration.d.ts +0 -6
- package/dist/types/network-policy.d.ts +1 -1
- package/dist/types/project/lint-scaffolder.d.ts +1 -1
- package/dist/types/runtime-policy.d.ts +11 -0
- package/dist/types/session-safeguard.d.ts +0 -31
- package/dist/types/spec/canonical-repair.d.ts +81 -0
- package/dist/types/spec/canonical-repair.js +2 -0
- package/dist/types/spec/core.d.ts +20 -0
- package/dist/types/spec/index.d.ts +1 -0
- package/dist/types/spec/index.js +1 -0
- package/dist/types/spec/inputs.d.ts +35 -1
- package/dist/types/spec-format.d.ts +25 -1
- package/dist/types/telemetry.d.ts +4 -1
- package/dist/types/transition-log.d.ts +1 -1
- package/dist/types/transport.d.ts +0 -2
- package/dist/types/usage.d.ts +1 -36
- package/dist/types/usage.js +1 -1
- package/dist/types/validate-worker.d.ts +6 -0
- package/dist/types/validation-receipt.d.ts +1 -1
- package/dist/types/validation.d.ts +10 -4
- package/package.json +17 -12
- package/planu-native.json +1 -1
- package/planu-plugin.json +23 -40
- package/scripts/lib/pending-release-file.mjs +93 -0
- package/src/i18n/messages/en.json +0 -41
- package/src/i18n/messages/es.json +0 -41
- package/src/i18n/messages/pt.json +0 -41
- package/dist/cli/commands/activate.d.ts +0 -14
- package/dist/cli/commands/activate.js +0 -174
- package/dist/config/license-plans.json +0 -251
- package/dist/config/product-public.ts +0 -148
- package/dist/config/server-instructions.ts +0 -121
- package/dist/config/version-defaults.ts +0 -76
- package/dist/config/version.ts +0 -21
- package/dist/engine/ai-integration/gemini/settings-generator.d.ts +0 -4
- package/dist/engine/ai-integration/gemini/settings-generator.js +0 -195
- package/dist/engine/ai-integration/kiro/hooks-generator.d.ts +0 -6
- package/dist/engine/ai-integration/kiro/hooks-generator.js +0 -75
- package/dist/engine/hooks/full-spectrum-generator.d.ts +0 -32
- package/dist/engine/hooks/full-spectrum-generator.js +0 -117
- package/dist/engine/license-validator/config-loader.d.ts +0 -5
- package/dist/engine/license-validator/config-loader.js +0 -16
- package/dist/engine/license-validator/core.d.ts +0 -15
- package/dist/engine/license-validator/core.js +0 -151
- package/dist/engine/license-validator/fingerprint.d.ts +0 -3
- package/dist/engine/license-validator/fingerprint.js +0 -17
- package/dist/engine/license-validator/lemon-squeezy.d.ts +0 -5
- package/dist/engine/license-validator/lemon-squeezy.js +0 -55
- package/dist/engine/license-validator.d.ts +0 -5
- package/dist/engine/license-validator.js +0 -6
- package/dist/engine/product-intelligence/index.d.ts +0 -7
- package/dist/engine/product-intelligence/index.js +0 -211
- package/dist/engine/session/auto-save.d.ts +0 -18
- package/dist/engine/session/auto-save.js +0 -98
- package/dist/engine/session/context-snapshot.d.ts +0 -8
- package/dist/engine/session/context-snapshot.js +0 -49
- package/dist/engine/session/memory-sync.d.ts +0 -12
- package/dist/engine/session/memory-sync.js +0 -34
- package/dist/engine/session/session-diff.d.ts +0 -11
- package/dist/engine/session/session-diff.js +0 -42
- package/dist/engine/session/session-merge.d.ts +0 -12
- package/dist/engine/session/session-merge.js +0 -55
- package/dist/engine/session-safeguard/checkpoint-runner.d.ts +0 -4
- package/dist/engine/session-safeguard/checkpoint-runner.js +0 -70
- package/dist/engine/session-safeguard/learnings-buffer.d.ts +0 -15
- package/dist/engine/session-safeguard/learnings-buffer.js +0 -91
- package/dist/engine/session-safeguard/precompaction-drain.d.ts +0 -10
- package/dist/engine/session-safeguard/precompaction-drain.js +0 -82
- package/dist/engine/session-safeguard/unpushed-detector.d.ts +0 -7
- package/dist/engine/session-safeguard/unpushed-detector.js +0 -59
- package/dist/engine/spec-changelog/core.d.ts +0 -16
- package/dist/engine/spec-changelog/core.js +0 -176
- package/dist/engine/spec-changelog/diff.d.ts +0 -18
- package/dist/engine/spec-changelog/diff.js +0 -121
- package/dist/engine/spec-changelog/index.d.ts +0 -3
- package/dist/engine/spec-changelog/index.js +0 -4
- package/dist/engine/trial-engine.d.ts +0 -5
- package/dist/engine/trial-engine.js +0 -14
- package/dist/engine/usage-tracker/rate-check.d.ts +0 -7
- package/dist/engine/usage-tracker/rate-check.js +0 -18
- package/dist/engine/usage-tracker/rate-limiter.d.ts +0 -14
- package/dist/engine/usage-tracker/rate-limiter.js +0 -73
- package/dist/engine/usage-tracker/trial.d.ts +0 -27
- package/dist/engine/usage-tracker/trial.js +0 -49
- package/dist/engine/webhook/event-handlers.d.ts +0 -25
- package/dist/engine/webhook/event-handlers.js +0 -89
- package/dist/engine/webhook/index.d.ts +0 -4
- package/dist/engine/webhook/index.js +0 -5
- package/dist/engine/webhook/server.d.ts +0 -12
- package/dist/engine/webhook/server.js +0 -249
- package/dist/engine/webhook/signature.d.ts +0 -16
- package/dist/engine/webhook/signature.js +0 -49
- package/dist/storage/license-store.d.ts +0 -6
- package/dist/storage/license-store.js +0 -63
- package/dist/storage/session-store.d.ts +0 -20
- package/dist/storage/session-store.js +0 -136
- package/dist/tools/activate-license.d.ts +0 -6
- package/dist/tools/activate-license.js +0 -132
- package/dist/tools/checkpoint-handler.d.ts +0 -3
- package/dist/tools/checkpoint-handler.js +0 -130
- package/dist/tools/export-session.d.ts +0 -3
- package/dist/tools/export-session.js +0 -90
- package/dist/tools/license-gate.d.ts +0 -18
- package/dist/tools/license-gate.js +0 -222
- package/dist/tools/license-status.d.ts +0 -3
- package/dist/tools/license-status.js +0 -93
- package/dist/tools/list-sessions.d.ts +0 -3
- package/dist/tools/list-sessions.js +0 -46
- package/dist/tools/planu-session-checkpoint.d.ts +0 -6
- package/dist/tools/planu-session-checkpoint.js +0 -42
- package/dist/tools/restore-session.d.ts +0 -3
- package/dist/tools/restore-session.js +0 -71
- package/dist/tools/spec-history.d.ts +0 -3
- package/dist/tools/spec-history.js +0 -59
- package/dist/tools/webhook.d.ts +0 -6
- package/dist/tools/webhook.js +0 -150
- package/dist/types/changelog.d.ts +0 -49
- package/dist/types/changelog.js +0 -3
- package/dist/types/licensing.d.ts +0 -109
- package/dist/types/licensing.js +0 -4
- package/dist/types/product-intelligence.d.ts +0 -60
- package/dist/types/product-intelligence.js +0 -3
- package/dist/types/session.d.ts +0 -84
- package/dist/types/session.js +0 -3
- package/dist/types/webhook.d.ts +0 -62
- package/dist/types/webhook.js +0 -4
|
@@ -4,7 +4,7 @@ export declare function aggregateEntries(entries: LedgerEntry[]): LedgerAggregat
|
|
|
4
4
|
export declare function computeDailyBreakdown(entries: LedgerEntry[]): DailyBreakdown[];
|
|
5
5
|
export declare function detectTrend(dailyBreakdown: DailyBreakdown[]): TrendResult;
|
|
6
6
|
export declare function detectAnomalies(entries: LedgerEntry[], dailyBreakdown: DailyBreakdown[]): Anomaly[];
|
|
7
|
-
export declare function computeBudgetStatus(entries: LedgerEntry[], config: BudgetConfig): LedgerBudgetStatus;
|
|
7
|
+
export declare function computeBudgetStatus(entries: LedgerEntry[], config: BudgetConfig, now?: Date): LedgerBudgetStatus;
|
|
8
8
|
export declare function getTopConsumers(entries: LedgerEntry[], limit?: number): TopConsumer[];
|
|
9
9
|
export declare function computeOptimizationSavings(entries: LedgerEntry[]): OptimizationSavings;
|
|
10
10
|
//# sourceMappingURL=analytics.d.ts.map
|
|
@@ -41,7 +41,7 @@ function average(nums) {
|
|
|
41
41
|
return nums.reduce((s, n) => s + n, 0) / nums.length;
|
|
42
42
|
}
|
|
43
43
|
function daysInCalendarMonth(year, month) {
|
|
44
|
-
return new Date(year, month, 0).
|
|
44
|
+
return new Date(Date.UTC(year, month, 0)).getUTCDate(); // month is 1-based here
|
|
45
45
|
}
|
|
46
46
|
// ---------------------------------------------------------------------------
|
|
47
47
|
// aggregateEntries
|
|
@@ -262,12 +262,11 @@ export function detectAnomalies(entries, dailyBreakdown) {
|
|
|
262
262
|
// ---------------------------------------------------------------------------
|
|
263
263
|
// computeBudgetStatus
|
|
264
264
|
// ---------------------------------------------------------------------------
|
|
265
|
-
export function computeBudgetStatus(entries, config) {
|
|
266
|
-
const
|
|
267
|
-
const
|
|
268
|
-
const month = now.getMonth() + 1; // 1-based
|
|
265
|
+
export function computeBudgetStatus(entries, config, now = new Date()) {
|
|
266
|
+
const year = now.getUTCFullYear();
|
|
267
|
+
const month = now.getUTCMonth() + 1; // 1-based
|
|
269
268
|
const daysInMonth = daysInCalendarMonth(year, month);
|
|
270
|
-
const daysElapsed = now.
|
|
269
|
+
const daysElapsed = now.getUTCDate();
|
|
271
270
|
// Current month filter
|
|
272
271
|
const monthPrefix = `${year}-${String(month).padStart(2, '0')}`;
|
|
273
272
|
const monthEntries = entries.filter((e) => e.timestamp.startsWith(monthPrefix));
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import type { UsageEvent
|
|
1
|
+
import type { UsageEvent } from '../../types/index.js';
|
|
2
2
|
/**
|
|
3
3
|
* Creates a new UsageEvent object. Does NOT persist — that is storage's job.
|
|
4
4
|
*/
|
|
5
|
-
export declare function recordUsageEvent(toolName: string,
|
|
5
|
+
export declare function recordUsageEvent(toolName: string, success: boolean): UsageEvent;
|
|
6
6
|
/**
|
|
7
7
|
* Returns events within the specified time period relative to now.
|
|
8
8
|
* 'all' returns the full array unchanged.
|
|
@@ -6,10 +6,9 @@
|
|
|
6
6
|
/**
|
|
7
7
|
* Creates a new UsageEvent object. Does NOT persist — that is storage's job.
|
|
8
8
|
*/
|
|
9
|
-
export function recordUsageEvent(toolName,
|
|
9
|
+
export function recordUsageEvent(toolName, success) {
|
|
10
10
|
return {
|
|
11
11
|
toolName,
|
|
12
|
-
tier,
|
|
13
12
|
timestamp: new Date().toISOString(),
|
|
14
13
|
success,
|
|
15
14
|
};
|
|
@@ -1,6 +1,3 @@
|
|
|
1
1
|
export { recordUsageEvent, filterEventsByPeriod, countEventsForDate, getLastEventTimestamp, } from './core.js';
|
|
2
2
|
export { calculateUsageStats, formatStatsAsMarkdown } from './stats.js';
|
|
3
|
-
export { TRIAL_DAYS, calculateDaysSinceFirstRun, isTrialActive, trialDaysRemaining, getTrialLimits, } from './trial.js';
|
|
4
|
-
export { COOLDOWN_MS, checkDailyLimit, checkCooldown } from './rate-limiter.js';
|
|
5
|
-
export { evaluateRateLimit } from './rate-check.js';
|
|
6
3
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1,7 +1,4 @@
|
|
|
1
1
|
// engine/usage-tracker/index.ts — Barrel re-export for usage-tracker engine module.
|
|
2
2
|
export { recordUsageEvent, filterEventsByPeriod, countEventsForDate, getLastEventTimestamp, } from './core.js';
|
|
3
3
|
export { calculateUsageStats, formatStatsAsMarkdown } from './stats.js';
|
|
4
|
-
export { TRIAL_DAYS, calculateDaysSinceFirstRun, isTrialActive, trialDaysRemaining, getTrialLimits, } from './trial.js';
|
|
5
|
-
export { COOLDOWN_MS, checkDailyLimit, checkCooldown } from './rate-limiter.js';
|
|
6
|
-
export { evaluateRateLimit } from './rate-check.js';
|
|
7
4
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import type { UsageEvent, UsageStats, ToolHealthEntry
|
|
1
|
+
import type { UsageEvent, UsageStats, ToolHealthEntry } from '../../types/index.js';
|
|
2
2
|
/**
|
|
3
3
|
* Computes full UsageStats from a set of events and runtime context.
|
|
4
4
|
* All parameters are passed in — no I/O performed here.
|
|
5
5
|
*/
|
|
6
|
-
export declare function calculateUsageStats(events: readonly UsageEvent[], activeSpecs: number, activeProjects: number
|
|
6
|
+
export declare function calculateUsageStats(events: readonly UsageEvent[], activeSpecs: number, activeProjects: number): UsageStats;
|
|
7
7
|
export declare function buildToolHealthBreakdown(events: readonly UsageEvent[], allKnownTools?: readonly string[]): {
|
|
8
8
|
breakdown: ToolHealthEntry[];
|
|
9
9
|
deadTools: string[];
|
|
@@ -6,26 +6,19 @@
|
|
|
6
6
|
* Computes full UsageStats from a set of events and runtime context.
|
|
7
7
|
* All parameters are passed in — no I/O performed here.
|
|
8
8
|
*/
|
|
9
|
-
export function calculateUsageStats(events, activeSpecs, activeProjects
|
|
9
|
+
export function calculateUsageStats(events, activeSpecs, activeProjects) {
|
|
10
10
|
const callsByTool = {};
|
|
11
|
-
const callsByTier = {};
|
|
12
11
|
for (const event of events) {
|
|
13
12
|
callsByTool[event.toolName] = (callsByTool[event.toolName] ?? 0) + 1;
|
|
14
|
-
callsByTier[event.tier] = (callsByTier[event.tier] ?? 0) + 1;
|
|
15
13
|
}
|
|
16
14
|
const topTools = buildTopTools(callsByTool, 10);
|
|
17
15
|
const { breakdown: toolHealthBreakdown, deadTools } = buildToolHealthBreakdown(events);
|
|
18
16
|
return {
|
|
19
17
|
totalCalls: events.length,
|
|
20
18
|
callsByTool,
|
|
21
|
-
callsByTier,
|
|
22
19
|
topTools,
|
|
23
20
|
activeSpecs,
|
|
24
21
|
activeProjects,
|
|
25
|
-
currentTier,
|
|
26
|
-
daysSinceFirstRun,
|
|
27
|
-
isTrialActive,
|
|
28
|
-
remainingDailyCalls,
|
|
29
22
|
toolHealthBreakdown,
|
|
30
23
|
deadTools,
|
|
31
24
|
};
|
|
@@ -82,15 +75,9 @@ export function formatStatsAsMarkdown(stats) {
|
|
|
82
75
|
const lines = [];
|
|
83
76
|
lines.push('## Usage Statistics');
|
|
84
77
|
lines.push('');
|
|
85
|
-
lines.push(`**Tier:** ${stats.currentTier}`);
|
|
86
|
-
lines.push(`**Days since first run:** ${String(stats.daysSinceFirstRun)}`);
|
|
87
|
-
lines.push(`**Trial active:** ${stats.isTrialActive ? 'Yes' : 'No'}`);
|
|
88
78
|
lines.push(`**Total calls:** ${String(stats.totalCalls)}`);
|
|
89
79
|
lines.push(`**Active specs:** ${String(stats.activeSpecs)}`);
|
|
90
80
|
lines.push(`**Active projects:** ${String(stats.activeProjects)}`);
|
|
91
|
-
if (stats.remainingDailyCalls >= 0) {
|
|
92
|
-
lines.push(`**Remaining daily calls:** ${String(stats.remainingDailyCalls)}`);
|
|
93
|
-
}
|
|
94
81
|
lines.push('');
|
|
95
82
|
lines.push('### Top Tools');
|
|
96
83
|
lines.push('');
|
|
@@ -125,20 +112,6 @@ export function formatStatsAsMarkdown(stats) {
|
|
|
125
112
|
lines.push(`- ${tool}`);
|
|
126
113
|
}
|
|
127
114
|
}
|
|
128
|
-
lines.push('');
|
|
129
|
-
lines.push('### Calls by Tier');
|
|
130
|
-
lines.push('');
|
|
131
|
-
lines.push('| Tier | Calls |');
|
|
132
|
-
lines.push('|------|-------|');
|
|
133
|
-
const tierEntries = Object.entries(stats.callsByTier);
|
|
134
|
-
if (tierEntries.length === 0) {
|
|
135
|
-
lines.push('| *(none)* | 0 |');
|
|
136
|
-
}
|
|
137
|
-
else {
|
|
138
|
-
for (const [tier, count] of tierEntries) {
|
|
139
|
-
lines.push(`| ${tier} | ${String(count)} |`);
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
115
|
return lines.join('\n');
|
|
143
116
|
}
|
|
144
117
|
//# sourceMappingURL=stats.js.map
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import type { ValidationArtifactDigests, ValidationReceiptBindings } from '../../types/validation-receipt.js';
|
|
2
2
|
import type { DurableValidationBindings, ValidationPhase, ValidationPhaseGraphResult, ValidationPhaseProgress } from '../../types/durable-validation.js';
|
|
3
3
|
export type { DurableValidationBindings } from '../../types/durable-validation.js';
|
|
4
|
+
export { gitSourceTreeDigest } from './validation-source-digest.js';
|
|
4
5
|
export { createPendingValidationSubmission, createValidationSubmission, validationOperationId, validationSubmissionOperationId, } from './validation-submission.js';
|
|
5
6
|
export declare function toValidationReceiptBindings(bindings: DurableValidationBindings, artifactDigests: ValidationArtifactDigests): ValidationReceiptBindings;
|
|
6
|
-
export declare function gitSourceTreeDigest(projectPath: string): Promise<string>;
|
|
7
7
|
/** Compute immutable validation and lifecycle-artifact bindings without trusting spec metadata. */
|
|
8
8
|
export declare function computeDurableValidationBindings(input: {
|
|
9
9
|
readonly canonicalProjectId: string;
|
|
@@ -1,17 +1,15 @@
|
|
|
1
1
|
import { technologyValue } from '../technology-registry.js';
|
|
2
2
|
import { createHash } from 'node:crypto';
|
|
3
|
-
import {
|
|
4
|
-
import { lstat, readFile, readlink } from 'node:fs/promises';
|
|
3
|
+
import { readFile } from 'node:fs/promises';
|
|
5
4
|
import { basename, join } from 'node:path';
|
|
6
|
-
import { promisify } from 'node:util';
|
|
7
5
|
import { runAbortableProcess } from '../abortable-process-runner.js';
|
|
8
6
|
import { projectDataDir } from '../../storage/base-store.js';
|
|
9
7
|
import { atomicWriteFile } from '../safety/atomic-write-file.js';
|
|
10
8
|
import { evidenceArtifactCollectionDigest, evidenceArtifactDigest, } from '../evidence-gates/artifact-reader.js';
|
|
11
|
-
import {
|
|
9
|
+
import { gitSourceTreeDigest } from './validation-source-digest.js';
|
|
12
10
|
import { PROJECT_ID as CANONICAL_PROJECT_ID } from './validation-receipt-codec.js';
|
|
11
|
+
export { gitSourceTreeDigest } from './validation-source-digest.js';
|
|
13
12
|
export { createPendingValidationSubmission, createValidationSubmission, validationOperationId, validationSubmissionOperationId, } from './validation-submission.js';
|
|
14
|
-
const execFileAsync = promisify(execFile);
|
|
15
13
|
const DIGEST_PATTERN = /^sha256:[a-f0-9]{64}$/u;
|
|
16
14
|
const DEFAULT_MAX_CONCURRENCY = 2;
|
|
17
15
|
const MAX_CONCURRENCY = 8;
|
|
@@ -74,83 +72,6 @@ async function readEvidenceFile(path) {
|
|
|
74
72
|
throw new Error(`[Planu] Invalid lifecycle evidence: ${path}`, { cause: error });
|
|
75
73
|
}
|
|
76
74
|
}
|
|
77
|
-
async function mapWithConcurrency(values, concurrency, worker) {
|
|
78
|
-
const results = new Array(values.length);
|
|
79
|
-
let cursor = 0;
|
|
80
|
-
const runners = Array.from({ length: Math.min(concurrency, values.length) }, async () => {
|
|
81
|
-
for (;;) {
|
|
82
|
-
const index = cursor;
|
|
83
|
-
cursor += 1;
|
|
84
|
-
if (index >= values.length) {
|
|
85
|
-
return;
|
|
86
|
-
}
|
|
87
|
-
results[index] = await worker(values[index]);
|
|
88
|
-
}
|
|
89
|
-
});
|
|
90
|
-
await Promise.all(runners);
|
|
91
|
-
return results;
|
|
92
|
-
}
|
|
93
|
-
export async function gitSourceTreeDigest(projectPath) {
|
|
94
|
-
try {
|
|
95
|
-
const gitOptions = { cwd: projectPath, encoding: 'utf8', maxBuffer: 16 * 1024 * 1024 };
|
|
96
|
-
const [trackedResult, untrackedResult] = await Promise.all([
|
|
97
|
-
execFileAsync('git', ['ls-files', '--cached', '-z'], gitOptions),
|
|
98
|
-
execFileAsync('git', ['ls-files', '--others', '--exclude-standard', '-z'], gitOptions),
|
|
99
|
-
]);
|
|
100
|
-
const sourceEntries = (stdout) => stdout
|
|
101
|
-
.split('\0')
|
|
102
|
-
.filter(Boolean)
|
|
103
|
-
.map((sourcePath) => ({ sourcePath, canonicalPath: sourcePath.normalize('NFC') }))
|
|
104
|
-
.filter(({ canonicalPath }) => isValidationSourcePath(canonicalPath));
|
|
105
|
-
const entriesToRead = [
|
|
106
|
-
...sourceEntries(trackedResult.stdout),
|
|
107
|
-
...sourceEntries(untrackedResult.stdout),
|
|
108
|
-
].sort((left, right) => Buffer.compare(Buffer.from(left.canonicalPath), Buffer.from(right.canonicalPath)));
|
|
109
|
-
if (new Set(entriesToRead.map(({ canonicalPath }) => canonicalPath)).size !== entriesToRead.length) {
|
|
110
|
-
throw new Error('source paths collide after Unicode normalization');
|
|
111
|
-
}
|
|
112
|
-
const entries = await mapWithConcurrency(entriesToRead, MAX_CONCURRENCY, async (entry) => {
|
|
113
|
-
const { canonicalPath: path, sourcePath } = entry;
|
|
114
|
-
const absolutePath = join(projectPath, sourcePath);
|
|
115
|
-
try {
|
|
116
|
-
const stats = await lstat(absolutePath);
|
|
117
|
-
if (stats.isSymbolicLink()) {
|
|
118
|
-
const target = (await readlink(absolutePath)).normalize('NFC');
|
|
119
|
-
return { path, content: Buffer.from(`symlink\0${target}`, 'utf8') };
|
|
120
|
-
}
|
|
121
|
-
if (!stats.isFile()) {
|
|
122
|
-
throw new Error(`unsupported source entry type: ${path}`);
|
|
123
|
-
}
|
|
124
|
-
return {
|
|
125
|
-
path,
|
|
126
|
-
content: Buffer.concat([Buffer.from('file\0'), await readFile(absolutePath)]),
|
|
127
|
-
};
|
|
128
|
-
}
|
|
129
|
-
catch (error) {
|
|
130
|
-
if (error.code === 'ENOENT') {
|
|
131
|
-
return undefined;
|
|
132
|
-
}
|
|
133
|
-
throw error;
|
|
134
|
-
}
|
|
135
|
-
});
|
|
136
|
-
const hash = createHash('sha256');
|
|
137
|
-
hash.update('planu-source-v1\0');
|
|
138
|
-
for (const entry of entries) {
|
|
139
|
-
if (!entry) {
|
|
140
|
-
continue;
|
|
141
|
-
}
|
|
142
|
-
const pathBytes = Buffer.from(entry.path, 'utf8');
|
|
143
|
-
hash.update(`${pathBytes.length}:`);
|
|
144
|
-
hash.update(pathBytes);
|
|
145
|
-
hash.update(`${entry.content.length}:`);
|
|
146
|
-
hash.update(entry.content);
|
|
147
|
-
}
|
|
148
|
-
return `sha256:${hash.digest('hex')}`;
|
|
149
|
-
}
|
|
150
|
-
catch (error) {
|
|
151
|
-
throw new Error('[Planu] Unable to bind validation to the source tree', { cause: error });
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
75
|
/** Compute immutable validation and lifecycle-artifact bindings without trusting spec metadata. */
|
|
155
76
|
export async function computeDurableValidationBindings(input) {
|
|
156
77
|
const handoff = join(projectDataDir(input.canonicalProjectId), 'handoffs', input.specId);
|
|
@@ -18,6 +18,8 @@ export declare function beginValidationFreshnessBarrier(input: {
|
|
|
18
18
|
handoffPath: string;
|
|
19
19
|
invalidateCurrentBindings?: boolean;
|
|
20
20
|
}): Promise<ValidationFreshnessLease>;
|
|
21
|
+
/** Stop one exact epoch and drain all invalidations accepted before closure. */
|
|
22
|
+
export declare function closeValidationFreshnessLease(lease: Pick<ValidationFreshnessLease, 'projectId' | 'specId' | 'epoch'>): Promise<void>;
|
|
21
23
|
/** Bind the post-watch snapshot; an event before this call makes the lease unusable. */
|
|
22
24
|
export declare function bindValidationFreshnessLease(lease: ValidationFreshnessLease, bindings: ValidationReceiptBindings): Promise<boolean>;
|
|
23
25
|
/** Drain invalidation work and verify epoch, generation, health, expiry and bound inputs. */
|
|
@@ -32,5 +34,13 @@ export declare function rebaselineValidationFreshnessLeaseAfterRecompute(input:
|
|
|
32
34
|
expectedBindings: ValidationReceiptBindings;
|
|
33
35
|
recompute: () => Promise<ValidationReceiptBindings>;
|
|
34
36
|
}): Promise<ValidationFreshnessLease | undefined>;
|
|
35
|
-
export declare function resetValidationFreshnessForTests(): void
|
|
37
|
+
export declare function resetValidationFreshnessForTests(): Promise<void>;
|
|
38
|
+
/** Count-only process diagnostic; intentionally absent from the package entrypoint. */
|
|
39
|
+
export declare function getValidationFreshnessDiagnosticsForTests(): {
|
|
40
|
+
readonly activeLeases: number;
|
|
41
|
+
readonly watchers: number;
|
|
42
|
+
readonly queuedInvalidations: number;
|
|
43
|
+
readonly timers: number;
|
|
44
|
+
readonly generationTotal: number;
|
|
45
|
+
};
|
|
36
46
|
//# sourceMappingURL=validation-freshness.d.ts.map
|