Skip to content

ci: release packages - #22

Open
github-actions[bot] wants to merge 1 commit into
mainfrom
changeset-release/main
Open

github-actions[bot] wants to merge 1 commit into
mainfrom
changeset-release/main

Conversation

@github-actions

@github-actions github-actions Bot commented Sep 26, 2026 •

Copy link
Copy Markdown

This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and publish to npm yourself or setup this action to publish automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.

Releases

scream-code@0.20.0

Minor Changes

  • 151b05d - A fired scheduled task now also surfaces on the status row above the editor, not only as a transcript block. The chip follows the shared grammar: ⏰ 定时任务已触发:<preview> — with (合并 N 次) when several fires collapsed into one delivery, ⏰ 一次性提醒已触发:… for a one-shot task, and ⚠️ 定时任务已过期,仍触发:… in the warning colour for a task past its 7-day cutoff. The prompt preview is sanitized and capped at 40 characters because it is model-authored text written into a terminal row. The reminder owns its own slot (10s TTL) drawn to the left of the collaboration ticker (8s), so a help request can neither evict a fired reminder nor outlive it, and a narrow terminal truncates the ticker first. Both chips are dropped together when the session switches.

  • 1a6ccd3 - Scheduled tasks now report back to the IM chat that owns the session. A cron fire runs inside the session with no inbound context, so its output used to finish invisibly: the driver now keeps one event subscription per live session and hands cron.fired to a CronRelay, which announces the fire (⏰ 定时任务已触发:…, the same copy the TUI status row uses), collects the turn's final text with LineTurnCollector, and delivers it through the new sendProactive path. Both channels send using the target they cached from inbound traffic — Lark keeps the chat id (sendToChat), WeChat keeps the peer and its context_token (sendText) — and both answer sent / no-target / failed instead of throwing, so a scheduled task can never crash the daemon. A fire that lands while a user turn is running is skipped, because steer() has already merged it into that turn and its reply reaches the chat anyway; one forward runs per session at a time. The same tasks can now be managed from the chat itself: /cron lists them, /cron add <分 时 日 月 周> <要做的事> creates one on the current session (so it belongs to that chat and reports back here), and /cron rm <id> deletes. A fired turn that ends without any text now reports ⚠️ 定时任务执行结束但没有输出:… to the chat instead of finishing in silence, and tasks can be quiet too: silent skips the "fired" notice while still delivering the result, mute delivers nothing at all (both exposed through CronCreate and /cron add --silent|--mute), and each task remembers lastError from its latest run, shown in /cron list and cleared by the next clean run. Media sent from a scheduled turn now resolves through a platform-level sender fallback, so an image still goes out after /stop, /cancel or a restart. A guard drops a turn that never reports its end after 15 minutes so one stuck task cannot block later fires. WeChat still cannot push after a daemon restart until the user messages the bot once — that restriction is the platform's token model, and the log says so rather than failing silently.

  • 1a6ccd3 - IM channels gain an interrupt and lose their silent gaps. /stop aborts the turn that is running right now via the new LineSessionDriver.stopActiveTurn() — the aborted turn suppresses its own reply so the chat is not told twice — and it is the one command that is not blocked while busy. A message that lands behind a running turn now answers immediately with 收到,前面还有 N 条在处理中。回复 /stop 可中止当前任务。 instead of waiting in silence. Voice support is probed once at startup (ffmpeg -encoders, looking for AMR-NB) and reported in /status, so a missing encoder is visible before the first fallback-to-file, and every submitted voice message logs that the gateway's ret: 0 is not a delivery receipt — that log line is the only trace the platform gives. /cancel stops and starts a fresh session, and a /stop that cannot settle within 10 s closes the live session without deleting it, so the next message resumes the same session id — the same end result as tearing down the agent process. Shutdown now waits up to 60 s with a printed notice instead of cutting a turn after 10 s, the resolved workDir is printed at startup (warning when the config omits it), and daemon console lines carry ISO timestamps.

  • 041bc86 - The footer is now two fixed rows. Line 1 keeps identity: model name, provider balance and the working-tree git summary, with the context gauge right-aligned as 📨 Context:<bar> <percent> (slim ▰▱ bar, 10/6/0 cells at >=68/>=52/<52 columns, floored with at least one lit cell for non-zero usage; the whole gauge shares one semantic colour). Line 2 starts with the cache hit rate, then the plan/rlm/wolfpack mode badges, the goal badge and background-task badges, with the channel readout ◆ Line: <Lark|Wechat|未连接> <work status> right-aligned (only the dot is coloured; line 2 shrinks its left side first). The status row above the editor now uses one chip grammar: ⚠️ 重连中 n/max:reason · delay, 🤝 name 求助:issue / ✓ Scream 已处理 name 的请求, and the idle hint in the theme's dim colour instead of a hardcoded grey.

    Subagent-to-parent collaboration requests no longer cut into the transcript. A delivered request surfaces as a one-line ticker above the editor — coder is asking Scream for help: <preview> — replaced by the newest event and echoed as Scream handled the request from coder once the main agent answers it. The request body stays in the parent's context and in the agent card's tool-call arguments. This removes the unreachable activity-pane component, the unused loader colour setter and the duplicate status-bar spinner branch, and stops the pulse-wave timer chain on shutdown.

Patch Changes

  • e53d2f9 - Collapsed activity blocks now default to eight rows instead of three. At three rows a busy run only showed its header plus one step, which read as a frozen agent; the default now surfaces the newest steps of the timeline. /blockrows lets each user pick 5, 8 or 10, and a stored choice overrides the default; a previously stored 3 falls back to the new default.

  • ca795a1 - Give /config an entry menu: a bare /config (or /login) now asks which configuration flow to enter — the shortcut provider directory, the custom DIY setup, or image generation — instead of jumping straight into the catalog. /config diy and /config image keep their direct paths, and the first-run nudge opens the same menu.

  • 49a3542 - Make the agent behave consistently on macOS, Linux and Windows. The bundled ripgrep binary is now picked by probing the host libc instead of inferring it from the CPU architecture, Windows falls back to PowerShell when Git Bash is absent, and command execution resolves .cmd/.bat shims through PATHEXT rather than relying on a shell. Timed-out hooks and update steps terminate the whole process tree on Windows. Path safety checks understand Windows drive letters and UNC paths, the external editor no longer assumes a POSIX shell, and installing the package no longer hard-fails on platforms without a prebuilt local-embedding binary. State files are located through the shared home resolver and written atomically.

  • 5290a2a - Fix the embedding-model setup card reappearing on every startup on installs without a pre-existing model cache. The pinned model archive is now staged by the app itself from a first-party GitHub release with HTTP status validation and an on-disk sha256 check, instead of relying on the third-party model mirror that stopped serving anonymous downloads — its downloader never checks the response status, so a 403 error page used to be silently written into the staged archive and every subsequent extract failed. Lint ratchet baseline lowered to the new low.

  • 965f7df - Send the product user agent with requests to third-party model endpoints. The identity used to be attached only to providers configured with a session header, so most OpenAI-compatible and Anthropic endpoints saw the SDK's own library user agent instead of the product's. Device fingerprint headers remain host-scoped and are not forwarded to third-party endpoints.

  • 74904e9 - The status-bar pulse wave now reports network silence only. While the agent is waiting on the model but receiving nothing — a request awaiting its first token, a reasoning or text stream that stopped delivering, or a tool call whose arguments are still being authored — the wave ramps from the brand colour to yellow at 15s and to a deep red at 25s, then stays deep red. Any qualifying inbound event returns it to the brand colour immediately.

    Tool execution is exempt: a local command that prints nothing (sleep, a quiet install, a long test run) is still working, and its own timeout owns the outcome, so the wave keeps its brand colour for as long as the tool runs. The footer now distinguishes the two halves of a tool call — 调用中 / Calling while the model streams the arguments, 执行中 / Running while the tool executes.

    A retry floors the wave at yellow, so a known failure never renders next to a "reconnecting" label while the wave still claims everything is healthy. Child-agent traffic and non-stream custom tool notifications (such as an MCP OAuth prompt) no longer reset the parent's silence clock, so activity that does not belong to the main model stream cannot hide a stalled call. Switching sessions clears the work phase and the liveness clock, so a new session cannot inherit a stalled indicator.

    The wave uses dedicated palette tokens (waveMid yellow / wavePeak deep red) instead of the general warning/error colours, with a light-theme pair tuned for a white background. It remains an early warning only: retries still come from real transport failures (the stall timeout, disconnects, rate limits).

  • #18 2fda5b7 - Recover explicit status codes from OpenAI-compatible streaming errors and classify status-less provider messages so transient failures enter the existing retry policy instead of immediately failing agent tasks.

  • 165a7ca - Generated plan files no longer create a visible plan/ folder in the project root when an agent has no session home: they now go to .scream/plans, which is already gitignored. The coverage report also moved out of the repository root to node_modules/.cache/coverage, so running the test suite no longer leaves a 27 MB coverage/ directory behind.

  • 7f6bf0d - /knowledge can now ingest PDF, Word (.docx) and Excel (.xlsx) files alongside Markdown and plain text. Binary documents are converted to Markdown by the document engine that already ships with the runtime, then follow the exact same chunking and embedding path as a .md file, so the shared vector index and /memory are unaffected.

    Details:

    • The converter engine moved into the knowledge package (no new dependencies, no new package). It is imported lazily, so startup and /memory searches never pay for it.
    • Images are dropped and their placeholders stripped; a document with no text layer (scanned PDF) fails with a clear message instead of storing an empty record.
    • Documents are fingerprinted by their raw bytes, so an identical file is skipped and a changed one is re-ingested.
    • Directory ingestion skips hidden entries, Office lock files (~$…) and unsupported formats.
    • Ingest prompts now recommend Markdown first and warn that scans, image-heavy files and wide tables extract poorly.
  • 151b05d - Replies now colour their two plainest marks, with one palette across both modes: **bold** picks up a new mdBold token and keeps SGR bold — violet, bright on dark (#C9A0FF, 7.9:1) and deep on light (#6C2B8C, 8.9:1) — and block quotes move to mdQuote for both the text and the │ border — pink, bright on dark (#FF6B9D, 6.2:1) and deep on light (#C2185B, 5.9:1). Only brightness is tuned per mode, so emphasis always reads as the heavier mark and the hues never change meaning. Headings keep their amber: the renderer builds them as heading(bold(text)), so the heading now drops inherited styling before recolouring — without that, the coloured bold repainted every heading and replies looked randomly tinted. Table headers stay weight-only, the cli-highlight quote token inside fences stays neutral, and plain prose still carries no colour at all: it follows the terminal's own foreground.

  • 0baa2ce - Make /mcp uninstall honest for plugin-provided servers: the management panel now tags servers contributed by a plugin, refuses to "uninstall" them with a pointer to /plugin (that removal used to be undone on the next startup by the plugin hot-apply pass), and reports a real error instead of a fake success when a removed server is still listed.

  • 164e04b - Memory stays a single entity: memos. /dream merges near-duplicate memos and asks the model to write a distilled conclusion for each merge group, stored on the replacement memo as its latest distillation (最新归纳); merged memos also keep their sources' notes and a traceable lineage (distilledFrom, distilledAt, origin). Distilled rules are never age-pruned as resolved/stale, and a group that holds a rule is skipped when the plan carries no new conclusion. Both distilled and note are persisted, editable via MemoryEdit or in place from /memory, shown in /memory and memo injection, and returned by MemoryLookup; both also count towards keyword relevance, and search falls back to a LIKE match when a term appears only in either field.

    Each memo now also records where it came from: origin (session = extracted experience, dream = /dream rule, user = conclusion rewritten by the user), distilledAt (when the conclusion was generated or last rewritten) and distilledFrom (a snapshot of the memos folded into it — {id, title, at}, title clipped to 80 chars, max 100 items, carried across consolidation generations so a rule distilled from other rules keeps its ancestry). Existing rows are migrated in place: origin is backfilled to dream for every memo that already carries a distilled conclusion.

    The /memory picker shows rule provenance on the card (归纳 / 人工归纳, the distilled time and the source count) and in the detail view (归纳于 + up to five source entries, then +N), and lets the user rewrite the conclusion in place with e → Enter; a rewrite sets origin='user' and a fresh distilledAt, while clearing the text drops back to an extracted memo. Because merging permanently deletes the original memos, the /dream preview must show any existing conclusion it overrides, and deleting a rule in /memory now warns that its originals are gone for good.

  • 49a3542 - Stop reading injected reminders as a fresh user message when deciding whether to repeat the plan-mode reminder: only a real user prompt resets the cadence to the full reminder, so the periodic refresh threshold holds instead of re-emitting the long reminder on every step.

  • 71379e3 - Harden the runtime and close two discoverability gaps:

    • Dependency install scripts are denied by default (onlyBuiltDependencies: []), so a future dependency cannot silently run code at install time — the failure mode that once let a GPU download in an optional dependency break the vector feature.
    • Concurrent writes to the same file are serialized (per-path queue): parallel edits from one tool batch or from sibling sub-agents can no longer lose an update, while different files still write in parallel.
    • An abnormal exit is reported once on the next launch, pointing at /sessions to recover; clean exits and terminal hangups stay silent.
    • New /hotkeys (keyboard shortcut reference) and /copy (copy the last reply to the clipboard) commands.
  • dbbf1d6 - Support an optional per-provider session header that carries the stable conversation id, stamp known catalog entries when connecting, and surface an actionable config hint when a gateway reports a missing session header.

  • 4d9c653 - Add a weighted offer tip to the empty-session tips carousel above the editor: the placement tip carries a clickable domain link (OSC 8) and is opened with Ctrl+F, rotations favor it at an 80% probability, and Ctrl+B still hides all tips.

  • 49a3542 - Stop appending a todo reconciliation round after the final answer: the reminder is now injected before the answer is written, inside the work the turn is already doing. The TodoList suggestion now waits for the third step so short two-step tasks are no longer nudged, and the periodic todo reminder fires half as often and only while the list still has unfinished items. Goal turns no longer continue after the answer just because TodoList was not updated this turn, and a turn counts as having touched the list only when the TodoList call actually succeeded.

  • e4b54e1 - Buffer prompts that arrive while a turn is active so queued user input joins the steer path instead of failing as busy, and flush leftover steers at the start of the next turn.

  • 641f335 - Move the local embedding engine off native binaries onto a self-contained WebAssembly pipeline. Installing no longer pulls a compiler toolchain or an unused GPU runtime on Linux (and can no longer lose the whole vector feature when that download fails), the dependency tree drops its deprecated packages, and the model download now reports byte progress with stall and overall timeout guards plus verify/load phases. A cache is only considered installed when the weights and both tokenizer files are present, so a half-restored cache repairs itself instead of failing at load time. Vectors are bit-compatible with the previous engine.

  • 151b05d - The status-bar pulse wave no longer reads a quiet tool call as a dead connection. It used to ramp from green to deep red after 25s of silence whenever the phase was not 执行中 — which caught the whole 调用中 window, so a long command being authored looked like a failure while it was fine. The wave now asks whether a tool call is actually in flight (StreamingUIController.hasInFlightToolCalls(), which counts argument previews as well as started calls) and keeps the brand colour for that call's entire lifetime, wherever the phase happens to be. A late argument preview can also no longer overwrite a call that already started, so a running command cannot regress to 调用中 and re-arm the ramp mid-execution. The silence ramp still covers the pure model phases (等待响应 / 思考中 / 输出中).

@scream-code/config@0.20.0

Minor Changes

  • 151b05d - A fired scheduled task now also surfaces on the status row above the editor, not only as a transcript block. The chip follows the shared grammar: ⏰ 定时任务已触发:<preview> — with (合并 N 次) when several fires collapsed into one delivery, ⏰ 一次性提醒已触发:… for a one-shot task, and ⚠️ 定时任务已过期,仍触发:… in the warning colour for a task past its 7-day cutoff. The prompt preview is sanitized and capped at 40 characters because it is model-authored text written into a terminal row. The reminder owns its own slot (10s TTL) drawn to the left of the collaboration ticker (8s), so a help request can neither evict a fired reminder nor outlive it, and a narrow terminal truncates the ticker first. Both chips are dropped together when the session switches.

  • 041bc86 - The footer is now two fixed rows. Line 1 keeps identity: model name, provider balance and the working-tree git summary, with the context gauge right-aligned as 📨 Context:<bar> <percent> (slim ▰▱ bar, 10/6/0 cells at >=68/>=52/<52 columns, floored with at least one lit cell for non-zero usage; the whole gauge shares one semantic colour). Line 2 starts with the cache hit rate, then the plan/rlm/wolfpack mode badges, the goal badge and background-task badges, with the channel readout ◆ Line: <Lark|Wechat|未连接> <work status> right-aligned (only the dot is coloured; line 2 shrinks its left side first). The status row above the editor now uses one chip grammar: ⚠️ 重连中 n/max:reason · delay, 🤝 name 求助:issue / ✓ Scream 已处理 name 的请求, and the idle hint in the theme's dim colour instead of a hardcoded grey.

    Subagent-to-parent collaboration requests no longer cut into the transcript. A delivered request surfaces as a one-line ticker above the editor — coder is asking Scream for help: <preview> — replaced by the newest event and echoed as Scream handled the request from coder once the main agent answers it. The request body stays in the parent's context and in the agent card's tool-call arguments. This removes the unreachable activity-pane component, the unused loader colour setter and the duplicate status-bar spinner branch, and stops the pulse-wave timer chain on shutdown.

@scream-code/agent-core@0.20.0

Patch Changes

  • 164e04b - Memory stays a single entity: memos. /dream merges near-duplicate memos and asks the model to write a distilled conclusion for each merge group, stored on the replacement memo as its latest distillation (最新归纳); merged memos also keep their sources' notes and a traceable lineage (distilledFrom, distilledAt, origin). Distilled rules are never age-pruned as resolved/stale, and a group that holds a rule is skipped when the plan carries no new conclusion. Both distilled and note are persisted, editable via MemoryEdit or in place from /memory, shown in /memory and memo injection, and returned by MemoryLookup; both also count towards keyword relevance, and search falls back to a LIKE match when a term appears only in either field.

    Each memo now also records where it came from: origin (session = extracted experience, dream = /dream rule, user = conclusion rewritten by the user), distilledAt (when the conclusion was generated or last rewritten) and distilledFrom (a snapshot of the memos folded into it — {id, title, at}, title clipped to 80 chars, max 100 items, carried across consolidation generations so a rule distilled from other rules keeps its ancestry). Existing rows are migrated in place: origin is backfilled to dream for every memo that already carries a distilled conclusion.

    The /memory picker shows rule provenance on the card (归纳 / 人工归纳, the distilled time and the source count) and in the detail view (归纳于 + up to five source entries, then +N), and lets the user rewrite the conclusion in place with e → Enter; a rewrite sets origin='user' and a fresh distilledAt, while clearing the text drops back to an extracted memo. Because merging permanently deletes the original memos, the /dream preview must show any existing conclusion it overrides, and deleting a rule in /memory now warns that its originals are gone for good.

  • 6867cde - Fix three runtime robustness gaps: the per-step tool-call block index no longer leaks one Map entry per step; approval timeouts clear their rejection timer when the response arrives first; and a provider-wrapped context-overflow error now fails fast instead of burning the full retry budget (compaction handles it). Session deletion no longer reports success when the directory could not be removed (new session.delete_failed error code), and session index/state writes all go through the shared atomic write. Tool name sets are centralized in one catalog module.

  • Updated dependencies [164e04b]:

    • @scream-code/memory@0.20.0
    • @scream-code/knowledge@0.20.0
    • @scream-code/jian@0.20.0
    • @scream-code/ltod@0.20.0

@scream-code/knowledge@0.20.0

Patch Changes

  • Updated dependencies [164e04b]:
    • @scream-code/memory@0.20.0

@scream-code/memory@0.20.0

Patch Changes

  • 164e04b - Memory stays a single entity: memos. /dream merges near-duplicate memos and asks the model to write a distilled conclusion for each merge group, stored on the replacement memo as its latest distillation (最新归纳); merged memos also keep their sources' notes and a traceable lineage (distilledFrom, distilledAt, origin). Distilled rules are never age-pruned as resolved/stale, and a group that holds a rule is skipped when the plan carries no new conclusion. Both distilled and note are persisted, editable via MemoryEdit or in place from /memory, shown in /memory and memo injection, and returned by MemoryLookup; both also count towards keyword relevance, and search falls back to a LIKE match when a term appears only in either field.

    Each memo now also records where it came from: origin (session = extracted experience, dream = /dream rule, user = conclusion rewritten by the user), distilledAt (when the conclusion was generated or last rewritten) and distilledFrom (a snapshot of the memos folded into it — {id, title, at}, title clipped to 80 chars, max 100 items, carried across consolidation generations so a rule distilled from other rules keeps its ancestry). Existing rows are migrated in place: origin is backfilled to dream for every memo that already carries a distilled conclusion.

    The /memory picker shows rule provenance on the card (归纳 / 人工归纳, the distilled time and the source count) and in the detail view (归纳于 + up to five source entries, then +N), and lets the user rewrite the conclusion in place with e → Enter; a rewrite sets origin='user' and a fresh distilledAt, while clearing the text drops back to an extracted memo. Because merging permanently deletes the original memos, the /dream preview must show any existing conclusion it overrides, and deleting a rule in /memory now warns that its originals are gone for good.

@scream-code/evals@0.20.0

@scream-code/jian@0.20.0

@scream-code/ltod@0.20.0

@scream-code/scream-code-sdk@0.20.0

@github-actions
github-actions Bot force-pushed the changeset-release/main branch 11 times, most recently from 824e259 to 46f18c5 Compare October 3, 2026 05:37
@github-actions
github-actions Bot force-pushed the changeset-release/main branch 16 times, most recently from 8e6d493 to d1602ed Compare October 11, 2026 03:45
@github-actions
github-actions Bot force-pushed the changeset-release/main branch 3 times, most recently from a68fff2 to 814312e Compare October 15, 2026 03:30
@github-actions
github-actions Bot force-pushed the changeset-release/main branch 10 times, most recently from d33471e to 224577e Compare October 22, 2026 03:24
@github-actions
github-actions Bot force-pushed the changeset-release/main branch 10 times, most recently from ac6ed09 to 642e62b Compare October 30, 2026 10:04
@github-actions
github-actions Bot force-pushed the changeset-release/main branch from 642e62b to 796ee07 Compare October 31, 2026 03:48
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants