tillerhand 3.37.1 → 3.38.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/.claude/commands/build.md +3 -3
- package/.claude/hooks/progress.mjs +23 -1
- package/README.en.md +1 -1
- package/README.md +1 -1
- package/docs/workflow/usage-limits.md +1 -1
- package/kit/CHANGELOG.md +5 -0
- package/kit/VERSION +1 -1
- package/kit/guide.html +2 -2
- package/package.json +1 -1
|
@@ -6,7 +6,7 @@ argument-hint: [görev kodu, boşsa sıradaki görev]
|
|
|
6
6
|
Görev: $ARGUMENTS
|
|
7
7
|
Boşsa `docs/workflow/progress.md` → "Sıradaki adım" veya `docs/product/roadmap.md`'deki ilk işaretsiz görevi al.
|
|
8
8
|
|
|
9
|
-
0. **Limit ve bağlam:** Limiti oku
|
|
9
|
+
0. **Limit ve bağlam:** Limiti oku ve başlangıcı kaydet: `node .claude/hooks/progress.mjs --start` (masaüstünde durum çubuğu yok: `--limit <5 saatlik %>`, `get_usage`'dan). Bağlam %50'yi geçmişse önce `/wrap-up` + `/clear` öner. Seviye sarı/kırmızıysa veya tahmin kalan payı aşıyorsa bunu tek satırla söyle ve başla (`docs/workflow/usage-limits.md` §3; soru sorma). `docs/workflow/progress.md` → "Kaldığı yer" doluysa oradan devam et.
|
|
10
10
|
0b. **Model ve effort** (`docs/workflow/models.md`): Son seçimi `node .claude/hooks/models.mjs --show` ile oku. İki AskUserQuestion çağrısı yap: önce dört soru, her rolün modeli (Opus / Sonnet / Haiku); sonra dört soru, her rolün effort'u (düşük / orta / yüksek / ekstra yüksek). Her soruda models.md'deki önerilen seçenek ilk sırada ve "(Önerilen)" etiketli; son seçim farklıysa o seçeneğin açıklamasına "son seçim" yaz. Cevabı `node .claude/hooks/models.mjs --set plan=<model>:<effort> code=… review=… docs=…` ile kaydet. Ana oturumun modeli veya effort'u plan rolünden farklıysa tek satırla `/model <ad>` ve `/effort <düzey>` öner. Soru modunda `maliyet` konusu kapalıysa sorma ve `--set` çalıştırma: son seçim geçerli kalır, durum bloğunda "otomatik" yaz.
|
|
11
11
|
1. Görevi ve kabul kriterlerini bana tek cümleyle tekrar et. `docs/workflow/progress.md` → aktif görevi güncelle.
|
|
12
12
|
2. Bu görev için onaylanmış bir plan yoksa ve 2'den fazla dosyaya dokunacaksa önce `/plan-task` adımlarını uygula (karar noktaları dahil), onay bekle.
|
|
@@ -35,8 +35,8 @@ Boşsa `docs/workflow/progress.md` → "Sıradaki adım" veya `docs/product/road
|
|
|
35
35
|
6b. **Görev sonu kurul toplantısı** (`.claude/board/rules.md`; kurul kurulduysa). Bu, değişikliğin tek tam denetimidir: değişikliğe ilgili, akışın (2a) söylediği sayıda üye (en fazla 3) + `code-reviewer` (değişiklik auth, ödeme, kişisel veri gibi hassas bir yola dokunuyorsa `security-auditor` da), inceleme rolünün `model` ve `effort`'uyla. RET varsa görev bitmez; bulguyu ve seçenekleri sor. ONAY veya KOŞULLU ONAY ise ve kapı (adım 4) yeşilse `node .claude/hooks/commit-gate.mjs --approve "görev sonu: <katılanlar>"`: commit aynı değişiklikler için kurulu yeniden toplamaz, sonradan değişen dosyalar varsa yalnız onlar incelenir. Toplantıyı `docs/workflow/board.md` günlüğüne yaz. Kurul kurulmadıysa adım 9'da `/review-changes` öner.
|
|
36
36
|
7. `AGENTS.md` → "Bitti tanımı" listesini tek tek kontrol et.
|
|
37
37
|
8. Kapsam kalkanını kapat (komut kullanıcıya sorulur): `node .claude/hooks/freeze-guard.mjs --plan-end`. PRD'de sadece testi yeşil olan kriterleri işaretle. Testleri JUnit raporuyla çalıştır (`docs/architecture/stack.md` → Kabul testleri) ki pano güncellensin. Limiti tekrar oku. Roadmap, maliyet günlüğü ve progress yazımı mekaniktir, model çağrısı harcama; tek komutla yaz:
|
|
38
|
-
`node .claude/hooks/progress.mjs --done <görev kodu> --cost "<görev kodu> <kısa ad>" <K|O|B>
|
|
39
|
-
`--check` progress.md'nin kalın etiketli satırlarını (durum çubuğu ve pano okur) denetler; bozuksa düzelt. Açık sorunlar ve bekleyen kararlar gibi düz metin bölümlerini gerekirse elle yaz.
|
|
38
|
+
`node .claude/hooks/progress.mjs --done <görev kodu> --cost "<görev kodu> <kısa ad>" <K|O|B> --task "-" --did "<görev kodu>: <tek satır ne yapıldı>" --next "<sıradaki görev>" --check`
|
|
39
|
+
`--cost` başlangıcı adım 0'dan alır, bitişi ve süreyi kendisi hesaplar (masaüstünde `--limit <%>` ekle). `--check` progress.md'nin kalın etiketli satırlarını (durum çubuğu ve pano okur) denetler; bozuksa düzelt. Açık sorunlar ve bekleyen kararlar gibi düz metin bölümlerini gerekirse elle yaz.
|
|
40
40
|
9. Rapor ver:
|
|
41
41
|
- Ne yapıldı (2-3 satır)
|
|
42
42
|
- Bu görevde alınan kararlar (kullanıcı / otomatik)
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
// Mechanical doc writes at task end, by script instead of a model call (0 tokens, the format cannot drift).
|
|
3
3
|
// node .claude/hooks/progress.mjs --done G-012 roadmap: [ ] → [x]
|
|
4
4
|
// node .claude/hooks/progress.mjs --cost "<iş>" <K|O|B|BOARD|DESIGN|FINDINGS> <başlangıç %> <bitiş %> <dk> ["<not>"]
|
|
5
|
+
// node .claude/hooks/progress.mjs --start [--limit N] at task start: keeps the 5-hour % and the time
|
|
6
|
+
// node .claude/hooks/progress.mjs --cost "<iş>" <boyut> ["<not>"] [--limit N] start from --start, end now (once)
|
|
5
7
|
// node .claude/hooks/progress.mjs --task "<aktif görev>" --did "<yapılan>" --next "<sıradaki adım>"
|
|
6
8
|
// node .claude/hooks/progress.mjs --check progress.md labels the status line and dashboard read
|
|
7
9
|
// Every progress write also sets **Son güncelleme:** to today. Flags can be combined in one call.
|
|
@@ -9,10 +11,11 @@ import fs from 'node:fs';
|
|
|
9
11
|
import path from 'node:path';
|
|
10
12
|
import { findRoot, isMain } from './shared.mjs';
|
|
11
13
|
import { clean, labels } from './status-read.mjs';
|
|
14
|
+
import { readLimits } from './usage.mjs';
|
|
12
15
|
|
|
13
16
|
const LABELS = ['Son güncelleme', 'Aktif faz', 'Aktif görev', 'Başlangıç adımı', 'Soru modu', 'Profil'];
|
|
14
17
|
const SIZES = ['K', 'O', 'B', 'BOARD', 'DESIGN', 'FINDINGS'];
|
|
15
|
-
const USAGE = 'Kullanım: node .claude/hooks/progress.mjs [--done G-NNN] [--cost "<iş>" <K|O|B|BOARD|DESIGN|FINDINGS> <başlangıç %> <bitiş %> <dk> ["<not>"]] [--task "<metin>"] [--did "<metin>"] [--next "<metin>"] [--check]';
|
|
18
|
+
const USAGE = 'Kullanım: node .claude/hooks/progress.mjs [--done G-NNN] [--start] [--cost "<iş>" <K|O|B|BOARD|DESIGN|FINDINGS> [<başlangıç %> <bitiş %> <dk>] ["<not>"]] [--limit N] [--task "<metin>"] [--did "<metin>"] [--next "<metin>"] [--check]';
|
|
16
19
|
// One line per value: a newline would break a label, a list item or a table row
|
|
17
20
|
const line = (s) => clean(String(s).replace(/\s*\r?\n\s*/g, ' ')).trim();
|
|
18
21
|
const today = () => new Date().toLocaleDateString('sv-SE');
|
|
@@ -69,13 +72,32 @@ if (isMain(import.meta.url)) {
|
|
|
69
72
|
console.log(r.note);
|
|
70
73
|
}
|
|
71
74
|
|
|
75
|
+
// 5-hour %: --limit (desktop app: from get_usage) or the status line's .claude/state/usage.json
|
|
76
|
+
const limit = () => { const v = value('--limit'); const n = v != null ? Number(v) : readLimits(root)?.five_hour?.percent; return Number.isFinite(n) ? n : null; };
|
|
77
|
+
const startFile = file('.claude/state/task-start.json');
|
|
78
|
+
if (argv.includes('--start')) {
|
|
79
|
+
const percent = limit() ?? fail('Limit okunamadı: --limit <5 saatlik %> ver (masaüstünde get_usage).');
|
|
80
|
+
fs.mkdirSync(path.dirname(startFile), { recursive: true });
|
|
81
|
+
fs.writeFileSync(startFile, JSON.stringify({ percent, at: Date.now() }));
|
|
82
|
+
console.log(`Görev başlangıcı kaydedildi: 5s %${percent}.`);
|
|
83
|
+
}
|
|
84
|
+
|
|
72
85
|
const c = argv.indexOf('--cost');
|
|
73
86
|
if (c > -1) {
|
|
74
87
|
const args = [];
|
|
75
88
|
for (let i = c + 1; i < argv.length && !argv[i].startsWith('--'); i++) args.push(argv[i]);
|
|
89
|
+
const auto = args.length <= 3;
|
|
90
|
+
if (auto) {
|
|
91
|
+
// Only job and size (and a note): the start comes from --start, used once so an old start never leaks into the next task
|
|
92
|
+
let start;
|
|
93
|
+
try { start = JSON.parse(fs.readFileSync(startFile, 'utf8')); } catch { fail('Görev başlangıcı yok: görev başında progress.mjs --start çalıştır ya da yüzdeleri ver.'); }
|
|
94
|
+
const end = limit() ?? fail('Limit okunamadı: --limit <5 saatlik %> ver (masaüstünde get_usage).');
|
|
95
|
+
args.splice(2, 0, String(start.percent), String(end), String(Math.round((Date.now() - start.at) / 60000)));
|
|
96
|
+
}
|
|
76
97
|
const row = costRow(args) ?? fail(USAGE);
|
|
77
98
|
const log = file('docs/workflow/cost-log.md');
|
|
78
99
|
fs.writeFileSync(log, `${fs.readFileSync(log, 'utf8').trimEnd()}\n${row}\n`);
|
|
100
|
+
if (auto) fs.rmSync(startFile, { force: true });
|
|
79
101
|
console.log(`Maliyet satırı eklendi: ${row}`);
|
|
80
102
|
}
|
|
81
103
|
|
package/README.en.md
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
</p>
|
|
7
7
|
|
|
8
8
|
<p align="center">
|
|
9
|
-
<a href="kit/CHANGELOG.md"><img alt="Version" src="https://img.shields.io/badge/version-3.
|
|
9
|
+
<a href="kit/CHANGELOG.md"><img alt="Version" src="https://img.shields.io/badge/version-3.38.0-2a78d6?style=flat-square"></a>
|
|
10
10
|
<a href="LICENSE"><img alt="License: MIT" src="https://img.shields.io/badge/license-MIT-2a78d6?style=flat-square"></a>
|
|
11
11
|
<img alt="Claude Code" src="https://img.shields.io/badge/Claude%20Code-ready-d97757?style=flat-square">
|
|
12
12
|
<img alt="Also Codex and Antigravity" src="https://img.shields.io/badge/also-Codex%20%C2%B7%20Antigravity-5b6577?style=flat-square">
|
package/README.md
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
</p>
|
|
7
7
|
|
|
8
8
|
<p align="center">
|
|
9
|
-
<a href="kit/CHANGELOG.md"><img alt="Sürüm" src="https://img.shields.io/badge/s%C3%BCr%C3%BCm-3.
|
|
9
|
+
<a href="kit/CHANGELOG.md"><img alt="Sürüm" src="https://img.shields.io/badge/s%C3%BCr%C3%BCm-3.38.0-2a78d6?style=flat-square"></a>
|
|
10
10
|
<a href="LICENSE"><img alt="Lisans: MIT" src="https://img.shields.io/badge/lisans-MIT-2a78d6?style=flat-square"></a>
|
|
11
11
|
<img alt="Claude Code" src="https://img.shields.io/badge/Claude%20Code-haz%C4%B1r-d97757?style=flat-square">
|
|
12
12
|
<img alt="Codex ve Antigravity" src="https://img.shields.io/badge/ayr%C4%B1ca-Codex%20%C2%B7%20Antigravity-5b6577?style=flat-square">
|
|
@@ -76,4 +76,4 @@ Max planda yüzdeler daha düşüktür. Günlük doldukça tahmin kendini düzel
|
|
|
76
76
|
|
|
77
77
|
## 5. Maliyet günlüğü (tahmini kalibre etmek için)
|
|
78
78
|
|
|
79
|
-
`/build` ve tam kurul toplantıları başlangıçta ve sonda 5 saatlik yüzdeyi okur ve `docs/workflow/cost-log.md`'ye bir satır ekler: `node .claude/hooks/progress.mjs --cost "<iş>" <boyut
|
|
79
|
+
`/build` ve tam kurul toplantıları başlangıçta ve sonda 5 saatlik yüzdeyi okur ve `docs/workflow/cost-log.md`'ye bir satır ekler: başta `node .claude/hooks/progress.mjs --start`, sonda `--cost "<iş>" <boyut>` (yüzdeler, fark ve süre hesaplanır; pencere arada yenilendiyse fark `?`; masaüstünde iki çağrıya da `--limit <%>`). Yüzdeler elle de verilebilir: `--cost "<iş>" <boyut> <başlangıç %> <bitiş %> <dk>`. Limit okunamıyorsa satır eklenmez.
|
package/kit/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,11 @@
|
|
|
3
3
|
Kit sürümü `kit/VERSION` dosyasında. Bir projeyi güncellemek: projede `/kit-update`.
|
|
4
4
|
"Elle uyarla" notu olan maddeler projeye ait dosyalardadır; güncelleme bunlara dokunmaz.
|
|
5
5
|
|
|
6
|
+
## [3.38.0] - 2026-10-26
|
|
7
|
+
|
|
8
|
+
### Değişen
|
|
9
|
+
- **Maliyet günlüğü satırı kendiliğinden doluyor.** `/build` görev başında `progress.mjs --start` ile 5 saatlik yüzdeyi ve saati kaydeder. Görev sonunda `--cost "<iş>" <boyut>` başlangıcı, bitişi, farkı ve süreyi kendisi yazar. Başlangıç bir kez kullanılır, sonraki göreve karışmaz. Masaüstü uygulamasında durum çubuğu olmadığı için yüzde `--limit` ile verilir.
|
|
10
|
+
|
|
6
11
|
## [3.37.1] - 2026-10-26
|
|
7
12
|
|
|
8
13
|
### Değişen
|
package/kit/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
3.
|
|
1
|
+
3.38.0
|
package/kit/guide.html
CHANGED
|
@@ -287,7 +287,7 @@ footer .container { display: flex; flex-wrap: wrap; gap: 16px; justify-content:
|
|
|
287
287
|
<section class="hero">
|
|
288
288
|
<div class="container">
|
|
289
289
|
<div>
|
|
290
|
-
<span class="pill"><b>v3.
|
|
290
|
+
<span class="pill"><b>v3.38.0</b> Claude Code için başlangıç kiti · MIT</span>
|
|
291
291
|
<h1>Kodu AI yazar.<br><em>Dümen sende.</em></h1>
|
|
292
292
|
<p class="sub">TillerHand, Claude Code ile bir ürünü fikirden canlıya ve bakıma kadar götürür. Her önemli kararda AI sana seçenekleri, önerisini ve her seçeneğin bedelini sunar. Bir uzman kurulu işi denetler, korumalar hatayı daha olmadan durdurur.</p>
|
|
293
293
|
<div class="install"><span id="cmd">npx tillerhand init</span><button class="copy" type="button" data-copy="cmd">Kopyala</button></div>
|
|
@@ -1055,7 +1055,7 @@ Sıradaki: G-013 şifre sıfırlama · bekleyen karar: e-posta servisi</pre>
|
|
|
1055
1055
|
<footer>
|
|
1056
1056
|
<div class="container">
|
|
1057
1057
|
<a class="brand" href="#top" style="font-size:16px"><svg class="mark" style="width:22px;height:22px"><use href="#mark"/></svg>TillerHand</a>
|
|
1058
|
-
<span>Sürüm 3.
|
|
1058
|
+
<span>Sürüm 3.38.0 · <a href="https://github.com/burakdogrul/TillerHand">GitHub</a> · <a href="https://github.com/burakdogrul/TillerHand/blob/main/LICENSE">MIT lisansı</a> · KVKK bölümü kontrol listesidir, hukuki görüş değildir.</span>
|
|
1059
1059
|
</div>
|
|
1060
1060
|
</footer>
|
|
1061
1061
|
|
package/package.json
CHANGED