archal 0.9.20 → 0.10.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 (90) hide show
  1. package/README.md +59 -159
  2. package/agents/openclaw/Dockerfile +2 -1
  3. package/agents/openclaw/README.md +10 -17
  4. package/agents/openclaw/drive.mjs +21 -31
  5. package/agents/openclaw/extract-openclaw-response-text.mjs +49 -0
  6. package/agents/openclaw/scenarios/acceptance/github-escalation-and-cleanup.md +43 -0
  7. package/agents/openclaw/scenarios/acceptance/jira-linear-release-triage.md +39 -0
  8. package/agents/openclaw/scenarios/acceptance/multi-clone-customer-risk-review.md +45 -0
  9. package/agents/openclaw/scenarios/acceptance/slack-incident-handoff.md +42 -0
  10. package/agents/openclaw/scenarios/acceptance/stripe-dunning-remediation.md +40 -0
  11. package/agents/openclaw/scenarios/close-stale-issues.md +35 -0
  12. package/agents/openclaw/workspace/TOOLS.md +19 -0
  13. package/clone-assets/calcom/tools.json +1705 -153
  14. package/clone-assets/clickup/tools.json +2528 -541
  15. package/clone-assets/customerio/tools.json +2108 -144
  16. package/clone-assets/github/tools.json +1 -2
  17. package/clone-assets/gitlab/tools.json +10087 -398
  18. package/clone-assets/hubspot/tools.json +198 -0
  19. package/clone-assets/linear/tools.json +41 -1
  20. package/clone-assets/sentry/tools.json +2264 -188
  21. package/clone-assets/stripe/tools.json +114 -0
  22. package/clone-assets/webflow/tools.json +1895 -125
  23. package/dist/{autoloop-worker-types-BEb_E44z.d.cts → autoloop-worker-types-CHaclqtD.d.cts} +23 -59
  24. package/dist/cli.cjs +107175 -126959
  25. package/dist/commands/{autoloop-hosted-worker.cjs → autoloop-hosted-control-plane-client.cjs} +25657 -42736
  26. package/dist/commands/{autoloop-hosted-worker.d.cts → autoloop-hosted-control-plane-client.d.cts} +32 -42
  27. package/dist/commands/autoloop-pr-verification.cjs +607 -522
  28. package/dist/commands/autoloop-pr-verification.d.cts +3 -1
  29. package/dist/commands/autoloop-result-parser.cjs +2474 -2373
  30. package/dist/commands/autoloop-result-parser.d.cts +159 -2
  31. package/dist/commands/autoloop-worker.cjs +14565 -12240
  32. package/dist/commands/autoloop-worker.d.cts +10 -5
  33. package/dist/eval-shim.mjs +216 -0
  34. package/dist/index.cjs +15 -2
  35. package/dist/index.d.cts +3 -1
  36. package/dist/layer-1-ziaLpfLr.d.cts +62 -0
  37. package/dist/metafile-cjs.json +1 -0
  38. package/dist/reporter-entry.js +3 -0
  39. package/dist/{replay.cjs → sdk/index.cjs} +42979 -40973
  40. package/dist/sdk/index.d.cts +626 -0
  41. package/dist/vitest/{chunk-6CBYFCFK.js → chunk-2PDHTPZC.js} +289 -89
  42. package/dist/vitest/{chunk-ARVS45PP.js → chunk-7L4BBB6M.js} +123 -274
  43. package/dist/vitest/index.cjs +500 -816
  44. package/dist/vitest/index.d.ts +16 -81
  45. package/dist/vitest/index.js +40 -409
  46. package/dist/vitest/runtime/hosted-session-reaper.cjs +143 -293
  47. package/dist/vitest/runtime/hosted-session-reaper.js +1 -1
  48. package/dist/vitest/runtime/setup-files.js +2 -2
  49. package/manifest.json +9 -0
  50. package/package.json +14 -13
  51. package/skills/archal-agent/SKILL.md +0 -1
  52. package/skills/autoloop/SKILL.md +288 -273
  53. package/skills/autoloop/references/hosted-sources.md +49 -17
  54. package/skills/autoloop/references/trace-schema-mapping.md +83 -52
  55. package/skills/eval/SKILL.md +16 -48
  56. package/skills/free-account/SKILL.md +103 -0
  57. package/skills/install-agent/SKILL.md +16 -35
  58. package/skills/onboard/SKILL.md +13 -70
  59. package/skills/scenario/SKILL.md +30 -27
  60. package/skills/seed/SKILL.md +7 -6
  61. package/skills/vitest/SKILL.md +3 -2
  62. package/agents/github-octokit/.archal.json +0 -8
  63. package/agents/github-octokit/Dockerfile +0 -8
  64. package/agents/github-octokit/README.md +0 -113
  65. package/agents/github-octokit/agent.mjs +0 -54
  66. package/agents/github-octokit/package.json +0 -9
  67. package/agents/github-octokit/scenarios/test-repo-access.md +0 -27
  68. package/agents/google-workspace-local-tools/Dockerfile +0 -6
  69. package/agents/google-workspace-local-tools/README.md +0 -58
  70. package/agents/google-workspace-local-tools/agent.mjs +0 -196
  71. package/agents/google-workspace-local-tools/archal-harness.json +0 -7
  72. package/agents/google-workspace-local-tools/run-input.yaml +0 -16
  73. package/agents/google-workspace-local-tools/scenario.md +0 -29
  74. package/agents/hermes/.archal.json +0 -8
  75. package/agents/hermes/Dockerfile +0 -46
  76. package/agents/hermes/README.md +0 -87
  77. package/agents/hermes/SOUL.md +0 -27
  78. package/agents/hermes/config.yaml +0 -34
  79. package/agents/hermes/drive.mjs +0 -113
  80. package/agents/hermes/scenarios/stripe-customers-read-only.md +0 -32
  81. package/agents/pagination-test/README.md +0 -24
  82. package/agents/pagination-test/scenario.md +0 -24
  83. package/agents/replay-capsule-harness/README.md +0 -29
  84. package/agents/replay-capsule-harness/observability-install-offline-e2e.mts +0 -1517
  85. package/agents/replay-capsule-harness/replay-capsule-e2e.mjs +0 -104
  86. package/dist/harness.cjs +0 -63
  87. package/dist/harness.d.cts +0 -20
  88. package/dist/replay.d.cts +0 -4625
  89. package/dist/scenarios.cjs +0 -80343
  90. package/dist/scenarios.d.cts +0 -562
@@ -1,5 +1,6 @@
1
- import { b as AutoloopWorkerJob, d as AzureCodexAuth, E as E2BAutoloopWorkerOptions, e as AutoloopWorker } from '../autoloop-worker-types-BEb_E44z.cjs';
2
- export { f as AutoloopGithubInstallationTokenContext, g as AutoloopWorkerError, c as AutoloopWorkerResult, i as isAutoloopWorkerError, p as preflightGithubAutoloopPermissions } from '../autoloop-worker-types-BEb_E44z.cjs';
1
+ import { A as AutoloopWorkerJob, C as CodexAuth, E as E2BAutoloopWorkerOptions, b as AutoloopWorker } from '../autoloop-worker-types-CHaclqtD.cjs';
2
+ export { c as AutoloopGithubInstallationTokenContext, d as AutoloopWorkerError, a as AutoloopWorkerResult, e as AzureCodexAuth, O as OpenAICodexAuth, i as isAutoloopWorkerError, p as preflightGithubAutoloopPermissions } from '../autoloop-worker-types-CHaclqtD.cjs';
3
+ import '../layer-1-ziaLpfLr.cjs';
3
4
 
4
5
  declare const PHASES: readonly [{
5
6
  readonly id: "01-grade" | "02-seed" | "03-reproduce" | "04-fix-pr";
@@ -35,7 +36,7 @@ declare function buildSandboxPhaseEnvs(input: {
35
36
  contentHash?: string;
36
37
  repoRemote: string;
37
38
  gitRepository?: string;
38
- codexAuth?: AzureCodexAuth;
39
+ codexAuth?: CodexAuth;
39
40
  archalEnv: Record<string, string>;
40
41
  harnessModelEnv?: Record<string, string>;
41
42
  nativeHarnessRuntimeEnv?: Record<string, string>;
@@ -46,6 +47,10 @@ declare function buildSandboxPhaseEnvs(input: {
46
47
  ragReplayPackagePath?: string;
47
48
  ragAnswerBenchmarkPath?: string;
48
49
  ragRetrieverReplayPath?: string;
50
+ controlPlaneCloneFree?: boolean;
51
+ controlPlaneHarnessCommand?: string;
52
+ controlPlaneHarnessArgs?: string[];
53
+ controlPlaneJudgePrompt?: string;
49
54
  operatorEnv?: NodeJS.ProcessEnv;
50
55
  }): Record<'setup' | (typeof PHASES)[number]['id'], Record<string, string>>;
51
56
  declare function resolveArchalSandboxPackage(_cliVersion?: string, env?: NodeJS.ProcessEnv): string;
@@ -54,7 +59,7 @@ declare function resolveCodexReasoningEffort(env: NodeJS.ProcessEnv): string;
54
59
 
55
60
  declare function buildSetupShellCommand(): string;
56
61
  declare function buildFixPrPhaseShellCommand(phaseId: AutoloopPhaseId): string;
57
- declare function buildGradePhaseShellCommand(phaseId: AutoloopPhaseId): string;
62
+ declare function buildGradePhaseShellCommand(_phaseId: AutoloopPhaseId): string;
58
63
  declare function buildSeedTemplateReproducePhaseShellCommand(phaseId: AutoloopPhaseId): string;
59
64
  declare function buildSeedPhaseShellCommand(phaseId: AutoloopPhaseId): string;
60
65
 
@@ -94,4 +99,4 @@ declare const __autoloopWorkerTestInternals: {
94
99
  restoreReusableSeedBundle: typeof restoreReusableSeedBundle;
95
100
  };
96
101
 
97
- export { AutoloopWorker, AutoloopWorkerJob, AzureCodexAuth, __autoloopWorkerTestInternals, buildCodexPrompt, buildFixPrPhaseShellCommand, buildGradePhaseShellCommand, buildSandboxPhaseEnvs, buildSeedPhaseShellCommand, buildSeedPrompt, buildSeedTemplateReproducePhaseShellCommand, buildSetupShellCommand, createE2BAutoloopWorker, localRepoSnapshotPackage, redactAutoloopTraceContents, resolveArchalSandboxPackage, resolveArchalSandboxPackageArchivePath, resolveCodexReasoningEffort, resolveNativeHarnessRuntimeEnv, resolveSandboxPhaseCommandTimeoutMs, sanitizeAutoloopTraceContentsForSandbox };
102
+ export { AutoloopWorker, AutoloopWorkerJob, CodexAuth, __autoloopWorkerTestInternals, buildCodexPrompt, buildFixPrPhaseShellCommand, buildGradePhaseShellCommand, buildSandboxPhaseEnvs, buildSeedPhaseShellCommand, buildSeedPrompt, buildSeedTemplateReproducePhaseShellCommand, buildSetupShellCommand, createE2BAutoloopWorker, localRepoSnapshotPackage, redactAutoloopTraceContents, resolveArchalSandboxPackage, resolveArchalSandboxPackageArchivePath, resolveCodexReasoningEffort, resolveNativeHarnessRuntimeEnv, resolveSandboxPhaseCommandTimeoutMs, sanitizeAutoloopTraceContentsForSandbox };
@@ -0,0 +1,216 @@
1
+ // Eval-file runner shim. `archal run path/to/file.eval.ts` spawns this file
2
+ // in a subprocess (under `npx tsx` for TypeScript eval files, plain node
3
+ // otherwise) so the eval file's `import 'archal'` resolves to the consumer's
4
+ // own installed copy, not the CLI's bundled sources. It stays plain ESM with
5
+ // node builtins only and is staged into dist/ untouched by tsup — bundling to
6
+ // CJS would rewrite the dynamic import below into `require()`, which cannot
7
+ // load ESM eval files.
8
+ //
9
+ // Protocol: one JSON event per line on stdout, prefixed with the sentinel.
10
+ // Everything else on stdout is the eval file's own output and is passed
11
+ // through by the parent. The event shapes mirror the EvalShimEvent union in
12
+ // run-eval-file.ts. Exit code is 0 whenever the protocol completed (a `done`
13
+ // event was emitted) — pass/fail policy belongs to the parent; only a load
14
+ // failure exits non-zero.
15
+ import { pathToFileURL } from 'node:url';
16
+
17
+ // The parent passes a per-run random prefix so a line the eval file happens to
18
+ // print cannot accidentally collide with the protocol. This is collision
19
+ // avoidance, NOT a trust boundary: the eval file is imported into this same
20
+ // process and could read this value or forge events — that is acceptable
21
+ // because it is the user's own code running with the user's own credentials.
22
+ // Fall back to the fixed literal (must match EVAL_SHIM_SENTINEL in
23
+ // run-eval-file.ts) when invoked without it.
24
+ const SENTINEL = process.env.ARCHAL_EVAL_SENTINEL || 'ARCHAL_EVAL_EVENT ';
25
+
26
+ function emit(event) {
27
+ process.stdout.write(SENTINEL + JSON.stringify(event) + '\n');
28
+ }
29
+
30
+ // Duck-typed on the SDK Scenario shape ({ definition, run() }) instead of a
31
+ // brand so eval files keep working across archal versions and across multiple
32
+ // archal copies in one node_modules tree. `criteria` is intentionally NOT
33
+ // required: the SDK marks it optional (a scenario with no criteria is scored
34
+ // on exec success alone), so requiring it here would silently hide valid
35
+ // scenarios.
36
+ function isScenarioExport(value) {
37
+ return (
38
+ typeof value === 'object' &&
39
+ value !== null &&
40
+ typeof value.run === 'function' &&
41
+ typeof value.definition === 'object' &&
42
+ value.definition !== null &&
43
+ typeof value.definition.task === 'string'
44
+ );
45
+ }
46
+
47
+ function errorMessage(err) {
48
+ return err instanceof Error ? err.message : String(err);
49
+ }
50
+
51
+ // Mirrors SYNTHETIC_TRACE_TOOL_NAMES in @archal/evaluator's trace-activity.ts
52
+ // (the shim stays dependency-free, so the three names are duplicated here).
53
+ // Synthetic proxy/canary entries are bookkeeping, not agent action, and must
54
+ // not make a do-nothing agent look like it exercised the scenario.
55
+ const SYNTHETIC_TRACE_TOOL_NAMES = new Set([
56
+ 'sandbox_proxy_intercept',
57
+ 'sandbox_proxy_passthrough',
58
+ 'sandbox_canary_scan',
59
+ ]);
60
+
61
+ function countAgentToolCalls(trace) {
62
+ return trace.filter(
63
+ (entry) =>
64
+ entry !== null &&
65
+ typeof entry === 'object' &&
66
+ typeof entry.toolName === 'string' &&
67
+ !SYNTHETIC_TRACE_TOOL_NAMES.has(entry.toolName),
68
+ ).length;
69
+ }
70
+
71
+ function scenarioRunOptions(options) {
72
+ const runOptions = {};
73
+ if (typeof options.runs === 'number') {
74
+ runOptions.runs = options.runs;
75
+ }
76
+ if (typeof options.timeout === 'number') {
77
+ runOptions.timeout = options.timeout;
78
+ }
79
+ // The SDK exposes one run-time model option (`model`), advertised to the
80
+ // agent as AGENT_MODEL. The CLI's --agent-model maps onto it. --model
81
+ // selects the evaluator/judge model, which the SDK configures separately
82
+ // (there is no evaluator run-option seam yet), so it is intentionally not
83
+ // forwarded here rather than passed under a key scenario.run() ignores.
84
+ if (typeof options.agentModel === 'string') {
85
+ runOptions.model = options.agentModel;
86
+ }
87
+ if (
88
+ typeof options.agent === 'object' &&
89
+ options.agent !== null &&
90
+ typeof options.agent.command === 'string'
91
+ ) {
92
+ runOptions.agent = {
93
+ command: options.agent.command,
94
+ ...(Array.isArray(options.agent.args) ? { args: options.agent.args } : {}),
95
+ ...(typeof options.agent.cwd === 'string' ? { cwd: options.agent.cwd } : {}),
96
+ ...(typeof options.agent.env === 'object' && options.agent.env !== null
97
+ ? { env: options.agent.env }
98
+ : {}),
99
+ };
100
+ }
101
+ return runOptions;
102
+ }
103
+
104
+ async function main() {
105
+ const [evalPath, optionsJson] = process.argv.slice(2);
106
+ if (!evalPath) {
107
+ emit({ type: 'load-error', message: 'eval-shim: missing eval file path argument.' });
108
+ process.exitCode = 1;
109
+ return;
110
+ }
111
+
112
+ let options = {};
113
+ if (optionsJson) {
114
+ try {
115
+ options = JSON.parse(optionsJson);
116
+ } catch (err) {
117
+ emit({ type: 'load-error', message: `eval-shim: invalid options JSON: ${errorMessage(err)}` });
118
+ process.exitCode = 1;
119
+ return;
120
+ }
121
+ }
122
+
123
+ let evalModule;
124
+ try {
125
+ evalModule = await import(pathToFileURL(evalPath).href);
126
+ } catch (err) {
127
+ emit({ type: 'load-error', message: errorMessage(err) });
128
+ process.exitCode = 1;
129
+ return;
130
+ }
131
+
132
+ // Inspect each export inside its own try/catch: a throwing getter or a proxy
133
+ // trap on one export must not abort discovery of the remaining (valid)
134
+ // scenarios and turn into an opaque "exited unexpectedly".
135
+ const scenarios = [];
136
+ for (const [exportName, value] of Object.entries(evalModule)) {
137
+ try {
138
+ if (!isScenarioExport(value)) {
139
+ continue;
140
+ }
141
+ const definitionName = value.definition.name;
142
+ scenarios.push({
143
+ exportName,
144
+ // The SDK documents this fallback: a scenario's name defaults to its
145
+ // export name when omitted. An empty/whitespace name falls back too.
146
+ name:
147
+ typeof definitionName === 'string' && definitionName.trim()
148
+ ? definitionName
149
+ : exportName,
150
+ scenario: value,
151
+ });
152
+ } catch {
153
+ continue;
154
+ }
155
+ }
156
+
157
+ emit({
158
+ type: 'discovered',
159
+ scenarios: scenarios.map(({ exportName, name }) => ({ exportName, name })),
160
+ });
161
+
162
+ for (const { exportName, name, scenario } of scenarios) {
163
+ emit({ type: 'scenario-start', exportName, name });
164
+ if (options.requireDirectAgent === true && !options.agent && !scenario.definition.agent) {
165
+ emit({
166
+ type: 'scenario-error',
167
+ exportName,
168
+ name,
169
+ message:
170
+ 'This eval scenario resolves to a harness default, but eval files require a direct agent command. ' +
171
+ 'Set an "agent" block in .archal.json or declare the agent in scenario({ agent }).',
172
+ });
173
+ continue;
174
+ }
175
+ try {
176
+ const result = await scenario.run(scenarioRunOptions(options));
177
+ emit({
178
+ type: 'scenario-result',
179
+ exportName,
180
+ name,
181
+ satisfaction: result.satisfaction,
182
+ // judgment is absent when the scenario declares no criteria (the SDK
183
+ // scores those on exec success alone); fall back to the attempt's own
184
+ // satisfaction/passed and an empty criteria list instead of throwing.
185
+ runs: result.runs.map((run) => ({
186
+ score: run.judgment?.score ?? run.satisfaction,
187
+ // run.passed is the SDK's verdict and already folds in the
188
+ // zero-tool-call gate; the judgment's own passed is only a fallback
189
+ // for hand-rolled run shapes that never set a per-run passed.
190
+ passed: run.passed ?? run.judgment?.passed,
191
+ criteria: run.judgment?.criteria ?? [],
192
+ // The parent's pass policy needs this to fail runs whose agent
193
+ // never touched a clone, mirroring the markdown runner's
194
+ // no-tool-calls outcome. The SDK computes it on each attempt
195
+ // (ScenarioAttemptResult.toolCallCount) and owns the zero-tool-call
196
+ // policy; the trace-derived count survives only as a fallback for
197
+ // older installed SDK copies that predate the field. Absent both,
198
+ // activity is unknown, not zero, and must not fire the structural
199
+ // failure with a misleading zero-tool-call message.
200
+ ...(typeof run.toolCallCount === 'number'
201
+ ? { toolCallCount: run.toolCallCount }
202
+ : Array.isArray(run.outcome?.trace)
203
+ ? { toolCallCount: countAgentToolCalls(run.outcome.trace) }
204
+ : {}),
205
+ ...(run.exec ? { exec: run.exec } : {}),
206
+ })),
207
+ });
208
+ } catch (err) {
209
+ emit({ type: 'scenario-error', exportName, name, message: errorMessage(err) });
210
+ }
211
+ }
212
+
213
+ emit({ type: 'done' });
214
+ }
215
+
216
+ await main();
package/dist/index.cjs CHANGED
@@ -1,7 +1,20 @@
1
1
  'use strict';
2
2
 
3
- const version = "0.9.20";
4
- const archal = { version };
3
+ const sdk = require('./sdk/index.cjs');
4
+ const version = "0.10.0";
5
+ const archal = { ...sdk, version };
5
6
 
6
7
  archal.default = archal;
7
8
  module.exports = archal;
9
+
10
+ // Keep Node CommonJS named-export detection explicit for ESM importers.
11
+ module.exports.benchmark = sdk.benchmark;
12
+ module.exports.check = sdk.check;
13
+ module.exports.clones = sdk.clones;
14
+ module.exports.criterion = sdk.criterion;
15
+ module.exports.entity = sdk.entity;
16
+ module.exports.judge = sdk.judge;
17
+ module.exports.publish = sdk.publish;
18
+ module.exports.reportAgentMetrics = sdk.reportAgentMetrics;
19
+ module.exports.scenario = sdk.scenario;
20
+ module.exports.version = version;
package/dist/index.d.cts CHANGED
@@ -1,3 +1,5 @@
1
+ export * from './sdk/index.cjs';
1
2
  export declare const version: string;
2
- declare const archal: { readonly version: string };
3
+ import * as sdk from './sdk/index.cjs';
4
+ declare const archal: typeof sdk & { readonly version: string };
3
5
  export default archal;
@@ -0,0 +1,62 @@
1
+ declare const AUTOLOOP_PHASES: readonly ["queued", "grade", "seed", "reproduce", "fix_pr", "done"];
2
+ declare const AUTOLOOP_ACTIVE_PHASES: readonly ["grade", "seed", "reproduce", "fix_pr"];
3
+ declare const AUTOLOOP_PHASE_HEALTH_STATUSES: readonly ["running", "completed", "stream_reconnect_recovered", "stalled_no_artifact", "timeout", "failed"];
4
+ declare const AUTOLOOP_TRACE_SOURCE_STATUSES: readonly ["active", "paused", "error", "disabled"];
5
+ type AutoloopExecutionPolicy = 'observe' | 'grade' | 'seed' | 'reproduce' | 'fix';
6
+ type AutoloopRunResultSubmissionPhaseResult = {
7
+ phase: 'grade';
8
+ status: 'passed' | 'failed' | 'flaky' | 'inconclusive' | 'infrastructure';
9
+ summary: string;
10
+ confidence?: number | null;
11
+ failureClass?: string | null;
12
+ payload?: unknown;
13
+ } | {
14
+ phase: 'seed';
15
+ status: 'seeded' | 'blocked' | 'failed';
16
+ summary: string;
17
+ payload?: unknown;
18
+ } | {
19
+ phase: 'reproduce';
20
+ status: 'reproduced' | 'not_reproduced' | 'flaky' | 'blocked';
21
+ summary: string;
22
+ reason?: string | null;
23
+ diagnostic?: string | null;
24
+ hasCloneEvidence?: boolean;
25
+ hasCriteriaEvidence?: boolean;
26
+ payload?: unknown;
27
+ replayPlan?: unknown;
28
+ regressionPack?: unknown;
29
+ assertionResult?: unknown;
30
+ } | {
31
+ phase: 'fix_pr';
32
+ status: 'pr_open' | 'checks_passing' | 'blocked' | 'failed';
33
+ summary: string;
34
+ issueUrl?: string | null;
35
+ prUrl?: string | null;
36
+ branchName?: string | null;
37
+ baseBranch?: string | null;
38
+ latestCheckState?: 'unknown' | 'pending' | 'passing' | 'failing' | 'blocked' | 'no_checks' | null;
39
+ localValidationStatus?: string | null;
40
+ blockingReason?: string | null;
41
+ postFixReproduceStatus?: string | null;
42
+ postFixReproduceReason?: string | null;
43
+ postFixReproduceHasCloneEvidence?: boolean;
44
+ postFixReproduceHasCriteriaEvidence?: boolean;
45
+ postFixReproduceIdentityMatchesPreFix?: boolean;
46
+ postFixReproduceCommitSha?: string | null;
47
+ postFixReproduceFailureSummary?: string | null;
48
+ postFixReproduceCloneEvidenceExpected?: boolean;
49
+ reproductionReverified?: boolean;
50
+ payload?: unknown;
51
+ };
52
+ type AutoloopRunResultSubmissionBody = Record<string, unknown>;
53
+ type AutoloopBenchmarkExportConfig = {
54
+ enabled: boolean;
55
+ };
56
+
57
+ type AutoloopTraceSourceStatus = (typeof AUTOLOOP_TRACE_SOURCE_STATUSES)[number];
58
+ type AutoloopPhase = (typeof AUTOLOOP_PHASES)[number];
59
+ type AutoloopActivePhase = (typeof AUTOLOOP_ACTIVE_PHASES)[number];
60
+ type AutoloopPhaseHealthStatus = (typeof AUTOLOOP_PHASE_HEALTH_STATUSES)[number];
61
+
62
+ export type { AutoloopRunResultSubmissionPhaseResult as A, AutoloopPhaseHealthStatus as a, AutoloopPhase as b, AutoloopExecutionPolicy as c, AutoloopBenchmarkExportConfig as d, AutoloopActivePhase as e, AutoloopTraceSourceStatus as f, AutoloopRunResultSubmissionBody as g };