@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,261 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
* @module core/session/session-state
|
|
3
|
-
*
|
|
4
|
-
* Maintains lightweight agent session state for contextual workflows.
|
|
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]="424b9eb3-6b34-5ab0-a3f5-db61fbca12cf")}catch(e){}}();
|
|
8
|
-
import { createHash } from "node:crypto";
|
|
9
|
-
import { existsSync, promises as fs, readFileSync } from "node:fs";
|
|
10
|
-
import path from "node:path";
|
|
11
|
-
import { writeFileAtomic } from "../fs/fs-utils.js";
|
|
12
|
-
import { getRuntimePath } from "../store/paths.js";
|
|
13
|
-
const SESSION_FILENAME = "session.json";
|
|
14
|
-
function isBoundedNonEmptyString(value, maximum) {
|
|
15
|
-
return (typeof value === "string" && value.length > 0 && value.length <= maximum);
|
|
16
|
-
}
|
|
17
|
-
function parseSemanticAttribution(value) {
|
|
18
|
-
if (value === null || typeof value !== "object" || Array.isArray(value)) {
|
|
19
|
-
return undefined;
|
|
20
|
-
}
|
|
21
|
-
const record = value;
|
|
22
|
-
const validRole = ["implementer", "planner", "release-operator"].includes(String(record.role));
|
|
23
|
-
const validConfidence = ["high", "medium"].includes(String(record.confidence));
|
|
24
|
-
const validTopic = isBoundedNonEmptyString(record.topic, 256);
|
|
25
|
-
const validEvidence = Array.isArray(record.evidence) &&
|
|
26
|
-
record.evidence.length <= 32 &&
|
|
27
|
-
record.evidence.every((entry) => typeof entry === "string" && entry.length <= 128);
|
|
28
|
-
const validActiveItems = Array.isArray(record.active_item_ids) &&
|
|
29
|
-
record.active_item_ids.length <= 64 &&
|
|
30
|
-
record.active_item_ids.every((entry) => isBoundedNonEmptyString(entry, 128));
|
|
31
|
-
const validFocus = record.focused_item_id === undefined ||
|
|
32
|
-
isBoundedNonEmptyString(record.focused_item_id, 128);
|
|
33
|
-
if (![
|
|
34
|
-
validRole,
|
|
35
|
-
validConfidence,
|
|
36
|
-
validTopic,
|
|
37
|
-
validEvidence,
|
|
38
|
-
validActiveItems,
|
|
39
|
-
validFocus,
|
|
40
|
-
record.rule_version === "v2",
|
|
41
|
-
].every(Boolean)) {
|
|
42
|
-
return undefined;
|
|
43
|
-
}
|
|
44
|
-
return record;
|
|
45
|
-
}
|
|
46
|
-
function parseSemanticAttributionMap(value) {
|
|
47
|
-
if (value === null || typeof value !== "object" || Array.isArray(value)) {
|
|
48
|
-
return undefined;
|
|
49
|
-
}
|
|
50
|
-
const entries = Object.entries(value)
|
|
51
|
-
.slice(0, 128)
|
|
52
|
-
.flatMap(([key, attribution]) => {
|
|
53
|
-
const parsed = parseSemanticAttribution(attribution);
|
|
54
|
-
return parsed && key.length <= 128 ? [[key, parsed]] : [];
|
|
55
|
-
});
|
|
56
|
-
return entries.length > 0 ? Object.fromEntries(entries) : undefined;
|
|
57
|
-
}
|
|
58
|
-
/** Implements get session state path for the public runtime surface of this module. */
|
|
59
|
-
export function getSessionStatePath(pmRoot) {
|
|
60
|
-
return path.join(getRuntimePath(pmRoot), SESSION_FILENAME);
|
|
61
|
-
}
|
|
62
|
-
/** Implements read session state for the public runtime surface of this module. */
|
|
63
|
-
export async function readSessionState(pmRoot) {
|
|
64
|
-
try {
|
|
65
|
-
const raw = await fs.readFile(getSessionStatePath(pmRoot), "utf8");
|
|
66
|
-
const parsed = JSON.parse(raw);
|
|
67
|
-
if (parsed === null ||
|
|
68
|
-
typeof parsed !== "object" ||
|
|
69
|
-
Array.isArray(parsed)) {
|
|
70
|
-
return {};
|
|
71
|
-
}
|
|
72
|
-
const record = parsed;
|
|
73
|
-
const focused = record.focused_item;
|
|
74
|
-
const semanticAttribution = parseSemanticAttributionMap(record.semantic_attribution);
|
|
75
|
-
if (typeof focused === "string" && focused.trim().length > 0) {
|
|
76
|
-
return {
|
|
77
|
-
focused_item: focused,
|
|
78
|
-
...(semanticAttribution
|
|
79
|
-
? { semantic_attribution: semanticAttribution }
|
|
80
|
-
: {}),
|
|
81
|
-
};
|
|
82
|
-
}
|
|
83
|
-
return semanticAttribution
|
|
84
|
-
? { semantic_attribution: semanticAttribution }
|
|
85
|
-
: {};
|
|
86
|
-
}
|
|
87
|
-
catch {
|
|
88
|
-
return {};
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
async function writeSessionState(pmRoot, state) {
|
|
92
|
-
const target = getSessionStatePath(pmRoot);
|
|
93
|
-
await fs.mkdir(path.dirname(target), { recursive: true });
|
|
94
|
-
await writeFileAtomic(target, JSON.stringify(state));
|
|
95
|
-
}
|
|
96
|
-
/** Derive a non-secret state key from a claim principal. */
|
|
97
|
-
export function semanticAttributionKey(principal) {
|
|
98
|
-
const instance = /#([a-f0-9]{24})$/u.exec(principal.trim())?.[1];
|
|
99
|
-
return (instance ??
|
|
100
|
-
`author-${createHash("sha256").update(principal).digest("hex").slice(0, 24)}`);
|
|
101
|
-
}
|
|
102
|
-
function normalizedEvidence(values) {
|
|
103
|
-
return [...new Set(values.map((value) => value.trim()).filter(Boolean))]
|
|
104
|
-
.slice(0, 32)
|
|
105
|
-
.map((value) => value.slice(0, 128));
|
|
106
|
-
}
|
|
107
|
-
function worksetTopic(activeItemIds) {
|
|
108
|
-
const ids = [...new Set(activeItemIds)].sort((left, right) => left.localeCompare(right));
|
|
109
|
-
if (ids.length === 1)
|
|
110
|
-
return ids[0];
|
|
111
|
-
const complete = `workset:${ids.join("+")}`;
|
|
112
|
-
if (complete.length <= 256)
|
|
113
|
-
return complete;
|
|
114
|
-
const visible = ids.join("+").slice(0, 230);
|
|
115
|
-
return `workset:${visible}+${createHash("sha256").update(ids.join("\0")).digest("hex").slice(0, 12)}`;
|
|
116
|
-
}
|
|
117
|
-
async function updateSemanticAttribution(pmRoot, key, mutate) {
|
|
118
|
-
const state = await readSessionState(pmRoot);
|
|
119
|
-
const attributions = { ...state.semantic_attribution };
|
|
120
|
-
const next = mutate(attributions[key]);
|
|
121
|
-
if (next === undefined)
|
|
122
|
-
delete attributions[key];
|
|
123
|
-
else
|
|
124
|
-
attributions[key] = next;
|
|
125
|
-
const nextState = { ...state };
|
|
126
|
-
if (Object.keys(attributions).length === 0) {
|
|
127
|
-
delete nextState.semantic_attribution;
|
|
128
|
-
}
|
|
129
|
-
else {
|
|
130
|
-
nextState.semantic_attribution = attributions;
|
|
131
|
-
}
|
|
132
|
-
await writeSessionState(pmRoot, nextState);
|
|
133
|
-
}
|
|
134
|
-
/** Record a successful claim as incremental semantic session evidence. */
|
|
135
|
-
export async function recordClaimedWorkAttribution(params) {
|
|
136
|
-
const key = semanticAttributionKey(params.principal);
|
|
137
|
-
await updateSemanticAttribution(params.pmRoot, key, (current) => {
|
|
138
|
-
const activeItemIds = [
|
|
139
|
-
...new Set([...(current?.active_item_ids ?? []), params.itemId]),
|
|
140
|
-
]
|
|
141
|
-
.slice(-64)
|
|
142
|
-
.sort((left, right) => left.localeCompare(right));
|
|
143
|
-
const focusedItemId = current?.focused_item_id;
|
|
144
|
-
return {
|
|
145
|
-
role: "implementer",
|
|
146
|
-
topic: focusedItemId ?? worksetTopic(activeItemIds),
|
|
147
|
-
confidence: focusedItemId ? "high" : "medium",
|
|
148
|
-
rule_version: "v2",
|
|
149
|
-
evidence: normalizedEvidence([
|
|
150
|
-
...activeItemIds.map((id) => `claim:${id}`),
|
|
151
|
-
...(focusedItemId ? [`focus:${focusedItemId}`] : []),
|
|
152
|
-
...(params.lineageIds ?? []).map((id) => `lineage:${id}`),
|
|
153
|
-
]),
|
|
154
|
-
active_item_ids: activeItemIds,
|
|
155
|
-
...(focusedItemId ? { focused_item_id: focusedItemId } : {}),
|
|
156
|
-
};
|
|
157
|
-
});
|
|
158
|
-
}
|
|
159
|
-
/** Remove a released item from incremental semantic session evidence. */
|
|
160
|
-
export async function releaseClaimedWorkAttribution(params) {
|
|
161
|
-
const key = semanticAttributionKey(params.principal);
|
|
162
|
-
await updateSemanticAttribution(params.pmRoot, key, (current) => {
|
|
163
|
-
if (!current)
|
|
164
|
-
return undefined;
|
|
165
|
-
const activeItemIds = current.active_item_ids.filter((id) => id !== params.itemId);
|
|
166
|
-
if (activeItemIds.length === 0 && !current.focused_item_id)
|
|
167
|
-
return undefined;
|
|
168
|
-
const focusedItemId = current.focused_item_id;
|
|
169
|
-
return {
|
|
170
|
-
...current,
|
|
171
|
-
role: "release-operator",
|
|
172
|
-
topic: focusedItemId ?? worksetTopic(activeItemIds),
|
|
173
|
-
confidence: focusedItemId ? "high" : "medium",
|
|
174
|
-
evidence: normalizedEvidence([
|
|
175
|
-
...activeItemIds.map((id) => `claim:${id}`),
|
|
176
|
-
...(focusedItemId ? [`focus:${focusedItemId}`] : []),
|
|
177
|
-
`release:${params.itemId}`,
|
|
178
|
-
]),
|
|
179
|
-
active_item_ids: activeItemIds,
|
|
180
|
-
};
|
|
181
|
-
});
|
|
182
|
-
}
|
|
183
|
-
/** Set or clear focus as the highest-confidence semantic topic. */
|
|
184
|
-
export async function recordFocusedWorkAttribution(params) {
|
|
185
|
-
const key = semanticAttributionKey(params.principal);
|
|
186
|
-
await updateSemanticAttribution(params.pmRoot, key, (current) => {
|
|
187
|
-
const activeItemIds = current?.active_item_ids ?? [];
|
|
188
|
-
if (!params.itemId && activeItemIds.length === 0)
|
|
189
|
-
return undefined;
|
|
190
|
-
const focusedItemId = params.itemId;
|
|
191
|
-
return {
|
|
192
|
-
role: focusedItemId ? "planner" : current.role,
|
|
193
|
-
topic: focusedItemId ?? worksetTopic(activeItemIds),
|
|
194
|
-
confidence: focusedItemId ? "high" : "medium",
|
|
195
|
-
rule_version: "v2",
|
|
196
|
-
evidence: normalizedEvidence([
|
|
197
|
-
...activeItemIds.map((id) => `claim:${id}`),
|
|
198
|
-
...(focusedItemId ? [`focus:${focusedItemId}`] : []),
|
|
199
|
-
...(params.lineageIds ?? []).map((id) => `lineage:${id}`),
|
|
200
|
-
]),
|
|
201
|
-
active_item_ids: activeItemIds,
|
|
202
|
-
...(focusedItemId ? { focused_item_id: focusedItemId } : {}),
|
|
203
|
-
};
|
|
204
|
-
});
|
|
205
|
-
}
|
|
206
|
-
function resolveAttributionRoot(cwd, env) {
|
|
207
|
-
const configured = env.PM_PATH?.trim();
|
|
208
|
-
if (configured) {
|
|
209
|
-
const resolved = path.resolve(cwd, configured);
|
|
210
|
-
if (existsSync(path.join(resolved, "settings.json")))
|
|
211
|
-
return resolved;
|
|
212
|
-
const nested = path.join(resolved, ".agents", "pm");
|
|
213
|
-
if (existsSync(path.join(nested, "settings.json")))
|
|
214
|
-
return nested;
|
|
215
|
-
}
|
|
216
|
-
let cursor = path.resolve(cwd);
|
|
217
|
-
for (let depth = 0; depth < 32; depth += 1) {
|
|
218
|
-
const candidate = path.join(cursor, ".agents", "pm");
|
|
219
|
-
if (existsSync(path.join(candidate, "settings.json")))
|
|
220
|
-
return candidate;
|
|
221
|
-
const parent = path.dirname(cursor);
|
|
222
|
-
if (parent === cursor)
|
|
223
|
-
break;
|
|
224
|
-
cursor = parent;
|
|
225
|
-
}
|
|
226
|
-
return undefined;
|
|
227
|
-
}
|
|
228
|
-
/** Read one privacy-bounded inferred attribution without making mutations fail. */
|
|
229
|
-
export function readAgentSemanticAttributionSync(params) {
|
|
230
|
-
if (!params.key)
|
|
231
|
-
return undefined;
|
|
232
|
-
const pmRoot = resolveAttributionRoot(params.cwd, params.env);
|
|
233
|
-
if (!pmRoot)
|
|
234
|
-
return undefined;
|
|
235
|
-
try {
|
|
236
|
-
const parsed = JSON.parse(readFileSync(getSessionStatePath(pmRoot), "utf8"));
|
|
237
|
-
return parseSemanticAttribution(parsed.semantic_attribution?.[params.key]);
|
|
238
|
-
}
|
|
239
|
-
catch {
|
|
240
|
-
return undefined;
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
/** Implements get focused item for the public runtime surface of this module. */
|
|
244
|
-
export async function getFocusedItem(pmRoot) {
|
|
245
|
-
const state = await readSessionState(pmRoot);
|
|
246
|
-
return state.focused_item;
|
|
247
|
-
}
|
|
248
|
-
/** Implements set focused item for the public runtime surface of this module. */
|
|
249
|
-
export async function setFocusedItem(pmRoot, id) {
|
|
250
|
-
const state = await readSessionState(pmRoot);
|
|
251
|
-
await writeSessionState(pmRoot, { ...state, focused_item: id });
|
|
252
|
-
}
|
|
253
|
-
/** Implements clear focused item for the public runtime surface of this module. */
|
|
254
|
-
export async function clearFocusedItem(pmRoot) {
|
|
255
|
-
const state = await readSessionState(pmRoot);
|
|
256
|
-
const next = { ...state };
|
|
257
|
-
delete next.focused_item;
|
|
258
|
-
await writeSessionState(pmRoot, next);
|
|
259
|
-
}
|
|
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]="9cefffc1-c3d6-5c4a-980f-d9d3eaef0f58")}catch(e2){}})();import{createHash}from"node:crypto";import{existsSync,promises as fs,readFileSync}from"node:fs";import path from"node:path";import{writeFileAtomic}from"../fs/fs-utils.js";import{getRuntimePath}from"../store/paths.js";const SESSION_FILENAME="session.json";function isBoundedNonEmptyString(value,maximum){return typeof value==="string"&&value.length>0&&value.length<=maximum}function parseSemanticAttribution(value){if(value===null||typeof value!=="object"||Array.isArray(value)){return void 0}const record=value;const validRole=["implementer","planner","release-operator"].includes(String(record.role));const validConfidence=["high","medium"].includes(String(record.confidence));const validTopic=isBoundedNonEmptyString(record.topic,256);const validEvidence=Array.isArray(record.evidence)&&record.evidence.length<=32&&record.evidence.every(entry=>typeof entry==="string"&&entry.length<=128);const validActiveItems=Array.isArray(record.active_item_ids)&&record.active_item_ids.length<=64&&record.active_item_ids.every(entry=>isBoundedNonEmptyString(entry,128));const validFocus=record.focused_item_id===void 0||isBoundedNonEmptyString(record.focused_item_id,128);if(![validRole,validConfidence,validTopic,validEvidence,validActiveItems,validFocus,record.rule_version==="v2"].every(Boolean)){return void 0}return record}function parseSemanticAttributionMap(value){if(value===null||typeof value!=="object"||Array.isArray(value)){return void 0}const entries=Object.entries(value).slice(0,128).flatMap(([key,attribution])=>{const parsed=parseSemanticAttribution(attribution);return parsed&&key.length<=128?[[key,parsed]]:[]});return entries.length>0?Object.fromEntries(entries):void 0}function getSessionStatePath(pmRoot){return path.join(getRuntimePath(pmRoot),SESSION_FILENAME)}async function readSessionState(pmRoot){try{const raw=await fs.readFile(getSessionStatePath(pmRoot),"utf8");const parsed=JSON.parse(raw);if(parsed===null||typeof parsed!=="object"||Array.isArray(parsed)){return{}}const record=parsed;const focused=record.focused_item;const semanticAttribution=parseSemanticAttributionMap(record.semantic_attribution);if(typeof focused==="string"&&focused.trim().length>0){return{focused_item:focused,...semanticAttribution?{semantic_attribution:semanticAttribution}:{}}}return semanticAttribution?{semantic_attribution:semanticAttribution}:{}}catch{return{}}}async function writeSessionState(pmRoot,state){const target=getSessionStatePath(pmRoot);await fs.mkdir(path.dirname(target),{recursive:true});await writeFileAtomic(target,JSON.stringify(state))}function semanticAttributionKey(principal){const instance=/#([a-f0-9]{24})$/u.exec(principal.trim())?.[1];return instance??`author-${createHash("sha256").update(principal).digest("hex").slice(0,24)}`}function normalizedEvidence(values){return[...new Set(values.map(value=>value.trim()).filter(Boolean))].slice(0,32).map(value=>value.slice(0,128))}function worksetTopic(activeItemIds){const ids=[...new Set(activeItemIds)].sort((left,right)=>left.localeCompare(right));if(ids.length===1)return ids[0];const complete=`workset:${ids.join("+")}`;if(complete.length<=256)return complete;const visible=ids.join("+").slice(0,230);return`workset:${visible}+${createHash("sha256").update(ids.join("\0")).digest("hex").slice(0,12)}`}async function updateSemanticAttribution(pmRoot,key,mutate){const state=await readSessionState(pmRoot);const attributions={...state.semantic_attribution};const next=mutate(attributions[key]);if(next===void 0)delete attributions[key];else attributions[key]=next;const nextState={...state};if(Object.keys(attributions).length===0){delete nextState.semantic_attribution}else{nextState.semantic_attribution=attributions}await writeSessionState(pmRoot,nextState)}async function recordClaimedWorkAttribution(params){const key=semanticAttributionKey(params.principal);await updateSemanticAttribution(params.pmRoot,key,current=>{const activeItemIds=[...new Set([...current?.active_item_ids??[],params.itemId])].slice(-64).sort((left,right)=>left.localeCompare(right));const focusedItemId=current?.focused_item_id;return{role:"implementer",topic:focusedItemId??worksetTopic(activeItemIds),confidence:focusedItemId?"high":"medium",rule_version:"v2",evidence:normalizedEvidence([...activeItemIds.map(id=>`claim:${id}`),...focusedItemId?[`focus:${focusedItemId}`]:[],...(params.lineageIds??[]).map(id=>`lineage:${id}`)]),active_item_ids:activeItemIds,...focusedItemId?{focused_item_id:focusedItemId}:{}}})}async function releaseClaimedWorkAttribution(params){const key=semanticAttributionKey(params.principal);await updateSemanticAttribution(params.pmRoot,key,current=>{if(!current)return void 0;const activeItemIds=current.active_item_ids.filter(id=>id!==params.itemId);if(activeItemIds.length===0&&!current.focused_item_id)return void 0;const focusedItemId=current.focused_item_id;return{...current,role:"release-operator",topic:focusedItemId??worksetTopic(activeItemIds),confidence:focusedItemId?"high":"medium",evidence:normalizedEvidence([...activeItemIds.map(id=>`claim:${id}`),...focusedItemId?[`focus:${focusedItemId}`]:[],`release:${params.itemId}`]),active_item_ids:activeItemIds}})}async function recordFocusedWorkAttribution(params){const key=semanticAttributionKey(params.principal);await updateSemanticAttribution(params.pmRoot,key,current=>{const activeItemIds=current?.active_item_ids??[];if(!params.itemId&&activeItemIds.length===0)return void 0;const focusedItemId=params.itemId;return{role:focusedItemId?"planner":current.role,topic:focusedItemId??worksetTopic(activeItemIds),confidence:focusedItemId?"high":"medium",rule_version:"v2",evidence:normalizedEvidence([...activeItemIds.map(id=>`claim:${id}`),...focusedItemId?[`focus:${focusedItemId}`]:[],...(params.lineageIds??[]).map(id=>`lineage:${id}`)]),active_item_ids:activeItemIds,...focusedItemId?{focused_item_id:focusedItemId}:{}}})}function resolveAttributionRoot(cwd,env){const configured=env.PM_PATH?.trim();if(configured){const resolved=path.resolve(cwd,configured);if(existsSync(path.join(resolved,"settings.json")))return resolved;const nested=path.join(resolved,".agents","pm");if(existsSync(path.join(nested,"settings.json")))return nested}let cursor=path.resolve(cwd);for(let depth=0;depth<32;depth+=1){const candidate=path.join(cursor,".agents","pm");if(existsSync(path.join(candidate,"settings.json")))return candidate;const parent=path.dirname(cursor);if(parent===cursor)break;cursor=parent}return void 0}function readAgentSemanticAttributionSync(params){if(!params.key)return void 0;const pmRoot=resolveAttributionRoot(params.cwd,params.env);if(!pmRoot)return void 0;try{const parsed=JSON.parse(readFileSync(getSessionStatePath(pmRoot),"utf8"));return parseSemanticAttribution(parsed.semantic_attribution?.[params.key])}catch{return void 0}}async function getFocusedItem(pmRoot){const state=await readSessionState(pmRoot);return state.focused_item}async function setFocusedItem(pmRoot,id){const state=await readSessionState(pmRoot);await writeSessionState(pmRoot,{...state,focused_item:id})}async function clearFocusedItem(pmRoot){const state=await readSessionState(pmRoot);const next={...state};delete next.focused_item;await writeSessionState(pmRoot,next)}export{clearFocusedItem,getFocusedItem,getSessionStatePath,readAgentSemanticAttributionSync,readSessionState,recordClaimedWorkAttribution,recordFocusedWorkAttribution,releaseClaimedWorkAttribution,semanticAttributionKey,setFocusedItem};
|
|
260
2
|
//# sourceMappingURL=session-state.js.map
|
|
261
|
-
//# debugId=424b9eb3-6b34-5ab0-a3f5-db61fbca12cf
|
|
@@ -1,134 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
* @module core/shared/agent-session-context
|
|
3
|
-
*
|
|
4
|
-
* Defines privacy-bounded session and episode context shared by SDK, CLI, and
|
|
5
|
-
* MCP hosts without making the context load-bearing for mutation correctness.
|
|
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]="16109ee9-e684-5d25-a5f4-30a6c4f62bd5")}catch(e){}}();
|
|
9
|
-
import { AsyncLocalStorage } from "node:async_hooks";
|
|
10
|
-
const agentSessionContextStorage = new AsyncLocalStorage();
|
|
11
|
-
const EPISODE_ID_PATTERN = /^[A-Za-z0-9](?:[A-Za-z0-9._:-]{0,127})$/u;
|
|
12
|
-
function boundedText(value, limit) {
|
|
13
|
-
const trimmed = typeof value === "string" ? value.trim() : "";
|
|
14
|
-
return trimmed.length > 0 ? trimmed.slice(0, limit) : undefined;
|
|
15
|
-
}
|
|
16
|
-
/** Bound and validate an episode declaration without exposing raw input. */
|
|
17
|
-
export function boundAgentEpisodeIdentity(value, strict) {
|
|
18
|
-
if (value === undefined)
|
|
19
|
-
return undefined;
|
|
20
|
-
const record = typeof value === "object" && value !== null
|
|
21
|
-
? value
|
|
22
|
-
: {};
|
|
23
|
-
const id = boundedText(record.id, 128);
|
|
24
|
-
const parentId = boundedText(record.parent_id, 128);
|
|
25
|
-
if (id === undefined ||
|
|
26
|
-
!EPISODE_ID_PATTERN.test(id) ||
|
|
27
|
-
(parentId !== undefined && !EPISODE_ID_PATTERN.test(parentId))) {
|
|
28
|
-
if (strict) {
|
|
29
|
-
throw new Error("Agent episode ids must be 1-128 letters, digits, dots, underscores, colons, or hyphens.");
|
|
30
|
-
}
|
|
31
|
-
return undefined;
|
|
32
|
-
}
|
|
33
|
-
const label = boundedText(record.label, 256);
|
|
34
|
-
return {
|
|
35
|
-
id,
|
|
36
|
-
...(label === undefined ? {} : { label }),
|
|
37
|
-
...(parentId === undefined ? {} : { parent_id: parentId }),
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
|
-
function normalizedProvenance(value) {
|
|
41
|
-
const result = {};
|
|
42
|
-
for (const [key, rawValue] of Object.entries(value ?? {}).slice(0, 32)) {
|
|
43
|
-
const normalizedKey = key.trim().toLowerCase().slice(0, 64);
|
|
44
|
-
const normalizedValue = boundedText(rawValue, 256);
|
|
45
|
-
if (/^[a-z][a-z0-9_-]{0,63}$/u.test(normalizedKey) &&
|
|
46
|
-
normalizedValue !== undefined) {
|
|
47
|
-
result[normalizedKey] = normalizedValue;
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
return result;
|
|
51
|
-
}
|
|
52
|
-
/** Resolve ambient, inherited-environment, and explicit session context. */
|
|
53
|
-
export function resolveAgentSessionContext(explicit, env, fallbackEpisode) {
|
|
54
|
-
const ambient = agentSessionContextStorage.getStore();
|
|
55
|
-
const environmentProvenance = normalizedProvenance({
|
|
56
|
-
role: env.PM_AGENT_SESSION_ROLE,
|
|
57
|
-
topic: env.PM_AGENT_SESSION_TOPIC,
|
|
58
|
-
});
|
|
59
|
-
const environmentEpisode = boundAgentEpisodeIdentity(env.PM_AGENT_EPISODE_ID === undefined
|
|
60
|
-
? undefined
|
|
61
|
-
: {
|
|
62
|
-
id: env.PM_AGENT_EPISODE_ID,
|
|
63
|
-
label: env.PM_AGENT_EPISODE_LABEL,
|
|
64
|
-
parent_id: env.PM_AGENT_EPISODE_PARENT_ID,
|
|
65
|
-
}, false);
|
|
66
|
-
const provenance = {
|
|
67
|
-
...normalizedProvenance(ambient?.provenance),
|
|
68
|
-
...environmentProvenance,
|
|
69
|
-
...normalizedProvenance(explicit?.provenance),
|
|
70
|
-
};
|
|
71
|
-
const episode = boundAgentEpisodeIdentity(explicit?.episode, false) ??
|
|
72
|
-
boundAgentEpisodeIdentity(fallbackEpisode, false) ??
|
|
73
|
-
environmentEpisode ??
|
|
74
|
-
boundAgentEpisodeIdentity(ambient?.episode, false);
|
|
75
|
-
return Object.keys(provenance).length === 0 && episode === undefined
|
|
76
|
-
? undefined
|
|
77
|
-
: {
|
|
78
|
-
...(Object.keys(provenance).length === 0 ? {} : { provenance }),
|
|
79
|
-
...(episode === undefined ? {} : { episode }),
|
|
80
|
-
};
|
|
81
|
-
}
|
|
82
|
-
/** Resolve session context from a complete embedded-host signal envelope. */
|
|
83
|
-
export function resolveAgentSessionContextFromSignals(signals, env) {
|
|
84
|
-
return (resolveAgentSessionContext(signals.session_context, env, signals.client_info?.episode) ?? {});
|
|
85
|
-
}
|
|
86
|
-
/** Run work with one inherited session declaration and automatic episode nesting. */
|
|
87
|
-
export function runWithAgentSessionContext(context, callback) {
|
|
88
|
-
const ambient = agentSessionContextStorage.getStore();
|
|
89
|
-
const episode = boundAgentEpisodeIdentity(context.episode, true);
|
|
90
|
-
const parentEpisode = boundAgentEpisodeIdentity(ambient?.episode, false);
|
|
91
|
-
const nestedEpisode = episode !== undefined &&
|
|
92
|
-
episode.parent_id === undefined &&
|
|
93
|
-
parentEpisode !== undefined
|
|
94
|
-
? { ...episode, parent_id: parentEpisode.id }
|
|
95
|
-
: episode;
|
|
96
|
-
const provenance = {
|
|
97
|
-
...normalizedProvenance(ambient?.provenance),
|
|
98
|
-
...normalizedProvenance(context.provenance),
|
|
99
|
-
};
|
|
100
|
-
return agentSessionContextStorage.run({
|
|
101
|
-
...(Object.keys(provenance).length === 0 ? {} : { provenance }),
|
|
102
|
-
...(nestedEpisode === undefined
|
|
103
|
-
? parentEpisode === undefined
|
|
104
|
-
? {}
|
|
105
|
-
: { episode: parentEpisode }
|
|
106
|
-
: { episode: nestedEpisode }),
|
|
107
|
-
}, callback);
|
|
108
|
-
}
|
|
109
|
-
/** Serialize one declaration into environment values inherited by CLI children. */
|
|
110
|
-
export function agentSessionEnvironment(context) {
|
|
111
|
-
const provenance = normalizedProvenance(context.provenance);
|
|
112
|
-
const episode = boundAgentEpisodeIdentity(context.episode, true);
|
|
113
|
-
return {
|
|
114
|
-
...(episode === undefined
|
|
115
|
-
? {}
|
|
116
|
-
: {
|
|
117
|
-
PM_AGENT_EPISODE_ID: episode.id,
|
|
118
|
-
...(episode.label === undefined
|
|
119
|
-
? {}
|
|
120
|
-
: { PM_AGENT_EPISODE_LABEL: episode.label }),
|
|
121
|
-
...(episode.parent_id === undefined
|
|
122
|
-
? {}
|
|
123
|
-
: { PM_AGENT_EPISODE_PARENT_ID: episode.parent_id }),
|
|
124
|
-
}),
|
|
125
|
-
...(provenance.role === undefined
|
|
126
|
-
? {}
|
|
127
|
-
: { PM_AGENT_SESSION_ROLE: provenance.role }),
|
|
128
|
-
...(provenance.topic === undefined
|
|
129
|
-
? {}
|
|
130
|
-
: { PM_AGENT_SESSION_TOPIC: provenance.topic }),
|
|
131
|
-
};
|
|
132
|
-
}
|
|
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]="27a9b88e-ee47-55c8-b511-07ce9754346c")}catch(e2){}})();import{AsyncLocalStorage}from"node:async_hooks";const agentSessionContextStorage=new AsyncLocalStorage;const EPISODE_ID_PATTERN=/^[A-Za-z0-9](?:[A-Za-z0-9._:-]{0,127})$/u;function boundedText(value,limit){const trimmed=typeof value==="string"?value.trim():"";return trimmed.length>0?trimmed.slice(0,limit):void 0}function boundAgentEpisodeIdentity(value,strict){if(value===void 0)return void 0;const record=typeof value==="object"&&value!==null?value:{};const id=boundedText(record.id,128);const parentId=boundedText(record.parent_id,128);if(id===void 0||!EPISODE_ID_PATTERN.test(id)||parentId!==void 0&&!EPISODE_ID_PATTERN.test(parentId)){if(strict){throw new Error("Agent episode ids must be 1-128 letters, digits, dots, underscores, colons, or hyphens.")}return void 0}const label=boundedText(record.label,256);return{id,...label===void 0?{}:{label},...parentId===void 0?{}:{parent_id:parentId}}}function normalizedProvenance(value){const result={};for(const[key,rawValue]of Object.entries(value??{}).slice(0,32)){const normalizedKey=key.trim().toLowerCase().slice(0,64);const normalizedValue=boundedText(rawValue,256);if(/^[a-z][a-z0-9_-]{0,63}$/u.test(normalizedKey)&&normalizedValue!==void 0){result[normalizedKey]=normalizedValue}}return result}function resolveAgentSessionContext(explicit,env,fallbackEpisode){const ambient=agentSessionContextStorage.getStore();const environmentProvenance=normalizedProvenance({role:env.PM_AGENT_SESSION_ROLE,topic:env.PM_AGENT_SESSION_TOPIC});const environmentEpisode=boundAgentEpisodeIdentity(env.PM_AGENT_EPISODE_ID===void 0?void 0:{id:env.PM_AGENT_EPISODE_ID,label:env.PM_AGENT_EPISODE_LABEL,parent_id:env.PM_AGENT_EPISODE_PARENT_ID},false);const provenance={...normalizedProvenance(ambient?.provenance),...environmentProvenance,...normalizedProvenance(explicit?.provenance)};const episode=boundAgentEpisodeIdentity(explicit?.episode,false)??boundAgentEpisodeIdentity(fallbackEpisode,false)??environmentEpisode??boundAgentEpisodeIdentity(ambient?.episode,false);return Object.keys(provenance).length===0&&episode===void 0?void 0:{...Object.keys(provenance).length===0?{}:{provenance},...episode===void 0?{}:{episode}}}function resolveAgentSessionContextFromSignals(signals,env){return resolveAgentSessionContext(signals.session_context,env,signals.client_info?.episode)??{}}function runWithAgentSessionContext(context,callback){const ambient=agentSessionContextStorage.getStore();const episode=boundAgentEpisodeIdentity(context.episode,true);const parentEpisode=boundAgentEpisodeIdentity(ambient?.episode,false);const nestedEpisode=episode!==void 0&&episode.parent_id===void 0&&parentEpisode!==void 0?{...episode,parent_id:parentEpisode.id}:episode;const provenance={...normalizedProvenance(ambient?.provenance),...normalizedProvenance(context.provenance)};return agentSessionContextStorage.run({...Object.keys(provenance).length===0?{}:{provenance},...nestedEpisode===void 0?parentEpisode===void 0?{}:{episode:parentEpisode}:{episode:nestedEpisode}},callback)}function agentSessionEnvironment(context){const provenance=normalizedProvenance(context.provenance);const episode=boundAgentEpisodeIdentity(context.episode,true);return{...episode===void 0?{}:{PM_AGENT_EPISODE_ID:episode.id,...episode.label===void 0?{}:{PM_AGENT_EPISODE_LABEL:episode.label},...episode.parent_id===void 0?{}:{PM_AGENT_EPISODE_PARENT_ID:episode.parent_id}},...provenance.role===void 0?{}:{PM_AGENT_SESSION_ROLE:provenance.role},...provenance.topic===void 0?{}:{PM_AGENT_SESSION_TOPIC:provenance.topic}}}export{agentSessionEnvironment,boundAgentEpisodeIdentity,resolveAgentSessionContext,resolveAgentSessionContextFromSignals,runWithAgentSessionContext};
|
|
133
2
|
//# sourceMappingURL=agent-session-context.js.map
|
|
134
|
-
//# debugId=16109ee9-e684-5d25-a5f4-30a6c4f62bd5
|