simple-dynamsoft-mcp 6.2.0 → 6.3.0
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/.env.example +14 -0
- package/README.md +83 -12
- package/data/metadata/data-manifest.json +140 -0
- package/data/metadata/dynamsoft_sdks.json +203 -3
- package/package.json +10 -2
- package/scripts/prebuild-rag-index.mjs +24 -3
- package/scripts/run-gemini-tests.mjs +25 -0
- package/scripts/update-sdk-versions.mjs +342 -0
- package/src/gemini-retry.js +148 -0
- package/src/index.js +293 -25
- package/src/normalizers.js +67 -8
- package/src/rag.js +607 -63
- package/src/resource-index/builders.js +294 -0
- package/src/resource-index/config.js +57 -0
- package/src/resource-index/paths.js +15 -0
- package/src/resource-index/samples.js +244 -2
- package/src/resource-index/uri.js +10 -0
- package/src/resource-index/version-policy.js +11 -1
- package/src/resource-index.js +147 -6
package/.env.example
CHANGED
|
@@ -17,10 +17,18 @@ RAG_FALLBACK=fuse
|
|
|
17
17
|
# * GEMINI_EMBED_MODEL: models/embedding-001 | models/gemini-embedding-001 | gemini-embedding-001
|
|
18
18
|
# * GEMINI_API_BASE_URL: override for proxies (default https://generativelanguage.googleapis.com)
|
|
19
19
|
# * GEMINI_EMBED_BATCH_SIZE: batch size for Gemini embedding requests
|
|
20
|
+
# * GEMINI_RETRY_MAX_ATTEMPTS: max retry attempts for retryable Gemini errors
|
|
21
|
+
# * GEMINI_RETRY_BASE_DELAY_MS: base delay for exponential backoff
|
|
22
|
+
# * GEMINI_RETRY_MAX_DELAY_MS: max delay cap for exponential backoff
|
|
23
|
+
# * GEMINI_REQUEST_THROTTLE_MS: fixed delay between Gemini requests
|
|
20
24
|
# GEMINI_API_KEY=your_key
|
|
21
25
|
# GEMINI_EMBED_MODEL=gemini-embedding-001
|
|
22
26
|
# GEMINI_API_BASE_URL=https://generativelanguage.googleapis.com
|
|
23
27
|
# GEMINI_EMBED_BATCH_SIZE=16
|
|
28
|
+
# GEMINI_RETRY_MAX_ATTEMPTS=5
|
|
29
|
+
# GEMINI_RETRY_BASE_DELAY_MS=500
|
|
30
|
+
# GEMINI_RETRY_MAX_DELAY_MS=10000
|
|
31
|
+
# GEMINI_REQUEST_THROTTLE_MS=0
|
|
24
32
|
|
|
25
33
|
# Local embeddings (used when RAG_PROVIDER=local or fallback=local)
|
|
26
34
|
# * RAG_LOCAL_MODEL: Hugging Face model id (default Xenova/all-MiniLM-L6-v2)
|
|
@@ -52,9 +60,15 @@ RAG_FALLBACK=fuse
|
|
|
52
60
|
# * RAG_REBUILD: true to ignore cache and rebuild on startup/search
|
|
53
61
|
# * RAG_PREWARM: true to build the embedding index at startup
|
|
54
62
|
# * RAG_PREWARM_BLOCK: true to block startup until prewarm completes
|
|
63
|
+
# * RAG_PREBUILT_INDEX_AUTO_DOWNLOAD: auto-download prebuilt local index when local embeddings are selected
|
|
64
|
+
# * RAG_PREBUILT_INDEX_URL: override prebuilt index archive URL (default GitHub release asset for current package version)
|
|
65
|
+
# * RAG_PREBUILT_INDEX_TIMEOUT_MS: timeout for prebuilt index download request
|
|
55
66
|
# RAG_REBUILD=false
|
|
56
67
|
# RAG_PREWARM=false
|
|
57
68
|
# RAG_PREWARM_BLOCK=false
|
|
69
|
+
# RAG_PREBUILT_INDEX_AUTO_DOWNLOAD=true
|
|
70
|
+
# RAG_PREBUILT_INDEX_URL=
|
|
71
|
+
# RAG_PREBUILT_INDEX_TIMEOUT_MS=180000
|
|
58
72
|
|
|
59
73
|
# Optional data submodule sync on server startup
|
|
60
74
|
# * DATA_SYNC_ON_START: true to fetch + fast-forward configured submodules
|
package/README.md
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
MCP (Model Context Protocol) server that enables AI assistants to write correct code with Dynamsoft SDKs. It provides actual working code snippets, documentation links, and API guidance for:
|
|
4
4
|
|
|
5
|
+
- **Dynamsoft Capture Vision (DCV)** - Unified workflows for VIN, MRZ, document normalization, driver license parsing, and more
|
|
5
6
|
- **Dynamsoft Barcode Reader Mobile** - Android (Java/Kotlin) and iOS (Swift)
|
|
6
7
|
- **Dynamsoft Barcode Reader Server/Desktop** - Python, .NET, Java, C++, Node.js
|
|
7
8
|
- **Dynamsoft Barcode Reader Web** - JavaScript/TypeScript barcode scanning
|
|
@@ -16,7 +17,7 @@ https://github.com/user-attachments/assets/cc1c5f4b-1461-4462-897a-75abc20d62a6
|
|
|
16
17
|
|
|
17
18
|
- **Code Snippets**: Real, working source code from official Dynamsoft samples
|
|
18
19
|
- **Trial License Included**: Ready-to-use trial license for quick testing
|
|
19
|
-
- **Multiple SDKs**: Barcode Reader (Mobile/Web/Server) + Dynamic Web TWAIN + Document Viewer
|
|
20
|
+
- **Multiple SDKs**: Capture Vision + Barcode Reader (Mobile/Web/Server) + Dynamic Web TWAIN + Document Viewer
|
|
20
21
|
- **Multiple API Levels**: High-level (simple) and low-level (advanced) options
|
|
21
22
|
- **Stdio MCP server**: Runs on stdio. Works with any MCP-capable client.
|
|
22
23
|
- **Resource-efficient discovery**: Resources are discovered via tools (semantic RAG search with fuzzy fallback + resource links). Only a small pinned set is listed by default; heavy content is fetched on-demand with `resources/read`.
|
|
@@ -184,6 +185,9 @@ Example:
|
|
|
184
185
|
Commonly used settings:
|
|
185
186
|
- `RAG_PROVIDER`: `auto` | `gemini` | `local` | `fuse`
|
|
186
187
|
- `RAG_FALLBACK`: `fuse` | `local` | `none`
|
|
188
|
+
- `RAG_PREBUILT_INDEX_AUTO_DOWNLOAD`: `true` by default; auto-fetch prebuilt local index when local embeddings are selected
|
|
189
|
+
- `RAG_PREBUILT_INDEX_URL`: override release asset URL for prebuilt index archive
|
|
190
|
+
- `RAG_PREBUILT_INDEX_TIMEOUT_MS`: download timeout for prebuilt index fetch
|
|
187
191
|
- `MCP_DATA_DIR`: use a preloaded local data folder (`metadata/`, `samples/`, `documentation/`)
|
|
188
192
|
- `MCP_DATA_AUTO_DOWNLOAD`: allow startup archive download when bundled data is unavailable
|
|
189
193
|
- `MCP_DATA_REFRESH_ON_START`: force re-download of pinned archives on startup
|
|
@@ -218,7 +222,7 @@ Example (`.vscode/mcp.json`):
|
|
|
218
222
|
"args": [
|
|
219
223
|
"-y",
|
|
220
224
|
"--package",
|
|
221
|
-
".tools/simple-dynamsoft-mcp/simple-dynamsoft-mcp
|
|
225
|
+
".tools/simple-dynamsoft-mcp/simple-dynamsoft-mcp-<version>.tgz",
|
|
222
226
|
"simple-dynamsoft-mcp"
|
|
223
227
|
],
|
|
224
228
|
"env": {
|
|
@@ -237,12 +241,27 @@ Example (`.vscode/mcp.json`):
|
|
|
237
241
|
Notes:
|
|
238
242
|
- Use absolute paths if your MCP client does not resolve relative paths from workspace root.
|
|
239
243
|
- `RAG_REBUILD` must stay `false` to reuse prebuilt cache files.
|
|
240
|
-
-
|
|
244
|
+
- Runtime auto-download is enabled by default (`RAG_PREBUILT_INDEX_AUTO_DOWNLOAD=true`) when provider resolution reaches local embeddings (primary or fallback).
|
|
245
|
+
- Default prebuilt URL pattern: `https://github.com/yushulx/simple-dynamsoft-mcp/releases/download/v<version>/prebuilt-rag-index-<version>.tar.gz`.
|
|
246
|
+
- Downloaded prebuilt cache is accepted when package version matches (with provider/model/payload sanity checks).
|
|
241
247
|
- Prebuilt cache is used whenever provider execution resolves to local embeddings (primary or fallback).
|
|
242
248
|
|
|
243
249
|
## Supported SDKs
|
|
244
250
|
|
|
245
|
-
### Dynamsoft
|
|
251
|
+
### Dynamsoft Capture Vision (DCV)
|
|
252
|
+
|
|
253
|
+
DCV is a superset architecture that aggregates DBR, DLR, DDN, DCP, and DCE into one pluggable pipeline.
|
|
254
|
+
|
|
255
|
+
Use **DBR** when you only need barcode decoding.
|
|
256
|
+
Use **DCV** when your workflow includes VIN, MRZ/passport/ID, driver license parsing, document detection/normalization/auto-capture/cropping, or multi-task capture-vision pipelines.
|
|
257
|
+
|
|
258
|
+
**DCV editions covered in this MCP server:**
|
|
259
|
+
- **Core docs** - architecture and cross-product concepts
|
|
260
|
+
- **Web (JavaScript)**
|
|
261
|
+
- **Server/Desktop** - Python, .NET, Java, C++, Node.js
|
|
262
|
+
- **Mobile** - Android, iOS, Flutter, React Native, .NET MAUI (+ SPM package sample)
|
|
263
|
+
|
|
264
|
+
### Dynamsoft Barcode Reader Mobile (latest)
|
|
246
265
|
|
|
247
266
|
**Platforms:** Android, iOS, Flutter, React Native, .NET MAUI
|
|
248
267
|
|
|
@@ -259,7 +278,7 @@ Notes:
|
|
|
259
278
|
- ScanSingleBarcode, ScanMultipleBarcodes, ScanSingleBarcodeSwiftUI
|
|
260
279
|
- DecodeWithCameraEnhancer, DecodeWithAVCaptureSession, DecodeFromAnImage
|
|
261
280
|
|
|
262
|
-
### Dynamsoft Barcode Reader Server/Desktop (
|
|
281
|
+
### Dynamsoft Barcode Reader Server/Desktop (latest)
|
|
263
282
|
|
|
264
283
|
**Platforms:** Python, .NET, Java, C++, Node.js
|
|
265
284
|
|
|
@@ -267,11 +286,11 @@ Notes:
|
|
|
267
286
|
|
|
268
287
|
**Server/Desktop samples:** Pulled from platform-specific sample repositories in `data/samples/`.
|
|
269
288
|
|
|
270
|
-
### Dynamsoft Barcode Reader Web (
|
|
289
|
+
### Dynamsoft Barcode Reader Web (latest)
|
|
271
290
|
|
|
272
291
|
**Installation:** `npm install dynamsoft-barcode-reader-bundle`
|
|
273
292
|
|
|
274
|
-
**CDN:** `https://cdn.jsdelivr.net/npm/dynamsoft-barcode-reader-bundle@
|
|
293
|
+
**CDN:** `https://cdn.jsdelivr.net/npm/dynamsoft-barcode-reader-bundle@latest/dist/dbr.bundle.min.js`
|
|
275
294
|
|
|
276
295
|
**Samples:**
|
|
277
296
|
- **hello-world** - Basic barcode scanning from camera
|
|
@@ -279,7 +298,7 @@ Notes:
|
|
|
279
298
|
- **frameworks/** - React, Vue, Angular, Next.js, PWA samples
|
|
280
299
|
- **scenarios/** - Multi-image reading, localize an item, driver license parsing
|
|
281
300
|
|
|
282
|
-
### Dynamic Web TWAIN (
|
|
301
|
+
### Dynamic Web TWAIN (latest)
|
|
283
302
|
|
|
284
303
|
**Installation:** `npm install dwt`
|
|
285
304
|
|
|
@@ -292,7 +311,7 @@ Notes:
|
|
|
292
311
|
- **classification** - Document classification and tagging
|
|
293
312
|
- **UI-customization** - Customize viewer and scan UI
|
|
294
313
|
|
|
295
|
-
### Dynamsoft Document Viewer (
|
|
314
|
+
### Dynamsoft Document Viewer (latest)
|
|
296
315
|
|
|
297
316
|
**Installation:** `npm install dynamsoft-document-viewer`
|
|
298
317
|
|
|
@@ -326,6 +345,13 @@ After connecting the MCP server, you can ask your AI assistant:
|
|
|
326
345
|
- "Get the React sample for web barcode scanning"
|
|
327
346
|
- "How do I decode barcodes from an image in JavaScript?"
|
|
328
347
|
|
|
348
|
+
### Capture Vision (DCV)
|
|
349
|
+
- "Find a DCV sample for MRZ scanning in Python"
|
|
350
|
+
- "Get a VIN scanning sample for Java or C++"
|
|
351
|
+
- "Show me DCV document normalization samples for mobile"
|
|
352
|
+
- "I need driver license parsing; should I use DBR or DCV?"
|
|
353
|
+
- "List DCV server samples and generate a project from MRZScanner"
|
|
354
|
+
|
|
329
355
|
### Dynamic Web TWAIN
|
|
330
356
|
- "Create a web page that scans documents from a TWAIN scanner"
|
|
331
357
|
- "Show me how to save scanned documents as PDF"
|
|
@@ -336,6 +362,10 @@ After connecting the MCP server, you can ask your AI assistant:
|
|
|
336
362
|
|
|
337
363
|
## SDK Documentation
|
|
338
364
|
|
|
365
|
+
- **DCV Core**: https://www.dynamsoft.com/capture-vision/docs/core/
|
|
366
|
+
- **DCV Mobile**: https://www.dynamsoft.com/capture-vision/docs/mobile/
|
|
367
|
+
- **DCV Server/Desktop**: https://www.dynamsoft.com/capture-vision/docs/server/
|
|
368
|
+
- **DCV Web**: https://www.dynamsoft.com/capture-vision/docs/web/
|
|
339
369
|
- **Mobile Android**: https://www.dynamsoft.com/barcode-reader/docs/mobile/programming/android/user-guide.html
|
|
340
370
|
- **Mobile iOS**: https://www.dynamsoft.com/barcode-reader/docs/mobile/programming/objectivec-swift/user-guide.html
|
|
341
371
|
- **Python**: https://www.dynamsoft.com/barcode-reader/docs/server/programming/python/user-guide.html
|
|
@@ -360,12 +390,26 @@ data/
|
|
|
360
390
|
| |-- dynamsoft-barcode-reader-java
|
|
361
391
|
| |-- dynamsoft-barcode-reader-c-cpp
|
|
362
392
|
| |-- dynamsoft-capture-vision-nodejs
|
|
393
|
+
| |-- dynamsoft-capture-vision-c-cpp
|
|
394
|
+
| |-- dynamsoft-capture-vision-dotnet
|
|
395
|
+
| |-- dynamsoft-capture-vision-java
|
|
396
|
+
| |-- dynamsoft-capture-vision-python
|
|
397
|
+
| |-- dynamsoft-capture-vision-mobile
|
|
398
|
+
| |-- dynamsoft-capture-vision-javascript
|
|
399
|
+
| |-- dynamsoft-capture-vision-react-native
|
|
400
|
+
| |-- dynamsoft-capture-vision-maui
|
|
401
|
+
| |-- dynamsoft-capture-vision-flutter
|
|
402
|
+
| |-- dynamsoft-capture-vision-spm
|
|
363
403
|
| |-- dynamic-web-twain
|
|
364
404
|
| `-- dynamsoft-document-viewer
|
|
365
405
|
|-- documentation/ # Git submodules
|
|
366
406
|
| |-- barcode-reader-docs-js
|
|
367
407
|
| |-- barcode-reader-docs-mobile
|
|
368
408
|
| |-- barcode-reader-docs-server
|
|
409
|
+
| |-- capture-vision-docs
|
|
410
|
+
| |-- capture-vision-docs-js
|
|
411
|
+
| |-- capture-vision-docs-server
|
|
412
|
+
| |-- capture-vision-docs-mobile
|
|
369
413
|
| |-- web-twain-docs
|
|
370
414
|
| `-- document-viewer-docs
|
|
371
415
|
`-- .rag-cache/
|
|
@@ -392,6 +436,7 @@ src/
|
|
|
392
436
|
`-- builders.js
|
|
393
437
|
scripts/
|
|
394
438
|
|-- sync-submodules.mjs # CLI wrapper for data:sync
|
|
439
|
+
|-- update-sdk-versions.mjs # Sync SDK versions from docs structures
|
|
395
440
|
|-- update-data-lock.mjs # Generate data-manifest from submodule HEADs
|
|
396
441
|
|-- verify-data-lock.mjs # Verify manifest matches submodule HEADs
|
|
397
442
|
`-- prebuild-rag-index.mjs # Build local RAG index cache artifacts
|
|
@@ -419,6 +464,10 @@ test/
|
|
|
419
464
|
- `npm run data:lock`
|
|
420
465
|
- Verify lock manifest matches submodule HEADs:
|
|
421
466
|
- `npm run data:verify-lock`
|
|
467
|
+
- Sync SDK versions from docs sources:
|
|
468
|
+
- `npm run data:versions`
|
|
469
|
+
- Strict source-structure verification (fail on unresolved sources):
|
|
470
|
+
- `npm run data:verify-versions:strict`
|
|
422
471
|
|
|
423
472
|
Optional startup sync:
|
|
424
473
|
- `DATA_SYNC_ON_START=true`
|
|
@@ -445,29 +494,36 @@ At startup, the server logs data mode/path to stderr:
|
|
|
445
494
|
- CI jobs:
|
|
446
495
|
- `test_fuse` on `ubuntu-latest` runs `npm run test:fuse` (stdio + HTTP gateway + package-runtime with fuse provider)
|
|
447
496
|
- `test_local_provider` on `ubuntu-latest` restores RAG caches, runs `npm run rag:prebuild`, then `npm run test:local`
|
|
497
|
+
- `test_gemini_provider` on `ubuntu-latest` (when `GEMINI_API_KEY` secret exists) prebuilds gemini RAG cache, then runs `npm run test:gemini`
|
|
448
498
|
- Daily data-lock refresh workflow: `.github/workflows/update-data-lock.yml`
|
|
449
499
|
- Refresh schedule: daily at 08:00 UTC (`0 8 * * *`) and manual trigger supported.
|
|
500
|
+
- Refresh workflow runs strict source checks (`data:versions:strict`, `data:verify-versions:strict`) to fail fast when external docs/sample structures drift.
|
|
501
|
+
- Refresh workflow creates/updates PR `chore/daily-data-refresh` and enables auto-merge when checks pass (requires repo settings support).
|
|
450
502
|
- Release workflow: `.github/workflows/release.yml`
|
|
451
503
|
- Release behavior:
|
|
452
504
|
- Creates GitHub release when `package.json` version changes on `main`
|
|
453
|
-
- Attaches `npm pack` artifact and prebuilt
|
|
505
|
+
- Attaches `npm pack` artifact and prebuilt RAG index artifact (release workflow requires `GEMINI_API_KEY` for gemini prebuild path)
|
|
454
506
|
- Publishes the package to npm from the release workflow (OIDC trusted publishing)
|
|
455
507
|
|
|
456
508
|
## Testing
|
|
457
509
|
|
|
458
510
|
- `npm test`: default test entry (currently `npm run test:fuse`)
|
|
511
|
+
- `npm run test:unit`: unit tests (retry/backoff/config helpers)
|
|
459
512
|
- `npm run test:fuse`: integration coverage for fuse provider
|
|
460
513
|
- `npm run test:local`: integration coverage for local provider
|
|
514
|
+
- `npm run test:gemini`: integration coverage for gemini provider (requires `GEMINI_API_KEY`)
|
|
461
515
|
- `npm run test:stdio`: stdio transport integration tests
|
|
462
516
|
- `npm run test:http`: streamable HTTP (supergateway) integration tests
|
|
463
517
|
- `npm run test:package`: `npm pack` + `npm exec --package` runtime test
|
|
464
518
|
- Optional env toggles:
|
|
465
519
|
- `RUN_FUSE_PROVIDER_TESTS=true|false`
|
|
466
520
|
- `RUN_LOCAL_PROVIDER_TESTS=true|false`
|
|
521
|
+
- `RUN_GEMINI_PROVIDER_TESTS=true|false`
|
|
467
522
|
|
|
468
523
|
## Using Search-Based Discovery (Recommended)
|
|
469
524
|
|
|
470
525
|
- On session start, let your client call `tools/list` and `resources/list` (pinned only, not exhaustive).
|
|
526
|
+
- Read pinned `doc://product-selection` first to choose DBR vs DCV correctly for the scenario.
|
|
471
527
|
- For any query, call `search`; it uses semantic RAG retrieval (with fuzzy fallback) and returns `resource_link` entries.
|
|
472
528
|
- Read only the links you need via `resources/read` to avoid bloating the context window.
|
|
473
529
|
- If unsure what to search, call `get_index` first to see what is available.
|
|
@@ -483,20 +539,34 @@ Key env vars:
|
|
|
483
539
|
- `RAG_FALLBACK`: `fuse` | `local` | `none`
|
|
484
540
|
- `GEMINI_API_KEY`: required for remote embeddings
|
|
485
541
|
- `GEMINI_EMBED_MODEL`: e.g. `models/embedding-001` or `models/gemini-embedding-001`
|
|
542
|
+
- `GEMINI_RETRY_MAX_ATTEMPTS`: max retry attempts for retryable errors (default `5`)
|
|
543
|
+
- `GEMINI_RETRY_BASE_DELAY_MS`: exponential backoff base delay (default `500`)
|
|
544
|
+
- `GEMINI_RETRY_MAX_DELAY_MS`: exponential backoff max delay cap (default `10000`)
|
|
545
|
+
- `GEMINI_REQUEST_THROTTLE_MS`: fixed delay between Gemini requests (default `0`)
|
|
486
546
|
- `RAG_LOCAL_MODEL`: default `Xenova/all-MiniLM-L6-v2`
|
|
487
547
|
- `RAG_CACHE_DIR`: default `data/.rag-cache`
|
|
548
|
+
- `RAG_PREBUILT_INDEX_AUTO_DOWNLOAD`: default `true`
|
|
549
|
+
- `RAG_PREBUILT_INDEX_URL`: override release prebuilt index asset URL
|
|
550
|
+
- `RAG_PREBUILT_INDEX_TIMEOUT_MS`: default `180000`
|
|
488
551
|
|
|
489
552
|
Local embeddings download the model on first run and cache under `data/.rag-cache/models`.
|
|
490
553
|
Advanced tuning:
|
|
491
554
|
- `RAG_CHUNK_SIZE`, `RAG_CHUNK_OVERLAP`, `RAG_MAX_CHUNKS_PER_DOC`, `RAG_MAX_TEXT_CHARS`
|
|
492
555
|
- `RAG_MIN_SCORE`, `RAG_INCLUDE_SCORE`, `RAG_REBUILD`, `RAG_PREWARM`, `RAG_PREWARM_BLOCK`, `RAG_LOCAL_QUANTIZED`, `GEMINI_EMBED_BATCH_SIZE`, `RAG_MODEL_CACHE_DIR`
|
|
493
556
|
|
|
557
|
+
Gemini hardening behavior:
|
|
558
|
+
- Retryable responses (`429`, `503`, transient `5xx`) use exponential backoff with jitter.
|
|
559
|
+
- Optional throttling can pace request bursts with `GEMINI_REQUEST_THROTTLE_MS`.
|
|
560
|
+
- Batch embedding adaptively downgrades batch size on repeated rate-limit responses.
|
|
561
|
+
- Index build progress is checkpointed to disk and resumes from checkpoints after failures.
|
|
562
|
+
|
|
494
563
|
For local dev, you can also use a `.env` file (see `.env.example`).
|
|
495
564
|
|
|
496
565
|
## Version Policy
|
|
497
566
|
|
|
498
|
-
- This MCP server serves only the latest major version for each product (DBR, DWT, DDV).
|
|
567
|
+
- This MCP server serves only the latest major version for each product (DCV, DBR, DWT, DDV).
|
|
499
568
|
- DBR legacy docs are linked for v9 and v10. Requests below v9 are refused.
|
|
569
|
+
- DCV has no legacy archive links in this server.
|
|
500
570
|
- DWT archived docs are available for v16.1.1+ (specific versions are hardcoded).
|
|
501
571
|
- DDV has no legacy archive links in this server.
|
|
502
572
|
|
|
@@ -513,7 +583,8 @@ Update the corresponding submodule under `data/samples/`.
|
|
|
513
583
|
|
|
514
584
|
### Update SDK Info
|
|
515
585
|
|
|
516
|
-
|
|
586
|
+
Use `npm run data:versions` (or `npm run data:versions:strict`) to refresh SDK versions from docs sources.
|
|
587
|
+
Edit `data/metadata/dynamsoft_sdks.json` manually only for non-version metadata updates (for example docs URLs, installation commands, or platform definitions).
|
|
517
588
|
|
|
518
589
|
## License
|
|
519
590
|
|
|
@@ -31,6 +31,46 @@
|
|
|
31
31
|
"commit": "6c5404429140195bd8f18f48fbc3f2d3f2524e74",
|
|
32
32
|
"archiveUrl": "https://codeload.github.com/dynamsoft-docs/barcode-reader-docs-server/zip/6c5404429140195bd8f18f48fbc3f2d3f2524e74"
|
|
33
33
|
},
|
|
34
|
+
{
|
|
35
|
+
"name": "data/documentation/capture-vision-docs",
|
|
36
|
+
"path": "documentation/capture-vision-docs",
|
|
37
|
+
"url": "https://github.com/dynamsoft-docs/capture-vision-docs.git",
|
|
38
|
+
"branch": "main",
|
|
39
|
+
"owner": "dynamsoft-docs",
|
|
40
|
+
"repo": "capture-vision-docs",
|
|
41
|
+
"commit": "8c49a13548f2beb0152dd3497993edb80ed7f53a",
|
|
42
|
+
"archiveUrl": "https://codeload.github.com/dynamsoft-docs/capture-vision-docs/zip/8c49a13548f2beb0152dd3497993edb80ed7f53a"
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"name": "data/documentation/capture-vision-docs-js",
|
|
46
|
+
"path": "documentation/capture-vision-docs-js",
|
|
47
|
+
"url": "https://github.com/dynamsoft-docs/capture-vision-docs-js.git",
|
|
48
|
+
"branch": "main",
|
|
49
|
+
"owner": "dynamsoft-docs",
|
|
50
|
+
"repo": "capture-vision-docs-js",
|
|
51
|
+
"commit": "3137b83d966e795190a9681e544045a5e526c083",
|
|
52
|
+
"archiveUrl": "https://codeload.github.com/dynamsoft-docs/capture-vision-docs-js/zip/3137b83d966e795190a9681e544045a5e526c083"
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"name": "data/documentation/capture-vision-docs-mobile",
|
|
56
|
+
"path": "documentation/capture-vision-docs-mobile",
|
|
57
|
+
"url": "https://github.com/dynamsoft-docs/capture-vision-docs-mobile.git",
|
|
58
|
+
"branch": "main",
|
|
59
|
+
"owner": "dynamsoft-docs",
|
|
60
|
+
"repo": "capture-vision-docs-mobile",
|
|
61
|
+
"commit": "618991bac7908e65aeb4669bcd2dd0f57c84bca3",
|
|
62
|
+
"archiveUrl": "https://codeload.github.com/dynamsoft-docs/capture-vision-docs-mobile/zip/618991bac7908e65aeb4669bcd2dd0f57c84bca3"
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
"name": "data/documentation/capture-vision-docs-server",
|
|
66
|
+
"path": "documentation/capture-vision-docs-server",
|
|
67
|
+
"url": "https://github.com/dynamsoft-docs/capture-vision-docs-server.git",
|
|
68
|
+
"branch": "main",
|
|
69
|
+
"owner": "dynamsoft-docs",
|
|
70
|
+
"repo": "capture-vision-docs-server",
|
|
71
|
+
"commit": "4c37a5f6c816a1e90aee4cb03267529c7d7b307e",
|
|
72
|
+
"archiveUrl": "https://codeload.github.com/dynamsoft-docs/capture-vision-docs-server/zip/4c37a5f6c816a1e90aee4cb03267529c7d7b307e"
|
|
73
|
+
},
|
|
34
74
|
{
|
|
35
75
|
"name": "data/documentation/document-viewer-docs",
|
|
36
76
|
"path": "documentation/document-viewer-docs",
|
|
@@ -151,6 +191,76 @@
|
|
|
151
191
|
"commit": "acb3ac877853f1543ff086fb15df30335b0d4cbe",
|
|
152
192
|
"archiveUrl": "https://codeload.github.com/Dynamsoft/barcode-reader-react-native-samples/zip/acb3ac877853f1543ff086fb15df30335b0d4cbe"
|
|
153
193
|
},
|
|
194
|
+
{
|
|
195
|
+
"name": "data/samples/dynamsoft-capture-vision-c-cpp",
|
|
196
|
+
"path": "samples/dynamsoft-capture-vision-c-cpp",
|
|
197
|
+
"url": "https://github.com/Dynamsoft/capture-vision-cpp-samples.git",
|
|
198
|
+
"branch": "main",
|
|
199
|
+
"owner": "Dynamsoft",
|
|
200
|
+
"repo": "capture-vision-cpp-samples",
|
|
201
|
+
"commit": "6d37fa7f16bc84cbd2b78651549cb900cf222571",
|
|
202
|
+
"archiveUrl": "https://codeload.github.com/Dynamsoft/capture-vision-cpp-samples/zip/6d37fa7f16bc84cbd2b78651549cb900cf222571"
|
|
203
|
+
},
|
|
204
|
+
{
|
|
205
|
+
"name": "data/samples/dynamsoft-capture-vision-dotnet",
|
|
206
|
+
"path": "samples/dynamsoft-capture-vision-dotnet",
|
|
207
|
+
"url": "https://github.com/Dynamsoft/capture-vision-dotnet-samples.git",
|
|
208
|
+
"branch": "main",
|
|
209
|
+
"owner": "Dynamsoft",
|
|
210
|
+
"repo": "capture-vision-dotnet-samples",
|
|
211
|
+
"commit": "1ac2d63ea45d63ee7421725e351936ca5c321ce2",
|
|
212
|
+
"archiveUrl": "https://codeload.github.com/Dynamsoft/capture-vision-dotnet-samples/zip/1ac2d63ea45d63ee7421725e351936ca5c321ce2"
|
|
213
|
+
},
|
|
214
|
+
{
|
|
215
|
+
"name": "data/samples/dynamsoft-capture-vision-flutter",
|
|
216
|
+
"path": "samples/dynamsoft-capture-vision-flutter",
|
|
217
|
+
"url": "https://github.com/Dynamsoft/capture-vision-flutter-samples.git",
|
|
218
|
+
"branch": "main",
|
|
219
|
+
"owner": "Dynamsoft",
|
|
220
|
+
"repo": "capture-vision-flutter-samples",
|
|
221
|
+
"commit": "7e85ffddaaf2a9b75c21538d60f64fbe733f3227",
|
|
222
|
+
"archiveUrl": "https://codeload.github.com/Dynamsoft/capture-vision-flutter-samples/zip/7e85ffddaaf2a9b75c21538d60f64fbe733f3227"
|
|
223
|
+
},
|
|
224
|
+
{
|
|
225
|
+
"name": "data/samples/dynamsoft-capture-vision-java",
|
|
226
|
+
"path": "samples/dynamsoft-capture-vision-java",
|
|
227
|
+
"url": "https://github.com/Dynamsoft/capture-vision-java-samples.git",
|
|
228
|
+
"branch": "main",
|
|
229
|
+
"owner": "Dynamsoft",
|
|
230
|
+
"repo": "capture-vision-java-samples",
|
|
231
|
+
"commit": "974c436210232a8579fc68b98f610c9d46e86979",
|
|
232
|
+
"archiveUrl": "https://codeload.github.com/Dynamsoft/capture-vision-java-samples/zip/974c436210232a8579fc68b98f610c9d46e86979"
|
|
233
|
+
},
|
|
234
|
+
{
|
|
235
|
+
"name": "data/samples/dynamsoft-capture-vision-javascript",
|
|
236
|
+
"path": "samples/dynamsoft-capture-vision-javascript",
|
|
237
|
+
"url": "https://github.com/Dynamsoft/capture-vision-javascript-samples.git",
|
|
238
|
+
"branch": "main",
|
|
239
|
+
"owner": "Dynamsoft",
|
|
240
|
+
"repo": "capture-vision-javascript-samples",
|
|
241
|
+
"commit": "13f8885356247a7d369fd290f0b81b81e976a144",
|
|
242
|
+
"archiveUrl": "https://codeload.github.com/Dynamsoft/capture-vision-javascript-samples/zip/13f8885356247a7d369fd290f0b81b81e976a144"
|
|
243
|
+
},
|
|
244
|
+
{
|
|
245
|
+
"name": "data/samples/dynamsoft-capture-vision-maui",
|
|
246
|
+
"path": "samples/dynamsoft-capture-vision-maui",
|
|
247
|
+
"url": "https://github.com/Dynamsoft/capture-vision-maui-samples.git",
|
|
248
|
+
"branch": "main",
|
|
249
|
+
"owner": "Dynamsoft",
|
|
250
|
+
"repo": "capture-vision-maui-samples",
|
|
251
|
+
"commit": "5b715da9f65569171d830a12c0ba0a68c536176c",
|
|
252
|
+
"archiveUrl": "https://codeload.github.com/Dynamsoft/capture-vision-maui-samples/zip/5b715da9f65569171d830a12c0ba0a68c536176c"
|
|
253
|
+
},
|
|
254
|
+
{
|
|
255
|
+
"name": "data/samples/dynamsoft-capture-vision-mobile",
|
|
256
|
+
"path": "samples/dynamsoft-capture-vision-mobile",
|
|
257
|
+
"url": "https://github.com/Dynamsoft/capture-vision-mobile-samples.git",
|
|
258
|
+
"branch": "main",
|
|
259
|
+
"owner": "Dynamsoft",
|
|
260
|
+
"repo": "capture-vision-mobile-samples",
|
|
261
|
+
"commit": "d1232caf8738560ed11f911add57ad6b84c5531b",
|
|
262
|
+
"archiveUrl": "https://codeload.github.com/Dynamsoft/capture-vision-mobile-samples/zip/d1232caf8738560ed11f911add57ad6b84c5531b"
|
|
263
|
+
},
|
|
154
264
|
{
|
|
155
265
|
"name": "data/samples/dynamsoft-capture-vision-nodejs",
|
|
156
266
|
"path": "samples/dynamsoft-capture-vision-nodejs",
|
|
@@ -161,6 +271,36 @@
|
|
|
161
271
|
"commit": "380fe5f0bc10c8776958353cd349beaec6962fcb",
|
|
162
272
|
"archiveUrl": "https://codeload.github.com/Dynamsoft/capture-vision-nodejs-samples/zip/380fe5f0bc10c8776958353cd349beaec6962fcb"
|
|
163
273
|
},
|
|
274
|
+
{
|
|
275
|
+
"name": "data/samples/dynamsoft-capture-vision-python",
|
|
276
|
+
"path": "samples/dynamsoft-capture-vision-python",
|
|
277
|
+
"url": "https://github.com/Dynamsoft/capture-vision-python-samples.git",
|
|
278
|
+
"branch": "main",
|
|
279
|
+
"owner": "Dynamsoft",
|
|
280
|
+
"repo": "capture-vision-python-samples",
|
|
281
|
+
"commit": "8fdf4c63d5e35bdcc4993a068ba4bcade30e91a2",
|
|
282
|
+
"archiveUrl": "https://codeload.github.com/Dynamsoft/capture-vision-python-samples/zip/8fdf4c63d5e35bdcc4993a068ba4bcade30e91a2"
|
|
283
|
+
},
|
|
284
|
+
{
|
|
285
|
+
"name": "data/samples/dynamsoft-capture-vision-react-native",
|
|
286
|
+
"path": "samples/dynamsoft-capture-vision-react-native",
|
|
287
|
+
"url": "https://github.com/Dynamsoft/capture-vision-react-native-samples.git",
|
|
288
|
+
"branch": "main",
|
|
289
|
+
"owner": "Dynamsoft",
|
|
290
|
+
"repo": "capture-vision-react-native-samples",
|
|
291
|
+
"commit": "c00158c5f3be2716a391d2f6f1412f9c8a2ac52f",
|
|
292
|
+
"archiveUrl": "https://codeload.github.com/Dynamsoft/capture-vision-react-native-samples/zip/c00158c5f3be2716a391d2f6f1412f9c8a2ac52f"
|
|
293
|
+
},
|
|
294
|
+
{
|
|
295
|
+
"name": "data/samples/dynamsoft-capture-vision-spm",
|
|
296
|
+
"path": "samples/dynamsoft-capture-vision-spm",
|
|
297
|
+
"url": "https://github.com/Dynamsoft/capture-vision-spm.git",
|
|
298
|
+
"branch": "main",
|
|
299
|
+
"owner": "Dynamsoft",
|
|
300
|
+
"repo": "capture-vision-spm",
|
|
301
|
+
"commit": "40b45edde33020d23e18a90e5ddc306ef7390ab7",
|
|
302
|
+
"archiveUrl": "https://codeload.github.com/Dynamsoft/capture-vision-spm/zip/40b45edde33020d23e18a90e5ddc306ef7390ab7"
|
|
303
|
+
},
|
|
164
304
|
{
|
|
165
305
|
"name": "data/samples/dynamsoft-document-viewer",
|
|
166
306
|
"path": "samples/dynamsoft-document-viewer",
|