Skip to content

Releases: deepakkumar1984/blazorly-harness

blazorly 0.5.0

Choose a tag to compare

@github-actions github-actions released this 21 Sep 11:30

What's New

Attach files and screenshots in chat

Paste, drag & drop, or use the 📎 button — anywhere in the app:

  • Screenshots (PNG/JPG/GIF/WebP) go straight to vision models as image blocks — no saving to disk first
  • Text files (.txt, .md, .json, .csv, code, logs…) are inlined into the message, capped at 256 KB like @file references
  • Documents (PDF, DOCX, XLSX, PPTX…) are dropped into .blazorly-uploads/ in the workspace with their real names, and the agent is pointed at them to inspect with its tools (pdftotext, python, …)

Pending attachments show as chips above the composer (🖼 / 📄 / 📑 / 📎 with the filename) — click one to remove it. Send works with or without text. Uploads travel over HTTP (POST /api/session.uploadFile, 32 MB cap), never through the realtime circuit — so full-size screenshots attach reliably. Text-only pastes are never intercepted. Dropping a file anywhere on the page no longer navigates the browser away.

Skills from the shared collection

The skill discovery now reads three roots: ~/.blazorly/skills/ (native, wins collisions), ~/.agents/skills/ (the shared convention your other agent tools read — one collection serves them all), and <workspace>/.blazorly/skills/ (per project). Any standard SKILL.md folder is discovered live — new skills appear on the next turn without a restart, and the model loads them via the skill tool when your task matches a description.

Website

Initial documentation site under website/ (features, guides, install pages) with a static build script.

blazorly 0.4.0

Choose a tag to compare

@github-actions github-actions released this 20 Sep 11:46

What's New

Swarm — parallel delegation with review

  • New swarm tool: a planner subagent auto-shards your objective into independent tasks, workers execute concurrently as background subagents (capped at max_parallel), and a reviewer agent verifies the completed work in the workspace — failed tasks re-dispatch with the review notes up to max_review_rounds
  • Standalone review tool: spawns an independent reviewer subagent forked from your conversation that reads the actual files, runs cheap verification, and returns a structured verdict (pass | fail | concerns) with severity-tagged issues

Delegation runs in one chat

  • Delegated children no longer appear as separate chats in the sidebar — they run inside the parent chat
  • Agents progress panel beside the tasks panel: live indicators (pulsing ◐ while working, ✔ finished, ✕ error), per-worker summary, each row links to the child session for full inspection
  • Children can never hang on you: ask_user_question from a delegated child now answers itself instantly with standing guidance — no more invisible blocking prompts
  • Prompt guidance now reserves delegation for genuinely complex or parallelizable work; small tasks stay inline

Parallel teams

  • Team tools (send_message, spawn_teammate, etc.) are now concurrency-safe: batch several in one response to run teammates in parallel — deliveries to the same teammate still process in order (per-child gates in the subagent seam)

Tool gate — hybrid tool selection

  • When MCP servers push the visible tool set past ~28, the pure-code gate prunes each request's schemas to a shortlist (core tools + recently used + lexical relevance to the current brief) with zero extra AI calls
  • With tool-gate in your System One seams and a JEV-1 key, the ambiguous tail gets one System One Choice (cached per brief, so steps within a turn reuse it) — this is the consensus hybrid pattern: rules carry the easy cases, a small decision model handles the rest
  • Degrade-to-full on any failure: the gate falling back to the full tool list is byte-identical to pre-gate behaviour. Metrics at GET /api/decisionstoolGate.stats

UX polish

  • Sidebar scrolls properly when a workspace has many sessions — the bottom menu (Add workspace / Settings / theme) stays pinned
  • Collapsible workspace groups: click a workspace header to collapse its session list, with a session-count chip showing what's hidden; your choices persist across reloads, and the smart default collapses everything except the workspace you're in
  • Permission preset default → full access; the legacy danger-full-access spelling is now full-access (backward-compatible — old settings and session logs resolve to the same mode). Dropdown labels shortened to read-only / workspace-write / full access

blazorly 0.3.0

Choose a tag to compare

@github-actions github-actions released this 20 Sep 03:31

What's New

Live reasoning & tool status

  • The chat shows a live thinking indicator with an elapsed timer while the model reasons, including a calm placeholder for providers that buffer long before their first byte.
  • Tool cards now tick elapsed time while running, so long builds and tests are visibly alive.
  • New first-byte watchdog (LlmRuntime.FirstByteTimeout): a silent or dead endpoint fails fast instead of hanging the turn forever.

AI docs generation

  • New "Generate docs" toolbar action: scans the workspace and drafts hierarchical AGENTS.md documentation with AI — preview the result before anything is written, and manual notes are preserved on regeneration.

Web UI

  • Composer now grows with your text (up to 200px) and keeps the end of large pasted text in view — no more scrolling a one-line box to find the tail of what you pasted.
  • Tooltips on the session toolbar buttons; failed turns are surfaced clearly in the transcript.

CLI & console

  • blazorly serve --host <ip|name> — bind the web UI to a specific address.
  • --token <secret> — pin the console access token for remote access (default: a fresh random token each boot).
  • Reasoning effort can be set when initializing a session; /effort and the model menu cover it in the UI.

Fixes & internals

  • Clearer errors for invalid requests; OpenAI-compatible adapters now parse SSE-framed error messages instead of surfacing them as truncations.
  • Session timeout handling and error-message improvements across the agent loop and compaction.
  • Provider catalog refreshed for new routes and per-route API key handling.

blazorly 0.2.0

Choose a tag to compare

@github-actions github-actions released this 18 Sep 22:56

blazorly 0.2.0

Token efficiency, smarter model metadata, and a rebuilt chat transcript.

Token efficiency

  • Runtime-context snapshots no longer pile up in history: only the latest snapshot is sent to the model (older ones were full duplicates). Saves ~15–20% of tokens on long multi-step turns. Transcripts still show every snapshot.

Reasoning effort

  • Models that advertise no effort levels (most discovered/API-only models) now offer low / medium / high / xhigh / max with a default of high — the model picker and /effort both work instead of reporting "does not advertise".

Context windows & output caps

  • /models endpoints that publish sizes (OpenRouter-style context_length, max_completion_tokens, …) are now read and persisted per model, surviving restarts; legacy id-only settings files keep working.
  • Resolution order everywhere: API metadata → catalog → settings fallback.
  • New defaults for fresh setups: 256K context window (was 64K), 64K max output tokens (new setting, clamped per model so small-output models can't 400), 0.9 compaction threshold (was 0.72).

Chat transcript

  • Tail-windowed loading: refresh renders the newest 200 messages instantly and jumps straight to the bottom — no more load-stop-load virtualization walk.
  • Scroll up (or "Show earlier messages") to prepend 100 more while holding your reading position.
  • Fixed follow mode getting stuck mid-chat during streaming, and instant (non-animated) programmatic scrolling.

Upgrade notes

  • Existing settings.json files keep their saved values — to pick up the new 256K / 64K / 0.9 defaults, update them on the Settings page (Context section).
  • Requests now send an explicit max_tokens (resolved cap) instead of leaving it to the provider default.

Install / upgrade

# Linux / macOS
curl -fsSL https://raw.githubusercontent.com/deepakkumar1984/blazorly-harness/main/installer/install.sh | sh

# Windows
powershell -c "irm https://raw.githubusercontent.com/deepakkumar1984/blazorly-harness/main/installer/install.ps1 | iex"

blazorly 0.1.9

Choose a tag to compare

@github-actions github-actions released this 18 Sep 00:25

blazorly 0.1.9

Decision model — System One (new, off by default)

  • A decision seam for the places in the harness that make a judgment rather than a generation: unstructured state in, typed decisions out (Choice / Score / Noul), one parallel pass, no generated text. New Core/Decisions layer: DecisionModel, DecisionService, SystemOneClient, RiskGatePlugin.
  • Two live seams:
    • auto-plandoes this brief need a plan before anything changes? Engages plan mode at P ≥ autoPlanEngageAt (0.60), skips at P ≤ autoPlanSkipAt (0.25), and abstains to the existing autoPlanThreshold heuristic in between.
    • risk-gatecould this call destroy data or leak secrets irreversibly? Parks the call for approval at P ≥ riskGateThreshold (0.5).
  • Configure from Settings → Capabilities or settings.json: enableSystemOne, systemOneApiKey (also resolves from SYSTEMONE_API_KEY), systemOneBaseUrl / systemOnePath / systemOneModel / systemOneAuthStyle / systemOneTimeoutMs / systemOneSeams, plus enableRiskGate and riskGateThreshold.
  • New CLI: blazorly decisions doctor (what resolved, which seams are live) and blazorly decisions probe [--seam auto-plan|risk-gate|loop] [--text|--json] — one real call printing the raw request, raw reply and parsed result, so a schema mismatch is a two-line fix rather than a mystery.
  • New endpoint: GET /api/decisions reports config, live vs plannedSeams, and cost so far (calls, answered, degraded, cache hits, mean/max latency, per-seam counts). A climbing degraded with no answered means the endpoint or reply shape needs adjusting.
  • Every decision is durable: an ignorable decision/result event records the seam, implementation, state hash, probabilities and latency, so a behaviour change is attributable.
  • Safe to leave on: no opinion is a first-class result — disabled, unconfigured, timed out, errored or uncertain all fall back to the deterministic logic that was already there, so a decision model can never be the reason a turn fails. The gate is escalate-only: it can turn an allow into an ask, never an ask into an allow, never softens a deny, and stands down entirely in headless runs (new ApprovalService.CanAsk). Reads, searches and fetches never reach the model, keeping it off the hot path.
  • Evals pin both flags off (EvalSandbox.PinnedSettings) so scores stay reproducible and comparable with older runs. loop and compaction are named in the settings vocabulary but not yet consumed — reported under plannedSeams, never as live.

Rate limits and retries

  • The harness still never throttles itself; it only reacts to provider failures. Waits are now chosen in order: provider Retry-After honored verbatim up to maxRetryAfterMs (120s) → rate-limit window backing off from rateLimitMinDelayMs (5s) doubling to rateLimitMaxDelayMs (30s) → generic ladder initialDelayMs (500ms) to maxDelayMs (10s) with jitterRatio.
  • retry is fully configurable, with per-route retryProviders overrides (e.g. give a flaky provider maxRetries: 8 without changing global behaviour) and "mode": "always" for unattended batch runs. Stop/interrupt cancels a pending backoff immediately.
  • Each retry writes a durable llm/retry + llm/retry-started pair; the trajectory ↻ chip now reports the attempt and the wait in seconds and flags a delay the provider asked for versus one we computed.

Provider errors

  • A 429 is not always a rate limit. Balance/quota exhaustion (Z.ai 1113, OpenAI insufficient_quota) now classifies as QUOTA, which is not retryable — the turn fails in about a second with the provider's own words instead of spending ~95s retrying something that cannot succeed. Genuine throttling stays RATE_LIMIT and is retried.
  • Every failure carries the provider's message/code, surfaced consistently in the web turn banner, blazorly run (stderr and the error field of --json), ACP (turn failed: …) and the session log.
  • Connection failures now name the phase and cause: DNS NXDOMAIN, temporary resolver failure, connection refused, connect timeout, network unreachable, rejected TLS handshake, upload-phase close, mid-stream drop, or request timeout — with the endpoint and underlying socket error.
  • --provider <id> switches the whole route, not just the label: keys and base URLs are stashed per provider (providerKeys, providerBaseUrls, baseUrlProvider), so an override never sends one route's credentials to another host. The Settings page keeps a custom gateway URL attached to the newly selected provider, since a proxy usually serves all of them.

UI

  • Chat transcript is substantially denser: assistant messages no longer spend a full row below each step on actions, and tool rows, turn footers and markdown paragraph spacing were tightened — roughly half the vertical cost for a multi-tool turn.
  • Copy is now a hover-revealed icon on the message header (with a ✓ tick on success) instead of a permanent copy link; keyboard focus and touch devices still reach it.

Tests and docs

  • 481 tests: 479 pass, 2 pre-existing macOS failures (run_code confinement requires Linux Landlock). New: DecisionTests and DecisionBootTests against a fake decision server (parsing, choices/ratings, timeouts, HTTP failure, caching, no-op model, risk-gate interaction with tool policy and approval), TransportErrorTests, MultiProviderTests, and retry/kernel coverage.
  • README gained Decision model (System One), Rate limits and retries and Provider errors sections; research/system-one-decision-layer.md and research/per-workspace-learning.md capture the design reasoning.

Install / update

curl -fsSL https://raw.githubusercontent.com/deepakkumar1984/blazorly-harness/main/installer/install.sh | sh
powershell -c "irm https://raw.githubusercontent.com/deepakkumar1984/blazorly-harness/main/installer/install.ps1 | iex"

Already installed? blazorly update swaps in this release (checksum-verified).

Full Changelog: v0.1.8...v0.1.9

blazorly 0.1.8

Choose a tag to compare

@github-actions github-actions released this 17 Sep 02:41

blazorly 0.1.8

Sandbox

  • bash and run_code now prompt for user approval when Linux Landlock is unavailable (macOS/Windows) instead of failing hard. The user sees "Allow once" / "Reject" buttons in the chat UI.
  • Permission menu shows ⚠ indicators next to read-only and workspace-write when Landlock is not available, with a footer explaining that only danger-full-access runs without prompting.
  • SessionRepair now handles corrupted session logs with duplicate TurnStart events by inserting proper TurnEnd boundaries, preventing crash-on-load for damaged sessions.

UI

  • Model selection and reasoning effort are now separate controls in a modal dialog (replacing the inline popover). The header shows two compact chips: provider/model and effort level.
  • Trajectory raw events view is paginated (50 events per page) with First/Previous/Next/Latest navigation, preventing UI hangs on sessions with thousands of events.
  • Approval prompts and user questions auto-scroll into view when they arrive, using post-render scroll instead of synchronous scroll.
  • Dropdown menus (model, permission, context) are no longer blocked by the transparent backdrop overlay — the header stacking context was removed.

Fixes

  • Page no longer crashes on cold server start (SSR) due to null session/agent references in the title and workspace label.
  • LoadSessionAsync catches errors and shows a user-friendly message with a retry button instead of crashing the entire page.
  • Build succeeds with 0 errors; 411 tests pass (2 pre-existing macOS sandbox failures, 3 network-dependent search test failures).

What's Changed

Full Changelog: v0.1.7...v0.1.8

blazorly 0.1.7

Choose a tag to compare

@github-actions github-actions released this 16 Sep 20:43

blazorly 0.1.7

Tool contract

  • edit / interrupt_agent / wait_agent / ralph: published snake_case arguments now bind (the
    serializer is camelCase). A new schema-binding audit round-trips every tool's published
    schema through the real serializer, so this class of silent argument drop fails the build.
  • A required argument sent as explicit null is rejected with an actionable INVALID_ARGS
    message instead of surfacing as "Value cannot be null. (Parameter 'value')".
  • All three wire adapters emit parameters.properties for argument-less tools; LM Studio and
    xAI answer 400 invalid_type without it.

Sandbox

  • Hosts without Landlock (macOS/Windows) run bash/run_code directly when no sandbox was
    configured, with a one-time notice. Explicit per-session presets still fail closed;
    sandboxFailClosedWhenUnsupported restores strict behavior everywhere.
  • run_code resolves relative paths against the session workspace and exposes Workspace;
    path errors name the cwd they resolved against.
  • Forwarded tool calls use published schema names in both in-process and confined modes.

Diagnostics

  • Transport failures name the phase, endpoint and payload size instead of the opaque
    "Error while copying content to a stream."; mid-stream drops report how much was kept.

Evals

  • Execution-backend axis: --sandbox landlock,e2b,none, per-task "sandbox", one pinned home
    per backend (behavior pinned, only routes/credentials inherited), and skipped rows with a
    reason for backends that cannot run here — never a silent pass.
  • environment.json manifest: git SHA + dirty flag, OS/arch, Landlock and E2B availability,
    applied plugins, published tools and a per-backend toolSchemaHash (SHA-256 over the
    canonicalized schemas), mirrored into results.json and summary.md.
  • New recover-tool-failure task scores durable tool-failure recovery inside one turn, plus
    scripts/fake_openai.py so scripted tasks run without a live provider.

What's Changed

Full Changelog: v0.1.6...v0.1.7

blazorly 0.1.6

Choose a tag to compare

@github-actions github-actions released this 05 Sep 11:48

Full Changelog: v0.1.5...v0.1.6

blazorly 0.1.5

Choose a tag to compare

@github-actions github-actions released this 05 Sep 00:33

Full Changelog: v0.1.4...v0.1.5