@on-par/factory-cli 0.9.5-next.11 → 0.9.5-next.13

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.
@@ -0,0 +1,41 @@
1
+ import type { Octokit } from '@octokit/rest';
2
+ import type { writeLocalRunReport } from '@on-par/factory-core';
3
+ import type { CliDeps, ConfigLoaderKey, CoreOpKey, GitOpKey, IssueDecomposedError, IssueSkippedError, LaneEnvironmentPauseError, LaneParkError, ShellOpKey, readActiveProduct, resolveEnvironmentAcquirer, resolveLaneBaseUrl } from './index.js';
4
+ import type { FactoryOctokitOptions } from './octokit.js';
5
+ type ConfigLoaders = Required<Pick<CliDeps, ConfigLoaderKey>>;
6
+ type GitOps = Required<Pick<CliDeps, GitOpKey>>;
7
+ type ShellOps = Required<Pick<CliDeps, ShellOpKey>>;
8
+ type CoreOps = Required<Pick<CliDeps, CoreOpKey>>;
9
+ type PhaseOps = Required<Pick<CliDeps, 'planPhase' | 'buildPhase' | 'checkPhase' | 'shipPhase'>>;
10
+ /** index.ts's per-invocation ops, read at call time so main()/cmdRun deps injection reaches the ship flow. */
11
+ export interface ShipRuntime {
12
+ resolveConfigLoaders: (overrides: Partial<ConfigLoaders>) => ConfigLoaders;
13
+ resolveGitOps: (overrides: Partial<GitOps>) => GitOps;
14
+ resolveShellOps: (overrides: Partial<ShellOps>) => ShellOps;
15
+ resolveCoreOps: (overrides: Partial<CoreOps>) => CoreOps;
16
+ resolvePhaseOps: (overrides: Partial<PhaseOps>) => PhaseOps;
17
+ getRepoRoot: (shell: ShellOps) => Promise<string>;
18
+ getGitHubRepo: (shell: ShellOps) => Promise<string>;
19
+ getOctokit: (shell: ShellOps, options?: FactoryOctokitOptions) => Octokit;
20
+ worktreePathFor: (repoRoot: string, ghRepo: string, issueNum: number, prefix?: string, loaders?: ConfigLoaders) => string;
21
+ repoConfigFileFor: (repoRoot: string, absPath: string) => {
22
+ absPath: string;
23
+ relPath: string;
24
+ };
25
+ isCommandAvailableViaShell: (shell: ShellOps, cmd: string) => boolean;
26
+ readTextFileOrEmpty: (path: string) => string;
27
+ readActiveProduct: typeof readActiveProduct;
28
+ errorDetail: (err: unknown) => string;
29
+ resolveEnvironmentAcquirer: typeof resolveEnvironmentAcquirer;
30
+ resolveLaneBaseUrl: typeof resolveLaneBaseUrl;
31
+ /** The live coreOps.writeLocalRunReport, for runs that pass no per-call override. */
32
+ defaultWriteLocalRunReport: () => typeof writeLocalRunReport;
33
+ LaneParkError: typeof LaneParkError;
34
+ LaneEnvironmentPauseError: typeof LaneEnvironmentPauseError;
35
+ IssueSkippedError: typeof IssueSkippedError;
36
+ IssueDecomposedError: typeof IssueDecomposedError;
37
+ }
38
+ export declare function setShipRuntime(fn: () => ShipRuntime): void;
39
+ export declare function shipRuntime(): ShipRuntime;
40
+ export {};
41
+ //# sourceMappingURL=ship-runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ship-runtime.d.ts","sourceRoot":"","sources":["../../src/cli/ship-runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ // packages/cli/src/cli/ship-runtime.ts — accessor for index.ts's per-invocation ops, so the ship flow reads them live without a runtime import cycle (#2788)
2
+ let get;
3
+ export function setShipRuntime(fn) {
4
+ get = fn;
5
+ }
6
+ export function shipRuntime() {
7
+ if (!get)
8
+ throw new Error('ship runtime not registered: import ./index.js first');
9
+ return get();
10
+ }
11
+ //# sourceMappingURL=ship-runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ship-runtime.js","sourceRoot":"","sources":["../../src/cli/ship-runtime.ts"],"names":[],"mappings":"AAAA,6JAA6J;AA0D7J,IAAI,GAAoC,CAAC;AAEzC,MAAM,UAAU,cAAc,CAAC,EAAqB;IAClD,GAAG,GAAG,EAAE,CAAC;AACX,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;IAClF,OAAO,GAAG,EAAE,CAAC;AACf,CAAC"}
@@ -0,0 +1,140 @@
1
+ import type { Octokit } from '@octokit/rest';
2
+ import type { BenchmarkRunFailure, CheckSummary, EventKind, FactoryConfig, LocalOnlyPolicy, RunOutcome, RunPorts, RunRequest, SandboxPolicy, Workspace, WorkRequest, WorkRequestSourceKind, resolveEfficiencyPolicy, resolveSandboxPolicy, writeLocalRunReport, getFactoryPaths } from '@on-par/factory-core';
3
+ import { type SizeGateMode } from '@on-par/factory-core';
4
+ import type { CheckResumeRecord, WorktreeSandbox } from '@on-par/factory-core/internal';
5
+ import { resolveReviewFloorRules } from '@on-par/factory-core/internal';
6
+ import type { CliDeps, ConfigLoaderKey, GitOpKey } from './index.js';
7
+ export declare const TERMINAL_EVENT_KINDS: Set<EventKind>;
8
+ /** FACTORY_GITHUB=stub (#2652): record each `git push` ship runs in the stub's calls.jsonl. */
9
+ export declare function stubAwareShipPhase(shipPhase: NonNullable<RunPorts['shipPhase']>): NonNullable<RunPorts['shipPhase']>;
10
+ /** Logs the sandbox state for this run and returns the policy to wrap agent commands in, if any. */
11
+ export declare function logSandboxPolicy(opts: {
12
+ sandbox?: boolean;
13
+ }, sandboxPolicy: ReturnType<typeof resolveSandboxPolicy>, log: (type: EventKind, msg: string) => void): SandboxPolicy | undefined;
14
+ /** ADR-0147: slice k >= 2 builds on its own branch, so the slice plan is read before the worktree exists. */
15
+ export declare function findSliceIndex({ sizeGateMode, ctx, work, octokit, ghRepo, issueNum, }: {
16
+ sizeGateMode: SizeGateMode;
17
+ ctx?: {
18
+ localOnly?: LocalOnlyPolicy;
19
+ resumeFrom?: CheckResumeRecord;
20
+ };
21
+ work: WorkRequest;
22
+ octokit: Octokit;
23
+ ghRepo: string;
24
+ issueNum: number;
25
+ }): Promise<number | undefined>;
26
+ /** Sets up the run's workspace: reuse a kept worktree, create a factory worktree, or wrap the local-only one. */
27
+ export declare function setupRunWorkspace({ ctx, repoRoot, branch, worktree, log, worktreeSandbox, octokit, ghOwner, ghName, git, paths, }: {
28
+ ctx?: {
29
+ localOnly?: LocalOnlyPolicy;
30
+ resumeFrom?: CheckResumeRecord;
31
+ };
32
+ repoRoot: string;
33
+ branch: string;
34
+ worktree: string;
35
+ log: (type: EventKind, msg: string) => void;
36
+ worktreeSandbox: WorktreeSandbox | undefined;
37
+ octokit: Octokit;
38
+ ghOwner: string;
39
+ ghName: string;
40
+ git: Required<Pick<CliDeps, GitOpKey>>;
41
+ paths: ReturnType<typeof getFactoryPaths>;
42
+ }): Promise<Workspace>;
43
+ /** Rewrites the queue for a decomposed issue, then throws so the lane moves on to the children. */
44
+ export declare function decomposeQueue({ issueNum, childIssues, paths, planLog, }: {
45
+ issueNum: number;
46
+ childIssues: number[];
47
+ paths: ReturnType<typeof getFactoryPaths>;
48
+ planLog: (type: EventKind, msg: string) => void;
49
+ }): never;
50
+ /** Maps the core RunOutcome to the shipped branch name, or throws the park/pause error the lane expects. */
51
+ export declare function finishOutcome({ outcome, opts, ctx, paths, issueNum, worktree, terminalMessage, log, }: {
52
+ outcome: RunOutcome;
53
+ opts: {
54
+ interactive?: boolean;
55
+ };
56
+ ctx?: {
57
+ localOnly?: LocalOnlyPolicy;
58
+ };
59
+ paths: ReturnType<typeof getFactoryPaths>;
60
+ issueNum: number;
61
+ worktree: string;
62
+ terminalMessage: string | undefined;
63
+ log: (type: EventKind, msg: string) => void;
64
+ }): string;
65
+ /** Everything buildRunRequest reads from shipIssue's locals. */
66
+ export interface RunRequestInput {
67
+ issueNum: number;
68
+ ghRepo: string;
69
+ repoRoot: string;
70
+ branch: string;
71
+ specPath: string;
72
+ work: WorkRequest;
73
+ product: string | undefined;
74
+ runStartedAt: string;
75
+ lane: string | undefined;
76
+ opts: {
77
+ interactive?: boolean;
78
+ sandbox?: boolean;
79
+ };
80
+ ctx?: {
81
+ workSource?: {
82
+ kind: WorkRequestSourceKind;
83
+ params: unknown;
84
+ };
85
+ localOnly?: LocalOnlyPolicy;
86
+ resumeFrom?: CheckResumeRecord;
87
+ };
88
+ autoRework: boolean;
89
+ planApprovalEnabled: boolean;
90
+ factoryConfig: FactoryConfig;
91
+ repoConfig: Parameters<typeof resolveReviewFloorRules>[0];
92
+ classifierPolicy: {
93
+ enabled: boolean;
94
+ };
95
+ loaders: Pick<Required<Pick<CliDeps, ConfigLoaderKey>>, 'resolveSkipCI'>;
96
+ efficiency: ReturnType<typeof resolveEfficiencyPolicy>;
97
+ sizeGateMode: RunRequest['sizeGateMode'];
98
+ maxSlices: RunRequest['maxSlices'];
99
+ timeouts: RunRequest['timeouts'];
100
+ modelPins: RunRequest['modelPins'];
101
+ codexOff: boolean;
102
+ failoverSettings: RunRequest['failover'];
103
+ activeSandboxPolicy: SandboxPolicy | undefined;
104
+ processGroupGraceMs: number;
105
+ paths: ReturnType<typeof getFactoryPaths>;
106
+ }
107
+ export declare function buildRunRequest({ issueNum, ghRepo, repoRoot, branch, specPath, work, product, runStartedAt, lane, opts, ctx, autoRework, planApprovalEnabled, factoryConfig, repoConfig, classifierPolicy, loaders, efficiency, sizeGateMode, maxSlices, timeouts, modelPins, codexOff, failoverSettings, activeSandboxPolicy, processGroupGraceMs, paths, }: RunRequestInput): RunRequest;
108
+ export declare function maybeWriteLocalRunReport(opts: {
109
+ issueNum: number;
110
+ paths: ReturnType<typeof getFactoryPaths>;
111
+ startedAt: string;
112
+ outcome: 'ready' | 'failed' | 'parked' | 'escalated';
113
+ branch?: string;
114
+ worktree?: string;
115
+ specPath?: string;
116
+ route?: string;
117
+ reason?: string;
118
+ writeLocalRunReport?: typeof writeLocalRunReport;
119
+ }): Promise<string | undefined>;
120
+ export declare function maybeWriteBenchmarkArtifacts(opts: {
121
+ issueNum: number;
122
+ paths: ReturnType<typeof getFactoryPaths>;
123
+ ctx?: {
124
+ localOnly?: LocalOnlyPolicy;
125
+ artifactsDir?: string;
126
+ workRequest?: WorkRequest;
127
+ };
128
+ startedAt: string;
129
+ outcome: 'ready' | 'failed' | 'escalated';
130
+ branch?: string;
131
+ specPath?: string;
132
+ route?: string;
133
+ checkSummary?: CheckSummary;
134
+ reworkRounds?: number;
135
+ failure?: BenchmarkRunFailure;
136
+ reportPath?: string;
137
+ diffBase?: string;
138
+ log: (type: EventKind, msg: string) => void;
139
+ }): Promise<void>;
140
+ //# sourceMappingURL=ship-steps.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ship-steps.d.ts","sourceRoot":"","sources":["../../src/cli/ship-steps.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,273 @@
1
+ // packages/cli/src/cli/ship-steps.ts — named steps of the ship flow: run-report/benchmark writers, sandbox logging, RunRequest builder (#2788)
2
+ import { exec as execCb } from 'node:child_process';
3
+ import { writeFileSync } from 'node:fs';
4
+ import { join, resolve } from 'node:path';
5
+ import { promisify, styleText } from 'node:util';
6
+ import { GITHUB_ISSUE_SOURCE, listQueuedSteering, localOnlyWorkspace, resolveBuildPublish, resolveDesignRegressionBlock, resolveReadinessUpdateIssueBody, rewriteQueueForDecomposition, worktreeWorkspace, writeBenchmarkArtifacts, } from '@on-par/factory-core';
7
+ import { currentSlice, findOpenPR, findSlicePlanComment, resolveFilingPolicy, resolveReviewFloorRules, withFileLock, withGitLock, } from '@on-par/factory-core/internal';
8
+ import { recordGitPushes, resolveGitHubMode, GITHUB_STUB_CALLS_FILE } from './github-stub.js';
9
+ import { shipRuntime } from './ship-runtime.js';
10
+ // Captures the message of the last terminal event runIssue emits (ready/fail/
11
+ // escalate/held/conflict/ci-failed/timeout) so the LaneParkError the ship adapter
12
+ // raises carries the same diagnostic text shipIssue used to throw with —
13
+ // RunOutcome's parked variant carries only the ParkReason enum, not free text.
14
+ export const TERMINAL_EVENT_KINDS = new Set([
15
+ 'ready',
16
+ 'environment-released',
17
+ 'fail',
18
+ 'escalate',
19
+ 'held',
20
+ 'conflict',
21
+ 'config',
22
+ 'ci-failed',
23
+ 'ci-infra',
24
+ 'timeout',
25
+ ]);
26
+ /** FACTORY_GITHUB=stub (#2652): record each `git push` ship runs in the stub's calls.jsonl. */
27
+ export function stubAwareShipPhase(shipPhase) {
28
+ let shipPhaseForMode = shipPhase;
29
+ if (resolveGitHubMode(process.env) === 'stub') {
30
+ const base = shipPhase;
31
+ const stubCalls = join(resolve(process.env.FACTORY_GITHUB_STUB_DIR ?? ''), GITHUB_STUB_CALLS_FILE);
32
+ const defaultShipRunner = promisify(execCb);
33
+ const wrapped = (o) => base({ ...o, run: recordGitPushes(o.run ?? defaultShipRunner, stubCalls, o.branch) });
34
+ shipPhaseForMode = wrapped;
35
+ }
36
+ return shipPhaseForMode;
37
+ }
38
+ /** Logs the sandbox state for this run and returns the policy to wrap agent commands in, if any. */
39
+ export function logSandboxPolicy(opts, sandboxPolicy, log) {
40
+ let activeSandboxPolicy;
41
+ if (opts.sandbox === false) {
42
+ console.error(styleText('yellow', 'factory: sandbox disabled by --no-sandbox — agent runs are UNCONTAINED'));
43
+ log('sandbox-disabled', 'sandbox disabled by --no-sandbox');
44
+ }
45
+ else if (!sandboxPolicy) {
46
+ log('sandbox-disabled', 'sandbox disabled by config/FACTORY_SANDBOX');
47
+ }
48
+ else if (sandboxPolicy.runtime === 'none') {
49
+ log('sandbox-unavailable', 'no sandbox runtime found (sandbox-exec/firejail) — running uncontained');
50
+ }
51
+ else if (sandboxPolicy.runtime === 'docker-sandbox') {
52
+ // docker-sandbox's containment is the microVM created by worktreeWorkspace in shipIssue
53
+ // (#653), not a command-prefix wrap — activeSandboxPolicy stays undefined because
54
+ // wrapCommandInSandbox remains a no-op for this runtime. createMicroVm logs the
55
+ // actual outcome ('sandbox' on success, 'sandbox-unavailable' on fallback), so no
56
+ // speculative log is emitted here.
57
+ }
58
+ else {
59
+ activeSandboxPolicy = sandboxPolicy;
60
+ if (sandboxPolicy.allowHosts.length > 0) {
61
+ log('sandbox-degraded', `host-level egress filtering unavailable in v1; intended allowlist: ${sandboxPolicy.allowHosts.join(', ')}`);
62
+ }
63
+ }
64
+ return activeSandboxPolicy;
65
+ }
66
+ /** ADR-0147: slice k >= 2 builds on its own branch, so the slice plan is read before the worktree exists. */
67
+ export async function findSliceIndex({ sizeGateMode, ctx, work, octokit, ghRepo, issueNum, }) {
68
+ const { errorDetail, LaneParkError } = shipRuntime();
69
+ let sliceIndex;
70
+ // ADR-0161: stack runs as slice until stacked PRs are built.
71
+ if ((sizeGateMode === 'slice' || sizeGateMode === 'stack') &&
72
+ !ctx?.localOnly &&
73
+ !ctx?.resumeFrom &&
74
+ work.kind === GITHUB_ISSUE_SOURCE) {
75
+ try {
76
+ const lookup = await findSlicePlanComment({ octokit, repo: ghRepo, issue: issueNum });
77
+ if (lookup.status === 'found')
78
+ sliceIndex = currentSlice(lookup.plan)?.index;
79
+ }
80
+ catch (err) {
81
+ throw new LaneParkError(`slice plan lookup failed for #${issueNum}: ${errorDetail(err)} — parked before creating a worktree`, 'escalate');
82
+ }
83
+ }
84
+ return sliceIndex;
85
+ }
86
+ /** Sets up the run's workspace: reuse a kept worktree, create a factory worktree, or wrap the local-only one. */
87
+ export async function setupRunWorkspace({ ctx, repoRoot, branch, worktree, log, worktreeSandbox, octokit, ghOwner, ghName, git, paths, }) {
88
+ let workspace;
89
+ if (ctx?.resumeFrom) {
90
+ workspace = { path: worktree, dispose: async () => { } };
91
+ log('worktree', `reusing kept worktree at ${worktree} (resume --from check)`);
92
+ }
93
+ else if (!ctx?.localOnly) {
94
+ workspace = await worktreeWorkspace({
95
+ repoRoot,
96
+ branch,
97
+ worktreePath: worktree,
98
+ log,
99
+ sandbox: worktreeSandbox,
100
+ findOpenPr: (br) => findOpenPR(octokit, ghOwner, ghName, br),
101
+ setup: (root, br, wt, sp, sandbox, setupLog, setupOpts) => withGitLock(root, () => withFileLock(paths.gitLock,
102
+ // setupWorktree fetches origin itself before creating the worktree (#1167),
103
+ // so no explicit gitFetch here — still under the git + file locks.
104
+ () => git.setupWorktree(root, br, wt, sp, sandbox, setupLog, setupOpts), { onSteal: (pid) => log('lock-stolen', `stole ${paths.gitLock} from dead holder pid ${pid ?? 'unknown'}`) })),
105
+ });
106
+ log('worktree', `Worktree ready at ${worktree}`);
107
+ }
108
+ else {
109
+ workspace = localOnlyWorkspace(ctx.localOnly);
110
+ log('workspace', `local-only: using caller-provided workspace ${worktree} (no factory worktree created)`);
111
+ }
112
+ return workspace;
113
+ }
114
+ /** Rewrites the queue for a decomposed issue, then throws so the lane moves on to the children. */
115
+ export function decomposeQueue({ issueNum, childIssues, paths, planLog, }) {
116
+ const { readTextFileOrEmpty, errorDetail, IssueDecomposedError } = shipRuntime();
117
+ const childList = childIssues.map((n) => `#${n}`).join(', ');
118
+ try {
119
+ const before = readTextFileOrEmpty(paths.queue);
120
+ const rewrite = rewriteQueueForDecomposition(before, { issue: issueNum, childIssues });
121
+ if (rewrite.changed) {
122
+ writeFileSync(paths.queue, rewrite.content);
123
+ planLog('decompose_filed', `queue entry for #${issueNum} replaced with ${childList}`);
124
+ }
125
+ else {
126
+ planLog('decompose_filed', `#${issueNum} had no queue entry to replace — continuing the lane with ${childList}`);
127
+ }
128
+ }
129
+ catch (err) {
130
+ planLog('decompose_file_failed', `queue rewrite for #${issueNum} failed: ${errorDetail(err)}`);
131
+ }
132
+ throw new IssueDecomposedError(`issue #${issueNum} decomposed into ${childList}`, childIssues);
133
+ }
134
+ /** Maps the core RunOutcome to the shipped branch name, or throws the park/pause error the lane expects. */
135
+ export function finishOutcome({ outcome, opts, ctx, paths, issueNum, worktree, terminalMessage, log, }) {
136
+ const { LaneParkError, LaneEnvironmentPauseError } = shipRuntime();
137
+ if (opts.interactive && !ctx?.localOnly && (outcome.state === 'ready' || outcome.state === 'shipped')) {
138
+ const leftover = listQueuedSteering(paths.steering, issueNum);
139
+ if (leftover.length > 0) {
140
+ log('steering_unconsumed', `${leftover.length} steering message(s) not consumed (no worker phase remained)`);
141
+ }
142
+ }
143
+ if (outcome.state === 'ready' || outcome.state === 'shipped') {
144
+ if (ctx?.localOnly) {
145
+ console.log(styleText('green', `✅ Local-only run complete in ${worktree} (no PR — publishing disabled)`));
146
+ }
147
+ else {
148
+ console.log(styleText('green', `✅ Issue #${issueNum} → ${terminalMessage ?? 'ready'}`));
149
+ }
150
+ return outcome.branch;
151
+ }
152
+ if (outcome.state === 'released') {
153
+ throw new LaneEnvironmentPauseError(terminalMessage ?? 'environment failure on base', {
154
+ baseSha: outcome.baseSha,
155
+ failingChecks: outcome.failingChecks,
156
+ failureSignature: outcome.failureSignature,
157
+ buildPreserved: outcome.buildPreserved,
158
+ });
159
+ }
160
+ const reason = outcome.state === 'escalated' ? 'escalate' : outcome.reason;
161
+ const message = outcome.state === 'escalated' ? outcome.reason : (terminalMessage ?? `run parked: ${outcome.reason}`);
162
+ throw new LaneParkError(message, reason, outcome.state === 'parked'
163
+ ? { failureSignature: outcome.failureSignature, failingChecks: outcome.failingChecks }
164
+ : undefined);
165
+ }
166
+ export function buildRunRequest({ issueNum, ghRepo, repoRoot, branch, specPath, work, product, runStartedAt, lane, opts, ctx, autoRework, planApprovalEnabled, factoryConfig, repoConfig, classifierPolicy, loaders, efficiency, sizeGateMode, maxSlices, timeouts, modelPins, codexOff, failoverSettings, activeSandboxPolicy, processGroupGraceMs, paths, }) {
167
+ const { repoConfigFileFor } = shipRuntime();
168
+ return {
169
+ issue: issueNum,
170
+ repo: ghRepo,
171
+ branch,
172
+ specPath,
173
+ work,
174
+ workSource: ctx?.workSource,
175
+ product,
176
+ startedAt: runStartedAt,
177
+ lane,
178
+ options: {
179
+ interactive: Boolean(opts.interactive),
180
+ autoRework,
181
+ approvePlan: planApprovalEnabled,
182
+ sandboxDisabled: opts.sandbox === false,
183
+ },
184
+ localOnly: Boolean(ctx?.localOnly),
185
+ blockUnresolvedRegressions: resolveDesignRegressionBlock(factoryConfig),
186
+ readinessUpdateIssueBody: resolveReadinessUpdateIssueBody(factoryConfig),
187
+ publishFromBuild: resolveBuildPublish(factoryConfig),
188
+ sizeGateMode,
189
+ maxSlices,
190
+ prClassifier: classifierPolicy.enabled
191
+ ? {
192
+ rules: resolveReviewFloorRules(repoConfig),
193
+ gateLabel: resolveFilingPolicy(factoryConfig).selfFixLabel,
194
+ modelPin: repoConfig?.models?.pins?.classifier,
195
+ }
196
+ : undefined,
197
+ timeouts,
198
+ modelPins,
199
+ codexDisabled: codexOff,
200
+ skipCI: loaders.resolveSkipCI(factoryConfig),
201
+ failover: failoverSettings,
202
+ efficiency: { maxReworkRounds: efficiency.maxReworkRounds, fastPath: efficiency.fastPath },
203
+ sandboxPolicy: activeSandboxPolicy,
204
+ processGroupGraceMs,
205
+ preferredRoute: repoConfig?.route,
206
+ ...(ctx?.resumeFrom
207
+ ? {
208
+ resumeFrom: {
209
+ phase: 'check',
210
+ diffBase: ctx.resumeFrom.diffBase,
211
+ route: ctx.resumeFrom.route,
212
+ model: ctx.resumeFrom.model,
213
+ buildMinutes: ctx.resumeFrom.buildMinutes,
214
+ },
215
+ }
216
+ : {}),
217
+ eventsFile: paths.events,
218
+ logsDir: paths.logs,
219
+ baselineCachePath: paths.baselineCache,
220
+ repoConfigFile: repoConfigFileFor(repoRoot, paths.config),
221
+ flakyLedgerPath: paths.flakyLedger,
222
+ };
223
+ }
224
+ export async function maybeWriteLocalRunReport(opts) {
225
+ if (process.env.FACTORY_LOCAL_ONLY !== '1')
226
+ return undefined;
227
+ const report = await (opts.writeLocalRunReport ?? shipRuntime().defaultWriteLocalRunReport())({
228
+ issue: opts.issueNum,
229
+ eventsFile: opts.paths.events,
230
+ reportsDir: opts.paths.reports,
231
+ startedAt: opts.startedAt,
232
+ outcome: opts.outcome,
233
+ profile: 'local-only',
234
+ branch: opts.branch,
235
+ worktree: opts.worktree,
236
+ specPath: opts.specPath,
237
+ route: opts.route,
238
+ reason: opts.reason,
239
+ });
240
+ console.log(styleText('cyan', `local-only report: ${report.path}`));
241
+ return report.path;
242
+ }
243
+ export async function maybeWriteBenchmarkArtifacts(opts) {
244
+ if (!opts.ctx?.localOnly || !opts.ctx.artifactsDir)
245
+ return;
246
+ try {
247
+ const { manifestPath } = await writeBenchmarkArtifacts({
248
+ issue: opts.issueNum,
249
+ artifactsDir: opts.ctx.artifactsDir,
250
+ eventsFile: opts.paths.events,
251
+ costsFile: opts.paths.costs,
252
+ startedAt: opts.startedAt,
253
+ outcome: opts.outcome,
254
+ workspace: opts.ctx.localOnly.workspace,
255
+ branch: opts.branch,
256
+ specPath: opts.specPath,
257
+ route: opts.route,
258
+ request: opts.ctx.workRequest,
259
+ checkSummary: opts.checkSummary,
260
+ reworkRounds: opts.reworkRounds,
261
+ failure: opts.failure,
262
+ reportPath: opts.reportPath,
263
+ diffBase: opts.diffBase,
264
+ });
265
+ opts.log('benchmark-artifacts', `manifest written to ${manifestPath}`);
266
+ console.log(styleText('cyan', `benchmark artifacts: ${manifestPath}`));
267
+ }
268
+ catch (err) {
269
+ // Never let artifact emission mask the run outcome.
270
+ opts.log('benchmark-artifacts-failed', `could not write benchmark artifacts: ${err.message}`);
271
+ }
272
+ }
273
+ //# sourceMappingURL=ship-steps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ship-steps.js","sourceRoot":"","sources":["../../src/cli/ship-steps.ts"],"names":[],"mappings":"AAAA,+IAA+I;AAE/I,OAAO,EAAE,IAAI,IAAI,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAsBjD,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,4BAA4B,EAC5B,+BAA+B,EAC/B,4BAA4B,EAE5B,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,YAAY,EACZ,UAAU,EACV,oBAAoB,EACpB,mBAAmB,EACnB,uBAAuB,EACvB,YAAY,EACZ,WAAW,GACZ,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAE9F,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,8EAA8E;AAC9E,kFAAkF;AAClF,yEAAyE;AACzE,+EAA+E;AAC/E,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAY;IACrD,OAAO;IACP,sBAAsB;IACtB,MAAM;IACN,UAAU;IACV,MAAM;IACN,UAAU;IACV,QAAQ;IACR,WAAW;IACX,UAAU;IACV,SAAS;CACV,CAAC,CAAC;AAEH,+FAA+F;AAC/F,MAAM,UAAU,kBAAkB,CAAC,SAA6C;IAC9E,IAAI,gBAAgB,GAAG,SAAS,CAAC;IACjC,IAAI,iBAAiB,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,EAAE,CAAC;QAC9C,MAAM,IAAI,GAAG,SAAS,CAAC;QACvB,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,EAAE,CAAC,EAAE,sBAAsB,CAAC,CAAC;QACnG,MAAM,iBAAiB,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;QAC5C,MAAM,OAAO,GAA0B,CAAC,CAAC,EAAE,EAAE,CAC3C,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,IAAI,iBAAiB,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACxF,gBAAgB,GAAG,OAAO,CAAC;IAC7B,CAAC;IACD,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED,oGAAoG;AACpG,MAAM,UAAU,gBAAgB,CAC9B,IAA2B,EAC3B,aAAsD,EACtD,GAA2C;IAE3C,IAAI,mBAA8C,CAAC;IACnD,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;QAC3B,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,EAAE,wEAAwE,CAAC,CAAC,CAAC;QAC7G,GAAG,CAAC,kBAAkB,EAAE,kCAAkC,CAAC,CAAC;IAC9D,CAAC;SAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAC1B,GAAG,CAAC,kBAAkB,EAAE,4CAA4C,CAAC,CAAC;IACxE,CAAC;SAAM,IAAI,aAAa,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;QAC5C,GAAG,CAAC,qBAAqB,EAAE,wEAAwE,CAAC,CAAC;IACvG,CAAC;SAAM,IAAI,aAAa,CAAC,OAAO,KAAK,gBAAgB,EAAE,CAAC;QACtD,wFAAwF;QACxF,kFAAkF;QAClF,gFAAgF;QAChF,kFAAkF;QAClF,mCAAmC;IACrC,CAAC;SAAM,CAAC;QACN,mBAAmB,GAAG,aAAa,CAAC;QACpC,IAAI,aAAa,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxC,GAAG,CACD,kBAAkB,EAClB,sEAAsE,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC5G,CAAC;QACJ,CAAC;IACH,CAAC;IACD,OAAO,mBAAmB,CAAC;AAC7B,CAAC;AAED,6GAA6G;AAC7G,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,EACnC,YAAY,EACZ,GAAG,EACH,IAAI,EACJ,OAAO,EACP,MAAM,EACN,QAAQ,GAQT;IACC,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,GAAG,WAAW,EAAE,CAAC;IACrD,IAAI,UAA8B,CAAC;IACnC,6DAA6D;IAC7D,IACE,CAAC,YAAY,KAAK,OAAO,IAAI,YAAY,KAAK,OAAO,CAAC;QACtD,CAAC,GAAG,EAAE,SAAS;QACf,CAAC,GAAG,EAAE,UAAU;QAChB,IAAI,CAAC,IAAI,KAAK,mBAAmB,EACjC,CAAC;QACD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;YACtF,IAAI,MAAM,CAAC,MAAM,KAAK,OAAO;gBAAE,UAAU,GAAG,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC;QAC/E,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,IAAI,aAAa,CACrB,iCAAiC,QAAQ,KAAK,WAAW,CAAC,GAAG,CAAC,sCAAsC,EACpG,UAAU,CACX,CAAC;QACJ,CAAC;IACH,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,iHAAiH;AACjH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,EACtC,GAAG,EACH,QAAQ,EACR,MAAM,EACN,QAAQ,EACR,GAAG,EACH,eAAe,EACf,OAAO,EACP,OAAO,EACP,MAAM,EACN,GAAG,EACH,KAAK,GAaN;IACC,IAAI,SAAoB,CAAC;IACzB,IAAI,GAAG,EAAE,UAAU,EAAE,CAAC;QACpB,SAAS,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC,EAAE,CAAC;QACxD,GAAG,CAAC,UAAU,EAAE,4BAA4B,QAAQ,wBAAwB,CAAC,CAAC;IAChF,CAAC;SAAM,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,CAAC;QAC3B,SAAS,GAAG,MAAM,iBAAiB,CAAC;YAClC,QAAQ;YACR,MAAM;YACN,YAAY,EAAE,QAAQ;YACtB,GAAG;YACH,OAAO,EAAE,eAAe;YACxB,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC;YAC5D,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,CACxD,WAAW,CAAC,IAAI,EAAE,GAAG,EAAE,CACrB,YAAY,CACV,KAAK,CAAC,OAAO;YACb,4EAA4E;YAC5E,mEAAmE;YACnE,GAAG,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,EACvE,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,aAAa,EAAE,SAAS,KAAK,CAAC,OAAO,yBAAyB,GAAG,IAAI,SAAS,EAAE,CAAC,EAAE,CAC5G,CACF;SACJ,CAAC,CAAC;QACH,GAAG,CAAC,UAAU,EAAE,qBAAqB,QAAQ,EAAE,CAAC,CAAC;IACnD,CAAC;SAAM,CAAC;QACN,SAAS,GAAG,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC9C,GAAG,CAAC,WAAW,EAAE,+CAA+C,QAAQ,gCAAgC,CAAC,CAAC;IAC5G,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,mGAAmG;AACnG,MAAM,UAAU,cAAc,CAAC,EAC7B,QAAQ,EACR,WAAW,EACX,KAAK,EACL,OAAO,GAMR;IACC,MAAM,EAAE,mBAAmB,EAAE,WAAW,EAAE,oBAAoB,EAAE,GAAG,WAAW,EAAE,CAAC;IACjF,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7D,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,mBAAmB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAChD,MAAM,OAAO,GAAG,4BAA4B,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAC;QACvF,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,aAAa,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;YAC5C,OAAO,CAAC,iBAAiB,EAAE,oBAAoB,QAAQ,kBAAkB,SAAS,EAAE,CAAC,CAAC;QACxF,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,iBAAiB,EAAE,IAAI,QAAQ,6DAA6D,SAAS,EAAE,CAAC,CAAC;QACnH,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,uBAAuB,EAAE,sBAAsB,QAAQ,YAAY,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACjG,CAAC;IACD,MAAM,IAAI,oBAAoB,CAAC,UAAU,QAAQ,oBAAoB,SAAS,EAAE,EAAE,WAAW,CAAC,CAAC;AACjG,CAAC;AAED,4GAA4G;AAC5G,MAAM,UAAU,aAAa,CAAC,EAC5B,OAAO,EACP,IAAI,EACJ,GAAG,EACH,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,eAAe,EACf,GAAG,GAUJ;IACC,MAAM,EAAE,aAAa,EAAE,yBAAyB,EAAE,GAAG,WAAW,EAAE,CAAC;IACnE,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,GAAG,EAAE,SAAS,IAAI,CAAC,OAAO,CAAC,KAAK,KAAK,OAAO,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,CAAC,EAAE,CAAC;QACtG,MAAM,QAAQ,GAAG,kBAAkB,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC9D,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,GAAG,CAAC,qBAAqB,EAAE,GAAG,QAAQ,CAAC,MAAM,8DAA8D,CAAC,CAAC;QAC/G,CAAC;IACH,CAAC;IAED,IAAI,OAAO,CAAC,KAAK,KAAK,OAAO,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC7D,IAAI,GAAG,EAAE,SAAS,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE,gCAAgC,QAAQ,gCAAgC,CAAC,CAAC,CAAC;QAC5G,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE,YAAY,QAAQ,MAAM,eAAe,IAAI,OAAO,EAAE,CAAC,CAAC,CAAC;QAC1F,CAAC;QACD,OAAO,OAAO,CAAC,MAAM,CAAC;IACxB,CAAC;IAED,IAAI,OAAO,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;QACjC,MAAM,IAAI,yBAAyB,CAAC,eAAe,IAAI,6BAA6B,EAAE;YACpF,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,aAAa,EAAE,OAAO,CAAC,aAAa;YACpC,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;YAC1C,cAAc,EAAE,OAAO,CAAC,cAAc;SACvC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,MAAM,GAAe,OAAO,CAAC,KAAK,KAAK,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;IACvF,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,KAAK,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,eAAe,IAAI,eAAe,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACtH,MAAM,IAAI,aAAa,CACrB,OAAO,EACP,MAAM,EACN,OAAO,CAAC,KAAK,KAAK,QAAQ;QACxB,CAAC,CAAC,EAAE,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,EAAE,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE;QACtF,CAAC,CAAC,SAAS,CACd,CAAC;AACJ,CAAC;AAqCD,MAAM,UAAU,eAAe,CAAC,EAC9B,QAAQ,EACR,MAAM,EACN,QAAQ,EACR,MAAM,EACN,QAAQ,EACR,IAAI,EACJ,OAAO,EACP,YAAY,EACZ,IAAI,EACJ,IAAI,EACJ,GAAG,EACH,UAAU,EACV,mBAAmB,EACnB,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,OAAO,EACP,UAAU,EACV,YAAY,EACZ,SAAS,EACT,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,KAAK,GACW;IAChB,MAAM,EAAE,iBAAiB,EAAE,GAAG,WAAW,EAAE,CAAC;IAC5C,OAAO;QACL,KAAK,EAAE,QAAQ;QACf,IAAI,EAAE,MAAM;QACZ,MAAM;QACN,QAAQ;QACR,IAAI;QACJ,UAAU,EAAE,GAAG,EAAE,UAAU;QAC3B,OAAO;QACP,SAAS,EAAE,YAAY;QACvB,IAAI;QACJ,OAAO,EAAE;YACP,WAAW,EAAE,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC;YACtC,UAAU;YACV,WAAW,EAAE,mBAAmB;YAChC,eAAe,EAAE,IAAI,CAAC,OAAO,KAAK,KAAK;SACxC;QACD,SAAS,EAAE,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC;QAClC,0BAA0B,EAAE,4BAA4B,CAAC,aAAa,CAAC;QACvE,wBAAwB,EAAE,+BAA+B,CAAC,aAAa,CAAC;QACxE,gBAAgB,EAAE,mBAAmB,CAAC,aAAa,CAAC;QACpD,YAAY;QACZ,SAAS;QACT,YAAY,EAAE,gBAAgB,CAAC,OAAO;YACpC,CAAC,CAAC;gBACE,KAAK,EAAE,uBAAuB,CAAC,UAAU,CAAC;gBAC1C,SAAS,EAAE,mBAAmB,CAAC,aAAa,CAAC,CAAC,YAAY;gBAC1D,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU;aAC/C;YACH,CAAC,CAAC,SAAS;QACb,QAAQ;QACR,SAAS;QACT,aAAa,EAAE,QAAQ;QACvB,MAAM,EAAE,OAAO,CAAC,aAAa,CAAC,aAAa,CAAC;QAC5C,QAAQ,EAAE,gBAAgB;QAC1B,UAAU,EAAE,EAAE,eAAe,EAAE,UAAU,CAAC,eAAe,EAAE,QAAQ,EAAE,UAAU,CAAC,QAAQ,EAAE;QAC1F,aAAa,EAAE,mBAAmB;QAClC,mBAAmB;QACnB,cAAc,EAAE,UAAU,EAAE,KAAK;QACjC,GAAG,CAAC,GAAG,EAAE,UAAU;YACjB,CAAC,CAAC;gBACE,UAAU,EAAE;oBACV,KAAK,EAAE,OAAgB;oBACvB,QAAQ,EAAE,GAAG,CAAC,UAAU,CAAC,QAAQ;oBACjC,KAAK,EAAE,GAAG,CAAC,UAAU,CAAC,KAAK;oBAC3B,KAAK,EAAE,GAAG,CAAC,UAAU,CAAC,KAAK;oBAC3B,YAAY,EAAE,GAAG,CAAC,UAAU,CAAC,YAAY;iBAC1C;aACF;YACH,CAAC,CAAC,EAAE,CAAC;QACP,UAAU,EAAE,KAAK,CAAC,MAAM;QACxB,OAAO,EAAE,KAAK,CAAC,IAAI;QACnB,iBAAiB,EAAE,KAAK,CAAC,aAAa;QACtC,cAAc,EAAE,iBAAiB,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC;QACzD,eAAe,EAAE,KAAK,CAAC,WAAW;KACnC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,IAW9C;IACC,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,GAAG;QAAE,OAAO,SAAS,CAAC;IAC7D,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,mBAAmB,IAAI,WAAW,EAAE,CAAC,0BAA0B,EAAE,CAAC,CAAC;QAC5F,KAAK,EAAE,IAAI,CAAC,QAAQ;QACpB,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM;QAC7B,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO;QAC9B,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,OAAO,EAAE,YAAY;QACrB,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,MAAM,EAAE,IAAI,CAAC,MAAM;KACpB,CAAC,CAAC;IACH,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,sBAAsB,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACpE,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAAC,IAelD;IACC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY;QAAE,OAAO;IAC3D,IAAI,CAAC;QACH,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,uBAAuB,CAAC;YACrD,KAAK,EAAE,IAAI,CAAC,QAAQ;YACpB,YAAY,EAAE,IAAI,CAAC,GAAG,CAAC,YAAY;YACnC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM;YAC7B,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK;YAC3B,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS;YACvC,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,WAAW;YAC7B,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACxB,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,qBAAqB,EAAE,uBAAuB,YAAY,EAAE,CAAC,CAAC;QACvE,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,wBAAwB,YAAY,EAAE,CAAC,CAAC,CAAC;IACzE,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,oDAAoD;QACpD,IAAI,CAAC,GAAG,CAAC,4BAA4B,EAAE,wCAAwC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IAChG,CAAC;AACH,CAAC"}
@@ -0,0 +1,41 @@
1
+ import type { LocalOnlyPolicy, RunOutcome, WorkRequest, WorkRequestSourceKind } from '@on-par/factory-core';
2
+ import { getFactoryPaths, type SizeGateMode } from '@on-par/factory-core';
3
+ import type { CheckResumeRecord } from '@on-par/factory-core/internal';
4
+ import type { CliDeps, ConfigLoaderKey, CoreOpKey, GitOpKey, ShellOpKey } from './index.js';
5
+ export declare function shipIssue(issueNum: number, opts: {
6
+ product?: string;
7
+ autoRework?: boolean;
8
+ interactive?: boolean;
9
+ sandbox?: boolean;
10
+ approvePlan?: boolean;
11
+ branchPrefix?: string;
12
+ /** `run-issue --size-gate` (ADR-0147); undefined defers to sizeGate.mode in the config. */
13
+ sizeGate?: SizeGateMode;
14
+ /** run-issue --max-slices (ADR-0156); undefined defers to sizeGate.maxSlices. */
15
+ maxSlices?: number;
16
+ /** `--pr-classifier` / `--no-pr-classifier` (#1724); undefined defers to config/env. */
17
+ prClassifier?: boolean;
18
+ }, ctx?: {
19
+ repoRoot: string;
20
+ ghRepo: string;
21
+ /** Resolved factory state paths, supplied by daemon lanes with an external state root. */
22
+ paths?: ReturnType<typeof getFactoryPaths>;
23
+ lane?: string;
24
+ workRequest?: WorkRequest;
25
+ /** Receives the core RunOutcome before shipIssue maps it to a return/throw — lets
26
+ * `run-issue --run-children` read the PR number as data (#1747). */
27
+ onOutcome?: (outcome: RunOutcome) => void;
28
+ /** Input source for planPhase to resolve; defaults inside planPhase to this run's GitHub issue. */
29
+ workSource?: {
30
+ kind: WorkRequestSourceKind;
31
+ params: unknown;
32
+ };
33
+ /** Local-only policy (#508): run in this caller-provided workspace, skip
34
+ * worktree creation, disable publishing, and skip the SHIP phase. */
35
+ localOnly?: LocalOnlyPolicy;
36
+ /** Benchmark artifact directory (#509) — only set for local-only runs. */
37
+ artifactsDir?: string;
38
+ /** Resume at CHECK on a kept worktree (#2564). */
39
+ resumeFrom?: CheckResumeRecord;
40
+ }, deps?: Pick<CliDeps, 'octokit' | 'planPhase' | 'buildPhase' | 'checkPhase' | 'shipPhase' | 'checkBaseHealth' | ConfigLoaderKey | GitOpKey | ShellOpKey | CoreOpKey>): Promise<string>;
41
+ //# sourceMappingURL=ship.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ship.d.ts","sourceRoot":"","sources":["../../src/cli/ship.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAOV,eAAe,EAEf,UAAU,EAIV,WAAW,EACX,qBAAqB,EACtB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAML,eAAe,EAiBf,KAAK,YAAY,EAKlB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,iBAAiB,EAA2C,MAAM,+BAA+B,CAAC;AAkBhH,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAe5F,wBAAsB,SAAS,CAC7B,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE;IACJ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,2FAA2F;IAC3F,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,iFAAiF;IACjF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wFAAwF;IACxF,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,EACD,GAAG,CAAC,EAAE;IACJ,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,0FAA0F;IAC1F,KAAK,CAAC,EAAE,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC;IAC3C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B;yEACqE;IACrE,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,KAAK,IAAI,CAAC;IAC1C,mGAAmG;IACnG,UAAU,CAAC,EAAE;QAAE,IAAI,EAAE,qBAAqB,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,CAAC;IAC9D;0EACsE;IACtE,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,0EAA0E;IAC1E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kDAAkD;IAClD,UAAU,CAAC,EAAE,iBAAiB,CAAC;CAChC,EACD,IAAI,GAAE,IAAI,CACR,OAAO,EACL,SAAS,GACT,WAAW,GACX,YAAY,GACZ,YAAY,GACZ,WAAW,GACX,iBAAiB,GACjB,eAAe,GACf,QAAQ,GACR,UAAU,GACV,SAAS,CACP,GACL,OAAO,CAAC,MAAM,CAAC,CA8VjB"}