@llm4ts/flow 0.1.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/LICENSE +21 -0
- package/README.md +41 -0
- package/dist/AzureDevOpsTool.d.ts +60 -0
- package/dist/AzureDevOpsTool.d.ts.map +1 -0
- package/dist/AzureDevOpsTool.js +163 -0
- package/dist/AzureDevOpsTool.js.map +1 -0
- package/dist/Bench.d.ts +133 -0
- package/dist/Bench.d.ts.map +1 -0
- package/dist/Bench.js +272 -0
- package/dist/Bench.js.map +1 -0
- package/dist/BenchReport.d.ts +9 -0
- package/dist/BenchReport.d.ts.map +1 -0
- package/dist/BenchReport.js +360 -0
- package/dist/BenchReport.js.map +1 -0
- package/dist/CapabilityGuard.d.ts +6 -0
- package/dist/CapabilityGuard.d.ts.map +1 -0
- package/dist/CapabilityGuard.js +25 -0
- package/dist/CapabilityGuard.js.map +1 -0
- package/dist/Chat.d.ts +15 -0
- package/dist/Chat.d.ts.map +1 -0
- package/dist/Chat.js +36 -0
- package/dist/Chat.js.map +1 -0
- package/dist/Classified.d.ts +14 -0
- package/dist/Classified.d.ts.map +1 -0
- package/dist/Classified.js +48 -0
- package/dist/Classified.js.map +1 -0
- package/dist/CostLedger.d.ts +55 -0
- package/dist/CostLedger.d.ts.map +1 -0
- package/dist/CostLedger.js +126 -0
- package/dist/CostLedger.js.map +1 -0
- package/dist/CostTracker.d.ts +13 -0
- package/dist/CostTracker.d.ts.map +1 -0
- package/dist/CostTracker.js +116 -0
- package/dist/CostTracker.js.map +1 -0
- package/dist/Equiv.d.ts +163 -0
- package/dist/Equiv.d.ts.map +1 -0
- package/dist/Equiv.js +256 -0
- package/dist/Equiv.js.map +1 -0
- package/dist/EquivReport.d.ts +16 -0
- package/dist/EquivReport.d.ts.map +1 -0
- package/dist/EquivReport.js +77 -0
- package/dist/EquivReport.js.map +1 -0
- package/dist/Flow.d.ts +25 -0
- package/dist/Flow.d.ts.map +1 -0
- package/dist/Flow.js +39 -0
- package/dist/Flow.js.map +1 -0
- package/dist/FlowContext.d.ts +23 -0
- package/dist/FlowContext.d.ts.map +1 -0
- package/dist/FlowContext.js +4 -0
- package/dist/FlowContext.js.map +1 -0
- package/dist/FlowError.d.ts +80 -0
- package/dist/FlowError.d.ts.map +1 -0
- package/dist/FlowError.js +92 -0
- package/dist/FlowError.js.map +1 -0
- package/dist/FlowEvents.d.ts +101 -0
- package/dist/FlowEvents.d.ts.map +1 -0
- package/dist/FlowEvents.js +103 -0
- package/dist/FlowEvents.js.map +1 -0
- package/dist/FlowRecorder.d.ts +26 -0
- package/dist/FlowRecorder.d.ts.map +1 -0
- package/dist/FlowRecorder.js +74 -0
- package/dist/FlowRecorder.js.map +1 -0
- package/dist/GitHubTool.d.ts +53 -0
- package/dist/GitHubTool.d.ts.map +1 -0
- package/dist/GitHubTool.js +191 -0
- package/dist/GitHubTool.js.map +1 -0
- package/dist/GitTool.d.ts +46 -0
- package/dist/GitTool.d.ts.map +1 -0
- package/dist/GitTool.js +97 -0
- package/dist/GitTool.js.map +1 -0
- package/dist/Interaction.d.ts +21 -0
- package/dist/Interaction.d.ts.map +1 -0
- package/dist/Interaction.js +9 -0
- package/dist/Interaction.js.map +1 -0
- package/dist/McpServer.d.ts +18 -0
- package/dist/McpServer.d.ts.map +1 -0
- package/dist/McpServer.js +122 -0
- package/dist/McpServer.js.map +1 -0
- package/dist/Mermaid.d.ts +7 -0
- package/dist/Mermaid.d.ts.map +1 -0
- package/dist/Mermaid.js +98 -0
- package/dist/Mermaid.js.map +1 -0
- package/dist/Pack.d.ts +40 -0
- package/dist/Pack.d.ts.map +1 -0
- package/dist/Pack.js +141 -0
- package/dist/Pack.js.map +1 -0
- package/dist/Package.d.ts +2 -0
- package/dist/Package.d.ts.map +1 -0
- package/dist/Package.js +2 -0
- package/dist/Package.js.map +1 -0
- package/dist/Persistence.d.ts +32 -0
- package/dist/Persistence.d.ts.map +1 -0
- package/dist/Persistence.js +85 -0
- package/dist/Persistence.js.map +1 -0
- package/dist/Plan.d.ts +26 -0
- package/dist/Plan.d.ts.map +1 -0
- package/dist/Plan.js +101 -0
- package/dist/Plan.js.map +1 -0
- package/dist/PlanExecution.d.ts +7 -0
- package/dist/PlanExecution.d.ts.map +1 -0
- package/dist/PlanExecution.js +19 -0
- package/dist/PlanExecution.js.map +1 -0
- package/dist/Planner.d.ts +32 -0
- package/dist/Planner.d.ts.map +1 -0
- package/dist/Planner.js +97 -0
- package/dist/Planner.js.map +1 -0
- package/dist/PrSummary.d.ts +15 -0
- package/dist/PrSummary.d.ts.map +1 -0
- package/dist/PrSummary.js +29 -0
- package/dist/PrSummary.js.map +1 -0
- package/dist/PriceList.d.ts +11 -0
- package/dist/PriceList.d.ts.map +1 -0
- package/dist/PriceList.js +79 -0
- package/dist/PriceList.js.map +1 -0
- package/dist/Provenance.d.ts +27 -0
- package/dist/Provenance.d.ts.map +1 -0
- package/dist/Provenance.js +38 -0
- package/dist/Provenance.js.map +1 -0
- package/dist/Replay.d.ts +29 -0
- package/dist/Replay.d.ts.map +1 -0
- package/dist/Replay.js +181 -0
- package/dist/Replay.js.map +1 -0
- package/dist/Review.d.ts +71 -0
- package/dist/Review.d.ts.map +1 -0
- package/dist/Review.js +204 -0
- package/dist/Review.js.map +1 -0
- package/dist/ReviewCache.d.ts +6 -0
- package/dist/ReviewCache.d.ts.map +1 -0
- package/dist/ReviewCache.js +28 -0
- package/dist/ReviewCache.js.map +1 -0
- package/dist/Reviewer.d.ts +12 -0
- package/dist/Reviewer.d.ts.map +1 -0
- package/dist/Reviewer.js +30 -0
- package/dist/Reviewer.js.map +1 -0
- package/dist/SpecChecks.d.ts +17 -0
- package/dist/SpecChecks.d.ts.map +1 -0
- package/dist/SpecChecks.js +107 -0
- package/dist/SpecChecks.js.map +1 -0
- package/dist/Survey.d.ts +32 -0
- package/dist/Survey.d.ts.map +1 -0
- package/dist/Survey.js +119 -0
- package/dist/Survey.js.map +1 -0
- package/dist/TransientRetry.d.ts +16 -0
- package/dist/TransientRetry.d.ts.map +1 -0
- package/dist/TransientRetry.js +102 -0
- package/dist/TransientRetry.js.map +1 -0
- package/dist/Workspace.d.ts +39 -0
- package/dist/Workspace.d.ts.map +1 -0
- package/dist/Workspace.js +192 -0
- package/dist/Workspace.js.map +1 -0
- package/dist/WorkspaceLayout.d.ts +3 -0
- package/dist/WorkspaceLayout.d.ts.map +1 -0
- package/dist/WorkspaceLayout.js +19 -0
- package/dist/WorkspaceLayout.js.map +1 -0
- package/dist/WorkspaceTools.d.ts +4 -0
- package/dist/WorkspaceTools.d.ts.map +1 -0
- package/dist/WorkspaceTools.js +130 -0
- package/dist/WorkspaceTools.js.map +1 -0
- package/package.json +91 -0
- package/src/AzureDevOpsTool.ts +291 -0
- package/src/Bench.ts +340 -0
- package/src/BenchReport.ts +447 -0
- package/src/CapabilityGuard.ts +43 -0
- package/src/Chat.ts +60 -0
- package/src/Classified.ts +67 -0
- package/src/CostLedger.ts +171 -0
- package/src/CostTracker.ts +170 -0
- package/src/Equiv.ts +378 -0
- package/src/EquivReport.ts +92 -0
- package/src/Flow.ts +72 -0
- package/src/FlowContext.ts +23 -0
- package/src/FlowError.ts +112 -0
- package/src/FlowEvents.ts +147 -0
- package/src/FlowRecorder.ts +116 -0
- package/src/GitHubTool.ts +315 -0
- package/src/GitTool.ts +214 -0
- package/src/Interaction.ts +23 -0
- package/src/McpServer.ts +168 -0
- package/src/Mermaid.ts +112 -0
- package/src/Pack.ts +213 -0
- package/src/Package.ts +1 -0
- package/src/Persistence.ts +198 -0
- package/src/Plan.ts +119 -0
- package/src/PlanExecution.ts +46 -0
- package/src/Planner.ts +134 -0
- package/src/PrSummary.ts +37 -0
- package/src/PriceList.ts +91 -0
- package/src/Provenance.ts +85 -0
- package/src/Replay.ts +265 -0
- package/src/Review.ts +337 -0
- package/src/ReviewCache.ts +45 -0
- package/src/Reviewer.ts +31 -0
- package/src/SpecChecks.ts +143 -0
- package/src/Survey.ts +144 -0
- package/src/TransientRetry.ts +238 -0
- package/src/Workspace.ts +255 -0
- package/src/WorkspaceLayout.ts +22 -0
- package/src/WorkspaceTools.ts +188 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Riccardo Merolla
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# @llm4ts/flow
|
|
2
|
+
|
|
3
|
+
Flow orchestration for [llm4ts](https://github.com/riccardomerolla/llm4ts):
|
|
4
|
+
`FlowContext`, plans and plan execution, review cycles, workflow events,
|
|
5
|
+
plain-file persistence, Git/GitHub/Azure DevOps tools, trace recording and
|
|
6
|
+
replay, cost tracking, and benchmarking.
|
|
7
|
+
|
|
8
|
+
## Install
|
|
9
|
+
|
|
10
|
+
```bash
|
|
11
|
+
npm install @llm4ts/flow @llm4ts/core effect
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
Requires Node.js >= 22. `effect` is a peer dependency pinned to the Effect 4
|
|
15
|
+
beta line.
|
|
16
|
+
|
|
17
|
+
## Usage
|
|
18
|
+
|
|
19
|
+
The package exposes explicit subpath exports:
|
|
20
|
+
|
|
21
|
+
```ts
|
|
22
|
+
import { FlowContext } from "@llm4ts/flow/FlowContext"
|
|
23
|
+
import { Plan, planFrom } from "@llm4ts/flow/Plan"
|
|
24
|
+
import { AssistantMessage } from "@llm4ts/flow/FlowEvents"
|
|
25
|
+
import { reviewAndFixLoop } from "@llm4ts/flow/Review"
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Flows are usually run through
|
|
29
|
+
[`@llm4ts/runner`](https://www.npmjs.com/package/@llm4ts/runner), which wires
|
|
30
|
+
the Node boundaries (HTTP, processes, filesystem) and hands your flow body a
|
|
31
|
+
ready `FlowContext` — no manual layer assembly required.
|
|
32
|
+
|
|
33
|
+
## Documentation
|
|
34
|
+
|
|
35
|
+
- [Repository and full documentation](https://github.com/riccardomerolla/llm4ts)
|
|
36
|
+
- [Architecture guide](https://github.com/riccardomerolla/llm4ts/blob/main/docs/architecture.md)
|
|
37
|
+
- [Runnable examples](https://github.com/riccardomerolla/llm4ts/tree/main/examples)
|
|
38
|
+
|
|
39
|
+
## License
|
|
40
|
+
|
|
41
|
+
MIT
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import * as Duration from "effect/Duration";
|
|
2
|
+
import * as Effect from "effect/Effect";
|
|
3
|
+
import * as Schema from "effect/Schema";
|
|
4
|
+
import type { HttpClientShape } from "@llm4ts/core/HttpClient";
|
|
5
|
+
import { ProcessError, type FlowError } from "./FlowError.ts";
|
|
6
|
+
import type { FlowEventsShape } from "./FlowEvents.ts";
|
|
7
|
+
declare const AdoRequest_base: Schema.Class<AdoRequest, Schema.Struct<{
|
|
8
|
+
readonly method: Schema.String;
|
|
9
|
+
readonly url: Schema.String;
|
|
10
|
+
readonly body: Schema.optionalKey<Schema.String>;
|
|
11
|
+
readonly contentType: Schema.withConstructorDefault<Schema.String>;
|
|
12
|
+
}>, {}>;
|
|
13
|
+
export declare class AdoRequest extends AdoRequest_base {
|
|
14
|
+
}
|
|
15
|
+
declare const WorkItem_base: Schema.Class<WorkItem, Schema.Struct<{
|
|
16
|
+
readonly id: Schema.Int;
|
|
17
|
+
readonly title: Schema.String;
|
|
18
|
+
readonly description: Schema.String;
|
|
19
|
+
readonly acceptanceCriteria: Schema.String;
|
|
20
|
+
readonly state: Schema.String;
|
|
21
|
+
readonly tags: Schema.$Array<Schema.String>;
|
|
22
|
+
}>, {}>;
|
|
23
|
+
export declare class WorkItem extends WorkItem_base {
|
|
24
|
+
}
|
|
25
|
+
declare const AdoPullRequest_base: Schema.Class<AdoPullRequest, Schema.Struct<{
|
|
26
|
+
readonly id: Schema.Int;
|
|
27
|
+
readonly repoId: Schema.String;
|
|
28
|
+
readonly projectId: Schema.String;
|
|
29
|
+
readonly webUrl: Schema.String;
|
|
30
|
+
}>, {}>;
|
|
31
|
+
export declare class AdoPullRequest extends AdoPullRequest_base {
|
|
32
|
+
}
|
|
33
|
+
declare const AdoConfig_base: Schema.Class<AdoConfig, Schema.Struct<{
|
|
34
|
+
readonly orgUrl: Schema.String;
|
|
35
|
+
readonly project: Schema.String;
|
|
36
|
+
readonly repository: Schema.String;
|
|
37
|
+
readonly pat: Schema.Redacted<Schema.String>;
|
|
38
|
+
readonly apiVersion: Schema.withConstructorDefault<Schema.String>;
|
|
39
|
+
}>, {}>;
|
|
40
|
+
export declare class AdoConfig extends AdoConfig_base {
|
|
41
|
+
}
|
|
42
|
+
export declare const authorizationHeader: (config: AdoConfig) => Readonly<Record<string, string>>;
|
|
43
|
+
export declare const readWorkItemRequest: (config: AdoConfig, id: number) => AdoRequest;
|
|
44
|
+
export declare const wiqlRequest: (config: AdoConfig, query: string) => AdoRequest;
|
|
45
|
+
export declare const setFieldsRequest: (config: AdoConfig, id: number, fields: Readonly<Record<string, string>>) => AdoRequest;
|
|
46
|
+
export declare const createPullRequestRequest: (config: AdoConfig, sourceRef: string, targetRef: string, title: string, description: string) => AdoRequest;
|
|
47
|
+
export declare const parseWorkItem: (json: string) => Effect.Effect<WorkItem, ProcessError>;
|
|
48
|
+
export declare const parseWiqlIds: (json: string) => Effect.Effect<ReadonlyArray<number>, ProcessError>;
|
|
49
|
+
export declare const parsePullRequest: (config: AdoConfig, json: string) => Effect.Effect<AdoPullRequest, ProcessError>;
|
|
50
|
+
export interface AzureDevOpsToolShape {
|
|
51
|
+
readonly readWorkItem: (id: number) => Effect.Effect<WorkItem, FlowError>;
|
|
52
|
+
readonly wiqlIds: (query: string) => Effect.Effect<ReadonlyArray<number>, FlowError>;
|
|
53
|
+
readonly setFields: (id: number, fields: Readonly<Record<string, string>>) => Effect.Effect<void, FlowError>;
|
|
54
|
+
readonly setState: (id: number, state: string) => Effect.Effect<void, FlowError>;
|
|
55
|
+
readonly setAcceptanceCriteria: (id: number, text: string) => Effect.Effect<void, FlowError>;
|
|
56
|
+
readonly createPr: (sourceRef: string, targetRef: string, title: string, body: string) => Effect.Effect<AdoPullRequest, FlowError>;
|
|
57
|
+
}
|
|
58
|
+
export declare const makeAzureDevOpsTool: (config: AdoConfig, http: HttpClientShape, events: FlowEventsShape, timeout?: Duration.Duration) => AzureDevOpsToolShape;
|
|
59
|
+
export {};
|
|
60
|
+
//# sourceMappingURL=AzureDevOpsTool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AzureDevOpsTool.d.ts","sourceRoot":"","sources":["../src/AzureDevOpsTool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import * as Duration from "effect/Duration";
|
|
2
|
+
import * as Effect from "effect/Effect";
|
|
3
|
+
import * as Redacted from "effect/Redacted";
|
|
4
|
+
import * as Schema from "effect/Schema";
|
|
5
|
+
import { Capabilities } from "@llm4ts/core/Capability";
|
|
6
|
+
import { ProcessError } from "./FlowError.js";
|
|
7
|
+
import { guarded } from "./CapabilityGuard.js";
|
|
8
|
+
export class AdoRequest extends Schema.Class("AdoRequest")({
|
|
9
|
+
method: Schema.String,
|
|
10
|
+
url: Schema.String,
|
|
11
|
+
body: Schema.optionalKey(Schema.String),
|
|
12
|
+
contentType: Schema.String.pipe(Schema.withConstructorDefault(Effect.succeed("application/json")))
|
|
13
|
+
}) {
|
|
14
|
+
}
|
|
15
|
+
export class WorkItem extends Schema.Class("WorkItem")({
|
|
16
|
+
id: Schema.Int,
|
|
17
|
+
title: Schema.String,
|
|
18
|
+
description: Schema.String,
|
|
19
|
+
acceptanceCriteria: Schema.String,
|
|
20
|
+
state: Schema.String,
|
|
21
|
+
tags: Schema.Array(Schema.String)
|
|
22
|
+
}) {
|
|
23
|
+
}
|
|
24
|
+
export class AdoPullRequest extends Schema.Class("AdoPullRequest")({
|
|
25
|
+
id: Schema.Int,
|
|
26
|
+
repoId: Schema.String,
|
|
27
|
+
projectId: Schema.String,
|
|
28
|
+
webUrl: Schema.String
|
|
29
|
+
}) {
|
|
30
|
+
}
|
|
31
|
+
export class AdoConfig extends Schema.Class("AdoConfig")({
|
|
32
|
+
orgUrl: Schema.String,
|
|
33
|
+
project: Schema.String,
|
|
34
|
+
repository: Schema.String,
|
|
35
|
+
pat: Schema.Redacted(Schema.String, {
|
|
36
|
+
disallowJsonEncode: true
|
|
37
|
+
}),
|
|
38
|
+
apiVersion: Schema.String.pipe(Schema.withConstructorDefault(Effect.succeed("7.1")))
|
|
39
|
+
}) {
|
|
40
|
+
}
|
|
41
|
+
const encodeBase64 = (value) => {
|
|
42
|
+
const alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
|
43
|
+
const bytes = new TextEncoder().encode(value);
|
|
44
|
+
let encoded = "";
|
|
45
|
+
for (let index = 0; index < bytes.length; index += 3) {
|
|
46
|
+
const first = bytes[index] ?? 0;
|
|
47
|
+
const second = bytes[index + 1];
|
|
48
|
+
const third = bytes[index + 2];
|
|
49
|
+
const bits = (first << 16) | ((second ?? 0) << 8) | (third ?? 0);
|
|
50
|
+
encoded += alphabet[(bits >>> 18) & 63] ?? "";
|
|
51
|
+
encoded += alphabet[(bits >>> 12) & 63] ?? "";
|
|
52
|
+
encoded += second === undefined ? "=" : (alphabet[(bits >>> 6) & 63] ?? "");
|
|
53
|
+
encoded += third === undefined ? "=" : (alphabet[bits & 63] ?? "");
|
|
54
|
+
}
|
|
55
|
+
return encoded;
|
|
56
|
+
};
|
|
57
|
+
export const authorizationHeader = (config) => ({
|
|
58
|
+
Authorization: `Basic ${encodeBase64(`:${Redacted.value(config.pat)}`)}`
|
|
59
|
+
});
|
|
60
|
+
const witBase = (config) => `${config.orgUrl}/${config.project}/_apis/wit`;
|
|
61
|
+
const gitBase = (config) => `${config.orgUrl}/${config.project}/_apis/git/repositories/${config.repository}`;
|
|
62
|
+
const patchOperations = (fields) => Object.entries(fields).map(([name, value]) => ({
|
|
63
|
+
op: "add",
|
|
64
|
+
path: `/fields/${name}`,
|
|
65
|
+
value
|
|
66
|
+
}));
|
|
67
|
+
export const readWorkItemRequest = (config, id) => AdoRequest.make({
|
|
68
|
+
method: "GET",
|
|
69
|
+
url: `${witBase(config)}/workitems/${id}?$expand=relations&api-version=${config.apiVersion}`
|
|
70
|
+
});
|
|
71
|
+
export const wiqlRequest = (config, query) => AdoRequest.make({
|
|
72
|
+
method: "POST",
|
|
73
|
+
url: `${witBase(config)}/wiql?api-version=${config.apiVersion}`,
|
|
74
|
+
body: JSON.stringify({ query })
|
|
75
|
+
});
|
|
76
|
+
export const setFieldsRequest = (config, id, fields) => AdoRequest.make({
|
|
77
|
+
method: "PATCH",
|
|
78
|
+
url: `${witBase(config)}/workitems/${id}?api-version=${config.apiVersion}`,
|
|
79
|
+
body: JSON.stringify(patchOperations(fields)),
|
|
80
|
+
contentType: "application/json-patch+json"
|
|
81
|
+
});
|
|
82
|
+
export const createPullRequestRequest = (config, sourceRef, targetRef, title, description) => AdoRequest.make({
|
|
83
|
+
method: "POST",
|
|
84
|
+
url: `${gitBase(config)}/pullrequests?api-version=${config.apiVersion}`,
|
|
85
|
+
body: JSON.stringify({
|
|
86
|
+
sourceRefName: sourceRef,
|
|
87
|
+
targetRefName: targetRef,
|
|
88
|
+
title,
|
|
89
|
+
description
|
|
90
|
+
})
|
|
91
|
+
});
|
|
92
|
+
const field = (fields, name) => {
|
|
93
|
+
const value = fields[name];
|
|
94
|
+
return typeof value === "string" ? value : "";
|
|
95
|
+
};
|
|
96
|
+
export const parseWorkItem = (json) => Schema.decodeUnknownEffect(Schema.fromJsonString(Schema.Struct({
|
|
97
|
+
id: Schema.Int,
|
|
98
|
+
fields: Schema.Record(Schema.String, Schema.Json)
|
|
99
|
+
})))(json).pipe(Effect.map((item) => {
|
|
100
|
+
const tags = field(item.fields, "System.Tags")
|
|
101
|
+
.split(";")
|
|
102
|
+
.map((tag) => tag.trim())
|
|
103
|
+
.filter((tag) => tag.length > 0);
|
|
104
|
+
return WorkItem.make({
|
|
105
|
+
id: item.id,
|
|
106
|
+
title: field(item.fields, "System.Title"),
|
|
107
|
+
description: field(item.fields, "System.Description"),
|
|
108
|
+
acceptanceCriteria: field(item.fields, "Microsoft.VSTS.Common.AcceptanceCriteria"),
|
|
109
|
+
state: field(item.fields, "System.State"),
|
|
110
|
+
tags
|
|
111
|
+
});
|
|
112
|
+
}), Effect.mapError((error) => ProcessError.make({
|
|
113
|
+
message: "ado parse work item",
|
|
114
|
+
detail: String(error)
|
|
115
|
+
})));
|
|
116
|
+
export const parseWiqlIds = (json) => Schema.decodeUnknownEffect(Schema.fromJsonString(Schema.Struct({
|
|
117
|
+
workItems: Schema.Array(Schema.Struct({
|
|
118
|
+
id: Schema.Int
|
|
119
|
+
}))
|
|
120
|
+
})))(json).pipe(Effect.map((result) => result.workItems.map((item) => item.id)), Effect.mapError((error) => ProcessError.make({
|
|
121
|
+
message: "ado parse wiql",
|
|
122
|
+
detail: String(error)
|
|
123
|
+
})));
|
|
124
|
+
export const parsePullRequest = (config, json) => Schema.decodeUnknownEffect(Schema.fromJsonString(Schema.Struct({
|
|
125
|
+
pullRequestId: Schema.Int,
|
|
126
|
+
repository: Schema.Struct({
|
|
127
|
+
id: Schema.String,
|
|
128
|
+
project: Schema.Struct({
|
|
129
|
+
id: Schema.String
|
|
130
|
+
})
|
|
131
|
+
})
|
|
132
|
+
})))(json).pipe(Effect.map((result) => AdoPullRequest.make({
|
|
133
|
+
id: result.pullRequestId,
|
|
134
|
+
repoId: result.repository.id,
|
|
135
|
+
projectId: result.repository.project.id,
|
|
136
|
+
webUrl: `${config.orgUrl}/${config.project}/_git/` +
|
|
137
|
+
`${config.repository}/pullrequest/${result.pullRequestId}`
|
|
138
|
+
})), Effect.mapError((error) => ProcessError.make({
|
|
139
|
+
message: "ado parse pull request",
|
|
140
|
+
detail: String(error)
|
|
141
|
+
})));
|
|
142
|
+
export const makeAzureDevOpsTool = (config, http, events, timeout = Duration.seconds(30)) => {
|
|
143
|
+
const run = (request) => http
|
|
144
|
+
.send(request.method, request.url, request.body, authorizationHeader(config), request.contentType, timeout)
|
|
145
|
+
.pipe(Effect.mapError((error) => ProcessError.make({
|
|
146
|
+
message: `ado ${request.method} ${request.url}`,
|
|
147
|
+
detail: error.message
|
|
148
|
+
})));
|
|
149
|
+
const read = (operation, effect) => guarded(Capabilities.AdoRead, operation, events, effect);
|
|
150
|
+
const write = (operation, effect) => guarded(Capabilities.AdoWrite, operation, events, effect);
|
|
151
|
+
const setFields = (id, fields) => write("ado setFields", run(setFieldsRequest(config, id, fields)).pipe(Effect.asVoid));
|
|
152
|
+
return {
|
|
153
|
+
readWorkItem: (id) => read("ado readWorkItem", run(readWorkItemRequest(config, id)).pipe(Effect.flatMap(parseWorkItem))),
|
|
154
|
+
wiqlIds: (query) => read("ado wiql", run(wiqlRequest(config, query)).pipe(Effect.flatMap(parseWiqlIds))),
|
|
155
|
+
setFields,
|
|
156
|
+
setState: (id, state) => setFields(id, { "System.State": state }),
|
|
157
|
+
setAcceptanceCriteria: (id, text) => setFields(id, {
|
|
158
|
+
"Microsoft.VSTS.Common.AcceptanceCriteria": text
|
|
159
|
+
}),
|
|
160
|
+
createPr: (sourceRef, targetRef, title, body) => write("ado createPr", run(createPullRequestRequest(config, sourceRef, targetRef, title, body)).pipe(Effect.flatMap((json) => parsePullRequest(config, json))))
|
|
161
|
+
};
|
|
162
|
+
};
|
|
163
|
+
//# sourceMappingURL=AzureDevOpsTool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AzureDevOpsTool.js","sourceRoot":"","sources":["../src/AzureDevOpsTool.ts"],"names":[],"mappings":"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"}
|
package/dist/Bench.d.ts
ADDED
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import * as Effect from "effect/Effect";
|
|
2
|
+
import * as Schema from "effect/Schema";
|
|
3
|
+
import type * as Scope from "effect/Scope";
|
|
4
|
+
import { TokenUsage } from "@llm4ts/core/Models";
|
|
5
|
+
import type { FlowEvent, FlowEventsShape } from "./FlowEvents.ts";
|
|
6
|
+
declare const BenchTokens_base: Schema.Class<BenchTokens, Schema.Struct<{
|
|
7
|
+
readonly prompt: Schema.Int;
|
|
8
|
+
readonly completion: Schema.Int;
|
|
9
|
+
readonly cached: Schema.Int;
|
|
10
|
+
}>, {}>;
|
|
11
|
+
export declare class BenchTokens extends BenchTokens_base {
|
|
12
|
+
get total(): number;
|
|
13
|
+
add(that: BenchTokens): BenchTokens;
|
|
14
|
+
}
|
|
15
|
+
export declare const emptyBenchTokens: () => BenchTokens;
|
|
16
|
+
export declare const benchTokensFromUsage: (usage: TokenUsage) => BenchTokens;
|
|
17
|
+
declare const BenchCounters_base: Schema.Class<BenchCounters, Schema.Struct<{
|
|
18
|
+
readonly flakyRetries: Schema.Int;
|
|
19
|
+
readonly transientRetries: Schema.Int;
|
|
20
|
+
readonly autoResumes: Schema.Int;
|
|
21
|
+
readonly turnLimitTrips: Schema.Int;
|
|
22
|
+
readonly shrinks: Schema.Int;
|
|
23
|
+
}>, {}>;
|
|
24
|
+
export declare class BenchCounters extends BenchCounters_base {
|
|
25
|
+
get selfHealing(): number;
|
|
26
|
+
}
|
|
27
|
+
export declare const emptyBenchCounters: () => BenchCounters;
|
|
28
|
+
declare const BenchPhase_base: Schema.Class<BenchPhase, Schema.Struct<{
|
|
29
|
+
readonly name: Schema.String;
|
|
30
|
+
readonly ms: Schema.Int;
|
|
31
|
+
readonly tokens: typeof BenchTokens;
|
|
32
|
+
readonly costUsd: Schema.optionalKey<Schema.Number>;
|
|
33
|
+
readonly counters: typeof BenchCounters;
|
|
34
|
+
readonly detail: Schema.$Record<Schema.String, Schema.String>;
|
|
35
|
+
}>, {}>;
|
|
36
|
+
export declare class BenchPhase extends BenchPhase_base {
|
|
37
|
+
}
|
|
38
|
+
declare const BenchScore_base: Schema.Class<BenchScore, Schema.Struct<{
|
|
39
|
+
readonly name: Schema.String;
|
|
40
|
+
readonly score: Schema.Int;
|
|
41
|
+
readonly max: Schema.Int;
|
|
42
|
+
readonly reasoning: Schema.String;
|
|
43
|
+
}>, {}>;
|
|
44
|
+
export declare class BenchScore extends BenchScore_base {
|
|
45
|
+
}
|
|
46
|
+
declare const BenchJudge_base: Schema.Class<BenchJudge, Schema.Struct<{
|
|
47
|
+
readonly provider: Schema.String;
|
|
48
|
+
readonly model: Schema.String;
|
|
49
|
+
readonly fixed: Schema.Boolean;
|
|
50
|
+
}>, {}>;
|
|
51
|
+
export declare class BenchJudge extends BenchJudge_base {
|
|
52
|
+
}
|
|
53
|
+
declare const BenchMachine_base: Schema.Class<BenchMachine, Schema.Struct<{
|
|
54
|
+
readonly hostname: Schema.String;
|
|
55
|
+
readonly os: Schema.String;
|
|
56
|
+
readonly arch: Schema.String;
|
|
57
|
+
readonly cores: Schema.Int;
|
|
58
|
+
readonly memoryGb: Schema.Number;
|
|
59
|
+
readonly runtime: Schema.String;
|
|
60
|
+
}>, {}>;
|
|
61
|
+
export declare class BenchMachine extends BenchMachine_base {
|
|
62
|
+
}
|
|
63
|
+
declare const BenchQuality_base: Schema.Class<BenchQuality, Schema.Struct<{
|
|
64
|
+
readonly buildPassed: Schema.optionalKey<Schema.Boolean>;
|
|
65
|
+
readonly testsRun: Schema.optionalKey<Schema.Int>;
|
|
66
|
+
readonly testsFailed: Schema.optionalKey<Schema.Int>;
|
|
67
|
+
readonly coveragePct: Schema.optionalKey<Schema.Number>;
|
|
68
|
+
readonly featureFiles: Schema.Int;
|
|
69
|
+
readonly scenarios: Schema.Int;
|
|
70
|
+
readonly malformedFeatures: Schema.Int;
|
|
71
|
+
readonly specFiles: Schema.Int;
|
|
72
|
+
readonly programs: Schema.Int;
|
|
73
|
+
readonly sourceFiles: Schema.Int;
|
|
74
|
+
readonly sourceLines: Schema.Int;
|
|
75
|
+
readonly testFiles: Schema.Int;
|
|
76
|
+
readonly testLines: Schema.Int;
|
|
77
|
+
readonly deterministicFindings: Schema.Int;
|
|
78
|
+
readonly judgeFindings: Schema.Int;
|
|
79
|
+
readonly gateCleared: Schema.optionalKey<Schema.Boolean>;
|
|
80
|
+
readonly gateRounds: Schema.optionalKey<Schema.Int>;
|
|
81
|
+
readonly gateOpenIssues: Schema.optionalKey<Schema.Int>;
|
|
82
|
+
readonly judgeScores: Schema.$Array<typeof BenchScore>;
|
|
83
|
+
}>, {}>;
|
|
84
|
+
export declare class BenchQuality extends BenchQuality_base {
|
|
85
|
+
}
|
|
86
|
+
declare const BenchRecord_base: Schema.Class<BenchRecord, Schema.Struct<{
|
|
87
|
+
readonly schemaVersion: Schema.Int;
|
|
88
|
+
readonly runId: Schema.String;
|
|
89
|
+
readonly label: Schema.optionalKey<Schema.String>;
|
|
90
|
+
readonly startedAt: Schema.String;
|
|
91
|
+
readonly finishedAt: Schema.String;
|
|
92
|
+
readonly provider: Schema.String;
|
|
93
|
+
readonly modelRequested: Schema.String;
|
|
94
|
+
readonly modelsServed: Schema.$Array<Schema.String>;
|
|
95
|
+
readonly judge: typeof BenchJudge;
|
|
96
|
+
readonly toolVersion: Schema.optionalKey<Schema.String>;
|
|
97
|
+
readonly llm4tsVersion: Schema.String;
|
|
98
|
+
readonly pack: Schema.String;
|
|
99
|
+
readonly fixtureFingerprint: Schema.String;
|
|
100
|
+
readonly machine: typeof BenchMachine;
|
|
101
|
+
readonly outcome: Schema.String;
|
|
102
|
+
readonly resumed: Schema.optionalKey<Schema.Boolean>;
|
|
103
|
+
readonly totalMs: Schema.Int;
|
|
104
|
+
readonly phases: Schema.$Array<typeof BenchPhase>;
|
|
105
|
+
readonly quality: Schema.optionalKey<typeof BenchQuality>;
|
|
106
|
+
}>, {}>;
|
|
107
|
+
export declare class BenchRecord extends BenchRecord_base {
|
|
108
|
+
get completed(): boolean;
|
|
109
|
+
get totalTokens(): number;
|
|
110
|
+
get totalCostUsd(): number | undefined;
|
|
111
|
+
get selfHealing(): number;
|
|
112
|
+
}
|
|
113
|
+
export declare const CurrentBenchSchema = 1;
|
|
114
|
+
export declare const BenchUnstaged = "(none)";
|
|
115
|
+
export interface BenchObservation {
|
|
116
|
+
readonly openStages: ReadonlyArray<string>;
|
|
117
|
+
readonly cells: ReadonlyMap<string, BenchTokens>;
|
|
118
|
+
readonly cellKeys: ReadonlyMap<string, readonly [stage: string, model: string]>;
|
|
119
|
+
readonly counters: ReadonlyMap<string, BenchCounters>;
|
|
120
|
+
readonly modelsServed: ReadonlySet<string>;
|
|
121
|
+
}
|
|
122
|
+
export declare const emptyBenchObservation: () => BenchObservation;
|
|
123
|
+
export declare const observeBench: (observation: BenchObservation, event: FlowEvent) => BenchObservation;
|
|
124
|
+
export declare const stageBenchTokens: (observation: BenchObservation, stage: string) => BenchTokens;
|
|
125
|
+
export declare const stageBenchCounters: (observation: BenchObservation, stage: string) => BenchCounters;
|
|
126
|
+
export declare const makeBenchPhase: (observation: BenchObservation, stage: string, ms: number, detail?: Readonly<Record<string, string>>) => BenchPhase;
|
|
127
|
+
export interface BenchTap {
|
|
128
|
+
readonly get: Effect.Effect<BenchObservation>;
|
|
129
|
+
readonly reset: Effect.Effect<void>;
|
|
130
|
+
}
|
|
131
|
+
export declare const makeBenchTap: (events: FlowEventsShape) => Effect.Effect<BenchTap, never, Scope.Scope>;
|
|
132
|
+
export {};
|
|
133
|
+
//# sourceMappingURL=Bench.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Bench.d.ts","sourceRoot":"","sources":["../src/Bench.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAA;AAE1C,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAChD,OAAO,KAAK,EAAE,SAAS,EAAgB,eAAe,EAAE,MAAM,iBAAiB,CAAA;;;;;;AAG/E,qBAAa,WAAY,SAAQ,gBAI/B;IACA,IAAI,KAAK,IAAI,MAAM,CAElB;IAED,GAAG,CAAC,IAAI,EAAE,WAAW,GAAG,WAAW;CAOpC;AAED,eAAO,MAAM,gBAAgB,QAAO,WACuB,CAAA;AAE3D,eAAO,MAAM,oBAAoB,GAAI,OAAO,UAAU,KAAG,WAKrD,CAAA;;;;;;;;AAEJ,qBAAa,aAAc,SAAQ,kBAMjC;IACA,IAAI,WAAW,IAAI,MAAM,CAExB;CACF;AAED,eAAO,MAAM,kBAAkB,QAAO,aAOlC,CAAA;;;;;;;;;AAEJ,qBAAa,UAAW,SAAQ,eAO9B;CAAG;;;;;;;AAEL,qBAAa,UAAW,SAAQ,eAK9B;CAAG;;;;;;AAEL,qBAAa,UAAW,SAAQ,eAI9B;CAAG;;;;;;;;;AAEL,qBAAa,YAAa,SAAQ,iBAOhC;CAAG;;;;;;;;;;;;;;;;;;;;;;AAEL,qBAAa,YAAa,SAAQ,iBAoBhC;CAAG;;;;;;;;;;;;;;;;;;;;;;AAEL,qBAAa,WAAY,SAAQ,gBAoB/B;IACA,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,IAAI,YAAY,IAAI,MAAM,GAAG,SAAS,CAKrC;IAED,IAAI,WAAW,IAAI,MAAM,CAExB;CACF;AAED,eAAO,MAAM,kBAAkB,IAAI,CAAA;AACnC,eAAO,MAAM,aAAa,WAAW,CAAA;AAErC,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;IAC1C,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;IAChD,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAA;IAC/E,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;IACrD,QAAQ,CAAC,YAAY,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;CAC3C;AAED,eAAO,MAAM,qBAAqB,QAAO,gBAMvC,CAAA;AA4CF,eAAO,MAAM,YAAY,GAAI,aAAa,gBAAgB,EAAE,OAAO,SAAS,KAAG,gBA2C9E,CAAA;AAED,eAAO,MAAM,gBAAgB,GAAI,aAAa,gBAAgB,EAAE,OAAO,MAAM,KAAG,WAIxD,CAAA;AAExB,eAAO,MAAM,kBAAkB,GAAI,aAAa,gBAAgB,EAAE,OAAO,MAAM,KAAG,aACzB,CAAA;AAEzD,eAAO,MAAM,cAAc,GACzB,aAAa,gBAAgB,EAC7B,OAAO,MAAM,EACb,IAAI,MAAM,EACV,SAAQ,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAM,KAC5C,UAyBF,CAAA;AAKD,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAA;IAC7C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;CACpC;AAED,eAAO,MAAM,YAAY,0EAgCvB,CAAA"}
|