mirror of
https://github.com/catlog22/Claude-Code-Workflow.git
synced 2026-02-28 09:23:08 +08:00
feat(a2ui): Implement A2UI backend with question handling and WebSocket support
- Added A2UITypes for defining question structures and answers. - Created A2UIWebSocketHandler for managing WebSocket connections and message handling. - Developed ask-question tool for interactive user questions via A2UI. - Introduced platformUtils for platform detection and shell command handling. - Centralized TypeScript types in index.ts for better organization. - Implemented compatibility checks for hook templates based on platform requirements.
This commit is contained in:
160
ccw/frontend/src/locales/en/cli-hooks.json
Normal file
160
ccw/frontend/src/locales/en/cli-hooks.json
Normal file
@@ -0,0 +1,160 @@
|
||||
{
|
||||
"title": "Hook Manager",
|
||||
"description": "Manage CLI hooks for automated workflows",
|
||||
"allTools": "All tools",
|
||||
"trigger": {
|
||||
"UserPromptSubmit": "User Prompt Submit",
|
||||
"PreToolUse": "Pre Tool Use",
|
||||
"PostToolUse": "Post Tool Use",
|
||||
"Stop": "Stop"
|
||||
},
|
||||
"form": {
|
||||
"name": "Hook Name",
|
||||
"namePlaceholder": "my-hook",
|
||||
"description": "Description",
|
||||
"descriptionPlaceholder": "What does this hook do?",
|
||||
"trigger": "Trigger Event",
|
||||
"matcher": "Tool Matcher",
|
||||
"matcherPlaceholder": "e.g., Write|Edit (optional)",
|
||||
"matcherHelp": "Regex pattern to match tool names. Leave empty to match all tools.",
|
||||
"command": "Command",
|
||||
"commandPlaceholder": "echo 'Hello World'",
|
||||
"commandHelp": "Shell command to execute. Use environment variables like $CLAUDE_TOOL_NAME."
|
||||
},
|
||||
"validation": {
|
||||
"nameRequired": "Hook name is required",
|
||||
"nameInvalid": "Hook name can only contain letters, numbers, hyphens, and underscores",
|
||||
"triggerRequired": "Trigger event is required",
|
||||
"commandRequired": "Command is required"
|
||||
},
|
||||
"actions": {
|
||||
"add": "Add Hook",
|
||||
"addFirst": "Create Your First Hook",
|
||||
"edit": "Edit",
|
||||
"delete": "Delete",
|
||||
"deleteConfirm": "Are you sure you want to delete hook \"{hookName}\"?",
|
||||
"enable": "Enable",
|
||||
"disable": "Disable",
|
||||
"expand": "Expand details",
|
||||
"collapse": "Collapse details",
|
||||
"expandAll": "Expand All",
|
||||
"collapseAll": "Collapse All"
|
||||
},
|
||||
"dialog": {
|
||||
"createTitle": "Create Hook",
|
||||
"editTitle": "Edit Hook \"{hookName}\""
|
||||
},
|
||||
"stats": {
|
||||
"total": "{count} total",
|
||||
"enabled": "{count} enabled",
|
||||
"count": "{enabled}/{total} hooks"
|
||||
},
|
||||
"filters": {
|
||||
"searchPlaceholder": "Search hooks by name, description, or trigger..."
|
||||
},
|
||||
"empty": {
|
||||
"title": "No hooks found",
|
||||
"description": "Create your first hook to automate your CLI workflow",
|
||||
"noHooksInEvent": "No hooks configured for this event"
|
||||
},
|
||||
"templates": {
|
||||
"title": "Quick Install Templates",
|
||||
"description": "One-click installation for common hook patterns",
|
||||
"categories": {
|
||||
"notification": "Notification",
|
||||
"indexing": "Indexing",
|
||||
"automation": "Automation"
|
||||
},
|
||||
"templates": {
|
||||
"ccw-notify": {
|
||||
"name": "CCW Dashboard Notify",
|
||||
"description": "Send notifications to CCW dashboard when files are written"
|
||||
},
|
||||
"codexlens-update": {
|
||||
"name": "CodexLens Auto-Update",
|
||||
"description": "Update CodexLens index when files are written or edited"
|
||||
},
|
||||
"git-add": {
|
||||
"name": "Auto Git Stage",
|
||||
"description": "Automatically stage written files to git"
|
||||
},
|
||||
"lint-check": {
|
||||
"name": "Auto ESLint",
|
||||
"description": "Run ESLint on JavaScript/TypeScript files after write"
|
||||
},
|
||||
"log-tool": {
|
||||
"name": "Tool Usage Logger",
|
||||
"description": "Log all tool executions to a file for audit trail"
|
||||
}
|
||||
},
|
||||
"actions": {
|
||||
"install": "Install",
|
||||
"installed": "Installed"
|
||||
}
|
||||
},
|
||||
"wizards": {
|
||||
"title": "Hook Wizard",
|
||||
"launch": "Wizard",
|
||||
"sectionTitle": "Hook Wizards",
|
||||
"sectionDescription": "Create hooks with guided step-by-step wizards",
|
||||
"platform": {
|
||||
"detected": "Detected Platform",
|
||||
"compatible": "Compatible",
|
||||
"incompatible": "Incompatible",
|
||||
"compatibilityError": "This hook is not compatible with your platform",
|
||||
"compatibilityWarning": "Some features may not work on your platform"
|
||||
},
|
||||
"steps": {
|
||||
"triggerEvent": "This hook will trigger on",
|
||||
"review": {
|
||||
"title": "Review Configuration",
|
||||
"description": "Review your hook configuration before creating",
|
||||
"hookType": "Hook Type",
|
||||
"trigger": "Trigger Event",
|
||||
"platform": "Platform",
|
||||
"commandPreview": "Command Preview"
|
||||
}
|
||||
},
|
||||
"navigation": {
|
||||
"previous": "Previous",
|
||||
"next": "Next",
|
||||
"create": "Create Hook",
|
||||
"creating": "Creating..."
|
||||
},
|
||||
"memoryUpdate": {
|
||||
"title": "Memory Update Wizard",
|
||||
"description": "Configure hook to update CLAUDE.md on session end",
|
||||
"shortDescription": "Update CLAUDE.md automatically",
|
||||
"claudePath": "CLAUDE.md Path",
|
||||
"updateFrequency": "Update Frequency",
|
||||
"frequency": {
|
||||
"sessionEnd": "Session End",
|
||||
"hourly": "Hourly",
|
||||
"daily": "Daily"
|
||||
}
|
||||
},
|
||||
"dangerProtection": {
|
||||
"title": "Danger Protection Wizard",
|
||||
"description": "Configure confirmation hook for dangerous operations",
|
||||
"shortDescription": "Confirm dangerous operations",
|
||||
"keywords": "Dangerous Keywords",
|
||||
"keywordsHelp": "Enter one keyword per line",
|
||||
"confirmationMessage": "Confirmation Message",
|
||||
"allowBypass": "Allow bypass with --force flag"
|
||||
},
|
||||
"skillContext": {
|
||||
"title": "SKILL Context Wizard",
|
||||
"description": "Configure hook to load SKILL based on prompt keywords",
|
||||
"shortDescription": "Auto-load SKILL based on keywords",
|
||||
"loadingSkills": "Loading available skills...",
|
||||
"keywordPlaceholder": "Enter keyword",
|
||||
"selectSkill": "Select skill",
|
||||
"addPair": "Add Keyword-Skill Pair",
|
||||
"priority": "Priority",
|
||||
"priorityHigh": "High",
|
||||
"priorityMedium": "Medium",
|
||||
"priorityLow": "Low",
|
||||
"keywordMappings": "Keyword Mappings"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -129,5 +129,34 @@
|
||||
"prompt": "Prompt",
|
||||
"output": "Output",
|
||||
"details": "Details"
|
||||
},
|
||||
"streamPanel": {
|
||||
"turns": "turns",
|
||||
"perTurnView": "Per-Turn View",
|
||||
"concatenatedView": "Concatenated View",
|
||||
"userPrompt": "User Prompt",
|
||||
"assistantResponse": "Assistant Response",
|
||||
"errors": "Errors",
|
||||
"truncatedNotice": "Output was truncated due to size limits.",
|
||||
"latest": "Latest",
|
||||
"copyId": "Copy ID",
|
||||
"copyPrompt": "Copy Prompt",
|
||||
"concatenatedPrompt": "Concatenated Prompt",
|
||||
"newRequest": "NEW REQUEST",
|
||||
"noOutput": "[No output]",
|
||||
"yourNextPrompt": "[Your next prompt here]",
|
||||
"conversationHistory": "CONVERSATION HISTORY",
|
||||
"loading": "Loading...",
|
||||
"noDetails": "No execution details available"
|
||||
},
|
||||
"details": {
|
||||
"turn": "Turn",
|
||||
"tool": "Tool",
|
||||
"mode": "Mode",
|
||||
"duration": "Duration",
|
||||
"created": "Created",
|
||||
"id": "ID",
|
||||
"timestamp": "Timestamp",
|
||||
"status": "Status"
|
||||
}
|
||||
}
|
||||
|
||||
18
ccw/frontend/src/locales/en/cli-monitor.json
Normal file
18
ccw/frontend/src/locales/en/cli-monitor.json
Normal file
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"title": "CLI Stream Monitor",
|
||||
"searchPlaceholder": "Search output...",
|
||||
"noExecutions": "No active CLI executions",
|
||||
"noExecutionsHint": "Start a CLI command to see streaming output",
|
||||
"selectExecution": "Select an execution to view output",
|
||||
"status": {
|
||||
"running": "Running",
|
||||
"completed": "Completed",
|
||||
"error": "Error"
|
||||
},
|
||||
"recovered": "Recovered",
|
||||
"lines": "lines",
|
||||
"autoScroll": "Auto-scroll",
|
||||
"scrollToBottom": "Scroll to bottom",
|
||||
"close": "Close",
|
||||
"refresh": "Refresh"
|
||||
}
|
||||
@@ -35,6 +35,7 @@
|
||||
"submit": "Submit",
|
||||
"reset": "Reset",
|
||||
"resetDesc": "Reset all user preferences to their default values. This cannot be undone.",
|
||||
"saving": "Saving...",
|
||||
"resetConfirm": "Reset all settings to defaults?",
|
||||
"resetToDefaults": "Reset to Defaults",
|
||||
"enable": "Enable",
|
||||
@@ -68,7 +69,9 @@
|
||||
"creating": "Creating...",
|
||||
"deleting": "Deleting...",
|
||||
"label": "Status",
|
||||
"openIssues": "Open Issues"
|
||||
"openIssues": "Open Issues",
|
||||
"enabled": "Enabled",
|
||||
"disabled": "Disabled"
|
||||
},
|
||||
"priority": {
|
||||
"low": "Low",
|
||||
|
||||
51
ccw/frontend/src/locales/en/execution-monitor.json
Normal file
51
ccw/frontend/src/locales/en/execution-monitor.json
Normal file
@@ -0,0 +1,51 @@
|
||||
{
|
||||
"page": {
|
||||
"title": "Execution Monitor",
|
||||
"subtitle": "View real-time execution status and history"
|
||||
},
|
||||
"currentExecution": {
|
||||
"title": "Current Execution",
|
||||
"noExecution": "No workflow is currently executing",
|
||||
"expand": "Expand",
|
||||
"collapse": "Collapse"
|
||||
},
|
||||
"stats": {
|
||||
"title": "Statistics",
|
||||
"totalExecutions": "Total Executions",
|
||||
"successRate": "Success Rate",
|
||||
"avgDuration": "Avg Duration",
|
||||
"nodeSuccessRate": "Node Success Rate"
|
||||
},
|
||||
"history": {
|
||||
"title": "Execution History",
|
||||
"empty": "No execution history",
|
||||
"tabs": {
|
||||
"byWorkflow": "By Workflow",
|
||||
"timeline": "Timeline",
|
||||
"list": "List View"
|
||||
}
|
||||
},
|
||||
"filters": {
|
||||
"workflow": "Workflow",
|
||||
"status": "Status",
|
||||
"dateRange": "Date Range",
|
||||
"all": "All Workflows",
|
||||
"allStatus": "All Status"
|
||||
},
|
||||
"execution": {
|
||||
"status": {
|
||||
"pending": "Pending",
|
||||
"running": "Running",
|
||||
"paused": "Paused",
|
||||
"completed": "Completed",
|
||||
"failed": "Failed"
|
||||
},
|
||||
"duration": "Duration",
|
||||
"startedAt": "Started",
|
||||
"completedAt": "Completed",
|
||||
"nodes": "Nodes",
|
||||
"progress": "Progress",
|
||||
"logs": "Logs",
|
||||
"viewDetails": "View Details"
|
||||
}
|
||||
}
|
||||
57
ccw/frontend/src/locales/en/explorer.json
Normal file
57
ccw/frontend/src/locales/en/explorer.json
Normal file
@@ -0,0 +1,57 @@
|
||||
{
|
||||
"title": "File Explorer",
|
||||
"description": "Browse and search files in your project",
|
||||
"viewMode": {
|
||||
"tree": "Tree",
|
||||
"list": "List",
|
||||
"compact": "Compact"
|
||||
},
|
||||
"sortOrder": {
|
||||
"name": "Name",
|
||||
"size": "Size",
|
||||
"modified": "Modified",
|
||||
"type": "Type"
|
||||
},
|
||||
"tree": {
|
||||
"loading": "Loading file tree...",
|
||||
"stats": "{files} items",
|
||||
"empty": "No files found",
|
||||
"error": "Failed to load file tree"
|
||||
},
|
||||
"preview": {
|
||||
"loading": "Loading file content...",
|
||||
"errorTitle": "Error loading file",
|
||||
"emptyTitle": "No file selected",
|
||||
"emptyMessage": "Select a file from the tree view to preview its content",
|
||||
"binaryTitle": "Binary file",
|
||||
"binaryMessage": "This file type cannot be previewed",
|
||||
"tooLargeTitle": "File too large",
|
||||
"tooLargeMessage": "File exceeds preview limit of {size}",
|
||||
"copy": "Copy to clipboard",
|
||||
"lastModified": "Last modified: {time}"
|
||||
},
|
||||
"toolbar": {
|
||||
"searchPlaceholder": "Search files...",
|
||||
"selectRoot": "Select directory",
|
||||
"rootDirectory": "Root Directory",
|
||||
"noRoots": "No directories available",
|
||||
"viewMode": "View Mode",
|
||||
"sortBy": "Sort By",
|
||||
"moreOptions": "More Options",
|
||||
"options": "Options",
|
||||
"showHidden": "Show hidden files",
|
||||
"expandAll": "Expand all",
|
||||
"collapseAll": "Collapse all"
|
||||
},
|
||||
"errors": {
|
||||
"loadFailed": "Failed to load file tree",
|
||||
"loadFileFailed": "Failed to load file content",
|
||||
"searchFailed": "Search failed",
|
||||
"networkError": "Network error occurred"
|
||||
},
|
||||
"context": {
|
||||
"hasClaudeMd": "Contains CLAUDE.md context",
|
||||
"gitRoot": "Git repository root",
|
||||
"workspace": "Workspace directory"
|
||||
}
|
||||
}
|
||||
@@ -40,5 +40,8 @@
|
||||
"empty": {
|
||||
"title": "No Tasks Found",
|
||||
"message": "No fix tasks match the current filter."
|
||||
},
|
||||
"phase": {
|
||||
"execution": "Execution"
|
||||
}
|
||||
}
|
||||
|
||||
97
ccw/frontend/src/locales/en/graph.json
Normal file
97
ccw/frontend/src/locales/en/graph.json
Normal file
@@ -0,0 +1,97 @@
|
||||
{
|
||||
"title": "Graph Explorer",
|
||||
"description": "Visualize code dependencies and relationships",
|
||||
"filters": {
|
||||
"title": "Filters",
|
||||
"nodeTypes": "Node Types",
|
||||
"edgeTypes": "Edge Types",
|
||||
"selectNodeTypes": "Select Node Types",
|
||||
"selectEdgeTypes": "Select Edge Types",
|
||||
"searchPlaceholder": "Search nodes...",
|
||||
"showOnlyIssues": "Show Only Issues",
|
||||
"showIsolatedNodes": "Show Isolated Nodes",
|
||||
"minComplexity": "Min Complexity",
|
||||
"maxDepth": "Max Depth",
|
||||
"reset": "Reset"
|
||||
},
|
||||
"nodeTypes": {
|
||||
"component": "Component",
|
||||
"module": "Module",
|
||||
"function": "Function",
|
||||
"class": "Class",
|
||||
"interface": "Interface",
|
||||
"variable": "Variable",
|
||||
"file": "File",
|
||||
"folder": "Folder",
|
||||
"dependency": "Dependency",
|
||||
"api": "API",
|
||||
"database": "Database",
|
||||
"service": "Service",
|
||||
"hook": "Hook",
|
||||
"utility": "Utility",
|
||||
"unknown": "Unknown"
|
||||
},
|
||||
"edgeTypes": {
|
||||
"imports": "Imports",
|
||||
"exports": "Exports",
|
||||
"extends": "Extends",
|
||||
"implements": "Implements",
|
||||
"uses": "Uses",
|
||||
"dependsOn": "Depends On",
|
||||
"calls": "Calls",
|
||||
"instantiates": "Instantiates",
|
||||
"contains": "Contains",
|
||||
"relatedTo": "Related To",
|
||||
"dataFlow": "Data Flow",
|
||||
"event": "Event",
|
||||
"unknown": "Unknown"
|
||||
},
|
||||
"actions": {
|
||||
"fitView": "Fit to Screen",
|
||||
"refresh": "Refresh",
|
||||
"resetFilters": "Reset Filters",
|
||||
"export": "Export",
|
||||
"settings": "Settings",
|
||||
"zoomIn": "Zoom In",
|
||||
"zoomOut": "Zoom Out"
|
||||
},
|
||||
"legend": {
|
||||
"title": "Legend",
|
||||
"nodeTypes": "Node Types",
|
||||
"edgeTypes": "Edge Types",
|
||||
"component": "Component",
|
||||
"module": "Module",
|
||||
"class": "Class",
|
||||
"function": "Function",
|
||||
"variable": "Variable",
|
||||
"imports": "Imports (solid line)",
|
||||
"calls": "Calls (green line)",
|
||||
"extends": "Extends (dashed line)"
|
||||
},
|
||||
"sidebar": {
|
||||
"title": "Graph Explorer",
|
||||
"nodeDetails": "Node Details",
|
||||
"hasIssues": "Has Issues",
|
||||
"filePath": "File Path",
|
||||
"lineNumber": "Line Number",
|
||||
"category": "Category",
|
||||
"lineCount": "Lines of Code",
|
||||
"documentation": "Documentation",
|
||||
"tags": "Tags",
|
||||
"issues": "Issues",
|
||||
"instructions": "Click on a node to view details. Use the toolbar to filter nodes and edges."
|
||||
},
|
||||
"status": {
|
||||
"nodes": "Nodes",
|
||||
"edges": "Edges",
|
||||
"loading": "Loading graph...",
|
||||
"updating": "Updating...",
|
||||
"filtered": "Showing {count} of {total} nodes"
|
||||
},
|
||||
"error": {
|
||||
"loading": "Failed to load graph: {message}",
|
||||
"empty": "No graph data available",
|
||||
"unknown": "An unknown error occurred"
|
||||
},
|
||||
"empty": "No graph data available. Try adjusting filters or refresh the page."
|
||||
}
|
||||
@@ -30,6 +30,26 @@
|
||||
"message": "Create an issue to track bugs or feature requests."
|
||||
}
|
||||
},
|
||||
"help": {
|
||||
"gettingStarted": {
|
||||
"title": "Getting Started",
|
||||
"description": "Learn the basics of CCW Dashboard and workflow management",
|
||||
"heading": "Getting Started with CCW"
|
||||
},
|
||||
"orchestratorGuide": {
|
||||
"title": "Orchestrator Guide",
|
||||
"description": "Master the visual workflow editor with drag-drop flows"
|
||||
},
|
||||
"sessionsManagement": {
|
||||
"title": "Sessions Management",
|
||||
"description": "Understanding workflow sessions and task tracking"
|
||||
},
|
||||
"cliIntegration": {
|
||||
"title": "CLI Integration",
|
||||
"description": "Using CCW commands and CLI tool integration",
|
||||
"heading": "CLI Integration"
|
||||
}
|
||||
},
|
||||
"errors": {
|
||||
"loadFailed": "Failed to load dashboard data",
|
||||
"retry": "Retry"
|
||||
|
||||
45
ccw/frontend/src/locales/en/index.json
Normal file
45
ccw/frontend/src/locales/en/index.json
Normal file
@@ -0,0 +1,45 @@
|
||||
{
|
||||
"title": "Code Index",
|
||||
"description": "Manage the code search index for faster navigation and code discovery",
|
||||
"sections": {
|
||||
"status": "Status",
|
||||
"actions": "Actions",
|
||||
"settings": "Settings"
|
||||
},
|
||||
"status": {
|
||||
"idle": "Idle",
|
||||
"building": "Building",
|
||||
"completed": "Ready",
|
||||
"failed": "Failed"
|
||||
},
|
||||
"actions": {
|
||||
"rebuild": "Rebuild Index",
|
||||
"rebuildFull": "Full Rebuild",
|
||||
"cancel": "Cancel"
|
||||
},
|
||||
"stats": {
|
||||
"totalFiles": "Total Files",
|
||||
"totalFilesDesc": "Files in the index",
|
||||
"lastUpdated": "Last Updated",
|
||||
"lastUpdatedDesc": "When the index was last built",
|
||||
"buildTime": "Build Time",
|
||||
"buildTimeDesc": "Time taken for last build",
|
||||
"never": "Never indexed"
|
||||
},
|
||||
"time": {
|
||||
"justNow": "Just now",
|
||||
"minutesAgo": "{value}m ago",
|
||||
"hoursAgo": "{value}h ago",
|
||||
"daysAgo": "{value}d ago"
|
||||
},
|
||||
"errors": {
|
||||
"rebuildFailed": "Index rebuild failed",
|
||||
"loadFailed": "Failed to load index status"
|
||||
},
|
||||
"settings": {
|
||||
"autoRebuild": "Auto Rebuild",
|
||||
"autoRebuildDesc": "Automatically rebuild index when code changes",
|
||||
"rebuildInterval": "Rebuild Interval",
|
||||
"rebuildIntervalDesc": "How often to check for code changes"
|
||||
}
|
||||
}
|
||||
@@ -21,7 +21,19 @@ import reviewSession from './review-session.json';
|
||||
import sessionDetail from './session-detail.json';
|
||||
import skills from './skills.json';
|
||||
import cliManager from './cli-manager.json';
|
||||
import cliMonitor from './cli-monitor.json';
|
||||
import mcpManager from './mcp-manager.json';
|
||||
import theme from './theme.json';
|
||||
import executionMonitor from './execution-monitor.json';
|
||||
import cliHooks from './cli-hooks.json';
|
||||
import index from './index.json';
|
||||
import rules from './rules.json';
|
||||
import prompts from './prompts.json';
|
||||
import explorer from './explorer.json';
|
||||
import graph from './graph.json';
|
||||
import notification from './notification.json';
|
||||
import notifications from './notifications.json';
|
||||
import workspace from './workspace.json';
|
||||
|
||||
/**
|
||||
* Flattens nested JSON object to dot-separated keys
|
||||
@@ -66,5 +78,17 @@ export default {
|
||||
...flattenMessages(sessionDetail, 'sessionDetail'),
|
||||
...flattenMessages(skills, 'skills'),
|
||||
...flattenMessages(cliManager), // No prefix - has cliEndpoints, cliInstallations, etc. as top-level keys
|
||||
...flattenMessages(cliMonitor, 'cliMonitor'),
|
||||
...flattenMessages(mcpManager, 'mcp'),
|
||||
...flattenMessages(theme, 'theme'),
|
||||
...flattenMessages(cliHooks, 'cliHooks'),
|
||||
...flattenMessages(executionMonitor, 'executionMonitor'),
|
||||
...flattenMessages(index, 'index'),
|
||||
...flattenMessages(rules, 'rules'),
|
||||
...flattenMessages(prompts, 'prompts'),
|
||||
...flattenMessages(explorer, 'explorer'),
|
||||
...flattenMessages(graph, 'graph'),
|
||||
...flattenMessages(notification, 'notificationPanel'),
|
||||
...flattenMessages(notifications, 'notifications'),
|
||||
...flattenMessages(workspace, 'workspace'),
|
||||
} as Record<string, string>;
|
||||
|
||||
@@ -19,6 +19,8 @@
|
||||
"title": "No tasks in this session",
|
||||
"message": "This session does not contain any tasks yet."
|
||||
},
|
||||
"untitled": "Untitled Task",
|
||||
"discussionTopic": "Discussion Topic",
|
||||
"notFound": {
|
||||
"title": "Lite Task Not Found",
|
||||
"message": "The requested lite task session could not be found."
|
||||
|
||||
@@ -1,6 +1,10 @@
|
||||
{
|
||||
"title": "MCP Servers",
|
||||
"description": "Manage Model Context Protocol (MCP) servers for cross-CLI integration",
|
||||
"mode": {
|
||||
"claude": "Claude",
|
||||
"codex": "Codex"
|
||||
},
|
||||
"scope": {
|
||||
"global": "Global",
|
||||
"project": "Project"
|
||||
@@ -18,6 +22,11 @@
|
||||
"command": "Command",
|
||||
"args": "Arguments",
|
||||
"env": "Environment Variables",
|
||||
"codex": {
|
||||
"configPath": "Config Path",
|
||||
"readOnly": "Read-only",
|
||||
"readOnlyNotice": "Codex MCP servers are managed via config.toml and cannot be edited here."
|
||||
},
|
||||
"filters": {
|
||||
"all": "All",
|
||||
"searchPlaceholder": "Search servers by name or command..."
|
||||
@@ -33,5 +42,89 @@
|
||||
"emptyState": {
|
||||
"title": "No MCP Servers Found",
|
||||
"message": "Add an MCP server to enable cross-CLI integration with tools like Claude, Codex, and Qwen."
|
||||
},
|
||||
"dialog": {
|
||||
"addTitle": "Add MCP Server",
|
||||
"editTitle": "Edit MCP Server \"{name}\"",
|
||||
"form": {
|
||||
"template": "Template",
|
||||
"templatePlaceholder": "Select a template to pre-fill the form",
|
||||
"name": "Server Name",
|
||||
"namePlaceholder": "e.g., my-mcp-server",
|
||||
"command": "Command",
|
||||
"commandPlaceholder": "e.g., npx, python, node",
|
||||
"args": "Arguments",
|
||||
"argsPlaceholder": "Comma-separated arguments, e.g., -v, --option=value",
|
||||
"argsHint": "Separate multiple arguments with commas",
|
||||
"env": "Environment Variables",
|
||||
"envPlaceholder": "Key=value pairs (one per line), e.g.,\nAPI_KEY=your_key\nDEBUG=true",
|
||||
"envHint": "Enter one key=value pair per line",
|
||||
"scope": "Scope",
|
||||
"enabled": "Enable this server"
|
||||
},
|
||||
"templates": {
|
||||
"npx-stdio": "NPX STDIO",
|
||||
"python-stdio": "Python STDIO",
|
||||
"sse-server": "SSE Server"
|
||||
},
|
||||
"validation": {
|
||||
"nameRequired": "Server name is required",
|
||||
"nameExists": "A server with this name already exists",
|
||||
"commandRequired": "Command is required"
|
||||
},
|
||||
"actions": {
|
||||
"save": "Save",
|
||||
"saving": "Saving...",
|
||||
"cancel": "Cancel"
|
||||
}
|
||||
},
|
||||
"ccw": {
|
||||
"title": "CCW MCP Server",
|
||||
"description": "Special built-in MCP server for CCW file operations and memory management",
|
||||
"status": {
|
||||
"installed": "Installed",
|
||||
"notInstalled": "Not Installed",
|
||||
"special": "Built-in"
|
||||
},
|
||||
"tools": {
|
||||
"label": "Available Tools",
|
||||
"core": "Core",
|
||||
"write_file": {
|
||||
"name": "write_file",
|
||||
"desc": "Write or create new files"
|
||||
},
|
||||
"edit_file": {
|
||||
"name": "edit_file",
|
||||
"desc": "Edit or replace file contents"
|
||||
},
|
||||
"read_file": {
|
||||
"name": "read_file",
|
||||
"desc": "Read file contents"
|
||||
},
|
||||
"core_memory": {
|
||||
"name": "core_memory",
|
||||
"desc": "Manage core memory entries"
|
||||
}
|
||||
},
|
||||
"paths": {
|
||||
"label": "Path Configuration",
|
||||
"projectRoot": "Project Root",
|
||||
"projectRootPlaceholder": "e.g., D:\\Projects\\MyProject",
|
||||
"allowedDirs": "Allowed Directories",
|
||||
"allowedDirsPlaceholder": "dir1,dir2,dir3",
|
||||
"allowedDirsHint": "Comma-separated list of allowed directories",
|
||||
"disableSandbox": "Disable Sandbox"
|
||||
},
|
||||
"actions": {
|
||||
"enableAll": "Enable All",
|
||||
"disableAll": "Disable All",
|
||||
"install": "Install CCW MCP",
|
||||
"installing": "Installing...",
|
||||
"uninstall": "Uninstall",
|
||||
"uninstalling": "Uninstalling...",
|
||||
"uninstallConfirm": "Are you sure you want to uninstall CCW MCP?",
|
||||
"saveConfig": "Save Configuration",
|
||||
"saving": "Saving..."
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,11 +11,16 @@
|
||||
"skills": "Skills",
|
||||
"commands": "Commands",
|
||||
"memory": "Memory",
|
||||
"prompts": "Prompt History",
|
||||
"settings": "Settings",
|
||||
"mcp": "MCP Servers",
|
||||
"endpoints": "CLI Endpoints",
|
||||
"installations": "Installations",
|
||||
"help": "Help"
|
||||
"help": "Help",
|
||||
"hooks": "Hooks",
|
||||
"rules": "Rules",
|
||||
"explorer": "File Explorer",
|
||||
"graph": "Graph Explorer"
|
||||
},
|
||||
"sidebar": {
|
||||
"collapse": "Collapse",
|
||||
|
||||
9
ccw/frontend/src/locales/en/notification.json
Normal file
9
ccw/frontend/src/locales/en/notification.json
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"title": "Notifications",
|
||||
"markAllRead": "Mark Read",
|
||||
"clearAll": "Clear All",
|
||||
"showMore": "Show more",
|
||||
"showLess": "Show less",
|
||||
"empty": "No notifications",
|
||||
"emptyHint": "Notifications will appear here"
|
||||
}
|
||||
18
ccw/frontend/src/locales/en/notifications.json
Normal file
18
ccw/frontend/src/locales/en/notifications.json
Normal file
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"title": "Notifications",
|
||||
"empty": "No notifications",
|
||||
"emptyHint": "Notifications will appear here",
|
||||
"markAllRead": "Mark Read",
|
||||
"clearAll": "Clear All",
|
||||
"showMore": "Show more",
|
||||
"showLess": "Show less",
|
||||
"systemNotifications": "System Notifications",
|
||||
"systemNotificationsDesc": "Show browser native notifications for important events",
|
||||
"justNow": "just now",
|
||||
"minutesAgo": "{0}m ago",
|
||||
"hoursAgo": "{0}h ago",
|
||||
"daysAgo": "{0}d ago",
|
||||
"oneMinuteAgo": "1m ago",
|
||||
"oneHourAgo": "1h ago",
|
||||
"oneDayAgo": "1d ago"
|
||||
}
|
||||
@@ -59,5 +59,136 @@
|
||||
"timeline": "Timeline",
|
||||
"variables": "Variables",
|
||||
"realtime": "Real-time Updates"
|
||||
},
|
||||
"notifications": {
|
||||
"flowCreated": "Flow Created",
|
||||
"flowSaved": "Flow Saved",
|
||||
"saveFailed": "Save Failed",
|
||||
"flowLoaded": "Flow Loaded",
|
||||
"loadFailed": "Load Failed",
|
||||
"flowDeleted": "Flow Deleted",
|
||||
"deleteFailed": "Delete Failed",
|
||||
"flowDuplicated": "Flow Duplicated",
|
||||
"duplicateFailed": "Duplicate Failed"
|
||||
},
|
||||
"templateLibrary": {
|
||||
"title": "Template Library",
|
||||
"description": "Browse and import workflow templates, or export your current flow as a template.",
|
||||
"searchPlaceholder": "Search templates...",
|
||||
"allCategories": "All",
|
||||
"exportCurrent": "Export Current",
|
||||
"close": "Close",
|
||||
"errors": {
|
||||
"loadFailed": "Failed to load templates"
|
||||
},
|
||||
"emptyState": {
|
||||
"title": "No templates found",
|
||||
"searchSuggestion": "Try a different search query"
|
||||
},
|
||||
"footer": {
|
||||
"templateCount": "{count} template",
|
||||
"templateCount_plural": "{count} templates"
|
||||
},
|
||||
"card": {
|
||||
"nodes": "nodes",
|
||||
"import": "Import",
|
||||
"delete": "Delete"
|
||||
},
|
||||
"exportDialog": {
|
||||
"title": "Export as Template",
|
||||
"description": "Save this flow as a reusable template in your library.",
|
||||
"fields": {
|
||||
"name": "Name",
|
||||
"namePlaceholder": "Template name",
|
||||
"description": "Description",
|
||||
"descriptionPlaceholder": "Brief description of this template",
|
||||
"category": "Category",
|
||||
"categoryPlaceholder": "e.g., Development, Testing, Deployment",
|
||||
"tags": "Tags (comma-separated)",
|
||||
"tagsPlaceholder": "e.g., react, testing, ci/cd"
|
||||
},
|
||||
"actions": {
|
||||
"cancel": "Cancel",
|
||||
"export": "Export"
|
||||
}
|
||||
}
|
||||
},
|
||||
"toolbar": {
|
||||
"placeholder": "Flow name",
|
||||
"unsavedChanges": "Unsaved changes",
|
||||
"new": "New",
|
||||
"save": "Save",
|
||||
"load": "Load",
|
||||
"export": "Export",
|
||||
"templates": "Templates",
|
||||
"savedFlows": "Saved Flows ({count})",
|
||||
"loading": "Loading...",
|
||||
"noSavedFlows": "No saved flows",
|
||||
"duplicate": "Duplicate",
|
||||
"delete": "Delete"
|
||||
},
|
||||
"palette": {
|
||||
"title": "Node Palette",
|
||||
"open": "Open node palette",
|
||||
"collapse": "Collapse palette",
|
||||
"instructions": "Drag nodes onto the canvas to add them to your workflow",
|
||||
"nodeTypes": "Node Types",
|
||||
"tipLabel": "Tip:",
|
||||
"tip": "Connect nodes by dragging from output to input handles"
|
||||
},
|
||||
"propertyPanel": {
|
||||
"title": "Properties",
|
||||
"open": "Open properties panel",
|
||||
"close": "Close panel",
|
||||
"selectNode": "Select a node to edit its properties",
|
||||
"deleteNode": "Delete Node",
|
||||
"placeholders": {
|
||||
"nodeLabel": "Node label",
|
||||
"commandName": "/command-name",
|
||||
"commandArgs": "Command arguments",
|
||||
"timeout": "60000",
|
||||
"path": "/path/to/file",
|
||||
"content": "File content...",
|
||||
"destinationPath": "/path/to/destination",
|
||||
"variableName": "variableName",
|
||||
"condition": "e.g., result.success === true",
|
||||
"trueLabel": "True",
|
||||
"falseLabel": "False"
|
||||
},
|
||||
"labels": {
|
||||
"label": "Label",
|
||||
"command": "Command",
|
||||
"arguments": "Arguments",
|
||||
"executionMode": "Execution Mode",
|
||||
"onError": "On Error",
|
||||
"timeout": "Timeout (ms)",
|
||||
"operation": "Operation",
|
||||
"path": "Path",
|
||||
"content": "Content",
|
||||
"destinationPath": "Destination Path",
|
||||
"outputVariable": "Output Variable",
|
||||
"addToContext": "Add to context",
|
||||
"condition": "Condition",
|
||||
"trueLabel": "True Label",
|
||||
"falseLabel": "False Label",
|
||||
"joinMode": "Join Mode",
|
||||
"failFast": "Fail fast (stop all branches on first error)"
|
||||
},
|
||||
"options": {
|
||||
"modeAnalysis": "Analysis (Read-only)",
|
||||
"modeWrite": "Write (Modify files)",
|
||||
"errorStop": "Stop execution",
|
||||
"errorContinue": "Continue",
|
||||
"errorRetry": "Retry",
|
||||
"operationRead": "Read",
|
||||
"operationWrite": "Write",
|
||||
"operationAppend": "Append",
|
||||
"operationDelete": "Delete",
|
||||
"operationCopy": "Copy",
|
||||
"operationMove": "Move",
|
||||
"joinModeAll": "Wait for all branches",
|
||||
"joinModeAny": "Complete when any branch finishes",
|
||||
"joinModeNone": "No synchronization"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -30,7 +30,14 @@
|
||||
"devIndex": {
|
||||
"title": "Development History",
|
||||
"categories": "Categories",
|
||||
"timeline": "Timeline"
|
||||
"timeline": "Timeline",
|
||||
"category": {
|
||||
"features": "Features",
|
||||
"enhancements": "Enhancements",
|
||||
"bugfixes": "Bug Fixes",
|
||||
"refactorings": "Refactorings",
|
||||
"documentation": "Documentation"
|
||||
}
|
||||
},
|
||||
"guidelines": {
|
||||
"title": "Project Guidelines",
|
||||
|
||||
74
ccw/frontend/src/locales/en/prompts.json
Normal file
74
ccw/frontend/src/locales/en/prompts.json
Normal file
@@ -0,0 +1,74 @@
|
||||
{
|
||||
"title": "Prompt History",
|
||||
"description": "View and analyze your prompt history with AI insights",
|
||||
"searchPlaceholder": "Search prompts...",
|
||||
"filterByIntent": "Filter by intent",
|
||||
"intents": {
|
||||
"all": "All Intents",
|
||||
"intent": "Intent",
|
||||
"bug-fix": "Bug Fix",
|
||||
"feature": "Feature",
|
||||
"refactor": "Refactor",
|
||||
"document": "Document",
|
||||
"analyze": "Analyze"
|
||||
},
|
||||
"stats": {
|
||||
"totalCount": "Total Prompts",
|
||||
"totalCountDesc": "All stored prompts",
|
||||
"avgLength": "Avg Length",
|
||||
"avgLengthDesc": "Mean character count",
|
||||
"topIntent": "Top Intent",
|
||||
"topIntentDesc": "Most used category",
|
||||
"noIntent": "N/A"
|
||||
},
|
||||
"card": {
|
||||
"untitled": "Untitled Prompt",
|
||||
"used": "Used {count} times"
|
||||
},
|
||||
"timeline": {
|
||||
"ungrouped": "Ungrouped",
|
||||
"session": "Session: {session}"
|
||||
},
|
||||
"actions": {
|
||||
"copy": "Copy prompt",
|
||||
"copied": "Copied!",
|
||||
"delete": "Delete",
|
||||
"expand": "Expand",
|
||||
"collapse": "Collapse"
|
||||
},
|
||||
"insights": {
|
||||
"title": "AI Insights",
|
||||
"analyze": "Analyze",
|
||||
"analyzing": "Analyzing prompts...",
|
||||
"selectTool": "Select tool",
|
||||
"confidence": "confidence",
|
||||
"empty": {
|
||||
"title": "No insights yet",
|
||||
"message": "Run an analysis to get AI-powered insights about your prompt patterns and suggestions for improvement."
|
||||
},
|
||||
"sections": {
|
||||
"insights": "Insights",
|
||||
"patterns": "Detected Patterns",
|
||||
"suggestions": "Suggestions"
|
||||
}
|
||||
},
|
||||
"suggestions": {
|
||||
"types": {
|
||||
"refactor": "Refactor",
|
||||
"optimize": "Optimize",
|
||||
"fix": "Fix",
|
||||
"document": "Document"
|
||||
},
|
||||
"effort": "Effort"
|
||||
},
|
||||
"dialog": {
|
||||
"deleteTitle": "Delete Prompt",
|
||||
"deleteConfirm": "Are you sure you want to delete this prompt? This action cannot be undone."
|
||||
},
|
||||
"emptyState": {
|
||||
"title": "No prompts found",
|
||||
"message": "No prompts match your current filter.",
|
||||
"noPrompts": "No prompts yet",
|
||||
"createFirst": "Create your first prompt to start building history"
|
||||
}
|
||||
}
|
||||
79
ccw/frontend/src/locales/en/rules.json
Normal file
79
ccw/frontend/src/locales/en/rules.json
Normal file
@@ -0,0 +1,79 @@
|
||||
{
|
||||
"title": "Rules Manager",
|
||||
"description": "Manage Claude Code memory rules and configurations",
|
||||
"severity": {
|
||||
"error": "Error",
|
||||
"warning": "Warning",
|
||||
"info": "Info"
|
||||
},
|
||||
"location": {
|
||||
"project": "Project",
|
||||
"user": "User"
|
||||
},
|
||||
"actions": {
|
||||
"edit": "Edit",
|
||||
"delete": "Delete",
|
||||
"create": "Create Rule",
|
||||
"update": "Update Rule",
|
||||
"toggle": "Toggle Enabled",
|
||||
"enable": "Enable Rule",
|
||||
"disable": "Disable Rule"
|
||||
},
|
||||
"filters": {
|
||||
"all": "All",
|
||||
"enabled": "Enabled",
|
||||
"disabled": "Disabled",
|
||||
"location": "Location",
|
||||
"category": "Category"
|
||||
},
|
||||
"searchPlaceholder": "Search rules...",
|
||||
"emptyState": {
|
||||
"title": "No Rules Found",
|
||||
"message": "No rules match your current filter.",
|
||||
"createFirst": "Create your first rule to get started"
|
||||
},
|
||||
"card": {
|
||||
"pattern": "Pattern",
|
||||
"subdirectory": "Directory"
|
||||
},
|
||||
"dialog": {
|
||||
"addTitle": "Create New Rule",
|
||||
"editTitle": "Edit Rule: {name}",
|
||||
"deleteTitle": "Delete Rule",
|
||||
"deleteConfirm": "Are you sure you want to delete this rule? This action cannot be undone.",
|
||||
"description": "Configure Claude Code memory rules to guide AI behavior",
|
||||
"form": {
|
||||
"name": "Rule Name",
|
||||
"namePlaceholder": "e.g., Code Style Guide",
|
||||
"description": "Description",
|
||||
"descriptionPlaceholder": "Brief description of what this rule enforces",
|
||||
"category": "Category",
|
||||
"severity": "Severity",
|
||||
"fileName": "File Name",
|
||||
"fileNamePlaceholder": "rule-name.md",
|
||||
"location": "Location",
|
||||
"subdirectory": "Subdirectory (optional)",
|
||||
"subdirectoryPlaceholder": "e.g., coding/security",
|
||||
"pattern": "File Pattern (optional)",
|
||||
"patternPlaceholder": "e.g., src/**/*.ts",
|
||||
"content": "Rule Content",
|
||||
"contentPlaceholder": "Enter the rule content in markdown format...",
|
||||
"enabled": "Enabled"
|
||||
},
|
||||
"validation": {
|
||||
"nameRequired": "Rule name is required",
|
||||
"fileNameRequired": "File name is required",
|
||||
"fileNameMd": "File name must end with .md",
|
||||
"locationRequired": "Location is required",
|
||||
"contentRequired": "Rule content is required"
|
||||
},
|
||||
"actions": {
|
||||
"saving": "Saving..."
|
||||
}
|
||||
},
|
||||
"status": {
|
||||
"creating": "Creating...",
|
||||
"updating": "Updating...",
|
||||
"deleting": "Deleting..."
|
||||
}
|
||||
}
|
||||
21
ccw/frontend/src/locales/en/theme.json
Normal file
21
ccw/frontend/src/locales/en/theme.json
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"title": {
|
||||
"colorScheme": "Color Scheme",
|
||||
"themeMode": "Theme Mode"
|
||||
},
|
||||
"colorScheme": {
|
||||
"blue": "Classic Blue",
|
||||
"green": "Deep Green",
|
||||
"orange": "Vibrant Orange",
|
||||
"purple": "Elegant Purple"
|
||||
},
|
||||
"themeMode": {
|
||||
"light": "Light",
|
||||
"dark": "Dark"
|
||||
},
|
||||
"select": {
|
||||
"colorScheme": "Select {name} theme",
|
||||
"themeMode": "Select {name} mode"
|
||||
},
|
||||
"current": "Current theme: {name}"
|
||||
}
|
||||
29
ccw/frontend/src/locales/en/workspace.json
Normal file
29
ccw/frontend/src/locales/en/workspace.json
Normal file
@@ -0,0 +1,29 @@
|
||||
{
|
||||
"selector": {
|
||||
"noWorkspace": "No workspace selected",
|
||||
"recentPaths": "Recent Projects",
|
||||
"noRecentPaths": "No recent projects",
|
||||
"current": "Current",
|
||||
"browse": "Select Folder...",
|
||||
"removePath": "Remove from recent",
|
||||
"ariaLabel": "Workspace selector"
|
||||
},
|
||||
"dialog": {
|
||||
"title": "Select Project Folder",
|
||||
"placeholder": "Enter project path...",
|
||||
"help": "The path to your project directory"
|
||||
},
|
||||
"actions": {
|
||||
"switch": "Switch Workspace",
|
||||
"switchFailed": "Failed to switch workspace",
|
||||
"switchSuccess": "Successfully switched to {path}"
|
||||
},
|
||||
"validation": {
|
||||
"pathRequired": "Project path is required",
|
||||
"invalidPath": "Invalid project path: {path}"
|
||||
},
|
||||
"notifications": {
|
||||
"switching": "Switching workspace...",
|
||||
"refreshing": "Refreshing recent paths..."
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user