İçeriğe geç
Docs

CLI Başvurusu

Tüm tecof komutları ve seçenekleri (@tecof/cli 0.2.0), ortam değişkenleri, çıkış kodları, JSON makbuzları ve next.action, yok sayma kuralları ve sınırlar.

Son güncelleme:

@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.

Terminal
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çenekleri

Mesajlar 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çenekAçıklama
--api <url>Tecof API adresi. Öncelik: --api, sonra TECOF_API_URL, sonra kayıtlı yapılandırma, sonra https://api.tecof.com
--jsonMakine makbuzu: başarıda stdout'a, hatada stderr'e tek JSON belgesi (JSON makbuzları)
-y, --yesYıkıcı işlemleri onaylar: promote, rollback, push --prod, tokens revoke
--show-secretMakbuzda sırları maskelemez (önizleme bağlantısı, yeni token)
-h, --helpYardım
-v, --versionCLI 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#

KomutAçı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 logoutToken'ı sunucuda iptal eder ve yerelden siler. TECOF_TOKEN ile verilen token iptal edilmez; CLI uyarır
tecof whoamiKullanıcı, partner (varsa), rol, programlar ve API adresi
tecof statusKimlik, 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 doctorOrtam denetimi; zorunlu bir denetim başarısızsa çıkış 1

tecof doctor denetimleri:

DenetimZorunluNe bakar
nodeEvetNode.js 20 ya da üstü
apiEvetAPI adresine erişim
tokenEvetToken var ve sunucu kabul ediyor
credentialsHayırKullanılan kimlik deposu
linkHayırKlasör bir alana bağlı mı
gitHayırgit kurulu mu
package-managerHayırKilit dosyasına göre paket yöneticisi
cloudflaredHayırYalnız tecof app dev tüneli için

Alanlar#

KomutAçı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.

KomutAçıklama
tecof theme lsTema 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 vNSürümün derleme günlüğü
tecof theme promote vNSü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çenekAçıklama
-p, --port <port>Yerel sunucu portu (varsayılan PORT ya da 3000)
--cloudBulut 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çenekAçıklama
-m, --message <mesaj>Sürüm mesajı. Varsayılan: son git commit başlığı, yoksa tecof theme push
--prodDoğrudan canlıya: commit main dalına hızlı ileri yazılır, derleme bitince canlıya çıkar. Yıkıcı, onay ister
--no-waitDerlemeyi 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
--forceYerel 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ı:

KomutAçı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 vNSü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ı:

KomutAçı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 infoUygulama bilgisi
tecof app config pushtecof.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 deploymentsapp 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#

KomutAçıklama
tecof tokens lsCihaz 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#

KomutAçı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şkenEtki
TECOF_TOKENToken (CI için). Kayıtlı girişin yerine kullanılır; değeri hiçbir çıktıda basılmaz
TECOF_API_URLAPI adresi (--api daha önceliklidir)
TECOF_PANEL_URLPanel adresi (kurulum ve portal bağlantıları); verilmezse girişteki onay adresinden alınır
TECOF_AGENT=1Ajan modu: soru sorulmaz, tarayıcı açılmaz. stdin bir terminal değilse ajan modu kendiliğinden açıktır
TECOF_AGENT_ALLOW_DESTRUCTIVE=1Yıkıcı işlemlere --yes olmadan izin verir. Kodlama ajanlarının ortamında tanımlamayın
TECOF_CREDENTIAL_STOREkeyring (işletim sistemi anahtarlığını zorunlu kılar; yoksa hata) ya da plaintext (dosya)
TECOF_PROFILEKimlik deposunda hesap öneki (varsayılan default); aynı makinede birden çok hesap için
TECOF_CONFIG_DIRYapı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_LANGen İngilizce, tr Türkçe çıktı
TECOF_NO_BROWSER=1Tarayıcı açmaz (BROWSER=none da aynı etkiyi verir)
TECOF_DEBUG=1Beklenmeyen hatalarda yığın izini basar; --json modunda ilerleme satırlarını stderr'e yazar
TECOF_DEPLOY_POLL_MSSürüm yoklama aralığı (varsayılan 3000 ms) ve bulut oturumu açılış yoklaması (varsayılan 2000 ms)
TECOF_DEV_DEBOUNCE_MSBulut geliştirmede değişiklik toplama süresi (varsayılan 300 ms)
TECOF_DEV_HEARTBEAT_MSBulut oturumu canlılık bildirimi aralığı (varsayılan 60000 ms)
CITanımlıysa soru sorulmaz ve kimlik varsayılan olarak dosyada tutulur
PORTtheme dev ve app dev için varsayılan port
NO_COLORRenkli çıktıyı kapatır

Çıkış Kodları#

KodAnlamıÖrnekler
0BaşarıPush tamamlandı, değişiklik yok (noop), sürüm canlıda
1HataDerleme hatası, bekleme süresi doldu, gizli anahtar bulundu, yasak yol, ağ hatası, oturum geçersiz (401), doctor zorunlu denetimi
2Kullanım hatasıBilinmeyen komut ya da seçenek, geçersiz değer, ajan modunda eksik zorunlu seçenek (ör. --space)
3Onay gerekliAjan ya da etkileşimsiz modda --yes olmadan yıkıcı işlem; API'ye hiç istek gitmez
4Çakışmabase-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):

JSON
{
  "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):

JSON
{
  "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": []
}
AlanAçıklama
oktrue başarı, false hata
commandÇalışan komut (ör. theme push)
spaceİlgili alan kimliği ya da null
versionSürüm nesnesi (push, versions vN, promote, rollback); bazı sonuçlarda yalnız { ref }
liveCanlı sürüm: { ref, number, url } (promote, rollback, spaces get, open)
activationSürümün canlıya göre konumu (değerler)
errorYalnız hata makbuzunda: { code, message, status?, data? }. API hatalarında code sunucunun hata kodu, status HTTP durumudur
nextSonraki adım: { action, command? }
diagnosticsUyarı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ğerNe yapılır
doneİş bitti
pollİş sürüyor; next.command ile durumu yoklayın (ör. tecof theme versions v12)
promoteSürüm hazır ve staged; next.command canlıya alır
pullmain ilerledi ya da yerel taban yok; tecof theme pull ile güncelleyin, yeniden push edin
confirmOnay gerekiyor; kullanıcı onaylarsa next.command komutunu çalıştırın (ör. … --yes, tecof theme pull --force)
retryGeçici durum (space-busy, ağ hatası, 429, 5xx); biraz sonra next.command
loginOturum yok ya da geçersiz; tecof login
fixGirdi 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.

Metin
.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 .gitignore ve .tecofignore dosyaları uygulanır; alt klasörlerdekiler de okunur. Aynı klasörde .tecofignore, .gitignore'dan sonra okunur ve !desen ile .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.
  • .tecofignore normal 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.

Metin
# .tecofignore (proje kökü)
# Depoda kalsın, CLI göndermesin
design/
*.psd
# .gitignore "*.woff2" diyorsa bu dosya yine de gönderilsin
!public/fonts/marka.woff2

Push 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#

KuralSınırAşılınca
Push başına dosya sayısı10.000413 manifest-too-large
Dosya boyutu10 MB413 file-too-large
Push başına yüklenen toplam100 MB413 push-too-large
Yol300 karakter; ters bölü, denetim karakteri, . / .. bileşeni, mutlak yol yok; büyük/küçük harf çakışması yok400 path-forbidden
Push planıKullanıcı başına saatte 60429 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 alma1 (kilit en çok 2 dakika)409 space-busy (data.retryAfterSec)
Kaynak arşivi (pull)100 MB413 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 almaIP başına 10 dakikada 60429 rate-limited
Bulut oturumu açmaIP başına 10 dakikada 30429 rate-limited
Kaynak indirmeIP başına 10 dakikada 60429 rate-limited
Kapsamlı tokenKullanıcı başına 50 etkin token; saatte 20 basım; token başına en çok 50 alan409 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).