@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.
@@ -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.2",
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.2",
51
- "@on-par/factory-tui": "0.9.7-next.2",
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",