@claudeskill/cli 0.1.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 (65) hide show
  1. package/dist/api.d.ts +148 -0
  2. package/dist/api.d.ts.map +1 -0
  3. package/dist/api.js +218 -0
  4. package/dist/api.js.map +1 -0
  5. package/dist/commands/checkout.d.ts +8 -0
  6. package/dist/commands/checkout.d.ts.map +1 -0
  7. package/dist/commands/checkout.js +134 -0
  8. package/dist/commands/checkout.js.map +1 -0
  9. package/dist/commands/diff.d.ts +8 -0
  10. package/dist/commands/diff.d.ts.map +1 -0
  11. package/dist/commands/diff.js +156 -0
  12. package/dist/commands/diff.js.map +1 -0
  13. package/dist/commands/list.d.ts +14 -0
  14. package/dist/commands/list.d.ts.map +1 -0
  15. package/dist/commands/list.js +251 -0
  16. package/dist/commands/list.js.map +1 -0
  17. package/dist/commands/log.d.ts +8 -0
  18. package/dist/commands/log.d.ts.map +1 -0
  19. package/dist/commands/log.js +74 -0
  20. package/dist/commands/log.js.map +1 -0
  21. package/dist/commands/login.d.ts +8 -0
  22. package/dist/commands/login.d.ts.map +1 -0
  23. package/dist/commands/login.js +201 -0
  24. package/dist/commands/login.js.map +1 -0
  25. package/dist/commands/logout.d.ts +8 -0
  26. package/dist/commands/logout.d.ts.map +1 -0
  27. package/dist/commands/logout.js +33 -0
  28. package/dist/commands/logout.js.map +1 -0
  29. package/dist/commands/pull.d.ts +11 -0
  30. package/dist/commands/pull.d.ts.map +1 -0
  31. package/dist/commands/pull.js +123 -0
  32. package/dist/commands/pull.js.map +1 -0
  33. package/dist/commands/push.d.ts +12 -0
  34. package/dist/commands/push.d.ts.map +1 -0
  35. package/dist/commands/push.js +128 -0
  36. package/dist/commands/push.js.map +1 -0
  37. package/dist/commands/status.d.ts +8 -0
  38. package/dist/commands/status.d.ts.map +1 -0
  39. package/dist/commands/status.js +104 -0
  40. package/dist/commands/status.js.map +1 -0
  41. package/dist/config.d.ts +25 -0
  42. package/dist/config.d.ts.map +1 -0
  43. package/dist/config.js +54 -0
  44. package/dist/config.js.map +1 -0
  45. package/dist/credentials.d.ts +24 -0
  46. package/dist/credentials.d.ts.map +1 -0
  47. package/dist/credentials.js +54 -0
  48. package/dist/credentials.js.map +1 -0
  49. package/dist/index.d.ts +8 -0
  50. package/dist/index.d.ts.map +1 -0
  51. package/dist/index.js +166 -0
  52. package/dist/index.js.map +1 -0
  53. package/dist/menu.d.ts +8 -0
  54. package/dist/menu.d.ts.map +1 -0
  55. package/dist/menu.js +130 -0
  56. package/dist/menu.js.map +1 -0
  57. package/dist/onboarding.d.ts +8 -0
  58. package/dist/onboarding.d.ts.map +1 -0
  59. package/dist/onboarding.js +252 -0
  60. package/dist/onboarding.js.map +1 -0
  61. package/dist/sync.d.ts +83 -0
  62. package/dist/sync.d.ts.map +1 -0
  63. package/dist/sync.js +294 -0
  64. package/dist/sync.js.map +1 -0
  65. package/package.json +47 -0
@@ -0,0 +1,156 @@
1
+ /**
2
+ * Diff command - compare two versions of a skill
3
+ */
4
+ import * as p from "@clack/prompts";
5
+ import { loadConfig } from "../config.js";
6
+ import { loadCredentials } from "../credentials.js";
7
+ import { getMasterKey, decryptSkill } from "../sync.js";
8
+ import * as api from "../api.js";
9
+ /**
10
+ * Simple line-by-line diff
11
+ */
12
+ const simpleDiff = (oldLines, newLines) => {
13
+ const output = [];
14
+ const maxLen = Math.max(oldLines.length, newLines.length);
15
+ let i = 0;
16
+ let j = 0;
17
+ while (i < oldLines.length || j < newLines.length) {
18
+ const oldLine = oldLines[i];
19
+ const newLine = newLines[j];
20
+ if (oldLine === newLine) {
21
+ output.push(` ${oldLine ?? ""}`);
22
+ i++;
23
+ j++;
24
+ }
25
+ else if (oldLine && !newLines.slice(j).includes(oldLine)) {
26
+ // Line was removed
27
+ output.push(`- ${oldLine}`);
28
+ i++;
29
+ }
30
+ else if (newLine && !oldLines.slice(i).includes(newLine)) {
31
+ // Line was added
32
+ output.push(`+ ${newLine}`);
33
+ j++;
34
+ }
35
+ else {
36
+ // Line was changed
37
+ if (oldLine) {
38
+ output.push(`- ${oldLine}`);
39
+ i++;
40
+ }
41
+ if (newLine) {
42
+ output.push(`+ ${newLine}`);
43
+ j++;
44
+ }
45
+ }
46
+ }
47
+ return output;
48
+ };
49
+ /**
50
+ * Run the diff command
51
+ */
52
+ export const runDiff = async (skillKey, hash1, hash2) => {
53
+ const config = await loadConfig();
54
+ if (!config) {
55
+ p.log.error("Not configured. Run 'claude-skill-sync' first to set up.");
56
+ return;
57
+ }
58
+ if (config.mode === "local") {
59
+ p.log.error("Cannot diff in local-only mode.");
60
+ return;
61
+ }
62
+ const credentials = await loadCredentials();
63
+ if (!credentials?.accessToken) {
64
+ p.log.error("Not logged in. Run 'claude-skill-sync login' first.");
65
+ return;
66
+ }
67
+ // Check server connection
68
+ const healthResult = await api.checkHealth();
69
+ if (!healthResult.ok) {
70
+ p.log.error(`Cannot connect to server: ${healthResult.error}`);
71
+ return;
72
+ }
73
+ // Get passphrase to unlock vault
74
+ const passphrase = await p.password({
75
+ message: "Vault passphrase:",
76
+ mask: "*",
77
+ });
78
+ if (p.isCancel(passphrase)) {
79
+ p.cancel("Diff cancelled.");
80
+ return;
81
+ }
82
+ // Get master key
83
+ const spinner = p.spinner();
84
+ spinner.start("Unlocking vault...");
85
+ const masterKey = await getMasterKey(passphrase);
86
+ if (!masterKey) {
87
+ spinner.stop("Failed to unlock vault");
88
+ p.log.error("Invalid passphrase or corrupted credentials.");
89
+ return;
90
+ }
91
+ spinner.stop("Vault unlocked");
92
+ // Fetch both versions
93
+ spinner.start("Fetching versions...");
94
+ const [result1, result2] = await Promise.all([
95
+ api.getSkillVersion(skillKey, hash1),
96
+ api.getSkillVersion(skillKey, hash2),
97
+ ]);
98
+ if (!result1.ok) {
99
+ spinner.stop("Failed");
100
+ p.log.error(`Version ${hash1} not found`);
101
+ return;
102
+ }
103
+ if (!result2.ok) {
104
+ spinner.stop("Failed");
105
+ p.log.error(`Version ${hash2} not found`);
106
+ return;
107
+ }
108
+ // Decrypt both versions
109
+ spinner.message("Decrypting...");
110
+ let decrypted1, decrypted2;
111
+ try {
112
+ decrypted1 = decryptSkill(result1.data.encryptedData, result1.data.iv, result1.data.tag, masterKey);
113
+ decrypted2 = decryptSkill(result2.data.encryptedData, result2.data.iv, result2.data.tag, masterKey);
114
+ }
115
+ catch (err) {
116
+ spinner.stop("Failed");
117
+ p.log.error(`Failed to decrypt: ${err}`);
118
+ return;
119
+ }
120
+ spinner.stop("Versions loaded");
121
+ // Show diff
122
+ console.log(`\nDiff: ${hash1} → ${hash2}`);
123
+ console.log("═".repeat(50));
124
+ const oldLines = decrypted1.content.split("\n");
125
+ const newLines = decrypted2.content.split("\n");
126
+ const diffLines = simpleDiff(oldLines, newLines);
127
+ // Show with colors
128
+ diffLines.forEach((line) => {
129
+ if (line.startsWith("+")) {
130
+ console.log(`\x1b[32m${line}\x1b[0m`); // Green
131
+ }
132
+ else if (line.startsWith("-")) {
133
+ console.log(`\x1b[31m${line}\x1b[0m`); // Red
134
+ }
135
+ else {
136
+ console.log(line);
137
+ }
138
+ });
139
+ console.log("");
140
+ // Show file changes if any
141
+ const oldFiles = new Set(decrypted1.files?.map((f) => f.name) ?? []);
142
+ const newFiles = new Set(decrypted2.files?.map((f) => f.name) ?? []);
143
+ const addedFiles = [...newFiles].filter((f) => !oldFiles.has(f));
144
+ const removedFiles = [...oldFiles].filter((f) => !newFiles.has(f));
145
+ if (addedFiles.length > 0 || removedFiles.length > 0) {
146
+ console.log("File changes:");
147
+ addedFiles.forEach((f) => {
148
+ console.log(`\x1b[32m + ${f}\x1b[0m`);
149
+ });
150
+ removedFiles.forEach((f) => {
151
+ console.log(`\x1b[31m - ${f}\x1b[0m`);
152
+ });
153
+ console.log("");
154
+ }
155
+ };
156
+ //# sourceMappingURL=diff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diff.js","sourceRoot":"","sources":["../../src/commands/diff.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,KAAK,GAAG,MAAM,WAAW,CAAC;AAEjC;;GAEG;AACH,MAAM,UAAU,GAAG,CAAC,QAAkB,EAAE,QAAkB,EAAY,EAAE;IACtE,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAE1D,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,IAAI,CAAC,GAAG,CAAC,CAAC;IAEV,OAAO,CAAC,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;QAClD,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC5B,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QAE5B,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;YACxB,MAAM,CAAC,IAAI,CAAC,KAAK,OAAO,IAAI,EAAE,EAAE,CAAC,CAAC;YAClC,CAAC,EAAE,CAAC;YACJ,CAAC,EAAE,CAAC;QACN,CAAC;aAAM,IAAI,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3D,mBAAmB;YACnB,MAAM,CAAC,IAAI,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC;YAC5B,CAAC,EAAE,CAAC;QACN,CAAC;aAAM,IAAI,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3D,iBAAiB;YACjB,MAAM,CAAC,IAAI,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC;YAC5B,CAAC,EAAE,CAAC;QACN,CAAC;aAAM,CAAC;YACN,mBAAmB;YACnB,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAM,CAAC,IAAI,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC;gBAC5B,CAAC,EAAE,CAAC;YACN,CAAC;YACD,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAM,CAAC,IAAI,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC;gBAC5B,CAAC,EAAE,CAAC;YACN,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,KAAK,EAAE,QAAgB,EAAE,KAAa,EAAE,KAAa,EAAE,EAAE;IAC9E,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;IAElC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,0DAA0D,CAAC,CAAC;QACxE,OAAO;IACT,CAAC;IAED,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC5B,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;QAC/C,OAAO;IACT,CAAC;IAED,MAAM,WAAW,GAAG,MAAM,eAAe,EAAE,CAAC;IAC5C,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,CAAC;QAC9B,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAC;QACnE,OAAO;IACT,CAAC;IAED,0BAA0B;IAC1B,MAAM,YAAY,GAAG,MAAM,GAAG,CAAC,WAAW,EAAE,CAAC;IAC7C,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC;QACrB,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,6BAA6B,YAAY,CAAC,KAAK,EAAE,CAAC,CAAC;QAC/D,OAAO;IACT,CAAC;IAED,iCAAiC;IACjC,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,QAAQ,CAAC;QAClC,OAAO,EAAE,mBAAmB;QAC5B,IAAI,EAAE,GAAG;KACV,CAAC,CAAC;IAEH,IAAI,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3B,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;QAC5B,OAAO;IACT,CAAC;IAED,iBAAiB;IACjB,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;IAC5B,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;IAEpC,MAAM,SAAS,GAAG,MAAM,YAAY,CAAC,UAAU,CAAC,CAAC;IACjD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACvC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAC5D,OAAO;IACT,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAE/B,sBAAsB;IACtB,OAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAEtC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC3C,GAAG,CAAC,eAAe,CAAC,QAAQ,EAAE,KAAK,CAAC;QACpC,GAAG,CAAC,eAAe,CAAC,QAAQ,EAAE,KAAK,CAAC;KACrC,CAAC,CAAC;IAEH,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;QAChB,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvB,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,KAAK,YAAY,CAAC,CAAC;QAC1C,OAAO;IACT,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;QAChB,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvB,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,KAAK,YAAY,CAAC,CAAC;QAC1C,OAAO;IACT,CAAC;IAED,wBAAwB;IACxB,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IAEjC,IAAI,UAAU,EAAE,UAAU,CAAC;IAC3B,IAAI,CAAC;QACH,UAAU,GAAG,YAAY,CACvB,OAAO,CAAC,IAAI,CAAC,aAAa,EAC1B,OAAO,CAAC,IAAI,CAAC,EAAE,EACf,OAAO,CAAC,IAAI,CAAC,GAAG,EAChB,SAAS,CACV,CAAC;QACF,UAAU,GAAG,YAAY,CACvB,OAAO,CAAC,IAAI,CAAC,aAAa,EAC1B,OAAO,CAAC,IAAI,CAAC,EAAE,EACf,OAAO,CAAC,IAAI,CAAC,GAAG,EAChB,SAAS,CACV,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvB,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,sBAAsB,GAAG,EAAE,CAAC,CAAC;QACzC,OAAO;IACT,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAEhC,YAAY;IACZ,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,MAAM,KAAK,EAAE,CAAC,CAAC;IAC3C,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAE5B,MAAM,QAAQ,GAAG,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAChD,MAAM,QAAQ,GAAG,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAChD,MAAM,SAAS,GAAG,UAAU,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAEjD,mBAAmB;IACnB,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QACzB,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,SAAS,CAAC,CAAC,CAAC,QAAQ;QACjD,CAAC;aAAM,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,SAAS,CAAC,CAAC,CAAC,MAAM;QAC/C,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,2BAA2B;IAC3B,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACrE,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAErE,MAAM,UAAU,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACjE,MAAM,YAAY,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAEnE,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QAC7B,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YACvB,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;QACH,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YACzB,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * List command - show all skills with tree visualization
3
+ */
4
+ /** List command options */
5
+ type ListOptions = Partial<{
6
+ tree: boolean;
7
+ tools: boolean;
8
+ }>;
9
+ /**
10
+ * Run the list command
11
+ */
12
+ export declare const runList: (options?: ListOptions) => Promise<void>;
13
+ export {};
14
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAAA;;GAEG;AAeH,2BAA2B;AAC3B,KAAK,WAAW,GAAG,OAAO,CAAC;IACzB,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;CAChB,CAAC,CAAC;AA2RH;;GAEG;AACH,eAAO,MAAM,OAAO,GAAU,UAAS,WAAgB,kBAsBtD,CAAC"}
@@ -0,0 +1,251 @@
1
+ /**
2
+ * List command - show all skills with tree visualization
3
+ */
4
+ import * as p from "@clack/prompts";
5
+ import { listAllSkills, formatSkillSize, getSkillSize, getSkillDescription, buildDependencyGraph, } from "@claudeskill/core";
6
+ /** Format skill type for display */
7
+ const formatType = (type) => {
8
+ const labels = {
9
+ command: "command",
10
+ skill: "skill",
11
+ agent: "agent",
12
+ };
13
+ return labels[type];
14
+ };
15
+ /**
16
+ * Format relative time
17
+ */
18
+ const formatRelativeTime = (date) => {
19
+ const now = new Date();
20
+ const diffMs = now.getTime() - date.getTime();
21
+ const diffMins = Math.floor(diffMs / 60000);
22
+ const diffHours = Math.floor(diffMins / 60);
23
+ const diffDays = Math.floor(diffHours / 24);
24
+ if (diffMins < 1)
25
+ return "just now";
26
+ if (diffMins < 60)
27
+ return `${diffMins} min${diffMins === 1 ? "" : "s"} ago`;
28
+ if (diffHours < 24)
29
+ return `${diffHours} hour${diffHours === 1 ? "" : "s"} ago`;
30
+ if (diffDays < 30)
31
+ return `${diffDays} day${diffDays === 1 ? "" : "s"} ago`;
32
+ return date.toLocaleDateString();
33
+ };
34
+ /**
35
+ * Render dependency tree view
36
+ */
37
+ const renderDependencyTree = (skills, graph) => {
38
+ console.log("");
39
+ console.log("Dependency Graph");
40
+ console.log("");
41
+ // Find workflows (skills with dependencies or dependents)
42
+ const workflows = [];
43
+ const standalone = [];
44
+ const pipelines = [];
45
+ graph.forEach((node) => {
46
+ const hasDeps = node.dependencies.length > 0;
47
+ const hasDependents = node.dependents.length > 0;
48
+ if (hasDeps || hasDependents) {
49
+ // Check if it's a pipeline (agent depends on skill)
50
+ node.dependencies.forEach((depName) => {
51
+ const depNode = graph.get(depName);
52
+ if (depNode && node.type === "agent" && depNode.type === "skill") {
53
+ pipelines.push({ from: depNode, to: node });
54
+ }
55
+ });
56
+ if (hasDeps && !hasDependents) {
57
+ // This is a "consumer" - has deps but nothing depends on it
58
+ workflows.push(node);
59
+ }
60
+ }
61
+ else {
62
+ standalone.push(node);
63
+ }
64
+ });
65
+ // Render workflows (things that orchestrate others)
66
+ if (workflows.length > 0) {
67
+ console.log("├── Workflows");
68
+ workflows.forEach((node, i) => {
69
+ const isLast = i === workflows.length - 1;
70
+ const prefix = isLast ? "│ └── " : "│ ├── ";
71
+ const childPrefix = isLast ? "│ " : "│ │ ";
72
+ console.log(`${prefix}${node.name} (${node.type})`);
73
+ node.dependencies.forEach((dep, j) => {
74
+ const depNode = graph.get(dep);
75
+ const depIsLast = j === node.dependencies.length - 1;
76
+ const depPrefix = depIsLast ? "└── " : "├── ";
77
+ const depType = depNode?.type ?? "?";
78
+ console.log(`${childPrefix}${depPrefix}→ ${dep} (${depType})`);
79
+ });
80
+ });
81
+ console.log("│");
82
+ }
83
+ // Render pipelines (skill → agent flows)
84
+ if (pipelines.length > 0) {
85
+ console.log("├── Pipelines");
86
+ pipelines.forEach((pipeline, i) => {
87
+ const isLast = i === pipelines.length - 1;
88
+ const prefix = isLast ? "│ └── " : "│ ├── ";
89
+ console.log(`${prefix}${pipeline.from.name} → ${pipeline.to.name}`);
90
+ console.log(`${isLast ? "│ " : "│ │ "}└── (${pipeline.from.type} feeds ${pipeline.to.type})`);
91
+ });
92
+ console.log("│");
93
+ }
94
+ // Render standalone by type
95
+ const standaloneByType = standalone.reduce((acc, node) => {
96
+ acc[node.type].push(node);
97
+ return acc;
98
+ }, { command: [], skill: [], agent: [] });
99
+ const types = ["skill", "agent", "command"];
100
+ const hasStandalone = types.some((t) => standaloneByType[t].length > 0);
101
+ if (hasStandalone) {
102
+ console.log("└── Standalone");
103
+ types.forEach((type, typeIdx) => {
104
+ const items = standaloneByType[type];
105
+ if (items.length === 0)
106
+ return;
107
+ const remainingTypes = types.slice(typeIdx + 1);
108
+ const isLastType = remainingTypes.every((t) => standaloneByType[t].length === 0);
109
+ const typePrefix = isLastType ? " └── " : " ├── ";
110
+ const typeChildPrefix = isLastType ? " " : " │ ";
111
+ const typeLabels = {
112
+ command: "Commands",
113
+ skill: "Skills",
114
+ agent: "Agents",
115
+ };
116
+ console.log(`${typePrefix}${typeLabels[type]} (${items.length})`);
117
+ items.forEach((node, i) => {
118
+ const isLast = i === items.length - 1;
119
+ const prefix = isLast ? "└── " : "├── ";
120
+ const modelInfo = node.model ? ` [${node.model}]` : "";
121
+ console.log(`${typeChildPrefix}${prefix}${node.name}${modelInfo}`);
122
+ });
123
+ });
124
+ }
125
+ console.log("");
126
+ };
127
+ /**
128
+ * Render tool usage matrix
129
+ */
130
+ const renderToolMatrix = (skills, graph) => {
131
+ console.log("");
132
+ console.log("Tool Usage Matrix");
133
+ console.log("");
134
+ // Collect all unique tools
135
+ const allTools = new Set();
136
+ graph.forEach((node) => {
137
+ node.tools.forEach((t) => allTools.add(t));
138
+ });
139
+ const tools = [...allTools].sort();
140
+ if (tools.length === 0) {
141
+ console.log("No tool declarations found in skills/agents.");
142
+ console.log("");
143
+ return;
144
+ }
145
+ // Calculate column widths
146
+ const nameWidth = Math.max(20, ...skills.map((s) => s.name.length + s.type.length + 3));
147
+ const toolWidth = 6;
148
+ // Header
149
+ const header = "Name".padEnd(nameWidth) + tools.map((t) => t.padStart(toolWidth)).join("");
150
+ console.log(header);
151
+ console.log("─".repeat(header.length));
152
+ // Sort skills: skills first, then agents, then commands
153
+ const sorted = [...skills].sort((a, b) => {
154
+ const typeOrder = { skill: 0, agent: 1, command: 2 };
155
+ if (a.type !== b.type)
156
+ return typeOrder[a.type] - typeOrder[b.type];
157
+ return a.name.localeCompare(b.name);
158
+ });
159
+ // Rows
160
+ sorted.forEach((skill) => {
161
+ const node = graph.get(skill.name);
162
+ const skillTools = new Set(node?.tools ?? []);
163
+ const name = `${skill.name} (${skill.type.charAt(0)})`.padEnd(nameWidth);
164
+ const cells = tools
165
+ .map((t) => (skillTools.has(t) ? "✓" : "·").padStart(toolWidth))
166
+ .join("");
167
+ console.log(name + cells);
168
+ });
169
+ console.log("");
170
+ // Legend
171
+ console.log("Legend: (s) = skill, (a) = agent, (c) = command");
172
+ console.log("");
173
+ };
174
+ /**
175
+ * Render default list view
176
+ */
177
+ const renderDefaultList = (skills) => {
178
+ // Group by type
179
+ const byType = skills.reduce((acc, skill) => {
180
+ acc[skill.type].push(skill);
181
+ return acc;
182
+ }, { command: [], skill: [], agent: [] });
183
+ // Build tree output
184
+ console.log("");
185
+ console.log(`Claude Skills & Agents (${skills.length} total)`);
186
+ const types = ["command", "skill", "agent"];
187
+ const typeLabels = {
188
+ command: "Commands",
189
+ skill: "Skills",
190
+ agent: "Agents",
191
+ };
192
+ types.forEach((type, typeIndex) => {
193
+ const items = byType[type];
194
+ if (items.length === 0)
195
+ return;
196
+ const isLastType = types
197
+ .slice(typeIndex + 1)
198
+ .every((t) => byType[t].length === 0);
199
+ const typePrefix = isLastType ? "└── " : "├── ";
200
+ const typeChildPrefix = isLastType ? " " : "│ ";
201
+ console.log(`${typePrefix}${typeLabels[type]} (${items.length})`);
202
+ items.forEach((skill, index) => {
203
+ const isLast = index === items.length - 1;
204
+ const prefix = isLast ? "└── " : "├── ";
205
+ const childPrefix = isLast ? " " : "│ ";
206
+ const size = getSkillSize(skill);
207
+ const formattedSize = formatSkillSize(size);
208
+ const relativeTime = formatRelativeTime(skill.modifiedAt);
209
+ const description = getSkillDescription(skill);
210
+ const hasFiles = skill.files && skill.files.length > 0;
211
+ // Skill name
212
+ console.log(`${typeChildPrefix}${prefix}${skill.name}`);
213
+ // Description
214
+ console.log(`${typeChildPrefix}${childPrefix}├── ${description}`);
215
+ // Supporting files count (for directory skills)
216
+ if (hasFiles) {
217
+ console.log(`${typeChildPrefix}${childPrefix}├── Files: ${skill.files.length + 1}`);
218
+ }
219
+ // Last modified
220
+ console.log(`${typeChildPrefix}${childPrefix}├── Modified: ${relativeTime}`);
221
+ // Size
222
+ console.log(`${typeChildPrefix}${childPrefix}└── Size: ${formattedSize}`);
223
+ });
224
+ });
225
+ console.log("");
226
+ };
227
+ /**
228
+ * Run the list command
229
+ */
230
+ export const runList = async (options = {}) => {
231
+ const spinner = p.spinner();
232
+ spinner.start("Loading skills...");
233
+ const skills = await listAllSkills();
234
+ const graph = buildDependencyGraph(skills);
235
+ spinner.stop(`Found ${skills.length} item${skills.length === 1 ? "" : "s"}`);
236
+ if (skills.length === 0) {
237
+ p.log.info("No skills, commands, or agents found in ~/.claude/");
238
+ p.log.info("Create a skill file to get started.");
239
+ return;
240
+ }
241
+ if (options.tree) {
242
+ renderDependencyTree(skills, graph);
243
+ }
244
+ else if (options.tools) {
245
+ renderToolMatrix(skills, graph);
246
+ }
247
+ else {
248
+ renderDefaultList(skills);
249
+ }
250
+ };
251
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Log command - show version history for a skill
3
+ */
4
+ /**
5
+ * Run the log command
6
+ */
7
+ export declare const runLog: (skillKey: string) => Promise<void>;
8
+ //# sourceMappingURL=log.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log.d.ts","sourceRoot":"","sources":["../../src/commands/log.ts"],"names":[],"mappings":"AAAA;;GAEG;AAeH;;GAEG;AACH,eAAO,MAAM,MAAM,GAAU,UAAU,MAAM,kBAiE5C,CAAC"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Log command - show version history for a skill
3
+ */
4
+ import * as p from "@clack/prompts";
5
+ import { loadConfig } from "../config.js";
6
+ import { loadCredentials } from "../credentials.js";
7
+ import * as api from "../api.js";
8
+ /**
9
+ * Format a date string for display
10
+ */
11
+ const formatDate = (dateStr) => {
12
+ const date = new Date(dateStr);
13
+ return date.toLocaleString();
14
+ };
15
+ /**
16
+ * Run the log command
17
+ */
18
+ export const runLog = async (skillKey) => {
19
+ const config = await loadConfig();
20
+ if (!config) {
21
+ p.log.error("Not configured. Run 'claude-skill-sync' first to set up.");
22
+ return;
23
+ }
24
+ if (config.mode === "local") {
25
+ p.log.error("Cannot view log in local-only mode.");
26
+ return;
27
+ }
28
+ const credentials = await loadCredentials();
29
+ if (!credentials?.accessToken) {
30
+ p.log.error("Not logged in. Run 'claude-skill-sync login' first.");
31
+ return;
32
+ }
33
+ // Check server connection
34
+ const healthResult = await api.checkHealth();
35
+ if (!healthResult.ok) {
36
+ p.log.error(`Cannot connect to server: ${healthResult.error}`);
37
+ return;
38
+ }
39
+ // Get version history
40
+ const result = await api.getSkillVersions(skillKey);
41
+ if (!result.ok) {
42
+ if (result.status === 404) {
43
+ p.log.error(`Skill not found: ${skillKey}`);
44
+ }
45
+ else {
46
+ p.log.error(`Failed to get versions: ${result.error}`);
47
+ }
48
+ return;
49
+ }
50
+ const { versions, currentHash } = result.data;
51
+ if (versions.length === 0) {
52
+ p.log.info(`No versions found for ${skillKey}`);
53
+ return;
54
+ }
55
+ console.log(`\nVersion history for ${skillKey}`);
56
+ console.log("═".repeat(50));
57
+ versions.forEach((version, index) => {
58
+ const isCurrent = version.hash === currentHash;
59
+ const marker = isCurrent ? " (HEAD)" : "";
60
+ console.log(`\n${version.hash}${marker}`);
61
+ console.log(` Date: ${formatDate(version.createdAt)}`);
62
+ if (version.parentHash) {
63
+ console.log(` Parent: ${version.parentHash}`);
64
+ }
65
+ if (version.message) {
66
+ console.log(` Message: ${version.message}`);
67
+ }
68
+ if (index < versions.length - 1) {
69
+ console.log(" │");
70
+ }
71
+ });
72
+ console.log("");
73
+ };
74
+ //# sourceMappingURL=log.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log.js","sourceRoot":"","sources":["../../src/commands/log.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Login command - authenticate with server
3
+ */
4
+ /**
5
+ * Run the login command
6
+ */
7
+ export declare const runLogin: () => Promise<void>;
8
+ //# sourceMappingURL=login.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAAA;;GAEG;AAgBH;;GAEG;AACH,eAAO,MAAM,QAAQ,qBAiOpB,CAAC"}