@tickernelz/paperclip-pro-adapter-claude-local 2026.925.0

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 (206) hide show
  1. package/LICENSE +22 -0
  2. package/dist/cli/format-event.d.ts +2 -0
  3. package/dist/cli/format-event.d.ts.map +1 -0
  4. package/dist/cli/format-event.js +141 -0
  5. package/dist/cli/format-event.js.map +1 -0
  6. package/dist/cli/index.d.ts +2 -0
  7. package/dist/cli/index.d.ts.map +1 -0
  8. package/dist/cli/index.js +2 -0
  9. package/dist/cli/index.js.map +1 -0
  10. package/dist/cli/quota-probe.d.ts +3 -0
  11. package/dist/cli/quota-probe.d.ts.map +1 -0
  12. package/dist/cli/quota-probe.js +106 -0
  13. package/dist/cli/quota-probe.js.map +1 -0
  14. package/dist/index.d.ts +13 -0
  15. package/dist/index.d.ts.map +1 -0
  16. package/dist/index.js +90 -0
  17. package/dist/index.js.map +1 -0
  18. package/dist/index.test.d.ts +2 -0
  19. package/dist/index.test.d.ts.map +1 -0
  20. package/dist/index.test.js +35 -0
  21. package/dist/index.test.js.map +1 -0
  22. package/dist/server/acp.auth.test.d.ts +2 -0
  23. package/dist/server/acp.auth.test.d.ts.map +1 -0
  24. package/dist/server/acp.auth.test.js +581 -0
  25. package/dist/server/acp.auth.test.js.map +1 -0
  26. package/dist/server/acp.d.ts +68 -0
  27. package/dist/server/acp.d.ts.map +1 -0
  28. package/dist/server/acp.js +779 -0
  29. package/dist/server/acp.js.map +1 -0
  30. package/dist/server/acp.quota.test.d.ts +2 -0
  31. package/dist/server/acp.quota.test.d.ts.map +1 -0
  32. package/dist/server/acp.quota.test.js +114 -0
  33. package/dist/server/acp.quota.test.js.map +1 -0
  34. package/dist/server/acp.test.d.ts +2 -0
  35. package/dist/server/acp.test.d.ts.map +1 -0
  36. package/dist/server/acp.test.js +1153 -0
  37. package/dist/server/acp.test.js.map +1 -0
  38. package/dist/server/auth-check.d.ts +8 -0
  39. package/dist/server/auth-check.d.ts.map +1 -0
  40. package/dist/server/auth-check.js +8 -0
  41. package/dist/server/auth-check.js.map +1 -0
  42. package/dist/server/claude-config.d.ts +49 -0
  43. package/dist/server/claude-config.d.ts.map +1 -0
  44. package/dist/server/claude-config.js +279 -0
  45. package/dist/server/claude-config.js.map +1 -0
  46. package/dist/server/claude-config.test.d.ts +2 -0
  47. package/dist/server/claude-config.test.d.ts.map +1 -0
  48. package/dist/server/claude-config.test.js +197 -0
  49. package/dist/server/claude-config.test.js.map +1 -0
  50. package/dist/server/cli-capabilities.d.ts +26 -0
  51. package/dist/server/cli-capabilities.d.ts.map +1 -0
  52. package/dist/server/cli-capabilities.js +115 -0
  53. package/dist/server/cli-capabilities.js.map +1 -0
  54. package/dist/server/config-schema.d.ts +3 -0
  55. package/dist/server/config-schema.d.ts.map +1 -0
  56. package/dist/server/config-schema.js +67 -0
  57. package/dist/server/config-schema.js.map +1 -0
  58. package/dist/server/engine-availability.test.d.ts +2 -0
  59. package/dist/server/engine-availability.test.d.ts.map +1 -0
  60. package/dist/server/engine-availability.test.js +41 -0
  61. package/dist/server/engine-availability.test.js.map +1 -0
  62. package/dist/server/execute.acp-fallback.test.d.ts +2 -0
  63. package/dist/server/execute.acp-fallback.test.d.ts.map +1 -0
  64. package/dist/server/execute.acp-fallback.test.js +104 -0
  65. package/dist/server/execute.acp-fallback.test.js.map +1 -0
  66. package/dist/server/execute.d.ts +23 -0
  67. package/dist/server/execute.d.ts.map +1 -0
  68. package/dist/server/execute.js +1089 -0
  69. package/dist/server/execute.js.map +1 -0
  70. package/dist/server/execute.remote.test.d.ts +2 -0
  71. package/dist/server/execute.remote.test.d.ts.map +1 -0
  72. package/dist/server/execute.remote.test.js +484 -0
  73. package/dist/server/execute.remote.test.js.map +1 -0
  74. package/dist/server/index.d.ts +16 -0
  75. package/dist/server/index.d.ts.map +1 -0
  76. package/dist/server/index.js +84 -0
  77. package/dist/server/index.js.map +1 -0
  78. package/dist/server/models.d.ts +13 -0
  79. package/dist/server/models.d.ts.map +1 -0
  80. package/dist/server/models.js +153 -0
  81. package/dist/server/models.js.map +1 -0
  82. package/dist/server/parse.d.ts +58 -0
  83. package/dist/server/parse.d.ts.map +1 -0
  84. package/dist/server/parse.js +459 -0
  85. package/dist/server/parse.js.map +1 -0
  86. package/dist/server/parse.test.d.ts +2 -0
  87. package/dist/server/parse.test.d.ts.map +1 -0
  88. package/dist/server/parse.test.js +419 -0
  89. package/dist/server/parse.test.js.map +1 -0
  90. package/dist/server/permissions.d.ts +14 -0
  91. package/dist/server/permissions.d.ts.map +1 -0
  92. package/dist/server/permissions.js +13 -0
  93. package/dist/server/permissions.js.map +1 -0
  94. package/dist/server/permissions.test.d.ts +2 -0
  95. package/dist/server/permissions.test.d.ts.map +1 -0
  96. package/dist/server/permissions.test.js +22 -0
  97. package/dist/server/permissions.test.js.map +1 -0
  98. package/dist/server/probe-diagnostics.d.ts +102 -0
  99. package/dist/server/probe-diagnostics.d.ts.map +1 -0
  100. package/dist/server/probe-diagnostics.js +140 -0
  101. package/dist/server/probe-diagnostics.js.map +1 -0
  102. package/dist/server/probe-diagnostics.test.d.ts +2 -0
  103. package/dist/server/probe-diagnostics.test.d.ts.map +1 -0
  104. package/dist/server/probe-diagnostics.test.js +114 -0
  105. package/dist/server/probe-diagnostics.test.js.map +1 -0
  106. package/dist/server/probe-env.d.ts +42 -0
  107. package/dist/server/probe-env.d.ts.map +1 -0
  108. package/dist/server/probe-env.js +149 -0
  109. package/dist/server/probe-env.js.map +1 -0
  110. package/dist/server/probe-env.test.d.ts +2 -0
  111. package/dist/server/probe-env.test.d.ts.map +1 -0
  112. package/dist/server/probe-env.test.js +135 -0
  113. package/dist/server/probe-env.test.js.map +1 -0
  114. package/dist/server/probe-redaction.test.d.ts +2 -0
  115. package/dist/server/probe-redaction.test.d.ts.map +1 -0
  116. package/dist/server/probe-redaction.test.js +86 -0
  117. package/dist/server/probe-redaction.test.js.map +1 -0
  118. package/dist/server/prompt-cache.d.ts +17 -0
  119. package/dist/server/prompt-cache.d.ts.map +1 -0
  120. package/dist/server/prompt-cache.js +126 -0
  121. package/dist/server/prompt-cache.js.map +1 -0
  122. package/dist/server/quota-keychain.test.d.ts +2 -0
  123. package/dist/server/quota-keychain.test.d.ts.map +1 -0
  124. package/dist/server/quota-keychain.test.js +83 -0
  125. package/dist/server/quota-keychain.test.js.map +1 -0
  126. package/dist/server/quota.d.ts +30 -0
  127. package/dist/server/quota.d.ts.map +1 -0
  128. package/dist/server/quota.js +543 -0
  129. package/dist/server/quota.js.map +1 -0
  130. package/dist/server/setup-token-characterization.test.d.ts +2 -0
  131. package/dist/server/setup-token-characterization.test.d.ts.map +1 -0
  132. package/dist/server/setup-token-characterization.test.js +123 -0
  133. package/dist/server/setup-token-characterization.test.js.map +1 -0
  134. package/dist/server/setup-token-parse.d.ts +47 -0
  135. package/dist/server/setup-token-parse.d.ts.map +1 -0
  136. package/dist/server/setup-token-parse.js +506 -0
  137. package/dist/server/setup-token-parse.js.map +1 -0
  138. package/dist/server/setup-token-parse.test.d.ts +2 -0
  139. package/dist/server/setup-token-parse.test.d.ts.map +1 -0
  140. package/dist/server/setup-token-parse.test.js +587 -0
  141. package/dist/server/setup-token-parse.test.js.map +1 -0
  142. package/dist/server/setup-token-runner.d.ts +115 -0
  143. package/dist/server/setup-token-runner.d.ts.map +1 -0
  144. package/dist/server/setup-token-runner.js +317 -0
  145. package/dist/server/setup-token-runner.js.map +1 -0
  146. package/dist/server/setup-token-runner.test.d.ts +2 -0
  147. package/dist/server/setup-token-runner.test.d.ts.map +1 -0
  148. package/dist/server/setup-token-runner.test.js +336 -0
  149. package/dist/server/setup-token-runner.test.js.map +1 -0
  150. package/dist/server/skills.d.ts +8 -0
  151. package/dist/server/skills.d.ts.map +1 -0
  152. package/dist/server/skills.js +42 -0
  153. package/dist/server/skills.js.map +1 -0
  154. package/dist/server/test.d.ts +3 -0
  155. package/dist/server/test.d.ts.map +1 -0
  156. package/dist/server/test.js +434 -0
  157. package/dist/server/test.js.map +1 -0
  158. package/dist/server/test.probe.test.d.ts +2 -0
  159. package/dist/server/test.probe.test.d.ts.map +1 -0
  160. package/dist/server/test.probe.test.js +608 -0
  161. package/dist/server/test.probe.test.js.map +1 -0
  162. package/dist/server/test.remote.test.d.ts +2 -0
  163. package/dist/server/test.remote.test.d.ts.map +1 -0
  164. package/dist/server/test.remote.test.js +149 -0
  165. package/dist/server/test.remote.test.js.map +1 -0
  166. package/dist/ui/build-config.d.ts +3 -0
  167. package/dist/ui/build-config.d.ts.map +1 -0
  168. package/dist/ui/build-config.js +76 -0
  169. package/dist/ui/build-config.js.map +1 -0
  170. package/dist/ui/build-config.test.d.ts +2 -0
  171. package/dist/ui/build-config.test.d.ts.map +1 -0
  172. package/dist/ui/build-config.test.js +68 -0
  173. package/dist/ui/build-config.test.js.map +1 -0
  174. package/dist/ui/index.d.ts +3 -0
  175. package/dist/ui/index.d.ts.map +1 -0
  176. package/dist/ui/index.js +3 -0
  177. package/dist/ui/index.js.map +1 -0
  178. package/dist/ui/parse-stdout.d.ts +3 -0
  179. package/dist/ui/parse-stdout.d.ts.map +1 -0
  180. package/dist/ui/parse-stdout.js +153 -0
  181. package/dist/ui/parse-stdout.js.map +1 -0
  182. package/package.json +63 -0
  183. package/skills/agentmail/SKILL.md +70 -0
  184. package/skills/paperclip/SKILL.md +712 -0
  185. package/skills/paperclip/references/api-reference.md +1675 -0
  186. package/skills/paperclip/references/artifacts.md +158 -0
  187. package/skills/paperclip/references/cases.md +295 -0
  188. package/skills/paperclip/references/company-skills.md +266 -0
  189. package/skills/paperclip/references/issue-workspaces.md +80 -0
  190. package/skills/paperclip/references/routines.md +231 -0
  191. package/skills/paperclip/references/workflows.md +141 -0
  192. package/skills/paperclip/scripts/paperclip-upload-artifact.sh +592 -0
  193. package/skills/paperclip-board/SKILL.md +619 -0
  194. package/skills/paperclip-converting-plans-to-tasks/SKILL.md +60 -0
  195. package/skills/paperclip-create-agent/SKILL.md +179 -0
  196. package/skills/paperclip-create-agent/references/agent-instruction-templates.md +123 -0
  197. package/skills/paperclip-create-agent/references/agents/coder.md +64 -0
  198. package/skills/paperclip-create-agent/references/agents/qa.md +88 -0
  199. package/skills/paperclip-create-agent/references/agents/securityengineer.md +135 -0
  200. package/skills/paperclip-create-agent/references/agents/uxdesigner.md +115 -0
  201. package/skills/paperclip-create-agent/references/api-reference.md +110 -0
  202. package/skills/paperclip-create-agent/references/baseline-role-guide.md +168 -0
  203. package/skills/paperclip-create-agent/references/draft-review-checklist.md +95 -0
  204. package/skills/para-memory-files/SKILL.md +100 -0
  205. package/skills/para-memory-files/references/schemas.md +35 -0
  206. package/skills/slack/SKILL.md +65 -0
@@ -0,0 +1,543 @@
1
+ import { execFile } from "node:child_process";
2
+ import { createHash } from "node:crypto";
3
+ import fs from "node:fs/promises";
4
+ import os from "node:os";
5
+ import path from "node:path";
6
+ import { promisify } from "node:util";
7
+ const execFileAsync = promisify(execFile);
8
+ const CLAUDE_USAGE_SOURCE_OAUTH = "anthropic-oauth";
9
+ const CLAUDE_USAGE_SOURCE_CLI = "claude-cli";
10
+ export function claudeConfigDir() {
11
+ const fromEnv = process.env.CLAUDE_CONFIG_DIR;
12
+ if (typeof fromEnv === "string" && fromEnv.trim().length > 0)
13
+ return fromEnv.trim();
14
+ return path.join(os.homedir(), ".claude");
15
+ }
16
+ function hasNonEmptyProcessEnv(key) {
17
+ const value = process.env[key];
18
+ return typeof value === "string" && value.trim().length > 0;
19
+ }
20
+ function createClaudeQuotaEnv() {
21
+ const env = {};
22
+ for (const [key, value] of Object.entries(process.env)) {
23
+ if (typeof value !== "string")
24
+ continue;
25
+ if (key.startsWith("ANTHROPIC_"))
26
+ continue;
27
+ env[key] = value;
28
+ }
29
+ return env;
30
+ }
31
+ function stripBackspaces(text) {
32
+ let out = "";
33
+ for (const char of text) {
34
+ if (char === "\b") {
35
+ out = out.slice(0, -1);
36
+ }
37
+ else {
38
+ out += char;
39
+ }
40
+ }
41
+ return out;
42
+ }
43
+ function stripAnsi(text) {
44
+ return text
45
+ .replace(/\u001B\][^\u0007]*(?:\u0007|\u001B\\)/g, "")
46
+ .replace(/\u001B(?:[@-Z\\-_]|\[[0-?]*[ -/]*[@-~])/g, "");
47
+ }
48
+ function cleanTerminalText(text) {
49
+ return stripAnsi(stripBackspaces(text))
50
+ .replace(/\u0000/g, "")
51
+ .replace(/\r/g, "\n");
52
+ }
53
+ function normalizeForLabelSearch(text) {
54
+ return text.toLowerCase().replace(/[^a-z0-9]+/g, "");
55
+ }
56
+ function trimToLatestUsagePanel(text) {
57
+ const lower = text.toLowerCase();
58
+ const settingsIndex = lower.lastIndexOf("settings:");
59
+ if (settingsIndex < 0)
60
+ return null;
61
+ let tail = text.slice(settingsIndex);
62
+ const tailLower = tail.toLowerCase();
63
+ if (!tailLower.includes("usage"))
64
+ return null;
65
+ if (!tailLower.includes("current session") && !tailLower.includes("loading usage"))
66
+ return null;
67
+ const stopMarkers = [
68
+ "status dialog dismissed",
69
+ "checking for updates",
70
+ "press ctrl-c again to exit",
71
+ ];
72
+ let stopIndex = -1;
73
+ for (const marker of stopMarkers) {
74
+ const markerIndex = tailLower.indexOf(marker);
75
+ if (markerIndex >= 0 && (stopIndex === -1 || markerIndex < stopIndex)) {
76
+ stopIndex = markerIndex;
77
+ }
78
+ }
79
+ if (stopIndex >= 0) {
80
+ tail = tail.slice(0, stopIndex);
81
+ }
82
+ return tail;
83
+ }
84
+ async function readClaudeTokenFromFile(credPath) {
85
+ let raw;
86
+ try {
87
+ raw = await fs.readFile(credPath, "utf8");
88
+ }
89
+ catch {
90
+ return null;
91
+ }
92
+ const credential = parseClaudeCredential(raw);
93
+ if (!credential)
94
+ return null;
95
+ // On macOS the CLI refreshes the Keychain item, not this file, so a file
96
+ // whose token has expired is a stale leftover. Skip it so the caller can
97
+ // fall through to a live credential instead of failing with a dead token.
98
+ if (credential.expiresAt != null && credential.expiresAt <= Date.now())
99
+ return null;
100
+ return credential.token;
101
+ }
102
+ function parseClaudeCredential(raw) {
103
+ let parsed;
104
+ try {
105
+ parsed = JSON.parse(raw);
106
+ }
107
+ catch {
108
+ return null;
109
+ }
110
+ if (typeof parsed !== "object" || parsed === null)
111
+ return null;
112
+ const obj = parsed;
113
+ const oauth = obj["claudeAiOauth"];
114
+ if (typeof oauth !== "object" || oauth === null)
115
+ return null;
116
+ const token = oauth["accessToken"];
117
+ if (typeof token !== "string" || token.length === 0)
118
+ return null;
119
+ const expiresAt = oauth["expiresAt"];
120
+ return { token, expiresAt: typeof expiresAt === "number" && Number.isFinite(expiresAt) ? expiresAt : null };
121
+ }
122
+ function parseClaudeCredentialToken(raw) {
123
+ return parseClaudeCredential(raw)?.token ?? null;
124
+ }
125
+ export async function readClaudeAuthStatus() {
126
+ try {
127
+ const { stdout } = await execFileAsync("claude", ["auth", "status"], {
128
+ env: process.env,
129
+ timeout: 5_000,
130
+ maxBuffer: 1024 * 1024,
131
+ });
132
+ const parsed = JSON.parse(stdout);
133
+ return {
134
+ loggedIn: parsed.loggedIn === true,
135
+ authMethod: typeof parsed.authMethod === "string" ? parsed.authMethod : null,
136
+ subscriptionType: typeof parsed.subscriptionType === "string" ? parsed.subscriptionType : null,
137
+ };
138
+ }
139
+ catch {
140
+ return null;
141
+ }
142
+ }
143
+ function describeClaudeSubscriptionAuth(status) {
144
+ if (!status?.loggedIn || status.authMethod !== "claude.ai")
145
+ return null;
146
+ return status.subscriptionType
147
+ ? `Claude is logged in via claude.ai (${status.subscriptionType})`
148
+ : "Claude is logged in via claude.ai";
149
+ }
150
+ // Claude Code on macOS stores the OAuth credential for a custom
151
+ // CLAUDE_CONFIG_DIR in a per-directory Keychain item named
152
+ // "Claude Code-credentials-<first 8 hex chars of sha256(dir)>" instead of a
153
+ // credentials file in the directory. The suffix binds the item to exactly one
154
+ // auth home, so reading it can only ever surface the login performed inside
155
+ // that home — none of the cross-account risk of the unsuffixed operator item.
156
+ function isolatedKeychainService(configDir) {
157
+ return `Claude Code-credentials-${createHash("sha256").update(configDir).digest("hex").slice(0, 8)}`;
158
+ }
159
+ async function readClaudeTokenFromKeychain(service) {
160
+ try {
161
+ const { stdout } = await execFileAsync("/usr/bin/security", ["find-generic-password", "-s", service, "-w"], { timeout: 10000, maxBuffer: 1024 * 1024 });
162
+ return parseClaudeCredentialToken(stdout);
163
+ }
164
+ catch {
165
+ return null;
166
+ }
167
+ }
168
+ /**
169
+ * Read the credential that a `claude` login performed inside an isolated auth
170
+ * home left in the macOS Keychain. Only that home's own suffixed item is
171
+ * consulted — never the unsuffixed item that holds the server operator's
172
+ * machine-level login. Returns null off macOS.
173
+ */
174
+ export async function readIsolatedClaudeKeychainToken(loginHome) {
175
+ if (process.platform !== "darwin")
176
+ return null;
177
+ return readClaudeTokenFromKeychain(isolatedKeychainService(loginHome));
178
+ }
179
+ export async function readClaudeToken(options = {}) {
180
+ const configDir = claudeConfigDir();
181
+ for (const filename of [".credentials.json", "credentials.json"]) {
182
+ const token = await readClaudeTokenFromFile(path.join(configDir, filename));
183
+ if (token)
184
+ return token;
185
+ }
186
+ if (process.platform !== "darwin")
187
+ return null;
188
+ // A custom auth home owns exactly one Keychain item: the suffixed one the
189
+ // CLI created for that directory. It must never fall through to the
190
+ // unsuffixed item, which belongs to a different account.
191
+ if (process.env.CLAUDE_CONFIG_DIR?.trim()) {
192
+ return readClaudeTokenFromKeychain(isolatedKeychainService(configDir));
193
+ }
194
+ // Only an explicit local-account import may consult the user's Keychain.
195
+ if (options.allowKeychain) {
196
+ return readClaudeTokenFromKeychain("Claude Code-credentials");
197
+ }
198
+ return null;
199
+ }
200
+ function formatCurrencyAmount(value, currency) {
201
+ const code = typeof currency === "string" && currency.trim().length > 0 ? currency.trim().toUpperCase() : "USD";
202
+ return new Intl.NumberFormat("en-US", {
203
+ style: "currency",
204
+ currency: code,
205
+ maximumFractionDigits: 2,
206
+ }).format(value);
207
+ }
208
+ function formatExtraUsageLabel(extraUsage) {
209
+ const monthlyLimit = extraUsage.monthly_limit;
210
+ const usedCredits = extraUsage.used_credits;
211
+ if (typeof monthlyLimit !== "number" ||
212
+ !Number.isFinite(monthlyLimit) ||
213
+ typeof usedCredits !== "number" ||
214
+ !Number.isFinite(usedCredits)) {
215
+ return null;
216
+ }
217
+ // API returns values in cents — convert to dollars for display
218
+ return `${formatCurrencyAmount(usedCredits / 100, extraUsage.currency)} / ${formatCurrencyAmount(monthlyLimit / 100, extraUsage.currency)}`;
219
+ }
220
+ /** Convert a utilization value to a 0-100 integer percent. Returns null for null/undefined input.
221
+ * Handles both 0-1 fractions (legacy) and 0-100 percentages (current API). */
222
+ export function toPercent(utilization) {
223
+ if (utilization == null)
224
+ return null;
225
+ return Math.min(100, Math.round(utilization < 1 ? utilization * 100 : utilization));
226
+ }
227
+ /** fetch with an abort-based timeout so a hanging provider api doesn't block the response indefinitely */
228
+ export async function fetchWithTimeout(url, init, ms = 8000) {
229
+ const controller = new AbortController();
230
+ const timer = setTimeout(() => controller.abort(), ms);
231
+ try {
232
+ return await fetch(url, { ...init, signal: controller.signal });
233
+ }
234
+ finally {
235
+ clearTimeout(timer);
236
+ }
237
+ }
238
+ export async function fetchClaudeQuota(token) {
239
+ const resp = await fetchWithTimeout("https://api.anthropic.com/api/oauth/usage", {
240
+ headers: {
241
+ Authorization: `Bearer ${token}`,
242
+ "anthropic-beta": "oauth-2025-04-20",
243
+ },
244
+ });
245
+ if (!resp.ok)
246
+ throw new Error(`anthropic usage api returned ${resp.status}`);
247
+ const body = (await resp.json());
248
+ const windows = [];
249
+ if (body.five_hour != null) {
250
+ windows.push({
251
+ label: "Current session",
252
+ usedPercent: toPercent(body.five_hour.utilization),
253
+ resetsAt: body.five_hour.resets_at ?? null,
254
+ valueLabel: null,
255
+ detail: null,
256
+ });
257
+ }
258
+ if (body.seven_day != null) {
259
+ windows.push({
260
+ label: "Current week (all models)",
261
+ usedPercent: toPercent(body.seven_day.utilization),
262
+ resetsAt: body.seven_day.resets_at ?? null,
263
+ valueLabel: null,
264
+ detail: null,
265
+ });
266
+ }
267
+ if (body.seven_day_sonnet != null) {
268
+ windows.push({
269
+ label: "Current week (Sonnet only)",
270
+ usedPercent: toPercent(body.seven_day_sonnet.utilization),
271
+ resetsAt: body.seven_day_sonnet.resets_at ?? null,
272
+ valueLabel: null,
273
+ detail: null,
274
+ });
275
+ }
276
+ if (body.seven_day_opus != null) {
277
+ windows.push({
278
+ label: "Current week (Opus only)",
279
+ usedPercent: toPercent(body.seven_day_opus.utilization),
280
+ resetsAt: body.seven_day_opus.resets_at ?? null,
281
+ valueLabel: null,
282
+ detail: null,
283
+ });
284
+ }
285
+ if (body.extra_usage != null) {
286
+ windows.push({
287
+ label: "Extra usage",
288
+ usedPercent: body.extra_usage.is_enabled === false ? null : toPercent(body.extra_usage.utilization),
289
+ resetsAt: null,
290
+ valueLabel: body.extra_usage.is_enabled === false
291
+ ? "Not enabled"
292
+ : formatExtraUsageLabel(body.extra_usage),
293
+ detail: body.extra_usage.is_enabled === false
294
+ ? "Extra usage not enabled"
295
+ : "Monthly extra usage pool",
296
+ });
297
+ }
298
+ return windows;
299
+ }
300
+ function usageOutputLooksRelevant(text) {
301
+ const normalized = normalizeForLabelSearch(text);
302
+ return normalized.includes("currentsession")
303
+ || normalized.includes("currentweek")
304
+ || normalized.includes("loadingusage")
305
+ || normalized.includes("failedtoloadusagedata")
306
+ || normalized.includes("tokenexpired")
307
+ || normalized.includes("authenticationerror")
308
+ || normalized.includes("ratelimited");
309
+ }
310
+ function usageOutputLooksComplete(text) {
311
+ const normalized = normalizeForLabelSearch(text);
312
+ if (normalized.includes("failedtoloadusagedata")
313
+ || normalized.includes("tokenexpired")
314
+ || normalized.includes("authenticationerror")
315
+ || normalized.includes("ratelimited")) {
316
+ return true;
317
+ }
318
+ return normalized.includes("currentsession")
319
+ && (normalized.includes("currentweek") || normalized.includes("extrausage"))
320
+ && /[0-9]{1,3}(?:\.[0-9]+)?%/i.test(text);
321
+ }
322
+ function extractUsageError(text) {
323
+ const lower = text.toLowerCase();
324
+ const compact = lower.replace(/\s+/g, "");
325
+ if (lower.includes("token_expired") || lower.includes("token has expired")) {
326
+ return "Claude CLI token expired. Run `claude login` to refresh.";
327
+ }
328
+ if (lower.includes("authentication_error")) {
329
+ return "Claude CLI authentication error. Run `claude login`.";
330
+ }
331
+ if (lower.includes("rate_limit_error") || lower.includes("rate limited") || compact.includes("ratelimited")) {
332
+ return "Claude CLI usage endpoint is rate limited right now. Please try again later.";
333
+ }
334
+ if (lower.includes("failed to load usage data") || compact.includes("failedtoloadusagedata")) {
335
+ return "Claude CLI could not load usage data. Open the CLI and retry `/usage`.";
336
+ }
337
+ return null;
338
+ }
339
+ function percentFromLine(line) {
340
+ const match = line.match(/([0-9]{1,3}(?:\.[0-9]+)?)\s*%/i);
341
+ if (!match)
342
+ return null;
343
+ const rawValue = Number(match[1]);
344
+ if (!Number.isFinite(rawValue))
345
+ return null;
346
+ const clamped = Math.min(100, Math.max(0, rawValue));
347
+ const lower = line.toLowerCase();
348
+ if (lower.includes("remaining") || lower.includes("left") || lower.includes("available")) {
349
+ return Math.max(0, Math.min(100, Math.round(100 - clamped)));
350
+ }
351
+ return Math.round(clamped);
352
+ }
353
+ function isQuotaLabel(line) {
354
+ const normalized = normalizeForLabelSearch(line);
355
+ return normalized === "currentsession"
356
+ || normalized === "currentweekallmodels"
357
+ || normalized === "currentweeksonnetonly"
358
+ || normalized === "currentweeksonnet"
359
+ || normalized === "currentweekopusonly"
360
+ || normalized === "currentweekopus"
361
+ || normalized === "extrausage";
362
+ }
363
+ function canonicalQuotaLabel(line) {
364
+ switch (normalizeForLabelSearch(line)) {
365
+ case "currentsession":
366
+ return "Current session";
367
+ case "currentweekallmodels":
368
+ return "Current week (all models)";
369
+ case "currentweeksonnetonly":
370
+ case "currentweeksonnet":
371
+ return "Current week (Sonnet only)";
372
+ case "currentweekopusonly":
373
+ case "currentweekopus":
374
+ return "Current week (Opus only)";
375
+ case "extrausage":
376
+ return "Extra usage";
377
+ default:
378
+ return line;
379
+ }
380
+ }
381
+ function formatClaudeCliDetail(label, lines) {
382
+ const normalizedLabel = normalizeForLabelSearch(label);
383
+ if (normalizedLabel === "extrausage") {
384
+ const compact = lines.join(" ").replace(/\s+/g, "").toLowerCase();
385
+ if (compact.includes("extrausagenotenabled")) {
386
+ return "Extra usage not enabled • /extra-usage to enable";
387
+ }
388
+ const firstLine = lines.find((line) => line.trim().length > 0) ?? null;
389
+ return firstLine;
390
+ }
391
+ const resetLine = lines.find((line) => /^resets/i.test(line) || normalizeForLabelSearch(line).startsWith("resets"));
392
+ if (!resetLine)
393
+ return null;
394
+ return resetLine
395
+ .replace(/^Resets/i, "Resets ")
396
+ .replace(/([A-Z][a-z]{2})(\d)/g, "$1 $2")
397
+ .replace(/(\d)at(\d)/g, "$1 at $2")
398
+ .replace(/(am|pm)\(/gi, "$1 (")
399
+ .replace(/([A-Za-z])\(/g, "$1 (")
400
+ .replace(/\s+/g, " ")
401
+ .trim();
402
+ }
403
+ export function parseClaudeCliUsageText(text) {
404
+ const cleaned = trimToLatestUsagePanel(cleanTerminalText(text)) ?? cleanTerminalText(text);
405
+ const usageError = extractUsageError(cleaned);
406
+ if (usageError)
407
+ throw new Error(usageError);
408
+ const lines = cleaned
409
+ .split("\n")
410
+ .map((line) => line.trim())
411
+ .filter((line) => line.length > 0);
412
+ const sections = [];
413
+ let current = null;
414
+ for (const line of lines) {
415
+ if (isQuotaLabel(line)) {
416
+ if (current)
417
+ sections.push(current);
418
+ current = { label: canonicalQuotaLabel(line), lines: [] };
419
+ continue;
420
+ }
421
+ if (current)
422
+ current.lines.push(line);
423
+ }
424
+ if (current)
425
+ sections.push(current);
426
+ const windows = sections.map((section) => {
427
+ const usedPercent = section.lines.map(percentFromLine).find((value) => value != null) ?? null;
428
+ return {
429
+ label: section.label,
430
+ usedPercent,
431
+ resetsAt: null,
432
+ valueLabel: null,
433
+ detail: formatClaudeCliDetail(section.label, section.lines),
434
+ };
435
+ });
436
+ if (!windows.some((window) => normalizeForLabelSearch(window.label) === "currentsession")) {
437
+ throw new Error("Could not parse Claude CLI usage output.");
438
+ }
439
+ return windows;
440
+ }
441
+ function quoteForShell(value) {
442
+ return `'${value.replace(/'/g, `'\\''`)}'`;
443
+ }
444
+ function buildClaudeCliShellProbeCommand() {
445
+ const feed = "(sleep 2; printf '/usage\\r'; sleep 6; printf '\\033'; sleep 1; printf '\\003')";
446
+ const claudeCommand = "claude --tools \"\"";
447
+ if (process.platform === "darwin") {
448
+ return `${feed} | script -q /dev/null ${claudeCommand}`;
449
+ }
450
+ return `${feed} | script -q -e -f -c ${quoteForShell(claudeCommand)} /dev/null`;
451
+ }
452
+ export async function captureClaudeCliUsageText(timeoutMs = 12_000) {
453
+ const command = buildClaudeCliShellProbeCommand();
454
+ try {
455
+ const { stdout, stderr } = await execFileAsync("sh", ["-c", command], {
456
+ env: createClaudeQuotaEnv(),
457
+ timeout: timeoutMs,
458
+ maxBuffer: 8 * 1024 * 1024,
459
+ });
460
+ const output = `${stdout}${stderr}`;
461
+ const cleaned = cleanTerminalText(output);
462
+ if (usageOutputLooksComplete(cleaned))
463
+ return output;
464
+ throw new Error("Claude CLI usage probe ended before rendering usage.");
465
+ }
466
+ catch (error) {
467
+ const stdout = typeof error === "object" && error !== null && "stdout" in error && typeof error.stdout === "string"
468
+ ? error.stdout
469
+ : "";
470
+ const stderr = typeof error === "object" && error !== null && "stderr" in error && typeof error.stderr === "string"
471
+ ? error.stderr
472
+ : "";
473
+ const output = `${stdout}${stderr}`;
474
+ const cleaned = cleanTerminalText(output);
475
+ if (usageOutputLooksComplete(cleaned))
476
+ return output;
477
+ if (usageOutputLooksRelevant(cleaned)) {
478
+ throw new Error("Claude CLI usage probe ended before rendering usage.");
479
+ }
480
+ throw error instanceof Error ? error : new Error(String(error));
481
+ }
482
+ }
483
+ export async function fetchClaudeCliQuota() {
484
+ const rawText = await captureClaudeCliUsageText();
485
+ return parseClaudeCliUsageText(rawText);
486
+ }
487
+ function formatProviderError(source, error) {
488
+ const message = error instanceof Error ? error.message : String(error);
489
+ return `${source}: ${message}`;
490
+ }
491
+ export async function getQuotaWindows() {
492
+ if (process.env.CLAUDE_CODE_USE_BEDROCK === "1" ||
493
+ process.env.CLAUDE_CODE_USE_BEDROCK === "true" ||
494
+ hasNonEmptyProcessEnv("ANTHROPIC_BEDROCK_BASE_URL")) {
495
+ return { provider: "anthropic", source: "bedrock", ok: true, windows: [] };
496
+ }
497
+ const authStatus = await readClaudeAuthStatus();
498
+ const authDescription = describeClaudeSubscriptionAuth(authStatus);
499
+ const token = await readClaudeToken();
500
+ const errors = [];
501
+ if (token) {
502
+ try {
503
+ const windows = await fetchClaudeQuota(token);
504
+ return { provider: "anthropic", source: CLAUDE_USAGE_SOURCE_OAUTH, ok: true, windows };
505
+ }
506
+ catch (error) {
507
+ errors.push(formatProviderError("Anthropic OAuth usage", error));
508
+ }
509
+ }
510
+ try {
511
+ const windows = await fetchClaudeCliQuota();
512
+ return { provider: "anthropic", source: CLAUDE_USAGE_SOURCE_CLI, ok: true, windows };
513
+ }
514
+ catch (error) {
515
+ errors.push(formatProviderError("Claude CLI /usage", error));
516
+ }
517
+ if (hasNonEmptyProcessEnv("ANTHROPIC_API_KEY") && !authDescription) {
518
+ return {
519
+ provider: "anthropic",
520
+ ok: false,
521
+ error: errors[0]
522
+ ?? "ANTHROPIC_API_KEY is set and no local Claude subscription session is available for quota polling",
523
+ windows: [],
524
+ };
525
+ }
526
+ if (authDescription) {
527
+ return {
528
+ provider: "anthropic",
529
+ ok: false,
530
+ error: errors.length > 0
531
+ ? `${authDescription}, but quota polling failed (${errors.join("; ")})`
532
+ : `${authDescription}, but Paperclip could not load subscription quota data`,
533
+ windows: [],
534
+ };
535
+ }
536
+ return {
537
+ provider: "anthropic",
538
+ ok: false,
539
+ error: errors[0] ?? "no local claude auth token",
540
+ windows: [],
541
+ };
542
+ }
543
+ //# sourceMappingURL=quota.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quota.js","sourceRoot":"","sources":["../../src/server/quota.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=setup-token-characterization.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup-token-characterization.test.d.ts","sourceRoot":"","sources":["../../src/server/setup-token-characterization.test.ts"],"names":[],"mappings":""}