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 +160 -0
- package/LICENSE +21 -0
- package/README.md +86 -53
- package/locales/en.json +323 -0
- package/locales/tr.json +323 -0
- package/package.json +41 -45
- package/src/api-client.js +217 -0
- package/src/commands/login.js +94 -0
- package/src/commands/logout.js +44 -0
- package/src/commands/org-switch.js +82 -0
- package/src/commands/theme-dev.js +424 -0
- package/src/commands/theme-init.js +162 -0
- package/src/commands/theme-publish.js +12 -0
- package/src/commands/theme-push.js +197 -0
- package/src/commands/theme-section.js +317 -0
- package/src/commands/theme-submit.js +14 -0
- package/src/commands/theme.js +474 -0
- package/src/commands/whoami.js +132 -0
- package/src/config.js +19 -0
- package/src/errors/error-mapper.js +158 -0
- package/src/i18n.js +84 -0
- package/src/index.js +179 -0
- package/src/output-mode.js +45 -0
- package/src/pkce.js +34 -0
- package/src/server.js +209 -0
- package/src/storage.js +488 -0
- package/src/ui/help-renderer.js +219 -0
- package/src/ui/prompt-wrapper.js +183 -0
- package/bin/run.js +0 -5
- package/build/enums.d.ts +0 -1
- package/build/enums.js +0 -7
- package/build/enums.js.map +0 -1
- package/build/index.d.ts +0 -5
- package/build/index.js +0 -10
- package/build/index.js.map +0 -1
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
|
-
#
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
##
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
tsoft
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
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)
|
package/locales/en.json
ADDED
|
@@ -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
|
+
}
|