@unbrained/pm-cli 2026.7.17 → 2026.7.18
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/.claude-plugin/marketplace.json +2 -2
- package/CHANGELOG.md +13 -0
- package/dist/cli/commands/close.d.ts +1 -1
- package/dist/cli/commands/close.js +3 -3
- package/dist/cli/commands/close.js.map +1 -1
- package/dist/cli/commands/completion.js +47 -5
- package/dist/cli/commands/completion.js.map +1 -1
- package/dist/cli/commands/context.d.ts +2 -2
- package/dist/cli/commands/context.js +42 -28
- package/dist/cli/commands/context.js.map +1 -1
- package/dist/cli/commands/contracts.js +5 -3
- package/dist/cli/commands/contracts.js.map +1 -1
- package/dist/cli/commands/graph.d.ts +7 -0
- package/dist/cli/commands/graph.js +11 -0
- package/dist/cli/commands/graph.js.map +1 -0
- package/dist/cli/commands/index.d.ts +1 -0
- package/dist/cli/commands/index.js +3 -2
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/next.d.ts +1 -1
- package/dist/cli/commands/next.js +3 -3
- package/dist/cli/commands/next.js.map +1 -1
- package/dist/cli/main.js +3 -2
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/register-list-query.js +49 -7
- package/dist/cli/register-list-query.js.map +1 -1
- package/dist/cli/register-mutation.js +7 -3
- package/dist/cli/register-mutation.js.map +1 -1
- package/dist/cli-bundle/bundle-manifest.json +157 -149
- package/dist/cli-bundle/chunks/{chunk-N7I2DGLP.js → chunk-35FHWD4C.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-37V5MXAU.js.map → chunk-35FHWD4C.js.map} +1 -7
- package/dist/cli-bundle/chunks/{chunk-MSGETE6I.js → chunk-3CUQZNQ6.js} +67 -509
- package/dist/cli-bundle/chunks/chunk-3CUQZNQ6.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-3QDR6ZLU.js +800 -0
- package/dist/cli-bundle/chunks/chunk-3QDR6ZLU.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-QNUAZYGW.js → chunk-43UMFKCK.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-HF63SBLC.js → chunk-6VHUGVNP.js} +39 -16
- package/dist/cli-bundle/chunks/chunk-6VHUGVNP.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-B6SH2YNN.js → chunk-7R6UIHYY.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-NCAFUBJX.js → chunk-7UCY6DR5.js} +183 -12
- package/dist/cli-bundle/chunks/chunk-7UCY6DR5.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-23TCGBRK.js → chunk-ADXDCAKP.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-7LTCLTRG.js → chunk-AXRT7K5V.js} +16 -3
- package/dist/cli-bundle/chunks/chunk-AXRT7K5V.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-P56LKFQX.js → chunk-BDA35QG5.js} +34 -4
- package/dist/cli-bundle/chunks/chunk-BDA35QG5.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-2MPMKJF2.js → chunk-DHNG452T.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-AFSV5HBB.js → chunk-E4FXM2XB.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-QKVVV6QO.js → chunk-EWIT5WIC.js} +3 -3
- package/dist/cli-bundle/chunks/chunk-EX7OQT3Y.js +783 -0
- package/dist/cli-bundle/chunks/chunk-EX7OQT3Y.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-LLODAQMP.js → chunk-F3VC3GOV.js} +41 -18
- package/dist/cli-bundle/chunks/chunk-F3VC3GOV.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-S46R2M3W.js → chunk-GKPCTQYG.js} +1709 -5
- package/dist/cli-bundle/chunks/chunk-GKPCTQYG.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-HXVHBERL.js → chunk-HPAYDSR2.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-XNPMDSQQ.js → chunk-HYTOJW2Q.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-V3VBXQQV.js → chunk-I3INI567.js} +516 -429
- package/dist/cli-bundle/chunks/chunk-I3INI567.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-V7MP6YTN.js → chunk-IL5SPRMH.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-YQCWK2MB.js → chunk-L5BTTDU5.js} +68 -503
- package/dist/cli-bundle/chunks/chunk-L5BTTDU5.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-SIJV365F.js → chunk-NCVT6XEL.js} +17 -4
- package/dist/cli-bundle/chunks/chunk-NCVT6XEL.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-DCC2AQBD.js → chunk-OGVTB5VO.js} +32 -31
- package/dist/cli-bundle/chunks/chunk-OGVTB5VO.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-6XAZB6SE.js → chunk-QPGQNLPI.js} +1660 -7
- package/dist/cli-bundle/chunks/chunk-QPGQNLPI.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-KOEZCHRF.js → chunk-QRZNCRNA.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-G6KM4YKY.js → chunk-RXPQ5Q23.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-7CTQ7WW5.js → chunk-SIPOACV5.js} +514 -427
- package/dist/cli-bundle/chunks/chunk-SIPOACV5.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-XYJK6GIQ.js → chunk-TGBTLGPX.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-37V5MXAU.js → chunk-TLWJP5BF.js} +3 -3
- package/dist/cli-bundle/chunks/chunk-TLWJP5BF.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-3D4YVTNG.js → chunk-TZAE66GQ.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-S6FF7VW6.js → chunk-WQXRZMFN.js} +187 -16
- package/dist/cli-bundle/chunks/chunk-WQXRZMFN.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-SPFZV2GR.js → chunk-XPUTSGJU.js} +32 -31
- package/dist/cli-bundle/chunks/chunk-XPUTSGJU.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-CFSUNEL7.js → chunk-XWBD6DSR.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-MNV226E4.js → chunk-XWYQ2LT4.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-I7GY4X6Y.js → chunk-YFE7JHX3.js} +26 -5
- package/dist/cli-bundle/chunks/chunk-YFE7JHX3.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-FZGM3PNA.js → chunk-YIIIAKCE.js} +2 -2
- package/dist/cli-bundle/chunks/{close-BEP7MHF3.js → close-GPD7DTJV.js} +3 -3
- package/dist/cli-bundle/chunks/{close-Y6QFUJQN.js → close-X3CF6FQP.js} +3 -3
- package/dist/cli-bundle/chunks/{close-many-JJFW7KTT.js → close-many-J7A5EHOQ.js} +5 -5
- package/dist/cli-bundle/chunks/{close-many-QJ6FKJUE.js → close-many-NQLYGPYW.js} +5 -5
- package/dist/cli-bundle/chunks/{deps-EVTOQMKW.js → deps-MQ4ZIGZB.js} +13 -4
- package/dist/cli-bundle/chunks/{deps-5NC4IZH7.js → deps-NIIKXLPB.js} +13 -4
- package/dist/cli-bundle/chunks/{profile-U2B6Y7GE.js → profile-AVCIIZID.js} +3 -3
- package/dist/cli-bundle/chunks/{profile-AGUKS52S.js → profile-LFYO3HHX.js} +3 -3
- package/dist/cli-bundle/chunks/{register-list-query-A5KRJ5J2.js → register-list-query-MZUF2EEC.js} +41 -13
- package/dist/cli-bundle/chunks/register-list-query-MZUF2EEC.js.map +1 -0
- package/dist/cli-bundle/chunks/{register-list-query-NEYP3TXO.js → register-list-query-UKMF55FT.js} +40 -12
- package/dist/cli-bundle/chunks/register-list-query-UKMF55FT.js.map +7 -0
- package/dist/cli-bundle/chunks/{register-mutation-6LOPBAHC.js → register-mutation-2PBW2GEX.js} +15 -13
- package/dist/cli-bundle/chunks/register-mutation-2PBW2GEX.js.map +1 -0
- package/dist/cli-bundle/chunks/{register-mutation-GCZOALNJ.js → register-mutation-T6RVNJC4.js} +14 -12
- package/dist/cli-bundle/chunks/{register-mutation-GCZOALNJ.js.map → register-mutation-T6RVNJC4.js.map} +2 -2
- package/dist/cli-bundle/chunks/{register-operations-6ZZIF27A.js → register-operations-KHZYR6MG.js} +11 -11
- package/dist/cli-bundle/chunks/{register-operations-REDIAEGI.js → register-operations-WPQ2LWZJ.js} +11 -11
- package/dist/cli-bundle/chunks/{register-setup-J3JS2ZVT.js → register-setup-PGDNOXDQ.js} +5 -5
- package/dist/cli-bundle/chunks/{register-setup-BHPMN5SK.js → register-setup-TDN7WAO6.js} +5 -5
- package/dist/cli-bundle/chunks/{update-SA6AG23P.js → update-SQYZA3ZW.js} +4 -4
- package/dist/cli-bundle/chunks/{update-PQQHLYCC.js → update-XZJYS5X7.js} +4 -4
- package/dist/cli-bundle/chunks/{update-many-RQVTFJPD.js → update-many-R24B3GBK.js} +6 -6
- package/dist/cli-bundle/chunks/{update-many-TV3L3KBX.js → update-many-WQ3R3J6N.js} +6 -6
- package/dist/cli-bundle/main.js +25 -9
- package/dist/cli-bundle/main.js.map +2 -2
- package/dist/cli-bundle/sdk-runtime.js +19 -16
- package/dist/cli-bundle/sdk.js +95 -305
- package/dist/cli-bundle/sdk.js.map +4 -4
- package/dist/core/item/actionability.d.ts +12 -0
- package/dist/core/item/actionability.js +39 -4
- package/dist/core/item/actionability.js.map +1 -1
- package/dist/core/sentry/instrument.d.ts +11 -0
- package/dist/core/sentry/instrument.js +21 -2
- package/dist/core/sentry/instrument.js.map +1 -1
- package/dist/mcp/server.d.ts +16 -18
- package/dist/mcp/server.js +84 -31
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tool-definitions.js +17 -4
- package/dist/mcp/tool-definitions.js.map +1 -1
- package/dist/sdk/actionability.d.ts +10 -0
- package/dist/sdk/actionability.js +14 -0
- package/dist/sdk/actionability.js.map +1 -0
- package/dist/sdk/cli-contracts/enum-contracts.d.ts +6 -2
- package/dist/sdk/cli-contracts/enum-contracts.js +19 -2
- package/dist/sdk/cli-contracts/enum-contracts.js.map +1 -1
- package/dist/sdk/cli-contracts/flag-contracts.d.ts +2 -0
- package/dist/sdk/cli-contracts/flag-contracts.js +21 -2
- package/dist/sdk/cli-contracts/flag-contracts.js.map +1 -1
- package/dist/sdk/cli-contracts/tool-option-contracts.d.ts +2 -0
- package/dist/sdk/cli-contracts/tool-option-contracts.js +16 -2
- package/dist/sdk/cli-contracts/tool-option-contracts.js.map +1 -1
- package/dist/sdk/cli-contracts/tool-parameter-tables.js +80 -3
- package/dist/sdk/cli-contracts/tool-parameter-tables.js.map +1 -1
- package/dist/sdk/cli-contracts/tool-schema.d.ts +20 -0
- package/dist/sdk/cli-contracts/tool-schema.js +97 -9
- package/dist/sdk/cli-contracts/tool-schema.js.map +1 -1
- package/dist/sdk/cli-contracts.d.ts +2 -2
- package/dist/sdk/cli-contracts.js +4 -4
- package/dist/sdk/cli-contracts.js.map +1 -1
- package/dist/sdk/dependencies.d.ts +42 -53
- package/dist/sdk/dependencies.js +177 -125
- package/dist/sdk/dependencies.js.map +1 -1
- package/dist/sdk/governance/validate.js +3 -3
- package/dist/sdk/governance/validate.js.map +1 -1
- package/dist/sdk/graph/analytics.d.ts +124 -0
- package/dist/sdk/graph/analytics.js +464 -0
- package/dist/sdk/graph/analytics.js.map +1 -0
- package/dist/sdk/graph/assembly.d.ts +97 -0
- package/dist/sdk/graph/assembly.js +146 -0
- package/dist/sdk/graph/assembly.js.map +1 -0
- package/dist/sdk/graph/cache.d.ts +66 -0
- package/dist/sdk/graph/cache.js +148 -0
- package/dist/sdk/graph/cache.js.map +1 -0
- package/dist/sdk/graph/governance.d.ts +108 -0
- package/dist/sdk/graph/governance.js +360 -0
- package/dist/sdk/graph/governance.js.map +1 -0
- package/dist/sdk/graph/index.d.ts +16 -0
- package/dist/sdk/graph/index.js +20 -0
- package/dist/sdk/graph/index.js.map +1 -0
- package/dist/sdk/graph/remediation.d.ts +52 -0
- package/dist/sdk/graph/remediation.js +148 -0
- package/dist/sdk/graph/remediation.js.map +1 -0
- package/dist/sdk/graph/run.d.ts +295 -0
- package/dist/sdk/graph/run.js +468 -0
- package/dist/sdk/graph/run.js.map +1 -0
- package/dist/sdk/graph/traversal.d.ts +77 -0
- package/dist/sdk/graph/traversal.js +262 -0
- package/dist/sdk/graph/traversal.js.map +1 -0
- package/dist/sdk/index.d.ts +4 -2
- package/dist/sdk/index.js +6 -4
- package/dist/sdk/index.js.map +1 -1
- package/dist/sdk/query/list.d.ts +8 -0
- package/dist/sdk/query/list.js +19 -3
- package/dist/sdk/query/list.js.map +1 -1
- package/dist/sdk/relationship-context.d.ts +42 -0
- package/dist/sdk/relationship-context.js +99 -20
- package/dist/sdk/relationship-context.js.map +1 -1
- package/dist/sdk/relationships.d.ts +13 -0
- package/dist/sdk/relationships.js +30 -2
- package/dist/sdk/relationships.js.map +1 -1
- package/dist/sdk/runtime-input.d.ts +41 -0
- package/dist/sdk/runtime-input.js +422 -2
- package/dist/sdk/runtime-input.js.map +1 -1
- package/dist/sdk/runtime.d.ts +12 -23
- package/dist/sdk/runtime.js +19 -371
- package/dist/sdk/runtime.js.map +1 -1
- package/dist/sdk/test/linked-command-detection.js +12 -3
- package/dist/sdk/test/linked-command-detection.js.map +1 -1
- package/docs/AGENT_GUIDE.md +1 -0
- package/docs/COMMANDS.md +19 -1
- package/docs/RELATIONSHIP_GRAPH.md +99 -3
- package/docs/SDK.md +17 -3
- 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-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/plugins/pm-claude/.claude-plugin/plugin.json +1 -1
- package/plugins/pm-codex/.codex-plugin/plugin.json +1 -1
- package/dist/cli-bundle/chunks/chunk-6XAZB6SE.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-7CTQ7WW5.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-7LTCLTRG.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-DCC2AQBD.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-HF63SBLC.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-I7GY4X6Y.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-LLODAQMP.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-MSGETE6I.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-N7I2DGLP.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-NCAFUBJX.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-P56LKFQX.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-S46R2M3W.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-S6FF7VW6.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-SIJV365F.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-SPFZV2GR.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-V3VBXQQV.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-YQCWK2MB.js.map +0 -1
- package/dist/cli-bundle/chunks/register-list-query-A5KRJ5J2.js.map +0 -1
- package/dist/cli-bundle/chunks/register-list-query-NEYP3TXO.js.map +0 -7
- package/dist/cli-bundle/chunks/register-mutation-6LOPBAHC.js.map +0 -1
- /package/dist/cli-bundle/chunks/{chunk-QNUAZYGW.js.map → chunk-43UMFKCK.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-B6SH2YNN.js.map → chunk-7R6UIHYY.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-23TCGBRK.js.map → chunk-ADXDCAKP.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-2MPMKJF2.js.map → chunk-DHNG452T.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-AFSV5HBB.js.map → chunk-E4FXM2XB.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-QKVVV6QO.js.map → chunk-EWIT5WIC.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-HXVHBERL.js.map → chunk-HPAYDSR2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-XNPMDSQQ.js.map → chunk-HYTOJW2Q.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-V7MP6YTN.js.map → chunk-IL5SPRMH.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-KOEZCHRF.js.map → chunk-QRZNCRNA.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-G6KM4YKY.js.map → chunk-RXPQ5Q23.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-XYJK6GIQ.js.map → chunk-TGBTLGPX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-3D4YVTNG.js.map → chunk-TZAE66GQ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-CFSUNEL7.js.map → chunk-XWBD6DSR.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-MNV226E4.js.map → chunk-XWYQ2LT4.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-FZGM3PNA.js.map → chunk-YIIIAKCE.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-BEP7MHF3.js.map → close-GPD7DTJV.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-Y6QFUJQN.js.map → close-X3CF6FQP.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-many-JJFW7KTT.js.map → close-many-J7A5EHOQ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-many-QJ6FKJUE.js.map → close-many-NQLYGPYW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{deps-EVTOQMKW.js.map → deps-MQ4ZIGZB.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{deps-5NC4IZH7.js.map → deps-NIIKXLPB.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{profile-U2B6Y7GE.js.map → profile-AVCIIZID.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{profile-AGUKS52S.js.map → profile-LFYO3HHX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{register-operations-6ZZIF27A.js.map → register-operations-KHZYR6MG.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{register-operations-REDIAEGI.js.map → register-operations-WPQ2LWZJ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{register-setup-J3JS2ZVT.js.map → register-setup-PGDNOXDQ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{register-setup-BHPMN5SK.js.map → register-setup-TDN7WAO6.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{update-SA6AG23P.js.map → update-SQYZA3ZW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{update-PQQHLYCC.js.map → update-XZJYS5X7.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{update-many-RQVTFJPD.js.map → update-many-R24B3GBK.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{update-many-TV3L3KBX.js.map → update-many-WQ3R3J6N.js.map} +0 -0
|
@@ -454,8 +454,8 @@ export declare const _testOnly: {
|
|
|
454
454
|
toContextFocusItem: typeof toContextFocusItem;
|
|
455
455
|
};
|
|
456
456
|
declare function buildActivity(activityLimit: number, global: GlobalOptions): Promise<CompactActivityEntry[]>;
|
|
457
|
-
declare function buildProgress(allItems: ItemMetadata[], activeItems: ItemMetadata[], statusRegistry: RuntimeStatusRegistry, limit: number): ProgressEntry[];
|
|
458
|
-
declare function buildBlockers(blockedItems: ItemMetadata[],
|
|
457
|
+
declare function buildProgress(allItems: ItemMetadata[], activeItems: ItemMetadata[], blockedIds: ReadonlySet<string>, statusRegistry: RuntimeStatusRegistry, limit: number): ProgressEntry[];
|
|
458
|
+
declare function buildBlockers(blockedItems: ItemMetadata[], fullCorpus: ItemMetadata[], statusRegistry: RuntimeStatusRegistry, limit: number): BlockerEntry[];
|
|
459
459
|
declare function buildHotFiles(activeItems: ItemMetadata[], limit: number): HotFile[];
|
|
460
460
|
declare function buildWorkload(activeItems: ItemMetadata[], statusRegistry: RuntimeStatusRegistry, limit: number): WorkloadEntry[];
|
|
461
461
|
declare function buildStaleness(allNonTerminal: ItemMetadata[], staleThresholdDays: number, now: string, limit: number): StaleEntry[];
|
|
@@ -4,11 +4,12 @@
|
|
|
4
4
|
* Implements the pm context command surface and its agent-facing runtime behavior.
|
|
5
5
|
*/
|
|
6
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]="
|
|
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]="2df694f8-45bb-5a5c-aea9-30da2ed1633d")}catch(e){}}();
|
|
8
8
|
import { SETTINGS_DEFAULTS, EXIT_CODE } from "../../core/shared/constants.js";
|
|
9
9
|
import { PmCliError } from "../../core/shared/errors.js";
|
|
10
10
|
import { compareTimestampStrings, nowIso } from "../../core/shared/time.js";
|
|
11
11
|
import { isTerminalStatus, normalizeStatusForRegistry, normalizeStatusInput, } from "../../core/item/status.js";
|
|
12
|
+
import { collectDependencyBlockedIds, resolveItemBlockers, } from "../../sdk/actionability.js";
|
|
12
13
|
import { resolveRuntimeStatusRegistry, } from "../../core/schema/runtime-schema.js";
|
|
13
14
|
import { resolvePmRoot } from "../../core/store/paths.js";
|
|
14
15
|
import { readSettings } from "../../core/store/settings.js";
|
|
@@ -655,7 +656,7 @@ async function buildActivity(activityLimit, global) {
|
|
|
655
656
|
const result = await runActivity({ compact: true, limit: String(activityLimit) }, global);
|
|
656
657
|
return result.compact_activity ?? [];
|
|
657
658
|
}
|
|
658
|
-
function buildProgress(allItems, activeItems, statusRegistry, limit) {
|
|
659
|
+
function buildProgress(allItems, activeItems, blockedIds, statusRegistry, limit) {
|
|
659
660
|
const childrenByParent = new Map();
|
|
660
661
|
for (const item of allItems) {
|
|
661
662
|
if (!item.parent)
|
|
@@ -677,12 +678,14 @@ function buildProgress(allItems, activeItems, statusRegistry, limit) {
|
|
|
677
678
|
let blocked = 0;
|
|
678
679
|
/* c8 ignore start -- chained status-classification branch accounting is noisy under v8 for mixed descendant sets */
|
|
679
680
|
for (const desc of descendants) {
|
|
681
|
+
// Blocked is edge-aware (GH-578): dependency-blocked descendants count as
|
|
682
|
+
// blocked regardless of lifecycle status, matching pm next and list-blocked.
|
|
680
683
|
if (isClosedStatus(desc.status, statusRegistry))
|
|
681
684
|
closed++;
|
|
685
|
+
else if (blockedIds.has(desc.id.trim().toLowerCase()))
|
|
686
|
+
blocked++;
|
|
682
687
|
else if (isInProgressStatus(desc.status, statusRegistry))
|
|
683
688
|
inProgress++;
|
|
684
|
-
else if (isBlockedStatus(desc.status, statusRegistry))
|
|
685
|
-
blocked++;
|
|
686
689
|
else if (isOpenStatus(desc.status, statusRegistry))
|
|
687
690
|
open++;
|
|
688
691
|
}
|
|
@@ -703,15 +706,22 @@ function buildProgress(allItems, activeItems, statusRegistry, limit) {
|
|
|
703
706
|
.sort((a, b) => a.completion_pct - b.completion_pct)
|
|
704
707
|
.slice(0, limit);
|
|
705
708
|
}
|
|
706
|
-
function buildBlockers(blockedItems,
|
|
709
|
+
function buildBlockers(blockedItems, fullCorpus, statusRegistry, limit) {
|
|
710
|
+
const itemsById = new Map(fullCorpus.map((item) => [item.id.trim().toLowerCase(), item]));
|
|
707
711
|
return blockedItems.slice(0, limit).map((item) => {
|
|
708
|
-
|
|
709
|
-
|
|
712
|
+
// Prefer a currently open blocker edge. The legacy scalar may still name a
|
|
713
|
+
// resolved predecessor, so it is only a fallback when no open edge exists.
|
|
714
|
+
const blockers = resolveItemBlockers(item, itemsById, statusRegistry);
|
|
715
|
+
const blockedBy = blockers.find((blocker) => !blocker.resolved)?.id ??
|
|
716
|
+
blockers[0]?.id ??
|
|
717
|
+
null;
|
|
718
|
+
const blockerItem = blockedBy
|
|
719
|
+
? itemsById.get(blockedBy.trim().toLowerCase())
|
|
710
720
|
: undefined;
|
|
711
721
|
return {
|
|
712
722
|
id: item.id,
|
|
713
723
|
title: item.title,
|
|
714
|
-
blocked_by:
|
|
724
|
+
blocked_by: blockedBy,
|
|
715
725
|
blocked_by_title: blockerItem?.title ?? null,
|
|
716
726
|
blocked_by_status: blockerItem?.status ?? null,
|
|
717
727
|
blocked_reason: item.blocked_reason ?? null,
|
|
@@ -1128,17 +1138,18 @@ function buildUnpaginatedContextListOptions(baseListOptions, extra) {
|
|
|
1128
1138
|
}
|
|
1129
1139
|
async function loadContextCorpus(options, global, runtime) {
|
|
1130
1140
|
const needsAllItems = contextNeedsAllItems(runtime.sectionsIncluded);
|
|
1131
|
-
|
|
1132
|
-
|
|
1133
|
-
|
|
1134
|
-
|
|
1135
|
-
|
|
1136
|
-
|
|
1137
|
-
|
|
1138
|
-
|
|
1139
|
-
|
|
1140
|
-
|
|
1141
|
-
|
|
1141
|
+
// One full-corpus scan serves every consumer: runList always reads all item
|
|
1142
|
+
// files before filtering, so deriving the non-terminal subset in memory is
|
|
1143
|
+
// free and keeps terminal blocker targets available for the shared
|
|
1144
|
+
// edge-aware blocked classification (GH-578).
|
|
1145
|
+
const listed = await runList(undefined, buildUnpaginatedContextListOptions(runtime.baseListOptions, {
|
|
1146
|
+
excludeTerminal: false,
|
|
1147
|
+
}), global);
|
|
1148
|
+
const fullCorpus = listed.items;
|
|
1149
|
+
let listedItemMetadata = fullCorpus.filter((item) => !isTerminalStatus(item.status, runtime.statusRegistry));
|
|
1150
|
+
let allItems = needsAllItems || runtime.parentScope !== undefined
|
|
1151
|
+
? fullCorpus
|
|
1152
|
+
: listedItemMetadata;
|
|
1142
1153
|
const subtreeIds = resolveContextSubtreeIds(runtime.parentScope, fullCorpus);
|
|
1143
1154
|
if (subtreeIds) {
|
|
1144
1155
|
listedItemMetadata = listedItemMetadata.filter((item) => subtreeIds.has(item.id.trim().toLowerCase()));
|
|
@@ -1156,7 +1167,7 @@ function resolveContextSubtreeIds(parentScope, fullCorpus) {
|
|
|
1156
1167
|
}
|
|
1157
1168
|
return subtree.ids;
|
|
1158
1169
|
}
|
|
1159
|
-
async function resolveContextFocusGroups(listedItemMetadata, allItems, statusRegistry, sectionsIncluded, limit, now, author, cursor, cursorFingerprint, useBoundedPage, pmRoot) {
|
|
1170
|
+
async function resolveContextFocusGroups(listedItemMetadata, allItems, blockedIds, statusRegistry, sectionsIncluded, limit, now, author, cursor, cursorFingerprint, useBoundedPage, pmRoot) {
|
|
1160
1171
|
const structural = [...listedItemMetadata].sort((left, right) => compareCriticalItems(left, right, statusRegistry));
|
|
1161
1172
|
const usage = await readContextUsageAffinity({
|
|
1162
1173
|
pmRoot,
|
|
@@ -1184,7 +1195,7 @@ async function resolveContextFocusGroups(listedItemMetadata, allItems, statusReg
|
|
|
1184
1195
|
const nextCursor = hasMore && focusPage.length > 0
|
|
1185
1196
|
? encodeQueryCursor(cursorFingerprint, focusPage[focusPage.length - 1].id, pageStart + focusPage.length - 1)
|
|
1186
1197
|
: undefined;
|
|
1187
|
-
const rankedBlockedItems = ranked.filter((item) =>
|
|
1198
|
+
const rankedBlockedItems = ranked.filter((item) => blockedIds.has(item.id.trim().toLowerCase()));
|
|
1188
1199
|
const packingIds = new Set([
|
|
1189
1200
|
...focusPage.map((item) => item.id),
|
|
1190
1201
|
...rankedBlockedItems.slice(0, limit).map((item) => item.id),
|
|
@@ -1192,7 +1203,7 @@ async function resolveContextFocusGroups(listedItemMetadata, allItems, statusReg
|
|
|
1192
1203
|
const packing = packRankedContextItems({ ...ranking, ranked: ranking.ranked.filter((entry) => packingIds.has(entry.id)) }, Math.max(256, limit * 160));
|
|
1193
1204
|
const packedItems = packing.included.map((entry) => entry.item);
|
|
1194
1205
|
const activeItems = packedItems.filter((item) => activeStatuses.has(normalizeStatusForRegistry(item.status, statusRegistry)));
|
|
1195
|
-
const blockedItems = packedItems.filter((item) =>
|
|
1206
|
+
const blockedItems = packedItems.filter((item) => blockedIds.has(item.id.trim().toLowerCase()));
|
|
1196
1207
|
const childrenByParent = buildChildrenByParent(allItems);
|
|
1197
1208
|
const focusChildrenByParent = contextNeedsAllItems(sectionsIncluded)
|
|
1198
1209
|
? childrenByParent
|
|
@@ -1264,9 +1275,8 @@ function countContextStatus(items, status, statusRegistry) {
|
|
|
1264
1275
|
return items.filter((item) => normalizeStatusForRegistry(item.status, statusRegistry) === targetStatus).length;
|
|
1265
1276
|
}
|
|
1266
1277
|
async function buildOptionalContextSections(params) {
|
|
1267
|
-
const { runtime, allItems, fullCorpus, focusGroups, now, global } = params;
|
|
1278
|
+
const { runtime, allItems, fullCorpus, blockedIds, focusGroups, now, global } = params;
|
|
1268
1279
|
const childrenByParent = buildChildrenByParent(allItems);
|
|
1269
|
-
const itemMap = new Map(fullCorpus.map((item) => [item.id, item]));
|
|
1270
1280
|
const allNonTerminal = allItems.filter((item) => !isTerminalStatus(item.status, runtime.statusRegistry));
|
|
1271
1281
|
const has = (section) => runtime.sectionsIncluded.includes(section);
|
|
1272
1282
|
return {
|
|
@@ -1277,10 +1287,10 @@ async function buildOptionalContextSections(params) {
|
|
|
1277
1287
|
? await buildActivity(runtime.activityLimit, global)
|
|
1278
1288
|
: undefined,
|
|
1279
1289
|
progress: has("progress")
|
|
1280
|
-
? buildProgress(allItems, focusGroups.activeItems, runtime.statusRegistry, runtime.limit)
|
|
1290
|
+
? buildProgress(allItems, focusGroups.activeItems, blockedIds, runtime.statusRegistry, runtime.limit)
|
|
1281
1291
|
: undefined,
|
|
1282
1292
|
blockersSection: has("blockers")
|
|
1283
|
-
? buildBlockers(focusGroups.blockedItems,
|
|
1293
|
+
? buildBlockers(focusGroups.blockedItems, fullCorpus, runtime.statusRegistry, runtime.limit)
|
|
1284
1294
|
: undefined,
|
|
1285
1295
|
recentlyCreated: has("recently_created")
|
|
1286
1296
|
? buildRecentlyCreated(allNonTerminal, runtime.statusRegistry, childrenByParent, runtime.limit)
|
|
@@ -1394,7 +1404,10 @@ export async function runContext(options, global) {
|
|
|
1394
1404
|
limit: resolveContextLimitAtScale(resolvedRuntime.limit, corpus.fullCorpus.length),
|
|
1395
1405
|
};
|
|
1396
1406
|
const author = process.env.PM_AUTHOR ?? runtime.settings.author_default;
|
|
1397
|
-
|
|
1407
|
+
// Single shared edge-aware blocked classification (GH-578): resolved against
|
|
1408
|
+
// the full corpus so terminal blocker targets count as satisfied at every depth.
|
|
1409
|
+
const blockedIds = collectDependencyBlockedIds(corpus.fullCorpus, runtime.statusRegistry);
|
|
1410
|
+
const focusGroups = await resolveContextFocusGroups(corpus.listedItemMetadata, corpus.allItems, blockedIds, runtime.statusRegistry, runtime.sectionsIncluded, runtime.limit, nowIso(), author, options.after, buildContextCursorFingerprint(options), shouldPageContextFocus(options, corpus.fullCorpus.length), pmRoot);
|
|
1398
1411
|
const agendaContext = await buildContextAgenda(options, global, runtime, corpus.subtreeIds);
|
|
1399
1412
|
const warnings = mergeSortedWarnings(corpus.listed.warnings, agendaContext.agenda.warnings, focusGroups.ranking.warnings);
|
|
1400
1413
|
const inProgressCount = countContextStatus(focusGroups.activeItems, normalizeStatusInput("in_progress", runtime.statusRegistry), runtime.statusRegistry);
|
|
@@ -1403,6 +1416,7 @@ export async function runContext(options, global) {
|
|
|
1403
1416
|
runtime,
|
|
1404
1417
|
allItems: corpus.allItems,
|
|
1405
1418
|
fullCorpus: corpus.fullCorpus,
|
|
1419
|
+
blockedIds,
|
|
1406
1420
|
focusGroups,
|
|
1407
1421
|
now: agendaContext.agenda.now,
|
|
1408
1422
|
global,
|
|
@@ -1469,4 +1483,4 @@ export async function runContext(options, global) {
|
|
|
1469
1483
|
return result;
|
|
1470
1484
|
}
|
|
1471
1485
|
//# sourceMappingURL=context.js.map
|
|
1472
|
-
//# debugId=
|
|
1486
|
+
//# debugId=2df694f8-45bb-5a5c-aea9-30da2ed1633d
|