@on-par/factory-cli 0.9.17-next.1 → 0.9.17-next.10
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-agent-memory.d.ts +5 -0
- package/dist/cli/doctor-agent-memory.d.ts.map +1 -0
- package/dist/cli/doctor-agent-memory.js +19 -0
- package/dist/cli/doctor-agent-memory.js.map +1 -0
- package/dist/cli/doctor-failover-providers.d.ts +8 -0
- package/dist/cli/doctor-failover-providers.d.ts.map +1 -0
- package/dist/cli/doctor-failover-providers.js +76 -0
- package/dist/cli/doctor-failover-providers.js.map +1 -0
- package/dist/cli/doctor.d.ts.map +1 -1
- package/dist/cli/doctor.js +4 -1
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/index.d.ts +6 -3
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +27 -36
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/json-contract.d.ts +87 -0
- package/dist/cli/json-contract.d.ts.map +1 -1
- package/dist/cli/json-contract.js +65 -0
- package/dist/cli/json-contract.js.map +1 -1
- package/dist/cli/kpi-sweep.js +1 -1
- package/dist/cli/kpi-sweep.js.map +1 -1
- package/dist/cli/lane-pause.d.ts +7 -0
- package/dist/cli/lane-pause.d.ts.map +1 -1
- package/dist/cli/lane-pause.js +26 -0
- package/dist/cli/lane-pause.js.map +1 -1
- package/dist/cli/model-override-messages.d.ts +3 -1
- package/dist/cli/model-override-messages.d.ts.map +1 -1
- package/dist/cli/model-override-messages.js +12 -0
- package/dist/cli/model-override-messages.js.map +1 -1
- package/dist/cli/orphan-draft-sweep.d.ts +6 -0
- package/dist/cli/orphan-draft-sweep.d.ts.map +1 -0
- package/dist/cli/orphan-draft-sweep.js +24 -0
- package/dist/cli/orphan-draft-sweep.js.map +1 -0
- package/dist/cli/program-queue.d.ts.map +1 -1
- package/dist/cli/program-queue.js +5 -3
- package/dist/cli/program-queue.js.map +1 -1
- package/dist/cli/queue-startup.d.ts +79 -0
- package/dist/cli/queue-startup.d.ts.map +1 -1
- package/dist/cli/queue-startup.js +8 -0
- package/dist/cli/queue-startup.js.map +1 -1
- package/dist/cli/ready-check.d.ts +55 -14
- package/dist/cli/ready-check.d.ts.map +1 -1
- package/dist/cli/ready-check.js +121 -53
- package/dist/cli/ready-check.js.map +1 -1
- package/dist/cli/repo-router.d.ts +2 -0
- package/dist/cli/repo-router.d.ts.map +1 -1
- package/dist/cli/repo-router.js +5 -0
- package/dist/cli/repo-router.js.map +1 -1
- package/dist/cli/run-lane.d.ts.map +1 -1
- package/dist/cli/run-lane.js +13 -1
- package/dist/cli/run-lane.js.map +1 -1
- package/dist/cli/run.d.ts +1 -0
- package/dist/cli/run.d.ts.map +1 -1
- package/dist/cli/run.js +7 -1
- package/dist/cli/run.js.map +1 -1
- package/dist/cli/ship-steps.d.ts.map +1 -1
- package/dist/cli/ship-steps.js +5 -0
- package/dist/cli/ship-steps.js.map +1 -1
- package/dist/cli/ship.js +3 -2
- package/dist/cli/ship.js.map +1 -1
- package/dist/cli/status.js +1 -1
- package/dist/cli/status.js.map +1 -1
- package/dist/cli/usage-json.d.ts +11 -2
- package/dist/cli/usage-json.d.ts.map +1 -1
- package/dist/cli/usage-json.js +20 -2
- package/dist/cli/usage-json.js.map +1 -1
- package/package.json +4 -4
- package/schemas/check.schema.json +305 -0
- package/schemas/logs-line.schema.json +5 -0
- package/schemas/usage.schema.json +6 -1
package/dist/cli/index.js
CHANGED
|
@@ -8,11 +8,11 @@ import { basename, dirname, isAbsolute, join, relative, resolve } from 'node:pat
|
|
|
8
8
|
import { promisify, styleText } from 'node:util';
|
|
9
9
|
import { LaneEnvironmentPauseError } from './lane-environment-pause-error.js';
|
|
10
10
|
import { INVALID_BRANCH_PREFIX_MESSAGE, resolveBranchPrefixOption } from './branch-prefix.js';
|
|
11
|
-
import {
|
|
11
|
+
import { startupSweeps, warnQueueDiagnostics } from './queue-startup.js';
|
|
12
12
|
import { proposeTriageQueue } from './triage-open-prs.js';
|
|
13
13
|
import { makeQueuePreflightOps, preflightQueuedIssue, } from './queue-preflight.js';
|
|
14
14
|
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';
|
|
15
|
-
import { acquirePidFile, createCheckResumeStore, DEFAULT_GARDEN_MAX_CLUSTERS, DEFAULT_GARDEN_SINCE, capGardenClusters, clusterGarden, dedupGardenClusters, filterGardenOnlyNew, filterGardenWindow, markGardenTrackingUnknown, parseGardenDuration, readHarvestEvents, renderGardenJson, renderGardenReport, laneWorktreePath, migrateRepoConfigToYaml, readRepoConfigFile, rewriteRepoConfigFile, 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, listStatelessLaneIssues, formatGcReport, gitFetch, listMicroVms, listOrphanContainers, logCost, logEvent, planQueueMigration, pollBlockedParks, readCosts, readGithubQueueSnapshot, reapCleanShipWorktree, reapLaneWorktree, reapOrphanContainers, reapOrphanMicroVm, releaseRuntimeFiles, releaseStaleClaims, resolveBranchPrefix, resolveEffectiveConfig, resolveExperimental, resolveLocalOnly, describeDraftPrPolicy, resolveDraftPrPolicy, resolvePrClassifierPolicy, resolveReviewFloorRules, RunLockHeldError, runOvernightQueue, parseRemoteSlug, setupWorktree, shellEscape, listBuiltInCheckers, sweepWorktrees, watchChecks, withFileLock, withGitLock, withRunLock, writePortFile, buildTriagePrompt, parseTriageCandidates,
|
|
15
|
+
import { acquirePidFile, createCheckResumeStore, DEFAULT_GARDEN_MAX_CLUSTERS, DEFAULT_GARDEN_SINCE, capGardenClusters, clusterGarden, dedupGardenClusters, filterGardenOnlyNew, filterGardenWindow, markGardenTrackingUnknown, parseGardenDuration, readHarvestEvents, renderGardenJson, renderGardenReport, laneWorktreePath, migrateRepoConfigToYaml, readRepoConfigFile, rewriteRepoConfigFile, 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, listStatelessLaneIssues, formatGcReport, gitFetch, listMicroVms, listOrphanContainers, logCost, logEvent, planQueueMigration, pollBlockedParks, readCosts, readGithubQueueSnapshot, reapCleanShipWorktree, reapLaneWorktree, reapOrphanContainers, reapOrphanMicroVm, releaseRuntimeFiles, releaseStaleClaims, resolveBranchPrefix, resolveEffectiveConfig, resolveExperimental, resolveLocalOnly, describeDraftPrPolicy, resolveDraftPrPolicy, resolvePrClassifierPolicy, resolveReviewFloorRules, RunLockHeldError, runOvernightQueue, parseRemoteSlug, setupWorktree, shellEscape, listBuiltInCheckers, sweepWorktrees, watchChecks, withFileLock, withGitLock, withRunLock, writePortFile, buildTriagePrompt, parseTriageCandidates, laneSlug, formatStopMarker, readStopMarker, detectClaudePlan, } from '@on-par/factory-core/internal';
|
|
16
16
|
import { formatSteerabilityReport } from '@on-par/factory-core/internal';
|
|
17
17
|
import { runTui } from '@on-par/factory-tui';
|
|
18
18
|
import { clearSelfUpdateStop } from './self-update-stop.js';
|
|
@@ -42,7 +42,7 @@ import { buildRunsJson, parseRunsLimit } from './runs.js';
|
|
|
42
42
|
import { buildRunDiffstatJson, NoRunError, parseDiffstatIssue } from './runs-diffstat.js';
|
|
43
43
|
import { formatUpdateStartupLine, initialUpdateState, readUpdateState, updateStatePath, writeUpdateState, } from './update-state.js';
|
|
44
44
|
import { buildStopResumeJson } from './stop-resume-json.js';
|
|
45
|
-
import {
|
|
45
|
+
import { collectUsageJson } from './usage-json.js';
|
|
46
46
|
import { parseResetIssues, runReset } from './reset.js';
|
|
47
47
|
import { cmdDaemonLogs, cmdDaemonStart, cmdDaemonStatus, cmdDaemonStop, createAutoUpdateDeps, DaemonCtlError, detectInstall, loadDaemonFileConfig, recoverStaleDrain, resolveFactorydConfig, runAutoUpdateLoop, } from './daemon.js';
|
|
48
48
|
import { checkForUpdate, cmdSelfUpdateCheck } from './self-update.js';
|
|
@@ -56,12 +56,12 @@ import { cmdRisk } from './risk.js';
|
|
|
56
56
|
import { buildFeedbackDeps, resolveFeedbackRepo, runFeedback } from './feedback.js';
|
|
57
57
|
import { ensureFactoryExcluded, writeSampleQueue } from './init-files.js';
|
|
58
58
|
import { detectChecksForInit } from './detect-checks.js';
|
|
59
|
-
import { newRepoRouter } from './repo-router.js';
|
|
59
|
+
import { applyRouterGuards, newRepoRouter } from './repo-router.js';
|
|
60
60
|
import { cmdLogs } from './logs.js';
|
|
61
61
|
import { mergeScopeNotice } from './merge-scope.js';
|
|
62
62
|
import { selectOctokit } from './github-stub.js';
|
|
63
63
|
import { createFactoryOctokit } from './octokit.js';
|
|
64
|
-
import {
|
|
64
|
+
import { checkErrorExit, checkReportExit, createDeepModelRunner, runIssueCheck } from './ready-check.js';
|
|
65
65
|
import { childRunSucceeded, formatChildRunSummary, runChildrenInOrder } from './run-children.js';
|
|
66
66
|
import { readRunFlagOverrides, recordDraftPrFlag } from './run-flags.js';
|
|
67
67
|
import { runStalenessGuard } from './staleness.js';
|
|
@@ -175,6 +175,7 @@ const DEFAULT_CORE_OPS = {
|
|
|
175
175
|
formatUsageReport,
|
|
176
176
|
watchUsage,
|
|
177
177
|
fetchSubscriptionUsage,
|
|
178
|
+
detectClaudePlan,
|
|
178
179
|
diagnoseModels,
|
|
179
180
|
probeDeclaredHarnesses,
|
|
180
181
|
writeLocalRunReport,
|
|
@@ -194,6 +195,7 @@ function resolveCoreOps(overrides, base = coreOps) {
|
|
|
194
195
|
formatUsageReport: overrides.formatUsageReport ?? base.formatUsageReport,
|
|
195
196
|
watchUsage: overrides.watchUsage ?? base.watchUsage,
|
|
196
197
|
fetchSubscriptionUsage: overrides.fetchSubscriptionUsage ?? base.fetchSubscriptionUsage,
|
|
198
|
+
detectClaudePlan: overrides.detectClaudePlan ?? base.detectClaudePlan,
|
|
197
199
|
diagnoseModels: overrides.diagnoseModels ?? base.diagnoseModels,
|
|
198
200
|
probeDeclaredHarnesses: overrides.probeDeclaredHarnesses ?? base.probeDeclaredHarnesses,
|
|
199
201
|
writeLocalRunReport: overrides.writeLocalRunReport ?? base.writeLocalRunReport,
|
|
@@ -979,20 +981,19 @@ async function cmdCost(opts = {}) {
|
|
|
979
981
|
}
|
|
980
982
|
async function cmdCheck(issueRaw, opts) {
|
|
981
983
|
const issueNum = parseIssueArg(issueRaw);
|
|
982
|
-
const
|
|
983
|
-
const
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
runModel = createDeepModelRunner(newRepoRouter(repoRoot, configLoaders, coreOps.ModelRouter), repoRoot);
|
|
988
|
-
}
|
|
984
|
+
const [owner, repoName] = (await getGitHubRepo()).split('/');
|
|
985
|
+
const repoRoot = await getRepoRoot();
|
|
986
|
+
const runModel = opts.judge !== false || opts.deep
|
|
987
|
+
? createDeepModelRunner(newRepoRouter(repoRoot, configLoaders, coreOps.ModelRouter), repoRoot)
|
|
988
|
+
: undefined;
|
|
989
989
|
let report;
|
|
990
990
|
try {
|
|
991
991
|
report = await runIssueCheck(issueNum, opts, {
|
|
992
992
|
runModel,
|
|
993
|
+
readinessCacheDir: getFactoryPaths(repoRoot).readinessCache,
|
|
993
994
|
getIssue: async (n) => {
|
|
994
995
|
const { data } = await getOctokit().rest.issues.get({ owner, repo: repoName, issue_number: n });
|
|
995
|
-
return { title: data.title, body: data.body ?? null };
|
|
996
|
+
return { title: data.title, body: data.body ?? null, labels: data.labels };
|
|
996
997
|
},
|
|
997
998
|
getIssueState: async (n) => {
|
|
998
999
|
const { data } = await getOctokit().rest.issues.get({ owner, repo: repoName, issue_number: n });
|
|
@@ -1002,16 +1003,14 @@ async function cmdCheck(issueRaw, opts) {
|
|
|
1002
1003
|
});
|
|
1003
1004
|
}
|
|
1004
1005
|
catch (err) {
|
|
1005
|
-
|
|
1006
|
-
|
|
1006
|
+
const exit = checkErrorExit(err);
|
|
1007
|
+
if (exit)
|
|
1008
|
+
throw new CliExitError(exit.message, exit.code);
|
|
1007
1009
|
throw err;
|
|
1008
1010
|
}
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
|
|
1012
|
-
if (report.exitCode === 3) {
|
|
1013
|
-
throw new CliExitError(`factory: issue #${issueNum} would split — ${report.size.reason}`, 3);
|
|
1014
|
-
}
|
|
1011
|
+
const exit = checkReportExit(report);
|
|
1012
|
+
if (exit)
|
|
1013
|
+
throw new CliExitError(exit.message, exit.code);
|
|
1015
1014
|
}
|
|
1016
1015
|
async function currentCommitSha() {
|
|
1017
1016
|
try {
|
|
@@ -1111,7 +1110,7 @@ async function cmdClassifierBacktestEntry(opts) {
|
|
|
1111
1110
|
const effective = resolveEffectiveConfig(repoConfig);
|
|
1112
1111
|
const router = new coreOps.ModelRouter(applyRepoConfig(configLoaders.loadModelsConfig(), repoConfig), configLoaders.loadRoutesConfig(), false, undefined, effective.allowExperimental, effective.localOnly);
|
|
1113
1112
|
router.setCodexFullAccessTasks?.(configLoaders.loadFactoryConfigForRepo(paths.config).sandbox.codexFullAccessTasks);
|
|
1114
|
-
router
|
|
1113
|
+
applyRouterGuards(router);
|
|
1115
1114
|
try {
|
|
1116
1115
|
await cmdClassifierBacktest({ ...opts, branchPrefix }, {
|
|
1117
1116
|
repoRoot,
|
|
@@ -1202,7 +1201,7 @@ async function cmdKpis(opts = {}) {
|
|
|
1202
1201
|
const branchPrefix = branchPrefixOrExit(opts.branchPrefix);
|
|
1203
1202
|
const repoRoot = await getRepoRoot();
|
|
1204
1203
|
const paths = getFactoryPaths(repoRoot);
|
|
1205
|
-
const events =
|
|
1204
|
+
const events = readEvents(paths.events, { includeSegments: true });
|
|
1206
1205
|
const costs = existsSync(paths.costs) ? internalOps.readCosts(paths.costs) : [];
|
|
1207
1206
|
const recon = await reconstructHumanEventsForKpis(events, branchPrefix);
|
|
1208
1207
|
let allEvents = recon.events;
|
|
@@ -1289,16 +1288,7 @@ export async function cmdUsage(deps = {}, opts = {}) {
|
|
|
1289
1288
|
throw new CliExitError(`factory: ${err.message}`, 2);
|
|
1290
1289
|
}
|
|
1291
1290
|
if (opts.json) {
|
|
1292
|
-
|
|
1293
|
-
let estimate;
|
|
1294
|
-
try {
|
|
1295
|
-
const spend = ops.estimateTrailingSpend();
|
|
1296
|
-
estimate = Number.isFinite(spend) ? spend : null;
|
|
1297
|
-
}
|
|
1298
|
-
catch {
|
|
1299
|
-
estimate = null;
|
|
1300
|
-
}
|
|
1301
|
-
console.log(JSON.stringify(buildUsageJson(subscription, estimate, knobs.cap)));
|
|
1291
|
+
console.log(JSON.stringify(await collectUsageJson(ops, knobs.cap)));
|
|
1302
1292
|
return;
|
|
1303
1293
|
}
|
|
1304
1294
|
const subscriptionPromise = ops.fetchSubscriptionUsage();
|
|
@@ -1371,7 +1361,7 @@ async function cmdTui(opts = {}, runTuiImpl = runTui) {
|
|
|
1371
1361
|
const effective = resolveEffectiveConfig(repoConfig);
|
|
1372
1362
|
const router = new coreOps.ModelRouter(modelsConfig, routesConfig, false, undefined, effective.allowExperimental, effective.localOnly);
|
|
1373
1363
|
router.setCodexFullAccessTasks?.(configLoaders.loadFactoryConfigForRepo(paths.config).sandbox.codexFullAccessTasks);
|
|
1374
|
-
router
|
|
1364
|
+
applyRouterGuards(router);
|
|
1375
1365
|
const effectiveConfigLines = describeEffectiveConfig({
|
|
1376
1366
|
router,
|
|
1377
1367
|
repo: repoConfig,
|
|
@@ -1505,7 +1495,7 @@ export function resolveEnvironmentAcquirer(opts) {
|
|
|
1505
1495
|
};
|
|
1506
1496
|
};
|
|
1507
1497
|
}
|
|
1508
|
-
const sweepStaleLaneClaims
|
|
1498
|
+
const { sweepStaleLaneClaims, sweepOrphanDrafts } = startupSweeps(() => (hasGitHubToken() ? getOctokit() : undefined));
|
|
1509
1499
|
/** The autoGcOnRun-gated worktree sweep every pipeline entry point runs before shipping
|
|
1510
1500
|
* (`factory run`, and since #1756 the one-shot `factory ship` / `factory run-issue`). Never
|
|
1511
1501
|
* throws — a GC failure is a warn, never a reason to abort the command. */
|
|
@@ -2085,7 +2075,7 @@ async function cmdTriage(opts) {
|
|
|
2085
2075
|
const effective = resolveEffectiveConfig(repoConfig);
|
|
2086
2076
|
const router = new coreOps.ModelRouter(modelsConfig, routesConfig, false, undefined, effective.allowExperimental, effective.localOnly);
|
|
2087
2077
|
router.setCodexFullAccessTasks?.(configLoaders.loadFactoryConfigForRepo(paths.config).sandbox.codexFullAccessTasks);
|
|
2088
|
-
router
|
|
2078
|
+
applyRouterGuards(router);
|
|
2089
2079
|
router.skipMissingHarnessClis(coreOps.isCommandAvailable);
|
|
2090
2080
|
router.setCostSink((entry) => logCost(paths.costs, { ...entry, issue: '-' }));
|
|
2091
2081
|
let plannerError;
|
|
@@ -3090,6 +3080,7 @@ function runRun(opts = {}) {
|
|
|
3090
3080
|
withRepoRunLock,
|
|
3091
3081
|
runAutoWorktreeGc,
|
|
3092
3082
|
sweepStaleLaneClaims,
|
|
3083
|
+
sweepOrphanDrafts,
|
|
3093
3084
|
planRunLanes,
|
|
3094
3085
|
preflightQueuedIssue,
|
|
3095
3086
|
createQueuePreflightOps,
|