@unbrained/pm-cli 2026.9.7 → 2026.9.9
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 +7 -2
- package/.agents/skills/pm-user/references/ECOSYSTEM_PLANNING.md +95 -0
- package/.claude-plugin/marketplace.json +2 -2
- package/CHANGELOG.md +231 -182
- 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.d.ts +0 -5
- 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-NPN5I67J.js → chunk-3IPRM75M.js} +3 -3
- package/dist/cli-bundle/chunks/chunk-4VL5P22L.js +2 -0
- package/dist/cli-bundle/chunks/chunk-AAFBV3U3.js +29 -0
- package/dist/cli-bundle/chunks/chunk-D3YVILJJ.js +20 -0
- package/dist/cli-bundle/chunks/{chunk-WYRZZ5ZE.js → chunk-DEZPZOQ7.js} +2 -2
- package/dist/cli-bundle/chunks/chunk-ECBLPN7B.js +3 -0
- package/dist/cli-bundle/chunks/chunk-J6ERHBV2.js +235 -0
- package/dist/cli-bundle/chunks/chunk-JUNJ5EKI.js +2 -0
- package/dist/cli-bundle/chunks/chunk-L5RCDKQ2.js +2 -0
- package/dist/cli-bundle/chunks/chunk-NSAPNEYH.js +2 -0
- package/dist/cli-bundle/chunks/chunk-OHNLSGGV.js +79 -0
- package/dist/cli-bundle/chunks/chunk-WQKMSFBV.js +5 -0
- package/dist/cli-bundle/chunks/{chunk-BAX2BYUW.js → chunk-XZ6T7YPP.js} +256 -150
- package/dist/cli-bundle/chunks/{chunk-JT6XF6GE.js → chunk-Z3XVXUVF.js} +4 -4
- package/dist/cli-bundle/chunks/register-list-query-UIHRCS6D.js +11 -0
- package/dist/cli-bundle/chunks/register-mutation-WHWMGRVX.js +20 -0
- package/dist/cli-bundle/chunks/register-operations-64YZYTC5.js +2 -0
- package/dist/cli-bundle/chunks/register-setup-PERI45EM.js +2 -0
- package/dist/cli-bundle/focused-chunks/chunk-2W4XIYOB.js +2 -0
- package/dist/cli-bundle/focused-chunks/chunk-2WSBXIGF.js +12 -0
- package/dist/cli-bundle/focused-chunks/chunk-5FHTCOHS.js +3 -0
- package/dist/cli-bundle/focused-chunks/chunk-7N6DOREF.js +26 -0
- package/dist/cli-bundle/focused-chunks/{chunk-3BZEOXLT.js → chunk-7PC4R5QB.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-BUCJUZVG.js +6 -0
- package/dist/cli-bundle/focused-chunks/chunk-FE3BABLJ.js +2 -0
- package/dist/cli-bundle/focused-chunks/chunk-IWITF53W.js +2 -0
- package/dist/cli-bundle/focused-chunks/chunk-OQUGRHKV.js +10 -0
- package/dist/cli-bundle/focused-chunks/{chunk-M6PBRFSH.js → chunk-PNKIANFZ.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-LIJIA4TY.js → chunk-QQQ4SAUO.js} +3 -3
- package/dist/cli-bundle/focused-chunks/chunk-TTYXF5YD.js +177 -0
- package/dist/cli-bundle/focused-chunks/chunk-XNR3DM6J.js +2 -0
- package/dist/cli-bundle/focused-chunks/chunk-XSS3APUF.js +9 -0
- package/dist/cli-bundle/focused-chunks/chunk-YCDQ2N23.js +8 -0
- package/dist/cli-bundle/focused-chunks/chunk-YJUXGS57.js +20 -0
- package/dist/cli-bundle/focused-chunks/chunk-ZTCE4UO6.js +58 -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 +37 -37
- 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/policy/workflow-policy-schema.d.ts +312 -0
- package/dist/core/policy/workflow-policy-schema.js +2 -0
- package/dist/core/policy/workflow-policy-store.d.ts +24 -0
- package/dist/core/policy/workflow-policy-store.js +2 -0
- package/dist/core/policy/workflow-policy.d.ts +139 -0
- package/dist/core/policy/workflow-policy.js +2 -0
- 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.d.ts +1 -0
- 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.d.ts +1 -1
- 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 +174 -839
- 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.d.ts +3 -1
- package/dist/sdk/governance/validate.js +1 -2261
- package/dist/sdk/governance/workflow-completeness.d.ts +32 -0
- package/dist/sdk/governance/workflow-completeness.js +2 -0
- package/dist/sdk/governance/workflow-policy.d.ts +47 -0
- package/dist/sdk/governance/workflow-policy.js +4 -0
- package/dist/sdk/governance/workspace-position.js +1 -163
- package/dist/sdk/governance.d.ts +2 -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 -1
- 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.d.ts +1 -1
- 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.d.ts +27 -0
- 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.d.ts +6 -4
- 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.d.ts +1 -1
- 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.d.ts +2 -1
- package/dist/sdk/runtime-public-contracts.js +1 -4
- package/dist/sdk/runtime-stats-options.js +1 -38
- package/dist/sdk/runtime.d.ts +4 -0
- 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.d.ts +2 -1
- 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.d.ts +4 -0
- package/dist/types.js +1 -245
- package/docs/AGENT_GUIDE.md +1 -1
- package/docs/COMMANDS.md +10 -0
- package/docs/CONFIGURATION.md +12 -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 +4 -0
- package/docs/READ_OUTPUT_CONTRACTS.md +5 -0
- package/docs/SCRIPTING.md +21 -0
- package/docs/TESTING.md +33 -0
- package/docs/WORKFLOW_POLICIES.md +129 -0
- package/docs/generated/FLAG_LEXICON_BUDGETS.md +7 -7
- package/docs/generated/REFUSAL_CLOSURE_CENSUS.md +11 -5
- package/marketplace.json +2 -2
- package/package.json +5 -5
- 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-CKOL5U7J.js +0 -77
- package/dist/cli-bundle/chunks/chunk-JX4DH4WC.js +0 -3
- 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-operations-I5W3KMGB.js +0 -2
- 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-PEFABF7E.js +0 -26
- 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,469 +1,2 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @module sdk/author-attribution
|
|
3
|
-
*
|
|
4
|
-
* Provides reusable diagnostics for mutation-author provenance in tracker history.
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
!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]="b389e521-f689-5895-a5f4-08c3866b3ea3")}catch(e){}}();
|
|
8
|
-
import { createHash } from "node:crypto";
|
|
9
|
-
import fs from "node:fs/promises";
|
|
10
|
-
import path from "node:path";
|
|
11
|
-
import { appendWorkspaceAuditEvent, WORKSPACE_HISTORY_ID, } from "../core/history/workspace-history.js";
|
|
12
|
-
import { readSettings } from "../core/store/settings.js";
|
|
13
|
-
import { EXIT_CODE } from "../core/shared/constants.js";
|
|
14
|
-
import { PmCliError } from "../core/shared/errors.js";
|
|
15
|
-
import { readRuntimeString, readRuntimeStringArray } from "./runtime-input.js";
|
|
16
|
-
/**
|
|
17
|
-
* Refuse an acknowledgment argument as a classified usage error.
|
|
18
|
-
*
|
|
19
|
-
* Argument validation is an expected outcome of a public mutation surface, not a
|
|
20
|
-
* product failure. Raising a bare `TypeError` left the refusal at exit code 1,
|
|
21
|
-
* which the CLI observability boundary reports as an unclassified handled error
|
|
22
|
-
* and the release gate then reads as a blocking production issue. Carrying
|
|
23
|
-
* {@link EXIT_CODE.USAGE} plus a stable code keeps the refusal teachable and
|
|
24
|
-
* keeps expected validation out of the error channel without masking genuine
|
|
25
|
-
* failures, which retain their own exit codes.
|
|
26
|
-
*/
|
|
27
|
-
function refuseAuthorAcknowledgmentArgument(message, context) {
|
|
28
|
-
throw new PmCliError(message, EXIT_CODE.USAGE, context);
|
|
29
|
-
}
|
|
30
|
-
/** First release-governance anchor after which unknown authors require remediation. */
|
|
31
|
-
export const HISTORY_AUTHOR_ATTRIBUTION_BASELINE = "2026-07-15T06:22:12.276Z";
|
|
32
|
-
/** Parsed epoch for the immutable attribution baseline used by every stream scan. */
|
|
33
|
-
const HISTORY_AUTHOR_ATTRIBUTION_BASELINE_MS = Date.parse(HISTORY_AUTHOR_ATTRIBUTION_BASELINE);
|
|
34
|
-
/** Attribution policy indexed by unknown-author and post-baseline flags. */
|
|
35
|
-
const HISTORY_AUTHOR_EVENT_CLASSIFICATIONS = [
|
|
36
|
-
["attributed", "attributed"],
|
|
37
|
-
["legacy_unknown", "actionable_unknown"],
|
|
38
|
-
];
|
|
39
|
-
/** Return history string fields unchanged while normalizing other values to empty text. */
|
|
40
|
-
const historyStringValue = (value) => typeof value === "string" ? value : "";
|
|
41
|
-
/** Classifies one parsed history event by author provenance and baseline age. */
|
|
42
|
-
export const classifyHistoryAuthorEvent = (parsed) => {
|
|
43
|
-
const record = (parsed ?? {});
|
|
44
|
-
const author = historyStringValue(record.author).trim().toLowerCase();
|
|
45
|
-
const authorClass = Number(["", "unknown"].includes(author));
|
|
46
|
-
const timestampClass = Number(Date.parse(historyStringValue(record.ts)) >=
|
|
47
|
-
HISTORY_AUTHOR_ATTRIBUTION_BASELINE_MS);
|
|
48
|
-
return HISTORY_AUTHOR_EVENT_CLASSIFICATIONS[authorClass][timestampClass];
|
|
49
|
-
};
|
|
50
|
-
function inspectHistoryAuthorStreamWithActionableEvents(itemId, raw, sampleLimit = 20, acknowledgedEvents = new Set(), includeActionableEvents = false) {
|
|
51
|
-
const samples = [];
|
|
52
|
-
const actionableEvents = [];
|
|
53
|
-
const unknownCounts = {
|
|
54
|
-
legacy_unknown: 0,
|
|
55
|
-
actionable_unknown: 0,
|
|
56
|
-
};
|
|
57
|
-
const boundedSampleLimit = Math.max(0, sampleLimit);
|
|
58
|
-
let checkedEvents = 0;
|
|
59
|
-
let unknownEvents = 0;
|
|
60
|
-
let acknowledgedActionableEvents = 0;
|
|
61
|
-
for (const [index, line] of raw.split(/\r?\n/).entries()) {
|
|
62
|
-
let parsed;
|
|
63
|
-
try {
|
|
64
|
-
parsed = JSON.parse(line);
|
|
65
|
-
}
|
|
66
|
-
catch {
|
|
67
|
-
continue;
|
|
68
|
-
}
|
|
69
|
-
checkedEvents += 1;
|
|
70
|
-
const classification = classifyHistoryAuthorEvent(parsed);
|
|
71
|
-
if (classification === "attributed") {
|
|
72
|
-
continue;
|
|
73
|
-
}
|
|
74
|
-
unknownEvents += 1;
|
|
75
|
-
if (classification === "actionable_unknown" &&
|
|
76
|
-
acknowledgedEvents.has(`${itemId}:${index + 1}`)) {
|
|
77
|
-
acknowledgedActionableEvents += 1;
|
|
78
|
-
continue;
|
|
79
|
-
}
|
|
80
|
-
unknownCounts[classification] += 1;
|
|
81
|
-
if (includeActionableEvents && classification === "actionable_unknown") {
|
|
82
|
-
actionableEvents.push({ item_id: itemId, line: index + 1 });
|
|
83
|
-
}
|
|
84
|
-
if (samples.length < boundedSampleLimit) {
|
|
85
|
-
samples.push({ item_id: itemId, line: index + 1 });
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
return {
|
|
89
|
-
checked_events: checkedEvents,
|
|
90
|
-
unknown_event_count: unknownEvents,
|
|
91
|
-
legacy_unknown_event_count: unknownCounts.legacy_unknown,
|
|
92
|
-
actionable_unknown_event_count: unknownCounts.actionable_unknown,
|
|
93
|
-
acknowledged_actionable_event_count: acknowledgedActionableEvents,
|
|
94
|
-
samples,
|
|
95
|
-
samples_truncated: unknownCounts.legacy_unknown + unknownCounts.actionable_unknown >
|
|
96
|
-
samples.length,
|
|
97
|
-
actionable_events: actionableEvents,
|
|
98
|
-
};
|
|
99
|
-
}
|
|
100
|
-
/** Inspect one readable JSONL stream without performing filesystem I/O. */
|
|
101
|
-
export const inspectHistoryAuthorStream = (itemId, raw, sampleLimit = 20, acknowledgedEvents = new Set()) => inspectHistoryAuthorStreamWithActionableEvents(itemId, raw, sampleLimit, acknowledgedEvents);
|
|
102
|
-
function collectAcknowledgedUnknownEvents(raw) {
|
|
103
|
-
const acknowledged = new Set();
|
|
104
|
-
for (const line of raw.split(/\r?\n/)) {
|
|
105
|
-
let parsed;
|
|
106
|
-
try {
|
|
107
|
-
parsed = JSON.parse(line);
|
|
108
|
-
}
|
|
109
|
-
catch {
|
|
110
|
-
continue;
|
|
111
|
-
}
|
|
112
|
-
const context = typeof parsed === "object" &&
|
|
113
|
-
parsed !== null &&
|
|
114
|
-
typeof parsed.context === "object" &&
|
|
115
|
-
parsed.context !== null
|
|
116
|
-
? parsed.context
|
|
117
|
-
: {};
|
|
118
|
-
const acknowledgment = context.author_acknowledgment;
|
|
119
|
-
if (typeof acknowledgment !== "object" ||
|
|
120
|
-
acknowledgment === null ||
|
|
121
|
-
!Array.isArray(acknowledgment.events)) {
|
|
122
|
-
continue;
|
|
123
|
-
}
|
|
124
|
-
for (const event of acknowledgment.events) {
|
|
125
|
-
if (typeof event === "object" &&
|
|
126
|
-
event !== null &&
|
|
127
|
-
typeof event.item_id === "string" &&
|
|
128
|
-
Number.isSafeInteger(event.line)) {
|
|
129
|
-
acknowledged.add(`${event.item_id}:${String(event.line)}`);
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
return acknowledged;
|
|
134
|
-
}
|
|
135
|
-
/**
|
|
136
|
-
* Scan append-only tracker history for missing or `unknown` author values.
|
|
137
|
-
* Malformed and unreadable streams are deliberately left to integrity diagnostics.
|
|
138
|
-
*/
|
|
139
|
-
export const scanHistoryAuthorAttribution = async (pmRoot, sampleLimit = 20, includeActionableEvents = false) => {
|
|
140
|
-
const historyDirectory = path.join(pmRoot, "history");
|
|
141
|
-
let fileNames;
|
|
142
|
-
try {
|
|
143
|
-
fileNames = (await fs.readdir(historyDirectory))
|
|
144
|
-
.filter((fileName) => fileName.endsWith(".jsonl"))
|
|
145
|
-
.sort((left, right) => left.localeCompare(right));
|
|
146
|
-
}
|
|
147
|
-
catch {
|
|
148
|
-
fileNames = [];
|
|
149
|
-
}
|
|
150
|
-
const affectedItemIds = new Set();
|
|
151
|
-
const samples = [];
|
|
152
|
-
const actionableEvents = [];
|
|
153
|
-
let checkedStreams = 0;
|
|
154
|
-
let checkedEvents = 0;
|
|
155
|
-
let unknownEventCount = 0;
|
|
156
|
-
let legacyUnknownEventCount = 0;
|
|
157
|
-
let actionableUnknownEventCount = 0;
|
|
158
|
-
let acknowledgedActionableEventCount = 0;
|
|
159
|
-
const workspaceFileName = "_workspace.jsonl";
|
|
160
|
-
let acknowledgedEvents = new Set();
|
|
161
|
-
if (fileNames.includes(workspaceFileName)) {
|
|
162
|
-
try {
|
|
163
|
-
acknowledgedEvents = collectAcknowledgedUnknownEvents(await fs.readFile(path.join(historyDirectory, workspaceFileName), "utf8"));
|
|
164
|
-
}
|
|
165
|
-
catch {
|
|
166
|
-
acknowledgedEvents = new Set();
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
for (const fileName of fileNames) {
|
|
170
|
-
let raw;
|
|
171
|
-
try {
|
|
172
|
-
raw = await fs.readFile(path.join(historyDirectory, fileName), "utf8");
|
|
173
|
-
}
|
|
174
|
-
catch {
|
|
175
|
-
continue;
|
|
176
|
-
}
|
|
177
|
-
const itemId = fileName.slice(0, -".jsonl".length);
|
|
178
|
-
const inspected = inspectHistoryAuthorStreamWithActionableEvents(itemId, raw, sampleLimit - samples.length, acknowledgedEvents, includeActionableEvents);
|
|
179
|
-
checkedStreams += 1;
|
|
180
|
-
checkedEvents += inspected.checked_events;
|
|
181
|
-
unknownEventCount += inspected.unknown_event_count;
|
|
182
|
-
legacyUnknownEventCount += inspected.legacy_unknown_event_count;
|
|
183
|
-
actionableUnknownEventCount += inspected.actionable_unknown_event_count;
|
|
184
|
-
acknowledgedActionableEventCount +=
|
|
185
|
-
inspected.acknowledged_actionable_event_count;
|
|
186
|
-
if (inspected.unknown_event_count > 0) {
|
|
187
|
-
affectedItemIds.add(itemId);
|
|
188
|
-
}
|
|
189
|
-
samples.push(...inspected.samples);
|
|
190
|
-
if (includeActionableEvents) {
|
|
191
|
-
actionableEvents.push(...inspected.actionable_events);
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
const undispositionedUnknownEventCount = legacyUnknownEventCount + actionableUnknownEventCount;
|
|
195
|
-
return {
|
|
196
|
-
checked_streams: checkedStreams,
|
|
197
|
-
checked_events: checkedEvents,
|
|
198
|
-
unknown_event_count: unknownEventCount,
|
|
199
|
-
legacy_unknown_event_count: legacyUnknownEventCount,
|
|
200
|
-
actionable_unknown_event_count: actionableUnknownEventCount,
|
|
201
|
-
acknowledged_actionable_event_count: acknowledgedActionableEventCount,
|
|
202
|
-
affected_item_ids: [...affectedItemIds].sort((left, right) => left.localeCompare(right)),
|
|
203
|
-
samples,
|
|
204
|
-
samples_truncated: undispositionedUnknownEventCount > samples.length,
|
|
205
|
-
...(includeActionableEvents ? { actionable_events: actionableEvents } : {}),
|
|
206
|
-
};
|
|
207
|
-
};
|
|
208
|
-
/** Deduplicate and deterministically order history coordinates. */
|
|
209
|
-
function normalizeUnknownAuthorHistoryEvents(events) {
|
|
210
|
-
return [
|
|
211
|
-
...new Map(events.map((event) => [
|
|
212
|
-
`${event.item_id}:${event.line}`,
|
|
213
|
-
{ item_id: event.item_id, line: event.line },
|
|
214
|
-
])).values(),
|
|
215
|
-
].sort((left, right) => left.item_id.localeCompare(right.item_id) || left.line - right.line);
|
|
216
|
-
}
|
|
217
|
-
/** Read the append-only set of previously dispositioned coordinates. */
|
|
218
|
-
async function readAcknowledgedUnknownEvents(pmRoot) {
|
|
219
|
-
try {
|
|
220
|
-
return collectAcknowledgedUnknownEvents(await fs.readFile(path.join(pmRoot, "history", "_workspace.jsonl"), "utf8"));
|
|
221
|
-
}
|
|
222
|
-
catch {
|
|
223
|
-
return new Set();
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
/** Check whether a coordinate can safely name one immutable history line. */
|
|
227
|
-
function isValidUnknownAuthorHistoryEvent(event) {
|
|
228
|
-
return ((event.item_id === WORKSPACE_HISTORY_ID ||
|
|
229
|
-
/^[a-z0-9][a-z0-9-]*$/iu.test(event.item_id)) &&
|
|
230
|
-
Number.isSafeInteger(event.line) &&
|
|
231
|
-
event.line >= 1);
|
|
232
|
-
}
|
|
233
|
-
/** Resolve one coordinate against its preloaded immutable source stream. */
|
|
234
|
-
function resolveAcknowledgmentPlanCoordinate(event, acknowledgedEvents, sourceLines) {
|
|
235
|
-
const sourceLine = sourceLines[event.line - 1] ?? "";
|
|
236
|
-
let parsed;
|
|
237
|
-
try {
|
|
238
|
-
parsed = JSON.parse(sourceLine);
|
|
239
|
-
}
|
|
240
|
-
catch {
|
|
241
|
-
refuseAuthorAcknowledgmentArgument(`Unknown-author acknowledgment target ${event.item_id}:${event.line} is not readable.`, { code: "history_author_acknowledge_target_unreadable" });
|
|
242
|
-
}
|
|
243
|
-
if (classifyHistoryAuthorEvent(parsed) !== "actionable_unknown") {
|
|
244
|
-
refuseAuthorAcknowledgmentArgument(`Author acknowledgment target ${event.item_id}:${event.line} is not an actionable unknown-author event.`, { code: "history_author_acknowledge_target_not_actionable" });
|
|
245
|
-
}
|
|
246
|
-
return {
|
|
247
|
-
...event,
|
|
248
|
-
source_event_hash: createHash("sha256").update(sourceLine).digest("hex"),
|
|
249
|
-
disposition: acknowledgedEvents.has(`${event.item_id}:${event.line}`)
|
|
250
|
-
? "already_acknowledged"
|
|
251
|
-
: "actionable",
|
|
252
|
-
};
|
|
253
|
-
}
|
|
254
|
-
async function resolveUnknownAuthorAcknowledgmentPlan(pmRoot, selector, coordinateLimit) {
|
|
255
|
-
const explicitEvents = selector.events ?? [];
|
|
256
|
-
const selectorCount = Number(selector.all_actionable === true) +
|
|
257
|
-
Number(explicitEvents.length > 0);
|
|
258
|
-
if (selectorCount === 0) {
|
|
259
|
-
refuseAuthorAcknowledgmentArgument("Specify exactly one selector: events or all_actionable.", { code: "history_author_acknowledge_selector_required" });
|
|
260
|
-
}
|
|
261
|
-
if (selectorCount > 1) {
|
|
262
|
-
refuseAuthorAcknowledgmentArgument("Author acknowledgment accepts either explicit events or all_actionable, not both.", { code: "history_author_acknowledge_selector_conflict" });
|
|
263
|
-
}
|
|
264
|
-
if (!Number.isSafeInteger(coordinateLimit) || coordinateLimit < 0) {
|
|
265
|
-
refuseAuthorAcknowledgmentArgument("Author acknowledgment coordinate_limit must be a non-negative integer.", { code: "history_author_acknowledge_preview_limit_invalid" });
|
|
266
|
-
}
|
|
267
|
-
const selectedEvents = normalizeUnknownAuthorHistoryEvents(selector.all_actionable === true
|
|
268
|
-
? (await scanHistoryAuthorAttribution(pmRoot, 0, true))
|
|
269
|
-
.actionable_events
|
|
270
|
-
: explicitEvents);
|
|
271
|
-
const acknowledgedEvents = await readAcknowledgedUnknownEvents(pmRoot);
|
|
272
|
-
const sourceLinesByItem = new Map();
|
|
273
|
-
for (const event of selectedEvents) {
|
|
274
|
-
if (!isValidUnknownAuthorHistoryEvent(event)) {
|
|
275
|
-
refuseAuthorAcknowledgmentArgument(`Unknown-author acknowledgment target ${event.item_id}:${event.line} is not readable.`, { code: "history_author_acknowledge_target_unreadable" });
|
|
276
|
-
}
|
|
277
|
-
if (sourceLinesByItem.has(event.item_id))
|
|
278
|
-
continue;
|
|
279
|
-
try {
|
|
280
|
-
sourceLinesByItem.set(event.item_id, (await fs.readFile(path.join(pmRoot, "history", `${event.item_id}.jsonl`), "utf8")).split(/\r?\n/u));
|
|
281
|
-
}
|
|
282
|
-
catch {
|
|
283
|
-
refuseAuthorAcknowledgmentArgument(`Unknown-author acknowledgment target ${event.item_id}:${event.line} is not readable.`, { code: "history_author_acknowledge_target_unreadable" });
|
|
284
|
-
}
|
|
285
|
-
}
|
|
286
|
-
const completeCoordinates = selectedEvents.map((event) => resolveAcknowledgmentPlanCoordinate(event, acknowledgedEvents, sourceLinesByItem.get(event.item_id)));
|
|
287
|
-
const kind = selector.all_actionable === true ? "all_actionable" : "events";
|
|
288
|
-
const planFingerprint = createHash("sha256")
|
|
289
|
-
.update(JSON.stringify({
|
|
290
|
-
version: 1,
|
|
291
|
-
selection: kind,
|
|
292
|
-
coordinates: completeCoordinates,
|
|
293
|
-
}))
|
|
294
|
-
.digest("hex");
|
|
295
|
-
const actionableCount = completeCoordinates.filter(({ disposition }) => disposition === "actionable").length;
|
|
296
|
-
return {
|
|
297
|
-
plan: {
|
|
298
|
-
selection: { kind },
|
|
299
|
-
selected_count: completeCoordinates.length,
|
|
300
|
-
actionable_count: actionableCount,
|
|
301
|
-
already_acknowledged_count: completeCoordinates.length - actionableCount,
|
|
302
|
-
omitted_count: Math.max(0, completeCoordinates.length - coordinateLimit),
|
|
303
|
-
coordinates: completeCoordinates.slice(0, coordinateLimit),
|
|
304
|
-
plan_fingerprint: planFingerprint,
|
|
305
|
-
},
|
|
306
|
-
completeCoordinates,
|
|
307
|
-
};
|
|
308
|
-
}
|
|
309
|
-
/** Resolve a deterministic, source-bound author-acknowledgement preview. */
|
|
310
|
-
export async function planUnknownAuthorHistoryAcknowledgment(pmRoot, selector, coordinateLimit = 50) {
|
|
311
|
-
return (await resolveUnknownAuthorAcknowledgmentPlan(pmRoot, selector, coordinateLimit)).plan;
|
|
312
|
-
}
|
|
313
|
-
/** Resolve the mutually exclusive CLI and SDK acknowledgment selectors. */
|
|
314
|
-
export function resolveUnknownAuthorAcknowledgmentSelector(rawEvents, allActionable) {
|
|
315
|
-
const hasExplicitEvents = rawEvents.length > 0;
|
|
316
|
-
if (hasExplicitEvents && allActionable) {
|
|
317
|
-
refuseAuthorAcknowledgmentArgument("Specify exactly one selector: repeat --event or pass --all-actionable.", {
|
|
318
|
-
code: "history_author_acknowledge_selector_conflict",
|
|
319
|
-
required: "Exactly one of --event or --all-actionable",
|
|
320
|
-
examples: [
|
|
321
|
-
'pm history-author-acknowledge --event pm-a1b2:4 --attributed-author agent --reviewer maintainer --reason "Verified provenance"',
|
|
322
|
-
'pm history-author-acknowledge --all-actionable --attributed-author import-agent --reviewer maintainer --reason "Reviewed the complete actionable set"',
|
|
323
|
-
],
|
|
324
|
-
});
|
|
325
|
-
}
|
|
326
|
-
if (!hasExplicitEvents && !allActionable) {
|
|
327
|
-
refuseAuthorAcknowledgmentArgument("Specify exactly one selector: repeat --event or pass --all-actionable.", {
|
|
328
|
-
code: "history_author_acknowledge_selector_required",
|
|
329
|
-
required: "Exactly one of --event or --all-actionable",
|
|
330
|
-
examples: [
|
|
331
|
-
'pm history-author-acknowledge --event pm-a1b2:4 --attributed-author agent --reviewer maintainer --reason "Verified provenance"',
|
|
332
|
-
'pm history-author-acknowledge --all-actionable --attributed-author import-agent --reviewer maintainer --reason "Reviewed the complete actionable set"',
|
|
333
|
-
],
|
|
334
|
-
});
|
|
335
|
-
}
|
|
336
|
-
return {
|
|
337
|
-
events: parseUnknownAuthorHistoryEventCoordinates(rawEvents),
|
|
338
|
-
all_actionable: allActionable,
|
|
339
|
-
};
|
|
340
|
-
}
|
|
341
|
-
/** Parse user-facing item or workspace history coordinates into SDK events. */
|
|
342
|
-
export function parseUnknownAuthorHistoryEventCoordinates(values) {
|
|
343
|
-
return values.map((value) => {
|
|
344
|
-
const separator = value.lastIndexOf(":");
|
|
345
|
-
const itemId = value.slice(0, separator).trim();
|
|
346
|
-
const line = Number(value.slice(separator + 1));
|
|
347
|
-
const validItemId = itemId === WORKSPACE_HISTORY_ID || /^[a-z0-9][a-z0-9-]*$/iu.test(itemId);
|
|
348
|
-
if (separator < 1 ||
|
|
349
|
-
!validItemId ||
|
|
350
|
-
!Number.isSafeInteger(line) ||
|
|
351
|
-
line < 1) {
|
|
352
|
-
refuseAuthorAcknowledgmentArgument(`history-author-acknowledge --event expects <item-id>:<one-based-line>, received "${value}".`, { code: "history_author_acknowledge_target_unreadable" });
|
|
353
|
-
}
|
|
354
|
-
return { item_id: itemId, line };
|
|
355
|
-
});
|
|
356
|
-
}
|
|
357
|
-
/** Normalize an untyped transport payload and execute author acknowledgment. */
|
|
358
|
-
export function acknowledgeUnknownAuthorHistoryEventsFromTransport(pmRoot, input) {
|
|
359
|
-
const selector = resolveUnknownAuthorAcknowledgmentSelector(readRuntimeStringArray(input.historyEvent), input.allActionable === true || input.all_actionable === true);
|
|
360
|
-
return acknowledgeUnknownAuthorHistoryEvents(pmRoot, {
|
|
361
|
-
events: selector.events,
|
|
362
|
-
all_actionable: selector.all_actionable,
|
|
363
|
-
dry_run: input.dryRun === true || input.dry_run === true,
|
|
364
|
-
plan_fingerprint: readRuntimeString(input, "planFingerprint") ??
|
|
365
|
-
readRuntimeString(input, "plan_fingerprint"),
|
|
366
|
-
coordinate_limit: typeof input.limit === "number"
|
|
367
|
-
? input.limit
|
|
368
|
-
: typeof input.limit === "string"
|
|
369
|
-
? Number(input.limit)
|
|
370
|
-
: undefined,
|
|
371
|
-
attributed_author: readRuntimeString(input, "attributedAuthor") ??
|
|
372
|
-
readRuntimeString(input, "attributed_author") ??
|
|
373
|
-
undefined,
|
|
374
|
-
reviewer: readRuntimeString(input, "reviewer"),
|
|
375
|
-
reason: readRuntimeString(input, "reason"),
|
|
376
|
-
});
|
|
377
|
-
}
|
|
378
|
-
/**
|
|
379
|
-
* Append an audited disposition for immutable unknown-author events without
|
|
380
|
-
* rewriting their original streams.
|
|
381
|
-
*/
|
|
382
|
-
export async function acknowledgeUnknownAuthorHistoryEvents(pmRoot, options) {
|
|
383
|
-
const reviewer = options.reviewer?.trim() ?? "";
|
|
384
|
-
const attributedAuthor = options.attributed_author?.trim() ?? "";
|
|
385
|
-
const reason = options.reason?.trim() ?? "";
|
|
386
|
-
const resolved = await resolveUnknownAuthorAcknowledgmentPlan(pmRoot, options, options.coordinate_limit ?? 50);
|
|
387
|
-
if (options.dry_run === true) {
|
|
388
|
-
return {
|
|
389
|
-
dry_run: true,
|
|
390
|
-
mutated: false,
|
|
391
|
-
acknowledged: 0,
|
|
392
|
-
outcome: "preview",
|
|
393
|
-
exit_code: EXIT_CODE.SUCCESS,
|
|
394
|
-
plan: resolved.plan,
|
|
395
|
-
};
|
|
396
|
-
}
|
|
397
|
-
const requiredValuesMissing = [
|
|
398
|
-
reviewer.length > 0,
|
|
399
|
-
reviewer.toLowerCase() !== "unknown",
|
|
400
|
-
attributedAuthor.length > 0,
|
|
401
|
-
attributedAuthor.toLowerCase() !== "unknown",
|
|
402
|
-
reason.length > 0,
|
|
403
|
-
].includes(false);
|
|
404
|
-
if (requiredValuesMissing) {
|
|
405
|
-
refuseAuthorAcknowledgmentArgument("Author acknowledgment requires events, reviewer, attributed_author, and reason.", { code: "history_author_acknowledge_required_values_missing" });
|
|
406
|
-
}
|
|
407
|
-
if (!options.plan_fingerprint?.trim()) {
|
|
408
|
-
refuseAuthorAcknowledgmentArgument("Author acknowledgment apply requires plan_fingerprint from a fresh dry-run preview.", {
|
|
409
|
-
code: "history_author_acknowledge_plan_fingerprint_required",
|
|
410
|
-
recovery: {
|
|
411
|
-
suggested_retry: "Rerun history-author-acknowledge with --dry-run, then pass --plan-fingerprint <value>.",
|
|
412
|
-
},
|
|
413
|
-
});
|
|
414
|
-
}
|
|
415
|
-
if (options.plan_fingerprint.trim() !== resolved.plan.plan_fingerprint) {
|
|
416
|
-
throw new PmCliError("Author acknowledgment selection changed after preview; no history was mutated.", EXIT_CODE.CONFLICT, {
|
|
417
|
-
code: "history_author_acknowledge_plan_conflict",
|
|
418
|
-
recovery: {
|
|
419
|
-
suggested_retry: "Rerun history-author-acknowledge with --dry-run and apply the fresh plan_fingerprint.",
|
|
420
|
-
},
|
|
421
|
-
});
|
|
422
|
-
}
|
|
423
|
-
const eventsToAcknowledge = resolved.completeCoordinates
|
|
424
|
-
.filter(({ disposition }) => resolved.plan.selection.kind === "events" ||
|
|
425
|
-
disposition === "actionable")
|
|
426
|
-
.map(({ item_id, line }) => ({ item_id, line }));
|
|
427
|
-
if (eventsToAcknowledge.length === 0) {
|
|
428
|
-
return {
|
|
429
|
-
dry_run: false,
|
|
430
|
-
mutated: false,
|
|
431
|
-
acknowledged: 0,
|
|
432
|
-
outcome: "no_effect",
|
|
433
|
-
exit_code: EXIT_CODE.NO_EFFECT,
|
|
434
|
-
plan: resolved.plan,
|
|
435
|
-
};
|
|
436
|
-
}
|
|
437
|
-
const settings = await readSettings(pmRoot);
|
|
438
|
-
const appended = await appendWorkspaceAuditEvent({
|
|
439
|
-
pmRoot,
|
|
440
|
-
op: "history:author-acknowledge",
|
|
441
|
-
author: reviewer,
|
|
442
|
-
context: {
|
|
443
|
-
author_acknowledgment: {
|
|
444
|
-
events: eventsToAcknowledge,
|
|
445
|
-
attributed_author: attributedAuthor,
|
|
446
|
-
},
|
|
447
|
-
},
|
|
448
|
-
message: reason,
|
|
449
|
-
lockTtlSeconds: settings.locks.ttl_seconds,
|
|
450
|
-
lockWaitMs: settings.locks.wait_ms,
|
|
451
|
-
});
|
|
452
|
-
const effectResult = resolved.plan.actionable_count > 0 &&
|
|
453
|
-
resolved.plan.already_acknowledged_count > 0
|
|
454
|
-
? {
|
|
455
|
-
outcome: "partial_effect",
|
|
456
|
-
exit_code: EXIT_CODE.PARTIAL_EFFECT,
|
|
457
|
-
}
|
|
458
|
-
: { outcome: "effect", exit_code: EXIT_CODE.SUCCESS };
|
|
459
|
-
return {
|
|
460
|
-
dry_run: false,
|
|
461
|
-
mutated: true,
|
|
462
|
-
acknowledged: eventsToAcknowledge.length,
|
|
463
|
-
...effectResult,
|
|
464
|
-
plan: resolved.plan,
|
|
465
|
-
history_path: appended.historyPath,
|
|
466
|
-
};
|
|
467
|
-
}
|
|
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]="fd8c4c35-98bb-5f3b-927d-8696125af703")}catch(e2){}})();import{createHash}from"node:crypto";import fs from"node:fs/promises";import path from"node:path";import{appendWorkspaceAuditEvent,WORKSPACE_HISTORY_ID}from"../core/history/workspace-history.js";import{readSettings}from"../core/store/settings.js";import{EXIT_CODE}from"../core/shared/constants.js";import{PmCliError}from"../core/shared/errors.js";import{readRuntimeString,readRuntimeStringArray}from"./runtime-input.js";function refuseAuthorAcknowledgmentArgument(message,context){throw new PmCliError(message,EXIT_CODE.USAGE,context)}const HISTORY_AUTHOR_ATTRIBUTION_BASELINE="2026-07-15T06:22:12.276Z";const HISTORY_AUTHOR_ATTRIBUTION_BASELINE_MS=Date.parse(HISTORY_AUTHOR_ATTRIBUTION_BASELINE);const HISTORY_AUTHOR_EVENT_CLASSIFICATIONS=[["attributed","attributed"],["legacy_unknown","actionable_unknown"]];const historyStringValue=value=>typeof value==="string"?value:"";const classifyHistoryAuthorEvent=parsed=>{const record=parsed??{};const author=historyStringValue(record.author).trim().toLowerCase();const authorClass=Number(["","unknown"].includes(author));const timestampClass=Number(Date.parse(historyStringValue(record.ts))>=HISTORY_AUTHOR_ATTRIBUTION_BASELINE_MS);return HISTORY_AUTHOR_EVENT_CLASSIFICATIONS[authorClass][timestampClass]};function inspectHistoryAuthorStreamWithActionableEvents(itemId,raw,sampleLimit=20,acknowledgedEvents=new Set,includeActionableEvents=false){const samples=[];const actionableEvents=[];const unknownCounts={legacy_unknown:0,actionable_unknown:0};const boundedSampleLimit=Math.max(0,sampleLimit);let checkedEvents=0;let unknownEvents=0;let acknowledgedActionableEvents=0;for(const[index,line]of raw.split(/\r?\n/).entries()){let parsed;try{parsed=JSON.parse(line)}catch{continue}checkedEvents+=1;const classification=classifyHistoryAuthorEvent(parsed);if(classification==="attributed"){continue}unknownEvents+=1;if(classification==="actionable_unknown"&&acknowledgedEvents.has(`${itemId}:${index+1}`)){acknowledgedActionableEvents+=1;continue}unknownCounts[classification]+=1;if(includeActionableEvents&&classification==="actionable_unknown"){actionableEvents.push({item_id:itemId,line:index+1})}if(samples.length<boundedSampleLimit){samples.push({item_id:itemId,line:index+1})}}return{checked_events:checkedEvents,unknown_event_count:unknownEvents,legacy_unknown_event_count:unknownCounts.legacy_unknown,actionable_unknown_event_count:unknownCounts.actionable_unknown,acknowledged_actionable_event_count:acknowledgedActionableEvents,samples,samples_truncated:unknownCounts.legacy_unknown+unknownCounts.actionable_unknown>samples.length,actionable_events:actionableEvents}}const inspectHistoryAuthorStream=(itemId,raw,sampleLimit=20,acknowledgedEvents=new Set)=>inspectHistoryAuthorStreamWithActionableEvents(itemId,raw,sampleLimit,acknowledgedEvents);function collectAcknowledgedUnknownEvents(raw){const acknowledged=new Set;for(const line of raw.split(/\r?\n/)){let parsed;try{parsed=JSON.parse(line)}catch{continue}const context=typeof parsed==="object"&&parsed!==null&&typeof parsed.context==="object"&&parsed.context!==null?parsed.context:{};const acknowledgment=context.author_acknowledgment;if(typeof acknowledgment!=="object"||acknowledgment===null||!Array.isArray(acknowledgment.events)){continue}for(const event of acknowledgment.events){if(typeof event==="object"&&event!==null&&typeof event.item_id==="string"&&Number.isSafeInteger(event.line)){acknowledged.add(`${event.item_id}:${String(event.line)}`)}}}return acknowledged}const scanHistoryAuthorAttribution=async(pmRoot,sampleLimit=20,includeActionableEvents=false)=>{const historyDirectory=path.join(pmRoot,"history");let fileNames;try{fileNames=(await fs.readdir(historyDirectory)).filter(fileName=>fileName.endsWith(".jsonl")).sort((left,right)=>left.localeCompare(right))}catch{fileNames=[]}const affectedItemIds=new Set;const samples=[];const actionableEvents=[];let checkedStreams=0;let checkedEvents=0;let unknownEventCount=0;let legacyUnknownEventCount=0;let actionableUnknownEventCount=0;let acknowledgedActionableEventCount=0;const workspaceFileName="_workspace.jsonl";let acknowledgedEvents=new Set;if(fileNames.includes(workspaceFileName)){try{acknowledgedEvents=collectAcknowledgedUnknownEvents(await fs.readFile(path.join(historyDirectory,workspaceFileName),"utf8"))}catch{acknowledgedEvents=new Set}}for(const fileName of fileNames){let raw;try{raw=await fs.readFile(path.join(historyDirectory,fileName),"utf8")}catch{continue}const itemId=fileName.slice(0,-".jsonl".length);const inspected=inspectHistoryAuthorStreamWithActionableEvents(itemId,raw,sampleLimit-samples.length,acknowledgedEvents,includeActionableEvents);checkedStreams+=1;checkedEvents+=inspected.checked_events;unknownEventCount+=inspected.unknown_event_count;legacyUnknownEventCount+=inspected.legacy_unknown_event_count;actionableUnknownEventCount+=inspected.actionable_unknown_event_count;acknowledgedActionableEventCount+=inspected.acknowledged_actionable_event_count;if(inspected.unknown_event_count>0){affectedItemIds.add(itemId)}samples.push(...inspected.samples);if(includeActionableEvents){actionableEvents.push(...inspected.actionable_events)}}const undispositionedUnknownEventCount=legacyUnknownEventCount+actionableUnknownEventCount;return{checked_streams:checkedStreams,checked_events:checkedEvents,unknown_event_count:unknownEventCount,legacy_unknown_event_count:legacyUnknownEventCount,actionable_unknown_event_count:actionableUnknownEventCount,acknowledged_actionable_event_count:acknowledgedActionableEventCount,affected_item_ids:[...affectedItemIds].sort((left,right)=>left.localeCompare(right)),samples,samples_truncated:undispositionedUnknownEventCount>samples.length,...includeActionableEvents?{actionable_events:actionableEvents}:{}}};function normalizeUnknownAuthorHistoryEvents(events){return[...new Map(events.map(event=>[`${event.item_id}:${event.line}`,{item_id:event.item_id,line:event.line}])).values()].sort((left,right)=>left.item_id.localeCompare(right.item_id)||left.line-right.line)}async function readAcknowledgedUnknownEvents(pmRoot){try{return collectAcknowledgedUnknownEvents(await fs.readFile(path.join(pmRoot,"history","_workspace.jsonl"),"utf8"))}catch{return new Set}}function isValidUnknownAuthorHistoryEvent(event){return(event.item_id===WORKSPACE_HISTORY_ID||/^[a-z0-9][a-z0-9-]*$/iu.test(event.item_id))&&Number.isSafeInteger(event.line)&&event.line>=1}function resolveAcknowledgmentPlanCoordinate(event,acknowledgedEvents,sourceLines){const sourceLine=sourceLines[event.line-1]??"";let parsed;try{parsed=JSON.parse(sourceLine)}catch{refuseAuthorAcknowledgmentArgument(`Unknown-author acknowledgment target ${event.item_id}:${event.line} is not readable.`,{code:"history_author_acknowledge_target_unreadable"})}if(classifyHistoryAuthorEvent(parsed)!=="actionable_unknown"){refuseAuthorAcknowledgmentArgument(`Author acknowledgment target ${event.item_id}:${event.line} is not an actionable unknown-author event.`,{code:"history_author_acknowledge_target_not_actionable"})}return{...event,source_event_hash:createHash("sha256").update(sourceLine).digest("hex"),disposition:acknowledgedEvents.has(`${event.item_id}:${event.line}`)?"already_acknowledged":"actionable"}}async function resolveUnknownAuthorAcknowledgmentPlan(pmRoot,selector,coordinateLimit){const explicitEvents=selector.events??[];const selectorCount=Number(selector.all_actionable===true)+Number(explicitEvents.length>0);if(selectorCount===0){refuseAuthorAcknowledgmentArgument("Specify exactly one selector: events or all_actionable.",{code:"history_author_acknowledge_selector_required"})}if(selectorCount>1){refuseAuthorAcknowledgmentArgument("Author acknowledgment accepts either explicit events or all_actionable, not both.",{code:"history_author_acknowledge_selector_conflict"})}if(!Number.isSafeInteger(coordinateLimit)||coordinateLimit<0){refuseAuthorAcknowledgmentArgument("Author acknowledgment coordinate_limit must be a non-negative integer.",{code:"history_author_acknowledge_preview_limit_invalid"})}const selectedEvents=normalizeUnknownAuthorHistoryEvents(selector.all_actionable===true?(await scanHistoryAuthorAttribution(pmRoot,0,true)).actionable_events:explicitEvents);const acknowledgedEvents=await readAcknowledgedUnknownEvents(pmRoot);const sourceLinesByItem=new Map;for(const event of selectedEvents){if(!isValidUnknownAuthorHistoryEvent(event)){refuseAuthorAcknowledgmentArgument(`Unknown-author acknowledgment target ${event.item_id}:${event.line} is not readable.`,{code:"history_author_acknowledge_target_unreadable"})}if(sourceLinesByItem.has(event.item_id))continue;try{sourceLinesByItem.set(event.item_id,(await fs.readFile(path.join(pmRoot,"history",`${event.item_id}.jsonl`),"utf8")).split(/\r?\n/u))}catch{refuseAuthorAcknowledgmentArgument(`Unknown-author acknowledgment target ${event.item_id}:${event.line} is not readable.`,{code:"history_author_acknowledge_target_unreadable"})}}const completeCoordinates=selectedEvents.map(event=>resolveAcknowledgmentPlanCoordinate(event,acknowledgedEvents,sourceLinesByItem.get(event.item_id)));const kind=selector.all_actionable===true?"all_actionable":"events";const planFingerprint=createHash("sha256").update(JSON.stringify({version:1,selection:kind,coordinates:completeCoordinates})).digest("hex");const actionableCount=completeCoordinates.filter(({disposition})=>disposition==="actionable").length;return{plan:{selection:{kind},selected_count:completeCoordinates.length,actionable_count:actionableCount,already_acknowledged_count:completeCoordinates.length-actionableCount,omitted_count:Math.max(0,completeCoordinates.length-coordinateLimit),coordinates:completeCoordinates.slice(0,coordinateLimit),plan_fingerprint:planFingerprint},completeCoordinates}}async function planUnknownAuthorHistoryAcknowledgment(pmRoot,selector,coordinateLimit=50){return(await resolveUnknownAuthorAcknowledgmentPlan(pmRoot,selector,coordinateLimit)).plan}function resolveUnknownAuthorAcknowledgmentSelector(rawEvents,allActionable){const hasExplicitEvents=rawEvents.length>0;if(hasExplicitEvents&&allActionable){refuseAuthorAcknowledgmentArgument("Specify exactly one selector: repeat --event or pass --all-actionable.",{code:"history_author_acknowledge_selector_conflict",required:"Exactly one of --event or --all-actionable",examples:['pm history-author-acknowledge --event pm-a1b2:4 --attributed-author agent --reviewer maintainer --reason "Verified provenance"','pm history-author-acknowledge --all-actionable --attributed-author import-agent --reviewer maintainer --reason "Reviewed the complete actionable set"']})}if(!hasExplicitEvents&&!allActionable){refuseAuthorAcknowledgmentArgument("Specify exactly one selector: repeat --event or pass --all-actionable.",{code:"history_author_acknowledge_selector_required",required:"Exactly one of --event or --all-actionable",examples:['pm history-author-acknowledge --event pm-a1b2:4 --attributed-author agent --reviewer maintainer --reason "Verified provenance"','pm history-author-acknowledge --all-actionable --attributed-author import-agent --reviewer maintainer --reason "Reviewed the complete actionable set"']})}return{events:parseUnknownAuthorHistoryEventCoordinates(rawEvents),all_actionable:allActionable}}function parseUnknownAuthorHistoryEventCoordinates(values){return values.map(value=>{const separator=value.lastIndexOf(":");const itemId=value.slice(0,separator).trim();const line=Number(value.slice(separator+1));const validItemId=itemId===WORKSPACE_HISTORY_ID||/^[a-z0-9][a-z0-9-]*$/iu.test(itemId);if(separator<1||!validItemId||!Number.isSafeInteger(line)||line<1){refuseAuthorAcknowledgmentArgument(`history-author-acknowledge --event expects <item-id>:<one-based-line>, received "${value}".`,{code:"history_author_acknowledge_target_unreadable"})}return{item_id:itemId,line}})}function acknowledgeUnknownAuthorHistoryEventsFromTransport(pmRoot,input){const selector=resolveUnknownAuthorAcknowledgmentSelector(readRuntimeStringArray(input.historyEvent),input.allActionable===true||input.all_actionable===true);return acknowledgeUnknownAuthorHistoryEvents(pmRoot,{events:selector.events,all_actionable:selector.all_actionable,dry_run:input.dryRun===true||input.dry_run===true,plan_fingerprint:readRuntimeString(input,"planFingerprint")??readRuntimeString(input,"plan_fingerprint"),coordinate_limit:typeof input.limit==="number"?input.limit:typeof input.limit==="string"?Number(input.limit):void 0,attributed_author:readRuntimeString(input,"attributedAuthor")??readRuntimeString(input,"attributed_author")??void 0,reviewer:readRuntimeString(input,"reviewer"),reason:readRuntimeString(input,"reason")})}async function acknowledgeUnknownAuthorHistoryEvents(pmRoot,options){const reviewer=options.reviewer?.trim()??"";const attributedAuthor=options.attributed_author?.trim()??"";const reason=options.reason?.trim()??"";const resolved=await resolveUnknownAuthorAcknowledgmentPlan(pmRoot,options,options.coordinate_limit??50);if(options.dry_run===true){return{dry_run:true,mutated:false,acknowledged:0,outcome:"preview",exit_code:EXIT_CODE.SUCCESS,plan:resolved.plan}}const requiredValuesMissing=[reviewer.length>0,reviewer.toLowerCase()!=="unknown",attributedAuthor.length>0,attributedAuthor.toLowerCase()!=="unknown",reason.length>0].includes(false);if(requiredValuesMissing){refuseAuthorAcknowledgmentArgument("Author acknowledgment requires events, reviewer, attributed_author, and reason.",{code:"history_author_acknowledge_required_values_missing"})}if(!options.plan_fingerprint?.trim()){refuseAuthorAcknowledgmentArgument("Author acknowledgment apply requires plan_fingerprint from a fresh dry-run preview.",{code:"history_author_acknowledge_plan_fingerprint_required",recovery:{suggested_retry:"Rerun history-author-acknowledge with --dry-run, then pass --plan-fingerprint <value>."}})}if(options.plan_fingerprint.trim()!==resolved.plan.plan_fingerprint){throw new PmCliError("Author acknowledgment selection changed after preview; no history was mutated.",EXIT_CODE.CONFLICT,{code:"history_author_acknowledge_plan_conflict",recovery:{suggested_retry:"Rerun history-author-acknowledge with --dry-run and apply the fresh plan_fingerprint."}})}const eventsToAcknowledge=resolved.completeCoordinates.filter(({disposition})=>resolved.plan.selection.kind==="events"||disposition==="actionable").map(({item_id,line})=>({item_id,line}));if(eventsToAcknowledge.length===0){return{dry_run:false,mutated:false,acknowledged:0,outcome:"no_effect",exit_code:EXIT_CODE.NO_EFFECT,plan:resolved.plan}}const settings=await readSettings(pmRoot);const appended=await appendWorkspaceAuditEvent({pmRoot,op:"history:author-acknowledge",author:reviewer,context:{author_acknowledgment:{events:eventsToAcknowledge,attributed_author:attributedAuthor}},message:reason,lockTtlSeconds:settings.locks.ttl_seconds,lockWaitMs:settings.locks.wait_ms});const effectResult=resolved.plan.actionable_count>0&&resolved.plan.already_acknowledged_count>0?{outcome:"partial_effect",exit_code:EXIT_CODE.PARTIAL_EFFECT}:{outcome:"effect",exit_code:EXIT_CODE.SUCCESS};return{dry_run:false,mutated:true,acknowledged:eventsToAcknowledge.length,...effectResult,plan:resolved.plan,history_path:appended.historyPath}}export{HISTORY_AUTHOR_ATTRIBUTION_BASELINE,acknowledgeUnknownAuthorHistoryEvents,acknowledgeUnknownAuthorHistoryEventsFromTransport,classifyHistoryAuthorEvent,inspectHistoryAuthorStream,parseUnknownAuthorHistoryEventCoordinates,planUnknownAuthorHistoryAcknowledgment,resolveUnknownAuthorAcknowledgmentSelector,scanHistoryAuthorAttribution};
|
|
468
2
|
//# sourceMappingURL=author-attribution.js.map
|
|
469
|
-
//# debugId=b389e521-f689-5895-a5f4-08c3866b3ea3
|
package/dist/sdk/authoring.js
CHANGED
|
@@ -1,21 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
* @module sdk/authoring
|
|
3
|
-
*
|
|
4
|
-
* Provides the focused extension and package authoring surface.
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
!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]="bca95ba2-258c-5be2-8428-dcb8dbc87ef0")}catch(e){}}();
|
|
8
|
-
export * from "./compose.js";
|
|
9
|
-
export * from "./define.js";
|
|
10
|
-
export * from "./extension-contracts.js";
|
|
11
|
-
export { RESERVED_ITEM_FIELD_NAMES } from "../core/extensions/item-fields.js";
|
|
12
|
-
export { PM_PACKAGE_CONVENTIONAL_RESOURCE_ROOTS, PM_PACKAGE_RESOURCE_KINDS, collectPackageExtensionDirectories, readPmPackageManifest, } from "../core/packages/manifest.js";
|
|
13
|
-
export { BUILTIN_PROFILES, listProfiles, normalizeProfileName, PROFILE_NAMES, resolveProfile, } from "../core/profile/profile-presets.js";
|
|
14
|
-
export { describeProfileComposition, describeProjectProfile, } from "../core/profile/profile-describe.js";
|
|
15
|
-
export { lintProjectProfile, PROFILE_LINT_CODES, PROFILE_LINT_DIMENSIONS, } from "../core/profile/profile-lint.js";
|
|
16
|
-
export { planProfileApplication, } from "../core/profile/profile-plan.js";
|
|
17
|
-
export { EXTENSION_CAPABILITY_REGISTRATION_SURFACES, collectUsedExtensionCapabilities, reconcileExtensionCapabilityUsage, } from "../core/extensions/capability-usage.js";
|
|
18
|
-
export { renderExtensionSurfaceMarkdown, } from "../core/extensions/activation-summary-markdown.js";
|
|
19
|
-
export { createExtensionContributionInventory, normalizeExtensionContributionInventory, } from "../core/extensions/contribution-inventory.js";
|
|
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]="af4da99c-f557-5bf7-a439-c14878e4970d")}catch(e2){}})();export*from"./compose.js";export*from"./define.js";export*from"./extension-contracts.js";import{RESERVED_ITEM_FIELD_NAMES}from"../core/extensions/item-fields.js";import{PM_PACKAGE_CONVENTIONAL_RESOURCE_ROOTS,PM_PACKAGE_RESOURCE_KINDS,collectPackageExtensionDirectories,readPmPackageManifest}from"../core/packages/manifest.js";import{BUILTIN_PROFILES,listProfiles,normalizeProfileName,PROFILE_NAMES,resolveProfile}from"../core/profile/profile-presets.js";import{describeProfileComposition,describeProjectProfile}from"../core/profile/profile-describe.js";import{lintProjectProfile,PROFILE_LINT_CODES,PROFILE_LINT_DIMENSIONS}from"../core/profile/profile-lint.js";import{planProfileApplication}from"../core/profile/profile-plan.js";import{EXTENSION_CAPABILITY_REGISTRATION_SURFACES,collectUsedExtensionCapabilities,reconcileExtensionCapabilityUsage}from"../core/extensions/capability-usage.js";import{renderExtensionSurfaceMarkdown}from"../core/extensions/activation-summary-markdown.js";import{createExtensionContributionInventory,normalizeExtensionContributionInventory}from"../core/extensions/contribution-inventory.js";export{BUILTIN_PROFILES,EXTENSION_CAPABILITY_REGISTRATION_SURFACES,PM_PACKAGE_CONVENTIONAL_RESOURCE_ROOTS,PM_PACKAGE_RESOURCE_KINDS,PROFILE_LINT_CODES,PROFILE_LINT_DIMENSIONS,PROFILE_NAMES,RESERVED_ITEM_FIELD_NAMES,collectPackageExtensionDirectories,collectUsedExtensionCapabilities,createExtensionContributionInventory,describeProfileComposition,describeProjectProfile,lintProjectProfile,listProfiles,normalizeExtensionContributionInventory,normalizeProfileName,planProfileApplication,readPmPackageManifest,reconcileExtensionCapabilityUsage,renderExtensionSurfaceMarkdown,resolveProfile};
|
|
20
2
|
//# sourceMappingURL=authoring.js.map
|
|
21
|
-
//# debugId=bca95ba2-258c-5be2-8428-dcb8dbc87ef0
|