@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/dist/Equiv.d.ts
ADDED
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import * as Effect from "effect/Effect";
|
|
2
|
+
import * as Schema from "effect/Schema";
|
|
3
|
+
import type { ProcessExecutorShape } from "@llm4ts/core/ProcessExecutor";
|
|
4
|
+
import { PlanParseError, ProcessError, UnsupportedSchemaVersion } from "./FlowError.ts";
|
|
5
|
+
import type { FlowEventsShape } from "./FlowEvents.ts";
|
|
6
|
+
import type { ComparisonPolicy } from "./Pack.ts";
|
|
7
|
+
import type { PlainFileStoreShape } from "./Persistence.ts";
|
|
8
|
+
export declare const EquivTier: Schema.Literals<readonly ["generated", "captured"]>;
|
|
9
|
+
export type EquivTier = typeof EquivTier.Type;
|
|
10
|
+
export declare const RecordObservation: Schema.Struct<{
|
|
11
|
+
readonly type: Schema.Literal<"record">;
|
|
12
|
+
readonly kind: Schema.String;
|
|
13
|
+
readonly fields: Schema.$Record<Schema.String, Schema.String>;
|
|
14
|
+
}>;
|
|
15
|
+
export type RecordObservation = typeof RecordObservation.Type;
|
|
16
|
+
export declare const DbMutationObservation: Schema.Struct<{
|
|
17
|
+
readonly type: Schema.Literal<"db">;
|
|
18
|
+
readonly table: Schema.String;
|
|
19
|
+
readonly op: Schema.String;
|
|
20
|
+
readonly key: Schema.$Record<Schema.String, Schema.String>;
|
|
21
|
+
readonly set: Schema.$Record<Schema.String, Schema.String>;
|
|
22
|
+
}>;
|
|
23
|
+
export type DbMutationObservation = typeof DbMutationObservation.Type;
|
|
24
|
+
export declare const MessageObservation: Schema.Struct<{
|
|
25
|
+
readonly type: Schema.Literal<"message">;
|
|
26
|
+
readonly topic: Schema.String;
|
|
27
|
+
readonly key: Schema.String;
|
|
28
|
+
readonly fields: Schema.$Record<Schema.String, Schema.String>;
|
|
29
|
+
}>;
|
|
30
|
+
export type MessageObservation = typeof MessageObservation.Type;
|
|
31
|
+
export declare const EquivObservation: Schema.Union<readonly [Schema.Struct<{
|
|
32
|
+
readonly type: Schema.Literal<"record">;
|
|
33
|
+
readonly kind: Schema.String;
|
|
34
|
+
readonly fields: Schema.$Record<Schema.String, Schema.String>;
|
|
35
|
+
}>, Schema.Struct<{
|
|
36
|
+
readonly type: Schema.Literal<"db">;
|
|
37
|
+
readonly table: Schema.String;
|
|
38
|
+
readonly op: Schema.String;
|
|
39
|
+
readonly key: Schema.$Record<Schema.String, Schema.String>;
|
|
40
|
+
readonly set: Schema.$Record<Schema.String, Schema.String>;
|
|
41
|
+
}>, Schema.Struct<{
|
|
42
|
+
readonly type: Schema.Literal<"message">;
|
|
43
|
+
readonly topic: Schema.String;
|
|
44
|
+
readonly key: Schema.String;
|
|
45
|
+
readonly fields: Schema.$Record<Schema.String, Schema.String>;
|
|
46
|
+
}>]>;
|
|
47
|
+
export type EquivObservation = typeof EquivObservation.Type;
|
|
48
|
+
export declare const Observations: Readonly<{
|
|
49
|
+
record: (kind: string, fields: Readonly<Record<string, string>>) => RecordObservation;
|
|
50
|
+
dbMutation: (table: string, op: string, key: Readonly<Record<string, string>>, set: Readonly<Record<string, string>>) => DbMutationObservation;
|
|
51
|
+
message: (topic: string, key: string, fields: Readonly<Record<string, string>>) => MessageObservation;
|
|
52
|
+
}>;
|
|
53
|
+
declare const EquivVector_base: Schema.Class<EquivVector, Schema.Struct<{
|
|
54
|
+
readonly schemaVersion: Schema.Int;
|
|
55
|
+
readonly program: Schema.String;
|
|
56
|
+
readonly id: Schema.String;
|
|
57
|
+
readonly tier: Schema.Literals<readonly ["generated", "captured"]>;
|
|
58
|
+
readonly rules: Schema.$Array<Schema.String>;
|
|
59
|
+
readonly inputs: Schema.Codec<Schema.Json, Schema.Json, never, never>;
|
|
60
|
+
readonly observations: Schema.$Array<Schema.Union<readonly [Schema.Struct<{
|
|
61
|
+
readonly type: Schema.Literal<"record">;
|
|
62
|
+
readonly kind: Schema.String;
|
|
63
|
+
readonly fields: Schema.$Record<Schema.String, Schema.String>;
|
|
64
|
+
}>, Schema.Struct<{
|
|
65
|
+
readonly type: Schema.Literal<"db">;
|
|
66
|
+
readonly table: Schema.String;
|
|
67
|
+
readonly op: Schema.String;
|
|
68
|
+
readonly key: Schema.$Record<Schema.String, Schema.String>;
|
|
69
|
+
readonly set: Schema.$Record<Schema.String, Schema.String>;
|
|
70
|
+
}>, Schema.Struct<{
|
|
71
|
+
readonly type: Schema.Literal<"message">;
|
|
72
|
+
readonly topic: Schema.String;
|
|
73
|
+
readonly key: Schema.String;
|
|
74
|
+
readonly fields: Schema.$Record<Schema.String, Schema.String>;
|
|
75
|
+
}>]>>;
|
|
76
|
+
}>, {}>;
|
|
77
|
+
export declare class EquivVector extends EquivVector_base {
|
|
78
|
+
}
|
|
79
|
+
export declare const CurrentEquivSchema = 1;
|
|
80
|
+
declare const MissingObservation_base: Schema.Class<MissingObservation, Schema.TaggedStruct<"Missing", {
|
|
81
|
+
readonly expected: Schema.Union<readonly [Schema.Struct<{
|
|
82
|
+
readonly type: Schema.Literal<"record">;
|
|
83
|
+
readonly kind: Schema.String;
|
|
84
|
+
readonly fields: Schema.$Record<Schema.String, Schema.String>;
|
|
85
|
+
}>, Schema.Struct<{
|
|
86
|
+
readonly type: Schema.Literal<"db">;
|
|
87
|
+
readonly table: Schema.String;
|
|
88
|
+
readonly op: Schema.String;
|
|
89
|
+
readonly key: Schema.$Record<Schema.String, Schema.String>;
|
|
90
|
+
readonly set: Schema.$Record<Schema.String, Schema.String>;
|
|
91
|
+
}>, Schema.Struct<{
|
|
92
|
+
readonly type: Schema.Literal<"message">;
|
|
93
|
+
readonly topic: Schema.String;
|
|
94
|
+
readonly key: Schema.String;
|
|
95
|
+
readonly fields: Schema.$Record<Schema.String, Schema.String>;
|
|
96
|
+
}>]>;
|
|
97
|
+
}>, {}>;
|
|
98
|
+
export declare class MissingObservation extends MissingObservation_base {
|
|
99
|
+
}
|
|
100
|
+
declare const UnexpectedObservation_base: Schema.Class<UnexpectedObservation, Schema.TaggedStruct<"Unexpected", {
|
|
101
|
+
readonly actual: Schema.Union<readonly [Schema.Struct<{
|
|
102
|
+
readonly type: Schema.Literal<"record">;
|
|
103
|
+
readonly kind: Schema.String;
|
|
104
|
+
readonly fields: Schema.$Record<Schema.String, Schema.String>;
|
|
105
|
+
}>, Schema.Struct<{
|
|
106
|
+
readonly type: Schema.Literal<"db">;
|
|
107
|
+
readonly table: Schema.String;
|
|
108
|
+
readonly op: Schema.String;
|
|
109
|
+
readonly key: Schema.$Record<Schema.String, Schema.String>;
|
|
110
|
+
readonly set: Schema.$Record<Schema.String, Schema.String>;
|
|
111
|
+
}>, Schema.Struct<{
|
|
112
|
+
readonly type: Schema.Literal<"message">;
|
|
113
|
+
readonly topic: Schema.String;
|
|
114
|
+
readonly key: Schema.String;
|
|
115
|
+
readonly fields: Schema.$Record<Schema.String, Schema.String>;
|
|
116
|
+
}>]>;
|
|
117
|
+
}>, {}>;
|
|
118
|
+
export declare class UnexpectedObservation extends UnexpectedObservation_base {
|
|
119
|
+
}
|
|
120
|
+
declare const ObservationFieldDiff_base: Schema.Class<ObservationFieldDiff, Schema.TaggedStruct<"FieldDiff", {
|
|
121
|
+
readonly at: Schema.String;
|
|
122
|
+
readonly field: Schema.String;
|
|
123
|
+
readonly expected: Schema.String;
|
|
124
|
+
readonly actual: Schema.String;
|
|
125
|
+
}>, {}>;
|
|
126
|
+
export declare class ObservationFieldDiff extends ObservationFieldDiff_base {
|
|
127
|
+
}
|
|
128
|
+
export declare const EquivMismatch: Schema.Union<readonly [typeof MissingObservation, typeof UnexpectedObservation, typeof ObservationFieldDiff]>;
|
|
129
|
+
export type EquivMismatch = typeof EquivMismatch.Type;
|
|
130
|
+
export declare const diffObservations: (expected: ReadonlyArray<EquivObservation>, actual: ReadonlyArray<EquivObservation>, policy: ComparisonPolicy) => ReadonlyArray<EquivMismatch>;
|
|
131
|
+
declare const ReplayedObserved_base: Schema.Class<ReplayedObserved, Schema.TaggedStruct<"Observed", {
|
|
132
|
+
readonly actual: Schema.$Array<Schema.Union<readonly [Schema.Struct<{
|
|
133
|
+
readonly type: Schema.Literal<"record">;
|
|
134
|
+
readonly kind: Schema.String;
|
|
135
|
+
readonly fields: Schema.$Record<Schema.String, Schema.String>;
|
|
136
|
+
}>, Schema.Struct<{
|
|
137
|
+
readonly type: Schema.Literal<"db">;
|
|
138
|
+
readonly table: Schema.String;
|
|
139
|
+
readonly op: Schema.String;
|
|
140
|
+
readonly key: Schema.$Record<Schema.String, Schema.String>;
|
|
141
|
+
readonly set: Schema.$Record<Schema.String, Schema.String>;
|
|
142
|
+
}>, Schema.Struct<{
|
|
143
|
+
readonly type: Schema.Literal<"message">;
|
|
144
|
+
readonly topic: Schema.String;
|
|
145
|
+
readonly key: Schema.String;
|
|
146
|
+
readonly fields: Schema.$Record<Schema.String, Schema.String>;
|
|
147
|
+
}>]>>;
|
|
148
|
+
}>, {}>;
|
|
149
|
+
export declare class ReplayedObserved extends ReplayedObserved_base {
|
|
150
|
+
}
|
|
151
|
+
declare const ReplayedCrashed_base: Schema.Class<ReplayedCrashed, Schema.TaggedStruct<"Crashed", {
|
|
152
|
+
readonly exitCode: Schema.Int;
|
|
153
|
+
readonly problem: Schema.String;
|
|
154
|
+
}>, {}>;
|
|
155
|
+
export declare class ReplayedCrashed extends ReplayedCrashed_base {
|
|
156
|
+
}
|
|
157
|
+
export declare const Replayed: Schema.Union<readonly [typeof ReplayedObserved, typeof ReplayedCrashed]>;
|
|
158
|
+
export type Replayed = typeof Replayed.Type;
|
|
159
|
+
export declare const writeEquivVectors: (files: PlainFileStoreShape, path: string, vectors: readonly EquivVector[]) => Effect.Effect<void, import("./FlowError.ts").PersistenceError | PlanParseError | UnsupportedSchemaVersion | import("./FlowError.ts").WorkspacePathError | import("./FlowError.ts").WorkspaceLimitError | import("./FlowError.ts").WorkspaceIoError | import("./FlowError.ts").FlowAborted | ProcessError | import("./FlowError.ts").FlowLlmError | import("./FlowError.ts").FlowCapabilityDenied | import("./FlowError.ts").BudgetExceeded, never>;
|
|
160
|
+
export declare const readEquivVectors: (files: PlainFileStoreShape, path: string) => Effect.Effect<readonly EquivVector[], import("./FlowError.ts").PersistenceError | PlanParseError | UnsupportedSchemaVersion | import("./FlowError.ts").WorkspacePathError | import("./FlowError.ts").WorkspaceLimitError | import("./FlowError.ts").WorkspaceIoError | import("./FlowError.ts").FlowAborted | ProcessError | import("./FlowError.ts").FlowLlmError | import("./FlowError.ts").FlowCapabilityDenied | import("./FlowError.ts").BudgetExceeded, never>;
|
|
161
|
+
export declare const replayEquivVector: (process: ProcessExecutorShape, events: FlowEventsShape, command: readonly string[], root: string, vector: EquivVector) => Effect.Effect<ReplayedObserved | ReplayedCrashed, import("./FlowError.ts").PersistenceError | PlanParseError | UnsupportedSchemaVersion | import("./FlowError.ts").WorkspacePathError | import("./FlowError.ts").WorkspaceLimitError | import("./FlowError.ts").WorkspaceIoError | import("./FlowError.ts").FlowAborted | ProcessError | import("./FlowError.ts").FlowLlmError | import("./FlowError.ts").FlowCapabilityDenied | import("./FlowError.ts").BudgetExceeded, never>;
|
|
162
|
+
export {};
|
|
163
|
+
//# sourceMappingURL=Equiv.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Equiv.d.ts","sourceRoot":"","sources":["../src/Equiv.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAA;AAExE,OAAO,EACL,cAAc,EACd,YAAY,EACZ,wBAAwB,EAEzB,MAAM,gBAAgB,CAAA;AACvB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACtD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAA;AACjD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAE3D,eAAO,MAAM,SAAS,qDAA6C,CAAA;AACnE,MAAM,MAAM,SAAS,GAAG,OAAO,SAAS,CAAC,IAAI,CAAA;AAE7C,eAAO,MAAM,iBAAiB;;;;EAI5B,CAAA;AACF,MAAM,MAAM,iBAAiB,GAAG,OAAO,iBAAiB,CAAC,IAAI,CAAA;AAE7D,eAAO,MAAM,qBAAqB;;;;;;EAMhC,CAAA;AACF,MAAM,MAAM,qBAAqB,GAAG,OAAO,qBAAqB,CAAC,IAAI,CAAA;AAErE,eAAO,MAAM,kBAAkB;;;;;EAK7B,CAAA;AACF,MAAM,MAAM,kBAAkB,GAAG,OAAO,kBAAkB,CAAC,IAAI,CAAA;AAE/D,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;IAI3B,CAAA;AACF,MAAM,MAAM,gBAAgB,GAAG,OAAO,gBAAgB,CAAC,IAAI,CAAA;AAE3D,eAAO,MAAM,YAAY;mBACR,MAAM,UAAU,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,KAAG,iBAAiB;wBAM1E,MAAM,MACT,MAAM,OACL,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,OAChC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,KACpC,qBAAqB;qBAEf,MAAM,OACR,MAAM,UACH,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,KACvC,kBAAkB;EACrB,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;AAEF,qBAAa,WAAY,SAAQ,gBAQ/B;CAAG;AAEL,eAAO,MAAM,kBAAkB,IAAI,CAAA;;;;;;;;;;;;;;;;;;;AAEnC,qBAAa,kBAAmB,SAAQ,uBAEtC;CAAG;;;;;;;;;;;;;;;;;;;AAEL,qBAAa,qBAAsB,SAAQ,0BAK1C;CAAG;;;;;;;AAEJ,qBAAa,oBAAqB,SAAQ,yBAKxC;CAAG;AAEL,eAAO,MAAM,aAAa,+GAIxB,CAAA;AACF,MAAM,MAAM,aAAa,GAAG,OAAO,aAAa,CAAC,IAAI,CAAA;AAsGrD,eAAO,MAAM,gBAAgB,GAC3B,UAAU,aAAa,CAAC,gBAAgB,CAAC,EACzC,QAAQ,aAAa,CAAC,gBAAgB,CAAC,EACvC,QAAQ,gBAAgB,KACvB,aAAa,CAAC,aAAa,CA+C7B,CAAA;;;;;;;;;;;;;;;;;;;AAED,qBAAa,gBAAiB,SAAQ,qBAEpC;CAAG;;;;;AAEL,qBAAa,eAAgB,SAAQ,oBAGnC;CAAG;AAEL,eAAO,MAAM,QAAQ,0EAAoD,CAAA;AACzE,MAAM,MAAM,QAAQ,GAAG,OAAO,QAAQ,CAAC,IAAI,CAAA;AAK3C,eAAO,MAAM,iBAAiB,mgBAkB5B,CAAA;AAEF,eAAO,MAAM,gBAAgB,ofAiC3B,CAAA;AAEF,eAAO,MAAM,iBAAiB,6kBAiD5B,CAAA"}
|
package/dist/Equiv.js
ADDED
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
import * as Effect from "effect/Effect";
|
|
2
|
+
import * as Schema from "effect/Schema";
|
|
3
|
+
import { Capabilities } from "@llm4ts/core/Capability";
|
|
4
|
+
import { guarded } from "./CapabilityGuard.js";
|
|
5
|
+
import { PlanParseError, ProcessError, UnsupportedSchemaVersion } from "./FlowError.js";
|
|
6
|
+
export const EquivTier = Schema.Literals(["generated", "captured"]);
|
|
7
|
+
export const RecordObservation = Schema.Struct({
|
|
8
|
+
type: Schema.Literal("record"),
|
|
9
|
+
kind: Schema.String,
|
|
10
|
+
fields: Schema.Record(Schema.String, Schema.String)
|
|
11
|
+
});
|
|
12
|
+
export const DbMutationObservation = Schema.Struct({
|
|
13
|
+
type: Schema.Literal("db"),
|
|
14
|
+
table: Schema.String,
|
|
15
|
+
op: Schema.String,
|
|
16
|
+
key: Schema.Record(Schema.String, Schema.String),
|
|
17
|
+
set: Schema.Record(Schema.String, Schema.String)
|
|
18
|
+
});
|
|
19
|
+
export const MessageObservation = Schema.Struct({
|
|
20
|
+
type: Schema.Literal("message"),
|
|
21
|
+
topic: Schema.String,
|
|
22
|
+
key: Schema.String,
|
|
23
|
+
fields: Schema.Record(Schema.String, Schema.String)
|
|
24
|
+
});
|
|
25
|
+
export const EquivObservation = Schema.Union([
|
|
26
|
+
RecordObservation,
|
|
27
|
+
DbMutationObservation,
|
|
28
|
+
MessageObservation
|
|
29
|
+
]);
|
|
30
|
+
export const Observations = Object.freeze({
|
|
31
|
+
record: (kind, fields) => ({
|
|
32
|
+
type: "record",
|
|
33
|
+
kind,
|
|
34
|
+
fields
|
|
35
|
+
}),
|
|
36
|
+
dbMutation: (table, op, key, set) => ({ type: "db", table, op, key, set }),
|
|
37
|
+
message: (topic, key, fields) => ({ type: "message", topic, key, fields })
|
|
38
|
+
});
|
|
39
|
+
export class EquivVector extends Schema.Class("EquivVector")({
|
|
40
|
+
schemaVersion: Schema.Int,
|
|
41
|
+
program: Schema.String,
|
|
42
|
+
id: Schema.String,
|
|
43
|
+
tier: EquivTier,
|
|
44
|
+
rules: Schema.Array(Schema.String),
|
|
45
|
+
inputs: Schema.Json,
|
|
46
|
+
observations: Schema.Array(EquivObservation)
|
|
47
|
+
}) {
|
|
48
|
+
}
|
|
49
|
+
export const CurrentEquivSchema = 1;
|
|
50
|
+
export class MissingObservation extends Schema.TaggedClass()("Missing", {
|
|
51
|
+
expected: EquivObservation
|
|
52
|
+
}) {
|
|
53
|
+
}
|
|
54
|
+
export class UnexpectedObservation extends Schema.TaggedClass()("Unexpected", {
|
|
55
|
+
actual: EquivObservation
|
|
56
|
+
}) {
|
|
57
|
+
}
|
|
58
|
+
export class ObservationFieldDiff extends Schema.TaggedClass()("FieldDiff", {
|
|
59
|
+
at: Schema.String,
|
|
60
|
+
field: Schema.String,
|
|
61
|
+
expected: Schema.String,
|
|
62
|
+
actual: Schema.String
|
|
63
|
+
}) {
|
|
64
|
+
}
|
|
65
|
+
export const EquivMismatch = Schema.Union([
|
|
66
|
+
MissingObservation,
|
|
67
|
+
UnexpectedObservation,
|
|
68
|
+
ObservationFieldDiff
|
|
69
|
+
]);
|
|
70
|
+
const sortedEntries = (record) => Object.entries(record).sort(([left], [right]) => left.localeCompare(right));
|
|
71
|
+
const identityOf = (observation) => {
|
|
72
|
+
switch (observation.type) {
|
|
73
|
+
case "record":
|
|
74
|
+
return `record ${observation.kind}`;
|
|
75
|
+
case "message":
|
|
76
|
+
return `message ${observation.topic} ${observation.key}`;
|
|
77
|
+
case "db":
|
|
78
|
+
return `db ${observation.table} ${observation.op} ${sortedEntries(observation.key)
|
|
79
|
+
.map(([key, value]) => `${key}=${value}`)
|
|
80
|
+
.join(",")}`;
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
const fieldsOf = (observation) => observation.type === "db" ? observation.set : observation.fields;
|
|
84
|
+
const canonical = (observation) => JSON.stringify({
|
|
85
|
+
...observation,
|
|
86
|
+
...(observation.type === "db"
|
|
87
|
+
? {
|
|
88
|
+
key: Object.fromEntries(sortedEntries(observation.key)),
|
|
89
|
+
set: Object.fromEntries(sortedEntries(observation.set))
|
|
90
|
+
}
|
|
91
|
+
: { fields: Object.fromEntries(sortedEntries(observation.fields)) })
|
|
92
|
+
});
|
|
93
|
+
const scrub = (observation, ignore) => {
|
|
94
|
+
const omit = (fields) => Object.fromEntries(Object.entries(fields).filter(([key]) => !ignore.has(key)));
|
|
95
|
+
switch (observation.type) {
|
|
96
|
+
case "record":
|
|
97
|
+
return Observations.record(observation.kind, omit(observation.fields));
|
|
98
|
+
case "message":
|
|
99
|
+
return Observations.message(observation.topic, observation.key, omit(observation.fields));
|
|
100
|
+
case "db":
|
|
101
|
+
return Observations.dbMutation(observation.table, observation.op, omit(observation.key), omit(observation.set));
|
|
102
|
+
}
|
|
103
|
+
};
|
|
104
|
+
const fieldDiffs = (expected, actual) => {
|
|
105
|
+
const expectedFields = fieldsOf(expected);
|
|
106
|
+
const actualFields = fieldsOf(actual);
|
|
107
|
+
return [...new Set([...Object.keys(expectedFields), ...Object.keys(actualFields)])]
|
|
108
|
+
.sort()
|
|
109
|
+
.flatMap((field) => expectedFields[field] === actualFields[field]
|
|
110
|
+
? []
|
|
111
|
+
: [
|
|
112
|
+
ObservationFieldDiff.make({
|
|
113
|
+
at: identityOf(expected),
|
|
114
|
+
field,
|
|
115
|
+
expected: expectedFields[field] ?? "(absent)",
|
|
116
|
+
actual: actualFields[field] ?? "(absent)"
|
|
117
|
+
})
|
|
118
|
+
]);
|
|
119
|
+
};
|
|
120
|
+
const positionalDiff = (expected, actual) => {
|
|
121
|
+
const result = [];
|
|
122
|
+
const maximum = Math.max(expected.length, actual.length);
|
|
123
|
+
for (let index = 0; index < maximum; index += 1) {
|
|
124
|
+
const expectedItem = expected[index];
|
|
125
|
+
const actualItem = actual[index];
|
|
126
|
+
if (expectedItem === undefined && actualItem !== undefined) {
|
|
127
|
+
result.push(UnexpectedObservation.make({ actual: actualItem }));
|
|
128
|
+
}
|
|
129
|
+
else if (expectedItem !== undefined && actualItem === undefined) {
|
|
130
|
+
result.push(MissingObservation.make({ expected: expectedItem }));
|
|
131
|
+
}
|
|
132
|
+
else if (expectedItem !== undefined && actualItem !== undefined) {
|
|
133
|
+
if (canonical(expectedItem) === canonical(actualItem)) {
|
|
134
|
+
continue;
|
|
135
|
+
}
|
|
136
|
+
if (identityOf(expectedItem) === identityOf(actualItem)) {
|
|
137
|
+
result.push(...fieldDiffs(expectedItem, actualItem));
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
result.push(MissingObservation.make({ expected: expectedItem }));
|
|
141
|
+
result.push(UnexpectedObservation.make({ actual: actualItem }));
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
return result;
|
|
146
|
+
};
|
|
147
|
+
export const diffObservations = (expected, actual, policy) => {
|
|
148
|
+
const expectedScrubbed = expected.map((item) => scrub(item, policy.ignore));
|
|
149
|
+
const actualScrubbed = actual.map((item) => scrub(item, policy.ignore));
|
|
150
|
+
if (policy.ordering === "Ordered") {
|
|
151
|
+
return positionalDiff(expectedScrubbed, actualScrubbed);
|
|
152
|
+
}
|
|
153
|
+
if (policy.ordering === "PerKey") {
|
|
154
|
+
const keys = [
|
|
155
|
+
...new Set([...expectedScrubbed.map(identityOf), ...actualScrubbed.map(identityOf)])
|
|
156
|
+
].sort();
|
|
157
|
+
return keys.flatMap((key) => positionalDiff(expectedScrubbed.filter((item) => identityOf(item) === key), actualScrubbed.filter((item) => identityOf(item) === key)));
|
|
158
|
+
}
|
|
159
|
+
const remainingActual = [...actualScrubbed];
|
|
160
|
+
const unmatchedExpected = [];
|
|
161
|
+
for (const item of expectedScrubbed) {
|
|
162
|
+
const index = remainingActual.findIndex((candidate) => canonical(candidate) === canonical(item));
|
|
163
|
+
if (index < 0) {
|
|
164
|
+
unmatchedExpected.push(item);
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
remainingActual.splice(index, 1);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
const mismatches = [];
|
|
171
|
+
const missing = [];
|
|
172
|
+
for (const item of unmatchedExpected) {
|
|
173
|
+
const index = remainingActual.findIndex((candidate) => identityOf(candidate) === identityOf(item));
|
|
174
|
+
const matching = index < 0 ? undefined : remainingActual[index];
|
|
175
|
+
if (matching === undefined) {
|
|
176
|
+
missing.push(item);
|
|
177
|
+
}
|
|
178
|
+
else {
|
|
179
|
+
mismatches.push(...fieldDiffs(item, matching));
|
|
180
|
+
remainingActual.splice(index, 1);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
return [
|
|
184
|
+
...mismatches,
|
|
185
|
+
...missing.map((expectedItem) => MissingObservation.make({ expected: expectedItem })),
|
|
186
|
+
...remainingActual.map((actualItem) => UnexpectedObservation.make({ actual: actualItem }))
|
|
187
|
+
];
|
|
188
|
+
};
|
|
189
|
+
export class ReplayedObserved extends Schema.TaggedClass()("Observed", {
|
|
190
|
+
actual: Schema.Array(EquivObservation)
|
|
191
|
+
}) {
|
|
192
|
+
}
|
|
193
|
+
export class ReplayedCrashed extends Schema.TaggedClass()("Crashed", {
|
|
194
|
+
exitCode: Schema.Int,
|
|
195
|
+
problem: Schema.String
|
|
196
|
+
}) {
|
|
197
|
+
}
|
|
198
|
+
export const Replayed = Schema.Union([ReplayedObserved, ReplayedCrashed]);
|
|
199
|
+
const vectorCodec = Schema.fromJsonString(EquivVector);
|
|
200
|
+
const observationsCodec = Schema.fromJsonString(Schema.Array(EquivObservation));
|
|
201
|
+
export const writeEquivVectors = Effect.fn("@llm4ts/flow/Equiv.writeVectors")(function* (files, path, vectors) {
|
|
202
|
+
const lines = yield* Effect.forEach(vectors, (vector) => Schema.encodeEffect(vectorCodec)(vector).pipe(Effect.mapError((error) => PlanParseError.make({
|
|
203
|
+
message: `failed to encode equivalence vector: ${String(error)}`
|
|
204
|
+
}))), { concurrency: 1 });
|
|
205
|
+
yield* files.writeAtomic(path, `${lines.join("\n")}\n`);
|
|
206
|
+
});
|
|
207
|
+
export const readEquivVectors = Effect.fn("@llm4ts/flow/Equiv.readVectors")(function* (files, path) {
|
|
208
|
+
const contents = yield* files.read(path);
|
|
209
|
+
if (contents === undefined) {
|
|
210
|
+
return [];
|
|
211
|
+
}
|
|
212
|
+
const vectors = yield* Effect.forEach(contents
|
|
213
|
+
.split(/\r?\n/u)
|
|
214
|
+
.map((line) => line.trim())
|
|
215
|
+
.filter((line) => line.length > 0), (line, index) => Schema.decodeUnknownEffect(vectorCodec)(line).pipe(Effect.mapError((error) => PlanParseError.make({
|
|
216
|
+
message: `malformed vector at ${path}:${index + 1}: ${String(error)}`
|
|
217
|
+
}))), { concurrency: 1 });
|
|
218
|
+
for (const vector of vectors) {
|
|
219
|
+
if (vector.schemaVersion !== CurrentEquivSchema) {
|
|
220
|
+
return yield* UnsupportedSchemaVersion.make({
|
|
221
|
+
path,
|
|
222
|
+
expected: CurrentEquivSchema,
|
|
223
|
+
actual: vector.schemaVersion
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
return vectors;
|
|
228
|
+
});
|
|
229
|
+
export const replayEquivVector = Effect.fn("@llm4ts/flow/Equiv.replayVector")(function* (process, events, command, root, vector) {
|
|
230
|
+
const executable = command[0];
|
|
231
|
+
if (executable === undefined) {
|
|
232
|
+
return yield* ProcessError.make({
|
|
233
|
+
message: "replay",
|
|
234
|
+
detail: "empty replay command"
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
const input = yield* Schema.encodeEffect(vectorCodec)(vector).pipe(Effect.mapError((error) => PlanParseError.make({
|
|
238
|
+
message: `failed to encode vector ${vector.program}/${vector.id}: ${String(error)}`
|
|
239
|
+
})));
|
|
240
|
+
const result = yield* guarded(Capabilities.Exec(executable), "equivalence replay", events, process.runWithStdin(command, root, {}, input).pipe(Effect.mapError((error) => ProcessError.make({
|
|
241
|
+
message: "equivalence replay",
|
|
242
|
+
detail: error.message
|
|
243
|
+
}))));
|
|
244
|
+
if (result.exitCode !== 0) {
|
|
245
|
+
return ReplayedCrashed.make({
|
|
246
|
+
exitCode: result.exitCode,
|
|
247
|
+
problem: [...result.stderr, ...result.stdout].join("\n")
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
const output = result.stdout.join("\n");
|
|
251
|
+
const actual = yield* Schema.decodeUnknownEffect(observationsCodec)(output).pipe(Effect.mapError((error) => PlanParseError.make({
|
|
252
|
+
message: `replay output for ${vector.program}/${vector.id} is not an observation array: ${String(error)}`
|
|
253
|
+
})));
|
|
254
|
+
return ReplayedObserved.make({ actual });
|
|
255
|
+
});
|
|
256
|
+
//# sourceMappingURL=Equiv.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Equiv.js","sourceRoot":"","sources":["../src/Equiv.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import * as Schema from "effect/Schema";
|
|
2
|
+
import { EquivMismatch, EquivVector } from "./Equiv.ts";
|
|
3
|
+
declare const VectorVerdict_base: Schema.Class<VectorVerdict, Schema.Struct<{
|
|
4
|
+
readonly vector: typeof EquivVector;
|
|
5
|
+
readonly mismatches: Schema.$Array<Schema.Union<readonly [typeof import("./Equiv.ts").MissingObservation, typeof import("./Equiv.ts").UnexpectedObservation, typeof import("./Equiv.ts").ObservationFieldDiff]>>;
|
|
6
|
+
}>, {}>;
|
|
7
|
+
export declare class VectorVerdict extends VectorVerdict_base {
|
|
8
|
+
get passed(): boolean;
|
|
9
|
+
}
|
|
10
|
+
export interface EquivVerdict {
|
|
11
|
+
readonly vector: EquivVector;
|
|
12
|
+
readonly mismatches: ReadonlyArray<EquivMismatch>;
|
|
13
|
+
}
|
|
14
|
+
export declare const renderEquivReport: (verdicts: ReadonlyArray<EquivVerdict>, allRules: ReadonlyArray<string>) => string;
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=EquivReport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EquivReport.d.ts","sourceRoot":"","sources":["../src/EquivReport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,aAAa,EAAyB,WAAW,EAAE,MAAM,YAAY,CAAA;;;;;AAE9E,qBAAa,aAAc,SAAQ,kBAGjC;IACA,IAAI,MAAM,IAAI,OAAO,CAEpB;CACF;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAA;IAC5B,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC,aAAa,CAAC,CAAA;CAClD;AA6BD,eAAO,MAAM,iBAAiB,GAC5B,UAAU,aAAa,CAAC,YAAY,CAAC,EACrC,UAAU,aAAa,CAAC,MAAM,CAAC,KAC9B,MA4CF,CAAA"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import * as Schema from "effect/Schema";
|
|
2
|
+
import { EquivMismatch, EquivVector } from "./Equiv.js";
|
|
3
|
+
export class VectorVerdict extends Schema.Class("VectorVerdict")({
|
|
4
|
+
vector: EquivVector,
|
|
5
|
+
mismatches: Schema.Array(EquivMismatch)
|
|
6
|
+
}) {
|
|
7
|
+
get passed() {
|
|
8
|
+
return this.mismatches.length === 0;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
const observation = (value) => {
|
|
12
|
+
const pairs = (fields) => Object.entries(fields)
|
|
13
|
+
.sort(([left], [right]) => left.localeCompare(right))
|
|
14
|
+
.map(([key, item]) => `${key}=${item}`)
|
|
15
|
+
.join(", ");
|
|
16
|
+
switch (value.type) {
|
|
17
|
+
case "record":
|
|
18
|
+
return `record ${value.kind} ${pairs(value.fields)}`;
|
|
19
|
+
case "message":
|
|
20
|
+
return `message ${value.topic} ${value.key} ${pairs(value.fields)}`;
|
|
21
|
+
case "db":
|
|
22
|
+
return `db ${value.table} ${value.op} ${pairs(value.key)} → ${pairs(value.set)}`;
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
const describe = (mismatch) => {
|
|
26
|
+
switch (mismatch._tag) {
|
|
27
|
+
case "FieldDiff":
|
|
28
|
+
return `- ${mismatch.at}: \`${mismatch.field}\` expected ${mismatch.expected}, actual ${mismatch.actual}`;
|
|
29
|
+
case "Missing":
|
|
30
|
+
return `- missing: ${observation(mismatch.expected)}`;
|
|
31
|
+
case "Unexpected":
|
|
32
|
+
return `- unexpected: ${observation(mismatch.actual)}`;
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
export const renderEquivReport = (verdicts, allRules) => {
|
|
36
|
+
const rows = allRules.map((rule) => {
|
|
37
|
+
const exercising = verdicts.filter(({ vector }) => vector.rules.includes(rule));
|
|
38
|
+
const generated = exercising.filter(({ vector }) => vector.tier === "generated");
|
|
39
|
+
const captured = exercising.filter(({ vector }) => vector.tier === "captured");
|
|
40
|
+
const cell = (values) => values.length === 0
|
|
41
|
+
? "—"
|
|
42
|
+
: `${values.filter(({ mismatches }) => mismatches.length === 0).length}/${values.length}`;
|
|
43
|
+
const status = exercising.length === 0
|
|
44
|
+
? "UNEXERCISED"
|
|
45
|
+
: exercising.some(({ mismatches }) => mismatches.length > 0)
|
|
46
|
+
? "FAILING"
|
|
47
|
+
: captured.length > 0
|
|
48
|
+
? "proven (captured)"
|
|
49
|
+
: "proven (generated)";
|
|
50
|
+
return `| ${rule} | ${cell(generated)} | ${cell(captured)} | ${status} |`;
|
|
51
|
+
});
|
|
52
|
+
const failing = verdicts.filter(({ mismatches }) => mismatches.length > 0);
|
|
53
|
+
const failures = failing.length === 0
|
|
54
|
+
? []
|
|
55
|
+
: [
|
|
56
|
+
"",
|
|
57
|
+
"## Failing vectors",
|
|
58
|
+
...failing.flatMap(({ vector, mismatches }) => [
|
|
59
|
+
"",
|
|
60
|
+
`### ${vector.program} ${vector.id} (${vector.tier})`,
|
|
61
|
+
...mismatches.map(describe)
|
|
62
|
+
])
|
|
63
|
+
];
|
|
64
|
+
return [
|
|
65
|
+
"# Equivalence report",
|
|
66
|
+
"",
|
|
67
|
+
"| Rule | Generated | Captured | Status |",
|
|
68
|
+
"| ---- | --------- | -------- | ------ |",
|
|
69
|
+
...rows,
|
|
70
|
+
...failures,
|
|
71
|
+
"",
|
|
72
|
+
"Generated vectors prove spec conformance; captured vectors prove behavioural equivalence.",
|
|
73
|
+
"The two tiers are reported separately and never summed.",
|
|
74
|
+
""
|
|
75
|
+
].join("\n");
|
|
76
|
+
};
|
|
77
|
+
//# sourceMappingURL=EquivReport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EquivReport.js","sourceRoot":"","sources":["../src/EquivReport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,aAAa,EAAyB,WAAW,EAAE,MAAM,YAAY,CAAA;AAE9E,MAAM,OAAO,aAAc,SAAQ,MAAM,CAAC,KAAK,CAAgB,eAAe,CAAC,CAAC;IAC9E,MAAM,EAAE,WAAW;IACnB,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC;CACxC,CAAC;IACA,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,CAAA;IACrC,CAAC;CACF;AAOD,MAAM,WAAW,GAAG,CAAC,KAAuB,EAAU,EAAE;IACtD,MAAM,KAAK,GAAG,CAAC,MAAwC,EAAU,EAAE,CACjE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;SACnB,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;SACpD,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;SACtC,IAAI,CAAC,IAAI,CAAC,CAAA;IACf,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,QAAQ;YACX,OAAO,UAAU,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAA;QACtD,KAAK,SAAS;YACZ,OAAO,WAAW,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAA;QACrE,KAAK,IAAI;YACP,OAAO,MAAM,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,EAAE,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAA;IACpF,CAAC;AACH,CAAC,CAAA;AAED,MAAM,QAAQ,GAAG,CAAC,QAAuB,EAAU,EAAE;IACnD,QAAQ,QAAQ,CAAC,IAAI,EAAE,CAAC;QACtB,KAAK,WAAW;YACd,OAAO,KAAK,QAAQ,CAAC,EAAE,OAAO,QAAQ,CAAC,KAAK,eAAe,QAAQ,CAAC,QAAQ,YAAY,QAAQ,CAAC,MAAM,EAAE,CAAA;QAC3G,KAAK,SAAS;YACZ,OAAO,cAAc,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAA;QACvD,KAAK,YAAY;YACf,OAAO,iBAAiB,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAA;IAC1D,CAAC;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,QAAqC,EACrC,QAA+B,EACvB,EAAE;IACV,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACjC,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAA;QAC/E,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,WAAW,CAAC,CAAA;QAChF,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,UAAU,CAAC,CAAA;QAC9E,MAAM,IAAI,GAAG,CAAC,MAAmC,EAAU,EAAE,CAC3D,MAAM,CAAC,MAAM,KAAK,CAAC;YACjB,CAAC,CAAC,GAAG;YACL,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,CAAA;QAC7F,MAAM,MAAM,GACV,UAAU,CAAC,MAAM,KAAK,CAAC;YACrB,CAAC,CAAC,aAAa;YACf,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;gBAC1D,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;oBACnB,CAAC,CAAC,mBAAmB;oBACrB,CAAC,CAAC,oBAAoB,CAAA;QAC9B,OAAO,KAAK,IAAI,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,MAAM,IAAI,CAAA;IAC3E,CAAC,CAAC,CAAA;IACF,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IAC1E,MAAM,QAAQ,GACZ,OAAO,CAAC,MAAM,KAAK,CAAC;QAClB,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC;YACE,EAAE;YACF,oBAAoB;YACpB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;gBAC7C,EAAE;gBACF,OAAO,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,EAAE,KAAK,MAAM,CAAC,IAAI,GAAG;gBACrD,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC;aAC5B,CAAC;SACH,CAAA;IACP,OAAO;QACL,sBAAsB;QACtB,EAAE;QACF,0CAA0C;QAC1C,0CAA0C;QAC1C,GAAG,IAAI;QACP,GAAG,QAAQ;QACX,EAAE;QACF,2FAA2F;QAC3F,yDAAyD;QACzD,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACd,CAAC,CAAA"}
|
package/dist/Flow.d.ts
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import * as Effect from "effect/Effect";
|
|
2
|
+
import type { LlmServiceShape } from "@llm4ts/core/LlmService";
|
|
3
|
+
import type { FlowContextShape } from "./FlowContext.ts";
|
|
4
|
+
import { FlowLlmError, type FlowError } from "./FlowError.ts";
|
|
5
|
+
import { type FlowEventsShape } from "./FlowEvents.ts";
|
|
6
|
+
import type { Plan, Task } from "./Plan.ts";
|
|
7
|
+
import type { PlanStoreShape } from "./Persistence.ts";
|
|
8
|
+
import { type ReviewResult } from "./Review.ts";
|
|
9
|
+
import type { Reviewer } from "./Reviewer.ts";
|
|
10
|
+
export declare const flowReviewer: (context: FlowContextShape) => LlmServiceShape;
|
|
11
|
+
export declare const completeAndPublish: (service: LlmServiceShape, events: FlowEventsShape, prompt: string) => Effect.Effect<string, FlowLlmError, never>;
|
|
12
|
+
export interface ImplementPlanOptions {
|
|
13
|
+
readonly store: PlanStoreShape;
|
|
14
|
+
readonly planPath: string;
|
|
15
|
+
readonly plan: Effect.Effect<Plan, FlowError>;
|
|
16
|
+
readonly system?: string;
|
|
17
|
+
readonly reviewers?: ReadonlyArray<Reviewer>;
|
|
18
|
+
readonly commitMessage?: (plan: Plan, task: Task) => string;
|
|
19
|
+
readonly checkoutBranch?: boolean;
|
|
20
|
+
readonly maxRounds?: number;
|
|
21
|
+
readonly lint?: Effect.Effect<ReviewResult, FlowError>;
|
|
22
|
+
readonly format?: Effect.Effect<void, FlowError>;
|
|
23
|
+
}
|
|
24
|
+
export declare const implementPlanFlow: (context: FlowContextShape, options: ImplementPlanOptions) => Effect.Effect<Plan, import("./FlowError.ts").PersistenceError | import("./FlowError.ts").PlanParseError | import("./FlowError.ts").UnsupportedSchemaVersion | import("./FlowError.ts").WorkspacePathError | import("./FlowError.ts").WorkspaceLimitError | import("./FlowError.ts").WorkspaceIoError | import("./FlowError.ts").FlowAborted | import("./FlowError.ts").ProcessError | FlowLlmError | import("./FlowError.ts").FlowCapabilityDenied | import("./FlowError.ts").BudgetExceeded, never>;
|
|
25
|
+
//# sourceMappingURL=Flow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Flow.d.ts","sourceRoot":"","sources":["../src/Flow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAG9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AACxD,OAAO,EAAE,YAAY,EAAE,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC7D,OAAO,EAAoB,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACxE,OAAO,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAC3C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEtD,OAAO,EAAsC,KAAK,YAAY,EAAE,MAAM,aAAa,CAAA;AACnF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAE7C,eAAO,MAAM,YAAY,GAAI,SAAS,gBAAgB,KAAG,eACd,CAAA;AAE3C,eAAO,MAAM,kBAAkB,mHAU7B,CAAA;AAEF,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAA;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;IAC7C,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,SAAS,CAAC,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAA;IAC5C,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,KAAK,MAAM,CAAA;IAC3D,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAA;IACjC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,SAAS,CAAC,CAAA;IACtD,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;CACjD;AAID,eAAO,MAAM,iBAAiB,oiBA4B5B,CAAA"}
|
package/dist/Flow.js
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import * as Effect from "effect/Effect";
|
|
2
|
+
import { collect } from "@llm4ts/core/Streaming";
|
|
3
|
+
import { makeChat } from "./Chat.js";
|
|
4
|
+
import { FlowLlmError } from "./FlowError.js";
|
|
5
|
+
import { AssistantMessage } from "./FlowEvents.js";
|
|
6
|
+
import { implementTaskLoop, stage } from "./PlanExecution.js";
|
|
7
|
+
import { minimalReviewers, reviewAndFixLoop } from "./Review.js";
|
|
8
|
+
export const flowReviewer = (context) => context.reviewers[0] ?? context.reasoning;
|
|
9
|
+
export const completeAndPublish = Effect.fn("@llm4ts/flow/Flow.completeAndPublish")(function* (service, events, prompt) {
|
|
10
|
+
const response = yield* collect(service.executeStream(prompt)).pipe(Effect.mapError(FlowLlmError.from));
|
|
11
|
+
yield* events.publish(AssistantMessage.make({ text: response.content }));
|
|
12
|
+
return response.content;
|
|
13
|
+
});
|
|
14
|
+
const defaultCommitMessage = (plan, task) => `${plan.epicId}: ${task.title}`;
|
|
15
|
+
export const implementPlanFlow = Effect.fn("@llm4ts/flow/Flow.implementPlan")(function* (context, options) {
|
|
16
|
+
const plan = yield* options.store.recoverOrCreate(options.planPath, options.plan);
|
|
17
|
+
if (options.checkoutBranch !== false) {
|
|
18
|
+
yield* stage(context.events, "branch", context.git.checkoutOrCreate(plan.epicId));
|
|
19
|
+
}
|
|
20
|
+
const coder = yield* makeChat(context.coder, {
|
|
21
|
+
...(options.system === undefined ? {} : { system: options.system })
|
|
22
|
+
});
|
|
23
|
+
return yield* implementTaskLoop(options.store, context.events, options.planPath, plan, (task) => Effect.gen(function* () {
|
|
24
|
+
yield* coder.ask(plan.taskPrompt(task));
|
|
25
|
+
yield* reviewAndFixLoop({
|
|
26
|
+
reviewers: options.reviewers ?? minimalReviewers,
|
|
27
|
+
reviewerService: flowReviewer(context),
|
|
28
|
+
coder,
|
|
29
|
+
taskTitle: task.title,
|
|
30
|
+
currentDiff: context.git.diff,
|
|
31
|
+
events: context.events,
|
|
32
|
+
...(options.maxRounds === undefined ? {} : { maxRounds: options.maxRounds }),
|
|
33
|
+
...(options.lint === undefined ? {} : { lint: options.lint }),
|
|
34
|
+
...(options.format === undefined ? {} : { format: options.format })
|
|
35
|
+
});
|
|
36
|
+
yield* context.git.commitAll((options.commitMessage ?? defaultCommitMessage)(plan, task));
|
|
37
|
+
}));
|
|
38
|
+
});
|
|
39
|
+
//# sourceMappingURL=Flow.js.map
|
package/dist/Flow.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Flow.js","sourceRoot":"","sources":["../src/Flow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEpC,OAAO,EAAE,YAAY,EAAkB,MAAM,gBAAgB,CAAA;AAC7D,OAAO,EAAE,gBAAgB,EAAwB,MAAM,iBAAiB,CAAA;AAGxE,OAAO,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAC7D,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAqB,MAAM,aAAa,CAAA;AAGnF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,OAAyB,EAAmB,EAAE,CACzE,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,SAAS,CAAA;AAE3C,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAC,EAAE,CAAC,sCAAsC,CAAC,CAAC,QAAQ,CAAC,EAC3F,OAAwB,EACxB,MAAuB,EACvB,MAAc;IAEd,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CACjE,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,CACnC,CAAA;IACD,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;IACxE,OAAO,QAAQ,CAAC,OAAO,CAAA;AACzB,CAAC,CAAC,CAAA;AAeF,MAAM,oBAAoB,GAAG,CAAC,IAAU,EAAE,IAAU,EAAU,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,KAAK,EAAE,CAAA;AAEhG,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC,EAAE,CAAC,iCAAiC,CAAC,CAAC,QAAQ,CAAC,EACrF,OAAyB,EACzB,OAA6B;IAE7B,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,CAAA;IACjF,IAAI,OAAO,CAAC,cAAc,KAAK,KAAK,EAAE,CAAC;QACrC,KAAK,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAA;IACnF,CAAC;IACD,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE;QAC3C,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;KACpE,CAAC,CAAA;IACF,OAAO,KAAK,CAAC,CAAC,iBAAiB,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAC9F,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAA;QACvC,KAAK,CAAC,CAAC,gBAAgB,CAAC;YACtB,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,gBAAgB;YAChD,eAAe,EAAE,YAAY,CAAC,OAAO,CAAC;YACtC,KAAK;YACL,SAAS,EAAE,IAAI,CAAC,KAAK;YACrB,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI;YAC7B,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,GAAG,CAAC,OAAO,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC;YAC5E,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC;YAC7D,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;SACpE,CAAC,CAAA;QACF,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,aAAa,IAAI,oBAAoB,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;IAC3F,CAAC,CAAC,CACH,CAAA;AACH,CAAC,CAAC,CAAA"}
|