@llm4ts/flow 0.7.6 → 0.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.
@@ -0,0 +1,75 @@
1
+ import * as Effect from "effect/Effect";
2
+ import * as Schema from "effect/Schema";
3
+ import type { ProcessExecutorShape } from "@llm4ts/core/ProcessExecutor";
4
+ import { ProcessError, type FlowError } from "./FlowError.ts";
5
+ import type { FlowEventsShape } from "./FlowEvents.ts";
6
+ declare const BasecampProjectRef_base: Schema.Class<BasecampProjectRef, Schema.Struct<{
7
+ readonly project: Schema.String;
8
+ readonly cardTable: Schema.optionalKey<Schema.String>;
9
+ }>, {}>;
10
+ export declare class BasecampProjectRef extends BasecampProjectRef_base {
11
+ }
12
+ declare const Column_base: Schema.Class<Column, Schema.Struct<{
13
+ readonly id: Schema.Int;
14
+ readonly title: Schema.String;
15
+ }>, {}>;
16
+ export declare class Column extends Column_base {
17
+ }
18
+ declare const Card_base: Schema.Class<Card, Schema.Struct<{
19
+ readonly id: Schema.Int;
20
+ readonly title: Schema.String;
21
+ readonly contentHtml: Schema.String;
22
+ readonly column: typeof Column;
23
+ readonly assignees: Schema.$Array<Schema.String>;
24
+ readonly commentsCount: Schema.Int;
25
+ readonly updatedAt: Schema.String;
26
+ readonly url: Schema.String;
27
+ }>, {}>;
28
+ export declare class Card extends Card_base {
29
+ }
30
+ declare const CardComment_base: Schema.Class<CardComment, Schema.Struct<{
31
+ readonly id: Schema.Int;
32
+ readonly author: Schema.String;
33
+ readonly contentHtml: Schema.String;
34
+ readonly createdAt: Schema.String;
35
+ }>, {}>;
36
+ export declare class CardComment extends CardComment_base {
37
+ }
38
+ declare const CardStep_base: Schema.Class<CardStep, Schema.Struct<{
39
+ readonly id: Schema.Int;
40
+ readonly title: Schema.String;
41
+ readonly completed: Schema.Boolean;
42
+ }>, {}>;
43
+ export declare class CardStep extends CardStep_base {
44
+ }
45
+ export declare const cardColumnsArgs: (board: BasecampProjectRef) => ReadonlyArray<string>;
46
+ export declare const cardListArgs: (board: BasecampProjectRef, column: Column) => ReadonlyArray<string>;
47
+ export declare const cardShowArgs: (board: BasecampProjectRef, cardId: number) => ReadonlyArray<string>;
48
+ export declare const cardMoveArgs: (board: BasecampProjectRef, cardId: number, column: Column) => ReadonlyArray<string>;
49
+ export declare const cardCreateArgs: (board: BasecampProjectRef, column: Column, title: string, content: string, assignee?: string) => ReadonlyArray<string>;
50
+ export declare const cardAssignArgs: (board: BasecampProjectRef, cardId: number, assignee: string) => ReadonlyArray<string>;
51
+ export declare const cardCommentsArgs: (cardId: number) => ReadonlyArray<string>;
52
+ export declare const cardCommentCreateArgs: (cardId: number, body: string) => ReadonlyArray<string>;
53
+ export declare const cardStepsArgs: (board: BasecampProjectRef, cardId: number) => ReadonlyArray<string>;
54
+ export declare const cardStepCompleteArgs: (board: BasecampProjectRef, stepId: number) => ReadonlyArray<string>;
55
+ export declare const parseColumns: (json: string) => Effect.Effect<ReadonlyArray<Column>, ProcessError>;
56
+ export declare const parseCard: (json: string) => Effect.Effect<Card, ProcessError>;
57
+ export declare const parseCards: (json: string) => Effect.Effect<ReadonlyArray<Card>, ProcessError>;
58
+ export declare const parseCardComments: (json: string) => Effect.Effect<ReadonlyArray<CardComment>, ProcessError>;
59
+ export declare const parseCardSteps: (json: string) => Effect.Effect<ReadonlyArray<CardStep>, ProcessError>;
60
+ export interface BasecampToolShape {
61
+ readonly listColumns: Effect.Effect<ReadonlyArray<Column>, FlowError>;
62
+ readonly resolveColumn: (title: string) => Effect.Effect<Column, FlowError>;
63
+ readonly listCards: (column: Column) => Effect.Effect<ReadonlyArray<Card>, FlowError>;
64
+ readonly readCard: (cardId: number) => Effect.Effect<Card, FlowError>;
65
+ readonly moveCard: (cardId: number, column: Column) => Effect.Effect<void, FlowError>;
66
+ readonly createCard: (column: Column, title: string, content: string, assignee?: string) => Effect.Effect<Card, FlowError>;
67
+ readonly assignCard: (cardId: number, assignee: string) => Effect.Effect<void, FlowError>;
68
+ readonly readCardComments: (cardId: number) => Effect.Effect<ReadonlyArray<CardComment>, FlowError>;
69
+ readonly writeCardComment: (cardId: number, body: string) => Effect.Effect<void, FlowError>;
70
+ readonly listSteps: (cardId: number) => Effect.Effect<ReadonlyArray<CardStep>, FlowError>;
71
+ readonly completeStep: (stepId: number) => Effect.Effect<void, FlowError>;
72
+ }
73
+ export declare const makeBasecampTool: (process: ProcessExecutorShape, workDir: string, events: FlowEventsShape, board: BasecampProjectRef) => Effect.Effect<BasecampToolShape, never, never>;
74
+ export {};
75
+ //# sourceMappingURL=BasecampTool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BasecampTool.d.ts","sourceRoot":"","sources":["../src/BasecampTool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,222 @@
1
+ import * as Effect from "effect/Effect";
2
+ import * as Ref from "effect/Ref";
3
+ import * as Schema from "effect/Schema";
4
+ import { Capabilities } from "@llm4ts/core/Capability";
5
+ import { ColumnNotFound, ProcessError } from "./FlowError.js";
6
+ import { guarded } from "./CapabilityGuard.js";
7
+ // One tool instance operates one board. `cardTable` is only needed when the
8
+ // project has more than one card table (the CLI resolves the single one).
9
+ export class BasecampProjectRef extends Schema.Class("BasecampProjectRef")({
10
+ project: Schema.String,
11
+ cardTable: Schema.optionalKey(Schema.String)
12
+ }) {
13
+ }
14
+ export class Column extends Schema.Class("Column")({
15
+ id: Schema.Int,
16
+ title: Schema.String
17
+ }) {
18
+ }
19
+ // Basecamp bodies are rich-text HTML, never Markdown — the field names say so.
20
+ export class Card extends Schema.Class("Card")({
21
+ id: Schema.Int,
22
+ title: Schema.String,
23
+ contentHtml: Schema.String,
24
+ column: Column,
25
+ assignees: Schema.Array(Schema.String),
26
+ commentsCount: Schema.Int,
27
+ updatedAt: Schema.String,
28
+ url: Schema.String
29
+ }) {
30
+ }
31
+ export class CardComment extends Schema.Class("CardComment")({
32
+ id: Schema.Int,
33
+ author: Schema.String,
34
+ contentHtml: Schema.String,
35
+ createdAt: Schema.String
36
+ }) {
37
+ }
38
+ export class CardStep extends Schema.Class("CardStep")({
39
+ id: Schema.Int,
40
+ title: Schema.String,
41
+ completed: Schema.Boolean
42
+ }) {
43
+ }
44
+ const projectFlags = (board) => [
45
+ "--project",
46
+ board.project,
47
+ ...(board.cardTable === undefined ? [] : ["--card-table", board.cardTable])
48
+ ];
49
+ const jsonFlags = ["--json", "--quiet"];
50
+ export const cardColumnsArgs = (board) => [
51
+ "cards",
52
+ "columns",
53
+ ...projectFlags(board),
54
+ ...jsonFlags
55
+ ];
56
+ export const cardListArgs = (board, column) => [
57
+ "cards",
58
+ "list",
59
+ "--column",
60
+ String(column.id),
61
+ "--all",
62
+ ...projectFlags(board),
63
+ ...jsonFlags
64
+ ];
65
+ export const cardShowArgs = (board, cardId) => [
66
+ "cards",
67
+ "show",
68
+ String(cardId),
69
+ ...projectFlags(board),
70
+ ...jsonFlags
71
+ ];
72
+ export const cardMoveArgs = (board, cardId, column) => [
73
+ "cards",
74
+ "move",
75
+ String(cardId),
76
+ "--to",
77
+ String(column.id),
78
+ ...projectFlags(board),
79
+ "--quiet"
80
+ ];
81
+ export const cardCreateArgs = (board, column, title, content, assignee) => [
82
+ "cards",
83
+ "create",
84
+ title,
85
+ content,
86
+ "--column",
87
+ String(column.id),
88
+ ...(assignee === undefined ? [] : ["--assignee", assignee]),
89
+ ...projectFlags(board),
90
+ ...jsonFlags
91
+ ];
92
+ export const cardAssignArgs = (board, cardId, assignee) => [
93
+ "cards",
94
+ "update",
95
+ String(cardId),
96
+ "--assignee",
97
+ assignee,
98
+ ...projectFlags(board),
99
+ "--quiet"
100
+ ];
101
+ // Comments hang off the card alone; `basecamp comments` rejects --project.
102
+ export const cardCommentsArgs = (cardId) => [
103
+ "comments",
104
+ "list",
105
+ String(cardId),
106
+ "--all",
107
+ ...jsonFlags
108
+ ];
109
+ export const cardCommentCreateArgs = (cardId, body) => [
110
+ "comments",
111
+ "create",
112
+ String(cardId),
113
+ body,
114
+ "--quiet"
115
+ ];
116
+ export const cardStepsArgs = (board, cardId) => [
117
+ "cards",
118
+ "steps",
119
+ String(cardId),
120
+ ...projectFlags(board),
121
+ ...jsonFlags
122
+ ];
123
+ export const cardStepCompleteArgs = (board, stepId) => [
124
+ "cards",
125
+ "step",
126
+ "complete",
127
+ String(stepId),
128
+ ...projectFlags(board),
129
+ "--quiet"
130
+ ];
131
+ const decodeJson = (operation, schema, json) => Schema.decodeUnknownEffect(schema)(json).pipe(Effect.mapError((error) => ProcessError.make({
132
+ message: operation,
133
+ detail: String(error)
134
+ })));
135
+ const columnStruct = Schema.Struct({
136
+ id: Schema.Int,
137
+ title: Schema.String
138
+ });
139
+ export const parseColumns = (json) => decodeJson("basecamp parse columns", Schema.fromJsonString(Schema.Array(columnStruct)), json).pipe(Effect.map((columns) => columns.map((column) => Column.make(column))));
140
+ const cardStruct = Schema.Struct({
141
+ id: Schema.Int,
142
+ title: Schema.String,
143
+ content: Schema.optionalKey(Schema.NullOr(Schema.String)),
144
+ parent: columnStruct,
145
+ assignees: Schema.optionalKey(Schema.NullOr(Schema.Array(Schema.Struct({ name: Schema.String })))),
146
+ comments_count: Schema.optionalKey(Schema.NullOr(Schema.Int)),
147
+ updated_at: Schema.String,
148
+ app_url: Schema.String
149
+ });
150
+ const toCard = (item) => Card.make({
151
+ id: item.id,
152
+ title: item.title,
153
+ contentHtml: item.content ?? "",
154
+ column: Column.make(item.parent),
155
+ assignees: (item.assignees ?? []).map((assignee) => assignee.name),
156
+ commentsCount: item.comments_count ?? 0,
157
+ updatedAt: item.updated_at,
158
+ url: item.app_url
159
+ });
160
+ export const parseCard = (json) => decodeJson("basecamp parse card", Schema.fromJsonString(cardStruct), json).pipe(Effect.map(toCard));
161
+ export const parseCards = (json) => decodeJson("basecamp parse cards", Schema.fromJsonString(Schema.Array(cardStruct)), json).pipe(Effect.map((items) => items.map(toCard)));
162
+ const commentStruct = Schema.Struct({
163
+ id: Schema.Int,
164
+ content: Schema.String,
165
+ creator: Schema.Struct({ name: Schema.String }),
166
+ created_at: Schema.String
167
+ });
168
+ export const parseCardComments = (json) => decodeJson("basecamp parse comments", Schema.fromJsonString(Schema.Array(commentStruct)), json).pipe(Effect.map((comments) => comments.map((comment) => CardComment.make({
169
+ id: comment.id,
170
+ author: comment.creator.name,
171
+ contentHtml: comment.content,
172
+ createdAt: comment.created_at
173
+ }))));
174
+ const stepStruct = Schema.Struct({
175
+ id: Schema.Int,
176
+ title: Schema.String,
177
+ completed: Schema.Boolean
178
+ });
179
+ // A card without steps prints `null`, not `[]`.
180
+ export const parseCardSteps = (json) => decodeJson("basecamp parse steps", Schema.fromJsonString(Schema.NullOr(Schema.Array(stepStruct))), json).pipe(Effect.map((steps) => (steps ?? []).map((step) => CardStep.make(step))));
181
+ const output = (result) => result.stdout.join("\n").trim();
182
+ export const makeBasecampTool = Effect.fn("@llm4ts/flow/BasecampTool.make")(function* (process, workDir, events, board) {
183
+ const columnsCache = yield* Ref.make(undefined);
184
+ const run = (args) => process.run(["basecamp", ...args], workDir, {}).pipe(Effect.mapError((error) => ProcessError.make({
185
+ message: `basecamp ${args.join(" ")}`,
186
+ detail: error.message
187
+ })), Effect.flatMap((result) => result.exitCode === 0
188
+ ? Effect.succeed(result)
189
+ : Effect.fail(ProcessError.make({
190
+ message: `basecamp ${args.join(" ")}`,
191
+ detail: [...result.stdout, ...result.stderr].join("\n").trim() ||
192
+ `exit code ${result.exitCode}`
193
+ }))));
194
+ const read = (operation, effect) => guarded(Capabilities.BasecampRead, operation, events, effect);
195
+ const write = (operation, effect) => guarded(Capabilities.BasecampWrite, operation, events, effect);
196
+ // The board's columns barely change within a tool's lifetime; fetch once.
197
+ const cachedColumns = Ref.get(columnsCache).pipe(Effect.flatMap((cached) => cached !== undefined
198
+ ? Effect.succeed(cached)
199
+ : run(cardColumnsArgs(board)).pipe(Effect.flatMap((result) => parseColumns(output(result))), Effect.tap((columns) => Ref.set(columnsCache, columns)))));
200
+ return {
201
+ listColumns: read("basecamp cards columns", cachedColumns),
202
+ resolveColumn: (title) => read("basecamp cards columns", cachedColumns.pipe(Effect.flatMap((columns) => {
203
+ const match = columns.find((column) => column.title.toLowerCase() === title.toLowerCase());
204
+ return match !== undefined
205
+ ? Effect.succeed(match)
206
+ : Effect.fail(ColumnNotFound.make({
207
+ title,
208
+ available: columns.map((column) => column.title)
209
+ }));
210
+ }))),
211
+ listCards: (column) => read("basecamp cards list", run(cardListArgs(board, column)).pipe(Effect.flatMap((result) => parseCards(output(result))))),
212
+ readCard: (cardId) => read("basecamp cards show", run(cardShowArgs(board, cardId)).pipe(Effect.flatMap((result) => parseCard(output(result))))),
213
+ moveCard: (cardId, column) => write("basecamp cards move", run(cardMoveArgs(board, cardId, column)).pipe(Effect.asVoid)),
214
+ createCard: (column, title, content, assignee) => write("basecamp cards create", run(cardCreateArgs(board, column, title, content, assignee)).pipe(Effect.flatMap((result) => parseCard(output(result))))),
215
+ assignCard: (cardId, assignee) => write("basecamp cards update", run(cardAssignArgs(board, cardId, assignee)).pipe(Effect.asVoid)),
216
+ readCardComments: (cardId) => read("basecamp comments list", run(cardCommentsArgs(cardId)).pipe(Effect.flatMap((result) => parseCardComments(output(result))))),
217
+ writeCardComment: (cardId, body) => write("basecamp comments create", run(cardCommentCreateArgs(cardId, body)).pipe(Effect.asVoid)),
218
+ listSteps: (cardId) => read("basecamp cards steps", run(cardStepsArgs(board, cardId)).pipe(Effect.flatMap((result) => parseCardSteps(output(result))))),
219
+ completeStep: (stepId) => write("basecamp cards step complete", run(cardStepCompleteArgs(board, stepId)).pipe(Effect.asVoid))
220
+ };
221
+ });
222
+ //# sourceMappingURL=BasecampTool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BasecampTool.js","sourceRoot":"","sources":["../src/BasecampTool.ts"],"names":[],"mappings":"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"}
@@ -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").BudgetExceeded, 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").BudgetExceeded, 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, 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, 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,ghBAa5B,CAAA;AAEF,eAAO,MAAM,gBAAgB,6gBAiC3B,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,0jBAa5B,CAAA;AAEF,eAAO,MAAM,gBAAgB,ujBAiC3B,CAAA"}
@@ -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 | BudgetExceeded, 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 | BudgetExceeded, 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, 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, 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,+gBAa3B,CAAA;AAEF,eAAO,MAAM,cAAc,4gBAqBzB,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,yjBAa3B,CAAA;AAEF,eAAO,MAAM,cAAc,sjBAqBzB,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").BudgetExceeded, 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").BudgetExceeded, 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").BudgetExceeded, 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, 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, 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, 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":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAA;AAExE,OAAO,EACL,cAAc,EACd,YAAY,EACZ,wBAAwB,EAEzB,MAAM,gBAAgB,CAAA;AACvB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACtD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAA;AACjD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAE3D,eAAO,MAAM,SAAS,qDAA6C,CAAA;AACnE,MAAM,MAAM,SAAS,GAAG,OAAO,SAAS,CAAC,IAAI,CAAA;AAE7C,eAAO,MAAM,iBAAiB;;;;EAI5B,CAAA;AACF,MAAM,MAAM,iBAAiB,GAAG,OAAO,iBAAiB,CAAC,IAAI,CAAA;AAE7D,eAAO,MAAM,qBAAqB;;;;;;EAMhC,CAAA;AACF,MAAM,MAAM,qBAAqB,GAAG,OAAO,qBAAqB,CAAC,IAAI,CAAA;AAErE,eAAO,MAAM,kBAAkB;;;;;EAK7B,CAAA;AACF,MAAM,MAAM,kBAAkB,GAAG,OAAO,kBAAkB,CAAC,IAAI,CAAA;AAE/D,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;IAI3B,CAAA;AACF,MAAM,MAAM,gBAAgB,GAAG,OAAO,gBAAgB,CAAC,IAAI,CAAA;AA2B3D;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,wBAAwB,GAAI,QAAQ,OAAO,KAAG,OAmB1D,CAAA;AAED,qEAAqE;AACrE,eAAO,MAAM,oBAAoB,GAC/B,KAAK,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,KACrC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAC6D,CAAA;AAE/F,4EAA4E;AAC5E,eAAO,MAAM,kBAAkB,GAAI,QAAQ,OAAO,KAAG,OAGzC,CAAA;AAEZ,eAAO,MAAM,YAAY;mBACR,MAAM,UAAU,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,KAAG,iBAAiB;wBAM1E,MAAM,MACT,MAAM,OACL,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,OAChC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,KACpC,qBAAqB;qBAEf,MAAM,OACR,MAAM,UACH,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,KACvC,kBAAkB;EACrB,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;AAEF,qBAAa,WAAY,SAAQ,gBAQ/B;CAAG;AAEL,eAAO,MAAM,kBAAkB,IAAI,CAAA;;;;;;;;;;;;;;;;;;;AAEnC,qBAAa,kBAAmB,SAAQ,uBAEtC;CAAG;;;;;;;;;;;;;;;;;;;AAEL,qBAAa,qBAAsB,SAAQ,0BAK1C;CAAG;;;;;;;AAEJ,qBAAa,oBAAqB,SAAQ,yBAKxC;CAAG;AAEL,eAAO,MAAM,aAAa,+GAIxB,CAAA;AACF,MAAM,MAAM,aAAa,GAAG,OAAO,aAAa,CAAC,IAAI,CAAA;AAsGrD,eAAO,MAAM,gBAAgB,GAC3B,UAAU,aAAa,CAAC,gBAAgB,CAAC,EACzC,QAAQ,aAAa,CAAC,gBAAgB,CAAC,EACvC,QAAQ,gBAAgB,KACvB,aAAa,CAAC,aAAa,CA+C7B,CAAA;;;;;;;;;;;;;;;;;;;AAED,qBAAa,gBAAiB,SAAQ,qBAEpC;CAAG;;;;;AAEL,qBAAa,eAAgB,SAAQ,oBAGnC;CAAG;AAEL,eAAO,MAAM,QAAQ,0EAAoD,CAAA;AACzE,MAAM,MAAM,QAAQ,GAAG,OAAO,QAAQ,CAAC,IAAI,CAAA;AAI3C,eAAO,MAAM,iBAAiB,6iBAkB5B,CAAA;AAEF,eAAO,MAAM,gBAAgB,8hBA2C3B,CAAA;AAEF,eAAO,MAAM,iBAAiB,unBA6D5B,CAAA"}
package/dist/Flow.d.ts CHANGED
@@ -38,5 +38,5 @@ export interface ImplementPlanOptions {
38
38
  */
39
39
  readonly noopTaskPolicy?: "fail" | "complete";
40
40
  }
41
- 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").BudgetExceeded, never>;
41
+ 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, never>;
42
42
  //# 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,EAAsC,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAC1F,OAAO,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAC3C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEtD,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;CAC9C;AAOD,eAAO,MAAM,iBAAiB,2gBA4G5B,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,EAAsC,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAC1F,OAAO,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAC3C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEtD,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;CAC9C;AAOD,eAAO,MAAM,iBAAiB,qjBA4G5B,CAAA"}
@@ -67,12 +67,19 @@ export declare class FlowLlmError extends FlowLlmError_base {
67
67
  static readonly from: (cause?: typeof LlmError.Type) => FlowLlmError;
68
68
  }
69
69
  declare const FlowCapabilityDenied_base: Schema.Class<FlowCapabilityDenied, Schema.TaggedStruct<"CapabilityDenied", {
70
- readonly capability: Schema.Union<readonly [typeof import("@llm4ts/core/Capability").GitRead, typeof import("@llm4ts/core/Capability").GitWrite, typeof import("@llm4ts/core/Capability").GitPush, typeof import("@llm4ts/core/Capability").GhRead, typeof import("@llm4ts/core/Capability").GhWrite, typeof import("@llm4ts/core/Capability").AdoRead, typeof import("@llm4ts/core/Capability").AdoWrite, typeof import("@llm4ts/core/Capability").Exec, typeof import("@llm4ts/core/Capability").UseCoder, typeof import("@llm4ts/core/Capability").UseReasoning, typeof import("@llm4ts/core/Capability").Declassify]>;
70
+ readonly capability: Schema.Union<readonly [typeof import("@llm4ts/core/Capability").GitRead, typeof import("@llm4ts/core/Capability").GitWrite, typeof import("@llm4ts/core/Capability").GitPush, typeof import("@llm4ts/core/Capability").GhRead, typeof import("@llm4ts/core/Capability").GhWrite, typeof import("@llm4ts/core/Capability").AdoRead, typeof import("@llm4ts/core/Capability").AdoWrite, typeof import("@llm4ts/core/Capability").BasecampRead, typeof import("@llm4ts/core/Capability").BasecampWrite, typeof import("@llm4ts/core/Capability").Exec, typeof import("@llm4ts/core/Capability").UseCoder, typeof import("@llm4ts/core/Capability").UseReasoning, typeof import("@llm4ts/core/Capability").Declassify]>;
71
71
  readonly operation: Schema.String;
72
72
  }>, import("effect/Cause").YieldableError>;
73
73
  export declare class FlowCapabilityDenied extends FlowCapabilityDenied_base {
74
74
  get message(): string;
75
75
  }
76
+ declare const ColumnNotFound_base: Schema.Class<ColumnNotFound, Schema.TaggedStruct<"ColumnNotFound", {
77
+ readonly title: Schema.String;
78
+ readonly available: Schema.$Array<Schema.String>;
79
+ }>, import("effect/Cause").YieldableError>;
80
+ export declare class ColumnNotFound extends ColumnNotFound_base {
81
+ get message(): string;
82
+ }
76
83
  declare const BudgetExceeded_base: Schema.Class<BudgetExceeded, Schema.TaggedStruct<"BudgetExceeded", {
77
84
  readonly metric: Schema.Literals<readonly ["tokens", "costUsd"]>;
78
85
  readonly limit: Schema.Number;
@@ -81,7 +88,7 @@ declare const BudgetExceeded_base: Schema.Class<BudgetExceeded, Schema.TaggedStr
81
88
  export declare class BudgetExceeded extends BudgetExceeded_base {
82
89
  get message(): string;
83
90
  }
84
- 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 BudgetExceeded]>;
91
+ 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]>;
85
92
  export type FlowError = typeof FlowError.Type;
86
93
  export {};
87
94
  //# 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,uBAMvC;CAAG;;;;;;;AAEJ,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,mBAIlC;IACA,IAAI,OAAO,IAAI,MAAM,CAEpB;CACF;AAED,eAAO,MAAM,SAAS,4SAYpB,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,uBAMvC;CAAG;;;;;;;AAEJ,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,eAAO,MAAM,SAAS,mUAapB,CAAA;AACF,MAAM,MAAM,SAAS,GAAG,OAAO,SAAS,CAAC,IAAI,CAAA"}
package/dist/FlowError.js CHANGED
@@ -84,6 +84,14 @@ export class FlowCapabilityDenied extends Schema.TaggedErrorClass()("CapabilityD
84
84
  return `capability ${capability} denied for ${this.operation}`;
85
85
  }
86
86
  }
87
+ export class ColumnNotFound extends Schema.TaggedErrorClass()("ColumnNotFound", {
88
+ title: Schema.String,
89
+ available: Schema.Array(Schema.String)
90
+ }) {
91
+ get message() {
92
+ return `column "${this.title}" not found on the card table; available: ${this.available.join(", ")}`;
93
+ }
94
+ }
87
95
  export class BudgetExceeded extends Schema.TaggedErrorClass()("BudgetExceeded", {
88
96
  metric: Schema.Literals(["tokens", "costUsd"]),
89
97
  limit: Schema.Number,
@@ -104,6 +112,7 @@ export const FlowError = Schema.Union([
104
112
  ProcessError,
105
113
  FlowLlmError,
106
114
  FlowCapabilityDenied,
115
+ ColumnNotFound,
107
116
  BudgetExceeded
108
117
  ]);
109
118
  //# sourceMappingURL=FlowError.js.map
@@ -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":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAE9C,MAAM,OAAO,gBAAiB,SAAQ,MAAM,CAAC,gBAAgB,EAAoB,CAAC,aAAa,EAAE;IAC/F,OAAO,EAAE,MAAM,CAAC,MAAM;IACtB,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;CAC3C,CAAC;CAAG;AAEL,MAAM,OAAO,cAAe,SAAQ,MAAM,CAAC,gBAAgB,EAAkB,CAAC,WAAW,EAAE;IACzF,OAAO,EAAE,MAAM,CAAC,MAAM;CACvB,CAAC;CAAG;AAEL,MAAM,OAAO,wBAAyB,SAAQ,MAAM,CAAC,gBAAgB,EAA4B,CAC/F,0BAA0B,EAC1B;IACE,IAAI,EAAE,MAAM,CAAC,MAAM;IACnB,QAAQ,EAAE,MAAM,CAAC,GAAG;IACpB,MAAM,EAAE,MAAM,CAAC,GAAG;CACnB,CACF;IACC,IAAI,OAAO;QACT,OAAO,iCAAiC,IAAI,CAAC,IAAI,cAAc,IAAI,CAAC,QAAQ,cAAc,IAAI,CAAC,MAAM,EAAE,CAAA;IACzG,CAAC;CACF;AAED,MAAM,OAAO,kBAAmB,SAAQ,MAAM,CAAC,gBAAgB,EAAsB,CACnF,eAAe,EACf;IACE,IAAI,EAAE,MAAM,CAAC,MAAM;IACnB,OAAO,EAAE,MAAM,CAAC,MAAM;CACvB,CACF;CAAG;AAEJ,MAAM,OAAO,mBAAoB,SAAQ,MAAM,CAAC,gBAAgB,EAAuB,CACrF,gBAAgB,EAChB;IACE,SAAS,EAAE,MAAM,CAAC,MAAM;IACxB,KAAK,EAAE,MAAM,CAAC,GAAG;IACjB,MAAM,EAAE,MAAM,CAAC,GAAG;IAClB,IAAI,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC;CACxC,CACF;IACC,IAAI,OAAO;QACT,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,GAAG,CAAA;QAC9D,OAAO,GAAG,IAAI,CAAC,SAAS,mBAAmB,IAAI,CAAC,KAAK,cAAc,IAAI,CAAC,MAAM,GAAG,KAAK,EAAE,CAAA;IAC1F,CAAC;CACF;AAED,MAAM,OAAO,gBAAiB,SAAQ,MAAM,CAAC,gBAAgB,EAAoB,CAAC,aAAa,EAAE;IAC/F,SAAS,EAAE,MAAM,CAAC,MAAM;IACxB,IAAI,EAAE,MAAM,CAAC,MAAM;IACnB,OAAO,EAAE,MAAM,CAAC,MAAM;IACtB,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;CAC3C,CAAC;CAAG;AAEL,MAAM,OAAO,WAAY,SAAQ,MAAM,CAAC,gBAAgB,EAAe,CAAC,SAAS,EAAE;IACjF,OAAO,EAAE,MAAM,CAAC,MAAM;CACvB,CAAC;CAAG;AAEL,MAAM,OAAO,YAAa,SAAQ,MAAM,CAAC,gBAAgB,EAAgB,CAAC,SAAS,EAAE;IACnF,OAAO,EAAE,MAAM,CAAC,MAAM;IACtB,MAAM,EAAE,MAAM,CAAC,MAAM;CACtB,CAAC;CAAG;AAEL;;;;GAIG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,KAAc,EAAU,EAAE;IAC1D,MAAM,IAAI,GAAG,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IAC/F,MAAM,MAAM,GACV,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,QAAQ,IAAI,KAAK;QACjB,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ;QAC9B,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE;QACrB,CAAC,CAAC,EAAE,CAAA;IACR,OAAO,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,MAAM,EAAE,CAAA;AACnF,CAAC,CAAA;AAED,MAAM,OAAO,YAAa,SAAQ,MAAM,CAAC,gBAAgB,EAAgB,CAAC,KAAK,EAAE;IAC/E,OAAO,EAAE,MAAM,CAAC,MAAM;IACtB,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC;CACpC,CAAC;IACA,MAAM,CAAU,IAAI,GAAG,CAAC,KAA4B,EAAgB,EAAE,CACpE,YAAY,CAAC,IAAI,CAAC;QAChB,OAAO,EAAE,KAAK,EAAE,OAAO,IAAI,oBAAoB;QAC/C,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;KAC1C,CAAC,CAAA;;AAGN,MAAM,OAAO,oBAAqB,SAAQ,MAAM,CAAC,gBAAgB,EAAwB,CACvF,kBAAkB,EAClB;IACE,UAAU,EAAE,UAAU;IACtB,SAAS,EAAE,MAAM,CAAC,MAAM;CACzB,CACF;IACC,IAAI,OAAO;QACT,MAAM,UAAU,GACd,IAAI,CAAC,UAAU,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,UAAU,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAA;QAC7F,OAAO,cAAc,UAAU,eAAe,IAAI,CAAC,SAAS,EAAE,CAAA;IAChE,CAAC;CACF;AAED,MAAM,OAAO,cAAe,SAAQ,MAAM,CAAC,gBAAgB,EAAkB,CAAC,gBAAgB,EAAE;IAC9F,KAAK,EAAE,MAAM,CAAC,MAAM;IACpB,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;CACvC,CAAC;IACA,IAAI,OAAO;QACT,OAAO,WAAW,IAAI,CAAC,KAAK,6CAA6C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAA;IACtG,CAAC;CACF;AAED,MAAM,OAAO,cAAe,SAAQ,MAAM,CAAC,gBAAgB,EAAkB,CAAC,gBAAgB,EAAE;IAC9F,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAC9C,KAAK,EAAE,MAAM,CAAC,MAAM;IACpB,MAAM,EAAE,MAAM,CAAC,MAAM;CACtB,CAAC;IACA,IAAI,OAAO;QACT,OAAO,GAAG,IAAI,CAAC,MAAM,2BAA2B,IAAI,CAAC,KAAK,YAAY,IAAI,CAAC,MAAM,EAAE,CAAA;IACrF,CAAC;CACF;AAED,MAAM,CAAC,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC;IACpC,gBAAgB;IAChB,cAAc;IACd,wBAAwB;IACxB,kBAAkB;IAClB,mBAAmB;IACnB,gBAAgB;IAChB,WAAW;IACX,YAAY;IACZ,YAAY;IACZ,oBAAoB;IACpB,cAAc;IACd,cAAc;CACf,CAAC,CAAA"}
@@ -26,7 +26,7 @@ export interface PlanStoreShape {
26
26
  readonly recoverOrCreate: <E, R>(path: string, create: Effect.Effect<Plan, E, R>) => Effect.Effect<Plan, E | PersistenceError | PlanParseError, R>;
27
27
  }
28
28
  export declare const makePlanStore: (files: PlainFileStoreShape) => PlanStoreShape;
29
- export declare const saveVersioned: <A, E, RD, RE>(files: PlainFileStoreShape, path: string, schemaVersion: number, schema: Schema.ConstraintCodec<A, E, RD, RE>, value: A) => Effect.Effect<void, 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").BudgetExceeded, RE>;
30
- export declare const loadVersioned: <A, E, RD, RE>(files: PlainFileStoreShape, path: string, expectedVersion: number, schema: Schema.ConstraintCodec<A, E, RD, RE>) => Effect.Effect<A | undefined, 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").BudgetExceeded, RD>;
29
+ export declare const saveVersioned: <A, E, RD, RE>(files: PlainFileStoreShape, path: string, schemaVersion: number, schema: Schema.ConstraintCodec<A, E, RD, RE>, value: A) => Effect.Effect<void, 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, RE>;
30
+ export declare const loadVersioned: <A, E, RD, RE>(files: PlainFileStoreShape, path: string, expectedVersion: number, schema: Schema.ConstraintCodec<A, E, RD, RE>) => Effect.Effect<A | undefined, 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, RD>;
31
31
  export {};
32
32
  //# sourceMappingURL=Persistence.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Persistence.d.ts","sourceRoot":"","sources":["../src/Persistence.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAA;AACzC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAA;AAG3F,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAErC,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,SAAS,EAAE,gBAAgB,CAAC,CAAA;IACpF,QAAQ,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAA;IAC/F,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAA;IAC1F,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAA;IACxE,QAAQ,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAA;CAC/E;;AAED,qBAAa,cAAe,SAAQ,mBAEnC;CAAG;AAoBJ,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,KAAK,EAAE,mBAAmB,CAAA;IACnC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAA;IAC/D,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;CACnF;AAED,eAAO,MAAM,wBAAwB,GACnC,UAAS,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAM,KAC7C,MAAM,CAAC,MAAM,CAAC,oBAAoB,CAoClC,CAAA;AAEH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAA;IAClF,QAAQ,CAAC,IAAI,EAAE,CACb,IAAI,EAAE,MAAM,KACT,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,SAAS,EAAE,gBAAgB,GAAG,cAAc,CAAC,CAAA;IACvE,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAA;IACxE,QAAQ,CAAC,eAAe,EAAE,CAAC,CAAC,EAAE,CAAC,EAC7B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,KAC9B,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,gBAAgB,GAAG,cAAc,EAAE,CAAC,CAAC,CAAA;CACnE;AAED,eAAO,MAAM,aAAa,GAAI,OAAO,mBAAmB,KAAG,cAyB1D,CAAA;AAYD,eAAO,MAAM,aAAa,GACxB,CAAC,EACD,CAAC,EACD,EAAE,EACF,EAAE,6iBAmBF,CAAA;AAEF,eAAO,MAAM,aAAa,GACxB,CAAC,EACD,CAAC,EACD,EAAE,EACF,EAAE,8iBAkCF,CAAA"}
1
+ {"version":3,"file":"Persistence.d.ts","sourceRoot":"","sources":["../src/Persistence.ts"],"names":[],"mappings":"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"}
@@ -3,5 +3,5 @@ import { type FlowEventsShape } from "./FlowEvents.ts";
3
3
  import type { Plan, Task } from "./Plan.ts";
4
4
  import type { PlanStoreShape } from "./Persistence.ts";
5
5
  export declare const stage: <A, E, R>(events: FlowEventsShape, name: string, effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>;
6
- export declare const implementTaskLoop: <E, R>(store: PlanStoreShape, events: FlowEventsShape, planPath: string, plan: Plan, perTask: (task: Task, planSoFar: Plan) => Effect.Effect<void, E, R>) => 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 | import("./FlowError.ts").FlowAborted | import("./FlowError.ts").ProcessError | import("./FlowError.ts").FlowLlmError | import("./FlowError.ts").FlowCapabilityDenied | import("./FlowError.ts").BudgetExceeded | E, R>;
6
+ export declare const implementTaskLoop: <E, R>(store: PlanStoreShape, events: FlowEventsShape, planPath: string, plan: Plan, perTask: (task: Task, planSoFar: Plan) => Effect.Effect<void, E, R>) => 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 | import("./FlowError.ts").FlowAborted | import("./FlowError.ts").ProcessError | import("./FlowError.ts").FlowLlmError | import("./FlowError.ts").FlowCapabilityDenied | import("./FlowError.ts").ColumnNotFound | import("./FlowError.ts").BudgetExceeded | E, R>;
7
7
  //# sourceMappingURL=PlanExecution.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"PlanExecution.d.ts","sourceRoot":"","sources":["../src/PlanExecution.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAA6C,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAEjG,OAAO,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAC3C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAItD,eAAO,MAAM,KAAK,GAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAC3B,QAAQ,eAAe,EACvB,MAAM,MAAM,EACZ,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAC7B,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAYrB,CAAA;AAEH,eAAO,MAAM,iBAAiB,GACjB,CAAC,EAAE,CAAC,gGAKG,IAAI,aAAa,IAAI,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,kgBAYtE,CAAA"}
1
+ {"version":3,"file":"PlanExecution.d.ts","sourceRoot":"","sources":["../src/PlanExecution.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAA6C,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAEjG,OAAO,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAC3C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAItD,eAAO,MAAM,KAAK,GAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAC3B,QAAQ,eAAe,EACvB,MAAM,MAAM,EACZ,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAC7B,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAYrB,CAAA;AAEH,eAAO,MAAM,iBAAiB,GACjB,CAAC,EAAE,CAAC,gGAKG,IAAI,aAAa,IAAI,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,4iBAYtE,CAAA"}
package/dist/Replay.d.ts CHANGED
@@ -22,8 +22,8 @@ export declare class ReplayFailure extends ReplayFailure_base {
22
22
  export declare const ReplayTurn: Schema.Union<readonly [typeof ReplaySuccess, typeof ReplayFailure]>;
23
23
  export type ReplayTurn = typeof ReplayTurn.Type;
24
24
  export declare const segmentReplayTurns: (lines: ReadonlyArray<TraceLine>) => ReadonlyArray<ReplayTurn>;
25
- export declare const readTrace: (files: PlainFileStoreShape, path: string) => Effect.Effect<readonly TraceLine[], 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").BudgetExceeded, never>;
25
+ export declare const readTrace: (files: PlainFileStoreShape, path: string) => Effect.Effect<readonly TraceLine[], 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, never>;
26
26
  export declare const makeReplayConnector: (turns: readonly (ReplaySuccess | ReplayFailure)[]) => Effect.Effect<LlmServiceShape, never, never>;
27
- export declare const replayFromTrace: (files: PlainFileStoreShape, path: string) => Effect.Effect<LlmServiceShape, 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").BudgetExceeded, never>;
27
+ export declare const replayFromTrace: (files: PlainFileStoreShape, path: string) => Effect.Effect<LlmServiceShape, 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, never>;
28
28
  export {};
29
29
  //# sourceMappingURL=Replay.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Replay.d.ts","sourceRoot":"","sources":["../src/Replay.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAGvC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAC9D,OAAO,EAAY,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAE1D,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAkB,MAAM,gBAAgB,CAAA;AACzF,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAC7C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAE3D,eAAO,MAAM,kBAAkB,IAAI,CAAA;;;;;;AAEnC,qBAAa,aAAc,SAAQ,kBAIjC;CAAG;;;;;AAEL,qBAAa,aAAc,SAAQ,kBAGjC;CAAG;AAEL,eAAO,MAAM,UAAU,qEAA+C,CAAA;AACtE,MAAM,MAAM,UAAU,GAAG,OAAO,UAAU,CAAC,IAAI,CAAA;AA8C/C,eAAO,MAAM,kBAAkB,GAAI,OAAO,aAAa,CAAC,SAAS,CAAC,KAAG,aAAa,CAAC,UAAU,CAgE5F,CAAA;AAID,eAAO,MAAM,SAAS,2gBAqCpB,CAAA;AAEF,eAAO,MAAM,mBAAmB,qGA6E9B,CAAA;AAEF,eAAO,MAAM,eAAe,sgBAM1B,CAAA"}
1
+ {"version":3,"file":"Replay.d.ts","sourceRoot":"","sources":["../src/Replay.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAGvC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAC9D,OAAO,EAAY,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAE1D,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAkB,MAAM,gBAAgB,CAAA;AACzF,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAC7C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAE3D,eAAO,MAAM,kBAAkB,IAAI,CAAA;;;;;;AAEnC,qBAAa,aAAc,SAAQ,kBAIjC;CAAG;;;;;AAEL,qBAAa,aAAc,SAAQ,kBAGjC;CAAG;AAEL,eAAO,MAAM,UAAU,qEAA+C,CAAA;AACtE,MAAM,MAAM,UAAU,GAAG,OAAO,UAAU,CAAC,IAAI,CAAA;AA8C/C,eAAO,MAAM,kBAAkB,GAAI,OAAO,aAAa,CAAC,SAAS,CAAC,KAAG,aAAa,CAAC,UAAU,CAgE5F,CAAA;AAID,eAAO,MAAM,SAAS,qjBAqCpB,CAAA;AAEF,eAAO,MAAM,mBAAmB,qGA6E9B,CAAA;AAEF,eAAO,MAAM,eAAe,gjBAM1B,CAAA"}
package/dist/Review.d.ts CHANGED
@@ -51,7 +51,7 @@ export declare const llmDriven: (picker: LlmServiceShape) => ReviewerSelector;
51
51
  export declare const reviewPrompt: (task: string, diff: string) => string;
52
52
  export declare const fixPrompt: (result: ReviewResult) => string;
53
53
  export declare const mergeReviewResults: (results: ReadonlyArray<ReviewResult>) => ReviewResult;
54
- export declare const lintCommand: (process: ProcessExecutorShape, events: FlowEventsShape, command: readonly string[], workDir: string) => Effect.Effect<ReviewResult, 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 | ProcessError | FlowLlmError | import("./FlowError.ts").FlowCapabilityDenied | import("./FlowError.ts").BudgetExceeded, never>;
54
+ export declare const lintCommand: (process: ProcessExecutorShape, events: FlowEventsShape, command: readonly string[], workDir: string) => Effect.Effect<ReviewResult, 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 | ProcessError | FlowLlmError | import("./FlowError.ts").FlowCapabilityDenied | import("./FlowError.ts").ColumnNotFound | import("./FlowError.ts").BudgetExceeded, never>;
55
55
  export interface ReviewAndFixOptions {
56
56
  readonly reviewers: ReadonlyArray<Reviewer>;
57
57
  readonly reviewerService: LlmServiceShape;
@@ -66,6 +66,6 @@ export interface ReviewAndFixOptions {
66
66
  readonly parallelism?: number;
67
67
  readonly format?: Effect.Effect<void, FlowError>;
68
68
  }
69
- export declare const reviewAndFixLoop: (options: ReviewAndFixOptions) => Effect.Effect<ReviewResult, 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 | ProcessError | FlowLlmError | import("./FlowError.ts").FlowCapabilityDenied | import("./FlowError.ts").BudgetExceeded, never>;
69
+ export declare const reviewAndFixLoop: (options: ReviewAndFixOptions) => Effect.Effect<ReviewResult, 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 | ProcessError | FlowLlmError | import("./FlowError.ts").FlowCapabilityDenied | import("./FlowError.ts").ColumnNotFound | import("./FlowError.ts").BudgetExceeded, never>;
70
70
  export {};
71
71
  //# sourceMappingURL=Review.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Review.d.ts","sourceRoot":"","sources":["../src/Review.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Review.d.ts","sourceRoot":"","sources":["../src/Review.ts"],"names":[],"mappings":"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"}
@@ -2,5 +2,5 @@ import * as Effect from "effect/Effect";
2
2
  import { PersistenceError } from "./FlowError.ts";
3
3
  import type { PlainFileStoreShape } from "./Persistence.ts";
4
4
  import { ReviewResult } from "./Review.ts";
5
- export declare const cachedReview: <R>(files: PlainFileStoreShape, path: string, fingerprint: string, evaluate: Effect.Effect<ReviewResult, 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").BudgetExceeded, R>) => Effect.Effect<ReviewResult, 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").BudgetExceeded, R>;
5
+ export declare const cachedReview: <R>(files: PlainFileStoreShape, path: string, fingerprint: string, evaluate: Effect.Effect<ReviewResult, 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, R>) => Effect.Effect<ReviewResult, 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, R>;
6
6
  //# sourceMappingURL=ReviewCache.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ReviewCache.d.ts","sourceRoot":"","sources":["../src/ReviewCache.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,OAAO,EAAE,gBAAgB,EAAkB,MAAM,gBAAgB,CAAA;AACjE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAa1C,eAAO,MAAM,YAAY,GAA2D,CAAC,giCA2BnF,CAAA"}
1
+ {"version":3,"file":"ReviewCache.d.ts","sourceRoot":"","sources":["../src/ReviewCache.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,OAAO,EAAE,gBAAgB,EAAkB,MAAM,gBAAgB,CAAA;AACjE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAa1C,eAAO,MAAM,YAAY,GAA2D,CAAC,onCA2BnF,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@llm4ts/flow",
3
- "version": "0.7.6",
3
+ "version": "0.8.0",
4
4
  "description": "Effect-native LLM workflow, persistence, review, and repository automation",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -16,6 +16,7 @@
16
16
  "./package.json": "./package.json",
17
17
  "./Activity": "./dist/Activity.js",
18
18
  "./AzureDevOpsTool": "./dist/AzureDevOpsTool.js",
19
+ "./BasecampTool": "./dist/BasecampTool.js",
19
20
  "./Bench": "./dist/Bench.js",
20
21
  "./BenchReport": "./dist/BenchReport.js",
21
22
  "./CapabilityGuard": "./dist/CapabilityGuard.js",
@@ -80,7 +81,7 @@
80
81
  "typescript"
81
82
  ],
82
83
  "dependencies": {
83
- "@llm4ts/core": "0.7.6"
84
+ "@llm4ts/core": "0.8.0"
84
85
  },
85
86
  "peerDependencies": {
86
87
  "effect": "^4.0.0-beta.102"
@@ -0,0 +1,413 @@
1
+ import * as Effect from "effect/Effect"
2
+ import * as Ref from "effect/Ref"
3
+ import * as Schema from "effect/Schema"
4
+ import { Capabilities } from "@llm4ts/core/Capability"
5
+ import type { ProcessExecutorShape, ProcessResult } from "@llm4ts/core/ProcessExecutor"
6
+ import { ColumnNotFound, ProcessError, type FlowError } from "./FlowError.ts"
7
+ import type { FlowEventsShape } from "./FlowEvents.ts"
8
+ import { guarded } from "./CapabilityGuard.ts"
9
+
10
+ // One tool instance operates one board. `cardTable` is only needed when the
11
+ // project has more than one card table (the CLI resolves the single one).
12
+ export class BasecampProjectRef extends Schema.Class<BasecampProjectRef>("BasecampProjectRef")({
13
+ project: Schema.String,
14
+ cardTable: Schema.optionalKey(Schema.String)
15
+ }) {}
16
+
17
+ export class Column extends Schema.Class<Column>("Column")({
18
+ id: Schema.Int,
19
+ title: Schema.String
20
+ }) {}
21
+
22
+ // Basecamp bodies are rich-text HTML, never Markdown — the field names say so.
23
+ export class Card extends Schema.Class<Card>("Card")({
24
+ id: Schema.Int,
25
+ title: Schema.String,
26
+ contentHtml: Schema.String,
27
+ column: Column,
28
+ assignees: Schema.Array(Schema.String),
29
+ commentsCount: Schema.Int,
30
+ updatedAt: Schema.String,
31
+ url: Schema.String
32
+ }) {}
33
+
34
+ export class CardComment extends Schema.Class<CardComment>("CardComment")({
35
+ id: Schema.Int,
36
+ author: Schema.String,
37
+ contentHtml: Schema.String,
38
+ createdAt: Schema.String
39
+ }) {}
40
+
41
+ export class CardStep extends Schema.Class<CardStep>("CardStep")({
42
+ id: Schema.Int,
43
+ title: Schema.String,
44
+ completed: Schema.Boolean
45
+ }) {}
46
+
47
+ const projectFlags = (board: BasecampProjectRef): ReadonlyArray<string> => [
48
+ "--project",
49
+ board.project,
50
+ ...(board.cardTable === undefined ? [] : ["--card-table", board.cardTable])
51
+ ]
52
+
53
+ const jsonFlags = ["--json", "--quiet"]
54
+
55
+ export const cardColumnsArgs = (board: BasecampProjectRef): ReadonlyArray<string> => [
56
+ "cards",
57
+ "columns",
58
+ ...projectFlags(board),
59
+ ...jsonFlags
60
+ ]
61
+
62
+ export const cardListArgs = (board: BasecampProjectRef, column: Column): ReadonlyArray<string> => [
63
+ "cards",
64
+ "list",
65
+ "--column",
66
+ String(column.id),
67
+ "--all",
68
+ ...projectFlags(board),
69
+ ...jsonFlags
70
+ ]
71
+
72
+ export const cardShowArgs = (board: BasecampProjectRef, cardId: number): ReadonlyArray<string> => [
73
+ "cards",
74
+ "show",
75
+ String(cardId),
76
+ ...projectFlags(board),
77
+ ...jsonFlags
78
+ ]
79
+
80
+ export const cardMoveArgs = (
81
+ board: BasecampProjectRef,
82
+ cardId: number,
83
+ column: Column
84
+ ): ReadonlyArray<string> => [
85
+ "cards",
86
+ "move",
87
+ String(cardId),
88
+ "--to",
89
+ String(column.id),
90
+ ...projectFlags(board),
91
+ "--quiet"
92
+ ]
93
+
94
+ export const cardCreateArgs = (
95
+ board: BasecampProjectRef,
96
+ column: Column,
97
+ title: string,
98
+ content: string,
99
+ assignee?: string
100
+ ): ReadonlyArray<string> => [
101
+ "cards",
102
+ "create",
103
+ title,
104
+ content,
105
+ "--column",
106
+ String(column.id),
107
+ ...(assignee === undefined ? [] : ["--assignee", assignee]),
108
+ ...projectFlags(board),
109
+ ...jsonFlags
110
+ ]
111
+
112
+ export const cardAssignArgs = (
113
+ board: BasecampProjectRef,
114
+ cardId: number,
115
+ assignee: string
116
+ ): ReadonlyArray<string> => [
117
+ "cards",
118
+ "update",
119
+ String(cardId),
120
+ "--assignee",
121
+ assignee,
122
+ ...projectFlags(board),
123
+ "--quiet"
124
+ ]
125
+
126
+ // Comments hang off the card alone; `basecamp comments` rejects --project.
127
+ export const cardCommentsArgs = (cardId: number): ReadonlyArray<string> => [
128
+ "comments",
129
+ "list",
130
+ String(cardId),
131
+ "--all",
132
+ ...jsonFlags
133
+ ]
134
+
135
+ export const cardCommentCreateArgs = (cardId: number, body: string): ReadonlyArray<string> => [
136
+ "comments",
137
+ "create",
138
+ String(cardId),
139
+ body,
140
+ "--quiet"
141
+ ]
142
+
143
+ export const cardStepsArgs = (board: BasecampProjectRef, cardId: number): ReadonlyArray<string> => [
144
+ "cards",
145
+ "steps",
146
+ String(cardId),
147
+ ...projectFlags(board),
148
+ ...jsonFlags
149
+ ]
150
+
151
+ export const cardStepCompleteArgs = (
152
+ board: BasecampProjectRef,
153
+ stepId: number
154
+ ): ReadonlyArray<string> => [
155
+ "cards",
156
+ "step",
157
+ "complete",
158
+ String(stepId),
159
+ ...projectFlags(board),
160
+ "--quiet"
161
+ ]
162
+
163
+ const decodeJson = <A, S extends Schema.Codec<A, string>>(
164
+ operation: string,
165
+ schema: S,
166
+ json: string
167
+ ): Effect.Effect<S["Type"], ProcessError> =>
168
+ Schema.decodeUnknownEffect(schema)(json).pipe(
169
+ Effect.mapError((error) =>
170
+ ProcessError.make({
171
+ message: operation,
172
+ detail: String(error)
173
+ })
174
+ )
175
+ )
176
+
177
+ const columnStruct = Schema.Struct({
178
+ id: Schema.Int,
179
+ title: Schema.String
180
+ })
181
+
182
+ export const parseColumns = (json: string): Effect.Effect<ReadonlyArray<Column>, ProcessError> =>
183
+ decodeJson(
184
+ "basecamp parse columns",
185
+ Schema.fromJsonString(Schema.Array(columnStruct)),
186
+ json
187
+ ).pipe(Effect.map((columns) => columns.map((column) => Column.make(column))))
188
+
189
+ const cardStruct = Schema.Struct({
190
+ id: Schema.Int,
191
+ title: Schema.String,
192
+ content: Schema.optionalKey(Schema.NullOr(Schema.String)),
193
+ parent: columnStruct,
194
+ assignees: Schema.optionalKey(
195
+ Schema.NullOr(Schema.Array(Schema.Struct({ name: Schema.String })))
196
+ ),
197
+ comments_count: Schema.optionalKey(Schema.NullOr(Schema.Int)),
198
+ updated_at: Schema.String,
199
+ app_url: Schema.String
200
+ })
201
+
202
+ const toCard = (item: typeof cardStruct.Type): Card =>
203
+ Card.make({
204
+ id: item.id,
205
+ title: item.title,
206
+ contentHtml: item.content ?? "",
207
+ column: Column.make(item.parent),
208
+ assignees: (item.assignees ?? []).map((assignee) => assignee.name),
209
+ commentsCount: item.comments_count ?? 0,
210
+ updatedAt: item.updated_at,
211
+ url: item.app_url
212
+ })
213
+
214
+ export const parseCard = (json: string): Effect.Effect<Card, ProcessError> =>
215
+ decodeJson("basecamp parse card", Schema.fromJsonString(cardStruct), json).pipe(
216
+ Effect.map(toCard)
217
+ )
218
+
219
+ export const parseCards = (json: string): Effect.Effect<ReadonlyArray<Card>, ProcessError> =>
220
+ decodeJson("basecamp parse cards", Schema.fromJsonString(Schema.Array(cardStruct)), json).pipe(
221
+ Effect.map((items) => items.map(toCard))
222
+ )
223
+
224
+ const commentStruct = Schema.Struct({
225
+ id: Schema.Int,
226
+ content: Schema.String,
227
+ creator: Schema.Struct({ name: Schema.String }),
228
+ created_at: Schema.String
229
+ })
230
+
231
+ export const parseCardComments = (
232
+ json: string
233
+ ): Effect.Effect<ReadonlyArray<CardComment>, ProcessError> =>
234
+ decodeJson(
235
+ "basecamp parse comments",
236
+ Schema.fromJsonString(Schema.Array(commentStruct)),
237
+ json
238
+ ).pipe(
239
+ Effect.map((comments) =>
240
+ comments.map((comment) =>
241
+ CardComment.make({
242
+ id: comment.id,
243
+ author: comment.creator.name,
244
+ contentHtml: comment.content,
245
+ createdAt: comment.created_at
246
+ })
247
+ )
248
+ )
249
+ )
250
+
251
+ const stepStruct = Schema.Struct({
252
+ id: Schema.Int,
253
+ title: Schema.String,
254
+ completed: Schema.Boolean
255
+ })
256
+
257
+ // A card without steps prints `null`, not `[]`.
258
+ export const parseCardSteps = (
259
+ json: string
260
+ ): Effect.Effect<ReadonlyArray<CardStep>, ProcessError> =>
261
+ decodeJson(
262
+ "basecamp parse steps",
263
+ Schema.fromJsonString(Schema.NullOr(Schema.Array(stepStruct))),
264
+ json
265
+ ).pipe(Effect.map((steps) => (steps ?? []).map((step) => CardStep.make(step))))
266
+
267
+ export interface BasecampToolShape {
268
+ readonly listColumns: Effect.Effect<ReadonlyArray<Column>, FlowError>
269
+ readonly resolveColumn: (title: string) => Effect.Effect<Column, FlowError>
270
+ readonly listCards: (column: Column) => Effect.Effect<ReadonlyArray<Card>, FlowError>
271
+ readonly readCard: (cardId: number) => Effect.Effect<Card, FlowError>
272
+ readonly moveCard: (cardId: number, column: Column) => Effect.Effect<void, FlowError>
273
+ readonly createCard: (
274
+ column: Column,
275
+ title: string,
276
+ content: string,
277
+ assignee?: string
278
+ ) => Effect.Effect<Card, FlowError>
279
+ readonly assignCard: (cardId: number, assignee: string) => Effect.Effect<void, FlowError>
280
+ readonly readCardComments: (
281
+ cardId: number
282
+ ) => Effect.Effect<ReadonlyArray<CardComment>, FlowError>
283
+ readonly writeCardComment: (cardId: number, body: string) => Effect.Effect<void, FlowError>
284
+ readonly listSteps: (cardId: number) => Effect.Effect<ReadonlyArray<CardStep>, FlowError>
285
+ readonly completeStep: (stepId: number) => Effect.Effect<void, FlowError>
286
+ }
287
+
288
+ const output = (result: ProcessResult): string => result.stdout.join("\n").trim()
289
+
290
+ export const makeBasecampTool = Effect.fn("@llm4ts/flow/BasecampTool.make")(function* (
291
+ process: ProcessExecutorShape,
292
+ workDir: string,
293
+ events: FlowEventsShape,
294
+ board: BasecampProjectRef
295
+ ): Effect.fn.Return<BasecampToolShape> {
296
+ const columnsCache = yield* Ref.make<ReadonlyArray<Column> | undefined>(undefined)
297
+
298
+ const run = (args: ReadonlyArray<string>): Effect.Effect<ProcessResult, FlowError> =>
299
+ process.run(["basecamp", ...args], workDir, {}).pipe(
300
+ Effect.mapError((error) =>
301
+ ProcessError.make({
302
+ message: `basecamp ${args.join(" ")}`,
303
+ detail: error.message
304
+ })
305
+ ),
306
+ Effect.flatMap((result) =>
307
+ result.exitCode === 0
308
+ ? Effect.succeed(result)
309
+ : Effect.fail(
310
+ ProcessError.make({
311
+ message: `basecamp ${args.join(" ")}`,
312
+ detail:
313
+ [...result.stdout, ...result.stderr].join("\n").trim() ||
314
+ `exit code ${result.exitCode}`
315
+ })
316
+ )
317
+ )
318
+ )
319
+
320
+ const read = <A>(
321
+ operation: string,
322
+ effect: Effect.Effect<A, FlowError>
323
+ ): Effect.Effect<A, FlowError> => guarded(Capabilities.BasecampRead, operation, events, effect)
324
+ const write = <A>(
325
+ operation: string,
326
+ effect: Effect.Effect<A, FlowError>
327
+ ): Effect.Effect<A, FlowError> => guarded(Capabilities.BasecampWrite, operation, events, effect)
328
+
329
+ // The board's columns barely change within a tool's lifetime; fetch once.
330
+ const cachedColumns: Effect.Effect<ReadonlyArray<Column>, FlowError> = Ref.get(columnsCache).pipe(
331
+ Effect.flatMap((cached) =>
332
+ cached !== undefined
333
+ ? Effect.succeed(cached)
334
+ : run(cardColumnsArgs(board)).pipe(
335
+ Effect.flatMap((result) => parseColumns(output(result))),
336
+ Effect.tap((columns) => Ref.set(columnsCache, columns))
337
+ )
338
+ )
339
+ )
340
+
341
+ return {
342
+ listColumns: read("basecamp cards columns", cachedColumns),
343
+ resolveColumn: (title) =>
344
+ read(
345
+ "basecamp cards columns",
346
+ cachedColumns.pipe(
347
+ Effect.flatMap((columns) => {
348
+ const match = columns.find(
349
+ (column) => column.title.toLowerCase() === title.toLowerCase()
350
+ )
351
+ return match !== undefined
352
+ ? Effect.succeed(match)
353
+ : Effect.fail(
354
+ ColumnNotFound.make({
355
+ title,
356
+ available: columns.map((column) => column.title)
357
+ })
358
+ )
359
+ })
360
+ )
361
+ ),
362
+ listCards: (column) =>
363
+ read(
364
+ "basecamp cards list",
365
+ run(cardListArgs(board, column)).pipe(
366
+ Effect.flatMap((result) => parseCards(output(result)))
367
+ )
368
+ ),
369
+ readCard: (cardId) =>
370
+ read(
371
+ "basecamp cards show",
372
+ run(cardShowArgs(board, cardId)).pipe(Effect.flatMap((result) => parseCard(output(result))))
373
+ ),
374
+ moveCard: (cardId, column) =>
375
+ write("basecamp cards move", run(cardMoveArgs(board, cardId, column)).pipe(Effect.asVoid)),
376
+ createCard: (column, title, content, assignee) =>
377
+ write(
378
+ "basecamp cards create",
379
+ run(cardCreateArgs(board, column, title, content, assignee)).pipe(
380
+ Effect.flatMap((result) => parseCard(output(result)))
381
+ )
382
+ ),
383
+ assignCard: (cardId, assignee) =>
384
+ write(
385
+ "basecamp cards update",
386
+ run(cardAssignArgs(board, cardId, assignee)).pipe(Effect.asVoid)
387
+ ),
388
+ readCardComments: (cardId) =>
389
+ read(
390
+ "basecamp comments list",
391
+ run(cardCommentsArgs(cardId)).pipe(
392
+ Effect.flatMap((result) => parseCardComments(output(result)))
393
+ )
394
+ ),
395
+ writeCardComment: (cardId, body) =>
396
+ write(
397
+ "basecamp comments create",
398
+ run(cardCommentCreateArgs(cardId, body)).pipe(Effect.asVoid)
399
+ ),
400
+ listSteps: (cardId) =>
401
+ read(
402
+ "basecamp cards steps",
403
+ run(cardStepsArgs(board, cardId)).pipe(
404
+ Effect.flatMap((result) => parseCardSteps(output(result)))
405
+ )
406
+ ),
407
+ completeStep: (stepId) =>
408
+ write(
409
+ "basecamp cards step complete",
410
+ run(cardStepCompleteArgs(board, stepId)).pipe(Effect.asVoid)
411
+ )
412
+ }
413
+ })
package/src/FlowError.ts CHANGED
@@ -105,6 +105,15 @@ export class FlowCapabilityDenied extends Schema.TaggedErrorClass<FlowCapability
105
105
  }
106
106
  }
107
107
 
108
+ export class ColumnNotFound extends Schema.TaggedErrorClass<ColumnNotFound>()("ColumnNotFound", {
109
+ title: Schema.String,
110
+ available: Schema.Array(Schema.String)
111
+ }) {
112
+ get message(): string {
113
+ return `column "${this.title}" not found on the card table; available: ${this.available.join(", ")}`
114
+ }
115
+ }
116
+
108
117
  export class BudgetExceeded extends Schema.TaggedErrorClass<BudgetExceeded>()("BudgetExceeded", {
109
118
  metric: Schema.Literals(["tokens", "costUsd"]),
110
119
  limit: Schema.Number,
@@ -126,6 +135,7 @@ export const FlowError = Schema.Union([
126
135
  ProcessError,
127
136
  FlowLlmError,
128
137
  FlowCapabilityDenied,
138
+ ColumnNotFound,
129
139
  BudgetExceeded
130
140
  ])
131
141
  export type FlowError = typeof FlowError.Type