@on-par/factory-cli 0.9.11-next.9 → 0.9.11

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.
Files changed (175) hide show
  1. package/README.md +1 -1
  2. package/dist/cli/base-health-ci.d.ts +16 -2
  3. package/dist/cli/base-health-ci.d.ts.map +1 -1
  4. package/dist/cli/base-health-ci.js +30 -5
  5. package/dist/cli/base-health-ci.js.map +1 -1
  6. package/dist/cli/base-hold.d.ts +2 -0
  7. package/dist/cli/base-hold.d.ts.map +1 -1
  8. package/dist/cli/base-hold.js +24 -3
  9. package/dist/cli/base-hold.js.map +1 -1
  10. package/dist/cli/cost-json.d.ts +5 -31
  11. package/dist/cli/cost-json.d.ts.map +1 -1
  12. package/dist/cli/cost-json.js +13 -2
  13. package/dist/cli/cost-json.js.map +1 -1
  14. package/dist/cli/daemon.d.ts +2 -15
  15. package/dist/cli/daemon.d.ts.map +1 -1
  16. package/dist/cli/daemon.js +5 -11
  17. package/dist/cli/daemon.js.map +1 -1
  18. package/dist/cli/doctor.d.ts.map +1 -1
  19. package/dist/cli/doctor.js +3 -1
  20. package/dist/cli/doctor.js.map +1 -1
  21. package/dist/cli/harness-check.d.ts.map +1 -1
  22. package/dist/cli/harness-check.js +8 -3
  23. package/dist/cli/harness-check.js.map +1 -1
  24. package/dist/cli/help-groups.d.ts.map +1 -1
  25. package/dist/cli/help-groups.js +16 -2
  26. package/dist/cli/help-groups.js.map +1 -1
  27. package/dist/cli/index.d.ts +29 -32
  28. package/dist/cli/index.d.ts.map +1 -1
  29. package/dist/cli/index.js +88 -174
  30. package/dist/cli/index.js.map +1 -1
  31. package/dist/cli/json-contract.d.ts +309 -0
  32. package/dist/cli/json-contract.d.ts.map +1 -0
  33. package/dist/cli/json-contract.js +211 -0
  34. package/dist/cli/json-contract.js.map +1 -0
  35. package/dist/cli/land-pr.d.ts +4 -4
  36. package/dist/cli/land-pr.d.ts.map +1 -1
  37. package/dist/cli/land-pr.js +18 -17
  38. package/dist/cli/land-pr.js.map +1 -1
  39. package/dist/cli/land-risk.d.ts +29 -0
  40. package/dist/cli/land-risk.d.ts.map +1 -0
  41. package/dist/cli/land-risk.js +92 -0
  42. package/dist/cli/land-risk.js.map +1 -0
  43. package/dist/cli/land-runtime.d.ts +2 -1
  44. package/dist/cli/land-runtime.d.ts.map +1 -1
  45. package/dist/cli/land-runtime.js +3 -0
  46. package/dist/cli/land-runtime.js.map +1 -1
  47. package/dist/cli/land.d.ts +2 -0
  48. package/dist/cli/land.d.ts.map +1 -1
  49. package/dist/cli/land.js +46 -4
  50. package/dist/cli/land.js.map +1 -1
  51. package/dist/cli/lane-environment-pause-error.d.ts +3 -0
  52. package/dist/cli/lane-environment-pause-error.d.ts.map +1 -1
  53. package/dist/cli/lane-environment-pause-error.js +4 -0
  54. package/dist/cli/lane-environment-pause-error.js.map +1 -1
  55. package/dist/cli/logs.d.ts +4 -0
  56. package/dist/cli/logs.d.ts.map +1 -1
  57. package/dist/cli/logs.js +6 -2
  58. package/dist/cli/logs.js.map +1 -1
  59. package/dist/cli/model-override-messages.d.ts +4 -0
  60. package/dist/cli/model-override-messages.d.ts.map +1 -0
  61. package/dist/cli/model-override-messages.js +15 -0
  62. package/dist/cli/model-override-messages.js.map +1 -0
  63. package/dist/cli/octokit.d.ts +3 -0
  64. package/dist/cli/octokit.d.ts.map +1 -1
  65. package/dist/cli/octokit.js +1 -1
  66. package/dist/cli/octokit.js.map +1 -1
  67. package/dist/cli/program-observe.d.ts.map +1 -1
  68. package/dist/cli/program-observe.js +11 -0
  69. package/dist/cli/program-observe.js.map +1 -1
  70. package/dist/cli/program-run-work.d.ts.map +1 -1
  71. package/dist/cli/program-run-work.js +12 -0
  72. package/dist/cli/program-run-work.js.map +1 -1
  73. package/dist/cli/queue-add-json.d.ts +3 -25
  74. package/dist/cli/queue-add-json.d.ts.map +1 -1
  75. package/dist/cli/queue-add-json.js.map +1 -1
  76. package/dist/cli/queue-list.d.ts +6 -24
  77. package/dist/cli/queue-list.d.ts.map +1 -1
  78. package/dist/cli/queue-list.js +6 -1
  79. package/dist/cli/queue-list.js.map +1 -1
  80. package/dist/cli/queue-preflight.d.ts +52 -0
  81. package/dist/cli/queue-preflight.d.ts.map +1 -0
  82. package/dist/cli/queue-preflight.js +358 -0
  83. package/dist/cli/queue-preflight.js.map +1 -0
  84. package/dist/cli/risk-policy.d.ts +8 -0
  85. package/dist/cli/risk-policy.d.ts.map +1 -0
  86. package/dist/cli/risk-policy.js +39 -0
  87. package/dist/cli/risk-policy.js.map +1 -0
  88. package/dist/cli/risk.d.ts +42 -0
  89. package/dist/cli/risk.d.ts.map +1 -0
  90. package/dist/cli/risk.js +103 -0
  91. package/dist/cli/risk.js.map +1 -0
  92. package/dist/cli/run-branch.d.ts +26 -0
  93. package/dist/cli/run-branch.d.ts.map +1 -0
  94. package/dist/cli/run-branch.js +42 -0
  95. package/dist/cli/run-branch.js.map +1 -0
  96. package/dist/cli/run-lane.d.ts +6 -1
  97. package/dist/cli/run-lane.d.ts.map +1 -1
  98. package/dist/cli/run-lane.js +52 -5
  99. package/dist/cli/run-lane.js.map +1 -1
  100. package/dist/cli/run-restack.d.ts +14 -0
  101. package/dist/cli/run-restack.d.ts.map +1 -0
  102. package/dist/cli/run-restack.js +21 -0
  103. package/dist/cli/run-restack.js.map +1 -0
  104. package/dist/cli/run.d.ts.map +1 -1
  105. package/dist/cli/run.js +19 -2
  106. package/dist/cli/run.js.map +1 -1
  107. package/dist/cli/runs-diffstat.d.ts +6 -25
  108. package/dist/cli/runs-diffstat.d.ts.map +1 -1
  109. package/dist/cli/runs-diffstat.js.map +1 -1
  110. package/dist/cli/runs.d.ts +4 -19
  111. package/dist/cli/runs.d.ts.map +1 -1
  112. package/dist/cli/runs.js +1 -1
  113. package/dist/cli/runs.js.map +1 -1
  114. package/dist/cli/self-update-stop.d.ts +7 -0
  115. package/dist/cli/self-update-stop.d.ts.map +1 -0
  116. package/dist/cli/self-update-stop.js +27 -0
  117. package/dist/cli/self-update-stop.js.map +1 -0
  118. package/dist/cli/ship-reports.d.ts +34 -0
  119. package/dist/cli/ship-reports.d.ts.map +1 -0
  120. package/dist/cli/ship-reports.js +54 -0
  121. package/dist/cli/ship-reports.js.map +1 -0
  122. package/dist/cli/ship-run-state.d.ts +5 -0
  123. package/dist/cli/ship-run-state.d.ts.map +1 -0
  124. package/dist/cli/ship-run-state.js +17 -0
  125. package/dist/cli/ship-run-state.js.map +1 -0
  126. package/dist/cli/ship-steps.d.ts +4 -47
  127. package/dist/cli/ship-steps.d.ts.map +1 -1
  128. package/dist/cli/ship-steps.js +22 -82
  129. package/dist/cli/ship-steps.js.map +1 -1
  130. package/dist/cli/ship.d.ts +2 -0
  131. package/dist/cli/ship.d.ts.map +1 -1
  132. package/dist/cli/ship.js +64 -67
  133. package/dist/cli/ship.js.map +1 -1
  134. package/dist/cli/slice-index.d.ts +16 -0
  135. package/dist/cli/slice-index.d.ts.map +1 -0
  136. package/dist/cli/slice-index.js +27 -0
  137. package/dist/cli/slice-index.js.map +1 -0
  138. package/dist/cli/status-json.d.ts +7 -28
  139. package/dist/cli/status-json.d.ts.map +1 -1
  140. package/dist/cli/status-json.js +3 -1
  141. package/dist/cli/status-json.js.map +1 -1
  142. package/dist/cli/status.d.ts.map +1 -1
  143. package/dist/cli/status.js +4 -1
  144. package/dist/cli/status.js.map +1 -1
  145. package/dist/cli/steer.d.ts +50 -0
  146. package/dist/cli/steer.d.ts.map +1 -0
  147. package/dist/cli/steer.js +145 -0
  148. package/dist/cli/steer.js.map +1 -0
  149. package/dist/cli/steerability-report.d.ts +9 -0
  150. package/dist/cli/steerability-report.d.ts.map +1 -0
  151. package/dist/cli/steerability-report.js +28 -0
  152. package/dist/cli/steerability-report.js.map +1 -0
  153. package/dist/cli/stop-resume-json.d.ts +2 -10
  154. package/dist/cli/stop-resume-json.d.ts.map +1 -1
  155. package/dist/cli/stop-resume-json.js +1 -0
  156. package/dist/cli/stop-resume-json.js.map +1 -1
  157. package/dist/cli/usage-json.d.ts +4 -13
  158. package/dist/cli/usage-json.d.ts.map +1 -1
  159. package/dist/cli/usage-json.js.map +1 -1
  160. package/dist/cli/worktree-reap.d.ts.map +1 -1
  161. package/dist/cli/worktree-reap.js +7 -1
  162. package/dist/cli/worktree-reap.js.map +1 -1
  163. package/package.json +9 -5
  164. package/schemas/cost.schema.json +114 -0
  165. package/schemas/daemon-status.schema.json +44 -0
  166. package/schemas/logs-line.schema.json +133 -0
  167. package/schemas/queue-add.schema.json +73 -0
  168. package/schemas/queue-list.schema.json +77 -0
  169. package/schemas/resume.schema.json +36 -0
  170. package/schemas/runs-diffstat.schema.json +81 -0
  171. package/schemas/runs.schema.json +75 -0
  172. package/schemas/status.schema.json +200 -0
  173. package/schemas/stop.schema.json +36 -0
  174. package/schemas/unpark.schema.json +57 -0
  175. package/schemas/usage.schema.json +28 -0
@@ -0,0 +1,145 @@
1
+ // packages/cli/src/cli/steer.ts — `factory steer <ref>`: append a human or bot steer to a run (#3401).
2
+ import { readdir } from 'node:fs/promises';
3
+ import { join } from 'node:path';
4
+ import { appendSteerEvent, readIssueRunState, runStateFile, STEER_PHASES, STEER_SOURCES, SteerEventError, writeIssueRunState, } from '@on-par/factory-core/internal';
5
+ import { getFactoryPaths } from '@on-par/factory-core';
6
+ export class SteerCliError extends Error {
7
+ code;
8
+ constructor(message, code, options) {
9
+ super(message, options);
10
+ this.code = code;
11
+ this.name = 'SteerCliError';
12
+ }
13
+ }
14
+ export function parseSteerRef(raw) {
15
+ const text = raw.trim();
16
+ const found = [
17
+ ['any', text.match(/^#?(\d+)$/)],
18
+ ['issue', text.match(/\/issues\/(\d+)\/?$/)],
19
+ ['pr', text.match(/\/pull\/(\d+)\/?$/)],
20
+ ];
21
+ for (const [kind, match] of found) {
22
+ if (!match)
23
+ continue;
24
+ const n = Number(match[1]);
25
+ if (Number.isSafeInteger(n) && n >= 1)
26
+ return { kind, number: n, raw };
27
+ break;
28
+ }
29
+ throw new SteerCliError(`invalid reference '${raw}' — expected an issue or PR number (42, #42) or a GitHub issue/pull URL`, 'bad-input');
30
+ }
31
+ export async function resolveSteerRun(runsDir, ref) {
32
+ if (ref.kind !== 'pr') {
33
+ const file = runStateFile(runsDir, ref.number);
34
+ const state = await readIssueRunState(file);
35
+ if (state)
36
+ return { file, state };
37
+ }
38
+ if (ref.kind !== 'issue') {
39
+ let names;
40
+ try {
41
+ names = await readdir(runsDir);
42
+ }
43
+ catch {
44
+ names = [];
45
+ }
46
+ for (const name of names.filter((n) => /^issue-(\d+)\.json$/.test(n)).sort()) {
47
+ const file = join(runsDir, name);
48
+ const state = await readIssueRunState(file);
49
+ if (state?.prNumber === ref.number)
50
+ return { file, state };
51
+ }
52
+ }
53
+ throw new SteerCliError(`no run found for ${ref.raw}`, 'no-run');
54
+ }
55
+ export function phaseForStatus(status) {
56
+ switch (status) {
57
+ case 'pending':
58
+ case 'planning':
59
+ return 'plan';
60
+ case 'building':
61
+ case 'reworking':
62
+ return 'build';
63
+ case 'checking':
64
+ return 'check';
65
+ case 'shipping':
66
+ case 'ready':
67
+ case 'awaiting-review':
68
+ case 'merged':
69
+ return 'ship';
70
+ case 'parked':
71
+ case 'escalated':
72
+ case 'failed':
73
+ return null;
74
+ }
75
+ }
76
+ function requireMessage(opts) {
77
+ const message = opts.message?.trim() ?? '';
78
+ if (message === '')
79
+ throw new SteerCliError('--message must not be empty', 'bad-input');
80
+ return message;
81
+ }
82
+ export function buildSteerEvent(state, opts, deps) {
83
+ const message = requireMessage(opts);
84
+ const rawSource = opts.source ?? 'cli';
85
+ const source = STEER_SOURCES.find((s) => s === rawSource);
86
+ if (!source) {
87
+ throw new SteerCliError(`invalid --source '${rawSource}' — expected one of ${STEER_SOURCES.join(', ')}`, 'bad-input');
88
+ }
89
+ if (source === 'bot' && !opts.actor?.trim())
90
+ throw new SteerCliError('--source bot needs --actor <id>', 'bad-input');
91
+ let phase;
92
+ if (opts.phase !== undefined) {
93
+ const given = opts.phase;
94
+ phase = STEER_PHASES.find((p) => p === given) ?? null;
95
+ if (!phase) {
96
+ throw new SteerCliError(`invalid --phase '${given}' — expected one of ${STEER_PHASES.join(', ')}`, 'bad-input');
97
+ }
98
+ }
99
+ else {
100
+ phase = phaseForStatus(state.status);
101
+ }
102
+ if (!phase) {
103
+ throw new SteerCliError(`run #${state.issue} is ${state.status}; pass --phase ${STEER_PHASES.join('|')}`, 'bad-input');
104
+ }
105
+ const actor = opts.actor?.trim() || deps.defaultActor();
106
+ return { ts: deps.now(), actor, source, phase, summary: message, ...(opts.unblocked ? { unblocked: true } : {}) };
107
+ }
108
+ export async function runSteer(rawRef, opts, deps) {
109
+ const ref = parseSteerRef(rawRef);
110
+ requireMessage(opts);
111
+ const { file, state } = await resolveSteerRun(deps.runsDir, ref);
112
+ const event = buildSteerEvent(state, opts, deps);
113
+ let next;
114
+ try {
115
+ next = appendSteerEvent(state, event);
116
+ }
117
+ catch (err) {
118
+ if (err instanceof SteerEventError)
119
+ throw new SteerCliError(err.message, 'bad-input', { cause: err });
120
+ throw err;
121
+ }
122
+ await writeIssueRunState(file, next);
123
+ return { issue: state.issue, file, event };
124
+ }
125
+ /** `factory steer <ref>`: bad input exits 2, no matching run exits 1, anything else exits 1 with its detail. */
126
+ export async function cmdSteer(ref, opts, rt) {
127
+ let result;
128
+ try {
129
+ parseSteerRef(ref); // a bad <ref> exits 2 before any git lookup
130
+ const gitUser = (await rt.gitUserName().catch(() => '')).trim();
131
+ result = await runSteer(ref, opts, {
132
+ runsDir: getFactoryPaths(await rt.getRepoRoot()).runs,
133
+ now: rt.now,
134
+ defaultActor: () => gitUser || rt.env.USER || 'unknown',
135
+ });
136
+ }
137
+ catch (err) {
138
+ if (err instanceof SteerCliError) {
139
+ throw new rt.CliExitError(`factory: steer — ${err.message}`, err.code === 'no-run' ? 1 : 2);
140
+ }
141
+ throw new rt.CliExitError(`factory: steer failed — ${rt.errorDetail(err)}`, 1);
142
+ }
143
+ rt.log(`factory: steer recorded on #${result.issue} (source ${result.event.source}, phase ${result.event.phase}, actor ${result.event.actor})`);
144
+ }
145
+ //# sourceMappingURL=steer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"steer.js","sourceRoot":"","sources":["../../src/cli/steer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { type IssueRunState, type SteerabilityReport } from '@on-par/factory-core/internal';
2
+ /** Every parseable `issue-<n>.json` run state in `runsDir`; phase snapshots and malformed files are skipped. */
3
+ export declare function readRunStates(runsDir: string): Promise<IssueRunState[]>;
4
+ /** Steers per merged PR from local run states and classifier-outcomes.jsonl (#3403). */
5
+ export declare function buildSteerabilityReport(paths: {
6
+ runs: string;
7
+ classifierOutcomes: string;
8
+ }): Promise<SteerabilityReport>;
9
+ //# sourceMappingURL=steerability-report.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"steerability-report.d.ts","sourceRoot":"","sources":["../../src/cli/steerability-report.ts"],"names":[],"mappings":"AAIA,OAAO,EAIL,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACxB,MAAM,+BAA+B,CAAC;AAWvC,gHAAgH;AAChH,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAM7E;AAED,wFAAwF;AACxF,wBAAsB,uBAAuB,CAAC,KAAK,EAAE;IACnD,IAAI,EAAE,MAAM,CAAC;IACb,kBAAkB,EAAE,MAAM,CAAC;CAC5B,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAK9B"}
@@ -0,0 +1,28 @@
1
+ import { readdir, readFile } from 'node:fs/promises';
2
+ import { join } from 'node:path';
3
+ import { parseClassifierOutcomes } from '@on-par/factory-core';
4
+ import { collectMergedPrSteers, readIssueRunState, summarizeSteerability, } from '@on-par/factory-core/internal';
5
+ async function readOrEmpty(read, empty) {
6
+ try {
7
+ return await read();
8
+ }
9
+ catch (err) {
10
+ if (err.code === 'ENOENT')
11
+ return empty;
12
+ throw err;
13
+ }
14
+ }
15
+ /** Every parseable `issue-<n>.json` run state in `runsDir`; phase snapshots and malformed files are skipped. */
16
+ export async function readRunStates(runsDir) {
17
+ const names = await readOrEmpty(() => readdir(runsDir), []);
18
+ const states = await Promise.all(names.filter((name) => /^issue-(\d+)\.json$/.test(name)).map((name) => readIssueRunState(join(runsDir, name))));
19
+ return states.filter((s) => s !== null && typeof s.issue === 'number');
20
+ }
21
+ /** Steers per merged PR from local run states and classifier-outcomes.jsonl (#3403). */
22
+ export async function buildSteerabilityReport(paths) {
23
+ const text = await readOrEmpty(() => readFile(paths.classifierOutcomes, 'utf-8'), '');
24
+ const runs = await readRunStates(paths.runs);
25
+ const { rows, unmatched } = collectMergedPrSteers(runs, parseClassifierOutcomes(text));
26
+ return summarizeSteerability(rows, unmatched);
27
+ }
28
+ //# sourceMappingURL=steerability-report.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"steerability-report.js","sourceRoot":"","sources":["../../src/cli/steerability-report.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,qBAAqB,GAGtB,MAAM,+BAA+B,CAAC;AAEvC,KAAK,UAAU,WAAW,CAAI,IAAsB,EAAE,KAAQ;IAC5D,IAAI,CAAC;QACH,OAAO,MAAM,IAAI,EAAE,CAAC;IACtB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QACnE,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED,gHAAgH;AAChH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAAe;IACjD,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,EAAc,CAAC,CAAC;IACxE,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAC9B,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAC/G,CAAC;IACF,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAsB,EAAE,CAAC,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC;AAC7F,CAAC;AAED,wFAAwF;AACxF,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,KAG7C;IACC,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,kBAAkB,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;IACtF,MAAM,IAAI,GAAG,MAAM,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,qBAAqB,CAAC,IAAI,EAAE,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC;IACvF,OAAO,qBAAqB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;AAChD,CAAC"}
@@ -1,14 +1,6 @@
1
+ import type { StopResumeJson } from './json-contract.js';
2
+ export type { StopResumeJson } from './json-contract.js';
1
3
  /** `factory stop|resume --json` payload (#2276). Additive changes only; bump schemaVersion on a breaking change. */
2
- export interface StopResumeJson {
3
- schemaVersion: 1;
4
- ok: true;
5
- action: 'stop' | 'resume';
6
- repo: string;
7
- stopFlag: {
8
- before: boolean;
9
- after: boolean;
10
- };
11
- }
12
4
  export declare function buildStopResumeJson(input: {
13
5
  action: 'stop' | 'resume';
14
6
  repo: string;
@@ -1 +1 @@
1
- {"version":3,"file":"stop-resume-json.d.ts","sourceRoot":"","sources":["../../src/cli/stop-resume-json.ts"],"names":[],"mappings":"AAAA,oHAAoH;AACpH,MAAM,WAAW,cAAc;IAC7B,aAAa,EAAE,CAAC,CAAC;IACjB,EAAE,EAAE,IAAI,CAAC;IACT,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC;CAC/C;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE;IACzC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;CAChB,GAAG,cAAc,CAQjB"}
1
+ {"version":3,"file":"stop-resume-json.d.ts","sourceRoot":"","sources":["../../src/cli/stop-resume-json.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzD,YAAY,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzD,oHAAoH;AAEpH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE;IACzC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;CAChB,GAAG,cAAc,CAQjB"}
@@ -1,3 +1,4 @@
1
+ /** `factory stop|resume --json` payload (#2276). Additive changes only; bump schemaVersion on a breaking change. */
1
2
  export function buildStopResumeJson(input) {
2
3
  return {
3
4
  schemaVersion: 1,
@@ -1 +1 @@
1
- {"version":3,"file":"stop-resume-json.js","sourceRoot":"","sources":["../../src/cli/stop-resume-json.ts"],"names":[],"mappings":"AASA,MAAM,UAAU,mBAAmB,CAAC,KAKnC;IACC,OAAO;QACL,aAAa,EAAE,CAAC;QAChB,EAAE,EAAE,IAAI;QACR,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,QAAQ,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE;KACvD,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"stop-resume-json.js","sourceRoot":"","sources":["../../src/cli/stop-resume-json.ts"],"names":[],"mappings":"AAIA,oHAAoH;AAEpH,MAAM,UAAU,mBAAmB,CAAC,KAKnC;IACC,OAAO;QACL,aAAa,EAAE,CAAC;QAChB,EAAE,EAAE,IAAI;QACR,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,QAAQ,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE;KACvD,CAAC;AACJ,CAAC"}
@@ -1,19 +1,10 @@
1
1
  import type { SubscriptionUsage } from '@on-par/factory-core';
2
+ import type { UsageJson } from './json-contract.js';
3
+ /** `factory usage --json` payload (#2270); absent readings are null, never 0 (ADR-0099). */
4
+ export type { UsageJson } from './json-contract.js';
2
5
  /** Hours in the trailing usage window `factory usage` reports on. */
3
6
  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
- }
7
+ export type UsageJsonSource = UsageJson['source'];
17
8
  /** Builds the `factory usage --json` payload: the real subscription reading when present, else the
18
9
  * list-price heuristic against `cap`, else an explicit `unavailable` record. Numbers are not rounded. */
19
10
  export declare function buildUsageJson(subscription: SubscriptionUsage | null, estimateUsd: number | null, cap: number): UsageJson;
@@ -1 +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"}
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;AAE9D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpD,4FAA4F;AAC5F,YAAY,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpD,qEAAqE;AACrE,eAAO,MAAM,kBAAkB,QAAiC,CAAC;AAEjE,MAAM,MAAM,eAAe,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAElD;0GAC0G;AAC1G,wBAAgB,cAAc,CAC5B,YAAY,EAAE,iBAAiB,GAAG,IAAI,EACtC,WAAW,EAAE,MAAM,GAAG,IAAI,EAC1B,GAAG,EAAE,MAAM,GACV,SAAS,CA6BX"}
@@ -1 +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"}
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;AAMnE,qEAAqE;AACrE,MAAM,CAAC,MAAM,kBAAkB,GAAG,kBAAkB,GAAG,SAAS,CAAC;AAIjE;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"}
@@ -1 +1 @@
1
- {"version":3,"file":"worktree-reap.d.ts","sourceRoot":"","sources":["../../src/cli/worktree-reap.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAa,aAAa,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEtF,OAAO,EACL,KAAK,sBAAsB,EAC3B,KAAK,eAAe,EAGpB,KAAK,qBAAqB,EAC1B,KAAK,gBAAgB,EAItB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C,KAAK,KAAK,GAAG,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC;AAEhD,mGAAmG;AACnG,MAAM,WAAW,WAAW;IAC1B,aAAa,EAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,0BAA0B,GAAG,gBAAgB,CAAC,CAAC,CAAC;IACtF,eAAe,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;CAC/F;AAED;2FAC2F;AAC3F,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,aAAa,CAAC,SAAS,CAAC,GAAG,SAAS,EAChD,QAAQ,EAAE,MAAM,GACf,eAAe,GAAG,SAAS,CAI7B;AAED;uGACuG;AACvG,iBAAe,aAAa,CAAC,CAAC,EAC5B,EAAE,EAAE,WAAW,EACf,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC,EACrG,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,GACvF,OAAO,CAAC;IAAE,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,MAAM,EAAE,CAAC,GAAG,SAAS,CAAA;CAAE,CAAC,CAkBtE;AAED;;mCAEmC;AACnC,wBAAsB,cAAc,CAClC,EAAE,EAAE,WAAW,EACf,IAAI,EAAE,OAAO,gBAAgB,EAC7B,IAAI,EAAE,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC,CAAC,CAAC,GACxC,OAAO,CAAC,IAAI,CAAC,CAIf;AAED;qFACqF;AACrF,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,sBAAsB,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAkBlH;AAED;;qEAEqE;AACrE,wBAAsB,cAAc,CAClC,EAAE,EAAE,WAAW,EACf,IAAI,EAAE,OAAO,qBAAqB,EAClC,IAAI,EAAE,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC,CAAC,CAAC,GACxC,OAAO,CAAC,IAAI,CAAC,CAUf"}
1
+ {"version":3,"file":"worktree-reap.d.ts","sourceRoot":"","sources":["../../src/cli/worktree-reap.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAa,aAAa,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEtF,OAAO,EACL,KAAK,sBAAsB,EAE3B,KAAK,eAAe,EAGpB,KAAK,qBAAqB,EAC1B,KAAK,gBAAgB,EAItB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C,KAAK,KAAK,GAAG,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC;AAEhD,mGAAmG;AACnG,MAAM,WAAW,WAAW;IAC1B,aAAa,EAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,0BAA0B,GAAG,gBAAgB,CAAC,CAAC,CAAC;IACtF,eAAe,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;CAC/F;AAED;2FAC2F;AAC3F,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,aAAa,CAAC,SAAS,CAAC,GAAG,SAAS,EAChD,QAAQ,EAAE,MAAM,GACf,eAAe,GAAG,SAAS,CAI7B;AAED;uGACuG;AACvG,iBAAe,aAAa,CAAC,CAAC,EAC5B,EAAE,EAAE,WAAW,EACf,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC,EACrG,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,GACvF,OAAO,CAAC;IAAE,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,MAAM,EAAE,CAAC,GAAG,SAAS,CAAA;CAAE,CAAC,CAkBtE;AAED;;mCAEmC;AACnC,wBAAsB,cAAc,CAClC,EAAE,EAAE,WAAW,EACf,IAAI,EAAE,OAAO,gBAAgB,EAC7B,IAAI,EAAE,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC,CAAC,CAAC,GACxC,OAAO,CAAC,IAAI,CAAC,CAef;AAED;qFACqF;AACrF,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,sBAAsB,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAkBlH;AAED;;qEAEqE;AACrE,wBAAsB,cAAc,CAClC,EAAE,EAAE,WAAW,EACf,IAAI,EAAE,OAAO,qBAAqB,EAClC,IAAI,EAAE,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC,CAAC,CAAC,GACxC,OAAO,CAAC,IAAI,CAAC,CAUf"}
@@ -1,6 +1,6 @@
1
1
  // packages/cli/src/cli/worktree-reap.ts — eager lane-worktree reaps (#1007, #3008), moved out of index.ts
2
2
  import { resolveSandboxPolicy } from '@on-par/factory-core';
3
- import { logEvent, resolveEffectiveConfig, withFileLock, withGitLock, worktreeSandboxFor, } from '@on-par/factory-core/internal';
3
+ import { findWorktreeKeep, logEvent, resolveEffectiveConfig, withFileLock, withGitLock, worktreeSandboxFor, } from '@on-par/factory-core/internal';
4
4
  /** The repo's current docker-sandbox descriptor for worktree-gc sweeps, or undefined for
5
5
  * every other runtime/config state (including a fixture config with no `sandbox` key). */
6
6
  export function gcWorktreeSandbox(sandboxCfg, repoRoot) {
@@ -32,6 +32,12 @@ async function reapUnderLock(rt, [issue, repoRoot, ghRepo, paths, prefixOverride
32
32
  * gates live in reapLaneWorktree. A reap failure is logged as a warn and never surfaces —
33
33
  * parking must always succeed. */
34
34
  export async function reapParkedLane(rt, reap, args) {
35
+ const [issue, , , paths] = args;
36
+ const keep = findWorktreeKeep(paths.worktreeKeeps, issue, (type, msg) => logEvent(paths.events, type, issue, msg));
37
+ if (keep) {
38
+ logEvent(paths.events, 'worktree-gc', issue, `kept ${keep.path} — kept (${keep.reason}); not reaping the parked lane's worktree or branch`);
39
+ return;
40
+ }
35
41
  await reapUnderLock(rt, args, 'parked-lane worktree reap failed', (worktreePath, opts) => reap(args[1], worktreePath, opts));
36
42
  }
37
43
  /** The one run-output line for a PR-less ship's reap: where the worktree is and why it was kept
@@ -1 +1 @@
1
- {"version":3,"file":"worktree-reap.js","sourceRoot":"","sources":["../../src/cli/worktree-reap.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"worktree-reap.js","sourceRoot":"","sources":["../../src/cli/worktree-reap.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.11-next.9",
3
+ "version": "0.9.11",
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",
@@ -17,6 +17,7 @@
17
17
  },
18
18
  "files": [
19
19
  "dist",
20
+ "schemas",
20
21
  "!dist/.tsbuildinfo"
21
22
  ],
22
23
  "publishConfig": {
@@ -47,12 +48,15 @@
47
48
  "@octokit/plugin-retry": "^8.1.1",
48
49
  "@octokit/plugin-throttling": "^11.0.5",
49
50
  "@octokit/rest": "^22.0.0",
50
- "@on-par/factory-core": "0.9.11-next.9",
51
- "@on-par/factory-tui": "0.9.11-next.9",
52
- "commander": "^15.0.0"
51
+ "@on-par/factory-config": "0.9.11",
52
+ "@on-par/factory-core": "0.9.11",
53
+ "@on-par/factory-tui": "0.9.11",
54
+ "commander": "^15.0.0",
55
+ "zod": "^4.6.5"
53
56
  },
54
57
  "license": "MIT",
55
58
  "devDependencies": {
56
- "@types/node": "^26.6.5"
59
+ "@types/node": "^26.6.5",
60
+ "ajv": "^8.20.0"
57
61
  }
58
62
  }
@@ -0,0 +1,114 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "type": "object",
4
+ "properties": {
5
+ "schemaVersion": {
6
+ "type": "number",
7
+ "const": 1
8
+ },
9
+ "rows": {
10
+ "type": "array",
11
+ "items": {
12
+ "type": "object",
13
+ "properties": {
14
+ "ts": {
15
+ "type": "string"
16
+ },
17
+ "issue": {
18
+ "type": "string"
19
+ },
20
+ "task": {
21
+ "type": "string"
22
+ },
23
+ "model": {
24
+ "type": "string"
25
+ },
26
+ "inputTokens": {
27
+ "type": "number"
28
+ },
29
+ "outputTokens": {
30
+ "type": "number"
31
+ },
32
+ "cacheReadTokens": {
33
+ "type": ["number", "null"]
34
+ },
35
+ "cacheCreationTokens": {
36
+ "type": ["number", "null"]
37
+ },
38
+ "cost": {
39
+ "type": ["number", "null"]
40
+ }
41
+ },
42
+ "required": [
43
+ "ts",
44
+ "issue",
45
+ "task",
46
+ "model",
47
+ "inputTokens",
48
+ "outputTokens",
49
+ "cacheReadTokens",
50
+ "cacheCreationTokens",
51
+ "cost"
52
+ ],
53
+ "additionalProperties": false
54
+ }
55
+ },
56
+ "perModel": {
57
+ "type": "array",
58
+ "items": {
59
+ "type": "object",
60
+ "properties": {
61
+ "model": {
62
+ "type": "string"
63
+ },
64
+ "tasks": {
65
+ "type": "number"
66
+ },
67
+ "inputTokens": {
68
+ "type": "number"
69
+ },
70
+ "outputTokens": {
71
+ "type": "number"
72
+ },
73
+ "cost": {
74
+ "type": ["number", "null"]
75
+ },
76
+ "unpricedCount": {
77
+ "type": "number"
78
+ },
79
+ "cachedRateMissingCount": {
80
+ "type": "number"
81
+ }
82
+ },
83
+ "required": [
84
+ "model",
85
+ "tasks",
86
+ "inputTokens",
87
+ "outputTokens",
88
+ "cost",
89
+ "unpricedCount",
90
+ "cachedRateMissingCount"
91
+ ],
92
+ "additionalProperties": false
93
+ }
94
+ },
95
+ "total": {
96
+ "type": "object",
97
+ "properties": {
98
+ "cost": {
99
+ "type": ["number", "null"]
100
+ },
101
+ "unpricedCount": {
102
+ "type": "number"
103
+ },
104
+ "cachedRateMissingCount": {
105
+ "type": "number"
106
+ }
107
+ },
108
+ "required": ["cost", "unpricedCount", "cachedRateMissingCount"],
109
+ "additionalProperties": false
110
+ }
111
+ },
112
+ "required": ["schemaVersion", "rows", "perModel", "total"],
113
+ "additionalProperties": false
114
+ }
@@ -0,0 +1,44 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "type": "object",
4
+ "properties": {
5
+ "schemaVersion": {
6
+ "type": "number",
7
+ "const": 1
8
+ },
9
+ "running": {
10
+ "type": "boolean"
11
+ },
12
+ "pid": {
13
+ "type": ["number", "null"]
14
+ },
15
+ "uptimeSec": {
16
+ "type": ["number", "null"]
17
+ },
18
+ "plistInstalled": {
19
+ "type": "boolean"
20
+ },
21
+ "repos": {
22
+ "type": "array",
23
+ "items": {
24
+ "type": "object",
25
+ "properties": {
26
+ "slug": {
27
+ "type": "string"
28
+ },
29
+ "checkoutPath": {
30
+ "type": "string"
31
+ },
32
+ "state": {
33
+ "type": "string",
34
+ "enum": ["active", "paused", "draining", "detached"]
35
+ }
36
+ },
37
+ "required": ["slug", "checkoutPath", "state"],
38
+ "additionalProperties": false
39
+ }
40
+ }
41
+ },
42
+ "required": ["schemaVersion", "running", "pid", "uptimeSec", "plistInstalled", "repos"],
43
+ "additionalProperties": false
44
+ }