dowafu 0.4.0 → 0.4.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.
package/README_zh-tw.md CHANGED
@@ -9,7 +9,9 @@
9
9
  相容於各種支援標準SKILL的AI Agent程式與VS Code擴充套件包含以下,但還有更多:
10
10
 
11
11
  - Claude Code
12
- - VS Code Codepilot
12
+ - VS Code Copilot(內建)
13
+ - Codex(擴充套件)
14
+ - Google Antigravity IDE
13
15
 
14
16
  **spoke 產出的是意見,不是裁決。** 那些意見要怎麼處理,仍然由你決定。
15
17
 
package/dist/messages.js CHANGED
@@ -167,6 +167,9 @@ const MESSAGES = {
167
167
  tpmPeakLine: (provider, limit, peak) => ` ${provider} tpmLimit ${limit},靜態估算峰值 ${peak}`,
168
168
  tpmPeakCaveat: () => " └ 僅為靜態指標,不預測執行中的 TPM 曲線(429 等待會改變實際並行數)",
169
169
  allowedReadsSummary: (n, outDir) => ` 允許讀取 ${n} 個檔案,輸出至 ${outDir}/`,
170
+ allowedReadsListEntry: (path) => ` ${path}`,
171
+ allowedReadsListFolded: (n) => ` …另 ${n} 個`,
172
+ allowedReadsListEmpty: () => " (允許清單為空)",
170
173
  lensClosingLineZh: (agent) => `ℹ ${agent} 的 lens 收尾句符合中文版固定收尾句`,
171
174
  lensClosingLineEn: (agent) => `ℹ ${agent} 的 lens 收尾句符合英文版固定收尾句`,
172
175
  modelPricing: (input, output, cachedSuffix, asOfSuffix) => ` └ 單價 每 M token:input $${input}/output $${output}${cachedSuffix}${asOfSuffix}`,
@@ -355,6 +358,9 @@ const MESSAGES = {
355
358
  tpmPeakLine: (provider, limit, peak) => ` ${provider} tpmLimit ${limit}, statically estimated peak ${peak}`,
356
359
  tpmPeakCaveat: () => " └ Static indicator only; does not predict the in-flight TPM curve (429 waits change actual concurrency)",
357
360
  allowedReadsSummary: (n, outDir) => ` Allowed reads: ${n} file(s), output to ${outDir}/`,
361
+ allowedReadsListEntry: (path) => ` ${path}`,
362
+ allowedReadsListFolded: (n) => ` …and ${n} more`,
363
+ allowedReadsListEmpty: () => " (Allowlist is empty)",
358
364
  lensClosingLineZh: (agent) => `ℹ ${agent}'s lens closing line matches the Chinese fixed closing line`,
359
365
  lensClosingLineEn: (agent) => `ℹ ${agent}'s lens closing line matches the English fixed closing line`,
360
366
  modelPricing: (input, output, cachedSuffix, asOfSuffix) => ` └ Price per M tokens: input $${input} / output $${output}${cachedSuffix}${asOfSuffix}`,
package/dist/report.js CHANGED
@@ -89,6 +89,17 @@ export function buildReport(ticketId, spokes, estimates, allowlistEstimates, cli
89
89
  `store=${spoke.providerConfig.store === false ? "false" : "n/a"} ` +
90
90
  `est. ${est.toLocaleString()} cap ${cap.toLocaleString()}`);
91
91
  lines.push(` ${formatModelPricing(spoke, lang)}`);
92
+ if (spoke.allowedReadsRelative.length === 0) {
93
+ lines.push(m(lang, "allowedReadsListEmpty"));
94
+ }
95
+ else {
96
+ for (const path of spoke.allowedReadsRelative.slice(0, 8)) {
97
+ lines.push(m(lang, "allowedReadsListEntry", path));
98
+ }
99
+ const remaining = spoke.allowedReadsRelative.length - 8;
100
+ if (remaining > 0)
101
+ lines.push(m(lang, "allowedReadsListFolded", remaining));
102
+ }
92
103
  const closingLineNotice = formatLensClosingLineNotice(spoke, lang);
93
104
  if (closingLineNotice)
94
105
  lines.push(` ${closingLineNotice}`);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dowafu",
3
- "version": "0.4.0",
3
+ "version": "0.4.1",
4
4
  "description": "Send a section of your design doc to external LLMs for review. They read only the files you whitelist, and nothing is billed until you confirm.",
5
5
  "keywords": [
6
6
  "llm",
package/providers.json CHANGED
@@ -14,11 +14,11 @@
14
14
  "charsPerToken": 1.0,
15
15
  "tpmLimit": 200000,
16
16
  "maxSpokeTokens": null,
17
- "pricingSource": { "url": "https://developers.openai.com/api/docs/pricing", "asOf": "2026-08-09" },
17
+ "pricingSource": { "url": "https://developers.openai.com/api/docs/pricing", "asOf": "2026-08-29", "note": "gpt-5.6-sol 目前為優惠價" },
18
18
  "pricing": {
19
19
  "gpt-5.6-luna": { "inputPerM": 0.20, "cachedInputPerM": 0.02, "outputPerM": 1.20 },
20
20
  "gpt-5.6-terra": { "inputPerM": 2.00, "cachedInputPerM": 0.20, "outputPerM": 12.00 },
21
- "gpt-5.6-sol": { "inputPerM": 5.00, "cachedInputPerM": 0.50, "outputPerM": 30.00 }
21
+ "gpt-5.6-sol": { "inputPerM": 4.00, "cachedInputPerM": 0.40, "outputPerM": 20.00 }
22
22
  }
23
23
  },
24
24
  "deepseek": {
@@ -37,8 +37,8 @@
37
37
  "maxSpokeTokens": null,
38
38
  "pricingSource": {
39
39
  "url": "https://api-docs.deepseek.com/quick_start/pricing/",
40
- "asOf": "2026-08-14",
41
- "note": "本表填的是 2026-08-16 16:00 UTC 起生效的尖峰價。在此之前官方仍收舊價(flash 0.0028/0.14/0.28、pro 0.003625/0.435/0.87),所以生效前本表偏高。離峰(尖峰時段 01:00-04:00 與 06:00-10:00 UTC 以外)為尖峰的一半;本檔一個型號只放得下一組價,取尖峰=取上限。"
40
+ "asOf": "2026-08-29",
41
+ "note": "離峰(尖峰時段 01:00-04:00 與 06:00-10:00 UTC 以外)為尖峰的一半;本檔一個型號只放得下一組價,取尖峰=取上限。"
42
42
  },
43
43
  "pricing": {
44
44
  "deepseek-v4-flash": { "inputPerM": 0.44, "cachedInputPerM": 0.014, "outputPerM": 1.32 },
@@ -55,15 +55,16 @@
55
55
  "allowed": ["minimal", "low", "medium", "high"],
56
56
  "default": "high"
57
57
  },
58
- "models": ["gemini-3.1-flash-lite", "gemini-3.5-flash-lite", "gemini-3.6-flash"],
58
+ "models": ["gemini-3.1-flash-lite", "gemini-3.5-flash-lite", "gemini-3.6-flash", "gemini-3.7-flash"],
59
59
  "charsPerToken": 1.0,
60
60
  "tpmLimit": null,
61
61
  "maxSpokeTokens": null,
62
- "pricingSource": { "url": "https://ai.google.dev/gemini-api/docs/pricing", "asOf": "2026-08-09", "note": "文字/圖片/影片價;音訊另計。output 價含 thinking tokens" },
62
+ "pricingSource": { "url": "https://ai.google.dev/gemini-api/docs/pricing", "asOf": "2026-08-29", "note": "文字/圖片/影片價;音訊另計。output 價含 thinking tokens。gemini-3.6-flash/gemini-3.7-flash 目前為優惠價" },
63
63
  "pricing": {
64
64
  "gemini-3.1-flash-lite": { "inputPerM": 0.25, "cachedInputPerM": 0.025, "outputPerM": 1.50 },
65
65
  "gemini-3.5-flash-lite": { "inputPerM": 0.30, "cachedInputPerM": 0.03, "outputPerM": 2.50 },
66
- "gemini-3.6-flash": { "inputPerM": 1.50, "cachedInputPerM": 0.15, "outputPerM": 7.50 }
66
+ "gemini-3.6-flash": { "inputPerM": 0.75, "cachedInputPerM": 0.075, "outputPerM": 3.75 },
67
+ "gemini-3.7-flash": { "inputPerM": 0.75, "cachedInputPerM": 0.075, "outputPerM": 3.75 }
67
68
  }
68
69
  },
69
70
  "anthropic": {
@@ -76,14 +77,15 @@
76
77
  "allowed": ["low", "medium", "high", "xhigh", "max"],
77
78
  "default": "high"
78
79
  },
79
- "models": ["claude-opus-5", "claude-sonnet-5"],
80
+ "models": ["claude-opus-5", "claude-sonnet-5", "claude-haiku-4-5-20251001"],
80
81
  "charsPerToken": 1.0,
81
82
  "tpmLimit": null,
82
83
  "maxSpokeTokens": null,
83
- "pricingSource": { "url": "https://platform.claude.com/docs/en/about-claude/pricing", "asOf": "2026-08-09", "note": "sonnet-5 為 2026-08-31 前的優惠價,之後為 3.00/15.00" },
84
+ "pricingSource": { "url": "https://platform.claude.com/docs/en/about-claude/pricing", "asOf": "2026-08-29" },
84
85
  "pricing": {
85
86
  "claude-opus-5": { "inputPerM": 5.00, "cachedInputPerM": 0.50, "cacheWritePerM": 6.25, "outputPerM": 25.00 },
86
- "claude-sonnet-5": { "inputPerM": 2.00, "cachedInputPerM": 0.20, "cacheWritePerM": 2.50, "outputPerM": 10.00 }
87
+ "claude-sonnet-5": { "inputPerM": 2.00, "cachedInputPerM": 0.20, "cacheWritePerM": 2.50, "outputPerM": 10.00 },
88
+ "claude-haiku-4-5-20251001": { "inputPerM": 1.00, "cachedInputPerM": 0.10, "cacheWritePerM": 1.25, "outputPerM": 5.00 }
87
89
  }
88
90
  }
89
91
  }