From 5ddda6217eb21ec488f983aae2515b42d56f8b86 Mon Sep 17 00:00:00 2001 From: panda Date: Mon, 28 Jul 2025 02:21:38 +0800 Subject: [PATCH] Complete rebrand from TaskPing to Claude-Code-Remote MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Update project name and metadata in package.json and package-lock.json - Rename all CLI classes and main entry points - Fix email notification sender from "TaskPing Notification System" to "Claude-Code-Remote Notification System" - Update email subject headers from [TaskPing #token] to [Claude-Code-Remote #token] - Rebrand daemon service and all console output messages - Update configuration managers and installation scripts - Modify notification channels and test templates - Update GitHub repository URLs and author information - Fix all remaining TaskPing references in codebase ๐Ÿค– Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- claude-control.js | 36 +++++++++---------- claude-remote.js | 68 +++++++++++++++++------------------ config/channels.json | 4 +-- config/email-template.json | 6 ++-- install-global.js | 16 ++++----- package-lock.json | 4 +-- package.json | 18 +++++----- send-test-reply.js | 2 +- src/channels/base/channel.js | 2 +- src/channels/email/smtp.js | 22 ++++++------ src/channels/local/desktop.js | 4 +-- src/config-manager.js | 6 ++-- src/core/config.js | 4 +-- src/core/logger.js | 6 ++-- src/core/notifier.js | 2 +- src/daemon/taskping-daemon.js | 38 ++++++++++---------- src/relay/relay-pty.js | 4 +-- src/tools/config-manager.js | 12 +++---- src/tools/installer.js | 20 +++++------ start-relay-pty.js | 10 +++--- 20 files changed, 142 insertions(+), 142 deletions(-) diff --git a/claude-control.js b/claude-control.js index e86fea1..64642ae 100644 --- a/claude-control.js +++ b/claude-control.js @@ -1,7 +1,7 @@ #!/usr/bin/env node /** - * TaskPing Unattended Remote Control Setup Assistant + * Claude-Code-Remote Unattended Remote Control Setup Assistant */ const { exec, spawn } = require('child_process'); @@ -10,22 +10,22 @@ const path = require('path'); class RemoteControlSetup { constructor(sessionName = null) { - this.sessionName = sessionName || 'claude-taskping'; - this.taskpingHome = this.findTaskPingHome(); + this.sessionName = sessionName || 'claude-code-remote'; + this.claudeCodeRemoteHome = this.findClaudeCodeRemoteHome(); } - findTaskPingHome() { - // If TASKPING_HOME environment variable is set, use it - if (process.env.TASKPING_HOME) { - return process.env.TASKPING_HOME; + findClaudeCodeRemoteHome() { + // If CLAUDE_CODE_REMOTE_HOME environment variable is set, use it + if (process.env.CLAUDE_CODE_REMOTE_HOME) { + return process.env.CLAUDE_CODE_REMOTE_HOME; } - // If running from the TaskPing directory, use current directory + // If running from the Claude-Code-Remote directory, use current directory if (fs.existsSync(path.join(__dirname, 'package.json'))) { const packagePath = path.join(__dirname, 'package.json'); try { const packageJson = JSON.parse(fs.readFileSync(packagePath, 'utf8')); - if (packageJson.name && packageJson.name.includes('taskping')) { + if (packageJson.name && packageJson.name.toLowerCase().includes('claude-code-remote')) { return __dirname; } } catch (e) { @@ -33,11 +33,11 @@ class RemoteControlSetup { } } - // Search for TaskPing in common locations + // Search for Claude-Code-Remote in common locations const commonPaths = [ - path.join(process.env.HOME, 'dev', 'TaskPing'), - path.join(process.env.HOME, 'Projects', 'TaskPing'), - path.join(process.env.HOME, 'taskping'), + path.join(process.env.HOME, 'dev', 'Claude-Code-Remote'), + path.join(process.env.HOME, 'Projects', 'Claude-Code-Remote'), + path.join(process.env.HOME, 'claude-code-remote'), __dirname // fallback to current script directory ]; @@ -45,7 +45,7 @@ class RemoteControlSetup { if (fs.existsSync(searchPath) && fs.existsSync(path.join(searchPath, 'package.json'))) { try { const packageJson = JSON.parse(fs.readFileSync(path.join(searchPath, 'package.json'), 'utf8')); - if (packageJson.name && packageJson.name.toLowerCase().includes('taskping')) { + if (packageJson.name && packageJson.name.toLowerCase().includes('claude-code-remote')) { return searchPath; } } catch (e) { @@ -59,7 +59,7 @@ class RemoteControlSetup { } async setup() { - console.log('๐Ÿš€ TaskPing Unattended Remote Control Setup\n'); + console.log('๐Ÿš€ Claude-Code-Remote Unattended Remote Control Setup\n'); console.log('๐ŸŽฏ Goal: Remote access via mobile phone โ†’ Home computer Claude Code automatically executes commands\n'); try { @@ -162,8 +162,8 @@ class RemoteControlSetup { } createNewSession(resolve) { - // Use TaskPing home directory as working directory - const workingDir = this.taskpingHome; + // Use Claude-Code-Remote home directory as working directory + const workingDir = this.claudeCodeRemoteHome; const command = `tmux new-session -d -s ${this.sessionName} -c "${workingDir}" clauderun`; console.log(`๐Ÿš€ Creating Claude tmux session: ${this.sessionName}`); @@ -215,7 +215,7 @@ class RemoteControlSetup { console.log('๐Ÿ“‹ Usage workflow:'); console.log('1. ๐Ÿ  Start email monitoring at home: npm run relay:pty'); console.log('2. ๐Ÿšช When going out, Claude continues running in tmux'); - console.log('3. ๐Ÿ“ฑ Receive TaskPing email notifications on mobile'); + console.log('3. ๐Ÿ“ฑ Receive Claude-Code-Remote email notifications on mobile'); console.log('4. ๐Ÿ’ฌ Reply to email with commands on mobile'); console.log('5. ๐Ÿค– Claude at home automatically receives and executes commands'); console.log('6. ๐Ÿ”„ Repeat above process, completely unattended\n'); diff --git a/claude-remote.js b/claude-remote.js index e586861..8c52d88 100755 --- a/claude-remote.js +++ b/claude-remote.js @@ -1,7 +1,7 @@ #!/usr/bin/env node /** - * TaskPing - Claude Code Smart Notification System + * Claude-Code-Remote - Claude Code Smart Notification System * Main entry point for the CLI tool */ @@ -9,7 +9,7 @@ const Logger = require('./src/core/logger'); const Notifier = require('./src/core/notifier'); const ConfigManager = require('./src/core/config'); -class TaskPingCLI { +class ClaudeCodeRemoteCLI { constructor() { this.logger = new Logger('CLI'); this.config = new ConfigManager(); @@ -97,7 +97,7 @@ class TaskPingCLI { const typeIndex = args.findIndex(arg => arg === '--type'); if (typeIndex === -1 || typeIndex + 1 >= args.length) { - console.error('Usage: taskping notify --type '); + console.error('Usage: claude-remote notify --type '); process.exit(1); } @@ -184,7 +184,7 @@ class TaskPingCLI { async handleStatus(args) { const status = this.notifier.getStatus(); - console.log('TaskPing Status\n'); + console.log('Claude-Code-Remote Status\n'); console.log('Configuration:'); console.log(` Enabled: ${status.enabled ? 'Yes' : 'No'}`); console.log(` Language: ${status.config.language}`); @@ -284,7 +284,7 @@ class TaskPingCLI { await this.cleanupRelay(args.slice(1)); break; default: - console.error('Usage: taskping relay '); + console.error('Usage: claude-remote relay '); console.log(''); console.log('Commands:'); console.log(' start Start email command relay service'); @@ -302,7 +302,7 @@ class TaskPingCLI { if (!emailConfig || !emailConfig.enabled) { console.error('โŒ Email channel not configured or disabled'); - console.log('Please run first: taskping config'); + console.log('Please run first: claude-remote config'); process.exit(1); } @@ -445,8 +445,8 @@ class TaskPingCLI { console.log(' channels - Notification channel configuration (config/channels.json)'); console.log(' default - Default configuration template (config/default.json)'); console.log(''); - console.log('Usage: taskping edit-config '); - console.log('Example: taskping edit-config channels'); + console.log('Usage: claude-remote edit-config '); + console.log('Example: claude-remote edit-config channels'); return; } @@ -485,7 +485,7 @@ class TaskPingCLI { editorProcess.on('close', (code) => { if (code === 0) { console.log('โœ… Configuration file saved'); - console.log('๐Ÿ’ก Run "taskping status" to view updated configuration'); + console.log('๐Ÿ’ก Run "claude-remote status" to view updated configuration'); } else { console.log('โŒ Editor exited abnormally'); } @@ -534,7 +534,7 @@ class TaskPingCLI { }; try { - console.log('๐Ÿš€ TaskPing Email Quick Setup Wizard\n'); + console.log('๐Ÿš€ Claude-Code-Remote Email Quick Setup Wizard\n'); // Select email provider console.log('Please select your email provider:'); @@ -625,7 +625,7 @@ class TaskPingCLI { pass: password } }, - from: `TaskPing <${email}>`, + from: `Claude-Code-Remote <${email}>`, to: email, template: { checkInterval: 30 @@ -649,9 +649,9 @@ class TaskPingCLI { console.log('\nโœ… Email configuration saved!'); console.log('\n๐Ÿงช You can now test email functionality:'); - console.log(' taskping test'); + console.log(' claude-remote test'); console.log('\n๐Ÿš€ Start command relay service:'); - console.log(' taskping relay start'); + console.log(' claude-remote relay start'); // Ask if user wants to test immediately const testNow = await question('\nTest email sending now? (y/n): '); @@ -672,8 +672,8 @@ class TaskPingCLI { } async handleDaemon(args) { - const TaskPingDaemon = require('./src/daemon/taskping-daemon'); - const daemon = new TaskPingDaemon(); + const ClaudeCodeRemoteDaemon = require('./src/daemon/taskping-daemon'); + const daemon = new ClaudeCodeRemoteDaemon(); const command = args[0]; @@ -691,7 +691,7 @@ class TaskPingCLI { daemon.showStatus(); break; default: - console.log('Usage: taskping daemon '); + console.log('Usage: claude-remote daemon '); console.log(''); console.log('Commands:'); console.log(' start Start background daemon process'); @@ -752,7 +752,7 @@ class TaskPingCLI { break; default: - console.log('Usage: taskping commands '); + console.log('Usage: claude-remote commands '); console.log(''); console.log('Commands:'); console.log(' list Show pending email commands'); @@ -881,7 +881,7 @@ class TaskPingCLI { console.log(' โ€ข Insufficient permissions'); console.log(' โ€ข Application not responding'); console.log('\n๐Ÿ”ง Suggestions:'); - console.log(' 1. Run "taskping setup-permissions" to check permissions'); + console.log(' 1. Run "claude-remote setup-permissions" to check permissions'); console.log(' 2. Ensure Claude Code is running in foreground'); console.log(' 3. Try manually clicking input box in Claude Code first'); } @@ -898,9 +898,9 @@ class TaskPingCLI { showHelp() { console.log(` -TaskPing - Claude Code Smart Notification System +Claude-Code-Remote - Claude Code Smart Notification System -Usage: taskping [options] +Usage: claude-remote [options] Commands: notify --type Send a notification (completed|waiting) @@ -941,30 +941,30 @@ Commands Subcommands: commands clear Clear all pending commands Examples: - taskping notify --type completed - taskping test - taskping setup-email # Quick email setup (recommended) - taskping edit-config channels # Edit configuration files directly - taskping config # Interactive configuration - taskping install - taskping daemon start # Start background service (recommended) - taskping daemon status # View service status - taskping test-claude # Test full automation (recommended) - taskping commands list # View pending email commands - taskping relay start # Run in foreground (need to keep window open) + claude-remote notify --type completed + claude-remote test + claude-remote setup-email # Quick email setup (recommended) + claude-remote edit-config channels # Edit configuration files directly + claude-remote config # Interactive configuration + claude-remote install + claude-remote daemon start # Start background service (recommended) + claude-remote daemon status # View service status + claude-remote test-claude # Test full automation (recommended) + claude-remote commands list # View pending email commands + claude-remote relay start # Run in foreground (need to keep window open) -For more information, visit: https://github.com/TaskPing/TaskPing +For more information, visit: https://github.com/Claude-Code-Remote/Claude-Code-Remote `); } } // Run CLI if this file is executed directly if (require.main === module) { - const cli = new TaskPingCLI(); + const cli = new ClaudeCodeRemoteCLI(); cli.run().catch(error => { console.error('Fatal error:', error.message); process.exit(1); }); } -module.exports = TaskPingCLI; \ No newline at end of file +module.exports = ClaudeCodeRemoteCLI; \ No newline at end of file diff --git a/config/channels.json b/config/channels.json index 9cf60c1..6100a16 100644 --- a/config/channels.json +++ b/config/channels.json @@ -26,7 +26,7 @@ "pass": "kKgS3tNReRTL3RQC" } }, - "from": "TaskPing Notification System ", + "from": "Claude-Code-Remote Notification System ", "to": "jiaxicui446@gmail.com", "template": { "checkInterval": 30 @@ -38,7 +38,7 @@ "enabled": false, "config": { "webhook": "", - "username": "TaskPing", + "username": "Claude-Code-Remote", "avatar": null } }, diff --git a/config/email-template.json b/config/email-template.json index eb5f0fa..51bd102 100644 --- a/config/email-template.json +++ b/config/email-template.json @@ -21,7 +21,7 @@ "pass": "your-app-password" } }, - "from": "TaskPing ", + "from": "Claude-Code-Remote ", "to": "your-email@gmail.com", "template": { "checkInterval": 30 @@ -44,5 +44,5 @@ # # After Configuration: # 1. Copy email section to config/channels.json -# 2. Run: taskping test -# 3. Run: taskping relay start \ No newline at end of file +# 2. Run: claude-remote test +# 3. Run: claude-remote relay start \ No newline at end of file diff --git a/install-global.js b/install-global.js index ef8a6a3..f148314 100644 --- a/install-global.js +++ b/install-global.js @@ -1,7 +1,7 @@ #!/usr/bin/env node /** - * Global Installation Script for TaskPing claude-control + * Global Installation Script for Claude-Code-Remote claude-control * Makes claude-control.js accessible from any directory */ @@ -43,20 +43,20 @@ function createGlobalScript() { const path = require('path'); const { spawn } = require('child_process'); -// TaskPing installation directory -const TASKPING_DIR = '${__dirname}'; -const CLAUDE_CONTROL_PATH = path.join(TASKPING_DIR, 'claude-control.js'); +// Claude-Code-Remote installation directory +const CLAUDE_CODE_REMOTE_DIR = '${__dirname}'; +const CLAUDE_CONTROL_PATH = path.join(CLAUDE_CODE_REMOTE_DIR, 'claude-control.js'); // Get command line arguments (excluding node and script name) const args = process.argv.slice(2); -// Change to TaskPing directory before execution -process.chdir(TASKPING_DIR); +// Change to Claude-Code-Remote directory before execution +process.chdir(CLAUDE_CODE_REMOTE_DIR); // Execute claude-control.js with original arguments const child = spawn('node', [CLAUDE_CONTROL_PATH, ...args], { stdio: 'inherit', - env: { ...process.env, TASKPING_HOME: TASKPING_DIR } + env: { ...process.env, CLAUDE_CODE_REMOTE_HOME: CLAUDE_CODE_REMOTE_DIR } }); child.on('error', (error) => { @@ -119,7 +119,7 @@ function uninstall() { } function showHelp() { - console.log('TaskPing Claude Control - Global Installation\n'); + console.log('Claude-Code-Remote Claude Control - Global Installation\n'); console.log('Usage:'); console.log(' node install-global.js [install] - Install globally'); console.log(' node install-global.js uninstall - Uninstall'); diff --git a/package-lock.json b/package-lock.json index 4565e9e..2df6247 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,11 +1,11 @@ { - "name": "taskping", + "name": "claude-code-remote", "version": "1.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "taskping", + "name": "claude-code-remote", "version": "1.0.0", "license": "MIT", "os": [ diff --git a/package.json b/package.json index d37c7f1..44a974e 100644 --- a/package.json +++ b/package.json @@ -1,13 +1,13 @@ { - "name": "taskping", + "name": "claude-code-remote", "version": "1.0.0", "description": "Claude Code Smart Notification System - Send desktop notifications when Claude completes tasks or needs input", "main": "hook-notify.js", "scripts": { - "config": "node taskping-config.js", - "daemon:start": "node taskping.js daemon start", - "daemon:stop": "node taskping.js daemon stop", - "daemon:status": "node taskping.js daemon status", + "config": "node claude-remote-config.js", + "daemon:start": "node claude-remote.js daemon start", + "daemon:stop": "node claude-remote.js daemon stop", + "daemon:status": "node claude-remote.js daemon status", "relay:pty": "node start-relay-pty.js", "relay:start": "INJECTION_MODE=pty node src/relay/relay-pty.js" }, @@ -22,7 +22,7 @@ "claude", "ai-assistant" ], - "author": "TaskPing Team", + "author": "Claude-Code-Remote Team", "license": "MIT", "engines": { "node": ">=14.0.0" @@ -34,12 +34,12 @@ ], "repository": { "type": "git", - "url": "https://github.com/TaskPing/TaskPing.git" + "url": "https://github.com/Claude-Code-Remote/Claude-Code-Remote.git" }, "bugs": { - "url": "https://github.com/TaskPing/TaskPing/issues" + "url": "https://github.com/Claude-Code-Remote/Claude-Code-Remote/issues" }, - "homepage": "https://github.com/TaskPing/TaskPing#readme", + "homepage": "https://github.com/Claude-Code-Remote/Claude-Code-Remote#readme", "dependencies": { "dotenv": "^17.2.1", "execa": "^9.6.0", diff --git a/send-test-reply.js b/send-test-reply.js index f8e158e..a7d94a8 100644 --- a/send-test-reply.js +++ b/send-test-reply.js @@ -23,7 +23,7 @@ async function sendTestReply() { const mailOptions = { from: 'jiaxicui446@gmail.com', to: 'noreply@pandalla.ai', - subject: `Re: [TaskPing #${testToken}] Claude Code Task Completed - TaskPing`, + subject: `Re: [Claude-Code-Remote #${testToken}] Claude Code Task Completed - Claude-Code-Remote`, text: 'Please explain the basic principles of quantum computing', replyTo: 'jiaxicui446@gmail.com' }; diff --git a/src/channels/base/channel.js b/src/channels/base/channel.js index 938d9c1..86afe68 100644 --- a/src/channels/base/channel.js +++ b/src/channels/base/channel.js @@ -54,7 +54,7 @@ class NotificationChannel { const testNotification = { type: 'completed', - title: 'TaskPing Test', + title: 'Claude-Code-Remote Test', message: `Test notification from ${this.name} channel`, project: 'test-project', metadata: { test: true } diff --git a/src/channels/email/smtp.js b/src/channels/email/smtp.js index 2e86453..7b8e008 100644 --- a/src/channels/email/smtp.js +++ b/src/channels/email/smtp.js @@ -122,8 +122,8 @@ class EmailChannel extends NotificationChannel { text: emailContent.text, // Add custom headers for reply recognition headers: { - 'X-TaskPing-Session-ID': sessionId, - 'X-TaskPing-Type': notification.type + 'X-Claude-Code-Remote-Session-ID': sessionId, + 'X-Claude-Code-Remote-Type': notification.type } }; @@ -174,7 +174,7 @@ class EmailChannel extends NotificationChannel { } // Use passed tmux session name or detect current session - let tmuxSession = notification.metadata?.tmuxSession || this._getCurrentTmuxSession() || 'claude-taskping'; + let tmuxSession = notification.metadata?.tmuxSession || this._getCurrentTmuxSession() || 'claude-code-remote'; sessionMap[token] = { type: 'pty', @@ -267,7 +267,7 @@ class EmailChannel extends NotificationChannel { // Default templates const templates = { completed: { - subject: '[TaskPing #{{token}}] Claude Code Task Completed - {{project}}', + subject: '[Claude-Code-Remote #{{token}}] Claude Code Task Completed - {{project}}', html: `
@@ -309,13 +309,13 @@ class EmailChannel extends NotificationChannel {

Session ID: {{sessionId}}

๐Ÿ”’ Security note: Please do not forward this email, session will automatically expire after 24 hours

-

๐Ÿ“ง This is an automated email from TaskPing

+

๐Ÿ“ง This is an automated email from Claude-Code-Remote

`, text: ` -[TaskPing #{{token}}] Claude Code Task Completed - {{projectDir}} | {{shortQuestion}} +[Claude-Code-Remote #{{token}}] Claude Code Task Completed - {{projectDir}} | {{shortQuestion}} Project: {{projectDir}} Time: {{timestamp}} @@ -340,7 +340,7 @@ Security Note: Please do not forward this email, session will automatically expi ` }, waiting: { - subject: '[TaskPing #{{token}}] Claude Code Waiting for Input - {{project}}', + subject: '[Claude-Code-Remote #{{token}}] Claude Code Waiting for Input - {{project}}', html: `
@@ -371,13 +371,13 @@ Security Note: Please do not forward this email, session will automatically expi

Session ID: {{sessionId}}

๐Ÿ”’ Security note: Please do not forward this email, session will automatically expire after 24 hours

-

๐Ÿ“ง This is an automated email from TaskPing

+

๐Ÿ“ง This is an automated email from Claude-Code-Remote

`, text: ` -[TaskPing #{{token}}] Claude Code Waiting for Input - {{projectDir}} +[Claude-Code-Remote #{{token}}] Claude Code Waiting for Input - {{projectDir}} Project: {{projectDir}} Time: {{timestamp}} @@ -428,9 +428,9 @@ Security Note: Please do not forward this email, session will automatically expi // Send test email const testNotification = { type: 'completed', - title: 'TaskPing Test', + title: 'Claude-Code-Remote Test', message: 'This is a test email to verify that the email notification function is working properly.', - project: 'TaskPing-Test', + project: 'Claude-Code-Remote-Test', metadata: { test: true, timestamp: new Date().toISOString() diff --git a/src/channels/local/desktop.js b/src/channels/local/desktop.js index a8658dd..85058cc 100644 --- a/src/channels/local/desktop.js +++ b/src/channels/local/desktop.js @@ -43,7 +43,7 @@ class DesktopChannel extends NotificationChannel { try { // Try terminal-notifier first try { - const cmd = `terminal-notifier -title "${title}" -message "${message}" -sound "${sound}" -group "taskping"`; + const cmd = `terminal-notifier -title "${title}" -message "${message}" -sound "${sound}" -group "claude-code-remote"`; execSync(cmd, { timeout: 3000 }); return true; } catch (e) { @@ -81,7 +81,7 @@ class DesktopChannel extends NotificationChannel { $xml.toast.visual.binding.text[0].AppendChild($xml.CreateTextNode("${title}")) > $null $xml.toast.visual.binding.text[1].AppendChild($xml.CreateTextNode("${message}")) > $null $toast = [Windows.UI.Notifications.ToastNotification]::new($xml) - [Windows.UI.Notifications.ToastNotificationManager]::CreateToastNotifier("TaskPing").Show($toast) + [Windows.UI.Notifications.ToastNotificationManager]::CreateToastNotifier("Claude-Code-Remote").Show($toast) `; execSync(`powershell -Command "${script}"`, { timeout: 5000 }); diff --git a/src/config-manager.js b/src/config-manager.js index d6e0470..311971a 100644 --- a/src/config-manager.js +++ b/src/config-manager.js @@ -77,8 +77,8 @@ class ConfigManager { // Email addresses console.log('\n--- Email Addresses ---'); - const fromEmail = await this.question(`From Address [${config.email.config.from || `TaskPing <${config.email.config.smtp.auth.user}>`}]: `); - config.email.config.from = fromEmail || config.email.config.from || `TaskPing <${config.email.config.smtp.auth.user}>`; + const fromEmail = await this.question(`From Address [${config.email.config.from || `Claude-Code-Remote <${config.email.config.smtp.auth.user}>`}]: `); + config.email.config.from = fromEmail || config.email.config.from || `Claude-Code-Remote <${config.email.config.smtp.auth.user}>`; const toEmail = await this.question(`To Address [${config.email.config.to || config.email.config.smtp.auth.user}]: `); config.email.config.to = toEmail || config.email.config.to || config.email.config.smtp.auth.user; @@ -129,7 +129,7 @@ class ConfigManager { } async interactiveMenu() { - console.log('\n๐Ÿ› ๏ธ TaskPing Configuration Manager\n'); + console.log('\n๐Ÿ› ๏ธ Claude-Code-Remote Configuration Manager\n'); while (true) { console.log('\nChoose an option:'); diff --git a/src/core/config.js b/src/core/config.js index fba513f..5b6eaa2 100644 --- a/src/core/config.js +++ b/src/core/config.js @@ -1,5 +1,5 @@ /** - * TaskPing Configuration Manager + * Claude-Code-Remote Configuration Manager * Handles loading, merging, and saving configurations */ @@ -78,7 +78,7 @@ class ConfigManager { enabled: false, config: { webhook: '', - username: 'TaskPing', + username: 'Claude-Code-Remote', avatar: null } }, diff --git a/src/core/logger.js b/src/core/logger.js index 7836d1c..6393ca1 100644 --- a/src/core/logger.js +++ b/src/core/logger.js @@ -1,12 +1,12 @@ /** - * TaskPing Logger + * Claude-Code-Remote Logger * Centralized logging utility */ class Logger { - constructor(namespace = 'TaskPing') { + constructor(namespace = 'Claude-Code-Remote') { this.namespace = namespace; - this.logLevel = process.env.TASKPING_LOG_LEVEL || 'info'; + this.logLevel = process.env.CLAUDE_CODE_REMOTE_LOG_LEVEL || 'info'; } _log(level, message, ...args) { diff --git a/src/core/notifier.js b/src/core/notifier.js index b219e69..07961ee 100644 --- a/src/core/notifier.js +++ b/src/core/notifier.js @@ -1,5 +1,5 @@ /** - * TaskPing Core Notifier + * Claude-Code-Remote Core Notifier * Central notification orchestrator that manages multiple channels */ diff --git a/src/daemon/taskping-daemon.js b/src/daemon/taskping-daemon.js index 6aedda6..1178c9f 100755 --- a/src/daemon/taskping-daemon.js +++ b/src/daemon/taskping-daemon.js @@ -1,7 +1,7 @@ #!/usr/bin/env node /** - * TaskPing Daemon Service + * Claude-Code-Remote Daemon Service * Background daemon process for monitoring emails and processing remote commands */ @@ -11,11 +11,11 @@ const { spawn, exec } = require('child_process'); const Logger = require('../core/logger'); const ConfigManager = require('../core/config'); -class TaskPingDaemon { +class ClaudeCodeRemoteDaemon { constructor() { this.logger = new Logger('Daemon'); this.config = new ConfigManager(); - this.pidFile = path.join(__dirname, '../data/taskping.pid'); + this.pidFile = path.join(__dirname, '../data/claude-code-remote.pid'); this.logFile = path.join(__dirname, '../data/daemon.log'); this.relayService = null; this.isRunning = false; @@ -31,8 +31,8 @@ class TaskPingDaemon { try { // Check if already running if (this.isAlreadyRunning()) { - console.log('โŒ TaskPing daemon is already running'); - console.log('๐Ÿ’ก Use "taskping daemon stop" to stop existing service'); + console.log('โŒ Claude-Code-Remote daemon is already running'); + console.log('๐Ÿ’ก Use "claude-remote daemon stop" to stop existing service'); process.exit(1); } @@ -50,7 +50,7 @@ class TaskPingDaemon { } async startDetached() { - console.log('๐Ÿš€ Starting TaskPing daemon...'); + console.log('๐Ÿš€ Starting Claude-Code-Remote daemon...'); // Create child process const child = spawn(process.execPath, [__filename, '--foreground'], { @@ -69,17 +69,17 @@ class TaskPingDaemon { // Detach child process child.unref(); - console.log(`โœ… TaskPing daemon started (PID: ${child.pid})`); + console.log(`โœ… Claude-Code-Remote daemon started (PID: ${child.pid})`); console.log(`๐Ÿ“ Log file: ${this.logFile}`); - console.log('๐Ÿ’ก Use "taskping daemon status" to view status'); - console.log('๐Ÿ’ก Use "taskping daemon stop" to stop service'); + console.log('๐Ÿ’ก Use "claude-remote daemon status" to view status'); + console.log('๐Ÿ’ก Use "claude-remote daemon stop" to stop service'); } async startForeground() { - console.log('๐Ÿš€ TaskPing daemon starting...'); + console.log('๐Ÿš€ Claude-Code-Remote daemon starting...'); this.isRunning = true; - process.title = 'taskping-daemon'; + process.title = 'claude-code-remote-daemon'; // Load configuration this.config.load(); @@ -174,13 +174,13 @@ class TaskPingDaemon { async stop() { if (!this.isAlreadyRunning()) { - console.log('โŒ TaskPing daemon is not running'); + console.log('โŒ Claude-Code-Remote daemon is not running'); return; } try { const pid = this.getPid(); - console.log(`๐Ÿ›‘ Stopping TaskPing daemon (PID: ${pid})...`); + console.log(`๐Ÿ›‘ Stopping Claude-Code-Remote daemon (PID: ${pid})...`); // Send SIGTERM signal process.kill(pid, 'SIGTERM'); @@ -188,7 +188,7 @@ class TaskPingDaemon { // Wait for process to end await this.waitForStop(pid); - console.log('โœ… TaskPing daemon stopped'); + console.log('โœ… Claude-Code-Remote daemon stopped'); } catch (error) { console.error('โŒ Failed to stop daemon:', error.message); @@ -201,7 +201,7 @@ class TaskPingDaemon { } async restart() { - console.log('๐Ÿ”„ Restarting TaskPing daemon...'); + console.log('๐Ÿ”„ Restarting Claude-Code-Remote daemon...'); await this.stop(); await new Promise(resolve => setTimeout(resolve, 2000)); // Wait 2 seconds await this.start(); @@ -223,7 +223,7 @@ class TaskPingDaemon { showStatus() { const status = this.getStatus(); - console.log('๐Ÿ“Š TaskPing daemon status\n'); + console.log('๐Ÿ“Š Claude-Code-Remote daemon status\n'); if (status.running) { console.log('โœ… Status: Running'); @@ -310,7 +310,7 @@ class TaskPingDaemon { // Command line interface if (require.main === module) { - const daemon = new TaskPingDaemon(); + const daemon = new ClaudeCodeRemoteDaemon(); const command = process.argv[2]; (async () => { @@ -332,7 +332,7 @@ if (require.main === module) { daemon.showStatus(); break; default: - console.log('Usage: taskping-daemon '); + console.log('Usage: claude-code-remote-daemon '); process.exit(1); } } catch (error) { @@ -342,4 +342,4 @@ if (require.main === module) { })(); } -module.exports = TaskPingDaemon; \ No newline at end of file +module.exports = ClaudeCodeRemoteDaemon; \ No newline at end of file diff --git a/src/relay/relay-pty.js b/src/relay/relay-pty.js index 4959368..f6d70cd 100644 --- a/src/relay/relay-pty.js +++ b/src/relay/relay-pty.js @@ -119,7 +119,7 @@ function cleanEmailText(text = '') { line.includes('Session ID:') || line.includes('Session ID:') || line.includes('') || - line.includes('TaskPing Notification System') || + line.includes('Claude-Code-Remote Notification System') || line.includes('on 2025') && line.includes('wrote:') || line.match(/^>.*/) || // Quote lines start with > line.includes('From:') && line.includes('@') || @@ -160,7 +160,7 @@ function cleanEmailText(text = '') { } // Skip remaining email quotes - if (trimmedLine.includes('TaskPing Notification System') || + if (trimmedLine.includes('Claude-Code-Remote Notification System') || trimmedLine.includes('') || trimmedLine.includes('on 2025')) { continue; diff --git a/src/tools/config-manager.js b/src/tools/config-manager.js index b786e18..4b0f8e8 100644 --- a/src/tools/config-manager.js +++ b/src/tools/config-manager.js @@ -1,5 +1,5 @@ /** - * TaskPing Configuration Manager + * Claude-Code-Remote Configuration Manager * Interactive configuration tool for managing settings */ @@ -57,7 +57,7 @@ class ConfigurationManager { async showMainMenu() { while (true) { - console.log('\n=== TaskPing Configuration Manager ==='); + console.log('\n=== Claude-Code-Remote Configuration Manager ==='); this.displayCurrentConfig(); console.log('Options:'); console.log('1. Basic Settings'); @@ -416,7 +416,7 @@ class ConfigurationManager { // Sender configuration const currentFrom = emailConfig.from || ''; console.log(`Current sender: ${currentFrom || 'Not configured'}`); - const fromEmail = await this.question(`Sender display name (default: TaskPing <${smtpUser}>): `); + const fromEmail = await this.question(`Sender display name (default: Claude-Code-Remote <${smtpUser}>): `); // Build email configuration const newEmailConfig = { @@ -440,7 +440,7 @@ class ConfigurationManager { pass: smtpPass || emailConfig.imap?.auth?.pass || '' } }, - from: fromEmail || `TaskPing <${smtpUser || currentUser}>`, + from: fromEmail || `Claude-Code-Remote <${smtpUser || currentUser}>`, to: toEmail || currentTo } }; @@ -487,9 +487,9 @@ class ConfigurationManager { showHelp() { console.log(` -TaskPing Configuration Manager +Claude-Code-Remote Configuration Manager -Usage: taskping config [options] +Usage: claude-remote config [options] Options: --show Show current configuration diff --git a/src/tools/installer.js b/src/tools/installer.js index 95009c3..b2bac62 100644 --- a/src/tools/installer.js +++ b/src/tools/installer.js @@ -1,5 +1,5 @@ /** - * TaskPing Installer + * Claude-Code-Remote Installer * Handles installation and configuration of Claude Code hooks */ @@ -50,7 +50,7 @@ class Installer { } async run(args = []) { - console.log('=== TaskPing Claude Code Installer ===\n'); + console.log('=== Claude-Code-Remote Claude Code Installer ===\n'); // Check dependencies if (!this.checkDependencies()) { @@ -120,7 +120,7 @@ class Installer { } createHooksConfig() { - const taskpingPath = path.join(this.projectDir, 'taskping.js'); + const claudeRemotePath = path.join(this.projectDir, 'claude-remote.js'); return { hooks: { @@ -130,7 +130,7 @@ class Installer { hooks: [ { type: "command", - command: `node "${taskpingPath}" notify --type completed`, + command: `node "${claudeRemotePath}" notify --type completed`, timeout: 5 } ] @@ -142,7 +142,7 @@ class Installer { hooks: [ { type: "command", - command: `node "${taskpingPath}" notify --type waiting`, + command: `node "${claudeRemotePath}" notify --type waiting`, timeout: 5 } ] @@ -209,8 +209,8 @@ class Installer { console.log('\nTesting installation...'); try { - const TaskPingCLI = require('../../taskping'); - const cli = new TaskPingCLI(); + const ClaudeCodeRemoteCLI = require('../../claude-remote'); + const cli = new ClaudeCodeRemoteCLI(); await cli.init(); console.log('Testing task completion notification...'); @@ -237,9 +237,9 @@ class Installer { console.log('โ€ข You will receive reminders when Claude is waiting for input'); console.log(''); console.log('Common commands:'); - console.log(` node "${path.join(this.projectDir, 'taskping.js')}" config`); - console.log(` node "${path.join(this.projectDir, 'taskping.js')}" test`); - console.log(` node "${path.join(this.projectDir, 'taskping.js')}" status`); + console.log(` node "${path.join(this.projectDir, 'claude-remote.js')}" config`); + console.log(` node "${path.join(this.projectDir, 'claude-remote.js')}" test`); + console.log(` node "${path.join(this.projectDir, 'claude-remote.js')}" status`); console.log(''); console.log('To uninstall, manually delete the hooks configuration from Claude Code settings.'); } diff --git a/start-relay-pty.js b/start-relay-pty.js index 2b69c23..b29f423 100755 --- a/start-relay-pty.js +++ b/start-relay-pty.js @@ -1,7 +1,7 @@ #!/usr/bin/env node /** - * TaskPing PTY Relay Startup Script + * Claude-Code-Remote PTY Relay Startup Script * Start node-pty based email command relay service */ @@ -62,14 +62,14 @@ function createExampleSession() { createdAt: Math.floor(Date.now() / 1000), expiresAt: Math.floor((Date.now() + 24 * 60 * 60 * 1000) / 1000), // Expires after 24 hours cwd: process.cwd(), - description: 'Test session - Include [TaskPing #TEST123] in email subject when sending' + description: 'Test session - Include [Claude-Code-Remote #TEST123] in email subject when sending' } }; fs.writeFileSync(sessionMapPath, JSON.stringify(exampleSession, null, 2)); console.log(`๐Ÿ“ Created example session file: ${sessionMapPath}`); console.log(`๐Ÿ”‘ Test Token: ${exampleToken}`); - console.log(' When sending test email, include in subject: [TaskPing #TEST123]'); + console.log(' When sending test email, include in subject: [Claude-Code-Remote #TEST123]'); console.log(''); } } @@ -113,7 +113,7 @@ function startService() { // Check single instance checkSingleInstance(); - console.log('๐Ÿš€ Starting TaskPing PTY Relay service...\n'); + console.log('๐Ÿš€ Starting Claude-Code-Remote PTY Relay service...\n'); const relayPath = path.join(__dirname, 'src/relay/relay-pty.js'); @@ -174,7 +174,7 @@ function showInstructions() { // Main function function main() { console.log('โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•—'); - console.log('โ•‘ TaskPing PTY Relay Service โ•‘'); + console.log('โ•‘ Claude-Code-Remote PTY Relay Service โ•‘'); console.log('โ•‘ Email Command Relay Service - node-pty based PTY mode โ•‘'); console.log('โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•\n');