@unbrained/pm-cli 2026.8.23 → 2026.8.24

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.
Files changed (147) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/CHANGELOG.md +14 -1
  3. package/dist/cli/description-stdin.js +5 -4
  4. package/dist/cli/extension-command-help.d.ts +5 -0
  5. package/dist/cli/extension-command-help.js +6 -2
  6. package/dist/cli/help-content.d.ts +5 -0
  7. package/dist/cli/help-content.js +56 -3
  8. package/dist/cli/help-json-payload.d.ts +5 -2
  9. package/dist/cli/help-json-payload.js +57 -17
  10. package/dist/cli/main.d.ts +3 -0
  11. package/dist/cli/main.js +28 -3
  12. package/dist/cli/register-annotations.js +5 -5
  13. package/dist/cli/register-mutation.js +73 -27
  14. package/dist/cli-bundle/bundle-manifest.json +152 -152
  15. package/dist/cli-bundle/chunks/{chunk-JB4KZWBF.js → chunk-AGUL3HUT.js} +2 -2
  16. package/dist/cli-bundle/chunks/{chunk-EG6CLDZT.js → chunk-DJNJBWAQ.js} +2 -2
  17. package/dist/cli-bundle/chunks/{chunk-F3AI2JFL.js → chunk-I5Q7QSZX.js} +2 -2
  18. package/dist/cli-bundle/chunks/chunk-IW72J5FW.js +2 -0
  19. package/dist/cli-bundle/chunks/{chunk-KXPMB2YL.js → chunk-L22NP5MA.js} +55 -55
  20. package/dist/cli-bundle/chunks/chunk-MKE6MD2K.js +36 -0
  21. package/dist/cli-bundle/chunks/{chunk-QDVHNHAQ.js → chunk-NXBFO63A.js} +2 -2
  22. package/dist/cli-bundle/chunks/chunk-TEQDR5KI.js +202 -0
  23. package/dist/cli-bundle/chunks/{chunk-KPH73XXJ.js → chunk-X7WWQDYQ.js} +2 -2
  24. package/dist/cli-bundle/chunks/{chunk-TFI5V5N2.js → chunk-YOLLRCLY.js} +2 -2
  25. package/dist/cli-bundle/chunks/{chunk-HWZ6CELB.js → chunk-ZAVCS2GH.js} +2 -2
  26. package/dist/cli-bundle/chunks/{register-list-query-UJB5FMV2.js → register-list-query-37A4P6O4.js} +2 -2
  27. package/dist/cli-bundle/chunks/register-mutation-TBJDHYIT.js +20 -0
  28. package/dist/cli-bundle/chunks/{register-operations-RXIJIYXC.js → register-operations-WRZNEBUM.js} +2 -2
  29. package/dist/cli-bundle/chunks/{register-setup-GFUZEKRE.js → register-setup-H4PDLACD.js} +2 -2
  30. package/dist/cli-bundle/focused-chunks/{chunk-AUFH5H35.js → chunk-4WP7LNE3.js} +2 -2
  31. package/dist/cli-bundle/focused-chunks/{chunk-LYVSW5VM.js → chunk-6MUTDXMP.js} +2 -2
  32. package/dist/cli-bundle/focused-chunks/chunk-6Z24ZMU3.js +2 -0
  33. package/dist/cli-bundle/focused-chunks/{chunk-OGLQBL46.js → chunk-BFA6KKCI.js} +2 -2
  34. package/dist/cli-bundle/focused-chunks/{chunk-QGFNI65N.js → chunk-CWCN5RLO.js} +2 -2
  35. package/dist/cli-bundle/focused-chunks/{chunk-UYRFYCDQ.js → chunk-FCTT4CZU.js} +2 -2
  36. package/dist/cli-bundle/focused-chunks/{chunk-IFLWKY2R.js → chunk-GJR6YEMR.js} +2 -2
  37. package/dist/cli-bundle/focused-chunks/{chunk-37Z4OEAP.js → chunk-IMWTYKII.js} +2 -2
  38. package/dist/cli-bundle/focused-chunks/{chunk-R27IDGHD.js → chunk-IZNRRCU3.js} +2 -2
  39. package/dist/cli-bundle/focused-chunks/{chunk-JOWDB2MH.js → chunk-MNPECIRL.js} +2 -2
  40. package/dist/cli-bundle/focused-chunks/{chunk-OFVUGTLJ.js → chunk-O4ZXNJMT.js} +2 -2
  41. package/dist/cli-bundle/focused-chunks/chunk-Q63PSLO4.js +2 -0
  42. package/dist/cli-bundle/focused-chunks/chunk-QBP5FSBX.js +4 -0
  43. package/dist/cli-bundle/focused-chunks/{chunk-OY7QAV4Y.js → chunk-QV5UP27O.js} +46 -46
  44. package/dist/cli-bundle/focused-chunks/{chunk-3UPTYG44.js → chunk-RASVBJX5.js} +2 -2
  45. package/dist/cli-bundle/focused-chunks/{chunk-5S7E72FY.js → chunk-RPRLENVA.js} +2 -2
  46. package/dist/cli-bundle/focused-chunks/chunk-TOFVXBWA.js +19 -0
  47. package/dist/cli-bundle/focused-chunks/{chunk-FZS4H32O.js → chunk-WZLSSGEU.js} +2 -2
  48. package/dist/cli-bundle/main.js +18 -17
  49. package/dist/cli-bundle/sdk-authoring.js +1 -1
  50. package/dist/cli-bundle/sdk-contracts.js +1 -1
  51. package/dist/cli-bundle/sdk-core.js +41 -41
  52. package/dist/cli-bundle/sdk-governance.js +1 -1
  53. package/dist/cli-bundle/sdk-graph.js +1 -1
  54. package/dist/cli-bundle/sdk-merge.js +33 -33
  55. package/dist/cli-bundle/sdk-query.js +1 -1
  56. package/dist/cli-bundle/sdk-runtime.js +1 -1
  57. package/dist/cli-bundle/sdk-testing.js +1 -1
  58. package/dist/cli-bundle/sdk.js +6 -5
  59. package/dist/core/extensions/command-metadata-contract.d.ts +10 -0
  60. package/dist/core/extensions/command-metadata-contract.js +23 -0
  61. package/dist/core/extensions/command-visibility-tier.js +12 -2
  62. package/dist/core/extensions/extension-types.d.ts +6 -0
  63. package/dist/core/extensions/extension-types.js +2 -2
  64. package/dist/core/extensions/loader.js +4 -3
  65. package/dist/core/io/body-file.js +7 -2
  66. package/dist/core/io/bulk-ids-input.d.ts +24 -0
  67. package/dist/core/io/bulk-ids-input.js +113 -0
  68. package/dist/core/item/parse.d.ts +22 -2
  69. package/dist/core/item/parse.js +97 -4
  70. package/dist/mcp/server.d.ts +3 -2
  71. package/dist/mcp/server.js +16 -9
  72. package/dist/sdk/agent/refusal-closure-census.d.ts +66 -0
  73. package/dist/sdk/agent/refusal-closure-census.js +144 -0
  74. package/dist/sdk/agent-capability-contracts.d.ts +34 -1
  75. package/dist/sdk/agent-capability-contracts.js +104 -6
  76. package/dist/sdk/annotations.d.ts +2 -0
  77. package/dist/sdk/annotations.js +25 -7
  78. package/dist/sdk/cli-contracts/tool-parameter-tables.js +38 -2
  79. package/dist/sdk/cli-contracts/typed-action-inputs.d.ts +4 -1
  80. package/dist/sdk/cli-contracts/typed-action-inputs.js +2 -2
  81. package/dist/sdk/comments.js +15 -7
  82. package/dist/sdk/flag-invocation-contracts.d.ts +2 -0
  83. package/dist/sdk/flag-invocation-contracts.js +28 -3
  84. package/dist/sdk/generated/generated-error-code-catalog-part-1.js +71 -38
  85. package/dist/sdk/generated/generated-error-code-catalog-part-2.js +38 -2
  86. package/dist/sdk/guide-topics.d.ts +0 -5
  87. package/dist/sdk/guide-topics.js +28 -2
  88. package/dist/sdk/history-compact.d.ts +2 -1
  89. package/dist/sdk/history-compact.js +24 -5
  90. package/dist/sdk/history-mcp.js +11 -10
  91. package/dist/sdk/index.d.ts +1 -0
  92. package/dist/sdk/index.js +3 -2
  93. package/dist/sdk/item-transaction.js +19 -12
  94. package/dist/sdk/lifecycle/append.js +4 -4
  95. package/dist/sdk/lifecycle/close-many.js +16 -7
  96. package/dist/sdk/lifecycle/create.js +29 -21
  97. package/dist/sdk/lifecycle/plan.js +24 -6
  98. package/dist/sdk/lifecycle/update-many.js +15 -8
  99. package/dist/sdk/lifecycle/update.d.ts +2 -0
  100. package/dist/sdk/lifecycle/update.js +34 -24
  101. package/dist/sdk/runtime-extended-actions.js +5 -3
  102. package/dist/sdk/runtime-input.d.ts +4 -0
  103. package/dist/sdk/runtime-input.js +98 -23
  104. package/dist/sdk/runtime-primitives.d.ts +2 -1
  105. package/dist/sdk/runtime-primitives.js +4 -3
  106. package/dist/sdk/runtime.js +7 -20
  107. package/dist/sdk/scheduling-shortcuts.js +5 -3
  108. package/dist/sdk/structured-mutations.js +10 -3
  109. package/dist/sdk/workspace-contracts.d.ts +3 -0
  110. package/dist/sdk/workspace-contracts.js +3 -2
  111. package/docs/README.md +2 -0
  112. package/docs/RELEASING.md +40 -21
  113. package/docs/SCRIPTING.md +62 -3
  114. package/docs/SDK.md +8 -0
  115. package/docs/generated/AGENT_CAPABILITY_ROUTING.md +17 -0
  116. package/docs/generated/AGENT_COMMAND_SURFACE.md +1 -1
  117. package/docs/generated/REFUSAL_CLOSURE_CENSUS.md +355 -0
  118. package/marketplace.json +2 -2
  119. package/package.json +1 -1
  120. package/packages/pm-beads/package.json +1 -1
  121. package/packages/pm-calendar/package.json +1 -1
  122. package/packages/pm-command-kit/README.md +9 -11
  123. package/packages/pm-command-kit/extensions/command-kit/index.ts +3 -1
  124. package/packages/pm-command-kit/package.json +1 -1
  125. package/packages/pm-digital-twin/package.json +1 -1
  126. package/packages/pm-governance-audit/package.json +1 -1
  127. package/packages/pm-guide-shell/extensions/guide-shell/index.ts +10 -0
  128. package/packages/pm-guide-shell/package.json +1 -1
  129. package/packages/pm-kanban/package.json +1 -1
  130. package/packages/pm-lifecycle-hooks/package.json +1 -1
  131. package/packages/pm-linked-test-adapters/package.json +1 -1
  132. package/packages/pm-search-advanced/package.json +1 -1
  133. package/packages/pm-templates/package.json +1 -1
  134. package/packages/pm-todos/package.json +1 -1
  135. package/packages/pm-vcs/package.json +1 -1
  136. package/plugins/pm-claude/.claude-plugin/plugin.json +1 -1
  137. package/plugins/pm-codex/.codex-plugin/plugin.json +1 -1
  138. package/scripts/generate-agent-capability-surfaces.mjs +27 -1
  139. package/sdk/public-surface.json +215 -11
  140. package/dist/cli-bundle/chunks/chunk-3ENVHX6C.js +0 -36
  141. package/dist/cli-bundle/chunks/chunk-DW2CGEMU.js +0 -2
  142. package/dist/cli-bundle/chunks/chunk-HZBMLSZI.js +0 -201
  143. package/dist/cli-bundle/chunks/register-mutation-NX5XE4VX.js +0 -20
  144. package/dist/cli-bundle/focused-chunks/chunk-E7X25GC3.js +0 -2
  145. package/dist/cli-bundle/focused-chunks/chunk-FQCSTBWE.js +0 -4
  146. package/dist/cli-bundle/focused-chunks/chunk-MRCNF3U6.js +0 -2
  147. package/dist/cli-bundle/focused-chunks/chunk-ZHVA42R5.js +0 -18
@@ -0,0 +1,66 @@
1
+ /**
2
+ * @module sdk/agent/refusal-closure-census
3
+ *
4
+ * Joins the complete emitted error vocabulary to every executable refusal
5
+ * corpus. Missing proof remains an explicit row; no catalog code disappears
6
+ * merely because it has not yet received a probe.
7
+ */
8
+ import type { PmErrorCodeContract } from "../error-code-catalog.js";
9
+ import type { PmClosedDomainContract } from "./closed-domain-contracts.js";
10
+ import type { PmGrammarRefusalContract } from "./refusal-corpus-contracts.js";
11
+ /** Evidence family that makes an error code executable. */
12
+ export type PmRefusalEvidenceKind = "owned_state" | "closed_domain" | "grammar";
13
+ /** One complete-catalog closure row. */
14
+ export interface PmRefusalClosureCensusRow {
15
+ /** Declared machine-readable error code. */
16
+ code: string;
17
+ /** Canonical compatibility-group code. */
18
+ canonical_code: string;
19
+ /** Whether at least one executable probe reaches the compatibility group. */
20
+ disposition: "executable" | "uncovered";
21
+ /** Evidence families contributing executable probes. */
22
+ evidence_kinds: PmRefusalEvidenceKind[];
23
+ /** Stable executable probe identities. */
24
+ probe_ids: string[];
25
+ }
26
+ /** Full emitted-vocabulary refusal closure receipt. */
27
+ export interface PmRefusalClosureCensusReport {
28
+ /** True only when every catalog code belongs to a probed compatibility group. */
29
+ ok: boolean;
30
+ /** Number of emitted codes in the catalog. */
31
+ catalog_error_code_count: number;
32
+ /** Number of codes backed by executable evidence. */
33
+ executable_error_code_count: number;
34
+ /** Number of codes still lacking executable evidence. */
35
+ uncovered_error_code_count: number;
36
+ /** Executable codes divided by all catalog codes. */
37
+ coverage_fraction: number;
38
+ /** Number of closed-domain probes joined into the census. */
39
+ closed_domain_probe_count: number;
40
+ /** Number of grammar-derived probes joined into the census. */
41
+ grammar_probe_count: number;
42
+ /** Stable complete list of codes without executable evidence. */
43
+ uncovered_error_codes: string[];
44
+ /** Exactly one row for every catalog code. */
45
+ rows: PmRefusalClosureCensusRow[];
46
+ }
47
+ /** Reviewed floor of 16 catalog rows; includes one alias across 15 canonical groups. */
48
+ export declare const PM_REFUSAL_CLOSURE_EXECUTABLE_CODE_BASELINE = 16;
49
+ /** Fifteen canonical compatibility groups that must retain executable evidence. */
50
+ export declare const PM_REFUSAL_CLOSURE_EXECUTABLE_CANONICAL_CODE_BASELINE: readonly ["bulk_ids_input_empty", "bulk_ids_input_missing_path", "bulk_ids_input_unreadable", "invalid_argument_value", "missing_lifecycle_target", "missing_required_argument", "projection_options_mutually_exclusive", "tracker_not_initialized", "tracker_root_missing", "tracker_root_not_directory", "tracker_root_unreadable", "unknown_context_intent", "unknown_field_projection", "unknown_option", "unknown_subcommand"];
51
+ /** Ratchet receipt that prevents catalog growth from erasing proven closure. */
52
+ export declare function verifyPmRefusalClosureRatchet(report: PmRefusalClosureCensusReport, baseline?: number): {
53
+ ok: boolean;
54
+ baseline: number;
55
+ actual: number;
56
+ };
57
+ /** Ratchet canonical compatibility-group identities independently from counts. */
58
+ export declare function verifyPmRefusalClosureIdentityRatchet(report: PmRefusalClosureCensusReport, requiredCanonicalCodes?: readonly string[]): {
59
+ ok: boolean;
60
+ required_canonical_codes: string[];
61
+ missing_required_canonical_codes: string[];
62
+ };
63
+ /** Build the complete closure join without silently omitting uncovered codes. */
64
+ export declare function buildPmRefusalClosureCensus(catalog: readonly PmErrorCodeContract[], closedDomains: readonly PmClosedDomainContract[], grammar: readonly PmGrammarRefusalContract[]): PmRefusalClosureCensusReport;
65
+ /** Render the complete census for generated documentation and review evidence. */
66
+ export declare function renderPmRefusalClosureCensusMarkdown(report: PmRefusalClosureCensusReport): string;
@@ -0,0 +1,144 @@
1
+ /** Reviewed floor of 16 catalog rows; includes one alias across 15 canonical groups. */
2
+
3
+ !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]="5560aa3a-036e-509c-955c-a09e9bf9df18")}catch(e){}}();
4
+ export const PM_REFUSAL_CLOSURE_EXECUTABLE_CODE_BASELINE = 16;
5
+ /** Fifteen canonical compatibility groups that must retain executable evidence. */
6
+ export const PM_REFUSAL_CLOSURE_EXECUTABLE_CANONICAL_CODE_BASELINE = Object.freeze([
7
+ "bulk_ids_input_empty",
8
+ "bulk_ids_input_missing_path",
9
+ "bulk_ids_input_unreadable",
10
+ "invalid_argument_value",
11
+ "missing_lifecycle_target",
12
+ "missing_required_argument",
13
+ "projection_options_mutually_exclusive",
14
+ "tracker_not_initialized",
15
+ "tracker_root_missing",
16
+ "tracker_root_not_directory",
17
+ "tracker_root_unreadable",
18
+ "unknown_context_intent",
19
+ "unknown_field_projection",
20
+ "unknown_option",
21
+ "unknown_subcommand",
22
+ ]);
23
+ /** Ratchet receipt that prevents catalog growth from erasing proven closure. */
24
+ export function verifyPmRefusalClosureRatchet(report, baseline = PM_REFUSAL_CLOSURE_EXECUTABLE_CODE_BASELINE) {
25
+ return {
26
+ ok: report.executable_error_code_count >= baseline,
27
+ baseline,
28
+ actual: report.executable_error_code_count,
29
+ };
30
+ }
31
+ /** Ratchet canonical compatibility-group identities independently from counts. */
32
+ export function verifyPmRefusalClosureIdentityRatchet(report, requiredCanonicalCodes = PM_REFUSAL_CLOSURE_EXECUTABLE_CANONICAL_CODE_BASELINE) {
33
+ const executableCanonicalCodes = new Set(report.rows
34
+ .filter(({ disposition }) => disposition === "executable")
35
+ .map(({ canonical_code: canonicalCode }) => canonicalCode));
36
+ const missingRequiredCanonicalCodes = requiredCanonicalCodes.filter((code) => !executableCanonicalCodes.has(code));
37
+ return {
38
+ ok: missingRequiredCanonicalCodes.length === 0,
39
+ required_canonical_codes: [...requiredCanonicalCodes],
40
+ missing_required_canonical_codes: missingRequiredCanonicalCodes,
41
+ };
42
+ }
43
+ function evidenceFor(evidence, canonicalCode) {
44
+ const existing = evidence.get(canonicalCode);
45
+ if (existing)
46
+ return existing;
47
+ const created = {
48
+ kinds: new Set(),
49
+ probeIds: new Set(),
50
+ };
51
+ evidence.set(canonicalCode, created);
52
+ return created;
53
+ }
54
+ /** Build the complete closure join without silently omitting uncovered codes. */
55
+ export function buildPmRefusalClosureCensus(catalog, closedDomains, grammar) {
56
+ const canonicalByCode = new Map(catalog.map((contract) => [
57
+ contract.code,
58
+ contract.canonical_code ?? contract.code,
59
+ ]));
60
+ const evidence = new Map();
61
+ let closedDomainProbeCount = 0;
62
+ let grammarProbeCount = 0;
63
+ for (const contract of catalog) {
64
+ const target = evidenceFor(evidence, contract.canonical_code ?? contract.code);
65
+ for (const state of contract.owned_states ?? []) {
66
+ target.kinds.add("owned_state");
67
+ target.probeIds.add(state.probe_id);
68
+ }
69
+ }
70
+ for (const contract of closedDomains) {
71
+ const canonical = canonicalByCode.get(contract.error_code);
72
+ if (canonical === undefined)
73
+ continue;
74
+ closedDomainProbeCount += 1;
75
+ const target = evidenceFor(evidence, canonical);
76
+ target.kinds.add("closed_domain");
77
+ target.probeIds.add(contract.probe_id);
78
+ }
79
+ for (const contract of grammar) {
80
+ const canonical = canonicalByCode.get(contract.error_code);
81
+ if (canonical === undefined)
82
+ continue;
83
+ grammarProbeCount += 1;
84
+ const target = evidenceFor(evidence, canonical);
85
+ target.kinds.add("grammar");
86
+ target.probeIds.add(contract.probe_id);
87
+ }
88
+ const rows = catalog
89
+ .map((contract) => {
90
+ const canonicalCode = contract.canonical_code ?? contract.code;
91
+ const joined = evidence.get(canonicalCode);
92
+ const probeIds = [...joined.probeIds].sort();
93
+ return {
94
+ code: contract.code,
95
+ canonical_code: canonicalCode,
96
+ disposition: probeIds.length > 0 ? "executable" : "uncovered",
97
+ evidence_kinds: [...joined.kinds].sort(),
98
+ probe_ids: probeIds,
99
+ };
100
+ })
101
+ .sort((left, right) => (left.code < right.code ? -1 : 1));
102
+ const uncoveredErrorCodes = rows
103
+ .filter(({ disposition }) => disposition === "uncovered")
104
+ .map(({ code }) => code);
105
+ const executableCount = rows.length - uncoveredErrorCodes.length;
106
+ return {
107
+ ok: uncoveredErrorCodes.length === 0,
108
+ catalog_error_code_count: rows.length,
109
+ executable_error_code_count: executableCount,
110
+ uncovered_error_code_count: uncoveredErrorCodes.length,
111
+ coverage_fraction: rows.length === 0 ? 1 : executableCount / rows.length,
112
+ closed_domain_probe_count: closedDomainProbeCount,
113
+ grammar_probe_count: grammarProbeCount,
114
+ uncovered_error_codes: uncoveredErrorCodes,
115
+ rows,
116
+ };
117
+ }
118
+ /** Render the complete census for generated documentation and review evidence. */
119
+ export function renderPmRefusalClosureCensusMarkdown(report) {
120
+ const rows = report.rows.map((row) => `| \`${row.code}\` | \`${row.canonical_code}\` | ${row.disposition} | ${row.evidence_kinds.join(", ") || "none"} | ${row.probe_ids.length} |`);
121
+ return [
122
+ "# Generated refusal closure census",
123
+ "",
124
+ "Tracker: `pm-f05lsg`.",
125
+ "",
126
+ "Every catalog code is listed. An `uncovered` row is an explicit closure obligation, never an omission or implied approval.",
127
+ "",
128
+ `- Catalog error codes: ${report.catalog_error_code_count}`,
129
+ `- Executable error codes: ${report.executable_error_code_count}`,
130
+ `- Executable-code ratchet floor: ${PM_REFUSAL_CLOSURE_EXECUTABLE_CODE_BASELINE}`,
131
+ `- Required executable canonical codes: ${PM_REFUSAL_CLOSURE_EXECUTABLE_CANONICAL_CODE_BASELINE.map((code) => `\`${code}\``).join(", ")}`,
132
+ `- Uncovered error codes: ${report.uncovered_error_code_count}`,
133
+ `- Coverage fraction: ${report.coverage_fraction.toFixed(6)}`,
134
+ `- Closed-domain probes: ${report.closed_domain_probe_count}`,
135
+ `- Grammar probes: ${report.grammar_probe_count}`,
136
+ "",
137
+ "| Error code | Canonical code | Disposition | Evidence kinds | Probe count |",
138
+ "| --- | --- | --- | --- | --- |",
139
+ ...rows,
140
+ "",
141
+ ].join("\n");
142
+ }
143
+ //# sourceMappingURL=refusal-closure-census.js.map
144
+ //# debugId=5560aa3a-036e-509c-955c-a09e9bf9df18
@@ -1,7 +1,8 @@
1
+ import type { ExtensionCommandCapabilityFamily } from "../core/extensions/command-metadata-contract.js";
1
2
  /** Visibility tiers shared by CLI help, completions, docs, extensions, and MCP. */
2
3
  export type PmCommandVisibilityTier = "core" | "standard" | "full" | "internal";
3
4
  /** Stable capability families shared by every agent-facing command surface. */
4
- export type PmCommandCapabilityFamily = "workspace" | "intake" | "context" | "lifecycle" | "evidence" | "graph" | "quality" | "automation" | "extensions" | "internal";
5
+ export type PmCommandCapabilityFamily = ExtensionCommandCapabilityFamily;
5
6
  /** One command's canonical agent-surface visibility declaration. */
6
7
  export interface PmCommandVisibilityContract {
7
8
  /** Canonical command path. */
@@ -14,6 +15,13 @@ export interface PmCommandCapabilityContract extends PmCommandVisibilityContract
14
15
  /** Exactly one stable capability family used to group the command. */
15
16
  family: PmCommandCapabilityFamily;
16
17
  }
18
+ /** One generated family route shared by guides, skills, and documentation. */
19
+ export interface PmCommandCapabilityGroup {
20
+ /** Stable capability family. */
21
+ family: PmCommandCapabilityFamily;
22
+ /** Non-internal commands owned by the family. */
23
+ commands: readonly string[];
24
+ }
17
25
  /** Resolve one command's stable capability family. */
18
26
  export declare function resolvePmCommandCapabilityFamily(command: string): PmCommandCapabilityFamily;
19
27
  /**
@@ -26,18 +34,39 @@ export declare function resolvePmCommandCapabilityFamily(command: string): PmCom
26
34
  export declare const PM_COMMAND_CAPABILITY_CONTRACTS: readonly PmCommandCapabilityContract[];
27
35
  /** Backward-compatible tier-only projection of the capability contract. */
28
36
  export declare const PM_COMMAND_VISIBILITY_CONTRACTS: readonly PmCommandVisibilityContract[];
37
+ /** Bounded compact-help contract: one conventional terminal screen. */
38
+ export declare const PM_CORE_HELP_BUDGET: Readonly<{
39
+ max_lines: 50;
40
+ max_utf8_bytes: 6000;
41
+ }>;
42
+ /** Root options retained in the compact progressive-disclosure help screen. */
43
+ export declare const PM_CORE_HELP_OPTION_FLAGS: readonly string[];
44
+ /** Measure rendered core help against its line and byte ceilings. */
45
+ export declare function measurePmCoreHelp(text: string): {
46
+ lines: number;
47
+ utf8_bytes: number;
48
+ within_budget: boolean;
49
+ };
29
50
  /** Resolve one command's declared tier; extension commands default to standard. */
30
51
  export declare function resolvePmCommandVisibilityTier(command: string, extensionTier?: PmCommandVisibilityTier): PmCommandVisibilityTier;
31
52
  /** Return commands visible at a requested tier, preserving contract order. */
32
53
  export declare function listPmCommandsForTier(tier: Exclude<PmCommandVisibilityTier, "internal">): string[];
54
+ /** Project an explicit command registry into one visibility tier. */
55
+ export declare function listPmCommandsForTierFromContracts(tier: Exclude<PmCommandVisibilityTier, "internal">, contracts: readonly PmCommandCapabilityContract[]): string[];
33
56
  /** Return commands in one capability family, preserving contract order. */
34
57
  export declare function listPmCommandsForFamily(family: PmCommandCapabilityFamily): string[];
58
+ /** Project an explicit command registry into one capability family. */
59
+ export declare function listPmCommandsForFamilyFromContracts(family: PmCommandCapabilityFamily, contracts: readonly PmCommandCapabilityContract[]): string[];
60
+ /** Group the command registry for progressive-disclosure routing surfaces. */
61
+ export declare function listPmCommandCapabilityGroups(contracts?: readonly PmCommandCapabilityContract[]): PmCommandCapabilityGroup[];
35
62
  /** MCP profile names accepted by the server and embedding hosts. */
36
63
  export type PmMcpToolProfile = "core" | "standard" | "full" | "custom";
37
64
  /** Mapping from one narrow MCP tool to the command contract that tiers it. */
38
65
  export declare const PM_MCP_TOOL_COMMAND_CONTRACTS: Readonly<Record<string, string>>;
39
66
  /** Resolve the tools visible in a named MCP profile from command tiers. */
40
67
  export declare function listPmMcpToolsForProfile(availableTools: readonly string[], profile: Exclude<PmMcpToolProfile, "custom">): string[];
68
+ /** Project an explicit command registry into one MCP tool profile. */
69
+ export declare function listPmMcpToolsForProfileFromContracts(availableTools: readonly string[], profile: Exclude<PmMcpToolProfile, "custom">, contracts: readonly PmCommandCapabilityContract[]): string[];
41
70
  /** Stable MCP resource contract generated from the same agent surface table. */
42
71
  export interface PmMcpResourceContract {
43
72
  /** Stable resource URI. */
@@ -75,3 +104,7 @@ export interface PmMcpPromptContract {
75
104
  export declare const PM_MCP_PROMPT_CONTRACTS: readonly PmMcpPromptContract[];
76
105
  /** Render the generated command visibility reference used by docs drift gates. */
77
106
  export declare function renderPmCommandVisibilityMarkdown(): string;
107
+ /** Render an explicit registry for mutation-sensitivity and host tooling. */
108
+ export declare function renderPmCommandVisibilityMarkdownFromContracts(contracts: readonly PmCommandCapabilityContract[]): string;
109
+ /** Render family routing for generated docs and skill progressive disclosure. */
110
+ export declare function renderPmCapabilityRoutingMarkdown(contracts?: readonly PmCommandCapabilityContract[]): string;
@@ -5,7 +5,7 @@
5
5
  * surfaces from one public SDK contract.
6
6
  */
7
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]="5e77c121-35a2-57d1-9a3e-f33447535c03")}catch(e){}}();
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]="51e187c6-d48f-59e8-ad23-c72670ade3cc")}catch(e){}}();
9
9
  import { PM_CORE_COMMAND_NAMES } from "./cli-contracts/enum-contracts.js";
10
10
  const CORE_COMMANDS = new Set([
11
11
  "claim",
@@ -14,6 +14,7 @@ const CORE_COMMANDS = new Set([
14
14
  "create",
15
15
  "get",
16
16
  "help",
17
+ "init",
17
18
  "list",
18
19
  "next",
19
20
  "plan",
@@ -167,6 +168,36 @@ export const PM_COMMAND_CAPABILITY_CONTRACTS = Object.freeze([
167
168
  ]);
168
169
  /** Backward-compatible tier-only projection of the capability contract. */
169
170
  export const PM_COMMAND_VISIBILITY_CONTRACTS = PM_COMMAND_CAPABILITY_CONTRACTS;
171
+ /** Bounded compact-help contract: one conventional terminal screen. */
172
+ export const PM_CORE_HELP_BUDGET = Object.freeze({
173
+ max_lines: 50,
174
+ max_utf8_bytes: 6000,
175
+ });
176
+ /** Root options retained in the compact progressive-disclosure help screen. */
177
+ export const PM_CORE_HELP_OPTION_FLAGS = Object.freeze([
178
+ "-V, --version",
179
+ "--json",
180
+ "--output-include <fields>",
181
+ "--output-limit <count>",
182
+ "--output-budget <tokens|unbounded>",
183
+ "--output-cursor <cursor>",
184
+ "--pm-path <dir>",
185
+ "--no-extensions",
186
+ "--no-pager",
187
+ "--explain",
188
+ "-h, --help",
189
+ ]);
190
+ /** Measure rendered core help against its line and byte ceilings. */
191
+ export function measurePmCoreHelp(text) {
192
+ const lines = text === "" ? 0 : text.split(/\r?\n/).length;
193
+ const utf8Bytes = Buffer.byteLength(text, "utf8");
194
+ return {
195
+ lines,
196
+ utf8_bytes: utf8Bytes,
197
+ within_budget: lines <= PM_CORE_HELP_BUDGET.max_lines &&
198
+ utf8Bytes <= PM_CORE_HELP_BUDGET.max_utf8_bytes,
199
+ };
200
+ }
170
201
  const TIER_ORDER = {
171
202
  core: 0,
172
203
  standard: 1,
@@ -180,12 +211,55 @@ export function resolvePmCommandVisibilityTier(command, extensionTier = "standar
180
211
  }
181
212
  /** Return commands visible at a requested tier, preserving contract order. */
182
213
  export function listPmCommandsForTier(tier) {
214
+ return listPmCommandsForTierFromContracts(tier, PM_COMMAND_CAPABILITY_CONTRACTS);
215
+ }
216
+ /** Project an explicit command registry into one visibility tier. */
217
+ export function listPmCommandsForTierFromContracts(tier, contracts) {
183
218
  const maximum = TIER_ORDER[tier];
184
- return PM_COMMAND_VISIBILITY_CONTRACTS.filter((entry) => entry.tier !== "internal" && TIER_ORDER[entry.tier] <= maximum).map((entry) => entry.command);
219
+ return contracts
220
+ .filter((entry) => entry.tier !== "internal" && TIER_ORDER[entry.tier] <= maximum)
221
+ .map((entry) => entry.command);
185
222
  }
186
223
  /** Return commands in one capability family, preserving contract order. */
187
224
  export function listPmCommandsForFamily(family) {
188
- return PM_COMMAND_CAPABILITY_CONTRACTS.filter((entry) => entry.family === family).map((entry) => entry.command);
225
+ return listPmCommandsForFamilyFromContracts(family, PM_COMMAND_CAPABILITY_CONTRACTS);
226
+ }
227
+ /** Project an explicit command registry into one capability family. */
228
+ export function listPmCommandsForFamilyFromContracts(family, contracts) {
229
+ return contracts
230
+ .filter((entry) => entry.family === family)
231
+ .map((entry) => entry.command);
232
+ }
233
+ const CAPABILITY_FAMILY_ORDER = [
234
+ "workspace",
235
+ "intake",
236
+ "context",
237
+ "lifecycle",
238
+ "evidence",
239
+ "graph",
240
+ "quality",
241
+ "automation",
242
+ "extensions",
243
+ "internal",
244
+ ];
245
+ const CAPABILITY_ROUTING_EXCLUDED_ALIASES = new Set([
246
+ "ctx",
247
+ "item-reopen",
248
+ "list-all",
249
+ "list-blocked",
250
+ "list-canceled",
251
+ "list-closed",
252
+ "list-draft",
253
+ "list-in-progress",
254
+ "list-open",
255
+ ]);
256
+ /** Group the command registry for progressive-disclosure routing surfaces. */
257
+ export function listPmCommandCapabilityGroups(contracts = PM_COMMAND_CAPABILITY_CONTRACTS) {
258
+ return CAPABILITY_FAMILY_ORDER.map((family) => ({
259
+ family,
260
+ commands: listPmCommandsForFamilyFromContracts(family, contracts).filter((command) => contracts.find((entry) => entry.command === command)?.tier !==
261
+ "internal" && !CAPABILITY_ROUTING_EXCLUDED_ALIASES.has(command)),
262
+ })).filter(({ commands }) => commands.length > 0);
189
263
  }
190
264
  /** Mapping from one narrow MCP tool to the command contract that tiers it. */
191
265
  export const PM_MCP_TOOL_COMMAND_CONTRACTS = Object.freeze({
@@ -223,9 +297,13 @@ export const PM_MCP_TOOL_COMMAND_CONTRACTS = Object.freeze({
223
297
  });
224
298
  /** Resolve the tools visible in a named MCP profile from command tiers. */
225
299
  export function listPmMcpToolsForProfile(availableTools, profile) {
300
+ return listPmMcpToolsForProfileFromContracts(availableTools, profile, PM_COMMAND_CAPABILITY_CONTRACTS);
301
+ }
302
+ /** Project an explicit command registry into one MCP tool profile. */
303
+ export function listPmMcpToolsForProfileFromContracts(availableTools, profile, contracts) {
226
304
  if (profile === "full")
227
305
  return [...availableTools];
228
- const visibleCommands = new Set(listPmCommandsForTier(profile));
306
+ const visibleCommands = new Set(listPmCommandsForTierFromContracts(profile, contracts));
229
307
  return availableTools.filter((tool) => {
230
308
  const command = PM_MCP_TOOL_COMMAND_CONTRACTS[tool];
231
309
  return command !== undefined && visibleCommands.has(command);
@@ -309,7 +387,11 @@ export const PM_MCP_PROMPT_CONTRACTS = Object.freeze([
309
387
  ]);
310
388
  /** Render the generated command visibility reference used by docs drift gates. */
311
389
  export function renderPmCommandVisibilityMarkdown() {
312
- const rows = PM_COMMAND_CAPABILITY_CONTRACTS.map(({ command, tier, family }) => `| \`${command}\` | ${tier} | ${family} |`);
390
+ return renderPmCommandVisibilityMarkdownFromContracts(PM_COMMAND_CAPABILITY_CONTRACTS);
391
+ }
392
+ /** Render an explicit registry for mutation-sensitivity and host tooling. */
393
+ export function renderPmCommandVisibilityMarkdownFromContracts(contracts) {
394
+ const rows = contracts.map(({ command, tier, family }) => `| \`${command}\` | ${tier} | ${family} |`);
313
395
  return [
314
396
  "# Generated agent command surface",
315
397
  "",
@@ -321,5 +403,21 @@ export function renderPmCommandVisibilityMarkdown() {
321
403
  "",
322
404
  ].join("\n");
323
405
  }
406
+ /** Render family routing for generated docs and skill progressive disclosure. */
407
+ export function renderPmCapabilityRoutingMarkdown(contracts = PM_COMMAND_CAPABILITY_CONTRACTS) {
408
+ const rows = listPmCommandCapabilityGroups(contracts).map(({ family, commands }) => `| ${family} | ${commands.map((command) => `\`${command}\``).join(", ")} |`);
409
+ return [
410
+ "# Generated agent capability routing",
411
+ "",
412
+ "Tracker: `pm-kxci8x`.",
413
+ "",
414
+ "This file is generated from `PM_COMMAND_CAPABILITY_CONTRACTS`. Do not edit it manually.",
415
+ "",
416
+ "| Capability family | Commands |",
417
+ "| --- | --- |",
418
+ ...rows,
419
+ "",
420
+ ].join("\n");
421
+ }
324
422
  //# sourceMappingURL=agent-capability-contracts.js.map
325
- //# debugId=5e77c121-35a2-57d1-9a3e-f33447535c03
423
+ //# debugId=51e187c6-d48f-59e8-ad23-c72670ade3cc
@@ -146,6 +146,8 @@ export declare function parseAnnotationTextInput(raw: string, options?: {
146
146
  export declare function isErrnoError(error: unknown): error is {
147
147
  code?: unknown;
148
148
  };
149
+ /** Refuse presentation-level stdin directives when JSON-RPC owns the process stream. */
150
+ export declare function assertAnnotationStdinTransportAvailable(options: AnnotationSourceOptions, optionName: string): void;
149
151
  /** Resolves mutually exclusive annotation input flags into one normalized SDK operation. */
150
152
  export declare function resolveAnnotationInput(options: AnnotationSourceOptions, noun: string): Promise<AnnotationInput>;
151
153
  /** Implements wrap ownership conflict for the public runtime surface of this module. */
@@ -4,13 +4,13 @@
4
4
  * Implements the pm annotation command 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]="eac75dc5-80b4-50d2-b615-4f96edca7346")}catch(e){}}();
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]="39acab93-f9ad-5b95-871e-625d912f1322")}catch(e){}}();
8
8
  import { assertInitializedTracker } from "./environment/tracker-preflight.js";
9
9
  import { readFile } from "node:fs/promises";
10
10
  import { isFileAbsentError } from "../core/fs/fs-utils.js";
11
11
  import { getActiveExtensionRegistrations } from "../core/extensions/index.js";
12
12
  import { resolveItemTypeRegistry } from "../core/item/type-registry.js";
13
- import { createStdinTokenResolver, parseCsvKv } from "../core/item/parse.js";
13
+ import { createStdinTokenResolver, parseCsvKv, shouldResolveMutationStdinTokens, transferMutationStdinTokenPolicy, } from "../core/item/parse.js";
14
14
  import { EXIT_CODE } from "../core/shared/constants.js";
15
15
  import { PmCliError } from "../core/shared/errors.js";
16
16
  import { parseLimit } from "../core/shared/numeric-parsers.js";
@@ -26,7 +26,7 @@ export function normalizeAnnotationTransportOptions(options) {
26
26
  ...(options.full === true ? { fullHistory: true } : {}),
27
27
  };
28
28
  delete normalized.full;
29
- return normalized;
29
+ return transferMutationStdinTokenPolicy(options, normalized);
30
30
  }
31
31
  /** Reject mutation of canonical structured events while allowing ordinary annotations. */
32
32
  function assertAnnotationEntryMutable(entry, operation) {
@@ -84,6 +84,15 @@ export function parseAnnotationTextInput(raw, options = {}) {
84
84
  export function isErrnoError(error) {
85
85
  return typeof error === "object" && error !== null && "code" in error;
86
86
  }
87
+ /** Refuse presentation-level stdin directives when JSON-RPC owns the process stream. */
88
+ export function assertAnnotationStdinTransportAvailable(options, optionName) {
89
+ if (shouldResolveMutationStdinTokens(options))
90
+ return;
91
+ throw new PmCliError(`${optionName} cannot read process stdin through the MCP JSON-RPC transport. Pass annotation text in options.add instead.`, EXIT_CODE.USAGE, {
92
+ code: "mcp_stdin_unavailable",
93
+ required: "Pass annotation text as JSON data; the MCP protocol already owns process stdin.",
94
+ });
95
+ }
87
96
  async function resolveAnnotationTextSource(options, noun) {
88
97
  const sourceCount = Number(options.add !== undefined) +
89
98
  Number(options.stdin === true) +
@@ -92,14 +101,16 @@ async function resolveAnnotationTextSource(options, noun) {
92
101
  throw new PmCliError(`Specify ${noun} text using only one input source: --add, --stdin, or --file`, EXIT_CODE.USAGE);
93
102
  }
94
103
  const stdinResolver = createStdinTokenResolver();
104
+ const resolveStdinTokens = shouldResolveMutationStdinTokens(options);
95
105
  if (options.add !== undefined) {
96
106
  return {
97
- value: (await stdinResolver.resolveValue(options.add, "--add")) ?? "",
107
+ value: (await stdinResolver.resolveValue(options.add, "--add", resolveStdinTokens)) ?? "",
98
108
  rawValue: options.add,
99
109
  emptyFlag: "--add",
100
110
  };
101
111
  }
102
112
  if (options.stdin === true) {
113
+ assertAnnotationStdinTransportAvailable(options, "--stdin");
103
114
  return {
104
115
  value: (await stdinResolver.resolveValue("-", "--stdin")) ?? "",
105
116
  emptyFlag: "--stdin",
@@ -111,15 +122,22 @@ async function resolveAnnotationTextSource(options, noun) {
111
122
  if (!filePath) {
112
123
  throw new PmCliError("--file path cannot be empty", EXIT_CODE.USAGE);
113
124
  }
125
+ if (filePath === "-") {
126
+ assertAnnotationStdinTransportAvailable(options, "--file -");
127
+ return {
128
+ value: (await stdinResolver.resolveValue("-", "--file")) ?? "",
129
+ emptyFlag: "--file",
130
+ };
131
+ }
114
132
  try {
115
133
  return { value: await readFile(filePath, "utf8"), emptyFlag: "--file" };
116
134
  }
117
135
  catch (error) {
118
136
  if (isErrnoError(error) && isFileAbsentError(error)) {
119
- throw new PmCliError(`--file path not found: ${filePath}`, EXIT_CODE.USAGE);
137
+ throw new PmCliError(`--file path not found: ${filePath}. Use --file - to read stdin.`, EXIT_CODE.USAGE);
120
138
  }
121
139
  const detail = error instanceof Error ? error.message : String(error);
122
- throw new PmCliError(`Failed to read --file path "${filePath}": ${detail}`, EXIT_CODE.USAGE);
140
+ throw new PmCliError(`Failed to read --file path "${filePath}": ${detail}. Use --file - to read stdin.`, EXIT_CODE.USAGE);
123
141
  }
124
142
  }
125
143
  /** Resolves mutually exclusive annotation input flags into one normalized SDK operation. */
@@ -398,4 +416,4 @@ function renderAnnotationResult(id, collectionKey, allEntries, limit, includeMet
398
416
  };
399
417
  }
400
418
  //# sourceMappingURL=annotations.js.map
401
- //# debugId=eac75dc5-80b4-50d2-b615-4f96edca7346
419
+ //# debugId=39acab93-f9ad-5b95-871e-625d912f1322
@@ -4,7 +4,7 @@
4
4
  * Defines SDK command-contract metadata for Tool Parameter Tables.
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]="fc485dff-5576-536e-86b2-8cc167d4513c")}catch(e){}}();
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]="2d43e788-cb8d-59b8-a447-4d24033bb55b")}catch(e){}}();
8
8
  import { PLAN_HARNESS_VALUES, PLAN_MODE_VALUES, PLAN_STEP_LINK_KIND_VALUES, PLAN_STEP_STATUS_VALUES, } from "../../types/index.js";
9
9
  import { PM_READ_OUTPUT_SESSION_MAX_SEEN_ITEM_IDS } from "../read-output-session.js";
10
10
  import { ASSURANCE_DEFINITION_SCHEMA } from "./schemas/assurance-definition.js";
@@ -687,6 +687,42 @@ export const PM_TOOL_ACTION_SCOPED_PARAMETER_PROPERTIES = {
687
687
  anyOf: [{ type: "string" }, { type: "array", items: { type: "string" } }],
688
688
  },
689
689
  },
690
+ "update-many": {
691
+ ids: {
692
+ anyOf: [
693
+ { type: "string" },
694
+ { type: "number" },
695
+ {
696
+ type: "array",
697
+ items: { anyOf: [{ type: "string" }, { type: "number" }] },
698
+ },
699
+ ],
700
+ },
701
+ },
702
+ "close-many": {
703
+ ids: {
704
+ anyOf: [
705
+ { type: "string" },
706
+ { type: "number" },
707
+ {
708
+ type: "array",
709
+ items: { anyOf: [{ type: "string" }, { type: "number" }] },
710
+ },
711
+ ],
712
+ },
713
+ },
714
+ "history-compact": {
715
+ ids: {
716
+ anyOf: [
717
+ { type: "string" },
718
+ { type: "number" },
719
+ {
720
+ type: "array",
721
+ items: { anyOf: [{ type: "string" }, { type: "number" }] },
722
+ },
723
+ ],
724
+ },
725
+ },
690
726
  events: {
691
727
  since: { type: "string", minLength: 1 },
692
728
  type: {
@@ -2092,4 +2128,4 @@ export const PM_TOOL_ACTION_SCOPED_PARAMETER_METADATA = {
2092
2128
  },
2093
2129
  };
2094
2130
  //# sourceMappingURL=tool-parameter-tables.js.map
2095
- //# debugId=fc485dff-5576-536e-86b2-8cc167d4513c
2131
+ //# debugId=2d43e788-cb8d-59b8-a447-4d24033bb55b
@@ -52,7 +52,10 @@ export type PmCloseActionOptions = DeclaredProperties<CloseCommandOptions> & {
52
52
  text?: string;
53
53
  };
54
54
  /** Typed bulk-mutation selection filters shared by the `update-many` and `close-many` actions, derived from the bulk-mutation filter contract table. */
55
- export type PmBulkMutationFilterOptions = OptionsFromContracts<typeof TOOL_BULK_MUTATION_FILTER_OPTION_CONTRACT_SOURCE>;
55
+ export type PmBulkMutationFilterOptions = Omit<OptionsFromContracts<typeof TOOL_BULK_MUTATION_FILTER_OPTION_CONTRACT_SOURCE>, "ids"> & {
56
+ /** Explicit item allowlist supplied as CSV text, a finite numeric scalar, or transport-native string/number IDs. */
57
+ ids?: string | number | readonly (string | number)[];
58
+ };
56
59
  /** Checkpoint/preview controls shared by the bulk mutation actions. Declared as an object type literal (not an interface) so the composed option bags keep their implicit index signature and stay assignable to the wide `Record`-based dispatch layer. */
57
60
  export type PmBulkMutationControlOptions = {
58
61
  /** Preview the bulk mutation without writing changes. */
@@ -1,5 +1,5 @@
1
1
 
2
- !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]="67e8cc8b-2908-5165-9f06-6e5d70f858b2")}catch(e){}}();
2
+ !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]="52969f17-1b8d-535e-93b6-b99d4e5b9917")}catch(e){}}();
3
3
  export {};
4
4
  //# sourceMappingURL=typed-action-inputs.js.map
5
- //# debugId=67e8cc8b-2908-5165-9f06-6e5d70f858b2
5
+ //# debugId=52969f17-1b8d-535e-93b6-b99d4e5b9917