@unbrained/pm-cli 2026.10.4 → 2026.10.6
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 +37 -1
- 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-SMKHR6BM.js → chunk-25EW53VO.js} +89 -88
- package/dist/cli-bundle/chunks/chunk-3CCVTV6Q.js +8 -0
- package/dist/cli-bundle/chunks/chunk-3REXBTST.js +3 -0
- package/dist/cli-bundle/chunks/chunk-4WB55TBC.js +80 -0
- package/dist/cli-bundle/chunks/{chunk-7CE2DJMA.js → chunk-6STTPXOC.js} +2 -2
- package/dist/cli-bundle/chunks/chunk-ATB4ZZBQ.js +20 -0
- package/dist/cli-bundle/chunks/chunk-D4G43LBV.js +238 -0
- package/dist/cli-bundle/chunks/chunk-K6D6DMRT.js +31 -0
- package/dist/cli-bundle/chunks/chunk-KIRHWPZB.js +2 -0
- package/dist/cli-bundle/chunks/chunk-O67BH435.js +6 -0
- package/dist/cli-bundle/chunks/chunk-R7CG2DB7.js +2 -0
- package/dist/cli-bundle/chunks/chunk-RJHLD64E.js +3 -0
- package/dist/cli-bundle/chunks/chunk-TUKO5NF7.js +2 -0
- package/dist/cli-bundle/chunks/chunk-UZ7BIUCI.js +2 -0
- package/dist/cli-bundle/chunks/{chunk-GZMWISWW.js → chunk-XJD47LUH.js} +3 -3
- package/dist/cli-bundle/chunks/{register-list-query-QBGXO5JJ.js → register-list-query-53WYLNZT.js} +11 -11
- package/dist/cli-bundle/chunks/register-mutation-34XXUBVI.js +20 -0
- package/dist/cli-bundle/chunks/register-operations-WANO6EIM.js +2 -0
- package/dist/cli-bundle/chunks/register-setup-WT37UPBQ.js +2 -0
- package/dist/cli-bundle/focused-chunks/chunk-6KFKQD2D.js +165 -0
- package/dist/cli-bundle/focused-chunks/chunk-FOHRPFIT.js +2 -0
- package/dist/cli-bundle/focused-chunks/chunk-GRQXL5G5.js +8 -0
- package/dist/cli-bundle/focused-chunks/{chunk-467EW5RL.js → chunk-JZ4WGUVH.js} +3 -3
- package/dist/cli-bundle/focused-chunks/chunk-NM3PM6O6.js +3 -0
- package/dist/cli-bundle/focused-chunks/chunk-OT7HK7SG.js +2 -0
- package/dist/cli-bundle/focused-chunks/{chunk-Q6DJ5DFQ.js → chunk-PCLU34KB.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-HFAW3FJQ.js → chunk-PSXFFQFT.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-QQIE4L42.js +2 -0
- package/dist/cli-bundle/focused-chunks/chunk-RPUNVKXK.js +2 -0
- package/dist/cli-bundle/focused-chunks/chunk-RXSVJPZ7.js +3 -0
- package/dist/cli-bundle/focused-chunks/chunk-SPN5QTZ3.js +30 -0
- package/dist/cli-bundle/focused-chunks/chunk-SUZJNPGB.js +6 -0
- package/dist/cli-bundle/focused-chunks/chunk-W4BG5HHS.js +2 -0
- package/dist/cli-bundle/focused-chunks/chunk-Y5HXFDTZ.js +20 -0
- package/dist/cli-bundle/focused-chunks/chunk-ZK5SOOPC.js +75 -0
- package/dist/cli-bundle/focused-chunks/chunk-ZQK2XUSS.js +12 -0
- package/dist/cli-bundle/main.js +25 -25
- 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 +25 -24
- 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.d.ts +2 -0
- 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.d.ts +5 -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.d.ts +2 -2
- 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.d.ts +2 -0
- package/dist/sdk/extension/managed-state.js +2 -2
- package/dist/sdk/extension/managed-update-status.d.ts +3 -0
- package/dist/sdk/extension/managed-update-status.js +2 -0
- 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.d.ts +2 -6
- package/dist/sdk/extension/source-resolution.js +1 -1
- package/dist/sdk/extension/static-inventory.js +1 -1
- package/dist/sdk/extension/update-check.d.ts +10 -0
- package/dist/sdk/extension/update-check.js +1 -1
- package/dist/sdk/extension-command-context.js +2 -1
- package/dist/sdk/extension-contracts.js +1 -1
- package/dist/sdk/extension.d.ts +4 -0
- 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.d.ts +2 -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/DEVELOPMENT_DEPENDENCY_SECURITY.md +36 -0
- package/docs/GET_READ_EVIDENCE.md +84 -0
- package/docs/OUTPUT_PROJECTION_CONTRACTS.md +23 -0
- package/docs/PR_REVIEW_LOOP.md +21 -4
- package/docs/README.md +3 -0
- package/docs/RELEASING.md +18 -0
- package/docs/SDK_CONFIGURATION_SAFETY.md +123 -0
- package/docs/generated/FLAG_LEXICON_BUDGETS.md +3 -3
- package/docs/generated/REFUSAL_CLOSURE_CENSUS.md +4 -3
- package/marketplace.json +2 -2
- package/package.json +3 -3
- 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-7O4NUJVO.js +0 -2
- 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-JCVMOSWQ.js +0 -2
- 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,5 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
`)}catch{}}function parseMode(raw){const normalized=(raw??"keyword").trim().toLowerCase();if(normalized==="keyword"){return"keyword"}if(normalized==="semantic"||normalized==="hybrid"){return normalized}throw new PmCliError("Reindex mode must be one of keyword|semantic|hybrid",EXIT_CODE.USAGE)}async function loadDocumentCandidates(pmRoot,itemFormat,typeToFolder,schema){const warnings=[];const candidates=await listAllDocumentCandidatesCached(pmRoot,itemFormat,typeToFolder,warnings,schema);return{candidates,warnings}}async function hydrateDocuments(pmRoot,candidates,schema,warnings,itemIds){const extensionFieldNames=collectRegisteredItemFieldNames(getActiveExtensionRegistrations());const hydrated=[];for(const candidate of candidates){if(itemIds&&!itemIds.has(candidate.metadata.id)){continue}if(typeof candidate.body==="string"){hydrated.push({metadata:candidate.metadata,body:candidate.body});continue}try{const raw=await fs.readFile(candidate.item_path,"utf8");const parsed=parseItemDocument(raw,{format:candidate.item_format,schema,extensionFieldNames,onWarning:warning=>warnings.push(warning)});hydrated.push({metadata:candidate.metadata,body:parsed.body})}catch{warnings.push(`item_list_item_read_failed:${path.relative(pmRoot,candidate.item_path)}`);hydrated.push({metadata:candidate.metadata,body:""})}}return hydrated}function buildKeywordRecord(document,mode,corpusFields){const item=document.metadata;return{id:item.id,mode,updated_at:item.updated_at,corpus:buildSearchCorpus(document,{fields:corpusFields})}}const toOptionalNonEmptyString=toNonEmptyStringOrUndefined;const _testOnly={shouldEmitReindexProgress,emitReindexProgress,parseMode,hydrateDocuments,buildKeywordRecord,resolveExtensionSearchEmbedding,resolveExtensionVectorAdapter,assertVector,executeExtensionEmbedding,resolveExtensionEmbeddingModel,resolveReindexEmbeddingIdentity,executeReindexEmbedding,collectLedgerOrphanIds,resetVectorStoreForReindex,pruneReindexOrphanVectors,upsertReindexVectors};function resolveExtensionSearchEmbedding(settings){const registrations=getActiveExtensionRegistrations();const providerName=toOptionalNonEmptyString(settings.search?.provider);if(!providerName){return null}const registration=resolveRegisteredSearchProvider(registrations,providerName);if(!registration){return null}const runtimeDefinition=registration.runtime_definition??registration.definition;const name=toOptionalNonEmptyString(runtimeDefinition.name)??toOptionalNonEmptyString(registration.definition.name);if(!name){return null}const embedBatch=runtimeDefinition.embedBatch;const embedBatchSnake=runtimeDefinition.embed_batch;const embed=runtimeDefinition.embed;const resolvedEmbedBatch=typeof embedBatch==="function"?embedBatch:typeof embedBatchSnake==="function"?embedBatchSnake:void 0;const resolvedEmbed=typeof embed==="function"?embed:void 0;if(!resolvedEmbedBatch&&!resolvedEmbed){return null}return{name,embedBatch:resolvedEmbedBatch,embed:resolvedEmbed}}function resolveExtensionVectorAdapter(settings){const registrations=getActiveExtensionRegistrations();const adapterName=toOptionalNonEmptyString(settings.vector_store?.adapter);if(!adapterName){return null}const registration=resolveRegisteredVectorStoreAdapter(registrations,adapterName);if(!registration){return null}const runtimeDefinition=registration.runtime_definition??registration.definition;const adapterDisplayName=toOptionalNonEmptyString(runtimeDefinition.name)??toOptionalNonEmptyString(registration.definition.name);if(!adapterDisplayName){return null}const upsert=runtimeDefinition.upsert;const deleteHandler=runtimeDefinition.delete;return{adapterName:adapterDisplayName,...typeof upsert==="function"?{upsert}:{},...typeof deleteHandler==="function"?{delete:deleteHandler}:{}}}function assertVector(value,context){if(!Array.isArray(value)||value.some(entry=>typeof entry!=="number"||!Number.isFinite(entry))){throw new PmCliError(`Invalid vector returned by ${context}`,EXIT_CODE.GENERIC_FAILURE)}return value}async function executeExtensionEmbedding(extensionEmbedding,settings,corpusInputs){const model=settings.search?.embedding_model?.trim()||"text-embedding-3-small";if(extensionEmbedding.embedBatch){const vectors2=await Promise.resolve(extensionEmbedding.embedBatch({inputs:corpusInputs,settings,model}));if(!Array.isArray(vectors2)){throw new PmCliError(`Extension search provider "${extensionEmbedding.name}" embedBatch must return an array of vectors`,EXIT_CODE.GENERIC_FAILURE)}return vectors2.map((vector,index)=>assertVector(vector,`extension search provider "${extensionEmbedding.name}" embedBatch output at index ${index}`))}if(!extensionEmbedding.embed){throw new PmCliError(`Extension search provider "${extensionEmbedding.name}" does not implement embed/embedBatch`,EXIT_CODE.GENERIC_FAILURE)}const vectors=[];for(const[index,input]of corpusInputs.entries()){const vector=await Promise.resolve(extensionEmbedding.embed({input,settings,model}));vectors.push(assertVector(vector,`extension search provider "${extensionEmbedding.name}" embed output at index ${index}`))}return vectors}function resolveExtensionEmbeddingModel(settings){return settings.search?.embedding_model?.trim()||"text-embedding-3-small"}function resolveReindexEmbeddingIdentity(settings,activeEmbeddingProvider,extensionEmbedding){const identity=extensionEmbedding?buildVectorizationEmbeddingIdentity(extensionEmbedding.name,resolveExtensionEmbeddingModel(settings)):activeEmbeddingProvider?buildVectorizationEmbeddingIdentity(activeEmbeddingProvider.name,activeEmbeddingProvider.model):null;if(!identity){throw new PmCliError(`No embedding identity available for semantic reindex mode`,EXIT_CODE.USAGE)}return identity}function collectLedgerOrphanIds(ledgerEntries,currentIds){return Object.keys(ledgerEntries).filter(id=>!currentIds.has(id)).sort((left,right)=>left.localeCompare(right))}async function executeReindexEmbedding(settings,requestedMode,activeEmbeddingProvider,extensionEmbedding,documents,semanticWarnings,semanticSummary,progressEnabled){const semanticProviderName=extensionEmbedding?.name??activeEmbeddingProvider?.name;const corpusCharacterLimit=resolveSemanticCorpusCharacterLimit(semanticProviderName,settings.search.embedding_corpus_max_characters).maxCharacters;const corpusFields=resolveSearchCorpusFields(settings);const corpusInputs=documents.map(document=>buildSemanticCorpusInput(document,{providerName:semanticProviderName,maxCharacters:corpusCharacterLimit,fields:corpusFields}));let vectors=[];let embeddingIdentity=null;if(extensionEmbedding){try{vectors=await executeExtensionEmbedding(extensionEmbedding,settings,corpusInputs);embeddingIdentity=buildVectorizationEmbeddingIdentity(extensionEmbedding.name,resolveExtensionEmbeddingModel(settings))}catch(error){if(!activeEmbeddingProvider){throw new PmCliError(`Extension search provider "${extensionEmbedding.name}" failed to generate embeddings: ${error instanceof Error?error.message:String(error)}`,EXIT_CODE.GENERIC_FAILURE)}semanticWarnings.push(`Extension search provider "${extensionEmbedding.name}" failed; falling back to built-in provider (${error instanceof Error?error.message:String(error)})`)}}if(vectors.length===0){if(!activeEmbeddingProvider){throw new PmCliError(`No embedding executor available for reindex mode '${requestedMode}'`,EXIT_CODE.USAGE)}const embeddingResult=await executeEmbeddingBatchesWithRetry(activeEmbeddingProvider,settings,corpusInputs,{onProgress:event=>{if(event.phase==="complete"){semanticSummary.batches_completed=event.batch_index}emitReindexProgress(progressEnabled,`embedding_batch_${event.phase} batch=${event.batch_index}/${event.batch_total} size=${event.batch_size} completed_inputs=${event.completed_inputs}/${event.total_inputs}`)}});semanticWarnings.push(...embeddingResult.warnings);semanticSummary.batching=embeddingResult.receipt;vectors=embeddingResult.vectors;embeddingIdentity=buildVectorizationEmbeddingIdentity(activeEmbeddingProvider.name,activeEmbeddingProvider.model)}emitReindexProgress(progressEnabled,`embedding_complete vectors=${vectors.length}`);if(vectors.length!==documents.length){throw new PmCliError(`Embedding output size mismatch (expected ${documents.length}, received ${vectors.length})`,EXIT_CODE.GENERIC_FAILURE)}if(!embeddingIdentity){throw new PmCliError(`No embedding identity available for reindex mode '${requestedMode}'`,EXIT_CODE.USAGE)}return{vectors,embeddingIdentity}}async function resetVectorStoreForReindex(activeVectorStore,extensionVectorAdapter,ledgerEntries,settings,semanticWarnings,vectorDimension){const knownIds=Object.keys(ledgerEntries);if(extensionVectorAdapter){if(knownIds.length>0&&extensionVectorAdapter.delete){try{await Promise.resolve(extensionVectorAdapter.delete({ids:knownIds.sort((left,right)=>left.localeCompare(right)),settings}))}catch(error){throw new PmCliError(`Extension vector adapter "${extensionVectorAdapter.adapterName}" failed to delete vectors during reindex reset: ${error instanceof Error?error.message:String(error)}`,EXIT_CODE.GENERIC_FAILURE)}}else if(knownIds.length>0){semanticWarnings.push(`search_semantic_reindex_reset_skipped:adapter=${extensionVectorAdapter.adapterName}:known_ids=${knownIds.length}`)}if(!activeVectorStore){return}}if(activeVectorStore){await executeVectorReset(activeVectorStore,knownIds,{},vectorDimension)}}async function pruneReindexOrphanVectors(activeVectorStore,extensionVectorAdapter,orphanIds,settings,semanticWarnings){if(orphanIds.length===0){return}if(extensionVectorAdapter){if(extensionVectorAdapter.delete){try{await Promise.resolve(extensionVectorAdapter.delete({ids:orphanIds,settings}))}catch(error){throw new PmCliError(`Extension vector adapter "${extensionVectorAdapter.adapterName}" failed to delete orphan vectors during reindex: ${error instanceof Error?error.message:String(error)}`,EXIT_CODE.GENERIC_FAILURE)}}else{semanticWarnings.push(`search_semantic_reindex_orphan_prune_skipped:adapter=${extensionVectorAdapter.adapterName}:count=${orphanIds.length}`)}if(!activeVectorStore){return}}if(activeVectorStore){await executeVectorDelete(activeVectorStore,orphanIds)}}function createReindexSemanticSummary(mode){return{enabled:mode!=="keyword",stale_items:0,unchanged_items:0,embedded_items:0,vector_upserted:0,batches_completed:0}}function buildReindexManifest(mode,generatedAt,metadataDocuments){return{version:1,mode,generated_at:generatedAt,total_items:metadataDocuments.length,items:metadataDocuments.map(document=>({id:document.metadata.id,type:document.metadata.type,status:document.metadata.status,priority:document.metadata.priority,updated_at:document.metadata.updated_at}))}}function assertSemanticRuntimeAvailable(params){if(params.requestedMode==="keyword"){return{activeEmbeddingProvider:null,activeVectorStore:null}}const providerResolution=resolveEmbeddingProviders(params.settings);if(!providerResolution.active&&!params.extensionEmbedding){throw new PmCliError(`Reindex mode '${params.requestedMode}' requires a configured embedding provider in settings.providers.openai/settings.providers.ollama or an extension provider selected by settings.search.provider`,EXIT_CODE.USAGE)}const vectorResolution=resolveVectorStores(params.settings,params.pmRoot);if(!vectorResolution.active&&!params.extensionVectorAdapter){throw new PmCliError(`Reindex mode '${params.requestedMode}' requires a configured vector store in settings.vector_store.qdrant/settings.vector_store.lancedb or an extension adapter selected by settings.vector_store.adapter`,EXIT_CODE.USAGE)}return{activeEmbeddingProvider:providerResolution.active,activeVectorStore:vectorResolution.active}}async function loadReindexCorpus(params){const typeRegistry=resolveItemTypeRegistry(params.settings,getActiveExtensionRegistrations());const loadedCandidates=await loadDocumentCandidates(params.pmRoot,params.settings.item_format,typeRegistry.type_to_folder,params.settings.schema);return{documentCandidates:loadedCandidates.candidates,warnings:[...loadedCandidates.warnings],metadataDocuments:loadedCandidates.candidates.map(candidate=>({metadata:candidate.metadata,body:typeof candidate.body==="string"?candidate.body:""}))}}async function appendKeywordLedgerWarnings(params){const ledger=await readVectorizationStatusLedger(params.pmRoot);params.reindexWarnings.push(...ledger.warnings);if(params.forceFullSemantic){params.reindexWarnings.push("search_semantic_reindex_full_ignored:mode_keyword")}if(!ledger.embedding){return}const currentEmbeddingIdentity=(()=>{try{return resolveReindexEmbeddingIdentity(params.settings,resolveEmbeddingProviders(params.settings).active,params.extensionEmbedding)}catch{return null}})();if(currentEmbeddingIdentity&&hasVectorizationEmbeddingIdentityChanged(ledger.embedding,currentEmbeddingIdentity)){params.reindexWarnings.push("search_semantic_reindex_requires_rebuild:embedding_identity_changed");params.reindexWarnings.push(EMBEDDING_MIGRATION_REINDEX_HINT)}}async function planSemanticReindex(params){const ledger=await readVectorizationStatusLedger(params.pmRoot);params.semanticWarnings.push(...ledger.warnings);const embeddingIdentity=resolveReindexEmbeddingIdentity(params.settings,params.activeEmbeddingProvider,params.extensionEmbedding);const currentIds=new Set(params.metadataDocuments.map(document=>document.metadata.id));const orphanIds=collectLedgerOrphanIds(ledger.entries,currentIds);const resetRequired=hasVectorizationEmbeddingIdentityChanged(ledger.embedding,embeddingIdentity);if(params.forceFullSemantic&&!resetRequired){params.semanticWarnings.push("search_semantic_reindex_full_rebuild_forced")}const staleSourceDocuments=params.forceFullSemantic||resetRequired?params.metadataDocuments:params.metadataDocuments.filter(document=>ledger.entries[document.metadata.id]!==document.metadata.updated_at);const staleIds=new Set(staleSourceDocuments.map(document=>document.metadata.id));const staleDocuments=staleIds.size>0?await hydrateDocuments(params.pmRoot,params.documentCandidates,params.settings.schema,params.reindexWarnings,staleIds):[];return{ledgerEntries:ledger.entries,ledgerEmbedding:ledger.embedding,orphanIds,resetRequired,staleDocuments,freshDocuments:params.metadataDocuments.length-staleDocuments.length}}async function rerunSemanticEmbeddingAfterDimensionChange(params){const staleIds=new Set(params.metadataDocuments.map(document=>document.metadata.id));const staleDocuments=await hydrateDocuments(params.pmRoot,params.documentCandidates,params.settings.schema,params.reindexWarnings,staleIds);params.semanticSummary.stale_items=staleDocuments.length;params.semanticSummary.unchanged_items=0;emitReindexProgress(params.progressEnabled,`embedding_dimension_changed reset_items=${staleDocuments.length}`);const embeddingResult=await executeReindexEmbedding(params.settings,params.requestedMode,params.activeEmbeddingProvider,params.extensionEmbedding,staleDocuments,params.semanticWarnings,params.semanticSummary,params.progressEnabled);return{...embeddingResult,staleDocuments,vectorDimension:inferConsistentVectorDimension(embeddingResult.vectors,"Reindex embeddings")}}async function resolveSemanticEmbeddingForUpsert(params){const embeddingResult=await executeReindexEmbedding(params.settings,params.requestedMode,params.activeEmbeddingProvider,params.extensionEmbedding,params.staleDocuments,params.semanticWarnings,params.semanticSummary,params.progressEnabled);let vectors=embeddingResult.vectors;let actualEmbeddingIdentity=embeddingResult.embeddingIdentity;let vectorDimension=inferConsistentVectorDimension(vectors,"Reindex embeddings");const dimensionChanged=!params.resetRequired&&(hasVectorizationEmbeddingIdentityChanged(params.ledgerEmbedding,actualEmbeddingIdentity)||hasVectorizationVectorDimensionChanged(params.ledgerEmbedding,vectorDimension));if(!dimensionChanged){return{vectors,embeddingIdentity:actualEmbeddingIdentity,staleDocuments:params.staleDocuments,vectorDimension,resetRequired:params.resetRequired}}const rerun=await rerunSemanticEmbeddingAfterDimensionChange(params);vectors=rerun.vectors;actualEmbeddingIdentity=rerun.embeddingIdentity;vectorDimension=rerun.vectorDimension;return{vectors,embeddingIdentity:actualEmbeddingIdentity,staleDocuments:rerun.staleDocuments,vectorDimension,resetRequired:true}}async function upsertReindexVectors(params){if(params.extensionVectorAdapter){try{const adapterName=params.extensionVectorAdapter.adapterName;emitReindexProgress(params.progressEnabled,`vector_upsert_start adapter=${adapterName} points=${params.points.length}`);if(typeof params.extensionVectorAdapter.upsert!=="function"){throw new PmCliError(`Extension vector adapter "${adapterName}" does not support upserting vectors.`,EXIT_CODE.USAGE)}await Promise.resolve(params.extensionVectorAdapter.upsert({points:params.points,settings:params.settings}));params.semanticSummary.vector_upserted=params.points.length;emitReindexProgress(params.progressEnabled,`vector_upsert_complete adapter=${adapterName}`);return}catch(error){if(error instanceof PmCliError){throw error}if(!params.activeVectorStore){throw new PmCliError(`Extension vector adapter "${params.extensionVectorAdapter.adapterName}" failed to upsert vectors: ${error instanceof Error?error.message:String(error)}`,EXIT_CODE.GENERIC_FAILURE)}params.semanticWarnings.push(`Extension vector adapter "${params.extensionVectorAdapter.adapterName}" failed; falling back to built-in vector store (${error instanceof Error?error.message:String(error)})`);emitReindexProgress(params.progressEnabled,"vector_upsert_fallback built_in_store")}}if(params.activeVectorStore){emitReindexProgress(params.progressEnabled,`vector_upsert_start adapter=${params.activeVectorStore.name} points=${params.points.length}`);await executeVectorUpsert(params.activeVectorStore,params.points);params.semanticSummary.vector_upserted=params.points.length;emitReindexProgress(params.progressEnabled,`vector_upsert_complete adapter=${params.activeVectorStore.name}`);return}throw new PmCliError(`No vector upsert executor available for reindex mode '${params.requestedMode}'`,EXIT_CODE.USAGE)}function buildReindexVectorPoints(staleDocuments,vectors){return staleDocuments.map((document,index)=>({id:document.metadata.id,vector:assertVector(vectors[index],`reindex embeddings output at index ${index}`),payload:{id:document.metadata.id,type:document.metadata.type,status:document.metadata.status,priority:document.metadata.priority,updated_at:document.metadata.updated_at}}))}async function executeSemanticVectorRefresh(params){emitReindexProgress(params.progressEnabled,`embedding_start items=${params.plan.staleDocuments.length} unchanged_items=${params.plan.freshDocuments}`);const embedding=await resolveSemanticEmbeddingForUpsert({pmRoot:params.pmRoot,settings:params.settings,requestedMode:params.requestedMode,activeEmbeddingProvider:params.activeEmbeddingProvider,extensionEmbedding:params.extensionEmbedding,documentCandidates:params.documentCandidates,metadataDocuments:params.metadataDocuments,staleDocuments:params.plan.staleDocuments,ledgerEmbedding:params.plan.ledgerEmbedding,resetRequired:params.plan.resetRequired,semanticWarnings:params.semanticWarnings,reindexWarnings:params.reindexWarnings,semanticSummary:params.semanticSummary,progressEnabled:params.progressEnabled});if(embedding.resetRequired){emitReindexProgress(params.progressEnabled,"vector_reset_start");await resetVectorStoreForReindex(params.activeVectorStore,params.extensionVectorAdapter,params.plan.ledgerEntries,params.settings,params.semanticWarnings,params.plan.ledgerEmbedding?embedding.vectorDimension:void 0);emitReindexProgress(params.progressEnabled,"vector_reset_complete")}else{await pruneReindexOrphanVectors(params.activeVectorStore,params.extensionVectorAdapter,params.plan.orphanIds,params.settings,params.semanticWarnings)}const points=buildReindexVectorPoints(embedding.staleDocuments,embedding.vectors);params.semanticSummary.embedded_items=embedding.vectors.length;await upsertReindexVectors({requestedMode:params.requestedMode,activeVectorStore:params.activeVectorStore,extensionVectorAdapter:params.extensionVectorAdapter,settings:params.settings,points,semanticWarnings:params.semanticWarnings,semanticSummary:params.semanticSummary,progressEnabled:params.progressEnabled});return{staleDocuments:embedding.staleDocuments,embeddingMetadata:buildVectorizationEmbeddingMetadata(embedding.embeddingIdentity,embedding.vectorDimension)}}async function runSemanticReindex(params){const plan=await planSemanticReindex(params);params.semanticSummary.stale_items=plan.staleDocuments.length;params.semanticSummary.unchanged_items=plan.freshDocuments;const vectorizationLedgerEntries=Object.fromEntries(params.metadataDocuments.map(document=>[document.metadata.id,document.metadata.updated_at]));emitReindexProgress(params.progressEnabled,`semantic_stale_items stale=${plan.staleDocuments.length} total=${params.metadataDocuments.length} unchanged=${plan.freshDocuments} full=${params.forceFullSemantic||plan.resetRequired}`);if(plan.staleDocuments.length===0){emitReindexProgress(params.progressEnabled,`embedding_skipped unchanged_items=${plan.freshDocuments}`);params.semanticWarnings.push(`search_semantic_reindex_skipped_unchanged:count=${plan.freshDocuments}`);await pruneReindexOrphanVectors(params.activeVectorStore,params.extensionVectorAdapter,plan.orphanIds,params.settings,params.semanticWarnings);return{documentsForKeywordArtifacts:params.documentsForKeywordArtifacts,vectorizationLedgerEntries,vectorizationEmbeddingMetadata:plan.ledgerEmbedding}}const refresh=await executeSemanticVectorRefresh({...params,plan});if(plan.freshDocuments>0){params.semanticWarnings.push(`search_semantic_reindex_skipped_unchanged:count=${plan.freshDocuments}`)}const staleDocumentsById=new Map(refresh.staleDocuments.map(document=>[document.metadata.id,document]));return{documentsForKeywordArtifacts:params.metadataDocuments.map(document=>staleDocumentsById.get(document.metadata.id)??document),vectorizationLedgerEntries,vectorizationEmbeddingMetadata:refresh.embeddingMetadata}}async function writeReindexArtifacts(params){const manifestPath=path.join(params.pmRoot,MANIFEST_PATH);const embeddingsPath=path.join(params.pmRoot,EMBEDDINGS_PATH);const keywordCorpusFields=resolveSearchCorpusFields(params.settings);const embeddingsLines=params.documentsForKeywordArtifacts.map(document=>JSON.stringify(buildKeywordRecord(document,params.mode,keywordCorpusFields))).join("\n");emitReindexProgress(params.progressEnabled,"writing keyword artifacts");await writeFileAtomic(manifestPath,`${JSON.stringify(params.manifest,null,2)}
|
|
3
|
-
`);await writeFileAtomic(
|
|
4
|
-
`)
|
|
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]="f02db25d-bedb-5411-b50a-de0fea51a117")}catch{}})();import{assertInitializedTracker}from"../environment/tracker-preflight.js";import fs from"node:fs/promises";import path from"node:path";import{toNonEmptyStringOrUndefined,getActiveExtensionRegistrations,runActiveOnIndexHooks,runActiveOnWriteHooks,collectRegisteredItemFieldNames,resolveRegisteredSearchProvider,resolveRegisteredVectorStoreAdapter,writeFileAtomic,resolveItemTypeRegistry,parseItemDocument,acquireLock,buildSearchCorpus,buildSemanticCorpusInput,resolveSearchCorpusFields,resolveSemanticCorpusCharacterLimit,executeEmbeddingBatchesWithRetry,readVectorizationStatusLedger,writeVectorizationStatusLedger,REINDEX_LOCK_ID,resolveEmbeddingProviders,resolveSettingsWithSemanticRuntimeDefaults,executeVectorDelete,executeVectorReset,executeVectorUpsert,resolveVectorStores,buildVectorizationEmbeddingIdentity,buildVectorizationEmbeddingMetadata,hasVectorizationEmbeddingIdentityChanged,hasVectorizationVectorDimensionChanged,inferConsistentVectorDimension,EXIT_CODE,PmCliError,nowIso,listAllDocumentCandidatesCached,resolvePmRoot,readSettings,resolveAuthor}from"../runtime-primitives.js";const MANIFEST_PATH="index/manifest.json",EMBEDDINGS_PATH="search/embeddings.jsonl",EMBEDDING_MIGRATION_REINDEX_HINT="Provider or model has changed since last index. Run pm reindex --mode semantic to rebuild.";function shouldEmitReindexProgress(options){return options.progress===!0||process.stderr.isTTY===!0}function emitReindexProgress(enabled,message){if(enabled)try{process.stderr.write(`[pm reindex] ${message}
|
|
2
|
+
`)}catch{}}function parseMode(raw){const normalized=(raw??"keyword").trim().toLowerCase();if(normalized==="keyword")return"keyword";if(normalized==="semantic"||normalized==="hybrid")return normalized;throw new PmCliError("Reindex mode must be one of keyword|semantic|hybrid",EXIT_CODE.USAGE)}async function loadDocumentCandidates(pmRoot,itemFormat,typeToFolder,schema){const warnings=[];return{candidates:await listAllDocumentCandidatesCached(pmRoot,itemFormat,typeToFolder,warnings,schema),warnings}}async function hydrateDocuments(pmRoot,candidates,schema,warnings,itemIds){const extensionFieldNames=collectRegisteredItemFieldNames(getActiveExtensionRegistrations()),hydrated=[];for(const candidate of candidates)if(!(itemIds&&!itemIds.has(candidate.metadata.id))){if(typeof candidate.body=="string"){hydrated.push({metadata:candidate.metadata,body:candidate.body});continue}try{const raw=await fs.readFile(candidate.item_path,"utf8"),parsed=parseItemDocument(raw,{format:candidate.item_format,schema,extensionFieldNames,onWarning:warning=>warnings.push(warning)});hydrated.push({metadata:candidate.metadata,body:parsed.body})}catch{warnings.push(`item_list_item_read_failed:${path.relative(pmRoot,candidate.item_path)}`),hydrated.push({metadata:candidate.metadata,body:""})}}return hydrated}function buildKeywordRecord(document,mode,corpusFields){const item=document.metadata;return{id:item.id,mode,updated_at:item.updated_at,corpus:buildSearchCorpus(document,{fields:corpusFields})}}const toOptionalNonEmptyString=toNonEmptyStringOrUndefined,_testOnly={shouldEmitReindexProgress,emitReindexProgress,parseMode,hydrateDocuments,buildKeywordRecord,resolveExtensionSearchEmbedding,resolveExtensionVectorAdapter,assertVector,executeExtensionEmbedding,resolveExtensionEmbeddingModel,resolveReindexEmbeddingIdentity,executeReindexEmbedding,collectLedgerOrphanIds,resetVectorStoreForReindex,pruneReindexOrphanVectors,upsertReindexVectors};function resolveExtensionSearchEmbedding(settings){const registrations=getActiveExtensionRegistrations(),providerName=toOptionalNonEmptyString(settings.search?.provider);if(!providerName)return null;const registration=resolveRegisteredSearchProvider(registrations,providerName);if(!registration)return null;const runtimeDefinition=registration.runtime_definition??registration.definition,name=toOptionalNonEmptyString(runtimeDefinition.name)??toOptionalNonEmptyString(registration.definition.name);if(!name)return null;const embedBatch=runtimeDefinition.embedBatch,embedBatchSnake=runtimeDefinition.embed_batch,embed=runtimeDefinition.embed,resolvedEmbedBatch=typeof embedBatch=="function"?embedBatch:typeof embedBatchSnake=="function"?embedBatchSnake:void 0,resolvedEmbed=typeof embed=="function"?embed:void 0;return!resolvedEmbedBatch&&!resolvedEmbed?null:{name,embedBatch:resolvedEmbedBatch,embed:resolvedEmbed}}function resolveExtensionVectorAdapter(settings){const registrations=getActiveExtensionRegistrations(),adapterName=toOptionalNonEmptyString(settings.vector_store?.adapter);if(!adapterName)return null;const registration=resolveRegisteredVectorStoreAdapter(registrations,adapterName);if(!registration)return null;const runtimeDefinition=registration.runtime_definition??registration.definition,adapterDisplayName=toOptionalNonEmptyString(runtimeDefinition.name)??toOptionalNonEmptyString(registration.definition.name);if(!adapterDisplayName)return null;const upsert=runtimeDefinition.upsert,deleteHandler=runtimeDefinition.delete;return{adapterName:adapterDisplayName,...typeof upsert=="function"?{upsert}:{},...typeof deleteHandler=="function"?{delete:deleteHandler}:{}}}function assertVector(value,context){if(!Array.isArray(value)||value.some(entry=>typeof entry!="number"||!Number.isFinite(entry)))throw new PmCliError(`Invalid vector returned by ${context}`,EXIT_CODE.GENERIC_FAILURE);return value}async function executeExtensionEmbedding(extensionEmbedding,settings,corpusInputs){const model=settings.search?.embedding_model?.trim()||"text-embedding-3-small";if(extensionEmbedding.embedBatch){const vectors2=await Promise.resolve(extensionEmbedding.embedBatch({inputs:corpusInputs,settings,model}));if(!Array.isArray(vectors2))throw new PmCliError(`Extension search provider "${extensionEmbedding.name}" embedBatch must return an array of vectors`,EXIT_CODE.GENERIC_FAILURE);return vectors2.map((vector,index)=>assertVector(vector,`extension search provider "${extensionEmbedding.name}" embedBatch output at index ${index}`))}if(!extensionEmbedding.embed)throw new PmCliError(`Extension search provider "${extensionEmbedding.name}" does not implement embed/embedBatch`,EXIT_CODE.GENERIC_FAILURE);const vectors=[];for(const[index,input]of corpusInputs.entries()){const vector=await Promise.resolve(extensionEmbedding.embed({input,settings,model}));vectors.push(assertVector(vector,`extension search provider "${extensionEmbedding.name}" embed output at index ${index}`))}return vectors}function resolveExtensionEmbeddingModel(settings){return settings.search?.embedding_model?.trim()||"text-embedding-3-small"}function resolveReindexEmbeddingIdentity(settings,activeEmbeddingProvider,extensionEmbedding){const identity=extensionEmbedding?buildVectorizationEmbeddingIdentity(extensionEmbedding.name,resolveExtensionEmbeddingModel(settings)):activeEmbeddingProvider?buildVectorizationEmbeddingIdentity(activeEmbeddingProvider.name,activeEmbeddingProvider.model):null;if(!identity)throw new PmCliError("No embedding identity available for semantic reindex mode",EXIT_CODE.USAGE);return identity}function collectLedgerOrphanIds(ledgerEntries,currentIds){return Object.keys(ledgerEntries).filter(id=>!currentIds.has(id)).sort((left,right)=>left.localeCompare(right))}async function executeReindexEmbedding(settings,requestedMode,activeEmbeddingProvider,extensionEmbedding,documents,semanticWarnings,semanticSummary,progressEnabled){const semanticProviderName=extensionEmbedding?.name??activeEmbeddingProvider?.name,corpusCharacterLimit=resolveSemanticCorpusCharacterLimit(semanticProviderName,settings.search.embedding_corpus_max_characters).maxCharacters,corpusFields=resolveSearchCorpusFields(settings),corpusInputs=documents.map(document=>buildSemanticCorpusInput(document,{providerName:semanticProviderName,maxCharacters:corpusCharacterLimit,fields:corpusFields}));let vectors=[],embeddingIdentity=null;if(extensionEmbedding)try{vectors=await executeExtensionEmbedding(extensionEmbedding,settings,corpusInputs),embeddingIdentity=buildVectorizationEmbeddingIdentity(extensionEmbedding.name,resolveExtensionEmbeddingModel(settings))}catch(error){if(!activeEmbeddingProvider)throw new PmCliError(`Extension search provider "${extensionEmbedding.name}" failed to generate embeddings: ${error instanceof Error?error.message:String(error)}`,EXIT_CODE.GENERIC_FAILURE);semanticWarnings.push(`Extension search provider "${extensionEmbedding.name}" failed; falling back to built-in provider (${error instanceof Error?error.message:String(error)})`)}if(vectors.length===0){if(!activeEmbeddingProvider)throw new PmCliError(`No embedding executor available for reindex mode '${requestedMode}'`,EXIT_CODE.USAGE);const embeddingResult=await executeEmbeddingBatchesWithRetry(activeEmbeddingProvider,settings,corpusInputs,{onProgress:event=>{event.phase==="complete"&&(semanticSummary.batches_completed=event.batch_index),emitReindexProgress(progressEnabled,`embedding_batch_${event.phase} batch=${event.batch_index}/${event.batch_total} size=${event.batch_size} completed_inputs=${event.completed_inputs}/${event.total_inputs}`)}});semanticWarnings.push(...embeddingResult.warnings),semanticSummary.batching=embeddingResult.receipt,vectors=embeddingResult.vectors,embeddingIdentity=buildVectorizationEmbeddingIdentity(activeEmbeddingProvider.name,activeEmbeddingProvider.model)}if(emitReindexProgress(progressEnabled,`embedding_complete vectors=${vectors.length}`),vectors.length!==documents.length)throw new PmCliError(`Embedding output size mismatch (expected ${documents.length}, received ${vectors.length})`,EXIT_CODE.GENERIC_FAILURE);if(!embeddingIdentity)throw new PmCliError(`No embedding identity available for reindex mode '${requestedMode}'`,EXIT_CODE.USAGE);return{vectors,embeddingIdentity}}async function resetVectorStoreForReindex(activeVectorStore,extensionVectorAdapter,ledgerEntries,settings,semanticWarnings,vectorDimension){const knownIds=Object.keys(ledgerEntries);if(extensionVectorAdapter){if(knownIds.length>0&&extensionVectorAdapter.delete)try{await Promise.resolve(extensionVectorAdapter.delete({ids:knownIds.sort((left,right)=>left.localeCompare(right)),settings}))}catch(error){throw new PmCliError(`Extension vector adapter "${extensionVectorAdapter.adapterName}" failed to delete vectors during reindex reset: ${error instanceof Error?error.message:String(error)}`,EXIT_CODE.GENERIC_FAILURE)}else knownIds.length>0&&semanticWarnings.push(`search_semantic_reindex_reset_skipped:adapter=${extensionVectorAdapter.adapterName}:known_ids=${knownIds.length}`);if(!activeVectorStore)return}activeVectorStore&&await executeVectorReset(activeVectorStore,knownIds,{},vectorDimension)}async function pruneReindexOrphanVectors(activeVectorStore,extensionVectorAdapter,orphanIds,settings,semanticWarnings){if(orphanIds.length!==0){if(extensionVectorAdapter){if(extensionVectorAdapter.delete)try{await Promise.resolve(extensionVectorAdapter.delete({ids:orphanIds,settings}))}catch(error){throw new PmCliError(`Extension vector adapter "${extensionVectorAdapter.adapterName}" failed to delete orphan vectors during reindex: ${error instanceof Error?error.message:String(error)}`,EXIT_CODE.GENERIC_FAILURE)}else semanticWarnings.push(`search_semantic_reindex_orphan_prune_skipped:adapter=${extensionVectorAdapter.adapterName}:count=${orphanIds.length}`);if(!activeVectorStore)return}activeVectorStore&&await executeVectorDelete(activeVectorStore,orphanIds)}}function createReindexSemanticSummary(mode){return{enabled:mode!=="keyword",stale_items:0,unchanged_items:0,embedded_items:0,vector_upserted:0,batches_completed:0}}function buildReindexManifest(mode,generatedAt,metadataDocuments){return{version:1,mode,generated_at:generatedAt,total_items:metadataDocuments.length,items:metadataDocuments.map(document=>({id:document.metadata.id,type:document.metadata.type,status:document.metadata.status,priority:document.metadata.priority,updated_at:document.metadata.updated_at}))}}function assertSemanticRuntimeAvailable(params){if(params.requestedMode==="keyword")return{activeEmbeddingProvider:null,activeVectorStore:null};const providerResolution=resolveEmbeddingProviders(params.settings);if(!providerResolution.active&&!params.extensionEmbedding)throw new PmCliError(`Reindex mode '${params.requestedMode}' requires a configured embedding provider in settings.providers.openai/settings.providers.ollama or an extension provider selected by settings.search.provider`,EXIT_CODE.USAGE);const vectorResolution=resolveVectorStores(params.settings,params.pmRoot);if(!vectorResolution.active&&!params.extensionVectorAdapter)throw new PmCliError(`Reindex mode '${params.requestedMode}' requires a configured vector store in settings.vector_store.qdrant/settings.vector_store.lancedb or an extension adapter selected by settings.vector_store.adapter`,EXIT_CODE.USAGE);return{activeEmbeddingProvider:providerResolution.active,activeVectorStore:vectorResolution.active}}async function loadReindexCorpus(params){const typeRegistry=resolveItemTypeRegistry(params.settings,getActiveExtensionRegistrations()),loadedCandidates=await loadDocumentCandidates(params.pmRoot,params.settings.item_format,typeRegistry.type_to_folder,params.settings.schema);return{documentCandidates:loadedCandidates.candidates,warnings:[...loadedCandidates.warnings],metadataDocuments:loadedCandidates.candidates.map(candidate=>({metadata:candidate.metadata,body:typeof candidate.body=="string"?candidate.body:""}))}}async function appendKeywordLedgerWarnings(params){const ledger=await readVectorizationStatusLedger(params.pmRoot);if(params.reindexWarnings.push(...ledger.warnings),params.forceFullSemantic&¶ms.reindexWarnings.push("search_semantic_reindex_full_ignored:mode_keyword"),!ledger.embedding)return;const currentEmbeddingIdentity=(()=>{try{return resolveReindexEmbeddingIdentity(params.settings,resolveEmbeddingProviders(params.settings).active,params.extensionEmbedding)}catch{return null}})();currentEmbeddingIdentity&&hasVectorizationEmbeddingIdentityChanged(ledger.embedding,currentEmbeddingIdentity)&&(params.reindexWarnings.push("search_semantic_reindex_requires_rebuild:embedding_identity_changed"),params.reindexWarnings.push(EMBEDDING_MIGRATION_REINDEX_HINT))}async function planSemanticReindex(params){const ledger=await readVectorizationStatusLedger(params.pmRoot);params.semanticWarnings.push(...ledger.warnings);const embeddingIdentity=resolveReindexEmbeddingIdentity(params.settings,params.activeEmbeddingProvider,params.extensionEmbedding),currentIds=new Set(params.metadataDocuments.map(document=>document.metadata.id)),orphanIds=collectLedgerOrphanIds(ledger.entries,currentIds),resetRequired=hasVectorizationEmbeddingIdentityChanged(ledger.embedding,embeddingIdentity);params.forceFullSemantic&&!resetRequired&¶ms.semanticWarnings.push("search_semantic_reindex_full_rebuild_forced");const staleSourceDocuments=params.forceFullSemantic||resetRequired?params.metadataDocuments:params.metadataDocuments.filter(document=>ledger.entries[document.metadata.id]!==document.metadata.updated_at),staleIds=new Set(staleSourceDocuments.map(document=>document.metadata.id)),staleDocuments=staleIds.size>0?await hydrateDocuments(params.pmRoot,params.documentCandidates,params.settings.schema,params.reindexWarnings,staleIds):[];return{ledgerEntries:ledger.entries,ledgerEmbedding:ledger.embedding,orphanIds,resetRequired,staleDocuments,freshDocuments:params.metadataDocuments.length-staleDocuments.length}}async function rerunSemanticEmbeddingAfterDimensionChange(params){const staleIds=new Set(params.metadataDocuments.map(document=>document.metadata.id)),staleDocuments=await hydrateDocuments(params.pmRoot,params.documentCandidates,params.settings.schema,params.reindexWarnings,staleIds);params.semanticSummary.stale_items=staleDocuments.length,params.semanticSummary.unchanged_items=0,emitReindexProgress(params.progressEnabled,`embedding_dimension_changed reset_items=${staleDocuments.length}`);const embeddingResult=await executeReindexEmbedding(params.settings,params.requestedMode,params.activeEmbeddingProvider,params.extensionEmbedding,staleDocuments,params.semanticWarnings,params.semanticSummary,params.progressEnabled);return{...embeddingResult,staleDocuments,vectorDimension:inferConsistentVectorDimension(embeddingResult.vectors,"Reindex embeddings")}}async function resolveSemanticEmbeddingForUpsert(params){const embeddingResult=await executeReindexEmbedding(params.settings,params.requestedMode,params.activeEmbeddingProvider,params.extensionEmbedding,params.staleDocuments,params.semanticWarnings,params.semanticSummary,params.progressEnabled);let vectors=embeddingResult.vectors,actualEmbeddingIdentity=embeddingResult.embeddingIdentity,vectorDimension=inferConsistentVectorDimension(vectors,"Reindex embeddings");if(!(!params.resetRequired&&(hasVectorizationEmbeddingIdentityChanged(params.ledgerEmbedding,actualEmbeddingIdentity)||hasVectorizationVectorDimensionChanged(params.ledgerEmbedding,vectorDimension))))return{vectors,embeddingIdentity:actualEmbeddingIdentity,staleDocuments:params.staleDocuments,vectorDimension,resetRequired:params.resetRequired};const rerun=await rerunSemanticEmbeddingAfterDimensionChange(params);return vectors=rerun.vectors,actualEmbeddingIdentity=rerun.embeddingIdentity,vectorDimension=rerun.vectorDimension,{vectors,embeddingIdentity:actualEmbeddingIdentity,staleDocuments:rerun.staleDocuments,vectorDimension,resetRequired:!0}}async function upsertReindexVectors(params){if(params.extensionVectorAdapter)try{const adapterName=params.extensionVectorAdapter.adapterName;if(emitReindexProgress(params.progressEnabled,`vector_upsert_start adapter=${adapterName} points=${params.points.length}`),typeof params.extensionVectorAdapter.upsert!="function")throw new PmCliError(`Extension vector adapter "${adapterName}" does not support upserting vectors.`,EXIT_CODE.USAGE);await Promise.resolve(params.extensionVectorAdapter.upsert({points:params.points,settings:params.settings})),params.semanticSummary.vector_upserted=params.points.length,emitReindexProgress(params.progressEnabled,`vector_upsert_complete adapter=${adapterName}`);return}catch(error){if(error instanceof PmCliError)throw error;if(!params.activeVectorStore)throw new PmCliError(`Extension vector adapter "${params.extensionVectorAdapter.adapterName}" failed to upsert vectors: ${error instanceof Error?error.message:String(error)}`,EXIT_CODE.GENERIC_FAILURE);params.semanticWarnings.push(`Extension vector adapter "${params.extensionVectorAdapter.adapterName}" failed; falling back to built-in vector store (${error instanceof Error?error.message:String(error)})`),emitReindexProgress(params.progressEnabled,"vector_upsert_fallback built_in_store")}if(params.activeVectorStore){emitReindexProgress(params.progressEnabled,`vector_upsert_start adapter=${params.activeVectorStore.name} points=${params.points.length}`),await executeVectorUpsert(params.activeVectorStore,params.points),params.semanticSummary.vector_upserted=params.points.length,emitReindexProgress(params.progressEnabled,`vector_upsert_complete adapter=${params.activeVectorStore.name}`);return}throw new PmCliError(`No vector upsert executor available for reindex mode '${params.requestedMode}'`,EXIT_CODE.USAGE)}function buildReindexVectorPoints(staleDocuments,vectors){return staleDocuments.map((document,index)=>({id:document.metadata.id,vector:assertVector(vectors[index],`reindex embeddings output at index ${index}`),payload:{id:document.metadata.id,type:document.metadata.type,status:document.metadata.status,priority:document.metadata.priority,updated_at:document.metadata.updated_at}}))}async function executeSemanticVectorRefresh(params){emitReindexProgress(params.progressEnabled,`embedding_start items=${params.plan.staleDocuments.length} unchanged_items=${params.plan.freshDocuments}`);const embedding=await resolveSemanticEmbeddingForUpsert({pmRoot:params.pmRoot,settings:params.settings,requestedMode:params.requestedMode,activeEmbeddingProvider:params.activeEmbeddingProvider,extensionEmbedding:params.extensionEmbedding,documentCandidates:params.documentCandidates,metadataDocuments:params.metadataDocuments,staleDocuments:params.plan.staleDocuments,ledgerEmbedding:params.plan.ledgerEmbedding,resetRequired:params.plan.resetRequired,semanticWarnings:params.semanticWarnings,reindexWarnings:params.reindexWarnings,semanticSummary:params.semanticSummary,progressEnabled:params.progressEnabled});embedding.resetRequired?(emitReindexProgress(params.progressEnabled,"vector_reset_start"),await resetVectorStoreForReindex(params.activeVectorStore,params.extensionVectorAdapter,params.plan.ledgerEntries,params.settings,params.semanticWarnings,params.plan.ledgerEmbedding?embedding.vectorDimension:void 0),emitReindexProgress(params.progressEnabled,"vector_reset_complete")):await pruneReindexOrphanVectors(params.activeVectorStore,params.extensionVectorAdapter,params.plan.orphanIds,params.settings,params.semanticWarnings);const points=buildReindexVectorPoints(embedding.staleDocuments,embedding.vectors);return params.semanticSummary.embedded_items=embedding.vectors.length,await upsertReindexVectors({requestedMode:params.requestedMode,activeVectorStore:params.activeVectorStore,extensionVectorAdapter:params.extensionVectorAdapter,settings:params.settings,points,semanticWarnings:params.semanticWarnings,semanticSummary:params.semanticSummary,progressEnabled:params.progressEnabled}),{staleDocuments:embedding.staleDocuments,embeddingMetadata:buildVectorizationEmbeddingMetadata(embedding.embeddingIdentity,embedding.vectorDimension)}}async function runSemanticReindex(params){const plan=await planSemanticReindex(params);params.semanticSummary.stale_items=plan.staleDocuments.length,params.semanticSummary.unchanged_items=plan.freshDocuments;const vectorizationLedgerEntries=Object.fromEntries(params.metadataDocuments.map(document=>[document.metadata.id,document.metadata.updated_at]));if(emitReindexProgress(params.progressEnabled,`semantic_stale_items stale=${plan.staleDocuments.length} total=${params.metadataDocuments.length} unchanged=${plan.freshDocuments} full=${params.forceFullSemantic||plan.resetRequired}`),plan.staleDocuments.length===0)return emitReindexProgress(params.progressEnabled,`embedding_skipped unchanged_items=${plan.freshDocuments}`),params.semanticWarnings.push(`search_semantic_reindex_skipped_unchanged:count=${plan.freshDocuments}`),await pruneReindexOrphanVectors(params.activeVectorStore,params.extensionVectorAdapter,plan.orphanIds,params.settings,params.semanticWarnings),{documentsForKeywordArtifacts:params.documentsForKeywordArtifacts,vectorizationLedgerEntries,vectorizationEmbeddingMetadata:plan.ledgerEmbedding};const refresh=await executeSemanticVectorRefresh({...params,plan});plan.freshDocuments>0&¶ms.semanticWarnings.push(`search_semantic_reindex_skipped_unchanged:count=${plan.freshDocuments}`);const staleDocumentsById=new Map(refresh.staleDocuments.map(document=>[document.metadata.id,document]));return{documentsForKeywordArtifacts:params.metadataDocuments.map(document=>staleDocumentsById.get(document.metadata.id)??document),vectorizationLedgerEntries,vectorizationEmbeddingMetadata:refresh.embeddingMetadata}}async function writeReindexArtifacts(params){const manifestPath=path.join(params.pmRoot,MANIFEST_PATH),embeddingsPath=path.join(params.pmRoot,EMBEDDINGS_PATH),keywordCorpusFields=resolveSearchCorpusFields(params.settings),embeddingsLines=params.documentsForKeywordArtifacts.map(document=>JSON.stringify(buildKeywordRecord(document,params.mode,keywordCorpusFields))).join(`
|
|
3
|
+
`);emitReindexProgress(params.progressEnabled,"writing keyword artifacts"),await writeFileAtomic(manifestPath,`${JSON.stringify(params.manifest,null,2)}
|
|
4
|
+
`),await writeFileAtomic(embeddingsPath,`${embeddingsLines}
|
|
5
|
+
`);const vectorizationWarnings=[];if(params.mode!=="keyword")try{emitReindexProgress(params.progressEnabled,"writing vectorization status ledger"),await writeVectorizationStatusLedger(params.pmRoot,params.vectorizationLedgerEntries,params.vectorizationEmbeddingMetadata)}catch(error){vectorizationWarnings.push(`search_vectorization_status_ledger_write_failed:${error instanceof Error?error.message:String(error)}`)}return vectorizationWarnings}async function runReindex(options,global2){const requestedMode=parseMode(options.mode),progressEnabled=shouldEmitReindexProgress(options),forceFullSemantic=options.full===!0;emitReindexProgress(progressEnabled,`start mode=${requestedMode}`);const pmRoot=resolvePmRoot(process.cwd(),global2.path);await assertInitializedTracker(pmRoot);const settings=resolveSettingsWithSemanticRuntimeDefaults(await readSettings(pmRoot)).settings;let releaseReindexLock=null;try{releaseReindexLock=await acquireLock(pmRoot,REINDEX_LOCK_ID,settings.locks.ttl_seconds,resolveAuthor(void 0,"pm-reindex"),!1,settings.governance.force_required_for_stale_lock,settings.locks.wait_ms)}catch(error){throw error instanceof PmCliError&&error.exitCode===EXIT_CODE.CONFLICT?new PmCliError("Another pm reindex run is already active for this project. Wait for it to finish before starting a new keyword, semantic, or hybrid reindex.",EXIT_CODE.CONFLICT,{code:"reindex_already_running",type:"urn:pm-cli:error:reindex_already_running",why:"Semantic reindex can be expensive and duplicate runs compete for the same local embedding model and vector store.",nextSteps:["Check active pm reindex processes before starting another reindex.","Rerun with --progress when you need non-interactive visibility."]}):error}try{const extensionEmbedding=resolveExtensionSearchEmbedding(settings),extensionVectorAdapter=resolveExtensionVectorAdapter(settings),semanticRuntime=assertSemanticRuntimeAvailable({requestedMode,pmRoot,settings,extensionEmbedding,extensionVectorAdapter}),mode=requestedMode;emitReindexProgress(progressEnabled,"loading item corpus");const corpus=await loadReindexCorpus({pmRoot,settings}),reindexWarnings=corpus.warnings,{documentCandidates,metadataDocuments}=corpus;emitReindexProgress(progressEnabled,`loaded_items=${metadataDocuments.length}`);const generatedAt=nowIso(),manifest=buildReindexManifest(mode,generatedAt,metadataDocuments),manifestPath=path.join(pmRoot,MANIFEST_PATH),embeddingsPath=path.join(pmRoot,EMBEDDINGS_PATH);let documentsForKeywordArtifacts=mode==="keyword"?await hydrateDocuments(pmRoot,documentCandidates,settings.schema,reindexWarnings):metadataDocuments;const semanticWarnings=[];let vectorizationLedgerEntries={},vectorizationEmbeddingMetadata=null;const semanticSummary=createReindexSemanticSummary(mode);if(mode==="keyword"&&await appendKeywordLedgerWarnings({pmRoot,settings,forceFullSemantic,extensionEmbedding,reindexWarnings}),mode!=="keyword"){const semantic=await runSemanticReindex({pmRoot,settings,requestedMode,activeEmbeddingProvider:semanticRuntime.activeEmbeddingProvider,activeVectorStore:semanticRuntime.activeVectorStore,extensionEmbedding,extensionVectorAdapter,documentCandidates,metadataDocuments,documentsForKeywordArtifacts,forceFullSemantic,reindexWarnings,semanticWarnings,semanticSummary,progressEnabled});documentsForKeywordArtifacts=semantic.documentsForKeywordArtifacts,vectorizationLedgerEntries=semantic.vectorizationLedgerEntries,vectorizationEmbeddingMetadata=semantic.vectorizationEmbeddingMetadata}const vectorizationWarnings=await writeReindexArtifacts({pmRoot,mode,manifest,documentsForKeywordArtifacts,settings,vectorizationLedgerEntries,vectorizationEmbeddingMetadata,progressEnabled}),hookWarnings=[...await runActiveOnWriteHooks({path:manifestPath,scope:"project",op:"reindex:manifest"}),...await runActiveOnWriteHooks({path:embeddingsPath,scope:"project",op:"reindex:embeddings"}),...await runActiveOnIndexHooks({mode,total_items:metadataDocuments.length})];return emitReindexProgress(progressEnabled,"done"),{ok:!0,mode,total_items:metadataDocuments.length,semantic:semanticSummary,artifacts:{manifest:MANIFEST_PATH,embeddings:EMBEDDINGS_PATH},warnings:[...reindexWarnings,...semanticWarnings,...vectorizationWarnings,...hookWarnings],generated_at:generatedAt}}finally{await releaseReindexLock?.()}}export{_testOnly,runReindex};
|
|
5
6
|
//# sourceMappingURL=reindex.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]="a7cd1d62-16fe-5e5b-b382-64335fc5e403")}catch{}})();import path from"node:path";import{readHistoryEntries}from"../../core/history/read.js";function normalizedStatus(value){return(value??"in_progress").trim().toLowerCase().replaceAll("-","_")}function latestValidTimestamp(item,historyTimestamp){return[item.updated_at,historyTimestamp].map(value=>({value,time:Date.parse(value??"")})).filter(candidate=>typeof candidate.value=="string"&&Number.isFinite(candidate.time)).sort((left,right)=>right.time-left.time)[0]?.value??item.updated_at}function inspectStaleInProgressItems(items,options){const thresholdHours=Math.max(1,Math.trunc(options.threshold_hours)),nowMs=(options.now??new Date).getTime(),inProgressStatus=normalizedStatus(options.in_progress_status),staleItems=[];for(const item of items){if(normalizedStatus(String(item.status))!==inProgressStatus||(item.assignee?.trim().length??0)>0)continue;const lastActivityAt=latestValidTimestamp(item,options.last_history_activity?.(item)),lastActivityMs=Date.parse(lastActivityAt);if(!Number.isFinite(lastActivityMs))continue;const ageHours=Math.max(0,Math.floor((nowMs-lastActivityMs)/36e5));ageHours>=thresholdHours&&staleItems.push({id:item.id,last_activity_at:lastActivityAt,age_hours:ageHours})}return staleItems.sort((left,right)=>right.age_hours-left.age_hours||left.id.localeCompare(right.id)),{threshold_hours:thresholdHours,count:staleItems.length,items:staleItems,remediation:"Claim active work with `pm claim <id>` or return abandoned work to open with `pm update <id> --status open`."}}async function scanStaleInProgressItems(pmRoot,items,options){const historyTimestamps=new Map;return await Promise.all(items.filter(item=>normalizedStatus(String(item.status))===normalizedStatus(options.in_progress_status)&&(item.assignee?.trim().length??0)===0).map(async item=>{let history;try{history=await readHistoryEntries(path.join(pmRoot,"history",`${item.id}.jsonl`),item.id)}catch{return}const latest=history.map(entry=>entry.ts).filter(timestamp=>Number.isFinite(Date.parse(timestamp))).sort((left,right)=>Date.parse(right)-Date.parse(left))[0];latest&&historyTimestamps.set(item.id,latest)})),inspectStaleInProgressItems(items,{...options,last_history_activity:item=>historyTimestamps.get(item.id)})}export{inspectStaleInProgressItems,scanStaleInProgressItems};
|
|
2
2
|
//# sourceMappingURL=stale-work.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]="d8f1968e-a030-5a3c-b766-60a409163745")}catch{}})();import{normalizeStatusInputWithRegistry}from"../../core/schema/runtime-schema.js";function inspectStatusRoleAssignments(statusRegistry,items,itemLimit=25){const rolelessStatuses=statusRegistry.definitions.filter(definition=>definition.roles.length===0).map(definition=>definition.id).sort((left,right)=>left.localeCompare(right)),rolelessSet=new Set(rolelessStatuses),affectedItemIds=items.filter(item=>{const resolved=normalizeStatusInputWithRegistry(item.status,statusRegistry);return resolved!==void 0&&rolelessSet.has(resolved)}).map(item=>item.id).sort((left,right)=>left.localeCompare(right));return{roleless_status_count:rolelessStatuses.length,roleless_statuses:rolelessStatuses.slice(0,itemLimit),roleless_statuses_truncated:rolelessStatuses.length>itemLimit,affected_item_count:affectedItemIds.length,affected_item_ids:affectedItemIds.slice(0,itemLimit),affected_item_ids_truncated:affectedItemIds.length>itemLimit}}function buildStatusRoleWarnings(diagnostics){return diagnostics.roleless_status_count===0?[]:[`schema_status_missing_lifecycle_role:${diagnostics.roleless_status_count}`]}export{buildStatusRoleWarnings,inspectStatusRoleAssignments};
|
|
2
2
|
//# sourceMappingURL=status-role-diagnostics.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]="7ff2e182-d84c-5e1c-8b63-daea17d55af4")}catch{}})();import fs from"node:fs/promises";import path from"node:path";import{readFileIfExists}from"../../core/fs/fs-utils.js";import{parseItemDocument}from"../../core/item/item-format.js";import{findFirstMergeConflictMarker}from"../../core/shared/conflict-markers.js";import{getSettingsPath,ITEM_FILE_EXTENSIONS}from"../../core/store/paths.js";async function listItemFilesOnDisk(pmRoot,typeToFolder){const folders=[...new Set(Object.values(typeToFolder))],found=[];return await Promise.all(folders.map(async folder=>{let entries;try{entries=await fs.readdir(path.join(pmRoot,folder))}catch{return}for(const entry of entries)for(const extension of ITEM_FILE_EXTENSIONS)if(entry.toLowerCase().endsWith(extension)){found.push({relativePath:`${folder}/${entry}`,id:entry.slice(0,-extension.length)});break}})),found.sort((left,right)=>left.relativePath.localeCompare(right.relativePath))}function scanHistoryStreamContent(accumulator,raw){const{id,relativePath,liveItemIds,out}=accumulator,conflictMarker=findFirstMergeConflictMarker(raw);if(conflictMarker){out.conflictMarkers.push({id,path:relativePath,line:conflictMarker.line,detail:`unresolved merge conflict marker ${conflictMarker.marker}`});return}const latestEntry=scanHistoryEntries(accumulator,raw);latestEntry!==null&&(latestEntry.op==="delete"&&liveItemIds.has(id)&&out.resurrected.push({id,deleted_at:typeof latestEntry.ts=="string"?latestEntry.ts:"",deleted_by:typeof latestEntry.author=="string"?latestEntry.author:""}),latestEntry.op==="history_repair"&&Array.isArray(latestEntry.patch)&&latestEntry.patch.length>0&&(out.repairReconciliations+=1))}function scanHistoryEntries(accumulator,raw){const{id,relativePath,out}=accumulator;let latestEntry=null,createSeen=!1;const lines=raw.split(/\r?\n/).map((line,index)=>({content:line.trim(),number:index+1})).filter(line=>line.content.length>0);for(const line of lines){try{const parsed=JSON.parse(line.content);if(typeof parsed!="object"||parsed===null||Array.isArray(parsed))throw new TypeError("history entry must be an object");latestEntry=parsed}catch{return out.unparseable.push({id,path:relativePath,line:line.number,detail:"history line is not a valid JSON object"}),null}if(latestEntry.op==="create"){if(createSeen)return out.unparseable.push({id,path:relativePath,line:line.number,detail:"duplicate item identity: more than one create event in one history stream"}),null;createSeen=!0}}return latestEntry}function describeFileReadFailure(subject,error){const code=typeof error=="object"&&error!==null&&"code"in error&&typeof error.code=="string"?error.code:"UNKNOWN";return`${subject} could not be read (error code: ${code})`}async function scanHistoryStreams(pmRoot,liveItemIds){const out={conflictMarkers:[],unparseable:[],resurrected:[],repairReconciliations:0,scanned:0};let entries;try{entries=await fs.readdir(path.join(pmRoot,"history"))}catch{return out}for(const entry of entries.sort((left,right)=>left.localeCompare(right))){if(!entry.endsWith(".jsonl"))continue;out.scanned+=1;let raw;try{raw=await fs.readFile(path.join(pmRoot,"history",entry),"utf8")}catch(error){out.unparseable.push({id:entry.slice(0,-6),path:`history/${entry}`,detail:describeFileReadFailure("history stream",error)});continue}scanHistoryStreamContent({id:entry.slice(0,-6),relativePath:`history/${entry}`,liveItemIds,out},raw)}return out}function describeUnparseableJson(raw){const conflictMarker=findFirstMergeConflictMarker(raw);if(conflictMarker)return`unresolved merge conflict marker ${conflictMarker.marker} at line ${conflictMarker.line}`;try{return JSON.parse(raw),null}catch(error){return`invalid JSON (${String(error)})`}}async function scanConfigFiles(pmRoot){const unparseable=[];let scanned=0,settingsRaw=null;try{settingsRaw=await readFileIfExists(getSettingsPath(pmRoot))}catch(error){scanned+=1,unparseable.push({path:"settings.json",detail:describeFileReadFailure("configuration file",error)})}if(settingsRaw!==null){scanned+=1;const detail=describeUnparseableJson(settingsRaw);detail!==null&&unparseable.push({path:"settings.json",detail})}let schemaEntries;try{schemaEntries=await fs.readdir(path.join(pmRoot,"schema"))}catch{return{scanned,unparseable}}for(const entry of schemaEntries.sort((left,right)=>left.localeCompare(right))){if(!entry.endsWith(".json"))continue;scanned+=1;let raw;try{raw=await fs.readFile(path.join(pmRoot,"schema",entry),"utf8")}catch(error){unparseable.push({path:`schema/${entry}`,detail:describeFileReadFailure("configuration file",error)});continue}const detail=describeUnparseableJson(raw);detail!==null&&unparseable.push({path:`schema/${entry}`,detail})}return{scanned,unparseable}}async function scanStorageIntegrity(pmRoot,parsedItemIds,typeToFolder,itemParseOptions={}){const itemFiles=await listItemFilesOnDisk(pmRoot,typeToFolder),idsOnDisk=new Set(itemFiles.map(file=>file.id)),pathsById=new Map;for(const file of itemFiles){const paths=pathsById.get(file.id);paths===void 0?pathsById.set(file.id,[file.relativePath]):paths.push(file.relativePath)}const duplicateItemIds=[...pathsById.entries()].filter(([,paths])=>paths.length>1).map(([id,paths])=>({id,paths:[...paths].sort((left,right)=>left.localeCompare(right))})).sort((left,right)=>left.id.localeCompare(right.id)),unreadableItemFiles=(await Promise.all(itemFiles.map(async file=>{if(!parsedItemIds.has(file.id))return{path:file.relativePath,id:file.id};try{const absolutePath=path.join(pmRoot,file.relativePath);return parseItemDocument(await fs.readFile(absolutePath,"utf8"),{format:absolutePath.toLowerCase().endsWith(".md")?"json_markdown":"toon",schema:itemParseOptions.schema,extensionFieldNames:itemParseOptions.extensionFieldNames}),null}catch{return{path:file.relativePath,id:file.id}}}))).filter(row=>row!==null),historyScan=await scanHistoryStreams(pmRoot,idsOnDisk),configScan=await scanConfigFiles(pmRoot);return{item_files_on_disk:itemFiles.length,item_ids_on_disk:idsOnDisk.size,parsed_items:parsedItemIds.size,unreadable_item_files:unreadableItemFiles,duplicate_item_ids:duplicateItemIds,history_streams_scanned:historyScan.scanned,history_conflict_marker_streams:historyScan.conflictMarkers,history_unparseable_streams:historyScan.unparseable,resurrected_items:historyScan.resurrected,history_repair_reconciliations:historyScan.repairReconciliations,config_files_scanned:configScan.scanned,unparseable_config_files:configScan.unparseable}}export{scanStorageIntegrity};
|
|
2
2
|
//# sourceMappingURL=storage-integrity.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]="9af87d55-dbe2-561b-9f3f-6f12c0416147")}catch{}})();import{execFile}from"node:child_process";import{realpath}from"node:fs/promises";import path from"node:path";import{promisify}from"node:util";import{PM_GITIGNORE_RUNTIME_DIRECTORIES}from"../workspace.js";import{findGitWorkspaceRoot}from"../merge/install.js";const execFileAsync=promisify(execFile),GIT_LS_FILES_MAX_BUFFER=32*1024*1024,GIT_LS_FILES_TIMEOUT_MS=1e4,TRACKED_RUNTIME_AUTHORITATIVE_PATHS=["search/eval-queries.json"];function toPosixPath(value){return value.replaceAll("\\","/").replace(/\/+$/,"")}function quoteShellArgument(value){return`'${value.replaceAll("'","'\\''")}'`}async function resolveCanonicalTrackerRoot(pmRoot,resolver=realpath){return resolver(pmRoot).catch(()=>path.resolve(pmRoot))}async function scanTrackedRuntimeCache(pmRoot){const gitWorkspaceRoot=await findGitWorkspaceRoot(pmRoot);if(gitWorkspaceRoot===null)return{git_workspace_root:null,tracker_relative_root:null,tracked_paths:[],tracked_path_count:0,remediation_command:null};const canonicalPmRoot=await resolveCanonicalTrackerRoot(pmRoot),trackerRelativeRoot=toPosixPath(path.relative(gitWorkspaceRoot,canonicalPmRoot));if(trackerRelativeRoot.length===0)return{git_workspace_root:gitWorkspaceRoot,tracker_relative_root:null,tracked_paths:[],tracked_path_count:0,remediation_command:null};const runtimeDirectories=PM_GITIGNORE_RUNTIME_DIRECTORIES.map(directory=>`${trackerRelativeRoot}/${toPosixPath(directory)}`);try{const{stdout}=await execFileAsync("git",["ls-files","-z","--",...runtimeDirectories.map(directory=>`:(literal)${directory}`)],{cwd:gitWorkspaceRoot,encoding:"utf8",maxBuffer:GIT_LS_FILES_MAX_BUFFER,windowsHide:!0,timeout:GIT_LS_FILES_TIMEOUT_MS}),authoritativePaths=new Set(TRACKED_RUNTIME_AUTHORITATIVE_PATHS.map(relativePath=>`${trackerRelativeRoot}/${relativePath}`)),trackedPaths=[...new Set(stdout.split("\0").filter(entry=>entry.length>0&&!authoritativePaths.has(toPosixPath(entry))))].sort((left,right)=>left.localeCompare(right)),trackedRuntimeDirectories=runtimeDirectories.filter(directory=>trackedPaths.some(trackedPath=>trackedPath===directory||trackedPath.startsWith(`${directory}/`)));return{git_workspace_root:gitWorkspaceRoot,tracker_relative_root:trackerRelativeRoot,tracked_paths:trackedPaths,tracked_path_count:trackedPaths.length,remediation_command:trackedPaths.length===0?null:`git rm --cached -r -- ${trackedRuntimeDirectories.map(directory=>quoteShellArgument(`:(literal)${directory}`)).join(" ")}`}}catch{return{git_workspace_root:gitWorkspaceRoot,tracker_relative_root:trackerRelativeRoot,tracked_paths:[],tracked_path_count:0,remediation_command:null}}}export{resolveCanonicalTrackerRoot,scanTrackedRuntimeCache};
|
|
2
2
|
//# sourceMappingURL=tracked-runtime-cache.js.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
${message}`,EXIT_CODE.GENERIC_FAILURE)}}function resolveTag(options){return typeof options.tag
|
|
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]="7fe99df0-8454-5667-9205-0b861ba212d1")}catch{}})();import{execFile}from"node:child_process";import path from"node:path";import{promisify}from"node:util";import{renderPmCommand}from"../command-line.js";import{readManagedExtensionState,runExtension}from"../extension.js";import{resolveExtensionRoots,pathExists,EXIT_CODE,PmCliError,resolvePmRoot,resolvePmCliVersion}from"../runtime-primitives.js";const execFileAsync=promisify(execFile),DEFAULT_CLI_PACKAGE="@unbrained/pm-cli",DEFAULT_TAG="latest",PACKAGE_UPGRADE_RETRY_SCOPE_FLAGS={global:["--global"],project:[]},_testOnly={defaultCommandRunner,isLocalNpmSpec,normalizeTarget,packageRecordMatchesTarget,resolveCliPackage,resolvePackageInstallSource,resolveRunnablePackageSource,resolveScope,resolveTag,packageCommandFor,summarize};function resolveScope(options){const projectLike=options.project===!0||options.local===!0||options.scope==="project",global2=options.global===!0||options.scope==="global";if(projectLike&&global2)throw new PmCliError('Options "--project/--local" and "--global" are mutually exclusive.',EXIT_CODE.USAGE);return global2?"global":"project"}function normalizeTarget(value){return value.trim().toLowerCase()}function packageRecordMatchesTarget(record,target){const normalizedTarget=normalizeTarget(target);return[record.name,record.directory,record.source.input,record.source.location,record.source.package,record.source.repository,record.source.owner&&record.source.repo?`${record.source.owner}/${record.source.repo}`:void 0].some(value=>typeof value=="string"&&normalizeTarget(value)===normalizedTarget)}function resolveRoots(scope,global2){const pmRoot=resolvePmRoot(process.cwd(),global2.path),roots=resolveExtensionRoots(pmRoot,process.cwd());return{selected_root:scope==="global"?roots.global:roots.project}}async function defaultCommandRunner(command,args,options){try{const result=await execFileAsync(command,args,{cwd:options?.cwd,encoding:"utf8"});return{stdout:result.stdout,stderr:result.stderr}}catch(error){const stderr=typeof error=="object"&&error!==null&&"stderr"in error?String(error.stderr??""):"",message=stderr.trim().length>0?stderr.trim():error instanceof Error?error.message:String(error);throw new PmCliError(`Command failed: ${command} ${args.join(" ")}
|
|
2
|
+
${message}`,EXIT_CODE.GENERIC_FAILURE)}}function resolveTag(options){return typeof options.tag=="string"&&options.tag.trim().length>0?options.tag.trim():DEFAULT_TAG}function resolveCliPackage(options){return typeof options.packageName=="string"&&options.packageName.trim().length>0?options.packageName.trim():DEFAULT_CLI_PACKAGE}async function upgradeCli(options,dryRun){const runner=options.commandRunner??defaultCommandRunner,packageName=resolveCliPackage(options),tag=resolveTag(options),target=`${packageName}@${tag}`,command=["npm","install","-g",target];options.repair===!0&&command.push("--force");const beforeVersion=resolvePmCliVersion(import.meta.url,["../../.."]),planned={requested:!0,status:"planned",package:packageName,target,command,before_version:beforeVersion,...packageName===DEFAULT_CLI_PACKAGE?{migration_guidance:["Calendar scheduling commands are package-owned. If calendar is absent, run pm package install calendar --project; use pm calendar meet, pm calendar event, or pm calendar remind."]}:{},repair:options.repair===!0};if(dryRun)return planned;try{await runner(command[0],command.slice(1));const verified=await runner("pm",["--version"]);return{...planned,status:"updated",after_version:verified.stdout.trim()||void 0}}catch(error){return{...planned,status:"failed",error:error instanceof Error?error.message:String(error)}}}function isLocalNpmSpec(spec){return path.isAbsolute(spec)||spec.startsWith(".")||spec.startsWith("..")||spec.startsWith("file:")}function resolvePackageInstallSource(source,tag){if(source.kind==="npm"){const rawSpec=source.input.startsWith("npm:")?source.input.slice(4).trim():source.input.trim();return!isLocalNpmSpec(rawSpec)&&source.package&&source.package.trim().length>0?`npm:${source.package.trim()}@${tag}`:source.input.startsWith("npm:")?source.input:`npm:${source.input}`}return source.input}async function resolveRunnablePackageSource(source,tag){const installSource=resolvePackageInstallSource(source,tag);return source.kind!=="local"||await pathExists(installSource)?installSource:await pathExists(source.location)?source.location:installSource}function packageCommandFor(source,installSource,scope,ref){const command=["pm","package","install",installSource,scope==="global"?"--global":"--project"];return source.kind==="github"&&ref&&ref.trim().length>0&&command.push("--ref",ref.trim()),command}async function readManagedRecords(scope,global2){const roots=resolveRoots(scope,global2);return(await readManagedExtensionState(roots.selected_root)).state.entries.filter(entry=>entry.scope===scope)}async function refreshManagedRecord(scope,global2,record){const records=await readManagedRecords(scope,global2);return records.find(candidate=>packageRecordMatchesTarget(candidate,record.name))??records.find(candidate=>normalizeTarget(candidate.directory)===normalizeTarget(record.directory))}async function upgradePackageRecord(record,options,global2,scope,dryRun){const tag=resolveTag(options),installSource=await resolveRunnablePackageSource(record.source,tag),command=packageCommandFor(record.source,installSource,scope,record.source.ref),planned={name:record.name,directory:record.directory,scope,source:record.source,status:"planned",command,previous_version:record.manifest_version};if(dryRun)return planned;try{await runExtension(installSource,{install:!0,project:scope==="project",global:scope==="global",ref:record.source.kind==="github"?record.source.ref:void 0},global2);const refreshed=await refreshManagedRecord(scope,global2,record);return{...planned,status:"updated",installed_version:refreshed?.manifest_version}}catch(error){return{...planned,status:"failed",error:error instanceof Error?error.message:String(error)}}}function summarize(cli,packages,includeCli,includePackages){const statuses=[includeCli?cli.status:void 0,...packages.map(entry=>entry.status)].filter(value=>typeof value=="string");return{requested_cli:includeCli,requested_packages:includePackages,planned:statuses.filter(status=>status==="planned").length,updated:statuses.filter(status=>status==="updated").length,skipped:statuses.filter(status=>status==="skipped").length,failed:statuses.filter(status=>status==="failed").length}}async function runUpgrade(target,options,global2){const normalizedTarget=typeof target=="string"&&target.trim().length>0?target.trim():void 0;if(options.cliOnly===!0&&options.packagesOnly===!0){const suggestedRetryArguments=["package","upgrade",...normalizedTarget?[normalizedTarget]:[],"--packages-only","--dry-run",...PACKAGE_UPGRADE_RETRY_SCOPE_FLAGS[resolveScope(options)]];throw new PmCliError('Options "--cli-only" and "--packages-only" are mutually exclusive.',EXIT_CODE.USAGE,{code:"package_upgrade_modes_mutually_exclusive",recovery:{suggested_retry:renderPmCommand(suggestedRetryArguments),suggested_retry_args:suggestedRetryArguments}})}const scope=resolveScope(options),dryRun=options.dryRun===!0;if(options.cliOnly===!0&&normalizedTarget)throw new PmCliError('A package target cannot be used with "--cli-only".',EXIT_CODE.USAGE);const includeCli=!(options.packagesOnly===!0||normalizedTarget),includePackages=options.cliOnly!==!0,cli=includeCli?await upgradeCli(options,dryRun):{requested:!1,status:"skipped",package:resolveCliPackage(options),target:`${resolveCliPackage(options)}@${resolveTag(options)}`,command:["npm","install","-g",`${resolveCliPackage(options)}@${resolveTag(options)}`],repair:options.repair===!0,reason:"not_requested"};let packageRecords=includePackages?await readManagedRecords(scope,global2):[];if(normalizedTarget&&(packageRecords=packageRecords.filter(entry=>packageRecordMatchesTarget(entry,normalizedTarget)),packageRecords.length===0))throw new PmCliError(`Managed package "${normalizedTarget}" was not found in ${scope} scope.`,EXIT_CODE.NOT_FOUND);const packages=[];for(const record of packageRecords)packages.push(await upgradePackageRecord(record,options,global2,scope,dryRun));const summary=summarize(cli,packages,includeCli,includePackages);return{ok:summary.failed===0,action:"upgrade",dry_run:dryRun,scope,target:normalizedTarget,cli,packages,summary}}export{_testOnly,runUpgrade};
|
|
3
3
|
//# sourceMappingURL=upgrade.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]="6322c4ff-92bd-59e5-aa64-ef8d3ef4b57f")}catch{}})();import{scanHistoryDrift,scanItemHistoryDrift}from"../../core/history/drift-scan.js";import{getActiveExtensionRegistrations}from"../../core/extensions/index.js";import{resolveItemTypeRegistry}from"../../core/item/type-registry.js";import{acquireLock}from"../../core/lock/lock.js";import{locateItem,readLocatedItem}from"../../core/store/item-store.js";import{readSettings}from"../../core/store/settings.js";import{WORKSPACE_HISTORY_ID}from"../../core/history/workspace-history.js";import{EXIT_CODE}from"../../core/shared/constants.js";import{PmCliError}from"../../core/shared/errors.js";const DEFAULT_DIAGNOSTIC_LIMIT=5;async function recheckItemHistoryDrift(pmRoot,drift){const ids=drift.hashMismatches.filter(id=>id!==WORKSPACE_HISTORY_ID);if(ids.length===0)return;const settings=await readSettings(pmRoot),registry=resolveItemTypeRegistry(settings,getActiveExtensionRegistrations());for(const id of ids){const release=await acquireLock(pmRoot,id,settings.locks.ttl_seconds,"history-drift-read",!1,!0,settings.locks.wait_ms);try{const located=await locateItem(pmRoot,id,settings.id_prefix,settings.item_format,registry.type_to_folder);if(located===null)throw new PmCliError(`Item ${id} not found`,EXIT_CODE.NOT_FOUND,{code:"item_not_found",required:"Repeat validation after writers finish; each item-hash discrepancy requires readable canonical source."});const{document}=await readLocatedItem(located,{schema:settings.schema});if(document.metadata.id!==id)throw new PmCliError(`Item identity changed while validating ${id}`,EXIT_CODE.CONFLICT,{code:"item_identity_conflict",required:"Restore the canonical item identity and validate storage integrity before retrying history validation."});const verified=await scanItemHistoryDrift(pmRoot,{...document.metadata,body:document.body});for(const key of["missingStreams","unreadableStreams","hashMismatches","chainMismatches","versionSkews","driftedItems"])drift[key]=[...drift[key].filter(itemId=>itemId!==id),...verified[key].filter(itemId=>itemId===id)].sort((left,right)=>left.localeCompare(right));const identities=[...(drift.identityDiscontinuities??[]).filter(finding=>finding.item_id!==id),...(verified.identityDiscontinuities??[]).filter(finding=>finding.item_id===id)];identities.length>0?drift.identityDiscontinuities=identities:delete drift.identityDiscontinuities}finally{await release()}}}async function buildValidateHistoryDriftCheck(pmRoot,items,verboseDiagnostics){const drift=await scanHistoryDrift(pmRoot,items);await recheckItemHistoryDrift(pmRoot,drift);const warnings=[["validate_history_drift_missing_streams",drift.missingStreams.length],["validate_history_drift_unreadable_streams",drift.unreadableStreams.length],["validate_history_drift_hash_mismatches",drift.hashMismatches.length],["validate_history_drift_chain_mismatches",drift.chainMismatches.length],["validate_history_drift_version_skews",drift.versionSkews.length],["validate_history_drift_workspace_state_mismatches",drift.workspaceStateMismatches.length],["validate_history_drift_workspace_state_missing",drift.workspaceStateMissing.length],["validate_history_drift_workspace_state_unreadable",drift.workspaceStateUnreadable.length]].filter(([,count])=>count>0).map(([code,count])=>`${code}:${count}`),diagnosticLimit=verboseDiagnostics?Number.POSITIVE_INFINITY:DEFAULT_DIAGNOSTIC_LIMIT,driftedItems=drift.driftedItems.slice(0,diagnosticLimit),identityDiscontinuities=drift.identityDiscontinuities??[];return{check:{name:"history_drift",status:identityDiscontinuities.length>0?"error":warnings.length===0?"ok":"warn",ok:identityDiscontinuities.length===0&&warnings.length===0,details:{identity_discontinuities:identityDiscontinuities.slice(0,diagnosticLimit),identity_discontinuities_count:identityDiscontinuities.length,identity_discontinuities_truncated:identityDiscontinuities.length>diagnosticLimit,checked_items:items.length,drifted_items_count:drift.driftedItems.length,drifted_items:driftedItems,drifted_items_truncated:driftedItems.length<drift.driftedItems.length,counts:{missing_streams:drift.missingStreams.length,unreadable_streams:drift.unreadableStreams.length,hash_mismatches:drift.hashMismatches.length,chain_mismatches:drift.chainMismatches.length,version_skews:drift.versionSkews.length,workspace_state_mismatches:drift.workspaceStateMismatches.length,workspace_state_missing:drift.workspaceStateMissing.length,workspace_state_unreadable:drift.workspaceStateUnreadable.length},workspace_state_mismatches:drift.workspaceStateMismatches,workspace_state_missing:drift.workspaceStateMissing,workspace_state_unreadable:drift.workspaceStateUnreadable,version_skews:drift.versionSkews.slice(0,diagnosticLimit)}},warnings}}export{buildValidateHistoryDriftCheck};
|
|
2
2
|
//# sourceMappingURL=validate-history-drift.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]="8cca9707-86a7-5ab5-8c7b-92be560254d0")}catch{}})();import{listAllItemMetadata,listAllItemMetadataWithBody}from"../../core/store/item-store.js";async function readValidateItems(params){return params.includeBody?listAllItemMetadataWithBody(params.pmRoot,params.settings.item_format,params.typeToFolder,params.warnings,params.settings.schema,{forceSourceScan:!0}):listAllItemMetadata(params.pmRoot,params.settings.item_format,params.typeToFolder,params.warnings,params.settings.schema)}export{readValidateItems};
|
|
2
2
|
//# sourceMappingURL=validate-item-reader.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]="f2840c80-38f5-5563-b2c0-ef5596cf8f62")}catch{}})();import{toNonEmptyStringOrUndefined}from"../../core/shared/primitives.js";function normalizeRelativePath(value){return value.replaceAll("\\","/").replace(/^\.\/+/,"").replace(/^\/+/,"")}function normalizeRelativeDirectoryPath(value){return normalizeRelativePath(value).replace(/\/+$/,"")}function toMeaningfulString(value){const normalized=toNonEmptyStringOrUndefined(value);if(!normalized)return;const lowered=normalized.toLowerCase();if(!(lowered==="none"||lowered==="null"||lowered==="n/a"||lowered==="na"))return normalized}function summarizeCommandPreview(command){const normalizedCommand=command.trim().replaceAll(/\s+/g," ");return normalizedCommand.length>120?`${normalizedCommand.slice(0,117)}...`:normalizedCommand}export{normalizeRelativeDirectoryPath,normalizeRelativePath,summarizeCommandPreview,toMeaningfulString};
|
|
2
2
|
//# sourceMappingURL=validate-normalization.js.map
|