@kaitranntt/ccs 7.77.1 → 7.78.0-dev.10
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.
- package/README.md +2 -1
- package/dist/auth/account-profile-diagnostics.d.ts +21 -0
- package/dist/auth/account-profile-diagnostics.d.ts.map +1 -0
- package/dist/auth/account-profile-diagnostics.js +130 -0
- package/dist/auth/account-profile-diagnostics.js.map +1 -0
- package/dist/auth/auth-commands.d.ts +2 -1
- package/dist/auth/auth-commands.d.ts.map +1 -1
- package/dist/auth/auth-commands.js +30 -12
- package/dist/auth/auth-commands.js.map +1 -1
- package/dist/auth/commands/backup-command.d.ts.map +1 -1
- package/dist/auth/commands/backup-command.js +7 -2
- package/dist/auth/commands/backup-command.js.map +1 -1
- package/dist/auth/commands/create-command.d.ts.map +1 -1
- package/dist/auth/commands/create-command.js +20 -16
- package/dist/auth/commands/create-command.js.map +1 -1
- package/dist/auth/commands/default-command.d.ts +1 -1
- package/dist/auth/commands/default-command.d.ts.map +1 -1
- package/dist/auth/commands/default-command.js +10 -2
- package/dist/auth/commands/default-command.js.map +1 -1
- package/dist/auth/commands/index.d.ts +1 -0
- package/dist/auth/commands/index.d.ts.map +1 -1
- package/dist/auth/commands/index.js +3 -1
- package/dist/auth/commands/index.js.map +1 -1
- package/dist/auth/commands/list-command.d.ts.map +1 -1
- package/dist/auth/commands/list-command.js +16 -3
- package/dist/auth/commands/list-command.js.map +1 -1
- package/dist/auth/commands/remove-command.d.ts.map +1 -1
- package/dist/auth/commands/remove-command.js +5 -1
- package/dist/auth/commands/remove-command.js.map +1 -1
- package/dist/auth/commands/resources-command.d.ts +3 -0
- package/dist/auth/commands/resources-command.d.ts.map +1 -0
- package/dist/auth/commands/resources-command.js +115 -0
- package/dist/auth/commands/resources-command.js.map +1 -0
- package/dist/auth/commands/show-command.d.ts.map +1 -1
- package/dist/auth/commands/show-command.js +54 -3
- package/dist/auth/commands/show-command.js.map +1 -1
- package/dist/auth/commands/types.d.ts +31 -1
- package/dist/auth/commands/types.d.ts.map +1 -1
- package/dist/auth/commands/types.js +41 -2
- package/dist/auth/commands/types.js.map +1 -1
- package/dist/auth/profile-continuity-inheritance.d.ts.map +1 -1
- package/dist/auth/profile-continuity-inheritance.js +2 -1
- package/dist/auth/profile-continuity-inheritance.js.map +1 -1
- package/dist/auth/profile-detector.d.ts.map +1 -1
- package/dist/auth/profile-detector.js +1 -0
- package/dist/auth/profile-detector.js.map +1 -1
- package/dist/auth/profile-registry.d.ts +2 -0
- package/dist/auth/profile-registry.d.ts.map +1 -1
- package/dist/auth/profile-registry.js +6 -2
- package/dist/auth/profile-registry.js.map +1 -1
- package/dist/auth/shared-resource-policy.d.ts +20 -0
- package/dist/auth/shared-resource-policy.d.ts.map +1 -0
- package/dist/auth/shared-resource-policy.js +69 -0
- package/dist/auth/shared-resource-policy.js.map +1 -0
- package/dist/ccs.js +1 -1
- package/dist/ccs.js.map +1 -1
- package/dist/cliproxy/ai-providers/codex-plan-compatibility.d.ts.map +1 -1
- package/dist/cliproxy/ai-providers/codex-plan-compatibility.js +2 -2
- package/dist/cliproxy/ai-providers/codex-plan-compatibility.js.map +1 -1
- package/dist/cliproxy/ai-providers/codex-reasoning-proxy.d.ts +8 -2
- package/dist/cliproxy/ai-providers/codex-reasoning-proxy.d.ts.map +1 -1
- package/dist/cliproxy/ai-providers/codex-reasoning-proxy.js +82 -33
- package/dist/cliproxy/ai-providers/codex-reasoning-proxy.js.map +1 -1
- package/dist/cliproxy/ai-providers/model-id-normalizer.d.ts +1 -1
- package/dist/cliproxy/ai-providers/model-id-normalizer.d.ts.map +1 -1
- package/dist/cliproxy/ai-providers/model-id-normalizer.js +28 -11
- package/dist/cliproxy/ai-providers/model-id-normalizer.js.map +1 -1
- package/dist/cliproxy/auth/oauth-handler.d.ts +39 -1
- package/dist/cliproxy/auth/oauth-handler.d.ts.map +1 -1
- package/dist/cliproxy/auth/oauth-handler.js +137 -1
- package/dist/cliproxy/auth/oauth-handler.js.map +1 -1
- package/dist/cliproxy/auth/oauth-process.d.ts.map +1 -1
- package/dist/cliproxy/auth/oauth-process.js +94 -3
- package/dist/cliproxy/auth/oauth-process.js.map +1 -1
- package/dist/cliproxy/auth/oauth-start-failure-guidance.d.ts +22 -0
- package/dist/cliproxy/auth/oauth-start-failure-guidance.d.ts.map +1 -0
- package/dist/cliproxy/auth/oauth-start-failure-guidance.js +82 -0
- package/dist/cliproxy/auth/oauth-start-failure-guidance.js.map +1 -0
- package/dist/cliproxy/auth/oauth-trace/diagnose-failure.d.ts +24 -0
- package/dist/cliproxy/auth/oauth-trace/diagnose-failure.d.ts.map +1 -0
- package/dist/cliproxy/auth/oauth-trace/diagnose-failure.js +159 -0
- package/dist/cliproxy/auth/oauth-trace/diagnose-failure.js.map +1 -0
- package/dist/cliproxy/auth/oauth-trace/index.d.ts +4 -0
- package/dist/cliproxy/auth/oauth-trace/index.d.ts.map +1 -0
- package/dist/cliproxy/auth/oauth-trace/index.js +14 -0
- package/dist/cliproxy/auth/oauth-trace/index.js.map +1 -0
- package/dist/cliproxy/auth/oauth-trace/redactor.d.ts +22 -0
- package/dist/cliproxy/auth/oauth-trace/redactor.d.ts.map +1 -0
- package/dist/cliproxy/auth/oauth-trace/redactor.js +112 -0
- package/dist/cliproxy/auth/oauth-trace/redactor.js.map +1 -0
- package/dist/cliproxy/auth/oauth-trace/sink-file.d.ts +18 -0
- package/dist/cliproxy/auth/oauth-trace/sink-file.d.ts.map +1 -0
- package/dist/cliproxy/auth/oauth-trace/sink-file.js +90 -0
- package/dist/cliproxy/auth/oauth-trace/sink-file.js.map +1 -0
- package/dist/cliproxy/auth/oauth-trace/sink-memory.d.ts +13 -0
- package/dist/cliproxy/auth/oauth-trace/sink-memory.d.ts.map +1 -0
- package/dist/cliproxy/auth/oauth-trace/sink-memory.js +31 -0
- package/dist/cliproxy/auth/oauth-trace/sink-memory.js.map +1 -0
- package/dist/cliproxy/auth/oauth-trace/sink-verbose-stdout.d.ts +11 -0
- package/dist/cliproxy/auth/oauth-trace/sink-verbose-stdout.d.ts.map +1 -0
- package/dist/cliproxy/auth/oauth-trace/sink-verbose-stdout.js +47 -0
- package/dist/cliproxy/auth/oauth-trace/sink-verbose-stdout.js.map +1 -0
- package/dist/cliproxy/auth/oauth-trace/trace-events.d.ts +51 -0
- package/dist/cliproxy/auth/oauth-trace/trace-events.d.ts.map +1 -0
- package/dist/cliproxy/auth/oauth-trace/trace-events.js +44 -0
- package/dist/cliproxy/auth/oauth-trace/trace-events.js.map +1 -0
- package/dist/cliproxy/auth/oauth-trace/trace-recorder.d.ts +34 -0
- package/dist/cliproxy/auth/oauth-trace/trace-recorder.d.ts.map +1 -0
- package/dist/cliproxy/auth/oauth-trace/trace-recorder.js +83 -0
- package/dist/cliproxy/auth/oauth-trace/trace-recorder.js.map +1 -0
- package/dist/cliproxy/config/thinking-config.d.ts.map +1 -1
- package/dist/cliproxy/config/thinking-config.js +9 -8
- package/dist/cliproxy/config/thinking-config.js.map +1 -1
- package/dist/cliproxy/model-catalog.d.ts +2 -0
- package/dist/cliproxy/model-catalog.d.ts.map +1 -1
- package/dist/cliproxy/model-catalog.js +2 -0
- package/dist/cliproxy/model-catalog.js.map +1 -1
- package/dist/cliproxy/provider-capabilities.d.ts +3 -0
- package/dist/cliproxy/provider-capabilities.d.ts.map +1 -1
- package/dist/cliproxy/provider-capabilities.js +14 -2
- package/dist/cliproxy/provider-capabilities.js.map +1 -1
- package/dist/cliproxy/services/oauth-usage-log-transformer.d.ts +4 -0
- package/dist/cliproxy/services/oauth-usage-log-transformer.d.ts.map +1 -0
- package/dist/cliproxy/services/oauth-usage-log-transformer.js +162 -0
- package/dist/cliproxy/services/oauth-usage-log-transformer.js.map +1 -0
- package/dist/cliproxy/services/stats-fetcher.d.ts +4 -0
- package/dist/cliproxy/services/stats-fetcher.d.ts.map +1 -1
- package/dist/cliproxy/services/stats-fetcher.js +133 -25
- package/dist/cliproxy/services/stats-fetcher.js.map +1 -1
- package/dist/cliproxy/services/stats-transformer.d.ts.map +1 -1
- package/dist/cliproxy/services/stats-transformer.js +85 -13
- package/dist/cliproxy/services/stats-transformer.js.map +1 -1
- package/dist/cliproxy/services/usage-compatibility-transformer.d.ts +12 -0
- package/dist/cliproxy/services/usage-compatibility-transformer.d.ts.map +1 -0
- package/dist/cliproxy/services/usage-compatibility-transformer.js +458 -0
- package/dist/cliproxy/services/usage-compatibility-transformer.js.map +1 -0
- package/dist/commands/cliproxy/variant-subcommand.d.ts.map +1 -1
- package/dist/commands/cliproxy/variant-subcommand.js +44 -12
- package/dist/commands/cliproxy/variant-subcommand.js.map +1 -1
- package/dist/commands/command-catalog.d.ts +1 -1
- package/dist/commands/command-catalog.d.ts.map +1 -1
- package/dist/commands/command-catalog.js +3 -2
- package/dist/commands/command-catalog.js.map +1 -1
- package/dist/commands/completion-backend.d.ts.map +1 -1
- package/dist/commands/completion-backend.js +7 -0
- package/dist/commands/completion-backend.js.map +1 -1
- package/dist/commands/config-command-options.d.ts.map +1 -1
- package/dist/commands/config-command-options.js +4 -2
- package/dist/commands/config-command-options.js.map +1 -1
- package/dist/commands/config-command.js +1 -1
- package/dist/commands/config-command.js.map +1 -1
- package/dist/commands/config-dashboard-host.d.ts +1 -0
- package/dist/commands/config-dashboard-host.d.ts.map +1 -1
- package/dist/commands/config-dashboard-host.js +2 -1
- package/dist/commands/config-dashboard-host.js.map +1 -1
- package/dist/commands/copilot-command.js +3 -1
- package/dist/commands/copilot-command.js.map +1 -1
- package/dist/commands/help-command.d.ts.map +1 -1
- package/dist/commands/help-command.js +2 -1
- package/dist/commands/help-command.js.map +1 -1
- package/dist/commands/sync-command.d.ts.map +1 -1
- package/dist/commands/sync-command.js +3 -2
- package/dist/commands/sync-command.js.map +1 -1
- package/dist/config/loader/yaml-serializer.d.ts.map +1 -1
- package/dist/config/loader/yaml-serializer.js +4 -3
- package/dist/config/loader/yaml-serializer.js.map +1 -1
- package/dist/config/migration-manager.d.ts.map +1 -1
- package/dist/config/migration-manager.js +12 -0
- package/dist/config/migration-manager.js.map +1 -1
- package/dist/config/schemas/auth.d.ts +2 -0
- package/dist/config/schemas/auth.d.ts.map +1 -1
- package/dist/config/schemas/auth.js.map +1 -1
- package/dist/config/schemas/copilot-cursor.d.ts +2 -2
- package/dist/config/schemas/copilot-cursor.js +1 -1
- package/dist/config/schemas/unified-config.d.ts +1 -1
- package/dist/config/schemas/unified-config.d.ts.map +1 -1
- package/dist/delegation/delegation-handler.d.ts.map +1 -1
- package/dist/delegation/delegation-handler.js +107 -33
- package/dist/delegation/delegation-handler.js.map +1 -1
- package/dist/delegation/headless-executor.js +1 -1
- package/dist/delegation/headless-executor.js.map +1 -1
- package/dist/dispatcher/flows/account-flow.d.ts.map +1 -1
- package/dist/dispatcher/flows/account-flow.js +4 -3
- package/dist/dispatcher/flows/account-flow.js.map +1 -1
- package/dist/dispatcher/flows/settings-flow.js +1 -1
- package/dist/dispatcher/flows/settings-flow.js.map +1 -1
- package/dist/proxy/upstream-url.d.ts.map +1 -1
- package/dist/proxy/upstream-url.js +8 -0
- package/dist/proxy/upstream-url.js.map +1 -1
- package/dist/shared/claude-extension-setup.d.ts.map +1 -1
- package/dist/shared/claude-extension-setup.js +5 -1
- package/dist/shared/claude-extension-setup.js.map +1 -1
- package/dist/shared/provider-preset-catalog.d.ts +1 -1
- package/dist/shared/provider-preset-catalog.d.ts.map +1 -1
- package/dist/shared/provider-preset-catalog.js +1 -1
- package/dist/shared/provider-preset-catalog.js.map +1 -1
- package/dist/types/config.d.ts +2 -0
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/config.js.map +1 -1
- package/dist/ui/assets/accounts-D_ROBWJW.js +1 -0
- package/dist/ui/assets/{alert-dialog-C6npAhT0.js → alert-dialog-CdBSeTf8.js} +1 -1
- package/dist/ui/assets/{api-DZosWVkR.js → api-DZp9XoZ3.js} +1 -1
- package/dist/ui/assets/{auth-section-D4MZkgcP.js → auth-section-CBHPWh8P.js} +1 -1
- package/dist/ui/assets/{backups-section-DvMJrmHH.js → backups-section-BEfeEYNu.js} +1 -1
- package/dist/ui/assets/{channels-BVftYfOn.js → channels-yd4p8uGF.js} +1 -1
- package/dist/ui/assets/{checkbox-BLRznRTO.js → checkbox-O4MS4m31.js} +1 -1
- package/dist/ui/assets/{claude-extension-C6OeBQ73.js → claude-extension-RX6pi5Dq.js} +1 -1
- package/dist/ui/assets/cliproxy-CCPBZ2hk.js +4 -0
- package/dist/ui/assets/{cliproxy-ai-providers-BAJ78pUc.js → cliproxy-ai-providers-CFaY0exX.js} +1 -1
- package/dist/ui/assets/{cliproxy-control-panel-XEvUMVJe.js → cliproxy-control-panel-Co84wmaz.js} +1 -1
- package/dist/ui/assets/{codex-CY2vikqX.js → codex-BndwF_Uy.js} +2 -2
- package/dist/ui/assets/{confirm-dialog-DjLHh1qX.js → confirm-dialog-CuqXEw3c.js} +1 -1
- package/dist/ui/assets/{copilot-afee2lL9.js → copilot-DwVnqcwy.js} +2 -2
- package/dist/ui/assets/{cursor-DuWy60wp.js → cursor-DMk7oeR8.js} +1 -1
- package/dist/ui/assets/{droid-FlceoQ6k.js → droid-BNzpeb07.js} +1 -1
- package/dist/ui/assets/{globalenv-section-DpJ7unxC.js → globalenv-section-BDlzpym6.js} +1 -1
- package/dist/ui/assets/{health-BEMgcKD3.js → health-BQ7Tv1rQ.js} +1 -1
- package/dist/ui/assets/{icons-DQFHtVq5.js → icons-DzKUh8vG.js} +1 -1
- package/dist/ui/assets/{index-Ba4ysocb.js → index-B5Fvdc9D.js} +1 -1
- package/dist/ui/assets/{index-0n_43sCZ.js → index-BQO1Car5.js} +1 -1
- package/dist/ui/assets/index-C-pkmHvH.css +1 -0
- package/dist/ui/assets/{index-Cq9VySs6.js → index-C1oiTZ4n.js} +1 -1
- package/dist/ui/assets/index-CHRUhYJD.js +72 -0
- package/dist/ui/assets/{index-DOC7_hun.js → index-DTFmb_cl.js} +1 -1
- package/dist/ui/assets/{index-Cj7EjEq6.js → index-DgTEmJwC.js} +1 -1
- package/dist/ui/assets/{index-0GkznW41.js → index-dIME7UaU.js} +1 -1
- package/dist/ui/assets/{logs-Dth4naJl.js → logs-BTE4BziS.js} +1 -1
- package/dist/ui/assets/{masked-input-DL6pJ8pE.js → masked-input-FdlUBXx1.js} +1 -1
- package/dist/ui/assets/{proxy-status-widget-DW4cPFeD.js → proxy-status-widget-BHCYqiYU.js} +1 -1
- package/dist/ui/assets/raw-json-settings-editor-panel-BWEzkHEh.js +1 -0
- package/dist/ui/assets/{searchable-select-CWL2D5Ft.js → searchable-select-DuJbJ_tt.js} +1 -1
- package/dist/ui/assets/{separator-Do_vqTQD.js → separator-ohkxsfxk.js} +1 -1
- package/dist/ui/assets/shared-1ZnvRlC8.js +8 -0
- package/dist/ui/assets/{table-BP6nBZzg.js → table-BXnQYMP2.js} +1 -1
- package/dist/ui/assets/{updates-BTHJZ7Rk.js → updates-Cp9b84A6.js} +1 -1
- package/dist/ui/assets/use-accounts-C88lVWLw.js +1 -0
- package/dist/ui/index.html +3 -3
- package/dist/utils/shell-executor.d.ts +6 -1
- package/dist/utils/shell-executor.d.ts.map +1 -1
- package/dist/utils/shell-executor.js +15 -2
- package/dist/utils/shell-executor.js.map +1 -1
- package/dist/web-server/index.d.ts.map +1 -1
- package/dist/web-server/index.js +80 -20
- package/dist/web-server/index.js.map +1 -1
- package/dist/web-server/middleware/auth-middleware.d.ts +5 -0
- package/dist/web-server/middleware/auth-middleware.d.ts.map +1 -1
- package/dist/web-server/middleware/auth-middleware.js +73 -1
- package/dist/web-server/middleware/auth-middleware.js.map +1 -1
- package/dist/web-server/routes/account-route-helpers.d.ts +3 -0
- package/dist/web-server/routes/account-route-helpers.d.ts.map +1 -1
- package/dist/web-server/routes/account-route-helpers.js.map +1 -1
- package/dist/web-server/routes/account-routes.d.ts.map +1 -1
- package/dist/web-server/routes/account-routes.js +97 -4
- package/dist/web-server/routes/account-routes.js.map +1 -1
- package/dist/web-server/routes/cliproxy-auth-routes.d.ts.map +1 -1
- package/dist/web-server/routes/cliproxy-auth-routes.js +62 -3
- package/dist/web-server/routes/cliproxy-auth-routes.js.map +1 -1
- package/dist/web-server/routes/codex-routes.d.ts.map +1 -1
- package/dist/web-server/routes/codex-routes.js +7 -0
- package/dist/web-server/routes/codex-routes.js.map +1 -1
- package/dist/web-server/shared-routes-collections.d.ts +13 -0
- package/dist/web-server/shared-routes-collections.d.ts.map +1 -0
- package/dist/web-server/shared-routes-collections.js +170 -0
- package/dist/web-server/shared-routes-collections.js.map +1 -0
- package/dist/web-server/shared-routes-content.d.ts +16 -0
- package/dist/web-server/shared-routes-content.d.ts.map +1 -0
- package/dist/web-server/shared-routes-content.js +152 -0
- package/dist/web-server/shared-routes-content.js.map +1 -0
- package/dist/web-server/shared-routes-markdown-walker.d.ts +12 -0
- package/dist/web-server/shared-routes-markdown-walker.d.ts.map +1 -0
- package/dist/web-server/shared-routes-markdown-walker.js +97 -0
- package/dist/web-server/shared-routes-markdown-walker.js.map +1 -0
- package/dist/web-server/shared-routes-markdown.d.ts +18 -0
- package/dist/web-server/shared-routes-markdown.d.ts.map +1 -0
- package/dist/web-server/shared-routes-markdown.js +167 -0
- package/dist/web-server/shared-routes-markdown.js.map +1 -0
- package/dist/web-server/shared-routes-path-guards.d.ts +16 -0
- package/dist/web-server/shared-routes-path-guards.d.ts.map +1 -0
- package/dist/web-server/shared-routes-path-guards.js +93 -0
- package/dist/web-server/shared-routes-path-guards.js.map +1 -0
- package/dist/web-server/shared-routes-plugin-registry-content.d.ts +12 -0
- package/dist/web-server/shared-routes-plugin-registry-content.d.ts.map +1 -0
- package/dist/web-server/shared-routes-plugin-registry-content.js +93 -0
- package/dist/web-server/shared-routes-plugin-registry-content.js.map +1 -0
- package/dist/web-server/shared-routes-plugins.d.ts +21 -0
- package/dist/web-server/shared-routes-plugins.d.ts.map +1 -0
- package/dist/web-server/shared-routes-plugins.js +197 -0
- package/dist/web-server/shared-routes-plugins.js.map +1 -0
- package/dist/web-server/shared-routes-symlink-status.d.ts +27 -0
- package/dist/web-server/shared-routes-symlink-status.d.ts.map +1 -0
- package/dist/web-server/shared-routes-symlink-status.js +135 -0
- package/dist/web-server/shared-routes-symlink-status.js.map +1 -0
- package/dist/web-server/shared-routes-types.d.ts +23 -0
- package/dist/web-server/shared-routes-types.d.ts.map +1 -0
- package/dist/web-server/shared-routes-types.js +15 -0
- package/dist/web-server/shared-routes-types.js.map +1 -0
- package/dist/web-server/shared-routes.d.ts +2 -1
- package/dist/web-server/shared-routes.d.ts.map +1 -1
- package/dist/web-server/shared-routes.js +49 -455
- package/dist/web-server/shared-routes.js.map +1 -1
- package/lib/mcp/ccs-browser-server.cjs +153 -6
- package/package.json +1 -1
- package/dist/ui/assets/accounts-CybVGDsm.js +0 -1
- package/dist/ui/assets/cliproxy-B3Jyu3r9.js +0 -3
- package/dist/ui/assets/index-6xrth3Oz.css +0 -1
- package/dist/ui/assets/index-BRtgic66.js +0 -72
- package/dist/ui/assets/raw-json-settings-editor-panel-Dcumu3Qi.js +0 -1
- package/dist/ui/assets/shared-CwWuZx24.js +0 -8
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Shared Routes — Plugin registry content renderer
|
|
4
|
+
*
|
|
5
|
+
* Renders the markdown content for an installed plugin entry,
|
|
6
|
+
* pulling from installed_plugins.json, known_marketplaces.json,
|
|
7
|
+
* and blocklist.json within the allowed roots.
|
|
8
|
+
*/
|
|
9
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
12
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
13
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
14
|
+
}
|
|
15
|
+
Object.defineProperty(o, k2, desc);
|
|
16
|
+
}) : (function(o, m, k, k2) {
|
|
17
|
+
if (k2 === undefined) k2 = k;
|
|
18
|
+
o[k2] = m[k];
|
|
19
|
+
}));
|
|
20
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
21
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
22
|
+
}) : function(o, v) {
|
|
23
|
+
o["default"] = v;
|
|
24
|
+
});
|
|
25
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
26
|
+
if (mod && mod.__esModule) return mod;
|
|
27
|
+
var result = {};
|
|
28
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
29
|
+
__setModuleDefault(result, mod);
|
|
30
|
+
return result;
|
|
31
|
+
};
|
|
32
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
33
|
+
exports.getPluginRegistryContent = void 0;
|
|
34
|
+
const path = __importStar(require("path"));
|
|
35
|
+
const shared_routes_path_guards_1 = require("./shared-routes-path-guards");
|
|
36
|
+
const shared_routes_plugins_1 = require("./shared-routes-plugins");
|
|
37
|
+
function findPluginBlocklistEntry(sharedDir, allowedRoots, pluginName) {
|
|
38
|
+
const blocklist = (0, shared_routes_plugins_1.readJsonObject)(path.join(sharedDir, 'blocklist.json'), allowedRoots);
|
|
39
|
+
const plugins = blocklist?.plugins;
|
|
40
|
+
if (!Array.isArray(plugins)) {
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
return (plugins.find((entry) => entry &&
|
|
44
|
+
typeof entry === 'object' &&
|
|
45
|
+
'plugin' in entry &&
|
|
46
|
+
entry.plugin === pluginName) ?? null);
|
|
47
|
+
}
|
|
48
|
+
function getPluginRegistryContent(itemPath, sharedDir, allowedRoots) {
|
|
49
|
+
const pluginName = (0, shared_routes_plugins_1.decodePluginRegistryPath)(itemPath);
|
|
50
|
+
if (!pluginName) {
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
const registryPath = path.join(sharedDir, 'installed_plugins.json');
|
|
54
|
+
const resolvedRegistryPath = (0, shared_routes_path_guards_1.safeRealPath)(registryPath);
|
|
55
|
+
if (!resolvedRegistryPath || !(0, shared_routes_path_guards_1.isPathWithinAny)(resolvedRegistryPath, allowedRoots)) {
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
const registry = (0, shared_routes_plugins_1.readPluginInstalledRegistry)(sharedDir, allowedRoots);
|
|
59
|
+
if (!registry || !Object.prototype.hasOwnProperty.call(registry.plugins, pluginName)) {
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
const metadata = registry.plugins[pluginName];
|
|
63
|
+
const marketplace = (0, shared_routes_plugins_1.extractMarketplaceFromPluginName)(pluginName);
|
|
64
|
+
const marketplaceEntry = marketplace
|
|
65
|
+
? (0, shared_routes_plugins_1.readJsonObject)(path.join(sharedDir, 'known_marketplaces.json'), allowedRoots)?.[marketplace]
|
|
66
|
+
: null;
|
|
67
|
+
const blocklistEntry = findPluginBlocklistEntry(sharedDir, allowedRoots, pluginName);
|
|
68
|
+
const lines = [
|
|
69
|
+
`# ${pluginName}`,
|
|
70
|
+
'',
|
|
71
|
+
`Registry: \`${resolvedRegistryPath}\``,
|
|
72
|
+
'',
|
|
73
|
+
'## Installed Plugin',
|
|
74
|
+
'',
|
|
75
|
+
`- Source: shared \`installed_plugins.json\` registry`,
|
|
76
|
+
`- Registry version: ${registry.version ?? 'unknown'}`,
|
|
77
|
+
`- Marketplace: ${marketplace ?? 'not recorded in plugin name'}`,
|
|
78
|
+
`- Install records: ${Array.isArray(metadata) ? metadata.length : 1}`,
|
|
79
|
+
];
|
|
80
|
+
if (marketplaceEntry) {
|
|
81
|
+
lines.push('', '## Marketplace Registry Entry', '', '```json', (0, shared_routes_plugins_1.stringifyJson)(marketplaceEntry), '```');
|
|
82
|
+
}
|
|
83
|
+
if (blocklistEntry) {
|
|
84
|
+
lines.push('', '## Blocklist Notice', '', '```json', (0, shared_routes_plugins_1.stringifyJson)(blocklistEntry), '```');
|
|
85
|
+
}
|
|
86
|
+
lines.push('', '## Plugin Registry Entry', '', '```json', (0, shared_routes_plugins_1.stringifyJson)(metadata), '```');
|
|
87
|
+
return {
|
|
88
|
+
content: lines.join('\n'),
|
|
89
|
+
contentPath: resolvedRegistryPath,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
exports.getPluginRegistryContent = getPluginRegistryContent;
|
|
93
|
+
//# sourceMappingURL=shared-routes-plugin-registry-content.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared-routes-plugin-registry-content.js","sourceRoot":"","sources":["../../src/web-server/shared-routes-plugin-registry-content.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared Routes — Plugin collection and registry helpers
|
|
3
|
+
*
|
|
4
|
+
* Handles installed_plugins.json registry reads, legacy plugin directory
|
|
5
|
+
* scanning, and plugin path encode/decode.
|
|
6
|
+
*
|
|
7
|
+
* Registry content rendering is in shared-routes-plugin-registry-content.ts.
|
|
8
|
+
*/
|
|
9
|
+
import type { SharedItem, InstalledPluginRegistry } from './shared-routes-types';
|
|
10
|
+
export declare function encodePluginRegistryPath(pluginName: string): string;
|
|
11
|
+
export declare function decodePluginRegistryPath(itemPath: string): string | null;
|
|
12
|
+
export declare function readJsonObject(filePath: string, allowedRoots: Set<string>): Record<string, unknown> | null;
|
|
13
|
+
export declare function readPluginInstalledRegistry(sharedDir: string, allowedRoots: Set<string>): InstalledPluginRegistry | null;
|
|
14
|
+
export declare function extractMarketplaceFromPluginName(pluginName: string): string | null;
|
|
15
|
+
export declare function describeInstalledPlugin(pluginName: string, metadata: unknown): string;
|
|
16
|
+
export declare function isPluginInfrastructurePath(candidatePath: string, sharedDir: string): boolean;
|
|
17
|
+
export declare function stringifyJson(value: unknown): string;
|
|
18
|
+
export declare function getPluginRegistryItems(sharedDir: string, allowedRoots: Set<string>): SharedItem[];
|
|
19
|
+
export declare function getLegacyPluginDirectoryItems(sharedDir: string, allowedRoots: Set<string>): SharedItem[];
|
|
20
|
+
export declare function getPluginItems(sharedDir: string, allowedRoots: Set<string>): SharedItem[];
|
|
21
|
+
//# sourceMappingURL=shared-routes-plugins.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared-routes-plugins.d.ts","sourceRoot":"","sources":["../../src/web-server/shared-routes-plugins.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAOH,OAAO,KAAK,EAAE,UAAU,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AASjF,wBAAgB,wBAAwB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAEnE;AAED,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAWxE;AAMD,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,GACxB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAkBhC;AAED,wBAAgB,2BAA2B,CACzC,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,GACxB,uBAAuB,GAAG,IAAI,CAchC;AAMD,wBAAgB,gCAAgC,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAMlF;AAED,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,MAAM,CAOrF;AAMD,wBAAgB,0BAA0B,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAQ5F;AAMD,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAEpD;AAMD,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,UAAU,EAAE,CAWjG;AAED,wBAAgB,6BAA6B,CAC3C,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,GACxB,UAAU,EAAE,CAqCd;AAED,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,UAAU,EAAE,CAUzF"}
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Shared Routes — Plugin collection and registry helpers
|
|
4
|
+
*
|
|
5
|
+
* Handles installed_plugins.json registry reads, legacy plugin directory
|
|
6
|
+
* scanning, and plugin path encode/decode.
|
|
7
|
+
*
|
|
8
|
+
* Registry content rendering is in shared-routes-plugin-registry-content.ts.
|
|
9
|
+
*/
|
|
10
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
13
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
14
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
15
|
+
}
|
|
16
|
+
Object.defineProperty(o, k2, desc);
|
|
17
|
+
}) : (function(o, m, k, k2) {
|
|
18
|
+
if (k2 === undefined) k2 = k;
|
|
19
|
+
o[k2] = m[k];
|
|
20
|
+
}));
|
|
21
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
22
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
23
|
+
}) : function(o, v) {
|
|
24
|
+
o["default"] = v;
|
|
25
|
+
});
|
|
26
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
27
|
+
if (mod && mod.__esModule) return mod;
|
|
28
|
+
var result = {};
|
|
29
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
30
|
+
__setModuleDefault(result, mod);
|
|
31
|
+
return result;
|
|
32
|
+
};
|
|
33
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
34
|
+
exports.getPluginItems = exports.getLegacyPluginDirectoryItems = exports.getPluginRegistryItems = exports.stringifyJson = exports.isPluginInfrastructurePath = exports.describeInstalledPlugin = exports.extractMarketplaceFromPluginName = exports.readPluginInstalledRegistry = exports.readJsonObject = exports.decodePluginRegistryPath = exports.encodePluginRegistryPath = void 0;
|
|
35
|
+
const fs = __importStar(require("fs"));
|
|
36
|
+
const path = __importStar(require("path"));
|
|
37
|
+
const shared_routes_path_guards_1 = require("./shared-routes-path-guards");
|
|
38
|
+
const shared_routes_markdown_1 = require("./shared-routes-markdown");
|
|
39
|
+
const PLUGIN_REGISTRY_PATH_PREFIX = 'plugin-registry:';
|
|
40
|
+
const PLUGIN_INFRASTRUCTURE_DIRECTORIES = new Set(['cache', 'data', 'marketplaces']);
|
|
41
|
+
// ---------------------------------------------------------------------------
|
|
42
|
+
// Path encode / decode
|
|
43
|
+
// ---------------------------------------------------------------------------
|
|
44
|
+
function encodePluginRegistryPath(pluginName) {
|
|
45
|
+
return `${PLUGIN_REGISTRY_PATH_PREFIX}${encodeURIComponent(pluginName)}`;
|
|
46
|
+
}
|
|
47
|
+
exports.encodePluginRegistryPath = encodePluginRegistryPath;
|
|
48
|
+
function decodePluginRegistryPath(itemPath) {
|
|
49
|
+
if (!itemPath.startsWith(PLUGIN_REGISTRY_PATH_PREFIX)) {
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
try {
|
|
53
|
+
const encodedName = itemPath.slice(PLUGIN_REGISTRY_PATH_PREFIX.length);
|
|
54
|
+
const pluginName = decodeURIComponent(encodedName);
|
|
55
|
+
return pluginName.length > 0 ? pluginName : null;
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
exports.decodePluginRegistryPath = decodePluginRegistryPath;
|
|
62
|
+
// ---------------------------------------------------------------------------
|
|
63
|
+
// JSON helpers
|
|
64
|
+
// ---------------------------------------------------------------------------
|
|
65
|
+
function readJsonObject(filePath, allowedRoots) {
|
|
66
|
+
const resolvedPath = (0, shared_routes_path_guards_1.safeRealPath)(filePath);
|
|
67
|
+
if (!resolvedPath || !(0, shared_routes_path_guards_1.isPathWithinAny)(resolvedPath, allowedRoots)) {
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
try {
|
|
71
|
+
const stats = fs.statSync(resolvedPath);
|
|
72
|
+
if (!stats.isFile() || stats.size > shared_routes_markdown_1.MAX_CONTENT_FILE_BYTES) {
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
75
|
+
const parsed = JSON.parse(fs.readFileSync(resolvedPath, 'utf8'));
|
|
76
|
+
if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
return parsed;
|
|
80
|
+
}
|
|
81
|
+
catch {
|
|
82
|
+
return null;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
exports.readJsonObject = readJsonObject;
|
|
86
|
+
function readPluginInstalledRegistry(sharedDir, allowedRoots) {
|
|
87
|
+
const parsed = readJsonObject(path.join(sharedDir, 'installed_plugins.json'), allowedRoots);
|
|
88
|
+
if (!parsed ||
|
|
89
|
+
!parsed.plugins ||
|
|
90
|
+
typeof parsed.plugins !== 'object' ||
|
|
91
|
+
Array.isArray(parsed.plugins)) {
|
|
92
|
+
return null;
|
|
93
|
+
}
|
|
94
|
+
return {
|
|
95
|
+
version: typeof parsed.version === 'number' ? parsed.version : undefined,
|
|
96
|
+
plugins: parsed.plugins,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
exports.readPluginInstalledRegistry = readPluginInstalledRegistry;
|
|
100
|
+
// ---------------------------------------------------------------------------
|
|
101
|
+
// Description helpers
|
|
102
|
+
// ---------------------------------------------------------------------------
|
|
103
|
+
function extractMarketplaceFromPluginName(pluginName) {
|
|
104
|
+
const atIndex = pluginName.lastIndexOf('@');
|
|
105
|
+
if (atIndex <= 0 || atIndex === pluginName.length - 1) {
|
|
106
|
+
return null;
|
|
107
|
+
}
|
|
108
|
+
return pluginName.slice(atIndex + 1);
|
|
109
|
+
}
|
|
110
|
+
exports.extractMarketplaceFromPluginName = extractMarketplaceFromPluginName;
|
|
111
|
+
function describeInstalledPlugin(pluginName, metadata) {
|
|
112
|
+
const recordCount = Array.isArray(metadata) ? metadata.length : 1;
|
|
113
|
+
const marketplace = extractMarketplaceFromPluginName(pluginName);
|
|
114
|
+
const recordLabel = `${recordCount} ${recordCount === 1 ? 'record' : 'records'}`;
|
|
115
|
+
return marketplace
|
|
116
|
+
? `Installed from ${marketplace}; ${recordLabel} in shared registry`
|
|
117
|
+
: `Installed plugin; ${recordLabel} in shared registry`;
|
|
118
|
+
}
|
|
119
|
+
exports.describeInstalledPlugin = describeInstalledPlugin;
|
|
120
|
+
// ---------------------------------------------------------------------------
|
|
121
|
+
// Infrastructure path guard
|
|
122
|
+
// ---------------------------------------------------------------------------
|
|
123
|
+
function isPluginInfrastructurePath(candidatePath, sharedDir) {
|
|
124
|
+
for (const directoryName of PLUGIN_INFRASTRUCTURE_DIRECTORIES) {
|
|
125
|
+
const resolvedInfrastructurePath = (0, shared_routes_path_guards_1.safeRealPath)(path.join(sharedDir, directoryName));
|
|
126
|
+
if (resolvedInfrastructurePath && (0, shared_routes_path_guards_1.isPathWithin)(candidatePath, resolvedInfrastructurePath)) {
|
|
127
|
+
return true;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
return false;
|
|
131
|
+
}
|
|
132
|
+
exports.isPluginInfrastructurePath = isPluginInfrastructurePath;
|
|
133
|
+
// ---------------------------------------------------------------------------
|
|
134
|
+
// JSON serialization
|
|
135
|
+
// ---------------------------------------------------------------------------
|
|
136
|
+
function stringifyJson(value) {
|
|
137
|
+
return JSON.stringify(value, null, 2) ?? 'null';
|
|
138
|
+
}
|
|
139
|
+
exports.stringifyJson = stringifyJson;
|
|
140
|
+
// ---------------------------------------------------------------------------
|
|
141
|
+
// Item list builders
|
|
142
|
+
// ---------------------------------------------------------------------------
|
|
143
|
+
function getPluginRegistryItems(sharedDir, allowedRoots) {
|
|
144
|
+
const registry = readPluginInstalledRegistry(sharedDir, allowedRoots);
|
|
145
|
+
if (!registry) {
|
|
146
|
+
return [];
|
|
147
|
+
}
|
|
148
|
+
return Object.entries(registry.plugins).map(([pluginName, metadata]) => ({
|
|
149
|
+
name: pluginName,
|
|
150
|
+
description: describeInstalledPlugin(pluginName, metadata),
|
|
151
|
+
path: encodePluginRegistryPath(pluginName),
|
|
152
|
+
type: 'plugin',
|
|
153
|
+
}));
|
|
154
|
+
}
|
|
155
|
+
exports.getPluginRegistryItems = getPluginRegistryItems;
|
|
156
|
+
function getLegacyPluginDirectoryItems(sharedDir, allowedRoots) {
|
|
157
|
+
let entries = [];
|
|
158
|
+
try {
|
|
159
|
+
entries = fs.readdirSync(sharedDir, { withFileTypes: true });
|
|
160
|
+
}
|
|
161
|
+
catch {
|
|
162
|
+
return [];
|
|
163
|
+
}
|
|
164
|
+
const items = [];
|
|
165
|
+
for (const entry of entries) {
|
|
166
|
+
if (!entry.isDirectory() || PLUGIN_INFRASTRUCTURE_DIRECTORIES.has(entry.name)) {
|
|
167
|
+
continue;
|
|
168
|
+
}
|
|
169
|
+
const entryPath = path.join(sharedDir, entry.name);
|
|
170
|
+
const resolvedEntryPath = (0, shared_routes_path_guards_1.safeRealPath)(entryPath);
|
|
171
|
+
if (!resolvedEntryPath || !(0, shared_routes_path_guards_1.isPathWithinAny)(resolvedEntryPath, allowedRoots)) {
|
|
172
|
+
continue;
|
|
173
|
+
}
|
|
174
|
+
const description = (0, shared_routes_markdown_1.readFirstMarkdownDescription)([
|
|
175
|
+
path.join(resolvedEntryPath, 'README.md'),
|
|
176
|
+
path.join(resolvedEntryPath, 'readme.md'),
|
|
177
|
+
path.join(resolvedEntryPath, 'PLUGIN.md'),
|
|
178
|
+
], allowedRoots);
|
|
179
|
+
if (!description) {
|
|
180
|
+
continue;
|
|
181
|
+
}
|
|
182
|
+
items.push({ name: entry.name, description, path: entryPath, type: 'plugin' });
|
|
183
|
+
}
|
|
184
|
+
return items;
|
|
185
|
+
}
|
|
186
|
+
exports.getLegacyPluginDirectoryItems = getLegacyPluginDirectoryItems;
|
|
187
|
+
function getPluginItems(sharedDir, allowedRoots) {
|
|
188
|
+
const registryItems = getPluginRegistryItems(sharedDir, allowedRoots);
|
|
189
|
+
const legacyDirectoryItems = getLegacyPluginDirectoryItems(sharedDir, allowedRoots);
|
|
190
|
+
const itemsByPath = new Map();
|
|
191
|
+
for (const item of [...registryItems, ...legacyDirectoryItems]) {
|
|
192
|
+
itemsByPath.set(item.path, item);
|
|
193
|
+
}
|
|
194
|
+
return [...itemsByPath.values()].sort((a, b) => a.name.localeCompare(b.name));
|
|
195
|
+
}
|
|
196
|
+
exports.getPluginItems = getPluginItems;
|
|
197
|
+
//# sourceMappingURL=shared-routes-plugins.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared-routes-plugins.js","sourceRoot":"","sources":["../../src/web-server/shared-routes-plugins.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared Routes — Symlink / copy status checker
|
|
3
|
+
*
|
|
4
|
+
* Reports whether shared resources (commands, skills, agents) under
|
|
5
|
+
* ~/.ccs/shared/ are configured as symlinks pointing to ~/.claude/,
|
|
6
|
+
* as directory copies (Windows fallback), or are missing.
|
|
7
|
+
*
|
|
8
|
+
* Return shape is a superset of the original { valid, message } so
|
|
9
|
+
* existing callers remain unaffected while new callers can inspect
|
|
10
|
+
* mode and per-link details.
|
|
11
|
+
*/
|
|
12
|
+
type LinkMode = 'symlink' | 'copy' | 'missing';
|
|
13
|
+
interface SymlinkStatusResult {
|
|
14
|
+
valid: boolean;
|
|
15
|
+
message: string;
|
|
16
|
+
/** Overall configuration mode derived from the three entries. */
|
|
17
|
+
mode: 'symlink' | 'copy' | 'mixed' | 'none';
|
|
18
|
+
/** Per-entry classification for diagnostics. */
|
|
19
|
+
links: {
|
|
20
|
+
commands: LinkMode;
|
|
21
|
+
skills: LinkMode;
|
|
22
|
+
agents: LinkMode;
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
export declare function checkSymlinkStatus(): SymlinkStatusResult;
|
|
26
|
+
export {};
|
|
27
|
+
//# sourceMappingURL=shared-routes-symlink-status.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared-routes-symlink-status.d.ts","sourceRoot":"","sources":["../../src/web-server/shared-routes-symlink-status.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAQH,KAAK,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAAC;AAM/C,UAAU,mBAAmB;IAC3B,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,iEAAiE;IACjE,IAAI,EAAE,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;IAC5C,gDAAgD;IAChD,KAAK,EAAE;QACL,QAAQ,EAAE,QAAQ,CAAC;QACnB,MAAM,EAAE,QAAQ,CAAC;QACjB,MAAM,EAAE,QAAQ,CAAC;KAClB,CAAC;CACH;AAwCD,wBAAgB,kBAAkB,IAAI,mBAAmB,CAoExD"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Shared Routes — Symlink / copy status checker
|
|
4
|
+
*
|
|
5
|
+
* Reports whether shared resources (commands, skills, agents) under
|
|
6
|
+
* ~/.ccs/shared/ are configured as symlinks pointing to ~/.claude/,
|
|
7
|
+
* as directory copies (Windows fallback), or are missing.
|
|
8
|
+
*
|
|
9
|
+
* Return shape is a superset of the original { valid, message } so
|
|
10
|
+
* existing callers remain unaffected while new callers can inspect
|
|
11
|
+
* mode and per-link details.
|
|
12
|
+
*/
|
|
13
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
16
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
17
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
18
|
+
}
|
|
19
|
+
Object.defineProperty(o, k2, desc);
|
|
20
|
+
}) : (function(o, m, k, k2) {
|
|
21
|
+
if (k2 === undefined) k2 = k;
|
|
22
|
+
o[k2] = m[k];
|
|
23
|
+
}));
|
|
24
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
25
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
26
|
+
}) : function(o, v) {
|
|
27
|
+
o["default"] = v;
|
|
28
|
+
});
|
|
29
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
30
|
+
if (mod && mod.__esModule) return mod;
|
|
31
|
+
var result = {};
|
|
32
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
33
|
+
__setModuleDefault(result, mod);
|
|
34
|
+
return result;
|
|
35
|
+
};
|
|
36
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
37
|
+
exports.checkSymlinkStatus = void 0;
|
|
38
|
+
const fs = __importStar(require("fs"));
|
|
39
|
+
const path = __importStar(require("path"));
|
|
40
|
+
const claude_config_path_1 = require("../utils/claude-config-path");
|
|
41
|
+
const config_loader_facade_1 = require("../config/config-loader-facade");
|
|
42
|
+
const SHARED_ENTRY_TYPES = ['commands', 'skills', 'agents'];
|
|
43
|
+
function classifyEntry(linkPath, expectedTarget) {
|
|
44
|
+
try {
|
|
45
|
+
const lstats = fs.lstatSync(linkPath);
|
|
46
|
+
if (lstats.isSymbolicLink()) {
|
|
47
|
+
// Validate it points to the expected Claude config sub-directory.
|
|
48
|
+
const target = fs.readlinkSync(linkPath);
|
|
49
|
+
const resolvedTarget = path.resolve(path.dirname(linkPath), target);
|
|
50
|
+
if (resolvedTarget === path.resolve(expectedTarget)) {
|
|
51
|
+
return 'symlink';
|
|
52
|
+
}
|
|
53
|
+
// Symlink exists but points elsewhere — treat as missing for validity.
|
|
54
|
+
return 'missing';
|
|
55
|
+
}
|
|
56
|
+
if (lstats.isDirectory()) {
|
|
57
|
+
// Best-effort non-empty check to distinguish a real copy from an
|
|
58
|
+
// accidental empty directory.
|
|
59
|
+
try {
|
|
60
|
+
const entries = fs.readdirSync(linkPath);
|
|
61
|
+
if (entries.length > 0) {
|
|
62
|
+
return 'copy';
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
// readdirSync failed — fall through to missing
|
|
67
|
+
}
|
|
68
|
+
return 'missing';
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
// lstatSync threw — path does not exist or is unreadable
|
|
73
|
+
}
|
|
74
|
+
return 'missing';
|
|
75
|
+
}
|
|
76
|
+
function checkSymlinkStatus() {
|
|
77
|
+
const ccsDir = (0, config_loader_facade_1.getCcsDir)();
|
|
78
|
+
const sharedDir = path.join(ccsDir, 'shared');
|
|
79
|
+
const claudeConfigDir = (0, claude_config_path_1.getClaudeConfigDir)();
|
|
80
|
+
if (!fs.existsSync(sharedDir)) {
|
|
81
|
+
return {
|
|
82
|
+
valid: false,
|
|
83
|
+
message: 'Shared directory not found',
|
|
84
|
+
mode: 'none',
|
|
85
|
+
links: { commands: 'missing', skills: 'missing', agents: 'missing' },
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
const details = {
|
|
89
|
+
commands: { mode: 'missing' },
|
|
90
|
+
skills: { mode: 'missing' },
|
|
91
|
+
agents: { mode: 'missing' },
|
|
92
|
+
};
|
|
93
|
+
for (const entryType of SHARED_ENTRY_TYPES) {
|
|
94
|
+
const linkPath = path.join(sharedDir, entryType);
|
|
95
|
+
const expectedTarget = path.join(claudeConfigDir, entryType);
|
|
96
|
+
if (!fs.existsSync(linkPath)) {
|
|
97
|
+
details[entryType] = { mode: 'missing' };
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
100
|
+
details[entryType] = { mode: classifyEntry(linkPath, expectedTarget) };
|
|
101
|
+
}
|
|
102
|
+
const modes = SHARED_ENTRY_TYPES.map((t) => details[t].mode);
|
|
103
|
+
const links = {
|
|
104
|
+
commands: details.commands.mode,
|
|
105
|
+
skills: details.skills.mode,
|
|
106
|
+
agents: details.agents.mode,
|
|
107
|
+
};
|
|
108
|
+
const allSymlink = modes.every((m) => m === 'symlink');
|
|
109
|
+
const allCopy = modes.every((m) => m === 'copy');
|
|
110
|
+
const allMissing = modes.every((m) => m === 'missing');
|
|
111
|
+
if (allSymlink) {
|
|
112
|
+
return { valid: true, message: 'Symlinks active', mode: 'symlink', links };
|
|
113
|
+
}
|
|
114
|
+
if (allCopy) {
|
|
115
|
+
return {
|
|
116
|
+
valid: true,
|
|
117
|
+
message: 'Copies active (Windows fallback)',
|
|
118
|
+
mode: 'copy',
|
|
119
|
+
links,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
if (allMissing) {
|
|
123
|
+
return { valid: false, message: 'Shared resources not configured', mode: 'none', links };
|
|
124
|
+
}
|
|
125
|
+
// Mixed — at least one differs from the others.
|
|
126
|
+
const details_str = SHARED_ENTRY_TYPES.map((t) => `${t}:${details[t].mode}`).join(', ');
|
|
127
|
+
return {
|
|
128
|
+
valid: false,
|
|
129
|
+
message: `Mixed configuration: ${details_str}`,
|
|
130
|
+
mode: 'mixed',
|
|
131
|
+
links,
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
exports.checkSymlinkStatus = checkSymlinkStatus;
|
|
135
|
+
//# sourceMappingURL=shared-routes-symlink-status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared-routes-symlink-status.js","sourceRoot":"","sources":["../../src/web-server/shared-routes-symlink-status.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,uCAAyB;AACzB,2CAA6B;AAE7B,oEAAiE;AACjE,yEAA2D;AAqB3D,MAAM,kBAAkB,GAAG,CAAC,UAAU,EAAE,QAAQ,EAAE,QAAQ,CAAU,CAAC;AAGrE,SAAS,aAAa,CAAC,QAAgB,EAAE,cAAsB;IAC7D,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAEtC,IAAI,MAAM,CAAC,cAAc,EAAE,EAAE,CAAC;YAC5B,kEAAkE;YAClE,MAAM,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;YACzC,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAC;YACpE,IAAI,cAAc,KAAK,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC;gBACpD,OAAO,SAAS,CAAC;YACnB,CAAC;YACD,uEAAuE;YACvE,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,IAAI,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC;YACzB,iEAAiE;YACjE,8BAA8B;YAC9B,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;gBACzC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACvB,OAAO,MAAM,CAAC;gBAChB,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,+CAA+C;YACjD,CAAC;YACD,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,yDAAyD;IAC3D,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAgB,kBAAkB;IAChC,MAAM,MAAM,GAAG,IAAA,gCAAS,GAAE,CAAC;IAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC9C,MAAM,eAAe,GAAG,IAAA,uCAAkB,GAAE,CAAC;IAE7C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9B,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,OAAO,EAAE,4BAA4B;YACrC,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE;SACrE,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAwC;QACnD,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;QAC7B,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;QAC3B,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;KAC5B,CAAC;IAEF,KAAK,MAAM,SAAS,IAAI,kBAAkB,EAAE,CAAC;QAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QACjD,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC;QAE7D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7B,OAAO,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;YACzC,SAAS;QACX,CAAC;QAED,OAAO,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,aAAa,CAAC,QAAQ,EAAE,cAAc,CAAC,EAAE,CAAC;IACzE,CAAC;IAED,MAAM,KAAK,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC7D,MAAM,KAAK,GAAG;QACZ,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,IAAI;QAC/B,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI;QAC3B,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI;KAC5B,CAAC;IAEF,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC;IACvD,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC;IACjD,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC;IAEvD,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,iBAAiB,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IAC7E,CAAC;IAED,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO;YACL,KAAK,EAAE,IAAI;YACX,OAAO,EAAE,kCAAkC;YAC3C,IAAI,EAAE,MAAM;YACZ,KAAK;SACN,CAAC;IACJ,CAAC;IAED,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,iCAAiC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAC3F,CAAC;IAED,gDAAgD;IAChD,MAAM,WAAW,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxF,OAAO;QACL,KAAK,EAAE,KAAK;QACZ,OAAO,EAAE,wBAAwB,WAAW,EAAE;QAC9C,IAAI,EAAE,OAAO;QACb,KAAK;KACN,CAAC;AACJ,CAAC;AApED,gDAoEC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared Routes — Type definitions and type guards
|
|
3
|
+
*/
|
|
4
|
+
export type SharedCollectionType = 'commands' | 'skills' | 'agents' | 'plugins';
|
|
5
|
+
export type SharedContentType = SharedCollectionType | 'settings';
|
|
6
|
+
export interface SharedItem {
|
|
7
|
+
name: string;
|
|
8
|
+
description: string;
|
|
9
|
+
path: string;
|
|
10
|
+
type: 'command' | 'skill' | 'agent' | 'plugin';
|
|
11
|
+
}
|
|
12
|
+
export interface SharedItemsCacheEntry {
|
|
13
|
+
items: SharedItem[];
|
|
14
|
+
sharedDir: string;
|
|
15
|
+
expiresAt: number;
|
|
16
|
+
}
|
|
17
|
+
export interface InstalledPluginRegistry {
|
|
18
|
+
version?: number;
|
|
19
|
+
plugins: Record<string, unknown>;
|
|
20
|
+
}
|
|
21
|
+
export declare function isSharedCollectionType(value: unknown): value is SharedCollectionType;
|
|
22
|
+
export declare function isSharedContentType(value: unknown): value is SharedContentType;
|
|
23
|
+
//# sourceMappingURL=shared-routes-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared-routes-types.d.ts","sourceRoot":"","sources":["../../src/web-server/shared-routes-types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,oBAAoB,GAAG,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;AAChF,MAAM,MAAM,iBAAiB,GAAG,oBAAoB,GAAG,UAAU,CAAC;AAElE,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,SAAS,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,CAAC;CAChD;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,uBAAuB;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,oBAAoB,CAEpF;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,iBAAiB,CAE9E"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Shared Routes — Type definitions and type guards
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.isSharedContentType = exports.isSharedCollectionType = void 0;
|
|
7
|
+
function isSharedCollectionType(value) {
|
|
8
|
+
return value === 'commands' || value === 'skills' || value === 'agents' || value === 'plugins';
|
|
9
|
+
}
|
|
10
|
+
exports.isSharedCollectionType = isSharedCollectionType;
|
|
11
|
+
function isSharedContentType(value) {
|
|
12
|
+
return isSharedCollectionType(value) || value === 'settings';
|
|
13
|
+
}
|
|
14
|
+
exports.isSharedContentType = isSharedContentType;
|
|
15
|
+
//# sourceMappingURL=shared-routes-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared-routes-types.js","sourceRoot":"","sources":["../../src/web-server/shared-routes-types.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAuBH,SAAgB,sBAAsB,CAAC,KAAc;IACnD,OAAO,KAAK,KAAK,UAAU,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,SAAS,CAAC;AACjG,CAAC;AAFD,wDAEC;AAED,SAAgB,mBAAmB,CAAC,KAAc;IAChD,OAAO,sBAAsB,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,UAAU,CAAC;AAC/D,CAAC;AAFD,kDAEC"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Shared Data Routes (Phase 07)
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* Thin Express router — delegates all logic to focused sub-modules.
|
|
5
|
+
* API routes for commands, skills, agents, and plugins from ~/.ccs/shared/
|
|
5
6
|
*/
|
|
6
7
|
export declare const sharedRoutes: import("express-serve-static-core").Router;
|
|
7
8
|
//# sourceMappingURL=shared-routes.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared-routes.d.ts","sourceRoot":"","sources":["../../src/web-server/shared-routes.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"shared-routes.d.ts","sourceRoot":"","sources":["../../src/web-server/shared-routes.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAyBH,eAAO,MAAM,YAAY,4CAAW,CAAC"}
|