@cloudglue/tinycloud 0.3.6 → 0.3.7
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/README.md +13 -7
- package/package.json +2 -2
- package/skills/tinycloud/SKILL.md +26 -11
- package/skills/tinycloud/reference/glossary.md +15 -7
- package/skills/tinycloud/reference/pipelines.md +1 -1
- package/skills/tinycloud/reference/setup.md +2 -1
- package/skills/tinycloud/reference/verbs.md +41 -8
- package/skills/tinycloud/scripts/preflight.sh +2 -2
- package/skills/tinycloud/tinycloud-skill.json +5 -3
- package/skills/tinycloud-init/SKILL.md +2 -2
package/README.md
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
# Tinycloud
|
|
2
2
|
|
|
3
|
-
Agent CLI for deep video work. Point it at videos and ask
|
|
4
|
-
dashboards, subtitles, clips, search, or repurposed content — or
|
|
5
|
-
verbs directly from your own agent. Powered by
|
|
6
|
-
|
|
3
|
+
Agent CLI for deep video and image work. Point it at videos or images and ask
|
|
4
|
+
for analysis, dashboards, subtitles, clips, search, or repurposed content — or
|
|
5
|
+
drive its verbs directly from your own agent. Powered by
|
|
6
|
+
[Cloudglue](https://cloudglue.dev). Learn more at
|
|
7
|
+
[tinycloud.sh](https://tinycloud.sh).
|
|
7
8
|
|
|
8
9
|
## Install
|
|
9
10
|
|
|
@@ -16,11 +17,11 @@ The npm package is a small launcher: on first run it downloads the matching
|
|
|
16
17
|
platform distribution from Cloudglue's CDN (cached under
|
|
17
18
|
`~/.tinycloud/versions/<version>/`), verifies its checksum, and execs the real
|
|
18
19
|
binary. The package version pins the binary version, so
|
|
19
|
-
`npx @cloudglue/tinycloud@0.3.
|
|
20
|
+
`npx @cloudglue/tinycloud@0.3.7` always runs tinycloud 0.3.7. It also adds two
|
|
20
21
|
wrapper commands:
|
|
21
22
|
|
|
22
23
|
```bash
|
|
23
|
-
tinycloud install --version 0.3.
|
|
24
|
+
tinycloud install --version 0.3.7 # pre-download a version
|
|
24
25
|
tinycloud install --latest # install latest stable and pin to it
|
|
25
26
|
tinycloud update # move to latest stable, prune old versions
|
|
26
27
|
```
|
|
@@ -116,7 +117,8 @@ go to stderr) — pass `--json`.
|
|
|
116
117
|
| Command | What it does |
|
|
117
118
|
|---|---|
|
|
118
119
|
| `watch` | Analyze a video → reusable cached context + Cloudglue-ready ref |
|
|
119
|
-
| `
|
|
120
|
+
| `see` | Analyze an image → reusable cached context + Cloudglue-ready ref (JPEG/PNG/WebP) |
|
|
121
|
+
| `extract` | Pull structured facts, entities, or moments from a video or image (free-form or JSON-schema) |
|
|
120
122
|
| `caption` | Subtitles and transcripts (SRT/VTT/ASS) |
|
|
121
123
|
| `search` | Keyword search over cached video context |
|
|
122
124
|
| `probe` | Semantic moment/video search over a Cloudglue scope |
|
|
@@ -135,8 +137,12 @@ A few common invocations:
|
|
|
135
137
|
```bash
|
|
136
138
|
# Analyze a video into reusable, cached context + a Cloudglue-ready ref
|
|
137
139
|
tinycloud watch ./demo.mp4 --json
|
|
140
|
+
# Describe an image — the file-level counterpart of watch (JPEG/PNG/WebP)
|
|
141
|
+
tinycloud see ./photo.jpg --json
|
|
138
142
|
# Pull structured findings (free-form query here; pass --schema for a fixed shape)
|
|
139
143
|
tinycloud extract "key moments with timestamps" ./demo.mp4 --json
|
|
144
|
+
# extract also works on an image source (no segment/shot flags on images)
|
|
145
|
+
tinycloud extract "on-screen text and key objects" ./photo.png --json
|
|
140
146
|
# Subtitles plus a markdown transcript
|
|
141
147
|
tinycloud caption ./demo.mp4 --format srt --transcript --json
|
|
142
148
|
# Trim a clip locally — no upload, ffmpeg-backed
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cloudglue/tinycloud",
|
|
3
|
-
"version": "0.3.
|
|
4
|
-
"description": "Agent CLI for deep video work, by Cloudglue. Downloads the tinycloud binary on first run.",
|
|
3
|
+
"version": "0.3.7",
|
|
4
|
+
"description": "Agent CLI for deep video and image work, by Cloudglue. Downloads the tinycloud binary on first run.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"tinycloud": "bin/tinycloud.js"
|
|
7
7
|
},
|
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: tinycloud
|
|
3
3
|
description: >-
|
|
4
|
-
Deep video work via the tinycloud CLI (Cloudglue). Use whenever the
|
|
5
|
-
involves understanding or manipulating video
|
|
6
|
-
or summarize a video,
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
4
|
+
Deep video and image work via the tinycloud CLI (Cloudglue). Use whenever the
|
|
5
|
+
task involves understanding or manipulating video, audio-visual media, or
|
|
6
|
+
images: analyze or summarize a video, describe or analyze an image, extract
|
|
7
|
+
structured facts/moments/entities from a video or image, generate captions or
|
|
8
|
+
transcripts (SRT/VTT), search inside videos, answer questions about footage,
|
|
9
|
+
cut/stitch/thumbnail/transcode clips, download remote videos, browse Cloudglue
|
|
10
|
+
collections, or run packaged video workflows. Triggers on video files (.mp4,
|
|
11
|
+
.mov, .webm, ...), image files (.jpg, .png, .webp), YouTube/video URLs,
|
|
12
|
+
Cloudglue collections, or any "what's in this video / describe this image /
|
|
13
|
+
make clips / caption this" request. Every command returns a machine-readable
|
|
14
|
+
JSON envelope.
|
|
13
15
|
---
|
|
14
16
|
|
|
15
17
|
# Tinycloud: video operations for agents
|
|
@@ -61,7 +63,7 @@ Full schema and error codes: [reference/envelope.md](reference/envelope.md).
|
|
|
61
63
|
|
|
62
64
|
## 2. Core verbs (cheat sheet)
|
|
63
65
|
|
|
64
|
-
Cloud verbs (`watch extract probe ask publish face`) call the Cloudglue API
|
|
66
|
+
Cloud verbs (`watch see extract probe ask publish face`) call the Cloudglue API
|
|
65
67
|
using the configured key — usage is billed per the
|
|
66
68
|
[rate card](https://app.cloudglue.dev/home/billing/rate-card). `search clip
|
|
67
69
|
setup` are local and free; `grab jobs` are network-only.
|
|
@@ -71,9 +73,14 @@ setup` are local and free; `grab jobs` are network-only.
|
|
|
71
73
|
# Understand a video (creates reusable cached context + cloud-ready ref)
|
|
72
74
|
tinycloud watch ./demo.mp4 --json
|
|
73
75
|
|
|
76
|
+
# Understand an image — the file-level counterpart of watch (0.3.7+, JPEG/PNG/WebP)
|
|
77
|
+
tinycloud see ./photo.jpg --json
|
|
78
|
+
|
|
74
79
|
# Pipe context into structured extraction (JSONL flows between pipes)
|
|
75
80
|
tinycloud watch ./demo.mp4 --json | tinycloud extract "key moments with timestamps" --json
|
|
76
81
|
tinycloud extract --schema ./schema.json ./demo.mp4 --segment-level --json
|
|
82
|
+
# extract also takes an image source (0.3.7+) — no segment/shot flags on images
|
|
83
|
+
tinycloud extract "on-screen text and key objects" ./photo.png --json
|
|
77
84
|
|
|
78
85
|
# Captions / transcripts
|
|
79
86
|
tinycloud caption ./demo.mp4 --format srt --transcript -o ./tinycloud-output/captions/ --json
|
|
@@ -166,8 +173,16 @@ Authoring your own recipes: [reference/workflow-authoring.md](reference/workflow
|
|
|
166
173
|
- Sources: local paths, URLs, `cloudglue://files/<id>` URIs,
|
|
167
174
|
`collection:col_…`, or a bare Cloudglue file-id UUID (normalized to
|
|
168
175
|
`cloudglue://files/<id>`; an existing local path of the same name wins).
|
|
176
|
+
- Images (0.3.7+): use `see` to describe an image and `extract` to pull
|
|
177
|
+
structured data from one — **JPEG/PNG/WebP only** (HEIC/GIF/BMP are rejected
|
|
178
|
+
with a "transcode first" hint). `watch <image>` and `caption <image>` error
|
|
179
|
+
and redirect you to `see`/`extract` (an image has no video track to analyze
|
|
180
|
+
or speech to caption); images have no segments, so drop `--segment-level`/
|
|
181
|
+
`--segmentation`/`--shot-*` on an image source. A local image uploads first; a
|
|
182
|
+
public `http(s)` image URL is analyzed in place (no upload). Images can't be
|
|
183
|
+
added to collections. Local `search` can match cached `see` results.
|
|
169
184
|
- Do not pass `--background` to `ask`; background jobs exist only for tracked
|
|
170
|
-
async ops (`watch`, `extract`).
|
|
185
|
+
async ops (`watch`, `see`, `extract`).
|
|
171
186
|
- `workflow status` / `workflow resume` are not implemented in 0.3.x; treat
|
|
172
187
|
`paused`/`partial` as terminal and surface `resume` metadata to the user.
|
|
173
188
|
- `--no-upload` / `--no-download` make commands refuse cloud upload / local
|
|
@@ -41,15 +41,18 @@ connector?" or an envelope field needs explaining.
|
|
|
41
41
|
`cloudglue://files/<id>` URI, connector URI, collection, or a bare file-id
|
|
42
42
|
UUID (normalized to `cloudglue://files/<id>`; an existing local path of the
|
|
43
43
|
same name wins).
|
|
44
|
-
- **Supported inputs** — local uploads (`watch`, `extract`, `face`,
|
|
44
|
+
- **Supported inputs** — local uploads (`watch`, `see`, `extract`, `face`,
|
|
45
45
|
`library collections add`) map by extension: video `.mp4 .mov .webm .mkv .m4v`,
|
|
46
|
-
audio `.mp3 .wav .m4a
|
|
46
|
+
audio `.mp3 .wav .m4a`, and (for `see`/`extract` only, 0.3.7+) image
|
|
47
|
+
`.jpg .jpeg .png .webp`. Other extensions upload as `application/octet-stream`
|
|
47
48
|
and may be rejected upstream — transcode to a mapped container first
|
|
48
|
-
(`clip transcode`)
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
`
|
|
52
|
-
|
|
49
|
+
(`clip transcode`); unsupported image types (HEIC/GIF/BMP) are rejected before
|
|
50
|
+
upload with a "transcode to JPEG, PNG, or WebP" hint. Local uploads are bounded
|
|
51
|
+
by Cloudglue at ~3 GB and 2 s–3 h (connector ingests allow more); a public
|
|
52
|
+
`http(s)` image URL is analyzed in place with no upload. `face match`/`face
|
|
53
|
+
search` query images must be **JPEG or PNG**. Images can't be added to
|
|
54
|
+
collections. Use `grab` for YouTube and `library connectors sync` for share
|
|
55
|
+
links rather than passing those URLs to upload verbs.
|
|
53
56
|
- **`ref` / `source_id` / `result_id`** — stable identifiers in every
|
|
54
57
|
envelope. `ref` is a reusable pointer to the analyzed source (including
|
|
55
58
|
`cloud_ready` and the Cloudglue file id) that pipes between verbs;
|
|
@@ -64,6 +67,11 @@ connector?" or an envelope field needs explaining.
|
|
|
64
67
|
produces (summary, segments, transcript-ish context). Cached locally and
|
|
65
68
|
mirrored in Cloudglue, so later `extract`/`ask`/`search` reuse it instead
|
|
66
69
|
of re-analyzing.
|
|
70
|
+
- **See / image describe (0.3.7+)** — the image counterpart of `watch`:
|
|
71
|
+
`tinycloud see <image>` produces file-level image context (title,
|
|
72
|
+
description, on-screen text) and a reusable `ref`, with no segmentation or
|
|
73
|
+
shots. JPEG/PNG/WebP only; `extract` accepts the same image sources for
|
|
74
|
+
structured pulls.
|
|
67
75
|
- **Segmentation** — how a video is split for analysis: `chapters`
|
|
68
76
|
(semantic), `shots` (visual cuts; bounds tunable via
|
|
69
77
|
`--shot-min-seconds`/`--shot-max-seconds`, sub-second min allowed),
|
|
@@ -41,7 +41,7 @@ tinycloud caption ./talks/*.mp4 --format srt -o ./tinycloud-output/captions/ --j
|
|
|
41
41
|
|
|
42
42
|
## Async jobs
|
|
43
43
|
|
|
44
|
-
Long cloud operations (`watch`, `extract`) support `--background`:
|
|
44
|
+
Long cloud operations (`watch`, `see`, `extract`) support `--background`:
|
|
45
45
|
|
|
46
46
|
```bash
|
|
47
47
|
tinycloud watch ./long.mp4 --background --json # → status:"pending", meta.job_id
|
|
@@ -101,8 +101,9 @@ binary reports in `--version --json`.
|
|
|
101
101
|
| `TINYCLOUD_HTTP_TIMEOUT_MS` | Hard deadline per Cloudglue request (default 120s; `0` disables) |
|
|
102
102
|
| `TINYCLOUD_UPLOAD_TIMEOUT_MS` | Total deadline for upload-shaped requests (default 60min; `0` disables) |
|
|
103
103
|
| `TINYCLOUD_UPLOAD_IDLE_TIMEOUT_MS` | Idle (no-progress) deadline for an upload — aborts a wedged transfer in ~1min instead of waiting out the total upload deadline (default 60s; `0` disables) |
|
|
104
|
-
| `TINYCLOUD_HTTP_RETRIES` | Bounded auto-retries for idempotent (GET/HEAD) Cloudglue calls on transient errors — 408/429/5xx, network blips (default
|
|
104
|
+
| `TINYCLOUD_HTTP_RETRIES` | Bounded auto-retries for idempotent (GET/HEAD) Cloudglue calls on transient errors — 408/429/5xx, network blips (default 5; `0` disables) |
|
|
105
105
|
| `TINYCLOUD_JOB_WAIT_TIMEOUT_MS` | Wall-clock budget for async job waits (the `waitForReady` poll behind `watch`/`extract`/`face`) (default 10min; `0` disables) |
|
|
106
|
+
| `TINYCLOUD_MODEL_RETRIES` | Client-side retries for the interactive agent's chat-model turns on transient connection errors (default 5; `0` disables). 0.3.7+ |
|
|
106
107
|
|
|
107
108
|
Every Cloudglue request carries a hard deadline, so a stalled route can never
|
|
108
109
|
hang the CLI indefinitely; a timeout surfaces as a retryable `upstream` error
|
|
@@ -7,7 +7,8 @@ every verb. Regenerate doubts from it instead of trusting prose.
|
|
|
7
7
|
| Verb | Cost | Auth | Use |
|
|
8
8
|
|---|---|---|---|
|
|
9
9
|
| `watch` | cloud | yes | Analyze a video → reusable context + Cloudglue-ready ref |
|
|
10
|
-
| `
|
|
10
|
+
| `see` | cloud | yes | Analyze an image → reusable context + Cloudglue-ready ref (0.3.7+) |
|
|
11
|
+
| `extract` | cloud | yes | Pull structured facts, entities, or moments (from a video **or** image) |
|
|
11
12
|
| `caption` | varies | no | Subtitles and transcripts (SRT/VTT/ASS) |
|
|
12
13
|
| `search` | local | no | Local keyword search over cached context |
|
|
13
14
|
| `probe` | cloud | yes | Semantic moment/video search over a Cloudglue-ready scope |
|
|
@@ -60,9 +61,30 @@ Shot bounds tune `--segment shots` only: min 0.6–600 (fractional/sub-second
|
|
|
60
61
|
values catch flash frames and rapid cuts), max 1–600, min ≤ max. Out-of-range
|
|
61
62
|
or wrong-mode values fail with a validation envelope before any upload. The
|
|
62
63
|
bounds are part of the cache key, so tuned and default shot passes never
|
|
63
|
-
collide.
|
|
64
|
+
collide. `watch` is **video/audio only** — point it at an image and it errors
|
|
65
|
+
("watch analyzes video/audio; for an image use `tinycloud see`").
|
|
64
66
|
|
|
65
|
-
###
|
|
67
|
+
### see — analyze an image (cloud, 0.3.7+)
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
tinycloud see <image> [--visual-only] [--background] --json
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
The image counterpart of `watch`: file-level image understanding (title +
|
|
74
|
+
description + on-screen text) that produces reusable cached context and a
|
|
75
|
+
Cloudglue-ready ref. Images are **file-level only** — there is no segmentation,
|
|
76
|
+
no shots, no speech/transcript, and no `--start`/`--end` window, so `see` carries
|
|
77
|
+
none of those flags (only `--visual-only` to skip the textual read, plus the
|
|
78
|
+
shared output/cache/upload/source-reuse flags). Accepts **JPEG, PNG, or WebP**;
|
|
79
|
+
other types (HEIC/GIF/BMP/…) are rejected before upload with
|
|
80
|
+
`Unsupported image type for see: <name>. Transcode to JPEG, PNG, or WebP first.`
|
|
81
|
+
A local image uploads first (`needs_upload` without `--no-upload`); a public
|
|
82
|
+
`http(s)` URL that points directly at a JPEG/PNG/WebP image is analyzed **in
|
|
83
|
+
place — no upload** (a URL that can't be recognized as a direct image returns
|
|
84
|
+
`needs_download` — fetch it first with `grab`). Results cache by source +
|
|
85
|
+
options, so re-runs are free.
|
|
86
|
+
|
|
87
|
+
### extract — structured facts (video or image)
|
|
66
88
|
|
|
67
89
|
```bash
|
|
68
90
|
tinycloud extract "<query>" <source> --json # free-form query
|
|
@@ -72,8 +94,13 @@ tinycloud extract --schema ./schema.json <source> # JSON-schema-shaped output
|
|
|
72
94
|
[--include-thumbnails] [--transcript-mode] [--background]
|
|
73
95
|
```
|
|
74
96
|
|
|
75
|
-
|
|
76
|
-
|
|
97
|
+
`<source>` may be a video **or an image** (0.3.7+) — same JPEG/PNG/WebP rule
|
|
98
|
+
and local-upload-vs-URL-in-place behavior as `see`. The segmentation flags
|
|
99
|
+
(`--segment-level`/`--segmentation`/`--shot-*`) apply to video only; pass any of
|
|
100
|
+
them with an image source and `extract` rejects it before upload
|
|
101
|
+
(`Images have no segments — drop --segment-level/--segmentation/--shot-* for an
|
|
102
|
+
image source.`). `--shot-min-seconds`/`--shot-max-seconds` work exactly as on
|
|
103
|
+
`watch`, against `--segmentation shots`.
|
|
77
104
|
|
|
78
105
|
### caption — subtitles and transcripts
|
|
79
106
|
|
|
@@ -82,6 +109,9 @@ tinycloud caption <source> [--format srt|vtt|ass] [--transcript]
|
|
|
82
109
|
[--diarize] [--word-level] [-o <file-or-dir>]
|
|
83
110
|
```
|
|
84
111
|
|
|
112
|
+
Video/audio only — an image source is rejected ("Images have no speech to
|
|
113
|
+
caption — use `tinycloud see` or `tinycloud extract` to read an image's text.").
|
|
114
|
+
|
|
85
115
|
### search — local keyword search (free)
|
|
86
116
|
|
|
87
117
|
```bash
|
|
@@ -89,6 +119,9 @@ tinycloud search "<keyword>" [--in <paths|source-ids|collection-ids|all>]
|
|
|
89
119
|
[--field speech|visual|text|entities] [--limit 50]
|
|
90
120
|
```
|
|
91
121
|
|
|
122
|
+
Searches cached context locally, including cached `see` image results (0.3.7+),
|
|
123
|
+
so a describe you've already run is greppable without another cloud call.
|
|
124
|
+
|
|
92
125
|
### probe — semantic search (cloud)
|
|
93
126
|
|
|
94
127
|
```bash
|
|
@@ -385,18 +418,18 @@ Output: `--json` (force JSONL envelopes), `--pretty` (one JSON array),
|
|
|
385
418
|
`--data raw`, `--raw-output` (raw backend payload; disables pipe protocol),
|
|
386
419
|
`--quiet`, `--verbose`.
|
|
387
420
|
|
|
388
|
-
Cache — on `watch`, `extract`, `caption`, `face`, and `workflow` only:
|
|
421
|
+
Cache — on `watch`, `see`, `extract`, `caption`, `face`, and `workflow` only:
|
|
389
422
|
`--refresh` (recompute), `--no-cache` (no persistence), `--cached` (reuse
|
|
390
423
|
exact-match history). `ask`/`probe` always call the cloud; use `search` for a
|
|
391
424
|
free cached lookup.
|
|
392
425
|
|
|
393
426
|
Upload/download refusal — on every verb that resolves a source:
|
|
394
|
-
`--no-upload` (refuse cloud upload → `needs_upload`) on `watch`/`extract`/
|
|
427
|
+
`--no-upload` (refuse cloud upload → `needs_upload`) on `watch`/`see`/`extract`/
|
|
395
428
|
`caption`/`face`/`workflow`/`publish` and `library collections add`;
|
|
396
429
|
`--no-download` (refuse local materialization → `needs_download`) on the same
|
|
397
430
|
set minus `publish`.
|
|
398
431
|
|
|
399
|
-
Source reuse (`watch`/`extract`/`caption`): `--source-id <id>`, `--result-id <id>`.
|
|
432
|
+
Source reuse (`watch`/`see`/`extract`/`caption`): `--source-id <id>`, `--result-id <id>`.
|
|
400
433
|
|
|
401
434
|
Sources: local paths, URLs, `cloudglue://files/<id>` URIs,
|
|
402
435
|
`collection:col_…`, or a bare Cloudglue file-id UUID — bare ids are
|
|
@@ -9,11 +9,11 @@ set -u
|
|
|
9
9
|
|
|
10
10
|
# Mirror tinycloud-skill.json: min_version / supported_range upper bound
|
|
11
11
|
# (CI diffs these against the manifest).
|
|
12
|
-
MIN_VERSION="0.3.
|
|
12
|
+
MIN_VERSION="0.3.7"
|
|
13
13
|
MAX_VERSION_EXCLUSIVE="0.4.0"
|
|
14
14
|
INSTALL_CMD='curl -fsSL https://app.cloudglue.dev/tinycloud.sh | bash'
|
|
15
15
|
# Kept in sync with ../tinycloud-skill.json required_features (CI diffs them).
|
|
16
|
-
REQUIRED_FEATURES="envelope.v1 watch.v1 extract.v1 caption.v1 search.v1 probe.v1 ask.v1 clip.v1 grab.v1 face.v1 jobs.v1 library.collections.v1 library.collections.create.v1 library.collections.mutate.v1 library.collections.entities.v1 library.sync.url.v1 workflow.v1 publish.v1 publish.manage.v1 publish.video.v1 setup.v1"
|
|
16
|
+
REQUIRED_FEATURES="envelope.v1 watch.v1 see.v1 extract.v1 extract.images.v1 caption.v1 search.v1 probe.v1 ask.v1 clip.v1 grab.v1 face.v1 jobs.v1 library.collections.v1 library.collections.create.v1 library.collections.mutate.v1 library.collections.entities.v1 library.sync.url.v1 workflow.v1 publish.v1 publish.manage.v1 publish.video.v1 setup.v1"
|
|
17
17
|
|
|
18
18
|
# 1) Binary present and responsive?
|
|
19
19
|
if ! command -v tinycloud >/dev/null 2>&1; then
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
{
|
|
2
|
-
"skill_version": "0.3.
|
|
2
|
+
"skill_version": "0.3.7",
|
|
3
3
|
"tinycloud": {
|
|
4
|
-
"min_version": "0.3.
|
|
5
|
-
"supported_range": ">=0.3.
|
|
4
|
+
"min_version": "0.3.7",
|
|
5
|
+
"supported_range": ">=0.3.7 <0.4.0",
|
|
6
6
|
"required_features": [
|
|
7
7
|
"envelope.v1",
|
|
8
8
|
"watch.v1",
|
|
9
|
+
"see.v1",
|
|
9
10
|
"extract.v1",
|
|
11
|
+
"extract.images.v1",
|
|
10
12
|
"caption.v1",
|
|
11
13
|
"search.v1",
|
|
12
14
|
"probe.v1",
|
|
@@ -22,8 +22,8 @@ in order, skipping any that already pass.
|
|
|
22
22
|
command -v tinycloud && tinycloud --version --json </dev/null
|
|
23
23
|
```
|
|
24
24
|
|
|
25
|
-
If installed and the JSON reports `"version"` ≥ 0.3.
|
|
26
|
-
skill requires), go to step 2. If missing, older than 0.3.
|
|
25
|
+
If installed and the JSON reports `"version"` ≥ 0.3.7 (the floor the tinycloud
|
|
26
|
+
skill requires), go to step 2. If missing, older than 0.3.7, or no
|
|
27
27
|
machine-readable version, install or upgrade it — ask the user which they
|
|
28
28
|
prefer:
|
|
29
29
|
|