@kitman-sh/sdk 0.9.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-e1tqypyy.js → chunk-zvzw3zs4.js} +824 -419
- package/dist/loop/index.js +117 -3
- package/dist/program/index.js +8 -4
- 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 +505 -10
- package/types/packages/live/src/rpc/runner-group.d.ts +958 -28
- 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 +95 -3
- package/types/packages/sdk/src/program/host.d.ts +198 -36
- 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)) })
|
|
78
|
+
]);
|
|
79
|
+
var PluginSource = Schema.Union([
|
|
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)) })
|
|
42
96
|
]);
|
|
43
|
-
var
|
|
44
|
-
Schema.Struct({
|
|
45
|
-
|
|
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
|
+
}),
|
|
46
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
|
+
})
|
|
135
|
+
]);
|
|
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)) })
|
|
52
140
|
]);
|
|
53
|
-
var
|
|
54
|
-
id: Id,
|
|
55
|
-
workspaceId: Id,
|
|
56
|
-
teamId: Schema.optionalKey(Id),
|
|
57
|
-
provider: RepoBindingProvider,
|
|
58
|
-
host: Schema.String.check(Schema.isMinLength(1)),
|
|
59
|
-
owner: Schema.String.check(Schema.isMinLength(1)),
|
|
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
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
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)
|
|
368
|
+
});
|
|
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)
|
|
269
390
|
});
|
|
270
|
-
var
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
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,
|
|
@@ -688,6 +836,10 @@ class RunnerReplicaRpcs extends RpcGroup.make(Rpc.make("Claim", {
|
|
|
688
836
|
payload: { stepAttemptIds: Schema7.Array(Schema7.String) },
|
|
689
837
|
success: Schema7.Void,
|
|
690
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
|
|
691
843
|
}), Rpc.make("Bundle", {
|
|
692
844
|
payload: { digest: Schema7.String },
|
|
693
845
|
success: Schema7.Struct({ bundle: Schema7.String }),
|
|
@@ -721,7 +873,13 @@ class RunnerCapabilityRpcs extends RpcGroup.make(Rpc.make("PutQuestion", {
|
|
|
721
873
|
step: Schema7.String,
|
|
722
874
|
prompt: Schema7.String,
|
|
723
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),
|
|
724
880
|
verification: Schema7.optional(SuggestedVerification),
|
|
881
|
+
default: Schema7.optional(Schema7.String),
|
|
882
|
+
timeoutMillis: Schema7.optional(Schema7.Finite),
|
|
725
883
|
deferredName: Schema7.String
|
|
726
884
|
},
|
|
727
885
|
success: Schema7.Struct({ questionId: Schema7.String }),
|
|
@@ -734,8 +892,11 @@ class RunnerCapabilityRpcs extends RpcGroup.make(Rpc.make("PutQuestion", {
|
|
|
734
892
|
role: Schema7.String,
|
|
735
893
|
agentId: Schema7.String,
|
|
736
894
|
prompt: Schema7.String,
|
|
895
|
+
skill: Schema7.optionalKey(Schema7.String.check(Schema7.isMinLength(1))),
|
|
737
896
|
outputSchema: Schema7.Json,
|
|
738
|
-
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)))
|
|
739
900
|
},
|
|
740
901
|
success: Schema7.Struct({ stepAttemptId: Schema7.String }),
|
|
741
902
|
error: RunnerRpcError
|
|
@@ -745,7 +906,14 @@ class RunnerCapabilityRpcs extends RpcGroup.make(Rpc.make("PutQuestion", {
|
|
|
745
906
|
step: Schema7.String,
|
|
746
907
|
deferredName: Schema7.String,
|
|
747
908
|
revision: Schema7.optionalKey(Schema7.String),
|
|
748
|
-
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
|
+
}))
|
|
749
917
|
},
|
|
750
918
|
success: Schema7.Struct({ verificationId: Schema7.String }),
|
|
751
919
|
error: RunnerRpcError
|
|
@@ -756,7 +924,22 @@ class RunnerCapabilityRpcs extends RpcGroup.make(Rpc.make("PutQuestion", {
|
|
|
756
924
|
deferredName: Schema7.String,
|
|
757
925
|
event: Schema7.String,
|
|
758
926
|
filter: Schema7.optional(Schema7.Record(Schema7.String, Schema7.Union([EventFilterValue, Schema7.Array(EventFilterValue)]))),
|
|
759
|
-
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"])
|
|
760
943
|
},
|
|
761
944
|
error: RunnerRpcError
|
|
762
945
|
}), Rpc.make("AdmitChild", {
|
|
@@ -794,7 +977,14 @@ class RunnerCapabilityRpcs extends RpcGroup.make(Rpc.make("PutQuestion", {
|
|
|
794
977
|
lease: ProgramLease,
|
|
795
978
|
step: Schema7.String,
|
|
796
979
|
effect: Schema7.Union([
|
|
797
|
-
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
|
+
}),
|
|
798
988
|
Schema7.Struct({
|
|
799
989
|
kind: Schema7.Literal("change_request"),
|
|
800
990
|
title: Schema7.String,
|
|
@@ -810,14 +1000,33 @@ class RunnerCapabilityRpcs extends RpcGroup.make(Rpc.make("PutQuestion", {
|
|
|
810
1000
|
},
|
|
811
1001
|
success: Schema7.UndefinedOr(Schema7.Struct({ id: Schema7.String, number: Schema7.String, url: Schema7.String })),
|
|
812
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
|
|
813
1020
|
}), Rpc.make("ReadTranscripts", {
|
|
814
1021
|
payload: { lease: ProgramLease, step: Schema7.String, days: Schema7.Int },
|
|
815
1022
|
success: Schema7.Struct({
|
|
816
1023
|
runs: Schema7.Array(Schema7.Struct({
|
|
817
1024
|
runId: Schema7.String,
|
|
818
1025
|
loopId: Schema7.String,
|
|
1026
|
+
status: Schema7.optionalKey(Schema7.Literals(["completed", "failed", "canceled", "expired"])),
|
|
819
1027
|
teamId: Schema7.optionalKey(Schema7.String),
|
|
820
1028
|
failure: Schema7.optionalKey(Schema7.String),
|
|
1029
|
+
retried: Schema7.optionalKey(Schema7.Boolean),
|
|
821
1030
|
entries: Schema7.Array(Schema7.Struct({
|
|
822
1031
|
stepAttemptId: Schema7.String,
|
|
823
1032
|
sequence: Schema7.Int,
|
|
@@ -827,6 +1036,65 @@ class RunnerCapabilityRpcs extends RpcGroup.make(Rpc.make("PutQuestion", {
|
|
|
827
1036
|
}))
|
|
828
1037
|
}),
|
|
829
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
|
|
830
1098
|
}), Rpc.make("Propose", {
|
|
831
1099
|
payload: {
|
|
832
1100
|
lease: ProgramLease,
|
|
@@ -843,11 +1111,16 @@ class RunnerCapabilityRpcs extends RpcGroup.make(Rpc.make("PutQuestion", {
|
|
|
843
1111
|
title: Schema7.String,
|
|
844
1112
|
description: Schema7.String,
|
|
845
1113
|
teamId: Schema7.optionalKey(Schema7.String),
|
|
1114
|
+
key: Schema7.optionalKey(Schema7.String),
|
|
846
1115
|
citations: Schema7.NonEmptyArray(Schema7.Struct({ runId: Schema7.String, stepAttemptId: Schema7.String, sequence: Schema7.Int }))
|
|
847
1116
|
})
|
|
848
1117
|
])
|
|
849
1118
|
},
|
|
850
|
-
success: Schema7.Struct({
|
|
1119
|
+
success: Schema7.Struct({
|
|
1120
|
+
kind: Schema7.Literals(["memory", "task"]),
|
|
1121
|
+
id: Schema7.String,
|
|
1122
|
+
matched: Schema7.optionalKey(Schema7.Boolean)
|
|
1123
|
+
}),
|
|
851
1124
|
error: RunnerRpcError
|
|
852
1125
|
}), Rpc.make("ReadProject", {
|
|
853
1126
|
payload: { lease: ProgramLease, step: Schema7.String, projectId: Schema7.String },
|
|
@@ -890,13 +1163,14 @@ class RunnerCapabilityRpcs extends RpcGroup.make(Rpc.make("PutQuestion", {
|
|
|
890
1163
|
}), Rpc.make("CreatePlanTasks", {
|
|
891
1164
|
payload: {
|
|
892
1165
|
lease: ProgramLease,
|
|
1166
|
+
projectId: Schema7.optionalKey(Schema7.String),
|
|
893
1167
|
tickets: Schema7.Array(Schema7.Struct({
|
|
894
1168
|
key: Schema7.String,
|
|
895
1169
|
title: Schema7.String,
|
|
896
1170
|
body: Schema7.String,
|
|
897
1171
|
acceptanceCriteria: Schema7.Array(Schema7.String),
|
|
898
1172
|
blockedBy: Schema7.Array(Schema7.String),
|
|
899
|
-
outcome: Schema7.optionalKey(Schema7.Literals(["feature", "bug", "refactor", "investigation", "docs", "migration"]))
|
|
1173
|
+
outcome: Schema7.optionalKey(Schema7.Literals(["feature", "bug", "refactor", "investigation", "docs", "migration", "performance"]))
|
|
900
1174
|
}))
|
|
901
1175
|
},
|
|
902
1176
|
success: Schema7.Array(Schema7.Struct({ key: Schema7.String, taskId: Schema7.String })),
|
|
@@ -906,12 +1180,53 @@ class RunnerCapabilityRpcs extends RpcGroup.make(Rpc.make("PutQuestion", {
|
|
|
906
1180
|
success: Schema7.Struct({ repoBindingId: Schema7.String, branch: Schema7.String, revision: Schema7.String }),
|
|
907
1181
|
error: RunnerRpcError
|
|
908
1182
|
}), Rpc.make("MergeChangeRequest", {
|
|
909
|
-
payload: {
|
|
1183
|
+
payload: {
|
|
1184
|
+
lease: ProgramLease,
|
|
1185
|
+
step: Schema7.String,
|
|
1186
|
+
changeRequestId: Schema7.String,
|
|
1187
|
+
head: Schema7.optionalKey(Schema7.String)
|
|
1188
|
+
},
|
|
910
1189
|
success: Schema7.Union([
|
|
911
1190
|
Schema7.Struct({ status: Schema7.Literal("merged"), revision: Schema7.String }),
|
|
912
|
-
Schema7.Struct({ status: Schema7.Literal("conflict") })
|
|
1191
|
+
Schema7.Struct({ status: Schema7.Literal("conflict") }),
|
|
1192
|
+
Schema7.Struct({ status: Schema7.Literal("moved"), head: Schema7.String })
|
|
1193
|
+
]),
|
|
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 })
|
|
913
1208
|
]),
|
|
914
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
|
|
915
1230
|
}), Rpc.make("PublishRelease", {
|
|
916
1231
|
payload: {
|
|
917
1232
|
lease: ProgramLease,
|
|
@@ -1055,6 +1370,8 @@ var emptyWorkflow = Workflow.make("kitman-loop/none", { payload: {}, idempotency
|
|
|
1055
1370
|
var replayStatuses = new Set([401, 403, 409, 429]);
|
|
1056
1371
|
var isRunnerRpcError = Schema8.is(RunnerRpcError);
|
|
1057
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(", ");
|
|
1058
1375
|
var refusedStep2 = (cause) => {
|
|
1059
1376
|
if (isRunFileRefused(cause))
|
|
1060
1377
|
return true;
|
|
@@ -1062,42 +1379,61 @@ var refusedStep2 = (cause) => {
|
|
|
1062
1379
|
return true;
|
|
1063
1380
|
return isRunnerRpcError(cause) && cause.status >= 400 && cause.status < 500 && !replayStatuses.has(cause.status);
|
|
1064
1381
|
};
|
|
1065
|
-
var
|
|
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)));
|
|
1066
1386
|
var runnerHost = (capabilities) => ({
|
|
1067
|
-
putQuestion: (launch) =>
|
|
1387
|
+
putQuestion: (launch) => requested2(launch.step, capabilities.putQuestion({
|
|
1068
1388
|
step: launch.step,
|
|
1069
1389
|
prompt: launch.prompt,
|
|
1070
1390
|
deferredName: answerDeferred2(launch.step).name,
|
|
1391
|
+
...questionAdvice(launch),
|
|
1071
1392
|
...launch.options === undefined ? undefined : { options: launch.options },
|
|
1072
|
-
...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 }
|
|
1073
1396
|
})).pipe(Effect2.asVoid),
|
|
1074
|
-
startVerification: (launch) =>
|
|
1397
|
+
startVerification: (launch) => requested2(launch.step, capabilities.startVerification({
|
|
1075
1398
|
step: launch.step,
|
|
1076
|
-
deferredName: verifyDeferred2(launch.step).name,
|
|
1399
|
+
deferredName: (launch.measure === undefined ? verifyDeferred2 : measureDeferred2)(launch.step).name,
|
|
1077
1400
|
...launch.revision === undefined ? undefined : { revision: launch.revision },
|
|
1078
|
-
...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 }
|
|
1079
1404
|
})).pipe(Effect2.asVoid),
|
|
1080
|
-
startAgentWork: (launch) =>
|
|
1405
|
+
startAgentWork: (launch) => requested2(launch.step, capabilities.startAgentStep({
|
|
1081
1406
|
step: launch.step,
|
|
1082
|
-
deferredName:
|
|
1407
|
+
deferredName: launch.deferredName,
|
|
1083
1408
|
role: launch.role,
|
|
1084
1409
|
agentId: launch.agent,
|
|
1085
1410
|
prompt: launch.prompt,
|
|
1411
|
+
...launch.skill === undefined ? undefined : { skill: launch.skill },
|
|
1086
1412
|
outputSchema: launch.output,
|
|
1087
|
-
...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 }
|
|
1088
1416
|
})).pipe(Effect2.asVoid),
|
|
1089
|
-
admitChild: (launch) =>
|
|
1417
|
+
admitChild: (launch) => requested2(launch.step, capabilities.admitChild({
|
|
1090
1418
|
step: launch.step,
|
|
1091
1419
|
loop: launch.loop,
|
|
1092
1420
|
input: launch.input,
|
|
1093
1421
|
deferredName: childDeferred2(launch.step).name
|
|
1094
1422
|
})).pipe(Effect2.asVoid),
|
|
1095
|
-
|
|
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({
|
|
1096
1430
|
step: launch.step,
|
|
1097
1431
|
deferredName: eventDeferred2(launch.step).name,
|
|
1098
1432
|
event: launch.event,
|
|
1099
1433
|
...launch.filter === undefined ? undefined : { filter: launch.filter },
|
|
1100
|
-
timeoutMillis: launch.timeoutMillis
|
|
1434
|
+
timeoutMillis: launch.timeoutMillis,
|
|
1435
|
+
...launch.since === undefined ? undefined : { since: launch.since },
|
|
1436
|
+
...launch.or === undefined ? undefined : { or: launch.or }
|
|
1101
1437
|
}))
|
|
1102
1438
|
});
|
|
1103
1439
|
var put2 = (target, contentType, body) => Effect2.gen(function* () {
|
|
@@ -1134,7 +1470,7 @@ var uploadRunFile2 = (files, file) => Effect2.gen(function* () {
|
|
|
1134
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 }));
|
|
1135
1471
|
});
|
|
1136
1472
|
var keepFile = (files, step, { path, caption }) => Effect2.gen(function* () {
|
|
1137
|
-
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}` })) :
|
|
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))));
|
|
1138
1474
|
if (kept.status !== "available")
|
|
1139
1475
|
return yield* new StepFailed2({
|
|
1140
1476
|
step,
|
|
@@ -1144,7 +1480,7 @@ var keepFile = (files, step, { path, caption }) => Effect2.gen(function* () {
|
|
|
1144
1480
|
});
|
|
1145
1481
|
var runnerActivities = (capabilities, services) => ({
|
|
1146
1482
|
changeRequest: {
|
|
1147
|
-
run: (request, step) =>
|
|
1483
|
+
run: (request, step) => requested2(step, capabilities.performHostEffect({
|
|
1148
1484
|
step,
|
|
1149
1485
|
effect: {
|
|
1150
1486
|
kind: "change_request",
|
|
@@ -1155,7 +1491,7 @@ var runnerActivities = (capabilities, services) => ({
|
|
|
1155
1491
|
})).pipe(Effect2.filterOrFail((opened) => opened !== undefined, () => new StepFailed2({ step, reason: "Kitman opened no ChangeRequest" })))
|
|
1156
1492
|
},
|
|
1157
1493
|
writeBack: {
|
|
1158
|
-
run: (request, step) =>
|
|
1494
|
+
run: (request, step) => requested2(step, capabilities.performHostEffect({
|
|
1159
1495
|
step,
|
|
1160
1496
|
effect: {
|
|
1161
1497
|
kind: "write_back",
|
|
@@ -1165,32 +1501,43 @@ var runnerActivities = (capabilities, services) => ({
|
|
|
1165
1501
|
})).pipe(Effect2.asVoid)
|
|
1166
1502
|
},
|
|
1167
1503
|
artifact: {
|
|
1168
|
-
run: ({ files, ...request }, step) =>
|
|
1504
|
+
run: ({ files, ...request }, step) => requested2(step, capabilities.storeArtifact({
|
|
1169
1505
|
step,
|
|
1170
1506
|
...request,
|
|
1171
1507
|
...files === undefined ? undefined : { fileIds: files.map((shown) => shown.id) }
|
|
1172
1508
|
}))
|
|
1173
1509
|
},
|
|
1174
1510
|
file: { run: (request, step) => keepFile(capabilities, step, request).pipe(Effect2.provideContext(services)) },
|
|
1175
|
-
note: { run: (request, step) =>
|
|
1511
|
+
note: { run: (request, step) => requested2(step, capabilities.recordNote({ step, ...request })) },
|
|
1176
1512
|
createTasks: {
|
|
1177
|
-
run: (request, step) =>
|
|
1513
|
+
run: (request, step) => requested2(step, Effect2.map(capabilities.createPlanTasks(request.tickets, request.projectId), (tasks) => ({ tasks })))
|
|
1178
1514
|
},
|
|
1515
|
+
alertTask: { run: (request, step) => requested2(step, capabilities.alertTask({ step, ...request })) },
|
|
1179
1516
|
integrationBranch: {
|
|
1180
|
-
run: (request, step) =>
|
|
1517
|
+
run: (request, step) => requested2(step, capabilities.integrationBranch(request.repoBindingId))
|
|
1518
|
+
},
|
|
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 }))
|
|
1181
1525
|
},
|
|
1182
|
-
|
|
1183
|
-
|
|
1184
|
-
|
|
1185
|
-
draftUpdate: { run: (request, step) => requested(step, capabilities.draftUpdate({ step, ...request })) },
|
|
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 })) },
|
|
1186
1529
|
mergeChangeRequest: {
|
|
1187
|
-
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 }))
|
|
1188
1535
|
},
|
|
1189
1536
|
release: {
|
|
1190
|
-
run: ({ revision, ...request }, step) =>
|
|
1537
|
+
run: ({ revision, ...request }, step) => requested2(step, capabilities.publishRelease({ step, ...request, ...revision === undefined ? undefined : { revision } }))
|
|
1191
1538
|
},
|
|
1192
1539
|
comment: {
|
|
1193
|
-
run: (request, step) =>
|
|
1540
|
+
run: (request, step) => requested2(step, capabilities.performHostEffect({ step, effect: { kind: "post_comment", ...request } })).pipe(Effect2.asVoid)
|
|
1194
1541
|
}
|
|
1195
1542
|
});
|
|
1196
1543
|
var describeFailure = (cause) => {
|
|
@@ -1206,7 +1553,7 @@ var runProgram2 = (loop, work, { journal, capabilities }) => Effect2.scoped(Effe
|
|
|
1206
1553
|
const execute = executeLoop2(loop, {
|
|
1207
1554
|
host: runnerHost(capabilities),
|
|
1208
1555
|
activities: runnerActivities(capabilities, services),
|
|
1209
|
-
granted: new Set(loop.
|
|
1556
|
+
granted: new Set(capabilitiesOf2(loop).filter((capability) => work.granted.includes(capability)))
|
|
1210
1557
|
});
|
|
1211
1558
|
yield* Layer.build(workflow.toLayer(execute).pipe(Layer.provide(Layer.succeed(WorkflowEngine.WorkflowEngine)(engine))));
|
|
1212
1559
|
const result = yield* encoded.execute(workflow, {
|
|
@@ -1262,25 +1609,32 @@ var rpcProgramPorts2 = (rpc, work) => {
|
|
|
1262
1609
|
step: question.step,
|
|
1263
1610
|
prompt: question.prompt,
|
|
1264
1611
|
deferredName: question.deferredName,
|
|
1612
|
+
...questionAdvice(question),
|
|
1265
1613
|
...question.options === undefined ? undefined : { options: [...question.options] },
|
|
1266
|
-
...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 }
|
|
1267
1617
|
}),
|
|
1268
1618
|
startVerification: (verification) => rpc.startVerification({
|
|
1269
1619
|
lease,
|
|
1270
1620
|
step: verification.step,
|
|
1271
1621
|
deferredName: verification.deferredName,
|
|
1272
1622
|
...verification.revision === undefined ? undefined : { revision: verification.revision },
|
|
1273
|
-
...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 }
|
|
1274
1626
|
}),
|
|
1275
1627
|
startAgentStep: ({ secrets, ...step }) => rpc.startAgentStep({ lease, ...step, ...secrets === undefined ? undefined : { secrets: [...secrets] } }),
|
|
1276
1628
|
awaitEvent: (wait) => rpc.awaitEvent({ lease, ...wait }),
|
|
1629
|
+
claimResource: (claim) => rpc.claimResource({ lease, ...claim }),
|
|
1277
1630
|
admitChild: (child) => rpc.admitChild({ lease, ...child }),
|
|
1278
1631
|
storeArtifact: ({ fileIds, ...artifact }) => rpc.storeArtifact({ lease, ...artifact, ...fileIds === undefined ? undefined : { fileIds: [...fileIds] } }),
|
|
1279
1632
|
...rpcRunFiles2(rpc, lease),
|
|
1280
1633
|
recordNote: (note) => rpc.recordNote({ lease, ...note }),
|
|
1281
1634
|
performHostEffect: (request) => rpc.performHostEffect({ lease, ...request }),
|
|
1282
|
-
createPlanTasks: (tickets) => rpc.createPlanTasks({
|
|
1635
|
+
createPlanTasks: (tickets, projectId) => rpc.createPlanTasks({
|
|
1283
1636
|
lease,
|
|
1637
|
+
...projectId === undefined ? undefined : { projectId },
|
|
1284
1638
|
tickets: tickets.map((ticket) => ({
|
|
1285
1639
|
key: ticket.key,
|
|
1286
1640
|
title: ticket.title,
|
|
@@ -1291,7 +1645,13 @@ var rpcProgramPorts2 = (rpc, work) => {
|
|
|
1291
1645
|
}))
|
|
1292
1646
|
}),
|
|
1293
1647
|
integrationBranch: (repoBindingId) => rpc.integrationBranch({ lease, ...repoBindingId === undefined ? undefined : { repoBindingId } }),
|
|
1648
|
+
alertTask: (request) => rpc.alertTask({ lease, ...request }),
|
|
1294
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 }),
|
|
1295
1655
|
propose: ({ step, proposal }) => rpc.propose({
|
|
1296
1656
|
lease,
|
|
1297
1657
|
step,
|
|
@@ -1300,6 +1660,7 @@ var rpcProgramPorts2 = (rpc, work) => {
|
|
|
1300
1660
|
title: proposal.title,
|
|
1301
1661
|
description: proposal.description,
|
|
1302
1662
|
...proposal.teamId === undefined ? undefined : { teamId: proposal.teamId },
|
|
1663
|
+
...proposal.key === undefined ? undefined : { key: proposal.key },
|
|
1303
1664
|
citations: [...proposal.citations]
|
|
1304
1665
|
}
|
|
1305
1666
|
}),
|
|
@@ -1314,6 +1675,9 @@ var rpcProgramPorts2 = (rpc, work) => {
|
|
|
1314
1675
|
}
|
|
1315
1676
|
}),
|
|
1316
1677
|
mergeChangeRequest: (request) => rpc.mergeChangeRequest({ lease, ...request }),
|
|
1678
|
+
closeChangeRequest: (request) => rpc.closeChangeRequest({ lease, ...request }),
|
|
1679
|
+
approveChangeRequest: (request) => rpc.approveChangeRequest({ lease, ...request }),
|
|
1680
|
+
rerunPipeline: (request) => rpc.rerunPipeline({ lease, ...request }),
|
|
1317
1681
|
publishRelease: (request) => rpc.publishRelease({ lease, ...request })
|
|
1318
1682
|
};
|
|
1319
1683
|
return { journal, capabilities };
|
|
@@ -1356,6 +1720,7 @@ var makeProgramRpcClient = (options) => Effect3.gen(function* () {
|
|
|
1356
1720
|
startAgentStep: (input) => authorized(client.StartAgentStep(input)),
|
|
1357
1721
|
startVerification: (input) => authorized(client.StartVerification(input)),
|
|
1358
1722
|
awaitEvent: (input) => authorized(client.AwaitEvent(input)),
|
|
1723
|
+
claimResource: (input) => authorized(client.ClaimResource(input)),
|
|
1359
1724
|
admitChild: (input) => authorized(client.AdmitChild(input)),
|
|
1360
1725
|
storeArtifact: (input) => authorized(client.StoreArtifact(input)),
|
|
1361
1726
|
createRunFile: (input) => authorized(client.CreateRunFile(input)),
|
|
@@ -1364,12 +1729,21 @@ var makeProgramRpcClient = (options) => Effect3.gen(function* () {
|
|
|
1364
1729
|
recordNote: (input) => authorized(client.RecordNote(input)),
|
|
1365
1730
|
performHostEffect: (input) => authorized(client.PerformHostEffect(input)),
|
|
1366
1731
|
createPlanTasks: (input) => authorized(client.CreatePlanTasks(input)),
|
|
1732
|
+
alertTask: (input) => authorized(client.AlertTask(input)),
|
|
1367
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)),
|
|
1368
1739
|
propose: (input) => authorized(client.Propose(input)),
|
|
1369
1740
|
readProject: (input) => authorized(client.ReadProject(input)),
|
|
1370
1741
|
draftUpdate: (input) => authorized(client.DraftUpdate(input)),
|
|
1371
1742
|
integrationBranch: (input) => authorized(client.IntegrationBranch(input)),
|
|
1372
1743
|
mergeChangeRequest: (input) => authorized(client.MergeChangeRequest(input)),
|
|
1744
|
+
closeChangeRequest: (input) => authorized(client.CloseChangeRequest(input)),
|
|
1745
|
+
approveChangeRequest: (input) => authorized(client.ApproveChangeRequest(input)),
|
|
1746
|
+
rerunPipeline: (input) => authorized(client.RerunPipeline(input)),
|
|
1373
1747
|
publishRelease: (input) => authorized(client.PublishRelease(input))
|
|
1374
1748
|
};
|
|
1375
1749
|
});
|
|
@@ -1386,13 +1760,16 @@ import * as Redacted2 from "effect/Redacted";
|
|
|
1386
1760
|
import * as Schema9 from "effect/Schema";
|
|
1387
1761
|
import * as FetchHttpClient from "effect/http/FetchHttpClient";
|
|
1388
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
|
+
});
|
|
1389
1771
|
var Described2 = Schema9.Union([
|
|
1390
|
-
Schema9.TaggedStruct("Described", {
|
|
1391
|
-
loops: Schema9.Array(LoopManifest),
|
|
1392
|
-
agents: Schema9.Record(Schema9.String, Schema9.Json),
|
|
1393
|
-
schedules: Schema9.optionalKey(Schema9.Record(Schema9.String, Schema9.Json)),
|
|
1394
|
-
kits: Schema9.optionalKey(Schema9.Record(Schema9.String, Schema9.Json))
|
|
1395
|
-
}),
|
|
1772
|
+
Schema9.TaggedStruct("Described", { kits: Schema9.Array(DescribedKit) }),
|
|
1396
1773
|
Schema9.TaggedStruct("Refused", { error: Schema9.Union([ManifestInvalid2, LoopCheckError2]) })
|
|
1397
1774
|
]);
|
|
1398
1775
|
var encodeDescribed = Schema9.encodeEffect(Schema9.fromJsonString(Schema9.toCodecJson(Described2)));
|
|
@@ -1481,31 +1858,58 @@ var networkGuard2 = (input) => {
|
|
|
1481
1858
|
});
|
|
1482
1859
|
return { fetch, journal };
|
|
1483
1860
|
};
|
|
1484
|
-
var
|
|
1485
|
-
const
|
|
1486
|
-
|
|
1487
|
-
|
|
1488
|
-
|
|
1489
|
-
|
|
1490
|
-
|
|
1491
|
-
|
|
1492
|
-
|
|
1493
|
-
|
|
1494
|
-
|
|
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
|
+
}
|
|
1495
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 };
|
|
1496
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));
|
|
1497
1901
|
var readStdin = Effect4.tryPromise(() => Bun.stdin.text());
|
|
1498
1902
|
var isWorkUnit = guard(ProgramWorkUnit);
|
|
1499
|
-
var host = (
|
|
1903
|
+
var host = (carried) => Effect4.gen(function* () {
|
|
1500
1904
|
const loopId = yield* Config.String("KITMAN_LOOP_ID");
|
|
1501
1905
|
const apiUrl = yield* Config.String("KITMAN_API_URL");
|
|
1502
1906
|
const credential = yield* Config.Redacted("KITMAN_PROGRAM_CREDENTIAL");
|
|
1503
1907
|
const work = yield* Schema9.decodeEffect(Schema9.fromJsonString(Schema9.Unknown))(yield* readStdin);
|
|
1504
1908
|
if (!isWorkUnit(work))
|
|
1505
1909
|
return yield* new ProgramRefused({ reason: "stdin holds no orchestration Work Unit" });
|
|
1506
|
-
const loop = config.loops.find((candidate) => candidate.id === loopId);
|
|
1910
|
+
const loop = carried.flatMap((kit) => kit.config.loops).find((candidate) => candidate.id === loopId);
|
|
1507
1911
|
if (loop === undefined)
|
|
1508
|
-
return yield* new ProgramRefused({ reason: `The
|
|
1912
|
+
return yield* new ProgramRefused({ reason: `The Kit carries no Loop "${loopId}"` });
|
|
1509
1913
|
const hosts = yield* Config.option(Config.String(programHostsEnv2));
|
|
1510
1914
|
const undeclared = yield* Config.option(Config.Literals(["fail", "warn"], undeclaredHostsEnv2));
|
|
1511
1915
|
const proxy = yield* Config.option(Config.String("HTTPS_PROXY"));
|
|
@@ -1529,9 +1933,10 @@ var host = (config) => Effect4.gen(function* () {
|
|
|
1529
1933
|
const ports = rpcProgramPorts2(rpc, work);
|
|
1530
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)));
|
|
1531
1935
|
}).pipe(Effect4.scoped, Effect4.catch((error) => Effect4.as(Effect4.logError(error.message), 2)));
|
|
1532
|
-
var
|
|
1533
|
-
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);
|
|
1534
1939
|
BunRuntime.runMain(program.pipe(Effect4.flatMap((code) => Effect4.sync(() => process.exit(code)))));
|
|
1535
1940
|
};
|
|
1536
1941
|
|
|
1537
|
-
export { digestSha256, RunnerRpcProtocolVersion, JournalWriteFailed2, refusedStep2, uploadRunFile2, runProgram2, programLease2, rpcRunFiles2, rpcProgramPorts2, describeFlag2, Described2, programSecrets2, programHostsEnv2, undeclaredHostsEnv2, networkGuard2,
|
|
1942
|
+
export { digestSha256, digestSha512, digestWith, kitmanMcpServer, RunnerRpcProtocolVersion, JournalWriteFailed2, refusedStep2, requested2, uploadRunFile2, runProgram2, programLease2, rpcRunFiles2, rpcProgramPorts2, describeFlag2, Described2, programSecrets2, programHostsEnv2, undeclaredHostsEnv2, networkGuard2, carriedKits2, runKit2 };
|