@unbrained/pm-cli 2026.10.4 → 2026.10.5
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/.claude-plugin/marketplace.json +2 -2
- package/CHANGELOG.md +11 -0
- package/dist/cli/after-command-context-usage.js +1 -1
- package/dist/cli/argv-utils.js +1 -1
- package/dist/cli/bootstrap-args.js +1 -1
- package/dist/cli/bundle-integrity.js +2 -2
- package/dist/cli/command-namespaces.js +1 -1
- package/dist/cli/commander-usage.d.ts +1 -1
- package/dist/cli/commander-usage.js +7 -4
- package/dist/cli/commands/annotations/comments.js +1 -1
- package/dist/cli/commands/annotations/docs.js +1 -1
- package/dist/cli/commands/annotations/files.js +1 -1
- package/dist/cli/commands/annotations/learnings.js +1 -1
- package/dist/cli/commands/annotations/notes.js +1 -1
- package/dist/cli/commands/extension/describe.js +1 -1
- package/dist/cli/commands/extension/extension.js +1 -1
- package/dist/cli/commands/extension/scaffold.js +1 -1
- package/dist/cli/commands/extension/shared.js +1 -1
- package/dist/cli/commands/governance/gc.js +1 -1
- package/dist/cli/commands/governance/health.js +1 -1
- package/dist/cli/commands/governance/telemetry.js +1 -1
- package/dist/cli/commands/governance/validate.js +1 -1
- package/dist/cli/commands/history/activity.js +1 -1
- package/dist/cli/commands/history/history-compact.js +1 -1
- package/dist/cli/commands/history/history-redact.js +1 -1
- package/dist/cli/commands/history/history-repair.js +1 -1
- package/dist/cli/commands/history/history.js +1 -1
- package/dist/cli/commands/history/restore.js +1 -1
- package/dist/cli/commands/lifecycle/append.js +1 -1
- package/dist/cli/commands/lifecycle/claim.js +1 -1
- package/dist/cli/commands/lifecycle/close-many.js +1 -1
- package/dist/cli/commands/lifecycle/close.js +1 -1
- package/dist/cli/commands/lifecycle/copy.js +1 -1
- package/dist/cli/commands/lifecycle/create.js +1 -1
- package/dist/cli/commands/lifecycle/delete.js +1 -1
- package/dist/cli/commands/lifecycle/focus.js +1 -1
- package/dist/cli/commands/lifecycle/plan.js +1 -1
- package/dist/cli/commands/lifecycle/update-many.js +1 -1
- package/dist/cli/commands/lifecycle/update.js +1 -1
- package/dist/cli/commands/query/aggregate.js +1 -1
- package/dist/cli/commands/query/context.js +1 -1
- package/dist/cli/commands/query/deps.js +1 -1
- package/dist/cli/commands/query/duplicates.js +1 -1
- package/dist/cli/commands/query/eval.js +1 -1
- package/dist/cli/commands/query/get.js +1 -1
- package/dist/cli/commands/query/graph.js +1 -1
- package/dist/cli/commands/query/list.js +1 -1
- package/dist/cli/commands/query/next.js +1 -1
- package/dist/cli/commands/query/search.js +1 -1
- package/dist/cli/commands/query/stats.js +1 -1
- package/dist/cli/commands/test/test-all.js +1 -1
- package/dist/cli/commands/test/test-runs.js +1 -1
- package/dist/cli/commands/test/test.js +1 -1
- package/dist/cli/commands/workspace/config.js +1 -1
- package/dist/cli/commands/workspace/contracts.js +1 -1
- package/dist/cli/commands/workspace/init.js +1 -1
- package/dist/cli/commands/workspace/merge.js +1 -1
- package/dist/cli/commands/workspace/profile.js +1 -1
- package/dist/cli/commands/workspace/schema.js +1 -1
- package/dist/cli/commands/workspace/upgrade.js +1 -1
- package/dist/cli/context-intent-invocation.js +1 -1
- package/dist/cli/description-stdin.js +1 -1
- package/dist/cli/error-guidance.js +3 -1
- package/dist/cli/extension-command-help.js +5 -3
- package/dist/cli/extension-command-options.js +1 -1
- package/dist/cli/extension-recovery.js +1 -1
- package/dist/cli/help-content.js +5 -2
- package/dist/cli/help-json-payload.js +6 -3
- package/dist/cli/invocation-profile.js +2 -2
- package/dist/cli/main.js +5 -5
- package/dist/cli/migration-gates.js +1 -1
- package/dist/cli/option-values.js +1 -1
- package/dist/cli/public.js +1 -1
- package/dist/cli/register-annotations.js +1 -1
- package/dist/cli/register-assurance.js +1 -1
- package/dist/cli/register-files-lookup.js +1 -1
- package/dist/cli/register-history-activity.js +1 -1
- package/dist/cli/register-history-author.js +1 -1
- package/dist/cli/register-history-maintenance.js +2 -2
- package/dist/cli/register-list-query.js +10 -10
- package/dist/cli/register-mutation-options.js +1 -1
- package/dist/cli/register-mutation.js +2 -2
- package/dist/cli/register-operations.js +1 -1
- package/dist/cli/register-setup.js +1 -1
- package/dist/cli/register-structured-mutation.js +1 -1
- package/dist/cli/registration-helpers.js +1 -1
- package/dist/cli/runtime/activation.js +1 -1
- package/dist/cli/runtime/invocation-options.js +1 -1
- package/dist/cli/runtime/projection-retry.js +1 -1
- package/dist/cli/runtime/selection.js +1 -1
- package/dist/cli/runtime/telemetry-outcome.js +1 -1
- package/dist/cli/runtime-compatibility-boundary.js +4 -4
- package/dist/cli/schema/registration.js +2 -2
- package/dist/cli/schema-registration-helpers.js +1 -1
- package/dist/cli/search-refresh.js +1 -1
- package/dist/cli/stats-analytics-json.js +1 -1
- package/dist/cli/telemetry-flush.js +1 -1
- package/dist/cli-bundle/bundle-manifest.json +163 -163
- package/dist/cli-bundle/chunks/chunk-3CYOBJUK.js +3 -0
- package/dist/cli-bundle/chunks/chunk-5MNOWZPN.js +3 -0
- package/dist/cli-bundle/chunks/chunk-AJ7H6XUF.js +20 -0
- package/dist/cli-bundle/chunks/chunk-D332RXZ7.js +80 -0
- package/dist/cli-bundle/chunks/chunk-HRJ6G6ZG.js +31 -0
- package/dist/cli-bundle/chunks/chunk-KRVI56QE.js +6 -0
- package/dist/cli-bundle/chunks/chunk-N4YGSG6F.js +238 -0
- package/dist/cli-bundle/chunks/{chunk-7CE2DJMA.js → chunk-OOLYASYJ.js} +2 -2
- package/dist/cli-bundle/chunks/chunk-R7CG2DB7.js +2 -0
- package/dist/cli-bundle/chunks/chunk-TGMONGWX.js +2 -0
- package/dist/cli-bundle/chunks/chunk-UZ7BIUCI.js +2 -0
- package/dist/cli-bundle/chunks/{chunk-GZMWISWW.js → chunk-VZ63DEVJ.js} +3 -3
- package/dist/cli-bundle/chunks/chunk-WFZ4UEOB.js +2 -0
- package/dist/cli-bundle/chunks/chunk-YVBRASXO.js +8 -0
- package/dist/cli-bundle/chunks/{chunk-SMKHR6BM.js → chunk-Z66DWDAU.js} +87 -87
- package/dist/cli-bundle/chunks/{register-list-query-QBGXO5JJ.js → register-list-query-75QXHIFH.js} +11 -11
- package/dist/cli-bundle/chunks/register-mutation-YS54SCHG.js +20 -0
- package/dist/cli-bundle/chunks/register-operations-6KHZQSYJ.js +2 -0
- package/dist/cli-bundle/chunks/register-setup-RTATEN2M.js +2 -0
- package/dist/cli-bundle/focused-chunks/{chunk-Q6DJ5DFQ.js → chunk-2CVX3KR3.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-5C3IDDW7.js +2 -0
- package/dist/cli-bundle/focused-chunks/{chunk-467EW5RL.js → chunk-ABV67XCC.js} +3 -3
- package/dist/cli-bundle/focused-chunks/chunk-B5RSLVE6.js +3 -0
- package/dist/cli-bundle/focused-chunks/chunk-C224METM.js +20 -0
- package/dist/cli-bundle/focused-chunks/chunk-CLDPTMQY.js +6 -0
- package/dist/cli-bundle/focused-chunks/chunk-DDRN42PB.js +8 -0
- package/dist/cli-bundle/focused-chunks/{chunk-7O4NUJVO.js → chunk-DOVTUKJQ.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-ECBOPEJE.js +75 -0
- package/dist/cli-bundle/focused-chunks/chunk-GITOYRUW.js +165 -0
- package/dist/cli-bundle/focused-chunks/chunk-GUIF3WVC.js +30 -0
- package/dist/cli-bundle/focused-chunks/chunk-LE4JUCRR.js +3 -0
- package/dist/cli-bundle/focused-chunks/{chunk-HFAW3FJQ.js → chunk-PSXFFQFT.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-RHIH6XIW.js +12 -0
- package/dist/cli-bundle/focused-chunks/chunk-UDYRVBOZ.js +2 -0
- package/dist/cli-bundle/focused-chunks/chunk-XV5RV4ZT.js +2 -0
- package/dist/cli-bundle/focused-chunks/{chunk-JCVMOSWQ.js → chunk-YMU42COG.js} +2 -2
- package/dist/cli-bundle/main.js +27 -27
- 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 +32 -32
- 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 +55 -55
- 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 +10 -10
- package/dist/cli.js +1 -1
- package/dist/core/checkpoint/checkpoint-gc.js +1 -1
- package/dist/core/checkpoint/mutation-checkpoint.js +2 -2
- package/dist/core/config/nested-settings.js +1 -1
- package/dist/core/config/positional-value.js +1 -1
- package/dist/core/diagnostics/remediation.js +1 -1
- package/dist/core/extensions/activation-summary-markdown.js +2 -1
- package/dist/core/extensions/activation-summary.js +1 -1
- package/dist/core/extensions/activation-transaction.js +1 -1
- package/dist/core/extensions/capability-usage.js +1 -1
- package/dist/core/extensions/command-hook-context.js +1 -1
- package/dist/core/extensions/command-metadata-contract.js +1 -1
- package/dist/core/extensions/command-visibility-tier.js +1 -1
- package/dist/core/extensions/contribution-inventory.js +1 -1
- package/dist/core/extensions/exporter-output-contract.js +1 -1
- package/dist/core/extensions/extension-candidate.js +1 -1
- package/dist/core/extensions/extension-capability-aliases.js +1 -1
- package/dist/core/extensions/extension-hook-runtime.js +1 -1
- package/dist/core/extensions/extension-policy.js +1 -1
- package/dist/core/extensions/extension-registries.js +1 -1
- package/dist/core/extensions/extension-runtime-helpers.js +1 -1
- package/dist/core/extensions/extension-types.js +1 -1
- package/dist/core/extensions/flag-definition-validation.js +1 -1
- package/dist/core/extensions/flag-value-types.js +1 -1
- package/dist/core/extensions/index.js +1 -1
- package/dist/core/extensions/item-field-types.js +1 -1
- package/dist/core/extensions/item-fields.js +1 -1
- package/dist/core/extensions/loader.js +1 -1
- package/dist/core/extensions/manifest-parser.js +1 -1
- package/dist/core/extensions/manifest-schema.js +1 -1
- package/dist/core/extensions/module-graph-snapshot.js +1 -1
- package/dist/core/extensions/preflight-ownership.js +1 -1
- package/dist/core/extensions/registration-contracts.js +1 -1
- package/dist/core/extensions/registration-validation.js +1 -1
- package/dist/core/extensions/registration-values.js +1 -1
- package/dist/core/extensions/reserved-host-flags.js +1 -1
- package/dist/core/extensions/runtime-registrations.js +1 -1
- package/dist/core/extensions/service-ownership.js +1 -1
- package/dist/core/extensions/version-compat.js +1 -1
- package/dist/core/fs/atomic-create.js +1 -1
- package/dist/core/fs/fs-utils.js +2 -2
- package/dist/core/fs/host-environment-errors.js +1 -1
- package/dist/core/fs/index.js +1 -1
- package/dist/core/fs/path-utils.js +1 -1
- package/dist/core/governance/content-fields.js +1 -1
- package/dist/core/governance/issue-codes.js +1 -1
- package/dist/core/governance/metadata-coverage.js +1 -1
- package/dist/core/history/digest.js +1 -1
- package/dist/core/history/drift-cache.js +3 -3
- package/dist/core/history/drift-scan.d.ts +4 -0
- package/dist/core/history/drift-scan.js +1 -1
- package/dist/core/history/event-classification.js +1 -1
- package/dist/core/history/event-index.js +8 -7
- package/dist/core/history/history-compact-bulk.js +1 -1
- package/dist/core/history/history-diff.js +1 -1
- package/dist/core/history/history-rewrite.js +1 -1
- package/dist/core/history/history-storage-stats.js +1 -1
- package/dist/core/history/history-stream-policy.js +1 -1
- package/dist/core/history/history.js +2 -2
- package/dist/core/history/identity.js +1 -1
- package/dist/core/history/index.js +1 -1
- package/dist/core/history/operation-contract.js +1 -1
- package/dist/core/history/projection.js +1 -1
- package/dist/core/history/read.js +1 -1
- package/dist/core/history/replay.js +2 -1
- package/dist/core/history/tombstone.js +1 -1
- package/dist/core/history/version-address.js +1 -1
- package/dist/core/history/workspace-history.js +2 -2
- package/dist/core/io/body-file.js +1 -1
- package/dist/core/io/bulk-ids-input.js +2 -1
- package/dist/core/item/actionability.js +1 -1
- package/dist/core/item/dependency-reference.js +1 -1
- package/dist/core/item/id.js +1 -1
- package/dist/core/item/index.js +1 -1
- package/dist/core/item/item-format-version.js +1 -1
- package/dist/core/item/item-format.js +6 -4
- package/dist/core/item/item-record.js +1 -1
- package/dist/core/item/item-type-definition.js +1 -1
- package/dist/core/item/parent-reference-policy.js +1 -1
- package/dist/core/item/parse.js +8 -2
- package/dist/core/item/plan-lifecycle.js +1 -1
- package/dist/core/item/priority.js +1 -1
- package/dist/core/item/sprint-release-format.js +1 -1
- package/dist/core/item/status-filter.js +1 -1
- package/dist/core/item/status.js +1 -1
- package/dist/core/item/toon-decode.js +1 -1
- package/dist/core/item/type-registry.js +1 -1
- package/dist/core/item/type-synonyms.js +1 -1
- package/dist/core/lock/index.js +1 -1
- package/dist/core/lock/lock-gc.js +1 -1
- package/dist/core/lock/lock.js +3 -3
- package/dist/core/output/mutation-projection.js +1 -1
- package/dist/core/output/output-control.js +1 -1
- package/dist/core/output/output.js +22 -10
- package/dist/core/output/query-summary.js +1 -1
- package/dist/core/output/tabular.js +3 -1
- package/dist/core/packages/manifest.js +1 -1
- package/dist/core/packages/root.js +1 -1
- package/dist/core/policy/workflow-policy-schema.js +1 -1
- package/dist/core/policy/workflow-policy-store.js +1 -1
- package/dist/core/policy/workflow-policy.js +1 -1
- package/dist/core/profile/profile-describe.js +1 -1
- package/dist/core/profile/profile-lint.js +1 -1
- package/dist/core/profile/profile-plan.js +1 -1
- package/dist/core/profile/profile-presets.js +25 -1
- package/dist/core/reproducibility/context.js +1 -1
- package/dist/core/schema/fields-file.js +2 -2
- package/dist/core/schema/item-types-file.js +2 -2
- package/dist/core/schema/runtime-field-filters.js +1 -1
- package/dist/core/schema/runtime-field-values.js +1 -1
- package/dist/core/schema/runtime-schema.js +2 -2
- package/dist/core/schema/status-defs-file.js +2 -2
- package/dist/core/schema/status-token.js +1 -1
- package/dist/core/schema/type-inference.js +1 -1
- package/dist/core/schema/type-presets.js +1 -1
- package/dist/core/schema/type-workflows.js +1 -1
- package/dist/core/search/background-refresh.js +2 -2
- package/dist/core/search/bm25.js +1 -1
- package/dist/core/search/cache.js +2 -2
- package/dist/core/search/corpus.js +1 -1
- package/dist/core/search/embedding-batches.js +1 -1
- package/dist/core/search/eval-thresholds.js +1 -1
- package/dist/core/search/eval.js +1 -1
- package/dist/core/search/http-client.js +1 -1
- package/dist/core/search/providers.js +1 -1
- package/dist/core/search/relevance.js +1 -1
- package/dist/core/search/semantic-defaults.js +1 -1
- package/dist/core/search/staleness.js +1 -1
- package/dist/core/search/vector-stores.js +2 -2
- package/dist/core/search/vectorization-metadata.js +1 -1
- package/dist/core/sentry/helpers.js +1 -1
- package/dist/core/sentry/instrument.js +1 -1
- package/dist/core/session/session-state.js +1 -1
- package/dist/core/shared/agent-session-context.js +1 -1
- package/dist/core/shared/author.js +5 -1
- package/dist/core/shared/command-line.js +1 -1
- package/dist/core/shared/command-types.js +1 -1
- package/dist/core/shared/conflict-markers.js +1 -1
- package/dist/core/shared/constants.js +1 -1
- package/dist/core/shared/errors.js +1 -1
- package/dist/core/shared/html-entity-decode.js +1 -1
- package/dist/core/shared/index.js +1 -1
- package/dist/core/shared/item-metadata-contract.js +1 -1
- package/dist/core/shared/lazy-module.js +1 -1
- package/dist/core/shared/levenshtein.js +1 -1
- package/dist/core/shared/memo.js +1 -1
- package/dist/core/shared/numeric-parsers.js +1 -1
- package/dist/core/shared/option-alias-visibility.js +1 -1
- package/dist/core/shared/primitives.js +1 -1
- package/dist/core/shared/secret-rules.js +1 -1
- package/dist/core/shared/serial-queue.js +1 -1
- package/dist/core/shared/serialization.js +1 -1
- package/dist/core/shared/split-comma-list.js +1 -1
- package/dist/core/shared/text-normalization.js +1 -1
- package/dist/core/shared/time.js +2 -1
- package/dist/core/store/index.js +1 -1
- package/dist/core/store/item-format-migration.js +1 -1
- package/dist/core/store/item-metadata-cache.js +1 -1
- package/dist/core/store/item-metadata-query-index.js +7 -7
- package/dist/core/store/item-metadata-read-work.js +1 -1
- package/dist/core/store/item-store.js +1 -1
- package/dist/core/store/paths.js +1 -1
- package/dist/core/store/settings-concurrency.js +1 -1
- package/dist/core/store/settings-read-cache.js +1 -1
- package/dist/core/store/settings-validator.js +1 -1
- package/dist/core/store/settings.js +3 -3
- package/dist/core/store/tracker-preflight.js +1 -1
- package/dist/core/telemetry/consent.js +2 -2
- package/dist/core/telemetry/observability.js +1 -1
- package/dist/core/telemetry/policy.js +1 -1
- package/dist/core/telemetry/read-sampling.js +2 -2
- package/dist/core/telemetry/runtime.js +9 -5
- package/dist/core/test/background-runs.js +3 -3
- package/dist/core/test/item-test-run-tracking.js +1 -1
- package/dist/core/test/run-selectors.js +1 -1
- package/dist/core/validate/estimate-defaults.js +1 -1
- package/dist/core/validate/fix-planning.js +1 -1
- package/dist/core/validate/linked-artifact-reference.js +1 -1
- package/dist/core/validate/missing-by-type.js +1 -1
- package/dist/core/validate/missing-link-owners.js +1 -1
- package/dist/core/validate/stale-file-classification.js +1 -1
- package/dist/mcp/http-server.js +6 -4
- package/dist/mcp/legacy-adapter.js +1 -1
- package/dist/mcp/runtime-capabilities.js +1 -1
- package/dist/mcp/server.js +4 -4
- package/dist/mcp/tool-definitions.js +1 -1
- package/dist/sdk/actionability.js +1 -1
- package/dist/sdk/agent/closed-domain-contracts.js +1 -1
- package/dist/sdk/agent/command-recovery.js +1 -1
- package/dist/sdk/agent/command-suggestions.js +1 -1
- package/dist/sdk/agent/create-option-policy.js +1 -1
- package/dist/sdk/agent/identity-config.js +1 -1
- package/dist/sdk/agent/item-addressing.js +1 -1
- package/dist/sdk/agent/refusal-closure-census.js +2 -1
- package/dist/sdk/agent/refusal-closure.js +1 -1
- package/dist/sdk/agent/refusal-corpus-contracts.js +1 -1
- package/dist/sdk/agent/refusal-reachability.js +3 -1
- package/dist/sdk/agent/subcommand-recovery.js +1 -1
- package/dist/sdk/agent/task-transcript-contracts.js +1 -1
- package/dist/sdk/agent/tracker-preflight-contracts.js +1 -1
- package/dist/sdk/agent-capability-contracts.js +3 -1
- package/dist/sdk/agent-session-context.js +1 -1
- package/dist/sdk/annotations.js +1 -1
- package/dist/sdk/author-attribution.js +1 -1
- package/dist/sdk/authoring.js +1 -1
- package/dist/sdk/cli-bootstrap.js +1 -1
- package/dist/sdk/cli-contracts/agent-output-contracts.js +5 -3
- package/dist/sdk/cli-contracts/bootstrap-command-scanner.js +1 -1
- package/dist/sdk/cli-contracts/command-aliases.js +1 -1
- package/dist/sdk/cli-contracts/command-exit-contracts.js +1 -1
- package/dist/sdk/cli-contracts/commander-mutation-options.js +1 -1
- package/dist/sdk/cli-contracts/commander-types.js +1 -1
- package/dist/sdk/cli-contracts/completeness.js +1 -1
- package/dist/sdk/cli-contracts/enum-contracts.js +1 -1
- package/dist/sdk/cli-contracts/flag-contracts.js +1 -1
- package/dist/sdk/cli-contracts/flag-lexicon-contracts.js +2 -1
- package/dist/sdk/cli-contracts/grammar-contracts.js +1 -1
- package/dist/sdk/cli-contracts/registration-helpers.js +7 -7
- package/dist/sdk/cli-contracts/runtime-contracts.js +1 -1
- package/dist/sdk/cli-contracts/schemas/assurance-definition.js +1 -1
- package/dist/sdk/cli-contracts/string-lists.js +1 -1
- package/dist/sdk/cli-contracts/tool-option-contracts.js +1 -1
- package/dist/sdk/cli-contracts/tool-parameter-tables.js +1 -1
- package/dist/sdk/cli-contracts/tool-schema.js +1 -1
- package/dist/sdk/cli-contracts/typed-action-inputs.js +1 -1
- package/dist/sdk/cli-contracts.js +1 -1
- package/dist/sdk/cli-program.js +1 -1
- package/dist/sdk/command-line.js +1 -1
- package/dist/sdk/comments.js +1 -1
- package/dist/sdk/compile-cache.js +1 -1
- package/dist/sdk/completion/bash.js +2 -1
- package/dist/sdk/completion/fish.js +13 -7
- package/dist/sdk/completion/shared.js +1 -1
- package/dist/sdk/completion/zsh.js +14 -8
- package/dist/sdk/completion.js +1 -1
- package/dist/sdk/compose.js +1 -1
- package/dist/sdk/config.js +1 -1
- package/dist/sdk/context/recency.js +1 -1
- package/dist/sdk/context/semantic-session-attribution.js +1 -1
- package/dist/sdk/context/usage-egress.js +1 -1
- package/dist/sdk/context/usage-ledger.js +6 -3
- package/dist/sdk/context-intent-contracts.js +1 -1
- package/dist/sdk/context-intent-runtime.js +1 -1
- package/dist/sdk/context-packing.js +1 -1
- package/dist/sdk/context-relevance.js +1 -1
- package/dist/sdk/context-signal-store.js +2 -2
- package/dist/sdk/context-usage.js +1 -1
- package/dist/sdk/contracts.js +1 -1
- package/dist/sdk/core-governance.js +1 -1
- package/dist/sdk/core.js +1 -1
- package/dist/sdk/corpus-shape.js +1 -1
- package/dist/sdk/define.js +1 -1
- package/dist/sdk/dependencies.js +1 -1
- package/dist/sdk/dependency-flag-validation.js +1 -1
- package/dist/sdk/dependency-provenance.js +1 -1
- package/dist/sdk/docs.js +1 -1
- package/dist/sdk/duplicates.js +1 -1
- package/dist/sdk/environment/agent-environment.js +1 -1
- package/dist/sdk/environment/host-environment-errors.js +1 -1
- package/dist/sdk/environment/project-runtime-compatibility.js +2 -1
- package/dist/sdk/environment/source-context.js +1 -1
- package/dist/sdk/environment/tracker-preflight.js +1 -1
- package/dist/sdk/error-code-catalog.js +1 -1
- package/dist/sdk/error-runtime.js +1 -1
- package/dist/sdk/errors.js +1 -1
- package/dist/sdk/eval.js +1 -1
- package/dist/sdk/extension/author-manifest.js +1 -1
- package/dist/sdk/extension/bundled-catalog.js +1 -1
- package/dist/sdk/extension/concurrency.js +1 -1
- package/dist/sdk/extension/copy-scope.js +1 -1
- package/dist/sdk/extension/custom-field-collisions.js +1 -1
- package/dist/sdk/extension/describe.js +4 -2
- package/dist/sdk/extension/doctor.js +1 -1
- package/dist/sdk/extension/install-plan.js +1 -1
- package/dist/sdk/extension/install-receipts.js +1 -1
- package/dist/sdk/extension/install-runtime.js +3 -3
- package/dist/sdk/extension/install-snapshot.js +1 -1
- package/dist/sdk/extension/install-sources.js +5 -5
- package/dist/sdk/extension/managed-state.js +2 -2
- package/dist/sdk/extension/migrations.js +2 -2
- package/dist/sdk/extension/output-ownership.js +1 -1
- package/dist/sdk/extension/runtime-summary.js +1 -1
- package/dist/sdk/extension/scaffold.js +11 -4
- package/dist/sdk/extension/shared.js +1 -1
- package/dist/sdk/extension/source-resolution.js +1 -1
- package/dist/sdk/extension/static-inventory.js +1 -1
- package/dist/sdk/extension/update-check.js +1 -1
- package/dist/sdk/extension-command-context.js +1 -1
- package/dist/sdk/extension-contracts.js +1 -1
- package/dist/sdk/extension.js +1 -1
- package/dist/sdk/files.js +1 -1
- package/dist/sdk/flag-invocation-contracts.js +1 -1
- package/dist/sdk/generated/generated-error-code-catalog-part-1.js +1 -1
- package/dist/sdk/generated/generated-error-code-catalog-part-2.js +1 -1
- package/dist/sdk/generated-error-code-catalog.js +1 -1
- package/dist/sdk/governance/assurance-action-contracts.js +1 -1
- package/dist/sdk/governance/assurance-action.js +1 -1
- package/dist/sdk/governance/assurance-limits.js +1 -1
- package/dist/sdk/governance/assurance-mutation-error.js +1 -1
- package/dist/sdk/governance/assurance-presets.js +1 -1
- package/dist/sdk/governance/assurance-runtime.js +1 -1
- package/dist/sdk/governance/assurance.js +4 -4
- package/dist/sdk/governance/boundary-fixtures.js +1 -1
- package/dist/sdk/governance/closure-timestamps.js +1 -1
- package/dist/sdk/governance/coverage-assurance.js +1 -1
- package/dist/sdk/governance/defect-recurrence-coverage.js +1 -1
- package/dist/sdk/governance/defect-recurrence-graph.js +1 -1
- package/dist/sdk/governance/defect-recurrence-signals.js +1 -1
- package/dist/sdk/governance/defect-recurrence.js +1 -1
- package/dist/sdk/governance/extension-host-version.js +1 -1
- package/dist/sdk/governance/gc.js +1 -1
- package/dist/sdk/governance/health-merge-evidence.js +1 -1
- package/dist/sdk/governance/health.js +2 -1
- package/dist/sdk/governance/hierarchy-validation.js +1 -1
- package/dist/sdk/governance/linked-file-report.js +1 -1
- package/dist/sdk/governance/merge-receipt-history.js +1 -1
- package/dist/sdk/governance/provenance-health.js +4 -1
- package/dist/sdk/governance/reindex.js +5 -4
- package/dist/sdk/governance/stale-work.js +1 -1
- package/dist/sdk/governance/status-role-diagnostics.js +1 -1
- package/dist/sdk/governance/storage-integrity.js +1 -1
- package/dist/sdk/governance/tracked-runtime-cache.js +1 -1
- package/dist/sdk/governance/upgrade.js +2 -2
- package/dist/sdk/governance/validate-history-drift.js +1 -1
- package/dist/sdk/governance/validate-item-reader.js +1 -1
- package/dist/sdk/governance/validate-normalization.js +1 -1
- package/dist/sdk/governance/validate.js +1 -1
- package/dist/sdk/governance/workflow-completeness.js +1 -1
- package/dist/sdk/governance/workflow-policy.js +3 -3
- package/dist/sdk/governance/workspace-position.js +2 -1
- package/dist/sdk/governance.js +1 -1
- package/dist/sdk/graph/adapter.js +1 -1
- package/dist/sdk/graph/analytics.js +1 -1
- package/dist/sdk/graph/assembly.js +1 -1
- package/dist/sdk/graph/cache.js +1 -1
- package/dist/sdk/graph/centrality.js +1 -1
- package/dist/sdk/graph/conformance.js +1 -1
- package/dist/sdk/graph/deadline-scheduling.js +1 -1
- package/dist/sdk/graph/durable-cache.js +1 -1
- package/dist/sdk/graph/governance-contracts.js +1 -1
- package/dist/sdk/graph/governance.js +1 -1
- package/dist/sdk/graph/hierarchy-integrity.js +1 -1
- package/dist/sdk/graph/index.js +1 -1
- package/dist/sdk/graph/lifecycle-coverage.js +1 -1
- package/dist/sdk/graph/mutation-advisory.js +1 -1
- package/dist/sdk/graph/query-contracts.js +1 -1
- package/dist/sdk/graph/remediation.js +1 -1
- package/dist/sdk/graph/run.js +1 -1
- package/dist/sdk/graph/scheduling.js +1 -1
- package/dist/sdk/graph/traversal.js +1 -1
- package/dist/sdk/graph/workspace-relationship-kind-registry.js +1 -1
- package/dist/sdk/graph.js +1 -1
- package/dist/sdk/guide-topics.js +1 -1
- package/dist/sdk/guide.js +8 -1
- package/dist/sdk/history/attestation-command.js +1 -1
- package/dist/sdk/history/attestation-contract.js +1 -1
- package/dist/sdk/history/attestation-scan.js +1 -1
- package/dist/sdk/history/attestation.js +1 -1
- package/dist/sdk/history/maintenance.js +1 -1
- package/dist/sdk/history/salvage.js +3 -2
- package/dist/sdk/history/subject.js +1 -1
- package/dist/sdk/history-analytics.js +1 -1
- package/dist/sdk/history-compact.js +1 -1
- package/dist/sdk/history-mcp.js +1 -1
- package/dist/sdk/history-provenance.js +1 -1
- package/dist/sdk/history-read.js +1 -1
- package/dist/sdk/history-redact.js +1 -1
- package/dist/sdk/history-repair.js +1 -1
- package/dist/sdk/improvement-ledger-validation.js +1 -1
- package/dist/sdk/improvement-ledger.js +2 -2
- package/dist/sdk/index.js +1 -1
- package/dist/sdk/init-agent-guidance.js +16 -2
- package/dist/sdk/init.js +16 -2
- package/dist/sdk/invocation-author.js +1 -1
- package/dist/sdk/item-children.js +1 -1
- package/dist/sdk/item-metadata-index.js +1 -1
- package/dist/sdk/item-schedule.js +1 -1
- package/dist/sdk/item-transaction.js +1 -1
- package/dist/sdk/learnings.js +1 -1
- package/dist/sdk/lifecycle/append.js +4 -2
- package/dist/sdk/lifecycle/claim.js +1 -1
- package/dist/sdk/lifecycle/close-many.js +1 -1
- package/dist/sdk/lifecycle/close.js +1 -1
- package/dist/sdk/lifecycle/copy.js +1 -1
- package/dist/sdk/lifecycle/create.js +1 -1
- package/dist/sdk/lifecycle/delete.js +1 -1
- package/dist/sdk/lifecycle/event-validation-messages.js +1 -1
- package/dist/sdk/lifecycle/focus.js +1 -1
- package/dist/sdk/lifecycle/hierarchy-mutation-lock.js +1 -1
- package/dist/sdk/lifecycle/legacy-none-tokens.js +1 -1
- package/dist/sdk/lifecycle/lifecycle-transitions.js +1 -1
- package/dist/sdk/lifecycle/mcp-actions.js +1 -1
- package/dist/sdk/lifecycle/metadata-normalizers.js +1 -1
- package/dist/sdk/lifecycle/mutation-command-options.js +1 -1
- package/dist/sdk/lifecycle/plan-mutation-receipt.js +1 -1
- package/dist/sdk/lifecycle/plan.js +1 -1
- package/dist/sdk/lifecycle/recurrence-parsers.js +1 -1
- package/dist/sdk/lifecycle/reopen.js +1 -1
- package/dist/sdk/lifecycle/repeatable-metadata-parsers.js +2 -1
- package/dist/sdk/lifecycle/restore.js +1 -1
- package/dist/sdk/lifecycle/shared-unset-fields.js +1 -1
- package/dist/sdk/lifecycle/task-composition.js +1 -1
- package/dist/sdk/lifecycle/update-many.js +1 -1
- package/dist/sdk/lifecycle/update.js +2 -1
- package/dist/sdk/lifecycle-completion.js +1 -1
- package/dist/sdk/lifecycle-policy.js +1 -1
- package/dist/sdk/linked-artifacts.js +2 -1
- package/dist/sdk/mcp/apps.js +1 -1
- package/dist/sdk/mcp/authorization.js +1 -1
- package/dist/sdk/mcp/discovery.js +1 -1
- package/dist/sdk/mcp/interactions.js +1 -1
- package/dist/sdk/mcp/protocol.js +1 -1
- package/dist/sdk/mcp/skills.js +3 -1
- package/dist/sdk/mcp/subscriptions.js +1 -1
- package/dist/sdk/mcp/tasks.js +2 -2
- package/dist/sdk/mcp/transport.js +1 -1
- package/dist/sdk/merge/abandoned-receipts.js +1 -1
- package/dist/sdk/merge/driver.js +1 -1
- package/dist/sdk/merge/index.js +1 -1
- package/dist/sdk/merge/install.js +4 -2
- package/dist/sdk/merge/receipt-file-boundary.js +1 -1
- package/dist/sdk/merge/receipt-operation.js +1 -1
- package/dist/sdk/merge/receipt-schema.js +1 -1
- package/dist/sdk/merge/receipts.js +4 -4
- package/dist/sdk/merge/reconcile.js +1 -1
- package/dist/sdk/merge/three-way.js +3 -2
- package/dist/sdk/merge/worktree-config.js +1 -1
- package/dist/sdk/merge.js +1 -1
- package/dist/sdk/mutation-events.js +1 -1
- package/dist/sdk/mutation-guard.js +1 -1
- package/dist/sdk/notes.js +1 -1
- package/dist/sdk/output-contracts.js +1 -1
- package/dist/sdk/output-projection.js +1 -1
- package/dist/sdk/output-token-accounting.js +1 -1
- package/dist/sdk/output.js +2 -1
- package/dist/sdk/ownership-source.js +1 -1
- package/dist/sdk/package-import-adapters.js +1 -1
- package/dist/sdk/package-migrations.js +1 -1
- package/dist/sdk/package-runtime-options.js +1 -1
- package/dist/sdk/pagination.js +1 -1
- package/dist/sdk/profile.js +5 -1
- package/dist/sdk/provenance.js +1 -1
- package/dist/sdk/public-surface.json +1 -1
- package/dist/sdk/query/activity.js +1 -1
- package/dist/sdk/query/aggregate.js +1 -1
- package/dist/sdk/query/calendar.js +4 -1
- package/dist/sdk/query/complete-list.js +1 -1
- package/dist/sdk/query/context.js +2 -1
- package/dist/sdk/query/duplicate-candidates.js +1 -1
- package/dist/sdk/query/get.d.ts +14 -2
- package/dist/sdk/query/get.js +1 -1
- package/dist/sdk/query/history.js +1 -1
- package/dist/sdk/query/item-filter-options.js +1 -1
- package/dist/sdk/query/light-metadata.js +1 -1
- package/dist/sdk/query/list-filter-shared.js +1 -1
- package/dist/sdk/query/list.js +1 -1
- package/dist/sdk/query/multi-value-filters.js +1 -1
- package/dist/sdk/query/next-ready-budget.js +1 -1
- package/dist/sdk/query/next.js +2 -1
- package/dist/sdk/query/parsers.js +1 -1
- package/dist/sdk/query/projection-contracts.js +1 -1
- package/dist/sdk/query/search/corpus.js +2 -1
- package/dist/sdk/query/search/filters.js +1 -1
- package/dist/sdk/query/search/input.js +1 -1
- package/dist/sdk/query/search/lexical.js +1 -1
- package/dist/sdk/query/search/response.js +1 -1
- package/dist/sdk/query/search/semantic.js +3 -2
- package/dist/sdk/query/search/types.js +1 -1
- package/dist/sdk/query/search-contracts.js +1 -1
- package/dist/sdk/query/search-pagination.js +1 -1
- package/dist/sdk/query/search-rendering.js +1 -1
- package/dist/sdk/query/search.js +1 -1
- package/dist/sdk/query/workspace-contracts.js +1 -1
- package/dist/sdk/query.js +1 -1
- package/dist/sdk/read-output/continuation.js +1 -1
- package/dist/sdk/read-output/options.js +1 -1
- package/dist/sdk/read-output/provenance.js +1 -1
- package/dist/sdk/read-output-budget.js +1 -1
- package/dist/sdk/read-output-contracts.js +1 -1
- package/dist/sdk/read-output-rows.js +1 -1
- package/dist/sdk/read-output-session.js +1 -1
- package/dist/sdk/relationship-analytics.js +1 -1
- package/dist/sdk/relationship-context.js +1 -1
- package/dist/sdk/relationship-history.js +7 -4
- package/dist/sdk/relationship-kinds/contract.js +1 -1
- package/dist/sdk/relationship-migration.js +1 -1
- package/dist/sdk/relationships.js +1 -1
- package/dist/sdk/reproducibility/process.js +1 -1
- package/dist/sdk/runtime/actions.js +1 -1
- package/dist/sdk/runtime/context.js +1 -1
- package/dist/sdk/runtime/schema-preview.js +1 -1
- package/dist/sdk/runtime/schema.js +1 -1
- package/dist/sdk/runtime-action-aliases.js +1 -1
- package/dist/sdk/runtime-extended-actions.js +1 -1
- package/dist/sdk/runtime-input.js +1 -1
- package/dist/sdk/runtime-primitives.js +1 -1
- package/dist/sdk/runtime-public-contracts.js +1 -1
- package/dist/sdk/runtime-stats-options.js +1 -1
- package/dist/sdk/runtime.js +1 -1
- package/dist/sdk/scheduling-shortcuts.js +1 -1
- package/dist/sdk/schema-migration.js +4 -3
- package/dist/sdk/schema.js +7 -1
- package/dist/sdk/search-refresh-worker.js +1 -1
- package/dist/sdk/similarity-scoring.js +1 -1
- package/dist/sdk/similarity.js +1 -1
- package/dist/sdk/start-task-status.js +1 -1
- package/dist/sdk/stats.js +1 -1
- package/dist/sdk/structured-mutations.js +1 -1
- package/dist/sdk/telemetry-flush.js +1 -1
- package/dist/sdk/telemetry.js +4 -3
- package/dist/sdk/templates.js +26 -2
- package/dist/sdk/test/batch.js +2 -2
- package/dist/sdk/test/entry.js +1 -1
- package/dist/sdk/test/execution.js +6 -5
- package/dist/sdk/test/json-path.js +1 -1
- package/dist/sdk/test/linked-command-detection.js +1 -1
- package/dist/sdk/test/measurements.js +1 -1
- package/dist/sdk/test/parsers.js +1 -1
- package/dist/sdk/test/runs.js +1 -1
- package/dist/sdk/test/trust.js +2 -2
- package/dist/sdk/test/workspace-snapshot.js +1 -1
- package/dist/sdk/testing.js +7 -4
- package/dist/sdk/traceability/runtime-files-lookup.js +1 -1
- package/dist/sdk/traceability/source-traceability.js +2 -1
- package/dist/sdk/tracker-root-discovery.js +1 -1
- package/dist/sdk/workspace-contracts-cache.js +1 -1
- package/dist/sdk/workspace-contracts.js +1 -1
- package/dist/sdk/workspace-memory.js +2 -2
- package/dist/sdk/workspace-recipe.js +1 -1
- package/dist/sdk/workspace-snapshot.js +5 -4
- package/dist/sdk/workspace-transaction-gc.js +1 -1
- package/dist/sdk/workspace-transaction.js +2 -2
- package/dist/sdk/workspace.js +3 -2
- package/dist/types/index.js +1 -1
- package/dist/types.js +1 -1
- package/docs/AGENT_EVIDENCE_CONSISTENCY.md +88 -0
- package/docs/GET_READ_EVIDENCE.md +68 -0
- package/docs/README.md +2 -0
- 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/extensions/vcs/index.ts +4 -2
- package/packages/pm-vcs/package.json +1 -1
- package/plugins/pm-claude/.claude-plugin/plugin.json +1 -1
- package/plugins/pm-claude/package.json +2 -2
- package/plugins/pm-codex/.codex-plugin/plugin.json +1 -1
- package/plugins/pm-codex/package.json +2 -2
- package/plugins/pm-codex/plugin.json +1 -1
- package/scripts/finalize-build.mjs +3 -2
- package/dist/cli-bundle/chunks/chunk-7UVXKI7K.js +0 -2
- package/dist/cli-bundle/chunks/chunk-D7Z2ZMJL.js +0 -3
- package/dist/cli-bundle/chunks/chunk-DEZPZOQ7.js +0 -2
- package/dist/cli-bundle/chunks/chunk-J52QIRRZ.js +0 -80
- package/dist/cli-bundle/chunks/chunk-JDKD3WGG.js +0 -6
- package/dist/cli-bundle/chunks/chunk-JQ7DW663.js +0 -2
- package/dist/cli-bundle/chunks/chunk-QXIDOOWT.js +0 -20
- package/dist/cli-bundle/chunks/chunk-SGFQQXFD.js +0 -2
- package/dist/cli-bundle/chunks/chunk-V3U77H3V.js +0 -31
- package/dist/cli-bundle/chunks/chunk-XZDWAYJC.js +0 -3
- package/dist/cli-bundle/chunks/chunk-Y6VRBTP3.js +0 -238
- package/dist/cli-bundle/chunks/chunk-YAAFYFS4.js +0 -8
- package/dist/cli-bundle/chunks/register-mutation-53ZLT4RX.js +0 -20
- package/dist/cli-bundle/chunks/register-operations-OBK2FXUU.js +0 -2
- package/dist/cli-bundle/chunks/register-setup-HM3OCBH2.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-2JFYR56O.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-32EVUSS4.js +0 -8
- package/dist/cli-bundle/focused-chunks/chunk-5GUSO2P4.js +0 -20
- package/dist/cli-bundle/focused-chunks/chunk-6XBRADQQ.js +0 -3
- package/dist/cli-bundle/focused-chunks/chunk-CURTIIQT.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-IJUWEEEB.js +0 -6
- package/dist/cli-bundle/focused-chunks/chunk-JMJK2L4Z.js +0 -3
- package/dist/cli-bundle/focused-chunks/chunk-KG3H4UZZ.js +0 -30
- package/dist/cli-bundle/focused-chunks/chunk-MHQ2XICU.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-RJV6QVJE.js +0 -75
- package/dist/cli-bundle/focused-chunks/chunk-ZE2JZ7R6.js +0 -12
- package/dist/cli-bundle/focused-chunks/chunk-ZLEN4HZD.js +0 -165
|
@@ -1,2 +1,2 @@
|
|
|
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]="736cf7fc-d4da-57ce-90d8-2432085dd2c8")}catch(e2){}})();import{cloneCommandOptionsSnapshot,cloneContextSnapshot,cloneGlobalOptionsSnapshot,normalizeCommandName}from"./extension-runtime-helpers.js";import{stableValueEquals}from"../shared/serialization.js";import{EXIT_CODE}from"../shared/constants.js";import{PmCliError}from"../shared/errors.js";const DEFAULT_MUTATION_GUARD_TIMEOUT_MS=5e3;async function executeRegisteredHooks(entries,hookName,context){const warnings=[];for(const entry of entries){try{await entry.run(cloneContextSnapshot(context))}catch{warnings.push(`extension_hook_failed:${entry.layer}:${entry.name}:${hookName}`)}}return warnings}async function runBeforeCommandHooks(hooks,context){return executeRegisteredHooks(hooks.beforeCommand,"beforeCommand",context)}function enforceMutationGuardDecision(decision,entry,operation){if(decision===void 0)return;if(typeof decision!=="object"||decision===null||!("allow"in decision)||decision.allow!==true&&decision.allow!==false){throw new PmCliError(`Extension mutation guard ${entry.name} returned an invalid decision.`,EXIT_CODE.CONFLICT,{code:"extension_mutation_guard_invalid_decision",reason:`${entry.layer}:${entry.name}`,nextSteps:["Return { allow: true } or a structured denial from the guard."]})}if(decision.allow)return;const denial=decision;const code=typeof denial.code==="string"?denial.code.trim():"";const remediation=typeof denial.remediation==="string"?denial.remediation.trim():"";if(code.length===0||remediation.length===0){throw new PmCliError(`Extension mutation guard ${entry.name} returned an invalid denial.`,EXIT_CODE.CONFLICT,{code:"extension_mutation_guard_invalid_denial",reason:`${entry.layer}:${entry.name}`,nextSteps:["Return non-empty code and remediation fields from the guard."]})}const message=typeof denial.message==="string"?denial.message.trim():"";throw new PmCliError(message||`Extension mutation guard ${entry.name} denied ${operation}.`,EXIT_CODE.CONFLICT,{code,reason:`${entry.layer}:${entry.name}`,nextSteps:[remediation]})}async function runBeforeMutationHooks(hooks,context){for(const entry of hooks.beforeMutation??[]){let decision;let timeoutHandle;try{const guardPromise=Promise.resolve().then(()=>entry.run({pm_root:context.pm_root,operation:context.operation,before:context.before===null?null:cloneContextSnapshot(context.before),after:context.after===null?null:cloneContextSnapshot(context.after),changed_fields:[...context.changed_fields],sdk:context.sdk}));guardPromise.catch(()=>{});decision=await Promise.race([guardPromise,new Promise((_,reject)=>{timeoutHandle=setTimeout(()=>{reject(new PmCliError(`Extension mutation guard ${entry.name} timed out before ${context.operation}.`,EXIT_CODE.CONFLICT,{code:"extension_mutation_guard_timed_out",reason:`${entry.layer}:${entry.name}`,nextSteps:["Fix or disable the stalled extension guard, then retry the mutation."]}))},DEFAULT_MUTATION_GUARD_TIMEOUT_MS);timeoutHandle.unref?.()})])}catch(error){if(error instanceof PmCliError)throw error;throw new PmCliError(`Extension mutation guard ${entry.name} failed before ${context.operation}.`,EXIT_CODE.CONFLICT,{code:"extension_mutation_guard_failed",reason:`${entry.layer}:${entry.name}`,nextSteps:["Fix or disable the failing extension guard, then retry the mutation."]})}finally{clearTimeout(timeoutHandle)}enforceMutationGuardDecision(decision,entry,context.operation)}}async function runAfterCommandHooks(hooks,context){return executeRegisteredHooks(hooks.afterCommand,"afterCommand",context)}async function runOnWriteHooks(hooks,context){return executeRegisteredHooks(hooks.onWrite,"onWrite",context)}async function runOnReadHooks(hooks,context){return executeRegisteredHooks(hooks.onRead,"onRead",context)}async function runOnIndexHooks(hooks,context){return executeRegisteredHooks(hooks.onIndex,"onIndex",context)}function describeHandlerError(error){let raw="";if(error instanceof Error&&typeof error.message==="string"){raw=error.message}else if(typeof error==="string"){raw=error}else if(typeof error==="object"&&error!==null&&typeof error.message==="string"){raw=error.message}const normalized=raw.replace(/\s+/gu," ").trim();if(normalized.length===0){return""}const maxLength=300;return normalized.length>maxLength?`${normalized.slice(0,maxLength-1)}\u2026`:normalized}function readHandlerStringField(value,field){if(typeof value!=="object"||value===null||typeof value[field]!=="string"){return void 0}const normalized=String(value[field]).replace(/\s+/gu," ").trim();return normalized.length>0?normalized.slice(0,300):void 0}function readHandlerResultExitCode(result){if(typeof result!=="object"||result===null||!Object.hasOwn(result,"exit_code")){return void 0}const exitCode=result.exit_code;if(typeof exitCode!=="number"||!Number.isInteger(exitCode)||exitCode<1||exitCode>255){throw new TypeError("Extension command result exit_code must be an integer from 1 to 255.")}return exitCode}async function runCommandHandler(commands,context){const command=normalizeCommandName(context.command);if(command.length===0){return{handled:false,result:null,warnings:[]}}const matched=[...commands.handlers].reverse().find(entry=>entry.command===command);if(!matched){return{handled:false,result:null,warnings:[]}}try{const result=await matched.run({command,args:cloneContextSnapshot(context.args),options:cloneContextSnapshot(context.options),global:cloneContextSnapshot(context.global),pm_root:context.pm_root,source_workspace_root:context.source_workspace_root,repo_root:context.repo_root,pm_root_rel:context.pm_root_rel,...context.sdk===void 0?{}:{sdk:context.sdk}});return{handled:true,result,warnings:[],...Object.fromEntries([["exitCode",readHandlerResultExitCode(result)],["errorCode",readHandlerStringField(result,"code")],["remediation",readHandlerStringField(result,"remediation")]].filter(entry=>entry[1]!==void 0))}}catch(error){const exitCode=typeof error==="object"&&error!==null&&"exitCode"in error?error.exitCode:void 0;if(typeof exitCode==="number"&&Number.isFinite(exitCode)){throw error}return{handled:false,result:null,warnings:[`extension_command_handler_failed:${matched.layer}:${matched.name}:${matched.command}`],errorMessage:describeHandlerError(error),...Object.fromEntries([["errorCode",readHandlerStringField(error,"code")],["remediation",readHandlerStringField(error,"remediation")]].filter(entry=>entry[1]!==void 0))}}}async function runParserOverride(parsers,context){const command=normalizeCommandName(context.command);if(command.length===0){return{overridden:false,context:{command,args:cloneContextSnapshot(context.args),options:cloneCommandOptionsSnapshot(context.options),global:cloneGlobalOptionsSnapshot(context.global),pm_root:context.pm_root,source_workspace_root:context.source_workspace_root,repo_root:context.repo_root,pm_root_rel:context.pm_root_rel},warnings:[]}}const matched=[...parsers.overrides].reverse().find(entry=>entry.command===command);if(!matched){return{overridden:false,context:{command,args:cloneContextSnapshot(context.args),options:cloneCommandOptionsSnapshot(context.options),global:cloneGlobalOptionsSnapshot(context.global),pm_root:context.pm_root,source_workspace_root:context.source_workspace_root,repo_root:context.repo_root,pm_root_rel:context.pm_root_rel},warnings:[]}}try{const delta=await Promise.resolve(matched.run({command,args:cloneContextSnapshot(context.args),options:cloneCommandOptionsSnapshot(context.options),global:cloneGlobalOptionsSnapshot(context.global),pm_root:context.pm_root,source_workspace_root:context.source_workspace_root,repo_root:context.repo_root,pm_root_rel:context.pm_root_rel}))??{};const nextArgs=Array.isArray(delta.args)?cloneContextSnapshot(delta.args):cloneContextSnapshot(context.args);const nextOptions=delta.options?cloneCommandOptionsSnapshot(delta.options):cloneCommandOptionsSnapshot(context.options);const nextGlobal=delta.global?cloneGlobalOptionsSnapshot(delta.global):cloneGlobalOptionsSnapshot(context.global);return{overridden:true,context:{command,args:nextArgs,options:nextOptions,global:nextGlobal,pm_root:context.pm_root,source_workspace_root:context.source_workspace_root,repo_root:context.repo_root,pm_root_rel:context.pm_root_rel},warnings:[]}}catch{return{overridden:false,context:{command,args:cloneContextSnapshot(context.args),options:cloneCommandOptionsSnapshot(context.options),global:cloneGlobalOptionsSnapshot(context.global),pm_root:context.pm_root,source_workspace_root:context.source_workspace_root,repo_root:context.repo_root,pm_root_rel:context.pm_root_rel},warnings:[`extension_parser_override_failed:${matched.layer}:${matched.name}:${matched.command}`]}}}async function runPreflightOverride(preflight,context){const baseContext={command:normalizeCommandName(context.command),args:cloneContextSnapshot(context.args),options:cloneCommandOptionsSnapshot(context.options),global:cloneGlobalOptionsSnapshot(context.global),pm_root:context.pm_root,source_workspace_root:context.source_workspace_root,repo_root:context.repo_root,pm_root_rel:context.pm_root_rel};const baseDecision=cloneContextSnapshot(context.decision);const matched=[...preflight.overrides].reverse().find(entry=>!entry.commands?.length||entry.commands.includes(baseContext.command));if(!matched){return{overridden:false,context:baseContext,decision:baseDecision,warnings:[]}}try{const delta=await Promise.resolve(matched.run({command:baseContext.command,args:cloneContextSnapshot(baseContext.args),options:cloneCommandOptionsSnapshot(baseContext.options),global:cloneGlobalOptionsSnapshot(baseContext.global),pm_root:baseContext.pm_root,source_workspace_root:baseContext.source_workspace_root,repo_root:baseContext.repo_root,pm_root_rel:baseContext.pm_root_rel,decision:cloneContextSnapshot(baseDecision)}))??{};const nextContext={command:baseContext.command,args:Array.isArray(delta.args)?cloneContextSnapshot(delta.args):baseContext.args,options:delta.options?cloneCommandOptionsSnapshot(delta.options):baseContext.options,global:delta.global?cloneGlobalOptionsSnapshot(delta.global):baseContext.global,pm_root:baseContext.pm_root,source_workspace_root:baseContext.source_workspace_root,repo_root:baseContext.repo_root,pm_root_rel:baseContext.pm_root_rel};const nextDecision={enforce_item_format_gate:typeof delta.enforce_item_format_gate==="boolean"?delta.enforce_item_format_gate:baseDecision.enforce_item_format_gate,run_preflight_item_format_sync:typeof delta.run_preflight_item_format_sync==="boolean"?delta.run_preflight_item_format_sync:baseDecision.run_preflight_item_format_sync,run_extension_migrations:typeof delta.run_extension_migrations==="boolean"?delta.run_extension_migrations:baseDecision.run_extension_migrations,enforce_mandatory_migration_gate:typeof delta.enforce_mandatory_migration_gate==="boolean"?delta.enforce_mandatory_migration_gate:baseDecision.enforce_mandatory_migration_gate};return{overridden:true,context:nextContext,decision:nextDecision,warnings:[]}}catch{return{overridden:false,context:baseContext,decision:baseDecision,warnings:[`extension_preflight_override_failed:${matched.layer}:${matched.name}`]}}}function resolveDefaultServiceResult(context){return{handled:false,result:context.payload,warnings:[]}}function matchingServiceOverrides(services,service){return[...services.overrides].reverse().filter(entry=>entry.service===service)}function buildServiceOverrideContext(context){return{service:context.service,command:context.command?normalizeCommandName(context.command):void 0,args:context.args?cloneContextSnapshot(context.args):void 0,options:context.options?cloneCommandOptionsSnapshot(context.options):void 0,global:context.global?cloneGlobalOptionsSnapshot(context.global):void 0,pm_root:context.pm_root,source_workspace_root:context.source_workspace_root,repo_root:context.repo_root,pm_root_rel:context.pm_root_rel,payload:cloneContextSnapshot(context.payload)}}function isServiceOverrideDecision(value){if(typeof value!=="object"||value===null||!Object.hasOwn(value,"handled")){return false}const handled=value.handled;return handled===true?Object.hasOwn(value,"result"):handled===false&&Reflect.ownKeys(value).length===1}function resolveServiceOverrideValue(result,context){if(isServiceOverrideDecision(result)){return result.handled?{handled:true,result:result.result}:{handled:false,result:context.payload}}if(context.service==="output_format"&&(result===null||result===void 0)){return{handled:false,result:context.payload}}return{handled:true,result}}function isLegacyOutputPayloadEcho(result,context,serviceContext){return context.service==="output_format"&&typeof result==="object"&&result!==null&&stableValueEquals(result,serviceContext.payload)}function resolveMatchedServiceDecision(matched,decision,warnings){if(!decision.handled){return void 0}if(matched.passThrough===true){warnings.push(`extension_service_pass_through_contract_violated:${matched.layer}:${matched.name}:${matched.service}`);return void 0}return{handled:true,result:decision.result,warnings}}function runServiceOverrideSync(services,context){const matches=matchingServiceOverrides(services,context.service);if(matches.length===0){return resolveDefaultServiceResult(context)}const warnings=[];for(const matched of matches){try{const serviceContext=buildServiceOverrideContext(context);const result=matched.run(serviceContext);if(result instanceof Promise){warnings.push(`extension_service_override_async_unsupported:${matched.layer}:${matched.name}:${matched.service}`);continue}if(isLegacyOutputPayloadEcho(result,context,serviceContext)){warnings.push(`extension_output_format_payload_echo_deprecated:${matched.layer}:${matched.name}`);continue}const resolved=resolveMatchedServiceDecision(matched,resolveServiceOverrideValue(result,context),warnings);if(resolved)return resolved}catch{warnings.push(`extension_service_override_failed:${matched.layer}:${matched.name}:${matched.service}`)}}return{handled:false,result:context.payload,warnings}}async function runServiceOverride(services,context){const matches=matchingServiceOverrides(services,context.service);if(matches.length===0){return resolveDefaultServiceResult(context)}const warnings=[];for(const matched of matches){try{const serviceContext=buildServiceOverrideContext(context);const result=await Promise.resolve(matched.run(serviceContext));if(isLegacyOutputPayloadEcho(result,context,serviceContext)){warnings.push(`extension_output_format_payload_echo_deprecated:${matched.layer}:${matched.name}`);continue}const resolved=resolveMatchedServiceDecision(matched,resolveServiceOverrideValue(result,context),warnings);if(resolved)return resolved}catch{warnings.push(`extension_service_override_failed:${matched.layer}:${matched.name}:${matched.service}`)}}return{handled:false,result:context.payload,warnings}}function runCommandOverride(commands,context){const command=normalizeCommandName(context.command);if(command.length===0){return{overridden:false,result:context.result,warnings:[]}}const matched=[...commands.overrides].reverse().find(entry=>entry.command===command);if(!matched){return{overridden:false,result:context.result,warnings:[]}}try{const overrideOptions=cloneCommandOptionsSnapshot(context.options);const overrideGlobal=cloneGlobalOptionsSnapshot(context.global);const overrideResult=matched.run({command,args:cloneContextSnapshot(context.args),options:overrideOptions,global:overrideGlobal,pm_root:context.pm_root,source_workspace_root:context.source_workspace_root,repo_root:context.repo_root,pm_root_rel:context.pm_root_rel,result:cloneContextSnapshot(context.result)});if(overrideResult instanceof Promise){return{overridden:false,result:context.result,warnings:[`extension_command_override_async_unsupported:${matched.layer}:${matched.name}:${matched.command}`]}}return{overridden:true,result:overrideResult,warnings:[]}}catch{return{overridden:false,result:context.result,warnings:[`extension_command_override_failed:${matched.layer}:${matched.name}:${matched.command}`]}}}function rendererOwnsContext(entry,command,result){if((entry.commands?.length??0)>0&&!entry.commands?.includes(command)){return false}if(entry.resultDiscriminator===void 0){return true}try{return entry.resultDiscriminator(cloneContextSnapshot(result))}catch{return false}}function runRendererOverride(renderers,context){const rendererCommand=typeof context.command==="string"?normalizeCommandName(context.command):"";const matched=[...renderers.overrides].reverse().find(entry=>entry.format===context.format&&rendererOwnsContext(entry,rendererCommand,context.result));if(!matched){return{overridden:false,rendered:null,warnings:[]}}try{const rendererArgs=Array.isArray(context.args)?cloneContextSnapshot(context.args):[];const rendererOptions=cloneCommandOptionsSnapshot(context.options);const rendererGlobal=cloneGlobalOptionsSnapshot(context.global);const rendererPmRoot=typeof context.pm_root==="string"?context.pm_root:"";const rendered=matched.run({format:context.format,command:rendererCommand,args:rendererArgs,options:rendererOptions,global:rendererGlobal,pm_root:rendererPmRoot,source_workspace_root:context.source_workspace_root,repo_root:context.repo_root,pm_root_rel:context.pm_root_rel,result:cloneContextSnapshot(context.result)});if(rendered===null||rendered===void 0){return{overridden:false,rendered:null,warnings:[]}}if(typeof rendered!=="string"){return{overridden:false,rendered:null,warnings:[`extension_renderer_invalid_result:${matched.layer}:${matched.name}:${matched.format}`]}}return{overridden:true,rendered,warnings:[]}}catch{return{overridden:false,rendered:null,warnings:[`extension_renderer_failed:${matched.layer}:${matched.name}:${matched.format}`]}}}export{runAfterCommandHooks,runBeforeCommandHooks,runBeforeMutationHooks,runCommandHandler,runCommandOverride,runOnIndexHooks,runOnReadHooks,runOnWriteHooks,runParserOverride,runPreflightOverride,runRendererOverride,runServiceOverride,runServiceOverrideSync};
|
|
1
|
+
(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="1dcf5e56-cb0c-5e4c-b0e8-e4dbd06187dd")}catch{}})();import{cloneCommandOptionsSnapshot,cloneContextSnapshot,cloneGlobalOptionsSnapshot,normalizeCommandName}from"./extension-runtime-helpers.js";import{stableValueEquals}from"../shared/serialization.js";import{EXIT_CODE}from"../shared/constants.js";import{PmCliError}from"../shared/errors.js";const DEFAULT_MUTATION_GUARD_TIMEOUT_MS=5e3;async function executeRegisteredHooks(entries,hookName,context){const warnings=[];for(const entry of entries)try{await entry.run(cloneContextSnapshot(context))}catch{warnings.push(`extension_hook_failed:${entry.layer}:${entry.name}:${hookName}`)}return warnings}async function runBeforeCommandHooks(hooks,context){return executeRegisteredHooks(hooks.beforeCommand,"beforeCommand",context)}function enforceMutationGuardDecision(decision,entry,operation){if(decision===void 0)return;if(typeof decision!="object"||decision===null||!("allow"in decision)||decision.allow!==!0&&decision.allow!==!1)throw new PmCliError(`Extension mutation guard ${entry.name} returned an invalid decision.`,EXIT_CODE.CONFLICT,{code:"extension_mutation_guard_invalid_decision",reason:`${entry.layer}:${entry.name}`,nextSteps:["Return { allow: true } or a structured denial from the guard."]});if(decision.allow)return;const denial=decision,code=typeof denial.code=="string"?denial.code.trim():"",remediation=typeof denial.remediation=="string"?denial.remediation.trim():"";if(code.length===0||remediation.length===0)throw new PmCliError(`Extension mutation guard ${entry.name} returned an invalid denial.`,EXIT_CODE.CONFLICT,{code:"extension_mutation_guard_invalid_denial",reason:`${entry.layer}:${entry.name}`,nextSteps:["Return non-empty code and remediation fields from the guard."]});const message=typeof denial.message=="string"?denial.message.trim():"";throw new PmCliError(message||`Extension mutation guard ${entry.name} denied ${operation}.`,EXIT_CODE.CONFLICT,{code,reason:`${entry.layer}:${entry.name}`,nextSteps:[remediation]})}async function runBeforeMutationHooks(hooks,context){for(const entry of hooks.beforeMutation??[]){let decision,timeoutHandle;try{const guardPromise=Promise.resolve().then(()=>entry.run({pm_root:context.pm_root,operation:context.operation,before:context.before===null?null:cloneContextSnapshot(context.before),after:context.after===null?null:cloneContextSnapshot(context.after),changed_fields:[...context.changed_fields],sdk:context.sdk}));guardPromise.catch(()=>{}),decision=await Promise.race([guardPromise,new Promise((_,reject)=>{timeoutHandle=setTimeout(()=>{reject(new PmCliError(`Extension mutation guard ${entry.name} timed out before ${context.operation}.`,EXIT_CODE.CONFLICT,{code:"extension_mutation_guard_timed_out",reason:`${entry.layer}:${entry.name}`,nextSteps:["Fix or disable the stalled extension guard, then retry the mutation."]}))},DEFAULT_MUTATION_GUARD_TIMEOUT_MS),timeoutHandle.unref?.()})])}catch(error){throw error instanceof PmCliError?error:new PmCliError(`Extension mutation guard ${entry.name} failed before ${context.operation}.`,EXIT_CODE.CONFLICT,{code:"extension_mutation_guard_failed",reason:`${entry.layer}:${entry.name}`,nextSteps:["Fix or disable the failing extension guard, then retry the mutation."]})}finally{clearTimeout(timeoutHandle)}enforceMutationGuardDecision(decision,entry,context.operation)}}async function runAfterCommandHooks(hooks,context){return executeRegisteredHooks(hooks.afterCommand,"afterCommand",context)}async function runOnWriteHooks(hooks,context){return executeRegisteredHooks(hooks.onWrite,"onWrite",context)}async function runOnReadHooks(hooks,context){return executeRegisteredHooks(hooks.onRead,"onRead",context)}async function runOnIndexHooks(hooks,context){return executeRegisteredHooks(hooks.onIndex,"onIndex",context)}function describeHandlerError(error){let raw="";error instanceof Error&&typeof error.message=="string"?raw=error.message:typeof error=="string"?raw=error:typeof error=="object"&&error!==null&&typeof error.message=="string"&&(raw=error.message);const normalized=raw.replace(/\s+/gu," ").trim();if(normalized.length===0)return"";const maxLength=300;return normalized.length>maxLength?`${normalized.slice(0,maxLength-1)}\u2026`:normalized}function readHandlerStringField(value,field){if(typeof value!="object"||value===null||typeof value[field]!="string")return;const normalized=String(value[field]).replace(/\s+/gu," ").trim();return normalized.length>0?normalized.slice(0,300):void 0}function readHandlerResultExitCode(result){if(typeof result!="object"||result===null||!Object.hasOwn(result,"exit_code"))return;const exitCode=result.exit_code;if(typeof exitCode!="number"||!Number.isInteger(exitCode)||exitCode<1||exitCode>255)throw new TypeError("Extension command result exit_code must be an integer from 1 to 255.");return exitCode}async function runCommandHandler(commands,context){const command=normalizeCommandName(context.command);if(command.length===0)return{handled:!1,result:null,warnings:[]};const matched=[...commands.handlers].reverse().find(entry=>entry.command===command);if(!matched)return{handled:!1,result:null,warnings:[]};try{const result=await matched.run({command,args:cloneContextSnapshot(context.args),options:cloneContextSnapshot(context.options),global:cloneContextSnapshot(context.global),pm_root:context.pm_root,source_workspace_root:context.source_workspace_root,repo_root:context.repo_root,pm_root_rel:context.pm_root_rel,...context.sdk===void 0?{}:{sdk:context.sdk}});return{handled:!0,result,warnings:[],...Object.fromEntries([["exitCode",readHandlerResultExitCode(result)],["errorCode",readHandlerStringField(result,"code")],["remediation",readHandlerStringField(result,"remediation")]].filter(entry=>entry[1]!==void 0))}}catch(error){const exitCode=typeof error=="object"&&error!==null&&"exitCode"in error?error.exitCode:void 0;if(typeof exitCode=="number"&&Number.isFinite(exitCode))throw error;return{handled:!1,result:null,warnings:[`extension_command_handler_failed:${matched.layer}:${matched.name}:${matched.command}`],errorMessage:describeHandlerError(error),...Object.fromEntries([["errorCode",readHandlerStringField(error,"code")],["remediation",readHandlerStringField(error,"remediation")]].filter(entry=>entry[1]!==void 0))}}}async function runParserOverride(parsers,context){const command=normalizeCommandName(context.command);if(command.length===0)return{overridden:!1,context:{command,args:cloneContextSnapshot(context.args),options:cloneCommandOptionsSnapshot(context.options),global:cloneGlobalOptionsSnapshot(context.global),pm_root:context.pm_root,source_workspace_root:context.source_workspace_root,repo_root:context.repo_root,pm_root_rel:context.pm_root_rel},warnings:[]};const matched=[...parsers.overrides].reverse().find(entry=>entry.command===command);if(!matched)return{overridden:!1,context:{command,args:cloneContextSnapshot(context.args),options:cloneCommandOptionsSnapshot(context.options),global:cloneGlobalOptionsSnapshot(context.global),pm_root:context.pm_root,source_workspace_root:context.source_workspace_root,repo_root:context.repo_root,pm_root_rel:context.pm_root_rel},warnings:[]};try{const delta=await Promise.resolve(matched.run({command,args:cloneContextSnapshot(context.args),options:cloneCommandOptionsSnapshot(context.options),global:cloneGlobalOptionsSnapshot(context.global),pm_root:context.pm_root,source_workspace_root:context.source_workspace_root,repo_root:context.repo_root,pm_root_rel:context.pm_root_rel}))??{},nextArgs=Array.isArray(delta.args)?cloneContextSnapshot(delta.args):cloneContextSnapshot(context.args),nextOptions=delta.options?cloneCommandOptionsSnapshot(delta.options):cloneCommandOptionsSnapshot(context.options),nextGlobal=delta.global?cloneGlobalOptionsSnapshot(delta.global):cloneGlobalOptionsSnapshot(context.global);return{overridden:!0,context:{command,args:nextArgs,options:nextOptions,global:nextGlobal,pm_root:context.pm_root,source_workspace_root:context.source_workspace_root,repo_root:context.repo_root,pm_root_rel:context.pm_root_rel},warnings:[]}}catch{return{overridden:!1,context:{command,args:cloneContextSnapshot(context.args),options:cloneCommandOptionsSnapshot(context.options),global:cloneGlobalOptionsSnapshot(context.global),pm_root:context.pm_root,source_workspace_root:context.source_workspace_root,repo_root:context.repo_root,pm_root_rel:context.pm_root_rel},warnings:[`extension_parser_override_failed:${matched.layer}:${matched.name}:${matched.command}`]}}}async function runPreflightOverride(preflight,context){const baseContext={command:normalizeCommandName(context.command),args:cloneContextSnapshot(context.args),options:cloneCommandOptionsSnapshot(context.options),global:cloneGlobalOptionsSnapshot(context.global),pm_root:context.pm_root,source_workspace_root:context.source_workspace_root,repo_root:context.repo_root,pm_root_rel:context.pm_root_rel},baseDecision=cloneContextSnapshot(context.decision),matched=[...preflight.overrides].reverse().find(entry=>!entry.commands?.length||entry.commands.includes(baseContext.command));if(!matched)return{overridden:!1,context:baseContext,decision:baseDecision,warnings:[]};try{const delta=await Promise.resolve(matched.run({command:baseContext.command,args:cloneContextSnapshot(baseContext.args),options:cloneCommandOptionsSnapshot(baseContext.options),global:cloneGlobalOptionsSnapshot(baseContext.global),pm_root:baseContext.pm_root,source_workspace_root:baseContext.source_workspace_root,repo_root:baseContext.repo_root,pm_root_rel:baseContext.pm_root_rel,decision:cloneContextSnapshot(baseDecision)}))??{},nextContext={command:baseContext.command,args:Array.isArray(delta.args)?cloneContextSnapshot(delta.args):baseContext.args,options:delta.options?cloneCommandOptionsSnapshot(delta.options):baseContext.options,global:delta.global?cloneGlobalOptionsSnapshot(delta.global):baseContext.global,pm_root:baseContext.pm_root,source_workspace_root:baseContext.source_workspace_root,repo_root:baseContext.repo_root,pm_root_rel:baseContext.pm_root_rel},nextDecision={enforce_item_format_gate:typeof delta.enforce_item_format_gate=="boolean"?delta.enforce_item_format_gate:baseDecision.enforce_item_format_gate,run_preflight_item_format_sync:typeof delta.run_preflight_item_format_sync=="boolean"?delta.run_preflight_item_format_sync:baseDecision.run_preflight_item_format_sync,run_extension_migrations:typeof delta.run_extension_migrations=="boolean"?delta.run_extension_migrations:baseDecision.run_extension_migrations,enforce_mandatory_migration_gate:typeof delta.enforce_mandatory_migration_gate=="boolean"?delta.enforce_mandatory_migration_gate:baseDecision.enforce_mandatory_migration_gate};return{overridden:!0,context:nextContext,decision:nextDecision,warnings:[]}}catch{return{overridden:!1,context:baseContext,decision:baseDecision,warnings:[`extension_preflight_override_failed:${matched.layer}:${matched.name}`]}}}function resolveDefaultServiceResult(context){return{handled:!1,result:context.payload,warnings:[]}}function matchingServiceOverrides(services,service){return[...services.overrides].reverse().filter(entry=>entry.service===service)}function buildServiceOverrideContext(context){return{service:context.service,command:context.command?normalizeCommandName(context.command):void 0,args:context.args?cloneContextSnapshot(context.args):void 0,options:context.options?cloneCommandOptionsSnapshot(context.options):void 0,global:context.global?cloneGlobalOptionsSnapshot(context.global):void 0,pm_root:context.pm_root,source_workspace_root:context.source_workspace_root,repo_root:context.repo_root,pm_root_rel:context.pm_root_rel,payload:cloneContextSnapshot(context.payload)}}function isServiceOverrideDecision(value){if(typeof value!="object"||value===null||!Object.hasOwn(value,"handled"))return!1;const handled=value.handled;return handled===!0?Object.hasOwn(value,"result"):handled===!1&&Reflect.ownKeys(value).length===1}function resolveServiceOverrideValue(result,context){return isServiceOverrideDecision(result)?result.handled?{handled:!0,result:result.result}:{handled:!1,result:context.payload}:context.service==="output_format"&&result==null?{handled:!1,result:context.payload}:{handled:!0,result}}function isLegacyOutputPayloadEcho(result,context,serviceContext){return context.service==="output_format"&&typeof result=="object"&&result!==null&&stableValueEquals(result,serviceContext.payload)}function resolveMatchedServiceDecision(matched,decision,warnings){if(decision.handled){if(matched.passThrough===!0){warnings.push(`extension_service_pass_through_contract_violated:${matched.layer}:${matched.name}:${matched.service}`);return}return{handled:!0,result:decision.result,warnings}}}function runServiceOverrideSync(services,context){const matches=matchingServiceOverrides(services,context.service);if(matches.length===0)return resolveDefaultServiceResult(context);const warnings=[];for(const matched of matches)try{const serviceContext=buildServiceOverrideContext(context),result=matched.run(serviceContext);if(result instanceof Promise){warnings.push(`extension_service_override_async_unsupported:${matched.layer}:${matched.name}:${matched.service}`);continue}if(isLegacyOutputPayloadEcho(result,context,serviceContext)){warnings.push(`extension_output_format_payload_echo_deprecated:${matched.layer}:${matched.name}`);continue}const resolved=resolveMatchedServiceDecision(matched,resolveServiceOverrideValue(result,context),warnings);if(resolved)return resolved}catch{warnings.push(`extension_service_override_failed:${matched.layer}:${matched.name}:${matched.service}`)}return{handled:!1,result:context.payload,warnings}}async function runServiceOverride(services,context){const matches=matchingServiceOverrides(services,context.service);if(matches.length===0)return resolveDefaultServiceResult(context);const warnings=[];for(const matched of matches)try{const serviceContext=buildServiceOverrideContext(context),result=await Promise.resolve(matched.run(serviceContext));if(isLegacyOutputPayloadEcho(result,context,serviceContext)){warnings.push(`extension_output_format_payload_echo_deprecated:${matched.layer}:${matched.name}`);continue}const resolved=resolveMatchedServiceDecision(matched,resolveServiceOverrideValue(result,context),warnings);if(resolved)return resolved}catch{warnings.push(`extension_service_override_failed:${matched.layer}:${matched.name}:${matched.service}`)}return{handled:!1,result:context.payload,warnings}}function runCommandOverride(commands,context){const command=normalizeCommandName(context.command);if(command.length===0)return{overridden:!1,result:context.result,warnings:[]};const matched=[...commands.overrides].reverse().find(entry=>entry.command===command);if(!matched)return{overridden:!1,result:context.result,warnings:[]};try{const overrideOptions=cloneCommandOptionsSnapshot(context.options),overrideGlobal=cloneGlobalOptionsSnapshot(context.global),overrideResult=matched.run({command,args:cloneContextSnapshot(context.args),options:overrideOptions,global:overrideGlobal,pm_root:context.pm_root,source_workspace_root:context.source_workspace_root,repo_root:context.repo_root,pm_root_rel:context.pm_root_rel,result:cloneContextSnapshot(context.result)});return overrideResult instanceof Promise?{overridden:!1,result:context.result,warnings:[`extension_command_override_async_unsupported:${matched.layer}:${matched.name}:${matched.command}`]}:{overridden:!0,result:overrideResult,warnings:[]}}catch{return{overridden:!1,result:context.result,warnings:[`extension_command_override_failed:${matched.layer}:${matched.name}:${matched.command}`]}}}function rendererOwnsContext(entry,command,result){if((entry.commands?.length??0)>0&&!entry.commands?.includes(command))return!1;if(entry.resultDiscriminator===void 0)return!0;try{return entry.resultDiscriminator(cloneContextSnapshot(result))}catch{return!1}}function runRendererOverride(renderers,context){const rendererCommand=typeof context.command=="string"?normalizeCommandName(context.command):"",matched=[...renderers.overrides].reverse().find(entry=>entry.format===context.format&&rendererOwnsContext(entry,rendererCommand,context.result));if(!matched)return{overridden:!1,rendered:null,warnings:[]};try{const rendererArgs=Array.isArray(context.args)?cloneContextSnapshot(context.args):[],rendererOptions=cloneCommandOptionsSnapshot(context.options),rendererGlobal=cloneGlobalOptionsSnapshot(context.global),rendererPmRoot=typeof context.pm_root=="string"?context.pm_root:"",rendered=matched.run({format:context.format,command:rendererCommand,args:rendererArgs,options:rendererOptions,global:rendererGlobal,pm_root:rendererPmRoot,source_workspace_root:context.source_workspace_root,repo_root:context.repo_root,pm_root_rel:context.pm_root_rel,result:cloneContextSnapshot(context.result)});return rendered==null?{overridden:!1,rendered:null,warnings:[]}:typeof rendered!="string"?{overridden:!1,rendered:null,warnings:[`extension_renderer_invalid_result:${matched.layer}:${matched.name}:${matched.format}`]}:{overridden:!0,rendered,warnings:[]}}catch{return{overridden:!1,rendered:null,warnings:[`extension_renderer_failed:${matched.layer}:${matched.name}:${matched.format}`]}}}export{runAfterCommandHooks,runBeforeCommandHooks,runBeforeMutationHooks,runCommandHandler,runCommandOverride,runOnIndexHooks,runOnReadHooks,runOnWriteHooks,runParserOverride,runPreflightOverride,runRendererOverride,runServiceOverride,runServiceOverrideSync};
|
|
2
2
|
//# sourceMappingURL=extension-hook-runtime.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
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]="8ea4597b-6a2b-5061-b490-d8aff3fbe7aa")}catch(e2){}})();import{KNOWN_EXTENSION_POLICY_MODES,KNOWN_EXTENSION_POLICY_SURFACES,KNOWN_EXTENSION_SANDBOX_PROFILES,KNOWN_EXTENSION_TRUST_MODES,KNOWN_PM_MAX_VERSION_EXCEEDED_MODES}from"./extension-types.js";import{isKnownExtensionCapability}from"./extension-capability-aliases.js";import{normalizeCommandName}from"./extension-runtime-helpers.js";function normalizePolicyName(value){if(typeof value!=="string"){return""}return value.trim().toLowerCase()}function normalizePolicyStringSet(values){return new Set((values??[]).map(value=>value.trim().toLowerCase()).filter(value=>value.length>0))}function normalizePolicySurfaceToken(value){const normalized=value.trim().toLowerCase();if(normalized.length===0){return""}const segments=normalized.split(/[.:/]/).map(segment=>segment.replace(/[\s_-]+/g,"")).filter(segment=>segment.length>0);if(segments.length===0){return""}if(segments.length===1){return segments[0]}return`${segments[0]}.${segments.slice(1).join("")}`}function normalizePolicySurfaceSet(values){return new Set((values??[]).map(value=>normalizePolicySurfaceToken(value)).filter(value=>value.length>0))}function normalizePolicyMode(value){const normalized=normalizePolicyName(value);if(KNOWN_EXTENSION_POLICY_MODES.includes(normalized)){return normalized}return"off"}function normalizePolicyTrustMode(value){const normalized=normalizePolicyName(value);if(KNOWN_EXTENSION_TRUST_MODES.includes(normalized)){return normalized}return"off"}function normalizePolicySandboxProfile(value){const normalized=normalizePolicyName(value);if(KNOWN_EXTENSION_SANDBOX_PROFILES.includes(normalized)){return normalized}return"none"}function normalizePmMaxVersionExceededModeValue(value){if(typeof value!=="string"){return void 0}const normalized=value.trim().toLowerCase();return KNOWN_PM_MAX_VERSION_EXCEEDED_MODES.includes(normalized)?normalized:void 0}function normalizePmMaxVersionExceededMode(value){if(typeof value==="string"){const mode=normalizePmMaxVersionExceededModeValue(value)??"block";return{global:mode,project:mode}}if(typeof value==="object"&&value!==null&&!Array.isArray(value)){return{global:normalizePmMaxVersionExceededModeValue(value.global)??"block",project:normalizePmMaxVersionExceededModeValue(value.project)??"block"}}return{global:"block",project:"block"}}function serializePmMaxVersionExceededMode(mode){return mode.global===mode.project?mode.global:{global:mode.global,project:mode.project}}function toSortedList(values){return[...new Set(values)].sort((left,right)=>left.localeCompare(right))}function buildExtensionPolicyOverride(rawOverride){const name=normalizePolicyName(rawOverride.name);if(name.length===0){return null}return{name,normalized:{name,disabled:rawOverride.disabled===true,requireTrusted:rawOverride.require_trusted===true,requireProvenance:rawOverride.require_provenance===true,sandboxProfile:rawOverride.sandbox_profile!==void 0?normalizePolicySandboxProfile(rawOverride.sandbox_profile):void 0,allowedCapabilities:normalizePolicyStringSet(rawOverride.allowed_capabilities),blockedCapabilities:normalizePolicyStringSet(rawOverride.blocked_capabilities),allowedSurfaces:normalizePolicySurfaceSet(rawOverride.allowed_surfaces),blockedSurfaces:normalizePolicySurfaceSet(rawOverride.blocked_surfaces),allowedCommands:normalizePolicyStringSet(rawOverride.allowed_commands),blockedCommands:normalizePolicyStringSet(rawOverride.blocked_commands),allowedActions:normalizePolicyStringSet(rawOverride.allowed_actions),blockedActions:normalizePolicyStringSet(rawOverride.blocked_actions),allowedServices:normalizePolicyStringSet(rawOverride.allowed_services),blockedServices:normalizePolicyStringSet(rawOverride.blocked_services)}}}function collectExtensionPolicyOverrides(rawOverrides){const overridesByName=new Map;for(const rawOverride of rawOverrides??[]){const built=buildExtensionPolicyOverride(rawOverride);if(built){overridesByName.set(built.name,built.normalized)}}return overridesByName}function collectExtensionPolicyWarnings(normalized){const warnings=[];const sortedOverrides=[...normalized.overridesByName.values()].sort((left,right)=>left.name.localeCompare(right.name));for(const capability of toSortedList([...normalized.allowedCapabilities,...normalized.blockedCapabilities])){if(!isKnownExtensionCapability(capability)){warnings.push(`extension_policy_unknown_capability:${capability}`)}}for(const override of sortedOverrides){for(const capability of toSortedList([...override.allowedCapabilities,...override.blockedCapabilities])){if(!isKnownExtensionCapability(capability)){warnings.push(`extension_policy_unknown_capability:${override.name}:${capability}`)}}}const knownSurfaces=new Set(KNOWN_EXTENSION_POLICY_SURFACES);for(const surface of toSortedList([...normalized.allowedSurfaces,...normalized.blockedSurfaces])){if(!knownSurfaces.has(surface)){warnings.push(`extension_policy_unknown_surface:${surface}`)}}for(const override of sortedOverrides){for(const surface of toSortedList([...override.allowedSurfaces,...override.blockedSurfaces])){if(!knownSurfaces.has(surface)){warnings.push(`extension_policy_unknown_surface:${override.name}:${surface}`)}}}return[...new Set(warnings)].sort((left,right)=>left.localeCompare(right))}function normalizeExtensionPolicy(settings){const policy=settings.extensions?.policy??{};const allowedCapabilities=normalizePolicyStringSet(policy.allowed_capabilities);const blockedCapabilities=normalizePolicyStringSet(policy.blocked_capabilities);const allowedSurfaces=normalizePolicySurfaceSet(policy.allowed_surfaces);const blockedSurfaces=normalizePolicySurfaceSet(policy.blocked_surfaces);const overridesByName=collectExtensionPolicyOverrides(policy.extension_overrides);return{mode:normalizePolicyMode(policy.mode),trustMode:normalizePolicyTrustMode(policy.trust_mode),pmMaxVersionExceededMode:normalizePmMaxVersionExceededMode(policy.pm_max_version_exceeded_mode),requireProvenance:policy.require_provenance===true,trustedExtensions:normalizePolicyStringSet(policy.trusted_extensions),defaultSandboxProfile:normalizePolicySandboxProfile(policy.default_sandbox_profile),allowedExtensions:normalizePolicyStringSet(policy.allowed_extensions),blockedExtensions:normalizePolicyStringSet(policy.blocked_extensions),allowedCapabilities,blockedCapabilities,allowedSurfaces,blockedSurfaces,allowedCommands:normalizePolicyStringSet(policy.allowed_commands),blockedCommands:normalizePolicyStringSet(policy.blocked_commands),allowedActions:normalizePolicyStringSet(policy.allowed_actions),blockedActions:normalizePolicyStringSet(policy.blocked_actions),allowedServices:normalizePolicyStringSet(policy.allowed_services),blockedServices:normalizePolicyStringSet(policy.blocked_services),overridesByName,warnings:collectExtensionPolicyWarnings({allowedCapabilities,blockedCapabilities,allowedSurfaces,blockedSurfaces,overridesByName})}}function serializeExtensionPolicy(policy){const overrides=[...policy.overridesByName.values()].sort((left,right)=>left.name.localeCompare(right.name)).map(override=>({name:override.name,...override.disabled?{disabled:true}:{},...override.requireTrusted?{require_trusted:true}:{},...override.requireProvenance?{require_provenance:true}:{},...override.sandboxProfile?{sandbox_profile:override.sandboxProfile}:{},...override.allowedCapabilities.size>0?{allowed_capabilities:toSortedList(override.allowedCapabilities)}:{},...override.blockedCapabilities.size>0?{blocked_capabilities:toSortedList(override.blockedCapabilities)}:{},...override.allowedSurfaces.size>0?{allowed_surfaces:toSortedList(override.allowedSurfaces)}:{},...override.blockedSurfaces.size>0?{blocked_surfaces:toSortedList(override.blockedSurfaces)}:{},...override.allowedCommands.size>0?{allowed_commands:toSortedList(override.allowedCommands)}:{},...override.blockedCommands.size>0?{blocked_commands:toSortedList(override.blockedCommands)}:{},...override.allowedActions.size>0?{allowed_actions:toSortedList(override.allowedActions)}:{},...override.blockedActions.size>0?{blocked_actions:toSortedList(override.blockedActions)}:{},...override.allowedServices.size>0?{allowed_services:toSortedList(override.allowedServices)}:{},...override.blockedServices.size>0?{blocked_services:toSortedList(override.blockedServices)}:{}}));return{mode:policy.mode,trust_mode:policy.trustMode,pm_max_version_exceeded_mode:serializePmMaxVersionExceededMode(policy.pmMaxVersionExceededMode),require_provenance:policy.requireProvenance,trusted_extensions:toSortedList(policy.trustedExtensions),default_sandbox_profile:policy.defaultSandboxProfile,allowed_extensions:toSortedList(policy.allowedExtensions),blocked_extensions:toSortedList(policy.blockedExtensions),allowed_capabilities:toSortedList(policy.allowedCapabilities),blocked_capabilities:toSortedList(policy.blockedCapabilities),allowed_surfaces:toSortedList(policy.allowedSurfaces),blocked_surfaces:toSortedList(policy.blockedSurfaces),allowed_commands:toSortedList(policy.allowedCommands),blocked_commands:toSortedList(policy.blockedCommands),allowed_actions:toSortedList(policy.allowedActions),blocked_actions:toSortedList(policy.blockedActions),allowed_services:toSortedList(policy.allowedServices),blocked_services:toSortedList(policy.blockedServices),extension_overrides:overrides}}function hydrateExtensionPolicy(policy){const overridesByName=collectExtensionPolicyOverrides(policy.extension_overrides);return{mode:normalizePolicyMode(policy.mode),trustMode:normalizePolicyTrustMode(policy.trust_mode),pmMaxVersionExceededMode:normalizePmMaxVersionExceededMode(policy.pm_max_version_exceeded_mode),requireProvenance:policy.require_provenance===true,trustedExtensions:normalizePolicyStringSet(policy.trusted_extensions),defaultSandboxProfile:normalizePolicySandboxProfile(policy.default_sandbox_profile),allowedExtensions:normalizePolicyStringSet(policy.allowed_extensions),blockedExtensions:normalizePolicyStringSet(policy.blocked_extensions),allowedCapabilities:normalizePolicyStringSet(policy.allowed_capabilities),blockedCapabilities:normalizePolicyStringSet(policy.blocked_capabilities),allowedSurfaces:normalizePolicySurfaceSet(policy.allowed_surfaces),blockedSurfaces:normalizePolicySurfaceSet(policy.blocked_surfaces),allowedCommands:normalizePolicyStringSet(policy.allowed_commands),blockedCommands:normalizePolicyStringSet(policy.blocked_commands),allowedActions:normalizePolicyStringSet(policy.allowed_actions),blockedActions:normalizePolicyStringSet(policy.blocked_actions),allowedServices:normalizePolicyStringSet(policy.allowed_services),blockedServices:normalizePolicyStringSet(policy.blocked_services),overridesByName,warnings:[]}}function resolvePolicyOverride(policy,extensionName){return policy.overridesByName.get(normalizePolicyName(extensionName))??null}function evaluatePolicySet(allowed,blocked,value,notAllowlistedReason,blockedReason){if(blocked.has(value)){return blockedReason}if(allowed.size>0&&!allowed.has(value)){return notAllowlistedReason}return null}function resolvePolicyCapabilityReason(policy,extension,capability){const normalizedCapability=capability.trim().toLowerCase();const override=resolvePolicyOverride(policy,extension.name);const allowed=override&&override.allowedCapabilities.size>0?override.allowedCapabilities:policy.allowedCapabilities;const blocked=new Set([...policy.blockedCapabilities,...override?override.blockedCapabilities:[]]);return evaluatePolicySet(allowed,blocked,normalizedCapability,"capability_not_allowlisted","capability_blocked")}function resolvePolicySurfaceReason(policy,extension,surface){const override=resolvePolicyOverride(policy,extension.name);const allowed=override&&override.allowedSurfaces.size>0?override.allowedSurfaces:policy.allowedSurfaces;const blocked=new Set([...policy.blockedSurfaces,...override?override.blockedSurfaces:[]]);return evaluatePolicySet(allowed,blocked,surface,"surface_not_allowlisted","surface_blocked")}function resolvePolicyCommandReason(policy,extension,command){const normalizedCommand=normalizeCommandName(command);if(normalizedCommand.length===0){return null}const override=resolvePolicyOverride(policy,extension.name);const allowed=override&&override.allowedCommands.size>0?override.allowedCommands:policy.allowedCommands;const blocked=new Set([...policy.blockedCommands,...override?override.blockedCommands:[]]);return evaluatePolicySet(allowed,blocked,normalizedCommand,"command_not_allowlisted","command_blocked")}function resolvePolicyActionReason(policy,extension,action){const normalizedAction=normalizePolicyName(action).replace(/\s+/g,"-");if(normalizedAction.length===0){return null}const override=resolvePolicyOverride(policy,extension.name);const allowed=override&&override.allowedActions.size>0?override.allowedActions:policy.allowedActions;const blocked=new Set([...policy.blockedActions,...override?override.blockedActions:[]]);return evaluatePolicySet(allowed,blocked,normalizedAction,"action_not_allowlisted","action_blocked")}function resolvePolicyServiceReason(policy,extension,service){const normalizedService=normalizePolicyName(service);if(normalizedService.length===0){return null}const override=resolvePolicyOverride(policy,extension.name);const allowed=override&&override.allowedServices.size>0?override.allowedServices:policy.allowedServices;const blocked=new Set([...policy.blockedServices,...override?override.blockedServices:[]]);return evaluatePolicySet(allowed,blocked,normalizedService,"service_not_allowlisted","service_blocked")}function resolvePolicyExtensionReason(policy,extension){const name=normalizePolicyName(extension.name);const override=resolvePolicyOverride(policy,extension.name);if(override?.disabled===true){return"extension_override_disabled"}return evaluatePolicySet(policy.allowedExtensions,policy.blockedExtensions,name,"extension_not_allowlisted","extension_blocked")}function resolvePolicyTrustReason(policy,extension){if(policy.trustMode==="off"){return null}const override=resolvePolicyOverride(policy,extension.name);const name=normalizePolicyName(extension.name);const trusted=extension.trusted===true;const provenanceVerified=extension.provenanceVerified===true;if(policy.trustedExtensions.size>0&&!policy.trustedExtensions.has(name)){return"extension_not_trusted"}if((override?.requireTrusted===true||policy.trustMode==="warn"||policy.trustMode==="enforce")&&!trusted){return"extension_untrusted"}if((policy.requireProvenance||override?.requireProvenance===true)&&!provenanceVerified){return"provenance_missing_or_unverified"}return null}function resolvePolicySandboxReason(policy,extension){if(policy.mode==="off"){return null}const override=resolvePolicyOverride(policy,extension.name);const profile=override?.sandboxProfile??extension.sandboxProfile??policy.defaultSandboxProfile;if(profile==="none"){return null}const permissions=extension.permissions;if(!permissions){return"sandbox_permissions_missing"}const hasPermission=name=>permissions[name]===true;if(profile==="restricted"){if(hasPermission("process_spawn")){return"sandbox_restricted_disallows_process_spawn"}if(hasPermission("env_write")){return"sandbox_restricted_disallows_env_write"}return null}if(hasPermission("process_spawn")){return"sandbox_strict_disallows_process_spawn"}if(hasPermission("network")){return"sandbox_strict_disallows_network"}if(hasPermission("fs_write")){return"sandbox_strict_disallows_fs_write"}if(hasPermission("env_write")){return"sandbox_strict_disallows_env_write"}return null}function buildPolicyWarning(mode,scope,extension,reason,details={}){const tokens=Object.entries(details).sort((left,right)=>left[0].localeCompare(right[0])).map(([key,value])=>`${key}=${value}`).join(":");const suffix=tokens.length>0?`:${tokens}`:"";return`extension_policy_${mode}_${scope}:${extension.layer}:${extension.name}:reason=${reason}${suffix}`}function evaluateExtensionPolicyForExtension(policy,extension){if(policy.mode==="off"&&policy.trustMode==="off"){return{allowed:true,warning:null}}const violations=[];const reason=resolvePolicyExtensionReason(policy,extension);if(reason){violations.push({reason,scope:"extension",mode:policy.mode})}const trustReason=resolvePolicyTrustReason(policy,extension);if(trustReason){violations.push({reason:trustReason,scope:"trust",mode:policy.trustMode})}const sandboxReason=resolvePolicySandboxReason(policy,extension);if(sandboxReason){violations.push({reason:sandboxReason,scope:"extension",mode:policy.mode})}const enforced=violations.find(violation=>violation.mode==="enforce");if(enforced){return{allowed:false,warning:buildPolicyWarning("blocked",enforced.scope,extension,enforced.reason)}}const warned=violations.find(violation=>violation.mode==="warn");if(warned){return{allowed:true,warning:buildPolicyWarning("violation",warned.scope,extension,warned.reason)}}return{allowed:true,warning:null}}function evaluateExtensionPolicyForCapability(policy,extension,capability){if(policy.mode==="off"){return{allowed:true,warning:null}}const reason=resolvePolicyCapabilityReason(policy,extension,capability);if(!reason){return{allowed:true,warning:null}}return{allowed:policy.mode==="warn",warning:buildPolicyWarning(policy.mode==="warn"?"violation":"blocked","capability",extension,reason,{capability:capability.trim().toLowerCase()})}}function resolveRegistrationPolicyReason(policy,extension,surface,capability,detail){const capabilityReason=typeof capability==="string"?resolvePolicyCapabilityReason(policy,extension,capability):null;const surfaceReason=resolvePolicySurfaceReason(policy,extension,surface);const commandReason=detail.command?resolvePolicyCommandReason(policy,extension,detail.command):null;const actionReason=detail.action?resolvePolicyActionReason(policy,extension,detail.action):null;const serviceReason=detail.service?resolvePolicyServiceReason(policy,extension,detail.service):null;return capabilityReason??surfaceReason??commandReason??actionReason??serviceReason}function buildRegistrationPolicyWarningDetails(method,surface,capability,detail){const warningDetails={method:normalizePolicyName(method).replace(/\s+/g,"_"),surface};if(capability){warningDetails.capability=capability}if(detail.command){warningDetails.command=normalizeCommandName(detail.command)}if(detail.action){warningDetails.action=normalizePolicyName(detail.action).replace(/\s+/g,"-")}if(detail.service){warningDetails.service=normalizePolicyName(detail.service)}return warningDetails}function evaluateExtensionPolicyForRegistration(policy,extension,surface,method,capability,details){if(policy.mode==="off"){return{allowed:true,warning:null}}const detail=details??{};const reason=resolveRegistrationPolicyReason(policy,extension,surface,capability,detail);if(!reason){return{allowed:true,warning:null}}const warning=buildPolicyWarning(policy.mode==="warn"?"violation":"blocked","registration",extension,reason,buildRegistrationPolicyWarningDetails(method,surface,capability,detail));return{allowed:policy.mode==="warn",warning}}export{evaluateExtensionPolicyForCapability,evaluateExtensionPolicyForExtension,evaluateExtensionPolicyForRegistration,hydrateExtensionPolicy,normalizeExtensionPolicy,normalizePmMaxVersionExceededMode,normalizePolicySandboxProfile,serializeExtensionPolicy};
|
|
1
|
+
(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="bb1b4879-079c-50d4-afa5-e8a36ead2e5c")}catch{}})();import{KNOWN_EXTENSION_POLICY_MODES,KNOWN_EXTENSION_POLICY_SURFACES,KNOWN_EXTENSION_SANDBOX_PROFILES,KNOWN_EXTENSION_TRUST_MODES,KNOWN_PM_MAX_VERSION_EXCEEDED_MODES}from"./extension-types.js";import{isKnownExtensionCapability}from"./extension-capability-aliases.js";import{normalizeCommandName}from"./extension-runtime-helpers.js";function normalizePolicyName(value){return typeof value!="string"?"":value.trim().toLowerCase()}function normalizePolicyStringSet(values){return new Set((values??[]).map(value=>value.trim().toLowerCase()).filter(value=>value.length>0))}function normalizePolicySurfaceToken(value){const normalized=value.trim().toLowerCase();if(normalized.length===0)return"";const segments=normalized.split(/[.:/]/).map(segment=>segment.replace(/[\s_-]+/g,"")).filter(segment=>segment.length>0);return segments.length===0?"":segments.length===1?segments[0]:`${segments[0]}.${segments.slice(1).join("")}`}function normalizePolicySurfaceSet(values){return new Set((values??[]).map(value=>normalizePolicySurfaceToken(value)).filter(value=>value.length>0))}function normalizePolicyMode(value){const normalized=normalizePolicyName(value);return KNOWN_EXTENSION_POLICY_MODES.includes(normalized)?normalized:"off"}function normalizePolicyTrustMode(value){const normalized=normalizePolicyName(value);return KNOWN_EXTENSION_TRUST_MODES.includes(normalized)?normalized:"off"}function normalizePolicySandboxProfile(value){const normalized=normalizePolicyName(value);return KNOWN_EXTENSION_SANDBOX_PROFILES.includes(normalized)?normalized:"none"}function normalizePmMaxVersionExceededModeValue(value){if(typeof value!="string")return;const normalized=value.trim().toLowerCase();return KNOWN_PM_MAX_VERSION_EXCEEDED_MODES.includes(normalized)?normalized:void 0}function normalizePmMaxVersionExceededMode(value){if(typeof value=="string"){const mode=normalizePmMaxVersionExceededModeValue(value)??"block";return{global:mode,project:mode}}return typeof value=="object"&&value!==null&&!Array.isArray(value)?{global:normalizePmMaxVersionExceededModeValue(value.global)??"block",project:normalizePmMaxVersionExceededModeValue(value.project)??"block"}:{global:"block",project:"block"}}function serializePmMaxVersionExceededMode(mode){return mode.global===mode.project?mode.global:{global:mode.global,project:mode.project}}function toSortedList(values){return[...new Set(values)].sort((left,right)=>left.localeCompare(right))}function buildExtensionPolicyOverride(rawOverride){const name=normalizePolicyName(rawOverride.name);return name.length===0?null:{name,normalized:{name,disabled:rawOverride.disabled===!0,requireTrusted:rawOverride.require_trusted===!0,requireProvenance:rawOverride.require_provenance===!0,sandboxProfile:rawOverride.sandbox_profile!==void 0?normalizePolicySandboxProfile(rawOverride.sandbox_profile):void 0,allowedCapabilities:normalizePolicyStringSet(rawOverride.allowed_capabilities),blockedCapabilities:normalizePolicyStringSet(rawOverride.blocked_capabilities),allowedSurfaces:normalizePolicySurfaceSet(rawOverride.allowed_surfaces),blockedSurfaces:normalizePolicySurfaceSet(rawOverride.blocked_surfaces),allowedCommands:normalizePolicyStringSet(rawOverride.allowed_commands),blockedCommands:normalizePolicyStringSet(rawOverride.blocked_commands),allowedActions:normalizePolicyStringSet(rawOverride.allowed_actions),blockedActions:normalizePolicyStringSet(rawOverride.blocked_actions),allowedServices:normalizePolicyStringSet(rawOverride.allowed_services),blockedServices:normalizePolicyStringSet(rawOverride.blocked_services)}}}function collectExtensionPolicyOverrides(rawOverrides){const overridesByName=new Map;for(const rawOverride of rawOverrides??[]){const built=buildExtensionPolicyOverride(rawOverride);built&&overridesByName.set(built.name,built.normalized)}return overridesByName}function collectExtensionPolicyWarnings(normalized){const warnings=[],sortedOverrides=[...normalized.overridesByName.values()].sort((left,right)=>left.name.localeCompare(right.name));for(const capability of toSortedList([...normalized.allowedCapabilities,...normalized.blockedCapabilities]))isKnownExtensionCapability(capability)||warnings.push(`extension_policy_unknown_capability:${capability}`);for(const override of sortedOverrides)for(const capability of toSortedList([...override.allowedCapabilities,...override.blockedCapabilities]))isKnownExtensionCapability(capability)||warnings.push(`extension_policy_unknown_capability:${override.name}:${capability}`);const knownSurfaces=new Set(KNOWN_EXTENSION_POLICY_SURFACES);for(const surface of toSortedList([...normalized.allowedSurfaces,...normalized.blockedSurfaces]))knownSurfaces.has(surface)||warnings.push(`extension_policy_unknown_surface:${surface}`);for(const override of sortedOverrides)for(const surface of toSortedList([...override.allowedSurfaces,...override.blockedSurfaces]))knownSurfaces.has(surface)||warnings.push(`extension_policy_unknown_surface:${override.name}:${surface}`);return[...new Set(warnings)].sort((left,right)=>left.localeCompare(right))}function normalizeExtensionPolicy(settings){const policy=settings.extensions?.policy??{},allowedCapabilities=normalizePolicyStringSet(policy.allowed_capabilities),blockedCapabilities=normalizePolicyStringSet(policy.blocked_capabilities),allowedSurfaces=normalizePolicySurfaceSet(policy.allowed_surfaces),blockedSurfaces=normalizePolicySurfaceSet(policy.blocked_surfaces),overridesByName=collectExtensionPolicyOverrides(policy.extension_overrides);return{mode:normalizePolicyMode(policy.mode),trustMode:normalizePolicyTrustMode(policy.trust_mode),pmMaxVersionExceededMode:normalizePmMaxVersionExceededMode(policy.pm_max_version_exceeded_mode),requireProvenance:policy.require_provenance===!0,trustedExtensions:normalizePolicyStringSet(policy.trusted_extensions),defaultSandboxProfile:normalizePolicySandboxProfile(policy.default_sandbox_profile),allowedExtensions:normalizePolicyStringSet(policy.allowed_extensions),blockedExtensions:normalizePolicyStringSet(policy.blocked_extensions),allowedCapabilities,blockedCapabilities,allowedSurfaces,blockedSurfaces,allowedCommands:normalizePolicyStringSet(policy.allowed_commands),blockedCommands:normalizePolicyStringSet(policy.blocked_commands),allowedActions:normalizePolicyStringSet(policy.allowed_actions),blockedActions:normalizePolicyStringSet(policy.blocked_actions),allowedServices:normalizePolicyStringSet(policy.allowed_services),blockedServices:normalizePolicyStringSet(policy.blocked_services),overridesByName,warnings:collectExtensionPolicyWarnings({allowedCapabilities,blockedCapabilities,allowedSurfaces,blockedSurfaces,overridesByName})}}function serializeExtensionPolicy(policy){const overrides=[...policy.overridesByName.values()].sort((left,right)=>left.name.localeCompare(right.name)).map(override=>({name:override.name,...override.disabled?{disabled:!0}:{},...override.requireTrusted?{require_trusted:!0}:{},...override.requireProvenance?{require_provenance:!0}:{},...override.sandboxProfile?{sandbox_profile:override.sandboxProfile}:{},...override.allowedCapabilities.size>0?{allowed_capabilities:toSortedList(override.allowedCapabilities)}:{},...override.blockedCapabilities.size>0?{blocked_capabilities:toSortedList(override.blockedCapabilities)}:{},...override.allowedSurfaces.size>0?{allowed_surfaces:toSortedList(override.allowedSurfaces)}:{},...override.blockedSurfaces.size>0?{blocked_surfaces:toSortedList(override.blockedSurfaces)}:{},...override.allowedCommands.size>0?{allowed_commands:toSortedList(override.allowedCommands)}:{},...override.blockedCommands.size>0?{blocked_commands:toSortedList(override.blockedCommands)}:{},...override.allowedActions.size>0?{allowed_actions:toSortedList(override.allowedActions)}:{},...override.blockedActions.size>0?{blocked_actions:toSortedList(override.blockedActions)}:{},...override.allowedServices.size>0?{allowed_services:toSortedList(override.allowedServices)}:{},...override.blockedServices.size>0?{blocked_services:toSortedList(override.blockedServices)}:{}}));return{mode:policy.mode,trust_mode:policy.trustMode,pm_max_version_exceeded_mode:serializePmMaxVersionExceededMode(policy.pmMaxVersionExceededMode),require_provenance:policy.requireProvenance,trusted_extensions:toSortedList(policy.trustedExtensions),default_sandbox_profile:policy.defaultSandboxProfile,allowed_extensions:toSortedList(policy.allowedExtensions),blocked_extensions:toSortedList(policy.blockedExtensions),allowed_capabilities:toSortedList(policy.allowedCapabilities),blocked_capabilities:toSortedList(policy.blockedCapabilities),allowed_surfaces:toSortedList(policy.allowedSurfaces),blocked_surfaces:toSortedList(policy.blockedSurfaces),allowed_commands:toSortedList(policy.allowedCommands),blocked_commands:toSortedList(policy.blockedCommands),allowed_actions:toSortedList(policy.allowedActions),blocked_actions:toSortedList(policy.blockedActions),allowed_services:toSortedList(policy.allowedServices),blocked_services:toSortedList(policy.blockedServices),extension_overrides:overrides}}function hydrateExtensionPolicy(policy){const overridesByName=collectExtensionPolicyOverrides(policy.extension_overrides);return{mode:normalizePolicyMode(policy.mode),trustMode:normalizePolicyTrustMode(policy.trust_mode),pmMaxVersionExceededMode:normalizePmMaxVersionExceededMode(policy.pm_max_version_exceeded_mode),requireProvenance:policy.require_provenance===!0,trustedExtensions:normalizePolicyStringSet(policy.trusted_extensions),defaultSandboxProfile:normalizePolicySandboxProfile(policy.default_sandbox_profile),allowedExtensions:normalizePolicyStringSet(policy.allowed_extensions),blockedExtensions:normalizePolicyStringSet(policy.blocked_extensions),allowedCapabilities:normalizePolicyStringSet(policy.allowed_capabilities),blockedCapabilities:normalizePolicyStringSet(policy.blocked_capabilities),allowedSurfaces:normalizePolicySurfaceSet(policy.allowed_surfaces),blockedSurfaces:normalizePolicySurfaceSet(policy.blocked_surfaces),allowedCommands:normalizePolicyStringSet(policy.allowed_commands),blockedCommands:normalizePolicyStringSet(policy.blocked_commands),allowedActions:normalizePolicyStringSet(policy.allowed_actions),blockedActions:normalizePolicyStringSet(policy.blocked_actions),allowedServices:normalizePolicyStringSet(policy.allowed_services),blockedServices:normalizePolicyStringSet(policy.blocked_services),overridesByName,warnings:[]}}function resolvePolicyOverride(policy,extensionName){return policy.overridesByName.get(normalizePolicyName(extensionName))??null}function evaluatePolicySet(allowed,blocked,value,notAllowlistedReason,blockedReason){return blocked.has(value)?blockedReason:allowed.size>0&&!allowed.has(value)?notAllowlistedReason:null}function resolvePolicyCapabilityReason(policy,extension,capability){const normalizedCapability=capability.trim().toLowerCase(),override=resolvePolicyOverride(policy,extension.name),allowed=override&&override.allowedCapabilities.size>0?override.allowedCapabilities:policy.allowedCapabilities,blocked=new Set([...policy.blockedCapabilities,...override?override.blockedCapabilities:[]]);return evaluatePolicySet(allowed,blocked,normalizedCapability,"capability_not_allowlisted","capability_blocked")}function resolvePolicySurfaceReason(policy,extension,surface){const override=resolvePolicyOverride(policy,extension.name),allowed=override&&override.allowedSurfaces.size>0?override.allowedSurfaces:policy.allowedSurfaces,blocked=new Set([...policy.blockedSurfaces,...override?override.blockedSurfaces:[]]);return evaluatePolicySet(allowed,blocked,surface,"surface_not_allowlisted","surface_blocked")}function resolvePolicyCommandReason(policy,extension,command){const normalizedCommand=normalizeCommandName(command);if(normalizedCommand.length===0)return null;const override=resolvePolicyOverride(policy,extension.name),allowed=override&&override.allowedCommands.size>0?override.allowedCommands:policy.allowedCommands,blocked=new Set([...policy.blockedCommands,...override?override.blockedCommands:[]]);return evaluatePolicySet(allowed,blocked,normalizedCommand,"command_not_allowlisted","command_blocked")}function resolvePolicyActionReason(policy,extension,action){const normalizedAction=normalizePolicyName(action).replace(/\s+/g,"-");if(normalizedAction.length===0)return null;const override=resolvePolicyOverride(policy,extension.name),allowed=override&&override.allowedActions.size>0?override.allowedActions:policy.allowedActions,blocked=new Set([...policy.blockedActions,...override?override.blockedActions:[]]);return evaluatePolicySet(allowed,blocked,normalizedAction,"action_not_allowlisted","action_blocked")}function resolvePolicyServiceReason(policy,extension,service){const normalizedService=normalizePolicyName(service);if(normalizedService.length===0)return null;const override=resolvePolicyOverride(policy,extension.name),allowed=override&&override.allowedServices.size>0?override.allowedServices:policy.allowedServices,blocked=new Set([...policy.blockedServices,...override?override.blockedServices:[]]);return evaluatePolicySet(allowed,blocked,normalizedService,"service_not_allowlisted","service_blocked")}function resolvePolicyExtensionReason(policy,extension){const name=normalizePolicyName(extension.name);return resolvePolicyOverride(policy,extension.name)?.disabled===!0?"extension_override_disabled":evaluatePolicySet(policy.allowedExtensions,policy.blockedExtensions,name,"extension_not_allowlisted","extension_blocked")}function resolvePolicyTrustReason(policy,extension){if(policy.trustMode==="off")return null;const override=resolvePolicyOverride(policy,extension.name),name=normalizePolicyName(extension.name),trusted=extension.trusted===!0,provenanceVerified=extension.provenanceVerified===!0;return policy.trustedExtensions.size>0&&!policy.trustedExtensions.has(name)?"extension_not_trusted":(override?.requireTrusted===!0||policy.trustMode==="warn"||policy.trustMode==="enforce")&&!trusted?"extension_untrusted":(policy.requireProvenance||override?.requireProvenance===!0)&&!provenanceVerified?"provenance_missing_or_unverified":null}function resolvePolicySandboxReason(policy,extension){if(policy.mode==="off")return null;const profile=resolvePolicyOverride(policy,extension.name)?.sandboxProfile??extension.sandboxProfile??policy.defaultSandboxProfile;if(profile==="none")return null;const permissions=extension.permissions;if(!permissions)return"sandbox_permissions_missing";const hasPermission=name=>permissions[name]===!0;return profile==="restricted"?hasPermission("process_spawn")?"sandbox_restricted_disallows_process_spawn":hasPermission("env_write")?"sandbox_restricted_disallows_env_write":null:hasPermission("process_spawn")?"sandbox_strict_disallows_process_spawn":hasPermission("network")?"sandbox_strict_disallows_network":hasPermission("fs_write")?"sandbox_strict_disallows_fs_write":hasPermission("env_write")?"sandbox_strict_disallows_env_write":null}function buildPolicyWarning(mode,scope,extension,reason,details={}){const tokens=Object.entries(details).sort((left,right)=>left[0].localeCompare(right[0])).map(([key,value])=>`${key}=${value}`).join(":"),suffix=tokens.length>0?`:${tokens}`:"";return`extension_policy_${mode}_${scope}:${extension.layer}:${extension.name}:reason=${reason}${suffix}`}function evaluateExtensionPolicyForExtension(policy,extension){if(policy.mode==="off"&&policy.trustMode==="off")return{allowed:!0,warning:null};const violations=[],reason=resolvePolicyExtensionReason(policy,extension);reason&&violations.push({reason,scope:"extension",mode:policy.mode});const trustReason=resolvePolicyTrustReason(policy,extension);trustReason&&violations.push({reason:trustReason,scope:"trust",mode:policy.trustMode});const sandboxReason=resolvePolicySandboxReason(policy,extension);sandboxReason&&violations.push({reason:sandboxReason,scope:"extension",mode:policy.mode});const enforced=violations.find(violation=>violation.mode==="enforce");if(enforced)return{allowed:!1,warning:buildPolicyWarning("blocked",enforced.scope,extension,enforced.reason)};const warned=violations.find(violation=>violation.mode==="warn");return warned?{allowed:!0,warning:buildPolicyWarning("violation",warned.scope,extension,warned.reason)}:{allowed:!0,warning:null}}function evaluateExtensionPolicyForCapability(policy,extension,capability){if(policy.mode==="off")return{allowed:!0,warning:null};const reason=resolvePolicyCapabilityReason(policy,extension,capability);return reason?{allowed:policy.mode==="warn",warning:buildPolicyWarning(policy.mode==="warn"?"violation":"blocked","capability",extension,reason,{capability:capability.trim().toLowerCase()})}:{allowed:!0,warning:null}}function resolveRegistrationPolicyReason(policy,extension,surface,capability,detail){const capabilityReason=typeof capability=="string"?resolvePolicyCapabilityReason(policy,extension,capability):null,surfaceReason=resolvePolicySurfaceReason(policy,extension,surface),commandReason=detail.command?resolvePolicyCommandReason(policy,extension,detail.command):null,actionReason=detail.action?resolvePolicyActionReason(policy,extension,detail.action):null,serviceReason=detail.service?resolvePolicyServiceReason(policy,extension,detail.service):null;return capabilityReason??surfaceReason??commandReason??actionReason??serviceReason}function buildRegistrationPolicyWarningDetails(method,surface,capability,detail){const warningDetails={method:normalizePolicyName(method).replace(/\s+/g,"_"),surface};return capability&&(warningDetails.capability=capability),detail.command&&(warningDetails.command=normalizeCommandName(detail.command)),detail.action&&(warningDetails.action=normalizePolicyName(detail.action).replace(/\s+/g,"-")),detail.service&&(warningDetails.service=normalizePolicyName(detail.service)),warningDetails}function evaluateExtensionPolicyForRegistration(policy,extension,surface,method,capability,details){if(policy.mode==="off")return{allowed:!0,warning:null};const detail=details??{},reason=resolveRegistrationPolicyReason(policy,extension,surface,capability,detail);if(!reason)return{allowed:!0,warning:null};const warning=buildPolicyWarning(policy.mode==="warn"?"violation":"blocked","registration",extension,reason,buildRegistrationPolicyWarningDetails(method,surface,capability,detail));return{allowed:policy.mode==="warn",warning}}export{evaluateExtensionPolicyForCapability,evaluateExtensionPolicyForExtension,evaluateExtensionPolicyForRegistration,hydrateExtensionPolicy,normalizeExtensionPolicy,normalizePmMaxVersionExceededMode,normalizePolicySandboxProfile,serializeExtensionPolicy};
|
|
2
2
|
//# sourceMappingURL=extension-policy.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="01116a5e-62d1-591b-9fd0-84ac6e99f8d0")}catch{}})();function createEmptyExtensionHookRegistry(){return{beforeCommand:[],beforeMutation:[],afterCommand:[],onWrite:[],onRead:[],onIndex:[]}}function createEmptyExtensionCommandRegistry(){return{overrides:[],handlers:[]}}function createEmptyExtensionParserRegistry(){return{overrides:[]}}function createEmptyExtensionPreflightRegistry(){return{overrides:[]}}function createEmptyExtensionServiceRegistry(){return{overrides:[]}}function createEmptyExtensionRendererRegistry(){return{overrides:[]}}function createEmptyExtensionRegistrationRegistry(){return{commands:[],flags:[],item_fields:[],item_types:[],relationship_kinds:[],migrations:[],profiles:[],importers:[],exporters:[],search_providers:[],vector_store_adapters:[],assurance_providers:[]}}export{createEmptyExtensionCommandRegistry,createEmptyExtensionHookRegistry,createEmptyExtensionParserRegistry,createEmptyExtensionPreflightRegistry,createEmptyExtensionRegistrationRegistry,createEmptyExtensionRendererRegistry,createEmptyExtensionServiceRegistry};
|
|
2
2
|
//# sourceMappingURL=extension-registries.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="f8657910-1392-5fae-afda-614b96dc8320")}catch{}})();function normalizeCommandName(command){return command.trim().toLowerCase().split(/\s+/).filter(part=>part.length>0).join(" ")}function defaultGlobalOptions(){return{json:!1,quiet:!1,noExtensions:!1,profile:!1}}function cloneCommandOptionsSnapshot(options){return options?cloneContextSnapshot(options):{}}function cloneGlobalOptionsSnapshot(options){return options?cloneContextSnapshot(options):defaultGlobalOptions()}function cloneContextSnapshot(value){return structuredClone(value)}export{cloneCommandOptionsSnapshot,cloneContextSnapshot,cloneGlobalOptionsSnapshot,defaultGlobalOptions,normalizeCommandName};
|
|
2
2
|
//# sourceMappingURL=extension-runtime-helpers.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="9fcba3ad-16b1-5291-9ed1-d86220f7f1f2")}catch{}})();const KNOWN_EXTENSION_CAPABILITIES=["commands","renderers","hooks","schema","importers","search","parser","preflight","services"],EXTENSION_CAPABILITY_CONTRACT_VERSION=2,EXTENSION_CAPABILITY_LEGACY_ALIASES=Object.freeze({migration:"schema",validation:"schema"}),EXTENSION_CAPABILITY_CONTRACT=Object.freeze({version:2,capabilities:[...KNOWN_EXTENSION_CAPABILITIES],legacy_aliases:{...EXTENSION_CAPABILITY_LEGACY_ALIASES}}),KNOWN_EXTENSION_POLICY_MODES=["off","warn","enforce"],KNOWN_EXTENSION_TRUST_MODES=["off","warn","enforce"],KNOWN_EXTENSION_SANDBOX_PROFILES=["none","restricted","strict"],KNOWN_PM_MAX_VERSION_EXCEEDED_MODES=["block","warn"],KNOWN_EXTENSION_POLICY_SURFACES=["commands.override","commands.handler","hooks.beforecommand","hooks.beforemutation","hooks.aftercommand","hooks.onwrite","hooks.onread","hooks.onindex","schema.flags","schema.itemfields","schema.itemtypes","schema.relationshipkinds","schema.migrations","schema.profiles","parser.override","preflight.override","services.override","renderers.override","importers.importer","importers.exporter","search.provider","search.vectorstore","services.assuranceprovider"],KNOWN_EXTENSION_SERVICE_NAMES=["output_format","error_format","help_format","lock_acquire","lock_release","history_append","item_store_write","item_store_delete","context_relevance","command_result"];function createDefaultExtensionGovernancePolicy(){return{mode:"off",trust_mode:"off",require_provenance:!1,trusted_extensions:[],default_sandbox_profile:"none",allowed_extensions:[],blocked_extensions:[],allowed_capabilities:[],blocked_capabilities:[],allowed_surfaces:[],blocked_surfaces:[],allowed_commands:[],blocked_commands:[],allowed_actions:[],blocked_actions:[],allowed_services:[],blocked_services:[],extension_overrides:[]}}export{EXTENSION_CAPABILITY_CONTRACT,EXTENSION_CAPABILITY_CONTRACT_VERSION,EXTENSION_CAPABILITY_LEGACY_ALIASES,KNOWN_EXTENSION_CAPABILITIES,KNOWN_EXTENSION_POLICY_MODES,KNOWN_EXTENSION_POLICY_SURFACES,KNOWN_EXTENSION_SANDBOX_PROFILES,KNOWN_EXTENSION_SERVICE_NAMES,KNOWN_EXTENSION_TRUST_MODES,KNOWN_PM_MAX_VERSION_EXCEEDED_MODES,createDefaultExtensionGovernancePolicy};
|
|
2
2
|
//# sourceMappingURL=extension-types.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="0403fec1-f10a-5361-982b-c127c2617e95")}catch{}})();import{RESERVED_EXTENSION_HOST_FLAG_NAMES}from"./reserved-host-flags.js";const EXTENSION_LONG_FLAG_PATTERN=/^--[a-z0-9][a-z0-9_-]*(?:[ =](?:<[^<>]+>|\[[^[\]]+\]))?$/;function validateExtensionLongFlagToken(value){if(typeof value!="string")return null;const token=value.trim(),hostToken=token.split(/[ =]/,1)[0];return RESERVED_EXTENSION_HOST_FLAG_NAMES.has(hostToken)?"host_owned_flag_collision":EXTENSION_LONG_FLAG_PATTERN.test(token)?null:"malformed_long_flag"}function findExtensionFlagTokenFailure(long,short){const reserved=[long,short].find(token2=>typeof token2=="string"&&RESERVED_EXTENSION_HOST_FLAG_NAMES.has(token2.trim().split(/[ =]/,1)[0]));if(typeof reserved=="string")return{token:reserved.trim().split(/[ =]/,1)[0],failure:"host_owned_flag_collision"};if(typeof long!="string")return null;const token=long.trim(),failure=validateExtensionLongFlagToken(token);return failure===null?null:{token,failure}}function describeExtensionLongFlagFailure(token,failure){return failure==="host_owned_flag_collision"?`cannot shadow host-owned global flag "${token}"; read it from context.global instead`:`long flag "${token}" must start with a double-dash name such as "--my-flag" or "--my-flag <value>"`}export{EXTENSION_LONG_FLAG_PATTERN,describeExtensionLongFlagFailure,findExtensionFlagTokenFailure,validateExtensionLongFlagToken};
|
|
2
2
|
//# sourceMappingURL=flag-definition-validation.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="a2ab8801-f75b-5ba0-88a5-354d24c37c6f")}catch{}})();const FLAG_VALUE_KIND_BY_ALIAS=Object.freeze({string:"string",number:"number",int:"number",integer:"number",float:"number",boolean:"boolean",bool:"boolean"});function resolveFlagValueKind(raw){return typeof raw!="string"?null:FLAG_VALUE_KIND_BY_ALIAS[raw.trim().toLowerCase()]??null}function flattenFlagListValue(value){const entries=[],collect=input=>{if(Array.isArray(input)){for(const item of input)collect(item);return}if(typeof input=="string"){for(const part of input.split(",")){const trimmed=part.trim();trimmed.length>0&&entries.push(trimmed)}return}input!=null&&entries.push(input)};return collect(value),entries}function isFlagDefaultValueCoercible(value,kind){return kind==="string"?!0:kind==="number"?typeof value=="number"?Number.isFinite(value):typeof value=="string"&&value.trim().length>0&&Number.isFinite(Number(value)):typeof value=="boolean"?!0:typeof value=="string"&&["true","false","1","0"].includes(value.trim().toLowerCase())}export{flattenFlagListValue,isFlagDefaultValueCoercible,resolveFlagValueKind};
|
|
2
2
|
//# sourceMappingURL=flag-value-types.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
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]="40b169fc-3c5f-5b2a-8fed-a9388b07d9f7")}catch(e2){}})();import{existsSync}from"node:fs";import{AsyncLocalStorage}from"node:async_hooks";import path from"node:path";import{runCommandHandler,runBeforeMutationHooks,runCommandOverride,runOnIndexHooks,runParserOverride,runPreflightOverride,runOnReadHooks,runRendererOverride,runServiceOverride,runServiceOverrideSync,runOnWriteHooks}from"./loader.js";let activeExtensionHooks=null;let activeExtensionCommands=null;let activeExtensionParsers=null;let activeExtensionPreflight=null;let activeExtensionServices=null;let activeExtensionRenderers=null;let activeExtensionRegistrations=null;let activeCommandContext=null;let activeCommandResult=void 0;let activeAfterCommandAffectedItems=[];const isolatedExtensionRuntime=new AsyncLocalStorage;function runtimeState(){return isolatedExtensionRuntime.getStore()}function runWithIsolatedExtensionRuntime(run){return isolatedExtensionRuntime.run({hooks:null,commands:null,parsers:null,preflight:null,services:null,renderers:null,registrations:null,commandContext:null,commandResult:void 0,affectedItems:[]},run)}const AFTER_COMMAND_SNAPSHOT_OMITTED_FIELDS=new Set(["body","comments","dependencies","docs","events","files","learnings","notes","reminders","test_runs","tests"]);function findSourceRepositoryRoot(candidate){let cursor=path.resolve(candidate);while(true){if(existsSync(path.join(cursor,".git"))){return cursor}const parent=path.dirname(cursor);if(parent===cursor){return void 0}cursor=parent}}function resolvePortableWorkspaceContext(pmRoot){const sourceCandidate=process.env.PM_SOURCE_WORKSPACE_ROOT?.trim()||process.cwd();const sourceWorkspaceRoot=findSourceRepositoryRoot(sourceCandidate)??path.resolve(sourceCandidate);const repoRoot=findSourceRepositoryRoot(sourceWorkspaceRoot);if(!pmRoot){return{source_workspace_root:sourceWorkspaceRoot,...repoRoot?{repo_root:repoRoot}:{}}}const relativePmRoot=path.relative(sourceWorkspaceRoot,path.resolve(pmRoot));const contained=relativePmRoot.length>0&&!relativePmRoot.startsWith(`..${path.sep}`)&&relativePmRoot!==".."&&!path.isAbsolute(relativePmRoot);return{source_workspace_root:sourceWorkspaceRoot,...repoRoot?{repo_root:repoRoot}:{},...contained?{pm_root_rel:relativePmRoot.split(path.sep).join("/")}:{}}}function setActiveExtensionHooks(hooks){const state=runtimeState();if(state){state.hooks=hooks;return}activeExtensionHooks=hooks}function setActiveExtensionCommands(commands){const state=runtimeState();if(state){state.commands=commands;return}activeExtensionCommands=commands}function setActiveExtensionParsers(parsers){const state=runtimeState();if(state){state.parsers=parsers;return}activeExtensionParsers=parsers}function setActiveExtensionPreflight(preflight){const state=runtimeState();if(state){state.preflight=preflight;return}activeExtensionPreflight=preflight}function setActiveExtensionServices(services){const state=runtimeState();if(state){state.services=services;return}activeExtensionServices=services}function setActiveExtensionRenderers(renderers){const state=runtimeState();if(state){state.renderers=renderers;return}activeExtensionRenderers=renderers}function setActiveExtensionRegistrations(registrations){const state=runtimeState();if(state){state.registrations=registrations;return}activeExtensionRegistrations=registrations}function getActiveExtensionRegistrations(){const state=runtimeState();return state?state.registrations:activeExtensionRegistrations}function resetActiveExtensionRuntimeState(){const state=runtimeState();if(state){state.hooks=null;state.commands=null;state.parsers=null;state.preflight=null;state.services=null;state.renderers=null;state.registrations=null;state.commandContext=null;state.commandResult=null;state.affectedItems=[];return}activeExtensionHooks=null;activeExtensionCommands=null;activeExtensionParsers=null;activeExtensionPreflight=null;activeExtensionServices=null;activeExtensionRenderers=null;activeExtensionRegistrations=null;activeCommandContext=null;activeCommandResult=null}function setActiveCommandContext(context){const resolved=context?{...context,...resolvePortableWorkspaceContext(context.pm_root)}:null;const state=runtimeState();if(state){state.commandContext=resolved;return}activeCommandContext=resolved}function getActiveCommandContext(){const state=runtimeState();const context=state?state.commandContext:activeCommandContext;return context?{...context,args:[...context.args],options:context.options?{...context.options}:{},global:context.global?{...context.global}:void 0}:null}function isActiveCommandUnextended(command){const state=runtimeState()??{commandContext:activeCommandContext,hooks:activeExtensionHooks,commands:activeExtensionCommands,parsers:activeExtensionParsers,preflight:activeExtensionPreflight,services:activeExtensionServices,renderers:activeExtensionRenderers,registrations:activeExtensionRegistrations};if(state.commandContext?.command!==command)return false;const broadInterceptors=[state.hooks,state.preflight,state.services,state.renderers];if(broadInterceptors.some(registry=>Object.values(registry??{}).some(entries=>entries.length>0)))return false;const commandInterceptors=[state.commands,state.parsers];if(commandInterceptors.some(registry=>Object.values(registry??{}).some(entries=>entries.some(entry=>entry.command===command))))return false;return!Object.entries(state.registrations??{}).some(([key,entries])=>["migrations","search_providers","vector_store_adapters","assurance_providers"].includes(key)&&entries.length>0)}function setActiveCommandResult(result){const state=runtimeState();if(state){state.commandResult=result;return}activeCommandResult=result}function getActiveCommandResult(){const state=runtimeState();return state?state.commandResult:activeCommandResult}function recordAfterCommandAffectedItem(item){if(!item){return}const state=runtimeState();if(state){state.affectedItems.push(item)}else{activeAfterCommandAffectedItems.push(item)}}function projectAfterCommandItemSnapshot(metadata,changedFields){if(!metadata||!metadata.id){return{}}const snapshot={id:metadata.id,type:metadata.type,status:metadata.status};if(!Array.isArray(changedFields)){return snapshot}const source=metadata;for(const field of changedFields){if(typeof field!=="string"){continue}const actualField=field.startsWith("unset:")?field.slice("unset:".length):field;if(actualField==="id"||actualField==="type"||actualField==="status"||AFTER_COMMAND_SNAPSHOT_OMITTED_FIELDS.has(actualField)){continue}if(Object.hasOwn(source,actualField)&&source[actualField]!==void 0){snapshot[actualField]=source[actualField]}}return snapshot}function consumeAfterCommandAffectedItems(){const state=runtimeState();const affectedItems=state?.affectedItems??activeAfterCommandAffectedItems;if(affectedItems.length===0){return void 0}const affected=affectedItems;if(state){state.affectedItems=[]}else{activeAfterCommandAffectedItems=[]}return affected}function clearActiveExtensionHooks(){const state=runtimeState();if(state){state.hooks=null;state.commands=null;state.parsers=null;state.preflight=null;state.services=null;state.renderers=null;state.registrations=null;state.commandContext=null;state.commandResult=void 0;state.affectedItems=[];return}activeExtensionHooks=null;activeExtensionCommands=null;activeExtensionParsers=null;activeExtensionPreflight=null;activeExtensionServices=null;activeExtensionRenderers=null;activeExtensionRegistrations=null;activeCommandContext=null;activeCommandResult=void 0;activeAfterCommandAffectedItems=[]}async function runActiveOnWriteHooks(context){const state=runtimeState();const hooks=state?state.hooks:activeExtensionHooks;if(!hooks){return[]}return runOnWriteHooks(hooks,context)}async function runActiveBeforeMutationHooks(context){const state=runtimeState();const hooks=state?state.hooks:activeExtensionHooks;if(!hooks)return;await runBeforeMutationHooks(hooks,context)}async function runActiveOnReadHooks(context){const state=runtimeState();const hooks=state?state.hooks:activeExtensionHooks;if(!hooks){return[]}return runOnReadHooks(hooks,context)}function hasActiveOnReadHooks(){const state=runtimeState();const hooks=state?state.hooks:activeExtensionHooks;return(hooks?.onRead?.length??0)>0}async function runActiveOnIndexHooks(context){const state=runtimeState();const hooks=state?state.hooks:activeExtensionHooks;if(!hooks){return[]}return runOnIndexHooks(hooks,context)}function runActiveCommandOverride(result){const state=runtimeState();const commands=state?state.commands:activeExtensionCommands;const commandContext=state?state.commandContext:activeCommandContext;if(!commands||!commandContext){return{overridden:false,result,warnings:[]}}return runCommandOverride(commands,{command:commandContext.command,args:[...commandContext.args],options:commandContext.options?{...commandContext.options}:{},global:commandContext.global?{...commandContext.global}:void 0,pm_root:commandContext.pm_root,source_workspace_root:commandContext.source_workspace_root,repo_root:commandContext.repo_root,pm_root_rel:commandContext.pm_root_rel,result})}async function runActiveCommandHandler(context){const state=runtimeState();const commands=state?state.commands:activeExtensionCommands;if(!commands){return{handled:false,result:null,warnings:[]}}return runCommandHandler(commands,{...context,...resolvePortableWorkspaceContext(context.pm_root)})}async function runActiveParserOverride(context){const state=runtimeState();const parsers=state?state.parsers:activeExtensionParsers;if(!parsers){return{overridden:false,context:{command:context.command,args:[...context.args],options:{...context.options},global:{...context.global},pm_root:context.pm_root},warnings:[]}}return runParserOverride(parsers,{...context,...resolvePortableWorkspaceContext(context.pm_root)})}async function runActivePreflightOverride(context){const state=runtimeState();const preflight=state?state.preflight:activeExtensionPreflight;if(!preflight){return{overridden:false,context:{command:context.command,args:[...context.args],options:{...context.options},global:{...context.global},pm_root:context.pm_root},decision:{...context.decision},warnings:[]}}return runPreflightOverride(preflight,{...context,...resolvePortableWorkspaceContext(context.pm_root)})}function runActiveRendererOverride(format,result){const state=runtimeState();const renderers=state?state.renderers:activeExtensionRenderers;const commandContext=state?state.commandContext:activeCommandContext;if(!renderers){return{overridden:false,rendered:null,warnings:[]}}return runRendererOverride(renderers,{format,command:commandContext?.command,args:commandContext?[...commandContext.args]:[],options:commandContext?.options?{...commandContext.options}:{},global:commandContext?.global?{...commandContext.global}:void 0,pm_root:commandContext?.pm_root,source_workspace_root:commandContext?.source_workspace_root,repo_root:commandContext?.repo_root,pm_root_rel:commandContext?.pm_root_rel,result})}function buildServiceContext(service,payload){const state=runtimeState();const commandContext=state?state.commandContext:activeCommandContext;return{service,command:commandContext?.command,args:commandContext?[...commandContext.args]:[],options:commandContext?.options?{...commandContext.options}:{},global:commandContext?.global?{...commandContext.global}:void 0,pm_root:commandContext?.pm_root,source_workspace_root:commandContext?.source_workspace_root,repo_root:commandContext?.repo_root,pm_root_rel:commandContext?.pm_root_rel,payload}}async function runActiveServiceOverride(service,payload){const state=runtimeState();const services=state?state.services:activeExtensionServices;if(!services){return{handled:false,result:payload,warnings:[]}}return runServiceOverride(services,buildServiceContext(service,payload))}function runActiveServiceOverrideSync(service,payload){const state=runtimeState();const services=state?state.services:activeExtensionServices;if(!services){return{handled:false,result:payload,warnings:[]}}return runServiceOverrideSync(services,buildServiceContext(service,payload))}export*from"./loader.js";export*from"./command-hook-context.js";import{createSerialQueue}from"../shared/serial-queue.js";import{EXTENSION_CAPABILITY_REGISTRATION_SURFACES,collectUsedExtensionCapabilities,reconcileExtensionCapabilityUsage}from"./capability-usage.js";export{EXTENSION_CAPABILITY_REGISTRATION_SURFACES,clearActiveExtensionHooks,collectUsedExtensionCapabilities,consumeAfterCommandAffectedItems,createSerialQueue,getActiveCommandContext,getActiveCommandResult,getActiveExtensionRegistrations,hasActiveOnReadHooks,isActiveCommandUnextended,projectAfterCommandItemSnapshot,reconcileExtensionCapabilityUsage,recordAfterCommandAffectedItem,resetActiveExtensionRuntimeState,resolvePortableWorkspaceContext,runActiveBeforeMutationHooks,runActiveCommandHandler,runActiveCommandOverride,runActiveOnIndexHooks,runActiveOnReadHooks,runActiveOnWriteHooks,runActiveParserOverride,runActivePreflightOverride,runActiveRendererOverride,runActiveServiceOverride,runActiveServiceOverrideSync,runWithIsolatedExtensionRuntime,setActiveCommandContext,setActiveCommandResult,setActiveExtensionCommands,setActiveExtensionHooks,setActiveExtensionParsers,setActiveExtensionPreflight,setActiveExtensionRegistrations,setActiveExtensionRenderers,setActiveExtensionServices};
|
|
1
|
+
(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="7c2e7a35-cbf9-5bb6-abfd-f1ae75c6afc2")}catch{}})();import{existsSync}from"node:fs";import{AsyncLocalStorage}from"node:async_hooks";import path from"node:path";import{runCommandHandler,runBeforeMutationHooks,runCommandOverride,runOnIndexHooks,runParserOverride,runPreflightOverride,runOnReadHooks,runRendererOverride,runServiceOverride,runServiceOverrideSync,runOnWriteHooks}from"./loader.js";let activeExtensionHooks=null,activeExtensionCommands=null,activeExtensionParsers=null,activeExtensionPreflight=null,activeExtensionServices=null,activeExtensionRenderers=null,activeExtensionRegistrations=null,activeCommandContext=null,activeCommandResult,activeAfterCommandAffectedItems=[];const isolatedExtensionRuntime=new AsyncLocalStorage;function runtimeState(){return isolatedExtensionRuntime.getStore()}function runWithIsolatedExtensionRuntime(run){return isolatedExtensionRuntime.run({hooks:null,commands:null,parsers:null,preflight:null,services:null,renderers:null,registrations:null,commandContext:null,commandResult:void 0,affectedItems:[]},run)}const AFTER_COMMAND_SNAPSHOT_OMITTED_FIELDS=new Set(["body","comments","dependencies","docs","events","files","learnings","notes","reminders","test_runs","tests"]);function findSourceRepositoryRoot(candidate){let cursor=path.resolve(candidate);for(;;){if(existsSync(path.join(cursor,".git")))return cursor;const parent=path.dirname(cursor);if(parent===cursor)return;cursor=parent}}function resolvePortableWorkspaceContext(pmRoot){const sourceCandidate=process.env.PM_SOURCE_WORKSPACE_ROOT?.trim()||process.cwd(),sourceWorkspaceRoot=findSourceRepositoryRoot(sourceCandidate)??path.resolve(sourceCandidate),repoRoot=findSourceRepositoryRoot(sourceWorkspaceRoot);if(!pmRoot)return{source_workspace_root:sourceWorkspaceRoot,...repoRoot?{repo_root:repoRoot}:{}};const relativePmRoot=path.relative(sourceWorkspaceRoot,path.resolve(pmRoot)),contained=relativePmRoot.length>0&&!relativePmRoot.startsWith(`..${path.sep}`)&&relativePmRoot!==".."&&!path.isAbsolute(relativePmRoot);return{source_workspace_root:sourceWorkspaceRoot,...repoRoot?{repo_root:repoRoot}:{},...contained?{pm_root_rel:relativePmRoot.split(path.sep).join("/")}:{}}}function setActiveExtensionHooks(hooks){const state=runtimeState();if(state){state.hooks=hooks;return}activeExtensionHooks=hooks}function setActiveExtensionCommands(commands){const state=runtimeState();if(state){state.commands=commands;return}activeExtensionCommands=commands}function setActiveExtensionParsers(parsers){const state=runtimeState();if(state){state.parsers=parsers;return}activeExtensionParsers=parsers}function setActiveExtensionPreflight(preflight){const state=runtimeState();if(state){state.preflight=preflight;return}activeExtensionPreflight=preflight}function setActiveExtensionServices(services){const state=runtimeState();if(state){state.services=services;return}activeExtensionServices=services}function setActiveExtensionRenderers(renderers){const state=runtimeState();if(state){state.renderers=renderers;return}activeExtensionRenderers=renderers}function setActiveExtensionRegistrations(registrations){const state=runtimeState();if(state){state.registrations=registrations;return}activeExtensionRegistrations=registrations}function getActiveExtensionRegistrations(){const state=runtimeState();return state?state.registrations:activeExtensionRegistrations}function resetActiveExtensionRuntimeState(){const state=runtimeState();if(state){state.hooks=null,state.commands=null,state.parsers=null,state.preflight=null,state.services=null,state.renderers=null,state.registrations=null,state.commandContext=null,state.commandResult=null,state.affectedItems=[];return}activeExtensionHooks=null,activeExtensionCommands=null,activeExtensionParsers=null,activeExtensionPreflight=null,activeExtensionServices=null,activeExtensionRenderers=null,activeExtensionRegistrations=null,activeCommandContext=null,activeCommandResult=null}function setActiveCommandContext(context){const resolved=context?{...context,...resolvePortableWorkspaceContext(context.pm_root)}:null,state=runtimeState();if(state){state.commandContext=resolved;return}activeCommandContext=resolved}function getActiveCommandContext(){const state=runtimeState(),context=state?state.commandContext:activeCommandContext;return context?{...context,args:[...context.args],options:context.options?{...context.options}:{},global:context.global?{...context.global}:void 0}:null}function isActiveCommandUnextended(command){const state=runtimeState()??{commandContext:activeCommandContext,hooks:activeExtensionHooks,commands:activeExtensionCommands,parsers:activeExtensionParsers,preflight:activeExtensionPreflight,services:activeExtensionServices,renderers:activeExtensionRenderers,registrations:activeExtensionRegistrations};return state.commandContext?.command!==command||[state.hooks,state.preflight,state.services,state.renderers].some(registry=>Object.values(registry??{}).some(entries=>entries.length>0))||[state.commands,state.parsers].some(registry=>Object.values(registry??{}).some(entries=>entries.some(entry=>entry.command===command)))?!1:!Object.entries(state.registrations??{}).some(([key,entries])=>["migrations","search_providers","vector_store_adapters","assurance_providers"].includes(key)&&entries.length>0)}function setActiveCommandResult(result){const state=runtimeState();if(state){state.commandResult=result;return}activeCommandResult=result}function getActiveCommandResult(){const state=runtimeState();return state?state.commandResult:activeCommandResult}function recordAfterCommandAffectedItem(item){if(!item)return;const state=runtimeState();state?state.affectedItems.push(item):activeAfterCommandAffectedItems.push(item)}function projectAfterCommandItemSnapshot(metadata,changedFields){if(!metadata||!metadata.id)return{};const snapshot={id:metadata.id,type:metadata.type,status:metadata.status};if(!Array.isArray(changedFields))return snapshot;const source=metadata;for(const field of changedFields){if(typeof field!="string")continue;const actualField=field.startsWith("unset:")?field.slice(6):field;actualField==="id"||actualField==="type"||actualField==="status"||AFTER_COMMAND_SNAPSHOT_OMITTED_FIELDS.has(actualField)||Object.hasOwn(source,actualField)&&source[actualField]!==void 0&&(snapshot[actualField]=source[actualField])}return snapshot}function consumeAfterCommandAffectedItems(){const state=runtimeState(),affectedItems=state?.affectedItems??activeAfterCommandAffectedItems;if(affectedItems.length===0)return;const affected=affectedItems;return state?state.affectedItems=[]:activeAfterCommandAffectedItems=[],affected}function clearActiveExtensionHooks(){const state=runtimeState();if(state){state.hooks=null,state.commands=null,state.parsers=null,state.preflight=null,state.services=null,state.renderers=null,state.registrations=null,state.commandContext=null,state.commandResult=void 0,state.affectedItems=[];return}activeExtensionHooks=null,activeExtensionCommands=null,activeExtensionParsers=null,activeExtensionPreflight=null,activeExtensionServices=null,activeExtensionRenderers=null,activeExtensionRegistrations=null,activeCommandContext=null,activeCommandResult=void 0,activeAfterCommandAffectedItems=[]}async function runActiveOnWriteHooks(context){const state=runtimeState(),hooks=state?state.hooks:activeExtensionHooks;return hooks?runOnWriteHooks(hooks,context):[]}async function runActiveBeforeMutationHooks(context){const state=runtimeState(),hooks=state?state.hooks:activeExtensionHooks;hooks&&await runBeforeMutationHooks(hooks,context)}async function runActiveOnReadHooks(context){const state=runtimeState(),hooks=state?state.hooks:activeExtensionHooks;return hooks?runOnReadHooks(hooks,context):[]}function hasActiveOnReadHooks(){const state=runtimeState();return((state?state.hooks:activeExtensionHooks)?.onRead?.length??0)>0}async function runActiveOnIndexHooks(context){const state=runtimeState(),hooks=state?state.hooks:activeExtensionHooks;return hooks?runOnIndexHooks(hooks,context):[]}function runActiveCommandOverride(result){const state=runtimeState(),commands=state?state.commands:activeExtensionCommands,commandContext=state?state.commandContext:activeCommandContext;return!commands||!commandContext?{overridden:!1,result,warnings:[]}:runCommandOverride(commands,{command:commandContext.command,args:[...commandContext.args],options:commandContext.options?{...commandContext.options}:{},global:commandContext.global?{...commandContext.global}:void 0,pm_root:commandContext.pm_root,source_workspace_root:commandContext.source_workspace_root,repo_root:commandContext.repo_root,pm_root_rel:commandContext.pm_root_rel,result})}async function runActiveCommandHandler(context){const state=runtimeState(),commands=state?state.commands:activeExtensionCommands;return commands?runCommandHandler(commands,{...context,...resolvePortableWorkspaceContext(context.pm_root)}):{handled:!1,result:null,warnings:[]}}async function runActiveParserOverride(context){const state=runtimeState(),parsers=state?state.parsers:activeExtensionParsers;return parsers?runParserOverride(parsers,{...context,...resolvePortableWorkspaceContext(context.pm_root)}):{overridden:!1,context:{command:context.command,args:[...context.args],options:{...context.options},global:{...context.global},pm_root:context.pm_root},warnings:[]}}async function runActivePreflightOverride(context){const state=runtimeState(),preflight=state?state.preflight:activeExtensionPreflight;return preflight?runPreflightOverride(preflight,{...context,...resolvePortableWorkspaceContext(context.pm_root)}):{overridden:!1,context:{command:context.command,args:[...context.args],options:{...context.options},global:{...context.global},pm_root:context.pm_root},decision:{...context.decision},warnings:[]}}function runActiveRendererOverride(format,result){const state=runtimeState(),renderers=state?state.renderers:activeExtensionRenderers,commandContext=state?state.commandContext:activeCommandContext;return renderers?runRendererOverride(renderers,{format,command:commandContext?.command,args:commandContext?[...commandContext.args]:[],options:commandContext?.options?{...commandContext.options}:{},global:commandContext?.global?{...commandContext.global}:void 0,pm_root:commandContext?.pm_root,source_workspace_root:commandContext?.source_workspace_root,repo_root:commandContext?.repo_root,pm_root_rel:commandContext?.pm_root_rel,result}):{overridden:!1,rendered:null,warnings:[]}}function buildServiceContext(service,payload){const state=runtimeState(),commandContext=state?state.commandContext:activeCommandContext;return{service,command:commandContext?.command,args:commandContext?[...commandContext.args]:[],options:commandContext?.options?{...commandContext.options}:{},global:commandContext?.global?{...commandContext.global}:void 0,pm_root:commandContext?.pm_root,source_workspace_root:commandContext?.source_workspace_root,repo_root:commandContext?.repo_root,pm_root_rel:commandContext?.pm_root_rel,payload}}async function runActiveServiceOverride(service,payload){const state=runtimeState(),services=state?state.services:activeExtensionServices;return services?runServiceOverride(services,buildServiceContext(service,payload)):{handled:!1,result:payload,warnings:[]}}function runActiveServiceOverrideSync(service,payload){const state=runtimeState(),services=state?state.services:activeExtensionServices;return services?runServiceOverrideSync(services,buildServiceContext(service,payload)):{handled:!1,result:payload,warnings:[]}}export*from"./loader.js";export*from"./command-hook-context.js";import{createSerialQueue}from"../shared/serial-queue.js";import{EXTENSION_CAPABILITY_REGISTRATION_SURFACES,collectUsedExtensionCapabilities,reconcileExtensionCapabilityUsage}from"./capability-usage.js";export{EXTENSION_CAPABILITY_REGISTRATION_SURFACES,clearActiveExtensionHooks,collectUsedExtensionCapabilities,consumeAfterCommandAffectedItems,createSerialQueue,getActiveCommandContext,getActiveCommandResult,getActiveExtensionRegistrations,hasActiveOnReadHooks,isActiveCommandUnextended,projectAfterCommandItemSnapshot,reconcileExtensionCapabilityUsage,recordAfterCommandAffectedItem,resetActiveExtensionRuntimeState,resolvePortableWorkspaceContext,runActiveBeforeMutationHooks,runActiveCommandHandler,runActiveCommandOverride,runActiveOnIndexHooks,runActiveOnReadHooks,runActiveOnWriteHooks,runActiveParserOverride,runActivePreflightOverride,runActiveRendererOverride,runActiveServiceOverride,runActiveServiceOverrideSync,runWithIsolatedExtensionRuntime,setActiveCommandContext,setActiveCommandResult,setActiveExtensionCommands,setActiveExtensionHooks,setActiveExtensionParsers,setActiveExtensionPreflight,setActiveExtensionRegistrations,setActiveExtensionRenderers,setActiveExtensionServices};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="47d10c23-88f8-5ba1-bcc2-458f339121a8")}catch{}})();import{levenshteinDistanceWithinLimit}from"../shared/levenshtein.js";import{RUNTIME_FIELD_TYPE_VALUES}from"../../types/index.js";const KNOWN_ITEM_FIELD_TYPES=RUNTIME_FIELD_TYPE_VALUES;function normalizeItemFieldType(value){const normalized=value.trim().toLowerCase();return KNOWN_ITEM_FIELD_TYPES.includes(normalized)?normalized:null}function suggestKnownItemFieldType(value){const normalized=value.trim().toLowerCase();if(normalized.length===0)return null;const limit=Math.max(1,Math.floor(normalized.length*.34));for(const candidate of KNOWN_ITEM_FIELD_TYPES)if(levenshteinDistanceWithinLimit(normalized,candidate,limit)!==null)return candidate;return null}export{KNOWN_ITEM_FIELD_TYPES,normalizeItemFieldType,suggestKnownItemFieldType};
|
|
2
2
|
//# sourceMappingURL=item-field-types.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="c6a57e5a-91ba-5c4e-afbc-772fd2f7a9bb")}catch{}})();import{normalizeItemFieldType}from"./item-field-types.js";import{EXIT_CODE,ITEM_METADATA_KEY_ORDER}from"../shared/constants.js";import{PmCliError}from"../shared/errors.js";const reservedItemFieldNames=new Set(ITEM_METADATA_KEY_ORDER),RESERVED_ITEM_FIELD_NAMES=Object.freeze({get size(){return reservedItemFieldNames.size},has(value){return reservedItemFieldNames.has(value)},entries(){return reservedItemFieldNames.entries()},keys(){return reservedItemFieldNames.keys()},values(){return reservedItemFieldNames.values()},forEach(callback,thisArg){reservedItemFieldNames.forEach(value=>callback.call(thisArg,value,value,RESERVED_ITEM_FIELD_NAMES))},[Symbol.iterator](){return reservedItemFieldNames.values()}});function normalizeFieldName(value){if(typeof value!="string")return null;const normalized=value.trim();return normalized.length>0?normalized:null}function normalizeFieldType(value){return typeof value!="string"?null:normalizeItemFieldType(value)}function cloneFieldValue(value){try{return structuredClone(value)}catch{return value}}function parseFieldAssignment(raw){const trimmed=raw.trim(),separatorIndex=trimmed.indexOf("=");if(separatorIndex<=0)throw new PmCliError(`--field entries must use name=value syntax, received: ${raw}`,EXIT_CODE.USAGE);const key=trimmed.slice(0,separatorIndex).trim(),value=trimmed.slice(separatorIndex+1);return{key,value}}function coreItemFieldFlag(fieldName){return`--${fieldName.replaceAll("_","-")}`}function parseJsonFieldValue(raw,fieldName,expectedType){try{const parsed=JSON.parse(raw);if(expectedType==="array"&&Array.isArray(parsed)||expectedType==="object"&&typeof parsed=="object"&&parsed!==null&&!Array.isArray(parsed))return parsed}catch{}throw new PmCliError(`--field ${fieldName}=... must be valid JSON ${expectedType}`,EXIT_CODE.USAGE)}function coerceRegisteredFieldValue(fieldName,fieldType,raw){if(fieldType==="string")return raw;if(fieldType==="number"){const trimmed=raw.trim();if(trimmed.length===0)throw new PmCliError(`--field ${fieldName}=... must be a number`,EXIT_CODE.USAGE);const parsed=Number(trimmed);if(!Number.isFinite(parsed))throw new PmCliError(`--field ${fieldName}=... must be a number`,EXIT_CODE.USAGE);return parsed}if(fieldType==="boolean"){const normalized=raw.trim().toLowerCase();if(normalized==="true"||normalized==="1"||normalized==="yes")return!0;if(normalized==="false"||normalized==="0"||normalized==="no")return!1;throw new PmCliError(`--field ${fieldName}=... must be one of true|false|1|0|yes|no`,EXIT_CODE.USAGE)}return fieldType==="string_array"?raw.split(/[\n,|]/u).map(value=>value.trim()).filter(value=>value.length>0):parseJsonFieldValue(raw,fieldName,fieldType)}function collectRegisteredFieldDefinitions(registrations){const definitions=new Map;if(!registrations)return definitions;for(const registration of registrations.item_fields)for(const definition of registration.fields){const fieldName=normalizeFieldName(definition.name),fieldType=normalizeFieldType(definition.type);if(!fieldName||!fieldType)continue;const existing=definitions.get(fieldName);if(existing&&existing.type!==fieldType)throw new PmCliError(`Extension item field "${fieldName}" is declared with conflicting types: ${existing.type}, ${fieldType}`,EXIT_CODE.USAGE,{code:"extension_item_field_type_conflict",nextSteps:["Make every active extension declaration for this field use the same type."]});definitions.set(fieldName,{name:fieldName,type:fieldType})}return definitions}function assertNotReservedItemFieldName(fieldName){if(RESERVED_ITEM_FIELD_NAMES.has(fieldName))throw new PmCliError(`Extension item field "${fieldName}" collides with built-in item metadata "${fieldName}"; rename the extension field with an extension-specific prefix. Reserved fields: ${[...RESERVED_ITEM_FIELD_NAMES].sort((left,right)=>left.localeCompare(right)).join(", ")}.`,EXIT_CODE.USAGE,{code:"extension_item_field_reserved",nextSteps:["Rename the extension item field, preferably with an extension-specific prefix."]})}function collectRegisteredItemFieldNames(registrations){return[...collectRegisteredFieldDefinitions(registrations).keys()].sort((left,right)=>left.localeCompare(right))}function parseRegisteredItemFieldAssignments(rawFields,registrations){if(!rawFields||rawFields.length===0)return{};const definitions=collectRegisteredFieldDefinitions(registrations),values={};for(const raw of rawFields){const{key,value}=parseFieldAssignment(raw),definition=definitions.get(key);if(!definition){if(RESERVED_ITEM_FIELD_NAMES.has(key)){const flag=coreItemFieldFlag(key);throw new PmCliError(`--field ${key} is a core item field, not an extension field`,EXIT_CODE.USAGE,{code:"core_item_field_requires_dedicated_flag",field:key,recovery:{provided_fields:[key],suggested_flags:[flag]},nextSteps:[`Set the core field with its dedicated flag: pm update <id> ${flag} <value>`,`When closing an item, pm close <id> also accepts ${flag} <value>.`]})}const known=[...definitions.keys()].sort((left,right)=>left.localeCompare(right));throw new PmCliError(`--field ${key} is not declared by an active extension item-field registration`,EXIT_CODE.USAGE,{code:"extension_item_field_unknown",recovery:{provided_fields:known},nextSteps:known.length>0?[`Use one of the declared fields: ${known.join(", ")}`]:["Activate an extension that calls registerItemFields before setting extension fields."]})}assertNotReservedItemFieldName(definition.name),values[definition.name]=coerceRegisteredFieldValue(definition.name,definition.type,value)}return values}function isValidFieldType(value,expectedType){return expectedType==="string"?typeof value=="string":expectedType==="number"?typeof value=="number"&&Number.isFinite(value):expectedType==="boolean"?typeof value=="boolean":expectedType==="array"?Array.isArray(value):expectedType==="string_array"?Array.isArray(value)&&value.every(entry=>typeof entry=="string"):typeof value=="object"&&value!==null&&!Array.isArray(value)}function isAllowedFieldValue(value,allowed){return!allowed||allowed.length===0?!0:allowed.some(candidate=>Object.is(candidate,value))}function applyRegisteredItemFieldDefaultsAndValidation(itemMetadata,registrations,options={}){if(registrations){collectRegisteredFieldDefinitions(registrations);for(const registration of registrations.item_fields)for(const definition of registration.fields){const fieldName=normalizeFieldName(definition.name);if(!fieldName)continue;assertNotReservedItemFieldName(fieldName),!(fieldName in itemMetadata)&&!options.skipDefaultFields?.has(fieldName)&&Object.prototype.hasOwnProperty.call(definition,"default")&&(itemMetadata[fieldName]=cloneFieldValue(definition.default));const currentValue=itemMetadata[fieldName];if(currentValue===void 0)continue;const expectedType=normalizeFieldType(definition.type);if(expectedType&&!isValidFieldType(currentValue,expectedType))throw new TypeError(`Item field "${fieldName}" must be of type ${expectedType}`);const allowedValues=Array.isArray(definition.values)?definition.values:void 0;if(!isAllowedFieldValue(currentValue,allowedValues))throw new TypeError(`Item field "${fieldName}" must match one of the configured allowed values`)}}}export{RESERVED_ITEM_FIELD_NAMES,applyRegisteredItemFieldDefaultsAndValidation,collectRegisteredItemFieldNames,parseRegisteredItemFieldAssignments};
|
|
2
2
|
//# sourceMappingURL=item-fields.js.map
|