@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.
- package/dist/BoardSync.d.ts +81 -0
- package/dist/BoardSync.d.ts.map +1 -0
- package/dist/BoardSync.js +259 -0
- package/dist/BoardSync.js.map +1 -0
- package/dist/EstimatedUsage.d.ts +28 -0
- package/dist/EstimatedUsage.d.ts.map +1 -0
- package/dist/EstimatedUsage.js +91 -0
- package/dist/EstimatedUsage.js.map +1 -0
- package/dist/GitTool.d.ts +7 -0
- package/dist/GitTool.d.ts.map +1 -1
- package/dist/GitTool.js +14 -3
- package/dist/GitTool.js.map +1 -1
- package/dist/Pack.d.ts +1 -0
- package/dist/Pack.d.ts.map +1 -1
- package/dist/Pack.js +7 -0
- package/dist/Pack.js.map +1 -1
- package/dist/PageSpec.d.ts +104 -0
- package/dist/PageSpec.d.ts.map +1 -0
- package/dist/PageSpec.js +272 -0
- package/dist/PageSpec.js.map +1 -0
- package/dist/SpecChecks.d.ts +6 -1
- package/dist/SpecChecks.d.ts.map +1 -1
- package/dist/SpecChecks.js +11 -4
- package/dist/SpecChecks.js.map +1 -1
- package/dist/Survey.d.ts +38 -1
- package/dist/Survey.d.ts.map +1 -1
- package/dist/Survey.js +101 -5
- package/dist/Survey.js.map +1 -1
- package/dist/TransientRetry.d.ts.map +1 -1
- package/dist/TransientRetry.js +8 -1
- package/dist/TransientRetry.js.map +1 -1
- package/dist/Workspace.d.ts +44 -5
- package/dist/Workspace.d.ts.map +1 -1
- package/dist/Workspace.js +84 -14
- package/dist/Workspace.js.map +1 -1
- package/package.json +5 -2
- package/src/BoardSync.ts +358 -0
- package/src/EstimatedUsage.ts +180 -0
- package/src/GitTool.ts +31 -3
- package/src/Pack.ts +11 -0
- package/src/PageSpec.ts +354 -0
- package/src/SpecChecks.ts +12 -6
- package/src/Survey.ts +137 -5
- package/src/TransientRetry.ts +8 -1
- 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>;
|
package/dist/GitTool.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GitTool.d.ts","sourceRoot":"","sources":["../src/GitTool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,OAAO,KAAK,EAAE,oBAAoB,EAAiB,MAAM,8BAA8B,CAAA;AACvF,OAAO,EAAgB,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC7D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;;AAGtD,qBAAa,aAAc,SAAQ,kBAAkD;CAAG;;AACxF,qBAAa,mBAAoB,SAAQ,wBAGxC;CAAG;AACJ,eAAO,MAAM,YAAY,2EAAqD,CAAA;AAC9E,MAAM,MAAM,YAAY,GAAG,OAAO,YAAY,CAAC,IAAI,CAAA;;AAEnD,qBAAa,SAAU,SAAQ,cAAgD;CAAG;;AAClF,qBAAa,eAAgB,SAAQ,oBAA4D;CAAG;AACpG,eAAO,MAAM,YAAY,mEAA6C,CAAA;AACtE,MAAM,MAAM,YAAY,GAAG,OAAO,YAAY,CAAC,IAAI,CAAA;AAEnD,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;IAC7C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;IACjD,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;IAC/E,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;IACjD,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;IACxD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;IAC/C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;IAClD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;IACtD,QAAQ,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;IAC3F,QAAQ,CAAC,gBAAgB,EAAE,CACzB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC,EAC5B,QAAQ,CAAC,EAAE,OAAO,KACf,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;IACrC,QAAQ,CAAC,kBAAkB,EAAE,CAC3B,IAAI,EAAE,MAAM,EACZ,QAAQ,CAAC,EAAE,OAAO,KACf,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC,CAAA;IACpD,QAAQ,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;IACjF,QAAQ,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;IACnE,QAAQ,CAAC,gBAAgB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;IAC3E,QAAQ,CAAC,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,SAAS,CAAC,CAAA;IAC/E,QAAQ,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,SAAS,CAAC,CAAA;IAC/E,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;IACjF,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;IACrD,QAAQ,CAAC,QAAQ,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;IACzE,QAAQ,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;IACtF,QAAQ,CAAC,cAAc,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;CAC1E;AAcD,eAAO,MAAM,WAAW,GACtB,SAAS,oBAAoB,EAC7B,SAAS,MAAM,EACf,QAAQ,eAAe,KACtB,
|
|
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
|
|
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
|
-
|
|
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)),
|
package/dist/GitTool.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GitTool.js","sourceRoot":"","sources":["../src/GitTool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,YAAY,EAAmB,MAAM,yBAAyB,CAAA;AAEvE,OAAO,EAAE,YAAY,EAAkB,MAAM,gBAAgB,CAAA;AAE7D,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAE9C,MAAM,OAAO,aAAc,SAAQ,MAAM,CAAC,WAAW,EAAiB,CAAC,SAAS,EAAE,EAAE,CAAC;CAAG;AACxF,MAAM,OAAO,mBAAoB,SAAQ,MAAM,CAAC,WAAW,EAAuB,CAChF,eAAe,EACf,EAAE,CACH;CAAG;AACJ,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,aAAa,EAAE,mBAAmB,CAAC,CAAC,CAAA;AAG9E,MAAM,OAAO,SAAU,SAAQ,MAAM,CAAC,WAAW,EAAa,CAAC,WAAW,EAAE,EAAE,CAAC;CAAG;AAClF,MAAM,OAAO,eAAgB,SAAQ,MAAM,CAAC,WAAW,EAAmB,CAAC,iBAAiB,EAAE,EAAE,CAAC;CAAG;AACpG,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"GitTool.js","sourceRoot":"","sources":["../src/GitTool.ts"],"names":[],"mappings":"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"}
|