@unbrained/pm-cli 2026.9.7 → 2026.9.8
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/.agents/skills/pm-developer/SKILL.md +12 -4
- package/.agents/skills/pm-developer/references/MULTI_AGENT_MERGE.md +19 -10
- package/.agents/skills/pm-extensions/SKILL.md +6 -0
- package/.agents/skills/pm-sdk/SKILL.md +11 -2
- package/.agents/skills/pm-user/SKILL.md +5 -0
- package/.agents/skills/pm-user/references/ECOSYSTEM_PLANNING.md +95 -0
- package/.claude-plugin/marketplace.json +2 -2
- package/CHANGELOG.md +211 -181
- package/dist/cli/after-command-context-usage.js +1 -48
- package/dist/cli/argv-utils.js +1 -40
- package/dist/cli/bootstrap-args.js +1 -9
- package/dist/cli/bundle-integrity.js +2 -110
- package/dist/cli/commander-usage.js +11 -771
- package/dist/cli/commands/activity.js +1 -9
- package/dist/cli/commands/aggregate.js +1 -5
- package/dist/cli/commands/append.js +1 -5
- package/dist/cli/commands/claim.js +1 -5
- package/dist/cli/commands/close-many.js +1 -5
- package/dist/cli/commands/close.js +1 -9
- package/dist/cli/commands/comments.js +1 -5
- package/dist/cli/commands/config.js +1 -9
- package/dist/cli/commands/context.js +1 -9
- package/dist/cli/commands/contracts.js +1 -5
- package/dist/cli/commands/copy.js +1 -9
- package/dist/cli/commands/create.js +1 -9
- package/dist/cli/commands/delete.js +1 -9
- package/dist/cli/commands/deps.js +1 -9
- package/dist/cli/commands/docs.js +1 -9
- package/dist/cli/commands/duplicates.js +1 -9
- package/dist/cli/commands/eval.js +1 -9
- package/dist/cli/commands/extension/describe.js +1 -5
- package/dist/cli/commands/extension/scaffold.js +1 -5
- package/dist/cli/commands/extension/shared.js +1 -5
- package/dist/cli/commands/extension.js +1 -9
- package/dist/cli/commands/files.js +1 -9
- package/dist/cli/commands/focus.js +1 -9
- package/dist/cli/commands/gc.js +1 -9
- package/dist/cli/commands/get.js +1 -9
- package/dist/cli/commands/graph.js +1 -10
- package/dist/cli/commands/health.js +1 -9
- package/dist/cli/commands/history-compact.js +1 -10
- package/dist/cli/commands/history-redact.js +1 -11
- package/dist/cli/commands/history-repair.js +1 -10
- package/dist/cli/commands/history.js +1 -5
- package/dist/cli/commands/index.js +1 -58
- package/dist/cli/commands/init-agent-guidance.js +1 -9
- package/dist/cli/commands/init.js +1 -9
- package/dist/cli/commands/learnings.js +1 -5
- package/dist/cli/commands/lifecycle-transitions.js +1 -5
- package/dist/cli/commands/list.js +1 -9
- package/dist/cli/commands/merge.js +1 -11
- package/dist/cli/commands/next.js +1 -9
- package/dist/cli/commands/notes.js +1 -5
- package/dist/cli/commands/plan.js +1 -9
- package/dist/cli/commands/profile.js +1 -9
- package/dist/cli/commands/restore.js +1 -9
- package/dist/cli/commands/scheduling-shortcuts.js +1 -9
- package/dist/cli/commands/schema.js +1 -10
- package/dist/cli/commands/search.js +1 -9
- package/dist/cli/commands/stats.js +1 -9
- package/dist/cli/commands/telemetry.js +1 -9
- package/dist/cli/commands/test-all.js +1 -9
- package/dist/cli/commands/test-runs.js +1 -9
- package/dist/cli/commands/test.js +1 -9
- package/dist/cli/commands/update-many.js +1 -5
- package/dist/cli/commands/update.js +1 -9
- package/dist/cli/commands/upgrade.js +1 -5
- package/dist/cli/commands/validate.js +1 -15
- package/dist/cli/context-intent-invocation.js +1 -20
- package/dist/cli/description-stdin.js +1 -17
- package/dist/cli/error-guidance.js +1 -1353
- package/dist/cli/extension-command-help.js +5 -636
- package/dist/cli/extension-command-options.js +1 -427
- package/dist/cli/extension-recovery.js +1 -126
- package/dist/cli/help-content.js +2 -1001
- package/dist/cli/help-json-payload.js +4 -570
- package/dist/cli/main.d.ts +4 -0
- package/dist/cli/main.js +5 -2573
- package/dist/cli/migration-gates.js +1 -289
- package/dist/cli/public.js +1 -20
- package/dist/cli/register-annotations.js +1 -270
- package/dist/cli/register-assurance.js +1 -62
- package/dist/cli/register-files-lookup.js +1 -56
- package/dist/cli/register-history-activity.d.ts +8 -0
- package/dist/cli/register-history-activity.js +2 -0
- package/dist/cli/register-history-author.js +1 -38
- package/dist/cli/register-history-maintenance.d.ts +9 -0
- package/dist/cli/register-history-maintenance.js +2 -0
- package/dist/cli/register-list-query.js +10 -943
- package/dist/cli/register-mutation-options.js +1 -9
- package/dist/cli/register-mutation.js +19 -1893
- package/dist/cli/register-operations.js +1 -920
- package/dist/cli/register-setup.js +1 -716
- package/dist/cli/register-structured-mutation.js +1 -196
- package/dist/cli/registration-helpers.js +1 -5
- package/dist/cli/runtime-compatibility-boundary.js +4 -42
- package/dist/cli/schema-registration-helpers.js +1 -73
- package/dist/cli/search-refresh.js +1 -13
- package/dist/cli/stats-analytics-json.js +1 -68
- package/dist/cli/telemetry-flush.js +1 -10
- package/dist/cli-bundle/bundle-manifest.json +164 -156
- package/dist/cli-bundle/chunks/chunk-3BZZA6A3.js +5 -0
- package/dist/cli-bundle/chunks/chunk-AMRDVX36.js +235 -0
- package/dist/cli-bundle/chunks/chunk-DAM4CBBR.js +2202 -0
- package/dist/cli-bundle/chunks/{chunk-WYRZZ5ZE.js → chunk-DEZPZOQ7.js} +2 -2
- package/dist/cli-bundle/chunks/chunk-FLDWYEND.js +77 -0
- package/dist/cli-bundle/chunks/{chunk-NPN5I67J.js → chunk-G5ADGQ2D.js} +3 -3
- package/dist/cli-bundle/chunks/chunk-JAAEYHUA.js +2 -0
- package/dist/cli-bundle/chunks/{chunk-JX4DH4WC.js → chunk-KR3RP4FH.js} +3 -3
- package/dist/cli-bundle/chunks/chunk-LEZOUXG6.js +2 -0
- package/dist/cli-bundle/chunks/chunk-NSAPNEYH.js +2 -0
- package/dist/cli-bundle/chunks/chunk-QOEKOECV.js +29 -0
- package/dist/cli-bundle/chunks/chunk-RHSFOMHU.js +2 -0
- package/dist/cli-bundle/chunks/chunk-XOD2PCB6.js +20 -0
- package/dist/cli-bundle/chunks/{chunk-JT6XF6GE.js → chunk-YVEQ2AMO.js} +4 -4
- package/dist/cli-bundle/chunks/register-list-query-KSK3R63M.js +11 -0
- package/dist/cli-bundle/chunks/register-mutation-IQ5C7U6O.js +20 -0
- package/dist/cli-bundle/chunks/{register-operations-I5W3KMGB.js → register-operations-DWVHR2NC.js} +2 -2
- package/dist/cli-bundle/chunks/register-setup-BQ5SVD4B.js +2 -0
- package/dist/cli-bundle/focused-chunks/chunk-3WRPWLA7.js +3 -0
- package/dist/cli-bundle/focused-chunks/chunk-7MBUII7U.js +2 -0
- package/dist/cli-bundle/focused-chunks/chunk-COPBO5HW.js +8 -0
- package/dist/cli-bundle/focused-chunks/chunk-DUN4IXYN.js +20 -0
- package/dist/cli-bundle/focused-chunks/{chunk-LIJIA4TY.js → chunk-EE5QSM4Z.js} +3 -3
- package/dist/cli-bundle/focused-chunks/chunk-HJVARYM3.js +6 -0
- package/dist/cli-bundle/focused-chunks/chunk-IAUOUGVR.js +177 -0
- package/dist/cli-bundle/focused-chunks/chunk-KOOMJ54F.js +2 -0
- package/dist/cli-bundle/focused-chunks/chunk-MZDXX7JY.js +56 -0
- package/dist/cli-bundle/focused-chunks/{chunk-M6PBRFSH.js → chunk-OPFHFGDD.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-QHNETP77.js +9 -0
- package/dist/cli-bundle/focused-chunks/{chunk-3BZEOXLT.js → chunk-RMWES4M6.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-RXT4P5QH.js +10 -0
- package/dist/cli-bundle/focused-chunks/chunk-SDOL6FM2.js +12 -0
- package/dist/cli-bundle/focused-chunks/chunk-SQV4AAUC.js +2 -0
- package/dist/cli-bundle/focused-chunks/{chunk-PEFABF7E.js → chunk-WE3IUNIW.js} +3 -3
- package/dist/cli-bundle/focused-chunks/chunk-YALOUBWJ.js +2 -0
- package/dist/cli-bundle/main.js +20 -20
- package/dist/cli-bundle/sdk-authoring.js +1 -1
- package/dist/cli-bundle/sdk-contracts.js +2 -2
- package/dist/cli-bundle/sdk-core.js +29 -29
- package/dist/cli-bundle/sdk-governance.js +1 -1
- package/dist/cli-bundle/sdk-graph.js +1 -1
- package/dist/cli-bundle/sdk-merge.js +42 -42
- package/dist/cli-bundle/sdk-query.js +1 -1
- package/dist/cli-bundle/sdk-runtime.js +1 -1
- package/dist/cli-bundle/sdk-testing.js +1 -1
- package/dist/cli-bundle/sdk.js +11 -11
- package/dist/cli.js +1 -104
- package/dist/core/checkpoint/checkpoint-gc.js +1 -169
- package/dist/core/checkpoint/mutation-checkpoint.js +2 -133
- package/dist/core/config/nested-settings.js +1 -534
- package/dist/core/config/positional-value.js +1 -109
- package/dist/core/diagnostics/remediation.js +1 -506
- package/dist/core/extensions/activation-summary-markdown.js +2 -145
- package/dist/core/extensions/activation-summary.js +1 -92
- package/dist/core/extensions/activation-transaction.js +1 -46
- package/dist/core/extensions/capability-usage.js +1 -173
- package/dist/core/extensions/command-hook-context.js +1 -13
- package/dist/core/extensions/command-metadata-contract.js +1 -22
- package/dist/core/extensions/command-visibility-tier.js +1 -29
- package/dist/core/extensions/contribution-inventory.js +1 -173
- package/dist/core/extensions/exporter-output-contract.js +1 -66
- package/dist/core/extensions/extension-candidate.js +1 -18
- package/dist/core/extensions/extension-capability-aliases.js +1 -158
- package/dist/core/extensions/extension-hook-runtime.js +1 -699
- package/dist/core/extensions/extension-policy.js +1 -599
- package/dist/core/extensions/extension-registries.js +1 -62
- package/dist/core/extensions/extension-runtime-helpers.js +1 -33
- package/dist/core/extensions/extension-types.js +1 -102
- package/dist/core/extensions/flag-definition-validation.js +1 -52
- package/dist/core/extensions/flag-value-types.js +1 -64
- package/dist/core/extensions/index.js +1 -526
- package/dist/core/extensions/item-field-types.js +1 -39
- package/dist/core/extensions/item-fields.js +1 -261
- package/dist/core/extensions/loader.js +1 -2223
- package/dist/core/extensions/manifest-schema.js +1 -69
- package/dist/core/extensions/module-graph-snapshot.js +1 -33
- package/dist/core/extensions/preflight-ownership.js +1 -41
- package/dist/core/extensions/registration-validation.js +1 -82
- package/dist/core/extensions/registration-values.js +1 -209
- package/dist/core/extensions/reserved-host-flags.js +1 -36
- package/dist/core/extensions/runtime-registrations.js +1 -67
- package/dist/core/extensions/service-ownership.js +1 -19
- package/dist/core/extensions/version-compat.js +1 -216
- package/dist/core/fs/fs-utils.js +2 -158
- package/dist/core/fs/host-environment-errors.js +1 -141
- package/dist/core/fs/index.js +1 -9
- package/dist/core/fs/path-utils.js +1 -17
- package/dist/core/governance/content-fields.js +1 -160
- package/dist/core/governance/issue-codes.js +1 -151
- package/dist/core/governance/metadata-coverage.js +1 -358
- package/dist/core/history/drift-cache.js +3 -72
- package/dist/core/history/drift-scan.js +1 -342
- package/dist/core/history/event-classification.js +1 -109
- package/dist/core/history/event-index.js +8 -784
- package/dist/core/history/history-compact-bulk.js +1 -104
- package/dist/core/history/history-diff.js +1 -158
- package/dist/core/history/history-rewrite.d.ts +6 -1
- package/dist/core/history/history-rewrite.js +1 -107
- package/dist/core/history/history-storage-stats.js +1 -102
- package/dist/core/history/history-stream-policy.js +1 -62
- package/dist/core/history/history.js +2 -617
- package/dist/core/history/identity.js +1 -30
- package/dist/core/history/index.js +1 -9
- package/dist/core/history/projection.js +1 -196
- package/dist/core/history/read.d.ts +9 -0
- package/dist/core/history/read.js +1 -57
- package/dist/core/history/replay.js +2 -439
- package/dist/core/history/version-address.js +1 -32
- package/dist/core/history/workspace-history.js +2 -433
- package/dist/core/io/body-file.js +1 -62
- package/dist/core/io/bulk-ids-input.js +1 -112
- package/dist/core/item/actionability.js +1 -327
- package/dist/core/item/dependency-reference.js +1 -20
- package/dist/core/item/id.js +1 -112
- package/dist/core/item/index.js +1 -12
- package/dist/core/item/item-format-version.js +1 -78
- package/dist/core/item/item-format.js +5 -1473
- package/dist/core/item/item-record.js +1 -23
- package/dist/core/item/item-type-definition.js +1 -133
- package/dist/core/item/parent-reference-policy.js +1 -57
- package/dist/core/item/parse.js +2 -603
- package/dist/core/item/plan-lifecycle.js +1 -19
- package/dist/core/item/priority.js +1 -61
- package/dist/core/item/sprint-release-format.js +1 -38
- package/dist/core/item/status-filter.js +1 -115
- package/dist/core/item/status.js +1 -43
- package/dist/core/item/toon-decode.js +1 -29
- package/dist/core/item/type-registry.js +1 -715
- package/dist/core/item/type-synonyms.js +1 -38
- package/dist/core/lock/index.js +1 -9
- package/dist/core/lock/lock-gc.js +1 -240
- package/dist/core/lock/lock.js +3 -590
- package/dist/core/output/mutation-projection.js +1 -217
- package/dist/core/output/output-control.js +1 -25
- package/dist/core/output/output.js +11 -494
- package/dist/core/output/query-summary.js +1 -58
- package/dist/core/output/tabular.js +1 -77
- package/dist/core/packages/manifest.js +1 -244
- package/dist/core/packages/root.js +1 -84
- package/dist/core/profile/profile-describe.js +1 -83
- package/dist/core/profile/profile-lint.js +1 -415
- package/dist/core/profile/profile-plan.js +0 -0
- package/dist/core/profile/profile-presets.js +1 -370
- package/dist/core/reproducibility/context.js +1 -82
- package/dist/core/schema/fields-file.js +2 -288
- package/dist/core/schema/item-types-file.js +2 -296
- package/dist/core/schema/runtime-field-filters.js +1 -49
- package/dist/core/schema/runtime-field-values.js +1 -313
- package/dist/core/schema/runtime-schema.js +2 -826
- package/dist/core/schema/status-defs-file.js +2 -227
- package/dist/core/schema/status-token.js +1 -31
- package/dist/core/schema/type-inference.js +1 -95
- package/dist/core/schema/type-presets.js +1 -87
- package/dist/core/schema/type-workflows.js +1 -104
- package/dist/core/search/background-refresh.js +2 -286
- package/dist/core/search/bm25.js +1 -146
- package/dist/core/search/cache.js +2 -534
- package/dist/core/search/corpus.js +1 -311
- package/dist/core/search/embedding-batches.js +1 -163
- package/dist/core/search/eval.js +1 -225
- package/dist/core/search/http-client.js +1 -75
- package/dist/core/search/providers.js +1 -242
- package/dist/core/search/relevance.js +1 -244
- package/dist/core/search/semantic-defaults.js +1 -199
- package/dist/core/search/staleness.js +1 -30
- package/dist/core/search/vector-stores.js +2 -664
- package/dist/core/search/vectorization-metadata.js +1 -81
- package/dist/core/sentry/helpers.js +1 -272
- package/dist/core/sentry/instrument.js +1 -387
- package/dist/core/session/session-state.js +1 -260
- package/dist/core/shared/agent-session-context.js +1 -133
- package/dist/core/shared/author.js +1 -1172
- package/dist/core/shared/command-types.js +1 -4
- package/dist/core/shared/conflict-markers.js +1 -31
- package/dist/core/shared/constants.js +1 -405
- package/dist/core/shared/errors.js +1 -20
- package/dist/core/shared/html-entity-decode.js +1 -131
- package/dist/core/shared/index.js +1 -12
- package/dist/core/shared/item-metadata-contract.js +1 -89
- package/dist/core/shared/lazy-module.js +1 -16
- package/dist/core/shared/levenshtein.js +1 -61
- package/dist/core/shared/memo.js +1 -19
- package/dist/core/shared/numeric-parsers.js +1 -20
- package/dist/core/shared/option-alias-visibility.js +1 -67
- package/dist/core/shared/primitives.js +1 -127
- package/dist/core/shared/serial-queue.js +1 -79
- package/dist/core/shared/serialization.js +1 -210
- package/dist/core/shared/split-comma-list.js +1 -30
- package/dist/core/shared/text-normalization.js +1 -38
- package/dist/core/shared/time.js +1 -306
- package/dist/core/store/index.js +1 -12
- package/dist/core/store/item-format-migration.js +1 -125
- package/dist/core/store/item-metadata-cache.js +1 -1116
- package/dist/core/store/item-metadata-query-index.js +9 -394
- package/dist/core/store/item-metadata-read-work.js +1 -43
- package/dist/core/store/item-store.js +1 -693
- package/dist/core/store/paths.d.ts +1 -1
- package/dist/core/store/paths.js +1 -214
- package/dist/core/store/settings-read-cache.js +1 -85
- package/dist/core/store/settings-validator.js +1 -421
- package/dist/core/store/settings.js +3 -1309
- package/dist/core/store/tracker-preflight.js +1 -141
- package/dist/core/telemetry/consent.js +5 -108
- package/dist/core/telemetry/observability.js +1 -246
- package/dist/core/telemetry/runtime.js +4 -1988
- package/dist/core/test/background-runs.js +4 -945
- package/dist/core/test/item-test-run-tracking.js +1 -63
- package/dist/core/test/run-selectors.js +1 -120
- package/dist/core/validate/estimate-defaults.js +1 -89
- package/dist/core/validate/fix-planning.js +1 -189
- package/dist/core/validate/linked-artifact-reference.js +1 -36
- package/dist/core/validate/missing-by-type.js +1 -34
- package/dist/core/validate/missing-link-owners.js +1 -95
- package/dist/core/validate/stale-file-classification.js +1 -82
- package/dist/mcp/http-server.js +5 -448
- package/dist/mcp/legacy-adapter.js +1 -77
- package/dist/mcp/runtime-capabilities.js +1 -200
- package/dist/mcp/server.js +4 -1233
- package/dist/mcp/tool-definitions.js +1 -804
- package/dist/sdk/actionability.js +1 -13
- package/dist/sdk/agent/closed-domain-contracts.js +1 -161
- package/dist/sdk/agent/command-recovery.js +1 -59
- package/dist/sdk/agent/command-suggestions.js +1 -66
- package/dist/sdk/agent/create-option-policy.js +1 -31
- package/dist/sdk/agent/identity-config.js +1 -106
- package/dist/sdk/agent/item-addressing.js +1 -207
- package/dist/sdk/agent/refusal-closure-census.js +1 -151
- package/dist/sdk/agent/refusal-closure.js +1 -133
- package/dist/sdk/agent/refusal-corpus-contracts.js +1 -193
- package/dist/sdk/agent/refusal-reachability.js +1 -593
- package/dist/sdk/agent/subcommand-recovery.js +1 -83
- package/dist/sdk/agent/task-transcript-contracts.js +1 -197
- package/dist/sdk/agent/tracker-preflight-contracts.js +1 -126
- package/dist/sdk/agent-capability-contracts.js +1 -428
- package/dist/sdk/agent-session-context.js +1 -9
- package/dist/sdk/annotations.js +1 -448
- package/dist/sdk/author-attribution.js +1 -468
- package/dist/sdk/authoring.js +1 -20
- package/dist/sdk/cli-bootstrap.js +1 -838
- package/dist/sdk/cli-contracts/agent-output-contracts.d.ts +1 -1
- package/dist/sdk/cli-contracts/agent-output-contracts.js +4 -476
- package/dist/sdk/cli-contracts/bootstrap-command-scanner.js +1 -79
- package/dist/sdk/cli-contracts/command-aliases.d.ts +4 -0
- package/dist/sdk/cli-contracts/command-aliases.js +1 -107
- package/dist/sdk/cli-contracts/command-exit-contracts.js +1 -151
- package/dist/sdk/cli-contracts/commander-mutation-options.js +1 -1081
- package/dist/sdk/cli-contracts/commander-types.js +1 -159
- package/dist/sdk/cli-contracts/completeness.js +1 -393
- package/dist/sdk/cli-contracts/enum-contracts.js +1 -222
- package/dist/sdk/cli-contracts/flag-contracts.js +1 -1947
- package/dist/sdk/cli-contracts/flag-lexicon-contracts.js +1 -347
- package/dist/sdk/cli-contracts/grammar-contracts.js +1 -986
- package/dist/sdk/cli-contracts/registration-helpers.js +7 -990
- package/dist/sdk/cli-contracts/runtime-contracts.d.ts +5 -0
- package/dist/sdk/cli-contracts/runtime-contracts.js +1 -2090
- package/dist/sdk/cli-contracts/schemas/assurance-definition.js +1 -324
- package/dist/sdk/cli-contracts/string-lists.js +1 -16
- package/dist/sdk/cli-contracts/tool-option-contracts.js +1 -461
- package/dist/sdk/cli-contracts/tool-parameter-tables.js +1 -2167
- package/dist/sdk/cli-contracts/tool-schema.d.ts +3 -1
- package/dist/sdk/cli-contracts/tool-schema.js +1 -1664
- package/dist/sdk/cli-contracts/typed-action-inputs.js +1 -4
- package/dist/sdk/cli-contracts.d.ts +1 -1
- package/dist/sdk/cli-contracts.js +1 -17
- package/dist/sdk/cli-program.js +1 -49
- package/dist/sdk/command-line.d.ts +2 -5
- package/dist/sdk/command-line.js +1 -78
- package/dist/sdk/comments.js +1 -133
- package/dist/sdk/compile-cache.js +1 -73
- package/dist/sdk/completion.js +157 -837
- package/dist/sdk/compose.js +1 -1090
- package/dist/sdk/config.js +1 -1204
- package/dist/sdk/context/recency.js +1 -33
- package/dist/sdk/context/semantic-session-attribution.js +1 -82
- package/dist/sdk/context/usage-egress.js +1 -29
- package/dist/sdk/context/usage-ledger.js +3 -185
- package/dist/sdk/context-intent-contracts.js +1 -709
- package/dist/sdk/context-intent-runtime.js +1 -115
- package/dist/sdk/context-packing.js +1 -218
- package/dist/sdk/context-relevance.js +1 -503
- package/dist/sdk/context-signal-store.js +2 -426
- package/dist/sdk/context-usage.js +1 -367
- package/dist/sdk/contracts.js +1 -23
- package/dist/sdk/core-governance.js +1 -14
- package/dist/sdk/core.js +1 -14
- package/dist/sdk/corpus-shape.js +1 -401
- package/dist/sdk/define.js +1 -220
- package/dist/sdk/dependencies.js +1 -718
- package/dist/sdk/dependency-flag-validation.js +1 -156
- package/dist/sdk/dependency-provenance.js +1 -135
- package/dist/sdk/docs.js +1 -14
- package/dist/sdk/duplicates.js +1 -40
- package/dist/sdk/environment/agent-environment.js +1 -466
- package/dist/sdk/environment/host-environment-errors.js +1 -8
- package/dist/sdk/environment/project-runtime-compatibility.js +1 -481
- package/dist/sdk/environment/source-context.js +1 -28
- package/dist/sdk/environment/tracker-preflight.js +1 -9
- package/dist/sdk/error-code-catalog.js +1 -153
- package/dist/sdk/error-runtime.js +1 -58
- package/dist/sdk/errors.js +1 -58
- package/dist/sdk/eval.js +1 -190
- package/dist/sdk/extension/author-manifest.js +1 -92
- package/dist/sdk/extension/bundled-catalog.js +1 -332
- package/dist/sdk/extension/concurrency.js +1 -25
- package/dist/sdk/extension/copy-scope.d.ts +2 -0
- package/dist/sdk/extension/copy-scope.js +2 -0
- package/dist/sdk/extension/custom-field-collisions.js +1 -30
- package/dist/sdk/extension/describe.js +3 -189
- package/dist/sdk/extension/doctor.js +1 -606
- package/dist/sdk/extension/install-plan.d.ts +69 -0
- package/dist/sdk/extension/install-plan.js +2 -0
- package/dist/sdk/extension/install-receipts.d.ts +7 -0
- package/dist/sdk/extension/install-receipts.js +2 -0
- package/dist/sdk/extension/install-runtime.js +3 -313
- package/dist/sdk/extension/install-snapshot.js +1 -66
- package/dist/sdk/extension/install-sources.js +5 -1057
- package/dist/sdk/extension/managed-state.js +2 -252
- package/dist/sdk/extension/migrations.js +2 -174
- package/dist/sdk/extension/output-ownership.js +1 -25
- package/dist/sdk/extension/runtime-summary.js +1 -18
- package/dist/sdk/extension/scaffold.js +4 -2308
- package/dist/sdk/extension/shared.js +1 -147
- package/dist/sdk/extension/source-resolution.js +1 -65
- package/dist/sdk/extension/update-check.js +1 -67
- package/dist/sdk/extension-command-context.js +1 -44
- package/dist/sdk/extension-contracts.js +1 -73
- package/dist/sdk/extension.d.ts +7 -2
- package/dist/sdk/extension.js +1 -2196
- package/dist/sdk/files.js +1 -535
- package/dist/sdk/flag-invocation-contracts.d.ts +0 -5
- package/dist/sdk/flag-invocation-contracts.js +1 -344
- package/dist/sdk/generated/generated-error-code-catalog-part-1.js +1 -2224
- package/dist/sdk/generated/generated-error-code-catalog-part-2.js +1 -2236
- package/dist/sdk/generated-error-code-catalog.js +1 -16
- package/dist/sdk/governance/assurance-action-contracts.js +1 -4
- package/dist/sdk/governance/assurance-action.js +1 -411
- package/dist/sdk/governance/assurance-limits.js +1 -10
- package/dist/sdk/governance/assurance-mutation-error.js +1 -81
- package/dist/sdk/governance/assurance-presets.js +1 -135
- package/dist/sdk/governance/assurance-runtime.js +1 -238
- package/dist/sdk/governance/assurance.js +4 -1182
- package/dist/sdk/governance/boundary-fixtures.js +1 -200
- package/dist/sdk/governance/coverage-assurance.js +1 -60
- package/dist/sdk/governance/defect-recurrence-coverage.js +1 -188
- package/dist/sdk/governance/defect-recurrence-graph.js +1 -120
- package/dist/sdk/governance/defect-recurrence-signals.js +1 -24
- package/dist/sdk/governance/defect-recurrence.js +1 -623
- package/dist/sdk/governance/extension-host-version.js +1 -115
- package/dist/sdk/governance/gc.js +1 -368
- package/dist/sdk/governance/health.js +1 -2367
- package/dist/sdk/governance/hierarchy-validation.js +1 -108
- package/dist/sdk/governance/linked-file-report.js +1 -71
- package/dist/sdk/governance/merge-receipt-history.js +1 -206
- package/dist/sdk/governance/provenance-health.js +1 -282
- package/dist/sdk/governance/reindex.js +4 -761
- package/dist/sdk/governance/stale-work.js +1 -82
- package/dist/sdk/governance/status-role-diagnostics.js +1 -35
- package/dist/sdk/governance/storage-integrity.js +1 -280
- package/dist/sdk/governance/tracked-runtime-cache.js +1 -106
- package/dist/sdk/governance/upgrade.js +2 -327
- package/dist/sdk/governance/validate-history-drift.js +1 -81
- package/dist/sdk/governance/validate-item-reader.js +1 -17
- package/dist/sdk/governance/validate-normalization.js +1 -36
- package/dist/sdk/governance/validate.js +1 -2261
- package/dist/sdk/governance/workspace-position.js +1 -163
- package/dist/sdk/governance.d.ts +1 -0
- package/dist/sdk/governance.js +1 -31
- package/dist/sdk/graph/adapter.js +1 -181
- package/dist/sdk/graph/analytics.js +1 -474
- package/dist/sdk/graph/assembly.js +1 -377
- package/dist/sdk/graph/cache.js +1 -160
- package/dist/sdk/graph/centrality.js +1 -258
- package/dist/sdk/graph/conformance.js +1 -130
- package/dist/sdk/graph/deadline-scheduling.d.ts +90 -0
- package/dist/sdk/graph/deadline-scheduling.js +2 -0
- package/dist/sdk/graph/durable-cache.d.ts +1 -1
- package/dist/sdk/graph/durable-cache.js +1 -361
- package/dist/sdk/graph/governance-contracts.js +1 -34
- package/dist/sdk/graph/governance.d.ts +13 -1
- package/dist/sdk/graph/governance.js +1 -735
- package/dist/sdk/graph/hierarchy-integrity.js +1 -310
- package/dist/sdk/graph/index.d.ts +3 -2
- package/dist/sdk/graph/index.js +1 -26
- package/dist/sdk/graph/lifecycle-coverage.d.ts +32 -0
- package/dist/sdk/graph/lifecycle-coverage.js +2 -0
- package/dist/sdk/graph/mutation-advisory.js +1 -176
- package/dist/sdk/graph/remediation.js +1 -197
- package/dist/sdk/graph/run.d.ts +15 -1
- package/dist/sdk/graph/run.js +1 -768
- package/dist/sdk/graph/scheduling.js +1 -124
- package/dist/sdk/graph/traversal.js +1 -284
- package/dist/sdk/graph/workspace-relationship-kind-registry.js +1 -27
- package/dist/sdk/graph.js +1 -15
- package/dist/sdk/guide-topics.js +1 -707
- package/dist/sdk/guide.js +1 -279
- package/dist/sdk/history/maintenance.d.ts +71 -0
- package/dist/sdk/history/maintenance.js +2 -0
- package/dist/sdk/history/salvage.js +2 -247
- package/dist/sdk/history/subject.d.ts +19 -0
- package/dist/sdk/history/subject.js +2 -0
- package/dist/sdk/history-analytics.js +1 -282
- package/dist/sdk/history-compact.js +1 -527
- package/dist/sdk/history-mcp.js +1 -68
- package/dist/sdk/history-provenance.js +1 -182
- package/dist/sdk/history-read.js +1 -96
- package/dist/sdk/history-redact.d.ts +1 -14
- package/dist/sdk/history-redact.js +1 -643
- package/dist/sdk/history-repair.d.ts +5 -0
- package/dist/sdk/history-repair.js +1 -657
- package/dist/sdk/improvement-ledger-validation.js +1 -62
- package/dist/sdk/improvement-ledger.js +2 -257
- package/dist/sdk/index.d.ts +4 -0
- package/dist/sdk/index.js +1 -183
- package/dist/sdk/init-agent-guidance.js +2 -496
- package/dist/sdk/init.js +2 -820
- package/dist/sdk/invocation-author.js +1 -39
- package/dist/sdk/item-children.js +1 -90
- package/dist/sdk/item-metadata-index.js +1 -15
- package/dist/sdk/item-schedule.js +1 -27
- package/dist/sdk/item-transaction.js +1 -396
- package/dist/sdk/learnings.js +1 -29
- package/dist/sdk/lifecycle/append.js +2 -53
- package/dist/sdk/lifecycle/claim.d.ts +2 -0
- package/dist/sdk/lifecycle/claim.js +1 -242
- package/dist/sdk/lifecycle/close-many.js +1 -438
- package/dist/sdk/lifecycle/close.js +1 -468
- package/dist/sdk/lifecycle/copy.js +1 -212
- package/dist/sdk/lifecycle/create.js +1 -1949
- package/dist/sdk/lifecycle/delete.js +1 -45
- package/dist/sdk/lifecycle/event-validation-messages.js +1 -91
- package/dist/sdk/lifecycle/focus.js +1 -91
- package/dist/sdk/lifecycle/hierarchy-mutation-lock.js +1 -24
- package/dist/sdk/lifecycle/legacy-none-tokens.js +1 -149
- package/dist/sdk/lifecycle/lifecycle-transitions.js +1 -40
- package/dist/sdk/lifecycle/mcp-actions.d.ts +2 -0
- package/dist/sdk/lifecycle/mcp-actions.js +1 -51
- package/dist/sdk/lifecycle/metadata-normalizers.js +1 -46
- package/dist/sdk/lifecycle/mutation-command-options.js +1 -9
- package/dist/sdk/lifecycle/plan.js +1 -1606
- package/dist/sdk/lifecycle/recurrence-parsers.js +1 -147
- package/dist/sdk/lifecycle/reopen.js +1 -68
- package/dist/sdk/lifecycle/repeatable-metadata-parsers.js +1 -143
- package/dist/sdk/lifecycle/restore.d.ts +1 -0
- package/dist/sdk/lifecycle/restore.js +1 -330
- package/dist/sdk/lifecycle/shared-unset-fields.js +1 -295
- package/dist/sdk/lifecycle/update-many.js +1 -861
- package/dist/sdk/lifecycle/update.js +1 -2136
- package/dist/sdk/lifecycle-completion.js +1 -92
- package/dist/sdk/lifecycle-policy.js +1 -120
- package/dist/sdk/linked-artifacts.js +1 -530
- package/dist/sdk/mcp/apps.js +4 -133
- package/dist/sdk/mcp/authorization.js +1 -404
- package/dist/sdk/mcp/discovery.js +1 -494
- package/dist/sdk/mcp/interactions.js +1 -336
- package/dist/sdk/mcp/protocol.d.ts +7 -0
- package/dist/sdk/mcp/protocol.js +1 -184
- package/dist/sdk/mcp/skills.js +1 -389
- package/dist/sdk/mcp/subscriptions.js +1 -211
- package/dist/sdk/mcp/tasks.js +2 -430
- package/dist/sdk/mcp/transport.js +1 -260
- package/dist/sdk/merge/abandoned-receipts.js +1 -46
- package/dist/sdk/merge/driver.js +1 -212
- package/dist/sdk/merge/index.js +1 -16
- package/dist/sdk/merge/install.js +3 -561
- package/dist/sdk/merge/receipt-file-boundary.js +1 -46
- package/dist/sdk/merge/receipt-operation.js +1 -96
- package/dist/sdk/merge/receipt-schema.js +1 -397
- package/dist/sdk/merge/receipts.js +4 -525
- package/dist/sdk/merge/reconcile.js +1 -352
- package/dist/sdk/merge/three-way.js +3 -775
- package/dist/sdk/merge.js +1 -10
- package/dist/sdk/mutation-events.js +1 -292
- package/dist/sdk/mutation-guard.js +1 -216
- package/dist/sdk/notes.js +1 -139
- package/dist/sdk/output-contracts.js +1 -172
- package/dist/sdk/output-projection.js +1 -430
- package/dist/sdk/output-token-accounting.js +1 -140
- package/dist/sdk/output.js +1 -64
- package/dist/sdk/ownership-source.js +1 -21
- package/dist/sdk/package-import-adapters.js +1 -442
- package/dist/sdk/package-migrations.js +1 -20
- package/dist/sdk/package-runtime-options.js +1 -80
- package/dist/sdk/pagination.js +1 -162
- package/dist/sdk/profile.js +1 -454
- package/dist/sdk/provenance.js +1 -258
- package/dist/sdk/public-surface.json +1 -1
- package/dist/sdk/query/activity.js +1 -401
- package/dist/sdk/query/aggregate.d.ts +16 -0
- package/dist/sdk/query/aggregate.js +1 -390
- package/dist/sdk/query/calendar.js +1 -964
- package/dist/sdk/query/complete-list.js +1 -215
- package/dist/sdk/query/context.js +1 -1702
- package/dist/sdk/query/duplicate-candidates.js +1 -70
- package/dist/sdk/query/get.js +1 -450
- package/dist/sdk/query/history.js +1 -186
- package/dist/sdk/query/item-filter-options.js +1 -9
- package/dist/sdk/query/light-metadata.js +1 -18
- package/dist/sdk/query/list-filter-shared.js +1 -81
- package/dist/sdk/query/list.js +1 -1304
- package/dist/sdk/query/multi-value-filters.js +1 -78
- package/dist/sdk/query/next.js +1 -513
- package/dist/sdk/query/parsers.js +1 -44
- package/dist/sdk/query/projection-contracts.js +1 -184
- package/dist/sdk/query/search-contracts.js +1 -230
- package/dist/sdk/query/search-pagination.js +1 -35
- package/dist/sdk/query/search-rendering.js +1 -105
- package/dist/sdk/query/search.js +2 -1987
- package/dist/sdk/query.js +1 -35
- package/dist/sdk/read-output/continuation.js +1 -194
- package/dist/sdk/read-output-budget.js +1 -135
- package/dist/sdk/read-output-contracts.js +1 -1225
- package/dist/sdk/read-output-rows.js +1 -186
- package/dist/sdk/read-output-session.js +1 -208
- package/dist/sdk/relationship-analytics.js +1 -410
- package/dist/sdk/relationship-context.js +1 -284
- package/dist/sdk/relationship-history.js +4 -519
- package/dist/sdk/relationship-kinds/contract.js +1 -22
- package/dist/sdk/relationship-migration.js +1 -77
- package/dist/sdk/relationships.js +1 -579
- package/dist/sdk/reproducibility/process.js +1 -87
- package/dist/sdk/runtime-action-aliases.js +1 -59
- package/dist/sdk/runtime-extended-actions.js +1 -177
- package/dist/sdk/runtime-input.js +1 -614
- package/dist/sdk/runtime-primitives.js +1 -84
- package/dist/sdk/runtime-public-contracts.js +1 -4
- package/dist/sdk/runtime-stats-options.js +1 -38
- package/dist/sdk/runtime.js +1 -1928
- package/dist/sdk/scheduling-shortcuts.js +1 -63
- package/dist/sdk/schema-migration.js +3 -856
- package/dist/sdk/schema.js +1 -1376
- package/dist/sdk/search-refresh-worker.js +1 -18
- package/dist/sdk/similarity-scoring.js +1 -53
- package/dist/sdk/similarity.js +1 -326
- package/dist/sdk/start-task-status.js +1 -14
- package/dist/sdk/stats.js +1 -270
- package/dist/sdk/structured-mutations.js +1 -580
- package/dist/sdk/telemetry-flush.js +1 -13
- package/dist/sdk/telemetry.js +1 -405
- package/dist/sdk/templates.js +2 -292
- package/dist/sdk/test/batch.js +2 -509
- package/dist/sdk/test/entry.js +1 -70
- package/dist/sdk/test/execution.js +6 -2211
- package/dist/sdk/test/linked-command-detection.js +1 -546
- package/dist/sdk/test/measurements.js +1 -91
- package/dist/sdk/test/parsers.js +1 -545
- package/dist/sdk/test/runs.js +1 -193
- package/dist/sdk/test/trust.js +2 -206
- package/dist/sdk/testing.js +4 -1391
- package/dist/sdk/traceability/runtime-files-lookup.js +1 -32
- package/dist/sdk/traceability/source-traceability.js +1 -292
- package/dist/sdk/tracker-root-discovery.js +1 -9
- package/dist/sdk/workspace-contracts-cache.js +1 -28
- package/dist/sdk/workspace-contracts.js +1 -33
- package/dist/sdk/workspace-memory.js +2 -318
- package/dist/sdk/workspace-recipe.js +1 -71
- package/dist/sdk/workspace-snapshot.js +4 -613
- package/dist/sdk/workspace-transaction-gc.js +1 -149
- package/dist/sdk/workspace-transaction.js +2 -363
- package/dist/sdk/workspace.js +3 -127
- package/dist/types/index.js +1 -9
- package/dist/types.js +1 -245
- package/docs/AGENT_GUIDE.md +1 -1
- package/docs/CONTEXT_ALGORITHM_PORTFOLIO.md +167 -0
- package/docs/DIAGNOSTIC_OUTPUT_CONTRACTS.md +9 -3
- package/docs/EXTENSIONS.md +1 -0
- package/docs/HISTORY_MAINTENANCE.md +125 -0
- package/docs/MCP_2026_07_28_CONFORMANCE.md +20 -10
- package/docs/PACKAGE_EVIDENCE.md +92 -0
- package/docs/PLANNING_MEASUREMENTS.md +183 -0
- package/docs/README.md +3 -0
- package/docs/SCRIPTING.md +21 -0
- package/docs/TESTING.md +23 -0
- package/docs/generated/FLAG_LEXICON_BUDGETS.md +5 -5
- package/docs/generated/REFUSAL_CLOSURE_CENSUS.md +2 -2
- package/marketplace.json +2 -2
- package/package.json +1 -1
- package/packages/pm-beads/package.json +1 -1
- package/packages/pm-calendar/package.json +1 -1
- package/packages/pm-command-kit/package.json +1 -1
- package/packages/pm-digital-twin/package.json +1 -1
- package/packages/pm-governance-audit/package.json +1 -1
- package/packages/pm-guide-shell/package.json +1 -1
- package/packages/pm-kanban/package.json +1 -1
- package/packages/pm-lifecycle-hooks/package.json +1 -1
- package/packages/pm-linked-test-adapters/package.json +1 -1
- package/packages/pm-search-advanced/package.json +1 -1
- package/packages/pm-templates/package.json +1 -1
- package/packages/pm-todos/package.json +1 -1
- package/packages/pm-vcs/package.json +1 -1
- package/plugins/pm-claude/.claude-plugin/plugin.json +1 -1
- package/plugins/pm-codex/.codex-plugin/plugin.json +1 -1
- package/scripts/finalize-build.mjs +45 -3
- package/dist/cli-bundle/chunks/chunk-AZDFJGH6.js +0 -9
- package/dist/cli-bundle/chunks/chunk-BAX2BYUW.js +0 -2111
- package/dist/cli-bundle/chunks/chunk-CKOL5U7J.js +0 -77
- package/dist/cli-bundle/chunks/chunk-OF76PSDQ.js +0 -5
- package/dist/cli-bundle/chunks/chunk-QUWFABDM.js +0 -232
- package/dist/cli-bundle/chunks/chunk-QWRRFYK3.js +0 -2
- package/dist/cli-bundle/chunks/chunk-RWWBOWJ5.js +0 -2
- package/dist/cli-bundle/chunks/chunk-WGAOYSYH.js +0 -40
- package/dist/cli-bundle/chunks/chunk-WI2AYPA7.js +0 -2
- package/dist/cli-bundle/chunks/register-list-query-5JL52D33.js +0 -11
- package/dist/cli-bundle/chunks/register-mutation-ZPG7KMVP.js +0 -20
- package/dist/cli-bundle/chunks/register-setup-H4SVAVX7.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-AL5ON6K6.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-CHC2IDXA.js +0 -6
- package/dist/cli-bundle/focused-chunks/chunk-CK6QFAPZ.js +0 -20
- package/dist/cli-bundle/focused-chunks/chunk-EZR3GHFE.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-H2WJWK7L.js +0 -56
- package/dist/cli-bundle/focused-chunks/chunk-NTPY5GSO.js +0 -3
- package/dist/cli-bundle/focused-chunks/chunk-P5O7MP5Y.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-PDMW2E36.js +0 -177
- package/dist/cli-bundle/focused-chunks/chunk-QTVCLMSZ.js +0 -6
- package/dist/cli-bundle/focused-chunks/chunk-QTZRBUYA.js +0 -8
- package/dist/cli-bundle/focused-chunks/chunk-SGQST3PQ.js +0 -12
- package/dist/cli-bundle/focused-chunks/chunk-UKHASMMP.js +0 -10
- package/dist/cli-bundle/focused-chunks/chunk-ZPEKQHOC.js +0 -2
|
@@ -1,63 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
* @module sdk/improvement-ledger-validation
|
|
3
|
-
*
|
|
4
|
-
* Validates the persisted improvement-ledger envelope and observations at the
|
|
5
|
-
* storage boundary so malformed workspace state never reaches analytics.
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="939d5f93-d287-5c1c-bc78-d013f76735f2")}catch(e){}}();
|
|
9
|
-
import { EXIT_CODE } from "../core/shared/constants.js";
|
|
10
|
-
import { PmCliError } from "../core/shared/errors.js";
|
|
11
|
-
const IMPROVEMENT_LEDGER_FORMAT_VERSION = 1;
|
|
12
|
-
function isValidLedgerObservation(observation) {
|
|
13
|
-
if (typeof observation !== "object" || observation === null)
|
|
14
|
-
return false;
|
|
15
|
-
const candidate = observation;
|
|
16
|
-
const hasRequiredFields = typeof candidate.id === "string" &&
|
|
17
|
-
typeof candidate.metric === "string" &&
|
|
18
|
-
typeof candidate.value === "number" &&
|
|
19
|
-
Number.isFinite(candidate.value) &&
|
|
20
|
-
["higher", "lower", "target"].includes(String(candidate.direction)) &&
|
|
21
|
-
typeof candidate.observed_at === "string" &&
|
|
22
|
-
typeof candidate.revision === "string" &&
|
|
23
|
-
["caller", "git", "unversioned"].includes(String(candidate.revision_source)) &&
|
|
24
|
-
typeof candidate.author === "string";
|
|
25
|
-
if (!hasRequiredFields)
|
|
26
|
-
return false;
|
|
27
|
-
return (candidate.direction !== "target" ||
|
|
28
|
-
(typeof candidate.threshold === "number" &&
|
|
29
|
-
Number.isFinite(candidate.threshold)));
|
|
30
|
-
}
|
|
31
|
-
/** Parse and validate a serialized improvement-ledger singleton. */
|
|
32
|
-
export function parseImprovementLedgerDocument(raw) {
|
|
33
|
-
if (raw === null) {
|
|
34
|
-
return {
|
|
35
|
-
format_version: IMPROVEMENT_LEDGER_FORMAT_VERSION,
|
|
36
|
-
observations: [],
|
|
37
|
-
};
|
|
38
|
-
}
|
|
39
|
-
let parsed;
|
|
40
|
-
try {
|
|
41
|
-
parsed = JSON.parse(raw);
|
|
42
|
-
}
|
|
43
|
-
catch {
|
|
44
|
-
throw new PmCliError("Improvement ledger contains invalid JSON.", EXIT_CODE.GENERIC_FAILURE, { code: "invalid_improvement_ledger" });
|
|
45
|
-
}
|
|
46
|
-
if (typeof parsed !== "object" ||
|
|
47
|
-
parsed === null ||
|
|
48
|
-
Array.isArray(parsed) ||
|
|
49
|
-
parsed.format_version !==
|
|
50
|
-
IMPROVEMENT_LEDGER_FORMAT_VERSION ||
|
|
51
|
-
!Array.isArray(parsed.observations)) {
|
|
52
|
-
throw new PmCliError("Improvement ledger has an unsupported shape or format version.", EXIT_CODE.GENERIC_FAILURE, { code: "invalid_improvement_ledger" });
|
|
53
|
-
}
|
|
54
|
-
const observations = parsed.observations;
|
|
55
|
-
for (const observation of observations) {
|
|
56
|
-
if (!isValidLedgerObservation(observation)) {
|
|
57
|
-
throw new PmCliError("Improvement ledger contains an invalid observation.", EXIT_CODE.GENERIC_FAILURE, { code: "invalid_improvement_ledger" });
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
return parsed;
|
|
61
|
-
}
|
|
1
|
+
!(function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="39d2b5aa-c6f3-57ac-adb4-e775bc838828")}catch(e2){}})();import{EXIT_CODE}from"../core/shared/constants.js";import{PmCliError}from"../core/shared/errors.js";const IMPROVEMENT_LEDGER_FORMAT_VERSION=1;function isValidLedgerObservation(observation){if(typeof observation!=="object"||observation===null)return false;const candidate=observation;const hasRequiredFields=typeof candidate.id==="string"&&typeof candidate.metric==="string"&&typeof candidate.value==="number"&&Number.isFinite(candidate.value)&&["higher","lower","target"].includes(String(candidate.direction))&&typeof candidate.observed_at==="string"&&typeof candidate.revision==="string"&&["caller","git","unversioned"].includes(String(candidate.revision_source))&&typeof candidate.author==="string";if(!hasRequiredFields)return false;return candidate.direction!=="target"||typeof candidate.threshold==="number"&&Number.isFinite(candidate.threshold)}function parseImprovementLedgerDocument(raw){if(raw===null){return{format_version:IMPROVEMENT_LEDGER_FORMAT_VERSION,observations:[]}}let parsed;try{parsed=JSON.parse(raw)}catch{throw new PmCliError("Improvement ledger contains invalid JSON.",EXIT_CODE.GENERIC_FAILURE,{code:"invalid_improvement_ledger"})}if(typeof parsed!=="object"||parsed===null||Array.isArray(parsed)||parsed.format_version!==IMPROVEMENT_LEDGER_FORMAT_VERSION||!Array.isArray(parsed.observations)){throw new PmCliError("Improvement ledger has an unsupported shape or format version.",EXIT_CODE.GENERIC_FAILURE,{code:"invalid_improvement_ledger"})}const observations=parsed.observations;for(const observation of observations){if(!isValidLedgerObservation(observation)){throw new PmCliError("Improvement ledger contains an invalid observation.",EXIT_CODE.GENERIC_FAILURE,{code:"invalid_improvement_ledger"})}}return parsed}export{parseImprovementLedgerDocument};
|
|
62
2
|
//# sourceMappingURL=improvement-ledger-validation.js.map
|
|
63
|
-
//# debugId=939d5f93-d287-5c1c-bc78-d013f76735f2
|
|
@@ -1,258 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
*
|
|
4
|
-
* Persists append-only quantitative observations in an audited workspace
|
|
5
|
-
* singleton and exposes bounded trend reads for self-improvement loops.
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="c2e1edc9-c454-5cfa-85c8-e9fb0a76a296")}catch(e){}}();
|
|
9
|
-
import { assertInitializedTracker } from "./environment/tracker-preflight.js";
|
|
10
|
-
import { createHash } from "node:crypto";
|
|
11
|
-
import { execFile } from "node:child_process";
|
|
12
|
-
import path from "node:path";
|
|
13
|
-
import { promisify } from "node:util";
|
|
14
|
-
import { readFileIfExists } from "../core/fs/fs-utils.js";
|
|
15
|
-
import { mutateWorkspaceJsonWithHistory } from "../core/history/workspace-history.js";
|
|
16
|
-
import { EXIT_CODE } from "../core/shared/constants.js";
|
|
17
|
-
import { resolveAuthor } from "../core/shared/author.js";
|
|
18
|
-
import { PmCliError } from "../core/shared/errors.js";
|
|
19
|
-
import { stableStringify } from "../core/shared/serialization.js";
|
|
20
|
-
import { nowIso } from "../core/shared/time.js";
|
|
21
|
-
import { resolvePmRoot, resolveWorkspaceRoot, } from "../core/store/paths.js";
|
|
22
|
-
import { readSettings } from "../core/store/settings.js";
|
|
23
|
-
import { parseImprovementLedgerDocument as parseLedger } from "./improvement-ledger-validation.js";
|
|
24
|
-
const execFileAsync = promisify(execFile);
|
|
25
|
-
const DEFAULT_OBSERVATION_LIMIT = 50;
|
|
26
|
-
const MAX_OBSERVATION_LIMIT = 1_000;
|
|
27
|
-
const METRIC_NAME_PATTERN = /^[a-z0-9](?:[a-z0-9._/-]{0,126}[a-z0-9])?$/u;
|
|
28
|
-
function normalizeMetricName(value) {
|
|
29
|
-
const metric = value.trim().toLowerCase();
|
|
30
|
-
if (!METRIC_NAME_PATTERN.test(metric)) {
|
|
31
|
-
throw new PmCliError(`Invalid metric name "${value}"; use 1-128 lowercase letters, digits, dots, slashes, underscores, or hyphens.`, EXIT_CODE.USAGE, { code: "invalid_improvement_metric" });
|
|
32
|
-
}
|
|
33
|
-
return metric;
|
|
34
|
-
}
|
|
35
|
-
function normalizeDirection(value) {
|
|
36
|
-
const direction = value ?? "lower";
|
|
37
|
-
if (!["higher", "lower", "target"].includes(direction)) {
|
|
38
|
-
throw new PmCliError("Improvement direction must be higher, lower, or target.", EXIT_CODE.USAGE, { code: "invalid_improvement_observation" });
|
|
39
|
-
}
|
|
40
|
-
return direction;
|
|
41
|
-
}
|
|
42
|
-
function normalizeOptionalText(value, field) {
|
|
43
|
-
const normalized = value?.trim();
|
|
44
|
-
if (!normalized)
|
|
45
|
-
return undefined;
|
|
46
|
-
if (normalized.length > 256) {
|
|
47
|
-
throw new PmCliError(`${field} must not exceed 256 characters.`, EXIT_CODE.USAGE, { code: "invalid_improvement_observation" });
|
|
48
|
-
}
|
|
49
|
-
return normalized;
|
|
50
|
-
}
|
|
51
|
-
function parseObservationLimit(value) {
|
|
52
|
-
const limit = value ?? DEFAULT_OBSERVATION_LIMIT;
|
|
53
|
-
if (!Number.isSafeInteger(limit) ||
|
|
54
|
-
limit < 0 ||
|
|
55
|
-
limit > MAX_OBSERVATION_LIMIT) {
|
|
56
|
-
throw new PmCliError(`Improvement observation limit must be an integer from 0 to ${MAX_OBSERVATION_LIMIT}.`, EXIT_CODE.USAGE, { code: "invalid_improvement_observation_limit" });
|
|
57
|
-
}
|
|
58
|
-
return limit;
|
|
59
|
-
}
|
|
60
|
-
function parseIsoTimestamp(value, field) {
|
|
61
|
-
const milliseconds = Date.parse(value);
|
|
62
|
-
if (!Number.isFinite(milliseconds)) {
|
|
63
|
-
throw new PmCliError(`${field} must be an ISO timestamp.`, EXIT_CODE.USAGE, {
|
|
64
|
-
code: "invalid_improvement_observation_timestamp",
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
|
-
return new Date(milliseconds).toISOString();
|
|
68
|
-
}
|
|
69
|
-
async function buildImprovementObservation(pmRoot, settings, options) {
|
|
70
|
-
if (!Number.isFinite(options.value)) {
|
|
71
|
-
throw new PmCliError("Improvement observation value must be finite.", EXIT_CODE.USAGE, { code: "invalid_improvement_observation" });
|
|
72
|
-
}
|
|
73
|
-
const metric = normalizeMetricName(options.metric);
|
|
74
|
-
const direction = normalizeDirection(options.direction);
|
|
75
|
-
if ((options.threshold !== undefined && !Number.isFinite(options.threshold)) ||
|
|
76
|
-
(direction === "target" && options.threshold === undefined)) {
|
|
77
|
-
throw new PmCliError("Target-directed observations require a finite threshold.", EXIT_CODE.USAGE, { code: "invalid_improvement_observation" });
|
|
78
|
-
}
|
|
79
|
-
const revision = await resolveObservationRevision(pmRoot, options.revision);
|
|
80
|
-
const source = normalizeOptionalText(options.source, "source");
|
|
81
|
-
const itemId = normalizeOptionalText(options.itemId, "itemId");
|
|
82
|
-
const unit = normalizeOptionalText(options.unit, "unit");
|
|
83
|
-
const idempotencyKey = normalizeOptionalText(options.idempotencyKey, "idempotencyKey") ??
|
|
84
|
-
(revision.revision_source === "unversioned"
|
|
85
|
-
? undefined
|
|
86
|
-
: [
|
|
87
|
-
revision.revision,
|
|
88
|
-
metric,
|
|
89
|
-
source ?? "manual",
|
|
90
|
-
itemId ?? "workspace",
|
|
91
|
-
].join(":"));
|
|
92
|
-
const observationWithoutId = {
|
|
93
|
-
metric,
|
|
94
|
-
value: options.value,
|
|
95
|
-
direction,
|
|
96
|
-
...(unit === undefined ? {} : { unit }),
|
|
97
|
-
...(options.threshold === undefined
|
|
98
|
-
? {}
|
|
99
|
-
: { threshold: options.threshold }),
|
|
100
|
-
observed_at: parseIsoTimestamp(options.observedAt ?? nowIso(), "observedAt"),
|
|
101
|
-
...revision,
|
|
102
|
-
author: resolveAuthor(options.author, settings.author_default),
|
|
103
|
-
...(itemId === undefined ? {} : { item_id: itemId }),
|
|
104
|
-
...(source === undefined ? {} : { source }),
|
|
105
|
-
...(idempotencyKey === undefined
|
|
106
|
-
? {}
|
|
107
|
-
: { idempotency_key: idempotencyKey }),
|
|
108
|
-
};
|
|
109
|
-
return {
|
|
110
|
-
id: createHash("sha256")
|
|
111
|
-
.update(stableStringify(observationWithoutId))
|
|
112
|
-
.digest("hex")
|
|
113
|
-
.slice(0, 24),
|
|
114
|
-
...observationWithoutId,
|
|
115
|
-
};
|
|
116
|
-
}
|
|
117
|
-
function ensureObservationCanAppend(ledger, observation) {
|
|
118
|
-
const existing = observation.idempotency_key
|
|
119
|
-
? ledger.observations.find((row) => row.idempotency_key === observation.idempotency_key)
|
|
120
|
-
: ledger.observations.find((row) => row.id === observation.id);
|
|
121
|
-
if (existing) {
|
|
122
|
-
if (existing.metric !== observation.metric ||
|
|
123
|
-
existing.value !== observation.value ||
|
|
124
|
-
existing.direction !== observation.direction ||
|
|
125
|
-
existing.threshold !== observation.threshold ||
|
|
126
|
-
existing.unit !== observation.unit) {
|
|
127
|
-
throw new PmCliError(`Improvement observation retry key already records a different value for ${observation.metric}.`, EXIT_CODE.CONFLICT, { code: "improvement_observation_conflict" });
|
|
128
|
-
}
|
|
129
|
-
return existing;
|
|
130
|
-
}
|
|
131
|
-
const priorMetric = ledger.observations.find((row) => row.metric === observation.metric);
|
|
132
|
-
if (priorMetric &&
|
|
133
|
-
(priorMetric.direction !== observation.direction ||
|
|
134
|
-
priorMetric.unit !== observation.unit ||
|
|
135
|
-
(observation.direction === "target" &&
|
|
136
|
-
priorMetric.threshold !== observation.threshold))) {
|
|
137
|
-
throw new PmCliError(`Metric ${observation.metric} is already declared with direction ${priorMetric.direction} and unit ${priorMetric.unit ?? "<none>"}.`, EXIT_CODE.CONFLICT, { code: "improvement_metric_contract_conflict" });
|
|
138
|
-
}
|
|
139
|
-
return undefined;
|
|
140
|
-
}
|
|
141
|
-
async function resolveObservationRevision(pmRoot, explicit) {
|
|
142
|
-
const callerRevision = normalizeOptionalText(explicit, "revision");
|
|
143
|
-
if (callerRevision) {
|
|
144
|
-
return { revision: callerRevision, revision_source: "caller" };
|
|
145
|
-
}
|
|
146
|
-
try {
|
|
147
|
-
const result = await execFileAsync("git", ["rev-parse", "--verify", "HEAD^{commit}"], {
|
|
148
|
-
cwd: resolveWorkspaceRoot(pmRoot),
|
|
149
|
-
encoding: "utf8",
|
|
150
|
-
timeout: 5_000,
|
|
151
|
-
});
|
|
152
|
-
const revision = result.stdout.trim();
|
|
153
|
-
return { revision, revision_source: "git" };
|
|
154
|
-
}
|
|
155
|
-
catch {
|
|
156
|
-
// Git is optional for root-layout and embedded SDK workspaces.
|
|
157
|
-
}
|
|
158
|
-
return { revision: "unversioned", revision_source: "unversioned" };
|
|
159
|
-
}
|
|
160
|
-
function trendForMetric(observations) {
|
|
161
|
-
const baseline = observations[0];
|
|
162
|
-
const latest = observations[observations.length - 1];
|
|
163
|
-
const delta = latest.value - baseline.value;
|
|
164
|
-
const improved = latest.direction === "higher"
|
|
165
|
-
? delta > 0
|
|
166
|
-
: latest.direction === "lower"
|
|
167
|
-
? delta < 0
|
|
168
|
-
: Math.abs(latest.value - latest.threshold) <
|
|
169
|
-
Math.abs(baseline.value - baseline.threshold);
|
|
170
|
-
return {
|
|
171
|
-
metric: latest.metric,
|
|
172
|
-
direction: latest.direction,
|
|
173
|
-
baseline,
|
|
174
|
-
latest,
|
|
175
|
-
delta,
|
|
176
|
-
improved,
|
|
177
|
-
sample_count: observations.length,
|
|
178
|
-
};
|
|
179
|
-
}
|
|
180
|
-
/** Record one audited observation, returning an idempotent receipt on retry. */
|
|
181
|
-
export async function recordImprovementObservation(options, global = {}) {
|
|
182
|
-
const pmRoot = resolvePmRoot(process.cwd(), global.path);
|
|
183
|
-
await assertInitializedTracker(pmRoot);
|
|
184
|
-
const settings = await readSettings(pmRoot);
|
|
185
|
-
const observation = await buildImprovementObservation(pmRoot, settings, options);
|
|
186
|
-
const filePath = path.join(pmRoot, "improvement-ledger.json");
|
|
187
|
-
const mutation = await mutateWorkspaceJsonWithHistory({
|
|
188
|
-
pmRoot,
|
|
189
|
-
filePath,
|
|
190
|
-
op: "improvement_observe",
|
|
191
|
-
author: observation.author,
|
|
192
|
-
lockTtlSeconds: settings.locks.ttl_seconds,
|
|
193
|
-
lockWaitMs: settings.locks.wait_ms,
|
|
194
|
-
message: options.message ??
|
|
195
|
-
`Record ${observation.metric}=${String(options.value)} improvement observation`,
|
|
196
|
-
mutate: (beforeRaw) => {
|
|
197
|
-
const ledger = parseLedger(beforeRaw);
|
|
198
|
-
const existing = ensureObservationCanAppend(ledger, observation);
|
|
199
|
-
if (existing) {
|
|
200
|
-
return { raw: beforeRaw, result: existing };
|
|
201
|
-
}
|
|
202
|
-
ledger.observations.push(observation);
|
|
203
|
-
ledger.observations.sort((left, right) => left.observed_at.localeCompare(right.observed_at) ||
|
|
204
|
-
left.metric.localeCompare(right.metric) ||
|
|
205
|
-
left.id.localeCompare(right.id));
|
|
206
|
-
return {
|
|
207
|
-
raw: `${stableStringify(ledger)}\n`,
|
|
208
|
-
result: observation,
|
|
209
|
-
};
|
|
210
|
-
},
|
|
211
|
-
});
|
|
212
|
-
return {
|
|
213
|
-
changed: mutation.changed,
|
|
214
|
-
observation: mutation.result,
|
|
215
|
-
ledger_path: "improvement-ledger.json",
|
|
216
|
-
};
|
|
217
|
-
}
|
|
218
|
-
/** Read a bounded newest-first observation page and derive complete trends. */
|
|
219
|
-
export async function readImprovementLedger(options = {}) {
|
|
220
|
-
const pmRoot = resolvePmRoot(options.cwd ?? process.cwd(), options.pmRoot);
|
|
221
|
-
await assertInitializedTracker(pmRoot);
|
|
222
|
-
const metric = options.metric === undefined
|
|
223
|
-
? undefined
|
|
224
|
-
: normalizeMetricName(options.metric);
|
|
225
|
-
const since = options.since === undefined
|
|
226
|
-
? undefined
|
|
227
|
-
: parseIsoTimestamp(options.since, "since");
|
|
228
|
-
const limit = parseObservationLimit(options.limit);
|
|
229
|
-
const ledger = parseLedger(await readFileIfExists(path.join(pmRoot, "improvement-ledger.json")));
|
|
230
|
-
const matching = ledger.observations.filter((row) => (metric === undefined || row.metric === metric) &&
|
|
231
|
-
(options.itemId === undefined || row.item_id === options.itemId) &&
|
|
232
|
-
(since === undefined || row.observed_at >= since));
|
|
233
|
-
const byMetric = new Map();
|
|
234
|
-
for (const observation of matching) {
|
|
235
|
-
const rows = byMetric.get(observation.metric) ?? [];
|
|
236
|
-
rows.push(observation);
|
|
237
|
-
byMetric.set(observation.metric, rows);
|
|
238
|
-
}
|
|
239
|
-
return {
|
|
240
|
-
observations: [...matching].reverse().slice(0, limit),
|
|
241
|
-
total: matching.length,
|
|
242
|
-
truncated: matching.length > limit,
|
|
243
|
-
trends: [...byMetric]
|
|
244
|
-
.map(([, observations]) => trendForMetric(observations))
|
|
245
|
-
.sort((left, right) => left.metric.localeCompare(right.metric)),
|
|
246
|
-
source: "audited_workspace_singleton",
|
|
247
|
-
};
|
|
248
|
-
}
|
|
249
|
-
/** Pure helpers exposed for storage and trend contract tests. */
|
|
250
|
-
export const _testOnlyImprovementLedger = {
|
|
251
|
-
normalizeMetricName,
|
|
252
|
-
normalizeDirection,
|
|
253
|
-
parseLedger,
|
|
254
|
-
parseObservationLimit,
|
|
255
|
-
trendForMetric,
|
|
256
|
-
};
|
|
1
|
+
!(function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="c800f76b-2867-51f5-80d6-fb7b1c61f9e4")}catch(e2){}})();import{assertInitializedTracker}from"./environment/tracker-preflight.js";import{createHash}from"node:crypto";import{execFile}from"node:child_process";import path from"node:path";import{promisify}from"node:util";import{readFileIfExists}from"../core/fs/fs-utils.js";import{mutateWorkspaceJsonWithHistory}from"../core/history/workspace-history.js";import{EXIT_CODE}from"../core/shared/constants.js";import{resolveAuthor}from"../core/shared/author.js";import{PmCliError}from"../core/shared/errors.js";import{stableStringify}from"../core/shared/serialization.js";import{nowIso}from"../core/shared/time.js";import{resolvePmRoot,resolveWorkspaceRoot}from"../core/store/paths.js";import{readSettings}from"../core/store/settings.js";import{parseImprovementLedgerDocument as parseLedger}from"./improvement-ledger-validation.js";const execFileAsync=promisify(execFile);const DEFAULT_OBSERVATION_LIMIT=50;const MAX_OBSERVATION_LIMIT=1e3;const METRIC_NAME_PATTERN=/^[a-z0-9](?:[a-z0-9._/-]{0,126}[a-z0-9])?$/u;function normalizeMetricName(value){const metric=value.trim().toLowerCase();if(!METRIC_NAME_PATTERN.test(metric)){throw new PmCliError(`Invalid metric name "${value}"; use 1-128 lowercase letters, digits, dots, slashes, underscores, or hyphens.`,EXIT_CODE.USAGE,{code:"invalid_improvement_metric"})}return metric}function normalizeDirection(value){const direction=value??"lower";if(!["higher","lower","target"].includes(direction)){throw new PmCliError("Improvement direction must be higher, lower, or target.",EXIT_CODE.USAGE,{code:"invalid_improvement_observation"})}return direction}function normalizeOptionalText(value,field){const normalized=value?.trim();if(!normalized)return void 0;if(normalized.length>256){throw new PmCliError(`${field} must not exceed 256 characters.`,EXIT_CODE.USAGE,{code:"invalid_improvement_observation"})}return normalized}function parseObservationLimit(value){const limit=value??DEFAULT_OBSERVATION_LIMIT;if(!Number.isSafeInteger(limit)||limit<0||limit>MAX_OBSERVATION_LIMIT){throw new PmCliError(`Improvement observation limit must be an integer from 0 to ${MAX_OBSERVATION_LIMIT}.`,EXIT_CODE.USAGE,{code:"invalid_improvement_observation_limit"})}return limit}function parseIsoTimestamp(value,field){const milliseconds=Date.parse(value);if(!Number.isFinite(milliseconds)){throw new PmCliError(`${field} must be an ISO timestamp.`,EXIT_CODE.USAGE,{code:"invalid_improvement_observation_timestamp"})}return new Date(milliseconds).toISOString()}async function buildImprovementObservation(pmRoot,settings,options){if(!Number.isFinite(options.value)){throw new PmCliError("Improvement observation value must be finite.",EXIT_CODE.USAGE,{code:"invalid_improvement_observation"})}const metric=normalizeMetricName(options.metric);const direction=normalizeDirection(options.direction);if(options.threshold!==void 0&&!Number.isFinite(options.threshold)||direction==="target"&&options.threshold===void 0){throw new PmCliError("Target-directed observations require a finite threshold.",EXIT_CODE.USAGE,{code:"invalid_improvement_observation"})}const revision=await resolveObservationRevision(pmRoot,options.revision);const source=normalizeOptionalText(options.source,"source");const itemId=normalizeOptionalText(options.itemId,"itemId");const unit=normalizeOptionalText(options.unit,"unit");const idempotencyKey=normalizeOptionalText(options.idempotencyKey,"idempotencyKey")??(revision.revision_source==="unversioned"?void 0:[revision.revision,metric,source??"manual",itemId??"workspace"].join(":"));const observationWithoutId={metric,value:options.value,direction,...unit===void 0?{}:{unit},...options.threshold===void 0?{}:{threshold:options.threshold},observed_at:parseIsoTimestamp(options.observedAt??nowIso(),"observedAt"),...revision,author:resolveAuthor(options.author,settings.author_default),...itemId===void 0?{}:{item_id:itemId},...source===void 0?{}:{source},...idempotencyKey===void 0?{}:{idempotency_key:idempotencyKey}};return{id:createHash("sha256").update(stableStringify(observationWithoutId)).digest("hex").slice(0,24),...observationWithoutId}}function ensureObservationCanAppend(ledger,observation){const existing=observation.idempotency_key?ledger.observations.find(row=>row.idempotency_key===observation.idempotency_key):ledger.observations.find(row=>row.id===observation.id);if(existing){if(existing.metric!==observation.metric||existing.value!==observation.value||existing.direction!==observation.direction||existing.threshold!==observation.threshold||existing.unit!==observation.unit){throw new PmCliError(`Improvement observation retry key already records a different value for ${observation.metric}.`,EXIT_CODE.CONFLICT,{code:"improvement_observation_conflict"})}return existing}const priorMetric=ledger.observations.find(row=>row.metric===observation.metric);if(priorMetric&&(priorMetric.direction!==observation.direction||priorMetric.unit!==observation.unit||observation.direction==="target"&&priorMetric.threshold!==observation.threshold)){throw new PmCliError(`Metric ${observation.metric} is already declared with direction ${priorMetric.direction} and unit ${priorMetric.unit??"<none>"}.`,EXIT_CODE.CONFLICT,{code:"improvement_metric_contract_conflict"})}return void 0}async function resolveObservationRevision(pmRoot,explicit){const callerRevision=normalizeOptionalText(explicit,"revision");if(callerRevision){return{revision:callerRevision,revision_source:"caller"}}try{const result=await execFileAsync("git",["rev-parse","--verify","HEAD^{commit}"],{cwd:resolveWorkspaceRoot(pmRoot),encoding:"utf8",timeout:5e3});const revision=result.stdout.trim();return{revision,revision_source:"git"}}catch{}return{revision:"unversioned",revision_source:"unversioned"}}function trendForMetric(observations){const baseline=observations[0];const latest=observations[observations.length-1];const delta=latest.value-baseline.value;const improved=latest.direction==="higher"?delta>0:latest.direction==="lower"?delta<0:Math.abs(latest.value-latest.threshold)<Math.abs(baseline.value-baseline.threshold);return{metric:latest.metric,direction:latest.direction,baseline,latest,delta,improved,sample_count:observations.length}}async function recordImprovementObservation(options,global2={}){const pmRoot=resolvePmRoot(process.cwd(),global2.path);await assertInitializedTracker(pmRoot);const settings=await readSettings(pmRoot);const observation=await buildImprovementObservation(pmRoot,settings,options);const filePath=path.join(pmRoot,"improvement-ledger.json");const mutation=await mutateWorkspaceJsonWithHistory({pmRoot,filePath,op:"improvement_observe",author:observation.author,lockTtlSeconds:settings.locks.ttl_seconds,lockWaitMs:settings.locks.wait_ms,message:options.message??`Record ${observation.metric}=${String(options.value)} improvement observation`,mutate:beforeRaw=>{const ledger=parseLedger(beforeRaw);const existing=ensureObservationCanAppend(ledger,observation);if(existing){return{raw:beforeRaw,result:existing}}ledger.observations.push(observation);ledger.observations.sort((left,right)=>left.observed_at.localeCompare(right.observed_at)||left.metric.localeCompare(right.metric)||left.id.localeCompare(right.id));return{raw:`${stableStringify(ledger)}
|
|
2
|
+
`,result:observation}}});return{changed:mutation.changed,observation:mutation.result,ledger_path:"improvement-ledger.json"}}async function readImprovementLedger(options={}){const pmRoot=resolvePmRoot(options.cwd??process.cwd(),options.pmRoot);await assertInitializedTracker(pmRoot);const metric=options.metric===void 0?void 0:normalizeMetricName(options.metric);const since=options.since===void 0?void 0:parseIsoTimestamp(options.since,"since");const limit=parseObservationLimit(options.limit);const ledger=parseLedger(await readFileIfExists(path.join(pmRoot,"improvement-ledger.json")));const matching=ledger.observations.filter(row=>(metric===void 0||row.metric===metric)&&(options.itemId===void 0||row.item_id===options.itemId)&&(since===void 0||row.observed_at>=since));const byMetric=new Map;for(const observation of matching){const rows=byMetric.get(observation.metric)??[];rows.push(observation);byMetric.set(observation.metric,rows)}return{observations:[...matching].reverse().slice(0,limit),total:matching.length,truncated:matching.length>limit,trends:[...byMetric].map(([,observations])=>trendForMetric(observations)).sort((left,right)=>left.metric.localeCompare(right.metric)),source:"audited_workspace_singleton"}}const _testOnlyImprovementLedger={normalizeMetricName,normalizeDirection,parseLedger,parseObservationLimit,trendForMetric};export{_testOnlyImprovementLedger,readImprovementLedger,recordImprovementObservation};
|
|
257
3
|
//# sourceMappingURL=improvement-ledger.js.map
|
|
258
|
-
//# debugId=c2e1edc9-c454-5cfa-85c8-e9fb0a76a296
|
package/dist/sdk/index.d.ts
CHANGED
|
@@ -26,6 +26,7 @@ export { PM_REPRODUCIBLE_PROCESS_ENV, createReproducibleProcessRunner, resolveRe
|
|
|
26
26
|
export { PM_WORKSPACE_RECIPE_SCHEMA, defineWorkspaceRecipe, executeWorkspaceRecipe, runWithWorkspaceRecipe, type WorkspaceRecipe, type WorkspaceRecipeJsonValue, type WorkspaceRecipeOperation, } from "./workspace-recipe.js";
|
|
27
27
|
export { SNAPSHOT_SCHEMA, WORKSPACE_SNAPSHOT_ACTIONS, createWorkspaceSnapshot, deleteWorkspaceSnapshot, inspectWorkspaceSnapshot, listWorkspaceSnapshots, planWorkspaceSnapshotRestore, restoreWorkspaceSnapshot, restoreWorkspaceSnapshotWithRecovery, type CreateWorkspaceSnapshotResult, type RestoreWorkspaceSnapshotOptions, type RestoreWorkspaceSnapshotResult, type WorkspaceSnapshotHistoryImpact, type WorkspaceSnapshotManifest, type WorkspaceSnapshotReference, type WorkspaceSnapshotRestorePlan, } from "./workspace-snapshot.js";
|
|
28
28
|
export { flushTelemetryQueue } from "./telemetry-flush.js";
|
|
29
|
+
export { PM_HISTORY_COMMAND_ALIASES, resolvePmHistoryOperation } from "./cli-contracts.js";
|
|
29
30
|
export { EXECUTABLE_COMMAND_ALIASES, PM_COMMAND_ALIAS_CONTRACTS, renderPmCommandAliasMigrationHint, resolvePmCommandAlias, type PmCommandAliasContract, type PmCommandAliasLifecycle, type PmCommandAliasRegistration, applyBootstrapPagerPolicy, coalesceRepeatedListFlags, listAliasPluralKeys, mergeLinkedTestTwoTokenEntries, normalizeBootstrapInvocation, normalizeLegacyExtensionActionSyntax, parseBootstrapCommandName, parseBootstrapGlobalOptions, parseBootstrapHelpRequest, parseBootstrapTypeValue, stripGlobalBootstrapTokens, type BootstrapGlobalOptions, type BootstrapHelpRequest, type BootstrapInvocationNormalizationResult, type BootstrapNormalizationEvent, } from "./cli-bootstrap.js";
|
|
30
31
|
export { quoteCommandArg, quoteWindowsCommandArg, renderPmCommand, } from "./command-line.js";
|
|
31
32
|
export * from "./agent/command-recovery.js";
|
|
@@ -37,6 +38,7 @@ export { PM_EXACT_COVERAGE_METRICS, findCoverageDeficits, type PmCoverageDeficit
|
|
|
37
38
|
export { _testOnlyHealthCommand, runHealth, type HealthCheck, } from "./governance/health.js";
|
|
38
39
|
export { _testOnlyValidateCommand, projectValidateCounts, runValidate, type ValidateCheck, type ValidateCountsFixesSummary, type ValidateCountsResult, type ValidateFixesSummary, type ValidateMutationServices, } from "./governance/validate.js";
|
|
39
40
|
export { runExtension, type ExtensionCommandAction } from "./extension.js";
|
|
41
|
+
export { buildExtensionInstallPlan, planExtensionDirectoryCopy, type ExtensionCopyPlan, type ExtensionCopyPlanOptions, type ExtensionInstallPlan, } from "./extension/install-plan.js";
|
|
40
42
|
export { resolveExtensionInstallSourceIdentity, type ExtensionInstallSourceCandidate, type ExtensionInstallSourceResolution, type ExtensionInstallSourceSelection, type ResolvedExtensionInstallSource, } from "./extension/source-resolution.js";
|
|
41
43
|
export { applyStoredExtensionMigrationState, readExtensionMigrationState, resolveExtensionMigrationStatePath, runExtensionMigrateAction, runExtensionMigrations, type ExtensionMigrationActionContext, type ExtensionMigrationOutcomeStatus, type ExtensionMigrationReceipt, type ExtensionMigrationRunResult, type ExtensionMigrationState, type ExtensionMigrationStateEntry, type RunExtensionMigrationsOptions, } from "./extension/migrations.js";
|
|
42
44
|
export { findInstalledNpmPackageCandidate, type GithubInstallSource, type InstalledNpmPackageCandidate, type InstallSource, type LocalInstallSource, type NpmInstallSource, type ResolvedInstallSource, } from "./extension/install-sources.js";
|
|
@@ -103,6 +105,8 @@ export * from "./duplicates.js";
|
|
|
103
105
|
export * from "./lifecycle/reopen.js";
|
|
104
106
|
export * from "./history-compact.js";
|
|
105
107
|
export * from "./history-read.js";
|
|
108
|
+
export * from "./history/maintenance.js";
|
|
109
|
+
export { readHistorySnapshot, type HistoryStreamSnapshot } from "../core/history/read.js";
|
|
106
110
|
export * from "./history-provenance.js";
|
|
107
111
|
export * from "./mutation-events.js";
|
|
108
112
|
export { appendWorkspaceAuditEvent, appendWorkspaceHistoryChange, getWorkspaceHistoryPath, inspectWorkspaceHistoryState, mutateWorkspaceJsonWithHistory, reconcileWorkspaceJsonHistory, restoreWorkspaceJsonFromHistory, WORKSPACE_HISTORY_ID, writeWorkspaceJsonWithHistory, type WorkspaceAuditEventOptions, type WorkspaceHistoryChange, type WorkspaceHistoryStateAgreement, type WorkspaceJsonMutation, type WorkspaceJsonMutationOptions, type WorkspaceJsonReconciliationOptions, type WorkspaceJsonRestoreOptions, type WorkspaceJsonRestoreResult, type WorkspaceJsonWriteOptions, } from "../core/history/workspace-history.js";
|