@kaitranntt/ccs 7.77.1-dev.9 → 7.78.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 (207) hide show
  1. package/dist/auth/auth-commands.d.ts +2 -1
  2. package/dist/auth/auth-commands.d.ts.map +1 -1
  3. package/dist/auth/auth-commands.js +18 -4
  4. package/dist/auth/auth-commands.js.map +1 -1
  5. package/dist/auth/commands/backup-command.d.ts.map +1 -1
  6. package/dist/auth/commands/backup-command.js +7 -2
  7. package/dist/auth/commands/backup-command.js.map +1 -1
  8. package/dist/auth/commands/create-command.d.ts.map +1 -1
  9. package/dist/auth/commands/create-command.js +14 -16
  10. package/dist/auth/commands/create-command.js.map +1 -1
  11. package/dist/auth/commands/default-command.d.ts +1 -1
  12. package/dist/auth/commands/default-command.d.ts.map +1 -1
  13. package/dist/auth/commands/default-command.js +10 -2
  14. package/dist/auth/commands/default-command.js.map +1 -1
  15. package/dist/auth/commands/index.d.ts +1 -0
  16. package/dist/auth/commands/index.d.ts.map +1 -1
  17. package/dist/auth/commands/index.js +3 -1
  18. package/dist/auth/commands/index.js.map +1 -1
  19. package/dist/auth/commands/list-command.d.ts.map +1 -1
  20. package/dist/auth/commands/list-command.js +16 -3
  21. package/dist/auth/commands/list-command.js.map +1 -1
  22. package/dist/auth/commands/remove-command.d.ts.map +1 -1
  23. package/dist/auth/commands/remove-command.js +5 -1
  24. package/dist/auth/commands/remove-command.js.map +1 -1
  25. package/dist/auth/commands/resources-command.d.ts +3 -0
  26. package/dist/auth/commands/resources-command.d.ts.map +1 -0
  27. package/dist/auth/commands/resources-command.js +115 -0
  28. package/dist/auth/commands/resources-command.js.map +1 -0
  29. package/dist/auth/commands/show-command.d.ts.map +1 -1
  30. package/dist/auth/commands/show-command.js +13 -4
  31. package/dist/auth/commands/show-command.js.map +1 -1
  32. package/dist/auth/commands/types.d.ts +11 -1
  33. package/dist/auth/commands/types.d.ts.map +1 -1
  34. package/dist/auth/commands/types.js +41 -2
  35. package/dist/auth/commands/types.js.map +1 -1
  36. package/dist/auth/profile-continuity-inheritance.d.ts.map +1 -1
  37. package/dist/auth/profile-continuity-inheritance.js +2 -1
  38. package/dist/auth/profile-continuity-inheritance.js.map +1 -1
  39. package/dist/auth/profile-detector.d.ts.map +1 -1
  40. package/dist/auth/profile-detector.js +1 -0
  41. package/dist/auth/profile-detector.js.map +1 -1
  42. package/dist/auth/profile-registry.d.ts +2 -0
  43. package/dist/auth/profile-registry.d.ts.map +1 -1
  44. package/dist/auth/profile-registry.js +6 -2
  45. package/dist/auth/profile-registry.js.map +1 -1
  46. package/dist/auth/shared-resource-policy.d.ts +20 -0
  47. package/dist/auth/shared-resource-policy.d.ts.map +1 -0
  48. package/dist/auth/shared-resource-policy.js +69 -0
  49. package/dist/auth/shared-resource-policy.js.map +1 -0
  50. package/dist/cliproxy/auth/oauth-handler.d.ts +34 -0
  51. package/dist/cliproxy/auth/oauth-handler.d.ts.map +1 -1
  52. package/dist/cliproxy/auth/oauth-handler.js +85 -13
  53. package/dist/cliproxy/auth/oauth-handler.js.map +1 -1
  54. package/dist/cliproxy/auth/oauth-process.d.ts.map +1 -1
  55. package/dist/cliproxy/auth/oauth-process.js +94 -3
  56. package/dist/cliproxy/auth/oauth-process.js.map +1 -1
  57. package/dist/cliproxy/auth/oauth-trace/diagnose-failure.d.ts +24 -0
  58. package/dist/cliproxy/auth/oauth-trace/diagnose-failure.d.ts.map +1 -0
  59. package/dist/cliproxy/auth/oauth-trace/diagnose-failure.js +159 -0
  60. package/dist/cliproxy/auth/oauth-trace/diagnose-failure.js.map +1 -0
  61. package/dist/cliproxy/auth/oauth-trace/index.d.ts +4 -0
  62. package/dist/cliproxy/auth/oauth-trace/index.d.ts.map +1 -0
  63. package/dist/cliproxy/auth/oauth-trace/index.js +14 -0
  64. package/dist/cliproxy/auth/oauth-trace/index.js.map +1 -0
  65. package/dist/cliproxy/auth/oauth-trace/redactor.d.ts +22 -0
  66. package/dist/cliproxy/auth/oauth-trace/redactor.d.ts.map +1 -0
  67. package/dist/cliproxy/auth/oauth-trace/redactor.js +112 -0
  68. package/dist/cliproxy/auth/oauth-trace/redactor.js.map +1 -0
  69. package/dist/cliproxy/auth/oauth-trace/sink-file.d.ts +18 -0
  70. package/dist/cliproxy/auth/oauth-trace/sink-file.d.ts.map +1 -0
  71. package/dist/cliproxy/auth/oauth-trace/sink-file.js +90 -0
  72. package/dist/cliproxy/auth/oauth-trace/sink-file.js.map +1 -0
  73. package/dist/cliproxy/auth/oauth-trace/sink-memory.d.ts +13 -0
  74. package/dist/cliproxy/auth/oauth-trace/sink-memory.d.ts.map +1 -0
  75. package/dist/cliproxy/auth/oauth-trace/sink-memory.js +31 -0
  76. package/dist/cliproxy/auth/oauth-trace/sink-memory.js.map +1 -0
  77. package/dist/cliproxy/auth/oauth-trace/sink-verbose-stdout.d.ts +11 -0
  78. package/dist/cliproxy/auth/oauth-trace/sink-verbose-stdout.d.ts.map +1 -0
  79. package/dist/cliproxy/auth/oauth-trace/sink-verbose-stdout.js +47 -0
  80. package/dist/cliproxy/auth/oauth-trace/sink-verbose-stdout.js.map +1 -0
  81. package/dist/cliproxy/auth/oauth-trace/trace-events.d.ts +51 -0
  82. package/dist/cliproxy/auth/oauth-trace/trace-events.d.ts.map +1 -0
  83. package/dist/cliproxy/auth/oauth-trace/trace-events.js +44 -0
  84. package/dist/cliproxy/auth/oauth-trace/trace-events.js.map +1 -0
  85. package/dist/cliproxy/auth/oauth-trace/trace-recorder.d.ts +34 -0
  86. package/dist/cliproxy/auth/oauth-trace/trace-recorder.d.ts.map +1 -0
  87. package/dist/cliproxy/auth/oauth-trace/trace-recorder.js +83 -0
  88. package/dist/cliproxy/auth/oauth-trace/trace-recorder.js.map +1 -0
  89. package/dist/commands/command-catalog.d.ts +1 -1
  90. package/dist/commands/command-catalog.d.ts.map +1 -1
  91. package/dist/commands/command-catalog.js +1 -0
  92. package/dist/commands/command-catalog.js.map +1 -1
  93. package/dist/commands/completion-backend.d.ts.map +1 -1
  94. package/dist/commands/completion-backend.js +7 -0
  95. package/dist/commands/completion-backend.js.map +1 -1
  96. package/dist/commands/help-command.d.ts.map +1 -1
  97. package/dist/commands/help-command.js +1 -0
  98. package/dist/commands/help-command.js.map +1 -1
  99. package/dist/commands/sync-command.d.ts.map +1 -1
  100. package/dist/commands/sync-command.js +3 -2
  101. package/dist/commands/sync-command.js.map +1 -1
  102. package/dist/config/migration-manager.d.ts.map +1 -1
  103. package/dist/config/migration-manager.js +12 -0
  104. package/dist/config/migration-manager.js.map +1 -1
  105. package/dist/config/schemas/auth.d.ts +2 -0
  106. package/dist/config/schemas/auth.d.ts.map +1 -1
  107. package/dist/config/schemas/auth.js.map +1 -1
  108. package/dist/dispatcher/flows/account-flow.d.ts.map +1 -1
  109. package/dist/dispatcher/flows/account-flow.js +4 -3
  110. package/dist/dispatcher/flows/account-flow.js.map +1 -1
  111. package/dist/shared/claude-extension-setup.d.ts.map +1 -1
  112. package/dist/shared/claude-extension-setup.js +5 -1
  113. package/dist/shared/claude-extension-setup.js.map +1 -1
  114. package/dist/types/config.d.ts +2 -0
  115. package/dist/types/config.d.ts.map +1 -1
  116. package/dist/types/config.js.map +1 -1
  117. package/dist/ui/assets/accounts-CW9bbE4S.js +1 -0
  118. package/dist/ui/assets/{alert-dialog-BM9gIsRp.js → alert-dialog-ClPYGzV3.js} +1 -1
  119. package/dist/ui/assets/{api-0YJdilQb.js → api-BjpAFHdA.js} +1 -1
  120. package/dist/ui/assets/{auth-section-C1ljCo7W.js → auth-section-wl4-fzwD.js} +1 -1
  121. package/dist/ui/assets/{backups-section-C-iLf1kg.js → backups-section-CRfyOhtX.js} +1 -1
  122. package/dist/ui/assets/{channels-DDSqllsQ.js → channels-DH0HkSGX.js} +1 -1
  123. package/dist/ui/assets/{checkbox-5R1YTubE.js → checkbox-CTpEjpTH.js} +1 -1
  124. package/dist/ui/assets/{claude-extension-CEGefl3-.js → claude-extension-BQOBO5Au.js} +1 -1
  125. package/dist/ui/assets/{cliproxy-ai-providers-DVF3FnXM.js → cliproxy-ai-providers-DoUPKyI5.js} +1 -1
  126. package/dist/ui/assets/{cliproxy-control-panel-CIsKyGK6.js → cliproxy-control-panel-CvjXdHw9.js} +1 -1
  127. package/dist/ui/assets/{cliproxy-R4kPUeL-.js → cliproxy-qUbiZjec.js} +2 -2
  128. package/dist/ui/assets/{codex-BiEEUC4Y.js → codex-BeeazJpw.js} +1 -1
  129. package/dist/ui/assets/{confirm-dialog-BhJV4F_d.js → confirm-dialog-CYj_LLWN.js} +1 -1
  130. package/dist/ui/assets/{copilot-DgRLuQfV.js → copilot-ZCJeM_Zk.js} +1 -1
  131. package/dist/ui/assets/{cursor-BuOjfajj.js → cursor-CtBjQ1_j.js} +1 -1
  132. package/dist/ui/assets/{droid-BPiviAW2.js → droid-BLmzMBtN.js} +1 -1
  133. package/dist/ui/assets/{globalenv-section-DAqbiNI1.js → globalenv-section-0ENDeVbM.js} +1 -1
  134. package/dist/ui/assets/{health-B_CfF7J0.js → health-BEnDHk-j.js} +1 -1
  135. package/dist/ui/assets/{icons-DIVjDO-z.js → icons-DzKUh8vG.js} +1 -1
  136. package/dist/ui/assets/{index-CzKdWNe5.js → index-B3xma6R0.js} +1 -1
  137. package/dist/ui/assets/{index-BJl0cazY.js → index-Bs28kNJN.js} +27 -27
  138. package/dist/ui/assets/{index-BqR6NZDE.js → index-C04Kst21.js} +1 -1
  139. package/dist/ui/assets/{index-Cj4mWFVK.js → index-Cip18A41.js} +1 -1
  140. package/dist/ui/assets/{index-Bc-AbZRU.js → index-ClMz157R.js} +1 -1
  141. package/dist/ui/assets/index-D2_yb3d2.css +1 -0
  142. package/dist/ui/assets/{index-BEGD-4HR.js → index-DrCrZ7r1.js} +1 -1
  143. package/dist/ui/assets/{index-LJitUhfE.js → index-O9Qq-UJq.js} +1 -1
  144. package/dist/ui/assets/{logs-Lqv-I3_T.js → logs-DQxVdsHm.js} +1 -1
  145. package/dist/ui/assets/{masked-input-CgCDYXYf.js → masked-input-eN6tFUjN.js} +1 -1
  146. package/dist/ui/assets/{proxy-status-widget-Df-4cfdm.js → proxy-status-widget-50UIM6S8.js} +1 -1
  147. package/dist/ui/assets/{raw-json-settings-editor-panel-BpXdUisD.js → raw-json-settings-editor-panel-DqKmVWL-.js} +1 -1
  148. package/dist/ui/assets/{searchable-select-DCOfw3f0.js → searchable-select-JO0gngYE.js} +1 -1
  149. package/dist/ui/assets/{separator-Ct6a34bG.js → separator-AoncAA6l.js} +1 -1
  150. package/dist/ui/assets/shared-BTv96-3y.js +8 -0
  151. package/dist/ui/assets/{table-DsU2UX-e.js → table-BM_YK49c.js} +1 -1
  152. package/dist/ui/assets/{updates-D-0gOqSU.js → updates-eo4H4NOg.js} +1 -1
  153. package/dist/ui/assets/use-accounts-ELLatpzU.js +1 -0
  154. package/dist/ui/index.html +3 -3
  155. package/dist/web-server/routes/account-route-helpers.d.ts +3 -0
  156. package/dist/web-server/routes/account-route-helpers.d.ts.map +1 -1
  157. package/dist/web-server/routes/account-route-helpers.js.map +1 -1
  158. package/dist/web-server/routes/account-routes.d.ts.map +1 -1
  159. package/dist/web-server/routes/account-routes.js +97 -4
  160. package/dist/web-server/routes/account-routes.js.map +1 -1
  161. package/dist/web-server/routes/cliproxy-auth-routes.d.ts.map +1 -1
  162. package/dist/web-server/routes/cliproxy-auth-routes.js +29 -0
  163. package/dist/web-server/routes/cliproxy-auth-routes.js.map +1 -1
  164. package/dist/web-server/shared-routes-collections.d.ts +13 -0
  165. package/dist/web-server/shared-routes-collections.d.ts.map +1 -0
  166. package/dist/web-server/shared-routes-collections.js +170 -0
  167. package/dist/web-server/shared-routes-collections.js.map +1 -0
  168. package/dist/web-server/shared-routes-content.d.ts +16 -0
  169. package/dist/web-server/shared-routes-content.d.ts.map +1 -0
  170. package/dist/web-server/shared-routes-content.js +152 -0
  171. package/dist/web-server/shared-routes-content.js.map +1 -0
  172. package/dist/web-server/shared-routes-markdown-walker.d.ts +12 -0
  173. package/dist/web-server/shared-routes-markdown-walker.d.ts.map +1 -0
  174. package/dist/web-server/shared-routes-markdown-walker.js +97 -0
  175. package/dist/web-server/shared-routes-markdown-walker.js.map +1 -0
  176. package/dist/web-server/shared-routes-markdown.d.ts +18 -0
  177. package/dist/web-server/shared-routes-markdown.d.ts.map +1 -0
  178. package/dist/web-server/shared-routes-markdown.js +167 -0
  179. package/dist/web-server/shared-routes-markdown.js.map +1 -0
  180. package/dist/web-server/shared-routes-path-guards.d.ts +16 -0
  181. package/dist/web-server/shared-routes-path-guards.d.ts.map +1 -0
  182. package/dist/web-server/shared-routes-path-guards.js +93 -0
  183. package/dist/web-server/shared-routes-path-guards.js.map +1 -0
  184. package/dist/web-server/shared-routes-plugin-registry-content.d.ts +12 -0
  185. package/dist/web-server/shared-routes-plugin-registry-content.d.ts.map +1 -0
  186. package/dist/web-server/shared-routes-plugin-registry-content.js +93 -0
  187. package/dist/web-server/shared-routes-plugin-registry-content.js.map +1 -0
  188. package/dist/web-server/shared-routes-plugins.d.ts +21 -0
  189. package/dist/web-server/shared-routes-plugins.d.ts.map +1 -0
  190. package/dist/web-server/shared-routes-plugins.js +197 -0
  191. package/dist/web-server/shared-routes-plugins.js.map +1 -0
  192. package/dist/web-server/shared-routes-symlink-status.d.ts +27 -0
  193. package/dist/web-server/shared-routes-symlink-status.d.ts.map +1 -0
  194. package/dist/web-server/shared-routes-symlink-status.js +135 -0
  195. package/dist/web-server/shared-routes-symlink-status.js.map +1 -0
  196. package/dist/web-server/shared-routes-types.d.ts +23 -0
  197. package/dist/web-server/shared-routes-types.d.ts.map +1 -0
  198. package/dist/web-server/shared-routes-types.js +15 -0
  199. package/dist/web-server/shared-routes-types.js.map +1 -0
  200. package/dist/web-server/shared-routes.d.ts +2 -1
  201. package/dist/web-server/shared-routes.d.ts.map +1 -1
  202. package/dist/web-server/shared-routes.js +49 -455
  203. package/dist/web-server/shared-routes.js.map +1 -1
  204. package/package.json +1 -1
  205. package/dist/ui/assets/accounts-DkID6f81.js +0 -1
  206. package/dist/ui/assets/index-Cm0qoAXb.css +0 -1
  207. package/dist/ui/assets/shared-D-JFc_Cw.js +0 -8
@@ -2,7 +2,8 @@
2
2
  /**
3
3
  * Shared Data Routes (Phase 07)
4
4
  *
5
- * API routes for commands, skills, agents from ~/.ccs/shared/
5
+ * Thin Express router delegates all logic to focused sub-modules.
6
+ * API routes for commands, skills, agents, and plugins from ~/.ccs/shared/
6
7
  */
7
8
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
8
9
  if (k2 === undefined) k2 = k;
@@ -32,50 +33,59 @@ exports.sharedRoutes = void 0;
32
33
  const express_1 = require("express");
33
34
  const fs = __importStar(require("fs"));
34
35
  const path = __importStar(require("path"));
35
- const yaml = __importStar(require("js-yaml"));
36
- const claude_config_path_1 = require("../utils/claude-config-path");
37
- const auth_middleware_1 = require("./middleware/auth-middleware");
38
36
  const config_loader_facade_1 = require("../config/config-loader-facade");
37
+ const auth_middleware_1 = require("./middleware/auth-middleware");
38
+ const shared_routes_types_1 = require("./shared-routes-types");
39
+ const shared_routes_path_guards_1 = require("./shared-routes-path-guards");
40
+ const shared_routes_collections_1 = require("./shared-routes-collections");
41
+ const shared_routes_content_1 = require("./shared-routes-content");
42
+ const shared_routes_symlink_status_1 = require("./shared-routes-symlink-status");
43
+ /** Strips extended fields so the summary endpoint stays wire-compatible. */
44
+ function symlinkStatusForSummary() {
45
+ const { valid, message } = (0, shared_routes_symlink_status_1.checkSymlinkStatus)();
46
+ return { valid, message };
47
+ }
39
48
  exports.sharedRoutes = (0, express_1.Router)();
40
49
  exports.sharedRoutes.use((req, res, next) => {
41
50
  if ((0, auth_middleware_1.requireLocalAccessWhenAuthDisabled)(req, res, 'Shared-content endpoints require localhost access when dashboard auth is disabled.')) {
42
51
  next();
43
52
  }
44
53
  });
45
- const MAX_DIRECTORY_TRAVERSAL_DEPTH = 10;
46
- const MAX_DESCRIPTION_LENGTH = 140;
47
- const MAX_MARKDOWN_FILE_BYTES = 1024 * 1024; // 1 MiB
48
- const MAX_CONTENT_FILE_BYTES = 2 * 1024 * 1024; // 2 MiB
49
- const SHARED_ITEMS_CACHE_TTL_MS = 1000;
50
- const sharedItemsCache = new Map();
51
54
  /**
52
55
  * GET /api/shared/commands
53
56
  */
54
57
  exports.sharedRoutes.get('/commands', (_req, res) => {
55
- const items = getSharedItems('commands');
58
+ const items = (0, shared_routes_collections_1.getSharedItems)('commands');
56
59
  res.json({ items });
57
60
  });
58
61
  /**
59
62
  * GET /api/shared/skills
60
63
  */
61
64
  exports.sharedRoutes.get('/skills', (_req, res) => {
62
- const items = getSharedItems('skills');
65
+ const items = (0, shared_routes_collections_1.getSharedItems)('skills');
63
66
  res.json({ items });
64
67
  });
65
68
  /**
66
69
  * GET /api/shared/agents
67
70
  */
68
71
  exports.sharedRoutes.get('/agents', (_req, res) => {
69
- const items = getSharedItems('agents');
72
+ const items = (0, shared_routes_collections_1.getSharedItems)('agents');
73
+ res.json({ items });
74
+ });
75
+ /**
76
+ * GET /api/shared/plugins
77
+ */
78
+ exports.sharedRoutes.get('/plugins', (_req, res) => {
79
+ const items = (0, shared_routes_collections_1.getSharedItems)('plugins');
70
80
  res.json({ items });
71
81
  });
72
82
  /**
73
- * GET /api/shared/content?type=commands|skills|agents&path=<item-path>
83
+ * GET /api/shared/content?type=commands|skills|agents|plugins|settings&path=<item-path>
74
84
  */
75
85
  exports.sharedRoutes.get('/content', (req, res) => {
76
86
  const typeParam = req.query.type;
77
87
  const itemPathParam = req.query.path;
78
- if (!isSharedCollectionType(typeParam)) {
88
+ if (!(0, shared_routes_types_1.isSharedContentType)(typeParam)) {
79
89
  res.status(400).json({ error: 'Invalid or missing type parameter' });
80
90
  return;
81
91
  }
@@ -84,14 +94,16 @@ exports.sharedRoutes.get('/content', (req, res) => {
84
94
  return;
85
95
  }
86
96
  const ccsDir = (0, config_loader_facade_1.getCcsDir)();
87
- const sharedDir = path.join(ccsDir, 'shared', typeParam);
97
+ const sharedDir = typeParam === 'settings' ? path.join(ccsDir, 'shared') : path.join(ccsDir, 'shared', typeParam);
88
98
  if (!fs.existsSync(sharedDir)) {
89
99
  res.status(404).json({ error: 'Shared directory not found' });
90
100
  return;
91
101
  }
92
- const sharedDirRoot = safeRealPath(sharedDir) ?? path.resolve(sharedDir);
93
- const allowedRoots = resolveAllowedRoots(typeParam, ccsDir, sharedDirRoot);
94
- const contentResult = getSharedItemContent(typeParam, itemPathParam, allowedRoots);
102
+ const sharedDirRoot = (0, shared_routes_path_guards_1.safeRealPath)(sharedDir) ?? path.resolve(sharedDir);
103
+ const allowedRoots = typeParam === 'settings'
104
+ ? (0, shared_routes_path_guards_1.resolveSettingsAllowedRoots)(ccsDir, sharedDirRoot)
105
+ : (0, shared_routes_path_guards_1.resolveAllowedRoots)(typeParam, ccsDir, sharedDirRoot);
106
+ const contentResult = (0, shared_routes_content_1.getSharedItemContent)(typeParam, itemPathParam, allowedRoots, sharedDirRoot);
95
107
  if (!contentResult) {
96
108
  res.status(404).json({ error: 'Shared content not found' });
97
109
  return;
@@ -102,446 +114,28 @@ exports.sharedRoutes.get('/content', (req, res) => {
102
114
  * GET /api/shared/summary
103
115
  */
104
116
  exports.sharedRoutes.get('/summary', (_req, res) => {
105
- const commands = getSharedItems('commands').length;
106
- const skills = getSharedItems('skills').length;
107
- const agents = getSharedItems('agents').length;
117
+ const commands = (0, shared_routes_collections_1.getSharedItems)('commands').length;
118
+ const skills = (0, shared_routes_collections_1.getSharedItems)('skills').length;
119
+ const agents = (0, shared_routes_collections_1.getSharedItems)('agents').length;
120
+ const plugins = (0, shared_routes_collections_1.getSharedItems)('plugins').length;
121
+ const ccsDir = (0, config_loader_facade_1.getCcsDir)();
122
+ const settingsPath = path.join(ccsDir, 'shared', 'settings.json');
123
+ const sharedDirRoot = (0, shared_routes_path_guards_1.safeRealPath)(path.join(ccsDir, 'shared'));
124
+ const resolvedSettingsPath = (0, shared_routes_path_guards_1.safeRealPath)(settingsPath);
125
+ const settingsAllowedRoots = sharedDirRoot
126
+ ? (0, shared_routes_path_guards_1.resolveSettingsAllowedRoots)(ccsDir, sharedDirRoot)
127
+ : new Set();
128
+ const hasSettings = Boolean(sharedDirRoot) &&
129
+ Boolean(resolvedSettingsPath) &&
130
+ (0, shared_routes_path_guards_1.isPathWithinAny)(resolvedSettingsPath, settingsAllowedRoots);
108
131
  res.json({
109
132
  commands,
110
133
  skills,
111
134
  agents,
112
- total: commands + skills + agents,
113
- symlinkStatus: checkSymlinkStatus(),
135
+ plugins,
136
+ settings: hasSettings,
137
+ total: commands + skills + agents + plugins + (hasSettings ? 1 : 0),
138
+ symlinkStatus: symlinkStatusForSummary(),
114
139
  });
115
140
  });
116
- function isSharedCollectionType(value) {
117
- return value === 'commands' || value === 'skills' || value === 'agents';
118
- }
119
- function resolveAllowedRoots(type, ccsDir, sharedDirRoot) {
120
- if (type === 'commands') {
121
- return new Set([sharedDirRoot]);
122
- }
123
- return new Set([
124
- sharedDirRoot,
125
- ...[
126
- path.join((0, claude_config_path_1.getClaudeConfigDir)(), type),
127
- path.join(ccsDir, '.claude', type),
128
- path.join(ccsDir, 'shared', type),
129
- ]
130
- .map((dirPath) => safeRealPath(dirPath))
131
- .filter((dirPath) => typeof dirPath === 'string'),
132
- ]);
133
- }
134
- function getSharedItems(type) {
135
- const ccsDir = (0, config_loader_facade_1.getCcsDir)();
136
- const sharedDir = path.join(ccsDir, 'shared', type);
137
- const now = Date.now();
138
- if (!fs.existsSync(sharedDir)) {
139
- sharedItemsCache.delete(type);
140
- return [];
141
- }
142
- const cached = sharedItemsCache.get(type);
143
- if (cached && cached.sharedDir === sharedDir && cached.expiresAt > now) {
144
- return cached.items;
145
- }
146
- const items = [];
147
- const sharedDirRoot = safeRealPath(sharedDir) ?? path.resolve(sharedDir);
148
- const allowedRoots = resolveAllowedRoots(type, ccsDir, sharedDirRoot);
149
- if (type === 'commands') {
150
- const commandItems = getCommandItems(sharedDir, allowedRoots);
151
- sharedItemsCache.set(type, {
152
- items: commandItems,
153
- sharedDir,
154
- expiresAt: now + SHARED_ITEMS_CACHE_TTL_MS,
155
- });
156
- return commandItems;
157
- }
158
- try {
159
- const entries = fs.readdirSync(sharedDir, { withFileTypes: true });
160
- for (const entry of entries) {
161
- try {
162
- const entryPath = path.join(sharedDir, entry.name);
163
- const resolvedEntryPath = safeRealPath(entryPath);
164
- if (!resolvedEntryPath || !isPathWithinAny(resolvedEntryPath, allowedRoots)) {
165
- continue;
166
- }
167
- const stats = fs.statSync(resolvedEntryPath);
168
- const item = getSkillOrAgentItem(type, entry, entryPath, resolvedEntryPath, allowedRoots, stats);
169
- if (!item) {
170
- continue;
171
- }
172
- items.push(item);
173
- }
174
- catch {
175
- // Fail soft per entry so one bad item does not hide valid results.
176
- }
177
- }
178
- }
179
- catch {
180
- // Directory read failed
181
- }
182
- const sortedItems = items.sort((a, b) => a.name.localeCompare(b.name));
183
- sharedItemsCache.set(type, {
184
- items: sortedItems,
185
- sharedDir,
186
- expiresAt: now + SHARED_ITEMS_CACHE_TTL_MS,
187
- });
188
- return sortedItems;
189
- }
190
- function getCommandItems(sharedDir, allowedRoots) {
191
- const markdownFiles = collectMarkdownFiles(sharedDir, allowedRoots);
192
- const items = [];
193
- for (const markdownFile of markdownFiles) {
194
- const description = readMarkdownDescription(markdownFile.resolvedPath, allowedRoots);
195
- if (!description) {
196
- continue;
197
- }
198
- const relativePath = path.relative(sharedDir, markdownFile.displayPath);
199
- const normalizedName = relativePath.split(path.sep).join('/').replace(/\.md$/i, '');
200
- if (!normalizedName) {
201
- continue;
202
- }
203
- items.push({
204
- name: normalizedName,
205
- description,
206
- path: markdownFile.displayPath,
207
- type: 'command',
208
- });
209
- }
210
- return items.sort((a, b) => a.name.localeCompare(b.name));
211
- }
212
- function getSkillOrAgentItem(type, entry, entryPath, resolvedEntryPath, allowedRoots, stats) {
213
- if (type === 'skills') {
214
- if (!stats.isDirectory()) {
215
- return null;
216
- }
217
- const description = readMarkdownDescription(path.join(resolvedEntryPath, 'SKILL.md'), allowedRoots);
218
- if (!description) {
219
- return null;
220
- }
221
- return {
222
- name: entry.name,
223
- description,
224
- path: entryPath,
225
- type: 'skill',
226
- };
227
- }
228
- if (stats.isDirectory()) {
229
- const description = readFirstMarkdownDescription([
230
- path.join(resolvedEntryPath, 'prompt.md'),
231
- path.join(resolvedEntryPath, 'AGENT.md'),
232
- path.join(resolvedEntryPath, 'agent.md'),
233
- ], allowedRoots);
234
- if (!description) {
235
- return null;
236
- }
237
- return {
238
- name: entry.name,
239
- description,
240
- path: entryPath,
241
- type: 'agent',
242
- };
243
- }
244
- if (!stats.isFile() || !entry.name.toLowerCase().endsWith('.md')) {
245
- return null;
246
- }
247
- const description = readMarkdownDescription(resolvedEntryPath, allowedRoots);
248
- if (!description) {
249
- return null;
250
- }
251
- return {
252
- name: entry.name.replace(/\.md$/i, ''),
253
- description,
254
- path: entryPath,
255
- type: 'agent',
256
- };
257
- }
258
- function collectMarkdownFiles(sharedDir, allowedRoots) {
259
- const directoriesToVisit = [
260
- { path: sharedDir, depth: 0 },
261
- ];
262
- const visitedDirectories = new Set();
263
- const markdownFiles = [];
264
- while (directoriesToVisit.length > 0) {
265
- const current = directoriesToVisit.pop();
266
- if (!current) {
267
- continue;
268
- }
269
- const currentDir = current.path;
270
- const resolvedCurrentDir = safeRealPath(currentDir);
271
- if (!resolvedCurrentDir || !isPathWithinAny(resolvedCurrentDir, allowedRoots)) {
272
- continue;
273
- }
274
- const normalizedDirPath = normalizeForPathComparison(resolvedCurrentDir);
275
- if (visitedDirectories.has(normalizedDirPath)) {
276
- continue;
277
- }
278
- visitedDirectories.add(normalizedDirPath);
279
- let entries = [];
280
- try {
281
- entries = fs.readdirSync(currentDir, { withFileTypes: true });
282
- }
283
- catch {
284
- continue;
285
- }
286
- for (const entry of entries) {
287
- const entryPath = path.join(currentDir, entry.name);
288
- const resolvedEntryPath = safeRealPath(entryPath);
289
- if (!resolvedEntryPath || !isPathWithinAny(resolvedEntryPath, allowedRoots)) {
290
- continue;
291
- }
292
- let stats;
293
- try {
294
- stats = fs.statSync(resolvedEntryPath);
295
- }
296
- catch {
297
- continue;
298
- }
299
- if (stats.isDirectory()) {
300
- if (current.depth < MAX_DIRECTORY_TRAVERSAL_DEPTH) {
301
- directoriesToVisit.push({ path: entryPath, depth: current.depth + 1 });
302
- }
303
- continue;
304
- }
305
- if (stats.isFile() && entry.name.toLowerCase().endsWith('.md')) {
306
- markdownFiles.push({
307
- displayPath: entryPath,
308
- resolvedPath: resolvedEntryPath,
309
- });
310
- }
311
- }
312
- }
313
- return markdownFiles;
314
- }
315
- function extractDescription(content) {
316
- const frontmatterDescription = extractFrontmatterDescription(content);
317
- if (frontmatterDescription) {
318
- return trimDescription(frontmatterDescription);
319
- }
320
- // Extract first non-empty, non-heading line from the markdown body.
321
- const lines = stripFrontmatter(content).split('\n');
322
- for (const line of lines) {
323
- const trimmed = line.trim();
324
- if (isDescriptionBodyLine(trimmed)) {
325
- return trimDescription(trimmed);
326
- }
327
- }
328
- return 'No description';
329
- }
330
- function isDescriptionBodyLine(line) {
331
- if (!line) {
332
- return false;
333
- }
334
- if (line === '---' || line === '...') {
335
- return false;
336
- }
337
- return !line.startsWith('#') && !line.startsWith('<!--');
338
- }
339
- function extractFrontmatterDescription(content) {
340
- const frontmatterMatch = content.match(/^---\s*\r?\n([\s\S]*?)\r?\n---(?:\s*\r?\n|$)/);
341
- if (!frontmatterMatch) {
342
- return null;
343
- }
344
- try {
345
- const parsed = yaml.load(frontmatterMatch[1]);
346
- const description = parsed?.description;
347
- if (typeof description !== 'string') {
348
- return null;
349
- }
350
- const trimmed = description.trim();
351
- return trimmed.length > 0 ? trimmed : null;
352
- }
353
- catch {
354
- return null;
355
- }
356
- }
357
- function stripFrontmatter(content) {
358
- return content.replace(/^---\s*\r?\n[\s\S]*?\r?\n---\s*\r?\n?/, '');
359
- }
360
- function trimDescription(description) {
361
- if (description.length <= MAX_DESCRIPTION_LENGTH) {
362
- return description;
363
- }
364
- return `${description.slice(0, MAX_DESCRIPTION_LENGTH - 3).trimEnd()}...`;
365
- }
366
- function readFirstMarkdownDescription(markdownPaths, allowedRoots) {
367
- for (const markdownPath of markdownPaths) {
368
- const description = readMarkdownDescription(markdownPath, allowedRoots);
369
- if (description) {
370
- return description;
371
- }
372
- }
373
- return null;
374
- }
375
- function readMarkdownDescription(markdownPath, allowedRoots) {
376
- try {
377
- const resolvedMarkdownPath = safeRealPath(markdownPath);
378
- if (!resolvedMarkdownPath || !isPathWithinAny(resolvedMarkdownPath, allowedRoots)) {
379
- return null;
380
- }
381
- const stats = fs.statSync(resolvedMarkdownPath);
382
- if (!stats.isFile()) {
383
- return null;
384
- }
385
- if (stats.size > MAX_MARKDOWN_FILE_BYTES) {
386
- return null;
387
- }
388
- const content = fs.readFileSync(resolvedMarkdownPath, 'utf8');
389
- return extractDescription(content);
390
- }
391
- catch {
392
- return null;
393
- }
394
- }
395
- function readMarkdownContent(markdownPath, allowedRoots) {
396
- try {
397
- const resolvedMarkdownPath = safeRealPath(markdownPath);
398
- if (!resolvedMarkdownPath || !isPathWithinAny(resolvedMarkdownPath, allowedRoots)) {
399
- return null;
400
- }
401
- const stats = fs.statSync(resolvedMarkdownPath);
402
- if (!stats.isFile()) {
403
- return null;
404
- }
405
- if (stats.size > MAX_CONTENT_FILE_BYTES) {
406
- return null;
407
- }
408
- return fs.readFileSync(resolvedMarkdownPath, 'utf8');
409
- }
410
- catch {
411
- return null;
412
- }
413
- }
414
- function resolveReadableMarkdownPath(markdownPaths, allowedRoots) {
415
- for (const markdownPath of markdownPaths) {
416
- const resolvedMarkdownPath = safeRealPath(markdownPath);
417
- if (!resolvedMarkdownPath || !isPathWithinAny(resolvedMarkdownPath, allowedRoots)) {
418
- continue;
419
- }
420
- try {
421
- const stats = fs.statSync(resolvedMarkdownPath);
422
- if (!stats.isFile() || stats.size > MAX_CONTENT_FILE_BYTES) {
423
- continue;
424
- }
425
- return resolvedMarkdownPath;
426
- }
427
- catch {
428
- continue;
429
- }
430
- }
431
- return null;
432
- }
433
- function getSharedItemContent(type, itemPath, allowedRoots) {
434
- const resolvedItemPath = safeRealPath(itemPath);
435
- if (!resolvedItemPath || !isPathWithinAny(resolvedItemPath, allowedRoots)) {
436
- return null;
437
- }
438
- let itemStats;
439
- try {
440
- itemStats = fs.statSync(resolvedItemPath);
441
- }
442
- catch {
443
- return null;
444
- }
445
- let markdownPath = null;
446
- if (type === 'commands') {
447
- if (!itemStats.isFile() || !itemPath.toLowerCase().endsWith('.md')) {
448
- return null;
449
- }
450
- markdownPath = resolvedItemPath;
451
- }
452
- else if (type === 'skills') {
453
- if (!itemStats.isDirectory()) {
454
- return null;
455
- }
456
- markdownPath = resolveReadableMarkdownPath([path.join(resolvedItemPath, 'SKILL.md')], allowedRoots);
457
- }
458
- else {
459
- if (itemStats.isDirectory()) {
460
- markdownPath = resolveReadableMarkdownPath([
461
- path.join(resolvedItemPath, 'prompt.md'),
462
- path.join(resolvedItemPath, 'AGENT.md'),
463
- path.join(resolvedItemPath, 'agent.md'),
464
- ], allowedRoots);
465
- }
466
- else if (itemStats.isFile() && itemPath.toLowerCase().endsWith('.md')) {
467
- markdownPath = resolvedItemPath;
468
- }
469
- }
470
- if (!markdownPath) {
471
- return null;
472
- }
473
- const content = readMarkdownContent(markdownPath, allowedRoots);
474
- if (!content) {
475
- return null;
476
- }
477
- return {
478
- content,
479
- contentPath: markdownPath,
480
- };
481
- }
482
- function safeRealPath(targetPath) {
483
- try {
484
- return fs.realpathSync(targetPath);
485
- }
486
- catch {
487
- return null;
488
- }
489
- }
490
- function isPathWithin(candidatePath, basePath) {
491
- const normalizedCandidate = normalizeForPathComparison(candidatePath);
492
- const normalizedBase = normalizeForPathComparison(basePath);
493
- const relative = path.relative(normalizedBase, normalizedCandidate);
494
- return relative === '' || (!relative.startsWith('..') && !path.isAbsolute(relative));
495
- }
496
- function isPathWithinAny(candidatePath, basePaths) {
497
- for (const basePath of basePaths) {
498
- if (isPathWithin(candidatePath, basePath)) {
499
- return true;
500
- }
501
- }
502
- return false;
503
- }
504
- function normalizeForPathComparison(targetPath) {
505
- const normalized = path.resolve(targetPath);
506
- return process.platform === 'win32' ? normalized.toLowerCase() : normalized;
507
- }
508
- function checkSymlinkStatus() {
509
- const ccsDir = (0, config_loader_facade_1.getCcsDir)();
510
- const sharedDir = path.join(ccsDir, 'shared');
511
- if (!fs.existsSync(sharedDir)) {
512
- return { valid: false, message: 'Shared directory not found' };
513
- }
514
- // Check all three symlinks: commands, skills, agents
515
- const linkTypes = ['commands', 'skills', 'agents'];
516
- let validLinks = 0;
517
- for (const linkType of linkTypes) {
518
- const linkPath = path.join(sharedDir, linkType);
519
- try {
520
- if (fs.existsSync(linkPath)) {
521
- const stats = fs.lstatSync(linkPath);
522
- if (stats.isSymbolicLink()) {
523
- const target = fs.readlinkSync(linkPath);
524
- // Check if it points to Claude config dir.
525
- const expectedTarget = path.join((0, claude_config_path_1.getClaudeConfigDir)(), linkType);
526
- if (path.resolve(path.dirname(linkPath), target) === path.resolve(expectedTarget)) {
527
- validLinks++;
528
- }
529
- }
530
- }
531
- }
532
- catch {
533
- // Not a symlink or read error
534
- }
535
- }
536
- if (validLinks === linkTypes.length) {
537
- return { valid: true, message: 'Symlinks active' };
538
- }
539
- else if (validLinks > 0) {
540
- return {
541
- valid: false,
542
- message: `Symlinks partially configured (${validLinks}/${linkTypes.length})`,
543
- };
544
- }
545
- return { valid: false, message: 'Symlinks not configured' };
546
- }
547
141
  //# sourceMappingURL=shared-routes.js.map
@@ -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.77.1-dev.9",
3
+ "version": "7.78.0",
4
4
  "description": "Claude Code Switch - Instant profile switching between Claude, GLM, Kimi, and more",
5
5
  "keywords": [
6
6
  "cli",