@on-par/factory-cli 0.9.6-next.1 → 0.9.6-next.3

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,31 @@
1
+ import type { Octokit } from '@octokit/rest';
2
+ import type { QueueDiagnostic } from '@on-par/factory-core';
3
+ import type { CliDeps, CliExitError, createIngestHook, createSuperviseRunQueue, resolveUsageKnobs, superviseLoop, withRepoRunLock } from './index.js';
4
+ export interface SuperviseOptions {
5
+ now?: boolean;
6
+ localQueue?: boolean;
7
+ autoMerge?: boolean;
8
+ usageWatch?: boolean;
9
+ usageThreshold?: string;
10
+ usagePoll?: string;
11
+ branchPrefix?: string;
12
+ }
13
+ /** index.ts's helpers for `factory supervise`, built at call time so main() deps injection reaches the handler. */
14
+ export interface SuperviseRuntime {
15
+ configLoaders: Required<Pick<CliDeps, 'loadFactoryConfigForRepo' | 'loadRepoConfig'>>;
16
+ getRepoRoot: () => Promise<string>;
17
+ getGitHubRepo: () => Promise<string>;
18
+ getOctokit: () => Octokit;
19
+ branchPrefixOrExit: (raw: string | undefined) => string;
20
+ warnQueueDiagnostics: (diagnostics: QueueDiagnostic[]) => void;
21
+ resolveUsageKnobs: typeof resolveUsageKnobs;
22
+ usageFlagOverrides: (opts: SuperviseOptions, threshold: 'resumeAt') => Parameters<typeof resolveUsageKnobs>[2];
23
+ withRepoRunLock: typeof withRepoRunLock;
24
+ superviseLoop: typeof superviseLoop;
25
+ createSuperviseRunQueue: typeof createSuperviseRunQueue;
26
+ createIngestHook: typeof createIngestHook;
27
+ cmdRun: (opts: Omit<SuperviseOptions, 'now'>) => Promise<void>;
28
+ CliExitError: typeof CliExitError;
29
+ }
30
+ export declare function cmdSupervise(opts: SuperviseOptions, rt: SuperviseRuntime): Promise<void>;
31
+ //# sourceMappingURL=supervise.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"supervise.d.ts","sourceRoot":"","sources":["../../src/cli/supervise.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAG5D,OAAO,KAAK,EACV,OAAO,EACP,YAAY,EAEZ,gBAAgB,EAChB,uBAAuB,EACvB,iBAAiB,EACjB,aAAa,EACb,eAAe,EAChB,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,gBAAgB;IAC/B,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,mHAAmH;AACnH,MAAM,WAAW,gBAAgB;IAC/B,aAAa,EAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,0BAA0B,GAAG,gBAAgB,CAAC,CAAC,CAAC;IACtF,WAAW,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACnC,aAAa,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACrC,UAAU,EAAE,MAAM,OAAO,CAAC;IAC1B,kBAAkB,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,KAAK,MAAM,CAAC;IACxD,oBAAoB,EAAE,CAAC,WAAW,EAAE,eAAe,EAAE,KAAK,IAAI,CAAC;IAC/D,iBAAiB,EAAE,OAAO,iBAAiB,CAAC;IAC5C,kBAAkB,EAAE,CAAC,IAAI,EAAE,gBAAgB,EAAE,SAAS,EAAE,UAAU,KAAK,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/G,eAAe,EAAE,OAAO,eAAe,CAAC;IACxC,aAAa,EAAE,OAAO,aAAa,CAAC;IACpC,uBAAuB,EAAE,OAAO,uBAAuB,CAAC;IACxD,gBAAgB,EAAE,OAAO,gBAAgB,CAAC;IAC1C,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/D,YAAY,EAAE,OAAO,YAAY,CAAC;CACnC;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,gBAAgB,EAAE,EAAE,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA+D9F"}
@@ -0,0 +1,59 @@
1
+ // packages/cli/src/cli/supervise.ts — the factory supervise handler, moved out of index.ts (#2797)
2
+ import { existsSync, readFileSync } from 'node:fs';
3
+ import { getFactoryPaths, parseQueue, resolveIngestConfig } from '@on-par/factory-core';
4
+ import { createGithubQueue, createOctokitQueueClient } from '@on-par/factory-core/internal';
5
+ export async function cmdSupervise(opts, rt) {
6
+ const branchPrefix = rt.branchPrefixOrExit(opts.branchPrefix);
7
+ const repoRoot = await rt.getRepoRoot();
8
+ const paths = getFactoryPaths(repoRoot);
9
+ const ingestCfg = resolveIngestConfig(rt.configLoaders.loadFactoryConfigForRepo(paths.config));
10
+ const countPending = async () => {
11
+ if (opts.localQueue === true) {
12
+ const content = existsSync(paths.queue) ? readFileSync(paths.queue, 'utf-8') : '';
13
+ const parsed = parseQueue(content);
14
+ rt.warnQueueDiagnostics(parsed.diagnostics);
15
+ return parsed.entries.length;
16
+ }
17
+ const [owner, repo] = (await rt.getGitHubRepo()).split('/');
18
+ const gq = createGithubQueue({ client: createOctokitQueueClient(rt.getOctokit()), owner, repo });
19
+ const lanes = await gq.lanes();
20
+ const counts = await Promise.all(lanes.map((lane) => gq.list(lane)));
21
+ return counts.reduce((total, issues) => total + issues.length, 0);
22
+ };
23
+ if ((await countPending()) === 0 && !ingestCfg.enabled) {
24
+ throw new rt.CliExitError('queue empty — run factory init + triage first', 2);
25
+ }
26
+ let knobs;
27
+ try {
28
+ knobs = rt.resolveUsageKnobs(process.env, rt.configLoaders.loadRepoConfig(repoRoot), rt.usageFlagOverrides(opts, 'resumeAt'));
29
+ }
30
+ catch (err) {
31
+ throw new rt.CliExitError(`factory: ${err.message}`, 2);
32
+ }
33
+ await rt.withRepoRunLock(paths, 'factory supervise', () => rt.superviseLoop({
34
+ cap: knobs.cap,
35
+ resumeAt: knobs.resumeAt,
36
+ pollMs: knobs.pollMs,
37
+ watch: knobs.watch,
38
+ watchSource: knobs.watchSource,
39
+ resumeAtSource: knobs.resumeAtSource,
40
+ pollSource: knobs.pollSource,
41
+ estimator: knobs.estimator,
42
+ stopFile: paths.stop,
43
+ eventsFile: paths.events,
44
+ now: opts.now,
45
+ runQueue: rt.createSuperviseRunQueue(paths, ingestCfg, {
46
+ cmdRunFn: () => rt.cmdRun({
47
+ localQueue: opts.localQueue,
48
+ autoMerge: opts.autoMerge,
49
+ usageWatch: opts.usageWatch,
50
+ usageThreshold: opts.usageThreshold,
51
+ usagePoll: opts.usagePoll,
52
+ branchPrefix: opts.branchPrefix,
53
+ }),
54
+ pendingCount: countPending,
55
+ }),
56
+ ingest: ingestCfg.enabled ? rt.createIngestHook(repoRoot, paths, ingestCfg, { branchPrefix }) : undefined,
57
+ }));
58
+ }
59
+ //# sourceMappingURL=supervise.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"supervise.js","sourceRoot":"","sources":["../../src/cli/supervise.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.6-next.1",
3
+ "version": "0.9.6-next.3",
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.6-next.1",
51
- "@on-par/factory-tui": "0.9.6-next.1",
50
+ "@on-par/factory-core": "0.9.6-next.3",
51
+ "@on-par/factory-tui": "0.9.6-next.3",
52
52
  "commander": "^15.0.0"
53
53
  },
54
54
  "license": "MIT",