@cluesmith/codev 3.3.3 → 3.3.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.
Files changed (176) hide show
  1. package/dashboard-dist/assets/{index-CUIjS_Vb.js → index-DZf6pNPE.js} +2 -2
  2. package/dashboard-dist/assets/{index-CUIjS_Vb.js.map → index-DZf6pNPE.js.map} +1 -1
  3. package/dashboard-dist/index.html +1 -1
  4. package/dist/agent-farm/cli.d.ts.map +1 -1
  5. package/dist/agent-farm/cli.js +48 -0
  6. package/dist/agent-farm/cli.js.map +1 -1
  7. package/dist/agent-farm/commands/ide.d.ts +20 -0
  8. package/dist/agent-farm/commands/ide.d.ts.map +1 -0
  9. package/dist/agent-farm/commands/ide.js +138 -0
  10. package/dist/agent-farm/commands/ide.js.map +1 -0
  11. package/dist/agent-farm/commands/inbox.d.ts.map +1 -1
  12. package/dist/agent-farm/commands/inbox.js +15 -3
  13. package/dist/agent-farm/commands/inbox.js.map +1 -1
  14. package/dist/agent-farm/commands/send.d.ts.map +1 -1
  15. package/dist/agent-farm/commands/send.js +16 -1
  16. package/dist/agent-farm/commands/send.js.map +1 -1
  17. package/dist/agent-farm/commands/spawn-worktree.d.ts.map +1 -1
  18. package/dist/agent-farm/commands/spawn-worktree.js +16 -7
  19. package/dist/agent-farm/commands/spawn-worktree.js.map +1 -1
  20. package/dist/agent-farm/commands/tower.d.ts +21 -9
  21. package/dist/agent-farm/commands/tower.d.ts.map +1 -1
  22. package/dist/agent-farm/commands/tower.js +90 -30
  23. package/dist/agent-farm/commands/tower.js.map +1 -1
  24. package/dist/agent-farm/db/tower-owner.d.ts +168 -0
  25. package/dist/agent-farm/db/tower-owner.d.ts.map +1 -0
  26. package/dist/agent-farm/db/tower-owner.js +369 -0
  27. package/dist/agent-farm/db/tower-owner.js.map +1 -0
  28. package/dist/agent-farm/db/types.d.ts +30 -5
  29. package/dist/agent-farm/db/types.d.ts.map +1 -1
  30. package/dist/agent-farm/db/types.js.map +1 -1
  31. package/dist/agent-farm/lib/ide-record.d.ts +65 -0
  32. package/dist/agent-farm/lib/ide-record.d.ts.map +1 -0
  33. package/dist/agent-farm/lib/ide-record.js +118 -0
  34. package/dist/agent-farm/lib/ide-record.js.map +1 -0
  35. package/dist/agent-farm/lib/tunnel-client.d.ts +22 -0
  36. package/dist/agent-farm/lib/tunnel-client.d.ts.map +1 -1
  37. package/dist/agent-farm/lib/tunnel-client.js +53 -5
  38. package/dist/agent-farm/lib/tunnel-client.js.map +1 -1
  39. package/dist/agent-farm/servers/gate-profiles.d.ts +23 -2
  40. package/dist/agent-farm/servers/gate-profiles.d.ts.map +1 -1
  41. package/dist/agent-farm/servers/gate-profiles.js +43 -2
  42. package/dist/agent-farm/servers/gate-profiles.js.map +1 -1
  43. package/dist/agent-farm/servers/ide-forward.d.ts +62 -0
  44. package/dist/agent-farm/servers/ide-forward.d.ts.map +1 -0
  45. package/dist/agent-farm/servers/ide-forward.js +274 -0
  46. package/dist/agent-farm/servers/ide-forward.js.map +1 -0
  47. package/dist/agent-farm/servers/ide-server.d.ts +68 -0
  48. package/dist/agent-farm/servers/ide-server.d.ts.map +1 -0
  49. package/dist/agent-farm/servers/ide-server.js +281 -0
  50. package/dist/agent-farm/servers/ide-server.js.map +1 -0
  51. package/dist/agent-farm/servers/mailbox-delivery.d.ts +213 -4
  52. package/dist/agent-farm/servers/mailbox-delivery.d.ts.map +1 -1
  53. package/dist/agent-farm/servers/mailbox-delivery.js +489 -68
  54. package/dist/agent-farm/servers/mailbox-delivery.js.map +1 -1
  55. package/dist/agent-farm/servers/mailbox-wiring.d.ts +18 -4
  56. package/dist/agent-farm/servers/mailbox-wiring.d.ts.map +1 -1
  57. package/dist/agent-farm/servers/mailbox-wiring.js +94 -21
  58. package/dist/agent-farm/servers/mailbox-wiring.js.map +1 -1
  59. package/dist/agent-farm/servers/message-write.d.ts +138 -11
  60. package/dist/agent-farm/servers/message-write.d.ts.map +1 -1
  61. package/dist/agent-farm/servers/message-write.js +144 -35
  62. package/dist/agent-farm/servers/message-write.js.map +1 -1
  63. package/dist/agent-farm/servers/overview.d.ts +28 -12
  64. package/dist/agent-farm/servers/overview.d.ts.map +1 -1
  65. package/dist/agent-farm/servers/overview.js +130 -79
  66. package/dist/agent-farm/servers/overview.js.map +1 -1
  67. package/dist/agent-farm/servers/render-gate.d.ts +53 -0
  68. package/dist/agent-farm/servers/render-gate.d.ts.map +1 -1
  69. package/dist/agent-farm/servers/render-gate.js +135 -24
  70. package/dist/agent-farm/servers/render-gate.js.map +1 -1
  71. package/dist/agent-farm/servers/session-submit.d.ts +7 -4
  72. package/dist/agent-farm/servers/session-submit.d.ts.map +1 -1
  73. package/dist/agent-farm/servers/session-submit.js +7 -4
  74. package/dist/agent-farm/servers/session-submit.js.map +1 -1
  75. package/dist/agent-farm/servers/tower-cron.d.ts.map +1 -1
  76. package/dist/agent-farm/servers/tower-cron.js +4 -1
  77. package/dist/agent-farm/servers/tower-cron.js.map +1 -1
  78. package/dist/agent-farm/servers/tower-instances.d.ts.map +1 -1
  79. package/dist/agent-farm/servers/tower-instances.js +6 -7
  80. package/dist/agent-farm/servers/tower-instances.js.map +1 -1
  81. package/dist/agent-farm/servers/tower-routes.d.ts.map +1 -1
  82. package/dist/agent-farm/servers/tower-routes.js +53 -13
  83. package/dist/agent-farm/servers/tower-routes.js.map +1 -1
  84. package/dist/agent-farm/servers/tower-server.js +64 -7
  85. package/dist/agent-farm/servers/tower-server.js.map +1 -1
  86. package/dist/agent-farm/servers/tower-terminals.d.ts.map +1 -1
  87. package/dist/agent-farm/servers/tower-terminals.js +53 -8
  88. package/dist/agent-farm/servers/tower-terminals.js.map +1 -1
  89. package/dist/agent-farm/servers/tower-websocket.d.ts.map +1 -1
  90. package/dist/agent-farm/servers/tower-websocket.js +18 -1
  91. package/dist/agent-farm/servers/tower-websocket.js.map +1 -1
  92. package/dist/agent-farm/utils/message-format.d.ts.map +1 -1
  93. package/dist/agent-farm/utils/message-format.js +5 -6
  94. package/dist/agent-farm/utils/message-format.js.map +1 -1
  95. package/dist/agent-farm/utils/port.d.ts +22 -0
  96. package/dist/agent-farm/utils/port.d.ts.map +1 -0
  97. package/dist/agent-farm/utils/port.js +35 -0
  98. package/dist/agent-farm/utils/port.js.map +1 -0
  99. package/dist/agent-farm/utils/server-utils.d.ts +26 -0
  100. package/dist/agent-farm/utils/server-utils.d.ts.map +1 -1
  101. package/dist/agent-farm/utils/server-utils.js +36 -0
  102. package/dist/agent-farm/utils/server-utils.js.map +1 -1
  103. package/dist/cli.js +2 -2
  104. package/dist/cli.js.map +1 -1
  105. package/dist/commands/consult/index.d.ts.map +1 -1
  106. package/dist/commands/consult/index.js +61 -1
  107. package/dist/commands/consult/index.js.map +1 -1
  108. package/dist/commands/consult/tree-tripwire.d.ts +177 -0
  109. package/dist/commands/consult/tree-tripwire.d.ts.map +1 -0
  110. package/dist/commands/consult/tree-tripwire.js +356 -0
  111. package/dist/commands/consult/tree-tripwire.js.map +1 -0
  112. package/dist/commands/doctor.d.ts +69 -0
  113. package/dist/commands/doctor.d.ts.map +1 -1
  114. package/dist/commands/doctor.js +163 -0
  115. package/dist/commands/doctor.js.map +1 -1
  116. package/dist/commands/generate-image.d.ts +5 -0
  117. package/dist/commands/generate-image.d.ts.map +1 -1
  118. package/dist/commands/generate-image.js +225 -4
  119. package/dist/commands/generate-image.js.map +1 -1
  120. package/dist/lib/agent-env.d.ts +86 -0
  121. package/dist/lib/agent-env.d.ts.map +1 -0
  122. package/dist/lib/agent-env.js +126 -0
  123. package/dist/lib/agent-env.js.map +1 -0
  124. package/dist/lib/forge-contracts.d.ts +10 -0
  125. package/dist/lib/forge-contracts.d.ts.map +1 -1
  126. package/dist/lib/forge-contracts.js.map +1 -1
  127. package/dist/lib/forge-rate-limit.d.ts +45 -0
  128. package/dist/lib/forge-rate-limit.d.ts.map +1 -0
  129. package/dist/lib/forge-rate-limit.js +89 -0
  130. package/dist/lib/forge-rate-limit.js.map +1 -0
  131. package/dist/lib/forge.d.ts +28 -0
  132. package/dist/lib/forge.d.ts.map +1 -1
  133. package/dist/lib/forge.js +63 -10
  134. package/dist/lib/forge.js.map +1 -1
  135. package/dist/lib/github.d.ts +13 -1
  136. package/dist/lib/github.d.ts.map +1 -1
  137. package/dist/lib/github.js +58 -15
  138. package/dist/lib/github.js.map +1 -1
  139. package/dist/lib/test-env.d.ts +17 -0
  140. package/dist/lib/test-env.d.ts.map +1 -1
  141. package/dist/lib/test-env.js +20 -0
  142. package/dist/lib/test-env.js.map +1 -1
  143. package/dist/terminal/pty-session.d.ts +122 -4
  144. package/dist/terminal/pty-session.d.ts.map +1 -1
  145. package/dist/terminal/pty-session.js +142 -7
  146. package/dist/terminal/pty-session.js.map +1 -1
  147. package/dist/terminal/session-manager.d.ts +23 -2
  148. package/dist/terminal/session-manager.d.ts.map +1 -1
  149. package/dist/terminal/session-manager.js +115 -36
  150. package/dist/terminal/session-manager.js.map +1 -1
  151. package/dist/terminal/session-screen.d.ts +34 -5
  152. package/dist/terminal/session-screen.d.ts.map +1 -1
  153. package/dist/terminal/session-screen.js +52 -6
  154. package/dist/terminal/session-screen.js.map +1 -1
  155. package/dist/terminal/terminal-replies.d.ts +102 -0
  156. package/dist/terminal/terminal-replies.d.ts.map +1 -0
  157. package/dist/terminal/terminal-replies.js +181 -0
  158. package/dist/terminal/terminal-replies.js.map +1 -0
  159. package/package.json +4 -4
  160. package/scripts/forge/github/pr-list.sh +6 -2
  161. package/scripts/forge/github/pr-search.sh +4 -2
  162. package/scripts/forge/gitlab/issue-search.sh +1 -0
  163. package/scripts/forge/gitlab/pr-search.sh +35 -2
  164. package/scripts/forge/linear/auth-status.sh +1 -0
  165. package/scripts/forge/linear/issue-comment.sh +1 -0
  166. package/scripts/forge/linear/issue-list.sh +1 -0
  167. package/scripts/forge/linear/issue-search.sh +1 -0
  168. package/scripts/forge/linear/issue-view.sh +1 -0
  169. package/scripts/forge/linear/recently-closed.sh +1 -0
  170. package/scripts/forge/linear/user-identity.sh +1 -0
  171. package/skeleton/.claude/skills/generate-image/SKILL.md +19 -2
  172. package/skeleton/.codex/skills/generate-image/SKILL.md +19 -2
  173. package/skeleton/resources/commands/agent-farm.md +27 -2
  174. package/skeleton/roles/consultant.md +32 -0
  175. package/skeleton/templates/AGENTS.md +1 -1
  176. package/skeleton/templates/CLAUDE.md +1 -1
@@ -0,0 +1,126 @@
1
+ /**
2
+ * Environment sanitation for agent processes Tower spawns (Issue #1219).
3
+ *
4
+ * Claude Code plants session markers — `CLAUDECODE`, `CLAUDE_CODE_CHILD_SESSION`,
5
+ * `CLAUDE_CODE_SESSION_ID`, … — into every subprocess it creates, so a nested
6
+ * `claude` can tell it was launched from inside another session and turn
7
+ * transcript saving off. Tower is a daemon, but it inherits the environment of
8
+ * whoever started it, and starting Tower from inside a Claude session is routine
9
+ * (`afx tower start`, `pnpm -w run local-install`, an architect recovering from a
10
+ * crash). The markers then cascade:
11
+ *
12
+ * claude session → Bash → afx tower start → Tower → shellper → agent claude
13
+ *
14
+ * Every agent Tower spawns believes it is a nested child session, and a session
15
+ * with transcript saving off **cannot be resumed** — which quietly guts the
16
+ * crash-recovery story (#1145, #1149) and only shows up at recovery time, when
17
+ * it is too late.
18
+ *
19
+ * ## Why this strips named families rather than the whole namespace
20
+ *
21
+ * The first version of this module denied `CLAUDE_CODE_*` wholesale and kept a
22
+ * short allowlist, on the theory that a *missed marker* is worse than a missed
23
+ * config var. The CMAP review (codex) rejected that, and checking the shipped
24
+ * `claude` binary settled it: it reads **594** distinct `CLAUDE_CODE_*`
25
+ * variables, and they are overwhelmingly configuration — provider selection
26
+ * (`USE_BEDROCK`, `USE_VERTEX`, `USE_FOUNDRY`, `USE_MANTLE`,
27
+ * `USE_ANTHROPIC_AWS`, `USE_GATEWAY`), the matching `SKIP_*_AUTH` switches,
28
+ * credentials (`OAUTH_TOKEN`, `OAUTH_REFRESH_TOKEN`, `OAUTH_SCOPES`,
29
+ * `CLIENT_CERT`), routing (`API_BASE_URL`, `PROXY_URL`, `HTTPS_PROXY`), and
30
+ * policy (`MANAGED_SETTINGS_PATH`). No hand-maintained allowlist survives that,
31
+ * and dropping any of them is not the harmless failure the original reasoning
32
+ * assumed — it silently routes an agent at the wrong provider, or strips the
33
+ * subscription credential and reroutes CMAP to the metered API (the #985 scar).
34
+ *
35
+ * So the rule is: **strip what is per-session identity, keep everything else.**
36
+ * Identity is a small, stable, nameable set; configuration is not.
37
+ *
38
+ * The cost of that direction is real and worth stating plainly: a marker added
39
+ * upstream that this list has not caught up with will pass through, and nothing
40
+ * here will notice. `codev doctor`'s Tower Environment check is not a backstop
41
+ * for that case — it classifies with this same list, so it is blind to exactly
42
+ * what it would need to catch. Claude Code's own "transcript saving is off"
43
+ * banner is the only real signal, and it is how #1219 was found in the first
44
+ * place. Adding the new name here is the fix when that happens.
45
+ */
46
+ /**
47
+ * Whole families of per-session identity. Every variable Claude Code ships
48
+ * under these prefixes describes *this* session — its id, its socket, its
49
+ * bridge — and inheriting one into a different agent is always wrong.
50
+ */
51
+ export const CLAUDE_SESSION_MARKER_PREFIXES = [
52
+ // SESSION_ID / _KIND / _LOG / _NAME / _ORIGIN / _ACCESS_TOKEN
53
+ 'CLAUDE_CODE_SESSION_',
54
+ // REMOTE_SESSION_ID / _ORIGIN / _UUID
55
+ 'CLAUDE_CODE_REMOTE_SESSION_',
56
+ // BRIDGE_SESSION_ID / _PROMPT_SHA256 / _OWNER_* / _MCP_CARRIER
57
+ 'CLAUDE_CODE_BRIDGE_',
58
+ // MESSAGING_SOCKET / _TOKEN — a live socket path and its bearer token
59
+ 'CLAUDE_CODE_MESSAGING_',
60
+ ];
61
+ /**
62
+ * Individually named session markers that do not fall under a prefix family.
63
+ *
64
+ * `CLAUDECODE` was already being deleted ad hoc at each Tower spawn site; it
65
+ * lives here now so there is one list rather than six copies of one `delete`.
66
+ * `CHILD_SESSION`, `ENTRYPOINT` and `EXECPATH` are the nesting-detection triple
67
+ * that #1219 is actually about.
68
+ *
69
+ * `CLAUDE_PID` sits outside the `CLAUDE_CODE_` namespace but belongs here on the
70
+ * merits: the shipped binary builds its child environment as
71
+ * `{CLAUDECODE:"1", CLAUDE_CODE_SESSION_ID:…, CLAUDE_CODE_CHILD_SESSION:"1",
72
+ * CLAUDE_PID:String(process.pid)}` — one object literal, so it is identity by
73
+ * construction, not by namespace. Nothing reads it for nesting detection; its
74
+ * only reader is the `pkill` guard in the Bash tool's shell prelude, which
75
+ * refuses a pattern matching the Claude CLI's own pid. An inherited stale value
76
+ * points that guard at a dead or unrelated pid, which is its own small bug.
77
+ *
78
+ * `CLAUDE_EFFORT` is planted by that same function and is deliberately NOT here:
79
+ * being planted by Claude Code is not the test — it carries a *setting* (the
80
+ * effort level), not an identity, so it is configuration and passes through.
81
+ */
82
+ export const CLAUDE_SESSION_MARKER_NAMES = [
83
+ 'CLAUDECODE',
84
+ 'CLAUDE_CODE_CHILD_SESSION',
85
+ // Not in the CLAUDE_CODE_ namespace, but planted by the same object literal
86
+ // as CHILD_SESSION and set to `String(process.pid)` — see the note below.
87
+ 'CLAUDE_PID',
88
+ 'CLAUDE_CODE_ENTRYPOINT',
89
+ 'CLAUDE_CODE_EXECPATH',
90
+ 'CLAUDE_CODE_SSE_PORT',
91
+ 'CLAUDE_CODE_CLOUD_SESSION_ID',
92
+ 'CLAUDE_CODE_RESUME_FROM_SESSION',
93
+ 'CLAUDE_CODE_SPAWN_TIMESTAMP_MS',
94
+ 'CLAUDE_CODE_TRIGGER_ID',
95
+ 'CLAUDE_CODE_WORKER_EPOCH',
96
+ ];
97
+ const MARKER_NAMES = new Set(CLAUDE_SESSION_MARKER_NAMES);
98
+ /** Whether `name` is a Claude Code session marker that must not reach an agent. */
99
+ export function isClaudeSessionMarker(name) {
100
+ if (MARKER_NAMES.has(name))
101
+ return true;
102
+ return CLAUDE_SESSION_MARKER_PREFIXES.some((prefix) => name.startsWith(prefix));
103
+ }
104
+ /**
105
+ * Copy `env` with Claude Code session markers removed.
106
+ *
107
+ * Returns a plain `Record<string, string>` — `undefined`-valued entries (which
108
+ * `NodeJS.ProcessEnv` permits and node-pty rejects) are dropped — so callers can
109
+ * hand the result straight to a spawn call.
110
+ */
111
+ export function sanitizeAgentEnv(env = process.env) {
112
+ const out = {};
113
+ for (const [key, value] of Object.entries(env)) {
114
+ if (value === undefined)
115
+ continue;
116
+ if (isClaudeSessionMarker(key))
117
+ continue;
118
+ out[key] = value;
119
+ }
120
+ return out;
121
+ }
122
+ /** The session markers present in `env`, for diagnostics (`codev doctor`). */
123
+ export function findClaudeSessionMarkers(env = process.env) {
124
+ return Object.keys(env).filter(isClaudeSessionMarker).sort();
125
+ }
126
+ //# sourceMappingURL=agent-env.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-env.js","sourceRoot":"","sources":["../../src/lib/agent-env.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AAEH;;;;GAIG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAsB;IAC/D,8DAA8D;IAC9D,sBAAsB;IACtB,sCAAsC;IACtC,6BAA6B;IAC7B,+DAA+D;IAC/D,qBAAqB;IACrB,sEAAsE;IACtE,wBAAwB;CACzB,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAsB;IAC5D,YAAY;IACZ,2BAA2B;IAC3B,4EAA4E;IAC5E,0EAA0E;IAC1E,YAAY;IACZ,wBAAwB;IACxB,sBAAsB;IACtB,sBAAsB;IACtB,8BAA8B;IAC9B,iCAAiC;IACjC,gCAAgC;IAChC,wBAAwB;IACxB,0BAA0B;CAC3B,CAAC;AAEF,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,2BAA2B,CAAC,CAAC;AAE1D,mFAAmF;AACnF,MAAM,UAAU,qBAAqB,CAAC,IAAY;IAChD,IAAI,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACxC,OAAO,8BAA8B,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;AAClF,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAC9B,MAAkD,OAAO,CAAC,GAAG;IAE7D,MAAM,GAAG,GAA2B,EAAE,CAAC;IACvC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/C,IAAI,KAAK,KAAK,SAAS;YAAE,SAAS;QAClC,IAAI,qBAAqB,CAAC,GAAG,CAAC;YAAE,SAAS;QACzC,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACnB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,wBAAwB,CACtC,MAAkD,OAAO,CAAC,GAAG;IAE7D,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,IAAI,EAAE,CAAC;AAC/D,CAAC"}
@@ -146,6 +146,16 @@ export type RecentlyMergedResult = MergedPrItem[];
146
146
  export interface PrSearchItem {
147
147
  number: number;
148
148
  headRefName: string;
149
+ /**
150
+ * PR/MR state, normalized to the GitHub convention: `OPEN` | `MERGED` |
151
+ * `CLOSED`. Because `pr-search` runs `--state all` (#759), consumers that
152
+ * only want open PRs must filter on this — the spawn collision guard ignores
153
+ * non-open results (#1637). Optional: a stale project-local override of
154
+ * `pr-search.sh` may predate this field (and the gitlab script leaves it
155
+ * blank when glab omits it), so consumers treat an absent or empty value as
156
+ * "unknown" rather than assuming a state.
157
+ */
158
+ state?: string;
149
159
  }
150
160
  /** Output of the `pr-search` concept command. */
151
161
  export type PrSearchResult = PrSearchItem[];
@@ -1 +1 @@
1
- {"version":3,"file":"forge-contracts.d.ts","sourceRoot":"","sources":["../../src/lib/forge-contracts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"forge-contracts.d.ts","sourceRoot":"","sources":["../../src/lib/forge-contracts.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"forge-contracts.js","sourceRoot":"","sources":["../../src/lib/forge-contracts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;;AAuLH,wEAAwE;AACxE,uDAAuD;AAEvD,yEAAyE;AACzE,8DAA8D;AAE9D,gFAAgF;AAChF,2BAA2B;AAC3B,gFAAgF;AAEhF,8EAA8E;AAC9E,+CAA+C;AAE/C,2EAA2E;AAC3E,mEAAmE;AACnE,8CAA8C;AAE9C,8EAA8E;AAC9E,0EAA0E;AAC1E,yCAAyC;AAEzC,gFAAgF;AAChF,gBAAgB;AAChB,gFAAgF;AAEhF,mEAAmE;AACnE,6DAA6D"}
1
+ {"version":3,"file":"forge-contracts.js","sourceRoot":"","sources":["../../src/lib/forge-contracts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;;AAiMH,wEAAwE;AACxE,uDAAuD;AAEvD,yEAAyE;AACzE,8DAA8D;AAE9D,gFAAgF;AAChF,2BAA2B;AAC3B,gFAAgF;AAEhF,8EAA8E;AAC9E,+CAA+C;AAE/C,2EAA2E;AAC3E,mEAAmE;AACnE,8CAA8C;AAE9C,8EAA8E;AAC9E,0EAA0E;AAC1E,yCAAyC;AAEzC,gFAAgF;AAChF,gBAAgB;AAChB,gFAAgF;AAEhF,mEAAmE;AACnE,6DAA6D"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Per-backend rate-limit suspension for forge fetches (#1645).
3
+ *
4
+ * When a backend (`gh`, `glab`, …) reports that its budget is exhausted, every
5
+ * fetch that would spend the same budget is suspended until the reset instant.
6
+ * Importing this module never shells out: the optional reset probe is injected
7
+ * by the caller that wants it (Tower's overview cache).
8
+ */
9
+ export declare function isRateLimitError(text: string): boolean;
10
+ /** The budget a concept spends on its backend, e.g. `gh` or `gh:rest`. */
11
+ export declare function budgetKeyFor(backend: string, concept: string): string;
12
+ /** Result of a reset probe. `remaining === 0` makes the reported reset credible. */
13
+ export interface RateLimitProbeResult {
14
+ remaining: number;
15
+ /** Reset instant, epoch milliseconds. */
16
+ resetAt: number;
17
+ }
18
+ export type RateLimitProbe = (backend: string, cwd: string) => Promise<RateLimitProbeResult | null>;
19
+ export declare const SUSPENSION_FALLBACK_MS: number;
20
+ export declare class ForgeRateLimiter {
21
+ private readonly probe?;
22
+ private readonly suspensions;
23
+ constructor(probe?: RateLimitProbe | undefined);
24
+ /** Read-only: never allocates, so polling it every 2.5 s costs nothing. */
25
+ isSuspended(budget: string, now: number): boolean;
26
+ /** Reset instant (epoch ms) of an active suspension, else null. */
27
+ resetAt(budget: string, now: number): number | null;
28
+ /**
29
+ * Record a failure. Only a rate-limit error suspends, and only the failing
30
+ * budget: a REST failure never suspends the GraphQL bucket. A fresh
31
+ * suspension runs the reset probe at most once; a credible probe result
32
+ * (budget confirmed gone) sets the true reset instant, even if that is
33
+ * earlier than the fallback window.
34
+ */
35
+ noteFailure(budget: string, backend: string, cwd: string, errorText: string, now: number): boolean;
36
+ /**
37
+ * A success clears a suspension only if it was dispatched strictly after the
38
+ * suspension began: a batch dispatched in one tick shares a millisecond with
39
+ * the failure that suspended it, and its successes are not evidence of recovery.
40
+ */
41
+ noteSuccess(budget: string, dispatchedAt: number): void;
42
+ /** Honour a credible probe: the true reset instant wins over the fallback in both directions. */
43
+ private applyProbe;
44
+ }
45
+ //# sourceMappingURL=forge-rate-limit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"forge-rate-limit.d.ts","sourceRoot":"","sources":["../../src/lib/forge-rate-limit.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEtD;AAYD,0EAA0E;AAC1E,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAGrE;AAED,oFAAoF;AACpF,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,yCAAyC;IACzC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAAC;AAOpG,eAAO,MAAM,sBAAsB,QAAc,CAAC;AAElD,qBAAa,gBAAgB;IAGf,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;IAFnC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAiC;gBAEhC,KAAK,CAAC,EAAE,cAAc,YAAA;IAEnD,2EAA2E;IAC3E,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO;IAKjD,mEAAmE;IACnE,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAKnD;;;;;;OAMG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO;IAgBlG;;;;OAIG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI;IAKvD,iGAAiG;IACjG,OAAO,CAAC,UAAU;CAKnB"}
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Per-backend rate-limit suspension for forge fetches (#1645).
3
+ *
4
+ * When a backend (`gh`, `glab`, …) reports that its budget is exhausted, every
5
+ * fetch that would spend the same budget is suspended until the reset instant.
6
+ * Importing this module never shells out: the optional reset probe is injected
7
+ * by the caller that wants it (Tower's overview cache).
8
+ */
9
+ /** GitHub's GraphQL and REST primary-limit messages, and gh's error type. */
10
+ const RATE_LIMIT_PATTERN = /rate limit (?:already )?exceeded|RATE_LIMITED|graphql_rate_limit|secondary rate limit/i;
11
+ export function isRateLimitError(text) {
12
+ return RATE_LIMIT_PATTERN.test(text);
13
+ }
14
+ /**
15
+ * Concepts that spend a budget other than the one the backend's list concepts
16
+ * spend. This is a fact about the backend: on `gh`, `user-identity` is a REST
17
+ * call outside the GraphQL bucket; on Linear every concept is GraphQL on
18
+ * Linear's own budget, so nothing is split out there.
19
+ */
20
+ const OFF_BUDGET_CONCEPTS = {
21
+ gh: new Set(['user-identity', 'auth-status']),
22
+ };
23
+ /** The budget a concept spends on its backend, e.g. `gh` or `gh:rest`. */
24
+ export function budgetKeyFor(backend, concept) {
25
+ const key = backend.toLowerCase();
26
+ return OFF_BUDGET_CONCEPTS[key]?.has(concept) ? `${key}:rest` : key;
27
+ }
28
+ export const SUSPENSION_FALLBACK_MS = 15 * 60_000;
29
+ export class ForgeRateLimiter {
30
+ probe;
31
+ suspensions = new Map();
32
+ constructor(probe) {
33
+ this.probe = probe;
34
+ }
35
+ /** Read-only: never allocates, so polling it every 2.5 s costs nothing. */
36
+ isSuspended(budget, now) {
37
+ const s = this.suspensions.get(budget);
38
+ return s !== undefined && now < s.until;
39
+ }
40
+ /** Reset instant (epoch ms) of an active suspension, else null. */
41
+ resetAt(budget, now) {
42
+ const s = this.suspensions.get(budget);
43
+ return s !== undefined && now < s.until ? s.until : null;
44
+ }
45
+ /**
46
+ * Record a failure. Only a rate-limit error suspends, and only the failing
47
+ * budget: a REST failure never suspends the GraphQL bucket. A fresh
48
+ * suspension runs the reset probe at most once; a credible probe result
49
+ * (budget confirmed gone) sets the true reset instant, even if that is
50
+ * earlier than the fallback window.
51
+ */
52
+ noteFailure(budget, backend, cwd, errorText, now) {
53
+ if (!isRateLimitError(errorText))
54
+ return false;
55
+ const existing = this.suspensions.get(budget);
56
+ if (existing && now < existing.until)
57
+ return true;
58
+ const suspension = { startedAt: now, until: now + SUSPENSION_FALLBACK_MS };
59
+ this.suspensions.set(budget, suspension);
60
+ const probe = this.probe;
61
+ if (probe && backend === 'gh') {
62
+ Promise.resolve()
63
+ .then(() => probe(backend, cwd))
64
+ .then(result => this.applyProbe(budget, suspension, result))
65
+ .catch(() => { });
66
+ }
67
+ return true;
68
+ }
69
+ /**
70
+ * A success clears a suspension only if it was dispatched strictly after the
71
+ * suspension began: a batch dispatched in one tick shares a millisecond with
72
+ * the failure that suspended it, and its successes are not evidence of recovery.
73
+ */
74
+ noteSuccess(budget, dispatchedAt) {
75
+ const s = this.suspensions.get(budget);
76
+ if (s && dispatchedAt > s.startedAt)
77
+ this.suspensions.delete(budget);
78
+ }
79
+ /** Honour a credible probe: the true reset instant wins over the fallback in both directions. */
80
+ applyProbe(budget, suspension, result) {
81
+ if (!result || result.remaining > 0)
82
+ return;
83
+ if (this.suspensions.get(budget) !== suspension)
84
+ return;
85
+ if (result.resetAt > suspension.startedAt)
86
+ suspension.until = result.resetAt;
87
+ }
88
+ }
89
+ //# sourceMappingURL=forge-rate-limit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"forge-rate-limit.js","sourceRoot":"","sources":["../../src/lib/forge-rate-limit.ts"],"names":[],"mappings":"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"}
@@ -73,6 +73,34 @@ export declare function isConceptDisabled(concept: string, forgeConfig?: ForgeCo
73
73
  * @returns Parsed JSON from stdout, raw string for non-JSON concepts, or null on failure
74
74
  */
75
75
  export declare function executeForgeCommand(concept: string, env?: Record<string, string>, options?: ForgeCommandOptions): Promise<unknown | null>;
76
+ /** Why a forge command produced no data (#1645). `null` on the result means it exited 0. */
77
+ export interface ForgeCommandError {
78
+ message: string;
79
+ stderr: string;
80
+ /** Process exit code; null when the command was disabled, timed out, or config failed to load. */
81
+ exitCode: number | null;
82
+ }
83
+ export interface ForgeCommandResult {
84
+ data: unknown | null;
85
+ error: ForgeCommandError | null;
86
+ }
87
+ /**
88
+ * Like `executeForgeCommand`, but keeps the failure (#1645). Callers that must
89
+ * tell "rate limited" from "CLI missing" need stderr and the exit code; the
90
+ * plain variant collapses every failure to `null`. Never throws — a malformed
91
+ * `.codev/config.json` is reported as an error, not raised into Tower's
92
+ * `unhandledRejection` handler.
93
+ */
94
+ export declare function executeForgeCommandDetailed(concept: string, env?: Record<string, string>, options?: ForgeCommandOptions): Promise<ForgeCommandResult>;
95
+ /**
96
+ * The backend a concept actually spends budget on (#1645): the resolved
97
+ * executable's lowercased basename (`gh`, whether configured as `gh` or
98
+ * `/usr/local/bin/gh`), never the configured provider — a Linear workspace's
99
+ * `pr-list` falls through to the GitHub script and spends GitHub's budget.
100
+ * Generic transports and custom script paths key by provider instead.
101
+ * Returns null when the concept is disabled or unknown.
102
+ */
103
+ export declare function resolveForgeBackend(concept: string, options?: ForgeCommandOptions): string | null;
76
104
  /**
77
105
  * Execute a forge concept command synchronously.
78
106
  *
@@ -1 +1 @@
1
- {"version":3,"file":"forge.d.ts","sourceRoot":"","sources":["../../src/lib/forge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AA8BH,oGAAoG;AACpG,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEhF,2CAA2C;AAC3C,MAAM,WAAW,mBAAmB;IAClC,+CAA+C;IAC/C,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,6FAA6F;IAC7F,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,yEAAyE;IACzE,WAAW,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IACjC,uEAAuE;IACvE,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,6DAA6D;IAC7D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAiFD,gCAAgC;AAChC,wBAAgB,iBAAiB,IAAI,MAAM,EAAE,CAE5C;AAED,+CAA+C;AAC/C,MAAM,MAAM,aAAa,GAAG,UAAU,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,CAAC;AAE3E,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,MAAM,EAAE,aAAa,CAAC;IACtB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,CAAC,EAAE,WAAW,GAAG,IAAI,GAAG,iBAAiB,EAAE,CA4BxF;AAqED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,aAAa,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAGzE;AAUD;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EACf,WAAW,CAAC,EAAE,WAAW,GAAG,IAAI,GAC/B,MAAM,GAAG,IAAI,CAgBf;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,WAAW,CAAC,EAAE,WAAW,GAAG,IAAI,GAC/B,OAAO,CAGT;AAMD;;;;;;;;;;GAUG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,MAAM,EACf,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5B,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAuBzB;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,MAAM,EACf,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5B,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,GAAG,IAAI,CAyBhB;AAoDD;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,EAAE,CAE3C;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAEhE;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,WAAW,GACvB;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,IAAI,GAAG,UAAU,GAAG,iBAAiB,GAAG,eAAe,GAAG,UAAU,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAAE,CA2BtH"}
1
+ {"version":3,"file":"forge.d.ts","sourceRoot":"","sources":["../../src/lib/forge.ts"],"names":[],"mappings":"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"}
package/dist/lib/forge.js CHANGED
@@ -14,7 +14,7 @@
14
14
  import { exec, execSync } from 'node:child_process';
15
15
  import { promisify } from 'node:util';
16
16
  import { existsSync, readFileSync } from 'node:fs';
17
- import { resolve, dirname } from 'node:path';
17
+ import { resolve, dirname, basename } from 'node:path';
18
18
  import { fileURLToPath } from 'node:url';
19
19
  import { loadConfig as loadCodevConfig } from './config.js';
20
20
  const execAsync = promisify(exec);
@@ -269,25 +269,78 @@ export function isConceptDisabled(concept, forgeConfig) {
269
269
  * @returns Parsed JSON from stdout, raw string for non-JSON concepts, or null on failure
270
270
  */
271
271
  export async function executeForgeCommand(concept, env, options) {
272
- const forgeConfig = resolveForgeConfig(options);
273
- const command = getForgeCommand(concept, forgeConfig);
274
- if (command === null) {
275
- return null;
276
- }
277
- const forgeEnv = buildForgeEnv(forgeConfig);
272
+ return (await executeForgeCommandDetailed(concept, env, options)).data;
273
+ }
274
+ /**
275
+ * Like `executeForgeCommand`, but keeps the failure (#1645). Callers that must
276
+ * tell "rate limited" from "CLI missing" need stderr and the exit code; the
277
+ * plain variant collapses every failure to `null`. Never throws — a malformed
278
+ * `.codev/config.json` is reported as an error, not raised into Tower's
279
+ * `unhandledRejection` handler.
280
+ */
281
+ export async function executeForgeCommandDetailed(concept, env, options) {
278
282
  try {
283
+ const forgeConfig = resolveForgeConfig(options);
284
+ const command = getForgeCommand(concept, forgeConfig);
285
+ if (command === null) {
286
+ return { data: null, error: { message: `concept '${concept}' is disabled or unknown`, stderr: '', exitCode: null } };
287
+ }
279
288
  const { stdout } = await execAsync(command, {
280
289
  cwd: options?.cwd,
281
- env: { ...process.env, ...forgeEnv, ...env },
290
+ env: { ...process.env, ...buildForgeEnv(forgeConfig), ...env },
282
291
  timeout: 30_000,
283
292
  maxBuffer: options?.maxBuffer ?? DEFAULT_MAX_BUFFER,
284
293
  });
285
- return parseOutput(stdout, options?.raw);
294
+ return { data: parseOutput(stdout, options?.raw), error: null };
286
295
  }
287
296
  catch (err) {
288
297
  logDebug(concept, err);
289
- return null;
298
+ const e = err;
299
+ return {
300
+ data: null,
301
+ error: {
302
+ message: e?.message ?? String(err),
303
+ stderr: typeof e?.stderr === 'string' ? e.stderr : '',
304
+ exitCode: typeof e?.code === 'number' ? e.code : null,
305
+ },
306
+ };
307
+ }
308
+ }
309
+ /**
310
+ * Executables that name a transport, not a forge account. A concept run through
311
+ * one of these is keyed by its provider (`linear`), because `curl` has no budget.
312
+ */
313
+ const GENERIC_TRANSPORTS = new Set(['curl', 'wget', 'sh', 'bash', 'zsh', 'node', 'python', 'python3', 'npx', 'env']);
314
+ const FORGE_CLIS = new Set(['gh', 'glab', 'tea']);
315
+ /**
316
+ * The backend a concept actually spends budget on (#1645): the resolved
317
+ * executable's lowercased basename (`gh`, whether configured as `gh` or
318
+ * `/usr/local/bin/gh`), never the configured provider — a Linear workspace's
319
+ * `pr-list` falls through to the GitHub script and spends GitHub's budget.
320
+ * Generic transports and custom script paths key by provider instead.
321
+ * Returns null when the concept is disabled or unknown.
322
+ */
323
+ export function resolveForgeBackend(concept, options) {
324
+ let forgeConfig;
325
+ try {
326
+ forgeConfig = resolveForgeConfig(options);
327
+ }
328
+ catch {
329
+ forgeConfig = null;
290
330
  }
331
+ const command = getForgeCommand(concept, forgeConfig);
332
+ if (command === null)
333
+ return null;
334
+ const provider = (forgeConfig?.provider ?? 'github').toLowerCase();
335
+ const executable = extractExecutable(command);
336
+ if (!executable)
337
+ return provider;
338
+ const base = basename(executable).toLowerCase();
339
+ if (GENERIC_TRANSPORTS.has(base))
340
+ return provider;
341
+ if (executable.includes('/') && !FORGE_CLIS.has(base))
342
+ return provider;
343
+ return base;
291
344
  }
292
345
  /**
293
346
  * Execute a forge concept command synchronously.
@@ -1 +1 @@
1
- {"version":3,"file":"forge.js","sourceRoot":"","sources":["../../src/lib/forge.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"forge.js","sourceRoot":"","sources":["../../src/lib/forge.ts"],"names":[],"mappings":"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"}
@@ -8,7 +8,8 @@
8
8
  *
9
9
  * @see codev/specs/589-non-github-repository-support.md
10
10
  */
11
- import { type ForgeConfig } from './forge.js';
11
+ import { type ForgeConfig, type ForgeCommandResult } from './forge.js';
12
+ import type { RateLimitProbeResult } from './forge-rate-limit.js';
12
13
  import type { IssueViewResult, PrListItem, PrViewResult, IssueListItem } from './forge-contracts.js';
13
14
  /** A single issue as returned by the `issue-view` concept command. */
14
15
  export type ForgeIssue = IssueViewResult;
@@ -108,6 +109,17 @@ export declare function fetchRecentlyClosed(cwd?: string, forgeConfig?: ForgeCon
108
109
  * Returns null on failure.
109
110
  */
110
111
  export declare function fetchRecentMergedPRs(cwd?: string, forgeConfig?: ForgeConfig | null): Promise<ForgePR[] | null>;
112
+ export type OverviewConcept = 'pr-list' | 'issue-list' | 'recently-closed' | 'recently-merged' | 'user-identity';
113
+ /** Resolved backend key for an overview concept in `cwd` (see `resolveForgeBackend`). */
114
+ export declare function overviewBackend(concept: OverviewConcept, cwd: string): string | null;
115
+ /** Run one overview concept, post-processed exactly like its `fetch*` counterpart. */
116
+ export declare function fetchForOverview(concept: OverviewConcept, cwd: string): Promise<ForgeCommandResult>;
117
+ /**
118
+ * Ask gh for the GraphQL bucket's reset instant. `gh api rate_limit` is free
119
+ * (it spends no quota) but is known to misreport a healthy bucket, so callers
120
+ * only trust it when it agrees the budget is gone (`remaining === 0`).
121
+ */
122
+ export declare function probeGhGraphqlRateLimit(_backend: string, cwd: string): Promise<RateLimitProbeResult | null>;
111
123
  export interface MergedPR {
112
124
  number: number;
113
125
  title: string;
@@ -1 +1 @@
1
- {"version":3,"file":"github.d.ts","sourceRoot":"","sources":["../../src/lib/github.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"github.d.ts","sourceRoot":"","sources":["../../src/lib/github.ts"],"names":[],"mappings":"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"}