@on-par/factory-cli 0.9.7-next.8 → 0.9.7
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/doctor-harness-view.d.ts +18 -0
- package/dist/cli/doctor-harness-view.d.ts.map +1 -0
- package/dist/cli/doctor-harness-view.js +21 -0
- package/dist/cli/doctor-harness-view.js.map +1 -0
- package/dist/cli/doctor-queue-reconcile.d.ts +7 -0
- package/dist/cli/doctor-queue-reconcile.d.ts.map +1 -0
- package/dist/cli/doctor-queue-reconcile.js +55 -0
- package/dist/cli/doctor-queue-reconcile.js.map +1 -0
- package/dist/cli/doctor.d.ts +1 -1
- package/dist/cli/doctor.d.ts.map +1 -1
- package/dist/cli/doctor.js +23 -35
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/index.d.ts +4 -3
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +15 -18
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/run-lane.d.ts.map +1 -1
- package/dist/cli/run-lane.js +2 -1
- package/dist/cli/run-lane.js.map +1 -1
- package/dist/cli/unpark.d.ts +5 -27
- package/dist/cli/unpark.d.ts.map +1 -1
- package/dist/cli/unpark.js +5 -66
- package/dist/cli/unpark.js.map +1 -1
- package/dist/cli/update-state.d.ts.map +1 -1
- package/dist/cli/update-state.js +2 -4
- package/dist/cli/update-state.js.map +1 -1
- package/package.json +3 -3
package/dist/cli/index.js
CHANGED
|
@@ -8,7 +8,7 @@ import { basename, dirname, isAbsolute, join, relative, resolve } from 'node:pat
|
|
|
8
8
|
import { promisify, styleText } from 'node:util';
|
|
9
9
|
import { INVALID_BRANCH_PREFIX_MESSAGE, resolveBranchPrefixOption } from './branch-prefix.js';
|
|
10
10
|
import { acquirePortLease, aggregateCosts, appendKpiHistoryLine, applyRepoConfig, buildPhase, checkPhase, clearProxyState, computeHealthKpis, ConstitutionLoader, createDefaultWorkSourceRegistry, createLogger, createLaneProxy, defaultFindPortListeners, describeEffectiveConfig, detectPostMergeDefects, diagnoseModels, probeDeclaredHarnesses, estimateTrailingSpend, fetchDefectSources, fetchHumanEventSources, 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, resolveSandboxPolicy, resolveSkipCI, resolveTimeouts, resolveUsageCap, resolveWatchdogPolicy, runAutoIngest, shipPhase, formatCostTotal, validateQueue, watchUsage, writeLocalRunReport, writeProxyState, } from '@on-par/factory-core';
|
|
11
|
-
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, FACTORY_RUNTIME_CONFIG_KEYS, findUnmergedGreenPrs, formatGcReport, gitFetch, listMicroVms, listOrphanContainers, logCost, logEvent, planQueueMigration, readCosts, readGithubQueueSnapshot, reapLaneWorktree, reapOrphanContainers, reapOrphanMicroVm, releaseRuntimeFiles, releaseStaleClaims, resolveBranchPrefix, resolveEffectiveConfig, worktreeSandboxFor, resolveExperimental, resolveLocalOnly, resolvePrClassifierPolicy, resolveReviewFloorRules, RunLockHeldError, runOvernightQueue, parseRemoteSlug, setupWorktree, shellEscape, listBuiltInCheckers, sweepWorktrees, watchChecks, withFileLock, withGitLock, withRunLock, writePortFile, buildTriagePrompt, normalizeTriageQueue, parseTriageCandidates, recordLocalAuthFailure, } from '@on-par/factory-core/internal';
|
|
11
|
+
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, FACTORY_RUNTIME_CONFIG_KEYS, findUnmergedGreenPrs, formatGcReport, gitFetch, listMicroVms, listOrphanContainers, logCost, logEvent, planQueueMigration, pollBlockedParks, readCosts, readGithubQueueSnapshot, reapLaneWorktree, reapOrphanContainers, reapOrphanMicroVm, releaseRuntimeFiles, releaseStaleClaims, resolveBranchPrefix, resolveEffectiveConfig, worktreeSandboxFor, resolveExperimental, resolveLocalOnly, resolvePrClassifierPolicy, resolveReviewFloorRules, RunLockHeldError, runOvernightQueue, parseRemoteSlug, setupWorktree, shellEscape, listBuiltInCheckers, sweepWorktrees, watchChecks, withFileLock, withGitLock, withRunLock, writePortFile, buildTriagePrompt, normalizeTriageQueue, parseTriageCandidates, recordLocalAuthFailure, } from '@on-par/factory-core/internal';
|
|
12
12
|
import { runTui } from '@on-par/factory-tui';
|
|
13
13
|
import { admissionStateReaderFor, runQueueReconcile } from './admission.js';
|
|
14
14
|
import { cmdClassifierBacktest, ClassifierBacktestInputError, } from './classifier-backtest.js';
|
|
@@ -25,7 +25,7 @@ import { buildProgram } from './program.js';
|
|
|
25
25
|
import { buildCostJson } from './cost-json.js';
|
|
26
26
|
import { buildQueueAddJson } from './queue-add-json.js';
|
|
27
27
|
import { buildQueueListJson } from './queue-list.js';
|
|
28
|
-
import { runUnpark, UnparkError } from './unpark.js';
|
|
28
|
+
import { appendUnparkEvent, runUnpark, UnparkError } from './unpark.js';
|
|
29
29
|
import { buildRunsJson, parseRunsLimit } from './runs.js';
|
|
30
30
|
import { buildRunDiffstatJson, NoRunError, parseDiffstatIssue } from './runs-diffstat.js';
|
|
31
31
|
import { formatUpdateStartupLine, initialUpdateState, readUpdateState, updateStatePath, writeUpdateState, } from './update-state.js';
|
|
@@ -97,6 +97,7 @@ const DEFAULT_INTERNAL_OPS = {
|
|
|
97
97
|
readCosts,
|
|
98
98
|
sweepWorktrees,
|
|
99
99
|
releaseStaleClaims,
|
|
100
|
+
pollBlockedParks,
|
|
100
101
|
findUnmergedGreenPrs,
|
|
101
102
|
listOrphanContainers,
|
|
102
103
|
reapOrphanContainers,
|
|
@@ -114,6 +115,7 @@ function resolveInternalOps(overrides, base = internalOps) {
|
|
|
114
115
|
readCosts: overrides.readCosts ?? base.readCosts,
|
|
115
116
|
sweepWorktrees: overrides.sweepWorktrees ?? base.sweepWorktrees,
|
|
116
117
|
releaseStaleClaims: overrides.releaseStaleClaims ?? base.releaseStaleClaims,
|
|
118
|
+
pollBlockedParks: overrides.pollBlockedParks ?? base.pollBlockedParks,
|
|
117
119
|
findUnmergedGreenPrs: overrides.findUnmergedGreenPrs ?? base.findUnmergedGreenPrs,
|
|
118
120
|
listOrphanContainers: overrides.listOrphanContainers ?? base.listOrphanContainers,
|
|
119
121
|
reapOrphanContainers: overrides.reapOrphanContainers ?? base.reapOrphanContainers,
|
|
@@ -554,13 +556,13 @@ export class CliExitError extends Error {
|
|
|
554
556
|
this.name = 'CliExitError';
|
|
555
557
|
}
|
|
556
558
|
}
|
|
557
|
-
/** Parse a CLI <issue> argument. Throws CliExitError(2) before any git/GitHub work runs. */
|
|
559
|
+
/** Parse a CLI <issue> argument; rejects unsafe integers (#2836), also used by reset. Throws CliExitError(2) before any git/GitHub work runs. */
|
|
558
560
|
export function parseIssueArg(raw) {
|
|
559
|
-
const
|
|
560
|
-
if (
|
|
561
|
+
const n = /^\d+$/.test(raw.trim()) ? Number(raw) : NaN;
|
|
562
|
+
if (!Number.isSafeInteger(n) || n < 1) {
|
|
561
563
|
throw new CliExitError(`factory: invalid issue argument '${raw}' — expected a positive integer issue number`, 2);
|
|
562
564
|
}
|
|
563
|
-
return
|
|
565
|
+
return n;
|
|
564
566
|
}
|
|
565
567
|
/** Run `factory feedback` and print the filed issue; validation errors become exit-2 CliExitErrors. */
|
|
566
568
|
export async function runFeedbackCommand(prUrl, opts, deps, log = console.log) {
|
|
@@ -1898,7 +1900,7 @@ export async function cmdWorktreeGc(opts) {
|
|
|
1898
1900
|
export async function cmdReset(issues, opts) {
|
|
1899
1901
|
let nums;
|
|
1900
1902
|
try {
|
|
1901
|
-
nums = parseResetIssues(issues);
|
|
1903
|
+
nums = parseResetIssues(issues.map((raw) => String(parseIssueArg(raw))));
|
|
1902
1904
|
}
|
|
1903
1905
|
catch (err) {
|
|
1904
1906
|
throw new CliExitError(err.message, 2);
|
|
@@ -2147,16 +2149,6 @@ async function recordQueueAdded(lane, results) {
|
|
|
2147
2149
|
console.error(styleText('yellow', `factory: queue add event not recorded — ${errorDetail(err)}`));
|
|
2148
2150
|
}
|
|
2149
2151
|
}
|
|
2150
|
-
/** Append one `issue_unparked` event; the silent sink keeps stdout untouched. */
|
|
2151
|
-
async function recordIssueUnparked(result) {
|
|
2152
|
-
try {
|
|
2153
|
-
const eventsFile = getFactoryPaths(await getRepoRoot()).events;
|
|
2154
|
-
createLogger(eventsFile, { lane: result.lane, issue: result.issue }, { out: { write: () => true } }).info('issue_unparked', `#${result.issue} unparked → ${result.lane} (order ${result.order})`);
|
|
2155
|
-
}
|
|
2156
|
-
catch (err) {
|
|
2157
|
-
console.error(styleText('yellow', `factory: unpark event not recorded — ${errorDetail(err)}`));
|
|
2158
|
-
}
|
|
2159
|
-
}
|
|
2160
2152
|
export async function cmdUnpark(issueArg, opts = {}) {
|
|
2161
2153
|
const issue = parseIssueArg(issueArg);
|
|
2162
2154
|
let result;
|
|
@@ -2174,7 +2166,12 @@ export async function cmdUnpark(issueArg, opts = {}) {
|
|
|
2174
2166
|
const code = err instanceof UnparkError ? err.code : 'unpark-failed';
|
|
2175
2167
|
throw new CliExitError(`factory: unpark #${issue} [${code}] — ${errorDetail(err)}`, 1);
|
|
2176
2168
|
}
|
|
2177
|
-
|
|
2169
|
+
try {
|
|
2170
|
+
appendUnparkEvent(result, getFactoryPaths(await getRepoRoot()).events);
|
|
2171
|
+
}
|
|
2172
|
+
catch (err) {
|
|
2173
|
+
console.error(styleText('yellow', `factory: unpark event not recorded — ${errorDetail(err)}`));
|
|
2174
|
+
}
|
|
2178
2175
|
if (opts.json) {
|
|
2179
2176
|
console.log(JSON.stringify(result));
|
|
2180
2177
|
return;
|