@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.
- package/dist/cli/index.d.ts +6 -40
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +31 -478
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/ship-runtime.d.ts +41 -0
- package/dist/cli/ship-runtime.d.ts.map +1 -0
- package/dist/cli/ship-runtime.js +11 -0
- package/dist/cli/ship-runtime.js.map +1 -0
- package/dist/cli/ship-steps.d.ts +140 -0
- package/dist/cli/ship-steps.d.ts.map +1 -0
- package/dist/cli/ship-steps.js +273 -0
- package/dist/cli/ship-steps.js.map +1 -0
- package/dist/cli/ship.d.ts +41 -0
- package/dist/cli/ship.d.ts.map +1 -0
- package/dist/cli/ship.js +293 -0
- package/dist/cli/ship.js.map +1 -0
- package/package.json +3 -3
package/dist/cli/ship.js
ADDED
|
@@ -0,0 +1,293 @@
|
|
|
1
|
+
// packages/cli/src/cli/ship.ts — issue-level ship flow: resolve config, build RunRequest/RunPorts, run runIssue, map the outcome (#2788)
|
|
2
|
+
import { resolve } from 'node:path';
|
|
3
|
+
import { styleText } from 'node:util';
|
|
4
|
+
import { applyRepoConfig, closedWorkSkipReason, createDefaultWorkSourceRegistry, createFileApprovalGate, drainSteering, getFactoryPaths, GITHUB_ISSUE_SOURCE, LaneFileGuard, phaseSnapshotFile, ProviderBreaker, resolveAutoFailover, resolveCodexDisabled, resolveEfficiencyPolicy, resolveEnvironmentPorts, resolveEnvironmentProxy, resolvePlanApproval, resolveProcessGroupGraceMs, resolveSandboxPolicy, resolveSizeGateMaxSlices, resolveSizeGateMode, ReworkHistory, runIssue, summarizeEvent, touchLastEvent, touchRunActivity, writePhaseSnapshot, } from '@on-par/factory-core';
|
|
5
|
+
import { branchFor, checkBaseHealth, createCheckResumeStore, createPlanReuseStore, egressHostMessage, egressSummaryMessage, logCost, logEvent, recordLocalAuthFailure, resolveEffectiveConfig, resolvePrClassifierPolicy, shouldProxyEgress, startEgressProxy, worktreeSandboxFor, } from '@on-par/factory-core/internal';
|
|
6
|
+
import { formatDeprecation } from './octokit.js';
|
|
7
|
+
import { shipRuntime } from './ship-runtime.js';
|
|
8
|
+
import { buildRunRequest, decomposeQueue, findSliceIndex, finishOutcome, logSandboxPolicy, maybeWriteBenchmarkArtifacts, maybeWriteLocalRunReport, setupRunWorkspace, stubAwareShipPhase, TERMINAL_EVENT_KINDS, } from './ship-steps.js';
|
|
9
|
+
export async function shipIssue(issueNum, opts, ctx, deps = {}) {
|
|
10
|
+
const { resolveConfigLoaders, resolveGitOps, resolveShellOps, resolveCoreOps, resolvePhaseOps, getRepoRoot, getGitHubRepo, getOctokit, worktreePathFor, isCommandAvailableViaShell, readActiveProduct, resolveEnvironmentAcquirer, resolveLaneBaseUrl, IssueSkippedError, } = shipRuntime();
|
|
11
|
+
const loaders = resolveConfigLoaders(deps);
|
|
12
|
+
const git = resolveGitOps(deps);
|
|
13
|
+
const shell = resolveShellOps(deps);
|
|
14
|
+
const core = resolveCoreOps(deps);
|
|
15
|
+
const phases = resolvePhaseOps(deps);
|
|
16
|
+
const shipPhaseForMode = stubAwareShipPhase(phases.shipPhase);
|
|
17
|
+
const repoRoot = ctx?.repoRoot ?? (await getRepoRoot(shell));
|
|
18
|
+
const ghRepo = ctx?.ghRepo ?? (await getGitHubRepo(shell));
|
|
19
|
+
const paths = ctx?.paths ?? getFactoryPaths(repoRoot);
|
|
20
|
+
// GitHub REST deprecations seen on this run's client become one warn event per route (#2218).
|
|
21
|
+
const octokit = (deps.octokit ??
|
|
22
|
+
(() => getOctokit(shell, {
|
|
23
|
+
log: (d) => logEvent(paths.events, 'github_api_deprecated', issueNum, formatDeprecation(d), { lane: ctx?.lane }),
|
|
24
|
+
})))();
|
|
25
|
+
const [ghOwner, ghName] = ghRepo.split('/');
|
|
26
|
+
const repoConfig = loaders.loadRepoConfig(repoRoot, paths.root);
|
|
27
|
+
const factoryConfig = loaders.loadFactoryConfigForRepo(paths.config);
|
|
28
|
+
const classifierPolicy = resolvePrClassifierPolicy(factoryConfig, process.env, { classifier: opts.prClassifier });
|
|
29
|
+
const timeouts = loaders.resolveTimeouts(factoryConfig);
|
|
30
|
+
const failoverSettings = resolveAutoFailover(factoryConfig);
|
|
31
|
+
const breaker = new ProviderBreaker(paths.breaker);
|
|
32
|
+
const reworkHistory = new ReworkHistory(paths.reworkHistory);
|
|
33
|
+
const laneFileGuard = new LaneFileGuard(paths.laneFiles);
|
|
34
|
+
const efficiency = resolveEfficiencyPolicy(repoConfig);
|
|
35
|
+
const policy = {
|
|
36
|
+
models: applyRepoConfig(loaders.loadModelsConfig(), repoConfig),
|
|
37
|
+
routes: loaders.loadRoutesConfig(),
|
|
38
|
+
sandbox: factoryConfig.sandbox,
|
|
39
|
+
budget: { perIssueCapUsd: efficiency.perIssueCapUsd },
|
|
40
|
+
effective: opts.branchPrefix === undefined
|
|
41
|
+
? resolveEffectiveConfig(repoConfig)
|
|
42
|
+
: { ...resolveEffectiveConfig(repoConfig), branchPrefix: opts.branchPrefix },
|
|
43
|
+
};
|
|
44
|
+
const router = new core.ModelRouter(policy.models, policy.routes, false, undefined, policy.effective.allowExperimental, policy.effective.localOnly);
|
|
45
|
+
router.setLocalAuthSink?.(recordLocalAuthFailure);
|
|
46
|
+
router.skipMissingHarnessClis(core.isCommandAvailable);
|
|
47
|
+
let issueSpend = 0;
|
|
48
|
+
let laneSandboxRuntime = 'none';
|
|
49
|
+
const laneWorkspaceBackend = factoryConfig.workspace?.backend === 'disposable-docker' ? 'disposable-docker' : 'worktree';
|
|
50
|
+
router.setCostSink((entry) => {
|
|
51
|
+
issueSpend += entry.cost ?? 0;
|
|
52
|
+
logCost(paths.costs, {
|
|
53
|
+
...entry,
|
|
54
|
+
issue: String(issueNum),
|
|
55
|
+
sandboxRuntime: laneSandboxRuntime,
|
|
56
|
+
reworkRoundCount: laneReworkRounds,
|
|
57
|
+
workspaceBackend: laneWorkspaceBackend,
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
const modelPins = loaders.resolveEffectiveModelPins(router.registryRef, repoConfig);
|
|
61
|
+
const codexOff = resolveCodexDisabled(repoConfig);
|
|
62
|
+
const constitutionLoader = new core.ConstitutionLoader();
|
|
63
|
+
const product = opts.product ?? readActiveProduct(paths.product);
|
|
64
|
+
const autoRework = opts.autoRework ?? true;
|
|
65
|
+
const work = ctx?.workRequest ??
|
|
66
|
+
(await createDefaultWorkSourceRegistry({ octokit }).resolve(GITHUB_ISSUE_SOURCE, {
|
|
67
|
+
repo: ghRepo,
|
|
68
|
+
issue: issueNum,
|
|
69
|
+
}));
|
|
70
|
+
const issueTitle = work.title;
|
|
71
|
+
const sizeGateMode = opts.sizeGate ?? resolveSizeGateMode(factoryConfig);
|
|
72
|
+
const maxSlices = opts.maxSlices ?? resolveSizeGateMaxSlices(factoryConfig);
|
|
73
|
+
const sliceIndex = await findSliceIndex({ sizeGateMode, ctx, work, octokit, ghRepo, issueNum });
|
|
74
|
+
const branch = ctx?.resumeFrom?.branch ?? branchFor(issueNum, issueTitle, policy.effective.branchPrefix, sliceIndex);
|
|
75
|
+
const worktree = ctx?.resumeFrom
|
|
76
|
+
? ctx.resumeFrom.worktree
|
|
77
|
+
: ctx?.localOnly
|
|
78
|
+
? ctx.localOnly.workspace
|
|
79
|
+
: worktreePathFor(repoRoot, ghRepo, issueNum, policy.effective.branchPrefix, loaders);
|
|
80
|
+
const specPath = resolve(paths.plans, `issue-${issueNum}.md`);
|
|
81
|
+
const runStartedAt = new Date().toISOString();
|
|
82
|
+
const lane = ctx?.lane;
|
|
83
|
+
let terminalMessage;
|
|
84
|
+
let laneReworkRounds = 0;
|
|
85
|
+
const mkLog = (phase) => (type, msg, extra) => {
|
|
86
|
+
if (TERMINAL_EVENT_KINDS.has(type))
|
|
87
|
+
terminalMessage = msg;
|
|
88
|
+
if (type === 'rework')
|
|
89
|
+
laneReworkRounds++;
|
|
90
|
+
// checkPhase logs each skipped checker as a 'check' event prefixed "SKIPPED: " —
|
|
91
|
+
// echo it to the terminal the way shipIssue used to print it directly.
|
|
92
|
+
if (type === 'check' && msg.startsWith('SKIPPED: ')) {
|
|
93
|
+
console.error(styleText('yellow', ` SKIP: ${msg.slice('SKIPPED: '.length)}`));
|
|
94
|
+
}
|
|
95
|
+
// Likewise for each failing checker, so a parked run still names which checker
|
|
96
|
+
// failed and why — the parked RunOutcome carries only an aggregate count (#675).
|
|
97
|
+
if (type === 'check' && msg.startsWith('FAILED: ')) {
|
|
98
|
+
console.error(styleText('red', ` FAIL: ${msg.slice('FAILED: '.length)}`));
|
|
99
|
+
}
|
|
100
|
+
logEvent(paths.events, type, issueNum, msg, { ...extra, lane, phase });
|
|
101
|
+
// Best-effort lastEvent summary (#1327) for factory.run.snapshot — an
|
|
102
|
+
// observability side channel, so a write failure is swallowed, not logged (that
|
|
103
|
+
// would re-enter this same function for every event this chokepoint fires on).
|
|
104
|
+
touchLastEvent(phaseSnapshotFile(paths.runs, issueNum), summarizeEvent(type, msg)).catch(() => { });
|
|
105
|
+
};
|
|
106
|
+
const log = mkLog();
|
|
107
|
+
log('issue-title', issueTitle);
|
|
108
|
+
if (modelPins.plan) {
|
|
109
|
+
const source = modelPins.sources.plan === 'repo' ? '.factory/config.json' : 'FACTORY_PLAN_MODEL';
|
|
110
|
+
log('model-override', `plan model pinned to ${modelPins.plan} (${source})`);
|
|
111
|
+
}
|
|
112
|
+
if (modelPins.build) {
|
|
113
|
+
const source = modelPins.sources.build === 'repo' ? '.factory/config.json' : 'FACTORY_BUILD_MODEL';
|
|
114
|
+
log('model-override', `build model pinned to ${modelPins.build} (${source})`);
|
|
115
|
+
}
|
|
116
|
+
const skipReason = closedWorkSkipReason(work);
|
|
117
|
+
if (skipReason) {
|
|
118
|
+
log('skipped-already-closed', skipReason);
|
|
119
|
+
console.log(styleText('yellow', `skipped: ${skipReason}`));
|
|
120
|
+
throw new IssueSkippedError(skipReason, 'already-closed');
|
|
121
|
+
}
|
|
122
|
+
const sandboxPolicy = resolveSandboxPolicy(policy.sandbox, {
|
|
123
|
+
worktree,
|
|
124
|
+
repoRoot,
|
|
125
|
+
cliDisabled: opts.sandbox === false,
|
|
126
|
+
laneId: lane,
|
|
127
|
+
isAvailable: (cmd) => isCommandAvailableViaShell(shell, cmd),
|
|
128
|
+
});
|
|
129
|
+
laneSandboxRuntime = sandboxPolicy?.runtime ?? 'none';
|
|
130
|
+
const worktreeSandbox = worktreeSandboxFor(sandboxPolicy?.runtime, {
|
|
131
|
+
allowHosts: sandboxPolicy?.allowHosts ?? [],
|
|
132
|
+
});
|
|
133
|
+
const activeSandboxPolicy = logSandboxPolicy(opts, sandboxPolicy, log);
|
|
134
|
+
// Setup worktree FIRST — PLAN needs cwd=worktree to run claude. Worktree cleanup
|
|
135
|
+
// stays a CLI concern (not called here, matching today — a worktree persists past
|
|
136
|
+
// a successful run for GC/sweep commands to reclaim later).
|
|
137
|
+
const workspace = await setupRunWorkspace({
|
|
138
|
+
ctx,
|
|
139
|
+
repoRoot,
|
|
140
|
+
branch,
|
|
141
|
+
worktree,
|
|
142
|
+
log,
|
|
143
|
+
worktreeSandbox,
|
|
144
|
+
octokit,
|
|
145
|
+
ghOwner,
|
|
146
|
+
ghName,
|
|
147
|
+
git,
|
|
148
|
+
paths,
|
|
149
|
+
});
|
|
150
|
+
const planApprovalEnabled = opts.approvePlan ?? resolvePlanApproval(factoryConfig);
|
|
151
|
+
const processGroupGraceMs = resolveProcessGroupGraceMs(factoryConfig);
|
|
152
|
+
const portsSettings = resolveEnvironmentPorts(factoryConfig);
|
|
153
|
+
if (!portsSettings.enabled) {
|
|
154
|
+
log('environment_lease', 'port leasing disabled (environment.ports.enabled=false or FACTORY_ENV_PORTS=0)');
|
|
155
|
+
}
|
|
156
|
+
// acquireEnvironment.recordPgid/release only persist/deallocate the lease — process-
|
|
157
|
+
// group tracking and killing is runIssue's own unconditional tracker (Invariant 3),
|
|
158
|
+
// so a lease-disabled/failed run still tears down every spawned agent process.
|
|
159
|
+
const acquireEnvironment = portsSettings.enabled
|
|
160
|
+
? resolveEnvironmentAcquirer({
|
|
161
|
+
laneSandboxRuntime: sandboxPolicy?.runtime ?? 'none',
|
|
162
|
+
paths,
|
|
163
|
+
worktree,
|
|
164
|
+
branch,
|
|
165
|
+
range: portsSettings.range,
|
|
166
|
+
processGroupGraceMs,
|
|
167
|
+
log,
|
|
168
|
+
findPortListeners: core.defaultFindPortListeners,
|
|
169
|
+
reapOrphanProcesses: core.reapOrphanProcesses,
|
|
170
|
+
})
|
|
171
|
+
: undefined;
|
|
172
|
+
const proxySettings = resolveEnvironmentProxy(factoryConfig);
|
|
173
|
+
const resolveBaseUrl = (appPort) => resolveLaneBaseUrl(paths, proxySettings, worktree, appPort);
|
|
174
|
+
const request = buildRunRequest({
|
|
175
|
+
issueNum,
|
|
176
|
+
ghRepo,
|
|
177
|
+
repoRoot,
|
|
178
|
+
branch,
|
|
179
|
+
specPath,
|
|
180
|
+
work,
|
|
181
|
+
product,
|
|
182
|
+
runStartedAt,
|
|
183
|
+
lane,
|
|
184
|
+
opts,
|
|
185
|
+
ctx,
|
|
186
|
+
autoRework,
|
|
187
|
+
planApprovalEnabled,
|
|
188
|
+
factoryConfig,
|
|
189
|
+
repoConfig,
|
|
190
|
+
classifierPolicy,
|
|
191
|
+
loaders,
|
|
192
|
+
efficiency,
|
|
193
|
+
sizeGateMode,
|
|
194
|
+
maxSlices,
|
|
195
|
+
timeouts,
|
|
196
|
+
modelPins,
|
|
197
|
+
codexOff,
|
|
198
|
+
failoverSettings,
|
|
199
|
+
activeSandboxPolicy,
|
|
200
|
+
processGroupGraceMs,
|
|
201
|
+
paths,
|
|
202
|
+
});
|
|
203
|
+
const ports = {
|
|
204
|
+
router,
|
|
205
|
+
octokit,
|
|
206
|
+
workspace,
|
|
207
|
+
events: mkLog,
|
|
208
|
+
acquireEnvironment,
|
|
209
|
+
resolveBaseUrl,
|
|
210
|
+
getIssueSpend: () => issueSpend,
|
|
211
|
+
breaker,
|
|
212
|
+
planReuse: ctx?.localOnly ? undefined : createPlanReuseStore(specPath),
|
|
213
|
+
checkResume: ctx?.localOnly ? undefined : createCheckResumeStore(specPath),
|
|
214
|
+
planPhase: phases.planPhase,
|
|
215
|
+
buildPhase: phases.buildPhase,
|
|
216
|
+
checkPhase: phases.checkPhase,
|
|
217
|
+
shipPhase: shipPhaseForMode,
|
|
218
|
+
checkBaseHealth: deps.checkBaseHealth ?? checkBaseHealth,
|
|
219
|
+
resolveConstitution: () =>
|
|
220
|
+
// Resolved once here — runIssue calls this exactly once and reuses the value for
|
|
221
|
+
// every phase, so the build worker can never author the standards it is graded by.
|
|
222
|
+
// A local-only workspace is caller-provided, not a checkout of repoRoot, so it keeps its own constitution.
|
|
223
|
+
constitutionLoader.resolve(worktree, product, factoryConfig.paths?.constitution, ctx?.localOnly ? undefined : repoRoot),
|
|
224
|
+
createApprovalGate: () => createFileApprovalGate({ dir: paths.approvals, timeoutMs: timeouts.approval * 1000 }),
|
|
225
|
+
drainSteering: () => drainSteering(paths.steering, issueNum, worktree),
|
|
226
|
+
reworkHistory,
|
|
227
|
+
laneFileGuard,
|
|
228
|
+
recordPhase: (phase) => {
|
|
229
|
+
const now = new Date().toISOString();
|
|
230
|
+
return writePhaseSnapshot(phaseSnapshotFile(paths.runs, issueNum), {
|
|
231
|
+
issue: issueNum,
|
|
232
|
+
phase,
|
|
233
|
+
updatedAt: now,
|
|
234
|
+
lastActivityAt: now,
|
|
235
|
+
});
|
|
236
|
+
},
|
|
237
|
+
onActivity: () => touchRunActivity(phaseSnapshotFile(paths.runs, issueNum), new Date().toISOString()),
|
|
238
|
+
onDecomposed: (childIssues) => {
|
|
239
|
+
decomposeQueue({ issueNum, childIssues, paths, planLog: mkLog('plan') });
|
|
240
|
+
},
|
|
241
|
+
writeLocalRunReport: (info) => maybeWriteLocalRunReport({
|
|
242
|
+
issueNum,
|
|
243
|
+
paths,
|
|
244
|
+
startedAt: runStartedAt,
|
|
245
|
+
outcome: info.outcome,
|
|
246
|
+
branch: info.branch,
|
|
247
|
+
worktree,
|
|
248
|
+
specPath,
|
|
249
|
+
route: info.route,
|
|
250
|
+
reason: info.reason,
|
|
251
|
+
writeLocalRunReport: core.writeLocalRunReport,
|
|
252
|
+
}),
|
|
253
|
+
writeBenchmarkArtifacts: (info) => maybeWriteBenchmarkArtifacts({
|
|
254
|
+
issueNum,
|
|
255
|
+
paths,
|
|
256
|
+
ctx,
|
|
257
|
+
startedAt: runStartedAt,
|
|
258
|
+
outcome: info.outcome === 'parked' ? 'failed' : info.outcome,
|
|
259
|
+
branch: info.branch,
|
|
260
|
+
specPath,
|
|
261
|
+
route: info.route,
|
|
262
|
+
checkSummary: info.checkSummary,
|
|
263
|
+
reworkRounds: info.reworkRounds,
|
|
264
|
+
failure: info.failure,
|
|
265
|
+
reportPath: info.reportPath,
|
|
266
|
+
diffBase: info.diffBase,
|
|
267
|
+
log,
|
|
268
|
+
}),
|
|
269
|
+
};
|
|
270
|
+
// #2214: report-only per-lane egress proxy for sandbox-exec. Started here, after worktree setup,
|
|
271
|
+
// so the finally below is the single place that stops it on every exit path.
|
|
272
|
+
const proxied = shouldProxyEgress(request.sandboxPolicy) ? request.sandboxPolicy : undefined;
|
|
273
|
+
const egressProxy = proxied
|
|
274
|
+
? await startEgressProxy({
|
|
275
|
+
allowHosts: proxied.allowHosts,
|
|
276
|
+
blockTelemetry: proxied.blockTelemetry,
|
|
277
|
+
onHost: (host, allowed) => log('egress_host', egressHostMessage(host, allowed)),
|
|
278
|
+
})
|
|
279
|
+
: undefined;
|
|
280
|
+
let outcome;
|
|
281
|
+
try {
|
|
282
|
+
outcome = await runIssue(proxied && egressProxy ? { ...request, sandboxPolicy: { ...proxied, proxyUrl: egressProxy.url } } : request, policy, ports);
|
|
283
|
+
}
|
|
284
|
+
finally {
|
|
285
|
+
if (proxied && egressProxy) {
|
|
286
|
+
log('egress_summary', egressSummaryMessage(egressProxy.hosts(), proxied.allowHosts));
|
|
287
|
+
await egressProxy.close();
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
ctx?.onOutcome?.(outcome);
|
|
291
|
+
return finishOutcome({ outcome, opts, ctx, paths, issueNum, worktree, terminalMessage, log });
|
|
292
|
+
}
|
|
293
|
+
//# sourceMappingURL=ship.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ship.js","sourceRoot":"","sources":["../../src/cli/ship.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@on-par/factory-cli",
|
|
3
|
-
"version": "0.9.5-next.
|
|
3
|
+
"version": "0.9.5-next.13",
|
|
4
4
|
"description": "On PAR Dev's Software Factory CLI: takes a GitHub issue through plan, build and check with AI agents, then opens a ready-for-review PR.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ai-agents",
|
|
@@ -47,8 +47,8 @@
|
|
|
47
47
|
"@octokit/plugin-retry": "^8.1.1",
|
|
48
48
|
"@octokit/plugin-throttling": "^11.0.5",
|
|
49
49
|
"@octokit/rest": "^22.0.0",
|
|
50
|
-
"@on-par/factory-core": "0.9.5-next.
|
|
51
|
-
"@on-par/factory-tui": "0.9.5-next.
|
|
50
|
+
"@on-par/factory-core": "0.9.5-next.13",
|
|
51
|
+
"@on-par/factory-tui": "0.9.5-next.13",
|
|
52
52
|
"commander": "^15.0.0"
|
|
53
53
|
},
|
|
54
54
|
"license": "MIT",
|