@mengruo/dsh-vision-toolkit 0.0.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 (216) hide show
  1. package/LICENSE +21 -0
  2. package/README.i18n.yaml +6 -0
  3. package/README.md +356 -0
  4. package/README.zh.md +354 -0
  5. package/assets/community-group-qr.png +0 -0
  6. package/assets/dsh-conversation-artifact.png +0 -0
  7. package/assets/dsh-conversation-image-qa-top.png +0 -0
  8. package/assets/dsh-conversation-image-qa.png +0 -0
  9. package/assets/dsh-conversation-pixel-diff.png +0 -0
  10. package/assets/dsh-conversation-screenshot-debugging-top.png +0 -0
  11. package/assets/dsh-conversation-screenshot-debugging.png +0 -0
  12. package/assets/dsh-conversation-tool-call.png +0 -0
  13. package/assets/dsh-conversation-vision-trace.png +0 -0
  14. package/assets/dsh-view-example.png +0 -0
  15. package/assets/hero-v2.png +0 -0
  16. package/assets/logo_aihubmix.png +0 -0
  17. package/assets/python-bootstrap.json +48 -0
  18. package/assets/skill/SKILL.md +329 -0
  19. package/assets/skill/UPSTREAM.json +71 -0
  20. package/assets/skill/references/gui.md +88 -0
  21. package/assets/skill/references/long-screenshot-ocr.md +77 -0
  22. package/assets/skill/references/restore-graphic.md +84 -0
  23. package/assets/skill/references/restore-structure.md +45 -0
  24. package/assets/skill/references/restore-ui.md +202 -0
  25. package/assets/social-preview.png +0 -0
  26. package/assets/upstream/README.md +18 -0
  27. package/assets/upstream/focus-hint-comparison-1.webp +0 -0
  28. package/assets/upstream/focus-hint-comparison-2.webp +0 -0
  29. package/assets/upstream/infographic-reference.webp +0 -0
  30. package/assets/upstream/infographic-result.webp +0 -0
  31. package/assets/upstream/ui-fast-restore-reference.webp +0 -0
  32. package/assets/upstream/ui-fast-restore-result.webp +0 -0
  33. package/assets/upstream/ui-result.webp +0 -0
  34. package/assets/upstream/ui-sketch.webp +0 -0
  35. package/assets/vision-model-test.png +0 -0
  36. package/assets/vision-settings.png +0 -0
  37. package/assets/wechat-reward.png +0 -0
  38. package/cordis.patch.yml +6 -0
  39. package/docs/aihubmix-gemini-vision.i18n.yaml +6 -0
  40. package/docs/aihubmix-gemini-vision.md +138 -0
  41. package/docs/aihubmix-gemini-vision.zh.md +138 -0
  42. package/docs/assets/aihubmix-api-keys.png +0 -0
  43. package/docs/assets/aihubmix-create-key.png +0 -0
  44. package/docs/assets/aihubmix-free-vision-model.png +0 -0
  45. package/docs/assets/aihubmix-home.png +0 -0
  46. package/docs/assets/aihubmix-sign-up.png +0 -0
  47. package/docs/assets/groq-console-home.png +0 -0
  48. package/docs/assets/groq-console-keys-login.png +0 -0
  49. package/docs/assets/groq-docs-quickstart.png +0 -0
  50. package/docs/assets/groq-docs-qwen3.6.png +0 -0
  51. package/docs/assets/groq-docs-vision.png +0 -0
  52. package/docs/assets/vision-settings.png +0 -0
  53. package/docs/dsh-desktop-install.md +67 -0
  54. package/docs/dsh-desktop-install.zh.md +67 -0
  55. package/docs/groq-qwen3.6-vision.i18n.yaml +6 -0
  56. package/docs/groq-qwen3.6-vision.md +236 -0
  57. package/docs/groq-qwen3.6-vision.zh.md +236 -0
  58. package/docs/python-runtime.i18n.yaml +6 -0
  59. package/docs/python-runtime.md +89 -0
  60. package/docs/python-runtime.zh.md +89 -0
  61. package/docs/requirements-traceability/README.i18n.yaml +6 -0
  62. package/docs/requirements-traceability/README.md +75 -0
  63. package/docs/requirements-traceability/README.zh.md +75 -0
  64. package/examples/ui-restoration/README.i18n.yaml +6 -0
  65. package/examples/ui-restoration/README.md +70 -0
  66. package/examples/ui-restoration/README.zh.md +70 -0
  67. package/examples/ui-restoration/assets/final-heatmap.png +0 -0
  68. package/examples/ui-restoration/assets/final-report.json +83 -0
  69. package/examples/ui-restoration/assets/implementation.png +0 -0
  70. package/examples/ui-restoration/assets/initial-heatmap.png +0 -0
  71. package/examples/ui-restoration/assets/initial-report.json +83 -0
  72. package/examples/ui-restoration/assets/initial.png +0 -0
  73. package/examples/ui-restoration/assets/metrics.json +12 -0
  74. package/examples/ui-restoration/assets/reference.png +0 -0
  75. package/examples/ui-restoration/implementation.html +94 -0
  76. package/examples/ui-restoration/initial.html +57 -0
  77. package/lib/artifact-access.js +369 -0
  78. package/lib/artifact-access.js.map +1 -0
  79. package/lib/artifacts.js +56 -0
  80. package/lib/artifacts.js.map +1 -0
  81. package/lib/client.js +2099 -0
  82. package/lib/client.js.map +1 -0
  83. package/lib/config.js +172 -0
  84. package/lib/config.js.map +1 -0
  85. package/lib/defaults.js +6 -0
  86. package/lib/defaults.js.map +1 -0
  87. package/lib/errors.js +56 -0
  88. package/lib/errors.js.map +1 -0
  89. package/lib/evidence-cache.js +350 -0
  90. package/lib/evidence-cache.js.map +1 -0
  91. package/lib/exposure.js +247 -0
  92. package/lib/exposure.js.map +1 -0
  93. package/lib/image-input-variants.js +882 -0
  94. package/lib/image-input-variants.js.map +1 -0
  95. package/lib/index.js +105 -0
  96. package/lib/index.js.map +1 -0
  97. package/lib/paste-images.js +217 -0
  98. package/lib/paste-images.js.map +1 -0
  99. package/lib/paths.js +354 -0
  100. package/lib/paths.js.map +1 -0
  101. package/lib/plugin-update.js +1003 -0
  102. package/lib/plugin-update.js.map +1 -0
  103. package/lib/runtime-install.js +964 -0
  104. package/lib/runtime-install.js.map +1 -0
  105. package/lib/runtime-manager.js +133 -0
  106. package/lib/runtime-manager.js.map +1 -0
  107. package/lib/runtime.js +1678 -0
  108. package/lib/runtime.js.map +1 -0
  109. package/lib/skill.js +25 -0
  110. package/lib/skill.js.map +1 -0
  111. package/lib/tools.js +549 -0
  112. package/lib/tools.js.map +1 -0
  113. package/lib/types/artifact-access.d.ts +61 -0
  114. package/lib/types/artifact-access.d.ts.map +1 -0
  115. package/lib/types/artifacts.d.ts +42 -0
  116. package/lib/types/artifacts.d.ts.map +1 -0
  117. package/lib/types/client/display-config.d.ts +24 -0
  118. package/lib/types/client/display-config.d.ts.map +1 -0
  119. package/lib/types/client/index.d.ts +350 -0
  120. package/lib/types/client/index.d.ts.map +1 -0
  121. package/lib/types/client/model-variants-hider.d.ts +40 -0
  122. package/lib/types/client/model-variants-hider.d.ts.map +1 -0
  123. package/lib/types/client/paste-images.d.ts +126 -0
  124. package/lib/types/client/paste-images.d.ts.map +1 -0
  125. package/lib/types/config.d.ts +123 -0
  126. package/lib/types/config.d.ts.map +1 -0
  127. package/lib/types/defaults.d.ts +6 -0
  128. package/lib/types/defaults.d.ts.map +1 -0
  129. package/lib/types/errors.d.ts +35 -0
  130. package/lib/types/errors.d.ts.map +1 -0
  131. package/lib/types/evidence-cache.d.ts +91 -0
  132. package/lib/types/evidence-cache.d.ts.map +1 -0
  133. package/lib/types/exposure.d.ts +50 -0
  134. package/lib/types/exposure.d.ts.map +1 -0
  135. package/lib/types/image-input-variants.d.ts +144 -0
  136. package/lib/types/image-input-variants.d.ts.map +1 -0
  137. package/lib/types/index.d.ts +19 -0
  138. package/lib/types/index.d.ts.map +1 -0
  139. package/lib/types/paste-images.d.ts +73 -0
  140. package/lib/types/paste-images.d.ts.map +1 -0
  141. package/lib/types/paths.d.ts +117 -0
  142. package/lib/types/paths.d.ts.map +1 -0
  143. package/lib/types/plugin-update.d.ts +119 -0
  144. package/lib/types/plugin-update.d.ts.map +1 -0
  145. package/lib/types/runtime-install.d.ts +92 -0
  146. package/lib/types/runtime-install.d.ts.map +1 -0
  147. package/lib/types/runtime-manager.d.ts +60 -0
  148. package/lib/types/runtime-manager.d.ts.map +1 -0
  149. package/lib/types/runtime.d.ts +412 -0
  150. package/lib/types/runtime.d.ts.map +1 -0
  151. package/lib/types/skill.d.ts +14 -0
  152. package/lib/types/skill.d.ts.map +1 -0
  153. package/lib/types/tools.d.ts +35 -0
  154. package/lib/types/tools.d.ts.map +1 -0
  155. package/lib/types/upstream.d.ts +233 -0
  156. package/lib/types/upstream.d.ts.map +1 -0
  157. package/lib/types/version.d.ts +15 -0
  158. package/lib/types/version.d.ts.map +1 -0
  159. package/lib/types/web-request.d.ts +11 -0
  160. package/lib/types/web-request.d.ts.map +1 -0
  161. package/lib/types/web.d.ts +118 -0
  162. package/lib/types/web.d.ts.map +1 -0
  163. package/lib/upstream.js +860 -0
  164. package/lib/upstream.js.map +1 -0
  165. package/lib/version.js +18 -0
  166. package/lib/version.js.map +1 -0
  167. package/lib/web-request.js +29 -0
  168. package/lib/web-request.js.map +1 -0
  169. package/lib/web.js +462 -0
  170. package/lib/web.js.map +1 -0
  171. package/package.json +149 -0
  172. package/patches/vision-tools-dsh.patch +970 -0
  173. package/runtime/requirements.lock +3 -0
  174. package/src/artifact-access.ts +386 -0
  175. package/src/artifacts.ts +85 -0
  176. package/src/client/display-config.ts +62 -0
  177. package/src/client/index.tsx +1580 -0
  178. package/src/client/model-variants-hider.ts +159 -0
  179. package/src/client/paste-images.tsx +747 -0
  180. package/src/config.ts +290 -0
  181. package/src/defaults.ts +5 -0
  182. package/src/errors.ts +62 -0
  183. package/src/evidence-cache.ts +418 -0
  184. package/src/exposure.ts +265 -0
  185. package/src/image-input-variants.ts +996 -0
  186. package/src/index.ts +141 -0
  187. package/src/paste-images.ts +286 -0
  188. package/src/paths.ts +383 -0
  189. package/src/plugin-update.ts +1143 -0
  190. package/src/runtime-install.ts +1161 -0
  191. package/src/runtime-manager.ts +174 -0
  192. package/src/runtime.ts +2189 -0
  193. package/src/skill.ts +35 -0
  194. package/src/tools.ts +691 -0
  195. package/src/upstream.ts +1078 -0
  196. package/src/version.ts +37 -0
  197. package/src/web-request.ts +27 -0
  198. package/src/web.ts +594 -0
  199. package/vendor/agent-vision-toolkit/CHANGELOG.md +30 -0
  200. package/vendor/agent-vision-toolkit/LICENSE +21 -0
  201. package/vendor/agent-vision-toolkit/README.md +405 -0
  202. package/vendor/agent-vision-toolkit/UPSTREAM_MANIFEST.json +94 -0
  203. package/vendor/agent-vision-toolkit/bin/crop +90 -0
  204. package/vendor/agent-vision-toolkit/bin/detect +13 -0
  205. package/vendor/agent-vision-toolkit/bin/glance +93 -0
  206. package/vendor/agent-vision-toolkit/bin/ground +13 -0
  207. package/vendor/agent-vision-toolkit/bin/trace +129 -0
  208. package/vendor/agent-vision-toolkit/detect.py +60 -0
  209. package/vendor/agent-vision-toolkit/ground.py +267 -0
  210. package/vendor/agent-vision-toolkit/skills/vision-tools/scripts/dominant_colors.py +224 -0
  211. package/vendor/agent-vision-toolkit/skills/vision-tools/scripts/extract_fg.py +278 -0
  212. package/vendor/agent-vision-toolkit/skills/vision-tools/scripts/html_shot.py +420 -0
  213. package/vendor/agent-vision-toolkit/skills/vision-tools/scripts/long_screenshot_ocr.py +1245 -0
  214. package/vendor/agent-vision-toolkit/skills/vision-tools/scripts/pixel_diff.py +88 -0
  215. package/vendor/agent-vision-toolkit/tests/test_vision_client.py +450 -0
  216. package/vendor/agent-vision-toolkit/vision_client.py +310 -0
@@ -0,0 +1,174 @@
1
+ /**
2
+ * Atomic live configuration owner for the plugin's internal runtime. A new
3
+ * upstream adapter is fully prepared before it replaces the currently serving
4
+ * runtime, so failed Settings edits never interrupt in-flight or later calls.
5
+ * @module dsh-vision-toolkit/runtime-manager
6
+ */
7
+
8
+ import type { Context } from '@deepseek-ai/cordis'
9
+ import { resolveConfig, type ResolvedVisionToolkitConfig, type VisionToolkitConfig } from './config.ts'
10
+ import { VisionToolkitRuntime } from './runtime.ts'
11
+ import { UpstreamAdapter, type UpstreamVersionInfo } from './upstream.ts'
12
+
13
+ /** One completely prepared configuration generation. */
14
+ export interface PreparedRuntimeGeneration {
15
+ config: ResolvedVisionToolkitConfig
16
+ fingerprint: string
17
+ runtime: VisionToolkitRuntime
18
+ }
19
+
20
+ /** Public, secret-free status used by the Settings page. */
21
+ export interface RuntimeManagerStatus {
22
+ ready: boolean
23
+ generation: number
24
+ activeConfig?: ResolvedVisionToolkitConfig
25
+ upstream?: UpstreamVersionInfo
26
+ lastError?: string
27
+ }
28
+
29
+ /** Test seam for preparing one generation. */
30
+ export type RuntimeGenerationFactory = (
31
+ ctx: Context,
32
+ config: ResolvedVisionToolkitConfig,
33
+ ) => Promise<VisionToolkitRuntime>
34
+
35
+ async function defaultFactory(ctx: Context, config: ResolvedVisionToolkitConfig): Promise<VisionToolkitRuntime> {
36
+ const adapter = new UpstreamAdapter(ctx, config)
37
+ await adapter.prepare()
38
+ return new VisionToolkitRuntime(ctx, config, adapter)
39
+ }
40
+
41
+ function fingerprint(config: ResolvedVisionToolkitConfig): string {
42
+ // Transparent routing is a display/policy flag: toggling it must not rebuild
43
+ // or re-verify the vision runtime, only reconcile the model-selector routes.
44
+ return JSON.stringify({
45
+ ...config,
46
+ imageInputVariants: { ...config.imageInputVariants, hidden: false },
47
+ })
48
+ }
49
+
50
+ function messageOf(error: unknown): string {
51
+ return error instanceof Error ? error.message : String(error)
52
+ }
53
+
54
+ /** Internal runtime source with prepare-before-swap semantics. */
55
+ export class VisionToolkitRuntimeManager {
56
+ private active: PreparedRuntimeGeneration | undefined
57
+ private generation = 0
58
+ private reconfigureTicket = 0
59
+ private lastError: string | undefined
60
+
61
+ constructor(
62
+ private readonly ctx: Context,
63
+ private readonly factory: RuntimeGenerationFactory = defaultFactory,
64
+ ) {}
65
+
66
+ /** The currently serving runtime; unavailable until one generation prepares. */
67
+ current(): VisionToolkitRuntime {
68
+ if (this.active === undefined) throw new Error('dsh-vision-toolkit runtime is not ready')
69
+ return this.active.runtime
70
+ }
71
+
72
+ /** Whether at least one generation is available. */
73
+ get ready(): boolean {
74
+ return this.active !== undefined
75
+ }
76
+
77
+ /** Resolve and fully prepare a candidate without changing the active runtime. */
78
+ async prepareCandidate(raw: VisionToolkitConfig): Promise<PreparedRuntimeGeneration> {
79
+ const config = resolveConfig(raw)
80
+ const resolvedFingerprint = fingerprint(config)
81
+ if (this.active?.fingerprint === resolvedFingerprint) {
82
+ return { ...this.active, config }
83
+ }
84
+ const runtime = await this.factory(this.ctx, config)
85
+ return { config, fingerprint: resolvedFingerprint, runtime }
86
+ }
87
+
88
+ /**
89
+ * Publish one already-prepared generation atomically.
90
+ * @param candidate - generation returned by {@link prepareCandidate}.
91
+ */
92
+ activateCandidate(candidate: PreparedRuntimeGeneration): void {
93
+ if (this.active?.fingerprint === candidate.fingerprint) {
94
+ this.active = candidate
95
+ this.lastError = undefined
96
+ return
97
+ }
98
+ this.reconfigureTicket += 1
99
+ this.active = candidate
100
+ this.generation += 1
101
+ this.lastError = undefined
102
+ this.ctx.logger.info(
103
+ 'dsh-vision-toolkit runtime generation=%d active (upstream %s @ %s, checkout %s)',
104
+ this.generation,
105
+ candidate.runtime.upstreamVersion.version,
106
+ candidate.runtime.upstreamVersion.commit,
107
+ candidate.runtime.upstreamVersion.path,
108
+ )
109
+ }
110
+
111
+ /** Prepare and publish the initial or explicitly validated generation. */
112
+ async initialize(raw: VisionToolkitConfig): Promise<void> {
113
+ try {
114
+ this.activateCandidate(await this.prepareCandidate(raw))
115
+ } catch (error) {
116
+ this.lastError = messageOf(error)
117
+ throw error
118
+ }
119
+ }
120
+
121
+ /**
122
+ * Apply an externally committed Settings generation. Concurrent edits are
123
+ * last-write-wins; a slower obsolete prepare can never overwrite a newer one.
124
+ * @returns whether this call published a new active generation.
125
+ */
126
+ async reconfigure(raw: VisionToolkitConfig): Promise<boolean> {
127
+ const ticket = ++this.reconfigureTicket
128
+ let candidate: PreparedRuntimeGeneration
129
+ try {
130
+ candidate = await this.prepareCandidate(raw)
131
+ } catch (error) {
132
+ if (ticket === this.reconfigureTicket) this.lastError = messageOf(error)
133
+ throw error
134
+ }
135
+ if (ticket !== this.reconfigureTicket) return false
136
+ const changed = this.active?.fingerprint !== candidate.fingerprint
137
+ this.active = candidate
138
+ if (changed) {
139
+ this.generation += 1
140
+ this.ctx.logger.info(
141
+ 'dsh-vision-toolkit Settings activated runtime generation=%d (upstream %s @ %s, checkout %s)',
142
+ this.generation,
143
+ candidate.runtime.upstreamVersion.version,
144
+ candidate.runtime.upstreamVersion.commit,
145
+ candidate.runtime.upstreamVersion.path,
146
+ )
147
+ }
148
+ this.lastError = undefined
149
+ return changed
150
+ }
151
+
152
+ /** Record a failed preflight while retaining the previous generation. */
153
+ recordFailure(error: unknown): void {
154
+ this.lastError = messageOf(error)
155
+ }
156
+
157
+ /** Secret-free status snapshot for health/configuration surfaces. */
158
+ status(): RuntimeManagerStatus {
159
+ if (this.active === undefined) {
160
+ return {
161
+ ready: false,
162
+ generation: this.generation,
163
+ ...(this.lastError === undefined ? {} : { lastError: this.lastError }),
164
+ }
165
+ }
166
+ return {
167
+ ready: true,
168
+ generation: this.generation,
169
+ activeConfig: this.active.config,
170
+ upstream: this.active.runtime.upstreamVersion,
171
+ ...(this.lastError === undefined ? {} : { lastError: this.lastError }),
172
+ }
173
+ }
174
+ }