@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.
- package/dist/description-freshness.d.ts +37 -0
- package/dist/description-freshness.d.ts.map +1 -0
- package/dist/description-freshness.js +84 -0
- package/dist/display-status.d.ts +3 -3
- package/dist/display-status.d.ts.map +1 -1
- package/dist/display-status.js +5 -4
- package/dist/handoff-context.d.ts +222 -1
- package/dist/handoff-context.d.ts.map +1 -1
- package/dist/handoff-context.js +461 -11
- package/dist/index.d.ts +8 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -1
- package/dist/naming.d.ts +3 -0
- package/dist/naming.d.ts.map +1 -1
- package/dist/naming.js +7 -0
- package/dist/package-version.d.ts +2 -0
- package/dist/package-version.d.ts.map +1 -1
- package/dist/package-version.js +1 -1
- package/dist/payload-fallback.d.ts +38 -0
- package/dist/payload-fallback.d.ts.map +1 -0
- package/dist/payload-fallback.js +79 -0
- package/dist/plan-store.d.ts +192 -36
- package/dist/plan-store.d.ts.map +1 -1
- package/dist/plan-store.js +1048 -126
- package/dist/planner-rules.d.ts.map +1 -1
- package/dist/planner-rules.js +9 -3
- package/dist/planner-skill.d.ts +24 -0
- package/dist/planner-skill.d.ts.map +1 -0
- package/dist/planner-skill.js +113 -0
- package/dist/project-context-migration.d.ts +47 -0
- package/dist/project-context-migration.d.ts.map +1 -0
- package/dist/project-context-migration.js +168 -0
- package/dist/read-tracking.d.ts +47 -13
- package/dist/read-tracking.d.ts.map +1 -1
- package/dist/read-tracking.js +88 -33
- package/dist/recap.d.ts.map +1 -1
- package/dist/recap.js +34 -9
- package/dist/refs.d.ts +6 -1
- package/dist/refs.d.ts.map +1 -1
- package/dist/refs.js +25 -0
- package/dist/renderer.d.ts.map +1 -1
- package/dist/renderer.js +24 -2
- package/dist/requirement-macro-tasks.d.ts +18 -0
- package/dist/requirement-macro-tasks.d.ts.map +1 -0
- package/dist/requirement-macro-tasks.js +55 -0
- package/dist/runtime-diagnostics.d.ts +34 -0
- package/dist/runtime-diagnostics.d.ts.map +1 -0
- package/dist/runtime-diagnostics.js +39 -0
- package/dist/schema.d.ts +1575 -290
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +89 -4
- package/dist/task-context.d.ts +41 -2
- package/dist/task-context.d.ts.map +1 -1
- package/dist/task-context.js +102 -4
- package/dist/task-selection.d.ts +44 -1
- package/dist/task-selection.d.ts.map +1 -1
- package/dist/task-selection.js +158 -7
- package/dist/task-start-outcome.d.ts +1 -1
- package/dist/task-start-outcome.d.ts.map +1 -1
- package/dist/task-start-outcome.js +1 -0
- package/dist/write-coordination.d.ts +27 -0
- package/dist/write-coordination.d.ts.map +1 -0
- package/dist/write-coordination.js +223 -0
- package/package.json +3 -1
- package/planner-skill.md +226 -0
- 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
|
+
}
|
package/dist/display-status.d.ts
CHANGED
|
@@ -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
|
|
13
|
-
*
|
|
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
|
-
* -
|
|
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,
|
|
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"}
|
package/dist/display-status.js
CHANGED
|
@@ -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
|
|
13
|
-
*
|
|
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
|
-
* -
|
|
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.
|
|
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":"
|
|
1
|
+
{"version":3,"file":"handoff-context.d.ts","sourceRoot":"","sources":["../src/handoff-context.ts"],"names":[],"mappings":"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"}
|