@unbrained/pm-cli 2026.9.6 → 2026.9.8
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 +5 -0
- package/.agents/skills/pm-user/references/ECOSYSTEM_PLANNING.md +95 -0
- package/.claude-plugin/marketplace.json +2 -2
- package/CHANGELOG.md +218 -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.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-3BZZA6A3.js +5 -0
- package/dist/cli-bundle/chunks/chunk-AMRDVX36.js +235 -0
- package/dist/cli-bundle/chunks/chunk-DAM4CBBR.js +2202 -0
- package/dist/cli-bundle/chunks/{chunk-WYRZZ5ZE.js → chunk-DEZPZOQ7.js} +2 -2
- package/dist/cli-bundle/chunks/chunk-FLDWYEND.js +77 -0
- package/dist/cli-bundle/chunks/{chunk-NPN5I67J.js → chunk-G5ADGQ2D.js} +3 -3
- package/dist/cli-bundle/chunks/chunk-JAAEYHUA.js +2 -0
- package/dist/cli-bundle/chunks/{chunk-JX4DH4WC.js → chunk-KR3RP4FH.js} +3 -3
- package/dist/cli-bundle/chunks/chunk-LEZOUXG6.js +2 -0
- package/dist/cli-bundle/chunks/chunk-NSAPNEYH.js +2 -0
- package/dist/cli-bundle/chunks/chunk-QOEKOECV.js +29 -0
- package/dist/cli-bundle/chunks/chunk-RHSFOMHU.js +2 -0
- package/dist/cli-bundle/chunks/chunk-XOD2PCB6.js +20 -0
- package/dist/cli-bundle/chunks/{chunk-JT6XF6GE.js → chunk-YVEQ2AMO.js} +4 -4
- package/dist/cli-bundle/chunks/register-list-query-KSK3R63M.js +11 -0
- package/dist/cli-bundle/chunks/register-mutation-IQ5C7U6O.js +20 -0
- package/dist/cli-bundle/chunks/{register-operations-I5W3KMGB.js → register-operations-DWVHR2NC.js} +2 -2
- package/dist/cli-bundle/chunks/register-setup-BQ5SVD4B.js +2 -0
- package/dist/cli-bundle/focused-chunks/chunk-3WRPWLA7.js +3 -0
- package/dist/cli-bundle/focused-chunks/chunk-7MBUII7U.js +2 -0
- package/dist/cli-bundle/focused-chunks/chunk-COPBO5HW.js +8 -0
- package/dist/cli-bundle/focused-chunks/chunk-DUN4IXYN.js +20 -0
- package/dist/cli-bundle/focused-chunks/{chunk-LIJIA4TY.js → chunk-EE5QSM4Z.js} +3 -3
- package/dist/cli-bundle/focused-chunks/chunk-HJVARYM3.js +6 -0
- package/dist/cli-bundle/focused-chunks/chunk-IAUOUGVR.js +177 -0
- package/dist/cli-bundle/focused-chunks/chunk-KOOMJ54F.js +2 -0
- package/dist/cli-bundle/focused-chunks/chunk-MZDXX7JY.js +56 -0
- package/dist/cli-bundle/focused-chunks/{chunk-M6PBRFSH.js → chunk-OPFHFGDD.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-QHNETP77.js +9 -0
- package/dist/cli-bundle/focused-chunks/{chunk-3BZEOXLT.js → chunk-RMWES4M6.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-RXT4P5QH.js +10 -0
- package/dist/cli-bundle/focused-chunks/chunk-SDOL6FM2.js +12 -0
- package/dist/cli-bundle/focused-chunks/chunk-SQV4AAUC.js +2 -0
- package/dist/cli-bundle/focused-chunks/{chunk-PEFABF7E.js → chunk-WE3IUNIW.js} +3 -3
- package/dist/cli-bundle/focused-chunks/chunk-YALOUBWJ.js +2 -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 +29 -29
- 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/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.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.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 +157 -837
- 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.js +1 -2261
- package/dist/sdk/governance/workspace-position.js +1 -163
- package/dist/sdk/governance.d.ts +1 -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 -0
- 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.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.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.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.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.js +1 -4
- package/dist/sdk/runtime-stats-options.js +1 -38
- 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.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.js +1 -245
- package/docs/AGENT_GUIDE.md +1 -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 +3 -0
- package/docs/RELEASING.md +1 -0
- package/docs/SCRIPTING.md +21 -0
- package/docs/TESTING.md +23 -0
- package/docs/generated/FLAG_LEXICON_BUDGETS.md +5 -5
- package/docs/generated/REFUSAL_CLOSURE_CENSUS.md +2 -2
- package/marketplace.json +2 -2
- package/package.json +1 -1
- package/packages/pm-beads/package.json +1 -1
- package/packages/pm-calendar/package.json +1 -1
- package/packages/pm-command-kit/package.json +1 -1
- package/packages/pm-digital-twin/package.json +1 -1
- package/packages/pm-governance-audit/package.json +1 -1
- package/packages/pm-guide-shell/package.json +1 -1
- package/packages/pm-kanban/package.json +1 -1
- package/packages/pm-lifecycle-hooks/package.json +1 -1
- package/packages/pm-linked-test-adapters/package.json +1 -1
- package/packages/pm-search-advanced/package.json +1 -1
- package/packages/pm-templates/package.json +1 -1
- package/packages/pm-todos/package.json +1 -1
- package/packages/pm-vcs/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-BAX2BYUW.js +0 -2111
- package/dist/cli-bundle/chunks/chunk-CKOL5U7J.js +0 -77
- 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-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-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,402 +1,2 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @module sdk/query/activity
|
|
3
|
-
*
|
|
4
|
-
* Implements the pm activity command surface and its agent-facing runtime behavior.
|
|
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]="7005305a-5fd4-56b8-a0a0-5612e8bf48cc")}catch(e){}}();
|
|
8
|
-
import { assertInitializedTracker } from "../environment/tracker-preflight.js";
|
|
9
|
-
import { isFileMissingError } from "../../core/fs/fs-utils.js";
|
|
10
|
-
import fs from "node:fs/promises";
|
|
11
|
-
import path from "node:path";
|
|
12
|
-
import { getActiveExtensionRegistrations, runActiveOnReadHooks, enforceHistoryStreamPolicyForItems, resolveItemTypeRegistry, EXIT_CODE, PmCliError, compareTimestampStrings, nowIso, resolveIsoOrRelative, listAllItemMetadataLight, resolvePmRoot, readSettings, } from "../runtime-primitives.js";
|
|
13
|
-
import { readHistoryEntries } from "../history-read.js";
|
|
14
|
-
import { parseLimit } from "./parsers.js";
|
|
15
|
-
import { resolveModePairedOutputOmissionReceipt, } from "../output-projection.js";
|
|
16
|
-
import { compileHistoryProvenanceMatcher, projectHistoryProvenance, resolveHistoryProvenanceDimensions, summarizeHistoryProvenance, } from "../history-provenance.js";
|
|
17
|
-
const DEFAULT_COMPACT_ACTIVITY_LIMIT = 20;
|
|
18
|
-
const DEFAULT_FULL_ACTIVITY_LIMIT = 5;
|
|
19
|
-
const DEFAULT_DIGEST_ACTIVITY_LIMIT = 15;
|
|
20
|
-
const DEFAULT_DIGEST_WINDOW = "-24h";
|
|
21
|
-
/** Normalize raw and full aliases into one explicit activity row projection. */
|
|
22
|
-
export function normalizeActivityProjectionOptions(options) {
|
|
23
|
-
const normalized = { ...options };
|
|
24
|
-
if (normalized.full === true) {
|
|
25
|
-
normalized.raw = true;
|
|
26
|
-
normalized.compact = false;
|
|
27
|
-
}
|
|
28
|
-
else if (normalized.raw === true && normalized.compact === undefined) {
|
|
29
|
-
normalized.compact = true;
|
|
30
|
-
}
|
|
31
|
-
delete normalized.full;
|
|
32
|
-
return normalized;
|
|
33
|
-
}
|
|
34
|
-
const ACTIVITY_ROW_KEY_BY_MODE = {
|
|
35
|
-
digest: "activity_digest",
|
|
36
|
-
compact: "compact_activity",
|
|
37
|
-
provenance: "provenance_activity",
|
|
38
|
-
full: "activity",
|
|
39
|
-
};
|
|
40
|
-
function parseNonEmptyFilter(raw, flagLabel) {
|
|
41
|
-
if (raw === undefined)
|
|
42
|
-
return undefined;
|
|
43
|
-
const normalized = raw.trim();
|
|
44
|
-
if (normalized.length === 0) {
|
|
45
|
-
throw new PmCliError(`${flagLabel} must not be empty`, EXIT_CODE.USAGE);
|
|
46
|
-
}
|
|
47
|
-
return normalized;
|
|
48
|
-
}
|
|
49
|
-
function parseRangeBound(raw, nowValue, fieldLabel) {
|
|
50
|
-
if (raw === undefined)
|
|
51
|
-
return undefined;
|
|
52
|
-
const normalized = raw.trim();
|
|
53
|
-
if (normalized.length === 0) {
|
|
54
|
-
throw new PmCliError("Activity time bounds must not be empty", EXIT_CODE.USAGE);
|
|
55
|
-
}
|
|
56
|
-
const relativeInput = fieldLabel === "--from" && /^\d+[hdwm]$/iu.test(normalized)
|
|
57
|
-
? `-${normalized}`
|
|
58
|
-
: normalized;
|
|
59
|
-
return resolveIsoOrRelative(relativeInput, new Date(nowValue), fieldLabel);
|
|
60
|
-
}
|
|
61
|
-
function includeByTimeWindow(entry, from, to) {
|
|
62
|
-
if (entry.ts.length === 0 && (from || to)) {
|
|
63
|
-
return false;
|
|
64
|
-
}
|
|
65
|
-
if (from && compareTimestampStrings(entry.ts, from) < 0) {
|
|
66
|
-
return false;
|
|
67
|
-
}
|
|
68
|
-
if (to && compareTimestampStrings(entry.ts, to) >= 0) {
|
|
69
|
-
return false;
|
|
70
|
-
}
|
|
71
|
-
return true;
|
|
72
|
-
}
|
|
73
|
-
function limitEntries(values, limit) {
|
|
74
|
-
if (limit === undefined)
|
|
75
|
-
return values;
|
|
76
|
-
return values.slice(0, limit);
|
|
77
|
-
}
|
|
78
|
-
function readActivityString(value, fallback = "") {
|
|
79
|
-
return typeof value === "string" ? value : fallback;
|
|
80
|
-
}
|
|
81
|
-
function normalizeActivityEntry(id, entry) {
|
|
82
|
-
return {
|
|
83
|
-
...entry,
|
|
84
|
-
id,
|
|
85
|
-
ts: readActivityString(entry.ts),
|
|
86
|
-
author: readActivityString(entry.author, "unknown"),
|
|
87
|
-
op: readActivityString(entry.op, "unknown"),
|
|
88
|
-
patch: Array.isArray(entry.patch) ? entry.patch : [],
|
|
89
|
-
before_hash: readActivityString(entry.before_hash),
|
|
90
|
-
after_hash: readActivityString(entry.after_hash),
|
|
91
|
-
};
|
|
92
|
-
}
|
|
93
|
-
function sortActivity(entries) {
|
|
94
|
-
return [...entries].sort((a, b) => {
|
|
95
|
-
const byTimestamp = b.ts.localeCompare(a.ts);
|
|
96
|
-
if (byTimestamp !== 0)
|
|
97
|
-
return byTimestamp;
|
|
98
|
-
const byId = a.id.localeCompare(b.id);
|
|
99
|
-
if (byId !== 0)
|
|
100
|
-
return byId;
|
|
101
|
-
return a.op.localeCompare(b.op);
|
|
102
|
-
});
|
|
103
|
-
}
|
|
104
|
-
async function listHistoryFiles(historyDir) {
|
|
105
|
-
try {
|
|
106
|
-
return (await fs.readdir(historyDir))
|
|
107
|
-
.filter((entry) => entry.endsWith(".jsonl"))
|
|
108
|
-
.sort((a, b) => a.localeCompare(b));
|
|
109
|
-
}
|
|
110
|
-
catch (error) {
|
|
111
|
-
// Activity should degrade gracefully when optional history storage is absent.
|
|
112
|
-
if (isFileMissingError(error)) {
|
|
113
|
-
return [];
|
|
114
|
-
}
|
|
115
|
-
throw error;
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
function resolveActivityProjectionMode(options) {
|
|
119
|
-
if (options.raw !== true &&
|
|
120
|
-
options.compact !== true &&
|
|
121
|
-
options.provenance !== true) {
|
|
122
|
-
return "digest";
|
|
123
|
-
}
|
|
124
|
-
if (options.provenance === true)
|
|
125
|
-
return "provenance";
|
|
126
|
-
if (options.compact === true ||
|
|
127
|
-
(options.raw === true && options.compact !== false)) {
|
|
128
|
-
return "compact";
|
|
129
|
-
}
|
|
130
|
-
return "full";
|
|
131
|
-
}
|
|
132
|
-
function resolveActivityLimit(options, explicitLimit, projectionMode) {
|
|
133
|
-
if (options.unbounded === true)
|
|
134
|
-
return undefined;
|
|
135
|
-
if (explicitLimit !== undefined)
|
|
136
|
-
return explicitLimit;
|
|
137
|
-
if (projectionMode === "digest")
|
|
138
|
-
return DEFAULT_DIGEST_ACTIVITY_LIMIT;
|
|
139
|
-
if (projectionMode === "compact")
|
|
140
|
-
return DEFAULT_COMPACT_ACTIVITY_LIMIT;
|
|
141
|
-
return DEFAULT_FULL_ACTIVITY_LIMIT;
|
|
142
|
-
}
|
|
143
|
-
function resolveActivityFilters(options, projectionMode) {
|
|
144
|
-
const nowValue = nowIso();
|
|
145
|
-
const digest = projectionMode === "digest";
|
|
146
|
-
const to = parseRangeBound(options.to ?? (digest ? nowValue : undefined), nowValue, "--to");
|
|
147
|
-
const from = parseRangeBound(options.from ?? (digest ? DEFAULT_DIGEST_WINDOW : undefined), options.from === undefined && digest ? to : nowValue, "--from");
|
|
148
|
-
if (from && to && compareTimestampStrings(from, to) >= 0) {
|
|
149
|
-
throw new PmCliError("Activity --from must be before --to", EXIT_CODE.USAGE);
|
|
150
|
-
}
|
|
151
|
-
const explicitLimit = parseLimit(options.limit);
|
|
152
|
-
if (options.unbounded === true && explicitLimit !== undefined) {
|
|
153
|
-
throw new PmCliError("Activity --unbounded cannot be combined with --limit", EXIT_CODE.USAGE);
|
|
154
|
-
}
|
|
155
|
-
return {
|
|
156
|
-
id: parseNonEmptyFilter(options.id, "Activity --id"),
|
|
157
|
-
op: parseNonEmptyFilter(options.op, "Activity --op"),
|
|
158
|
-
author: parseNonEmptyFilter(options.author, "Activity --author"),
|
|
159
|
-
from,
|
|
160
|
-
to,
|
|
161
|
-
limit: resolveActivityLimit(options, explicitLimit, projectionMode),
|
|
162
|
-
limitSource: options.unbounded === true || explicitLimit !== undefined
|
|
163
|
-
? "explicit"
|
|
164
|
-
: "default",
|
|
165
|
-
harness: options.harness,
|
|
166
|
-
agentInstance: options.agentInstance,
|
|
167
|
-
provenance: options.provenanceFilter,
|
|
168
|
-
};
|
|
169
|
-
}
|
|
170
|
-
async function resolveActivityRuntimeContext(global) {
|
|
171
|
-
const pmRoot = resolvePmRoot(process.cwd(), global.path);
|
|
172
|
-
await assertInitializedTracker(pmRoot);
|
|
173
|
-
return {
|
|
174
|
-
pmRoot,
|
|
175
|
-
settings: await readSettings(pmRoot),
|
|
176
|
-
};
|
|
177
|
-
}
|
|
178
|
-
async function prepareActivityHistoryRead(context) {
|
|
179
|
-
const typeRegistry = resolveItemTypeRegistry(context.settings, getActiveExtensionRegistrations());
|
|
180
|
-
const items = await listAllItemMetadataLight(context.pmRoot, context.settings.item_format, typeRegistry.type_to_folder, undefined, context.settings.schema);
|
|
181
|
-
await enforceHistoryStreamPolicyForItems({
|
|
182
|
-
pmRoot: context.pmRoot,
|
|
183
|
-
settings: context.settings,
|
|
184
|
-
itemIds: items.map((item) => item.id),
|
|
185
|
-
commandLabel: "activity",
|
|
186
|
-
});
|
|
187
|
-
const historyDir = path.join(context.pmRoot, "history");
|
|
188
|
-
await runActiveOnReadHooks({
|
|
189
|
-
path: historyDir,
|
|
190
|
-
scope: "project",
|
|
191
|
-
});
|
|
192
|
-
return {
|
|
193
|
-
historyDir,
|
|
194
|
-
itemsById: new Map(items.map((item) => [
|
|
195
|
-
item.id,
|
|
196
|
-
{ title: item.title, type: item.type, status: item.status },
|
|
197
|
-
])),
|
|
198
|
-
};
|
|
199
|
-
}
|
|
200
|
-
function includeActivityEntry(entry, candidate, filters) {
|
|
201
|
-
// Preserve legacy filter semantics: op/author filters compare the raw
|
|
202
|
-
// history row before missing metadata is normalized to "unknown" for display.
|
|
203
|
-
if (filters.op && entry.op !== filters.op) {
|
|
204
|
-
return false;
|
|
205
|
-
}
|
|
206
|
-
if (filters.author && entry.author !== filters.author) {
|
|
207
|
-
return false;
|
|
208
|
-
}
|
|
209
|
-
return includeByTimeWindow(candidate, filters.from, filters.to);
|
|
210
|
-
}
|
|
211
|
-
async function collectActivityEntries(historyDir, filters) {
|
|
212
|
-
const combined = [];
|
|
213
|
-
for (const file of await listHistoryFiles(historyDir)) {
|
|
214
|
-
const id = file.slice(0, -".jsonl".length);
|
|
215
|
-
if (filters.id && id !== filters.id) {
|
|
216
|
-
continue;
|
|
217
|
-
}
|
|
218
|
-
const entries = await readHistoryEntries(path.join(historyDir, file), id);
|
|
219
|
-
for (const entry of entries) {
|
|
220
|
-
const candidate = normalizeActivityEntry(id, entry);
|
|
221
|
-
if (includeActivityEntry(entry, candidate, filters)) {
|
|
222
|
-
combined.push(candidate);
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
return combined;
|
|
227
|
-
}
|
|
228
|
-
function formatCompactActivity(activity) {
|
|
229
|
-
return activity.map((entry) => ({
|
|
230
|
-
id: entry.id,
|
|
231
|
-
op: entry.op,
|
|
232
|
-
ts: entry.ts,
|
|
233
|
-
author: entry.author,
|
|
234
|
-
...(entry.message ? { msg: entry.message } : {}),
|
|
235
|
-
}));
|
|
236
|
-
}
|
|
237
|
-
function boundedOperationSummary(counts) {
|
|
238
|
-
const ordered = [...counts.entries()].sort(([leftOp, leftCount], [rightOp, rightCount]) => rightCount - leftCount || leftOp.localeCompare(rightOp));
|
|
239
|
-
const visible = ordered.slice(0, 4).map(([op, count]) => `${op}:${count}`);
|
|
240
|
-
if (ordered.length > visible.length) {
|
|
241
|
-
visible.push(`+${ordered.length - visible.length}`);
|
|
242
|
-
}
|
|
243
|
-
return visible.join(",");
|
|
244
|
-
}
|
|
245
|
-
function buildActivityDigest(activity, itemsById) {
|
|
246
|
-
const grouped = new Map();
|
|
247
|
-
for (const entry of activity) {
|
|
248
|
-
const current = grouped.get(entry.id);
|
|
249
|
-
if (current === undefined) {
|
|
250
|
-
grouped.set(entry.id, {
|
|
251
|
-
firstTs: entry.ts,
|
|
252
|
-
lastTs: entry.ts,
|
|
253
|
-
eventCount: 1,
|
|
254
|
-
operations: new Map([[entry.op, 1]]),
|
|
255
|
-
});
|
|
256
|
-
continue;
|
|
257
|
-
}
|
|
258
|
-
current.eventCount += 1;
|
|
259
|
-
if (compareTimestampStrings(entry.ts, current.firstTs) < 0) {
|
|
260
|
-
current.firstTs = entry.ts;
|
|
261
|
-
}
|
|
262
|
-
if (compareTimestampStrings(entry.ts, current.lastTs) > 0) {
|
|
263
|
-
current.lastTs = entry.ts;
|
|
264
|
-
}
|
|
265
|
-
current.operations.set(entry.op, (current.operations.get(entry.op) ?? 0) + 1);
|
|
266
|
-
}
|
|
267
|
-
return [...grouped.entries()]
|
|
268
|
-
.map(([id, summary]) => {
|
|
269
|
-
const item = itemsById.get(id);
|
|
270
|
-
return {
|
|
271
|
-
id,
|
|
272
|
-
type: item?.type ?? "unknown",
|
|
273
|
-
status: item?.status ?? "unknown",
|
|
274
|
-
title: (item?.title ?? "(item metadata unavailable)").slice(0, 160),
|
|
275
|
-
event_count: summary.eventCount,
|
|
276
|
-
first_ts: summary.firstTs,
|
|
277
|
-
last_ts: summary.lastTs,
|
|
278
|
-
operations: boundedOperationSummary(summary.operations),
|
|
279
|
-
};
|
|
280
|
-
})
|
|
281
|
-
.sort((left, right) => compareTimestampStrings(right.last_ts, left.last_ts) ||
|
|
282
|
-
left.id.localeCompare(right.id));
|
|
283
|
-
}
|
|
284
|
-
function activityOperationCounts(activity) {
|
|
285
|
-
const counts = new Map();
|
|
286
|
-
for (const entry of activity) {
|
|
287
|
-
counts.set(entry.op, (counts.get(entry.op) ?? 0) + 1);
|
|
288
|
-
}
|
|
289
|
-
const ordered = [...counts.entries()].sort((left, right) => right[1] - left[1] || left[0].localeCompare(right[0]));
|
|
290
|
-
const visible = ordered.slice(0, 8);
|
|
291
|
-
if (visible.length < ordered.length) {
|
|
292
|
-
visible.push([
|
|
293
|
-
`+${String(ordered.length - visible.length)}`,
|
|
294
|
-
ordered
|
|
295
|
-
.slice(visible.length)
|
|
296
|
-
.reduce((total, [, count]) => total + count, 0),
|
|
297
|
-
]);
|
|
298
|
-
}
|
|
299
|
-
return Object.fromEntries(visible);
|
|
300
|
-
}
|
|
301
|
-
function projectActivityRows(projectionMode, matchingActivity, limit, itemsById, projectProvenance) {
|
|
302
|
-
if (projectionMode === "digest") {
|
|
303
|
-
const matchingDigest = buildActivityDigest(matchingActivity, itemsById);
|
|
304
|
-
const activityDigest = limitEntries(matchingDigest, limit);
|
|
305
|
-
return {
|
|
306
|
-
rows: { activity_digest: activityDigest },
|
|
307
|
-
compact: false,
|
|
308
|
-
totalRows: matchingDigest.length,
|
|
309
|
-
returnedRows: activityDigest.length,
|
|
310
|
-
};
|
|
311
|
-
}
|
|
312
|
-
const activity = limitEntries(matchingActivity, limit);
|
|
313
|
-
if (projectionMode === "compact") {
|
|
314
|
-
return {
|
|
315
|
-
rows: { compact_activity: formatCompactActivity(activity) },
|
|
316
|
-
compact: true,
|
|
317
|
-
totalRows: matchingActivity.length,
|
|
318
|
-
returnedRows: activity.length,
|
|
319
|
-
};
|
|
320
|
-
}
|
|
321
|
-
if (projectionMode === "provenance") {
|
|
322
|
-
return {
|
|
323
|
-
rows: { provenance_activity: activity.map(projectProvenance) },
|
|
324
|
-
compact: false,
|
|
325
|
-
totalRows: matchingActivity.length,
|
|
326
|
-
returnedRows: activity.length,
|
|
327
|
-
};
|
|
328
|
-
}
|
|
329
|
-
return {
|
|
330
|
-
rows: { activity },
|
|
331
|
-
compact: false,
|
|
332
|
-
totalRows: matchingActivity.length,
|
|
333
|
-
returnedRows: activity.length,
|
|
334
|
-
};
|
|
335
|
-
}
|
|
336
|
-
/** Public contract for test only, shared by SDK and presentation-layer consumers. */
|
|
337
|
-
export const _testOnly = {
|
|
338
|
-
parseNonEmptyFilter,
|
|
339
|
-
parseRangeBound,
|
|
340
|
-
includeByTimeWindow,
|
|
341
|
-
limitEntries,
|
|
342
|
-
readActivityString,
|
|
343
|
-
normalizeActivityEntry,
|
|
344
|
-
sortActivity,
|
|
345
|
-
listHistoryFiles,
|
|
346
|
-
buildActivityDigest,
|
|
347
|
-
activityOperationCounts,
|
|
348
|
-
};
|
|
349
|
-
/** Implements run activity for the public runtime surface of this module. */
|
|
350
|
-
export async function runActivity(options, global) {
|
|
351
|
-
const context = await resolveActivityRuntimeContext(global);
|
|
352
|
-
const projectionMode = resolveActivityProjectionMode(options);
|
|
353
|
-
const filters = resolveActivityFilters(options, projectionMode);
|
|
354
|
-
const prepared = await prepareActivityHistoryRead(context);
|
|
355
|
-
const provenanceDimensions = resolveHistoryProvenanceDimensions(context.settings.agent_identity.harness_signals);
|
|
356
|
-
const vocabulary = context.settings.agent_identity.identity_vocabulary;
|
|
357
|
-
const matchesProvenance = compileHistoryProvenanceMatcher({
|
|
358
|
-
harness: filters.harness,
|
|
359
|
-
agentInstance: filters.agentInstance,
|
|
360
|
-
provenance: filters.provenance,
|
|
361
|
-
}, vocabulary, provenanceDimensions);
|
|
362
|
-
const matchingActivity = sortActivity(await collectActivityEntries(prepared.historyDir, filters)).filter(matchesProvenance);
|
|
363
|
-
const projected = projectActivityRows(projectionMode, matchingActivity, filters.limit, prepared.itemsById, (entry) => projectHistoryProvenance(entry, vocabulary, { itemId: entry.id }));
|
|
364
|
-
const omittedCount = projected.totalRows - projected.returnedRows;
|
|
365
|
-
return {
|
|
366
|
-
...projected.rows,
|
|
367
|
-
compact: projected.compact,
|
|
368
|
-
projection: {
|
|
369
|
-
mode: projectionMode,
|
|
370
|
-
row_key: ACTIVITY_ROW_KEY_BY_MODE[projectionMode],
|
|
371
|
-
},
|
|
372
|
-
omission_receipt: resolveModePairedOutputOmissionReceipt("activity", projectionMode),
|
|
373
|
-
count: projected.returnedRows,
|
|
374
|
-
total_count: projected.totalRows,
|
|
375
|
-
limit: filters.limit ?? null,
|
|
376
|
-
omitted_count: omittedCount,
|
|
377
|
-
has_more: omittedCount > 0,
|
|
378
|
-
...(projectionMode === "digest"
|
|
379
|
-
? {
|
|
380
|
-
activity_summary: {
|
|
381
|
-
window: { from: filters.from, to: filters.to },
|
|
382
|
-
event_count: matchingActivity.length,
|
|
383
|
-
item_count: projected.totalRows,
|
|
384
|
-
author_count: new Set(matchingActivity.map((entry) => entry.author)).size,
|
|
385
|
-
operation_counts: activityOperationCounts(matchingActivity),
|
|
386
|
-
},
|
|
387
|
-
}
|
|
388
|
-
: {}),
|
|
389
|
-
...(options.provenanceSummary === true
|
|
390
|
-
? {
|
|
391
|
-
provenance_summary: summarizeHistoryProvenance(matchingActivity, vocabulary, provenanceDimensions),
|
|
392
|
-
}
|
|
393
|
-
: {}),
|
|
394
|
-
applied_bound: {
|
|
395
|
-
kind: filters.limit === undefined ? "unbounded" : "limit",
|
|
396
|
-
source: filters.limitSource,
|
|
397
|
-
value: filters.limit ?? null,
|
|
398
|
-
},
|
|
399
|
-
};
|
|
400
|
-
}
|
|
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]="03488490-bc4a-5988-9ceb-46800c6d7833")}catch(e2){}})();import{assertInitializedTracker}from"../environment/tracker-preflight.js";import{isFileMissingError}from"../../core/fs/fs-utils.js";import fs from"node:fs/promises";import path from"node:path";import{getActiveExtensionRegistrations,runActiveOnReadHooks,enforceHistoryStreamPolicyForItems,resolveItemTypeRegistry,EXIT_CODE,PmCliError,compareTimestampStrings,nowIso,resolveIsoOrRelative,listAllItemMetadataLight,resolvePmRoot,readSettings}from"../runtime-primitives.js";import{readHistoryEntries}from"../history-read.js";import{parseLimit}from"./parsers.js";import{resolveModePairedOutputOmissionReceipt}from"../output-projection.js";import{compileHistoryProvenanceMatcher,projectHistoryProvenance,resolveHistoryProvenanceDimensions,summarizeHistoryProvenance}from"../history-provenance.js";const DEFAULT_COMPACT_ACTIVITY_LIMIT=20;const DEFAULT_FULL_ACTIVITY_LIMIT=5;const DEFAULT_DIGEST_ACTIVITY_LIMIT=15;const DEFAULT_DIGEST_WINDOW="-24h";function normalizeActivityProjectionOptions(options){const normalized={...options};if(normalized.full===true){normalized.raw=true;normalized.compact=false}else if(normalized.raw===true&&normalized.compact===void 0){normalized.compact=true}delete normalized.full;return normalized}const ACTIVITY_ROW_KEY_BY_MODE={digest:"activity_digest",compact:"compact_activity",provenance:"provenance_activity",full:"activity"};function parseNonEmptyFilter(raw,flagLabel){if(raw===void 0)return void 0;const normalized=raw.trim();if(normalized.length===0){throw new PmCliError(`${flagLabel} must not be empty`,EXIT_CODE.USAGE)}return normalized}function parseRangeBound(raw,nowValue,fieldLabel){if(raw===void 0)return void 0;const normalized=raw.trim();if(normalized.length===0){throw new PmCliError("Activity time bounds must not be empty",EXIT_CODE.USAGE)}const relativeInput=fieldLabel==="--from"&&/^\d+[hdwm]$/iu.test(normalized)?`-${normalized}`:normalized;return resolveIsoOrRelative(relativeInput,new Date(nowValue),fieldLabel)}function includeByTimeWindow(entry,from,to){if(entry.ts.length===0&&(from||to)){return false}if(from&&compareTimestampStrings(entry.ts,from)<0){return false}if(to&&compareTimestampStrings(entry.ts,to)>=0){return false}return true}function limitEntries(values,limit){if(limit===void 0)return values;return values.slice(0,limit)}function readActivityString(value,fallback=""){return typeof value==="string"?value:fallback}function normalizeActivityEntry(id,entry){return{...entry,id,ts:readActivityString(entry.ts),author:readActivityString(entry.author,"unknown"),op:readActivityString(entry.op,"unknown"),patch:Array.isArray(entry.patch)?entry.patch:[],before_hash:readActivityString(entry.before_hash),after_hash:readActivityString(entry.after_hash)}}function sortActivity(entries){return[...entries].sort((a,b)=>{const byTimestamp=b.ts.localeCompare(a.ts);if(byTimestamp!==0)return byTimestamp;const byId=a.id.localeCompare(b.id);if(byId!==0)return byId;return a.op.localeCompare(b.op)})}async function listHistoryFiles(historyDir){try{return(await fs.readdir(historyDir)).filter(entry=>entry.endsWith(".jsonl")).sort((a,b)=>a.localeCompare(b))}catch(error){if(isFileMissingError(error)){return[]}throw error}}function resolveActivityProjectionMode(options){if(options.raw!==true&&options.compact!==true&&options.provenance!==true){return"digest"}if(options.provenance===true)return"provenance";if(options.compact===true||options.raw===true&&options.compact!==false){return"compact"}return"full"}function resolveActivityLimit(options,explicitLimit,projectionMode){if(options.unbounded===true)return void 0;if(explicitLimit!==void 0)return explicitLimit;if(projectionMode==="digest")return DEFAULT_DIGEST_ACTIVITY_LIMIT;if(projectionMode==="compact")return DEFAULT_COMPACT_ACTIVITY_LIMIT;return DEFAULT_FULL_ACTIVITY_LIMIT}function resolveActivityFilters(options,projectionMode){const nowValue=nowIso();const digest=projectionMode==="digest";const to=parseRangeBound(options.to??(digest?nowValue:void 0),nowValue,"--to");const from=parseRangeBound(options.from??(digest?DEFAULT_DIGEST_WINDOW:void 0),options.from===void 0&&digest?to:nowValue,"--from");if(from&&to&&compareTimestampStrings(from,to)>=0){throw new PmCliError("Activity --from must be before --to",EXIT_CODE.USAGE)}const explicitLimit=parseLimit(options.limit);if(options.unbounded===true&&explicitLimit!==void 0){throw new PmCliError("Activity --unbounded cannot be combined with --limit",EXIT_CODE.USAGE)}return{id:parseNonEmptyFilter(options.id,"Activity --id"),op:parseNonEmptyFilter(options.op,"Activity --op"),author:parseNonEmptyFilter(options.author,"Activity --author"),from,to,limit:resolveActivityLimit(options,explicitLimit,projectionMode),limitSource:options.unbounded===true||explicitLimit!==void 0?"explicit":"default",harness:options.harness,agentInstance:options.agentInstance,provenance:options.provenanceFilter}}async function resolveActivityRuntimeContext(global2){const pmRoot=resolvePmRoot(process.cwd(),global2.path);await assertInitializedTracker(pmRoot);return{pmRoot,settings:await readSettings(pmRoot)}}async function prepareActivityHistoryRead(context){const typeRegistry=resolveItemTypeRegistry(context.settings,getActiveExtensionRegistrations());const items=await listAllItemMetadataLight(context.pmRoot,context.settings.item_format,typeRegistry.type_to_folder,void 0,context.settings.schema);await enforceHistoryStreamPolicyForItems({pmRoot:context.pmRoot,settings:context.settings,itemIds:items.map(item=>item.id),commandLabel:"activity"});const historyDir=path.join(context.pmRoot,"history");await runActiveOnReadHooks({path:historyDir,scope:"project"});return{historyDir,itemsById:new Map(items.map(item=>[item.id,{title:item.title,type:item.type,status:item.status}]))}}function includeActivityEntry(entry,candidate,filters){if(filters.op&&entry.op!==filters.op){return false}if(filters.author&&entry.author!==filters.author){return false}return includeByTimeWindow(candidate,filters.from,filters.to)}async function collectActivityEntries(historyDir,filters){const combined=[];for(const file of await listHistoryFiles(historyDir)){const id=file.slice(0,-".jsonl".length);if(filters.id&&id!==filters.id){continue}const entries=await readHistoryEntries(path.join(historyDir,file),id);for(const entry of entries){const candidate=normalizeActivityEntry(id,entry);if(includeActivityEntry(entry,candidate,filters)){combined.push(candidate)}}}return combined}function formatCompactActivity(activity){return activity.map(entry=>({id:entry.id,op:entry.op,ts:entry.ts,author:entry.author,...entry.message?{msg:entry.message}:{}}))}function boundedOperationSummary(counts){const ordered=[...counts.entries()].sort(([leftOp,leftCount],[rightOp,rightCount])=>rightCount-leftCount||leftOp.localeCompare(rightOp));const visible=ordered.slice(0,4).map(([op,count])=>`${op}:${count}`);if(ordered.length>visible.length){visible.push(`+${ordered.length-visible.length}`)}return visible.join(",")}function buildActivityDigest(activity,itemsById){const grouped=new Map;for(const entry of activity){const current=grouped.get(entry.id);if(current===void 0){grouped.set(entry.id,{firstTs:entry.ts,lastTs:entry.ts,eventCount:1,operations:new Map([[entry.op,1]])});continue}current.eventCount+=1;if(compareTimestampStrings(entry.ts,current.firstTs)<0){current.firstTs=entry.ts}if(compareTimestampStrings(entry.ts,current.lastTs)>0){current.lastTs=entry.ts}current.operations.set(entry.op,(current.operations.get(entry.op)??0)+1)}return[...grouped.entries()].map(([id,summary])=>{const item=itemsById.get(id);return{id,type:item?.type??"unknown",status:item?.status??"unknown",title:(item?.title??"(item metadata unavailable)").slice(0,160),event_count:summary.eventCount,first_ts:summary.firstTs,last_ts:summary.lastTs,operations:boundedOperationSummary(summary.operations)}}).sort((left,right)=>compareTimestampStrings(right.last_ts,left.last_ts)||left.id.localeCompare(right.id))}function activityOperationCounts(activity){const counts=new Map;for(const entry of activity){counts.set(entry.op,(counts.get(entry.op)??0)+1)}const ordered=[...counts.entries()].sort((left,right)=>right[1]-left[1]||left[0].localeCompare(right[0]));const visible=ordered.slice(0,8);if(visible.length<ordered.length){visible.push([`+${String(ordered.length-visible.length)}`,ordered.slice(visible.length).reduce((total,[,count])=>total+count,0)])}return Object.fromEntries(visible)}function projectActivityRows(projectionMode,matchingActivity,limit,itemsById,projectProvenance){if(projectionMode==="digest"){const matchingDigest=buildActivityDigest(matchingActivity,itemsById);const activityDigest=limitEntries(matchingDigest,limit);return{rows:{activity_digest:activityDigest},compact:false,totalRows:matchingDigest.length,returnedRows:activityDigest.length}}const activity=limitEntries(matchingActivity,limit);if(projectionMode==="compact"){return{rows:{compact_activity:formatCompactActivity(activity)},compact:true,totalRows:matchingActivity.length,returnedRows:activity.length}}if(projectionMode==="provenance"){return{rows:{provenance_activity:activity.map(projectProvenance)},compact:false,totalRows:matchingActivity.length,returnedRows:activity.length}}return{rows:{activity},compact:false,totalRows:matchingActivity.length,returnedRows:activity.length}}const _testOnly={parseNonEmptyFilter,parseRangeBound,includeByTimeWindow,limitEntries,readActivityString,normalizeActivityEntry,sortActivity,listHistoryFiles,buildActivityDigest,activityOperationCounts};async function runActivity(options,global2){const context=await resolveActivityRuntimeContext(global2);const projectionMode=resolveActivityProjectionMode(options);const filters=resolveActivityFilters(options,projectionMode);const prepared=await prepareActivityHistoryRead(context);const provenanceDimensions=resolveHistoryProvenanceDimensions(context.settings.agent_identity.harness_signals);const vocabulary=context.settings.agent_identity.identity_vocabulary;const matchesProvenance=compileHistoryProvenanceMatcher({harness:filters.harness,agentInstance:filters.agentInstance,provenance:filters.provenance},vocabulary,provenanceDimensions);const matchingActivity=sortActivity(await collectActivityEntries(prepared.historyDir,filters)).filter(matchesProvenance);const projected=projectActivityRows(projectionMode,matchingActivity,filters.limit,prepared.itemsById,entry=>projectHistoryProvenance(entry,vocabulary,{itemId:entry.id}));const omittedCount=projected.totalRows-projected.returnedRows;return{...projected.rows,compact:projected.compact,projection:{mode:projectionMode,row_key:ACTIVITY_ROW_KEY_BY_MODE[projectionMode]},omission_receipt:resolveModePairedOutputOmissionReceipt("activity",projectionMode),count:projected.returnedRows,total_count:projected.totalRows,limit:filters.limit??null,omitted_count:omittedCount,has_more:omittedCount>0,...projectionMode==="digest"?{activity_summary:{window:{from:filters.from,to:filters.to},event_count:matchingActivity.length,item_count:projected.totalRows,author_count:new Set(matchingActivity.map(entry=>entry.author)).size,operation_counts:activityOperationCounts(matchingActivity)}}:{},...options.provenanceSummary===true?{provenance_summary:summarizeHistoryProvenance(matchingActivity,vocabulary,provenanceDimensions)}:{},applied_bound:{kind:filters.limit===void 0?"unbounded":"limit",source:filters.limitSource,value:filters.limit??null}}}export{_testOnly,normalizeActivityProjectionOptions,runActivity};
|
|
401
2
|
//# sourceMappingURL=activity.js.map
|
|
402
|
-
//# debugId=7005305a-5fd4-56b8-a0a0-5612e8bf48cc
|
|
@@ -22,6 +22,12 @@ type AggregateListedItem = {
|
|
|
22
22
|
export interface AggregateOptions {
|
|
23
23
|
/** Value that configures or reports group by for this contract. */
|
|
24
24
|
groupBy?: string;
|
|
25
|
+
/** Group array fields by distinct element (default), or by their entire normalized tuple. */
|
|
26
|
+
setMode?: string;
|
|
27
|
+
/** Maximum emitted groups, defaulting to 50 independently of input item count. */
|
|
28
|
+
limit?: string | number;
|
|
29
|
+
/** Resume after the exact group cursor returned by the preceding page. */
|
|
30
|
+
after?: string;
|
|
25
31
|
/** Value that configures or reports count for this contract. */
|
|
26
32
|
count?: boolean;
|
|
27
33
|
/** Value that configures or reports completion for this contract. */
|
|
@@ -86,15 +92,25 @@ export interface AggregateResult {
|
|
|
86
92
|
groups: AggregateRow[];
|
|
87
93
|
/** Value that configures or reports count for this contract. */
|
|
88
94
|
count: number;
|
|
95
|
+
/** Number of groups in this page. */
|
|
96
|
+
returned_count: number;
|
|
97
|
+
/** Whether additional groups remain after this page. */
|
|
98
|
+
truncated: boolean;
|
|
99
|
+
/** Exact group-key cursor for the next page, or null when complete. */
|
|
100
|
+
next_after: string | null;
|
|
89
101
|
/** Value that configures or reports totals for this contract. */
|
|
90
102
|
totals: {
|
|
91
103
|
items_considered: number;
|
|
92
104
|
items_grouped: number;
|
|
93
105
|
items_skipped_unparented: number;
|
|
106
|
+
/** Membership contributions; may exceed items_grouped when an item belongs to several groups. */
|
|
107
|
+
group_memberships: number;
|
|
94
108
|
};
|
|
95
109
|
/** Value that configures or reports filters for this contract. */
|
|
96
110
|
filters: {
|
|
97
111
|
group_by: AggregateGroupField[];
|
|
112
|
+
/** Declared interpretation of every set-valued grouping dimension. */
|
|
113
|
+
set_mode: "element" | "tuple";
|
|
98
114
|
count: boolean;
|
|
99
115
|
completion: boolean;
|
|
100
116
|
sum?: string | null;
|