@on-par/factory-cli 0.0.0-stage → 0.9.1
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/LICENSE +21 -0
- package/README.md +40 -2
- package/dist/cli/admission.d.ts +17 -0
- package/dist/cli/admission.d.ts.map +1 -0
- package/dist/cli/admission.js +37 -0
- package/dist/cli/admission.js.map +1 -0
- package/dist/cli/base-hold.d.ts +63 -0
- package/dist/cli/base-hold.d.ts.map +1 -0
- package/dist/cli/base-hold.js +122 -0
- package/dist/cli/base-hold.js.map +1 -0
- package/dist/cli/branch-prefix.d.ts +8 -0
- package/dist/cli/branch-prefix.d.ts.map +1 -0
- package/dist/cli/branch-prefix.js +16 -0
- package/dist/cli/branch-prefix.js.map +1 -0
- package/dist/cli/classifier-backtest.d.ts +50 -0
- package/dist/cli/classifier-backtest.d.ts.map +1 -0
- package/dist/cli/classifier-backtest.js +112 -0
- package/dist/cli/classifier-backtest.js.map +1 -0
- package/dist/cli/cost-json.d.ts +37 -0
- package/dist/cli/cost-json.d.ts.map +1 -0
- package/dist/cli/cost-json.js +48 -0
- package/dist/cli/cost-json.js.map +1 -0
- package/dist/cli/daemon.d.ts +162 -0
- package/dist/cli/daemon.d.ts.map +1 -0
- package/dist/cli/daemon.js +393 -0
- package/dist/cli/daemon.js.map +1 -0
- package/dist/cli/doctor.d.ts +127 -0
- package/dist/cli/doctor.d.ts.map +1 -0
- package/dist/cli/doctor.js +400 -0
- package/dist/cli/doctor.js.map +1 -0
- package/dist/cli/feedback.d.ts +74 -0
- package/dist/cli/feedback.d.ts.map +1 -0
- package/dist/cli/feedback.js +180 -0
- package/dist/cli/feedback.js.map +1 -0
- package/dist/cli/filing.d.ts +22 -0
- package/dist/cli/filing.d.ts.map +1 -0
- package/dist/cli/filing.js +53 -0
- package/dist/cli/filing.js.map +1 -0
- package/dist/cli/first-run.d.ts +9 -0
- package/dist/cli/first-run.d.ts.map +1 -0
- package/dist/cli/first-run.js +34 -0
- package/dist/cli/first-run.js.map +1 -0
- package/dist/cli/help-groups.d.ts +17 -0
- package/dist/cli/help-groups.d.ts.map +1 -0
- package/dist/cli/help-groups.js +59 -0
- package/dist/cli/help-groups.js.map +1 -0
- package/dist/cli/hosted-queue.d.ts +45 -0
- package/dist/cli/hosted-queue.d.ts.map +1 -0
- package/dist/cli/hosted-queue.js +74 -0
- package/dist/cli/hosted-queue.js.map +1 -0
- package/dist/cli/hosted-runner.d.ts +44 -0
- package/dist/cli/hosted-runner.d.ts.map +1 -0
- package/dist/cli/hosted-runner.js +68 -0
- package/dist/cli/hosted-runner.js.map +1 -0
- package/dist/cli/hosted.d.ts +38 -0
- package/dist/cli/hosted.d.ts.map +1 -0
- package/dist/cli/hosted.js +82 -0
- package/dist/cli/hosted.js.map +1 -0
- package/dist/cli/index.d.ts +674 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +4916 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/init-files.d.ts +8 -0
- package/dist/cli/init-files.d.ts.map +1 -0
- package/dist/cli/init-files.js +45 -0
- package/dist/cli/init-files.js.map +1 -0
- package/dist/cli/logs.d.ts +27 -0
- package/dist/cli/logs.d.ts.map +1 -0
- package/dist/cli/logs.js +52 -0
- package/dist/cli/logs.js.map +1 -0
- package/dist/cli/merge-scope.d.ts +7 -0
- package/dist/cli/merge-scope.d.ts.map +1 -0
- package/dist/cli/merge-scope.js +14 -0
- package/dist/cli/merge-scope.js.map +1 -0
- package/dist/cli/octokit.d.ts +43 -0
- package/dist/cli/octokit.d.ts.map +1 -0
- package/dist/cli/octokit.js +87 -0
- package/dist/cli/octokit.js.map +1 -0
- package/dist/cli/queue-add-json.d.ts +25 -0
- package/dist/cli/queue-add-json.d.ts.map +1 -0
- package/dist/cli/queue-add-json.js +24 -0
- package/dist/cli/queue-add-json.js.map +1 -0
- package/dist/cli/queue-clear.d.ts +15 -0
- package/dist/cli/queue-clear.d.ts.map +1 -0
- package/dist/cli/queue-clear.js +58 -0
- package/dist/cli/queue-clear.js.map +1 -0
- package/dist/cli/queue-list.d.ts +24 -0
- package/dist/cli/queue-list.d.ts.map +1 -0
- package/dist/cli/queue-list.js +25 -0
- package/dist/cli/queue-list.js.map +1 -0
- package/dist/cli/ready-check.d.ts +98 -0
- package/dist/cli/ready-check.d.ts.map +1 -0
- package/dist/cli/ready-check.js +169 -0
- package/dist/cli/ready-check.js.map +1 -0
- package/dist/cli/reset.d.ts +40 -0
- package/dist/cli/reset.d.ts.map +1 -0
- package/dist/cli/reset.js +215 -0
- package/dist/cli/reset.js.map +1 -0
- package/dist/cli/run-children.d.ts +24 -0
- package/dist/cli/run-children.d.ts.map +1 -0
- package/dist/cli/run-children.js +73 -0
- package/dist/cli/run-children.js.map +1 -0
- package/dist/cli/run-flags.d.ts +14 -0
- package/dist/cli/run-flags.d.ts.map +1 -0
- package/dist/cli/run-flags.js +43 -0
- package/dist/cli/run-flags.js.map +1 -0
- package/dist/cli/runs-diffstat.d.ts +43 -0
- package/dist/cli/runs-diffstat.d.ts.map +1 -0
- package/dist/cli/runs-diffstat.js +91 -0
- package/dist/cli/runs-diffstat.js.map +1 -0
- package/dist/cli/runs.d.ts +36 -0
- package/dist/cli/runs.d.ts.map +1 -0
- package/dist/cli/runs.js +102 -0
- package/dist/cli/runs.js.map +1 -0
- package/dist/cli/self-update.d.ts +68 -0
- package/dist/cli/self-update.d.ts.map +1 -0
- package/dist/cli/self-update.js +167 -0
- package/dist/cli/self-update.js.map +1 -0
- package/dist/cli/staleness.d.ts +30 -0
- package/dist/cli/staleness.d.ts.map +1 -0
- package/dist/cli/staleness.js +132 -0
- package/dist/cli/staleness.js.map +1 -0
- package/dist/cli/state-root.d.ts +5 -0
- package/dist/cli/state-root.d.ts.map +1 -0
- package/dist/cli/state-root.js +12 -0
- package/dist/cli/state-root.js.map +1 -0
- package/dist/cli/status-json.d.ts +49 -0
- package/dist/cli/status-json.d.ts.map +1 -0
- package/dist/cli/status-json.js +23 -0
- package/dist/cli/status-json.js.map +1 -0
- package/dist/cli/stop-resume-json.d.ts +18 -0
- package/dist/cli/stop-resume-json.d.ts.map +1 -0
- package/dist/cli/stop-resume-json.js +10 -0
- package/dist/cli/stop-resume-json.js.map +1 -0
- package/dist/cli/stop-sentinel.d.ts +23 -0
- package/dist/cli/stop-sentinel.d.ts.map +1 -0
- package/dist/cli/stop-sentinel.js +61 -0
- package/dist/cli/stop-sentinel.js.map +1 -0
- package/dist/cli/sweep-heartbeat.d.ts +33 -0
- package/dist/cli/sweep-heartbeat.d.ts.map +1 -0
- package/dist/cli/sweep-heartbeat.js +65 -0
- package/dist/cli/sweep-heartbeat.js.map +1 -0
- package/dist/cli/unpark.d.ts +28 -0
- package/dist/cli/unpark.d.ts.map +1 -0
- package/dist/cli/unpark.js +68 -0
- package/dist/cli/unpark.js.map +1 -0
- package/dist/cli/update-state.d.ts +44 -0
- package/dist/cli/update-state.d.ts.map +1 -0
- package/dist/cli/update-state.js +154 -0
- package/dist/cli/update-state.js.map +1 -0
- package/dist/cli/usage-json.d.ts +20 -0
- package/dist/cli/usage-json.d.ts.map +1 -0
- package/dist/cli/usage-json.js +36 -0
- package/dist/cli/usage-json.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +6 -0
- package/dist/cli.js.map +1 -0
- package/dist/entry.d.ts +6 -0
- package/dist/entry.d.ts.map +1 -0
- package/dist/entry.js +13 -0
- package/dist/entry.js.map +1 -0
- package/package.json +56 -4
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { type FactorydConfig, type InstallKind, type UpdateChannel, type UpdateMode } from './daemon.js';
|
|
2
|
+
export declare const UPDATE_OUTCOMES: readonly ['updated', 'rolled-back', 'failed', 'skipped'];
|
|
3
|
+
export type UpdateOutcome = (typeof UPDATE_OUTCOMES)[number];
|
|
4
|
+
export interface UpdateLastResult {
|
|
5
|
+
at: string;
|
|
6
|
+
version: string;
|
|
7
|
+
outcome: UpdateOutcome;
|
|
8
|
+
error?: string;
|
|
9
|
+
}
|
|
10
|
+
export interface UpdateDraining {
|
|
11
|
+
since: string;
|
|
12
|
+
target: string;
|
|
13
|
+
}
|
|
14
|
+
/** On-disk shape of <daemon state dir>/update-state.json (#2129). */
|
|
15
|
+
export interface UpdateState {
|
|
16
|
+
schemaVersion: 1;
|
|
17
|
+
mode: UpdateMode;
|
|
18
|
+
channel: UpdateChannel | null;
|
|
19
|
+
installKind: InstallKind;
|
|
20
|
+
current: string;
|
|
21
|
+
available: string | null;
|
|
22
|
+
lastCheckAt: string | null;
|
|
23
|
+
lastResult: UpdateLastResult | null;
|
|
24
|
+
draining: UpdateDraining | null;
|
|
25
|
+
}
|
|
26
|
+
/** `update` in `factory status --json` — UpdateState without schemaVersion. */
|
|
27
|
+
export type StatusUpdateJson = Omit<UpdateState, 'schemaVersion'>;
|
|
28
|
+
export declare function updateStatePath(stateDir: string): string;
|
|
29
|
+
/** Tolerant reader: a missing or invalid file is `null`; never throws. */
|
|
30
|
+
export declare function readUpdateState(file: string): UpdateState | null;
|
|
31
|
+
/** Atomic write (tmp + rename) so a concurrent `factory status` never reads a torn file. */
|
|
32
|
+
export declare function writeUpdateState(file: string, state: UpdateState): void;
|
|
33
|
+
export declare function initialUpdateState(config: Pick<FactorydConfig, 'autoUpdate' | 'install'>, previous: UpdateState | null): UpdateState;
|
|
34
|
+
export declare function buildStatusUpdateJson(state: UpdateState | null): StatusUpdateJson | null;
|
|
35
|
+
/** The one human line `factory status` prints for the update state. */
|
|
36
|
+
export declare function formatUpdateStatusLine(update: StatusUpdateJson | null): string;
|
|
37
|
+
export declare function formatUpdateStartupLine(state: UpdateState): string;
|
|
38
|
+
export declare function formatUpdateCheckLine(state: UpdateState): string;
|
|
39
|
+
/** Records one check result and logs it once. Seam for the later update checker; no production caller yet. */
|
|
40
|
+
export declare function recordUpdateCheck(file: string, check: {
|
|
41
|
+
at: string;
|
|
42
|
+
available: string | null;
|
|
43
|
+
}, log: (line: string) => void): UpdateState | null;
|
|
44
|
+
//# sourceMappingURL=update-state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-state.d.ts","sourceRoot":"","sources":["../../src/cli/update-state.ts"],"names":[],"mappings":"AAEA,OAAO,EAAgB,KAAK,cAAc,EAAE,KAAK,WAAW,EAAE,KAAK,aAAa,EAAE,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAEvH,eAAO,MAAM,eAAe,YAAI,SAAS,EAAE,aAAa,EAAE,QAAQ,EAAE,SAAS,CAAU,CAAC;AACxF,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC;AAE7D,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,aAAa,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,qEAAqE;AACrE,MAAM,WAAW,WAAW;IAC1B,aAAa,EAAE,CAAC,CAAC;IACjB,IAAI,EAAE,UAAU,CAAC;IACjB,OAAO,EAAE,aAAa,GAAG,IAAI,CAAC;IAC9B,WAAW,EAAE,WAAW,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACpC,QAAQ,EAAE,cAAc,GAAG,IAAI,CAAC;CACjC;AAED,+EAA+E;AAC/E,MAAM,MAAM,gBAAgB,GAAG,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;AAIlE,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAExD;AA0BD,0EAA0E;AAC1E,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAuBhE;AAED,4FAA4F;AAC5F,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CAKvE;AAED,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE,YAAY,GAAG,SAAS,CAAC,EACtD,QAAQ,EAAE,WAAW,GAAG,IAAI,GAC3B,WAAW,CAeb;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,GAAG,gBAAgB,GAAG,IAAI,CAIxF;AA0BD,uEAAuE;AACvE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI,GAAG,MAAM,CAa9E;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAElE;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAGhE;AAED,8GAA8G;AAC9G,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,EAC/C,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAC1B,WAAW,GAAG,IAAI,CAOpB"}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync, renameSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { dirname, join } from 'node:path';
|
|
3
|
+
import { UPDATE_MODES } from './daemon.js';
|
|
4
|
+
export const UPDATE_OUTCOMES = ['updated', 'rolled-back', 'failed', 'skipped'];
|
|
5
|
+
const INSTALL_KINDS = ['npm-global', 'source', 'unknown'];
|
|
6
|
+
export function updateStatePath(stateDir) {
|
|
7
|
+
return join(stateDir, 'update-state.json');
|
|
8
|
+
}
|
|
9
|
+
function isRecord(value) {
|
|
10
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
11
|
+
}
|
|
12
|
+
function stringOrNull(value) {
|
|
13
|
+
return typeof value === 'string' ? value : null;
|
|
14
|
+
}
|
|
15
|
+
function parseLastResult(value) {
|
|
16
|
+
if (!isRecord(value))
|
|
17
|
+
return null;
|
|
18
|
+
const { at, version, outcome, error } = value;
|
|
19
|
+
if (typeof at !== 'string' || typeof version !== 'string')
|
|
20
|
+
return null;
|
|
21
|
+
if (!UPDATE_OUTCOMES.includes(outcome))
|
|
22
|
+
return null;
|
|
23
|
+
const result = { at, version, outcome: outcome };
|
|
24
|
+
if (typeof error === 'string')
|
|
25
|
+
result.error = error;
|
|
26
|
+
return result;
|
|
27
|
+
}
|
|
28
|
+
function parseDraining(value) {
|
|
29
|
+
if (!isRecord(value))
|
|
30
|
+
return null;
|
|
31
|
+
if (typeof value.since !== 'string' || typeof value.target !== 'string')
|
|
32
|
+
return null;
|
|
33
|
+
return { since: value.since, target: value.target };
|
|
34
|
+
}
|
|
35
|
+
/** Tolerant reader: a missing or invalid file is `null`; never throws. */
|
|
36
|
+
export function readUpdateState(file) {
|
|
37
|
+
try {
|
|
38
|
+
if (!existsSync(file))
|
|
39
|
+
return null;
|
|
40
|
+
const raw = JSON.parse(readFileSync(file, 'utf-8'));
|
|
41
|
+
if (!isRecord(raw))
|
|
42
|
+
return null;
|
|
43
|
+
if (!UPDATE_MODES.includes(raw.mode))
|
|
44
|
+
return null;
|
|
45
|
+
if (typeof raw.current !== 'string' || raw.current === '')
|
|
46
|
+
return null;
|
|
47
|
+
return {
|
|
48
|
+
schemaVersion: 1,
|
|
49
|
+
mode: raw.mode,
|
|
50
|
+
channel: raw.channel === 'latest' || raw.channel === 'next' ? raw.channel : null,
|
|
51
|
+
installKind: INSTALL_KINDS.includes(raw.installKind)
|
|
52
|
+
? raw.installKind
|
|
53
|
+
: 'unknown',
|
|
54
|
+
current: raw.current,
|
|
55
|
+
available: stringOrNull(raw.available),
|
|
56
|
+
lastCheckAt: stringOrNull(raw.lastCheckAt),
|
|
57
|
+
lastResult: parseLastResult(raw.lastResult),
|
|
58
|
+
draining: parseDraining(raw.draining),
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/** Atomic write (tmp + rename) so a concurrent `factory status` never reads a torn file. */
|
|
66
|
+
export function writeUpdateState(file, state) {
|
|
67
|
+
mkdirSync(dirname(file), { recursive: true });
|
|
68
|
+
const tmp = `${file}.tmp`;
|
|
69
|
+
writeFileSync(tmp, `${JSON.stringify(state, null, 2)}\n`);
|
|
70
|
+
renameSync(tmp, file);
|
|
71
|
+
}
|
|
72
|
+
export function initialUpdateState(config, previous) {
|
|
73
|
+
const { mode, channel } = config.autoUpdate;
|
|
74
|
+
const current = config.install.version;
|
|
75
|
+
const carried = previous?.available ?? null;
|
|
76
|
+
return {
|
|
77
|
+
schemaVersion: 1,
|
|
78
|
+
mode,
|
|
79
|
+
channel,
|
|
80
|
+
installKind: config.install.kind,
|
|
81
|
+
current,
|
|
82
|
+
available: mode === 'manual' || carried === current ? null : carried,
|
|
83
|
+
lastCheckAt: previous?.lastCheckAt ?? null,
|
|
84
|
+
lastResult: previous?.lastResult ?? null,
|
|
85
|
+
draining: null,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
export function buildStatusUpdateJson(state) {
|
|
89
|
+
if (!state)
|
|
90
|
+
return null;
|
|
91
|
+
const { schemaVersion: _schemaVersion, ...update } = state;
|
|
92
|
+
return { ...update, available: state.mode === 'manual' ? null : state.available };
|
|
93
|
+
}
|
|
94
|
+
function installLabel(kind) {
|
|
95
|
+
switch (kind) {
|
|
96
|
+
case 'npm-global':
|
|
97
|
+
return 'npm';
|
|
98
|
+
case 'source':
|
|
99
|
+
return 'source';
|
|
100
|
+
case 'unknown':
|
|
101
|
+
return 'unknown install';
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
function outcomeLabel(outcome) {
|
|
105
|
+
switch (outcome) {
|
|
106
|
+
case 'updated':
|
|
107
|
+
return 'updated';
|
|
108
|
+
case 'rolled-back':
|
|
109
|
+
return 'rolled back';
|
|
110
|
+
case 'failed':
|
|
111
|
+
return 'failed';
|
|
112
|
+
case 'skipped':
|
|
113
|
+
return 'skipped';
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
/** The one human line `factory status` prints for the update state. */
|
|
117
|
+
export function formatUpdateStatusLine(update) {
|
|
118
|
+
if (!update)
|
|
119
|
+
return 'factory update: no factoryd update state (daemon not started?)';
|
|
120
|
+
let line = `factory ${update.current} (${update.mode}, ${installLabel(update.installKind)})`;
|
|
121
|
+
if (update.mode === 'manual')
|
|
122
|
+
line += ' — automatic updates off';
|
|
123
|
+
else if (update.available !== null && update.available !== update.current)
|
|
124
|
+
line += ` — ${update.available} available`;
|
|
125
|
+
else
|
|
126
|
+
line += ' — up to date';
|
|
127
|
+
if (update.lastResult) {
|
|
128
|
+
const { version, outcome, error } = update.lastResult;
|
|
129
|
+
line += `; last update to ${version} ${outcomeLabel(outcome)}`;
|
|
130
|
+
if (error)
|
|
131
|
+
line += ` (${error})`;
|
|
132
|
+
}
|
|
133
|
+
if (update.draining)
|
|
134
|
+
line += `; draining for ${update.draining.target} since ${update.draining.since}`;
|
|
135
|
+
return line;
|
|
136
|
+
}
|
|
137
|
+
export function formatUpdateStartupLine(state) {
|
|
138
|
+
return `update: factory ${state.current}, mode ${state.mode} (channel ${state.channel ?? 'none'}, install ${state.installKind})`;
|
|
139
|
+
}
|
|
140
|
+
export function formatUpdateCheckLine(state) {
|
|
141
|
+
const found = state.available && state.available !== state.current ? `${state.available} available` : 'up to date';
|
|
142
|
+
return `update check: ${found} on ${state.channel ?? 'none'} (current ${state.current})`;
|
|
143
|
+
}
|
|
144
|
+
/** Records one check result and logs it once. Seam for the later update checker; no production caller yet. */
|
|
145
|
+
export function recordUpdateCheck(file, check, log) {
|
|
146
|
+
const state = readUpdateState(file);
|
|
147
|
+
if (!state)
|
|
148
|
+
return null;
|
|
149
|
+
const next = { ...state, lastCheckAt: check.at, available: check.available };
|
|
150
|
+
writeUpdateState(file, next);
|
|
151
|
+
log(formatUpdateCheckLine(next));
|
|
152
|
+
return next;
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=update-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-state.js","sourceRoot":"","sources":["../../src/cli/update-state.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { SubscriptionUsage } from '@on-par/factory-core';
|
|
2
|
+
/** Hours in the trailing usage window `factory usage` reports on. */
|
|
3
|
+
export declare const USAGE_WINDOW_HOURS: number;
|
|
4
|
+
export type UsageJsonSource = 'subscription' | 'heuristic' | 'unavailable';
|
|
5
|
+
/** `factory usage --json` payload (#2270). Absent readings are null, never 0 (ADR-0099).
|
|
6
|
+
* Additive changes only; bump schemaVersion on a breaking change. */
|
|
7
|
+
export interface UsageJson {
|
|
8
|
+
schemaVersion: 1;
|
|
9
|
+
source: UsageJsonSource;
|
|
10
|
+
/** Percent of the window used, 0-100 scale. */
|
|
11
|
+
utilizationPct: number | null;
|
|
12
|
+
resetsAt: string | null;
|
|
13
|
+
windowHours: number;
|
|
14
|
+
/** Trailing-window list-price estimate in USD. */
|
|
15
|
+
estimateUsd: number | null;
|
|
16
|
+
}
|
|
17
|
+
/** Builds the `factory usage --json` payload: the real subscription reading when present, else the
|
|
18
|
+
* list-price heuristic against `cap`, else an explicit `unavailable` record. Numbers are not rounded. */
|
|
19
|
+
export declare function buildUsageJson(subscription: SubscriptionUsage | null, estimateUsd: number | null, cap: number): UsageJson;
|
|
20
|
+
//# sourceMappingURL=usage-json.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usage-json.d.ts","sourceRoot":"","sources":["../../src/cli/usage-json.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAG9D,qEAAqE;AACrE,eAAO,MAAM,kBAAkB,QAAiC,CAAC;AAEjE,MAAM,MAAM,eAAe,GAAG,cAAc,GAAG,WAAW,GAAG,aAAa,CAAC;AAE3E;sEACsE;AACtE,MAAM,WAAW,SAAS;IACxB,aAAa,EAAE,CAAC,CAAC;IACjB,MAAM,EAAE,eAAe,CAAC;IACxB,+CAA+C;IAC/C,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,kDAAkD;IAClD,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED;0GAC0G;AAC1G,wBAAgB,cAAc,CAC5B,YAAY,EAAE,iBAAiB,GAAG,IAAI,EACtC,WAAW,EAAE,MAAM,GAAG,IAAI,EAC1B,GAAG,EAAE,MAAM,GACV,SAAS,CA6BX"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { TRAILING_WINDOW_MS } from '@on-par/factory-core/internal';
|
|
2
|
+
/** Hours in the trailing usage window `factory usage` reports on. */
|
|
3
|
+
export const USAGE_WINDOW_HOURS = TRAILING_WINDOW_MS / 3_600_000;
|
|
4
|
+
/** Builds the `factory usage --json` payload: the real subscription reading when present, else the
|
|
5
|
+
* list-price heuristic against `cap`, else an explicit `unavailable` record. Numbers are not rounded. */
|
|
6
|
+
export function buildUsageJson(subscription, estimateUsd, cap) {
|
|
7
|
+
if (subscription !== null) {
|
|
8
|
+
return {
|
|
9
|
+
schemaVersion: 1,
|
|
10
|
+
source: 'subscription',
|
|
11
|
+
utilizationPct: subscription.fiveHourUtilization,
|
|
12
|
+
resetsAt: subscription.fiveHourResetsAt,
|
|
13
|
+
windowHours: USAGE_WINDOW_HOURS,
|
|
14
|
+
estimateUsd,
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
if (estimateUsd !== null) {
|
|
18
|
+
return {
|
|
19
|
+
schemaVersion: 1,
|
|
20
|
+
source: 'heuristic',
|
|
21
|
+
utilizationPct: (estimateUsd / cap) * 100,
|
|
22
|
+
resetsAt: null,
|
|
23
|
+
windowHours: USAGE_WINDOW_HOURS,
|
|
24
|
+
estimateUsd,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
return {
|
|
28
|
+
schemaVersion: 1,
|
|
29
|
+
source: 'unavailable',
|
|
30
|
+
utilizationPct: null,
|
|
31
|
+
resetsAt: null,
|
|
32
|
+
windowHours: USAGE_WINDOW_HOURS,
|
|
33
|
+
estimateUsd: null,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=usage-json.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usage-json.js","sourceRoot":"","sources":["../../src/cli/usage-json.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAEnE,qEAAqE;AACrE,MAAM,CAAC,MAAM,kBAAkB,GAAG,kBAAkB,GAAG,SAAS,CAAC;AAiBjE;0GAC0G;AAC1G,MAAM,UAAU,cAAc,CAC5B,YAAsC,EACtC,WAA0B,EAC1B,GAAW;IAEX,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;QAC1B,OAAO;YACL,aAAa,EAAE,CAAC;YAChB,MAAM,EAAE,cAAc;YACtB,cAAc,EAAE,YAAY,CAAC,mBAAmB;YAChD,QAAQ,EAAE,YAAY,CAAC,gBAAgB;YACvC,WAAW,EAAE,kBAAkB;YAC/B,WAAW;SACZ,CAAC;IACJ,CAAC;IACD,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;QACzB,OAAO;YACL,aAAa,EAAE,CAAC;YAChB,MAAM,EAAE,WAAW;YACnB,cAAc,EAAE,CAAC,WAAW,GAAG,GAAG,CAAC,GAAG,GAAG;YACzC,QAAQ,EAAE,IAAI;YACd,WAAW,EAAE,kBAAkB;YAC/B,WAAW;SACZ,CAAC;IACJ,CAAC;IACD,OAAO;QACL,aAAa,EAAE,CAAC;QAChB,MAAM,EAAE,aAAa;QACrB,cAAc,EAAE,IAAI;QACpB,QAAQ,EAAE,IAAI;QACd,WAAW,EAAE,kBAAkB;QAC/B,WAAW,EAAE,IAAI;KAClB,CAAC;AACJ,CAAC"}
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
|
package/dist/cli.js
ADDED
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,4CAA4C;AAE5C,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,KAAK,QAAQ,CAAC,IAAI,CAAC,CAAC"}
|
package/dist/entry.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entry.d.ts","sourceRoot":"","sources":["../src/entry.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,OAAO;IACtB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAKD,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,GAAE,OAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAOhG"}
|
package/dist/entry.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// packages/cli/src/entry.ts — bin-entry runner: awaits main and exits 1 on rejection (#2031).
|
|
2
|
+
// References, not wrappers: Node's console methods are bound and process.exit ignores `this`.
|
|
3
|
+
const defaultIo = { error: console.error, exit: process.exit };
|
|
4
|
+
export async function runEntry(main, io = defaultIo) {
|
|
5
|
+
try {
|
|
6
|
+
await main();
|
|
7
|
+
}
|
|
8
|
+
catch (err) {
|
|
9
|
+
io.error(err.message);
|
|
10
|
+
io.exit(1);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=entry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entry.js","sourceRoot":"","sources":["../src/entry.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAO9F,8FAA8F;AAC9F,MAAM,SAAS,GAAY,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC;AAExE,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,IAAyB,EAAE,EAAE,GAAY,SAAS;IAC/E,IAAI,CAAC;QACH,MAAM,IAAI,EAAE,CAAC;IACf,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,EAAE,CAAC,KAAK,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;QACjC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACb,CAAC;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,58 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@on-par/factory-cli",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
|
|
3
|
+
"version": "0.9.1",
|
|
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
|
+
"keywords": [
|
|
6
|
+
"ai-agents",
|
|
7
|
+
"github",
|
|
8
|
+
"cli",
|
|
9
|
+
"claude-code",
|
|
10
|
+
"pull-requests",
|
|
11
|
+
"automation"
|
|
12
|
+
],
|
|
13
|
+
"type": "module",
|
|
14
|
+
"main": "dist/cli.js",
|
|
15
|
+
"bin": {
|
|
16
|
+
"factory": "dist/cli.js"
|
|
17
|
+
},
|
|
18
|
+
"files": [
|
|
19
|
+
"dist",
|
|
20
|
+
"!dist/.tsbuildinfo"
|
|
21
|
+
],
|
|
22
|
+
"publishConfig": {
|
|
23
|
+
"access": "public"
|
|
24
|
+
},
|
|
25
|
+
"repository": {
|
|
26
|
+
"type": "git",
|
|
27
|
+
"url": "git+https://github.com/on-par/software-factory.git",
|
|
28
|
+
"directory": "packages/cli"
|
|
29
|
+
},
|
|
30
|
+
"homepage": "https://github.com/on-par/software-factory#readme",
|
|
31
|
+
"bugs": {
|
|
32
|
+
"url": "https://github.com/on-par/software-factory/issues"
|
|
33
|
+
},
|
|
34
|
+
"engines": {
|
|
35
|
+
"node": ">=24.0.0"
|
|
36
|
+
},
|
|
37
|
+
"scripts": {
|
|
38
|
+
"build": "tsc -p tsconfig.build.json",
|
|
39
|
+
"dev": "tsx src/cli.ts",
|
|
40
|
+
"start": "node dist/cli.js",
|
|
41
|
+
"typecheck": "tsc --noEmit -p tsconfig.json",
|
|
42
|
+
"test": "vitest run",
|
|
43
|
+
"prepublishOnly": "npm run build",
|
|
44
|
+
"prepack": "node ../../scripts/pack-hygiene-cli.ts prepack"
|
|
45
|
+
},
|
|
46
|
+
"dependencies": {
|
|
47
|
+
"@octokit/plugin-retry": "^8.1.1",
|
|
48
|
+
"@octokit/plugin-throttling": "^11.0.5",
|
|
49
|
+
"@octokit/rest": "^22.0.0",
|
|
50
|
+
"@on-par/factory-core": "0.9.1",
|
|
51
|
+
"@on-par/factory-tui": "0.9.1",
|
|
52
|
+
"commander": "^15.0.0"
|
|
53
|
+
},
|
|
54
|
+
"license": "MIT",
|
|
55
|
+
"devDependencies": {
|
|
56
|
+
"@types/node": "^26.6.4"
|
|
57
|
+
}
|
|
58
|
+
}
|