@usine/core 0.3.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +661 -21
- package/README.md +43 -18
- package/dist/agent/agent.d.ts +12 -8
- package/dist/agent/agent.d.ts.map +1 -1
- package/dist/agent/agent.js +14 -10
- package/dist/agent/agent.js.map +1 -1
- package/dist/agent/brain.d.ts +2 -6
- package/dist/agent/brain.d.ts.map +1 -1
- package/dist/agent/brain.js +3 -7
- package/dist/agent/brain.js.map +1 -1
- package/dist/agent/capability.d.ts +4 -4
- package/dist/agent/capability.d.ts.map +1 -1
- package/dist/agent/capability.js +4 -4
- package/dist/agent/capability.js.map +1 -1
- package/dist/agent/session.d.ts +90 -28
- package/dist/agent/session.d.ts.map +1 -1
- package/dist/agent/session.js +103 -28
- package/dist/agent/session.js.map +1 -1
- package/dist/attempt/attempt.d.ts +92 -12
- package/dist/attempt/attempt.d.ts.map +1 -1
- package/dist/attempt/attempt.js +114 -13
- package/dist/attempt/attempt.js.map +1 -1
- package/dist/attempt/channel.d.ts +91 -51
- package/dist/attempt/channel.d.ts.map +1 -1
- package/dist/attempt/channel.js +74 -45
- package/dist/attempt/channel.js.map +1 -1
- package/dist/attempt/failure.d.ts +27 -14
- package/dist/attempt/failure.d.ts.map +1 -1
- package/dist/attempt/failure.js +27 -14
- package/dist/attempt/failure.js.map +1 -1
- package/dist/attempt/outcome.d.ts +3 -5
- package/dist/attempt/outcome.d.ts.map +1 -1
- package/dist/attempt/outcome.js +2 -4
- package/dist/attempt/outcome.js.map +1 -1
- package/dist/attempt/salvage.d.ts +77 -0
- package/dist/attempt/salvage.d.ts.map +1 -0
- package/dist/attempt/salvage.js +49 -0
- package/dist/attempt/salvage.js.map +1 -0
- package/dist/attempt/start.d.ts +35 -0
- package/dist/attempt/start.d.ts.map +1 -0
- package/dist/attempt/start.js +30 -0
- package/dist/attempt/start.js.map +1 -0
- package/dist/closed-struct.d.ts +7 -0
- package/dist/closed-struct.d.ts.map +1 -0
- package/dist/closed-struct.js +12 -0
- package/dist/closed-struct.js.map +1 -0
- package/dist/cycle-budget.d.ts +7 -8
- package/dist/cycle-budget.d.ts.map +1 -1
- package/dist/cycle-budget.js +16 -20
- package/dist/cycle-budget.js.map +1 -1
- package/dist/event.d.ts +4 -8
- package/dist/event.d.ts.map +1 -1
- package/dist/event.js +4 -8
- package/dist/event.js.map +1 -1
- package/dist/instance.d.ts +7 -1
- package/dist/instance.d.ts.map +1 -1
- package/dist/instance.js +6 -1
- package/dist/instance.js.map +1 -1
- package/dist/item.d.ts +1 -2
- package/dist/item.d.ts.map +1 -1
- package/dist/item.js +1 -2
- package/dist/item.js.map +1 -1
- package/dist/loop.d.ts +10 -2
- package/dist/loop.d.ts.map +1 -1
- package/dist/loop.js +9 -2
- package/dist/loop.js.map +1 -1
- package/dist/operator.d.ts +8 -0
- package/dist/operator.d.ts.map +1 -0
- package/dist/operator.js +9 -0
- package/dist/operator.js.map +1 -0
- package/dist/repository.d.ts +6 -8
- package/dist/repository.d.ts.map +1 -1
- package/dist/repository.js +8 -10
- package/dist/repository.js.map +1 -1
- package/dist/run/again.d.ts +13 -0
- package/dist/run/again.d.ts.map +1 -0
- package/dist/run/again.js +14 -0
- package/dist/run/again.js.map +1 -0
- package/dist/run/approval.d.ts +27 -0
- package/dist/run/approval.d.ts.map +1 -0
- package/dist/run/approval.js +25 -0
- package/dist/run/approval.js.map +1 -0
- package/dist/run/run.d.ts +2 -2
- package/dist/run/run.d.ts.map +1 -1
- package/dist/run/run.js +2 -2
- package/dist/run/run.js.map +1 -1
- package/dist/run/state.d.ts +22 -31
- package/dist/run/state.d.ts.map +1 -1
- package/dist/run/state.js +23 -36
- package/dist/run/state.js.map +1 -1
- package/dist/step/harvest.d.ts +44 -0
- package/dist/step/harvest.d.ts.map +1 -0
- package/dist/step/harvest.js +368 -0
- package/dist/step/harvest.js.map +1 -0
- package/dist/step/result.d.ts +15 -4
- package/dist/step/result.d.ts.map +1 -1
- package/dist/step/result.js +14 -4
- package/dist/step/result.js.map +1 -1
- package/dist/step/step.d.ts +2 -8
- package/dist/step/step.d.ts.map +1 -1
- package/dist/step/step.js +2 -8
- package/dist/step/step.js.map +1 -1
- package/dist/worker.d.ts +160 -4
- package/dist/worker.d.ts.map +1 -1
- package/dist/worker.js +171 -4
- package/dist/worker.js.map +1 -1
- package/package.json +32 -7
package/dist/agent/session.js
CHANGED
|
@@ -1,54 +1,64 @@
|
|
|
1
|
-
import { Effect, Option, Schema } from "effect";
|
|
1
|
+
import { Effect, Match, Option, Schema } from "effect";
|
|
2
|
+
import { GatewayCredentialKind } from "../worker.js";
|
|
2
3
|
import { AgentName } from "./agent.js";
|
|
3
4
|
import { BrainSpec } from "./brain.js";
|
|
4
|
-
/**
|
|
5
|
+
/** The usine ID of a parent or child session, distinct from `HarnessSessionId`. */
|
|
5
6
|
export const AgentSessionId = Schema.NonEmptyString.pipe(Schema.brand("AgentSessionId"));
|
|
6
|
-
/**
|
|
7
|
+
/** The sum of output tokens and uncached input tokens (new prompt text and cache writes), excluding cache reads. */
|
|
7
8
|
export const TokenCount = Schema.Int.check(Schema.isGreaterThanOrEqualTo(0)).pipe(Schema.brand("TokenCount"));
|
|
8
9
|
const PositiveInt = Schema.Int.check(Schema.isGreaterThanOrEqualTo(1));
|
|
9
|
-
/**
|
|
10
|
+
/** The maximum number of child sessions per Attempt, counting sequential spawns. */
|
|
10
11
|
export const ChildSessionBudget = PositiveInt.pipe(Schema.brand("ChildSessionBudget"));
|
|
11
|
-
/** The 1-based child spawn request
|
|
12
|
+
/** The 1-based number of a child spawn request in an Attempt, counting requests the budget rejected. */
|
|
12
13
|
export const ChildSessionCount = PositiveInt.pipe(Schema.brand("ChildSessionCount"));
|
|
13
|
-
/** The session coordinating an Attempt and delegating work to its coding children. */
|
|
14
14
|
export class ParentSession extends Schema.TaggedClass("Agent/ParentSession")("ParentSession", {
|
|
15
15
|
id: AgentSessionId,
|
|
16
16
|
agent: AgentName,
|
|
17
17
|
brain: BrainSpec,
|
|
18
18
|
}) {
|
|
19
19
|
}
|
|
20
|
-
/** A
|
|
20
|
+
/** A session spawned by the parent session; a child can't spawn children. */
|
|
21
21
|
export class ChildSession extends Schema.TaggedClass("Agent/ChildSession")("ChildSession", {
|
|
22
22
|
id: AgentSessionId,
|
|
23
23
|
parentId: AgentSessionId,
|
|
24
24
|
agent: AgentName,
|
|
25
25
|
brain: BrainSpec,
|
|
26
|
+
/**
|
|
27
|
+
* The credential kind the Gateway (ADR 0027) or a Cloudflare Worker's outbound handler used
|
|
28
|
+
* for the child's model requests, or `None` if the child used its harness's own login or the
|
|
29
|
+
* record is older.
|
|
30
|
+
*/
|
|
31
|
+
gatewayCredential: Schema.OptionFromOptionalKey(GatewayCredentialKind).pipe(Schema.withConstructorDefault(Effect.succeed(Option.none()))),
|
|
26
32
|
}) {
|
|
27
33
|
}
|
|
28
|
-
/** A participant in an Attempt, with its role, Agent, and effective brain recorded. */
|
|
29
34
|
export const AgentSession = Schema.Union([ParentSession, ChildSession]);
|
|
30
|
-
/** The
|
|
35
|
+
/** The harness's ID for its saved conversation, distinct from `AgentSessionId`. */
|
|
31
36
|
export const HarnessSessionId = Schema.NonEmptyString.pipe(Schema.brand("HarnessSessionId"));
|
|
32
|
-
/** A saved harness conversation
|
|
37
|
+
/** A saved harness conversation; `cwd` is the Worker checkout to resume it from. */
|
|
33
38
|
export class HarnessSession extends Schema.Class("Agent/HarnessSession")({
|
|
34
39
|
id: HarnessSessionId,
|
|
35
40
|
cwd: Schema.NonEmptyString,
|
|
41
|
+
/**
|
|
42
|
+
* The directory the harness saved the conversation in, if the Attempt set one in place of the
|
|
43
|
+
* harness's default: Codex's `CODEX_HOME`. `None` for the default or an older record.
|
|
44
|
+
*/
|
|
45
|
+
home: Schema.OptionFromOptionalKey(Schema.NonEmptyString).pipe(Schema.withConstructorDefault(Effect.succeed(Option.none()))),
|
|
36
46
|
}) {
|
|
37
47
|
}
|
|
38
|
-
/**
|
|
48
|
+
/** The session identity and the brain selected at launch. */
|
|
39
49
|
export class SessionStarted extends Schema.TaggedClass("Agent/SessionStarted")("SessionStarted", {
|
|
40
50
|
session: AgentSession,
|
|
41
|
-
/**
|
|
51
|
+
/** `None` for older transcripts and for harnesses without a saved conversation. */
|
|
42
52
|
harnessSession: Schema.OptionFromOptionalKey(HarnessSession).pipe(Schema.withConstructorDefault(Effect.succeed(Option.none()))),
|
|
43
53
|
}) {
|
|
44
54
|
}
|
|
45
|
-
/** Completed assistant text
|
|
55
|
+
/** Completed assistant text, which can come before the final result. */
|
|
46
56
|
export class TextOutput extends Schema.TaggedClass("Agent/TextOutput")("TextOutput", {
|
|
47
57
|
session: AgentSession,
|
|
48
58
|
text: Schema.NonEmptyString,
|
|
49
59
|
}) {
|
|
50
60
|
}
|
|
51
|
-
/**
|
|
61
|
+
/** The start of a tool call; `callId` matches the corresponding `ToolFinished`. */
|
|
52
62
|
export class ToolStarted extends Schema.TaggedClass("Agent/ToolStarted")("ToolStarted", {
|
|
53
63
|
session: AgentSession,
|
|
54
64
|
callId: Schema.NonEmptyString,
|
|
@@ -56,7 +66,7 @@ export class ToolStarted extends Schema.TaggedClass("Agent/ToolStarted")("ToolSt
|
|
|
56
66
|
input: Schema.Json,
|
|
57
67
|
}) {
|
|
58
68
|
}
|
|
59
|
-
/**
|
|
69
|
+
/** The result of a tool call; `isError` doesn't end the session. */
|
|
60
70
|
export class ToolFinished extends Schema.TaggedClass("Agent/ToolFinished")("ToolFinished", {
|
|
61
71
|
session: AgentSession,
|
|
62
72
|
callId: Schema.NonEmptyString,
|
|
@@ -65,31 +75,74 @@ export class ToolFinished extends Schema.TaggedClass("Agent/ToolFinished")("Tool
|
|
|
65
75
|
isError: Schema.Boolean,
|
|
66
76
|
}) {
|
|
67
77
|
}
|
|
68
|
-
/**
|
|
78
|
+
/** The end of a session's activity; the Attempt's outcome is recorded separately. */
|
|
69
79
|
export class SessionFinished extends Schema.TaggedClass("Agent/SessionFinished")("SessionFinished", { session: AgentSession }) {
|
|
70
80
|
}
|
|
71
|
-
/** A supervised session finished a turn and
|
|
81
|
+
/** A supervised session that finished a turn and accepts more operator messages. */
|
|
72
82
|
export class SessionIdle extends Schema.TaggedClass("Agent/SessionIdle")("SessionIdle", { session: AgentSession }) {
|
|
73
83
|
}
|
|
74
|
-
/** A live session
|
|
84
|
+
/** A live session that started another user turn in the same conversation. */
|
|
75
85
|
export class SessionResumed extends Schema.TaggedClass("Agent/SessionResumed")("SessionResumed", { session: AgentSession }) {
|
|
76
86
|
}
|
|
77
|
-
/**
|
|
78
|
-
export
|
|
87
|
+
/** An estimated amount in US dollars from a rate table, not a bill (ADR 0013). */
|
|
88
|
+
export const UsdAmount = Schema.Finite.check(Schema.isGreaterThanOrEqualTo(0)).pipe(Schema.brand("UsdAmount"));
|
|
89
|
+
const TokenTally = Schema.Int.check(Schema.isGreaterThanOrEqualTo(0));
|
|
90
|
+
/** A session's cumulative tokens per billing rate; each token counts in one field only. */
|
|
91
|
+
export class TokenBreakdown extends Schema.Class("Agent/TokenBreakdown")({
|
|
92
|
+
/** Input tokens that are neither read from nor written to the prompt cache. */
|
|
93
|
+
input: TokenTally,
|
|
94
|
+
/** Input tokens read from the prompt cache. */
|
|
95
|
+
cachedInput: TokenTally,
|
|
96
|
+
/** Input tokens written to the prompt cache. */
|
|
97
|
+
cacheWrite: TokenTally,
|
|
98
|
+
/** Output tokens, including reasoning tokens. */
|
|
99
|
+
output: TokenTally,
|
|
100
|
+
}) {
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* The session's cumulative token count and price, including later operator turns. `costUsd` is
|
|
104
|
+
* `None` for harnesses that don't price usage, such as Codex, and for older transcripts.
|
|
105
|
+
* `breakdown` is `None` for harnesses other than Codex and for older transcripts.
|
|
106
|
+
*/
|
|
107
|
+
export class SessionTokensUpdated extends Schema.TaggedClass("Agent/SessionTokensUpdated")("SessionTokensUpdated", {
|
|
108
|
+
session: AgentSession,
|
|
109
|
+
totalTokens: TokenCount,
|
|
110
|
+
costUsd: Schema.OptionFromOptionalKey(UsdAmount).pipe(Schema.withConstructorDefault(Effect.succeed(Option.none()))),
|
|
111
|
+
breakdown: Schema.OptionFromOptionalKey(TokenBreakdown).pipe(Schema.withConstructorDefault(Effect.succeed(Option.none()))),
|
|
112
|
+
}) {
|
|
79
113
|
}
|
|
80
|
-
/** The billing source whose meter produced a usage or rate-limit observation. */
|
|
81
114
|
export const BillingPool = Schema.Literals(["apiKeys", "claudePlan", "chatgptPlan"]);
|
|
82
|
-
/**
|
|
115
|
+
/**
|
|
116
|
+
* Returns the billing pool of a session with `brain` and the kind of the credential that a
|
|
117
|
+
* Gateway or a Cloudflare Worker's outbound handler injects, if any.
|
|
118
|
+
*
|
|
119
|
+
* - Claude Code: `apiKeys` if an API key is injected, otherwise `claudePlan` (ADR 0013).
|
|
120
|
+
* - Codex: `apiKeys` if an API key is injected, otherwise `chatgptPlan`.
|
|
121
|
+
* - Pi: `chatgptPlan` for `openai-codex/` models, otherwise `apiKeys` (ADR 0021).
|
|
122
|
+
*/
|
|
123
|
+
export const brainPool = (brain, gatewayCredential) => {
|
|
124
|
+
switch (brain.harness) {
|
|
125
|
+
case "claude":
|
|
126
|
+
return Option.contains(gatewayCredential, "api-key") ? "apiKeys" : "claudePlan";
|
|
127
|
+
case "codex":
|
|
128
|
+
return Option.contains(gatewayCredential, "api-key") ? "apiKeys" : "chatgptPlan";
|
|
129
|
+
case "pi":
|
|
130
|
+
return brain.model.startsWith("openai-codex/") ? "chatgptPlan" : "apiKeys";
|
|
131
|
+
}
|
|
132
|
+
};
|
|
133
|
+
/** Returns the billing pool of a recorded session; the parent never uses a Gateway credential. */
|
|
134
|
+
export const sessionPool = (session) => Match.valueTags(session, {
|
|
135
|
+
ParentSession: ({ brain }) => brainPool(brain, Option.none()),
|
|
136
|
+
ChildSession: ({ brain, gatewayCredential }) => brainPool(brain, gatewayCredential),
|
|
137
|
+
});
|
|
83
138
|
export class RateLimitWindow extends Schema.Class("Agent/RateLimitWindow")({
|
|
84
|
-
/**
|
|
139
|
+
/** The percentage of the allowance used, including usage outside this Attempt. */
|
|
85
140
|
usedPercent: Schema.Number,
|
|
86
|
-
/** Length of the allowance window; absent when the provider omits it. */
|
|
87
141
|
windowDurationMinutes: Schema.OptionFromNullOr(Schema.Number),
|
|
88
|
-
/** When the allowance resets; absent when the provider omits it. */
|
|
89
142
|
resetsAt: Schema.OptionFromNullOr(Schema.DateTimeUtcFromString),
|
|
90
143
|
}) {
|
|
91
144
|
}
|
|
92
|
-
/** The
|
|
145
|
+
/** The rate-limit windows from one provider report; a window is `None` if not reported. */
|
|
93
146
|
export class RateLimitsSnapshot extends Schema.Class("Agent/RateLimitsSnapshot")({
|
|
94
147
|
limitId: Schema.OptionFromNullOr(Schema.String),
|
|
95
148
|
limitName: Schema.OptionFromNullOr(Schema.String),
|
|
@@ -97,14 +150,34 @@ export class RateLimitsSnapshot extends Schema.Class("Agent/RateLimitsSnapshot")
|
|
|
97
150
|
secondary: Schema.OptionFromNullOr(RateLimitWindow),
|
|
98
151
|
}) {
|
|
99
152
|
}
|
|
100
|
-
/** The latest rate windows observed for
|
|
153
|
+
/** The latest rate-limit windows observed for `pool` during the session. */
|
|
101
154
|
export class PoolRateLimitsUpdated extends Schema.TaggedClass("Agent/PoolRateLimitsUpdated")("PoolRateLimitsUpdated", {
|
|
102
155
|
session: AgentSession,
|
|
103
156
|
pool: BillingPool,
|
|
104
157
|
rateLimits: RateLimitsSnapshot,
|
|
105
158
|
}) {
|
|
106
159
|
}
|
|
107
|
-
/**
|
|
160
|
+
/** The number of model provider retries in the current turn, starting at 1. */
|
|
161
|
+
export const ProviderRetries = PositiveInt.pipe(Schema.brand("ProviderRetries"));
|
|
162
|
+
/**
|
|
163
|
+
* A harness report of a failed model provider request that it retries, such as Codex's
|
|
164
|
+
* `Reconnecting...`. The session isn't stopped or failed (ADR 0013).
|
|
165
|
+
*/
|
|
166
|
+
export class ProviderRetrying extends Schema.TaggedClass("Agent/ProviderRetrying")("ProviderRetrying", {
|
|
167
|
+
session: AgentSession,
|
|
168
|
+
/** The harness's failure message, verbatim if it provides one. */
|
|
169
|
+
message: Schema.NonEmptyString,
|
|
170
|
+
/** The retries reported in the current turn, including this one. */
|
|
171
|
+
retries: ProviderRetries,
|
|
172
|
+
}) {
|
|
173
|
+
}
|
|
174
|
+
/** A model provider response after a `ProviderRetrying` in the same turn. */
|
|
175
|
+
export class ProviderRecovered extends Schema.TaggedClass("Agent/ProviderRecovered")("ProviderRecovered", {
|
|
176
|
+
session: AgentSession,
|
|
177
|
+
/** The retries in the turn before the response. */
|
|
178
|
+
retries: ProviderRetries,
|
|
179
|
+
}) {
|
|
180
|
+
}
|
|
108
181
|
export const AgentSessionEvent = Schema.Union([
|
|
109
182
|
SessionStarted,
|
|
110
183
|
TextOutput,
|
|
@@ -115,5 +188,7 @@ export const AgentSessionEvent = Schema.Union([
|
|
|
115
188
|
SessionIdle,
|
|
116
189
|
SessionResumed,
|
|
117
190
|
SessionTokensUpdated,
|
|
191
|
+
ProviderRetrying,
|
|
192
|
+
ProviderRecovered,
|
|
118
193
|
]);
|
|
119
194
|
//# sourceMappingURL=session.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/agent/session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/agent/session.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,27 +1,61 @@
|
|
|
1
|
-
import { Schema } from "effect";
|
|
1
|
+
import { Array as EffectArray, DateTime, Option, Schema } from "effect";
|
|
2
2
|
import { Agent } from "../agent/agent.ts";
|
|
3
3
|
import { BrainSpec } from "../agent/brain.ts";
|
|
4
|
+
import { Comment } from "../step/result.ts";
|
|
4
5
|
import { AttemptFailure } from "./failure.ts";
|
|
5
|
-
/**
|
|
6
|
+
/** The ID of an Attempt; each retry gets a new ID under the same Run and Step. */
|
|
6
7
|
export declare const AttemptId: Schema.brand<Schema.NonEmptyString, "AttemptId">;
|
|
7
8
|
export type AttemptId = typeof AttemptId.Type;
|
|
8
|
-
/**
|
|
9
|
-
* 1-based position of a try under its step. Retries are attempt N+1 under the
|
|
10
|
-
* same step, and the auto-retry cap counts total attempts.
|
|
11
|
-
*/
|
|
9
|
+
/** The 1-based position of the Attempt in its Step. */
|
|
12
10
|
export declare const AttemptNumber: Schema.brand<Schema.Int, "AttemptNumber">;
|
|
13
11
|
export type AttemptNumber = typeof AttemptNumber.Type;
|
|
14
|
-
/**
|
|
12
|
+
/** The task text for the agent: the interpolated loop prompt or the operator's edit-and-retry text. */
|
|
15
13
|
export declare const AttemptTask: Schema.brand<Schema.String, "AttemptTask">;
|
|
16
14
|
export type AttemptTask = typeof AttemptTask.Type;
|
|
15
|
+
/**
|
|
16
|
+
* Why the engine stops an Attempt's parent task: the operator canceled the Attempt (`cancel`), the
|
|
17
|
+
* Attempt failed (`failed`), or startup found the Attempt closed or not reattached (`startup`).
|
|
18
|
+
*/
|
|
19
|
+
export declare const StopReason: Schema.Literals<readonly ["cancel", "failed", "startup"]>;
|
|
20
|
+
export type StopReason = typeof StopReason.Type;
|
|
17
21
|
declare const AttemptContext_base: Schema.Class<AttemptContext, Schema.Struct<{
|
|
18
22
|
readonly task: Schema.brand<Schema.String, "AttemptTask">;
|
|
19
23
|
readonly agent: typeof Agent;
|
|
20
24
|
readonly parentModel: Schema.OptionFromNullOr<Schema.brand<Schema.String, "ModelId">>;
|
|
21
25
|
}>, {}>;
|
|
22
|
-
/** The
|
|
26
|
+
/** The task and Agent that an operator sets for a Run's later Attempts. */
|
|
23
27
|
export declare class AttemptContext extends AttemptContext_base {
|
|
24
28
|
}
|
|
29
|
+
declare const FailureResolution_base: Schema.Class<FailureResolution, Schema.Struct<{
|
|
30
|
+
readonly resolvedAt: Schema.DateTimeUtcFromString;
|
|
31
|
+
readonly operator: Schema.OptionFromNullOr<Schema.brand<Schema.String, "OperatorLogin">>;
|
|
32
|
+
}>, {}>;
|
|
33
|
+
/** An operator's resolution of a failed attempt; the login is absent if none is configured. */
|
|
34
|
+
export declare class FailureResolution extends FailureResolution_base {
|
|
35
|
+
}
|
|
36
|
+
declare const OutOfMemoryKills_base: Schema.Class<OutOfMemoryKills, Schema.Struct<{
|
|
37
|
+
readonly kills: Schema.Int;
|
|
38
|
+
readonly memoryMib: Schema.brand<Schema.Int, "ContainerMemoryMib">;
|
|
39
|
+
}>, {}>;
|
|
40
|
+
/**
|
|
41
|
+
* The processes that the kernel killed in an Attempt's containers because a container reached
|
|
42
|
+
* its memory limit, `memoryMib`: the limit of the last container that recorded kills.
|
|
43
|
+
*/
|
|
44
|
+
export declare class OutOfMemoryKills extends OutOfMemoryKills_base {
|
|
45
|
+
}
|
|
46
|
+
declare const ContainerOutOfMemoryKills_base: Schema.Class<ContainerOutOfMemoryKills, Schema.Struct<{
|
|
47
|
+
readonly container: Schema.brand<Schema.String, "ContainerId">;
|
|
48
|
+
readonly kills: Schema.Int;
|
|
49
|
+
readonly memoryMib: Schema.brand<Schema.Int, "ContainerMemoryMib">;
|
|
50
|
+
}>, {}>;
|
|
51
|
+
/**
|
|
52
|
+
* The processes that the kernel killed in one of an Attempt's containers, `container`, because it
|
|
53
|
+
* reached its memory limit, `memoryMib`. A reattachment runs the Attempt in a new container.
|
|
54
|
+
*/
|
|
55
|
+
export declare class ContainerOutOfMemoryKills extends ContainerOutOfMemoryKills_base {
|
|
56
|
+
}
|
|
57
|
+
/** Returns the kills in `containers` together, with the memory limit of the last one. */
|
|
58
|
+
export declare const totalOutOfMemoryKills: (containers: EffectArray.NonEmptyReadonlyArray<ContainerOutOfMemoryKills>) => OutOfMemoryKills;
|
|
25
59
|
declare const Attempt_base: Schema.Class<Attempt, Schema.Struct<{
|
|
26
60
|
readonly id: Schema.brand<Schema.NonEmptyString, "AttemptId">;
|
|
27
61
|
readonly runId: Schema.brand<Schema.NonEmptyString, "RunId">;
|
|
@@ -35,14 +69,60 @@ declare const Attempt_base: Schema.Class<Attempt, Schema.Struct<{
|
|
|
35
69
|
readonly parentModel: Schema.OptionFromNullOr<Schema.brand<Schema.String, "ModelId">>;
|
|
36
70
|
readonly startedAt: Schema.DateTimeUtc;
|
|
37
71
|
readonly outcome: Schema.Option<Schema.Union<readonly [typeof import("./outcome.ts").AttemptSucceeded, typeof import("./outcome.ts").AttemptFailed, typeof import("./outcome.ts").AttemptCanceled]>>;
|
|
72
|
+
readonly endedAt: Schema.Option<Schema.DateTimeUtc>;
|
|
73
|
+
readonly salvage: Schema.Option<Schema.Union<readonly [typeof import("./salvage.ts").SalvagePushed, typeof import("./salvage.ts").SalvagePartlyPushed, typeof import("./salvage.ts").SalvageRetained, typeof import("./salvage.ts").SalvageRejected]>>;
|
|
74
|
+
readonly failureResolution: Schema.withConstructorDefault<Schema.Option<typeof FailureResolution>>;
|
|
75
|
+
readonly start: Schema.withConstructorDefault<Schema.Option<Schema.Union<readonly [typeof import("./start.ts").StartedByEvent, typeof import("./start.ts").StartedByRetry, typeof import("./start.ts").StartedByEditAndRetry, typeof import("./start.ts").StartedByInfraRetry, typeof import("./start.ts").StartedAfterRestart]>>>;
|
|
76
|
+
readonly reattachedAt: Schema.withConstructorDefault<Schema.Option<Schema.DateTimeUtc>>;
|
|
77
|
+
readonly comments: Schema.withConstructorDefault<Schema.$Array<typeof Comment>>;
|
|
78
|
+
readonly outOfMemory: Schema.withConstructorDefault<Schema.Option<typeof OutOfMemoryKills>>;
|
|
38
79
|
}>, {}>;
|
|
39
|
-
/**
|
|
80
|
+
/**
|
|
81
|
+
* One try of a Step on a Worker.
|
|
82
|
+
*
|
|
83
|
+
* - `outcome`: `None` while the Attempt runs.
|
|
84
|
+
* - `endedAt`: the time the outcome was recorded; `None` while running and for older records.
|
|
85
|
+
* - `salvage`: what the executor kept of the workspace after an unsuccessful end.
|
|
86
|
+
* - `start`: the reason the Attempt started; `None` for older records.
|
|
87
|
+
* - `reattachedAt`: the last time an orchestrator restart reattached the Attempt.
|
|
88
|
+
* - `comments`: the comments and reviews posted by an unsuccessful Attempt; a successful
|
|
89
|
+
* Attempt's are in the Step result.
|
|
90
|
+
* - `outOfMemory`: the processes the kernel killed in the Attempt's containers for memory, in all
|
|
91
|
+
* of them together; `None` if it killed none or the Attempt ran without a container.
|
|
92
|
+
*/
|
|
40
93
|
export declare class Attempt extends Attempt_base {
|
|
41
94
|
}
|
|
95
|
+
declare const AttemptWindow_base: Schema.Class<AttemptWindow, Schema.Struct<{
|
|
96
|
+
readonly attemptId: Schema.brand<Schema.NonEmptyString, "AttemptId">;
|
|
97
|
+
readonly startedAt: Schema.DateTimeUtc;
|
|
98
|
+
readonly endedAt: Schema.Option<Schema.DateTimeUtc>;
|
|
99
|
+
}>, {}>;
|
|
100
|
+
/**
|
|
101
|
+
* The time span of an Attempt, open while `endedAt` is `None`, used to attribute GitHub writes
|
|
102
|
+
* by Attempts that share one App login.
|
|
103
|
+
*/
|
|
104
|
+
export declare class AttemptWindow extends AttemptWindow_base {
|
|
105
|
+
}
|
|
106
|
+
/** Returns the Attempt's window, or `None` if it ended before end times were recorded. */
|
|
107
|
+
export declare const windowOf: (attempt: Attempt) => Option.Option<AttemptWindow>;
|
|
108
|
+
/** Returns whether the GitHub timestamp `at` is inside `window`. */
|
|
109
|
+
export declare const windowHolds: (window: AttemptWindow, at: DateTime.Utc) => boolean;
|
|
110
|
+
/** Returns whether a GitHub timestamp can be inside both windows. */
|
|
111
|
+
export declare const windowsOverlap: (left: AttemptWindow, right: AttemptWindow) => boolean;
|
|
112
|
+
declare const AttemptWindows_base: Schema.Class<AttemptWindows, Schema.Struct<{
|
|
113
|
+
readonly own: Schema.Option<typeof AttemptWindow>;
|
|
114
|
+
readonly overlapping: Schema.$Array<typeof AttemptWindow>;
|
|
115
|
+
}>, {}>;
|
|
116
|
+
/**
|
|
117
|
+
* The windows used to attribute writes on a Run's Item to one Attempt. A write belongs to the
|
|
118
|
+
* Attempt only if its time is inside `own` and outside every `overlapping` window, which are the
|
|
119
|
+
* same Agent's other Attempts on the Item.
|
|
120
|
+
*/
|
|
121
|
+
export declare class AttemptWindows extends AttemptWindows_base {
|
|
122
|
+
}
|
|
42
123
|
/**
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
* `number` is the failed try's position; `maxAutoAttempts` includes the first try.
|
|
124
|
+
* Returns whether `failure` is retryable and the failed Attempt's `number` is below
|
|
125
|
+
* `maxAutoAttempts`, which counts the first try (ADR 0002).
|
|
46
126
|
*/
|
|
47
127
|
export declare const shouldAutoRetry: (options: {
|
|
48
128
|
readonly failure: AttemptFailure;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attempt.d.ts","sourceRoot":"","sources":["../../src/attempt/attempt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"attempt.d.ts","sourceRoot":"","sources":["../../src/attempt/attempt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,WAAW,EAAE,QAAQ,EAAU,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChF,OAAO,EAAE,KAAK,EAAa,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAW,MAAM,mBAAmB,CAAC;AAIvD,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAG5C,OAAO,EAAE,cAAc,EAA0B,MAAM,cAAc,CAAC;AAKtE,kFAAkF;AAClF,eAAO,MAAM,SAAS,kDAAwD,CAAC;AAE/E,MAAM,MAAM,SAAS,GAAG,OAAO,SAAS,CAAC,IAAI,CAAC;AAE9C,uDAAuD;AACvD,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;;;GAGG;AACH,eAAO,MAAM,UAAU,2DAAmD,CAAC;AAC3E,MAAM,MAAM,UAAU,GAAG,OAAO,UAAU,CAAC,IAAI,CAAC;;;;;;AAEhD,2EAA2E;AAC3E,qBAAa,cAAe,SAAQ,mBAIlC;CAAG;;;;;AAEL,+FAA+F;AAC/F,qBAAa,iBAAkB,SAAQ,sBAKtC;CAAG;;;;;AAIJ;;;GAGG;AACH,qBAAa,gBAAiB,SAAQ,qBAGpC;CAAG;;;;;;AAEL;;;GAGG;AACH,qBAAa,yBAA0B,SAAQ,8BAM7C;CAAG;AAEL,yFAAyF;AACzF,eAAO,MAAM,qBAAqB,eACpB,WAAW,CAAC,qBAAqB,CAAC,yBAAyB,CAAC,KACvE,gBAIC,CAAC;;;;;;;;;;;;;;;;;;;;;;AAEL;;;;;;;;;;;;GAYG;AACH,qBAAa,OAAQ,SAAQ,YA4B3B;CAAG;;;;;;AAEL;;;GAGG;AACH,qBAAa,aAAc,SAAQ,kBAIjC;CAAG;AAEL,0FAA0F;AAC1F,eAAO,MAAM,QAAQ,YAAa,OAAO,KAAG,MAAM,CAAC,MAAM,CAAC,aAAa,CAShE,CAAC;AAeR,oEAAoE;AACpE,eAAO,MAAM,WAAW,WAAY,aAAa,MAAM,QAAQ,CAAC,GAAG,KAAG,OAGrE,CAAC;AAEF,qEAAqE;AACrE,eAAO,MAAM,cAAc,SAAU,aAAa,SAAS,aAAa,KAAG,OACX,CAAC;;;;;AAEjE;;;;GAIG;AACH,qBAAa,cAAe,SAAQ,mBAGlC;CAAG;AAEL;;;GAGG;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"}
|
package/dist/attempt/attempt.js
CHANGED
|
@@ -1,28 +1,78 @@
|
|
|
1
|
-
import { Schema } from "effect";
|
|
1
|
+
import { Array as EffectArray, DateTime, Effect, Option, Schema } from "effect";
|
|
2
2
|
import { Agent, AgentName } from "../agent/agent.js";
|
|
3
3
|
import { BrainSpec, ModelId } from "../agent/brain.js";
|
|
4
|
+
import { closedStruct } from "../closed-struct.js";
|
|
5
|
+
import { OperatorLogin } from "../operator.js";
|
|
4
6
|
import { RunId } from "../run/run.js";
|
|
7
|
+
import { Comment } from "../step/result.js";
|
|
5
8
|
import { StepName } from "../step/step.js";
|
|
6
|
-
import { WorkerName } from "../worker.js";
|
|
9
|
+
import { ContainerId, ContainerMemoryMib, WorkerName } from "../worker.js";
|
|
7
10
|
import { AttemptFailure, isAutoRetryableFailure } from "./failure.js";
|
|
8
11
|
import { AttemptOutcome } from "./outcome.js";
|
|
9
|
-
|
|
12
|
+
import { AttemptSalvage } from "./salvage.js";
|
|
13
|
+
import { AttemptStart } from "./start.js";
|
|
14
|
+
/** The ID of an Attempt; each retry gets a new ID under the same Run and Step. */
|
|
10
15
|
export const AttemptId = Schema.NonEmptyString.pipe(Schema.brand("AttemptId"));
|
|
11
|
-
/**
|
|
12
|
-
* 1-based position of a try under its step. Retries are attempt N+1 under the
|
|
13
|
-
* same step, and the auto-retry cap counts total attempts.
|
|
14
|
-
*/
|
|
16
|
+
/** The 1-based position of the Attempt in its Step. */
|
|
15
17
|
export const AttemptNumber = Schema.Int.check(Schema.isGreaterThanOrEqualTo(1)).pipe(Schema.brand("AttemptNumber"));
|
|
16
|
-
/**
|
|
18
|
+
/** The task text for the agent: the interpolated loop prompt or the operator's edit-and-retry text. */
|
|
17
19
|
export const AttemptTask = Schema.String.check(Schema.isPattern(/\S/u, { message: "Expected non-blank task text" })).pipe(Schema.brand("AttemptTask"));
|
|
18
|
-
/**
|
|
20
|
+
/**
|
|
21
|
+
* Why the engine stops an Attempt's parent task: the operator canceled the Attempt (`cancel`), the
|
|
22
|
+
* Attempt failed (`failed`), or startup found the Attempt closed or not reattached (`startup`).
|
|
23
|
+
*/
|
|
24
|
+
export const StopReason = Schema.Literals(["cancel", "failed", "startup"]);
|
|
25
|
+
/** The task and Agent that an operator sets for a Run's later Attempts. */
|
|
19
26
|
export class AttemptContext extends Schema.Class("AttemptContext")({
|
|
20
27
|
task: AttemptTask,
|
|
21
28
|
agent: Agent,
|
|
22
29
|
parentModel: Schema.OptionFromNullOr(ModelId),
|
|
23
30
|
}) {
|
|
24
31
|
}
|
|
25
|
-
/**
|
|
32
|
+
/** An operator's resolution of a failed attempt; the login is absent if none is configured. */
|
|
33
|
+
export class FailureResolution extends Schema.Class("FailureResolution")(closedStruct({
|
|
34
|
+
resolvedAt: Schema.DateTimeUtcFromString,
|
|
35
|
+
operator: Schema.OptionFromNullOr(OperatorLogin),
|
|
36
|
+
})) {
|
|
37
|
+
}
|
|
38
|
+
const Kills = Schema.Int.check(Schema.isGreaterThanOrEqualTo(1));
|
|
39
|
+
/**
|
|
40
|
+
* The processes that the kernel killed in an Attempt's containers because a container reached
|
|
41
|
+
* its memory limit, `memoryMib`: the limit of the last container that recorded kills.
|
|
42
|
+
*/
|
|
43
|
+
export class OutOfMemoryKills extends Schema.Class("OutOfMemoryKills")({
|
|
44
|
+
kills: Kills,
|
|
45
|
+
memoryMib: ContainerMemoryMib,
|
|
46
|
+
}) {
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* The processes that the kernel killed in one of an Attempt's containers, `container`, because it
|
|
50
|
+
* reached its memory limit, `memoryMib`. A reattachment runs the Attempt in a new container.
|
|
51
|
+
*/
|
|
52
|
+
export class ContainerOutOfMemoryKills extends Schema.Class("ContainerOutOfMemoryKills")({
|
|
53
|
+
container: ContainerId,
|
|
54
|
+
kills: Kills,
|
|
55
|
+
memoryMib: ContainerMemoryMib,
|
|
56
|
+
}) {
|
|
57
|
+
}
|
|
58
|
+
/** Returns the kills in `containers` together, with the memory limit of the last one. */
|
|
59
|
+
export const totalOutOfMemoryKills = (containers) => new OutOfMemoryKills({
|
|
60
|
+
kills: containers.reduce((total, { kills }) => total + kills, 0),
|
|
61
|
+
memoryMib: EffectArray.lastNonEmpty(containers).memoryMib,
|
|
62
|
+
});
|
|
63
|
+
/**
|
|
64
|
+
* One try of a Step on a Worker.
|
|
65
|
+
*
|
|
66
|
+
* - `outcome`: `None` while the Attempt runs.
|
|
67
|
+
* - `endedAt`: the time the outcome was recorded; `None` while running and for older records.
|
|
68
|
+
* - `salvage`: what the executor kept of the workspace after an unsuccessful end.
|
|
69
|
+
* - `start`: the reason the Attempt started; `None` for older records.
|
|
70
|
+
* - `reattachedAt`: the last time an orchestrator restart reattached the Attempt.
|
|
71
|
+
* - `comments`: the comments and reviews posted by an unsuccessful Attempt; a successful
|
|
72
|
+
* Attempt's are in the Step result.
|
|
73
|
+
* - `outOfMemory`: the processes the kernel killed in the Attempt's containers for memory, in all
|
|
74
|
+
* of them together; `None` if it killed none or the Attempt ran without a container.
|
|
75
|
+
*/
|
|
26
76
|
export class Attempt extends Schema.Class("Attempt")({
|
|
27
77
|
id: AttemptId,
|
|
28
78
|
runId: RunId,
|
|
@@ -36,12 +86,63 @@ export class Attempt extends Schema.Class("Attempt")({
|
|
|
36
86
|
parentModel: Schema.OptionFromNullOr(ModelId),
|
|
37
87
|
startedAt: Schema.DateTimeUtc,
|
|
38
88
|
outcome: Schema.Option(AttemptOutcome),
|
|
89
|
+
endedAt: Schema.Option(Schema.DateTimeUtc),
|
|
90
|
+
salvage: Schema.Option(AttemptSalvage),
|
|
91
|
+
failureResolution: Schema.Option(FailureResolution).pipe(Schema.withConstructorDefault(Effect.succeed(Option.none()))),
|
|
92
|
+
start: Schema.Option(AttemptStart).pipe(Schema.withConstructorDefault(Effect.succeed(Option.none()))),
|
|
93
|
+
reattachedAt: Schema.Option(Schema.DateTimeUtc).pipe(Schema.withConstructorDefault(Effect.succeed(Option.none()))),
|
|
94
|
+
comments: Schema.Array(Comment).pipe(Schema.withConstructorDefault(Effect.succeed([]))),
|
|
95
|
+
outOfMemory: Schema.Option(OutOfMemoryKills).pipe(Schema.withConstructorDefault(Effect.succeed(Option.none()))),
|
|
96
|
+
}) {
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* The time span of an Attempt, open while `endedAt` is `None`, used to attribute GitHub writes
|
|
100
|
+
* by Attempts that share one App login.
|
|
101
|
+
*/
|
|
102
|
+
export class AttemptWindow extends Schema.Class("AttemptWindow")({
|
|
103
|
+
attemptId: AttemptId,
|
|
104
|
+
startedAt: Schema.DateTimeUtc,
|
|
105
|
+
endedAt: Schema.Option(Schema.DateTimeUtc),
|
|
106
|
+
}) {
|
|
107
|
+
}
|
|
108
|
+
/** Returns the Attempt's window, or `None` if it ended before end times were recorded. */
|
|
109
|
+
export const windowOf = (attempt) => Option.isSome(attempt.outcome) && Option.isNone(attempt.endedAt)
|
|
110
|
+
? Option.none()
|
|
111
|
+
: Option.some(new AttemptWindow({
|
|
112
|
+
attemptId: attempt.id,
|
|
113
|
+
startedAt: attempt.startedAt,
|
|
114
|
+
endedAt: attempt.endedAt,
|
|
115
|
+
}));
|
|
116
|
+
/** Returns the window start truncated to the second, the precision of GitHub timestamps. */
|
|
117
|
+
const opening = (window) => {
|
|
118
|
+
const start = DateTime.toEpochMillis(window.startedAt);
|
|
119
|
+
return start - (start % 1_000);
|
|
120
|
+
};
|
|
121
|
+
/** Returns whether `window` is open or ended at or after `millis`. */
|
|
122
|
+
const reaches = (window, millis) => Option.match(window.endedAt, {
|
|
123
|
+
onNone: () => true,
|
|
124
|
+
onSome: (end) => millis <= DateTime.toEpochMillis(end),
|
|
125
|
+
});
|
|
126
|
+
/** Returns whether the GitHub timestamp `at` is inside `window`. */
|
|
127
|
+
export const windowHolds = (window, at) => {
|
|
128
|
+
const time = DateTime.toEpochMillis(at);
|
|
129
|
+
return opening(window) <= time && reaches(window, time);
|
|
130
|
+
};
|
|
131
|
+
/** Returns whether a GitHub timestamp can be inside both windows. */
|
|
132
|
+
export const windowsOverlap = (left, right) => reaches(left, opening(right)) && reaches(right, opening(left));
|
|
133
|
+
/**
|
|
134
|
+
* The windows used to attribute writes on a Run's Item to one Attempt. A write belongs to the
|
|
135
|
+
* Attempt only if its time is inside `own` and outside every `overlapping` window, which are the
|
|
136
|
+
* same Agent's other Attempts on the Item.
|
|
137
|
+
*/
|
|
138
|
+
export class AttemptWindows extends Schema.Class("AttemptWindows")({
|
|
139
|
+
own: Schema.Option(AttemptWindow),
|
|
140
|
+
overlapping: Schema.Array(AttemptWindow),
|
|
39
141
|
}) {
|
|
40
142
|
}
|
|
41
143
|
/**
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
* `number` is the failed try's position; `maxAutoAttempts` includes the first try.
|
|
144
|
+
* Returns whether `failure` is retryable and the failed Attempt's `number` is below
|
|
145
|
+
* `maxAutoAttempts`, which counts the first try (ADR 0002).
|
|
45
146
|
*/
|
|
46
147
|
export const shouldAutoRetry = (options) => isAutoRetryableFailure(options.failure) && options.number < options.maxAutoAttempts;
|
|
47
148
|
//# sourceMappingURL=attempt.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attempt.js","sourceRoot":"","sources":["../../src/attempt/attempt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"attempt.js","sourceRoot":"","sources":["../../src/attempt/attempt.ts"],"names":[],"mappings":"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"}
|