@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
|
-
|
|
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]="544840da-22f5-5734-81ec-e12c5612545c")}catch{}})();const HARNESS_NAMESPACE_PATTERN=/^[a-z0-9]+(?:-[a-z0-9]+)*$/u,MAX_AUTHOR_LENGTH=128,MAX_OBSERVED_AUTHORS=1e4;function requireLegacyAuthor(value){const author=value?.trim();if(!author||author==="__proto__"||author.length>128)throw new Error("A legacy author must contain 1-128 characters.");return author}function requireCanonicalHarness(value){const harness=value?.trim().toLowerCase();if(!harness||!HARNESS_NAMESPACE_PATTERN.test(harness))throw new Error("A canonical harness must be a lowercase dash-separated namespace.");return harness}function orderedAliases(aliases){return Object.fromEntries(Object.entries(aliases).sort(([left],[right])=>left.localeCompare(right)))}function countResidualAuthors(observed,aliases){const residual=new Set;for(const raw of(observed??[]).slice(0,1e4)){const author=raw.trim().slice(0,128);author.length===0||author.startsWith("harness:")||Object.hasOwn(aliases,author)||residual.add(author)}return residual.size}function applyAddOperation(aliases,input){const legacyAuthor=requireLegacyAuthor(input.legacy_author),canonicalHarness=requireCanonicalHarness(input.canonical_harness);if(legacyAuthor===canonicalHarness||legacyAuthor===`harness:${canonicalHarness}`||legacyAuthor.startsWith("harness:"))throw new Error(`The legacy author "${legacyAuthor}" is already canonical and must not be aliased.`);return aliases[legacyAuthor]===canonicalHarness?!1:(aliases[legacyAuthor]=canonicalHarness,!0)}function applyVocabularyOperation(aliases,input){if(input.operation==="add")return applyAddOperation(aliases,input);if(input.operation==="remove"){const legacyAuthor=requireLegacyAuthor(input.legacy_author);return Object.hasOwn(aliases,legacyAuthor)?(delete aliases[legacyAuthor],!0):!1}if(input.operation==="clear"){const changed=Object.keys(aliases).length>0;for(const key of Object.keys(aliases))delete aliases[key];return changed}const exhaustive=input.operation;throw new Error(`Unsupported vocabulary operation: ${String(exhaustive)}`)}function summarizeAgentIdentityVocabulary(vocabulary){return{version:vocabulary?.version??1,alias_count:Object.keys(vocabulary?.aliases??{}).length}}function planAgentIdentityVocabularyMutation(current,input){const versionBefore=current?.version??1,aliases={...current?.aliases},changed=applyVocabularyOperation(aliases,input),vocabulary={version:changed?versionBefore+1:versionBefore,aliases:orderedAliases(aliases)};return{vocabulary,preview:{operation:input.operation,changed,version_before:versionBefore,version_after:vocabulary.version,alias_count:Object.keys(vocabulary.aliases).length,residual_author_count:countResidualAuthors(input.observed_authors,vocabulary.aliases)}}}export{planAgentIdentityVocabularyMutation,summarizeAgentIdentityVocabulary};
|
|
2
2
|
//# sourceMappingURL=identity-config.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]="8efedca0-725e-520f-ad06-825a0cccddaa")}catch{}})();import{findBootstrapCommandTokenIndex}from"../cli-contracts/bootstrap-command-scanner.js";import{resolvePmCommandOperation}from"../cli-contracts/command-aliases.js";import{resolveSubcommandFlagContractsForCommand}from"../cli-contracts/flag-contracts.js";const ITEM_ID_ALIAS_COMMANDS=new Set(["append","claim","close","close-task","comments","copy","delete","deps","docs","files","focus","get","history","history-compact","history-redact","history-repair","learnings","notes","pause-task","release","restore","start-task","test","update"]),ITEM_ID_ALIAS_SUBCOMMANDS=new Map([["files","discover"],["item","complete"]]),TRAILING_POSITIONAL_COUNTS=new Map([["append",1],["close",1],["close-task",1],["comments",1],["item complete",1],["learnings",1],["notes",1],["restore",1]]);function supportsItemIdAlias(commandName){const normalized=resolvePmCommandOperation(commandName?.trim().toLowerCase()??"");return ITEM_ID_ALIAS_COMMANDS.has(normalized)||ITEM_ID_ALIAS_SUBCOMMANDS.has(normalized)}function resolveNamespacedItemAddressIndex(argv,commandIndex,commandName){const fallback=ITEM_ID_ALIAS_COMMANDS.has(commandName)?commandIndex+1:void 0,leafOffset=findBootstrapCommandTokenIndex(argv.slice(commandIndex+1));if(leafOffset===void 0)return fallback;const leafIndex=commandIndex+1+leafOffset,candidate=`${commandName} ${argv[leafIndex]}`,operation=resolvePmCommandOperation(candidate);return operation===candidate?commandName==="item"&&argv[leafIndex]==="complete"?leafIndex+1:fallback:supportsItemIdAlias(operation)?resolveItemAddressIndex(argv,leafIndex,operation):void 0}function resolveItemAddressIndex(argv,commandIndex,commandName){if(["history","context","ctx","update","close","item"].includes(commandName))return resolveNamespacedItemAddressIndex(argv,commandIndex,commandName);const declaredSubcommand=ITEM_ID_ALIAS_SUBCOMMANDS.get(commandName);if(declaredSubcommand===void 0)return commandIndex+1;const usesDeclaredSubcommand=argv[commandIndex+1]?.toLowerCase()===declaredSubcommand;return commandIndex+(usesDeclaredSubcommand?2:1)}function buildFlagContractMap(commandPath){const contractsByFlag=new Map;for(const contract of resolveSubcommandFlagContractsForCommand(commandPath))for(const flag of[contract.flag,contract.short,...contract.aliases??[]])flag&&contractsByFlag.set(flag,contract);return contractsByFlag}function collectNamedItemIds(argv){const namedIds=[];for(let index=0;index<argv.length;index+=1){const token=argv[index];if(token==="--")break;token==="--id"?(namedIds.push({index,consumed:2,value:argv[index+1]}),index+=1):token.startsWith("--id=")&&namedIds.push({index,consumed:1,value:token.slice(5)})}return namedIds}function consumesSeparateFlagValue(token,nextToken,contractsByFlag){if(token.indexOf("=")>=0||nextToken===void 0||nextToken.startsWith("-"))return!1;const contract=contractsByFlag.get(token);return contract!==void 0&&contract.value_type!=="boolean"}function hasPositionalItemId(argv,addressIndex,commandPath,namedIndex,contractsByFlag){let trailingPositionals=0;for(let index=addressIndex;index<argv.length;index+=1){const token=argv[index];if(token==="--")break;if(token==="--id"){index+=1;continue}if(!token.startsWith("--id=")){if(!token.startsWith("-")){if(index<namedIndex)return!0;trailingPositionals+=1;continue}consumesSeparateFlagValue(token,argv[index+1],contractsByFlag)&&(index+=1)}}return trailingPositionals>(TRAILING_POSITIONAL_COUNTS.get(resolvePmCommandOperation(commandPath))??0)}function normalizeItemAddressInvocation(argv){const commandIndex=findBootstrapCommandTokenIndex(argv),commandName=commandIndex===void 0?void 0:argv[commandIndex]?.toLowerCase();if(commandName!=="context"&&commandName!=="ctx"&&!supportsItemIdAlias(commandName))return{argv:[...argv],changed:!1,conflict:!1};const addressIndex=resolveItemAddressIndex(argv,commandIndex,commandName);if(addressIndex===void 0)return{argv:[...argv],changed:!1,conflict:!1};const commandPath=addressIndex>commandIndex+1?`${resolvePmCommandOperation(argv.slice(commandIndex,addressIndex-1).join(" "))} ${argv[addressIndex-1]}`:commandName,contractsByFlag=buildFlagContractMap(commandPath),namedIds=collectNamedItemIds(argv),named=namedIds[0];if(!named||!named.value?.trim())return{argv:[...argv],changed:!1,conflict:!1};if(namedIds.length>1||hasPositionalItemId(argv,addressIndex,commandPath,named.index,contractsByFlag))return{argv:[...argv],changed:!1,conflict:!0,itemId:named.value};const withoutNamed=[...argv.slice(0,named.index),...argv.slice(named.index+named.consumed)],normalizedCommandIndex=findBootstrapCommandTokenIndex(withoutNamed),normalizedAddressIndex=resolveItemAddressIndex(withoutNamed,normalizedCommandIndex,commandName);return withoutNamed.splice(normalizedAddressIndex,0,named.value),{argv:withoutNamed,changed:!0,conflict:!1,itemId:named.value}}export{normalizeItemAddressInvocation,supportsItemIdAlias};
|
|
2
2
|
//# sourceMappingURL=item-addressing.js.map
|
|
@@ -1,2 +1,3 @@
|
|
|
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]="2b2197f3-7203-52c8-9cc7-f714b33a9306")}catch{}})();const PM_REFUSAL_CLOSURE_EXECUTABLE_CODE_BASELINE=16,PM_REFUSAL_CLOSURE_EXECUTABLE_CANONICAL_CODE_BASELINE=Object.freeze(["bulk_ids_input_empty","bulk_ids_input_missing_path","bulk_ids_input_unreadable","invalid_argument_value","missing_lifecycle_target","missing_required_argument","projection_options_mutually_exclusive","tracker_not_initialized","tracker_root_missing","tracker_root_not_directory","tracker_root_unreadable","unknown_context_intent","unknown_field_projection","unknown_option","unknown_subcommand"]),PM_REFUSAL_CLOSURE_EXECUTABLE_CODE_BASELINE_V2=18,PM_REFUSAL_CLOSURE_EXECUTABLE_CANONICAL_CODE_BASELINE_V2=Object.freeze([...PM_REFUSAL_CLOSURE_EXECUTABLE_CANONICAL_CODE_BASELINE,"manifest_unknown_key","no_version_bounds_declared"].sort((left,right)=>left.localeCompare(right)));function verifyPmRefusalClosureRatchet(report,baseline=PM_REFUSAL_CLOSURE_EXECUTABLE_CODE_BASELINE_V2){return{ok:report.executable_error_code_count>=baseline,baseline,actual:report.executable_error_code_count}}function verifyPmRefusalClosureIdentityRatchet(report,requiredCanonicalCodes=PM_REFUSAL_CLOSURE_EXECUTABLE_CANONICAL_CODE_BASELINE_V2){const executableCanonicalCodes=new Set(report.rows.filter(({disposition})=>disposition==="executable").map(({canonical_code:canonicalCode})=>canonicalCode)),missingRequiredCanonicalCodes=requiredCanonicalCodes.filter(code=>!executableCanonicalCodes.has(code));return{ok:missingRequiredCanonicalCodes.length===0,required_canonical_codes:[...requiredCanonicalCodes],missing_required_canonical_codes:missingRequiredCanonicalCodes}}function evidenceFor(evidence,canonicalCode){const existing=evidence.get(canonicalCode);if(existing)return existing;const created={kinds:new Set,probeIds:new Set};return evidence.set(canonicalCode,created),created}function buildPmRefusalClosureCensus(catalog,closedDomains,grammar){const canonicalByCode=new Map(catalog.map(contract=>[contract.code,contract.canonical_code??contract.code])),evidence=new Map;let closedDomainProbeCount=0,grammarProbeCount=0;for(const contract of catalog){const target=evidenceFor(evidence,contract.canonical_code??contract.code);for(const state of contract.owned_states??[])target.kinds.add("owned_state"),target.probeIds.add(state.probe_id)}for(const contract of closedDomains){const canonical=canonicalByCode.get(contract.error_code);if(canonical===void 0)continue;closedDomainProbeCount+=1;const target=evidenceFor(evidence,canonical);target.kinds.add("closed_domain"),target.probeIds.add(contract.probe_id)}for(const contract of grammar){const canonical=canonicalByCode.get(contract.error_code);if(canonical===void 0)continue;grammarProbeCount+=1;const target=evidenceFor(evidence,canonical);target.kinds.add("grammar"),target.probeIds.add(contract.probe_id)}const rows=catalog.map(contract=>{const canonicalCode=contract.canonical_code??contract.code,joined=evidence.get(canonicalCode),probeIds=[...joined.probeIds].sort();return{code:contract.code,canonical_code:canonicalCode,disposition:probeIds.length>0?"executable":"uncovered",evidence_kinds:[...joined.kinds].sort(),probe_ids:probeIds}}).sort((left,right)=>left.code<right.code?-1:1),uncoveredErrorCodes=rows.filter(({disposition})=>disposition==="uncovered").map(({code})=>code),executableCount=rows.length-uncoveredErrorCodes.length;return{ok:uncoveredErrorCodes.length===0,catalog_error_code_count:rows.length,executable_error_code_count:executableCount,uncovered_error_code_count:uncoveredErrorCodes.length,coverage_fraction:rows.length===0?1:executableCount/rows.length,closed_domain_probe_count:closedDomainProbeCount,grammar_probe_count:grammarProbeCount,uncovered_error_codes:uncoveredErrorCodes,rows}}function renderPmRefusalClosureCensusMarkdown(report){const rows=report.rows.map(row=>`| \`${row.code}\` | \`${row.canonical_code}\` | ${row.disposition} | ${row.evidence_kinds.join(", ")||"none"} | ${row.probe_ids.length} |`);return["# Generated refusal closure census","","Tracker: `pm-f05lsg`.","","Every catalog code is listed. An `uncovered` row is an explicit closure obligation, never an omission or implied approval.","",`- Catalog error codes: ${report.catalog_error_code_count}`,`- Executable error codes: ${report.executable_error_code_count}`,`- Executable-code ratchet floor: ${PM_REFUSAL_CLOSURE_EXECUTABLE_CODE_BASELINE_V2}`,`- Required executable canonical codes: ${PM_REFUSAL_CLOSURE_EXECUTABLE_CANONICAL_CODE_BASELINE_V2.map(code=>`\`${code}\``).join(", ")}`,`- Uncovered error codes: ${report.uncovered_error_code_count}`,`- Coverage fraction: ${report.coverage_fraction.toFixed(6)}`,`- Closed-domain probes: ${report.closed_domain_probe_count}`,`- Grammar probes: ${report.grammar_probe_count}`,"","| Error code | Canonical code | Disposition | Evidence kinds | Probe count |","| --- | --- | --- | --- | --- |",...rows,""].join(`
|
|
2
|
+
`)}export{PM_REFUSAL_CLOSURE_EXECUTABLE_CANONICAL_CODE_BASELINE,PM_REFUSAL_CLOSURE_EXECUTABLE_CANONICAL_CODE_BASELINE_V2,PM_REFUSAL_CLOSURE_EXECUTABLE_CODE_BASELINE,PM_REFUSAL_CLOSURE_EXECUTABLE_CODE_BASELINE_V2,buildPmRefusalClosureCensus,renderPmRefusalClosureCensusMarkdown,verifyPmRefusalClosureIdentityRatchet,verifyPmRefusalClosureRatchet};
|
|
2
3
|
//# sourceMappingURL=refusal-closure-census.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]="d252409d-e33e-5c9e-9671-789f0ee87312")}catch{}})();import{EXIT_CODE}from"../../core/shared/constants.js";function listContractObservationFindings(observation){return[observation.expected_error_code!==void 0&&observation.error_code!==observation.expected_error_code?{code:"error_code_mismatch",probe_id:observation.probe_id,detail:`Expected error code ${observation.expected_error_code}, received ${observation.error_code??"<missing>"}.`}:void 0,observation.expected_allowed_values!==void 0&&JSON.stringify([...observation.allowed_values].sort())!==JSON.stringify([...observation.expected_allowed_values].sort())?{code:"incomplete_allowed_values",probe_id:observation.probe_id,detail:"The refusal's accepted domain differs from the SDK-owned domain contract."}:void 0,observation.expected_suggested_retry_args!==void 0&&(observation.suggested_retry_args?.length??0)===0?{code:"missing_suggested_retry_args",probe_id:observation.probe_id,detail:"The refusal omitted shell-free suggested retry arguments."}:void 0,observation.expected_suggested_retry_args!==void 0&&(observation.suggested_retry_args?.length??0)>0&&JSON.stringify(observation.suggested_retry_args)!==JSON.stringify(observation.expected_suggested_retry_args)?{code:"suggested_retry_args_mismatch",probe_id:observation.probe_id,detail:"The refusal's suggested retry arguments differ from the SDK-owned contract."}:void 0]}function listObservationFindings(observation){return[observation.exit_code!==EXIT_CODE.USAGE?{code:"non_refusal_exit",probe_id:observation.probe_id,detail:`${observation.entrypoint} returned exit code ${observation.exit_code}; a structured usage refusal must return ${EXIT_CODE.USAGE}.`}:void 0,observation.allowed_values_required!==!1&&observation.allowed_values.length===0?{code:"missing_allowed_values",probe_id:observation.probe_id,detail:"The refusal omitted its complete accepted value domain."}:void 0,observation.allowed_values.includes(observation.rejected_value)?{code:"accepted_rejected_value",probe_id:observation.probe_id,detail:`${observation.rejected_value} is both rejected and advertised as allowed.`}:void 0,observation.suggested_retry.trim().length===0?{code:"missing_suggested_retry",probe_id:observation.probe_id,detail:"The refusal omitted an executable suggested retry."}:void 0,observation.retry_succeeded?void 0:{code:"retry_failed",probe_id:observation.probe_id,detail:"The advertised suggested retry did not succeed."},...listContractObservationFindings(observation)]}function scorePmRefusalClosure(observations){const findings=[],seen=new Set;let closedProbeCount=0;observations.length===0&&findings.push({code:"empty_corpus",probe_id:"corpus",detail:"At least one real refusal observation is required."});for(const observation of observations){if(seen.has(observation.probe_id)){findings.push({code:"duplicate_probe",probe_id:observation.probe_id,detail:`${observation.probe_id} was supplied more than once.`});continue}seen.add(observation.probe_id);const findingCount=findings.length;for(const finding of listObservationFindings(observation))finding!==void 0&&findings.push(finding);findings.length===findingCount&&(closedProbeCount+=1)}return findings.sort((left,right)=>left.probe_id!==right.probe_id?left.probe_id.localeCompare(right.probe_id):left.code.localeCompare(right.code)),{ok:findings.length===0,probe_count:seen.size,closed_probe_count:closedProbeCount,closure_fraction:seen.size===0?0:closedProbeCount/seen.size,findings}}export{scorePmRefusalClosure};
|
|
2
2
|
//# sourceMappingURL=refusal-closure.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]="39b4e1fe-a34a-5ffc-9447-eaf8c46863c7")}catch{}})();import{PLAN_SUBCOMMANDS}from"../lifecycle/plan.js";import{PROFILE_SUBCOMMANDS}from"../profile.js";import{SCHEMA_SUBCOMMANDS}from"../schema.js";import{GRAPH_SUBCOMMAND_VALUES,MERGE_SUBCOMMAND_VALUES}from"../cli-contracts/enum-contracts.js";import{PM_COMMAND_DESTINATION_CONTRACTS,PM_COMMAND_POSITIONAL_CONTRACTS,PM_POSITIONAL_ACTION_CONTRACTS}from"../cli-contracts/grammar-contracts.js";import{resolveSubcommandFlagContractsForCommand}from"../cli-contracts/flag-contracts.js";import{resolvePmCommandOperation}from"../cli-contracts/command-aliases.js";const REJECTED_ACTION="not-a-declared-action";function positionalPlaceholder(command,slot){if(command.startsWith("assurance ")&&slot.name==="kind")return"measurement";switch(slot.value_kind){case"integer":return"1";case"item_id":return"pm-domain";case"action":throw new Error(`Cannot synthesize a preceding action value for positional slot ${slot.name}.`);default:return"example"}}function probeSlug(value){return value.replaceAll(/[^a-z0-9]+/gu,"-").replaceAll(/^-|-$/gu,"")}function listPmRequiredArgumentRefusalContracts(contracts=PM_COMMAND_POSITIONAL_CONTRACTS.filter(contract=>PM_COMMAND_DESTINATION_CONTRACTS.some(destination=>destination.command===contract.command&&destination.disposition!=="package_owned"))){const rootProbeSlugs=new Set(contracts.filter(({command})=>!command.includes(" ")).map(({command})=>probeSlug(command)));return contracts.flatMap(contract=>contract.slots.flatMap((slot,index)=>{if(!slot.required)return[];const commandArguments=contract.command.split(" "),commandSlug=probeSlug(contract.command),commandProbeId=commandArguments.length>1&&rootProbeSlugs.has(commandSlug)?commandArguments.map(probeSlug).join("--"):commandSlug,requiredFlagArguments=resolveSubcommandFlagContractsForCommand(contract.command).flatMap(flagContract=>flagContract.required?[flagContract.flag,...flagContract.value_name?["example"]:[]]:[]),isVirtualAction=PM_POSITIONAL_ACTION_CONTRACTS.some(actionContract=>actionContract.command===contract.command);return[{probe_id:`required-argument-${commandProbeId}-${probeSlug(slot.name)}`,command:contract.command,refusal_args:[...commandArguments,...contract.slots.slice(0,index).map(priorSlot=>positionalPlaceholder(contract.command,priorSlot)),...requiredFlagArguments],recovery_args:[...commandArguments,"--help"],error_code:isVirtualAction&&!contract.command.startsWith("assurance ")?"invalid_argument_value":/^extension (?:activate|adopt|deactivate|uninstall)$/u.test(contract.command)?"missing_lifecycle_target":"missing_required_argument",missing_argument:slot.name,missing_argument_index:index}]})).sort((left,right)=>left.probe_id.localeCompare(right.probe_id))}function positionalActionValues(command){switch(resolvePmCommandOperation(command)){case"assurance":case"workspace snapshot":return PM_POSITIONAL_ACTION_CONTRACTS.filter(({parent})=>parent===command).map(({action})=>action);case"graph":return GRAPH_SUBCOMMAND_VALUES;case"merge":return MERGE_SUBCOMMAND_VALUES;case"plan":return PLAN_SUBCOMMANDS;case"profile":return PROFILE_SUBCOMMANDS;case"schema":return SCHEMA_SUBCOMMANDS;default:throw new Error(`Required positional action family ${command} has no authoritative value domain.`)}}function listPmSubcommandRefusalContracts(contracts=PM_COMMAND_POSITIONAL_CONTRACTS){return contracts.filter(({slots})=>slots[0]?.required===!0&&slots[0].value_kind==="action").map(({command})=>{const commandArguments=command.split(" ");return{probe_id:`unknown-subcommand-${probeSlug(command)}`,command,refusal_args:[...commandArguments,REJECTED_ACTION],recovery_args:[...commandArguments,"--help"],error_code:"unknown_subcommand",rejected_value:REJECTED_ACTION,allowed_values:[...positionalActionValues(command)].sort()}}).sort((left,right)=>left.probe_id.localeCompare(right.probe_id))}function sameValues(left,right){const sortedRight=[...right].sort();return left.length===right.length&&[...left].sort().every((value,index)=>value===sortedRight[index])}function scoreGrammarRefusalObservation(contract,observation){if(!observation)return[{code:"refusal_probe_missing",probe_id:contract.probe_id,detail:`${contract.probe_id} has no runtime observation.`}];const findings=[];return observation.error_code!==contract.error_code&&findings.push({code:"refusal_error_code_mismatch",probe_id:contract.probe_id,detail:`${contract.probe_id} emitted ${observation.error_code||"<none>"}; expected ${contract.error_code}.`}),observation.exit_code!==2&&findings.push({code:"refusal_exit_code_mismatch",probe_id:contract.probe_id,detail:`${contract.probe_id} exited ${observation.exit_code}; expected usage exit 2.`}),"allowed_values"in contract&&!sameValues(observation.allowed_values,contract.allowed_values)&&findings.push({code:"refusal_allowed_values_mismatch",probe_id:contract.probe_id,detail:`${contract.probe_id} did not expose its complete action domain.`}),observation.recovery_succeeded||findings.push({code:"refusal_recovery_failed",probe_id:contract.probe_id,detail:`${contract.probe_id} help recovery did not succeed.`}),observation.refusal_mutated_state&&findings.push({code:"refusal_mutated_state",probe_id:contract.probe_id,detail:`${contract.probe_id} changed tracker state while refusing input${observation.mutated_paths?.length?`: ${observation.mutated_paths.join(", ")}`:"."}`}),findings}function scorePmGrammarRefusalClosure(contracts,observations){const contractsById=new Map(contracts.map(contract=>[contract.probe_id,contract])),observationsById=new Map(observations.map(observation=>[observation.probe_id,observation])),findings=[...contracts.flatMap(contract=>scoreGrammarRefusalObservation(contract,observationsById.get(contract.probe_id))),...observations.filter(observation=>!contractsById.has(observation.probe_id)).map(observation=>({code:"unexpected_refusal_probe",probe_id:observation.probe_id,detail:`${observation.probe_id} has no declared grammar refusal contract.`}))];findings.sort((left,right)=>left.probe_id.localeCompare(right.probe_id)||left.code.localeCompare(right.code));const failedProbeIds=new Set(findings.map(({probe_id:probeId})=>probeId));return{ok:findings.length===0,probe_count:contracts.length,closed_probe_count:contracts.filter(({probe_id:probeId})=>!failedProbeIds.has(probeId)).length,findings}}export{listPmRequiredArgumentRefusalContracts,listPmSubcommandRefusalContracts,scorePmGrammarRefusalClosure};
|
|
2
2
|
//# sourceMappingURL=refusal-corpus-contracts.js.map
|
|
@@ -1,2 +1,4 @@
|
|
|
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]="81067f95-115f-5aee-b649-55d86c3915d4")}catch(e2){}})();import*as nodeModule from"node:module";const PM_RECOVERY_REFERENCE_KINDS=["suggested_retry","candidate_command","example","next_step","migration_hint","restore_with"];const RECOVERY_REFERENCE_FIELD_CONTRACTS={suggested_retry:{kind:"suggested_retry",semantics:"recovery"},retry_command:{kind:"suggested_retry",semantics:"recovery"},candidate_command:{kind:"candidate_command",semantics:"recovery"},candidate_commands:{kind:"candidate_command",semantics:"recovery"},fallback_candidates:{kind:"candidate_command",semantics:"recovery",nested_value_field:"command"},next_best_command:{kind:"candidate_command",semantics:"recovery"},example:{kind:"example",semantics:"recovery"},examples:{kind:"example",semantics:"recovery"},next_step:{kind:"next_step",semantics:"recovery"},next_steps:{kind:"next_step",semantics:"recovery"},suggested_next_steps:{kind:"next_step",semantics:"recovery"},migration_hint:{kind:"migration_hint",semantics:"replacement"},migration_hints:{kind:"migration_hint",semantics:"replacement"},restore_with:{kind:"restore_with",semantics:"behavior_preserving"}};const PM_RECOVERY_REFERENCE_FIELDS=Object.freeze(Object.keys(RECOVERY_REFERENCE_FIELD_CONTRACTS));function recoveryReferenceContract(field){if(!Object.hasOwn(RECOVERY_REFERENCE_FIELD_CONTRACTS,field))return void 0;return RECOVERY_REFERENCE_FIELD_CONTRACTS[field]}const SOURCE_REGEXP_PREFIX_PUNCTUATORS=new Set([..."=([{,:;!?&|+-*%^~<>","=>"]);function compareCodeUnits(left,right){return left<right?-1:left>right?1:0}function skipQuotedSourceToken(source,index){const quote=source[index];let next=index+1;let value="";while(next<source.length&&source[next]!==quote){if(source[next]==="\\")next+=2;else{value+=source[next];next+=1}}if(source[next]===quote)next+=1;return{next,value}}function canStartRegularExpression(previous){return previous===void 0||previous.kind==="punctuator"&&SOURCE_REGEXP_PREFIX_PUNCTUATORS.has(previous.value)||previous.kind==="identifier"&&["return","case","throw","else","yield"].includes(previous.value)}function sourceTriviaEnd(source,index){if(/\s/u.test(source[index]))return index+1;if(source.startsWith("//",index)){const newline=source.indexOf("\n",index+2);return newline===-1?source.length:newline+1}if(!source.startsWith("/*",index))return void 0;return source.indexOf("*/",index+2)+2}function regularExpressionEnd(source,index,previous){if(source[index]!=="/"||!canStartRegularExpression(previous))return void 0;let next=index+1;let inClass=false;while(next<source.length){if(source[next]==="\\")next+=2;else if(source[next]==="["){inClass=true;next+=1}else if(source[next]==="]"){inClass=false;next+=1}else if(source[next]==="/"&&!inClass){next+=1;while(/[A-Za-z]/u.test(source.charAt(next)))next+=1;return next}else next+=1}return next}function readSourceSyntaxToken(source,index){const character=source[index];if(character==="'"||character==='"'||character==="`"){const quoted=skipQuotedSourceToken(source,index);return character==="`"?{next:quoted.next}:{next:quoted.next,token:{kind:"string",value:quoted.value,offset:index+1}}}if(/[A-Za-z_$]/u.test(character)){let next=index+1;while(/[A-Za-z0-9_$]/u.test(source[next]??""))next+=1;return{next,token:{kind:"identifier",value:source.slice(index,next),offset:index}}}const punctuator=source.startsWith("=>",index)?"=>":character;return{next:index+punctuator.length,token:{kind:"punctuator",value:punctuator,offset:index}}}function tokenizeExecutableSource(source){const tokens=[];let index=0;while(index<source.length){const ignoredEnd=sourceTriviaEnd(source,index);if(ignoredEnd!==void 0){index=ignoredEnd;continue}const regexEnd=regularExpressionEnd(source,index,tokens.at(-1));if(regexEnd!==void 0){index=regexEnd;continue}const read=readSourceSyntaxToken(source,index);if(read.token)tokens.push(read.token);index=read.next}return tokens}const SOURCE_BRACE_FRAME_KINDS=new Set(["object","block","pattern"]);const SOURCE_PATTERN_DECLARATIONS=new Set(["const","let","var"]);const SOURCE_CLOSING_TOKENS=new Set(["}",")","]"]);const SOURCE_OBJECT_PRECEDERS=new Set(["=","(","[",",",":","?","return"]);function objectFrameKind(tokens,index,stack){const enclosingBrace=[...stack].reverse().find(frame=>SOURCE_BRACE_FRAME_KINDS.has(frame.kind));if(enclosingBrace?.kind==="pattern")return"pattern";if(stack.at(-1)?.kind==="paren"&&stack.at(-1)?.parameter_list)return"pattern";const previous=tokens[index-1];if(previous?.kind==="identifier"&&SOURCE_PATTERN_DECLARATIONS.has(previous.value)){return"pattern"}if(previous?.value==="=>"||previous?.value===")")return"block";return previous&&SOURCE_OBJECT_PRECEDERS.has(previous.value)?"object":"block"}function openingSourceFrame(tokens,index,stack){const token=tokens[index];if(token.value==="{"){const kind=objectFrameKind(tokens,index,stack);return{kind,...kind==="object"?{member_start:true,candidates:[]}:{}}}if(token.value==="[")return{kind:"array"};if(token.value!=="(")return void 0;const previous=tokens[index-1];const beforePrevious=tokens[index-2];const parameterList=previous?.value==="function"||beforePrevious?.value==="function";return{kind:"paren",...parameterList?{parameter_list:true}:{}}}function staticObjectMember(frame,token,next){if(frame?.kind!=="object"||!frame.member_start||token.kind!=="identifier"&&token.kind!=="string"||next?.value!==":"||!/^[A-Za-z][A-Za-z0-9_]*$/u.test(token.value)){return void 0}return{field:token.value,offset:token.offset}}function isPatternLikeObjectClosure(tokens,index){return tokens[index+1]?.value===")"&&tokens[index+2]?.value==="=>"||tokens[index+1]?.value==="="}function scanSourcePropertyTokens(source){const tokens=tokenizeExecutableSource(nodeModule.stripTypeScriptTypes(source,{mode:"strip"}));const properties=[];const stack=[];for(const[index,token]of tokens.entries()){const frame=stack.at(-1);const property=staticObjectMember(frame,token,tokens[index+1]);if(property)frame.candidates.push(property);const opening=openingSourceFrame(tokens,index,stack);if(opening){stack.push(opening)}else if(SOURCE_CLOSING_TOKENS.has(token.value)){const closed=stack.pop();if(closed?.kind==="object"&&!isPatternLikeObjectClosure(tokens,index)){properties.push(...closed.candidates)}}else if(token.value===","&&frame?.kind==="object"){frame.member_start=true}else if(frame?.kind==="object"&&token.value!==":"){frame.member_start=false}}return properties}function sourceLineStarts(source){const starts=[0];for(let index=0;index<source.length;index+=1){if(source[index]==="\n")starts.push(index+1)}return starts}function sourceLineAtOffset(starts,offset){let low=0;let high=starts.length;while(low<high){const middle=Math.floor((low+high)/2);if(starts[middle]<=offset)low=middle+1;else high=middle}return low}function censusPmRecoveryReferenceProducers(sources){const producers=[];const findings=[];for(const source of[...sources].sort((left,right)=>compareCodeUnits(left.path,right.path))){const lineStarts=sourceLineStarts(source.content);let properties;try{properties=scanSourcePropertyTokens(source.content)}catch(error){findings.push({kind:"invalid_source",subject:source.path,detail:`${source.path} could not be parsed for recovery producers: ${String(error)}.`});continue}for(const property of properties){const field=property.field;const line=sourceLineAtOffset(lineStarts,property.offset);const contract=recoveryReferenceContract(field);if(contract){producers.push({path:source.path,line,field,kind:contract.kind})}else if(/(?:retry_command|candidate_command|fallback_candidate|next_best_command|example|next_step|migration_hint|restore_with)/u.test(field)&&!/(?:_total|_truncated)$/u.test(field)){findings.push({kind:"unknown_recovery_field",subject:`${source.path}:${line}:${field}`,detail:`${field} resembles a recovery reference but has no typed field contract.`})}}}const producerCountByKind=Object.fromEntries(PM_RECOVERY_REFERENCE_KINDS.map(kind=>[kind,producers.filter(producer=>producer.kind===kind).length]));for(const kind of PM_RECOVERY_REFERENCE_KINDS){if(producerCountByKind[kind]===0){findings.push({kind:"missing_kind_producer",subject:kind,detail:`No source producer emits the ${kind} recovery-reference kind.`})}}producers.sort((left,right)=>left.path!==right.path?compareCodeUnits(left.path,right.path):left.line!==right.line?left.line-right.line:compareCodeUnits(left.field,right.field));findings.sort((left,right)=>left.subject!==right.subject?compareCodeUnits(left.subject,right.subject):compareCodeUnits(left.kind,right.kind));return{ok:findings.length===0,scanned_file_count:sources.length,producer_count:producers.length,producer_count_by_kind:producerCountByKind,producers,findings}}function derivePmRecoveryReferenceObligations(probeId,envelope){const obligations=[];const visit=(value,path)=>{if(Array.isArray(value)){value.forEach((entry,index)=>visit(entry,[...path,String(index)]));return}if(typeof value!=="object"||value===null)return;for(const[key,entry]of Object.entries(value).sort(([left],[right])=>compareCodeUnits(left,right))){const baseContract=recoveryReferenceContract(key);const contract=baseContract?.kind==="migration_hint"&&value.semantics==="behavior_preserving"?{...baseContract,semantics:"behavior_preserving"}:baseContract;const entries=[entry].flat();if(contract!==void 0){entries.forEach((candidate,index)=>{const nestedValueField="nested_value_field"in contract&&typeof contract.nested_value_field==="string"?contract.nested_value_field:void 0;const resolvedCandidate=nestedValueField&&typeof candidate==="object"&&candidate!==null&&!Array.isArray(candidate)?candidate[nestedValueField]:candidate;if(typeof resolvedCandidate!=="string"||resolvedCandidate.trim().length===0)return;const coordinate=[...path,key,String(index)].map(segment=>encodeURIComponent(segment)).join("/");obligations.push({id:`${probeId}:${contract.kind}:${coordinate}`,probe_id:probeId,kind:contract.kind,semantics:contract.semantics,value:resolvedCandidate})})}visit(entry,[...path,key])}};visit(envelope,[]);return obligations}function verifyPmRefusalReachability(catalog,observations){const declarations=catalog.flatMap(contract=>(contract.owned_states??[]).map(state=>({contract,state})));const findings=[];const observationsByProbe=new Map;for(const observation of observations){if(observationsByProbe.has(observation.probe_id)){findings.push({kind:"duplicate_probe",probe_id:observation.probe_id,detail:`Observation ${observation.probe_id} was supplied more than once.`});continue}observationsByProbe.set(observation.probe_id,observation)}const declaredProbeIds=new Set(declarations.map(({state})=>state.probe_id));for(const{contract,state}of declarations){const observation=observationsByProbe.get(state.probe_id);if(!observation){findings.push({kind:"missing_probe",probe_id:state.probe_id,detail:`No entrypoint observation was recorded for ${contract.code}.`});continue}if(observation.code!==contract.code){findings.push({kind:"wrong_error_code",probe_id:state.probe_id,detail:`Expected ${contract.code}; observed ${observation.code}.`})}if(observation.exit_class!==state.expected_exit_class){findings.push({kind:"wrong_exit_class",probe_id:state.probe_id,detail:`Expected ${state.expected_exit_class}; observed ${observation.exit_class}.`})}if(!state.entrypoints.includes(observation.entrypoint)){findings.push({kind:"wrong_entrypoint",probe_id:state.probe_id,detail:`Expected one of ${state.entrypoints.join(", ")}; observed ${observation.entrypoint}.`})}}for(const observation of observations){if(!declaredProbeIds.has(observation.probe_id)){findings.push({kind:"undeclared_probe",probe_id:observation.probe_id,detail:`Observation ${observation.probe_id} has no catalog declaration.`})}}findings.sort((left,right)=>left.probe_id!==right.probe_id?left.probe_id.localeCompare(right.probe_id):left.kind.localeCompare(right.kind));return{ok:findings.length===0,declared_probe_count:declarations.length,observed_probe_count:observations.length,findings}}function verifyPmRecoveryReferences(obligations,observations){const findings=[];const declaredIds=new Set;const duplicateIds=new Set;for(const obligation of obligations){if(declaredIds.has(obligation.id)){duplicateIds.add(obligation.id);findings.push({kind:"duplicate_obligation",reference_id:obligation.id,detail:`Recovery obligation ${obligation.id} was declared more than once.`});continue}declaredIds.add(obligation.id)}const observationsById=new Map;for(const observation of observations){if(observationsById.has(observation.id)){findings.push({kind:"duplicate_observation",reference_id:observation.id,detail:`Recovery reference ${observation.id} was observed more than once.`});continue}observationsById.set(observation.id,observation);if(!declaredIds.has(observation.id)){findings.push({kind:"undeclared_observation",reference_id:observation.id,detail:`Recovery observation ${observation.id} has no emitted obligation.`})}}for(const obligation of obligations){if(duplicateIds.has(obligation.id))continue;const observation=observationsById.get(obligation.id);if(!observation){findings.push({kind:"missing_observation",reference_id:obligation.id,detail:`No reachability proof was recorded for ${obligation.kind} ${obligation.value}.`})}else if(!observation.reachable){findings.push({kind:"unreachable_reference",reference_id:obligation.id,detail:`Recovery reference ${obligation.value} did not reach its promised target.`})}else if(observation.semantics!==obligation.semantics){findings.push({kind:"wrong_semantics",reference_id:obligation.id,detail:`Recovery reference ${obligation.value} promised ${obligation.semantics}; proof demonstrated ${observation.semantics}.`})}}const coverageByKind=PM_RECOVERY_REFERENCE_KINDS.map(kind=>{const kindObligations=obligations.filter(obligation=>obligation.kind===kind);const kindObservations=kindObligations.filter(obligation=>!duplicateIds.has(obligation.id)).map(obligation=>observationsById.get(obligation.id)).filter(observation=>observation!==void 0);return{kind,declared:kindObligations.length,observed:kindObservations.length,passed:kindObligations.filter(obligation=>{const observation=observationsById.get(obligation.id);return!duplicateIds.has(obligation.id)&&observation?.reachable===true&&observation.semantics===obligation.semantics}).length}});findings.sort((left,right)=>left.reference_id!==right.reference_id?left.reference_id.localeCompare(right.reference_id):left.kind.localeCompare(right.kind));const passed=coverageByKind.reduce((total,coverage)=>total+coverage.passed,0);return{ok:findings.length===0,declared_reference_count:obligations.length,observed_reference_count:observations.length,pass_fraction:declaredIds.size===0?1:passed/declaredIds.size,coverage_by_kind:coverageByKind,findings}}function verifyPmRecoveryProducerRuntimeCoverage(census,obligations){const runtimeValuesByKind=new Map(PM_RECOVERY_REFERENCE_KINDS.map(kind=>[kind,new Set]));for(const obligation of obligations){runtimeValuesByKind.get(obligation.kind).add(obligation.value)}const coverageByKind=PM_RECOVERY_REFERENCE_KINDS.map(kind=>({kind,source_producers:census.producer_count_by_kind[kind],runtime_values:runtimeValuesByKind.get(kind).size}));const missingRuntimeKinds=coverageByKind.filter(({source_producers:sourceProducers,runtime_values:runtimeValues})=>sourceProducers>0&&runtimeValues===0).map(({kind})=>kind);return{ok:census.ok&&missingRuntimeKinds.length===0,source_producer_count:census.producer_count,runtime_value_count:coverageByKind.reduce((total,{runtime_values:runtimeValues})=>total+runtimeValues,0),coverage_by_kind:coverageByKind,missing_runtime_kinds:missingRuntimeKinds}}const verifyPmRecoveryKindRuntimeCoverage=verifyPmRecoveryProducerRuntimeCoverage;export{PM_RECOVERY_REFERENCE_FIELDS,PM_RECOVERY_REFERENCE_KINDS,censusPmRecoveryReferenceProducers,derivePmRecoveryReferenceObligations,verifyPmRecoveryKindRuntimeCoverage,verifyPmRecoveryProducerRuntimeCoverage,verifyPmRecoveryReferences,verifyPmRefusalReachability};
|
|
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]="7a1d7194-6ff1-5365-ab64-80b47b0176d7")}catch{}})();import*as nodeModule from"node:module";const PM_RECOVERY_REFERENCE_KINDS=["suggested_retry","candidate_command","example","next_step","migration_hint","restore_with"],RECOVERY_REFERENCE_FIELD_CONTRACTS={suggested_retry:{kind:"suggested_retry",semantics:"recovery"},retry_command:{kind:"suggested_retry",semantics:"recovery"},candidate_command:{kind:"candidate_command",semantics:"recovery"},candidate_commands:{kind:"candidate_command",semantics:"recovery"},fallback_candidates:{kind:"candidate_command",semantics:"recovery",nested_value_field:"command"},next_best_command:{kind:"candidate_command",semantics:"recovery"},example:{kind:"example",semantics:"recovery"},examples:{kind:"example",semantics:"recovery"},next_step:{kind:"next_step",semantics:"recovery"},next_steps:{kind:"next_step",semantics:"recovery"},suggested_next_steps:{kind:"next_step",semantics:"recovery"},migration_hint:{kind:"migration_hint",semantics:"replacement"},migration_hints:{kind:"migration_hint",semantics:"replacement"},restore_with:{kind:"restore_with",semantics:"behavior_preserving"}},PM_RECOVERY_REFERENCE_FIELDS=Object.freeze(Object.keys(RECOVERY_REFERENCE_FIELD_CONTRACTS));function recoveryReferenceContract(field){if(Object.hasOwn(RECOVERY_REFERENCE_FIELD_CONTRACTS,field))return RECOVERY_REFERENCE_FIELD_CONTRACTS[field]}const SOURCE_REGEXP_PREFIX_PUNCTUATORS=new Set([..."=([{,:;!?&|+-*%^~<>","=>"]);function compareCodeUnits(left,right){return left<right?-1:left>right?1:0}function skipQuotedSourceToken(source,index){const quote=source[index];let next=index+1,value="";for(;next<source.length&&source[next]!==quote;)source[next]==="\\"?next+=2:(value+=source[next],next+=1);return source[next]===quote&&(next+=1),{next,value}}function canStartRegularExpression(previous){return previous===void 0||previous.kind==="punctuator"&&SOURCE_REGEXP_PREFIX_PUNCTUATORS.has(previous.value)||previous.kind==="identifier"&&["return","case","throw","else","yield"].includes(previous.value)}function sourceTriviaEnd(source,index){if(/\s/u.test(source[index]))return index+1;if(source.startsWith("//",index)){const newline=source.indexOf(`
|
|
2
|
+
`,index+2);return newline===-1?source.length:newline+1}if(source.startsWith("/*",index))return source.indexOf("*/",index+2)+2}function regularExpressionEnd(source,index,previous){if(source[index]!=="/"||!canStartRegularExpression(previous))return;let next=index+1,inClass=!1;for(;next<source.length;)if(source[next]==="\\")next+=2;else if(source[next]==="[")inClass=!0,next+=1;else if(source[next]==="]")inClass=!1,next+=1;else if(source[next]==="/"&&!inClass){for(next+=1;/[A-Za-z]/u.test(source.charAt(next));)next+=1;return next}else next+=1;return next}function readSourceSyntaxToken(source,index){const character=source[index];if(character==="'"||character==='"'||character==="`"){const quoted=skipQuotedSourceToken(source,index);return character==="`"?{next:quoted.next}:{next:quoted.next,token:{kind:"string",value:quoted.value,offset:index+1}}}if(/[A-Za-z_$]/u.test(character)){let next=index+1;for(;/[A-Za-z0-9_$]/u.test(source[next]??"");)next+=1;return{next,token:{kind:"identifier",value:source.slice(index,next),offset:index}}}const punctuator=source.startsWith("=>",index)?"=>":character;return{next:index+punctuator.length,token:{kind:"punctuator",value:punctuator,offset:index}}}function tokenizeExecutableSource(source){const tokens=[];let index=0;for(;index<source.length;){const ignoredEnd=sourceTriviaEnd(source,index);if(ignoredEnd!==void 0){index=ignoredEnd;continue}const regexEnd=regularExpressionEnd(source,index,tokens.at(-1));if(regexEnd!==void 0){index=regexEnd;continue}const read=readSourceSyntaxToken(source,index);read.token&&tokens.push(read.token),index=read.next}return tokens}const SOURCE_BRACE_FRAME_KINDS=new Set(["object","block","pattern"]),SOURCE_PATTERN_DECLARATIONS=new Set(["const","let","var"]),SOURCE_CLOSING_TOKENS=new Set(["}",")","]"]),SOURCE_OBJECT_PRECEDERS=new Set(["=","(","[",",",":","?","return"]);function objectFrameKind(tokens,index,stack){if([...stack].reverse().find(frame=>SOURCE_BRACE_FRAME_KINDS.has(frame.kind))?.kind==="pattern"||stack.at(-1)?.kind==="paren"&&stack.at(-1)?.parameter_list)return"pattern";const previous=tokens[index-1];return previous?.kind==="identifier"&&SOURCE_PATTERN_DECLARATIONS.has(previous.value)?"pattern":previous?.value==="=>"||previous?.value===")"?"block":previous&&SOURCE_OBJECT_PRECEDERS.has(previous.value)?"object":"block"}function openingSourceFrame(tokens,index,stack){const token=tokens[index];if(token.value==="{"){const kind=objectFrameKind(tokens,index,stack);return{kind,...kind==="object"?{member_start:!0,candidates:[]}:{}}}if(token.value==="[")return{kind:"array"};if(token.value!=="(")return;const previous=tokens[index-1],beforePrevious=tokens[index-2];return{kind:"paren",...previous?.value==="function"||beforePrevious?.value==="function"?{parameter_list:!0}:{}}}function staticObjectMember(frame,token,next){if(!(frame?.kind!=="object"||!frame.member_start||token.kind!=="identifier"&&token.kind!=="string"||next?.value!==":"||!/^[A-Za-z][A-Za-z0-9_]*$/u.test(token.value)))return{field:token.value,offset:token.offset}}function isPatternLikeObjectClosure(tokens,index){return tokens[index+1]?.value===")"&&tokens[index+2]?.value==="=>"||tokens[index+1]?.value==="="}function scanSourcePropertyTokens(source){const tokens=tokenizeExecutableSource(nodeModule.stripTypeScriptTypes(source,{mode:"strip"})),properties=[],stack=[];for(const[index,token]of tokens.entries()){const frame=stack.at(-1),property=staticObjectMember(frame,token,tokens[index+1]);property&&frame.candidates.push(property);const opening=openingSourceFrame(tokens,index,stack);if(opening)stack.push(opening);else if(SOURCE_CLOSING_TOKENS.has(token.value)){const closed=stack.pop();closed?.kind==="object"&&!isPatternLikeObjectClosure(tokens,index)&&properties.push(...closed.candidates)}else token.value===","&&frame?.kind==="object"?frame.member_start=!0:frame?.kind==="object"&&token.value!==":"&&(frame.member_start=!1)}return properties}function sourceLineStarts(source){const starts=[0];for(let index=0;index<source.length;index+=1)source[index]===`
|
|
3
|
+
`&&starts.push(index+1);return starts}function sourceLineAtOffset(starts,offset){let low=0,high=starts.length;for(;low<high;){const middle=Math.floor((low+high)/2);starts[middle]<=offset?low=middle+1:high=middle}return low}function censusPmRecoveryReferenceProducers(sources){const producers=[],findings=[];for(const source of[...sources].sort((left,right)=>compareCodeUnits(left.path,right.path))){const lineStarts=sourceLineStarts(source.content);let properties;try{properties=scanSourcePropertyTokens(source.content)}catch(error){findings.push({kind:"invalid_source",subject:source.path,detail:`${source.path} could not be parsed for recovery producers: ${String(error)}.`});continue}for(const property of properties){const field=property.field,line=sourceLineAtOffset(lineStarts,property.offset),contract=recoveryReferenceContract(field);contract?producers.push({path:source.path,line,field,kind:contract.kind}):/(?:retry_command|candidate_command|fallback_candidate|next_best_command|example|next_step|migration_hint|restore_with)/u.test(field)&&!/(?:_total|_truncated)$/u.test(field)&&findings.push({kind:"unknown_recovery_field",subject:`${source.path}:${line}:${field}`,detail:`${field} resembles a recovery reference but has no typed field contract.`})}}const producerCountByKind=Object.fromEntries(PM_RECOVERY_REFERENCE_KINDS.map(kind=>[kind,producers.filter(producer=>producer.kind===kind).length]));for(const kind of PM_RECOVERY_REFERENCE_KINDS)producerCountByKind[kind]===0&&findings.push({kind:"missing_kind_producer",subject:kind,detail:`No source producer emits the ${kind} recovery-reference kind.`});return producers.sort((left,right)=>left.path!==right.path?compareCodeUnits(left.path,right.path):left.line!==right.line?left.line-right.line:compareCodeUnits(left.field,right.field)),findings.sort((left,right)=>left.subject!==right.subject?compareCodeUnits(left.subject,right.subject):compareCodeUnits(left.kind,right.kind)),{ok:findings.length===0,scanned_file_count:sources.length,producer_count:producers.length,producer_count_by_kind:producerCountByKind,producers,findings}}function derivePmRecoveryReferenceObligations(probeId,envelope){const obligations=[],visit=(value,path)=>{if(Array.isArray(value)){value.forEach((entry,index)=>visit(entry,[...path,String(index)]));return}if(!(typeof value!="object"||value===null))for(const[key,entry]of Object.entries(value).sort(([left],[right])=>compareCodeUnits(left,right))){const baseContract=recoveryReferenceContract(key),contract=baseContract?.kind==="migration_hint"&&value.semantics==="behavior_preserving"?{...baseContract,semantics:"behavior_preserving"}:baseContract,entries=[entry].flat();contract!==void 0&&entries.forEach((candidate,index)=>{const nestedValueField="nested_value_field"in contract&&typeof contract.nested_value_field=="string"?contract.nested_value_field:void 0,resolvedCandidate=nestedValueField&&typeof candidate=="object"&&candidate!==null&&!Array.isArray(candidate)?candidate[nestedValueField]:candidate;if(typeof resolvedCandidate!="string"||resolvedCandidate.trim().length===0)return;const coordinate=[...path,key,String(index)].map(segment=>encodeURIComponent(segment)).join("/");obligations.push({id:`${probeId}:${contract.kind}:${coordinate}`,probe_id:probeId,kind:contract.kind,semantics:contract.semantics,value:resolvedCandidate})}),visit(entry,[...path,key])}};return visit(envelope,[]),obligations}function verifyPmRefusalReachability(catalog,observations){const declarations=catalog.flatMap(contract=>(contract.owned_states??[]).map(state=>({contract,state}))),findings=[],observationsByProbe=new Map;for(const observation of observations){if(observationsByProbe.has(observation.probe_id)){findings.push({kind:"duplicate_probe",probe_id:observation.probe_id,detail:`Observation ${observation.probe_id} was supplied more than once.`});continue}observationsByProbe.set(observation.probe_id,observation)}const declaredProbeIds=new Set(declarations.map(({state})=>state.probe_id));for(const{contract,state}of declarations){const observation=observationsByProbe.get(state.probe_id);if(!observation){findings.push({kind:"missing_probe",probe_id:state.probe_id,detail:`No entrypoint observation was recorded for ${contract.code}.`});continue}observation.code!==contract.code&&findings.push({kind:"wrong_error_code",probe_id:state.probe_id,detail:`Expected ${contract.code}; observed ${observation.code}.`}),observation.exit_class!==state.expected_exit_class&&findings.push({kind:"wrong_exit_class",probe_id:state.probe_id,detail:`Expected ${state.expected_exit_class}; observed ${observation.exit_class}.`}),state.entrypoints.includes(observation.entrypoint)||findings.push({kind:"wrong_entrypoint",probe_id:state.probe_id,detail:`Expected one of ${state.entrypoints.join(", ")}; observed ${observation.entrypoint}.`})}for(const observation of observations)declaredProbeIds.has(observation.probe_id)||findings.push({kind:"undeclared_probe",probe_id:observation.probe_id,detail:`Observation ${observation.probe_id} has no catalog declaration.`});return findings.sort((left,right)=>left.probe_id!==right.probe_id?left.probe_id.localeCompare(right.probe_id):left.kind.localeCompare(right.kind)),{ok:findings.length===0,declared_probe_count:declarations.length,observed_probe_count:observations.length,findings}}function verifyPmRecoveryReferences(obligations,observations){const findings=[],declaredIds=new Set,duplicateIds=new Set;for(const obligation of obligations){if(declaredIds.has(obligation.id)){duplicateIds.add(obligation.id),findings.push({kind:"duplicate_obligation",reference_id:obligation.id,detail:`Recovery obligation ${obligation.id} was declared more than once.`});continue}declaredIds.add(obligation.id)}const observationsById=new Map;for(const observation of observations){if(observationsById.has(observation.id)){findings.push({kind:"duplicate_observation",reference_id:observation.id,detail:`Recovery reference ${observation.id} was observed more than once.`});continue}observationsById.set(observation.id,observation),declaredIds.has(observation.id)||findings.push({kind:"undeclared_observation",reference_id:observation.id,detail:`Recovery observation ${observation.id} has no emitted obligation.`})}for(const obligation of obligations){if(duplicateIds.has(obligation.id))continue;const observation=observationsById.get(obligation.id);observation?observation.reachable?observation.semantics!==obligation.semantics&&findings.push({kind:"wrong_semantics",reference_id:obligation.id,detail:`Recovery reference ${obligation.value} promised ${obligation.semantics}; proof demonstrated ${observation.semantics}.`}):findings.push({kind:"unreachable_reference",reference_id:obligation.id,detail:`Recovery reference ${obligation.value} did not reach its promised target.`}):findings.push({kind:"missing_observation",reference_id:obligation.id,detail:`No reachability proof was recorded for ${obligation.kind} ${obligation.value}.`})}const coverageByKind=PM_RECOVERY_REFERENCE_KINDS.map(kind=>{const kindObligations=obligations.filter(obligation=>obligation.kind===kind),kindObservations=kindObligations.filter(obligation=>!duplicateIds.has(obligation.id)).map(obligation=>observationsById.get(obligation.id)).filter(observation=>observation!==void 0);return{kind,declared:kindObligations.length,observed:kindObservations.length,passed:kindObligations.filter(obligation=>{const observation=observationsById.get(obligation.id);return!duplicateIds.has(obligation.id)&&observation?.reachable===!0&&observation.semantics===obligation.semantics}).length}});findings.sort((left,right)=>left.reference_id!==right.reference_id?left.reference_id.localeCompare(right.reference_id):left.kind.localeCompare(right.kind));const passed=coverageByKind.reduce((total,coverage)=>total+coverage.passed,0);return{ok:findings.length===0,declared_reference_count:obligations.length,observed_reference_count:observations.length,pass_fraction:declaredIds.size===0?1:passed/declaredIds.size,coverage_by_kind:coverageByKind,findings}}function verifyPmRecoveryProducerRuntimeCoverage(census,obligations){const runtimeValuesByKind=new Map(PM_RECOVERY_REFERENCE_KINDS.map(kind=>[kind,new Set]));for(const obligation of obligations)runtimeValuesByKind.get(obligation.kind).add(obligation.value);const coverageByKind=PM_RECOVERY_REFERENCE_KINDS.map(kind=>({kind,source_producers:census.producer_count_by_kind[kind],runtime_values:runtimeValuesByKind.get(kind).size})),missingRuntimeKinds=coverageByKind.filter(({source_producers:sourceProducers,runtime_values:runtimeValues})=>sourceProducers>0&&runtimeValues===0).map(({kind})=>kind);return{ok:census.ok&&missingRuntimeKinds.length===0,source_producer_count:census.producer_count,runtime_value_count:coverageByKind.reduce((total,{runtime_values:runtimeValues})=>total+runtimeValues,0),coverage_by_kind:coverageByKind,missing_runtime_kinds:missingRuntimeKinds}}const verifyPmRecoveryKindRuntimeCoverage=verifyPmRecoveryProducerRuntimeCoverage;export{PM_RECOVERY_REFERENCE_FIELDS,PM_RECOVERY_REFERENCE_KINDS,censusPmRecoveryReferenceProducers,derivePmRecoveryReferenceObligations,verifyPmRecoveryKindRuntimeCoverage,verifyPmRecoveryProducerRuntimeCoverage,verifyPmRecoveryReferences,verifyPmRefusalReachability};
|
|
2
4
|
//# sourceMappingURL=refusal-reachability.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]="e23f9ca6-9fa6-566b-9bfb-7cbe6d449a59")}catch{}})();import{levenshteinDistanceWithinLimit}from"../../core/shared/levenshtein.js";import{EXIT_CODE}from"../../core/shared/constants.js";import{PmCliError}from"../../core/shared/errors.js";const UNKNOWN_SUBCOMMAND_COMPATIBILITY_CODES=[{code:"unknown_lifecycle_action"}];function nearestSubcommand(token,allowed){const normalized=token.trim().toLowerCase();if(normalized.length===0)return;const maxDistance=Math.floor(normalized.length/3);return allowed.map(candidate=>({candidate,distance:levenshteinDistanceWithinLimit(normalized,candidate.toLowerCase(),maxDistance)??Number.POSITIVE_INFINITY})).filter(({distance})=>Number.isFinite(distance)).sort((left,right)=>left.distance!==right.distance?left.distance-right.distance:left.candidate.localeCompare(right.candidate))[0]?.candidate}function renderCommand(tokens){return["pm",...tokens].map(token=>/^[A-Za-z0-9_./:@=-]+$/u.test(token)?token:JSON.stringify(token)).join(" ")}function createUnknownSubcommandError(options){const commandPath=options.command_path.trim().replaceAll(/\s+/gu," "),normalizedToken=options.token.trim(),token=normalizedToken.length===0?"<empty>":normalizedToken,allowed=[...new Set(options.allowed.map(value=>value.trim()))].filter(Boolean).sort((left,right)=>left.localeCompare(right));if(commandPath.length===0||token.length===0||allowed.length===0)throw new TypeError("Unknown-subcommand contracts require a path, token, and allowed set");const commandTokens=commandPath.split(" "),trailingArgs=options.trailing_args??[],displayName=options.display_name??`pm ${commandPath}`,tokenKind=options.token_kind??"subcommand",nearest=options.retry_command?void 0:nearestSubcommand(token,allowed),attemptedCommand=renderCommand([...commandTokens,token,...trailingArgs]),suggestedRetry=options.retry_command??(nearest?renderCommand([...commandTokens,nearest,...trailingArgs]):void 0);return new PmCliError(`Unknown ${displayName} ${tokenKind} "${token}". Allowed: ${allowed.join(", ")}${options.message_suffix??""}`,options.exit_code??EXIT_CODE.USAGE,{code:"unknown_subcommand",reason:"unknown_positional_token",value:token,examples:[...suggestedRetry?[suggestedRetry]:[],...options.examples??[],`pm ${commandPath} --help`],nextSteps:suggestedRetry?[`Retry with the suggested command: ${suggestedRetry}`]:["Choose one value from recovery.allowed_values."],recovery:{attempted_command:attemptedCommand,allowed_values:allowed,suggested_retry:suggestedRetry,fallback_candidates:options.fallback_candidates}})}const _testOnly={nearestSubcommand,renderCommand};export{UNKNOWN_SUBCOMMAND_COMPATIBILITY_CODES,_testOnly,createUnknownSubcommandError};
|
|
2
2
|
//# sourceMappingURL=subcommand-recovery.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]="f5567aa1-0268-574d-907b-38d6249538ce")}catch{}})();import{isPmSuccessfulExitCode,resolvePmCommandExitContract}from"../cli-contracts/command-exit-contracts.js";import{findBootstrapCommandTokenIndex,parseBootstrapCommandName}from"../cli-contracts/bootstrap-command-scanner.js";import{resolvePmHistoryOperation}from"../cli-contracts/command-aliases.js";import{PM_OUTPUT_ENVELOPE_KINDS,resolvePmCommandOutputEnvelope}from"../output-contracts.js";const PM_AGENT_TASK_TRANSCRIPT_VERSION=2,PM_AGENT_TASK_ACCOUNTING_MODES=["self_reported","independent_transport"];function isRecord(value){return typeof value=="object"&&value!==null&&!Array.isArray(value)}function readTranscriptString(value,field){if(typeof value!="string"||value.trim().length===0)throw new TypeError(`${field} must be a non-empty string`);return value.trim()}function readTranscriptStringArray(value,field,preserveWhitespace=!1){if(!Array.isArray(value)||value.length===0)throw new TypeError(`${field} must be a non-empty string array`);return value.map((entry,index)=>{const normalized=readTranscriptString(entry,`${field}[${String(index)}]`);return preserveWhitespace?entry:normalized})}function readOptionalTranscriptString(value,field){return value===void 0?void 0:readTranscriptString(value,field)}function readExpectedFieldValues(value,field){if(value===void 0)return;if(!isRecord(value)||Object.keys(value).length===0)throw new TypeError(`${field} must be a non-empty object`);const entries=Object.entries(value).map(([path,expectedValue])=>{if(path.length===0||path.split(".").some(segment=>segment.length===0))throw new TypeError(`${field} must use dot-separated own-property paths`);if(expectedValue!==null&&typeof expectedValue!="string"&&typeof expectedValue!="boolean"&&(typeof expectedValue!="number"||!Number.isFinite(expectedValue)))throw new TypeError(`${field} values must be JSON primitives`);return[path,expectedValue]});return Object.fromEntries(entries)}function assertTranscriptStepOutputContract(field,args,exitCode,outputKind,errorCode,refusalSurface){if(outputKind==="refusal"){if(isPmSuccessfulExitCode(exitCode)||errorCode===void 0||refusalSurface===void 0)throw new TypeError(`${field} refusal steps require a non-success exit, error code, and refusal surface`);return}if(errorCode!==void 0||refusalSurface!==void 0)throw new TypeError(`${field} only refusal steps may declare expected_error_code or expected_refusal_surface`);const commandIndex=findBootstrapCommandTokenIndex(args);if(commandIndex===void 0)throw new TypeError(`${field}.args must identify a command after global flags`);let command=args[commandIndex].trim().toLowerCase();if(command==="history"){const operation=parseBootstrapCommandName(args.slice(commandIndex+1));operation!==void 0&&(command=resolvePmHistoryOperation(`history ${operation}`))}const exitContract=resolvePmCommandExitContract(command);if(!isPmSuccessfulExitCode(exitCode)||exitCode!==0&&!exitContract?.exit_codes.some(declaredExitCode=>declaredExitCode===exitCode))throw new TypeError(`${field} successful output must use exit code 0 or a command-declared successful effect exit`);const declaredKind=resolvePmCommandOutputEnvelope(command).kind;if(outputKind!==declaredKind)throw new TypeError(`${field} expected ${outputKind}, but ${command} declares ${declaredKind}`)}function parseAgentTaskTranscriptStep(value,taskId,index){if(!isRecord(value))throw new TypeError(`tasks.${taskId}.steps[${String(index)}] must be an object`);const field=`tasks.${taskId}.steps[${String(index)}]`,id=readTranscriptString(value.id,`${field}.id`),args=readTranscriptStringArray(value.args,`${field}.args`,!0),expectedExitCode=value.expected_exit_code;if(typeof expectedExitCode!="number"||!Number.isSafeInteger(expectedExitCode))throw new TypeError(`${field}.expected_exit_code must be a safe integer`);const rawOutputKind=value.expected_output_kind;if(rawOutputKind!=="refusal"&&!PM_OUTPUT_ENVELOPE_KINDS.includes(rawOutputKind))throw new TypeError(`${field}.expected_output_kind is unsupported`);const expectedOutputKind=rawOutputKind,rawAccountingMode=value.expected_accounting_mode;if(!PM_AGENT_TASK_ACCOUNTING_MODES.includes(rawAccountingMode))throw new TypeError(`${field}.expected_accounting_mode is unsupported`);const expectedAccountingMode=rawAccountingMode;if(expectedAccountingMode==="independent_transport"&&expectedOutputKind!=="refusal")throw new TypeError(`${field} independent_transport accounting is supported only for refusal steps`);const requiredFields=readTranscriptStringArray(value.required_fields,`${field}.required_fields`);if(requiredFields.some(requiredField=>requiredField.split(".").some(segment=>segment.length===0)))throw new TypeError(`${field}.required_fields must contain dot-separated own-property paths`);const expectedFieldValues=readExpectedFieldValues(value.expected_field_values,`${field}.expected_field_values`),expectedErrorCode=readOptionalTranscriptString(value.expected_error_code,`${field}.expected_error_code`),expectedRefusalSurface=readOptionalTranscriptString(value.expected_refusal_surface,`${field}.expected_refusal_surface`),recoveryFor=readOptionalTranscriptString(value.recovery_for,`${field}.recovery_for`);return assertTranscriptStepOutputContract(field,args,expectedExitCode,expectedOutputKind,expectedErrorCode,expectedRefusalSurface),{id,args,expected_exit_code:expectedExitCode,expected_output_kind:expectedOutputKind,expected_accounting_mode:expectedAccountingMode,required_fields:requiredFields,...expectedFieldValues?{expected_field_values:expectedFieldValues}:{},...expectedErrorCode?{expected_error_code:expectedErrorCode}:{},...expectedRefusalSurface?{expected_refusal_surface:expectedRefusalSurface}:{},...recoveryFor?{recovery_for:recoveryFor}:{}}}function parseAgentTaskTranscript(value,index){if(!isRecord(value))throw new TypeError(`tasks[${String(index)}] must be an object`);const id=readTranscriptString(value.id,`tasks[${String(index)}].id`),description=readTranscriptString(value.description,`tasks.${id}.description`);if(!Array.isArray(value.steps)||value.steps.length===0)throw new TypeError(`tasks.${id}.steps must be a non-empty array`);const steps=value.steps.map((step,stepIndex)=>parseAgentTaskTranscriptStep(step,id,stepIndex)),priorSteps=new Map;for(const step of steps){if(priorSteps.has(step.id))throw new TypeError(`tasks.${id} contains duplicate step id ${step.id}`);if(step.recovery_for!==void 0&&(priorSteps.get(step.recovery_for)?.expected_output_kind!=="refusal"||step.expected_output_kind==="refusal"))throw new TypeError(`tasks.${id}.${step.id} recovery_for must reference an earlier refusal and declare successful output`);priorSteps.set(step.id,step)}if(steps.at(-1)?.expected_output_kind==="refusal")throw new TypeError(`tasks.${id} completed task must terminate with successful output`);for(const step of steps)if(step.expected_output_kind==="refusal"&&!steps.some(candidate=>candidate.recovery_for===step.id))throw new TypeError(`tasks.${id}.${step.id} refusal must have a later successful recovery_for step`);return{id,description,steps}}function parsePmAgentTaskTranscriptCorpus(value){if(!isRecord(value))throw new TypeError("agent-task transcript corpus must be an object");if(value.version!==PM_AGENT_TASK_TRANSCRIPT_VERSION)throw new TypeError(`agent-task transcript corpus version must be ${String(PM_AGENT_TASK_TRANSCRIPT_VERSION)}`);if(!Array.isArray(value.tasks)||value.tasks.length===0)throw new TypeError("agent-task transcript corpus tasks must be non-empty");const tasks=value.tasks.map((task,index)=>parseAgentTaskTranscript(task,index)),taskIds=new Set;for(const task of tasks){if(taskIds.has(task.id))throw new TypeError(`duplicate agent-task transcript id ${task.id}`);taskIds.add(task.id)}return{version:PM_AGENT_TASK_TRANSCRIPT_VERSION,tasks}}export{PM_AGENT_TASK_ACCOUNTING_MODES,PM_AGENT_TASK_TRANSCRIPT_VERSION,parsePmAgentTaskTranscriptCorpus};
|
|
2
2
|
//# sourceMappingURL=task-transcript-contracts.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]="d3795bc4-fbe5-5ca4-bc90-b72a2d469dc7")}catch{}})();const TRACKER_PREFLIGHT_RECOVERY_CONTRACTS=[{probe_id:"tracker-root-missing",failure_kind:"missing_root",expected_error_code:"tracker_root_missing",expected_exit_code:3,recovery_kind:"initialize"},{probe_id:"tracker-root-settings-missing",failure_kind:"settings_missing",expected_error_code:"tracker_not_initialized",expected_exit_code:3,recovery_kind:"initialize"},{probe_id:"tracker-root-not-directory",failure_kind:"not_directory",expected_error_code:"tracker_root_not_directory",expected_exit_code:2,recovery_kind:"select_directory"},{probe_id:"tracker-root-unreadable",failure_kind:"unreadable_root",expected_error_code:"tracker_root_unreadable",expected_exit_code:1,recovery_kind:"repair_permissions"}];function listTrackerPreflightRecoveryContracts(){return TRACKER_PREFLIGHT_RECOVERY_CONTRACTS.map(contract=>({...contract}))}function findTrackerPreflightObservationFindings(contract,observation){const findings=[];observation.error_code!==contract.expected_error_code&&findings.push({code:"error_code_mismatch",probe_id:contract.probe_id,detail:`Expected ${contract.expected_error_code}, received ${observation.error_code}.`}),observation.exit_code!==contract.expected_exit_code&&findings.push({code:"exit_code_mismatch",probe_id:contract.probe_id,detail:`Expected exit ${contract.expected_exit_code}, received ${observation.exit_code}.`}),observation.recovery_kind!==contract.recovery_kind&&findings.push({code:"recovery_kind_mismatch",probe_id:contract.probe_id,detail:`Expected ${contract.recovery_kind}, received ${observation.recovery_kind}.`});const initIndex=observation.suggested_retry_args.indexOf("init"),validInitCommand=initIndex===0||initIndex===2&&observation.suggested_retry_args[0]==="--pm-path"&&observation.suggested_retry_args[1]?.length>0;return contract.recovery_kind==="initialize"&&!validInitCommand&&findings.push({code:"missing_init_recovery",probe_id:contract.probe_id,detail:"Missing and uninitialized roots must emit a tokenized init retry."}),(observation.unsafe_init_recommended||contract.recovery_kind!=="initialize"&&observation.suggested_retry_args.includes("init"))&&findings.push({code:"unsafe_init_recovery",probe_id:contract.probe_id,detail:"A tracker root that cannot be initialized safely must not recommend initialization."}),observation.retry_succeeded||findings.push({code:"retry_failed",probe_id:contract.probe_id,detail:"The emitted retry or safe alternate-root recovery did not execute successfully."}),findings}function scoreTrackerPreflightRecoveryClosure(observations){const observationsByProbe=new Map(observations.map(observation=>[observation.probe_id,observation])),findings=[];let closedProbeCount=0;for(const contract of TRACKER_PREFLIGHT_RECOVERY_CONTRACTS){const observation=observationsByProbe.get(contract.probe_id);if(observation===void 0){findings.push({code:"missing_probe",probe_id:contract.probe_id,detail:"No runtime observation was supplied for this contract."});continue}const observationFindings=findTrackerPreflightObservationFindings(contract,observation);findings.push(...observationFindings),observationFindings.length===0&&(closedProbeCount+=1)}return findings.sort((left,right)=>left.probe_id.localeCompare(right.probe_id)||left.code.localeCompare(right.code)),{ok:findings.length===0,probe_count:TRACKER_PREFLIGHT_RECOVERY_CONTRACTS.length,closed_probe_count:closedProbeCount,findings}}export{listTrackerPreflightRecoveryContracts,scoreTrackerPreflightRecoveryClosure};
|
|
2
2
|
//# sourceMappingURL=tracker-preflight-contracts.js.map
|
|
@@ -1,2 +1,4 @@
|
|
|
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]="e8c34bbe-eab3-5dcf-9436-410c9c69feee")}catch(e2){}})();import{PM_CORE_COMMAND_NAMES}from"./cli-contracts/enum-contracts.js";import{PM_COMMAND_ALIAS_CONTRACTS,PM_NAMESPACED_COMMAND_ALIASES,resolvePmCommandOperation}from"./cli-contracts/command-aliases.js";const CORE_COMMANDS=new Set(["claim","close","context","create","get","help","init","list","next","plan","release","search","update","validate","workspace"]);const STANDARD_COMMANDS=new Set(["append","comments","config","contracts","deps","docs","events","files","focus","graph","health","history","learnings","list-all","list-blocked","list-closed","list-in-progress","list-open","notes","profile","schema","test"]);const COMMANDS_BY_FAMILY=Object.freeze({workspace:new Set(["config","gc","health","init","merge","profile","schema","telemetry","workspace"]),intake:new Set(["copy","create","focus","item","restore"]),context:new Set(["activity","aggregate","context","ctx","duplicates","eval","get","help","list","list-all","list-blocked","list-canceled","list-closed","list-draft","list-in-progress","list-open","next","search","stats"]),lifecycle:new Set(["claim","close","close-many","close-task","delete","pause-task","item-reopen","release","start-task","update","update-many"]),evidence:new Set(["append","comments","docs","events","files","history","history-attest","history-author-acknowledge","history-compact","history-redact","history-repair","learnings","notes"]),graph:new Set(["deps","graph","plan"]),quality:new Set(["assurance","contracts","test","test-all","validate"]),automation:new Set(["event","meet","remind"])});const EXTENSION_COMMANDS=new Set(["extension","install","package","packages","upgrade"]);function resolvePmCommandCapabilityFamily(command){const normalized=resolvePmCommandOperation(command.trim().toLowerCase());if(normalized==="ops")return"quality";for(const[family,commands]of Object.entries(COMMANDS_BY_FAMILY)){if(commands.has(normalized))return family}return EXTENSION_COMMANDS.has(normalized)?"extensions":"internal"}const PM_COMMAND_CAPABILITY_CONTRACTS=Object.freeze([...PM_CORE_COMMAND_NAMES.flatMap(command=>command==="item"?["item","item-reopen"]:[command,...PM_NAMESPACED_COMMAND_ALIASES.filter(alias=>alias.alias===command).map(alias=>alias.canonical)]).map(command=>({command,tier:CORE_COMMANDS.has(resolvePmCommandOperation(command))?"core":STANDARD_COMMANDS.has(resolvePmCommandOperation(command))?"standard":"full",family:resolvePmCommandCapabilityFamily(command)})),{command:"ops",tier:"core",family:"quality"},{command:"completion-statuses",tier:"internal",family:"internal"},{command:"completion-tags",tier:"internal",family:"internal"},{command:"completion-types",tier:"internal",family:"internal"},{command:"test-runs-worker",tier:"internal",family:"internal"},{command:"item test worker",tier:"internal",family:"internal"}]);const PM_COMMAND_VISIBILITY_CONTRACTS=PM_COMMAND_CAPABILITY_CONTRACTS;const PM_CORE_HELP_BUDGET=Object.freeze({max_lines:50,max_utf8_bytes:6e3});const PM_CORE_HELP_OPTION_FLAGS=Object.freeze(["-V, --version","--all","--json","--output-include <fields>","--output-limit <count>","--output-budget <tokens|unbounded>","--output-cursor <cursor>","--pm-path <dir>","--no-extensions","--no-pager","--explain","-h, --help"]);function measurePmCoreHelp(text){const lines=text===""?0:text.split(/\r?\n/).length;const utf8Bytes=Buffer.byteLength(text,"utf8");return{lines,utf8_bytes:utf8Bytes,within_budget:lines<=PM_CORE_HELP_BUDGET.max_lines&&utf8Bytes<=PM_CORE_HELP_BUDGET.max_utf8_bytes}}const TIER_ORDER={core:0,standard:1,full:2,internal:3};const COMMAND_TIER_BY_NAME=new Map(PM_COMMAND_VISIBILITY_CONTRACTS.map(({command,tier})=>[command,tier]));function resolvePmCommandVisibilityTier(command,extensionTier="standard"){return COMMAND_TIER_BY_NAME.get(command.trim().toLowerCase())??COMMAND_TIER_BY_NAME.get(resolvePmCommandOperation(command.trim().toLowerCase()))??extensionTier}function listPmCommandsForTier(tier){return listPmCommandsForTierFromContracts(tier,PM_COMMAND_CAPABILITY_CONTRACTS)}function listPmCommandsForTierFromContracts(tier,contracts){const maximum=TIER_ORDER[tier];return contracts.filter(entry=>entry.tier!=="internal"&&TIER_ORDER[entry.tier]<=maximum).map(entry=>entry.command)}function listPmCommandsForFamily(family){return listPmCommandsForFamilyFromContracts(family,PM_COMMAND_CAPABILITY_CONTRACTS)}function listPmCommandsForFamilyFromContracts(family,contracts){return contracts.filter(entry=>entry.family===family).map(entry=>entry.command)}const CAPABILITY_FAMILY_ORDER=["workspace","intake","context","lifecycle","evidence","graph","quality","automation","extensions","internal"];const CAPABILITY_ROUTING_EXCLUDED_ALIASES=new Set([...PM_COMMAND_ALIAS_CONTRACTS.filter(alias=>alias.hidden).map(alias=>alias.alias),"ctx","extension","install","item-reopen","list-all","list-blocked","list-canceled","list-closed","list-draft","list-in-progress","list-open","packages","upgrade"]);function listPmCommandCapabilityGroups(contracts=PM_COMMAND_CAPABILITY_CONTRACTS){return CAPABILITY_FAMILY_ORDER.map(family=>({family,commands:listPmCommandsForFamilyFromContracts(family,contracts).filter(command=>contracts.find(entry=>entry.command===command)?.tier!=="internal"&&!CAPABILITY_ROUTING_EXCLUDED_ALIASES.has(command))})).filter(({commands})=>commands.length>0)}const PM_MCP_TOOL_COMMAND_CONTRACTS=Object.freeze({pm_append:"append",pm_claim:"claim",pm_close:"close",pm_comments:"comments",pm_config:"config",pm_context:"context",pm_contracts:"contracts",pm_copy:"copy",pm_create:"create",pm_deps:"deps",pm_discover:"help",pm_docs:"docs",pm_events:"history",pm_files:"files",pm_focus:"focus",pm_get:"get",pm_graph:"graph",pm_health:"health",pm_learnings:"learnings",pm_list:"list",pm_mutate:"update",pm_next:"next",pm_notes:"notes",pm_plan:"plan",pm_profile:"profile",pm_release:"release",pm_run:"package",pm_schema:"schema",pm_search:"search",pm_test:"test",pm_update:"update",pm_validate:"validate"});function listPmMcpToolsForProfile(availableTools,profile){return listPmMcpToolsForProfileFromContracts(availableTools,profile,PM_COMMAND_CAPABILITY_CONTRACTS)}function listPmMcpToolsForProfileFromContracts(availableTools,profile,contracts){if(profile==="full")return[...availableTools];const visibleCommands=new Set(listPmCommandsForTierFromContracts(profile,contracts));return availableTools.filter(tool=>{const command=PM_MCP_TOOL_COMMAND_CONTRACTS[tool];return command!==void 0&&visibleCommands.has(command)})}const PM_MCP_RESOURCE_CONTRACTS=Object.freeze([{uri:"pm://workspace/context",name:"Workspace context",description:"Bounded project context for orientation, including active hierarchy and progress.",mimeType:"application/json"},{uri:"pm://workspace/focus",name:"Active focus",description:"The session focus that supplies the default create parent.",mimeType:"application/json"},{uri:"pm://workspace/claims",name:"Active claims",description:"Bounded in-progress work and active ownership context.",mimeType:"application/json"},{uri:"pm://workspace/agent-guide",name:"Agent guidance",description:"Repository-local AGENTS.md instructions, bounded for safe host attachment.",mimeType:"text/markdown"}]);const PM_MCP_PROMPT_CONTRACTS=Object.freeze([{name:"orient",description:"Build bounded live context, search all statuses, and select canonical work without creating duplicates.",arguments:[{name:"request",description:"The user's requested outcome or topic.",required:true},{name:"scope",description:"Optional bounded workspace or subsystem scope.",required:false}],template:"Orient to the live pm workspace for: {{request}}. Scope hint: {{scope}}. Read context, search all statuses, inspect full metadata for relevant items, and select canonical lineage before any mutation."},{name:"claim-and-start",description:"Claim one canonical item and begin implementation with linked context.",arguments:[{name:"id",description:"Canonical pm item id.",required:true}],template:"Read {{id}} in full, claim it, set it in_progress, then implement only its acceptance scope while linking files, docs, tests, and evidence."},{name:"record-evidence-and-close",description:"Record exact verification evidence, close the item, and release ownership.",arguments:[{name:"id",description:"Canonical pm item id.",required:true},{name:"evidence",description:"Exact verification and outcome evidence.",required:true}],template:"For {{id}}, record this evidence: {{evidence}}. Verify linked tests, close only if acceptance is met, then release the claim."}]);function renderPmCommandVisibilityMarkdown(){return renderPmCommandVisibilityMarkdownFromContracts(PM_COMMAND_CAPABILITY_CONTRACTS)}function renderPmCommandVisibilityMarkdownFromContracts(contracts){const rows=contracts.map(({command,tier,family})=>`| \`${command}\` | ${tier} | ${family} |`);return["# Generated agent command surface","","This file is generated from `PM_COMMAND_CAPABILITY_CONTRACTS`. Do not edit it manually.","","| Command | Minimum visibility tier | Capability family |","| --- | --- | --- |",...rows,""].join("\n")}function renderPmCapabilityRoutingMarkdown(contracts=PM_COMMAND_CAPABILITY_CONTRACTS){const rows=listPmCommandCapabilityGroups(contracts).map(({family,commands})=>`| ${family} | ${commands.map(command=>`\`${command}\``).join(", ")} |`);return["# Generated agent capability routing","","Tracker: `pm-kxci8x`.","","This file is generated from `PM_COMMAND_CAPABILITY_CONTRACTS`. Do not edit it manually.","","| Capability family | Commands |","| --- | --- |",...rows,""].join("\n")}export{PM_COMMAND_CAPABILITY_CONTRACTS,PM_COMMAND_VISIBILITY_CONTRACTS,PM_CORE_HELP_BUDGET,PM_CORE_HELP_OPTION_FLAGS,PM_MCP_PROMPT_CONTRACTS,PM_MCP_RESOURCE_CONTRACTS,PM_MCP_TOOL_COMMAND_CONTRACTS,listPmCommandCapabilityGroups,listPmCommandsForFamily,listPmCommandsForFamilyFromContracts,listPmCommandsForTier,listPmCommandsForTierFromContracts,listPmMcpToolsForProfile,listPmMcpToolsForProfileFromContracts,measurePmCoreHelp,renderPmCapabilityRoutingMarkdown,renderPmCommandVisibilityMarkdown,renderPmCommandVisibilityMarkdownFromContracts,resolvePmCommandCapabilityFamily,resolvePmCommandVisibilityTier};
|
|
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]="0c0bb7ab-6157-5861-ad7e-a63ae62220f4")}catch{}})();import{PM_CORE_COMMAND_NAMES}from"./cli-contracts/enum-contracts.js";import{PM_COMMAND_ALIAS_CONTRACTS,PM_NAMESPACED_COMMAND_ALIASES,resolvePmCommandOperation}from"./cli-contracts/command-aliases.js";const CORE_COMMANDS=new Set(["claim","close","context","create","get","help","init","list","next","plan","release","search","update","validate","workspace"]),STANDARD_COMMANDS=new Set(["append","comments","config","contracts","deps","docs","events","files","focus","graph","health","history","learnings","list-all","list-blocked","list-closed","list-in-progress","list-open","notes","profile","schema","test"]),COMMANDS_BY_FAMILY=Object.freeze({workspace:new Set(["config","gc","health","init","merge","profile","schema","telemetry","workspace"]),intake:new Set(["copy","create","focus","item","restore"]),context:new Set(["activity","aggregate","context","ctx","duplicates","eval","get","help","list","list-all","list-blocked","list-canceled","list-closed","list-draft","list-in-progress","list-open","next","search","stats"]),lifecycle:new Set(["claim","close","close-many","close-task","delete","pause-task","item-reopen","release","start-task","update","update-many"]),evidence:new Set(["append","comments","docs","events","files","history","history-attest","history-author-acknowledge","history-compact","history-redact","history-repair","learnings","notes"]),graph:new Set(["deps","graph","plan"]),quality:new Set(["assurance","contracts","test","test-all","validate"]),automation:new Set(["event","meet","remind"])}),EXTENSION_COMMANDS=new Set(["extension","install","package","packages","upgrade"]);function resolvePmCommandCapabilityFamily(command){const normalized=resolvePmCommandOperation(command.trim().toLowerCase());if(normalized==="ops")return"quality";for(const[family,commands]of Object.entries(COMMANDS_BY_FAMILY))if(commands.has(normalized))return family;return EXTENSION_COMMANDS.has(normalized)?"extensions":"internal"}const PM_COMMAND_CAPABILITY_CONTRACTS=Object.freeze([...PM_CORE_COMMAND_NAMES.flatMap(command=>command==="item"?["item","item-reopen"]:[command,...PM_NAMESPACED_COMMAND_ALIASES.filter(alias=>alias.alias===command).map(alias=>alias.canonical)]).map(command=>({command,tier:CORE_COMMANDS.has(resolvePmCommandOperation(command))?"core":STANDARD_COMMANDS.has(resolvePmCommandOperation(command))?"standard":"full",family:resolvePmCommandCapabilityFamily(command)})),{command:"ops",tier:"core",family:"quality"},{command:"completion-statuses",tier:"internal",family:"internal"},{command:"completion-tags",tier:"internal",family:"internal"},{command:"completion-types",tier:"internal",family:"internal"},{command:"test-runs-worker",tier:"internal",family:"internal"},{command:"item test worker",tier:"internal",family:"internal"}]),PM_COMMAND_VISIBILITY_CONTRACTS=PM_COMMAND_CAPABILITY_CONTRACTS,PM_CORE_HELP_BUDGET=Object.freeze({max_lines:50,max_utf8_bytes:6e3}),PM_CORE_HELP_OPTION_FLAGS=Object.freeze(["-V, --version","--all","--json","--output-include <fields>","--output-limit <count>","--output-budget <tokens|unbounded>","--output-cursor <cursor>","--pm-path <dir>","--no-extensions","--no-pager","--explain","-h, --help"]);function measurePmCoreHelp(text){const lines=text===""?0:text.split(/\r?\n/).length,utf8Bytes=Buffer.byteLength(text,"utf8");return{lines,utf8_bytes:utf8Bytes,within_budget:lines<=PM_CORE_HELP_BUDGET.max_lines&&utf8Bytes<=PM_CORE_HELP_BUDGET.max_utf8_bytes}}const TIER_ORDER={core:0,standard:1,full:2,internal:3},COMMAND_TIER_BY_NAME=new Map(PM_COMMAND_VISIBILITY_CONTRACTS.map(({command,tier})=>[command,tier]));function resolvePmCommandVisibilityTier(command,extensionTier="standard"){return COMMAND_TIER_BY_NAME.get(command.trim().toLowerCase())??COMMAND_TIER_BY_NAME.get(resolvePmCommandOperation(command.trim().toLowerCase()))??extensionTier}function listPmCommandsForTier(tier){return listPmCommandsForTierFromContracts(tier,PM_COMMAND_CAPABILITY_CONTRACTS)}function listPmCommandsForTierFromContracts(tier,contracts){const maximum=TIER_ORDER[tier];return contracts.filter(entry=>entry.tier!=="internal"&&TIER_ORDER[entry.tier]<=maximum).map(entry=>entry.command)}function listPmCommandsForFamily(family){return listPmCommandsForFamilyFromContracts(family,PM_COMMAND_CAPABILITY_CONTRACTS)}function listPmCommandsForFamilyFromContracts(family,contracts){return contracts.filter(entry=>entry.family===family).map(entry=>entry.command)}const CAPABILITY_FAMILY_ORDER=["workspace","intake","context","lifecycle","evidence","graph","quality","automation","extensions","internal"],CAPABILITY_ROUTING_EXCLUDED_ALIASES=new Set([...PM_COMMAND_ALIAS_CONTRACTS.filter(alias=>alias.hidden).map(alias=>alias.alias),"ctx","extension","install","item-reopen","list-all","list-blocked","list-canceled","list-closed","list-draft","list-in-progress","list-open","packages","upgrade"]);function listPmCommandCapabilityGroups(contracts=PM_COMMAND_CAPABILITY_CONTRACTS){return CAPABILITY_FAMILY_ORDER.map(family=>({family,commands:listPmCommandsForFamilyFromContracts(family,contracts).filter(command=>contracts.find(entry=>entry.command===command)?.tier!=="internal"&&!CAPABILITY_ROUTING_EXCLUDED_ALIASES.has(command))})).filter(({commands})=>commands.length>0)}const PM_MCP_TOOL_COMMAND_CONTRACTS=Object.freeze({pm_append:"append",pm_claim:"claim",pm_close:"close",pm_comments:"comments",pm_config:"config",pm_context:"context",pm_contracts:"contracts",pm_copy:"copy",pm_create:"create",pm_deps:"deps",pm_discover:"help",pm_docs:"docs",pm_events:"history",pm_files:"files",pm_focus:"focus",pm_get:"get",pm_graph:"graph",pm_health:"health",pm_learnings:"learnings",pm_list:"list",pm_mutate:"update",pm_next:"next",pm_notes:"notes",pm_plan:"plan",pm_profile:"profile",pm_release:"release",pm_run:"package",pm_schema:"schema",pm_search:"search",pm_test:"test",pm_update:"update",pm_validate:"validate"});function listPmMcpToolsForProfile(availableTools,profile){return listPmMcpToolsForProfileFromContracts(availableTools,profile,PM_COMMAND_CAPABILITY_CONTRACTS)}function listPmMcpToolsForProfileFromContracts(availableTools,profile,contracts){if(profile==="full")return[...availableTools];const visibleCommands=new Set(listPmCommandsForTierFromContracts(profile,contracts));return availableTools.filter(tool=>{const command=PM_MCP_TOOL_COMMAND_CONTRACTS[tool];return command!==void 0&&visibleCommands.has(command)})}const PM_MCP_RESOURCE_CONTRACTS=Object.freeze([{uri:"pm://workspace/context",name:"Workspace context",description:"Bounded project context for orientation, including active hierarchy and progress.",mimeType:"application/json"},{uri:"pm://workspace/focus",name:"Active focus",description:"The session focus that supplies the default create parent.",mimeType:"application/json"},{uri:"pm://workspace/claims",name:"Active claims",description:"Bounded in-progress work and active ownership context.",mimeType:"application/json"},{uri:"pm://workspace/agent-guide",name:"Agent guidance",description:"Repository-local AGENTS.md instructions, bounded for safe host attachment.",mimeType:"text/markdown"}]),PM_MCP_PROMPT_CONTRACTS=Object.freeze([{name:"orient",description:"Build bounded live context, search all statuses, and select canonical work without creating duplicates.",arguments:[{name:"request",description:"The user's requested outcome or topic.",required:!0},{name:"scope",description:"Optional bounded workspace or subsystem scope.",required:!1}],template:"Orient to the live pm workspace for: {{request}}. Scope hint: {{scope}}. Read context, search all statuses, inspect full metadata for relevant items, and select canonical lineage before any mutation."},{name:"claim-and-start",description:"Claim one canonical item and begin implementation with linked context.",arguments:[{name:"id",description:"Canonical pm item id.",required:!0}],template:"Read {{id}} in full, claim it, set it in_progress, then implement only its acceptance scope while linking files, docs, tests, and evidence."},{name:"record-evidence-and-close",description:"Record exact verification evidence, close the item, and release ownership.",arguments:[{name:"id",description:"Canonical pm item id.",required:!0},{name:"evidence",description:"Exact verification and outcome evidence.",required:!0}],template:"For {{id}}, record this evidence: {{evidence}}. Verify linked tests, close only if acceptance is met, then release the claim."}]);function renderPmCommandVisibilityMarkdown(){return renderPmCommandVisibilityMarkdownFromContracts(PM_COMMAND_CAPABILITY_CONTRACTS)}function renderPmCommandVisibilityMarkdownFromContracts(contracts){return["# Generated agent command surface","","This file is generated from `PM_COMMAND_CAPABILITY_CONTRACTS`. Do not edit it manually.","","| Command | Minimum visibility tier | Capability family |","| --- | --- | --- |",...contracts.map(({command,tier,family})=>`| \`${command}\` | ${tier} | ${family} |`),""].join(`
|
|
2
|
+
`)}function renderPmCapabilityRoutingMarkdown(contracts=PM_COMMAND_CAPABILITY_CONTRACTS){return["# Generated agent capability routing","","Tracker: `pm-kxci8x`.","","This file is generated from `PM_COMMAND_CAPABILITY_CONTRACTS`. Do not edit it manually.","","| Capability family | Commands |","| --- | --- |",...listPmCommandCapabilityGroups(contracts).map(({family,commands})=>`| ${family} | ${commands.map(command=>`\`${command}\``).join(", ")} |`),""].join(`
|
|
3
|
+
`)}export{PM_COMMAND_CAPABILITY_CONTRACTS,PM_COMMAND_VISIBILITY_CONTRACTS,PM_CORE_HELP_BUDGET,PM_CORE_HELP_OPTION_FLAGS,PM_MCP_PROMPT_CONTRACTS,PM_MCP_RESOURCE_CONTRACTS,PM_MCP_TOOL_COMMAND_CONTRACTS,listPmCommandCapabilityGroups,listPmCommandsForFamily,listPmCommandsForFamilyFromContracts,listPmCommandsForTier,listPmCommandsForTierFromContracts,listPmMcpToolsForProfile,listPmMcpToolsForProfileFromContracts,measurePmCoreHelp,renderPmCapabilityRoutingMarkdown,renderPmCommandVisibilityMarkdown,renderPmCommandVisibilityMarkdownFromContracts,resolvePmCommandCapabilityFamily,resolvePmCommandVisibilityTier};
|
|
2
4
|
//# sourceMappingURL=agent-capability-contracts.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]="38023567-8a5b-5e25-8d71-5112f74d1894")}catch{}})();import{agentSessionEnvironment,boundAgentEpisodeIdentity,runWithAgentSessionContext,resolveAgentSessionContextFromSignals}from"../core/shared/agent-session-context.js";export{agentSessionEnvironment,boundAgentEpisodeIdentity,resolveAgentSessionContextFromSignals,runWithAgentSessionContext};
|
|
2
2
|
//# sourceMappingURL=agent-session-context.js.map
|
package/dist/sdk/annotations.js
CHANGED
|
@@ -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]="0a5fc27e-3f5a-59e0-998e-be5da72913dd")}catch(e2){}})();import{assertInitializedTracker}from"./environment/tracker-preflight.js";import{readFile}from"node:fs/promises";import{isFileAbsentError}from"../core/fs/fs-utils.js";import{getActiveExtensionRegistrations}from"../core/extensions/index.js";import{resolveItemTypeRegistry}from"../core/item/type-registry.js";import{createStdinTokenResolver,parseCsvKv,shouldResolveMutationStdinTokens,transferMutationStdinTokenPolicy}from"../core/item/parse.js";import{EXIT_CODE}from"../core/shared/constants.js";import{PmCliError}from"../core/shared/errors.js";import{parseLimit}from"../core/shared/numeric-parsers.js";import{nowIso}from"../core/shared/time.js";import{resolveAuthor}from"../core/shared/author.js";import{locateItem,mutateItem,readLocatedItem}from"../core/store/item-store.js";import{resolvePmRoot}from"../core/store/paths.js";import{readSettings}from"../core/store/settings.js";function normalizeAnnotationTransportOptions(options){const normalized={...options,...options.full===true?{fullHistory:true}:{}};delete normalized.full;return transferMutationStdinTokenPolicy(options,normalized)}function assertAnnotationEntryMutable(entry,operation){if(typeof entry==="object"&&entry!==null&&"format"in entry&&entry.format==="json"){throw new PmCliError(`Structured context events are append-only and cannot be ${operation}.`,EXIT_CODE.USAGE,{code:"structured_event_immutable"})}}function limitAnnotationEntries(values,limit){if(limit===void 0)return values;if(limit===0)return[];return values.slice(Math.max(0,values.length-limit))}function readAnnotationEntries(source,collectionKey){const value=source[collectionKey];return Array.isArray(value)?value:[]}function parseAnnotationTextInput(raw,options={}){const trimmed=raw.trim();if(!trimmed){return""}const textPrefixMatch=/^(?:[-*+]\s*)?text\s*[:=]/i.exec(trimmed);if(options.stripPlainTextPrefix===true&&textPrefixMatch&&!trimmed.startsWith("```")){const text=trimmed.slice(textPrefixMatch[0].length).trim();return text||trimmed}const looksStructured=/^(?:[-*+]\s*)?text\s*[:=]/im.test(trimmed)||trimmed.startsWith("```");if(!looksStructured){return trimmed}try{const kv=parseCsvKv(trimmed,"--add");const keys=Object.keys(kv).map(key=>key.trim().toLowerCase());if(keys.some(key=>key!=="text")){return trimmed}const text=kv.text?.trim();return text||trimmed}catch{return trimmed}}function isErrnoError(error){return typeof error==="object"&&error!==null&&"code"in error}function assertAnnotationStdinTransportAvailable(options,optionName){if(shouldResolveMutationStdinTokens(options))return;throw new PmCliError(`${optionName} cannot read process stdin through the MCP JSON-RPC transport. Pass annotation text in options.add instead.`,EXIT_CODE.USAGE,{code:"mcp_stdin_unavailable",required:"Pass annotation text as JSON data; the MCP protocol already owns process stdin."})}async function resolveAnnotationTextSource(options,noun){const sourceCount=Number(options.add!==void 0)+Number(options.stdin===true)+Number(typeof options.file==="string");if(sourceCount>1){throw new PmCliError(`Specify ${noun} text using only one input source: --add, --stdin, or --file`,EXIT_CODE.USAGE)}const stdinResolver=createStdinTokenResolver();const resolveStdinTokens=shouldResolveMutationStdinTokens(options);if(options.add!==void 0){return{value:await stdinResolver.resolveValue(options.add,"--add",resolveStdinTokens)??"",rawValue:options.add,emptyFlag:"--add"}}if(options.stdin===true){assertAnnotationStdinTransportAvailable(options,"--stdin");return{value:await stdinResolver.resolveValue("-","--stdin")??"",emptyFlag:"--stdin"}}if(typeof options.file!=="string")return void 0;const filePath=options.file.trim();if(!filePath){throw new PmCliError("--file path cannot be empty",EXIT_CODE.USAGE)}if(filePath==="-"){assertAnnotationStdinTransportAvailable(options,"--file -");return{value:await stdinResolver.resolveValue("-","--file")??"",emptyFlag:"--file"}}try{return{value:await readFile(filePath,"utf8"),emptyFlag:"--file"}}catch(error){if(isErrnoError(error)&&isFileAbsentError(error)){throw new PmCliError(`--file path not found: ${filePath}. Use --file - to read stdin.`,EXIT_CODE.USAGE)}const detail=error instanceof Error?error.message:String(error);throw new PmCliError(`Failed to read --file path "${filePath}": ${detail}. Use --file - to read stdin.`,EXIT_CODE.USAGE)}}async function resolveAnnotationInput(options,noun){if(options.edit!==void 0&&options.delete!==void 0){throw new PmCliError("Specify only one of --edit or --delete",EXIT_CODE.USAGE)}if(options.delete!==void 0){if(options.add!==void 0||options.stdin===true||typeof options.file==="string"){throw new PmCliError("--delete cannot be combined with replacement text",EXIT_CODE.USAGE)}if(!Number.isInteger(options.delete)||options.delete<1){throw new PmCliError("--delete must be a positive integer",EXIT_CODE.USAGE)}return{mode:"delete",index:options.delete}}if(options.edit!==void 0&&(!Number.isInteger(options.edit)||options.edit<1)){throw new PmCliError("--edit must be a positive integer",EXIT_CODE.USAGE)}const resolved=await resolveAnnotationTextSource(options,noun);if(options.edit!==void 0){if(!resolved){throw new PmCliError("--edit requires replacement text from --add, --stdin, or --file",EXIT_CODE.USAGE)}return{mode:"edit",index:options.edit,...resolved}}return resolved?{mode:"add",...resolved}:{mode:"list"}}function wrapOwnershipConflict(error,guidance){if(error instanceof PmCliError&&error.exitCode===EXIT_CODE.CONFLICT&&error.message.includes("is assigned to")&&error.message.includes("Use --force to override")){throw new PmCliError(error.message,error.exitCode,{code:"ownership_conflict",required:guidance.required,examples:guidance.examples,nextSteps:guidance.nextSteps})}throw error}function annotationStdinHint(collectionKey){return collectionKey==="comments"?"--stdin":"--add -"}function assertAnnotationAddValueIsNotFlagLike(raw,config){const emptyFlag=config.input.emptyFlag??"--add";if(emptyFlag!=="--add"){return}const trimmed=raw.trim();if(!/^-{1,2}[A-Za-z][\w-]*(?:=.*)?$/.test(trimmed)){return}const stdinHint=annotationStdinHint(config.collectionKey);const commandPrefix=config.input.mode==="edit"?`pm ${config.collectionKey} <id> --edit <index>`:`pm ${config.collectionKey} <id>`;throw new PmCliError(`--add value "${trimmed}" looks like an option, not annotation text. Use ${stdinHint} to read stdin, or use text=${trimmed} for literal dash-leading text.`,EXIT_CODE.USAGE,{code:"annotation_flag_like_value",required:`Use ${stdinHint} for stdin input, pass plain text, or use text=${trimmed} when the text really starts with "-".`,examples:[`${commandPrefix} ${stdinHint}`,`${commandPrefix} --add text=${trimmed}`]})}function assertAnnotationMessageHasTextSource(config,options){if(options.ifAbsent===true&&!["add","stdin","file"].includes(config.input.mode)){throw new PmCliError(`--if-absent requires a ${config.collectionKey.replace(/s$/,"")} append`,EXIT_CODE.USAGE,{code:"annotation_if_absent_without_append",required:"Combine --if-absent with one append text source; omit it for list, edit, and delete operations."})}if(config.input.mode!=="list"||options.message===void 0){return}const noun=config.collectionKey.replace(/s$/,"");throw new PmCliError(`--message labels a ${noun} mutation but does not provide ${noun} text. Pass text positionally or with --add, --stdin, or --file.`,EXIT_CODE.USAGE,{code:"annotation_message_without_text",required:`Provide ${noun} text through a content source; --message only annotates the history entry of a mutation.`,examples:[`pm ${config.collectionKey} <id> --add "text" --message "why"`,`pm ${config.collectionKey} <id> ${annotationStdinHint(config.collectionKey)}`]})}function appendAnnotationEntry(document,collectionKey,author,text,ifAbsent,createEntry){const entries=readAnnotationEntries(document.metadata,collectionKey);const existingIndex=ifAbsent?entries.findIndex(entry=>entry.author===author&&entry.text===text):-1;if(existingIndex>=0){return{changedFields:[],entryIndex:existingIndex+1}}entries.push(createEntry({created_at:nowIso(),author,text}));document.metadata[collectionKey]=entries;return{changedFields:[collectionKey],entryIndex:entries.length}}async function runAnnotationCommand(id,options,global2,config){assertAnnotationMessageHasTextSource(config,options);const pmRoot=resolvePmRoot(process.cwd(),global2.path);await assertInitializedTracker(pmRoot);const settings=await readSettings(pmRoot);const typeRegistry=resolveItemTypeRegistry(settings,getActiveExtensionRegistrations());const limit=parseLimit(options.limit);if(config.input.mode==="list"){const located=await locateItem(pmRoot,id,settings.id_prefix,settings.item_format,typeRegistry.type_to_folder);if(!located){throw new PmCliError(`Item ${id} not found`,EXIT_CODE.NOT_FOUND)}const loaded=await readLocatedItem(located,{schema:settings.schema});const allEntries2=readAnnotationEntries(loaded.document.metadata,config.collectionKey);return renderAnnotationResult(located.id,config.collectionKey,allEntries2,limit,options.includeMeta===true)}const author=resolveAuthor(options.author,settings.author_default);if(config.input.mode==="delete"){const op=config.deleteOp??config.op;let result2;try{result2=await mutateItem({pmRoot,settings,id,op,author,message:options.message,force:options.force,bypassAssigneeConflict:config.bypassOwnershipConflict,mutate(document){const entries=readAnnotationEntries(document.metadata,config.collectionKey);const arrayIndex=resolveAnnotationIndex(config.input.index,entries.length,config.collectionKey);assertAnnotationEntryMutable(entries[arrayIndex],"deleted");entries.splice(arrayIndex,1);document.metadata[config.collectionKey]=entries;return{changedFields:[config.collectionKey]}}})}catch(error){wrapOwnershipConflict(error,config.conflictGuidance)}const allEntries2=readAnnotationEntries(result2.item,config.collectionKey);return renderAnnotationResult(result2.item.id,config.collectionKey,allEntries2,limit,options.includeMeta===true,{action:"delete",entryIndex:config.input.index},options.fullHistory===true)}const rawText=config.input.rawValue??config.input.value??"";assertAnnotationAddValueIsNotFlagLike(rawText,config);const text=config.parseText(config.input.value??"");if(!text.trim()){throw new PmCliError(`${config.input.emptyFlag??"--add"} text cannot be empty`,EXIT_CODE.USAGE)}if(config.input.mode==="edit"){const op=config.editOp??config.op;let result2;try{result2=await mutateItem({pmRoot,settings,id,op,author,message:options.message,force:options.force,bypassAssigneeConflict:config.bypassOwnershipConflict,mutate(document){const entries=readAnnotationEntries(document.metadata,config.collectionKey);const arrayIndex=resolveAnnotationIndex(config.input.index,entries.length,config.collectionKey);const existing=entries[arrayIndex];assertAnnotationEntryMutable(existing,"edited");entries[arrayIndex]={...existing,text,edited_at:nowIso()};document.metadata[config.collectionKey]=entries;return{changedFields:[config.collectionKey]}}})}catch(error){wrapOwnershipConflict(error,config.conflictGuidance)}const allEntries2=readAnnotationEntries(result2.item,config.collectionKey);return renderAnnotationResult(result2.item.id,config.collectionKey,allEntries2,limit,options.includeMeta===true,{action:"edit",entryIndex:config.input.index,entry:allEntries2[config.input.index-1]},options.fullHistory===true)}let result;let entryIndex=0;try{result=await mutateItem({pmRoot,settings,id,op:config.op,author,message:options.message,force:options.force,bypassAssigneeConflict:config.bypassOwnershipConflict,skipNoop:options.ifAbsent===true,mutate(document){const appended=appendAnnotationEntry(document,config.collectionKey,author,text,options.ifAbsent===true,config.createEntry);entryIndex=appended.entryIndex;return{changedFields:appended.changedFields}}})}catch(error){wrapOwnershipConflict(error,config.conflictGuidance)}const allEntries=readAnnotationEntries(result.item,config.collectionKey);return renderAnnotationResult(result.item.id,config.collectionKey,allEntries,limit,options.includeMeta===true,{action:"add",entryIndex,entry:allEntries[entryIndex-1],changedCount:options.ifAbsent===true?Math.min(result.changedFields.length,1):void 0},options.fullHistory===true)}function resolveAnnotationIndex(oneBasedIndex,count,collectionKey){if(oneBasedIndex===void 0||!Number.isInteger(oneBasedIndex)||oneBasedIndex<1||oneBasedIndex>count){const singular=collectionKey.replace(/s$/,"");const label=`${singular.charAt(0).toUpperCase()}${singular.slice(1)}`;const noun=count===1?`1 ${singular}`:`${count} ${collectionKey}`;throw new PmCliError(`${label} index ${oneBasedIndex??"(missing)"} out of range (item has ${noun})`,EXIT_CODE.USAGE)}return oneBasedIndex-1}function renderAnnotationMutationReceipts(collectionKey,mutation,historyOmitted){if(mutation===void 0)return{};return{mutation_receipt:{action:mutation.action,entry_index:mutation.entryIndex,changed_count:mutation.changedCount??1,full_history_included:!historyOmitted},omission_receipt:{has_omissions:historyOmitted,omitted_field_group_count:historyOmitted?1:0,omitted_field_groups:historyOmitted?[{name:`${collectionKey}_history`,restore_with:{selector:"full_history",cli_flag:"--full-history",sdk_option:"fullHistory",mcp_option:"full"}}]:[]}}}function renderAnnotationResult(id,collectionKey,allEntries,limit,includeMeta,mutation,fullHistory=false){const entries=mutation===void 0||fullHistory?limitAnnotationEntries(allEntries,mutation!==void 0&&fullHistory?void 0:limit):mutation.entry===void 0?[]:[mutation.entry];const historyOmitted=mutation!==void 0&&entries.length<allEntries.length;return{id,[collectionKey]:entries,count:entries.length,...mutation?.changedCount===void 0?{}:{changed:mutation.changedCount===1},...[includeMeta,mutation!==void 0].includes(true)?{total_count:allEntries.length,returned_count:entries.length,has_more:historyOmitted||entries.length<allEntries.length,...limit!==void 0?{limit}:{}}:{},...renderAnnotationMutationReceipts(collectionKey,mutation,historyOmitted)}}export{assertAnnotationStdinTransportAvailable,isErrnoError,limitAnnotationEntries,normalizeAnnotationTransportOptions,parseAnnotationTextInput,readAnnotationEntries,resolveAnnotationIndex,resolveAnnotationInput,runAnnotationCommand,wrapOwnershipConflict};
|
|
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]="35773218-9c35-51d9-a19b-e9094bd23b66")}catch{}})();import{assertInitializedTracker}from"./environment/tracker-preflight.js";import{readFile}from"node:fs/promises";import{isFileAbsentError}from"../core/fs/fs-utils.js";import{getActiveExtensionRegistrations}from"../core/extensions/index.js";import{resolveItemTypeRegistry}from"../core/item/type-registry.js";import{createStdinTokenResolver,parseCsvKv,shouldResolveMutationStdinTokens,transferMutationStdinTokenPolicy}from"../core/item/parse.js";import{EXIT_CODE}from"../core/shared/constants.js";import{PmCliError}from"../core/shared/errors.js";import{parseLimit}from"../core/shared/numeric-parsers.js";import{nowIso}from"../core/shared/time.js";import{resolveAuthor}from"../core/shared/author.js";import{locateItem,mutateItem,readLocatedItem}from"../core/store/item-store.js";import{resolvePmRoot}from"../core/store/paths.js";import{readSettings}from"../core/store/settings.js";function normalizeAnnotationTransportOptions(options){const normalized={...options,...options.full===!0?{fullHistory:!0}:{}};return delete normalized.full,transferMutationStdinTokenPolicy(options,normalized)}function assertAnnotationEntryMutable(entry,operation){if(typeof entry=="object"&&entry!==null&&"format"in entry&&entry.format==="json")throw new PmCliError(`Structured context events are append-only and cannot be ${operation}.`,EXIT_CODE.USAGE,{code:"structured_event_immutable"})}function limitAnnotationEntries(values,limit){return limit===void 0?values:limit===0?[]:values.slice(Math.max(0,values.length-limit))}function readAnnotationEntries(source,collectionKey){const value=source[collectionKey];return Array.isArray(value)?value:[]}function parseAnnotationTextInput(raw,options={}){const trimmed=raw.trim();if(!trimmed)return"";const textPrefixMatch=/^(?:[-*+]\s*)?text\s*[:=]/i.exec(trimmed);if(options.stripPlainTextPrefix===!0&&textPrefixMatch&&!trimmed.startsWith("```"))return trimmed.slice(textPrefixMatch[0].length).trim()||trimmed;if(!(/^(?:[-*+]\s*)?text\s*[:=]/im.test(trimmed)||trimmed.startsWith("```")))return trimmed;try{const kv=parseCsvKv(trimmed,"--add");return Object.keys(kv).map(key=>key.trim().toLowerCase()).some(key=>key!=="text")?trimmed:kv.text?.trim()||trimmed}catch{return trimmed}}function isErrnoError(error){return typeof error=="object"&&error!==null&&"code"in error}function assertAnnotationStdinTransportAvailable(options,optionName){if(!shouldResolveMutationStdinTokens(options))throw new PmCliError(`${optionName} cannot read process stdin through the MCP JSON-RPC transport. Pass annotation text in options.add instead.`,EXIT_CODE.USAGE,{code:"mcp_stdin_unavailable",required:"Pass annotation text as JSON data; the MCP protocol already owns process stdin."})}async function resolveAnnotationTextSource(options,noun){if(+(options.add!==void 0)+ +(options.stdin===!0)+ +(typeof options.file=="string")>1)throw new PmCliError(`Specify ${noun} text using only one input source: --add, --stdin, or --file`,EXIT_CODE.USAGE);const stdinResolver=createStdinTokenResolver(),resolveStdinTokens=shouldResolveMutationStdinTokens(options);if(options.add!==void 0)return{value:await stdinResolver.resolveValue(options.add,"--add",resolveStdinTokens)??"",rawValue:options.add,emptyFlag:"--add"};if(options.stdin===!0)return assertAnnotationStdinTransportAvailable(options,"--stdin"),{value:await stdinResolver.resolveValue("-","--stdin")??"",emptyFlag:"--stdin"};if(typeof options.file!="string")return;const filePath=options.file.trim();if(!filePath)throw new PmCliError("--file path cannot be empty",EXIT_CODE.USAGE);if(filePath==="-")return assertAnnotationStdinTransportAvailable(options,"--file -"),{value:await stdinResolver.resolveValue("-","--file")??"",emptyFlag:"--file"};try{return{value:await readFile(filePath,"utf8"),emptyFlag:"--file"}}catch(error){if(isErrnoError(error)&&isFileAbsentError(error))throw new PmCliError(`--file path not found: ${filePath}. Use --file - to read stdin.`,EXIT_CODE.USAGE);const detail=error instanceof Error?error.message:String(error);throw new PmCliError(`Failed to read --file path "${filePath}": ${detail}. Use --file - to read stdin.`,EXIT_CODE.USAGE)}}async function resolveAnnotationInput(options,noun){if(options.edit!==void 0&&options.delete!==void 0)throw new PmCliError("Specify only one of --edit or --delete",EXIT_CODE.USAGE);if(options.delete!==void 0){if(options.add!==void 0||options.stdin===!0||typeof options.file=="string")throw new PmCliError("--delete cannot be combined with replacement text",EXIT_CODE.USAGE);if(!Number.isInteger(options.delete)||options.delete<1)throw new PmCliError("--delete must be a positive integer",EXIT_CODE.USAGE);return{mode:"delete",index:options.delete}}if(options.edit!==void 0&&(!Number.isInteger(options.edit)||options.edit<1))throw new PmCliError("--edit must be a positive integer",EXIT_CODE.USAGE);const resolved=await resolveAnnotationTextSource(options,noun);if(options.edit!==void 0){if(!resolved)throw new PmCliError("--edit requires replacement text from --add, --stdin, or --file",EXIT_CODE.USAGE);return{mode:"edit",index:options.edit,...resolved}}return resolved?{mode:"add",...resolved}:{mode:"list"}}function wrapOwnershipConflict(error,guidance){throw error instanceof PmCliError&&error.exitCode===EXIT_CODE.CONFLICT&&error.message.includes("is assigned to")&&error.message.includes("Use --force to override")?new PmCliError(error.message,error.exitCode,{code:"ownership_conflict",required:guidance.required,examples:guidance.examples,nextSteps:guidance.nextSteps}):error}function annotationStdinHint(collectionKey){return collectionKey==="comments"?"--stdin":"--add -"}function assertAnnotationAddValueIsNotFlagLike(raw,config){if((config.input.emptyFlag??"--add")!=="--add")return;const trimmed=raw.trim();if(!/^-{1,2}[A-Za-z][\w-]*(?:=.*)?$/.test(trimmed))return;const stdinHint=annotationStdinHint(config.collectionKey),commandPrefix=config.input.mode==="edit"?`pm ${config.collectionKey} <id> --edit <index>`:`pm ${config.collectionKey} <id>`;throw new PmCliError(`--add value "${trimmed}" looks like an option, not annotation text. Use ${stdinHint} to read stdin, or use text=${trimmed} for literal dash-leading text.`,EXIT_CODE.USAGE,{code:"annotation_flag_like_value",required:`Use ${stdinHint} for stdin input, pass plain text, or use text=${trimmed} when the text really starts with "-".`,examples:[`${commandPrefix} ${stdinHint}`,`${commandPrefix} --add text=${trimmed}`]})}function assertAnnotationMessageHasTextSource(config,options){if(options.ifAbsent===!0&&!["add","stdin","file"].includes(config.input.mode))throw new PmCliError(`--if-absent requires a ${config.collectionKey.replace(/s$/,"")} append`,EXIT_CODE.USAGE,{code:"annotation_if_absent_without_append",required:"Combine --if-absent with one append text source; omit it for list, edit, and delete operations."});if(config.input.mode!=="list"||options.message===void 0)return;const noun=config.collectionKey.replace(/s$/,"");throw new PmCliError(`--message labels a ${noun} mutation but does not provide ${noun} text. Pass text positionally or with --add, --stdin, or --file.`,EXIT_CODE.USAGE,{code:"annotation_message_without_text",required:`Provide ${noun} text through a content source; --message only annotates the history entry of a mutation.`,examples:[`pm ${config.collectionKey} <id> --add "text" --message "why"`,`pm ${config.collectionKey} <id> ${annotationStdinHint(config.collectionKey)}`]})}function appendAnnotationEntry(document,collectionKey,author,text,ifAbsent,createEntry){const entries=readAnnotationEntries(document.metadata,collectionKey),existingIndex=ifAbsent?entries.findIndex(entry=>entry.author===author&&entry.text===text):-1;return existingIndex>=0?{changedFields:[],entryIndex:existingIndex+1}:(entries.push(createEntry({created_at:nowIso(),author,text})),document.metadata[collectionKey]=entries,{changedFields:[collectionKey],entryIndex:entries.length})}async function runAnnotationCommand(id,options,global2,config){assertAnnotationMessageHasTextSource(config,options);const pmRoot=resolvePmRoot(process.cwd(),global2.path);await assertInitializedTracker(pmRoot);const settings=await readSettings(pmRoot),typeRegistry=resolveItemTypeRegistry(settings,getActiveExtensionRegistrations()),limit=parseLimit(options.limit);if(config.input.mode==="list"){const located=await locateItem(pmRoot,id,settings.id_prefix,settings.item_format,typeRegistry.type_to_folder);if(!located)throw new PmCliError(`Item ${id} not found`,EXIT_CODE.NOT_FOUND);const loaded=await readLocatedItem(located,{schema:settings.schema}),allEntries2=readAnnotationEntries(loaded.document.metadata,config.collectionKey);return renderAnnotationResult(located.id,config.collectionKey,allEntries2,limit,options.includeMeta===!0)}const author=resolveAuthor(options.author,settings.author_default);if(config.input.mode==="delete"){const op=config.deleteOp??config.op;let result2;try{result2=await mutateItem({pmRoot,settings,id,op,author,message:options.message,force:options.force,bypassAssigneeConflict:config.bypassOwnershipConflict,mutate(document){const entries=readAnnotationEntries(document.metadata,config.collectionKey),arrayIndex=resolveAnnotationIndex(config.input.index,entries.length,config.collectionKey);return assertAnnotationEntryMutable(entries[arrayIndex],"deleted"),entries.splice(arrayIndex,1),document.metadata[config.collectionKey]=entries,{changedFields:[config.collectionKey]}}})}catch(error){wrapOwnershipConflict(error,config.conflictGuidance)}const allEntries2=readAnnotationEntries(result2.item,config.collectionKey);return renderAnnotationResult(result2.item.id,config.collectionKey,allEntries2,limit,options.includeMeta===!0,{action:"delete",entryIndex:config.input.index},options.fullHistory===!0)}const rawText=config.input.rawValue??config.input.value??"";assertAnnotationAddValueIsNotFlagLike(rawText,config);const text=config.parseText(config.input.value??"");if(!text.trim())throw new PmCliError(`${config.input.emptyFlag??"--add"} text cannot be empty`,EXIT_CODE.USAGE);if(config.input.mode==="edit"){const op=config.editOp??config.op;let result2;try{result2=await mutateItem({pmRoot,settings,id,op,author,message:options.message,force:options.force,bypassAssigneeConflict:config.bypassOwnershipConflict,mutate(document){const entries=readAnnotationEntries(document.metadata,config.collectionKey),arrayIndex=resolveAnnotationIndex(config.input.index,entries.length,config.collectionKey),existing=entries[arrayIndex];return assertAnnotationEntryMutable(existing,"edited"),entries[arrayIndex]={...existing,text,edited_at:nowIso()},document.metadata[config.collectionKey]=entries,{changedFields:[config.collectionKey]}}})}catch(error){wrapOwnershipConflict(error,config.conflictGuidance)}const allEntries2=readAnnotationEntries(result2.item,config.collectionKey);return renderAnnotationResult(result2.item.id,config.collectionKey,allEntries2,limit,options.includeMeta===!0,{action:"edit",entryIndex:config.input.index,entry:allEntries2[config.input.index-1]},options.fullHistory===!0)}let result,entryIndex=0;try{result=await mutateItem({pmRoot,settings,id,op:config.op,author,message:options.message,force:options.force,bypassAssigneeConflict:config.bypassOwnershipConflict,skipNoop:options.ifAbsent===!0,mutate(document){const appended=appendAnnotationEntry(document,config.collectionKey,author,text,options.ifAbsent===!0,config.createEntry);return entryIndex=appended.entryIndex,{changedFields:appended.changedFields}}})}catch(error){wrapOwnershipConflict(error,config.conflictGuidance)}const allEntries=readAnnotationEntries(result.item,config.collectionKey);return renderAnnotationResult(result.item.id,config.collectionKey,allEntries,limit,options.includeMeta===!0,{action:"add",entryIndex,entry:allEntries[entryIndex-1],changedCount:options.ifAbsent===!0?Math.min(result.changedFields.length,1):void 0},options.fullHistory===!0)}function resolveAnnotationIndex(oneBasedIndex,count,collectionKey){if(oneBasedIndex===void 0||!Number.isInteger(oneBasedIndex)||oneBasedIndex<1||oneBasedIndex>count){const singular=collectionKey.replace(/s$/,""),label=`${singular.charAt(0).toUpperCase()}${singular.slice(1)}`,noun=count===1?`1 ${singular}`:`${count} ${collectionKey}`;throw new PmCliError(`${label} index ${oneBasedIndex??"(missing)"} out of range (item has ${noun})`,EXIT_CODE.USAGE)}return oneBasedIndex-1}function renderAnnotationMutationReceipts(collectionKey,mutation,historyOmitted){return mutation===void 0?{}:{mutation_receipt:{action:mutation.action,entry_index:mutation.entryIndex,changed_count:mutation.changedCount??1,full_history_included:!historyOmitted},omission_receipt:{has_omissions:historyOmitted,omitted_field_group_count:historyOmitted?1:0,omitted_field_groups:historyOmitted?[{name:`${collectionKey}_history`,restore_with:{selector:"full_history",cli_flag:"--full-history",sdk_option:"fullHistory",mcp_option:"full"}}]:[]}}}function renderAnnotationResult(id,collectionKey,allEntries,limit,includeMeta,mutation,fullHistory=!1){const entries=mutation===void 0||fullHistory?limitAnnotationEntries(allEntries,mutation!==void 0&&fullHistory?void 0:limit):mutation.entry===void 0?[]:[mutation.entry],historyOmitted=mutation!==void 0&&entries.length<allEntries.length;return{id,[collectionKey]:entries,count:entries.length,...mutation?.changedCount===void 0?{}:{changed:mutation.changedCount===1},...[includeMeta,mutation!==void 0].includes(!0)?{total_count:allEntries.length,returned_count:entries.length,has_more:historyOmitted||entries.length<allEntries.length,...limit!==void 0?{limit}:{}}:{},...renderAnnotationMutationReceipts(collectionKey,mutation,historyOmitted)}}export{assertAnnotationStdinTransportAvailable,isErrnoError,limitAnnotationEntries,normalizeAnnotationTransportOptions,parseAnnotationTextInput,readAnnotationEntries,resolveAnnotationIndex,resolveAnnotationInput,runAnnotationCommand,wrapOwnershipConflict};
|
|
2
2
|
//# sourceMappingURL=annotations.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]="fd8c4c35-98bb-5f3b-927d-8696125af703")}catch(e2){}})();import{createHash}from"node:crypto";import fs from"node:fs/promises";import path from"node:path";import{appendWorkspaceAuditEvent,WORKSPACE_HISTORY_ID}from"../core/history/workspace-history.js";import{readSettings}from"../core/store/settings.js";import{EXIT_CODE}from"../core/shared/constants.js";import{PmCliError}from"../core/shared/errors.js";import{readRuntimeString,readRuntimeStringArray}from"./runtime-input.js";function refuseAuthorAcknowledgmentArgument(message,context){throw new PmCliError(message,EXIT_CODE.USAGE,context)}const HISTORY_AUTHOR_ATTRIBUTION_BASELINE="2026-07-15T06:22:12.276Z";const HISTORY_AUTHOR_ATTRIBUTION_BASELINE_MS=Date.parse(HISTORY_AUTHOR_ATTRIBUTION_BASELINE);const HISTORY_AUTHOR_EVENT_CLASSIFICATIONS=[["attributed","attributed"],["legacy_unknown","actionable_unknown"]];const historyStringValue=value=>typeof value==="string"?value:"";const classifyHistoryAuthorEvent=parsed=>{const record=parsed??{};const author=historyStringValue(record.author).trim().toLowerCase();const authorClass=Number(["","unknown"].includes(author));const timestampClass=Number(Date.parse(historyStringValue(record.ts))>=HISTORY_AUTHOR_ATTRIBUTION_BASELINE_MS);return HISTORY_AUTHOR_EVENT_CLASSIFICATIONS[authorClass][timestampClass]};function inspectHistoryAuthorStreamWithActionableEvents(itemId,raw,sampleLimit=20,acknowledgedEvents=new Set,includeActionableEvents=false){const samples=[];const actionableEvents=[];const unknownCounts={legacy_unknown:0,actionable_unknown:0};const boundedSampleLimit=Math.max(0,sampleLimit);let checkedEvents=0;let unknownEvents=0;let acknowledgedActionableEvents=0;for(const[index,line]of raw.split(/\r?\n/).entries()){let parsed;try{parsed=JSON.parse(line)}catch{continue}checkedEvents+=1;const classification=classifyHistoryAuthorEvent(parsed);if(classification==="attributed"){continue}unknownEvents+=1;if(classification==="actionable_unknown"&&acknowledgedEvents.has(`${itemId}:${index+1}`)){acknowledgedActionableEvents+=1;continue}unknownCounts[classification]+=1;if(includeActionableEvents&&classification==="actionable_unknown"){actionableEvents.push({item_id:itemId,line:index+1})}if(samples.length<boundedSampleLimit){samples.push({item_id:itemId,line:index+1})}}return{checked_events:checkedEvents,unknown_event_count:unknownEvents,legacy_unknown_event_count:unknownCounts.legacy_unknown,actionable_unknown_event_count:unknownCounts.actionable_unknown,acknowledged_actionable_event_count:acknowledgedActionableEvents,samples,samples_truncated:unknownCounts.legacy_unknown+unknownCounts.actionable_unknown>samples.length,actionable_events:actionableEvents}}const inspectHistoryAuthorStream=(itemId,raw,sampleLimit=20,acknowledgedEvents=new Set)=>inspectHistoryAuthorStreamWithActionableEvents(itemId,raw,sampleLimit,acknowledgedEvents);function collectAcknowledgedUnknownEvents(raw){const acknowledged=new Set;for(const line of raw.split(/\r?\n/)){let parsed;try{parsed=JSON.parse(line)}catch{continue}const context=typeof parsed==="object"&&parsed!==null&&typeof parsed.context==="object"&&parsed.context!==null?parsed.context:{};const acknowledgment=context.author_acknowledgment;if(typeof acknowledgment!=="object"||acknowledgment===null||!Array.isArray(acknowledgment.events)){continue}for(const event of acknowledgment.events){if(typeof event==="object"&&event!==null&&typeof event.item_id==="string"&&Number.isSafeInteger(event.line)){acknowledged.add(`${event.item_id}:${String(event.line)}`)}}}return acknowledged}const scanHistoryAuthorAttribution=async(pmRoot,sampleLimit=20,includeActionableEvents=false)=>{const historyDirectory=path.join(pmRoot,"history");let fileNames;try{fileNames=(await fs.readdir(historyDirectory)).filter(fileName=>fileName.endsWith(".jsonl")).sort((left,right)=>left.localeCompare(right))}catch{fileNames=[]}const affectedItemIds=new Set;const samples=[];const actionableEvents=[];let checkedStreams=0;let checkedEvents=0;let unknownEventCount=0;let legacyUnknownEventCount=0;let actionableUnknownEventCount=0;let acknowledgedActionableEventCount=0;const workspaceFileName="_workspace.jsonl";let acknowledgedEvents=new Set;if(fileNames.includes(workspaceFileName)){try{acknowledgedEvents=collectAcknowledgedUnknownEvents(await fs.readFile(path.join(historyDirectory,workspaceFileName),"utf8"))}catch{acknowledgedEvents=new Set}}for(const fileName of fileNames){let raw;try{raw=await fs.readFile(path.join(historyDirectory,fileName),"utf8")}catch{continue}const itemId=fileName.slice(0,-".jsonl".length);const inspected=inspectHistoryAuthorStreamWithActionableEvents(itemId,raw,sampleLimit-samples.length,acknowledgedEvents,includeActionableEvents);checkedStreams+=1;checkedEvents+=inspected.checked_events;unknownEventCount+=inspected.unknown_event_count;legacyUnknownEventCount+=inspected.legacy_unknown_event_count;actionableUnknownEventCount+=inspected.actionable_unknown_event_count;acknowledgedActionableEventCount+=inspected.acknowledged_actionable_event_count;if(inspected.unknown_event_count>0){affectedItemIds.add(itemId)}samples.push(...inspected.samples);if(includeActionableEvents){actionableEvents.push(...inspected.actionable_events)}}const undispositionedUnknownEventCount=legacyUnknownEventCount+actionableUnknownEventCount;return{checked_streams:checkedStreams,checked_events:checkedEvents,unknown_event_count:unknownEventCount,legacy_unknown_event_count:legacyUnknownEventCount,actionable_unknown_event_count:actionableUnknownEventCount,acknowledged_actionable_event_count:acknowledgedActionableEventCount,affected_item_ids:[...affectedItemIds].sort((left,right)=>left.localeCompare(right)),samples,samples_truncated:undispositionedUnknownEventCount>samples.length,...includeActionableEvents?{actionable_events:actionableEvents}:{}}};function normalizeUnknownAuthorHistoryEvents(events){return[...new Map(events.map(event=>[`${event.item_id}:${event.line}`,{item_id:event.item_id,line:event.line}])).values()].sort((left,right)=>left.item_id.localeCompare(right.item_id)||left.line-right.line)}async function readAcknowledgedUnknownEvents(pmRoot){try{return collectAcknowledgedUnknownEvents(await fs.readFile(path.join(pmRoot,"history","_workspace.jsonl"),"utf8"))}catch{return new Set}}function isValidUnknownAuthorHistoryEvent(event){return(event.item_id===WORKSPACE_HISTORY_ID||/^[a-z0-9][a-z0-9-]*$/iu.test(event.item_id))&&Number.isSafeInteger(event.line)&&event.line>=1}function resolveAcknowledgmentPlanCoordinate(event,acknowledgedEvents,sourceLines){const sourceLine=sourceLines[event.line-1]??"";let parsed;try{parsed=JSON.parse(sourceLine)}catch{refuseAuthorAcknowledgmentArgument(`Unknown-author acknowledgment target ${event.item_id}:${event.line} is not readable.`,{code:"history_author_acknowledge_target_unreadable"})}if(classifyHistoryAuthorEvent(parsed)!=="actionable_unknown"){refuseAuthorAcknowledgmentArgument(`Author acknowledgment target ${event.item_id}:${event.line} is not an actionable unknown-author event.`,{code:"history_author_acknowledge_target_not_actionable"})}return{...event,source_event_hash:createHash("sha256").update(sourceLine).digest("hex"),disposition:acknowledgedEvents.has(`${event.item_id}:${event.line}`)?"already_acknowledged":"actionable"}}async function resolveUnknownAuthorAcknowledgmentPlan(pmRoot,selector,coordinateLimit){const explicitEvents=selector.events??[];const selectorCount=Number(selector.all_actionable===true)+Number(explicitEvents.length>0);if(selectorCount===0){refuseAuthorAcknowledgmentArgument("Specify exactly one selector: events or all_actionable.",{code:"history_author_acknowledge_selector_required"})}if(selectorCount>1){refuseAuthorAcknowledgmentArgument("Author acknowledgment accepts either explicit events or all_actionable, not both.",{code:"history_author_acknowledge_selector_conflict"})}if(!Number.isSafeInteger(coordinateLimit)||coordinateLimit<0){refuseAuthorAcknowledgmentArgument("Author acknowledgment coordinate_limit must be a non-negative integer.",{code:"history_author_acknowledge_preview_limit_invalid"})}const selectedEvents=normalizeUnknownAuthorHistoryEvents(selector.all_actionable===true?(await scanHistoryAuthorAttribution(pmRoot,0,true)).actionable_events:explicitEvents);const acknowledgedEvents=await readAcknowledgedUnknownEvents(pmRoot);const sourceLinesByItem=new Map;for(const event of selectedEvents){if(!isValidUnknownAuthorHistoryEvent(event)){refuseAuthorAcknowledgmentArgument(`Unknown-author acknowledgment target ${event.item_id}:${event.line} is not readable.`,{code:"history_author_acknowledge_target_unreadable"})}if(sourceLinesByItem.has(event.item_id))continue;try{sourceLinesByItem.set(event.item_id,(await fs.readFile(path.join(pmRoot,"history",`${event.item_id}.jsonl`),"utf8")).split(/\r?\n/u))}catch{refuseAuthorAcknowledgmentArgument(`Unknown-author acknowledgment target ${event.item_id}:${event.line} is not readable.`,{code:"history_author_acknowledge_target_unreadable"})}}const completeCoordinates=selectedEvents.map(event=>resolveAcknowledgmentPlanCoordinate(event,acknowledgedEvents,sourceLinesByItem.get(event.item_id)));const kind=selector.all_actionable===true?"all_actionable":"events";const planFingerprint=createHash("sha256").update(JSON.stringify({version:1,selection:kind,coordinates:completeCoordinates})).digest("hex");const actionableCount=completeCoordinates.filter(({disposition})=>disposition==="actionable").length;return{plan:{selection:{kind},selected_count:completeCoordinates.length,actionable_count:actionableCount,already_acknowledged_count:completeCoordinates.length-actionableCount,omitted_count:Math.max(0,completeCoordinates.length-coordinateLimit),coordinates:completeCoordinates.slice(0,coordinateLimit),plan_fingerprint:planFingerprint},completeCoordinates}}async function planUnknownAuthorHistoryAcknowledgment(pmRoot,selector,coordinateLimit=50){return(await resolveUnknownAuthorAcknowledgmentPlan(pmRoot,selector,coordinateLimit)).plan}function resolveUnknownAuthorAcknowledgmentSelector(rawEvents,allActionable){const hasExplicitEvents=rawEvents.length>0;if(hasExplicitEvents&&allActionable){refuseAuthorAcknowledgmentArgument("Specify exactly one selector: repeat --event or pass --all-actionable.",{code:"history_author_acknowledge_selector_conflict",required:"Exactly one of --event or --all-actionable",examples:['pm history-author-acknowledge --event pm-a1b2:4 --attributed-author agent --reviewer maintainer --reason "Verified provenance"','pm history-author-acknowledge --all-actionable --attributed-author import-agent --reviewer maintainer --reason "Reviewed the complete actionable set"']})}if(!hasExplicitEvents&&!allActionable){refuseAuthorAcknowledgmentArgument("Specify exactly one selector: repeat --event or pass --all-actionable.",{code:"history_author_acknowledge_selector_required",required:"Exactly one of --event or --all-actionable",examples:['pm history-author-acknowledge --event pm-a1b2:4 --attributed-author agent --reviewer maintainer --reason "Verified provenance"','pm history-author-acknowledge --all-actionable --attributed-author import-agent --reviewer maintainer --reason "Reviewed the complete actionable set"']})}return{events:parseUnknownAuthorHistoryEventCoordinates(rawEvents),all_actionable:allActionable}}function parseUnknownAuthorHistoryEventCoordinates(values){return values.map(value=>{const separator=value.lastIndexOf(":");const itemId=value.slice(0,separator).trim();const line=Number(value.slice(separator+1));const validItemId=itemId===WORKSPACE_HISTORY_ID||/^[a-z0-9][a-z0-9-]*$/iu.test(itemId);if(separator<1||!validItemId||!Number.isSafeInteger(line)||line<1){refuseAuthorAcknowledgmentArgument(`history-author-acknowledge --event expects <item-id>:<one-based-line>, received "${value}".`,{code:"history_author_acknowledge_target_unreadable"})}return{item_id:itemId,line}})}function acknowledgeUnknownAuthorHistoryEventsFromTransport(pmRoot,input){const selector=resolveUnknownAuthorAcknowledgmentSelector(readRuntimeStringArray(input.historyEvent),input.allActionable===true||input.all_actionable===true);return acknowledgeUnknownAuthorHistoryEvents(pmRoot,{events:selector.events,all_actionable:selector.all_actionable,dry_run:input.dryRun===true||input.dry_run===true,plan_fingerprint:readRuntimeString(input,"planFingerprint")??readRuntimeString(input,"plan_fingerprint"),coordinate_limit:typeof input.limit==="number"?input.limit:typeof input.limit==="string"?Number(input.limit):void 0,attributed_author:readRuntimeString(input,"attributedAuthor")??readRuntimeString(input,"attributed_author")??void 0,reviewer:readRuntimeString(input,"reviewer"),reason:readRuntimeString(input,"reason")})}async function acknowledgeUnknownAuthorHistoryEvents(pmRoot,options){const reviewer=options.reviewer?.trim()??"";const attributedAuthor=options.attributed_author?.trim()??"";const reason=options.reason?.trim()??"";const resolved=await resolveUnknownAuthorAcknowledgmentPlan(pmRoot,options,options.coordinate_limit??50);if(options.dry_run===true){return{dry_run:true,mutated:false,acknowledged:0,outcome:"preview",exit_code:EXIT_CODE.SUCCESS,plan:resolved.plan}}const requiredValuesMissing=[reviewer.length>0,reviewer.toLowerCase()!=="unknown",attributedAuthor.length>0,attributedAuthor.toLowerCase()!=="unknown",reason.length>0].includes(false);if(requiredValuesMissing){refuseAuthorAcknowledgmentArgument("Author acknowledgment requires events, reviewer, attributed_author, and reason.",{code:"history_author_acknowledge_required_values_missing"})}if(!options.plan_fingerprint?.trim()){refuseAuthorAcknowledgmentArgument("Author acknowledgment apply requires plan_fingerprint from a fresh dry-run preview.",{code:"history_author_acknowledge_plan_fingerprint_required",recovery:{suggested_retry:"Rerun history-author-acknowledge with --dry-run, then pass --plan-fingerprint <value>."}})}if(options.plan_fingerprint.trim()!==resolved.plan.plan_fingerprint){throw new PmCliError("Author acknowledgment selection changed after preview; no history was mutated.",EXIT_CODE.CONFLICT,{code:"history_author_acknowledge_plan_conflict",recovery:{suggested_retry:"Rerun history-author-acknowledge with --dry-run and apply the fresh plan_fingerprint."}})}const eventsToAcknowledge=resolved.completeCoordinates.filter(({disposition})=>resolved.plan.selection.kind==="events"||disposition==="actionable").map(({item_id,line})=>({item_id,line}));if(eventsToAcknowledge.length===0){return{dry_run:false,mutated:false,acknowledged:0,outcome:"no_effect",exit_code:EXIT_CODE.NO_EFFECT,plan:resolved.plan}}const settings=await readSettings(pmRoot);const appended=await appendWorkspaceAuditEvent({pmRoot,op:"history:author-acknowledge",author:reviewer,context:{author_acknowledgment:{events:eventsToAcknowledge,attributed_author:attributedAuthor}},message:reason,lockTtlSeconds:settings.locks.ttl_seconds,lockWaitMs:settings.locks.wait_ms});const effectResult=resolved.plan.actionable_count>0&&resolved.plan.already_acknowledged_count>0?{outcome:"partial_effect",exit_code:EXIT_CODE.PARTIAL_EFFECT}:{outcome:"effect",exit_code:EXIT_CODE.SUCCESS};return{dry_run:false,mutated:true,acknowledged:eventsToAcknowledge.length,...effectResult,plan:resolved.plan,history_path:appended.historyPath}}export{HISTORY_AUTHOR_ATTRIBUTION_BASELINE,acknowledgeUnknownAuthorHistoryEvents,acknowledgeUnknownAuthorHistoryEventsFromTransport,classifyHistoryAuthorEvent,inspectHistoryAuthorStream,parseUnknownAuthorHistoryEventCoordinates,planUnknownAuthorHistoryAcknowledgment,resolveUnknownAuthorAcknowledgmentSelector,scanHistoryAuthorAttribution};
|
|
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]="69bf315a-01aa-56d9-bd56-196d6792dea2")}catch{}})();import{createHash}from"node:crypto";import fs from"node:fs/promises";import path from"node:path";import{appendWorkspaceAuditEvent,WORKSPACE_HISTORY_ID}from"../core/history/workspace-history.js";import{readSettings}from"../core/store/settings.js";import{EXIT_CODE}from"../core/shared/constants.js";import{PmCliError}from"../core/shared/errors.js";import{readRuntimeString,readRuntimeStringArray}from"./runtime-input.js";function refuseAuthorAcknowledgmentArgument(message,context){throw new PmCliError(message,EXIT_CODE.USAGE,context)}const HISTORY_AUTHOR_ATTRIBUTION_BASELINE="2026-07-15T06:22:12.276Z",HISTORY_AUTHOR_ATTRIBUTION_BASELINE_MS=Date.parse(HISTORY_AUTHOR_ATTRIBUTION_BASELINE),HISTORY_AUTHOR_EVENT_CLASSIFICATIONS=[["attributed","attributed"],["legacy_unknown","actionable_unknown"]],historyStringValue=value=>typeof value=="string"?value:"",classifyHistoryAuthorEvent=parsed=>{const record=parsed??{},author=historyStringValue(record.author).trim().toLowerCase(),authorClass=Number(["","unknown"].includes(author)),timestampClass=+(Date.parse(historyStringValue(record.ts))>=HISTORY_AUTHOR_ATTRIBUTION_BASELINE_MS);return HISTORY_AUTHOR_EVENT_CLASSIFICATIONS[authorClass][timestampClass]};function inspectHistoryAuthorStreamWithActionableEvents(itemId,raw,sampleLimit=20,acknowledgedEvents=new Set,includeActionableEvents=!1){const samples=[],actionableEvents=[],unknownCounts={legacy_unknown:0,actionable_unknown:0},boundedSampleLimit=Math.max(0,sampleLimit);let checkedEvents=0,unknownEvents=0,acknowledgedActionableEvents=0;for(const[index,line]of raw.split(/\r?\n/).entries()){let parsed;try{parsed=JSON.parse(line)}catch{continue}checkedEvents+=1;const classification=classifyHistoryAuthorEvent(parsed);if(classification!=="attributed"){if(unknownEvents+=1,classification==="actionable_unknown"&&acknowledgedEvents.has(`${itemId}:${index+1}`)){acknowledgedActionableEvents+=1;continue}unknownCounts[classification]+=1,includeActionableEvents&&classification==="actionable_unknown"&&actionableEvents.push({item_id:itemId,line:index+1}),samples.length<boundedSampleLimit&&samples.push({item_id:itemId,line:index+1})}}return{checked_events:checkedEvents,unknown_event_count:unknownEvents,legacy_unknown_event_count:unknownCounts.legacy_unknown,actionable_unknown_event_count:unknownCounts.actionable_unknown,acknowledged_actionable_event_count:acknowledgedActionableEvents,samples,samples_truncated:unknownCounts.legacy_unknown+unknownCounts.actionable_unknown>samples.length,actionable_events:actionableEvents}}const inspectHistoryAuthorStream=(itemId,raw,sampleLimit=20,acknowledgedEvents=new Set)=>inspectHistoryAuthorStreamWithActionableEvents(itemId,raw,sampleLimit,acknowledgedEvents);function collectAcknowledgedUnknownEvents(raw){const acknowledged=new Set;for(const line of raw.split(/\r?\n/)){let parsed;try{parsed=JSON.parse(line)}catch{continue}const acknowledgment=(typeof parsed=="object"&&parsed!==null&&typeof parsed.context=="object"&&parsed.context!==null?parsed.context:{}).author_acknowledgment;if(!(typeof acknowledgment!="object"||acknowledgment===null||!Array.isArray(acknowledgment.events)))for(const event of acknowledgment.events)typeof event=="object"&&event!==null&&typeof event.item_id=="string"&&Number.isSafeInteger(event.line)&&acknowledged.add(`${event.item_id}:${String(event.line)}`)}return acknowledged}const scanHistoryAuthorAttribution=async(pmRoot,sampleLimit=20,includeActionableEvents=!1)=>{const historyDirectory=path.join(pmRoot,"history");let fileNames;try{fileNames=(await fs.readdir(historyDirectory)).filter(fileName=>fileName.endsWith(".jsonl")).sort((left,right)=>left.localeCompare(right))}catch{fileNames=[]}const affectedItemIds=new Set,samples=[],actionableEvents=[];let checkedStreams=0,checkedEvents=0,unknownEventCount=0,legacyUnknownEventCount=0,actionableUnknownEventCount=0,acknowledgedActionableEventCount=0;const workspaceFileName="_workspace.jsonl";let acknowledgedEvents=new Set;if(fileNames.includes(workspaceFileName))try{acknowledgedEvents=collectAcknowledgedUnknownEvents(await fs.readFile(path.join(historyDirectory,workspaceFileName),"utf8"))}catch{acknowledgedEvents=new Set}for(const fileName of fileNames){let raw;try{raw=await fs.readFile(path.join(historyDirectory,fileName),"utf8")}catch{continue}const itemId=fileName.slice(0,-6),inspected=inspectHistoryAuthorStreamWithActionableEvents(itemId,raw,sampleLimit-samples.length,acknowledgedEvents,includeActionableEvents);checkedStreams+=1,checkedEvents+=inspected.checked_events,unknownEventCount+=inspected.unknown_event_count,legacyUnknownEventCount+=inspected.legacy_unknown_event_count,actionableUnknownEventCount+=inspected.actionable_unknown_event_count,acknowledgedActionableEventCount+=inspected.acknowledged_actionable_event_count,inspected.unknown_event_count>0&&affectedItemIds.add(itemId),samples.push(...inspected.samples),includeActionableEvents&&actionableEvents.push(...inspected.actionable_events)}const undispositionedUnknownEventCount=legacyUnknownEventCount+actionableUnknownEventCount;return{checked_streams:checkedStreams,checked_events:checkedEvents,unknown_event_count:unknownEventCount,legacy_unknown_event_count:legacyUnknownEventCount,actionable_unknown_event_count:actionableUnknownEventCount,acknowledged_actionable_event_count:acknowledgedActionableEventCount,affected_item_ids:[...affectedItemIds].sort((left,right)=>left.localeCompare(right)),samples,samples_truncated:undispositionedUnknownEventCount>samples.length,...includeActionableEvents?{actionable_events:actionableEvents}:{}}};function normalizeUnknownAuthorHistoryEvents(events){return[...new Map(events.map(event=>[`${event.item_id}:${event.line}`,{item_id:event.item_id,line:event.line}])).values()].sort((left,right)=>left.item_id.localeCompare(right.item_id)||left.line-right.line)}async function readAcknowledgedUnknownEvents(pmRoot){try{return collectAcknowledgedUnknownEvents(await fs.readFile(path.join(pmRoot,"history","_workspace.jsonl"),"utf8"))}catch{return new Set}}function isValidUnknownAuthorHistoryEvent(event){return(event.item_id===WORKSPACE_HISTORY_ID||/^[a-z0-9][a-z0-9-]*$/iu.test(event.item_id))&&Number.isSafeInteger(event.line)&&event.line>=1}function resolveAcknowledgmentPlanCoordinate(event,acknowledgedEvents,sourceLines){const sourceLine=sourceLines[event.line-1]??"";let parsed;try{parsed=JSON.parse(sourceLine)}catch{refuseAuthorAcknowledgmentArgument(`Unknown-author acknowledgment target ${event.item_id}:${event.line} is not readable.`,{code:"history_author_acknowledge_target_unreadable"})}return classifyHistoryAuthorEvent(parsed)!=="actionable_unknown"&&refuseAuthorAcknowledgmentArgument(`Author acknowledgment target ${event.item_id}:${event.line} is not an actionable unknown-author event.`,{code:"history_author_acknowledge_target_not_actionable"}),{...event,source_event_hash:createHash("sha256").update(sourceLine).digest("hex"),disposition:acknowledgedEvents.has(`${event.item_id}:${event.line}`)?"already_acknowledged":"actionable"}}async function resolveUnknownAuthorAcknowledgmentPlan(pmRoot,selector,coordinateLimit){const explicitEvents=selector.events??[],selectorCount=+(selector.all_actionable===!0)+ +(explicitEvents.length>0);selectorCount===0&&refuseAuthorAcknowledgmentArgument("Specify exactly one selector: events or all_actionable.",{code:"history_author_acknowledge_selector_required"}),selectorCount>1&&refuseAuthorAcknowledgmentArgument("Author acknowledgment accepts either explicit events or all_actionable, not both.",{code:"history_author_acknowledge_selector_conflict"}),(!Number.isSafeInteger(coordinateLimit)||coordinateLimit<0)&&refuseAuthorAcknowledgmentArgument("Author acknowledgment coordinate_limit must be a non-negative integer.",{code:"history_author_acknowledge_preview_limit_invalid"});const selectedEvents=normalizeUnknownAuthorHistoryEvents(selector.all_actionable===!0?(await scanHistoryAuthorAttribution(pmRoot,0,!0)).actionable_events:explicitEvents),acknowledgedEvents=await readAcknowledgedUnknownEvents(pmRoot),sourceLinesByItem=new Map;for(const event of selectedEvents)if(isValidUnknownAuthorHistoryEvent(event)||refuseAuthorAcknowledgmentArgument(`Unknown-author acknowledgment target ${event.item_id}:${event.line} is not readable.`,{code:"history_author_acknowledge_target_unreadable"}),!sourceLinesByItem.has(event.item_id))try{sourceLinesByItem.set(event.item_id,(await fs.readFile(path.join(pmRoot,"history",`${event.item_id}.jsonl`),"utf8")).split(/\r?\n/u))}catch{refuseAuthorAcknowledgmentArgument(`Unknown-author acknowledgment target ${event.item_id}:${event.line} is not readable.`,{code:"history_author_acknowledge_target_unreadable"})}const completeCoordinates=selectedEvents.map(event=>resolveAcknowledgmentPlanCoordinate(event,acknowledgedEvents,sourceLinesByItem.get(event.item_id))),kind=selector.all_actionable===!0?"all_actionable":"events",planFingerprint=createHash("sha256").update(JSON.stringify({version:1,selection:kind,coordinates:completeCoordinates})).digest("hex"),actionableCount=completeCoordinates.filter(({disposition})=>disposition==="actionable").length;return{plan:{selection:{kind},selected_count:completeCoordinates.length,actionable_count:actionableCount,already_acknowledged_count:completeCoordinates.length-actionableCount,omitted_count:Math.max(0,completeCoordinates.length-coordinateLimit),coordinates:completeCoordinates.slice(0,coordinateLimit),plan_fingerprint:planFingerprint},completeCoordinates}}async function planUnknownAuthorHistoryAcknowledgment(pmRoot,selector,coordinateLimit=50){return(await resolveUnknownAuthorAcknowledgmentPlan(pmRoot,selector,coordinateLimit)).plan}function resolveUnknownAuthorAcknowledgmentSelector(rawEvents,allActionable){const hasExplicitEvents=rawEvents.length>0;return hasExplicitEvents&&allActionable&&refuseAuthorAcknowledgmentArgument("Specify exactly one selector: repeat --event or pass --all-actionable.",{code:"history_author_acknowledge_selector_conflict",required:"Exactly one of --event or --all-actionable",examples:['pm history-author-acknowledge --event pm-a1b2:4 --attributed-author agent --reviewer maintainer --reason "Verified provenance"','pm history-author-acknowledge --all-actionable --attributed-author import-agent --reviewer maintainer --reason "Reviewed the complete actionable set"']}),!hasExplicitEvents&&!allActionable&&refuseAuthorAcknowledgmentArgument("Specify exactly one selector: repeat --event or pass --all-actionable.",{code:"history_author_acknowledge_selector_required",required:"Exactly one of --event or --all-actionable",examples:['pm history-author-acknowledge --event pm-a1b2:4 --attributed-author agent --reviewer maintainer --reason "Verified provenance"','pm history-author-acknowledge --all-actionable --attributed-author import-agent --reviewer maintainer --reason "Reviewed the complete actionable set"']}),{events:parseUnknownAuthorHistoryEventCoordinates(rawEvents),all_actionable:allActionable}}function parseUnknownAuthorHistoryEventCoordinates(values){return values.map(value=>{const separator=value.lastIndexOf(":"),itemId=value.slice(0,separator).trim(),line=Number(value.slice(separator+1)),validItemId=itemId===WORKSPACE_HISTORY_ID||/^[a-z0-9][a-z0-9-]*$/iu.test(itemId);return(separator<1||!validItemId||!Number.isSafeInteger(line)||line<1)&&refuseAuthorAcknowledgmentArgument(`history-author-acknowledge --event expects <item-id>:<one-based-line>, received "${value}".`,{code:"history_author_acknowledge_target_unreadable"}),{item_id:itemId,line}})}function acknowledgeUnknownAuthorHistoryEventsFromTransport(pmRoot,input){const selector=resolveUnknownAuthorAcknowledgmentSelector(readRuntimeStringArray(input.historyEvent),input.allActionable===!0||input.all_actionable===!0);return acknowledgeUnknownAuthorHistoryEvents(pmRoot,{events:selector.events,all_actionable:selector.all_actionable,dry_run:input.dryRun===!0||input.dry_run===!0,plan_fingerprint:readRuntimeString(input,"planFingerprint")??readRuntimeString(input,"plan_fingerprint"),coordinate_limit:typeof input.limit=="number"?input.limit:typeof input.limit=="string"?Number(input.limit):void 0,attributed_author:readRuntimeString(input,"attributedAuthor")??readRuntimeString(input,"attributed_author")??void 0,reviewer:readRuntimeString(input,"reviewer"),reason:readRuntimeString(input,"reason")})}async function acknowledgeUnknownAuthorHistoryEvents(pmRoot,options){const reviewer=options.reviewer?.trim()??"",attributedAuthor=options.attributed_author?.trim()??"",reason=options.reason?.trim()??"",resolved=await resolveUnknownAuthorAcknowledgmentPlan(pmRoot,options,options.coordinate_limit??50);if(options.dry_run===!0)return{dry_run:!0,mutated:!1,acknowledged:0,outcome:"preview",exit_code:EXIT_CODE.SUCCESS,plan:resolved.plan};if([reviewer.length>0,reviewer.toLowerCase()!=="unknown",attributedAuthor.length>0,attributedAuthor.toLowerCase()!=="unknown",reason.length>0].includes(!1)&&refuseAuthorAcknowledgmentArgument("Author acknowledgment requires events, reviewer, attributed_author, and reason.",{code:"history_author_acknowledge_required_values_missing"}),options.plan_fingerprint?.trim()||refuseAuthorAcknowledgmentArgument("Author acknowledgment apply requires plan_fingerprint from a fresh dry-run preview.",{code:"history_author_acknowledge_plan_fingerprint_required",recovery:{suggested_retry:"Rerun history-author-acknowledge with --dry-run, then pass --plan-fingerprint <value>."}}),options.plan_fingerprint.trim()!==resolved.plan.plan_fingerprint)throw new PmCliError("Author acknowledgment selection changed after preview; no history was mutated.",EXIT_CODE.CONFLICT,{code:"history_author_acknowledge_plan_conflict",recovery:{suggested_retry:"Rerun history-author-acknowledge with --dry-run and apply the fresh plan_fingerprint."}});const eventsToAcknowledge=resolved.completeCoordinates.filter(({disposition})=>resolved.plan.selection.kind==="events"||disposition==="actionable").map(({item_id,line})=>({item_id,line}));if(eventsToAcknowledge.length===0)return{dry_run:!1,mutated:!1,acknowledged:0,outcome:"no_effect",exit_code:EXIT_CODE.NO_EFFECT,plan:resolved.plan};const settings=await readSettings(pmRoot),appended=await appendWorkspaceAuditEvent({pmRoot,op:"history:author-acknowledge",author:reviewer,context:{author_acknowledgment:{events:eventsToAcknowledge,attributed_author:attributedAuthor}},message:reason,lockTtlSeconds:settings.locks.ttl_seconds,lockWaitMs:settings.locks.wait_ms}),effectResult=resolved.plan.actionable_count>0&&resolved.plan.already_acknowledged_count>0?{outcome:"partial_effect",exit_code:EXIT_CODE.PARTIAL_EFFECT}:{outcome:"effect",exit_code:EXIT_CODE.SUCCESS};return{dry_run:!1,mutated:!0,acknowledged:eventsToAcknowledge.length,...effectResult,plan:resolved.plan,history_path:appended.historyPath}}export{HISTORY_AUTHOR_ATTRIBUTION_BASELINE,acknowledgeUnknownAuthorHistoryEvents,acknowledgeUnknownAuthorHistoryEventsFromTransport,classifyHistoryAuthorEvent,inspectHistoryAuthorStream,parseUnknownAuthorHistoryEventCoordinates,planUnknownAuthorHistoryAcknowledgment,resolveUnknownAuthorAcknowledgmentSelector,scanHistoryAuthorAttribution};
|
|
2
2
|
//# sourceMappingURL=author-attribution.js.map
|
package/dist/sdk/authoring.js
CHANGED
|
@@ -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]="af4da99c-f557-5bf7-a439-c14878e4970d")}catch{}})();export*from"./compose.js";export*from"./define.js";export*from"./extension-contracts.js";import{RESERVED_ITEM_FIELD_NAMES}from"../core/extensions/item-fields.js";import{PM_PACKAGE_CONVENTIONAL_RESOURCE_ROOTS,PM_PACKAGE_RESOURCE_KINDS,collectPackageExtensionDirectories,readPmPackageManifest}from"../core/packages/manifest.js";import{BUILTIN_PROFILES,listProfiles,normalizeProfileName,PROFILE_NAMES,resolveProfile}from"../core/profile/profile-presets.js";import{describeProfileComposition,describeProjectProfile}from"../core/profile/profile-describe.js";import{lintProjectProfile,PROFILE_LINT_CODES,PROFILE_LINT_DIMENSIONS}from"../core/profile/profile-lint.js";import{planProfileApplication}from"../core/profile/profile-plan.js";import{EXTENSION_CAPABILITY_REGISTRATION_SURFACES,collectUsedExtensionCapabilities,reconcileExtensionCapabilityUsage}from"../core/extensions/capability-usage.js";import{renderExtensionSurfaceMarkdown}from"../core/extensions/activation-summary-markdown.js";import{createExtensionContributionInventory,normalizeExtensionContributionInventory}from"../core/extensions/contribution-inventory.js";export{BUILTIN_PROFILES,EXTENSION_CAPABILITY_REGISTRATION_SURFACES,PM_PACKAGE_CONVENTIONAL_RESOURCE_ROOTS,PM_PACKAGE_RESOURCE_KINDS,PROFILE_LINT_CODES,PROFILE_LINT_DIMENSIONS,PROFILE_NAMES,RESERVED_ITEM_FIELD_NAMES,collectPackageExtensionDirectories,collectUsedExtensionCapabilities,createExtensionContributionInventory,describeProfileComposition,describeProjectProfile,lintProjectProfile,listProfiles,normalizeExtensionContributionInventory,normalizeProfileName,planProfileApplication,readPmPackageManifest,reconcileExtensionCapabilityUsage,renderExtensionSurfaceMarkdown,resolveProfile};
|
|
2
2
|
//# sourceMappingURL=authoring.js.map
|