@on-par/factory-cli 0.9.11-next.2 → 0.9.11-next.20
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/base-health-ci.d.ts +4 -0
- package/dist/cli/base-health-ci.d.ts.map +1 -0
- package/dist/cli/base-health-ci.js +9 -0
- package/dist/cli/base-health-ci.js.map +1 -0
- package/dist/cli/base-hold.d.ts +14 -11
- package/dist/cli/base-hold.d.ts.map +1 -1
- package/dist/cli/base-hold.js +43 -20
- package/dist/cli/base-hold.js.map +1 -1
- package/dist/cli/daemon.d.ts.map +1 -1
- package/dist/cli/daemon.js +4 -11
- package/dist/cli/daemon.js.map +1 -1
- package/dist/cli/index.d.ts +5 -16
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +16 -25
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/land-pr.d.ts.map +1 -1
- package/dist/cli/land-pr.js +5 -0
- package/dist/cli/land-pr.js.map +1 -1
- package/dist/cli/lane-environment-pause-error.d.ts +19 -0
- package/dist/cli/lane-environment-pause-error.d.ts.map +1 -0
- package/dist/cli/lane-environment-pause-error.js +24 -0
- package/dist/cli/lane-environment-pause-error.js.map +1 -0
- package/dist/cli/logs.d.ts +10 -0
- package/dist/cli/logs.d.ts.map +1 -1
- package/dist/cli/logs.js +41 -3
- package/dist/cli/logs.js.map +1 -1
- package/dist/cli/program-observe.d.ts.map +1 -1
- package/dist/cli/program-observe.js +5 -2
- package/dist/cli/program-observe.js.map +1 -1
- package/dist/cli/queue-list.d.ts +5 -4
- package/dist/cli/queue-list.d.ts.map +1 -1
- package/dist/cli/queue-list.js +6 -1
- package/dist/cli/queue-list.js.map +1 -1
- package/dist/cli/run-branch.d.ts +24 -0
- package/dist/cli/run-branch.d.ts.map +1 -0
- package/dist/cli/run-branch.js +38 -0
- package/dist/cli/run-branch.js.map +1 -0
- package/dist/cli/run-lane.d.ts.map +1 -1
- package/dist/cli/run-lane.js +5 -2
- package/dist/cli/run-lane.js.map +1 -1
- package/dist/cli/run.d.ts.map +1 -1
- package/dist/cli/run.js +3 -3
- package/dist/cli/run.js.map +1 -1
- package/dist/cli/self-update-stop.d.ts +7 -0
- package/dist/cli/self-update-stop.d.ts.map +1 -0
- package/dist/cli/self-update-stop.js +27 -0
- package/dist/cli/self-update-stop.js.map +1 -0
- package/dist/cli/ship-run-state.d.ts +5 -0
- package/dist/cli/ship-run-state.d.ts.map +1 -0
- package/dist/cli/ship-run-state.js +12 -0
- package/dist/cli/ship-run-state.js.map +1 -0
- package/dist/cli/ship-steps.d.ts +1 -1
- package/dist/cli/ship-steps.d.ts.map +1 -1
- package/dist/cli/ship-steps.js +4 -2
- package/dist/cli/ship-steps.js.map +1 -1
- package/dist/cli/ship.d.ts.map +1 -1
- package/dist/cli/ship.js +24 -21
- package/dist/cli/ship.js.map +1 -1
- package/dist/cli/status-json.d.ts +8 -0
- package/dist/cli/status-json.d.ts.map +1 -1
- package/dist/cli/status-json.js +1 -0
- package/dist/cli/status-json.js.map +1 -1
- package/dist/cli/status.d.ts.map +1 -1
- package/dist/cli/status.js +3 -1
- package/dist/cli/status.js.map +1 -1
- package/package.json +3 -3
package/dist/cli/index.js
CHANGED
|
@@ -6,12 +6,14 @@ import { createRequire } from 'node:module';
|
|
|
6
6
|
import { arch, hostname as osHostname, release, platform, userInfo } from 'node:os';
|
|
7
7
|
import { basename, dirname, isAbsolute, join, relative, resolve } from 'node:path';
|
|
8
8
|
import { promisify, styleText } from 'node:util';
|
|
9
|
+
import { LaneEnvironmentPauseError } from './lane-environment-pause-error.js';
|
|
9
10
|
import { INVALID_BRANCH_PREFIX_MESSAGE, resolveBranchPrefixOption } from './branch-prefix.js';
|
|
10
11
|
import { sweepLaneClaims, warnQueueDiagnostics } from './queue-startup.js';
|
|
11
12
|
import { proposeTriageQueue } from './triage-open-prs.js';
|
|
12
13
|
import { acquirePortLease, aggregateCosts, appendKpiHistoryLine, applyRepoConfig, buildPhase, checkPhase, clearProxyState, computeHealthKpis, ConstitutionLoader, createDefaultWorkSourceRegistry, createLogger, createLaneProxy, defaultFindPortListeners, describeEffectiveConfig, detectPostMergeDefects, diagnoseModels, probeDeclaredHarnesses, estimateTrailingSpend, fetchDefectSources, fetchSubscriptionUsage, formatUsageReport, getConstitutionsDir, getFactoryPaths, GITHUB_ISSUE_SOURCE, hasUnresolvedPark, InvalidArtifactsDirError, InvalidWorkRequestInputError, InvalidWorkspaceError, isCommandAvailable, isProxyRunning, kpiBranchPrefixes, kpisToHistoryRecord, laneBaseUrl, laneEnv, laneHostLabel, loadFactoryConfigForRepo, loadModelsConfig, loadRepoConfig, loadRoutesConfig, LOCAL_BRIEF_SOURCE, joinClassifierOutcomes, mergeClassifierOutcomes, parseClassifierOutcomes, summarizeClassifierOutcomes, formatClassifierReport, mergedPrRefs, ModelRegistry, ModelRouter, parkReasonFor, parseKpiHistory, parseQueue, planPhase, readEvents, readPortLeases, readQueue, readUsage, reapOrphanProcesses, reconstructKpiEvents, recordLeasePgid, releasePortLease, renderKpiReport, renderKpiTrend, resolveDefectWindowDays, parseSizeGateMode, parseMaxSlices, SIZE_GATE_MODES, resolveEffectiveModelPins, resolveEnvironmentProxy, resolveArtifactsDir, resolveLocalOnlyPolicy, resolveMergePolicy, resolveSkipCI, resolveTimeouts, resolveUsageCap, resolveWatchdogPolicy, runAutoIngest, shipPhase, formatCostTotal, validateQueue, watchUsage, writeLocalRunReport, writeProxyState, } from '@on-par/factory-core';
|
|
13
|
-
import { acquirePidFile, createCheckResumeStore, findSlicePlanComment, upsertSlicePlanComment, withSliceState, DEFAULT_GARDEN_MAX_CLUSTERS, DEFAULT_GARDEN_SINCE, capGardenClusters, clusterGarden, dedupGardenClusters, filterGardenOnlyNew, filterGardenWindow, markGardenTrackingUnknown, parseGardenDuration, readHarvestEvents, renderGardenJson, renderGardenReport, laneWorktreePath, migrateRepoConfigToYaml, REPO_CONFIG_YAML_HEADER, claudeConfigDirOverride, claudeKeychainService, cleanupWorktree, createDaemonLogSink, factoryBranchIssue, factoryBranchPrefixes, createFactorydServer, createRunRuntime, createShipExecutor, createGithubQueue, createLocalSmallDryRun, createOctokitFilingClient, createOctokitGreenPrClient, createOctokitQueueClient, daemonRuntimePaths, defaultRegistryPath, ensureDir, fetchHumanEventSourcesCached, FACTORY_RUNTIME_CONFIG_KEYS, findUnmergedGreenPrs, formatGcReport, gitFetch, listMicroVms, listOrphanContainers, logCost, logEvent, planQueueMigration, pollBlockedParks, readCosts, readGithubQueueSnapshot, reapCleanShipWorktree, reapLaneWorktree, reapOrphanContainers, reapOrphanMicroVm, releaseRuntimeFiles, releaseStaleClaims, resolveBranchPrefix, resolveEffectiveConfig, resolveExperimental, resolveLocalOnly, resolvePrClassifierPolicy, resolveReviewFloorRules, RunLockHeldError, runOvernightQueue, parseRemoteSlug, setupWorktree, shellEscape, listBuiltInCheckers, sweepWorktrees, watchChecks, withFileLock, withGitLock, withRunLock, writePortFile, buildTriagePrompt, parseTriageCandidates, recordLocalAuthFailure, laneSlug, } from '@on-par/factory-core/internal';
|
|
14
|
+
import { acquirePidFile, createCheckResumeStore, findSlicePlanComment, upsertSlicePlanComment, withSliceState, DEFAULT_GARDEN_MAX_CLUSTERS, DEFAULT_GARDEN_SINCE, capGardenClusters, clusterGarden, dedupGardenClusters, filterGardenOnlyNew, filterGardenWindow, markGardenTrackingUnknown, parseGardenDuration, readHarvestEvents, renderGardenJson, renderGardenReport, laneWorktreePath, migrateRepoConfigToYaml, REPO_CONFIG_YAML_HEADER, claudeConfigDirOverride, claudeKeychainService, cleanupWorktree, createDaemonLogSink, factoryBranchIssue, factoryBranchPrefixes, createFactorydServer, createRunRuntime, createShipExecutor, createGithubQueue, createLocalSmallDryRun, createOctokitFilingClient, createOctokitGreenPrClient, createOctokitQueueClient, daemonRuntimePaths, defaultRegistryPath, ensureDir, fetchHumanEventSourcesCached, FACTORY_RUNTIME_CONFIG_KEYS, findUnmergedGreenPrs, formatGcReport, gitFetch, listMicroVms, listOrphanContainers, logCost, logEvent, planQueueMigration, pollBlockedParks, readCosts, readGithubQueueSnapshot, reapCleanShipWorktree, reapLaneWorktree, reapOrphanContainers, reapOrphanMicroVm, releaseRuntimeFiles, releaseStaleClaims, resolveBranchPrefix, resolveEffectiveConfig, resolveExperimental, resolveLocalOnly, resolvePrClassifierPolicy, resolveReviewFloorRules, RunLockHeldError, runOvernightQueue, parseRemoteSlug, setupWorktree, shellEscape, listBuiltInCheckers, sweepWorktrees, watchChecks, withFileLock, withGitLock, withRunLock, writePortFile, buildTriagePrompt, parseTriageCandidates, recordLocalAuthFailure, laneSlug, formatStopMarker, readStopMarker, } from '@on-par/factory-core/internal';
|
|
14
15
|
import { runTui } from '@on-par/factory-tui';
|
|
16
|
+
import { clearSelfUpdateStop } from './self-update-stop.js';
|
|
15
17
|
import { admissionStateReaderFor, runQueueReconcile } from './admission.js';
|
|
16
18
|
import { cmdClassifierBacktest, ClassifierBacktestInputError, } from './classifier-backtest.js';
|
|
17
19
|
import { runHarnessCheckCommand } from './harness-check.js';
|
|
@@ -338,7 +340,7 @@ setShipRuntime(() => ({
|
|
|
338
340
|
IssueSkippedError,
|
|
339
341
|
IssueDecomposedError,
|
|
340
342
|
}));
|
|
341
|
-
export { shipIssue };
|
|
343
|
+
export { LaneEnvironmentPauseError, shipIssue };
|
|
342
344
|
export function hasGitHubToken(env = process.env, tryToken) {
|
|
343
345
|
if (env.GITHUB_TOKEN || env.GH_TOKEN)
|
|
344
346
|
return true;
|
|
@@ -1366,24 +1368,6 @@ export class LaneParkError extends Error {
|
|
|
1366
1368
|
return this.outcome.failingChecks;
|
|
1367
1369
|
}
|
|
1368
1370
|
}
|
|
1369
|
-
/** CHECK found every failing checker also failing on the base SHA (#1928): the issue is
|
|
1370
|
-
* released to queued (not parked) and the lane pauses. */
|
|
1371
|
-
export class LaneEnvironmentPauseError extends Error {
|
|
1372
|
-
baseSha;
|
|
1373
|
-
failingChecks;
|
|
1374
|
-
failureSignature;
|
|
1375
|
-
/** BUILD output was kept for `factory resume --from check` (#2564); runLane must not reap it. */
|
|
1376
|
-
buildPreserved;
|
|
1377
|
-
constructor(message, failure) {
|
|
1378
|
-
super(message);
|
|
1379
|
-
if (failure.buildPreserved !== undefined)
|
|
1380
|
-
this.buildPreserved = failure.buildPreserved;
|
|
1381
|
-
this.baseSha = failure.baseSha;
|
|
1382
|
-
this.failingChecks = failure.failingChecks;
|
|
1383
|
-
if (failure.failureSignature !== undefined)
|
|
1384
|
-
this.failureSignature = failure.failureSignature;
|
|
1385
|
-
}
|
|
1386
|
-
}
|
|
1387
1371
|
/** Resolves the stable lane URL a build/check agent should use, by probing whether
|
|
1388
1372
|
* a factory proxy (started by `factory run`/`supervise` or `factory proxy`) is
|
|
1389
1373
|
* currently alive for the configured domain. Never throws — an absent/dead proxy
|
|
@@ -2432,8 +2416,7 @@ async function cmdFactoryd(opts) {
|
|
|
2432
2416
|
const previousUpdate = readUpdateState(updateFile);
|
|
2433
2417
|
for (const stop of recoverStaleDrain(previousUpdate, (file) => {
|
|
2434
2418
|
try {
|
|
2435
|
-
|
|
2436
|
-
return true;
|
|
2419
|
+
return clearSelfUpdateStop(file);
|
|
2437
2420
|
}
|
|
2438
2421
|
catch {
|
|
2439
2422
|
return false;
|
|
@@ -2848,7 +2831,7 @@ export async function cmdResumeApproved(opts = {}) {
|
|
|
2848
2831
|
}
|
|
2849
2832
|
const USAGE_UNAVAILABLE_LINE = '[factory] supervise: usage signal unavailable — proceeding without resume gate (set FACTORY_USAGE_ESTIMATOR=1 to gate on the heuristic)';
|
|
2850
2833
|
export async function superviseLoop(deps) {
|
|
2851
|
-
const { cap, resumeAt, pollMs, watch = true, watchSource = 'default', repoConfigLabel, resumeAtSource = 'default', pollSource = 'default', estimator = false, stopFile, eventsFile, now, runQueue, readUsageFn = () => readUsage({ cap, estimator }), pathExists = existsSync, clearStop = (path) => rmSync(path, { force: true }), sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms)), emitEvent = logEvent, writeLine = (line) => console.log(line), ingest, } = deps;
|
|
2834
|
+
const { cap, resumeAt, pollMs, watch = true, watchSource = 'default', repoConfigLabel, resumeAtSource = 'default', pollSource = 'default', estimator = false, stopFile, eventsFile, now, runQueue, readUsageFn = () => readUsage({ cap, estimator }), pathExists = existsSync, clearStop = (path) => rmSync(path, { force: true }), readStopMarker: readMarker = readStopMarker, sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms)), emitEvent = logEvent, writeLine = (line) => console.log(line), ingest, } = deps;
|
|
2852
2835
|
let cycle = 0;
|
|
2853
2836
|
if (resumeAtSource === 'flag') {
|
|
2854
2837
|
const detail = 'usage watchdog threshold set by flag: --usage-threshold';
|
|
@@ -2896,7 +2879,15 @@ export async function superviseLoop(deps) {
|
|
|
2896
2879
|
}
|
|
2897
2880
|
}
|
|
2898
2881
|
emitEvent(eventsFile, 'resumed', 'usage', `supervise cycle ${cycle}: trailing usage (${source}) at ${Math.round(pct * 100)}% of cap — starting run`);
|
|
2899
|
-
|
|
2882
|
+
const marker = readMarker(stopFile);
|
|
2883
|
+
if (marker?.source === 'usage-watchdog') {
|
|
2884
|
+
clearStop(stopFile);
|
|
2885
|
+
}
|
|
2886
|
+
else if (marker) {
|
|
2887
|
+
writeLine(`[factory] supervise: STOP set by ${marker.source}${marker.at ? ` at ${marker.at}` : ''}; waiting for factory resume`);
|
|
2888
|
+
while (pathExists(stopFile))
|
|
2889
|
+
await sleep(pollMs);
|
|
2890
|
+
}
|
|
2900
2891
|
if (ingest) {
|
|
2901
2892
|
const appended = await ingest();
|
|
2902
2893
|
if (appended > 0)
|
|
@@ -2975,7 +2966,7 @@ function logEventQuietly(eventsFile, type, msg) {
|
|
|
2975
2966
|
/** Creates the STOP file in one exclusive open (no check-then-write race). Returns false when it already existed. */
|
|
2976
2967
|
function createStopFile(stopFile) {
|
|
2977
2968
|
try {
|
|
2978
|
-
writeFileSync(stopFile, '', { flag: 'wx' });
|
|
2969
|
+
writeFileSync(stopFile, formatStopMarker('manual'), { flag: 'wx' });
|
|
2979
2970
|
return true;
|
|
2980
2971
|
}
|
|
2981
2972
|
catch (err) {
|