@kitman-sh/sdk 0.0.0-stage → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. package/dist/build/index.js +215 -0
  2. package/dist/chunk-f3d6cvkg.js +958 -0
  3. package/dist/chunk-jnxc0c54.js +3963 -0
  4. package/dist/loop/index.js +193 -0
  5. package/dist/program/index.js +24 -0
  6. package/package.json +29 -4
  7. package/types/packages/core/src/a2a.d.ts +577 -0
  8. package/types/packages/core/src/agent-capabilities.d.ts +1424 -0
  9. package/types/packages/core/src/agent-environment.d.ts +2429 -0
  10. package/types/packages/core/src/agent-launch-snapshot.d.ts +44 -0
  11. package/types/packages/core/src/agent-sandbox-policy.d.ts +31 -0
  12. package/types/packages/core/src/approval-queue.d.ts +126 -0
  13. package/types/packages/core/src/audit.d.ts +52 -0
  14. package/types/packages/core/src/change-delivery.d.ts +39 -0
  15. package/types/packages/core/src/change-request-review.d.ts +146 -0
  16. package/types/packages/core/src/change-request.d.ts +432 -0
  17. package/types/packages/core/src/common.d.ts +6 -0
  18. package/types/packages/core/src/connection.d.ts +33 -0
  19. package/types/packages/core/src/context-feedback.d.ts +89 -0
  20. package/types/packages/core/src/context-pack.d.ts +182 -0
  21. package/types/packages/core/src/crypto.d.ts +11 -0
  22. package/types/packages/core/src/data-lifecycle.d.ts +195 -0
  23. package/types/packages/core/src/decision.d.ts +48 -0
  24. package/types/packages/core/src/delivery-operation.d.ts +125 -0
  25. package/types/packages/core/src/delivery-policy.d.ts +174 -0
  26. package/types/packages/core/src/engineering-resources.d.ts +26 -0
  27. package/types/packages/core/src/enterprise-code-host.d.ts +21 -0
  28. package/types/packages/core/src/epic-delivery.d.ts +38 -0
  29. package/types/packages/core/src/extension.d.ts +35 -0
  30. package/types/packages/core/src/external-effect.d.ts +313 -0
  31. package/types/packages/core/src/fix-flow.d.ts +149 -0
  32. package/types/packages/core/src/following.d.ts +59 -0
  33. package/types/packages/core/src/github-delivery-fixtures.d.ts +28 -0
  34. package/types/packages/core/src/github-delivery.d.ts +78 -0
  35. package/types/packages/core/src/gitlab-delivery-fixtures.d.ts +26 -0
  36. package/types/packages/core/src/gitlab-delivery.d.ts +76 -0
  37. package/types/packages/core/src/global-search.d.ts +42 -0
  38. package/types/packages/core/src/id.d.ts +1 -0
  39. package/types/packages/core/src/index.d.ts +74 -0
  40. package/types/packages/core/src/integration.d.ts +137 -0
  41. package/types/packages/core/src/intent.d.ts +260 -0
  42. package/types/packages/core/src/json.d.ts +10 -0
  43. package/types/packages/core/src/kit-taxonomy.d.ts +21 -0
  44. package/types/packages/core/src/kit.d.ts +1489 -0
  45. package/types/packages/core/src/live.d.ts +8309 -0
  46. package/types/packages/core/src/loop-layers.d.ts +59 -0
  47. package/types/packages/core/src/loop-version.d.ts +59 -0
  48. package/types/packages/core/src/loop.d.ts +3076 -0
  49. package/types/packages/core/src/me.d.ts +31 -0
  50. package/types/packages/core/src/memory.d.ts +88 -0
  51. package/types/packages/core/src/my-teams.d.ts +1230 -0
  52. package/types/packages/core/src/notification.d.ts +181 -0
  53. package/types/packages/core/src/observability.d.ts +175 -0
  54. package/types/packages/core/src/package-declarations.d.ts +427 -0
  55. package/types/packages/core/src/package.d.ts +369 -0
  56. package/types/packages/core/src/personal-development-profile.d.ts +11 -0
  57. package/types/packages/core/src/platform-release.d.ts +60 -0
  58. package/types/packages/core/src/program-credential.d.ts +10 -0
  59. package/types/packages/core/src/project.d.ts +64 -0
  60. package/types/packages/core/src/proposal.d.ts +292 -0
  61. package/types/packages/core/src/provider-safe-text.d.ts +2 -0
  62. package/types/packages/core/src/redaction.d.ts +73 -0
  63. package/types/packages/core/src/repo-binding.d.ts +123 -0
  64. package/types/packages/core/src/run-journal.d.ts +28 -0
  65. package/types/packages/core/src/run-launch.d.ts +67 -0
  66. package/types/packages/core/src/run.d.ts +566 -0
  67. package/types/packages/core/src/runner-eligibility.d.ts +39 -0
  68. package/types/packages/core/src/runner-routing.d.ts +11 -0
  69. package/types/packages/core/src/runner-trust.d.ts +67 -0
  70. package/types/packages/core/src/runner.d.ts +3672 -0
  71. package/types/packages/core/src/runtime-type.d.ts +36 -0
  72. package/types/packages/core/src/schedule.d.ts +136 -0
  73. package/types/packages/core/src/schema.d.ts +89 -0
  74. package/types/packages/core/src/scope-directory.d.ts +100 -0
  75. package/types/packages/core/src/secret.d.ts +37 -0
  76. package/types/packages/core/src/session.d.ts +90 -0
  77. package/types/packages/core/src/step-brief.d.ts +50 -0
  78. package/types/packages/core/src/sync-kit.d.ts +587 -0
  79. package/types/packages/core/src/task-detail.d.ts +491 -0
  80. package/types/packages/core/src/task-execution-record.d.ts +620 -0
  81. package/types/packages/core/src/task-key.d.ts +9 -0
  82. package/types/packages/core/src/task.d.ts +543 -0
  83. package/types/packages/core/src/trigger-dispatch.d.ts +421 -0
  84. package/types/packages/core/src/work-unit.d.ts +725 -0
  85. package/types/packages/core/src/workspace.d.ts +50 -0
  86. package/types/packages/live/src/rpc/runner-client.d.ts +938 -0
  87. package/types/packages/live/src/rpc/runner-group.d.ts +730 -0
  88. package/types/packages/sdk/src/build/index.d.ts +45 -0
  89. package/types/packages/sdk/src/loop/activities.d.ts +187 -0
  90. package/types/packages/sdk/src/loop/check.d.ts +39 -0
  91. package/types/packages/sdk/src/loop/config.d.ts +68 -0
  92. package/types/packages/sdk/src/loop/define.d.ts +69 -0
  93. package/types/packages/sdk/src/loop/evidence.d.ts +66 -0
  94. package/types/packages/sdk/src/loop/index.d.ts +9 -0
  95. package/types/packages/sdk/src/loop/plan.d.ts +43 -0
  96. package/types/packages/sdk/src/loop/review.d.ts +86 -0
  97. package/types/packages/sdk/src/loop/steps.d.ts +224 -0
  98. package/types/packages/sdk/src/loop/test-loop.d.ts +112 -0
  99. package/types/packages/sdk/src/program/engine.d.ts +144 -0
  100. package/types/packages/sdk/src/program/host.d.ts +48 -0
  101. package/types/packages/sdk/src/program/index.d.ts +2 -0
  102. package/README.md +0 -3
@@ -0,0 +1,3963 @@
1
+ // @bun
2
+ // packages/core/src/package-declarations.ts
3
+ import * as Schema14 from "effect/Schema";
4
+
5
+ // packages/core/src/loop-version.ts
6
+ import * as Schema3 from "effect/Schema";
7
+
8
+ // packages/core/src/common.ts
9
+ import * as Schema2 from "effect/Schema";
10
+
11
+ // packages/core/src/schema.ts
12
+ import * as Exit from "effect/Exit";
13
+ import * as JsonSchema from "effect/JsonSchema";
14
+ import * as Predicate from "effect/Predicate";
15
+ import * as Schema from "effect/Schema";
16
+ var Days = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
17
+ var DatePattern = /^(\d\d\d\d)-(\d\d)-(\d\d)$/;
18
+ var TimePattern = /^(\d\d):(\d\d):(\d\d)(?:\.\d+)?(?:([Zz])|([+-])(\d\d):(\d\d))$/;
19
+ function isRfc3339Date(value) {
20
+ const match = DatePattern.exec(value);
21
+ if (match === null)
22
+ return false;
23
+ const year = Number(match[1]);
24
+ const month = Number(match[2]);
25
+ const day = Number(match[3]);
26
+ const leap = year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);
27
+ return month >= 1 && month <= 12 && day >= 1 && day <= (month === 2 && leap ? 29 : Days[month] ?? 0);
28
+ }
29
+ function isRfc3339Time(value) {
30
+ const match = TimePattern.exec(value);
31
+ if (match === null)
32
+ return false;
33
+ const hour = Number(match[1]);
34
+ const minute = Number(match[2]);
35
+ const second = Number(match[3]);
36
+ if (hour > 23 || minute > 59 || second > 60)
37
+ return false;
38
+ if (match[5] !== undefined && (Number(match[6]) > 23 || Number(match[7]) > 59))
39
+ return false;
40
+ if (second < 60)
41
+ return true;
42
+ const sign = match[5] === "-" ? -1 : 1;
43
+ const utcMinutes = hour * 60 + minute - sign * (Number(match[6] ?? 0) * 60 + Number(match[7] ?? 0));
44
+ return (utcMinutes % 1440 + 1440) % 1440 === 1439;
45
+ }
46
+ var isDateTime = Schema.makeFilter((value) => {
47
+ const parts = value.split(/T/i);
48
+ return parts.length === 2 && isRfc3339Date(parts[0] ?? "") && isRfc3339Time(parts[1] ?? "");
49
+ }, { expected: "an RFC 3339 date-time", toJsonSchema: () => ({ format: "date-time" }) });
50
+ var Numeric = Schema.Union([Schema.Finite, Schema.FiniteFromString]);
51
+ var isWholeNumber = Schema.makeFilter(Number.isInteger, {
52
+ expected: "an integer",
53
+ toJsonSchema: () => ({ multipleOf: 1 })
54
+ });
55
+ function guard(schema) {
56
+ const cached = guards.get(schema);
57
+ if (cached !== undefined) {
58
+ return cached;
59
+ }
60
+ const decode = Schema.decodeUnknownExit(Schema.toType(schema));
61
+ const created = (input) => Exit.isSuccess(decode(input, { onExcessProperty: "error" })) || hasUndefinedProperty(input) && Exit.isSuccess(decode(withoutUndefined(input), { onExcessProperty: "error" }));
62
+ guards.set(schema, created);
63
+ return created;
64
+ }
65
+ var guards = new WeakMap;
66
+ function hasUndefinedProperty(value) {
67
+ if (Array.isArray(value))
68
+ return value.some(hasUndefinedProperty);
69
+ if (!Predicate.isObject(value))
70
+ return false;
71
+ return Object.values(value).some((entry) => entry === undefined || hasUndefinedProperty(entry));
72
+ }
73
+ function withoutUndefined(value) {
74
+ if (Array.isArray(value)) {
75
+ return value.map(withoutUndefined);
76
+ }
77
+ if (!Predicate.isObject(value) || Object.getPrototypeOf(value) !== Object.prototype)
78
+ return value;
79
+ return Object.fromEntries(Object.entries(value).flatMap(([key, entry]) => entry === undefined ? [] : [[key, withoutUndefined(entry)]]));
80
+ }
81
+
82
+ // packages/core/src/common.ts
83
+ var Id = Schema2.String.check(Schema2.isMinLength(1));
84
+ var Slug = Schema2.String.check(Schema2.isMinLength(1), Schema2.isPattern(new RegExp("^[a-z0-9]+(?:-[a-z0-9]+)*$", "u")));
85
+ var Timestamp = Schema2.String.check(isDateTime);
86
+ var ApiError = Schema2.Struct({
87
+ error: Schema2.Struct({
88
+ code: Schema2.String,
89
+ message: Schema2.String,
90
+ details: Schema2.optionalKey(Schema2.Record(Schema2.String, Schema2.Unknown))
91
+ })
92
+ });
93
+ var ActorType = Schema2.Union([
94
+ Schema2.Literal("human"),
95
+ Schema2.Literal("delegated_agent"),
96
+ Schema2.Literal("agent")
97
+ ]);
98
+
99
+ // packages/core/src/loop-version.ts
100
+ var LoopReferenceSchema = Schema3.Union([
101
+ Schema3.Struct({ loopId: Id, alias: Schema3.String.check(Schema3.isMinLength(1), Schema3.isMaxLength(120)) }),
102
+ Schema3.Struct({ loopId: Id, versionId: Id }),
103
+ Schema3.Struct({ loopId: Id, version: Schema3.Int.check(Schema3.isGreaterThanOrEqualTo(1)) }),
104
+ Schema3.Struct({
105
+ loopId: Id,
106
+ digest: Schema3.String.check(Schema3.isMinLength(64), Schema3.isMaxLength(64), Schema3.isPattern(new RegExp("^[a-f0-9]{64}$", "u")))
107
+ }),
108
+ Schema3.Struct({
109
+ slug: Schema3.String.check(Schema3.isMinLength(1), Schema3.isMaxLength(240)),
110
+ alias: Schema3.String.check(Schema3.isMinLength(1), Schema3.isMaxLength(120))
111
+ }),
112
+ Schema3.Struct({
113
+ slug: Schema3.String.check(Schema3.isMinLength(1), Schema3.isMaxLength(240)),
114
+ version: Schema3.Int.check(Schema3.isGreaterThanOrEqualTo(1))
115
+ }),
116
+ Schema3.Struct({
117
+ slug: Schema3.String.check(Schema3.isMinLength(1), Schema3.isMaxLength(240)),
118
+ digest: Schema3.String.check(Schema3.isMinLength(64), Schema3.isMaxLength(64), Schema3.isPattern(new RegExp("^[a-f0-9]{64}$", "u")))
119
+ })
120
+ ]);
121
+
122
+ // packages/core/src/agent-environment.ts
123
+ import * as Schema4 from "effect/Schema";
124
+ var AgentEnvironmentPolicy = Schema4.Union([Schema4.Literal("recommended"), Schema4.Literal("required")]);
125
+ var AgentHarnessId = Schema4.Union([
126
+ Schema4.Literal("opencode"),
127
+ Schema4.Literal("claude-code"),
128
+ Schema4.Literal("codex"),
129
+ Schema4.Literal("pi")
130
+ ]);
131
+ var Sha256 = Schema4.String.check(Schema4.isPattern(new RegExp("^[a-fA-F0-9]{64}$", "u")));
132
+ var relativePathPattern = "^(?!/)(?!.*\\\\)(?!.*//)(?!.*(?:^|/)\\.\\.?($|/)).+$";
133
+ var skillNamePattern = "^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$";
134
+ var SourcePath = Schema4.String.check(Schema4.isMinLength(1), Schema4.isPattern(new RegExp(relativePathPattern, "u")));
135
+ var SkillSource = Schema4.Union([
136
+ Schema4.Struct({
137
+ kind: Schema4.Literal("skills_sh"),
138
+ slug: Schema4.String.check(Schema4.isMinLength(1)),
139
+ version: Schema4.optionalKey(Schema4.String.check(Schema4.isMinLength(1)))
140
+ }),
141
+ Schema4.Struct({
142
+ kind: Schema4.Literal("kitman"),
143
+ skillId: Schema4.optionalKey(Id),
144
+ name: Schema4.optionalKey(Schema4.String.check(Schema4.isMinLength(1))),
145
+ contentMarkdown: Schema4.optionalKey(Schema4.String.check(Schema4.isMinLength(1))),
146
+ files: Schema4.optionalKey(Schema4.Record(SourcePath, Schema4.String))
147
+ }),
148
+ Schema4.Struct({
149
+ kind: Schema4.Literal("git"),
150
+ url: Schema4.String.check(Schema4.isMinLength(1)),
151
+ ref: Schema4.String.check(Schema4.isMinLength(1)),
152
+ path: Schema4.optionalKey(SourcePath),
153
+ sha256: Schema4.optionalKey(Sha256)
154
+ }),
155
+ Schema4.Struct({
156
+ kind: Schema4.Literal("package"),
157
+ packageName: Schema4.String.check(Schema4.isMinLength(1)),
158
+ version: Schema4.String.check(Schema4.isMinLength(1)),
159
+ path: Schema4.optionalKey(SourcePath),
160
+ sha256: Schema4.optionalKey(Sha256)
161
+ }),
162
+ Schema4.Struct({ kind: Schema4.Literal("url"), url: Schema4.String.check(Schema4.isMinLength(1)), sha256: Sha256 }),
163
+ Schema4.Struct({ kind: Schema4.Literal("local_path"), path: Schema4.String.check(Schema4.isMinLength(1)) })
164
+ ]);
165
+ var PluginSource = Schema4.Union([
166
+ Schema4.Struct({
167
+ kind: Schema4.Literal("package"),
168
+ packageName: Schema4.String.check(Schema4.isMinLength(1)),
169
+ version: Schema4.optionalKey(Schema4.String.check(Schema4.isMinLength(1)))
170
+ }),
171
+ Schema4.Struct({
172
+ kind: Schema4.Literal("git"),
173
+ url: Schema4.String.check(Schema4.isMinLength(1)),
174
+ ref: Schema4.optionalKey(Schema4.String.check(Schema4.isMinLength(1)))
175
+ }),
176
+ Schema4.Struct({
177
+ kind: Schema4.Literal("url"),
178
+ url: Schema4.String.check(Schema4.isMinLength(1)),
179
+ sha256: Schema4.String.check(Schema4.isPattern(new RegExp("^[a-fA-F0-9]{64}$", "u")))
180
+ }),
181
+ Schema4.Struct({ kind: Schema4.Literal("local_path"), path: Schema4.String.check(Schema4.isMinLength(1)) })
182
+ ]);
183
+ var McpServerTransport = Schema4.Union([
184
+ Schema4.Struct({
185
+ kind: Schema4.Literal("stdio"),
186
+ command: Schema4.String.check(Schema4.isMinLength(1)),
187
+ args: Schema4.optionalKey(Schema4.Array(Schema4.String)),
188
+ env: Schema4.optionalKey(Schema4.Record(Schema4.String, Schema4.String))
189
+ }),
190
+ Schema4.Struct({
191
+ kind: Schema4.Literal("streamable_http"),
192
+ url: Schema4.String.check(Schema4.isMinLength(1)),
193
+ headers: Schema4.optionalKey(Schema4.Record(Schema4.String, Schema4.String))
194
+ })
195
+ ]);
196
+ var ProviderAuthRef = Schema4.Union([
197
+ Schema4.Struct({
198
+ provider: Schema4.String.check(Schema4.isMinLength(1)),
199
+ policy: AgentEnvironmentPolicy,
200
+ kind: Schema4.Literal("existing_harness_login"),
201
+ accountHint: Schema4.optionalKey(Schema4.String.check(Schema4.isMinLength(1)))
202
+ }),
203
+ Schema4.Struct({
204
+ provider: Schema4.String.check(Schema4.isMinLength(1)),
205
+ policy: AgentEnvironmentPolicy,
206
+ kind: Schema4.Literal("local_env"),
207
+ envName: Schema4.String.check(Schema4.isMinLength(1))
208
+ }),
209
+ Schema4.Struct({
210
+ provider: Schema4.String.check(Schema4.isMinLength(1)),
211
+ policy: AgentEnvironmentPolicy,
212
+ kind: Schema4.Literal("runner_secret"),
213
+ runnerSecretName: Schema4.String.check(Schema4.isMinLength(1))
214
+ }),
215
+ Schema4.Struct({
216
+ provider: Schema4.String.check(Schema4.isMinLength(1)),
217
+ policy: AgentEnvironmentPolicy,
218
+ kind: Schema4.Literal("managed_oauth"),
219
+ grantId: Schema4.optionalKey(Id)
220
+ })
221
+ ]);
222
+ var RunnerSecretSource = Schema4.Union([
223
+ Schema4.Struct({ kind: Schema4.Literal("env"), envName: Schema4.String.check(Schema4.isMinLength(1)) }),
224
+ Schema4.Struct({ kind: Schema4.Literal("file"), pathRef: Schema4.String.check(Schema4.isMinLength(1)) }),
225
+ Schema4.Struct({ kind: Schema4.Literal("exec"), commandRef: Schema4.String.check(Schema4.isMinLength(1)) })
226
+ ]);
227
+ var RunnerSecretRef = Schema4.Struct({
228
+ name: Schema4.String.check(Schema4.isMinLength(1)),
229
+ policy: AgentEnvironmentPolicy,
230
+ source: RunnerSecretSource,
231
+ capabilities: Schema4.optionalKey(Schema4.Array(Schema4.String.check(Schema4.isMinLength(1))))
232
+ });
233
+ var AgentSkillRequirement = Schema4.Struct({
234
+ name: Schema4.String.check(Schema4.isMinLength(1)),
235
+ policy: AgentEnvironmentPolicy,
236
+ source: SkillSource
237
+ });
238
+ var AgentPluginRequirement = Schema4.Struct({
239
+ name: Schema4.String.check(Schema4.isMinLength(1)),
240
+ policy: AgentEnvironmentPolicy,
241
+ source: PluginSource
242
+ });
243
+ var AgentMcpServerRequirement = Schema4.Struct({
244
+ name: Schema4.String.check(Schema4.isMinLength(1)),
245
+ policy: AgentEnvironmentPolicy,
246
+ transport: McpServerTransport
247
+ });
248
+ var AgentHarnessSetting = Schema4.Struct({
249
+ harness: AgentHarnessId,
250
+ key: Schema4.String.check(Schema4.isMinLength(1)),
251
+ policy: AgentEnvironmentPolicy,
252
+ value: Schema4.Unknown
253
+ });
254
+ var AgentRuntimeConstraint = Schema4.Struct({
255
+ key: Schema4.String.check(Schema4.isMinLength(1)),
256
+ policy: AgentEnvironmentPolicy,
257
+ value: Schema4.Unknown
258
+ });
259
+ var AgentPermissionRequirement = Schema4.Struct({
260
+ key: Schema4.String.check(Schema4.isMinLength(1)),
261
+ policy: AgentEnvironmentPolicy,
262
+ value: Schema4.Unknown
263
+ });
264
+ var AgentHookRequirement = Schema4.Struct({
265
+ name: Schema4.String.check(Schema4.isMinLength(1)),
266
+ event: Schema4.String.check(Schema4.isMinLength(1)),
267
+ policy: AgentEnvironmentPolicy,
268
+ command: Schema4.String.check(Schema4.isMinLength(1)),
269
+ args: Schema4.optionalKey(Schema4.Array(Schema4.String)),
270
+ timeoutMs: Schema4.optionalKey(Schema4.Finite.check(Schema4.isGreaterThanOrEqualTo(1)))
271
+ });
272
+ var AgentSandboxPolicyRequirement = Schema4.Struct({
273
+ key: Schema4.String.check(Schema4.isMinLength(1)),
274
+ policy: AgentEnvironmentPolicy,
275
+ value: Schema4.Unknown
276
+ });
277
+ var AgentEnvironmentFragment = Schema4.Struct({
278
+ skills: Schema4.optionalKey(Schema4.Array(AgentSkillRequirement)),
279
+ plugins: Schema4.optionalKey(Schema4.Array(AgentPluginRequirement)),
280
+ mcpServers: Schema4.optionalKey(Schema4.Array(AgentMcpServerRequirement)),
281
+ harnessSettings: Schema4.optionalKey(Schema4.Array(AgentHarnessSetting)),
282
+ providerAuthRefs: Schema4.optionalKey(Schema4.Array(ProviderAuthRef)),
283
+ runnerSecretRefs: Schema4.optionalKey(Schema4.Array(RunnerSecretRef)),
284
+ permissions: Schema4.optionalKey(Schema4.Array(AgentPermissionRequirement)),
285
+ hooks: Schema4.optionalKey(Schema4.Array(AgentHookRequirement)),
286
+ runtimeConstraints: Schema4.optionalKey(Schema4.Array(AgentRuntimeConstraint)),
287
+ sandboxPolicyRequirements: Schema4.optionalKey(Schema4.Array(AgentSandboxPolicyRequirement))
288
+ });
289
+ var HarnessKitActivation = Schema4.Struct({
290
+ harness: AgentHarnessId,
291
+ kitId: Id,
292
+ enabled: Schema4.Boolean,
293
+ policy: Schema4.optionalKey(AgentEnvironmentPolicy)
294
+ });
295
+ var AgentModelPreference = Schema4.Struct({
296
+ harness: AgentHarnessId,
297
+ profileRef: Schema4.String.check(Schema4.isMinLength(1)),
298
+ provider: Schema4.optionalKey(Schema4.String.check(Schema4.isMinLength(1))),
299
+ model: Schema4.optionalKey(Schema4.String.check(Schema4.isMinLength(1)))
300
+ });
301
+ var UserAgentPreferences = Schema4.Struct({
302
+ userId: Schema4.optionalKey(Id),
303
+ defaultHarness: Schema4.optionalKey(AgentHarnessId),
304
+ perHarnessKitActivations: Schema4.optionalKey(Schema4.Array(HarnessKitActivation)),
305
+ modelPreferences: Schema4.optionalKey(Schema4.Array(AgentModelPreference)),
306
+ providerAuthRefs: Schema4.optionalKey(Schema4.Array(ProviderAuthRef)),
307
+ ui: Schema4.optionalKey(Schema4.Record(Schema4.String, Schema4.Unknown)),
308
+ agentEnvironment: Schema4.optionalKey(AgentEnvironmentFragment)
309
+ });
310
+ var AgentSyncProfileSource = Schema4.Union([
311
+ Schema4.Struct({
312
+ kind: Schema4.Literal("personal_kit_defaults"),
313
+ harness: Schema4.optionalKey(AgentHarnessId),
314
+ enabled: Schema4.Boolean
315
+ }),
316
+ Schema4.Struct({ kind: Schema4.Literal("workspace_assignments"), workspaceId: Id, enabled: Schema4.Boolean }),
317
+ Schema4.Struct({
318
+ kind: Schema4.Literal("team_defaults"),
319
+ workspaceId: Id,
320
+ teamId: Schema4.optionalKey(Id),
321
+ enabled: Schema4.Boolean
322
+ }),
323
+ Schema4.Struct({ kind: Schema4.Literal("project_kits"), projectId: Id, enabled: Schema4.Boolean })
324
+ ]);
325
+ var AgentSyncProfile = Schema4.Struct({
326
+ id: Schema4.optionalKey(Id),
327
+ userId: Id,
328
+ name: Schema4.String.check(Schema4.isMinLength(1)),
329
+ default: Schema4.optionalKey(Schema4.Boolean),
330
+ harnesses: Schema4.optionalKey(Schema4.Array(AgentHarnessId)),
331
+ sources: Schema4.Array(AgentSyncProfileSource)
332
+ });
333
+ var AgentKitSourceFields = {
334
+ kitRef: Schema4.optionalKey(Schema4.String.check(Schema4.isMinLength(1), Schema4.isMaxLength(240))),
335
+ kitVersion: Schema4.optionalKey(Schema4.String.check(Schema4.isMinLength(1), Schema4.isMaxLength(120))),
336
+ kitSha256: Schema4.optionalKey(Schema4.String.check(Schema4.isMinLength(64), Schema4.isMaxLength(64), Schema4.isPattern(new RegExp("^[a-fA-F0-9]{64}$", "u")))),
337
+ kitActivationId: Schema4.optionalKey(Id),
338
+ kitActivationType: Schema4.optionalKey(Schema4.String.check(Schema4.isMinLength(1), Schema4.isMaxLength(80)))
339
+ };
340
+ var AgentEnvironmentSource = Schema4.Union([
341
+ Schema4.Struct({
342
+ kind: Schema4.Literal("built_in"),
343
+ label: Schema4.optionalKey(Schema4.String.check(Schema4.isMinLength(1)))
344
+ }),
345
+ Schema4.Struct({
346
+ kind: Schema4.Literal("user_preferences"),
347
+ userId: Id,
348
+ label: Schema4.optionalKey(Schema4.String.check(Schema4.isMinLength(1)))
349
+ }),
350
+ Schema4.Struct({
351
+ kind: Schema4.Literal("user_kit"),
352
+ userId: Id,
353
+ kitId: Id,
354
+ ...AgentKitSourceFields,
355
+ label: Schema4.optionalKey(Schema4.String.check(Schema4.isMinLength(1)))
356
+ }),
357
+ Schema4.Struct({
358
+ kind: Schema4.Literal("agent_sync_profile"),
359
+ profileId: Schema4.optionalKey(Id),
360
+ userId: Id,
361
+ label: Schema4.optionalKey(Schema4.String.check(Schema4.isMinLength(1)))
362
+ }),
363
+ Schema4.Struct({
364
+ kind: Schema4.Literal("device_local"),
365
+ label: Schema4.optionalKey(Schema4.String.check(Schema4.isMinLength(1)))
366
+ }),
367
+ Schema4.Struct({
368
+ kind: Schema4.Literal("workspace_kit"),
369
+ kitId: Id,
370
+ ...AgentKitSourceFields,
371
+ label: Schema4.optionalKey(Schema4.String.check(Schema4.isMinLength(1)))
372
+ }),
373
+ Schema4.Struct({
374
+ kind: Schema4.Literal("team_default_kit"),
375
+ teamId: Id,
376
+ kitId: Id,
377
+ ...AgentKitSourceFields,
378
+ label: Schema4.optionalKey(Schema4.String.check(Schema4.isMinLength(1)))
379
+ }),
380
+ Schema4.Struct({
381
+ kind: Schema4.Literal("project_kit"),
382
+ kitId: Id,
383
+ ...AgentKitSourceFields,
384
+ provenance: Schema4.optionalKey(Schema4.Union([
385
+ Schema4.Literal("explicit"),
386
+ Schema4.Literal("workspace_default"),
387
+ Schema4.Literal("workspace_mandatory")
388
+ ])),
389
+ policyRevision: Schema4.optionalKey(Schema4.Int.check(Schema4.isGreaterThanOrEqualTo(1))),
390
+ label: Schema4.optionalKey(Schema4.String.check(Schema4.isMinLength(1)))
391
+ }),
392
+ Schema4.Struct({
393
+ kind: Schema4.Literal("marketplace_kit"),
394
+ kitSourceId: Id,
395
+ kitVersionId: Schema4.optionalKey(Id),
396
+ kitInstallationId: Schema4.optionalKey(Id),
397
+ kitActivationId: Schema4.optionalKey(Id),
398
+ label: Schema4.optionalKey(Schema4.String.check(Schema4.isMinLength(1)))
399
+ }),
400
+ Schema4.Struct({
401
+ kind: Schema4.Literal("step_attempt_override"),
402
+ stepAttemptId: Id,
403
+ label: Schema4.optionalKey(Schema4.String.check(Schema4.isMinLength(1)))
404
+ }),
405
+ Schema4.Struct({
406
+ kind: Schema4.Literal("command_override"),
407
+ label: Schema4.optionalKey(Schema4.String.check(Schema4.isMinLength(1)))
408
+ })
409
+ ]);
410
+ var ResolvedAgentSkillRequirement = Schema4.Struct({
411
+ item: AgentSkillRequirement,
412
+ source: AgentEnvironmentSource
413
+ });
414
+ var ResolvedAgentPluginRequirement = Schema4.Struct({
415
+ item: AgentPluginRequirement,
416
+ source: AgentEnvironmentSource
417
+ });
418
+ var ResolvedAgentMcpServerRequirement = Schema4.Struct({
419
+ item: AgentMcpServerRequirement,
420
+ source: AgentEnvironmentSource
421
+ });
422
+ var ResolvedAgentHarnessSetting = Schema4.Struct({ item: AgentHarnessSetting, source: AgentEnvironmentSource });
423
+ var ResolvedProviderAuthRef = Schema4.Struct({ item: ProviderAuthRef, source: AgentEnvironmentSource });
424
+ var ResolvedRunnerSecretRef = Schema4.Struct({ item: RunnerSecretRef, source: AgentEnvironmentSource });
425
+ var ResolvedAgentPermissionRequirement = Schema4.Struct({
426
+ item: AgentPermissionRequirement,
427
+ source: AgentEnvironmentSource
428
+ });
429
+ var ResolvedAgentHookRequirement = Schema4.Struct({ item: AgentHookRequirement, source: AgentEnvironmentSource });
430
+ var ResolvedAgentRuntimeConstraint = Schema4.Struct({
431
+ item: AgentRuntimeConstraint,
432
+ source: AgentEnvironmentSource
433
+ });
434
+ var ResolvedAgentSandboxPolicyRequirement = Schema4.Struct({
435
+ item: AgentSandboxPolicyRequirement,
436
+ source: AgentEnvironmentSource
437
+ });
438
+ var AgentEnvironment = Schema4.Struct({
439
+ harness: AgentHarnessId,
440
+ skills: Schema4.Array(ResolvedAgentSkillRequirement),
441
+ plugins: Schema4.Array(ResolvedAgentPluginRequirement),
442
+ mcpServers: Schema4.Array(ResolvedAgentMcpServerRequirement),
443
+ harnessSettings: Schema4.Array(ResolvedAgentHarnessSetting),
444
+ providerAuthRefs: Schema4.Array(ResolvedProviderAuthRef),
445
+ runnerSecretRefs: Schema4.Array(ResolvedRunnerSecretRef),
446
+ permissions: Schema4.Array(ResolvedAgentPermissionRequirement),
447
+ hooks: Schema4.Array(ResolvedAgentHookRequirement),
448
+ runtimeConstraints: Schema4.Array(ResolvedAgentRuntimeConstraint),
449
+ sandboxPolicyRequirements: Schema4.Array(ResolvedAgentSandboxPolicyRequirement),
450
+ warnings: Schema4.Array(Schema4.String)
451
+ });
452
+ var KitMarketplaceAgentEnvironmentSyncStates = ["ready", "needs_sync", "blocked"];
453
+ var KitMarketplaceAgentEnvironmentEffectKinds = [
454
+ "skill",
455
+ "plugin",
456
+ "mcp_server",
457
+ "harness_setting",
458
+ "provider_auth_ref",
459
+ "runner_secret_ref",
460
+ "permission",
461
+ "hook",
462
+ "runtime_constraint",
463
+ "sandbox_policy_requirement"
464
+ ];
465
+ var KitMarketplaceAgentEnvironmentMaterializerRequirements = [
466
+ "config_writer",
467
+ "provider_auth",
468
+ "runner_secret",
469
+ "bun",
470
+ "sandbox_policy"
471
+ ];
472
+ var KitMarketplaceAgentEnvironmentEffect = Schema4.Struct({
473
+ kind: Schema4.Literals(KitMarketplaceAgentEnvironmentEffectKinds),
474
+ name: Schema4.String.check(Schema4.isMinLength(1)),
475
+ policy: AgentEnvironmentPolicy,
476
+ source: AgentEnvironmentSource,
477
+ materializerRequirements: Schema4.Array(Schema4.Literals(KitMarketplaceAgentEnvironmentMaterializerRequirements))
478
+ });
479
+ var KitMarketplaceAgentEnvironmentSyncPreview = Schema4.Struct({
480
+ state: Schema4.Literals(KitMarketplaceAgentEnvironmentSyncStates),
481
+ agentEnvironment: AgentEnvironment,
482
+ effects: Schema4.Array(KitMarketplaceAgentEnvironmentEffect),
483
+ blockers: Schema4.Array(Schema4.String),
484
+ drift: Schema4.Array(Schema4.String)
485
+ });
486
+ var AgentEnvironmentSyncPlanStatuses = ["ready", "needs_apply", "blocked"];
487
+ var AgentEnvironmentSyncPlanItemKinds = [
488
+ "skill",
489
+ "plugin",
490
+ "mcp_server",
491
+ "harness_setting",
492
+ "provider_auth_ref",
493
+ "runner_secret_ref",
494
+ "permission",
495
+ "hook",
496
+ "runtime_constraint",
497
+ "sandbox_policy_requirement"
498
+ ];
499
+ var AgentEnvironmentSyncPlanApplyModes = ["automatic", "manual", "verify_only"];
500
+ var AgentEnvironmentSyncPlanItem = Schema4.Struct({
501
+ kind: Schema4.Literals(AgentEnvironmentSyncPlanItemKinds),
502
+ name: Schema4.String.check(Schema4.isMinLength(1)),
503
+ policy: AgentEnvironmentPolicy,
504
+ source: AgentEnvironmentSource,
505
+ materializerRequirements: Schema4.Array(Schema4.Literals(KitMarketplaceAgentEnvironmentMaterializerRequirements)),
506
+ applyMode: Schema4.Literals(AgentEnvironmentSyncPlanApplyModes)
507
+ });
508
+ var AgentEnvironmentSyncPlan = Schema4.Struct({
509
+ status: Schema4.Literals(AgentEnvironmentSyncPlanStatuses),
510
+ targetHarness: AgentHarnessId,
511
+ agentEnvironment: AgentEnvironment,
512
+ items: Schema4.Array(AgentEnvironmentSyncPlanItem),
513
+ blockers: Schema4.Array(Schema4.String),
514
+ drift: Schema4.Array(Schema4.String)
515
+ });
516
+
517
+ // packages/core/src/kit.ts
518
+ import * as Schema5 from "effect/Schema";
519
+ import * as Struct5 from "effect/Struct";
520
+ var KitKinds = ["technology", "brand", "domain", "process", "other"];
521
+ var ProjectKitProvenanceKinds = ["explicit", "workspace_default", "workspace_mandatory"];
522
+ var KitKind = Schema5.Union([
523
+ Schema5.Literal("technology"),
524
+ Schema5.Literal("brand"),
525
+ Schema5.Literal("domain"),
526
+ Schema5.Literal("process"),
527
+ Schema5.Literal("other")
528
+ ]);
529
+ var Kit = Schema5.Struct({
530
+ id: Id,
531
+ workspaceId: Id,
532
+ name: Schema5.String,
533
+ slug: Slug,
534
+ kind: KitKind,
535
+ description: Schema5.optionalKey(Schema5.String),
536
+ contentMarkdown: Schema5.String,
537
+ metadata: Schema5.Record(Schema5.String, Schema5.Unknown),
538
+ projectAttachment: Schema5.optionalKey(Schema5.Struct({
539
+ provenance: Schema5.Literals(ProjectKitProvenanceKinds),
540
+ workspaceKitAssignmentId: Schema5.optionalKey(Id),
541
+ policyRevision: Schema5.optionalKey(Schema5.Int.check(Schema5.isGreaterThanOrEqualTo(1))),
542
+ package: Schema5.optionalKey(Schema5.String)
543
+ })),
544
+ package: Schema5.optionalKey(Schema5.String),
545
+ agentEnvironment: Schema5.optionalKey(AgentEnvironmentFragment),
546
+ agentInstructions: Schema5.optionalKey(Schema5.String),
547
+ doNotDo: Schema5.optionalKey(Schema5.String),
548
+ createdAt: Timestamp,
549
+ updatedAt: Timestamp
550
+ });
551
+ var KitPublisherIdentity = Schema5.Struct({
552
+ name: Schema5.String.check(Schema5.isMinLength(1)),
553
+ type: Schema5.optionalKey(Schema5.Union([
554
+ Schema5.Literal("kitman"),
555
+ Schema5.Literal("workspace"),
556
+ Schema5.Literal("organization"),
557
+ Schema5.Literal("individual")
558
+ ])),
559
+ url: Schema5.optionalKey(Schema5.String),
560
+ verified: Schema5.optionalKey(Schema5.Boolean)
561
+ });
562
+ var KitSourceType = Schema5.Union([
563
+ Schema5.Literal("hosted"),
564
+ Schema5.Literal("git"),
565
+ Schema5.Literal("package"),
566
+ Schema5.Literal("url"),
567
+ Schema5.Literal("skills_sh")
568
+ ]);
569
+ var KitTrustStatus = Schema5.Union([
570
+ Schema5.Literal("unreviewed"),
571
+ Schema5.Literal("trusted"),
572
+ Schema5.Literal("reviewed"),
573
+ Schema5.Literal("rejected"),
574
+ Schema5.Literal("deprecated")
575
+ ]);
576
+ var KitReviewStatus = Schema5.Union([
577
+ Schema5.Literal("pending"),
578
+ Schema5.Literal("approved"),
579
+ Schema5.Literal("rejected"),
580
+ Schema5.Literal("deprecated")
581
+ ]);
582
+ var KitSourceVisibility = Schema5.Union([
583
+ Schema5.Literal("public"),
584
+ Schema5.Literal("organization"),
585
+ Schema5.Literal("workspace")
586
+ ]);
587
+ var SpdxLicenseExpression = Schema5.String.check(Schema5.isMinLength(1), Schema5.isMaxLength(240), Schema5.isPattern(new RegExp("^[A-Za-z0-9][A-Za-z0-9.+:()\\-\\s]*$", "u")));
588
+ var KitLifecycleStatus = Schema5.Union([
589
+ Schema5.Literal("active"),
590
+ Schema5.Literal("deprecated"),
591
+ Schema5.Literal("rejected")
592
+ ]);
593
+ var KitMarketplaceInstallState = Schema5.Union([
594
+ Schema5.Literal("not_installed"),
595
+ Schema5.Literal("installed"),
596
+ Schema5.Literal("active"),
597
+ Schema5.Literal("update_available")
598
+ ]);
599
+ var KitMarketplaceRuntimeState = Schema5.Union([
600
+ Schema5.Literal("ready"),
601
+ Schema5.Literal("needs_sync"),
602
+ Schema5.Literal("proposal_required"),
603
+ Schema5.Literal("deprecated"),
604
+ Schema5.Literal("blocked")
605
+ ]);
606
+ var KitMarketplaceLifecycleOperation = Schema5.Union([
607
+ Schema5.Literal("install"),
608
+ Schema5.Literal("activate"),
609
+ Schema5.Literal("update"),
610
+ Schema5.Literal("rollback"),
611
+ Schema5.Literal("disable"),
612
+ Schema5.Literal("uninstall")
613
+ ]);
614
+ var KitCompatibility = Schema5.Struct({
615
+ harnesses: Schema5.optionalKey(Schema5.Array(Schema5.String)),
616
+ capabilities: Schema5.optionalKey(Schema5.Array(Schema5.String)),
617
+ minimumKitmanVersion: Schema5.optionalKey(Schema5.String),
618
+ runtimeRequirements: Schema5.optionalKey(Schema5.Array(Schema5.String))
619
+ });
620
+ var Sha2562 = Schema5.String.check(Schema5.isPattern(new RegExp("^[a-fA-F0-9]{64}$", "u")));
621
+ var SourcePath2 = Schema5.String.check(Schema5.isMinLength(1), Schema5.isPattern(new RegExp("^(?!/)(?!.*\\\\)(?!.*//)(?!.*(?:^|/)\\.\\.?($|/))(?!.*\\s).+$", "u")));
622
+ var HostedKitSourceProvenance = Schema5.Struct({
623
+ sourceType: Schema5.Literal("hosted"),
624
+ path: Schema5.optionalKey(SourcePath2),
625
+ sha256: Schema5.optionalKey(Sha2562)
626
+ });
627
+ var GitKitSourceProvenance = Schema5.Struct({
628
+ sourceType: Schema5.Literal("git"),
629
+ repositoryUrl: Schema5.String.check(Schema5.isMinLength(1)),
630
+ ref: Schema5.String.check(Schema5.isMinLength(1)),
631
+ path: Schema5.optionalKey(SourcePath2),
632
+ sha256: Schema5.optionalKey(Sha2562)
633
+ });
634
+ var PackageKitSourceProvenance = Schema5.Struct({
635
+ sourceType: Schema5.Literal("package"),
636
+ packageName: Schema5.String.check(Schema5.isMinLength(1)),
637
+ version: Schema5.String.check(Schema5.isMinLength(1)),
638
+ path: Schema5.optionalKey(SourcePath2),
639
+ sha256: Schema5.optionalKey(Sha2562)
640
+ });
641
+ var UrlKitSourceProvenance = Schema5.Struct({
642
+ sourceType: Schema5.Literal("url"),
643
+ url: Schema5.String.check(Schema5.isMinLength(1)),
644
+ sha256: Sha2562
645
+ });
646
+ var SkillsShKitSourceProvenance = Schema5.Struct({
647
+ sourceType: Schema5.Literal("skills_sh"),
648
+ skillsSlug: Schema5.String.check(Schema5.isMinLength(1)),
649
+ version: Schema5.optionalKey(Schema5.String.check(Schema5.isMinLength(1))),
650
+ sha256: Schema5.optionalKey(Sha2562)
651
+ });
652
+ var KitSourceProvenance = Schema5.Union([
653
+ HostedKitSourceProvenance,
654
+ GitKitSourceProvenance,
655
+ PackageKitSourceProvenance,
656
+ UrlKitSourceProvenance,
657
+ SkillsShKitSourceProvenance
658
+ ]);
659
+ var KitSourceBase = Schema5.Struct({
660
+ id: Id,
661
+ workspaceId: Schema5.optionalKey(Id),
662
+ name: Schema5.String,
663
+ slug: Slug,
664
+ summary: Schema5.String,
665
+ publisher: KitPublisherIdentity,
666
+ visibility: KitSourceVisibility,
667
+ licenseExpression: Schema5.optionalKey(SpdxLicenseExpression),
668
+ tags: Schema5.Array(Schema5.String),
669
+ compatibleHarnesses: Schema5.Array(Schema5.String),
670
+ capabilitySummaries: Schema5.Array(Schema5.String),
671
+ trustStatus: KitTrustStatus,
672
+ reviewStatus: KitReviewStatus,
673
+ lifecycleStatus: KitLifecycleStatus,
674
+ installable: Schema5.Boolean,
675
+ createdAt: Timestamp,
676
+ updatedAt: Timestamp
677
+ });
678
+ var KitSource = Schema5.Union([
679
+ Schema5.Struct({
680
+ ...KitSourceBase.fields,
681
+ ...Schema5.Struct({ sourceType: Schema5.Literal("hosted"), provenance: HostedKitSourceProvenance }).fields
682
+ }),
683
+ Schema5.Struct({
684
+ ...KitSourceBase.fields,
685
+ ...Schema5.Struct({ sourceType: Schema5.Literal("git"), provenance: GitKitSourceProvenance }).fields
686
+ }),
687
+ Schema5.Struct({
688
+ ...KitSourceBase.fields,
689
+ ...Schema5.Struct({ sourceType: Schema5.Literal("package"), provenance: PackageKitSourceProvenance }).fields
690
+ }),
691
+ Schema5.Struct({
692
+ ...KitSourceBase.fields,
693
+ ...Schema5.Struct({ sourceType: Schema5.Literal("url"), provenance: UrlKitSourceProvenance }).fields
694
+ }),
695
+ Schema5.Struct({
696
+ ...KitSourceBase.fields,
697
+ ...Schema5.Struct({ sourceType: Schema5.Literal("skills_sh"), provenance: SkillsShKitSourceProvenance }).fields
698
+ })
699
+ ]);
700
+ var KitVersion = Schema5.Struct({
701
+ id: Id,
702
+ kitSourceId: Id,
703
+ version: Schema5.String,
704
+ provenance: KitSourceProvenance,
705
+ contentKitId: Schema5.optionalKey(Id),
706
+ compatibility: KitCompatibility,
707
+ trustStatus: KitTrustStatus,
708
+ reviewStatus: KitReviewStatus,
709
+ lifecycleStatus: KitLifecycleStatus,
710
+ reviewMetadata: Schema5.Record(Schema5.String, Schema5.Unknown),
711
+ publishedAt: Schema5.optionalKey(Timestamp),
712
+ createdAt: Timestamp,
713
+ updatedAt: Timestamp
714
+ });
715
+ var KitInstallationScope = Schema5.Union([
716
+ Schema5.Literal("user"),
717
+ Schema5.Literal("workspace"),
718
+ Schema5.Literal("team"),
719
+ Schema5.Literal("project")
720
+ ]);
721
+ var KitInstallationBase = Schema5.Struct({
722
+ id: Id,
723
+ kitSourceId: Id,
724
+ scopeType: KitInstallationScope,
725
+ scopeId: Id,
726
+ trustStatus: KitTrustStatus,
727
+ reviewStatus: KitReviewStatus,
728
+ lifecycleStatus: KitLifecycleStatus,
729
+ installedByActorType: Schema5.optionalKey(Schema5.String),
730
+ installedByActorId: Schema5.optionalKey(Id),
731
+ enabled: Schema5.Boolean,
732
+ package: Schema5.optionalKey(Schema5.String),
733
+ createdAt: Timestamp,
734
+ updatedAt: Timestamp
735
+ });
736
+ var KitInstallation = Schema5.Union([
737
+ Schema5.Struct({
738
+ ...KitInstallationBase.fields,
739
+ ...Schema5.Struct({ pinned: Schema5.Literal(true), kitVersionId: Id }).fields
740
+ }),
741
+ Schema5.Struct({
742
+ ...KitInstallationBase.fields,
743
+ ...Schema5.Struct({ pinned: Schema5.Literal(false), kitVersionId: Schema5.optionalKey(Id) }).fields
744
+ })
745
+ ]);
746
+ var KitRegistrySearchItem = Schema5.Struct({
747
+ id: Id,
748
+ name: Schema5.String,
749
+ slug: Slug,
750
+ summary: Schema5.String,
751
+ publisher: KitPublisherIdentity,
752
+ visibility: KitSourceVisibility,
753
+ licenseExpression: Schema5.optionalKey(SpdxLicenseExpression),
754
+ sourceType: KitSourceType,
755
+ versions: Schema5.Array(Schema5.String),
756
+ tags: Schema5.Array(Schema5.String),
757
+ compatibleHarnesses: Schema5.Array(Schema5.String),
758
+ capabilitySummaries: Schema5.Array(Schema5.String),
759
+ trustStatus: KitTrustStatus,
760
+ reviewStatus: KitReviewStatus,
761
+ lifecycleStatus: KitLifecycleStatus,
762
+ installable: Schema5.Boolean
763
+ });
764
+ var KitActivation = Schema5.Struct({
765
+ id: Id,
766
+ kitInstallationId: Id,
767
+ kitSourceId: Id,
768
+ kitVersionId: Schema5.optionalKey(Id),
769
+ scopeType: KitInstallationScope,
770
+ scopeId: Id,
771
+ activationType: Schema5.Union([
772
+ Schema5.Literal("workspace_default"),
773
+ Schema5.Literal("team_default"),
774
+ Schema5.Literal("project_attachment"),
775
+ Schema5.Literal("personal_default"),
776
+ Schema5.Literal("harness")
777
+ ]),
778
+ active: Schema5.Boolean,
779
+ activeThrough: Schema5.optionalKey(Schema5.String),
780
+ metadata: Schema5.Record(Schema5.String, Schema5.Unknown),
781
+ createdAt: Timestamp,
782
+ updatedAt: Timestamp
783
+ });
784
+ var KitRegistrySearch = Schema5.Struct({
785
+ items: Schema5.Array(KitRegistrySearchItem)
786
+ });
787
+ var KitMarketplaceCatalogItem = Schema5.Struct({
788
+ id: Id,
789
+ name: Schema5.String,
790
+ slug: Slug,
791
+ summary: Schema5.String,
792
+ publisher: KitPublisherIdentity,
793
+ visibility: KitSourceVisibility,
794
+ licenseExpression: Schema5.optionalKey(SpdxLicenseExpression),
795
+ sourceType: KitSourceType,
796
+ trustStatus: KitTrustStatus,
797
+ reviewStatus: KitReviewStatus,
798
+ lifecycleStatus: KitLifecycleStatus,
799
+ installable: Schema5.Boolean,
800
+ latestVersion: Schema5.optionalKey(Schema5.String),
801
+ installedVersion: Schema5.optionalKey(Schema5.String),
802
+ installState: KitMarketplaceInstallState,
803
+ runtimeState: KitMarketplaceRuntimeState,
804
+ activeThrough: Schema5.optionalKey(Schema5.String),
805
+ compatibleHarnesses: Schema5.Array(Schema5.String),
806
+ capabilitySummaries: Schema5.Array(Schema5.String),
807
+ tags: Schema5.Array(Schema5.String),
808
+ installedByPackage: Schema5.optionalKey(Schema5.String)
809
+ });
810
+ var KitMarketplacePageInfo = Schema5.Struct({
811
+ hasNextPage: Schema5.Boolean,
812
+ endCursor: Schema5.optionalKey(Schema5.String.check(Schema5.isMinLength(1)))
813
+ });
814
+ var KitMarketplaceCatalog = Schema5.Struct({
815
+ items: Schema5.Array(KitMarketplaceCatalogItem).check(Schema5.isMaxLength(100)),
816
+ total: Schema5.Int.check(Schema5.isGreaterThanOrEqualTo(0)),
817
+ pageInfo: KitMarketplacePageInfo
818
+ });
819
+ var KitMarketplaceDetail = Schema5.Struct({
820
+ ...KitMarketplaceCatalogItem.fields,
821
+ ...Schema5.Struct({
822
+ provenance: KitSourceProvenance,
823
+ versions: Schema5.Array(KitVersion),
824
+ installations: Schema5.Array(KitInstallation),
825
+ activations: Schema5.Array(KitActivation)
826
+ }).fields
827
+ });
828
+ var KitMarketplaceCatalogValidator = guard(KitMarketplaceCatalog);
829
+ var KitMarketplaceDetailValidator = guard(KitMarketplaceDetail);
830
+ var KitMarketplacePreviewInput = Schema5.Struct({
831
+ operation: KitMarketplaceLifecycleOperation,
832
+ source: Schema5.String.check(Schema5.isMinLength(1)),
833
+ version: Schema5.optionalKey(Schema5.String.check(Schema5.isMinLength(1))),
834
+ scopeType: Schema5.optionalKey(KitInstallationScope),
835
+ scopeId: Schema5.optionalKey(Id),
836
+ activationType: Schema5.optionalKey(Schema5.Union([
837
+ Schema5.Literal("workspace_default"),
838
+ Schema5.Literal("team_default"),
839
+ Schema5.Literal("project_attachment"),
840
+ Schema5.Literal("personal_default"),
841
+ Schema5.Literal("harness")
842
+ ]))
843
+ });
844
+ var KitMarketplaceSyncReadiness = Schema5.Struct({
845
+ state: Schema5.Union([Schema5.Literal("ready"), Schema5.Literal("needs_sync"), Schema5.Literal("blocked")]),
846
+ blockers: Schema5.Array(Schema5.String)
847
+ });
848
+ var KitMarketplacePreview = Schema5.Struct({
849
+ previewToken: Schema5.String.check(Schema5.isMinLength(1)),
850
+ operation: KitMarketplaceLifecycleOperation,
851
+ sourceId: Id,
852
+ sourceSlug: Slug,
853
+ scopeType: KitInstallationScope,
854
+ scopeId: Id,
855
+ fromVersion: Schema5.optionalKey(Schema5.String),
856
+ toVersion: Schema5.optionalKey(Schema5.String),
857
+ installState: KitMarketplaceInstallState,
858
+ runtimeState: KitMarketplaceRuntimeState,
859
+ contextImpact: Schema5.Array(Schema5.String),
860
+ agentEnvironmentEffects: Schema5.Array(Schema5.String),
861
+ activeThrough: Schema5.optionalKey(Schema5.String),
862
+ conflicts: Schema5.Array(Schema5.String),
863
+ warnings: Schema5.Array(Schema5.String),
864
+ syncReadiness: KitMarketplaceSyncReadiness,
865
+ requiresProposal: Schema5.Boolean
866
+ });
867
+ var KitMarketplaceApplyPreviewInput = Schema5.Struct({
868
+ ...KitMarketplacePreviewInput.fields,
869
+ ...Schema5.Struct({ previewToken: Schema5.String.check(Schema5.isMinLength(1)) }).fields
870
+ });
871
+ var KitMarketplaceLifecycleResult = Schema5.Struct({
872
+ status: Schema5.Union([
873
+ Schema5.Literal("installed"),
874
+ Schema5.Literal("activated"),
875
+ Schema5.Literal("updated"),
876
+ Schema5.Literal("rolled_back"),
877
+ Schema5.Literal("disabled"),
878
+ Schema5.Literal("uninstalled")
879
+ ]),
880
+ previewToken: Schema5.String.check(Schema5.isMinLength(1)),
881
+ installation: Schema5.optionalKey(KitInstallation),
882
+ activation: Schema5.optionalKey(KitActivation),
883
+ syncReadiness: KitMarketplaceSyncReadiness
884
+ });
885
+ var KitCreate = Schema5.Struct({
886
+ name: Schema5.String.check(Schema5.isMinLength(1), Schema5.isMaxLength(160)),
887
+ slug: Schema5.optionalKey(Slug),
888
+ kind: Schema5.optionalKey(KitKind),
889
+ description: Schema5.optionalKey(Schema5.String),
890
+ contentMarkdown: Schema5.String.check(Schema5.isMinLength(1)),
891
+ metadata: Schema5.optionalKey(Schema5.Record(Schema5.String, Schema5.Unknown)),
892
+ agentEnvironment: Schema5.optionalKey(AgentEnvironmentFragment),
893
+ agentInstructions: Schema5.optionalKey(Schema5.String),
894
+ doNotDo: Schema5.optionalKey(Schema5.String)
895
+ });
896
+ var KitUpdate = Schema5.Struct(Struct5.map(KitCreate.fields, Schema5.optionalKey));
897
+ var KitDeleteResult = Schema5.Struct({ deleted: Schema5.Boolean });
898
+ var KitList = Schema5.Struct({
899
+ items: Schema5.Array(Kit),
900
+ policyOptOuts: Schema5.optionalKey(Schema5.Array(Schema5.Struct({
901
+ workspaceKitAssignmentId: Id,
902
+ kitId: Id,
903
+ policyRevision: Schema5.Int.check(Schema5.isGreaterThanOrEqualTo(1))
904
+ })))
905
+ });
906
+ var ProjectKitAttachResult = Schema5.Struct({
907
+ status: Schema5.Union([Schema5.Literal("attached"), Schema5.Literal("already_attached")]),
908
+ projectId: Id,
909
+ kitId: Id
910
+ });
911
+ var ProjectKitDetachResult = Schema5.Struct({
912
+ status: Schema5.Union([Schema5.Literal("detached"), Schema5.Literal("not_attached")]),
913
+ projectId: Id,
914
+ kitId: Id
915
+ });
916
+ var WorkspacePolicyKitMode = Schema5.Union([Schema5.Literal("default"), Schema5.Literal("mandatory")]);
917
+ var ProjectKitProvenanceKind = Schema5.Union([
918
+ Schema5.Literal("explicit"),
919
+ Schema5.Literal("workspace_default"),
920
+ Schema5.Literal("workspace_mandatory")
921
+ ]);
922
+ var WorkspacePolicyKitAssignment = Schema5.Struct({
923
+ id: Id,
924
+ workspaceId: Id,
925
+ kitId: Id,
926
+ mode: WorkspacePolicyKitMode,
927
+ revision: Schema5.Int.check(Schema5.isGreaterThanOrEqualTo(1)),
928
+ createdByActorType: Schema5.optionalKey(ActorType),
929
+ createdByActorId: Schema5.optionalKey(Id),
930
+ package: Schema5.optionalKey(Schema5.String),
931
+ createdAt: Timestamp,
932
+ updatedAt: Timestamp
933
+ });
934
+ var WorkspacePolicyKitAssignmentList = Schema5.Struct({
935
+ items: Schema5.Array(WorkspacePolicyKitAssignment)
936
+ });
937
+ var WorkspacePolicyKitCandidate = Schema5.Struct({
938
+ kitId: Id,
939
+ name: Schema5.String,
940
+ kind: KitKind,
941
+ trustStatus: KitTrustStatus,
942
+ installationState: Schema5.Literal("active")
943
+ });
944
+ var WorkspacePolicyKitCandidateList = Schema5.Struct({ items: Schema5.Array(WorkspacePolicyKitCandidate) });
945
+ var WorkspacePolicyKitAssignmentCreate = Schema5.Struct({
946
+ kitId: Id,
947
+ mode: WorkspacePolicyKitMode
948
+ });
949
+ var WorkspacePolicyKitAssignmentUpdate = Schema5.Struct({
950
+ mode: WorkspacePolicyKitMode,
951
+ expectedRevision: Schema5.Int.check(Schema5.isGreaterThanOrEqualTo(1))
952
+ });
953
+ var WorkspacePolicyKitAssignmentDelete = Schema5.Struct({
954
+ expectedRevision: Schema5.Int.check(Schema5.isGreaterThanOrEqualTo(1))
955
+ });
956
+ var WorkspacePolicyKitAssignmentDeleteResult = Schema5.Struct({
957
+ deleted: Schema5.Boolean,
958
+ assignmentId: Id
959
+ });
960
+ var ProjectKitPolicyOverride = Schema5.Struct({
961
+ id: Id,
962
+ workspaceId: Id,
963
+ projectId: Id,
964
+ workspaceKitAssignmentId: Id,
965
+ kind: Schema5.Literal("opt_out"),
966
+ reason: Schema5.optionalKey(Schema5.String),
967
+ createdByActorType: ActorType,
968
+ createdByActorId: Id,
969
+ createdAt: Timestamp
970
+ });
971
+ var ProjectKitPolicyOverrideCreate = Schema5.Struct({
972
+ expectedRevision: Schema5.Int.check(Schema5.isGreaterThanOrEqualTo(1)),
973
+ reason: Schema5.optionalKey(Schema5.String.check(Schema5.isMinLength(1), Schema5.isMaxLength(1000)))
974
+ });
975
+ var ProjectKitPolicyOverrideDelete = Schema5.Struct({
976
+ expectedRevision: Schema5.Int.check(Schema5.isGreaterThanOrEqualTo(1))
977
+ });
978
+ var ProjectKitPolicyOverrideDeleteResult = Schema5.Struct({
979
+ deleted: Schema5.Boolean,
980
+ projectId: Id,
981
+ workspaceKitAssignmentId: Id
982
+ });
983
+ var ProjectPolicyKitConvergenceResult = Schema5.Struct({
984
+ projectId: Id,
985
+ state: Schema5.Union([Schema5.Literal("current"), Schema5.Literal("degraded")]),
986
+ highestPolicyRevision: Schema5.Int.check(Schema5.isGreaterThanOrEqualTo(0)),
987
+ scanned: Schema5.Int.check(Schema5.isGreaterThanOrEqualTo(0), Schema5.isLessThanOrEqualTo(100)),
988
+ applied: Schema5.Int.check(Schema5.isGreaterThanOrEqualTo(0), Schema5.isLessThanOrEqualTo(100)),
989
+ replayed: Schema5.Int.check(Schema5.isGreaterThanOrEqualTo(0), Schema5.isLessThanOrEqualTo(100)),
990
+ explicitAttachmentsPreserved: Schema5.Int.check(Schema5.isGreaterThanOrEqualTo(0), Schema5.isLessThanOrEqualTo(100)),
991
+ hasMore: Schema5.Boolean,
992
+ retry: Schema5.Boolean,
993
+ repairAvailable: Schema5.Boolean,
994
+ nextCursor: Schema5.optionalKey(Id)
995
+ });
996
+ var ProjectPolicyKitConvergenceInput = Schema5.Struct({ cursor: Schema5.optionalKey(Id) });
997
+ var WorkspacePolicyKitBackfillPreviewKinds = [
998
+ "affected",
999
+ "unchanged",
1000
+ "opted_out",
1001
+ "inaccessible",
1002
+ "conflict"
1003
+ ];
1004
+ var WorkspacePolicyKitBackfillApplyStatuses = [
1005
+ "pending",
1006
+ "applied",
1007
+ "skipped",
1008
+ "conflict",
1009
+ "retryable_failure",
1010
+ "cancelled"
1011
+ ];
1012
+ var WorkspacePolicyKitBackfillStates = ["previewed", "running", "partial", "completed", "cancelled"];
1013
+ var WorkspacePolicyKitBackfillPreviewKind = Schema5.Literals(WorkspacePolicyKitBackfillPreviewKinds);
1014
+ var WorkspacePolicyKitBackfillApplyStatus = Schema5.Literals(WorkspacePolicyKitBackfillApplyStatuses);
1015
+ var WorkspacePolicyKitBackfillState = Schema5.Literals(WorkspacePolicyKitBackfillStates);
1016
+ var WorkspacePolicyKitBackfillCounts = Schema5.Struct({
1017
+ affected: Schema5.Int.check(Schema5.isGreaterThanOrEqualTo(0)),
1018
+ unchanged: Schema5.Int.check(Schema5.isGreaterThanOrEqualTo(0)),
1019
+ optedOut: Schema5.Int.check(Schema5.isGreaterThanOrEqualTo(0)),
1020
+ inaccessible: Schema5.Int.check(Schema5.isGreaterThanOrEqualTo(0)),
1021
+ conflict: Schema5.Int.check(Schema5.isGreaterThanOrEqualTo(0)),
1022
+ pending: Schema5.Int.check(Schema5.isGreaterThanOrEqualTo(0)),
1023
+ applied: Schema5.Int.check(Schema5.isGreaterThanOrEqualTo(0)),
1024
+ skipped: Schema5.Int.check(Schema5.isGreaterThanOrEqualTo(0)),
1025
+ retryableFailure: Schema5.Int.check(Schema5.isGreaterThanOrEqualTo(0)),
1026
+ cancelled: Schema5.Int.check(Schema5.isGreaterThanOrEqualTo(0))
1027
+ });
1028
+ var WorkspacePolicyKitBackfillItem = Schema5.Struct({
1029
+ projectId: Id,
1030
+ projectName: Schema5.String,
1031
+ previewKind: WorkspacePolicyKitBackfillPreviewKind,
1032
+ applyStatus: WorkspacePolicyKitBackfillApplyStatus,
1033
+ attempts: Schema5.Int.check(Schema5.isGreaterThanOrEqualTo(0)),
1034
+ errorCode: Schema5.optionalKey(Schema5.String),
1035
+ errorMessage: Schema5.optionalKey(Schema5.String)
1036
+ });
1037
+ var WorkspacePolicyKitBackfillPage = Schema5.Struct({
1038
+ backfillId: Id,
1039
+ workspaceId: Id,
1040
+ policyRevision: Schema5.Int.check(Schema5.isGreaterThanOrEqualTo(0)),
1041
+ previewToken: Schema5.String.check(Schema5.isMinLength(1)),
1042
+ state: WorkspacePolicyKitBackfillState,
1043
+ counts: WorkspacePolicyKitBackfillCounts,
1044
+ items: Schema5.Array(WorkspacePolicyKitBackfillItem).check(Schema5.isMaxLength(100)),
1045
+ hasMore: Schema5.Boolean,
1046
+ nextCursor: Schema5.optionalKey(Id),
1047
+ createdAt: Timestamp,
1048
+ updatedAt: Timestamp
1049
+ });
1050
+ var WorkspacePolicyKitBackfillPreviewInput = Schema5.Struct({
1051
+ limit: Schema5.optionalKey(Schema5.Int.check(Schema5.isGreaterThanOrEqualTo(1), Schema5.isLessThanOrEqualTo(100))),
1052
+ cursor: Schema5.optionalKey(Id)
1053
+ });
1054
+ var WorkspacePolicyKitBackfillApplyInput = Schema5.Struct({
1055
+ previewToken: Schema5.String.check(Schema5.isMinLength(1)),
1056
+ limit: Schema5.optionalKey(Schema5.Int.check(Schema5.isGreaterThanOrEqualTo(1), Schema5.isLessThanOrEqualTo(100))),
1057
+ cursor: Schema5.optionalKey(Id)
1058
+ });
1059
+ var WorkspacePolicyKitBackfillStatusQuery = Schema5.Struct({
1060
+ limit: Schema5.optionalKey(Numeric.check(isWholeNumber, Schema5.isGreaterThanOrEqualTo(1), Schema5.isLessThanOrEqualTo(100))),
1061
+ cursor: Schema5.optionalKey(Id)
1062
+ });
1063
+ var WorkspacePolicyKitBackfillCancelResult = Schema5.Struct({
1064
+ backfillId: Id,
1065
+ state: Schema5.Literal("cancelled")
1066
+ });
1067
+
1068
+ // packages/core/src/loop-layers.ts
1069
+ var LoopLayers = ["project", "workspace", "shipped"];
1070
+ var AgentEfforts = ["low", "medium", "high", "xhigh"];
1071
+
1072
+ // packages/core/src/schedule.ts
1073
+ import * as Schema13 from "effect/Schema";
1074
+ import * as DateTime from "effect/DateTime";
1075
+ import * as Option from "effect/Option";
1076
+
1077
+ // packages/core/src/loop.ts
1078
+ import * as Effect from "effect/Effect";
1079
+ import * as Schema12 from "effect/Schema";
1080
+
1081
+ // packages/core/src/agent-sandbox-policy.ts
1082
+ import * as Schema6 from "effect/Schema";
1083
+ var Path = Schema6.String.check(Schema6.isMinLength(1));
1084
+ var AgentSandboxNetwork = Schema6.Union([
1085
+ Schema6.Struct({ hosts: Schema6.Array(Schema6.String.check(Schema6.isMinLength(1))) }),
1086
+ Schema6.Literal("open")
1087
+ ]);
1088
+ var AgentSandboxPolicy = Schema6.Struct({
1089
+ writablePaths: Schema6.Array(Path),
1090
+ readDeniedPaths: Schema6.Array(Path),
1091
+ network: AgentSandboxNetwork,
1092
+ environment: Schema6.Record(Schema6.String.check(Schema6.isMinLength(1)), Schema6.String),
1093
+ dockerImageDigest: Schema6.optionalKey(Schema6.String.check(Schema6.isPattern(new RegExp("^sha256:[a-f0-9]{64}$", "u"))))
1094
+ });
1095
+
1096
+ // packages/core/src/context-pack.ts
1097
+ import * as Schema7 from "effect/Schema";
1098
+ var ContextPackIndexEntryKinds = [
1099
+ "task",
1100
+ "project",
1101
+ "kit",
1102
+ "memory",
1103
+ "decision",
1104
+ "session",
1105
+ "session_update",
1106
+ "proposal",
1107
+ "task_dependency",
1108
+ "repo_binding",
1109
+ "agent_environment",
1110
+ "loop_step"
1111
+ ];
1112
+ var ContextPackRetrievalRefKinds = [
1113
+ "kit",
1114
+ "memory",
1115
+ "decision",
1116
+ "session",
1117
+ "session_update",
1118
+ "proposal",
1119
+ "task_dependency",
1120
+ "repo_binding",
1121
+ "agent_environment",
1122
+ "loop_step"
1123
+ ];
1124
+ var ContextPackMode = Schema7.Union([
1125
+ Schema7.Literal("planning"),
1126
+ Schema7.Literal("implementation"),
1127
+ Schema7.Literal("debugging"),
1128
+ Schema7.Literal("review"),
1129
+ Schema7.Literal("handoff")
1130
+ ]);
1131
+ var ContextPackIndexEntryKind = Schema7.Literals(ContextPackIndexEntryKinds);
1132
+ var ContextPackRetrievalRefKind = Schema7.Literals(ContextPackRetrievalRefKinds);
1133
+ var ContextPackLaunchBrief = Schema7.Struct({
1134
+ mode: ContextPackMode,
1135
+ taskTitle: Schema7.String.check(Schema7.isMinLength(1)),
1136
+ projectName: Schema7.optionalKey(Schema7.String.check(Schema7.isMinLength(1))),
1137
+ summary: Schema7.String.check(Schema7.isMinLength(1))
1138
+ });
1139
+ var ContextPackIndexEntry = Schema7.Struct({
1140
+ kind: ContextPackIndexEntryKind,
1141
+ id: Id,
1142
+ title: Schema7.String.check(Schema7.isMinLength(1)),
1143
+ reason: Schema7.String.check(Schema7.isMinLength(1))
1144
+ });
1145
+ var ContextPackRetrievalRef = Schema7.Struct({
1146
+ kind: ContextPackRetrievalRefKind,
1147
+ id: Id,
1148
+ label: Schema7.String.check(Schema7.isMinLength(1))
1149
+ });
1150
+ var ContextPackReadinessEvidence = Schema7.Struct({
1151
+ scopeAvailable: Schema7.Boolean,
1152
+ acceptanceCriteriaAvailable: Schema7.Boolean,
1153
+ dependenciesSatisfied: Schema7.Boolean,
1154
+ executionPlanAvailable: Schema7.Boolean,
1155
+ repoBindingAvailable: Schema7.Boolean,
1156
+ verificationCommands: Schema7.Array(Schema7.String.check(Schema7.isMinLength(1), Schema7.isMaxLength(500))).check(Schema7.isMaxLength(50)),
1157
+ deliveryTargetAvailable: Schema7.Boolean
1158
+ });
1159
+ var ContextPackRelevanceSummary = Schema7.Struct({
1160
+ included: Schema7.Array(Schema7.String.check(Schema7.isMinLength(1))),
1161
+ omitted: Schema7.Array(Schema7.String.check(Schema7.isMinLength(1))),
1162
+ notes: Schema7.Array(Schema7.String.check(Schema7.isMinLength(1))),
1163
+ readiness: Schema7.optionalKey(ContextPackReadinessEvidence)
1164
+ });
1165
+ var ContextPackBudget = Schema7.Struct({
1166
+ maxMarkdownChars: Schema7.Int.check(Schema7.isGreaterThanOrEqualTo(1)),
1167
+ markdownChars: Schema7.Int.check(Schema7.isGreaterThanOrEqualTo(0)),
1168
+ indexedItemCount: Schema7.Int.check(Schema7.isGreaterThanOrEqualTo(0)),
1169
+ retrievalRefCount: Schema7.Int.check(Schema7.isGreaterThanOrEqualTo(0))
1170
+ });
1171
+ var ContextPack = Schema7.Struct({
1172
+ contextPackId: Id,
1173
+ workspaceId: Id,
1174
+ projectId: Schema7.optionalKey(Id),
1175
+ taskId: Id,
1176
+ mode: ContextPackMode,
1177
+ contentMarkdown: Schema7.String.check(Schema7.isMinLength(1)),
1178
+ launchBrief: ContextPackLaunchBrief,
1179
+ contextIndex: Schema7.Array(ContextPackIndexEntry),
1180
+ retrievalRefs: Schema7.Array(ContextPackRetrievalRef),
1181
+ relevanceSummary: ContextPackRelevanceSummary,
1182
+ budget: ContextPackBudget,
1183
+ includedKitIds: Schema7.Array(Id),
1184
+ includedMemoryIds: Schema7.Array(Id),
1185
+ includedDecisionIds: Schema7.Array(Id),
1186
+ includedProposalIds: Schema7.Array(Id),
1187
+ includedSessionIds: Schema7.Array(Id),
1188
+ createdByActorType: ActorType,
1189
+ createdByActorId: Id,
1190
+ createdAt: Timestamp
1191
+ });
1192
+ var ContextPackGenerate = Schema7.Struct({
1193
+ mode: Schema7.optionalKey(ContextPackMode)
1194
+ });
1195
+ var ContextPackLatestQuery = Schema7.Struct({
1196
+ mode: Schema7.optionalKey(ContextPackMode)
1197
+ });
1198
+ var ContextPackResult = Schema7.Struct({
1199
+ contextPackId: Id,
1200
+ mode: ContextPackMode,
1201
+ contentMarkdown: Schema7.String.check(Schema7.isMinLength(1)),
1202
+ launchBrief: Schema7.optionalKey(ContextPackLaunchBrief),
1203
+ contextIndex: Schema7.optionalKey(Schema7.Array(ContextPackIndexEntry)),
1204
+ retrievalRefs: Schema7.optionalKey(Schema7.Array(ContextPackRetrievalRef)),
1205
+ relevanceSummary: Schema7.optionalKey(ContextPackRelevanceSummary),
1206
+ budget: Schema7.optionalKey(ContextPackBudget),
1207
+ includedDecisionIds: Schema7.optionalKey(Schema7.Array(Id)),
1208
+ includedProposalIds: Schema7.optionalKey(Schema7.Array(Id))
1209
+ });
1210
+ var ContextPackRetrievalInput = Schema7.Struct({
1211
+ contextPackId: Id,
1212
+ ref: ContextPackRetrievalRef
1213
+ });
1214
+ var ContextPackRetrievedContext = Schema7.Struct({
1215
+ contextPackId: Id,
1216
+ ref: ContextPackRetrievalRef,
1217
+ contentMarkdown: Schema7.String.check(Schema7.isMinLength(1)),
1218
+ safety: Schema7.Struct({
1219
+ rawContentIncluded: Schema7.Boolean,
1220
+ notes: Schema7.Array(Schema7.String.check(Schema7.isMinLength(1)))
1221
+ })
1222
+ });
1223
+
1224
+ // packages/core/src/extension.ts
1225
+ import * as Schema10 from "effect/Schema";
1226
+
1227
+ // packages/core/src/run.ts
1228
+ import * as Schema9 from "effect/Schema";
1229
+
1230
+ // packages/core/src/redaction.ts
1231
+ import * as Schema8 from "effect/Schema";
1232
+ import * as Data from "effect/Data";
1233
+ var EvidenceRefContractVersion = "evidence-ref.v1";
1234
+ var RedactionClassificationSchema = Schema8.Union([
1235
+ Schema8.Literal("secret"),
1236
+ Schema8.Literal("credential"),
1237
+ Schema8.Literal("pii"),
1238
+ Schema8.Literal("source"),
1239
+ Schema8.Literal("log"),
1240
+ Schema8.Literal("diff"),
1241
+ Schema8.Literal("transcript"),
1242
+ Schema8.Literal("provider_payload"),
1243
+ Schema8.Literal("url"),
1244
+ Schema8.Literal("path"),
1245
+ Schema8.Literal("unknown")
1246
+ ]);
1247
+ var RedactionFindingSchema = Schema8.Struct({
1248
+ path: Schema8.String.check(Schema8.isMinLength(1), Schema8.isMaxLength(512)),
1249
+ classification: RedactionClassificationSchema,
1250
+ rule: Schema8.String.check(Schema8.isMinLength(1), Schema8.isMaxLength(120)),
1251
+ preview: Schema8.String.check(Schema8.isMaxLength(160)),
1252
+ sha256: Schema8.String.check(Schema8.isPattern(new RegExp("^[a-f0-9]{64}$", "u")))
1253
+ });
1254
+ var EvidenceRef = Schema8.Struct({
1255
+ contractVersion: Schema8.Literal(EvidenceRefContractVersion),
1256
+ kind: Schema8.String.check(Schema8.isMinLength(1), Schema8.isMaxLength(80)),
1257
+ summary: Schema8.String.check(Schema8.isMinLength(1), Schema8.isMaxLength(240)),
1258
+ sha256: Schema8.String.check(Schema8.isPattern(new RegExp("^[a-f0-9]{64}$", "u"))),
1259
+ redaction: Schema8.Literal("redacted"),
1260
+ findingCount: Schema8.Int.check(Schema8.isGreaterThanOrEqualTo(0)),
1261
+ classifications: Schema8.Array(RedactionClassificationSchema).check(Schema8.isMaxLength(20))
1262
+ });
1263
+ var RedactionSurfaceKinds = ["api", "mcp", "cli", "web", "event", "log", "evidence", "export"];
1264
+ var RedactionSurfaceKindSchema = Schema8.Literals(RedactionSurfaceKinds);
1265
+ var RedactionWaiver = Schema8.Struct({
1266
+ contractVersion: Schema8.Literal("redaction-waiver.v1"),
1267
+ id: Schema8.String.check(Schema8.isMinLength(1)),
1268
+ workspaceId: Schema8.String.check(Schema8.isMinLength(1)),
1269
+ findingId: Schema8.String.check(Schema8.isMinLength(1)),
1270
+ reason: Schema8.String.check(Schema8.isMinLength(1), Schema8.isMaxLength(1000)),
1271
+ authorityActorType: Schema8.Union([
1272
+ Schema8.Literal("human"),
1273
+ Schema8.Literal("delegated_agent"),
1274
+ Schema8.Literal("agent")
1275
+ ]),
1276
+ authorityActorId: Schema8.String.check(Schema8.isMinLength(1)),
1277
+ authorityRole: Schema8.Union([Schema8.Literal("owner"), Schema8.Literal("admin")]),
1278
+ expiresAt: Schema8.optionalKey(Schema8.String.check(isDateTime)),
1279
+ createdAt: Schema8.String.check(isDateTime)
1280
+ });
1281
+ class DurableSurfaceScanError extends Data.TaggedError("DurableSurfaceScanError") {
1282
+ constructor(findings) {
1283
+ super({ message: "Durable surface scanner rejected unsafe or unknown content", findings });
1284
+ }
1285
+ }
1286
+ var LIVE_CANONICAL_ID_KEYS = new Set([
1287
+ "workspace_id",
1288
+ "project_id",
1289
+ "task_id",
1290
+ "session_id",
1291
+ "step_attempt_id",
1292
+ "agent_identity_id",
1293
+ "memory_id",
1294
+ "context_pack_id",
1295
+ "loop_id",
1296
+ "run_id",
1297
+ "loop_change_id",
1298
+ "approval_id",
1299
+ "subject_id",
1300
+ "item_id",
1301
+ "runner_id",
1302
+ "runner_replica_id",
1303
+ "work_unit_id",
1304
+ "placement_id",
1305
+ "dependency_id",
1306
+ "detail_id",
1307
+ "run_event_id",
1308
+ "run_message_id",
1309
+ "run_result_id",
1310
+ "sender_run_id",
1311
+ "recipient_run_id",
1312
+ "lease_id",
1313
+ "client_mutation_id"
1314
+ ]);
1315
+ var LOCAL_PATH_KEYS = new Set([
1316
+ "path",
1317
+ "local_path",
1318
+ "host_path",
1319
+ "checkout_path",
1320
+ "worktree_path",
1321
+ "directory",
1322
+ "dir",
1323
+ "socket",
1324
+ "docker_socket",
1325
+ "ssh_agent_socket"
1326
+ ]);
1327
+ var VALUE_RULES = [
1328
+ ["secret", /-----BEGIN (?:RSA |EC |OPENSSH )?PRIVATE KEY-----/u, "private-key"],
1329
+ ["credential", /\bBearer\s+[A-Za-z0-9._~+/-]+=*/iu, "bearer-token"],
1330
+ [
1331
+ "credential",
1332
+ /(?:^|[^A-Za-z0-9])(?:ghp_|github_pat_|glpat-|ksa1\.|sk-[A-Za-z0-9_-]{8,}|xox[baprs]-)[A-Za-z0-9._-]+/u,
1333
+ "provider-token"
1334
+ ],
1335
+ [
1336
+ "credential",
1337
+ /(?:api[_ -]?key|secret|token|password)\s*[:=]\s*(?!env\b|file\b|exec\b)[^\s,;}]+/iu,
1338
+ "credential-assignment"
1339
+ ],
1340
+ ["pii", /\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}\b/iu, "email"],
1341
+ ["pii", /\b\d{3}-\d{2}-\d{4}\b/u, "ssn"],
1342
+ ["pii", /(?:\+\d[\d ()-]{8,}\d|\(\d{3}\)[\d -]{7,}\d|\b\d{3}[ -]\d{3}[ -]\d{4}\b)/u, "phone"],
1343
+ ["pii", /\b(?:\d[ -]*?){13,19}\b/u, "payment-number"],
1344
+ ["url", /\b(?:https?|ftp):\/\/[^\s]+/iu, "url-content"],
1345
+ ["diff", /(^|\n)diff --git\s/u, "diff-content"],
1346
+ ["source", /(^|\n)\s*(?:import|export|const|let|var|function|class)\s+[A-Za-z_$]/u, "source-content"],
1347
+ ["log", /(?:^|\n)\s*\d{4}-\d{2}-\d{2}T\S+\s+(?:ERROR|WARN|INFO|DEBUG)\b/u, "structured-log"],
1348
+ ["transcript", /(?:^|\n)\s*(?:user|assistant|system)\s*:/iu, "transcript-content"]
1349
+ ];
1350
+ var normalizedKeys = new Map;
1351
+ var CREDENTIAL_RULES = VALUE_RULES.flatMap(([classification, pattern]) => classification === "secret" || classification === "credential" ? [[classification, new RegExp(pattern.source, `${pattern.flags}g`)]] : []);
1352
+
1353
+ // packages/core/src/run.ts
1354
+ var RunContractVersion = Schema9.Literal("run.v1");
1355
+ var ImmutableExecutionClosureContractVersion = Schema9.Literal("immutable-execution-closure.v1");
1356
+ var Sha2563 = Schema9.String.check(Schema9.isPattern(new RegExp("^[a-f0-9]{64}$", "u")));
1357
+ var BoundedText = Schema9.String.check(Schema9.isMinLength(1), Schema9.isMaxLength(4000));
1358
+ var SafeKey = Schema9.String.check(Schema9.isMinLength(1), Schema9.isMaxLength(120), Schema9.isPattern(new RegExp("^[A-Za-z][A-Za-z0-9_-]*$", "u")));
1359
+ var SafeJson = Schema9.Union([
1360
+ Schema9.Null,
1361
+ Schema9.Boolean,
1362
+ Schema9.Finite.check(Schema9.isLessThanOrEqualTo(Number.MAX_SAFE_INTEGER), Schema9.isGreaterThanOrEqualTo(Number.MIN_SAFE_INTEGER)),
1363
+ BoundedText,
1364
+ Schema9.Array(Schema9.suspend(() => SafeJson)).check(Schema9.isMaxLength(200)),
1365
+ Schema9.Record(SafeKey, Schema9.suspend(() => SafeJson)).check(Schema9.isMaxProperties(200))
1366
+ ]).annotate({ identifier: "RunSafeJson" });
1367
+ var RunActorRef = Schema9.Struct({
1368
+ actorType: Schema9.Union([ActorType, Schema9.Literal("runner")]),
1369
+ actorId: Id,
1370
+ delegatedByUserId: Schema9.optionalKey(Id),
1371
+ agentIdentityId: Schema9.optionalKey(Id),
1372
+ runnerId: Schema9.optionalKey(Id)
1373
+ });
1374
+ var RunResourceRef = Schema9.Struct({
1375
+ kind: Schema9.String.check(Schema9.isMinLength(1), Schema9.isMaxLength(80)),
1376
+ id: Id
1377
+ });
1378
+ var RunSchemaRef = Schema9.Struct({
1379
+ kind: Schema9.Literal("typebox_ref"),
1380
+ name: Schema9.String.check(Schema9.isMinLength(1), Schema9.isMaxLength(160)),
1381
+ version: Schema9.String.check(Schema9.isMinLength(1), Schema9.isMaxLength(40)),
1382
+ sha256: Sha2563
1383
+ });
1384
+ var AgentPinnedKitRef = Schema9.Struct({
1385
+ kitId: Id,
1386
+ version: Schema9.Int.check(Schema9.isGreaterThanOrEqualTo(1)),
1387
+ sha256: Sha2563,
1388
+ precedence: Schema9.Int.check(Schema9.isGreaterThanOrEqualTo(0)),
1389
+ required: Schema9.Boolean
1390
+ });
1391
+ var AgentSkillRef = Schema9.Struct({
1392
+ sourceId: Schema9.String.check(Schema9.isMinLength(1), Schema9.isMaxLength(240)),
1393
+ name: Schema9.String.check(Schema9.isMinLength(1), Schema9.isMaxLength(160)),
1394
+ version: Schema9.optionalKey(Schema9.String.check(Schema9.isMaxLength(80))),
1395
+ sha256: Schema9.optionalKey(Sha2563),
1396
+ required: Schema9.Boolean
1397
+ });
1398
+ var AgentReference = Schema9.Union([
1399
+ Schema9.Struct({ agentId: Id, alias: Schema9.String.check(Schema9.isMinLength(1), Schema9.isMaxLength(80)) }),
1400
+ Schema9.Struct({ agentId: Id, version: Schema9.Int.check(Schema9.isGreaterThanOrEqualTo(1)), digest: Sha2563 })
1401
+ ]);
1402
+ var AgentToolGrant = Schema9.Struct({
1403
+ ref: Schema9.String.check(Schema9.isMinLength(1), Schema9.isMaxLength(240)),
1404
+ inputSchema: Schema9.optionalKey(RunSchemaRef),
1405
+ scope: Schema9.optionalKey(RunResourceRef),
1406
+ approval: Schema9.Union([Schema9.Literal("none"), Schema9.Literal("human_each_call"), Schema9.Literal("human_once")]),
1407
+ delegable: Schema9.Boolean
1408
+ });
1409
+ var AgentHarnessSelector = Schema9.Struct({
1410
+ mode: Schema9.Union([Schema9.Literal("direct_model"), Schema9.Literal("harness_v1"), Schema9.Literal("native")]),
1411
+ harness: Schema9.optionalKey(Schema9.String.check(Schema9.isMinLength(1), Schema9.isMaxLength(80))),
1412
+ adapterRef: Schema9.optionalKey(Schema9.String.check(Schema9.isMinLength(1), Schema9.isMaxLength(240))),
1413
+ requiredCapabilities: Schema9.Array(Schema9.String.check(Schema9.isMinLength(1), Schema9.isMaxLength(80))).check(Schema9.isMaxLength(40)),
1414
+ allowedFallbacks: Schema9.Array(Schema9.String.check(Schema9.isMinLength(1), Schema9.isMaxLength(160))).check(Schema9.isMaxLength(20))
1415
+ });
1416
+ var AgentModelSelector = Schema9.Struct({
1417
+ providerRef: Schema9.String.check(Schema9.isMinLength(1), Schema9.isMaxLength(160)),
1418
+ modelRef: Schema9.String.check(Schema9.isMinLength(1), Schema9.isMaxLength(160)),
1419
+ profile: Schema9.optionalKey(Schema9.String.check(Schema9.isMaxLength(80))),
1420
+ reasoning: Schema9.optionalKey(Schema9.String.check(Schema9.isMaxLength(80)))
1421
+ });
1422
+ var AgentPolicy = Schema9.Struct({
1423
+ requestedCapabilities: Schema9.Array(Schema9.String.check(Schema9.isMinLength(1), Schema9.isMaxLength(120))).check(Schema9.isMaxLength(100)),
1424
+ maxChildDepth: Schema9.Int.check(Schema9.isGreaterThanOrEqualTo(0), Schema9.isLessThanOrEqualTo(32)),
1425
+ allowSubdelegation: Schema9.Boolean,
1426
+ maxWallSeconds: Schema9.optionalKey(Schema9.Int.check(Schema9.isGreaterThanOrEqualTo(1), Schema9.isLessThanOrEqualTo(31536000))),
1427
+ maxInputTokens: Schema9.optionalKey(Schema9.Int.check(Schema9.isGreaterThanOrEqualTo(0), Schema9.isLessThanOrEqualTo(1e8))),
1428
+ maxOutputTokens: Schema9.optionalKey(Schema9.Int.check(Schema9.isGreaterThanOrEqualTo(0), Schema9.isLessThanOrEqualTo(1e8))),
1429
+ hardLimit: Schema9.Boolean
1430
+ });
1431
+ var AgentProvenance = Schema9.Struct({
1432
+ source: Schema9.Union([
1433
+ Schema9.Literal("kitman"),
1434
+ Schema9.Literal("workspace"),
1435
+ Schema9.Literal("project"),
1436
+ Schema9.Literal("git"),
1437
+ Schema9.Literal("package"),
1438
+ Schema9.Literal("import")
1439
+ ]),
1440
+ sourceRef: Schema9.optionalKey(Schema9.String.check(Schema9.isMaxLength(240))),
1441
+ sourceCommitSha: Schema9.optionalKey(Schema9.String.check(Schema9.isMaxLength(128))),
1442
+ contentSha256: Sha2563,
1443
+ reviewedBy: Schema9.optionalKey(Schema9.Array(RunActorRef).check(Schema9.isMaxLength(20)))
1444
+ });
1445
+ var Agent = Schema9.Struct({
1446
+ contractVersion: RunContractVersion,
1447
+ id: Id,
1448
+ workspaceId: Id,
1449
+ projectId: Schema9.optionalKey(Id),
1450
+ name: Schema9.String.check(Schema9.isMinLength(1), Schema9.isMaxLength(160)),
1451
+ slug: Schema9.String.check(Schema9.isMinLength(1), Schema9.isMaxLength(160), Schema9.isPattern(new RegExp("^[a-z0-9]+(?:-[a-z0-9]+)*$", "u"))),
1452
+ currentVersion: Schema9.optionalKey(Schema9.Int.check(Schema9.isGreaterThanOrEqualTo(1))),
1453
+ status: Schema9.Union([
1454
+ Schema9.Literal("draft"),
1455
+ Schema9.Literal("published"),
1456
+ Schema9.Literal("deprecated"),
1457
+ Schema9.Literal("disabled"),
1458
+ Schema9.Literal("archived")
1459
+ ]),
1460
+ createdBy: RunActorRef,
1461
+ createdAt: Timestamp,
1462
+ updatedAt: Timestamp
1463
+ });
1464
+ var RunMessageTypes = [
1465
+ "progress",
1466
+ "question",
1467
+ "answer",
1468
+ "context_request",
1469
+ "context_response",
1470
+ "finding",
1471
+ "partial_result",
1472
+ "handoff",
1473
+ "instruction",
1474
+ "notice"
1475
+ ];
1476
+ var RunMessageType = Schema9.Literals(RunMessageTypes);
1477
+ var MessageEvidenceRefs = Schema9.Array(RunResourceRef).check(Schema9.isMaxLength(100));
1478
+ var MessageProgressPayload = Schema9.Struct({
1479
+ type: Schema9.Literal("progress"),
1480
+ summary: BoundedText,
1481
+ phase: Schema9.optionalKey(Schema9.String.check(Schema9.isMaxLength(120))),
1482
+ percent: Schema9.optionalKey(Schema9.Finite.check(Schema9.isGreaterThanOrEqualTo(0), Schema9.isLessThanOrEqualTo(100))),
1483
+ evidenceRefs: Schema9.optionalKey(MessageEvidenceRefs)
1484
+ });
1485
+ var MessageQuestionPayload = Schema9.Struct({
1486
+ type: Schema9.Literal("question"),
1487
+ questionId: Schema9.String.check(Schema9.isMinLength(1), Schema9.isMaxLength(160)),
1488
+ prompt: BoundedText,
1489
+ answerSchema: RunSchemaRef,
1490
+ urgency: Schema9.Union([Schema9.Literal("normal"), Schema9.Literal("blocking")]),
1491
+ waitId: Id
1492
+ });
1493
+ var MessageAnswerPayload = Schema9.Struct({
1494
+ type: Schema9.Literal("answer"),
1495
+ questionId: Schema9.String.check(Schema9.isMinLength(1), Schema9.isMaxLength(160)),
1496
+ answer: SafeJson,
1497
+ answerSchema: RunSchemaRef,
1498
+ waitId: Id
1499
+ });
1500
+ var MessageContextRequestPayload = Schema9.Struct({
1501
+ type: Schema9.Literal("context_request"),
1502
+ requestId: Schema9.String.check(Schema9.isMinLength(1), Schema9.isMaxLength(160)),
1503
+ refs: Schema9.Array(RunResourceRef).check(Schema9.isMaxLength(100)),
1504
+ reason: BoundedText
1505
+ });
1506
+ var MessageContextResponsePayload = Schema9.Struct({
1507
+ type: Schema9.Literal("context_response"),
1508
+ requestId: Schema9.String.check(Schema9.isMinLength(1), Schema9.isMaxLength(160)),
1509
+ refs: Schema9.Array(RunResourceRef).check(Schema9.isMaxLength(100)),
1510
+ summaries: Schema9.Array(SafeJson).check(Schema9.isMaxLength(100))
1511
+ });
1512
+ var MessageFindingPayload = Schema9.Struct({
1513
+ type: Schema9.Literal("finding"),
1514
+ severity: Schema9.Union([
1515
+ Schema9.Literal("info"),
1516
+ Schema9.Literal("low"),
1517
+ Schema9.Literal("medium"),
1518
+ Schema9.Literal("high"),
1519
+ Schema9.Literal("critical")
1520
+ ]),
1521
+ category: Schema9.String.check(Schema9.isMinLength(1), Schema9.isMaxLength(120)),
1522
+ summary: BoundedText,
1523
+ evidenceRefs: MessageEvidenceRefs
1524
+ });
1525
+ var MessagePartialResultPayload = Schema9.Struct({
1526
+ type: Schema9.Literal("partial_result"),
1527
+ outputSchema: RunSchemaRef,
1528
+ data: SafeJson,
1529
+ complete: Schema9.Literal(false)
1530
+ });
1531
+ var MessageHandoffPayload = Schema9.Struct({
1532
+ type: Schema9.Literal("handoff"),
1533
+ summary: BoundedText,
1534
+ nextAction: Schema9.optionalKey(Schema9.String.check(Schema9.isMaxLength(4000))),
1535
+ evidenceRefs: Schema9.optionalKey(MessageEvidenceRefs)
1536
+ });
1537
+ var MessageInstructionPayload = Schema9.Struct({
1538
+ type: Schema9.Literal("instruction"),
1539
+ instruction: BoundedText,
1540
+ authority: Schema9.Union([Schema9.Literal("normal"), Schema9.Literal("operator")])
1541
+ });
1542
+ var MessageNoticePayload = Schema9.Struct({
1543
+ type: Schema9.Literal("notice"),
1544
+ code: Schema9.String.check(Schema9.isMinLength(1), Schema9.isMaxLength(120)),
1545
+ summary: BoundedText
1546
+ });
1547
+ var RunMessagePayload = Schema9.Union([
1548
+ MessageProgressPayload,
1549
+ MessageQuestionPayload,
1550
+ MessageAnswerPayload,
1551
+ MessageContextRequestPayload,
1552
+ MessageContextResponsePayload,
1553
+ MessageFindingPayload,
1554
+ MessagePartialResultPayload,
1555
+ MessageHandoffPayload,
1556
+ MessageInstructionPayload,
1557
+ MessageNoticePayload
1558
+ ]);
1559
+ var RunMessage = Schema9.Struct({
1560
+ contractVersion: RunContractVersion,
1561
+ id: Id,
1562
+ workspaceId: Id,
1563
+ projectId: Schema9.optionalKey(Id),
1564
+ rootRunId: Id,
1565
+ sender: Schema9.Union([
1566
+ Schema9.Struct({ kind: Schema9.Union([Schema9.Literal("run"), Schema9.Literal("step_attempt")]), id: Id }),
1567
+ RunActorRef
1568
+ ]),
1569
+ recipient: Schema9.Struct({ kind: Schema9.String.check(Schema9.isMinLength(1), Schema9.isMaxLength(80)), id: Id }),
1570
+ type: RunMessageType,
1571
+ streamKey: Schema9.String.check(Schema9.isMinLength(1), Schema9.isMaxLength(240)),
1572
+ sequence: Schema9.Int.check(Schema9.isGreaterThanOrEqualTo(1)),
1573
+ correlationId: Schema9.optionalKey(Id),
1574
+ causationId: Schema9.optionalKey(Id),
1575
+ replyToMessageId: Schema9.optionalKey(Id),
1576
+ payloadSchema: Schema9.optionalKey(RunSchemaRef),
1577
+ payload: RunMessagePayload,
1578
+ delivery: Schema9.Union([
1579
+ Schema9.Literal("created"),
1580
+ Schema9.Literal("queued"),
1581
+ Schema9.Literal("delivered"),
1582
+ Schema9.Literal("acknowledged"),
1583
+ Schema9.Literal("expired"),
1584
+ Schema9.Literal("failed")
1585
+ ]),
1586
+ idempotencyKey: Schema9.String.check(Schema9.isMinLength(1), Schema9.isMaxLength(240)),
1587
+ expiresAt: Schema9.optionalKey(Timestamp),
1588
+ createdAt: Timestamp,
1589
+ acknowledgedAt: Schema9.optionalKey(Timestamp)
1590
+ });
1591
+ var RunResult = Schema9.Struct({
1592
+ contractVersion: RunContractVersion,
1593
+ id: Id,
1594
+ workspaceId: Id,
1595
+ projectId: Schema9.optionalKey(Id),
1596
+ runId: Id,
1597
+ rootRunId: Id,
1598
+ attempt: Schema9.Int.check(Schema9.isGreaterThanOrEqualTo(1)),
1599
+ outcome: Schema9.Union([
1600
+ Schema9.Literal("succeeded"),
1601
+ Schema9.Literal("failed"),
1602
+ Schema9.Literal("canceled"),
1603
+ Schema9.Literal("blocked"),
1604
+ Schema9.Literal("expired")
1605
+ ]),
1606
+ output: Schema9.optionalKey(Schema9.Struct({ schema: RunSchemaRef, data: SafeJson, digest: Sha2563 })),
1607
+ failure: Schema9.optionalKey(Schema9.Struct({
1608
+ code: Schema9.String.check(Schema9.isMinLength(1), Schema9.isMaxLength(120)),
1609
+ category: Schema9.String.check(Schema9.isMinLength(1), Schema9.isMaxLength(80)),
1610
+ summary: BoundedText,
1611
+ retryable: Schema9.Boolean,
1612
+ details: Schema9.optionalKey(SafeJson)
1613
+ })),
1614
+ evidenceRefs: Schema9.Array(Schema9.Union([RunResourceRef, EvidenceRef])).check(Schema9.isMaxLength(100)),
1615
+ childSummary: Schema9.Struct({
1616
+ awaited: Schema9.Int.check(Schema9.isGreaterThanOrEqualTo(0)),
1617
+ detached: Schema9.Int.check(Schema9.isGreaterThanOrEqualTo(0)),
1618
+ succeeded: Schema9.Int.check(Schema9.isGreaterThanOrEqualTo(0)),
1619
+ failed: Schema9.Int.check(Schema9.isGreaterThanOrEqualTo(0)),
1620
+ canceled: Schema9.Int.check(Schema9.isGreaterThanOrEqualTo(0))
1621
+ }),
1622
+ usage: Schema9.optionalKey(Schema9.Record(SafeKey, SafeJson).check(Schema9.isMaxProperties(20))),
1623
+ producedBy: Schema9.Struct({
1624
+ workUnitId: Schema9.optionalKey(Id),
1625
+ leaseId: Schema9.optionalKey(Id),
1626
+ fencingTokenDigest: Schema9.optionalKey(Sha2563)
1627
+ }),
1628
+ createdAt: Timestamp,
1629
+ finalizedAt: Timestamp
1630
+ });
1631
+ var RunEvent = Schema9.Struct({
1632
+ contractVersion: RunContractVersion,
1633
+ id: Id,
1634
+ eventVersion: Schema9.Literal(1),
1635
+ streamId: Id,
1636
+ sequence: Schema9.Int.check(Schema9.isGreaterThanOrEqualTo(1)),
1637
+ workspaceId: Id,
1638
+ projectId: Schema9.optionalKey(Id),
1639
+ subject: RunResourceRef,
1640
+ rootRunId: Id,
1641
+ type: Schema9.String.check(Schema9.isMinLength(1), Schema9.isMaxLength(100)),
1642
+ actor: Schema9.optionalKey(RunActorRef),
1643
+ correlationId: Schema9.optionalKey(Id),
1644
+ causationId: Schema9.optionalKey(Id),
1645
+ occurredAt: Timestamp,
1646
+ data: Schema9.Struct({ type: Schema9.String.check(Schema9.isMinLength(1), Schema9.isMaxLength(100)), value: SafeJson })
1647
+ });
1648
+ var WaitKinds = [
1649
+ "timer",
1650
+ "message",
1651
+ "child_run",
1652
+ "external_event",
1653
+ "human_approval",
1654
+ "provider_check",
1655
+ "provider_quota",
1656
+ "resource"
1657
+ ];
1658
+ var WaitKind = Schema9.Literals(WaitKinds);
1659
+ var Wait = Schema9.Struct({
1660
+ contractVersion: RunContractVersion,
1661
+ id: Id,
1662
+ workspaceId: Id,
1663
+ projectId: Schema9.optionalKey(Id),
1664
+ runId: Id,
1665
+ rootRunId: Id,
1666
+ stepKey: Schema9.optionalKey(Schema9.String.check(Schema9.isMinLength(1), Schema9.isMaxLength(160))),
1667
+ kind: WaitKind,
1668
+ state: Schema9.Union([
1669
+ Schema9.Literal("open"),
1670
+ Schema9.Literal("resolved"),
1671
+ Schema9.Literal("expired"),
1672
+ Schema9.Literal("canceled")
1673
+ ]),
1674
+ correlation: Schema9.Record(SafeKey, SafeJson).check(Schema9.isMaxProperties(20)),
1675
+ expectedSchema: Schema9.optionalKey(RunSchemaRef),
1676
+ timeout: Schema9.Struct({
1677
+ dueAt: Schema9.optionalKey(Timestamp),
1678
+ onTimeout: Schema9.Union([
1679
+ Schema9.Literal("fail"),
1680
+ Schema9.Literal("block"),
1681
+ Schema9.Literal("cancel"),
1682
+ Schema9.Literal("default"),
1683
+ Schema9.Literal("escalate")
1684
+ ]),
1685
+ defaultValue: Schema9.optionalKey(SafeJson)
1686
+ }),
1687
+ responderScope: Schema9.optionalKey(RunResourceRef),
1688
+ resolution: Schema9.optionalKey(Schema9.Struct({
1689
+ kind: Schema9.String.check(Schema9.isMinLength(1), Schema9.isMaxLength(80)),
1690
+ data: Schema9.optionalKey(SafeJson),
1691
+ digest: Sha2563,
1692
+ actor: Schema9.optionalKey(RunActorRef)
1693
+ })),
1694
+ createdAt: Timestamp,
1695
+ resolvedAt: Schema9.optionalKey(Timestamp)
1696
+ });
1697
+ var ControlCommandKinds = [
1698
+ "pause",
1699
+ "resume",
1700
+ "extend_budget",
1701
+ "cancel",
1702
+ "retry",
1703
+ "rerun_latest",
1704
+ "takeover",
1705
+ "release_takeover",
1706
+ "answer_wait",
1707
+ "approve_wait",
1708
+ "reject_wait",
1709
+ "refresh_context",
1710
+ "repair_readiness",
1711
+ "sync_agent_environment",
1712
+ "escalate_sandbox",
1713
+ "rotate_secret_ref",
1714
+ "rerun_verification",
1715
+ "create_follow_up",
1716
+ "drain_replica",
1717
+ "discard_cache",
1718
+ "request_status",
1719
+ "request_handoff"
1720
+ ];
1721
+ var ControlCommandKind = Schema9.Literals(ControlCommandKinds);
1722
+ var ControlCommand = Schema9.Struct({
1723
+ contractVersion: RunContractVersion,
1724
+ id: Id,
1725
+ workspaceId: Id,
1726
+ projectId: Schema9.optionalKey(Id),
1727
+ target: RunResourceRef,
1728
+ kind: ControlCommandKind,
1729
+ payload: Schema9.Struct({ kind: ControlCommandKind, data: SafeJson }),
1730
+ requestedBy: RunActorRef,
1731
+ idempotencyKey: Schema9.String.check(Schema9.isMinLength(1), Schema9.isMaxLength(240)),
1732
+ expectedResourceVersion: Schema9.optionalKey(Schema9.Int.check(Schema9.isGreaterThanOrEqualTo(1))),
1733
+ status: Schema9.Union([
1734
+ Schema9.Literal("accepted"),
1735
+ Schema9.Literal("queued"),
1736
+ Schema9.Literal("applied"),
1737
+ Schema9.Literal("rejected"),
1738
+ Schema9.Literal("expired"),
1739
+ Schema9.Literal("superseded")
1740
+ ]),
1741
+ rejection: Schema9.optionalKey(Schema9.Struct({ code: Schema9.String.check(Schema9.isMinLength(1), Schema9.isMaxLength(120)), summary: BoundedText })),
1742
+ createdAt: Timestamp,
1743
+ appliedAt: Schema9.optionalKey(Timestamp)
1744
+ });
1745
+ var ControlCommandList = Schema9.Struct({ items: Schema9.Array(ControlCommand).check(Schema9.isMaxLength(50)) });
1746
+ var RunCommandCenterSnapshot = Schema9.Struct({
1747
+ source: Schema9.Literal("http_snapshot"),
1748
+ collection: Schema9.Literal("run_command_center"),
1749
+ scope: Schema9.Struct({
1750
+ kind: Schema9.Literal("run"),
1751
+ workspaceId: Id,
1752
+ projectId: Schema9.optionalKey(Id),
1753
+ runId: Id
1754
+ }),
1755
+ capturedAt: Timestamp,
1756
+ consistency: Schema9.Literal("lower_bound"),
1757
+ lowerBound: Schema9.String.check(Schema9.isMinLength(1), Schema9.isMaxLength(512)),
1758
+ isComplete: Schema9.Literal(true)
1759
+ });
1760
+
1761
+ // packages/core/src/extension.ts
1762
+ var NativeExtensionTargets = ["runner_backend", "harness", "sandbox"];
1763
+ var NativeExtensionTarget = Schema10.Literals(NativeExtensionTargets);
1764
+ var NativeExtensionPolicies = ["optional", "required"];
1765
+ var NativeExtensionPolicy = Schema10.Literals(NativeExtensionPolicies);
1766
+ var NativeExtensionIdentity = Schema10.String.check(Schema10.isMinLength(3), Schema10.isMaxLength(120), Schema10.isPattern(new RegExp("^[a-z0-9][a-z0-9_-]*(\\.[a-z0-9][a-z0-9_-]*)+$", "u")));
1767
+ var NativeExtensionRef = Schema10.Struct({
1768
+ extensionId: NativeExtensionIdentity,
1769
+ version: Schema10.Int.check(Schema10.isGreaterThanOrEqualTo(1), Schema10.isLessThanOrEqualTo(10)),
1770
+ policy: NativeExtensionPolicy,
1771
+ requiredCapabilities: Schema10.optionalKey(Schema10.Array(Schema10.String.check(Schema10.isMinLength(1), Schema10.isMaxLength(120))).check(Schema10.isMaxLength(50))),
1772
+ configuration: Schema10.optionalKey(Schema10.Record(Schema10.String.check(Schema10.isMinLength(1), Schema10.isMaxLength(120)), SafeJson).check(Schema10.isMaxProperties(40)))
1773
+ });
1774
+ var NativeExtensionDescriptor = Schema10.Struct({
1775
+ extensionId: NativeExtensionIdentity,
1776
+ version: Schema10.Int.check(Schema10.isGreaterThanOrEqualTo(1), Schema10.isLessThanOrEqualTo(10)),
1777
+ target: NativeExtensionTarget,
1778
+ requiredCapabilities: Schema10.Array(Schema10.String.check(Schema10.isMinLength(1), Schema10.isMaxLength(120))).check(Schema10.isMaxLength(50)),
1779
+ configurationSchema: Schema10.optionalKey(Schema10.Record(Schema10.String.check(Schema10.isMinLength(1), Schema10.isMaxLength(120)), SafeJson).check(Schema10.isMaxProperties(80))),
1780
+ resultSchema: Schema10.optionalKey(Schema10.Record(Schema10.String.check(Schema10.isMinLength(1), Schema10.isMaxLength(120)), SafeJson).check(Schema10.isMaxProperties(80))),
1781
+ observability: Schema10.Struct({
1782
+ transcriptPolicy: Schema10.Literal("metadata_only"),
1783
+ maxMetadataChars: Schema10.optionalKey(Schema10.Int.check(Schema10.isGreaterThanOrEqualTo(1), Schema10.isLessThanOrEqualTo(65536)))
1784
+ })
1785
+ });
1786
+
1787
+ // packages/core/src/proposal.ts
1788
+ import * as Schema11 from "effect/Schema";
1789
+ var ProposalStatuses = [
1790
+ "proposed",
1791
+ "in_review",
1792
+ "approved",
1793
+ "rejected",
1794
+ "applied",
1795
+ "reverted",
1796
+ "superseded",
1797
+ "canceled"
1798
+ ];
1799
+ var KitMarketplaceProposalTargetTypes = [
1800
+ "kit_source",
1801
+ "kit_version",
1802
+ "kit_installation",
1803
+ "kit_activation",
1804
+ "kit_trust_policy"
1805
+ ];
1806
+ var KitMarketplaceProposalActions = [
1807
+ "source_publish",
1808
+ "version_publish",
1809
+ "source_update",
1810
+ "trust_change",
1811
+ "visibility_change",
1812
+ "broad_activation",
1813
+ "risky_agent_environment_effect",
1814
+ "rollback"
1815
+ ];
1816
+ var ProposalTargetTypes = [
1817
+ "memory",
1818
+ "kit",
1819
+ "agent_environment_policy",
1820
+ "decision",
1821
+ "task",
1822
+ "project_context",
1823
+ "context_relevance",
1824
+ ...KitMarketplaceProposalTargetTypes
1825
+ ];
1826
+ var ProposalRiskLevels = ["low", "medium", "high"];
1827
+ var ProposalApprovalPolicyModes = [
1828
+ "auto_approve_low_risk",
1829
+ "require_other_project_member",
1830
+ "require_workspace_owner_or_admin"
1831
+ ];
1832
+ var ProposalPolicyViolationCodes = [
1833
+ "autonomous_self_approval",
1834
+ "self_capability_escalation",
1835
+ "missing_required_approval",
1836
+ "unsafe_payload",
1837
+ "target_conflict"
1838
+ ];
1839
+ var ProposalPolicyViolationSeverities = ["warning", "blocking"];
1840
+ var ProposalCheckKinds = ["schema", "policy", "preflight", "conflict", "safety"];
1841
+ var ProposalCheckStatuses = ["pending", "passed", "failed", "warning", "skipped"];
1842
+ var ProposalApplicationActions = ["applied", "rejected", "reverted"];
1843
+ var ProposalRenderedDiffFormats = ["summary", "field_diff", "markdown"];
1844
+ var ProposalRenderedDiffSectionRisks = ["low", "medium", "high"];
1845
+ var ProposalRenderedDiffRefKinds = [
1846
+ "memory",
1847
+ "kit",
1848
+ "loop",
1849
+ "agent",
1850
+ "agent_environment_policy",
1851
+ "decision",
1852
+ "task",
1853
+ "project_context",
1854
+ "context_relevance",
1855
+ ...KitMarketplaceProposalTargetTypes,
1856
+ "session",
1857
+ "step_attempt",
1858
+ "change_request"
1859
+ ];
1860
+ var ForbiddenProposalNormalizedKeys = [
1861
+ "raw_code",
1862
+ "source_code",
1863
+ "raw_source",
1864
+ "source_snapshot",
1865
+ "source_archive",
1866
+ "file_content",
1867
+ "raw_diff",
1868
+ "diff",
1869
+ "patch",
1870
+ "raw_patch",
1871
+ "raw_log",
1872
+ "raw_logs",
1873
+ "terminal_log",
1874
+ "raw_terminal_log",
1875
+ "stdout",
1876
+ "stderr",
1877
+ "raw_stdout",
1878
+ "raw_stderr",
1879
+ "transcript",
1880
+ "raw_transcript",
1881
+ "raw_provider_payload",
1882
+ "provider_payload",
1883
+ "provider_webhook_payload",
1884
+ "raw_webhook",
1885
+ "provider_comment_body",
1886
+ "comment_body",
1887
+ "raw_comment",
1888
+ "raw_comments",
1889
+ "token",
1890
+ "access_token",
1891
+ "refresh_token",
1892
+ "password",
1893
+ "private_key",
1894
+ "secret",
1895
+ "secret_value",
1896
+ "client_secret",
1897
+ "api_key",
1898
+ "authorization",
1899
+ "cookie",
1900
+ "durable_asset_url",
1901
+ "asset_url",
1902
+ "download_url",
1903
+ "upload_url",
1904
+ "presigned_url",
1905
+ "signed_url"
1906
+ ];
1907
+ var ForbiddenProposalNormalizedKeySet = new Set(ForbiddenProposalNormalizedKeys);
1908
+ var ProposalSafePayloadKeyPattern = `^(?!(?:${proposalForbiddenKeyVariants().map(escapeRegExp).join("|")})$).+$`;
1909
+ var ProposalForbiddenContentPattern = "sk-[A-Za-z0-9_-]{8,}|ghp_[A-Za-z0-9_]+|glpat-[A-Za-z0-9_-]+|\\bBearer\\s+[A-Za-z0-9._~+/=-]+|eyJ[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+|[dD][iI][fF][fF]\\s+--git|[rR][aA][wW]\\s+(?:[tT][eE][rR][mM][iI][nN][aA][lL]\\s+)?[lL][oO][gG]s?|[tT][eE][rR][mM][iI][nN][aA][lL]\\s+[oO][uU][tT][pP][uU][tT]|[rR][aA][wW]\\s+[tT][rR][aA][nN][sS][cC][rR][iI][pP][tT]s?|[sS][oO][uU][rR][cC][eE]\\s+[cC][oO][dD][eE]|[fF][iI][lL][eE]\\s+[cC][oO][nN][tT][eE][nN][tT]";
1910
+ var ProposalSafeStringPattern = `^(?!.*(?:${ProposalForbiddenContentPattern})).*$`;
1911
+ var ProposalStatus = Schema11.Literals(ProposalStatuses);
1912
+ var ProposalTargetType = Schema11.Literals(ProposalTargetTypes);
1913
+ var ProposalRiskLevel = Schema11.Literals(ProposalRiskLevels);
1914
+ var ProposalApprovalPolicyMode = Schema11.Literals(ProposalApprovalPolicyModes);
1915
+ var ProposalPolicyViolationCode = Schema11.Literals(ProposalPolicyViolationCodes);
1916
+ var ProposalPolicyViolationSeverity = Schema11.Literals(ProposalPolicyViolationSeverities);
1917
+ var ProposalCheckKind = Schema11.Literals(ProposalCheckKinds);
1918
+ var ProposalCheckStatus = Schema11.Literals(ProposalCheckStatuses);
1919
+ var ProposalApplicationAction = Schema11.Literals(ProposalApplicationActions);
1920
+ var ProposalRenderedDiffFormat = Schema11.Literals(ProposalRenderedDiffFormats);
1921
+ var ProposalRenderedDiffSectionRisk = Schema11.Literals(ProposalRenderedDiffSectionRisks);
1922
+ var ProposalRenderedDiffRefKind = Schema11.Literals(ProposalRenderedDiffRefKinds);
1923
+ var ProposalSafeString = Schema11.String.check(Schema11.isMaxLength(4000), Schema11.isPattern(new RegExp(ProposalSafeStringPattern, "u")));
1924
+ var ProposalSafeMetadataScalar = Schema11.Union([ProposalSafeString, Schema11.Finite, Schema11.Boolean, Schema11.Null]);
1925
+ var ProposalSafeMetadataValue = Schema11.Union([
1926
+ ProposalSafeMetadataScalar,
1927
+ Schema11.Array(ProposalSafeMetadataScalar).check(Schema11.isMaxLength(100))
1928
+ ]);
1929
+ var ProposalSafeMetadata = Schema11.Record(Schema11.String.check(Schema11.isMinLength(1), Schema11.isPattern(new RegExp(ProposalSafePayloadKeyPattern, "u"))), ProposalSafeMetadataValue);
1930
+ var ProposalPayload = Schema11.Struct({
1931
+ memory: Schema11.optionalKey(ProposalSafeMetadata),
1932
+ kit: Schema11.optionalKey(ProposalSafeMetadata),
1933
+ kit_source: Schema11.optionalKey(ProposalSafeMetadata),
1934
+ kit_version: Schema11.optionalKey(ProposalSafeMetadata),
1935
+ kit_installation: Schema11.optionalKey(ProposalSafeMetadata),
1936
+ kit_activation: Schema11.optionalKey(ProposalSafeMetadata),
1937
+ kit_trust_policy: Schema11.optionalKey(ProposalSafeMetadata),
1938
+ agent_environment_policy: Schema11.optionalKey(ProposalSafeMetadata),
1939
+ decision: Schema11.optionalKey(ProposalSafeMetadata),
1940
+ task: Schema11.optionalKey(ProposalSafeMetadata),
1941
+ project_context: Schema11.optionalKey(ProposalSafeMetadata),
1942
+ context_relevance: Schema11.optionalKey(ProposalSafeMetadata)
1943
+ });
1944
+ var ProposalTargetRef = Schema11.Struct({
1945
+ type: ProposalTargetType,
1946
+ id: Schema11.optionalKey(Id),
1947
+ scopeType: Schema11.optionalKey(Schema11.Union([
1948
+ Schema11.Literal("workspace"),
1949
+ Schema11.Literal("project"),
1950
+ Schema11.Literal("task"),
1951
+ Schema11.Literal("kit")
1952
+ ])),
1953
+ scopeId: Schema11.optionalKey(Id)
1954
+ });
1955
+ var ProposalApprovalPolicy = Schema11.Struct({
1956
+ mode: ProposalApprovalPolicyMode,
1957
+ requireDifferentApprover: Schema11.optionalKey(Schema11.Boolean),
1958
+ autonomousAgentApprovalAllowed: Schema11.Literal(false),
1959
+ deniedViolationCodes: Schema11.Array(ProposalPolicyViolationCode)
1960
+ });
1961
+ var ProposalPolicyViolation = Schema11.Struct({
1962
+ code: ProposalPolicyViolationCode,
1963
+ severity: ProposalPolicyViolationSeverity,
1964
+ message: ProposalSafeString,
1965
+ actorId: Schema11.optionalKey(Id),
1966
+ target: Schema11.optionalKey(ProposalTargetRef),
1967
+ metadata: Schema11.optionalKey(ProposalSafeMetadata)
1968
+ });
1969
+ var ProposalRenderedDiffRef = Schema11.Struct({
1970
+ kind: ProposalRenderedDiffRefKind,
1971
+ id: Schema11.optionalKey(Id),
1972
+ externalId: Schema11.optionalKey(Schema11.String.check(Schema11.isMinLength(1))),
1973
+ url: Schema11.optionalKey(Schema11.String.check(Schema11.isMinLength(1))),
1974
+ title: Schema11.optionalKey(Schema11.String.check(Schema11.isMinLength(1), Schema11.isMaxLength(240)))
1975
+ });
1976
+ var ProposalRenderedDiffSection = Schema11.Struct({
1977
+ title: Schema11.String.check(Schema11.isMinLength(1), Schema11.isMaxLength(240), Schema11.isPattern(new RegExp(ProposalSafeStringPattern, "u"))),
1978
+ beforeSummary: Schema11.optionalKey(ProposalSafeString),
1979
+ afterSummary: Schema11.optionalKey(ProposalSafeString),
1980
+ risk: ProposalRenderedDiffSectionRisk
1981
+ });
1982
+ var ProposalRenderedDiff = Schema11.Struct({
1983
+ format: ProposalRenderedDiffFormat,
1984
+ title: Schema11.String.check(Schema11.isMinLength(1), Schema11.isMaxLength(240), Schema11.isPattern(new RegExp(ProposalSafeStringPattern, "u"))),
1985
+ summary: ProposalSafeString,
1986
+ sections: Schema11.Array(ProposalRenderedDiffSection),
1987
+ refs: Schema11.Array(ProposalRenderedDiffRef)
1988
+ });
1989
+ var ProposalRiskSummary = Schema11.Struct({
1990
+ level: ProposalRiskLevel,
1991
+ summary: ProposalSafeString,
1992
+ reasons: Schema11.Array(ProposalSafeString)
1993
+ });
1994
+ var KitMarketplaceProposalAction = Schema11.Literals(KitMarketplaceProposalActions);
1995
+ var KitMarketplaceProposalReview = Schema11.Struct({
1996
+ action: KitMarketplaceProposalAction,
1997
+ target: ProposalTargetRef,
1998
+ payload: ProposalPayload,
1999
+ renderedDiff: ProposalRenderedDiff,
2000
+ riskSummary: ProposalRiskSummary,
2001
+ validationFindings: Schema11.Array(ProposalPolicyViolation),
2002
+ approvalPolicy: ProposalApprovalPolicy
2003
+ });
2004
+ var Proposal = Schema11.Struct({
2005
+ id: Id,
2006
+ workspaceId: Id,
2007
+ projectId: Schema11.optionalKey(Id),
2008
+ taskId: Schema11.optionalKey(Id),
2009
+ target: ProposalTargetRef,
2010
+ title: Schema11.String.check(Schema11.isMinLength(1), Schema11.isMaxLength(240), Schema11.isPattern(new RegExp(ProposalSafeStringPattern, "u"))),
2011
+ summary: ProposalSafeString,
2012
+ status: ProposalStatus,
2013
+ riskLevel: ProposalRiskLevel,
2014
+ approvalPolicy: ProposalApprovalPolicy,
2015
+ proposedByActorType: ActorType,
2016
+ proposedByActorId: Id,
2017
+ delegatedByUserId: Schema11.optionalKey(Id),
2018
+ createdAt: Timestamp,
2019
+ updatedAt: Timestamp
2020
+ });
2021
+ var ProposalRevision = Schema11.Struct({
2022
+ id: Id,
2023
+ proposalId: Id,
2024
+ revisionNumber: Schema11.Int.check(Schema11.isGreaterThanOrEqualTo(1)),
2025
+ payload: ProposalPayload,
2026
+ renderedDiff: ProposalRenderedDiff,
2027
+ riskSummary: ProposalRiskSummary,
2028
+ createdByActorType: ActorType,
2029
+ createdByActorId: Id,
2030
+ createdAt: Timestamp
2031
+ });
2032
+ var ProposalCommentAnchor = Schema11.Struct({
2033
+ path: Schema11.Array(Schema11.String.check(Schema11.isMinLength(1), Schema11.isPattern(new RegExp(ProposalSafePayloadKeyPattern, "u")))),
2034
+ label: Schema11.optionalKey(Schema11.String.check(Schema11.isMinLength(1), Schema11.isMaxLength(120), Schema11.isPattern(new RegExp(ProposalSafeStringPattern, "u"))))
2035
+ });
2036
+ var ProposalComment = Schema11.Struct({
2037
+ id: Id,
2038
+ proposalId: Id,
2039
+ revisionId: Schema11.optionalKey(Id),
2040
+ body: ProposalSafeString,
2041
+ anchor: Schema11.optionalKey(ProposalCommentAnchor),
2042
+ actorType: ActorType,
2043
+ actorId: Id,
2044
+ delegatedByUserId: Schema11.optionalKey(Id),
2045
+ createdAt: Timestamp
2046
+ });
2047
+ var ProposalCheck = Schema11.Struct({
2048
+ id: Id,
2049
+ proposalId: Id,
2050
+ revisionId: Schema11.optionalKey(Id),
2051
+ kind: ProposalCheckKind,
2052
+ status: ProposalCheckStatus,
2053
+ summary: ProposalSafeString,
2054
+ details: Schema11.optionalKey(ProposalSafeMetadata),
2055
+ createdAt: Timestamp
2056
+ });
2057
+ var ProposalApplication = Schema11.Struct({
2058
+ id: Id,
2059
+ proposalId: Id,
2060
+ revisionId: Id,
2061
+ action: ProposalApplicationAction,
2062
+ target: ProposalTargetRef,
2063
+ appliedByActorType: ActorType,
2064
+ appliedByActorId: Id,
2065
+ targetVersionBefore: Schema11.optionalKey(Schema11.String.check(Schema11.isMinLength(1), Schema11.isMaxLength(240), Schema11.isPattern(new RegExp(ProposalSafeStringPattern, "u")))),
2066
+ targetVersionAfter: Schema11.optionalKey(Schema11.String.check(Schema11.isMinLength(1), Schema11.isMaxLength(240), Schema11.isPattern(new RegExp(ProposalSafeStringPattern, "u")))),
2067
+ rollbackRef: Schema11.optionalKey(Schema11.String.check(Schema11.isMinLength(1), Schema11.isMaxLength(240), Schema11.isPattern(new RegExp(ProposalSafeStringPattern, "u")))),
2068
+ appliedAt: Timestamp
2069
+ });
2070
+ function proposalForbiddenKeyVariants() {
2071
+ return ForbiddenProposalNormalizedKeys.flatMap((key) => {
2072
+ const camel = key.replace(/_([a-z])/g, (_match, letter) => letter.toUpperCase());
2073
+ const kebab = key.replaceAll("_", "-");
2074
+ return [key, camel, kebab];
2075
+ });
2076
+ }
2077
+ function escapeRegExp(value) {
2078
+ return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
2079
+ }
2080
+
2081
+ // packages/core/src/loop.ts
2082
+ var LoopStatuses = ["draft", "active", "disabled", "archived"];
2083
+ var LoopStepImplementationKinds = [
2084
+ "built_in_action",
2085
+ "agent",
2086
+ "wait_for_event",
2087
+ "human_approval",
2088
+ "runner_sandbox",
2089
+ "package_ref",
2090
+ "repeat_until",
2091
+ "call_loop"
2092
+ ];
2093
+ var RunStatuses = ["pending", "running", "blocked", "completed", "failed", "canceled", "expired"];
2094
+ var RunStepStatuses = [
2095
+ "pending",
2096
+ "running",
2097
+ "waiting",
2098
+ "blocked",
2099
+ "completed",
2100
+ "failed",
2101
+ "skipped",
2102
+ "canceled"
2103
+ ];
2104
+ var StepAttemptStatuses = [
2105
+ "pending",
2106
+ "running",
2107
+ "waiting",
2108
+ "blocked",
2109
+ "completed",
2110
+ "failed",
2111
+ "canceled"
2112
+ ];
2113
+ var QuestionStatuses = [
2114
+ "open",
2115
+ "answered",
2116
+ "resume_requested",
2117
+ "resumed",
2118
+ "resume_failed",
2119
+ "expired",
2120
+ "cancelled"
2121
+ ];
2122
+ var LoopGuardSources = [
2123
+ "trigger_event",
2124
+ "task",
2125
+ "project",
2126
+ "proposal",
2127
+ "decision",
2128
+ "step_attempt",
2129
+ "change_request",
2130
+ "context_feedback",
2131
+ "run",
2132
+ "project_policy"
2133
+ ];
2134
+ var LoopSourceModes = ["direct", "git_backed"];
2135
+ var LoopGuardOperators = ["equals", "not_equals", "in", "not_in", "exists", "not_exists"];
2136
+ var LoopCapabilityScopeKinds = [
2137
+ "workspace",
2138
+ "project",
2139
+ "task",
2140
+ "change_request",
2141
+ "step_attempt",
2142
+ "run",
2143
+ "repo_binding",
2144
+ "provider_host"
2145
+ ];
2146
+ var LoopRetryBackoffKinds = ["none", "fixed", "exponential"];
2147
+ var LoopRequiredRunStepStatuses = [
2148
+ "pending",
2149
+ "running",
2150
+ "waiting",
2151
+ "blocked",
2152
+ "completed",
2153
+ "failed",
2154
+ "canceled"
2155
+ ];
2156
+ var LoopSafeRefKinds = [
2157
+ "task",
2158
+ "kit",
2159
+ "memory",
2160
+ "decision",
2161
+ "knowledge_record",
2162
+ "context_pack",
2163
+ "step_attempt",
2164
+ "change_request",
2165
+ "change_request_review",
2166
+ "provider_action",
2167
+ "thread_entry",
2168
+ "run",
2169
+ "artifact"
2170
+ ];
2171
+ var LoopBaseCapabilityKinds = [
2172
+ "read_task",
2173
+ "read_repo_binding",
2174
+ "read_agent_environment",
2175
+ "read_kit",
2176
+ "update_task_status",
2177
+ "read_change_request",
2178
+ "read_change_request_review",
2179
+ "read_task_link",
2180
+ "refresh_change_request_metadata",
2181
+ "record_change_request_review",
2182
+ "record_session_update",
2183
+ "create_task_link",
2184
+ "create_task_dependency",
2185
+ "create_task_asset",
2186
+ "create_follow_up_task",
2187
+ "execute_agent",
2188
+ "read_step_attempt",
2189
+ "record_task_thread_entry",
2190
+ "write_provider_repository",
2191
+ "write_provider_change_request",
2192
+ "publish_provider_check",
2193
+ "write_provider_comment",
2194
+ "request_provider_changes",
2195
+ "approve_provider_change_request",
2196
+ "merge_provider_change_request",
2197
+ "wait_for_event",
2198
+ "request_human_approval",
2199
+ "execute_package_ref"
2200
+ ];
2201
+ var LoopCapabilityKinds = [
2202
+ ...LoopBaseCapabilityKinds,
2203
+ "read_context_feedback",
2204
+ "read_session_update",
2205
+ "read_repo_binding",
2206
+ "read_agent_environment",
2207
+ "read_kit",
2208
+ "read_memory",
2209
+ "read_decision",
2210
+ "create_task_dependency",
2211
+ "propose_memory",
2212
+ "propose_kit",
2213
+ "propose_decision",
2214
+ "propose_agent_environment_policy",
2215
+ "propose_project_context",
2216
+ "propose_context_relevance",
2217
+ "execute_runner_sandbox"
2218
+ ];
2219
+ var LoopStatus = Schema12.Literals(LoopStatuses);
2220
+ var LoopTriggerEvent = Schema12.String.check(Schema12.isMinLength(3), Schema12.isMaxLength(160), Schema12.isPattern(new RegExp("^[a-z][a-z0-9]*(?:[._-][a-z0-9]+)+$", "u")));
2221
+ var LoopStepImplementationKind = Schema12.Literals(LoopStepImplementationKinds);
2222
+ var RunStatus = Schema12.Literals(RunStatuses);
2223
+ var RunStepStatus = Schema12.Literals(RunStepStatuses);
2224
+ var StepAttemptStatus = Schema12.Literals(StepAttemptStatuses);
2225
+ var QuestionStatus = Schema12.Literals(QuestionStatuses);
2226
+ var LoopGuardSource = Schema12.Literals(LoopGuardSources);
2227
+ var LoopSourceMode = Schema12.Literals(LoopSourceModes);
2228
+ var LoopCapabilityKind = Schema12.Literals(LoopCapabilityKinds);
2229
+ var LoopGuardOperator = Schema12.Literals(LoopGuardOperators);
2230
+ var LoopCapabilityScopeKind = Schema12.Literals(LoopCapabilityScopeKinds);
2231
+ var LoopRetryBackoffKind = Schema12.Literals(LoopRetryBackoffKinds);
2232
+ var LoopRequiredRunStepStatus = Schema12.Literals(LoopRequiredRunStepStatuses);
2233
+ var LoopSafeRefKind = Schema12.Literals(LoopSafeRefKinds);
2234
+ var LoopSha256 = Schema12.String.check(Schema12.isPattern(new RegExp("^[a-fA-F0-9]{64}$", "u")));
2235
+ var LoopGitCommitSha = Schema12.String.check(Schema12.isPattern(new RegExp("^[a-fA-F0-9]{40}$|^[a-fA-F0-9]{64}$", "u")));
2236
+ var LoopReferenceForbiddenContentPattern = "(?:^|[^A-Za-z0-9])sk-[A-Za-z0-9_-]{16,}|ghp_[A-Za-z0-9_]+|github_pat_[A-Za-z0-9_]+|glpat-[A-Za-z0-9_-]+|\\b[Bb][Ee][Aa][Rr][Ee][Rr]\\s+[A-Za-z0-9._~+/=-]+|eyJ[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+|[dD][iI][fF][fF]\\s+--git|[rR][aA][wW]\\s+(?:[tT][eE][rR][mM][iI][nN][aA][lL]\\s+)?[lL][oO][gG]s?|[tT][eE][rR][mM][iI][nN][aA][lL]\\s+[oO][uU][tT][pP][uU][tT]|[rR][aA][wW]\\s+[tT][rR][aA][nN][sS][cC][rR][iI][pP][tT]s?|[sS][oO][uU][rR][cC][eE]\\s+[cC][oO][dD][eE]|[fF][iI][lL][eE]\\s+[cC][oO][nN][tT][eE][nN][tT]";
2237
+ var LoopReferenceAndUrlForbiddenContentPattern = `${LoopReferenceForbiddenContentPattern}|[A-Za-z][A-Za-z0-9+.-]*://\\S+`;
2238
+ var LoopSafeReferencePattern = `^(?!.*(?:${LoopReferenceAndUrlForbiddenContentPattern})).*$`;
2239
+ var LoopScopeValueForbiddenContentPattern = LoopReferenceAndUrlForbiddenContentPattern;
2240
+ var LoopSafeScopeValuePattern = `^(?!.*(?:${LoopScopeValueForbiddenContentPattern})).*$`;
2241
+ var LoopSafeInternalReferencePattern = `^(?!.*(?:${LoopScopeValueForbiddenContentPattern})).*$`;
2242
+ var LoopForbiddenDataflowKeys = [
2243
+ "raw_code",
2244
+ "source_code",
2245
+ "raw_source",
2246
+ "source_snapshot",
2247
+ "source_archive",
2248
+ "file_content",
2249
+ "raw_diff",
2250
+ "diff",
2251
+ "patch",
2252
+ "raw_patch",
2253
+ "raw_log",
2254
+ "raw_logs",
2255
+ "terminal_log",
2256
+ "raw_terminal_log",
2257
+ "stdout",
2258
+ "stderr",
2259
+ "raw_stdout",
2260
+ "raw_stderr",
2261
+ "transcript",
2262
+ "raw_transcript",
2263
+ "raw_provider_payload",
2264
+ "provider_payload",
2265
+ "provider_webhook_payload",
2266
+ "raw_webhook",
2267
+ "provider_comment_body",
2268
+ "comment_body",
2269
+ "raw_comment",
2270
+ "raw_comments",
2271
+ "token",
2272
+ "access_token",
2273
+ "refresh_token",
2274
+ "password",
2275
+ "private_key",
2276
+ "secret",
2277
+ "secret_value",
2278
+ "client_secret",
2279
+ "api_key",
2280
+ "credential",
2281
+ "credentials",
2282
+ "credential_value",
2283
+ "resolved_value",
2284
+ "authorization",
2285
+ "cookie",
2286
+ "durable_asset_url",
2287
+ "asset_url",
2288
+ "download_url",
2289
+ "upload_url",
2290
+ "presigned_url",
2291
+ "signed_url",
2292
+ "database_url",
2293
+ "connection_string",
2294
+ "postgres_url",
2295
+ "redis_url",
2296
+ "dsn"
2297
+ ];
2298
+ var LoopForbiddenDataflowKeyPattern = LoopForbiddenDataflowKeys.map(loopForbiddenKeyPattern).join("|");
2299
+ var LoopForbiddenDataflowKeyRegExp = new RegExp(LoopForbiddenDataflowKeyPattern);
2300
+ var LoopForbiddenContentRegExp = new RegExp(LoopReferenceAndUrlForbiddenContentPattern);
2301
+ var LoopSafeReferenceString = Schema12.String.check(Schema12.isMinLength(1), Schema12.isMaxLength(240), Schema12.isPattern(new RegExp(LoopSafeReferencePattern, "u")));
2302
+ var LoopSafeInternalReferenceString = Schema12.String.check(Schema12.isMinLength(1), Schema12.isMaxLength(240), Schema12.isPattern(new RegExp(LoopSafeInternalReferencePattern, "u")));
2303
+ var LoopSafeText = Schema12.String.check(Schema12.isMaxLength(4000), Schema12.isPattern(new RegExp(LoopSafeReferencePattern, "u")));
2304
+ var LoopSafeOutputDataString = Schema12.String.check(Schema12.isMaxLength(4000), Schema12.isPattern(new RegExp(LoopSafeInternalReferencePattern, "u")));
2305
+ var LoopSafePackageName = Schema12.String.check(Schema12.isMinLength(1), Schema12.isMaxLength(200), Schema12.isPattern(new RegExp(LoopSafeReferencePattern, "u")));
2306
+ var LoopSafeScopeValue = Schema12.String.check(Schema12.isMinLength(1), Schema12.isMaxLength(240), Schema12.isPattern(new RegExp(LoopSafeScopeValuePattern, "u")));
2307
+ var LoopSafeKey = Schema12.String.check(Schema12.isMinLength(1), Schema12.isMaxLength(120), Schema12.isPattern(new RegExp(`^(?!.*(?:${LoopForbiddenDataflowKeyPattern}))(?!.*(?:${LoopReferenceForbiddenContentPattern}))[A-Za-z0-9][A-Za-z0-9_-]*$`, "u")));
2308
+ var LoopDataflowKey = Schema12.String.check(Schema12.isMinLength(1), Schema12.isMaxLength(120), Schema12.isPattern(new RegExp(`^(?!.*(?:${LoopForbiddenDataflowKeyPattern}))(?!.*(?:${LoopReferenceForbiddenContentPattern}))[A-Za-z][A-Za-z0-9]*(?:[_-][A-Za-z0-9]+)*$`, "u")));
2309
+ var LoopDataPathSegment = Schema12.String.check(Schema12.isMinLength(1), Schema12.isMaxLength(120), Schema12.isPattern(new RegExp(`^(?!.*(?:${LoopForbiddenDataflowKeyPattern}))(?!.*(?:${LoopReferenceForbiddenContentPattern}))[A-Za-z_][A-Za-z0-9_-]*$`, "u")));
2310
+ var LoopGitRef = Schema12.String.check(Schema12.isMinLength(1), Schema12.isMaxLength(240), Schema12.isPattern(new RegExp(`^(?!.*(?:${LoopReferenceForbiddenContentPattern}))(?!@$)(?!.*\\.\\.)(?!.*@\\{)(?!.*//)(?!.*[\\s~^:?*\\[\\\\])(?!.*(?:^|/)\\.)(?!.*(?:^|/)\\.\\.?(?:/|$))(?!.*\\.lock(?:/|$))(?!.*/$)(?!.*\\.$)[A-Za-z0-9][A-Za-z0-9._/-]*$`, "u")));
2311
+ var LoopBundleRef = Schema12.String.check(Schema12.isMinLength(1), Schema12.isMaxLength(500), Schema12.isPattern(new RegExp(`^(?!.*(?:${LoopReferenceAndUrlForbiddenContentPattern}))(?!/)(?!.*:)(?!.*\\\\)(?!.*//)(?!.*(?:^|/)\\.\\.?($|/))(?!.*\\s).+$`, "u")));
2312
+ var LoopSourcePath = Schema12.String.check(Schema12.isMinLength(1), Schema12.isMaxLength(500), Schema12.isPattern(new RegExp(`^(?!.*(?:${LoopReferenceForbiddenContentPattern}))(?!/)(?!.*:)(?!.*\\\\)(?!.*//)(?!.*(?:^|/)\\.\\.?($|/))(?!.*\\s).+$`, "u")));
2313
+ function loopForbiddenKeyPattern(key) {
2314
+ const words = key.split(/[_-]+/).filter(Boolean);
2315
+ const separated = words.map((word) => loopCaseInsensitiveWordPattern(word)).join("[_-]+");
2316
+ const camel = words.map((word, index) => index === 0 ? loopCaseInsensitiveWordPattern(word) : loopCaseInsensitiveWordPattern(word, true)).join("");
2317
+ return `(?:(?:^|[_-])${separated}(?=$|[_-])|(?:^|[_-]|(?<=[a-z0-9])(?=[A-Z]))${camel}(?=$|[_-]|[A-Z]))`;
2318
+ }
2319
+ function loopCaseInsensitiveWordPattern(word, uppercaseFirst = false) {
2320
+ return Array.from(word).map((char, index) => {
2321
+ const lower = char.toLowerCase();
2322
+ const upper = char.toUpperCase();
2323
+ if (uppercaseFirst && index === 0)
2324
+ return `[${upper}${lower}]`;
2325
+ if (lower !== upper)
2326
+ return `[${lower}${upper}]`;
2327
+ return char.replace(/[\\^$.*+?()[\]{}|]/g, "\\$&");
2328
+ }).join("");
2329
+ }
2330
+ var LoopDataSchemaRef = Schema12.Struct({
2331
+ kind: Schema12.Literal("typebox_ref"),
2332
+ name: LoopSafeReferenceString,
2333
+ version: Schema12.optionalKey(Schema12.String.check(Schema12.isMinLength(1), Schema12.isMaxLength(120), Schema12.isPattern(new RegExp(LoopSafeReferencePattern, "u")))),
2334
+ sha256: Schema12.optionalKey(LoopSha256)
2335
+ });
2336
+ var LoopStepOutputDataValue = Schema12.Union([
2337
+ LoopSafeOutputDataString,
2338
+ Schema12.Finite,
2339
+ Schema12.Boolean,
2340
+ Schema12.Null,
2341
+ Schema12.Array(Schema12.suspend(() => LoopStepOutputDataValue)).check(Schema12.isMaxLength(200)),
2342
+ Schema12.Record(LoopDataPathSegment, Schema12.suspend(() => LoopStepOutputDataValue)).check(Schema12.isMaxProperties(200))
2343
+ ]).annotate({ identifier: "LoopStepOutputDataValue" });
2344
+ var LoopSafeMetadata = Schema12.Record(LoopDataPathSegment, LoopStepOutputDataValue);
2345
+ var LoopGuardValue = Schema12.Union([LoopSafeOutputDataString, Schema12.Finite, Schema12.Boolean]);
2346
+ var LoopSafeRef = Schema12.Struct({
2347
+ kind: LoopSafeRefKind,
2348
+ id: Schema12.optionalKey(LoopSafeInternalReferenceString),
2349
+ externalId: Schema12.optionalKey(LoopSafeInternalReferenceString),
2350
+ provider: Schema12.optionalKey(LoopSafeInternalReferenceString),
2351
+ title: Schema12.optionalKey(LoopSafeInternalReferenceString)
2352
+ });
2353
+ var LoopGuard = Schema12.Struct({
2354
+ key: LoopSafeKey,
2355
+ source: LoopGuardSource,
2356
+ path: Schema12.Array(LoopDataPathSegment).check(Schema12.isMinLength(1)),
2357
+ operator: LoopGuardOperator,
2358
+ value: Schema12.optionalKey(LoopGuardValue),
2359
+ values: Schema12.optionalKey(Schema12.Array(LoopGuardValue).check(Schema12.isMinLength(1)))
2360
+ });
2361
+ var LoopCapabilityScope = Schema12.Struct({
2362
+ kind: LoopCapabilityScopeKind,
2363
+ id: Schema12.optionalKey(Id),
2364
+ idRef: Schema12.optionalKey(LoopSafeReferenceString),
2365
+ value: Schema12.optionalKey(LoopSafeScopeValue)
2366
+ });
2367
+ var LoopCapabilityGrant = Schema12.Struct({
2368
+ capability: LoopCapabilityKind,
2369
+ scope: Schema12.optionalKey(LoopCapabilityScope),
2370
+ reason: Schema12.optionalKey(LoopSafeText)
2371
+ });
2372
+ var LoopRequiredContextSlice = Schema12.Struct({
2373
+ kind: ContextPackRetrievalRefKind,
2374
+ id: Schema12.optionalKey(Id),
2375
+ idRef: Schema12.optionalKey(LoopSafeReferenceString),
2376
+ reason: LoopSafeText,
2377
+ required: Schema12.Boolean.pipe(Schema12.withDecodingDefaultKey(Effect.succeed(true)))
2378
+ });
2379
+ var LoopRetryPolicy = Schema12.Struct({
2380
+ maxAttempts: Schema12.Int.check(Schema12.isGreaterThanOrEqualTo(1), Schema12.isLessThanOrEqualTo(20)),
2381
+ backoff: LoopRetryBackoffKind,
2382
+ delaySeconds: Schema12.optionalKey(Schema12.Int.check(Schema12.isGreaterThanOrEqualTo(1), Schema12.isLessThanOrEqualTo(86400)))
2383
+ });
2384
+ var LoopTimeoutPolicy = Schema12.Struct({
2385
+ timeoutSeconds: Schema12.Int.check(Schema12.isGreaterThanOrEqualTo(1), Schema12.isLessThanOrEqualTo(604800))
2386
+ });
2387
+ var LoopDirectSource = Schema12.Struct({
2388
+ mode: Schema12.Literal("direct"),
2389
+ registeredFrom: Schema12.optionalKey(Schema12.Union([Schema12.Literal("api"), Schema12.Literal("cli"), Schema12.Literal("mcp"), Schema12.Literal("import")])),
2390
+ bundleRef: Schema12.optionalKey(LoopBundleRef),
2391
+ bundleSha256: Schema12.optionalKey(LoopSha256),
2392
+ metadata: Schema12.optionalKey(LoopSafeMetadata)
2393
+ });
2394
+ var LoopGitBackedSource = Schema12.Struct({
2395
+ mode: Schema12.Literal("git_backed"),
2396
+ repoBindingId: Id,
2397
+ gitRef: LoopGitRef,
2398
+ commitSha: LoopGitCommitSha,
2399
+ definitionPath: Schema12.optionalKey(LoopSourcePath),
2400
+ packagePath: Schema12.optionalKey(LoopSourcePath),
2401
+ metadata: Schema12.optionalKey(LoopSafeMetadata)
2402
+ });
2403
+ var LoopSource = Schema12.Union([LoopDirectSource, LoopGitBackedSource]);
2404
+ var LoopStepPackageMetadata = Schema12.Struct({
2405
+ packageName: LoopSafePackageName,
2406
+ version: Schema12.optionalKey(Schema12.String.check(Schema12.isMinLength(1), Schema12.isMaxLength(120), Schema12.isPattern(new RegExp(LoopSafeReferencePattern, "u")))),
2407
+ entrypoint: LoopSafeReferenceString,
2408
+ source: LoopSource,
2409
+ runtime: Schema12.optionalKey(Schema12.String.check(Schema12.isMinLength(1), Schema12.isMaxLength(120), Schema12.isPattern(new RegExp(LoopSafeReferencePattern, "u")))),
2410
+ integritySha256: Schema12.optionalKey(LoopSha256),
2411
+ metadata: Schema12.optionalKey(LoopSafeMetadata)
2412
+ });
2413
+ var LoopStepInputBindingFields = {
2414
+ key: LoopDataflowKey,
2415
+ required: Schema12.optionalKey(Schema12.Boolean)
2416
+ };
2417
+ var LoopStepInputBinding = Schema12.Union([
2418
+ Schema12.Struct({
2419
+ ...LoopStepInputBindingFields,
2420
+ source: Schema12.Literal("trigger_event"),
2421
+ path: Schema12.Array(LoopDataPathSegment).check(Schema12.isMinLength(1))
2422
+ }),
2423
+ Schema12.Struct({
2424
+ ...LoopStepInputBindingFields,
2425
+ source: Schema12.Literal("subject"),
2426
+ path: Schema12.Array(LoopDataPathSegment).check(Schema12.isMinLength(1))
2427
+ }),
2428
+ Schema12.Struct({
2429
+ ...LoopStepInputBindingFields,
2430
+ source: Schema12.Literal("context"),
2431
+ path: Schema12.Array(LoopDataPathSegment).check(Schema12.isMinLength(1))
2432
+ }),
2433
+ Schema12.Struct({
2434
+ ...LoopStepInputBindingFields,
2435
+ source: Schema12.Literal("step_output"),
2436
+ stepKey: LoopSafeKey,
2437
+ outputKey: LoopDataflowKey,
2438
+ path: Schema12.optionalKey(Schema12.Array(LoopDataPathSegment).check(Schema12.isMinLength(1)))
2439
+ }),
2440
+ Schema12.Struct({
2441
+ ...LoopStepInputBindingFields,
2442
+ source: Schema12.Literal("run"),
2443
+ path: Schema12.Array(LoopDataPathSegment).check(Schema12.isMinLength(1))
2444
+ }),
2445
+ Schema12.Struct({
2446
+ ...LoopStepInputBindingFields,
2447
+ source: Schema12.Literal("literal"),
2448
+ value: LoopStepOutputDataValue
2449
+ })
2450
+ ]);
2451
+ var LoopStepOutputRef = Schema12.Struct({
2452
+ key: LoopDataflowKey,
2453
+ schemaRef: Schema12.optionalKey(LoopDataSchemaRef),
2454
+ path: Schema12.optionalKey(Schema12.Array(LoopDataPathSegment).check(Schema12.isMinLength(1))),
2455
+ required: Schema12.optionalKey(Schema12.Boolean)
2456
+ });
2457
+ var LoopBuiltInActionStepImplementation = Schema12.Struct({
2458
+ kind: Schema12.Literal("built_in_action"),
2459
+ action: LoopSafeReferenceString,
2460
+ input: Schema12.optionalKey(LoopSafeMetadata)
2461
+ });
2462
+ var LoopAgentRuntimeComponentSelector = Schema12.Struct({
2463
+ implementation: LoopSafeReferenceString,
2464
+ kind: Schema12.Union([Schema12.Literal("preferred"), Schema12.Literal("required")])
2465
+ });
2466
+ var LoopAgentStepImplementation = Schema12.Struct({
2467
+ kind: Schema12.Literal("agent"),
2468
+ taskIdRef: LoopSafeReferenceString,
2469
+ agentId: Id,
2470
+ agentRef: Schema12.optionalKey(AgentReference),
2471
+ runtimeKind: Schema12.optionalKey(LoopSafeReferenceString),
2472
+ harness: Schema12.optionalKey(LoopAgentRuntimeComponentSelector),
2473
+ sandbox: Schema12.optionalKey(LoopAgentRuntimeComponentSelector),
2474
+ models: Schema12.optionalKey(Schema12.Array(AgentModelSelector).check(Schema12.isMinLength(1), Schema12.isMaxLength(20))),
2475
+ extensions: Schema12.optionalKey(Schema12.Array(NativeExtensionRef).check(Schema12.isMaxLength(20)))
2476
+ });
2477
+ var LoopWaitForEventStepImplementation = Schema12.Struct({
2478
+ kind: Schema12.Literal("wait_for_event"),
2479
+ event: LoopTriggerEvent,
2480
+ anyOf: Schema12.optionalKey(Schema12.Array(LoopTriggerEvent).check(Schema12.isMinLength(1))),
2481
+ correlationPath: Schema12.Array(LoopDataPathSegment).check(Schema12.isMinLength(1)),
2482
+ authPolicy: Schema12.optionalKey(Schema12.Struct({
2483
+ mode: Schema12.Union([Schema12.Literal("trusted_source"), Schema12.Literal("actor")]),
2484
+ capability: Schema12.optionalKey(LoopSafeReferenceString)
2485
+ })),
2486
+ cancellation: Schema12.optionalKey(Schema12.Union([Schema12.Literal("cancel"), Schema12.Literal("timeout")])),
2487
+ releaseRunner: Schema12.optionalKey(Schema12.Boolean)
2488
+ });
2489
+ var LoopHumanApprovalStepImplementation = Schema12.Struct({
2490
+ kind: Schema12.Literal("human_approval"),
2491
+ prompt: LoopSafeText,
2492
+ approvalPolicy: ProposalApprovalPolicy
2493
+ });
2494
+ var LoopRunnerSandboxStepImplementation = Schema12.Struct({
2495
+ kind: Schema12.Literal("runner_sandbox"),
2496
+ runnerSelector: LoopSafeMetadata,
2497
+ entrypoint: LoopSafeReferenceString,
2498
+ package: Schema12.optionalKey(LoopStepPackageMetadata)
2499
+ });
2500
+ var LoopPackageRefStepImplementation = Schema12.Struct({
2501
+ kind: Schema12.Literal("package_ref"),
2502
+ package: LoopStepPackageMetadata
2503
+ });
2504
+ var LoopCallStepImplementation = Schema12.Struct({
2505
+ kind: Schema12.Literal("call_loop"),
2506
+ loop: LoopReferenceSchema,
2507
+ mode: Schema12.Literal("awaited")
2508
+ });
2509
+ var LoopConcreteActionImplementation = Schema12.Union([
2510
+ LoopBuiltInActionStepImplementation,
2511
+ LoopAgentStepImplementation,
2512
+ LoopWaitForEventStepImplementation,
2513
+ LoopHumanApprovalStepImplementation,
2514
+ LoopRunnerSandboxStepImplementation,
2515
+ LoopPackageRefStepImplementation
2516
+ ]);
2517
+ var LoopRepeatUntilSafetyPolicy = Schema12.Struct({
2518
+ maxIterations: Schema12.Int.check(Schema12.isGreaterThanOrEqualTo(1), Schema12.isLessThanOrEqualTo(1000)),
2519
+ timeoutSeconds: Schema12.optionalKey(Schema12.Int.check(Schema12.isGreaterThanOrEqualTo(1), Schema12.isLessThanOrEqualTo(604800)))
2520
+ });
2521
+ var LoopRepeatUntilStepImplementation = Schema12.Struct({
2522
+ kind: Schema12.Literal("repeat_until"),
2523
+ body: LoopConcreteActionImplementation,
2524
+ convergenceOutput: LoopDataflowKey,
2525
+ safetyPolicy: LoopRepeatUntilSafetyPolicy
2526
+ });
2527
+ var LoopStepImplementation = Schema12.Union([
2528
+ LoopConcreteActionImplementation,
2529
+ LoopRepeatUntilStepImplementation,
2530
+ LoopCallStepImplementation
2531
+ ]);
2532
+ var LoopStep = Schema12.Struct({
2533
+ key: LoopSafeKey,
2534
+ title: LoopSafeReferenceString,
2535
+ required: Schema12.Boolean.pipe(Schema12.withDecodingDefaultKey(Effect.succeed(true))),
2536
+ dependsOn: Schema12.Array(LoopSafeKey),
2537
+ requiredContext: Schema12.Array(LoopRequiredContextSlice),
2538
+ guards: Schema12.Array(LoopGuard),
2539
+ implementation: LoopStepImplementation,
2540
+ inputSchemaRef: LoopDataSchemaRef,
2541
+ outputSchemaRef: LoopDataSchemaRef,
2542
+ inputBindings: Schema12.Array(LoopStepInputBinding),
2543
+ outputRefs: Schema12.Array(LoopStepOutputRef),
2544
+ allowedCapabilities: Schema12.Array(LoopCapabilityGrant),
2545
+ retryPolicy: LoopRetryPolicy,
2546
+ timeoutPolicy: LoopTimeoutPolicy,
2547
+ metadata: LoopSafeMetadata
2548
+ });
2549
+ var LoopStepOutput = Schema12.Struct({
2550
+ stepKey: LoopSafeKey,
2551
+ outputSchemaRef: LoopDataSchemaRef,
2552
+ summary: LoopSafeText,
2553
+ data: Schema12.Record(LoopDataflowKey, LoopStepOutputDataValue).check(Schema12.isMinProperties(1)),
2554
+ metadata: Schema12.optionalKey(LoopSafeMetadata),
2555
+ refs: Schema12.Array(LoopSafeRef)
2556
+ });
2557
+ var RunStepStateFields = {
2558
+ stepKey: Schema12.String.check(Schema12.isMinLength(1)),
2559
+ sequence: Schema12.Int.check(Schema12.isGreaterThanOrEqualTo(0)),
2560
+ attempts: Schema12.Int.check(Schema12.isGreaterThanOrEqualTo(0)),
2561
+ stepAttemptId: Schema12.optionalKey(Id),
2562
+ startedAt: Schema12.optionalKey(Timestamp),
2563
+ endedAt: Schema12.optionalKey(Timestamp),
2564
+ output: Schema12.optionalKey(LoopStepOutput),
2565
+ failureSummary: Schema12.optionalKey(LoopSafeText),
2566
+ updatedAt: Timestamp
2567
+ };
2568
+ var RunStepState = Schema12.Union([
2569
+ Schema12.Struct({
2570
+ ...RunStepStateFields,
2571
+ required: Schema12.Literal(true),
2572
+ status: LoopRequiredRunStepStatus
2573
+ }),
2574
+ Schema12.Struct({
2575
+ ...RunStepStateFields,
2576
+ required: Schema12.Literal(false),
2577
+ status: RunStepStatus
2578
+ })
2579
+ ]);
2580
+ var RunState = Schema12.Struct({
2581
+ stepStates: Schema12.Array(RunStepState),
2582
+ summary: Schema12.optionalKey(LoopSafeText),
2583
+ resultMetadata: LoopSafeMetadata
2584
+ });
2585
+ var RunTrigger = Schema12.Struct({
2586
+ event: LoopSafeReferenceString,
2587
+ eventId: Id,
2588
+ subject: Schema12.optionalKey(RunResourceRef),
2589
+ occurredAt: Timestamp,
2590
+ metadata: LoopSafeMetadata
2591
+ });
2592
+ var RunWaiting = Schema12.Union([
2593
+ Schema12.Struct({ kind: Schema12.Literal("question"), name: Schema12.String.check(Schema12.isMinLength(1)), questionId: Id }),
2594
+ Schema12.Struct({
2595
+ kind: Schema12.Literal("clock"),
2596
+ name: Schema12.String.check(Schema12.isMinLength(1)),
2597
+ firesAt: Timestamp
2598
+ }),
2599
+ Schema12.Struct({
2600
+ kind: Schema12.Literal("event"),
2601
+ name: Schema12.String.check(Schema12.isMinLength(1)),
2602
+ event: Schema12.String.check(Schema12.isMinLength(1)),
2603
+ timesOutAt: Timestamp
2604
+ }),
2605
+ Schema12.Struct({ kind: Schema12.Literal("step"), name: Schema12.String.check(Schema12.isMinLength(1)), stepAttemptId: Id }),
2606
+ Schema12.Struct({ kind: Schema12.Literal("child"), name: Schema12.String.check(Schema12.isMinLength(1)), runId: Id }),
2607
+ Schema12.Struct({
2608
+ kind: Schema12.Literal("verification"),
2609
+ name: Schema12.String.check(Schema12.isMinLength(1)),
2610
+ verificationId: Id
2611
+ })
2612
+ ]);
2613
+ var RunEvidence = Schema12.Struct({
2614
+ id: Id,
2615
+ step: Schema12.String,
2616
+ name: Schema12.String,
2617
+ command: Schema12.String,
2618
+ status: Schema12.Literals(["passed", "failed"]),
2619
+ preExisting: Schema12.Boolean,
2620
+ revision: Schema12.String,
2621
+ tree: Schema12.String,
2622
+ durationMs: Schema12.Int.check(Schema12.isGreaterThanOrEqualTo(0)),
2623
+ outputTail: Schema12.String,
2624
+ recordedAt: Timestamp
2625
+ });
2626
+ var ApprovedVerification = Schema12.Struct({
2627
+ id: Id,
2628
+ repoBindingId: Id,
2629
+ name: Schema12.String,
2630
+ command: Schema12.String,
2631
+ workingDirectory: Schema12.optionalKey(Schema12.String),
2632
+ approvedByUserId: Schema12.String,
2633
+ createdAt: Timestamp
2634
+ });
2635
+ var ApprovedVerificationList = Schema12.Struct({ items: Schema12.Array(ApprovedVerification) });
2636
+ var BundleDigest = Schema12.String.check(Schema12.isMinLength(64), Schema12.isMaxLength(64), Schema12.isPattern(new RegExp("^[a-f0-9]{64}$", "u")));
2637
+ var RunArtifact = Schema12.Struct({
2638
+ id: Id,
2639
+ runId: Id,
2640
+ projectId: Schema12.optionalKey(Id),
2641
+ taskId: Schema12.optionalKey(Id),
2642
+ step: Schema12.String,
2643
+ kind: Schema12.String,
2644
+ title: Schema12.String,
2645
+ text: Schema12.String,
2646
+ data: Schema12.optionalKey(Schema12.Unknown),
2647
+ createdAt: Timestamp
2648
+ });
2649
+ var RunArtifactSearch = Schema12.Struct({
2650
+ query: Schema12.String.check(Schema12.isMinLength(1), Schema12.isMaxLength(2000)),
2651
+ limit: Schema12.optionalKey(Schema12.Int.check(Schema12.isGreaterThanOrEqualTo(1), Schema12.isLessThanOrEqualTo(50)))
2652
+ });
2653
+ var RunArtifactSearchResult = Schema12.Struct({ items: Schema12.Array(RunArtifact) });
2654
+ var RunClosureKinds = ["complete", "abandoned"];
2655
+ var RunClosure = Schema12.Struct({
2656
+ kind: Schema12.Literals(RunClosureKinds),
2657
+ reason: Schema12.optionalKey(Schema12.String.check(Schema12.isMinLength(1), Schema12.isMaxLength(2000))),
2658
+ closedByUserId: Id,
2659
+ closedAt: Timestamp
2660
+ });
2661
+ var RunCloseInput = Schema12.Struct({
2662
+ kind: Schema12.Literals(RunClosureKinds),
2663
+ reason: Schema12.optionalKey(Schema12.String.check(Schema12.isMinLength(1), Schema12.isMaxLength(2000)))
2664
+ });
2665
+ var RunAlignmentVerdicts = ["aligned", "not_aligned", "unverified"];
2666
+ var RunAlignment = Schema12.Struct({
2667
+ verdict: Schema12.Literals(RunAlignmentVerdicts),
2668
+ reasons: Schema12.Array(Schema12.String),
2669
+ intentVersion: Schema12.Int.check(Schema12.isGreaterThanOrEqualTo(1)),
2670
+ judgedAt: Timestamp
2671
+ });
2672
+ var Run = Schema12.Struct({
2673
+ id: Id,
2674
+ workspaceId: Id,
2675
+ projectId: Schema12.optionalKey(Id),
2676
+ taskId: Schema12.optionalKey(Id),
2677
+ sessionId: Schema12.optionalKey(Id),
2678
+ loopId: Id,
2679
+ packageVersionId: Schema12.optionalKey(Id),
2680
+ resourceVersion: Schema12.Int.check(Schema12.isGreaterThanOrEqualTo(1)),
2681
+ status: RunStatus,
2682
+ trigger: RunTrigger,
2683
+ state: RunState,
2684
+ loopDigest: Schema12.optionalKey(BundleDigest),
2685
+ loopLayer: Schema12.optionalKey(Schema12.Literals(["project", "workspace", "shipped"])),
2686
+ parentRunId: Schema12.optionalKey(Id),
2687
+ waiting: Schema12.optionalKey(Schema12.Array(RunWaiting)),
2688
+ output: Schema12.optionalKey(Schema12.Unknown),
2689
+ failureSummary: Schema12.optionalKey(Schema12.String),
2690
+ closure: Schema12.optionalKey(RunClosure),
2691
+ alignment: Schema12.optionalKey(RunAlignment),
2692
+ startedAt: Schema12.optionalKey(Timestamp),
2693
+ completedAt: Schema12.optionalKey(Timestamp),
2694
+ createdAt: Timestamp,
2695
+ updatedAt: Timestamp
2696
+ });
2697
+ var StepAttemptInputKinds = ["kit", "memory", "decision", "knowledge_record", "context_pack"];
2698
+ var StepAttemptInputScopeKinds = ["workspace", "project", "task", "loop", "agent"];
2699
+ var StepAttemptInputKind = Schema12.Literals(StepAttemptInputKinds);
2700
+ var StepAttemptInputScopeKind = Schema12.Literals(StepAttemptInputScopeKinds);
2701
+ var StepAttemptInputScope = Schema12.Struct({
2702
+ kind: StepAttemptInputScopeKind,
2703
+ id: Id
2704
+ });
2705
+ var StepAttemptInputAvailability = Schema12.Union([
2706
+ Schema12.Struct({
2707
+ kind: Schema12.Literal("available"),
2708
+ inspectRef: LoopSafeRef
2709
+ }),
2710
+ Schema12.Struct({
2711
+ kind: Schema12.Union([Schema12.Literal("redacted"), Schema12.Literal("unavailable")]),
2712
+ reason: LoopSafeText
2713
+ })
2714
+ ]);
2715
+ var StepAttemptInputBase = {
2716
+ kind: StepAttemptInputKind,
2717
+ sourceId: Id,
2718
+ sourceScope: StepAttemptInputScope,
2719
+ inclusionReason: LoopSafeText,
2720
+ resolvedAt: Timestamp,
2721
+ appliedToStepKey: LoopSafeKey,
2722
+ availability: StepAttemptInputAvailability
2723
+ };
2724
+ var StepAttemptInput = Schema12.Union([
2725
+ Schema12.Struct({
2726
+ ...StepAttemptInputBase,
2727
+ sourceVersion: Schema12.String.check(Schema12.isMinLength(1), Schema12.isMaxLength(240), Schema12.isPattern(new RegExp(LoopSafeReferencePattern, "u")))
2728
+ }),
2729
+ Schema12.Struct({
2730
+ ...StepAttemptInputBase,
2731
+ contentSha256: LoopSha256
2732
+ })
2733
+ ]);
2734
+ var StepAttemptInputManifest = Schema12.Struct({
2735
+ manifestVersion: Schema12.Int.check(Schema12.isGreaterThanOrEqualTo(1)),
2736
+ assembledAt: Timestamp,
2737
+ entries: Schema12.Array(StepAttemptInput),
2738
+ budget: Schema12.optionalKey(LoopSafeMetadata)
2739
+ });
2740
+ var StepAttemptAgent = Schema12.Struct({
2741
+ id: Id,
2742
+ version: Schema12.optionalKey(Schema12.String.check(Schema12.isMinLength(1), Schema12.isMaxLength(240), Schema12.isPattern(new RegExp(LoopSafeReferencePattern, "u"))))
2743
+ });
2744
+ var StepAttemptRunner = Schema12.Struct({
2745
+ id: Id,
2746
+ capabilitySnapshot: Schema12.optionalKey(LoopSafeMetadata)
2747
+ });
2748
+ var StepAttemptExecutionEnvironment = Schema12.Struct({
2749
+ agent: Schema12.optionalKey(StepAttemptAgent),
2750
+ runner: Schema12.optionalKey(StepAttemptRunner),
2751
+ harness: Schema12.optionalKey(LoopSafeReferenceString),
2752
+ model: Schema12.optionalKey(LoopSafeReferenceString),
2753
+ metadata: LoopSafeMetadata
2754
+ });
2755
+ var StepAttemptLease = Schema12.Struct({
2756
+ ownerId: Id,
2757
+ runnerReplicaId: Schema12.optionalKey(Id),
2758
+ leaseId: Id,
2759
+ fencingToken: LoopSafeReferenceString,
2760
+ capacitySlot: Schema12.optionalKey(LoopSafeReferenceString),
2761
+ expiresAt: Timestamp,
2762
+ lastHeartbeatAt: Schema12.optionalKey(Timestamp)
2763
+ });
2764
+ var JsonDocumentObject = Schema12.JsonObject;
2765
+ var StepBrief = Schema12.Struct({
2766
+ stepAttemptId: Id,
2767
+ harness: Schema12.String.check(Schema12.isMinLength(1), Schema12.isMaxLength(80)),
2768
+ model: Schema12.optionalKey(Schema12.String.check(Schema12.isMinLength(1), Schema12.isMaxLength(200))),
2769
+ effort: Schema12.optionalKey(Schema12.Literals(AgentEfforts)),
2770
+ prompt: Schema12.String.check(Schema12.isMinLength(1)),
2771
+ contextPack: Schema12.optionalKey(Schema12.Struct({
2772
+ contextPackId: Schema12.optionalKey(Id),
2773
+ mode: Schema12.String.check(Schema12.isMinLength(1)),
2774
+ contentMarkdown: Schema12.String.check(Schema12.isMinLength(1))
2775
+ })),
2776
+ outputSchema: JsonDocumentObject,
2777
+ skills: Schema12.optionalKey(Schema12.Array(Schema12.Struct({
2778
+ name: Schema12.String.check(Schema12.isPattern(new RegExp(skillNamePattern, "u"))),
2779
+ files: Schema12.Record(Schema12.String.check(Schema12.isPattern(new RegExp(relativePathPattern, "u"))), Schema12.String)
2780
+ }))),
2781
+ toolless: Schema12.optionalKey(Schema12.Literal(true))
2782
+ });
2783
+ var StepOutputSubmission = Schema12.Struct({ output: JsonDocumentObject });
2784
+ var StepSessionUpdate = Schema12.Struct({
2785
+ kind: Schema12.String.check(Schema12.isMinLength(1), Schema12.isMaxLength(80)),
2786
+ content: Schema12.String.check(Schema12.isMinLength(1), Schema12.isMaxLength(4000))
2787
+ });
2788
+ var StepOutputSubmissionResult = Schema12.Union([
2789
+ Schema12.Struct({ status: Schema12.Literal("accepted") }),
2790
+ Schema12.Struct({
2791
+ status: Schema12.Literal("rejected"),
2792
+ message: Schema12.String,
2793
+ submissionsLeft: Schema12.Int.check(Schema12.isGreaterThanOrEqualTo(0))
2794
+ }),
2795
+ Schema12.Struct({ status: Schema12.Literal("failed"), message: Schema12.String })
2796
+ ]);
2797
+ var StepAttempt = Schema12.Struct({
2798
+ id: Id,
2799
+ workspaceId: Id,
2800
+ projectId: Schema12.optionalKey(Id),
2801
+ taskId: Schema12.optionalKey(Id),
2802
+ sessionId: Schema12.optionalKey(Id),
2803
+ runId: Id,
2804
+ stepSnapshotId: Schema12.optionalKey(Id),
2805
+ stepKey: Schema12.String.check(Schema12.isMinLength(1), Schema12.isMaxLength(240)),
2806
+ sequence: Schema12.Int.check(Schema12.isGreaterThanOrEqualTo(0)),
2807
+ required: Schema12.Boolean,
2808
+ attempt: Schema12.Int.check(Schema12.isGreaterThanOrEqualTo(1)),
2809
+ retryOfAttemptId: Schema12.optionalKey(Id),
2810
+ status: StepAttemptStatus,
2811
+ inputManifest: StepAttemptInputManifest,
2812
+ execution: StepAttemptExecutionEnvironment,
2813
+ output: Schema12.optionalKey(LoopStepOutput),
2814
+ brief: Schema12.optionalKey(StepBrief),
2815
+ failureSummary: Schema12.optionalKey(LoopSafeText),
2816
+ reviewEvidence: Schema12.Array(LoopSafeRef),
2817
+ lease: Schema12.optionalKey(StepAttemptLease),
2818
+ claimIdempotencyKey: Schema12.optionalKey(LoopSafeReferenceString),
2819
+ terminalIdempotencyKey: Schema12.optionalKey(LoopSafeReferenceString),
2820
+ startedAt: Schema12.optionalKey(Timestamp),
2821
+ completedAt: Schema12.optionalKey(Timestamp),
2822
+ createdAt: Timestamp,
2823
+ updatedAt: Timestamp
2824
+ });
2825
+ var StepAttemptList = Schema12.Struct({ items: Schema12.Array(StepAttempt) });
2826
+ var QuestionResponderPolicy = Schema12.Struct({
2827
+ eligibleMemberIds: Schema12.Array(Id).check(Schema12.isMinLength(1), Schema12.isMaxLength(100), Schema12.isUnique()),
2828
+ allowWorkspaceAdmins: Schema12.Boolean
2829
+ });
2830
+ var QuestionAnswer = Schema12.Struct({
2831
+ value: LoopSafeText,
2832
+ answeredByUserId: Id,
2833
+ answeredAt: Timestamp,
2834
+ idempotencyKey: Schema12.String.check(Schema12.isMinLength(1), Schema12.isMaxLength(240))
2835
+ });
2836
+ var Question = Schema12.Struct({
2837
+ id: Id,
2838
+ workspaceId: Id,
2839
+ projectId: Schema12.optionalKey(Id),
2840
+ taskId: Schema12.optionalKey(Id),
2841
+ runId: Id,
2842
+ stepKey: Schema12.String.check(Schema12.isMinLength(1), Schema12.isMaxLength(240)),
2843
+ waitId: Id,
2844
+ taskThreadEntryId: Schema12.optionalKey(Id),
2845
+ prompt: LoopSafeText,
2846
+ options: Schema12.optionalKey(Schema12.Array(LoopSafeText)),
2847
+ freeText: Schema12.optionalKey(Schema12.Boolean),
2848
+ responderPolicy: QuestionResponderPolicy,
2849
+ status: QuestionStatus,
2850
+ answer: Schema12.optionalKey(QuestionAnswer),
2851
+ resolutionOutcome: Schema12.optionalKey(LoopSafeText),
2852
+ createdAt: Timestamp,
2853
+ updatedAt: Timestamp,
2854
+ resolvedAt: Schema12.optionalKey(Timestamp)
2855
+ });
2856
+ var QuestionAnswerCreate = Schema12.Struct({
2857
+ value: LoopSafeText,
2858
+ idempotencyKey: Schema12.String.check(Schema12.isMinLength(1), Schema12.isMaxLength(240))
2859
+ });
2860
+ var QuestionList = Schema12.Struct({ items: Schema12.Array(Question) });
2861
+ var RunLaunchContext = Schema12.Struct({
2862
+ projectId: Schema12.optionalKey(Id),
2863
+ remoteUrl: Schema12.optionalKey(Schema12.String.check(Schema12.isMinLength(1), Schema12.isMaxLength(2000))),
2864
+ repoBindingId: Schema12.optionalKey(Id),
2865
+ branch: Schema12.optionalKey(Schema12.String.check(Schema12.isMinLength(1), Schema12.isMaxLength(255)))
2866
+ });
2867
+ var RunStart = Schema12.Struct({
2868
+ workspaceId: Id,
2869
+ loop: Schema12.optionalKey(Schema12.String.check(Schema12.isMinLength(1), Schema12.isMaxLength(120))),
2870
+ words: Schema12.optionalKey(Schema12.String.check(Schema12.isMinLength(1), Schema12.isMaxLength(4000))),
2871
+ task: Schema12.optionalKey(Schema12.String.check(Schema12.isMinLength(1), Schema12.isMaxLength(200))),
2872
+ teamId: Schema12.optionalKey(Id),
2873
+ taskTypeId: Schema12.optionalKey(Id),
2874
+ input: Schema12.optionalKey(Schema12.Record(Schema12.String, Schema12.Unknown)),
2875
+ context: Schema12.optionalKey(RunLaunchContext),
2876
+ devVersionId: Schema12.optionalKey(Id),
2877
+ constraints: Schema12.optionalKey(Schema12.Array(Schema12.String.check(Schema12.isMinLength(1), Schema12.isMaxLength(1000))).check(Schema12.isMaxLength(20)))
2878
+ });
2879
+ var RunStarted = Schema12.Struct({
2880
+ run: Run,
2881
+ task: Schema12.optionalKey(Schema12.Struct({ id: Id, taskKey: Schema12.String })),
2882
+ inferred: Schema12.Struct({
2883
+ repoBindingId: Schema12.optionalKey(Id),
2884
+ branch: Schema12.optionalKey(Schema12.String),
2885
+ changeRequestId: Schema12.optionalKey(Id),
2886
+ trackerKeys: Schema12.Array(Schema12.String),
2887
+ outcome: Schema12.optionalKey(Schema12.String)
2888
+ })
2889
+ });
2890
+ var RunStepSummary = Schema12.Struct({
2891
+ name: Schema12.String,
2892
+ status: StepAttemptStatus,
2893
+ startedAt: Timestamp,
2894
+ completedAt: Schema12.optionalKey(Timestamp),
2895
+ output: Schema12.optionalKey(Schema12.Unknown),
2896
+ attempts: Schema12.Array(Schema12.Struct({
2897
+ id: Id,
2898
+ attempt: Schema12.Int.check(Schema12.isGreaterThanOrEqualTo(1)),
2899
+ status: StepAttemptStatus,
2900
+ failureSummary: Schema12.optionalKey(Schema12.String)
2901
+ }))
2902
+ });
2903
+ var RunSteerDeliveries = ["queued", "delivered", "failed"];
2904
+ var RunSteer = Schema12.Struct({
2905
+ id: Id,
2906
+ text: LoopSafeText,
2907
+ delivery: Schema12.Literals(RunSteerDeliveries),
2908
+ step: Schema12.optionalKey(Schema12.String),
2909
+ createdAt: Timestamp
2910
+ });
2911
+ var RunSteerInput = Schema12.Struct({
2912
+ text: LoopSafeText,
2913
+ idempotencyKey: Schema12.String.check(Schema12.isMinLength(1), Schema12.isMaxLength(240))
2914
+ });
2915
+ var RunSteerSent = Schema12.Struct({
2916
+ steer: RunSteer,
2917
+ target: Schema12.Literals(["session", "next_step"])
2918
+ });
2919
+ var RunShow = Schema12.Struct({
2920
+ run: Run,
2921
+ steps: Schema12.Array(RunStepSummary),
2922
+ questions: Schema12.Array(Question),
2923
+ children: Schema12.Array(Schema12.Struct({ runId: Id, name: Schema12.String, status: RunStatus, createdAt: Timestamp })),
2924
+ activities: Schema12.Array(Schema12.Struct({
2925
+ name: Schema12.String,
2926
+ attempt: Schema12.Int.check(Schema12.isGreaterThanOrEqualTo(1)),
2927
+ status: Schema12.Literals(["succeeded", "failed"]),
2928
+ recordedAt: Timestamp
2929
+ })),
2930
+ artifacts: Schema12.Array(RunArtifact),
2931
+ events: Schema12.Array(Schema12.Struct({ id: Id, type: Schema12.String, occurredAt: Timestamp })),
2932
+ evidence: Schema12.Array(RunEvidence),
2933
+ steers: Schema12.Array(RunSteer),
2934
+ waiting: Schema12.Array(RunWaiting),
2935
+ closures: Schema12.Array(RunClosure)
2936
+ });
2937
+ var RunStartPreview = Schema12.Struct({
2938
+ loop: Schema12.Struct({ id: Schema12.String, title: Schema12.String, outcome: Schema12.optionalKey(Schema12.String) }),
2939
+ inputSchema: Schema12.Record(Schema12.String, Schema12.Unknown),
2940
+ input: Schema12.Record(Schema12.String, Schema12.Unknown),
2941
+ missing: Schema12.Array(Schema12.String),
2942
+ projectId: Schema12.optionalKey(Id),
2943
+ inferred: Schema12.Struct({
2944
+ repoBindingId: Schema12.optionalKey(Id),
2945
+ branch: Schema12.optionalKey(Schema12.String),
2946
+ changeRequestId: Schema12.optionalKey(Id),
2947
+ trackerKeys: Schema12.Array(Schema12.String),
2948
+ outcome: Schema12.optionalKey(Schema12.String)
2949
+ })
2950
+ });
2951
+ var ProgramLoop = Schema12.Struct({
2952
+ id: Schema12.String,
2953
+ title: Schema12.String,
2954
+ layer: Schema12.Literals(["project", "workspace", "shipped"]),
2955
+ digest: Schema12.String,
2956
+ outcome: Schema12.optionalKey(Schema12.String),
2957
+ offers: Schema12.Array(Schema12.Struct({ id: Schema12.String, title: Schema12.String, loop: Schema12.String })),
2958
+ publishedAt: Timestamp,
2959
+ package: Schema12.String
2960
+ });
2961
+ var LoopDetail = Schema12.Struct({ id: Schema12.String, resolved: Schema12.optionalKey(ProgramLoop) });
2962
+ var AutomaticStart = Schema12.Struct({
2963
+ eventId: Schema12.String,
2964
+ eventType: Schema12.String,
2965
+ projectId: Schema12.Union([Schema12.String, Schema12.Null]),
2966
+ loop: Schema12.String,
2967
+ runId: Schema12.optionalKey(Schema12.String),
2968
+ rejection: Schema12.optionalKey(Schema12.String),
2969
+ at: Schema12.String
2970
+ });
2971
+ var AutomaticStartList = Schema12.Struct({ items: Schema12.Array(AutomaticStart) });
2972
+ var ProgramAgent = Schema12.Struct({
2973
+ id: Schema12.String,
2974
+ layer: Schema12.Literals(["project", "workspace", "shipped"]),
2975
+ package: Schema12.String,
2976
+ extends: Schema12.optionalKey(Schema12.String),
2977
+ instructions: Schema12.optionalKey(Schema12.String),
2978
+ harness: Schema12.optionalKey(Schema12.String),
2979
+ model: Schema12.optionalKey(Schema12.String),
2980
+ effort: Schema12.optionalKey(Schema12.Literals(AgentEfforts)),
2981
+ kits: Schema12.optionalKey(Schema12.Array(Schema12.String)),
2982
+ network: Schema12.optionalKey(AgentSandboxNetwork),
2983
+ sandbox: Schema12.optionalKey(Schema12.Literal("docker")),
2984
+ fieldLayers: Schema12.optionalKey(Schema12.Struct({
2985
+ instructions: Schema12.optionalKey(Schema12.Literals(LoopLayers)),
2986
+ harness: Schema12.optionalKey(Schema12.Literals(LoopLayers)),
2987
+ model: Schema12.optionalKey(Schema12.Literals(LoopLayers)),
2988
+ effort: Schema12.optionalKey(Schema12.Literals(LoopLayers)),
2989
+ kits: Schema12.optionalKey(Schema12.Literals(LoopLayers)),
2990
+ network: Schema12.optionalKey(Schema12.Literals(LoopLayers)),
2991
+ sandbox: Schema12.optionalKey(Schema12.Literals(LoopLayers))
2992
+ }))
2993
+ });
2994
+ var ProgramAgentList = Schema12.Struct({ items: Schema12.Array(ProgramAgent) });
2995
+ var ProgramLoopList = Schema12.Struct({ items: Schema12.Array(ProgramLoop) });
2996
+ var RunList = Schema12.Struct({ items: Schema12.Array(Run) });
2997
+ var RunWaitReasons = ["question", "completed", "failed", "stopped", "timeout"];
2998
+ var RunWaitResult = Schema12.Struct({
2999
+ reason: Schema12.Literals(RunWaitReasons),
3000
+ run: Run,
3001
+ questions: Schema12.Array(Question)
3002
+ });
3003
+ var RunAnswer = Schema12.Struct({
3004
+ value: LoopSafeText,
3005
+ question: Schema12.optionalKey(Schema12.String.check(Schema12.isMinLength(1), Schema12.isMaxLength(200))),
3006
+ idempotencyKey: Schema12.String.check(Schema12.isMinLength(1), Schema12.isMaxLength(240))
3007
+ });
3008
+ var RunActionKinds = ["offer", "stop", "resume"];
3009
+ var RunActionSummary = Schema12.Struct({
3010
+ id: Schema12.String.check(Schema12.isMinLength(1)),
3011
+ title: Schema12.String,
3012
+ kind: Schema12.Literals(RunActionKinds),
3013
+ loop: Schema12.optionalKey(Schema12.String)
3014
+ });
3015
+ var RunActionList = Schema12.Struct({ items: Schema12.Array(RunActionSummary) });
3016
+ var RunActionTaken = Schema12.Struct({ action: Schema12.String, run: Run });
3017
+
3018
+ // packages/core/src/schedule.ts
3019
+ var ScheduleFrequency = ["daily", "weekly"];
3020
+ var ScheduleMisfirePolicies = ["skip", "fire_once", "catch_up"];
3021
+ var ScheduleOverlapPolicies = ["allow", "skip", "coalesce"];
3022
+ var ScheduleVersionStatuses = ["draft", "published", "disabled", "archived"];
3023
+ var ScheduleCalendarRule = Schema13.Struct({
3024
+ frequency: Schema13.Literals(ScheduleFrequency),
3025
+ hour: Schema13.Int.check(Schema13.isGreaterThanOrEqualTo(0), Schema13.isLessThanOrEqualTo(23)),
3026
+ minute: Schema13.Int.check(Schema13.isGreaterThanOrEqualTo(0), Schema13.isLessThanOrEqualTo(59)),
3027
+ second: Schema13.optionalKey(Schema13.Int.check(Schema13.isGreaterThanOrEqualTo(0), Schema13.isLessThanOrEqualTo(59))),
3028
+ daysOfWeek: Schema13.optionalKey(Schema13.Array(Schema13.Int.check(Schema13.isGreaterThanOrEqualTo(0), Schema13.isLessThanOrEqualTo(6))).check(Schema13.isMinLength(1), Schema13.isMaxLength(7)))
3029
+ });
3030
+ var ScheduleCronRule = Schema13.Struct({
3031
+ cron: Schema13.String.check(Schema13.isMinLength(9), Schema13.isMaxLength(200), Schema13.isPattern(new RegExp("^[0-9*,/-]+( [0-9*,/-]+){4}$", "u")))
3032
+ });
3033
+ var ScheduleRule = Schema13.Union([ScheduleCalendarRule, ScheduleCronRule]);
3034
+ var cronBounds = [
3035
+ [0, 59],
3036
+ [0, 23],
3037
+ [1, 31],
3038
+ [1, 12],
3039
+ [0, 7]
3040
+ ];
3041
+ function cronField(field, [min, max]) {
3042
+ const values = new Set;
3043
+ for (const part of field.split(",")) {
3044
+ const match = /^(\*|(\d+)(?:-(\d+))?)(?:\/(\d+))?$/.exec(part);
3045
+ if (match === null)
3046
+ return;
3047
+ const from = match[1] === "*" ? min : Number(match[2]);
3048
+ const to = match[1] === "*" ? max : match[3] === undefined ? match[4] === undefined ? from : max : Number(match[3]);
3049
+ const step = match[4] === undefined ? 1 : Number(match[4]);
3050
+ if (from < min || to > max || from > to || step < 1)
3051
+ return;
3052
+ for (let value = from;value <= to; value += step)
3053
+ values.add(value);
3054
+ }
3055
+ return values;
3056
+ }
3057
+ function parseCron(cron) {
3058
+ const fields = cron.split(" ");
3059
+ const [minutes, hours, days, months, weekdays] = fields.map((field, index) => cronField(field, cronBounds[index] ?? [0, 0]));
3060
+ if (fields.length !== 5 || !minutes || !hours || !days || !months || !weekdays)
3061
+ return;
3062
+ return {
3063
+ minutes,
3064
+ hours,
3065
+ days,
3066
+ months,
3067
+ weekdays: new Set([...weekdays].map((value) => value % 7)),
3068
+ dayRestricted: !(fields[2] ?? "").startsWith("*"),
3069
+ weekdayRestricted: !(fields[4] ?? "").startsWith("*")
3070
+ };
3071
+ }
3072
+ function isScheduleRule(value) {
3073
+ return guard(ScheduleRule)(value) && (!("cron" in value) || parseCron(value.cron) !== undefined);
3074
+ }
3075
+ var ScheduleVersion = Schema13.Struct({
3076
+ contractVersion: Schema13.Literal("schedule.v1"),
3077
+ id: Schema13.String.check(Schema13.isMinLength(1)),
3078
+ scheduleId: Schema13.String.check(Schema13.isMinLength(1)),
3079
+ workspaceId: Schema13.String.check(Schema13.isMinLength(1)),
3080
+ projectId: Schema13.optionalKey(Schema13.String.check(Schema13.isMinLength(1))),
3081
+ loopId: Schema13.optionalKey(Schema13.String.check(Schema13.isMinLength(1))),
3082
+ name: Schema13.optionalKey(Schema13.String.check(Schema13.isMinLength(1), Schema13.isMaxLength(200))),
3083
+ version: Schema13.Int.check(Schema13.isGreaterThanOrEqualTo(1)),
3084
+ status: Schema13.Literals(ScheduleVersionStatuses),
3085
+ timezone: Schema13.String.check(Schema13.isMinLength(1), Schema13.isMaxLength(80)),
3086
+ rule: ScheduleRule,
3087
+ misfirePolicy: Schema13.Literals(ScheduleMisfirePolicies),
3088
+ overlapPolicy: Schema13.Literals(ScheduleOverlapPolicies),
3089
+ maxCatchUp: Schema13.Int.check(Schema13.isGreaterThanOrEqualTo(0), Schema13.isLessThanOrEqualTo(200)),
3090
+ misfireGraceSeconds: Schema13.optionalKey(Schema13.Int.check(Schema13.isGreaterThanOrEqualTo(0), Schema13.isLessThanOrEqualTo(604800))),
3091
+ inputSchemaRef: Schema13.optionalKey(LoopDataSchemaRef),
3092
+ input: Schema13.optionalKey(SafeJson),
3093
+ createdAt: Schema13.String.check(Schema13.isMinLength(1))
3094
+ });
3095
+ var zones = new Map;
3096
+ var resolvedLocalDateTimes = new Map;
3097
+
3098
+ // packages/core/src/package-declarations.ts
3099
+ var LoopCapabilities2 = [
3100
+ "agent_work",
3101
+ "ask",
3102
+ "call",
3103
+ "verify",
3104
+ "change_request",
3105
+ "write_back",
3106
+ "post_comment",
3107
+ "create_tasks",
3108
+ "merge_change_request",
3109
+ "publish_release"
3110
+ ];
3111
+ var JsonObject2 = Schema14.Record(Schema14.String, Schema14.Json);
3112
+ var recordKeyedBy = (pattern, value) => Schema14.Record(Schema14.String, value).check(Schema14.makeFilter((record) => {
3113
+ const bad = Object.keys(record).find((key) => !new RegExp(pattern).test(key));
3114
+ return bad === undefined ? true : `${JSON.stringify(bad)} is not a valid name or relative path`;
3115
+ }));
3116
+ var SecretName = Schema14.String.check(Schema14.isPattern(/^[A-Za-z_][A-Za-z0-9_]{0,127}$/));
3117
+ var EventFilterValue = Schema14.Union([Schema14.String, Schema14.Finite, Schema14.Boolean, Schema14.Null]);
3118
+ var LoopManifest = Schema14.Struct({
3119
+ id: Schema14.String,
3120
+ title: Schema14.String,
3121
+ input: JsonObject2,
3122
+ output: JsonObject2,
3123
+ outcome: Schema14.optionalKey(Schema14.Literals(["feature", "bug", "refactor", "investigation", "docs", "migration"])),
3124
+ agents: Schema14.Record(Schema14.String, Schema14.String),
3125
+ checkout: Schema14.Literals(["none", "read", "write"]),
3126
+ when: Schema14.Array(Schema14.Struct({
3127
+ event: Schema14.String,
3128
+ filter: Schema14.optionalKey(Schema14.Record(Schema14.String, Schema14.Union([EventFilterValue, Schema14.Array(EventFilterValue)]))),
3129
+ input: Schema14.Record(Schema14.String, Schema14.String)
3130
+ })),
3131
+ offers: Schema14.Array(Schema14.Struct({ id: Schema14.String, title: Schema14.String, loop: Schema14.String })),
3132
+ capabilities: Schema14.Array(Schema14.Literals(LoopCapabilities2)),
3133
+ secrets: Schema14.optionalKey(Schema14.Array(SecretName))
3134
+ });
3135
+ var AgentDeclaration = Schema14.Struct({
3136
+ extends: Schema14.optionalKey(Schema14.String),
3137
+ instructions: Schema14.optionalKey(Schema14.String),
3138
+ harness: Schema14.optionalKey(Schema14.String),
3139
+ model: Schema14.optionalKey(Schema14.String),
3140
+ effort: Schema14.optionalKey(Schema14.Literals(AgentEfforts)),
3141
+ kits: Schema14.optionalKey(Schema14.Array(Schema14.String)),
3142
+ network: Schema14.optionalKey(Schema14.Union([Schema14.Struct({ hosts: Schema14.Array(Schema14.String) }), Schema14.Literal("open")])),
3143
+ sandbox: Schema14.optionalKey(Schema14.Literal("docker"))
3144
+ });
3145
+ var scheduleFields = {
3146
+ name: Schema14.String.check(Schema14.isMinLength(1)),
3147
+ loop: Schema14.String,
3148
+ project: Schema14.optionalKey(Schema14.String),
3149
+ input: Schema14.optionalKey(JsonObject2),
3150
+ timezone: Schema14.String,
3151
+ misfire: Schema14.optionalKey(Schema14.Literals(ScheduleMisfirePolicies)),
3152
+ overlap: Schema14.optionalKey(Schema14.Literals(ScheduleOverlapPolicies))
3153
+ };
3154
+ var ScheduleDeclaration = Schema14.Union([
3155
+ Schema14.Struct({
3156
+ ...scheduleFields,
3157
+ cron: Schema14.String.check(Schema14.makeFilter((cron) => isScheduleRule({ cron }) || "five cron fields, each within its range"))
3158
+ }),
3159
+ Schema14.Struct({
3160
+ ...scheduleFields,
3161
+ rule: Schema14.declare((value) => isScheduleRule(value), {
3162
+ expected: "a Schedule rule: frequency daily or weekly, hour, minute, and optionally second and daysOfWeek"
3163
+ })
3164
+ })
3165
+ ]);
3166
+ var AuthoredKitDeclaration = Schema14.Struct({
3167
+ name: Schema14.String.check(Schema14.isMinLength(1)),
3168
+ kind: Schema14.optionalKey(Schema14.Literals(KitKinds)),
3169
+ description: Schema14.optionalKey(Schema14.String),
3170
+ context: Schema14.String,
3171
+ skills: Schema14.optionalKey(recordKeyedBy(skillNamePattern, recordKeyedBy(relativePathPattern, Schema14.String)))
3172
+ });
3173
+ var KitInstallationDeclaration = Schema14.Struct({
3174
+ source: Schema14.String.check(Schema14.isMinLength(1)),
3175
+ version: Schema14.optionalKey(Schema14.String)
3176
+ });
3177
+ var KitAssignmentDeclaration = Schema14.Struct({
3178
+ kit: Schema14.String.check(Schema14.isMinLength(1)),
3179
+ workspace: Schema14.optionalKey(Schema14.Literals(["default", "mandatory"])),
3180
+ projects: Schema14.optionalKey(Schema14.Array(Schema14.String))
3181
+ });
3182
+ var KitDeclaration = Schema14.Union([
3183
+ KitInstallationDeclaration,
3184
+ KitAssignmentDeclaration,
3185
+ AuthoredKitDeclaration
3186
+ ]);
3187
+ var PackageDeclarations = Schema14.Struct({
3188
+ loops: Schema14.Array(LoopManifest),
3189
+ agents: Schema14.Record(Schema14.String, AgentDeclaration),
3190
+ schedules: Schema14.optionalKey(Schema14.Record(Schema14.String, ScheduleDeclaration)),
3191
+ kits: Schema14.optionalKey(Schema14.Record(Schema14.String, KitDeclaration))
3192
+ });
3193
+ var sameLoop = Schema14.toEquivalence(LoopManifest);
3194
+ var sameAgent = Schema14.toEquivalence(AgentDeclaration);
3195
+
3196
+ // packages/sdk/src/loop/define.ts
3197
+ import * as Effect2 from "effect/Effect";
3198
+ import * as Schema15 from "effect/Schema";
3199
+ var LoopOutcome2 = Schema15.Literals(["feature", "bug", "refactor", "investigation", "docs", "migration"]);
3200
+ var defineLoop2 = (definition) => definition;
3201
+
3202
+ class ManifestInvalid2 extends Schema15.TaggedError()("ManifestInvalid", {
3203
+ loop: Schema15.String,
3204
+ message: Schema15.String
3205
+ }) {
3206
+ }
3207
+ var jsonSchemaOf2 = (loop, schema) => Effect2.try({
3208
+ try: () => Schema15.toJsonSchemaDocument(schema),
3209
+ catch: (error) => new ManifestInvalid2({ loop, message: `Schema has no JSON Schema: ${String(error)}` })
3210
+ }).pipe(Effect2.flatMap((document) => Schema15.decodeUnknownEffect(JsonObjectSchema)({ ...document.schema, $defs: document.definitions }).pipe(Effect2.mapError((error) => new ManifestInvalid2({ loop, message: error.message })))));
3211
+ var JsonObjectSchema = Schema15.Record(Schema15.String, Schema15.Json);
3212
+ var declarationsAreData = (definition) => Schema15.decodeEffect(JsonObjectSchema)({
3213
+ agents: definition.agents,
3214
+ when: definition.when ?? [],
3215
+ offers: definition.offers ?? []
3216
+ }).pipe(Effect2.mapError((error) => new ManifestInvalid2({ loop: definition.id, message: `Declarations must be data: ${error.message}` })));
3217
+ var loopManifest2 = (definition) => Effect2.gen(function* () {
3218
+ yield* declarationsAreData(definition);
3219
+ return {
3220
+ id: definition.id,
3221
+ title: definition.title,
3222
+ input: yield* jsonSchemaOf2(definition.id, definition.input),
3223
+ output: yield* jsonSchemaOf2(definition.id, definition.output),
3224
+ ...definition.outcome === undefined ? undefined : { outcome: definition.outcome },
3225
+ agents: definition.agents,
3226
+ checkout: definition.checkout,
3227
+ when: definition.when ?? [],
3228
+ offers: definition.offers ?? [],
3229
+ capabilities: definition.capabilities,
3230
+ ...definition.secrets === undefined ? undefined : { secrets: definition.secrets }
3231
+ };
3232
+ });
3233
+ // packages/sdk/src/loop/steps.ts
3234
+ import * as Cause from "effect/Cause";
3235
+ import * as Context from "effect/Context";
3236
+ import * as Duration from "effect/Duration";
3237
+ import * as Effect3 from "effect/Effect";
3238
+ import * as Exit2 from "effect/Exit";
3239
+ import * as Schema17 from "effect/Schema";
3240
+ import { Activity, DurableDeferred } from "effect/workflow";
3241
+
3242
+ // packages/sdk/src/loop/evidence.ts
3243
+ import * as Schema16 from "effect/Schema";
3244
+ var EvidenceCheck2 = Schema16.Struct({
3245
+ name: Schema16.String,
3246
+ command: Schema16.String,
3247
+ status: Schema16.Literals(["passed", "failed"]),
3248
+ preExisting: Schema16.Boolean,
3249
+ durationMs: Schema16.Finite,
3250
+ evidenceId: Schema16.String
3251
+ });
3252
+ var VerifyResult2 = Schema16.Struct({
3253
+ revision: Schema16.String,
3254
+ tree: Schema16.String,
3255
+ passed: Schema16.Boolean,
3256
+ checks: Schema16.Array(EvidenceCheck2)
3257
+ });
3258
+ var OutcomeTable2 = {
3259
+ feature: "Approved verifications pass on the head tree, and review says the scope was met",
3260
+ bug: "A reproducing check fails on the base and passes on the head",
3261
+ refactor: "Approved verifications pass on both base and head",
3262
+ investigation: "A conclusion Output with its sources; no patch needed",
3263
+ docs: "The documented commands run",
3264
+ migration: "A rollback check passes",
3265
+ none: "Only the approved verifications"
3266
+ };
3267
+ var verdict = (reasons) => reasons.length === 0 ? { settled: true } : { settled: false, reasons };
3268
+ var missing = (side) => `No verification evidence for the ${side}`;
3269
+ var allPass = (side, result) => {
3270
+ if (result === undefined)
3271
+ return [missing(side)];
3272
+ if (result.checks.length === 0)
3273
+ return [`No approved verification ran on the ${side} tree ${result.tree}`];
3274
+ return result.checks.filter((check) => check.status === "failed" && !check.preExisting).map((check) => `${check.name} fails on the ${side} tree ${result.tree}`);
3275
+ };
3276
+ var checkOn = (side, result, name) => {
3277
+ if (result === undefined)
3278
+ return { reason: missing(side) };
3279
+ if (name === undefined)
3280
+ return { reason: `No check was named for the ${side}` };
3281
+ const found = result.checks.find((check) => check.name === name);
3282
+ return found === undefined ? { reason: `No evidence for ${name} on the ${side} tree ${result.tree}` } : { found };
3283
+ };
3284
+ var passesOnHead = (head, name) => {
3285
+ const { found, reason } = checkOn("head", head, name);
3286
+ if (found === undefined)
3287
+ return [reason];
3288
+ return found.status === "passed" ? [] : [`${found.name} fails on the head tree ${head?.tree}`];
3289
+ };
3290
+ var bugReasons = (input) => {
3291
+ const base = checkOn("base", input.base, input.reproducing);
3292
+ const head = checkOn("head", input.head, input.reproducing);
3293
+ return [
3294
+ ...base.found === undefined ? [base.reason] : base.found.status === "failed" ? [] : [`${base.found.name} does not fail on the base tree ${input.base?.tree}, so the bug is not reproduced`],
3295
+ ...head.found === undefined ? [head.reason] : head.found.status === "passed" ? [] : [`${head.found.name} fails on the head tree ${input.head?.tree}`]
3296
+ ];
3297
+ };
3298
+ var conclusionReasons = (conclusion) => {
3299
+ if (conclusion === undefined || conclusion.text.trim() === "")
3300
+ return ["No conclusion was given"];
3301
+ return conclusion.sources.length === 0 ? ["The conclusion names no sources"] : [];
3302
+ };
3303
+ var scopeReasons = (scope) => {
3304
+ if (scope === undefined)
3305
+ return ["Review has not judged the scope"];
3306
+ if (scope.met)
3307
+ return [];
3308
+ return scope.unmet.length === 0 ? ["Review found the scope unmet"] : scope.unmet.map((item) => `Review found the scope unmet: ${item}`);
3309
+ };
3310
+ var evidenceGate2 = (input) => {
3311
+ switch (input.outcome) {
3312
+ case "feature":
3313
+ return verdict([...allPass("head", input.head), ...scopeReasons(input.review)]);
3314
+ case "bug":
3315
+ return verdict(bugReasons(input));
3316
+ case "refactor":
3317
+ return verdict([...allPass("base", input.base), ...allPass("head", input.head)]);
3318
+ case "investigation":
3319
+ return verdict(conclusionReasons(input.conclusion));
3320
+ case "docs":
3321
+ return verdict((input.documented ?? []).length === 0 ? ["No documented command was named"] : (input.documented ?? []).flatMap((name) => passesOnHead(input.head, name)));
3322
+ case "migration":
3323
+ return verdict(passesOnHead(input.head, input.rollback));
3324
+ default:
3325
+ return verdict(allPass("head", input.head));
3326
+ }
3327
+ };
3328
+
3329
+ // packages/sdk/src/loop/steps.ts
3330
+ class StepFailed2 extends Schema17.TaggedError()("StepFailed", {
3331
+ step: Schema17.String,
3332
+ reason: Schema17.String
3333
+ }) {
3334
+ get message() {
3335
+ return `Step "${this.step}" failed: ${this.reason}`;
3336
+ }
3337
+ }
3338
+
3339
+ class OutputInvalid2 extends Schema17.TaggedError()("OutputInvalid", {
3340
+ step: Schema17.String,
3341
+ message: Schema17.String
3342
+ }) {
3343
+ }
3344
+
3345
+ class QuestionRefused2 extends Schema17.TaggedError()("QuestionRefused", {
3346
+ step: Schema17.String,
3347
+ answer: Schema17.String,
3348
+ options: Schema17.Array(Schema17.String)
3349
+ }) {
3350
+ }
3351
+
3352
+ class WaitTimedOut2 extends Schema17.TaggedError()("WaitTimedOut", {
3353
+ step: Schema17.String,
3354
+ event: Schema17.String
3355
+ }) {
3356
+ }
3357
+
3358
+ class ChildFailed2 extends Schema17.TaggedError()("ChildFailed", {
3359
+ step: Schema17.String,
3360
+ loop: Schema17.String,
3361
+ reason: Schema17.String
3362
+ }) {
3363
+ get message() {
3364
+ return `Child Run of "${this.loop}" for Step "${this.step}" failed: ${this.reason}`;
3365
+ }
3366
+ }
3367
+
3368
+ class CapabilityDenied2 extends Schema17.TaggedError()("CapabilityDenied", {
3369
+ step: Schema17.String,
3370
+ capability: Schema17.Literals(LoopCapabilities2),
3371
+ secret: Schema17.optionalKey(Schema17.String)
3372
+ }) {
3373
+ get message() {
3374
+ return this.secret === undefined ? `Step "${this.step}" needs the "${this.capability}" capability, which this Run was not granted` : `Step "${this.step}" names the Secret "${this.secret}", which its Loop does not declare`;
3375
+ }
3376
+ }
3377
+
3378
+ class DuplicateStep2 extends Schema17.TaggedError()("DuplicateStep", {
3379
+ step: Schema17.String
3380
+ }) {
3381
+ }
3382
+
3383
+ class InputInvalid2 extends Schema17.TaggedError()("InputInvalid", {
3384
+ loop: Schema17.String,
3385
+ message: Schema17.String
3386
+ }) {
3387
+ }
3388
+ var LoopEvent2 = Schema17.Struct({ type: Schema17.String, payload: Schema17.Record(Schema17.String, Schema17.Json) });
3389
+
3390
+ class LoopRun2 extends Context.Service()("@kitman-sh/sdk/loop/LoopRun") {
3391
+ }
3392
+
3393
+ class LoopHost2 extends Context.Service()("@kitman-sh/sdk/loop/LoopHost") {
3394
+ }
3395
+ var agentWorkDeferred2 = (step) => DurableDeferred.make(`agent_work/${step}`, { success: Schema17.Json, error: StepFailed2 });
3396
+ var answerDeferred2 = (step) => DurableDeferred.make(`ask/${step}`, { success: Schema17.String, error: StepFailed2 });
3397
+ var childDeferred2 = (step) => DurableDeferred.make(`call/${step}`, { success: Schema17.Json, error: ChildFailed2 });
3398
+ var eventDeferred2 = (step) => DurableDeferred.make(`wait_for/${step}`, { success: LoopEvent2, error: WaitTimedOut2 });
3399
+ var verifyDeferred2 = (step) => DurableDeferred.make(`verify/${step}`, { success: VerifyResult2, error: StepFailed2 });
3400
+ var recordStep = (name, kind, exit) => {
3401
+ if (Exit2.isSuccess(exit))
3402
+ return { name, kind, status: "succeeded", result: exit.value };
3403
+ if (Cause.hasInterruptsOnly(exit.cause))
3404
+ return;
3405
+ return { name, kind, status: "failed", error: Cause.squash(exit.cause) };
3406
+ };
3407
+ var takeStep2 = (name, kind, capability, body) => Effect3.gen(function* () {
3408
+ const run = yield* LoopRun2;
3409
+ if (run.names.has(name))
3410
+ return yield* new DuplicateStep2({ step: name });
3411
+ if (capability !== undefined && !run.granted.has(capability))
3412
+ return yield* new CapabilityDenied2({ step: name, capability });
3413
+ run.names.add(name);
3414
+ return yield* body.pipe(Effect3.onExit((exit) => Effect3.sync(() => {
3415
+ const record = recordStep(name, kind, exit);
3416
+ if (record !== undefined)
3417
+ run.steps.push(record);
3418
+ })));
3419
+ });
3420
+ var launch = (deferred, start) => Activity.make({
3421
+ name: deferred.name,
3422
+ error: StepFailed2,
3423
+ execute: Effect3.gen(function* () {
3424
+ return yield* start(yield* LoopHost2, yield* DurableDeferred.token(deferred));
3425
+ })
3426
+ });
3427
+ var toJson = (step, schema, value) => Schema17.encodeUnknownEffect(Schema17.toCodecJson(schema))(value).pipe(Effect3.flatMap(Schema17.decodeUnknownEffect(Schema17.Json)), Effect3.mapError((error) => new StepFailed2({ step, reason: error.message })));
3428
+ var agentWork2 = (name, options) => takeStep2(name, "agent_work", "agent_work", Effect3.gen(function* () {
3429
+ const run = yield* LoopRun2;
3430
+ const agent = run.agents[options.agent];
3431
+ const undeclared = options.secrets?.find((secret) => !run.secrets.has(secret));
3432
+ if (undeclared !== undefined)
3433
+ return yield* new CapabilityDenied2({ step: name, capability: "agent_work", secret: undeclared });
3434
+ if (agent === undefined)
3435
+ return yield* new StepFailed2({ step: name, reason: `Agent role "${options.agent}" is not declared` });
3436
+ const deferred = agentWorkDeferred2(name);
3437
+ const output = yield* jsonSchemaOf2(run.loop, options.output).pipe(Effect3.mapError((error) => new StepFailed2({ step: name, reason: error.message })));
3438
+ yield* launch(deferred, (host, token) => host.startAgentWork({
3439
+ step: name,
3440
+ role: options.agent,
3441
+ agent,
3442
+ prompt: options.prompt,
3443
+ output,
3444
+ ...options.secrets === undefined ? undefined : { secrets: options.secrets },
3445
+ token
3446
+ }));
3447
+ const submitted = yield* DurableDeferred.await(deferred);
3448
+ return yield* Schema17.decodeEffect(Schema17.toCodecJson(options.output))(submitted).pipe(Effect3.mapError((error) => new OutputInvalid2({ step: name, message: error.message })));
3449
+ }));
3450
+ var ask2 = (name, question) => takeStep2(name, "ask", "ask", Effect3.gen(function* () {
3451
+ const deferred = answerDeferred2(name);
3452
+ const options = "options" in question ? question.options : undefined;
3453
+ yield* launch(deferred, (host, token) => host.putQuestion({
3454
+ step: name,
3455
+ prompt: question.prompt,
3456
+ ...options === undefined ? undefined : { options },
3457
+ token
3458
+ }));
3459
+ const answer = yield* DurableDeferred.await(deferred);
3460
+ if (options === undefined)
3461
+ return answer;
3462
+ const offered = options.find((option) => option === answer);
3463
+ if (offered === undefined)
3464
+ return yield* new QuestionRefused2({ step: name, answer, options });
3465
+ return offered;
3466
+ }));
3467
+ var call2 = (name, loop, input) => takeStep2(name, "call", "call", Effect3.gen(function* () {
3468
+ const deferred = childDeferred2(name);
3469
+ const encoded = yield* toJson(name, loop.input, input);
3470
+ yield* launch(deferred, (host, token) => host.admitChild({ step: name, loop: loop.id, input: encoded, token }));
3471
+ const result = yield* DurableDeferred.await(deferred);
3472
+ return yield* Schema17.decodeEffect(Schema17.toCodecJson(loop.output))(result).pipe(Effect3.mapError((error) => new ChildFailed2({ step: name, loop: loop.id, reason: error.message })));
3473
+ }));
3474
+ var waitFor2 = (name, wait) => takeStep2(name, "wait_for", undefined, Effect3.gen(function* () {
3475
+ const deferred = eventDeferred2(name);
3476
+ const timeoutMillis = Duration.toMillis(Duration.fromInputUnsafe(wait.timeout));
3477
+ yield* launch(deferred, (host, token) => host.awaitEvent({
3478
+ step: name,
3479
+ event: wait.event,
3480
+ ...wait.filter === undefined ? undefined : { filter: wait.filter },
3481
+ timeoutMillis,
3482
+ token
3483
+ }));
3484
+ return yield* DurableDeferred.await(deferred);
3485
+ }));
3486
+ var verify2 = (name, request) => takeStep2(name, "verify", "verify", Effect3.gen(function* () {
3487
+ const deferred = verifyDeferred2(name);
3488
+ yield* launch(deferred, (host, token) => host.startVerification({
3489
+ step: name,
3490
+ ...request.revision === undefined ? undefined : { revision: request.revision },
3491
+ ...request.checks === undefined ? undefined : { checks: request.checks },
3492
+ token
3493
+ }));
3494
+ return yield* DurableDeferred.await(deferred);
3495
+ }));
3496
+ var approval = ["Approve", "Reject"];
3497
+ var suggestVerification2 = (name, verification) => takeStep2(name, "ask", "ask", Effect3.gen(function* () {
3498
+ const deferred = answerDeferred2(name);
3499
+ yield* launch(deferred, (host, token) => host.putQuestion({
3500
+ step: name,
3501
+ prompt: `Approve the verification "${verification.name}" for this repository? It runs \`${verification.command}\`${verification.workingDirectory === undefined ? "" : ` in ${verification.workingDirectory}`}.`,
3502
+ options: approval,
3503
+ verification,
3504
+ token
3505
+ }));
3506
+ return (yield* DurableDeferred.await(deferred)) === "Approve" ? "approved" : "rejected";
3507
+ }));
3508
+ // packages/sdk/src/loop/activities.ts
3509
+ import * as Context2 from "effect/Context";
3510
+ import * as Effect5 from "effect/Effect";
3511
+ import * as Schema19 from "effect/Schema";
3512
+ import { Activity as Activity2 } from "effect/workflow";
3513
+
3514
+ // packages/sdk/src/loop/plan.ts
3515
+ import * as Effect4 from "effect/Effect";
3516
+ import * as Schema18 from "effect/Schema";
3517
+ var PlanTicket2 = Schema18.Struct({
3518
+ key: Schema18.String,
3519
+ title: Schema18.String,
3520
+ body: Schema18.String,
3521
+ acceptanceCriteria: Schema18.Array(Schema18.String),
3522
+ repoBindingId: Schema18.optional(Schema18.String),
3523
+ blockedBy: Schema18.Array(Schema18.String),
3524
+ outcome: Schema18.optional(LoopOutcome2)
3525
+ });
3526
+ var cycleMessage = (keys) => `These tickets block each other in a cycle, so none can start: ${keys.join(", ")}`;
3527
+ var ticketsProblem = (tickets) => {
3528
+ const keys = new Set;
3529
+ for (const ticket of tickets) {
3530
+ if (keys.has(ticket.key))
3531
+ return `Two tickets have the key "${ticket.key}"`;
3532
+ keys.add(ticket.key);
3533
+ }
3534
+ for (const ticket of tickets)
3535
+ for (const blocker of ticket.blockedBy)
3536
+ if (!keys.has(blocker))
3537
+ return `Ticket "${ticket.key}" is blocked by "${blocker}", which is not a ticket`;
3538
+ const { blocked } = wavesOf(tickets);
3539
+ return blocked.length === 0 ? undefined : cycleMessage(blocked);
3540
+ };
3541
+ var PlanTickets2 = Schema18.Array(PlanTicket2).check(Schema18.makeFilter((tickets) => ticketsProblem(tickets) ?? true));
3542
+
3543
+ class BlockingCycle2 extends Schema18.TaggedError()("BlockingCycle", {
3544
+ tickets: Schema18.Array(Schema18.String)
3545
+ }) {
3546
+ get message() {
3547
+ return cycleMessage(this.tickets);
3548
+ }
3549
+ }
3550
+ var byRepoBinding = (left, right) => (left.repoBindingId ?? "").localeCompare(right.repoBindingId ?? "");
3551
+ function wavesOf(tickets) {
3552
+ const placed = new Set;
3553
+ const waves = [];
3554
+ let left = tickets;
3555
+ while (left.length > 0) {
3556
+ const ready = left.filter((ticket) => ticket.blockedBy.every((blocker) => placed.has(blocker)));
3557
+ if (ready.length === 0)
3558
+ break;
3559
+ for (const ticket of ready)
3560
+ placed.add(ticket.key);
3561
+ waves.push(ready.toSorted(byRepoBinding));
3562
+ left = left.filter((ticket) => !placed.has(ticket.key));
3563
+ }
3564
+ return { waves, blocked: left.map((ticket) => ticket.key) };
3565
+ }
3566
+ var planWaves2 = (tickets) => Effect4.suspend(() => {
3567
+ const { waves, blocked } = wavesOf(tickets);
3568
+ return blocked.length === 0 ? Effect4.succeed(waves) : Effect4.fail(new BlockingCycle2({ tickets: blocked }));
3569
+ });
3570
+
3571
+ // packages/sdk/src/loop/activities.ts
3572
+ var ChangeRequestRequest2 = Schema19.Struct({
3573
+ title: Schema19.String,
3574
+ body: Schema19.String,
3575
+ integration: Schema19.optional(Schema19.String)
3576
+ });
3577
+ var ChangeRequestResult2 = Schema19.Struct({ id: Schema19.String, number: Schema19.String, url: Schema19.String });
3578
+ var WriteBackMilestones2 = ["started", "change_request_opened", "merged", "failed"];
3579
+ var WriteBackRequest2 = Schema19.Struct({
3580
+ milestone: Schema19.optional(Schema19.Literals(WriteBackMilestones2)),
3581
+ changeRequestUrl: Schema19.optional(Schema19.String)
3582
+ });
3583
+ var ArtifactRequest2 = Schema19.Struct({
3584
+ kind: Schema19.String,
3585
+ title: Schema19.String,
3586
+ text: Schema19.String,
3587
+ data: Schema19.optional(Schema19.Json)
3588
+ });
3589
+ var ArtifactResult2 = Schema19.Struct({ artifactId: Schema19.String });
3590
+ var NoteRequest2 = Schema19.Struct({ text: Schema19.String, artifactId: Schema19.optional(Schema19.String) });
3591
+ var CreateTasksRequest2 = Schema19.Struct({ tickets: Schema19.Array(PlanTicket2) });
3592
+ var CreateTasksResult2 = Schema19.Struct({
3593
+ tasks: Schema19.Array(Schema19.Struct({ key: Schema19.String, taskId: Schema19.String }))
3594
+ });
3595
+ var IntegrationBranchRequest2 = Schema19.Struct({ repoBindingId: Schema19.optional(Schema19.String) });
3596
+ var IntegrationBranch2 = Schema19.Struct({
3597
+ repoBindingId: Schema19.String,
3598
+ branch: Schema19.String,
3599
+ revision: Schema19.String
3600
+ });
3601
+ var MergeChangeRequestRequest2 = Schema19.Struct({ changeRequestId: Schema19.String });
3602
+ var MergeResult2 = Schema19.Union([
3603
+ Schema19.Struct({ status: Schema19.Literal("merged"), revision: Schema19.String }),
3604
+ Schema19.Struct({ status: Schema19.Literal("conflict") })
3605
+ ]);
3606
+ var CommentRequest2 = Schema19.Struct({ changeRequestId: Schema19.String, body: Schema19.String });
3607
+ var ReleaseRequest2 = Schema19.Struct({
3608
+ tag: Schema19.String,
3609
+ revision: Schema19.optional(Schema19.String),
3610
+ title: Schema19.String,
3611
+ notes: Schema19.String
3612
+ });
3613
+ var ReleaseResult2 = Schema19.Struct({ tag: Schema19.String, revision: Schema19.String, url: Schema19.String });
3614
+
3615
+ class ChangeRequestActivity2 extends Context2.Service()("@kitman-sh/sdk/loop/ChangeRequestActivity") {
3616
+ }
3617
+
3618
+ class WriteBackActivity2 extends Context2.Service()("@kitman-sh/sdk/loop/WriteBackActivity") {
3619
+ }
3620
+
3621
+ class ArtifactActivity2 extends Context2.Service()("@kitman-sh/sdk/loop/ArtifactActivity") {
3622
+ }
3623
+
3624
+ class NoteActivity2 extends Context2.Service()("@kitman-sh/sdk/loop/NoteActivity") {
3625
+ }
3626
+
3627
+ class CommentActivity2 extends Context2.Service()("@kitman-sh/sdk/loop/CommentActivity") {
3628
+ }
3629
+
3630
+ class CreateTasksActivity2 extends Context2.Service()("@kitman-sh/sdk/loop/CreateTasksActivity") {
3631
+ }
3632
+
3633
+ class IntegrationBranchActivity2 extends Context2.Service()("@kitman-sh/sdk/loop/IntegrationBranchActivity") {
3634
+ }
3635
+
3636
+ class MergeChangeRequestActivity2 extends Context2.Service()("@kitman-sh/sdk/loop/MergeChangeRequestActivity") {
3637
+ }
3638
+
3639
+ class ReleaseActivity2 extends Context2.Service()("@kitman-sh/sdk/loop/ReleaseActivity") {
3640
+ }
3641
+ var hostActivity = (name, kind, capability, success, execute) => takeStep2(name, kind, capability, Activity2.make({ name: `${kind}/${name}`, success, error: StepFailed2, execute }));
3642
+ var changeRequest2 = (name, request) => hostActivity(name, "change_request", "change_request", ChangeRequestResult2, Effect5.gen(function* () {
3643
+ return yield* (yield* ChangeRequestActivity2).run(request, name);
3644
+ }));
3645
+ var writeBack2 = (name, request) => hostActivity(name, "write_back", "write_back", Schema19.Void, Effect5.gen(function* () {
3646
+ return yield* (yield* WriteBackActivity2).run(request, name);
3647
+ }));
3648
+ var artifact2 = (name, request) => hostActivity(name, "artifact", undefined, ArtifactResult2, Effect5.gen(function* () {
3649
+ return yield* (yield* ArtifactActivity2).run(request, name);
3650
+ }));
3651
+ var note2 = (name, request) => hostActivity(name, "note", undefined, Schema19.Void, Effect5.gen(function* () {
3652
+ return yield* (yield* NoteActivity2).run(request, name);
3653
+ }));
3654
+ var comment2 = (name, request) => hostActivity(name, "comment", "post_comment", Schema19.Void, Effect5.gen(function* () {
3655
+ return yield* (yield* CommentActivity2).run(request, name);
3656
+ }));
3657
+ var createTasks2 = (name, request) => hostActivity(name, "create_tasks", "create_tasks", CreateTasksResult2, Effect5.gen(function* () {
3658
+ return yield* (yield* CreateTasksActivity2).run(request, name);
3659
+ }));
3660
+ var integrationBranch2 = (name, request) => hostActivity(name, "integration_branch", "merge_change_request", IntegrationBranch2, Effect5.gen(function* () {
3661
+ return yield* (yield* IntegrationBranchActivity2).run(request, name);
3662
+ }));
3663
+ var mergeChangeRequest2 = (name, request) => hostActivity(name, "merge_change_request", "merge_change_request", MergeResult2, Effect5.gen(function* () {
3664
+ return yield* (yield* MergeChangeRequestActivity2).run(request, name);
3665
+ }));
3666
+ var release2 = (name, request) => hostActivity(name, "release", "publish_release", ReleaseResult2, Effect5.gen(function* () {
3667
+ return yield* (yield* ReleaseActivity2).run(request, name);
3668
+ }));
3669
+ // packages/sdk/src/loop/test-loop.ts
3670
+ import * as ConfigProvider from "effect/ConfigProvider";
3671
+ import * as Context3 from "effect/Context";
3672
+ import * as Data2 from "effect/Data";
3673
+ import * as Effect6 from "effect/Effect";
3674
+ import * as Exit3 from "effect/Exit";
3675
+ import * as Layer from "effect/Layer";
3676
+ import * as Option2 from "effect/Option";
3677
+ import * as Schema20 from "effect/Schema";
3678
+ import { DurableDeferred as DurableDeferred2, Workflow, WorkflowEngine } from "effect/workflow";
3679
+ var LoopJournal2 = Schema20.Struct({
3680
+ activities: Schema20.Record(Schema20.String, Schema20.Json),
3681
+ deferreds: Schema20.Record(Schema20.String, Schema20.Json)
3682
+ });
3683
+
3684
+ class ScriptedFailure2 extends Data2.TaggedClass("ScriptedFailure") {
3685
+ }
3686
+ var scriptedFailure2 = (reason) => new ScriptedFailure2({ reason });
3687
+ var defaultActivities = {
3688
+ changeRequest: {
3689
+ run: () => Effect6.succeed({ id: "change-request-1", number: "1", url: "test://change-requests/1" })
3690
+ },
3691
+ writeBack: { run: () => Effect6.void },
3692
+ artifact: { run: (request) => Effect6.succeed({ artifactId: request.title }) },
3693
+ note: { run: () => Effect6.void },
3694
+ comment: { run: () => Effect6.void },
3695
+ createTasks: {
3696
+ run: (request) => Effect6.succeed({ tasks: request.tickets.map((ticket) => ({ key: ticket.key, taskId: `task-${ticket.key}` })) })
3697
+ },
3698
+ integrationBranch: {
3699
+ run: (request) => Effect6.succeed({
3700
+ repoBindingId: request.repoBindingId ?? "repo",
3701
+ branch: "kitman/run/integration",
3702
+ revision: "integration-head"
3703
+ })
3704
+ },
3705
+ mergeChangeRequest: {
3706
+ run: (request) => Effect6.succeed({ status: "merged", revision: `merged-${request.changeRequestId}` })
3707
+ },
3708
+ release: {
3709
+ run: (request) => Effect6.succeed({
3710
+ tag: request.tag,
3711
+ revision: request.revision ?? "base-head",
3712
+ url: `test://releases/${request.tag}`
3713
+ })
3714
+ }
3715
+ };
3716
+ var withoutServices = (effect) => Effect6.orDie(Effect6.provide(effect, Context3.empty()));
3717
+ var deferredExit = (deferred) => Schema20.Exit(Schema20.toCodecJson(deferred.successSchema), Schema20.toCodecJson(deferred.errorSchema), Schema20.toCodecJson(Schema20.Defect()));
3718
+ var journaled = (engine, journal, ran) => ({
3719
+ ...engine,
3720
+ activityExecute: (activity, attempt) => Effect6.gen(function* () {
3721
+ const key = `${activity.name}/${attempt}`;
3722
+ const recorded = journal.activities[key];
3723
+ if (recorded !== undefined)
3724
+ return new Workflow.Complete({
3725
+ exit: yield* withoutServices(Schema20.decodeEffect(Schema20.toCodecJson(activity.exitSchema))(recorded))
3726
+ });
3727
+ const result = yield* engine.activityExecute(activity, attempt);
3728
+ if (result instanceof Workflow.Complete) {
3729
+ ran.push(activity.name);
3730
+ journal.activities[key] = yield* withoutServices(Schema20.encodeEffect(Schema20.toCodecJson(activity.exitSchema))(result.exit));
3731
+ }
3732
+ return result;
3733
+ }),
3734
+ deferredResult: (deferred) => Effect6.gen(function* () {
3735
+ const recorded = journal.deferreds[deferred.name];
3736
+ if (recorded !== undefined)
3737
+ return Option2.some(yield* withoutServices(Schema20.decodeEffect(Schema20.toCodecJson(deferredExit(deferred)))(recorded)));
3738
+ const result = yield* engine.deferredResult(deferred);
3739
+ if (Option2.isSome(result))
3740
+ journal.deferreds[deferred.name] = yield* withoutServices(Schema20.encodeEffect(Schema20.toCodecJson(deferredExit(deferred)))(result.value));
3741
+ return result;
3742
+ })
3743
+ });
3744
+ var scriptedExit = (scripted, failure) => scripted === undefined ? Exit3.fail(failure("nothing was scripted for this Step")) : scripted instanceof ScriptedFailure2 ? Exit3.fail(failure(scripted.reason)) : Exit3.succeed(scripted);
3745
+ var scriptedHost = (script, engine, agentLaunches, childLaunches) => {
3746
+ const resolve = (deferred, token, exit) => DurableDeferred2.done(deferred, { token, exit }).pipe(Effect6.provideService(WorkflowEngine.WorkflowEngine, engine));
3747
+ return {
3748
+ startAgentWork: (launch) => Effect6.andThen(Effect6.sync(() => agentLaunches.push({
3749
+ step: launch.step,
3750
+ agent: launch.agent,
3751
+ prompt: launch.prompt,
3752
+ ...launch.secrets === undefined ? undefined : { secrets: launch.secrets }
3753
+ })), resolve(agentWorkDeferred2(launch.step), launch.token, scriptedExit(script.outputs?.[launch.step], (reason) => new StepFailed2({ step: launch.step, reason })))),
3754
+ putQuestion: (launch) => {
3755
+ const answer = script.answers?.[launch.step];
3756
+ return resolve(answerDeferred2(launch.step), launch.token, answer === undefined ? Exit3.fail(new StepFailed2({ step: launch.step, reason: "no answer was scripted" })) : Exit3.succeed(answer));
3757
+ },
3758
+ admitChild: (launch) => Effect6.andThen(Effect6.sync(() => childLaunches.push({ step: launch.step, loop: launch.loop, input: launch.input })), resolve(childDeferred2(launch.step), launch.token, scriptedExit(script.children?.[launch.step], (reason) => new ChildFailed2({ step: launch.step, loop: launch.loop, reason })))),
3759
+ awaitEvent: (launch) => {
3760
+ const event = script.events?.[launch.step];
3761
+ return resolve(eventDeferred2(launch.step), launch.token, event === undefined ? Exit3.fail(new WaitTimedOut2({ step: launch.step, event: launch.event })) : Exit3.succeed(event));
3762
+ },
3763
+ startVerification: (launch) => {
3764
+ const scripted = script.verifications?.[launch.step];
3765
+ return resolve(verifyDeferred2(launch.step), launch.token, scripted instanceof ScriptedFailure2 ? Exit3.fail(new StepFailed2({ step: launch.step, reason: scripted.reason })) : Exit3.succeed(scripted ?? {
3766
+ revision: launch.revision ?? "head",
3767
+ tree: launch.revision ?? "head",
3768
+ passed: true,
3769
+ checks: []
3770
+ }));
3771
+ }
3772
+ };
3773
+ };
3774
+ var loopWorkflow2 = (loop) => Workflow.make(`kitman-loop/${loop.id}`, {
3775
+ payload: { input: Schema20.Json },
3776
+ idempotencyKey: () => loop.id,
3777
+ success: loop.output,
3778
+ error: Schema20.declare((_error) => true)
3779
+ });
3780
+ var executeLoop2 = (loop, runtime) => ({ input }) => Effect6.gen(function* () {
3781
+ const decoded = yield* Schema20.decodeEffect(Schema20.toCodecJson(loop.input))(input).pipe(Effect6.mapError((error) => new InputInvalid2({ loop: loop.id, message: error.message })));
3782
+ const run = LoopRun2.of({
3783
+ loop: loop.id,
3784
+ agents: loop.agents,
3785
+ granted: runtime.granted,
3786
+ secrets: new Set(loop.secrets),
3787
+ names: new Set,
3788
+ steps: []
3789
+ });
3790
+ runtime.onRun?.(run);
3791
+ return yield* loop.run(decoded).pipe(Effect6.provideService(LoopRun2, run), Effect6.provideService(LoopHost2, runtime.host), Effect6.provideService(ChangeRequestActivity2, runtime.activities.changeRequest), Effect6.provideService(WriteBackActivity2, runtime.activities.writeBack), Effect6.provideService(ArtifactActivity2, runtime.activities.artifact), Effect6.provideService(NoteActivity2, runtime.activities.note), Effect6.provideService(CommentActivity2, runtime.activities.comment), Effect6.provideService(CreateTasksActivity2, runtime.activities.createTasks), Effect6.provideService(IntegrationBranchActivity2, runtime.activities.integrationBranch), Effect6.provideService(MergeChangeRequestActivity2, runtime.activities.mergeChangeRequest), Effect6.provideService(ReleaseActivity2, runtime.activities.release));
3792
+ });
3793
+ var testLoop2 = (loop, script) => {
3794
+ const journal = {
3795
+ activities: { ...script.journal?.activities },
3796
+ deferreds: { ...script.journal?.deferreds }
3797
+ };
3798
+ const ran = [];
3799
+ const agentLaunches = [];
3800
+ const childLaunches = [];
3801
+ let latestSteps = [];
3802
+ const granted = new Set((script.grant ?? loop.capabilities).filter((capability) => loop.capabilities.includes(capability)));
3803
+ const activities = { ...defaultActivities, ...script.activities };
3804
+ const workflow = loopWorkflow2(loop);
3805
+ const execute = (payload) => Effect6.gen(function* () {
3806
+ const engine = yield* WorkflowEngine.WorkflowEngine;
3807
+ return yield* executeLoop2(loop, {
3808
+ host: scriptedHost(script, engine, agentLaunches, childLaunches),
3809
+ activities,
3810
+ granted,
3811
+ onRun: (run) => {
3812
+ latestSteps = run.steps;
3813
+ }
3814
+ })(payload).pipe(Effect6.provideService(WorkflowEngine.WorkflowEngine, journaled(engine, journal, ran)));
3815
+ });
3816
+ return Effect6.gen(function* () {
3817
+ const result = yield* Effect6.exit(workflow.execute({ input: script.input }).pipe(Effect6.provideService(ConfigProvider.ConfigProvider, ConfigProvider.fromUnknown(script.secrets ?? {}))));
3818
+ return { result, steps: latestSteps, journal, activities: ran, agentLaunches, childLaunches };
3819
+ }).pipe(Effect6.provide(workflow.toLayer(execute).pipe(Layer.provideMerge(WorkflowEngine.layerMemory))));
3820
+ };
3821
+ // packages/sdk/src/loop/review.ts
3822
+ import * as Schema21 from "effect/Schema";
3823
+ var Severity2 = Schema21.Literals(["blocker", "major", "minor"]);
3824
+ var Finding2 = Schema21.Struct({
3825
+ severity: Severity2,
3826
+ file: Schema21.String,
3827
+ line: Schema21.Int,
3828
+ detail: Schema21.String
3829
+ });
3830
+ var MergedFinding2 = Schema21.Struct({
3831
+ id: Schema21.String,
3832
+ ...Finding2.fields,
3833
+ seats: Schema21.Array(Schema21.String)
3834
+ });
3835
+ var Rebuttal2 = Schema21.Struct({ findingId: Schema21.String, reason: Schema21.String });
3836
+ var RebuttalVerdict2 = Schema21.Struct({ findingId: Schema21.String, accepted: Schema21.Boolean });
3837
+ var ScopeJudgement2 = Schema21.Struct({ met: Schema21.Boolean, unmet: Schema21.Array(Schema21.String) });
3838
+ var rank = { blocker: 0, major: 1, minor: 2 };
3839
+ var isBlocking2 = (finding) => finding.severity !== "minor";
3840
+ var mergeFindings2 = (bySeat) => {
3841
+ const merged = new Map;
3842
+ for (const [seat, findings] of Object.entries(bySeat))
3843
+ for (const finding of findings) {
3844
+ const id = `${finding.file}:${finding.line}`;
3845
+ const known = merged.get(id);
3846
+ const seats = [...new Set([...known?.seats ?? [], seat])];
3847
+ const worst = known === undefined || rank[finding.severity] < rank[known.severity] ? finding : known;
3848
+ merged.set(id, { id, severity: worst.severity, file: worst.file, line: worst.line, detail: worst.detail, seats });
3849
+ }
3850
+ return [...merged.values()].toSorted((left, right) => rank[left.severity] - rank[right.severity]);
3851
+ };
3852
+ var splitDisputed2 = (findings, rebuttals) => {
3853
+ const disputed = [];
3854
+ const undisputed = [];
3855
+ for (const finding of findings) {
3856
+ const rebuttal = rebuttals.find((entry) => entry.findingId === finding.id);
3857
+ if (rebuttal === undefined)
3858
+ undisputed.push(finding);
3859
+ else
3860
+ disputed.push({ finding, rebuttal });
3861
+ }
3862
+ return { disputed, undisputed };
3863
+ };
3864
+ var settleRound2 = (round) => {
3865
+ const { disputed, undisputed } = splitDisputed2(round.findings, round.rebuttals);
3866
+ const accepted = (entry) => {
3867
+ const verdicts = round.verdicts.filter((verdict) => verdict.findingId === entry.finding.id);
3868
+ return verdicts.length > 0 && verdicts.every((verdict) => verdict.accepted);
3869
+ };
3870
+ return {
3871
+ open: undisputed,
3872
+ withdrawn: disputed.filter(accepted),
3873
+ standing: disputed.filter((entry) => !accepted(entry))
3874
+ };
3875
+ };
3876
+ var rallyStop2 = (input) => {
3877
+ const open = input.settled.open.filter(isBlocking2).map((finding) => finding.id);
3878
+ const standing = input.settled.standing.flatMap((entry) => isBlocking2(entry.finding) ? [entry.finding.id] : []);
3879
+ const unsettled = [...open, ...standing];
3880
+ const stop = (reason) => ({ stop: true, reason, unsettled });
3881
+ if (unsettled.length === 0)
3882
+ return stop("settled");
3883
+ if (standing.length > 0)
3884
+ return stop("dispute_stands");
3885
+ if (input.previous !== undefined && sameIds(input.previous, unsettled))
3886
+ return stop("findings_returned");
3887
+ return input.round >= input.maxRounds ? stop("round_cap") : { stop: false };
3888
+ };
3889
+ var sameIds = (left, right) => left.length === right.length && left.every((id) => right.includes(id));
3890
+ // packages/sdk/src/loop/check.ts
3891
+ import * as Cause2 from "effect/Cause";
3892
+ import * as Effect7 from "effect/Effect";
3893
+ import * as Exit5 from "effect/Exit";
3894
+ import * as Predicate2 from "effect/Predicate";
3895
+ import * as Schema22 from "effect/Schema";
3896
+ class CheckFailed2 extends Schema22.TaggedError()("CheckFailed", {
3897
+ loop: Schema22.String,
3898
+ check: Schema22.String,
3899
+ reason: Schema22.String
3900
+ }) {
3901
+ get detail() {
3902
+ return `Check "${this.check}": ${this.reason}`;
3903
+ }
3904
+ get message() {
3905
+ return `Loop "${this.loop}": ${this.detail}`;
3906
+ }
3907
+ }
3908
+
3909
+ class StepNamedTwice2 extends Schema22.TaggedError()("StepNamedTwice", {
3910
+ loop: Schema22.String,
3911
+ check: Schema22.String,
3912
+ step: Schema22.String
3913
+ }) {
3914
+ get detail() {
3915
+ return `Check "${this.check}": Step "${this.step}" is named twice`;
3916
+ }
3917
+ get message() {
3918
+ return `Loop "${this.loop}": ${this.detail}`;
3919
+ }
3920
+ }
3921
+
3922
+ class ReplayDiverged2 extends Schema22.TaggedError()("ReplayDiverged", {
3923
+ loop: Schema22.String,
3924
+ check: Schema22.String,
3925
+ first: Schema22.Array(Schema22.String),
3926
+ replay: Schema22.Array(Schema22.String),
3927
+ rerun: Schema22.Array(Schema22.String)
3928
+ }) {
3929
+ get detail() {
3930
+ const steps = (names) => names.join(", ") || "no Steps";
3931
+ return `Check "${this.check}": its replay from the journal diverged; it took ${steps(this.first)} and then ${steps(this.replay)}${this.rerun.length > 0 ? `, running ${this.rerun.join(", ")} again` : ""}. Keep effects and randomness inside Activities.`;
3932
+ }
3933
+ get message() {
3934
+ return `Loop "${this.loop}": ${this.detail}`;
3935
+ }
3936
+ }
3937
+ var LoopCheckError2 = Schema22.Union([CheckFailed2, StepNamedTwice2, ReplayDiverged2]);
3938
+ var checkLoop2 = (loop, check) => Effect7.gen(function* () {
3939
+ const first = yield* testLoop2(loop, check.script);
3940
+ if (Exit5.isFailure(first.result)) {
3941
+ const error = Cause2.squash(first.result.cause);
3942
+ if (Predicate2.isTagged(error, "DuplicateStep") && Predicate2.hasProperty(error, "step"))
3943
+ return yield* new StepNamedTwice2({ loop: loop.id, check: check.name, step: String(error.step) });
3944
+ return yield* new CheckFailed2({
3945
+ loop: loop.id,
3946
+ check: check.name,
3947
+ reason: error instanceof Error ? error.message : String(error)
3948
+ });
3949
+ }
3950
+ const replay = yield* testLoop2(loop, { ...check.script, journal: first.journal });
3951
+ const names = (steps) => steps.map((step) => step.name);
3952
+ if (replay.activities.length > 0 || names(replay.steps).join() !== names(first.steps).join())
3953
+ return yield* new ReplayDiverged2({
3954
+ loop: loop.id,
3955
+ check: check.name,
3956
+ first: names(first.steps),
3957
+ replay: names(replay.steps),
3958
+ rerun: replay.activities
3959
+ });
3960
+ });
3961
+ // packages/sdk/src/loop/config.ts
3962
+ var defineConfig2 = (config) => config;
3963
+ export { guard, Id, Timestamp, AgentSandboxNetwork, LoopStepOutput, StepBrief, LoopCapabilities2, LoopManifest, AgentDeclaration, KitInstallationDeclaration, KitAssignmentDeclaration, PackageDeclarations, LoopOutcome2, defineLoop2, ManifestInvalid2, jsonSchemaOf2, loopManifest2, EvidenceCheck2, VerifyResult2, OutcomeTable2, evidenceGate2, StepFailed2, OutputInvalid2, QuestionRefused2, WaitTimedOut2, ChildFailed2, CapabilityDenied2, DuplicateStep2, InputInvalid2, LoopEvent2, LoopRun2, LoopHost2, agentWorkDeferred2, answerDeferred2, childDeferred2, eventDeferred2, verifyDeferred2, takeStep2, agentWork2, ask2, call2, waitFor2, verify2, suggestVerification2, PlanTicket2, PlanTickets2, BlockingCycle2, planWaves2, ChangeRequestRequest2, ChangeRequestResult2, WriteBackMilestones2, WriteBackRequest2, ArtifactRequest2, ArtifactResult2, NoteRequest2, CreateTasksRequest2, CreateTasksResult2, IntegrationBranchRequest2, IntegrationBranch2, MergeChangeRequestRequest2, MergeResult2, CommentRequest2, ReleaseRequest2, ReleaseResult2, ChangeRequestActivity2, WriteBackActivity2, ArtifactActivity2, NoteActivity2, CommentActivity2, CreateTasksActivity2, IntegrationBranchActivity2, MergeChangeRequestActivity2, ReleaseActivity2, changeRequest2, writeBack2, artifact2, note2, comment2, createTasks2, integrationBranch2, mergeChangeRequest2, release2, LoopJournal2, ScriptedFailure2, scriptedFailure2, loopWorkflow2, executeLoop2, testLoop2, Severity2, Finding2, MergedFinding2, Rebuttal2, RebuttalVerdict2, ScopeJudgement2, isBlocking2, mergeFindings2, splitDisputed2, settleRound2, rallyStop2, CheckFailed2, StepNamedTwice2, ReplayDiverged2, LoopCheckError2, checkLoop2, defineConfig2 };