@unbrained/pm-cli 2026.10.3 → 2026.10.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +2 -2
- package/CHANGELOG.md +28 -2
- 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.d.ts +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 +162 -162
- package/dist/cli-bundle/chunks/chunk-3CYOBJUK.js +3 -0
- package/dist/cli-bundle/chunks/chunk-5MNOWZPN.js +3 -0
- package/dist/cli-bundle/chunks/chunk-AJ7H6XUF.js +20 -0
- package/dist/cli-bundle/chunks/chunk-D332RXZ7.js +80 -0
- package/dist/cli-bundle/chunks/chunk-HRJ6G6ZG.js +31 -0
- package/dist/cli-bundle/chunks/chunk-KRVI56QE.js +6 -0
- package/dist/cli-bundle/chunks/chunk-N4YGSG6F.js +238 -0
- package/dist/cli-bundle/chunks/chunk-OOLYASYJ.js +2 -0
- package/dist/cli-bundle/chunks/chunk-R7CG2DB7.js +2 -0
- package/dist/cli-bundle/chunks/chunk-TGMONGWX.js +2 -0
- package/dist/cli-bundle/chunks/chunk-UZ7BIUCI.js +2 -0
- package/dist/cli-bundle/chunks/{chunk-44UGMMQ6.js → chunk-VZ63DEVJ.js} +3 -3
- package/dist/cli-bundle/chunks/chunk-WFZ4UEOB.js +2 -0
- package/dist/cli-bundle/chunks/chunk-YVBRASXO.js +8 -0
- package/dist/cli-bundle/chunks/{chunk-5XKF5SQV.js → chunk-Z66DWDAU.js} +91 -91
- package/dist/cli-bundle/chunks/{register-list-query-DYCGUQEW.js → register-list-query-75QXHIFH.js} +11 -11
- package/dist/cli-bundle/chunks/register-mutation-YS54SCHG.js +20 -0
- package/dist/cli-bundle/chunks/register-operations-6KHZQSYJ.js +2 -0
- package/dist/cli-bundle/chunks/register-setup-RTATEN2M.js +2 -0
- package/dist/cli-bundle/focused-chunks/{chunk-3BIYG72P.js → chunk-2CVX3KR3.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-5C3IDDW7.js +2 -0
- package/dist/cli-bundle/focused-chunks/{chunk-DBD4W4QP.js → chunk-ABV67XCC.js} +3 -3
- package/dist/cli-bundle/focused-chunks/chunk-B5RSLVE6.js +3 -0
- package/dist/cli-bundle/focused-chunks/chunk-C224METM.js +20 -0
- package/dist/cli-bundle/focused-chunks/chunk-CLDPTMQY.js +6 -0
- package/dist/cli-bundle/focused-chunks/chunk-DDRN42PB.js +8 -0
- package/dist/cli-bundle/focused-chunks/{chunk-EJN7DY3B.js → chunk-DOVTUKJQ.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-ECBOPEJE.js +75 -0
- package/dist/cli-bundle/focused-chunks/chunk-GITOYRUW.js +165 -0
- package/dist/cli-bundle/focused-chunks/chunk-GUIF3WVC.js +30 -0
- package/dist/cli-bundle/focused-chunks/chunk-LE4JUCRR.js +3 -0
- package/dist/cli-bundle/focused-chunks/{chunk-HFAW3FJQ.js → chunk-PSXFFQFT.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-RHIH6XIW.js +12 -0
- package/dist/cli-bundle/focused-chunks/chunk-UDYRVBOZ.js +2 -0
- package/dist/cli-bundle/focused-chunks/chunk-XV5RV4ZT.js +2 -0
- package/dist/cli-bundle/focused-chunks/{chunk-XRSCIYHR.js → chunk-YMU42COG.js} +2 -2
- package/dist/cli-bundle/main.js +28 -28
- package/dist/cli-bundle/sdk-authoring.js +1 -1
- package/dist/cli-bundle/sdk-contracts.js +2 -2
- package/dist/cli-bundle/sdk-core.js +32 -32
- package/dist/cli-bundle/sdk-governance.js +1 -1
- package/dist/cli-bundle/sdk-graph.js +1 -1
- package/dist/cli-bundle/sdk-merge.js +55 -55
- package/dist/cli-bundle/sdk-query.js +1 -1
- package/dist/cli-bundle/sdk-runtime.js +1 -1
- package/dist/cli-bundle/sdk-testing.js +1 -1
- package/dist/cli-bundle/sdk.js +10 -10
- package/dist/cli.js +1 -1
- package/dist/core/checkpoint/checkpoint-gc.js +1 -1
- package/dist/core/checkpoint/mutation-checkpoint.js +2 -2
- package/dist/core/config/nested-settings.js +1 -1
- package/dist/core/config/positional-value.js +1 -1
- package/dist/core/diagnostics/remediation.js +1 -1
- package/dist/core/extensions/activation-summary-markdown.js +2 -1
- package/dist/core/extensions/activation-summary.js +1 -1
- package/dist/core/extensions/activation-transaction.js +1 -1
- package/dist/core/extensions/capability-usage.js +1 -1
- package/dist/core/extensions/command-hook-context.js +1 -1
- package/dist/core/extensions/command-metadata-contract.js +1 -1
- package/dist/core/extensions/command-visibility-tier.js +1 -1
- package/dist/core/extensions/contribution-inventory.js +1 -1
- package/dist/core/extensions/exporter-output-contract.js +1 -1
- package/dist/core/extensions/extension-candidate.js +1 -1
- package/dist/core/extensions/extension-capability-aliases.js +1 -1
- package/dist/core/extensions/extension-hook-runtime.js +1 -1
- package/dist/core/extensions/extension-policy.js +1 -1
- package/dist/core/extensions/extension-registries.js +1 -1
- package/dist/core/extensions/extension-runtime-helpers.js +1 -1
- package/dist/core/extensions/extension-types.d.ts +8 -1
- package/dist/core/extensions/extension-types.js +1 -1
- package/dist/core/extensions/flag-definition-validation.js +1 -1
- package/dist/core/extensions/flag-value-types.js +1 -1
- package/dist/core/extensions/index.js +1 -1
- package/dist/core/extensions/item-field-types.js +1 -1
- package/dist/core/extensions/item-fields.js +1 -1
- package/dist/core/extensions/loader.js +1 -1
- package/dist/core/extensions/manifest-parser.js +1 -1
- package/dist/core/extensions/manifest-schema.js +1 -1
- package/dist/core/extensions/module-graph-snapshot.js +1 -1
- package/dist/core/extensions/preflight-ownership.js +1 -1
- package/dist/core/extensions/registration-contracts.js +1 -1
- package/dist/core/extensions/registration-validation.js +1 -1
- package/dist/core/extensions/registration-values.js +1 -1
- package/dist/core/extensions/reserved-host-flags.js +1 -1
- package/dist/core/extensions/runtime-registrations.js +1 -1
- package/dist/core/extensions/service-ownership.js +1 -1
- package/dist/core/extensions/version-compat.js +1 -1
- package/dist/core/fs/atomic-create.js +1 -1
- package/dist/core/fs/fs-utils.js +2 -2
- package/dist/core/fs/host-environment-errors.js +1 -1
- package/dist/core/fs/index.js +1 -1
- package/dist/core/fs/path-utils.js +1 -1
- package/dist/core/governance/content-fields.js +1 -1
- package/dist/core/governance/issue-codes.js +1 -1
- package/dist/core/governance/metadata-coverage.js +1 -1
- package/dist/core/history/digest.js +1 -1
- package/dist/core/history/drift-cache.js +3 -3
- package/dist/core/history/drift-scan.d.ts +4 -0
- package/dist/core/history/drift-scan.js +1 -1
- package/dist/core/history/event-classification.js +1 -1
- package/dist/core/history/event-index.js +8 -7
- package/dist/core/history/history-compact-bulk.js +1 -1
- package/dist/core/history/history-diff.js +1 -1
- package/dist/core/history/history-rewrite.js +1 -1
- package/dist/core/history/history-storage-stats.js +1 -1
- package/dist/core/history/history-stream-policy.js +1 -1
- package/dist/core/history/history.js +2 -2
- package/dist/core/history/identity.js +1 -1
- package/dist/core/history/index.js +1 -1
- package/dist/core/history/operation-contract.js +1 -1
- package/dist/core/history/projection.js +1 -1
- package/dist/core/history/read.js +1 -1
- package/dist/core/history/replay.js +2 -1
- package/dist/core/history/tombstone.js +1 -1
- package/dist/core/history/version-address.js +1 -1
- package/dist/core/history/workspace-history.js +2 -2
- package/dist/core/io/body-file.js +1 -1
- package/dist/core/io/bulk-ids-input.js +2 -1
- package/dist/core/item/actionability.js +1 -1
- package/dist/core/item/dependency-reference.js +1 -1
- package/dist/core/item/id.js +1 -1
- package/dist/core/item/index.js +1 -1
- package/dist/core/item/item-format-version.js +1 -1
- package/dist/core/item/item-format.js +6 -4
- package/dist/core/item/item-record.js +1 -1
- package/dist/core/item/item-type-definition.js +1 -1
- package/dist/core/item/parent-reference-policy.js +1 -1
- package/dist/core/item/parse.js +8 -2
- package/dist/core/item/plan-lifecycle.js +1 -1
- package/dist/core/item/priority.js +1 -1
- package/dist/core/item/sprint-release-format.js +1 -1
- package/dist/core/item/status-filter.js +1 -1
- package/dist/core/item/status.js +1 -1
- package/dist/core/item/toon-decode.js +1 -1
- package/dist/core/item/type-registry.js +1 -1
- package/dist/core/item/type-synonyms.js +1 -1
- package/dist/core/lock/index.js +1 -1
- package/dist/core/lock/lock-gc.js +1 -1
- package/dist/core/lock/lock.js +3 -3
- package/dist/core/output/mutation-projection.js +1 -1
- package/dist/core/output/output-control.js +1 -1
- package/dist/core/output/output.js +22 -10
- package/dist/core/output/query-summary.js +1 -1
- package/dist/core/output/tabular.js +3 -1
- package/dist/core/packages/manifest.js +1 -1
- package/dist/core/packages/root.js +1 -1
- package/dist/core/policy/workflow-policy-schema.js +1 -1
- package/dist/core/policy/workflow-policy-store.js +1 -1
- package/dist/core/policy/workflow-policy.js +1 -1
- package/dist/core/profile/profile-describe.js +1 -1
- package/dist/core/profile/profile-lint.js +1 -1
- package/dist/core/profile/profile-plan.js +1 -1
- package/dist/core/profile/profile-presets.js +25 -1
- package/dist/core/reproducibility/context.js +1 -1
- package/dist/core/schema/fields-file.js +2 -2
- package/dist/core/schema/item-types-file.js +2 -2
- package/dist/core/schema/runtime-field-filters.js +1 -1
- package/dist/core/schema/runtime-field-values.js +1 -1
- package/dist/core/schema/runtime-schema.js +2 -2
- package/dist/core/schema/status-defs-file.js +2 -2
- package/dist/core/schema/status-token.js +1 -1
- package/dist/core/schema/type-inference.js +1 -1
- package/dist/core/schema/type-presets.js +1 -1
- package/dist/core/schema/type-workflows.js +1 -1
- package/dist/core/search/background-refresh.js +2 -2
- package/dist/core/search/bm25.js +1 -1
- package/dist/core/search/cache.js +2 -2
- package/dist/core/search/corpus.js +1 -1
- package/dist/core/search/embedding-batches.js +1 -1
- package/dist/core/search/eval-thresholds.js +1 -1
- package/dist/core/search/eval.js +1 -1
- package/dist/core/search/http-client.js +1 -1
- package/dist/core/search/providers.js +1 -1
- package/dist/core/search/relevance.js +1 -1
- package/dist/core/search/semantic-defaults.js +1 -1
- package/dist/core/search/staleness.js +1 -1
- package/dist/core/search/vector-stores.js +2 -2
- package/dist/core/search/vectorization-metadata.js +1 -1
- package/dist/core/sentry/helpers.js +1 -1
- package/dist/core/sentry/instrument.js +1 -1
- package/dist/core/session/session-state.js +1 -1
- package/dist/core/shared/agent-session-context.js +1 -1
- package/dist/core/shared/author.js +5 -1
- package/dist/core/shared/command-line.js +1 -1
- package/dist/core/shared/command-types.js +1 -1
- package/dist/core/shared/conflict-markers.js +1 -1
- package/dist/core/shared/constants.js +1 -1
- package/dist/core/shared/errors.js +1 -1
- package/dist/core/shared/html-entity-decode.js +1 -1
- package/dist/core/shared/index.js +1 -1
- package/dist/core/shared/item-metadata-contract.js +1 -1
- package/dist/core/shared/lazy-module.js +1 -1
- package/dist/core/shared/levenshtein.js +1 -1
- package/dist/core/shared/memo.js +1 -1
- package/dist/core/shared/numeric-parsers.js +1 -1
- package/dist/core/shared/option-alias-visibility.js +1 -1
- package/dist/core/shared/primitives.js +1 -1
- package/dist/core/shared/secret-rules.js +1 -1
- package/dist/core/shared/serial-queue.js +1 -1
- package/dist/core/shared/serialization.js +1 -1
- package/dist/core/shared/split-comma-list.js +1 -1
- package/dist/core/shared/text-normalization.js +1 -1
- package/dist/core/shared/time.js +2 -1
- package/dist/core/store/index.js +1 -1
- package/dist/core/store/item-format-migration.js +1 -1
- package/dist/core/store/item-metadata-cache.js +1 -1
- package/dist/core/store/item-metadata-query-index.js +7 -7
- package/dist/core/store/item-metadata-read-work.js +1 -1
- package/dist/core/store/item-store.js +1 -1
- package/dist/core/store/paths.js +1 -1
- package/dist/core/store/settings-concurrency.js +1 -1
- package/dist/core/store/settings-read-cache.js +1 -1
- package/dist/core/store/settings-validator.js +1 -1
- package/dist/core/store/settings.d.ts +11 -2
- package/dist/core/store/settings.js +3 -3
- package/dist/core/store/tracker-preflight.js +1 -1
- package/dist/core/telemetry/consent.js +2 -2
- package/dist/core/telemetry/observability.js +1 -1
- package/dist/core/telemetry/policy.js +1 -1
- package/dist/core/telemetry/read-sampling.js +2 -2
- package/dist/core/telemetry/runtime.js +9 -5
- package/dist/core/test/background-runs.js +3 -3
- package/dist/core/test/item-test-run-tracking.js +1 -1
- package/dist/core/test/run-selectors.js +1 -1
- package/dist/core/validate/estimate-defaults.js +1 -1
- package/dist/core/validate/fix-planning.js +1 -1
- package/dist/core/validate/linked-artifact-reference.js +1 -1
- package/dist/core/validate/missing-by-type.js +1 -1
- package/dist/core/validate/missing-link-owners.js +1 -1
- package/dist/core/validate/stale-file-classification.js +1 -1
- package/dist/mcp/http-server.js +6 -4
- package/dist/mcp/legacy-adapter.js +1 -1
- package/dist/mcp/runtime-capabilities.js +1 -1
- package/dist/mcp/server.js +4 -4
- package/dist/mcp/tool-definitions.js +1 -1
- package/dist/sdk/actionability.js +1 -1
- package/dist/sdk/agent/closed-domain-contracts.js +1 -1
- package/dist/sdk/agent/command-recovery.js +1 -1
- package/dist/sdk/agent/command-suggestions.js +1 -1
- package/dist/sdk/agent/create-option-policy.js +1 -1
- package/dist/sdk/agent/identity-config.js +1 -1
- package/dist/sdk/agent/item-addressing.js +1 -1
- package/dist/sdk/agent/refusal-closure-census.js +2 -1
- package/dist/sdk/agent/refusal-closure.js +1 -1
- package/dist/sdk/agent/refusal-corpus-contracts.js +1 -1
- package/dist/sdk/agent/refusal-reachability.js +3 -1
- package/dist/sdk/agent/subcommand-recovery.js +1 -1
- package/dist/sdk/agent/task-transcript-contracts.js +1 -1
- package/dist/sdk/agent/tracker-preflight-contracts.js +1 -1
- package/dist/sdk/agent-capability-contracts.js +3 -1
- package/dist/sdk/agent-session-context.js +1 -1
- package/dist/sdk/annotations.js +1 -1
- package/dist/sdk/author-attribution.js +1 -1
- package/dist/sdk/authoring.js +1 -1
- package/dist/sdk/cli-bootstrap.js +1 -1
- package/dist/sdk/cli-contracts/agent-output-contracts.js +5 -3
- package/dist/sdk/cli-contracts/bootstrap-command-scanner.js +1 -1
- package/dist/sdk/cli-contracts/command-aliases.js +1 -1
- package/dist/sdk/cli-contracts/command-exit-contracts.js +1 -1
- package/dist/sdk/cli-contracts/commander-mutation-options.js +1 -1
- package/dist/sdk/cli-contracts/commander-types.js +1 -1
- package/dist/sdk/cli-contracts/completeness.js +1 -1
- package/dist/sdk/cli-contracts/enum-contracts.js +1 -1
- package/dist/sdk/cli-contracts/flag-contracts.js +1 -1
- package/dist/sdk/cli-contracts/flag-lexicon-contracts.js +2 -1
- package/dist/sdk/cli-contracts/grammar-contracts.js +1 -1
- package/dist/sdk/cli-contracts/registration-helpers.js +7 -7
- package/dist/sdk/cli-contracts/runtime-contracts.js +1 -1
- package/dist/sdk/cli-contracts/schemas/assurance-definition.js +1 -1
- package/dist/sdk/cli-contracts/string-lists.js +1 -1
- package/dist/sdk/cli-contracts/tool-option-contracts.js +1 -1
- package/dist/sdk/cli-contracts/tool-parameter-tables.js +1 -1
- package/dist/sdk/cli-contracts/tool-schema.js +1 -1
- package/dist/sdk/cli-contracts/typed-action-inputs.js +1 -1
- package/dist/sdk/cli-contracts.js +1 -1
- package/dist/sdk/cli-program.js +1 -1
- package/dist/sdk/command-line.js +1 -1
- package/dist/sdk/comments.js +1 -1
- package/dist/sdk/compile-cache.js +1 -1
- package/dist/sdk/completion/bash.js +2 -1
- package/dist/sdk/completion/fish.js +13 -7
- package/dist/sdk/completion/shared.js +1 -1
- package/dist/sdk/completion/zsh.js +14 -8
- package/dist/sdk/completion.js +1 -1
- package/dist/sdk/compose.js +1 -1
- package/dist/sdk/config.js +1 -1
- package/dist/sdk/context/recency.js +1 -1
- package/dist/sdk/context/semantic-session-attribution.js +1 -1
- package/dist/sdk/context/usage-egress.js +1 -1
- package/dist/sdk/context/usage-ledger.js +6 -3
- package/dist/sdk/context-intent-contracts.js +1 -1
- package/dist/sdk/context-intent-runtime.js +1 -1
- package/dist/sdk/context-packing.js +1 -1
- package/dist/sdk/context-relevance.js +1 -1
- package/dist/sdk/context-signal-store.js +2 -2
- package/dist/sdk/context-usage.js +1 -1
- package/dist/sdk/contracts.js +1 -1
- package/dist/sdk/core-governance.js +1 -1
- package/dist/sdk/core.js +1 -1
- package/dist/sdk/corpus-shape.js +1 -1
- package/dist/sdk/define.js +1 -1
- package/dist/sdk/dependencies.js +1 -1
- package/dist/sdk/dependency-flag-validation.js +1 -1
- package/dist/sdk/dependency-provenance.js +1 -1
- package/dist/sdk/docs.js +1 -1
- package/dist/sdk/duplicates.js +1 -1
- package/dist/sdk/environment/agent-environment.js +1 -1
- package/dist/sdk/environment/host-environment-errors.js +1 -1
- package/dist/sdk/environment/project-runtime-compatibility.js +2 -1
- package/dist/sdk/environment/source-context.js +1 -1
- package/dist/sdk/environment/tracker-preflight.js +1 -1
- package/dist/sdk/error-code-catalog.js +1 -1
- package/dist/sdk/error-runtime.js +1 -1
- package/dist/sdk/errors.js +1 -1
- package/dist/sdk/eval.js +1 -1
- package/dist/sdk/extension/author-manifest.js +1 -1
- package/dist/sdk/extension/bundled-catalog.js +1 -1
- package/dist/sdk/extension/concurrency.js +1 -1
- package/dist/sdk/extension/copy-scope.js +1 -1
- package/dist/sdk/extension/custom-field-collisions.js +1 -1
- package/dist/sdk/extension/describe.js +4 -2
- package/dist/sdk/extension/doctor.js +1 -1
- package/dist/sdk/extension/install-plan.js +1 -1
- package/dist/sdk/extension/install-receipts.js +1 -1
- package/dist/sdk/extension/install-runtime.js +3 -3
- package/dist/sdk/extension/install-snapshot.js +1 -1
- package/dist/sdk/extension/install-sources.js +5 -5
- package/dist/sdk/extension/managed-state.js +2 -2
- package/dist/sdk/extension/migrations.js +2 -2
- package/dist/sdk/extension/output-ownership.js +1 -1
- package/dist/sdk/extension/runtime-summary.js +1 -1
- package/dist/sdk/extension/scaffold.js +11 -4
- package/dist/sdk/extension/shared.js +1 -1
- package/dist/sdk/extension/source-resolution.js +1 -1
- package/dist/sdk/extension/static-inventory.js +1 -1
- package/dist/sdk/extension/update-check.js +1 -1
- package/dist/sdk/extension-command-context.js +1 -1
- package/dist/sdk/extension-contracts.js +1 -1
- package/dist/sdk/extension.js +1 -1
- package/dist/sdk/files.js +1 -1
- package/dist/sdk/flag-invocation-contracts.js +1 -1
- package/dist/sdk/generated/generated-error-code-catalog-part-1.js +1 -1
- package/dist/sdk/generated/generated-error-code-catalog-part-2.js +1 -1
- package/dist/sdk/generated-error-code-catalog.js +1 -1
- package/dist/sdk/governance/assurance-action-contracts.js +1 -1
- package/dist/sdk/governance/assurance-action.js +1 -1
- package/dist/sdk/governance/assurance-limits.js +1 -1
- package/dist/sdk/governance/assurance-mutation-error.js +1 -1
- package/dist/sdk/governance/assurance-presets.js +1 -1
- package/dist/sdk/governance/assurance-runtime.js +1 -1
- package/dist/sdk/governance/assurance.js +4 -4
- package/dist/sdk/governance/boundary-fixtures.js +1 -1
- package/dist/sdk/governance/closure-timestamps.js +1 -1
- package/dist/sdk/governance/coverage-assurance.js +1 -1
- package/dist/sdk/governance/defect-recurrence-coverage.js +1 -1
- package/dist/sdk/governance/defect-recurrence-graph.js +1 -1
- package/dist/sdk/governance/defect-recurrence-signals.js +1 -1
- package/dist/sdk/governance/defect-recurrence.js +1 -1
- package/dist/sdk/governance/extension-host-version.js +1 -1
- package/dist/sdk/governance/gc.js +1 -1
- package/dist/sdk/governance/health-merge-evidence.js +1 -1
- package/dist/sdk/governance/health.js +2 -1
- package/dist/sdk/governance/hierarchy-validation.js +1 -1
- package/dist/sdk/governance/linked-file-report.js +1 -1
- package/dist/sdk/governance/merge-receipt-history.js +1 -1
- package/dist/sdk/governance/provenance-health.js +4 -1
- package/dist/sdk/governance/reindex.js +5 -4
- package/dist/sdk/governance/stale-work.js +1 -1
- package/dist/sdk/governance/status-role-diagnostics.js +1 -1
- package/dist/sdk/governance/storage-integrity.js +1 -1
- package/dist/sdk/governance/tracked-runtime-cache.js +1 -1
- package/dist/sdk/governance/upgrade.js +2 -2
- package/dist/sdk/governance/validate-history-drift.js +1 -1
- package/dist/sdk/governance/validate-item-reader.js +1 -1
- package/dist/sdk/governance/validate-normalization.js +1 -1
- package/dist/sdk/governance/validate.js +1 -1
- package/dist/sdk/governance/workflow-completeness.js +1 -1
- package/dist/sdk/governance/workflow-policy.js +3 -3
- package/dist/sdk/governance/workspace-position.js +2 -1
- package/dist/sdk/governance.js +1 -1
- package/dist/sdk/graph/adapter.js +1 -1
- package/dist/sdk/graph/analytics.js +1 -1
- package/dist/sdk/graph/assembly.js +1 -1
- package/dist/sdk/graph/cache.js +1 -1
- package/dist/sdk/graph/centrality.js +1 -1
- package/dist/sdk/graph/conformance.js +1 -1
- package/dist/sdk/graph/deadline-scheduling.js +1 -1
- package/dist/sdk/graph/durable-cache.js +1 -1
- package/dist/sdk/graph/governance-contracts.js +1 -1
- package/dist/sdk/graph/governance.js +1 -1
- package/dist/sdk/graph/hierarchy-integrity.js +1 -1
- package/dist/sdk/graph/index.js +1 -1
- package/dist/sdk/graph/lifecycle-coverage.js +1 -1
- package/dist/sdk/graph/mutation-advisory.js +1 -1
- package/dist/sdk/graph/query-contracts.js +1 -1
- package/dist/sdk/graph/remediation.js +1 -1
- package/dist/sdk/graph/run.js +1 -1
- package/dist/sdk/graph/scheduling.js +1 -1
- package/dist/sdk/graph/traversal.js +1 -1
- package/dist/sdk/graph/workspace-relationship-kind-registry.js +1 -1
- package/dist/sdk/graph.js +1 -1
- package/dist/sdk/guide-topics.js +1 -1
- package/dist/sdk/guide.js +8 -1
- package/dist/sdk/history/attestation-command.js +1 -1
- package/dist/sdk/history/attestation-contract.js +1 -1
- package/dist/sdk/history/attestation-scan.js +1 -1
- package/dist/sdk/history/attestation.js +1 -1
- package/dist/sdk/history/maintenance.js +1 -1
- package/dist/sdk/history/salvage.js +3 -2
- package/dist/sdk/history/subject.js +1 -1
- package/dist/sdk/history-analytics.js +1 -1
- package/dist/sdk/history-compact.js +1 -1
- package/dist/sdk/history-mcp.js +1 -1
- package/dist/sdk/history-provenance.js +1 -1
- package/dist/sdk/history-read.js +1 -1
- package/dist/sdk/history-redact.js +1 -1
- package/dist/sdk/history-repair.js +1 -1
- package/dist/sdk/improvement-ledger-validation.js +1 -1
- package/dist/sdk/improvement-ledger.js +2 -2
- package/dist/sdk/index.js +1 -1
- package/dist/sdk/init-agent-guidance.js +16 -2
- package/dist/sdk/init.js +16 -2
- package/dist/sdk/invocation-author.js +1 -1
- package/dist/sdk/item-children.js +1 -1
- package/dist/sdk/item-metadata-index.js +1 -1
- package/dist/sdk/item-schedule.js +1 -1
- package/dist/sdk/item-transaction.js +1 -1
- package/dist/sdk/learnings.js +1 -1
- package/dist/sdk/lifecycle/append.js +4 -2
- package/dist/sdk/lifecycle/claim.js +1 -1
- package/dist/sdk/lifecycle/close-many.js +1 -1
- package/dist/sdk/lifecycle/close.js +1 -1
- package/dist/sdk/lifecycle/copy.js +1 -1
- package/dist/sdk/lifecycle/create.js +1 -1
- package/dist/sdk/lifecycle/delete.js +1 -1
- package/dist/sdk/lifecycle/event-validation-messages.js +1 -1
- package/dist/sdk/lifecycle/focus.js +1 -1
- package/dist/sdk/lifecycle/hierarchy-mutation-lock.js +1 -1
- package/dist/sdk/lifecycle/legacy-none-tokens.js +1 -1
- package/dist/sdk/lifecycle/lifecycle-transitions.js +1 -1
- package/dist/sdk/lifecycle/mcp-actions.js +1 -1
- package/dist/sdk/lifecycle/metadata-normalizers.js +1 -1
- package/dist/sdk/lifecycle/mutation-command-options.js +1 -1
- package/dist/sdk/lifecycle/plan-mutation-receipt.js +1 -1
- package/dist/sdk/lifecycle/plan.js +1 -1
- package/dist/sdk/lifecycle/recurrence-parsers.js +1 -1
- package/dist/sdk/lifecycle/reopen.js +1 -1
- package/dist/sdk/lifecycle/repeatable-metadata-parsers.js +2 -1
- package/dist/sdk/lifecycle/restore.js +1 -1
- package/dist/sdk/lifecycle/shared-unset-fields.js +1 -1
- package/dist/sdk/lifecycle/task-composition.js +1 -1
- package/dist/sdk/lifecycle/update-many.js +1 -1
- package/dist/sdk/lifecycle/update.js +2 -1
- package/dist/sdk/lifecycle-completion.js +1 -1
- package/dist/sdk/lifecycle-policy.js +1 -1
- package/dist/sdk/linked-artifacts.js +2 -1
- package/dist/sdk/mcp/apps.js +1 -1
- package/dist/sdk/mcp/authorization.js +1 -1
- package/dist/sdk/mcp/discovery.js +1 -1
- package/dist/sdk/mcp/interactions.js +1 -1
- package/dist/sdk/mcp/protocol.js +1 -1
- package/dist/sdk/mcp/skills.js +3 -1
- package/dist/sdk/mcp/subscriptions.js +1 -1
- package/dist/sdk/mcp/tasks.js +2 -2
- package/dist/sdk/mcp/transport.js +1 -1
- package/dist/sdk/merge/abandoned-receipts.js +1 -1
- package/dist/sdk/merge/driver.js +1 -1
- package/dist/sdk/merge/index.js +1 -1
- package/dist/sdk/merge/install.js +4 -2
- package/dist/sdk/merge/receipt-file-boundary.js +1 -1
- package/dist/sdk/merge/receipt-operation.js +1 -1
- package/dist/sdk/merge/receipt-schema.js +1 -1
- package/dist/sdk/merge/receipts.js +4 -4
- package/dist/sdk/merge/reconcile.js +1 -1
- package/dist/sdk/merge/three-way.js +3 -2
- package/dist/sdk/merge/worktree-config.js +1 -1
- package/dist/sdk/merge.js +1 -1
- package/dist/sdk/mutation-events.js +1 -1
- package/dist/sdk/mutation-guard.js +1 -1
- package/dist/sdk/notes.js +1 -1
- package/dist/sdk/output-contracts.js +1 -1
- package/dist/sdk/output-projection.js +1 -1
- package/dist/sdk/output-token-accounting.js +1 -1
- package/dist/sdk/output.js +2 -1
- package/dist/sdk/ownership-source.js +1 -1
- package/dist/sdk/package-import-adapters.js +1 -1
- package/dist/sdk/package-migrations.js +1 -1
- package/dist/sdk/package-runtime-options.js +1 -1
- package/dist/sdk/pagination.js +1 -1
- package/dist/sdk/profile.js +5 -1
- package/dist/sdk/provenance.js +1 -1
- package/dist/sdk/public-surface.json +1 -1
- package/dist/sdk/query/activity.js +1 -1
- package/dist/sdk/query/aggregate.js +1 -1
- package/dist/sdk/query/calendar.js +4 -1
- package/dist/sdk/query/complete-list.js +1 -1
- package/dist/sdk/query/context.js +2 -1
- package/dist/sdk/query/duplicate-candidates.js +1 -1
- package/dist/sdk/query/get.d.ts +14 -2
- package/dist/sdk/query/get.js +1 -1
- package/dist/sdk/query/history.js +1 -1
- package/dist/sdk/query/item-filter-options.js +1 -1
- package/dist/sdk/query/light-metadata.js +1 -1
- package/dist/sdk/query/list-filter-shared.js +1 -1
- package/dist/sdk/query/list.js +1 -1
- package/dist/sdk/query/multi-value-filters.js +1 -1
- package/dist/sdk/query/next-ready-budget.js +1 -1
- package/dist/sdk/query/next.js +2 -1
- package/dist/sdk/query/parsers.js +1 -1
- package/dist/sdk/query/projection-contracts.js +1 -1
- package/dist/sdk/query/search/corpus.js +2 -1
- package/dist/sdk/query/search/filters.js +1 -1
- package/dist/sdk/query/search/input.js +1 -1
- package/dist/sdk/query/search/lexical.js +1 -1
- package/dist/sdk/query/search/response.js +1 -1
- package/dist/sdk/query/search/semantic.js +3 -2
- package/dist/sdk/query/search/types.js +1 -1
- package/dist/sdk/query/search-contracts.js +1 -1
- package/dist/sdk/query/search-pagination.d.ts +1 -1
- package/dist/sdk/query/search-pagination.js +1 -1
- package/dist/sdk/query/search-rendering.js +1 -1
- package/dist/sdk/query/search.js +1 -1
- package/dist/sdk/query/workspace-contracts.js +1 -1
- package/dist/sdk/query.js +1 -1
- package/dist/sdk/read-output/continuation.js +1 -1
- package/dist/sdk/read-output/options.js +1 -1
- package/dist/sdk/read-output/provenance.js +1 -1
- package/dist/sdk/read-output-budget.js +1 -1
- package/dist/sdk/read-output-contracts.js +1 -1
- package/dist/sdk/read-output-rows.js +1 -1
- package/dist/sdk/read-output-session.js +1 -1
- package/dist/sdk/relationship-analytics.js +1 -1
- package/dist/sdk/relationship-context.js +1 -1
- package/dist/sdk/relationship-history.js +7 -4
- package/dist/sdk/relationship-kinds/contract.js +1 -1
- package/dist/sdk/relationship-migration.js +1 -1
- package/dist/sdk/relationships.js +1 -1
- package/dist/sdk/reproducibility/process.js +1 -1
- package/dist/sdk/runtime/actions.js +1 -1
- package/dist/sdk/runtime/context.js +1 -1
- package/dist/sdk/runtime/schema-preview.js +1 -1
- package/dist/sdk/runtime/schema.js +1 -1
- package/dist/sdk/runtime-action-aliases.js +1 -1
- package/dist/sdk/runtime-extended-actions.js +1 -1
- package/dist/sdk/runtime-input.js +1 -1
- package/dist/sdk/runtime-primitives.js +1 -1
- package/dist/sdk/runtime-public-contracts.js +1 -1
- package/dist/sdk/runtime-stats-options.js +1 -1
- package/dist/sdk/runtime.js +1 -1
- package/dist/sdk/scheduling-shortcuts.js +1 -1
- package/dist/sdk/schema-migration.js +4 -3
- package/dist/sdk/schema.js +7 -1
- package/dist/sdk/search-refresh-worker.js +1 -1
- package/dist/sdk/similarity-scoring.js +1 -1
- package/dist/sdk/similarity.js +1 -1
- package/dist/sdk/start-task-status.js +1 -1
- package/dist/sdk/stats.js +1 -1
- package/dist/sdk/structured-mutations.js +1 -1
- package/dist/sdk/telemetry-flush.js +1 -1
- package/dist/sdk/telemetry.js +4 -3
- package/dist/sdk/templates.js +26 -2
- package/dist/sdk/test/batch.js +2 -2
- package/dist/sdk/test/entry.js +1 -1
- package/dist/sdk/test/execution.js +6 -5
- package/dist/sdk/test/json-path.js +1 -1
- package/dist/sdk/test/linked-command-detection.js +1 -1
- package/dist/sdk/test/measurements.js +1 -1
- package/dist/sdk/test/parsers.js +1 -1
- package/dist/sdk/test/runs.js +1 -1
- package/dist/sdk/test/trust.js +2 -2
- package/dist/sdk/test/workspace-snapshot.js +1 -1
- package/dist/sdk/testing.js +7 -4
- package/dist/sdk/traceability/runtime-files-lookup.js +1 -1
- package/dist/sdk/traceability/source-traceability.js +2 -1
- package/dist/sdk/tracker-root-discovery.js +1 -1
- package/dist/sdk/workspace-contracts-cache.js +1 -1
- package/dist/sdk/workspace-contracts.js +1 -1
- package/dist/sdk/workspace-memory.js +2 -2
- package/dist/sdk/workspace-recipe.js +1 -1
- package/dist/sdk/workspace-snapshot.js +5 -4
- package/dist/sdk/workspace-transaction-gc.js +1 -1
- package/dist/sdk/workspace-transaction.js +2 -2
- package/dist/sdk/workspace.js +3 -2
- package/dist/types/index.js +1 -1
- package/dist/types.js +1 -1
- package/docs/AGENT_EVIDENCE_CONSISTENCY.md +88 -0
- package/docs/DIAGNOSTIC_OUTPUT_CONTRACTS.md +25 -0
- package/docs/GET_READ_EVIDENCE.md +68 -0
- package/docs/OUTPUT_PROJECTION_CONTRACTS.md +23 -0
- package/docs/README.md +2 -0
- package/docs/SDK_AUDITED_MUTATIONS.md +35 -0
- package/docs/TESTING.md +8 -0
- package/docs/ecosystem-review-2026-09-28.json +2864 -3157
- package/marketplace.json +2 -2
- package/package.json +1 -1
- package/packages/pm-beads/package.json +1 -1
- package/packages/pm-calendar/package.json +1 -1
- package/packages/pm-command-kit/package.json +1 -1
- package/packages/pm-digital-twin/package.json +1 -1
- package/packages/pm-governance-audit/package.json +1 -1
- package/packages/pm-guide-shell/package.json +1 -1
- package/packages/pm-kanban/package.json +1 -1
- package/packages/pm-lifecycle-hooks/package.json +1 -1
- package/packages/pm-linked-test-adapters/package.json +1 -1
- package/packages/pm-search-advanced/package.json +1 -1
- package/packages/pm-templates/package.json +1 -1
- package/packages/pm-todos/package.json +1 -1
- package/packages/pm-vcs/extensions/vcs/index.ts +4 -2
- package/packages/pm-vcs/package.json +1 -1
- package/plugins/pm-claude/.claude-plugin/plugin.json +1 -1
- package/plugins/pm-claude/package.json +2 -2
- package/plugins/pm-codex/.codex-plugin/plugin.json +1 -1
- package/plugins/pm-codex/package.json +2 -2
- package/plugins/pm-codex/plugin.json +1 -1
- package/scripts/finalize-build.mjs +3 -2
- package/dist/cli-bundle/chunks/chunk-3AF2R3Y6.js +0 -6
- package/dist/cli-bundle/chunks/chunk-6ST3SCQ6.js +0 -2
- package/dist/cli-bundle/chunks/chunk-6Z4IV2MC.js +0 -8
- package/dist/cli-bundle/chunks/chunk-DEZPZOQ7.js +0 -2
- package/dist/cli-bundle/chunks/chunk-FW5LJXQY.js +0 -31
- package/dist/cli-bundle/chunks/chunk-H2DZW6I6.js +0 -3
- package/dist/cli-bundle/chunks/chunk-H7CXQBGQ.js +0 -2
- package/dist/cli-bundle/chunks/chunk-KP7NBQK3.js +0 -80
- package/dist/cli-bundle/chunks/chunk-MKXBCBAN.js +0 -20
- package/dist/cli-bundle/chunks/chunk-QPKQKSQU.js +0 -238
- package/dist/cli-bundle/chunks/chunk-SGFQQXFD.js +0 -2
- package/dist/cli-bundle/chunks/chunk-YCBGZF3T.js +0 -2
- package/dist/cli-bundle/chunks/chunk-YDWKGUQU.js +0 -3
- package/dist/cli-bundle/chunks/register-mutation-5PT3NW3A.js +0 -20
- package/dist/cli-bundle/chunks/register-operations-QDDQOAAV.js +0 -2
- package/dist/cli-bundle/chunks/register-setup-BBX67YMA.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-4FFPGNCJ.js +0 -6
- package/dist/cli-bundle/focused-chunks/chunk-73DA7ISY.js +0 -75
- package/dist/cli-bundle/focused-chunks/chunk-E754JDLY.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-FKK2HI3S.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-GMYUNHST.js +0 -3
- package/dist/cli-bundle/focused-chunks/chunk-HIA2ZF64.js +0 -12
- package/dist/cli-bundle/focused-chunks/chunk-UTRSM3ZK.js +0 -8
- package/dist/cli-bundle/focused-chunks/chunk-VVWYI2X7.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-WAJNX4RN.js +0 -20
- package/dist/cli-bundle/focused-chunks/chunk-WCY6HRZO.js +0 -30
- package/dist/cli-bundle/focused-chunks/chunk-YC32ZSLS.js +0 -165
- package/dist/cli-bundle/focused-chunks/chunk-ZIXFMIUL.js +0 -3
|
@@ -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]="be2b507d-2797-570c-b211-46d950edcbde")}catch{}})();import{normalizeAddTypeInput,parseItemTypesFile,serializeItemTypesFile,upsertItemType}from"../schema/item-types-file.js";import{normalizeAddStatusInput,parseStatusDefsFile,serializeStatusDefsFile,upsertStatusDef}from"../schema/status-defs-file.js";import{normalizeAddFieldInput,parseFieldsFile,serializeFieldsFile,upsertField}from"../schema/fields-file.js";import{parseNestedSettingValue,readNestedSettingValue,resolveNestedSettingDescriptor}from"../config/nested-settings.js";function planSchemaComponent(initialFile,inputs,keyOf,serialize,upsert){let file=initialFile;const changes=[];for(const input of inputs){const before=serialize(file),result=upsert(file,input),after=serialize(result.file);file=result.file;const status=before===after?"unchanged":result.replaced?"update":"add";changes.push({key:keyOf(input),status})}return{file,changes,changed:changes.some(change=>change.status!=="unchanged")}}function canonicalTransitions(transitions){return JSON.stringify(transitions.map(pair=>pair.join("\0")).sort())}function planWorkflows(current,desired){const result=current.map(entry=>({...entry})),changes=[];for(const workflow of desired){const index=result.findIndex(entry=>entry.type===workflow.type),next={type:workflow.type,allowed_transitions:workflow.allowed_transitions};index<0?(result.push(next),changes.push({type:workflow.type,status:"add"})):canonicalTransitions(result[index].allowed_transitions)===canonicalTransitions(workflow.allowed_transitions)?changes.push({type:workflow.type,status:"unchanged"}):(result[index]=next,changes.push({type:workflow.type,status:"update"}))}return{changes,result,changed:changes.some(change=>change.status!=="unchanged")}}function planConfig(profile,settings){const changes=[];for(const entry of profile.config){const descriptor=resolveNestedSettingDescriptor(entry.key);if(descriptor===void 0)throw new Error(`Profile "${profile.name}" references unknown config key "${entry.key}".`);const parsed=parseNestedSettingValue(descriptor,entry.value);if(!parsed.ok)throw new Error(`Profile "${profile.name}" config ${entry.key}: ${parsed.error.message}`);const current=readNestedSettingValue(settings,descriptor),status=current===null?"add":current===parsed.parsed.value?"unchanged":"update";changes.push({key:descriptor.key,path:descriptor.path,value:parsed.parsed.value,status})}return{changes,changed:changes.some(change=>change.status!=="unchanged")}}function canonicalTemplateOptions(options){const sorted=Object.entries(options).sort(([left],[right])=>left.localeCompare(right));return JSON.stringify(sorted)}function planTemplates(profile,existing){const changes=[];for(const template of profile.templates){const current=existing.get(template.name);let status;current===void 0?status="add":canonicalTemplateOptions(current)===canonicalTemplateOptions(template.options)?status="unchanged":status="update",changes.push({name:template.name,options:template.options,status})}return{changes,changed:changes.some(change=>change.status!=="unchanged")}}function planProfileApplication(profile,current){const types=planSchemaComponent(parseItemTypesFile(current.typesRaw),profile.types,input=>normalizeAddTypeInput(input).name,serializeItemTypesFile,(file,input)=>upsertItemType(file,normalizeAddTypeInput(input))),statuses=planSchemaComponent(parseStatusDefsFile(current.statusesRaw),profile.statuses,input=>normalizeAddStatusInput(input).id,serializeStatusDefsFile,(file,input)=>upsertStatusDef(file,normalizeAddStatusInput(input))),fields=planSchemaComponent(parseFieldsFile(current.fieldsRaw),profile.fields,input=>normalizeAddFieldInput(input).key,serializeFieldsFile,(file,input)=>upsertField(file,normalizeAddFieldInput(input))),workflows=planWorkflows(current.workflows,profile.workflows),config=planConfig(profile,current.settings),templates=planTemplates(profile,current.templates),packages=profile.packages.map(recommendation=>({spec:recommendation.spec,reason:recommendation.reason,status:current.installedPackages.has(recommendation.spec)?"installed":"recommended"})),changed=types.changed||statuses.changed||fields.changed||workflows.changed||config.changed||templates.changed;return{profile:{name:profile.name,title:profile.title,summary:profile.summary},types,statuses,fields,workflows,config,templates,packages,changed}}export{planProfileApplication};
|
|
2
2
|
//# sourceMappingURL=profile-plan.js.map
|
|
@@ -1,2 +1,26 @@
|
|
|
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]="59d16a38-d6df-5695-96e3-28b6e384f76b")}catch{}})();import{TYPE_PRESET_DEFINITIONS}from"../schema/type-presets.js";const PROFILE_NAMES=["agile","ops","research"],BUILTIN_PROFILES={agile:{name:"agile",title:"Agile delivery",summary:"Story/Spike delivery with a review stage, story points, and acceptance ownership.",types:TYPE_PRESET_DEFINITIONS.agile,statuses:[{id:"review",roles:["active"],aliases:["in-review"],description:"Work is implementation-complete and awaiting peer review."}],fields:[{key:"story_points",type:"number",commands:["create","update","list"],description:"Relative estimation size for a story or spike.",aliases:["points"]},{key:"acceptance_owner",type:"string",commands:["create","update","list"],description:"Stakeholder accountable for accepting the delivered story.",aliases:["acceptor"]}],workflows:[{type:"Story",allowed_transitions:[["open","in_progress"],["in_progress","review"],["review","in_progress"],["review","closed"],["in_progress","blocked"],["blocked","in_progress"]]}],config:[{key:"search_provider",value:"bm25",summary:"Offline BM25 lexical search works without an embedding service."},{key:"search_max_results",value:"20",summary:"Sprint-sized result cap for quick triage."}],templates:[{name:"story",options:{type:"Story",priority:"2",tags:"story",acceptanceCriteria:"Story delivers the stated user outcome with tests and docs updated.",body:`## As a
|
|
2
|
+
|
|
3
|
+
## I want
|
|
4
|
+
|
|
5
|
+
## So that
|
|
6
|
+
|
|
7
|
+
## Acceptance
|
|
8
|
+
- [ ]
|
|
9
|
+
`}}],packages:[{spec:"templates",reason:"Reusable create templates for recurring story shapes."},{spec:"calendar",reason:"Sprint and iteration scheduling views."},{spec:"search-advanced",reason:"Richer retrieval as the backlog grows."}]},ops:{name:"ops",title:"Operations",summary:"Incident/Runbook response with mitigation and monitoring stages, severity, and service fields.",types:TYPE_PRESET_DEFINITIONS.ops,statuses:[{id:"mitigating",roles:["active"],aliases:["mitigation"],description:"Active mitigation is underway to restore service."},{id:"monitoring",roles:["active"],aliases:["observing"],description:"Mitigation applied; monitoring for recurrence before closure."}],fields:[{key:"severity",type:"string",commands:["create","update","list"],description:"Incident severity classification (e.g. sev1, sev2, sev3).",aliases:["sev"]},{key:"service",type:"string",commands:["create","update","list"],description:"Primary affected service or component."}],workflows:[{type:"Incident",allowed_transitions:[["open","mitigating"],["mitigating","monitoring"],["monitoring","mitigating"],["monitoring","closed"],["mitigating","blocked"],["blocked","mitigating"]]}],config:[{key:"search_provider",value:"bm25",summary:"Offline BM25 lexical search for fast incident lookup."},{key:"search_max_results",value:"25",summary:"Wider result cap to surface related incidents and runbooks."}],templates:[{name:"incident",options:{type:"Incident",priority:"1",tags:"incident",acceptanceCriteria:"Service restored, root cause documented, and follow-ups filed.",body:`## Impact
|
|
10
|
+
|
|
11
|
+
## Timeline
|
|
12
|
+
|
|
13
|
+
## Root cause
|
|
14
|
+
|
|
15
|
+
## Mitigation
|
|
16
|
+
|
|
17
|
+
## Follow-ups
|
|
18
|
+
`}}],packages:[{spec:"lifecycle-hooks",reason:"Automate transitions and notifications on incident state changes."},{spec:"governance-audit",reason:"Audit incident metadata completeness and closure quality."},{spec:"calendar",reason:"On-call and follow-up scheduling."}]},research:{name:"research",title:"Research",summary:"Experiment/Hypothesis investigation with an analysis stage, hypothesis, and method fields.",types:TYPE_PRESET_DEFINITIONS.research,statuses:[{id:"analyzing",roles:["active"],aliases:["analysis"],description:"Data collected; analysis and synthesis in progress."}],fields:[{key:"hypothesis",type:"string",commands:["create","update"],description:"The testable claim the experiment evaluates."},{key:"method",type:"string",commands:["create","update","list"],description:"Experimental method or protocol used to evaluate the hypothesis.",aliases:["protocol"]}],workflows:[{type:"Experiment",allowed_transitions:[["open","in_progress"],["in_progress","analyzing"],["analyzing","in_progress"],["analyzing","closed"],["in_progress","blocked"],["blocked","in_progress"]]}],config:[{key:"search_provider",value:"bm25",summary:"Offline BM25 lexical search across the research corpus."},{key:"search_max_results",value:"50",summary:"Broader recall cap for literature and prior-experiment discovery."}],templates:[{name:"experiment",options:{type:"Experiment",priority:"2",tags:"experiment",acceptanceCriteria:"Hypothesis is supported, rejected, or refined with recorded evidence.",body:`## Hypothesis
|
|
19
|
+
|
|
20
|
+
## Method
|
|
21
|
+
|
|
22
|
+
## Results
|
|
23
|
+
|
|
24
|
+
## Conclusion
|
|
25
|
+
`}}],packages:[{spec:"search-advanced",reason:"Semantic retrieval over experiments and findings."},{spec:"templates",reason:"Consistent experiment and hypothesis scaffolds."},{spec:"beads",reason:"Import structured prior work into the tracker."}]}};function normalizeProfileName(rawValue){if(rawValue===void 0)return;const normalized=normalizeProfileLookupKey(rawValue);if(normalized.length===0)throw new Error("Profile name must not be empty.");if(PROFILE_NAMES.includes(normalized))return normalized;throw new Error(`Invalid profile "${rawValue}". Allowed: ${PROFILE_NAMES.join(", ")}.`)}function resolveProfile(rawValue){const name=normalizeProfileName(rawValue);if(name===void 0)throw new Error(`Profile name is required. Allowed: ${PROFILE_NAMES.join(", ")}.`);return BUILTIN_PROFILES[name]}function listProfiles(){return PROFILE_NAMES.map(name=>BUILTIN_PROFILES[name])}function normalizeProfileLookupKey(rawValue){return rawValue.trim().toLowerCase().replaceAll("-","_")}function formatAvailableProfileNames(profiles){return profiles.map(entry=>entry.definition.name).join(", ")}function resolveProfileCatalog(contributions=[]){const profiles=PROFILE_NAMES.map(name=>({definition:BUILTIN_PROFILES[name],source:"builtin"})),builtinKeys=new Set(PROFILE_NAMES.map(name=>normalizeProfileLookupKey(name))),seen=new Set(builtinKeys),warnings=[];for(const contribution of contributions){const key=normalizeProfileLookupKey(contribution.profile.name);if(builtinKeys.has(key)){warnings.push(`Extension "${contribution.name}" profile "${contribution.profile.name}" uses a name reserved by a built-in archetype and was ignored.`);continue}if(seen.has(key)){warnings.push(`Profile "${contribution.profile.name}" from extension "${contribution.name}" duplicates an already-registered profile and was ignored.`);continue}seen.add(key),profiles.push({definition:contribution.profile,source:"extension",package:contribution.name})}return{profiles,warnings}}function resolveProfileEntry(rawValue,contributions=[]){const{profiles,warnings}=resolveProfileCatalog(contributions);if(typeof rawValue!="string"||rawValue.trim().length===0)throw new Error(`Profile name is required. Allowed: ${formatAvailableProfileNames(profiles)}.`);const key=normalizeProfileLookupKey(rawValue),match=profiles.find(entry=>normalizeProfileLookupKey(entry.definition.name)===key);if(match===void 0)throw new Error(`Invalid profile "${rawValue}". Allowed: ${formatAvailableProfileNames(profiles)}.`);return{resolved:match,warnings}}export{BUILTIN_PROFILES,PROFILE_NAMES,listProfiles,normalizeProfileLookupKey,normalizeProfileName,resolveProfile,resolveProfileCatalog,resolveProfileEntry};
|
|
2
26
|
//# sourceMappingURL=profile-presets.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]="ced47074-06d3-53b9-af75-63586cbd4f6a")}catch{}})();import crypto from"node:crypto";import{AsyncLocalStorage}from"node:async_hooks";const executionStorage=new AsyncLocalStorage,MAX_REPRODUCIBLE_TOKEN_LENGTH=1024;function validateReproducibleExecutionSettings(settings){const clockMs=Date.parse(settings.clock);if(!Number.isFinite(clockMs))throw new Error(`Invalid reproducible workspace clock: ${settings.clock}`);if(!Number.isSafeInteger(settings.tickMs)||settings.tickMs<0)throw new Error("Reproducible workspace tickMs must be a non-negative integer");if(settings.seed.trim().length===0)throw new Error("Reproducible workspace seed must not be empty");return{...settings,clock:new Date(clockMs).toISOString()}}function createReproducibleExecutionRunner(settings){const state={...validateReproducibleExecutionSettings(settings),clockReads:0,tokenReads:0};return operation=>executionStorage.run(state,operation)}async function runWithReproducibleExecution(settings,operation){return createReproducibleExecutionRunner(settings)(operation)}function nextReproducibleTimestamp(){const state=executionStorage.getStore();if(state===void 0)return;const timestamp=new Date(Date.parse(state.clock)+state.clockReads*state.tickMs).toISOString();return state.clockReads+=1,timestamp}function nextReproducibleToken(length){const state=executionStorage.getStore();if(state===void 0)return;if(!Number.isSafeInteger(length)||length<0||length>MAX_REPRODUCIBLE_TOKEN_LENGTH)throw new Error(`Reproducible token length must be an integer between 0 and ${MAX_REPRODUCIBLE_TOKEN_LENGTH}`);let token="";for(;token.length<length;){const digest=crypto.createHash("sha256").update(`${state.seed}\0${state.tokenReads}`).digest();state.tokenReads+=1;for(const byte of digest)if(token+=(byte%36).toString(36),token.length===length)break}return token}export{createReproducibleExecutionRunner,nextReproducibleTimestamp,nextReproducibleToken,runWithReproducibleExecution,validateReproducibleExecutionSettings};
|
|
2
2
|
//# sourceMappingURL=context.js.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
`}function upsertField(file,input){const existing=file.fields.find(definition=>normalizeFieldKey(definition.key)===input.key)
|
|
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]="68be16cc-4cb4-5df6-90f0-897d4fe82339")}catch{}})();import{RUNTIME_FIELD_COMMAND_VALUES,RUNTIME_FIELD_TYPE_VALUES}from"../../types/index.js";import{ITEM_METADATA_KEY_ORDER}from"../shared/constants.js";import{normalizeStatusToken as normalizeFieldKey}from"./status-token.js";import{normalizeStatusToken}from"./status-token.js";const RUNTIME_FIELD_TYPE_SET=new Set(RUNTIME_FIELD_TYPE_VALUES),RUNTIME_FIELD_COMMAND_SET=new Set(RUNTIME_FIELD_COMMAND_VALUES),BUILTIN_FIELD_KEYS=new Set([...ITEM_METADATA_KEY_ORDER.filter(key=>key!=="severity"),"id","title","type","status","priority","tags","assignee","parent","description","body","created_at","updated_at","closed_at","completed_at","author","deadline","estimate","sprint","release","risk","confidence","reviewer","resolution","expected","actual"]),DEFAULT_FIELD_COMMANDS=["create","update"];function normalizeCliToken(value){if(typeof value!="string")return"";const collapsed=value.trim().toLowerCase().replaceAll(/[\s_]+/g,"-");return collapsed.startsWith("--")?collapsed.slice(2):collapsed}function keyToDefaultCliFlag(key){return key.replaceAll("_","-")}function dedupeCliTokens(values,exclude){const seen=new Set;for(const value of values){const token=normalizeCliToken(value);token.length>0&&token!==exclude&&seen.add(token)}return[...seen].sort((left,right)=>left.localeCompare(right))}function dedupeStringList(values){const seen=new Set;for(const value of values??[]){const trimmed=value.trim();trimmed.length>0&&seen.add(trimmed)}return[...seen].sort((left,right)=>left.localeCompare(right))}function normalizeFieldCommands(rawCommands){const seen=new Set,normalized=[];for(const rawCommand of rawCommands??[]){const command=rawCommand.trim().toLowerCase();if(command.length!==0){if(!RUNTIME_FIELD_COMMAND_SET.has(command))throw new Error(`Invalid field command "${rawCommand}". Allowed: ${RUNTIME_FIELD_COMMAND_VALUES.join(", ")}.`);seen.has(command)||(seen.add(command),normalized.push(command))}}return rawCommands===void 0||normalized.length===0?[...DEFAULT_FIELD_COMMANDS]:normalized}function normalizeAddFieldInput(raw){const key=normalizeFieldKey(raw.key);if(key.length===0)throw new Error("Field key must not be empty.");if(BUILTIN_FIELD_KEYS.has(key))throw new Error(`Cannot define custom field "${key}": custom schema field "${key}" collides with built-in item metadata "${key}". Rename the custom field with a project-specific prefix. Reserved fields: ${[...BUILTIN_FIELD_KEYS].sort((left,right)=>left.localeCompare(right)).join(", ")}.`);const typeCandidate=typeof raw.type=="string"&&raw.type.trim().length>0?raw.type.trim().toLowerCase():"string";if(!RUNTIME_FIELD_TYPE_SET.has(typeCandidate))throw new Error(`Invalid field type "${raw.type}". Allowed: ${RUNTIME_FIELD_TYPE_VALUES.join(", ")}.`);const type=typeCandidate,commands=normalizeFieldCommands(raw.commands),cliFlagToken=normalizeCliToken(raw.cliFlag),cliFlag=cliFlagToken.length>0&&cliFlagToken!==keyToDefaultCliFlag(key)?cliFlagToken:void 0,effectiveFlag=cliFlag??keyToDefaultCliFlag(key),cliAliases=dedupeCliTokens(raw.aliases??[],effectiveFlag),description=raw.description?.trim();return{key,type,commands,description:description&&description.length>0?description:void 0,cliFlag,cliAliases,required:raw.required===!0,requiredOnCreate:raw.requiredOnCreate===!0,allowUnset:raw.allowUnset!==!1,requiredTypes:dedupeStringList(raw.requiredTypes)}}function selectFieldsArray(parsed){if(Array.isArray(parsed))return parsed;if(typeof parsed!="object"||parsed===null)return;const record=parsed;if(Array.isArray(record.fields))return record.fields;if(Array.isArray(record.definitions))return record.definitions}function extractFieldDefinitions(parsed){const candidate=selectFieldsArray(parsed);if(!candidate)return[];const definitions=[];for(const entry of candidate){if(typeof entry!="object"||entry===null||Array.isArray(entry))continue;const record=entry;typeof record.key!="string"||record.key.trim().length===0||definitions.push(record)}return definitions}function parseFieldsFile(raw){if(raw==null||raw.trim().length===0)return{fields:[]};let parsed;try{parsed=JSON.parse(raw)}catch{throw new Error("schema/fields.json contains invalid JSON.")}return{fields:extractFieldDefinitions(parsed)}}function serializeFieldsFile(file){return`${JSON.stringify({fields:file.fields},null,2)}
|
|
2
|
+
`}function upsertField(file,input){const existing=file.fields.find(definition=>normalizeFieldKey(definition.key)===input.key),replaced=existing!==void 0,fields=file.fields.filter(definition=>normalizeFieldKey(definition.key)!==input.key),next={...existing,key:input.key,type:input.type,commands:[...input.commands]};return applyOptionalString(next,"description",input.description),applyOptionalString(next,"cli_flag",input.cliFlag),input.cliAliases.length>0?next.cli_aliases=[...input.cliAliases]:delete next.cli_aliases,applyBooleanFlag(next,"required",input.required),applyBooleanFlag(next,"required_on_create",input.requiredOnCreate),input.allowUnset===!1?next.allow_unset=!1:delete next.allow_unset,input.requiredTypes.length>0?next.required_types=[...input.requiredTypes]:delete next.required_types,fields.push(next),fields.sort((left,right)=>normalizeFieldKey(left.key).localeCompare(normalizeFieldKey(right.key))),{file:{fields},definition:next,replaced}}function removeField(file,key){const normalizedKey=normalizeFieldKey(key);if(normalizedKey.length===0)throw new Error("Field key must not be empty.");const removed=[],fields=file.fields.filter(definition=>normalizeFieldKey(definition.key)===normalizedKey?(removed.push(definition),!1):!0);return removed.length===0?{file:{fields},removed:!1}:{file:{fields},removed:!0,definition:removed[0]}}function applyOptionalString(definition,key,value){const record=definition;value!==void 0&&value.length>0?record[key]=value:delete record[key]}function applyBooleanFlag(definition,key,value){const record=definition;value?record[key]=!0:delete record[key]}export{BUILTIN_FIELD_KEYS,normalizeAddFieldInput,normalizeStatusToken as normalizeFieldKey,parseFieldsFile,removeField,serializeFieldsFile,upsertField};
|
|
3
3
|
//# sourceMappingURL=fields-file.js.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
`}function buildInvalidTypeHint(name,typesFilePath){const safeName=name.trim().length>0?name.trim():name
|
|
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]="158d5065-075c-5355-a65c-f3edc9c5f1f0")}catch{}})();import{BUILTIN_ITEM_TYPE_VALUES}from"../../types/index.js";import{normalizeItemTypeFolder,toDefaultFolder}from"../item/type-registry.js";const BUILTIN_NAME_LOOKUP=new Map(BUILTIN_ITEM_TYPE_VALUES.map(name=>[name.toLowerCase(),name])),TYPE_NAME_TOKEN_PATTERN=/^[A-Za-z][A-Za-z0-9_-]*$/;function assertValidTypeToken(value,label){if(!TYPE_NAME_TOKEN_PATTERN.test(value))throw new Error(`${label} "${value}" is not a valid identifier. Use a single letter-led token of letters, digits, hyphen, or underscore with no spaces or punctuation (e.g. "Spike" or "code-review").`)}function matchBuiltinTypeName(name){return BUILTIN_NAME_LOOKUP.get(name.trim().toLowerCase())}function coerceAliasArray(value){return Array.isArray(value)?value.filter(entry=>typeof entry=="string"):[]}function escapeForDoubleQuotes(value){return value.replace(/[\\"`$]/g,char=>`\\${char}`)}function dedupeAliases(values){const seen=new Map;for(const value of values){const trimmed=value.trim();if(trimmed.length===0)continue;const key=trimmed.toLowerCase();seen.has(key)||seen.set(key,trimmed)}return[...seen.values()].sort((left,right)=>left.localeCompare(right))}function normalizeAddTypeInput(raw){const name=(raw.name??"").trim();if(name.length===0)throw new Error("Type name must not be empty.");assertValidTypeToken(name,"Type name");const builtinMatch=matchBuiltinTypeName(name);if(builtinMatch)throw new Error(`Cannot redefine built-in item type "${builtinMatch}". Built-in types are reserved: ${BUILTIN_ITEM_TYPE_VALUES.join(", ")}.`);const description=raw.description?.trim(),defaultStatus=raw.defaultStatus?.trim(),rawFolder=raw.folder?.trim(),folder=rawFolder&&rawFolder.length>0?normalizeItemTypeFolder(rawFolder):void 0,aliases=dedupeAliases(raw.aliases??[]);for(const alias of aliases){assertValidTypeToken(alias,"Alias");const aliasBuiltin=matchBuiltinTypeName(alias);if(aliasBuiltin)throw new Error(`Alias "${alias}" collides with built-in item type "${aliasBuiltin}". Built-in types are reserved: ${BUILTIN_ITEM_TYPE_VALUES.join(", ")}.`)}return{name,description:description&&description.length>0?description:void 0,defaultStatus:defaultStatus&&defaultStatus.length>0?defaultStatus:void 0,folder,aliases}}function assertAliasesAvailable(input,existing){const selfLower=input.name.toLowerCase(),taken=new Map;for(const definition of existing.definitions){if(typeof definition.name!="string")continue;const definitionName=definition.name.trim();if(!(definitionName.length===0||definitionName.toLowerCase()===selfLower)){taken.set(definitionName.toLowerCase(),definitionName);for(const alias of coerceAliasArray(definition.aliases))alias.trim().length>0&&taken.set(alias.trim().toLowerCase(),definitionName)}}const nameOwner=taken.get(selfLower);if(nameOwner)throw new Error(`Type name "${input.name}" collides with an alias of existing item type "${nameOwner}".`);for(const alias of input.aliases){const owner=taken.get(alias.toLowerCase());if(owner)throw new Error(`Alias "${alias}" already maps to existing item type "${owner}".`)}}function resolveDefinitionFolder(name,folder){return typeof folder=="string"&&folder.trim().length>0?normalizeItemTypeFolder(folder).toLowerCase():toDefaultFolder(name).toLowerCase()}function assertTypeFolderAvailable(input,existing,reservedFolders){const selfLower=input.name.toLowerCase(),inputFolder=resolveDefinitionFolder(input.name,input.folder),fail=ownerName=>{throw new Error(`Item type "${input.name}" would store items in folder "${inputFolder}", which already belongs to existing item type "${ownerName}". Pass a distinct --folder to keep their storage separate.`)};for(const definition of existing.definitions){if(typeof definition.name!="string")continue;const definitionName=definition.name.trim();definitionName.length===0||definitionName.toLowerCase()===selfLower||resolveDefinitionFolder(definitionName,definition.folder)===inputFolder&&fail(definitionName)}const reservedOwner=reservedFolders?.get(inputFolder);reservedOwner!==void 0&&reservedOwner.toLowerCase()!==selfLower&&fail(reservedOwner)}function parseItemTypesFile(raw){if(raw==null||raw.trim().length===0)return{definitions:[]};let parsed;try{parsed=JSON.parse(raw)}catch{throw new Error("schema/types.json contains invalid JSON.")}return{definitions:extractDefinitions(parsed)}}function extractDefinitions(parsed){const candidate=selectDefinitionsArray(parsed);if(!candidate)return[];const definitions=[];for(const entry of candidate){if(typeof entry!="object"||entry===null||Array.isArray(entry))continue;const record=entry;typeof record.name!="string"||record.name.trim().length===0||definitions.push(record)}return definitions}function selectDefinitionsArray(parsed){if(Array.isArray(parsed))return parsed;if(typeof parsed!="object"||parsed===null)return;const record=parsed;if(Array.isArray(record.definitions))return record.definitions;if(typeof record.item_types=="object"&&record.item_types!==null){const nested=record.item_types;if(Array.isArray(nested.definitions))return nested.definitions}}function upsertItemType(file,input){const lowerName=input.name.toLowerCase(),definitions=file.definitions.slice(),existingIndex=definitions.findIndex(definition=>typeof definition.name=="string"&&definition.name.trim().toLowerCase()===lowerName),existing=existingIndex>=0?definitions[existingIndex]:void 0,mergedAliases=dedupeAliases([...coerceAliasArray(existing?.aliases),...input.aliases]),next={...existing,name:input.name};return input.folder!==void 0&&(next.folder=input.folder),mergedAliases.length>0?next.aliases=mergedAliases:next.aliases!==void 0&&delete next.aliases,applyAttribute(next,"description",input.description),applyAttribute(next,"default_status",input.defaultStatus),existingIndex>=0?definitions[existingIndex]=next:definitions.push(next),definitions.sort((left,right)=>left.name.localeCompare(right.name)),{file:{definitions},definition:next,replaced:existingIndex>=0,...existing&&typeof existing.name=="string"?{previousName:existing.name}:{}}}function removeItemType(file,name){const trimmed=(name??"").trim();if(trimmed.length===0)throw new Error("Type name must not be empty.");const builtinMatch=matchBuiltinTypeName(trimmed);if(builtinMatch)throw new Error(`Cannot remove built-in item type "${builtinMatch}". Built-in types are reserved: ${BUILTIN_ITEM_TYPE_VALUES.join(", ")}.`);const lowerName=trimmed.toLowerCase(),definitions=file.definitions.slice(),existingIndex=definitions.findIndex(definition2=>typeof definition2.name=="string"&&definition2.name.trim().toLowerCase()===lowerName);if(existingIndex<0)return{file:{definitions},removed:!1};const[definition]=definitions.splice(existingIndex,1);return{file:{definitions},removed:!0,definition}}function applyAttribute(definition,key,value){const record=definition;value!==void 0&&(record[key]=value)}function serializeItemTypesFile(file){return`${JSON.stringify({definitions:file.definitions},null,2)}
|
|
2
|
+
`}function buildInvalidTypeHint(name,typesFilePath){const safeName=name.trim().length>0?name.trim():name,target=typesFilePath?.trim()||".agents/pm/schema/types.json";return`To register a custom type, run: pm schema add-type "${escapeForDoubleQuotes(safeName)}" (writes ${target}).`}function buildInvalidTypeError(name,allowedTypes,typesFilePath){return`Invalid type value "${name}". Allowed: ${allowedTypes.join(", ")}. ${buildInvalidTypeHint(name,typesFilePath)}`}export{assertAliasesAvailable,assertTypeFolderAvailable,buildInvalidTypeError,buildInvalidTypeHint,escapeForDoubleQuotes,matchBuiltinTypeName,normalizeAddTypeInput,parseItemTypesFile,removeItemType,serializeItemTypesFile,upsertItemType};
|
|
3
3
|
//# sourceMappingURL=item-types-file.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]="4b79bd02-51ae-5c46-be4c-2f41dd8c9486")}catch{}})();import{coerceRuntimeFieldValue,readRuntimeFieldOptionValue}from"./runtime-field-values.js";import{stableValueEquals}from"../shared/serialization.js";function valuesEqual(left,right){return stableValueEquals(left,right)}function collectRuntimeFilterValues(options,fieldRegistry,command){const filters={};for(const definition of fieldRegistry.command_to_fields.get(command)??[]){const rawValue=readRuntimeFieldOptionValue(options,definition);rawValue!==void 0&&(filters[definition.metadata_key]=coerceRuntimeFieldValue(definition,rawValue))}return filters}function matchesRuntimeFilters(item,filters){for(const[fieldKey,expectedValue]of Object.entries(filters)){const actualValue=item[fieldKey];if(Array.isArray(expectedValue)){if(Array.isArray(actualValue)){const normalizedActual=actualValue.map(value=>String(value));if(!expectedValue.map(value=>String(value)).every(value=>normalizedActual.includes(value)))return!1;continue}if(!valuesEqual(actualValue,expectedValue[expectedValue.length-1]))return!1;continue}if(!valuesEqual(actualValue,expectedValue))return!1}return!0}export{collectRuntimeFilterValues,matchesRuntimeFilters};
|
|
2
2
|
//# sourceMappingURL=runtime-field-filters.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]="5a40c811-2441-5507-93d2-523f6792e2f1")}catch{}})();import{EXIT_CODE}from"../shared/constants.js";import{PmCliError}from"../shared/errors.js";import{stableStringify}from"../shared/serialization.js";import{isRfc3339DateTime}from"../shared/time.js";import{runtimeFieldOptionTarget}from"./runtime-schema.js";const MAX_VALUE_SCHEMA_DEPTH=16;function toCamelToken(value){const segments=value.trim().replaceAll(/[^A-Za-z0-9]+/g," ").split(/\s+/).filter(segment=>segment.length>0).map(segment=>segment.toLowerCase());if(segments.length===0)return value;const[first,...rest]=segments;return`${first}${rest.map(segment=>`${segment.slice(0,1).toUpperCase()}${segment.slice(1)}`).join("")}`}function resolveCandidateOptionKeys(definition){return[...new Set([runtimeFieldOptionTarget(definition),toCamelToken(definition.key),toCamelToken(definition.cli_flag),...definition.cli_aliases.map(alias=>toCamelToken(alias))])]}function readRuntimeFieldOptionValue(options,definition){for(const candidateKey of resolveCandidateOptionKeys(definition)){if(!Object.hasOwn(options,candidateKey))continue;const value=options[candidateKey];if(value!==void 0)return value}}function normalizeStringArrayValue(value){return Array.isArray(value)?value.flatMap(entry=>normalizeStringArrayValue(entry)).map(entry=>entry.trim()).filter(entry=>entry.length>0):typeof value=="string"?value.split(/[,\n|]/).map(entry=>entry.trim()).filter(entry=>entry.length>0):value==null?[]:[String(value).trim()].filter(entry=>entry.length>0)}function parseBooleanValue(raw,label){if(typeof raw=="boolean")return raw;if(typeof raw=="number"){if(raw===1)return!0;if(raw===0)return!1}if(typeof raw=="string"){const normalized=raw.trim().toLowerCase();if(normalized==="true"||normalized==="1"||normalized==="yes")return!0;if(normalized==="false"||normalized==="0"||normalized==="no")return!1}throw new PmCliError(`${label} must be one of true|false|1|0|yes|no`,EXIT_CODE.USAGE)}function parseNumberValue(raw,label){if(typeof raw=="number"&&Number.isFinite(raw))return raw;const candidate=typeof raw=="string"?raw.trim():String(raw),parsed=Number(candidate);if(!Number.isFinite(parsed))throw new PmCliError(`${label} must be a number`,EXIT_CODE.USAGE);return parsed}function parseJsonContainerValue(raw,label,expectedType){const parsed=typeof raw=="string"?(()=>{try{return JSON.parse(raw)}catch{return}})():raw;if(expectedType==="array"&&Array.isArray(parsed)||expectedType==="object"&&typeof parsed=="object"&&parsed!==null&&!Array.isArray(parsed))return parsed;throw new PmCliError(`${label} must be valid JSON ${expectedType}`,EXIT_CODE.USAGE)}function valueMatchesSchemaType(value,type){return type===void 0?!0:type==="array"?Array.isArray(value):type==="object"?typeof value=="object"&&value!==null&&!Array.isArray(value):typeof value===type}function runtimeFieldPrimitiveSchemaError(value,schema,path){if(schema.const!==void 0&&stableStringify(value)!==stableStringify(schema.const))return`${path} must equal ${stableStringify(schema.const)}`;if(schema.enum!==void 0&&!schema.enum.some(candidate=>stableStringify(candidate)===stableStringify(value)))return`${path} must be one of ${schema.enum.map(entry=>stableStringify(entry)).join("|")}`;if(!valueMatchesSchemaType(value,schema.type))return`${path} must match configured type ${String(schema.type)}`;if(typeof value=="string"){if(schema.min_length!==void 0&&value.length<schema.min_length)return`${path} must contain at least ${schema.min_length} characters`;if(schema.format==="date-time"&&!isRfc3339DateTime(value))return`${path} must be an RFC 3339 date-time`}}function runtimeFieldArraySchemaError(value,schema,path,depth){if(Array.isArray(value)){if(schema.min_items!==void 0&&value.length<schema.min_items)return`${path} must contain at least ${schema.min_items} items`;if(schema.items)for(const[index,entry]of value.entries()){const error=runtimeFieldSchemaError(entry,schema.items,`${path}[${index}]`,depth+1);if(error)return error}}}function runtimeFieldObjectSchemaError(value,schema,path,depth){if(typeof value!="object"||value===null||Array.isArray(value))return;const record=value;for(const key of schema.required??[])if(!Object.hasOwn(record,key))return`${path}.${key} is required`;for(const[key,entry]of Object.entries(record)){const propertySchema=schema.properties?.[key];if(!propertySchema){if(schema.additional_properties===!1)return`${path}.${key} is not allowed`;continue}const error=runtimeFieldSchemaError(entry,propertySchema,`${path}.${key}`,depth+1);if(error)return error}}function runtimeFieldSchemaError(value,schema,path,depth=0){if(depth>MAX_VALUE_SCHEMA_DEPTH)return`${path} value schema exceeds maximum depth`;const directError=runtimeFieldPrimitiveSchemaError(value,schema,path);if(directError)return directError;const arrayError=runtimeFieldArraySchemaError(value,schema,path,depth);if(arrayError)return arrayError;const objectError=runtimeFieldObjectSchemaError(value,schema,path,depth);if(objectError)return objectError;if(!schema.one_of)return;let matches=0;for(const candidate of schema.one_of)if(runtimeFieldSchemaError(value,candidate,path,depth+1)===void 0&&(matches+=1,matches>1))break;return matches===1?void 0:`${path} must match exactly one configured schema variant`}function validateRuntimeFieldValue(definition,value,label){if(!definition.value_schema||value===void 0)return value;const error=runtimeFieldSchemaError(value,definition.value_schema,label);if(error)throw new PmCliError(error,EXIT_CODE.USAGE);return value}function coerceRuntimeFieldValue(definition,rawValue,labelOverride){const label=labelOverride??`--${definition.cli_flag}`;if(definition.type==="array"||definition.type==="object"){const containerRaw=Array.isArray(rawValue)?rawValue[rawValue.length-1]:rawValue;return containerRaw===void 0?void 0:validateRuntimeFieldValue(definition,parseJsonContainerValue(containerRaw,label,definition.type),label)}if(definition.repeatable||definition.type==="string_array"){const values=normalizeStringArrayValue(rawValue);return definition.type==="number"?validateRuntimeFieldValue(definition,values.map(value=>parseNumberValue(value,label)),label):definition.type==="boolean"?validateRuntimeFieldValue(definition,values.map(value=>parseBooleanValue(value,label)),label):validateRuntimeFieldValue(definition,values,label)}const scalarRaw=Array.isArray(rawValue)?rawValue[rawValue.length-1]:rawValue;if(scalarRaw!==void 0)return definition.type==="number"?validateRuntimeFieldValue(definition,parseNumberValue(scalarRaw,label),label):definition.type==="boolean"?validateRuntimeFieldValue(definition,parseBooleanValue(scalarRaw,label),label):validateRuntimeFieldValue(definition,typeof scalarRaw=="string"?scalarRaw:String(scalarRaw),label)}function shouldRequireFieldOnCreate(definition,itemTypeName){return!definition.required&&!definition.required_on_create?!1:definition.required_types.length===0?!0:itemTypeName?definition.required_types.map(value=>value.toLowerCase()).includes(itemTypeName.trim().toLowerCase()):!1}function collectRuntimeCreateFieldValues(options,fieldRegistry,itemTypeName){const values={},missingRequiredFlags=[];for(const definition of fieldRegistry.command_to_fields.get("create")??[]){const rawValue=readRuntimeFieldOptionValue(options,definition);if(rawValue===void 0){shouldRequireFieldOnCreate(definition,itemTypeName)&&missingRequiredFlags.push(`--${definition.cli_flag}`);continue}values[definition.metadata_key]=coerceRuntimeFieldValue(definition,rawValue)}return{values,missing_required_flags:[...new Set(missingRequiredFlags)].sort((left,right)=>left.localeCompare(right))}}function collectRuntimeUpdateFieldValues(options,fieldRegistry,commands=["update"]){const values={},definitions=(commands??["update"]).flatMap(command=>fieldRegistry.command_to_fields.get(command)??[]),seen=new Set;for(const definition of definitions){const rawValue=readRuntimeFieldOptionValue(options,definition);rawValue!==void 0&&(seen.has(definition.metadata_key)||(seen.add(definition.metadata_key),values[definition.metadata_key]=coerceRuntimeFieldValue(definition,rawValue)))}return values}export{coerceRuntimeFieldValue,collectRuntimeCreateFieldValues,collectRuntimeUpdateFieldValues,readRuntimeFieldOptionValue};
|
|
2
2
|
//# sourceMappingURL=runtime-field-values.js.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
!(function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="5e083565-3e07-5fb3-81ce-c392feaa8630")}catch(e2){}})();import path from"node:path";import{pathExists,readFileIfExists}from"../fs/fs-utils.js";import{createFileAtomic}from"../fs/atomic-create.js";import{DEFAULT_STATUS_DEFINITIONS,DEFAULT_WORKFLOW_DEFINITION}from"../shared/constants.js";import{RUNTIME_FIELD_COMMAND_VALUES,RUNTIME_FIELD_TYPE_VALUES,RUNTIME_STATUS_ROLE_VALUES,RUNTIME_UNKNOWN_FIELD_POLICY_VALUES,STATUS_VALUES}from"../../types/index.js";import{normalizeStatusToken}from"./status-token.js";const DEFAULT_RUNTIME_SCHEMA_FILE_PATHS=Object.freeze({types:"schema/types.json",statuses:"schema/statuses.json",fields:"schema/fields.json",workflows:"schema/workflows.json"});const DEFAULT_RUNTIME_WORKFLOW=DEFAULT_WORKFLOW_DEFINITION;const DEFAULT_RUNTIME_STATUS_DEFINITIONS=DEFAULT_STATUS_DEFINITIONS;const DEFAULT_RUNTIME_FIELD_COMMANDS=["create","update"];const RUNTIME_STATUS_ROLE_SET=new Set(RUNTIME_STATUS_ROLE_VALUES);const RUNTIME_FIELD_TYPE_SET=new Set(RUNTIME_FIELD_TYPE_VALUES);const RUNTIME_FIELD_COMMAND_SET=new Set(RUNTIME_FIELD_COMMAND_VALUES);const RUNTIME_UNKNOWN_FIELD_POLICY_SET=new Set(RUNTIME_UNKNOWN_FIELD_POLICY_VALUES);const RUNTIME_FIELD_VALUE_TYPE_SET=new Set(["string","number","boolean","array","object"]);const MAX_RUNTIME_FIELD_VALUE_SCHEMA_DEPTH=16;function isPlainObject(value){return typeof value==="object"&&value!==null&&!Array.isArray(value)}const RUNTIME_FIELD_VALUE_SCHEMA_SHAPE_VALIDATORS=[schema=>schema.type===void 0||typeof schema.type==="string"&&RUNTIME_FIELD_VALUE_TYPE_SET.has(schema.type),schema=>!Object.hasOwn(schema,"const")||isStructuredJsonValue(schema.const),schema=>schema.enum===void 0||Array.isArray(schema.enum)&&schema.enum.every(entry=>isStructuredJsonValue(entry)),schema=>schema.min_length===void 0||Number.isInteger(schema.min_length)&&schema.min_length>=0,schema=>schema.min_items===void 0||Number.isInteger(schema.min_items)&&schema.min_items>=0,schema=>schema.format===void 0||schema.format==="date-time",schema=>schema.required===void 0||Array.isArray(schema.required)&&schema.required.every(entry=>typeof entry==="string"&&entry.length>0),schema=>schema.additional_properties===void 0||typeof schema.additional_properties==="boolean",schema=>schema.properties===void 0||isPlainObject(schema.properties),schema=>schema.one_of===void 0||Array.isArray(schema.one_of)&&schema.one_of.length>0];function isStructuredJsonValue(value,ancestors=new Set){if(value===null||typeof value==="string"||typeof value==="boolean"){return true}if(typeof value==="number")return Number.isFinite(value);if(typeof value!=="object"||ancestors.has(value))return false;ancestors.add(value);const valid=Array.isArray(value)?value.every(entry=>isStructuredJsonValue(entry,ancestors)):Object.values(value).every(entry=>isStructuredJsonValue(entry,ancestors));ancestors.delete(value);return valid}function normalizeRuntimeFieldValueSchema(value,depth=0,ancestors=new Set){if(!isPlainObject(value)||depth>MAX_RUNTIME_FIELD_VALUE_SCHEMA_DEPTH||ancestors.has(value)){return void 0}ancestors.add(value);const schema=value;const type=schema.type;const enumValues=schema.enum;const oneOf=schema.one_of;const properties=schema.properties;const items=schema.items;const required=schema.required;const minLength=schema.min_length;const minItems=schema.min_items;const format=schema.format;const additionalProperties=schema.additional_properties;if(!RUNTIME_FIELD_VALUE_SCHEMA_SHAPE_VALIDATORS.every(check=>check(schema))){ancestors.delete(value);return void 0}const normalizedProperties=properties===void 0?void 0:Object.fromEntries(Object.entries(properties).map(([key,entry])=>[key,normalizeRuntimeFieldValueSchema(entry,depth+1,ancestors)]));const normalizedItems=items===void 0?void 0:normalizeRuntimeFieldValueSchema(items,depth+1,ancestors);const normalizedOneOf=oneOf===void 0?void 0:oneOf.map(entry=>normalizeRuntimeFieldValueSchema(entry,depth+1,ancestors));const normalizedNestedSchemas=[...Object.values(normalizedProperties??{}),...items===void 0?[]:[normalizedItems],...normalizedOneOf??[]];if(normalizedNestedSchemas.some(entry=>entry===void 0)){ancestors.delete(value);return void 0}ancestors.delete(value);return Object.fromEntries(Object.entries({type,const:Object.hasOwn(schema,"const")?schema.const:void 0,enum:enumValues,min_length:minLength,min_items:minItems,format,properties:normalizedProperties,required:required===void 0?void 0:[...new Set(required)],additional_properties:additionalProperties,items:normalizedItems,one_of:normalizedOneOf}).filter(([,entry])=>entry!==void 0))}function normalizeStringList(values){const candidates=Array.isArray(values)?values:[];return[...new Set(candidates.map(value=>typeof value==="string"?value.trim():"").filter(value=>value.length>0))].sort((left,right)=>left.localeCompare(right))}function normalizeStatusId(value){if(typeof value!=="string"||value.length===0){return void 0}const normalized=normalizeStatusToken(value);return normalized.length>0?normalized:void 0}function stripFlagPrefix(value){return value.startsWith("--")?value.slice(2):value}function normalizeCliToken(value){return typeof value==="string"?stripFlagPrefix(value.trim().toLowerCase().replaceAll(/[\s_]+/g,"-")):""}function keyToDefaultCliFlag(value){return value.replaceAll("_","-")}function toCamelCase(input){const segments=input.replaceAll(/[^A-Za-z0-9]+/g," ").trim().split(/\s+/).filter(segment=>segment.length>0).map(segment=>segment.toLowerCase());if(segments.length===0){return input}const[first,...rest]=segments;return`${first}${rest.map(segment=>`${segment.slice(0,1).toUpperCase()}${segment.slice(1)}`).join("")}`}function normalizeRuntimeStatusDefinition(definition,fallbackOrder){const id=normalizeStatusId(definition.id);if(!id){return null}const aliases=[...new Set(normalizeStringList(definition.aliases).map(normalizeStatusToken).filter(value=>value.length>0))].sort((left,right)=>left.localeCompare(right));const roles=normalizeStringList(definition.roles).filter(value=>RUNTIME_STATUS_ROLE_SET.has(value));const description=definition.description?.trim();const order=typeof definition.order==="number"&&Number.isFinite(definition.order)?definition.order:fallbackOrder;return{id,aliases,roles,description:description&&description.length>0?description:void 0,order}}function normalizeRuntimeWorkflow(workflow){return{draft_status:normalizeStatusId(workflow?.draft_status),open_status:normalizeStatusId(workflow?.open_status),in_progress_status:normalizeStatusId(workflow?.in_progress_status),blocked_status:normalizeStatusId(workflow?.blocked_status),close_status:normalizeStatusId(workflow?.close_status),canceled_status:normalizeStatusId(workflow?.canceled_status)}}function appendTypeWorkflowPair(record,pair){if(!Array.isArray(pair)||pair.length!==2){return}const from=normalizeStatusToken(pair[0]);const to=normalizeStatusToken(pair[1]);if(from.length===0||to.length===0){return}if(record.pairs.some(candidate=>candidate[0]===from&&candidate[1]===to)){return}record.pairs.push([from,to])}function normalizedTypeWorkflowEntry(entry){const rawType=typeof entry?.type==="string"?entry.type.trim():"";if(rawType.length===0||!Array.isArray(entry?.allowed_transitions)){return null}const record={type:rawType,pairs:[],denyAll:entry.allowed_transitions.length===0};for(const pair of entry.allowed_transitions){appendTypeWorkflowPair(record,pair)}return{typeKey:rawType.toLowerCase(),record}}function normalizeTypeWorkflowDefinitions(workflows){if(!Array.isArray(workflows)||workflows.length===0){return void 0}const byTypeKey=new Map;for(const entry of workflows){const normalized2=normalizedTypeWorkflowEntry(entry);if(normalized2===null){continue}const record=byTypeKey.get(normalized2.typeKey)??normalized2.record;record.denyAll||=normalized2.record.denyAll;for(const pair of normalized2.record.pairs){appendTypeWorkflowPair(record,pair)}byTypeKey.set(normalized2.typeKey,record)}const normalized=[];for(const record of byTypeKey.values()){if(record.pairs.length>0||record.denyAll){normalized.push({type:record.type,allowed_transitions:record.pairs})}}normalized.sort((left,right)=>left.type.localeCompare(right.type));return normalized.length>0?normalized:void 0}function normalizeRuntimeFieldDefinition(definition){const key=normalizeStatusToken(definition.key??"");if(!key){return null}const metadataKey=normalizeStatusToken(definition.metadata_key??definition.front_matter_key??key);const cliFlag=normalizeCliToken(definition.cli_flag??keyToDefaultCliFlag(key));if(!cliFlag){return null}const cliAliases=normalizeStringList(definition.cli_aliases).map(value=>normalizeCliToken(value)).filter(value=>value.length>0&&value!==cliFlag);const typeCandidate=typeof definition.type==="string"?definition.type.trim().toLowerCase():"string";const type=RUNTIME_FIELD_TYPE_SET.has(typeCandidate)?typeCandidate:"string";const commands=(()=>{const normalized=normalizeStringList(definition.commands).filter(value=>RUNTIME_FIELD_COMMAND_SET.has(value));if(normalized.length>0){return normalized}return[...DEFAULT_RUNTIME_FIELD_COMMANDS]})();const description=definition.description?.trim();const requiredTypes=normalizeStringList(definition.required_types);const valueSchema=definition.value_schema===void 0?void 0:normalizeRuntimeFieldValueSchema(definition.value_schema);if(definition.value_schema!==void 0&&valueSchema===void 0){return null}return{key,metadata_key:metadataKey,cli_flag:cliFlag,cli_aliases:cliAliases,description:description&&description.length>0?description:void 0,type,commands,repeatable:[definition.repeatable===true,type==="string_array"].includes(true),required:definition.required===true,required_on_create:definition.required_on_create===true,required_types:requiredTypes,allow_unset:definition.allow_unset!==false,value_schema:valueSchema}}function normalizeRuntimeStatusDefinitions(statusesSource){const dedupedById=new Map;for(const[index,definition]of statusesSource.entries()){const normalized=normalizeRuntimeStatusDefinition(definition,index);if(normalized){dedupedById.set(normalized.id,normalized)}}const values=sortRuntimeStatusDefinitions([...dedupedById.values()]);if(values.length>0){return values}return sortRuntimeStatusDefinitions(DEFAULT_RUNTIME_STATUS_DEFINITIONS.map((definition,index)=>normalizeRuntimeStatusDefinition(definition,index)).filter(definition=>definition!==null))}function sortRuntimeStatusDefinitions(definitions){return definitions.sort((left,right)=>left.order===right.order?left.id.localeCompare(right.id):left.order-right.order)}function normalizeRuntimeFieldDefinitions(fieldsSource){const dedupedByKey=new Map;for(const definition of fieldsSource??[]){const normalized=normalizeRuntimeFieldDefinition(definition);if(normalized){dedupedByKey.set(normalized.key,normalized)}}return[...dedupedByKey.values()].sort((left,right)=>left.key.localeCompare(right.key))}function serializeRuntimeStatusDefinition(definition){return{id:definition.id,aliases:definition.aliases.length>0?[...definition.aliases]:void 0,roles:definition.roles.length>0?[...definition.roles]:void 0,description:definition.description,order:definition.order}}function serializeRuntimeFieldDefinition(definition){return{key:definition.key,metadata_key:definition.metadata_key!==definition.key?definition.metadata_key:void 0,cli_flag:definition.cli_flag!==keyToDefaultCliFlag(definition.key)?definition.cli_flag:void 0,cli_aliases:definition.cli_aliases.length>0?[...definition.cli_aliases]:void 0,description:definition.description,type:definition.type,commands:[...definition.commands],repeatable:definition.repeatable===true?true:void 0,required:definition.required===true?true:void 0,required_on_create:definition.required_on_create===true?true:void 0,required_types:definition.required_types.length>0?[...definition.required_types]:void 0,allow_unset:definition.allow_unset===false?false:void 0,value_schema:definition.value_schema}}function normalizeUnknownFieldPolicy(policy){const candidate=typeof policy==="string"?policy.trim().toLowerCase():"allow";return RUNTIME_UNKNOWN_FIELD_POLICY_SET.has(candidate)?candidate:"allow"}function normalizeRuntimeSchemaSettings(schema){const files={...DEFAULT_RUNTIME_SCHEMA_FILE_PATHS,...schema?.files};const statusesSource=schema?.statuses&&schema.statuses.length>0?schema.statuses:DEFAULT_RUNTIME_STATUS_DEFINITIONS;const normalizedStatuses=normalizeRuntimeStatusDefinitions(statusesSource);const normalizedFields=normalizeRuntimeFieldDefinitions(schema?.fields);return{version:typeof schema?.version==="number"&&Number.isFinite(schema.version)?Math.floor(schema.version):1,files,statuses:normalizedStatuses.map(serializeRuntimeStatusDefinition),fields:normalizedFields.map(serializeRuntimeFieldDefinition),workflow:{...DEFAULT_RUNTIME_WORKFLOW,...normalizeRuntimeWorkflow(schema?.workflow)},type_workflows:normalizeTypeWorkflowDefinitions(schema?.type_workflows),unknown_field_policy:normalizeUnknownFieldPolicy(schema?.unknown_field_policy)}}function parseOptionalJson(raw,warningKey,warnings){try{return JSON.parse(raw)}catch{warnings.push(warningKey);return void 0}}function readTypeDefinitionsFromSchemaFile(parsed){if(Array.isArray(parsed)){return parsed}if(typeof parsed!=="object"||parsed===null){return void 0}const record=parsed;if(Array.isArray(record.definitions)){return record.definitions}if(typeof record.item_types==="object"&&record.item_types!==null){const itemTypesRecord=record.item_types;if(Array.isArray(itemTypesRecord.definitions)){return itemTypesRecord.definitions}}return void 0}function readStatusesFromSchemaFile(parsed){if(Array.isArray(parsed)){return parsed}if(typeof parsed!=="object"||parsed===null){return void 0}const record=parsed;if(Array.isArray(record.statuses)){return record.statuses}if(Array.isArray(record.definitions)){return record.definitions}return void 0}function readFieldsFromSchemaFile(parsed){if(Array.isArray(parsed)){return parsed}if(typeof parsed!=="object"||parsed===null){return void 0}const record=parsed;if(Array.isArray(record.fields)){return record.fields}if(Array.isArray(record.definitions)){return record.definitions}return void 0}function readWorkflowFromSchemaFile(parsed){if(typeof parsed!=="object"||parsed===null||Array.isArray(parsed)){return void 0}const record=parsed;if(typeof record.workflow==="object"&&record.workflow!==null&&!Array.isArray(record.workflow)){return record.workflow}if(typeof record.workflows==="object"&&record.workflows!==null&&!Array.isArray(record.workflows)){return record.workflows}return record}function readTypeWorkflowsFromSchemaFile(parsed){if(typeof parsed!=="object"||parsed===null||Array.isArray(parsed)){return void 0}const record=parsed;if(Array.isArray(record.type_workflows)){return record.type_workflows}return void 0}function filePathForSchemaSection(pmRoot,configuredPath,fallbackPath){const normalized=configuredPath?.trim()||fallbackPath;if(path.isAbsolute(normalized)){return normalized}return path.join(pmRoot,normalized)}function resolveItemTypesFilePath(pmRoot,schema){return filePathForSchemaSection(pmRoot,schema.files.types,DEFAULT_RUNTIME_SCHEMA_FILE_PATHS.types)}async function ensureRuntimeSchemaFileScaffold(pmRoot,schema){const normalizedSchema=normalizeRuntimeSchemaSettings(schema);const specs=[{path:filePathForSchemaSection(pmRoot,normalizedSchema.files.types,DEFAULT_RUNTIME_SCHEMA_FILE_PATHS.types),seed:{definitions:[]}},{path:filePathForSchemaSection(pmRoot,normalizedSchema.files.statuses,DEFAULT_RUNTIME_SCHEMA_FILE_PATHS.statuses),seed:{statuses:DEFAULT_RUNTIME_STATUS_DEFINITIONS}},{path:filePathForSchemaSection(pmRoot,normalizedSchema.files.fields,DEFAULT_RUNTIME_SCHEMA_FILE_PATHS.fields),seed:{fields:[]}},{path:filePathForSchemaSection(pmRoot,normalizedSchema.files.workflows,DEFAULT_RUNTIME_SCHEMA_FILE_PATHS.workflows),seed:{workflow:DEFAULT_RUNTIME_WORKFLOW}}];const createdPaths=[];for(const spec of specs){if(await pathExists(spec.path)){continue}if(await createFileAtomic(spec.path,`${JSON.stringify(spec.seed,null,2)}
|
|
2
|
-
`)
|
|
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]="6e07b1b6-1757-54dd-8833-9d3f984ccf79")}catch{}})();import path from"node:path";import{pathExists,readFileIfExists}from"../fs/fs-utils.js";import{createFileAtomic}from"../fs/atomic-create.js";import{DEFAULT_STATUS_DEFINITIONS,DEFAULT_WORKFLOW_DEFINITION}from"../shared/constants.js";import{RUNTIME_FIELD_COMMAND_VALUES,RUNTIME_FIELD_TYPE_VALUES,RUNTIME_STATUS_ROLE_VALUES,RUNTIME_UNKNOWN_FIELD_POLICY_VALUES,STATUS_VALUES}from"../../types/index.js";import{normalizeStatusToken}from"./status-token.js";const DEFAULT_RUNTIME_SCHEMA_FILE_PATHS=Object.freeze({types:"schema/types.json",statuses:"schema/statuses.json",fields:"schema/fields.json",workflows:"schema/workflows.json"}),DEFAULT_RUNTIME_WORKFLOW=DEFAULT_WORKFLOW_DEFINITION,DEFAULT_RUNTIME_STATUS_DEFINITIONS=DEFAULT_STATUS_DEFINITIONS,DEFAULT_RUNTIME_FIELD_COMMANDS=["create","update"],RUNTIME_STATUS_ROLE_SET=new Set(RUNTIME_STATUS_ROLE_VALUES),RUNTIME_FIELD_TYPE_SET=new Set(RUNTIME_FIELD_TYPE_VALUES),RUNTIME_FIELD_COMMAND_SET=new Set(RUNTIME_FIELD_COMMAND_VALUES),RUNTIME_UNKNOWN_FIELD_POLICY_SET=new Set(RUNTIME_UNKNOWN_FIELD_POLICY_VALUES),RUNTIME_FIELD_VALUE_TYPE_SET=new Set(["string","number","boolean","array","object"]),MAX_RUNTIME_FIELD_VALUE_SCHEMA_DEPTH=16;function isPlainObject(value){return typeof value=="object"&&value!==null&&!Array.isArray(value)}const RUNTIME_FIELD_VALUE_SCHEMA_SHAPE_VALIDATORS=[schema=>schema.type===void 0||typeof schema.type=="string"&&RUNTIME_FIELD_VALUE_TYPE_SET.has(schema.type),schema=>!Object.hasOwn(schema,"const")||isStructuredJsonValue(schema.const),schema=>schema.enum===void 0||Array.isArray(schema.enum)&&schema.enum.every(entry=>isStructuredJsonValue(entry)),schema=>schema.min_length===void 0||Number.isInteger(schema.min_length)&&schema.min_length>=0,schema=>schema.min_items===void 0||Number.isInteger(schema.min_items)&&schema.min_items>=0,schema=>schema.format===void 0||schema.format==="date-time",schema=>schema.required===void 0||Array.isArray(schema.required)&&schema.required.every(entry=>typeof entry=="string"&&entry.length>0),schema=>schema.additional_properties===void 0||typeof schema.additional_properties=="boolean",schema=>schema.properties===void 0||isPlainObject(schema.properties),schema=>schema.one_of===void 0||Array.isArray(schema.one_of)&&schema.one_of.length>0];function isStructuredJsonValue(value,ancestors=new Set){if(value===null||typeof value=="string"||typeof value=="boolean")return!0;if(typeof value=="number")return Number.isFinite(value);if(typeof value!="object"||ancestors.has(value))return!1;ancestors.add(value);const valid=Array.isArray(value)?value.every(entry=>isStructuredJsonValue(entry,ancestors)):Object.values(value).every(entry=>isStructuredJsonValue(entry,ancestors));return ancestors.delete(value),valid}function normalizeRuntimeFieldValueSchema(value,depth=0,ancestors=new Set){if(!isPlainObject(value)||depth>MAX_RUNTIME_FIELD_VALUE_SCHEMA_DEPTH||ancestors.has(value))return;ancestors.add(value);const schema=value,type=schema.type,enumValues=schema.enum,oneOf=schema.one_of,properties=schema.properties,items=schema.items,required=schema.required,minLength=schema.min_length,minItems=schema.min_items,format=schema.format,additionalProperties=schema.additional_properties;if(!RUNTIME_FIELD_VALUE_SCHEMA_SHAPE_VALIDATORS.every(check=>check(schema))){ancestors.delete(value);return}const normalizedProperties=properties===void 0?void 0:Object.fromEntries(Object.entries(properties).map(([key,entry])=>[key,normalizeRuntimeFieldValueSchema(entry,depth+1,ancestors)])),normalizedItems=items===void 0?void 0:normalizeRuntimeFieldValueSchema(items,depth+1,ancestors),normalizedOneOf=oneOf===void 0?void 0:oneOf.map(entry=>normalizeRuntimeFieldValueSchema(entry,depth+1,ancestors));if([...Object.values(normalizedProperties??{}),...items===void 0?[]:[normalizedItems],...normalizedOneOf??[]].some(entry=>entry===void 0)){ancestors.delete(value);return}return ancestors.delete(value),Object.fromEntries(Object.entries({type,const:Object.hasOwn(schema,"const")?schema.const:void 0,enum:enumValues,min_length:minLength,min_items:minItems,format,properties:normalizedProperties,required:required===void 0?void 0:[...new Set(required)],additional_properties:additionalProperties,items:normalizedItems,one_of:normalizedOneOf}).filter(([,entry])=>entry!==void 0))}function normalizeStringList(values){const candidates=Array.isArray(values)?values:[];return[...new Set(candidates.map(value=>typeof value=="string"?value.trim():"").filter(value=>value.length>0))].sort((left,right)=>left.localeCompare(right))}function normalizeStatusId(value){if(typeof value!="string"||value.length===0)return;const normalized=normalizeStatusToken(value);return normalized.length>0?normalized:void 0}function stripFlagPrefix(value){return value.startsWith("--")?value.slice(2):value}function normalizeCliToken(value){return typeof value=="string"?stripFlagPrefix(value.trim().toLowerCase().replaceAll(/[\s_]+/g,"-")):""}function keyToDefaultCliFlag(value){return value.replaceAll("_","-")}function toCamelCase(input){const segments=input.replaceAll(/[^A-Za-z0-9]+/g," ").trim().split(/\s+/).filter(segment=>segment.length>0).map(segment=>segment.toLowerCase());if(segments.length===0)return input;const[first,...rest]=segments;return`${first}${rest.map(segment=>`${segment.slice(0,1).toUpperCase()}${segment.slice(1)}`).join("")}`}function normalizeRuntimeStatusDefinition(definition,fallbackOrder){const id=normalizeStatusId(definition.id);if(!id)return null;const aliases=[...new Set(normalizeStringList(definition.aliases).map(normalizeStatusToken).filter(value=>value.length>0))].sort((left,right)=>left.localeCompare(right)),roles=normalizeStringList(definition.roles).filter(value=>RUNTIME_STATUS_ROLE_SET.has(value)),description=definition.description?.trim(),order=typeof definition.order=="number"&&Number.isFinite(definition.order)?definition.order:fallbackOrder;return{id,aliases,roles,description:description&&description.length>0?description:void 0,order}}function normalizeRuntimeWorkflow(workflow){return{draft_status:normalizeStatusId(workflow?.draft_status),open_status:normalizeStatusId(workflow?.open_status),in_progress_status:normalizeStatusId(workflow?.in_progress_status),blocked_status:normalizeStatusId(workflow?.blocked_status),close_status:normalizeStatusId(workflow?.close_status),canceled_status:normalizeStatusId(workflow?.canceled_status)}}function appendTypeWorkflowPair(record,pair){if(!Array.isArray(pair)||pair.length!==2)return;const from=normalizeStatusToken(pair[0]),to=normalizeStatusToken(pair[1]);from.length===0||to.length===0||record.pairs.some(candidate=>candidate[0]===from&&candidate[1]===to)||record.pairs.push([from,to])}function normalizedTypeWorkflowEntry(entry){const rawType=typeof entry?.type=="string"?entry.type.trim():"";if(rawType.length===0||!Array.isArray(entry?.allowed_transitions))return null;const record={type:rawType,pairs:[],denyAll:entry.allowed_transitions.length===0};for(const pair of entry.allowed_transitions)appendTypeWorkflowPair(record,pair);return{typeKey:rawType.toLowerCase(),record}}function normalizeTypeWorkflowDefinitions(workflows){if(!Array.isArray(workflows)||workflows.length===0)return;const byTypeKey=new Map;for(const entry of workflows){const normalized2=normalizedTypeWorkflowEntry(entry);if(normalized2===null)continue;const record=byTypeKey.get(normalized2.typeKey)??normalized2.record;record.denyAll||=normalized2.record.denyAll;for(const pair of normalized2.record.pairs)appendTypeWorkflowPair(record,pair);byTypeKey.set(normalized2.typeKey,record)}const normalized=[];for(const record of byTypeKey.values())(record.pairs.length>0||record.denyAll)&&normalized.push({type:record.type,allowed_transitions:record.pairs});return normalized.sort((left,right)=>left.type.localeCompare(right.type)),normalized.length>0?normalized:void 0}function normalizeRuntimeFieldDefinition(definition){const key=normalizeStatusToken(definition.key??"");if(!key)return null;const metadataKey=normalizeStatusToken(definition.metadata_key??definition.front_matter_key??key),cliFlag=normalizeCliToken(definition.cli_flag??keyToDefaultCliFlag(key));if(!cliFlag)return null;const cliAliases=normalizeStringList(definition.cli_aliases).map(value=>normalizeCliToken(value)).filter(value=>value.length>0&&value!==cliFlag),typeCandidate=typeof definition.type=="string"?definition.type.trim().toLowerCase():"string",type=RUNTIME_FIELD_TYPE_SET.has(typeCandidate)?typeCandidate:"string",commands=(()=>{const normalized=normalizeStringList(definition.commands).filter(value=>RUNTIME_FIELD_COMMAND_SET.has(value));return normalized.length>0?normalized:[...DEFAULT_RUNTIME_FIELD_COMMANDS]})(),description=definition.description?.trim(),requiredTypes=normalizeStringList(definition.required_types),valueSchema=definition.value_schema===void 0?void 0:normalizeRuntimeFieldValueSchema(definition.value_schema);return definition.value_schema!==void 0&&valueSchema===void 0?null:{key,metadata_key:metadataKey,cli_flag:cliFlag,cli_aliases:cliAliases,description:description&&description.length>0?description:void 0,type,commands,repeatable:[definition.repeatable===!0,type==="string_array"].includes(!0),required:definition.required===!0,required_on_create:definition.required_on_create===!0,required_types:requiredTypes,allow_unset:definition.allow_unset!==!1,value_schema:valueSchema}}function normalizeRuntimeStatusDefinitions(statusesSource){const dedupedById=new Map;for(const[index,definition]of statusesSource.entries()){const normalized=normalizeRuntimeStatusDefinition(definition,index);normalized&&dedupedById.set(normalized.id,normalized)}const values=sortRuntimeStatusDefinitions([...dedupedById.values()]);return values.length>0?values:sortRuntimeStatusDefinitions(DEFAULT_RUNTIME_STATUS_DEFINITIONS.map((definition,index)=>normalizeRuntimeStatusDefinition(definition,index)).filter(definition=>definition!==null))}function sortRuntimeStatusDefinitions(definitions){return definitions.sort((left,right)=>left.order===right.order?left.id.localeCompare(right.id):left.order-right.order)}function normalizeRuntimeFieldDefinitions(fieldsSource){const dedupedByKey=new Map;for(const definition of fieldsSource??[]){const normalized=normalizeRuntimeFieldDefinition(definition);normalized&&dedupedByKey.set(normalized.key,normalized)}return[...dedupedByKey.values()].sort((left,right)=>left.key.localeCompare(right.key))}function serializeRuntimeStatusDefinition(definition){return{id:definition.id,aliases:definition.aliases.length>0?[...definition.aliases]:void 0,roles:definition.roles.length>0?[...definition.roles]:void 0,description:definition.description,order:definition.order}}function serializeRuntimeFieldDefinition(definition){return{key:definition.key,metadata_key:definition.metadata_key!==definition.key?definition.metadata_key:void 0,cli_flag:definition.cli_flag!==keyToDefaultCliFlag(definition.key)?definition.cli_flag:void 0,cli_aliases:definition.cli_aliases.length>0?[...definition.cli_aliases]:void 0,description:definition.description,type:definition.type,commands:[...definition.commands],repeatable:definition.repeatable===!0?!0:void 0,required:definition.required===!0?!0:void 0,required_on_create:definition.required_on_create===!0?!0:void 0,required_types:definition.required_types.length>0?[...definition.required_types]:void 0,allow_unset:definition.allow_unset===!1?!1:void 0,value_schema:definition.value_schema}}function normalizeUnknownFieldPolicy(policy){const candidate=typeof policy=="string"?policy.trim().toLowerCase():"allow";return RUNTIME_UNKNOWN_FIELD_POLICY_SET.has(candidate)?candidate:"allow"}function normalizeRuntimeSchemaSettings(schema){const files={...DEFAULT_RUNTIME_SCHEMA_FILE_PATHS,...schema?.files},statusesSource=schema?.statuses&&schema.statuses.length>0?schema.statuses:DEFAULT_RUNTIME_STATUS_DEFINITIONS,normalizedStatuses=normalizeRuntimeStatusDefinitions(statusesSource),normalizedFields=normalizeRuntimeFieldDefinitions(schema?.fields);return{version:typeof schema?.version=="number"&&Number.isFinite(schema.version)?Math.floor(schema.version):1,files,statuses:normalizedStatuses.map(serializeRuntimeStatusDefinition),fields:normalizedFields.map(serializeRuntimeFieldDefinition),workflow:{...DEFAULT_RUNTIME_WORKFLOW,...normalizeRuntimeWorkflow(schema?.workflow)},type_workflows:normalizeTypeWorkflowDefinitions(schema?.type_workflows),unknown_field_policy:normalizeUnknownFieldPolicy(schema?.unknown_field_policy)}}function parseOptionalJson(raw,warningKey,warnings){try{return JSON.parse(raw)}catch{warnings.push(warningKey);return}}function readTypeDefinitionsFromSchemaFile(parsed){if(Array.isArray(parsed))return parsed;if(typeof parsed!="object"||parsed===null)return;const record=parsed;if(Array.isArray(record.definitions))return record.definitions;if(typeof record.item_types=="object"&&record.item_types!==null){const itemTypesRecord=record.item_types;if(Array.isArray(itemTypesRecord.definitions))return itemTypesRecord.definitions}}function readStatusesFromSchemaFile(parsed){if(Array.isArray(parsed))return parsed;if(typeof parsed!="object"||parsed===null)return;const record=parsed;if(Array.isArray(record.statuses))return record.statuses;if(Array.isArray(record.definitions))return record.definitions}function readFieldsFromSchemaFile(parsed){if(Array.isArray(parsed))return parsed;if(typeof parsed!="object"||parsed===null)return;const record=parsed;if(Array.isArray(record.fields))return record.fields;if(Array.isArray(record.definitions))return record.definitions}function readWorkflowFromSchemaFile(parsed){if(typeof parsed!="object"||parsed===null||Array.isArray(parsed))return;const record=parsed;return typeof record.workflow=="object"&&record.workflow!==null&&!Array.isArray(record.workflow)?record.workflow:typeof record.workflows=="object"&&record.workflows!==null&&!Array.isArray(record.workflows)?record.workflows:record}function readTypeWorkflowsFromSchemaFile(parsed){if(typeof parsed!="object"||parsed===null||Array.isArray(parsed))return;const record=parsed;if(Array.isArray(record.type_workflows))return record.type_workflows}function filePathForSchemaSection(pmRoot,configuredPath,fallbackPath){const normalized=configuredPath?.trim()||fallbackPath;return path.isAbsolute(normalized)?normalized:path.join(pmRoot,normalized)}function resolveItemTypesFilePath(pmRoot,schema){return filePathForSchemaSection(pmRoot,schema.files.types,DEFAULT_RUNTIME_SCHEMA_FILE_PATHS.types)}async function ensureRuntimeSchemaFileScaffold(pmRoot,schema){const normalizedSchema=normalizeRuntimeSchemaSettings(schema),specs=[{path:filePathForSchemaSection(pmRoot,normalizedSchema.files.types,DEFAULT_RUNTIME_SCHEMA_FILE_PATHS.types),seed:{definitions:[]}},{path:filePathForSchemaSection(pmRoot,normalizedSchema.files.statuses,DEFAULT_RUNTIME_SCHEMA_FILE_PATHS.statuses),seed:{statuses:DEFAULT_RUNTIME_STATUS_DEFINITIONS}},{path:filePathForSchemaSection(pmRoot,normalizedSchema.files.fields,DEFAULT_RUNTIME_SCHEMA_FILE_PATHS.fields),seed:{fields:[]}},{path:filePathForSchemaSection(pmRoot,normalizedSchema.files.workflows,DEFAULT_RUNTIME_SCHEMA_FILE_PATHS.workflows),seed:{workflow:DEFAULT_RUNTIME_WORKFLOW}}],createdPaths=[];for(const spec of specs)await pathExists(spec.path)||await createFileAtomic(spec.path,`${JSON.stringify(spec.seed,null,2)}
|
|
2
|
+
`)&&createdPaths.push(spec.path);return{created_paths:createdPaths}}async function loadRuntimeSchemaFromOptionalFiles(pmRoot,schema){const normalizedSchema=normalizeRuntimeSchemaSettings(schema),warnings=[],typeFilePath=filePathForSchemaSection(pmRoot,normalizedSchema.files.types,DEFAULT_RUNTIME_SCHEMA_FILE_PATHS.types),statusFilePath=filePathForSchemaSection(pmRoot,normalizedSchema.files.statuses,DEFAULT_RUNTIME_SCHEMA_FILE_PATHS.statuses),fieldsFilePath=filePathForSchemaSection(pmRoot,normalizedSchema.files.fields,DEFAULT_RUNTIME_SCHEMA_FILE_PATHS.fields),workflowsFilePath=filePathForSchemaSection(pmRoot,normalizedSchema.files.workflows,DEFAULT_RUNTIME_SCHEMA_FILE_PATHS.workflows);let loadedTypeDefinitions,loadedStatuses,loadedFields,loadedWorkflow,loadedTypeWorkflows;const readAndParse=async(targetPath,warningKey)=>{const raw=await readFileIfExists(targetPath);if(raw!==null)return parseOptionalJson(raw,warningKey,warnings)},parsedTypes=await readAndParse(typeFilePath,"runtime_schema_types_invalid_json");parsedTypes!==void 0&&(loadedTypeDefinitions=readTypeDefinitionsFromSchemaFile(parsedTypes),loadedTypeDefinitions===void 0&&warnings.push("runtime_schema_types_invalid_shape"));const parsedStatuses=await readAndParse(statusFilePath,"runtime_schema_statuses_invalid_json");parsedStatuses!==void 0&&(loadedStatuses=readStatusesFromSchemaFile(parsedStatuses),loadedStatuses===void 0&&warnings.push("runtime_schema_statuses_invalid_shape"));const parsedFields=await readAndParse(fieldsFilePath,"runtime_schema_fields_invalid_json");parsedFields!==void 0&&(loadedFields=readFieldsFromSchemaFile(parsedFields),loadedFields===void 0&&warnings.push("runtime_schema_fields_invalid_shape"));const parsedWorkflow=await readAndParse(workflowsFilePath,"runtime_schema_workflows_invalid_json");return parsedWorkflow!==void 0&&(loadedWorkflow=readWorkflowFromSchemaFile(parsedWorkflow),loadedWorkflow===void 0&&warnings.push("runtime_schema_workflows_invalid_shape"),loadedTypeWorkflows=readTypeWorkflowsFromSchemaFile(parsedWorkflow)),{schema:normalizeRuntimeSchemaSettings({...normalizedSchema,statuses:[...normalizedSchema.statuses,...loadedStatuses??[]],fields:[...normalizedSchema.fields,...loadedFields??[]],workflow:{...normalizedSchema.workflow,...loadedWorkflow},type_workflows:[...normalizedSchema.type_workflows??[],...loadedTypeWorkflows??[]]}),type_definitions_from_file:loadedTypeDefinitions,warnings,created_paths:[]}}function preferredStatusForRole(definitions,role,fallbackValues,fallbackFirst=!1){const fallbackMatch=fallbackValues.map(value=>normalizeStatusId(value)).filter(value=>typeof value=="string").find(normalized=>definitions.some(definition=>definition.id===normalized));if(fallbackFirst&&fallbackMatch!==void 0)return fallbackMatch;const withRole=definitions.find(definition=>definition.roles.includes(role));return withRole!==void 0?withRole.id:fallbackMatch??definitions[0]?.id}function buildRuntimeStatusIndexes(definitions){const aliasToId=new Map,byId=new Map;for(const definition of definitions){byId.set(definition.id,definition),aliasToId.set(definition.id,definition.id),aliasToId.set(definition.id.replaceAll("_","-"),definition.id),aliasToId.set(definition.id.replaceAll("_"," "),definition.id);for(const alias of definition.aliases)aliasToId.set(alias,definition.id),aliasToId.set(alias.replaceAll("_","-"),definition.id),aliasToId.set(alias.replaceAll("_"," "),definition.id)}return{aliasToId,byId}}function buildRuntimeStatusRoleSets(definitions){const result={activeStatuses:new Set,blockedStatuses:new Set,draftStatuses:new Set,terminalCanceledStatuses:new Set,terminalDoneStatuses:new Set,terminalStatuses:new Set};for(const definition of definitions){const roles=new Set(definition.roles);(roles.has("terminal")||roles.has("terminal_done")||roles.has("terminal_canceled"))&&result.terminalStatuses.add(definition.id),roles.has("terminal_done")&&result.terminalDoneStatuses.add(definition.id),roles.has("terminal_canceled")&&result.terminalCanceledStatuses.add(definition.id),roles.has("active")&&result.activeStatuses.add(definition.id),roles.has("blocked")&&result.blockedStatuses.add(definition.id),roles.has("draft")&&result.draftStatuses.add(definition.id)}return result}function resolveRuntimeStatusRegistry(schema){const normalizedSchema=normalizeRuntimeSchemaSettings(schema),definitions=normalizedSchema.statuses.map((definition,index)=>normalizeRuntimeStatusDefinition(definition,index)).filter(definition=>definition!==null),{aliasToId,byId}=buildRuntimeStatusIndexes(definitions),{activeStatuses,blockedStatuses,draftStatuses,terminalCanceledStatuses,terminalDoneStatuses,terminalStatuses}=buildRuntimeStatusRoleSets(definitions),workflow=normalizedSchema.workflow,openStatus=normalizeStatusId(workflow.open_status)??preferredStatusForRole(definitions,"default_open",["open","in_progress",STATUS_VALUES[0]]),inProgressStatus=normalizeStatusId(workflow.in_progress_status)??preferredStatusForRole(definitions,"active",["in_progress","in-progress",openStatus],!0),blockedStatus=normalizeStatusId(workflow.blocked_status)??preferredStatusForRole(definitions,"blocked",["blocked"]),closeStatus=normalizeStatusId(workflow.close_status)??preferredStatusForRole(definitions,"default_close",["closed","done","complete"]),canceledStatus=normalizeStatusId(workflow.canceled_status)??preferredStatusForRole(definitions,"default_cancel",["canceled","cancelled"]);return{definitions,by_id:byId,alias_to_id:aliasToId,terminal_statuses:terminalStatuses,terminal_done_statuses:terminalDoneStatuses,terminal_canceled_statuses:terminalCanceledStatuses,active_statuses:activeStatuses,blocked_statuses:blockedStatuses,draft_statuses:draftStatuses,open_status:openStatus,in_progress_status:inProgressStatus,blocked_status:blockedStatus,close_status:closeStatus,canceled_status:canceledStatus}}function normalizeStatusInputWithRegistry(value,registry){const normalized=normalizeStatusToken(value);if(normalized)return registry.alias_to_id.get(normalized)}function resolveRuntimeFieldRegistry(schema){const normalizedSchema=normalizeRuntimeSchemaSettings(schema),dedupedByKey=new Map,normalizedFields=normalizedSchema.fields.map(definition=>normalizeRuntimeFieldDefinition(definition)).filter(definition=>definition!==null);for(const normalized of normalizedFields)dedupedByKey.set(normalized.key,normalized);const definitions=[...dedupedByKey.values()].sort((left,right)=>left.key.localeCompare(right.key)),byKey=new Map,byCliToken=new Map,commandToFields=new Map;for(const definition of definitions){byKey.set(definition.key,definition),byCliToken.set(definition.cli_flag,definition);for(const alias of definition.cli_aliases)byCliToken.set(alias,definition);for(const command of definition.commands){const existing=commandToFields.get(command)??[];existing.push(definition),commandToFields.set(command,existing)}}for(const[command,fieldDefinitions]of commandToFields.entries())fieldDefinitions.sort((left,right)=>left.key.localeCompare(right.key)),commandToFields.set(command,fieldDefinitions);return{definitions,by_key:byKey,by_cli_token:byCliToken,command_to_fields:commandToFields}}function runtimeFieldOptionTarget(field){return toCamelCase(field.key)}function statusIsTerminal(status,registry){const normalized=normalizeStatusInputWithRegistry(status,registry);return normalized?registry.terminal_statuses.has(normalized):!1}export{DEFAULT_RUNTIME_SCHEMA_FILE_PATHS,DEFAULT_RUNTIME_STATUS_DEFINITIONS,DEFAULT_RUNTIME_WORKFLOW,ensureRuntimeSchemaFileScaffold,filePathForSchemaSection,loadRuntimeSchemaFromOptionalFiles,normalizeRuntimeSchemaSettings,normalizeStatusInputWithRegistry,resolveItemTypesFilePath,resolveRuntimeFieldRegistry,resolveRuntimeStatusRegistry,runtimeFieldOptionTarget,statusIsTerminal};
|
|
3
3
|
//# sourceMappingURL=runtime-schema.js.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
`}function upsertStatusDef(file,input,baseDefinition){const statuses=file.statuses.slice()
|
|
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]="b1e4c04e-0ade-5d24-95e3-b8dca3832c5a")}catch{}})();import{RUNTIME_STATUS_ROLE_VALUES}from"../../types/index.js";import{DEFAULT_RUNTIME_STATUS_DEFINITIONS}from"./runtime-schema.js";import{normalizeStatusToken}from"./status-token.js";import{normalizeStatusToken as normalizeStatusToken2}from"./status-token.js";const RUNTIME_STATUS_ROLE_SET=new Set(RUNTIME_STATUS_ROLE_VALUES),BUILTIN_STATUS_IDS=new Set(DEFAULT_RUNTIME_STATUS_DEFINITIONS.map(definition=>normalizeStatusToken(definition.id)).filter(id=>id.length>0));function dedupeTokens(values){const seen=new Set;for(const value of values){const token=normalizeStatusToken(value);token.length>0&&seen.add(token)}return[...seen].sort((left,right)=>left.localeCompare(right))}function normalizeAddStatusInput(raw){const id=normalizeStatusToken(raw.id);if(id.length===0)throw new Error("Status id must not be empty.");if(BUILTIN_STATUS_IDS.has(id))throw new Error(`Cannot add-status the built-in status "${id}". Built-in statuses are reserved: ${[...BUILTIN_STATUS_IDS].join(", ")}.`);let roles;if(raw.roles!==void 0){roles=[];const seenRoles=new Set;for(const rawRole of raw.roles){const role=typeof rawRole=="string"?rawRole.trim().toLowerCase():"";if(role.length!==0){if(!RUNTIME_STATUS_ROLE_SET.has(role))throw new Error(`Invalid status role "${rawRole}". Allowed roles: ${RUNTIME_STATUS_ROLE_VALUES.join(", ")}.`);seenRoles.has(role)||(seenRoles.add(role),roles.push(role))}}if(roles.length===0)throw new Error(`Status role must include at least one lifecycle role. Allowed roles: ${RUNTIME_STATUS_ROLE_VALUES.join(", ")}.`)}const aliases=raw.aliases===void 0?void 0:dedupeTokens(raw.aliases).filter(alias=>alias!==id),description=raw.description?.trim(),order=typeof raw.order=="number"&&Number.isFinite(raw.order)?Math.trunc(raw.order):void 0;return{id,roles,aliases,description:description&&description.length>0?description:void 0,order}}function selectStatusesArray(parsed){if(Array.isArray(parsed))return parsed;if(typeof parsed!="object"||parsed===null)return;const record=parsed;if(Array.isArray(record.statuses))return record.statuses;if(Array.isArray(record.definitions))return record.definitions}function extractStatusDefinitions(parsed){const candidate=selectStatusesArray(parsed);if(!candidate)return[];const definitions=[];for(const entry of candidate){if(typeof entry!="object"||entry===null||Array.isArray(entry))continue;const record=entry;typeof record.id!="string"||record.id.trim().length===0||definitions.push(record)}return definitions}function parseStatusDefsFile(raw){if(raw==null||raw.trim().length===0)return{statuses:[]};let parsed;try{parsed=JSON.parse(raw)}catch{throw new Error("schema/statuses.json contains invalid JSON.")}return{statuses:extractStatusDefinitions(parsed)}}function serializeStatusDefsFile(file){return`${JSON.stringify({statuses:file.statuses},null,2)}
|
|
2
|
+
`}function upsertStatusDef(file,input,baseDefinition){const statuses=file.statuses.slice(),existingIndex=statuses.findIndex(definition=>normalizeStatusToken(definition.id)===input.id),existing=existingIndex>=0?statuses[existingIndex]:baseDefinition,next={...existing,id:input.id};return input.roles!==void 0&&(input.roles.length>0?next.roles=[...input.roles]:next.roles!==void 0&&delete next.roles),input.aliases!==void 0&&(input.aliases.length>0?next.aliases=[...input.aliases]:next.aliases!==void 0&&delete next.aliases),input.description!==void 0&&(next.description=input.description),input.order!==void 0&&(next.order=input.order),existingIndex>=0?statuses[existingIndex]=next:statuses.push(next),{file:{statuses},definition:next,replaced:existing!==void 0}}function removeStatusDef(file,id){const normalizedId=normalizeStatusToken(id);if(normalizedId.length===0)throw new Error("Status id must not be empty.");if(BUILTIN_STATUS_IDS.has(normalizedId))throw new Error(`Cannot remove built-in status "${normalizedId}". Built-in statuses are reserved: ${[...BUILTIN_STATUS_IDS].join(", ")}.`);const statuses=file.statuses.slice(),existingIndex=statuses.findIndex(definition2=>normalizeStatusToken(definition2.id)===normalizedId);if(existingIndex<0)return{file:{statuses},removed:!1};const[definition]=statuses.splice(existingIndex,1);return{file:{statuses},removed:!0,definition}}function assertStatusTokensAvailable(input,resolvedAliasToId){const candidates=[input.id,...input.aliases??[]];for(const candidate of candidates){const token=normalizeStatusToken(candidate);if(token.length===0)continue;const owner=resolvedAliasToId.get(token);if(owner!==void 0&&owner!==input.id)throw new Error(`Status token "${token}" already belongs to status "${owner}". Choose a different id/alias to avoid shadowing it.`)}}export{BUILTIN_STATUS_IDS,assertStatusTokensAvailable,normalizeAddStatusInput,normalizeStatusToken2 as normalizeStatusToken,parseStatusDefsFile,removeStatusDef,serializeStatusDefsFile,upsertStatusDef};
|
|
3
3
|
//# sourceMappingURL=status-defs-file.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]="2075887b-6d4b-582f-9da2-bab13198f9a5")}catch{}})();import{evictOldestMemoEntries}from"../shared/memo.js";const STATUS_TOKEN_MEMO_MAX_ENTRIES=2e3,statusTokenMemo=new Map;function normalizeStatusToken(value){if(typeof value!="string")return"";const memoized=statusTokenMemo.get(value);if(memoized!==void 0)return memoized;const normalized=value.trim().toLowerCase().replaceAll(/[\s-]+/g,"_");return statusTokenMemo.size>=STATUS_TOKEN_MEMO_MAX_ENTRIES&&evictOldestMemoEntries(statusTokenMemo),statusTokenMemo.set(value,normalized),normalized}export{normalizeStatusToken};
|
|
2
2
|
//# sourceMappingURL=status-token.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]="4d01ffa0-2cdb-5d22-834e-d23d31403ad6")}catch{}})();import{matchBuiltinTypeName}from"./item-types-file.js";const PREFIX_PATTERN=/^([A-Za-z][A-Za-z0-9_-]*?)\s*[-:]\s+\S/;function extractTitlePrefix(title){const match=PREFIX_PATTERN.exec(title.trim());if(!match)return;const token=match[1];if(!(token.length<2)&&!/^[A-Za-z]\d+$/.test(token))return token.toLowerCase()}function prefixToTypeName(prefix){return prefix.split(/[-_]+/).filter(segment=>segment.length>0).map(segment=>`${segment.slice(0,1).toUpperCase()}${segment.slice(1).toLowerCase()}`).join("")}function inferTypesFromTitles(titles,options={}){const minCount=typeof options.minCount=="number"&&options.minCount>0?Math.trunc(options.minCount):10,maxExamples=typeof options.maxExamples=="number"&&options.maxExamples>0?Math.trunc(options.maxExamples):3,byPrefix=new Map;for(const rawTitle of titles){const title=typeof rawTitle=="string"?rawTitle.trim():"";if(title.length===0)continue;const prefix=extractTitlePrefix(title);if(prefix===void 0)continue;const bucket=byPrefix.get(prefix)??{count:0,examples:[]};bucket.count+=1,bucket.examples.length<maxExamples&&bucket.examples.push(title),byPrefix.set(prefix,bucket)}const candidates=[];for(const[prefix,bucket]of byPrefix.entries()){if(bucket.count<minCount)continue;const name=prefixToTypeName(prefix);candidates.push({name,prefix,count:bucket.count,examples:bucket.examples,shadows_builtin:matchBuiltinTypeName(name)!==void 0})}return candidates.sort((left,right)=>right.count-left.count||left.name.localeCompare(right.name)),candidates}export{extractTitlePrefix,inferTypesFromTitles,prefixToTypeName};
|
|
2
2
|
//# sourceMappingURL=type-inference.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]="abb182c9-6d6c-5be4-a2ad-c91b00a098d0")}catch{}})();import{normalizeAddTypeInput}from"./item-types-file.js";const TYPE_PRESET_NAMES=["agile","ops","research"],TYPE_PRESET_DEFINITIONS={agile:[{name:"Story",description:"User-facing outcome or capability slice expressed from a stakeholder perspective.",defaultStatus:"open",folder:"stories",aliases:["user-story"]},{name:"Spike",description:"Time-boxed investigation used to reduce uncertainty before implementation.",defaultStatus:"open",folder:"spikes",aliases:["research-spike"]}],ops:[{name:"Incident",description:"Operational disruption, degradation, or support escalation with recovery tracking.",defaultStatus:"open",folder:"incidents",aliases:["outage"]},{name:"Runbook",description:"Repeatable operational procedure, diagnostic path, or response playbook.",defaultStatus:"open",folder:"runbooks",aliases:["playbook"]}],research:[{name:"Experiment",description:"Validated-learning activity with hypothesis, method, and outcome tracking.",defaultStatus:"open",folder:"experiments",aliases:["study"]},{name:"Hypothesis",description:"Testable claim or assumption that should be supported, rejected, or refined.",defaultStatus:"open",folder:"hypotheses",aliases:["assumption"]}]};function normalizeTypePresetName(rawValue){if(rawValue===void 0)return;const normalized=rawValue.trim().toLowerCase().replaceAll("-","_");if(normalized.length===0)throw new Error("Type preset name must not be empty.");if(normalized==="agile"||normalized==="ops"||normalized==="research")return normalized;throw new Error(`Invalid type preset "${rawValue}". Allowed: ${TYPE_PRESET_NAMES.join(", ")}.`)}function resolveTypePresetDefinitions(preset){return TYPE_PRESET_DEFINITIONS[preset].map(rawDefinition=>normalizeAddTypeInput(rawDefinition))}export{TYPE_PRESET_DEFINITIONS,TYPE_PRESET_NAMES,normalizeTypePresetName,resolveTypePresetDefinitions};
|
|
2
2
|
//# sourceMappingURL=type-presets.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]="be646cfd-4742-5e15-9df1-648f1d250a99")}catch{}})();import{normalizeStatusToken}from"./status-token.js";import{normalizeStatusToken as normalizeStatusToken2}from"./status-token.js";function normalizeTypeName(value){return typeof value=="string"?value.trim().toLowerCase():""}function resolveStatusId(value,statusRegistry){const token=normalizeStatusToken(value);return token.length===0?"":statusRegistry?.alias_to_id?.get(token)??token}function resolveTypeWorkflows(schema){const rawWorkflows=Array.isArray(schema?.type_workflows)?schema.type_workflows:[],byType=new Map;for(const entry of rawWorkflows){const type=normalizeTypeName(entry?.type);if(type.length===0||!Array.isArray(entry?.allowed_transitions))continue;const pairs=entry.allowed_transitions,record=byType.get(type)??{pairs:[],denyAll:!1};pairs.length===0&&(record.denyAll=!0);for(const pair of pairs){if(!Array.isArray(pair)||pair.length!==2)continue;const from=normalizeStatusToken(pair[0]),to=normalizeStatusToken(pair[1]);from.length===0||to.length===0||record.pairs.some(candidate=>candidate[0]===from&&candidate[1]===to)||record.pairs.push([from,to])}byType.set(type,record)}return[...byType.entries()].filter(([,record])=>record.pairs.length>0||record.denyAll).map(([type,record])=>({type,allowed_transitions:record.pairs})).sort((left,right)=>left.type.localeCompare(right.type))}function evaluateTransition(input){const typeName=normalizeTypeName(input.typeName),matched=input.typeWorkflows.find(workflow=>workflow.type===typeName);if(!matched)return{allowed:!0,hasRule:!1,allowedTransitions:[]};const from=resolveStatusId(input.fromStatus,input.statusRegistry),to=resolveStatusId(input.toStatus,input.statusRegistry);return from.length>0&&from===to?{allowed:!0,hasRule:!0,allowedTransitions:matched.allowed_transitions}:{allowed:matched.allowed_transitions.some(pair=>{const ruleFrom=resolveStatusId(pair[0],input.statusRegistry),ruleTo=resolveStatusId(pair[1],input.statusRegistry);return ruleFrom===from&&ruleTo===to}),hasRule:!0,allowedTransitions:matched.allowed_transitions}}function describeAllowedTransitions(allowedTransitions){return allowedTransitions.length===0?"(no transitions allowed)":allowedTransitions.map(pair=>`${pair[0]} -> ${pair[1]}`).join(", ")}export{describeAllowedTransitions,evaluateTransition,normalizeStatusToken2 as normalizeStatusToken,resolveTypeWorkflows};
|
|
2
2
|
//# sourceMappingURL=type-workflows.js.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
`)}async function enqueuePendingRefreshIds(pmRoot,itemIds){const incoming=itemIds.filter(id=>typeof id
|
|
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]="9ecff496-8afa-5cfc-9178-2be8bd403978")}catch{}})();import{spawn}from"node:child_process";import{mkdirSync,rmSync,statSync}from"node:fs";import path from"node:path";import{pathExists,readFileIfExists,writeFileAtomic}from"../fs/fs-utils.js";import{acquireLock}from"../lock/lock.js";import{resolvePmPackageRootFromModule}from"../packages/root.js";import{readSettingsWithMetadata}from"../store/settings.js";import{toErrorMessage}from"../shared/primitives.js";import{resolveAuthor}from"../shared/author.js";import{resolveSettingsWithSemanticRuntimeDefaults}from"./semantic-defaults.js";const REINDEX_LOCK_ID="reindex",PENDING_QUEUE_REL_PATH="search/pending-refresh.json",PENDING_QUEUE_GATE_REL_PATH="search/pending-refresh.gate.lock",PENDING_QUEUE_GATE_STALE_MS=3e4,SEARCH_REFRESH_INLINE_ENV="PM_SEARCH_REFRESH_INLINE",SEARCH_REFRESH_CHILD_ENV="PM_SEARCH_REFRESH_CHILD",SEARCH_REFRESH_RETRY_DELAY_MS=3e4;function parseBooleanTrueLike(value){if(typeof value!="string")return!1;const normalized=value.trim().toLowerCase();return normalized==="1"||normalized==="true"||normalized==="yes"||normalized==="on"}function shouldRunSearchRefreshInForeground(){if(parseBooleanTrueLike(process.env[SEARCH_REFRESH_INLINE_ENV])||parseBooleanTrueLike(process.env[SEARCH_REFRESH_CHILD_ENV]))return!0;const nodeEnv=(process.env.NODE_ENV??"").trim().toLowerCase();return typeof process.env.VITEST=="string"||typeof process.env.VITEST_WORKER_ID=="string"||nodeEnv==="test"}function pendingQueuePath(pmRoot){return path.join(pmRoot,PENDING_QUEUE_REL_PATH)}function pendingQueueGatePath(pmRoot){return path.join(pmRoot,PENDING_QUEUE_GATE_REL_PATH)}function acquireQueueGate(pmRoot){const gatePath=pendingQueueGatePath(pmRoot);try{if(Date.now()-statSync(gatePath).mtimeMs<PENDING_QUEUE_GATE_STALE_MS)return!1;rmSync(gatePath,{recursive:!0,force:!0})}catch{}try{return mkdirSync(path.dirname(gatePath),{recursive:!0}),mkdirSync(gatePath),!0}catch{return!1}}function releaseQueueGate(pmRoot){try{rmSync(pendingQueueGatePath(pmRoot),{recursive:!0,force:!0})}catch{}}async function withQueueGate(pmRoot,fn,fallback){for(let attempt=0;attempt<50;attempt+=1){if(acquireQueueGate(pmRoot))try{return await fn()}finally{releaseQueueGate(pmRoot)}await delay(20)}return fallback}function delay(ms){return new Promise(resolve=>{setTimeout(resolve,ms)})}async function readPendingQueueIds(pmRoot){const raw=await readFileIfExists(pendingQueuePath(pmRoot));if(!raw||raw.trim().length===0)return[];try{const parsed=JSON.parse(raw);return Array.isArray(parsed.ids)?parsed.ids.filter(id=>typeof id=="string"&&id.length>0):[]}catch{return[]}}async function writePendingQueueIds(pmRoot,ids){await writeFileAtomic(pendingQueuePath(pmRoot),`${JSON.stringify({ids})}
|
|
2
|
+
`)}async function enqueuePendingRefreshIds(pmRoot,itemIds){const incoming=itemIds.filter(id=>typeof id=="string"&&id.trim().length>0);if(incoming.length===0)return;const mergeIncoming=async()=>{const existing=await readPendingQueueIds(pmRoot),merged=[...new Set([...existing,...incoming])].sort((left,right)=>left.localeCompare(right));await writePendingQueueIds(pmRoot,merged)};await withQueueGate(pmRoot,async()=>(await mergeIncoming(),!0),!1)||await mergeIncoming()}async function drainPendingRefreshIds(pmRoot){return withQueueGate(pmRoot,async()=>{const ids=await readPendingQueueIds(pmRoot);return ids.length>0&&await writePendingQueueIds(pmRoot,[]),ids},[])}function searchRefreshRunnerPath(){return path.join(resolvePmPackageRootFromModule(import.meta.url,["../../.."]),"dist","cli","search-refresh.js")}function dispatchRefreshChild(pmRoot){try{const child=spawn(process.execPath,[searchRefreshRunnerPath()],{detached:!0,stdio:"ignore",env:{...process.env,PM_PATH:pmRoot,[SEARCH_REFRESH_CHILD_ENV]:"1"}});child.on("error",()=>{}),child.unref()}catch{}}function scheduleDelayedRefreshRetry(pmRoot){setTimeout(()=>dispatchRefreshChild(pmRoot),SEARCH_REFRESH_RETRY_DELAY_MS)}async function scheduleBackgroundSemanticRefresh(pmRoot,itemIds){await enqueuePendingRefreshIds(pmRoot,itemIds),dispatchRefreshChild(pmRoot)}async function runSemanticRefreshWorker(pmRoot,refresh,scheduleRetry=scheduleDelayedRefreshRetry){const warnings=[],processed=[];if(!await pathExists(pmRoot))return{processed,rounds:0,warnings};let settings;try{const settingsRead=await readSettingsWithMetadata(pmRoot),readFailure=settingsRead.warnings.find(warning=>warning.startsWith("settings_read_"));if(readFailure)return scheduleRetry(pmRoot),{processed,rounds:0,warnings:[`search_background_refresh_settings_read_failed:${readFailure}`]};settings=resolveSettingsWithSemanticRuntimeDefaults(settingsRead.settings).settings}catch(error){return scheduleRetry(pmRoot),{processed,rounds:0,warnings:[`search_background_refresh_settings_read_failed:${toErrorMessage(error)}`]}}let release=null;try{release=await acquireLock(pmRoot,REINDEX_LOCK_ID,settings.locks.ttl_seconds,resolveAuthor(void 0,"pm-search-refresh"),!1,settings.governance.force_required_for_stale_lock,settings.locks.wait_ms)}catch{}if(!release)return{processed,rounds:0,warnings};let rounds=0,failed=!1,retryPending=!1;try{for(;;){const ids=await drainPendingRefreshIds(pmRoot);if(ids.length===0)break;rounds+=1;try{const result=await refresh(pmRoot,ids);if(warnings.push(...result.warnings),result.warnings.some(warning=>warning.startsWith("search_semantic_refresh_skipped:settings_read_failed:"))){await enqueuePendingRefreshIds(pmRoot,ids),failed=!0,retryPending=!0;break}processed.push(...result.refreshed)}catch(error){warnings.push(`search_background_refresh_failed:${toErrorMessage(error)}`),await enqueuePendingRefreshIds(pmRoot,ids),failed=!0;break}}}finally{await release?.()}return retryPending&&scheduleRetry(pmRoot),(failed?[]:await readPendingQueueIds(pmRoot)).length>0&&dispatchRefreshChild(pmRoot),{processed:[...new Set(processed)].sort((a,b)=>a.localeCompare(b)),rounds,warnings}}export{REINDEX_LOCK_ID,SEARCH_REFRESH_RETRY_DELAY_MS,drainPendingRefreshIds,enqueuePendingRefreshIds,runSemanticRefreshWorker,scheduleBackgroundSemanticRefresh,shouldRunSearchRefreshInForeground};
|
|
3
3
|
//# sourceMappingURL=background-refresh.js.map
|
package/dist/core/search/bm25.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="0272e482-0dab-5970-b19a-4da286fd112b")}catch{}})();import{tokenizeAlphaNumeric}from"../shared/text-normalization.js";const DEFAULT_BM25_K1=1.2,DEFAULT_BM25_B=.75;function tokenizeBm25(text){return tokenizeAlphaNumeric(text)}function buildTermFrequencies(tokens){const frequencies=new Map;for(const token of tokens)frequencies.set(token,(frequencies.get(token)??0)+1);return frequencies}function buildBm25Index(documents){const stats=[],documentFrequency=new Map;let totalLength=0;for(const document of documents){const tokens=tokenizeBm25(document.text),termFrequencies=buildTermFrequencies(tokens);totalLength+=tokens.length;for(const term of termFrequencies.keys())documentFrequency.set(term,(documentFrequency.get(term)??0)+1);stats.push({id:document.id,termFrequencies,length:tokens.length})}const documentCount=stats.length;return{documents:stats,documentFrequency,documentCount,averageDocumentLength:documentCount>0?totalLength/documentCount:0}}function inverseDocumentFrequency(documentCount,termDocumentFrequency){return Math.log(1+(documentCount-termDocumentFrequency+.5)/(termDocumentFrequency+.5))}function scoreBm25Query(index,queryTokens,params){const scores=new Map;if(index.documentCount===0||index.averageDocumentLength===0)return scores;const distinctQueryTerms=[...new Set(queryTokens.filter(token=>token.length>0))];if(distinctQueryTerms.length===0)return scores;const idfByTerm=new Map;for(const term of distinctQueryTerms){const termDocumentFrequency=index.documentFrequency.get(term);termDocumentFrequency!==void 0&&idfByTerm.set(term,inverseDocumentFrequency(index.documentCount,termDocumentFrequency))}if(idfByTerm.size===0)return scores;for(const document of index.documents){let score=0;for(const[term,idf]of idfByTerm){const termFrequency=document.termFrequencies.get(term);if(termFrequency===void 0)continue;const lengthNormalization=1-params.b+params.b*document.length/index.averageDocumentLength,denominator=termFrequency+params.k1*lengthNormalization;score+=idf*(termFrequency*(params.k1+1)/denominator)}score>0&&scores.set(document.id,score)}return scores}function resolveClampedParam(candidate,fallback,min,max){return typeof candidate!="number"||!Number.isFinite(candidate)?fallback:Math.min(max,Math.max(min,candidate))}function flattenSearchCorpusText(corpus){const collectValueText=value=>typeof value=="string"?[value]:typeof value=="number"?[String(value)]:Array.isArray(value)?value.flatMap(collectValueText):typeof value=="object"&&value!==null?Object.values(value).flatMap(collectValueText):[];return collectValueText(Object.values(corpus)).join(" ")}function resolveBm25Params(settings){const bm25=settings?.search?.bm25;return{k1:resolveClampedParam(bm25?.k1,DEFAULT_BM25_K1,0,1e3),b:resolveClampedParam(bm25?.b,DEFAULT_BM25_B,0,1)}}export{DEFAULT_BM25_B,DEFAULT_BM25_K1,buildBm25Index,flattenSearchCorpusText,resolveBm25Params,scoreBm25Query,tokenizeBm25};
|
|
2
2
|
//# sourceMappingURL=bm25.js.map
|