Skip to content

chore: update dependency ink to v8 - #4371

Merged
takecchi merged 3 commits into
mainfrom
renovate/ink-8.x
Oct 10, 2026
Merged

takecchi merged 3 commits into
mainfrom
renovate/ink-8.x

Conversation

@renovate

@renovate renovate Bot commented Oct 9, 2026

Copy link
Copy Markdown
Contributor

This PR contains the following updates:

Package Change Age Confidence
ink ^7.1.1 → ^8.0.0 age confidence

Release Notes

vadimdemedes/ink (ink)

v8.0.0

Compare Source

Breaking
  • Require React 19.3+ 7829102
  • minWidth and maxWidth on <Box> now only accept numbers (#​1029) 7cd7fd9
    • Percentage strings were never documented as supported, and Yoga resolved them against the wrong ancestor
  • stdin, stdout, and stderr are now typed as generic Node.js streams (#​981) eb82d8f
    • This applies to the render() options and to useStdin(), useStdout(), and useStderr(). TTY-only properties like stdout.columns are no longer part of the types
  • useInput no longer receives unrecognized terminal control sequences (#​1014) c76893e
    • Mouse reports, focus in/out events, cursor position reports, and other terminal replies used to arrive in input with the ESC stripped, as if typed. They are now dropped
New
Fixes
Rendering
  • Preserve scrollback when clearing the viewport (#​994) fe1d123
  • Preserve terminal history after clear() 494ebeb
  • Restore the unchanged frame when rerendering after clear() fc358c2
  • Redraw the frame when the terminal loses rows (#​1025) f603aeb
  • Keep content above the frame when rows shrink while the cursor is shown (#​1031) c800284
  • Keep the cursor on the last line when output has no trailing newline (#​982) cdc18fa
  • Restore the terminal cursor below the frame on exit 06385e9
  • Preserve the cursor position when its component skips rendering 013feb2
  • Fix incremental rendering of single-line updates, new blank rows, and changed rows (#​1039) 9a501e4 507c0c9 509ea75
  • Fix overflow clipping when both the shorthand and an explicit axis are set, and preserve <Transform> line indices when clipping 4f3c7aa
  • Fix background color inheritance for <Static> and nested <Text> 753a5f8
  • Fix fractional percentages being truncated in layout sizes, and restore layout defaults when style props are undefined 274b15a
  • Preserve visibility across Suspense transitions fc685bc
  • Call onRender after the frame is written 83d7de5
<Static>
  • Stop replaying <Static> output on full-clear frames (#​1005) d661543
  • Replay <Static> output when resuming re-enters the alternate screen (#​1012) 9235028
  • Fix repeated padding, ignored margins, and output inside hidden ancestors 793fe59
  • Keep <Static> output after abandoned concurrent renders 8678b76
  • Reset captured <Static> output when its identity changes cfdd9e6
  • Preserve blank <Static> rows f6b2620 c0fa4ef 5911f44
  • Fix dangling staticNode reference on indirect subtree removal (#​979) 5448e6b
Text
  • Truncate each line of multi-line text separately (#​1006) 4b44934
  • Keep text at its natural width when there is no room to wrap (#​1022) 36f5624
  • Fix multi-line <Text> vanishing when it starts above the top of the output (#​1001) 77aba4a
  • Strip control characters (except tab and newline) from text content (#​1020) 405f751 2fbc26a
  • Expand tabs, and fix CRLF text overwriting box borders and zero-width spaces overwriting surrounding output 32dc266
  • Preserve ANSI styles across explicit newlines b419e5c
  • Preserve combining marks across nested text styles 80b1c9c
  • Normalize colon and C1 SGR sequences before layout (#​1019) b0dfd61 9dfe137 7fe1577
  • Preserve styles and columns on clipped or overwritten wide characters f7e57a5 064df65
  • Remeasure text when its wrapping mode or <Transform> wrap points change fc685bc 9c323f6
  • Preserve the available width when measuring truncated text 1e57b23
  • Fix crashes from invalid color names, and whitespace handling in RGB colors 3be9ed7
Input
  • Fix legacy keyboard modifiers, modified SS3 keys, and Kitty keyboard parsing and detection 2ee828c
    • reportAssociatedText now enables reportAllKeysAsEscapeCodes automatically
  • Handle Ctrl+C that arrives together with ordinary input 13707d2
  • Do not mutate the caller's buffer when parsing Meta keys 36d7739
  • Keep onKittyQueryResponse stable across rerender() calls (#​1007) 70beca5
  • Defer input hook side effects while the terminal is suspended (#​1016) 61004d7
  • Make suspendTerminal() handles idempotent, and do not restore input modes that were released or belong to an unmounted app a7297c4 b35e89a c613707
  • Preserve output during non-interactive terminal suspension a6789fb
Focus
  • Treat components that share a focus ID as one Tab stop (#​1026) 02ae1e5
  • Make disableFocus() blur the focused component as documented, and respect it when new components auto-focus d130588
  • Prevent collisions in automatically generated focus IDs d130588
  • Treat an empty string as a valid focus ID f6f7dc7
Other
  • Fix screen-reader output: semantic text and labels, empty <Transform> labels, rewrapping when the terminal widens, and restoring output after console writes (#​1028) f480301 bebfe2d
  • Fix error source excerpts for file URLs and multiline messages, and treat non-Error throws as rendering failures 81e2451
  • Fix renderToString() swallowing thrown undefined, and run effect cleanup when output rendering fails 9f7c1d0
  • Fix useWindowSize() missing resizes before it subscribes fab670b
  • Track box metrics when a child attaches the ref after mount 53244dc
  • Reset useAnimation() values while paused f25d312
  • Use defaults for render() options that are undefined 659249d
  • Fix unbounded text caches (#​986) ad9e3ea
  • Fix wrapText cache returning results for the wrong text or width (#​998) 3809acc
  • Free the root Yoga node on unmount (#​999) 064b4f6
  • Avoid retaining an exit listener when calling waitUntilExit() after unmount 1fcd380

Migration guide

React 19.3

Upgrade react (and @types/react) to 19.3 or later.

minWidth and maxWidth

Use a number. If you need a relative minimum or maximum width, compute it from useWindowSize() or useBoxMetrics() of the parent.

-<Box minWidth="50%">
+<Box minWidth={Math.floor(columns / 2)}>
Stream types

useStdout().stdout is now typed as NodeJS.WritableStream, so TTY properties like columns and rows are no longer available in the types. Use useWindowSize() instead, which also re-renders on resize.

-const {stdout} = useStdout();
-const width = stdout.columns;
+const {columns: width} = useWindowSize();
Control sequences in useInput

If your useInput handler parsed mouse reports, focus events, or other terminal replies from input, it will no longer receive them. Keys that Ink recognizes, including Kitty keyboard protocol events, are not affected.



Configuration

📅 Schedule: (in timezone Asia/Tokyo)

  • Branch creation
    • "before 6am on saturday"
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about this update again.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

renovate Bot and others added 2 commits October 9, 2026 16:27
Ink 8 は終了時に stdout への空の write の callback を待ってから waitUntilExit を解く。試験の偽の stdout が callback を呼ばず、Ctrl+D・/exit で終わる試験が時間切れになっていた(本物の stdout は呼ぶ)。

Ink 8 はどのキーにも当たらない制御列を useInput へ渡さず捨てるため、modifyOtherKeys の Shift+Enter(ESC[27;2;13~)が届かなくなっていた。Ink へ渡す stdin の read() で同じ意味の CSI u(ESC[13;2u)へ書き換え、Ink 8 に解釈させる。
@renovate

renovate Bot commented Oct 10, 2026

Copy link
Copy Markdown
Contributor Author

Edited/Blocked Notification

Renovate will not automatically rebase this PR, because it does not recognize the last commit author and assumes somebody else may have edited the PR.

You can manually request rebase by checking the rebase/retry box above.

⚠️ Warning: custom changes will be lost.

pnpm-lock.yaml の衝突は pnpm install で作り直した。
@takecchi
takecchi merged commit a64e14f into main Oct 10, 2026
6 checks passed
@takecchi
takecchi deleted the renovate/ink-8.x branch October 10, 2026 01:49
takecchi added a commit that referenced this pull request Oct 10, 2026
この PR は takecchi 本人ではなく、クローン teto の委譲で動くマネージャー層(mgr-52dc46a6)が書いた。

## なぜ

SDK 更新の PR(`automation/claude-agent-sdk`)は、日次の定時(`0 22 * *
*`)にだけ積み直される。日中に main の `pnpm-lock.yaml` が動くと、開いている SDK の PR は main
と衝突する。衝突した PR には `pull_request` のワークフローが起きないので、次の定時までチェックが1本も付かずに止まる。

- 実例: #4396(0.3.296)は 2026-10-10 の日中に衝突し、`no checks reported`
のまま止まっていた。手で `workflow_dispatch` して積み直すと、MERGEABLE になって必須チェックが走った
- 直近7日の main で、SDK の PR 以外が `pnpm-lock.yaml`
を動かしたのは4回(#4371・#4369・#4309・#3855)
- SDK の版はモデルの対応表でもあるので、止まると新しいモデルが層に届かない(AGENTS.md・dev-setup)

## 何を変えたか

`update-claude-sdk.yml` の `on:` に、main への push で `pnpm-lock.yaml` /
`pnpm-workspace.yaml` が動いたときを足した。

- 開いている SDK の PR があれば(main の版がまだ古ければ)、`changed=true` になり、いつもどおり検証して積み直す
- 開いている PR が無く、版も上がっていなければ、`changed=false` で検証も PR も飛ばして終わる。SDK の PR
をマージした直後の push もこちらに当たる
- 重なった走行は、既存の `concurrency: update-claude-sdk`(前を殺さない)で順番に回る

## 費用

積み直すたびに、検証(`verify-for-sdk-pr.sh`)が1回走る(実測では1回 15〜25
分)。上の頻度なら、週に数回ぶん増える。PR が無い日は、install と版の確認だけで終わる。

## 確かめたこと

- prettier(YAML)
- 動作は、マージ後に main の lockfile が動いた最初の回で確かめる。workflow の push トリガーは、PR
の枝では発火しない
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.

1 participant