jeo-code 0.11.3 → 0.11.4

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
@@ -9,6 +9,21 @@ The README mirrors the latest 5 entries — regenerate with `bun run changelog:s
9
9
 
10
10
  ## [Unreleased]
11
11
 
12
+ ## [0.11.4] - 2026-10-01
13
+ _The release pipeline could not actually release: 13 tests failed on Linux CI only, and the stored npm token no longer authenticated. Both are fixed at the root — the suite is order-independent, and publishing no longer depends on a secret that can expire._
14
+
15
+ ### Fixed
16
+ - **CI test gate was order-dependent** (`test/stdio-override.ts`, `test/launch-flags.test.ts`, `test/review-fixes.test.ts`, `test/terminal-restore.test.ts`, `test/tui-app.test.ts`, `test/tui-renderer.test.ts`) — three files redefined `process.stdout.isTTY`/`columns`/`rows` with a bare `Object.defineProperty` (non-writable) and restored only when an own descriptor had existed, so on a non-TTY stdout the property stayed read-only; the next file to assign it threw "Attempted to assign to readonly property", and `terminal-restore`'s stranded fake stdin then broke every later launch test (12 failures, Linux CI only, since Bun runs files in readdir order). Overrides now restore the exact prior descriptor or delete the property.
17
+ - **`npm-publish.yml`** — the browser tool tests run in their own `bun test` process (`JEO_SKIP_BROWSER_TESTS=1` for the main suite, `JEO_REQUIRE_BROWSER=1` for `test/browser-tool.test.ts`): in-process Chromium launch/teardown intermittently made the first later CLI spawn exit 0 with empty stdout on GitHub runners. `test/launch-oneshot-slash.test.ts` now asserts the child's exit code and includes its stderr in the failure. Actions bumped to `checkout@v7`/`setup-node@v7`/`upload-artifact@v7`, runner pinned to `ubuntu-24.04`.
18
+
19
+ ### Changed
20
+ - **npm publishing moved to trusted publishing (OIDC)** (`.github/workflows/npm-publish.yml`) — the workflow no longer reads an `NPM_TOKEN` secret (the stored one no longer authenticates: CI's `npm whoami` failed, so the token path could not publish anyway). It upgrades npm to ≥ 11.5.1, checks the OIDC prerequisites (`id-token: write`), and publishes with provenance. npm's registered trusted publisher for `jeo-code` is GitHub Actions / `akillness/jeo-code` / `npm-publish.yml` (`npm trust list jeo-code`). npm is restricting bypass-2FA tokens from Aug 2026 and ending direct publishing with them in Jan 2027, so the token path had a shelf life regardless.
21
+ - **`pack:check` reads npm 12's `pack --json` output** (`scripts/check-package.ts`) — npm ≥ 12 prints `{ "<name>": manifest }` where npm ≤ 11 printed `[manifest]`, so the gate reported every required file as missing once CI upgraded npm. Both shapes are accepted and pinned by a test.
22
+ - **A dry run on an already-released ref** reports "already published" instead of failing on npm's cannot-publish-over check.
23
+
24
+ ### Verified
25
+ - Full publish workflow dry run on GitHub runners: browser hard gate, typecheck, main suite (3622 pass), browser-tool suite (15 pass), `pack:check`, packed-tarball boot smoke, OIDC prerequisites — all green, zero error/warning annotations.
26
+
12
27
  ## [0.11.3] - 2026-10-01
13
28
  _Remote control grew from one Telegram bot into one shared daemon serving Telegram, Discord, and Slack — and the workflow gates that were meant to block unverified work (`approve`/`team` plan identity, `done` re-checks, the autopilot ratchet) now actually block it._
14
29
 
@@ -2457,7 +2472,8 @@ _Initial release._
2457
2472
  ### Added
2458
2473
  - Initial jeo-code agent and CLI.
2459
2474
 
2460
- [Unreleased]: https://github.com/akillness/jeo-code/compare/v0.11.3...HEAD
2475
+ [Unreleased]: https://github.com/akillness/jeo-code/compare/v0.11.4...HEAD
2476
+ [0.11.4]: https://github.com/akillness/jeo-code/releases/tag/v0.11.4
2461
2477
  [0.11.3]: https://github.com/akillness/jeo-code/releases/tag/v0.11.3
2462
2478
  [0.11.2]: https://github.com/akillness/jeo-code/releases/tag/v0.11.2
2463
2479
  [0.11.1]: https://github.com/akillness/jeo-code/releases/tag/v0.11.1
package/README.ja.md CHANGED
@@ -336,12 +336,9 @@ bun run dev:doctor # グローバル `jeo` がこのソースを実行
336
336
 
337
337
  ## 公開 (Publishing)
338
338
 
339
- CI は `.github/workflows/npm-publish.yml` で公開します — GitHub リリース公開時に自動、または `workflow_dispatch` の手動実行(ドライラン可)。ワークフローは型チェック・テスト・トークン検証(`npm whoami`)の後、`npm publish --provenance` を実行します。
339
+ CI は `.github/workflows/npm-publish.yml` で公開します — GitHub リリース公開時に自動、または `workflow_dispatch` の手動実行(ドライラン可)。ワークフローはブラウザのハードゲート・型チェック・テスト(ブラウザツールのテストは別プロセス)・`pack:check`・パック済み tarball の起動スモークを経て `npm publish --provenance` を実行します。
340
340
 
341
- 必要な npm トークン権限(リポジトリシークレット `NPM_TOKEN`):
342
-
343
- - `jeo-code` パッケージへの Read/Write 権限を持つ **Granular Access Token**、またはクラシック **Automation** トークン
344
- - 「公開時の **bypass 2FA**」許可が必須 — Automation トークンは常にバイパス、granular トークンはオプションの有効化が必要
341
+ 公開には **npm trusted publishing(OIDC)** を使います — ローテーション・漏洩・2FA 免除が必要な `NPM_TOKEN` シークレットは存在しません(npm は 2026 年 8 月から 2FA バイパストークンを制限し、2027 年 1 月にそのトークンによる直接公開を終了します)。npmjs.com での一度きりの設定: パッケージ `jeo-code` → Settings → Trusted Publisher → GitHub Actions、owner `akillness`、repository `jeo-code`、workflow `npm-publish.yml`、environment は空欄。ジョブには `permissions.id-token: write` と npm ≥ 11.5.1 が必要です(ワークフローが npm 自体を更新します)。
345
342
 
346
343
  ## 謝辞 (Acknowledgements)
347
344
 
@@ -351,10 +348,10 @@ CI は `.github/workflows/npm-publish.yml` で公開します — GitHub リリ
351
348
 
352
349
  <!-- CHANGELOG:START (auto-generated from CHANGELOG.md — run `bun run changelog:sync`) -->
353
350
  - **[Unreleased]**
351
+ - **[0.11.4]** (2026-10-01) — The release pipeline could not actually release: 13 tests failed on Linux CI only, and the stored npm token no longer authenticated. Both are fixed at the root — the suite is order-independent, and publishing no longer depends on a secret that can expire.
354
352
  - **[0.11.3]** (2026-10-01) — Remote control grew from one Telegram bot into one shared daemon serving Telegram, Discord, and Slack — and the workflow gates that were meant to block unverified work (`approve`/`team` plan identity, `done` re-checks, the autopilot ratchet) now actually block it.
355
353
  - **[0.11.2]** (2026-09-30) — OpenAI model pickers now follow the authenticated API and Codex catalogs, including subscription-only models, without hidden or stale entries.
356
354
  - **[0.11.1]** (2026-08-25) — Every non-interactive `jeo` run hung forever once Telegram notifications were configured — `echo "..." | jeo`, `jeo -p "..."` in CI, any scripted use. The work completed and the command returned; the process just never exited.
357
- - **[0.11.0]** (2026-08-25) — One bad boundary check was corrupting agent context, subagent fan-out, and the Telegram daemon's kill safety at the same time — and none of the three looked related from the outside.
358
355
 
359
356
  See [CHANGELOG.md](CHANGELOG.md) for the full history.
360
357
  <!-- CHANGELOG:END -->
package/README.ko.md CHANGED
@@ -338,12 +338,9 @@ bun run dev:doctor # 전역 `jeo`가 이 소스를 실행하는지 보
338
338
 
339
339
  ## 배포 (Publishing)
340
340
 
341
- CI는 `.github/workflows/npm-publish.yml`로 배포합니다 — GitHub 릴리즈 게시 시 자동, 또는 `workflow_dispatch` 수동 실행(드라이런 옵션). 워크플로는 타입체크·테스트·토큰 검증(`npm whoami`) 후 `npm publish --provenance`를 실행합니다.
341
+ CI는 `.github/workflows/npm-publish.yml`로 배포합니다 — GitHub 릴리즈 게시 시 자동, 또는 `workflow_dispatch` 수동 실행(드라이런 옵션). 워크플로는 브라우저 하드 게이트·타입체크·테스트(브라우저 도구 테스트는 별도 프로세스)·`pack:check`·패키징된 tarball 부팅 스모크를 거친 뒤 `npm publish --provenance`를 실행합니다.
342
342
 
343
- 필요한 npm 토큰 권한(저장소 시크릿 `NPM_TOKEN`):
344
-
345
- - `jeo-code` 패키지에 Read/Write 권한이 있는 **Granular Access Token**, 또는 클래식 **Automation** 토큰
346
- - "배포 시 **bypass 2FA**" 허용 필수 — Automation 토큰은 항상 우회, granular 토큰은 옵션 활성화 필요
343
+ 배포는 **npm trusted publishing(OIDC)** 을 사용합니다 — 교체·유출·2FA 예외가 필요한 `NPM_TOKEN` 시크릿이 없습니다(npm은 2026년 8월부터 2FA 우회 토큰을 제한하고 2027년 1월에 해당 토큰의 직접 배포를 종료합니다). npmjs.com에서 1회 설정: 패키지 `jeo-code` → Settings → Trusted Publisher → GitHub Actions, owner `akillness`, repository `jeo-code`, workflow `npm-publish.yml`, environment 비움. 잡에는 `permissions.id-token: write`와 npm ≥ 11.5.1이 필요합니다(워크플로가 npm을 직접 업그레이드).
347
344
 
348
345
  ## 감사의 말 (Acknowledgements)
349
346
 
@@ -353,10 +350,10 @@ CI는 `.github/workflows/npm-publish.yml`로 배포합니다 — GitHub 릴리
353
350
 
354
351
  <!-- CHANGELOG:START (auto-generated from CHANGELOG.md — run `bun run changelog:sync`) -->
355
352
  - **[Unreleased]**
353
+ - **[0.11.4]** (2026-10-01) — The release pipeline could not actually release: 13 tests failed on Linux CI only, and the stored npm token no longer authenticated. Both are fixed at the root — the suite is order-independent, and publishing no longer depends on a secret that can expire.
356
354
  - **[0.11.3]** (2026-10-01) — Remote control grew from one Telegram bot into one shared daemon serving Telegram, Discord, and Slack — and the workflow gates that were meant to block unverified work (`approve`/`team` plan identity, `done` re-checks, the autopilot ratchet) now actually block it.
357
355
  - **[0.11.2]** (2026-09-30) — OpenAI model pickers now follow the authenticated API and Codex catalogs, including subscription-only models, without hidden or stale entries.
358
356
  - **[0.11.1]** (2026-08-25) — Every non-interactive `jeo` run hung forever once Telegram notifications were configured — `echo "..." | jeo`, `jeo -p "..."` in CI, any scripted use. The work completed and the command returned; the process just never exited.
359
- - **[0.11.0]** (2026-08-25) — One bad boundary check was corrupting agent context, subagent fan-out, and the Telegram daemon's kill safety at the same time — and none of the three looked related from the outside.
360
357
 
361
358
  See [CHANGELOG.md](CHANGELOG.md) for the full history.
362
359
  <!-- CHANGELOG:END -->
package/README.md CHANGED
@@ -344,12 +344,9 @@ bun run dev:doctor # report whether global `jeo` runs this source (link
344
344
  ## Publishing
345
345
 
346
346
 
347
- CI publishes via `.github/workflows/npm-publish.yml` — triggered by a published GitHub release, or manually with `workflow_dispatch` (optional dry-run). The workflow typechecks, tests, verifies the token (`npm whoami`), then runs `npm publish --provenance`.
347
+ CI publishes via `.github/workflows/npm-publish.yml` — triggered by a published GitHub release, or manually with `workflow_dispatch` (optional dry-run). The workflow runs the browser hard gate, typecheck, the test suite (browser tool tests in their own process), `pack:check`, a packed-tarball boot smoke, then `npm publish --provenance`.
348
348
 
349
- Required npm token permissions (repository secret `NPM_TOKEN`):
350
-
351
- - A **Granular Access Token** with Read/Write access to the `jeo-code` package, or a classic **Automation** token
352
- - "**bypass 2FA** for publishing" must be allowed — Automation tokens always bypass; granular tokens need the option enabled
349
+ Publishing uses **npm trusted publishing (OIDC)** — there is no `NPM_TOKEN` secret to rotate, leak, or exempt from 2FA (npm restricts bypass-2FA tokens from Aug 2026 and ends direct publishing with them in Jan 2027). One-time setup on npmjs.com: package `jeo-code` → Settings → Trusted Publisher → GitHub Actions, owner `akillness`, repository `jeo-code`, workflow `npm-publish.yml`, environment blank. The job needs `permissions.id-token: write` and npm ≥ 11.5.1 (the workflow upgrades npm itself).
353
350
 
354
351
  ## Acknowledgements
355
352
 
@@ -359,10 +356,10 @@ Huge thanks to [gajae-code](https://github.com/Yeachan-Heo/gajae-code) for the i
359
356
 
360
357
  <!-- CHANGELOG:START (auto-generated from CHANGELOG.md — run `bun run changelog:sync`) -->
361
358
  - **[Unreleased]**
359
+ - **[0.11.4]** (2026-10-01) — The release pipeline could not actually release: 13 tests failed on Linux CI only, and the stored npm token no longer authenticated. Both are fixed at the root — the suite is order-independent, and publishing no longer depends on a secret that can expire.
362
360
  - **[0.11.3]** (2026-10-01) — Remote control grew from one Telegram bot into one shared daemon serving Telegram, Discord, and Slack — and the workflow gates that were meant to block unverified work (`approve`/`team` plan identity, `done` re-checks, the autopilot ratchet) now actually block it.
363
361
  - **[0.11.2]** (2026-09-30) — OpenAI model pickers now follow the authenticated API and Codex catalogs, including subscription-only models, without hidden or stale entries.
364
362
  - **[0.11.1]** (2026-08-25) — Every non-interactive `jeo` run hung forever once Telegram notifications were configured — `echo "..." | jeo`, `jeo -p "..."` in CI, any scripted use. The work completed and the command returned; the process just never exited.
365
- - **[0.11.0]** (2026-08-25) — One bad boundary check was corrupting agent context, subagent fan-out, and the Telegram daemon's kill safety at the same time — and none of the three looked related from the outside.
366
363
 
367
364
  See [CHANGELOG.md](CHANGELOG.md) for the full history.
368
365
  <!-- CHANGELOG:END -->
package/README.zh.md CHANGED
@@ -334,12 +334,9 @@ bun run dev:doctor # 报告全局 `jeo` 是否运行的是本源码(lin
334
334
 
335
335
  ## 发布 (Publishing)
336
336
 
337
- CI 通过 `.github/workflows/npm-publish.yml` 发布 — GitHub 发布 release 时自动触发,或手动 `workflow_dispatch`(可选 dry-run)。工作流执行类型检查、测试、令牌校验(`npm whoami`)后运行 `npm publish --provenance`。
337
+ CI 通过 `.github/workflows/npm-publish.yml` 发布 — GitHub 发布 release 时自动触发,或手动 `workflow_dispatch`(可选 dry-run)。工作流依次执行浏览器硬门禁、类型检查、测试(浏览器工具测试在独立进程中)、`pack:check`、打包 tarball 的启动冒烟,然后运行 `npm publish --provenance`。
338
338
 
339
- 所需 npm 令牌权限(仓库 secret `NPM_TOKEN`):
340
-
341
- - 对 `jeo-code` 包具有 Read/Write 权限的 **Granular Access Token**,或经典 **Automation** 令牌
342
- - 必须允许"发布时 **bypass 2FA**" — Automation 令牌始终绕过,granular 令牌需启用该选项
339
+ 发布使用 **npm trusted publishing(OIDC)** — 不存在需要轮换、可能泄露或需豁免 2FA 的 `NPM_TOKEN` secret(npm 自 2026 年 8 月起限制绕过 2FA 的令牌,并于 2027 年 1 月终止用其直接发布)。在 npmjs.com 上一次性设置: 包 `jeo-code` → Settings → Trusted Publisher → GitHub Actions,owner `akillness`,repository `jeo-code`,workflow `npm-publish.yml`,environment 留空。该 job 需要 `permissions.id-token: write` 和 npm ≥ 11.5.1(工作流会自行升级 npm)。
343
340
 
344
341
  ## 致谢 (Acknowledgements)
345
342
 
@@ -349,10 +346,10 @@ CI 通过 `.github/workflows/npm-publish.yml` 发布 — GitHub 发布 release
349
346
 
350
347
  <!-- CHANGELOG:START (auto-generated from CHANGELOG.md — run `bun run changelog:sync`) -->
351
348
  - **[Unreleased]**
349
+ - **[0.11.4]** (2026-10-01) — The release pipeline could not actually release: 13 tests failed on Linux CI only, and the stored npm token no longer authenticated. Both are fixed at the root — the suite is order-independent, and publishing no longer depends on a secret that can expire.
352
350
  - **[0.11.3]** (2026-10-01) — Remote control grew from one Telegram bot into one shared daemon serving Telegram, Discord, and Slack — and the workflow gates that were meant to block unverified work (`approve`/`team` plan identity, `done` re-checks, the autopilot ratchet) now actually block it.
353
351
  - **[0.11.2]** (2026-09-30) — OpenAI model pickers now follow the authenticated API and Codex catalogs, including subscription-only models, without hidden or stale entries.
354
352
  - **[0.11.1]** (2026-08-25) — Every non-interactive `jeo` run hung forever once Telegram notifications were configured — `echo "..." | jeo`, `jeo -p "..."` in CI, any scripted use. The work completed and the command returned; the process just never exited.
355
- - **[0.11.0]** (2026-08-25) — One bad boundary check was corrupting agent context, subagent fan-out, and the Telegram daemon's kill safety at the same time — and none of the three looked related from the outside.
356
353
 
357
354
  See [CHANGELOG.md](CHANGELOG.md) for the full history.
358
355
  <!-- CHANGELOG:END -->
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jeo-code",
3
- "version": "0.11.3",
3
+ "version": "0.11.4",
4
4
  "description": "Clean, highly optimized AI coding agent using spec-first loop",
5
5
  "type": "module",
6
6
  "main": "src/cli.ts",