@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,46 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
* @module core/store/item-metadata-query-index
|
|
3
|
-
*
|
|
4
|
-
* Maintains a rebuildable SQLite projection for bounded metadata queries.
|
|
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]="530ad63f-f7c5-52c9-9f81-a74b1cd4c36e")}catch(e){}}();
|
|
8
|
-
import fs from "node:fs/promises";
|
|
9
|
-
import path from "node:path";
|
|
10
|
-
import { randomUUID } from "node:crypto";
|
|
11
|
-
import { createRequire } from "node:module";
|
|
12
|
-
const QUERY_INDEX_FILENAME = "metadata-query-index.sqlite";
|
|
13
|
-
const QUERY_INDEX_VERSION = "5";
|
|
14
|
-
function loadDatabaseSync(loadModule) {
|
|
15
|
-
try {
|
|
16
|
-
const loaded = loadModule(["node", "sqlite"].join(":"));
|
|
17
|
-
return loaded.DatabaseSync ?? null;
|
|
18
|
-
}
|
|
19
|
-
catch {
|
|
20
|
-
return null;
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
let RuntimeDatabaseSync;
|
|
24
|
-
function loadStableDatabaseSync(nodeVersion, loadModule) {
|
|
25
|
-
const nodeMajor = Number.parseInt(nodeVersion, 10);
|
|
26
|
-
return Number.isFinite(nodeMajor) && nodeMajor >= 22
|
|
27
|
-
? loadDatabaseSync(loadModule)
|
|
28
|
-
: null;
|
|
29
|
-
}
|
|
30
|
-
function resolveDatabaseSync() {
|
|
31
|
-
if (RuntimeDatabaseSync !== undefined)
|
|
32
|
-
return RuntimeDatabaseSync;
|
|
33
|
-
RuntimeDatabaseSync = loadStableDatabaseSync(process.versions.node, createRequire(import.meta.url));
|
|
34
|
-
return RuntimeDatabaseSync;
|
|
35
|
-
}
|
|
36
|
-
function normalizeIndexWindowValue(value, fallback) {
|
|
37
|
-
return Math.max(0, Math.floor(value === undefined ? fallback : value));
|
|
38
|
-
}
|
|
39
|
-
function queryIndexPath(pmRoot) {
|
|
40
|
-
return path.join(pmRoot, "runtime", QUERY_INDEX_FILENAME);
|
|
41
|
-
}
|
|
42
|
-
function createSchema(database) {
|
|
43
|
-
database.exec(`
|
|
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]="e9e67ec7-10cb-57b0-a094-ae52b01a0f8a")}catch(e2){}})();import fs from"node:fs/promises";import path from"node:path";import{randomUUID}from"node:crypto";import{createRequire}from"node:module";const QUERY_INDEX_FILENAME="metadata-query-index.sqlite";const QUERY_INDEX_VERSION="5";function loadDatabaseSync(loadModule){try{const loaded=loadModule(["node","sqlite"].join(":"));return loaded.DatabaseSync??null}catch{return null}}let RuntimeDatabaseSync;function loadStableDatabaseSync(nodeVersion,loadModule){const nodeMajor=Number.parseInt(nodeVersion,10);return Number.isFinite(nodeMajor)&&nodeMajor>=22?loadDatabaseSync(loadModule):null}function resolveDatabaseSync(){if(RuntimeDatabaseSync!==void 0)return RuntimeDatabaseSync;RuntimeDatabaseSync=loadStableDatabaseSync(process.versions.node,createRequire(import.meta.url));return RuntimeDatabaseSync}function normalizeIndexWindowValue(value,fallback){return Math.max(0,Math.floor(value===void 0?fallback:value))}function queryIndexPath(pmRoot){return path.join(pmRoot,"runtime",QUERY_INDEX_FILENAME)}function createSchema(database){database.exec(`
|
|
44
2
|
PRAGMA foreign_keys = ON;
|
|
45
3
|
PRAGMA journal_mode = OFF;
|
|
46
4
|
PRAGMA synchronous = OFF;
|
|
@@ -95,18 +53,7 @@ function createSchema(database) {
|
|
|
95
53
|
tags,
|
|
96
54
|
tokenize = 'unicode61'
|
|
97
55
|
);
|
|
98
|
-
`);
|
|
99
|
-
}
|
|
100
|
-
function writeMetadata(database, key, value) {
|
|
101
|
-
database
|
|
102
|
-
.prepare("INSERT INTO metadata(key, value) VALUES (?, ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value")
|
|
103
|
-
.run(key, value);
|
|
104
|
-
}
|
|
105
|
-
/** Upsert authoritative metadata and replace dependent search, key and linked-file rows in the caller transaction. */
|
|
106
|
-
function insertRow(database, row) {
|
|
107
|
-
const metadata = row.metadata;
|
|
108
|
-
database
|
|
109
|
-
.prepare(`INSERT INTO items(
|
|
56
|
+
`)}function writeMetadata(database,key,value){database.prepare("INSERT INTO metadata(key, value) VALUES (?, ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value").run(key,value)}function insertRow(database,row){const metadata=row.metadata;database.prepare(`INSERT INTO items(
|
|
110
57
|
id, relative_path, metadata_json, status, type, priority,
|
|
111
58
|
updated_at, created_at, parent, assignee, sprint, release
|
|
112
59
|
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
@@ -121,356 +68,24 @@ function insertRow(database, row) {
|
|
|
121
68
|
parent = excluded.parent,
|
|
122
69
|
assignee = excluded.assignee,
|
|
123
70
|
sprint = excluded.sprint,
|
|
124
|
-
release = excluded.release`)
|
|
125
|
-
|
|
126
|
-
database
|
|
127
|
-
.prepare("DELETE FROM item_metadata_keys WHERE item_id = ?")
|
|
128
|
-
.run(metadata.id);
|
|
129
|
-
database
|
|
130
|
-
.prepare("DELETE FROM item_linked_files WHERE item_id = ?")
|
|
131
|
-
.run(metadata.id);
|
|
132
|
-
// FTS UNINDEXED columns cannot provide identity lookup. Share the items rowid
|
|
133
|
-
// so both rebuilding and incremental maintenance use a single indexed row.
|
|
134
|
-
database.prepare("DELETE FROM item_search WHERE rowid = (SELECT rowid FROM items WHERE id = ?)").run(metadata.id);
|
|
135
|
-
database
|
|
136
|
-
.prepare("INSERT INTO item_search(rowid, id, title, description, tags) SELECT rowid, ?, ?, ?, ? FROM items WHERE id = ?")
|
|
137
|
-
.run(metadata.id, metadata.title, metadata.description, metadata.tags.join(" "), metadata.id);
|
|
138
|
-
const insertMetadataKey = database.prepare("INSERT INTO item_metadata_keys(item_id, key) VALUES (?, ?)");
|
|
139
|
-
for (const key of Object.keys(metadata)) {
|
|
140
|
-
insertMetadataKey.run(metadata.id, key);
|
|
141
|
-
}
|
|
142
|
-
const insertLinkedFile = database.prepare("INSERT INTO item_linked_files(item_id, path, scope, note) VALUES (?, ?, ?, ?)");
|
|
143
|
-
for (const file of row.linkedFiles ?? []) {
|
|
144
|
-
insertLinkedFile.run(metadata.id, file.path, file.scope, file.note ?? null);
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
/** Atomically rebuild the complete query projection from authoritative cache rows. */
|
|
148
|
-
export async function rebuildItemMetadataQueryIndex(options) {
|
|
149
|
-
const targetPath = queryIndexPath(options.pmRoot);
|
|
150
|
-
const Database = resolveDatabaseSync();
|
|
151
|
-
if (!Database) {
|
|
152
|
-
await fs.rm(targetPath, { force: true });
|
|
153
|
-
return;
|
|
154
|
-
}
|
|
155
|
-
await fs.mkdir(path.dirname(targetPath), { recursive: true });
|
|
156
|
-
const temporaryPath = `${targetPath}.${randomUUID()}.tmp`;
|
|
157
|
-
let database;
|
|
158
|
-
try {
|
|
159
|
-
database = new Database(temporaryPath);
|
|
160
|
-
createSchema(database);
|
|
161
|
-
database.exec("BEGIN IMMEDIATE");
|
|
162
|
-
writeMetadata(database, "version", QUERY_INDEX_VERSION);
|
|
163
|
-
writeMetadata(database, "context_fingerprint", options.contextFingerprint);
|
|
164
|
-
writeMetadata(database, "source_cursor", options.sourceCursor);
|
|
165
|
-
for (const row of options.rows)
|
|
166
|
-
insertRow(database, row);
|
|
167
|
-
database.exec("COMMIT");
|
|
168
|
-
database.close();
|
|
169
|
-
database = undefined;
|
|
170
|
-
await fs.rm(targetPath, { force: true });
|
|
171
|
-
await fs.rename(temporaryPath, targetPath);
|
|
172
|
-
}
|
|
173
|
-
catch (error) {
|
|
174
|
-
database?.close();
|
|
175
|
-
await Promise.allSettled([fs.rm(temporaryPath, { force: true })]);
|
|
176
|
-
throw error;
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
function readIndexMetadata(database) {
|
|
180
|
-
return Object.fromEntries(database
|
|
181
|
-
.prepare("SELECT key, value FROM metadata")
|
|
182
|
-
.all()
|
|
183
|
-
.map((row) => [String(row.key), String(row.value)]));
|
|
184
|
-
}
|
|
185
|
-
/**
|
|
186
|
-
* Apply one authoritative metadata mutation in the same writer critical
|
|
187
|
-
* section as the JSON derived-index delta. A cursor mismatch fails closed so
|
|
188
|
-
* callers can remove and lazily rebuild this optional projection.
|
|
189
|
-
*/
|
|
190
|
-
export async function updateItemMetadataQueryIndex(options) {
|
|
191
|
-
const Database = resolveDatabaseSync();
|
|
192
|
-
if (!Database)
|
|
193
|
-
return false;
|
|
194
|
-
const indexPath = queryIndexPath(options.pmRoot);
|
|
195
|
-
let database;
|
|
196
|
-
try {
|
|
197
|
-
await fs.access(indexPath);
|
|
198
|
-
database = new Database(indexPath);
|
|
199
|
-
database.exec("PRAGMA foreign_keys = ON");
|
|
200
|
-
const metadata = readIndexMetadata(database);
|
|
201
|
-
if (metadata.version !== QUERY_INDEX_VERSION ||
|
|
202
|
-
metadata.context_fingerprint !== options.contextFingerprint ||
|
|
203
|
-
metadata.source_cursor !== options.expectedSourceCursor) {
|
|
204
|
-
database.close();
|
|
205
|
-
return false;
|
|
206
|
-
}
|
|
207
|
-
database.exec("BEGIN IMMEDIATE");
|
|
208
|
-
const deleteByPath = database.prepare("DELETE FROM items WHERE relative_path = ?");
|
|
209
|
-
const findRowidByPath = database.prepare("SELECT rowid FROM items WHERE relative_path = ?");
|
|
210
|
-
const deleteSearchByRowid = database.prepare("DELETE FROM item_search WHERE rowid = ?");
|
|
211
|
-
for (const relativePath of options.deletedRelativePaths ?? []) {
|
|
212
|
-
const deleted = findRowidByPath.get(relativePath);
|
|
213
|
-
deleteByPath.run(relativePath);
|
|
214
|
-
if (deleted)
|
|
215
|
-
deleteSearchByRowid.run(deleted.rowid);
|
|
216
|
-
}
|
|
217
|
-
if (options.row)
|
|
218
|
-
insertRow(database, options.row);
|
|
219
|
-
writeMetadata(database, "source_cursor", options.sourceCursor);
|
|
220
|
-
database.exec("COMMIT");
|
|
221
|
-
database.close();
|
|
222
|
-
return true;
|
|
223
|
-
}
|
|
224
|
-
catch {
|
|
225
|
-
try {
|
|
226
|
-
database?.exec("ROLLBACK");
|
|
227
|
-
}
|
|
228
|
-
catch {
|
|
229
|
-
// The optional query projection will be invalidated below.
|
|
230
|
-
}
|
|
231
|
-
database?.close();
|
|
232
|
-
return false;
|
|
233
|
-
}
|
|
234
|
-
}
|
|
235
|
-
function appendSetPredicate(clauses, parameters, column, values, operator) {
|
|
236
|
-
if (!values || values.length === 0)
|
|
237
|
-
return;
|
|
238
|
-
clauses.push(`${column} ${operator} (${values.map(() => "?").join(", ")})`);
|
|
239
|
-
parameters.push(...values);
|
|
240
|
-
}
|
|
241
|
-
function buildQueryPredicates(query) {
|
|
242
|
-
const clauses = [];
|
|
243
|
-
const parameters = [];
|
|
244
|
-
appendSetPredicate(clauses, parameters, "status", query.statuses, "IN");
|
|
245
|
-
appendSetPredicate(clauses, parameters, "status", query.excludeStatuses, "NOT IN");
|
|
246
|
-
appendSetPredicate(clauses, parameters, "type", query.types, "IN");
|
|
247
|
-
appendSetPredicate(clauses, parameters, "id", query.ids, "IN");
|
|
248
|
-
for (const metadataKey of query.metadataKeys ?? []) {
|
|
249
|
-
clauses.push("EXISTS (SELECT 1 FROM item_metadata_keys AS indexed_key WHERE indexed_key.item_id = items.id AND indexed_key.key = ?)");
|
|
250
|
-
parameters.push(metadataKey);
|
|
251
|
-
}
|
|
252
|
-
for (const [column, value] of [
|
|
253
|
-
["parent", query.parent],
|
|
254
|
-
["assignee", query.assignee],
|
|
255
|
-
["sprint", query.sprint],
|
|
256
|
-
["release", query.release],
|
|
257
|
-
]) {
|
|
258
|
-
if (value !== undefined) {
|
|
259
|
-
clauses.push(`${column} = ?`);
|
|
260
|
-
parameters.push(value);
|
|
261
|
-
}
|
|
262
|
-
}
|
|
263
|
-
if (query.priority !== undefined) {
|
|
264
|
-
clauses.push("priority = ?");
|
|
265
|
-
parameters.push(query.priority);
|
|
266
|
-
}
|
|
267
|
-
return {
|
|
268
|
-
where: clauses.length === 0 ? "" : ` WHERE ${clauses.join(" AND ")}`,
|
|
269
|
-
parameters,
|
|
270
|
-
};
|
|
271
|
-
}
|
|
272
|
-
/**
|
|
273
|
-
* Query the persistent projection without materializing the full metadata
|
|
274
|
-
* cache. Returns null when the database is absent, stale, corrupt, or active
|
|
275
|
-
* extension read hooks require canonical per-document dispatch.
|
|
276
|
-
*/
|
|
277
|
-
export async function queryItemMetadataIndex(options) {
|
|
278
|
-
const Database = resolveDatabaseSync();
|
|
279
|
-
if (!Database)
|
|
280
|
-
return null;
|
|
281
|
-
const query = options.query ?? {};
|
|
282
|
-
const { where, parameters } = buildQueryPredicates(query);
|
|
283
|
-
let database;
|
|
284
|
-
try {
|
|
285
|
-
database = new Database(queryIndexPath(options.pmRoot), {
|
|
286
|
-
readOnly: true,
|
|
287
|
-
});
|
|
288
|
-
const metadata = readIndexMetadata(database);
|
|
289
|
-
if (metadata.version !== QUERY_INDEX_VERSION ||
|
|
290
|
-
metadata.source_cursor !== options.expectedSourceCursor) {
|
|
291
|
-
database.close();
|
|
292
|
-
return null;
|
|
293
|
-
}
|
|
294
|
-
const totalRow = database
|
|
295
|
-
.prepare(`SELECT COUNT(*) AS count FROM items${where}`)
|
|
296
|
-
.get(...parameters);
|
|
297
|
-
const windowParameters = [];
|
|
298
|
-
let window = "";
|
|
299
|
-
if (query.limit !== undefined) {
|
|
300
|
-
window += " LIMIT ?";
|
|
301
|
-
windowParameters.push(Math.max(0, Math.floor(query.limit)));
|
|
302
|
-
if (query.offset !== undefined) {
|
|
303
|
-
window += " OFFSET ?";
|
|
304
|
-
windowParameters.push(Math.max(0, Math.floor(query.offset)));
|
|
305
|
-
}
|
|
306
|
-
}
|
|
307
|
-
else if (query.offset !== undefined) {
|
|
308
|
-
window += " LIMIT -1 OFFSET ?";
|
|
309
|
-
windowParameters.push(Math.max(0, Math.floor(query.offset)));
|
|
310
|
-
}
|
|
311
|
-
const rows = database
|
|
312
|
-
.prepare(`SELECT metadata_json FROM items${where}
|
|
313
|
-
ORDER BY ${query.terminalStatuses && query.terminalStatuses.length > 0
|
|
314
|
-
? `CASE WHEN status IN (${query.terminalStatuses
|
|
315
|
-
.map(() => "?")
|
|
316
|
-
.join(", ")}) THEN 1 ELSE 0 END ASC, `
|
|
317
|
-
: ""}priority ASC, updated_at DESC, id ASC${window}`)
|
|
318
|
-
.all(...parameters, ...(query.terminalStatuses ?? []), ...windowParameters);
|
|
319
|
-
const items = rows.map((row) => {
|
|
320
|
-
const parsed = JSON.parse(String(row.metadata_json));
|
|
321
|
-
if (!parsed.id)
|
|
322
|
-
throw new TypeError("Indexed metadata row has no id");
|
|
323
|
-
return parsed;
|
|
324
|
-
});
|
|
325
|
-
database.close();
|
|
326
|
-
return {
|
|
327
|
-
source_cursor: metadata.source_cursor,
|
|
328
|
-
total: Number(totalRow.count),
|
|
329
|
-
items,
|
|
330
|
-
};
|
|
331
|
-
}
|
|
332
|
-
catch {
|
|
333
|
-
database?.close();
|
|
334
|
-
return null;
|
|
335
|
-
}
|
|
336
|
-
}
|
|
337
|
-
/**
|
|
338
|
-
* Resolve items that link any requested project-relative path without loading
|
|
339
|
-
* heavy item collections. Returns null when the optional projection is absent,
|
|
340
|
-
* stale, or corrupt so callers can fall back to authoritative item reads.
|
|
341
|
-
*/
|
|
342
|
-
export async function queryLinkedFileMetadataIndex(options) {
|
|
343
|
-
const Database = resolveDatabaseSync();
|
|
344
|
-
if (!Database || options.paths.length === 0)
|
|
345
|
-
return null;
|
|
346
|
-
let database;
|
|
347
|
-
try {
|
|
348
|
-
database = new Database(queryIndexPath(options.pmRoot), {
|
|
349
|
-
readOnly: true,
|
|
350
|
-
});
|
|
351
|
-
const metadata = readIndexMetadata(database);
|
|
352
|
-
if (metadata.version !== QUERY_INDEX_VERSION ||
|
|
353
|
-
metadata.source_cursor !== options.expectedSourceCursor) {
|
|
354
|
-
database.close();
|
|
355
|
-
return null;
|
|
356
|
-
}
|
|
357
|
-
const pathPlaceholders = options.paths.map(() => "?").join(", ");
|
|
358
|
-
const scopePredicate = options.scope === undefined ? "" : " AND scope = ?";
|
|
359
|
-
const matchParameters = [
|
|
360
|
-
...options.paths,
|
|
361
|
-
...(options.scope === undefined ? [] : [options.scope]),
|
|
362
|
-
];
|
|
363
|
-
const predicate = `path IN (${pathPlaceholders})${scopePredicate}`;
|
|
364
|
-
const totalRow = database
|
|
365
|
-
.prepare(`SELECT COUNT(DISTINCT item_id) AS count
|
|
71
|
+
release = excluded.release`).run(metadata.id,row.relativePath,JSON.stringify(metadata),metadata.status,metadata.type,metadata.priority,metadata.updated_at,metadata.created_at,metadata.parent??null,metadata.assignee??null,metadata.sprint??null,metadata.release??null);database.prepare("DELETE FROM item_metadata_keys WHERE item_id = ?").run(metadata.id);database.prepare("DELETE FROM item_linked_files WHERE item_id = ?").run(metadata.id);database.prepare("DELETE FROM item_search WHERE rowid = (SELECT rowid FROM items WHERE id = ?)").run(metadata.id);database.prepare("INSERT INTO item_search(rowid, id, title, description, tags) SELECT rowid, ?, ?, ?, ? FROM items WHERE id = ?").run(metadata.id,metadata.title,metadata.description,metadata.tags.join(" "),metadata.id);const insertMetadataKey=database.prepare("INSERT INTO item_metadata_keys(item_id, key) VALUES (?, ?)");for(const key of Object.keys(metadata)){insertMetadataKey.run(metadata.id,key)}const insertLinkedFile=database.prepare("INSERT INTO item_linked_files(item_id, path, scope, note) VALUES (?, ?, ?, ?)");for(const file of row.linkedFiles??[]){insertLinkedFile.run(metadata.id,file.path,file.scope,file.note??null)}}async function rebuildItemMetadataQueryIndex(options){const targetPath=queryIndexPath(options.pmRoot);const Database=resolveDatabaseSync();if(!Database){await fs.rm(targetPath,{force:true});return}await fs.mkdir(path.dirname(targetPath),{recursive:true});const temporaryPath=`${targetPath}.${randomUUID()}.tmp`;let database;try{database=new Database(temporaryPath);createSchema(database);database.exec("BEGIN IMMEDIATE");writeMetadata(database,"version",QUERY_INDEX_VERSION);writeMetadata(database,"context_fingerprint",options.contextFingerprint);writeMetadata(database,"source_cursor",options.sourceCursor);for(const row of options.rows)insertRow(database,row);database.exec("COMMIT");database.close();database=void 0;await fs.rm(targetPath,{force:true});await fs.rename(temporaryPath,targetPath)}catch(error){database?.close();await Promise.allSettled([fs.rm(temporaryPath,{force:true})]);throw error}}function readIndexMetadata(database){return Object.fromEntries(database.prepare("SELECT key, value FROM metadata").all().map(row=>[String(row.key),String(row.value)]))}async function updateItemMetadataQueryIndex(options){const Database=resolveDatabaseSync();if(!Database)return false;const indexPath=queryIndexPath(options.pmRoot);let database;try{await fs.access(indexPath);database=new Database(indexPath);database.exec("PRAGMA foreign_keys = ON");const metadata=readIndexMetadata(database);if(metadata.version!==QUERY_INDEX_VERSION||metadata.context_fingerprint!==options.contextFingerprint||metadata.source_cursor!==options.expectedSourceCursor){database.close();return false}database.exec("BEGIN IMMEDIATE");const deleteByPath=database.prepare("DELETE FROM items WHERE relative_path = ?");const findRowidByPath=database.prepare("SELECT rowid FROM items WHERE relative_path = ?");const deleteSearchByRowid=database.prepare("DELETE FROM item_search WHERE rowid = ?");for(const relativePath of options.deletedRelativePaths??[]){const deleted=findRowidByPath.get(relativePath);deleteByPath.run(relativePath);if(deleted)deleteSearchByRowid.run(deleted.rowid)}if(options.row)insertRow(database,options.row);writeMetadata(database,"source_cursor",options.sourceCursor);database.exec("COMMIT");database.close();return true}catch{try{database?.exec("ROLLBACK")}catch{}database?.close();return false}}function appendSetPredicate(clauses,parameters,column,values,operator){if(!values||values.length===0)return;clauses.push(`${column} ${operator} (${values.map(()=>"?").join(", ")})`);parameters.push(...values)}function buildQueryPredicates(query){const clauses=[];const parameters=[];appendSetPredicate(clauses,parameters,"status",query.statuses,"IN");appendSetPredicate(clauses,parameters,"status",query.excludeStatuses,"NOT IN");appendSetPredicate(clauses,parameters,"type",query.types,"IN");appendSetPredicate(clauses,parameters,"id",query.ids,"IN");for(const metadataKey of query.metadataKeys??[]){clauses.push("EXISTS (SELECT 1 FROM item_metadata_keys AS indexed_key WHERE indexed_key.item_id = items.id AND indexed_key.key = ?)");parameters.push(metadataKey)}for(const[column,value]of[["parent",query.parent],["assignee",query.assignee],["sprint",query.sprint],["release",query.release]]){if(value!==void 0){clauses.push(`${column} = ?`);parameters.push(value)}}if(query.priority!==void 0){clauses.push("priority = ?");parameters.push(query.priority)}return{where:clauses.length===0?"":` WHERE ${clauses.join(" AND ")}`,parameters}}async function queryItemMetadataIndex(options){const Database=resolveDatabaseSync();if(!Database)return null;const query=options.query??{};const{where,parameters}=buildQueryPredicates(query);let database;try{database=new Database(queryIndexPath(options.pmRoot),{readOnly:true});const metadata=readIndexMetadata(database);if(metadata.version!==QUERY_INDEX_VERSION||metadata.source_cursor!==options.expectedSourceCursor){database.close();return null}const totalRow=database.prepare(`SELECT COUNT(*) AS count FROM items${where}`).get(...parameters);const windowParameters=[];let window2="";if(query.limit!==void 0){window2+=" LIMIT ?";windowParameters.push(Math.max(0,Math.floor(query.limit)));if(query.offset!==void 0){window2+=" OFFSET ?";windowParameters.push(Math.max(0,Math.floor(query.offset)))}}else if(query.offset!==void 0){window2+=" LIMIT -1 OFFSET ?";windowParameters.push(Math.max(0,Math.floor(query.offset)))}const rows=database.prepare(`SELECT metadata_json FROM items${where}
|
|
72
|
+
ORDER BY ${query.terminalStatuses&&query.terminalStatuses.length>0?`CASE WHEN status IN (${query.terminalStatuses.map(()=>"?").join(", ")}) THEN 1 ELSE 0 END ASC, `:""}priority ASC, updated_at DESC, id ASC${window2}`).all(...parameters,...query.terminalStatuses??[],...windowParameters);const items=rows.map(row=>{const parsed=JSON.parse(String(row.metadata_json));if(!parsed.id)throw new TypeError("Indexed metadata row has no id");return parsed});database.close();return{source_cursor:metadata.source_cursor,total:Number(totalRow.count),items}}catch{database?.close();return null}}async function queryLinkedFileMetadataIndex(options){const Database=resolveDatabaseSync();if(!Database||options.paths.length===0)return null;let database;try{database=new Database(queryIndexPath(options.pmRoot),{readOnly:true});const metadata=readIndexMetadata(database);if(metadata.version!==QUERY_INDEX_VERSION||metadata.source_cursor!==options.expectedSourceCursor){database.close();return null}const pathPlaceholders=options.paths.map(()=>"?").join(", ");const scopePredicate=options.scope===void 0?"":" AND scope = ?";const matchParameters=[...options.paths,...options.scope===void 0?[]:[options.scope]];const predicate=`path IN (${pathPlaceholders})${scopePredicate}`;const totalRow=database.prepare(`SELECT COUNT(DISTINCT item_id) AS count
|
|
366
73
|
FROM item_linked_files
|
|
367
|
-
WHERE ${predicate}`)
|
|
368
|
-
.get(...matchParameters);
|
|
369
|
-
const limit = normalizeIndexWindowValue(options.limit, 50);
|
|
370
|
-
const offset = normalizeIndexWindowValue(options.offset, 0);
|
|
371
|
-
const itemRows = database
|
|
372
|
-
.prepare(`SELECT items.id, items.metadata_json
|
|
74
|
+
WHERE ${predicate}`).get(...matchParameters);const limit=normalizeIndexWindowValue(options.limit,50);const offset=normalizeIndexWindowValue(options.offset,0);const itemRows=database.prepare(`SELECT items.id, items.metadata_json
|
|
373
75
|
FROM items
|
|
374
76
|
WHERE EXISTS (
|
|
375
77
|
SELECT 1 FROM item_linked_files
|
|
376
78
|
WHERE item_linked_files.item_id = items.id AND ${predicate}
|
|
377
79
|
)
|
|
378
80
|
ORDER BY items.priority ASC, items.updated_at DESC, items.id ASC
|
|
379
|
-
LIMIT ? OFFSET ?`)
|
|
380
|
-
.all(...matchParameters, limit, offset);
|
|
381
|
-
const matches = [];
|
|
382
|
-
if (itemRows.length > 0) {
|
|
383
|
-
const itemIds = itemRows.map((row) => String(row.id));
|
|
384
|
-
const linkedRows = database
|
|
385
|
-
.prepare(`SELECT item_id, path, scope, note
|
|
81
|
+
LIMIT ? OFFSET ?`).all(...matchParameters,limit,offset);const matches=[];if(itemRows.length>0){const itemIds=itemRows.map(row=>String(row.id));const linkedRows=database.prepare(`SELECT item_id, path, scope, note
|
|
386
82
|
FROM item_linked_files
|
|
387
|
-
WHERE item_id IN (${itemIds.map(()
|
|
83
|
+
WHERE item_id IN (${itemIds.map(()=>"?").join(", ")})
|
|
388
84
|
AND ${predicate}
|
|
389
|
-
ORDER BY path ASC, scope ASC`)
|
|
390
|
-
.all(...itemIds, ...matchParameters);
|
|
391
|
-
const filesByItem = new Map(itemIds.map((itemId) => [itemId, []]));
|
|
392
|
-
for (const row of linkedRows) {
|
|
393
|
-
const itemId = String(row.item_id);
|
|
394
|
-
const files = filesByItem.get(itemId);
|
|
395
|
-
files.push({
|
|
396
|
-
path: String(row.path),
|
|
397
|
-
scope: String(row.scope),
|
|
398
|
-
...(row.note === null ? {} : { note: String(row.note) }),
|
|
399
|
-
});
|
|
400
|
-
filesByItem.set(itemId, files);
|
|
401
|
-
}
|
|
402
|
-
for (const row of itemRows) {
|
|
403
|
-
const item = JSON.parse(String(row.metadata_json));
|
|
404
|
-
matches.push({ item, files: filesByItem.get(String(row.id)) });
|
|
405
|
-
}
|
|
406
|
-
}
|
|
407
|
-
database.close();
|
|
408
|
-
return {
|
|
409
|
-
source_cursor: metadata.source_cursor,
|
|
410
|
-
total: Number(totalRow.count),
|
|
411
|
-
matches,
|
|
412
|
-
};
|
|
413
|
-
}
|
|
414
|
-
catch {
|
|
415
|
-
database?.close();
|
|
416
|
-
return null;
|
|
417
|
-
}
|
|
418
|
-
}
|
|
419
|
-
/**
|
|
420
|
-
* Query FTS-ranked item candidates without materializing the workspace. The
|
|
421
|
-
* caller owns final similarity scoring and threshold semantics.
|
|
422
|
-
*/
|
|
423
|
-
export async function querySimilarItemMetadataIndex(options) {
|
|
424
|
-
const Database = resolveDatabaseSync();
|
|
425
|
-
if (!Database)
|
|
426
|
-
return null;
|
|
427
|
-
let database;
|
|
428
|
-
try {
|
|
429
|
-
database = new Database(queryIndexPath(options.pmRoot), {
|
|
430
|
-
readOnly: true,
|
|
431
|
-
});
|
|
432
|
-
const metadata = readIndexMetadata(database);
|
|
433
|
-
if (metadata.version !== QUERY_INDEX_VERSION ||
|
|
434
|
-
metadata.source_cursor !== options.expectedSourceCursor) {
|
|
435
|
-
database.close();
|
|
436
|
-
return null;
|
|
437
|
-
}
|
|
438
|
-
const rows = database
|
|
439
|
-
.prepare(`SELECT items.metadata_json
|
|
85
|
+
ORDER BY path ASC, scope ASC`).all(...itemIds,...matchParameters);const filesByItem=new Map(itemIds.map(itemId=>[itemId,[]]));for(const row of linkedRows){const itemId=String(row.item_id);const files=filesByItem.get(itemId);files.push({path:String(row.path),scope:String(row.scope),...row.note===null?{}:{note:String(row.note)}});filesByItem.set(itemId,files)}for(const row of itemRows){const item=JSON.parse(String(row.metadata_json));matches.push({item,files:filesByItem.get(String(row.id))})}}database.close();return{source_cursor:metadata.source_cursor,total:Number(totalRow.count),matches}}catch{database?.close();return null}}async function querySimilarItemMetadataIndex(options){const Database=resolveDatabaseSync();if(!Database)return null;let database;try{database=new Database(queryIndexPath(options.pmRoot),{readOnly:true});const metadata=readIndexMetadata(database);if(metadata.version!==QUERY_INDEX_VERSION||metadata.source_cursor!==options.expectedSourceCursor){database.close();return null}const rows=database.prepare(`SELECT items.metadata_json
|
|
440
86
|
FROM item_search
|
|
441
87
|
JOIN items ON items.id = item_search.id
|
|
442
88
|
WHERE item_search MATCH ?
|
|
443
89
|
ORDER BY bm25(item_search), items.priority, items.updated_at DESC, items.id
|
|
444
|
-
LIMIT ?`)
|
|
445
|
-
.all(options.query, Math.max(0, Math.floor(options.limit)));
|
|
446
|
-
const items = rows.map((row) => JSON.parse(String(row.metadata_json)));
|
|
447
|
-
database.close();
|
|
448
|
-
return {
|
|
449
|
-
source_cursor: metadata.source_cursor,
|
|
450
|
-
items,
|
|
451
|
-
};
|
|
452
|
-
}
|
|
453
|
-
catch {
|
|
454
|
-
database?.close();
|
|
455
|
-
return null;
|
|
456
|
-
}
|
|
457
|
-
}
|
|
458
|
-
/** Remove only the optional SQLite query projection. */
|
|
459
|
-
export async function removeItemMetadataQueryIndex(pmRoot) {
|
|
460
|
-
await fs.rm(queryIndexPath(pmRoot), { force: true });
|
|
461
|
-
}
|
|
462
|
-
/** Test-only dependency seam for runtimes that do not implement node:sqlite. */
|
|
463
|
-
export const _testOnly = {
|
|
464
|
-
loadDatabaseSync,
|
|
465
|
-
loadStableDatabaseSync,
|
|
466
|
-
/** Replace the optional constructor and return a restoration callback. */
|
|
467
|
-
setDatabaseSync(databaseSync) {
|
|
468
|
-
const previous = RuntimeDatabaseSync;
|
|
469
|
-
RuntimeDatabaseSync = databaseSync;
|
|
470
|
-
return () => {
|
|
471
|
-
RuntimeDatabaseSync = previous;
|
|
472
|
-
};
|
|
473
|
-
},
|
|
474
|
-
};
|
|
90
|
+
LIMIT ?`).all(options.query,Math.max(0,Math.floor(options.limit)));const items=rows.map(row=>JSON.parse(String(row.metadata_json)));database.close();return{source_cursor:metadata.source_cursor,items}}catch{database?.close();return null}}async function removeItemMetadataQueryIndex(pmRoot){await fs.rm(queryIndexPath(pmRoot),{force:true})}const _testOnly={loadDatabaseSync,loadStableDatabaseSync,setDatabaseSync(databaseSync){const previous=RuntimeDatabaseSync;RuntimeDatabaseSync=databaseSync;return()=>{RuntimeDatabaseSync=previous}}};export{_testOnly,queryItemMetadataIndex,queryLinkedFileMetadataIndex,querySimilarItemMetadataIndex,rebuildItemMetadataQueryIndex,removeItemMetadataQueryIndex,updateItemMetadataQueryIndex};
|
|
475
91
|
//# sourceMappingURL=item-metadata-query-index.js.map
|
|
476
|
-
//# debugId=530ad63f-f7c5-52c9-9f81-a74b1cd4c36e
|
|
@@ -1,44 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
* @module core/store/item-metadata-read-work
|
|
3
|
-
*
|
|
4
|
-
* Measures successful filesystem metadata enumerations within one async SDK
|
|
5
|
-
* operation. Cache hits count too: materializing a cached corpus is still work.
|
|
6
|
-
*/
|
|
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]="1cd39e2f-41c7-5005-925d-d4539cda15d3")}catch(e){}}();
|
|
9
|
-
import { AsyncLocalStorage } from "node:async_hooks";
|
|
10
|
-
import { channel } from "node:diagnostics_channel";
|
|
11
|
-
const observers = new AsyncLocalStorage();
|
|
12
|
-
const enumerations = channel("@unbrained/pm-cli/item-metadata-enumeration/v1");
|
|
13
|
-
/** Record completed enumeration in each enclosing measurement, without retaining item data. */
|
|
14
|
-
export function recordItemMetadataEnumeration(rowCount) {
|
|
15
|
-
enumerations.publish(rowCount);
|
|
16
|
-
}
|
|
17
|
-
/**
|
|
18
|
-
* Measure an awaited operation without changing its result or failure semantics.
|
|
19
|
-
* Concurrent roots remain isolated; nested measurements also contribute to their
|
|
20
|
-
* parents. The returned snapshot excludes work completed after the operation.
|
|
21
|
-
* Counters cover filesystem item-store enumeration APIs, not arbitrary host I/O.
|
|
22
|
-
*/
|
|
23
|
-
export async function measureItemMetadataReadWork(operation) {
|
|
24
|
-
const work = { enumeration_calls: 0, metadata_rows: 0 };
|
|
25
|
-
// A named channel crosses the published query/bundled runtime boundary;
|
|
26
|
-
// async membership prevents concurrent roots from counting each other's work.
|
|
27
|
-
/** Count notifications only while this measurement belongs to the active async scope. */
|
|
28
|
-
const observe = (message) => {
|
|
29
|
-
if (observers.getStore()?.includes(work)) {
|
|
30
|
-
work.enumeration_calls += 1;
|
|
31
|
-
work.metadata_rows += message;
|
|
32
|
-
}
|
|
33
|
-
};
|
|
34
|
-
enumerations.subscribe(observe);
|
|
35
|
-
try {
|
|
36
|
-
const result = await observers.run([...(observers.getStore() ?? []), work], operation);
|
|
37
|
-
return { result, work: { ...work } };
|
|
38
|
-
}
|
|
39
|
-
finally {
|
|
40
|
-
enumerations.unsubscribe(observe);
|
|
41
|
-
}
|
|
42
|
-
}
|
|
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]="118ec110-fa84-550b-a0a8-4def314270b6")}catch(e2){}})();import{AsyncLocalStorage}from"node:async_hooks";import{channel}from"node:diagnostics_channel";const observers=new AsyncLocalStorage;const enumerations=channel("@unbrained/pm-cli/item-metadata-enumeration/v1");function recordItemMetadataEnumeration(rowCount){enumerations.publish(rowCount)}async function measureItemMetadataReadWork(operation){const work={enumeration_calls:0,metadata_rows:0};const observe=message=>{if(observers.getStore()?.includes(work)){work.enumeration_calls+=1;work.metadata_rows+=message}};enumerations.subscribe(observe);try{const result=await observers.run([...observers.getStore()??[],work],operation);return{result,work:{...work}}}finally{enumerations.unsubscribe(observe)}}export{measureItemMetadataReadWork,recordItemMetadataEnumeration};
|
|
43
2
|
//# sourceMappingURL=item-metadata-read-work.js.map
|
|
44
|
-
//# debugId=1cd39e2f-41c7-5005-925d-d4539cda15d3
|