@seanyao/roll 2.603.1 → 2.604.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.
Files changed (31) hide show
  1. package/CHANGELOG.md +40 -11
  2. package/bin/roll +84 -757
  3. package/lib/changelog_audit.py +149 -0
  4. package/lib/changelog_generate.py +41 -23
  5. package/lib/consistency_check.py +409 -0
  6. package/lib/i18n/consistency.sh +8 -0
  7. package/lib/prices/snapshot-2026-05-22.json +1 -7
  8. package/lib/prices/snapshot-2026-05-23-deepseek.json +0 -2
  9. package/lib/prices/snapshot-2026-06-02-kimi.json +0 -1
  10. package/lib/prices_fetcher.py +1 -20
  11. package/lib/roll-loop-status.py +1 -1
  12. package/package.json +1 -1
  13. package/lib/__pycache__/changelog_generate.cpython-314.pyc +0 -0
  14. package/lib/__pycache__/github_sync.cpython-314.pyc +0 -0
  15. package/lib/__pycache__/loop-fmt.cpython-314.pyc +0 -0
  16. package/lib/__pycache__/loop_result_eval.cpython-314.pyc +0 -0
  17. package/lib/__pycache__/loop_unstick.cpython-314.pyc +0 -0
  18. package/lib/__pycache__/model_prices.cpython-314.pyc +0 -0
  19. package/lib/__pycache__/prices_fetcher.cpython-314.pyc +0 -0
  20. package/lib/__pycache__/roll-home.cpython-314.pyc +0 -0
  21. package/lib/__pycache__/roll-loop-status.cpython-314.pyc +0 -0
  22. package/lib/__pycache__/roll_git.cpython-314.pyc +0 -0
  23. package/lib/__pycache__/roll_render.cpython-314.pyc +0 -0
  24. package/lib/__pycache__/slides-render.cpython-314.pyc +0 -0
  25. package/lib/agent_usage/__pycache__/__init__.cpython-314.pyc +0 -0
  26. package/lib/agent_usage/__pycache__/gemini.cpython-314.pyc +0 -0
  27. package/lib/agent_usage/__pycache__/kimi.cpython-314.pyc +0 -0
  28. package/lib/agent_usage/__pycache__/openai.cpython-314.pyc +0 -0
  29. package/lib/agent_usage/__pycache__/pi.cpython-314.pyc +0 -0
  30. package/lib/agent_usage/__pycache__/pi_emit.cpython-314.pyc +0 -0
  31. package/lib/agent_usage/__pycache__/qwen.cpython-314.pyc +0 -0
@@ -7,7 +7,6 @@
7
7
  "default_model": "kimi-k2.6",
8
8
  "notes": "Rates per million tokens (CNY), verified 2026-06-02 against the official Kimi platform pricing pages (pricing/chat-k25 + pricing/chat-k26). Corrects the 2026-05-23 snapshot, which had copied the original-K2 rate (1/4) onto EVERY kimi model — real K2.5 is 4/21, K2.6 is 6.5/27, so the current models' cost was under-reported ~5-7x on output. Field convention: `in` = standard (cache-miss) input price; `cache_read` = cache-hit input price; `cache_create` = cache-miss input rate (Kimi documents no separate cache-write surcharge, mirroring DeepSeek). kimi-for-coding is the kimi-code CLI's model id; the CLI config pins it to K2.6 (display_name Kimi-k2.6, default_thinking=true, base_url api.kimi.com/coding/v1), so it is priced at K2.6 rates. NOTE: kimi-code is a coding *subscription*; these per-token rates are the published K2.6 API rates used as a usage-cost estimate, not the flat subscription fee. kimi-k2 is the prior-gen original K2, retained at its launch rate (1/4) for currency resolution of legacy name variants; it is no longer on the public pricing page and is not actually billed — only kimi-for-coding (K2.6) is.",
9
9
  "prices": {
10
- "kimi-k2": {"in": 1.00, "out": 4.00, "cache_create": 1.00, "cache_read": 0.25},
11
10
  "kimi-k2.5": {"in": 4.00, "out": 21.00, "cache_create": 4.00, "cache_read": 0.70},
12
11
  "kimi-k2.6": {"in": 6.50, "out": 27.00, "cache_create": 6.50, "cache_read": 1.10},
13
12
  "kimi-for-coding": {"in": 6.50, "out": 27.00, "cache_create": 6.50, "cache_read": 1.10}
@@ -162,12 +162,6 @@ def _parse_deepseek_html(html: str) -> Dict[str, Dict[str, float]]:
162
162
  if not prices:
163
163
  raise ParseError('no price rows found in HTML; page layout may have changed')
164
164
 
165
- # Aliases: deepseek-chat and deepseek-reasoner both map to v4-flash.
166
- if 'deepseek-v4-flash' in prices:
167
- flash = prices['deepseek-v4-flash']
168
- prices['deepseek-chat'] = dict(flash)
169
- prices['deepseek-reasoner'] = dict(flash)
170
-
171
165
  return prices
172
166
 
173
167
 
@@ -212,13 +206,6 @@ def _parse_kimi_html(html: str) -> Dict[str, Dict[str, float]]:
212
206
  if prices:
213
207
  if "kimi-k2.6" in prices:
214
208
  prices["kimi-for-coding"] = dict(prices["kimi-k2.6"])
215
- if "kimi-k2" not in prices:
216
- prices["kimi-k2"] = {
217
- "in": 1.00,
218
- "out": 4.00,
219
- "cache_create": 1.00,
220
- "cache_read": 0.25,
221
- }
222
209
  return prices
223
210
 
224
211
  sub_urls = [
@@ -238,13 +225,7 @@ def _parse_kimi_html(html: str) -> Dict[str, Dict[str, float]]:
238
225
 
239
226
  if "kimi-k2.6" in prices:
240
227
  prices["kimi-for-coding"] = dict(prices["kimi-k2.6"])
241
- if "kimi-k2" not in prices:
242
- prices["kimi-k2"] = {
243
- "in": 1.00,
244
- "out": 4.00,
245
- "cache_create": 1.00,
246
- "cache_read": 0.25,
247
- }
228
+
248
229
  return prices
249
230
 
250
231
 
@@ -737,7 +737,7 @@ def merge_runs_into_cycles(cycles: List[Dict[str, Any]], runs: Dict[str, Dict[st
737
737
  # Outcome: runs.jsonl wins when events stream was vacuous or
738
738
  # misleading (idle/failed emitted by _loop_event even though the
739
739
  # agent completed work and _runs_append recorded built).
740
- if cy.get("outcome") in ("unknown", "running", "idle", "failed") and r.get("status"):
740
+ if cy.get("outcome") in ("unknown", "running", "idle", "failed", "orphan") and r.get("status"):
741
741
  cy["outcome"] = {"built": "done", "interrupted": "fail"}.get(r["status"], r["status"])
742
742
  if not cy.get("story") and r["built"]:
743
743
  cy["story"] = r["built"][0]
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seanyao/roll",
3
- "version": "2.603.1",
3
+ "version": "2.604.1",
4
4
  "description": "Roll — Roll out features with AI agents",
5
5
  "scripts": {
6
6
  "test": "bash tests/run.sh"