@on-par/factory-cli 0.9.14-next.4 → 0.9.14-next.40

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 (104) hide show
  1. package/dist/cli/__fixtures__/open-pr.d.ts +24 -0
  2. package/dist/cli/__fixtures__/open-pr.d.ts.map +1 -0
  3. package/dist/cli/__fixtures__/open-pr.js +15 -0
  4. package/dist/cli/__fixtures__/open-pr.js.map +1 -0
  5. package/dist/cli/cost-json.d.ts +9 -2
  6. package/dist/cli/cost-json.d.ts.map +1 -1
  7. package/dist/cli/cost-json.js +29 -2
  8. package/dist/cli/cost-json.js.map +1 -1
  9. package/dist/cli/daemon-load.d.ts +14 -0
  10. package/dist/cli/daemon-load.d.ts.map +1 -0
  11. package/dist/cli/daemon-load.js +75 -0
  12. package/dist/cli/daemon-load.js.map +1 -0
  13. package/dist/cli/daemon.d.ts +5 -1
  14. package/dist/cli/daemon.d.ts.map +1 -1
  15. package/dist/cli/daemon.js +15 -4
  16. package/dist/cli/daemon.js.map +1 -1
  17. package/dist/cli/doctor-health.d.ts +1 -0
  18. package/dist/cli/doctor-health.d.ts.map +1 -1
  19. package/dist/cli/doctor-health.js +5 -3
  20. package/dist/cli/doctor-health.js.map +1 -1
  21. package/dist/cli/index.d.ts +9 -0
  22. package/dist/cli/index.d.ts.map +1 -1
  23. package/dist/cli/index.js +53 -20
  24. package/dist/cli/index.js.map +1 -1
  25. package/dist/cli/json-contract.d.ts +24 -0
  26. package/dist/cli/json-contract.d.ts.map +1 -1
  27. package/dist/cli/json-contract.js +24 -1
  28. package/dist/cli/json-contract.js.map +1 -1
  29. package/dist/cli/land.d.ts +1 -1
  30. package/dist/cli/land.d.ts.map +1 -1
  31. package/dist/cli/land.js +27 -36
  32. package/dist/cli/land.js.map +1 -1
  33. package/dist/cli/lane-heartbeat.d.ts +7 -0
  34. package/dist/cli/lane-heartbeat.d.ts.map +1 -0
  35. package/dist/cli/lane-heartbeat.js +33 -0
  36. package/dist/cli/lane-heartbeat.js.map +1 -0
  37. package/dist/cli/notify.d.ts +37 -0
  38. package/dist/cli/notify.d.ts.map +1 -0
  39. package/dist/cli/notify.js +95 -0
  40. package/dist/cli/notify.js.map +1 -0
  41. package/dist/cli/program-advanced.d.ts.map +1 -1
  42. package/dist/cli/program-advanced.js +13 -1
  43. package/dist/cli/program-advanced.js.map +1 -1
  44. package/dist/cli/program-run-work.d.ts.map +1 -1
  45. package/dist/cli/program-run-work.js +2 -0
  46. package/dist/cli/program-run-work.js.map +1 -1
  47. package/dist/cli/queue-merged-closing-pr.d.ts +5 -0
  48. package/dist/cli/queue-merged-closing-pr.d.ts.map +1 -0
  49. package/dist/cli/queue-merged-closing-pr.js +70 -0
  50. package/dist/cli/queue-merged-closing-pr.js.map +1 -0
  51. package/dist/cli/queue-preflight.d.ts +7 -0
  52. package/dist/cli/queue-preflight.d.ts.map +1 -1
  53. package/dist/cli/queue-preflight.js +54 -11
  54. package/dist/cli/queue-preflight.js.map +1 -1
  55. package/dist/cli/reset.d.ts.map +1 -1
  56. package/dist/cli/reset.js +3 -0
  57. package/dist/cli/reset.js.map +1 -1
  58. package/dist/cli/run-lane.d.ts +5 -1
  59. package/dist/cli/run-lane.d.ts.map +1 -1
  60. package/dist/cli/run-lane.js +18 -37
  61. package/dist/cli/run-lane.js.map +1 -1
  62. package/dist/cli/run.d.ts +1 -0
  63. package/dist/cli/run.d.ts.map +1 -1
  64. package/dist/cli/run.js +25 -1
  65. package/dist/cli/run.js.map +1 -1
  66. package/dist/cli/runs.d.ts +1 -1
  67. package/dist/cli/runs.d.ts.map +1 -1
  68. package/dist/cli/runs.js +8 -10
  69. package/dist/cli/runs.js.map +1 -1
  70. package/dist/cli/ship-steps.d.ts +1 -0
  71. package/dist/cli/ship-steps.d.ts.map +1 -1
  72. package/dist/cli/ship-steps.js +3 -0
  73. package/dist/cli/ship-steps.js.map +1 -1
  74. package/dist/cli/ship.d.ts +2 -0
  75. package/dist/cli/ship.d.ts.map +1 -1
  76. package/dist/cli/ship.js +1 -0
  77. package/dist/cli/ship.js.map +1 -1
  78. package/dist/cli/status.d.ts.map +1 -1
  79. package/dist/cli/status.js +61 -30
  80. package/dist/cli/status.js.map +1 -1
  81. package/dist/cli/steer.d.ts +1 -0
  82. package/dist/cli/steer.d.ts.map +1 -1
  83. package/dist/cli/steer.js +55 -28
  84. package/dist/cli/steer.js.map +1 -1
  85. package/dist/cli/steerability-report.d.ts +1 -1
  86. package/dist/cli/steerability-report.d.ts.map +1 -1
  87. package/dist/cli/steerability-report.js +4 -7
  88. package/dist/cli/steerability-report.js.map +1 -1
  89. package/dist/cli/supervise.d.ts +1 -0
  90. package/dist/cli/supervise.d.ts.map +1 -1
  91. package/dist/cli/supervise.js +10 -3
  92. package/dist/cli/supervise.js.map +1 -1
  93. package/dist/cli/worktree-keep.d.ts +18 -0
  94. package/dist/cli/worktree-keep.d.ts.map +1 -0
  95. package/dist/cli/worktree-keep.js +47 -0
  96. package/dist/cli/worktree-keep.js.map +1 -0
  97. package/dist/cli/worktree-reap.d.ts +1 -1
  98. package/dist/cli/worktree-reap.d.ts.map +1 -1
  99. package/dist/cli/worktree-reap.js +10 -12
  100. package/dist/cli/worktree-reap.js.map +1 -1
  101. package/package.json +4 -4
  102. package/schemas/cost.schema.json +39 -1
  103. package/schemas/daemon-status.schema.json +44 -1
  104. package/schemas/logs-line.schema.json +10 -0
@@ -0,0 +1,47 @@
1
+ // packages/cli/src/cli/worktree-keep.ts — `factory worktree keep|release` and the re-queue release (#3318)
2
+ import { existsSync } from 'node:fs';
3
+ import { findWorktreeKeep, removeWorktreeKeep, upsertWorktreeKeep } from '@on-par/factory-core/internal';
4
+ import { CliExitError } from './index.js';
5
+ const direct = (fn) => fn();
6
+ /** Writes a keep record for the issue's lane worktree so GC and the park-time reap leave it alone. */
7
+ export async function runWorktreeKeep(issue, opts, deps) {
8
+ const { pathExists = existsSync, now = () => new Date(), out = console.log, withLock = direct } = deps;
9
+ const reason = opts.reason ?? 'manual';
10
+ if (reason.trim() === '')
11
+ throw new CliExitError('factory worktree keep: --reason must not be empty', 2);
12
+ const path = await deps.worktreePath(issue);
13
+ if (!pathExists(path)) {
14
+ throw new CliExitError(`factory worktree keep: #${issue} has no lane worktree (looked for ${path})`, 2);
15
+ }
16
+ await withLock(async () => upsertWorktreeKeep(deps.keepsFile, { issue, path, reason: reason.trim(), since: now().toISOString() }));
17
+ out(`kept ${path} for #${issue} (${reason.trim()}) — worktree gc leaves it until the issue closes or 'factory worktree release ${issue}'`);
18
+ }
19
+ /** Drops the issue's keep record; true when one existed. Never creates the keeps file. */
20
+ export async function runWorktreeRelease(issue, deps) {
21
+ const { out = console.log, withLock = direct } = deps;
22
+ const had = await withLock(async () => {
23
+ const found = findWorktreeKeep(deps.keepsFile, issue);
24
+ if (found)
25
+ removeWorktreeKeep(deps.keepsFile, issue);
26
+ return found;
27
+ });
28
+ if (had) {
29
+ out(`released the keep record for #${issue} (${had.reason}) — the next worktree gc treats ${had.path} normally`);
30
+ }
31
+ else {
32
+ out(`#${issue} had no keep record — nothing to release`);
33
+ }
34
+ return had !== undefined;
35
+ }
36
+ /** Best-effort: the factory owns the worktree again once the lane re-queues the issue. Never throws. */
37
+ export function releaseKeepOnRequeue(keepsFile, issue, warn) {
38
+ if (keepsFile === undefined)
39
+ return;
40
+ try {
41
+ removeWorktreeKeep(keepsFile, issue);
42
+ }
43
+ catch (err) {
44
+ warn?.(`could not drop the keep record for #${issue}: ${err instanceof Error ? err.message : String(err)}`);
45
+ }
46
+ }
47
+ //# sourceMappingURL=worktree-keep.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worktree-keep.js","sourceRoot":"","sources":["../../src/cli/worktree-keep.ts"],"names":[],"mappings":"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"}
@@ -17,7 +17,7 @@ declare function reapUnderLock<R>(rt: ReapRuntime, [issue, repoRoot, ghRepo, pat
17
17
  result: R | undefined;
18
18
  }>;
19
19
  /** Eagerly reaps a parked lane's own worktree inside `factory run` (#1007). All the safety
20
- * gates live in reapLaneWorktree. A reap failure is logged as a warn and never surfaces —
20
+ * gates, the keep record included, live in reapLaneWorktree. A reap failure is logged as a warn and never surfaces —
21
21
  * parking must always succeed. */
22
22
  export declare function reapParkedLane(rt: ReapRuntime, reap: typeof reapLaneWorktree, args: Parameters<typeof reapUnderLock>[1]): Promise<void>;
23
23
  /** 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.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
+ {"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,CAoBtE;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,CAsBlH;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,CASf"}
@@ -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 { findWorktreeKeep, logEvent, resolveEffectiveConfig, withFileLock, withGitLock, worktreeSandboxFor, } from '@on-par/factory-core/internal';
3
+ import { 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) {
@@ -20,7 +20,7 @@ async function reapUnderLock(rt, [issue, repoRoot, ghRepo, paths, prefixOverride
20
20
  worktreePath = resolved;
21
21
  const log = (type, msg) => logEvent(paths.events, type, issue, msg);
22
22
  const sandbox = gcWorktreeSandbox(factoryConfig.sandbox, repoRoot);
23
- const result = await withGitLock(repoRoot, () => withFileLock(paths.gitLock, () => reap(resolved, { issue, branchPrefix, log, sandbox })));
23
+ const result = await withGitLock(repoRoot, () => withFileLock(paths.gitLock, () => reap(resolved, { issue, branchPrefix, log, sandbox, keepsFile: paths.worktreeKeeps })));
24
24
  return { worktreePath, result };
25
25
  }
26
26
  catch (err) {
@@ -29,15 +29,9 @@ async function reapUnderLock(rt, [issue, repoRoot, ghRepo, paths, prefixOverride
29
29
  }
30
30
  }
31
31
  /** Eagerly reaps a parked lane's own worktree inside `factory run` (#1007). All the safety
32
- * gates live in reapLaneWorktree. A reap failure is logged as a warn and never surfaces —
32
+ * gates, the keep record included, 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
- }
41
35
  await reapUnderLock(rt, args, 'parked-lane worktree reap failed', (worktreePath, opts) => reap(args[1], worktreePath, opts));
42
36
  }
43
37
  /** The one run-output line for a PR-less ship's reap: where the worktree is and why it was kept
@@ -52,6 +46,10 @@ export function formatShipReapLine(worktreePath, result) {
52
46
  return `🧹 Removed worktree ${worktreePath}${result.branchDeleted ? ` and branch ${result.branch}` : ''} — no PR was opened and nothing was committed`;
53
47
  case 'kept-dirty':
54
48
  return `📌 Kept worktree ${worktreePath}${withBranch} — it has uncommitted changes`;
49
+ case 'kept-untracked':
50
+ return `📌 Kept worktree ${worktreePath}${withBranch} — it has untracked files`;
51
+ case 'kept-record':
52
+ return `📌 Kept worktree ${worktreePath}${withBranch} — it has a keep record`;
55
53
  case 'kept-committed':
56
54
  return `📌 Kept worktree ${worktreePath}${withBranch} — it has commits beyond the base`;
57
55
  case 'kept-branch-mismatch':
@@ -67,10 +65,10 @@ export function formatShipReapLine(worktreePath, result) {
67
65
  * failure is logged as a warn and never changes the ship's exit. */
68
66
  export async function reapPrlessShip(rt, reap, args) {
69
67
  const done = await reapUnderLock(rt, args, 'PR-less ship worktree cleanup failed', (worktreePath, opts) => reap(args[1], worktreePath, opts));
70
- if (done.worktreePath === undefined) {
71
- console.log(`📌 Kept the worktree for issue #${args[0]} — its state could not be verified, so nothing was removed`);
68
+ // No path means the config load failed, so ship never resolved (or created) a worktree here;
69
+ // the failure is already logged as a warn event by reapUnderLock.
70
+ if (done.worktreePath === undefined)
72
71
  return;
73
- }
74
72
  const line = formatShipReapLine(done.worktreePath, done.result);
75
73
  if (line !== null)
76
74
  console.log(line);
@@ -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.14-next.4",
3
+ "version": "0.9.14-next.40",
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",
@@ -48,9 +48,9 @@
48
48
  "@octokit/plugin-retry": "^8.1.1",
49
49
  "@octokit/plugin-throttling": "^11.0.5",
50
50
  "@octokit/rest": "^22.0.0",
51
- "@on-par/factory-config": "0.9.14-next.4",
52
- "@on-par/factory-core": "0.9.14-next.4",
53
- "@on-par/factory-tui": "0.9.14-next.4",
51
+ "@on-par/factory-config": "0.9.14-next.40",
52
+ "@on-par/factory-core": "0.9.14-next.40",
53
+ "@on-par/factory-tui": "0.9.14-next.40",
54
54
  "commander": "^15.0.0",
55
55
  "zod": "^4.6.5"
56
56
  },
@@ -29,6 +29,9 @@
29
29
  "outputTokens": {
30
30
  "type": "number"
31
31
  },
32
+ "rawInputTokens": {
33
+ "type": ["number", "null"]
34
+ },
32
35
  "cacheReadTokens": {
33
36
  "type": ["number", "null"]
34
37
  },
@@ -46,6 +49,7 @@
46
49
  "model",
47
50
  "inputTokens",
48
51
  "outputTokens",
52
+ "rawInputTokens",
49
53
  "cacheReadTokens",
50
54
  "cacheCreationTokens",
51
55
  "cost"
@@ -70,6 +74,15 @@
70
74
  "outputTokens": {
71
75
  "type": "number"
72
76
  },
77
+ "rawInputTokens": {
78
+ "type": "number"
79
+ },
80
+ "cacheReadTokens": {
81
+ "type": "number"
82
+ },
83
+ "cacheCreationTokens": {
84
+ "type": "number"
85
+ },
73
86
  "cost": {
74
87
  "type": ["number", "null"]
75
88
  },
@@ -85,6 +98,9 @@
85
98
  "tasks",
86
99
  "inputTokens",
87
100
  "outputTokens",
101
+ "rawInputTokens",
102
+ "cacheReadTokens",
103
+ "cacheCreationTokens",
88
104
  "cost",
89
105
  "unpricedCount",
90
106
  "cachedRateMissingCount"
@@ -103,9 +119,31 @@
103
119
  },
104
120
  "cachedRateMissingCount": {
105
121
  "type": "number"
122
+ },
123
+ "tokens": {
124
+ "type": "object",
125
+ "properties": {
126
+ "input": {
127
+ "type": "number"
128
+ },
129
+ "output": {
130
+ "type": "number"
131
+ },
132
+ "rawInput": {
133
+ "type": "number"
134
+ },
135
+ "cacheRead": {
136
+ "type": "number"
137
+ },
138
+ "cacheCreation": {
139
+ "type": "number"
140
+ }
141
+ },
142
+ "required": ["input", "output", "rawInput", "cacheRead", "cacheCreation"],
143
+ "additionalProperties": false
106
144
  }
107
145
  },
108
- "required": ["cost", "unpricedCount", "cachedRateMissingCount"],
146
+ "required": ["cost", "unpricedCount", "cachedRateMissingCount", "tokens"],
109
147
  "additionalProperties": false
110
148
  }
111
149
  },
@@ -37,8 +37,51 @@
37
37
  "required": ["slug", "checkoutPath", "state"],
38
38
  "additionalProperties": false
39
39
  }
40
+ },
41
+ "load": {
42
+ "type": "object",
43
+ "properties": {
44
+ "activeRuns": {
45
+ "anyOf": [
46
+ {
47
+ "type": "integer",
48
+ "minimum": 0,
49
+ "maximum": 9007199254740991
50
+ },
51
+ {
52
+ "type": "null"
53
+ }
54
+ ]
55
+ },
56
+ "maxSlots": {
57
+ "anyOf": [
58
+ {
59
+ "type": "integer",
60
+ "exclusiveMinimum": 0,
61
+ "maximum": 9007199254740991
62
+ },
63
+ {
64
+ "type": "null"
65
+ }
66
+ ]
67
+ },
68
+ "queueDepth": {
69
+ "anyOf": [
70
+ {
71
+ "type": "integer",
72
+ "minimum": 0,
73
+ "maximum": 9007199254740991
74
+ },
75
+ {
76
+ "type": "null"
77
+ }
78
+ ]
79
+ }
80
+ },
81
+ "required": ["activeRuns", "maxSlots", "queueDepth"],
82
+ "additionalProperties": false
40
83
  }
41
84
  },
42
- "required": ["schemaVersion", "running", "pid", "uptimeSec", "plistInstalled", "repos"],
85
+ "required": ["schemaVersion", "running", "pid", "uptimeSec", "plistInstalled", "repos", "load"],
43
86
  "additionalProperties": false
44
87
  }
@@ -76,6 +76,16 @@
76
76
  "properties": {},
77
77
  "additionalProperties": {}
78
78
  },
79
+ "park": {
80
+ "type": "object",
81
+ "properties": {},
82
+ "additionalProperties": {}
83
+ },
84
+ "providerCapped": {
85
+ "type": "object",
86
+ "properties": {},
87
+ "additionalProperties": {}
88
+ },
79
89
  "stewardTriggered": {
80
90
  "type": "object",
81
91
  "properties": {},