@rudderhq/agent-runtime-claude-local 0.1.0-canary.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 (64) hide show
  1. package/LICENSE +14 -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 +94 -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 +8 -0
  15. package/dist/index.d.ts.map +1 -0
  16. package/dist/index.js +37 -0
  17. package/dist/index.js.map +1 -0
  18. package/dist/server/execute.d.ts +18 -0
  19. package/dist/server/execute.d.ts.map +1 -0
  20. package/dist/server/execute.js +578 -0
  21. package/dist/server/execute.js.map +1 -0
  22. package/dist/server/index.d.ts +8 -0
  23. package/dist/server/index.d.ts.map +1 -0
  24. package/dist/server/index.js +57 -0
  25. package/dist/server/index.js.map +1 -0
  26. package/dist/server/parse.d.ts +22 -0
  27. package/dist/server/parse.d.ts.map +1 -0
  28. package/dist/server/parse.js +158 -0
  29. package/dist/server/parse.js.map +1 -0
  30. package/dist/server/quota.d.ts +20 -0
  31. package/dist/server/quota.d.ts.map +1 -0
  32. package/dist/server/quota.js +477 -0
  33. package/dist/server/quota.js.map +1 -0
  34. package/dist/server/skills.d.ts +8 -0
  35. package/dist/server/skills.d.ts.map +1 -0
  36. package/dist/server/skills.js +102 -0
  37. package/dist/server/skills.js.map +1 -0
  38. package/dist/server/test.d.ts +3 -0
  39. package/dist/server/test.d.ts.map +1 -0
  40. package/dist/server/test.js +201 -0
  41. package/dist/server/test.js.map +1 -0
  42. package/dist/ui/build-config.d.ts +3 -0
  43. package/dist/ui/build-config.d.ts.map +1 -0
  44. package/dist/ui/build-config.js +115 -0
  45. package/dist/ui/build-config.js.map +1 -0
  46. package/dist/ui/index.d.ts +3 -0
  47. package/dist/ui/index.d.ts.map +1 -0
  48. package/dist/ui/index.js +3 -0
  49. package/dist/ui/index.js.map +1 -0
  50. package/dist/ui/parse-stdout.d.ts +3 -0
  51. package/dist/ui/parse-stdout.d.ts.map +1 -0
  52. package/dist/ui/parse-stdout.js +149 -0
  53. package/dist/ui/parse-stdout.js.map +1 -0
  54. package/package.json +63 -0
  55. package/skills/para-memory-files/SKILL.md +114 -0
  56. package/skills/para-memory-files/references/schemas.md +35 -0
  57. package/skills/rudder/SKILL.md +265 -0
  58. package/skills/rudder/references/api-reference.md +253 -0
  59. package/skills/rudder/references/cli-reference.md +67 -0
  60. package/skills/rudder/references/organization-skills.md +155 -0
  61. package/skills/rudder-create-agent/SKILL.md +166 -0
  62. package/skills/rudder-create-agent/references/api-reference.md +172 -0
  63. package/skills/rudder-create-agent/references/cli-reference.md +126 -0
  64. package/skills/rudder-create-plugin/SKILL.md +103 -0
@@ -0,0 +1,477 @@
1
+ import { execFile } from "node:child_process";
2
+ import fs from "node:fs/promises";
3
+ import os from "node:os";
4
+ import path from "node:path";
5
+ import { promisify } from "node:util";
6
+ const execFileAsync = promisify(execFile);
7
+ const CLAUDE_USAGE_SOURCE_OAUTH = "anthropic-oauth";
8
+ const CLAUDE_USAGE_SOURCE_CLI = "claude-cli";
9
+ export function claudeConfigDir() {
10
+ const fromEnv = process.env.CLAUDE_CONFIG_DIR;
11
+ if (typeof fromEnv === "string" && fromEnv.trim().length > 0)
12
+ return fromEnv.trim();
13
+ return path.join(os.homedir(), ".claude");
14
+ }
15
+ function hasNonEmptyProcessEnv(key) {
16
+ const value = process.env[key];
17
+ return typeof value === "string" && value.trim().length > 0;
18
+ }
19
+ function createClaudeQuotaEnv() {
20
+ const env = {};
21
+ for (const [key, value] of Object.entries(process.env)) {
22
+ if (typeof value !== "string")
23
+ continue;
24
+ if (key.startsWith("ANTHROPIC_"))
25
+ continue;
26
+ env[key] = value;
27
+ }
28
+ return env;
29
+ }
30
+ function stripBackspaces(text) {
31
+ let out = "";
32
+ for (const char of text) {
33
+ if (char === "\b") {
34
+ out = out.slice(0, -1);
35
+ }
36
+ else {
37
+ out += char;
38
+ }
39
+ }
40
+ return out;
41
+ }
42
+ function stripAnsi(text) {
43
+ return text
44
+ .replace(/\u001B\][^\u0007]*(?:\u0007|\u001B\\)/g, "")
45
+ .replace(/\u001B(?:[@-Z\\-_]|\[[0-?]*[ -/]*[@-~])/g, "");
46
+ }
47
+ function cleanTerminalText(text) {
48
+ return stripAnsi(stripBackspaces(text))
49
+ .replace(/\u0000/g, "")
50
+ .replace(/\r/g, "\n");
51
+ }
52
+ function normalizeForLabelSearch(text) {
53
+ return text.toLowerCase().replace(/[^a-z0-9]+/g, "");
54
+ }
55
+ function trimToLatestUsagePanel(text) {
56
+ const lower = text.toLowerCase();
57
+ const settingsIndex = lower.lastIndexOf("settings:");
58
+ if (settingsIndex < 0)
59
+ return null;
60
+ let tail = text.slice(settingsIndex);
61
+ const tailLower = tail.toLowerCase();
62
+ if (!tailLower.includes("usage"))
63
+ return null;
64
+ if (!tailLower.includes("current session") && !tailLower.includes("loading usage"))
65
+ return null;
66
+ const stopMarkers = [
67
+ "status dialog dismissed",
68
+ "checking for updates",
69
+ "press ctrl-c again to exit",
70
+ ];
71
+ let stopIndex = -1;
72
+ for (const marker of stopMarkers) {
73
+ const markerIndex = tailLower.indexOf(marker);
74
+ if (markerIndex >= 0 && (stopIndex === -1 || markerIndex < stopIndex)) {
75
+ stopIndex = markerIndex;
76
+ }
77
+ }
78
+ if (stopIndex >= 0) {
79
+ tail = tail.slice(0, stopIndex);
80
+ }
81
+ return tail;
82
+ }
83
+ async function readClaudeTokenFromFile(credPath) {
84
+ let raw;
85
+ try {
86
+ raw = await fs.readFile(credPath, "utf8");
87
+ }
88
+ catch {
89
+ return null;
90
+ }
91
+ let parsed;
92
+ try {
93
+ parsed = JSON.parse(raw);
94
+ }
95
+ catch {
96
+ return null;
97
+ }
98
+ if (typeof parsed !== "object" || parsed === null)
99
+ return null;
100
+ const obj = parsed;
101
+ const oauth = obj["claudeAiOauth"];
102
+ if (typeof oauth !== "object" || oauth === null)
103
+ return null;
104
+ const token = oauth["accessToken"];
105
+ return typeof token === "string" && token.length > 0 ? token : null;
106
+ }
107
+ export async function readClaudeAuthStatus() {
108
+ try {
109
+ const { stdout } = await execFileAsync("claude", ["auth", "status"], {
110
+ env: process.env,
111
+ timeout: 5_000,
112
+ maxBuffer: 1024 * 1024,
113
+ });
114
+ const parsed = JSON.parse(stdout);
115
+ return {
116
+ loggedIn: parsed.loggedIn === true,
117
+ authMethod: typeof parsed.authMethod === "string" ? parsed.authMethod : null,
118
+ subscriptionType: typeof parsed.subscriptionType === "string" ? parsed.subscriptionType : null,
119
+ };
120
+ }
121
+ catch {
122
+ return null;
123
+ }
124
+ }
125
+ function describeClaudeSubscriptionAuth(status) {
126
+ if (!status?.loggedIn || status.authMethod !== "claude.ai")
127
+ return null;
128
+ return status.subscriptionType
129
+ ? `Claude is logged in via claude.ai (${status.subscriptionType})`
130
+ : "Claude is logged in via claude.ai";
131
+ }
132
+ export async function readClaudeToken() {
133
+ const configDir = claudeConfigDir();
134
+ for (const filename of [".credentials.json", "credentials.json"]) {
135
+ const token = await readClaudeTokenFromFile(path.join(configDir, filename));
136
+ if (token)
137
+ return token;
138
+ }
139
+ return null;
140
+ }
141
+ function formatCurrencyAmount(value, currency) {
142
+ const code = typeof currency === "string" && currency.trim().length > 0 ? currency.trim().toUpperCase() : "USD";
143
+ return new Intl.NumberFormat("en-US", {
144
+ style: "currency",
145
+ currency: code,
146
+ maximumFractionDigits: 2,
147
+ }).format(value);
148
+ }
149
+ function formatExtraUsageLabel(extraUsage) {
150
+ const monthlyLimit = extraUsage.monthly_limit;
151
+ const usedCredits = extraUsage.used_credits;
152
+ if (typeof monthlyLimit !== "number" ||
153
+ !Number.isFinite(monthlyLimit) ||
154
+ typeof usedCredits !== "number" ||
155
+ !Number.isFinite(usedCredits)) {
156
+ return null;
157
+ }
158
+ return `${formatCurrencyAmount(usedCredits, extraUsage.currency)} / ${formatCurrencyAmount(monthlyLimit, extraUsage.currency)}`;
159
+ }
160
+ /** Convert a 0-1 utilization fraction to a 0-100 integer percent. Returns null for null/undefined input. */
161
+ export function toPercent(utilization) {
162
+ if (utilization == null)
163
+ return null;
164
+ return Math.min(100, Math.round(utilization * 100));
165
+ }
166
+ /** fetch with an abort-based timeout so a hanging provider api doesn't block the response indefinitely */
167
+ export async function fetchWithTimeout(url, init, ms = 8000) {
168
+ const controller = new AbortController();
169
+ const timer = setTimeout(() => controller.abort(), ms);
170
+ try {
171
+ return await fetch(url, { ...init, signal: controller.signal });
172
+ }
173
+ finally {
174
+ clearTimeout(timer);
175
+ }
176
+ }
177
+ export async function fetchClaudeQuota(token) {
178
+ const resp = await fetchWithTimeout("https://api.anthropic.com/api/oauth/usage", {
179
+ headers: {
180
+ Authorization: `Bearer ${token}`,
181
+ "anthropic-beta": "oauth-2025-04-20",
182
+ },
183
+ });
184
+ if (!resp.ok)
185
+ throw new Error(`anthropic usage api returned ${resp.status}`);
186
+ const body = (await resp.json());
187
+ const windows = [];
188
+ if (body.five_hour != null) {
189
+ windows.push({
190
+ label: "Current session",
191
+ usedPercent: toPercent(body.five_hour.utilization),
192
+ resetsAt: body.five_hour.resets_at ?? null,
193
+ valueLabel: null,
194
+ detail: null,
195
+ });
196
+ }
197
+ if (body.seven_day != null) {
198
+ windows.push({
199
+ label: "Current week (all models)",
200
+ usedPercent: toPercent(body.seven_day.utilization),
201
+ resetsAt: body.seven_day.resets_at ?? null,
202
+ valueLabel: null,
203
+ detail: null,
204
+ });
205
+ }
206
+ if (body.seven_day_sonnet != null) {
207
+ windows.push({
208
+ label: "Current week (Sonnet only)",
209
+ usedPercent: toPercent(body.seven_day_sonnet.utilization),
210
+ resetsAt: body.seven_day_sonnet.resets_at ?? null,
211
+ valueLabel: null,
212
+ detail: null,
213
+ });
214
+ }
215
+ if (body.seven_day_opus != null) {
216
+ windows.push({
217
+ label: "Current week (Opus only)",
218
+ usedPercent: toPercent(body.seven_day_opus.utilization),
219
+ resetsAt: body.seven_day_opus.resets_at ?? null,
220
+ valueLabel: null,
221
+ detail: null,
222
+ });
223
+ }
224
+ if (body.extra_usage != null) {
225
+ windows.push({
226
+ label: "Extra usage",
227
+ usedPercent: body.extra_usage.is_enabled === false ? null : toPercent(body.extra_usage.utilization),
228
+ resetsAt: null,
229
+ valueLabel: body.extra_usage.is_enabled === false
230
+ ? "Not enabled"
231
+ : formatExtraUsageLabel(body.extra_usage),
232
+ detail: body.extra_usage.is_enabled === false
233
+ ? "Extra usage not enabled"
234
+ : "Monthly extra usage pool",
235
+ });
236
+ }
237
+ return windows;
238
+ }
239
+ function usageOutputLooksRelevant(text) {
240
+ const normalized = normalizeForLabelSearch(text);
241
+ return normalized.includes("currentsession")
242
+ || normalized.includes("currentweek")
243
+ || normalized.includes("loadingusage")
244
+ || normalized.includes("failedtoloadusagedata")
245
+ || normalized.includes("tokenexpired")
246
+ || normalized.includes("authenticationerror")
247
+ || normalized.includes("ratelimited");
248
+ }
249
+ function usageOutputLooksComplete(text) {
250
+ const normalized = normalizeForLabelSearch(text);
251
+ if (normalized.includes("failedtoloadusagedata")
252
+ || normalized.includes("tokenexpired")
253
+ || normalized.includes("authenticationerror")
254
+ || normalized.includes("ratelimited")) {
255
+ return true;
256
+ }
257
+ return normalized.includes("currentsession")
258
+ && (normalized.includes("currentweek") || normalized.includes("extrausage"))
259
+ && /[0-9]{1,3}(?:\.[0-9]+)?%/i.test(text);
260
+ }
261
+ function extractUsageError(text) {
262
+ const lower = text.toLowerCase();
263
+ const compact = lower.replace(/\s+/g, "");
264
+ if (lower.includes("token_expired") || lower.includes("token has expired")) {
265
+ return "Claude CLI token expired. Run `claude login` to refresh.";
266
+ }
267
+ if (lower.includes("authentication_error")) {
268
+ return "Claude CLI authentication error. Run `claude login`.";
269
+ }
270
+ if (lower.includes("rate_limit_error") || lower.includes("rate limited") || compact.includes("ratelimited")) {
271
+ return "Claude CLI usage endpoint is rate limited right now. Please try again later.";
272
+ }
273
+ if (lower.includes("failed to load usage data") || compact.includes("failedtoloadusagedata")) {
274
+ return "Claude CLI could not load usage data. Open the CLI and retry `/usage`.";
275
+ }
276
+ return null;
277
+ }
278
+ function percentFromLine(line) {
279
+ const match = line.match(/([0-9]{1,3}(?:\.[0-9]+)?)\s*%/i);
280
+ if (!match)
281
+ return null;
282
+ const rawValue = Number(match[1]);
283
+ if (!Number.isFinite(rawValue))
284
+ return null;
285
+ const clamped = Math.min(100, Math.max(0, rawValue));
286
+ const lower = line.toLowerCase();
287
+ if (lower.includes("remaining") || lower.includes("left") || lower.includes("available")) {
288
+ return Math.max(0, Math.min(100, Math.round(100 - clamped)));
289
+ }
290
+ return Math.round(clamped);
291
+ }
292
+ function isQuotaLabel(line) {
293
+ const normalized = normalizeForLabelSearch(line);
294
+ return normalized === "currentsession"
295
+ || normalized === "currentweekallmodels"
296
+ || normalized === "currentweeksonnetonly"
297
+ || normalized === "currentweeksonnet"
298
+ || normalized === "currentweekopusonly"
299
+ || normalized === "currentweekopus"
300
+ || normalized === "extrausage";
301
+ }
302
+ function canonicalQuotaLabel(line) {
303
+ switch (normalizeForLabelSearch(line)) {
304
+ case "currentsession":
305
+ return "Current session";
306
+ case "currentweekallmodels":
307
+ return "Current week (all models)";
308
+ case "currentweeksonnetonly":
309
+ case "currentweeksonnet":
310
+ return "Current week (Sonnet only)";
311
+ case "currentweekopusonly":
312
+ case "currentweekopus":
313
+ return "Current week (Opus only)";
314
+ case "extrausage":
315
+ return "Extra usage";
316
+ default:
317
+ return line;
318
+ }
319
+ }
320
+ function formatClaudeCliDetail(label, lines) {
321
+ const normalizedLabel = normalizeForLabelSearch(label);
322
+ if (normalizedLabel === "extrausage") {
323
+ const compact = lines.join(" ").replace(/\s+/g, "").toLowerCase();
324
+ if (compact.includes("extrausagenotenabled")) {
325
+ return "Extra usage not enabled • /extra-usage to enable";
326
+ }
327
+ const firstLine = lines.find((line) => line.trim().length > 0) ?? null;
328
+ return firstLine;
329
+ }
330
+ const resetLine = lines.find((line) => /^resets/i.test(line) || normalizeForLabelSearch(line).startsWith("resets"));
331
+ if (!resetLine)
332
+ return null;
333
+ return resetLine
334
+ .replace(/^Resets/i, "Resets ")
335
+ .replace(/([A-Z][a-z]{2})(\d)/g, "$1 $2")
336
+ .replace(/(\d)at(\d)/g, "$1 at $2")
337
+ .replace(/(am|pm)\(/gi, "$1 (")
338
+ .replace(/([A-Za-z])\(/g, "$1 (")
339
+ .replace(/\s+/g, " ")
340
+ .trim();
341
+ }
342
+ export function parseClaudeCliUsageText(text) {
343
+ const cleaned = trimToLatestUsagePanel(cleanTerminalText(text)) ?? cleanTerminalText(text);
344
+ const usageError = extractUsageError(cleaned);
345
+ if (usageError)
346
+ throw new Error(usageError);
347
+ const lines = cleaned
348
+ .split("\n")
349
+ .map((line) => line.trim())
350
+ .filter((line) => line.length > 0);
351
+ const sections = [];
352
+ let current = null;
353
+ for (const line of lines) {
354
+ if (isQuotaLabel(line)) {
355
+ if (current)
356
+ sections.push(current);
357
+ current = { label: canonicalQuotaLabel(line), lines: [] };
358
+ continue;
359
+ }
360
+ if (current)
361
+ current.lines.push(line);
362
+ }
363
+ if (current)
364
+ sections.push(current);
365
+ const windows = sections.map((section) => {
366
+ const usedPercent = section.lines.map(percentFromLine).find((value) => value != null) ?? null;
367
+ return {
368
+ label: section.label,
369
+ usedPercent,
370
+ resetsAt: null,
371
+ valueLabel: null,
372
+ detail: formatClaudeCliDetail(section.label, section.lines),
373
+ };
374
+ });
375
+ if (!windows.some((window) => normalizeForLabelSearch(window.label) === "currentsession")) {
376
+ throw new Error("Could not parse Claude CLI usage output.");
377
+ }
378
+ return windows;
379
+ }
380
+ function quoteForShell(value) {
381
+ return `'${value.replace(/'/g, `'\\''`)}'`;
382
+ }
383
+ function buildClaudeCliShellProbeCommand() {
384
+ const feed = "(sleep 2; printf '/usage\\r'; sleep 6; printf '\\033'; sleep 1; printf '\\003')";
385
+ const claudeCommand = "claude --tools \"\"";
386
+ if (process.platform === "darwin") {
387
+ return `${feed} | script -q /dev/null ${claudeCommand}`;
388
+ }
389
+ return `${feed} | script -q -e -f -c ${quoteForShell(claudeCommand)} /dev/null`;
390
+ }
391
+ export async function captureClaudeCliUsageText(timeoutMs = 12_000) {
392
+ const command = buildClaudeCliShellProbeCommand();
393
+ try {
394
+ const { stdout, stderr } = await execFileAsync("sh", ["-c", command], {
395
+ env: createClaudeQuotaEnv(),
396
+ timeout: timeoutMs,
397
+ maxBuffer: 8 * 1024 * 1024,
398
+ });
399
+ const output = `${stdout}${stderr}`;
400
+ const cleaned = cleanTerminalText(output);
401
+ if (usageOutputLooksComplete(cleaned))
402
+ return output;
403
+ throw new Error("Claude CLI usage probe ended before rendering usage.");
404
+ }
405
+ catch (error) {
406
+ const stdout = typeof error === "object" && error !== null && "stdout" in error && typeof error.stdout === "string"
407
+ ? error.stdout
408
+ : "";
409
+ const stderr = typeof error === "object" && error !== null && "stderr" in error && typeof error.stderr === "string"
410
+ ? error.stderr
411
+ : "";
412
+ const output = `${stdout}${stderr}`;
413
+ const cleaned = cleanTerminalText(output);
414
+ if (usageOutputLooksComplete(cleaned))
415
+ return output;
416
+ if (usageOutputLooksRelevant(cleaned)) {
417
+ throw new Error("Claude CLI usage probe ended before rendering usage.");
418
+ }
419
+ throw error instanceof Error ? error : new Error(String(error));
420
+ }
421
+ }
422
+ export async function fetchClaudeCliQuota() {
423
+ const rawText = await captureClaudeCliUsageText();
424
+ return parseClaudeCliUsageText(rawText);
425
+ }
426
+ function formatProviderError(source, error) {
427
+ const message = error instanceof Error ? error.message : String(error);
428
+ return `${source}: ${message}`;
429
+ }
430
+ export async function getQuotaWindows() {
431
+ const authStatus = await readClaudeAuthStatus();
432
+ const authDescription = describeClaudeSubscriptionAuth(authStatus);
433
+ const token = await readClaudeToken();
434
+ const errors = [];
435
+ if (token) {
436
+ try {
437
+ const windows = await fetchClaudeQuota(token);
438
+ return { provider: "anthropic", source: CLAUDE_USAGE_SOURCE_OAUTH, ok: true, windows };
439
+ }
440
+ catch (error) {
441
+ errors.push(formatProviderError("Anthropic OAuth usage", error));
442
+ }
443
+ }
444
+ try {
445
+ const windows = await fetchClaudeCliQuota();
446
+ return { provider: "anthropic", source: CLAUDE_USAGE_SOURCE_CLI, ok: true, windows };
447
+ }
448
+ catch (error) {
449
+ errors.push(formatProviderError("Claude CLI /usage", error));
450
+ }
451
+ if (hasNonEmptyProcessEnv("ANTHROPIC_API_KEY") && !authDescription) {
452
+ return {
453
+ provider: "anthropic",
454
+ ok: false,
455
+ error: errors[0]
456
+ ?? "ANTHROPIC_API_KEY is set and no local Claude subscription session is available for quota polling",
457
+ windows: [],
458
+ };
459
+ }
460
+ if (authDescription) {
461
+ return {
462
+ provider: "anthropic",
463
+ ok: false,
464
+ error: errors.length > 0
465
+ ? `${authDescription}, but quota polling failed (${errors.join("; ")})`
466
+ : `${authDescription}, but Rudder could not load subscription quota data`,
467
+ windows: [],
468
+ };
469
+ }
470
+ return {
471
+ provider: "anthropic",
472
+ ok: false,
473
+ error: errors[0] ?? "no local claude auth token",
474
+ windows: [],
475
+ };
476
+ }
477
+ //# 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,8 @@
1
+ import type { AgentRuntimeSkillContext, AgentRuntimeSkillSnapshot } from "@rudderhq/agent-runtime-utils";
2
+ export declare function resolveClaudeSkillsHome(config: Record<string, unknown>): string;
3
+ export declare function listClaudeSkills(ctx: AgentRuntimeSkillContext): Promise<AgentRuntimeSkillSnapshot>;
4
+ export declare function syncClaudeSkills(ctx: AgentRuntimeSkillContext, _desiredSkills: string[]): Promise<AgentRuntimeSkillSnapshot>;
5
+ export declare function resolveClaudeDesiredSkillNames(config: Record<string, unknown>, availableEntries: Array<{
6
+ key: string;
7
+ }>): string[];
8
+ //# sourceMappingURL=skills.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../src/server/skills.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,wBAAwB,EAExB,yBAAyB,EAC1B,MAAM,+BAA+B,CAAC;AAcvC,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,UAQtE;AAmFD,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,wBAAwB,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAExG;AAED,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,wBAAwB,EAC7B,cAAc,EAAE,MAAM,EAAE,GACvB,OAAO,CAAC,yBAAyB,CAAC,CAEpC;AAED,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,gBAAgB,EAAE,KAAK,CAAC;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,YAGzC"}
@@ -0,0 +1,102 @@
1
+ import os from "node:os";
2
+ import path from "node:path";
3
+ import { fileURLToPath } from "node:url";
4
+ import { readRudderRuntimeSkillEntries, readInstalledSkillTargets, readSkillMetadataFromPath, resolveRudderDesiredSkillNames, } from "@rudderhq/agent-runtime-utils/server-utils";
5
+ const __moduleDir = path.dirname(fileURLToPath(import.meta.url));
6
+ function asString(value) {
7
+ return typeof value === "string" && value.trim().length > 0 ? value.trim() : null;
8
+ }
9
+ export function resolveClaudeSkillsHome(config) {
10
+ const env = typeof config.env === "object" && config.env !== null && !Array.isArray(config.env)
11
+ ? config.env
12
+ : {};
13
+ const configuredHome = asString(env.HOME);
14
+ const home = configuredHome ? path.resolve(configuredHome) : os.homedir();
15
+ return path.join(home, ".claude", "skills");
16
+ }
17
+ async function buildClaudeSkillSnapshot(config) {
18
+ const availableEntries = await readRudderRuntimeSkillEntries(config, __moduleDir);
19
+ const availableByKey = new Map(availableEntries.map((entry) => [entry.key, entry]));
20
+ const availableRuntimeNames = new Set(availableEntries.map((entry) => entry.runtimeName));
21
+ const desiredSkills = resolveRudderDesiredSkillNames(config, availableEntries);
22
+ const desiredSet = new Set(desiredSkills);
23
+ const skillsHome = resolveClaudeSkillsHome(config);
24
+ const installed = await readInstalledSkillTargets(skillsHome);
25
+ const entries = availableEntries.map((entry) => ({
26
+ key: entry.key,
27
+ runtimeName: entry.runtimeName,
28
+ description: entry.description ?? null,
29
+ desired: desiredSet.has(entry.key),
30
+ managed: true,
31
+ state: desiredSet.has(entry.key) ? "configured" : "available",
32
+ origin: "organization_managed",
33
+ readOnly: false,
34
+ sourcePath: entry.source,
35
+ targetPath: null,
36
+ detail: desiredSet.has(entry.key)
37
+ ? "Will be mounted into the ephemeral Claude skill directory on the next run."
38
+ : null,
39
+ }));
40
+ const warnings = [];
41
+ const externalInstalled = new Map(Array.from(installed.entries()).filter(([name]) => !availableRuntimeNames.has(name)));
42
+ for (const [name, installedEntry] of externalInstalled.entries()) {
43
+ const metadata = await readSkillMetadataFromPath(installedEntry.targetPath ?? path.join(skillsHome, name));
44
+ const desired = desiredSet.has(name);
45
+ entries.push({
46
+ key: name,
47
+ runtimeName: metadata.name ?? name,
48
+ description: metadata.description,
49
+ desired,
50
+ managed: false,
51
+ state: desired ? "configured" : "external",
52
+ origin: "user_installed",
53
+ originLabel: "User-installed",
54
+ locationLabel: "~/.claude/skills",
55
+ readOnly: false,
56
+ sourcePath: installedEntry.targetPath ?? path.join(skillsHome, name),
57
+ targetPath: installedEntry.targetPath ?? path.join(skillsHome, name),
58
+ detail: desired
59
+ ? "Enabled for this agent. Rudder will mount this user-installed Claude skill on the next run."
60
+ : "Installed outside Rudder management in the Claude skills home.",
61
+ });
62
+ }
63
+ for (const desiredSkill of desiredSkills) {
64
+ if (availableByKey.has(desiredSkill))
65
+ continue;
66
+ if (externalInstalled.has(desiredSkill))
67
+ continue;
68
+ warnings.push(`Desired skill "${desiredSkill}" is not available from the Rudder skills directory.`);
69
+ entries.push({
70
+ key: desiredSkill,
71
+ runtimeName: null,
72
+ desired: true,
73
+ managed: true,
74
+ state: "missing",
75
+ origin: "external_unknown",
76
+ originLabel: "External or unavailable",
77
+ readOnly: false,
78
+ sourcePath: undefined,
79
+ targetPath: undefined,
80
+ detail: "Rudder cannot find this skill in the local runtime skills directory.",
81
+ });
82
+ }
83
+ entries.sort((left, right) => left.key.localeCompare(right.key));
84
+ return {
85
+ agentRuntimeType: "claude_local",
86
+ supported: true,
87
+ mode: "ephemeral",
88
+ desiredSkills,
89
+ entries,
90
+ warnings,
91
+ };
92
+ }
93
+ export async function listClaudeSkills(ctx) {
94
+ return buildClaudeSkillSnapshot(ctx.config);
95
+ }
96
+ export async function syncClaudeSkills(ctx, _desiredSkills) {
97
+ return buildClaudeSkillSnapshot(ctx.config);
98
+ }
99
+ export function resolveClaudeDesiredSkillNames(config, availableEntries) {
100
+ return resolveRudderDesiredSkillNames(config, availableEntries);
101
+ }
102
+ //# sourceMappingURL=skills.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/server/skills.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAMzC,OAAO,EACL,6BAA6B,EAC7B,yBAAyB,EACzB,yBAAyB,EACzB,8BAA8B,GAC/B,MAAM,4CAA4C,CAAC;AAEpD,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAEjE,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACpF,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,MAA+B;IACrE,MAAM,GAAG,GACP,OAAO,MAAM,CAAC,GAAG,KAAK,QAAQ,IAAI,MAAM,CAAC,GAAG,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC;QACjF,CAAC,CAAE,MAAM,CAAC,GAA+B;QACzC,CAAC,CAAC,EAAE,CAAC;IACT,MAAM,cAAc,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC1C,MAAM,IAAI,GAAG,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC;IAC1E,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;AAC9C,CAAC;AAED,KAAK,UAAU,wBAAwB,CAAC,MAA+B;IACrE,MAAM,gBAAgB,GAAG,MAAM,6BAA6B,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAClF,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IACpF,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;IAC1F,MAAM,aAAa,GAAG,8BAA8B,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAC/E,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,CAAC;IAC1C,MAAM,UAAU,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAC;IACnD,MAAM,SAAS,GAAG,MAAM,yBAAyB,CAAC,UAAU,CAAC,CAAC;IAC9D,MAAM,OAAO,GAA6B,gBAAgB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACzE,GAAG,EAAE,KAAK,CAAC,GAAG;QACd,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,IAAI;QACtC,OAAO,EAAE,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;QAClC,OAAO,EAAE,IAAI;QACb,KAAK,EAAE,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,WAAW;QAC7D,MAAM,EAAE,sBAAsB;QAC9B,QAAQ,EAAE,KAAK;QACf,UAAU,EAAE,KAAK,CAAC,MAAM;QACxB,UAAU,EAAE,IAAI;QAChB,MAAM,EAAE,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;YAC/B,CAAC,CAAC,4EAA4E;YAC9E,CAAC,CAAC,IAAI;KACT,CAAC,CAAC,CAAC;IACJ,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAC/B,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CACrF,CAAC;IAEF,KAAK,MAAM,CAAC,IAAI,EAAE,cAAc,CAAC,IAAI,iBAAiB,CAAC,OAAO,EAAE,EAAE,CAAC;QACjE,MAAM,QAAQ,GAAG,MAAM,yBAAyB,CAAC,cAAc,CAAC,UAAU,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC;QAC3G,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACrC,OAAO,CAAC,IAAI,CAAC;YACX,GAAG,EAAE,IAAI;YACT,WAAW,EAAE,QAAQ,CAAC,IAAI,IAAI,IAAI;YAClC,WAAW,EAAE,QAAQ,CAAC,WAAW;YACjC,OAAO;YACP,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU;YAC1C,MAAM,EAAE,gBAAgB;YACxB,WAAW,EAAE,gBAAgB;YAC7B,aAAa,EAAE,kBAAkB;YACjC,QAAQ,EAAE,KAAK;YACf,UAAU,EAAE,cAAc,CAAC,UAAU,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC;YACpE,UAAU,EAAE,cAAc,CAAC,UAAU,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC;YACpE,MAAM,EAAE,OAAO;gBACb,CAAC,CAAC,6FAA6F;gBAC/F,CAAC,CAAC,gEAAgE;SACrE,CAAC,CAAC;IACL,CAAC;IAED,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE,CAAC;QACzC,IAAI,cAAc,CAAC,GAAG,CAAC,YAAY,CAAC;YAAE,SAAS;QAC/C,IAAI,iBAAiB,CAAC,GAAG,CAAC,YAAY,CAAC;YAAE,SAAS;QAClD,QAAQ,CAAC,IAAI,CAAC,kBAAkB,YAAY,sDAAsD,CAAC,CAAC;QACpG,OAAO,CAAC,IAAI,CAAC;YACX,GAAG,EAAE,YAAY;YACjB,WAAW,EAAE,IAAI;YACjB,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,SAAS;YAChB,MAAM,EAAE,kBAAkB;YAC1B,WAAW,EAAE,yBAAyB;YACtC,QAAQ,EAAE,KAAK;YACf,UAAU,EAAE,SAAS;YACrB,UAAU,EAAE,SAAS;YACrB,MAAM,EAAE,sEAAsE;SAC/E,CAAC,CAAC;IACL,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IAEjE,OAAO;QACL,gBAAgB,EAAE,cAAc;QAChC,SAAS,EAAE,IAAI;QACf,IAAI,EAAE,WAAW;QACjB,aAAa;QACb,OAAO;QACP,QAAQ;KACT,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,GAA6B;IAClE,OAAO,wBAAwB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,GAA6B,EAC7B,cAAwB;IAExB,OAAO,wBAAwB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,8BAA8B,CAC5C,MAA+B,EAC/B,gBAAwC;IAExC,OAAO,8BAA8B,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;AAClE,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { AgentRuntimeEnvironmentTestContext, AgentRuntimeEnvironmentTestResult } from "@rudderhq/agent-runtime-utils";
2
+ export declare function testEnvironment(ctx: AgentRuntimeEnvironmentTestContext): Promise<AgentRuntimeEnvironmentTestResult>;
3
+ //# sourceMappingURL=test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../src/server/test.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,kCAAkC,EAClC,iCAAiC,EAClC,MAAM,+BAA+B,CAAC;AA+CvC,wBAAsB,eAAe,CACnC,GAAG,EAAE,kCAAkC,GACtC,OAAO,CAAC,iCAAiC,CAAC,CAyK5C"}