fix: add global no-emoji output config#528
Merged
Merged
Conversation
…scribe command Two non-blocking, weekly-gated subscription nudges: - Rate limited (value prop): the rate-limit system line gains 'Get more tokens with a jcode subscription — /subscribe'. - Long task completed (goodwill): when a todo batch that ran 1+ hour finishes with every item completed at/above the quality-gate confidence, show 'jcode just worked 1h 23m for you. Support jcode: /subscribe'. Shared gating in subscribe_nudge.rs: at most once per week across sessions (persisted in ~/.jcode/subscribe-nudge.json), once per session, never during onboarding, never for existing jcode account holders, never in replay/test runtimes. /subscribe renders the pitch (token budgets, curated catalog, no key management, failover routing, open-source funding, live tier prices) and points at /login jcode. Registered in the command palette, /help overlay, and per-command help.
Treat usage_limit_reached / quota-exhaustion errors as non-retryable for auto-poke so an unattended session stops instead of re-sending refused requests every turn. Also parse unit-suffixed reset windows (e.g. 'Resets in 30d 4h 29m') so '30d' is no longer misread as a 30-second auto-retry; resets longer than a day are treated as terminal.
Scores each discovery sponsor 0-100 on whether agent-driven signups are attributable to jcode (referral marker on listing URL, setup URLs, CLI-flow attribution, live URL resolution). Includes per-sponsor expectation file, offline unit tests, and docs. First live run: all four sponsors score 80 because CLI-first setups rely on cookie-based referral links.
This reverts commit 708aaf3.
The gate previously queued its continuation only as a hidden system reminder, so the API call carried empty user content. Models interpreted that as 'the user sent an empty message' and replied conversationally instead of re-validating, burning all five gate attempts (observed live). - Send the gate continuation through queued_messages so it lands as user-role content the model actually acts on. - Rewrite the continuation texts to self-identify as an automated gate and to explicitly instruct re-running the todo tool with updated completion_confidence values. - Keep detecting the legacy continuation texts in is_auto_poke_message so persisted transcripts do not re-render them as user prompts.
…del picker Models covered only by placeholder 'remote-catalog'/'current' routes (from names-only catalog downgrades) now get their real provider routes (OpenAI OAuth/API key, OpenRouter, ...) re-synthesized when the picker opens. Also stop two poisoning paths: - debug_model_picker_live_json no longer writes lightweight fallback routes back into remote_model_options - persist_remote_model_catalog_cache strips placeholder routes so a stale cache cannot resurrect them on cold start
- Add allocation-cheap char-presence prefilter that rejects most non-matching entries before running the DP. - Replace the full (m+1)x(n+1) DP table with three rolling rows. - Discard weak scattered matches below a per-length score floor and raise the interior gap penalty so noise stitched across a token no longer surfaces in /models. - Multi-word queries now require every word to match some field (best-per-word sum) instead of stitching across the whole line. - Add a bench example and regression tests.
- move rate-limit error formatting into openai_rate_limit_format.rs - move parse_rate_limit_error into helpers_rate_limit_parse.rs - move auto-poke error markers into commands_auto_poke_errors.rs - move placeholder-route helpers + route_supports_reasoning_effort into inline_interactive_placeholder_routes.rs - consolidate subscribe-nudge session fields into SubscribeNudgeState
… mcp/skills - First line is 'jcode' (+ self-dev when canary) with dim status badges - server/client lines keep their version labels (hash on mismatch) - /model to switch hint moved to the front of the model line - Removed 'built ...' line; standalone mode shows semver under model - Auth inventory rendered vertically, one configured provider per line - mcp/skills lines capped with '+N more'; empty mcp line hidden - Working directory moved to the bottom of the header
…gn doc - docs/HARNESS_API_AND_DESKTOP_REWRITE.md: plan for a stable versioned harness API and a pure-Rust desktop rewrite on winit+wgpu+Vello+Parley - crates/jcode-harness-api: versioned NDJSON envelope (v/id/reply_to), curated ApiRequest/ApiEvent surface with forward-compat Unknown variants, blocking HarnessClient, schema snapshot tests - examples/harness_repl: reference client with --demo scripted server
… on /login heading - Updates box now renders at the top of the persistent header, sized to its content, instead of mid-header where it shifted the transcript - Configured (green/yellow) providers keep their own auth lines; unconfigured ones are listed inline after '/login to add provider:' so header height stays stable as credentials are added
…on protocol - crates/jcode-harness-api-server: jcode-harness-api-bridge binary listens on ~/.jcode/jcode-api.sock (JCODE_API_SOCKET) and dials the legacy daemon socket per client - JSON-to-JSON BridgeState translation (subscribe/state attach chase, message->turn_done, ping/history/error routing), 8 unit tests - validated live against the running daemon: hello -> attached -> pong
/reasoning felt like it controlled reasoning effort. Register /thinking in autocomplete as the public command (with /reasoning as a hidden alias), and reword the command output to say 'thinking display' and point to /effort for effort changes.
Greenfield desktop app per docs/HARNESS_API_AND_DESKTOP_REWRITE.md: - render.rs: vello RenderContext/Renderer with render-to-texture + blit - text.rs: reusable Parley Font/LayoutContext drawing glyph runs into Vello - main.rs: winit ApplicationHandler with a hello scene (card, accent dot, shaped wrapped paragraph) Verified: builds clean and opens a rendering window under niri/Wayland.
/thinking alone read like it changed reasoning effort. /thinking and /reasoning remain hidden aliases.
- harness.rs: background worker over jcode-harness-api (hello, attach, streaming updates) with a dedicated writer thread for user messages - main.rs: UI Model (status/transcript/input/busy), keyboard input, Enter-to-send chat loop rendered via Vello/Parley - states.rs: named deterministic Model nodes (connecting, attached_empty, mid_input, streaming, turn_done, error) - capture.rs: --capture <node|all> renders nodes offscreen to PNG (dependency-free PNG writer) so visuals are verifiable without a window, compositor, or screen capture Validated: --capture all produces correct PNGs for all six nodes; app connects live via the bridge and opens under niri.
Compute the initial-screen centering pad from the persistent header height alone and re-apply the same pad above the header once messages exist. The header stays in place when the first prompt arrives and the padding scrolls away naturally as the transcript grows.
Per ~/jcode-website/STYLE.md: two colors (ink #111 on paper #fff, grays as ink densities), JetBrains Mono everywhere, hairline rules instead of cards, letterspaced captions, 1.65 line height, measure-limited body copy, sentence case. theme.rs holds the tokens; text.rs gains ParagraphStyle (font stack, weight, letterspacing, line height). Verified via --capture all state-space renders.
Connects via the app's real harness worker, attaches a session, sends a message, streams the reply, and renders the final Model offscreen. Validated live: bridge + daemon round trip returned 'pong' and the captured frame shows the full print-design transcript.
Follow the old desktop's DesktopTheme shape: Theme struct with mode + semantic roles (background/text/muted/faint/rule/wash/error) carried on the Model; scene code never names literal colors. print_light (website ink-on-paper) is default, print_dark is the inverted variant, selectable via JCODE_DESKTOP2_THEME=light|dark|system. New themes are plain data. Verified: --capture renders both themes correctly.
The Updates box now fills the vertical centering padding above the header instead of expanding the header itself. With no unseen updates the padding stays blank, and leftover space stays at the top when the box is shorter than the padding, so the header never shifts.
…or per-keystroke picker filtering
…ute upgrade; prepared fuzzy query per keystroke
…ntent anchoring Info widgets now behave like residents of the transcript: - New widgets may only dock next to transcript lines whose negative space has held still for SETTLE_AFTER_FRAMES frames (never the streaming tail or a re-rendering region), via a new SettlementTracker intersected into the reliable dock profile. - Anchors are always content-anchored: a placed widget rides its transcript line in both scrolling and pinned-at-bottom modes instead of holding a screen row while text churns under it. - MAX_HIDDEN_FRAMES raised to a backstop (16 -> 120): residents wait out transient covering instead of teleporting to a new pocket. - Invalidation: a content-width change (re-wrap) flushes all anchors and settlement state for one clean global re-layout. - Stability tests now pin content-relative invariants (zero drift, zero size churn) instead of absolute screen position.
- Move PLAN_MCP_SKILLS.md and terminal-capabilities.md out of repo root - Group plan/TODO docs under docs/plans/ and audits under docs/audits/ - Update stale references in REFACTORING.md and commands_improve.rs - Add docs/README.md index with layout conventions
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
[display] emoji = falseandJCODE_NO_EMOJI=1Verification
cargo check -p jcode --bin jcodepassesFixes #526
--- — Jcode agent (automated triage), on behalf of @1jehuang