@unbrained/pm-cli 2026.9.6 → 2026.9.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/skills/pm-developer/SKILL.md +12 -4
- package/.agents/skills/pm-developer/references/MULTI_AGENT_MERGE.md +19 -10
- package/.agents/skills/pm-extensions/SKILL.md +6 -0
- package/.agents/skills/pm-sdk/SKILL.md +11 -2
- package/.agents/skills/pm-user/SKILL.md +5 -0
- package/.agents/skills/pm-user/references/ECOSYSTEM_PLANNING.md +95 -0
- package/.claude-plugin/marketplace.json +2 -2
- package/CHANGELOG.md +218 -182
- package/dist/cli/after-command-context-usage.js +1 -48
- package/dist/cli/argv-utils.js +1 -40
- package/dist/cli/bootstrap-args.js +1 -9
- package/dist/cli/bundle-integrity.js +2 -110
- package/dist/cli/commander-usage.js +11 -771
- package/dist/cli/commands/activity.js +1 -9
- package/dist/cli/commands/aggregate.js +1 -5
- package/dist/cli/commands/append.js +1 -5
- package/dist/cli/commands/claim.js +1 -5
- package/dist/cli/commands/close-many.js +1 -5
- package/dist/cli/commands/close.js +1 -9
- package/dist/cli/commands/comments.js +1 -5
- package/dist/cli/commands/config.js +1 -9
- package/dist/cli/commands/context.js +1 -9
- package/dist/cli/commands/contracts.js +1 -5
- package/dist/cli/commands/copy.js +1 -9
- package/dist/cli/commands/create.js +1 -9
- package/dist/cli/commands/delete.js +1 -9
- package/dist/cli/commands/deps.js +1 -9
- package/dist/cli/commands/docs.js +1 -9
- package/dist/cli/commands/duplicates.js +1 -9
- package/dist/cli/commands/eval.js +1 -9
- package/dist/cli/commands/extension/describe.js +1 -5
- package/dist/cli/commands/extension/scaffold.js +1 -5
- package/dist/cli/commands/extension/shared.js +1 -5
- package/dist/cli/commands/extension.js +1 -9
- package/dist/cli/commands/files.js +1 -9
- package/dist/cli/commands/focus.js +1 -9
- package/dist/cli/commands/gc.js +1 -9
- package/dist/cli/commands/get.js +1 -9
- package/dist/cli/commands/graph.js +1 -10
- package/dist/cli/commands/health.js +1 -9
- package/dist/cli/commands/history-compact.js +1 -10
- package/dist/cli/commands/history-redact.js +1 -11
- package/dist/cli/commands/history-repair.js +1 -10
- package/dist/cli/commands/history.js +1 -5
- package/dist/cli/commands/index.js +1 -58
- package/dist/cli/commands/init-agent-guidance.js +1 -9
- package/dist/cli/commands/init.js +1 -9
- package/dist/cli/commands/learnings.js +1 -5
- package/dist/cli/commands/lifecycle-transitions.js +1 -5
- package/dist/cli/commands/list.js +1 -9
- package/dist/cli/commands/merge.js +1 -11
- package/dist/cli/commands/next.js +1 -9
- package/dist/cli/commands/notes.js +1 -5
- package/dist/cli/commands/plan.js +1 -9
- package/dist/cli/commands/profile.js +1 -9
- package/dist/cli/commands/restore.js +1 -9
- package/dist/cli/commands/scheduling-shortcuts.js +1 -9
- package/dist/cli/commands/schema.js +1 -10
- package/dist/cli/commands/search.js +1 -9
- package/dist/cli/commands/stats.js +1 -9
- package/dist/cli/commands/telemetry.js +1 -9
- package/dist/cli/commands/test-all.js +1 -9
- package/dist/cli/commands/test-runs.js +1 -9
- package/dist/cli/commands/test.js +1 -9
- package/dist/cli/commands/update-many.js +1 -5
- package/dist/cli/commands/update.js +1 -9
- package/dist/cli/commands/upgrade.js +1 -5
- package/dist/cli/commands/validate.js +1 -15
- package/dist/cli/context-intent-invocation.js +1 -20
- package/dist/cli/description-stdin.js +1 -17
- package/dist/cli/error-guidance.js +1 -1353
- package/dist/cli/extension-command-help.js +5 -636
- package/dist/cli/extension-command-options.js +1 -427
- package/dist/cli/extension-recovery.js +1 -126
- package/dist/cli/help-content.js +2 -1001
- package/dist/cli/help-json-payload.js +4 -570
- package/dist/cli/main.d.ts +4 -0
- package/dist/cli/main.js +5 -2573
- package/dist/cli/migration-gates.js +1 -289
- package/dist/cli/public.js +1 -20
- package/dist/cli/register-annotations.js +1 -270
- package/dist/cli/register-assurance.js +1 -62
- package/dist/cli/register-files-lookup.js +1 -56
- package/dist/cli/register-history-activity.d.ts +8 -0
- package/dist/cli/register-history-activity.js +2 -0
- package/dist/cli/register-history-author.js +1 -38
- package/dist/cli/register-history-maintenance.d.ts +9 -0
- package/dist/cli/register-history-maintenance.js +2 -0
- package/dist/cli/register-list-query.js +10 -943
- package/dist/cli/register-mutation-options.js +1 -9
- package/dist/cli/register-mutation.js +19 -1893
- package/dist/cli/register-operations.js +1 -920
- package/dist/cli/register-setup.js +1 -716
- package/dist/cli/register-structured-mutation.js +1 -196
- package/dist/cli/registration-helpers.js +1 -5
- package/dist/cli/runtime-compatibility-boundary.js +4 -42
- package/dist/cli/schema-registration-helpers.js +1 -73
- package/dist/cli/search-refresh.js +1 -13
- package/dist/cli/stats-analytics-json.js +1 -68
- package/dist/cli/telemetry-flush.js +1 -10
- package/dist/cli-bundle/bundle-manifest.json +164 -156
- package/dist/cli-bundle/chunks/chunk-3BZZA6A3.js +5 -0
- package/dist/cli-bundle/chunks/chunk-AMRDVX36.js +235 -0
- package/dist/cli-bundle/chunks/chunk-DAM4CBBR.js +2202 -0
- package/dist/cli-bundle/chunks/{chunk-WYRZZ5ZE.js → chunk-DEZPZOQ7.js} +2 -2
- package/dist/cli-bundle/chunks/chunk-FLDWYEND.js +77 -0
- package/dist/cli-bundle/chunks/{chunk-NPN5I67J.js → chunk-G5ADGQ2D.js} +3 -3
- package/dist/cli-bundle/chunks/chunk-JAAEYHUA.js +2 -0
- package/dist/cli-bundle/chunks/{chunk-JX4DH4WC.js → chunk-KR3RP4FH.js} +3 -3
- package/dist/cli-bundle/chunks/chunk-LEZOUXG6.js +2 -0
- package/dist/cli-bundle/chunks/chunk-NSAPNEYH.js +2 -0
- package/dist/cli-bundle/chunks/chunk-QOEKOECV.js +29 -0
- package/dist/cli-bundle/chunks/chunk-RHSFOMHU.js +2 -0
- package/dist/cli-bundle/chunks/chunk-XOD2PCB6.js +20 -0
- package/dist/cli-bundle/chunks/{chunk-JT6XF6GE.js → chunk-YVEQ2AMO.js} +4 -4
- package/dist/cli-bundle/chunks/register-list-query-KSK3R63M.js +11 -0
- package/dist/cli-bundle/chunks/register-mutation-IQ5C7U6O.js +20 -0
- package/dist/cli-bundle/chunks/{register-operations-I5W3KMGB.js → register-operations-DWVHR2NC.js} +2 -2
- package/dist/cli-bundle/chunks/register-setup-BQ5SVD4B.js +2 -0
- package/dist/cli-bundle/focused-chunks/chunk-3WRPWLA7.js +3 -0
- package/dist/cli-bundle/focused-chunks/chunk-7MBUII7U.js +2 -0
- package/dist/cli-bundle/focused-chunks/chunk-COPBO5HW.js +8 -0
- package/dist/cli-bundle/focused-chunks/chunk-DUN4IXYN.js +20 -0
- package/dist/cli-bundle/focused-chunks/{chunk-LIJIA4TY.js → chunk-EE5QSM4Z.js} +3 -3
- package/dist/cli-bundle/focused-chunks/chunk-HJVARYM3.js +6 -0
- package/dist/cli-bundle/focused-chunks/chunk-IAUOUGVR.js +177 -0
- package/dist/cli-bundle/focused-chunks/chunk-KOOMJ54F.js +2 -0
- package/dist/cli-bundle/focused-chunks/chunk-MZDXX7JY.js +56 -0
- package/dist/cli-bundle/focused-chunks/{chunk-M6PBRFSH.js → chunk-OPFHFGDD.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-QHNETP77.js +9 -0
- package/dist/cli-bundle/focused-chunks/{chunk-3BZEOXLT.js → chunk-RMWES4M6.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-RXT4P5QH.js +10 -0
- package/dist/cli-bundle/focused-chunks/chunk-SDOL6FM2.js +12 -0
- package/dist/cli-bundle/focused-chunks/chunk-SQV4AAUC.js +2 -0
- package/dist/cli-bundle/focused-chunks/{chunk-PEFABF7E.js → chunk-WE3IUNIW.js} +3 -3
- package/dist/cli-bundle/focused-chunks/chunk-YALOUBWJ.js +2 -0
- package/dist/cli-bundle/main.js +20 -20
- package/dist/cli-bundle/sdk-authoring.js +1 -1
- package/dist/cli-bundle/sdk-contracts.js +2 -2
- package/dist/cli-bundle/sdk-core.js +29 -29
- package/dist/cli-bundle/sdk-governance.js +1 -1
- package/dist/cli-bundle/sdk-graph.js +1 -1
- package/dist/cli-bundle/sdk-merge.js +42 -42
- package/dist/cli-bundle/sdk-query.js +1 -1
- package/dist/cli-bundle/sdk-runtime.js +1 -1
- package/dist/cli-bundle/sdk-testing.js +1 -1
- package/dist/cli-bundle/sdk.js +11 -11
- package/dist/cli.js +1 -104
- package/dist/core/checkpoint/checkpoint-gc.js +1 -169
- package/dist/core/checkpoint/mutation-checkpoint.js +2 -133
- package/dist/core/config/nested-settings.js +1 -534
- package/dist/core/config/positional-value.js +1 -109
- package/dist/core/diagnostics/remediation.js +1 -506
- package/dist/core/extensions/activation-summary-markdown.js +2 -145
- package/dist/core/extensions/activation-summary.js +1 -92
- package/dist/core/extensions/activation-transaction.js +1 -46
- package/dist/core/extensions/capability-usage.js +1 -173
- package/dist/core/extensions/command-hook-context.js +1 -13
- package/dist/core/extensions/command-metadata-contract.js +1 -22
- package/dist/core/extensions/command-visibility-tier.js +1 -29
- package/dist/core/extensions/contribution-inventory.js +1 -173
- package/dist/core/extensions/exporter-output-contract.js +1 -66
- package/dist/core/extensions/extension-candidate.js +1 -18
- package/dist/core/extensions/extension-capability-aliases.js +1 -158
- package/dist/core/extensions/extension-hook-runtime.js +1 -699
- package/dist/core/extensions/extension-policy.js +1 -599
- package/dist/core/extensions/extension-registries.js +1 -62
- package/dist/core/extensions/extension-runtime-helpers.js +1 -33
- package/dist/core/extensions/extension-types.js +1 -102
- package/dist/core/extensions/flag-definition-validation.js +1 -52
- package/dist/core/extensions/flag-value-types.js +1 -64
- package/dist/core/extensions/index.js +1 -526
- package/dist/core/extensions/item-field-types.js +1 -39
- package/dist/core/extensions/item-fields.js +1 -261
- package/dist/core/extensions/loader.js +1 -2223
- package/dist/core/extensions/manifest-schema.js +1 -69
- package/dist/core/extensions/module-graph-snapshot.js +1 -33
- package/dist/core/extensions/preflight-ownership.js +1 -41
- package/dist/core/extensions/registration-validation.js +1 -82
- package/dist/core/extensions/registration-values.js +1 -209
- package/dist/core/extensions/reserved-host-flags.js +1 -36
- package/dist/core/extensions/runtime-registrations.js +1 -67
- package/dist/core/extensions/service-ownership.js +1 -19
- package/dist/core/extensions/version-compat.js +1 -216
- package/dist/core/fs/fs-utils.js +2 -158
- package/dist/core/fs/host-environment-errors.js +1 -141
- package/dist/core/fs/index.js +1 -9
- package/dist/core/fs/path-utils.js +1 -17
- package/dist/core/governance/content-fields.js +1 -160
- package/dist/core/governance/issue-codes.js +1 -151
- package/dist/core/governance/metadata-coverage.js +1 -358
- package/dist/core/history/drift-cache.js +3 -72
- package/dist/core/history/drift-scan.js +1 -342
- package/dist/core/history/event-classification.js +1 -109
- package/dist/core/history/event-index.js +8 -784
- package/dist/core/history/history-compact-bulk.js +1 -104
- package/dist/core/history/history-diff.js +1 -158
- package/dist/core/history/history-rewrite.d.ts +6 -1
- package/dist/core/history/history-rewrite.js +1 -107
- package/dist/core/history/history-storage-stats.js +1 -102
- package/dist/core/history/history-stream-policy.js +1 -62
- package/dist/core/history/history.js +2 -617
- package/dist/core/history/identity.js +1 -30
- package/dist/core/history/index.js +1 -9
- package/dist/core/history/projection.js +1 -196
- package/dist/core/history/read.d.ts +9 -0
- package/dist/core/history/read.js +1 -57
- package/dist/core/history/replay.js +2 -439
- package/dist/core/history/version-address.js +1 -32
- package/dist/core/history/workspace-history.js +2 -433
- package/dist/core/io/body-file.js +1 -62
- package/dist/core/io/bulk-ids-input.js +1 -112
- package/dist/core/item/actionability.js +1 -327
- package/dist/core/item/dependency-reference.js +1 -20
- package/dist/core/item/id.js +1 -112
- package/dist/core/item/index.js +1 -12
- package/dist/core/item/item-format-version.js +1 -78
- package/dist/core/item/item-format.js +5 -1473
- package/dist/core/item/item-record.js +1 -23
- package/dist/core/item/item-type-definition.js +1 -133
- package/dist/core/item/parent-reference-policy.js +1 -57
- package/dist/core/item/parse.js +2 -603
- package/dist/core/item/plan-lifecycle.js +1 -19
- package/dist/core/item/priority.js +1 -61
- package/dist/core/item/sprint-release-format.js +1 -38
- package/dist/core/item/status-filter.js +1 -115
- package/dist/core/item/status.js +1 -43
- package/dist/core/item/toon-decode.js +1 -29
- package/dist/core/item/type-registry.js +1 -715
- package/dist/core/item/type-synonyms.js +1 -38
- package/dist/core/lock/index.js +1 -9
- package/dist/core/lock/lock-gc.js +1 -240
- package/dist/core/lock/lock.js +3 -590
- package/dist/core/output/mutation-projection.js +1 -217
- package/dist/core/output/output-control.js +1 -25
- package/dist/core/output/output.js +11 -494
- package/dist/core/output/query-summary.js +1 -58
- package/dist/core/output/tabular.js +1 -77
- package/dist/core/packages/manifest.js +1 -244
- package/dist/core/packages/root.js +1 -84
- package/dist/core/profile/profile-describe.js +1 -83
- package/dist/core/profile/profile-lint.js +1 -415
- package/dist/core/profile/profile-plan.js +0 -0
- package/dist/core/profile/profile-presets.js +1 -370
- package/dist/core/reproducibility/context.js +1 -82
- package/dist/core/schema/fields-file.js +2 -288
- package/dist/core/schema/item-types-file.js +2 -296
- package/dist/core/schema/runtime-field-filters.js +1 -49
- package/dist/core/schema/runtime-field-values.js +1 -313
- package/dist/core/schema/runtime-schema.js +2 -826
- package/dist/core/schema/status-defs-file.js +2 -227
- package/dist/core/schema/status-token.js +1 -31
- package/dist/core/schema/type-inference.js +1 -95
- package/dist/core/schema/type-presets.js +1 -87
- package/dist/core/schema/type-workflows.js +1 -104
- package/dist/core/search/background-refresh.js +2 -286
- package/dist/core/search/bm25.js +1 -146
- package/dist/core/search/cache.js +2 -534
- package/dist/core/search/corpus.js +1 -311
- package/dist/core/search/embedding-batches.js +1 -163
- package/dist/core/search/eval.js +1 -225
- package/dist/core/search/http-client.js +1 -75
- package/dist/core/search/providers.js +1 -242
- package/dist/core/search/relevance.js +1 -244
- package/dist/core/search/semantic-defaults.js +1 -199
- package/dist/core/search/staleness.js +1 -30
- package/dist/core/search/vector-stores.js +2 -664
- package/dist/core/search/vectorization-metadata.js +1 -81
- package/dist/core/sentry/helpers.js +1 -272
- package/dist/core/sentry/instrument.js +1 -387
- package/dist/core/session/session-state.js +1 -260
- package/dist/core/shared/agent-session-context.js +1 -133
- package/dist/core/shared/author.js +1 -1172
- package/dist/core/shared/command-types.js +1 -4
- package/dist/core/shared/conflict-markers.js +1 -31
- package/dist/core/shared/constants.js +1 -405
- package/dist/core/shared/errors.js +1 -20
- package/dist/core/shared/html-entity-decode.js +1 -131
- package/dist/core/shared/index.js +1 -12
- package/dist/core/shared/item-metadata-contract.js +1 -89
- package/dist/core/shared/lazy-module.js +1 -16
- package/dist/core/shared/levenshtein.js +1 -61
- package/dist/core/shared/memo.js +1 -19
- package/dist/core/shared/numeric-parsers.js +1 -20
- package/dist/core/shared/option-alias-visibility.js +1 -67
- package/dist/core/shared/primitives.js +1 -127
- package/dist/core/shared/serial-queue.js +1 -79
- package/dist/core/shared/serialization.js +1 -210
- package/dist/core/shared/split-comma-list.js +1 -30
- package/dist/core/shared/text-normalization.js +1 -38
- package/dist/core/shared/time.js +1 -306
- package/dist/core/store/index.js +1 -12
- package/dist/core/store/item-format-migration.js +1 -125
- package/dist/core/store/item-metadata-cache.js +1 -1116
- package/dist/core/store/item-metadata-query-index.js +9 -394
- package/dist/core/store/item-metadata-read-work.js +1 -43
- package/dist/core/store/item-store.js +1 -693
- package/dist/core/store/paths.d.ts +1 -1
- package/dist/core/store/paths.js +1 -214
- package/dist/core/store/settings-read-cache.js +1 -85
- package/dist/core/store/settings-validator.js +1 -421
- package/dist/core/store/settings.js +3 -1309
- package/dist/core/store/tracker-preflight.js +1 -141
- package/dist/core/telemetry/consent.js +5 -108
- package/dist/core/telemetry/observability.js +1 -246
- package/dist/core/telemetry/runtime.js +4 -1988
- package/dist/core/test/background-runs.js +4 -945
- package/dist/core/test/item-test-run-tracking.js +1 -63
- package/dist/core/test/run-selectors.js +1 -120
- package/dist/core/validate/estimate-defaults.js +1 -89
- package/dist/core/validate/fix-planning.js +1 -189
- package/dist/core/validate/linked-artifact-reference.js +1 -36
- package/dist/core/validate/missing-by-type.js +1 -34
- package/dist/core/validate/missing-link-owners.js +1 -95
- package/dist/core/validate/stale-file-classification.js +1 -82
- package/dist/mcp/http-server.js +5 -448
- package/dist/mcp/legacy-adapter.js +1 -77
- package/dist/mcp/runtime-capabilities.js +1 -200
- package/dist/mcp/server.js +4 -1233
- package/dist/mcp/tool-definitions.js +1 -804
- package/dist/sdk/actionability.js +1 -13
- package/dist/sdk/agent/closed-domain-contracts.js +1 -161
- package/dist/sdk/agent/command-recovery.js +1 -59
- package/dist/sdk/agent/command-suggestions.js +1 -66
- package/dist/sdk/agent/create-option-policy.js +1 -31
- package/dist/sdk/agent/identity-config.js +1 -106
- package/dist/sdk/agent/item-addressing.js +1 -207
- package/dist/sdk/agent/refusal-closure-census.js +1 -151
- package/dist/sdk/agent/refusal-closure.js +1 -133
- package/dist/sdk/agent/refusal-corpus-contracts.js +1 -193
- package/dist/sdk/agent/refusal-reachability.js +1 -593
- package/dist/sdk/agent/subcommand-recovery.js +1 -83
- package/dist/sdk/agent/task-transcript-contracts.js +1 -197
- package/dist/sdk/agent/tracker-preflight-contracts.js +1 -126
- package/dist/sdk/agent-capability-contracts.js +1 -428
- package/dist/sdk/agent-session-context.js +1 -9
- package/dist/sdk/annotations.js +1 -448
- package/dist/sdk/author-attribution.js +1 -468
- package/dist/sdk/authoring.js +1 -20
- package/dist/sdk/cli-bootstrap.js +1 -838
- package/dist/sdk/cli-contracts/agent-output-contracts.d.ts +1 -1
- package/dist/sdk/cli-contracts/agent-output-contracts.js +4 -476
- package/dist/sdk/cli-contracts/bootstrap-command-scanner.js +1 -79
- package/dist/sdk/cli-contracts/command-aliases.d.ts +4 -0
- package/dist/sdk/cli-contracts/command-aliases.js +1 -107
- package/dist/sdk/cli-contracts/command-exit-contracts.js +1 -151
- package/dist/sdk/cli-contracts/commander-mutation-options.js +1 -1081
- package/dist/sdk/cli-contracts/commander-types.js +1 -159
- package/dist/sdk/cli-contracts/completeness.js +1 -393
- package/dist/sdk/cli-contracts/enum-contracts.js +1 -222
- package/dist/sdk/cli-contracts/flag-contracts.js +1 -1947
- package/dist/sdk/cli-contracts/flag-lexicon-contracts.js +1 -347
- package/dist/sdk/cli-contracts/grammar-contracts.js +1 -986
- package/dist/sdk/cli-contracts/registration-helpers.js +7 -990
- package/dist/sdk/cli-contracts/runtime-contracts.d.ts +5 -0
- package/dist/sdk/cli-contracts/runtime-contracts.js +1 -2090
- package/dist/sdk/cli-contracts/schemas/assurance-definition.js +1 -324
- package/dist/sdk/cli-contracts/string-lists.js +1 -16
- package/dist/sdk/cli-contracts/tool-option-contracts.js +1 -461
- package/dist/sdk/cli-contracts/tool-parameter-tables.js +1 -2167
- package/dist/sdk/cli-contracts/tool-schema.d.ts +3 -1
- package/dist/sdk/cli-contracts/tool-schema.js +1 -1664
- package/dist/sdk/cli-contracts/typed-action-inputs.js +1 -4
- package/dist/sdk/cli-contracts.d.ts +1 -1
- package/dist/sdk/cli-contracts.js +1 -17
- package/dist/sdk/cli-program.js +1 -49
- package/dist/sdk/command-line.d.ts +2 -5
- package/dist/sdk/command-line.js +1 -78
- package/dist/sdk/comments.js +1 -133
- package/dist/sdk/compile-cache.js +1 -73
- package/dist/sdk/completion.js +157 -837
- package/dist/sdk/compose.js +1 -1090
- package/dist/sdk/config.js +1 -1204
- package/dist/sdk/context/recency.js +1 -33
- package/dist/sdk/context/semantic-session-attribution.js +1 -82
- package/dist/sdk/context/usage-egress.js +1 -29
- package/dist/sdk/context/usage-ledger.js +3 -185
- package/dist/sdk/context-intent-contracts.js +1 -709
- package/dist/sdk/context-intent-runtime.js +1 -115
- package/dist/sdk/context-packing.js +1 -218
- package/dist/sdk/context-relevance.js +1 -503
- package/dist/sdk/context-signal-store.js +2 -426
- package/dist/sdk/context-usage.js +1 -367
- package/dist/sdk/contracts.js +1 -23
- package/dist/sdk/core-governance.js +1 -14
- package/dist/sdk/core.js +1 -14
- package/dist/sdk/corpus-shape.js +1 -401
- package/dist/sdk/define.js +1 -220
- package/dist/sdk/dependencies.js +1 -718
- package/dist/sdk/dependency-flag-validation.js +1 -156
- package/dist/sdk/dependency-provenance.js +1 -135
- package/dist/sdk/docs.js +1 -14
- package/dist/sdk/duplicates.js +1 -40
- package/dist/sdk/environment/agent-environment.js +1 -466
- package/dist/sdk/environment/host-environment-errors.js +1 -8
- package/dist/sdk/environment/project-runtime-compatibility.js +1 -481
- package/dist/sdk/environment/source-context.js +1 -28
- package/dist/sdk/environment/tracker-preflight.js +1 -9
- package/dist/sdk/error-code-catalog.js +1 -153
- package/dist/sdk/error-runtime.js +1 -58
- package/dist/sdk/errors.js +1 -58
- package/dist/sdk/eval.js +1 -190
- package/dist/sdk/extension/author-manifest.js +1 -92
- package/dist/sdk/extension/bundled-catalog.js +1 -332
- package/dist/sdk/extension/concurrency.js +1 -25
- package/dist/sdk/extension/copy-scope.d.ts +2 -0
- package/dist/sdk/extension/copy-scope.js +2 -0
- package/dist/sdk/extension/custom-field-collisions.js +1 -30
- package/dist/sdk/extension/describe.js +3 -189
- package/dist/sdk/extension/doctor.js +1 -606
- package/dist/sdk/extension/install-plan.d.ts +69 -0
- package/dist/sdk/extension/install-plan.js +2 -0
- package/dist/sdk/extension/install-receipts.d.ts +7 -0
- package/dist/sdk/extension/install-receipts.js +2 -0
- package/dist/sdk/extension/install-runtime.js +3 -313
- package/dist/sdk/extension/install-snapshot.js +1 -66
- package/dist/sdk/extension/install-sources.js +5 -1057
- package/dist/sdk/extension/managed-state.js +2 -252
- package/dist/sdk/extension/migrations.js +2 -174
- package/dist/sdk/extension/output-ownership.js +1 -25
- package/dist/sdk/extension/runtime-summary.js +1 -18
- package/dist/sdk/extension/scaffold.js +4 -2308
- package/dist/sdk/extension/shared.js +1 -147
- package/dist/sdk/extension/source-resolution.js +1 -65
- package/dist/sdk/extension/update-check.js +1 -67
- package/dist/sdk/extension-command-context.js +1 -44
- package/dist/sdk/extension-contracts.js +1 -73
- package/dist/sdk/extension.d.ts +7 -2
- package/dist/sdk/extension.js +1 -2196
- package/dist/sdk/files.js +1 -535
- package/dist/sdk/flag-invocation-contracts.d.ts +0 -5
- package/dist/sdk/flag-invocation-contracts.js +1 -344
- package/dist/sdk/generated/generated-error-code-catalog-part-1.js +1 -2224
- package/dist/sdk/generated/generated-error-code-catalog-part-2.js +1 -2236
- package/dist/sdk/generated-error-code-catalog.js +1 -16
- package/dist/sdk/governance/assurance-action-contracts.js +1 -4
- package/dist/sdk/governance/assurance-action.js +1 -411
- package/dist/sdk/governance/assurance-limits.js +1 -10
- package/dist/sdk/governance/assurance-mutation-error.js +1 -81
- package/dist/sdk/governance/assurance-presets.js +1 -135
- package/dist/sdk/governance/assurance-runtime.js +1 -238
- package/dist/sdk/governance/assurance.js +4 -1182
- package/dist/sdk/governance/boundary-fixtures.js +1 -200
- package/dist/sdk/governance/coverage-assurance.js +1 -60
- package/dist/sdk/governance/defect-recurrence-coverage.js +1 -188
- package/dist/sdk/governance/defect-recurrence-graph.js +1 -120
- package/dist/sdk/governance/defect-recurrence-signals.js +1 -24
- package/dist/sdk/governance/defect-recurrence.js +1 -623
- package/dist/sdk/governance/extension-host-version.js +1 -115
- package/dist/sdk/governance/gc.js +1 -368
- package/dist/sdk/governance/health.js +1 -2367
- package/dist/sdk/governance/hierarchy-validation.js +1 -108
- package/dist/sdk/governance/linked-file-report.js +1 -71
- package/dist/sdk/governance/merge-receipt-history.js +1 -206
- package/dist/sdk/governance/provenance-health.js +1 -282
- package/dist/sdk/governance/reindex.js +4 -761
- package/dist/sdk/governance/stale-work.js +1 -82
- package/dist/sdk/governance/status-role-diagnostics.js +1 -35
- package/dist/sdk/governance/storage-integrity.js +1 -280
- package/dist/sdk/governance/tracked-runtime-cache.js +1 -106
- package/dist/sdk/governance/upgrade.js +2 -327
- package/dist/sdk/governance/validate-history-drift.js +1 -81
- package/dist/sdk/governance/validate-item-reader.js +1 -17
- package/dist/sdk/governance/validate-normalization.js +1 -36
- package/dist/sdk/governance/validate.js +1 -2261
- package/dist/sdk/governance/workspace-position.js +1 -163
- package/dist/sdk/governance.d.ts +1 -0
- package/dist/sdk/governance.js +1 -31
- package/dist/sdk/graph/adapter.js +1 -181
- package/dist/sdk/graph/analytics.js +1 -474
- package/dist/sdk/graph/assembly.js +1 -377
- package/dist/sdk/graph/cache.js +1 -160
- package/dist/sdk/graph/centrality.js +1 -258
- package/dist/sdk/graph/conformance.js +1 -130
- package/dist/sdk/graph/deadline-scheduling.d.ts +90 -0
- package/dist/sdk/graph/deadline-scheduling.js +2 -0
- package/dist/sdk/graph/durable-cache.d.ts +1 -1
- package/dist/sdk/graph/durable-cache.js +1 -361
- package/dist/sdk/graph/governance-contracts.js +1 -34
- package/dist/sdk/graph/governance.d.ts +13 -1
- package/dist/sdk/graph/governance.js +1 -735
- package/dist/sdk/graph/hierarchy-integrity.js +1 -310
- package/dist/sdk/graph/index.d.ts +3 -2
- package/dist/sdk/graph/index.js +1 -26
- package/dist/sdk/graph/lifecycle-coverage.d.ts +32 -0
- package/dist/sdk/graph/lifecycle-coverage.js +2 -0
- package/dist/sdk/graph/mutation-advisory.js +1 -176
- package/dist/sdk/graph/remediation.js +1 -197
- package/dist/sdk/graph/run.d.ts +15 -1
- package/dist/sdk/graph/run.js +1 -768
- package/dist/sdk/graph/scheduling.js +1 -124
- package/dist/sdk/graph/traversal.js +1 -284
- package/dist/sdk/graph/workspace-relationship-kind-registry.js +1 -27
- package/dist/sdk/graph.js +1 -15
- package/dist/sdk/guide-topics.js +1 -707
- package/dist/sdk/guide.js +1 -279
- package/dist/sdk/history/maintenance.d.ts +71 -0
- package/dist/sdk/history/maintenance.js +2 -0
- package/dist/sdk/history/salvage.js +2 -247
- package/dist/sdk/history/subject.d.ts +19 -0
- package/dist/sdk/history/subject.js +2 -0
- package/dist/sdk/history-analytics.js +1 -282
- package/dist/sdk/history-compact.js +1 -527
- package/dist/sdk/history-mcp.js +1 -68
- package/dist/sdk/history-provenance.js +1 -182
- package/dist/sdk/history-read.js +1 -96
- package/dist/sdk/history-redact.d.ts +1 -14
- package/dist/sdk/history-redact.js +1 -643
- package/dist/sdk/history-repair.d.ts +5 -0
- package/dist/sdk/history-repair.js +1 -657
- package/dist/sdk/improvement-ledger-validation.js +1 -62
- package/dist/sdk/improvement-ledger.js +2 -257
- package/dist/sdk/index.d.ts +4 -0
- package/dist/sdk/index.js +1 -183
- package/dist/sdk/init-agent-guidance.js +2 -496
- package/dist/sdk/init.js +2 -820
- package/dist/sdk/invocation-author.js +1 -39
- package/dist/sdk/item-children.js +1 -90
- package/dist/sdk/item-metadata-index.js +1 -15
- package/dist/sdk/item-schedule.js +1 -27
- package/dist/sdk/item-transaction.js +1 -396
- package/dist/sdk/learnings.js +1 -29
- package/dist/sdk/lifecycle/append.js +2 -53
- package/dist/sdk/lifecycle/claim.d.ts +2 -0
- package/dist/sdk/lifecycle/claim.js +1 -242
- package/dist/sdk/lifecycle/close-many.js +1 -438
- package/dist/sdk/lifecycle/close.js +1 -468
- package/dist/sdk/lifecycle/copy.js +1 -212
- package/dist/sdk/lifecycle/create.js +1 -1949
- package/dist/sdk/lifecycle/delete.js +1 -45
- package/dist/sdk/lifecycle/event-validation-messages.js +1 -91
- package/dist/sdk/lifecycle/focus.js +1 -91
- package/dist/sdk/lifecycle/hierarchy-mutation-lock.js +1 -24
- package/dist/sdk/lifecycle/legacy-none-tokens.js +1 -149
- package/dist/sdk/lifecycle/lifecycle-transitions.js +1 -40
- package/dist/sdk/lifecycle/mcp-actions.d.ts +2 -0
- package/dist/sdk/lifecycle/mcp-actions.js +1 -51
- package/dist/sdk/lifecycle/metadata-normalizers.js +1 -46
- package/dist/sdk/lifecycle/mutation-command-options.js +1 -9
- package/dist/sdk/lifecycle/plan.js +1 -1606
- package/dist/sdk/lifecycle/recurrence-parsers.js +1 -147
- package/dist/sdk/lifecycle/reopen.js +1 -68
- package/dist/sdk/lifecycle/repeatable-metadata-parsers.js +1 -143
- package/dist/sdk/lifecycle/restore.d.ts +1 -0
- package/dist/sdk/lifecycle/restore.js +1 -330
- package/dist/sdk/lifecycle/shared-unset-fields.js +1 -295
- package/dist/sdk/lifecycle/update-many.js +1 -861
- package/dist/sdk/lifecycle/update.js +1 -2136
- package/dist/sdk/lifecycle-completion.js +1 -92
- package/dist/sdk/lifecycle-policy.js +1 -120
- package/dist/sdk/linked-artifacts.js +1 -530
- package/dist/sdk/mcp/apps.js +4 -133
- package/dist/sdk/mcp/authorization.js +1 -404
- package/dist/sdk/mcp/discovery.js +1 -494
- package/dist/sdk/mcp/interactions.js +1 -336
- package/dist/sdk/mcp/protocol.d.ts +7 -0
- package/dist/sdk/mcp/protocol.js +1 -184
- package/dist/sdk/mcp/skills.js +1 -389
- package/dist/sdk/mcp/subscriptions.js +1 -211
- package/dist/sdk/mcp/tasks.js +2 -430
- package/dist/sdk/mcp/transport.js +1 -260
- package/dist/sdk/merge/abandoned-receipts.js +1 -46
- package/dist/sdk/merge/driver.js +1 -212
- package/dist/sdk/merge/index.js +1 -16
- package/dist/sdk/merge/install.js +3 -561
- package/dist/sdk/merge/receipt-file-boundary.js +1 -46
- package/dist/sdk/merge/receipt-operation.js +1 -96
- package/dist/sdk/merge/receipt-schema.js +1 -397
- package/dist/sdk/merge/receipts.js +4 -525
- package/dist/sdk/merge/reconcile.js +1 -352
- package/dist/sdk/merge/three-way.js +3 -775
- package/dist/sdk/merge.js +1 -10
- package/dist/sdk/mutation-events.js +1 -292
- package/dist/sdk/mutation-guard.js +1 -216
- package/dist/sdk/notes.js +1 -139
- package/dist/sdk/output-contracts.js +1 -172
- package/dist/sdk/output-projection.js +1 -430
- package/dist/sdk/output-token-accounting.js +1 -140
- package/dist/sdk/output.js +1 -64
- package/dist/sdk/ownership-source.js +1 -21
- package/dist/sdk/package-import-adapters.js +1 -442
- package/dist/sdk/package-migrations.js +1 -20
- package/dist/sdk/package-runtime-options.js +1 -80
- package/dist/sdk/pagination.js +1 -162
- package/dist/sdk/profile.js +1 -454
- package/dist/sdk/provenance.js +1 -258
- package/dist/sdk/public-surface.json +1 -1
- package/dist/sdk/query/activity.js +1 -401
- package/dist/sdk/query/aggregate.d.ts +16 -0
- package/dist/sdk/query/aggregate.js +1 -390
- package/dist/sdk/query/calendar.js +1 -964
- package/dist/sdk/query/complete-list.js +1 -215
- package/dist/sdk/query/context.js +1 -1702
- package/dist/sdk/query/duplicate-candidates.js +1 -70
- package/dist/sdk/query/get.js +1 -450
- package/dist/sdk/query/history.js +1 -186
- package/dist/sdk/query/item-filter-options.js +1 -9
- package/dist/sdk/query/light-metadata.js +1 -18
- package/dist/sdk/query/list-filter-shared.js +1 -81
- package/dist/sdk/query/list.js +1 -1304
- package/dist/sdk/query/multi-value-filters.js +1 -78
- package/dist/sdk/query/next.js +1 -513
- package/dist/sdk/query/parsers.js +1 -44
- package/dist/sdk/query/projection-contracts.js +1 -184
- package/dist/sdk/query/search-contracts.js +1 -230
- package/dist/sdk/query/search-pagination.js +1 -35
- package/dist/sdk/query/search-rendering.js +1 -105
- package/dist/sdk/query/search.js +2 -1987
- package/dist/sdk/query.js +1 -35
- package/dist/sdk/read-output/continuation.js +1 -194
- package/dist/sdk/read-output-budget.js +1 -135
- package/dist/sdk/read-output-contracts.js +1 -1225
- package/dist/sdk/read-output-rows.js +1 -186
- package/dist/sdk/read-output-session.js +1 -208
- package/dist/sdk/relationship-analytics.js +1 -410
- package/dist/sdk/relationship-context.js +1 -284
- package/dist/sdk/relationship-history.js +4 -519
- package/dist/sdk/relationship-kinds/contract.js +1 -22
- package/dist/sdk/relationship-migration.js +1 -77
- package/dist/sdk/relationships.js +1 -579
- package/dist/sdk/reproducibility/process.js +1 -87
- package/dist/sdk/runtime-action-aliases.js +1 -59
- package/dist/sdk/runtime-extended-actions.js +1 -177
- package/dist/sdk/runtime-input.js +1 -614
- package/dist/sdk/runtime-primitives.js +1 -84
- package/dist/sdk/runtime-public-contracts.js +1 -4
- package/dist/sdk/runtime-stats-options.js +1 -38
- package/dist/sdk/runtime.js +1 -1928
- package/dist/sdk/scheduling-shortcuts.js +1 -63
- package/dist/sdk/schema-migration.js +3 -856
- package/dist/sdk/schema.js +1 -1376
- package/dist/sdk/search-refresh-worker.js +1 -18
- package/dist/sdk/similarity-scoring.js +1 -53
- package/dist/sdk/similarity.js +1 -326
- package/dist/sdk/start-task-status.js +1 -14
- package/dist/sdk/stats.js +1 -270
- package/dist/sdk/structured-mutations.js +1 -580
- package/dist/sdk/telemetry-flush.js +1 -13
- package/dist/sdk/telemetry.js +1 -405
- package/dist/sdk/templates.js +2 -292
- package/dist/sdk/test/batch.js +2 -509
- package/dist/sdk/test/entry.js +1 -70
- package/dist/sdk/test/execution.js +6 -2211
- package/dist/sdk/test/linked-command-detection.js +1 -546
- package/dist/sdk/test/measurements.js +1 -91
- package/dist/sdk/test/parsers.js +1 -545
- package/dist/sdk/test/runs.js +1 -193
- package/dist/sdk/test/trust.js +2 -206
- package/dist/sdk/testing.js +4 -1391
- package/dist/sdk/traceability/runtime-files-lookup.js +1 -32
- package/dist/sdk/traceability/source-traceability.js +1 -292
- package/dist/sdk/tracker-root-discovery.js +1 -9
- package/dist/sdk/workspace-contracts-cache.js +1 -28
- package/dist/sdk/workspace-contracts.js +1 -33
- package/dist/sdk/workspace-memory.js +2 -318
- package/dist/sdk/workspace-recipe.js +1 -71
- package/dist/sdk/workspace-snapshot.js +4 -613
- package/dist/sdk/workspace-transaction-gc.js +1 -149
- package/dist/sdk/workspace-transaction.js +2 -363
- package/dist/sdk/workspace.js +3 -127
- package/dist/types/index.js +1 -9
- package/dist/types.js +1 -245
- package/docs/AGENT_GUIDE.md +1 -1
- package/docs/CONTEXT_ALGORITHM_PORTFOLIO.md +167 -0
- package/docs/DIAGNOSTIC_OUTPUT_CONTRACTS.md +9 -3
- package/docs/EXTENSIONS.md +1 -0
- package/docs/HISTORY_MAINTENANCE.md +125 -0
- package/docs/MCP_2026_07_28_CONFORMANCE.md +20 -10
- package/docs/PACKAGE_EVIDENCE.md +92 -0
- package/docs/PLANNING_MEASUREMENTS.md +183 -0
- package/docs/README.md +3 -0
- package/docs/RELEASING.md +1 -0
- package/docs/SCRIPTING.md +21 -0
- package/docs/TESTING.md +23 -0
- package/docs/generated/FLAG_LEXICON_BUDGETS.md +5 -5
- package/docs/generated/REFUSAL_CLOSURE_CENSUS.md +2 -2
- package/marketplace.json +2 -2
- package/package.json +1 -1
- package/packages/pm-beads/package.json +1 -1
- package/packages/pm-calendar/package.json +1 -1
- package/packages/pm-command-kit/package.json +1 -1
- package/packages/pm-digital-twin/package.json +1 -1
- package/packages/pm-governance-audit/package.json +1 -1
- package/packages/pm-guide-shell/package.json +1 -1
- package/packages/pm-kanban/package.json +1 -1
- package/packages/pm-lifecycle-hooks/package.json +1 -1
- package/packages/pm-linked-test-adapters/package.json +1 -1
- package/packages/pm-search-advanced/package.json +1 -1
- package/packages/pm-templates/package.json +1 -1
- package/packages/pm-todos/package.json +1 -1
- package/packages/pm-vcs/package.json +1 -1
- package/plugins/pm-claude/.claude-plugin/plugin.json +1 -1
- package/plugins/pm-codex/.codex-plugin/plugin.json +1 -1
- package/scripts/finalize-build.mjs +45 -3
- package/dist/cli-bundle/chunks/chunk-AZDFJGH6.js +0 -9
- package/dist/cli-bundle/chunks/chunk-BAX2BYUW.js +0 -2111
- package/dist/cli-bundle/chunks/chunk-CKOL5U7J.js +0 -77
- package/dist/cli-bundle/chunks/chunk-OF76PSDQ.js +0 -5
- package/dist/cli-bundle/chunks/chunk-QUWFABDM.js +0 -232
- package/dist/cli-bundle/chunks/chunk-QWRRFYK3.js +0 -2
- package/dist/cli-bundle/chunks/chunk-RWWBOWJ5.js +0 -2
- package/dist/cli-bundle/chunks/chunk-WGAOYSYH.js +0 -40
- package/dist/cli-bundle/chunks/chunk-WI2AYPA7.js +0 -2
- package/dist/cli-bundle/chunks/register-list-query-5JL52D33.js +0 -11
- package/dist/cli-bundle/chunks/register-mutation-ZPG7KMVP.js +0 -20
- package/dist/cli-bundle/chunks/register-setup-H4SVAVX7.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-AL5ON6K6.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-CHC2IDXA.js +0 -6
- package/dist/cli-bundle/focused-chunks/chunk-CK6QFAPZ.js +0 -20
- package/dist/cli-bundle/focused-chunks/chunk-EZR3GHFE.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-H2WJWK7L.js +0 -56
- package/dist/cli-bundle/focused-chunks/chunk-NTPY5GSO.js +0 -3
- package/dist/cli-bundle/focused-chunks/chunk-P5O7MP5Y.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-PDMW2E36.js +0 -177
- package/dist/cli-bundle/focused-chunks/chunk-QTVCLMSZ.js +0 -6
- package/dist/cli-bundle/focused-chunks/chunk-QTZRBUYA.js +0 -8
- package/dist/cli-bundle/focused-chunks/chunk-SGQST3PQ.js +0 -12
- package/dist/cli-bundle/focused-chunks/chunk-UKHASMMP.js +0 -10
- package/dist/cli-bundle/focused-chunks/chunk-ZPEKQHOC.js +0 -2
|
@@ -1,84 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
* @module sdk/agent/subcommand-recovery
|
|
3
|
-
*
|
|
4
|
-
* Provides one SDK-owned refusal contract for unknown positional subcommands.
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="a9b23a46-0bba-5174-8793-dfc37016d1fb")}catch(e){}}();
|
|
8
|
-
import { levenshteinDistanceWithinLimit } from "../../core/shared/levenshtein.js";
|
|
9
|
-
import { EXIT_CODE } from "../../core/shared/constants.js";
|
|
10
|
-
import { PmCliError, } from "../../core/shared/errors.js";
|
|
11
|
-
/** Catalog-only alias retained for consumers of the former package lifecycle code. */
|
|
12
|
-
export const UNKNOWN_SUBCOMMAND_COMPATIBILITY_CODES = [
|
|
13
|
-
{ code: "unknown_lifecycle_action" },
|
|
14
|
-
];
|
|
15
|
-
function nearestSubcommand(token, allowed) {
|
|
16
|
-
const normalized = token.trim().toLowerCase();
|
|
17
|
-
if (normalized.length === 0)
|
|
18
|
-
return undefined;
|
|
19
|
-
const maxDistance = Math.floor(normalized.length / 3);
|
|
20
|
-
return allowed
|
|
21
|
-
.map((candidate) => ({
|
|
22
|
-
candidate,
|
|
23
|
-
distance: levenshteinDistanceWithinLimit(normalized, candidate.toLowerCase(), maxDistance) ?? Number.POSITIVE_INFINITY,
|
|
24
|
-
}))
|
|
25
|
-
.filter(({ distance }) => Number.isFinite(distance))
|
|
26
|
-
.sort((left, right) => left.distance !== right.distance
|
|
27
|
-
? left.distance - right.distance
|
|
28
|
-
: left.candidate.localeCompare(right.candidate))[0]?.candidate;
|
|
29
|
-
}
|
|
30
|
-
function renderCommand(tokens) {
|
|
31
|
-
return ["pm", ...tokens]
|
|
32
|
-
.map((token) => /^[A-Za-z0-9_./:@=-]+$/u.test(token) ? token : JSON.stringify(token))
|
|
33
|
-
.join(" ");
|
|
34
|
-
}
|
|
35
|
-
/** Build the shared typed refusal used by CLI, SDK, MCP, and packages. */
|
|
36
|
-
export function createUnknownSubcommandError(options) {
|
|
37
|
-
const commandPath = options.command_path.trim().replaceAll(/\s+/gu, " ");
|
|
38
|
-
const normalizedToken = options.token.trim();
|
|
39
|
-
const token = normalizedToken.length === 0 ? "<empty>" : normalizedToken;
|
|
40
|
-
const allowed = [...new Set(options.allowed.map((value) => value.trim()))]
|
|
41
|
-
.filter(Boolean)
|
|
42
|
-
.sort((left, right) => left.localeCompare(right));
|
|
43
|
-
if (commandPath.length === 0 || token.length === 0 || allowed.length === 0) {
|
|
44
|
-
throw new TypeError("Unknown-subcommand contracts require a path, token, and allowed set");
|
|
45
|
-
}
|
|
46
|
-
const commandTokens = commandPath.split(" ");
|
|
47
|
-
const trailingArgs = options.trailing_args ?? [];
|
|
48
|
-
const displayName = options.display_name ?? `pm ${commandPath}`;
|
|
49
|
-
const tokenKind = options.token_kind ?? "subcommand";
|
|
50
|
-
const nearest = options.retry_command
|
|
51
|
-
? undefined
|
|
52
|
-
: nearestSubcommand(token, allowed);
|
|
53
|
-
const attemptedCommand = renderCommand([
|
|
54
|
-
...commandTokens,
|
|
55
|
-
token,
|
|
56
|
-
...trailingArgs,
|
|
57
|
-
]);
|
|
58
|
-
const suggestedRetry = options.retry_command ??
|
|
59
|
-
(nearest
|
|
60
|
-
? renderCommand([...commandTokens, nearest, ...trailingArgs])
|
|
61
|
-
: undefined);
|
|
62
|
-
return new PmCliError(`Unknown ${displayName} ${tokenKind} "${token}". Allowed: ${allowed.join(", ")}${options.message_suffix ?? ""}`, options.exit_code ?? EXIT_CODE.USAGE, {
|
|
63
|
-
code: "unknown_subcommand",
|
|
64
|
-
reason: "unknown_positional_token",
|
|
65
|
-
examples: [
|
|
66
|
-
...(suggestedRetry ? [suggestedRetry] : []),
|
|
67
|
-
...(options.examples ?? []),
|
|
68
|
-
`pm ${commandPath} --help`,
|
|
69
|
-
],
|
|
70
|
-
nextSteps: suggestedRetry
|
|
71
|
-
? [`Retry with the suggested command: ${suggestedRetry}`]
|
|
72
|
-
: ["Choose one value from recovery.allowed_values."],
|
|
73
|
-
recovery: {
|
|
74
|
-
attempted_command: attemptedCommand,
|
|
75
|
-
allowed_values: allowed,
|
|
76
|
-
suggested_retry: suggestedRetry,
|
|
77
|
-
fallback_candidates: options.fallback_candidates,
|
|
78
|
-
},
|
|
79
|
-
});
|
|
80
|
-
}
|
|
81
|
-
/** Test-only access to deterministic nearest-match behavior. */
|
|
82
|
-
export const _testOnly = { nearestSubcommand, renderCommand };
|
|
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]="8ed4af4c-40cf-5902-930b-78a4758871b2")}catch(e2){}})();import{levenshteinDistanceWithinLimit}from"../../core/shared/levenshtein.js";import{EXIT_CODE}from"../../core/shared/constants.js";import{PmCliError}from"../../core/shared/errors.js";const UNKNOWN_SUBCOMMAND_COMPATIBILITY_CODES=[{code:"unknown_lifecycle_action"}];function nearestSubcommand(token,allowed){const normalized=token.trim().toLowerCase();if(normalized.length===0)return void 0;const maxDistance=Math.floor(normalized.length/3);return allowed.map(candidate=>({candidate,distance:levenshteinDistanceWithinLimit(normalized,candidate.toLowerCase(),maxDistance)??Number.POSITIVE_INFINITY})).filter(({distance})=>Number.isFinite(distance)).sort((left,right)=>left.distance!==right.distance?left.distance-right.distance:left.candidate.localeCompare(right.candidate))[0]?.candidate}function renderCommand(tokens){return["pm",...tokens].map(token=>/^[A-Za-z0-9_./:@=-]+$/u.test(token)?token:JSON.stringify(token)).join(" ")}function createUnknownSubcommandError(options){const commandPath=options.command_path.trim().replaceAll(/\s+/gu," ");const normalizedToken=options.token.trim();const token=normalizedToken.length===0?"<empty>":normalizedToken;const allowed=[...new Set(options.allowed.map(value=>value.trim()))].filter(Boolean).sort((left,right)=>left.localeCompare(right));if(commandPath.length===0||token.length===0||allowed.length===0){throw new TypeError("Unknown-subcommand contracts require a path, token, and allowed set")}const commandTokens=commandPath.split(" ");const trailingArgs=options.trailing_args??[];const displayName=options.display_name??`pm ${commandPath}`;const tokenKind=options.token_kind??"subcommand";const nearest=options.retry_command?void 0:nearestSubcommand(token,allowed);const attemptedCommand=renderCommand([...commandTokens,token,...trailingArgs]);const suggestedRetry=options.retry_command??(nearest?renderCommand([...commandTokens,nearest,...trailingArgs]):void 0);return new PmCliError(`Unknown ${displayName} ${tokenKind} "${token}". Allowed: ${allowed.join(", ")}${options.message_suffix??""}`,options.exit_code??EXIT_CODE.USAGE,{code:"unknown_subcommand",reason:"unknown_positional_token",examples:[...suggestedRetry?[suggestedRetry]:[],...options.examples??[],`pm ${commandPath} --help`],nextSteps:suggestedRetry?[`Retry with the suggested command: ${suggestedRetry}`]:["Choose one value from recovery.allowed_values."],recovery:{attempted_command:attemptedCommand,allowed_values:allowed,suggested_retry:suggestedRetry,fallback_candidates:options.fallback_candidates}})}const _testOnly={nearestSubcommand,renderCommand};export{UNKNOWN_SUBCOMMAND_COMPATIBILITY_CODES,_testOnly,createUnknownSubcommandError};
|
|
83
2
|
//# sourceMappingURL=subcommand-recovery.js.map
|
|
84
|
-
//# debugId=a9b23a46-0bba-5174-8793-dfc37016d1fb
|
|
@@ -1,198 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
* @module sdk/agent-task-transcript-contracts
|
|
3
|
-
*
|
|
4
|
-
* Defines and validates replayable agent-task transcripts without adding the
|
|
5
|
-
* SDK-only parser to ordinary CLI command bundles.
|
|
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]="006109f8-cb09-5a91-8929-7ac7521753b6")}catch(e){}}();
|
|
9
|
-
import { isPmSuccessfulExitCode, resolvePmCommandExitContract, } from "../cli-contracts/command-exit-contracts.js";
|
|
10
|
-
import { parseBootstrapCommandName } from "../cli-contracts/bootstrap-command-scanner.js";
|
|
11
|
-
import { PM_OUTPUT_ENVELOPE_KINDS, resolvePmCommandOutputEnvelope, } from "../output-contracts.js";
|
|
12
|
-
/** Stable schema version for replayable agent-task transcript corpora. */
|
|
13
|
-
export const PM_AGENT_TASK_TRANSCRIPT_VERSION = 2;
|
|
14
|
-
/** Supported strategies for measuring one transcript step's output cost. */
|
|
15
|
-
export const PM_AGENT_TASK_ACCOUNTING_MODES = [
|
|
16
|
-
"self_reported",
|
|
17
|
-
"independent_transport",
|
|
18
|
-
];
|
|
19
|
-
function isRecord(value) {
|
|
20
|
-
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
21
|
-
}
|
|
22
|
-
function readTranscriptString(value, field) {
|
|
23
|
-
if (typeof value !== "string" || value.trim().length === 0) {
|
|
24
|
-
throw new TypeError(`${field} must be a non-empty string`);
|
|
25
|
-
}
|
|
26
|
-
return value.trim();
|
|
27
|
-
}
|
|
28
|
-
function readTranscriptStringArray(value, field, preserveWhitespace = false) {
|
|
29
|
-
if (!Array.isArray(value) || value.length === 0) {
|
|
30
|
-
throw new TypeError(`${field} must be a non-empty string array`);
|
|
31
|
-
}
|
|
32
|
-
return value.map((entry, index) => {
|
|
33
|
-
const normalized = readTranscriptString(entry, `${field}[${String(index)}]`);
|
|
34
|
-
return preserveWhitespace ? entry : normalized;
|
|
35
|
-
});
|
|
36
|
-
}
|
|
37
|
-
function readOptionalTranscriptString(value, field) {
|
|
38
|
-
return value === undefined ? undefined : readTranscriptString(value, field);
|
|
39
|
-
}
|
|
40
|
-
function readExpectedFieldValues(value, field) {
|
|
41
|
-
if (value === undefined)
|
|
42
|
-
return undefined;
|
|
43
|
-
if (!isRecord(value) || Object.keys(value).length === 0) {
|
|
44
|
-
throw new TypeError(`${field} must be a non-empty object`);
|
|
45
|
-
}
|
|
46
|
-
const entries = Object.entries(value).map(([path, expectedValue]) => {
|
|
47
|
-
if (path.length === 0 ||
|
|
48
|
-
path.split(".").some((segment) => segment.length === 0)) {
|
|
49
|
-
throw new TypeError(`${field} must use dot-separated own-property paths`);
|
|
50
|
-
}
|
|
51
|
-
if (expectedValue !== null &&
|
|
52
|
-
typeof expectedValue !== "string" &&
|
|
53
|
-
typeof expectedValue !== "boolean" &&
|
|
54
|
-
(typeof expectedValue !== "number" || !Number.isFinite(expectedValue))) {
|
|
55
|
-
throw new TypeError(`${field} values must be JSON primitives`);
|
|
56
|
-
}
|
|
57
|
-
return [path, expectedValue];
|
|
58
|
-
});
|
|
59
|
-
return Object.fromEntries(entries);
|
|
60
|
-
}
|
|
61
|
-
function assertTranscriptStepOutputContract(field, args, exitCode, outputKind, errorCode, refusalSurface) {
|
|
62
|
-
if (outputKind === "refusal") {
|
|
63
|
-
if (isPmSuccessfulExitCode(exitCode) ||
|
|
64
|
-
errorCode === undefined ||
|
|
65
|
-
refusalSurface === undefined) {
|
|
66
|
-
throw new TypeError(`${field} refusal steps require a non-success exit, error code, and refusal surface`);
|
|
67
|
-
}
|
|
68
|
-
return;
|
|
69
|
-
}
|
|
70
|
-
if (errorCode !== undefined || refusalSurface !== undefined) {
|
|
71
|
-
throw new TypeError(`${field} only refusal steps may declare expected_error_code or expected_refusal_surface`);
|
|
72
|
-
}
|
|
73
|
-
const command = parseBootstrapCommandName(args);
|
|
74
|
-
if (command === undefined) {
|
|
75
|
-
throw new TypeError(`${field}.args must identify a command after global flags`);
|
|
76
|
-
}
|
|
77
|
-
const exitContract = resolvePmCommandExitContract(command);
|
|
78
|
-
if (!isPmSuccessfulExitCode(exitCode) ||
|
|
79
|
-
(exitCode !== 0 &&
|
|
80
|
-
!exitContract?.exit_codes.some((declaredExitCode) => declaredExitCode === exitCode))) {
|
|
81
|
-
throw new TypeError(`${field} successful output must use exit code 0 or a command-declared successful effect exit`);
|
|
82
|
-
}
|
|
83
|
-
const declaredKind = resolvePmCommandOutputEnvelope(command).kind;
|
|
84
|
-
if (outputKind !== declaredKind) {
|
|
85
|
-
throw new TypeError(`${field} expected ${outputKind}, but ${command} declares ${declaredKind}`);
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
function parseAgentTaskTranscriptStep(value, taskId, index) {
|
|
89
|
-
if (!isRecord(value)) {
|
|
90
|
-
throw new TypeError(`tasks.${taskId}.steps[${String(index)}] must be an object`);
|
|
91
|
-
}
|
|
92
|
-
const field = `tasks.${taskId}.steps[${String(index)}]`;
|
|
93
|
-
const id = readTranscriptString(value.id, `${field}.id`);
|
|
94
|
-
const args = readTranscriptStringArray(value.args, `${field}.args`, true);
|
|
95
|
-
const expectedExitCode = value.expected_exit_code;
|
|
96
|
-
if (typeof expectedExitCode !== "number" ||
|
|
97
|
-
!Number.isSafeInteger(expectedExitCode)) {
|
|
98
|
-
throw new TypeError(`${field}.expected_exit_code must be a safe integer`);
|
|
99
|
-
}
|
|
100
|
-
const rawOutputKind = value.expected_output_kind;
|
|
101
|
-
if (rawOutputKind !== "refusal" &&
|
|
102
|
-
!PM_OUTPUT_ENVELOPE_KINDS.includes(rawOutputKind)) {
|
|
103
|
-
throw new TypeError(`${field}.expected_output_kind is unsupported`);
|
|
104
|
-
}
|
|
105
|
-
const expectedOutputKind = rawOutputKind;
|
|
106
|
-
const rawAccountingMode = value.expected_accounting_mode;
|
|
107
|
-
if (!PM_AGENT_TASK_ACCOUNTING_MODES.includes(rawAccountingMode)) {
|
|
108
|
-
throw new TypeError(`${field}.expected_accounting_mode is unsupported`);
|
|
109
|
-
}
|
|
110
|
-
const expectedAccountingMode = rawAccountingMode;
|
|
111
|
-
if (expectedAccountingMode === "independent_transport" &&
|
|
112
|
-
expectedOutputKind !== "refusal") {
|
|
113
|
-
throw new TypeError(`${field} independent_transport accounting is supported only for refusal steps`);
|
|
114
|
-
}
|
|
115
|
-
const requiredFields = readTranscriptStringArray(value.required_fields, `${field}.required_fields`);
|
|
116
|
-
if (requiredFields.some((requiredField) => requiredField.split(".").some((segment) => segment.length === 0))) {
|
|
117
|
-
throw new TypeError(`${field}.required_fields must contain dot-separated own-property paths`);
|
|
118
|
-
}
|
|
119
|
-
const expectedFieldValues = readExpectedFieldValues(value.expected_field_values, `${field}.expected_field_values`);
|
|
120
|
-
const expectedErrorCode = readOptionalTranscriptString(value.expected_error_code, `${field}.expected_error_code`);
|
|
121
|
-
const expectedRefusalSurface = readOptionalTranscriptString(value.expected_refusal_surface, `${field}.expected_refusal_surface`);
|
|
122
|
-
const recoveryFor = readOptionalTranscriptString(value.recovery_for, `${field}.recovery_for`);
|
|
123
|
-
assertTranscriptStepOutputContract(field, args, expectedExitCode, expectedOutputKind, expectedErrorCode, expectedRefusalSurface);
|
|
124
|
-
return {
|
|
125
|
-
id,
|
|
126
|
-
args,
|
|
127
|
-
expected_exit_code: expectedExitCode,
|
|
128
|
-
expected_output_kind: expectedOutputKind,
|
|
129
|
-
expected_accounting_mode: expectedAccountingMode,
|
|
130
|
-
required_fields: requiredFields,
|
|
131
|
-
...(expectedFieldValues
|
|
132
|
-
? { expected_field_values: expectedFieldValues }
|
|
133
|
-
: {}),
|
|
134
|
-
...(expectedErrorCode ? { expected_error_code: expectedErrorCode } : {}),
|
|
135
|
-
...(expectedRefusalSurface
|
|
136
|
-
? { expected_refusal_surface: expectedRefusalSurface }
|
|
137
|
-
: {}),
|
|
138
|
-
...(recoveryFor ? { recovery_for: recoveryFor } : {}),
|
|
139
|
-
};
|
|
140
|
-
}
|
|
141
|
-
function parseAgentTaskTranscript(value, index) {
|
|
142
|
-
if (!isRecord(value)) {
|
|
143
|
-
throw new TypeError(`tasks[${String(index)}] must be an object`);
|
|
144
|
-
}
|
|
145
|
-
const id = readTranscriptString(value.id, `tasks[${String(index)}].id`);
|
|
146
|
-
const description = readTranscriptString(value.description, `tasks.${id}.description`);
|
|
147
|
-
if (!Array.isArray(value.steps) || value.steps.length === 0) {
|
|
148
|
-
throw new TypeError(`tasks.${id}.steps must be a non-empty array`);
|
|
149
|
-
}
|
|
150
|
-
const steps = value.steps.map((step, stepIndex) => parseAgentTaskTranscriptStep(step, id, stepIndex));
|
|
151
|
-
const priorSteps = new Map();
|
|
152
|
-
for (const step of steps) {
|
|
153
|
-
if (priorSteps.has(step.id)) {
|
|
154
|
-
throw new TypeError(`tasks.${id} contains duplicate step id ${step.id}`);
|
|
155
|
-
}
|
|
156
|
-
if (step.recovery_for !== undefined) {
|
|
157
|
-
const refusal = priorSteps.get(step.recovery_for);
|
|
158
|
-
if (refusal?.expected_output_kind !== "refusal" ||
|
|
159
|
-
step.expected_output_kind === "refusal") {
|
|
160
|
-
throw new TypeError(`tasks.${id}.${step.id} recovery_for must reference an earlier refusal and declare successful output`);
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
priorSteps.set(step.id, step);
|
|
164
|
-
}
|
|
165
|
-
if (steps.at(-1)?.expected_output_kind === "refusal") {
|
|
166
|
-
throw new TypeError(`tasks.${id} completed task must terminate with successful output`);
|
|
167
|
-
}
|
|
168
|
-
for (const step of steps) {
|
|
169
|
-
if (step.expected_output_kind === "refusal" &&
|
|
170
|
-
!steps.some((candidate) => candidate.recovery_for === step.id)) {
|
|
171
|
-
throw new TypeError(`tasks.${id}.${step.id} refusal must have a later successful recovery_for step`);
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
return { id, description, steps };
|
|
175
|
-
}
|
|
176
|
-
/** Parse and fail closed on malformed or internally inconsistent transcripts. */
|
|
177
|
-
export function parsePmAgentTaskTranscriptCorpus(value) {
|
|
178
|
-
if (!isRecord(value)) {
|
|
179
|
-
throw new TypeError("agent-task transcript corpus must be an object");
|
|
180
|
-
}
|
|
181
|
-
if (value.version !== PM_AGENT_TASK_TRANSCRIPT_VERSION) {
|
|
182
|
-
throw new TypeError(`agent-task transcript corpus version must be ${String(PM_AGENT_TASK_TRANSCRIPT_VERSION)}`);
|
|
183
|
-
}
|
|
184
|
-
if (!Array.isArray(value.tasks) || value.tasks.length === 0) {
|
|
185
|
-
throw new TypeError("agent-task transcript corpus tasks must be non-empty");
|
|
186
|
-
}
|
|
187
|
-
const tasks = value.tasks.map((task, index) => parseAgentTaskTranscript(task, index));
|
|
188
|
-
const taskIds = new Set();
|
|
189
|
-
for (const task of tasks) {
|
|
190
|
-
if (taskIds.has(task.id)) {
|
|
191
|
-
throw new TypeError(`duplicate agent-task transcript id ${task.id}`);
|
|
192
|
-
}
|
|
193
|
-
taskIds.add(task.id);
|
|
194
|
-
}
|
|
195
|
-
return { version: PM_AGENT_TASK_TRANSCRIPT_VERSION, tasks };
|
|
196
|
-
}
|
|
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]="4d2bee02-8003-578c-9d25-32755534f8ff")}catch(e2){}})();import{isPmSuccessfulExitCode,resolvePmCommandExitContract}from"../cli-contracts/command-exit-contracts.js";import{findBootstrapCommandTokenIndex,parseBootstrapCommandName}from"../cli-contracts/bootstrap-command-scanner.js";import{resolvePmHistoryOperation}from"../cli-contracts/command-aliases.js";import{PM_OUTPUT_ENVELOPE_KINDS,resolvePmCommandOutputEnvelope}from"../output-contracts.js";const PM_AGENT_TASK_TRANSCRIPT_VERSION=2;const PM_AGENT_TASK_ACCOUNTING_MODES=["self_reported","independent_transport"];function isRecord(value){return typeof value==="object"&&value!==null&&!Array.isArray(value)}function readTranscriptString(value,field){if(typeof value!=="string"||value.trim().length===0){throw new TypeError(`${field} must be a non-empty string`)}return value.trim()}function readTranscriptStringArray(value,field,preserveWhitespace=false){if(!Array.isArray(value)||value.length===0){throw new TypeError(`${field} must be a non-empty string array`)}return value.map((entry,index)=>{const normalized=readTranscriptString(entry,`${field}[${String(index)}]`);return preserveWhitespace?entry:normalized})}function readOptionalTranscriptString(value,field){return value===void 0?void 0:readTranscriptString(value,field)}function readExpectedFieldValues(value,field){if(value===void 0)return void 0;if(!isRecord(value)||Object.keys(value).length===0){throw new TypeError(`${field} must be a non-empty object`)}const entries=Object.entries(value).map(([path,expectedValue])=>{if(path.length===0||path.split(".").some(segment=>segment.length===0)){throw new TypeError(`${field} must use dot-separated own-property paths`)}if(expectedValue!==null&&typeof expectedValue!=="string"&&typeof expectedValue!=="boolean"&&(typeof expectedValue!=="number"||!Number.isFinite(expectedValue))){throw new TypeError(`${field} values must be JSON primitives`)}return[path,expectedValue]});return Object.fromEntries(entries)}function assertTranscriptStepOutputContract(field,args,exitCode,outputKind,errorCode,refusalSurface){if(outputKind==="refusal"){if(isPmSuccessfulExitCode(exitCode)||errorCode===void 0||refusalSurface===void 0){throw new TypeError(`${field} refusal steps require a non-success exit, error code, and refusal surface`)}return}if(errorCode!==void 0||refusalSurface!==void 0){throw new TypeError(`${field} only refusal steps may declare expected_error_code or expected_refusal_surface`)}const commandIndex=findBootstrapCommandTokenIndex(args);if(commandIndex===void 0){throw new TypeError(`${field}.args must identify a command after global flags`)}let command=args[commandIndex].trim().toLowerCase();if(command==="history"){const operation=parseBootstrapCommandName(args.slice(commandIndex+1));if(operation!==void 0){command=resolvePmHistoryOperation(`history ${operation}`)}}const exitContract=resolvePmCommandExitContract(command);if(!isPmSuccessfulExitCode(exitCode)||exitCode!==0&&!exitContract?.exit_codes.some(declaredExitCode=>declaredExitCode===exitCode)){throw new TypeError(`${field} successful output must use exit code 0 or a command-declared successful effect exit`)}const declaredKind=resolvePmCommandOutputEnvelope(command).kind;if(outputKind!==declaredKind){throw new TypeError(`${field} expected ${outputKind}, but ${command} declares ${declaredKind}`)}}function parseAgentTaskTranscriptStep(value,taskId,index){if(!isRecord(value)){throw new TypeError(`tasks.${taskId}.steps[${String(index)}] must be an object`)}const field=`tasks.${taskId}.steps[${String(index)}]`;const id=readTranscriptString(value.id,`${field}.id`);const args=readTranscriptStringArray(value.args,`${field}.args`,true);const expectedExitCode=value.expected_exit_code;if(typeof expectedExitCode!=="number"||!Number.isSafeInteger(expectedExitCode)){throw new TypeError(`${field}.expected_exit_code must be a safe integer`)}const rawOutputKind=value.expected_output_kind;if(rawOutputKind!=="refusal"&&!PM_OUTPUT_ENVELOPE_KINDS.includes(rawOutputKind)){throw new TypeError(`${field}.expected_output_kind is unsupported`)}const expectedOutputKind=rawOutputKind;const rawAccountingMode=value.expected_accounting_mode;if(!PM_AGENT_TASK_ACCOUNTING_MODES.includes(rawAccountingMode)){throw new TypeError(`${field}.expected_accounting_mode is unsupported`)}const expectedAccountingMode=rawAccountingMode;if(expectedAccountingMode==="independent_transport"&&expectedOutputKind!=="refusal"){throw new TypeError(`${field} independent_transport accounting is supported only for refusal steps`)}const requiredFields=readTranscriptStringArray(value.required_fields,`${field}.required_fields`);if(requiredFields.some(requiredField=>requiredField.split(".").some(segment=>segment.length===0))){throw new TypeError(`${field}.required_fields must contain dot-separated own-property paths`)}const expectedFieldValues=readExpectedFieldValues(value.expected_field_values,`${field}.expected_field_values`);const expectedErrorCode=readOptionalTranscriptString(value.expected_error_code,`${field}.expected_error_code`);const expectedRefusalSurface=readOptionalTranscriptString(value.expected_refusal_surface,`${field}.expected_refusal_surface`);const recoveryFor=readOptionalTranscriptString(value.recovery_for,`${field}.recovery_for`);assertTranscriptStepOutputContract(field,args,expectedExitCode,expectedOutputKind,expectedErrorCode,expectedRefusalSurface);return{id,args,expected_exit_code:expectedExitCode,expected_output_kind:expectedOutputKind,expected_accounting_mode:expectedAccountingMode,required_fields:requiredFields,...expectedFieldValues?{expected_field_values:expectedFieldValues}:{},...expectedErrorCode?{expected_error_code:expectedErrorCode}:{},...expectedRefusalSurface?{expected_refusal_surface:expectedRefusalSurface}:{},...recoveryFor?{recovery_for:recoveryFor}:{}}}function parseAgentTaskTranscript(value,index){if(!isRecord(value)){throw new TypeError(`tasks[${String(index)}] must be an object`)}const id=readTranscriptString(value.id,`tasks[${String(index)}].id`);const description=readTranscriptString(value.description,`tasks.${id}.description`);if(!Array.isArray(value.steps)||value.steps.length===0){throw new TypeError(`tasks.${id}.steps must be a non-empty array`)}const steps=value.steps.map((step,stepIndex)=>parseAgentTaskTranscriptStep(step,id,stepIndex));const priorSteps=new Map;for(const step of steps){if(priorSteps.has(step.id)){throw new TypeError(`tasks.${id} contains duplicate step id ${step.id}`)}if(step.recovery_for!==void 0){const refusal=priorSteps.get(step.recovery_for);if(refusal?.expected_output_kind!=="refusal"||step.expected_output_kind==="refusal"){throw new TypeError(`tasks.${id}.${step.id} recovery_for must reference an earlier refusal and declare successful output`)}}priorSteps.set(step.id,step)}if(steps.at(-1)?.expected_output_kind==="refusal"){throw new TypeError(`tasks.${id} completed task must terminate with successful output`)}for(const step of steps){if(step.expected_output_kind==="refusal"&&!steps.some(candidate=>candidate.recovery_for===step.id)){throw new TypeError(`tasks.${id}.${step.id} refusal must have a later successful recovery_for step`)}}return{id,description,steps}}function parsePmAgentTaskTranscriptCorpus(value){if(!isRecord(value)){throw new TypeError("agent-task transcript corpus must be an object")}if(value.version!==PM_AGENT_TASK_TRANSCRIPT_VERSION){throw new TypeError(`agent-task transcript corpus version must be ${String(PM_AGENT_TASK_TRANSCRIPT_VERSION)}`)}if(!Array.isArray(value.tasks)||value.tasks.length===0){throw new TypeError("agent-task transcript corpus tasks must be non-empty")}const tasks=value.tasks.map((task,index)=>parseAgentTaskTranscript(task,index));const taskIds=new Set;for(const task of tasks){if(taskIds.has(task.id)){throw new TypeError(`duplicate agent-task transcript id ${task.id}`)}taskIds.add(task.id)}return{version:PM_AGENT_TASK_TRANSCRIPT_VERSION,tasks}}export{PM_AGENT_TASK_ACCOUNTING_MODES,PM_AGENT_TASK_TRANSCRIPT_VERSION,parsePmAgentTaskTranscriptCorpus};
|
|
197
2
|
//# sourceMappingURL=task-transcript-contracts.js.map
|
|
198
|
-
//# debugId=006109f8-cb09-5a91-8929-7ac7521753b6
|
|
@@ -1,127 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
* @module sdk/agent/tracker-preflight-contracts
|
|
3
|
-
*
|
|
4
|
-
* Declares and scores executable recovery for tracker filesystem preflight failures.
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="941a11a9-f756-56b3-9dc1-8afd78bc9328")}catch(e){}}();
|
|
8
|
-
const TRACKER_PREFLIGHT_RECOVERY_CONTRACTS = [
|
|
9
|
-
{
|
|
10
|
-
probe_id: "tracker-root-missing",
|
|
11
|
-
failure_kind: "missing_root",
|
|
12
|
-
expected_error_code: "tracker_root_missing",
|
|
13
|
-
expected_exit_code: 3,
|
|
14
|
-
recovery_kind: "initialize",
|
|
15
|
-
},
|
|
16
|
-
{
|
|
17
|
-
probe_id: "tracker-root-settings-missing",
|
|
18
|
-
failure_kind: "settings_missing",
|
|
19
|
-
expected_error_code: "tracker_not_initialized",
|
|
20
|
-
expected_exit_code: 3,
|
|
21
|
-
recovery_kind: "initialize",
|
|
22
|
-
},
|
|
23
|
-
{
|
|
24
|
-
probe_id: "tracker-root-not-directory",
|
|
25
|
-
failure_kind: "not_directory",
|
|
26
|
-
expected_error_code: "tracker_root_not_directory",
|
|
27
|
-
expected_exit_code: 2,
|
|
28
|
-
recovery_kind: "select_directory",
|
|
29
|
-
},
|
|
30
|
-
{
|
|
31
|
-
probe_id: "tracker-root-unreadable",
|
|
32
|
-
failure_kind: "unreadable_root",
|
|
33
|
-
expected_error_code: "tracker_root_unreadable",
|
|
34
|
-
expected_exit_code: 1,
|
|
35
|
-
recovery_kind: "repair_permissions",
|
|
36
|
-
},
|
|
37
|
-
];
|
|
38
|
-
/** Return defensive copies of every core tracker preflight recovery contract. */
|
|
39
|
-
export function listTrackerPreflightRecoveryContracts() {
|
|
40
|
-
return TRACKER_PREFLIGHT_RECOVERY_CONTRACTS.map((contract) => ({
|
|
41
|
-
...contract,
|
|
42
|
-
}));
|
|
43
|
-
}
|
|
44
|
-
function findTrackerPreflightObservationFindings(contract, observation) {
|
|
45
|
-
const findings = [];
|
|
46
|
-
if (observation.error_code !== contract.expected_error_code) {
|
|
47
|
-
findings.push({
|
|
48
|
-
code: "error_code_mismatch",
|
|
49
|
-
probe_id: contract.probe_id,
|
|
50
|
-
detail: `Expected ${contract.expected_error_code}, received ${observation.error_code}.`,
|
|
51
|
-
});
|
|
52
|
-
}
|
|
53
|
-
if (observation.exit_code !== contract.expected_exit_code) {
|
|
54
|
-
findings.push({
|
|
55
|
-
code: "exit_code_mismatch",
|
|
56
|
-
probe_id: contract.probe_id,
|
|
57
|
-
detail: `Expected exit ${contract.expected_exit_code}, received ${observation.exit_code}.`,
|
|
58
|
-
});
|
|
59
|
-
}
|
|
60
|
-
if (observation.recovery_kind !== contract.recovery_kind) {
|
|
61
|
-
findings.push({
|
|
62
|
-
code: "recovery_kind_mismatch",
|
|
63
|
-
probe_id: contract.probe_id,
|
|
64
|
-
detail: `Expected ${contract.recovery_kind}, received ${observation.recovery_kind}.`,
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
|
-
const initIndex = observation.suggested_retry_args.indexOf("init");
|
|
68
|
-
const validInitCommand = initIndex === 0 ||
|
|
69
|
-
(initIndex === 2 &&
|
|
70
|
-
observation.suggested_retry_args[0] === "--pm-path" &&
|
|
71
|
-
observation.suggested_retry_args[1]?.length > 0);
|
|
72
|
-
if (contract.recovery_kind === "initialize" && !validInitCommand) {
|
|
73
|
-
findings.push({
|
|
74
|
-
code: "missing_init_recovery",
|
|
75
|
-
probe_id: contract.probe_id,
|
|
76
|
-
detail: "Missing and uninitialized roots must emit a tokenized init retry.",
|
|
77
|
-
});
|
|
78
|
-
}
|
|
79
|
-
if (observation.unsafe_init_recommended ||
|
|
80
|
-
(contract.recovery_kind !== "initialize" &&
|
|
81
|
-
observation.suggested_retry_args.includes("init"))) {
|
|
82
|
-
findings.push({
|
|
83
|
-
code: "unsafe_init_recovery",
|
|
84
|
-
probe_id: contract.probe_id,
|
|
85
|
-
detail: "A tracker root that cannot be initialized safely must not recommend initialization.",
|
|
86
|
-
});
|
|
87
|
-
}
|
|
88
|
-
if (!observation.retry_succeeded) {
|
|
89
|
-
findings.push({
|
|
90
|
-
code: "retry_failed",
|
|
91
|
-
probe_id: contract.probe_id,
|
|
92
|
-
detail: "The emitted retry or safe alternate-root recovery did not execute successfully.",
|
|
93
|
-
});
|
|
94
|
-
}
|
|
95
|
-
return findings;
|
|
96
|
-
}
|
|
97
|
-
/** Score runtime observations against the complete tracker preflight recovery corpus. */
|
|
98
|
-
export function scoreTrackerPreflightRecoveryClosure(observations) {
|
|
99
|
-
const observationsByProbe = new Map(observations.map((observation) => [observation.probe_id, observation]));
|
|
100
|
-
const findings = [];
|
|
101
|
-
let closedProbeCount = 0;
|
|
102
|
-
for (const contract of TRACKER_PREFLIGHT_RECOVERY_CONTRACTS) {
|
|
103
|
-
const observation = observationsByProbe.get(contract.probe_id);
|
|
104
|
-
if (observation === undefined) {
|
|
105
|
-
findings.push({
|
|
106
|
-
code: "missing_probe",
|
|
107
|
-
probe_id: contract.probe_id,
|
|
108
|
-
detail: "No runtime observation was supplied for this contract.",
|
|
109
|
-
});
|
|
110
|
-
continue;
|
|
111
|
-
}
|
|
112
|
-
const observationFindings = findTrackerPreflightObservationFindings(contract, observation);
|
|
113
|
-
findings.push(...observationFindings);
|
|
114
|
-
if (observationFindings.length === 0)
|
|
115
|
-
closedProbeCount += 1;
|
|
116
|
-
}
|
|
117
|
-
findings.sort((left, right) => left.probe_id.localeCompare(right.probe_id) ||
|
|
118
|
-
left.code.localeCompare(right.code));
|
|
119
|
-
return {
|
|
120
|
-
ok: findings.length === 0,
|
|
121
|
-
probe_count: TRACKER_PREFLIGHT_RECOVERY_CONTRACTS.length,
|
|
122
|
-
closed_probe_count: closedProbeCount,
|
|
123
|
-
findings,
|
|
124
|
-
};
|
|
125
|
-
}
|
|
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]="5053cc84-63e5-50d3-9a4c-00c2a485ed69")}catch(e2){}})();const TRACKER_PREFLIGHT_RECOVERY_CONTRACTS=[{probe_id:"tracker-root-missing",failure_kind:"missing_root",expected_error_code:"tracker_root_missing",expected_exit_code:3,recovery_kind:"initialize"},{probe_id:"tracker-root-settings-missing",failure_kind:"settings_missing",expected_error_code:"tracker_not_initialized",expected_exit_code:3,recovery_kind:"initialize"},{probe_id:"tracker-root-not-directory",failure_kind:"not_directory",expected_error_code:"tracker_root_not_directory",expected_exit_code:2,recovery_kind:"select_directory"},{probe_id:"tracker-root-unreadable",failure_kind:"unreadable_root",expected_error_code:"tracker_root_unreadable",expected_exit_code:1,recovery_kind:"repair_permissions"}];function listTrackerPreflightRecoveryContracts(){return TRACKER_PREFLIGHT_RECOVERY_CONTRACTS.map(contract=>({...contract}))}function findTrackerPreflightObservationFindings(contract,observation){const findings=[];if(observation.error_code!==contract.expected_error_code){findings.push({code:"error_code_mismatch",probe_id:contract.probe_id,detail:`Expected ${contract.expected_error_code}, received ${observation.error_code}.`})}if(observation.exit_code!==contract.expected_exit_code){findings.push({code:"exit_code_mismatch",probe_id:contract.probe_id,detail:`Expected exit ${contract.expected_exit_code}, received ${observation.exit_code}.`})}if(observation.recovery_kind!==contract.recovery_kind){findings.push({code:"recovery_kind_mismatch",probe_id:contract.probe_id,detail:`Expected ${contract.recovery_kind}, received ${observation.recovery_kind}.`})}const initIndex=observation.suggested_retry_args.indexOf("init");const validInitCommand=initIndex===0||initIndex===2&&observation.suggested_retry_args[0]==="--pm-path"&&observation.suggested_retry_args[1]?.length>0;if(contract.recovery_kind==="initialize"&&!validInitCommand){findings.push({code:"missing_init_recovery",probe_id:contract.probe_id,detail:"Missing and uninitialized roots must emit a tokenized init retry."})}if(observation.unsafe_init_recommended||contract.recovery_kind!=="initialize"&&observation.suggested_retry_args.includes("init")){findings.push({code:"unsafe_init_recovery",probe_id:contract.probe_id,detail:"A tracker root that cannot be initialized safely must not recommend initialization."})}if(!observation.retry_succeeded){findings.push({code:"retry_failed",probe_id:contract.probe_id,detail:"The emitted retry or safe alternate-root recovery did not execute successfully."})}return findings}function scoreTrackerPreflightRecoveryClosure(observations){const observationsByProbe=new Map(observations.map(observation=>[observation.probe_id,observation]));const findings=[];let closedProbeCount=0;for(const contract of TRACKER_PREFLIGHT_RECOVERY_CONTRACTS){const observation=observationsByProbe.get(contract.probe_id);if(observation===void 0){findings.push({code:"missing_probe",probe_id:contract.probe_id,detail:"No runtime observation was supplied for this contract."});continue}const observationFindings=findTrackerPreflightObservationFindings(contract,observation);findings.push(...observationFindings);if(observationFindings.length===0)closedProbeCount+=1}findings.sort((left,right)=>left.probe_id.localeCompare(right.probe_id)||left.code.localeCompare(right.code));return{ok:findings.length===0,probe_count:TRACKER_PREFLIGHT_RECOVERY_CONTRACTS.length,closed_probe_count:closedProbeCount,findings}}export{listTrackerPreflightRecoveryContracts,scoreTrackerPreflightRecoveryClosure};
|
|
126
2
|
//# sourceMappingURL=tracker-preflight-contracts.js.map
|
|
127
|
-
//# debugId=941a11a9-f756-56b3-9dc1-8afd78bc9328
|