feat(cli-manager): add CLI wrapper endpoints management and UI integration

- Introduced functions to load and toggle CLI wrapper endpoints from the API.
- Updated the CLI manager UI to display and manage CLI wrapper endpoints.
- Removed CodexLens and Semantic Search from the tools section, now managed in their dedicated pages.

feat(codexlens-manager): move File Watcher card to the CodexLens Manager page

- Relocated the File Watcher card from the right column to the main content area of the CodexLens Manager page.

refactor(claude-cli-tools): enhance CLI tools configuration and migration

- Added support for new tool types: 'cli-wrapper' and 'api-endpoint'.
- Updated migration logic to handle new tool types and preserve endpoint IDs.
- Deprecated previous custom endpoint handling in favor of the new structure.

feat(cli-executor-core): integrate CLI settings for custom endpoint execution

- Implemented execution logic for custom CLI封装 endpoints using settings files.
- Enhanced error handling and output logging for CLI executions.
- Updated tool identification logic to support both built-in tools and custom endpoints.
This commit is contained in:
catlog22
2026-01-12 09:35:05 +08:00
parent cefb934a2c
commit 1044886e7d
10 changed files with 1187 additions and 279 deletions

View File

@@ -1272,9 +1272,100 @@ select.cli-input {
letter-spacing: 0.03em;
}
/* Provider Item (used in CLI Settings list) */
.provider-item {
display: flex;
align-items: center;
justify-content: space-between;
padding: 0.75rem;
border-radius: 0.5rem;
cursor: pointer;
transition: background 0.15s ease;
border: 1px solid transparent;
}
.provider-item:hover {
background: hsl(var(--muted) / 0.5);
}
.provider-item.selected {
background: hsl(var(--primary) / 0.1);
border-color: hsl(var(--primary) / 0.3);
}
.provider-item-content {
display: flex;
align-items: center;
gap: 0.75rem;
min-width: 0;
flex: 1;
}
.provider-icon {
width: 2rem;
height: 2rem;
border-radius: 0.375rem;
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
background: hsl(var(--muted) / 0.5);
color: hsl(var(--muted-foreground));
}
.provider-icon i,
.provider-icon svg {
width: 1rem;
height: 1rem;
}
.provider-info {
flex: 1;
min-width: 0;
display: flex;
flex-direction: column;
gap: 0.125rem;
}
.provider-name {
font-size: 0.875rem;
font-weight: 500;
color: hsl(var(--foreground));
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.provider-type {
font-size: 0.6875rem;
color: hsl(var(--muted-foreground));
}
.provider-status {
display: flex;
align-items: center;
flex-shrink: 0;
}
.provider-status .status-dot {
width: 8px;
height: 8px;
border-radius: 50%;
background: hsl(var(--muted-foreground));
}
.provider-status.enabled .status-dot {
background: hsl(142 76% 36%);
}
.provider-status.disabled .status-dot {
background: hsl(var(--muted-foreground) / 0.5);
}
.provider-list-footer {
padding: 1rem;
border-top: 1px solid hsl(var(--border));
margin-top: auto;
}
.btn-full {
@@ -1327,6 +1418,75 @@ select.cli-input {
gap: 1.5rem;
}
/* Detail Section (for CLI Settings, etc.) */
.detail-section {
background: hsl(var(--card));
border: 1px solid hsl(var(--border));
border-radius: 0.5rem;
padding: 1rem 1.25rem;
}
.detail-section h3 {
margin: 0 0 1rem 0;
font-size: 0.875rem;
font-weight: 600;
color: hsl(var(--foreground));
}
.detail-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
gap: 1rem;
}
.detail-item {
display: flex;
flex-direction: column;
gap: 0.25rem;
}
.detail-item label {
font-size: 0.75rem;
font-weight: 500;
color: hsl(var(--muted-foreground));
text-transform: uppercase;
letter-spacing: 0.02em;
}
.detail-item span {
font-size: 0.875rem;
color: hsl(var(--foreground));
word-break: break-all;
}
.detail-item span.mono {
font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace;
font-size: 0.8125rem;
background: hsl(var(--muted) / 0.3);
padding: 0.25rem 0.5rem;
border-radius: 0.25rem;
}
.detail-item-full {
grid-column: 1 / -1;
}
/* Code Block */
.code-block {
background: hsl(var(--muted) / 0.3);
border: 1px solid hsl(var(--border));
border-radius: 0.375rem;
padding: 0.75rem 1rem;
overflow-x: auto;
}
.code-block code {
font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace;
font-size: 0.8125rem;
color: hsl(var(--foreground));
white-space: nowrap;
}
/* Field Groups */
.field-group {
display: flex;
@@ -1927,6 +2087,26 @@ select.cli-input {
margin-bottom: 0.75rem;
}
/* ===========================
CLI Settings List in Sidebar
=========================== */
.cli-settings-list {
flex: 1;
overflow-y: auto;
padding: 0.5rem;
}
/* ===========================
Model Pools List in Sidebar
=========================== */
.model-pools-list {
flex: 1;
overflow-y: auto;
padding: 0.5rem;
}
/* ===========================
Main Panel Sections
=========================== */
@@ -2763,6 +2943,57 @@ select.cli-input {
color: hsl(var(--muted-foreground));
}
/* Parse JSON link in footer */
.json-parse-link {
font-size: 0.75rem;
color: hsl(var(--primary));
text-decoration: none;
cursor: pointer;
transition: color 0.2s ease;
}
.json-parse-link:hover {
color: hsl(var(--primary) / 0.8);
text-decoration: underline;
}
/* Input with toggle button (for password visibility) */
.input-with-toggle {
position: relative;
display: flex;
align-items: center;
}
.input-with-toggle .form-control {
flex: 1;
padding-right: 2.5rem;
}
.input-with-toggle .toggle-password {
position: absolute;
right: 0.25rem;
top: 50%;
transform: translateY(-50%);
padding: 0.25rem 0.5rem;
background: transparent;
border: none;
color: hsl(var(--muted-foreground));
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
}
.input-with-toggle .toggle-password:hover {
color: hsl(var(--foreground));
}
.input-with-toggle .toggle-password i,
.input-with-toggle .toggle-password svg {
width: 16px;
height: 16px;
}
/* Button styles for JSON editor */
.btn-sm {
padding: 0.375rem 0.75rem;