@oneciel-ai/ciel-runtime 0.2.41 → 0.2.42

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -5,6 +5,12 @@ capability, followed by the complete commit ledger merged into each release.
5
5
 
6
6
  ## Unreleased
7
7
 
8
+ ## 0.2.42 — 2026-09-08
9
+
10
+ - Preserve fragmented OSC palette responses and other VT control strings as
11
+ complete frames in the Windows input bridge. Prevent RGB palette replies
12
+ from appearing in the Codex draft; retain literal text and bounded buffering.
13
+
8
14
  ## 0.2.41 — 2026-09-07
9
15
 
10
16
  - Automatically authenticate Codex model and Ciel MCP requests to LAN-bound
@@ -97,7 +97,7 @@ OPENCODE_ENDPOINT_ALIASES = {
97
97
  }
98
98
 
99
99
  APP_NAME = "Ciel Runtime"
100
- VERSION = "0.2.41"
100
+ VERSION = "0.2.42"
101
101
  CREDITS = "Credits: One Ciel LLC"
102
102
  PRELAUNCH_CANCEL = 10
103
103
  PRELAUNCH_LAUNCH_CODEX = 11
@@ -6,7 +6,7 @@ from collections.abc import Callable
6
6
 
7
7
 
8
8
  class TerminalInputFrames:
9
- """Do not expose a partial CSI to a child's keyboard-event parser.
9
+ """Do not expose a partial VT sequence to a child's keyboard parser.
10
10
 
11
11
  A bounded idle timer preserves a standalone Escape key. Nothing is
12
12
  stripped or rewritten, including literal text resembling paste markers.
@@ -32,13 +32,24 @@ class TerminalInputFrames:
32
32
  ready.append(byte)
33
33
  continue
34
34
  self.pending.append(byte)
35
- # CSI/SS3 sequences end with a final byte; other ESC keys
36
- # (including Alt+key) are complete after the next byte.
37
- complete = (
38
- len(self.pending) == 2 and byte not in (ord('['), ord('O'))
39
- ) or (
40
- len(self.pending) >= 3 and 0x40 <= byte <= 0x7e
41
- ) or len(self.pending) >= 64
35
+ introducer = self.pending[1]
36
+ # OSC (including palette replies) and other control strings
37
+ # end at ST, not at their first printable byte. OSC also
38
+ # accepts BEL. An ESC ending one read may start ST in the next.
39
+ if introducer in b']PX^_':
40
+ complete = (
41
+ self.pending.endswith(b'\x1b\\')
42
+ or (introducer == ord(']') and byte == 0x07)
43
+ or byte in (0x18, 0x1a) # CAN/SUB cancel the sequence.
44
+ or len(self.pending) >= 4096
45
+ )
46
+ else:
47
+ # CSI/SS3 final byte, or a two-byte ESC/Alt key.
48
+ complete = (
49
+ len(self.pending) == 2 and introducer not in b'[O'
50
+ ) or (
51
+ len(self.pending) >= 3 and 0x40 <= byte <= 0x7e
52
+ ) or len(self.pending) >= 64
42
53
  if complete:
43
54
  ready.extend(self.pending)
44
55
  self.pending.clear()
@@ -0,0 +1,18 @@
1
+ title: Windows OSC palette response framing regression
2
+ date: 2026-09-08
3
+ version: 0.2.42
4
+ request: Continue handling user-reported OSC 4 palette strings exposed in console input.
5
+ cause:
6
+ source: TerminalInputFrames treated ESC ] as a complete two-byte key, forwarding the subsequent OSC body separately.
7
+ actual_cli_before: Codex rendered 4;0;rgb:0c0c/0c0c/0c0c followed by the test paste.
8
+ change:
9
+ protocol: Keep OSC, DCS, SOS, PM and APC strings until ST; OSC also accepts BEL; CAN/SUB cancel.
10
+ safety: Never remove literal text; 4096-byte bound and existing 100ms idle flush retained.
11
+ verification:
12
+ actual_cli_after: Both palette and paste tests passed; palette text absent and 1660377 still visible. No model prompt submitted.
13
+ frames: Six tests passed including every control-string split, BEL/ST, plain literal RGB text, bounded malformed strings, standalone Esc and paste.
14
+ static: Ruff passed.
15
+ reference: https://invisible-island.net/xterm/ctlseqs/ctlseqs.html
16
+ limitations: Remote user's terminal not directly manipulated; local real Codex reproduction uses simulated split parent-console reads.
17
+ deployment: Continue main stable release workflow; validate npm artifact after publishing.
18
+ excluded: No Kevin AI Net authentication changes or session restart.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oneciel-ai/ciel-runtime",
3
- "version": "0.2.41",
3
+ "version": "0.2.42",
4
4
  "description": "Universal AI coding-agent runtime and model-routing layer for Claude, Codex, AGY, ZCode, and compatible runtimes.",
5
5
  "license": "MIT",
6
6
  "author": "One Ciel LLC",