jeo-code 0.6.7 → 0.6.9

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
@@ -6,6 +6,19 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
6
6
 
7
7
  The README mirrors the latest 5 entries — regenerate with `bun run changelog:sync`.
8
8
 
9
+ ## [0.6.9] - 2026-06-16
10
+ _Live streaming blocks size to their content and the viewport instead of a fixed rectangle._
11
+
12
+ ### Changed
13
+ - **`Thinking` / tool `Output` live blocks size to their content.** The dimmed streaming trace and tool-output tail are now rendered by a single `renderLiveBlock` helper that shows only the most-recent lines, capped at ~30% of the terminal height — instead of a fixed blank-padded rectangle. A short stream no longer leaves dead "hole" rows, and a short terminal keeps the rows the heartbeat needs.
14
+ - Dropped the rounded-icon header image from the READMEs (the hero image and title stay).
15
+
16
+ ## [0.6.8] - 2026-06-16
17
+ _OAuth loopback callback host pinned to `localhost` to match provider-registered redirect URIs._
18
+
19
+ ### Fixed
20
+ - **OAuth loopback callback uses `localhost`** (not the `127.0.0.1` IP literal). Providers register their dynamic-loopback redirect URIs against `localhost`, so the callback host must match it exactly — an IP literal can mismatch the registered URI and break the Anthropic / Google / Antigravity login flows. The default is now documented in-code so it doesn't drift again.
21
+
9
22
  ## [0.6.7] - 2026-06-16
10
23
  _Mouse-report input corruption fixed under `jeo --tmux`, and a full-width TUI at one consistent width._
11
24
 
package/README.ja.md CHANGED
@@ -1,7 +1,3 @@
1
- <p align="center">
2
- <img src="assets/icon-rounded-256.png" alt="jeo-code icon" width="128" />
3
- </p>
4
-
5
1
  <p align="center">
6
2
  <img src="assets/hero.png" alt="jeo-code 自律コーディングエージェントのヒーローイラスト" width="100%" />
7
3
  </p>
@@ -162,11 +158,11 @@ CI は `.github/workflows/npm-publish.yml` で公開します — GitHub リリ
162
158
  ## 変更履歴 (Changelog)
163
159
 
164
160
  <!-- CHANGELOG:START (auto-generated from CHANGELOG.md — run `bun run changelog:sync`) -->
161
+ - **[0.6.9]** (2026-06-16) — Live streaming blocks size to their content and the viewport instead of a fixed rectangle.
162
+ - **[0.6.8]** (2026-06-16) — OAuth loopback callback host pinned to `localhost` to match provider-registered redirect URIs.
165
163
  - **[0.6.7]** (2026-06-16) — Mouse-report input corruption fixed under `jeo --tmux`, and a full-width TUI at one consistent width.
166
164
  - **[0.6.6]** (2026-06-16) — Vertical caret movement between input-box rows, a centered welcome banner, and a leaner `parseFlags`.
167
165
  - **[0.6.5]** (2026-06-16) — macOS combo-key editing in the boxed prompt, a fresh-start screen clear at launch, a proportional welcome banner, height-aware relayout — and `launch.ts` split into focused submodules.
168
- - **[0.6.4]** (2026-06-16) — Branding, a responsive-resize fix, `/provider` realignment, and engine repeat-spin recovery.
169
- - **[0.6.3]** (2026-06-16) — OAuth loopback reliability fix.
170
166
 
171
167
  See [CHANGELOG.md](CHANGELOG.md) for the full history.
172
168
  <!-- CHANGELOG:END -->
package/README.ko.md CHANGED
@@ -1,7 +1,3 @@
1
- <p align="center">
2
- <img src="assets/icon-rounded-256.png" alt="jeo-code icon" width="128" />
3
- </p>
4
-
5
1
  <p align="center">
6
2
  <img src="assets/hero.png" alt="jeo-code 자율 코딩 에이전트 히어로 일러스트" width="100%" />
7
3
  </p>
@@ -162,11 +158,11 @@ CI는 `.github/workflows/npm-publish.yml`로 배포합니다 — GitHub 릴리
162
158
  ## 변경 이력 (Changelog)
163
159
 
164
160
  <!-- CHANGELOG:START (auto-generated from CHANGELOG.md — run `bun run changelog:sync`) -->
161
+ - **[0.6.9]** (2026-06-16) — Live streaming blocks size to their content and the viewport instead of a fixed rectangle.
162
+ - **[0.6.8]** (2026-06-16) — OAuth loopback callback host pinned to `localhost` to match provider-registered redirect URIs.
165
163
  - **[0.6.7]** (2026-06-16) — Mouse-report input corruption fixed under `jeo --tmux`, and a full-width TUI at one consistent width.
166
164
  - **[0.6.6]** (2026-06-16) — Vertical caret movement between input-box rows, a centered welcome banner, and a leaner `parseFlags`.
167
165
  - **[0.6.5]** (2026-06-16) — macOS combo-key editing in the boxed prompt, a fresh-start screen clear at launch, a proportional welcome banner, height-aware relayout — and `launch.ts` split into focused submodules.
168
- - **[0.6.4]** (2026-06-16) — Branding, a responsive-resize fix, `/provider` realignment, and engine repeat-spin recovery.
169
- - **[0.6.3]** (2026-06-16) — OAuth loopback reliability fix.
170
166
 
171
167
  See [CHANGELOG.md](CHANGELOG.md) for the full history.
172
168
  <!-- CHANGELOG:END -->
package/README.md CHANGED
@@ -1,7 +1,3 @@
1
- <p align="center">
2
- <img src="assets/icon-rounded-256.png" alt="jeo-code icon" width="128" />
3
- </p>
4
-
5
1
  <p align="center">
6
2
  <img src="assets/hero.png" alt="jeo-code autonomous coding-agent hero illustration" width="100%" />
7
3
  </p>
@@ -162,11 +158,11 @@ Required npm token permissions (repository secret `NPM_TOKEN`):
162
158
  ## Changelog
163
159
 
164
160
  <!-- CHANGELOG:START (auto-generated from CHANGELOG.md — run `bun run changelog:sync`) -->
161
+ - **[0.6.9]** (2026-06-16) — Live streaming blocks size to their content and the viewport instead of a fixed rectangle.
162
+ - **[0.6.8]** (2026-06-16) — OAuth loopback callback host pinned to `localhost` to match provider-registered redirect URIs.
165
163
  - **[0.6.7]** (2026-06-16) — Mouse-report input corruption fixed under `jeo --tmux`, and a full-width TUI at one consistent width.
166
164
  - **[0.6.6]** (2026-06-16) — Vertical caret movement between input-box rows, a centered welcome banner, and a leaner `parseFlags`.
167
165
  - **[0.6.5]** (2026-06-16) — macOS combo-key editing in the boxed prompt, a fresh-start screen clear at launch, a proportional welcome banner, height-aware relayout — and `launch.ts` split into focused submodules.
168
- - **[0.6.4]** (2026-06-16) — Branding, a responsive-resize fix, `/provider` realignment, and engine repeat-spin recovery.
169
- - **[0.6.3]** (2026-06-16) — OAuth loopback reliability fix.
170
166
 
171
167
  See [CHANGELOG.md](CHANGELOG.md) for the full history.
172
168
  <!-- CHANGELOG:END -->
package/README.zh.md CHANGED
@@ -1,7 +1,3 @@
1
- <p align="center">
2
- <img src="assets/icon-rounded-256.png" alt="jeo-code icon" width="128" />
3
- </p>
4
-
5
1
  <p align="center">
6
2
  <img src="assets/hero.png" alt="jeo-code 自主编码代理主视觉插图" width="100%" />
7
3
  </p>
@@ -162,11 +158,11 @@ CI 通过 `.github/workflows/npm-publish.yml` 发布 — GitHub 发布 release
162
158
  ## 更新日志 (Changelog)
163
159
 
164
160
  <!-- CHANGELOG:START (auto-generated from CHANGELOG.md — run `bun run changelog:sync`) -->
161
+ - **[0.6.9]** (2026-06-16) — Live streaming blocks size to their content and the viewport instead of a fixed rectangle.
162
+ - **[0.6.8]** (2026-06-16) — OAuth loopback callback host pinned to `localhost` to match provider-registered redirect URIs.
165
163
  - **[0.6.7]** (2026-06-16) — Mouse-report input corruption fixed under `jeo --tmux`, and a full-width TUI at one consistent width.
166
164
  - **[0.6.6]** (2026-06-16) — Vertical caret movement between input-box rows, a centered welcome banner, and a leaner `parseFlags`.
167
165
  - **[0.6.5]** (2026-06-16) — macOS combo-key editing in the boxed prompt, a fresh-start screen clear at launch, a proportional welcome banner, height-aware relayout — and `launch.ts` split into focused submodules.
168
- - **[0.6.4]** (2026-06-16) — Branding, a responsive-resize fix, `/provider` realignment, and engine repeat-spin recovery.
169
- - **[0.6.3]** (2026-06-16) — OAuth loopback reliability fix.
170
166
 
171
167
  See [CHANGELOG.md](CHANGELOG.md) for the full history.
172
168
  <!-- CHANGELOG:END -->
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jeo-code",
3
- "version": "0.6.7",
3
+ "version": "0.6.9",
4
4
  "description": "Clean, highly optimized AI coding agent using spec-first loop",
5
5
  "type": "module",
6
6
  "main": "src/cli.ts",
@@ -11,7 +11,10 @@ import type { OAuthController, OAuthCredentials } from "./types";
11
11
  import { generateState } from "./pkce";
12
12
 
13
13
  const DEFAULT_TIMEOUT_MS = 300_000;
14
- const DEFAULT_HOSTNAME = "127.0.0.1";
14
+ // Loopback callback host. `localhost` (not the 127.0.0.1 IP literal) is the intentional
15
+ // default — providers register their redirect URIs against `localhost`, so the dynamic
16
+ // loopback flows (Anthropic / Google / Antigravity) must match. Keep this as `localhost`.
17
+ const DEFAULT_HOSTNAME = "localhost";
15
18
  const DEFAULT_CALLBACK_PATH = "/callback";
16
19
 
17
20
  export interface OAuthCallbackFlowOptions {
package/src/tui/app.ts CHANGED
@@ -1178,6 +1178,30 @@ export class LaunchTui {
1178
1178
  }
1179
1179
 
1180
1180
 
1181
+ /** Build a live, DIMMED streaming block (the `Thinking` reasoning trace or a tool's
1182
+ * `Output` tail). Sized to its ACTUAL content and the terminal height — no fixed
1183
+ * blank-row padding. The old fixed-height region (`ROWS` constant, blank-padded at
1184
+ * the top) reserved a constant rectangle: a short stream left dead rows that read as
1185
+ * a torn "hole", and on a short terminal it stole rows the heartbeat needed. Now the
1186
+ * block shows only the most-recent lines, capped at ~30% of the screen height (a
1187
+ * ceiling guards a tall terminal), so it grows with the stream and shrinks with the
1188
+ * viewport. Returns [] when there is nothing to show. */
1189
+ private renderLiveBlock(label: string, text: string, cols: number, rows: number, ceiling: number): string[] {
1190
+ const dim = this.theme.color ? chalk.dim : (s: string) => s;
1191
+ if (!text.trim()) return [];
1192
+ const wrapW = Math.max(8, cols - 2);
1193
+ const wrapped = tailForWrap(text)
1194
+ .split("\n")
1195
+ .flatMap(l => wrapTextWithAnsi(l, wrapW))
1196
+ .filter(l => l.length > 0);
1197
+ if (wrapped.length === 0) return [];
1198
+ const cap = Math.max(3, Math.min(ceiling, Math.floor(rows * 0.3)));
1199
+ const out: string[] = [sectionLabel(label, Math.max(8, cols), { color: this.theme.color, unicode: this.unicode })];
1200
+ for (const l of wrapped.slice(-cap)) out.push(dim(` ${l}`));
1201
+ out.push("");
1202
+ return out;
1203
+ }
1204
+
1181
1205
  /** Render the Ctrl+O panel inside the live frame. `maxRows` includes borders. */
1182
1206
  private renderHistoryPanel(width: number, maxRows: number): string[] {
1183
1207
  if (!this.historyLines || maxRows < 4) return [];
@@ -1294,42 +1318,18 @@ export class LaunchTui {
1294
1318
  // as a DIMMED, bounded block above the status line. It is transient — flushed
1295
1319
  // UN-dimmed into scrollback once the model commits to a tool/reply (onAssistant),
1296
1320
  // so the in-progress trace stays shaded while the final record reads in normal text.
1321
+ // Height is sized to the content and the viewport (renderLiveBlock), not a fixed
1322
+ // rectangle, so a short trace leaves no padded "hole" and a short terminal is spared.
1297
1323
  const liveThink = this.streamingThought.trim() || this.streamingReasoning.trim();
1298
1324
  if (isThinking && liveThink) {
1299
- const wrapW = Math.max(8, cols - 2);
1300
- const wrapped = tailForWrap(liveThink)
1301
- .split("\n")
1302
- .flatMap(l => wrapTextWithAnsi(l, wrapW))
1303
- .filter(l => l.length > 0);
1304
- // FIXED reserved height (bottom-anchored, blank-padded at top): once present the
1305
- // block's row count is CONSTANT, so streaming content never changes the frame
1306
- // height. The per-100ms height thrash that desynced the differential renderer
1307
- // (duplicate model bar) is gone; height now toggles only at lifecycle boundaries.
1308
- const ROWS = 6;
1309
- const shown = wrapped.slice(-ROWS);
1310
- tail.push(sectionLabel("Thinking", Math.max(8, cols), { color: this.theme.color, unicode: this.unicode }));
1311
- for (let k = 0; k < ROWS - shown.length; k++) tail.push("");
1312
- for (const l of shown) tail.push(dim(` ${l}`));
1313
- tail.push("");
1325
+ tail.push(...this.renderLiveBlock("Thinking", liveThink, cols, rows, 6));
1314
1326
  }
1315
1327
 
1316
1328
  // Live tool output (gjc-style streaming bash stdout): while a tool runs, its
1317
1329
  // output arrives via onToolProgress and is shown as a DIMMED, bounded tail block.
1318
1330
  // It is transient — cleared on result, when the formatted forge card takes over.
1319
1331
  if (this.runningTool && this.liveToolOutput.trim()) {
1320
- const wrapW = Math.max(8, cols - 2);
1321
- const wrapped = tailForWrap(this.liveToolOutput)
1322
- .split("\n")
1323
- .flatMap(l => wrapTextWithAnsi(l, wrapW))
1324
- .filter(l => l.length > 0);
1325
- // FIXED reserved height (see thinking block): constant rows while a tool streams,
1326
- // so cumulative stdout growth does not thrash the frame height.
1327
- const ROWS = 8;
1328
- const shown = wrapped.slice(-ROWS);
1329
- tail.push(sectionLabel("Output", Math.max(8, cols), { color: this.theme.color, unicode: this.unicode }));
1330
- for (let k = 0; k < ROWS - shown.length; k++) tail.push("");
1331
- for (const l of shown) tail.push(dim(` ${l}`));
1332
- tail.push("");
1332
+ tail.push(...this.renderLiveBlock("Output", this.liveToolOutput, cols, rows, 8));
1333
1333
  }
1334
1334
 
1335
1335
  // Live status field: unboxed thinking line + compact metrics row. The model's