@kaitranntt/ccs 7.50.0-dev.7 → 7.50.0-dev.9

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 (100) hide show
  1. package/README.md +22 -1
  2. package/dist/auth/account-context.d.ts +5 -0
  3. package/dist/auth/account-context.d.ts.map +1 -1
  4. package/dist/auth/account-context.js +30 -5
  5. package/dist/auth/account-context.js.map +1 -1
  6. package/dist/auth/auth-commands.d.ts.map +1 -1
  7. package/dist/auth/auth-commands.js +6 -0
  8. package/dist/auth/auth-commands.js.map +1 -1
  9. package/dist/auth/commands/create-command.d.ts.map +1 -1
  10. package/dist/auth/commands/create-command.js +7 -4
  11. package/dist/auth/commands/create-command.js.map +1 -1
  12. package/dist/auth/commands/list-command.d.ts.map +1 -1
  13. package/dist/auth/commands/list-command.js +3 -1
  14. package/dist/auth/commands/list-command.js.map +1 -1
  15. package/dist/auth/commands/show-command.d.ts.map +1 -1
  16. package/dist/auth/commands/show-command.js +1 -0
  17. package/dist/auth/commands/show-command.js.map +1 -1
  18. package/dist/auth/commands/types.d.ts +2 -0
  19. package/dist/auth/commands/types.d.ts.map +1 -1
  20. package/dist/auth/commands/types.js +2 -0
  21. package/dist/auth/commands/types.js.map +1 -1
  22. package/dist/auth/profile-detector.d.ts.map +1 -1
  23. package/dist/auth/profile-detector.js +1 -0
  24. package/dist/auth/profile-detector.js.map +1 -1
  25. package/dist/auth/profile-registry.d.ts +1 -0
  26. package/dist/auth/profile-registry.d.ts.map +1 -1
  27. package/dist/auth/profile-registry.js +7 -0
  28. package/dist/auth/profile-registry.js.map +1 -1
  29. package/dist/cliproxy/config/generator.d.ts +2 -1
  30. package/dist/cliproxy/config/generator.d.ts.map +1 -1
  31. package/dist/cliproxy/config/generator.js +18 -8
  32. package/dist/cliproxy/config/generator.js.map +1 -1
  33. package/dist/commands/help-command.d.ts.map +1 -1
  34. package/dist/commands/help-command.js +6 -1
  35. package/dist/commands/help-command.js.map +1 -1
  36. package/dist/config/migration-manager.d.ts.map +1 -1
  37. package/dist/config/migration-manager.js +3 -0
  38. package/dist/config/migration-manager.js.map +1 -1
  39. package/dist/config/unified-config-types.d.ts +2 -0
  40. package/dist/config/unified-config-types.d.ts.map +1 -1
  41. package/dist/config/unified-config-types.js.map +1 -1
  42. package/dist/management/instance-manager.d.ts.map +1 -1
  43. package/dist/management/instance-manager.js +1 -0
  44. package/dist/management/instance-manager.js.map +1 -1
  45. package/dist/management/shared-manager.d.ts +12 -0
  46. package/dist/management/shared-manager.d.ts.map +1 -1
  47. package/dist/management/shared-manager.js +99 -0
  48. package/dist/management/shared-manager.js.map +1 -1
  49. package/dist/types/config.d.ts +2 -0
  50. package/dist/types/config.d.ts.map +1 -1
  51. package/dist/types/config.js.map +1 -1
  52. package/dist/ui/assets/accounts-y2u0CVK8.js +1 -0
  53. package/dist/ui/assets/{alert-dialog-DYqj_ln8.js → alert-dialog-CetY4Iww.js} +1 -1
  54. package/dist/ui/assets/{api-DUB7WunM.js → api-5q1FT1uL.js} +1 -1
  55. package/dist/ui/assets/{auth-section-BPGGH-pS.js → auth-section-CaQeee-F.js} +1 -1
  56. package/dist/ui/assets/{backups-section-taD9idsR.js → backups-section-hF88BjYJ.js} +1 -1
  57. package/dist/ui/assets/{checkbox-C2wWJ45q.js → checkbox-Dhm5Fzkb.js} +1 -1
  58. package/dist/ui/assets/cliproxy-BeYNWmY_.js +3 -0
  59. package/dist/ui/assets/{cliproxy-control-panel-D_JZc88E.js → cliproxy-control-panel-CJELeI80.js} +1 -1
  60. package/dist/ui/assets/{confirm-dialog-CQGjNqDg.js → confirm-dialog-Dn3SrwNV.js} +1 -1
  61. package/dist/ui/assets/{copilot-C55LbvKL.js → copilot-vwT-4_V4.js} +1 -1
  62. package/dist/ui/assets/{cursor-DRxLX6HL.js → cursor-CN3lIX63.js} +1 -1
  63. package/dist/ui/assets/{droid-DlECj4OZ.js → droid-DBP2yCY7.js} +2 -2
  64. package/dist/ui/assets/{globalenv-section-BZl3-nsE.js → globalenv-section-DNKAJasL.js} +1 -1
  65. package/dist/ui/assets/{health-KcXhO7a4.js → health-C7tNiLzc.js} +1 -1
  66. package/dist/ui/assets/icons-DrewC9c3.js +1 -0
  67. package/dist/ui/assets/index-C8-ef-r7.js +1 -0
  68. package/dist/ui/assets/{index-mxDT1Fbu.js → index-MGh88HoC.js} +1 -1
  69. package/dist/ui/assets/{index-fsXcStKP.js → index-QBUSDLTx.js} +1 -1
  70. package/dist/ui/assets/index-k-HuyjpO.js +47 -0
  71. package/dist/ui/assets/index-s-oTl3hW.css +1 -0
  72. package/dist/ui/assets/{index-D7S6Q5bp.js → index-uYnNU6Ut.js} +1 -1
  73. package/dist/ui/assets/{proxy-status-widget-BxkoV1g7.js → proxy-status-widget-CIm5vKY7.js} +1 -1
  74. package/dist/ui/assets/{radix-ui-DIWAxjEp.js → radix-ui-C1Gpgz6I.js} +1 -1
  75. package/dist/ui/assets/{separator-lXjk7_Ls.js → separator-BLVyAGAm.js} +1 -1
  76. package/dist/ui/assets/shared-CHH09ZNi.js +8 -0
  77. package/dist/ui/assets/{switch-lf-m6i0R.js → switch-CwLyB4JK.js} +1 -1
  78. package/dist/ui/assets/{tanstack-Hn82hibe.js → tanstack-DDJIhNJd.js} +1 -1
  79. package/dist/ui/assets/{updates-Dok03EVa.js → updates-VlxL3aum.js} +1 -1
  80. package/dist/ui/index.html +5 -5
  81. package/dist/web-server/routes/account-route-helpers.d.ts +3 -0
  82. package/dist/web-server/routes/account-route-helpers.d.ts.map +1 -1
  83. package/dist/web-server/routes/account-route-helpers.js.map +1 -1
  84. package/dist/web-server/routes/account-routes.d.ts.map +1 -1
  85. package/dist/web-server/routes/account-routes.js +124 -0
  86. package/dist/web-server/routes/account-routes.js.map +1 -1
  87. package/dist/web-server/routes/config-routes.d.ts.map +1 -1
  88. package/dist/web-server/routes/config-routes.js +14 -0
  89. package/dist/web-server/routes/config-routes.js.map +1 -1
  90. package/dist/web-server/shared-routes.d.ts.map +1 -1
  91. package/dist/web-server/shared-routes.js +350 -52
  92. package/dist/web-server/shared-routes.js.map +1 -1
  93. package/package.json +1 -1
  94. package/dist/ui/assets/accounts-hMd2X1rs.js +0 -1
  95. package/dist/ui/assets/cliproxy-DQBcXCu5.js +0 -3
  96. package/dist/ui/assets/icons-D7XDTBCN.js +0 -1
  97. package/dist/ui/assets/index-BtROiILs.js +0 -47
  98. package/dist/ui/assets/index-C5CDmWs5.css +0 -1
  99. package/dist/ui/assets/index-Cl4dUJFw.js +0 -1
  100. package/dist/ui/assets/shared-NtPxxEp6.js +0 -1
@@ -32,9 +32,16 @@ exports.sharedRoutes = void 0;
32
32
  const express_1 = require("express");
33
33
  const fs = __importStar(require("fs"));
34
34
  const path = __importStar(require("path"));
35
+ const yaml = __importStar(require("js-yaml"));
35
36
  const config_manager_1 = require("../utils/config-manager");
36
37
  const claude_config_path_1 = require("../utils/claude-config-path");
37
38
  exports.sharedRoutes = (0, express_1.Router)();
39
+ const MAX_DIRECTORY_TRAVERSAL_DEPTH = 10;
40
+ const MAX_DESCRIPTION_LENGTH = 140;
41
+ const MAX_MARKDOWN_FILE_BYTES = 1024 * 1024; // 1 MiB
42
+ const MAX_CONTENT_FILE_BYTES = 2 * 1024 * 1024; // 2 MiB
43
+ const SHARED_ITEMS_CACHE_TTL_MS = 1000;
44
+ const sharedItemsCache = new Map();
38
45
  /**
39
46
  * GET /api/shared/commands
40
47
  */
@@ -56,6 +63,35 @@ exports.sharedRoutes.get('/agents', (_req, res) => {
56
63
  const items = getSharedItems('agents');
57
64
  res.json({ items });
58
65
  });
66
+ /**
67
+ * GET /api/shared/content?type=commands|skills|agents&path=<item-path>
68
+ */
69
+ exports.sharedRoutes.get('/content', (req, res) => {
70
+ const typeParam = req.query.type;
71
+ const itemPathParam = req.query.path;
72
+ if (!isSharedCollectionType(typeParam)) {
73
+ res.status(400).json({ error: 'Invalid or missing type parameter' });
74
+ return;
75
+ }
76
+ if (typeof itemPathParam !== 'string' || itemPathParam.trim().length === 0) {
77
+ res.status(400).json({ error: 'Invalid or missing path parameter' });
78
+ return;
79
+ }
80
+ const ccsDir = (0, config_manager_1.getCcsDir)();
81
+ const sharedDir = path.join(ccsDir, 'shared', typeParam);
82
+ if (!fs.existsSync(sharedDir)) {
83
+ res.status(404).json({ error: 'Shared directory not found' });
84
+ return;
85
+ }
86
+ const sharedDirRoot = safeRealPath(sharedDir) ?? path.resolve(sharedDir);
87
+ const allowedRoots = resolveAllowedRoots(typeParam, ccsDir, sharedDirRoot);
88
+ const contentResult = getSharedItemContent(typeParam, itemPathParam, allowedRoots);
89
+ if (!contentResult) {
90
+ res.status(404).json({ error: 'Shared content not found' });
91
+ return;
92
+ }
93
+ res.json(contentResult);
94
+ });
59
95
  /**
60
96
  * GET /api/shared/summary
61
97
  */
@@ -71,15 +107,14 @@ exports.sharedRoutes.get('/summary', (_req, res) => {
71
107
  symlinkStatus: checkSymlinkStatus(),
72
108
  });
73
109
  });
74
- function getSharedItems(type) {
75
- const ccsDir = (0, config_manager_1.getCcsDir)();
76
- const sharedDir = path.join(ccsDir, 'shared', type);
77
- if (!fs.existsSync(sharedDir)) {
78
- return [];
110
+ function isSharedCollectionType(value) {
111
+ return value === 'commands' || value === 'skills' || value === 'agents';
112
+ }
113
+ function resolveAllowedRoots(type, ccsDir, sharedDirRoot) {
114
+ if (type === 'commands') {
115
+ return new Set([sharedDirRoot]);
79
116
  }
80
- const items = [];
81
- const sharedDirRoot = safeRealPath(sharedDir) ?? path.resolve(sharedDir);
82
- const allowedSkillAgentRoots = new Set([
117
+ return new Set([
83
118
  sharedDirRoot,
84
119
  ...[
85
120
  path.join((0, claude_config_path_1.getClaudeConfigDir)(), type),
@@ -89,53 +124,46 @@ function getSharedItems(type) {
89
124
  .map((dirPath) => safeRealPath(dirPath))
90
125
  .filter((dirPath) => typeof dirPath === 'string'),
91
126
  ]);
127
+ }
128
+ function getSharedItems(type) {
129
+ const ccsDir = (0, config_manager_1.getCcsDir)();
130
+ const sharedDir = path.join(ccsDir, 'shared', type);
131
+ const now = Date.now();
132
+ if (!fs.existsSync(sharedDir)) {
133
+ sharedItemsCache.delete(type);
134
+ return [];
135
+ }
136
+ const cached = sharedItemsCache.get(type);
137
+ if (cached && cached.sharedDir === sharedDir && cached.expiresAt > now) {
138
+ return cached.items;
139
+ }
140
+ const items = [];
141
+ const sharedDirRoot = safeRealPath(sharedDir) ?? path.resolve(sharedDir);
142
+ const allowedRoots = resolveAllowedRoots(type, ccsDir, sharedDirRoot);
143
+ if (type === 'commands') {
144
+ const commandItems = getCommandItems(sharedDir, allowedRoots);
145
+ sharedItemsCache.set(type, {
146
+ items: commandItems,
147
+ sharedDir,
148
+ expiresAt: now + SHARED_ITEMS_CACHE_TTL_MS,
149
+ });
150
+ return commandItems;
151
+ }
92
152
  try {
93
153
  const entries = fs.readdirSync(sharedDir, { withFileTypes: true });
94
154
  for (const entry of entries) {
95
155
  try {
96
156
  const entryPath = path.join(sharedDir, entry.name);
97
- if (type === 'commands') {
98
- if (!entry.name.endsWith('.md')) {
99
- continue;
100
- }
101
- if (!entry.isFile() && !entry.isSymbolicLink()) {
102
- continue;
103
- }
104
- const commandPath = safeRealPath(entryPath);
105
- if (!commandPath || !isPathWithin(commandPath, sharedDirRoot)) {
106
- continue;
107
- }
108
- const description = readMarkdownDescription(commandPath, sharedDirRoot);
109
- if (!description) {
110
- continue;
111
- }
112
- items.push({
113
- name: entry.name.replace('.md', ''),
114
- description,
115
- path: entryPath,
116
- type: 'command',
117
- });
118
- continue;
119
- }
120
- // Skills/agents are directory-based and may be symlinked directories.
121
- if (!entry.isDirectory() && !entry.isSymbolicLink()) {
122
- continue;
123
- }
124
- const entryRoot = safeRealPath(entryPath);
125
- if (!entryRoot || !isPathWithinAny(entryRoot, allowedSkillAgentRoots)) {
157
+ const resolvedEntryPath = safeRealPath(entryPath);
158
+ if (!resolvedEntryPath || !isPathWithinAny(resolvedEntryPath, allowedRoots)) {
126
159
  continue;
127
160
  }
128
- const markdownFile = type === 'skills' ? 'SKILL.md' : 'prompt.md';
129
- const description = readMarkdownDescription(path.join(entryRoot, markdownFile), entryRoot);
130
- if (!description) {
161
+ const stats = fs.statSync(resolvedEntryPath);
162
+ const item = getSkillOrAgentItem(type, entry, entryPath, resolvedEntryPath, allowedRoots, stats);
163
+ if (!item) {
131
164
  continue;
132
165
  }
133
- items.push({
134
- name: entry.name,
135
- description,
136
- path: entryPath,
137
- type: type === 'skills' ? 'skill' : 'agent',
138
- });
166
+ items.push(item);
139
167
  }
140
168
  catch {
141
169
  // Fail soft per entry so one bad item does not hide valid results.
@@ -145,29 +173,212 @@ function getSharedItems(type) {
145
173
  catch {
146
174
  // Directory read failed
147
175
  }
176
+ const sortedItems = items.sort((a, b) => a.name.localeCompare(b.name));
177
+ sharedItemsCache.set(type, {
178
+ items: sortedItems,
179
+ sharedDir,
180
+ expiresAt: now + SHARED_ITEMS_CACHE_TTL_MS,
181
+ });
182
+ return sortedItems;
183
+ }
184
+ function getCommandItems(sharedDir, allowedRoots) {
185
+ const markdownFiles = collectMarkdownFiles(sharedDir, allowedRoots);
186
+ const items = [];
187
+ for (const markdownFile of markdownFiles) {
188
+ const description = readMarkdownDescription(markdownFile.resolvedPath, allowedRoots);
189
+ if (!description) {
190
+ continue;
191
+ }
192
+ const relativePath = path.relative(sharedDir, markdownFile.displayPath);
193
+ const normalizedName = relativePath.split(path.sep).join('/').replace(/\.md$/i, '');
194
+ if (!normalizedName) {
195
+ continue;
196
+ }
197
+ items.push({
198
+ name: normalizedName,
199
+ description,
200
+ path: markdownFile.displayPath,
201
+ type: 'command',
202
+ });
203
+ }
148
204
  return items.sort((a, b) => a.name.localeCompare(b.name));
149
205
  }
206
+ function getSkillOrAgentItem(type, entry, entryPath, resolvedEntryPath, allowedRoots, stats) {
207
+ if (type === 'skills') {
208
+ if (!stats.isDirectory()) {
209
+ return null;
210
+ }
211
+ const description = readMarkdownDescription(path.join(resolvedEntryPath, 'SKILL.md'), allowedRoots);
212
+ if (!description) {
213
+ return null;
214
+ }
215
+ return {
216
+ name: entry.name,
217
+ description,
218
+ path: entryPath,
219
+ type: 'skill',
220
+ };
221
+ }
222
+ if (stats.isDirectory()) {
223
+ const description = readFirstMarkdownDescription([
224
+ path.join(resolvedEntryPath, 'prompt.md'),
225
+ path.join(resolvedEntryPath, 'AGENT.md'),
226
+ path.join(resolvedEntryPath, 'agent.md'),
227
+ ], allowedRoots);
228
+ if (!description) {
229
+ return null;
230
+ }
231
+ return {
232
+ name: entry.name,
233
+ description,
234
+ path: entryPath,
235
+ type: 'agent',
236
+ };
237
+ }
238
+ if (!stats.isFile() || !entry.name.toLowerCase().endsWith('.md')) {
239
+ return null;
240
+ }
241
+ const description = readMarkdownDescription(resolvedEntryPath, allowedRoots);
242
+ if (!description) {
243
+ return null;
244
+ }
245
+ return {
246
+ name: entry.name.replace(/\.md$/i, ''),
247
+ description,
248
+ path: entryPath,
249
+ type: 'agent',
250
+ };
251
+ }
252
+ function collectMarkdownFiles(sharedDir, allowedRoots) {
253
+ const directoriesToVisit = [
254
+ { path: sharedDir, depth: 0 },
255
+ ];
256
+ const visitedDirectories = new Set();
257
+ const markdownFiles = [];
258
+ while (directoriesToVisit.length > 0) {
259
+ const current = directoriesToVisit.pop();
260
+ if (!current) {
261
+ continue;
262
+ }
263
+ const currentDir = current.path;
264
+ const resolvedCurrentDir = safeRealPath(currentDir);
265
+ if (!resolvedCurrentDir || !isPathWithinAny(resolvedCurrentDir, allowedRoots)) {
266
+ continue;
267
+ }
268
+ const normalizedDirPath = normalizeForPathComparison(resolvedCurrentDir);
269
+ if (visitedDirectories.has(normalizedDirPath)) {
270
+ continue;
271
+ }
272
+ visitedDirectories.add(normalizedDirPath);
273
+ let entries = [];
274
+ try {
275
+ entries = fs.readdirSync(currentDir, { withFileTypes: true });
276
+ }
277
+ catch {
278
+ continue;
279
+ }
280
+ for (const entry of entries) {
281
+ const entryPath = path.join(currentDir, entry.name);
282
+ const resolvedEntryPath = safeRealPath(entryPath);
283
+ if (!resolvedEntryPath || !isPathWithinAny(resolvedEntryPath, allowedRoots)) {
284
+ continue;
285
+ }
286
+ let stats;
287
+ try {
288
+ stats = fs.statSync(resolvedEntryPath);
289
+ }
290
+ catch {
291
+ continue;
292
+ }
293
+ if (stats.isDirectory()) {
294
+ if (current.depth < MAX_DIRECTORY_TRAVERSAL_DEPTH) {
295
+ directoriesToVisit.push({ path: entryPath, depth: current.depth + 1 });
296
+ }
297
+ continue;
298
+ }
299
+ if (stats.isFile() && entry.name.toLowerCase().endsWith('.md')) {
300
+ markdownFiles.push({
301
+ displayPath: entryPath,
302
+ resolvedPath: resolvedEntryPath,
303
+ });
304
+ }
305
+ }
306
+ }
307
+ return markdownFiles;
308
+ }
150
309
  function extractDescription(content) {
151
- // Extract first non-empty, non-heading line
152
- const lines = content.split('\n');
310
+ const frontmatterDescription = extractFrontmatterDescription(content);
311
+ if (frontmatterDescription) {
312
+ return trimDescription(frontmatterDescription);
313
+ }
314
+ // Extract first non-empty, non-heading line from the markdown body.
315
+ const lines = stripFrontmatter(content).split('\n');
153
316
  for (const line of lines) {
154
317
  const trimmed = line.trim();
155
- if (trimmed && !trimmed.startsWith('#') && !trimmed.startsWith('---')) {
156
- return trimmed.slice(0, 100);
318
+ if (isDescriptionBodyLine(trimmed)) {
319
+ return trimDescription(trimmed);
157
320
  }
158
321
  }
159
322
  return 'No description';
160
323
  }
161
- function readMarkdownDescription(markdownPath, allowedRoot) {
324
+ function isDescriptionBodyLine(line) {
325
+ if (!line) {
326
+ return false;
327
+ }
328
+ if (line === '---' || line === '...') {
329
+ return false;
330
+ }
331
+ return !line.startsWith('#') && !line.startsWith('<!--');
332
+ }
333
+ function extractFrontmatterDescription(content) {
334
+ const frontmatterMatch = content.match(/^---\s*\r?\n([\s\S]*?)\r?\n---(?:\s*\r?\n|$)/);
335
+ if (!frontmatterMatch) {
336
+ return null;
337
+ }
338
+ try {
339
+ const parsed = yaml.load(frontmatterMatch[1]);
340
+ const description = parsed?.description;
341
+ if (typeof description !== 'string') {
342
+ return null;
343
+ }
344
+ const trimmed = description.trim();
345
+ return trimmed.length > 0 ? trimmed : null;
346
+ }
347
+ catch {
348
+ return null;
349
+ }
350
+ }
351
+ function stripFrontmatter(content) {
352
+ return content.replace(/^---\s*\r?\n[\s\S]*?\r?\n---\s*\r?\n?/, '');
353
+ }
354
+ function trimDescription(description) {
355
+ if (description.length <= MAX_DESCRIPTION_LENGTH) {
356
+ return description;
357
+ }
358
+ return `${description.slice(0, MAX_DESCRIPTION_LENGTH - 3).trimEnd()}...`;
359
+ }
360
+ function readFirstMarkdownDescription(markdownPaths, allowedRoots) {
361
+ for (const markdownPath of markdownPaths) {
362
+ const description = readMarkdownDescription(markdownPath, allowedRoots);
363
+ if (description) {
364
+ return description;
365
+ }
366
+ }
367
+ return null;
368
+ }
369
+ function readMarkdownDescription(markdownPath, allowedRoots) {
162
370
  try {
163
371
  const resolvedMarkdownPath = safeRealPath(markdownPath);
164
- if (!resolvedMarkdownPath || !isPathWithin(resolvedMarkdownPath, allowedRoot)) {
372
+ if (!resolvedMarkdownPath || !isPathWithinAny(resolvedMarkdownPath, allowedRoots)) {
165
373
  return null;
166
374
  }
167
375
  const stats = fs.statSync(resolvedMarkdownPath);
168
376
  if (!stats.isFile()) {
169
377
  return null;
170
378
  }
379
+ if (stats.size > MAX_MARKDOWN_FILE_BYTES) {
380
+ return null;
381
+ }
171
382
  const content = fs.readFileSync(resolvedMarkdownPath, 'utf8');
172
383
  return extractDescription(content);
173
384
  }
@@ -175,6 +386,93 @@ function readMarkdownDescription(markdownPath, allowedRoot) {
175
386
  return null;
176
387
  }
177
388
  }
389
+ function readMarkdownContent(markdownPath, allowedRoots) {
390
+ try {
391
+ const resolvedMarkdownPath = safeRealPath(markdownPath);
392
+ if (!resolvedMarkdownPath || !isPathWithinAny(resolvedMarkdownPath, allowedRoots)) {
393
+ return null;
394
+ }
395
+ const stats = fs.statSync(resolvedMarkdownPath);
396
+ if (!stats.isFile()) {
397
+ return null;
398
+ }
399
+ if (stats.size > MAX_CONTENT_FILE_BYTES) {
400
+ return null;
401
+ }
402
+ return fs.readFileSync(resolvedMarkdownPath, 'utf8');
403
+ }
404
+ catch {
405
+ return null;
406
+ }
407
+ }
408
+ function resolveReadableMarkdownPath(markdownPaths, allowedRoots) {
409
+ for (const markdownPath of markdownPaths) {
410
+ const resolvedMarkdownPath = safeRealPath(markdownPath);
411
+ if (!resolvedMarkdownPath || !isPathWithinAny(resolvedMarkdownPath, allowedRoots)) {
412
+ continue;
413
+ }
414
+ try {
415
+ const stats = fs.statSync(resolvedMarkdownPath);
416
+ if (!stats.isFile() || stats.size > MAX_CONTENT_FILE_BYTES) {
417
+ continue;
418
+ }
419
+ return resolvedMarkdownPath;
420
+ }
421
+ catch {
422
+ continue;
423
+ }
424
+ }
425
+ return null;
426
+ }
427
+ function getSharedItemContent(type, itemPath, allowedRoots) {
428
+ const resolvedItemPath = safeRealPath(itemPath);
429
+ if (!resolvedItemPath || !isPathWithinAny(resolvedItemPath, allowedRoots)) {
430
+ return null;
431
+ }
432
+ let itemStats;
433
+ try {
434
+ itemStats = fs.statSync(resolvedItemPath);
435
+ }
436
+ catch {
437
+ return null;
438
+ }
439
+ let markdownPath = null;
440
+ if (type === 'commands') {
441
+ if (!itemStats.isFile() || !itemPath.toLowerCase().endsWith('.md')) {
442
+ return null;
443
+ }
444
+ markdownPath = resolvedItemPath;
445
+ }
446
+ else if (type === 'skills') {
447
+ if (!itemStats.isDirectory()) {
448
+ return null;
449
+ }
450
+ markdownPath = resolveReadableMarkdownPath([path.join(resolvedItemPath, 'SKILL.md')], allowedRoots);
451
+ }
452
+ else {
453
+ if (itemStats.isDirectory()) {
454
+ markdownPath = resolveReadableMarkdownPath([
455
+ path.join(resolvedItemPath, 'prompt.md'),
456
+ path.join(resolvedItemPath, 'AGENT.md'),
457
+ path.join(resolvedItemPath, 'agent.md'),
458
+ ], allowedRoots);
459
+ }
460
+ else if (itemStats.isFile() && itemPath.toLowerCase().endsWith('.md')) {
461
+ markdownPath = resolvedItemPath;
462
+ }
463
+ }
464
+ if (!markdownPath) {
465
+ return null;
466
+ }
467
+ const content = readMarkdownContent(markdownPath, allowedRoots);
468
+ if (!content) {
469
+ return null;
470
+ }
471
+ return {
472
+ content,
473
+ contentPath: markdownPath,
474
+ };
475
+ }
178
476
  function safeRealPath(targetPath) {
179
477
  try {
180
478
  return fs.realpathSync(targetPath);
@@ -1 +1 @@
1
- {"version":3,"file":"shared-routes.js","sourceRoot":"","sources":["../../src/web-server/shared-routes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shared-routes.js","sourceRoot":"","sources":["../../src/web-server/shared-routes.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kaitranntt/ccs",
3
- "version": "7.50.0-dev.7",
3
+ "version": "7.50.0-dev.9",
4
4
  "description": "Claude Code Switch - Instant profile switching between Claude Sonnet 4.5 and GLM 4.6",
5
5
  "keywords": [
6
6
  "cli",
@@ -1 +0,0 @@
1
- import{j as e}from"./radix-ui-DIWAxjEp.js";import{r as x}from"./react-vendor-CNOkPC89.js";import{u as R,a as y,b as v,d as F,f as T,g as L}from"./tanstack-Hn82hibe.js";import{c as p,W as C,b as m,a5 as P,a6 as q,a7 as M,a8 as G,a9 as K,L as j,I as k}from"./index-BtROiILs.js";import{A as E,a as $,b as H,c as O,d as Q,e as Z,f as B,g as I}from"./alert-dialog-DYqj_ln8.js";import{t as h}from"./notifications-B2HqRBj7.js";import{w as U,k as b,ah as V,z as X,m as z,a0 as W}from"./icons-D7XDTBCN.js";import{C as J}from"./checkbox-C2wWJ45q.js";import"./utils-CzKF5WmX.js";import"./form-utils-Cn_Uld6y.js";import"./code-highlight-BRUf_pqB.js";function Y({className:n,...t}){return e.jsx("div",{"data-slot":"table-container",className:"relative w-full overflow-x-auto",children:e.jsx("table",{"data-slot":"table",className:p("w-full caption-bottom text-sm",n),...t})})}function ee({className:n,...t}){return e.jsx("thead",{"data-slot":"table-header",className:p("[&_tr]:border-b",n),...t})}function te({className:n,...t}){return e.jsx("tbody",{"data-slot":"table-body",className:p("[&_tr:last-child]:border-0",n),...t})}function S({className:n,...t}){return e.jsx("tr",{"data-slot":"table-row",className:p("hover:bg-muted/50 data-[state=selected]:bg-muted border-b transition-colors",n),...t})}function se({className:n,...t}){return e.jsx("th",{"data-slot":"table-head",className:p("text-foreground h-10 px-2 text-left align-middle font-medium whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",n),...t})}function ae({className:n,...t}){return e.jsx("td",{"data-slot":"table-cell",className:p("p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",n),...t})}function ne(){return R({queryKey:["accounts"],queryFn:()=>C.accounts.list()})}function re(){const n=y();return v({mutationFn:t=>C.accounts.setDefault(t),onSuccess:(t,r)=>{n.invalidateQueries({queryKey:["accounts"]}),h.success(`Default account set to "${r}"`)},onError:t=>{h.error(t.message)}})}function le(){const n=y();return v({mutationFn:()=>C.accounts.resetDefault(),onSuccess:()=>{n.invalidateQueries({queryKey:["accounts"]}),h.success("Default account reset to CCS")},onError:t=>{h.error(t.message)}})}function oe(){const n=y();return v({mutationFn:t=>C.accounts.delete(t),onSuccess:(t,r)=>{n.invalidateQueries({queryKey:["accounts"]}),h.success(`Account "${r}" deleted`)},onError:t=>{h.error(t.message)}})}function ce({data:n,defaultAccount:t}){const r=re(),c=oe(),l=le(),[i,d]=x.useState(null),g=F({data:n,columns:[{accessorKey:"name",header:"Name",size:200,cell:({row:s})=>e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"font-medium",children:s.original.name}),s.original.name===t&&e.jsx("span",{className:"text-xs bg-primary/10 text-primary px-1.5 py-0.5 rounded border border-primary/20",children:"default"})]})},{accessorKey:"type",header:"Type",size:100,cell:({row:s})=>e.jsx("span",{className:"capitalize text-muted-foreground",children:s.original.type||"oauth"})},{accessorKey:"created",header:"Created",size:150,cell:({row:s})=>{const a=new Date(s.original.created);return e.jsx("span",{className:"text-muted-foreground",children:a.toLocaleDateString()})}},{accessorKey:"last_used",header:"Last Used",size:150,cell:({row:s})=>{if(!s.original.last_used)return e.jsx("span",{className:"text-muted-foreground/50",children:"-"});const a=new Date(s.original.last_used);return e.jsx("span",{className:"text-muted-foreground",children:a.toLocaleDateString()})}},{id:"context",header:"Context",size:170,cell:({row:s})=>{if(s.original.type==="cliproxy")return e.jsx("span",{className:"text-muted-foreground/50",children:"-"});if((s.original.context_mode||"isolated")==="shared"){const o=s.original.context_group||"default";return e.jsxs("span",{className:"text-muted-foreground",children:["shared (",o,")"]})}return e.jsx("span",{className:"text-muted-foreground",children:"isolated"})}},{id:"actions",header:"Actions",size:180,cell:({row:s})=>{const a=s.original.name===t,o=r.isPending||c.isPending;return e.jsxs("div",{className:"flex items-center gap-1",children:[e.jsxs(m,{variant:a?"secondary":"default",size:"sm",className:"h-8 px-2",disabled:a||o,onClick:()=>r.mutate(s.original.name),children:[e.jsx(b,{className:`w-3 h-3 mr-1 ${a?"opacity-50":""}`}),a?"Active":"Set Default"]}),e.jsx(m,{variant:"ghost",size:"sm",className:"h-8 px-2 text-destructive hover:text-destructive hover:bg-destructive/10",disabled:a||o,onClick:()=>d(s.original.name),title:a?"Cannot delete default account":"Delete account",children:e.jsx(V,{className:"w-4 h-4"})})]})}}],getCoreRowModel:L()});return n.length===0?e.jsxs("div",{className:"text-center py-8 text-muted-foreground",children:["No accounts found. Use"," ",e.jsx("code",{className:"text-sm bg-muted px-1 rounded",children:"ccs auth create"})," to add accounts."]}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"space-y-4",children:[e.jsx("div",{className:"border rounded-md",children:e.jsxs(Y,{children:[e.jsx(ee,{children:g.getHeaderGroups().map(s=>e.jsx(S,{children:s.headers.map(a=>{const o={name:"w-[200px]",type:"w-[100px]",created:"w-[150px]",last_used:"w-[150px]",context:"w-[170px]",actions:"w-[180px]"}[a.id]||"w-auto";return e.jsx(se,{className:o,children:a.isPlaceholder?null:T(a.column.columnDef.header,a.getContext())},a.id)})},s.id))}),e.jsx(te,{children:g.getRowModel().rows.map(s=>e.jsx(S,{children:s.getVisibleCells().map(a=>e.jsx(ae,{children:T(a.column.columnDef.cell,a.getContext())},a.id))},s.id))})]})}),t&&e.jsx("div",{className:"flex justify-end",children:e.jsxs(m,{variant:"outline",size:"sm",onClick:()=>l.mutate(),disabled:l.isPending,children:[e.jsx(U,{className:"w-4 h-4 mr-2"}),"Reset to CCS Default"]})})]}),e.jsx(E,{open:!!i,onOpenChange:s=>!s&&d(null),children:e.jsxs($,{children:[e.jsxs(H,{children:[e.jsx(O,{children:"Delete Account"}),e.jsxs(Q,{children:['Are you sure you want to delete the account "',i,'"? This will remove the profile and all its session data. This action cannot be undone.']})]}),e.jsxs(Z,{children:[e.jsx(B,{children:"Cancel"}),e.jsx(I,{className:"bg-destructive text-destructive-foreground hover:bg-destructive/90",onClick:()=>{i&&(c.mutate(i),d(null))},children:"Delete"})]})]})})]})}const _=64;function ie({open:n,onClose:t}){const[r,c]=x.useState(""),[l,i]=x.useState(!1),[d,N]=x.useState(""),[g,s]=x.useState(!1),a=/^[a-zA-Z][a-zA-Z0-9_-]*$/.test(r),o=d.trim().toLowerCase(),f=o.length===0||o.length<=_&&/^[a-zA-Z][a-zA-Z0-9_-]*$/.test(o),w=r&&a?[`ccs auth create ${r}`,l?o.length>0?`--context-group ${o}`:"--share-context":""].filter(Boolean).join(" "):"ccs auth create <name>",D=async()=>{!a||l&&!f||(await navigator.clipboard.writeText(w),s(!0),setTimeout(()=>s(!1),2e3))},A=()=>{c(""),i(!1),N(""),s(!1),t()};return e.jsx(P,{open:n,onOpenChange:u=>!u&&A(),children:e.jsxs(q,{className:"sm:max-w-md",children:[e.jsxs(M,{children:[e.jsx(G,{children:"Create New Account"}),e.jsx(K,{children:"Auth profiles require Claude CLI login. Run the command below in your terminal."})]}),e.jsxs("div",{className:"space-y-4 py-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(j,{htmlFor:"profile-name",children:"Profile Name"}),e.jsx(k,{id:"profile-name",value:r,onChange:u=>c(u.target.value),placeholder:"e.g., work, personal, client",autoComplete:"off"}),r&&!a&&e.jsx("p",{className:"text-xs text-destructive",children:"Name must start with a letter and contain only letters, numbers, dashes, or underscores."})]}),e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(J,{id:"share-context",checked:l,onCheckedChange:u=>i(u===!0)}),e.jsx(j,{htmlFor:"share-context",className:"cursor-pointer",children:"Share project context with other accounts"})]}),l&&e.jsxs("div",{className:"space-y-2 pl-6",children:[e.jsx(j,{htmlFor:"context-group",children:"Context Group (optional)"}),e.jsx(k,{id:"context-group",value:d,onChange:u=>N(u.target.value),placeholder:"default, sprint-a, client-x",autoComplete:"off"}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"Leave empty to use the default shared group."}),d.trim().length>0&&!f&&e.jsxs("p",{className:"text-xs text-destructive",children:["Group must start with a letter and use only letters, numbers, dashes, or underscores (max ",_," chars)."]})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(j,{children:"Command"}),e.jsxs("div",{className:"flex items-center gap-2 p-3 bg-muted rounded-md font-mono text-sm",children:[e.jsx(X,{className:"w-4 h-4 text-muted-foreground shrink-0"}),e.jsx("code",{className:"flex-1 break-all",children:w}),e.jsx(m,{variant:"ghost",size:"sm",className:"shrink-0 h-8 px-2",onClick:D,disabled:!a||l&&!f,children:g?e.jsx(b,{className:"w-4 h-4 text-green-500"}):e.jsx(z,{className:"w-4 h-4"})})]})]}),e.jsxs("div",{className:"text-sm text-muted-foreground space-y-1",children:[e.jsx("p",{children:"After running the command:"}),e.jsxs("ol",{className:"list-decimal list-inside pl-2 space-y-0.5",children:[e.jsx("li",{children:"Complete the Claude login in your browser"}),e.jsx("li",{children:"Return here and refresh to see the new account"})]})]}),e.jsxs("div",{className:"flex justify-end gap-2 pt-2",children:[e.jsx(m,{variant:"ghost",onClick:A,children:"Close"}),e.jsx(m,{onClick:D,disabled:!a||l&&!f,children:g?e.jsxs(e.Fragment,{children:[e.jsx(b,{className:"w-4 h-4 mr-2"}),"Copied!"]}):e.jsxs(e.Fragment,{children:[e.jsx(z,{className:"w-4 h-4 mr-2"}),"Copy Command"]})})]})]})]})})}function be(){const{data:n,isLoading:t,refetch:r}=ne(),[c,l]=x.useState(!1);return e.jsxs("div",{className:"p-6 max-w-6xl mx-auto space-y-8",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"text-2xl font-bold",children:"Accounts"}),e.jsx("p",{className:"text-sm text-muted-foreground mt-1",children:"Manage multi-account Claude sessions (profiles.json)"})]}),e.jsxs(m,{onClick:()=>l(!0),children:[e.jsx(W,{className:"w-4 h-4 mr-2"}),"Create Account"]})]}),t?e.jsx("div",{className:"text-muted-foreground",children:"Loading accounts..."}):e.jsx(ce,{data:n?.accounts||[],defaultAccount:n?.default??null,onRefresh:r}),e.jsx(ie,{open:c,onClose:()=>l(!1)})]})}export{be as AccountsPage};