@llm4ts/flow 2.26.0 → 2.27.0

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.
@@ -0,0 +1,185 @@
1
+ import * as Effect from "effect/Effect";
2
+ import * as Schema from "effect/Schema";
3
+ import type { JsonSchema } from "@llm4ts/core/Models";
4
+ import { Board } from "./BoardSync.ts";
5
+ import { PersistenceError, type StoryPlanInvalid } from "./FlowError.ts";
6
+ import { type FlowEventsShape } from "./FlowEvents.ts";
7
+ import type { TraceLine } from "./FlowRecorder.ts";
8
+ import { Plan } from "./Plan.ts";
9
+ import { type PlainFileStoreShape } from "./Persistence.ts";
10
+ import { ReviewResult } from "./Review.ts";
11
+ import { EpicReport, StoryState } from "./Stories.ts";
12
+ import { Story, StoryPlan } from "./StoryPlan.ts";
13
+ import type { TranscriptEntry } from "./Transcript.ts";
14
+ export interface RetroPaths {
15
+ readonly dir: string;
16
+ readonly digest: string;
17
+ readonly report: string;
18
+ readonly proposal: string;
19
+ readonly library: string;
20
+ readonly index: string;
21
+ }
22
+ /** Where a run's retro lives: `<state>/retro/<runId>.*`, indexed in `retro/retros.jsonl`. */
23
+ export declare const retroPaths: (stateDir: string, runId: string) => RetroPaths;
24
+ export declare const appendRetroIndex: (files: PlainFileStoreShape, stateDir: string, runId: string, at: number) => Effect.Effect<void, PersistenceError>;
25
+ /** The retros written for this state folder, oldest first. */
26
+ export declare const readRetroIndex: (files: PlainFileStoreShape, stateDir: string) => Effect.Effect<ReadonlyArray<{
27
+ readonly runId: string;
28
+ readonly at: number;
29
+ }>>;
30
+ /** What the run left behind for one story, as files on disk. */
31
+ export interface StoryFiles {
32
+ readonly story: Story;
33
+ readonly state: StoryState | undefined;
34
+ readonly plan: Plan | undefined;
35
+ readonly findings: string | undefined;
36
+ readonly verdict: ReviewResult | undefined;
37
+ }
38
+ export interface RetroInputs {
39
+ readonly runId: string;
40
+ readonly plan: StoryPlan;
41
+ readonly trace: ReadonlyArray<TraceLine>;
42
+ /** Per story lane; `undefined` when the run kept no transcript at all. */
43
+ readonly transcripts: ReadonlyMap<string, ReadonlyArray<TranscriptEntry>> | undefined;
44
+ readonly report: EpicReport | undefined;
45
+ readonly board: Board | undefined;
46
+ readonly stories: ReadonlyArray<StoryFiles>;
47
+ /** Characters the whole digest may hold (`LLM4TS_RETRO_CHARS`, default 60 000). */
48
+ readonly budget?: number;
49
+ }
50
+ export declare const defaultRetroChars = 60000;
51
+ /** Reads the per-story files the executor keeps under `<state>/stories/`. */
52
+ export declare const loadStoryFiles: (files: PlainFileStoreShape, stateDir: string, story: Story) => Effect.Effect<StoryFiles, PersistenceError | import("./FlowError.ts").PlanParseError | import("./FlowError.ts").UnsupportedSchemaVersion | import("./FlowError.ts").WorkspacePathError | import("./FlowError.ts").WorkspaceLimitError | import("./FlowError.ts").WorkspaceIoError | import("./FlowError.ts").FlowAborted | import("./FlowError.ts").ProcessError | import("./FlowError.ts").FlowLlmError | import("./FlowError.ts").FlowCapabilityDenied | import("./FlowError.ts").ColumnNotFound | import("./FlowError.ts").BudgetExceeded | StoryPlanInvalid | import("./FlowError.ts").PerimeterViolation | import("./FlowError.ts").MissingDependency | import("./FlowError.ts").MergeConflict | import("./FlowError.ts").EpicCheckoutDirty | import("./FlowError.ts").RosterInvalid | import("./FlowError.ts").EpicIncomplete | import("./FlowError.ts").LandingFailed | import("./FlowError.ts").RefineRefused | import("./FlowError.ts").RosterExhausted | import("./FlowError.ts").StoryFailed | import("./FlowError.ts").DecisionsInvalid | import("./FlowError.ts").OpenPointsPending | import("./FlowError.ts").ExtractPackMissing | import("./FlowError.ts").EpicBriefInvalid | import("./FlowError.ts").EpicBriefNotApproved | import("./FlowError.ts").ContractConflict, never>;
53
+ /** The epic's report and board, when the run wrote them. */
54
+ export declare const loadEpicFiles: (files: PlainFileStoreShape, stateDir: string) => Effect.Effect<{
55
+ readonly report: EpicReport | undefined;
56
+ readonly board: Board | undefined;
57
+ }, never, never>;
58
+ /** The stories worth a retro: failed, waiting, or still active when the run ended. */
59
+ export declare const retroCandidates: (inputs: RetroInputs) => ReadonlyArray<StoryFiles>;
60
+ /** The digest a retro seat is given: code-built, deterministic, capped. */
61
+ export declare const renderRetroDigest: (inputs: RetroInputs) => string;
62
+ export declare const RetroFixKind: Schema.Literals<readonly ["tasks", "story", "refine", "none"]>;
63
+ export type RetroFixKind = typeof RetroFixKind.Type;
64
+ export declare const RetroTask: Schema.Struct<{
65
+ readonly title: Schema.String;
66
+ readonly description: Schema.String;
67
+ }>;
68
+ export type RetroTask = typeof RetroTask.Type;
69
+ export declare const RetroStoryChanges: Schema.Struct<{
70
+ readonly description: Schema.optionalKey<Schema.String>;
71
+ readonly owned: Schema.optionalKey<Schema.$Array<Schema.String>>;
72
+ readonly sharedReadOnly: Schema.optionalKey<Schema.$Array<Schema.String>>;
73
+ readonly dependsOn: Schema.optionalKey<Schema.$Array<Schema.String>>;
74
+ readonly provides: Schema.optionalKey<Schema.$Array<Schema.String>>;
75
+ }>;
76
+ export type RetroStoryChanges = typeof RetroStoryChanges.Type;
77
+ /** One story's diagnosis and exactly one fix, discriminated by `kind`. */
78
+ export declare const RetroStory: Schema.Struct<{
79
+ readonly id: Schema.String;
80
+ readonly diagnosis: Schema.String;
81
+ readonly kind: Schema.Literals<readonly ["tasks", "story", "refine", "none"]>;
82
+ /** `tasks`: appended to the story's plan. */
83
+ readonly tasks: Schema.optionalKey<Schema.$Array<Schema.Struct<{
84
+ readonly title: Schema.String;
85
+ readonly description: Schema.String;
86
+ }>>>;
87
+ /** `story`: the fields to change on the plan entry. */
88
+ readonly changes: Schema.optionalKey<Schema.Struct<{
89
+ readonly description: Schema.optionalKey<Schema.String>;
90
+ readonly owned: Schema.optionalKey<Schema.$Array<Schema.String>>;
91
+ readonly sharedReadOnly: Schema.optionalKey<Schema.$Array<Schema.String>>;
92
+ readonly dependsOn: Schema.optionalKey<Schema.$Array<Schema.String>>;
93
+ readonly provides: Schema.optionalKey<Schema.$Array<Schema.String>>;
94
+ }>>;
95
+ /** `story`: why the entry itself is wrong. `none`: why nothing changes. */
96
+ readonly why: Schema.optionalKey<Schema.String>;
97
+ /** `refine`: the feedback a new round should take. */
98
+ readonly feedback: Schema.optionalKey<Schema.String>;
99
+ }>;
100
+ export type RetroStory = typeof RetroStory.Type;
101
+ declare const RetroProposal_base: Schema.Class<RetroProposal, Schema.Struct<{
102
+ readonly summary: Schema.String;
103
+ readonly stories: Schema.$Array<Schema.Struct<{
104
+ readonly id: Schema.String;
105
+ readonly diagnosis: Schema.String;
106
+ readonly kind: Schema.Literals<readonly ["tasks", "story", "refine", "none"]>;
107
+ /** `tasks`: appended to the story's plan. */
108
+ readonly tasks: Schema.optionalKey<Schema.$Array<Schema.Struct<{
109
+ readonly title: Schema.String;
110
+ readonly description: Schema.String;
111
+ }>>>;
112
+ /** `story`: the fields to change on the plan entry. */
113
+ readonly changes: Schema.optionalKey<Schema.Struct<{
114
+ readonly description: Schema.optionalKey<Schema.String>;
115
+ readonly owned: Schema.optionalKey<Schema.$Array<Schema.String>>;
116
+ readonly sharedReadOnly: Schema.optionalKey<Schema.$Array<Schema.String>>;
117
+ readonly dependsOn: Schema.optionalKey<Schema.$Array<Schema.String>>;
118
+ readonly provides: Schema.optionalKey<Schema.$Array<Schema.String>>;
119
+ }>>;
120
+ /** `story`: why the entry itself is wrong. `none`: why nothing changes. */
121
+ readonly why: Schema.optionalKey<Schema.String>;
122
+ /** `refine`: the feedback a new round should take. */
123
+ readonly feedback: Schema.optionalKey<Schema.String>;
124
+ }>>;
125
+ readonly runAdvice: Schema.$Array<Schema.Struct<{
126
+ readonly finding: Schema.String;
127
+ readonly evidence: Schema.String;
128
+ }>>;
129
+ readonly libraryAdvice: Schema.$Array<Schema.Struct<{
130
+ readonly title: Schema.String;
131
+ readonly evidence: Schema.String;
132
+ readonly suggestion: Schema.String;
133
+ }>>;
134
+ }>, {}>;
135
+ export declare class RetroProposal extends RetroProposal_base {
136
+ }
137
+ export declare const retroProposalJsonSchema: JsonSchema;
138
+ /** The seat's instructions: the digest is the whole subject. */
139
+ export declare const retroPrompt: (digest: string, storiesWithPlan: ReadonlyArray<string>) => string;
140
+ export interface ValidatedRetro {
141
+ readonly proposal: RetroProposal;
142
+ /** What was dropped and why, for the report. */
143
+ readonly dropped: ReadonlyArray<string>;
144
+ }
145
+ /** Applies the story changes a proposal names; `undefined` when nothing would change. */
146
+ export declare const storyWithChanges: (story: Story, changes: RetroStoryChanges) => Story | undefined;
147
+ /** Code checks the seat's answer before anything is written; bad items are dropped, not fatal. */
148
+ export declare const validateRetroProposal: (proposal: RetroProposal, plan: StoryPlan, storiesWithPlan: ReadonlySet<string>) => ValidatedRetro;
149
+ export declare const AppliedMarkerPrefix = "- [x] Applied";
150
+ export interface RetroApproval {
151
+ readonly approved: boolean;
152
+ readonly applied: boolean;
153
+ }
154
+ export declare const retroApprovalOf: (markdown: string) => RetroApproval;
155
+ export interface RetroReportInputs {
156
+ readonly runId: string;
157
+ readonly plan: StoryPlan;
158
+ readonly validated: ValidatedRetro;
159
+ readonly workDir: string;
160
+ readonly epicDir: string;
161
+ }
162
+ /** The report a person reads and ticks. */
163
+ export declare const renderRetroReport: (inputs: RetroReportInputs) => string;
164
+ /** The note for llm4ts itself; `undefined` when the seat had nothing to say. */
165
+ export declare const renderLibraryAdvice: (runId: string, epicId: string, proposal: RetroProposal) => string | undefined;
166
+ /** Writes the four files of a retro and indexes it. */
167
+ export declare const writeRetro: (files: PlainFileStoreShape, stateDir: string, inputs: RetroReportInputs & {
168
+ readonly digest: string;
169
+ readonly at: number;
170
+ }) => Effect.Effect<RetroPaths, PersistenceError | import("./FlowError.ts").PlanParseError | import("./FlowError.ts").UnsupportedSchemaVersion | import("./FlowError.ts").WorkspacePathError | import("./FlowError.ts").WorkspaceLimitError | import("./FlowError.ts").WorkspaceIoError | import("./FlowError.ts").FlowAborted | import("./FlowError.ts").ProcessError | import("./FlowError.ts").FlowLlmError | import("./FlowError.ts").FlowCapabilityDenied | import("./FlowError.ts").ColumnNotFound | import("./FlowError.ts").BudgetExceeded | StoryPlanInvalid | import("./FlowError.ts").PerimeterViolation | import("./FlowError.ts").MissingDependency | import("./FlowError.ts").MergeConflict | import("./FlowError.ts").EpicCheckoutDirty | import("./FlowError.ts").RosterInvalid | import("./FlowError.ts").EpicIncomplete | import("./FlowError.ts").LandingFailed | import("./FlowError.ts").RefineRefused | import("./FlowError.ts").RosterExhausted | import("./FlowError.ts").StoryFailed | import("./FlowError.ts").DecisionsInvalid | import("./FlowError.ts").OpenPointsPending | import("./FlowError.ts").ExtractPackMissing | import("./FlowError.ts").EpicBriefInvalid | import("./FlowError.ts").EpicBriefNotApproved | import("./FlowError.ts").ContractConflict, never>;
171
+ export interface AppliedRetros {
172
+ /** The plan after story edits, to run with. */
173
+ readonly plan: StoryPlan;
174
+ /** One line per thing done or skipped, already published. */
175
+ readonly notes: ReadonlyArray<string>;
176
+ }
177
+ /**
178
+ * Applies every approved, not yet applied retro of this state folder, oldest
179
+ * first: tasks go onto story plans, story edits onto the epic plan (saved,
180
+ * so the executor's hash check restarts them). Says what it did on the
181
+ * events. Nothing here fails the run: a retro that no longer fits is skipped.
182
+ */
183
+ export declare const applyApprovedRetros: (files: PlainFileStoreShape, stateDir: string, plan: StoryPlan, events: FlowEventsShape, now: number) => Effect.Effect<AppliedRetros, PersistenceError | import("./FlowError.ts").PlanParseError | import("./FlowError.ts").UnsupportedSchemaVersion | import("./FlowError.ts").WorkspacePathError | import("./FlowError.ts").WorkspaceLimitError | import("./FlowError.ts").WorkspaceIoError | import("./FlowError.ts").FlowAborted | import("./FlowError.ts").ProcessError | import("./FlowError.ts").FlowLlmError | import("./FlowError.ts").FlowCapabilityDenied | import("./FlowError.ts").ColumnNotFound | import("./FlowError.ts").BudgetExceeded | StoryPlanInvalid | import("./FlowError.ts").PerimeterViolation | import("./FlowError.ts").MissingDependency | import("./FlowError.ts").MergeConflict | import("./FlowError.ts").EpicCheckoutDirty | import("./FlowError.ts").RosterInvalid | import("./FlowError.ts").EpicIncomplete | import("./FlowError.ts").LandingFailed | import("./FlowError.ts").RefineRefused | import("./FlowError.ts").RosterExhausted | import("./FlowError.ts").StoryFailed | import("./FlowError.ts").DecisionsInvalid | import("./FlowError.ts").OpenPointsPending | import("./FlowError.ts").ExtractPackMissing | import("./FlowError.ts").EpicBriefInvalid | import("./FlowError.ts").EpicBriefNotApproved | import("./FlowError.ts").ContractConflict, never>;
184
+ export {};
185
+ //# sourceMappingURL=Retro.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Retro.d.ts","sourceRoot":"","sources":["../src/Retro.ts"],"names":[],"mappings":"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"}