@usine/core 0.1.0 → 0.2.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 +28 -22
- package/dist/agent/agent.d.ts +27 -0
- package/dist/agent/agent.d.ts.map +1 -0
- package/dist/agent/agent.js +26 -0
- package/dist/agent/agent.js.map +1 -0
- package/dist/agent/brain.d.ts +24 -0
- package/dist/agent/brain.d.ts.map +1 -0
- package/dist/agent/brain.js +19 -0
- package/dist/agent/brain.js.map +1 -0
- package/dist/agent/capability.d.ts +23 -0
- package/dist/agent/capability.d.ts.map +1 -0
- package/dist/agent/capability.js +19 -0
- package/dist/agent/capability.js.map +1 -0
- package/dist/{agent.d.ts → agent/session.d.ts} +34 -50
- package/dist/agent/session.d.ts.map +1 -0
- package/dist/agent/session.js +93 -0
- package/dist/agent/session.js.map +1 -0
- package/dist/attempt/attempt.d.ts +41 -0
- package/dist/attempt/attempt.d.ts.map +1 -0
- package/dist/attempt/attempt.js +36 -0
- package/dist/attempt/attempt.js.map +1 -0
- package/dist/{attempt-channel.d.ts → attempt/channel.d.ts} +28 -32
- package/dist/attempt/channel.d.ts.map +1 -0
- package/dist/{attempt-channel.js → attempt/channel.js} +25 -26
- package/dist/attempt/channel.js.map +1 -0
- package/dist/attempt/failure.d.ts +52 -0
- package/dist/attempt/failure.d.ts.map +1 -0
- package/dist/attempt/failure.js +48 -0
- package/dist/attempt/failure.js.map +1 -0
- package/dist/attempt/outcome.d.ts +20 -0
- package/dist/attempt/outcome.d.ts.map +1 -0
- package/dist/attempt/outcome.js +16 -0
- package/dist/attempt/outcome.js.map +1 -0
- package/dist/cycle-budget.d.ts +38 -0
- package/dist/cycle-budget.d.ts.map +1 -0
- package/dist/cycle-budget.js +46 -0
- package/dist/cycle-budget.js.map +1 -0
- package/dist/{lifecycle/event.d.ts → event.d.ts} +6 -11
- package/dist/event.d.ts.map +1 -0
- package/dist/event.js +21 -0
- package/dist/event.js.map +1 -0
- package/dist/instance.d.ts +3 -7
- package/dist/instance.d.ts.map +1 -1
- package/dist/instance.js +2 -6
- package/dist/instance.js.map +1 -1
- package/dist/item.d.ts +8 -0
- package/dist/item.d.ts.map +1 -0
- package/dist/item.js +6 -0
- package/dist/item.js.map +1 -0
- package/dist/loop.d.ts +9 -0
- package/dist/loop.d.ts.map +1 -0
- package/dist/loop.js +7 -0
- package/dist/loop.js.map +1 -0
- package/dist/repository.d.ts +12 -17
- package/dist/repository.d.ts.map +1 -1
- package/dist/repository.js +11 -16
- package/dist/repository.js.map +1 -1
- package/dist/run/run.d.ts +16 -0
- package/dist/run/run.d.ts.map +1 -0
- package/dist/run/run.js +16 -0
- package/dist/run/run.js.map +1 -0
- package/dist/run/state.d.ts +114 -0
- package/dist/run/state.d.ts.map +1 -0
- package/dist/run/state.js +102 -0
- package/dist/run/state.js.map +1 -0
- package/dist/{step-result.d.ts → step/result.d.ts} +7 -9
- package/dist/step/result.d.ts.map +1 -0
- package/dist/{step-result.js → step/result.js} +8 -10
- package/dist/step/result.js.map +1 -0
- package/dist/step/step.d.ts +21 -0
- package/dist/step/step.d.ts.map +1 -0
- package/dist/step/step.js +19 -0
- package/dist/step/step.js.map +1 -0
- package/dist/worker.d.ts +7 -7
- package/dist/worker.d.ts.map +1 -1
- package/dist/worker.js +5 -5
- package/dist/worker.js.map +1 -1
- package/package.json +76 -4
- package/dist/agent.d.ts.map +0 -1
- package/dist/agent.js +0 -105
- package/dist/agent.js.map +0 -1
- package/dist/attempt-channel.d.ts.map +0 -1
- package/dist/attempt-channel.js.map +0 -1
- package/dist/index.d.ts +0 -24
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -24
- package/dist/index.js.map +0 -1
- package/dist/lifecycle/attempt-failure.d.ts +0 -51
- package/dist/lifecycle/attempt-failure.d.ts.map +0 -1
- package/dist/lifecycle/attempt-failure.js +0 -45
- package/dist/lifecycle/attempt-failure.js.map +0 -1
- package/dist/lifecycle/attempt.d.ts +0 -61
- package/dist/lifecycle/attempt.d.ts.map +0 -1
- package/dist/lifecycle/attempt.js +0 -52
- package/dist/lifecycle/attempt.js.map +0 -1
- package/dist/lifecycle/event.d.ts.map +0 -1
- package/dist/lifecycle/event.js +0 -26
- package/dist/lifecycle/event.js.map +0 -1
- package/dist/lifecycle/item.d.ts +0 -11
- package/dist/lifecycle/item.d.ts.map +0 -1
- package/dist/lifecycle/item.js +0 -9
- package/dist/lifecycle/item.js.map +0 -1
- package/dist/lifecycle/loop.d.ts +0 -17
- package/dist/lifecycle/loop.d.ts.map +0 -1
- package/dist/lifecycle/loop.js +0 -15
- package/dist/lifecycle/loop.js.map +0 -1
- package/dist/lifecycle/run-state.d.ts +0 -133
- package/dist/lifecycle/run-state.d.ts.map +0 -1
- package/dist/lifecycle/run-state.js +0 -126
- package/dist/lifecycle/run-state.js.map +0 -1
- package/dist/lifecycle/run.d.ts +0 -22
- package/dist/lifecycle/run.d.ts.map +0 -1
- package/dist/lifecycle/run.js +0 -22
- package/dist/lifecycle/run.js.map +0 -1
- package/dist/lifecycle/step.d.ts +0 -23
- package/dist/lifecycle/step.d.ts.map +0 -1
- package/dist/lifecycle/step.js +0 -21
- package/dist/lifecycle/step.js.map +0 -1
- package/dist/step-result.d.ts.map +0 -1
- package/dist/step-result.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,29 +1,35 @@
|
|
|
1
1
|
# @usine/core
|
|
2
2
|
|
|
3
|
-
Domain model for [usine](https://github.com/basaltbytes/usine), an agent-agnostic software factory: the Event → Run → Step → Attempt vocabulary every other block types against, plus shared instance and
|
|
3
|
+
Domain model for [usine](https://github.com/basaltbytes/usine), an agent-agnostic software factory: the Event → Run → Step → Attempt vocabulary every other block types against, plus the shared instance, repository, worker, and agent values.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
Import each domain concept from its owning subpath. Identities, records, and operations share that domain module.
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
| Export | Kind |
|
|
7
|
+
| Subpath | Exports |
|
|
10
8
|
| --- | --- |
|
|
11
|
-
| `
|
|
12
|
-
|
|
|
13
|
-
|
|
|
14
|
-
| `
|
|
15
|
-
| `
|
|
16
|
-
| `
|
|
17
|
-
| `
|
|
18
|
-
| `
|
|
19
|
-
| `
|
|
20
|
-
| `
|
|
21
|
-
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
9
|
+
| `@usine/core/event` | `Event`, `EventId`, `DedupKey` |
|
|
10
|
+
| `@usine/core/run`, `@usine/core/run/state` | `Run`, `RunId`; the run state machine as a tagged union with typestate transitions (`RunState.start`, `RunState.supersede`, ...) |
|
|
11
|
+
| `@usine/core/step`, `@usine/core/step/result` | `Step`, `StepName`; `StepResult` and its facts (`Commit`, `PullRequest`, `Comment`) |
|
|
12
|
+
| `@usine/core/attempt` | `Attempt`, `AttemptId`, `AttemptNumber`, `AttemptTask`, `shouldAutoRetry` |
|
|
13
|
+
| `@usine/core/attempt/outcome` | `AttemptSucceeded`, `AttemptFailed`, `AttemptCanceled`, `AttemptOutcome` |
|
|
14
|
+
| `@usine/core/attempt/failure` | `InfraFailure`, `DefectFailure`, `AgentFailure`, `RunawayFailure`, `ChildSessionBudgetFailure`, `AttemptFailure`, `isAutoRetryableFailure` |
|
|
15
|
+
| `@usine/core/attempt/channel` | The protocol-v4 attempt channel: `RunSpec`, `Start`, the envelopes, and the `admit` reducer. Import it as a namespace (`AttemptChannel.Started`) |
|
|
16
|
+
| `@usine/core/agent`, `@usine/core/agent/brain`, `@usine/core/agent/session` | `Agent`, `AgentName`, `AgentPersona`, parent-model resolution; `BrainSpec`, `ModelId`, `Harness`, `Effort`; `AgentSessionId`, session descriptors, `AgentSessionEvent`, `ChildSessionBudget`, `ChildSessionCount` |
|
|
17
|
+
| `@usine/core/agent/capability` | `HarnessCapability`, `HarnessReady`, `HarnessUnavailableError`, and the credential-free `HarnessReadiness` preflight response |
|
|
18
|
+
| `@usine/core/repository` | `RepositoryName`, `RepositoryRevision`, `CommitSha`, `splitRepositoryName`, `canonicalRepositoryName` |
|
|
19
|
+
| `@usine/core/worker`, `@usine/core/item`, `@usine/core/loop`, `@usine/core/instance` | `WorkerName`, `WorkerKind`; `ItemKey`, `ItemNumber`; `LoopName`, `ApprovalRequirement`; `InstanceDirectory` |
|
|
20
|
+
|
|
21
|
+
Branded schemas are exported under their brand name, and each has an `export type` twin of the same name so the name works in type positions too.
|
|
22
|
+
|
|
23
|
+
`PullRequest` and `Comment` facts use `URL` values in memory and URL strings in JSON, so Step results round-trip through the Attempt channel and durable storage.
|
|
24
|
+
|
|
25
|
+
The run state machine is `pending → waiting → queued → running → succeeded / failed / canceled`, with `failed → running` on operator retry. The failure taxonomy separates infra failures (the only auto-retryable class, capped), agent failures (always wait for the operator), runaway guard failures, and exhausted child-session budgets. Guard failures never auto-retry.
|
|
26
|
+
|
|
27
|
+
`RunState.operatorActions(state)` returns approval, retry, and cancel availability for operator views. The command handlers enforce the same lifecycle through the typed transitions.
|
|
28
|
+
|
|
29
|
+
Each Attempt records the child `BrainSpec` and effective Pi parent model used for that try. The attempt channel includes immutable repository, payload, task, agent context, and child-session budget in its `Start` frame; outbound `SessionEvent` envelopes retain parent and first-level child session identity.
|
|
28
30
|
|
|
29
31
|
Everything is 0.x: APIs change without notice while the engine grows. `effect` is a peer dependency — supply it yourself at the pinned version.
|
|
32
|
+
|
|
33
|
+
Import `CycleLimit`, `CycleGeneration`, `CycleCount`, `LoopCycleCount`, and `CycleBudgetAsk` from `@usine/core/cycle-budget`. An Item-level Ask records the exhausted Loop, its limit, and participating Loops’ admitted and completed Runs; it can exist before another Run is opened.
|
|
34
|
+
|
|
35
|
+
`DefectFailure` records a programmer defect captured at a boundary that needs a serializable Attempt outcome. It retains the original cause and never qualifies for automatic retry.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { Schema, Option } from "effect";
|
|
2
|
+
import { BrainSpec, Effort, ModelId } from "./brain.ts";
|
|
3
|
+
/** Kebab-case name of a rostered Agent, taken from its filename. */
|
|
4
|
+
export declare const AgentName: Schema.brand<Schema.String, "AgentName">;
|
|
5
|
+
export type AgentName = typeof AgentName.Type;
|
|
6
|
+
/** Standing Markdown instructions for one Agent. */
|
|
7
|
+
export declare const AgentPersona: Schema.brand<Schema.String, "AgentPersona">;
|
|
8
|
+
export type AgentPersona = typeof AgentPersona.Type;
|
|
9
|
+
declare const Agent_base: Schema.Class<Agent, Schema.Struct<{
|
|
10
|
+
readonly name: Schema.brand<Schema.String, "AgentName">;
|
|
11
|
+
/** Coding harness and settings used for this Agent's delegated child sessions. */
|
|
12
|
+
readonly brain: typeof BrainSpec;
|
|
13
|
+
/** Preferred model for the coordinating Pi parent; an absent override uses the instance default. */
|
|
14
|
+
readonly parentModel: Schema.OptionFromNullOr<Schema.brand<Schema.String, "ModelId">>;
|
|
15
|
+
/** Parent reasoning effort; an absent override uses the instance default, then the child brain's effort. */
|
|
16
|
+
readonly parentEffort: Schema.OptionFromOptionalKey<Schema.Literals<readonly ["off", "minimal", "low", "medium", "high", "xhigh", "max"]>>;
|
|
17
|
+
readonly persona: Schema.brand<Schema.String, "AgentPersona">;
|
|
18
|
+
}>, {}>;
|
|
19
|
+
/** One named member of the instance's team roster. */
|
|
20
|
+
export declare class Agent extends Agent_base {
|
|
21
|
+
}
|
|
22
|
+
/** Selects the Agent's parent-model override, then the instance default; `None` leaves selection to Pi. */
|
|
23
|
+
export declare const resolveParentModel: (agent: Agent, instanceDefault: Option.Option<ModelId>) => Option.Option<ModelId>;
|
|
24
|
+
/** The agent's parent-effort override, else the instance default, else the child brain's effort. */
|
|
25
|
+
export declare const resolveParentEffort: (agent: Agent, instanceDefault: Option.Option<Effort>) => Effort;
|
|
26
|
+
export {};
|
|
27
|
+
//# sourceMappingURL=agent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/agent/agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAExD,oEAAoE;AACpE,eAAO,MAAM,SAAS,0CAIW,CAAC;AAElC,MAAM,MAAM,SAAS,GAAG,OAAO,SAAS,CAAC,IAAI,CAAC;AAE9C,oDAAoD;AACpD,eAAO,MAAM,YAAY,6CAEW,CAAC;AACrC,MAAM,MAAM,YAAY,GAAG,OAAO,YAAY,CAAC,IAAI,CAAC;;;IAKlD,kFAAkF;;IAElF,oGAAoG;;IAGpG,4GAA4G;;;;AAR9G,sDAAsD;AACtD,qBAAa,KAAM,SAAQ,UAUzB;CAAG;AAEL,2GAA2G;AAC3G,eAAO,MAAM,kBAAkB,UACtB,KAAK,mBACK,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KACtC,MAAM,CAAC,MAAM,CAAC,OAAO,CAA6D,CAAC;AAEtF,oGAAoG;AACpG,eAAO,MAAM,mBAAmB,UAAW,KAAK,mBAAmB,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAG,MAIxF,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Schema, Option } from "effect";
|
|
2
|
+
import { BrainSpec, Effort, ModelId } from "./brain.js";
|
|
3
|
+
/** Kebab-case name of a rostered Agent, taken from its filename. */
|
|
4
|
+
export const AgentName = Schema.String.check(Schema.isPattern(/^[a-z0-9]+(?:-[a-z0-9]+)*$/u, {
|
|
5
|
+
message: "Expected a kebab-case Agent name",
|
|
6
|
+
})).pipe(Schema.brand("AgentName"));
|
|
7
|
+
/** Standing Markdown instructions for one Agent. */
|
|
8
|
+
export const AgentPersona = Schema.String.check(Schema.isPattern(/\S/u, { message: "Expected a non-blank Agent persona" })).pipe(Schema.brand("AgentPersona"));
|
|
9
|
+
/** One named member of the instance's team roster. */
|
|
10
|
+
export class Agent extends Schema.Class("Agent")({
|
|
11
|
+
name: AgentName,
|
|
12
|
+
/** Coding harness and settings used for this Agent's delegated child sessions. */
|
|
13
|
+
brain: BrainSpec,
|
|
14
|
+
/** Preferred model for the coordinating Pi parent; an absent override uses the instance default. */
|
|
15
|
+
parentModel: Schema.OptionFromNullOr(ModelId),
|
|
16
|
+
// Optional key rather than null: older stored agent rows have no such key.
|
|
17
|
+
/** Parent reasoning effort; an absent override uses the instance default, then the child brain's effort. */
|
|
18
|
+
parentEffort: Schema.OptionFromOptionalKey(Effort),
|
|
19
|
+
persona: AgentPersona,
|
|
20
|
+
}) {
|
|
21
|
+
}
|
|
22
|
+
/** Selects the Agent's parent-model override, then the instance default; `None` leaves selection to Pi. */
|
|
23
|
+
export const resolveParentModel = (agent, instanceDefault) => Option.firstSomeOf([agent.parentModel, instanceDefault]);
|
|
24
|
+
/** The agent's parent-effort override, else the instance default, else the child brain's effort. */
|
|
25
|
+
export const resolveParentEffort = (agent, instanceDefault) => Option.getOrElse(Option.firstSomeOf([agent.parentEffort, instanceDefault]), () => agent.brain.effort);
|
|
26
|
+
//# sourceMappingURL=agent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/agent/agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAExD,oEAAoE;AACpE,MAAM,CAAC,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAC1C,MAAM,CAAC,SAAS,CAAC,6BAA6B,EAAE;IAC9C,OAAO,EAAE,kCAAkC;CAC5C,CAAC,CACH,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;AAIlC,oDAAoD;AACpD,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAC7C,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,oCAAoC,EAAE,CAAC,CAC3E,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC;AAGrC,sDAAsD;AACtD,MAAM,OAAO,KAAM,SAAQ,MAAM,CAAC,KAAK,CAAQ,OAAO,CAAC,CAAC;IACtD,IAAI,EAAE,SAAS;IACf,kFAAkF;IAClF,KAAK,EAAE,SAAS;IAChB,oGAAoG;IACpG,WAAW,EAAE,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC;IAC7C,2EAA2E;IAC3E,4GAA4G;IAC5G,YAAY,EAAE,MAAM,CAAC,qBAAqB,CAAC,MAAM,CAAC;IAClD,OAAO,EAAE,YAAY;CACtB,CAAC;CAAG;AAEL,2GAA2G;AAC3G,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,KAAY,EACZ,eAAuC,EACf,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC,CAAC;AAEtF,oGAAoG;AACpG,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,KAAY,EAAE,eAAsC,EAAU,EAAE,CAClG,MAAM,CAAC,SAAS,CACd,MAAM,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC,EACzD,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CACzB,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Schema } from "effect";
|
|
2
|
+
/** A provider's model name; the selected harness checks its availability when the session starts. */
|
|
3
|
+
export declare const ModelId: Schema.brand<Schema.String, "ModelId">;
|
|
4
|
+
export type ModelId = typeof ModelId.Type;
|
|
5
|
+
/** Coding runtimes an Agent can select for delegated work. */
|
|
6
|
+
export declare const HARNESSES: readonly ["claude", "codex", "pi"];
|
|
7
|
+
/** The coding runtime that executes an Agent session. */
|
|
8
|
+
export declare const Harness: Schema.Literals<readonly ["claude", "codex", "pi"]>;
|
|
9
|
+
export type Harness = typeof Harness.Type;
|
|
10
|
+
/** Reasoning levels accepted in Agent files; support depends on the chosen harness and model. */
|
|
11
|
+
export declare const EFFORTS: readonly ["off", "minimal", "low", "medium", "high", "xhigh", "max"];
|
|
12
|
+
/** The requested amount of reasoning for a session; available levels depend on its harness and model. */
|
|
13
|
+
export declare const Effort: Schema.Literals<readonly ["off", "minimal", "low", "medium", "high", "xhigh", "max"]>;
|
|
14
|
+
export type Effort = typeof Effort.Type;
|
|
15
|
+
declare const BrainSpec_base: Schema.Class<BrainSpec, Schema.Struct<{
|
|
16
|
+
readonly harness: Schema.Literals<readonly ["claude", "codex", "pi"]>;
|
|
17
|
+
readonly model: Schema.brand<Schema.String, "ModelId">;
|
|
18
|
+
readonly effort: Schema.Literals<readonly ["off", "minimal", "low", "medium", "high", "xhigh", "max"]>;
|
|
19
|
+
}>, {}>;
|
|
20
|
+
/** How an Agent session runs: its coding harness, model, and reasoning effort. */
|
|
21
|
+
export declare class BrainSpec extends BrainSpec_base {
|
|
22
|
+
}
|
|
23
|
+
export {};
|
|
24
|
+
//# sourceMappingURL=brain.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"brain.d.ts","sourceRoot":"","sources":["../../src/agent/brain.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,qGAAqG;AACrG,eAAO,MAAM,OAAO,wCAEW,CAAC;AAChC,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAC;AAE1C,8DAA8D;AAC9D,eAAO,MAAM,SAAS,YAAI,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAU,CAAC;AAC5D,yDAAyD;AACzD,eAAO,MAAM,OAAO,qDAA6B,CAAC;AAClD,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAC;AAE1C,iGAAiG;AACjG,eAAO,MAAM,OAAO,YAAI,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAU,CAAC;AAC5F,yGAAyG;AACzG,eAAO,MAAM,MAAM,uFAA2B,CAAC;AAC/C,MAAM,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC,IAAI,CAAC;;;;;;AAExC,kFAAkF;AAClF,qBAAa,SAAU,SAAQ,cAI7B;CAAG"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Schema } from "effect";
|
|
2
|
+
/** A provider's model name; the selected harness checks its availability when the session starts. */
|
|
3
|
+
export const ModelId = Schema.String.check(Schema.isPattern(/\S/u, { message: "Expected a non-blank model id" })).pipe(Schema.brand("ModelId"));
|
|
4
|
+
/** Coding runtimes an Agent can select for delegated work. */
|
|
5
|
+
export const HARNESSES = ["claude", "codex", "pi"];
|
|
6
|
+
/** The coding runtime that executes an Agent session. */
|
|
7
|
+
export const Harness = Schema.Literals(HARNESSES);
|
|
8
|
+
/** Reasoning levels accepted in Agent files; support depends on the chosen harness and model. */
|
|
9
|
+
export const EFFORTS = ["off", "minimal", "low", "medium", "high", "xhigh", "max"];
|
|
10
|
+
/** The requested amount of reasoning for a session; available levels depend on its harness and model. */
|
|
11
|
+
export const Effort = Schema.Literals(EFFORTS);
|
|
12
|
+
/** How an Agent session runs: its coding harness, model, and reasoning effort. */
|
|
13
|
+
export class BrainSpec extends Schema.Class("Agent/BrainSpec")({
|
|
14
|
+
harness: Harness,
|
|
15
|
+
model: ModelId,
|
|
16
|
+
effort: Effort,
|
|
17
|
+
}) {
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=brain.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"brain.js","sourceRoot":"","sources":["../../src/agent/brain.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,qGAAqG;AACrG,MAAM,CAAC,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CACxC,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,+BAA+B,EAAE,CAAC,CACtE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;AAGhC,8DAA8D;AAC9D,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAU,CAAC;AAC5D,yDAAyD;AACzD,MAAM,CAAC,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AAGlD,iGAAiG;AACjG,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAU,CAAC;AAC5F,yGAAyG;AACzG,MAAM,CAAC,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AAG/C,kFAAkF;AAClF,MAAM,OAAO,SAAU,SAAQ,MAAM,CAAC,KAAK,CAAY,iBAAiB,CAAC,CAAC;IACxE,OAAO,EAAE,OAAO;IAChB,KAAK,EAAE,OAAO;IACd,MAAM,EAAE,MAAM;CACf,CAAC;CAAG"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Schema } from "effect";
|
|
2
|
+
/** A harness prerequisite that requires operator provisioning, never an automatic retry. */
|
|
3
|
+
export declare const HarnessCapability: Schema.Literals<readonly ["binary", "version", "login"]>;
|
|
4
|
+
export type HarnessCapability = typeof HarnessCapability.Type;
|
|
5
|
+
declare const HarnessUnavailableError_base: Schema.Class<HarnessUnavailableError, Schema.TaggedStruct<"HarnessUnavailableError", {
|
|
6
|
+
readonly harness: Schema.Literals<readonly ["claude", "codex", "pi"]>;
|
|
7
|
+
readonly capability: Schema.Literals<readonly ["binary", "version", "login"]>;
|
|
8
|
+
readonly message: Schema.NonEmptyString;
|
|
9
|
+
}>, import("effect/Cause").YieldableError>;
|
|
10
|
+
/** The Worker cannot run the requested harness until the operator fixes its provisioning. */
|
|
11
|
+
export declare class HarnessUnavailableError extends HarnessUnavailableError_base {
|
|
12
|
+
}
|
|
13
|
+
declare const HarnessReady_base: Schema.Class<HarnessReady, Schema.TaggedStruct<"HarnessReady", {
|
|
14
|
+
readonly harness: Schema.Literals<readonly ["claude", "codex", "pi"]>;
|
|
15
|
+
}>, {}>;
|
|
16
|
+
/** A verify-only probe found the requested harness available in the Worker's environment. */
|
|
17
|
+
export declare class HarnessReady extends HarnessReady_base {
|
|
18
|
+
}
|
|
19
|
+
/** The run host's preflight response; contains no credentials or account identity. */
|
|
20
|
+
export declare const HarnessReadiness: Schema.Union<readonly [typeof HarnessReady, typeof HarnessUnavailableError]>;
|
|
21
|
+
export type HarnessReadiness = typeof HarnessReadiness.Type;
|
|
22
|
+
export {};
|
|
23
|
+
//# sourceMappingURL=capability.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capability.d.ts","sourceRoot":"","sources":["../../src/agent/capability.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGhC,4FAA4F;AAC5F,eAAO,MAAM,iBAAiB,0DAAkD,CAAC;AACjF,MAAM,MAAM,iBAAiB,GAAG,OAAO,iBAAiB,CAAC,IAAI,CAAC;;;;;;AAE9D,6FAA6F;AAC7F,qBAAa,uBAAwB,SAAQ,4BAM3C;CAAG;;;;AAEL,6FAA6F;AAC7F,qBAAa,YAAa,SAAQ,iBAEhC;CAAG;AAEL,sFAAsF;AACtF,eAAO,MAAM,gBAAgB,8EAAwD,CAAC;AACtF,MAAM,MAAM,gBAAgB,GAAG,OAAO,gBAAgB,CAAC,IAAI,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Schema } from "effect";
|
|
2
|
+
import { Harness } from "./brain.js";
|
|
3
|
+
/** A harness prerequisite that requires operator provisioning, never an automatic retry. */
|
|
4
|
+
export const HarnessCapability = Schema.Literals(["binary", "version", "login"]);
|
|
5
|
+
/** The Worker cannot run the requested harness until the operator fixes its provisioning. */
|
|
6
|
+
export class HarnessUnavailableError extends Schema.TaggedError("HarnessUnavailableError")("HarnessUnavailableError", {
|
|
7
|
+
harness: Harness,
|
|
8
|
+
capability: HarnessCapability,
|
|
9
|
+
message: Schema.NonEmptyString,
|
|
10
|
+
}) {
|
|
11
|
+
}
|
|
12
|
+
/** A verify-only probe found the requested harness available in the Worker's environment. */
|
|
13
|
+
export class HarnessReady extends Schema.TaggedClass("HarnessReady")("HarnessReady", {
|
|
14
|
+
harness: Harness,
|
|
15
|
+
}) {
|
|
16
|
+
}
|
|
17
|
+
/** The run host's preflight response; contains no credentials or account identity. */
|
|
18
|
+
export const HarnessReadiness = Schema.Union([HarnessReady, HarnessUnavailableError]);
|
|
19
|
+
//# sourceMappingURL=capability.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capability.js","sourceRoot":"","sources":["../../src/agent/capability.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAErC,4FAA4F;AAC5F,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;AAGjF,6FAA6F;AAC7F,MAAM,OAAO,uBAAwB,SAAQ,MAAM,CAAC,WAAW,CAC7D,yBAAyB,CAC1B,CAAC,yBAAyB,EAAE;IAC3B,OAAO,EAAE,OAAO;IAChB,UAAU,EAAE,iBAAiB;IAC7B,OAAO,EAAE,MAAM,CAAC,cAAc;CAC/B,CAAC;CAAG;AAEL,6FAA6F;AAC7F,MAAM,OAAO,YAAa,SAAQ,MAAM,CAAC,WAAW,CAAe,cAAc,CAAC,CAAC,cAAc,EAAE;IACjG,OAAO,EAAE,OAAO;CACjB,CAAC;CAAG;AAEL,sFAAsF;AACtF,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,YAAY,EAAE,uBAAuB,CAAC,CAAC,CAAC"}
|
|
@@ -1,45 +1,20 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
export
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
export
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
export
|
|
11
|
-
export
|
|
12
|
-
export declare const Harness: Schema.Literals<readonly ["claude", "codex", "pi"]>;
|
|
13
|
-
export type Harness = typeof Harness.Type;
|
|
14
|
-
export declare const EFFORTS: readonly ["off", "minimal", "low", "medium", "high", "xhigh", "max"];
|
|
15
|
-
export declare const Effort: Schema.Literals<readonly ["off", "minimal", "low", "medium", "high", "xhigh", "max"]>;
|
|
16
|
-
export type Effort = typeof Effort.Type;
|
|
17
|
-
declare const BrainSpec_base: Schema.Class<BrainSpec, Schema.Struct<{
|
|
18
|
-
readonly harness: Schema.Literals<readonly ["claude", "codex", "pi"]>;
|
|
19
|
-
readonly model: Schema.brand<Schema.String, "ModelId">;
|
|
20
|
-
readonly effort: Schema.Literals<readonly ["off", "minimal", "low", "medium", "high", "xhigh", "max"]>;
|
|
21
|
-
}>, {}>;
|
|
22
|
-
/** Value object: the harness child that a run is declared to spawn. */
|
|
23
|
-
export declare class BrainSpec extends BrainSpec_base {
|
|
24
|
-
}
|
|
25
|
-
declare const Agent_base: Schema.Class<Agent, Schema.Struct<{
|
|
26
|
-
readonly name: Schema.brand<Schema.String, "AgentName">;
|
|
27
|
-
readonly brain: typeof BrainSpec;
|
|
28
|
-
readonly parentModel: Schema.OptionFromNullOr<Schema.brand<Schema.String, "ModelId">>;
|
|
29
|
-
readonly persona: Schema.brand<Schema.String, "AgentPersona">;
|
|
30
|
-
}>, {}>;
|
|
31
|
-
/** Entity: one named member of the instance's authored team roster. */
|
|
32
|
-
export declare class Agent extends Agent_base {
|
|
33
|
-
}
|
|
34
|
-
/** Value object: SDK-local identity of one parent or child agent session. */
|
|
35
|
-
export declare const SessionId: Schema.brand<Schema.NonEmptyString, "AgentSessionId">;
|
|
36
|
-
export type SessionId = typeof SessionId.Type;
|
|
1
|
+
import { Schema } from "effect";
|
|
2
|
+
import { BrainSpec } from "./brain.ts";
|
|
3
|
+
/** Identity usine assigns to a parent or child session within an Attempt. */
|
|
4
|
+
export declare const AgentSessionId: Schema.brand<Schema.NonEmptyString, "AgentSessionId">;
|
|
5
|
+
export type AgentSessionId = typeof AgentSessionId.Type;
|
|
6
|
+
/** Maximum child sessions one Attempt may spawn over its lifetime, including sequential spawns. */
|
|
7
|
+
export declare const ChildSessionBudget: Schema.brand<Schema.Int, "ChildSessionBudget">;
|
|
8
|
+
export type ChildSessionBudget = typeof ChildSessionBudget.Type;
|
|
9
|
+
/** The 1-based child spawn request number within an Attempt, including requests rejected by the budget. */
|
|
10
|
+
export declare const ChildSessionCount: Schema.brand<Schema.Int, "ChildSessionCount">;
|
|
11
|
+
export type ChildSessionCount = typeof ChildSessionCount.Type;
|
|
37
12
|
declare const ParentSession_base: Schema.Class<ParentSession, Schema.TaggedStruct<"ParentSession", {
|
|
38
13
|
readonly id: Schema.brand<Schema.NonEmptyString, "AgentSessionId">;
|
|
39
14
|
readonly agent: Schema.brand<Schema.String, "AgentName">;
|
|
40
15
|
readonly brain: typeof BrainSpec;
|
|
41
16
|
}>, {}>;
|
|
42
|
-
/**
|
|
17
|
+
/** The session coordinating an Attempt and delegating work to its coding children. */
|
|
43
18
|
export declare class ParentSession extends ParentSession_base {
|
|
44
19
|
}
|
|
45
20
|
declare const ChildSession_base: Schema.Class<ChildSession, Schema.TaggedStruct<"ChildSession", {
|
|
@@ -48,20 +23,23 @@ declare const ChildSession_base: Schema.Class<ChildSession, Schema.TaggedStruct<
|
|
|
48
23
|
readonly agent: Schema.brand<Schema.String, "AgentName">;
|
|
49
24
|
readonly brain: typeof BrainSpec;
|
|
50
25
|
}>, {}>;
|
|
51
|
-
/**
|
|
26
|
+
/** A coding session delegated by the Attempt's parent; children cannot delegate to further children. */
|
|
52
27
|
export declare class ChildSession extends ChildSession_base {
|
|
53
28
|
}
|
|
54
|
-
|
|
55
|
-
export
|
|
29
|
+
/** A participant in an Attempt, with its role, Agent, and effective brain recorded. */
|
|
30
|
+
export declare const AgentSession: Schema.Union<readonly [typeof ParentSession, typeof ChildSession]>;
|
|
31
|
+
export type AgentSession = typeof AgentSession.Type;
|
|
56
32
|
declare const SessionStarted_base: Schema.Class<SessionStarted, Schema.TaggedStruct<"SessionStarted", {
|
|
57
33
|
readonly session: Schema.Union<readonly [typeof ParentSession, typeof ChildSession]>;
|
|
58
34
|
}>, {}>;
|
|
35
|
+
/** Records the session identity and brain actually selected at launch. */
|
|
59
36
|
export declare class SessionStarted extends SessionStarted_base {
|
|
60
37
|
}
|
|
61
38
|
declare const TextOutput_base: Schema.Class<TextOutput, Schema.TaggedStruct<"TextOutput", {
|
|
62
39
|
readonly session: Schema.Union<readonly [typeof ParentSession, typeof ChildSession]>;
|
|
63
40
|
readonly text: Schema.NonEmptyString;
|
|
64
41
|
}>, {}>;
|
|
42
|
+
/** Completed assistant text emitted during the session, which may precede its final result. */
|
|
65
43
|
export declare class TextOutput extends TextOutput_base {
|
|
66
44
|
}
|
|
67
45
|
declare const ToolStarted_base: Schema.Class<ToolStarted, Schema.TaggedStruct<"ToolStarted", {
|
|
@@ -70,6 +48,7 @@ declare const ToolStarted_base: Schema.Class<ToolStarted, Schema.TaggedStruct<"T
|
|
|
70
48
|
readonly tool: Schema.NonEmptyString;
|
|
71
49
|
readonly input: Schema.Codec<Schema.Json, Schema.Json, never, never>;
|
|
72
50
|
}>, {}>;
|
|
51
|
+
/** A session began a tool call; `callId` pairs it with the corresponding result. */
|
|
73
52
|
export declare class ToolStarted extends ToolStarted_base {
|
|
74
53
|
}
|
|
75
54
|
declare const ToolFinished_base: Schema.Class<ToolFinished, Schema.TaggedStruct<"ToolFinished", {
|
|
@@ -79,21 +58,27 @@ declare const ToolFinished_base: Schema.Class<ToolFinished, Schema.TaggedStruct<
|
|
|
79
58
|
readonly output: Schema.Codec<Schema.Json, Schema.Json, never, never>;
|
|
80
59
|
readonly isError: Schema.Boolean;
|
|
81
60
|
}>, {}>;
|
|
61
|
+
/** A tool call returned its output; a tool error does not by itself close the session. */
|
|
82
62
|
export declare class ToolFinished extends ToolFinished_base {
|
|
83
63
|
}
|
|
84
64
|
declare const SessionFinished_base: Schema.Class<SessionFinished, Schema.TaggedStruct<"SessionFinished", {
|
|
85
65
|
readonly session: Schema.Union<readonly [typeof ParentSession, typeof ChildSession]>;
|
|
86
66
|
}>, {}>;
|
|
67
|
+
/** Marks the end of a session's activity in the transcript; the Attempt's outcome is recorded separately. */
|
|
87
68
|
export declare class SessionFinished extends SessionFinished_base {
|
|
88
69
|
}
|
|
89
|
-
/**
|
|
90
|
-
export declare const
|
|
91
|
-
export type
|
|
70
|
+
/** The billing source whose meter produced a usage or rate-limit observation. */
|
|
71
|
+
export declare const BillingPool: Schema.Literals<readonly ["apiKeys", "claudePlan", "chatgptPlan"]>;
|
|
72
|
+
export type BillingPool = typeof BillingPool.Type;
|
|
92
73
|
declare const RateLimitWindow_base: Schema.Class<RateLimitWindow, Schema.Struct<{
|
|
74
|
+
/** Percentage of the allowance already consumed, including usage outside this Attempt. */
|
|
93
75
|
readonly usedPercent: Schema.Number;
|
|
76
|
+
/** Length of the allowance window; absent when the provider omits it. */
|
|
94
77
|
readonly windowDurationMinutes: Schema.OptionFromNullOr<Schema.Number>;
|
|
78
|
+
/** When the allowance resets; absent when the provider omits it. */
|
|
95
79
|
readonly resetsAt: Schema.OptionFromNullOr<Schema.DateTimeUtcFromString>;
|
|
96
80
|
}>, {}>;
|
|
81
|
+
/** A billing pool's observed usage for one allowance window. */
|
|
97
82
|
export declare class RateLimitWindow extends RateLimitWindow_base {
|
|
98
83
|
}
|
|
99
84
|
declare const RateLimitsSnapshot_base: Schema.Class<RateLimitsSnapshot, Schema.Struct<{
|
|
@@ -102,6 +87,7 @@ declare const RateLimitsSnapshot_base: Schema.Class<RateLimitsSnapshot, Schema.S
|
|
|
102
87
|
readonly primary: Schema.OptionFromNullOr<typeof RateLimitWindow>;
|
|
103
88
|
readonly secondary: Schema.OptionFromNullOr<typeof RateLimitWindow>;
|
|
104
89
|
}>, {}>;
|
|
90
|
+
/** The allowance windows reported together by a provider; omitted windows remain unknown. */
|
|
105
91
|
export declare class RateLimitsSnapshot extends RateLimitsSnapshot_base {
|
|
106
92
|
}
|
|
107
93
|
declare const PoolRateLimitsUpdated_base: Schema.Class<PoolRateLimitsUpdated, Schema.TaggedStruct<"PoolRateLimitsUpdated", {
|
|
@@ -109,13 +95,11 @@ declare const PoolRateLimitsUpdated_base: Schema.Class<PoolRateLimitsUpdated, Sc
|
|
|
109
95
|
readonly pool: Schema.Literals<readonly ["apiKeys", "claudePlan", "chatgptPlan"]>;
|
|
110
96
|
readonly rateLimits: typeof RateLimitsSnapshot;
|
|
111
97
|
}>, {}>;
|
|
112
|
-
/**
|
|
98
|
+
/** The latest rate windows observed for a billing pool during one session. */
|
|
113
99
|
export declare class PoolRateLimitsUpdated extends PoolRateLimitsUpdated_base {
|
|
114
100
|
}
|
|
115
|
-
/**
|
|
116
|
-
export declare const
|
|
117
|
-
export type
|
|
118
|
-
/** Pure deriver: a per-Agent parent override wins over the instance default. */
|
|
119
|
-
export declare const resolveParentModel: (agent: Agent, instanceDefault: Option.Option<ModelId>) => Option.Option<ModelId>;
|
|
101
|
+
/** Session activity and billing observations recorded in an Attempt's transcript. */
|
|
102
|
+
export declare const AgentSessionEvent: Schema.Union<readonly [typeof SessionStarted, typeof TextOutput, typeof ToolStarted, typeof ToolFinished, typeof PoolRateLimitsUpdated, typeof SessionFinished]>;
|
|
103
|
+
export type AgentSessionEvent = typeof AgentSessionEvent.Type;
|
|
120
104
|
export {};
|
|
121
|
-
//# sourceMappingURL=
|
|
105
|
+
//# sourceMappingURL=session.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/agent/session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,6EAA6E;AAC7E,eAAO,MAAM,cAAc,uDAA6D,CAAC;AACzF,MAAM,MAAM,cAAc,GAAG,OAAO,cAAc,CAAC,IAAI,CAAC;AAIxD,mGAAmG;AACnG,eAAO,MAAM,kBAAkB,gDAAuD,CAAC;AACvF,MAAM,MAAM,kBAAkB,GAAG,OAAO,kBAAkB,CAAC,IAAI,CAAC;AAEhE,2GAA2G;AAC3G,eAAO,MAAM,iBAAiB,+CAAsD,CAAC;AACrF,MAAM,MAAM,iBAAiB,GAAG,OAAO,iBAAiB,CAAC,IAAI,CAAC;;;;;;AAE9D,sFAAsF;AACtF,qBAAa,aAAc,SAAQ,kBAOlC;CAAG;;;;;;;AAEJ,wGAAwG;AACxG,qBAAa,YAAa,SAAQ,iBAQjC;CAAG;AAEJ,uFAAuF;AACvF,eAAO,MAAM,YAAY,oEAA8C,CAAC;AACxE,MAAM,MAAM,YAAY,GAAG,OAAO,YAAY,CAAC,IAAI,CAAC;;;;AAEpD,0EAA0E;AAC1E,qBAAa,cAAe,SAAQ,mBAGnC;CAAG;;;;;AAEJ,+FAA+F;AAC/F,qBAAa,UAAW,SAAQ,eAG9B;CAAG;;;;;;;AAEL,oFAAoF;AACpF,qBAAa,WAAY,SAAQ,gBAQhC;CAAG;;;;;;;;AAEJ,0FAA0F;AAC1F,qBAAa,YAAa,SAAQ,iBASjC;CAAG;;;;AAEJ,6GAA6G;AAC7G,qBAAa,eAAgB,SAAQ,oBAGpC;CAAG;AAEJ,iFAAiF;AACjF,eAAO,MAAM,WAAW,oEAAqE,CAAC;AAC9F,MAAM,MAAM,WAAW,GAAG,OAAO,WAAW,CAAC,IAAI,CAAC;;IAIhD,0FAA0F;;IAE1F,yEAAyE;;IAEzE,oEAAoE;;;AANtE,gEAAgE;AAChE,qBAAa,eAAgB,SAAQ,oBAOnC;CAAG;;;;;;;AAEL,6FAA6F;AAC7F,qBAAa,kBAAmB,SAAQ,uBAOtC;CAAG;;;;;;AAEL,8EAA8E;AAC9E,qBAAa,qBAAsB,SAAQ,0BAMzC;CAAG;AAEL,qFAAqF;AACrF,eAAO,MAAM,iBAAiB,kKAO5B,CAAC;AACH,MAAM,MAAM,iBAAiB,GAAG,OAAO,iBAAiB,CAAC,IAAI,CAAC"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { Schema } from "effect";
|
|
2
|
+
import { AgentName } from "./agent.js";
|
|
3
|
+
import { BrainSpec } from "./brain.js";
|
|
4
|
+
/** Identity usine assigns to a parent or child session within an Attempt. */
|
|
5
|
+
export const AgentSessionId = Schema.NonEmptyString.pipe(Schema.brand("AgentSessionId"));
|
|
6
|
+
const PositiveInt = Schema.Int.check(Schema.isGreaterThanOrEqualTo(1));
|
|
7
|
+
/** Maximum child sessions one Attempt may spawn over its lifetime, including sequential spawns. */
|
|
8
|
+
export const ChildSessionBudget = PositiveInt.pipe(Schema.brand("ChildSessionBudget"));
|
|
9
|
+
/** The 1-based child spawn request number within an Attempt, including requests rejected by the budget. */
|
|
10
|
+
export const ChildSessionCount = PositiveInt.pipe(Schema.brand("ChildSessionCount"));
|
|
11
|
+
/** The session coordinating an Attempt and delegating work to its coding children. */
|
|
12
|
+
export class ParentSession extends Schema.TaggedClass("Agent/ParentSession")("ParentSession", {
|
|
13
|
+
id: AgentSessionId,
|
|
14
|
+
agent: AgentName,
|
|
15
|
+
brain: BrainSpec,
|
|
16
|
+
}) {
|
|
17
|
+
}
|
|
18
|
+
/** A coding session delegated by the Attempt's parent; children cannot delegate to further children. */
|
|
19
|
+
export class ChildSession extends Schema.TaggedClass("Agent/ChildSession")("ChildSession", {
|
|
20
|
+
id: AgentSessionId,
|
|
21
|
+
parentId: AgentSessionId,
|
|
22
|
+
agent: AgentName,
|
|
23
|
+
brain: BrainSpec,
|
|
24
|
+
}) {
|
|
25
|
+
}
|
|
26
|
+
/** A participant in an Attempt, with its role, Agent, and effective brain recorded. */
|
|
27
|
+
export const AgentSession = Schema.Union([ParentSession, ChildSession]);
|
|
28
|
+
/** Records the session identity and brain actually selected at launch. */
|
|
29
|
+
export class SessionStarted extends Schema.TaggedClass("Agent/SessionStarted")("SessionStarted", { session: AgentSession }) {
|
|
30
|
+
}
|
|
31
|
+
/** Completed assistant text emitted during the session, which may precede its final result. */
|
|
32
|
+
export class TextOutput extends Schema.TaggedClass("Agent/TextOutput")("TextOutput", {
|
|
33
|
+
session: AgentSession,
|
|
34
|
+
text: Schema.NonEmptyString,
|
|
35
|
+
}) {
|
|
36
|
+
}
|
|
37
|
+
/** A session began a tool call; `callId` pairs it with the corresponding result. */
|
|
38
|
+
export class ToolStarted extends Schema.TaggedClass("Agent/ToolStarted")("ToolStarted", {
|
|
39
|
+
session: AgentSession,
|
|
40
|
+
callId: Schema.NonEmptyString,
|
|
41
|
+
tool: Schema.NonEmptyString,
|
|
42
|
+
input: Schema.Json,
|
|
43
|
+
}) {
|
|
44
|
+
}
|
|
45
|
+
/** A tool call returned its output; a tool error does not by itself close the session. */
|
|
46
|
+
export class ToolFinished extends Schema.TaggedClass("Agent/ToolFinished")("ToolFinished", {
|
|
47
|
+
session: AgentSession,
|
|
48
|
+
callId: Schema.NonEmptyString,
|
|
49
|
+
tool: Schema.NonEmptyString,
|
|
50
|
+
output: Schema.Json,
|
|
51
|
+
isError: Schema.Boolean,
|
|
52
|
+
}) {
|
|
53
|
+
}
|
|
54
|
+
/** Marks the end of a session's activity in the transcript; the Attempt's outcome is recorded separately. */
|
|
55
|
+
export class SessionFinished extends Schema.TaggedClass("Agent/SessionFinished")("SessionFinished", { session: AgentSession }) {
|
|
56
|
+
}
|
|
57
|
+
/** The billing source whose meter produced a usage or rate-limit observation. */
|
|
58
|
+
export const BillingPool = Schema.Literals(["apiKeys", "claudePlan", "chatgptPlan"]);
|
|
59
|
+
/** A billing pool's observed usage for one allowance window. */
|
|
60
|
+
export class RateLimitWindow extends Schema.Class("Agent/RateLimitWindow")({
|
|
61
|
+
/** Percentage of the allowance already consumed, including usage outside this Attempt. */
|
|
62
|
+
usedPercent: Schema.Number,
|
|
63
|
+
/** Length of the allowance window; absent when the provider omits it. */
|
|
64
|
+
windowDurationMinutes: Schema.OptionFromNullOr(Schema.Number),
|
|
65
|
+
/** When the allowance resets; absent when the provider omits it. */
|
|
66
|
+
resetsAt: Schema.OptionFromNullOr(Schema.DateTimeUtcFromString),
|
|
67
|
+
}) {
|
|
68
|
+
}
|
|
69
|
+
/** The allowance windows reported together by a provider; omitted windows remain unknown. */
|
|
70
|
+
export class RateLimitsSnapshot extends Schema.Class("Agent/RateLimitsSnapshot")({
|
|
71
|
+
limitId: Schema.OptionFromNullOr(Schema.String),
|
|
72
|
+
limitName: Schema.OptionFromNullOr(Schema.String),
|
|
73
|
+
primary: Schema.OptionFromNullOr(RateLimitWindow),
|
|
74
|
+
secondary: Schema.OptionFromNullOr(RateLimitWindow),
|
|
75
|
+
}) {
|
|
76
|
+
}
|
|
77
|
+
/** The latest rate windows observed for a billing pool during one session. */
|
|
78
|
+
export class PoolRateLimitsUpdated extends Schema.TaggedClass("Agent/PoolRateLimitsUpdated")("PoolRateLimitsUpdated", {
|
|
79
|
+
session: AgentSession,
|
|
80
|
+
pool: BillingPool,
|
|
81
|
+
rateLimits: RateLimitsSnapshot,
|
|
82
|
+
}) {
|
|
83
|
+
}
|
|
84
|
+
/** Session activity and billing observations recorded in an Attempt's transcript. */
|
|
85
|
+
export const AgentSessionEvent = Schema.Union([
|
|
86
|
+
SessionStarted,
|
|
87
|
+
TextOutput,
|
|
88
|
+
ToolStarted,
|
|
89
|
+
ToolFinished,
|
|
90
|
+
PoolRateLimitsUpdated,
|
|
91
|
+
SessionFinished,
|
|
92
|
+
]);
|
|
93
|
+
//# sourceMappingURL=session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/agent/session.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { Schema } from "effect";
|
|
2
|
+
import { BrainSpec } from "../agent/brain.ts";
|
|
3
|
+
import { AttemptFailure } from "./failure.ts";
|
|
4
|
+
/** Identity of one execution try; each retry receives a new identity under the same Run and Step. */
|
|
5
|
+
export declare const AttemptId: Schema.brand<Schema.NonEmptyString, "AttemptId">;
|
|
6
|
+
export type AttemptId = typeof AttemptId.Type;
|
|
7
|
+
/**
|
|
8
|
+
* 1-based position of a try under its step. Retries are attempt N+1 under the
|
|
9
|
+
* same step, and the auto-retry cap counts total attempts.
|
|
10
|
+
*/
|
|
11
|
+
export declare const AttemptNumber: Schema.brand<Schema.Int, "AttemptNumber">;
|
|
12
|
+
export type AttemptNumber = typeof AttemptNumber.Type;
|
|
13
|
+
/** Task text given to the agent after loop interpolation or an operator's edit-and-retry amendment. */
|
|
14
|
+
export declare const AttemptTask: Schema.brand<Schema.String, "AttemptTask">;
|
|
15
|
+
export type AttemptTask = typeof AttemptTask.Type;
|
|
16
|
+
declare const Attempt_base: Schema.Class<Attempt, Schema.Struct<{
|
|
17
|
+
readonly id: Schema.brand<Schema.NonEmptyString, "AttemptId">;
|
|
18
|
+
readonly runId: Schema.brand<Schema.NonEmptyString, "RunId">;
|
|
19
|
+
readonly stepName: Schema.brand<Schema.NonEmptyString, "StepName">;
|
|
20
|
+
readonly worker: Schema.brand<Schema.String, "WorkerName">;
|
|
21
|
+
readonly number: Schema.brand<Schema.Int, "AttemptNumber">;
|
|
22
|
+
readonly brain: typeof BrainSpec;
|
|
23
|
+
readonly parentModel: Schema.OptionFromNullOr<Schema.brand<Schema.String, "ModelId">>;
|
|
24
|
+
readonly startedAt: Schema.DateTimeUtc;
|
|
25
|
+
readonly outcome: Schema.Option<Schema.Union<readonly [typeof import("./outcome.ts").AttemptSucceeded, typeof import("./outcome.ts").AttemptFailed, typeof import("./outcome.ts").AttemptCanceled]>>;
|
|
26
|
+
}>, {}>;
|
|
27
|
+
/** One try of a step on a worker. `outcome` is none while the attempt is in flight. */
|
|
28
|
+
export declare class Attempt extends Attempt_base {
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* The auto-retry law: only an infra failure retries, and only while the attempt
|
|
32
|
+
* number is below `maxAutoAttempts` (ADR 0002).
|
|
33
|
+
* `number` is the failed try's position; `maxAutoAttempts` includes the first try.
|
|
34
|
+
*/
|
|
35
|
+
export declare const shouldAutoRetry: (options: {
|
|
36
|
+
readonly failure: AttemptFailure;
|
|
37
|
+
readonly number: AttemptNumber;
|
|
38
|
+
readonly maxAutoAttempts: AttemptNumber;
|
|
39
|
+
}) => boolean;
|
|
40
|
+
export {};
|
|
41
|
+
//# sourceMappingURL=attempt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attempt.d.ts","sourceRoot":"","sources":["../../src/attempt/attempt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,SAAS,EAAW,MAAM,mBAAmB,CAAC;AAIvD,OAAO,EAAE,cAAc,EAA0B,MAAM,cAAc,CAAC;AAGtE,qGAAqG;AACrG,eAAO,MAAM,SAAS,kDAAwD,CAAC;AAE/E,MAAM,MAAM,SAAS,GAAG,OAAO,SAAS,CAAC,IAAI,CAAC;AAE9C;;;GAGG;AACH,eAAO,MAAM,aAAa,2CAEzB,CAAC;AACF,MAAM,MAAM,aAAa,GAAG,OAAO,aAAa,CAAC,IAAI,CAAC;AAEtD,uGAAuG;AACvG,eAAO,MAAM,WAAW,4CAEW,CAAC;AACpC,MAAM,MAAM,WAAW,GAAG,OAAO,WAAW,CAAC,IAAI,CAAC;;;;;;;;;;;;AAElD,uFAAuF;AACvF,qBAAa,OAAQ,SAAQ,YAU3B;CAAG;AAEL;;;;GAIG;AACH,eAAO,MAAM,eAAe,YAAa;IACvC,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,eAAe,EAAE,aAAa,CAAC;CACzC,KAAG,OAA8F,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { Schema } from "effect";
|
|
2
|
+
import { BrainSpec, ModelId } from "../agent/brain.js";
|
|
3
|
+
import { RunId } from "../run/run.js";
|
|
4
|
+
import { StepName } from "../step/step.js";
|
|
5
|
+
import { WorkerName } from "../worker.js";
|
|
6
|
+
import { AttemptFailure, isAutoRetryableFailure } from "./failure.js";
|
|
7
|
+
import { AttemptOutcome } from "./outcome.js";
|
|
8
|
+
/** Identity of one execution try; each retry receives a new identity under the same Run and Step. */
|
|
9
|
+
export const AttemptId = Schema.NonEmptyString.pipe(Schema.brand("AttemptId"));
|
|
10
|
+
/**
|
|
11
|
+
* 1-based position of a try under its step. Retries are attempt N+1 under the
|
|
12
|
+
* same step, and the auto-retry cap counts total attempts.
|
|
13
|
+
*/
|
|
14
|
+
export const AttemptNumber = Schema.Int.check(Schema.isGreaterThanOrEqualTo(1)).pipe(Schema.brand("AttemptNumber"));
|
|
15
|
+
/** Task text given to the agent after loop interpolation or an operator's edit-and-retry amendment. */
|
|
16
|
+
export const AttemptTask = Schema.String.check(Schema.isPattern(/\S/u, { message: "Expected non-blank task text" })).pipe(Schema.brand("AttemptTask"));
|
|
17
|
+
/** One try of a step on a worker. `outcome` is none while the attempt is in flight. */
|
|
18
|
+
export class Attempt extends Schema.Class("Attempt")({
|
|
19
|
+
id: AttemptId,
|
|
20
|
+
runId: RunId,
|
|
21
|
+
stepName: StepName,
|
|
22
|
+
worker: WorkerName,
|
|
23
|
+
number: AttemptNumber,
|
|
24
|
+
brain: BrainSpec,
|
|
25
|
+
parentModel: Schema.OptionFromNullOr(ModelId),
|
|
26
|
+
startedAt: Schema.DateTimeUtc,
|
|
27
|
+
outcome: Schema.Option(AttemptOutcome),
|
|
28
|
+
}) {
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* The auto-retry law: only an infra failure retries, and only while the attempt
|
|
32
|
+
* number is below `maxAutoAttempts` (ADR 0002).
|
|
33
|
+
* `number` is the failed try's position; `maxAutoAttempts` includes the first try.
|
|
34
|
+
*/
|
|
35
|
+
export const shouldAutoRetry = (options) => isAutoRetryableFailure(options.failure) && options.number < options.maxAutoAttempts;
|
|
36
|
+
//# sourceMappingURL=attempt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attempt.js","sourceRoot":"","sources":["../../src/attempt/attempt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,qGAAqG;AACrG,MAAM,CAAC,MAAM,SAAS,GAAG,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;AAI/E;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAClF,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAC9B,CAAC;AAGF,uGAAuG;AACvG,MAAM,CAAC,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAC5C,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,8BAA8B,EAAE,CAAC,CACrE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC;AAGpC,uFAAuF;AACvF,MAAM,OAAO,OAAQ,SAAQ,MAAM,CAAC,KAAK,CAAU,SAAS,CAAC,CAAC;IAC5D,EAAE,EAAE,SAAS;IACb,KAAK,EAAE,KAAK;IACZ,QAAQ,EAAE,QAAQ;IAClB,MAAM,EAAE,UAAU;IAClB,MAAM,EAAE,aAAa;IACrB,KAAK,EAAE,SAAS;IAChB,WAAW,EAAE,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC;IAC7C,SAAS,EAAE,MAAM,CAAC,WAAW;IAC7B,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC;CACvC,CAAC;CAAG;AAEL;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,OAI/B,EAAW,EAAE,CAAC,sBAAsB,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC"}
|