@llm4ts/flow 2.7.2 → 2.8.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.
Files changed (61) hide show
  1. package/dist/Approval.d.ts +1 -1
  2. package/dist/Approval.d.ts.map +1 -1
  3. package/dist/Artifacts.d.ts +2 -2
  4. package/dist/Artifacts.d.ts.map +1 -1
  5. package/dist/BenchReport.d.ts +2 -2
  6. package/dist/BenchReport.d.ts.map +1 -1
  7. package/dist/Chat.d.ts.map +1 -1
  8. package/dist/Chat.js +35 -4
  9. package/dist/Chat.js.map +1 -1
  10. package/dist/CostLedger.d.ts +2 -2
  11. package/dist/CostLedger.d.ts.map +1 -1
  12. package/dist/Equiv.d.ts +3 -3
  13. package/dist/Equiv.d.ts.map +1 -1
  14. package/dist/Flow.d.ts +1 -1
  15. package/dist/Flow.d.ts.map +1 -1
  16. package/dist/FlowError.d.ts +17 -1
  17. package/dist/FlowError.d.ts.map +1 -1
  18. package/dist/FlowError.js +29 -3
  19. package/dist/FlowError.js.map +1 -1
  20. package/dist/GitTool.d.ts +26 -2
  21. package/dist/GitTool.d.ts.map +1 -1
  22. package/dist/GitTool.js +54 -3
  23. package/dist/GitTool.js.map +1 -1
  24. package/dist/Judgment.d.ts +2 -2
  25. package/dist/Judgment.d.ts.map +1 -1
  26. package/dist/Perimeter.d.ts +22 -1
  27. package/dist/Perimeter.d.ts.map +1 -1
  28. package/dist/Perimeter.js +57 -1
  29. package/dist/Perimeter.js.map +1 -1
  30. package/dist/Persistence.d.ts +2 -2
  31. package/dist/Persistence.d.ts.map +1 -1
  32. package/dist/PlanExecution.d.ts +1 -1
  33. package/dist/PlanExecution.d.ts.map +1 -1
  34. package/dist/ProgramJudge.d.ts +1 -1
  35. package/dist/ProgramJudge.d.ts.map +1 -1
  36. package/dist/Replay.d.ts +2 -2
  37. package/dist/Replay.d.ts.map +1 -1
  38. package/dist/Review.d.ts +3 -3
  39. package/dist/Review.d.ts.map +1 -1
  40. package/dist/ReviewCache.d.ts +1 -1
  41. package/dist/ReviewCache.d.ts.map +1 -1
  42. package/dist/Stories.d.ts +47 -5
  43. package/dist/Stories.d.ts.map +1 -1
  44. package/dist/Stories.js +347 -45
  45. package/dist/Stories.js.map +1 -1
  46. package/dist/StoryPlan.d.ts +15 -0
  47. package/dist/StoryPlan.d.ts.map +1 -1
  48. package/dist/StoryPlan.js +58 -0
  49. package/dist/StoryPlan.js.map +1 -1
  50. package/dist/TransientRetry.d.ts +9 -0
  51. package/dist/TransientRetry.d.ts.map +1 -1
  52. package/dist/TransientRetry.js +43 -8
  53. package/dist/TransientRetry.js.map +1 -1
  54. package/package.json +2 -2
  55. package/src/Chat.ts +45 -6
  56. package/src/FlowError.ts +33 -3
  57. package/src/GitTool.ts +99 -5
  58. package/src/Perimeter.ts +85 -1
  59. package/src/Stories.ts +495 -78
  60. package/src/StoryPlan.ts +73 -0
  61. package/src/TransientRetry.ts +97 -8
@@ -22,6 +22,6 @@ export declare class MissingModernizeArtifact extends MissingModernizeArtifact_b
22
22
  export declare const ApprovedMarker = "- [x] Approved";
23
23
  export declare const DraftApprovalMarker = "- [ ] Approved";
24
24
  export declare const withDraftApproval: (markdown: string) => string;
25
- export declare const requireApproval: (files: PlainFileStoreShape, path: string) => Effect.Effect<void, import("./FlowError.ts").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 | import("./FlowError.ts").StoryPlanInvalid | import("./FlowError.ts").PerimeterViolation | import("./FlowError.ts").MissingDependency | import("./FlowError.ts").MergeConflict | import("./FlowError.ts").StoryFailed | import("./FlowError.ts").DecisionsInvalid | import("./FlowError.ts").OpenPointsPending | import("./FlowError.ts").ContractConflict | ApprovalRequired | MissingModernizeArtifact, never>;
25
+ export declare const requireApproval: (files: PlainFileStoreShape, path: string) => Effect.Effect<void, import("./FlowError.ts").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 | import("./FlowError.ts").StoryPlanInvalid | import("./FlowError.ts").PerimeterViolation | import("./FlowError.ts").MissingDependency | import("./FlowError.ts").MergeConflict | import("./FlowError.ts").EpicCheckoutDirty | import("./FlowError.ts").StoryFailed | import("./FlowError.ts").DecisionsInvalid | import("./FlowError.ts").OpenPointsPending | import("./FlowError.ts").ContractConflict | ApprovalRequired | MissingModernizeArtifact, never>;
26
26
  export {};
27
27
  //# sourceMappingURL=Approval.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Approval.d.ts","sourceRoot":"","sources":["../src/Approval.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;;;;;AAE3D;;;;GAIG;AACH,qBAAa,gBAAiB,SAAQ,qBAGpC;IACA,IAAI,OAAO,IAAI,MAAM,CAEpB;CACF;;;;;AAED,qBAAa,wBAAyB,SAAQ,6BAM7C;CAAG;AAEJ,eAAO,MAAM,cAAc,mBAAmB,CAAA;AAC9C,eAAO,MAAM,mBAAmB,mBAAmB,CAAA;AAEnD,eAAO,MAAM,iBAAiB,GAAI,UAAU,MAAM,KAAG,MACA,CAAA;AAErD,eAAO,MAAM,eAAe,i+BAc1B,CAAA"}
1
+ {"version":3,"file":"Approval.d.ts","sourceRoot":"","sources":["../src/Approval.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;;;;;AAE3D;;;;GAIG;AACH,qBAAa,gBAAiB,SAAQ,qBAGpC;IACA,IAAI,OAAO,IAAI,MAAM,CAEpB;CACF;;;;;AAED,qBAAa,wBAAyB,SAAQ,6BAM7C;CAAG;AAEJ,eAAO,MAAM,cAAc,mBAAmB,CAAA;AAC9C,eAAO,MAAM,mBAAmB,mBAAmB,CAAA;AAEnD,eAAO,MAAM,iBAAiB,GAAI,UAAU,MAAM,KAAG,MACA,CAAA;AAErD,eAAO,MAAM,eAAe,8gCAc1B,CAAA"}
@@ -51,7 +51,7 @@ export interface ExtractProgramsOptions<E2, R2> {
51
51
  * re-raised. With `concurrency` 1 that is exactly fail-fast; above 1 a quota
52
52
  * death costs only the programs it interrupted, and a rerun resumes the rest.
53
53
  */
54
- export declare const extractProgramsResumably: <E, R, E2 = never, R2 = never>(files: PlainFileStoreShape, units: readonly ProgramUnit[], extract: (unit: ProgramUnit) => Effect.Effect<ProgramArtifacts, E, R>, directory?: string | undefined, options?: ExtractProgramsOptions<E2, R2> | undefined) => Effect.Effect<ResumeSummary, import("./FlowError.ts").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 | import("./FlowError.ts").StoryPlanInvalid | import("./FlowError.ts").PerimeterViolation | import("./FlowError.ts").MissingDependency | import("./FlowError.ts").MergeConflict | import("./FlowError.ts").StoryFailed | import("./FlowError.ts").DecisionsInvalid | import("./FlowError.ts").OpenPointsPending | import("./FlowError.ts").ContractConflict | E | E2, R | R2>;
55
- export declare const generateVectorsResumably: <E, R>(files: PlainFileStoreShape, programs: readonly string[], generate: (program: string) => Effect.Effect<string, E, R>, directory?: string | undefined) => Effect.Effect<ResumeSummary, import("./FlowError.ts").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 | import("./FlowError.ts").StoryPlanInvalid | import("./FlowError.ts").PerimeterViolation | import("./FlowError.ts").MissingDependency | import("./FlowError.ts").MergeConflict | import("./FlowError.ts").StoryFailed | import("./FlowError.ts").DecisionsInvalid | import("./FlowError.ts").OpenPointsPending | import("./FlowError.ts").ContractConflict | E, R>;
54
+ export declare const extractProgramsResumably: <E, R, E2 = never, R2 = never>(files: PlainFileStoreShape, units: readonly ProgramUnit[], extract: (unit: ProgramUnit) => Effect.Effect<ProgramArtifacts, E, R>, directory?: string | undefined, options?: ExtractProgramsOptions<E2, R2> | undefined) => Effect.Effect<ResumeSummary, import("./FlowError.ts").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 | import("./FlowError.ts").StoryPlanInvalid | import("./FlowError.ts").PerimeterViolation | import("./FlowError.ts").MissingDependency | import("./FlowError.ts").MergeConflict | import("./FlowError.ts").EpicCheckoutDirty | import("./FlowError.ts").StoryFailed | import("./FlowError.ts").DecisionsInvalid | import("./FlowError.ts").OpenPointsPending | import("./FlowError.ts").ContractConflict | E | E2, R | R2>;
55
+ export declare const generateVectorsResumably: <E, R>(files: PlainFileStoreShape, programs: readonly string[], generate: (program: string) => Effect.Effect<string, E, R>, directory?: string | undefined) => Effect.Effect<ResumeSummary, import("./FlowError.ts").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 | import("./FlowError.ts").StoryPlanInvalid | import("./FlowError.ts").PerimeterViolation | import("./FlowError.ts").MissingDependency | import("./FlowError.ts").MergeConflict | import("./FlowError.ts").EpicCheckoutDirty | import("./FlowError.ts").StoryFailed | import("./FlowError.ts").DecisionsInvalid | import("./FlowError.ts").OpenPointsPending | import("./FlowError.ts").ContractConflict | E, R>;
56
56
  export {};
57
57
  //# sourceMappingURL=Artifacts.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Artifacts.d.ts","sourceRoot":"","sources":["../src/Artifacts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAGvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;;;;;AAE3D,qBAAa,WAAY,SAAQ,gBAG/B;CAAG;;;;;;;AAEL,qBAAa,gBAAiB,SAAQ,qBAKpC;CAAG;;;;;AAEL,qBAAa,aAAc,SAAQ,kBAGjC;CAAG;AAIL,yFAAyF;AACzF,eAAO,MAAM,oBAAoB,GAC/B,MAAM,WAAW,EACjB,kBAAgC,KAC/B,aAAa,CAAC,MAAM,CAKtB,CAAA;AAED,MAAM,WAAW,sBAAsB,CAAC,EAAE,EAAE,EAAE;IAC5C;;;;;;OAMG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B;;;;;OAKG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,CAAA;CACxE;AAID;;;;;;;;;;GAUG;AACH,eAAO,MAAM,wBAAwB,GAExB,CAAC,EAAE,CAAC,EAAE,EAAE,UAAU,EAAE,qFAGf,WAAW,KAAK,MAAM,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC,EAAE,CAAC,CAAC,i/BAiErE,CAAA;AAEF,eAAO,MAAM,wBAAwB,GAExB,CAAC,EAAE,CAAC,+EAGK,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,i7BAe1D,CAAA"}
1
+ {"version":3,"file":"Artifacts.d.ts","sourceRoot":"","sources":["../src/Artifacts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAGvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;;;;;AAE3D,qBAAa,WAAY,SAAQ,gBAG/B;CAAG;;;;;;;AAEL,qBAAa,gBAAiB,SAAQ,qBAKpC;CAAG;;;;;AAEL,qBAAa,aAAc,SAAQ,kBAGjC;CAAG;AAIL,yFAAyF;AACzF,eAAO,MAAM,oBAAoB,GAC/B,MAAM,WAAW,EACjB,kBAAgC,KAC/B,aAAa,CAAC,MAAM,CAKtB,CAAA;AAED,MAAM,WAAW,sBAAsB,CAAC,EAAE,EAAE,EAAE;IAC5C;;;;;;OAMG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B;;;;;OAKG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,CAAA;CACxE;AAID;;;;;;;;;;GAUG;AACH,eAAO,MAAM,wBAAwB,GAExB,CAAC,EAAE,CAAC,EAAE,EAAE,UAAU,EAAE,qFAGf,WAAW,KAAK,MAAM,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC,EAAE,CAAC,CAAC,8hCAiErE,CAAA;AAEF,eAAO,MAAM,wBAAwB,GAExB,CAAC,EAAE,CAAC,+EAGK,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,89BAe1D,CAAA"}
@@ -4,6 +4,6 @@ import { PlanParseError, UnsupportedSchemaVersion } from "./FlowError.ts";
4
4
  import type { PlainFileStoreShape } from "./Persistence.ts";
5
5
  export declare const median: (values: ReadonlyArray<number>) => number;
6
6
  export declare const renderBenchReport: (records: ReadonlyArray<BenchRecord>, projectPrograms?: number) => string;
7
- export declare const appendBenchRecord: (files: PlainFileStoreShape, path: string, record: BenchRecord) => Effect.Effect<void, import("./FlowError.ts").PersistenceError | PlanParseError | 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 | import("./FlowError.ts").StoryPlanInvalid | import("./FlowError.ts").PerimeterViolation | import("./FlowError.ts").MissingDependency | import("./FlowError.ts").MergeConflict | import("./FlowError.ts").StoryFailed | import("./FlowError.ts").DecisionsInvalid | import("./FlowError.ts").OpenPointsPending | import("./FlowError.ts").ContractConflict, never>;
8
- export declare const loadBenchRecords: (files: PlainFileStoreShape, path: string) => Effect.Effect<readonly BenchRecord[], import("./FlowError.ts").PersistenceError | PlanParseError | 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 | import("./FlowError.ts").StoryPlanInvalid | import("./FlowError.ts").PerimeterViolation | import("./FlowError.ts").MissingDependency | import("./FlowError.ts").MergeConflict | import("./FlowError.ts").StoryFailed | import("./FlowError.ts").DecisionsInvalid | import("./FlowError.ts").OpenPointsPending | import("./FlowError.ts").ContractConflict, never>;
7
+ export declare const appendBenchRecord: (files: PlainFileStoreShape, path: string, record: BenchRecord) => Effect.Effect<void, import("./FlowError.ts").PersistenceError | PlanParseError | 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 | import("./FlowError.ts").StoryPlanInvalid | import("./FlowError.ts").PerimeterViolation | import("./FlowError.ts").MissingDependency | import("./FlowError.ts").MergeConflict | import("./FlowError.ts").EpicCheckoutDirty | import("./FlowError.ts").StoryFailed | import("./FlowError.ts").DecisionsInvalid | import("./FlowError.ts").OpenPointsPending | import("./FlowError.ts").ContractConflict, never>;
8
+ export declare const loadBenchRecords: (files: PlainFileStoreShape, path: string) => Effect.Effect<readonly BenchRecord[], import("./FlowError.ts").PersistenceError | PlanParseError | 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 | import("./FlowError.ts").StoryPlanInvalid | import("./FlowError.ts").PerimeterViolation | import("./FlowError.ts").MissingDependency | import("./FlowError.ts").MergeConflict | import("./FlowError.ts").EpicCheckoutDirty | import("./FlowError.ts").StoryFailed | import("./FlowError.ts").DecisionsInvalid | import("./FlowError.ts").OpenPointsPending | import("./FlowError.ts").ContractConflict, never>;
9
9
  //# sourceMappingURL=BenchReport.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"BenchReport.d.ts","sourceRoot":"","sources":["../src/BenchReport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,OAAO,EAAE,WAAW,EAAuC,MAAM,YAAY,CAAA;AAC7E,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAkB,MAAM,gBAAgB,CAAA;AACzF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAI3D,eAAO,MAAM,MAAM,GAAI,QAAQ,aAAa,CAAC,MAAM,CAAC,KAAG,MAStD,CAAA;AA4WD,eAAO,MAAM,iBAAiB,GAC5B,SAAS,aAAa,CAAC,WAAW,CAAC,EACnC,kBAAkB,MAAM,KACvB,MAUF,CAAA;AAID,eAAO,MAAM,iBAAiB,s5BAa5B,CAAA;AAEF,eAAO,MAAM,gBAAgB,m5BAiC3B,CAAA"}
1
+ {"version":3,"file":"BenchReport.d.ts","sourceRoot":"","sources":["../src/BenchReport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,OAAO,EAAE,WAAW,EAAuC,MAAM,YAAY,CAAA;AAC7E,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAkB,MAAM,gBAAgB,CAAA;AACzF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAI3D,eAAO,MAAM,MAAM,GAAI,QAAQ,aAAa,CAAC,MAAM,CAAC,KAAG,MAStD,CAAA;AA4WD,eAAO,MAAM,iBAAiB,GAC5B,SAAS,aAAa,CAAC,WAAW,CAAC,EACnC,kBAAkB,MAAM,KACvB,MAUF,CAAA;AAID,eAAO,MAAM,iBAAiB,m8BAa5B,CAAA;AAEF,eAAO,MAAM,gBAAgB,g8BAiC3B,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"Chat.d.ts","sourceRoot":"","sources":["../src/Chat.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAGvC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAC9D,OAAO,EAAE,OAAO,EAAoB,MAAM,qBAAqB,CAAA;AAG/D,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAc,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAElE,eAAO,MAAM,uBAAuB,iHAC4E,CAAA;AAEhH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;IAC5B;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,eAAe,CAAA;IACjC,wEAAwE;IACxE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CACxB;AAaD,MAAM,WAAW,IAAI;IACnB,QAAQ,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;IACrE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAA;CACzD;AAcD,eAAO,MAAM,QAAQ,oGA4BnB,CAAA"}
1
+ {"version":3,"file":"Chat.d.ts","sourceRoot":"","sources":["../src/Chat.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAGvC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAC9D,OAAO,EAAE,OAAO,EAAoB,MAAM,qBAAqB,CAAA;AAG/D,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAoB,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAGxE,eAAO,MAAM,uBAAuB,iHAC4E,CAAA;AAEhH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;IAC5B;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,eAAe,CAAA;IACjC,wEAAwE;IACxE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CACxB;AAaD,MAAM,WAAW,IAAI;IACnB,QAAQ,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;IACrE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAA;CACzD;AAcD,eAAO,MAAM,QAAQ,oGAkEnB,CAAA"}
package/dist/Chat.js CHANGED
@@ -5,7 +5,8 @@ import { Message } from "@llm4ts/core/Models";
5
5
  import { collect } from "@llm4ts/core/Streaming";
6
6
  import { withToolActivity } from "./Activity.js";
7
7
  import { FlowLlmError } from "./FlowError.js";
8
- import { TokensUsed } from "./FlowEvents.js";
8
+ import { Info, TokensUsed } from "./FlowEvents.js";
9
+ import { isContextOverflow } from "./TransientRetry.js";
9
10
  export const gitOwnershipInstruction = "The flow runtime owns git operations. Do not create or switch branches, commit, push, or open pull requests.";
10
11
  const publishUsage = (options, response) => options.events === undefined || response.usage === undefined
11
12
  ? Effect.void
@@ -27,11 +28,41 @@ const initialHistory = (options) => {
27
28
  export const makeChat = Effect.fn("@llm4ts/flow/Chat.make")(function* (service, options = {}) {
28
29
  const history = yield* Ref.make(initialHistory(options));
29
30
  const gate = yield* Semaphore.make(1);
31
+ const send = (messages) => {
32
+ const stream = service.executeStreamWithHistory(messages);
33
+ return collect(options.events === undefined ? stream : withToolActivity(options.events, stream));
34
+ };
30
35
  const askRound = Effect.fn("@llm4ts/flow/Chat.ask")(function* (prompt) {
31
36
  const userTurn = Message.make({ role: "User", content: prompt });
32
- const messages = [...(yield* Ref.get(history)), userTurn];
33
- const stream = service.executeStreamWithHistory(messages);
34
- const response = yield* collect(options.events === undefined ? stream : withToolActivity(options.events, stream)).pipe(Effect.mapError(FlowLlmError.from));
37
+ const earlier = yield* Ref.get(history);
38
+ const full = [...earlier, userTurn];
39
+ const system = earlier.filter((message) => message.role === "System");
40
+ let messages = full;
41
+ // Every ask replays the whole conversation, so a long review loop can
42
+ // outgrow the model's window. The earlier turns are the cheapest thing to
43
+ // drop: a coding agent's work is in the working tree, not in the
44
+ // transcript — so on overflow, retry once with the system prompt and
45
+ // this turn alone, and continue the conversation from there.
46
+ const response = yield* send(full).pipe(Effect.catchIf((error) => isContextOverflow(error) && full.length > system.length + 1, (error) => Effect.gen(function* () {
47
+ messages = [
48
+ ...system,
49
+ Message.make({
50
+ role: "User",
51
+ content: [
52
+ "(Earlier turns of this conversation were dropped to fit the model's context",
53
+ "window. Your previous work is in the working tree: inspect it there.)",
54
+ "",
55
+ prompt
56
+ ].join("\n")
57
+ })
58
+ ];
59
+ if (options.events !== undefined) {
60
+ yield* options.events.publish(Info.make({
61
+ message: `⚠ context: ${options.agent ?? "chat"} history did not fit (${error.message}); retrying with the current turn only`
62
+ }));
63
+ }
64
+ return yield* send(messages);
65
+ })), Effect.mapError(FlowLlmError.from));
35
66
  yield* publishUsage(options, response);
36
67
  yield* Ref.set(history, [
37
68
  ...messages,
package/dist/Chat.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Chat.js","sourceRoot":"","sources":["../src/Chat.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Chat.js","sourceRoot":"","sources":["../src/Chat.ts"],"names":[],"mappings":"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"}
@@ -48,8 +48,8 @@ declare const CostBudget_base: Schema.Class<CostBudget, Schema.Struct<{
48
48
  export declare class CostBudget extends CostBudget_base {
49
49
  }
50
50
  export declare const checkCostBudget: (record: CostRecord, budget: CostBudget) => Effect.Effect<void, BudgetExceeded>;
51
- export declare const appendCostRecord: (files: PlainFileStoreShape, path: string, record: CostRecord) => Effect.Effect<void, import("./FlowError.ts").PersistenceError | 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 | BudgetExceeded | import("./FlowError.ts").StoryPlanInvalid | import("./FlowError.ts").PerimeterViolation | import("./FlowError.ts").MissingDependency | import("./FlowError.ts").MergeConflict | import("./FlowError.ts").StoryFailed | import("./FlowError.ts").DecisionsInvalid | import("./FlowError.ts").OpenPointsPending | import("./FlowError.ts").ContractConflict, never>;
52
- export declare const loadCostLedger: (files: PlainFileStoreShape, path: string) => Effect.Effect<readonly CostRecord[], import("./FlowError.ts").PersistenceError | 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 | BudgetExceeded | import("./FlowError.ts").StoryPlanInvalid | import("./FlowError.ts").PerimeterViolation | import("./FlowError.ts").MissingDependency | import("./FlowError.ts").MergeConflict | import("./FlowError.ts").StoryFailed | import("./FlowError.ts").DecisionsInvalid | import("./FlowError.ts").OpenPointsPending | import("./FlowError.ts").ContractConflict, never>;
51
+ export declare const appendCostRecord: (files: PlainFileStoreShape, path: string, record: CostRecord) => Effect.Effect<void, import("./FlowError.ts").PersistenceError | 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 | BudgetExceeded | import("./FlowError.ts").StoryPlanInvalid | import("./FlowError.ts").PerimeterViolation | import("./FlowError.ts").MissingDependency | import("./FlowError.ts").MergeConflict | import("./FlowError.ts").EpicCheckoutDirty | import("./FlowError.ts").StoryFailed | import("./FlowError.ts").DecisionsInvalid | import("./FlowError.ts").OpenPointsPending | import("./FlowError.ts").ContractConflict, never>;
52
+ export declare const loadCostLedger: (files: PlainFileStoreShape, path: string) => Effect.Effect<readonly CostRecord[], import("./FlowError.ts").PersistenceError | 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 | BudgetExceeded | import("./FlowError.ts").StoryPlanInvalid | import("./FlowError.ts").PerimeterViolation | import("./FlowError.ts").MissingDependency | import("./FlowError.ts").MergeConflict | import("./FlowError.ts").EpicCheckoutDirty | import("./FlowError.ts").StoryFailed | import("./FlowError.ts").DecisionsInvalid | import("./FlowError.ts").OpenPointsPending | import("./FlowError.ts").ContractConflict, never>;
53
53
  export declare const mergeCostCells: (records: ReadonlyArray<CostRecord>) => ReadonlyArray<CostCell>;
54
54
  export {};
55
55
  //# sourceMappingURL=CostLedger.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CostLedger.d.ts","sourceRoot":"","sources":["../src/CostLedger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,cAAc,EAAE,cAAc,EAAkB,MAAM,gBAAgB,CAAA;AAC/E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;;;;;;;;;;;AAI3D,qBAAa,QAAS,SAAQ,aAS5B;CAAG;;;;;;;;;;;;;;;AAEL,qBAAa,UAAW,SAAQ,eAa9B;CAAG;AAEL,eAAO,MAAM,uBAAuB,IAAI,CAAA;AACxC,eAAO,MAAM,kBAAkB,gBAAgB,CAAA;AAE/C,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAA;CACxC;AAED,eAAO,MAAM,cAAc,GAAI,OAAO,eAAe,KAAG,UAgBvD,CAAA;;;;;AAED,qBAAa,UAAW,SAAQ,eAG9B;CAAG;AAEL,eAAO,MAAM,eAAe,GAC1B,QAAQ,UAAU,EAClB,QAAQ,UAAU,KACjB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,cAAc,CAqBpC,CAAA;AAID,eAAO,MAAM,gBAAgB,q5BAa3B,CAAA;AAEF,eAAO,MAAM,cAAc,k5BAqBzB,CAAA;AAOF,eAAO,MAAM,cAAc,GAAI,SAAS,aAAa,CAAC,UAAU,CAAC,KAAG,aAAa,CAAC,QAAQ,CA+BzF,CAAA"}
1
+ {"version":3,"file":"CostLedger.d.ts","sourceRoot":"","sources":["../src/CostLedger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,cAAc,EAAE,cAAc,EAAkB,MAAM,gBAAgB,CAAA;AAC/E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;;;;;;;;;;;AAI3D,qBAAa,QAAS,SAAQ,aAS5B;CAAG;;;;;;;;;;;;;;;AAEL,qBAAa,UAAW,SAAQ,eAa9B;CAAG;AAEL,eAAO,MAAM,uBAAuB,IAAI,CAAA;AACxC,eAAO,MAAM,kBAAkB,gBAAgB,CAAA;AAE/C,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAA;CACxC;AAED,eAAO,MAAM,cAAc,GAAI,OAAO,eAAe,KAAG,UAgBvD,CAAA;;;;;AAED,qBAAa,UAAW,SAAQ,eAG9B;CAAG;AAEL,eAAO,MAAM,eAAe,GAC1B,QAAQ,UAAU,EAClB,QAAQ,UAAU,KACjB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,cAAc,CAqBpC,CAAA;AAID,eAAO,MAAM,gBAAgB,k8BAa3B,CAAA;AAEF,eAAO,MAAM,cAAc,+7BAqBzB,CAAA;AAOF,eAAO,MAAM,cAAc,GAAI,SAAS,aAAa,CAAC,UAAU,CAAC,KAAG,aAAa,CAAC,QAAQ,CA+BzF,CAAA"}
package/dist/Equiv.d.ts CHANGED
@@ -174,8 +174,8 @@ export declare class ReplayedCrashed extends ReplayedCrashed_base {
174
174
  }
175
175
  export declare const Replayed: Schema.Union<readonly [typeof ReplayedObserved, typeof ReplayedCrashed]>;
176
176
  export type Replayed = typeof Replayed.Type;
177
- export declare const writeEquivVectors: (files: PlainFileStoreShape, path: string, vectors: readonly EquivVector[]) => Effect.Effect<void, import("./FlowError.ts").PersistenceError | PlanParseError | UnsupportedSchemaVersion | import("./FlowError.ts").WorkspacePathError | import("./FlowError.ts").WorkspaceLimitError | import("./FlowError.ts").WorkspaceIoError | import("./FlowError.ts").FlowAborted | ProcessError | import("./FlowError.ts").FlowLlmError | import("./FlowError.ts").FlowCapabilityDenied | import("./FlowError.ts").ColumnNotFound | import("./FlowError.ts").BudgetExceeded | import("./FlowError.ts").StoryPlanInvalid | import("./FlowError.ts").PerimeterViolation | import("./FlowError.ts").MissingDependency | import("./FlowError.ts").MergeConflict | import("./FlowError.ts").StoryFailed | import("./FlowError.ts").DecisionsInvalid | import("./FlowError.ts").OpenPointsPending | import("./FlowError.ts").ContractConflict, never>;
178
- export declare const readEquivVectors: (files: PlainFileStoreShape, path: string) => Effect.Effect<readonly EquivVector[], import("./FlowError.ts").PersistenceError | PlanParseError | UnsupportedSchemaVersion | import("./FlowError.ts").WorkspacePathError | import("./FlowError.ts").WorkspaceLimitError | import("./FlowError.ts").WorkspaceIoError | import("./FlowError.ts").FlowAborted | ProcessError | import("./FlowError.ts").FlowLlmError | import("./FlowError.ts").FlowCapabilityDenied | import("./FlowError.ts").ColumnNotFound | import("./FlowError.ts").BudgetExceeded | import("./FlowError.ts").StoryPlanInvalid | import("./FlowError.ts").PerimeterViolation | import("./FlowError.ts").MissingDependency | import("./FlowError.ts").MergeConflict | import("./FlowError.ts").StoryFailed | import("./FlowError.ts").DecisionsInvalid | import("./FlowError.ts").OpenPointsPending | import("./FlowError.ts").ContractConflict, never>;
179
- export declare const replayEquivVector: (process: ProcessExecutorShape, events: FlowEventsShape, command: readonly string[], root: string, vector: EquivVector) => Effect.Effect<ReplayedObserved | ReplayedCrashed, import("./FlowError.ts").PersistenceError | PlanParseError | UnsupportedSchemaVersion | import("./FlowError.ts").WorkspacePathError | import("./FlowError.ts").WorkspaceLimitError | import("./FlowError.ts").WorkspaceIoError | import("./FlowError.ts").FlowAborted | ProcessError | import("./FlowError.ts").FlowLlmError | import("./FlowError.ts").FlowCapabilityDenied | import("./FlowError.ts").ColumnNotFound | import("./FlowError.ts").BudgetExceeded | import("./FlowError.ts").StoryPlanInvalid | import("./FlowError.ts").PerimeterViolation | import("./FlowError.ts").MissingDependency | import("./FlowError.ts").MergeConflict | import("./FlowError.ts").StoryFailed | import("./FlowError.ts").DecisionsInvalid | import("./FlowError.ts").OpenPointsPending | import("./FlowError.ts").ContractConflict, never>;
177
+ export declare const writeEquivVectors: (files: PlainFileStoreShape, path: string, vectors: readonly EquivVector[]) => Effect.Effect<void, import("./FlowError.ts").PersistenceError | PlanParseError | UnsupportedSchemaVersion | import("./FlowError.ts").WorkspacePathError | import("./FlowError.ts").WorkspaceLimitError | import("./FlowError.ts").WorkspaceIoError | import("./FlowError.ts").FlowAborted | ProcessError | import("./FlowError.ts").FlowLlmError | import("./FlowError.ts").FlowCapabilityDenied | import("./FlowError.ts").ColumnNotFound | import("./FlowError.ts").BudgetExceeded | import("./FlowError.ts").StoryPlanInvalid | import("./FlowError.ts").PerimeterViolation | import("./FlowError.ts").MissingDependency | import("./FlowError.ts").MergeConflict | import("./FlowError.ts").EpicCheckoutDirty | import("./FlowError.ts").StoryFailed | import("./FlowError.ts").DecisionsInvalid | import("./FlowError.ts").OpenPointsPending | import("./FlowError.ts").ContractConflict, never>;
178
+ export declare const readEquivVectors: (files: PlainFileStoreShape, path: string) => Effect.Effect<readonly EquivVector[], import("./FlowError.ts").PersistenceError | PlanParseError | UnsupportedSchemaVersion | import("./FlowError.ts").WorkspacePathError | import("./FlowError.ts").WorkspaceLimitError | import("./FlowError.ts").WorkspaceIoError | import("./FlowError.ts").FlowAborted | ProcessError | import("./FlowError.ts").FlowLlmError | import("./FlowError.ts").FlowCapabilityDenied | import("./FlowError.ts").ColumnNotFound | import("./FlowError.ts").BudgetExceeded | import("./FlowError.ts").StoryPlanInvalid | import("./FlowError.ts").PerimeterViolation | import("./FlowError.ts").MissingDependency | import("./FlowError.ts").MergeConflict | import("./FlowError.ts").EpicCheckoutDirty | import("./FlowError.ts").StoryFailed | import("./FlowError.ts").DecisionsInvalid | import("./FlowError.ts").OpenPointsPending | import("./FlowError.ts").ContractConflict, never>;
179
+ export declare const replayEquivVector: (process: ProcessExecutorShape, events: FlowEventsShape, command: readonly string[], root: string, vector: EquivVector) => Effect.Effect<ReplayedObserved | ReplayedCrashed, import("./FlowError.ts").PersistenceError | PlanParseError | UnsupportedSchemaVersion | import("./FlowError.ts").WorkspacePathError | import("./FlowError.ts").WorkspaceLimitError | import("./FlowError.ts").WorkspaceIoError | import("./FlowError.ts").FlowAborted | ProcessError | import("./FlowError.ts").FlowLlmError | import("./FlowError.ts").FlowCapabilityDenied | import("./FlowError.ts").ColumnNotFound | import("./FlowError.ts").BudgetExceeded | import("./FlowError.ts").StoryPlanInvalid | import("./FlowError.ts").PerimeterViolation | import("./FlowError.ts").MissingDependency | import("./FlowError.ts").MergeConflict | import("./FlowError.ts").EpicCheckoutDirty | import("./FlowError.ts").StoryFailed | import("./FlowError.ts").DecisionsInvalid | import("./FlowError.ts").OpenPointsPending | import("./FlowError.ts").ContractConflict, never>;
180
180
  export {};
181
181
  //# sourceMappingURL=Equiv.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Equiv.d.ts","sourceRoot":"","sources":["../src/Equiv.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Equiv.d.ts","sourceRoot":"","sources":["../src/Equiv.ts"],"names":[],"mappings":"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"}
package/dist/Flow.d.ts CHANGED
@@ -52,5 +52,5 @@ export interface ImplementPlanOptions {
52
52
  }
53
53
  /** The judgment form of the empty-diff probe: one Truth question over the coder's reply. */
54
54
  export declare const satisfiedByJudgment: (context: FlowContextShape, taskTitle: string, reply: string, mode?: "observe" | "advise" | "act" | undefined) => Effect.Effect<boolean | undefined, never, never>;
55
- export declare const implementPlanFlow: (context: FlowContextShape, options: ImplementPlanOptions) => Effect.Effect<Plan, import("./FlowError.ts").PersistenceError | import("./FlowError.ts").PlanParseError | import("./FlowError.ts").UnsupportedSchemaVersion | import("./FlowError.ts").WorkspacePathError | import("./FlowError.ts").WorkspaceLimitError | import("./FlowError.ts").WorkspaceIoError | FlowAborted | import("./FlowError.ts").ProcessError | FlowLlmError | import("./FlowError.ts").FlowCapabilityDenied | import("./FlowError.ts").ColumnNotFound | import("./FlowError.ts").BudgetExceeded | import("./FlowError.ts").StoryPlanInvalid | import("./FlowError.ts").PerimeterViolation | import("./FlowError.ts").MissingDependency | import("./FlowError.ts").MergeConflict | import("./FlowError.ts").StoryFailed | import("./FlowError.ts").DecisionsInvalid | import("./FlowError.ts").OpenPointsPending | import("./FlowError.ts").ContractConflict, never>;
55
+ export declare const implementPlanFlow: (context: FlowContextShape, options: ImplementPlanOptions) => Effect.Effect<Plan, import("./FlowError.ts").PersistenceError | import("./FlowError.ts").PlanParseError | import("./FlowError.ts").UnsupportedSchemaVersion | import("./FlowError.ts").WorkspacePathError | import("./FlowError.ts").WorkspaceLimitError | import("./FlowError.ts").WorkspaceIoError | FlowAborted | import("./FlowError.ts").ProcessError | FlowLlmError | import("./FlowError.ts").FlowCapabilityDenied | import("./FlowError.ts").ColumnNotFound | import("./FlowError.ts").BudgetExceeded | import("./FlowError.ts").StoryPlanInvalid | import("./FlowError.ts").PerimeterViolation | import("./FlowError.ts").MissingDependency | import("./FlowError.ts").MergeConflict | import("./FlowError.ts").EpicCheckoutDirty | import("./FlowError.ts").StoryFailed | import("./FlowError.ts").DecisionsInvalid | import("./FlowError.ts").OpenPointsPending | import("./FlowError.ts").ContractConflict, never>;
56
56
  //# sourceMappingURL=Flow.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Flow.d.ts","sourceRoot":"","sources":["../src/Flow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAI9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AACxD,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1E,OAAO,EAML,KAAK,eAAe,EACrB,MAAM,iBAAiB,CAAA;AACxB,OAAO,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAC3C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAGtD,OAAO,EAAmC,KAAK,YAAY,EAAE,MAAM,eAAe,CAAA;AAClF,OAAO,EAAsC,KAAK,YAAY,EAAE,MAAM,aAAa,CAAA;AACnF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAE7C,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAE/D,eAAO,MAAM,YAAY,GAAI,SAAS,gBAAgB,KAAG,eACd,CAAA;AAE3C,eAAO,MAAM,kBAAkB,mHAmB7B,CAAA;AAEF,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAA;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;IAC7C,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB;;;;;OAKG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAA;IAC9B,QAAQ,CAAC,SAAS,CAAC,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAA;IAC5C,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,KAAK,MAAM,CAAA;IAC3D,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAA;IACjC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,SAAS,CAAC,CAAA;IACtD,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;IAChD;;;;;;;OAOG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,UAAU,CAAA;IAC7C;;;;;;;OAOG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG;QAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,YAAY,CAAA;KAAE,CAAA;CACpF;AAED,4FAA4F;AAC5F,eAAO,MAAM,mBAAmB,oKA6C9B,CAAA;AAOF,eAAO,MAAM,iBAAiB,i5BAqH5B,CAAA"}
1
+ {"version":3,"file":"Flow.d.ts","sourceRoot":"","sources":["../src/Flow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAI9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AACxD,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1E,OAAO,EAML,KAAK,eAAe,EACrB,MAAM,iBAAiB,CAAA;AACxB,OAAO,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAC3C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAGtD,OAAO,EAAmC,KAAK,YAAY,EAAE,MAAM,eAAe,CAAA;AAClF,OAAO,EAAsC,KAAK,YAAY,EAAE,MAAM,aAAa,CAAA;AACnF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAE7C,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAE/D,eAAO,MAAM,YAAY,GAAI,SAAS,gBAAgB,KAAG,eACd,CAAA;AAE3C,eAAO,MAAM,kBAAkB,mHAmB7B,CAAA;AAEF,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAA;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;IAC7C,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB;;;;;OAKG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAA;IAC9B,QAAQ,CAAC,SAAS,CAAC,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAA;IAC5C,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,KAAK,MAAM,CAAA;IAC3D,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAA;IACjC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,SAAS,CAAC,CAAA;IACtD,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;IAChD;;;;;;;OAOG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,UAAU,CAAA;IAC7C;;;;;;;OAOG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG;QAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,YAAY,CAAA;KAAE,CAAA;CACpF;AAED,4FAA4F;AAC5F,eAAO,MAAM,mBAAmB,oKA6C9B,CAAA;AAOF,eAAO,MAAM,iBAAiB,87BAqH5B,CAAA"}
@@ -116,11 +116,27 @@ declare const MergeConflict_base: Schema.Class<MergeConflict, Schema.TaggedStruc
116
116
  readonly branch: Schema.String;
117
117
  readonly into: Schema.String;
118
118
  readonly paths: Schema.$Array<Schema.String>;
119
+ /** What git said when no path is in conflict — a merge refused before it started. */
120
+ readonly detail: Schema.optionalKey<Schema.String>;
119
121
  }>, import("effect/Cause").YieldableError>;
120
122
  /** A story branch did not merge cleanly into the epic branch; the merge was aborted. */
121
123
  export declare class MergeConflict extends MergeConflict_base {
122
124
  get message(): string;
123
125
  }
126
+ declare const EpicCheckoutDirty_base: Schema.Class<EpicCheckoutDirty, Schema.TaggedStruct<"EpicCheckoutDirty", {
127
+ readonly checkout: Schema.String;
128
+ readonly paths: Schema.$Array<Schema.String>;
129
+ /** The story that had just finished when the change was found. */
130
+ readonly story: Schema.optionalKey<Schema.String>;
131
+ }>, import("effect/Cause").YieldableError>;
132
+ /**
133
+ * The epic checkout holds changes no story may make there — a coder worked
134
+ * outside its worktree. Every later merge and epic gate would inherit them,
135
+ * so the executor stops launching stories until an operator cleans it.
136
+ */
137
+ export declare class EpicCheckoutDirty extends EpicCheckoutDirty_base {
138
+ get message(): string;
139
+ }
124
140
  declare const StoryFailed_base: Schema.Class<StoryFailed, Schema.TaggedStruct<"StoryFailed", {
125
141
  readonly story: Schema.String;
126
142
  readonly reason: Schema.String;
@@ -153,7 +169,7 @@ declare const ContractConflict_base: Schema.Class<ContractConflict, Schema.Tagge
153
169
  export declare class ContractConflict extends ContractConflict_base {
154
170
  get message(): string;
155
171
  }
156
- export declare const FlowError: Schema.Union<readonly [typeof PersistenceError, typeof PlanParseError, typeof UnsupportedSchemaVersion, typeof WorkspacePathError, typeof WorkspaceLimitError, typeof WorkspaceIoError, typeof FlowAborted, typeof ProcessError, typeof FlowLlmError, typeof FlowCapabilityDenied, typeof ColumnNotFound, typeof BudgetExceeded, typeof StoryPlanInvalid, typeof PerimeterViolation, typeof MissingDependency, typeof MergeConflict, typeof StoryFailed, typeof DecisionsInvalid, typeof OpenPointsPending, typeof ContractConflict]>;
172
+ export declare const FlowError: Schema.Union<readonly [typeof PersistenceError, typeof PlanParseError, typeof UnsupportedSchemaVersion, typeof WorkspacePathError, typeof WorkspaceLimitError, typeof WorkspaceIoError, typeof FlowAborted, typeof ProcessError, typeof FlowLlmError, typeof FlowCapabilityDenied, typeof ColumnNotFound, typeof BudgetExceeded, typeof StoryPlanInvalid, typeof PerimeterViolation, typeof MissingDependency, typeof MergeConflict, typeof EpicCheckoutDirty, typeof StoryFailed, typeof DecisionsInvalid, typeof OpenPointsPending, typeof ContractConflict]>;
157
173
  export type FlowError = typeof FlowError.Type;
158
174
  export {};
159
175
  //# sourceMappingURL=FlowError.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"FlowError.d.ts","sourceRoot":"","sources":["../src/FlowError.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;;;;;AAE9C,qBAAa,gBAAiB,SAAQ,qBAGpC;CAAG;;;;AAEL,qBAAa,cAAe,SAAQ,mBAElC;CAAG;;;;;;AAEL,qBAAa,wBAAyB,SAAQ,6BAO7C;IACC,IAAI,OAAO,IAAI,MAAM,CAEpB;CACF;;;;;AAED,qBAAa,kBAAmB,SAAQ,uBAGtC;CAAG;;;;;;;AAEL,qBAAa,mBAAoB,SAAQ,wBAQxC;IACC,IAAI,OAAO,IAAI,MAAM,CAGpB;CACF;;;;;;;AAED,qBAAa,gBAAiB,SAAQ,qBAKpC;CAAG;;;;AAEL,qBAAa,WAAY,SAAQ,gBAE/B;CAAG;;;;;AAEL,qBAAa,YAAa,SAAQ,iBAGhC;CAAG;AAEL;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,GAAI,OAAO,OAAO,KAAG,MAUlD,CAAA;;;;;AAED,qBAAa,YAAa,SAAQ,iBAGhC;IACA,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAI,QAAQ,OAAO,QAAQ,CAAC,IAAI,KAAG,YAAY,CAI/D;CACL;;;;;AAED,qBAAa,oBAAqB,SAAQ,yBAMzC;IACC,IAAI,OAAO,IAAI,MAAM,CAIpB;CACF;;;;;AAED,qBAAa,cAAe,SAAQ,mBAGlC;IACA,IAAI,OAAO,IAAI,MAAM,CAEpB;CACF;;;;;;AAED,qBAAa,cAAe,SAAQ,mBAIlC;IACA,IAAI,OAAO,IAAI,MAAM,CAEpB;CACF;;;;AAED,qGAAqG;AACrG,qBAAa,gBAAiB,SAAQ,qBAEpC;IACA,IAAI,OAAO,IAAI,MAAM,CAEpB;CACF;;;;;;AAED,6EAA6E;AAC7E,qBAAa,kBAAmB,SAAQ,uBAOvC;IACC,IAAI,OAAO,IAAI,MAAM,CASpB;CACF;;;;;AAED,4FAA4F;AAC5F,qBAAa,iBAAkB,SAAQ,sBAMtC;IACC,IAAI,OAAO,IAAI,MAAM,CAEpB;CACF;;;;;;AAED,wFAAwF;AACxF,qBAAa,aAAc,SAAQ,kBAIjC;IACA,IAAI,OAAO,IAAI,MAAM,CAGpB;CACF;;;;;AAED,iFAAiF;AACjF,qBAAa,WAAY,SAAQ,gBAG/B;IACA,IAAI,OAAO,IAAI,MAAM,CAEpB;CACF;;;;;AAED,mHAAmH;AACnH,qBAAa,gBAAiB,SAAQ,qBAGpC;IACA,IAAI,OAAO,IAAI,MAAM,CAGpB;CACF;;;;;AAED,mGAAmG;AACnG,qBAAa,iBAAkB,SAAQ,sBAMtC;IACC,IAAI,OAAO,IAAI,MAAM,CAKpB;CACF;;;;;AAED,qHAAqH;AACrH,qBAAa,gBAAiB,SAAQ,qBAGpC;IACA,IAAI,OAAO,IAAI,MAAM,CAEpB;CACF;AAED,eAAO,MAAM,SAAS,ugBAqBpB,CAAA;AACF,MAAM,MAAM,SAAS,GAAG,OAAO,SAAS,CAAC,IAAI,CAAA"}
1
+ {"version":3,"file":"FlowError.d.ts","sourceRoot":"","sources":["../src/FlowError.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;;;;;AAE9C,qBAAa,gBAAiB,SAAQ,qBAGpC;CAAG;;;;AAEL,qBAAa,cAAe,SAAQ,mBAElC;CAAG;;;;;;AAEL,qBAAa,wBAAyB,SAAQ,6BAO7C;IACC,IAAI,OAAO,IAAI,MAAM,CAEpB;CACF;;;;;AAED,qBAAa,kBAAmB,SAAQ,uBAGtC;CAAG;;;;;;;AAEL,qBAAa,mBAAoB,SAAQ,wBAQxC;IACC,IAAI,OAAO,IAAI,MAAM,CAGpB;CACF;;;;;;;AAED,qBAAa,gBAAiB,SAAQ,qBAKpC;CAAG;;;;AAEL,qBAAa,WAAY,SAAQ,gBAE/B;CAAG;;;;;AAEL,qBAAa,YAAa,SAAQ,iBAGhC;CAAG;AAEL;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,GAAI,OAAO,OAAO,KAAG,MAUlD,CAAA;;;;;AAED,qBAAa,YAAa,SAAQ,iBAGhC;IACA,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAI,QAAQ,OAAO,QAAQ,CAAC,IAAI,KAAG,YAAY,CAI/D;CACL;;;;;AAED,qBAAa,oBAAqB,SAAQ,yBAMzC;IACC,IAAI,OAAO,IAAI,MAAM,CAIpB;CACF;;;;;AAED,qBAAa,cAAe,SAAQ,mBAGlC;IACA,IAAI,OAAO,IAAI,MAAM,CAEpB;CACF;;;;;;AAED,qBAAa,cAAe,SAAQ,mBAIlC;IACA,IAAI,OAAO,IAAI,MAAM,CAEpB;CACF;;;;AAED,qGAAqG;AACrG,qBAAa,gBAAiB,SAAQ,qBAEpC;IACA,IAAI,OAAO,IAAI,MAAM,CAEpB;CACF;;;;;;AAED,6EAA6E;AAC7E,qBAAa,kBAAmB,SAAQ,uBAOvC;IACC,IAAI,OAAO,IAAI,MAAM,CASpB;CACF;;;;;AAED,4FAA4F;AAC5F,qBAAa,iBAAkB,SAAQ,sBAMtC;IACC,IAAI,OAAO,IAAI,MAAM,CAEpB;CACF;;;;;IAOC,qFAAqF;;;AALvF,wFAAwF;AACxF,qBAAa,aAAc,SAAQ,kBAMjC;IACA,IAAI,OAAO,IAAI,MAAM,CAMpB;CACF;;;;IAYG,kEAAkE;;;AAVtE;;;;GAIG;AACH,qBAAa,iBAAkB,SAAQ,sBAQtC;IACC,IAAI,OAAO,IAAI,MAAM,CAOpB;CACF;;;;;AAED,iFAAiF;AACjF,qBAAa,WAAY,SAAQ,gBAG/B;IACA,IAAI,OAAO,IAAI,MAAM,CAEpB;CACF;;;;;AAED,mHAAmH;AACnH,qBAAa,gBAAiB,SAAQ,qBAGpC;IACA,IAAI,OAAO,IAAI,MAAM,CAGpB;CACF;;;;;AAED,mGAAmG;AACnG,qBAAa,iBAAkB,SAAQ,sBAMtC;IACC,IAAI,OAAO,IAAI,MAAM,CAKpB;CACF;;;;;AAED,qHAAqH;AACrH,qBAAa,gBAAiB,SAAQ,qBAGpC;IACA,IAAI,OAAO,IAAI,MAAM,CAEpB;CACF;AAED,eAAO,MAAM,SAAS,iiBAsBpB,CAAA;AACF,MAAM,MAAM,SAAS,GAAG,OAAO,SAAS,CAAC,IAAI,CAAA"}
package/dist/FlowError.js CHANGED
@@ -139,11 +139,36 @@ export class MissingDependency extends Schema.TaggedError()("MissingDependency",
139
139
  export class MergeConflict extends Schema.TaggedError()("MergeConflict", {
140
140
  branch: Schema.String,
141
141
  into: Schema.String,
142
- paths: Schema.Array(Schema.String)
142
+ paths: Schema.Array(Schema.String),
143
+ /** What git said when no path is in conflict — a merge refused before it started. */
144
+ detail: Schema.optionalKey(Schema.String)
143
145
  }) {
144
146
  get message() {
145
- const where = this.paths.length === 0 ? "" : `: ${this.paths.join(", ")}`;
146
- return `merging '${this.branch}' into '${this.into}' conflicted${where}`;
147
+ if (this.paths.length > 0) {
148
+ return `merging '${this.branch}' into '${this.into}' conflicted: ${this.paths.join(", ")}`;
149
+ }
150
+ const why = this.detail === undefined || this.detail.length === 0 ? "" : `: ${this.detail}`;
151
+ return `merging '${this.branch}' into '${this.into}' failed${why}`;
152
+ }
153
+ }
154
+ /**
155
+ * The epic checkout holds changes no story may make there — a coder worked
156
+ * outside its worktree. Every later merge and epic gate would inherit them,
157
+ * so the executor stops launching stories until an operator cleans it.
158
+ */
159
+ export class EpicCheckoutDirty extends Schema.TaggedError()("EpicCheckoutDirty", {
160
+ checkout: Schema.String,
161
+ paths: Schema.Array(Schema.String),
162
+ /** The story that had just finished when the change was found. */
163
+ story: Schema.optionalKey(Schema.String)
164
+ }) {
165
+ get message() {
166
+ const suspect = this.story === undefined ? "" : ` (found after story '${this.story}' finished)`;
167
+ return [
168
+ `the epic checkout ${this.checkout} has uncommitted changes${suspect} — a coder worked outside its worktree:`,
169
+ ...this.paths.map((path) => `- ${path}`),
170
+ "Move each change into the owning story's worktree or discard it, then rerun."
171
+ ].join("\n");
147
172
  }
148
173
  }
149
174
  /** One story failed; carries the story id so a fail-fast run names its cause. */
@@ -201,6 +226,7 @@ export const FlowError = Schema.Union([
201
226
  PerimeterViolation,
202
227
  MissingDependency,
203
228
  MergeConflict,
229
+ EpicCheckoutDirty,
204
230
  StoryFailed,
205
231
  DecisionsInvalid,
206
232
  OpenPointsPending,
@@ -1 +1 @@
1
- {"version":3,"file":"FlowError.js","sourceRoot":"","sources":["../src/FlowError.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"FlowError.js","sourceRoot":"","sources":["../src/FlowError.ts"],"names":[],"mappings":"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"}
package/dist/GitTool.d.ts CHANGED
@@ -24,6 +24,11 @@ export interface GitToolShape {
24
24
  readonly initBare: Effect.Effect<void, FlowError>;
25
25
  readonly config: (key: string, value: string) => Effect.Effect<void, FlowError>;
26
26
  readonly status: Effect.Effect<string, FlowError>;
27
+ /**
28
+ * Every path with uncommitted changes, untracked files listed one by one
29
+ * (not collapsed into their directory), minus the runner's `.llm4ts/`.
30
+ */
31
+ readonly uncommittedFiles: Effect.Effect<ReadonlyArray<string>, FlowError>;
27
32
  readonly currentBranch: Effect.Effect<string, FlowError>;
28
33
  readonly diff: Effect.Effect<string, FlowError>;
29
34
  readonly diffAll: Effect.Effect<string, FlowError>;
@@ -52,6 +57,13 @@ export interface GitToolShape {
52
57
  readonly addWorktreeNewBranch: (path: string, branch: string, startPoint: string) => Effect.Effect<void, FlowError>;
53
58
  /** `force` also removes a worktree holding untracked or modified files. */
54
59
  readonly removeWorktree: (path: string, force?: boolean) => Effect.Effect<void, FlowError>;
60
+ /** Moves an existing worktree to `to`, keeping its branch and uncommitted work. */
61
+ readonly moveWorktree: (from: string, to: string) => Effect.Effect<void, FlowError>;
62
+ /**
63
+ * Puts `paths` back as they are on `source`: a path `source` has is checked
64
+ * out from it, a path it lacks is deleted (tracked or not). Uncommitted.
65
+ */
66
+ readonly restorePaths: (source: string, paths: ReadonlyArray<string>) => Effect.Effect<void, FlowError>;
55
67
  readonly branchExists: (name: string) => Effect.Effect<boolean, FlowError>;
56
68
  readonly deleteBranch: (name: string) => Effect.Effect<void, FlowError>;
57
69
  /** Whether `commit` is reachable from `of` — a merged story branch is an ancestor of the epic head. */
@@ -59,10 +71,22 @@ export interface GitToolShape {
59
71
  /**
60
72
  * Merges `branch` into the checked-out branch with a merge commit. A
61
73
  * conflict fails typed with the conflicting paths and leaves the tree as it
62
- * was (the merge is aborted), so the next merge can proceed.
74
+ * was (the merge is aborted), so the next merge can proceed. A merge git
75
+ * refuses before it starts (a dirty tree) fails typed with git's words.
76
+ * `preferIncoming` resolves conflicting hunks to `branch`'s side
77
+ * (`-X theirs`): the catch-up of a story branch with its epic, where the
78
+ * epic side is authoritative for every path the story does not own.
63
79
  */
64
- readonly merge: (branch: string, message: string) => Effect.Effect<void, FlowError>;
80
+ readonly merge: (branch: string, message: string, options?: MergeOptions) => Effect.Effect<void, FlowError>;
65
81
  }
82
+ export interface MergeOptions {
83
+ readonly preferIncoming?: boolean;
84
+ }
85
+ /**
86
+ * The paths `git status --short` reports, minus the runner's own state under
87
+ * `.llm4ts/`. A rename reports its destination.
88
+ */
89
+ export declare const statusPaths: (status: string) => ReadonlyArray<string>;
66
90
  /**
67
91
  * The runner's own bookkeeping under `workDir/.llm4ts/`: the run trace and
68
92
  * the cost ledger. `commitAll` never stages them — they grow while the run
@@ -1 +1 @@
1
- {"version":3,"file":"GitTool.d.ts","sourceRoot":"","sources":["../src/GitTool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"GitTool.d.ts","sourceRoot":"","sources":["../src/GitTool.ts"],"names":[],"mappings":"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"}
package/dist/GitTool.js CHANGED
@@ -13,6 +13,22 @@ export class Committed extends Schema.TaggedClass()("Committed", {}) {
13
13
  export class NothingToCommit extends Schema.TaggedClass()("NothingToCommit", {}) {
14
14
  }
15
15
  export const CommitResult = Schema.Union([Committed, NothingToCommit]);
16
+ /**
17
+ * The paths `git status --short` reports, minus the runner's own state under
18
+ * `.llm4ts/`. A rename reports its destination.
19
+ */
20
+ export const statusPaths = (status) => status
21
+ .split(/\r?\n/)
22
+ .filter((line) => line.trim().length > 0)
23
+ .map((line) => {
24
+ // `status` trims its output, so the first line may have lost the
25
+ // leading blank of its two-letter code: match the code, not a column.
26
+ const path = (/^[ MADRCTU?!]{1,2}\s+(.+)$/.exec(line)?.[1] ?? "").trim();
27
+ const arrow = path.indexOf(" -> ");
28
+ const target = arrow < 0 ? path : path.slice(arrow + 4);
29
+ return target.replace(/^"|"$/g, "");
30
+ })
31
+ .filter((path) => path.length > 0 && !path.startsWith(".llm4ts/") && path !== ".llm4ts");
16
32
  const nonInteractiveEnvironment = Object.freeze({
17
33
  GIT_TERMINAL_PROMPT: "0",
18
34
  GIT_SSH_COMMAND: "ssh -o BatchMode=yes"
@@ -119,6 +135,7 @@ export const makeGitTool = (process, workDir, events) => {
119
135
  initBare: write("git init --bare", runOrFail(["-c", "init.defaultBranch=main", "init", "--bare"]).pipe(Effect.asVoid)),
120
136
  config: (key, value) => write("git config", runOrFail(["config", key, value]).pipe(Effect.asVoid)),
121
137
  status: read("git status", runOrFail(["status", "--short"])),
138
+ uncommittedFiles: read("git uncommittedFiles", runOrFail(["status", "--porcelain", "--untracked-files=all"]).pipe(Effect.map(statusPaths))),
122
139
  currentBranch: read("git currentBranch", runOrFail(["rev-parse", "--abbrev-ref", "HEAD"])),
123
140
  diff: read("git diff", runOrFail(["diff"])),
124
141
  diffAll: read("git diffAll", runOrFail(["add", "--intent-to-add", "-A"]).pipe(Effect.andThen(runOrFail(["diff"])))),
@@ -149,6 +166,28 @@ export const makeGitTool = (process, workDir, events) => {
149
166
  rollback: (checkpoint) => write("git rollback", runOrFail(["reset", "--hard", checkpoint]).pipe(Effect.asVoid)),
150
167
  addWorktree: (path, branch) => write("git worktree add", runOrFail(["worktree", "add", path, branch]).pipe(Effect.asVoid)),
151
168
  addWorktreeNewBranch: (path, branch, startPoint) => write("git worktree add -b", runOrFail(["worktree", "add", "-b", branch, path, startPoint]).pipe(Effect.asVoid)),
169
+ moveWorktree: (from, to) => write("git worktree move", Effect.gen(function* () {
170
+ // git creates a new worktree's parents but not a moved one's.
171
+ const parent = to.replace(/[\\/]+$/, "").replace(/[\\/][^\\/]*$/, "");
172
+ if (parent.length > 0 && parent !== to) {
173
+ yield* process
174
+ .run(["mkdir", "-p", parent], workDir, nonInteractiveEnvironment)
175
+ .pipe(Effect.mapError((error) => ProcessError.make({ message: `mkdir -p ${parent}`, detail: error.message })));
176
+ }
177
+ yield* runOrFail(["worktree", "move", from, to]);
178
+ })),
179
+ restorePaths: (source, paths) => write("git restorePaths", Effect.gen(function* () {
180
+ for (const path of paths) {
181
+ const known = yield* run(["cat-file", "-e", `${source}:${path}`]);
182
+ if (known.exitCode === 0) {
183
+ yield* runOrFail(["checkout", source, "--", path]);
184
+ }
185
+ else {
186
+ yield* runOrFail(["rm", "-r", "-f", "-q", "--ignore-unmatch", "--", path]);
187
+ yield* runOrFail(["clean", "-f", "-d", "-q", "--", path]);
188
+ }
189
+ }
190
+ })),
152
191
  removeWorktree: (path, force = false) => write("git worktree remove", runOrFail(["worktree", "remove", ...(force ? ["--force"] : []), path]).pipe(Effect.asVoid)),
153
192
  branchExists: (name) => read("git branchExists", Effect.map(verifiedRef(`refs/heads/${name}`), (found) => found !== undefined)),
154
193
  deleteBranch: (name) => write("git branch -D", runOrFail(["branch", "-D", name]).pipe(Effect.asVoid)),
@@ -160,8 +199,15 @@ export const makeGitTool = (process, workDir, events) => {
160
199
  message: `git merge-base --is-ancestor ${commit} ${of}`,
161
200
  detail: problem(result)
162
201
  })))),
163
- merge: (branch, message) => write("git merge", Effect.gen(function* () {
164
- const result = yield* run(["merge", "--no-ff", "-m", message, branch]);
202
+ merge: (branch, message, options = {}) => write("git merge", Effect.gen(function* () {
203
+ const result = yield* run([
204
+ "merge",
205
+ "--no-ff",
206
+ ...(options.preferIncoming === true ? ["-X", "theirs"] : []),
207
+ "-m",
208
+ message,
209
+ branch
210
+ ]);
165
211
  if (result.exitCode === 0) {
166
212
  return;
167
213
  }
@@ -175,7 +221,12 @@ export const makeGitTool = (process, workDir, events) => {
175
221
  // next story; a merge that failed before starting has nothing to
176
222
  // abort and git says so, which is not a second failure.
177
223
  yield* run(["merge", "--abort"]);
178
- return yield* MergeConflict.make({ branch, into, paths });
224
+ return yield* MergeConflict.make({
225
+ branch,
226
+ into,
227
+ paths,
228
+ ...(paths.length === 0 ? { detail: problem(result) } : {})
229
+ });
179
230
  }))
180
231
  };
181
232
  };