@llm4ts/flow 0.13.5 → 0.15.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 (45) hide show
  1. package/dist/BoardSync.d.ts +81 -0
  2. package/dist/BoardSync.d.ts.map +1 -0
  3. package/dist/BoardSync.js +259 -0
  4. package/dist/BoardSync.js.map +1 -0
  5. package/dist/EstimatedUsage.d.ts +28 -0
  6. package/dist/EstimatedUsage.d.ts.map +1 -0
  7. package/dist/EstimatedUsage.js +91 -0
  8. package/dist/EstimatedUsage.js.map +1 -0
  9. package/dist/GitTool.d.ts +7 -0
  10. package/dist/GitTool.d.ts.map +1 -1
  11. package/dist/GitTool.js +14 -3
  12. package/dist/GitTool.js.map +1 -1
  13. package/dist/Pack.d.ts +1 -0
  14. package/dist/Pack.d.ts.map +1 -1
  15. package/dist/Pack.js +7 -0
  16. package/dist/Pack.js.map +1 -1
  17. package/dist/PageSpec.d.ts +104 -0
  18. package/dist/PageSpec.d.ts.map +1 -0
  19. package/dist/PageSpec.js +272 -0
  20. package/dist/PageSpec.js.map +1 -0
  21. package/dist/SpecChecks.d.ts +6 -1
  22. package/dist/SpecChecks.d.ts.map +1 -1
  23. package/dist/SpecChecks.js +11 -4
  24. package/dist/SpecChecks.js.map +1 -1
  25. package/dist/Survey.d.ts +38 -1
  26. package/dist/Survey.d.ts.map +1 -1
  27. package/dist/Survey.js +101 -5
  28. package/dist/Survey.js.map +1 -1
  29. package/dist/TransientRetry.d.ts.map +1 -1
  30. package/dist/TransientRetry.js +8 -1
  31. package/dist/TransientRetry.js.map +1 -1
  32. package/dist/Workspace.d.ts +44 -5
  33. package/dist/Workspace.d.ts.map +1 -1
  34. package/dist/Workspace.js +84 -14
  35. package/dist/Workspace.js.map +1 -1
  36. package/package.json +5 -2
  37. package/src/BoardSync.ts +358 -0
  38. package/src/EstimatedUsage.ts +180 -0
  39. package/src/GitTool.ts +31 -3
  40. package/src/Pack.ts +11 -0
  41. package/src/PageSpec.ts +354 -0
  42. package/src/SpecChecks.ts +12 -6
  43. package/src/Survey.ts +137 -5
  44. package/src/TransientRetry.ts +8 -1
  45. package/src/Workspace.ts +120 -15
@@ -0,0 +1,81 @@
1
+ import * as Effect from "effect/Effect";
2
+ import * as Schema from "effect/Schema";
3
+ import { type AzureDevOpsToolShape } from "./AzureDevOpsTool.ts";
4
+ import { type FlowError } from "./FlowError.ts";
5
+ import { type PlainFileStoreShape } from "./Persistence.ts";
6
+ export declare const BoardVersion = 1;
7
+ export declare const BoardStatus: Schema.Literals<readonly ["planned", "active", "done", "failed", "skipped"]>;
8
+ export type BoardStatus = typeof BoardStatus.Type;
9
+ declare const BoardItem_base: Schema.Class<BoardItem, Schema.Struct<{
10
+ readonly id: Schema.String;
11
+ readonly title: Schema.String;
12
+ readonly wave: Schema.optionalKey<Schema.String>;
13
+ readonly status: Schema.Literals<readonly ["planned", "active", "done", "failed", "skipped"]>;
14
+ readonly branch: Schema.optionalKey<Schema.String>;
15
+ readonly reportPath: Schema.optionalKey<Schema.String>;
16
+ /** Free-form note: a failure reason, a skip rationale, a triage disposition. */
17
+ readonly detail: Schema.optionalKey<Schema.String>;
18
+ /** ESTIMATES, never measurements — see EstimatedUsage (ADR 0012). */
19
+ readonly estimatedTokens: Schema.optionalKey<Schema.Int>;
20
+ readonly estimatedCostUsd: Schema.optionalKey<Schema.Number>;
21
+ }>, {}>;
22
+ export declare class BoardItem extends BoardItem_base {
23
+ }
24
+ declare const Board_base: Schema.Class<Board, Schema.Struct<{
25
+ readonly title: Schema.String;
26
+ readonly items: Schema.$Array<typeof BoardItem>;
27
+ }>, {}>;
28
+ export declare class Board extends Board_base {
29
+ }
30
+ export interface BoardItemResult {
31
+ readonly branch?: string;
32
+ readonly reportPath?: string;
33
+ readonly detail?: string;
34
+ readonly estimatedTokens?: number;
35
+ readonly estimatedCostUsd?: number;
36
+ }
37
+ export interface BoardSyncShape {
38
+ /** Publish the full planned work list. Idempotent: known ids keep their state. */
39
+ readonly plan: (items: ReadonlyArray<BoardItem>) => Effect.Effect<void, FlowError>;
40
+ readonly start: (id: string) => Effect.Effect<void, FlowError>;
41
+ readonly complete: (id: string, result: BoardItemResult) => Effect.Effect<void, FlowError>;
42
+ readonly fail: (id: string, reason: string) => Effect.Effect<void, FlowError>;
43
+ readonly skip: (id: string, reason: string) => Effect.Effect<void, FlowError>;
44
+ readonly snapshot: Effect.Effect<Board, FlowError>;
45
+ }
46
+ /** The markdown board — every figure on it labelled estimated. */
47
+ export declare const renderBoard: (board: Board) => string;
48
+ /**
49
+ * The default adapter: `board.json` (versioned) plus a rendered `board.md`
50
+ * under `directory`. The JSON is the state, the markdown is the demo surface;
51
+ * both are rewritten on every mutation so a crash never leaves them apart.
52
+ */
53
+ export declare const makeLocalBoardSync: (files: PlainFileStoreShape, directory: string, title: string) => BoardSyncShape;
54
+ /**
55
+ * Fan one lifecycle out to several boards (local file + ADO, typically).
56
+ * Mutations hit every board in order; `snapshot` reads the FIRST — the local
57
+ * board is the source of truth, the others are mirrors.
58
+ */
59
+ export declare const composeBoardSync: (boards: ReadonlyArray<BoardSyncShape>) => BoardSyncShape;
60
+ export interface AdoBoardOptions {
61
+ /** Work item type created for each page. Default "Task". */
62
+ readonly workItemType?: string;
63
+ /** Tag identifying this board's items — the idempotency key. Default "llm4ts-convert". */
64
+ readonly tag?: string;
65
+ /** Lifecycle → System.State mapping. Defaults: New / Active / Closed. */
66
+ readonly states?: {
67
+ readonly planned?: string;
68
+ readonly active?: string;
69
+ readonly done?: string;
70
+ };
71
+ }
72
+ /**
73
+ * The stretch adapter (ADR 0012): the same lifecycle mapped onto Azure DevOps
74
+ * work items through the az-CLI AzureDevOpsTool (ADR 0011). Idempotent by
75
+ * title marker — `[<id>]` plus the board tag — so a re-run finds its items
76
+ * instead of duplicating them. Failure and skip are tags plus a comment,
77
+ * never invented states.
78
+ */
79
+ export declare const makeAdoBoardSync: (ado: AzureDevOpsToolShape, boardTitle: string, options?: AdoBoardOptions | undefined) => Effect.Effect<BoardSyncShape, never, never>;
80
+ export {};
81
+ //# sourceMappingURL=BoardSync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BoardSync.d.ts","sourceRoot":"","sources":["../src/BoardSync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAa,KAAK,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AAC3E,OAAO,EAAe,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC5D,OAAO,EAAgC,KAAK,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AASzF,eAAO,MAAM,YAAY,IAAI,CAAA;AAE7B,eAAO,MAAM,WAAW,8EAAsE,CAAA;AAC9F,MAAM,MAAM,WAAW,GAAG,OAAO,WAAW,CAAC,IAAI,CAAA;;;;;;;;IAS/C,gFAAgF;;IAEhF,qEAAqE;;;;AATvE,qBAAa,SAAU,SAAQ,cAY7B;CAAG;;;;;AAEL,qBAAa,KAAM,SAAQ,UAGzB;CAAG;AAEL,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAA;IACjC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;CACnC;AAED,MAAM,WAAW,cAAc;IAC7B,kFAAkF;IAClF,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,aAAa,CAAC,SAAS,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;IAClF,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;IAC9D,QAAQ,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;IAC1F,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;IAC7E,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;IAC7E,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,CAAA;CACnD;AAgCD,kEAAkE;AAClE,eAAO,MAAM,WAAW,GAAI,OAAO,KAAK,KAAG,MAuB1C,CAAA;AAkBD;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,GAC7B,OAAO,mBAAmB,EAC1B,WAAW,MAAM,EACjB,OAAO,MAAM,KACZ,cAmDF,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,GAAI,QAAQ,aAAa,CAAC,cAAc,CAAC,KAAG,cAgBxE,CAAA;AAED,MAAM,WAAW,eAAe;IAC9B,4DAA4D;IAC5D,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAA;IAC9B,0FAA0F;IAC1F,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAA;IACrB,yEAAyE;IACzE,QAAQ,CAAC,MAAM,CAAC,EAAE;QAChB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;QACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;QACxB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KACvB,CAAA;CACF;AAOD;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,uIAuH3B,CAAA"}
@@ -0,0 +1,259 @@
1
+ import * as Effect from "effect/Effect";
2
+ import * as Ref from "effect/Ref";
3
+ import * as Schema from "effect/Schema";
4
+ import { quoteWiql } from "./AzureDevOpsTool.js";
5
+ import { FlowAborted } from "./FlowError.js";
6
+ import { loadVersioned, saveVersioned } from "./Persistence.js";
7
+ // The progress board of the conversion scenario: a port with the work-item
8
+ // lifecycle (plan → start → complete/fail/skip) and two adapters — a local
9
+ // file board (the default, fully offline: board.json + rendered board.md)
10
+ // and an Azure DevOps adapter (the stretch goal) mapping the same lifecycle
11
+ // onto work items. Flows depend only on the port; which board the client
12
+ // sees is wiring, not policy.
13
+ export const BoardVersion = 1;
14
+ export const BoardStatus = Schema.Literals(["planned", "active", "done", "failed", "skipped"]);
15
+ export class BoardItem extends Schema.Class("BoardItem")({
16
+ id: Schema.String,
17
+ title: Schema.String,
18
+ wave: Schema.optionalKey(Schema.String),
19
+ status: BoardStatus,
20
+ branch: Schema.optionalKey(Schema.String),
21
+ reportPath: Schema.optionalKey(Schema.String),
22
+ /** Free-form note: a failure reason, a skip rationale, a triage disposition. */
23
+ detail: Schema.optionalKey(Schema.String),
24
+ /** ESTIMATES, never measurements — see EstimatedUsage (ADR 0012). */
25
+ estimatedTokens: Schema.optionalKey(Schema.Int),
26
+ estimatedCostUsd: Schema.optionalKey(Schema.Number)
27
+ }) {
28
+ }
29
+ export class Board extends Schema.Class("Board")({
30
+ title: Schema.String,
31
+ items: Schema.Array(BoardItem)
32
+ }) {
33
+ }
34
+ const sectionOrder = [
35
+ ["active", "Active"],
36
+ ["planned", "Planned"],
37
+ ["done", "Done"],
38
+ ["failed", "Failed"],
39
+ ["skipped", "Skipped"]
40
+ ];
41
+ const itemLine = (item) => {
42
+ const parts = [`- **${item.id}** — ${item.title}`];
43
+ if (item.wave !== undefined) {
44
+ parts.push(`(wave: ${item.wave})`);
45
+ }
46
+ if (item.branch !== undefined) {
47
+ parts.push(`branch \`${item.branch}\``);
48
+ }
49
+ if (item.reportPath !== undefined) {
50
+ parts.push(`[report](${item.reportPath})`);
51
+ }
52
+ if (item.estimatedTokens !== undefined || item.estimatedCostUsd !== undefined) {
53
+ const tokens = item.estimatedTokens === undefined ? "" : `~${item.estimatedTokens} tokens`;
54
+ const cost = item.estimatedCostUsd === undefined ? "" : `~$${item.estimatedCostUsd.toFixed(2)}`;
55
+ parts.push(`(${[tokens, cost].filter((part) => part.length > 0).join(", ")} — estimated)`);
56
+ }
57
+ if (item.detail !== undefined) {
58
+ parts.push(`— ${item.detail}`);
59
+ }
60
+ return parts.join(" ");
61
+ };
62
+ /** The markdown board — every figure on it labelled estimated. */
63
+ export const renderBoard = (board) => {
64
+ const lines = [`# Board: ${board.title}`, ""];
65
+ const counts = sectionOrder
66
+ .map(([status]) => `${status}: ${board.items.filter((item) => item.status === status).length}`)
67
+ .join(" · ");
68
+ lines.push(counts, "");
69
+ lines.push("All token and cost figures are ESTIMATES (character-count heuristics), not", "measurements.", "");
70
+ for (const [status, heading] of sectionOrder) {
71
+ const items = board.items.filter((item) => item.status === status);
72
+ if (items.length === 0) {
73
+ continue;
74
+ }
75
+ lines.push(`## ${heading}`, "");
76
+ for (const item of items) {
77
+ lines.push(itemLine(item));
78
+ }
79
+ lines.push("");
80
+ }
81
+ return lines.join("\n").trimEnd() + "\n";
82
+ };
83
+ const join = (root, path) => `${root.replace(/[\\/]+$/, "")}/${path.replace(/^[\\/]+/, "")}`;
84
+ const applyResult = (item, status, result) => BoardItem.make({
85
+ ...item,
86
+ status,
87
+ ...(result.branch === undefined ? {} : { branch: result.branch }),
88
+ ...(result.reportPath === undefined ? {} : { reportPath: result.reportPath }),
89
+ ...(result.detail === undefined ? {} : { detail: result.detail }),
90
+ ...(result.estimatedTokens === undefined
91
+ ? {}
92
+ : { estimatedTokens: Math.round(result.estimatedTokens) }),
93
+ ...(result.estimatedCostUsd === undefined ? {} : { estimatedCostUsd: result.estimatedCostUsd })
94
+ });
95
+ /**
96
+ * The default adapter: `board.json` (versioned) plus a rendered `board.md`
97
+ * under `directory`. The JSON is the state, the markdown is the demo surface;
98
+ * both are rewritten on every mutation so a crash never leaves them apart.
99
+ */
100
+ export const makeLocalBoardSync = (files, directory, title) => {
101
+ const jsonPath = join(directory, "board.json");
102
+ const markdownPath = join(directory, "board.md");
103
+ const load = loadVersioned(files, jsonPath, BoardVersion, Board).pipe(Effect.map((board) => board ?? Board.make({ title, items: [] })));
104
+ const save = (board) => saveVersioned(files, jsonPath, BoardVersion, Board, board).pipe(Effect.andThen(files.writeAtomic(markdownPath, renderBoard(board))));
105
+ const update = (id, transform) => Effect.gen(function* () {
106
+ const board = yield* load;
107
+ if (!board.items.some((item) => item.id === id)) {
108
+ return yield* FlowAborted.make({ message: `board has no item '${id}' — plan it first` });
109
+ }
110
+ yield* save(Board.make({
111
+ ...board,
112
+ items: board.items.map((item) => (item.id === id ? transform(item) : item))
113
+ }));
114
+ });
115
+ return {
116
+ plan: (items) => Effect.gen(function* () {
117
+ const board = yield* load;
118
+ const known = new Map(board.items.map((item) => [item.id, item]));
119
+ // Known ids keep their lived state — re-planning must never demote a
120
+ // converted page back to "planned".
121
+ const merged = [...board.items, ...items.filter((item) => !known.has(item.id))];
122
+ yield* save(Board.make({ title: board.title, items: merged }));
123
+ }),
124
+ start: (id) => update(id, (item) => BoardItem.make({ ...item, status: "active" })),
125
+ complete: (id, result) => update(id, (item) => applyResult(item, "done", result)),
126
+ fail: (id, reason) => update(id, (item) => BoardItem.make({ ...item, status: "failed", detail: reason })),
127
+ skip: (id, reason) => update(id, (item) => BoardItem.make({ ...item, status: "skipped", detail: reason })),
128
+ snapshot: load
129
+ };
130
+ };
131
+ /**
132
+ * Fan one lifecycle out to several boards (local file + ADO, typically).
133
+ * Mutations hit every board in order; `snapshot` reads the FIRST — the local
134
+ * board is the source of truth, the others are mirrors.
135
+ */
136
+ export const composeBoardSync = (boards) => {
137
+ const first = boards[0];
138
+ const each = (operation) => Effect.forEach(boards, operation, { discard: true });
139
+ return {
140
+ plan: (items) => each((board) => board.plan(items)),
141
+ start: (id) => each((board) => board.start(id)),
142
+ complete: (id, result) => each((board) => board.complete(id, result)),
143
+ fail: (id, reason) => each((board) => board.fail(id, reason)),
144
+ skip: (id, reason) => each((board) => board.skip(id, reason)),
145
+ snapshot: first === undefined
146
+ ? Effect.succeed(Board.make({ title: "empty", items: [] }))
147
+ : first.snapshot
148
+ };
149
+ };
150
+ const markerQuery = (tag, id) => "SELECT [System.Id] FROM WorkItems WHERE " +
151
+ `[System.Tags] CONTAINS ${quoteWiql(tag)} AND ` +
152
+ `[System.Title] CONTAINS ${quoteWiql(`[${id}]`)}`;
153
+ /**
154
+ * The stretch adapter (ADR 0012): the same lifecycle mapped onto Azure DevOps
155
+ * work items through the az-CLI AzureDevOpsTool (ADR 0011). Idempotent by
156
+ * title marker — `[<id>]` plus the board tag — so a re-run finds its items
157
+ * instead of duplicating them. Failure and skip are tags plus a comment,
158
+ * never invented states.
159
+ */
160
+ export const makeAdoBoardSync = Effect.fn("@llm4ts/flow/BoardSync.makeAdo")(function* (ado, boardTitle, options = {}) {
161
+ const workItemType = options.workItemType ?? "Task";
162
+ const tag = options.tag ?? "llm4ts-convert";
163
+ const states = {
164
+ planned: options.states?.planned ?? "New",
165
+ active: options.states?.active ?? "Active",
166
+ done: options.states?.done ?? "Closed"
167
+ };
168
+ const ids = yield* Ref.make(new Map());
169
+ const lookup = (id) => Effect.gen(function* () {
170
+ const cached = (yield* Ref.get(ids)).get(id);
171
+ if (cached !== undefined) {
172
+ return cached;
173
+ }
174
+ const found = yield* ado.wiqlIds(markerQuery(tag, id));
175
+ const first = found[0];
176
+ if (first === undefined) {
177
+ return yield* FlowAborted.make({
178
+ message: `no ADO work item tagged '${tag}' with '[${id}]' in its title — plan it first`
179
+ });
180
+ }
181
+ yield* Ref.update(ids, (current) => new Map(current).set(id, first));
182
+ return first;
183
+ });
184
+ return {
185
+ plan: (items) => Effect.gen(function* () {
186
+ for (const item of items) {
187
+ const existing = yield* ado.wiqlIds(markerQuery(tag, item.id));
188
+ const first = existing[0];
189
+ if (first !== undefined) {
190
+ yield* Ref.update(ids, (current) => new Map(current).set(item.id, first));
191
+ continue;
192
+ }
193
+ const created = yield* ado.createWorkItem(workItemType, `[${item.id}] ${item.title}`, item.detail ?? item.title, [tag]);
194
+ yield* Ref.update(ids, (current) => new Map(current).set(item.id, created.id));
195
+ if (states.planned !== "New") {
196
+ yield* ado.setState(created.id, states.planned);
197
+ }
198
+ }
199
+ }),
200
+ start: (id) => Effect.gen(function* () {
201
+ const workItem = yield* lookup(id);
202
+ yield* ado.setState(workItem, states.active);
203
+ }),
204
+ complete: (id, result) => Effect.gen(function* () {
205
+ const workItem = yield* lookup(id);
206
+ const parts = [
207
+ result.branch === undefined ? undefined : `Branch: ${result.branch}`,
208
+ result.reportPath === undefined ? undefined : `Report: ${result.reportPath}`,
209
+ result.estimatedTokens === undefined
210
+ ? undefined
211
+ : `~${Math.round(result.estimatedTokens)} tokens (estimated)`,
212
+ result.estimatedCostUsd === undefined
213
+ ? undefined
214
+ : `~$${result.estimatedCostUsd.toFixed(2)} (estimated)`,
215
+ result.detail
216
+ ].filter((part) => part !== undefined);
217
+ if (parts.length > 0) {
218
+ yield* ado.writeComment(workItem, parts.join("\n"));
219
+ }
220
+ yield* ado.setState(workItem, states.done);
221
+ }),
222
+ fail: (id, reason) => Effect.gen(function* () {
223
+ const workItem = yield* lookup(id);
224
+ yield* ado.editTags(workItem, [`${tag}-failed`], []);
225
+ yield* ado.writeComment(workItem, `FAILED: ${reason}`);
226
+ }),
227
+ skip: (id, reason) => Effect.gen(function* () {
228
+ const workItem = yield* lookup(id);
229
+ yield* ado.editTags(workItem, [`${tag}-skipped`], []);
230
+ yield* ado.writeComment(workItem, `SKIPPED: ${reason}`);
231
+ }),
232
+ snapshot: Effect.gen(function* () {
233
+ const found = yield* ado.wiqlIds(`SELECT [System.Id] FROM WorkItems WHERE [System.Tags] CONTAINS ${quoteWiql(tag)}`);
234
+ const items = [];
235
+ for (const workItemId of found) {
236
+ const workItem = yield* ado.readWorkItem(workItemId);
237
+ const match = /^\[([^\]]+)\] (.*)$/.exec(workItem.title);
238
+ const failed = workItem.tags.includes(`${tag}-failed`);
239
+ const skipped = workItem.tags.includes(`${tag}-skipped`);
240
+ const status = failed
241
+ ? "failed"
242
+ : skipped
243
+ ? "skipped"
244
+ : workItem.state === states.done
245
+ ? "done"
246
+ : workItem.state === states.active
247
+ ? "active"
248
+ : "planned";
249
+ items.push(BoardItem.make({
250
+ id: match?.[1] ?? String(workItemId),
251
+ title: match?.[2] ?? workItem.title,
252
+ status
253
+ }));
254
+ }
255
+ return Board.make({ title: boardTitle, items });
256
+ })
257
+ };
258
+ });
259
+ //# sourceMappingURL=BoardSync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BoardSync.js","sourceRoot":"","sources":["../src/BoardSync.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import * as Effect from "effect/Effect";
2
+ import type { LlmServiceShape } from "@llm4ts/core/LlmService";
3
+ import { TokenUsage } from "@llm4ts/core/Models";
4
+ export interface EstimatedUsageOptions {
5
+ /** Pricing reference for the estimate — a `PriceList` model prefix. */
6
+ readonly referenceModel: string;
7
+ /** Characters per token for the estimate. Default 4. */
8
+ readonly charsPerToken?: number;
9
+ }
10
+ export declare const defaultReferenceModel = "claude-sonnet-4";
11
+ export declare const estimatedUsageOptionsFromEnv: (environment: Readonly<Record<string, string | undefined>>) => EstimatedUsageOptions;
12
+ /** The model label estimates are published under — never a real model id. */
13
+ export declare const estimatedModelLabel: (referenceModel: string) => string;
14
+ export declare const isEstimatedModel: (model: string | undefined) => boolean;
15
+ export declare const estimateUsage: (promptChars: number, completionChars: number, options: EstimatedUsageOptions) => TokenUsage;
16
+ export interface EstimatedUsageMeter {
17
+ /** The decorated service — use this in place of the raw connector. */
18
+ readonly service: LlmServiceShape;
19
+ /** Cumulative usage seen so far: backend-reported where present, estimated otherwise. */
20
+ readonly totals: Effect.Effect<TokenUsage | undefined>;
21
+ }
22
+ /**
23
+ * Decorates a service so every request yields usage — real when the backend
24
+ * reported it, estimated (and labelled so) when it did not — and exposes the
25
+ * running totals for per-run reports.
26
+ */
27
+ export declare const makeEstimatedUsageMeter: (service: LlmServiceShape, options: EstimatedUsageOptions) => Effect.Effect<EstimatedUsageMeter, never, never>;
28
+ //# sourceMappingURL=EstimatedUsage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EstimatedUsage.d.ts","sourceRoot":"","sources":["../src/EstimatedUsage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAIvC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAC9D,OAAO,EAAY,UAAU,EAAgB,MAAM,qBAAqB,CAAA;AAYxE,MAAM,WAAW,qBAAqB;IACpC,uEAAuE;IACvE,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,wDAAwD;IACxD,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAChC;AAED,eAAO,MAAM,qBAAqB,oBAAoB,CAAA;AAEtD,eAAO,MAAM,4BAA4B,GACvC,aAAa,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,KACxD,qBAMF,CAAA;AAED,6EAA6E;AAC7E,eAAO,MAAM,mBAAmB,GAAI,gBAAgB,MAAM,KAAG,MAAuC,CAAA;AAEpG,eAAO,MAAM,gBAAgB,GAAI,OAAO,MAAM,GAAG,SAAS,KAAG,OACN,CAAA;AAKvD,eAAO,MAAM,aAAa,GACxB,aAAa,MAAM,EACnB,iBAAiB,MAAM,EACvB,SAAS,qBAAqB,KAC7B,UAOF,CAAA;AAqBD,MAAM,WAAW,mBAAmB;IAClC,sEAAsE;IACtE,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAA;IACjC,yFAAyF;IACzF,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,GAAG,SAAS,CAAC,CAAA;CACvD;AA8CD;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,gHA8ClC,CAAA"}
@@ -0,0 +1,91 @@
1
+ import * as Effect from "effect/Effect";
2
+ import * as Ref from "effect/Ref";
3
+ import * as Stream from "effect/Stream";
4
+ import { LlmChunk, TokenUsage } from "@llm4ts/core/Models";
5
+ import { estimateCostUsd } from "./PriceList.js";
6
+ export const defaultReferenceModel = "claude-sonnet-4";
7
+ export const estimatedUsageOptionsFromEnv = (environment) => {
8
+ const parsed = Number.parseInt(environment.LLM4TS_ESTIMATE_CHARS_PER_TOKEN ?? "", 10);
9
+ return {
10
+ referenceModel: environment.LLM4TS_ESTIMATE_MODEL?.trim() || defaultReferenceModel,
11
+ ...(Number.isFinite(parsed) && parsed > 0 ? { charsPerToken: parsed } : {})
12
+ };
13
+ };
14
+ /** The model label estimates are published under — never a real model id. */
15
+ export const estimatedModelLabel = (referenceModel) => `estimated:${referenceModel}`;
16
+ export const isEstimatedModel = (model) => model !== undefined && model.startsWith("estimated:");
17
+ const tokensFor = (chars, charsPerToken) => Math.ceil(Math.max(0, chars) / charsPerToken);
18
+ export const estimateUsage = (promptChars, completionChars, options) => {
19
+ const charsPerToken = options.charsPerToken ?? 4;
20
+ const prompt = tokensFor(promptChars, charsPerToken);
21
+ const completion = tokensFor(completionChars, charsPerToken);
22
+ const base = TokenUsage.make({ prompt, completion, total: prompt + completion });
23
+ const costUsd = estimateCostUsd(options.referenceModel, base);
24
+ return costUsd === undefined ? base : TokenUsage.make({ ...base, costUsd });
25
+ };
26
+ const messagesChars = (messages) => messages.reduce((sum, message) => sum + message.content.length, 0);
27
+ const mergeTotals = (previous, usage) => {
28
+ const cached = [previous?.cached, usage.cached].flatMap((value) => value === undefined ? [] : [value]);
29
+ const cost = [previous?.costUsd, usage.costUsd].flatMap((value) => value === undefined ? [] : [value]);
30
+ return TokenUsage.make({
31
+ prompt: (previous?.prompt ?? 0) + usage.prompt,
32
+ completion: (previous?.completion ?? 0) + usage.completion,
33
+ total: (previous?.total ?? 0) + usage.total,
34
+ ...(cached.length === 0 ? {} : { cached: cached.reduce((sum, value) => sum + value, 0) }),
35
+ ...(cost.length === 0 ? {} : { costUsd: cost.reduce((sum, value) => sum + value, 0) })
36
+ });
37
+ };
38
+ const estimatedStream = (stream, promptChars, options, record) => Stream.unwrap(Effect.gen(function* () {
39
+ const sawUsage = yield* Ref.make(false);
40
+ const completionChars = yield* Ref.make(0);
41
+ const tapped = stream.pipe(Stream.tap((chunk) => Effect.gen(function* () {
42
+ yield* Ref.update(completionChars, (count) => count + chunk.delta.length);
43
+ if (chunk.usage !== undefined) {
44
+ yield* Ref.set(sawUsage, true);
45
+ yield* record(chunk.usage);
46
+ }
47
+ })));
48
+ // Appended only after a SUCCESSFUL stream that reported nothing: a
49
+ // failed request estimates nothing, and a backend that reported real
50
+ // usage is never double-counted.
51
+ const tail = Stream.unwrap(Effect.gen(function* () {
52
+ if (yield* Ref.get(sawUsage)) {
53
+ return Stream.empty;
54
+ }
55
+ const usage = estimateUsage(promptChars, yield* Ref.get(completionChars), options);
56
+ yield* record(usage);
57
+ return Stream.succeed(LlmChunk.make({
58
+ delta: "",
59
+ usage,
60
+ metadata: { model: estimatedModelLabel(options.referenceModel) }
61
+ }));
62
+ }));
63
+ return Stream.concat(tapped, tail);
64
+ }));
65
+ /**
66
+ * Decorates a service so every request yields usage — real when the backend
67
+ * reported it, estimated (and labelled so) when it did not — and exposes the
68
+ * running totals for per-run reports.
69
+ */
70
+ export const makeEstimatedUsageMeter = Effect.fn("@llm4ts/flow/EstimatedUsage.make")(function* (service, options) {
71
+ const totals = yield* Ref.make(undefined);
72
+ const record = (usage) => Ref.update(totals, (previous) => mergeTotals(previous, usage));
73
+ const decorated = {
74
+ executeStream: (prompt) => estimatedStream(service.executeStream(prompt), prompt.length, options, record),
75
+ executeStreamWithHistory: (messages) => estimatedStream(service.executeStreamWithHistory(messages), messagesChars(messages), options, record),
76
+ executeWithTools: (prompt, tools) => service.executeWithTools(prompt, tools),
77
+ executeStructured: (prompt, schema, jsonSchema) => service
78
+ .executeStructured(prompt, schema, jsonSchema)
79
+ .pipe(Effect.tap((value) => record(estimateUsage(prompt.length, (JSON.stringify(value) ?? "").length, options)))),
80
+ executeStructuredWithUsage: (prompt, schema, jsonSchema) => service.executeStructuredWithUsage(prompt, schema, jsonSchema).pipe(Effect.flatMap(([value, usage, model]) => {
81
+ if (usage !== undefined) {
82
+ return record(usage).pipe(Effect.as([value, usage, model]));
83
+ }
84
+ const estimated = estimateUsage(prompt.length, (JSON.stringify(value) ?? "").length, options);
85
+ return record(estimated).pipe(Effect.as([value, estimated, estimatedModelLabel(options.referenceModel)]));
86
+ })),
87
+ isAvailable: service.isAvailable
88
+ };
89
+ return { service: decorated, totals: Ref.get(totals) };
90
+ });
91
+ //# sourceMappingURL=EstimatedUsage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EstimatedUsage.js","sourceRoot":"","sources":["../src/EstimatedUsage.ts"],"names":[],"mappings":"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"}
package/dist/GitTool.d.ts CHANGED
@@ -36,6 +36,13 @@ export interface GitToolShape {
36
36
  readonly checkoutOrCreate: (name: string) => Effect.Effect<void, FlowError>;
37
37
  readonly createBranch: (name: string) => Effect.Effect<CreateBranch, FlowError>;
38
38
  readonly commitAll: (message: string) => Effect.Effect<CommitResult, FlowError>;
39
+ /**
40
+ * Stage ONLY `paths` (added, modified, or deleted) and commit them. The
41
+ * per-program commit primitive: when several programs are extracted at
42
+ * once, `commitAll` would sweep another program's half-written files into
43
+ * this program's commit. An empty `paths` is `NothingToCommit`.
44
+ */
45
+ readonly commitPaths: (message: string, paths: ReadonlyArray<string>) => Effect.Effect<CommitResult, FlowError>;
39
46
  readonly push: (remote: string, branch: string) => Effect.Effect<void, FlowError>;
40
47
  readonly checkpoint: Effect.Effect<string, FlowError>;
41
48
  readonly rollback: (checkpoint: string) => Effect.Effect<void, FlowError>;
@@ -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
@@ -76,13 +76,16 @@ export const makeGitTool = (process, workDir, events) => {
76
76
  }))));
77
77
  const checkout = (name) => write("git checkout", runOrFail(["checkout", name]).pipe(Effect.asVoid));
78
78
  const addAll = runOrFail(["add", "-A"]).pipe(Effect.asVoid);
79
- const commitAllEffect = (message) => Effect.gen(function* () {
80
- yield* addAll;
79
+ const commitStaged = (message) => Effect.gen(function* () {
81
80
  const result = yield* run(["commit", "-m", message]);
82
81
  if (result.exitCode === 0) {
83
82
  return new Committed();
84
83
  }
85
- if (problem(result).includes("nothing to commit")) {
84
+ // "nothing to commit, working tree clean" when the tree is clean;
85
+ // "nothing added to commit but untracked files present" when the only
86
+ // changes are files this commit was not asked to stage.
87
+ const detail = problem(result);
88
+ if (detail.includes("nothing to commit") || detail.includes("nothing added to commit")) {
86
89
  return new NothingToCommit();
87
90
  }
88
91
  return yield* ProcessError.make({
@@ -90,6 +93,13 @@ export const makeGitTool = (process, workDir, events) => {
90
93
  detail: problem(result)
91
94
  });
92
95
  });
96
+ const commitAllEffect = (message) => addAll.pipe(Effect.andThen(commitStaged(message)));
97
+ // `add -A -- <paths>` stages additions, modifications, AND deletions of
98
+ // exactly those paths; a plain `add` would refuse a deleted file. `--only`
99
+ // on commit would also work but ignores paths that were never tracked.
100
+ const commitPathsEffect = (message, paths) => paths.length === 0
101
+ ? Effect.succeed(new NothingToCommit())
102
+ : runOrFail(["add", "-A", "--", ...paths]).pipe(Effect.andThen(commitStaged(message)));
93
103
  return {
94
104
  init: write("git init", runOrFail(["-c", "init.defaultBranch=main", "init"]).pipe(Effect.asVoid)),
95
105
  initBare: write("git init --bare", runOrFail(["-c", "init.defaultBranch=main", "init", "--bare"]).pipe(Effect.asVoid)),
@@ -119,6 +129,7 @@ export const makeGitTool = (process, workDir, events) => {
119
129
  createBranch,
120
130
  checkoutOrCreate: (name) => Effect.flatMap(createBranch(name), (created) => created._tag === "Created" ? Effect.void : checkout(name)),
121
131
  commitAll: (message) => write("git commitAll", commitAllEffect(message)),
132
+ commitPaths: (message, paths) => write("git commitPaths", commitPathsEffect(message, paths)),
122
133
  push: (remote, branch) => gate(Capabilities.GitPush, "git push", runOrFail(["push", "-u", remote, branch]).pipe(Effect.asVoid)),
123
134
  checkpoint: read("git checkpoint", runOrFail(["rev-parse", "HEAD"])),
124
135
  rollback: (checkpoint) => write("git rollback", runOrFail(["reset", "--hard", checkpoint]).pipe(Effect.asVoid)),
@@ -1 +1 @@
1
- {"version":3,"file":"GitTool.js","sourceRoot":"","sources":["../src/GitTool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"GitTool.js","sourceRoot":"","sources":["../src/GitTool.ts"],"names":[],"mappings":"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"}