@bismawy/pi-vision-watcher 1.0.14 → 1.1.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/CHANGELOG.md ADDED
@@ -0,0 +1,99 @@
1
+ # Changelog
2
+
3
+ ## [1.1.0] - 2026-10-05
4
+
5
+ ### Changed
6
+ - **Breaking:** rebind four picker chords that collided with OS, terminal, readline and Pi
7
+ shortcuts. VTE (GNOME Terminal) closes the window on `ctrl+shift+q`, and POSIX tty flow
8
+ control swallows `ctrl+q`, so the previous bindings were unusable or destructive on Linux:
9
+ - `ctrl+q` → `ctrl+enter` (failover chain toggle)
10
+ - `ctrl+shift+q` → `ctrl+shift+r` (reset failover chain)
11
+ - `ctrl+a` → `alt+a` · `ctrl+alt+a` (async paste handoff)
12
+ - `ctrl+t` → `ctrl+shift+t` (thinking ladder)
13
+ - Vision and failover markers now use single-cell glyphs (`✦`, `⇆`) instead of emoji, which
14
+ are double-width and broke column alignment. The symbols in the detail pane carry the same
15
+ colour as the badges they explain.
16
+ - Detail pane labels read `Vision-capable ✦ :` / `Fallback ⇆ :` and the async row prints its
17
+ own chord beside the state.
18
+ - `package.json` `description` now leads with the README tagline, per the `/arnative-pi`
19
+ manifest standard — `pi.dev/packages` renders this field verbatim as the package card
20
+ description. (Previously staged as `[Unreleased]` in PR #1.)
21
+
22
+ ### Added
23
+ - `alt+↑` / `alt+↓` reorder the highlighted model; the failover chain follows list order and
24
+ the `None` row stays pinned first.
25
+
26
+ ### Fixed
27
+ - Pressing `enter` while a filter was active silently saved the previously selected primary,
28
+ which the user could not see in the filtered list. `enter` now adopts the highlighted match.
29
+ - Removed the `f2` binding from the README; it was documented but never implemented.
30
+
31
+ ### Notes
32
+ - The three `ctrl+` chords are no-ops on legacy terminals that do not speak the Kitty Keyboard
33
+ Protocol (no wrong action fires). They work on Windows Terminal/conhost, X11, macOS, tmux
34
+ and SSH.
35
+ - `ctrl+alt+a` is the international-layout-safe half of the async chord, where AltGr occupies
36
+ `alt+a`.
37
+
38
+ ---
39
+
40
+ ## [1.0.15] - 2026-09-28
41
+
42
+ ### Added
43
+ - Standard `CHANGELOG.md` tracking repository release history according to Keep a Changelog.
44
+ - Added `dev` script (`pi --extension ./vision-watcher.ts`) to `package.json` for live local testing without installation.
45
+
46
+ ### Changed
47
+ - Refreshed README presentation layout, badge aesthetics, and structure to match the standard `pi-arnative` specification.
48
+ - Streamlined README commands and shortcuts tables, tightened bullet copywriting, and repaired link icon character.
49
+ - Standardized README tagline (`Intelligent vision watcher. Connected models. Zero workflow interruption.`) and `package.json` description to use vision watcher identity.
50
+ - Refreshed package keywords and repository topics to focus on vision-watcher, image-describer, and failover capabilities (purged legacy handoff tags).
51
+ - Standardized README banner image to full-width responsive `<img width="100%">` matching `pi-jev-eye`.
52
+ - Updated `pi.image` manifest URL to `assets/banner.webp`.
53
+ - Registered `CHANGELOG.md` and `LICENSE` in `package.json` `"files"` packaging list.
54
+
55
+ ### Fixed
56
+ - Fixed model picker detail pane hanging wrapped values and aligned filter input field with the list gutter.
57
+
58
+ ---
59
+
60
+ ## [1.0.14] - 2026-09-22
61
+
62
+ ### Changed
63
+ - Tightened picker header by removing empty spacing between top border and dialog title.
64
+ - Updated picker footer legend to use clean `[Key] Action` layout with colored accent highlighting for model counter.
65
+
66
+ ---
67
+
68
+ ## [1.0.13] - 2026-09-22
69
+
70
+ ### Added
71
+ - Added `ctrl+shift+q` shortcut to reset the entire fallback model chain in one keystroke.
72
+
73
+ ### Changed
74
+ - Polished picker footer spacing and legend descriptions.
75
+
76
+ ---
77
+
78
+ ## [1.0.12] - 2026-09-22
79
+
80
+ ### Added
81
+ - Footer key legend in the interactive picker with clear separator formatting.
82
+
83
+ ---
84
+
85
+ ## [1.0.11] - 2026-09-12
86
+
87
+ ### Added
88
+ - In-picker failover chain configuration (`ctrl+q` / `f2`) with real-time preview in the detail pane.
89
+ - Auto-healing and detection for GLM 4/5 false-vision and provider HTTP 400 errors.
90
+
91
+ ### Changed
92
+ - Major model picker architecture overhaul with connected-only provider credentials filtering.
93
+
94
+ ---
95
+
96
+ ## [1.0.0] - 2026-08-21
97
+
98
+ ### Added
99
+ - Initial standalone release of `pi-vision-watcher` providing intelligent vision handoff to text-only coding models in Pi.
package/LICENSE CHANGED
File without changes
package/README.md CHANGED
@@ -1,129 +1,137 @@
1
- <div align="center">
2
-
3
- # pi-vision-watcher
4
-
5
- Give text-only [pi](https://github.com/earendil-works/pi-coding-agent) models vision — images are described by a vision model you pick, then handed off to text-only coding models without interrupting your workflow.
6
-
7
- [pi package](https://pi.dev/packages/@bismawy/pi-vision-watcher) · [npm](https://www.npmjs.com/package/@bismawy/pi-vision-watcher) · [Issues](https://github.com/bismawy/pi-vision-watcher/issues)
8
-
9
- ![npm](https://img.shields.io/npm/v/@bismawy/pi-vision-watcher)
10
- ![license](https://img.shields.io/badge/license-MIT-green)
11
-
12
- </div>
13
-
14
- <img src="assets/screenshot.webp" alt="pi-vision-watcher" width="100%">
15
-
16
- ## What it does
17
-
18
- Paste an image, attach a file, or have the agent `read` one — pi-vision-watcher describes it in the background with your chosen vision model and feeds the description to whatever text-only model you're using (DeepSeek, local models, etc.).
19
-
20
- - **Connected-only picker:** `/vision-watcher` shows only vision-capable models from providers where you actually have credentials.
21
- - **Batching & cache:** multiple images across parallel tool calls are batched into one describer request; cached images (SHA-256) are never re-described.
22
- - **False-vision healing:** aggregator providers sometimes flag text-only models as multimodal, causing HTTP 400s. The extension proactively forces handoff for them and auto-heals `models.json` in-process.
23
- - **Thinking controls:** adjust reasoning effort (`off` – `max`) for reasoning-capable vision models.
24
- - **Fallback chains:** automatically falls back to backup vision models when the primary is rate-limited or down.
25
-
26
- ## Install
27
-
28
- ```bash
29
- pi install npm:@bismawy/pi-vision-watcher
30
- ```
31
-
32
- Then run `/vision-watcher` to pick your vision model (or set it directly: `/vision-watcher model openai/gpt-4o`). Handoff is on by default — just switch to any text-only model and work as usual.
33
-
34
- ## Commands
35
-
36
- | Command | Action |
37
- | :--- | :--- |
38
- | `/vision-watcher` | Interactive picker for connected vision models |
39
- | `/vision-watcher model <provider/id>` | Set primary vision describer directly |
40
- | `/vision-watcher status` | View current configuration |
41
- | `/vision-watcher auto <on\|off>` | Toggle automatic handoff (default: `on`) |
42
- | `/vision-watcher add <provider/id>` | Force handoff on a specific model |
43
- | `/vision-watcher remove <provider/id>` | Remove model from forced handoff list |
44
- | `/vision-watcher thinking <level>` | Configure reasoning effort |
45
- | `/vision-watcher timeout <ms>` | Set the base per-image description timeout (default `45000`) |
46
- | `/vision-watcher prewarm <on\|off>` | Describe pasted images at paste-time (opt-in) |
47
- | `/vision-watcher async <on\|off>` | Inject pasted-image descriptions asynchronously when no matching `read` wins (alias: `fallback`) |
48
- | `/vision-watcher clear` | Clear the configured vision model |
49
- | `/vision-watcher enable` / `disable` | Toggle extension active state |
50
- | `/vision-watcher help` | List all subcommands |
51
-
52
- `async` is the async *clipboard* fallback and has nothing to do with the
53
- `fallbackModels` failover chain.
54
-
55
- In the picker:
56
-
57
- | Key | Action |
58
- |---|---|
59
- | `space` | Select the highlighted model as the primary describer (press again to clear) |
60
- | `ctrl+q` | Toggle the highlighted model in/out of the failover chain (marked 🔁, max 3). Not a mnemonic, and that's on purpose: `ctrl+f` is pi's find-text (bound since pi 0.85), `alt+f` is editor word-right, and `ctrl+alt+f` never survives Windows conhost/Windows Terminal. pi 0.85 also binds `ctrl+q` to `app.message.followUp`, which is inert while a picker is open — if it ever double-fires, `f2` is the free fallback (unbound in 0.84 and 0.85) |
61
- | `ctrl+t` | Walk the thinking ladder: off → minimal → low → medium → high → xhigh → max → off → … |
62
- | `ctrl+a` | Toggle async paste handoff |
63
- | `enter` / `ctrl+s` | Save (primary **and** chain together) |
64
- | `esc` | Cancel |
65
-
66
- The detail pane always shows the current configuration — primary, chain,
67
- thinking, async handoff — so every keypress shows exactly what will be saved.
68
- `space` is left to the search box while a filter query is present, so multi-word
69
- searches like `gemini 3.8` stay typeable.
70
-
71
- ## How it works
72
-
73
- <details>
74
- <summary><b>Configuration</b> (<code>~/.pi/agent/extensions/pi-vision-watcher.json</code>)</summary>
75
-
76
- ```json
77
- {
78
- "enabled": true,
79
- "visionModel": "openai/gpt-4o",
80
- "fallbackModels": [],
81
- "autoHandoff": true,
82
- "handoffModels": [],
83
- "thinking": false,
84
- "thinkingLevel": "medium",
85
- "describeTimeoutMs": 45000,
86
- "prewarmPastedImages": false,
87
- "asyncClipboardHandoff": false,
88
- "maxTokens": null,
89
- "cacheMax": 50,
90
- "maxDescriptionLines": 0
91
- }
92
- ```
93
-
94
- Most fields have sane defaults — `visionModel` is the only one you normally set.
95
-
96
- `fallbackModels` is the failover chain: when the primary describer fails (timeout,
97
- rate limit, auth), each entry is tried **in order** — fallback 1 fails, fallback 2
98
- runs, and so on until one returns a description. The picker caps the chain at 3
99
- entries (`ctrl+q`). Set it from the picker instead of hand-editing the file.
100
-
101
- </details>
102
-
103
- <details>
104
- <summary><b>Diagnostics & recovery</b></summary>
105
-
106
- - Failed vision calls log with stack traces to `~/.pi/agent/logs/pi-vision-watcher/errors.log` and degrade gracefully to `[Image: description unavailable]`.
107
- - When a model falsely advertises image capability and 400s, the error is captured on `message_end`, `modelOverrides.<model>.input = ["text"]` is written to `models.json`, and the registry refreshes in-process.
108
-
109
- </details>
110
-
111
- <details>
112
- <summary><b>Development</b></summary>
113
-
114
- ```bash
115
- bun install
116
- bun run test # Vitest suite (240+ unit tests)
117
- bun run typecheck
118
- bun run lint:dead
119
- ```
120
-
121
- </details>
122
-
123
- ## License
124
-
125
- Distributed under the **MIT** license.
126
-
127
- ## Developer
128
-
129
- Developed and maintained by [Bisma](https://github.com/bismawy).
1
+ # Vision Watcher
2
+
3
+ Intelligent vision watcher. Connected models. Zero workflow interruption.
4
+
5
+ [![Custom badge](https://shieldcn.dev/badge/pi-%20Packages.svg?variant=outline&size=xs&logo=ri%3APiPiBold)](https://pi.dev/packages/@bismawy/pi-vision-watcher)
6
+ [![badge](https://shieldcn.dev/npm/@bismawy/pi-vision-watcher.svg?variant=outline&size=xs)](https://www.npmjs.com/package/@bismawy/pi-vision-watcher)
7
+ [![license](https://shieldcn.dev/github/bismawy/pi-vision-watcher/license.svg?variant=outline&size=xs)](https://github.com/bismawy/pi-vision-watcher)
8
+
9
+ <img src="https://raw.githubusercontent.com/bismawy/pi-vision-watcher/main/assets/banner.webp" alt="Vision Watcher: intelligent vision watcher for text-only coding models in Pi" width="100%">
10
+
11
+ ## Overview
12
+
13
+ pi-vision-watcher gives text-only pi models vision — images are described in the background by a vision model you pick, watching over text-only coding models without interrupting your workflow.
14
+
15
+ - Connected-only Picker: `/vision-watcher` filters models to connected providers with valid credentials.
16
+ - Batching & Cache: Parallel tool calls batch images into one request; SHA-256 cache prevents redundant descriptions.
17
+ - False-Vision Healing: Proactively detects text-only models falsely advertised as multimodal and auto-heals `models.json` on HTTP 400.
18
+ - Thinking Controls: Configurable reasoning effort (`off` – `max`) for reasoning-capable vision models.
19
+ - Failover Chains: Ordered fallbacks to backup vision models on timeouts, rate limits, or auth errors.
20
+
21
+ ## Install
22
+
23
+ ```bash
24
+ pi install npm:@bismawy/pi-vision-watcher
25
+ ```
26
+
27
+ Run `/vision-watcher` to pick a vision model (or `/vision-watcher model <provider/id>`). Handoff is enabled by default.
28
+
29
+ To test locally without installing:
30
+ ```bash
31
+ pi --extension ./vision-watcher.ts
32
+ ```
33
+
34
+ ## Shortcuts
35
+
36
+ | Key | Action |
37
+ | --- | --- |
38
+ | `space` | Toggle highlighted model as primary describer |
39
+ | `ctrl+enter` | Toggle highlighted model in/out of failover chain (marked ⇆, max 3) |
40
+ | `ctrl+shift+r` | Reset failover chain |
41
+ | `alt+↑` · `alt+↓` | Reorder the highlighted model (the chain follows list order) |
42
+ | `ctrl+shift+t` | Walk thinking ladder (`off` → `minimal` → `low` → `medium` → `high` → `xhigh` → `max`) |
43
+ | `ctrl+alt+a` | Toggle async paste handoff (`alt+a` also works on Windows/macOS) |
44
+ | `enter` · `ctrl+s` | Save configuration (primary describer and chain) |
45
+ | `esc` | Cancel and exit picker |
46
+
47
+ > **Notes:**
48
+ > - In filter mode, `space` enters a space character so multi-word queries (e.g. `gemini 3.8`) stay typeable; press `enter` to adopt the highlighted match as the primary describer.
49
+ > - The detail pane renders live preview updates before saving.
50
+ > - Chords are chosen to avoid POSIX tty flow control (`ctrl+s`/`ctrl+q`), VTE's window-level `ctrl+shift+q`, readline keys (`ctrl+a`/`ctrl+t`) and pi's own bindings. `ctrl+enter` works on Windows Terminal/conhost, X11, macOS, tmux and SSH. `ctrl+alt+a` is the safe half of the async chord on international layouts, where AltGr occupies `alt+a`.
51
+
52
+ ## Commands
53
+
54
+ | Command | Action |
55
+ | --- | --- |
56
+ | `/vision-watcher` | Interactive picker for connected vision models |
57
+ | `/vision-watcher model <provider/id>` | Set primary vision describer directly |
58
+ | `/vision-watcher status` | View active configuration and failover chain |
59
+ | `/vision-watcher auto <on\|off>` | Toggle automatic handoff (default: `on`) |
60
+ | `/vision-watcher add \| remove <provider/id>` | Force or unforce handoff on specific models |
61
+ | `/vision-watcher thinking <level>` | Configure reasoning effort (`off` – `max`) |
62
+ | `/vision-watcher timeout <ms>` | Set per-image description timeout in ms (default: `45000`) |
63
+ | `/vision-watcher prewarm \| async <on\|off>` | Toggle paste-time prewarming or async clipboard fallback |
64
+ | `/vision-watcher clear` | Clear configured vision model |
65
+ | `/vision-watcher enable \| disable` | Toggle extension active state |
66
+ | `/vision-watcher help` | List all subcommands |
67
+
68
+ ## Architecture
69
+
70
+ <details>
71
+ <summary><b>Configuration</b> (<code>~/.pi/agent/extensions/pi-vision-watcher.json</code>)</summary>
72
+
73
+ ```json
74
+ {
75
+ "enabled": true,
76
+ "visionModel": "openai/gpt-4o",
77
+ "fallbackModels": [],
78
+ "autoHandoff": true,
79
+ "handoffModels": [],
80
+ "thinking": false,
81
+ "thinkingLevel": "medium",
82
+ "describeTimeoutMs": 45000,
83
+ "prewarmPastedImages": false,
84
+ "asyncClipboardHandoff": false,
85
+ "maxTokens": null,
86
+ "cacheMax": 50,
87
+ "maxDescriptionLines": 0
88
+ }
89
+ ```
90
+
91
+ Most fields have sane defaults — `visionModel` is the only one you normally set.
92
+
93
+ `fallbackModels` is the failover chain: when the primary describer fails (timeout, rate limit, auth), each entry is tried **in order** until one returns a description. The picker caps the chain at 3 entries (`ctrl+enter`). Set it from the picker instead of hand-editing the file.
94
+
95
+ </details>
96
+
97
+ <details>
98
+ <summary><b>Diagnostics & Recovery</b></summary>
99
+
100
+ - Failed vision calls log with stack traces to `~/.pi/agent/logs/pi-vision-watcher/errors.log` and degrade gracefully to `[Image: description unavailable]`.
101
+ - When a model falsely advertises image capability and 400s, the error is captured on `message_end`, `modelOverrides.<model>.input = ["text"]` is written to `models.json`, and the registry refreshes in-process.
102
+
103
+ </details>
104
+
105
+ <details>
106
+ <summary><b>Components</b></summary>
107
+
108
+ | File | Role |
109
+ | --- | --- |
110
+ | `vision-watcher.ts` | Extension entry point, lifecycle hooks, and CLI command handlers |
111
+ | `src/vision-model-selector.ts` | Interactive TUI model picker with connected-only filtering |
112
+ | `src/describer.ts` | Vision API request orchestration, multi-image batching, and failover chains |
113
+ | `src/dataloader.ts` | Batched image loader to prevent redundant parallel requests |
114
+ | `src/image.ts` | Image hashing (SHA-256), memory caching, and MIME detection |
115
+ | `src/prewarm-editor.ts` | Paste-time image prewarming and async clipboard injection |
116
+ | `src/error-log.ts` | Structured logging and error capture |
117
+
118
+ </details>
119
+
120
+ <details>
121
+ <summary><b>Development</b></summary>
122
+
123
+ ```bash
124
+ npm test # Vitest suite (250+ unit tests)
125
+ npm run typecheck # TypeScript checks
126
+ npm run lint:dead # Knip dead code analysis
127
+ ```
128
+
129
+ </details>
130
+
131
+ ## License
132
+
133
+ Distributed under the **MIT** license.
134
+
135
+ ## Author
136
+
137
+ [Bisma](https://github.com/bismawy)
package/package.json CHANGED
@@ -1,68 +1,72 @@
1
- {
2
- "name": "@bismawy/pi-vision-watcher",
3
- "version": "1.0.14",
4
- "description": "Give text-only pi models vision — describe images with a vision model you pick via an interactive picker, then hand off the text description to non-vision models",
5
- "type": "module",
6
- "author": "bismawy",
7
- "license": "MIT",
8
- "publishConfig": {
9
- "access": "public"
10
- },
11
- "repository": {
12
- "type": "git",
13
- "url": "git+https://github.com/bismawy/pi-vision-watcher.git"
14
- },
15
- "homepage": "https://github.com/bismawy/pi-vision-watcher#readme",
16
- "bugs": {
17
- "url": "https://github.com/bismawy/pi-vision-watcher/issues"
18
- },
19
- "keywords": [
20
- "pi-package",
21
- "pi-extension",
22
- "pi-vision-watcher",
23
- "pi-vision-handoff",
24
- "pi",
25
- "pi-coding-agent",
26
- "extension",
27
- "vision",
28
- "image",
29
- "handoff",
30
- "multimodal",
31
- "model-selector",
32
- "accessibility"
33
- ],
34
- "files": [
35
- "*.ts",
36
- "src/",
37
- "README.md"
38
- ],
39
- "scripts": {
40
- "test": "vitest run",
41
- "test:watch": "vitest",
42
- "test:coverage": "vitest run --coverage",
43
- "typecheck": "tsc --noEmit",
44
- "lint:dead": "knip --no-gitignore"
45
- },
46
- "devDependencies": {
47
- "@earendil-works/pi-ai": "0.85.1",
48
- "@earendil-works/pi-coding-agent": "0.85.1",
49
- "@earendil-works/pi-tui": "0.85.1",
50
- "@types/node": "25.9.1",
51
- "@vitest/coverage-v8": "4.1.7",
52
- "knip": "6.14.1",
53
- "typescript": "6.0.3",
54
- "vitest": "4.1.7"
55
- },
56
- "pi": {
57
- "extensions": [
58
- "./vision-watcher.ts"
59
- ],
60
- "image": "https://raw.githubusercontent.com/bismawy/pi-vision-watcher/main/assets/screenshot.webp"
61
- },
62
- "peerDependencies": {
63
- "@earendil-works/pi-ai": "*",
64
- "@earendil-works/pi-coding-agent": "*",
65
- "@earendil-works/pi-tui": "*"
66
- },
67
- "packageManager": "pnpm@11.20.0"
68
- }
1
+ {
2
+ "name": "@bismawy/pi-vision-watcher",
3
+ "version": "1.1.0",
4
+ "description": "Intelligent vision watcher. Connected models. Zero workflow interruption. Text-only Pi models get background image descriptions with failover chains.",
5
+ "type": "module",
6
+ "author": "bismawy",
7
+ "license": "MIT",
8
+ "publishConfig": {
9
+ "access": "public"
10
+ },
11
+ "repository": {
12
+ "type": "git",
13
+ "url": "git+https://github.com/bismawy/pi-vision-watcher.git"
14
+ },
15
+ "homepage": "https://github.com/bismawy/pi-vision-watcher#readme",
16
+ "bugs": {
17
+ "url": "https://github.com/bismawy/pi-vision-watcher/issues"
18
+ },
19
+ "keywords": [
20
+ "pi-package",
21
+ "pi-extension",
22
+ "pi-vision-watcher",
23
+ "vision-watcher",
24
+ "pi",
25
+ "pi-coding-agent",
26
+ "vision",
27
+ "image-describer",
28
+ "image-description",
29
+ "multimodal",
30
+ "model-selector",
31
+ "model-picker",
32
+ "failover",
33
+ "accessibility"
34
+ ],
35
+ "files": [
36
+ "*.ts",
37
+ "src/",
38
+ "CHANGELOG.md",
39
+ "LICENSE",
40
+ "README.md"
41
+ ],
42
+ "scripts": {
43
+ "test": "vitest run",
44
+ "dev": "pi --extension ./vision-watcher.ts",
45
+ "test:watch": "vitest",
46
+ "test:coverage": "vitest run --coverage",
47
+ "typecheck": "tsc --noEmit",
48
+ "lint:dead": "knip --no-gitignore"
49
+ },
50
+ "devDependencies": {
51
+ "@earendil-works/pi-ai": "0.85.1",
52
+ "@earendil-works/pi-coding-agent": "0.85.1",
53
+ "@earendil-works/pi-tui": "0.85.1",
54
+ "@types/node": "25.9.1",
55
+ "@vitest/coverage-v8": "4.1.7",
56
+ "knip": "6.14.1",
57
+ "typescript": "6.0.3",
58
+ "vitest": "4.1.7"
59
+ },
60
+ "pi": {
61
+ "extensions": [
62
+ "./vision-watcher.ts"
63
+ ],
64
+ "image": "https://raw.githubusercontent.com/bismawy/pi-vision-watcher/main/assets/banner.webp"
65
+ },
66
+ "peerDependencies": {
67
+ "@earendil-works/pi-ai": "*",
68
+ "@earendil-works/pi-coding-agent": "*",
69
+ "@earendil-works/pi-tui": "*"
70
+ },
71
+ "packageManager": "pnpm@11.20.0"
72
+ }
package/src/dataloader.ts CHANGED
File without changes
package/src/describer.ts CHANGED
File without changes
package/src/dispose.ts CHANGED
File without changes
package/src/error-log.ts CHANGED
File without changes
package/src/image.ts CHANGED
File without changes
package/src/index.ts CHANGED
File without changes
File without changes
package/src/usage.ts CHANGED
File without changes