tsoft-cli 2.6.15 → 3.4.1

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,166 @@
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.1] - 2026-04-08
9
+
10
+ ### Changed
11
+ - OAuth callback page redesigned — clean white background with bordered card
12
+ - Error page styled to match success page
13
+
14
+ ## [3.4.0] - 2026-04-08
15
+
16
+ ### Added
17
+ - Branded help renderer with contextual status block
18
+ - i18n support (Turkish default, English available)
19
+ - `--help` flag async branded output
20
+
21
+ ### Changed
22
+ - Commander descriptions switched to English
23
+ - OS auto-detect removed, Turkish set as default language
24
+ - npm publish configuration with `files` whitelist
25
+ - axios updated to ^1.14.0
26
+
27
+ ## [3.3.0] - 2026-01-02
28
+
29
+ ### ✨ Added
30
+ - **Theme Publish**: `tsoft theme publish [name]` - Temayı TSoftApps market'e yayınlama
31
+ - **Semantic Versioning**: İlk yayın için manuel version, güncellemeler için major/minor/patch seçimi
32
+ - **Dev Status Check**: Otomatik ilk yayın / güncelleme tespiti
33
+ - **Version Suggestions**: Backend'den gelen akıllı version önerileri
34
+ - **Interactive Prompts**: Kullanıcı dostu version seçim arayüzü
35
+ - **Batch File Upload**: Tema dosyalarını toplu yükleme özelliği
36
+ - **Progress Tracking**: Dosya yükleme işlemlerinde progress bar
37
+
38
+ ### 🔧 API Client
39
+ - Added `getThemeDevStatus()` - Tema dev version durumu
40
+ - Added `getVersionSuggestions()` - Version bump önerileri
41
+ - Added `publishTheme()` - Tema publish işlemi
42
+ - Added `syncTheme()` - Tema build/sync işlemi
43
+
44
+ ### 📝 Documentation
45
+ - Updated README with publish feature
46
+ - Added publish usage examples
47
+ - Added semantic versioning guidelines
48
+
49
+ ### 🎯 User Experience
50
+ - Minimal ve akıcı publish akışı
51
+ - Sadece meta bilgiler toplanır (backend ZIP oluşturur)
52
+ - Changelog/release notes kapsam dışı (gelecek sürümlerde)
53
+ - Context-aware hata mesajları ve ipuçları
54
+ - Otomatik dosya yükleme ve sync işlemleri
55
+
56
+ ## [3.2.0] - 2025-12-16
57
+
58
+ ### ✨ Added
59
+ - **Theme Use**: `tsoft theme use [theme-name]` - Aktif tema seçimi
60
+ - **Section Management**: `tsoft theme section` - Tema section yönetim sistemi
61
+ - **Section List**: `tsoft theme section list` - Block'ları ve section'ları listeleme
62
+ - **Section Add**: `tsoft theme section add` - İnteraktif section ekleme
63
+ - **Bulk Operations**: Tüm section'ları toplu ekleme seçeneği
64
+ - **Selective Add**: Checkbox UI ile çoklu section seçimi
65
+ - **Conflict Resolution**: Akıllı üzerine yazma seçenekleri
66
+
67
+ ### 🔧 API Client
68
+ - Added `getSections(themeUuid)` - Block ve section listesini getirme
69
+ - Added `addSection(themeUuid, blockId, themeSectionId, force)` - Section ekleme
70
+ - Enhanced 422 validation error handling
71
+
72
+ ### 💾 Storage
73
+ - Added `getThemeUuidBySlug(themeSlug)` - Tema slug'ından UUID bulma
74
+ - Added active theme tracking with `.tsoft/active-theme.txt`
75
+
76
+ ### 🎨 User Experience
77
+ - Interactive block selection
78
+ - Space tuşu ile çoklu section seçimi
79
+ - Otomatik tema indirme ve extraction
80
+ - Progress tracking ve detaylı sonuç özeti
81
+ - Context-aware conflict resolution
82
+
83
+ ### 🌍 Localization
84
+ - Tüm UI metinleri Türkçe
85
+ - Emoji tabanlı görsel geri bildirim
86
+ - Color-coded çıktılar
87
+
88
+ ## [3.1.1] - 2024-12-15
89
+
90
+ ### 🐛 Fixed
91
+ - **developerSynced Sync Issues**: Added `mark-synced` calls after every file operation
92
+ - **Lock Mechanism**: `acquire-lock` only at startup, `mark-synced` after each file operation
93
+ - **Keep-alive Improvements**: Keep-alive now uses `mark-synced` instead of `acquire-lock`
94
+ - **Auto-recovery**: Added automatic pull & retry mechanism for "not synced" errors
95
+ - **Error Handling**: Improved distinction between lock theft and synchronization errors
96
+
97
+ ### 🔄 Changed
98
+ - Keep-alive interval now uses correct endpoint (`mark-synced`)
99
+ - Improved automatic synchronization after file operations
100
+
101
+ ### 📝 Notes
102
+ - Fixed `developerSynced=0` persistence issue
103
+ - Fixed misinterpretation of "Theme is not synced or locked by another developer" error message
104
+
105
+ ## [3.1.0] - 2024-12-15
106
+
107
+ ### ✨ Added
108
+ - **Branded UI System**: Professional, modern user interface system
109
+ - **T-Soft Branding**: Gradient orange T-Soft logo on every interaction
110
+ - **Context-Aware Boxes**: Status-based headers and framed message boxes
111
+ - **Custom Prompt Wrappers**: `brandedConfirm`, `brandedSelect`, `brandedInput` functions
112
+ - **Message Types**: `showWarning`, `showError`, `showSuccess`, `showInfo` functions
113
+ - **Turkish Language Support**: All UI texts in Turkish
114
+
115
+ ### 📦 Dependencies
116
+ - Added `boxen@^8.0.1` - Terminal box rendering
117
+ - Added `gradient-string@^2.0.2` - Gradient color effects
118
+ - Added `cli-spinners@^2.9.2` - Loading animations support
119
+
120
+ ### 🔄 Changed
121
+ - Updated `theme dev` command with branded UI
122
+ - Updated `theme create` command with branded UI
123
+ - Updated `theme pull` command with branded UI
124
+ - Improved user experience with professional styling
125
+
126
+ ### 🎨 Design
127
+ - Orange color scheme (#FF6B35) for brand consistency
128
+ - Round borders for modern look
129
+ - Proper spacing and padding
130
+ - Visual hierarchy with icons and colors
131
+
132
+ ## [3.0.0] - 2024-12-01
133
+
134
+ ### ✨ Added
135
+ - OAuth2 Authorization Code Flow with PKCE
136
+ - Secure token management system
137
+ - `login` command for authentication
138
+ - `logout` command for token revocation
139
+ - `whoami` command for status check
140
+ - Automatic token refresh mechanism
141
+
142
+ ### 🎨 Theme Management
143
+ - `theme list` - List all themes
144
+ - `theme create` - Create new theme
145
+ - `theme pull` - Download existing theme
146
+ - `theme dev` - Development mode with hot-reload
147
+
148
+ ### 🔒 Security
149
+ - PKCE implementation for public clients
150
+ - State parameter for CSRF protection
151
+ - Secure token storage (chmod 600)
152
+ - Automatic token expiry handling
153
+
154
+ ---
155
+
156
+ ## Legend
157
+
158
+ - ✨ Added: New features
159
+ - 🔄 Changed: Changes in existing functionality
160
+ - 🗑️ Deprecated: Soon-to-be removed features
161
+ - ❌ Removed: Removed features
162
+ - 🐛 Fixed: Bug fixes
163
+ - 🔒 Security: Security improvements
164
+ - 📦 Dependencies: Dependency updates
165
+ - 🎨 Design: UI/UX improvements
166
+
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
+ }