@unbrained/pm-cli 2026.9.4 → 2026.9.5
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/HARNESS_COMPATIBILITY.md +1 -1
- package/.agents/skills/README.md +2 -2
- package/.agents/skills/pm-developer/SKILL.md +4 -1
- package/.agents/skills/pm-developer/references/COMMAND_PLAYBOOK.md +10 -0
- package/.agents/skills/pm-developer/references/GRAPH_AND_RELATIONSHIPS.md +3 -1
- package/.agents/skills/pm-extensions/SKILL.md +2 -2
- package/.agents/skills/pm-extensions/references/LIFECYCLE.md +3 -3
- package/.agents/skills/pm-extensions/references/TROUBLESHOOTING.md +3 -3
- package/.agents/skills/pm-user/SKILL.md +2 -0
- package/.agents/skills/pm-user/references/BACKLOG_SHAPING.md +5 -0
- package/.agents/skills/pm-user/references/WORKFLOWS.md +20 -5
- package/.claude-plugin/marketplace.json +2 -2
- package/CHANGELOG.md +26 -1
- package/dist/cli/commander-usage.d.ts +2 -0
- package/dist/cli/commander-usage.js +15 -12
- package/dist/cli/help-json-payload.js +12 -7
- package/dist/cli/main.js +15 -6
- package/dist/cli/register-list-query.js +4 -2
- package/dist/cli/register-mutation.js +4 -2
- package/dist/cli/register-operations.js +6 -2
- package/dist/cli-bundle/bundle-manifest.json +153 -153
- package/dist/cli-bundle/chunks/{chunk-RI4XNOYS.js → chunk-3HBDTJRK.js} +2 -2
- package/dist/cli-bundle/chunks/chunk-66VPKFP2.js +5 -0
- package/dist/cli-bundle/chunks/{chunk-I2AS367G.js → chunk-HUAQITVW.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-HI6BHPCU.js → chunk-IBYREGSP.js} +2 -2
- package/dist/cli-bundle/chunks/chunk-LUI4E32I.js +231 -0
- package/dist/cli-bundle/chunks/{chunk-YW4QK2G7.js → chunk-QPZHQY2O.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-X6CMGV6L.js → chunk-SF6SM6U5.js} +2 -2
- package/dist/cli-bundle/chunks/chunk-SVK5Y64D.js +40 -0
- package/dist/cli-bundle/chunks/chunk-V5GBD5KV.js +9 -0
- package/dist/cli-bundle/chunks/{chunk-V72UV7QS.js → chunk-WWAEGW4V.js} +57 -57
- package/dist/cli-bundle/chunks/{chunk-A24WAVE6.js → chunk-ZRAQS3UA.js} +2 -2
- package/dist/cli-bundle/chunks/{register-list-query-Z5YYSJJG.js → register-list-query-AYKGODWT.js} +3 -3
- package/dist/cli-bundle/chunks/{register-mutation-ELSP6I4I.js → register-mutation-YZYG53SQ.js} +4 -4
- package/dist/cli-bundle/chunks/register-operations-KFSCC7QV.js +2 -0
- package/dist/cli-bundle/chunks/{register-setup-E2AE72QG.js → register-setup-UJCRVGBG.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-24IG6ONG.js +2 -0
- package/dist/cli-bundle/focused-chunks/{chunk-53IHPICX.js → chunk-3ASU6WGI.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-3ITLIBKS.js +56 -0
- package/dist/cli-bundle/focused-chunks/chunk-3NQD5YDG.js +2 -0
- package/dist/cli-bundle/focused-chunks/{chunk-7N2TV7WZ.js → chunk-4OSHLNUE.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-65N6JHAN.js +2 -0
- package/dist/cli-bundle/focused-chunks/{chunk-AJR3OP2E.js → chunk-B2TTQGFG.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-GUBM3RGY.js +20 -0
- package/dist/cli-bundle/focused-chunks/{chunk-25UJBH4M.js → chunk-H5FOGAVD.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-JX3RCVCX.js +2 -0
- package/dist/cli-bundle/focused-chunks/{chunk-6PWPQKDN.js → chunk-KWWCBWFO.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-MV752SUC.js +12 -0
- package/dist/cli-bundle/focused-chunks/chunk-PKIPMCFS.js +6 -0
- package/dist/cli-bundle/focused-chunks/{chunk-3646BZ4W.js → chunk-QL66QNWG.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-RJMR2JIF.js +9 -0
- package/dist/cli-bundle/focused-chunks/chunk-WIUPWIZR.js +177 -0
- package/dist/cli-bundle/focused-chunks/{chunk-NBMJD6MK.js → chunk-WOCIPMW7.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-MHKUIPJW.js → chunk-YEF5PQQ2.js} +2 -2
- package/dist/cli-bundle/main.js +22 -15
- package/dist/cli-bundle/sdk-authoring.js +1 -1
- package/dist/cli-bundle/sdk-contracts.js +1 -1
- 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 -39
- 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 +8 -8
- package/dist/core/extensions/extension-types.d.ts +2 -0
- package/dist/core/extensions/extension-types.js +2 -2
- package/dist/core/history/drift-scan.d.ts +5 -0
- package/dist/core/history/drift-scan.js +16 -6
- package/dist/core/history/event-classification.d.ts +1 -1
- package/dist/core/history/event-classification.js +3 -2
- package/dist/core/history/history.js +37 -5
- package/dist/core/history/identity.d.ts +15 -0
- package/dist/core/history/identity.js +31 -0
- package/dist/core/history/projection.js +50 -17
- package/dist/core/history/read.js +6 -3
- package/dist/core/history/replay.d.ts +1 -2
- package/dist/core/history/replay.js +4 -4
- package/dist/core/history/version-address.d.ts +13 -0
- package/dist/core/history/version-address.js +33 -0
- package/dist/core/item/actionability.d.ts +21 -1
- package/dist/core/item/actionability.js +45 -10
- package/dist/core/item/id.js +8 -4
- package/dist/core/item/item-type-definition.d.ts +2 -0
- package/dist/core/item/item-type-definition.js +9 -2
- package/dist/core/item/type-registry.d.ts +5 -1
- package/dist/core/item/type-registry.js +9 -4
- package/dist/core/shared/errors.d.ts +8 -0
- package/dist/core/shared/errors.js +2 -2
- package/dist/core/store/item-store.d.ts +14 -0
- package/dist/core/store/item-store.js +48 -10
- package/dist/core/store/settings-validator.js +3 -2
- package/dist/sdk/actionability.d.ts +1 -1
- package/dist/sdk/actionability.js +3 -3
- package/dist/sdk/cli-contracts/command-aliases.js +11 -2
- package/dist/sdk/cli-contracts/completeness.js +4 -3
- package/dist/sdk/cli-contracts/flag-contracts.js +29 -5
- package/dist/sdk/cli-contracts/flag-lexicon-contracts.js +19 -12
- package/dist/sdk/cli-contracts/tool-parameter-tables.js +14 -2
- package/dist/sdk/cli-contracts/tool-schema.d.ts +2 -2
- package/dist/sdk/cli-contracts/tool-schema.js +19 -6
- package/dist/sdk/context-intent-contracts.js +3 -3
- package/dist/sdk/context-usage.js +9 -11
- package/dist/sdk/define.d.ts +1 -1
- package/dist/sdk/define.js +2 -2
- package/dist/sdk/generated/generated-error-code-catalog-part-1.js +98 -50
- package/dist/sdk/generated/generated-error-code-catalog-part-2.js +50 -2
- package/dist/sdk/governance/validate-history-drift.js +16 -5
- package/dist/sdk/guide-topics.js +116 -2
- package/dist/sdk/history/salvage.d.ts +35 -0
- package/dist/sdk/history/salvage.js +248 -0
- package/dist/sdk/history-compact.js +32 -37
- package/dist/sdk/history-read.d.ts +3 -2
- package/dist/sdk/history-read.js +6 -3
- package/dist/sdk/history-repair.d.ts +5 -0
- package/dist/sdk/history-repair.js +14 -2
- package/dist/sdk/lifecycle/claim.d.ts +4 -0
- package/dist/sdk/lifecycle/claim.js +9 -3
- package/dist/sdk/lifecycle/restore.d.ts +1 -0
- package/dist/sdk/lifecycle/restore.js +19 -7
- package/dist/sdk/output-projection.d.ts +3 -1
- package/dist/sdk/output-projection.js +11 -3
- package/dist/sdk/public-surface.json +1 -0
- package/dist/sdk/query/context.d.ts +9 -0
- package/dist/sdk/query/context.js +33 -21
- package/dist/sdk/query/get.d.ts +2 -2
- package/dist/sdk/query/get.js +4 -3
- package/dist/sdk/query/history.d.ts +11 -0
- package/dist/sdk/query/history.js +34 -10
- package/dist/sdk/query/next.d.ts +15 -1
- package/dist/sdk/query/next.js +43 -20
- package/dist/sdk/query.d.ts +1 -0
- package/dist/sdk/query.js +3 -2
- package/dist/sdk/runtime-primitives.d.ts +1 -1
- package/dist/sdk/runtime-primitives.js +3 -3
- package/dist/types.d.ts +2 -0
- package/dist/types.js +2 -2
- package/docs/AGENT_GUIDE.md +36 -0
- package/docs/HISTORY_RECOVERY.md +146 -0
- package/docs/README.md +1 -0
- package/docs/RELEASING.md +25 -11
- package/docs/SDK_CONTEXT_TRUTH_CONTRACTS.md +24 -1
- package/docs/SDK_EXECUTION_CONTRACTS.md +105 -0
- package/docs/TESTING.md +5 -0
- package/docs/agent-task-token-baseline.json +17 -17
- package/docs/agent-task-transcripts.json +2 -1
- package/docs/generated/FLAG_LEXICON_BUDGETS.md +10 -10
- package/docs/generated/REFUSAL_CLOSURE_CENSUS.md +11 -3
- package/marketplace.json +2 -2
- package/package.json +4 -5
- 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-claude/skills/pm-audit/SKILL.md +2 -2
- package/plugins/pm-claude/skills/pm-developer/SKILL.md +2 -2
- package/plugins/pm-claude/skills/pm-planner/SKILL.md +2 -2
- package/plugins/pm-claude/skills/pm-release/SKILL.md +2 -2
- package/plugins/pm-claude/skills/pm-workflow/SKILL.md +3 -3
- package/plugins/pm-codex/.codex-plugin/plugin.json +1 -1
- package/plugins/pm-codex/skills/pm-auditor/SKILL.md +2 -2
- package/plugins/pm-codex/skills/pm-native/SKILL.md +3 -4
- package/plugins/pm-codex/skills/pm-release/SKILL.md +2 -2
- package/scripts/finalize-build.mjs +13 -1
- package/dist/cli-bundle/chunks/chunk-6XSKPNCF.js +0 -230
- package/dist/cli-bundle/chunks/chunk-OGBVU67G.js +0 -5
- package/dist/cli-bundle/chunks/chunk-TXW6VL33.js +0 -38
- package/dist/cli-bundle/chunks/chunk-VGLHECAP.js +0 -9
- package/dist/cli-bundle/chunks/register-operations-OH7R3ZT4.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-4YRAVI43.js +0 -12
- package/dist/cli-bundle/focused-chunks/chunk-5P4HVOWG.js +0 -176
- package/dist/cli-bundle/focused-chunks/chunk-636VVQ7F.js +0 -54
- package/dist/cli-bundle/focused-chunks/chunk-B3A6MJYE.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-BFDDJ2T2.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-BHUIRZWQ.js +0 -9
- package/dist/cli-bundle/focused-chunks/chunk-JADHHPY6.js +0 -6
- package/dist/cli-bundle/focused-chunks/chunk-NSKBLHVI.js +0 -20
- package/dist/cli-bundle/focused-chunks/chunk-P2GOAOQN.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-YARWJM2B.js +0 -2
- package/sdk/public-surface.json +0 -33034
|
@@ -10,9 +10,15 @@
|
|
|
10
10
|
* `blocked_by` resolution a single source of truth.
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
|
-
!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]="
|
|
13
|
+
!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]="7d98ca40-57e8-5afe-8e9d-b694da0130d1")}catch(e){}}();
|
|
14
14
|
import { isTerminalStatus, normalizeStatusForRegistry } from "./status.js";
|
|
15
|
+
import { BUILTIN_ITEM_EXECUTION_ROLES, resolveTypeDefinition } from "./type-registry.js";
|
|
15
16
|
import { isExternalDependencyReference, isExternalDependencySourceKind, } from "./dependency-reference.js";
|
|
17
|
+
/** Resolve dispatch semantics once for SDK callers, honoring custom and extension type aliases before built-in defaults. */
|
|
18
|
+
export function resolveItemExecutionRole(type, registry) {
|
|
19
|
+
const definition = registry === undefined ? undefined : resolveTypeDefinition(type, registry);
|
|
20
|
+
return definition?.execution_role ?? BUILTIN_ITEM_EXECUTION_ROLES[type.trim().toLowerCase()] ?? "agent";
|
|
21
|
+
}
|
|
16
22
|
/** Dependency kind that marks "this item is blocked by the referenced item". */
|
|
17
23
|
const BLOCKED_BY_DEPENDENCY_KIND = "blocked_by";
|
|
18
24
|
/** Reverse dependency kind that marks "this item blocks the referenced item". */
|
|
@@ -177,6 +183,24 @@ export function collectDependencyBlockedIds(corpus, statusRegistry) {
|
|
|
177
183
|
}
|
|
178
184
|
return blocked;
|
|
179
185
|
}
|
|
186
|
+
/** Select dispatch candidates from a classified report while retaining held-out worklists. Ownership and ranking remain caller responsibilities. */
|
|
187
|
+
export function selectActionableEntries(report, statusRegistry, options = {}, typeRegistry) {
|
|
188
|
+
const candidates = [...report.ready, ...report.decisions, ...report.gates];
|
|
189
|
+
if (options.includeContainers === true) {
|
|
190
|
+
candidates.push(...report.containers.filter((entry) => entry.open_blockers.length === 0 && !statusRegistry.blocked_statuses.has(normalizeStatusForRegistry(entry.item.status, statusRegistry))));
|
|
191
|
+
}
|
|
192
|
+
const selected = { ready: [], decisions: [], gates: [] };
|
|
193
|
+
for (const entry of candidates) {
|
|
194
|
+
const role = resolveItemExecutionRole(entry.item.type, typeRegistry);
|
|
195
|
+
if (role === "human" && options.includeDecisions !== true)
|
|
196
|
+
selected.decisions.push(entry);
|
|
197
|
+
else if (role === "gate" && options.includeGates !== true)
|
|
198
|
+
selected.gates.push(entry);
|
|
199
|
+
else
|
|
200
|
+
selected.ready.push(entry);
|
|
201
|
+
}
|
|
202
|
+
return selected;
|
|
203
|
+
}
|
|
180
204
|
/** Resolves the registry's active status set, falling back to just the canonical open status when a custom schema declares none — the same safety net `pm context` applies so the report never misclassifies every item as inactive. */
|
|
181
205
|
function resolveActiveStatusSet(statusRegistry) {
|
|
182
206
|
/* c8 ignore start -- fallback applies only to custom schemas that intentionally define zero active statuses */
|
|
@@ -242,7 +266,7 @@ function indexCorpus(corpus) {
|
|
|
242
266
|
* blockers and the non-terminal items it would unblock. Returned lists preserve
|
|
243
267
|
* the candidate order so the caller can apply its own ranking.
|
|
244
268
|
*/
|
|
245
|
-
export function computeActionabilityReport(candidates, corpus, statusRegistry) {
|
|
269
|
+
export function computeActionabilityReport(candidates, corpus, statusRegistry, typeRegistry) {
|
|
246
270
|
const { itemsById, childrenByParent, blockedByReverse, blockerIdsByItem } = indexCorpus(corpus);
|
|
247
271
|
const activeStatuses = new Set([
|
|
248
272
|
...resolveActiveStatusSet(statusRegistry),
|
|
@@ -255,16 +279,14 @@ export function computeActionabilityReport(candidates, corpus, statusRegistry) {
|
|
|
255
279
|
.map((entry) => normalizeItemId(entry.id)));
|
|
256
280
|
const ready = [];
|
|
257
281
|
const blocked = [];
|
|
282
|
+
const containers = [];
|
|
283
|
+
const decisions = [];
|
|
284
|
+
const gates = [];
|
|
258
285
|
let activeCount = 0;
|
|
259
|
-
let containerCount = 0;
|
|
260
286
|
for (const item of candidates) {
|
|
261
287
|
if (!activeStatuses.has(normalizeStatusForRegistry(item.status, statusRegistry)))
|
|
262
288
|
continue;
|
|
263
289
|
activeCount += 1;
|
|
264
|
-
if (hasOpenDescendant(item.id, childrenByParent, statusRegistry)) {
|
|
265
|
-
containerCount += 1;
|
|
266
|
-
continue;
|
|
267
|
-
}
|
|
268
290
|
const openBlockers = resolveItemBlockersWithIndex(item, itemsById, statusRegistry, blockerIdsByItem).filter((blocker) => !blocker.resolved);
|
|
269
291
|
const unblocks = (blockedByReverse.get(normalizeItemId(item.id)) ?? [])
|
|
270
292
|
.filter((dependentId) => nonTerminalIds.has(normalizeItemId(dependentId)))
|
|
@@ -274,9 +296,19 @@ export function computeActionabilityReport(candidates, corpus, statusRegistry) {
|
|
|
274
296
|
open_blockers: openBlockers,
|
|
275
297
|
unblocks,
|
|
276
298
|
};
|
|
299
|
+
if (hasOpenDescendant(item.id, childrenByParent, statusRegistry)) {
|
|
300
|
+
containers.push(entry);
|
|
301
|
+
continue;
|
|
302
|
+
}
|
|
277
303
|
const lifecycleBlocked = statusRegistry.blocked_statuses.has(normalizeStatusForRegistry(item.status, statusRegistry));
|
|
278
304
|
if (openBlockers.length === 0 && !lifecycleBlocked) {
|
|
279
|
-
|
|
305
|
+
const role = resolveItemExecutionRole(item.type, typeRegistry);
|
|
306
|
+
if (role === "human")
|
|
307
|
+
decisions.push(entry);
|
|
308
|
+
else if (role === "gate")
|
|
309
|
+
gates.push(entry);
|
|
310
|
+
else
|
|
311
|
+
ready.push(entry);
|
|
280
312
|
}
|
|
281
313
|
else {
|
|
282
314
|
blocked.push(entry);
|
|
@@ -285,9 +317,12 @@ export function computeActionabilityReport(candidates, corpus, statusRegistry) {
|
|
|
285
317
|
return {
|
|
286
318
|
ready,
|
|
287
319
|
blocked,
|
|
320
|
+
containers,
|
|
321
|
+
decisions,
|
|
322
|
+
gates,
|
|
288
323
|
active_count: activeCount,
|
|
289
|
-
container_count:
|
|
324
|
+
container_count: containers.length,
|
|
290
325
|
};
|
|
291
326
|
}
|
|
292
327
|
//# sourceMappingURL=actionability.js.map
|
|
293
|
-
//# debugId=
|
|
328
|
+
//# debugId=7d98ca40-57e8-5afe-8e9d-b694da0130d1
|
package/dist/core/item/id.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Defines item parsing, formatting, and lifecycle helpers for Id.
|
|
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]="04f02467-a4ee-5616-9fbf-3df1141efccf")}catch(e){}}();
|
|
8
8
|
import crypto from "node:crypto";
|
|
9
9
|
import path from "node:path";
|
|
10
10
|
import { TYPE_TO_FOLDER } from "../shared/constants.js";
|
|
@@ -60,11 +60,13 @@ function randomToken(length) {
|
|
|
60
60
|
}
|
|
61
61
|
return token;
|
|
62
62
|
}
|
|
63
|
+
/** Reserve an identity when either a live item path or its retained history exists. */
|
|
63
64
|
async function idExists(pmRoot, id, typeToFolder) {
|
|
64
65
|
const checks = [...new Set(Object.values(typeToFolder))].flatMap((folder) => [
|
|
65
66
|
path.join(pmRoot, folder, `${id}.md`),
|
|
66
67
|
path.join(pmRoot, folder, `${id}.toon`),
|
|
67
68
|
]);
|
|
69
|
+
checks.push(path.join(pmRoot, "history", `${id}.jsonl`));
|
|
68
70
|
return (await Promise.all(checks.map((target) => pathExists(target)))).some(Boolean);
|
|
69
71
|
}
|
|
70
72
|
/** Bounds accepted for the configurable random id token length (`ids.token_length`). */
|
|
@@ -95,8 +97,10 @@ export async function generateItemId(pmRoot, prefix, options = {}) {
|
|
|
95
97
|
while (tokenLength <= maxTokenLength) {
|
|
96
98
|
for (let i = 0; i < 32; i += 1) {
|
|
97
99
|
const id = `${normalizePrefix(prefix)}${randomToken(tokenLength)}`;
|
|
98
|
-
|
|
99
|
-
|
|
100
|
+
const occupied = await (options.probeExisting === false
|
|
101
|
+
? pathExists(path.join(pmRoot, "history", `${id}.jsonl`))
|
|
102
|
+
: idExists(pmRoot, id, options.typeToFolder ?? TYPE_TO_FOLDER));
|
|
103
|
+
if (!occupied) {
|
|
100
104
|
return id;
|
|
101
105
|
}
|
|
102
106
|
attempts += 1;
|
|
@@ -106,4 +110,4 @@ export async function generateItemId(pmRoot, prefix, options = {}) {
|
|
|
106
110
|
throw new Error(`Unable to generate unique id after ${attempts} attempts`);
|
|
107
111
|
}
|
|
108
112
|
//# sourceMappingURL=id.js.map
|
|
109
|
-
//# debugId=
|
|
113
|
+
//# debugId=04f02467-a4ee-5616-9fbf-3df1141efccf
|
|
@@ -38,6 +38,8 @@ export interface NormalizeItemTypeDefinitionOptions {
|
|
|
38
38
|
/** How to resolve a raw policy `command` value (defaults to {@link keepPolicyCommand}). */
|
|
39
39
|
resolvePolicyCommand?: ResolvePolicyCommand;
|
|
40
40
|
}
|
|
41
|
+
/** Validate an execution role before a settings or extension definition enters scheduling. Unknown values fail instead of silently enabling dispatch. */
|
|
42
|
+
export declare function parseItemExecutionRole(value: unknown): ItemTypeDefinition["execution_role"];
|
|
41
43
|
/**
|
|
42
44
|
* Normalize a full {@link ItemTypeDefinition}, returning null when the name is blank.
|
|
43
45
|
*
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
*/
|
|
16
16
|
/** Dedupe + sort a string list: trim, drop blanks, unique, locale-sorted. */
|
|
17
17
|
|
|
18
|
-
!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]="
|
|
18
|
+
!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]="f02cb2e7-2d5f-5cc8-8a60-18db78b50da0")}catch(e){}}();
|
|
19
19
|
export function normalizeItemTypeStringList(values) {
|
|
20
20
|
return [
|
|
21
21
|
...new Set((values ?? [])
|
|
@@ -85,6 +85,12 @@ function optionalNonEmptyString(value) {
|
|
|
85
85
|
const normalized = value?.trim();
|
|
86
86
|
return normalized && normalized.length > 0 ? normalized : undefined;
|
|
87
87
|
}
|
|
88
|
+
/** Validate an execution role before a settings or extension definition enters scheduling. Unknown values fail instead of silently enabling dispatch. */
|
|
89
|
+
export function parseItemExecutionRole(value) {
|
|
90
|
+
if (value === undefined || value === "agent" || value === "human" || value === "gate")
|
|
91
|
+
return value;
|
|
92
|
+
throw new Error("Item type execution_role must be agent, human, or gate.");
|
|
93
|
+
}
|
|
88
94
|
/**
|
|
89
95
|
* Normalize a full {@link ItemTypeDefinition}, returning null when the name is blank.
|
|
90
96
|
*
|
|
@@ -113,6 +119,7 @@ export function normalizeItemTypeDefinition(definition, options = {}) {
|
|
|
113
119
|
name,
|
|
114
120
|
description: optionalNonEmptyString(definition.description),
|
|
115
121
|
default_status: optionalNonEmptyString(definition.default_status),
|
|
122
|
+
...(definition.execution_role === undefined ? {} : { execution_role: parseItemExecutionRole(definition.execution_role) }),
|
|
116
123
|
folder: optionalNonEmptyString(definition.folder),
|
|
117
124
|
aliases: aliases.length > 0 ? aliases : undefined,
|
|
118
125
|
required_create_fields: normalizeOptionalStringList(definition.required_create_fields, hasRequiredCreateFields),
|
|
@@ -124,4 +131,4 @@ export function normalizeItemTypeDefinition(definition, options = {}) {
|
|
|
124
131
|
};
|
|
125
132
|
}
|
|
126
133
|
//# sourceMappingURL=item-type-definition.js.map
|
|
127
|
-
//# debugId=
|
|
134
|
+
//# debugId=f02cb2e7-2d5f-5cc8-8a60-18db78b50da0
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import type { ExtensionRegistrationRegistry } from "../extensions/loader.js";
|
|
2
|
-
import type { ItemTypeCommandOptionPolicy, ItemTypeOptionDefinition, PmSettings } from "../../types/index.js";
|
|
2
|
+
import type { ItemTypeCommandOptionPolicy, ItemTypeDefinition, ItemTypeOptionDefinition, PmSettings } from "../../types/index.js";
|
|
3
|
+
/** Default dispatch roles for built-in types whose work requires human input or outcome verification. Custom definitions can override these through the same registry. */
|
|
4
|
+
export declare const BUILTIN_ITEM_EXECUTION_ROLES: Readonly<Record<string, "human" | "gate">>;
|
|
3
5
|
/** Fallback required create fields used when callers do not provide an override. */
|
|
4
6
|
export declare const DEFAULT_REQUIRED_CREATE_FIELDS: readonly ["title", "description", "status", "priority", "tags", "body", "deadline", "estimatedMinutes", "acceptanceCriteria", "author", "message", "assignee"];
|
|
5
7
|
/** Fallback required create repeatables used when callers do not provide an override. */
|
|
@@ -31,6 +33,8 @@ export interface ResolvedItemTypeDefinition {
|
|
|
31
33
|
aliases: string[];
|
|
32
34
|
/** Optional per-type status applied at create time when `--status` is omitted. */
|
|
33
35
|
default_status?: string;
|
|
36
|
+
/** Effective dispatch role; absent legacy definitions are resolved through the built-in defaults. */
|
|
37
|
+
execution_role?: ItemTypeDefinition["execution_role"];
|
|
34
38
|
/** Value that configures or reports required create fields for this contract. */
|
|
35
39
|
required_create_fields: string[];
|
|
36
40
|
/** Value that configures or reports required create repeatables for this contract. */
|
|
@@ -4,11 +4,13 @@
|
|
|
4
4
|
* Defines item parsing, formatting, and lifecycle helpers for Type Registry.
|
|
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]="506efdc7-b04e-5023-ab59-57ede87558f9")}catch(e){}}();
|
|
8
8
|
import path from "node:path";
|
|
9
9
|
import { TYPE_TO_FOLDER } from "../shared/constants.js";
|
|
10
10
|
import { ITEM_TYPE_VALUES } from "../../types/index.js";
|
|
11
|
-
import { normalizeItemTypeDefinition as normalizeSharedItemTypeDefinition, normalizeItemTypeStringList, strictPolicyCommand, } from "./item-type-definition.js";
|
|
11
|
+
import { normalizeItemTypeDefinition as normalizeSharedItemTypeDefinition, normalizeItemTypeStringList, strictPolicyCommand, parseItemExecutionRole, } from "./item-type-definition.js";
|
|
12
|
+
/** Default dispatch roles for built-in types whose work requires human input or outcome verification. Custom definitions can override these through the same registry. */
|
|
13
|
+
export const BUILTIN_ITEM_EXECUTION_ROLES = Object.freeze({ decision: "human", milestone: "gate" });
|
|
12
14
|
/** Fallback required create fields used when callers do not provide an override. */
|
|
13
15
|
export const DEFAULT_REQUIRED_CREATE_FIELDS = [
|
|
14
16
|
"title",
|
|
@@ -421,6 +423,7 @@ function coerceTypeDefinitionFromUnknown(raw) {
|
|
|
421
423
|
name,
|
|
422
424
|
description,
|
|
423
425
|
default_status: defaultStatus,
|
|
426
|
+
execution_role: parseItemExecutionRole(record.execution_role),
|
|
424
427
|
folder,
|
|
425
428
|
aliases: readStringArray(record, "aliases"),
|
|
426
429
|
required_create_fields: readStringArray(record, "required_create_fields"),
|
|
@@ -462,6 +465,7 @@ function buildResolvedTypeDefinition(normalizedDefinition, existing) {
|
|
|
462
465
|
toDefaultFolder(keepName));
|
|
463
466
|
const resolvedDefinition = {
|
|
464
467
|
name: keepName,
|
|
468
|
+
execution_role: normalizedDefinition.execution_role,
|
|
465
469
|
folder,
|
|
466
470
|
aliases: normalizeItemTypeStringList([
|
|
467
471
|
...(existing?.aliases ?? []),
|
|
@@ -488,7 +492,7 @@ function applyTypeDefinitions(source, target) {
|
|
|
488
492
|
}
|
|
489
493
|
const lowerName = normalizedDefinition.name.toLowerCase();
|
|
490
494
|
const existing = target.get(lowerName);
|
|
491
|
-
target.set(lowerName, buildResolvedTypeDefinition(normalizedDefinition, existing));
|
|
495
|
+
target.set(lowerName, buildResolvedTypeDefinition({ ...normalizedDefinition, execution_role: normalizedDefinition.execution_role ?? existing?.execution_role }, existing));
|
|
492
496
|
}
|
|
493
497
|
}
|
|
494
498
|
function collectExtensionTypeDefinitions(registrations) {
|
|
@@ -516,6 +520,7 @@ export function resolveItemTypeRegistry(settings, extensionRegistrations = null)
|
|
|
516
520
|
for (const builtin of ITEM_TYPE_VALUES) {
|
|
517
521
|
byLowerName.set(builtin.toLowerCase(), {
|
|
518
522
|
name: builtin,
|
|
523
|
+
execution_role: BUILTIN_ITEM_EXECUTION_ROLES[builtin.toLowerCase()] ?? "agent",
|
|
519
524
|
folder: TYPE_TO_FOLDER[builtin],
|
|
520
525
|
aliases: [],
|
|
521
526
|
required_create_fields: [...DEFAULT_REQUIRED_CREATE_FIELDS],
|
|
@@ -708,4 +713,4 @@ export function validateTypeOptions(typeName, rawTypeOptions, registry) {
|
|
|
708
713
|
};
|
|
709
714
|
}
|
|
710
715
|
//# sourceMappingURL=type-registry.js.map
|
|
711
|
-
//# debugId=
|
|
716
|
+
//# debugId=506efdc7-b04e-5023-ab59-57ede87558f9
|
|
@@ -53,6 +53,14 @@ export interface PmCliErrorRecoveryPayload {
|
|
|
53
53
|
export interface PmCliErrorContext {
|
|
54
54
|
/** Value that configures or reports code for this contract. */
|
|
55
55
|
code?: string;
|
|
56
|
+
/** Item whose document could not be decoded or parsed. */
|
|
57
|
+
item_id?: string;
|
|
58
|
+
/** Exact filesystem path of the unreadable item document. */
|
|
59
|
+
item_path?: string;
|
|
60
|
+
/** Original document size before decoding or parsing. */
|
|
61
|
+
byte_length?: number;
|
|
62
|
+
/** Whether the original item document contained no bytes. */
|
|
63
|
+
empty?: boolean;
|
|
56
64
|
/** Stable failure class within the operation-specific error code. */
|
|
57
65
|
reason?: string;
|
|
58
66
|
/** Metadata field responsible for a validation failure, when known. */
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/** Implements the exported pm cli error runtime abstraction for core/shared/errors.ts. */
|
|
2
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]="
|
|
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]="9ab4b378-900c-5a2a-9237-b1d8d4f2ae13")}catch(e){}}();
|
|
4
4
|
export class PmCliError extends Error {
|
|
5
5
|
/** Value that configures or reports exit code for this contract. */
|
|
6
6
|
exitCode;
|
|
@@ -18,4 +18,4 @@ export class PmCliError extends Error {
|
|
|
18
18
|
}
|
|
19
19
|
}
|
|
20
20
|
//# sourceMappingURL=errors.js.map
|
|
21
|
-
//# debugId=
|
|
21
|
+
//# debugId=9ab4b378-900c-5a2a-9237-b1d8d4f2ae13
|
|
@@ -25,6 +25,20 @@ export declare function readLocatedItem(item: LocatedItem, options?: {
|
|
|
25
25
|
raw: string;
|
|
26
26
|
document: ItemDocument;
|
|
27
27
|
}>;
|
|
28
|
+
/**
|
|
29
|
+
* Read once and retain a recoverable parse failure beside its exact text snapshot.
|
|
30
|
+
* Filesystem and merge-conflict errors still throw; callers must explicitly
|
|
31
|
+
* reconstruct an invalid document before performing any mutation.
|
|
32
|
+
*/
|
|
33
|
+
export declare function readLocatedItemSnapshot(item: LocatedItem, options?: Parameters<typeof readLocatedItem>[1]): Promise<{
|
|
34
|
+
raw: string;
|
|
35
|
+
document: ItemDocument;
|
|
36
|
+
error: null;
|
|
37
|
+
} | {
|
|
38
|
+
raw: string;
|
|
39
|
+
document: null;
|
|
40
|
+
error: PmCliError;
|
|
41
|
+
}>;
|
|
28
42
|
/** Implements list all item metadata for the public runtime surface of this module. */
|
|
29
43
|
export declare function listAllItemMetadata(pmRoot: string, preferredFormat?: ItemFormat, typeToFolder?: Record<string, string>, warnings?: string[], schema?: RuntimeSchemaSettings): Promise<ItemMetadata[]>;
|
|
30
44
|
/**
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Reads and writes tracker storage with format-aware helpers for Item Store.
|
|
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]="c3390c01-c153-5baa-b9bd-07ea8d34828f")}catch(e){}}();
|
|
8
8
|
import fs from "node:fs/promises";
|
|
9
9
|
import path from "node:path";
|
|
10
10
|
import { getActiveExtensionRegistrations, projectAfterCommandItemSnapshot, recordAfterCommandAffectedItem, runActiveOnReadHooks, runActiveBeforeMutationHooks, runActiveOnWriteHooks, runActiveServiceOverride, } from "../extensions/index.js";
|
|
@@ -18,6 +18,7 @@ import { canonicalDocument, parseItemDocument, serializeItemDocument, } from "..
|
|
|
18
18
|
import { resolveItemTypeRegistry } from "../item/type-registry.js";
|
|
19
19
|
import { acquireLock } from "../lock/lock.js";
|
|
20
20
|
import { writeFileAtomic } from "../fs/fs-utils.js";
|
|
21
|
+
import { isUtf8 } from "node:buffer";
|
|
21
22
|
import { normalizeItemId, normalizeRawItemId } from "../item/id.js";
|
|
22
23
|
import { acquireItemMetadataDerivedIndexLock, listAllDocumentCandidatesCached, listAllDocumentsCached, listAllDocumentsCachedLight, refreshItemMetadataDerivedIndex, } from "./item-metadata-cache.js";
|
|
23
24
|
import { getHistoryPath, getItemPath, ITEM_FILE_EXTENSIONS } from "./paths.js";
|
|
@@ -96,18 +97,55 @@ export async function locateItem(pmRoot, rawId, idPrefix = "pm-", preferredForma
|
|
|
96
97
|
}
|
|
97
98
|
/** Implements read located item for the public runtime surface of this module. */
|
|
98
99
|
export async function readLocatedItem(item, options = {}) {
|
|
99
|
-
const
|
|
100
|
+
const snapshot = await readLocatedItemSnapshot(item, options);
|
|
101
|
+
if (snapshot.error !== null)
|
|
102
|
+
throw snapshot.error;
|
|
103
|
+
return { raw: snapshot.raw, document: snapshot.document };
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Read once and retain a recoverable parse failure beside its exact text snapshot.
|
|
107
|
+
* Filesystem and merge-conflict errors still throw; callers must explicitly
|
|
108
|
+
* reconstruct an invalid document before performing any mutation.
|
|
109
|
+
*/
|
|
110
|
+
export async function readLocatedItemSnapshot(item, options = {}) {
|
|
111
|
+
const bytes = await fs.readFile(item.itemPath);
|
|
112
|
+
if (!isUtf8(bytes)) {
|
|
113
|
+
throw new PmCliError("Item contains invalid UTF-8; preserve a binary backup before recovering it.", EXIT_CODE.CONFLICT, { code: "item_document_encoding_invalid", item_id: item.id, item_path: item.itemPath, byte_length: bytes.length, empty: false });
|
|
114
|
+
}
|
|
115
|
+
const raw = bytes.toString("utf8");
|
|
100
116
|
await runActiveOnReadHooks({
|
|
101
117
|
path: item.itemPath,
|
|
102
118
|
scope: "project",
|
|
103
119
|
});
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
120
|
+
let document;
|
|
121
|
+
try {
|
|
122
|
+
document = parseItemDocument(raw, {
|
|
123
|
+
format: item.item_format,
|
|
124
|
+
schema: options.schema,
|
|
125
|
+
extensionFieldNames: resolveActiveExtensionFieldNames(options.extensionFieldNames),
|
|
126
|
+
onWarning: (warning) => appendWarning(options.warnings, warning),
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
catch (error) {
|
|
130
|
+
if (error instanceof PmCliError && error.code === "item_document_invalid") {
|
|
131
|
+
return {
|
|
132
|
+
raw,
|
|
133
|
+
document: null,
|
|
134
|
+
error: new PmCliError(`Cannot read ${item.id} at ${item.itemPath}${bytes.length === 0 ? " (zero-length file)" : ""}: ${error.message}`, error.exitCode, {
|
|
135
|
+
...error.context,
|
|
136
|
+
item_id: item.id,
|
|
137
|
+
item_path: item.itemPath,
|
|
138
|
+
byte_length: bytes.length,
|
|
139
|
+
empty: bytes.length === 0,
|
|
140
|
+
nextSteps: [
|
|
141
|
+
`Run pm history ${item.id} --full, then pm restore ${item.id} <version> to recover a recorded state.`,
|
|
142
|
+
],
|
|
143
|
+
}),
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
throw error;
|
|
147
|
+
}
|
|
148
|
+
return { raw, document, error: null };
|
|
111
149
|
}
|
|
112
150
|
/** Implements list all item metadata for the public runtime surface of this module. */
|
|
113
151
|
export async function listAllItemMetadata(pmRoot, preferredFormat, typeToFolder = TYPE_TO_FOLDER, warnings, schema) {
|
|
@@ -649,4 +687,4 @@ export async function deleteItem(params) {
|
|
|
649
687
|
}
|
|
650
688
|
}
|
|
651
689
|
//# sourceMappingURL=item-store.js.map
|
|
652
|
-
//# debugId=
|
|
690
|
+
//# debugId=c3390c01-c153-5baa-b9bd-07ea8d34828f
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
* byte-identical to the previous implementation.
|
|
13
13
|
*/
|
|
14
14
|
|
|
15
|
-
!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]="
|
|
15
|
+
!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]="c9cac741-16ba-5466-806f-bf8881a2ffa2")}catch(e){}}();
|
|
16
16
|
import { GOVERNANCE_PRESET_VALUES, RUNTIME_FIELD_COMMAND_VALUES, RUNTIME_FIELD_TYPE_VALUES, RUNTIME_STATUS_ROLE_VALUES, RUNTIME_UNKNOWN_FIELD_POLICY_VALUES, } from "../../types.js";
|
|
17
17
|
// Generic over `never` so it is assignable to every `Outcome<T>`.
|
|
18
18
|
const FAIL = { ok: false };
|
|
@@ -137,6 +137,7 @@ const itemTypeDefinition = vObject({
|
|
|
137
137
|
// Per-type create-time default status (config-driven); preserved so inline
|
|
138
138
|
// settings.item_types.definitions behave identically to schema/types.json.
|
|
139
139
|
default_status: vOptional(vString),
|
|
140
|
+
execution_role: vOptional(vLiteral("agent", "human", "gate")),
|
|
140
141
|
folder: vOptional(vString),
|
|
141
142
|
aliases: vOptional(vArray(vString)),
|
|
142
143
|
required_create_fields: vOptional(vArray(vString)),
|
|
@@ -418,4 +419,4 @@ export function validateSettings(raw) {
|
|
|
418
419
|
return { success: true, data: result.value };
|
|
419
420
|
}
|
|
420
421
|
//# sourceMappingURL=settings-validator.js.map
|
|
421
|
-
//# debugId=
|
|
422
|
+
//# debugId=c9cac741-16ba-5466-806f-bf8881a2ffa2
|
|
@@ -7,4 +7,4 @@
|
|
|
7
7
|
* blocker or ready-work classifications without storage or rendering side
|
|
8
8
|
* effects.
|
|
9
9
|
*/
|
|
10
|
-
export { ACTIONABILITY_ORDERING_KINDS, collectBlockedByIds, collectBlockedByIdsFromCorpus, collectDependencyBlockedIds, computeActionabilityReport, indexBlockedByIds, resolveItemBlockers, type ActionabilityReport, type ActionableEntry, type ResolvedBlocker, } from "../core/item/actionability.js";
|
|
10
|
+
export { ACTIONABILITY_ORDERING_KINDS, collectBlockedByIds, collectBlockedByIdsFromCorpus, collectDependencyBlockedIds, computeActionabilityReport, indexBlockedByIds, resolveItemBlockers, resolveItemExecutionRole, selectActionableEntries, type ActionabilitySelectionOptions, type ActionabilityReport, type ActionableEntry, type ResolvedBlocker, } from "../core/item/actionability.js";
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* effects.
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
|
-
!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]="
|
|
12
|
-
export { ACTIONABILITY_ORDERING_KINDS, collectBlockedByIds, collectBlockedByIdsFromCorpus, collectDependencyBlockedIds, computeActionabilityReport, indexBlockedByIds, resolveItemBlockers, } from "../core/item/actionability.js";
|
|
11
|
+
!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]="7d393eb0-d24d-55d2-8e4e-e94805d91784")}catch(e){}}();
|
|
12
|
+
export { ACTIONABILITY_ORDERING_KINDS, collectBlockedByIds, collectBlockedByIdsFromCorpus, collectDependencyBlockedIds, computeActionabilityReport, indexBlockedByIds, resolveItemBlockers, resolveItemExecutionRole, selectActionableEntries, } from "../core/item/actionability.js";
|
|
13
13
|
//# sourceMappingURL=actionability.js.map
|
|
14
|
-
//# debugId=
|
|
14
|
+
//# debugId=7d393eb0-d24d-55d2-8e4e-e94805d91784
|
|
@@ -10,8 +10,17 @@
|
|
|
10
10
|
* are intentionally absent from default help and completion discovery.
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
|
-
!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]="
|
|
13
|
+
!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]="a7934e70-b1ea-5eac-b500-e4b18a6385a6")}catch(e){}}();
|
|
14
14
|
export const PM_COMMAND_ALIAS_CONTRACTS = [
|
|
15
|
+
{
|
|
16
|
+
alias: "tests",
|
|
17
|
+
canonical: "test",
|
|
18
|
+
canonical_argv: ["test"],
|
|
19
|
+
lifecycle: "permanent",
|
|
20
|
+
hidden: false,
|
|
21
|
+
registration: "bootstrap",
|
|
22
|
+
owner: "pm-u4t9gp",
|
|
23
|
+
},
|
|
15
24
|
...[
|
|
16
25
|
["fetch", "get"],
|
|
17
26
|
["read", "get"],
|
|
@@ -96,4 +105,4 @@ export function renderPmCommandAliasMigrationHint(contract) {
|
|
|
96
105
|
return `Deprecated command \`${contract.alias}\`; use \`pm ${contract.canonical_argv.join(" ")}\`.`;
|
|
97
106
|
}
|
|
98
107
|
//# sourceMappingURL=command-aliases.js.map
|
|
99
|
-
//# debugId=
|
|
108
|
+
//# debugId=a7934e70-b1ea-5eac-b500-e4b18a6385a6
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* a hand-picked test list.
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
|
-
!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]="
|
|
10
|
+
!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]="199e3ef5-93a0-5d93-8f77-d9d12bbc69d4")}catch(e){}}();
|
|
11
11
|
import { PM_TOOL_ACTIONS } from "./enum-contracts.js";
|
|
12
12
|
import { resolveSubcommandFlagContractsForCommand, } from "./flag-contracts.js";
|
|
13
13
|
import { pmToolActionParameterKeys } from "./tool-schema.js";
|
|
@@ -100,6 +100,7 @@ const ACTION_POSITIONAL_PARAMETERS = {
|
|
|
100
100
|
},
|
|
101
101
|
};
|
|
102
102
|
const ACTION_FLAG_PARAMETER_OVERRIDES = {
|
|
103
|
+
append: { "--text": "body" },
|
|
103
104
|
assurance: {
|
|
104
105
|
"--tree": "treeId",
|
|
105
106
|
"--owner": "owner",
|
|
@@ -139,7 +140,7 @@ const ACTION_FLAG_PARAMETER_OVERRIDES = {
|
|
|
139
140
|
docs: { "--note": "addNote" },
|
|
140
141
|
comments: { "--full-history": "full" },
|
|
141
142
|
notes: { "--file": "text", "--full-history": "full" },
|
|
142
|
-
learnings: { "--full-history": "full" },
|
|
143
|
+
learnings: { "--file": "text", "--full-history": "full" },
|
|
143
144
|
gc: { "--scope": "gcScope" },
|
|
144
145
|
contracts: { "--action": "contractAction" },
|
|
145
146
|
schema: {
|
|
@@ -390,4 +391,4 @@ export function analyzeSdkCliParameterCompleteness(source = {}) {
|
|
|
390
391
|
});
|
|
391
392
|
}
|
|
392
393
|
//# sourceMappingURL=completeness.js.map
|
|
393
|
-
//# debugId=
|
|
394
|
+
//# debugId=199e3ef5-93a0-5d93-8f77-d9d12bbc69d4
|