dsh-claude-style 0.3.0 → 0.3.2

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 (115) hide show
  1. package/CHANGELOG.md +56 -2
  2. package/LICENSE +9 -0
  3. package/README.en.md +4 -3
  4. package/README.md +4 -15
  5. package/docs/STYLE.md +22 -14
  6. package/docs/architecture.md +74 -0
  7. package/fonts/GoogleSansFlexPicker.woff2 +0 -0
  8. package/fonts/OFL-GoogleSansFlex.txt +93 -0
  9. package/lib/client.js +710 -1485
  10. package/lib/index.js +6 -23
  11. package/lib/model-descriptions.json +225 -209
  12. package/package.json +7 -2
  13. package/docs/REFACTOR.md +0 -294
  14. package/lib/icons/providers/ClaudeApi.png +0 -0
  15. package/lib/icons/providers/README.md +0 -13
  16. package/lib/icons/providers/TeamoRouter-icon-dark.png +0 -0
  17. package/lib/icons/providers/a6-icon.png +0 -0
  18. package/lib/icons/providers/aicodemirror.svg +0 -19
  19. package/lib/icons/providers/aicoding.svg +0 -20
  20. package/lib/icons/providers/aihubmix-color.svg +0 -1
  21. package/lib/icons/providers/algocode.svg +0 -51
  22. package/lib/icons/providers/alibaba.svg +0 -1
  23. package/lib/icons/providers/amuxapi-icon.svg +0 -13
  24. package/lib/icons/providers/anthropic.svg +0 -1
  25. package/lib/icons/providers/apikeyfun.png +0 -0
  26. package/lib/icons/providers/apinebula_icon.png +0 -0
  27. package/lib/icons/providers/atlascloud_icon.png +0 -0
  28. package/lib/icons/providers/aws.svg +0 -1
  29. package/lib/icons/providers/azure.svg +0 -1
  30. package/lib/icons/providers/baidu.svg +0 -1
  31. package/lib/icons/providers/bailian.svg +0 -1
  32. package/lib/icons/providers/bytedance.svg +0 -1
  33. package/lib/icons/providers/byteplus.png +0 -0
  34. package/lib/icons/providers/catcoder.svg +0 -1
  35. package/lib/icons/providers/ccsub.svg +0 -4
  36. package/lib/icons/providers/chatglm.svg +0 -1
  37. package/lib/icons/providers/cherryin.png +0 -0
  38. package/lib/icons/providers/claude.svg +0 -1
  39. package/lib/icons/providers/claudecn.png +0 -0
  40. package/lib/icons/providers/claw.svg +0 -22
  41. package/lib/icons/providers/cloudflare.svg +0 -1
  42. package/lib/icons/providers/code0.png +0 -0
  43. package/lib/icons/providers/cohere.svg +0 -1
  44. package/lib/icons/providers/copilot.svg +0 -1
  45. package/lib/icons/providers/crazyrouter.svg +0 -1
  46. package/lib/icons/providers/cubence.svg +0 -9
  47. package/lib/icons/providers/deepseek.svg +0 -1
  48. package/lib/icons/providers/doubao.svg +0 -1
  49. package/lib/icons/providers/eflowcode.png +0 -0
  50. package/lib/icons/providers/etok.png +0 -0
  51. package/lib/icons/providers/fenno-icon.webp +0 -0
  52. package/lib/icons/providers/gemini.svg +0 -1
  53. package/lib/icons/providers/gemma.svg +0 -1
  54. package/lib/icons/providers/github.svg +0 -1
  55. package/lib/icons/providers/githubcopilot.svg +0 -1
  56. package/lib/icons/providers/google.svg +0 -1
  57. package/lib/icons/providers/googlecloud.svg +0 -1
  58. package/lib/icons/providers/grok.svg +0 -1
  59. package/lib/icons/providers/hermes.png +0 -0
  60. package/lib/icons/providers/huawei.svg +0 -1
  61. package/lib/icons/providers/huggingface.svg +0 -1
  62. package/lib/icons/providers/hunyuan.svg +0 -1
  63. package/lib/icons/providers/huoshan.png +0 -0
  64. package/lib/icons/providers/kimi.svg +0 -1
  65. package/lib/icons/providers/lioncc.svg +0 -6
  66. package/lib/icons/providers/longcat-color.svg +0 -1
  67. package/lib/icons/providers/mcp.svg +0 -1
  68. package/lib/icons/providers/meta.svg +0 -1
  69. package/lib/icons/providers/micu.svg +0 -23
  70. package/lib/icons/providers/midjourney.svg +0 -1
  71. package/lib/icons/providers/minimax.svg +0 -1
  72. package/lib/icons/providers/mistral.svg +0 -1
  73. package/lib/icons/providers/modelscope-color.svg +0 -1
  74. package/lib/icons/providers/nekocode-icon.png +0 -0
  75. package/lib/icons/providers/newapi.svg +0 -1
  76. package/lib/icons/providers/notion.svg +0 -1
  77. package/lib/icons/providers/novita.svg +0 -11
  78. package/lib/icons/providers/nvidia.svg +0 -1
  79. package/lib/icons/providers/ollama.svg +0 -1
  80. package/lib/icons/providers/openai.svg +0 -1
  81. package/lib/icons/providers/opencode-logo-light.svg +0 -1
  82. package/lib/icons/providers/openrouter.svg +0 -1
  83. package/lib/icons/providers/packycode.svg +0 -1
  84. package/lib/icons/providers/palm.svg +0 -1
  85. package/lib/icons/providers/pateway.jpg +0 -0
  86. package/lib/icons/providers/perplexity.svg +0 -1
  87. package/lib/icons/providers/pipellm.png +0 -0
  88. package/lib/icons/providers/ppio.svg +0 -1
  89. package/lib/icons/providers/qianwenai.svg +0 -1
  90. package/lib/icons/providers/qiniu.png +0 -0
  91. package/lib/icons/providers/qwen.svg +0 -1
  92. package/lib/icons/providers/qwencloud.svg +0 -1
  93. package/lib/icons/providers/rc.svg +0 -1
  94. package/lib/icons/providers/relaxcode.png +0 -0
  95. package/lib/icons/providers/runapi.jpg +0 -0
  96. package/lib/icons/providers/shengsuanyun.svg +0 -4
  97. package/lib/icons/providers/siliconflow.svg +0 -1
  98. package/lib/icons/providers/sssaicode.svg +0 -73
  99. package/lib/icons/providers/stability.svg +0 -1
  100. package/lib/icons/providers/stepfun.svg +0 -10
  101. package/lib/icons/providers/subrouter.svg +0 -30
  102. package/lib/icons/providers/sudocode-us.png +0 -0
  103. package/lib/icons/providers/sudocode.png +0 -0
  104. package/lib/icons/providers/tencent.svg +0 -1
  105. package/lib/icons/providers/ucloud.svg +0 -1
  106. package/lib/icons/providers/unity2.png +0 -0
  107. package/lib/icons/providers/vercel.svg +0 -1
  108. package/lib/icons/providers/wenxin.svg +0 -1
  109. package/lib/icons/providers/xai.svg +0 -1
  110. package/lib/icons/providers/xiaomimimo.svg +0 -1
  111. package/lib/icons/providers/xycai-icon.png +0 -0
  112. package/lib/icons/providers/yi.svg +0 -1
  113. package/lib/icons/providers/zeroone.svg +0 -1
  114. package/lib/icons/providers/zetaapi-icon.png +0 -0
  115. package/lib/icons/providers/zhipu.svg +0 -1
package/lib/index.js CHANGED
@@ -45,16 +45,18 @@ const COPY_FILE = 'model-descriptions.json'
45
45
  * Webfonts this plugin serves under `${ROUTE_PREFIX}/fonts/`, mapped to their
46
46
  * content type. The table is a whitelist: the filename is the whole request
47
47
  * contract, so nothing below the package's `fonts/` directory is reachable
48
- * and no path traversal is possible. The JetBrains Mono files ship in the npm
49
- * package; the Anthropic faces do not (copyright) — their entries exist so a
50
- * user-supplied copy in `fonts/` is served, and readFileSync's ENOENT turns
51
- * into a 404 the browser half's font stacks fall back from.
48
+ * and no path traversal is possible. The JetBrains Mono files and the Gemini
49
+ * picker face ship in the npm package; the Anthropic faces do not (copyright) —
50
+ * their entries exist so a user-supplied copy in `fonts/` is served, and
51
+ * readFileSync's ENOENT turns into a 404 the browser half's font stacks fall
52
+ * back from.
52
53
  */
53
54
  const FONT_FILES = {
54
55
  'JetBrainsMonoVariable.ttf': 'font/ttf',
55
56
  'JetBrainsMonoItalicVariable.ttf': 'font/ttf',
56
57
  'AnthropicSansWebText.ttf': 'font/ttf',
57
58
  'AnthropicSerifWebText.ttf': 'font/ttf',
59
+ 'GoogleSansFlexPicker.woff2': 'font/woff2',
58
60
  }
59
61
  /** Preferences route: `POST` reads when the body carries no write key, writes otherwise. */
60
62
  const PREFS_PATH = `${ROUTE_PREFIX}/prefs`
@@ -229,7 +231,6 @@ export function apply(ctx) {
229
231
  const here = dirname(fileURLToPath(import.meta.url))
230
232
  const file = join(here, COPY_FILE)
231
233
  const fontsDir = join(here, '..', 'fonts')
232
- const providersDir = join(here, 'icons', 'providers')
233
234
 
234
235
  /**
235
236
  * Answer one request under the route prefix with a static file.
@@ -290,24 +291,6 @@ export function apply(ctx) {
290
291
  })
291
292
  return
292
293
  }
293
- const providerFile = sub.startsWith('/icons/providers/') ? sub.slice('/icons/providers/'.length) : undefined
294
- if (providerFile !== undefined && /^[A-Za-z0-9._-]+$/.test(providerFile)) {
295
- const ext = providerFile.slice(providerFile.lastIndexOf('.')).toLowerCase()
296
- const mime = ext === '.svg'
297
- ? 'image/svg+xml'
298
- : ext === '.png'
299
- ? 'image/png'
300
- : ext === '.jpg' || ext === '.jpeg'
301
- ? 'image/jpeg'
302
- : ext === '.webp'
303
- ? 'image/webp'
304
- : 'application/octet-stream'
305
- sendFile(res, req.method, join(providersDir, providerFile), {
306
- 'content-type': mime,
307
- 'cache-control': 'public, max-age=86400',
308
- })
309
- return
310
- }
311
294
  res.writeHead(404)
312
295
  res.end()
313
296
  },