@tecof/cli paketi tecof komutunu kurar. Bu sayfa tüm komutları ve seçenekleri, ortam değişkenlerini, çıkış kodlarını, JSON makbuzlarını, yok sayma kurallarını ve sınırları listeler. Adım adım akış için Tema Geliştirme: Hızlı Başlangıç ve Hızlı Başlangıç: Tecof CLI sayfalarına bakın.
npm install -g @tecof/cli # Node.js 20+
tecof --help # tüm komutlar
tecof theme # bir grubun komutları
tecof theme push --help # tek komutun seçenekleriMesajlar Türkçedir; TECOF_LANG=en İngilizce çıktı verir. TECOF_LANG tanımlı değilse ve sistem dili (LC_ALL, LC_MESSAGES ya da LANG) en ile başlıyorsa da İngilizce kullanılır; Türkçeyi zorlamak için TECOF_LANG=tr.
Genel Seçenekler#
| Seçenek | Açıklama |
|---|---|
--api <url> | Tecof API adresi. Öncelik: --api, sonra TECOF_API_URL, sonra kayıtlı yapılandırma, sonra https://api.tecof.com |
--json | Makine makbuzu: başarıda stdout'a, hatada stderr'e tek JSON belgesi (JSON makbuzları) |
-y, --yes | Yıkıcı işlemleri onaylar: promote, rollback, push --prod, tokens revoke |
--show-secret | Makbuzda sırları maskelemez (önizleme bağlantısı, yeni token) |
-h, --help | Yardım |
-v, --version | CLI sürümü |
Alan kimlikleri thm_… (tema) ya da app_… (uygulama) biçimindedir. Sürümlere v12, 12 ya da sürüm kimliğiyle başvurulur.
Hesap#
| Komut | Açıklama |
|---|---|
tecof login [--api <url>] [--no-browser] | Cihaz akışıyla giriş. Doğrulama kodu (ABCD-EFGH) ve onay adresi (https://app.tecof.com/cli?code=…) gösterilir; kod 10 dakika geçerlidir, CLI onayı 5 saniyede bir yoklar. --no-browser tarayıcıyı açmaz. --json modunda kod ve adres stderr'e yazılır |
tecof logout | Token'ı sunucuda iptal eder ve yerelden siler. TECOF_TOKEN ile verilen token iptal edilmez; CLI uyarır |
tecof whoami | Kullanıcı, partner (varsa), rol, programlar ve API adresi |
tecof status | Kimlik, API, token kaynağı ve bitişi, klasörün bağlı olduğu alan, canlı ve son sürüm, geri alınmış mı, yerel taban ve tabana göre yerel değişiklik sayıları. Hiçbir şeyi değiştirmez |
tecof doctor | Ortam denetimi; zorunlu bir denetim başarısızsa çıkış 1 |
tecof doctor denetimleri:
| Denetim | Zorunlu | Ne bakar |
|---|---|---|
node | Evet | Node.js 20 ya da üstü |
api | Evet | API adresine erişim |
token | Evet | Token var ve sunucu kabul ediyor |
credentials | Hayır | Kullanılan kimlik deposu |
link | Hayır | Klasör bir alana bağlı mı |
git | Hayır | git kurulu mu |
package-manager | Hayır | Kilit dosyasına göre paket yöneticisi |
cloudflared | Hayır | Yalnız tecof app dev tüneli için |
Alanlar#
| Komut | Açıklama |
|---|---|
tecof spaces ls [--kind theme|app] | Erişebildiğiniz alanlar: kimlik, tür, ad, mağaza ya da uygulama, canlı sürüm, son sürüm, geri alınmış mı, yazılabilir mi (değilse nedeni). Kapsamlı token yalnız izin verilen alanları görür |
tecof spaces get [--space <id>] | Tek alanın ayrıntısı: yazılabilirlik, canlı ve son sürüm, geri alma zamanı, canlı adres, depo, üretim dalı ve main commit'i. --space verilmezse klasörün bağlı olduğu alan (tema bağı, yoksa tecof.app.json) |
Tema#
theme ls ve theme init dışındaki tema komutları, bulunduğunuz klasörden yukarı doğru ilk .tecof/space.json bağını kullanır.
| Komut | Açıklama |
|---|---|
tecof theme ls | Tema alanlarını listeler |
tecof theme init [dir] --space <thm_…> [--force] | Klasör açar, alana bağlar, main dalını indirir. Klasör adı verilmezse tema adından türetilir. --space etkileşimli terminalde verilmezse listeden seçilir; ajan modunda zorunludur (yoksa çıkış 2). --force boş olmayan klasöre ve yerel dosyaların üzerine yazar |
tecof theme link [--space <thm_…>] | Bu klasörü bir tema alanına bağlar (.tecof/space.json). Başka bir alana yeniden bağlarken eski yerel taban silinir |
tecof theme pull [--ref vN|main] [--force] | Kaynağı indirir (varsayılan main). Yerelde değişmiş bir dosyanın üzerine yazılacaksa hiçbir şey yazmadan durur (çıkış 4, next.action: "confirm"); --force üzerine yazar ve uzakta silinmiş dosyaları siler |
tecof theme dev [--port <n>] [--cloud [--keep]] | Yerel geliştirme ya da bulut oturumu (ayrıntı) |
tecof theme push [-m <mesaj>] [--prod] [--no-wait] [--wait-timeout <sn>] [--force] | Yalnız değişen dosyaları yükler ve yeni sürüm açar (varsayılan staged) |
tecof theme versions [ls|vN] [--limit <n>] | Sürüm listesi (varsayılan 20, en çok 100) ya da tek sürümün durumu |
tecof theme open [vN] | Sürümün önizlemesini açar; sürüm verilmezse canlı adresi. Ajan modunda tarayıcı açılmaz, bağlantı yazılır |
tecof theme logs vN | Sürümün derleme günlüğü |
tecof theme promote vN | Sürümü yeniden derlemeden canlıya alır (yıkıcı) |
tecof theme rollback [vN] | Bir önceki canlı sürüme ya da verilen, daha önce canlıda olmuş sürüme döner (yıkıcı) |
tecof theme dev seçenekleri:
| Seçenek | Açıklama |
|---|---|
-p, --port <port> | Yerel sunucu portu (varsayılan PORT ya da 3000) |
--cloud | Bulut oturumu açar, değişiklikleri izleyip önizlemeye yazar |
--keep | Çıkışta bulut oturumunu açık bırakır |
tecof theme push seçenekleri:
| Seçenek | Açıklama |
|---|---|
-m, --message <mesaj> | Sürüm mesajı. Varsayılan: son git commit başlığı, yoksa tecof theme push |
--prod | Doğrudan canlıya: commit main dalına hızlı ileri yazılır, derleme bitince canlıya çıkar. Yıkıcı, onay ister |
--no-wait | Derlemeyi beklemez; makbuzda next.action: "poll" |
--wait-timeout <sn> | Bekleme süresi (varsayılan 900). Süre dolarsa çıkış 1 ve next.action: "poll"; derleme sürmeye devam eder |
--force | Yerel taban yokken (hiç pull yapılmamış klasörde) push'un uzaktaki dosyaları silmesine izin verir |
Uygulama#
Uygulama komutları bulunduğunuz klasörden yukarı doğru ilk tecof.app.json dosyasını kullanır. Alan kimliği app_<tecof.app.json içindeki id> olur.
Sürüm komutları:
| Komut | Açıklama |
|---|---|
tecof app push [-m <mesaj>] [--prod] [--no-wait] [--wait-timeout <sn>] | Yalnız değişen dosyaları yükler ve yeni sürüm açar (varsayılan staged). Her push main dalının üstüne kurulur; klasör istenen son durumdur. tecof.app.json bu komutla gönderilmez |
tecof app versions [ls|vN] [--limit <n>] | Uygulama sürümleri |
tecof app promote vN | Sürümü canlıya alır (yıkıcı) |
tecof app rollback [vN] | Önceki canlı sürüme döner (yıkıcı) |
tecof app logs <vN|dağıtım kimliği> | vN için sürüm günlüğü; diğer değerler için eski dağıtım günlüğü |
Sürüm komutları yalnız Tecof barındırmalı uygulamalarda çalışır; hosting: "external" uygulamada hata verir.
Diğer uygulama komutları:
| Komut | Açıklama |
|---|---|
tecof app init [dir] [--template starter|actions] [--name <ad>] [--slug <slug>] [--no-create] [--force] | Şablondan proje açar ve uygulamayı sunucuda oluşturur; --no-create yalnız şablonu kopyalar |
tecof app link [--app <id|clientId|slug>] | Klasörü mevcut bir uygulamaya bağlar |
tecof app info | Uygulama bilgisi |
tecof app config push | tecof.app.json dosyasını gönderir |
tecof app dev [-p <port>] [--tunnel cloudflared|none|<url>] | Geliştirme sunucusu, tünel ve test mağazası adresi. --tunnel verilmezse cloudflared kuruluysa kullanılır; kendi tünel adresiniz herkese açık bir https:// adresi olmalıdır |
tecof app deploy [-m <mesaj>] | Tüm kaynağı paketleyip doğrudan yayınlar. Çalışmaya devam eder; artımlı push, staged sürüm ve anında geri alma için app push önerilir |
tecof app deployments | app deploy dağıtımlarının listesi |
tecof app secret rotate [--yes] | İstemci sırrını döndürür ve .env.local dosyasını günceller. Etkileşimsiz ortamda --yes ister (yoksa çıkış 1) |
tecof app open [--install] | Uygulamayı geliştirici portalında ya da kurulum sayfasında açar |
Ayrıntılar: Hızlı Başlangıç: Tecof CLI.
Token'lar#
| Komut | Açıklama |
|---|---|
tecof tokens ls | Cihaz oturumları ve kapsamlı token'lar: kimlik, ad, yetki seti, alanlar (* = tümü), son kullanım, bitiş; bu oturum işaretlenir |
tecof tokens create --name <ad> [--preset deploy|read] [--space <id> …] [--expires <gün>] | Kapsamlı CI token'ı basar. --preset verilmezse read. --space tekrarlanabilir ya da virgülle ayrılabilir; verilmezse erişebildiğiniz tüm alanlar. --expires 1–365 gün (varsayılan 90). Değer insan çıktısında bir kez gösterilir; --json makbuzunda --show-secret olmadan maskelenir |
tecof tokens revoke <id> | Token'ı iptal eder (yıkıcı) |
Kapsamlı token'la tokens ls, tokens create ve başka bir token için tokens revoke çalışmaz. Ayrıntı: Güvenlik ve CI.
Kurulum#
| Komut | Açıklama |
|---|---|
tecof setup agent [--client claude-code|cursor] [--merchant <id>] [--force] | Projeye Tecof uzak MCP sunucusunu ekler: Claude Code için .mcp.json, Cursor için .cursor/mcp.json. Dosyaya sır yazılmaz; istemci ilk bağlantıda Tecof OAuth onayını açar. --merchant mağaza kapsamlı adres (/mcp/<mağaza kimliği>) yazar; --force var olan farklı bir tecof girdisini değiştirir |
Ayrıntı: Güvenlik ve CI → Kodlama ajanları.
Ortam Değişkenleri#
| Değişken | Etki |
|---|---|
TECOF_TOKEN | Token (CI için). Kayıtlı girişin yerine kullanılır; değeri hiçbir çıktıda basılmaz |
TECOF_API_URL | API adresi (--api daha önceliklidir) |
TECOF_PANEL_URL | Panel adresi (kurulum ve portal bağlantıları); verilmezse girişteki onay adresinden alınır |
TECOF_AGENT=1 | Ajan modu: soru sorulmaz, tarayıcı açılmaz. stdin bir terminal değilse ajan modu kendiliğinden açıktır |
TECOF_AGENT_ALLOW_DESTRUCTIVE=1 | Yıkıcı işlemlere --yes olmadan izin verir. Kodlama ajanlarının ortamında tanımlamayın |
TECOF_CREDENTIAL_STORE | keyring (işletim sistemi anahtarlığını zorunlu kılar; yoksa hata) ya da plaintext (dosya) |
TECOF_PROFILE | Kimlik deposunda hesap öneki (varsayılan default); aynı makinede birden çok hesap için |
TECOF_CONFIG_DIR | Yapılandırma klasörü (varsayılan $XDG_CONFIG_HOME/tecof ya da ~/.config/tecof). Tanımlıysa kimlik de bu klasördeki dosyaya yazılır |
TECOF_LANG | en İngilizce, tr Türkçe çıktı |
TECOF_NO_BROWSER=1 | Tarayıcı açmaz (BROWSER=none da aynı etkiyi verir) |
TECOF_DEBUG=1 | Beklenmeyen hatalarda yığın izini basar; --json modunda ilerleme satırlarını stderr'e yazar |
TECOF_DEPLOY_POLL_MS | Sürüm yoklama aralığı (varsayılan 3000 ms) ve bulut oturumu açılış yoklaması (varsayılan 2000 ms) |
TECOF_DEV_DEBOUNCE_MS | Bulut geliştirmede değişiklik toplama süresi (varsayılan 300 ms) |
TECOF_DEV_HEARTBEAT_MS | Bulut oturumu canlılık bildirimi aralığı (varsayılan 60000 ms) |
CI | Tanımlıysa soru sorulmaz ve kimlik varsayılan olarak dosyada tutulur |
PORT | theme dev ve app dev için varsayılan port |
NO_COLOR | Renkli çıktıyı kapatır |
Çıkış Kodları#
| Kod | Anlamı | Örnekler |
|---|---|---|
0 | Başarı | Push tamamlandı, değişiklik yok (noop), sürüm canlıda |
1 | Hata | Derleme hatası, bekleme süresi doldu, gizli anahtar bulundu, yasak yol, ağ hatası, oturum geçersiz (401), doctor zorunlu denetimi |
2 | Kullanım hatası | Bilinmeyen komut ya da seçenek, geçersiz değer, ajan modunda eksik zorunlu seçenek (ör. --space) |
3 | Onay gerekli | Ajan ya da etkileşimsiz modda --yes olmadan yıkıcı işlem; API'ye hiç istek gitmez |
4 | Çakışma | base-moved, space-busy ve diğer 409 yanıtları (ör. version-not-ready, rollback-target-invalid); pull'da yerel değişiklik; taban bilinmeden silme (unknown-base) |
Geliştirme sunucusu komutları (theme dev, app dev) Ctrl+C ile kesilince 130 döner; yerel theme dev aksi hâlde geliştirme sunucusunun çıkış kodunu iletir.
JSON Makbuzları#
--json ile her komut tek bir JSON belgesi basar: başarıda stdout'a, hatada stderr'e. Başka satır basılmaz; uyarılar makbuzun diagnostics dizisine girer.
Başarı makbuzu (tecof theme push --json; version nesnesi kısaltılmıştır):
{
"ok": true,
"command": "theme push",
"space": "thm_66f1a2b3c4d5e6f7a8b9c0d1",
"version": {
"number": 12,
"ref": "v12",
"source": "cli",
"target": "staged",
"status": "ready",
"live": false,
"servedBefore": false,
"commitSha": "4d2c9e…",
"baseSha": "a1b2c3…",
"message": "Yeni ana sayfa",
"url": "https://tecof-theme-butik-3k9x2a1b7-tecof.vercel.app",
"liveUrl": null,
"stats": { "files": 312, "uploaded": 3, "reused": 0, "deleted": 1, "unchanged": 309, "bytes": 18234 }
},
"activation": { "outcome": "staged", "liveVersion": 11, "rolledBack": false, "diagnostics": [] },
"push": { "files": 312, "uploaded": 3, "deleted": 1, "unchanged": 309, "bytes": 18234 },
"next": { "action": "promote", "command": "tecof theme promote v12" },
"diagnostics": []
}Hata makbuzu (tecof theme promote v12 --yes --json, stderr):
{
"ok": false,
"command": "theme promote",
"space": "thm_66f1a2b3c4d5e6f7a8b9c0d1",
"error": {
"code": "base-moved",
"message": "main ilerledi (şu an 9f8e7d6); bu push eski tabana dayanıyor (base-moved).",
"data": { "mainSha": "9f8e7d6…" }
},
"next": { "action": "pull", "command": "tecof theme pull" },
"diagnostics": []
}| Alan | Açıklama |
|---|---|
ok | true başarı, false hata |
command | Çalışan komut (ör. theme push) |
space | İlgili alan kimliği ya da null |
version | Sürüm nesnesi (push, versions vN, promote, rollback); bazı sonuçlarda yalnız { ref } |
live | Canlı sürüm: { ref, number, url } (promote, rollback, spaces get, open) |
activation | Sürümün canlıya göre konumu (değerler) |
error | Yalnız hata makbuzunda: { code, message, status?, data? }. API hatalarında code sunucunun hata kodu, status HTTP durumudur |
next | Sonraki adım: { action, command? } |
diagnostics | Uyarılar ve bulgular: { level, message, code?, path?, line?, kind? } |
Komuta göre ek alanlar gelir: push (yükleme özeti), noop, versions, spaces, detail, tokens, token, url, protected, opened, lines, checks (doctor) vb. whoami ve eski uygulama komutları (app init, link, info, config push, dev, deploy, deployments, secret rotate, open) başarıda daha basit bir JSON basar; hata makbuzları her komutta aynı biçimdedir.
next.action Değerleri#
| Değer | Ne yapılır |
|---|---|
done | İş bitti |
poll | İş sürüyor; next.command ile durumu yoklayın (ör. tecof theme versions v12) |
promote | Sürüm hazır ve staged; next.command canlıya alır |
pull | main ilerledi ya da yerel taban yok; tecof theme pull ile güncelleyin, yeniden push edin |
confirm | Onay gerekiyor; kullanıcı onaylarsa next.command komutunu çalıştırın (ör. … --yes, tecof theme pull --force) |
retry | Geçici durum (space-busy, ağ hatası, 429, 5xx); biraz sonra next.command |
login | Oturum yok ya da geçersiz; tecof login |
fix | Girdi ya da dosya sorunu (gizli anahtar, yasak yol, derleme hatası, geçersiz argüman); düzeltip yeniden deneyin |
Sır Maskeleme#
tecof theme open vN bağlantısındaki erişim sırrı ve tecof tokens create ile basılan token, makbuzda --show-secret olmadan maskelenir (x-vercel-protection-bypass=***, tcfd_***). Kayıtlı token'lar ve istemci sırları hiçbir çıktıda basılmaz.
Yok Sayma Kuralları#
CLI şu yolları hiçbir zaman göndermez. Kurallar gitignore anlamındadır: eğik çizgi içermeyen desen her derinlikte eşleşir, sondaki / yalnız klasör demektir.
.git/ .github/ node_modules/ .next/ .vercel/ .turbo/ out/ coverage/ .tecof/
.DS_Store *.log .env* (yalnız .env.example gönderilir) .npmrc
*.pem *.key *.p12 *.pfx id_rsa* id_ed25519*- Ardından projenin
.gitignoreve.tecofignoredosyaları uygulanır; alt klasörlerdekiler de okunur. Aynı klasörde.tecofignore,.gitignore'dan sonra okunur ve!desenile.gitignore'un dışladığı bir yolu yeniden dahil edebilir. Dışlanan bir klasörün içindeki dosya yeniden dahil edilemez (git kuralı). - Yukarıdaki sabit liste proje dosyalarıyla yeniden dahil edilemez.
- Sembolik bağlantılar izlenmez; uyarıyla atlanır.
.tecofignorenormal bir dosyadır ve depoya gönderilir.
Silme kuralı: Push, yerelde olmayan dosyaları depodan siler; ancak sunucu şunları asla silmez: .github/ altındaki her şey, yukarıdaki sabit liste ve depodaki kök .gitignore / .tecofignore desenlerine uyan yollar (push'unuz bu dosyaları değiştiriyorsa yeni desenler de). Sunucu alt klasördeki ignore dosyalarını okumaz: depoda bulunan bir dosyayı yalnız alt klasördeki bir .gitignore ile dışlarsanız CLI onu göndermez ve sunucu onu silinmiş sayar. Depoda kalması gereken ama göndermek istemediğiniz yolları kökteki .tecofignore dosyasına yazın.
# .tecofignore (proje kökü)
# Depoda kalsın, CLI göndermesin
design/
*.psd
# .gitignore "*.woff2" diyorsa bu dosya yine de gönderilsin
!public/fonts/marka.woff2Push planı her zaman kaç dosyanın yükleneceğini ve silineceğini gösterir: Plan: 3 yüklenecek, 1 silinecek, 309 aynı.
Sınırlar#
| Kural | Sınır | Aşılınca |
|---|---|---|
| Push başına dosya sayısı | 10.000 | 413 manifest-too-large |
| Dosya boyutu | 10 MB | 413 file-too-large |
| Push başına yüklenen toplam | 100 MB | 413 push-too-large |
| Yol | 300 karakter; ters bölü, denetim karakteri, . / .. bileşeni, mutlak yol yok; büyük/küçük harf çakışması yok | 400 path-forbidden |
| Push planı | Kullanıcı başına saatte 60 | 429 push-rate-limited |
| Push planının ömrü | 1 saat (CLI aynı push'u yeniden çalıştırınca kaldığı yerden sürer) | 410 push-plan-expired |
| Alan başına eşzamanlı commit, canlıya alma, geri alma | 1 (kilit en çok 2 dakika) | 409 space-busy (data.retryAfterSec) |
Kaynak arşivi (pull) | 100 MB | 413 source-too-large |
| Bulut geliştirme yazımı | İstek başına 100 dosya; yalnız metin dosyaları | 400 too-many-files, 400 binary-not-supported |
| Canlıya alma ve geri alma | IP başına 10 dakikada 60 | 429 rate-limited |
| Bulut oturumu açma | IP başına 10 dakikada 30 | 429 rate-limited |
| Kaynak indirme | IP başına 10 dakikada 60 | 429 rate-limited |
| Kapsamlı token | Kullanıcı başına 50 etkin token; saatte 20 basım; token başına en çok 50 alan | 409 token-limit-reached, 429 rate-limited, 400 invalid-spaces |
İstek gövdesi sınırları (API'yi doğrudan kullananlar için): plan 4 MB, yükleme 14 MB (istek başına en çok 200 dosya), commit 1 MB, bulut geliştirme dosyaları 8 MB, canlıya alma, geri alma, oturum ve token istekleri 64 KB. Sınırı aşan istek 413 payload-too-large döner.
CLI bu sınırları kendisi gözetir: yüklemeleri istek başına en çok 200 dosya ve ≈ 10 MB'lık gruplara böler (10 MB'lık bir dosya tek başına gönderilir), sınırı aşacak bir push'u hiçbir dosya yüklenmeden durdurur. Bulut geliştirmede bir dosya en çok 5 MB olabilir (gövde sınırı 8 MB).