@chatcode/cco-market 1.45.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 (177) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +146 -0
  3. package/README.zh.md +143 -0
  4. package/UPDATE-API-V1.md +132 -0
  5. package/client/client.js +11534 -0
  6. package/cordis.patch.yml +5 -0
  7. package/lib/accelerate.js +184 -0
  8. package/lib/agents.js +36 -0
  9. package/lib/backup.js +572 -0
  10. package/lib/catalog-local-match.js +126 -0
  11. package/lib/catalog-npm.js +111 -0
  12. package/lib/changelog.js +242 -0
  13. package/lib/channels.js +64 -0
  14. package/lib/check.js +1067 -0
  15. package/lib/compatibility.js +198 -0
  16. package/lib/diagnostics.js +49 -0
  17. package/lib/discovery-compatibility.js +260 -0
  18. package/lib/dsh-cli.js +949 -0
  19. package/lib/dsh-install.js +108 -0
  20. package/lib/gist.js +352 -0
  21. package/lib/groups.js +97 -0
  22. package/lib/home-paths.js +42 -0
  23. package/lib/hot.js +519 -0
  24. package/lib/http.js +39 -0
  25. package/lib/index.js +97 -0
  26. package/lib/install.js +387 -0
  27. package/lib/log.js +197 -0
  28. package/lib/ndjson.js +154 -0
  29. package/lib/net.js +98 -0
  30. package/lib/order.js +284 -0
  31. package/lib/patch.js +521 -0
  32. package/lib/pnpm-compat.js +490 -0
  33. package/lib/presets.js +278 -0
  34. package/lib/profile.js +911 -0
  35. package/lib/region-probe.js +93 -0
  36. package/lib/regions.js +253 -0
  37. package/lib/registry.js +204 -0
  38. package/lib/restart.js +373 -0
  39. package/lib/routes.js +4372 -0
  40. package/lib/settings.js +109 -0
  41. package/lib/skill-market/api.js +119 -0
  42. package/lib/skill-market/config.js +29 -0
  43. package/lib/skill-market/installer.js +352 -0
  44. package/lib/skill-market/runtime.js +13 -0
  45. package/lib/skill-market/tui.js +119 -0
  46. package/lib/skill-market/types.js +1 -0
  47. package/lib/skill-market/web-routes.js +123 -0
  48. package/lib/snapshot.js +500 -0
  49. package/lib/source-migration.js +54 -0
  50. package/lib/sources.js +596 -0
  51. package/lib/store.js +91 -0
  52. package/lib/themes.js +102 -0
  53. package/lib/trial.js +116 -0
  54. package/lib/types/accelerate.d.ts +85 -0
  55. package/lib/types/agents.d.ts +22 -0
  56. package/lib/types/backup.d.ts +131 -0
  57. package/lib/types/catalog-local-match.d.ts +50 -0
  58. package/lib/types/catalog-npm.d.ts +47 -0
  59. package/lib/types/changelog.d.ts +102 -0
  60. package/lib/types/channels.d.ts +56 -0
  61. package/lib/types/check.d.ts +266 -0
  62. package/lib/types/compatibility.d.ts +64 -0
  63. package/lib/types/diagnostics.d.ts +29 -0
  64. package/lib/types/discovery-compatibility.d.ts +80 -0
  65. package/lib/types/dsh-cli.d.ts +324 -0
  66. package/lib/types/dsh-install.d.ts +46 -0
  67. package/lib/types/gist.d.ts +53 -0
  68. package/lib/types/groups.d.ts +34 -0
  69. package/lib/types/home-paths.d.ts +16 -0
  70. package/lib/types/hot.d.ts +221 -0
  71. package/lib/types/http.d.ts +12 -0
  72. package/lib/types/index.d.ts +14 -0
  73. package/lib/types/install.d.ts +172 -0
  74. package/lib/types/log.d.ts +43 -0
  75. package/lib/types/ndjson.d.ts +52 -0
  76. package/lib/types/net.d.ts +58 -0
  77. package/lib/types/order.d.ts +100 -0
  78. package/lib/types/patch.d.ts +129 -0
  79. package/lib/types/pnpm-compat.d.ts +93 -0
  80. package/lib/types/presets.d.ts +90 -0
  81. package/lib/types/profile.d.ts +253 -0
  82. package/lib/types/region-probe.d.ts +50 -0
  83. package/lib/types/regions.d.ts +122 -0
  84. package/lib/types/registry.d.ts +86 -0
  85. package/lib/types/restart.d.ts +194 -0
  86. package/lib/types/routes.d.ts +67 -0
  87. package/lib/types/settings.d.ts +78 -0
  88. package/lib/types/skill-market/api.d.ts +10 -0
  89. package/lib/types/skill-market/config.d.ts +3 -0
  90. package/lib/types/skill-market/installer.d.ts +23 -0
  91. package/lib/types/skill-market/runtime.d.ts +10 -0
  92. package/lib/types/skill-market/tui.d.ts +4 -0
  93. package/lib/types/skill-market/types.d.ts +71 -0
  94. package/lib/types/skill-market/web-routes.d.ts +19 -0
  95. package/lib/types/snapshot.d.ts +93 -0
  96. package/lib/types/source-migration.d.ts +11 -0
  97. package/lib/types/sources.d.ts +216 -0
  98. package/lib/types/store.d.ts +30 -0
  99. package/lib/types/themes.d.ts +40 -0
  100. package/lib/types/trial.d.ts +61 -0
  101. package/lib/types/update-api-v1.d.ts +66 -0
  102. package/lib/types/updates.d.ts +123 -0
  103. package/lib/types/verify.d.ts +139 -0
  104. package/lib/update-api-v1.js +215 -0
  105. package/lib/updates.js +361 -0
  106. package/lib/verify.js +453 -0
  107. package/package.json +121 -0
  108. package/src/accelerate.ts +213 -0
  109. package/src/agents.ts +43 -0
  110. package/src/backup.ts +583 -0
  111. package/src/catalog-local-match.ts +144 -0
  112. package/src/catalog-npm.ts +120 -0
  113. package/src/changelog.ts +282 -0
  114. package/src/channels.ts +70 -0
  115. package/src/check.ts +1239 -0
  116. package/src/client/CommentsModal.tsx +119 -0
  117. package/src/client/Diagnostics.tsx +907 -0
  118. package/src/client/ErrorBoundary.tsx +111 -0
  119. package/src/client/InstallToast.tsx +31 -0
  120. package/src/client/Market.module.css +830 -0
  121. package/src/client/MarketSection.tsx +5301 -0
  122. package/src/client/OperationsPanel.tsx +365 -0
  123. package/src/client/SettingsCard.tsx +621 -0
  124. package/src/client/SkillMarket.module.css +21 -0
  125. package/src/client/SkillMarketSection.tsx +162 -0
  126. package/src/client/comments.ts +54 -0
  127. package/src/client/globals.d.ts +13 -0
  128. package/src/client/index.ts +180 -0
  129. package/src/client/locales.ts +1112 -0
  130. package/src/client/market-data.ts +1321 -0
  131. package/src/client/operations.ts +201 -0
  132. package/src/client/preset-panel.tsx +263 -0
  133. package/src/client/primitives.d.ts +140 -0
  134. package/src/client/self-check.ts +147 -0
  135. package/src/client/snapshot-panel.tsx +244 -0
  136. package/src/compatibility.ts +237 -0
  137. package/src/diagnostics.ts +84 -0
  138. package/src/discovery-compatibility.ts +315 -0
  139. package/src/dsh-cli.ts +1126 -0
  140. package/src/dsh-install.ts +118 -0
  141. package/src/gist.ts +362 -0
  142. package/src/groups.ts +111 -0
  143. package/src/home-paths.ts +53 -0
  144. package/src/hot.ts +628 -0
  145. package/src/http.ts +41 -0
  146. package/src/index.ts +128 -0
  147. package/src/install.ts +420 -0
  148. package/src/log.ts +206 -0
  149. package/src/ndjson.ts +185 -0
  150. package/src/net.ts +106 -0
  151. package/src/order.ts +303 -0
  152. package/src/patch.ts +522 -0
  153. package/src/pnpm-compat.ts +527 -0
  154. package/src/presets.ts +344 -0
  155. package/src/profile.ts +940 -0
  156. package/src/region-probe.ts +97 -0
  157. package/src/regions.ts +310 -0
  158. package/src/registry.ts +250 -0
  159. package/src/restart.ts +396 -0
  160. package/src/routes.ts +4506 -0
  161. package/src/settings.ts +141 -0
  162. package/src/skill-market/api.ts +130 -0
  163. package/src/skill-market/config.ts +32 -0
  164. package/src/skill-market/installer.ts +337 -0
  165. package/src/skill-market/runtime.ts +14 -0
  166. package/src/skill-market/tui.ts +157 -0
  167. package/src/skill-market/types.ts +80 -0
  168. package/src/skill-market/web-routes.ts +132 -0
  169. package/src/snapshot.ts +532 -0
  170. package/src/source-migration.ts +61 -0
  171. package/src/sources.ts +565 -0
  172. package/src/store.ts +89 -0
  173. package/src/themes.ts +125 -0
  174. package/src/trial.ts +156 -0
  175. package/src/update-api-v1.ts +277 -0
  176. package/src/updates.ts +400 -0
  177. package/src/verify.ts +492 -0
@@ -0,0 +1,119 @@
1
+ /**
2
+ * The comment thread for one plugin, rendered inside the market.
3
+ *
4
+ * Opening this is the request to read the comments, so it loads on open —
5
+ * there is no second click to confirm what the first one already said. What
6
+ * the reader does have to be told, once and plainly, is that reading here
7
+ * contacts giscus.app and GitHub: nothing else in the market talks to a third
8
+ * party at the reader's request, and a comment box that quietly opens that
9
+ * connection would be a surprise, not a feature.
10
+ *
11
+ * The thread itself lives in GitHub Discussions, keyed on the same
12
+ * `plugin:<slug>` term the two websites use — see comments.ts.
13
+ */
14
+
15
+ import { useEffect, useRef, useState } from 'react'
16
+ import { Button, Modal } from '@deepseek-ai/dsh-client-ui-primitives'
17
+ import css from './Market.module.css'
18
+ import { GISCUS, commentsDiscussionUrl, commentsTerm, giscusLang } from './comments.ts'
19
+
20
+ /**
21
+ * Whether the host is currently showing a dark theme.
22
+ *
23
+ * Read off the rendered page rather than from `prefers-color-scheme`: the host
24
+ * lets the reader pick a theme (including custom ones) independently of the
25
+ * OS, and a light comment box dropped into a dark window is the kind of seam
26
+ * that makes an embed look bolted on.
27
+ */
28
+ function hostIsDark(): boolean {
29
+ if (typeof window === 'undefined') return false
30
+ const bg = getComputedStyle(document.body).backgroundColor
31
+ const m = /rgba?\(\s*(\d+)[,\s]+(\d+)[,\s]+(\d+)/.exec(bg)
32
+ if (!m) return window.matchMedia?.('(prefers-color-scheme: dark)').matches ?? false
33
+ const [r, g, b] = [Number(m[1]), Number(m[2]), Number(m[3])]
34
+ return (0.299 * r + 0.587 * g + 0.114 * b) < 128
35
+ }
36
+
37
+ export function CommentsModal(props: {
38
+ name: string
39
+ url: string
40
+ lang: string
41
+ onClose: () => void
42
+ t: (k: string) => string
43
+ }) {
44
+ const { name, url, lang, onClose, t } = props
45
+ const mount = useRef<HTMLDivElement | null>(null)
46
+ const [state, setState] = useState<'loading' | 'ready' | 'failed'>('loading')
47
+ // Bumping this re-runs the effect, which is what "retry" means here.
48
+ const [attempt, setAttempt] = useState(0)
49
+
50
+ useEffect(() => {
51
+ const host = mount.current
52
+ if (host === null) return
53
+ host.replaceChildren()
54
+ setState('loading')
55
+
56
+ const script = document.createElement('script')
57
+ script.src = 'https://giscus.app/client.js'
58
+ script.async = true
59
+ script.crossOrigin = 'anonymous'
60
+ Object.assign(script.dataset, {
61
+ repo: GISCUS.repo,
62
+ repoId: GISCUS.repoId,
63
+ category: GISCUS.category,
64
+ categoryId: GISCUS.categoryId,
65
+ mapping: 'specific',
66
+ term: commentsTerm(url),
67
+ // `strict` hashes the term, so `owner/repo` cannot collide with a
68
+ // `owner/repo--sub` entry from the same repository.
69
+ strict: '1',
70
+ reactionsEnabled: '1',
71
+ emitMetadata: '0',
72
+ inputPosition: 'bottom',
73
+ theme: hostIsDark() ? 'dark' : 'light',
74
+ lang: giscusLang(lang),
75
+ loading: 'lazy',
76
+ })
77
+ script.onload = () => setState('ready')
78
+ script.onerror = () => { script.remove(); setState('failed') }
79
+ host.append(script)
80
+
81
+ return () => { host.replaceChildren() }
82
+ }, [url, lang, attempt])
83
+
84
+ return (
85
+ <Modal
86
+ open
87
+ onClose={onClose}
88
+ title={t('commentsTitle') + ' — ' + name}
89
+ >
90
+ <p className={css.commentsNote}>{t('commentsNote')}</p>
91
+ <div className={css.commentsGithubPrompt}>
92
+ <p className={css.commentsGithubHint}>{t('commentsLoginHint')}</p>
93
+ <a
94
+ className={css.commentsGithubAction}
95
+ href={commentsDiscussionUrl(url)}
96
+ target="_blank"
97
+ rel="noreferrer"
98
+ >
99
+ {t('commentsOnGitHub')}
100
+ </a>
101
+ </div>
102
+ {state === 'failed'
103
+ ? (
104
+ <div className={css.commentsFail}>
105
+ <p className={css.commentsError}>{t('commentsError')}</p>
106
+ <Button variant="outline" size="sm" onClick={() => setAttempt(n => n + 1)}>
107
+ {t('commentsRetry')}
108
+ </Button>
109
+ </div>
110
+ )
111
+ : (
112
+ <p className={css.commentsStatus} role="status" aria-live="polite">
113
+ {state === 'loading' ? t('commentsLoading') : ''}
114
+ </p>
115
+ )}
116
+ <div ref={mount} className={css.commentsMount} aria-busy={state === 'loading'} />
117
+ </Modal>
118
+ )
119
+ }