diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index 1ec84f3..9071dff 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -7,14 +7,14 @@ }, "metadata": { "description": "Deep video and image work for coding agents: analyze, describe, search, caption, clip, detect faces, and publish via the tinycloud CLI.", - "version": "0.3.17" + "version": "0.3.18" }, "plugins": [ { "name": "tinycloud", "source": "./", "description": "Video and image understanding and editing via the tinycloud CLI (Cloudglue): watch/see/extract/search/ask/face over videos and images, captions, clips, collections, plus one-command workflows for sales coaching, blog posts, ad analysis, meeting breakdowns, and YouTube publishing.", - "version": "0.3.17", + "version": "0.3.18", "author": { "name": "Cloudglue" }, "homepage": "https://tinycloud.sh", "repository": "https://github.com/cloudglue/tinycloud", diff --git a/.claude-plugin/plugin.json b/.claude-plugin/plugin.json index 1bcac22..06b0fa6 100644 --- a/.claude-plugin/plugin.json +++ b/.claude-plugin/plugin.json @@ -2,7 +2,7 @@ "name": "tinycloud", "displayName": "Tinycloud Video", "description": "Video and image understanding and editing via the tinycloud CLI (Cloudglue): watch/see/extract/search/ask/face over videos and images, captions, clips, collections, and one-command video workflows.", - "version": "0.3.17", + "version": "0.3.18", "author": { "name": "Cloudglue", "url": "https://cloudglue.dev" }, "homepage": "https://tinycloud.sh", "repository": "https://github.com/cloudglue/tinycloud", diff --git a/CLAUDE.md b/CLAUDE.md index b0a509d..e799bf1 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -233,7 +233,35 @@ schema/list/show/cancel are free, and failed runs auto-refund. `query` is also a workflow step node and an agent tool (it joins the LLM tool set, unlike `login`). Because the skill teaches the verb, the floor was raised to 0.3.17 (same merge-after-CDN gate — the dist PR merges only after CDN -`channels.stable` = 0.3.17). The host-level `profile` verb and the leading global flags `--home`/`--profile` +`channels.stable` = 0.3.17). 0.3.18 is a **sites-embed v8–v12 parity and +publish-guard release** (no new verbs, flags, or feature ids — verbs stay 17, +features stay 42; the embed features ship in the Cloudglue-served script, so +already-published sites pick them up without republishing): the embed family +the binary teaches moved from v7 to v12 — v8 splits delivery into a core +script plus a lazily-loaded live chunk (`/__cg/embed-live.js`; no +author-facing change, `/__cg/embed.js` stays the only script tag and +generators must never add the chunk themselves), v9 opens up the live +elements (`` gains `instructions` — a per-site system prompt — and a +Stop button; `` gains `scope`/`modalities`/`label-filters`/ +`threshold`/`limit`/`group-by="file"`/`sort-by`; `` streams +its synthesis and takes `exclude-weak-results`; `` takes +`threshold`/`limit` and plays hits as short bounded moments; the JS client's +`search`/`faceSearch` accept the full v1 `filter` object), v10 makes every +live panel restylable via `::part()` and emits host events (`cg-results` / +`cg-answer` / `cg-error`, plus cancelable `cg-resultopen`/`cg-citationopen` +to override how moments open), v11 adds `` + +`window.cloudglue.query` (natural-language analytical questions → inline +table + the compiled SQL — the site-side face of the same engine as the +`query` verb; point it at an entities/metadata collection), and v12 adds +`` + `window.cloudglue.transcript` (click-to-seek speech +turns that follow a bound player; unbilled) and `` +self-population. The binary-side change: the publish public-site guard now +also rejects ``, ``, and `` (the +`auto` attribute makes the otherwise public-safe chapters element +private-only; explicit-children `` stays public-safe). Because +the skill teaches the new elements and relies on that extended guard, the +floor was raised to 0.3.18 (same merge-after-CDN gate — the dist PR merges +only after CDN `channels.stable` = 0.3.18). The host-level `profile` verb and the leading global flags `--home`/`--profile` (also `$TINYCLOUD_HOME`; 0.3.3+) relocate state and are intentionally absent from `commands --json` — like the launcher's install/update, they're CLI/host concerns, not video operations. @@ -285,9 +313,9 @@ of printing JSON. Any script invoking the binary must redirect `/`), verifies its checksum, and execs the real binary. The package version pins the binary version, so -`npx @cloudglue/tinycloud@0.3.17` always runs tinycloud 0.3.17. It also adds two +`npx @cloudglue/tinycloud@0.3.18` always runs tinycloud 0.3.18. It also adds two wrapper commands: ```bash -tinycloud install --version 0.3.17 # pre-download a version +tinycloud install --version 0.3.18 # pre-download a version tinycloud install --latest # install latest stable and pin to it tinycloud update # move to latest stable, prune old versions ``` @@ -133,7 +133,7 @@ go to stderr) — pass `--json`. | `library` | Build & query Cloudglue collections (create/add/remove/delete) and browse connectors | | `jobs` | Poll, wait on, or forget async jobs | | `workflow` | Run packaged pipeline recipes (see below) | -| `publish` | Publish HTML artifacts as Cloudglue Sites; share videos | +| `publish` | Publish HTML artifacts as Cloudglue Sites (playback embeds everywhere; private sites add live chat/search/query/transcript elements); share videos | | `setup` | Configure the Cloudglue API key and service connections | | `login` | Browser sign-in — provisions & saves a Cloudglue API key (0.3.10+) | diff --git a/package.json b/package.json index ef4f7f4..a13fb62 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@cloudglue/tinycloud", - "version": "0.3.17", + "version": "0.3.18", "description": "Agent CLI for deep video and image work, by Cloudglue. Downloads the tinycloud binary on first run.", "bin": { "tinycloud": "bin/tinycloud.js" diff --git a/skills/tinycloud/SKILL.md b/skills/tinycloud/SKILL.md index d29f3db..6844347 100644 --- a/skills/tinycloud/SKILL.md +++ b/skills/tinycloud/SKILL.md @@ -265,12 +265,21 @@ Authoring your own recipes: [reference/workflow-authoring.md](reference/workflow link (content and playback stay sign-in gated), and platforms cache per exact URL, so turning it back off does not retract posted cards. Details in [reference/verbs.md](reference/verbs.md). -- Live-API discovery components (0.3.6+): the same embed script also defines - collection-scoped, **private-site-only** elements that let viewers search/chat - inside a published site — ``, ``, ``, - `` (chat/search/deep-search need a media-descriptions or - rich-transcripts collection; face-search needs face-analysis). `publish` - **hard-rejects** them on a public site → publish with `--visibility private`. +- Live-API components (0.3.6+; the fuller v8–v12 surface is taught from + 0.3.18): the same embed script also defines collection-scoped, + **private-site-only** elements that let viewers search/chat/query inside a + published site — `` (optional `instructions` system prompt + + Stop), ``/`` (tuning attributes; deep search + streams its synthesis), ``, `` (analytical + questions → inline table + compiled SQL; point at an entities/metadata + collection), `` (click-to-seek speech turns bound to a + player), and `` (self-populating chapters). + Chat/search/deep-search/transcript/chapters-auto need a media-descriptions + or rich-transcripts collection; face-search needs face-analysis; query runs + over any non-face collection. All are restylable via `::part()` and emit + `cg-results`/`cg-answer`/`cg-error` plus cancelable + `cg-resultopen`/`cg-citationopen` events. `publish` **hard-rejects** all of + them on a public site → publish with `--visibility private`. See [reference/verbs.md](reference/verbs.md). ## 5. Reference (load on demand) diff --git a/skills/tinycloud/reference/glossary.md b/skills/tinycloud/reference/glossary.md index c3c1ff0..2947bb2 100644 --- a/skills/tinycloud/reference/glossary.md +++ b/skills/tinycloud/reference/glossary.md @@ -169,14 +169,25 @@ connector?" or an envelope field needs explaining. sites also take `--preview-title` / `--preview-image`). Opting in makes those card fields publicly readable — content and playback stay sign-in gated — so ask the user first. See reference/verbs.md. -- **Discovery components (live API, 0.3.6+)** — the same embed script also - defines four collection-scoped, **private-site-only** elements that let a - viewer search or chat inside a published site and play results inline via - ``: ``, ``, `` (over a - media-descriptions / rich-transcripts collection) and `` (over - a face-analysis collection). They carry no share id, but `tinycloud publish` - rejects them on a public site — publish `--visibility private`. See - reference/verbs.md. +- **Live-API components (0.3.6+; v8–v12 surface taught from 0.3.18)** — the + same embed script also defines collection-scoped, **private-site-only** + elements that let a viewer search, chat, query, or read a transcript inside + a published site and play results inline via ``: `` + (optional `instructions` system prompt + Stop), `` (tuning: + `scope`/`modalities`/`label-filters`/`threshold`/`limit`/`group-by`/ + `sort-by`), `` (streamed synthesis; + `exclude-weak-results`) — over a media-descriptions / rich-transcripts + collection — `` (over a face-analysis collection), + `` (analytical questions → inline table + compiled SQL; any + non-face collection, best on entities/metadata), `` + (click-to-seek speech turns bound to a player; unbilled), and + `` (self-populating chapters). All restylable via + `::part()` with host events (`cg-results`/`cg-answer`/`cg-error`, + cancelable `cg-resultopen`/`cg-citationopen`); their implementation loads + lazily from `/__cg/embed-live.js` (automatic — never a second script tag). + They carry no share id, but `tinycloud publish` rejects them on a public + site (0.3.18 extends the guard to query/transcript/chapters-auto) — + publish `--visibility private`. See reference/verbs.md. ## State and isolation (0.3.3+) diff --git a/skills/tinycloud/reference/verbs.md b/skills/tinycloud/reference/verbs.md index e419822..b0d840a 100644 --- a/skills/tinycloud/reference/verbs.md +++ b/skills/tinycloud/reference/verbs.md @@ -654,26 +654,66 @@ private share — directly or through a container — on a public site. The full reference ships with the binary as `references/cg-video.md` inside the bundled media-artifact skill (under the install's `skills/` directory). -Discovery components (live API, 0.3.6+): the same `/__cg/embed.js` script also -defines four **collection-scoped** components that let a viewer search or chat -*inside* a published site and play the referenced moment inline via `` -— `` (conversational Q&A, streaming answers + inline moment citations; -optional `placeholder`), `` (keyword/transcript text search), -`` (agentic semantic search), and `` (upload or -paste a face image → matching moments). Each takes `collection=""` (plus -optional `accent-color` and `--cg-height` CSS sizing); the collection's `--type` -must match the element — ``/``/`` need a -`media-descriptions` or `rich-transcripts` collection, `` needs a -`face-analysis` collection. Unlike the playback elements they carry **no share -id**, but their live calls are refused on a public site, so `tinycloud publish` -**hard-rejects** a page that embeds any of them on a public site — publish with +Live-API components (0.3.6+; expressive surface below is sites embed v8–v12, +taught from 0.3.18): the same `/__cg/embed.js` script also defines +**collection-scoped** components that let a viewer search, chat, query, or +read a transcript *inside* a published site and play the referenced moment +inline via ``. Their implementation loads lazily from a second +chunk (`/__cg/embed-live.js`) the moment a page uses one — automatic; never +emit that file as a script tag, `/__cg/embed.js` stays the only script load. + +- `` — conversational Q&A, streaming answers + inline moment + citations, built-in Stop button. Optional `instructions` (the per-site + system prompt — persona, tone, scope) and `placeholder`. +- `` — keyword/transcript text search. Optional tuning: `scope` + (`segment` | `file`), `modalities`, `label-filters` (space/comma lists), + `threshold`, `limit`, `group-by="file"`, `sort-by` (`score` | + `item_count`). Malformed values degrade to defaults, never an error. +- `` — agentic semantic search; the synthesis streams in and + result cards land as found. Optional `scope`, `limit`, + `exclude-weak-results`. +- `` — upload or paste a face image → matching moments, + played as short bounded clips. Optional `threshold`, `limit`. +- `` (embed v11) — natural-language analytical question → inline + table + row count, with the compiled SQL shown under the answer (the + site-side face of the `query` verb's engine). Optional `max-rows`. Point + it at an entities or metadata collection — often a **different id** than + the one chat/search use on the same page. +- `` (embed v12) — click-to-seek + speech turns with timestamps + speakers; with `for=""` the + active turn follows the playhead, without it turns open as modal clips. + Unbilled. Height via `--cg-height`. +- `` (embed v12) — chapters + self-populate from the live API instead of baked-in `` + children; auto chapters always seek-and-continue. The `auto` attribute + makes the otherwise public-safe chapters element private-site-only. + +Every live panel is restylable from page CSS via `::part()` hooks +(`panel`/`input`/`send`/`status`/`results`, per-card `result*`; chat adds +`log`/`message`(+role)/`bubble`/`citation`/`stop`) and emits host events: +`cg-results`, `cg-answer`, `cg-error` (carries the HTTP status), plus the +**cancelable** `cg-resultopen`/`cg-citationopen` — `preventDefault()` swaps +the built-in clip mount for your own handling (embed v10). A +`window.cloudglue` JS client (responses/search/deepSearch/faceSearch/query/ +transcript/sharesForFiles/renderCitations) backs fully custom UIs. + +Each collection-scoped element takes `collection=""` (plus optional +`accent-color` and `--cg-height` CSS sizing); the collection's `--type` must +match the element — ``/``/``/ +``/`` need a `media-descriptions` or +`rich-transcripts` collection, `` needs a `face-analysis` +collection, `` runs over any non-face collection. Their live calls +are refused on a public site, so `tinycloud publish` **hard-rejects** a page +that embeds any of them on a public site (0.3.18 extends the guard to +``/``/``) — publish with `--visibility private`. End to end: build a collection of the right type (`library collections create … --type …` → `library collections add` → poll -`library collections show` until each file is `completed`) → author HTML with -the component → `tinycloud publish --visibility private`. Full reference -plus a kitchen-sink page wiring every component (props, JS API, events) ships -with the binary as `references/cg-video.md` and `references/kitchen-sink.html` -inside the bundled media-artifact skill. +`library collections show` until each file is `completed`; for ``, +`query schema --in collection:` shows what's queryable) → author HTML +with the component → `tinycloud publish --visibility private`. Full +reference plus a kitchen-sink page wiring every component (props, JS API, +events) ships with the binary as `references/cg-video.md` and +`references/kitchen-sink.html` inside the bundled media-artifact skill. ### setup — credentials diff --git a/skills/tinycloud/scripts/preflight.sh b/skills/tinycloud/scripts/preflight.sh index 52e25bb..65ae326 100755 --- a/skills/tinycloud/scripts/preflight.sh +++ b/skills/tinycloud/scripts/preflight.sh @@ -9,7 +9,7 @@ set -u # Mirror tinycloud-skill.json: min_version / supported_range upper bound # (CI diffs these against the manifest). -MIN_VERSION="0.3.17" +MIN_VERSION="0.3.18" MAX_VERSION_EXCLUSIVE="0.4.0" INSTALL_CMD='curl -fsSL https://app.cloudglue.dev/tinycloud.sh | bash' # Kept in sync with ../tinycloud-skill.json required_features (CI diffs them). diff --git a/skills/tinycloud/tinycloud-skill.json b/skills/tinycloud/tinycloud-skill.json index 161d6d2..4823fc3 100644 --- a/skills/tinycloud/tinycloud-skill.json +++ b/skills/tinycloud/tinycloud-skill.json @@ -1,8 +1,8 @@ { - "skill_version": "0.3.17", + "skill_version": "0.3.18", "tinycloud": { - "min_version": "0.3.17", - "supported_range": ">=0.3.17 <0.4.0", + "min_version": "0.3.18", + "supported_range": ">=0.3.18 <0.4.0", "required_features": [ "envelope.v1", "watch.v1",