@kitman-sh/sdk 0.8.0 → 0.10.52
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/dist/build/index.js +531 -116
- package/dist/{chunk-36jhc745.js → chunk-tcbgb4wm.js} +1841 -1574
- package/dist/{chunk-160ww64c.js → chunk-zvzw3zs4.js} +939 -535
- package/dist/loop/index.js +117 -3
- package/dist/program/index.js +10 -6
- package/package.json +6 -6
- package/types/packages/core/src/agent-capabilities.d.ts +6 -0
- package/types/packages/core/src/agent-environment.d.ts +32 -216
- package/types/packages/core/src/agent-sandbox-policy.d.ts +17 -3
- package/types/packages/core/src/change-request-review.d.ts +20 -5
- package/types/packages/core/src/change-request.d.ts +33 -208
- package/types/packages/core/src/crypto.d.ts +2 -0
- package/types/packages/core/src/index.d.ts +8 -4
- package/types/packages/core/src/{package-declarations.d.ts → kit-declarations.d.ts} +84 -180
- package/types/packages/core/src/kit-install.d.ts +130 -0
- package/types/packages/core/src/kit-setup.d.ts +316 -0
- package/types/packages/core/src/kit.d.ts +302 -1444
- package/types/packages/core/src/loop-layers.d.ts +33 -4
- package/types/packages/core/src/loop.d.ts +325 -55
- package/types/packages/core/src/marketplace.d.ts +51 -10
- package/types/packages/core/src/my-teams.d.ts +135 -20
- package/types/packages/core/src/network-host.d.ts +41 -0
- package/types/packages/core/src/notification.d.ts +8 -0
- package/types/packages/core/src/npm-registry.d.ts +65 -0
- package/types/packages/core/src/proposal.d.ts +0 -76
- package/types/packages/core/src/push.d.ts +68 -0
- package/types/packages/core/src/question-recommendation.d.ts +28 -0
- package/types/packages/core/src/redaction.d.ts +15 -3
- package/types/packages/core/src/resource-claim.d.ts +79 -0
- package/types/packages/core/src/run-display.d.ts +7 -1
- package/types/packages/core/src/run-graph.d.ts +1 -1
- package/types/packages/core/src/run-launch.d.ts +15 -2
- package/types/packages/core/src/run-queue.d.ts +28 -0
- package/types/packages/core/src/runner-eligibility.d.ts +21 -2
- package/types/packages/core/src/runner.d.ts +46 -15
- package/types/packages/core/src/secret.d.ts +18 -1
- package/types/packages/core/src/step-brief.d.ts +21 -7
- package/types/packages/core/src/sync-kit.d.ts +8 -0
- package/types/packages/core/src/task-detail.d.ts +15 -2
- package/types/packages/core/src/task.d.ts +9 -0
- package/types/packages/core/src/transcript.d.ts +24 -4
- package/types/packages/core/src/trust-panel.d.ts +1 -1
- package/types/packages/core/src/waiting-on.d.ts +14 -0
- package/types/packages/core/src/work-unit.d.ts +339 -8
- package/types/packages/live/src/rpc/runner-client.d.ts +1229 -566
- package/types/packages/live/src/rpc/runner-group.d.ts +2851 -441
- package/types/packages/sdk/src/build/index.d.ts +45 -9
- package/types/packages/sdk/src/loop/activities.d.ts +382 -2
- package/types/packages/sdk/src/loop/claims.d.ts +57 -0
- package/types/packages/sdk/src/loop/config.d.ts +38 -31
- package/types/packages/sdk/src/loop/continuing.d.ts +22 -0
- package/types/packages/sdk/src/loop/define.d.ts +30 -5
- package/types/packages/sdk/src/loop/evidence.d.ts +18 -3
- package/types/packages/sdk/src/loop/index.d.ts +4 -0
- package/types/packages/sdk/src/loop/measure.d.ts +132 -0
- package/types/packages/sdk/src/loop/plan.d.ts +2 -2
- package/types/packages/sdk/src/loop/steps.d.ts +127 -17
- package/types/packages/sdk/src/loop/sync.d.ts +53 -0
- package/types/packages/sdk/src/loop/test-loop.d.ts +25 -5
- package/types/packages/sdk/src/program/engine.d.ts +116 -17
- package/types/packages/sdk/src/program/host.d.ts +200 -38
- package/types/packages/core/src/engineering-resources.d.ts +0 -24
- package/types/packages/core/src/package.d.ts +0 -369
|
@@ -1,283 +1,406 @@
|
|
|
1
1
|
// @bun
|
|
2
2
|
import {
|
|
3
|
-
AgentSandboxNetwork,
|
|
4
3
|
Numeric,
|
|
5
4
|
isWholeNumber,
|
|
6
5
|
guard,
|
|
7
6
|
Id,
|
|
8
7
|
Timestamp,
|
|
9
|
-
LoopStepOutput,
|
|
10
|
-
StepBrief,
|
|
11
8
|
LoopManifest,
|
|
9
|
+
capabilitiesOf2,
|
|
12
10
|
ManifestInvalid2,
|
|
13
11
|
loopManifest2,
|
|
12
|
+
questionAdvice,
|
|
14
13
|
StepFailed2,
|
|
15
|
-
agentWorkDeferred2,
|
|
16
14
|
answerDeferred2,
|
|
17
15
|
childDeferred2,
|
|
18
16
|
eventDeferred2,
|
|
19
17
|
verifyDeferred2,
|
|
18
|
+
ResourceName,
|
|
19
|
+
claimDeferred2,
|
|
20
|
+
letGoDeferred2,
|
|
21
|
+
WorkUnitRepoBinding,
|
|
22
|
+
ProgramWorkUnit,
|
|
23
|
+
ApprovedCheck,
|
|
24
|
+
MeasurePlan2,
|
|
25
|
+
WorkUnitClaimResult,
|
|
26
|
+
WorkUnitClaimInput,
|
|
27
|
+
WorkUnitHeartbeatInput,
|
|
28
|
+
WorkUnitHeartbeatResult,
|
|
29
|
+
WorkUnitReleaseInput,
|
|
30
|
+
WorkUnitCompletion,
|
|
31
|
+
measureDeferred2,
|
|
20
32
|
loopWorkflow2,
|
|
21
33
|
executeLoop2,
|
|
22
34
|
LoopCheckError2,
|
|
23
35
|
checkLoop2
|
|
24
|
-
} from "./chunk-
|
|
25
|
-
// packages/core/src/
|
|
36
|
+
} from "./chunk-tcbgb4wm.js";
|
|
37
|
+
// packages/core/src/agent-environment.ts
|
|
26
38
|
import * as Schema from "effect/Schema";
|
|
27
|
-
var
|
|
28
|
-
var
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
var RepoBindingCredentialProviderType = Schema.Union([
|
|
34
|
-
Schema.Literal("env"),
|
|
35
|
-
Schema.Literal("file"),
|
|
36
|
-
Schema.Literal("exec")
|
|
39
|
+
var AgentEnvironmentPolicy = Schema.Union([Schema.Literal("recommended"), Schema.Literal("required")]);
|
|
40
|
+
var AgentHarnessId = Schema.Union([
|
|
41
|
+
Schema.Literal("opencode"),
|
|
42
|
+
Schema.Literal("claude-code"),
|
|
43
|
+
Schema.Literal("codex"),
|
|
44
|
+
Schema.Literal("pi")
|
|
37
45
|
]);
|
|
38
|
-
var
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
46
|
+
var Sha256 = Schema.String.check(Schema.isPattern(new RegExp("^[a-fA-F0-9]{64}$", "u")));
|
|
47
|
+
var relativePathPattern = "^(?!/)(?!.*\\\\)(?!.*//)(?!.*(?:^|/)\\.\\.?($|/)).+$";
|
|
48
|
+
var SourcePath = Schema.String.check(Schema.isMinLength(1), Schema.isPattern(new RegExp(relativePathPattern, "u")));
|
|
49
|
+
var SkillSource = Schema.Union([
|
|
50
|
+
Schema.Struct({
|
|
51
|
+
kind: Schema.Literal("skills_sh"),
|
|
52
|
+
slug: Schema.String.check(Schema.isMinLength(1)),
|
|
53
|
+
version: Schema.optionalKey(Schema.String.check(Schema.isMinLength(1)))
|
|
54
|
+
}),
|
|
55
|
+
Schema.Struct({
|
|
56
|
+
kind: Schema.Literal("kitman"),
|
|
57
|
+
skillId: Schema.optionalKey(Id),
|
|
58
|
+
name: Schema.optionalKey(Schema.String.check(Schema.isMinLength(1))),
|
|
59
|
+
contentMarkdown: Schema.optionalKey(Schema.String.check(Schema.isMinLength(1))),
|
|
60
|
+
files: Schema.optionalKey(Schema.Record(SourcePath, Schema.String))
|
|
61
|
+
}),
|
|
62
|
+
Schema.Struct({
|
|
63
|
+
kind: Schema.Literal("git"),
|
|
64
|
+
url: Schema.String.check(Schema.isMinLength(1)),
|
|
65
|
+
ref: Schema.optionalKey(Schema.String.check(Schema.isMinLength(1))),
|
|
66
|
+
path: Schema.optionalKey(SourcePath),
|
|
67
|
+
sha256: Schema.optionalKey(Sha256)
|
|
68
|
+
}),
|
|
69
|
+
Schema.Struct({
|
|
70
|
+
kind: Schema.Literal("package"),
|
|
71
|
+
packageName: Schema.String.check(Schema.isMinLength(1)),
|
|
72
|
+
version: Schema.String.check(Schema.isMinLength(1)),
|
|
73
|
+
path: Schema.optionalKey(SourcePath),
|
|
74
|
+
sha256: Schema.optionalKey(Sha256)
|
|
75
|
+
}),
|
|
76
|
+
Schema.Struct({ kind: Schema.Literal("url"), url: Schema.String.check(Schema.isMinLength(1)), sha256: Sha256 }),
|
|
77
|
+
Schema.Struct({ kind: Schema.Literal("local_path"), path: Schema.String.check(Schema.isMinLength(1)) })
|
|
42
78
|
]);
|
|
43
|
-
var
|
|
44
|
-
Schema.Struct({ kind: Schema.Literal("none") }),
|
|
45
|
-
Schema.Struct({ kind: Schema.Literal("local_env"), envName: Schema.String.check(Schema.isMinLength(1)) }),
|
|
79
|
+
var PluginSource = Schema.Union([
|
|
46
80
|
Schema.Struct({
|
|
81
|
+
kind: Schema.Literal("package"),
|
|
82
|
+
packageName: Schema.String.check(Schema.isMinLength(1)),
|
|
83
|
+
version: Schema.optionalKey(Schema.String.check(Schema.isMinLength(1)))
|
|
84
|
+
}),
|
|
85
|
+
Schema.Struct({
|
|
86
|
+
kind: Schema.Literal("git"),
|
|
87
|
+
url: Schema.String.check(Schema.isMinLength(1)),
|
|
88
|
+
ref: Schema.optionalKey(Schema.String.check(Schema.isMinLength(1)))
|
|
89
|
+
}),
|
|
90
|
+
Schema.Struct({
|
|
91
|
+
kind: Schema.Literal("url"),
|
|
92
|
+
url: Schema.String.check(Schema.isMinLength(1)),
|
|
93
|
+
sha256: Schema.String.check(Schema.isPattern(new RegExp("^[a-fA-F0-9]{64}$", "u")))
|
|
94
|
+
}),
|
|
95
|
+
Schema.Struct({ kind: Schema.Literal("local_path"), path: Schema.String.check(Schema.isMinLength(1)) })
|
|
96
|
+
]);
|
|
97
|
+
var McpServerTransport = Schema.Union([
|
|
98
|
+
Schema.Struct({
|
|
99
|
+
kind: Schema.Literal("stdio"),
|
|
100
|
+
command: Schema.String.check(Schema.isMinLength(1)),
|
|
101
|
+
args: Schema.optionalKey(Schema.Array(Schema.String)),
|
|
102
|
+
env: Schema.optionalKey(Schema.Record(Schema.String, Schema.String))
|
|
103
|
+
}),
|
|
104
|
+
Schema.Struct({
|
|
105
|
+
kind: Schema.Literal("streamable_http"),
|
|
106
|
+
url: Schema.String.check(Schema.isMinLength(1)),
|
|
107
|
+
headers: Schema.optionalKey(Schema.Record(Schema.String, Schema.String))
|
|
108
|
+
})
|
|
109
|
+
]);
|
|
110
|
+
var ProviderAuthRef = Schema.Union([
|
|
111
|
+
Schema.Struct({
|
|
112
|
+
provider: Schema.String.check(Schema.isMinLength(1)),
|
|
113
|
+
policy: AgentEnvironmentPolicy,
|
|
114
|
+
kind: Schema.Literal("existing_harness_login"),
|
|
115
|
+
accountHint: Schema.optionalKey(Schema.String.check(Schema.isMinLength(1)))
|
|
116
|
+
}),
|
|
117
|
+
Schema.Struct({
|
|
118
|
+
provider: Schema.String.check(Schema.isMinLength(1)),
|
|
119
|
+
policy: AgentEnvironmentPolicy,
|
|
120
|
+
kind: Schema.Literal("local_env"),
|
|
121
|
+
envName: Schema.String.check(Schema.isMinLength(1))
|
|
122
|
+
}),
|
|
123
|
+
Schema.Struct({
|
|
124
|
+
provider: Schema.String.check(Schema.isMinLength(1)),
|
|
125
|
+
policy: AgentEnvironmentPolicy,
|
|
47
126
|
kind: Schema.Literal("runner_secret"),
|
|
48
|
-
runnerSecretName: Schema.String.check(Schema.isMinLength(1))
|
|
49
|
-
providerType: RepoBindingCredentialProviderType
|
|
127
|
+
runnerSecretName: Schema.String.check(Schema.isMinLength(1))
|
|
50
128
|
}),
|
|
51
|
-
Schema.Struct({
|
|
129
|
+
Schema.Struct({
|
|
130
|
+
provider: Schema.String.check(Schema.isMinLength(1)),
|
|
131
|
+
policy: AgentEnvironmentPolicy,
|
|
132
|
+
kind: Schema.Literal("managed_oauth"),
|
|
133
|
+
grantId: Schema.optionalKey(Id)
|
|
134
|
+
})
|
|
52
135
|
]);
|
|
53
|
-
var
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
owner: Schema.String.check(Schema.isMinLength(1)),
|
|
136
|
+
var RunnerSecretSource = Schema.Union([
|
|
137
|
+
Schema.Struct({ kind: Schema.Literal("env"), envName: Schema.String.check(Schema.isMinLength(1)) }),
|
|
138
|
+
Schema.Struct({ kind: Schema.Literal("file"), pathRef: Schema.String.check(Schema.isMinLength(1)) }),
|
|
139
|
+
Schema.Struct({ kind: Schema.Literal("exec"), commandRef: Schema.String.check(Schema.isMinLength(1)) })
|
|
140
|
+
]);
|
|
141
|
+
var RunnerSecretRef = Schema.Struct({
|
|
60
142
|
name: Schema.String.check(Schema.isMinLength(1)),
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
expectedBranch: Schema.optionalKey(Schema.String.check(Schema.isMinLength(1))),
|
|
65
|
-
expectedCommitSha: Schema.optionalKey(Schema.String.check(Schema.isMinLength(1))),
|
|
66
|
-
credentialRefs: Schema.Array(RepoBindingCredentialRef),
|
|
67
|
-
status: RepoBindingStatus,
|
|
68
|
-
webhook: Schema.optionalKey(Schema.Struct({
|
|
69
|
-
status: Schema.Literals(["active", "missing", "unavailable"]),
|
|
70
|
-
message: Schema.optionalKey(Schema.String.check(Schema.isMaxLength(240)))
|
|
71
|
-
})),
|
|
72
|
-
createdAt: Timestamp,
|
|
73
|
-
updatedAt: Timestamp
|
|
143
|
+
policy: AgentEnvironmentPolicy,
|
|
144
|
+
source: RunnerSecretSource,
|
|
145
|
+
capabilities: Schema.optionalKey(Schema.Array(Schema.String.check(Schema.isMinLength(1))))
|
|
74
146
|
});
|
|
75
|
-
var
|
|
76
|
-
|
|
77
|
-
provider: RepoBindingProvider,
|
|
78
|
-
host: Schema.String.check(Schema.isMinLength(1)),
|
|
79
|
-
owner: Schema.String.check(Schema.isMinLength(1)),
|
|
147
|
+
var Patterns = Schema.Array(Schema.String.check(Schema.isMinLength(1)));
|
|
148
|
+
var AgentSkillRequirement = Schema.Struct({
|
|
80
149
|
name: Schema.String.check(Schema.isMinLength(1)),
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
expectedBranch: Schema.optionalKey(Schema.String.check(Schema.isMinLength(1))),
|
|
85
|
-
expectedCommitSha: Schema.optionalKey(Schema.String.check(Schema.isMinLength(1))),
|
|
86
|
-
credentialRefs: Schema.optionalKey(Schema.Array(RepoBindingCredentialRef))
|
|
150
|
+
policy: AgentEnvironmentPolicy,
|
|
151
|
+
source: SkillSource,
|
|
152
|
+
appliesTo: Schema.optionalKey(Schema.Struct({ dependencies: Schema.optionalKey(Patterns), files: Schema.optionalKey(Patterns) }))
|
|
87
153
|
});
|
|
88
|
-
var
|
|
89
|
-
|
|
154
|
+
var AgentPluginRequirement = Schema.Struct({
|
|
155
|
+
name: Schema.String.check(Schema.isMinLength(1)),
|
|
156
|
+
policy: AgentEnvironmentPolicy,
|
|
157
|
+
sources: Schema.NonEmptyArray(PluginSource)
|
|
90
158
|
});
|
|
91
|
-
var
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
host: Schema.String.check(Schema.isMinLength(1)),
|
|
96
|
-
accessModes: Schema.Array(RepoBindingAccessMode),
|
|
97
|
-
credentialProviderTypes: Schema.Array(RepoBindingCredentialProviderType),
|
|
98
|
-
authenticated: Schema.Boolean,
|
|
99
|
-
canPush: Schema.optionalKey(Schema.Boolean)
|
|
159
|
+
var AgentMcpServerRequirement = Schema.Struct({
|
|
160
|
+
name: Schema.String.check(Schema.isMinLength(1)),
|
|
161
|
+
policy: AgentEnvironmentPolicy,
|
|
162
|
+
transport: McpServerTransport
|
|
100
163
|
});
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
leaseOwnerId: Id,
|
|
107
|
-
runnerReplicaId: Id,
|
|
108
|
-
leaseId: Id,
|
|
109
|
-
attempt: Schema2.Int.check(Schema2.isGreaterThanOrEqualTo(1)),
|
|
110
|
-
fencingToken: Schema2.String.check(Schema2.isMinLength(1), Schema2.isMaxLength(240), Schema2.isPattern(new RegExp("^[A-Za-z0-9._:-]+$", "u"))),
|
|
111
|
-
capacitySlot: Schema2.String.check(Schema2.isMinLength(1), Schema2.isMaxLength(240)),
|
|
112
|
-
leaseExpiresAt: Timestamp,
|
|
113
|
-
lastHeartbeatAt: Timestamp
|
|
164
|
+
var AgentHarnessSetting = Schema.Struct({
|
|
165
|
+
harness: AgentHarnessId,
|
|
166
|
+
key: Schema.String.check(Schema.isMinLength(1)),
|
|
167
|
+
policy: AgentEnvironmentPolicy,
|
|
168
|
+
value: Schema.Unknown
|
|
114
169
|
});
|
|
115
|
-
var
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
host: Schema2.String.check(Schema2.isMinLength(1)),
|
|
120
|
-
owner: Schema2.String.check(Schema2.isMinLength(1)),
|
|
121
|
-
name: Schema2.String.check(Schema2.isMinLength(1)),
|
|
122
|
-
repositoryUrl: Schema2.optionalKey(Schema2.String.check(Schema2.isMinLength(1))),
|
|
123
|
-
pathPrefix: Schema2.optionalKey(Schema2.String.check(Schema2.isMinLength(1))),
|
|
124
|
-
defaultTargetBranch: Schema2.String.check(Schema2.isMinLength(1)),
|
|
125
|
-
expectedBranch: Schema2.optionalKey(Schema2.String.check(Schema2.isMinLength(1))),
|
|
126
|
-
expectedCommitSha: Schema2.optionalKey(Schema2.String.check(Schema2.isMinLength(1)))
|
|
170
|
+
var AgentRuntimeConstraint = Schema.Struct({
|
|
171
|
+
key: Schema.String.check(Schema.isMinLength(1)),
|
|
172
|
+
policy: AgentEnvironmentPolicy,
|
|
173
|
+
value: Schema.Unknown
|
|
127
174
|
});
|
|
128
|
-
var
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
attempt: Schema2.Int.check(Schema2.isGreaterThanOrEqualTo(1)),
|
|
133
|
-
fencingToken: Schema2.String.check(Schema2.isMinLength(1), Schema2.isMaxLength(240), Schema2.isPattern(new RegExp("^[A-Za-z0-9._:-]+$", "u"))),
|
|
134
|
-
capacitySlot: Schema2.String.check(Schema2.isMinLength(1), Schema2.isMaxLength(240))
|
|
175
|
+
var AgentPermissionRequirement = Schema.Struct({
|
|
176
|
+
key: Schema.String.check(Schema.isMinLength(1)),
|
|
177
|
+
policy: AgentEnvironmentPolicy,
|
|
178
|
+
value: Schema.Unknown
|
|
135
179
|
});
|
|
136
|
-
var
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
Schema2.Literal("failed"),
|
|
144
|
-
Schema2.Literal("canceled"),
|
|
145
|
-
Schema2.Literal("expired")
|
|
146
|
-
]);
|
|
147
|
-
var LoopCheckout = Schema2.Union([Schema2.Literal("none"), Schema2.Literal("read"), Schema2.Literal("write")]);
|
|
148
|
-
var StorageOrigin = Schema2.optionalKey(Schema2.String.check(Schema2.isMinLength(1), Schema2.isMaxLength(2048)));
|
|
149
|
-
var AgentStepWorkUnit = Schema2.Struct({
|
|
150
|
-
kind: Schema2.Literal("agent_step"),
|
|
151
|
-
id: Id,
|
|
152
|
-
teamId: Schema2.optionalKey(Id),
|
|
153
|
-
runId: Id,
|
|
154
|
-
stepKey: Schema2.String.check(Schema2.isMinLength(1), Schema2.isMaxLength(240)),
|
|
155
|
-
attempt: Schema2.Int.check(Schema2.isGreaterThanOrEqualTo(1)),
|
|
156
|
-
lease: WorkUnitLease,
|
|
157
|
-
brief: StepBrief,
|
|
158
|
-
stepCredential: Schema2.String.check(Schema2.isMinLength(1), Schema2.isMaxLength(512)),
|
|
159
|
-
checkout: LoopCheckout,
|
|
160
|
-
repoBinding: Schema2.optionalKey(WorkUnitRepoBinding),
|
|
161
|
-
branch: Schema2.optionalKey(Schema2.String.check(Schema2.isMinLength(1))),
|
|
162
|
-
baseRevision: Schema2.optionalKey(Schema2.String.check(Schema2.isMinLength(1))),
|
|
163
|
-
network: Schema2.optionalKey(AgentSandboxNetwork),
|
|
164
|
-
sandbox: Schema2.optionalKey(Schema2.Literal("docker")),
|
|
165
|
-
secrets: Schema2.optionalKey(Schema2.Record(Schema2.String, Schema2.String)),
|
|
166
|
-
runBaseRevision: Schema2.optionalKey(Schema2.String.check(Schema2.isMinLength(1))),
|
|
167
|
-
storageOrigin: StorageOrigin
|
|
180
|
+
var AgentHookRequirement = Schema.Struct({
|
|
181
|
+
name: Schema.String.check(Schema.isMinLength(1)),
|
|
182
|
+
event: Schema.String.check(Schema.isMinLength(1)),
|
|
183
|
+
policy: AgentEnvironmentPolicy,
|
|
184
|
+
command: Schema.String.check(Schema.isMinLength(1)),
|
|
185
|
+
args: Schema.optionalKey(Schema.Array(Schema.String)),
|
|
186
|
+
timeoutMs: Schema.optionalKey(Schema.Finite.check(Schema.isGreaterThanOrEqualTo(1)))
|
|
168
187
|
});
|
|
169
|
-
var
|
|
170
|
-
|
|
171
|
-
|
|
188
|
+
var AgentSandboxPolicyRequirement = Schema.Struct({
|
|
189
|
+
key: Schema.String.check(Schema.isMinLength(1)),
|
|
190
|
+
policy: AgentEnvironmentPolicy,
|
|
191
|
+
value: Schema.Unknown
|
|
172
192
|
});
|
|
173
|
-
var
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
storageOrigin: StorageOrigin,
|
|
185
|
-
program: Schema2.Struct({
|
|
186
|
-
loopId: Schema2.String.check(Schema2.isMinLength(1)),
|
|
187
|
-
credential: Schema2.String.check(Schema2.isMinLength(1))
|
|
188
|
-
})
|
|
193
|
+
var AgentEnvironmentFragment = Schema.Struct({
|
|
194
|
+
skills: Schema.optionalKey(Schema.Array(AgentSkillRequirement)),
|
|
195
|
+
plugins: Schema.optionalKey(Schema.Array(AgentPluginRequirement)),
|
|
196
|
+
mcpServers: Schema.optionalKey(Schema.Array(AgentMcpServerRequirement)),
|
|
197
|
+
harnessSettings: Schema.optionalKey(Schema.Array(AgentHarnessSetting)),
|
|
198
|
+
providerAuthRefs: Schema.optionalKey(Schema.Array(ProviderAuthRef)),
|
|
199
|
+
runnerSecretRefs: Schema.optionalKey(Schema.Array(RunnerSecretRef)),
|
|
200
|
+
permissions: Schema.optionalKey(Schema.Array(AgentPermissionRequirement)),
|
|
201
|
+
hooks: Schema.optionalKey(Schema.Array(AgentHookRequirement)),
|
|
202
|
+
runtimeConstraints: Schema.optionalKey(Schema.Array(AgentRuntimeConstraint)),
|
|
203
|
+
sandboxPolicyRequirements: Schema.optionalKey(Schema.Array(AgentSandboxPolicyRequirement))
|
|
189
204
|
});
|
|
190
|
-
var
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
205
|
+
var AgentModelPreference = Schema.Struct({
|
|
206
|
+
harness: AgentHarnessId,
|
|
207
|
+
profileRef: Schema.String.check(Schema.isMinLength(1)),
|
|
208
|
+
provider: Schema.optionalKey(Schema.String.check(Schema.isMinLength(1))),
|
|
209
|
+
model: Schema.optionalKey(Schema.String.check(Schema.isMinLength(1)))
|
|
195
210
|
});
|
|
196
|
-
var
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
211
|
+
var UserAgentPreferences = Schema.Struct({
|
|
212
|
+
userId: Schema.optionalKey(Id),
|
|
213
|
+
defaultHarness: Schema.optionalKey(AgentHarnessId),
|
|
214
|
+
modelPreferences: Schema.optionalKey(Schema.Array(AgentModelPreference))
|
|
215
|
+
});
|
|
216
|
+
var AgentKitSourceFields = {
|
|
217
|
+
kitRef: Schema.optionalKey(Schema.String.check(Schema.isMinLength(1), Schema.isMaxLength(240))),
|
|
218
|
+
kitVersion: Schema.optionalKey(Schema.String.check(Schema.isMinLength(1), Schema.isMaxLength(120))),
|
|
219
|
+
kitSha256: Schema.optionalKey(Schema.String.check(Schema.isMinLength(64), Schema.isMaxLength(64), Schema.isPattern(new RegExp("^[a-fA-F0-9]{64}$", "u")))),
|
|
220
|
+
kitActivationId: Schema.optionalKey(Id),
|
|
221
|
+
kitActivationType: Schema.optionalKey(Schema.String.check(Schema.isMinLength(1), Schema.isMaxLength(80)))
|
|
222
|
+
};
|
|
223
|
+
var AgentEnvironmentSource = Schema.Union([
|
|
224
|
+
Schema.Struct({
|
|
225
|
+
kind: Schema.Literal("built_in"),
|
|
226
|
+
label: Schema.optionalKey(Schema.String.check(Schema.isMinLength(1)))
|
|
227
|
+
}),
|
|
228
|
+
Schema.Struct({
|
|
229
|
+
kind: Schema.Literal("user_preferences"),
|
|
230
|
+
userId: Id,
|
|
231
|
+
label: Schema.optionalKey(Schema.String.check(Schema.isMinLength(1)))
|
|
232
|
+
}),
|
|
233
|
+
Schema.Struct({
|
|
234
|
+
kind: Schema.Literal("user_kit"),
|
|
235
|
+
userId: Id,
|
|
236
|
+
kitId: Id,
|
|
237
|
+
...AgentKitSourceFields,
|
|
238
|
+
label: Schema.optionalKey(Schema.String.check(Schema.isMinLength(1)))
|
|
239
|
+
}),
|
|
240
|
+
Schema.Struct({
|
|
241
|
+
kind: Schema.Literal("agent_sync_profile"),
|
|
242
|
+
profileId: Schema.optionalKey(Id),
|
|
243
|
+
userId: Id,
|
|
244
|
+
label: Schema.optionalKey(Schema.String.check(Schema.isMinLength(1)))
|
|
245
|
+
}),
|
|
246
|
+
Schema.Struct({
|
|
247
|
+
kind: Schema.Literal("device_local"),
|
|
248
|
+
label: Schema.optionalKey(Schema.String.check(Schema.isMinLength(1)))
|
|
249
|
+
}),
|
|
250
|
+
Schema.Struct({
|
|
251
|
+
kind: Schema.Literal("workspace_kit"),
|
|
252
|
+
kitId: Id,
|
|
253
|
+
...AgentKitSourceFields,
|
|
254
|
+
label: Schema.optionalKey(Schema.String.check(Schema.isMinLength(1)))
|
|
255
|
+
}),
|
|
256
|
+
Schema.Struct({
|
|
257
|
+
kind: Schema.Literal("team_default_kit"),
|
|
258
|
+
teamId: Id,
|
|
259
|
+
kitId: Id,
|
|
260
|
+
...AgentKitSourceFields,
|
|
261
|
+
label: Schema.optionalKey(Schema.String.check(Schema.isMinLength(1)))
|
|
262
|
+
}),
|
|
263
|
+
Schema.Struct({
|
|
264
|
+
kind: Schema.Literal("team_kit"),
|
|
265
|
+
kitId: Id,
|
|
266
|
+
...AgentKitSourceFields,
|
|
267
|
+
provenance: Schema.optionalKey(Schema.Union([
|
|
268
|
+
Schema.Literal("explicit"),
|
|
269
|
+
Schema.Literal("workspace_default"),
|
|
270
|
+
Schema.Literal("workspace_mandatory")
|
|
271
|
+
])),
|
|
272
|
+
policyRevision: Schema.optionalKey(Schema.Int.check(Schema.isGreaterThanOrEqualTo(1))),
|
|
273
|
+
label: Schema.optionalKey(Schema.String.check(Schema.isMinLength(1)))
|
|
274
|
+
}),
|
|
275
|
+
Schema.Struct({
|
|
276
|
+
kind: Schema.Literal("marketplace_kit"),
|
|
277
|
+
kitSourceId: Id,
|
|
278
|
+
kitVersionId: Schema.optionalKey(Id),
|
|
279
|
+
kitInstallationId: Schema.optionalKey(Id),
|
|
280
|
+
kitActivationId: Schema.optionalKey(Id),
|
|
281
|
+
label: Schema.optionalKey(Schema.String.check(Schema.isMinLength(1)))
|
|
282
|
+
}),
|
|
283
|
+
Schema.Struct({
|
|
284
|
+
kind: Schema.Literal("step_attempt_override"),
|
|
285
|
+
stepAttemptId: Id,
|
|
286
|
+
label: Schema.optionalKey(Schema.String.check(Schema.isMinLength(1)))
|
|
287
|
+
}),
|
|
288
|
+
Schema.Struct({
|
|
289
|
+
kind: Schema.Literal("command_override"),
|
|
290
|
+
label: Schema.optionalKey(Schema.String.check(Schema.isMinLength(1)))
|
|
291
|
+
})
|
|
292
|
+
]);
|
|
293
|
+
var ResolvedAgentSkillRequirement = Schema.Struct({
|
|
294
|
+
item: AgentSkillRequirement,
|
|
295
|
+
source: AgentEnvironmentSource
|
|
207
296
|
});
|
|
208
|
-
var
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
teamId: Schema2.optionalKey(Id),
|
|
212
|
-
runnerReplicaId: Id,
|
|
213
|
-
capacitySlot: Schema2.String.check(Schema2.isMinLength(1), Schema2.isMaxLength(240)),
|
|
214
|
-
idempotencyKey: Schema2.String.check(Schema2.isMinLength(1), Schema2.isMaxLength(240)),
|
|
215
|
-
leaseDurationSeconds: Schema2.optionalKey(Schema2.Int.check(Schema2.isGreaterThanOrEqualTo(1), Schema2.isLessThanOrEqualTo(3600)))
|
|
297
|
+
var ResolvedAgentPluginRequirement = Schema.Struct({
|
|
298
|
+
item: AgentPluginRequirement,
|
|
299
|
+
source: AgentEnvironmentSource
|
|
216
300
|
});
|
|
217
|
-
var
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
leaseDurationSeconds: Schema2.optionalKey(Schema2.Int.check(Schema2.isGreaterThanOrEqualTo(1), Schema2.isLessThanOrEqualTo(3600)))
|
|
301
|
+
var ResolvedAgentMcpServerRequirement = Schema.Struct({
|
|
302
|
+
item: AgentMcpServerRequirement,
|
|
303
|
+
source: AgentEnvironmentSource
|
|
221
304
|
});
|
|
222
|
-
var
|
|
223
|
-
|
|
224
|
-
|
|
305
|
+
var ResolvedAgentHarnessSetting = Schema.Struct({ item: AgentHarnessSetting, source: AgentEnvironmentSource });
|
|
306
|
+
var ResolvedProviderAuthRef = Schema.Struct({ item: ProviderAuthRef, source: AgentEnvironmentSource });
|
|
307
|
+
var ResolvedRunnerSecretRef = Schema.Struct({ item: RunnerSecretRef, source: AgentEnvironmentSource });
|
|
308
|
+
var ResolvedAgentPermissionRequirement = Schema.Struct({
|
|
309
|
+
item: AgentPermissionRequirement,
|
|
310
|
+
source: AgentEnvironmentSource
|
|
225
311
|
});
|
|
226
|
-
var
|
|
227
|
-
|
|
228
|
-
|
|
312
|
+
var ResolvedAgentHookRequirement = Schema.Struct({ item: AgentHookRequirement, source: AgentEnvironmentSource });
|
|
313
|
+
var ResolvedAgentRuntimeConstraint = Schema.Struct({
|
|
314
|
+
item: AgentRuntimeConstraint,
|
|
315
|
+
source: AgentEnvironmentSource
|
|
229
316
|
});
|
|
230
|
-
var
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
status: Schema2.Union([Schema2.Literal("passed"), Schema2.Literal("failed")]),
|
|
234
|
-
exitCode: Schema2.optionalKey(Schema2.Int),
|
|
235
|
-
durationMs: Schema2.Int.check(Schema2.isGreaterThanOrEqualTo(0)),
|
|
236
|
-
outputTail: Schema2.String.check(Schema2.isMaxLength(8000)),
|
|
237
|
-
fileIds: Schema2.optionalKey(Schema2.Array(Schema2.String).check(Schema2.isMaxLength(51)))
|
|
317
|
+
var ResolvedAgentSandboxPolicyRequirement = Schema.Struct({
|
|
318
|
+
item: AgentSandboxPolicyRequirement,
|
|
319
|
+
source: AgentEnvironmentSource
|
|
238
320
|
});
|
|
239
|
-
var
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
321
|
+
var AgentEnvironment = Schema.Struct({
|
|
322
|
+
harness: AgentHarnessId,
|
|
323
|
+
skills: Schema.Array(ResolvedAgentSkillRequirement),
|
|
324
|
+
plugins: Schema.Array(ResolvedAgentPluginRequirement),
|
|
325
|
+
mcpServers: Schema.Array(ResolvedAgentMcpServerRequirement),
|
|
326
|
+
harnessSettings: Schema.Array(ResolvedAgentHarnessSetting),
|
|
327
|
+
providerAuthRefs: Schema.Array(ResolvedProviderAuthRef),
|
|
328
|
+
runnerSecretRefs: Schema.Array(ResolvedRunnerSecretRef),
|
|
329
|
+
permissions: Schema.Array(ResolvedAgentPermissionRequirement),
|
|
330
|
+
hooks: Schema.Array(ResolvedAgentHookRequirement),
|
|
331
|
+
runtimeConstraints: Schema.Array(ResolvedAgentRuntimeConstraint),
|
|
332
|
+
sandboxPolicyRequirements: Schema.Array(ResolvedAgentSandboxPolicyRequirement),
|
|
333
|
+
warnings: Schema.Array(Schema.String)
|
|
243
334
|
});
|
|
244
|
-
var
|
|
245
|
-
var
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
335
|
+
var KitMarketplaceAgentEnvironmentSyncStates = ["ready", "needs_sync", "blocked"];
|
|
336
|
+
var KitMarketplaceAgentEnvironmentEffectKinds = [
|
|
337
|
+
"skill",
|
|
338
|
+
"plugin",
|
|
339
|
+
"mcp_server",
|
|
340
|
+
"harness_setting",
|
|
341
|
+
"provider_auth_ref",
|
|
342
|
+
"runner_secret_ref",
|
|
343
|
+
"permission",
|
|
344
|
+
"hook",
|
|
345
|
+
"runtime_constraint",
|
|
346
|
+
"sandbox_policy_requirement"
|
|
347
|
+
];
|
|
348
|
+
var KitMarketplaceAgentEnvironmentMaterializerRequirements = [
|
|
349
|
+
"config_writer",
|
|
350
|
+
"provider_auth",
|
|
351
|
+
"runner_secret",
|
|
352
|
+
"bun",
|
|
353
|
+
"sandbox_policy"
|
|
354
|
+
];
|
|
355
|
+
var KitMarketplaceAgentEnvironmentEffect = Schema.Struct({
|
|
356
|
+
kind: Schema.Literals(KitMarketplaceAgentEnvironmentEffectKinds),
|
|
357
|
+
name: Schema.String.check(Schema.isMinLength(1)),
|
|
358
|
+
policy: AgentEnvironmentPolicy,
|
|
359
|
+
source: AgentEnvironmentSource,
|
|
360
|
+
materializerRequirements: Schema.Array(Schema.Literals(KitMarketplaceAgentEnvironmentMaterializerRequirements))
|
|
256
361
|
});
|
|
257
|
-
var
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
]),
|
|
264
|
-
result: Schema2.optionalKey(LoopStepOutput),
|
|
265
|
-
revision: Schema2.optionalKey(Schema2.String.check(Schema2.isMinLength(1), Schema2.isMaxLength(120))),
|
|
266
|
-
evidence: Schema2.optionalKey(VerificationEvidence),
|
|
267
|
-
boundary: Schema2.optionalKey(BoundaryChange),
|
|
268
|
-
failureSummary: Schema2.optionalKey(Schema2.String.check(Schema2.isMinLength(1), Schema2.isMaxLength(4000)))
|
|
362
|
+
var KitMarketplaceAgentEnvironmentSyncPreview = Schema.Struct({
|
|
363
|
+
state: Schema.Literals(KitMarketplaceAgentEnvironmentSyncStates),
|
|
364
|
+
agentEnvironment: AgentEnvironment,
|
|
365
|
+
effects: Schema.Array(KitMarketplaceAgentEnvironmentEffect),
|
|
366
|
+
blockers: Schema.Array(Schema.String),
|
|
367
|
+
drift: Schema.Array(Schema.String)
|
|
269
368
|
});
|
|
270
|
-
var
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
369
|
+
var AgentEnvironmentSyncPlanStatuses = ["ready", "needs_apply", "blocked"];
|
|
370
|
+
var AgentEnvironmentSyncPlanItemKinds = [
|
|
371
|
+
"skill",
|
|
372
|
+
"plugin",
|
|
373
|
+
"mcp_server",
|
|
374
|
+
"harness_setting",
|
|
375
|
+
"provider_auth_ref",
|
|
376
|
+
"runner_secret_ref",
|
|
377
|
+
"permission",
|
|
378
|
+
"hook",
|
|
379
|
+
"runtime_constraint",
|
|
380
|
+
"sandbox_policy_requirement"
|
|
381
|
+
];
|
|
382
|
+
var AgentEnvironmentSyncPlanApplyModes = ["automatic", "manual", "verify_only"];
|
|
383
|
+
var AgentEnvironmentSyncPlanItem = Schema.Struct({
|
|
384
|
+
kind: Schema.Literals(AgentEnvironmentSyncPlanItemKinds),
|
|
385
|
+
name: Schema.String.check(Schema.isMinLength(1)),
|
|
386
|
+
policy: AgentEnvironmentPolicy,
|
|
387
|
+
source: AgentEnvironmentSource,
|
|
388
|
+
materializerRequirements: Schema.Array(Schema.Literals(KitMarketplaceAgentEnvironmentMaterializerRequirements)),
|
|
389
|
+
applyMode: Schema.Literals(AgentEnvironmentSyncPlanApplyModes)
|
|
390
|
+
});
|
|
391
|
+
var AgentEnvironmentSyncPlan = Schema.Struct({
|
|
392
|
+
status: Schema.Literals(AgentEnvironmentSyncPlanStatuses),
|
|
393
|
+
targetHarness: AgentHarnessId,
|
|
394
|
+
agentEnvironment: AgentEnvironment,
|
|
395
|
+
items: Schema.Array(AgentEnvironmentSyncPlanItem),
|
|
396
|
+
blockers: Schema.Array(Schema.String),
|
|
397
|
+
drift: Schema.Array(Schema.String)
|
|
275
398
|
});
|
|
276
399
|
// packages/core/src/run-file.ts
|
|
277
|
-
import * as
|
|
400
|
+
import * as Schema3 from "effect/Schema";
|
|
278
401
|
|
|
279
402
|
// packages/core/src/storage.ts
|
|
280
|
-
import * as
|
|
403
|
+
import * as Schema2 from "effect/Schema";
|
|
281
404
|
var units = ["B", "KiB", "MiB", "GiB", "TiB"];
|
|
282
405
|
var formatBytes = (bytes) => {
|
|
283
406
|
const exponent = Math.min(units.length - 1, Math.floor(Math.log(Math.max(bytes, 1)) / Math.log(1024)));
|
|
@@ -289,16 +412,16 @@ var storageLimitWords = {
|
|
|
289
412
|
run: (filesPerRun) => `${filesPerRun} files per Run`
|
|
290
413
|
};
|
|
291
414
|
var maxRunFileRetentionDays = 3650;
|
|
292
|
-
var RunFileRetentionDays =
|
|
293
|
-
var WorkspaceStorageSettings =
|
|
294
|
-
usedBytes:
|
|
295
|
-
quotaBytes:
|
|
296
|
-
byPurpose:
|
|
297
|
-
limits:
|
|
415
|
+
var RunFileRetentionDays = Schema2.NullOr(Schema2.Int.check(Schema2.isGreaterThanOrEqualTo(1), Schema2.isLessThanOrEqualTo(maxRunFileRetentionDays)));
|
|
416
|
+
var WorkspaceStorageSettings = Schema2.Struct({
|
|
417
|
+
usedBytes: Schema2.Int,
|
|
418
|
+
quotaBytes: Schema2.Int,
|
|
419
|
+
byPurpose: Schema2.Struct({ runFile: Schema2.Int, taskAsset: Schema2.Int, checkpoint: Schema2.Int }),
|
|
420
|
+
limits: Schema2.Struct({ fileBytes: Schema2.Int, filesPerRun: Schema2.Int }),
|
|
298
421
|
runFileRetentionDays: RunFileRetentionDays
|
|
299
422
|
});
|
|
300
|
-
var WorkspaceStorageUpdate =
|
|
301
|
-
var WorkspaceStorageSaved =
|
|
423
|
+
var WorkspaceStorageUpdate = Schema2.Struct({ runFileRetentionDays: RunFileRetentionDays });
|
|
424
|
+
var WorkspaceStorageSaved = Schema2.Struct({ ...WorkspaceStorageSettings.fields, willExpire: Schema2.Int });
|
|
302
425
|
|
|
303
426
|
// packages/core/src/run-file.ts
|
|
304
427
|
var RunFileRefusalReasons = ["type", "too_large", "too_many", "quota", "name_taken"];
|
|
@@ -317,10 +440,10 @@ var runFileRefusalWords = (refusal) => {
|
|
|
317
440
|
}
|
|
318
441
|
};
|
|
319
442
|
|
|
320
|
-
class RunFileRefused extends
|
|
321
|
-
reason:
|
|
322
|
-
limit:
|
|
323
|
-
actual:
|
|
443
|
+
class RunFileRefused extends Schema3.TaggedError()("RunFileRefused", {
|
|
444
|
+
reason: Schema3.Literals(RunFileRefusalReasons),
|
|
445
|
+
limit: Schema3.optionalKey(Schema3.Int),
|
|
446
|
+
actual: Schema3.optionalKey(Schema3.Int)
|
|
324
447
|
}) {
|
|
325
448
|
get message() {
|
|
326
449
|
return runFileRefusalWords(this);
|
|
@@ -356,72 +479,72 @@ var RunFileStatuses = [
|
|
|
356
479
|
"removed",
|
|
357
480
|
"expired"
|
|
358
481
|
];
|
|
359
|
-
var RunFileRecord =
|
|
360
|
-
id:
|
|
361
|
-
runId:
|
|
362
|
-
step:
|
|
363
|
-
name:
|
|
364
|
-
caption:
|
|
365
|
-
contentType:
|
|
366
|
-
kind:
|
|
367
|
-
byteSize:
|
|
368
|
-
sha256:
|
|
369
|
-
status:
|
|
482
|
+
var RunFileRecord = Schema3.Struct({
|
|
483
|
+
id: Schema3.String,
|
|
484
|
+
runId: Schema3.String,
|
|
485
|
+
step: Schema3.String,
|
|
486
|
+
name: Schema3.String,
|
|
487
|
+
caption: Schema3.optionalKey(Schema3.String),
|
|
488
|
+
contentType: Schema3.String,
|
|
489
|
+
kind: Schema3.Literals(RunFileKinds),
|
|
490
|
+
byteSize: Schema3.Int,
|
|
491
|
+
sha256: Schema3.String,
|
|
492
|
+
status: Schema3.Literals(RunFileStatuses)
|
|
370
493
|
});
|
|
371
494
|
var RunFileMakers = ["program", "agent", "check"];
|
|
372
|
-
var RunFileView =
|
|
373
|
-
id:
|
|
374
|
-
runId:
|
|
375
|
-
step:
|
|
376
|
-
stepAttemptId:
|
|
377
|
-
verificationId:
|
|
378
|
-
madeBy:
|
|
379
|
-
name:
|
|
380
|
-
caption:
|
|
381
|
-
kind:
|
|
382
|
-
contentType:
|
|
383
|
-
byteSize:
|
|
384
|
-
sha256:
|
|
385
|
-
status:
|
|
386
|
-
reason:
|
|
387
|
-
limit:
|
|
388
|
-
actual:
|
|
389
|
-
removedBy:
|
|
390
|
-
removedAt:
|
|
495
|
+
var RunFileView = Schema3.Struct({
|
|
496
|
+
id: Schema3.String,
|
|
497
|
+
runId: Schema3.String,
|
|
498
|
+
step: Schema3.String,
|
|
499
|
+
stepAttemptId: Schema3.optionalKey(Schema3.String),
|
|
500
|
+
verificationId: Schema3.optionalKey(Schema3.String),
|
|
501
|
+
madeBy: Schema3.Literals(RunFileMakers),
|
|
502
|
+
name: Schema3.String,
|
|
503
|
+
caption: Schema3.optionalKey(Schema3.String),
|
|
504
|
+
kind: Schema3.Literals(RunFileKinds),
|
|
505
|
+
contentType: Schema3.String,
|
|
506
|
+
byteSize: Schema3.Int,
|
|
507
|
+
sha256: Schema3.String,
|
|
508
|
+
status: Schema3.Literals(RunFileStatuses),
|
|
509
|
+
reason: Schema3.optionalKey(Schema3.String),
|
|
510
|
+
limit: Schema3.optionalKey(Schema3.Int),
|
|
511
|
+
actual: Schema3.optionalKey(Schema3.Int),
|
|
512
|
+
removedBy: Schema3.optionalKey(Schema3.String),
|
|
513
|
+
removedAt: Schema3.optionalKey(Timestamp),
|
|
391
514
|
createdAt: Timestamp
|
|
392
515
|
});
|
|
393
|
-
var RunFileList =
|
|
394
|
-
|
|
395
|
-
|
|
516
|
+
var RunFileList = Schema3.Union([
|
|
517
|
+
Schema3.Struct({ files: Schema3.Array(RunFileView) }),
|
|
518
|
+
Schema3.Struct({ count: Schema3.Int })
|
|
396
519
|
]);
|
|
397
|
-
var RunFileUrlsRequest =
|
|
398
|
-
ids:
|
|
399
|
-
use:
|
|
520
|
+
var RunFileUrlsRequest = Schema3.Struct({
|
|
521
|
+
ids: Schema3.Array(Id).check(Schema3.isMinLength(1), Schema3.isMaxLength(200)),
|
|
522
|
+
use: Schema3.Literals(["view", "download"])
|
|
400
523
|
});
|
|
401
|
-
var RunFileRemoveRequest =
|
|
402
|
-
note:
|
|
524
|
+
var RunFileRemoveRequest = Schema3.Struct({
|
|
525
|
+
note: Schema3.optionalKey(Schema3.String.check(Schema3.isMaxLength(500)))
|
|
403
526
|
});
|
|
404
|
-
var RunFileUrl =
|
|
405
|
-
var RunFileUrls =
|
|
527
|
+
var RunFileUrl = Schema3.Struct({ id: Schema3.String, url: Schema3.String, expiresAt: Timestamp });
|
|
528
|
+
var RunFileUrls = Schema3.Struct({ urls: Schema3.Array(RunFileUrl) });
|
|
406
529
|
var PresignedRequest = {
|
|
407
|
-
url:
|
|
408
|
-
headers:
|
|
409
|
-
expiresAt:
|
|
530
|
+
url: Schema3.String,
|
|
531
|
+
headers: Schema3.optionalKey(Schema3.Record(Schema3.String, Schema3.String)),
|
|
532
|
+
expiresAt: Schema3.String
|
|
410
533
|
};
|
|
411
|
-
var RunFilePartUrl =
|
|
412
|
-
var RunFileUpload =
|
|
413
|
-
|
|
414
|
-
|
|
534
|
+
var RunFilePartUrl = Schema3.Struct({ partNumber: Schema3.Int, ...PresignedRequest });
|
|
535
|
+
var RunFileUpload = Schema3.Union([
|
|
536
|
+
Schema3.Struct({ kind: Schema3.Literal("single"), ...PresignedRequest }),
|
|
537
|
+
Schema3.Struct({ kind: Schema3.Literal("multipart"), partSize: Schema3.Int, parts: Schema3.Array(RunFilePartUrl) })
|
|
415
538
|
]);
|
|
416
|
-
var UploadedRunFilePart =
|
|
417
|
-
var StepRunFileRequest =
|
|
418
|
-
name:
|
|
419
|
-
caption:
|
|
420
|
-
contentType:
|
|
421
|
-
byteSize:
|
|
422
|
-
sha256:
|
|
539
|
+
var UploadedRunFilePart = Schema3.Struct({ partNumber: Schema3.Int, etag: Schema3.String });
|
|
540
|
+
var StepRunFileRequest = Schema3.Struct({
|
|
541
|
+
name: Schema3.String.check(Schema3.isMinLength(1), Schema3.isMaxLength(255)),
|
|
542
|
+
caption: Schema3.optionalKey(Schema3.String.check(Schema3.isMaxLength(1000))),
|
|
543
|
+
contentType: Schema3.String.check(Schema3.isMinLength(1), Schema3.isMaxLength(255)),
|
|
544
|
+
byteSize: Schema3.Int.check(Schema3.isGreaterThanOrEqualTo(0)),
|
|
545
|
+
sha256: Schema3.String.check(Schema3.isPattern(/^[0-9a-f]{64}$/))
|
|
423
546
|
});
|
|
424
|
-
var RunFileSlotted =
|
|
547
|
+
var RunFileSlotted = Schema3.Struct({ file: RunFileRecord, upload: Schema3.optionalKey(RunFileUpload) });
|
|
425
548
|
// packages/core/src/crypto.ts
|
|
426
549
|
import { createHash, createHmac, createSign, randomBytes, timingSafeEqual } from "crypto";
|
|
427
550
|
function digestSha256(data, encoding) {
|
|
@@ -430,6 +553,12 @@ function digestSha256(data, encoding) {
|
|
|
430
553
|
hash.update(part);
|
|
431
554
|
return hash.digest(encoding);
|
|
432
555
|
}
|
|
556
|
+
function digestSha512(data, encoding) {
|
|
557
|
+
return createHash("sha512").update(data).digest(encoding);
|
|
558
|
+
}
|
|
559
|
+
function digestWith(algorithm, data, encoding) {
|
|
560
|
+
return createHash(algorithm).update(data).digest(encoding);
|
|
561
|
+
}
|
|
433
562
|
function sha256Hasher() {
|
|
434
563
|
const hash = createHash("sha256");
|
|
435
564
|
return {
|
|
@@ -440,97 +569,115 @@ function sha256Hasher() {
|
|
|
440
569
|
};
|
|
441
570
|
}
|
|
442
571
|
// packages/core/src/transcript.ts
|
|
443
|
-
import * as
|
|
444
|
-
var Text =
|
|
445
|
-
var AgentEvent =
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
kind:
|
|
449
|
-
callId:
|
|
450
|
-
name:
|
|
451
|
-
arguments:
|
|
572
|
+
import * as Schema4 from "effect/Schema";
|
|
573
|
+
var Text = Schema4.String.check(Schema4.isMaxLength(200000));
|
|
574
|
+
var AgentEvent = Schema4.Union([
|
|
575
|
+
Schema4.Struct({ kind: Schema4.Literal("message"), role: Schema4.Literals(["assistant", "user"]), text: Text }),
|
|
576
|
+
Schema4.Struct({
|
|
577
|
+
kind: Schema4.Literal("tool_call"),
|
|
578
|
+
callId: Schema4.String,
|
|
579
|
+
name: Schema4.String.check(Schema4.isMinLength(1), Schema4.isMaxLength(240)),
|
|
580
|
+
arguments: Schema4.Json
|
|
452
581
|
}),
|
|
453
|
-
|
|
454
|
-
kind:
|
|
455
|
-
callId:
|
|
582
|
+
Schema4.Struct({
|
|
583
|
+
kind: Schema4.Literal("tool_result"),
|
|
584
|
+
callId: Schema4.String,
|
|
456
585
|
output: Text,
|
|
457
|
-
isError:
|
|
586
|
+
isError: Schema4.optionalKey(Schema4.Boolean)
|
|
458
587
|
}),
|
|
459
|
-
|
|
460
|
-
kind:
|
|
461
|
-
path:
|
|
462
|
-
change:
|
|
588
|
+
Schema4.Struct({
|
|
589
|
+
kind: Schema4.Literal("file"),
|
|
590
|
+
path: Schema4.String.check(Schema4.isMinLength(1), Schema4.isMaxLength(4096)),
|
|
591
|
+
change: Schema4.Literals(["read", "changed"])
|
|
463
592
|
}),
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
kind:
|
|
467
|
-
callId:
|
|
468
|
-
questionId:
|
|
593
|
+
Schema4.Struct({ kind: Schema4.Literal("question"), text: Text }),
|
|
594
|
+
Schema4.Struct({
|
|
595
|
+
kind: Schema4.Literal("answer"),
|
|
596
|
+
callId: Schema4.optionalKey(Schema4.String),
|
|
597
|
+
questionId: Schema4.optionalKey(Schema4.String),
|
|
469
598
|
text: Text
|
|
470
599
|
}),
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
kind:
|
|
474
|
-
|
|
600
|
+
Schema4.Struct({ kind: Schema4.Literal("steer"), messageId: Id, text: Text }),
|
|
601
|
+
Schema4.Struct({
|
|
602
|
+
kind: Schema4.Literal("secret_refused"),
|
|
603
|
+
reference: Schema4.optionalKey(Schema4.String.check(Schema4.isMinLength(1), Schema4.isMaxLength(300))),
|
|
604
|
+
host: Schema4.String.check(Schema4.isMaxLength(300)),
|
|
605
|
+
reason: Schema4.String.check(Schema4.isMaxLength(500))
|
|
606
|
+
}),
|
|
607
|
+
Schema4.Struct({
|
|
608
|
+
kind: Schema4.Literal("lifecycle"),
|
|
609
|
+
state: Schema4.Literals(["started", "resumed", "parked", "finished", "failed", "canceled"])
|
|
475
610
|
})
|
|
476
611
|
]);
|
|
477
|
-
var TranscriptAppendEntry =
|
|
478
|
-
sequence:
|
|
612
|
+
var TranscriptAppendEntry = Schema4.Struct({
|
|
613
|
+
sequence: Schema4.Int.check(Schema4.isGreaterThanOrEqualTo(1)),
|
|
479
614
|
event: AgentEvent
|
|
480
615
|
});
|
|
481
|
-
var TranscriptEntry =
|
|
616
|
+
var TranscriptEntry = Schema4.Struct({
|
|
482
617
|
stepAttemptId: Id,
|
|
483
|
-
sequence:
|
|
618
|
+
sequence: Schema4.Int.check(Schema4.isGreaterThanOrEqualTo(1)),
|
|
484
619
|
event: AgentEvent,
|
|
485
620
|
createdAt: Timestamp
|
|
486
621
|
});
|
|
487
|
-
var TranscriptPage =
|
|
488
|
-
items:
|
|
489
|
-
next:
|
|
490
|
-
previous:
|
|
622
|
+
var TranscriptPage = Schema4.Struct({
|
|
623
|
+
items: Schema4.Array(TranscriptEntry),
|
|
624
|
+
next: Schema4.optionalKey(Schema4.Int),
|
|
625
|
+
previous: Schema4.optionalKey(Schema4.Int)
|
|
491
626
|
});
|
|
492
|
-
var TranscriptRetention =
|
|
493
|
-
days:
|
|
627
|
+
var TranscriptRetention = Schema4.Struct({
|
|
628
|
+
days: Schema4.NullOr(Schema4.Int.check(Schema4.isGreaterThanOrEqualTo(1)))
|
|
494
629
|
});
|
|
495
630
|
var MaxTranscriptSearchLimit = 50;
|
|
496
|
-
var TranscriptSearchQuery =
|
|
497
|
-
q:
|
|
498
|
-
limit:
|
|
631
|
+
var TranscriptSearchQuery = Schema4.Struct({
|
|
632
|
+
q: Schema4.String.check(Schema4.isMinLength(1), Schema4.isMaxLength(200)),
|
|
633
|
+
limit: Schema4.optionalKey(Numeric.check(isWholeNumber, Schema4.isGreaterThanOrEqualTo(1), Schema4.isLessThanOrEqualTo(MaxTranscriptSearchLimit)))
|
|
499
634
|
});
|
|
500
|
-
var TranscriptSearchHit =
|
|
635
|
+
var TranscriptSearchHit = Schema4.Struct({
|
|
501
636
|
runId: Id,
|
|
502
|
-
loop:
|
|
503
|
-
task:
|
|
637
|
+
loop: Schema4.String,
|
|
638
|
+
task: Schema4.optionalKey(Schema4.Struct({ id: Id, key: Schema4.String, title: Schema4.String })),
|
|
504
639
|
stepAttemptId: Id,
|
|
505
|
-
node:
|
|
506
|
-
step:
|
|
507
|
-
attempt:
|
|
508
|
-
agent:
|
|
640
|
+
node: Schema4.optionalKey(Schema4.String),
|
|
641
|
+
step: Schema4.String,
|
|
642
|
+
attempt: Schema4.Int,
|
|
643
|
+
agent: Schema4.optionalKey(Schema4.String),
|
|
509
644
|
ranAt: Timestamp,
|
|
510
|
-
sequence:
|
|
511
|
-
matches:
|
|
512
|
-
excerpt:
|
|
645
|
+
sequence: Schema4.Int,
|
|
646
|
+
matches: Schema4.Int,
|
|
647
|
+
excerpt: Schema4.String
|
|
513
648
|
});
|
|
514
|
-
var TranscriptSearchResult =
|
|
515
|
-
items:
|
|
516
|
-
total:
|
|
649
|
+
var TranscriptSearchResult = Schema4.Struct({
|
|
650
|
+
items: Schema4.Array(TranscriptSearchHit),
|
|
651
|
+
total: Schema4.Int
|
|
517
652
|
});
|
|
518
653
|
// packages/core/src/run-journal.ts
|
|
519
654
|
import * as Effect from "effect/Effect";
|
|
520
655
|
import * as Exit from "effect/Exit";
|
|
521
|
-
import * as
|
|
656
|
+
import * as Schema5 from "effect/Schema";
|
|
522
657
|
var journalEntryMaxBytes = 256 * 1024;
|
|
523
|
-
var JournalExit =
|
|
524
|
-
var encodeJournalExit = (exit) =>
|
|
525
|
-
var decodeJournalExit =
|
|
526
|
-
var JournalStepFailed =
|
|
527
|
-
var JournalChildFailed =
|
|
528
|
-
step:
|
|
529
|
-
loop:
|
|
530
|
-
reason:
|
|
658
|
+
var JournalExit = Schema5.toCodecJson(Schema5.Exit(Schema5.Json, Schema5.Json, Schema5.Defect()));
|
|
659
|
+
var encodeJournalExit = (exit) => Schema5.encodeUnknownEffect(JournalExit)(Exit.map(exit, (value) => value ?? null));
|
|
660
|
+
var decodeJournalExit = Schema5.decodeUnknownEffect(JournalExit);
|
|
661
|
+
var JournalStepFailed = Schema5.TaggedStruct("StepFailed", { step: Schema5.String, reason: Schema5.String });
|
|
662
|
+
var JournalChildFailed = Schema5.TaggedStruct("ChildFailed", {
|
|
663
|
+
step: Schema5.String,
|
|
664
|
+
loop: Schema5.String,
|
|
665
|
+
reason: Schema5.String
|
|
531
666
|
});
|
|
532
|
-
var JournalWaitTimedOut =
|
|
667
|
+
var JournalWaitTimedOut = Schema5.TaggedStruct("WaitTimedOut", { step: Schema5.String, event: Schema5.String });
|
|
533
668
|
var journalEntryBytes = (entry) => new TextEncoder().encode(JSON.stringify(entry)).byteLength;
|
|
669
|
+
// packages/core/src/kit-setup.ts
|
|
670
|
+
import * as Schema6 from "effect/Schema";
|
|
671
|
+
var KitSetup = Schema6.Struct({
|
|
672
|
+
...AgentEnvironmentFragment.fields,
|
|
673
|
+
instructions: Schema6.optionalKey(Schema6.String.check(Schema6.isMinLength(1)))
|
|
674
|
+
});
|
|
675
|
+
var SetupFile = Schema6.Union([
|
|
676
|
+
Schema6.Struct({ utf8: Schema6.String }),
|
|
677
|
+
Schema6.Struct({ base64: Schema6.String })
|
|
678
|
+
]);
|
|
679
|
+
var SetupArchive = Schema6.Struct({ setup: KitSetup, files: Schema6.Record(Schema6.String, SetupFile) });
|
|
680
|
+
var kitmanMcpServer = "kitman";
|
|
534
681
|
// packages/sdk/src/program/engine.ts
|
|
535
682
|
import * as Cause from "effect/Cause";
|
|
536
683
|
import * as Clock from "effect/Clock";
|
|
@@ -544,6 +691,7 @@ import * as Layer from "effect/Layer";
|
|
|
544
691
|
import * as Option from "effect/Option";
|
|
545
692
|
import { isPlatformError } from "effect/PlatformError";
|
|
546
693
|
import * as Schema8 from "effect/Schema";
|
|
694
|
+
import * as SchemaIssue from "effect/SchemaIssue";
|
|
547
695
|
import * as Stream from "effect/Stream";
|
|
548
696
|
import * as HttpClient from "effect/http/HttpClient";
|
|
549
697
|
import * as HttpClientRequest from "effect/http/HttpClientRequest";
|
|
@@ -553,7 +701,7 @@ import * as HttpClientResponse from "effect/http/HttpClientResponse";
|
|
|
553
701
|
import * as Schema7 from "effect/Schema";
|
|
554
702
|
import { Rpc, RpcGroup, RpcMiddleware } from "effect/rpc";
|
|
555
703
|
var RunnerHeaders = { runnerId: "x-kitman-runner-id", protocolVersion: "x-kitman-rpc-protocol" };
|
|
556
|
-
var RunnerRpcProtocolVersion =
|
|
704
|
+
var RunnerRpcProtocolVersion = 5;
|
|
557
705
|
|
|
558
706
|
class RunnerRpcError extends Schema7.TaggedError()("RunnerRpcError", {
|
|
559
707
|
code: Schema7.String,
|
|
@@ -630,7 +778,7 @@ var ProgramOutcome = Schema7.Union([
|
|
|
630
778
|
Schema7.Struct({ status: Schema7.Literal("failed"), failureSummary: Schema7.String })
|
|
631
779
|
]);
|
|
632
780
|
|
|
633
|
-
class
|
|
781
|
+
class RunnerReplicaRpcs extends RpcGroup.make(Rpc.make("Claim", {
|
|
634
782
|
payload: WorkUnitClaimInput,
|
|
635
783
|
success: WorkUnitClaimResult,
|
|
636
784
|
error: RunnerRpcError
|
|
@@ -644,7 +792,70 @@ class RunnerRpcs extends RpcGroup.make(Rpc.make("Claim", {
|
|
|
644
792
|
}), Rpc.make("Release", {
|
|
645
793
|
payload: WorkUnitReleaseInput,
|
|
646
794
|
error: RunnerRpcError
|
|
647
|
-
}), Rpc.make("
|
|
795
|
+
}), Rpc.make("Signals", {
|
|
796
|
+
payload: { runnerReplicaId: Schema7.String },
|
|
797
|
+
success: RunnerSignal,
|
|
798
|
+
error: RunnerRpcError,
|
|
799
|
+
stream: true
|
|
800
|
+
}), Rpc.make("ReportSteer", {
|
|
801
|
+
payload: { workUnitId: Schema7.String, messageId: Schema7.String, delivered: Schema7.Boolean },
|
|
802
|
+
success: Schema7.Void,
|
|
803
|
+
error: RunnerRpcError
|
|
804
|
+
}), Rpc.make("AppendTranscript", {
|
|
805
|
+
payload: { workUnitId: Schema7.String, entries: Schema7.Array(TranscriptAppendEntry).check(Schema7.isMaxLength(100)) },
|
|
806
|
+
success: Schema7.Void,
|
|
807
|
+
error: RunnerRpcError
|
|
808
|
+
}), Rpc.make("CreateCheckpointFile", {
|
|
809
|
+
payload: { lease: ProgramLease, byteSize: Schema7.Int, sha256: Schema7.String },
|
|
810
|
+
success: Schema7.Struct({ file: RunFileRecord, upload: Schema7.optional(RunFileUpload) }),
|
|
811
|
+
error: Schema7.Union([RunnerRpcError, RunFileRefused])
|
|
812
|
+
}), Rpc.make("CheckpointFileParts", {
|
|
813
|
+
payload: { lease: ProgramLease, fileId: Schema7.String, partNumbers: Schema7.Array(Schema7.Int) },
|
|
814
|
+
success: Schema7.Struct({ parts: Schema7.Array(RunFilePartUrl) }),
|
|
815
|
+
error: RunnerRpcError
|
|
816
|
+
}), Rpc.make("CompleteCheckpointFile", {
|
|
817
|
+
payload: { lease: ProgramLease, fileId: Schema7.String, parts: Schema7.optional(Schema7.Array(UploadedRunFilePart)) },
|
|
818
|
+
success: RunFileRecord,
|
|
819
|
+
error: RunnerRpcError
|
|
820
|
+
}), Rpc.make("SaveCheckpoint", {
|
|
821
|
+
payload: { lease: ProgramLease, checkpoint: StepCheckpoint },
|
|
822
|
+
success: Schema7.Void,
|
|
823
|
+
error: RunnerRpcError
|
|
824
|
+
}), Rpc.make("ResumeCheckpoint", {
|
|
825
|
+
payload: { lease: ProgramLease },
|
|
826
|
+
success: Schema7.UndefinedOr(ResumedCheckpoint),
|
|
827
|
+
error: RunnerRpcError
|
|
828
|
+
}), Rpc.make("SettledCheckpoints", {
|
|
829
|
+
success: Schema7.Array(Schema7.Struct({
|
|
830
|
+
stepAttemptId: Schema7.String,
|
|
831
|
+
ref: Schema7.optionalKey(Schema7.String),
|
|
832
|
+
repoBinding: Schema7.optionalKey(WorkUnitRepoBinding)
|
|
833
|
+
})),
|
|
834
|
+
error: RunnerRpcError
|
|
835
|
+
}), Rpc.make("ForgetCheckpoints", {
|
|
836
|
+
payload: { stepAttemptIds: Schema7.Array(Schema7.String) },
|
|
837
|
+
success: Schema7.Void,
|
|
838
|
+
error: RunnerRpcError
|
|
839
|
+
}), Rpc.make("GitCredential", {
|
|
840
|
+
payload: { repoBindingId: Schema7.String },
|
|
841
|
+
success: Schema7.UndefinedOr(Schema7.Struct({ username: Schema7.String, password: Schema7.String })),
|
|
842
|
+
error: RunnerRpcError
|
|
843
|
+
}), Rpc.make("Bundle", {
|
|
844
|
+
payload: { digest: Schema7.String },
|
|
845
|
+
success: Schema7.Struct({ bundle: Schema7.String }),
|
|
846
|
+
error: RunnerRpcError
|
|
847
|
+
}), Rpc.make("SettledRuns", {
|
|
848
|
+
payload: { runIds: Schema7.Array(Schema7.String) },
|
|
849
|
+
success: Schema7.Array(Schema7.String),
|
|
850
|
+
error: RunnerRpcError
|
|
851
|
+
}), Rpc.make("KnownEvidence", {
|
|
852
|
+
payload: { lease: ProgramLease, trees: Schema7.Array(Schema7.String) },
|
|
853
|
+
success: Schema7.Array(Schema7.Struct({ tree: Schema7.String, name: Schema7.String, command: Schema7.String })),
|
|
854
|
+
error: RunnerRpcError
|
|
855
|
+
})).middleware(RunnerAuthentication) {
|
|
856
|
+
}
|
|
857
|
+
|
|
858
|
+
class RunnerJournalRpcs extends RpcGroup.make(Rpc.make("RecordActivity", {
|
|
648
859
|
payload: { lease: ProgramLease, name: Schema7.String, attempt: Schema7.Int, exit: Schema7.Json },
|
|
649
860
|
error: RunnerRpcError
|
|
650
861
|
}), Rpc.make("DeferredDone", {
|
|
@@ -653,13 +864,22 @@ class RunnerRpcs extends RpcGroup.make(Rpc.make("Claim", {
|
|
|
653
864
|
}), Rpc.make("ScheduleClock", {
|
|
654
865
|
payload: { lease: ProgramLease, name: Schema7.String, deferredName: Schema7.String, durationMillis: Schema7.Int },
|
|
655
866
|
error: RunnerRpcError
|
|
656
|
-
}), Rpc.make("
|
|
867
|
+
}), Rpc.make("Suspend", { payload: { lease: ProgramLease }, error: RunnerRpcError }), Rpc.make("FinishProgram", { payload: { lease: ProgramLease, outcome: ProgramOutcome }, error: RunnerRpcError })).middleware(RunnerAuthentication) {
|
|
868
|
+
}
|
|
869
|
+
|
|
870
|
+
class RunnerCapabilityRpcs extends RpcGroup.make(Rpc.make("PutQuestion", {
|
|
657
871
|
payload: {
|
|
658
872
|
lease: ProgramLease,
|
|
659
873
|
step: Schema7.String,
|
|
660
874
|
prompt: Schema7.String,
|
|
661
875
|
options: Schema7.optional(Schema7.Array(Schema7.String)),
|
|
876
|
+
optionDescriptions: Schema7.optional(Schema7.Record(Schema7.String, Schema7.String)),
|
|
877
|
+
recommended: Schema7.optional(Schema7.String),
|
|
878
|
+
recommendationReason: Schema7.optional(Schema7.String),
|
|
879
|
+
informationOnly: Schema7.optional(Schema7.Boolean),
|
|
662
880
|
verification: Schema7.optional(SuggestedVerification),
|
|
881
|
+
default: Schema7.optional(Schema7.String),
|
|
882
|
+
timeoutMillis: Schema7.optional(Schema7.Finite),
|
|
663
883
|
deferredName: Schema7.String
|
|
664
884
|
},
|
|
665
885
|
success: Schema7.Struct({ questionId: Schema7.String }),
|
|
@@ -672,8 +892,11 @@ class RunnerRpcs extends RpcGroup.make(Rpc.make("Claim", {
|
|
|
672
892
|
role: Schema7.String,
|
|
673
893
|
agentId: Schema7.String,
|
|
674
894
|
prompt: Schema7.String,
|
|
895
|
+
skill: Schema7.optionalKey(Schema7.String.check(Schema7.isMinLength(1))),
|
|
675
896
|
outputSchema: Schema7.Json,
|
|
676
|
-
secrets: Schema7.optionalKey(Schema7.Array(Schema7.String))
|
|
897
|
+
secrets: Schema7.optionalKey(Schema7.Array(Schema7.String)),
|
|
898
|
+
timeoutMillis: Schema7.optionalKey(Schema7.Int),
|
|
899
|
+
mergeTarget: Schema7.optionalKey(Schema7.String.check(Schema7.isMinLength(1)))
|
|
677
900
|
},
|
|
678
901
|
success: Schema7.Struct({ stepAttemptId: Schema7.String }),
|
|
679
902
|
error: RunnerRpcError
|
|
@@ -683,14 +906,17 @@ class RunnerRpcs extends RpcGroup.make(Rpc.make("Claim", {
|
|
|
683
906
|
step: Schema7.String,
|
|
684
907
|
deferredName: Schema7.String,
|
|
685
908
|
revision: Schema7.optionalKey(Schema7.String),
|
|
686
|
-
checks: Schema7.optional(Schema7.Array(Schema7.String))
|
|
909
|
+
checks: Schema7.optional(Schema7.Array(Schema7.String)),
|
|
910
|
+
suggested: Schema7.optionalKey(Schema7.Array(ApprovedCheck)),
|
|
911
|
+
measure: Schema7.optionalKey(Schema7.Struct({
|
|
912
|
+
base: Schema7.optionalKey(Schema7.String),
|
|
913
|
+
plan: MeasurePlan2,
|
|
914
|
+
samples: Schema7.Int,
|
|
915
|
+
calibrate: Schema7.Boolean
|
|
916
|
+
}))
|
|
687
917
|
},
|
|
688
918
|
success: Schema7.Struct({ verificationId: Schema7.String }),
|
|
689
919
|
error: RunnerRpcError
|
|
690
|
-
}), Rpc.make("KnownEvidence", {
|
|
691
|
-
payload: { lease: ProgramLease, trees: Schema7.Array(Schema7.String) },
|
|
692
|
-
success: Schema7.Array(Schema7.Struct({ tree: Schema7.String, name: Schema7.String, command: Schema7.String })),
|
|
693
|
-
error: RunnerRpcError
|
|
694
920
|
}), Rpc.make("AwaitEvent", {
|
|
695
921
|
payload: {
|
|
696
922
|
lease: ProgramLease,
|
|
@@ -698,7 +924,22 @@ class RunnerRpcs extends RpcGroup.make(Rpc.make("Claim", {
|
|
|
698
924
|
deferredName: Schema7.String,
|
|
699
925
|
event: Schema7.String,
|
|
700
926
|
filter: Schema7.optional(Schema7.Record(Schema7.String, Schema7.Union([EventFilterValue, Schema7.Array(EventFilterValue)]))),
|
|
701
|
-
timeoutMillis: Schema7.Int
|
|
927
|
+
timeoutMillis: Schema7.Int,
|
|
928
|
+
since: Schema7.optionalKey(Schema7.String),
|
|
929
|
+
or: Schema7.optionalKey(Schema7.Array(Schema7.Struct({
|
|
930
|
+
event: Schema7.String,
|
|
931
|
+
filter: Schema7.optionalKey(Schema7.Record(Schema7.String, Schema7.Union([EventFilterValue, Schema7.Array(EventFilterValue)]))),
|
|
932
|
+
since: Schema7.optionalKey(Schema7.String)
|
|
933
|
+
})))
|
|
934
|
+
},
|
|
935
|
+
error: RunnerRpcError
|
|
936
|
+
}), Rpc.make("ClaimResource", {
|
|
937
|
+
payload: {
|
|
938
|
+
lease: ProgramLease,
|
|
939
|
+
step: Schema7.String,
|
|
940
|
+
deferredName: Schema7.String,
|
|
941
|
+
resource: ResourceName,
|
|
942
|
+
action: Schema7.Literals(["claim", "take_over", "let_go"])
|
|
702
943
|
},
|
|
703
944
|
error: RunnerRpcError
|
|
704
945
|
}), Rpc.make("AdmitChild", {
|
|
@@ -723,26 +964,6 @@ class RunnerRpcs extends RpcGroup.make(Rpc.make("Claim", {
|
|
|
723
964
|
},
|
|
724
965
|
success: Schema7.Struct({ artifactId: Schema7.String }),
|
|
725
966
|
error: RunnerRpcError
|
|
726
|
-
}), Rpc.make("CreateRunFile", {
|
|
727
|
-
payload: {
|
|
728
|
-
lease: ProgramLease,
|
|
729
|
-
step: Schema7.String,
|
|
730
|
-
name: Schema7.String,
|
|
731
|
-
caption: Schema7.optional(Schema7.String),
|
|
732
|
-
contentType: Schema7.String,
|
|
733
|
-
byteSize: Schema7.Int,
|
|
734
|
-
sha256: Schema7.String
|
|
735
|
-
},
|
|
736
|
-
success: Schema7.Struct({ file: RunFileRecord, upload: Schema7.optional(RunFileUpload) }),
|
|
737
|
-
error: Schema7.Union([RunnerRpcError, RunFileRefused])
|
|
738
|
-
}), Rpc.make("RunFileParts", {
|
|
739
|
-
payload: { lease: ProgramLease, fileId: Schema7.String, partNumbers: Schema7.Array(Schema7.Int) },
|
|
740
|
-
success: Schema7.Struct({ parts: Schema7.Array(RunFilePartUrl) }),
|
|
741
|
-
error: RunnerRpcError
|
|
742
|
-
}), Rpc.make("CompleteRunFile", {
|
|
743
|
-
payload: { lease: ProgramLease, fileId: Schema7.String, parts: Schema7.optional(Schema7.Array(UploadedRunFilePart)) },
|
|
744
|
-
success: RunFileRecord,
|
|
745
|
-
error: RunnerRpcError
|
|
746
967
|
}), Rpc.make("RecordNote", {
|
|
747
968
|
payload: {
|
|
748
969
|
lease: ProgramLease,
|
|
@@ -756,7 +977,14 @@ class RunnerRpcs extends RpcGroup.make(Rpc.make("Claim", {
|
|
|
756
977
|
lease: ProgramLease,
|
|
757
978
|
step: Schema7.String,
|
|
758
979
|
effect: Schema7.Union([
|
|
759
|
-
Schema7.Struct({
|
|
980
|
+
Schema7.Struct({
|
|
981
|
+
kind: Schema7.Literal("post_comment"),
|
|
982
|
+
changeRequestId: Schema7.String,
|
|
983
|
+
body: Schema7.String,
|
|
984
|
+
threadId: Schema7.optionalKey(Schema7.String),
|
|
985
|
+
summary: Schema7.optionalKey(Schema7.String),
|
|
986
|
+
anchors: Schema7.optionalKey(Schema7.Array(Schema7.Struct({ file: Schema7.String, line: Schema7.Int, body: Schema7.String })))
|
|
987
|
+
}),
|
|
760
988
|
Schema7.Struct({
|
|
761
989
|
kind: Schema7.Literal("change_request"),
|
|
762
990
|
title: Schema7.String,
|
|
@@ -772,14 +1000,33 @@ class RunnerRpcs extends RpcGroup.make(Rpc.make("Claim", {
|
|
|
772
1000
|
},
|
|
773
1001
|
success: Schema7.UndefinedOr(Schema7.Struct({ id: Schema7.String, number: Schema7.String, url: Schema7.String })),
|
|
774
1002
|
error: RunnerRpcError
|
|
1003
|
+
}), Rpc.make("AlertTask", {
|
|
1004
|
+
payload: {
|
|
1005
|
+
lease: ProgramLease,
|
|
1006
|
+
step: Schema7.String,
|
|
1007
|
+
fingerprint: Schema7.String,
|
|
1008
|
+
title: Schema7.String,
|
|
1009
|
+
windowHours: Schema7.Int,
|
|
1010
|
+
resolved: Schema7.optionalKey(Schema7.Boolean),
|
|
1011
|
+
priority: Schema7.optionalKey(Schema7.Literals(["urgent", "high", "medium", "low"]))
|
|
1012
|
+
},
|
|
1013
|
+
success: Schema7.Struct({
|
|
1014
|
+
taskId: Schema7.optionalKey(Schema7.String),
|
|
1015
|
+
created: Schema7.Boolean,
|
|
1016
|
+
resolved: Schema7.optionalKey(Schema7.Boolean),
|
|
1017
|
+
joined: Schema7.optionalKey(Schema7.Struct({ kind: Schema7.Literals(["run", "recent"]), runId: Schema7.String }))
|
|
1018
|
+
}),
|
|
1019
|
+
error: RunnerRpcError
|
|
775
1020
|
}), Rpc.make("ReadTranscripts", {
|
|
776
1021
|
payload: { lease: ProgramLease, step: Schema7.String, days: Schema7.Int },
|
|
777
1022
|
success: Schema7.Struct({
|
|
778
1023
|
runs: Schema7.Array(Schema7.Struct({
|
|
779
1024
|
runId: Schema7.String,
|
|
780
1025
|
loopId: Schema7.String,
|
|
1026
|
+
status: Schema7.optionalKey(Schema7.Literals(["completed", "failed", "canceled", "expired"])),
|
|
781
1027
|
teamId: Schema7.optionalKey(Schema7.String),
|
|
782
1028
|
failure: Schema7.optionalKey(Schema7.String),
|
|
1029
|
+
retried: Schema7.optionalKey(Schema7.Boolean),
|
|
783
1030
|
entries: Schema7.Array(Schema7.Struct({
|
|
784
1031
|
stepAttemptId: Schema7.String,
|
|
785
1032
|
sequence: Schema7.Int,
|
|
@@ -789,6 +1036,65 @@ class RunnerRpcs extends RpcGroup.make(Rpc.make("Claim", {
|
|
|
789
1036
|
}))
|
|
790
1037
|
}),
|
|
791
1038
|
error: RunnerRpcError
|
|
1039
|
+
}), Rpc.make("PipelineStatus", {
|
|
1040
|
+
payload: { lease: ProgramLease, step: Schema7.String, changeRequestId: Schema7.String },
|
|
1041
|
+
success: Schema7.Struct({
|
|
1042
|
+
head: Schema7.String,
|
|
1043
|
+
status: Schema7.Literals(["none", "running", "success", "failed", "canceled"]),
|
|
1044
|
+
source: Schema7.Literals(["forge", "reported"]),
|
|
1045
|
+
jobs: Schema7.Array(Schema7.Struct({
|
|
1046
|
+
name: Schema7.String,
|
|
1047
|
+
status: Schema7.Literals(["running", "success", "failed", "skipped"]),
|
|
1048
|
+
url: Schema7.optionalKey(Schema7.String),
|
|
1049
|
+
logTail: Schema7.optionalKey(Schema7.String)
|
|
1050
|
+
})),
|
|
1051
|
+
readAt: Schema7.optionalKey(Schema7.String),
|
|
1052
|
+
runnerChecks: Schema7.optionalKey(Schema7.Array(Schema7.String))
|
|
1053
|
+
}),
|
|
1054
|
+
error: RunnerRpcError
|
|
1055
|
+
}), Rpc.make("ReportPipeline", {
|
|
1056
|
+
payload: { lease: ProgramLease, step: Schema7.String, changeRequestId: Schema7.String, verification: Schema7.String },
|
|
1057
|
+
success: Schema7.Struct({ head: Schema7.String, status: Schema7.Literals(["success", "failed"]) }),
|
|
1058
|
+
error: RunnerRpcError
|
|
1059
|
+
}), Rpc.make("ReviewThreads", {
|
|
1060
|
+
payload: { lease: ProgramLease, step: Schema7.String, changeRequestId: Schema7.String },
|
|
1061
|
+
success: Schema7.Struct({
|
|
1062
|
+
threads: Schema7.Array(Schema7.Struct({
|
|
1063
|
+
id: Schema7.String,
|
|
1064
|
+
path: Schema7.optionalKey(Schema7.String),
|
|
1065
|
+
line: Schema7.optionalKey(Schema7.Int),
|
|
1066
|
+
outdated: Schema7.optionalKey(Schema7.Boolean),
|
|
1067
|
+
comments: Schema7.Array(Schema7.Struct({ author: Schema7.optionalKey(Schema7.String), body: Schema7.String }))
|
|
1068
|
+
}))
|
|
1069
|
+
}),
|
|
1070
|
+
error: RunnerRpcError
|
|
1071
|
+
}), Rpc.make("OpenChangeRequests", {
|
|
1072
|
+
payload: { lease: ProgramLease, step: Schema7.String, authors: Schema7.NonEmptyArray(Schema7.String) },
|
|
1073
|
+
success: Schema7.Struct({
|
|
1074
|
+
changeRequests: Schema7.Array(Schema7.Struct({
|
|
1075
|
+
number: Schema7.String,
|
|
1076
|
+
title: Schema7.String,
|
|
1077
|
+
body: Schema7.String,
|
|
1078
|
+
url: Schema7.String,
|
|
1079
|
+
author: Schema7.String,
|
|
1080
|
+
sourceBranch: Schema7.String,
|
|
1081
|
+
head: Schema7.String
|
|
1082
|
+
}))
|
|
1083
|
+
}),
|
|
1084
|
+
error: RunnerRpcError
|
|
1085
|
+
}), Rpc.make("OwnChangeRequests", {
|
|
1086
|
+
payload: { lease: ProgramLease, step: Schema7.String },
|
|
1087
|
+
success: Schema7.Struct({
|
|
1088
|
+
changeRequests: Schema7.Array(Schema7.Struct({
|
|
1089
|
+
id: Schema7.String,
|
|
1090
|
+
number: Schema7.String,
|
|
1091
|
+
url: Schema7.String,
|
|
1092
|
+
title: Schema7.String,
|
|
1093
|
+
sourceBranch: Schema7.String,
|
|
1094
|
+
body: Schema7.String
|
|
1095
|
+
}))
|
|
1096
|
+
}),
|
|
1097
|
+
error: RunnerRpcError
|
|
792
1098
|
}), Rpc.make("Propose", {
|
|
793
1099
|
payload: {
|
|
794
1100
|
lease: ProgramLease,
|
|
@@ -805,11 +1111,16 @@ class RunnerRpcs extends RpcGroup.make(Rpc.make("Claim", {
|
|
|
805
1111
|
title: Schema7.String,
|
|
806
1112
|
description: Schema7.String,
|
|
807
1113
|
teamId: Schema7.optionalKey(Schema7.String),
|
|
1114
|
+
key: Schema7.optionalKey(Schema7.String),
|
|
808
1115
|
citations: Schema7.NonEmptyArray(Schema7.Struct({ runId: Schema7.String, stepAttemptId: Schema7.String, sequence: Schema7.Int }))
|
|
809
1116
|
})
|
|
810
1117
|
])
|
|
811
1118
|
},
|
|
812
|
-
success: Schema7.Struct({
|
|
1119
|
+
success: Schema7.Struct({
|
|
1120
|
+
kind: Schema7.Literals(["memory", "task"]),
|
|
1121
|
+
id: Schema7.String,
|
|
1122
|
+
matched: Schema7.optionalKey(Schema7.Boolean)
|
|
1123
|
+
}),
|
|
813
1124
|
error: RunnerRpcError
|
|
814
1125
|
}), Rpc.make("ReadProject", {
|
|
815
1126
|
payload: { lease: ProgramLease, step: Schema7.String, projectId: Schema7.String },
|
|
@@ -852,13 +1163,14 @@ class RunnerRpcs extends RpcGroup.make(Rpc.make("Claim", {
|
|
|
852
1163
|
}), Rpc.make("CreatePlanTasks", {
|
|
853
1164
|
payload: {
|
|
854
1165
|
lease: ProgramLease,
|
|
1166
|
+
projectId: Schema7.optionalKey(Schema7.String),
|
|
855
1167
|
tickets: Schema7.Array(Schema7.Struct({
|
|
856
1168
|
key: Schema7.String,
|
|
857
1169
|
title: Schema7.String,
|
|
858
1170
|
body: Schema7.String,
|
|
859
1171
|
acceptanceCriteria: Schema7.Array(Schema7.String),
|
|
860
1172
|
blockedBy: Schema7.Array(Schema7.String),
|
|
861
|
-
outcome: Schema7.optionalKey(Schema7.Literals(["feature", "bug", "refactor", "investigation", "docs", "migration"]))
|
|
1173
|
+
outcome: Schema7.optionalKey(Schema7.Literals(["feature", "bug", "refactor", "investigation", "docs", "migration", "performance"]))
|
|
862
1174
|
}))
|
|
863
1175
|
},
|
|
864
1176
|
success: Schema7.Array(Schema7.Struct({ key: Schema7.String, taskId: Schema7.String })),
|
|
@@ -868,12 +1180,53 @@ class RunnerRpcs extends RpcGroup.make(Rpc.make("Claim", {
|
|
|
868
1180
|
success: Schema7.Struct({ repoBindingId: Schema7.String, branch: Schema7.String, revision: Schema7.String }),
|
|
869
1181
|
error: RunnerRpcError
|
|
870
1182
|
}), Rpc.make("MergeChangeRequest", {
|
|
871
|
-
payload: {
|
|
1183
|
+
payload: {
|
|
1184
|
+
lease: ProgramLease,
|
|
1185
|
+
step: Schema7.String,
|
|
1186
|
+
changeRequestId: Schema7.String,
|
|
1187
|
+
head: Schema7.optionalKey(Schema7.String)
|
|
1188
|
+
},
|
|
872
1189
|
success: Schema7.Union([
|
|
873
1190
|
Schema7.Struct({ status: Schema7.Literal("merged"), revision: Schema7.String }),
|
|
874
|
-
Schema7.Struct({ status: Schema7.Literal("conflict") })
|
|
1191
|
+
Schema7.Struct({ status: Schema7.Literal("conflict") }),
|
|
1192
|
+
Schema7.Struct({ status: Schema7.Literal("moved"), head: Schema7.String })
|
|
875
1193
|
]),
|
|
876
1194
|
error: RunnerRpcError
|
|
1195
|
+
}), Rpc.make("ApproveChangeRequest", {
|
|
1196
|
+
payload: {
|
|
1197
|
+
lease: ProgramLease,
|
|
1198
|
+
step: Schema7.String,
|
|
1199
|
+
changeRequestId: Schema7.String,
|
|
1200
|
+
head: Schema7.String,
|
|
1201
|
+
summary: Schema7.String,
|
|
1202
|
+
review: Schema7.optionalKey(Schema7.String),
|
|
1203
|
+
carries: Schema7.optionalKey(Schema7.String)
|
|
1204
|
+
},
|
|
1205
|
+
success: Schema7.Union([
|
|
1206
|
+
Schema7.Struct({ approved: Schema7.Literal(true), reviewId: Schema7.String }),
|
|
1207
|
+
Schema7.Struct({ approved: Schema7.Literal(false), reason: Schema7.String })
|
|
1208
|
+
]),
|
|
1209
|
+
error: RunnerRpcError
|
|
1210
|
+
}), Rpc.make("CloseChangeRequest", {
|
|
1211
|
+
payload: {
|
|
1212
|
+
lease: ProgramLease,
|
|
1213
|
+
step: Schema7.String,
|
|
1214
|
+
number: Schema7.String,
|
|
1215
|
+
head: Schema7.String,
|
|
1216
|
+
note: Schema7.String
|
|
1217
|
+
},
|
|
1218
|
+
success: Schema7.Struct({ closed: Schema7.Boolean, head: Schema7.optionalKey(Schema7.String) }),
|
|
1219
|
+
error: RunnerRpcError
|
|
1220
|
+
}), Rpc.make("RerunPipeline", {
|
|
1221
|
+
payload: {
|
|
1222
|
+
lease: ProgramLease,
|
|
1223
|
+
step: Schema7.String,
|
|
1224
|
+
changeRequestId: Schema7.optionalKey(Schema7.String),
|
|
1225
|
+
ref: Schema7.optionalKey(Schema7.String),
|
|
1226
|
+
all: Schema7.optionalKey(Schema7.Boolean)
|
|
1227
|
+
},
|
|
1228
|
+
success: Schema7.Struct({ head: Schema7.String, pipelines: Schema7.Int }),
|
|
1229
|
+
error: RunnerRpcError
|
|
877
1230
|
}), Rpc.make("PublishRelease", {
|
|
878
1231
|
payload: {
|
|
879
1232
|
lease: ProgramLease,
|
|
@@ -885,64 +1238,37 @@ class RunnerRpcs extends RpcGroup.make(Rpc.make("Claim", {
|
|
|
885
1238
|
},
|
|
886
1239
|
success: Schema7.Struct({ tag: Schema7.String, revision: Schema7.String, url: Schema7.String }),
|
|
887
1240
|
error: RunnerRpcError
|
|
888
|
-
}), Rpc.make("
|
|
889
|
-
payload: {
|
|
890
|
-
success: Schema7.
|
|
891
|
-
error: RunnerRpcError
|
|
892
|
-
}), Rpc.make("AppendTranscript", {
|
|
893
|
-
payload: { workUnitId: Schema7.String, entries: Schema7.Array(TranscriptAppendEntry).check(Schema7.isMaxLength(100)) },
|
|
894
|
-
success: Schema7.Void,
|
|
1241
|
+
}), Rpc.make("ProgramSecrets", {
|
|
1242
|
+
payload: { lease: ProgramLease },
|
|
1243
|
+
success: Schema7.Record(Schema7.String, Schema7.String),
|
|
895
1244
|
error: RunnerRpcError
|
|
896
|
-
})
|
|
897
|
-
|
|
1245
|
+
})).middleware(RunnerAuthentication) {
|
|
1246
|
+
}
|
|
1247
|
+
|
|
1248
|
+
class RunnerRunFileRpcs extends RpcGroup.make(Rpc.make("CreateRunFile", {
|
|
1249
|
+
payload: {
|
|
1250
|
+
lease: ProgramLease,
|
|
1251
|
+
step: Schema7.String,
|
|
1252
|
+
name: Schema7.String,
|
|
1253
|
+
caption: Schema7.optional(Schema7.String),
|
|
1254
|
+
contentType: Schema7.String,
|
|
1255
|
+
byteSize: Schema7.Int,
|
|
1256
|
+
sha256: Schema7.String
|
|
1257
|
+
},
|
|
898
1258
|
success: Schema7.Struct({ file: RunFileRecord, upload: Schema7.optional(RunFileUpload) }),
|
|
899
1259
|
error: Schema7.Union([RunnerRpcError, RunFileRefused])
|
|
900
|
-
}), Rpc.make("
|
|
1260
|
+
}), Rpc.make("RunFileParts", {
|
|
901
1261
|
payload: { lease: ProgramLease, fileId: Schema7.String, partNumbers: Schema7.Array(Schema7.Int) },
|
|
902
1262
|
success: Schema7.Struct({ parts: Schema7.Array(RunFilePartUrl) }),
|
|
903
1263
|
error: RunnerRpcError
|
|
904
|
-
}), Rpc.make("
|
|
1264
|
+
}), Rpc.make("CompleteRunFile", {
|
|
905
1265
|
payload: { lease: ProgramLease, fileId: Schema7.String, parts: Schema7.optional(Schema7.Array(UploadedRunFilePart)) },
|
|
906
1266
|
success: RunFileRecord,
|
|
907
1267
|
error: RunnerRpcError
|
|
908
|
-
}), Rpc.make("SaveCheckpoint", {
|
|
909
|
-
payload: { lease: ProgramLease, checkpoint: StepCheckpoint },
|
|
910
|
-
success: Schema7.Void,
|
|
911
|
-
error: RunnerRpcError
|
|
912
|
-
}), Rpc.make("ResumeCheckpoint", {
|
|
913
|
-
payload: { lease: ProgramLease },
|
|
914
|
-
success: Schema7.UndefinedOr(ResumedCheckpoint),
|
|
915
|
-
error: RunnerRpcError
|
|
916
|
-
}), Rpc.make("SettledCheckpoints", {
|
|
917
|
-
success: Schema7.Array(Schema7.Struct({
|
|
918
|
-
stepAttemptId: Schema7.String,
|
|
919
|
-
ref: Schema7.optionalKey(Schema7.String),
|
|
920
|
-
repoBinding: Schema7.optionalKey(WorkUnitRepoBinding)
|
|
921
|
-
})),
|
|
922
|
-
error: RunnerRpcError
|
|
923
|
-
}), Rpc.make("ForgetCheckpoints", {
|
|
924
|
-
payload: { stepAttemptIds: Schema7.Array(Schema7.String) },
|
|
925
|
-
success: Schema7.Void,
|
|
926
|
-
error: RunnerRpcError
|
|
927
|
-
}), Rpc.make("Bundle", {
|
|
928
|
-
payload: { digest: Schema7.String },
|
|
929
|
-
success: Schema7.Struct({ bundle: Schema7.String }),
|
|
930
|
-
error: RunnerRpcError
|
|
931
|
-
}), Rpc.make("SettledRuns", {
|
|
932
|
-
payload: { runIds: Schema7.Array(Schema7.String) },
|
|
933
|
-
success: Schema7.Array(Schema7.String),
|
|
934
|
-
error: RunnerRpcError
|
|
935
|
-
}), Rpc.make("ProgramSecrets", {
|
|
936
|
-
payload: { lease: ProgramLease },
|
|
937
|
-
success: Schema7.Record(Schema7.String, Schema7.String),
|
|
938
|
-
error: RunnerRpcError
|
|
939
|
-
}), Rpc.make("Suspend", { payload: { lease: ProgramLease }, error: RunnerRpcError }), Rpc.make("FinishProgram", { payload: { lease: ProgramLease, outcome: ProgramOutcome }, error: RunnerRpcError }), Rpc.make("Signals", {
|
|
940
|
-
payload: { runnerReplicaId: Schema7.String },
|
|
941
|
-
success: RunnerSignal,
|
|
942
|
-
error: RunnerRpcError,
|
|
943
|
-
stream: true
|
|
944
1268
|
})).middleware(RunnerAuthentication) {
|
|
945
1269
|
}
|
|
1270
|
+
var ProgramRpcs = RunnerJournalRpcs.merge(RunnerCapabilityRpcs, RunnerRunFileRpcs);
|
|
1271
|
+
var RunnerRpcs = RunnerReplicaRpcs.merge(RunnerJournalRpcs, RunnerCapabilityRpcs, RunnerRunFileRpcs);
|
|
946
1272
|
|
|
947
1273
|
// packages/sdk/src/program/engine.ts
|
|
948
1274
|
import { Workflow, WorkflowEngine } from "effect/workflow";
|
|
@@ -1044,6 +1370,8 @@ var emptyWorkflow = Workflow.make("kitman-loop/none", { payload: {}, idempotency
|
|
|
1044
1370
|
var replayStatuses = new Set([401, 403, 409, 429]);
|
|
1045
1371
|
var isRunnerRpcError = Schema8.is(RunnerRpcError);
|
|
1046
1372
|
var isRunFileRefused = Schema8.is(RunFileRefused);
|
|
1373
|
+
var issues = SchemaIssue.makeFormatterStandardSchemaV1();
|
|
1374
|
+
var refusedFields = (issue) => [...new Set(issues(issue).issues.map(({ path }) => (path ?? []).map(String).join(".")))].join(", ");
|
|
1047
1375
|
var refusedStep2 = (cause) => {
|
|
1048
1376
|
if (isRunFileRefused(cause))
|
|
1049
1377
|
return true;
|
|
@@ -1051,42 +1379,61 @@ var refusedStep2 = (cause) => {
|
|
|
1051
1379
|
return true;
|
|
1052
1380
|
return isRunnerRpcError(cause) && cause.status >= 400 && cause.status < 500 && !replayStatuses.has(cause.status);
|
|
1053
1381
|
};
|
|
1054
|
-
var
|
|
1055
|
-
|
|
1056
|
-
|
|
1382
|
+
var requested2 = (step, request) => request.pipe(Effect2.catch((cause) => refusedStep2(cause) ? Effect2.fail(new StepFailed2({ step, reason: cause.message })) : Effect2.die(new JournalWriteFailed2({ cause }))), Effect2.catchDefect((defect) => defect instanceof Error && SchemaIssue.isIssue(defect.cause) ? Effect2.fail(new StepFailed2({
|
|
1383
|
+
step,
|
|
1384
|
+
reason: `Kitman cannot take this Step's request: invalid ${refusedFields(defect.cause)}`
|
|
1385
|
+
})) : Effect2.die(defect)));
|
|
1386
|
+
var runnerHost = (capabilities) => ({
|
|
1387
|
+
putQuestion: (launch) => requested2(launch.step, capabilities.putQuestion({
|
|
1057
1388
|
step: launch.step,
|
|
1058
1389
|
prompt: launch.prompt,
|
|
1059
1390
|
deferredName: answerDeferred2(launch.step).name,
|
|
1391
|
+
...questionAdvice(launch),
|
|
1060
1392
|
...launch.options === undefined ? undefined : { options: launch.options },
|
|
1061
|
-
...launch.verification === undefined ? undefined : { verification: launch.verification }
|
|
1393
|
+
...launch.verification === undefined ? undefined : { verification: launch.verification },
|
|
1394
|
+
...launch.default === undefined ? undefined : { default: launch.default },
|
|
1395
|
+
...launch.timeoutMillis === undefined ? undefined : { timeoutMillis: launch.timeoutMillis }
|
|
1062
1396
|
})).pipe(Effect2.asVoid),
|
|
1063
|
-
startVerification: (launch) =>
|
|
1397
|
+
startVerification: (launch) => requested2(launch.step, capabilities.startVerification({
|
|
1064
1398
|
step: launch.step,
|
|
1065
|
-
deferredName: verifyDeferred2(launch.step).name,
|
|
1399
|
+
deferredName: (launch.measure === undefined ? verifyDeferred2 : measureDeferred2)(launch.step).name,
|
|
1066
1400
|
...launch.revision === undefined ? undefined : { revision: launch.revision },
|
|
1067
|
-
...launch.checks === undefined ? undefined : { checks: launch.checks }
|
|
1401
|
+
...launch.checks === undefined ? undefined : { checks: launch.checks },
|
|
1402
|
+
...launch.suggested === undefined ? undefined : { suggested: launch.suggested },
|
|
1403
|
+
...launch.measure === undefined ? undefined : { measure: launch.measure }
|
|
1068
1404
|
})).pipe(Effect2.asVoid),
|
|
1069
|
-
startAgentWork: (launch) =>
|
|
1405
|
+
startAgentWork: (launch) => requested2(launch.step, capabilities.startAgentStep({
|
|
1070
1406
|
step: launch.step,
|
|
1071
|
-
deferredName:
|
|
1407
|
+
deferredName: launch.deferredName,
|
|
1072
1408
|
role: launch.role,
|
|
1073
1409
|
agentId: launch.agent,
|
|
1074
1410
|
prompt: launch.prompt,
|
|
1411
|
+
...launch.skill === undefined ? undefined : { skill: launch.skill },
|
|
1075
1412
|
outputSchema: launch.output,
|
|
1076
|
-
...launch.secrets === undefined ? undefined : { secrets: launch.secrets }
|
|
1413
|
+
...launch.secrets === undefined ? undefined : { secrets: launch.secrets },
|
|
1414
|
+
...launch.timeoutMillis === undefined ? undefined : { timeoutMillis: launch.timeoutMillis },
|
|
1415
|
+
...launch.mergeTarget === undefined ? undefined : { mergeTarget: launch.mergeTarget }
|
|
1077
1416
|
})).pipe(Effect2.asVoid),
|
|
1078
|
-
admitChild: (launch) =>
|
|
1417
|
+
admitChild: (launch) => requested2(launch.step, capabilities.admitChild({
|
|
1079
1418
|
step: launch.step,
|
|
1080
1419
|
loop: launch.loop,
|
|
1081
1420
|
input: launch.input,
|
|
1082
1421
|
deferredName: childDeferred2(launch.step).name
|
|
1083
1422
|
})).pipe(Effect2.asVoid),
|
|
1084
|
-
|
|
1423
|
+
claimResource: (launch) => requested2(launch.step, capabilities.claimResource({
|
|
1424
|
+
step: launch.step,
|
|
1425
|
+
deferredName: (launch.action === "let_go" ? letGoDeferred2 : claimDeferred2)(launch.step).name,
|
|
1426
|
+
resource: launch.resource,
|
|
1427
|
+
action: launch.action
|
|
1428
|
+
})),
|
|
1429
|
+
awaitEvent: (launch) => requested2(launch.step, capabilities.awaitEvent({
|
|
1085
1430
|
step: launch.step,
|
|
1086
1431
|
deferredName: eventDeferred2(launch.step).name,
|
|
1087
1432
|
event: launch.event,
|
|
1088
1433
|
...launch.filter === undefined ? undefined : { filter: launch.filter },
|
|
1089
|
-
timeoutMillis: launch.timeoutMillis
|
|
1434
|
+
timeoutMillis: launch.timeoutMillis,
|
|
1435
|
+
...launch.since === undefined ? undefined : { since: launch.since },
|
|
1436
|
+
...launch.or === undefined ? undefined : { or: launch.or }
|
|
1090
1437
|
}))
|
|
1091
1438
|
});
|
|
1092
1439
|
var put2 = (target, contentType, body) => Effect2.gen(function* () {
|
|
@@ -1122,8 +1469,8 @@ var uploadRunFile2 = (files, file) => Effect2.gen(function* () {
|
|
|
1122
1469
|
return slotted;
|
|
1123
1470
|
return yield* upload.kind === "single" ? readRange(file.path, 0, byteSize).pipe(Effect2.flatMap((body) => put2(upload, contentType, body)), Effect2.andThen(files.completeRunFile({ fileId: slotted.id }))) : Effect2.flatMap(uploadParts(files, file.path, contentType, slotted.id, upload), (parts) => files.completeRunFile({ fileId: slotted.id, parts }));
|
|
1124
1471
|
});
|
|
1125
|
-
var keepFile = (
|
|
1126
|
-
const kept = yield* uploadRunFile2(
|
|
1472
|
+
var keepFile = (files, step, { path, caption }) => Effect2.gen(function* () {
|
|
1473
|
+
const kept = yield* uploadRunFile2(files, { step, name: path.split("/").at(-1) ?? path, path, caption }).pipe(Effect2.catch((cause) => isPlatformError(cause) ? Effect2.fail(new StepFailed2({ step, reason: `Could not read ${path}: ${cause.message}` })) : requested2(step, Effect2.fail(cause))));
|
|
1127
1474
|
if (kept.status !== "available")
|
|
1128
1475
|
return yield* new StepFailed2({
|
|
1129
1476
|
step,
|
|
@@ -1131,9 +1478,9 @@ var keepFile = (journal, step, { path, caption }) => Effect2.gen(function* () {
|
|
|
1131
1478
|
});
|
|
1132
1479
|
return { id: kept.id };
|
|
1133
1480
|
});
|
|
1134
|
-
var runnerActivities = (
|
|
1481
|
+
var runnerActivities = (capabilities, services) => ({
|
|
1135
1482
|
changeRequest: {
|
|
1136
|
-
run: (request, step) =>
|
|
1483
|
+
run: (request, step) => requested2(step, capabilities.performHostEffect({
|
|
1137
1484
|
step,
|
|
1138
1485
|
effect: {
|
|
1139
1486
|
kind: "change_request",
|
|
@@ -1144,7 +1491,7 @@ var runnerActivities = (journal, services) => ({
|
|
|
1144
1491
|
})).pipe(Effect2.filterOrFail((opened) => opened !== undefined, () => new StepFailed2({ step, reason: "Kitman opened no ChangeRequest" })))
|
|
1145
1492
|
},
|
|
1146
1493
|
writeBack: {
|
|
1147
|
-
run: (request, step) =>
|
|
1494
|
+
run: (request, step) => requested2(step, capabilities.performHostEffect({
|
|
1148
1495
|
step,
|
|
1149
1496
|
effect: {
|
|
1150
1497
|
kind: "write_back",
|
|
@@ -1154,32 +1501,43 @@ var runnerActivities = (journal, services) => ({
|
|
|
1154
1501
|
})).pipe(Effect2.asVoid)
|
|
1155
1502
|
},
|
|
1156
1503
|
artifact: {
|
|
1157
|
-
run: ({ files, ...request }, step) =>
|
|
1504
|
+
run: ({ files, ...request }, step) => requested2(step, capabilities.storeArtifact({
|
|
1158
1505
|
step,
|
|
1159
1506
|
...request,
|
|
1160
1507
|
...files === undefined ? undefined : { fileIds: files.map((shown) => shown.id) }
|
|
1161
1508
|
}))
|
|
1162
1509
|
},
|
|
1163
|
-
file: { run: (request, step) => keepFile(
|
|
1164
|
-
note: { run: (request, step) =>
|
|
1510
|
+
file: { run: (request, step) => keepFile(capabilities, step, request).pipe(Effect2.provideContext(services)) },
|
|
1511
|
+
note: { run: (request, step) => requested2(step, capabilities.recordNote({ step, ...request })) },
|
|
1165
1512
|
createTasks: {
|
|
1166
|
-
run: (request, step) =>
|
|
1513
|
+
run: (request, step) => requested2(step, Effect2.map(capabilities.createPlanTasks(request.tickets, request.projectId), (tasks) => ({ tasks })))
|
|
1167
1514
|
},
|
|
1515
|
+
alertTask: { run: (request, step) => requested2(step, capabilities.alertTask({ step, ...request })) },
|
|
1168
1516
|
integrationBranch: {
|
|
1169
|
-
run: (request, step) =>
|
|
1517
|
+
run: (request, step) => requested2(step, capabilities.integrationBranch(request.repoBindingId))
|
|
1170
1518
|
},
|
|
1171
|
-
transcripts: { run: (request, step) =>
|
|
1172
|
-
|
|
1173
|
-
|
|
1174
|
-
|
|
1519
|
+
transcripts: { run: (request, step) => requested2(step, capabilities.readTranscripts({ step, ...request })) },
|
|
1520
|
+
changeRequestRead: {
|
|
1521
|
+
pipeline: (request, step) => requested2(step, capabilities.pipelineStatus({ step, ...request })),
|
|
1522
|
+
reviewThreads: (request, step) => requested2(step, capabilities.reviewThreads({ step, ...request })),
|
|
1523
|
+
opened: (request, step) => requested2(step, capabilities.openChangeRequests({ step, ...request })),
|
|
1524
|
+
own: (step) => requested2(step, capabilities.ownChangeRequests({ step }))
|
|
1525
|
+
},
|
|
1526
|
+
propose: { run: (proposal, step) => requested2(step, capabilities.propose({ step, proposal })) },
|
|
1527
|
+
projectActivity: { run: (request, step) => requested2(step, capabilities.readProject({ step, ...request })) },
|
|
1528
|
+
draftUpdate: { run: (request, step) => requested2(step, capabilities.draftUpdate({ step, ...request })) },
|
|
1175
1529
|
mergeChangeRequest: {
|
|
1176
|
-
run: (request, step) =>
|
|
1530
|
+
run: (request, step) => requested2(step, capabilities.mergeChangeRequest({ step, ...request })),
|
|
1531
|
+
close: (request, step) => requested2(step, capabilities.closeChangeRequest({ step, ...request })),
|
|
1532
|
+
rerun: (request, step) => requested2(step, capabilities.rerunPipeline({ step, ...request })),
|
|
1533
|
+
report: (request, step) => requested2(step, capabilities.reportPipeline({ step, ...request })),
|
|
1534
|
+
approve: (request, step) => requested2(step, capabilities.approveChangeRequest({ step, ...request }))
|
|
1177
1535
|
},
|
|
1178
1536
|
release: {
|
|
1179
|
-
run: ({ revision, ...request }, step) =>
|
|
1537
|
+
run: ({ revision, ...request }, step) => requested2(step, capabilities.publishRelease({ step, ...request, ...revision === undefined ? undefined : { revision } }))
|
|
1180
1538
|
},
|
|
1181
1539
|
comment: {
|
|
1182
|
-
run: (request, step) =>
|
|
1540
|
+
run: (request, step) => requested2(step, capabilities.performHostEffect({ step, effect: { kind: "post_comment", ...request } })).pipe(Effect2.asVoid)
|
|
1183
1541
|
}
|
|
1184
1542
|
});
|
|
1185
1543
|
var describeFailure = (cause) => {
|
|
@@ -1188,14 +1546,14 @@ var describeFailure = (cause) => {
|
|
|
1188
1546
|
return summary.slice(0, 4000) || "Program failed";
|
|
1189
1547
|
};
|
|
1190
1548
|
var journalLoss = (cause) => cause.reasons.flatMap((reason) => Cause.isDieReason(reason) && reason.defect instanceof JournalWriteFailed2 ? [reason.defect] : [])[0];
|
|
1191
|
-
var runProgram2 = (loop, work, journal) => Effect2.scoped(Effect2.gen(function* () {
|
|
1549
|
+
var runProgram2 = (loop, work, { journal, capabilities }) => Effect2.scoped(Effect2.gen(function* () {
|
|
1192
1550
|
const services = yield* Effect2.context();
|
|
1193
1551
|
const { engine, encoded } = yield* makeEncodedEngine(work.journal, journal);
|
|
1194
1552
|
const workflow = loopWorkflow2(loop);
|
|
1195
1553
|
const execute = executeLoop2(loop, {
|
|
1196
|
-
host: runnerHost(
|
|
1197
|
-
activities: runnerActivities(
|
|
1198
|
-
granted: new Set(loop.
|
|
1554
|
+
host: runnerHost(capabilities),
|
|
1555
|
+
activities: runnerActivities(capabilities, services),
|
|
1556
|
+
granted: new Set(capabilitiesOf2(loop).filter((capability) => work.granted.includes(capability)))
|
|
1199
1557
|
});
|
|
1200
1558
|
yield* Layer.build(workflow.toLayer(execute).pipe(Layer.provide(Layer.succeed(WorkflowEngine.WorkflowEngine)(engine))));
|
|
1201
1559
|
const result = yield* encoded.execute(workflow, {
|
|
@@ -1236,36 +1594,47 @@ var rpcRunFiles2 = (rpc, lease) => ({
|
|
|
1236
1594
|
runFileParts: (request) => Effect2.map(rpc.runFileParts({ lease, ...request, partNumbers: [...request.partNumbers] }), ({ parts }) => parts),
|
|
1237
1595
|
completeRunFile: ({ parts, ...request }) => rpc.completeRunFile({ lease, ...request, ...parts === undefined ? undefined : { parts: [...parts] } })
|
|
1238
1596
|
});
|
|
1239
|
-
var
|
|
1597
|
+
var rpcProgramPorts2 = (rpc, work) => {
|
|
1240
1598
|
const lease = programLease2(work);
|
|
1241
|
-
|
|
1599
|
+
const journal = {
|
|
1242
1600
|
recordActivity: (entry) => rpc.recordActivity({ lease, ...entry }),
|
|
1243
1601
|
deferredDone: (entry) => rpc.deferredDone({ lease, ...entry }),
|
|
1244
1602
|
scheduleClock: (clock) => rpc.scheduleClock({ lease, ...clock }),
|
|
1603
|
+
suspend: rpc.suspend({ lease }),
|
|
1604
|
+
finish: (outcome) => rpc.finishProgram({ lease, outcome })
|
|
1605
|
+
};
|
|
1606
|
+
const capabilities = {
|
|
1245
1607
|
putQuestion: (question) => rpc.putQuestion({
|
|
1246
1608
|
lease,
|
|
1247
1609
|
step: question.step,
|
|
1248
1610
|
prompt: question.prompt,
|
|
1249
1611
|
deferredName: question.deferredName,
|
|
1612
|
+
...questionAdvice(question),
|
|
1250
1613
|
...question.options === undefined ? undefined : { options: [...question.options] },
|
|
1251
|
-
...question.verification === undefined ? undefined : { verification: question.verification }
|
|
1614
|
+
...question.verification === undefined ? undefined : { verification: question.verification },
|
|
1615
|
+
...question.default === undefined ? undefined : { default: question.default },
|
|
1616
|
+
...question.timeoutMillis === undefined ? undefined : { timeoutMillis: question.timeoutMillis }
|
|
1252
1617
|
}),
|
|
1253
1618
|
startVerification: (verification) => rpc.startVerification({
|
|
1254
1619
|
lease,
|
|
1255
1620
|
step: verification.step,
|
|
1256
1621
|
deferredName: verification.deferredName,
|
|
1257
1622
|
...verification.revision === undefined ? undefined : { revision: verification.revision },
|
|
1258
|
-
...verification.checks === undefined ? undefined : { checks: [...verification.checks] }
|
|
1623
|
+
...verification.checks === undefined ? undefined : { checks: [...verification.checks] },
|
|
1624
|
+
...verification.suggested === undefined ? undefined : { suggested: [...verification.suggested] },
|
|
1625
|
+
...verification.measure === undefined ? undefined : { measure: verification.measure }
|
|
1259
1626
|
}),
|
|
1260
1627
|
startAgentStep: ({ secrets, ...step }) => rpc.startAgentStep({ lease, ...step, ...secrets === undefined ? undefined : { secrets: [...secrets] } }),
|
|
1261
1628
|
awaitEvent: (wait) => rpc.awaitEvent({ lease, ...wait }),
|
|
1629
|
+
claimResource: (claim) => rpc.claimResource({ lease, ...claim }),
|
|
1262
1630
|
admitChild: (child) => rpc.admitChild({ lease, ...child }),
|
|
1263
1631
|
storeArtifact: ({ fileIds, ...artifact }) => rpc.storeArtifact({ lease, ...artifact, ...fileIds === undefined ? undefined : { fileIds: [...fileIds] } }),
|
|
1264
1632
|
...rpcRunFiles2(rpc, lease),
|
|
1265
1633
|
recordNote: (note) => rpc.recordNote({ lease, ...note }),
|
|
1266
1634
|
performHostEffect: (request) => rpc.performHostEffect({ lease, ...request }),
|
|
1267
|
-
createPlanTasks: (tickets) => rpc.createPlanTasks({
|
|
1635
|
+
createPlanTasks: (tickets, projectId) => rpc.createPlanTasks({
|
|
1268
1636
|
lease,
|
|
1637
|
+
...projectId === undefined ? undefined : { projectId },
|
|
1269
1638
|
tickets: tickets.map((ticket) => ({
|
|
1270
1639
|
key: ticket.key,
|
|
1271
1640
|
title: ticket.title,
|
|
@@ -1276,7 +1645,13 @@ var rpcProgramJournal2 = (rpc, work) => {
|
|
|
1276
1645
|
}))
|
|
1277
1646
|
}),
|
|
1278
1647
|
integrationBranch: (repoBindingId) => rpc.integrationBranch({ lease, ...repoBindingId === undefined ? undefined : { repoBindingId } }),
|
|
1648
|
+
alertTask: (request) => rpc.alertTask({ lease, ...request }),
|
|
1279
1649
|
readTranscripts: (request) => rpc.readTranscripts({ lease, ...request }),
|
|
1650
|
+
pipelineStatus: (request) => rpc.pipelineStatus({ lease, ...request }),
|
|
1651
|
+
reportPipeline: (request) => rpc.reportPipeline({ lease, ...request }),
|
|
1652
|
+
reviewThreads: (request) => rpc.reviewThreads({ lease, ...request }),
|
|
1653
|
+
openChangeRequests: (request) => rpc.openChangeRequests({ lease, ...request }),
|
|
1654
|
+
ownChangeRequests: (request) => rpc.ownChangeRequests({ lease, ...request }),
|
|
1280
1655
|
propose: ({ step, proposal }) => rpc.propose({
|
|
1281
1656
|
lease,
|
|
1282
1657
|
step,
|
|
@@ -1285,6 +1660,7 @@ var rpcProgramJournal2 = (rpc, work) => {
|
|
|
1285
1660
|
title: proposal.title,
|
|
1286
1661
|
description: proposal.description,
|
|
1287
1662
|
...proposal.teamId === undefined ? undefined : { teamId: proposal.teamId },
|
|
1663
|
+
...proposal.key === undefined ? undefined : { key: proposal.key },
|
|
1288
1664
|
citations: [...proposal.citations]
|
|
1289
1665
|
}
|
|
1290
1666
|
}),
|
|
@@ -1299,10 +1675,12 @@ var rpcProgramJournal2 = (rpc, work) => {
|
|
|
1299
1675
|
}
|
|
1300
1676
|
}),
|
|
1301
1677
|
mergeChangeRequest: (request) => rpc.mergeChangeRequest({ lease, ...request }),
|
|
1302
|
-
|
|
1303
|
-
|
|
1304
|
-
|
|
1678
|
+
closeChangeRequest: (request) => rpc.closeChangeRequest({ lease, ...request }),
|
|
1679
|
+
approveChangeRequest: (request) => rpc.approveChangeRequest({ lease, ...request }),
|
|
1680
|
+
rerunPipeline: (request) => rpc.rerunPipeline({ lease, ...request }),
|
|
1681
|
+
publishRelease: (request) => rpc.publishRelease({ lease, ...request })
|
|
1305
1682
|
};
|
|
1683
|
+
return { journal, capabilities };
|
|
1306
1684
|
};
|
|
1307
1685
|
|
|
1308
1686
|
// packages/live/src/rpc/runner-client.ts
|
|
@@ -1321,30 +1699,28 @@ function runnerRpcUrl(apiUrl) {
|
|
|
1321
1699
|
url.protocol = url.protocol === "https:" ? "wss:" : "ws:";
|
|
1322
1700
|
return url.toString();
|
|
1323
1701
|
}
|
|
1324
|
-
var
|
|
1702
|
+
var authorizer = (options) => (call) => Effect3.flatMap(options.bearer, (token) => RpcClient.withHeaders(call, {
|
|
1703
|
+
authorization: `Bearer ${token}`,
|
|
1704
|
+
[RunnerHeaders.runnerId]: options.runnerId,
|
|
1705
|
+
[RunnerHeaders.protocolVersion]: String(RunnerRpcProtocolVersion)
|
|
1706
|
+
}));
|
|
1707
|
+
var RunnerProcessRpcs = RunnerReplicaRpcs.merge(RunnerRunFileRpcs);
|
|
1708
|
+
var makeProgramRpcClient = (options) => Effect3.gen(function* () {
|
|
1325
1709
|
const protocol = yield* Layer2.build(options.protocol);
|
|
1326
|
-
const client = yield* RpcClient.make(
|
|
1327
|
-
const authorized = (
|
|
1328
|
-
authorization: `Bearer ${token}`,
|
|
1329
|
-
[RunnerHeaders.runnerId]: options.runnerId,
|
|
1330
|
-
[RunnerHeaders.protocolVersion]: String(RunnerRpcProtocolVersion)
|
|
1331
|
-
}));
|
|
1710
|
+
const client = yield* RpcClient.make(ProgramRpcs).pipe(Effect3.provideContext(protocol));
|
|
1711
|
+
const authorized = authorizer(options);
|
|
1332
1712
|
return {
|
|
1333
|
-
claim: (input) => authorized(client.Claim(input)),
|
|
1334
|
-
heartbeat: (input) => authorized(client.Heartbeat(input)),
|
|
1335
|
-
complete: (input) => authorized(client.Complete(input)),
|
|
1336
|
-
release: (input) => authorized(client.Release(input)),
|
|
1337
1713
|
recordActivity: (input) => authorized(client.RecordActivity(input)),
|
|
1338
1714
|
deferredDone: (input) => authorized(client.DeferredDone(input)),
|
|
1339
1715
|
scheduleClock: (input) => authorized(client.ScheduleClock(input)),
|
|
1340
|
-
putQuestion: (input) => authorized(client.PutQuestion(input)),
|
|
1341
|
-
programSecrets: (input) => authorized(client.ProgramSecrets(input)),
|
|
1342
1716
|
suspend: (input) => authorized(client.Suspend(input)),
|
|
1343
1717
|
finishProgram: (input) => authorized(client.FinishProgram(input)),
|
|
1718
|
+
putQuestion: (input) => authorized(client.PutQuestion(input)),
|
|
1719
|
+
programSecrets: (input) => authorized(client.ProgramSecrets(input)),
|
|
1344
1720
|
startAgentStep: (input) => authorized(client.StartAgentStep(input)),
|
|
1345
1721
|
startVerification: (input) => authorized(client.StartVerification(input)),
|
|
1346
|
-
knownEvidence: (input) => authorized(client.KnownEvidence(input)),
|
|
1347
1722
|
awaitEvent: (input) => authorized(client.AwaitEvent(input)),
|
|
1723
|
+
claimResource: (input) => authorized(client.ClaimResource(input)),
|
|
1348
1724
|
admitChild: (input) => authorized(client.AdmitChild(input)),
|
|
1349
1725
|
storeArtifact: (input) => authorized(client.StoreArtifact(input)),
|
|
1350
1726
|
createRunFile: (input) => authorized(client.CreateRunFile(input)),
|
|
@@ -1353,25 +1729,22 @@ var makeRunnerRpcClient = (options) => Effect3.gen(function* () {
|
|
|
1353
1729
|
recordNote: (input) => authorized(client.RecordNote(input)),
|
|
1354
1730
|
performHostEffect: (input) => authorized(client.PerformHostEffect(input)),
|
|
1355
1731
|
createPlanTasks: (input) => authorized(client.CreatePlanTasks(input)),
|
|
1732
|
+
alertTask: (input) => authorized(client.AlertTask(input)),
|
|
1356
1733
|
readTranscripts: (input) => authorized(client.ReadTranscripts(input)),
|
|
1734
|
+
pipelineStatus: (input) => authorized(client.PipelineStatus(input)),
|
|
1735
|
+
reportPipeline: (input) => authorized(client.ReportPipeline(input)),
|
|
1736
|
+
reviewThreads: (input) => authorized(client.ReviewThreads(input)),
|
|
1737
|
+
openChangeRequests: (input) => authorized(client.OpenChangeRequests(input)),
|
|
1738
|
+
ownChangeRequests: (input) => authorized(client.OwnChangeRequests(input)),
|
|
1357
1739
|
propose: (input) => authorized(client.Propose(input)),
|
|
1358
1740
|
readProject: (input) => authorized(client.ReadProject(input)),
|
|
1359
1741
|
draftUpdate: (input) => authorized(client.DraftUpdate(input)),
|
|
1360
1742
|
integrationBranch: (input) => authorized(client.IntegrationBranch(input)),
|
|
1361
1743
|
mergeChangeRequest: (input) => authorized(client.MergeChangeRequest(input)),
|
|
1362
|
-
|
|
1363
|
-
|
|
1364
|
-
|
|
1365
|
-
|
|
1366
|
-
appendTranscript: (input) => authorized(client.AppendTranscript(input)),
|
|
1367
|
-
createCheckpointFile: (input) => authorized(client.CreateCheckpointFile(input)),
|
|
1368
|
-
checkpointFileParts: (input) => authorized(client.CheckpointFileParts(input)),
|
|
1369
|
-
completeCheckpointFile: (input) => authorized(client.CompleteCheckpointFile(input)),
|
|
1370
|
-
saveCheckpoint: (input) => authorized(client.SaveCheckpoint(input)),
|
|
1371
|
-
resumeCheckpoint: (input) => authorized(client.ResumeCheckpoint(input)),
|
|
1372
|
-
settledCheckpoints: authorized(client.SettledCheckpoints()),
|
|
1373
|
-
forgetCheckpoints: (stepAttemptIds) => authorized(client.ForgetCheckpoints({ stepAttemptIds })),
|
|
1374
|
-
listen: (runnerReplicaId, onSignal) => authorized(Stream2.runForEach(client.Signals({ runnerReplicaId }), onSignal))
|
|
1744
|
+
closeChangeRequest: (input) => authorized(client.CloseChangeRequest(input)),
|
|
1745
|
+
approveChangeRequest: (input) => authorized(client.ApproveChangeRequest(input)),
|
|
1746
|
+
rerunPipeline: (input) => authorized(client.RerunPipeline(input)),
|
|
1747
|
+
publishRelease: (input) => authorized(client.PublishRelease(input))
|
|
1375
1748
|
};
|
|
1376
1749
|
});
|
|
1377
1750
|
|
|
@@ -1387,13 +1760,16 @@ import * as Redacted2 from "effect/Redacted";
|
|
|
1387
1760
|
import * as Schema9 from "effect/Schema";
|
|
1388
1761
|
import * as FetchHttpClient from "effect/http/FetchHttpClient";
|
|
1389
1762
|
var describeFlag2 = "--kitman-describe";
|
|
1763
|
+
var DescribedKit = Schema9.Struct({
|
|
1764
|
+
name: Schema9.String,
|
|
1765
|
+
version: Schema9.String,
|
|
1766
|
+
loops: Schema9.Array(LoopManifest),
|
|
1767
|
+
agents: Schema9.Record(Schema9.String, Schema9.Json),
|
|
1768
|
+
schedules: Schema9.optionalKey(Schema9.Record(Schema9.String, Schema9.Json)),
|
|
1769
|
+
setup: Schema9.optionalKey(KitSetup)
|
|
1770
|
+
});
|
|
1390
1771
|
var Described2 = Schema9.Union([
|
|
1391
|
-
Schema9.TaggedStruct("Described", {
|
|
1392
|
-
loops: Schema9.Array(LoopManifest),
|
|
1393
|
-
agents: Schema9.Record(Schema9.String, Schema9.Json),
|
|
1394
|
-
schedules: Schema9.optionalKey(Schema9.Record(Schema9.String, Schema9.Json)),
|
|
1395
|
-
kits: Schema9.optionalKey(Schema9.Record(Schema9.String, Schema9.Json))
|
|
1396
|
-
}),
|
|
1772
|
+
Schema9.TaggedStruct("Described", { kits: Schema9.Array(DescribedKit) }),
|
|
1397
1773
|
Schema9.TaggedStruct("Refused", { error: Schema9.Union([ManifestInvalid2, LoopCheckError2]) })
|
|
1398
1774
|
]);
|
|
1399
1775
|
var encodeDescribed = Schema9.encodeEffect(Schema9.fromJsonString(Schema9.toCodecJson(Described2)));
|
|
@@ -1482,35 +1858,62 @@ var networkGuard2 = (input) => {
|
|
|
1482
1858
|
});
|
|
1483
1859
|
return { fetch, journal };
|
|
1484
1860
|
};
|
|
1485
|
-
var
|
|
1486
|
-
const
|
|
1487
|
-
|
|
1488
|
-
|
|
1489
|
-
|
|
1490
|
-
|
|
1491
|
-
|
|
1492
|
-
|
|
1493
|
-
|
|
1494
|
-
|
|
1495
|
-
|
|
1861
|
+
var carriedKits2 = (config, identity, packages) => {
|
|
1862
|
+
const identities = new Map(packages);
|
|
1863
|
+
const carried = [];
|
|
1864
|
+
const visited = new Set;
|
|
1865
|
+
const visit = (kit) => {
|
|
1866
|
+
if (visited.has(kit.config))
|
|
1867
|
+
return;
|
|
1868
|
+
visited.add(kit.config);
|
|
1869
|
+
const index = carried.findIndex((known) => known.identity.name === kit.identity.name);
|
|
1870
|
+
const known = carried[index];
|
|
1871
|
+
if (known === undefined)
|
|
1872
|
+
carried.push(kit);
|
|
1873
|
+
else if (Bun.semver.order(kit.identity.version, known.identity.version) > 0)
|
|
1874
|
+
carried[index] = kit;
|
|
1875
|
+
for (const nested of kit.config.extends ?? []) {
|
|
1876
|
+
const nestedIdentity = identities.get(nested);
|
|
1877
|
+
if (nestedIdentity === undefined)
|
|
1878
|
+
throw new Error(`${kit.identity.name} extends a Kit the build cannot name: import it from a package it depends on, or from a local module with its own package.json`);
|
|
1879
|
+
visit({ identity: nestedIdentity, config: nested });
|
|
1880
|
+
}
|
|
1496
1881
|
};
|
|
1882
|
+
visit({ identity, config });
|
|
1883
|
+
return carried;
|
|
1884
|
+
};
|
|
1885
|
+
var describe = (carried) => Effect4.gen(function* () {
|
|
1886
|
+
const kits = [];
|
|
1887
|
+
for (const { identity, config } of carried) {
|
|
1888
|
+
kits.push({
|
|
1889
|
+
...identity,
|
|
1890
|
+
loops: yield* Effect4.forEach(config.loops, loopManifest2),
|
|
1891
|
+
agents: config.agents ?? {},
|
|
1892
|
+
...config.schedules === undefined ? undefined : { schedules: config.schedules },
|
|
1893
|
+
...config.setup === undefined ? undefined : { setup: config.setup }
|
|
1894
|
+
});
|
|
1895
|
+
for (const loop of config.loops)
|
|
1896
|
+
for (const check of loop.checks ?? [])
|
|
1897
|
+
yield* checkLoop2(loop, check);
|
|
1898
|
+
}
|
|
1899
|
+
return { _tag: "Described", kits };
|
|
1497
1900
|
}).pipe(Effect4.catch((error) => Effect4.succeed({ _tag: "Refused", error })), Effect4.flatMap(encodeDescribed), Effect4.flatMap((described) => Effect4.callback((resume) => void process.stdout.write(described, () => resume(Effect4.void)))), Effect4.as(0));
|
|
1498
1901
|
var readStdin = Effect4.tryPromise(() => Bun.stdin.text());
|
|
1499
1902
|
var isWorkUnit = guard(ProgramWorkUnit);
|
|
1500
|
-
var host = (
|
|
1903
|
+
var host = (carried) => Effect4.gen(function* () {
|
|
1501
1904
|
const loopId = yield* Config.String("KITMAN_LOOP_ID");
|
|
1502
1905
|
const apiUrl = yield* Config.String("KITMAN_API_URL");
|
|
1503
1906
|
const credential = yield* Config.Redacted("KITMAN_PROGRAM_CREDENTIAL");
|
|
1504
1907
|
const work = yield* Schema9.decodeEffect(Schema9.fromJsonString(Schema9.Unknown))(yield* readStdin);
|
|
1505
1908
|
if (!isWorkUnit(work))
|
|
1506
1909
|
return yield* new ProgramRefused({ reason: "stdin holds no orchestration Work Unit" });
|
|
1507
|
-
const loop = config.loops.find((candidate) => candidate.id === loopId);
|
|
1910
|
+
const loop = carried.flatMap((kit) => kit.config.loops).find((candidate) => candidate.id === loopId);
|
|
1508
1911
|
if (loop === undefined)
|
|
1509
|
-
return yield* new ProgramRefused({ reason: `The
|
|
1912
|
+
return yield* new ProgramRefused({ reason: `The Kit carries no Loop "${loopId}"` });
|
|
1510
1913
|
const hosts = yield* Config.option(Config.String(programHostsEnv2));
|
|
1511
1914
|
const undeclared = yield* Config.option(Config.Literals(["fail", "warn"], undeclaredHostsEnv2));
|
|
1512
1915
|
const proxy = yield* Config.option(Config.String("HTTPS_PROXY"));
|
|
1513
|
-
const rpc = yield*
|
|
1916
|
+
const rpc = yield* makeProgramRpcClient({
|
|
1514
1917
|
runnerId: work.lease.leaseOwnerId,
|
|
1515
1918
|
bearer: Effect4.sync(() => Redacted2.value(credential)),
|
|
1516
1919
|
protocol: runnerWebSocketProtocol(runnerRpcUrl(apiUrl), Option2.isSome(proxy) ? { proxy: proxy.value } : {})
|
|
@@ -1527,12 +1930,13 @@ var host = (config) => Effect4.gen(function* () {
|
|
|
1527
1930
|
});
|
|
1528
1931
|
if (guard !== undefined)
|
|
1529
1932
|
globalThis.fetch = Object.assign(guard.fetch, { preconnect: globalThis.fetch.preconnect });
|
|
1530
|
-
const
|
|
1531
|
-
return yield* runProgram2(loop, work, guard === undefined ?
|
|
1933
|
+
const ports = rpcProgramPorts2(rpc, work);
|
|
1934
|
+
return yield* runProgram2(loop, work, guard === undefined ? ports : { ...ports, journal: guard.journal(ports.journal) }).pipe(Effect4.provide(Layer3.merge(BunServices.layer, FetchHttpClient.layer)), Effect4.provideService(ConfigProvider.ConfigProvider, ConfigProvider.fromUnknown(secrets.value)), Effect4.as(0), Effect4.catchTag("JournalWriteFailed", (error) => Effect4.as(Effect4.logError(error.message), 1)));
|
|
1532
1935
|
}).pipe(Effect4.scoped, Effect4.catch((error) => Effect4.as(Effect4.logError(error.message), 2)));
|
|
1533
|
-
var
|
|
1534
|
-
const
|
|
1936
|
+
var runKit2 = (config, identity, packages) => {
|
|
1937
|
+
const carried = carriedKits2(config, identity, packages);
|
|
1938
|
+
const program = process.argv.includes(describeFlag2) ? describe(carried) : host(carried);
|
|
1535
1939
|
BunRuntime.runMain(program.pipe(Effect4.flatMap((code) => Effect4.sync(() => process.exit(code)))));
|
|
1536
1940
|
};
|
|
1537
1941
|
|
|
1538
|
-
export { digestSha256, RunnerRpcProtocolVersion, JournalWriteFailed2, refusedStep2, uploadRunFile2, runProgram2, programLease2, rpcRunFiles2,
|
|
1942
|
+
export { digestSha256, digestSha512, digestWith, kitmanMcpServer, RunnerRpcProtocolVersion, JournalWriteFailed2, refusedStep2, requested2, uploadRunFile2, runProgram2, programLease2, rpcRunFiles2, rpcProgramPorts2, describeFlag2, Described2, programSecrets2, programHostsEnv2, undeclaredHostsEnv2, networkGuard2, carriedKits2, runKit2 };
|