tsoft-cli 2.5.15 → 3.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md ADDED
@@ -0,0 +1,160 @@
1
+ # Changelog
2
+
3
+ All notable changes to T-Soft CLI will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [3.4.0] - 2026-04-08
9
+
10
+ ### Added
11
+ - Branded help renderer with contextual status block
12
+ - i18n support (Turkish default, English available)
13
+ - `--help` flag async branded output
14
+
15
+ ### Changed
16
+ - Commander descriptions switched to English
17
+ - OS auto-detect removed, Turkish set as default language
18
+ - npm publish configuration with `files` whitelist
19
+ - axios updated to ^1.14.0
20
+
21
+ ## [3.3.0] - 2026-01-02
22
+
23
+ ### ✨ Added
24
+ - **Theme Publish**: `tsoft theme publish [name]` - Temayı TSoftApps market'e yayınlama
25
+ - **Semantic Versioning**: İlk yayın için manuel version, güncellemeler için major/minor/patch seçimi
26
+ - **Dev Status Check**: Otomatik ilk yayın / güncelleme tespiti
27
+ - **Version Suggestions**: Backend'den gelen akıllı version önerileri
28
+ - **Interactive Prompts**: Kullanıcı dostu version seçim arayüzü
29
+ - **Batch File Upload**: Tema dosyalarını toplu yükleme özelliği
30
+ - **Progress Tracking**: Dosya yükleme işlemlerinde progress bar
31
+
32
+ ### 🔧 API Client
33
+ - Added `getThemeDevStatus()` - Tema dev version durumu
34
+ - Added `getVersionSuggestions()` - Version bump önerileri
35
+ - Added `publishTheme()` - Tema publish işlemi
36
+ - Added `syncTheme()` - Tema build/sync işlemi
37
+
38
+ ### 📝 Documentation
39
+ - Updated README with publish feature
40
+ - Added publish usage examples
41
+ - Added semantic versioning guidelines
42
+
43
+ ### 🎯 User Experience
44
+ - Minimal ve akıcı publish akışı
45
+ - Sadece meta bilgiler toplanır (backend ZIP oluşturur)
46
+ - Changelog/release notes kapsam dışı (gelecek sürümlerde)
47
+ - Context-aware hata mesajları ve ipuçları
48
+ - Otomatik dosya yükleme ve sync işlemleri
49
+
50
+ ## [3.2.0] - 2025-12-16
51
+
52
+ ### ✨ Added
53
+ - **Theme Use**: `tsoft theme use [theme-name]` - Aktif tema seçimi
54
+ - **Section Management**: `tsoft theme section` - Tema section yönetim sistemi
55
+ - **Section List**: `tsoft theme section list` - Block'ları ve section'ları listeleme
56
+ - **Section Add**: `tsoft theme section add` - İnteraktif section ekleme
57
+ - **Bulk Operations**: Tüm section'ları toplu ekleme seçeneği
58
+ - **Selective Add**: Checkbox UI ile çoklu section seçimi
59
+ - **Conflict Resolution**: Akıllı üzerine yazma seçenekleri
60
+
61
+ ### 🔧 API Client
62
+ - Added `getSections(themeUuid)` - Block ve section listesini getirme
63
+ - Added `addSection(themeUuid, blockId, themeSectionId, force)` - Section ekleme
64
+ - Enhanced 422 validation error handling
65
+
66
+ ### 💾 Storage
67
+ - Added `getThemeUuidBySlug(themeSlug)` - Tema slug'ından UUID bulma
68
+ - Added active theme tracking with `.tsoft/active-theme.txt`
69
+
70
+ ### 🎨 User Experience
71
+ - Interactive block selection
72
+ - Space tuşu ile çoklu section seçimi
73
+ - Otomatik tema indirme ve extraction
74
+ - Progress tracking ve detaylı sonuç özeti
75
+ - Context-aware conflict resolution
76
+
77
+ ### 🌍 Localization
78
+ - Tüm UI metinleri Türkçe
79
+ - Emoji tabanlı görsel geri bildirim
80
+ - Color-coded çıktılar
81
+
82
+ ## [3.1.1] - 2024-12-15
83
+
84
+ ### 🐛 Fixed
85
+ - **developerSynced Sync Issues**: Added `mark-synced` calls after every file operation
86
+ - **Lock Mechanism**: `acquire-lock` only at startup, `mark-synced` after each file operation
87
+ - **Keep-alive Improvements**: Keep-alive now uses `mark-synced` instead of `acquire-lock`
88
+ - **Auto-recovery**: Added automatic pull & retry mechanism for "not synced" errors
89
+ - **Error Handling**: Improved distinction between lock theft and synchronization errors
90
+
91
+ ### 🔄 Changed
92
+ - Keep-alive interval now uses correct endpoint (`mark-synced`)
93
+ - Improved automatic synchronization after file operations
94
+
95
+ ### 📝 Notes
96
+ - Fixed `developerSynced=0` persistence issue
97
+ - Fixed misinterpretation of "Theme is not synced or locked by another developer" error message
98
+
99
+ ## [3.1.0] - 2024-12-15
100
+
101
+ ### ✨ Added
102
+ - **Branded UI System**: Professional, modern user interface system
103
+ - **T-Soft Branding**: Gradient orange T-Soft logo on every interaction
104
+ - **Context-Aware Boxes**: Status-based headers and framed message boxes
105
+ - **Custom Prompt Wrappers**: `brandedConfirm`, `brandedSelect`, `brandedInput` functions
106
+ - **Message Types**: `showWarning`, `showError`, `showSuccess`, `showInfo` functions
107
+ - **Turkish Language Support**: All UI texts in Turkish
108
+
109
+ ### 📦 Dependencies
110
+ - Added `boxen@^8.0.1` - Terminal box rendering
111
+ - Added `gradient-string@^2.0.2` - Gradient color effects
112
+ - Added `cli-spinners@^2.9.2` - Loading animations support
113
+
114
+ ### 🔄 Changed
115
+ - Updated `theme dev` command with branded UI
116
+ - Updated `theme create` command with branded UI
117
+ - Updated `theme pull` command with branded UI
118
+ - Improved user experience with professional styling
119
+
120
+ ### 🎨 Design
121
+ - Orange color scheme (#FF6B35) for brand consistency
122
+ - Round borders for modern look
123
+ - Proper spacing and padding
124
+ - Visual hierarchy with icons and colors
125
+
126
+ ## [3.0.0] - 2024-12-01
127
+
128
+ ### ✨ Added
129
+ - OAuth2 Authorization Code Flow with PKCE
130
+ - Secure token management system
131
+ - `login` command for authentication
132
+ - `logout` command for token revocation
133
+ - `whoami` command for status check
134
+ - Automatic token refresh mechanism
135
+
136
+ ### 🎨 Theme Management
137
+ - `theme list` - List all themes
138
+ - `theme create` - Create new theme
139
+ - `theme pull` - Download existing theme
140
+ - `theme dev` - Development mode with hot-reload
141
+
142
+ ### 🔒 Security
143
+ - PKCE implementation for public clients
144
+ - State parameter for CSRF protection
145
+ - Secure token storage (chmod 600)
146
+ - Automatic token expiry handling
147
+
148
+ ---
149
+
150
+ ## Legend
151
+
152
+ - ✨ Added: New features
153
+ - 🔄 Changed: Changes in existing functionality
154
+ - 🗑️ Deprecated: Soon-to-be removed features
155
+ - ❌ Removed: Removed features
156
+ - 🐛 Fixed: Bug fixes
157
+ - 🔒 Security: Security improvements
158
+ - 📦 Dependencies: Dependency updates
159
+ - 🎨 Design: UI/UX improvements
160
+
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024-2026 T-Soft
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,53 +1,86 @@
1
- # T-Soft CLI
2
-
3
- T-Soft CLI, T-Soft temalarıyla çalışmak için geliştirilmiş bir komut satırı aracıdır. Bu kılavuz, T-Soft CLI'nin nasıl kullanılacağını adım adım açıklamaktadır.
4
-
5
- ## Gereksinimler
6
-
7
- - Node.js (v18.0.0 veya üstü)
8
- - NPM veya Yarn
9
-
10
- ## Kurulum
11
-
12
- 1. Proje dosyalarını bilgisayarınıza indirin.
13
- 2. Proje dizinine gidin ve gerekli bağımlılıkları yükleyin:
14
-
15
- ```sh
16
- npm install tsoft-cli
17
- ```
18
-
19
- veya
20
-
21
- ```sh
22
- yarn add tsoft-cli
23
- ```
24
-
25
- 3. Veya global olarak yükleyin:
26
-
27
- ```sh
28
- npm install -g tsoft-cli
29
- ```
30
-
31
- veya
32
-
33
- ```sh
34
- yarn global add tsoft-cli
35
- ```
36
-
37
- ## Başlatma
38
-
39
- CLI uygulamasını başlatmak için aşağıdaki komutu kullanın:
40
-
41
- ```sh
42
- npx tsoft
43
- ```
44
-
45
- veya global olarak yüklediyseniz:
46
-
47
- ```sh
48
- tsoft
49
- ```
50
-
51
- ## İletişim ve Destek
52
-
53
- Bu kılavuz, T-Soft CLI'nin temel kullanımını ve işlevlerini kapsar. Daha fazla bilgi için proje dosyalarına göz atabilirsiniz. İyi çalışmalar!
1
+ # tsoft-cli
2
+
3
+ [tsoft360](https://tsoft360.com) tema geliştirme ve yönetim için komut satırı aracı.
4
+
5
+ ## Kurulum
6
+
7
+ ```bash
8
+ npm install -g tsoft-cli
9
+ ```
10
+
11
+ ## Gereksinimler
12
+
13
+ - Node.js >= 18.0.0
14
+
15
+ ## Hızlı Başlangıç
16
+
17
+ ```bash
18
+ # Giriş yap
19
+ tsoft login
20
+
21
+ # Temaları listele
22
+ tsoft theme list
23
+
24
+ # Tema indir
25
+ tsoft theme pull
26
+
27
+ # Geliştirme modunu başlat (hot-reload)
28
+ tsoft theme dev
29
+ ```
30
+
31
+ ## Komutlar
32
+
33
+ ### Yetkilendirme
34
+
35
+ | Komut | Açıklama |
36
+ |----------------|----------------------------------------|
37
+ | `tsoft login` | OAuth2 ile giriş yap |
38
+ | `tsoft logout` | Çıkış yap ve token'ları temizle |
39
+ | `tsoft whoami` | Kullanıcı ve mağaza bilgilerini göster |
40
+
41
+ ### Tema Yönetimi
42
+
43
+ | Komut | Açıklama |
44
+ |------------------------------|-----------------------------------------|
45
+ | `tsoft theme list` | Tüm temaları listele |
46
+ | `tsoft theme create` | Yeni tema oluştur (interaktif) |
47
+ | `tsoft theme pull` | Var olan temayı indir |
48
+ | `tsoft theme use [name]` | Aktif tema seç |
49
+ | `tsoft theme dev [name]` | Geliştirme modunu başlat (hot-reload) |
50
+ | `tsoft theme publish [name]` | Temayı TSoftApps market'e yayınla |
51
+ | `tsoft theme section list` | Block ve section'ları listele |
52
+ | `tsoft theme section add` | Section ekle (interaktif) |
53
+
54
+ ## Tema Yayınlama
55
+
56
+ ```bash
57
+ # Aktif tema ile
58
+ tsoft theme publish
59
+
60
+ # Belirli bir tema ile
61
+ tsoft theme publish my-theme
62
+ ```
63
+
64
+ İlk yayında versiyon numarası girilir. Sonraki güncellemelerde semantic versioning ile güncelleme tipi seçilir (patch / minor / major).
65
+
66
+ ## Güvenlik
67
+
68
+ - **OAuth2 PKCE**: Public client olarak güvenli yetkilendirme
69
+ - **State Parameter**: CSRF koruması
70
+ - **Secure Storage**: Token'lar sadece kullanıcı tarafından okunabilir (chmod 600)
71
+ - **Auto Refresh**: Token süresi dolduğunda otomatik yenileme
72
+
73
+ ## Sorun Giderme
74
+
75
+ ```bash
76
+ # Durumu kontrol et
77
+ tsoft whoami
78
+
79
+ # Yeniden giriş yap
80
+ tsoft logout
81
+ tsoft login
82
+ ```
83
+
84
+ ## Lisans
85
+
86
+ [MIT](LICENSE)
@@ -0,0 +1,323 @@
1
+ {
2
+ "ui.label.confirm": "❓ Confirm",
3
+ "ui.label.select": "📋 Select",
4
+ "ui.label.input": "✏️ Input",
5
+ "ui.label.warning": "⚠️ Warning",
6
+ "ui.label.error": "❌ Error",
7
+ "ui.label.success": "✅ Success",
8
+ "ui.label.info": "ℹ️ Info",
9
+ "ui.label.theme_selection": "🎨 Theme Selection",
10
+ "ui.label.loading": "⏳ Processing",
11
+ "ui.prompt.continue": "Do you want to continue?",
12
+ "ui.label.disabled": "(Disabled)",
13
+
14
+ "error.push.pending_review.message": "Cannot push: theme is pending review.",
15
+ "error.push.pending_review.hint": "Withdraw first: tsoft theme withdraw",
16
+ "error.push.auth.message": "Authorization error.",
17
+ "error.push.auth.hint": "Login again: tsoft login --org",
18
+ "error.push.backend_error.message": "Server error occurred.",
19
+ "error.push.backend_error.hint": "For details: tsoft theme push --verbose",
20
+ "error.push.backend_reject.message": "Push was rejected.",
21
+ "error.push.backend_reject.hint": "For details: tsoft theme push --verbose",
22
+ "error.push.unexpected.message": "An unexpected error occurred.",
23
+ "error.push.unexpected.hint": "For details: tsoft theme push --verbose",
24
+
25
+ "error.http.401.message": "Authorization error.",
26
+ "error.http.401.hint": "Login again: tsoft login --org",
27
+ "error.http.403.message": "You do not have permission for this operation.",
28
+ "error.http.403.hint": "Check your organization permissions: tsoft org switch",
29
+ "error.http.404.message": "Theme not found.",
30
+ "error.http.404.hint": "Check the theme name: tsoft theme list",
31
+ "error.http.409.message": "Cannot push: theme is not in a valid state.",
32
+ "error.http.409.hint": "Check theme status: tsoft theme dev-status",
33
+ "error.http.423.message": "Theme is locked.",
34
+ "error.http.423.hint": "Theme may be locked by another operation.",
35
+ "error.http.5xx.message": "Server error occurred.",
36
+ "error.http.5xx.hint": "For details: tsoft {{command}} --verbose",
37
+
38
+ "error.push.verbose_hint": "For details: tsoft theme push --verbose",
39
+ "error.fallback.message": "An unexpected error occurred.",
40
+ "error.fallback.hint": "For details: tsoft theme push --verbose",
41
+ "error.auth_required.message": "Authorization error.",
42
+ "error.auth_required.hint": "Login again: tsoft login --org",
43
+
44
+ "login.starting": "🔐 Initializing tsoft360 authorization...",
45
+ "login.browser_opening": "🌐 Opening browser...",
46
+ "login.waiting": "⏳ Waiting for authorization...",
47
+ "login.waiting_detail": "Log in to the browser and select your store.",
48
+ "login.code_received": "✓ Authorization code received",
49
+ "login.token_fetching": "🔄 Fetching token...",
50
+ "login.token_received": "✓ Token successfully received",
51
+ "login.credentials_saved": "✓ Credentials saved",
52
+ "login.success": "🎉 Successfully logged in!",
53
+ "login.tip": "💡 Tip: Use \"tsoft whoami\" to check your status.",
54
+ "login.json_error.message": "Login command requires interactive mode.",
55
+ "login.json_error.hint": "For CI/CD, authenticate with tsoft login first to store the token, then use it.",
56
+ "login.error_log": "Check log files for details.",
57
+ "login.security_error": "State parameter mismatch! This may indicate a security issue.",
58
+
59
+ "logout.starting": "🚪 Logging out...",
60
+ "logout.not_logged_in": "⚠️ You are not logged in.",
61
+ "logout.revoking": "🔄 Revoking token...",
62
+ "logout.revoked": "✓ Token revoked",
63
+ "logout.revoke_failed": "⚠️ Could not revoke token (may already be invalid)",
64
+ "logout.credentials_cleared": "✓ Local credentials cleared",
65
+ "logout.success": "👋 Successfully logged out!",
66
+ "logout.relogin_tip": "To log in again, use the \"tsoft login\" command.",
67
+
68
+ "whoami.not_logged_in": "⚠️ You are not logged in.",
69
+ "whoami.not_logged_in_tip": "Use \"tsoft login\" to log in.",
70
+ "whoami.not_logged_in.json.message": "Not logged in.",
71
+ "whoami.not_logged_in.json.hint": "To log in: tsoft login --org",
72
+ "whoami.token_refreshed": "🔄 Token automatically refreshed",
73
+ "whoami.session_expired": "⚠️ Session expired, logging in again...",
74
+ "whoami.title": "👤 Identity Information",
75
+ "whoami.user_label": "User:",
76
+ "whoami.store_label": "Store:",
77
+ "whoami.access_token_label": "Access Token:",
78
+ "whoami.refresh_token_label": "Refresh Token:",
79
+ "whoami.config_dir_label": "Config Directory:",
80
+ "whoami.last_update_label": "Last Updated:",
81
+ "whoami.token_valid": "✓ Valid ({{expiry}} remaining)",
82
+ "whoami.token_expired": "✗ Expired",
83
+ "whoami.refresh_valid": "✓ Valid ({{days}} days remaining)",
84
+ "whoami.relogin_tip": "Tip: Use tsoft login --org to log in again",
85
+
86
+ "theme.listing": "📋 Listing themes...",
87
+ "theme.no_themes": "⚠️ No themes found yet.",
88
+ "theme.count": "Total {{count}} themes found:",
89
+ "theme.folder_label": "Folder:",
90
+ "theme.creating": "🎨 Creating new theme...",
91
+ "theme.name_prompt": "Theme Name:",
92
+ "theme.name_required": "Theme name cannot be empty",
93
+ "theme.description_prompt": "Description:",
94
+ "theme.author_prompt": "Developer:",
95
+ "theme.minimal_prompt": "Create a minimal theme?\n\nMinimal theme only includes basic blocks.",
96
+ "theme.minimal_title": "🎨 Theme Type",
97
+ "theme.dir_exists_title": "⚠️ Directory Exists",
98
+ "theme.dir_exists_prompt": "Directory already exists!\n\nLocation: {{path}}\n\nOverwrite?",
99
+ "theme.dir_overwrite_prompt": "Directory already exists!\n\nLocation: {{path}}\n\nOverwrite?",
100
+ "theme.cancelled": "Operation cancelled.",
101
+ "theme.saving_db": "🔄 Saving theme to database...",
102
+ "theme.saved_db": "✓ Theme saved to database",
103
+ "theme.downloading_files": "🔄 Downloading theme files...",
104
+ "theme.files_downloaded": "✓ Theme files downloaded",
105
+ "theme.extracting": "🔄 Extracting files...",
106
+ "theme.extracted": "✓ Files extracted: {{path}}",
107
+ "theme.active_set": "✓ Set as active theme",
108
+ "theme.create_success": "🎉 Theme successfully created!",
109
+ "theme.create_location": "Location: {{path}}",
110
+ "theme.dev_start_tip": "To start theme development:",
111
+ "theme.file_write_error": "An error occurred while writing the file.",
112
+ "theme.validation_tip": "Tip: Please check the information you entered.",
113
+ "theme.token_tip": "Tip: First log in with \"tsoft login\" command.",
114
+ "theme.connection_error": "Connection Error",
115
+ "theme.connection_check": "Check your internet connection and try again.",
116
+ "theme.updating": "🔄 Creating theme...",
117
+ "theme.update_failed_contact": "Tip: Please contact your system administrator.",
118
+ "theme.force_update_confirm": "The default theme will be automatically updated and your new theme will be created.\n\n🔸 This operation:\n • Upgrades the default theme to the latest version\n • Updates all layouts and sections\n • Creates your new theme based on the updated default theme\n\n⏱️ This operation may take a few minutes.\n\nProceed?",
119
+ "theme.force_update_title": "🔄 Default Theme Update",
120
+ "theme.force_updating": "⏳ Updating default theme and creating new theme...",
121
+ "theme.force_update_success_1": "✓ Default theme successfully updated",
122
+ "theme.force_update_success_2": "✓ New theme created",
123
+
124
+ "theme.pull.starting": "📥 Starting theme download...",
125
+ "theme.pull.no_themes": "No themes available to download.",
126
+ "theme.pull.select_title": "Download Theme",
127
+ "theme.pull.select_prompt": "Which theme would you like to download?",
128
+ "theme.pull.downloading": "📦 Downloading \"{{name}}\"...",
129
+ "theme.pull.success": "🎉 Theme successfully downloaded!",
130
+
131
+ "theme.use.starting": "🎯 Setting active theme...",
132
+ "theme.use.no_themes": "No themes found.",
133
+ "theme.use.not_found": "❌ Theme not found: {{name}}",
134
+ "theme.use.available": "Available themes:",
135
+ "theme.use.select_prompt": "Which theme would you like to activate?",
136
+ "theme.use.select_title": "🎯 Theme Selection",
137
+ "theme.use.set": "✓ Active theme set: {{name}}",
138
+ "theme.use.folder": "Folder: {{folder}}",
139
+
140
+ "push.no_active_theme": "No active theme found.",
141
+ "push.usage": "Usage: tsoft theme push <theme-name>",
142
+ "push.use_tip": "Or set an active theme with \"tsoft theme use <theme-name>\".",
143
+ "push.connecting": "Connecting to server...",
144
+ "push.checking_status": "Checking current status...",
145
+ "push.pushing": "Pushing theme...",
146
+ "push.no_changes": "No changes -- current draft is up to date.",
147
+ "push.success": "Push completed",
148
+ "push.first_push_note": "(first push)",
149
+ "push.admin_approval": "Will be published as 1.0.0 after admin approval",
150
+ "push.draft_created": "New draft created",
151
+ "push.draft_updated": "Existing draft updated",
152
+ "push.changes_added": "+{{count}} new",
153
+ "push.changes_removed": "~{{count}} removed",
154
+
155
+ "dev.starting": "🚀 Starting development environment...",
156
+ "dev.active_site": "📍 Active Site:",
157
+ "dev.active_theme": "📍 Active Theme:",
158
+ "dev.continue_prompt": "Do you want to continue with this site and theme?",
159
+ "dev.continue_title": "Development Environment",
160
+ "dev.no_themes": "No themes found.",
161
+ "dev.select_theme_prompt": "Which theme would you like to work with?",
162
+ "dev.select_theme_title": "🎨 Theme Selection",
163
+ "dev.active_theme_set": "✓ Active theme: {{slug}}",
164
+ "dev.working_dir": "✓ Working directory: {{path}}",
165
+ "dev.fork_warning_title": "Fork Warning",
166
+ "dev.fork_warning": "This theme belongs to another organization!\n\nTheme: {{name}} v{{version}}\nTheme Organization: Organization #{{org_id}}\nYour Organization: {{user_org}}\n\nYou can work on your own copy by creating a fork.",
167
+ "dev.fork_cancelled": "Operation cancelled.\n\nSuggestions:\n tsoft org switch - Switch organization\n tsoft theme list - List themes",
168
+ "dev.forking": "Forking theme...",
169
+ "dev.fork_success": "✓ Theme forked: {{name}}",
170
+ "dev.fork_source": "Source: {{source}} v{{version}}",
171
+ "dev.dir_exists_title": "Directory Exists",
172
+ "dev.dir_exists_prompt": "Directory already exists!\n\nLocation: {{path}}\n\nOverwrite?",
173
+ "dev.theme_not_found": "Theme directory not found!\n\nExpected: {{path}}\n\nSolution: tsoft theme pull",
174
+ "dev.checking_lock": "🔒 Checking lock status...",
175
+ "dev.not_locked": "✓ Theme is not locked",
176
+ "dev.acquiring_lock": "🔐 Acquiring lock...",
177
+ "dev.lock_acquired": "✓ Lock successfully acquired",
178
+ "dev.already_locked": "✓ You already have the lock",
179
+ "dev.already_synced": "✓ Theme is synchronized",
180
+ "dev.not_synced": "⚠️ Lock exists but theme is not synchronized",
181
+ "dev.lock_by_other": "Theme is locked by another developer!\n\nDeveloper: {{dev}}\nLast access: {{last_access}}\n\nAre you sure you want to take the lock?",
182
+ "dev.lock_warning_title": "🔒 Lock Warning",
183
+ "dev.lock_override": "🔐 Acquiring lock (override)...",
184
+ "dev.watching": "👀 Watching for file changes...",
185
+ "dev.env_running": "💡 Development environment is running",
186
+ "dev.exit_tip": "Press Ctrl+C to exit safely",
187
+ "dev.stopping": "⏸️ Shutting down development environment...",
188
+ "dev.watch_stopped": "✓ File watching stopped",
189
+ "dev.keepalive_stopped": "✓ Keep-alive stopped",
190
+ "dev.lock_kept": "(Lock kept active - you can continue next time)",
191
+ "dev.exit_success": "✓ Safely exited",
192
+ "dev.sync_pulling": "📥 Pulling latest changes...",
193
+ "dev.sync_updated": "✓ Files updated",
194
+ "dev.sync_marking": "🔄 Marking synchronization...",
195
+ "dev.sync_done": "✓ Theme synchronized",
196
+ "dev.lock_stolen": "❌ Theme lock was taken by another developer!",
197
+ "dev.lock_stolen_owner": "New lock owner: {{owner}}",
198
+ "dev.lock_stolen_stopping": "Stopping development environment...",
199
+ "dev.lock_lost": "❌ Theme was locked by another developer!",
200
+ "dev.not_synced_pulling": "⚠️ Theme is not synced! Pulling...",
201
+ "dev.file_deleted": "🗑️ {{path}} → Deleted",
202
+ "dev.file_delete_failed": "{{path}} → Could not delete: {{error}}",
203
+ "dev.file_saved": "✓ {{path}} → Saved ({{duration}}ms)",
204
+ "dev.file_error": "{{path}} → Error: {{error}}",
205
+ "dev.keepalive_error": "⚠️ Keep-alive error (will retry)",
206
+
207
+ "init.no_themes": "No themes found.",
208
+ "init.select_prompt": "Which theme would you like to fork?",
209
+ "init.select_title": "Theme Selection",
210
+ "init.confirm_prompt": "{{name}} v{{version}} will be forked.\nDo you want to continue?",
211
+ "init.confirm_title": "Fork Confirmation",
212
+ "init.cancelled": "Operation cancelled.",
213
+ "init.forking": "Forking theme...",
214
+ "init.dir_exists_title": "Directory Exists",
215
+ "init.dir_exists_prompt": "Directory already exists!\n\nLocation: {{path}}\n\nOverwrite?",
216
+ "init.dir_cancelled": "Operation cancelled.",
217
+ "init.downloading": "Downloading theme files...",
218
+ "init.success": "Theme successfully forked!",
219
+ "init.theme_label": "Theme:",
220
+ "init.source_label": "Source:",
221
+ "init.location_label": "Location:",
222
+ "init.dev_tip": "To start development: tsoft theme dev {{slug}}",
223
+ "init.json_error.message": "--from parameter required (interactive selection not supported in JSON mode)",
224
+ "init.json_error.hint": "Usage: tsoft --json theme init --from <slug>",
225
+ "init.theme_not_found": "Theme not found: {{slug}}",
226
+
227
+ "section.list.no_active_theme": "No active theme found. Please run \"tsoft theme use <theme-name>\" first.",
228
+ "section.list.starting": "Listing sections...",
229
+ "section.list.active_theme": "Active Theme: {{theme}}",
230
+ "section.list.no_blocks": "⚠️ No blocks found yet.",
231
+ "section.list.count": "Total {{count}} blocks found:",
232
+ "section.list.id_label": "ID:",
233
+ "section.list.folder_label": "Folder:",
234
+ "section.list.sections_label": "Available sections ({{count}}):",
235
+ "section.list.tags_label": "Tags:",
236
+ "section.list.file_label": "File:",
237
+ "section.list.no_sections": "⚠️ No sections found for this block",
238
+
239
+ "section.add.no_active_theme": "No active theme found. Please run \"tsoft theme use <theme-name>\" first.",
240
+ "section.add.starting": "🔧 Starting section add operation...",
241
+ "section.add.active_theme": "Active Theme: {{theme}}",
242
+ "section.add.no_blocks": "No blocks available to add.",
243
+ "section.add.no_sections": "No sections available to add.",
244
+ "section.add.block_select_prompt": "Which block would you like to add?",
245
+ "section.add.block_select_title": "📦 Block Selection",
246
+ "section.add.block_selected": "\"{{name}}\" block selected.",
247
+ "section.add.mode_prompt": "How would you like to add?",
248
+ "section.add.mode_all": "Add all sections",
249
+ "section.add.mode_selective": "Select specific sections",
250
+ "section.add.mode_title": "🎯 Add Mode",
251
+ "section.add.checkbox_prompt": "Select sections to add (Space to mark):",
252
+ "section.add.min_one": "You must select at least one section.",
253
+ "section.add.summary": "{{count}} sections will be added:",
254
+ "section.add.confirm_prompt": "{{count}} sections will be added to \"{{theme}}\" theme.\n\nDo you want to continue?",
255
+ "section.add.confirm_title": "✅ Confirm",
256
+ "section.add.cancelled": "Operation cancelled.",
257
+ "section.add.adding": "🔄 Adding sections...",
258
+ "section.add.added": "✓ {{name}} added",
259
+ "section.add.already_exists": "⚠️ {{name}} already exists.",
260
+ "section.add.overwrite_prompt": "What would you like to do?",
261
+ "section.add.overwrite": "Overwrite",
262
+ "section.add.overwrite_all": "Overwrite all",
263
+ "section.add.skip": "Skip",
264
+ "section.add.overwrite_title": "🔄 Overwrite",
265
+ "section.add.single_overwrite_prompt": "{{name}} already exists. Overwrite?",
266
+ "section.add.single_overwrite_title": "🔄 Overwrite",
267
+ "section.add.overwritten": "✓ {{name}} overwritten",
268
+ "section.add.skipped": "○ {{name}} skipped",
269
+ "section.add.failed": "✗ {{name}} could not be added: {{error}}",
270
+ "section.add.success_count": "✓ {{count}} sections successfully added",
271
+ "section.add.error_count": "✗ {{count}} sections could not be added",
272
+ "section.add.updating_files": "🔄 Updating theme files...",
273
+ "section.add.files_downloaded": "✓ Theme files downloaded",
274
+ "section.add.files_updating": "🔄 Updating files...",
275
+ "section.add.files_updated": "✓ Theme files updated",
276
+ "section.add.complete": "🎉 Operation completed!",
277
+ "section.add.location": "Location: {{path}}",
278
+ "section.add.download_error": "⚠️ Error while updating theme files:",
279
+ "section.add.manual_tip": "💡 Try downloading the theme manually:",
280
+ "section.add.manual_command": "tsoft theme pull",
281
+
282
+ "org.switch.json_error.message": "This command requires interactive mode.",
283
+ "org.switch.json_error.hint": "org switch is not supported in JSON mode.",
284
+ "org.switch.no_store": "No active store found. Please run \"tsoft login\" first.",
285
+ "org.switch.no_token": "Token not found. Please run \"tsoft login\" first.",
286
+ "org.switch.loading": "Loading organizations...",
287
+ "org.switch.no_orgs": "You are not a member of any organization.",
288
+ "org.switch.select_prompt": "Which organization will you work in?",
289
+ "org.switch.select_title": "Organization Selection",
290
+ "org.switch.selecting": "Selecting {{name}}...",
291
+ "org.switch.success": "Active organization: {{name}}\nID: {{id}}\n\nYou can now develop themes under this organization.",
292
+ "org.switch.error": "Organization selection failed: {{error}}",
293
+
294
+ "help.tagline": "Theme development toolkit for tsoft360",
295
+ "help.footer": "Run tsoft <command> --help for details",
296
+ "help.group.development": "Development",
297
+ "help.group.theme_management": "Theme Management",
298
+ "help.group.account": "Account",
299
+ "help.cmd.theme_dev": "Start theme development server with live reload",
300
+ "help.cmd.theme_push": "Push theme files to your store",
301
+ "help.cmd.theme_section_list": "List all sections in the active theme",
302
+ "help.cmd.theme_section_add": "Add a new section to the active theme",
303
+ "help.cmd.theme_list": "List all themes in your store",
304
+ "help.cmd.theme_create": "Create a new theme",
305
+ "help.cmd.theme_pull": "Download an existing theme",
306
+ "help.cmd.theme_use": "Set the active theme",
307
+ "help.cmd.theme_init": "Initialize a new theme by forking an existing one",
308
+ "help.cmd.login": "Authenticate with your tsoft360 store",
309
+ "help.cmd.logout": "Sign out and clear local credentials",
310
+ "help.cmd.whoami": "Show the logged-in user and store info",
311
+ "help.cmd.org_switch": "Switch the active organization",
312
+
313
+ "help.status.logged_in": "{{email}} ({{store}})",
314
+ "help.status.not_logged_in": "Not logged in — tsoft login",
315
+ "help.status.active_theme": "Theme: {{theme}}",
316
+ "help.status.no_theme": "No active theme — tsoft theme init",
317
+
318
+ "publish.deprecated": "Warning: Use \"theme push\" instead of \"theme publish\".",
319
+ "submit.deprecated": "Warning: Submit is now done from the partner panel.",
320
+ "submit.step1": "1. tsoft theme push",
321
+ "submit.step2": "2. Complete meta/screenshots in the partner panel",
322
+ "submit.step3": "3. Submit from the partner panel"
323
+ }