@on-par/factory-cli 0.9.7-next.2 → 0.9.7-next.4
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 +4 -5
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +23 -174
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/status.d.ts +23 -0
- package/dist/cli/status.d.ts.map +1 -0
- package/dist/cli/status.js +179 -0
- package/dist/cli/status.js.map +1 -0
- package/package.json +3 -3
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { Octokit } from '@octokit/rest';
|
|
2
|
+
import type { QueueDiagnostic } from '@on-par/factory-core';
|
|
3
|
+
import type { CliDeps, CliExitError, readActiveProduct } from './index.js';
|
|
4
|
+
export interface StatusOptions {
|
|
5
|
+
kpis?: boolean;
|
|
6
|
+
json?: boolean;
|
|
7
|
+
}
|
|
8
|
+
/** index.ts's helpers for `factory status`, built at call time so main() deps injection reaches the handler. */
|
|
9
|
+
export interface StatusRuntime {
|
|
10
|
+
configLoaders: Required<Pick<CliDeps, 'loadRepoConfig' | 'loadModelsConfig' | 'loadRoutesConfig' | 'loadFactoryConfigForRepo'>>;
|
|
11
|
+
ModelRouter: Required<CliDeps>['ModelRouter'];
|
|
12
|
+
readCosts: Required<CliDeps>['readCosts'];
|
|
13
|
+
getRepoRoot: () => Promise<string>;
|
|
14
|
+
getGitHubRepo: () => Promise<string>;
|
|
15
|
+
getOctokit: () => Octokit;
|
|
16
|
+
hasGitHubToken: () => boolean;
|
|
17
|
+
readActiveProduct: typeof readActiveProduct;
|
|
18
|
+
warnQueueDiagnostics: (diagnostics: QueueDiagnostic[]) => void;
|
|
19
|
+
errorDetail: (err: unknown) => string;
|
|
20
|
+
CliExitError: typeof CliExitError;
|
|
21
|
+
}
|
|
22
|
+
export declare function cmdStatus(opts: StatusOptions, rt: StatusRuntime): Promise<void>;
|
|
23
|
+
//# sourceMappingURL=status.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/cli/status.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAa7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAc5D,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAM3E,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,gHAAgH;AAChH,MAAM,WAAW,aAAa;IAC5B,aAAa,EAAE,QAAQ,CACrB,IAAI,CAAC,OAAO,EAAE,gBAAgB,GAAG,kBAAkB,GAAG,kBAAkB,GAAG,0BAA0B,CAAC,CACvG,CAAC;IACF,WAAW,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,aAAa,CAAC,CAAC;IAC9C,SAAS,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,CAAC;IAC1C,WAAW,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACnC,aAAa,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACrC,UAAU,EAAE,MAAM,OAAO,CAAC;IAC1B,cAAc,EAAE,MAAM,OAAO,CAAC;IAC9B,iBAAiB,EAAE,OAAO,iBAAiB,CAAC;IAC5C,oBAAoB,EAAE,CAAC,WAAW,EAAE,eAAe,EAAE,KAAK,IAAI,CAAC;IAC/D,WAAW,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,MAAM,CAAC;IACtC,YAAY,EAAE,OAAO,YAAY,CAAC;CACnC;AAYD,wBAAsB,SAAS,CAAC,IAAI,EAAE,aAAa,EAAE,EAAE,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CA8KrF"}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
// packages/cli/src/cli/status.ts — the factory status handler, moved out of index.ts (#2798)
|
|
2
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
3
|
+
import { styleText } from 'node:util';
|
|
4
|
+
import { applyRepoConfig, computeHealthKpis, describeEffectiveConfig, formatKpiLines, getFactoryPaths, parseQueue, partitionLocalQueueByActivity, ProviderBreaker, readEvents, resolveMergePolicy, } from '@on-par/factory-core';
|
|
5
|
+
import { createGithubQueue, createOctokitQueueClient, daemonRuntimePaths, formatWorktreeLocation, recordLocalAuthFailure, resolveEffectiveConfig, resolvePrClassifierPolicy, resolveWorktreeRoot, } from '@on-par/factory-core/internal';
|
|
6
|
+
import { formatBaseHoldStatus, readBaseHold } from './base-hold.js';
|
|
7
|
+
import { notInitializedMessage } from './first-run.js';
|
|
8
|
+
import { readRunFlagOverrides } from './run-flags.js';
|
|
9
|
+
import { buildStatusJson } from './status-json.js';
|
|
10
|
+
import { checkSweepHeartbeat, defaultSweepHeartbeatDeps, formatSweepHeartbeatStatusLine } from './sweep-heartbeat.js';
|
|
11
|
+
import { buildStatusUpdateJson, formatUpdateStatusLine, readUpdateState, updateStatePath } from './update-state.js';
|
|
12
|
+
/** Formats the time since `lastActivityAt` as a short duration (e.g. `3m`) for the
|
|
13
|
+
* `factory status` `== Active ==` section's `[phase, <age> ago]` display (#1343). An
|
|
14
|
+
* active claim's heartbeat is always within DEFAULT_QUEUE_ACTIVITY_STALE_THRESHOLD_MS
|
|
15
|
+
* (15m), so minutes is the only unit that ever shows. */
|
|
16
|
+
function formatClaimAge(lastActivityAt, now) {
|
|
17
|
+
const ageMs = Math.max(0, now - Date.parse(lastActivityAt));
|
|
18
|
+
const minutes = Math.floor(ageMs / 60_000);
|
|
19
|
+
return minutes < 1 ? '<1m' : `${minutes}m`;
|
|
20
|
+
}
|
|
21
|
+
export async function cmdStatus(opts, rt) {
|
|
22
|
+
if (opts.json) {
|
|
23
|
+
// `--kpis` is deliberately ignored here: the JSON shape is fixed (#1101).
|
|
24
|
+
const repoRoot = await rt.getRepoRoot();
|
|
25
|
+
const paths = getFactoryPaths(repoRoot);
|
|
26
|
+
if (!existsSync(paths.root))
|
|
27
|
+
throw new rt.CliExitError(`factory: ${notInitializedMessage()}`, 2);
|
|
28
|
+
const ghRepo = await rt.getGitHubRepo();
|
|
29
|
+
let active = [];
|
|
30
|
+
if (existsSync(paths.queue)) {
|
|
31
|
+
const { entries, diagnostics } = parseQueue(readFileSync(paths.queue, 'utf-8'));
|
|
32
|
+
if (entries.length > 0)
|
|
33
|
+
({ active } = await partitionLocalQueueByActivity(entries, paths.runs));
|
|
34
|
+
rt.warnQueueDiagnostics(diagnostics);
|
|
35
|
+
}
|
|
36
|
+
console.log(JSON.stringify(buildStatusJson({
|
|
37
|
+
repo: ghRepo,
|
|
38
|
+
product: rt.readActiveProduct(paths.product) ?? null,
|
|
39
|
+
stop: existsSync(paths.stop),
|
|
40
|
+
breakers: await new ProviderBreaker(paths.breaker).list(),
|
|
41
|
+
active,
|
|
42
|
+
update: buildStatusUpdateJson(readUpdateState(updateStatePath(daemonRuntimePaths().dir))),
|
|
43
|
+
now: Date.now(),
|
|
44
|
+
})));
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
const repoRoot = await rt.getRepoRoot();
|
|
48
|
+
const ghRepo = await rt.getGitHubRepo();
|
|
49
|
+
const paths = getFactoryPaths(repoRoot);
|
|
50
|
+
const repoConfig = rt.configLoaders.loadRepoConfig(repoRoot);
|
|
51
|
+
const modelsConfig = applyRepoConfig(rt.configLoaders.loadModelsConfig(), repoConfig);
|
|
52
|
+
const routesConfig = rt.configLoaders.loadRoutesConfig();
|
|
53
|
+
const effective = resolveEffectiveConfig(repoConfig);
|
|
54
|
+
const router = new rt.ModelRouter(modelsConfig, routesConfig, false, undefined, effective.allowExperimental, effective.localOnly);
|
|
55
|
+
router.setLocalAuthSink?.(recordLocalAuthFailure);
|
|
56
|
+
const product = rt.readActiveProduct(paths.product) ?? '(none)';
|
|
57
|
+
console.log(styleText('bold', `== ${ghRepo} ==`));
|
|
58
|
+
console.log(`Product: ${product}`);
|
|
59
|
+
const worktreeParent = rt.configLoaders.loadFactoryConfigForRepo(paths.config).worktree.parent;
|
|
60
|
+
console.log(formatWorktreeLocation(resolveWorktreeRoot({ repoRoot, parent: worktreeParent, repo: ghRepo }), worktreeParent));
|
|
61
|
+
console.log(styleText('bold', '\n== Active =='));
|
|
62
|
+
if (existsSync(paths.queue)) {
|
|
63
|
+
const { entries, diagnostics } = parseQueue(readFileSync(paths.queue, 'utf-8'));
|
|
64
|
+
if (entries.length > 0) {
|
|
65
|
+
const { active, staleCount } = await partitionLocalQueueByActivity(entries, paths.runs);
|
|
66
|
+
if (active.length === 0) {
|
|
67
|
+
console.log(' (idle — no active claims)');
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
const now = Date.now();
|
|
71
|
+
for (const e of active) {
|
|
72
|
+
console.log(` ${e.lane} ${e.issue} [${e.phase}, ${formatClaimAge(e.lastActivityAt, now)} ago]`);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
if (staleCount > 0) {
|
|
76
|
+
console.log(` (${staleCount} stale entr${staleCount === 1 ? 'y' : 'ies'} hidden — no recent activity)`);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
else if (diagnostics.length === 0) {
|
|
80
|
+
console.log(' (idle — no active claims)');
|
|
81
|
+
}
|
|
82
|
+
rt.warnQueueDiagnostics(diagnostics);
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
console.log(' (no queue file)');
|
|
86
|
+
}
|
|
87
|
+
const baseHold = readBaseHold(paths.baseHold);
|
|
88
|
+
if (baseHold !== null && baseHold.repo === ghRepo) {
|
|
89
|
+
console.log(styleText('bold', '\n== Base hold =='));
|
|
90
|
+
for (const line of formatBaseHoldStatus(baseHold))
|
|
91
|
+
console.log(line);
|
|
92
|
+
}
|
|
93
|
+
console.log(styleText('bold', '\n== Queue =='));
|
|
94
|
+
if (!rt.hasGitHubToken()) {
|
|
95
|
+
console.log(' (no GitHub token — run `gh auth login`)');
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
const [owner, repoName] = ghRepo.split('/');
|
|
99
|
+
const githubQueue = createGithubQueue({ client: createOctokitQueueClient(rt.getOctokit()), owner, repo: repoName });
|
|
100
|
+
try {
|
|
101
|
+
const lanes = await githubQueue.lanes();
|
|
102
|
+
let printed = false;
|
|
103
|
+
for (const lane of lanes) {
|
|
104
|
+
const issues = await githubQueue.list(lane);
|
|
105
|
+
for (const issue of issues) {
|
|
106
|
+
console.log(` ${lane} #${issue}`);
|
|
107
|
+
printed = true;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
if (!printed) {
|
|
111
|
+
console.log(' (no claimable work)');
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
catch (err) {
|
|
115
|
+
console.log(` (queue lookup failed — ${rt.errorDetail(err)})`);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
console.log(styleText('bold', '\n== Health =='));
|
|
119
|
+
const update = buildStatusUpdateJson(readUpdateState(updateStatePath(daemonRuntimePaths().dir)));
|
|
120
|
+
console.log(` ${formatUpdateStatusLine(update)}`);
|
|
121
|
+
if (opts.kpis) {
|
|
122
|
+
console.log(styleText('bold', '\n Effective config:'));
|
|
123
|
+
for (const line of describeEffectiveConfig({
|
|
124
|
+
router,
|
|
125
|
+
repo: repoConfig,
|
|
126
|
+
repoConfigPath: '.factory/config.json',
|
|
127
|
+
mergePolicy: resolveMergePolicy(rt.configLoaders.loadFactoryConfigForRepo(paths.config), process.env, {
|
|
128
|
+
auto: readRunFlagOverrides(paths.runFlags).autoMerge,
|
|
129
|
+
}),
|
|
130
|
+
prClassifier: resolvePrClassifierPolicy(rt.configLoaders.loadFactoryConfigForRepo(paths.config), process.env, {
|
|
131
|
+
classifier: readRunFlagOverrides(paths.runFlags).prClassifier,
|
|
132
|
+
}),
|
|
133
|
+
})) {
|
|
134
|
+
console.log(` ${line}`);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
console.log('\n (Effective config and KPIs hidden — run `factory status --kpis` to view)');
|
|
139
|
+
}
|
|
140
|
+
console.log(styleText('bold', '\n Provider breaker:'));
|
|
141
|
+
const openBreakers = await new ProviderBreaker(paths.breaker).list();
|
|
142
|
+
if (openBreakers.length === 0) {
|
|
143
|
+
console.log(' (closed)');
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
for (const b of openBreakers) {
|
|
147
|
+
console.log(` ${b.provider}: OPEN (${b.reason}) — ${Math.ceil(b.remainingMs / 60_000)}m remaining`);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
console.log(styleText('bold', '\n Sweep heartbeat:'));
|
|
151
|
+
const sweepStatus = checkSweepHeartbeat(rt.configLoaders.loadFactoryConfigForRepo(paths.config).sweep, process.env, defaultSweepHeartbeatDeps());
|
|
152
|
+
console.log(` ${formatSweepHeartbeatStatusLine(sweepStatus)}`);
|
|
153
|
+
console.log(styleText('bold', '\n Last Events:'));
|
|
154
|
+
if (existsSync(paths.events)) {
|
|
155
|
+
const events = readFileSync(paths.events, 'utf-8').trim().split('\n').slice(-12);
|
|
156
|
+
for (const e of events) {
|
|
157
|
+
try {
|
|
158
|
+
const ev = JSON.parse(e);
|
|
159
|
+
console.log(` ${ev.type} #${ev.issue}: ${ev.msg}`);
|
|
160
|
+
}
|
|
161
|
+
catch { }
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
console.log(' (none)');
|
|
166
|
+
}
|
|
167
|
+
if (opts.kpis) {
|
|
168
|
+
console.log(styleText('bold', '\n KPIs:'));
|
|
169
|
+
const kpiEvents = existsSync(paths.events) ? readEvents(paths.events) : [];
|
|
170
|
+
const kpiCosts = existsSync(paths.costs) ? rt.readCosts(paths.costs) : [];
|
|
171
|
+
for (const line of formatKpiLines(computeHealthKpis(kpiEvents, kpiCosts))) {
|
|
172
|
+
console.log(` ${line}`);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
if (existsSync(paths.stop)) {
|
|
176
|
+
console.log(styleText('red', '\n!! STOP file present — factory halting between issues'));
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/cli/status.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.7-next.
|
|
3
|
+
"version": "0.9.7-next.4",
|
|
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.7-next.
|
|
51
|
-
"@on-par/factory-tui": "0.9.7-next.
|
|
50
|
+
"@on-par/factory-core": "0.9.7-next.4",
|
|
51
|
+
"@on-par/factory-tui": "0.9.7-next.4",
|
|
52
52
|
"commander": "^15.0.0"
|
|
53
53
|
},
|
|
54
54
|
"license": "MIT",
|