@unbrained/pm-cli 2026.9.7 → 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 +211 -181
- 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/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,187 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
* @module sdk/read-output-rows
|
|
3
|
-
*
|
|
4
|
-
* Resolves and transforms the row collections declared by universal read
|
|
5
|
-
* envelopes, including dot-delimited nested paths used by graph projections.
|
|
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]="810d42b5-98f4-57a7-bdd9-2dfa1b2b1c03")}catch(e){}}();
|
|
9
|
-
const BUDGET_METADATA_ROOT_KEYS = new Set([
|
|
10
|
-
"applied_bound",
|
|
11
|
-
"completeness",
|
|
12
|
-
"budget_retention_policy",
|
|
13
|
-
"continuation_contract",
|
|
14
|
-
"continuation_kind",
|
|
15
|
-
"continuation_path",
|
|
16
|
-
"filters",
|
|
17
|
-
"omission_receipt",
|
|
18
|
-
"output_budget_truncation",
|
|
19
|
-
"projection",
|
|
20
|
-
"read_output",
|
|
21
|
-
"read_session",
|
|
22
|
-
"row_contract",
|
|
23
|
-
"sorting",
|
|
24
|
-
]);
|
|
25
|
-
function isRecord(value) {
|
|
26
|
-
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
27
|
-
}
|
|
28
|
-
/** Read one dot-delimited path without treating missing segments as rows. */
|
|
29
|
-
function valueAtPath(result, rowPath) {
|
|
30
|
-
let value = result;
|
|
31
|
-
for (const segment of rowPath.split(".")) {
|
|
32
|
-
if (Array.isArray(value)) {
|
|
33
|
-
if (!/^\d+$/u.test(segment))
|
|
34
|
-
return undefined;
|
|
35
|
-
value = value[Number(segment)];
|
|
36
|
-
}
|
|
37
|
-
else {
|
|
38
|
-
if (!isRecord(value))
|
|
39
|
-
return undefined;
|
|
40
|
-
value = value[segment];
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
return value;
|
|
44
|
-
}
|
|
45
|
-
/** Clone the owners along one row path and replace only its terminal value. */
|
|
46
|
-
function replaceValueAtPath(result, rowPath, replacement) {
|
|
47
|
-
const segments = rowPath.split(".");
|
|
48
|
-
const replace = (value, offset) => {
|
|
49
|
-
if (offset === segments.length)
|
|
50
|
-
return replacement;
|
|
51
|
-
const segment = segments[offset];
|
|
52
|
-
if (Array.isArray(value)) {
|
|
53
|
-
const index = Number(segment);
|
|
54
|
-
const cloned = [...value];
|
|
55
|
-
cloned[index] = replace(value[index], offset + 1);
|
|
56
|
-
return cloned;
|
|
57
|
-
}
|
|
58
|
-
const record = value;
|
|
59
|
-
return {
|
|
60
|
-
...record,
|
|
61
|
-
[segment]: replace(record[segment], offset + 1),
|
|
62
|
-
};
|
|
63
|
-
};
|
|
64
|
-
return replace(result, 0);
|
|
65
|
-
}
|
|
66
|
-
/** Replace one declared row collection with a suffix beginning at an offset. */
|
|
67
|
-
export function sliceReadOutputRowCollection(result, rowPath, offset) {
|
|
68
|
-
const collection = readOutputContinuationRowCollections(result).find((entry) => entry.path === rowPath);
|
|
69
|
-
if (!collection)
|
|
70
|
-
return result;
|
|
71
|
-
const replacement = Array.isArray(collection.value)
|
|
72
|
-
? collection.value.slice(offset)
|
|
73
|
-
: Object.fromEntries(Object.entries(collection.value).slice(offset));
|
|
74
|
-
return replaceValueAtPath(result, rowPath, replacement);
|
|
75
|
-
}
|
|
76
|
-
/** Resolve declared row paths, falling back to top-level array properties. */
|
|
77
|
-
export function readOutputRowPaths(result) {
|
|
78
|
-
const contract = result.row_contract;
|
|
79
|
-
if (isRecord(contract) && Array.isArray(contract.row_keys)) {
|
|
80
|
-
return contract.row_keys.filter((entry) => typeof entry === "string" && entry.trim().length > 0);
|
|
81
|
-
}
|
|
82
|
-
return Object.entries(result)
|
|
83
|
-
.filter(([, value]) => Array.isArray(value))
|
|
84
|
-
.map(([key]) => key);
|
|
85
|
-
}
|
|
86
|
-
/** Resolve collections that may be resumed independently from primary result rows. */
|
|
87
|
-
export function readOutputContinuationRowPaths(result) {
|
|
88
|
-
const contract = result.row_contract;
|
|
89
|
-
if (isRecord(contract) && Array.isArray(contract.continuation_row_keys)) {
|
|
90
|
-
return contract.continuation_row_keys.filter((entry) => typeof entry === "string" && entry.trim().length > 0);
|
|
91
|
-
}
|
|
92
|
-
return readOutputRowPaths(result);
|
|
93
|
-
}
|
|
94
|
-
/** Resolve every declared row path that currently contains iterable rows. */
|
|
95
|
-
export function readOutputRowCollections(result) {
|
|
96
|
-
return readOutputRowPaths(result).flatMap((rowPath) => {
|
|
97
|
-
const value = valueAtPath(result, rowPath);
|
|
98
|
-
return Array.isArray(value) || isRecord(value)
|
|
99
|
-
? [{ path: rowPath, value }]
|
|
100
|
-
: [];
|
|
101
|
-
});
|
|
102
|
-
}
|
|
103
|
-
/** Resolve every declared continuation path that currently contains iterable rows. */
|
|
104
|
-
export function readOutputContinuationRowCollections(result) {
|
|
105
|
-
return readOutputContinuationRowPaths(result).flatMap((rowPath) => {
|
|
106
|
-
const value = valueAtPath(result, rowPath);
|
|
107
|
-
return Array.isArray(value) || isRecord(value)
|
|
108
|
-
? [{ path: rowPath, value }]
|
|
109
|
-
: [];
|
|
110
|
-
});
|
|
111
|
-
}
|
|
112
|
-
/**
|
|
113
|
-
* Discover every collection the token-budget degradation ladder may reduce.
|
|
114
|
-
*
|
|
115
|
-
* Ordinary field and amount projections stay bound to declared row paths (or
|
|
116
|
-
* top-level array fallbacks), because a nested tag list is not an independent
|
|
117
|
-
* result row. Budget degradation has a different obligation: it must exhaust
|
|
118
|
-
* nested content collections before omitting the whole useful result. This
|
|
119
|
-
* census therefore adds nested arrays while excluding receipt/envelope metadata
|
|
120
|
-
* whose mutation would make the disclosure itself incomplete.
|
|
121
|
-
*/
|
|
122
|
-
export function readOutputBudgetCollections(result) {
|
|
123
|
-
const collections = readOutputRowCollections(result);
|
|
124
|
-
const declaredPaths = new Set(collections.map((collection) => collection.path));
|
|
125
|
-
const visit = (value, path) => {
|
|
126
|
-
if (Array.isArray(value)) {
|
|
127
|
-
if (!declaredPaths.has(path)) {
|
|
128
|
-
collections.push({ path, value });
|
|
129
|
-
}
|
|
130
|
-
value.forEach((entry, index) => visit(entry, `${path}.${index}`));
|
|
131
|
-
return;
|
|
132
|
-
}
|
|
133
|
-
if (!isRecord(value))
|
|
134
|
-
return;
|
|
135
|
-
for (const [key, entry] of Object.entries(value)) {
|
|
136
|
-
if (path.length === 0 && BUDGET_METADATA_ROOT_KEYS.has(key))
|
|
137
|
-
continue;
|
|
138
|
-
visit(entry, path.length === 0 ? key : `${path}.${key}`);
|
|
139
|
-
}
|
|
140
|
-
};
|
|
141
|
-
visit(result, "");
|
|
142
|
-
return collections;
|
|
143
|
-
}
|
|
144
|
-
/** Count array entries and object-map values across declared row collections. */
|
|
145
|
-
export function countReadOutputRows(result) {
|
|
146
|
-
return readOutputRowCollections(result).reduce((total, collection) => total +
|
|
147
|
-
(Array.isArray(collection.value)
|
|
148
|
-
? collection.value.length
|
|
149
|
-
: Object.keys(collection.value).length), 0);
|
|
150
|
-
}
|
|
151
|
-
/**
|
|
152
|
-
* Transform every declared row while preserving collection keys and cloning
|
|
153
|
-
* only the owner objects along paths that changed.
|
|
154
|
-
*/
|
|
155
|
-
export function mapReadOutputRows(result, transform) {
|
|
156
|
-
let projected = result;
|
|
157
|
-
for (const collection of readOutputRowCollections(projected)) {
|
|
158
|
-
const replacement = Array.isArray(collection.value)
|
|
159
|
-
? collection.value.map((row, index) => transform(row, collection.path, index))
|
|
160
|
-
: Object.fromEntries(Object.entries(collection.value).map(([key, row], index) => [
|
|
161
|
-
key,
|
|
162
|
-
transform(row, collection.path, index),
|
|
163
|
-
]));
|
|
164
|
-
projected = replaceValueAtPath(projected, collection.path, replacement);
|
|
165
|
-
}
|
|
166
|
-
return projected;
|
|
167
|
-
}
|
|
168
|
-
/** Bound every declared row collection independently and report truncation. */
|
|
169
|
-
export function boundReadOutputRows(result, amount) {
|
|
170
|
-
let projected = result;
|
|
171
|
-
let truncated = false;
|
|
172
|
-
for (const collection of readOutputRowCollections(projected)) {
|
|
173
|
-
const entries = Array.isArray(collection.value)
|
|
174
|
-
? collection.value
|
|
175
|
-
: Object.entries(collection.value);
|
|
176
|
-
if (entries.length <= amount)
|
|
177
|
-
continue;
|
|
178
|
-
truncated = true;
|
|
179
|
-
const replacement = Array.isArray(collection.value)
|
|
180
|
-
? entries.slice(0, amount)
|
|
181
|
-
: Object.fromEntries(entries.slice(0, amount));
|
|
182
|
-
projected = replaceValueAtPath(projected, collection.path, replacement);
|
|
183
|
-
}
|
|
184
|
-
return { result: projected, truncated };
|
|
185
|
-
}
|
|
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]="85bc6b10-700a-5d06-970f-d544833dd059")}catch(e2){}})();const BUDGET_METADATA_ROOT_KEYS=new Set(["applied_bound","completeness","budget_retention_policy","continuation_contract","continuation_kind","continuation_path","filters","omission_receipt","output_budget_truncation","projection","read_output","read_session","row_contract","sorting"]);function isRecord(value){return value!==null&&typeof value==="object"&&!Array.isArray(value)}function valueAtPath(result,rowPath){let value=result;for(const segment of rowPath.split(".")){if(Array.isArray(value)){if(!/^\d+$/u.test(segment))return void 0;value=value[Number(segment)]}else{if(!isRecord(value))return void 0;value=value[segment]}}return value}function replaceValueAtPath(result,rowPath,replacement){const segments=rowPath.split(".");const replace=(value,offset)=>{if(offset===segments.length)return replacement;const segment=segments[offset];if(Array.isArray(value)){const index=Number(segment);const cloned=[...value];cloned[index]=replace(value[index],offset+1);return cloned}const record=value;return{...record,[segment]:replace(record[segment],offset+1)}};return replace(result,0)}function sliceReadOutputRowCollection(result,rowPath,offset){const collection=readOutputContinuationRowCollections(result).find(entry=>entry.path===rowPath);if(!collection)return result;const replacement=Array.isArray(collection.value)?collection.value.slice(offset):Object.fromEntries(Object.entries(collection.value).slice(offset));return replaceValueAtPath(result,rowPath,replacement)}function readOutputRowPaths(result){const contract=result.row_contract;if(isRecord(contract)&&Array.isArray(contract.row_keys)){return contract.row_keys.filter(entry=>typeof entry==="string"&&entry.trim().length>0)}return Object.entries(result).filter(([,value])=>Array.isArray(value)).map(([key])=>key)}function readOutputContinuationRowPaths(result){const contract=result.row_contract;if(isRecord(contract)&&Array.isArray(contract.continuation_row_keys)){return contract.continuation_row_keys.filter(entry=>typeof entry==="string"&&entry.trim().length>0)}return readOutputRowPaths(result)}function readOutputRowCollections(result){return readOutputRowPaths(result).flatMap(rowPath=>{const value=valueAtPath(result,rowPath);return Array.isArray(value)||isRecord(value)?[{path:rowPath,value}]:[]})}function readOutputContinuationRowCollections(result){return readOutputContinuationRowPaths(result).flatMap(rowPath=>{const value=valueAtPath(result,rowPath);return Array.isArray(value)||isRecord(value)?[{path:rowPath,value}]:[]})}function readOutputBudgetCollections(result){const collections=readOutputRowCollections(result);const declaredPaths=new Set(collections.map(collection=>collection.path));const visit=(value,path)=>{if(Array.isArray(value)){if(!declaredPaths.has(path)){collections.push({path,value})}value.forEach((entry,index)=>visit(entry,`${path}.${index}`));return}if(!isRecord(value))return;for(const[key,entry]of Object.entries(value)){if(path.length===0&&BUDGET_METADATA_ROOT_KEYS.has(key))continue;visit(entry,path.length===0?key:`${path}.${key}`)}};visit(result,"");return collections}function countReadOutputRows(result){return readOutputRowCollections(result).reduce((total,collection)=>total+(Array.isArray(collection.value)?collection.value.length:Object.keys(collection.value).length),0)}function mapReadOutputRows(result,transform){let projected=result;for(const collection of readOutputRowCollections(projected)){const replacement=Array.isArray(collection.value)?collection.value.map((row,index)=>transform(row,collection.path,index)):Object.fromEntries(Object.entries(collection.value).map(([key,row],index)=>[key,transform(row,collection.path,index)]));projected=replaceValueAtPath(projected,collection.path,replacement)}return projected}function boundReadOutputRows(result,amount){let projected=result;let truncated=false;for(const collection of readOutputRowCollections(projected)){const entries=Array.isArray(collection.value)?collection.value:Object.entries(collection.value);if(entries.length<=amount)continue;truncated=true;const replacement=Array.isArray(collection.value)?entries.slice(0,amount):Object.fromEntries(entries.slice(0,amount));projected=replaceValueAtPath(projected,collection.path,replacement)}return{result:projected,truncated}}export{boundReadOutputRows,countReadOutputRows,mapReadOutputRows,readOutputBudgetCollections,readOutputContinuationRowCollections,readOutputContinuationRowPaths,readOutputRowCollections,readOutputRowPaths,sliceReadOutputRowCollection};
|
|
186
2
|
//# sourceMappingURL=read-output-rows.js.map
|
|
187
|
-
//# debugId=810d42b5-98f4-57a7-bdd9-2dfa1b2b1c03
|
|
@@ -1,209 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
* @module sdk/read-output-session
|
|
3
|
-
*
|
|
4
|
-
* Implements a stateless, caller-carried session ledger for cross-call output
|
|
5
|
-
* budgets and resolvable references to item facts served by earlier reads.
|
|
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]="bb73f77d-d372-5d68-8ef2-90b208129f21")}catch(e){}}();
|
|
9
|
-
import { EXIT_CODE } from "../core/shared/constants.js";
|
|
10
|
-
import { PmCliError } from "../core/shared/errors.js";
|
|
11
|
-
import { mapReadOutputRows, readOutputRowCollections, } from "./read-output-rows.js";
|
|
12
|
-
/** Smallest session ceiling that can carry a useful result and both receipts. */
|
|
13
|
-
export const PM_READ_OUTPUT_SESSION_MIN_TOKENS = 256;
|
|
14
|
-
/** Maximum caller-carried served-item identities accepted in one session state. */
|
|
15
|
-
export const PM_READ_OUTPUT_SESSION_MAX_SEEN_ITEM_IDS = 10_000;
|
|
16
|
-
const SESSION_ID_PATTERN = /^[A-Za-z0-9][A-Za-z0-9._:-]{0,63}$/u;
|
|
17
|
-
const ITEM_ID_PATTERN = /^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$/u;
|
|
18
|
-
const SESSION_KEYS = new Set([
|
|
19
|
-
"version",
|
|
20
|
-
"id",
|
|
21
|
-
"token_budget",
|
|
22
|
-
"spent_tokens",
|
|
23
|
-
"seen_item_ids",
|
|
24
|
-
]);
|
|
25
|
-
const SESSION_FIELD_VALIDATIONS = [
|
|
26
|
-
{
|
|
27
|
-
valid: (state) => state.version === 1,
|
|
28
|
-
reason: "version must equal 1.",
|
|
29
|
-
},
|
|
30
|
-
{
|
|
31
|
-
valid: (state) => typeof state.id === "string" && SESSION_ID_PATTERN.test(state.id),
|
|
32
|
-
reason: "id must be 1-64 portable identifier characters.",
|
|
33
|
-
},
|
|
34
|
-
{
|
|
35
|
-
valid: (state) => Number.isSafeInteger(state.token_budget) &&
|
|
36
|
-
state.token_budget >= PM_READ_OUTPUT_SESSION_MIN_TOKENS,
|
|
37
|
-
reason: `token_budget must be a safe integer of at least ${PM_READ_OUTPUT_SESSION_MIN_TOKENS}.`,
|
|
38
|
-
},
|
|
39
|
-
{
|
|
40
|
-
valid: (state) => Number.isSafeInteger(state.spent_tokens) &&
|
|
41
|
-
state.spent_tokens >= 0 &&
|
|
42
|
-
state.spent_tokens <= state.token_budget,
|
|
43
|
-
reason: "spent_tokens must be a non-negative safe integer no larger than token_budget.",
|
|
44
|
-
},
|
|
45
|
-
{
|
|
46
|
-
valid: (state) => Array.isArray(state.seen_item_ids) &&
|
|
47
|
-
state.seen_item_ids.length <=
|
|
48
|
-
PM_READ_OUTPUT_SESSION_MAX_SEEN_ITEM_IDS &&
|
|
49
|
-
state.seen_item_ids.every((id) => typeof id === "string" && ITEM_ID_PATTERN.test(id)),
|
|
50
|
-
reason: `seen_item_ids must contain at most ${PM_READ_OUTPUT_SESSION_MAX_SEEN_ITEM_IDS} portable item identifiers.`,
|
|
51
|
-
},
|
|
52
|
-
];
|
|
53
|
-
function isRecord(value) {
|
|
54
|
-
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
55
|
-
}
|
|
56
|
-
/** Throw one stable usage refusal for a malformed caller-carried session. */
|
|
57
|
-
function invalidSession(reason) {
|
|
58
|
-
throw new PmCliError(`--output-session ${reason}`, EXIT_CODE.USAGE, {
|
|
59
|
-
code: "invalid_read_output_session",
|
|
60
|
-
field: "outputSession",
|
|
61
|
-
});
|
|
62
|
-
}
|
|
63
|
-
/** Parse and strictly validate a JSON string or typed session-state object. */
|
|
64
|
-
export function parseReadOutputSession(value) {
|
|
65
|
-
if (value === undefined)
|
|
66
|
-
return undefined;
|
|
67
|
-
let parsed = value;
|
|
68
|
-
if (typeof value === "string") {
|
|
69
|
-
try {
|
|
70
|
-
parsed = JSON.parse(value);
|
|
71
|
-
}
|
|
72
|
-
catch {
|
|
73
|
-
invalidSession("must be a valid JSON object.");
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
if (!isRecord(parsed))
|
|
77
|
-
invalidSession("must be a JSON object.");
|
|
78
|
-
const unknownKeys = Object.keys(parsed).filter((key) => !SESSION_KEYS.has(key));
|
|
79
|
-
if (unknownKeys.length > 0) {
|
|
80
|
-
invalidSession(`contains unknown field "${unknownKeys.sort()[0]}".`);
|
|
81
|
-
}
|
|
82
|
-
const invalidField = SESSION_FIELD_VALIDATIONS.find((validation) => !validation.valid(parsed));
|
|
83
|
-
if (invalidField !== undefined)
|
|
84
|
-
invalidSession(invalidField.reason);
|
|
85
|
-
const seenItemIds = [...new Set(parsed.seen_item_ids)].sort();
|
|
86
|
-
return {
|
|
87
|
-
version: 1,
|
|
88
|
-
id: parsed.id,
|
|
89
|
-
token_budget: parsed.token_budget,
|
|
90
|
-
spent_tokens: parsed.spent_tokens,
|
|
91
|
-
seen_item_ids: seenItemIds,
|
|
92
|
-
};
|
|
93
|
-
}
|
|
94
|
-
/** Resolve an item identity from built-in list rows and nested search hits. */
|
|
95
|
-
function itemIdFromRow(row) {
|
|
96
|
-
if (!isRecord(row))
|
|
97
|
-
return undefined;
|
|
98
|
-
if (typeof row.id === "string")
|
|
99
|
-
return row.id;
|
|
100
|
-
if (typeof row.item_id === "string")
|
|
101
|
-
return row.item_id;
|
|
102
|
-
return isRecord(row.item) && typeof row.item.id === "string"
|
|
103
|
-
? row.item.id
|
|
104
|
-
: undefined;
|
|
105
|
-
}
|
|
106
|
-
/** Summarize delivered item facts and compact references across row paths. */
|
|
107
|
-
function summarizeReadOutputSessionRows(result) {
|
|
108
|
-
const deliveredIds = new Set();
|
|
109
|
-
let suppressedRepeatCount = 0;
|
|
110
|
-
for (const collection of readOutputRowCollections(result)) {
|
|
111
|
-
const rows = Array.isArray(collection.value)
|
|
112
|
-
? collection.value
|
|
113
|
-
: Object.values(collection.value);
|
|
114
|
-
for (const row of rows) {
|
|
115
|
-
if (!isRecord(row))
|
|
116
|
-
continue;
|
|
117
|
-
if (typeof row.context_ref === "string") {
|
|
118
|
-
suppressedRepeatCount += 1;
|
|
119
|
-
continue;
|
|
120
|
-
}
|
|
121
|
-
const itemId = itemIdFromRow(row);
|
|
122
|
-
// Activity can contain workspace pseudo-identities. Preserve those rows
|
|
123
|
-
// in the response, but only carry ids the next invocation can consume.
|
|
124
|
-
if (itemId !== undefined && ITEM_ID_PATTERN.test(itemId))
|
|
125
|
-
deliveredIds.add(itemId);
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
return { deliveredIds, suppressedRepeatCount };
|
|
129
|
-
}
|
|
130
|
-
/** Replace previously served item rows with compact, resolvable references. */
|
|
131
|
-
export function applyReadOutputSessionReferences(result, state) {
|
|
132
|
-
const seen = new Set(state.seen_item_ids);
|
|
133
|
-
return mapReadOutputRows(result, (row) => {
|
|
134
|
-
const itemId = itemIdFromRow(row);
|
|
135
|
-
return itemId !== undefined && seen.has(itemId)
|
|
136
|
-
? {
|
|
137
|
-
id: itemId,
|
|
138
|
-
context_ref: `session:${state.id}:${itemId}`,
|
|
139
|
-
}
|
|
140
|
-
: row;
|
|
141
|
-
});
|
|
142
|
-
}
|
|
143
|
-
/** Attach a fixed-point session receipt and return the exact charged tokens. */
|
|
144
|
-
export function attachReadOutputSessionReceipt(result, state) {
|
|
145
|
-
const { deliveredIds, suppressedRepeatCount } = summarizeReadOutputSessionRows(result);
|
|
146
|
-
const alreadySeen = new Set(state.seen_item_ids);
|
|
147
|
-
const newlySeen = [...deliveredIds]
|
|
148
|
-
.filter((id) => !alreadySeen.has(id))
|
|
149
|
-
.sort();
|
|
150
|
-
const retainedNewIds = newlySeen.slice(0, PM_READ_OUTPUT_SESSION_MAX_SEEN_ITEM_IDS - state.seen_item_ids.length);
|
|
151
|
-
const nextSeen = [...state.seen_item_ids, ...retainedNewIds].sort();
|
|
152
|
-
const seenItemOverflowCount = newlySeen.length - retainedNewIds.length;
|
|
153
|
-
const receipt = {
|
|
154
|
-
contract_version: 1,
|
|
155
|
-
id: state.id,
|
|
156
|
-
measurement_scope: "complete_read_envelope",
|
|
157
|
-
estimator: "ceil(utf8_bytes / 4)",
|
|
158
|
-
token_budget: state.token_budget,
|
|
159
|
-
spent_before_tokens: state.spent_tokens,
|
|
160
|
-
spent_this_call_tokens: 0,
|
|
161
|
-
charged_this_call_tokens: 0,
|
|
162
|
-
spent_total_tokens: state.spent_tokens,
|
|
163
|
-
remaining_tokens: state.token_budget - state.spent_tokens,
|
|
164
|
-
exhausted: false,
|
|
165
|
-
seen_before_count: state.seen_item_ids.length,
|
|
166
|
-
new_item_count: deliveredIds.size,
|
|
167
|
-
...(seenItemOverflowCount === 0
|
|
168
|
-
? {}
|
|
169
|
-
: { seen_item_overflow_count: seenItemOverflowCount }),
|
|
170
|
-
suppressed_repeat_count: suppressedRepeatCount,
|
|
171
|
-
reference_format: "session:<session-id>:<item-id>",
|
|
172
|
-
restore_reference_with: "pm get <item-id> --brief",
|
|
173
|
-
next_state: {
|
|
174
|
-
version: 1,
|
|
175
|
-
id: state.id,
|
|
176
|
-
token_budget: state.token_budget,
|
|
177
|
-
spent_tokens: state.spent_tokens,
|
|
178
|
-
seen_item_ids: nextSeen,
|
|
179
|
-
},
|
|
180
|
-
};
|
|
181
|
-
const withReceipt = { ...result, read_session: receipt };
|
|
182
|
-
const applyEstimate = (estimate) => {
|
|
183
|
-
receipt.spent_this_call_tokens = estimate;
|
|
184
|
-
receipt.charged_this_call_tokens = Math.min(state.token_budget - state.spent_tokens, estimate);
|
|
185
|
-
receipt.spent_total_tokens = Math.min(state.token_budget, state.spent_tokens + receipt.charged_this_call_tokens);
|
|
186
|
-
receipt.remaining_tokens = Math.max(0, state.token_budget - receipt.spent_total_tokens);
|
|
187
|
-
receipt.exhausted =
|
|
188
|
-
receipt.remaining_tokens < PM_READ_OUTPUT_SESSION_MIN_TOKENS;
|
|
189
|
-
receipt.next_state.spent_tokens = receipt.spent_total_tokens;
|
|
190
|
-
};
|
|
191
|
-
let estimate = 0;
|
|
192
|
-
let highestMeasuredEstimate = 0;
|
|
193
|
-
for (let iteration = 0; iteration < 8; iteration += 1) {
|
|
194
|
-
applyEstimate(estimate);
|
|
195
|
-
const measured = Math.ceil(Buffer.byteLength(JSON.stringify(withReceipt), "utf8") / 4);
|
|
196
|
-
if (measured === estimate)
|
|
197
|
-
return withReceipt;
|
|
198
|
-
highestMeasuredEstimate = Math.max(highestMeasuredEstimate, measured);
|
|
199
|
-
estimate = measured;
|
|
200
|
-
}
|
|
201
|
-
applyEstimate(highestMeasuredEstimate);
|
|
202
|
-
return withReceipt;
|
|
203
|
-
}
|
|
204
|
-
/** Return the unspent group budget available to the current invocation. */
|
|
205
|
-
export function readOutputSessionRemainingTokens(state) {
|
|
206
|
-
return Math.max(0, state.token_budget - state.spent_tokens);
|
|
207
|
-
}
|
|
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]="a615d8e9-3fcd-50a8-8a54-8040c4458c4a")}catch(e2){}})();import{EXIT_CODE}from"../core/shared/constants.js";import{PmCliError}from"../core/shared/errors.js";import{mapReadOutputRows,readOutputRowCollections}from"./read-output-rows.js";const PM_READ_OUTPUT_SESSION_MIN_TOKENS=256;const PM_READ_OUTPUT_SESSION_MAX_SEEN_ITEM_IDS=1e4;const SESSION_ID_PATTERN=/^[A-Za-z0-9][A-Za-z0-9._:-]{0,63}$/u;const ITEM_ID_PATTERN=/^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$/u;const SESSION_KEYS=new Set(["version","id","token_budget","spent_tokens","seen_item_ids"]);const SESSION_FIELD_VALIDATIONS=[{valid:state=>state.version===1,reason:"version must equal 1."},{valid:state=>typeof state.id==="string"&&SESSION_ID_PATTERN.test(state.id),reason:"id must be 1-64 portable identifier characters."},{valid:state=>Number.isSafeInteger(state.token_budget)&&state.token_budget>=PM_READ_OUTPUT_SESSION_MIN_TOKENS,reason:`token_budget must be a safe integer of at least ${PM_READ_OUTPUT_SESSION_MIN_TOKENS}.`},{valid:state=>Number.isSafeInteger(state.spent_tokens)&&state.spent_tokens>=0&&state.spent_tokens<=state.token_budget,reason:"spent_tokens must be a non-negative safe integer no larger than token_budget."},{valid:state=>Array.isArray(state.seen_item_ids)&&state.seen_item_ids.length<=PM_READ_OUTPUT_SESSION_MAX_SEEN_ITEM_IDS&&state.seen_item_ids.every(id=>typeof id==="string"&&ITEM_ID_PATTERN.test(id)),reason:`seen_item_ids must contain at most ${PM_READ_OUTPUT_SESSION_MAX_SEEN_ITEM_IDS} portable item identifiers.`}];function isRecord(value){return value!==null&&typeof value==="object"&&!Array.isArray(value)}function invalidSession(reason){throw new PmCliError(`--output-session ${reason}`,EXIT_CODE.USAGE,{code:"invalid_read_output_session",field:"outputSession"})}function parseReadOutputSession(value){if(value===void 0)return void 0;let parsed=value;if(typeof value==="string"){try{parsed=JSON.parse(value)}catch{invalidSession("must be a valid JSON object.")}}if(!isRecord(parsed))invalidSession("must be a JSON object.");const unknownKeys=Object.keys(parsed).filter(key=>!SESSION_KEYS.has(key));if(unknownKeys.length>0){invalidSession(`contains unknown field "${unknownKeys.sort()[0]}".`)}const invalidField=SESSION_FIELD_VALIDATIONS.find(validation=>!validation.valid(parsed));if(invalidField!==void 0)invalidSession(invalidField.reason);const seenItemIds=[...new Set(parsed.seen_item_ids)].sort();return{version:1,id:parsed.id,token_budget:parsed.token_budget,spent_tokens:parsed.spent_tokens,seen_item_ids:seenItemIds}}function itemIdFromRow(row){if(!isRecord(row))return void 0;if(typeof row.id==="string")return row.id;if(typeof row.item_id==="string")return row.item_id;return isRecord(row.item)&&typeof row.item.id==="string"?row.item.id:void 0}function summarizeReadOutputSessionRows(result){const deliveredIds=new Set;let suppressedRepeatCount=0;for(const collection of readOutputRowCollections(result)){const rows=Array.isArray(collection.value)?collection.value:Object.values(collection.value);for(const row of rows){if(!isRecord(row))continue;if(typeof row.context_ref==="string"){suppressedRepeatCount+=1;continue}const itemId=itemIdFromRow(row);if(itemId!==void 0&&ITEM_ID_PATTERN.test(itemId))deliveredIds.add(itemId)}}return{deliveredIds,suppressedRepeatCount}}function applyReadOutputSessionReferences(result,state){const seen=new Set(state.seen_item_ids);return mapReadOutputRows(result,row=>{const itemId=itemIdFromRow(row);return itemId!==void 0&&seen.has(itemId)?{id:itemId,context_ref:`session:${state.id}:${itemId}`}:row})}function attachReadOutputSessionReceipt(result,state){const{deliveredIds,suppressedRepeatCount}=summarizeReadOutputSessionRows(result);const alreadySeen=new Set(state.seen_item_ids);const newlySeen=[...deliveredIds].filter(id=>!alreadySeen.has(id)).sort();const retainedNewIds=newlySeen.slice(0,PM_READ_OUTPUT_SESSION_MAX_SEEN_ITEM_IDS-state.seen_item_ids.length);const nextSeen=[...state.seen_item_ids,...retainedNewIds].sort();const seenItemOverflowCount=newlySeen.length-retainedNewIds.length;const receipt={contract_version:1,id:state.id,measurement_scope:"complete_read_envelope",estimator:"ceil(utf8_bytes / 4)",token_budget:state.token_budget,spent_before_tokens:state.spent_tokens,spent_this_call_tokens:0,charged_this_call_tokens:0,spent_total_tokens:state.spent_tokens,remaining_tokens:state.token_budget-state.spent_tokens,exhausted:false,seen_before_count:state.seen_item_ids.length,new_item_count:deliveredIds.size,...seenItemOverflowCount===0?{}:{seen_item_overflow_count:seenItemOverflowCount},suppressed_repeat_count:suppressedRepeatCount,reference_format:"session:<session-id>:<item-id>",restore_reference_with:"pm get <item-id> --brief",next_state:{version:1,id:state.id,token_budget:state.token_budget,spent_tokens:state.spent_tokens,seen_item_ids:nextSeen}};const withReceipt={...result,read_session:receipt};const applyEstimate=estimate2=>{receipt.spent_this_call_tokens=estimate2;receipt.charged_this_call_tokens=Math.min(state.token_budget-state.spent_tokens,estimate2);receipt.spent_total_tokens=Math.min(state.token_budget,state.spent_tokens+receipt.charged_this_call_tokens);receipt.remaining_tokens=Math.max(0,state.token_budget-receipt.spent_total_tokens);receipt.exhausted=receipt.remaining_tokens<PM_READ_OUTPUT_SESSION_MIN_TOKENS;receipt.next_state.spent_tokens=receipt.spent_total_tokens};let estimate=0;let highestMeasuredEstimate=0;for(let iteration=0;iteration<8;iteration+=1){applyEstimate(estimate);const measured=Math.ceil(Buffer.byteLength(JSON.stringify(withReceipt),"utf8")/4);if(measured===estimate)return withReceipt;highestMeasuredEstimate=Math.max(highestMeasuredEstimate,measured);estimate=measured}applyEstimate(highestMeasuredEstimate);return withReceipt}function readOutputSessionRemainingTokens(state){return Math.max(0,state.token_budget-state.spent_tokens)}export{PM_READ_OUTPUT_SESSION_MAX_SEEN_ITEM_IDS,PM_READ_OUTPUT_SESSION_MIN_TOKENS,applyReadOutputSessionReferences,attachReadOutputSessionReceipt,parseReadOutputSession,readOutputSessionRemainingTokens};
|
|
208
2
|
//# sourceMappingURL=read-output-session.js.map
|
|
209
|
-
//# debugId=bb73f77d-d372-5d68-8ef2-90b208129f21
|