@unbrained/pm-cli 2026.9.7 → 2026.9.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/skills/pm-developer/SKILL.md +12 -4
- package/.agents/skills/pm-developer/references/MULTI_AGENT_MERGE.md +19 -10
- package/.agents/skills/pm-extensions/SKILL.md +6 -0
- package/.agents/skills/pm-sdk/SKILL.md +11 -2
- package/.agents/skills/pm-user/SKILL.md +7 -2
- package/.agents/skills/pm-user/references/ECOSYSTEM_PLANNING.md +95 -0
- package/.claude-plugin/marketplace.json +2 -2
- package/CHANGELOG.md +231 -182
- package/dist/cli/after-command-context-usage.js +1 -48
- package/dist/cli/argv-utils.js +1 -40
- package/dist/cli/bootstrap-args.js +1 -9
- package/dist/cli/bundle-integrity.js +2 -110
- package/dist/cli/commander-usage.js +11 -771
- package/dist/cli/commands/activity.js +1 -9
- package/dist/cli/commands/aggregate.js +1 -5
- package/dist/cli/commands/append.js +1 -5
- package/dist/cli/commands/claim.js +1 -5
- package/dist/cli/commands/close-many.js +1 -5
- package/dist/cli/commands/close.js +1 -9
- package/dist/cli/commands/comments.js +1 -5
- package/dist/cli/commands/config.js +1 -9
- package/dist/cli/commands/context.js +1 -9
- package/dist/cli/commands/contracts.js +1 -5
- package/dist/cli/commands/copy.js +1 -9
- package/dist/cli/commands/create.js +1 -9
- package/dist/cli/commands/delete.js +1 -9
- package/dist/cli/commands/deps.js +1 -9
- package/dist/cli/commands/docs.js +1 -9
- package/dist/cli/commands/duplicates.js +1 -9
- package/dist/cli/commands/eval.js +1 -9
- package/dist/cli/commands/extension/describe.js +1 -5
- package/dist/cli/commands/extension/scaffold.js +1 -5
- package/dist/cli/commands/extension/shared.js +1 -5
- package/dist/cli/commands/extension.js +1 -9
- package/dist/cli/commands/files.js +1 -9
- package/dist/cli/commands/focus.js +1 -9
- package/dist/cli/commands/gc.js +1 -9
- package/dist/cli/commands/get.js +1 -9
- package/dist/cli/commands/graph.js +1 -10
- package/dist/cli/commands/health.js +1 -9
- package/dist/cli/commands/history-compact.js +1 -10
- package/dist/cli/commands/history-redact.js +1 -11
- package/dist/cli/commands/history-repair.js +1 -10
- package/dist/cli/commands/history.js +1 -5
- package/dist/cli/commands/index.js +1 -58
- package/dist/cli/commands/init-agent-guidance.js +1 -9
- package/dist/cli/commands/init.js +1 -9
- package/dist/cli/commands/learnings.js +1 -5
- package/dist/cli/commands/lifecycle-transitions.js +1 -5
- package/dist/cli/commands/list.js +1 -9
- package/dist/cli/commands/merge.js +1 -11
- package/dist/cli/commands/next.js +1 -9
- package/dist/cli/commands/notes.js +1 -5
- package/dist/cli/commands/plan.js +1 -9
- package/dist/cli/commands/profile.js +1 -9
- package/dist/cli/commands/restore.js +1 -9
- package/dist/cli/commands/scheduling-shortcuts.js +1 -9
- package/dist/cli/commands/schema.js +1 -10
- package/dist/cli/commands/search.js +1 -9
- package/dist/cli/commands/stats.js +1 -9
- package/dist/cli/commands/telemetry.js +1 -9
- package/dist/cli/commands/test-all.js +1 -9
- package/dist/cli/commands/test-runs.js +1 -9
- package/dist/cli/commands/test.js +1 -9
- package/dist/cli/commands/update-many.js +1 -5
- package/dist/cli/commands/update.js +1 -9
- package/dist/cli/commands/upgrade.js +1 -5
- package/dist/cli/commands/validate.js +1 -15
- package/dist/cli/context-intent-invocation.js +1 -20
- package/dist/cli/description-stdin.js +1 -17
- package/dist/cli/error-guidance.js +1 -1353
- package/dist/cli/extension-command-help.js +5 -636
- package/dist/cli/extension-command-options.js +1 -427
- package/dist/cli/extension-recovery.js +1 -126
- package/dist/cli/help-content.js +2 -1001
- package/dist/cli/help-json-payload.js +4 -570
- package/dist/cli/main.d.ts +4 -0
- package/dist/cli/main.js +5 -2573
- package/dist/cli/migration-gates.js +1 -289
- package/dist/cli/public.js +1 -20
- package/dist/cli/register-annotations.js +1 -270
- package/dist/cli/register-assurance.js +1 -62
- package/dist/cli/register-files-lookup.js +1 -56
- package/dist/cli/register-history-activity.d.ts +8 -0
- package/dist/cli/register-history-activity.js +2 -0
- package/dist/cli/register-history-author.js +1 -38
- package/dist/cli/register-history-maintenance.d.ts +9 -0
- package/dist/cli/register-history-maintenance.js +2 -0
- package/dist/cli/register-list-query.js +10 -943
- package/dist/cli/register-mutation-options.js +1 -9
- package/dist/cli/register-mutation.d.ts +0 -5
- package/dist/cli/register-mutation.js +19 -1893
- package/dist/cli/register-operations.js +1 -920
- package/dist/cli/register-setup.js +1 -716
- package/dist/cli/register-structured-mutation.js +1 -196
- package/dist/cli/registration-helpers.js +1 -5
- package/dist/cli/runtime-compatibility-boundary.js +4 -42
- package/dist/cli/schema-registration-helpers.js +1 -73
- package/dist/cli/search-refresh.js +1 -13
- package/dist/cli/stats-analytics-json.js +1 -68
- package/dist/cli/telemetry-flush.js +1 -10
- package/dist/cli-bundle/bundle-manifest.json +164 -156
- package/dist/cli-bundle/chunks/{chunk-NPN5I67J.js → chunk-3IPRM75M.js} +3 -3
- package/dist/cli-bundle/chunks/chunk-4VL5P22L.js +2 -0
- package/dist/cli-bundle/chunks/chunk-AAFBV3U3.js +29 -0
- package/dist/cli-bundle/chunks/chunk-D3YVILJJ.js +20 -0
- package/dist/cli-bundle/chunks/{chunk-WYRZZ5ZE.js → chunk-DEZPZOQ7.js} +2 -2
- package/dist/cli-bundle/chunks/chunk-ECBLPN7B.js +3 -0
- package/dist/cli-bundle/chunks/chunk-J6ERHBV2.js +235 -0
- package/dist/cli-bundle/chunks/chunk-JUNJ5EKI.js +2 -0
- package/dist/cli-bundle/chunks/chunk-L5RCDKQ2.js +2 -0
- package/dist/cli-bundle/chunks/chunk-NSAPNEYH.js +2 -0
- package/dist/cli-bundle/chunks/chunk-OHNLSGGV.js +79 -0
- package/dist/cli-bundle/chunks/chunk-WQKMSFBV.js +5 -0
- package/dist/cli-bundle/chunks/{chunk-BAX2BYUW.js → chunk-XZ6T7YPP.js} +256 -150
- package/dist/cli-bundle/chunks/{chunk-JT6XF6GE.js → chunk-Z3XVXUVF.js} +4 -4
- package/dist/cli-bundle/chunks/register-list-query-UIHRCS6D.js +11 -0
- package/dist/cli-bundle/chunks/register-mutation-WHWMGRVX.js +20 -0
- package/dist/cli-bundle/chunks/register-operations-64YZYTC5.js +2 -0
- package/dist/cli-bundle/chunks/register-setup-PERI45EM.js +2 -0
- package/dist/cli-bundle/focused-chunks/chunk-2W4XIYOB.js +2 -0
- package/dist/cli-bundle/focused-chunks/chunk-2WSBXIGF.js +12 -0
- package/dist/cli-bundle/focused-chunks/chunk-5FHTCOHS.js +3 -0
- package/dist/cli-bundle/focused-chunks/chunk-7N6DOREF.js +26 -0
- package/dist/cli-bundle/focused-chunks/{chunk-3BZEOXLT.js → chunk-7PC4R5QB.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-BUCJUZVG.js +6 -0
- package/dist/cli-bundle/focused-chunks/chunk-FE3BABLJ.js +2 -0
- package/dist/cli-bundle/focused-chunks/chunk-IWITF53W.js +2 -0
- package/dist/cli-bundle/focused-chunks/chunk-OQUGRHKV.js +10 -0
- package/dist/cli-bundle/focused-chunks/{chunk-M6PBRFSH.js → chunk-PNKIANFZ.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-LIJIA4TY.js → chunk-QQQ4SAUO.js} +3 -3
- package/dist/cli-bundle/focused-chunks/chunk-TTYXF5YD.js +177 -0
- package/dist/cli-bundle/focused-chunks/chunk-XNR3DM6J.js +2 -0
- package/dist/cli-bundle/focused-chunks/chunk-XSS3APUF.js +9 -0
- package/dist/cli-bundle/focused-chunks/chunk-YCDQ2N23.js +8 -0
- package/dist/cli-bundle/focused-chunks/chunk-YJUXGS57.js +20 -0
- package/dist/cli-bundle/focused-chunks/chunk-ZTCE4UO6.js +58 -0
- package/dist/cli-bundle/main.js +20 -20
- package/dist/cli-bundle/sdk-authoring.js +1 -1
- package/dist/cli-bundle/sdk-contracts.js +2 -2
- package/dist/cli-bundle/sdk-core.js +37 -37
- package/dist/cli-bundle/sdk-governance.js +1 -1
- package/dist/cli-bundle/sdk-graph.js +1 -1
- package/dist/cli-bundle/sdk-merge.js +42 -42
- package/dist/cli-bundle/sdk-query.js +1 -1
- package/dist/cli-bundle/sdk-runtime.js +1 -1
- package/dist/cli-bundle/sdk-testing.js +1 -1
- package/dist/cli-bundle/sdk.js +11 -11
- package/dist/cli.js +1 -104
- package/dist/core/checkpoint/checkpoint-gc.js +1 -169
- package/dist/core/checkpoint/mutation-checkpoint.js +2 -133
- package/dist/core/config/nested-settings.js +1 -534
- package/dist/core/config/positional-value.js +1 -109
- package/dist/core/diagnostics/remediation.js +1 -506
- package/dist/core/extensions/activation-summary-markdown.js +2 -145
- package/dist/core/extensions/activation-summary.js +1 -92
- package/dist/core/extensions/activation-transaction.js +1 -46
- package/dist/core/extensions/capability-usage.js +1 -173
- package/dist/core/extensions/command-hook-context.js +1 -13
- package/dist/core/extensions/command-metadata-contract.js +1 -22
- package/dist/core/extensions/command-visibility-tier.js +1 -29
- package/dist/core/extensions/contribution-inventory.js +1 -173
- package/dist/core/extensions/exporter-output-contract.js +1 -66
- package/dist/core/extensions/extension-candidate.js +1 -18
- package/dist/core/extensions/extension-capability-aliases.js +1 -158
- package/dist/core/extensions/extension-hook-runtime.js +1 -699
- package/dist/core/extensions/extension-policy.js +1 -599
- package/dist/core/extensions/extension-registries.js +1 -62
- package/dist/core/extensions/extension-runtime-helpers.js +1 -33
- package/dist/core/extensions/extension-types.js +1 -102
- package/dist/core/extensions/flag-definition-validation.js +1 -52
- package/dist/core/extensions/flag-value-types.js +1 -64
- package/dist/core/extensions/index.js +1 -526
- package/dist/core/extensions/item-field-types.js +1 -39
- package/dist/core/extensions/item-fields.js +1 -261
- package/dist/core/extensions/loader.js +1 -2223
- package/dist/core/extensions/manifest-schema.js +1 -69
- package/dist/core/extensions/module-graph-snapshot.js +1 -33
- package/dist/core/extensions/preflight-ownership.js +1 -41
- package/dist/core/extensions/registration-validation.js +1 -82
- package/dist/core/extensions/registration-values.js +1 -209
- package/dist/core/extensions/reserved-host-flags.js +1 -36
- package/dist/core/extensions/runtime-registrations.js +1 -67
- package/dist/core/extensions/service-ownership.js +1 -19
- package/dist/core/extensions/version-compat.js +1 -216
- package/dist/core/fs/fs-utils.js +2 -158
- package/dist/core/fs/host-environment-errors.js +1 -141
- package/dist/core/fs/index.js +1 -9
- package/dist/core/fs/path-utils.js +1 -17
- package/dist/core/governance/content-fields.js +1 -160
- package/dist/core/governance/issue-codes.js +1 -151
- package/dist/core/governance/metadata-coverage.js +1 -358
- package/dist/core/history/drift-cache.js +3 -72
- package/dist/core/history/drift-scan.js +1 -342
- package/dist/core/history/event-classification.js +1 -109
- package/dist/core/history/event-index.js +8 -784
- package/dist/core/history/history-compact-bulk.js +1 -104
- package/dist/core/history/history-diff.js +1 -158
- package/dist/core/history/history-rewrite.d.ts +6 -1
- package/dist/core/history/history-rewrite.js +1 -107
- package/dist/core/history/history-storage-stats.js +1 -102
- package/dist/core/history/history-stream-policy.js +1 -62
- package/dist/core/history/history.js +2 -617
- package/dist/core/history/identity.js +1 -30
- package/dist/core/history/index.js +1 -9
- package/dist/core/history/projection.js +1 -196
- package/dist/core/history/read.d.ts +9 -0
- package/dist/core/history/read.js +1 -57
- package/dist/core/history/replay.js +2 -439
- package/dist/core/history/version-address.js +1 -32
- package/dist/core/history/workspace-history.js +2 -433
- package/dist/core/io/body-file.js +1 -62
- package/dist/core/io/bulk-ids-input.js +1 -112
- package/dist/core/item/actionability.js +1 -327
- package/dist/core/item/dependency-reference.js +1 -20
- package/dist/core/item/id.js +1 -112
- package/dist/core/item/index.js +1 -12
- package/dist/core/item/item-format-version.js +1 -78
- package/dist/core/item/item-format.js +5 -1473
- package/dist/core/item/item-record.js +1 -23
- package/dist/core/item/item-type-definition.js +1 -133
- package/dist/core/item/parent-reference-policy.js +1 -57
- package/dist/core/item/parse.js +2 -603
- package/dist/core/item/plan-lifecycle.js +1 -19
- package/dist/core/item/priority.js +1 -61
- package/dist/core/item/sprint-release-format.js +1 -38
- package/dist/core/item/status-filter.js +1 -115
- package/dist/core/item/status.js +1 -43
- package/dist/core/item/toon-decode.js +1 -29
- package/dist/core/item/type-registry.js +1 -715
- package/dist/core/item/type-synonyms.js +1 -38
- package/dist/core/lock/index.js +1 -9
- package/dist/core/lock/lock-gc.js +1 -240
- package/dist/core/lock/lock.js +3 -590
- package/dist/core/output/mutation-projection.js +1 -217
- package/dist/core/output/output-control.js +1 -25
- package/dist/core/output/output.js +11 -494
- package/dist/core/output/query-summary.js +1 -58
- package/dist/core/output/tabular.js +1 -77
- package/dist/core/packages/manifest.js +1 -244
- package/dist/core/packages/root.js +1 -84
- package/dist/core/policy/workflow-policy-schema.d.ts +312 -0
- package/dist/core/policy/workflow-policy-schema.js +2 -0
- package/dist/core/policy/workflow-policy-store.d.ts +24 -0
- package/dist/core/policy/workflow-policy-store.js +2 -0
- package/dist/core/policy/workflow-policy.d.ts +139 -0
- package/dist/core/policy/workflow-policy.js +2 -0
- package/dist/core/profile/profile-describe.js +1 -83
- package/dist/core/profile/profile-lint.js +1 -415
- package/dist/core/profile/profile-plan.js +0 -0
- package/dist/core/profile/profile-presets.js +1 -370
- package/dist/core/reproducibility/context.js +1 -82
- package/dist/core/schema/fields-file.js +2 -288
- package/dist/core/schema/item-types-file.js +2 -296
- package/dist/core/schema/runtime-field-filters.js +1 -49
- package/dist/core/schema/runtime-field-values.js +1 -313
- package/dist/core/schema/runtime-schema.js +2 -826
- package/dist/core/schema/status-defs-file.js +2 -227
- package/dist/core/schema/status-token.js +1 -31
- package/dist/core/schema/type-inference.js +1 -95
- package/dist/core/schema/type-presets.js +1 -87
- package/dist/core/schema/type-workflows.js +1 -104
- package/dist/core/search/background-refresh.js +2 -286
- package/dist/core/search/bm25.js +1 -146
- package/dist/core/search/cache.js +2 -534
- package/dist/core/search/corpus.js +1 -311
- package/dist/core/search/embedding-batches.js +1 -163
- package/dist/core/search/eval.js +1 -225
- package/dist/core/search/http-client.js +1 -75
- package/dist/core/search/providers.js +1 -242
- package/dist/core/search/relevance.js +1 -244
- package/dist/core/search/semantic-defaults.js +1 -199
- package/dist/core/search/staleness.js +1 -30
- package/dist/core/search/vector-stores.js +2 -664
- package/dist/core/search/vectorization-metadata.js +1 -81
- package/dist/core/sentry/helpers.js +1 -272
- package/dist/core/sentry/instrument.js +1 -387
- package/dist/core/session/session-state.js +1 -260
- package/dist/core/shared/agent-session-context.js +1 -133
- package/dist/core/shared/author.js +1 -1172
- package/dist/core/shared/command-types.js +1 -4
- package/dist/core/shared/conflict-markers.js +1 -31
- package/dist/core/shared/constants.js +1 -405
- package/dist/core/shared/errors.js +1 -20
- package/dist/core/shared/html-entity-decode.js +1 -131
- package/dist/core/shared/index.js +1 -12
- package/dist/core/shared/item-metadata-contract.js +1 -89
- package/dist/core/shared/lazy-module.js +1 -16
- package/dist/core/shared/levenshtein.js +1 -61
- package/dist/core/shared/memo.js +1 -19
- package/dist/core/shared/numeric-parsers.js +1 -20
- package/dist/core/shared/option-alias-visibility.js +1 -67
- package/dist/core/shared/primitives.js +1 -127
- package/dist/core/shared/serial-queue.js +1 -79
- package/dist/core/shared/serialization.js +1 -210
- package/dist/core/shared/split-comma-list.js +1 -30
- package/dist/core/shared/text-normalization.js +1 -38
- package/dist/core/shared/time.js +1 -306
- package/dist/core/store/index.js +1 -12
- package/dist/core/store/item-format-migration.js +1 -125
- package/dist/core/store/item-metadata-cache.js +1 -1116
- package/dist/core/store/item-metadata-query-index.js +9 -394
- package/dist/core/store/item-metadata-read-work.js +1 -43
- package/dist/core/store/item-store.js +1 -693
- package/dist/core/store/paths.d.ts +1 -1
- package/dist/core/store/paths.js +1 -214
- package/dist/core/store/settings-read-cache.js +1 -85
- package/dist/core/store/settings-validator.d.ts +1 -0
- package/dist/core/store/settings-validator.js +1 -421
- package/dist/core/store/settings.js +3 -1309
- package/dist/core/store/tracker-preflight.js +1 -141
- package/dist/core/telemetry/consent.js +5 -108
- package/dist/core/telemetry/observability.js +1 -246
- package/dist/core/telemetry/runtime.js +4 -1988
- package/dist/core/test/background-runs.js +4 -945
- package/dist/core/test/item-test-run-tracking.js +1 -63
- package/dist/core/test/run-selectors.js +1 -120
- package/dist/core/validate/estimate-defaults.js +1 -89
- package/dist/core/validate/fix-planning.js +1 -189
- package/dist/core/validate/linked-artifact-reference.js +1 -36
- package/dist/core/validate/missing-by-type.js +1 -34
- package/dist/core/validate/missing-link-owners.js +1 -95
- package/dist/core/validate/stale-file-classification.js +1 -82
- package/dist/mcp/http-server.js +5 -448
- package/dist/mcp/legacy-adapter.js +1 -77
- package/dist/mcp/runtime-capabilities.js +1 -200
- package/dist/mcp/server.js +4 -1233
- package/dist/mcp/tool-definitions.js +1 -804
- package/dist/sdk/actionability.js +1 -13
- package/dist/sdk/agent/closed-domain-contracts.js +1 -161
- package/dist/sdk/agent/command-recovery.js +1 -59
- package/dist/sdk/agent/command-suggestions.js +1 -66
- package/dist/sdk/agent/create-option-policy.js +1 -31
- package/dist/sdk/agent/identity-config.js +1 -106
- package/dist/sdk/agent/item-addressing.js +1 -207
- package/dist/sdk/agent/refusal-closure-census.js +1 -151
- package/dist/sdk/agent/refusal-closure.js +1 -133
- package/dist/sdk/agent/refusal-corpus-contracts.js +1 -193
- package/dist/sdk/agent/refusal-reachability.js +1 -593
- package/dist/sdk/agent/subcommand-recovery.js +1 -83
- package/dist/sdk/agent/task-transcript-contracts.js +1 -197
- package/dist/sdk/agent/tracker-preflight-contracts.js +1 -126
- package/dist/sdk/agent-capability-contracts.js +1 -428
- package/dist/sdk/agent-session-context.js +1 -9
- package/dist/sdk/annotations.js +1 -448
- package/dist/sdk/author-attribution.js +1 -468
- package/dist/sdk/authoring.js +1 -20
- package/dist/sdk/cli-bootstrap.js +1 -838
- package/dist/sdk/cli-contracts/agent-output-contracts.d.ts +1 -1
- package/dist/sdk/cli-contracts/agent-output-contracts.js +4 -476
- package/dist/sdk/cli-contracts/bootstrap-command-scanner.js +1 -79
- package/dist/sdk/cli-contracts/command-aliases.d.ts +4 -0
- package/dist/sdk/cli-contracts/command-aliases.js +1 -107
- package/dist/sdk/cli-contracts/command-exit-contracts.js +1 -151
- package/dist/sdk/cli-contracts/commander-mutation-options.js +1 -1081
- package/dist/sdk/cli-contracts/commander-types.js +1 -159
- package/dist/sdk/cli-contracts/completeness.js +1 -393
- package/dist/sdk/cli-contracts/enum-contracts.d.ts +1 -1
- package/dist/sdk/cli-contracts/enum-contracts.js +1 -222
- package/dist/sdk/cli-contracts/flag-contracts.js +1 -1947
- package/dist/sdk/cli-contracts/flag-lexicon-contracts.js +1 -347
- package/dist/sdk/cli-contracts/grammar-contracts.js +1 -986
- package/dist/sdk/cli-contracts/registration-helpers.js +7 -990
- package/dist/sdk/cli-contracts/runtime-contracts.d.ts +5 -0
- package/dist/sdk/cli-contracts/runtime-contracts.js +1 -2090
- package/dist/sdk/cli-contracts/schemas/assurance-definition.js +1 -324
- package/dist/sdk/cli-contracts/string-lists.js +1 -16
- package/dist/sdk/cli-contracts/tool-option-contracts.js +1 -461
- package/dist/sdk/cli-contracts/tool-parameter-tables.js +1 -2167
- package/dist/sdk/cli-contracts/tool-schema.d.ts +3 -1
- package/dist/sdk/cli-contracts/tool-schema.js +1 -1664
- package/dist/sdk/cli-contracts/typed-action-inputs.js +1 -4
- package/dist/sdk/cli-contracts.d.ts +1 -1
- package/dist/sdk/cli-contracts.js +1 -17
- package/dist/sdk/cli-program.js +1 -49
- package/dist/sdk/command-line.d.ts +2 -5
- package/dist/sdk/command-line.js +1 -78
- package/dist/sdk/comments.js +1 -133
- package/dist/sdk/compile-cache.js +1 -73
- package/dist/sdk/completion.js +174 -839
- package/dist/sdk/compose.js +1 -1090
- package/dist/sdk/config.js +1 -1204
- package/dist/sdk/context/recency.js +1 -33
- package/dist/sdk/context/semantic-session-attribution.js +1 -82
- package/dist/sdk/context/usage-egress.js +1 -29
- package/dist/sdk/context/usage-ledger.js +3 -185
- package/dist/sdk/context-intent-contracts.js +1 -709
- package/dist/sdk/context-intent-runtime.js +1 -115
- package/dist/sdk/context-packing.js +1 -218
- package/dist/sdk/context-relevance.js +1 -503
- package/dist/sdk/context-signal-store.js +2 -426
- package/dist/sdk/context-usage.js +1 -367
- package/dist/sdk/contracts.js +1 -23
- package/dist/sdk/core-governance.js +1 -14
- package/dist/sdk/core.js +1 -14
- package/dist/sdk/corpus-shape.js +1 -401
- package/dist/sdk/define.js +1 -220
- package/dist/sdk/dependencies.js +1 -718
- package/dist/sdk/dependency-flag-validation.js +1 -156
- package/dist/sdk/dependency-provenance.js +1 -135
- package/dist/sdk/docs.js +1 -14
- package/dist/sdk/duplicates.js +1 -40
- package/dist/sdk/environment/agent-environment.js +1 -466
- package/dist/sdk/environment/host-environment-errors.js +1 -8
- package/dist/sdk/environment/project-runtime-compatibility.js +1 -481
- package/dist/sdk/environment/source-context.js +1 -28
- package/dist/sdk/environment/tracker-preflight.js +1 -9
- package/dist/sdk/error-code-catalog.js +1 -153
- package/dist/sdk/error-runtime.js +1 -58
- package/dist/sdk/errors.js +1 -58
- package/dist/sdk/eval.js +1 -190
- package/dist/sdk/extension/author-manifest.js +1 -92
- package/dist/sdk/extension/bundled-catalog.js +1 -332
- package/dist/sdk/extension/concurrency.js +1 -25
- package/dist/sdk/extension/copy-scope.d.ts +2 -0
- package/dist/sdk/extension/copy-scope.js +2 -0
- package/dist/sdk/extension/custom-field-collisions.js +1 -30
- package/dist/sdk/extension/describe.js +3 -189
- package/dist/sdk/extension/doctor.js +1 -606
- package/dist/sdk/extension/install-plan.d.ts +69 -0
- package/dist/sdk/extension/install-plan.js +2 -0
- package/dist/sdk/extension/install-receipts.d.ts +7 -0
- package/dist/sdk/extension/install-receipts.js +2 -0
- package/dist/sdk/extension/install-runtime.js +3 -313
- package/dist/sdk/extension/install-snapshot.js +1 -66
- package/dist/sdk/extension/install-sources.js +5 -1057
- package/dist/sdk/extension/managed-state.js +2 -252
- package/dist/sdk/extension/migrations.js +2 -174
- package/dist/sdk/extension/output-ownership.js +1 -25
- package/dist/sdk/extension/runtime-summary.js +1 -18
- package/dist/sdk/extension/scaffold.js +4 -2308
- package/dist/sdk/extension/shared.js +1 -147
- package/dist/sdk/extension/source-resolution.js +1 -65
- package/dist/sdk/extension/update-check.js +1 -67
- package/dist/sdk/extension-command-context.js +1 -44
- package/dist/sdk/extension-contracts.js +1 -73
- package/dist/sdk/extension.d.ts +7 -2
- package/dist/sdk/extension.js +1 -2196
- package/dist/sdk/files.js +1 -535
- package/dist/sdk/flag-invocation-contracts.d.ts +0 -5
- package/dist/sdk/flag-invocation-contracts.js +1 -344
- package/dist/sdk/generated/generated-error-code-catalog-part-1.js +1 -2224
- package/dist/sdk/generated/generated-error-code-catalog-part-2.js +1 -2236
- package/dist/sdk/generated-error-code-catalog.js +1 -16
- package/dist/sdk/governance/assurance-action-contracts.js +1 -4
- package/dist/sdk/governance/assurance-action.js +1 -411
- package/dist/sdk/governance/assurance-limits.js +1 -10
- package/dist/sdk/governance/assurance-mutation-error.js +1 -81
- package/dist/sdk/governance/assurance-presets.js +1 -135
- package/dist/sdk/governance/assurance-runtime.js +1 -238
- package/dist/sdk/governance/assurance.js +4 -1182
- package/dist/sdk/governance/boundary-fixtures.js +1 -200
- package/dist/sdk/governance/coverage-assurance.js +1 -60
- package/dist/sdk/governance/defect-recurrence-coverage.js +1 -188
- package/dist/sdk/governance/defect-recurrence-graph.js +1 -120
- package/dist/sdk/governance/defect-recurrence-signals.js +1 -24
- package/dist/sdk/governance/defect-recurrence.js +1 -623
- package/dist/sdk/governance/extension-host-version.js +1 -115
- package/dist/sdk/governance/gc.js +1 -368
- package/dist/sdk/governance/health.js +1 -2367
- package/dist/sdk/governance/hierarchy-validation.js +1 -108
- package/dist/sdk/governance/linked-file-report.js +1 -71
- package/dist/sdk/governance/merge-receipt-history.js +1 -206
- package/dist/sdk/governance/provenance-health.js +1 -282
- package/dist/sdk/governance/reindex.js +4 -761
- package/dist/sdk/governance/stale-work.js +1 -82
- package/dist/sdk/governance/status-role-diagnostics.js +1 -35
- package/dist/sdk/governance/storage-integrity.js +1 -280
- package/dist/sdk/governance/tracked-runtime-cache.js +1 -106
- package/dist/sdk/governance/upgrade.js +2 -327
- package/dist/sdk/governance/validate-history-drift.js +1 -81
- package/dist/sdk/governance/validate-item-reader.js +1 -17
- package/dist/sdk/governance/validate-normalization.js +1 -36
- package/dist/sdk/governance/validate.d.ts +3 -1
- package/dist/sdk/governance/validate.js +1 -2261
- package/dist/sdk/governance/workflow-completeness.d.ts +32 -0
- package/dist/sdk/governance/workflow-completeness.js +2 -0
- package/dist/sdk/governance/workflow-policy.d.ts +47 -0
- package/dist/sdk/governance/workflow-policy.js +4 -0
- package/dist/sdk/governance/workspace-position.js +1 -163
- package/dist/sdk/governance.d.ts +2 -0
- package/dist/sdk/governance.js +1 -31
- package/dist/sdk/graph/adapter.js +1 -181
- package/dist/sdk/graph/analytics.js +1 -474
- package/dist/sdk/graph/assembly.js +1 -377
- package/dist/sdk/graph/cache.js +1 -160
- package/dist/sdk/graph/centrality.js +1 -258
- package/dist/sdk/graph/conformance.js +1 -130
- package/dist/sdk/graph/deadline-scheduling.d.ts +90 -0
- package/dist/sdk/graph/deadline-scheduling.js +2 -0
- package/dist/sdk/graph/durable-cache.d.ts +1 -1
- package/dist/sdk/graph/durable-cache.js +1 -361
- package/dist/sdk/graph/governance-contracts.js +1 -34
- package/dist/sdk/graph/governance.d.ts +13 -1
- package/dist/sdk/graph/governance.js +1 -735
- package/dist/sdk/graph/hierarchy-integrity.js +1 -310
- package/dist/sdk/graph/index.d.ts +3 -2
- package/dist/sdk/graph/index.js +1 -26
- package/dist/sdk/graph/lifecycle-coverage.d.ts +32 -0
- package/dist/sdk/graph/lifecycle-coverage.js +2 -0
- package/dist/sdk/graph/mutation-advisory.js +1 -176
- package/dist/sdk/graph/remediation.js +1 -197
- package/dist/sdk/graph/run.d.ts +15 -1
- package/dist/sdk/graph/run.js +1 -768
- package/dist/sdk/graph/scheduling.js +1 -124
- package/dist/sdk/graph/traversal.js +1 -284
- package/dist/sdk/graph/workspace-relationship-kind-registry.js +1 -27
- package/dist/sdk/graph.js +1 -15
- package/dist/sdk/guide-topics.js +1 -707
- package/dist/sdk/guide.js +1 -279
- package/dist/sdk/history/maintenance.d.ts +71 -0
- package/dist/sdk/history/maintenance.js +2 -0
- package/dist/sdk/history/salvage.js +2 -247
- package/dist/sdk/history/subject.d.ts +19 -0
- package/dist/sdk/history/subject.js +2 -0
- package/dist/sdk/history-analytics.js +1 -282
- package/dist/sdk/history-compact.js +1 -527
- package/dist/sdk/history-mcp.js +1 -68
- package/dist/sdk/history-provenance.js +1 -182
- package/dist/sdk/history-read.js +1 -96
- package/dist/sdk/history-redact.d.ts +1 -14
- package/dist/sdk/history-redact.js +1 -643
- package/dist/sdk/history-repair.d.ts +5 -0
- package/dist/sdk/history-repair.js +1 -657
- package/dist/sdk/improvement-ledger-validation.js +1 -62
- package/dist/sdk/improvement-ledger.js +2 -257
- package/dist/sdk/index.d.ts +4 -1
- package/dist/sdk/index.js +1 -183
- package/dist/sdk/init-agent-guidance.js +2 -496
- package/dist/sdk/init.js +2 -820
- package/dist/sdk/invocation-author.js +1 -39
- package/dist/sdk/item-children.js +1 -90
- package/dist/sdk/item-metadata-index.js +1 -15
- package/dist/sdk/item-schedule.js +1 -27
- package/dist/sdk/item-transaction.js +1 -396
- package/dist/sdk/learnings.js +1 -29
- package/dist/sdk/lifecycle/append.js +2 -53
- package/dist/sdk/lifecycle/claim.d.ts +2 -0
- package/dist/sdk/lifecycle/claim.js +1 -242
- package/dist/sdk/lifecycle/close-many.js +1 -438
- package/dist/sdk/lifecycle/close.js +1 -468
- package/dist/sdk/lifecycle/copy.js +1 -212
- package/dist/sdk/lifecycle/create.js +1 -1949
- package/dist/sdk/lifecycle/delete.js +1 -45
- package/dist/sdk/lifecycle/event-validation-messages.js +1 -91
- package/dist/sdk/lifecycle/focus.js +1 -91
- package/dist/sdk/lifecycle/hierarchy-mutation-lock.js +1 -24
- package/dist/sdk/lifecycle/legacy-none-tokens.js +1 -149
- package/dist/sdk/lifecycle/lifecycle-transitions.js +1 -40
- package/dist/sdk/lifecycle/mcp-actions.d.ts +2 -0
- package/dist/sdk/lifecycle/mcp-actions.js +1 -51
- package/dist/sdk/lifecycle/metadata-normalizers.js +1 -46
- package/dist/sdk/lifecycle/mutation-command-options.js +1 -9
- package/dist/sdk/lifecycle/plan.js +1 -1606
- package/dist/sdk/lifecycle/recurrence-parsers.d.ts +1 -1
- package/dist/sdk/lifecycle/recurrence-parsers.js +1 -147
- package/dist/sdk/lifecycle/reopen.js +1 -68
- package/dist/sdk/lifecycle/repeatable-metadata-parsers.js +1 -143
- package/dist/sdk/lifecycle/restore.d.ts +1 -0
- package/dist/sdk/lifecycle/restore.js +1 -330
- package/dist/sdk/lifecycle/shared-unset-fields.js +1 -295
- package/dist/sdk/lifecycle/update-many.js +1 -861
- package/dist/sdk/lifecycle/update.js +1 -2136
- package/dist/sdk/lifecycle-completion.js +1 -92
- package/dist/sdk/lifecycle-policy.js +1 -120
- package/dist/sdk/linked-artifacts.js +1 -530
- package/dist/sdk/mcp/apps.js +4 -133
- package/dist/sdk/mcp/authorization.js +1 -404
- package/dist/sdk/mcp/discovery.js +1 -494
- package/dist/sdk/mcp/interactions.js +1 -336
- package/dist/sdk/mcp/protocol.d.ts +7 -0
- package/dist/sdk/mcp/protocol.js +1 -184
- package/dist/sdk/mcp/skills.js +1 -389
- package/dist/sdk/mcp/subscriptions.js +1 -211
- package/dist/sdk/mcp/tasks.js +2 -430
- package/dist/sdk/mcp/transport.js +1 -260
- package/dist/sdk/merge/abandoned-receipts.js +1 -46
- package/dist/sdk/merge/driver.js +1 -212
- package/dist/sdk/merge/index.js +1 -16
- package/dist/sdk/merge/install.js +3 -561
- package/dist/sdk/merge/receipt-file-boundary.js +1 -46
- package/dist/sdk/merge/receipt-operation.js +1 -96
- package/dist/sdk/merge/receipt-schema.js +1 -397
- package/dist/sdk/merge/receipts.js +4 -525
- package/dist/sdk/merge/reconcile.js +1 -352
- package/dist/sdk/merge/three-way.js +3 -775
- package/dist/sdk/merge.js +1 -10
- package/dist/sdk/mutation-events.js +1 -292
- package/dist/sdk/mutation-guard.js +1 -216
- package/dist/sdk/notes.js +1 -139
- package/dist/sdk/output-contracts.js +1 -172
- package/dist/sdk/output-projection.js +1 -430
- package/dist/sdk/output-token-accounting.js +1 -140
- package/dist/sdk/output.js +1 -64
- package/dist/sdk/ownership-source.js +1 -21
- package/dist/sdk/package-import-adapters.js +1 -442
- package/dist/sdk/package-migrations.js +1 -20
- package/dist/sdk/package-runtime-options.js +1 -80
- package/dist/sdk/pagination.js +1 -162
- package/dist/sdk/profile.js +1 -454
- package/dist/sdk/provenance.js +1 -258
- package/dist/sdk/public-surface.json +1 -1
- package/dist/sdk/query/activity.js +1 -401
- package/dist/sdk/query/aggregate.d.ts +16 -0
- package/dist/sdk/query/aggregate.js +1 -390
- package/dist/sdk/query/calendar.js +1 -964
- package/dist/sdk/query/complete-list.js +1 -215
- package/dist/sdk/query/context.js +1 -1702
- package/dist/sdk/query/duplicate-candidates.js +1 -70
- package/dist/sdk/query/get.js +1 -450
- package/dist/sdk/query/history.js +1 -186
- package/dist/sdk/query/item-filter-options.js +1 -9
- package/dist/sdk/query/light-metadata.js +1 -18
- package/dist/sdk/query/list-filter-shared.js +1 -81
- package/dist/sdk/query/list.js +1 -1304
- package/dist/sdk/query/multi-value-filters.js +1 -78
- package/dist/sdk/query/next.js +1 -513
- package/dist/sdk/query/parsers.js +1 -44
- package/dist/sdk/query/projection-contracts.js +1 -184
- package/dist/sdk/query/search-contracts.d.ts +27 -0
- package/dist/sdk/query/search-contracts.js +1 -230
- package/dist/sdk/query/search-pagination.js +1 -35
- package/dist/sdk/query/search-rendering.js +1 -105
- package/dist/sdk/query/search.d.ts +6 -4
- package/dist/sdk/query/search.js +2 -1987
- package/dist/sdk/query.js +1 -35
- package/dist/sdk/read-output/continuation.js +1 -194
- package/dist/sdk/read-output-budget.js +1 -135
- package/dist/sdk/read-output-contracts.d.ts +1 -1
- package/dist/sdk/read-output-contracts.js +1 -1225
- package/dist/sdk/read-output-rows.js +1 -186
- package/dist/sdk/read-output-session.js +1 -208
- package/dist/sdk/relationship-analytics.js +1 -410
- package/dist/sdk/relationship-context.js +1 -284
- package/dist/sdk/relationship-history.js +4 -519
- package/dist/sdk/relationship-kinds/contract.js +1 -22
- package/dist/sdk/relationship-migration.js +1 -77
- package/dist/sdk/relationships.js +1 -579
- package/dist/sdk/reproducibility/process.js +1 -87
- package/dist/sdk/runtime-action-aliases.js +1 -59
- package/dist/sdk/runtime-extended-actions.js +1 -177
- package/dist/sdk/runtime-input.js +1 -614
- package/dist/sdk/runtime-primitives.js +1 -84
- package/dist/sdk/runtime-public-contracts.d.ts +2 -1
- package/dist/sdk/runtime-public-contracts.js +1 -4
- package/dist/sdk/runtime-stats-options.js +1 -38
- package/dist/sdk/runtime.d.ts +4 -0
- package/dist/sdk/runtime.js +1 -1928
- package/dist/sdk/scheduling-shortcuts.js +1 -63
- package/dist/sdk/schema-migration.js +3 -856
- package/dist/sdk/schema.d.ts +2 -1
- package/dist/sdk/schema.js +1 -1376
- package/dist/sdk/search-refresh-worker.js +1 -18
- package/dist/sdk/similarity-scoring.js +1 -53
- package/dist/sdk/similarity.js +1 -326
- package/dist/sdk/start-task-status.js +1 -14
- package/dist/sdk/stats.js +1 -270
- package/dist/sdk/structured-mutations.js +1 -580
- package/dist/sdk/telemetry-flush.js +1 -13
- package/dist/sdk/telemetry.js +1 -405
- package/dist/sdk/templates.js +2 -292
- package/dist/sdk/test/batch.js +2 -509
- package/dist/sdk/test/entry.js +1 -70
- package/dist/sdk/test/execution.js +6 -2211
- package/dist/sdk/test/linked-command-detection.js +1 -546
- package/dist/sdk/test/measurements.js +1 -91
- package/dist/sdk/test/parsers.js +1 -545
- package/dist/sdk/test/runs.js +1 -193
- package/dist/sdk/test/trust.js +2 -206
- package/dist/sdk/testing.js +4 -1391
- package/dist/sdk/traceability/runtime-files-lookup.js +1 -32
- package/dist/sdk/traceability/source-traceability.js +1 -292
- package/dist/sdk/tracker-root-discovery.js +1 -9
- package/dist/sdk/workspace-contracts-cache.js +1 -28
- package/dist/sdk/workspace-contracts.js +1 -33
- package/dist/sdk/workspace-memory.js +2 -318
- package/dist/sdk/workspace-recipe.js +1 -71
- package/dist/sdk/workspace-snapshot.js +4 -613
- package/dist/sdk/workspace-transaction-gc.js +1 -149
- package/dist/sdk/workspace-transaction.js +2 -363
- package/dist/sdk/workspace.js +3 -127
- package/dist/types/index.js +1 -9
- package/dist/types.d.ts +4 -0
- package/dist/types.js +1 -245
- package/docs/AGENT_GUIDE.md +1 -1
- package/docs/COMMANDS.md +10 -0
- package/docs/CONFIGURATION.md +12 -1
- package/docs/CONTEXT_ALGORITHM_PORTFOLIO.md +167 -0
- package/docs/DIAGNOSTIC_OUTPUT_CONTRACTS.md +9 -3
- package/docs/EXTENSIONS.md +1 -0
- package/docs/HISTORY_MAINTENANCE.md +125 -0
- package/docs/MCP_2026_07_28_CONFORMANCE.md +20 -10
- package/docs/PACKAGE_EVIDENCE.md +92 -0
- package/docs/PLANNING_MEASUREMENTS.md +183 -0
- package/docs/README.md +4 -0
- package/docs/READ_OUTPUT_CONTRACTS.md +5 -0
- package/docs/SCRIPTING.md +21 -0
- package/docs/TESTING.md +33 -0
- package/docs/WORKFLOW_POLICIES.md +129 -0
- package/docs/generated/FLAG_LEXICON_BUDGETS.md +7 -7
- package/docs/generated/REFUSAL_CLOSURE_CENSUS.md +11 -5
- package/marketplace.json +2 -2
- package/package.json +5 -5
- package/packages/pm-beads/package.json +1 -1
- package/packages/pm-calendar/package.json +1 -1
- package/packages/pm-command-kit/package.json +1 -1
- package/packages/pm-digital-twin/package.json +1 -1
- package/packages/pm-governance-audit/package.json +1 -1
- package/packages/pm-guide-shell/package.json +1 -1
- package/packages/pm-kanban/package.json +1 -1
- package/packages/pm-lifecycle-hooks/package.json +1 -1
- package/packages/pm-linked-test-adapters/package.json +1 -1
- package/packages/pm-search-advanced/package.json +1 -1
- package/packages/pm-templates/package.json +1 -1
- package/packages/pm-todos/package.json +1 -1
- package/packages/pm-vcs/package.json +1 -1
- package/plugins/pm-claude/.claude-plugin/plugin.json +1 -1
- package/plugins/pm-codex/.codex-plugin/plugin.json +1 -1
- package/scripts/finalize-build.mjs +45 -3
- package/dist/cli-bundle/chunks/chunk-AZDFJGH6.js +0 -9
- package/dist/cli-bundle/chunks/chunk-CKOL5U7J.js +0 -77
- package/dist/cli-bundle/chunks/chunk-JX4DH4WC.js +0 -3
- package/dist/cli-bundle/chunks/chunk-OF76PSDQ.js +0 -5
- package/dist/cli-bundle/chunks/chunk-QUWFABDM.js +0 -232
- package/dist/cli-bundle/chunks/chunk-QWRRFYK3.js +0 -2
- package/dist/cli-bundle/chunks/chunk-RWWBOWJ5.js +0 -2
- package/dist/cli-bundle/chunks/chunk-WGAOYSYH.js +0 -40
- package/dist/cli-bundle/chunks/chunk-WI2AYPA7.js +0 -2
- package/dist/cli-bundle/chunks/register-list-query-5JL52D33.js +0 -11
- package/dist/cli-bundle/chunks/register-mutation-ZPG7KMVP.js +0 -20
- package/dist/cli-bundle/chunks/register-operations-I5W3KMGB.js +0 -2
- package/dist/cli-bundle/chunks/register-setup-H4SVAVX7.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-AL5ON6K6.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-CHC2IDXA.js +0 -6
- package/dist/cli-bundle/focused-chunks/chunk-CK6QFAPZ.js +0 -20
- package/dist/cli-bundle/focused-chunks/chunk-EZR3GHFE.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-H2WJWK7L.js +0 -56
- package/dist/cli-bundle/focused-chunks/chunk-NTPY5GSO.js +0 -3
- package/dist/cli-bundle/focused-chunks/chunk-P5O7MP5Y.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-PDMW2E36.js +0 -177
- package/dist/cli-bundle/focused-chunks/chunk-PEFABF7E.js +0 -26
- package/dist/cli-bundle/focused-chunks/chunk-QTVCLMSZ.js +0 -6
- package/dist/cli-bundle/focused-chunks/chunk-QTZRBUYA.js +0 -8
- package/dist/cli-bundle/focused-chunks/chunk-SGQST3PQ.js +0 -12
- package/dist/cli-bundle/focused-chunks/chunk-UKHASMMP.js +0 -10
- package/dist/cli-bundle/focused-chunks/chunk-ZPEKQHOC.js +0 -2
|
@@ -1,211 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
* @module core/shared/serialization
|
|
3
|
-
*
|
|
4
|
-
* Provides shared primitives and utilities for Serialization.
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="83232698-197a-5aef-be7c-aa37f3c56822")}catch(e){}}();
|
|
8
|
-
import crypto from "node:crypto";
|
|
9
|
-
function sortScalarValue(value) {
|
|
10
|
-
if (value === null)
|
|
11
|
-
return null;
|
|
12
|
-
if (typeof value === "string" ||
|
|
13
|
-
typeof value === "number" ||
|
|
14
|
-
typeof value === "boolean") {
|
|
15
|
-
return value;
|
|
16
|
-
}
|
|
17
|
-
if (typeof value === "bigint") {
|
|
18
|
-
return value.toString();
|
|
19
|
-
}
|
|
20
|
-
if (value === undefined) {
|
|
21
|
-
return "undefined";
|
|
22
|
-
}
|
|
23
|
-
if (typeof value === "symbol") {
|
|
24
|
-
return value.toString();
|
|
25
|
-
}
|
|
26
|
-
if (typeof value === "function") {
|
|
27
|
-
return `[function:${value.name || "anonymous"}]`;
|
|
28
|
-
}
|
|
29
|
-
return undefined;
|
|
30
|
-
}
|
|
31
|
-
function sortPlainObjectKeys(value) {
|
|
32
|
-
// Use locale-independent Unicode code-unit ordering so canonical hashes stay reproducible.
|
|
33
|
-
const sortedKeys = Object.keys(value).sort();
|
|
34
|
-
const result = {};
|
|
35
|
-
for (const key of sortedKeys) {
|
|
36
|
-
const nested = value[key];
|
|
37
|
-
if (nested === undefined) {
|
|
38
|
-
continue;
|
|
39
|
-
}
|
|
40
|
-
result[key] = sortObjectKeys(nested);
|
|
41
|
-
}
|
|
42
|
-
return result;
|
|
43
|
-
}
|
|
44
|
-
function sortObjectKeys(value) {
|
|
45
|
-
const scalarValue = sortScalarValue(value);
|
|
46
|
-
if (scalarValue !== undefined) {
|
|
47
|
-
return scalarValue;
|
|
48
|
-
}
|
|
49
|
-
if (Array.isArray(value)) {
|
|
50
|
-
return value.map((entry) => sortObjectKeys(entry));
|
|
51
|
-
}
|
|
52
|
-
if (value instanceof Date) {
|
|
53
|
-
return value.toISOString();
|
|
54
|
-
}
|
|
55
|
-
const maybeJson = value;
|
|
56
|
-
if (typeof maybeJson.toJSON === "function") {
|
|
57
|
-
const normalized = maybeJson.toJSON();
|
|
58
|
-
if (normalized !== value) {
|
|
59
|
-
return sortObjectKeys(normalized);
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
return sortPlainObjectKeys(value);
|
|
63
|
-
}
|
|
64
|
-
/** Implements stable stringify for the public runtime surface of this module. */
|
|
65
|
-
export function stableStringify(value) {
|
|
66
|
-
return JSON.stringify(sortObjectKeys(value));
|
|
67
|
-
}
|
|
68
|
-
function hasUnmatchedEquivalent(leftValue, rightValues, matchedIndexes, equals) {
|
|
69
|
-
for (let index = 0; index < rightValues.length; index += 1) {
|
|
70
|
-
if (matchedIndexes.has(index)) {
|
|
71
|
-
continue;
|
|
72
|
-
}
|
|
73
|
-
if (equals(leftValue, rightValues[index])) {
|
|
74
|
-
matchedIndexes.add(index);
|
|
75
|
-
return true;
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
return false;
|
|
79
|
-
}
|
|
80
|
-
function compareRegExpValues(left, right) {
|
|
81
|
-
if (!(left instanceof RegExp || right instanceof RegExp)) {
|
|
82
|
-
return undefined;
|
|
83
|
-
}
|
|
84
|
-
return (left instanceof RegExp &&
|
|
85
|
-
right instanceof RegExp &&
|
|
86
|
-
left.toString() === right.toString());
|
|
87
|
-
}
|
|
88
|
-
function compareDateValues(left, right) {
|
|
89
|
-
if (!(left instanceof Date || right instanceof Date)) {
|
|
90
|
-
return undefined;
|
|
91
|
-
}
|
|
92
|
-
return (left instanceof Date &&
|
|
93
|
-
right instanceof Date &&
|
|
94
|
-
left.getTime() === right.getTime());
|
|
95
|
-
}
|
|
96
|
-
function compareSetValues(left, right) {
|
|
97
|
-
if (!(left instanceof Set || right instanceof Set)) {
|
|
98
|
-
return undefined;
|
|
99
|
-
}
|
|
100
|
-
if (!(left instanceof Set && right instanceof Set) ||
|
|
101
|
-
left.size !== right.size) {
|
|
102
|
-
return false;
|
|
103
|
-
}
|
|
104
|
-
const rightValues = [...right];
|
|
105
|
-
const matched = new Set();
|
|
106
|
-
for (const leftValue of left) {
|
|
107
|
-
if (!hasUnmatchedEquivalent(leftValue, rightValues, matched, stableValueEquals)) {
|
|
108
|
-
return false;
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
return true;
|
|
112
|
-
}
|
|
113
|
-
function compareMapValues(left, right) {
|
|
114
|
-
if (!(left instanceof Map || right instanceof Map)) {
|
|
115
|
-
return undefined;
|
|
116
|
-
}
|
|
117
|
-
if (!(left instanceof Map && right instanceof Map) ||
|
|
118
|
-
left.size !== right.size) {
|
|
119
|
-
return false;
|
|
120
|
-
}
|
|
121
|
-
const rightEntries = [...right.entries()];
|
|
122
|
-
const matched = new Set();
|
|
123
|
-
for (const [leftKey, leftValue] of left.entries()) {
|
|
124
|
-
const leftEntry = [leftKey, leftValue];
|
|
125
|
-
if (!hasUnmatchedEquivalent(leftEntry, rightEntries, matched, ([candidateKey, candidateValue], [rightKey, rightValue]) => stableValueEquals(candidateKey, rightKey) &&
|
|
126
|
-
stableValueEquals(candidateValue, rightValue))) {
|
|
127
|
-
return false;
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
return true;
|
|
131
|
-
}
|
|
132
|
-
function compareArrayValues(left, right) {
|
|
133
|
-
if (!(Array.isArray(left) || Array.isArray(right))) {
|
|
134
|
-
return undefined;
|
|
135
|
-
}
|
|
136
|
-
if (!Array.isArray(left) ||
|
|
137
|
-
!Array.isArray(right) ||
|
|
138
|
-
left.length !== right.length) {
|
|
139
|
-
return false;
|
|
140
|
-
}
|
|
141
|
-
return left.every((value, index) => stableValueEquals(value, right[index]));
|
|
142
|
-
}
|
|
143
|
-
function comparePlainObjectValues(left, right) {
|
|
144
|
-
const leftKeys = Object.keys(left).sort((a, b) => a.localeCompare(b));
|
|
145
|
-
const rightKeys = Object.keys(right).sort((a, b) => a.localeCompare(b));
|
|
146
|
-
if (leftKeys.length !== rightKeys.length) {
|
|
147
|
-
return false;
|
|
148
|
-
}
|
|
149
|
-
for (let index = 0; index < leftKeys.length; index += 1) {
|
|
150
|
-
const leftKey = leftKeys[index];
|
|
151
|
-
if (leftKey !== rightKeys[index]) {
|
|
152
|
-
return false;
|
|
153
|
-
}
|
|
154
|
-
if (!stableValueEquals(left[leftKey], right[leftKey])) {
|
|
155
|
-
return false;
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
return true;
|
|
159
|
-
}
|
|
160
|
-
const SPECIALIZED_STABLE_VALUE_COMPARISONS = [
|
|
161
|
-
compareRegExpValues,
|
|
162
|
-
compareDateValues,
|
|
163
|
-
compareSetValues,
|
|
164
|
-
compareMapValues,
|
|
165
|
-
compareArrayValues,
|
|
166
|
-
];
|
|
167
|
-
/** Implements stable value equals for the public runtime surface of this module. */
|
|
168
|
-
export function stableValueEquals(left, right) {
|
|
169
|
-
if (Object.is(left, right)) {
|
|
170
|
-
return true;
|
|
171
|
-
}
|
|
172
|
-
if (left === null ||
|
|
173
|
-
right === null ||
|
|
174
|
-
typeof left !== "object" ||
|
|
175
|
-
typeof right !== "object") {
|
|
176
|
-
return false;
|
|
177
|
-
}
|
|
178
|
-
for (const compare of SPECIALIZED_STABLE_VALUE_COMPARISONS) {
|
|
179
|
-
const result = compare(left, right);
|
|
180
|
-
if (result !== undefined) {
|
|
181
|
-
return result;
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
return comparePlainObjectValues(left, right);
|
|
185
|
-
}
|
|
186
|
-
/** Implements sha256 hex for the public runtime surface of this module. */
|
|
187
|
-
export function sha256Hex(value) {
|
|
188
|
-
return crypto.createHash("sha256").update(value, "utf8").digest("hex");
|
|
189
|
-
}
|
|
190
|
-
/** Implements order object for the public runtime surface of this module. */
|
|
191
|
-
export function orderObject(value, keyOrder) {
|
|
192
|
-
const ordered = {};
|
|
193
|
-
for (const key of keyOrder) {
|
|
194
|
-
const entry = value[key];
|
|
195
|
-
if (entry !== undefined) {
|
|
196
|
-
ordered[key] = entry;
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
const unknownKeys = Object.keys(value)
|
|
200
|
-
.filter((key) => !keyOrder.includes(key))
|
|
201
|
-
.sort((a, b) => a.localeCompare(b));
|
|
202
|
-
for (const key of unknownKeys) {
|
|
203
|
-
const entry = value[key];
|
|
204
|
-
if (entry !== undefined) {
|
|
205
|
-
ordered[key] = entry;
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
return ordered;
|
|
209
|
-
}
|
|
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]="c036d6cf-6a10-5c74-9e2f-e7c953339e2c")}catch(e2){}})();import crypto from"node:crypto";function sortScalarValue(value){if(value===null)return null;if(typeof value==="string"||typeof value==="number"||typeof value==="boolean"){return value}if(typeof value==="bigint"){return value.toString()}if(value===void 0){return"undefined"}if(typeof value==="symbol"){return value.toString()}if(typeof value==="function"){return`[function:${value.name||"anonymous"}]`}return void 0}function sortPlainObjectKeys(value){const sortedKeys=Object.keys(value).sort();const result={};for(const key of sortedKeys){const nested=value[key];if(nested===void 0){continue}result[key]=sortObjectKeys(nested)}return result}function sortObjectKeys(value){const scalarValue=sortScalarValue(value);if(scalarValue!==void 0){return scalarValue}if(Array.isArray(value)){return value.map(entry=>sortObjectKeys(entry))}if(value instanceof Date){return value.toISOString()}const maybeJson=value;if(typeof maybeJson.toJSON==="function"){const normalized=maybeJson.toJSON();if(normalized!==value){return sortObjectKeys(normalized)}}return sortPlainObjectKeys(value)}function stableStringify(value){return JSON.stringify(sortObjectKeys(value))}function hasUnmatchedEquivalent(leftValue,rightValues,matchedIndexes,equals){for(let index=0;index<rightValues.length;index+=1){if(matchedIndexes.has(index)){continue}if(equals(leftValue,rightValues[index])){matchedIndexes.add(index);return true}}return false}function compareRegExpValues(left,right){if(!(left instanceof RegExp||right instanceof RegExp)){return void 0}return left instanceof RegExp&&right instanceof RegExp&&left.toString()===right.toString()}function compareDateValues(left,right){if(!(left instanceof Date||right instanceof Date)){return void 0}return left instanceof Date&&right instanceof Date&&left.getTime()===right.getTime()}function compareSetValues(left,right){if(!(left instanceof Set||right instanceof Set)){return void 0}if(!(left instanceof Set&&right instanceof Set)||left.size!==right.size){return false}const rightValues=[...right];const matched=new Set;for(const leftValue of left){if(!hasUnmatchedEquivalent(leftValue,rightValues,matched,stableValueEquals)){return false}}return true}function compareMapValues(left,right){if(!(left instanceof Map||right instanceof Map)){return void 0}if(!(left instanceof Map&&right instanceof Map)||left.size!==right.size){return false}const rightEntries=[...right.entries()];const matched=new Set;for(const[leftKey,leftValue]of left.entries()){const leftEntry=[leftKey,leftValue];if(!hasUnmatchedEquivalent(leftEntry,rightEntries,matched,([candidateKey,candidateValue],[rightKey,rightValue])=>stableValueEquals(candidateKey,rightKey)&&stableValueEquals(candidateValue,rightValue))){return false}}return true}function compareArrayValues(left,right){if(!(Array.isArray(left)||Array.isArray(right))){return void 0}if(!Array.isArray(left)||!Array.isArray(right)||left.length!==right.length){return false}return left.every((value,index)=>stableValueEquals(value,right[index]))}function comparePlainObjectValues(left,right){const leftKeys=Object.keys(left).sort((a,b)=>a.localeCompare(b));const rightKeys=Object.keys(right).sort((a,b)=>a.localeCompare(b));if(leftKeys.length!==rightKeys.length){return false}for(let index=0;index<leftKeys.length;index+=1){const leftKey=leftKeys[index];if(leftKey!==rightKeys[index]){return false}if(!stableValueEquals(left[leftKey],right[leftKey])){return false}}return true}const SPECIALIZED_STABLE_VALUE_COMPARISONS=[compareRegExpValues,compareDateValues,compareSetValues,compareMapValues,compareArrayValues];function stableValueEquals(left,right){if(Object.is(left,right)){return true}if(left===null||right===null||typeof left!=="object"||typeof right!=="object"){return false}for(const compare of SPECIALIZED_STABLE_VALUE_COMPARISONS){const result=compare(left,right);if(result!==void 0){return result}}return comparePlainObjectValues(left,right)}function sha256Hex(value){return crypto.createHash("sha256").update(value,"utf8").digest("hex")}function orderObject(value,keyOrder){const ordered={};for(const key of keyOrder){const entry=value[key];if(entry!==void 0){ordered[key]=entry}}const unknownKeys=Object.keys(value).filter(key=>!keyOrder.includes(key)).sort((a,b)=>a.localeCompare(b));for(const key of unknownKeys){const entry=value[key];if(entry!==void 0){ordered[key]=entry}}return ordered}export{orderObject,sha256Hex,stableStringify,stableValueEquals};
|
|
210
2
|
//# sourceMappingURL=serialization.js.map
|
|
211
|
-
//# debugId=83232698-197a-5aef-be7c-aa37f3c56822
|
|
@@ -1,31 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
* Split a comma-separated (or custom-separator) string into trimmed, non-empty entries.
|
|
3
|
-
*
|
|
4
|
-
* Default behaviour:
|
|
5
|
-
* - Splits on `,`.
|
|
6
|
-
* - Trims each entry and discards empty results (collapsing leading/trailing/duplicate separators).
|
|
7
|
-
* - De-duplicates while preserving first-seen order.
|
|
8
|
-
* - Does not sort.
|
|
9
|
-
*
|
|
10
|
-
* Returns `[]` for `undefined`/`null` input. Pure, dependency-free.
|
|
11
|
-
*/
|
|
12
|
-
|
|
13
|
-
!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]="4ecab833-db06-5baa-bfe6-d28b4c97f85a")}catch(e){}}();
|
|
14
|
-
export function splitCommaList(raw, options) {
|
|
15
|
-
if (raw === undefined || raw === null) {
|
|
16
|
-
return [];
|
|
17
|
-
}
|
|
18
|
-
const separators = options?.separators ?? /,/;
|
|
19
|
-
const parts = raw.split(separators);
|
|
20
|
-
const trimmed = parts
|
|
21
|
-
.map((entry) => entry.trim())
|
|
22
|
-
.filter((entry) => entry.length > 0);
|
|
23
|
-
const unique = options?.unique !== false;
|
|
24
|
-
const deduped = unique ? Array.from(new Set(trimmed)) : trimmed;
|
|
25
|
-
if (options?.sort === true) {
|
|
26
|
-
return [...deduped].sort();
|
|
27
|
-
}
|
|
28
|
-
return deduped;
|
|
29
|
-
}
|
|
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]="f3edff87-6ea5-5108-a749-eeb380870601")}catch(e2){}})();function splitCommaList(raw,options){if(raw===void 0||raw===null){return[]}const separators=options?.separators??/,/;const parts=raw.split(separators);const trimmed=parts.map(entry=>entry.trim()).filter(entry=>entry.length>0);const unique=options?.unique!==false;const deduped=unique?Array.from(new Set(trimmed)):trimmed;if(options?.sort===true){return[...deduped].sort()}return deduped}export{splitCommaList};
|
|
30
2
|
//# sourceMappingURL=split-comma-list.js.map
|
|
31
|
-
//# debugId=4ecab833-db06-5baa-bfe6-d28b4c97f85a
|
|
@@ -1,39 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
* @module core/shared/text-normalization
|
|
3
|
-
*
|
|
4
|
-
* Provides shared primitives and utilities for Text Normalization.
|
|
5
|
-
*/
|
|
6
|
-
/** Normalizes text to lowercase whitespace-collapsed form for stable matching and comparison. */
|
|
7
|
-
|
|
8
|
-
!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]="3ad30a32-0f83-5473-b0a3-349e271d8378")}catch(e){}}();
|
|
9
|
-
export function normalizeLowercaseWhitespace(value) {
|
|
10
|
-
return value.trim().toLowerCase().replace(/\s+/g, " ");
|
|
11
|
-
}
|
|
12
|
-
/** Implements tokenize alpha numeric for the public runtime surface of this module. */
|
|
13
|
-
export function tokenizeAlphaNumeric(value) {
|
|
14
|
-
return normalizeLowercaseWhitespace(value)
|
|
15
|
-
.split(/[^a-z0-9]+/)
|
|
16
|
-
.filter((token) => token.length > 0);
|
|
17
|
-
}
|
|
18
|
-
/** Implements jaccard similarity for the public runtime surface of this module. */
|
|
19
|
-
export function jaccardSimilarity(leftTokens, rightTokens) {
|
|
20
|
-
if (leftTokens.length === 0 && rightTokens.length === 0) {
|
|
21
|
-
return 1;
|
|
22
|
-
}
|
|
23
|
-
if (leftTokens.length === 0 || rightTokens.length === 0) {
|
|
24
|
-
return 0;
|
|
25
|
-
}
|
|
26
|
-
const leftSet = new Set(leftTokens);
|
|
27
|
-
const rightSet = new Set(rightTokens);
|
|
28
|
-
let intersection = 0;
|
|
29
|
-
for (const token of leftSet) {
|
|
30
|
-
if (rightSet.has(token)) {
|
|
31
|
-
intersection += 1;
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
// Both token sets are non-empty here (guarded above), so union is always >= 1.
|
|
35
|
-
const union = new Set([...leftSet, ...rightSet]).size;
|
|
36
|
-
return intersection / union;
|
|
37
|
-
}
|
|
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]="c18e4dfc-d3e3-5185-9470-9d46b4dca893")}catch(e2){}})();function normalizeLowercaseWhitespace(value){return value.trim().toLowerCase().replace(/\s+/g," ")}function tokenizeAlphaNumeric(value){return normalizeLowercaseWhitespace(value).split(/[^a-z0-9]+/).filter(token=>token.length>0)}function jaccardSimilarity(leftTokens,rightTokens){if(leftTokens.length===0&&rightTokens.length===0){return 1}if(leftTokens.length===0||rightTokens.length===0){return 0}const leftSet=new Set(leftTokens);const rightSet=new Set(rightTokens);let intersection=0;for(const token of leftSet){if(rightSet.has(token)){intersection+=1}}const union=new Set([...leftSet,...rightSet]).size;return intersection/union}export{jaccardSimilarity,normalizeLowercaseWhitespace,tokenizeAlphaNumeric};
|
|
38
2
|
//# sourceMappingURL=text-normalization.js.map
|
|
39
|
-
//# debugId=3ad30a32-0f83-5473-b0a3-349e271d8378
|
package/dist/core/shared/time.js
CHANGED
|
@@ -1,307 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
* @module core/shared/time
|
|
3
|
-
*
|
|
4
|
-
* Provides shared primitives and utilities for Time.
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="fb1102d4-1beb-5de8-87e6-af2efebafe39")}catch(e){}}();
|
|
8
|
-
import { PmCliError } from "./errors.js";
|
|
9
|
-
import { evictOldestMemoEntries } from "./memo.js";
|
|
10
|
-
import { EXIT_CODE } from "./constants.js";
|
|
11
|
-
import { nextReproducibleTimestamp } from "../reproducibility/context.js";
|
|
12
|
-
const RELATIVE_DEADLINE = /^([+-]?)(\d+)([hdwm])$/i;
|
|
13
|
-
const COMPOUND_RELATIVE_DEADLINE = /^[+-]?\d+[hdwm](?:[+-]\d+[hdwm])+$/i;
|
|
14
|
-
const COMPACT_DATE = /^(\d{4})(\d{2})(\d{2})$/;
|
|
15
|
-
const COMPACT_DATETIME = /^(\d{4})(\d{2})(\d{2})(?:[T\s]?)(\d{2})(\d{2})(\d{2})?([.,]\d{1,3})?(Z|[+-]\d{2}:?\d{2})?$/i;
|
|
16
|
-
const HYPHEN_TIME = /^(\d{4}-\d{2}-\d{2})[T\s](\d{2})-(\d{2})(?:-(\d{2}))?([.,]\d{1,3})?(Z|[+-]\d{2}:?\d{2})?$/i;
|
|
17
|
-
const COMPACT_TIME = /^(\d{4}-\d{2}-\d{2})[T\s](\d{2})(\d{2})(\d{2})?([.,]\d{1,3})?(Z|[+-]\d{2}:?\d{2})?$/i;
|
|
18
|
-
const RFC_3339_DATE_TIME = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})(?:\.\d+)?(?:Z|[+-](\d{2}):(\d{2}))$/i;
|
|
19
|
-
/** Implements now iso for the public runtime surface of this module. */
|
|
20
|
-
export function nowIso() {
|
|
21
|
-
return nextReproducibleTimestamp() ?? new Date().toISOString();
|
|
22
|
-
}
|
|
23
|
-
/** Implements check whether timestamp literal for the public runtime surface of this module. */
|
|
24
|
-
export function isTimestampLiteral(input) {
|
|
25
|
-
return Number.isFinite(Date.parse(input));
|
|
26
|
-
}
|
|
27
|
-
/** Return whether a string is a calendar-valid RFC 3339 date-time. */
|
|
28
|
-
export function isRfc3339DateTime(input) {
|
|
29
|
-
const match = RFC_3339_DATE_TIME.exec(input);
|
|
30
|
-
if (!match || !Number.isFinite(Date.parse(input)))
|
|
31
|
-
return false;
|
|
32
|
-
const [, yearRaw, monthRaw, dayRaw, hourRaw, minuteRaw, secondRaw, offsetHourRaw, offsetMinuteRaw,] = match;
|
|
33
|
-
const [year, month, day, hour, minute, second] = [
|
|
34
|
-
yearRaw,
|
|
35
|
-
monthRaw,
|
|
36
|
-
dayRaw,
|
|
37
|
-
hourRaw,
|
|
38
|
-
minuteRaw,
|
|
39
|
-
secondRaw,
|
|
40
|
-
].map(Number);
|
|
41
|
-
return (month >= 1 &&
|
|
42
|
-
month <= 12 &&
|
|
43
|
-
day >= 1 &&
|
|
44
|
-
day <= daysInUtcMonth(year, month - 1) &&
|
|
45
|
-
hour <= 23 &&
|
|
46
|
-
minute <= 59 &&
|
|
47
|
-
second <= 59 &&
|
|
48
|
-
(offsetHourRaw === undefined || Number(offsetHourRaw) <= 23) &&
|
|
49
|
-
(offsetMinuteRaw === undefined || Number(offsetMinuteRaw) <= 59));
|
|
50
|
-
}
|
|
51
|
-
/** Return whether a value is a calendar-valid RFC 3339 date-time whose fractional seconds carry no sub-millisecond information. */
|
|
52
|
-
export function isMillisecondPrecisionRfc3339DateTime(input) {
|
|
53
|
-
const fraction = /\.(\d+)(?:Z|[+-]\d{2}:\d{2})$/iu.exec(input)?.[1];
|
|
54
|
-
return (isRfc3339DateTime(input) &&
|
|
55
|
-
(fraction === undefined || /^\d{0,3}0*$/u.test(fraction)));
|
|
56
|
-
}
|
|
57
|
-
/**
|
|
58
|
-
* Memoized `Date.parse` for {@link compareTimestampStrings}. Sort comparators call it
|
|
59
|
-
* O(n log n) times over a corpus whose timestamp strings repeat heavily, and
|
|
60
|
-
* `Date.parse` is expensive enough to show up in list/next/context profiles. The cap
|
|
61
|
-
* bounds memory in long-lived hosts (the MCP server); half-eviction keeps the
|
|
62
|
-
* newest-inserted half when the cap is hit.
|
|
63
|
-
*/
|
|
64
|
-
const TIMESTAMP_PARSE_MEMO_MAX_ENTRIES = 10_000;
|
|
65
|
-
const timestampParseMemo = new Map();
|
|
66
|
-
function parseTimestampMsMemoized(value) {
|
|
67
|
-
const memoized = timestampParseMemo.get(value);
|
|
68
|
-
if (memoized !== undefined) {
|
|
69
|
-
return memoized;
|
|
70
|
-
}
|
|
71
|
-
const parsed = Date.parse(value);
|
|
72
|
-
if (timestampParseMemo.size >= TIMESTAMP_PARSE_MEMO_MAX_ENTRIES) {
|
|
73
|
-
evictOldestMemoEntries(timestampParseMemo);
|
|
74
|
-
}
|
|
75
|
-
timestampParseMemo.set(value, parsed);
|
|
76
|
-
return parsed;
|
|
77
|
-
}
|
|
78
|
-
/** Implements compare timestamp strings for the public runtime surface of this module. */
|
|
79
|
-
export function compareTimestampStrings(left, right) {
|
|
80
|
-
const leftMs = parseTimestampMsMemoized(left);
|
|
81
|
-
const rightMs = parseTimestampMsMemoized(right);
|
|
82
|
-
if (Number.isFinite(leftMs) &&
|
|
83
|
-
Number.isFinite(rightMs) &&
|
|
84
|
-
leftMs !== rightMs) {
|
|
85
|
-
return leftMs - rightMs;
|
|
86
|
-
}
|
|
87
|
-
return left.localeCompare(right);
|
|
88
|
-
}
|
|
89
|
-
/** Return whether a timestamp-bearing record satisfies every configured bound. */
|
|
90
|
-
export function matchesTimestampFilters(item, filters) {
|
|
91
|
-
return !((filters.deadlineBefore &&
|
|
92
|
-
(!item.deadline ||
|
|
93
|
-
compareTimestampStrings(item.deadline, filters.deadlineBefore) > 0)) ||
|
|
94
|
-
(filters.deadlineAfter &&
|
|
95
|
-
(!item.deadline ||
|
|
96
|
-
compareTimestampStrings(item.deadline, filters.deadlineAfter) < 0)) ||
|
|
97
|
-
(filters.updatedAfter &&
|
|
98
|
-
compareTimestampStrings(item.updated_at, filters.updatedAfter) < 0) ||
|
|
99
|
-
(filters.updatedBefore &&
|
|
100
|
-
compareTimestampStrings(item.updated_at, filters.updatedBefore) > 0) ||
|
|
101
|
-
(filters.createdAfter &&
|
|
102
|
-
compareTimestampStrings(item.created_at, filters.createdAfter) < 0) ||
|
|
103
|
-
(filters.createdBefore &&
|
|
104
|
-
compareTimestampStrings(item.created_at, filters.createdBefore) > 0));
|
|
105
|
-
}
|
|
106
|
-
function normalizeFraction(raw) {
|
|
107
|
-
if (!raw)
|
|
108
|
-
return "";
|
|
109
|
-
const digits = raw.slice(1);
|
|
110
|
-
return `.${digits.padEnd(3, "0").slice(0, 3)}`;
|
|
111
|
-
}
|
|
112
|
-
function normalizeOffset(raw) {
|
|
113
|
-
if (!raw)
|
|
114
|
-
return "";
|
|
115
|
-
if (raw.toUpperCase() === "Z")
|
|
116
|
-
return "Z";
|
|
117
|
-
const compact = /^([+-]\d{2})(\d{2})$/.exec(raw);
|
|
118
|
-
if (compact)
|
|
119
|
-
return `${compact[1]}:${compact[2]}`;
|
|
120
|
-
return raw;
|
|
121
|
-
}
|
|
122
|
-
function pushTimestampCandidate(candidates, input, value) {
|
|
123
|
-
if (!value)
|
|
124
|
-
return;
|
|
125
|
-
if (value === input)
|
|
126
|
-
return;
|
|
127
|
-
if (candidates.includes(value))
|
|
128
|
-
return;
|
|
129
|
-
candidates.push(value);
|
|
130
|
-
}
|
|
131
|
-
function normalizeTimestampCandidates(input) {
|
|
132
|
-
const candidates = [];
|
|
133
|
-
const push = (value) => pushTimestampCandidate(candidates, input, value);
|
|
134
|
-
const compactDate = COMPACT_DATE.exec(input);
|
|
135
|
-
if (compactDate) {
|
|
136
|
-
const [, year, month, day] = compactDate;
|
|
137
|
-
push(`${year}-${month}-${day}`);
|
|
138
|
-
}
|
|
139
|
-
const compactDateTime = COMPACT_DATETIME.exec(input);
|
|
140
|
-
if (compactDateTime) {
|
|
141
|
-
const [, year, month, day, hour, minute, secondRaw, fractionRaw, offsetRaw,] = compactDateTime;
|
|
142
|
-
const second = secondRaw ? `:${secondRaw}` : "";
|
|
143
|
-
push(`${year}-${month}-${day}T${hour}:${minute}${second}${normalizeFraction(fractionRaw)}${normalizeOffset(offsetRaw)}`);
|
|
144
|
-
}
|
|
145
|
-
const hyphenTime = HYPHEN_TIME.exec(input);
|
|
146
|
-
if (hyphenTime) {
|
|
147
|
-
const [, datePart, hour, minute, secondRaw, fractionRaw, offsetRaw] = hyphenTime;
|
|
148
|
-
const second = secondRaw ? `:${secondRaw}` : "";
|
|
149
|
-
push(`${datePart}T${hour}:${minute}${second}${normalizeFraction(fractionRaw)}${normalizeOffset(offsetRaw)}`);
|
|
150
|
-
}
|
|
151
|
-
const compactTime = COMPACT_TIME.exec(input);
|
|
152
|
-
if (compactTime) {
|
|
153
|
-
const [, datePart, hour, minute, secondRaw, fractionRaw, offsetRaw] = compactTime;
|
|
154
|
-
const second = secondRaw ? `:${secondRaw}` : "";
|
|
155
|
-
push(`${datePart}T${hour}:${minute}${second}${normalizeFraction(fractionRaw)}${normalizeOffset(offsetRaw)}`);
|
|
156
|
-
}
|
|
157
|
-
const datePrefixLength = 10;
|
|
158
|
-
const datePrefix = input.slice(0, datePrefixLength);
|
|
159
|
-
if (isHyphenDatePrefix(datePrefix)) {
|
|
160
|
-
let index = datePrefixLength;
|
|
161
|
-
while (index < input.length && isWhitespaceCharacter(input[index])) {
|
|
162
|
-
index += 1;
|
|
163
|
-
}
|
|
164
|
-
if (index < input.length) {
|
|
165
|
-
push(`${datePrefix}T${input.slice(index)}`);
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
return candidates;
|
|
169
|
-
}
|
|
170
|
-
function parseTimestampWithFallbacks(input) {
|
|
171
|
-
const direct = Date.parse(input);
|
|
172
|
-
if (Number.isFinite(direct))
|
|
173
|
-
return direct;
|
|
174
|
-
for (const candidate of normalizeTimestampCandidates(input)) {
|
|
175
|
-
const parsed = Date.parse(candidate);
|
|
176
|
-
if (Number.isFinite(parsed))
|
|
177
|
-
return parsed;
|
|
178
|
-
}
|
|
179
|
-
return Number.NaN;
|
|
180
|
-
}
|
|
181
|
-
function isHyphenDatePrefix(value) {
|
|
182
|
-
if (value.length !== 10) {
|
|
183
|
-
return false;
|
|
184
|
-
}
|
|
185
|
-
for (let index = 0; index < value.length; index += 1) {
|
|
186
|
-
const character = value[index];
|
|
187
|
-
if (index === 4 || index === 7) {
|
|
188
|
-
if (character !== "-") {
|
|
189
|
-
return false;
|
|
190
|
-
}
|
|
191
|
-
continue;
|
|
192
|
-
}
|
|
193
|
-
const code = character.charCodeAt(0);
|
|
194
|
-
if (code < 48 || code > 57) {
|
|
195
|
-
return false;
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
return true;
|
|
199
|
-
}
|
|
200
|
-
function isWhitespaceCharacter(character) {
|
|
201
|
-
if (!character) {
|
|
202
|
-
return false;
|
|
203
|
-
}
|
|
204
|
-
return (character === " " ||
|
|
205
|
-
character === "\t" ||
|
|
206
|
-
character === "\n" ||
|
|
207
|
-
character === "\r" ||
|
|
208
|
-
character === "\f" ||
|
|
209
|
-
character === "\v");
|
|
210
|
-
}
|
|
211
|
-
function daysInUtcMonth(year, monthIndex) {
|
|
212
|
-
return new Date(Date.UTC(year, monthIndex + 1, 0)).getUTCDate();
|
|
213
|
-
}
|
|
214
|
-
const MONTH_NAMES = [
|
|
215
|
-
"January",
|
|
216
|
-
"February",
|
|
217
|
-
"March",
|
|
218
|
-
"April",
|
|
219
|
-
"May",
|
|
220
|
-
"June",
|
|
221
|
-
"July",
|
|
222
|
-
"August",
|
|
223
|
-
"September",
|
|
224
|
-
"October",
|
|
225
|
-
"November",
|
|
226
|
-
"December",
|
|
227
|
-
];
|
|
228
|
-
// Leading literal calendar date in either hyphenated (`2026-02-30`) or compact
|
|
229
|
-
// (`20260230`) form, optionally followed by any time/zone component. We validate
|
|
230
|
-
// the digits the caller actually typed — not the parsed instant — so timezone
|
|
231
|
-
// offsets never produce a false "impossible date" rejection. The hyphenated form
|
|
232
|
-
// is unambiguous, so anything may follow (`T`/space time, `Z`, `+/-` offset). The
|
|
233
|
-
// compact form must be followed by end-of-string or a time digit (with an optional
|
|
234
|
-
// `T`/space separator) so a no-separator compact datetime like `20260230135900Z`
|
|
235
|
-
// is still guarded and a 7-digit non-date is not misread as a date.
|
|
236
|
-
const LEADING_HYPHEN_DATE = /^(\d{4})-(\d{2})-(\d{2})/;
|
|
237
|
-
const LEADING_COMPACT_DATE = /^(\d{4})(\d{2})(\d{2})(?:[T ]?\d{2}|$)/;
|
|
238
|
-
/** Reject literal calendar dates whose day cannot exist (e.g. `2026-02-30`, which JS `Date` silently rolls forward to March 2). Without this, agents that pass an impossible deadline get a silently-wrong stored date instead of an actionable error. Only triggers on a leading literal date; relative tokens, "now", and pure times are untouched. Month 00 / >12 is also rejected with a clear message rather than falling through to the generic "invalid value" path. */
|
|
239
|
-
function assertRealCalendarDate(originalInput, trimmed, fieldLabel) {
|
|
240
|
-
const match = LEADING_HYPHEN_DATE.exec(trimmed) ?? LEADING_COMPACT_DATE.exec(trimmed);
|
|
241
|
-
if (!match) {
|
|
242
|
-
return;
|
|
243
|
-
}
|
|
244
|
-
const year = Number.parseInt(match[1], 10);
|
|
245
|
-
const month = Number.parseInt(match[2], 10);
|
|
246
|
-
const day = Number.parseInt(match[3], 10);
|
|
247
|
-
const label = fieldLabel?.trim() || "deadline";
|
|
248
|
-
if (month < 1 || month > 12) {
|
|
249
|
-
throw new PmCliError(`Invalid ${label} value "${originalInput}". Month "${match[2]}" is out of range — use a month between 01 and 12.`, EXIT_CODE.USAGE);
|
|
250
|
-
}
|
|
251
|
-
const maxDay = daysInUtcMonth(year, month - 1);
|
|
252
|
-
if (day < 1 || day > maxDay) {
|
|
253
|
-
throw new PmCliError(`Invalid ${label} value "${originalInput}". ${MONTH_NAMES[month - 1]} ${year} has ${maxDay} days, so day "${match[3]}" does not exist. Use a real YYYY-MM-DD calendar date.`, EXIT_CODE.USAGE);
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
function addUtcMonths(now, amount) {
|
|
257
|
-
const result = new Date(now.getTime());
|
|
258
|
-
const startDay = result.getUTCDate();
|
|
259
|
-
const targetMonthIndex = result.getUTCMonth() + amount;
|
|
260
|
-
const targetYear = result.getUTCFullYear() + Math.floor(targetMonthIndex / 12);
|
|
261
|
-
const targetMonth = ((targetMonthIndex % 12) + 12) % 12;
|
|
262
|
-
const day = Math.min(startDay, daysInUtcMonth(targetYear, targetMonth));
|
|
263
|
-
result.setUTCFullYear(targetYear, targetMonth, day);
|
|
264
|
-
return result;
|
|
265
|
-
}
|
|
266
|
-
/** Implements resolve iso or relative for the public runtime surface of this module. */
|
|
267
|
-
export function resolveIsoOrRelative(input, now = new Date(), fieldLabel = "deadline") {
|
|
268
|
-
const trimmed = input.trim();
|
|
269
|
-
if (trimmed.toLowerCase() === "now") {
|
|
270
|
-
return now.toISOString();
|
|
271
|
-
}
|
|
272
|
-
const relative = RELATIVE_DEADLINE.exec(trimmed);
|
|
273
|
-
if (relative) {
|
|
274
|
-
const sign = relative[1] === "-" ? -1 : 1;
|
|
275
|
-
const amount = Number.parseInt(relative[2], 10) * sign;
|
|
276
|
-
const unit = relative[3].toLowerCase();
|
|
277
|
-
if (unit === "m") {
|
|
278
|
-
return addUtcMonths(now, amount).toISOString();
|
|
279
|
-
}
|
|
280
|
-
const msPerUnit = unit === "h"
|
|
281
|
-
? 60 * 60 * 1000
|
|
282
|
-
: unit === "d"
|
|
283
|
-
? 24 * 60 * 60 * 1000
|
|
284
|
-
: 7 * 24 * 60 * 60 * 1000;
|
|
285
|
-
return new Date(now.getTime() + amount * msPerUnit).toISOString();
|
|
286
|
-
}
|
|
287
|
-
assertRealCalendarDate(input, trimmed, fieldLabel);
|
|
288
|
-
const timestamp = parseTimestampWithFallbacks(trimmed);
|
|
289
|
-
if (!Number.isFinite(timestamp)) {
|
|
290
|
-
const normalizedLabel = fieldLabel.trim().length > 0 ? fieldLabel.trim() : "deadline";
|
|
291
|
-
const guidance = COMPOUND_RELATIVE_DEADLINE.test(trimmed)
|
|
292
|
-
? "Compound relative expressions like +3d+1h are not supported; use a single relative token (for example +3d) or an ISO/date string."
|
|
293
|
-
: 'Use ISO/date string input, "now", or relative +6h/-6h/+1d/-1d/+2w/-2w/+6m/-6m.';
|
|
294
|
-
throw new PmCliError(`Invalid ${normalizedLabel} value "${input}". ${guidance}`, EXIT_CODE.USAGE);
|
|
295
|
-
}
|
|
296
|
-
return new Date(timestamp).toISOString();
|
|
297
|
-
}
|
|
298
|
-
/** Public contract for test only, shared by SDK and presentation-layer consumers. */
|
|
299
|
-
export const _testOnly = {
|
|
300
|
-
normalizeOffset,
|
|
301
|
-
pushTimestampCandidate,
|
|
302
|
-
normalizeTimestampCandidates,
|
|
303
|
-
parseTimestampWithFallbacks,
|
|
304
|
-
isWhitespaceCharacter,
|
|
305
|
-
};
|
|
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]="a5bd8db9-cd23-5529-ad78-b7e87bd43b59")}catch(e2){}})();import{PmCliError}from"./errors.js";import{evictOldestMemoEntries}from"./memo.js";import{EXIT_CODE}from"./constants.js";import{nextReproducibleTimestamp}from"../reproducibility/context.js";const RELATIVE_DEADLINE=/^([+-]?)(\d+)([hdwm])$/i;const COMPOUND_RELATIVE_DEADLINE=/^[+-]?\d+[hdwm](?:[+-]\d+[hdwm])+$/i;const COMPACT_DATE=/^(\d{4})(\d{2})(\d{2})$/;const COMPACT_DATETIME=/^(\d{4})(\d{2})(\d{2})(?:[T\s]?)(\d{2})(\d{2})(\d{2})?([.,]\d{1,3})?(Z|[+-]\d{2}:?\d{2})?$/i;const HYPHEN_TIME=/^(\d{4}-\d{2}-\d{2})[T\s](\d{2})-(\d{2})(?:-(\d{2}))?([.,]\d{1,3})?(Z|[+-]\d{2}:?\d{2})?$/i;const COMPACT_TIME=/^(\d{4}-\d{2}-\d{2})[T\s](\d{2})(\d{2})(\d{2})?([.,]\d{1,3})?(Z|[+-]\d{2}:?\d{2})?$/i;const RFC_3339_DATE_TIME=/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})(?:\.\d+)?(?:Z|[+-](\d{2}):(\d{2}))$/i;function nowIso(){return nextReproducibleTimestamp()??new Date().toISOString()}function isTimestampLiteral(input){return Number.isFinite(Date.parse(input))}function isRfc3339DateTime(input){const match=RFC_3339_DATE_TIME.exec(input);if(!match||!Number.isFinite(Date.parse(input)))return false;const[,yearRaw,monthRaw,dayRaw,hourRaw,minuteRaw,secondRaw,offsetHourRaw,offsetMinuteRaw]=match;const[year,month,day,hour,minute,second]=[yearRaw,monthRaw,dayRaw,hourRaw,minuteRaw,secondRaw].map(Number);return month>=1&&month<=12&&day>=1&&day<=daysInUtcMonth(year,month-1)&&hour<=23&&minute<=59&&second<=59&&(offsetHourRaw===void 0||Number(offsetHourRaw)<=23)&&(offsetMinuteRaw===void 0||Number(offsetMinuteRaw)<=59)}function isMillisecondPrecisionRfc3339DateTime(input){const fraction=/\.(\d+)(?:Z|[+-]\d{2}:\d{2})$/iu.exec(input)?.[1];return isRfc3339DateTime(input)&&(fraction===void 0||/^\d{0,3}0*$/u.test(fraction))}const TIMESTAMP_PARSE_MEMO_MAX_ENTRIES=1e4;const timestampParseMemo=new Map;function parseTimestampMsMemoized(value){const memoized=timestampParseMemo.get(value);if(memoized!==void 0){return memoized}const parsed=Date.parse(value);if(timestampParseMemo.size>=TIMESTAMP_PARSE_MEMO_MAX_ENTRIES){evictOldestMemoEntries(timestampParseMemo)}timestampParseMemo.set(value,parsed);return parsed}function compareTimestampStrings(left,right){const leftMs=parseTimestampMsMemoized(left);const rightMs=parseTimestampMsMemoized(right);if(Number.isFinite(leftMs)&&Number.isFinite(rightMs)&&leftMs!==rightMs){return leftMs-rightMs}return left.localeCompare(right)}function matchesTimestampFilters(item,filters){return!(filters.deadlineBefore&&(!item.deadline||compareTimestampStrings(item.deadline,filters.deadlineBefore)>0)||filters.deadlineAfter&&(!item.deadline||compareTimestampStrings(item.deadline,filters.deadlineAfter)<0)||filters.updatedAfter&&compareTimestampStrings(item.updated_at,filters.updatedAfter)<0||filters.updatedBefore&&compareTimestampStrings(item.updated_at,filters.updatedBefore)>0||filters.createdAfter&&compareTimestampStrings(item.created_at,filters.createdAfter)<0||filters.createdBefore&&compareTimestampStrings(item.created_at,filters.createdBefore)>0)}function normalizeFraction(raw){if(!raw)return"";const digits=raw.slice(1);return`.${digits.padEnd(3,"0").slice(0,3)}`}function normalizeOffset(raw){if(!raw)return"";if(raw.toUpperCase()==="Z")return"Z";const compact=/^([+-]\d{2})(\d{2})$/.exec(raw);if(compact)return`${compact[1]}:${compact[2]}`;return raw}function pushTimestampCandidate(candidates,input,value){if(!value)return;if(value===input)return;if(candidates.includes(value))return;candidates.push(value)}function normalizeTimestampCandidates(input){const candidates=[];const push=value=>pushTimestampCandidate(candidates,input,value);const compactDate=COMPACT_DATE.exec(input);if(compactDate){const[,year,month,day]=compactDate;push(`${year}-${month}-${day}`)}const compactDateTime=COMPACT_DATETIME.exec(input);if(compactDateTime){const[,year,month,day,hour,minute,secondRaw,fractionRaw,offsetRaw]=compactDateTime;const second=secondRaw?`:${secondRaw}`:"";push(`${year}-${month}-${day}T${hour}:${minute}${second}${normalizeFraction(fractionRaw)}${normalizeOffset(offsetRaw)}`)}const hyphenTime=HYPHEN_TIME.exec(input);if(hyphenTime){const[,datePart,hour,minute,secondRaw,fractionRaw,offsetRaw]=hyphenTime;const second=secondRaw?`:${secondRaw}`:"";push(`${datePart}T${hour}:${minute}${second}${normalizeFraction(fractionRaw)}${normalizeOffset(offsetRaw)}`)}const compactTime=COMPACT_TIME.exec(input);if(compactTime){const[,datePart,hour,minute,secondRaw,fractionRaw,offsetRaw]=compactTime;const second=secondRaw?`:${secondRaw}`:"";push(`${datePart}T${hour}:${minute}${second}${normalizeFraction(fractionRaw)}${normalizeOffset(offsetRaw)}`)}const datePrefixLength=10;const datePrefix=input.slice(0,datePrefixLength);if(isHyphenDatePrefix(datePrefix)){let index=datePrefixLength;while(index<input.length&&isWhitespaceCharacter(input[index])){index+=1}if(index<input.length){push(`${datePrefix}T${input.slice(index)}`)}}return candidates}function parseTimestampWithFallbacks(input){const direct=Date.parse(input);if(Number.isFinite(direct))return direct;for(const candidate of normalizeTimestampCandidates(input)){const parsed=Date.parse(candidate);if(Number.isFinite(parsed))return parsed}return Number.NaN}function isHyphenDatePrefix(value){if(value.length!==10){return false}for(let index=0;index<value.length;index+=1){const character=value[index];if(index===4||index===7){if(character!=="-"){return false}continue}const code=character.charCodeAt(0);if(code<48||code>57){return false}}return true}function isWhitespaceCharacter(character){if(!character){return false}return character===" "||character===" "||character==="\n"||character==="\r"||character==="\f"||character==="\v"}function daysInUtcMonth(year,monthIndex){return new Date(Date.UTC(year,monthIndex+1,0)).getUTCDate()}const MONTH_NAMES=["January","February","March","April","May","June","July","August","September","October","November","December"];const LEADING_HYPHEN_DATE=/^(\d{4})-(\d{2})-(\d{2})/;const LEADING_COMPACT_DATE=/^(\d{4})(\d{2})(\d{2})(?:[T ]?\d{2}|$)/;function assertRealCalendarDate(originalInput,trimmed,fieldLabel){const match=LEADING_HYPHEN_DATE.exec(trimmed)??LEADING_COMPACT_DATE.exec(trimmed);if(!match){return}const year=Number.parseInt(match[1],10);const month=Number.parseInt(match[2],10);const day=Number.parseInt(match[3],10);const label=fieldLabel?.trim()||"deadline";if(month<1||month>12){throw new PmCliError(`Invalid ${label} value "${originalInput}". Month "${match[2]}" is out of range \u2014 use a month between 01 and 12.`,EXIT_CODE.USAGE)}const maxDay=daysInUtcMonth(year,month-1);if(day<1||day>maxDay){throw new PmCliError(`Invalid ${label} value "${originalInput}". ${MONTH_NAMES[month-1]} ${year} has ${maxDay} days, so day "${match[3]}" does not exist. Use a real YYYY-MM-DD calendar date.`,EXIT_CODE.USAGE)}}function addUtcMonths(now,amount){const result=new Date(now.getTime());const startDay=result.getUTCDate();const targetMonthIndex=result.getUTCMonth()+amount;const targetYear=result.getUTCFullYear()+Math.floor(targetMonthIndex/12);const targetMonth=(targetMonthIndex%12+12)%12;const day=Math.min(startDay,daysInUtcMonth(targetYear,targetMonth));result.setUTCFullYear(targetYear,targetMonth,day);return result}function resolveIsoOrRelative(input,now=new Date,fieldLabel="deadline"){const trimmed=input.trim();if(trimmed.toLowerCase()==="now"){return now.toISOString()}const relative=RELATIVE_DEADLINE.exec(trimmed);if(relative){const sign=relative[1]==="-"?-1:1;const amount=Number.parseInt(relative[2],10)*sign;const unit=relative[3].toLowerCase();if(unit==="m"){return addUtcMonths(now,amount).toISOString()}const msPerUnit=unit==="h"?60*60*1e3:unit==="d"?24*60*60*1e3:7*24*60*60*1e3;return new Date(now.getTime()+amount*msPerUnit).toISOString()}assertRealCalendarDate(input,trimmed,fieldLabel);const timestamp=parseTimestampWithFallbacks(trimmed);if(!Number.isFinite(timestamp)){const normalizedLabel=fieldLabel.trim().length>0?fieldLabel.trim():"deadline";const guidance=COMPOUND_RELATIVE_DEADLINE.test(trimmed)?"Compound relative expressions like +3d+1h are not supported; use a single relative token (for example +3d) or an ISO/date string.":'Use ISO/date string input, "now", or relative +6h/-6h/+1d/-1d/+2w/-2w/+6m/-6m.';throw new PmCliError(`Invalid ${normalizedLabel} value "${input}". ${guidance}`,EXIT_CODE.USAGE)}return new Date(timestamp).toISOString()}const _testOnly={normalizeOffset,pushTimestampCandidate,normalizeTimestampCandidates,parseTimestampWithFallbacks,isWhitespaceCharacter};export{_testOnly,compareTimestampStrings,isMillisecondPrecisionRfc3339DateTime,isRfc3339DateTime,isTimestampLiteral,matchesTimestampFilters,nowIso,resolveIsoOrRelative};
|
|
306
2
|
//# sourceMappingURL=time.js.map
|
|
307
|
-
//# debugId=fb1102d4-1beb-5de8-87e6-af2efebafe39
|
package/dist/core/store/index.js
CHANGED
|
@@ -1,13 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
* @module core/store/index
|
|
3
|
-
*
|
|
4
|
-
* Reads and writes tracker storage with format-aware helpers for Index.
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="b6bfc1f8-dc32-5942-810a-21f076e57d0f")}catch(e){}}();
|
|
8
|
-
export * from "./item-format-migration.js";
|
|
9
|
-
export * from "./item-store.js";
|
|
10
|
-
export * from "./paths.js";
|
|
11
|
-
export * from "./settings.js";
|
|
1
|
+
!(function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="73dc2a96-d38f-5599-9c1a-3f035d466c46")}catch(e2){}})();export*from"./item-format-migration.js";export*from"./item-store.js";export*from"./paths.js";export*from"./settings.js";
|
|
12
2
|
//# sourceMappingURL=index.js.map
|
|
13
|
-
//# debugId=b6bfc1f8-dc32-5942-810a-21f076e57d0f
|