@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,136 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
* @module sdk/governance/assurance-presets
|
|
3
|
-
*
|
|
4
|
-
* Supplies readable assurance starter bundles and observation-derived proposals
|
|
5
|
-
* without introducing privileged evaluation semantics.
|
|
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]="05c29627-6763-5aee-8579-71e563a98780")}catch(e){}}();
|
|
9
|
-
import { evaluateMeasurement, putAssuranceDeclaration, putAssuranceDeclarationBundle, } from "./assurance.js";
|
|
10
|
-
/** Built-in project shapes that can acquire a quality contract in one command. */
|
|
11
|
-
export const ASSURANCE_PRESET_IDS = [
|
|
12
|
-
"software-delivery",
|
|
13
|
-
"research",
|
|
14
|
-
"agent-evaluation",
|
|
15
|
-
"operations",
|
|
16
|
-
];
|
|
17
|
-
function assertion(id, measurementId, ownerItemId, ceiling, enforcement) {
|
|
18
|
-
return {
|
|
19
|
-
id,
|
|
20
|
-
measurement_id: measurementId,
|
|
21
|
-
owner_item_id: ownerItemId,
|
|
22
|
-
scope: { kind: "active" },
|
|
23
|
-
ceiling,
|
|
24
|
-
lifetime: "hold",
|
|
25
|
-
enforcement,
|
|
26
|
-
negative_control: {
|
|
27
|
-
cases: [
|
|
28
|
-
{ observed: ceiling, expected: "pass" },
|
|
29
|
-
{ observed: ceiling + 1, expected: "fail" },
|
|
30
|
-
],
|
|
31
|
-
},
|
|
32
|
-
};
|
|
33
|
-
}
|
|
34
|
-
function evidencePreset(id, title, description, ownerItemId, links) {
|
|
35
|
-
const prefix = `preset-${id}`;
|
|
36
|
-
const measurements = links.map((link) => ({
|
|
37
|
-
id: `${prefix}-missing-${link}`,
|
|
38
|
-
description: `Active items missing ${link} evidence.`,
|
|
39
|
-
source: { kind: "links", link, state: "missing" },
|
|
40
|
-
}));
|
|
41
|
-
const assertions = measurements.map((measurement) => assertion(`${measurement.id}-zero`, measurement.id, ownerItemId, 0, "warn"));
|
|
42
|
-
return {
|
|
43
|
-
id,
|
|
44
|
-
title,
|
|
45
|
-
description,
|
|
46
|
-
declarations: {
|
|
47
|
-
measurements,
|
|
48
|
-
assertions,
|
|
49
|
-
gates: [
|
|
50
|
-
{
|
|
51
|
-
id: `${prefix}-readiness`,
|
|
52
|
-
description,
|
|
53
|
-
assertion_ids: assertions.map((entry) => entry.id),
|
|
54
|
-
triggers: ["ci", "scheduled"],
|
|
55
|
-
},
|
|
56
|
-
],
|
|
57
|
-
},
|
|
58
|
-
};
|
|
59
|
-
}
|
|
60
|
-
/** Materialize one built-in preset as ordinary declarations owned by a pm item. */
|
|
61
|
-
export function createAssurancePreset(id, ownerItemId) {
|
|
62
|
-
if (id === "software-delivery") {
|
|
63
|
-
return evidencePreset(id, "Software delivery", "Warn when active delivery work lacks executable tests or documentation.", ownerItemId, ["tests", "docs"]);
|
|
64
|
-
}
|
|
65
|
-
if (id === "research") {
|
|
66
|
-
return evidencePreset(id, "Research", "Warn when active research work lacks reproducibility files or documentation.", ownerItemId, ["files", "docs"]);
|
|
67
|
-
}
|
|
68
|
-
if (id === "agent-evaluation") {
|
|
69
|
-
return evidencePreset(id, "Agent evaluation", "Warn when active evaluation work lacks executable scenarios or recorded artifacts.", ownerItemId, ["tests", "files"]);
|
|
70
|
-
}
|
|
71
|
-
return evidencePreset(id, "Operations", "Warn when active operational work lacks runbook documentation or repair evidence.", ownerItemId, ["docs", "files"]);
|
|
72
|
-
}
|
|
73
|
-
/** Apply one preset atomically; a second identical application is idempotent. */
|
|
74
|
-
export function applyAssurancePreset(pmRoot, id, ownerItemId, options = {}) {
|
|
75
|
-
return putAssuranceDeclarationBundle(pmRoot, createAssurancePreset(id, ownerItemId).declarations, options);
|
|
76
|
-
}
|
|
77
|
-
/** Propose active-scope evidence ceilings from the record without persisting them. */
|
|
78
|
-
export async function deriveAssuranceProposals(context, ownerItemId) {
|
|
79
|
-
const terminalStatuses = new Set(context.terminal_statuses ?? ["closed", "canceled"]);
|
|
80
|
-
const activeContext = {
|
|
81
|
-
...context,
|
|
82
|
-
items: context.items.filter((item) => !terminalStatuses.has(item.status)),
|
|
83
|
-
};
|
|
84
|
-
const proposals = await Promise.all(["files", "tests", "docs"].map(async (link) => {
|
|
85
|
-
const measurement = {
|
|
86
|
-
id: `derived-active-missing-${link}`,
|
|
87
|
-
description: `Observed active items missing ${link} evidence.`,
|
|
88
|
-
source: { kind: "links", link, state: "missing" },
|
|
89
|
-
};
|
|
90
|
-
const measured = await evaluateMeasurement(measurement, activeContext);
|
|
91
|
-
const observed = measured.value;
|
|
92
|
-
const derivedAssertion = assertion(`${measurement.id}-ceiling`, measurement.id, ownerItemId, observed, "observe");
|
|
93
|
-
const id = `active-missing-${link}`;
|
|
94
|
-
return {
|
|
95
|
-
id,
|
|
96
|
-
population_size: activeContext.items.length,
|
|
97
|
-
scope: { kind: "active" },
|
|
98
|
-
observed,
|
|
99
|
-
declarations: {
|
|
100
|
-
measurements: [measurement],
|
|
101
|
-
assertions: [derivedAssertion],
|
|
102
|
-
gates: [
|
|
103
|
-
{
|
|
104
|
-
id: `derived-${id}`,
|
|
105
|
-
description: `Observe the accepted ${link} evidence baseline.`,
|
|
106
|
-
assertion_ids: [derivedAssertion.id],
|
|
107
|
-
triggers: ["ci", "scheduled"],
|
|
108
|
-
},
|
|
109
|
-
],
|
|
110
|
-
},
|
|
111
|
-
};
|
|
112
|
-
}));
|
|
113
|
-
return proposals;
|
|
114
|
-
}
|
|
115
|
-
/** Accept all derived proposals in one audited registry transaction. */
|
|
116
|
-
export function acceptAssuranceProposals(pmRoot, proposals, options = {}) {
|
|
117
|
-
return putAssuranceDeclarationBundle(pmRoot, {
|
|
118
|
-
measurements: proposals.flatMap((proposal) => proposal.declarations.measurements),
|
|
119
|
-
assertions: proposals.flatMap((proposal) => proposal.declarations.assertions),
|
|
120
|
-
gates: proposals.flatMap((proposal) => proposal.declarations.gates),
|
|
121
|
-
}, options);
|
|
122
|
-
}
|
|
123
|
-
/** Promote one assertion by exactly one enforcement level and audit the transition. */
|
|
124
|
-
export async function promoteAssuranceAssertion(pmRoot, definition, enforcement, options = {}) {
|
|
125
|
-
const expected = definition.enforcement === "observe" ? "warn" : "block";
|
|
126
|
-
if (definition.enforcement === "block" || enforcement !== expected) {
|
|
127
|
-
throw new TypeError(`assurance assertion ${definition.id} promotion must be ${definition.enforcement} -> ${expected}`);
|
|
128
|
-
}
|
|
129
|
-
return putAssuranceDeclaration(pmRoot, "assertion", { ...definition, enforcement }, {
|
|
130
|
-
...options,
|
|
131
|
-
message: options.message ??
|
|
132
|
-
`Promote assurance assertion ${definition.id} from ${definition.enforcement} to ${enforcement}`,
|
|
133
|
-
});
|
|
134
|
-
}
|
|
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]="7470da18-4b85-5090-8ede-7de708b1f4ff")}catch(e2){}})();import{evaluateMeasurement,putAssuranceDeclaration,putAssuranceDeclarationBundle}from"./assurance.js";const ASSURANCE_PRESET_IDS=["software-delivery","research","agent-evaluation","operations"];function assertion(id,measurementId,ownerItemId,ceiling,enforcement){return{id,measurement_id:measurementId,owner_item_id:ownerItemId,scope:{kind:"active"},ceiling,lifetime:"hold",enforcement,negative_control:{cases:[{observed:ceiling,expected:"pass"},{observed:ceiling+1,expected:"fail"}]}}}function evidencePreset(id,title,description,ownerItemId,links){const prefix=`preset-${id}`;const measurements=links.map(link=>({id:`${prefix}-missing-${link}`,description:`Active items missing ${link} evidence.`,source:{kind:"links",link,state:"missing"}}));const assertions=measurements.map(measurement=>assertion(`${measurement.id}-zero`,measurement.id,ownerItemId,0,"warn"));return{id,title,description,declarations:{measurements,assertions,gates:[{id:`${prefix}-readiness`,description,assertion_ids:assertions.map(entry=>entry.id),triggers:["ci","scheduled"]}]}}}function createAssurancePreset(id,ownerItemId){if(id==="software-delivery"){return evidencePreset(id,"Software delivery","Warn when active delivery work lacks executable tests or documentation.",ownerItemId,["tests","docs"])}if(id==="research"){return evidencePreset(id,"Research","Warn when active research work lacks reproducibility files or documentation.",ownerItemId,["files","docs"])}if(id==="agent-evaluation"){return evidencePreset(id,"Agent evaluation","Warn when active evaluation work lacks executable scenarios or recorded artifacts.",ownerItemId,["tests","files"])}return evidencePreset(id,"Operations","Warn when active operational work lacks runbook documentation or repair evidence.",ownerItemId,["docs","files"])}function applyAssurancePreset(pmRoot,id,ownerItemId,options={}){return putAssuranceDeclarationBundle(pmRoot,createAssurancePreset(id,ownerItemId).declarations,options)}async function deriveAssuranceProposals(context,ownerItemId){const terminalStatuses=new Set(context.terminal_statuses??["closed","canceled"]);const activeContext={...context,items:context.items.filter(item=>!terminalStatuses.has(item.status))};const proposals=await Promise.all(["files","tests","docs"].map(async link=>{const measurement={id:`derived-active-missing-${link}`,description:`Observed active items missing ${link} evidence.`,source:{kind:"links",link,state:"missing"}};const measured=await evaluateMeasurement(measurement,activeContext);const observed=measured.value;const derivedAssertion=assertion(`${measurement.id}-ceiling`,measurement.id,ownerItemId,observed,"observe");const id=`active-missing-${link}`;return{id,population_size:activeContext.items.length,scope:{kind:"active"},observed,declarations:{measurements:[measurement],assertions:[derivedAssertion],gates:[{id:`derived-${id}`,description:`Observe the accepted ${link} evidence baseline.`,assertion_ids:[derivedAssertion.id],triggers:["ci","scheduled"]}]}}}));return proposals}function acceptAssuranceProposals(pmRoot,proposals,options={}){return putAssuranceDeclarationBundle(pmRoot,{measurements:proposals.flatMap(proposal=>proposal.declarations.measurements),assertions:proposals.flatMap(proposal=>proposal.declarations.assertions),gates:proposals.flatMap(proposal=>proposal.declarations.gates)},options)}async function promoteAssuranceAssertion(pmRoot,definition,enforcement,options={}){const expected=definition.enforcement==="observe"?"warn":"block";if(definition.enforcement==="block"||enforcement!==expected){throw new TypeError(`assurance assertion ${definition.id} promotion must be ${definition.enforcement} -> ${expected}`)}return putAssuranceDeclaration(pmRoot,"assertion",{...definition,enforcement},{...options,message:options.message??`Promote assurance assertion ${definition.id} from ${definition.enforcement} to ${enforcement}`})}export{ASSURANCE_PRESET_IDS,acceptAssuranceProposals,applyAssurancePreset,createAssurancePreset,deriveAssuranceProposals,promoteAssuranceAssertion};
|
|
135
2
|
//# sourceMappingURL=assurance-presets.js.map
|
|
136
|
-
//# debugId=05c29627-6763-5aee-8579-71e563a98780
|
|
@@ -1,239 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
* @module sdk/assurance-runtime
|
|
3
|
-
*
|
|
4
|
-
* Binds assurance evaluation to a real pm workspace while leaving declaration
|
|
5
|
-
* and verdict semantics in the host-neutral assurance module.
|
|
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]="cdf52e5c-86cf-5540-bc08-bfc274a1fdf9")}catch(e){}}();
|
|
9
|
-
import { execFile } from "node:child_process";
|
|
10
|
-
import { promisify } from "node:util";
|
|
11
|
-
import { runGraph } from "../graph/run.js";
|
|
12
|
-
import { runHealth } from "./health.js";
|
|
13
|
-
import { runValidate } from "./validate.js";
|
|
14
|
-
import { runList } from "../query/list.js";
|
|
15
|
-
import { AssuranceSourceResolutionError } from "./assurance-mutation-error.js";
|
|
16
|
-
import { getActiveExtensionRegistrations, resolvePortableWorkspaceContext, } from "../../core/extensions/index.js";
|
|
17
|
-
import { resolveRegisteredAssuranceMeasurementProvider } from "../../core/extensions/runtime-registrations.js";
|
|
18
|
-
import { stableStringify } from "../../core/shared/serialization.js";
|
|
19
|
-
import { getHistoryPath, listAllItemMetadata, readHistoryEntries, readSettings, resolveItemTypeRegistry, resolveRuntimeStatusRegistry, } from "../runtime-primitives.js";
|
|
20
|
-
const execFileAsync = promisify(execFile);
|
|
21
|
-
const HISTORY_READ_CONCURRENCY = 16;
|
|
22
|
-
const DEFAULT_PROVIDER_TIMEOUT_MS = 30_000;
|
|
23
|
-
function assertProviderResult(provider, key, result) {
|
|
24
|
-
const keyDefinition = provider.keys[key];
|
|
25
|
-
const valueMatches = keyDefinition.value_type === "number"
|
|
26
|
-
? typeof result.value === "number" && Number.isFinite(result.value)
|
|
27
|
-
: Array.isArray(result.value) &&
|
|
28
|
-
result.value.every((entry) => typeof entry === "string");
|
|
29
|
-
if (!valueMatches) {
|
|
30
|
-
throw new TypeError(`assurance provider ${provider.id} key ${key} returned the wrong value type`);
|
|
31
|
-
}
|
|
32
|
-
if (!Number.isInteger(result.population_size) ||
|
|
33
|
-
result.population_size < 0 ||
|
|
34
|
-
!Number.isFinite(result.cost) ||
|
|
35
|
-
result.cost < 0) {
|
|
36
|
-
throw new TypeError(`assurance provider ${provider.id} returned an invalid population or cost`);
|
|
37
|
-
}
|
|
38
|
-
return result;
|
|
39
|
-
}
|
|
40
|
-
function validateProviderParameters(provider, source) {
|
|
41
|
-
const keyDefinition = provider.keys[source.key];
|
|
42
|
-
if (!keyDefinition) {
|
|
43
|
-
throw new TypeError(`assurance provider ${provider.id} does not declare key ${source.key}`);
|
|
44
|
-
}
|
|
45
|
-
const parameters = source.parameters ?? {};
|
|
46
|
-
const schema = keyDefinition.parameters ?? {};
|
|
47
|
-
for (const required of Object.entries(schema)
|
|
48
|
-
.filter(([, definition]) => definition.required === true)
|
|
49
|
-
.map(([name]) => name)) {
|
|
50
|
-
if (!Object.hasOwn(parameters, required)) {
|
|
51
|
-
throw new TypeError(`assurance provider ${provider.id} key ${source.key} requires parameter ${required}`);
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
for (const [name, value] of Object.entries(parameters)) {
|
|
55
|
-
const definition = schema[name];
|
|
56
|
-
if (!definition) {
|
|
57
|
-
throw new TypeError(`assurance provider ${provider.id} key ${source.key} does not declare parameter ${name}`);
|
|
58
|
-
}
|
|
59
|
-
if (value === null || typeof value !== definition.type) {
|
|
60
|
-
throw new TypeError(`assurance provider ${provider.id} parameter ${name} must be ${definition.type}`);
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
return { ...parameters };
|
|
64
|
-
}
|
|
65
|
-
async function runRegisteredProvider(provider, source, pmRoot, trigger) {
|
|
66
|
-
const parameters = validateProviderParameters(provider, source);
|
|
67
|
-
const providerPromise = Promise.resolve().then(() => provider.resolve({
|
|
68
|
-
provider: provider.id,
|
|
69
|
-
key: source.key,
|
|
70
|
-
parameters,
|
|
71
|
-
trigger,
|
|
72
|
-
pm_root: pmRoot,
|
|
73
|
-
...resolvePortableWorkspaceContext(pmRoot),
|
|
74
|
-
}));
|
|
75
|
-
providerPromise.catch(() => { });
|
|
76
|
-
let timeoutHandle;
|
|
77
|
-
try {
|
|
78
|
-
const result = await Promise.race([
|
|
79
|
-
providerPromise,
|
|
80
|
-
new Promise((_, reject) => {
|
|
81
|
-
timeoutHandle = setTimeout(() => reject(new TypeError(`assurance provider ${provider.id} timed out`)), provider.timeout_ms ?? DEFAULT_PROVIDER_TIMEOUT_MS);
|
|
82
|
-
timeoutHandle.unref?.();
|
|
83
|
-
}),
|
|
84
|
-
]);
|
|
85
|
-
return assertProviderResult(provider, source.key, result);
|
|
86
|
-
}
|
|
87
|
-
finally {
|
|
88
|
-
clearTimeout(timeoutHandle);
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
function valueAtPath(input, field, sourceKind, check) {
|
|
92
|
-
let current = input;
|
|
93
|
-
for (const segment of field.split(".")) {
|
|
94
|
-
if (typeof current !== "object" ||
|
|
95
|
-
current === null ||
|
|
96
|
-
Array.isArray(current)) {
|
|
97
|
-
throw new AssuranceSourceResolutionError(`assurance field ${field} is not present`, { source_kind: sourceKind, field, ...(check ? { check } : {}) });
|
|
98
|
-
}
|
|
99
|
-
current = current[segment];
|
|
100
|
-
}
|
|
101
|
-
if (typeof current === "number" && Number.isFinite(current))
|
|
102
|
-
return current;
|
|
103
|
-
if (Array.isArray(current) &&
|
|
104
|
-
current.every((entry) => typeof entry === "string")) {
|
|
105
|
-
return current;
|
|
106
|
-
}
|
|
107
|
-
throw new AssuranceSourceResolutionError(`assurance field ${field} must resolve to a finite number or string array`, { source_kind: sourceKind, field, ...(check ? { check } : {}) });
|
|
108
|
-
}
|
|
109
|
-
function checkValue(result, checkName, field, sourceKind) {
|
|
110
|
-
const check = result.checks.find((entry) => entry.name === checkName);
|
|
111
|
-
if (!check)
|
|
112
|
-
throw new AssuranceSourceResolutionError(`assurance check ${checkName} is not present`, { source_kind: sourceKind, field, check: checkName });
|
|
113
|
-
const value = field === "status" || field === "ok"
|
|
114
|
-
? check.ok
|
|
115
|
-
? 0
|
|
116
|
-
: 1
|
|
117
|
-
: valueAtPath(check.details, field, sourceKind, checkName);
|
|
118
|
-
return { value, population_size: 1, cost: result.checks.length };
|
|
119
|
-
}
|
|
120
|
-
async function resolveTreeId(pmRoot, explicit) {
|
|
121
|
-
if (explicit?.trim())
|
|
122
|
-
return explicit.trim();
|
|
123
|
-
try {
|
|
124
|
-
const { stdout } = await execFileAsync("git", ["rev-parse", "HEAD^{commit}"], {
|
|
125
|
-
cwd: pmRoot,
|
|
126
|
-
encoding: "utf8",
|
|
127
|
-
timeout: 5_000,
|
|
128
|
-
windowsHide: true,
|
|
129
|
-
});
|
|
130
|
-
return stdout.trim();
|
|
131
|
-
}
|
|
132
|
-
catch {
|
|
133
|
-
return "working-copy";
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
async function readWorkspaceHistory(pmRoot, items) {
|
|
137
|
-
const streams = new Array(items.length);
|
|
138
|
-
let nextIndex = 0;
|
|
139
|
-
const workers = Array.from({ length: Math.min(HISTORY_READ_CONCURRENCY, items.length) }, async () => {
|
|
140
|
-
while (nextIndex < items.length) {
|
|
141
|
-
const index = nextIndex;
|
|
142
|
-
nextIndex += 1;
|
|
143
|
-
const item = items[index];
|
|
144
|
-
const entries = await readHistoryEntries(getHistoryPath(pmRoot, item.id), item.id);
|
|
145
|
-
streams[index] = entries.map((entry) => ({
|
|
146
|
-
op: entry.op,
|
|
147
|
-
author: entry.author,
|
|
148
|
-
agent_harness: entry.agent_harness,
|
|
149
|
-
agent_model: entry.agent_model,
|
|
150
|
-
}));
|
|
151
|
-
}
|
|
152
|
-
});
|
|
153
|
-
await Promise.all(workers);
|
|
154
|
-
return streams.flat();
|
|
155
|
-
}
|
|
156
|
-
/**
|
|
157
|
-
* Build an assurance context from authoritative workspace data and public SDK
|
|
158
|
-
* operations. Graph, validate, and health selectors run through their existing
|
|
159
|
-
* SDK implementations, so presentation surfaces cannot acquire divergent rules.
|
|
160
|
-
*/
|
|
161
|
-
export async function createAssuranceWorkspaceContext(pmRoot, options = {}) {
|
|
162
|
-
const settings = await readSettings(pmRoot);
|
|
163
|
-
const typeRegistry = resolveItemTypeRegistry(settings);
|
|
164
|
-
const statusRegistry = resolveRuntimeStatusRegistry(settings.schema);
|
|
165
|
-
const metadata = options.strict_read === true
|
|
166
|
-
? (await runList(undefined, { status: "all", full: true, noTruncate: true, strictRead: true }, { path: pmRoot })).items
|
|
167
|
-
: await listAllItemMetadata(pmRoot, settings.item_format, typeRegistry.type_to_folder, undefined, settings.schema);
|
|
168
|
-
const items = metadata.map((item) => ({
|
|
169
|
-
...item,
|
|
170
|
-
id: item.id,
|
|
171
|
-
status: item.status,
|
|
172
|
-
type: item.type,
|
|
173
|
-
}));
|
|
174
|
-
const global = { path: pmRoot };
|
|
175
|
-
const activeRegistrations = getActiveExtensionRegistrations();
|
|
176
|
-
const registeredProviderCapabilities = Object.fromEntries((activeRegistrations?.assurance_providers ?? []).map((registration) => [
|
|
177
|
-
registration.definition.id,
|
|
178
|
-
{
|
|
179
|
-
cost_class: registration.runtime_definition.cost_class,
|
|
180
|
-
network: registration.runtime_definition.network,
|
|
181
|
-
},
|
|
182
|
-
]));
|
|
183
|
-
const graphRuns = new Map();
|
|
184
|
-
let validateRun;
|
|
185
|
-
let healthRun;
|
|
186
|
-
return {
|
|
187
|
-
tree_id: options.resolve_tree === false
|
|
188
|
-
? (options.tree_id ?? "working-copy")
|
|
189
|
-
: await resolveTreeId(pmRoot, options.tree_id),
|
|
190
|
-
items,
|
|
191
|
-
history: options.include_history === false
|
|
192
|
-
? []
|
|
193
|
-
: await readWorkspaceHistory(pmRoot, items),
|
|
194
|
-
terminal_statuses: [...statusRegistry.terminal_statuses],
|
|
195
|
-
provider_capabilities: {
|
|
196
|
-
...registeredProviderCapabilities,
|
|
197
|
-
...options.provider_capabilities,
|
|
198
|
-
},
|
|
199
|
-
external: async (source) => {
|
|
200
|
-
if (source.kind === "graph") {
|
|
201
|
-
const key = stableStringify({
|
|
202
|
-
operation: source.operation,
|
|
203
|
-
parameters: source.parameters ?? {},
|
|
204
|
-
});
|
|
205
|
-
let pending = graphRuns.get(key);
|
|
206
|
-
if (pending === undefined) {
|
|
207
|
-
pending = runGraph(source.operation, undefined, undefined, { ...source.parameters, full: true }, global);
|
|
208
|
-
graphRuns.set(key, pending);
|
|
209
|
-
}
|
|
210
|
-
const result = await pending;
|
|
211
|
-
return {
|
|
212
|
-
value: valueAtPath(result, source.field, source.kind),
|
|
213
|
-
population_size: items.length,
|
|
214
|
-
cost: items.length,
|
|
215
|
-
};
|
|
216
|
-
}
|
|
217
|
-
if (source.kind === "validate") {
|
|
218
|
-
validateRun ??= runValidate({ counts: true }, global);
|
|
219
|
-
const result = await validateRun;
|
|
220
|
-
return checkValue(result, source.check, source.field, source.kind);
|
|
221
|
-
}
|
|
222
|
-
if (source.kind === "health") {
|
|
223
|
-
healthRun ??= runHealth(global, { checkOnly: true, full: true });
|
|
224
|
-
const result = await healthRun;
|
|
225
|
-
return checkValue(result, source.check, source.field, source.kind);
|
|
226
|
-
}
|
|
227
|
-
const hostProvider = options.providers?.[source.provider];
|
|
228
|
-
if (hostProvider)
|
|
229
|
-
return hostProvider(source);
|
|
230
|
-
const registeredProvider = resolveRegisteredAssuranceMeasurementProvider(activeRegistrations, source.provider);
|
|
231
|
-
if (!registeredProvider) {
|
|
232
|
-
throw new TypeError(`assurance provider ${source.provider} is not registered`);
|
|
233
|
-
}
|
|
234
|
-
return runRegisteredProvider(registeredProvider.runtime_definition, source, pmRoot, options.trigger ?? "sdk");
|
|
235
|
-
},
|
|
236
|
-
};
|
|
237
|
-
}
|
|
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]="894154aa-88b8-5a3b-a03c-e3ef8a85f1c0")}catch(e2){}})();import{execFile}from"node:child_process";import{promisify}from"node:util";import{runGraph}from"../graph/run.js";import{runHealth}from"./health.js";import{runValidate}from"./validate.js";import{runList}from"../query/list.js";import{AssuranceSourceResolutionError}from"./assurance-mutation-error.js";import{getActiveExtensionRegistrations,resolvePortableWorkspaceContext}from"../../core/extensions/index.js";import{resolveRegisteredAssuranceMeasurementProvider}from"../../core/extensions/runtime-registrations.js";import{stableStringify}from"../../core/shared/serialization.js";import{getHistoryPath,listAllItemMetadata,readHistoryEntries,readSettings,resolveItemTypeRegistry,resolveRuntimeStatusRegistry}from"../runtime-primitives.js";const execFileAsync=promisify(execFile);const HISTORY_READ_CONCURRENCY=16;const DEFAULT_PROVIDER_TIMEOUT_MS=3e4;function assertProviderResult(provider,key,result){const keyDefinition=provider.keys[key];const valueMatches=keyDefinition.value_type==="number"?typeof result.value==="number"&&Number.isFinite(result.value):Array.isArray(result.value)&&result.value.every(entry=>typeof entry==="string");if(!valueMatches){throw new TypeError(`assurance provider ${provider.id} key ${key} returned the wrong value type`)}if(!Number.isInteger(result.population_size)||result.population_size<0||!Number.isFinite(result.cost)||result.cost<0){throw new TypeError(`assurance provider ${provider.id} returned an invalid population or cost`)}return result}function validateProviderParameters(provider,source){const keyDefinition=provider.keys[source.key];if(!keyDefinition){throw new TypeError(`assurance provider ${provider.id} does not declare key ${source.key}`)}const parameters=source.parameters??{};const schema=keyDefinition.parameters??{};for(const required of Object.entries(schema).filter(([,definition])=>definition.required===true).map(([name])=>name)){if(!Object.hasOwn(parameters,required)){throw new TypeError(`assurance provider ${provider.id} key ${source.key} requires parameter ${required}`)}}for(const[name,value]of Object.entries(parameters)){const definition=schema[name];if(!definition){throw new TypeError(`assurance provider ${provider.id} key ${source.key} does not declare parameter ${name}`)}if(value===null||typeof value!==definition.type){throw new TypeError(`assurance provider ${provider.id} parameter ${name} must be ${definition.type}`)}}return{...parameters}}async function runRegisteredProvider(provider,source,pmRoot,trigger){const parameters=validateProviderParameters(provider,source);const providerPromise=Promise.resolve().then(()=>provider.resolve({provider:provider.id,key:source.key,parameters,trigger,pm_root:pmRoot,...resolvePortableWorkspaceContext(pmRoot)}));providerPromise.catch(()=>{});let timeoutHandle;try{const result=await Promise.race([providerPromise,new Promise((_,reject)=>{timeoutHandle=setTimeout(()=>reject(new TypeError(`assurance provider ${provider.id} timed out`)),provider.timeout_ms??DEFAULT_PROVIDER_TIMEOUT_MS);timeoutHandle.unref?.()})]);return assertProviderResult(provider,source.key,result)}finally{clearTimeout(timeoutHandle)}}function valueAtPath(input,field,sourceKind,check){let current=input;for(const segment of field.split(".")){if(typeof current!=="object"||current===null||Array.isArray(current)){throw new AssuranceSourceResolutionError(`assurance field ${field} is not present`,{source_kind:sourceKind,field,...check?{check}:{}})}current=current[segment]}if(typeof current==="number"&&Number.isFinite(current))return current;if(Array.isArray(current)&¤t.every(entry=>typeof entry==="string")){return current}throw new AssuranceSourceResolutionError(`assurance field ${field} must resolve to a finite number or string array`,{source_kind:sourceKind,field,...check?{check}:{}})}function checkValue(result,checkName,field,sourceKind){const check=result.checks.find(entry=>entry.name===checkName);if(!check)throw new AssuranceSourceResolutionError(`assurance check ${checkName} is not present`,{source_kind:sourceKind,field,check:checkName});const value=field==="status"||field==="ok"?check.ok?0:1:valueAtPath(check.details,field,sourceKind,checkName);return{value,population_size:1,cost:result.checks.length}}async function resolveTreeId(pmRoot,explicit){if(explicit?.trim())return explicit.trim();try{const{stdout}=await execFileAsync("git",["rev-parse","HEAD^{commit}"],{cwd:pmRoot,encoding:"utf8",timeout:5e3,windowsHide:true});return stdout.trim()}catch{return"working-copy"}}async function readWorkspaceHistory(pmRoot,items){const streams=new Array(items.length);let nextIndex=0;const workers=Array.from({length:Math.min(HISTORY_READ_CONCURRENCY,items.length)},async()=>{while(nextIndex<items.length){const index=nextIndex;nextIndex+=1;const item=items[index];const entries=await readHistoryEntries(getHistoryPath(pmRoot,item.id),item.id);streams[index]=entries.map(entry=>({op:entry.op,author:entry.author,agent_harness:entry.agent_harness,agent_model:entry.agent_model}))}});await Promise.all(workers);return streams.flat()}async function createAssuranceWorkspaceContext(pmRoot,options={}){const settings=await readSettings(pmRoot);const typeRegistry=resolveItemTypeRegistry(settings);const statusRegistry=resolveRuntimeStatusRegistry(settings.schema);const metadata=options.strict_read===true?(await runList(void 0,{status:"all",full:true,noTruncate:true,strictRead:true},{path:pmRoot})).items:await listAllItemMetadata(pmRoot,settings.item_format,typeRegistry.type_to_folder,void 0,settings.schema);const items=metadata.map(item=>({...item,id:item.id,status:item.status,type:item.type}));const global2={path:pmRoot};const activeRegistrations=getActiveExtensionRegistrations();const registeredProviderCapabilities=Object.fromEntries((activeRegistrations?.assurance_providers??[]).map(registration=>[registration.definition.id,{cost_class:registration.runtime_definition.cost_class,network:registration.runtime_definition.network}]));const graphRuns=new Map;let validateRun;let healthRun;return{tree_id:options.resolve_tree===false?options.tree_id??"working-copy":await resolveTreeId(pmRoot,options.tree_id),items,history:options.include_history===false?[]:await readWorkspaceHistory(pmRoot,items),terminal_statuses:[...statusRegistry.terminal_statuses],provider_capabilities:{...registeredProviderCapabilities,...options.provider_capabilities},external:async source=>{if(source.kind==="graph"){const key=stableStringify({operation:source.operation,parameters:source.parameters??{}});let pending=graphRuns.get(key);if(pending===void 0){pending=runGraph(source.operation,void 0,void 0,{...source.parameters,full:true},global2);graphRuns.set(key,pending)}const result=await pending;return{value:valueAtPath(result,source.field,source.kind),population_size:items.length,cost:items.length}}if(source.kind==="validate"){validateRun??=runValidate({counts:true},global2);const result=await validateRun;return checkValue(result,source.check,source.field,source.kind)}if(source.kind==="health"){healthRun??=runHealth(global2,{checkOnly:true,full:true});const result=await healthRun;return checkValue(result,source.check,source.field,source.kind)}const hostProvider=options.providers?.[source.provider];if(hostProvider)return hostProvider(source);const registeredProvider=resolveRegisteredAssuranceMeasurementProvider(activeRegistrations,source.provider);if(!registeredProvider){throw new TypeError(`assurance provider ${source.provider} is not registered`)}return runRegisteredProvider(registeredProvider.runtime_definition,source,pmRoot,options.trigger??"sdk")}}}export{createAssuranceWorkspaceContext};
|
|
238
2
|
//# sourceMappingURL=assurance-runtime.js.map
|
|
239
|
-
//# debugId=cdf52e5c-86cf-5540-bc08-bfc274a1fdf9
|