@unbrained/pm-cli 2026.9.3 → 2026.9.4
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 +27 -0
- package/dist/cli-bundle/bundle-manifest.json +146 -146
- package/dist/cli-bundle/chunks/{chunk-E5RBBCXO.js → chunk-6XSKPNCF.js} +75 -75
- package/dist/cli-bundle/chunks/chunk-A24WAVE6.js +8 -0
- package/dist/cli-bundle/chunks/{chunk-DKGP3QLE.js → chunk-HI6BHPCU.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-Y4PJ6HPK.js → chunk-I2AS367G.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-IEHHE6GA.js → chunk-OGBVU67G.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-EDPIS7EB.js → chunk-RI4XNOYS.js} +2 -2
- package/dist/cli-bundle/chunks/chunk-TXW6VL33.js +38 -0
- package/dist/cli-bundle/chunks/{chunk-LENC656S.js → chunk-V72UV7QS.js} +76 -79
- package/dist/cli-bundle/chunks/chunk-VGLHECAP.js +9 -0
- package/dist/cli-bundle/chunks/{chunk-34HASX3S.js → chunk-X6CMGV6L.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-UPPM2FOZ.js → chunk-YW4QK2G7.js} +2 -2
- package/dist/cli-bundle/chunks/{register-list-query-W2ZTOMKP.js → register-list-query-Z5YYSJJG.js} +2 -2
- package/dist/cli-bundle/chunks/{register-mutation-RVND5NCG.js → register-mutation-ELSP6I4I.js} +2 -2
- package/dist/cli-bundle/chunks/{register-operations-TTROIVC4.js → register-operations-OH7R3ZT4.js} +2 -2
- package/dist/cli-bundle/chunks/{register-setup-D3ZFHY3L.js → register-setup-E2AE72QG.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-Q45NHPF2.js → chunk-25UJBH4M.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-4HJFY4MB.js → chunk-3646BZ4W.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-TXE4TSHM.js → chunk-4YRAVI43.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-M5M6SVHS.js → chunk-53IHPICX.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-5P4HVOWG.js +176 -0
- package/dist/cli-bundle/focused-chunks/chunk-636VVQ7F.js +54 -0
- package/dist/cli-bundle/focused-chunks/{chunk-D7KXFBXV.js → chunk-6PWPQKDN.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-S27XMBIN.js → chunk-7N2TV7WZ.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-5RFXUPN5.js → chunk-AJR3OP2E.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-KZ2NB3ET.js → chunk-B3A6MJYE.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-BWKHEIVF.js → chunk-BFDDJ2T2.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-4WR46RMG.js → chunk-BHUIRZWQ.js} +8 -8
- package/dist/cli-bundle/focused-chunks/{chunk-4RRHC3S4.js → chunk-JADHHPY6.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-GT7MXDLW.js → chunk-MHKUIPJW.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-NBMJD6MK.js +2 -0
- package/dist/cli-bundle/focused-chunks/chunk-NSKBLHVI.js +20 -0
- package/dist/cli-bundle/focused-chunks/{chunk-OL5EH6I3.js → chunk-P2GOAOQN.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-UCLO3XDU.js → chunk-YARWJM2B.js} +2 -2
- package/dist/cli-bundle/main.js +2 -2
- 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 +28 -31
- 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 -37
- 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 +10 -10
- package/dist/core/diagnostics/remediation.js +4 -4
- package/dist/core/history/history.d.ts +37 -1
- package/dist/core/history/history.js +278 -58
- package/dist/core/history/replay.js +68 -34
- package/dist/core/lock/lock.d.ts +10 -0
- package/dist/core/lock/lock.js +42 -3
- package/dist/core/shared/author.d.ts +3 -1
- package/dist/core/shared/author.js +111 -23
- package/dist/sdk/environment/agent-environment.d.ts +296 -0
- package/dist/sdk/environment/agent-environment.js +467 -0
- package/dist/sdk/environment/project-runtime-compatibility.d.ts +19 -1
- package/dist/sdk/environment/project-runtime-compatibility.js +118 -21
- package/dist/sdk/generated/generated-error-code-catalog-part-1.js +14 -2
- package/dist/sdk/generated/generated-error-code-catalog-part-2.js +14 -14
- package/dist/sdk/governance/health.js +13 -44
- package/dist/sdk/governance/merge-receipt-history.d.ts +62 -0
- package/dist/sdk/governance/merge-receipt-history.js +207 -0
- package/dist/sdk/governance/provenance-health.js +9 -3
- package/dist/sdk/history-compact.js +14 -5
- package/dist/sdk/history-redact.js +58 -23
- package/dist/sdk/history-repair.js +16 -6
- package/dist/sdk/index.d.ts +2 -0
- package/dist/sdk/index.js +4 -2
- package/dist/sdk/merge/driver.d.ts +3 -1
- package/dist/sdk/merge/driver.js +9 -9
- package/dist/sdk/merge/index.d.ts +1 -1
- package/dist/sdk/merge/index.js +3 -3
- package/dist/sdk/merge/receipts.d.ts +17 -6
- package/dist/sdk/merge/receipts.js +246 -75
- package/dist/sdk/merge/reconcile.d.ts +9 -7
- package/dist/sdk/merge/reconcile.js +175 -12
- package/dist/sdk/merge/three-way.d.ts +22 -2
- package/dist/sdk/merge/three-way.js +92 -25
- package/dist/sdk/runtime-primitives.d.ts +2 -2
- package/dist/sdk/runtime-primitives.js +4 -4
- package/dist/types.d.ts +25 -0
- package/dist/types.js +2 -2
- package/docs/AGENT_ENVIRONMENTS.md +47 -0
- package/docs/AGENT_PROVENANCE_ADR.md +17 -2
- package/docs/CONTEXT_INTEGRITY_CONTRACTS.md +38 -1
- package/docs/MERGE_SAFETY.md +119 -23
- package/docs/README.md +1 -0
- package/docs/SDK_CONTEXT_EVIDENCE_CONTRACTS.md +24 -2
- package/docs/SDK_RUNTIME_BOUNDARIES.md +17 -1
- package/docs/examples/sdk-agent-environment/README.md +14 -0
- package/docs/examples/sdk-agent-environment/package.json +8 -0
- package/docs/examples/sdk-agent-environment/run-agent-environment.mjs +154 -0
- package/docs/generated/REFUSAL_CLOSURE_CENSUS.md +4 -3
- package/marketplace.json +2 -2
- package/package.json +2 -2
- package/packages/pm-beads/package.json +1 -1
- package/packages/pm-calendar/package.json +1 -1
- package/packages/pm-command-kit/package.json +1 -1
- package/packages/pm-digital-twin/package.json +1 -1
- package/packages/pm-governance-audit/package.json +1 -1
- package/packages/pm-guide-shell/package.json +1 -1
- package/packages/pm-kanban/package.json +1 -1
- package/packages/pm-lifecycle-hooks/package.json +1 -1
- package/packages/pm-linked-test-adapters/package.json +1 -1
- package/packages/pm-search-advanced/package.json +1 -1
- package/packages/pm-templates/package.json +1 -1
- package/packages/pm-todos/package.json +1 -1
- package/packages/pm-vcs/package.json +1 -1
- package/plugins/pm-claude/.claude-plugin/plugin.json +1 -1
- package/plugins/pm-codex/.codex-plugin/plugin.json +1 -1
- package/sdk/public-surface.json +534 -24
- package/dist/cli-bundle/chunks/chunk-AY324UJ5.js +0 -9
- package/dist/cli-bundle/chunks/chunk-L7B7343B.js +0 -8
- package/dist/cli-bundle/chunks/chunk-LISESA7W.js +0 -35
- package/dist/cli-bundle/focused-chunks/chunk-3ZBI35HU.js +0 -176
- package/dist/cli-bundle/focused-chunks/chunk-GHCZ3YFR.js +0 -20
- package/dist/cli-bundle/focused-chunks/chunk-KBLZRU62.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-QKHCSUGJ.js +0 -51
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import { mkdtemp, rm } from "node:fs/promises";
|
|
2
|
+
import { tmpdir } from "node:os";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import {
|
|
5
|
+
PM_EPISODE_SCHEMA,
|
|
6
|
+
PM_OBSERVATION_SCHEMA,
|
|
7
|
+
PM_VERDICT_SCHEMA,
|
|
8
|
+
PM_WORKSPACE_RECIPE_SCHEMA,
|
|
9
|
+
PmClient,
|
|
10
|
+
defineEpisodeSpecification,
|
|
11
|
+
openPmEpisode,
|
|
12
|
+
runWithWorkspaceRecipe,
|
|
13
|
+
} from "@unbrained/pm-cli/sdk";
|
|
14
|
+
|
|
15
|
+
class PublicSdkAdapter {
|
|
16
|
+
constructor(workspace) {
|
|
17
|
+
this.client = new PmClient({ cwd: workspace, noExtensions: true });
|
|
18
|
+
this.itemId = "";
|
|
19
|
+
this.revision = 0;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
async reset(recipe) {
|
|
23
|
+
const created = await runWithWorkspaceRecipe(recipe, async () => {
|
|
24
|
+
await this.client.init("environment");
|
|
25
|
+
return this.client.create({
|
|
26
|
+
id: "pm-created-by-adapter",
|
|
27
|
+
title: "Complete the SDK environment task",
|
|
28
|
+
type: "Task",
|
|
29
|
+
status: "open",
|
|
30
|
+
description: "Created inside a deterministic public-SDK episode.",
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
this.itemId = created.item.id;
|
|
34
|
+
this.revision = 0;
|
|
35
|
+
return { workspace_id: "temporary-pm-workspace", state_id: "revision:0" };
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
async execute(_action) {
|
|
39
|
+
const result = await this.client.close(
|
|
40
|
+
this.itemId,
|
|
41
|
+
"Public SDK episode completed",
|
|
42
|
+
{
|
|
43
|
+
resolution: "The ordinary PmClient close action recorded completion.",
|
|
44
|
+
expected: "The task is closed through the public SDK.",
|
|
45
|
+
actual: "The task is closed through the public SDK.",
|
|
46
|
+
validateClose: "warn",
|
|
47
|
+
},
|
|
48
|
+
);
|
|
49
|
+
this.revision += 1;
|
|
50
|
+
return { state_id: `revision:${this.revision}`, output: result };
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
async readRecordedState() {
|
|
54
|
+
const result = await this.client.get(this.itemId);
|
|
55
|
+
return {
|
|
56
|
+
snapshot_id: `revision:${this.revision}`,
|
|
57
|
+
state: {
|
|
58
|
+
item: {
|
|
59
|
+
id: result.item.id,
|
|
60
|
+
title: result.item.title,
|
|
61
|
+
status: result.item.status,
|
|
62
|
+
resolution: result.item.resolution,
|
|
63
|
+
},
|
|
64
|
+
},
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
const observation = {
|
|
70
|
+
schema: PM_OBSERVATION_SCHEMA,
|
|
71
|
+
id: "sdk-task-state",
|
|
72
|
+
version: 1,
|
|
73
|
+
reads: [{ command: "get", budget_tokens: 256 }],
|
|
74
|
+
calibration: {
|
|
75
|
+
basis: "emitted_bytes",
|
|
76
|
+
samples: [96, 128, 160],
|
|
77
|
+
expected_emitted_bytes: 128,
|
|
78
|
+
tolerance_bytes: 32,
|
|
79
|
+
},
|
|
80
|
+
corpus_dependence: { kind: "independent" },
|
|
81
|
+
tiers: [
|
|
82
|
+
{
|
|
83
|
+
id: "standard",
|
|
84
|
+
max_tokens: 256,
|
|
85
|
+
fields: ["item.id", "item.title", "item.status", "item.resolution"],
|
|
86
|
+
},
|
|
87
|
+
{ id: "identity", max_tokens: 48, fields: ["item.id", "item.status"] },
|
|
88
|
+
],
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
const verdict = {
|
|
92
|
+
schema: PM_VERDICT_SCHEMA,
|
|
93
|
+
id: "sdk-task-closed",
|
|
94
|
+
version: 1,
|
|
95
|
+
predicates: [
|
|
96
|
+
{
|
|
97
|
+
id: "closed",
|
|
98
|
+
kind: "field_equals",
|
|
99
|
+
path: "item.status",
|
|
100
|
+
expected: "closed",
|
|
101
|
+
},
|
|
102
|
+
{ id: "explained", kind: "field_present", path: "item.resolution" },
|
|
103
|
+
],
|
|
104
|
+
composition: { operator: "all", predicate_ids: ["closed", "explained"] },
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
const workspace = await mkdtemp(join(tmpdir(), "pm-sdk-environment-"));
|
|
108
|
+
try {
|
|
109
|
+
const session = await openPmEpisode(
|
|
110
|
+
defineEpisodeSpecification({
|
|
111
|
+
schema: PM_EPISODE_SCHEMA,
|
|
112
|
+
id: "public-sdk-environment",
|
|
113
|
+
version: 1,
|
|
114
|
+
mode: "evaluation",
|
|
115
|
+
recipe: {
|
|
116
|
+
schema: PM_WORKSPACE_RECIPE_SCHEMA,
|
|
117
|
+
seed: "public-sdk-environment",
|
|
118
|
+
clock: "2026-09-03T00:00:00.000Z",
|
|
119
|
+
tickMs: 1,
|
|
120
|
+
operations: [],
|
|
121
|
+
},
|
|
122
|
+
task_item_ids: ["pm-created-by-adapter"],
|
|
123
|
+
observable_fields: [
|
|
124
|
+
"item.id",
|
|
125
|
+
"item.title",
|
|
126
|
+
"item.status",
|
|
127
|
+
"item.resolution",
|
|
128
|
+
],
|
|
129
|
+
withheld_fields: ["grading.expected_status"],
|
|
130
|
+
observation,
|
|
131
|
+
verdict,
|
|
132
|
+
limits: {
|
|
133
|
+
max_actions: 1,
|
|
134
|
+
max_observations: 2,
|
|
135
|
+
max_tokens_per_observation: 256,
|
|
136
|
+
},
|
|
137
|
+
}),
|
|
138
|
+
new PublicSdkAdapter(workspace),
|
|
139
|
+
);
|
|
140
|
+
const initial = await session.observe();
|
|
141
|
+
await session.step({ kind: "close" });
|
|
142
|
+
const completed = await session.close();
|
|
143
|
+
process.stdout.write(
|
|
144
|
+
`${JSON.stringify({
|
|
145
|
+
initial_status: initial.status,
|
|
146
|
+
initial_tier: initial.receipt.served_tier,
|
|
147
|
+
verdict: completed.verdict.outcome,
|
|
148
|
+
policy: completed.verdict.policy,
|
|
149
|
+
trajectory: completed.trajectory.map((entry) => entry.kind),
|
|
150
|
+
})}\n`,
|
|
151
|
+
);
|
|
152
|
+
} finally {
|
|
153
|
+
await rm(workspace, { recursive: true, force: true });
|
|
154
|
+
}
|
|
@@ -4,12 +4,12 @@ Tracker: `pm-f05lsg`.
|
|
|
4
4
|
|
|
5
5
|
Every catalog code is listed. An `uncovered` row is an explicit closure obligation, never an omission or implied approval.
|
|
6
6
|
|
|
7
|
-
- Catalog error codes:
|
|
7
|
+
- Catalog error codes: 357
|
|
8
8
|
- Executable error codes: 19
|
|
9
9
|
- Executable-code ratchet floor: 18
|
|
10
10
|
- Required executable canonical codes: `bulk_ids_input_empty`, `bulk_ids_input_missing_path`, `bulk_ids_input_unreadable`, `invalid_argument_value`, `manifest_unknown_key`, `missing_lifecycle_target`, `missing_required_argument`, `no_version_bounds_declared`, `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`
|
|
11
|
-
- Uncovered error codes:
|
|
12
|
-
- Coverage fraction: 0.
|
|
11
|
+
- Uncovered error codes: 338
|
|
12
|
+
- Coverage fraction: 0.053221
|
|
13
13
|
- Closed-domain probes: 19
|
|
14
14
|
- Grammar probes: 94
|
|
15
15
|
|
|
@@ -233,6 +233,7 @@ Every catalog code is listed. An `uncovered` row is an explicit closure obligati
|
|
|
233
233
|
| `profile_name_not_normalized` | `profile_name_not_normalized` | uncovered | none | 0 |
|
|
234
234
|
| `profile_summary_empty` | `profile_summary_empty` | uncovered | none | 0 |
|
|
235
235
|
| `profile_title_empty` | `profile_title_empty` | uncovered | none | 0 |
|
|
236
|
+
| `project_runtime_history_epoch_incompatible` | `project_runtime_history_epoch_incompatible` | uncovered | none | 0 |
|
|
236
237
|
| `project_runtime_stale_mutation` | `project_runtime_stale_mutation` | uncovered | none | 0 |
|
|
237
238
|
| `project_runtime_stale_read` | `project_runtime_stale_read` | uncovered | none | 0 |
|
|
238
239
|
| `projection_options_mutually_exclusive` | `projection_options_mutually_exclusive` | executable | closed_domain | 3 |
|
package/marketplace.json
CHANGED
|
@@ -6,14 +6,14 @@
|
|
|
6
6
|
},
|
|
7
7
|
"metadata": {
|
|
8
8
|
"description": "Official marketplace for pm CLI — native git-based project management for Claude Code and AI coding agents.",
|
|
9
|
-
"version": "2026.9.
|
|
9
|
+
"version": "2026.9.4"
|
|
10
10
|
},
|
|
11
11
|
"plugins": [
|
|
12
12
|
{
|
|
13
13
|
"name": "pm-claude",
|
|
14
14
|
"source": "./plugins/pm-claude",
|
|
15
15
|
"description": "Native pm CLI integration for Claude Code — 28 MCP tools, 5 workflow skills, 14 slash commands, 4 subagents, hybrid TUI task tracking, session context injection, and coordination subagents for git-based project management without leaving Claude Code.",
|
|
16
|
-
"version": "2026.9.
|
|
16
|
+
"version": "2026.9.4",
|
|
17
17
|
"author": {
|
|
18
18
|
"name": "unbrained",
|
|
19
19
|
"url": "https://github.com/unbraind/pm-cli"
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@unbrained/pm-cli",
|
|
3
|
-
"version": "2026.9.
|
|
3
|
+
"version": "2026.9.4",
|
|
4
4
|
"description": "Git-native project management CLI for humans and agents.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"packageManager": "pnpm@11.10.0",
|
|
@@ -221,7 +221,7 @@
|
|
|
221
221
|
"@eslint/js": "^10.0.1",
|
|
222
222
|
"@modelcontextprotocol/ext-apps": "1.7.5",
|
|
223
223
|
"@sentry/cli": "^3.7.0",
|
|
224
|
-
"@types/node": "^26.4.
|
|
224
|
+
"@types/node": "^26.4.1",
|
|
225
225
|
"@types/npm-package-arg": "^6.1.4",
|
|
226
226
|
"@vitest/coverage-v8": "^4.1.11",
|
|
227
227
|
"esbuild": "0.28.2",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@unbrained/pm-digital-twin",
|
|
3
|
-
"version": "2026.9.
|
|
3
|
+
"version": "2026.9.4",
|
|
4
4
|
"private": true,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"description": "Beyond-PM exemplar: a temporal production-facility digital twin built entirely on public pm SDK and extension primitives.",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pm-claude",
|
|
3
3
|
"description": "Native pm CLI integration for Claude Code — 28 MCP tools, 5 workflow skills, 14 slash commands, 4 subagents (coordinator, delivery-chain, triage, verification), hybrid TUI task tracking (pm as persistent store + Claude Code task panel as live view), session context injection, and full git-based project management without leaving Claude Code.",
|
|
4
|
-
"version": "2026.9.
|
|
4
|
+
"version": "2026.9.4",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "unbrained",
|
|
7
7
|
"url": "https://github.com/unbraind/pm-cli"
|