@usine/config 0.0.1 → 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/README.md +32 -2
- package/dist/frontmatter.d.ts +10 -0
- package/dist/frontmatter.d.ts.map +1 -0
- package/dist/frontmatter.js +51 -0
- package/dist/frontmatter.js.map +1 -0
- package/dist/index.d.ts +8 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -7
- package/dist/index.js.map +1 -1
- package/dist/instance-folder.d.ts +13 -0
- package/dist/instance-folder.d.ts.map +1 -0
- package/dist/instance-folder.js +81 -0
- package/dist/instance-folder.js.map +1 -0
- package/dist/model.d.ts +257 -0
- package/dist/model.d.ts.map +1 -0
- package/dist/model.js +238 -0
- package/dist/model.js.map +1 -0
- package/dist/parser.d.ts +20 -0
- package/dist/parser.d.ts.map +1 -0
- package/dist/parser.js +165 -0
- package/dist/parser.js.map +1 -0
- package/dist/payload-slices.d.ts +16 -0
- package/dist/payload-slices.d.ts.map +1 -0
- package/dist/payload-slices.js +218 -0
- package/dist/payload-slices.js.map +1 -0
- package/dist/selector.d.ts +5 -0
- package/dist/selector.d.ts.map +1 -0
- package/dist/selector.js +17 -0
- package/dist/selector.js.map +1 -0
- package/dist/yaml/document.d.ts +9 -0
- package/dist/yaml/document.d.ts.map +1 -0
- package/dist/yaml/document.js +38 -0
- package/dist/yaml/document.js.map +1 -0
- package/dist/yaml/writer.d.ts +14 -0
- package/dist/yaml/writer.d.ts.map +1 -0
- package/dist/yaml/writer.js +31 -0
- package/dist/yaml/writer.js.map +1 -0
- package/package.json +13 -2
package/dist/model.js
ADDED
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
import { Agent as CoreAgent, Loop as CoreLoop, Repository, Step, Worker as CoreWorker, } from "@usine/core";
|
|
2
|
+
import { Source } from "@usine/expression";
|
|
3
|
+
import { Cron as EffectCron, DateTime, Effect, Option, Result, Schema } from "effect";
|
|
4
|
+
/** Instance-relative path of one authored file (`usine.yaml`, `loops/x.md`). */
|
|
5
|
+
export const InstancePath = Schema.NonEmptyString.pipe(Schema.brand("InstancePath"));
|
|
6
|
+
export const FileStage = Schema.Literals([
|
|
7
|
+
"expression",
|
|
8
|
+
"frontmatter",
|
|
9
|
+
"read",
|
|
10
|
+
"reference",
|
|
11
|
+
"schema",
|
|
12
|
+
"yaml",
|
|
13
|
+
]);
|
|
14
|
+
/** One precise, file-owned config failure suitable for quarantine UI. */
|
|
15
|
+
export class ConfigFileError extends Schema.TaggedError("@usine/config/ConfigFileError")("ConfigFileError", {
|
|
16
|
+
file: InstancePath,
|
|
17
|
+
stage: FileStage,
|
|
18
|
+
expression: Schema.OptionFromOptionalKey(Source),
|
|
19
|
+
message: Schema.NonEmptyString,
|
|
20
|
+
}) {
|
|
21
|
+
}
|
|
22
|
+
/** A factory-level failure: the registry/settings boundary could not be loaded. */
|
|
23
|
+
export class FactoryConfigError extends Schema.TaggedError("@usine/config/FactoryConfigError")("FactoryConfigError", {
|
|
24
|
+
file: InstancePath,
|
|
25
|
+
stage: FileStage,
|
|
26
|
+
message: Schema.NonEmptyString,
|
|
27
|
+
}) {
|
|
28
|
+
}
|
|
29
|
+
/** Every failure mode this package's parsers and loaders can produce. */
|
|
30
|
+
export const ConfigError = Schema.Union([ConfigFileError, FactoryConfigError]);
|
|
31
|
+
const KebabCase = Schema.isPattern(/^[a-z0-9]+(?:-[a-z0-9]+)*$/u, {
|
|
32
|
+
message: "Expected a kebab-case filename identity",
|
|
33
|
+
});
|
|
34
|
+
const nonBlankString = (message) => Schema.String.check(Schema.isPattern(/\S/u, { message }));
|
|
35
|
+
export const AgentName = CoreAgent.Name;
|
|
36
|
+
export const LoopName = CoreLoop.LoopName.check(KebabCase);
|
|
37
|
+
export const WorkerName = CoreWorker.Name;
|
|
38
|
+
export const RepoName = Repository.Name;
|
|
39
|
+
export const RegistryTag = nonBlankString("Expected a non-blank registry tag").pipe(Schema.brand("RegistryTag"));
|
|
40
|
+
export const LaneName = nonBlankString("Expected a non-blank lane name").pipe(Schema.brand("LaneName"));
|
|
41
|
+
export const GitHubLabelName = nonBlankString("Expected a non-blank GitHub label name").pipe(Schema.brand("GitHubLabelName"));
|
|
42
|
+
export const LaneItemState = Schema.Literals([
|
|
43
|
+
"issue-open",
|
|
44
|
+
"issue-closed",
|
|
45
|
+
"pr-open",
|
|
46
|
+
"pr-closed",
|
|
47
|
+
"pr-merged",
|
|
48
|
+
]);
|
|
49
|
+
export class LabelLaneSource extends Schema.Class("@usine/config/LabelLaneSource")({
|
|
50
|
+
label: GitHubLabelName,
|
|
51
|
+
}) {
|
|
52
|
+
}
|
|
53
|
+
export class StateLaneSource extends Schema.Class("@usine/config/StateLaneSource")({
|
|
54
|
+
state: LaneItemState,
|
|
55
|
+
}) {
|
|
56
|
+
}
|
|
57
|
+
export const LaneSource = Schema.Union([LabelLaneSource, StateLaneSource]);
|
|
58
|
+
export class Lane extends Schema.Class("@usine/config/Lane")({
|
|
59
|
+
name: LaneName,
|
|
60
|
+
sources: Schema.Array(LaneSource).check(Schema.isNonEmpty()),
|
|
61
|
+
}) {
|
|
62
|
+
}
|
|
63
|
+
export const ModelId = CoreAgent.ModelId;
|
|
64
|
+
export const OperatorLogin = Schema.String.check(Schema.isPattern(/^[A-Za-z0-9](?:[A-Za-z0-9-]{0,37}[A-Za-z0-9])?$/u, {
|
|
65
|
+
message: "Expected a GitHub login",
|
|
66
|
+
})).pipe(Schema.brand("OperatorLogin"));
|
|
67
|
+
export const PromptTemplate = nonBlankString("Expected a non-blank Markdown prompt").pipe(Schema.brand("PromptTemplate"));
|
|
68
|
+
export const Persona = CoreAgent.Persona;
|
|
69
|
+
const PositiveInt = Schema.Int.check(Schema.isGreaterThanOrEqualTo(1));
|
|
70
|
+
const uniqueNames = Schema.makeFilter((values) => new Set(values.map(({ name }) => name)).size === values.length, { message: "Expected unique names" });
|
|
71
|
+
const laneSourceKey = (source) => "label" in source ? `label:${source.label}` : `state:${source.state}`;
|
|
72
|
+
const uniqueLaneSources = Schema.makeFilter((lanes) => {
|
|
73
|
+
const keys = lanes.flatMap(({ sources }) => sources.map(laneSourceKey));
|
|
74
|
+
return new Set(keys).size === keys.length;
|
|
75
|
+
}, { message: "Expected every lane source to be mapped once" });
|
|
76
|
+
const Lanes = Schema.Array(Lane).check(uniqueNames, uniqueLaneSources);
|
|
77
|
+
export class ManagedRepo extends Schema.Class("@usine/config/ManagedRepo")({
|
|
78
|
+
name: RepoName,
|
|
79
|
+
tags: Schema.Array(RegistryTag)
|
|
80
|
+
.check(Schema.isUnique())
|
|
81
|
+
.pipe(Schema.withDecodingDefaultKey(Effect.succeed([]))),
|
|
82
|
+
lanes: Lanes.pipe(Schema.withDecodingDefaultKey(Effect.succeed([]))),
|
|
83
|
+
}) {
|
|
84
|
+
}
|
|
85
|
+
export const WorkerKind = CoreWorker.Kind;
|
|
86
|
+
export class Worker extends Schema.Class("@usine/config/Worker")({
|
|
87
|
+
name: WorkerName,
|
|
88
|
+
kind: WorkerKind,
|
|
89
|
+
maxConcurrentAttempts: PositiveInt.pipe(Schema.withDecodingDefaultKey(Effect.succeed(1))),
|
|
90
|
+
}) {
|
|
91
|
+
}
|
|
92
|
+
export class Settings extends Schema.Class("@usine/config/Settings")({
|
|
93
|
+
pollInterval: PositiveInt.pipe(Schema.withDecodingDefaultKey(Effect.succeed(60))),
|
|
94
|
+
maxChildren: PositiveInt.pipe(Schema.withDecodingDefaultKey(Effect.succeed(4))),
|
|
95
|
+
maxAttemptMinutes: PositiveInt.pipe(Schema.withDecodingDefaultKey(Effect.succeed(60))),
|
|
96
|
+
maxAttemptTokens: PositiveInt.pipe(Schema.withDecodingDefaultKey(Effect.succeed(10_000_000))),
|
|
97
|
+
parentModel: Schema.OptionFromOptionalKey(ModelId),
|
|
98
|
+
}) {
|
|
99
|
+
}
|
|
100
|
+
export const Webhooks = Schema.Union([
|
|
101
|
+
Schema.Struct({ mode: Schema.Literal("off") }),
|
|
102
|
+
Schema.Struct({ mode: Schema.Literal("deliveries") }),
|
|
103
|
+
Schema.Struct({ mode: Schema.Literal("endpoint"), publicUrl: Schema.URLFromString }).pipe(Schema.encodeKeys({ publicUrl: "public_url" })),
|
|
104
|
+
]);
|
|
105
|
+
// The authored YAML surface is snake_case; domain fields are camelCase. The
|
|
106
|
+
// renames live here, at the parse boundary, and encode back for edits.
|
|
107
|
+
const SettingsFromYaml = Settings.pipe(Schema.encodeKeys({
|
|
108
|
+
pollInterval: "poll_interval",
|
|
109
|
+
maxChildren: "max_children",
|
|
110
|
+
maxAttemptMinutes: "max_attempt_minutes",
|
|
111
|
+
maxAttemptTokens: "max_attempt_tokens",
|
|
112
|
+
parentModel: "parent_model",
|
|
113
|
+
}));
|
|
114
|
+
const WorkerFromYaml = Worker.pipe(Schema.encodeKeys({ maxConcurrentAttempts: "max_concurrent_attempts" }));
|
|
115
|
+
const ManagedRepos = Schema.Array(ManagedRepo).check(uniqueNames);
|
|
116
|
+
const Workers = Schema.Array(WorkerFromYaml).check(Schema.isNonEmpty(), uniqueNames);
|
|
117
|
+
/** Strict, factory-wide authored config from usine.yaml. */
|
|
118
|
+
export class UsineConfig extends Schema.Class("@usine/config/UsineConfig")({
|
|
119
|
+
version: Schema.Literal(1),
|
|
120
|
+
repos: ManagedRepos,
|
|
121
|
+
settings: SettingsFromYaml.pipe(Schema.withDecodingDefaultKey(Effect.succeed({}))),
|
|
122
|
+
workers: Workers.pipe(Schema.withDecodingDefaultKey(Effect.succeed([{ name: "local", kind: "local" }]))),
|
|
123
|
+
webhooks: Webhooks.pipe(Schema.withDecodingDefaultKey(Effect.succeed({ mode: "off" }))),
|
|
124
|
+
operator: Schema.OptionFromOptionalKey(OperatorLogin),
|
|
125
|
+
}) {
|
|
126
|
+
}
|
|
127
|
+
export class Selector extends Schema.Class("@usine/config/Selector")({
|
|
128
|
+
repos: Schema.OptionFromOptionalKey(Schema.Array(RepoName).check(Schema.isNonEmpty(), Schema.isUnique())),
|
|
129
|
+
tags: Schema.OptionFromOptionalKey(Schema.Array(RegistryTag).check(Schema.isNonEmpty(), Schema.isUnique())),
|
|
130
|
+
}) {
|
|
131
|
+
}
|
|
132
|
+
export const ValidSelector = Selector.check(Schema.makeFilter((selector) => Option.isSome(selector.repos) || Option.isSome(selector.tags), {
|
|
133
|
+
message: "Expected selector.repos, selector.tags, or both",
|
|
134
|
+
}));
|
|
135
|
+
// Validated by the same effect Cron parser the engine's scheduler evaluates
|
|
136
|
+
// with, so a cron that parses here parses at tick time too. Evaluation is a
|
|
137
|
+
// weaker guarantee: Cron.prev/next can still fail inside a DST gap, which the
|
|
138
|
+
// scheduler isolates per schedule.
|
|
139
|
+
const isFiveFieldCron = (value) => value.trim().split(/\s+/u).length === 5 && Result.isSuccess(EffectCron.parse(value));
|
|
140
|
+
export const Cron = Schema.String.check(Schema.makeFilter(isFiveFieldCron, { message: "Expected a valid five-field cron expression" })).pipe(Schema.brand("Cron"));
|
|
141
|
+
const isTimeZone = (value) => Option.isSome(DateTime.zoneMakeNamed(value));
|
|
142
|
+
export const TimeZone = Schema.String.check(Schema.makeFilter(isTimeZone, { message: "Expected an IANA time-zone name" })).pipe(Schema.brand("TimeZone"));
|
|
143
|
+
export class IssueTrigger extends Schema.Class("@usine/config/IssueTrigger")({
|
|
144
|
+
on: Schema.Literal("issue"),
|
|
145
|
+
if: Source,
|
|
146
|
+
}) {
|
|
147
|
+
}
|
|
148
|
+
export class PullRequestTrigger extends Schema.Class("@usine/config/PullRequestTrigger")({
|
|
149
|
+
on: Schema.Literal("pr"),
|
|
150
|
+
if: Source,
|
|
151
|
+
}) {
|
|
152
|
+
}
|
|
153
|
+
export class ScheduleTrigger extends Schema.Class("@usine/config/ScheduleTrigger")({
|
|
154
|
+
on: Schema.Literal("schedule"),
|
|
155
|
+
if: Source,
|
|
156
|
+
cron: Cron,
|
|
157
|
+
tz: TimeZone.pipe(Schema.withDecodingDefaultKey(Effect.succeed("UTC"))),
|
|
158
|
+
}) {
|
|
159
|
+
}
|
|
160
|
+
export const Trigger = Schema.Union([IssueTrigger, PullRequestTrigger, ScheduleTrigger]);
|
|
161
|
+
export class LoopFile extends Schema.Class("@usine/config/LoopFile")({
|
|
162
|
+
name: LoopName,
|
|
163
|
+
trigger: Trigger,
|
|
164
|
+
selector: Schema.Option(ValidSelector),
|
|
165
|
+
approval: CoreLoop.ApprovalRequirement,
|
|
166
|
+
step: Step.StepName,
|
|
167
|
+
agent: AgentName,
|
|
168
|
+
body: PromptTemplate,
|
|
169
|
+
}) {
|
|
170
|
+
}
|
|
171
|
+
export const Harness = CoreAgent.Harness;
|
|
172
|
+
export const Effort = CoreAgent.Effort;
|
|
173
|
+
export class AgentFile extends Schema.Class("@usine/config/AgentFile")({
|
|
174
|
+
name: AgentName,
|
|
175
|
+
harness: Harness,
|
|
176
|
+
model: ModelId,
|
|
177
|
+
effort: Effort,
|
|
178
|
+
parentModel: Schema.Option(ModelId),
|
|
179
|
+
persona: Persona,
|
|
180
|
+
}) {
|
|
181
|
+
}
|
|
182
|
+
export class InvalidAgent extends Schema.Class("@usine/config/InvalidAgent")({
|
|
183
|
+
file: InstancePath,
|
|
184
|
+
error: ConfigFileError,
|
|
185
|
+
}) {
|
|
186
|
+
}
|
|
187
|
+
export class QuarantinedLoop extends Schema.Class("@usine/config/QuarantinedLoop")({
|
|
188
|
+
file: InstancePath,
|
|
189
|
+
error: ConfigFileError,
|
|
190
|
+
}) {
|
|
191
|
+
}
|
|
192
|
+
/** The instance-relative path a loop's filename identity maps back to. */
|
|
193
|
+
export const loopPath = (name) => InstancePath.make(`loops/${name}.md`);
|
|
194
|
+
export const referenceIndex = (config, agents) => ({
|
|
195
|
+
agentNames: new Set(agents.map(({ name }) => name)),
|
|
196
|
+
registryTags: new Set(config.repos.flatMap(({ tags }) => tags)),
|
|
197
|
+
repoNames: new Set(config.repos.map(({ name }) => name)),
|
|
198
|
+
});
|
|
199
|
+
/**
|
|
200
|
+
* Pure deriver: the reference failure quarantining one loop against the
|
|
201
|
+
* loaded roster and registry, if any. The single owner of the reference rule
|
|
202
|
+
* — the folder loader reports it per file, LoadedInstance enforces it at
|
|
203
|
+
* construction.
|
|
204
|
+
*/
|
|
205
|
+
export const loopReferenceFailure = (file, loop, references) => {
|
|
206
|
+
const referenceError = (message) => Option.some(new ConfigFileError({ file, stage: "reference", expression: Option.none(), message }));
|
|
207
|
+
if (!references.agentNames.has(loop.agent)) {
|
|
208
|
+
return referenceError(`Unknown agent: ${loop.agent}`);
|
|
209
|
+
}
|
|
210
|
+
if (Option.isNone(loop.selector))
|
|
211
|
+
return Option.none();
|
|
212
|
+
if (Option.isSome(loop.selector.value.repos)) {
|
|
213
|
+
const missing = loop.selector.value.repos.value.filter((name) => !references.repoNames.has(name));
|
|
214
|
+
if (missing.length > 0) {
|
|
215
|
+
return referenceError(`Unknown selector repos: ${missing.join(", ")}`);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
if (Option.isSome(loop.selector.value.tags)) {
|
|
219
|
+
const missing = loop.selector.value.tags.value.filter((tag) => !references.registryTags.has(tag));
|
|
220
|
+
if (missing.length > 0) {
|
|
221
|
+
return referenceError(`Unknown selector tags: ${missing.join(", ")}`);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
return Option.none();
|
|
225
|
+
};
|
|
226
|
+
/** One atomic snapshot of an instance folder. Loops with unresolved references are unconstructible. */
|
|
227
|
+
export class LoadedInstance extends Schema.Class("@usine/config/LoadedInstance")(Schema.Struct({
|
|
228
|
+
config: UsineConfig,
|
|
229
|
+
agents: Schema.Array(AgentFile),
|
|
230
|
+
invalidAgents: Schema.Array(InvalidAgent),
|
|
231
|
+
loops: Schema.Array(LoopFile),
|
|
232
|
+
quarantinedLoops: Schema.Array(QuarantinedLoop),
|
|
233
|
+
}).check(Schema.makeFilter(({ agents, config, loops }) => {
|
|
234
|
+
const references = referenceIndex(config, agents);
|
|
235
|
+
return loops.every((loop) => Option.isNone(loopReferenceFailure(loopPath(loop.name), loop, references)));
|
|
236
|
+
}, { message: "Expected every loop to reference the loaded roster and registry" }))) {
|
|
237
|
+
}
|
|
238
|
+
//# sourceMappingURL=model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.js","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"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"}
|
package/dist/parser.d.ts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { ExpressionEngine } from "@usine/expression";
|
|
2
|
+
import { Context, Effect, Layer, Schema } from "effect";
|
|
3
|
+
import { AgentFile, ConfigFileError, InstancePath, LoopFile, UsineConfig } from "./model.ts";
|
|
4
|
+
declare const ConfigParser_base: Context.ServiceClass<ConfigParser, "@usine/config/ConfigParser", {
|
|
5
|
+
readonly parseUsineYaml: (file: InstancePath, source: string) => Effect.Effect<UsineConfig, ConfigFileError>;
|
|
6
|
+
readonly parseAgentFile: (file: InstancePath, source: string) => Effect.Effect<AgentFile, ConfigFileError>;
|
|
7
|
+
readonly parseLoopFile: (file: InstancePath, source: string) => Effect.Effect<LoopFile, ConfigFileError>;
|
|
8
|
+
readonly renderPrompt: (loop: LoopFile, context: Schema.JsonObject) => Effect.Effect<string, ConfigFileError>;
|
|
9
|
+
}>;
|
|
10
|
+
/**
|
|
11
|
+
* Strict config parser and prompt renderer. All methods capture their CEL
|
|
12
|
+
* dependency. The interface below is the package's declared API — widen it
|
|
13
|
+
* deliberately, never by letting an implementation change leak through
|
|
14
|
+
* inference.
|
|
15
|
+
*/
|
|
16
|
+
export declare class ConfigParser extends ConfigParser_base {
|
|
17
|
+
static readonly layer: Layer.Layer<ConfigParser, never, ExpressionEngine>;
|
|
18
|
+
}
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,gBAAgB,EAGjB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAU,MAAM,EAAe,MAAM,QAAQ,CAAC;AAE7E,OAAO,EACL,SAAS,EAET,eAAe,EAGf,YAAY,EACZ,QAAQ,EAOR,WAAW,EAEZ,MAAM,YAAY,CAAC;;6BAwOS,CACvB,IAAI,EAAE,YAAY,EAClB,MAAM,EAAE,MAAM,KACX,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,eAAe,CAAC;6BACvB,CACvB,IAAI,EAAE,YAAY,EAClB,MAAM,EAAE,MAAM,KACX,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,eAAe,CAAC;4BACtB,CACtB,IAAI,EAAE,YAAY,EAClB,MAAM,EAAE,MAAM,KACX,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,eAAe,CAAC;2BACtB,CACrB,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE,MAAM,CAAC,UAAU,KACvB,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC;;AAxB/C;;;;;GAKG;AACH,qBAAa,YAAa,SAAQ,iBAoBD;IAC/B,MAAM,CAAC,QAAQ,CAAC,KAAK,qDAanB;CACH"}
|
package/dist/parser.js
ADDED
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
import { Loop as CoreLoop, Step } from "@usine/core";
|
|
2
|
+
import { ExpressionEngine, Source, } from "@usine/expression";
|
|
3
|
+
import { Context, Effect, Layer, Option, Schema, SchemaIssue } from "effect";
|
|
4
|
+
import { splitMarkdown } from "./frontmatter.js";
|
|
5
|
+
import { AgentFile, AgentName, ConfigFileError, Effort, Harness, InstancePath, LoopFile, LoopName, loopPath, ModelId, Persona, PromptTemplate, Trigger, UsineConfig, ValidSelector, } from "./model.js";
|
|
6
|
+
import { environmentFor } from "./payload-slices.js";
|
|
7
|
+
import { parseYamlDocument } from "./yaml/document.js";
|
|
8
|
+
const formatIssue = SchemaIssue.makeFormatterDefault();
|
|
9
|
+
class LoopFrontmatter extends Schema.Class("@usine/config/LoopFrontmatter")({
|
|
10
|
+
trigger: Trigger,
|
|
11
|
+
selector: Schema.OptionFromOptionalKey(ValidSelector),
|
|
12
|
+
approval: CoreLoop.ApprovalRequirement.pipe(Schema.withDecodingDefaultKey(Effect.succeed("none"))),
|
|
13
|
+
step: Step.StepName.pipe(Schema.withDecodingDefaultKey(Effect.succeed("run"))),
|
|
14
|
+
agent: AgentName,
|
|
15
|
+
}) {
|
|
16
|
+
}
|
|
17
|
+
class AgentFrontmatter extends Schema.Class("@usine/config/AgentFrontmatter")({
|
|
18
|
+
harness: Harness,
|
|
19
|
+
model: ModelId,
|
|
20
|
+
effort: Effort,
|
|
21
|
+
parent_model: Schema.OptionFromOptionalKey(ModelId),
|
|
22
|
+
}) {
|
|
23
|
+
}
|
|
24
|
+
const schemaError = (file, error) => new ConfigFileError({
|
|
25
|
+
file,
|
|
26
|
+
stage: "schema",
|
|
27
|
+
expression: Option.none(),
|
|
28
|
+
message: formatIssue(error.issue),
|
|
29
|
+
});
|
|
30
|
+
const decodeJson = Schema.decodeUnknownEffect(Schema.Json);
|
|
31
|
+
const parseYaml = (file, source) => Effect.gen(function* () {
|
|
32
|
+
const document = yield* parseYamlDocument(file, source);
|
|
33
|
+
return yield* decodeJson(document.toJS()).pipe(Effect.mapError((error) => new ConfigFileError({
|
|
34
|
+
file,
|
|
35
|
+
stage: "yaml",
|
|
36
|
+
expression: Option.none(),
|
|
37
|
+
message: formatIssue(error.issue),
|
|
38
|
+
})));
|
|
39
|
+
});
|
|
40
|
+
const expressionError = (file, error) => new ConfigFileError({
|
|
41
|
+
file,
|
|
42
|
+
stage: "expression",
|
|
43
|
+
expression: Option.some(error.source),
|
|
44
|
+
message: error.message,
|
|
45
|
+
});
|
|
46
|
+
const markdownName = (file) => {
|
|
47
|
+
const basename = file.slice(file.lastIndexOf("/") + 1);
|
|
48
|
+
if (!basename.endsWith(".md")) {
|
|
49
|
+
return new ConfigFileError({
|
|
50
|
+
file,
|
|
51
|
+
stage: "schema",
|
|
52
|
+
expression: Option.none(),
|
|
53
|
+
message: "Expected a .md filename",
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
return Effect.succeed(basename.slice(0, -3));
|
|
57
|
+
};
|
|
58
|
+
const loopName = (file) => markdownName(file).pipe(Effect.flatMap((name) => Schema.decodeUnknownEffect(LoopName)(name).pipe(Effect.mapError((error) => schemaError(file, error)))));
|
|
59
|
+
const agentName = (file) => markdownName(file).pipe(Effect.flatMap((name) => Schema.decodeUnknownEffect(AgentName)(name).pipe(Effect.mapError((error) => schemaError(file, error)))));
|
|
60
|
+
const interpolations = (file, body) => Effect.gen(function* () {
|
|
61
|
+
const found = [];
|
|
62
|
+
let cursor = 0;
|
|
63
|
+
while (cursor < body.length) {
|
|
64
|
+
const start = body.indexOf("{{", cursor);
|
|
65
|
+
if (start < 0)
|
|
66
|
+
break;
|
|
67
|
+
const end = body.indexOf("}}", start + 2);
|
|
68
|
+
if (end < 0) {
|
|
69
|
+
return yield* new ConfigFileError({
|
|
70
|
+
file,
|
|
71
|
+
stage: "expression",
|
|
72
|
+
expression: Option.none(),
|
|
73
|
+
message: `Unclosed prompt interpolation at character ${start}`,
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
const expression = body.slice(start + 2, end).trim();
|
|
77
|
+
const parsed = yield* Schema.decodeUnknownEffect(Source)(expression).pipe(Effect.mapError((error) => schemaError(file, error)));
|
|
78
|
+
found.push({ source: parsed, start, end: end + 2 });
|
|
79
|
+
cursor = end + 2;
|
|
80
|
+
}
|
|
81
|
+
return found;
|
|
82
|
+
});
|
|
83
|
+
const render = (engine, loop, context) => {
|
|
84
|
+
const file = loopPath(loop.name);
|
|
85
|
+
const environment = environmentFor(loop.trigger.on);
|
|
86
|
+
return Effect.gen(function* () {
|
|
87
|
+
const expressions = yield* interpolations(file, loop.body);
|
|
88
|
+
const rendered = yield* Effect.forEach(expressions, (expression) => engine.evaluateScalar(expression.source, environment, context).pipe(Effect.mapError((error) => expressionError(file, error)), Effect.map((value) => ({ expression, value }))));
|
|
89
|
+
let output = "";
|
|
90
|
+
let cursor = 0;
|
|
91
|
+
for (const { expression, value } of rendered) {
|
|
92
|
+
output += loop.body.slice(cursor, expression.start);
|
|
93
|
+
output += String(value);
|
|
94
|
+
cursor = expression.end;
|
|
95
|
+
}
|
|
96
|
+
return output + loop.body.slice(cursor);
|
|
97
|
+
});
|
|
98
|
+
};
|
|
99
|
+
const parseUsineYaml = Effect.fn("ConfigParser.parseUsineYaml")((file, source) => Effect.gen(function* () {
|
|
100
|
+
const yaml = yield* parseYaml(file, source);
|
|
101
|
+
return yield* Schema.decodeUnknownEffect(UsineConfig)(yaml, {
|
|
102
|
+
onExcessProperty: "error",
|
|
103
|
+
}).pipe(Effect.mapError((error) => schemaError(file, error)));
|
|
104
|
+
}));
|
|
105
|
+
const parseAgentFile = Effect.fn("ConfigParser.parseAgentFile")((file, source) => Effect.gen(function* () {
|
|
106
|
+
const name = yield* agentName(file);
|
|
107
|
+
const markdown = yield* splitMarkdown(file, source);
|
|
108
|
+
const yaml = yield* parseYaml(file, markdown.yaml);
|
|
109
|
+
const frontmatter = yield* Schema.decodeUnknownEffect(AgentFrontmatter)(yaml, {
|
|
110
|
+
onExcessProperty: "error",
|
|
111
|
+
}).pipe(Effect.mapError((error) => schemaError(file, error)));
|
|
112
|
+
const persona = yield* Schema.decodeUnknownEffect(Persona)(markdown.body).pipe(Effect.mapError((error) => schemaError(file, error)));
|
|
113
|
+
return new AgentFile({
|
|
114
|
+
name,
|
|
115
|
+
harness: frontmatter.harness,
|
|
116
|
+
model: frontmatter.model,
|
|
117
|
+
effort: frontmatter.effort,
|
|
118
|
+
parentModel: frontmatter.parent_model,
|
|
119
|
+
persona,
|
|
120
|
+
});
|
|
121
|
+
}));
|
|
122
|
+
const makeParseLoopFile = (engine) => Effect.fn("ConfigParser.parseLoopFile")((file, source) => Effect.gen(function* () {
|
|
123
|
+
const name = yield* loopName(file);
|
|
124
|
+
const markdown = yield* splitMarkdown(file, source);
|
|
125
|
+
const yaml = yield* parseYaml(file, markdown.yaml);
|
|
126
|
+
const frontmatter = yield* Schema.decodeUnknownEffect(LoopFrontmatter)(yaml, {
|
|
127
|
+
onExcessProperty: "error",
|
|
128
|
+
}).pipe(Effect.mapError((error) => schemaError(file, error)));
|
|
129
|
+
const body = yield* Schema.decodeUnknownEffect(PromptTemplate)(markdown.body).pipe(Effect.mapError((error) => schemaError(file, error)));
|
|
130
|
+
const environment = environmentFor(frontmatter.trigger.on);
|
|
131
|
+
yield* engine
|
|
132
|
+
.checkBoolean(frontmatter.trigger.if, environment)
|
|
133
|
+
.pipe(Effect.mapError((error) => expressionError(file, error)));
|
|
134
|
+
const promptExpressions = yield* interpolations(file, body);
|
|
135
|
+
yield* Effect.forEach(promptExpressions, ({ source: expression }) => engine
|
|
136
|
+
.checkScalar(expression, environment)
|
|
137
|
+
.pipe(Effect.mapError((error) => expressionError(file, error))), { discard: true });
|
|
138
|
+
return new LoopFile({
|
|
139
|
+
name,
|
|
140
|
+
trigger: frontmatter.trigger,
|
|
141
|
+
selector: frontmatter.selector,
|
|
142
|
+
approval: frontmatter.approval,
|
|
143
|
+
step: frontmatter.step,
|
|
144
|
+
agent: frontmatter.agent,
|
|
145
|
+
body,
|
|
146
|
+
});
|
|
147
|
+
}));
|
|
148
|
+
/**
|
|
149
|
+
* Strict config parser and prompt renderer. All methods capture their CEL
|
|
150
|
+
* dependency. The interface below is the package's declared API — widen it
|
|
151
|
+
* deliberately, never by letting an implementation change leak through
|
|
152
|
+
* inference.
|
|
153
|
+
*/
|
|
154
|
+
export class ConfigParser extends Context.Service()("@usine/config/ConfigParser") {
|
|
155
|
+
static layer = Layer.effect(ConfigParser, Effect.gen(function* () {
|
|
156
|
+
const engine = yield* ExpressionEngine;
|
|
157
|
+
return {
|
|
158
|
+
parseUsineYaml,
|
|
159
|
+
parseAgentFile,
|
|
160
|
+
parseLoopFile: makeParseLoopFile(engine),
|
|
161
|
+
renderPrompt: Effect.fn("ConfigParser.renderPrompt")((loop, context) => render(engine, loop, context)),
|
|
162
|
+
};
|
|
163
|
+
}));
|
|
164
|
+
}
|
|
165
|
+
//# sourceMappingURL=parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Environment } from "@usine/expression";
|
|
2
|
+
import { Schema } from "effect";
|
|
3
|
+
import type { ManagedRepo, Stream } from "./model.ts";
|
|
4
|
+
/** Exact v1 issue payload slice descriptor recorded by issue #11. */
|
|
5
|
+
export declare const issueEnvironment: Environment;
|
|
6
|
+
/** Exact v1 pull-request payload slice descriptor recorded by issue #11. */
|
|
7
|
+
export declare const pullRequestEnvironment: Environment;
|
|
8
|
+
/** Schedule payload slice: item.tick = { scheduledAt, scheduledAtLocal, cron, tz }. */
|
|
9
|
+
export declare const scheduleEnvironment: Environment;
|
|
10
|
+
export declare const environmentFor: (stream: Stream) => Environment;
|
|
11
|
+
/**
|
|
12
|
+
* The CEL `repo` variable, built beside the `RepoContext` type it must match —
|
|
13
|
+
* a field added to one belongs in the other.
|
|
14
|
+
*/
|
|
15
|
+
export declare const repositoryContext: (repository: ManagedRepo) => Schema.JsonObject;
|
|
16
|
+
//# sourceMappingURL=payload-slices.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payload-slices.d.ts","sourceRoot":"","sources":["../src/payload-slices.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAoD,MAAM,mBAAmB,CAAC;AAClG,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAyKtD,qEAAqE;AACrE,eAAO,MAAM,gBAAgB,aAe5B,CAAC;AAEF,4EAA4E;AAC5E,eAAO,MAAM,sBAAsB,aAuBlC,CAAC;AAEF,uFAAuF;AACvF,eAAO,MAAM,mBAAmB,aAAmD,CAAC;AAEpF,eAAO,MAAM,cAAc,WAAY,MAAM,KAAG,WAS/C,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,eAAgB,WAAW,KAAG,MAAM,CAAC,UAOlE,CAAC"}
|