From 2ae945741f9f4744170fd46f86c1ebdd081c7d2e Mon Sep 17 00:00:00 2001 From: KDR Date: Mon, 10 Aug 2026 11:30:34 -0700 Subject: [PATCH 1/2] =?UTF-8?q?Prepare=20for=20tinycloud=200.3.19:=20the?= =?UTF-8?q?=20silent-stop=20fix=20=E2=80=94=20surface=20and=20recover=20ou?= =?UTF-8?q?tput-token=20truncation=20(no=20floor=20raise)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit tinycloud 0.3.19 is a host-agent reliability release: adaptive-thinking chat models stream a thinking block that spends from the same per-response max_tokens budget as text and tool calls, so a long think could exhaust the old 8192-token cap, come back stop_reason: max_tokens with no error, and the interactive agent silently yielded mid-task with only a duration line. 0.3.19 surfaces length-stopped (and empty stop-ended) turns as a status line, raises the cap to 32000 (TINYCLOUD_MODEL_MAX_TOKENS), blocks the final tool call of a truncated message so the model re-issues it, auto-continues bounded to 2 per user turn (TINYCLOUD_AUTO_CONTINUE=0 / preferences.autoContinue to disable), labels streamed thinking "Reasoning", and adds an additive stop_reason field + stderr warning to headless -p --json. No new verbs, flags, or feature ids (verbs stay 17, features stay 42) and nothing the skill teaches changed, so the skill floor stays 0.3.18 (min_version/supported_range/preflight/REQUIRED_FEATURES untouched — the 0.3.13 no-raise pattern). - package.json, plugin.json, marketplace.json, tinycloud-skill.json skill_version → 0.3.19; README pin examples → 0.3.19 - CLAUDE.md: 0.3.19 paragraph appended to the binary-contract history - skills/tinycloud/reference/setup.md: TINYCLOUD_MODEL_MAX_TOKENS and TINYCLOUD_AUTO_CONTINUE added to the env table (0.3.19+) Verified: npm test 42/42 against the offline fixture CDN; shellcheck clean; claude plugin validate passed; CI metadata-sync check run locally (in sync: 31 features, range >=0.3.18 <0.4.0). Real-tarball e2e pending the 0.3.19 binary release. Merge only after the CDN serves the 0.3.19 pinned tarballs and channels.stable = 0.3.19 — the push-to-main npx-against-CDN leg packs the 0.3.19 launcher and downloads exactly that pinned version. --- .claude-plugin/marketplace.json | 4 ++-- .claude-plugin/plugin.json | 2 +- CLAUDE.md | 23 ++++++++++++++++++++++- README.md | 4 ++-- package.json | 2 +- skills/tinycloud/reference/setup.md | 2 ++ skills/tinycloud/tinycloud-skill.json | 2 +- 7 files changed, 31 insertions(+), 8 deletions(-) diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index 9071dff..a50ee6c 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.18" + "version": "0.3.19" }, "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.18", + "version": "0.3.19", "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 06b0fa6..e692a47 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.18", + "version": "0.3.19", "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 73c55c7..deed56f 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -261,7 +261,28 @@ also rejects ``, ``, and `` (the 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` +only after CDN `channels.stable` = 0.3.18). 0.3.19 is a **host-agent +reliability release — the silent-stop fix** (no new verbs, flags, or feature +ids — verbs stay 17, features stay 42; the changes live in the interactive +agent and headless `-p`, not the video-verb surface the skill drives, so the +skill floor stays 0.3.18 — the 0.3.13 no-raise pattern): adaptive-thinking +chat models stream a thinking block that spends from the same per-response +`max_tokens` budget as text and tool calls, so a long think could exhaust the +old 8192-token cap, return `stop_reason: max_tokens` with no error, and the +agent silently yielded mid-task with only a duration line (typing `continue` +resumed it). Now a `length`-stopped turn — and an empty `stop`-ended one, +e.g. a dropped stream read as a clean end — surfaces a status line instead of +a quiet handoff; the cap rises to 32000, tunable via +`TINYCLOUD_MODEL_MAX_TOKENS`; a guard blocks the final tool call of a +`length`-stopped message with an error result (truncated tool-call JSON gets +repaired into valid-but-incomplete args, e.g. a write with half a file) so +the model re-issues it in smaller pieces, wired in both the interactive +agent and headless `-p`; a truncated turn auto-continues via a hidden +prompt, bounded to 2 consecutive per user turn, disabled with +`TINYCLOUD_AUTO_CONTINUE=0` or `preferences.autoContinue: false`; streamed +thinking shows a "Reasoning" loader label; and headless `-p --json` traces +gain an additive `stop_reason` field plus a stderr warning on truncation. +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. diff --git a/README.md b/README.md index 4a6a162..e7290df 100644 --- a/README.md +++ b/README.md @@ -17,11 +17,11 @@ The npm package is a small launcher: on first run it downloads the matching platform distribution from Cloudglue's CDN (cached under `~/.tinycloud/versions//`), verifies its checksum, and execs the real binary. The package version pins the binary version, so -`npx @cloudglue/tinycloud@0.3.18` always runs tinycloud 0.3.18. It also adds two +`npx @cloudglue/tinycloud@0.3.19` always runs tinycloud 0.3.19. It also adds two wrapper commands: ```bash -tinycloud install --version 0.3.18 # pre-download a version +tinycloud install --version 0.3.19 # pre-download a version tinycloud install --latest # install latest stable and pin to it tinycloud update # move to latest stable, prune old versions ``` diff --git a/package.json b/package.json index a13fb62..90dea21 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@cloudglue/tinycloud", - "version": "0.3.18", + "version": "0.3.19", "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/reference/setup.md b/skills/tinycloud/reference/setup.md index fe2cbf6..2846442 100644 --- a/skills/tinycloud/reference/setup.md +++ b/skills/tinycloud/reference/setup.md @@ -115,6 +115,8 @@ binary reports in `--version --json`. | `TINYCLOUD_HTTP_RETRIES` | Bounded auto-retries for idempotent (GET/HEAD) Cloudglue calls on transient errors — 408/429/5xx, network blips (default 5; `0` disables) | | `TINYCLOUD_JOB_WAIT_TIMEOUT_MS` | Wall-clock budget for async job waits (the `waitForReady` poll behind `watch`/`extract`/`face`) (default 10min; `0` disables) | | `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+ | +| `TINYCLOUD_MODEL_MAX_TOKENS` | Per-response output-token cap for agent chat-model turns (interactive and headless `-p`) — thinking, text, and tool calls share it (default 32000). 0.3.19+ | +| `TINYCLOUD_AUTO_CONTINUE` | `0` stops the interactive agent auto-resuming after an output-token-truncated turn (default on, bounded to 2 consecutive; also `preferences.autoContinue: false` in config). 0.3.19+ | Every Cloudglue request carries a hard deadline, so a stalled route can never hang the CLI indefinitely; a timeout surfaces as a retryable `upstream` error diff --git a/skills/tinycloud/tinycloud-skill.json b/skills/tinycloud/tinycloud-skill.json index 4823fc3..dc24eec 100644 --- a/skills/tinycloud/tinycloud-skill.json +++ b/skills/tinycloud/tinycloud-skill.json @@ -1,5 +1,5 @@ { - "skill_version": "0.3.18", + "skill_version": "0.3.19", "tinycloud": { "min_version": "0.3.18", "supported_range": ">=0.3.18 <0.4.0", From a6e6b7dcb941430e2c9563b52edd74a55300fdff Mon Sep 17 00:00:00 2001 From: KDR Date: Mon, 10 Aug 2026 15:03:31 -0700 Subject: [PATCH 2/2] 0.3.19 adjustments from the merged release: headless -p model-failure parity MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The release's review follow-through commits extended the fix beyond the original scope: headless -p gained the interactive agent's 0.3.7 chat-retry layer (TINYCLOUD_MODEL_RETRIES now covers both agents) and errored turns became truthful — "✖ turn failed" on stderr, an error field in the --json trace, exit 1 (previously a backend blip could exit 0 with an empty, zero-usage trace). Knob names and defaults verified against the merged v0.3.19 source: DEFAULT_MODEL_MAX_TOKENS = 32000, MAX_AUTO_CONTINUES = 2, preferences.autoContinue. - setup.md: TINYCLOUD_MODEL_RETRIES row scoped "0.3.7+ interactive; 0.3.19+ also headless -p" - CLAUDE.md: headless-parity sentence appended to the 0.3.19 paragraph; live-CDN note → 0.3.19 (accurate at merge time — the CDN upload precedes the merge, per the 0.3.13 prep-PR precedent) --- CLAUDE.md | 11 ++++++++--- skills/tinycloud/reference/setup.md | 2 +- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index deed56f..a06bc3a 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -282,6 +282,11 @@ prompt, bounded to 2 consecutive per user turn, disabled with `TINYCLOUD_AUTO_CONTINUE=0` or `preferences.autoContinue: false`; streamed thinking shows a "Reasoning" loader label; and headless `-p --json` traces gain an additive `stop_reason` field plus a stderr warning on truncation. +Headless `-p` also reaches parity with the interactive agent on model +failures: it gains the 0.3.7 chat-retry layer (`TINYCLOUD_MODEL_RETRIES` now +covers both agents), and an errored turn is truthful — `✖ turn failed` on +stderr, an `error` field in the `--json` trace, exit 1 (previously a +backend blip could exit 0 with an empty, zero-usage trace). 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 @@ -334,9 +339,9 @@ of printing JSON. Any script invoking the binary must redirect `