pm-context 2026.10.21 → 2026.10.23

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/CHANGELOG.md CHANGED
@@ -1,5 +1,29 @@
1
1
  # Changelog
2
2
 
3
+ ## 2026.10.23 - 2026-10-23
4
+
5
+ ### Added
6
+
7
+ - Focus context packs on changed and explicit files ([pm-context-ax7z](https://github.com/unbraind/pm-context/blob/main/.agents/pm/features/pm-context-ax7z.toon))
8
+
9
+ ### Changed
10
+
11
+ - Enable the gated GitHub issue sync ([pm-context-53bz](https://github.com/unbraind/pm-context/blob/main/.agents/pm/chores/pm-context-53bz.toon))
12
+ - Adopt pm-github 2026.10.16: default-branch-safe gated sync and daily gated closeout PRs ([pm-context-05ub](https://github.com/unbraind/pm-context/blob/main/.agents/pm/chores/pm-context-05ub.toon))
13
+
14
+ ### Fixed
15
+
16
+ - A release that merges but fails to publish is abandoned by the next day's run ([pm-context-7yrb](https://github.com/unbraind/pm-context/blob/main/.agents/pm/issues/pm-context-7yrb.toon))
17
+ - Harden the release merge wait against mergeStateStatus deadlock ([pm-context-jjbl](https://github.com/unbraind/pm-context/blob/main/.agents/pm/issues/pm-context-jjbl.toon))
18
+ - The changelog gate stamps an untagged version with the current date, so its verdict flips every midnight with no commit ([pm-context-a9iw](https://github.com/unbraind/pm-context/blob/main/.agents/pm/issues/pm-context-a9iw.toon))
19
+ - The release job authenticated with a stored npm token that expired, so publishing stopped while every other gate stayed green ([pm-context-594y](https://github.com/unbraind/pm-context/blob/main/.agents/pm/issues/pm-context-594y.toon))
20
+ - A release run bumped and committed a new version every night while publishing was impossible, because the only externally-failable step runs last ([pm-context-p965](https://github.com/unbraind/pm-context/blob/main/.agents/pm/issues/pm-context-p965.toon))
21
+
22
+ ### Other
23
+
24
+ - Enable GitHub CodeQL code scanning ([pm-context-f4tl](https://github.com/unbraind/pm-context/blob/main/.agents/pm/chores/pm-context-f4tl.toon))
25
+ - Certify pm-context on PM CLI/SDK 2026.10.4 and consolidate pending dependency updates ([pm-context-ht20](https://github.com/unbraind/pm-context/blob/main/.agents/pm/chores/pm-context-ht20.toon))
26
+
3
27
  ## 2026.10.21 - 2026-10-21
4
28
 
5
29
  ### Fixed
package/README.md CHANGED
@@ -73,7 +73,14 @@ contained files with path boundaries, so `src` matches `src/parser.ts` but
73
73
  Focus items rank by the number of unique matching paths, then status
74
74
  (`in_progress`, `open`, `blocked`, `closed` with `--include-closed`), then
75
75
  ascending priority and id. Existing neighborhood depth, focus limit, max-items
76
- and token packing apply afterward. An empty working set selects no focus items.
76
+ and token packing apply afterward. Under `--max-items` token pressure, equal-cost
77
+ focus candidates retain that order: greatest overlap first, then lifecycle
78
+ status, ascending priority, and ascending id as the final deterministic tie-break.
79
+ An empty working set selects no focus items.
80
+
81
+ Repository roots retain meaningful trailing whitespace. With older hosts that
82
+ trim the repository context, file focus recovers the exact root from the current
83
+ working repository when it matches that context.
77
84
 
78
85
  Every focus item exposes `matched_files`. `unlinked_changed_files` lists working
79
86
  set paths with no linked item anywhere in the tracker, independently of filters
@@ -373,3 +380,36 @@ pm-ops template; its internal callback is part of the outstanding documentation
373
380
  scope. The alert and workflow-verifier migration also requires coordinating the
374
381
  existing `pm-context-qu0a` ownership before migrating its linked paths. No helper
375
382
  has been marked removed while that dependency remains unresolved.
383
+
384
+ ## Resume since your last session
385
+
386
+ ```sh
387
+ pm context-pack since --from 2026-10-20T18:00:00Z --token-budget 4000
388
+ pm context-pack since --cursor "$cursor" --token-budget 4000
389
+ ```
390
+
391
+ Returns ranked changes, bounded substantive comments and handoff messages, claims,
392
+ a new opaque cursor and an omission receipt. The whole JSON response fits the
393
+ conservative UTF-8 byte-token ceiling; budget-deferred rows remain resumable.
394
+ See [cursor semantics and recovery](docs/since.md).
395
+
396
+ ## Resume only invalidated assumptions
397
+
398
+ Record a digest manifest for a packet whose sections declare item, settings and
399
+ local evidence dependencies. On resume, receive only invalidated sections;
400
+ changes propagate through dependent sections while unchanged assumptions reuse
401
+ safely. Deleted or unreadable sources refuse reuse with a bounded receipt.
402
+
403
+ ```sh
404
+ pm context-freshness record --packet packet.json > manifest.json
405
+ pm context-freshness resume --packet packet.json --manifest manifest.json --json
406
+ ```
407
+
408
+ No new snapshot store or event delta stream is created. See the
409
+ [packet example, typed SDK and refusal contracts](docs/freshness.md).
410
+
411
+ ## Without git
412
+
413
+ Item-selected packs, handoffs, usage reports, `context-pack since` and freshness record/resume work in a
414
+ plain initialized tracker without invoking Git. Changed-file focus (`--changed`)
415
+ requires a Git working repository and explains that requirement when unavailable.
@@ -16,7 +16,7 @@ export declare function normalizeFocusPath(value: string, root: string): string
16
16
  /** Check tracker containment using repository-relative paths on native and Windows roots. */
17
17
  export declare function isTrackerPath(path: string, pmRoot: string, repoRoot: string): boolean;
18
18
  /** Resolve --changed and repeated --files using real Git; an empty working set remains an active filter. */
19
- export declare function resolveFileFocus(options: Record<string, unknown>, args: string[], cwd: string, pmRoot: string): FileFocus | undefined;
19
+ export declare function resolveFileFocus(options: Record<string, unknown>, args: string[], cwd: string, pmRoot: string, sourceCwd?: string): FileFocus | undefined;
20
20
  /** Match exact files and linked directory ancestors, retaining unique changed paths per item. */
21
21
  export declare function matchFileFocus(items: PmItem[], focus: FileFocus, links: (value: unknown) => string[]): Map<string, string[]>;
22
22
  /** Rank focus by unique overlap, lifecycle status, priority, then deterministic id. */
@@ -1 +1 @@
1
- {"version":3,"file":"file-focus.d.ts","sourceRoot":"","sources":["../file-focus.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEzC,8EAA8E;AAC9E,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,sEAAsE;AACtE,qBAAa,cAAe,SAAQ,KAAK;IACvC,QAAQ,CAAC,QAAQ,KAAK;IACtB,QAAQ,CAAC,IAAI,EAAE,oBAAoB,GAAG,cAAc,GAAG,YAAY,GAAG,oBAAoB,GAAG,qBAAqB,CAAC;IACnH,YAAY,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,EAIhF;CACF;AASD,6FAA6F;AAC7F,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAalF;AAOD,6FAA6F;AAC7F,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAOrF;AAED,4GAA4G;AAC5G,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAsCrI;AAED,iGAAiG;AACjG,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAQ5H;AAED,uFAAuF;AACvF,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,MAAM,EAAE,CAKvF;AAED,4EAA4E;AAC5E,wBAAgB,eAAe,CAAC,KAAK,EAAE;IAAE,sBAAsB,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,MAAM,EAAE,CAItF;AAED,+GAA+G;AAC/G,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CA4B1E"}
1
+ {"version":3,"file":"file-focus.d.ts","sourceRoot":"","sources":["../file-focus.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEzC,8EAA8E;AAC9E,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,sEAAsE;AACtE,qBAAa,cAAe,SAAQ,KAAK;IACvC,QAAQ,CAAC,QAAQ,KAAK;IACtB,QAAQ,CAAC,IAAI,EAAE,oBAAoB,GAAG,cAAc,GAAG,YAAY,GAAG,oBAAoB,GAAG,qBAAqB,CAAC;IACnH,YAAY,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,EAIhF;CACF;AASD,6FAA6F;AAC7F,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAalF;AAOD,6FAA6F;AAC7F,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAOrF;AAED,4GAA4G;AAC5G,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,SAAM,GAAG,SAAS,GAAG,SAAS,CA0CtJ;AAED,iGAAiG;AACjG,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAQ5H;AAED,uFAAuF;AACvF,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,MAAM,EAAE,CAKvF;AAED,4EAA4E;AAC5E,wBAAgB,eAAe,CAAC,KAAK,EAAE;IAAE,sBAAsB,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,MAAM,EAAE,CAItF;AAED,+GAA+G;AAC/G,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CA4B1E"}
@@ -52,7 +52,7 @@ export function isTrackerPath(path, pmRoot, repoRoot) {
52
52
  return directory === "." || file === directory || file.startsWith(`${directory}/`);
53
53
  }
54
54
  /** Resolve --changed and repeated --files using real Git; an empty working set remains an active filter. */
55
- export function resolveFileFocus(options, args, cwd, pmRoot) {
55
+ export function resolveFileFocus(options, args, cwd, pmRoot, sourceCwd = cwd) {
56
56
  const changed = options.changed !== undefined && options.changed !== false;
57
57
  const explicit = options.files === undefined ? [] : Array.isArray(options.files) ? options.files.map(String) : [String(options.files)];
58
58
  if (!changed && explicit.length === 0) {
@@ -62,7 +62,11 @@ export function resolveFileFocus(options, args, cwd, pmRoot) {
62
62
  }
63
63
  if (args.length > 1 || (!changed && args.length > 0))
64
64
  throw new FileFocusError("INVALID_FILE_FOCUS", "Pass one base with --changed, or repeat --files <path>.");
65
- const root = git(cwd, ["rev-parse", "--show-toplevel"])?.trim();
65
+ // Older hosts trim their root context. Recover it only when the actual working
66
+ // repository matches that context, preserving portable roots for other repos.
67
+ const sourceRoot = git(sourceCwd, ["rev-parse", "--show-toplevel"])?.replace(/\n$/, "");
68
+ const root = sourceRoot?.trimEnd() === cwd ? sourceRoot
69
+ : git(cwd, ["rev-parse", "--show-toplevel"])?.replace(/\n$/, "");
66
70
  if (!root)
67
71
  throw new FileFocusError("NOT_GIT_REPOSITORY", "File focus requires a Git working repository. Run from the repository containing the changed files.");
68
72
  const files = new Set();
@@ -1 +1 @@
1
- {"version":3,"file":"file-focus.js","sourceRoot":"","sources":["../file-focus.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"file-focus.js","sourceRoot":"","sources":["../file-focus.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,82 @@
1
+ import { PmCliError } from "@unbrained/pm-cli/sdk";
2
+ /** Hard ceilings for untrusted packet inputs and agent-sized resume output. */
3
+ export declare const FRESHNESS_LIMITS: {
4
+ readonly input_bytes: 262144;
5
+ readonly sections: 256;
6
+ readonly sources: 1024;
7
+ readonly evidence_bytes: 8388608;
8
+ };
9
+ /** A source projection; omitted fields mean the complete authoritative item/settings. */
10
+ export type FreshnessSource = {
11
+ kind: "item";
12
+ id: string;
13
+ fields?: string[];
14
+ } | {
15
+ kind: "settings";
16
+ fields?: string[];
17
+ } | {
18
+ kind: "evidence";
19
+ path: string;
20
+ };
21
+ /** One assumption unit, with explicit source and transitive section dependencies. */
22
+ export interface FreshnessSection {
23
+ id: string;
24
+ content: string;
25
+ sources: FreshnessSource[];
26
+ depends_on: string[];
27
+ }
28
+ /** Producer-owned packet; content and dependency declarations are bound together. */
29
+ export interface FreshnessPacket {
30
+ sections: FreshnessSection[];
31
+ }
32
+ /** Backend adapter: return authoritative JSON-compatible values or reject unavailable reads. */
33
+ export type FreshnessReader = (source: FreshnessSource) => Promise<unknown>;
34
+ /** Source coordinates and canonical SHA-256 digests, with no item/evidence contents. */
35
+ export interface FreshnessManifest {
36
+ protocol: "pm-context-freshness/v1";
37
+ packet_digest: string;
38
+ sources: Array<{
39
+ source: FreshnessSource;
40
+ digest: string;
41
+ }>;
42
+ }
43
+ /** Invalidated assumptions only; unchanged sections are represented by their count. */
44
+ export interface FreshnessResult {
45
+ protocol: "pm-context-freshness/v1";
46
+ packet_digest: string;
47
+ code: "FRESH" | "STALE" | "SOURCE_UNAVAILABLE";
48
+ reusable: boolean;
49
+ checked_sources: number;
50
+ unchanged_sections: number;
51
+ invalidated_sections: number;
52
+ unavailable_sources: number;
53
+ invalidated: Array<{
54
+ section: string;
55
+ causes: string[];
56
+ }>;
57
+ omitted_sections: number;
58
+ remedy: string;
59
+ }
60
+ /** Expected refusals never include underlying paths, source values or exception messages. */
61
+ export declare class FreshnessError extends PmCliError {
62
+ /** Stable SDK and CLI refusal category. */
63
+ readonly code: "INVALID_PACKET" | "INVALID_MANIFEST" | "INVALID_ARGUMENT" | "INPUT_UNAVAILABLE" | "SOURCE_UNAVAILABLE" | "BUDGET_TOO_SMALL";
64
+ /** Concrete recovery action safe to expose in a public receipt. */
65
+ readonly remedy: string;
66
+ constructor(code: FreshnessError["code"], remedy: string);
67
+ }
68
+ /** Reject oversized, cyclic, duplicate or disconnected declarations before reading sources. */
69
+ export declare function parseFreshnessPacket(value: unknown): FreshnessPacket;
70
+ /** Capture digests at packet production time; a partial baseline is never accepted. */
71
+ export declare function recordFreshness(packet: FreshnessPacket, read: FreshnessReader): Promise<FreshnessManifest>;
72
+ /** Validate only declared assumptions; missing reads fail closed and propagate like changes. */
73
+ export declare function resumeFreshness(packet: FreshnessPacket, manifest: FreshnessManifest, read: FreshnessReader): Promise<FreshnessResult>;
74
+ /** Bound a complete JSON or compact TOON response; omission never implies safe reuse. */
75
+ export declare function encodeFreshness(result: FreshnessResult | FreshnessManifest, format: "json" | "toon", budget: number): string;
76
+ /** Read finite regular files only; reject links, devices, permissions and concurrent edits. */
77
+ export declare function readFreshnessFile(path: string, limit?: number): Buffer;
78
+ /** Decode a bounded input without exposing parser excerpts or local paths. */
79
+ export declare function readFreshnessJson(path: string): unknown;
80
+ /** Stateless authoritative SDK reads; reusing an adapter never reuses an earlier source value. */
81
+ export declare function createFreshnessReader(pmRoot: string, evidenceRoot: string): FreshnessReader;
82
+ //# sourceMappingURL=freshness.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"freshness.d.ts","sourceRoot":"","sources":["../freshness.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,UAAU,EAAkF,MAAM,uBAAuB,CAAC;AAEnI,+EAA+E;AAC/E,eAAO,MAAM,gBAAgB;aAAK,WAAW,EAAE,MAAM;aAAE,QAAQ,EAAE,GAAG;aAAE,OAAO,EAAE,IAAI;aAAE,cAAc,EAAE,OAAO;CAAW,CAAC;AACxH,yFAAyF;AACzF,MAAM,MAAM,eAAe,GACvB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,GAC/C;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,GACvC;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AACvC,qFAAqF;AACrF,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AACD,qFAAqF;AACrF,MAAM,WAAW,eAAe;IAAG,QAAQ,EAAE,gBAAgB,EAAE,CAAA;CAAE;AACjE,gGAAgG;AAChG,MAAM,MAAM,eAAe,GAAG,CAAC,MAAM,EAAE,eAAe,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAC5E,wFAAwF;AACxF,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,yBAAyB,CAAC;IACpC,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,eAAe,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC7D;AACD,uFAAuF;AACvF,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,yBAAyB,CAAC;IACpC,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,OAAO,GAAG,OAAO,GAAG,oBAAoB,CAAC;IAC/C,QAAQ,EAAE,OAAO,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,WAAW,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IAC1D,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;CAChB;AACD,6FAA6F;AAC7F,qBAAa,cAAe,SAAQ,UAAU;IAC5C,2CAA2C;IAC3C,SAAiB,IAAI,EAAE,gBAAgB,GAAG,kBAAkB,GAAG,kBAAkB,GAAG,mBAAmB,GAAG,oBAAoB,GAAG,kBAAkB,CAAC;IACpJ,mEAAmE;IACnE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,YAAY,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,EAGvD;CACF;AA+BD,+FAA+F;AAC/F,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,eAAe,CA0BpE;AAGD,uFAAuF;AACvF,wBAAsB,eAAe,CAAC,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAQhH;AAcD,gGAAgG;AAChG,wBAAsB,eAAe,CAAC,MAAM,EAAE,eAAe,EAAE,QAAQ,EAAE,iBAAiB,EAAE,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CA+B3I;AACD,yFAAyF;AACzF,wBAAgB,eAAe,CAAC,MAAM,EAAE,eAAe,GAAG,iBAAiB,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAqC5H;AACD,+FAA+F;AAC/F,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,GAAE,MAAqC,GAAG,MAAM,CAmBpG;AACD,8EAA8E;AAC9E,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAIvD;AACD,kGAAkG;AAClG,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,eAAe,CAgC3F"}
@@ -0,0 +1,299 @@
1
+ /** Portable assumption validation; manifests contain digests, never source snapshots. */
2
+ import { isUtf8 } from "node:buffer";
3
+ import { createHash } from "node:crypto";
4
+ import { constants, closeSync, fstatSync, openSync, readSync, realpathSync } from "node:fs";
5
+ import { dirname, isAbsolute, relative, resolve, sep } from "node:path";
6
+ import { PmCliError, readSettingsWithMetadata, locateItem, readLocatedItem, resolveItemTypeRegistry } from "@unbrained/pm-cli/sdk";
7
+ /** Hard ceilings for untrusted packet inputs and agent-sized resume output. */
8
+ export const FRESHNESS_LIMITS = { input_bytes: 262144, sections: 256, sources: 1024, evidence_bytes: 8388608 };
9
+ /** Expected refusals never include underlying paths, source values or exception messages. */
10
+ export class FreshnessError extends PmCliError {
11
+ /** Concrete recovery action safe to expose in a public receipt. */
12
+ remedy;
13
+ constructor(code, remedy) {
14
+ super(`${code}: ${remedy}`, 2, { code, nextSteps: [remedy] });
15
+ this.remedy = remedy;
16
+ }
17
+ }
18
+ /** Canonicalize object keys recursively; array order remains semantically significant. */
19
+ function canonical(value) {
20
+ if (Array.isArray(value))
21
+ return `[${value.map(canonical).join(",")}]`;
22
+ if (value !== null && typeof value === "object")
23
+ return `{${Object.keys(value).filter((key) => value[key] !== undefined).sort().map((key) => `${JSON.stringify(key)}:${canonical(value[key])}`).join(",")}}`;
24
+ const encoded = JSON.stringify(value);
25
+ if (encoded === undefined)
26
+ throw new FreshnessError("SOURCE_UNAVAILABLE", "Read a complete JSON-compatible source and record a new manifest.");
27
+ return encoded;
28
+ }
29
+ /** Hash values independent of property insertion order and process locale. */
30
+ function digest(value) { return createHash("sha256").update(canonical(value)).digest("hex"); }
31
+ /** Require plain JSON objects at untrusted protocol boundaries. */
32
+ function object(value) { return value !== null && typeof value === "object" && !Array.isArray(value); }
33
+ /** Restrict public coordinates to bounded, printable identifiers. */
34
+ function identifier(value) { return typeof value === "string" && /^[a-zA-Z0-9][a-zA-Z0-9_.:-]{0,127}$/.test(value); }
35
+ /** Evidence paths are portable relative coordinates, never URLs or parent traversal. */
36
+ function evidencePath(value) {
37
+ return typeof value === "string" && value.length > 0 && value.length <= 512 && !isAbsolute(value) && !/[\\:\x00-\x1f\x7f]/.test(value) && value.split("/").every((part) => part !== "" && part !== "." && part !== "..");
38
+ }
39
+ /** Reject unknown fields so producers cannot silently rely on unvalidated semantics. */
40
+ function keys(value, allowed) { return Object.keys(value).every((key) => allowed.includes(key)); }
41
+ /** Validate every source coordinate before any adapter or filesystem access. */
42
+ function sourceValid(value) {
43
+ if (!object(value))
44
+ return false;
45
+ if (value.kind === "evidence")
46
+ return keys(value, ["kind", "path"]) && evidencePath(value.path);
47
+ if (value.kind !== "item" && value.kind !== "settings")
48
+ return false;
49
+ if (!keys(value, ["kind", ...(value.kind === "item" ? ["id"] : []), "fields"]) || (value.kind === "item" && !identifier(value.id)))
50
+ return false;
51
+ return value.fields === undefined || (Array.isArray(value.fields) && value.fields.length > 0 && value.fields.length <= 64 && value.fields.every(identifier) && new Set(value.fields).size === value.fields.length);
52
+ }
53
+ /** Canonical source key includes the exact field projection; no delimiter ambiguity. */
54
+ function sourceKey(source) { return canonical(source); }
55
+ /** Reject oversized, cyclic, duplicate or disconnected declarations before reading sources. */
56
+ export function parseFreshnessPacket(value) {
57
+ const fail = () => new FreshnessError("INVALID_PACKET", "Supply 1-256 uniquely named sections with content, sources and acyclic depends_on; use item/settings fields or relative evidence paths.");
58
+ let size;
59
+ try {
60
+ size = Buffer.byteLength(JSON.stringify(value) ?? "");
61
+ }
62
+ catch {
63
+ throw fail();
64
+ }
65
+ if (size > FRESHNESS_LIMITS.input_bytes || !object(value) || !keys(value, ["sections"]) || !Array.isArray(value.sections) || value.sections.length === 0 || value.sections.length > FRESHNESS_LIMITS.sections)
66
+ throw fail();
67
+ const sections = value.sections;
68
+ const ids = new Set();
69
+ for (const section of sections) {
70
+ if (!object(section) || !keys(section, ["id", "content", "sources", "depends_on"]) || !identifier(section.id) || ids.has(section.id) || typeof section.content !== "string" || !Array.isArray(section.sources) || !section.sources.every(sourceValid) || !Array.isArray(section.depends_on) || !section.depends_on.every(identifier) || new Set(section.depends_on).size !== section.depends_on.length || section.sources.length + section.depends_on.length === 0)
71
+ throw fail();
72
+ ids.add(section.id);
73
+ }
74
+ const packet = value;
75
+ const sectionsById = new Map(packet.sections.map((section) => [section.id, section]));
76
+ const done = new Set();
77
+ const visiting = new Set();
78
+ /** A depth-first check bounds dependency traversal by the declared section ceiling. */
79
+ function visit(id) {
80
+ if (done.has(id))
81
+ return;
82
+ if (visiting.has(id) || !ids.has(id))
83
+ throw fail();
84
+ visiting.add(id);
85
+ for (const dep of sectionsById.get(id).depends_on)
86
+ visit(dep);
87
+ visiting.delete(id);
88
+ done.add(id);
89
+ }
90
+ for (const id of ids)
91
+ visit(id);
92
+ if (uniqueSources(packet).length > FRESHNESS_LIMITS.sources)
93
+ throw fail();
94
+ return packet;
95
+ }
96
+ /** Share identical source reads between sections without introducing persistent caches. */
97
+ function uniqueSources(packet) { return [...new Map(packet.sections.flatMap((section) => section.sources).map((source) => [sourceKey(source), source])).values()]; }
98
+ /** Capture digests at packet production time; a partial baseline is never accepted. */
99
+ export async function recordFreshness(packet, read) {
100
+ parseFreshnessPacket(packet);
101
+ const sources = [];
102
+ for (const source of uniqueSources(packet)) {
103
+ try {
104
+ sources.push({ source, digest: digest(await read(source)) });
105
+ }
106
+ catch {
107
+ throw new FreshnessError("SOURCE_UNAVAILABLE", "Restore source access and regenerate the packet and manifest together; no reusable baseline was recorded.");
108
+ }
109
+ }
110
+ return { protocol: "pm-context-freshness/v1", packet_digest: digest(packet), sources };
111
+ }
112
+ /** Validate both manifest shape and complete correspondence with the supplied packet. */
113
+ function manifestFor(value, packet) {
114
+ const fail = () => new FreshnessError("INVALID_MANIFEST", "Use the original packet with its complete manifest, or regenerate both; a manifest is an integrity receipt, not an authentication signature.");
115
+ if (!object(value) || !keys(value, ["protocol", "packet_digest", "sources"]) || value.protocol !== "pm-context-freshness/v1" || value.packet_digest !== digest(packet) || !Array.isArray(value.sources) || value.sources.length > FRESHNESS_LIMITS.sources)
116
+ throw fail();
117
+ const expected = uniqueSources(packet).map(sourceKey).sort();
118
+ const actual = [];
119
+ for (const entry of value.sources) {
120
+ if (!object(entry) || !keys(entry, ["source", "digest"]) || !sourceValid(entry.source) || typeof entry.digest !== "string" || !/^[a-f0-9]{64}$/.test(entry.digest))
121
+ throw fail();
122
+ actual.push(sourceKey(entry.source));
123
+ }
124
+ if (JSON.stringify(expected) !== JSON.stringify(actual.sort()))
125
+ throw fail();
126
+ return value;
127
+ }
128
+ /** Validate only declared assumptions; missing reads fail closed and propagate like changes. */
129
+ export async function resumeFreshness(packet, manifest, read) {
130
+ parseFreshnessPacket(packet);
131
+ const baseline = manifestFor(manifest, packet);
132
+ const changed = new Map();
133
+ let unavailable = 0;
134
+ for (const entry of baseline.sources) {
135
+ const key = sourceKey(entry.source);
136
+ try {
137
+ if (digest(await read(entry.source)) !== entry.digest)
138
+ changed.set(key, `changed:${key}`);
139
+ }
140
+ catch {
141
+ unavailable++;
142
+ changed.set(key, `unavailable:${key}`);
143
+ }
144
+ }
145
+ const sectionsById = new Map(packet.sections.map((section) => [section.id, section]));
146
+ const causes = new Map();
147
+ /** Memoize transitive causes once so shared and diamond dependencies stay deterministic. */
148
+ function reasons(id) {
149
+ const existing = causes.get(id);
150
+ if (existing)
151
+ return existing;
152
+ const section = sectionsById.get(id);
153
+ const result = new Set(section.sources.map((source) => changed.get(sourceKey(source))).filter((cause) => cause !== undefined));
154
+ for (const dep of section.depends_on)
155
+ for (const cause of reasons(dep))
156
+ result.add(cause);
157
+ causes.set(id, result);
158
+ return result;
159
+ }
160
+ const invalidated = packet.sections.map((section) => ({ section: section.id, causes: [...reasons(section.id)].sort() })).filter((row) => row.causes.length > 0);
161
+ return {
162
+ protocol: "pm-context-freshness/v1", packet_digest: baseline.packet_digest,
163
+ code: unavailable > 0 ? "SOURCE_UNAVAILABLE" : invalidated.length > 0 ? "STALE" : "FRESH",
164
+ reusable: invalidated.length === 0, checked_sources: baseline.sources.length,
165
+ unchanged_sections: packet.sections.length - invalidated.length, invalidated_sections: invalidated.length,
166
+ unavailable_sources: unavailable, invalidated, omitted_sections: 0,
167
+ remedy: unavailable > 0 ? "Restore missing, unreadable or corrupt sources, regenerate invalidated sections and record a new manifest. Do not reuse the packet." : invalidated.length > 0 ? "Regenerate invalidated sections and record a new manifest; retain unchanged sections." : "Reuse this packet for the declared sources at this read boundary; revalidate after later changes.",
168
+ };
169
+ }
170
+ /** Bound a complete JSON or compact TOON response; omission never implies safe reuse. */
171
+ export function encodeFreshness(result, format, budget) {
172
+ if (!Number.isSafeInteger(budget) || budget < 512)
173
+ throw new FreshnessError("INVALID_ARGUMENT", "Use an integer --byte-budget of at least 512 and --format json or toon.");
174
+ const value = structuredClone(result);
175
+ /** TOON's quoted scalars permit lossless identifiers and Unicode without bespoke escaping. */
176
+ function encode() {
177
+ if (format === "json")
178
+ return `${JSON.stringify(value)}\n`;
179
+ // A small schema-specific TOON projection; nested protocol data remains proper TOON lists.
180
+ const { invalidated, ...summary } = value;
181
+ const lines = Object.entries(summary).map(([key, field]) => `${key}: ${JSON.stringify(field)}`);
182
+ lines.push(`invalidated[${invalidated.length}]:`);
183
+ for (const row of invalidated) {
184
+ lines.push(` - section: ${JSON.stringify(row.section)}`);
185
+ lines.push(` causes[${row.causes.length}]: ${row.causes.map((cause) => JSON.stringify(cause)).join(",")}`);
186
+ }
187
+ return `${lines.join("\n")}\n`;
188
+ }
189
+ // Manifests are always JSON artifacts: object-valued source declarations have no compact TOON projection.
190
+ if (!("invalidated" in value) && format === "toon")
191
+ throw new FreshnessError("INVALID_ARGUMENT", "Record manifests with --format json; resume supports both json and toon.");
192
+ if ("invalidated" in value) {
193
+ const rows = value.invalidated;
194
+ value.invalidated = [];
195
+ const fixed = Buffer.byteLength(encode()) - String(value.omitted_sections).length - Number(format === "toon");
196
+ let included = 0;
197
+ let bytes = 0;
198
+ for (const row of rows) {
199
+ const encoded = format === "json" ? JSON.stringify(row) : ` - section: ${JSON.stringify(row.section)}\n causes[${row.causes.length}]: ${row.causes.map((cause) => JSON.stringify(cause)).join(",")}\n`;
200
+ const next = bytes + Buffer.byteLength(encoded) + Number(format === "json" && included > 0);
201
+ const omitted = value.omitted_sections + rows.length - included - 1;
202
+ const size = fixed + next + String(omitted).length + (format === "toon" ? String(included + 1).length : 0);
203
+ if (size > budget)
204
+ break;
205
+ included++;
206
+ bytes = next;
207
+ }
208
+ value.invalidated = rows.slice(0, included);
209
+ value.omitted_sections += rows.length - included;
210
+ }
211
+ const output = encode();
212
+ if (Buffer.byteLength(output) > budget || ("invalidated" in value && value.invalidated_sections > 0 && value.invalidated.length === 0))
213
+ throw new FreshnessError("BUDGET_TOO_SMALL", "Increase --byte-budget to fit the complete manifest or at least one invalidated section; no state was changed.");
214
+ return output;
215
+ }
216
+ /** Read finite regular files only; reject links, devices, permissions and concurrent edits. */
217
+ export function readFreshnessFile(path, limit = FRESHNESS_LIMITS.input_bytes) {
218
+ try {
219
+ const fd = openSync(path, constants.O_RDONLY | constants.O_NOFOLLOW | constants.O_NONBLOCK);
220
+ try {
221
+ const before = fstatSync(fd, { bigint: true });
222
+ if (!before.isFile() || before.size > BigInt(limit) || (before.mode & 292n) === 0n)
223
+ throw new Error();
224
+ const bytes = Buffer.alloc(Number(before.size) + 1);
225
+ let length = 0;
226
+ for (;;) {
227
+ const count = readSync(fd, bytes, length, bytes.length - length, null);
228
+ if (count === 0)
229
+ break;
230
+ length += count;
231
+ if (length === bytes.length)
232
+ throw new Error();
233
+ }
234
+ const after = fstatSync(fd, { bigint: true });
235
+ if (length !== Number(before.size) || before.size !== after.size || before.mtimeNs !== after.mtimeNs || before.ctimeNs !== after.ctimeNs)
236
+ throw new Error();
237
+ return bytes.subarray(0, length);
238
+ }
239
+ finally {
240
+ closeSync(fd);
241
+ }
242
+ }
243
+ catch {
244
+ throw new FreshnessError("INPUT_UNAVAILABLE", "Use a stable, readable regular file within the input size limit.");
245
+ }
246
+ }
247
+ /** Decode a bounded input without exposing parser excerpts or local paths. */
248
+ export function readFreshnessJson(path) {
249
+ const bytes = readFreshnessFile(path);
250
+ try {
251
+ if (!isUtf8(bytes))
252
+ throw new Error();
253
+ return JSON.parse(bytes.toString("utf8"));
254
+ }
255
+ catch {
256
+ throw new FreshnessError("INPUT_UNAVAILABLE", "Supply a valid UTF-8 JSON packet or manifest file.");
257
+ }
258
+ }
259
+ /** Stateless authoritative SDK reads; reusing an adapter never reuses an earlier source value. */
260
+ export function createFreshnessReader(pmRoot, evidenceRoot) {
261
+ return async (source) => {
262
+ if (!sourceValid(source))
263
+ throw new FreshnessError("INVALID_ARGUMENT", "Use a valid item/settings projection or relative evidence path.");
264
+ if (source.kind === "evidence") {
265
+ const root = realpathSync(evidenceRoot);
266
+ const path = resolve(root, source.path);
267
+ const parent = relative(root, realpathSync(dirname(path)));
268
+ if (parent === ".." || parent.startsWith(`..${sep}`) || isAbsolute(parent))
269
+ throw new Error("Outside evidence root");
270
+ return readFreshnessFile(path, FRESHNESS_LIMITS.evidence_bytes).toString("base64");
271
+ }
272
+ const settingsPath = resolve(pmRoot, "settings.json");
273
+ const settingsBytes = readFreshnessFile(settingsPath);
274
+ const { settings, warnings: settingsWarnings } = await readSettingsWithMetadata(pmRoot);
275
+ // SDK defaults are usable only after a complete, stable, warning-free source read.
276
+ if (!isUtf8(settingsBytes) || settingsWarnings.length > 0 || !settingsBytes.equals(readFreshnessFile(settingsPath))) {
277
+ throw new FreshnessError("SOURCE_UNAVAILABLE", "Repair settings.json and its schema sources, then record a new manifest. Do not reuse the packet.");
278
+ }
279
+ let value;
280
+ if (source.kind === "item") {
281
+ const located = await locateItem(pmRoot, source.id, settings.id_prefix, settings.item_format, resolveItemTypeRegistry(settings).type_to_folder);
282
+ if (!located)
283
+ throw new Error("Missing source");
284
+ const bytes = readFreshnessFile(located.itemPath);
285
+ const warnings = [];
286
+ const { raw, document } = await readLocatedItem(located, { schema: settings.schema, warnings });
287
+ if (raw !== bytes.toString("utf8") || warnings.length > 0)
288
+ throw new Error("Unstable or incomplete source");
289
+ value = { ...document.metadata, body: document.body };
290
+ }
291
+ else {
292
+ value = settings;
293
+ }
294
+ if (!source.fields)
295
+ return value;
296
+ return Object.fromEntries(source.fields.map((field) => [field, Object.hasOwn(value, field) ? { present: true, value: value[field] } : { present: false }]));
297
+ };
298
+ }
299
+ //# sourceMappingURL=freshness.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"freshness.js","sourceRoot":"","sources":["../freshness.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,3 +1,5 @@
1
+ export { createFreshnessReader, encodeFreshness, FRESHNESS_LIMITS, FreshnessError, parseFreshnessPacket, readFreshnessFile, readFreshnessJson, recordFreshness, resumeFreshness } from "./freshness.ts";
2
+ export type { FreshnessManifest, FreshnessPacket, FreshnessReader, FreshnessResult, FreshnessSection, FreshnessSource } from "./freshness.ts";
1
3
  import type { FileFocus } from "./file-focus.ts";
2
4
  import type { ExtensionApi, RuntimeStatusRegistry, RelationshipKindRegistry } from "@unbrained/pm-cli/sdk";
3
5
  import { list as pmList } from "@unbrained/pm-cli/sdk/core";
@@ -399,7 +401,9 @@ export declare function createSdkRanker(allItems: readonly PmItem[], options: Sd
399
401
  * focus items are required anchors, neighbors compete by relevance rank for the
400
402
  * remaining budget. The packer first selects under that token budget with pm's
401
403
  * projection-degradation optimizer, then enforces the command's explicit item
402
- * ceiling while preserving the SDK-selected focus-first order.
404
+ * ceiling. The incoming focus order is authoritative (including file-overlap
405
+ * ranking); corpus ranks apply only to neighbors, so equal-cost focus ties keep
406
+ * the selection order established by buildContextPack.
403
407
  */
404
408
  export declare function createSdkPacker(rankedFocus: readonly PmItem[], rankedNeighbors: readonly PmItem[]): (focus: PmItem[], neighbors: PmItem[], maxItems: number) => {
405
409
  focus: PmItem[];