@agent-plan/core 0.2.25 → 0.2.27

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/dist/description-freshness.d.ts +37 -0
  2. package/dist/description-freshness.d.ts.map +1 -0
  3. package/dist/description-freshness.js +84 -0
  4. package/dist/display-status.d.ts +3 -3
  5. package/dist/display-status.d.ts.map +1 -1
  6. package/dist/display-status.js +5 -4
  7. package/dist/handoff-context.d.ts +222 -1
  8. package/dist/handoff-context.d.ts.map +1 -1
  9. package/dist/handoff-context.js +461 -11
  10. package/dist/index.d.ts +8 -1
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +8 -1
  13. package/dist/naming.d.ts +3 -0
  14. package/dist/naming.d.ts.map +1 -1
  15. package/dist/naming.js +7 -0
  16. package/dist/package-version.d.ts +2 -0
  17. package/dist/package-version.d.ts.map +1 -1
  18. package/dist/package-version.js +1 -1
  19. package/dist/payload-fallback.d.ts +38 -0
  20. package/dist/payload-fallback.d.ts.map +1 -0
  21. package/dist/payload-fallback.js +79 -0
  22. package/dist/plan-store.d.ts +192 -36
  23. package/dist/plan-store.d.ts.map +1 -1
  24. package/dist/plan-store.js +1048 -126
  25. package/dist/planner-rules.d.ts.map +1 -1
  26. package/dist/planner-rules.js +9 -3
  27. package/dist/planner-skill.d.ts +24 -0
  28. package/dist/planner-skill.d.ts.map +1 -0
  29. package/dist/planner-skill.js +113 -0
  30. package/dist/project-context-migration.d.ts +47 -0
  31. package/dist/project-context-migration.d.ts.map +1 -0
  32. package/dist/project-context-migration.js +168 -0
  33. package/dist/read-tracking.d.ts +47 -13
  34. package/dist/read-tracking.d.ts.map +1 -1
  35. package/dist/read-tracking.js +88 -33
  36. package/dist/recap.d.ts.map +1 -1
  37. package/dist/recap.js +34 -9
  38. package/dist/refs.d.ts +6 -1
  39. package/dist/refs.d.ts.map +1 -1
  40. package/dist/refs.js +25 -0
  41. package/dist/renderer.d.ts.map +1 -1
  42. package/dist/renderer.js +24 -2
  43. package/dist/requirement-macro-tasks.d.ts +18 -0
  44. package/dist/requirement-macro-tasks.d.ts.map +1 -0
  45. package/dist/requirement-macro-tasks.js +55 -0
  46. package/dist/runtime-diagnostics.d.ts +34 -0
  47. package/dist/runtime-diagnostics.d.ts.map +1 -0
  48. package/dist/runtime-diagnostics.js +39 -0
  49. package/dist/schema.d.ts +1575 -290
  50. package/dist/schema.d.ts.map +1 -1
  51. package/dist/schema.js +89 -4
  52. package/dist/task-context.d.ts +41 -2
  53. package/dist/task-context.d.ts.map +1 -1
  54. package/dist/task-context.js +102 -4
  55. package/dist/task-selection.d.ts +44 -1
  56. package/dist/task-selection.d.ts.map +1 -1
  57. package/dist/task-selection.js +158 -7
  58. package/dist/task-start-outcome.d.ts +1 -1
  59. package/dist/task-start-outcome.d.ts.map +1 -1
  60. package/dist/task-start-outcome.js +1 -0
  61. package/dist/write-coordination.d.ts +27 -0
  62. package/dist/write-coordination.d.ts.map +1 -0
  63. package/dist/write-coordination.js +223 -0
  64. package/package.json +3 -1
  65. package/planner-skill.md +226 -0
  66. package/skills/grill-me/SKILL.md +10 -0
@@ -0,0 +1,37 @@
1
+ import type { Feature, Phase } from "./schema.js";
2
+ export type DescriptionFreshnessOwnerKind = "feature" | "phase";
3
+ export type DescriptionFreshnessChildKind = "phase" | "task";
4
+ export interface DescriptionFreshnessDiagnostic {
5
+ ownerKind: DescriptionFreshnessOwnerKind;
6
+ ownerId: string;
7
+ ownerRef: string;
8
+ state: "fresh" | "stale";
9
+ ownerDescriptionUpdatedAt: string;
10
+ newestChildKind: DescriptionFreshnessChildKind | null;
11
+ newestChildId: string;
12
+ newestChildRef: string;
13
+ newestChildDescriptionUpdatedAt: string;
14
+ reason: string;
15
+ }
16
+ export interface DescriptionReconciliationStep {
17
+ ownerKind: DescriptionFreshnessOwnerKind;
18
+ ownerId: string;
19
+ ownerRef: string;
20
+ causedByRef: string;
21
+ reason: string;
22
+ action: string;
23
+ }
24
+ export interface HierarchicalDescriptionFreshness {
25
+ diagnostics: DescriptionFreshnessDiagnostic[];
26
+ staleParentRefs: string[];
27
+ reconciliationRequired: boolean;
28
+ reconciliationPreview: DescriptionReconciliationStep[];
29
+ }
30
+ /**
31
+ * Compute child-to-parent description freshness without mutating user-authored
32
+ * prose. Reconciliation is intentionally leaf-to-root: stale phases first,
33
+ * then their owning features.
34
+ */
35
+ export declare function buildHierarchicalDescriptionFreshness(features: Feature[], phases: Phase[]): HierarchicalDescriptionFreshness;
36
+ export declare function freshnessForOwner(freshness: HierarchicalDescriptionFreshness, ownerKind: DescriptionFreshnessOwnerKind, ownerId: string): DescriptionFreshnessDiagnostic | undefined;
37
+ //# sourceMappingURL=description-freshness.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"description-freshness.d.ts","sourceRoot":"","sources":["../src/description-freshness.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,KAAK,EAAQ,MAAM,aAAa,CAAC;AAExD,MAAM,MAAM,6BAA6B,GAAG,SAAS,GAAG,OAAO,CAAC;AAChE,MAAM,MAAM,6BAA6B,GAAG,OAAO,GAAG,MAAM,CAAC;AAE7D,MAAM,WAAW,8BAA8B;IAC7C,SAAS,EAAE,6BAA6B,CAAC;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC;IACzB,yBAAyB,EAAE,MAAM,CAAC;IAClC,eAAe,EAAE,6BAA6B,GAAG,IAAI,CAAC;IACtD,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,+BAA+B,EAAE,MAAM,CAAC;IACxC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,6BAA6B;IAC5C,SAAS,EAAE,6BAA6B,CAAC;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,gCAAgC;IAC/C,WAAW,EAAE,8BAA8B,EAAE,CAAC;IAC9C,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,sBAAsB,EAAE,OAAO,CAAC;IAChC,qBAAqB,EAAE,6BAA6B,EAAE,CAAC;CACxD;AA2DD;;;;GAIG;AACH,wBAAgB,qCAAqC,CACnD,QAAQ,EAAE,OAAO,EAAE,EACnB,MAAM,EAAE,KAAK,EAAE,GACd,gCAAgC,CA0ClC;AAED,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,gCAAgC,EAC3C,SAAS,EAAE,6BAA6B,EACxC,OAAO,EAAE,MAAM,GACd,8BAA8B,GAAG,SAAS,CAE5C"}
@@ -0,0 +1,84 @@
1
+ import { formatFeatureRef, formatPhaseRef } from "./naming.js";
2
+ function descriptionRevision(entity) {
3
+ if (!entity.description.trim() && !entity.descriptionRef?.trim())
4
+ return "";
5
+ return entity.descriptionUpdatedAt?.trim() || entity.createdAt;
6
+ }
7
+ function taskRef(task, phase, featureNumber) {
8
+ return `${formatPhaseRef(phase.number, featureNumber)}/T${String(task.number).padStart(3, "0")}`;
9
+ }
10
+ function newestChild(candidates) {
11
+ return candidates
12
+ .filter((candidate) => candidate.revision)
13
+ .sort((left, right) => right.revision.localeCompare(left.revision) || left.ref.localeCompare(right.ref))[0] ?? null;
14
+ }
15
+ function diagnostic(ownerKind, owner, ownerRef, child) {
16
+ const ownerRevision = descriptionRevision(owner);
17
+ const stale = child !== null && (!ownerRevision || child.revision > ownerRevision);
18
+ const reason = stale
19
+ ? `${ownerRef} description is older than ${child.ref}; review the child context and explicitly reconcile the parent description or descriptionRef.`
20
+ : child
21
+ ? `${ownerRef} description is at least as recent as its newest described child ${child.ref}.`
22
+ : `${ownerRef} has no described child context requiring reconciliation.`;
23
+ return {
24
+ ownerKind,
25
+ ownerId: owner.id,
26
+ ownerRef,
27
+ state: stale ? "stale" : "fresh",
28
+ ownerDescriptionUpdatedAt: ownerRevision,
29
+ newestChildKind: child?.kind ?? null,
30
+ newestChildId: child?.id ?? "",
31
+ newestChildRef: child?.ref ?? "",
32
+ newestChildDescriptionUpdatedAt: child?.revision ?? "",
33
+ reason,
34
+ };
35
+ }
36
+ /**
37
+ * Compute child-to-parent description freshness without mutating user-authored
38
+ * prose. Reconciliation is intentionally leaf-to-root: stale phases first,
39
+ * then their owning features.
40
+ */
41
+ export function buildHierarchicalDescriptionFreshness(features, phases) {
42
+ const featureById = new Map(features.map((feature) => [feature.id, feature]));
43
+ const phaseDiagnostics = phases.map((phase) => {
44
+ const feature = phase.featureId ? featureById.get(phase.featureId) : undefined;
45
+ const ref = formatPhaseRef(phase.number, feature?.number);
46
+ const child = newestChild(phase.tasks.map((task) => ({
47
+ kind: "task",
48
+ id: task.id,
49
+ ref: taskRef(task, phase, feature?.number),
50
+ revision: descriptionRevision(task),
51
+ })));
52
+ return diagnostic("phase", phase, ref, child);
53
+ });
54
+ const featureDiagnostics = features.map((feature) => {
55
+ const ownedPhases = phases.filter((phase) => phase.featureId === feature.id);
56
+ const candidates = [];
57
+ for (const phase of ownedPhases) {
58
+ const phaseRef = formatPhaseRef(phase.number, feature.number);
59
+ candidates.push({ kind: "phase", id: phase.id, ref: phaseRef, revision: descriptionRevision(phase) });
60
+ for (const task of phase.tasks) {
61
+ candidates.push({ kind: "task", id: task.id, ref: taskRef(task, phase, feature.number), revision: descriptionRevision(task) });
62
+ }
63
+ }
64
+ return diagnostic("feature", feature, formatFeatureRef(feature.number), newestChild(candidates));
65
+ });
66
+ const diagnostics = [...phaseDiagnostics, ...featureDiagnostics];
67
+ const stale = diagnostics.filter((entry) => entry.state === "stale");
68
+ return {
69
+ diagnostics,
70
+ staleParentRefs: stale.map((entry) => entry.ownerRef),
71
+ reconciliationRequired: stale.length > 0,
72
+ reconciliationPreview: stale.map((entry) => ({
73
+ ownerKind: entry.ownerKind,
74
+ ownerId: entry.ownerId,
75
+ ownerRef: entry.ownerRef,
76
+ causedByRef: entry.newestChildRef,
77
+ reason: entry.reason,
78
+ action: `Read ${entry.newestChildRef}, review ${entry.ownerRef}, then explicitly update ${entry.ownerRef}'s description or descriptionRef if the parent prose is stale.`,
79
+ })),
80
+ };
81
+ }
82
+ export function freshnessForOwner(freshness, ownerKind, ownerId) {
83
+ return freshness.diagnostics.find((entry) => entry.ownerKind === ownerKind && entry.ownerId === ownerId);
84
+ }
@@ -9,8 +9,8 @@
9
9
  * - `started`: the entity has clearly begun (historical progress exists) but
10
10
  * no child is active now, and the unfinished remainder is mixed or cannot
11
11
  * honestly collapse to one specific workflow label.
12
- * - `closed`: every child is terminal, but outcomes are mixed (e.g.
13
- * `done + canceled`, `canceled + rejected`).
12
+ * - `closed`: every child is terminal, but outcomes are mixed without a
13
+ * positive completion rollup (for example, `canceled + rejected`).
14
14
  *
15
15
  * These are NEVER persisted: they are computed on demand from children's
16
16
  * canonical workflow statuses. The canonical workflow model
@@ -62,7 +62,7 @@ export declare function countBreakdown(statuses: readonly WorkflowStatus[]): Sta
62
62
  * Algorithm (locked by P039 accepted decisions):
63
63
  * 1. If any meaningful child is active now → `in-progress`.
64
64
  * 2. If every child is terminal:
65
- * - all `done` → `done`
65
+ * - only `done` + `canceled`, with at least one `done` → `done`
66
66
  * - all `canceled` → `canceled`
67
67
  * - all `rejected` → `rejected`
68
68
  * - otherwise → `closed` (mixed terminal outcomes)
@@ -1 +1 @@
1
- {"version":3,"file":"display-status.d.ts","sourceRoot":"","sources":["../src/display-status.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE3D;;;GAGG;AACH,MAAM,MAAM,cAAc,GACtB,SAAS,GACT,aAAa,GACb,SAAS,GACT,SAAS,GACT,UAAU,GACV,MAAM,GACN,UAAU,GACV,UAAU,CAAC;AAEf;;;;GAIG;AACH,MAAM,MAAM,aAAa,GAAG,cAAc,GAAG,SAAS,GAAG,QAAQ,CAAC;AAElE,+CAA+C;AAC/C,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,yDAAyD;AACzD,MAAM,WAAW,aAAa;IAC5B,uDAAuD;IACvD,aAAa,EAAE,aAAa,CAAC;IAC7B,wDAAwD;IACxD,SAAS,EAAE,eAAe,CAAC;IAC3B;+CAC2C;IAC3C,UAAU,EAAE,OAAO,CAAC;IACpB,8DAA8D;IAC9D,aAAa,EAAE,MAAM,CAAC;IACtB,8DAA8D;IAC9D,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAMD,iFAAiF;AACjF,wBAAgB,cAAc,CAAC,QAAQ,EAAE,SAAS,cAAc,EAAE,GAAG,eAAe,CAkBnF;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,mBAAmB,CAAC,aAAa,EAAE,SAAS,cAAc,EAAE,GAAG,aAAa,CAiE3F;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAcrE;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,UAAU,GAAG,WAAW,GAAG,cAAc,CAIpF"}
1
+ {"version":3,"file":"display-status.d.ts","sourceRoot":"","sources":["../src/display-status.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE3D;;;GAGG;AACH,MAAM,MAAM,cAAc,GACtB,SAAS,GACT,aAAa,GACb,SAAS,GACT,SAAS,GACT,UAAU,GACV,MAAM,GACN,UAAU,GACV,UAAU,CAAC;AAEf;;;;GAIG;AACH,MAAM,MAAM,aAAa,GAAG,cAAc,GAAG,SAAS,GAAG,QAAQ,CAAC;AAElE,+CAA+C;AAC/C,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,yDAAyD;AACzD,MAAM,WAAW,aAAa;IAC5B,uDAAuD;IACvD,aAAa,EAAE,aAAa,CAAC;IAC7B,wDAAwD;IACxD,SAAS,EAAE,eAAe,CAAC;IAC3B;+CAC2C;IAC3C,UAAU,EAAE,OAAO,CAAC;IACpB,8DAA8D;IAC9D,aAAa,EAAE,MAAM,CAAC;IACtB,8DAA8D;IAC9D,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAMD,iFAAiF;AACjF,wBAAgB,cAAc,CAAC,QAAQ,EAAE,SAAS,cAAc,EAAE,GAAG,eAAe,CAkBnF;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,mBAAmB,CAAC,aAAa,EAAE,SAAS,cAAc,EAAE,GAAG,aAAa,CAoE3F;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAcrE;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,UAAU,GAAG,WAAW,GAAG,cAAc,CAIpF"}
@@ -9,8 +9,8 @@
9
9
  * - `started`: the entity has clearly begun (historical progress exists) but
10
10
  * no child is active now, and the unfinished remainder is mixed or cannot
11
11
  * honestly collapse to one specific workflow label.
12
- * - `closed`: every child is terminal, but outcomes are mixed (e.g.
13
- * `done + canceled`, `canceled + rejected`).
12
+ * - `closed`: every child is terminal, but outcomes are mixed without a
13
+ * positive completion rollup (for example, `canceled + rejected`).
14
14
  *
15
15
  * These are NEVER persisted: they are computed on demand from children's
16
16
  * canonical workflow statuses. The canonical workflow model
@@ -65,7 +65,7 @@ function emptyBreakdown() {
65
65
  * Algorithm (locked by P039 accepted decisions):
66
66
  * 1. If any meaningful child is active now → `in-progress`.
67
67
  * 2. If every child is terminal:
68
- * - all `done` → `done`
68
+ * - only `done` + `canceled`, with at least one `done` → `done`
69
69
  * - all `canceled` → `canceled`
70
70
  * - all `rejected` → `rejected`
71
71
  * - otherwise → `closed` (mixed terminal outcomes)
@@ -108,7 +108,8 @@ export function deriveParentDisplay(childStatuses) {
108
108
  }
109
109
  // 2. All children are terminal.
110
110
  if (statuses.every((s) => TERMINAL.has(s))) {
111
- if (statuses.every((s) => s === "done")) {
111
+ if (statuses.some((s) => s === "done")
112
+ && statuses.every((s) => s === "done" || s === "canceled")) {
112
113
  return { displayStatus: "done", breakdown, hasStarted, totalChildren, meaningfulChildren };
113
114
  }
114
115
  if (statuses.every((s) => s === "canceled")) {
@@ -1,5 +1,157 @@
1
- import type { Feature, Phase, Task } from "./schema.js";
1
+ import type { Feature, HandoffCompletenessAudit, HandoffCompletenessEntry, HandoffColdStartInventoryEntry, HandoffSupportingDocument, Phase, Task } from "./schema.js";
2
+ import { type PhaseWorkMap } from "./task-context.js";
2
3
  export declare const COMPLETION_SUMMARY_HEADING = "**Completion summary:**";
4
+ export declare const HANDOFF_COMPLETENESS_AUDIT_VERSION = 1;
5
+ export declare const HANDOFF_COLD_START_INVENTORY_VERSION = 1;
6
+ export declare const TARGET_HANDOFF_CONTENT_CHARS = 8000;
7
+ export declare const MAX_HANDOFF_CONTENT_CHARS = 24000;
8
+ export declare const HANDOFF_AUDIT_START_MARKER = "<!-- agent-plan:handoff-audit:start -->";
9
+ export declare const HANDOFF_AUDIT_END_MARKER = "<!-- agent-plan:handoff-audit:end -->";
10
+ export declare const HANDOFF_COMPLETENESS_CATEGORIES: readonly [{
11
+ readonly id: "exact-focus-resume-point";
12
+ readonly label: "Exact focus and resume point";
13
+ }, {
14
+ readonly id: "first-resume-action";
15
+ readonly label: "First resume action";
16
+ }, {
17
+ readonly id: "completed-work";
18
+ readonly label: "Completed work";
19
+ }, {
20
+ readonly id: "partial-work";
21
+ readonly label: "Partial work";
22
+ }, {
23
+ readonly id: "remaining-work";
24
+ readonly label: "Remaining work";
25
+ }, {
26
+ readonly id: "decisions-rationale";
27
+ readonly label: "Decisions and rationale";
28
+ }, {
29
+ readonly id: "rejected-alternatives";
30
+ readonly label: "Rejected alternatives";
31
+ }, {
32
+ readonly id: "files-symbols";
33
+ readonly label: "Files and symbols";
34
+ }, {
35
+ readonly id: "branch-worktree";
36
+ readonly label: "Branch and worktree";
37
+ }, {
38
+ readonly id: "commands-tools";
39
+ readonly label: "Commands and tools";
40
+ }, {
41
+ readonly id: "completed-verification";
42
+ readonly label: "Completed verification";
43
+ }, {
44
+ readonly id: "pending-verification";
45
+ readonly label: "Pending verification";
46
+ }, {
47
+ readonly id: "runtime-limitations-workarounds";
48
+ readonly label: "Runtime limitations and workarounds";
49
+ }, {
50
+ readonly id: "blockers-risks";
51
+ readonly label: "Blockers and risks";
52
+ }, {
53
+ readonly id: "user-visible-behavior";
54
+ readonly label: "User-visible behavior";
55
+ }, {
56
+ readonly id: "operator-actions";
57
+ readonly label: "Operator actions";
58
+ }, {
59
+ readonly id: "project-operating-notes";
60
+ readonly label: "Project-specific operating notes";
61
+ }, {
62
+ readonly id: "conversation-only-facts";
63
+ readonly label: "Conversation-only facts";
64
+ }];
65
+ export declare const HANDOFF_COLD_START_SOURCE_REVIEWS: readonly [{
66
+ readonly id: "conversation";
67
+ readonly label: "Conversation, user corrections, and authorization state";
68
+ }, {
69
+ readonly id: "planner-entities";
70
+ readonly label: "Task, sibling tasks, phase, feature, requirements, and prior handoff";
71
+ }, {
72
+ readonly id: "working-tree";
73
+ readonly label: "Changed files, diffs, implementation state, and ownership";
74
+ }, {
75
+ readonly id: "verification-runtime";
76
+ readonly label: "Commands, test results, runtime observations, and limitations";
77
+ }, {
78
+ readonly id: "peer-agent-output";
79
+ readonly label: "Peer-agent messages and delegated-work results, or confirmation that none exist";
80
+ }];
81
+ export declare const HANDOFF_COLD_START_INVENTORY_CATEGORIES: readonly [{
82
+ readonly id: "files";
83
+ readonly label: "Exact files";
84
+ }, {
85
+ readonly id: "symbols";
86
+ readonly label: "Exact symbols and identifiers";
87
+ }, {
88
+ readonly id: "working-tree-ownership";
89
+ readonly label: "Working-tree state, work ownership, and commit/discard authorization";
90
+ }, {
91
+ readonly id: "negative-state";
92
+ readonly label: "Work not started, removals not performed, and intentionally untouched state";
93
+ }, {
94
+ readonly id: "commands-tools";
95
+ readonly label: "Commands and tool paths";
96
+ }, {
97
+ readonly id: "runtime-wiring";
98
+ readonly label: "Runtime wiring, call sites, and data flow";
99
+ }, {
100
+ readonly id: "preservation-constraints";
101
+ readonly label: "Behavior and code paths that must survive";
102
+ }, {
103
+ readonly id: "verification-evidence";
104
+ readonly label: "Concrete observations proving completed, live, dead, or inert state";
105
+ }, {
106
+ readonly id: "related-planned-work";
107
+ readonly label: "Sibling tasks and related planned capabilities";
108
+ }, {
109
+ readonly id: "user-visible-behavior";
110
+ readonly label: "User-visible behavior";
111
+ }, {
112
+ readonly id: "operator-actions";
113
+ readonly label: "Operator actions";
114
+ }, {
115
+ readonly id: "blockers-risks";
116
+ readonly label: "Blockers and risks";
117
+ }, {
118
+ readonly id: "remaining-work";
119
+ readonly label: "Remaining work";
120
+ }, {
121
+ readonly id: "ordered-resume-steps";
122
+ readonly label: "Ordered resume steps";
123
+ }];
124
+ export declare const HANDOFF_CANONICAL_SECTIONS: readonly ["Current focus", "Current and partial state", "Preservation constraints", "Supporting documents", "Blockers and risks", "How to resume"];
125
+ export type HandoffCompletenessCategory = typeof HANDOFF_COMPLETENESS_CATEGORIES[number]["id"];
126
+ export type HandoffColdStartInventoryCategory = typeof HANDOFF_COLD_START_INVENTORY_CATEGORIES[number]["id"];
127
+ export type HandoffContractErrorCode = "HANDOFF_PREFLIGHT_REQUIRED" | "HANDOFF_REASON_REQUIRED" | "HANDOFF_CANONICAL_SECTIONS_REQUIRED" | "HANDOFF_COMPLETENESS_AUDIT_REQUIRED" | "HANDOFF_COLD_START_INVENTORY_REQUIRED" | "HANDOFF_COLD_START_INVENTORY_UNCOVERED" | "HANDOFF_CONTENT_LIMIT_EXCEEDED" | "HANDOFF_SUPPORTING_DOCUMENT_INVALID" | "HANDOFF_PERSISTENCE_VERIFICATION_FAILED" | "HANDOFF_READBACK_VERIFICATION_REQUIRED" | "HANDOFF_READBACK_GAPS_FOUND";
128
+ export declare class HandoffContractError extends Error {
129
+ readonly code: HandoffContractErrorCode;
130
+ readonly details: Record<string, unknown>;
131
+ constructor(code: HandoffContractErrorCode, message: string, details?: Record<string, unknown>);
132
+ }
133
+ export interface HandoffCompletenessAuditInput {
134
+ version: number;
135
+ entries: HandoffCompletenessEntry[];
136
+ }
137
+ export interface HandoffColdStartInventoryInput {
138
+ version: number;
139
+ sourceReviews: Array<{
140
+ source: string;
141
+ detail: string;
142
+ }>;
143
+ entries: HandoffColdStartInventoryEntry[];
144
+ }
145
+ export interface HandoffSupportingDocumentInput {
146
+ path: string;
147
+ description: string;
148
+ }
149
+ export interface HandoffContentExternalization {
150
+ content: string;
151
+ externalized: boolean;
152
+ extendedContent: string;
153
+ supportingDocument?: HandoffSupportingDocumentInput;
154
+ }
3
155
  export interface HandoffTaskContextUpdate {
4
156
  taskId: string;
5
157
  completionSummary: string;
@@ -35,11 +187,45 @@ export interface PhaseHandoffAudit {
35
187
  number: number;
36
188
  title: string;
37
189
  }>;
190
+ completenessVersion: number;
191
+ targetContentChars: number;
192
+ maxContentChars: number;
193
+ completenessCategories: ReadonlyArray<{
194
+ id: HandoffCompletenessCategory;
195
+ label: string;
196
+ }>;
197
+ canonicalSections: ReadonlyArray<string>;
198
+ requiredHumanInputs: ReadonlyArray<{
199
+ id: "title" | "reason";
200
+ label: string;
201
+ description: string;
202
+ }>;
203
+ draftTemplate: string;
204
+ coldStartInventoryVersion: number;
205
+ coldStartSourceReviews: ReadonlyArray<{
206
+ id: string;
207
+ label: string;
208
+ }>;
209
+ coldStartInventoryCategories: ReadonlyArray<{
210
+ id: HandoffColdStartInventoryCategory;
211
+ label: string;
212
+ }>;
213
+ existingCompletenessAudit: HandoffCompletenessAudit | null;
214
+ phaseWorkMap: PhaseWorkMap;
38
215
  }
39
216
  export interface RefreshPhaseHandoffInput {
217
+ /** Structured, human-supplied explanation; rendered by the planner. */
218
+ reason: string;
40
219
  content: string;
41
220
  expectedHandoffUpdatedAt: string;
42
221
  reconciledExistingHandoff: boolean;
222
+ completenessAudit?: HandoffCompletenessAuditInput;
223
+ coldStartInventory?: HandoffColdStartInventoryInput;
224
+ supportingDocuments?: HandoffSupportingDocumentInput[];
225
+ /** Populated and verified by PlanStore before pure domain application. */
226
+ verifiedSupportingDocuments?: HandoffSupportingDocument[];
227
+ /** Content is kept in-memory only for cold-start coverage validation. */
228
+ verifiedSupportingDocumentContents?: string[];
43
229
  contextSync: PhaseHandoffContextSync;
44
230
  }
45
231
  export interface RefreshPhaseHandoffResult {
@@ -47,9 +233,44 @@ export interface RefreshPhaseHandoffResult {
47
233
  feature: Feature;
48
234
  updatedTaskIds: string[];
49
235
  handoffUpdatedAt: string;
236
+ handoffAudit: HandoffCompletenessAudit;
237
+ }
238
+ export interface VerifyPhaseHandoffReadBackInput {
239
+ expectedContentHash: string;
240
+ sourceReviews: Array<{
241
+ source: string;
242
+ detail: string;
243
+ }>;
244
+ omissionsFound: string[];
245
+ }
246
+ export interface VerifyPhaseHandoffReadBackResult {
247
+ phaseId: string;
248
+ handoffUpdatedAt: string;
249
+ contentHash: string;
250
+ resumeReadyAt: string;
251
+ sourceReviews: Array<{
252
+ source: string;
253
+ detail: string;
254
+ }>;
50
255
  }
51
256
  export declare function hasTaskCompletionEvidence(task: Task): boolean;
257
+ export declare function buildHandoffDraftTemplate(phase: Phase, feature: Feature): string;
52
258
  export declare function auditPhaseHandoff(phase: Phase, feature: Feature): PhaseHandoffAudit;
259
+ export declare function handoffContentHash(content: string): string;
260
+ export declare function validateHandoffCompletenessAudit(audit: HandoffCompletenessAuditInput | undefined): HandoffCompletenessEntry[];
261
+ export declare function validateHandoffColdStartInventory(inventory: HandoffColdStartInventoryInput | undefined, content: string, supportingDocumentContents?: string[]): HandoffColdStartInventoryEntry[];
262
+ export declare function validateHandoffReadBackVerification(phase: Phase, input: VerifyPhaseHandoffReadBackInput): Array<{
263
+ source: string;
264
+ detail: string;
265
+ }>;
266
+ /**
267
+ * Mechanically compact oversized legacy or verbose handoffs while retaining the
268
+ * complete submitted body in one planner-owned Markdown document.
269
+ */
270
+ export declare function externalizeOversizedHandoffContent(content: string, supportingDocumentPath: string): HandoffContentExternalization;
271
+ export declare function renderHandoffCompletenessAudit(audit: HandoffCompletenessAuditInput): string;
272
+ export declare function renderVerifiedHandoffContent(content: string, audit?: HandoffCompletenessAuditInput, coldStartInventory?: HandoffColdStartInventoryInput, supportingDocumentContents?: string[]): string;
273
+ export declare function materializeHandoffMetadata(content: string, reason: string, createdAt: string, updatedAt: string): string;
53
274
  export declare function validateCanonicalHandoffContent(content: string): void;
54
275
  export declare function validateHandoffContextSync(phase: Phase, feature: Feature, input: RefreshPhaseHandoffInput): void;
55
276
  export declare function applyHandoffContextSync(phase: Phase, feature: Feature, input: RefreshPhaseHandoffInput, timestamp: string): {
@@ -1 +1 @@
1
- {"version":3,"file":"handoff-context.d.ts","sourceRoot":"","sources":["../src/handoff-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAExD,eAAO,MAAM,0BAA0B,4BAA4B,CAAC;AAEpE,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,yBAAyB;IACxC,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,uBAAuB;IACtC,WAAW,EAAE,wBAAwB,EAAE,CAAC;IACxC,WAAW,CAAC,EAAE,yBAAyB,CAAC;IACxC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,aAAa,CAAC,EAAE,2BAA2B,CAAC;IAC5C,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,wBAAwB,EAAE,MAAM,EAAE,CAAC;IACnC,sBAAsB,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC9E;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,wBAAwB,EAAE,MAAM,CAAC;IACjC,yBAAyB,EAAE,OAAO,CAAC;IACnC,WAAW,EAAE,uBAAuB,CAAC;CACtC;AAED,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,KAAK,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAI7D;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,GAAG,iBAAiB,CAYnF;AAkBD,wBAAgB,+BAA+B,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAgBrE;AAED,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,wBAAwB,GAC9B,IAAI,CA4CN;AAED,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,wBAAwB,EAC/B,SAAS,EAAE,MAAM,GAChB;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,cAAc,EAAE,MAAM,EAAE,CAAA;CAAE,CAqD9D"}
1
+ {"version":3,"file":"handoff-context.d.ts","sourceRoot":"","sources":["../src/handoff-context.ts"],"names":[],"mappings":"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"}