@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.
Files changed (198) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +41 -0
  3. package/dist/AzureDevOpsTool.d.ts +60 -0
  4. package/dist/AzureDevOpsTool.d.ts.map +1 -0
  5. package/dist/AzureDevOpsTool.js +163 -0
  6. package/dist/AzureDevOpsTool.js.map +1 -0
  7. package/dist/Bench.d.ts +133 -0
  8. package/dist/Bench.d.ts.map +1 -0
  9. package/dist/Bench.js +272 -0
  10. package/dist/Bench.js.map +1 -0
  11. package/dist/BenchReport.d.ts +9 -0
  12. package/dist/BenchReport.d.ts.map +1 -0
  13. package/dist/BenchReport.js +360 -0
  14. package/dist/BenchReport.js.map +1 -0
  15. package/dist/CapabilityGuard.d.ts +6 -0
  16. package/dist/CapabilityGuard.d.ts.map +1 -0
  17. package/dist/CapabilityGuard.js +25 -0
  18. package/dist/CapabilityGuard.js.map +1 -0
  19. package/dist/Chat.d.ts +15 -0
  20. package/dist/Chat.d.ts.map +1 -0
  21. package/dist/Chat.js +36 -0
  22. package/dist/Chat.js.map +1 -0
  23. package/dist/Classified.d.ts +14 -0
  24. package/dist/Classified.d.ts.map +1 -0
  25. package/dist/Classified.js +48 -0
  26. package/dist/Classified.js.map +1 -0
  27. package/dist/CostLedger.d.ts +55 -0
  28. package/dist/CostLedger.d.ts.map +1 -0
  29. package/dist/CostLedger.js +126 -0
  30. package/dist/CostLedger.js.map +1 -0
  31. package/dist/CostTracker.d.ts +13 -0
  32. package/dist/CostTracker.d.ts.map +1 -0
  33. package/dist/CostTracker.js +116 -0
  34. package/dist/CostTracker.js.map +1 -0
  35. package/dist/Equiv.d.ts +163 -0
  36. package/dist/Equiv.d.ts.map +1 -0
  37. package/dist/Equiv.js +256 -0
  38. package/dist/Equiv.js.map +1 -0
  39. package/dist/EquivReport.d.ts +16 -0
  40. package/dist/EquivReport.d.ts.map +1 -0
  41. package/dist/EquivReport.js +77 -0
  42. package/dist/EquivReport.js.map +1 -0
  43. package/dist/Flow.d.ts +25 -0
  44. package/dist/Flow.d.ts.map +1 -0
  45. package/dist/Flow.js +39 -0
  46. package/dist/Flow.js.map +1 -0
  47. package/dist/FlowContext.d.ts +23 -0
  48. package/dist/FlowContext.d.ts.map +1 -0
  49. package/dist/FlowContext.js +4 -0
  50. package/dist/FlowContext.js.map +1 -0
  51. package/dist/FlowError.d.ts +80 -0
  52. package/dist/FlowError.d.ts.map +1 -0
  53. package/dist/FlowError.js +92 -0
  54. package/dist/FlowError.js.map +1 -0
  55. package/dist/FlowEvents.d.ts +101 -0
  56. package/dist/FlowEvents.d.ts.map +1 -0
  57. package/dist/FlowEvents.js +103 -0
  58. package/dist/FlowEvents.js.map +1 -0
  59. package/dist/FlowRecorder.d.ts +26 -0
  60. package/dist/FlowRecorder.d.ts.map +1 -0
  61. package/dist/FlowRecorder.js +74 -0
  62. package/dist/FlowRecorder.js.map +1 -0
  63. package/dist/GitHubTool.d.ts +53 -0
  64. package/dist/GitHubTool.d.ts.map +1 -0
  65. package/dist/GitHubTool.js +191 -0
  66. package/dist/GitHubTool.js.map +1 -0
  67. package/dist/GitTool.d.ts +46 -0
  68. package/dist/GitTool.d.ts.map +1 -0
  69. package/dist/GitTool.js +97 -0
  70. package/dist/GitTool.js.map +1 -0
  71. package/dist/Interaction.d.ts +21 -0
  72. package/dist/Interaction.d.ts.map +1 -0
  73. package/dist/Interaction.js +9 -0
  74. package/dist/Interaction.js.map +1 -0
  75. package/dist/McpServer.d.ts +18 -0
  76. package/dist/McpServer.d.ts.map +1 -0
  77. package/dist/McpServer.js +122 -0
  78. package/dist/McpServer.js.map +1 -0
  79. package/dist/Mermaid.d.ts +7 -0
  80. package/dist/Mermaid.d.ts.map +1 -0
  81. package/dist/Mermaid.js +98 -0
  82. package/dist/Mermaid.js.map +1 -0
  83. package/dist/Pack.d.ts +40 -0
  84. package/dist/Pack.d.ts.map +1 -0
  85. package/dist/Pack.js +141 -0
  86. package/dist/Pack.js.map +1 -0
  87. package/dist/Package.d.ts +2 -0
  88. package/dist/Package.d.ts.map +1 -0
  89. package/dist/Package.js +2 -0
  90. package/dist/Package.js.map +1 -0
  91. package/dist/Persistence.d.ts +32 -0
  92. package/dist/Persistence.d.ts.map +1 -0
  93. package/dist/Persistence.js +85 -0
  94. package/dist/Persistence.js.map +1 -0
  95. package/dist/Plan.d.ts +26 -0
  96. package/dist/Plan.d.ts.map +1 -0
  97. package/dist/Plan.js +101 -0
  98. package/dist/Plan.js.map +1 -0
  99. package/dist/PlanExecution.d.ts +7 -0
  100. package/dist/PlanExecution.d.ts.map +1 -0
  101. package/dist/PlanExecution.js +19 -0
  102. package/dist/PlanExecution.js.map +1 -0
  103. package/dist/Planner.d.ts +32 -0
  104. package/dist/Planner.d.ts.map +1 -0
  105. package/dist/Planner.js +97 -0
  106. package/dist/Planner.js.map +1 -0
  107. package/dist/PrSummary.d.ts +15 -0
  108. package/dist/PrSummary.d.ts.map +1 -0
  109. package/dist/PrSummary.js +29 -0
  110. package/dist/PrSummary.js.map +1 -0
  111. package/dist/PriceList.d.ts +11 -0
  112. package/dist/PriceList.d.ts.map +1 -0
  113. package/dist/PriceList.js +79 -0
  114. package/dist/PriceList.js.map +1 -0
  115. package/dist/Provenance.d.ts +27 -0
  116. package/dist/Provenance.d.ts.map +1 -0
  117. package/dist/Provenance.js +38 -0
  118. package/dist/Provenance.js.map +1 -0
  119. package/dist/Replay.d.ts +29 -0
  120. package/dist/Replay.d.ts.map +1 -0
  121. package/dist/Replay.js +181 -0
  122. package/dist/Replay.js.map +1 -0
  123. package/dist/Review.d.ts +71 -0
  124. package/dist/Review.d.ts.map +1 -0
  125. package/dist/Review.js +204 -0
  126. package/dist/Review.js.map +1 -0
  127. package/dist/ReviewCache.d.ts +6 -0
  128. package/dist/ReviewCache.d.ts.map +1 -0
  129. package/dist/ReviewCache.js +28 -0
  130. package/dist/ReviewCache.js.map +1 -0
  131. package/dist/Reviewer.d.ts +12 -0
  132. package/dist/Reviewer.d.ts.map +1 -0
  133. package/dist/Reviewer.js +30 -0
  134. package/dist/Reviewer.js.map +1 -0
  135. package/dist/SpecChecks.d.ts +17 -0
  136. package/dist/SpecChecks.d.ts.map +1 -0
  137. package/dist/SpecChecks.js +107 -0
  138. package/dist/SpecChecks.js.map +1 -0
  139. package/dist/Survey.d.ts +32 -0
  140. package/dist/Survey.d.ts.map +1 -0
  141. package/dist/Survey.js +119 -0
  142. package/dist/Survey.js.map +1 -0
  143. package/dist/TransientRetry.d.ts +16 -0
  144. package/dist/TransientRetry.d.ts.map +1 -0
  145. package/dist/TransientRetry.js +102 -0
  146. package/dist/TransientRetry.js.map +1 -0
  147. package/dist/Workspace.d.ts +39 -0
  148. package/dist/Workspace.d.ts.map +1 -0
  149. package/dist/Workspace.js +192 -0
  150. package/dist/Workspace.js.map +1 -0
  151. package/dist/WorkspaceLayout.d.ts +3 -0
  152. package/dist/WorkspaceLayout.d.ts.map +1 -0
  153. package/dist/WorkspaceLayout.js +19 -0
  154. package/dist/WorkspaceLayout.js.map +1 -0
  155. package/dist/WorkspaceTools.d.ts +4 -0
  156. package/dist/WorkspaceTools.d.ts.map +1 -0
  157. package/dist/WorkspaceTools.js +130 -0
  158. package/dist/WorkspaceTools.js.map +1 -0
  159. package/package.json +91 -0
  160. package/src/AzureDevOpsTool.ts +291 -0
  161. package/src/Bench.ts +340 -0
  162. package/src/BenchReport.ts +447 -0
  163. package/src/CapabilityGuard.ts +43 -0
  164. package/src/Chat.ts +60 -0
  165. package/src/Classified.ts +67 -0
  166. package/src/CostLedger.ts +171 -0
  167. package/src/CostTracker.ts +170 -0
  168. package/src/Equiv.ts +378 -0
  169. package/src/EquivReport.ts +92 -0
  170. package/src/Flow.ts +72 -0
  171. package/src/FlowContext.ts +23 -0
  172. package/src/FlowError.ts +112 -0
  173. package/src/FlowEvents.ts +147 -0
  174. package/src/FlowRecorder.ts +116 -0
  175. package/src/GitHubTool.ts +315 -0
  176. package/src/GitTool.ts +214 -0
  177. package/src/Interaction.ts +23 -0
  178. package/src/McpServer.ts +168 -0
  179. package/src/Mermaid.ts +112 -0
  180. package/src/Pack.ts +213 -0
  181. package/src/Package.ts +1 -0
  182. package/src/Persistence.ts +198 -0
  183. package/src/Plan.ts +119 -0
  184. package/src/PlanExecution.ts +46 -0
  185. package/src/Planner.ts +134 -0
  186. package/src/PrSummary.ts +37 -0
  187. package/src/PriceList.ts +91 -0
  188. package/src/Provenance.ts +85 -0
  189. package/src/Replay.ts +265 -0
  190. package/src/Review.ts +337 -0
  191. package/src/ReviewCache.ts +45 -0
  192. package/src/Reviewer.ts +31 -0
  193. package/src/SpecChecks.ts +143 -0
  194. package/src/Survey.ts +144 -0
  195. package/src/TransientRetry.ts +238 -0
  196. package/src/Workspace.ts +255 -0
  197. package/src/WorkspaceLayout.ts +22 -0
  198. 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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"}
@@ -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"}