@usine/engine 0.1.0 → 0.3.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 +39 -12
- package/dist/cursor/{store.d.ts → cursor.d.ts} +9 -7
- package/dist/cursor/cursor.d.ts.map +1 -0
- package/dist/cursor/{store.js → cursor.js} +8 -7
- package/dist/cursor/cursor.js.map +1 -0
- package/dist/cycle-budget/cycle-budget.d.ts +25 -0
- package/dist/cycle-budget/cycle-budget.d.ts.map +1 -0
- package/dist/cycle-budget/cycle-budget.js +117 -0
- package/dist/cycle-budget/cycle-budget.js.map +1 -0
- package/dist/cycle-budget/model.d.ts +26 -0
- package/dist/cycle-budget/model.d.ts.map +1 -0
- package/dist/cycle-budget/model.js +20 -0
- package/dist/cycle-budget/model.js.map +1 -0
- package/dist/cycle-budget/queries.d.ts +27 -0
- package/dist/cycle-budget/queries.d.ts.map +1 -0
- package/dist/cycle-budget/queries.js +175 -0
- package/dist/cycle-budget/queries.js.map +1 -0
- package/dist/database/database.d.ts +1 -1
- package/dist/database/database.d.ts.map +1 -1
- package/dist/database/local-sqlite.d.ts +32 -12
- package/dist/database/local-sqlite.d.ts.map +1 -1
- package/dist/database/local-sqlite.js +121 -16
- package/dist/database/local-sqlite.js.map +1 -1
- package/dist/database/schema.d.ts +302 -9
- package/dist/database/schema.d.ts.map +1 -1
- package/dist/database/schema.js +69 -12
- package/dist/database/schema.js.map +1 -1
- package/dist/engine/engine.d.ts +59 -0
- package/dist/engine/engine.d.ts.map +1 -0
- package/dist/{engine.js → engine/engine.js} +80 -32
- package/dist/engine/engine.js.map +1 -0
- package/dist/engine/error.d.ts +45 -0
- package/dist/engine/error.d.ts.map +1 -0
- package/dist/engine/error.js +49 -0
- package/dist/engine/error.js.map +1 -0
- package/dist/engine/lifecycle.d.ts +112 -0
- package/dist/engine/lifecycle.d.ts.map +1 -0
- package/dist/engine/lifecycle.js +132 -0
- package/dist/engine/lifecycle.js.map +1 -0
- package/dist/engine/shutdown.d.ts +12 -0
- package/dist/engine/shutdown.d.ts.map +1 -0
- package/dist/engine/shutdown.js +10 -0
- package/dist/engine/shutdown.js.map +1 -0
- package/dist/engine/submission.d.ts +58 -0
- package/dist/engine/submission.d.ts.map +1 -0
- package/dist/engine/submission.js +54 -0
- package/dist/engine/submission.js.map +1 -0
- package/dist/item-projection/{service.d.ts → item-projection.d.ts} +6 -6
- package/dist/item-projection/item-projection.d.ts.map +1 -0
- package/dist/item-projection/{service.js → item-projection.js} +7 -5
- package/dist/item-projection/item-projection.js.map +1 -0
- package/dist/item-projection/model.d.ts +2 -5
- package/dist/item-projection/model.d.ts.map +1 -1
- package/dist/item-projection/model.js +5 -5
- package/dist/item-projection/model.js.map +1 -1
- package/dist/loop-control/loop-control.d.ts +21 -0
- package/dist/loop-control/loop-control.d.ts.map +1 -0
- package/dist/{loop-control.js → loop-control/loop-control.js} +7 -5
- package/dist/loop-control/loop-control.js.map +1 -0
- package/dist/loop-control/model.d.ts +10 -0
- package/dist/loop-control/model.d.ts.map +1 -0
- package/dist/loop-control/model.js +9 -0
- package/dist/loop-control/model.js.map +1 -0
- package/dist/repository-label-projection/model.d.ts +12 -3
- package/dist/repository-label-projection/model.d.ts.map +1 -1
- package/dist/repository-label-projection/model.js +14 -5
- package/dist/repository-label-projection/model.js.map +1 -1
- package/dist/repository-label-projection/{service.d.ts → repository-label-projection.d.ts} +5 -5
- package/dist/repository-label-projection/repository-label-projection.d.ts.map +1 -0
- package/dist/repository-label-projection/{service.js → repository-label-projection.js} +17 -7
- package/dist/repository-label-projection/repository-label-projection.js.map +1 -0
- package/dist/run-reader/model.d.ts +46 -0
- package/dist/run-reader/model.d.ts.map +1 -0
- package/dist/run-reader/model.js +44 -0
- package/dist/run-reader/model.js.map +1 -0
- package/dist/run-reader/run-reader.d.ts +29 -0
- package/dist/run-reader/run-reader.d.ts.map +1 -0
- package/dist/run-reader/run-reader.js +44 -0
- package/dist/run-reader/run-reader.js.map +1 -0
- package/dist/step-executor.d.ts +36 -12
- package/dist/step-executor.d.ts.map +1 -1
- package/dist/step-executor.js +22 -5
- package/dist/step-executor.js.map +1 -1
- package/dist/store/codec.d.ts +278 -40
- package/dist/store/codec.d.ts.map +1 -1
- package/dist/store/codec.js +72 -44
- package/dist/store/codec.js.map +1 -1
- package/dist/store/queries.d.ts +49 -16
- package/dist/store/queries.d.ts.map +1 -1
- package/dist/store/queries.js +104 -91
- package/dist/store/queries.js.map +1 -1
- package/dist/store/store.d.ts +44 -26
- package/dist/store/store.d.ts.map +1 -1
- package/dist/store/store.js +199 -128
- package/dist/store/store.js.map +1 -1
- package/dist/store/transcript.d.ts +9 -0
- package/dist/store/transcript.d.ts.map +1 -0
- package/dist/store/transcript.js +71 -0
- package/dist/store/transcript.js.map +1 -0
- package/dist/transcript.d.ts +86 -0
- package/dist/transcript.d.ts.map +1 -0
- package/dist/transcript.js +77 -0
- package/dist/transcript.js.map +1 -0
- package/dist/workflow/admission.d.ts +13 -0
- package/dist/workflow/admission.d.ts.map +1 -0
- package/dist/workflow/admission.js +55 -0
- package/dist/workflow/admission.js.map +1 -0
- package/dist/workflow/command.d.ts +13 -0
- package/dist/workflow/command.d.ts.map +1 -0
- package/dist/workflow/command.js +17 -0
- package/dist/workflow/command.js.map +1 -0
- package/dist/workflow/workflow.d.ts +18 -0
- package/dist/workflow/workflow.d.ts.map +1 -0
- package/dist/workflow/workflow.js +108 -0
- package/dist/workflow/workflow.js.map +1 -0
- package/drizzle/20260903091940_queued_approved_runs/migration.sql +3 -0
- package/drizzle/20260903091940_queued_approved_runs/snapshot.json +1147 -0
- package/drizzle/20260905150403_item_cycle_budgets/migration.sql +58 -0
- package/drizzle/20260905150403_item_cycle_budgets/snapshot.json +1417 -0
- package/drizzle/20260905174009_item_run_history/migration.sql +1 -0
- package/drizzle/20260905174009_item_run_history/snapshot.json +1431 -0
- package/drizzle/20260912111855_operator_intervention/migration.sql +42 -0
- package/drizzle/20260912111855_operator_intervention/snapshot.json +1461 -0
- package/package.json +41 -5
- package/dist/cursor/model.d.ts +0 -5
- package/dist/cursor/model.d.ts.map +0 -1
- package/dist/cursor/model.js +0 -4
- package/dist/cursor/model.js.map +0 -1
- package/dist/cursor/store.d.ts.map +0 -1
- package/dist/cursor/store.js.map +0 -1
- package/dist/engine.d.ts +0 -39
- package/dist/engine.d.ts.map +0 -1
- package/dist/engine.js.map +0 -1
- package/dist/index.d.ts +0 -20
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -20
- package/dist/index.js.map +0 -1
- package/dist/item-projection/service.d.ts.map +0 -1
- package/dist/item-projection/service.js.map +0 -1
- package/dist/loop-control.d.ts +0 -16
- package/dist/loop-control.d.ts.map +0 -1
- package/dist/loop-control.js.map +0 -1
- package/dist/model.d.ts +0 -185
- package/dist/model.d.ts.map +0 -1
- package/dist/model.js +0 -174
- package/dist/model.js.map +0 -1
- package/dist/repository-label-projection/service.d.ts.map +0 -1
- package/dist/repository-label-projection/service.js.map +0 -1
- package/dist/run-reader.d.ts +0 -20
- package/dist/run-reader.d.ts.map +0 -1
- package/dist/run-reader.js +0 -19
- package/dist/run-reader.js.map +0 -1
- package/dist/workflow.d.ts +0 -14
- package/dist/workflow.d.ts.map +0 -1
- package/dist/workflow.js +0 -105
- package/dist/workflow.js.map +0 -1
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { Agent } from "@usine/core/agent";
|
|
2
|
+
import { CycleBudgetAsk } from "@usine/core/cycle-budget";
|
|
3
|
+
import { Event } from "@usine/core/event";
|
|
4
|
+
import { Schema } from "effect";
|
|
5
|
+
declare const Submission_base: Schema.Class<Submission, Schema.Struct<{
|
|
6
|
+
readonly event: typeof Event;
|
|
7
|
+
readonly itemKey: Schema.brand<Schema.NonEmptyString, "ItemKey">;
|
|
8
|
+
readonly loop: Schema.brand<Schema.NonEmptyString, "LoopName">;
|
|
9
|
+
readonly step: Schema.brand<Schema.NonEmptyString, "StepName">;
|
|
10
|
+
readonly approval: Schema.Literals<readonly ["none", "required"]>;
|
|
11
|
+
/** Item Runs default to three rounds; schedule adapters explicitly supply None. */
|
|
12
|
+
readonly cycleLimit: Schema.withConstructorDefault<Schema.withDecodingDefaultTypeKey<Schema.Option<Schema.brand<Schema.Int, "CycleLimit">>, never>>;
|
|
13
|
+
/** Capture before fetching trigger input. A reset supersedes older observations. */
|
|
14
|
+
readonly cycleGeneration: Schema.withConstructorDefault<Schema.withDecodingDefaultKey<Schema.brand<Schema.Int, "CycleGeneration">, never>>;
|
|
15
|
+
readonly repository: Schema.brand<Schema.String, "RepositoryName">;
|
|
16
|
+
readonly revision: Schema.brand<Schema.String, "RepositoryRevision">;
|
|
17
|
+
readonly task: Schema.brand<Schema.String, "AttemptTask">;
|
|
18
|
+
readonly agent: typeof Agent;
|
|
19
|
+
readonly parentModel: Schema.Option<Schema.brand<Schema.String, "ModelId">>;
|
|
20
|
+
}>, {}>;
|
|
21
|
+
/** A matched Event with the Loop, Item, and execution choices that determine the work owed. */
|
|
22
|
+
export declare class Submission extends Submission_base {
|
|
23
|
+
}
|
|
24
|
+
declare const Claimed_base: Schema.Class<Claimed, Schema.TaggedStruct<"Claimed", {
|
|
25
|
+
readonly eventId: Schema.brand<Schema.NonEmptyString, "EventId">;
|
|
26
|
+
readonly runId: Schema.brand<Schema.NonEmptyString, "RunId">;
|
|
27
|
+
}>, {}>;
|
|
28
|
+
/** The Event now owns a Run; submitting it again returns the same run id. */
|
|
29
|
+
export declare class Claimed extends Claimed_base {
|
|
30
|
+
}
|
|
31
|
+
declare const Queued_base: Schema.Class<Queued, Schema.TaggedStruct<"Queued", {
|
|
32
|
+
readonly eventId: Schema.brand<Schema.NonEmptyString, "EventId">;
|
|
33
|
+
}>, {}>;
|
|
34
|
+
/** A running Attempt on the same Item must finish before this Event is reconsidered. */
|
|
35
|
+
export declare class Queued extends Queued_base {
|
|
36
|
+
}
|
|
37
|
+
export declare const IGNORED_REASONS: readonly ["superseded", "revoked"];
|
|
38
|
+
export declare const IgnoreReason: Schema.Literals<readonly ["superseded", "revoked"]>;
|
|
39
|
+
export type IgnoreReason = typeof IgnoreReason.Type;
|
|
40
|
+
declare const Ignored_base: Schema.Class<Ignored, Schema.TaggedStruct<"Ignored", {
|
|
41
|
+
readonly eventId: Schema.brand<Schema.NonEmptyString, "EventId">;
|
|
42
|
+
readonly reason: Schema.Literals<readonly ["superseded", "revoked"]>;
|
|
43
|
+
}>, {}>;
|
|
44
|
+
/** The Event stays in the ledger but can no longer open a Run. */
|
|
45
|
+
export declare class Ignored extends Ignored_base {
|
|
46
|
+
}
|
|
47
|
+
declare const CycleBlocked_base: Schema.Class<CycleBlocked, Schema.TaggedStruct<"CycleBlocked", {
|
|
48
|
+
readonly eventId: Schema.brand<Schema.NonEmptyString, "EventId">;
|
|
49
|
+
readonly ask: typeof CycleBudgetAsk;
|
|
50
|
+
}>, {}>;
|
|
51
|
+
/** No Run opened because this Item requires an explicit cycle-budget reset. */
|
|
52
|
+
export declare class CycleBlocked extends CycleBlocked_base {
|
|
53
|
+
}
|
|
54
|
+
/** Whether a recorded Event owns a Run, waits behind running work, or can no longer open a Run. */
|
|
55
|
+
export declare const SubmissionResult: Schema.Union<readonly [typeof Claimed, typeof Queued, typeof Ignored, typeof CycleBlocked]>;
|
|
56
|
+
export type SubmissionResult = typeof SubmissionResult.Type;
|
|
57
|
+
export {};
|
|
58
|
+
//# sourceMappingURL=submission.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"submission.d.ts","sourceRoot":"","sources":["../../src/engine/submission.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EACL,cAAc,EAIf,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EAAE,KAAK,EAAW,MAAM,mBAAmB,CAAC;AAMnD,OAAO,EAAkB,MAAM,EAAE,MAAM,QAAQ,CAAC;;;;;;;IAS9C,mFAAmF;;IAKnF,oFAAoF;;;;;;;;AAZtF,+FAA+F;AAC/F,qBAAa,UAAW,SAAQ,eAqB9B;CAAG;;;;;AAEL,6EAA6E;AAC7E,qBAAa,OAAQ,SAAQ,YAG3B;CAAG;;;;AAEL,wFAAwF;AACxF,qBAAa,MAAO,SAAQ,WAE1B;CAAG;AAEL,eAAO,MAAM,eAAe,YAAI,YAAY,EAAE,SAAS,CAAU,CAAC;AAElE,eAAO,MAAM,YAAY,qDAAmC,CAAC;AAE7D,MAAM,MAAM,YAAY,GAAG,OAAO,YAAY,CAAC,IAAI,CAAC;;;;;AAEpD,kEAAkE;AAClE,qBAAa,OAAQ,SAAQ,YAG3B;CAAG;;;;;AAEL,+EAA+E;AAC/E,qBAAa,YAAa,SAAQ,iBAGjC;CAAG;AAEJ,mGAAmG;AACnG,eAAO,MAAM,gBAAgB,6FAAyD,CAAC;AAEvF,MAAM,MAAM,gBAAgB,GAAG,OAAO,gBAAgB,CAAC,IAAI,CAAC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { Agent } from "@usine/core/agent";
|
|
2
|
+
import { CycleBudgetAsk, CycleGeneration, CycleLimit, DEFAULT_CYCLE_LIMIT, } from "@usine/core/cycle-budget";
|
|
3
|
+
import { ModelId } from "@usine/core/agent/brain";
|
|
4
|
+
import { AttemptTask } from "@usine/core/attempt";
|
|
5
|
+
import { Event, EventId } from "@usine/core/event";
|
|
6
|
+
import { ItemKey } from "@usine/core/item";
|
|
7
|
+
import { LoopName, ApprovalRequirement } from "@usine/core/loop";
|
|
8
|
+
import { RepositoryName, RepositoryRevision } from "@usine/core/repository";
|
|
9
|
+
import { RunId } from "@usine/core/run";
|
|
10
|
+
import { StepName } from "@usine/core/step";
|
|
11
|
+
import { Effect, Option, Schema } from "effect";
|
|
12
|
+
/** A matched Event with the Loop, Item, and execution choices that determine the work owed. */
|
|
13
|
+
export class Submission extends Schema.Class("@usine/engine/Submission")({
|
|
14
|
+
event: Event,
|
|
15
|
+
itemKey: ItemKey,
|
|
16
|
+
loop: LoopName,
|
|
17
|
+
step: StepName,
|
|
18
|
+
approval: ApprovalRequirement,
|
|
19
|
+
/** Item Runs default to three rounds; schedule adapters explicitly supply None. */
|
|
20
|
+
cycleLimit: Schema.Option(CycleLimit).pipe(Schema.withDecodingDefaultTypeKey(Effect.succeed(Option.some(DEFAULT_CYCLE_LIMIT))), Schema.withConstructorDefault(Effect.succeed(Option.some(DEFAULT_CYCLE_LIMIT)))),
|
|
21
|
+
/** Capture before fetching trigger input. A reset supersedes older observations. */
|
|
22
|
+
cycleGeneration: CycleGeneration.pipe(Schema.withDecodingDefaultKey(Effect.succeed(CycleGeneration.make(0))), Schema.withConstructorDefault(Effect.succeed(CycleGeneration.make(0)))),
|
|
23
|
+
repository: RepositoryName,
|
|
24
|
+
revision: RepositoryRevision,
|
|
25
|
+
task: AttemptTask,
|
|
26
|
+
agent: Agent,
|
|
27
|
+
parentModel: Schema.Option(ModelId),
|
|
28
|
+
}) {
|
|
29
|
+
}
|
|
30
|
+
/** The Event now owns a Run; submitting it again returns the same run id. */
|
|
31
|
+
export class Claimed extends Schema.TaggedClass("@usine/engine/Claimed")("Claimed", {
|
|
32
|
+
eventId: EventId,
|
|
33
|
+
runId: RunId,
|
|
34
|
+
}) {
|
|
35
|
+
}
|
|
36
|
+
/** A running Attempt on the same Item must finish before this Event is reconsidered. */
|
|
37
|
+
export class Queued extends Schema.TaggedClass("@usine/engine/Queued")("Queued", {
|
|
38
|
+
eventId: EventId,
|
|
39
|
+
}) {
|
|
40
|
+
}
|
|
41
|
+
export const IGNORED_REASONS = ["superseded", "revoked"];
|
|
42
|
+
export const IgnoreReason = Schema.Literals(IGNORED_REASONS);
|
|
43
|
+
/** The Event stays in the ledger but can no longer open a Run. */
|
|
44
|
+
export class Ignored extends Schema.TaggedClass("@usine/engine/Ignored")("Ignored", {
|
|
45
|
+
eventId: EventId,
|
|
46
|
+
reason: IgnoreReason,
|
|
47
|
+
}) {
|
|
48
|
+
}
|
|
49
|
+
/** No Run opened because this Item requires an explicit cycle-budget reset. */
|
|
50
|
+
export class CycleBlocked extends Schema.TaggedClass("@usine/engine/CycleBlocked")("CycleBlocked", { eventId: EventId, ask: CycleBudgetAsk }) {
|
|
51
|
+
}
|
|
52
|
+
/** Whether a recorded Event owns a Run, waits behind running work, or can no longer open a Run. */
|
|
53
|
+
export const SubmissionResult = Schema.Union([Claimed, Queued, Ignored, CycleBlocked]);
|
|
54
|
+
//# sourceMappingURL=submission.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"submission.js","sourceRoot":"","sources":["../../src/engine/submission.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { RepositoryName } from "@usine/core/repository";
|
|
2
2
|
import { Context, Effect, Layer } from "effect";
|
|
3
3
|
import { RunDatabase } from "../database/database.ts";
|
|
4
|
-
import { EnginePersistenceError } from "../
|
|
4
|
+
import { EnginePersistenceError } from "../engine/error.ts";
|
|
5
5
|
import { ItemProjection } from "./model.ts";
|
|
6
|
-
/** Newest Items first
|
|
6
|
+
/** Newest Items first. The bound keeps a long-lived repository's Board response finite. */
|
|
7
7
|
export interface ItemProjectionListOptions {
|
|
8
8
|
readonly limit: number;
|
|
9
9
|
}
|
|
10
10
|
declare const ItemProjectionReader_base: Context.ServiceClass<ItemProjectionReader, "@usine/engine/ItemProjectionReader", {
|
|
11
11
|
/** The newest `limit` Item projections of one repository, highest number first. */
|
|
12
|
-
readonly list: (repository:
|
|
12
|
+
readonly list: (repository: RepositoryName, options: ItemProjectionListOptions) => Effect.Effect<ReadonlyArray<ItemProjection>, EnginePersistenceError>;
|
|
13
13
|
}>;
|
|
14
14
|
export declare class ItemProjectionReader extends ItemProjectionReader_base {
|
|
15
15
|
static readonly layer: Layer.Layer<ItemProjectionReader, never, RunDatabase>;
|
|
@@ -21,5 +21,5 @@ declare const ItemProjectionWriter_base: Context.ServiceClass<ItemProjectionWrit
|
|
|
21
21
|
export declare class ItemProjectionWriter extends ItemProjectionWriter_base {
|
|
22
22
|
static readonly layer: Layer.Layer<ItemProjectionWriter, never, RunDatabase>;
|
|
23
23
|
}
|
|
24
|
-
export {};
|
|
25
|
-
//# sourceMappingURL=
|
|
24
|
+
export { ItemContentHash, ItemProjection, ItemProjectionSource } from "./model.ts";
|
|
25
|
+
//# sourceMappingURL=item-projection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"item-projection.d.ts","sourceRoot":"","sources":["../../src/item-projection/item-projection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAU,MAAM,QAAQ,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAE5D,OAAO,EAAmB,cAAc,EAAwB,MAAM,YAAY,CAAC;AAmBnF,2FAA2F;AAC3F,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;;IAqFG,mFAAmF;mBACpE,CACb,UAAU,EAAE,cAAc,EAC1B,OAAO,EAAE,yBAAyB,KAC/B,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,cAAc,CAAC,EAAE,sBAAsB,CAAC;;AAP7E,qBAAa,oBAAqB,SAAQ,yBASD;IACvC,MAAM,CAAC,QAAQ,CAAC,KAAK,wDAAkD;CACxE;;IAKG,mDAAmD;qBAClC,CAAC,IAAI,EAAE,cAAc,KAAK,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,sBAAsB,CAAC;;AAJ7F,qBAAa,oBAAqB,SAAQ,yBAMD;IACvC,MAAM,CAAC,QAAQ,CAAC,KAAK,wDAAkD;CACxE;AAED,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -1,13 +1,14 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { RepositoryName } from "@usine/core/repository";
|
|
2
2
|
import { desc, eq, ne } from "drizzle-orm";
|
|
3
3
|
import { Context, Effect, Layer, Schema } from "effect";
|
|
4
4
|
import { RunDatabase } from "../database/database.js";
|
|
5
5
|
import { itemProjections } from "../database/schema.js";
|
|
6
|
-
import { EnginePersistenceError } from "../
|
|
7
|
-
import {
|
|
6
|
+
import { EnginePersistenceError } from "../engine/error.js";
|
|
7
|
+
import { ItemNumber } from "@usine/core/item";
|
|
8
|
+
import { ItemContentHash, ItemProjection, ItemProjectionSource } from "./model.js";
|
|
8
9
|
const ItemProjectionRow = Schema.Struct({
|
|
9
10
|
itemKey: ItemProjection.fields.itemKey,
|
|
10
|
-
repository:
|
|
11
|
+
repository: RepositoryName,
|
|
11
12
|
source: ItemProjectionSource,
|
|
12
13
|
number: ItemNumber,
|
|
13
14
|
contentHash: ItemContentHash,
|
|
@@ -95,4 +96,5 @@ export class ItemProjectionReader extends Context.Service()("@usine/engine/ItemP
|
|
|
95
96
|
export class ItemProjectionWriter extends Context.Service()("@usine/engine/ItemProjectionWriter") {
|
|
96
97
|
static layer = Layer.effect(ItemProjectionWriter, makeWriter);
|
|
97
98
|
}
|
|
98
|
-
|
|
99
|
+
export { ItemContentHash, ItemProjection, ItemProjectionSource } from "./model.js";
|
|
100
|
+
//# sourceMappingURL=item-projection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"item-projection.js","sourceRoot":"","sources":["../../src/item-projection/item-projection.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,20 +1,17 @@
|
|
|
1
|
-
import { Item } from "@usine/core";
|
|
2
1
|
import { Schema } from "effect";
|
|
3
2
|
export declare const ItemProjectionSource: Schema.brand<Schema.NonEmptyString, "ItemProjectionSource">;
|
|
4
3
|
export type ItemProjectionSource = typeof ItemProjectionSource.Type;
|
|
5
|
-
export declare const ItemNumber: Schema.brand<Schema.Int, "ItemNumber">;
|
|
6
|
-
export type ItemNumber = Item.Number;
|
|
7
4
|
export declare const ItemContentHash: Schema.brand<Schema.NonEmptyString, "ItemContentHash">;
|
|
8
5
|
export type ItemContentHash = typeof ItemContentHash.Type;
|
|
9
6
|
declare const ItemProjection_base: Schema.Class<ItemProjection, Schema.Struct<{
|
|
10
7
|
readonly itemKey: Schema.brand<Schema.NonEmptyString, "ItemKey">;
|
|
11
|
-
readonly repository: Schema.brand<Schema.String, "
|
|
8
|
+
readonly repository: Schema.brand<Schema.String, "RepositoryName">;
|
|
12
9
|
readonly source: Schema.brand<Schema.NonEmptyString, "ItemProjectionSource">;
|
|
13
10
|
readonly number: Schema.brand<Schema.Int, "ItemNumber">;
|
|
14
11
|
readonly contentHash: Schema.brand<Schema.NonEmptyString, "ItemContentHash">;
|
|
15
12
|
readonly payload: Schema.$Record<Schema.String, Schema.Codec<Schema.Json, Schema.Json, never, never>>;
|
|
16
13
|
}>, {}>;
|
|
17
|
-
/**
|
|
14
|
+
/** The latest payload a trigger observed for one Item, whatever the source adapter. */
|
|
18
15
|
export declare class ItemProjection extends ItemProjection_base {
|
|
19
16
|
}
|
|
20
17
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/item-projection/model.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/item-projection/model.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,eAAO,MAAM,oBAAoB,6DAEhC,CAAC;AACF,MAAM,MAAM,oBAAoB,GAAG,OAAO,oBAAoB,CAAC,IAAI,CAAC;AAEpE,eAAO,MAAM,eAAe,wDAA8D,CAAC;AAC3F,MAAM,MAAM,eAAe,GAAG,OAAO,eAAe,CAAC,IAAI,CAAC;;;;;;;;;AAE1D,uFAAuF;AACvF,qBAAa,cAAe,SAAQ,mBAOlC;CAAG"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ItemKey, ItemNumber } from "@usine/core/item";
|
|
2
|
+
import { RepositoryName } from "@usine/core/repository";
|
|
2
3
|
import { Schema } from "effect";
|
|
3
4
|
export const ItemProjectionSource = Schema.NonEmptyString.pipe(Schema.brand("ItemProjectionSource"));
|
|
4
|
-
export const ItemNumber = Item.Number;
|
|
5
5
|
export const ItemContentHash = Schema.NonEmptyString.pipe(Schema.brand("ItemContentHash"));
|
|
6
|
-
/**
|
|
6
|
+
/** The latest payload a trigger observed for one Item, whatever the source adapter. */
|
|
7
7
|
export class ItemProjection extends Schema.Class("@usine/engine/ItemProjection")({
|
|
8
|
-
itemKey:
|
|
9
|
-
repository:
|
|
8
|
+
itemKey: ItemKey,
|
|
9
|
+
repository: RepositoryName,
|
|
10
10
|
source: ItemProjectionSource,
|
|
11
11
|
number: ItemNumber,
|
|
12
12
|
contentHash: ItemContentHash,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/item-projection/model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/item-projection/model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAM,CAAC,cAAc,CAAC,IAAI,CAC5D,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,CACrC,CAAC;AAGF,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC;AAG3F,uFAAuF;AACvF,MAAM,OAAO,cAAe,SAAQ,MAAM,CAAC,KAAK,CAAiB,8BAA8B,CAAC,CAAC;IAC/F,OAAO,EAAE,OAAO;IAChB,UAAU,EAAE,cAAc;IAC1B,MAAM,EAAE,oBAAoB;IAC5B,MAAM,EAAE,UAAU;IAClB,WAAW,EAAE,eAAe;IAC5B,OAAO,EAAE,MAAM,CAAC,UAAU;CAC3B,CAAC;CAAG"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { LoopName } from "@usine/core/loop";
|
|
2
|
+
import { Context, Effect, Layer } from "effect";
|
|
3
|
+
import { RunDatabase } from "../database/database.ts";
|
|
4
|
+
import { EnginePersistenceError } from "../engine/error.ts";
|
|
5
|
+
import { LoopRuntimeState } from "./model.ts";
|
|
6
|
+
declare const LoopControl_base: Context.ServiceClass<LoopControl, "@usine/engine/LoopControl", {
|
|
7
|
+
/** Whether new Runs are paused; a Loop with no recorded runtime state is unpaused. */
|
|
8
|
+
readonly isPaused: (loop: LoopName) => Effect.Effect<boolean, EnginePersistenceError>;
|
|
9
|
+
/** Pauses new trigger work for this Loop without stopping its existing Runs. */
|
|
10
|
+
readonly pause: (loop: LoopName) => Effect.Effect<LoopRuntimeState, EnginePersistenceError>;
|
|
11
|
+
/** Recorded runtime states ordered by Loop name; Loops without stored state are omitted. */
|
|
12
|
+
readonly states: Effect.Effect<ReadonlyArray<LoopRuntimeState>, EnginePersistenceError>;
|
|
13
|
+
/** Allows triggers to open new Runs for this Loop again. */
|
|
14
|
+
readonly unpause: (loop: LoopName) => Effect.Effect<LoopRuntimeState, EnginePersistenceError>;
|
|
15
|
+
}>;
|
|
16
|
+
/** Records whether triggers may open new Runs for each Loop; existing Runs and authored files stay unchanged. */
|
|
17
|
+
export declare class LoopControl extends LoopControl_base {
|
|
18
|
+
static readonly layer: Layer.Layer<LoopControl, never, RunDatabase>;
|
|
19
|
+
}
|
|
20
|
+
export { LoopRuntimeState } from "./model.ts";
|
|
21
|
+
//# sourceMappingURL=loop-control.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loop-control.d.ts","sourceRoot":"","sources":["../../src/loop-control/loop-control.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;;IA6E1C,sFAAsF;uBACnE,CAAC,IAAI,EAAE,QAAQ,KAAK,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,sBAAsB,CAAC;IACrF,gFAAgF;oBAChE,CAAC,IAAI,EAAE,QAAQ,KAAK,MAAM,CAAC,MAAM,CAAC,gBAAgB,EAAE,sBAAsB,CAAC;IAC3F,4FAA4F;qBAC3E,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,gBAAgB,CAAC,EAAE,sBAAsB,CAAC;IACvF,4DAA4D;sBAC1C,CAAC,IAAI,EAAE,QAAQ,KAAK,MAAM,CAAC,MAAM,CAAC,gBAAgB,EAAE,sBAAsB,CAAC;;AAXjG,iHAAiH;AACjH,qBAAa,WAAY,SAAQ,gBAYD;IAC9B,MAAM,CAAC,QAAQ,CAAC,KAAK,+CAA8C;CACpE;AAED,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { LoopName } from "@usine/core/loop";
|
|
2
2
|
import { asc, eq } from "drizzle-orm";
|
|
3
3
|
import { Context, Effect, Layer } from "effect";
|
|
4
|
-
import { RunDatabase } from "
|
|
5
|
-
import { loopRuntime } from "
|
|
6
|
-
import { EnginePersistenceError
|
|
4
|
+
import { RunDatabase } from "../database/database.js";
|
|
5
|
+
import { loopRuntime } from "../database/schema.js";
|
|
6
|
+
import { EnginePersistenceError } from "../engine/error.js";
|
|
7
|
+
import { LoopRuntimeState } from "./model.js";
|
|
7
8
|
const persistence = (operation) => (effect) => effect.pipe(Effect.mapError((cause) => new EnginePersistenceError({ operation, cause })));
|
|
8
9
|
const makeLoopControl = Effect.gen(function* () {
|
|
9
10
|
const database = yield* RunDatabase;
|
|
@@ -62,8 +63,9 @@ const makeLoopControl = Effect.gen(function* () {
|
|
|
62
63
|
unpause: Effect.fn("LoopControl.unpause")((loop) => write(new LoopRuntimeState({ loop, paused: false }))),
|
|
63
64
|
};
|
|
64
65
|
});
|
|
65
|
-
/**
|
|
66
|
+
/** Records whether triggers may open new Runs for each Loop; existing Runs and authored files stay unchanged. */
|
|
66
67
|
export class LoopControl extends Context.Service()("@usine/engine/LoopControl") {
|
|
67
68
|
static layer = Layer.effect(LoopControl, makeLoopControl);
|
|
68
69
|
}
|
|
70
|
+
export { LoopRuntimeState } from "./model.js";
|
|
69
71
|
//# sourceMappingURL=loop-control.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loop-control.js","sourceRoot":"","sources":["../../src/loop-control/loop-control.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9C,MAAM,WAAW,GACf,CAAC,SAAiB,EAAE,EAAE,CACtB,CAAU,MAA8B,EAA+C,EAAE,CACvF,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,sBAAsB,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;AAE9F,MAAM,eAAe,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAC1C,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,WAAW,CAAC;IAEpC,MAAM,QAAQ,GAAG,MAAM,CAAC,EAAE,CAAC,sBAAsB,CAAC,CAAC,QAAQ,CAAC,EAAE,IAAc;QAC1E,KAAK,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5C,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,QAAQ;aACzB,MAAM,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC;aAClE,IAAI,CAAC,WAAW,CAAC;aACjB,KAAK,CAAC,EAAE,CAAC,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;aACrC,KAAK,CAAC,CAAC,CAAC;aACR,OAAO,EAAE,CAAC;QACb,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACvB,OAAO,MAAM,KAAK,SAAS;YACzB,CAAC,CAAC,IAAI,gBAAgB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;YAC/C,CAAC,CAAC,IAAI,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC,EAAE,WAAW,CAAC,yBAAyB,CAAC,CAAC,CAAC;IAE3C,MAAM,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC,oBAAoB,CAAC,CAAC,QAAQ,CAAC;QACtD,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,QAAQ;aACzB,MAAM,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC;aAClE,IAAI,CAAC,WAAW,CAAC;aACjB,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;aAClC,OAAO,EAAE,CAAC;QACb,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC;IACtD,CAAC,EAAE,WAAW,CAAC,0BAA0B,CAAC,CAAC,CAAC;IAE5C,MAAM,KAAK,GAAG,MAAM,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC,QAAQ,CAAC,EAAE,IAAsB;QAC5E,KAAK,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACvD,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3C,IAAI,OAAO,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;YACnC,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,oCAAoC,EAAE;gBAC3D,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,MAAM,EAAE,IAAI,CAAC,MAAM;aACpB,CAAC,CAAC;YACH,OAAO,OAAO,CAAC;QACjB,CAAC;QACD,KAAK,CAAC,CAAC,QAAQ;aACZ,MAAM,CAAC,WAAW,CAAC;aACnB,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;aACpD,kBAAkB,CAAC;YAClB,MAAM,EAAE,WAAW,CAAC,QAAQ;YAC5B,GAAG,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;SAC7B,CAAC;aACD,OAAO,EAAE;aACT,IAAI,CAAC,WAAW,CAAC,0BAA0B,CAAC,CAAC,CAAC;QACjD,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,eAAe,EAAE;YACnE,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC,sBAAsB,CAAC,CAAC,QAAQ,CAAC,EAAE,IAAc;YACnE,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;QACxC,CAAC,CAAC;QACF,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAc,EAAE,EAAE,CACvD,KAAK,CAAC,IAAI,gBAAgB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CACpD;QACD,MAAM,EAAE,MAAM,EAAE;QAChB,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC,qBAAqB,CAAC,CAAC,CAAC,IAAc,EAAE,EAAE,CAC3D,KAAK,CAAC,IAAI,gBAAgB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CACrD;KACO,CAAC;AACb,CAAC,CAAC,CAAC;AAEH,iHAAiH;AACjH,MAAM,OAAO,WAAY,SAAQ,OAAO,CAAC,OAAO,EAY7C,CAAC,2BAA2B,CAAC;IAC9B,MAAM,CAAU,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;CACpE;AAED,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Schema } from "effect";
|
|
2
|
+
declare const LoopRuntimeState_base: Schema.Class<LoopRuntimeState, Schema.Struct<{
|
|
3
|
+
readonly loop: Schema.brand<Schema.NonEmptyString, "LoopName">;
|
|
4
|
+
readonly paused: Schema.Boolean;
|
|
5
|
+
}>, {}>;
|
|
6
|
+
/** Runtime state for one Loop. Authored loop files never carry this toggle. */
|
|
7
|
+
export declare class LoopRuntimeState extends LoopRuntimeState_base {
|
|
8
|
+
}
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/loop-control/model.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;;;;;AAEhC,+EAA+E;AAC/E,qBAAa,gBAAiB,SAAQ,qBAKpC;CAAG"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { LoopName } from "@usine/core/loop";
|
|
2
|
+
import { Schema } from "effect";
|
|
3
|
+
/** Runtime state for one Loop. Authored loop files never carry this toggle. */
|
|
4
|
+
export class LoopRuntimeState extends Schema.Class("@usine/engine/LoopRuntimeState")({
|
|
5
|
+
loop: LoopName,
|
|
6
|
+
paused: Schema.Boolean,
|
|
7
|
+
}) {
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/loop-control/model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,+EAA+E;AAC/E,MAAM,OAAO,gBAAiB,SAAQ,MAAM,CAAC,KAAK,CAChD,gCAAgC,CACjC,CAAC;IACA,IAAI,EAAE,QAAQ;IACd,MAAM,EAAE,MAAM,CAAC,OAAO;CACvB,CAAC;CAAG"}
|
|
@@ -1,9 +1,18 @@
|
|
|
1
1
|
import { Schema } from "effect";
|
|
2
|
+
/** Six hex digits, as GitHub stores label colors. Absent for catalogs stored before colors were kept. */
|
|
3
|
+
export declare const RepositoryLabelColor: Schema.String;
|
|
4
|
+
declare const RepositoryLabel_base: Schema.Class<RepositoryLabel, Schema.Struct<{
|
|
5
|
+
readonly name: Schema.String;
|
|
6
|
+
readonly color: Schema.OptionFromNullOr<Schema.String>;
|
|
7
|
+
readonly description: Schema.OptionFromNullOr<Schema.String>;
|
|
8
|
+
}>, {}>;
|
|
9
|
+
export declare class RepositoryLabel extends RepositoryLabel_base {
|
|
10
|
+
}
|
|
2
11
|
declare const RepositoryLabelProjection_base: Schema.Class<RepositoryLabelProjection, Schema.Struct<{
|
|
3
|
-
readonly repository: Schema.brand<Schema.String, "
|
|
4
|
-
readonly labels: Schema.$Array<
|
|
12
|
+
readonly repository: Schema.brand<Schema.String, "RepositoryName">;
|
|
13
|
+
readonly labels: Schema.$Array<typeof RepositoryLabel>;
|
|
5
14
|
}>, {}>;
|
|
6
|
-
/**
|
|
15
|
+
/** The latest complete label catalog polling observed for one repository. */
|
|
7
16
|
export declare class RepositoryLabelProjection extends RepositoryLabelProjection_base {
|
|
8
17
|
}
|
|
9
18
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/repository-label-projection/model.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;;;;;
|
|
1
|
+
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/repository-label-projection/model.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAMhC,yGAAyG;AACzG,eAAO,MAAM,oBAAoB,eAEhC,CAAC;;;;;;AAEF,qBAAa,eAAgB,SAAQ,oBAMpC;CAAG;;;;;AAQJ,6EAA6E;AAC7E,qBAAa,yBAA0B,SAAQ,8BAK7C;CAAG"}
|
|
@@ -1,10 +1,19 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { RepositoryName } from "@usine/core/repository";
|
|
2
2
|
import { Schema } from "effect";
|
|
3
|
-
const
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
const RepositoryLabelName = Schema.String.check(Schema.isPattern(/\S/u, { message: "Expected a non-blank repository label" }));
|
|
4
|
+
/** Six hex digits, as GitHub stores label colors. Absent for catalogs stored before colors were kept. */
|
|
5
|
+
export const RepositoryLabelColor = Schema.String.check(Schema.isPattern(/^[0-9a-fA-F]{6}$/u, { message: "Expected a six-digit hex label color" }));
|
|
6
|
+
export class RepositoryLabel extends Schema.Class("@usine/engine/RepositoryLabel")({
|
|
7
|
+
name: RepositoryLabelName,
|
|
8
|
+
color: Schema.OptionFromNullOr(RepositoryLabelColor),
|
|
9
|
+
description: Schema.OptionFromNullOr(Schema.String),
|
|
10
|
+
}) {
|
|
11
|
+
}
|
|
12
|
+
const uniqueLabelNames = Schema.makeFilter((labels) => new Set(labels.map(({ name }) => name)).size === labels.length, { message: "Expected unique label names" });
|
|
13
|
+
const RepositoryLabels = Schema.Array(RepositoryLabel).check(uniqueLabelNames);
|
|
14
|
+
/** The latest complete label catalog polling observed for one repository. */
|
|
6
15
|
export class RepositoryLabelProjection extends Schema.Class("@usine/engine/RepositoryLabelProjection")({
|
|
7
|
-
repository:
|
|
16
|
+
repository: RepositoryName,
|
|
8
17
|
labels: RepositoryLabels,
|
|
9
18
|
}) {
|
|
10
19
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/repository-label-projection/model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/repository-label-projection/model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,MAAM,mBAAmB,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAC7C,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,uCAAuC,EAAE,CAAC,CAC9E,CAAC;AAEF,yGAAyG;AACzG,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CACrD,MAAM,CAAC,SAAS,CAAC,mBAAmB,EAAE,EAAE,OAAO,EAAE,sCAAsC,EAAE,CAAC,CAC3F,CAAC;AAEF,MAAM,OAAO,eAAgB,SAAQ,MAAM,CAAC,KAAK,CAAkB,+BAA+B,CAAC,CACjG;IACE,IAAI,EAAE,mBAAmB;IACzB,KAAK,EAAE,MAAM,CAAC,gBAAgB,CAAC,oBAAoB,CAAC;IACpD,WAAW,EAAE,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC;CACpD,CACF;CAAG;AAEJ,MAAM,gBAAgB,GAAG,MAAM,CAAC,UAAU,CACxC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,MAAM,EAC1E,EAAE,OAAO,EAAE,6BAA6B,EAAE,CAC3C,CAAC;AACF,MAAM,gBAAgB,GAAG,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;AAE/E,6EAA6E;AAC7E,MAAM,OAAO,yBAA0B,SAAQ,MAAM,CAAC,KAAK,CACzD,yCAAyC,CAC1C,CAAC;IACA,UAAU,EAAE,cAAc;IAC1B,MAAM,EAAE,gBAAgB;CACzB,CAAC;CAAG"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { RepositoryName } from "@usine/core/repository";
|
|
2
2
|
import { Context, Effect, Layer, Option } from "effect";
|
|
3
3
|
import { RunDatabase } from "../database/database.ts";
|
|
4
|
-
import { EnginePersistenceError } from "../
|
|
4
|
+
import { EnginePersistenceError } from "../engine/error.ts";
|
|
5
5
|
import { RepositoryLabelProjection } from "./model.ts";
|
|
6
6
|
declare const RepositoryLabelProjectionReader_base: Context.ServiceClass<RepositoryLabelProjectionReader, "@usine/engine/RepositoryLabelProjectionReader", {
|
|
7
|
-
readonly get: (repository:
|
|
7
|
+
readonly get: (repository: RepositoryName) => Effect.Effect<Option.Option<RepositoryLabelProjection>, EnginePersistenceError>;
|
|
8
8
|
}>;
|
|
9
9
|
export declare class RepositoryLabelProjectionReader extends RepositoryLabelProjectionReader_base {
|
|
10
10
|
static readonly layer: Layer.Layer<RepositoryLabelProjectionReader, never, RunDatabase>;
|
|
@@ -16,5 +16,5 @@ declare const RepositoryLabelProjectionWriter_base: Context.ServiceClass<Reposit
|
|
|
16
16
|
export declare class RepositoryLabelProjectionWriter extends RepositoryLabelProjectionWriter_base {
|
|
17
17
|
static readonly layer: Layer.Layer<RepositoryLabelProjectionWriter, never, RunDatabase>;
|
|
18
18
|
}
|
|
19
|
-
export {};
|
|
20
|
-
//# sourceMappingURL=
|
|
19
|
+
export { RepositoryLabel, RepositoryLabelColor, RepositoryLabelProjection } from "./model.ts";
|
|
20
|
+
//# sourceMappingURL=repository-label-projection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repository-label-projection.d.ts","sourceRoot":"","sources":["../../src/repository-label-projection/repository-label-projection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAU,MAAM,QAAQ,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAmB,yBAAyB,EAAE,MAAM,YAAY,CAAC;;kBA0FtD,CACZ,UAAU,EAAE,cAAc,KACvB,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,yBAAyB,CAAC,EAAE,sBAAsB,CAAC;;AALxF,qBAAa,+BAAgC,SAAQ,oCAOD;IAClD,MAAM,CAAC,QAAQ,CAAC,KAAK,mEAA6D;CACnF;;IAKG,mDAAmD;sBACjC,CAChB,UAAU,EAAE,yBAAyB,KAClC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,sBAAsB,CAAC;;AANvD,qBAAa,+BAAgC,SAAQ,oCAQD;IAClD,MAAM,CAAC,QAAQ,CAAC,KAAK,mEAA6D;CACnF;AAED,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -1,14 +1,20 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { RepositoryName } from "@usine/core/repository";
|
|
2
2
|
import { eq, ne } from "drizzle-orm";
|
|
3
3
|
import { Context, Effect, Layer, Option, Schema } from "effect";
|
|
4
4
|
import { RunDatabase } from "../database/database.js";
|
|
5
5
|
import { repositoryLabelProjections } from "../database/schema.js";
|
|
6
|
-
import { EnginePersistenceError } from "../
|
|
7
|
-
import { RepositoryLabelProjection } from "./model.js";
|
|
6
|
+
import { EnginePersistenceError } from "../engine/error.js";
|
|
7
|
+
import { RepositoryLabel, RepositoryLabelProjection } from "./model.js";
|
|
8
|
+
/** Rows written before colors were kept are bare names and read as colorless labels. */
|
|
9
|
+
const LegacyLabelNames = Schema.Array(Schema.String);
|
|
10
|
+
const isLegacyLabelNames = Schema.is(LegacyLabelNames);
|
|
8
11
|
const RepositoryLabelProjectionRow = Schema.Struct({
|
|
9
|
-
repository:
|
|
10
|
-
labels: RepositoryLabelProjection.fields.labels,
|
|
12
|
+
repository: RepositoryName,
|
|
13
|
+
labels: Schema.Union([RepositoryLabelProjection.fields.labels, LegacyLabelNames]),
|
|
11
14
|
});
|
|
15
|
+
const storedLabels = (labels) => isLegacyLabelNames(labels)
|
|
16
|
+
? labels.map((name) => new RepositoryLabel({ name, color: Option.none(), description: Option.none() }))
|
|
17
|
+
: labels;
|
|
12
18
|
const decodeRows = Schema.decodeUnknownEffect(Schema.Array(RepositoryLabelProjectionRow));
|
|
13
19
|
const encodeLabels = Schema.encodeSync(RepositoryLabelProjection.fields.labels);
|
|
14
20
|
const persistence = (operation) => (effect) => Effect.mapError(effect, (cause) => new EnginePersistenceError({ operation, cause }));
|
|
@@ -29,7 +35,10 @@ const makeReader = Effect.gen(function* () {
|
|
|
29
35
|
const row = decoded[0];
|
|
30
36
|
return row === undefined
|
|
31
37
|
? Option.none()
|
|
32
|
-
: Option.some(new RepositoryLabelProjection(
|
|
38
|
+
: Option.some(new RepositoryLabelProjection({
|
|
39
|
+
repository: row.repository,
|
|
40
|
+
labels: storedLabels(row.labels),
|
|
41
|
+
}));
|
|
33
42
|
}, persistence("read repository label projection")),
|
|
34
43
|
};
|
|
35
44
|
});
|
|
@@ -70,4 +79,5 @@ export class RepositoryLabelProjectionReader extends Context.Service()("@usine/e
|
|
|
70
79
|
export class RepositoryLabelProjectionWriter extends Context.Service()("@usine/engine/RepositoryLabelProjectionWriter") {
|
|
71
80
|
static layer = Layer.effect(RepositoryLabelProjectionWriter, makeWriter);
|
|
72
81
|
}
|
|
73
|
-
|
|
82
|
+
export { RepositoryLabel, RepositoryLabelColor, RepositoryLabelProjection } from "./model.js";
|
|
83
|
+
//# sourceMappingURL=repository-label-projection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repository-label-projection.js","sourceRoot":"","sources":["../../src/repository-label-projection/repository-label-projection.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { Agent } from "@usine/core/agent";
|
|
2
|
+
import { Attempt } from "@usine/core/attempt";
|
|
3
|
+
import { Event } from "@usine/core/event";
|
|
4
|
+
import { Run } from "@usine/core/run";
|
|
5
|
+
import { Step } from "@usine/core/step";
|
|
6
|
+
import { Schema } from "effect";
|
|
7
|
+
import { TranscriptEntry } from "../transcript.ts";
|
|
8
|
+
declare const RunSnapshot_base: Schema.Class<RunSnapshot, Schema.Struct<{
|
|
9
|
+
readonly event: typeof Event;
|
|
10
|
+
readonly itemKey: Schema.brand<Schema.NonEmptyString, "ItemKey">;
|
|
11
|
+
readonly run: typeof Run;
|
|
12
|
+
readonly step: typeof Step;
|
|
13
|
+
readonly attempts: Schema.$Array<typeof Attempt>;
|
|
14
|
+
readonly repository: Schema.brand<Schema.String, "RepositoryName">;
|
|
15
|
+
readonly revision: Schema.brand<Schema.String, "RepositoryRevision">;
|
|
16
|
+
readonly task: Schema.brand<Schema.String, "AttemptTask">;
|
|
17
|
+
readonly agent: typeof Agent;
|
|
18
|
+
readonly parentModel: Schema.Option<Schema.brand<Schema.String, "ModelId">>;
|
|
19
|
+
}>, {}>;
|
|
20
|
+
/** The full durable view of one Run. */
|
|
21
|
+
export declare class RunSnapshot extends RunSnapshot_base {
|
|
22
|
+
}
|
|
23
|
+
declare const RunEvidence_base: Schema.Class<RunEvidence, Schema.Struct<{
|
|
24
|
+
readonly snapshot: typeof RunSnapshot;
|
|
25
|
+
readonly transcript: Schema.$Array<typeof TranscriptEntry>;
|
|
26
|
+
}>, {}>;
|
|
27
|
+
/** A Run snapshot and all its saved transcript entries from the same database transaction. */
|
|
28
|
+
export declare class RunEvidence extends RunEvidence_base {
|
|
29
|
+
}
|
|
30
|
+
declare const RunSummary_base: Schema.Class<RunSummary, Schema.Struct<{
|
|
31
|
+
readonly itemKey: Schema.brand<Schema.NonEmptyString, "ItemKey">;
|
|
32
|
+
readonly run: typeof Run;
|
|
33
|
+
readonly step: typeof Step;
|
|
34
|
+
readonly attempts: Schema.$Array<typeof Attempt>;
|
|
35
|
+
readonly repository: Schema.brand<Schema.String, "RepositoryName">;
|
|
36
|
+
readonly task: Schema.brand<Schema.String, "AttemptTask">;
|
|
37
|
+
readonly agent: typeof Agent;
|
|
38
|
+
}>, {}>;
|
|
39
|
+
/** The lighter view used when listing Runs for operators. */
|
|
40
|
+
export declare class RunSummary extends RunSummary_base {
|
|
41
|
+
}
|
|
42
|
+
/** Monotonic version of the operator projection. */
|
|
43
|
+
export declare const ProjectionRevision: Schema.brand<Schema.Int, "ProjectionRevision">;
|
|
44
|
+
export type ProjectionRevision = typeof ProjectionRevision.Type;
|
|
45
|
+
export {};
|
|
46
|
+
//# sourceMappingURL=model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/run-reader/model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE1C,OAAO,EAAE,OAAO,EAAe,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAG1C,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;;;;;;;;;;;;;AAEnD,wCAAwC;AACxC,qBAAa,WAAY,SAAQ,gBAW/B;CAAG;;;;;AAEL,8FAA8F;AAC9F,qBAAa,WAAY,SAAQ,gBAG/B;CAAG;;;;;;;;;;AAEL,6DAA6D;AAC7D,qBAAa,UAAW,SAAQ,eAQ9B;CAAG;AAEL,oDAAoD;AACpD,eAAO,MAAM,kBAAkB,gDAE9B,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,OAAO,kBAAkB,CAAC,IAAI,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { Agent } from "@usine/core/agent";
|
|
2
|
+
import { ModelId } from "@usine/core/agent/brain";
|
|
3
|
+
import { Attempt, AttemptTask } from "@usine/core/attempt";
|
|
4
|
+
import { Event } from "@usine/core/event";
|
|
5
|
+
import { ItemKey } from "@usine/core/item";
|
|
6
|
+
import { RepositoryName, RepositoryRevision } from "@usine/core/repository";
|
|
7
|
+
import { Run } from "@usine/core/run";
|
|
8
|
+
import { Step } from "@usine/core/step";
|
|
9
|
+
import { Schema } from "effect";
|
|
10
|
+
import { TranscriptEntry } from "../transcript.js";
|
|
11
|
+
/** The full durable view of one Run. */
|
|
12
|
+
export class RunSnapshot extends Schema.Class("@usine/engine/RunSnapshot")({
|
|
13
|
+
event: Event,
|
|
14
|
+
itemKey: ItemKey,
|
|
15
|
+
run: Run,
|
|
16
|
+
step: Step,
|
|
17
|
+
attempts: Schema.Array(Attempt),
|
|
18
|
+
repository: RepositoryName,
|
|
19
|
+
revision: RepositoryRevision,
|
|
20
|
+
task: AttemptTask,
|
|
21
|
+
agent: Agent,
|
|
22
|
+
parentModel: Schema.Option(ModelId),
|
|
23
|
+
}) {
|
|
24
|
+
}
|
|
25
|
+
/** A Run snapshot and all its saved transcript entries from the same database transaction. */
|
|
26
|
+
export class RunEvidence extends Schema.Class("@usine/engine/RunEvidence")({
|
|
27
|
+
snapshot: RunSnapshot,
|
|
28
|
+
transcript: Schema.Array(TranscriptEntry),
|
|
29
|
+
}) {
|
|
30
|
+
}
|
|
31
|
+
/** The lighter view used when listing Runs for operators. */
|
|
32
|
+
export class RunSummary extends Schema.Class("@usine/engine/RunSummary")({
|
|
33
|
+
itemKey: ItemKey,
|
|
34
|
+
run: Run,
|
|
35
|
+
step: Step,
|
|
36
|
+
attempts: Schema.Array(Attempt),
|
|
37
|
+
repository: RepositoryName,
|
|
38
|
+
task: AttemptTask,
|
|
39
|
+
agent: Agent,
|
|
40
|
+
}) {
|
|
41
|
+
}
|
|
42
|
+
/** Monotonic version of the operator projection. */
|
|
43
|
+
export const ProjectionRevision = Schema.Int.check(Schema.isGreaterThanOrEqualTo(0)).pipe(Schema.brand("ProjectionRevision"));
|
|
44
|
+
//# sourceMappingURL=model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/run-reader/model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5E,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD,wCAAwC;AACxC,MAAM,OAAO,WAAY,SAAQ,MAAM,CAAC,KAAK,CAAc,2BAA2B,CAAC,CAAC;IACtF,KAAK,EAAE,KAAK;IACZ,OAAO,EAAE,OAAO;IAChB,GAAG,EAAE,GAAG;IACR,IAAI,EAAE,IAAI;IACV,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC;IAC/B,UAAU,EAAE,cAAc;IAC1B,QAAQ,EAAE,kBAAkB;IAC5B,IAAI,EAAE,WAAW;IACjB,KAAK,EAAE,KAAK;IACZ,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;CACpC,CAAC;CAAG;AAEL,8FAA8F;AAC9F,MAAM,OAAO,WAAY,SAAQ,MAAM,CAAC,KAAK,CAAc,2BAA2B,CAAC,CAAC;IACtF,QAAQ,EAAE,WAAW;IACrB,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC;CAC1C,CAAC;CAAG;AAEL,6DAA6D;AAC7D,MAAM,OAAO,UAAW,SAAQ,MAAM,CAAC,KAAK,CAAa,0BAA0B,CAAC,CAAC;IACnF,OAAO,EAAE,OAAO;IAChB,GAAG,EAAE,GAAG;IACR,IAAI,EAAE,IAAI;IACV,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC;IAC/B,UAAU,EAAE,cAAc;IAC1B,IAAI,EAAE,WAAW;IACjB,KAAK,EAAE,KAAK;CACb,CAAC;CAAG;AAEL,oDAAoD;AACpD,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CACvF,MAAM,CAAC,KAAK,CAAC,oBAAoB,CAAC,CACnC,CAAC"}
|