jeo-code 0.5.13 → 0.5.15
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 +18 -0
- package/README.ja.md +2 -2
- package/README.ko.md +2 -2
- package/README.md +2 -2
- package/README.zh.md +2 -2
- package/package.json +3 -2
- package/src/agent/engine.ts +8 -3
- package/src/agent/tools.ts +1 -1
- package/src/cli/runner.ts +10 -1
- package/src/commands/launch.ts +207 -270
- package/src/commands/update.ts +32 -9
- package/src/commands/whats-new.ts +3 -2
- package/src/skills/catalog.ts +34 -78
- package/src/tui/app.ts +43 -61
- package/src/tui/components/autocomplete.ts +2 -8
- package/src/tui/components/slash.ts +1 -2
- package/src/util/whats-new.ts +4 -1
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,24 @@ 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.5.15] - 2026-06-16
|
|
10
|
+
_`jeo update` now actually upgrades — bare command installs the latest release instead of just printing a manual command._
|
|
11
|
+
|
|
12
|
+
### Changed
|
|
13
|
+
- `jeo update` (bare) now performs the upgrade itself: when a newer release exists it runs the install (`bun install -g jeo-code@<latest>`, pinned to the resolved latest version so a stale global cache can't win) instead of printing "Run 'bun install -g jeo-code' to upgrade" and leaving the user to do it. `--check` is the new check-only mode; `--json` stays check-only for programmatic status (add `--install` to install in JSON mode); `--install` still forces an install. The check-only hint now points at `jeo update` itself.
|
|
14
|
+
|
|
15
|
+
## [0.5.14] - 2026-06-16
|
|
16
|
+
_`jeo --tmux` live-verification harness — repeatable stability + behavior checks._
|
|
17
|
+
|
|
18
|
+
### Added
|
|
19
|
+
- `scripts/tmux-verify.sh` (and `bun run verify:tmux`) codifies the launch → send-keys → capture → cleanup loop into one repeatable command, so stability and behavior of the interactive TUI can be checked without hand-rolled one-off bash. macOS-safe (no GNU `timeout`; a bash watchdog polls for the session). Boots jeo in a DETACHED tmux session inside a throwaway cwd (never edits the real repo) and only ever kills the session it created — a user's `jeo-main-*` session is never touched. Subcommands: `smoke` (boot + assert the input box and model bar render, no crash — the stability gate), `check "<input>" "<regex>" [--ansi] [--wait N]` (type input, assert the pane matches a pattern — the behavior primitive; captures scrollback so long output like `/help` still matches), and `capture` (dump the settled frame).
|
|
20
|
+
|
|
21
|
+
### Changed
|
|
22
|
+
- `jeo whats-new` (and the post-upgrade update notice) now default to the **5 most recent** releases instead of only the single latest entry, so the notes no longer look static/hardcoded across upgrades. `--all` still prints the full history. New shared constant `RECENT_RELEASE_COUNT` (`src/util/whats-new.ts`) is the single source of truth for both the command and the launch notice (the launch notice is capped to it too, so a large version jump no longer dumps a wall). Mirrors gjc's "Recent Changes" pattern (latest-N + a full toggle) and the README's latest-5 digest.
|
|
23
|
+
|
|
24
|
+
### Maintainer notes
|
|
25
|
+
- Internal refactors landed since 0.5.13 (no behavior change): centralized workflow name/engine dispatch (`WORKFLOW_NAMES`/`runWorkflowEngine`), a shared `statusBoxData()` for the inline/non-inline status frames, and a `normalizeSlashAlias()` helper. Also fixed a flaky test where the light-tool ledger line briefly carried an elapsed `(Nms)` suffix — that detail belongs on the forge cards, the ledger line is a clean single line again.
|
|
26
|
+
|
|
9
27
|
## [0.5.13] - 2026-06-15
|
|
10
28
|
_Workflow `/` commands actually run — `/deep-interview`, `/team`, `/ultragoal`, `/ralplan` dispatch by name._
|
|
11
29
|
|
package/README.ja.md
CHANGED
|
@@ -150,11 +150,11 @@ CI は `.github/workflows/npm-publish.yml` で公開します — GitHub リリ
|
|
|
150
150
|
## 変更履歴 (Changelog)
|
|
151
151
|
|
|
152
152
|
<!-- CHANGELOG:START (auto-generated from CHANGELOG.md — run `bun run changelog:sync`) -->
|
|
153
|
+
- **[0.5.15]** (2026-06-16) — `jeo update` now actually upgrades — bare command installs the latest release instead of just printing a manual command.
|
|
154
|
+
- **[0.5.14]** (2026-06-16) — `jeo --tmux` live-verification harness — repeatable stability + behavior checks.
|
|
153
155
|
- **[0.5.13]** (2026-06-15) — Workflow `/` commands actually run — `/deep-interview`, `/team`, `/ultragoal`, `/ralplan` dispatch by name.
|
|
154
156
|
- **[0.5.12]** (2026-06-15) — Yellow status animation while a process runs, and elapsed `(Nms)` on every completed tool card.
|
|
155
157
|
- **[0.5.11]** (2026-06-15) — Backspace on an empty prompt line no longer quits jeo.
|
|
156
|
-
- **[0.5.10]** (2026-06-15) — `/resume` transcript no longer dumps raw JSON for batched tool calls.
|
|
157
|
-
- **[0.5.9]** (2026-06-15) — Bounded per-frame wrap for the live thinking/tool-output blocks — re-render cost no longer grows with stream length.
|
|
158
158
|
|
|
159
159
|
See [CHANGELOG.md](CHANGELOG.md) for the full history.
|
|
160
160
|
<!-- CHANGELOG:END -->
|
package/README.ko.md
CHANGED
|
@@ -150,11 +150,11 @@ CI는 `.github/workflows/npm-publish.yml`로 배포합니다 — GitHub 릴리
|
|
|
150
150
|
## 변경 이력 (Changelog)
|
|
151
151
|
|
|
152
152
|
<!-- CHANGELOG:START (auto-generated from CHANGELOG.md — run `bun run changelog:sync`) -->
|
|
153
|
+
- **[0.5.15]** (2026-06-16) — `jeo update` now actually upgrades — bare command installs the latest release instead of just printing a manual command.
|
|
154
|
+
- **[0.5.14]** (2026-06-16) — `jeo --tmux` live-verification harness — repeatable stability + behavior checks.
|
|
153
155
|
- **[0.5.13]** (2026-06-15) — Workflow `/` commands actually run — `/deep-interview`, `/team`, `/ultragoal`, `/ralplan` dispatch by name.
|
|
154
156
|
- **[0.5.12]** (2026-06-15) — Yellow status animation while a process runs, and elapsed `(Nms)` on every completed tool card.
|
|
155
157
|
- **[0.5.11]** (2026-06-15) — Backspace on an empty prompt line no longer quits jeo.
|
|
156
|
-
- **[0.5.10]** (2026-06-15) — `/resume` transcript no longer dumps raw JSON for batched tool calls.
|
|
157
|
-
- **[0.5.9]** (2026-06-15) — Bounded per-frame wrap for the live thinking/tool-output blocks — re-render cost no longer grows with stream length.
|
|
158
158
|
|
|
159
159
|
See [CHANGELOG.md](CHANGELOG.md) for the full history.
|
|
160
160
|
<!-- CHANGELOG:END -->
|
package/README.md
CHANGED
|
@@ -150,11 +150,11 @@ Required npm token permissions (repository secret `NPM_TOKEN`):
|
|
|
150
150
|
## Changelog
|
|
151
151
|
|
|
152
152
|
<!-- CHANGELOG:START (auto-generated from CHANGELOG.md — run `bun run changelog:sync`) -->
|
|
153
|
+
- **[0.5.15]** (2026-06-16) — `jeo update` now actually upgrades — bare command installs the latest release instead of just printing a manual command.
|
|
154
|
+
- **[0.5.14]** (2026-06-16) — `jeo --tmux` live-verification harness — repeatable stability + behavior checks.
|
|
153
155
|
- **[0.5.13]** (2026-06-15) — Workflow `/` commands actually run — `/deep-interview`, `/team`, `/ultragoal`, `/ralplan` dispatch by name.
|
|
154
156
|
- **[0.5.12]** (2026-06-15) — Yellow status animation while a process runs, and elapsed `(Nms)` on every completed tool card.
|
|
155
157
|
- **[0.5.11]** (2026-06-15) — Backspace on an empty prompt line no longer quits jeo.
|
|
156
|
-
- **[0.5.10]** (2026-06-15) — `/resume` transcript no longer dumps raw JSON for batched tool calls.
|
|
157
|
-
- **[0.5.9]** (2026-06-15) — Bounded per-frame wrap for the live thinking/tool-output blocks — re-render cost no longer grows with stream length.
|
|
158
158
|
|
|
159
159
|
See [CHANGELOG.md](CHANGELOG.md) for the full history.
|
|
160
160
|
<!-- CHANGELOG:END -->
|
package/README.zh.md
CHANGED
|
@@ -150,11 +150,11 @@ CI 通过 `.github/workflows/npm-publish.yml` 发布 — GitHub 发布 release
|
|
|
150
150
|
## 更新日志 (Changelog)
|
|
151
151
|
|
|
152
152
|
<!-- CHANGELOG:START (auto-generated from CHANGELOG.md — run `bun run changelog:sync`) -->
|
|
153
|
+
- **[0.5.15]** (2026-06-16) — `jeo update` now actually upgrades — bare command installs the latest release instead of just printing a manual command.
|
|
154
|
+
- **[0.5.14]** (2026-06-16) — `jeo --tmux` live-verification harness — repeatable stability + behavior checks.
|
|
153
155
|
- **[0.5.13]** (2026-06-15) — Workflow `/` commands actually run — `/deep-interview`, `/team`, `/ultragoal`, `/ralplan` dispatch by name.
|
|
154
156
|
- **[0.5.12]** (2026-06-15) — Yellow status animation while a process runs, and elapsed `(Nms)` on every completed tool card.
|
|
155
157
|
- **[0.5.11]** (2026-06-15) — Backspace on an empty prompt line no longer quits jeo.
|
|
156
|
-
- **[0.5.10]** (2026-06-15) — `/resume` transcript no longer dumps raw JSON for batched tool calls.
|
|
157
|
-
- **[0.5.9]** (2026-06-15) — Bounded per-frame wrap for the live thinking/tool-output blocks — re-render cost no longer grows with stream length.
|
|
158
158
|
|
|
159
159
|
See [CHANGELOG.md](CHANGELOG.md) for the full history.
|
|
160
160
|
<!-- CHANGELOG:END -->
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "jeo-code",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.15",
|
|
4
4
|
"description": "Clean, highly optimized AI coding agent using spec-first loop",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "src/cli.ts",
|
|
@@ -49,7 +49,8 @@
|
|
|
49
49
|
"pack:check": "npm pack --dry-run",
|
|
50
50
|
"publish:npm": "npm publish --access public --registry https://registry.npmjs.org/",
|
|
51
51
|
"changelog:sync": "bun scripts/sync-changelog.ts",
|
|
52
|
-
"test": "bun test"
|
|
52
|
+
"test": "bun test",
|
|
53
|
+
"verify:tmux": "bash scripts/tmux-verify.sh"
|
|
53
54
|
},
|
|
54
55
|
"dependencies": {
|
|
55
56
|
"zod": "^3.24.1",
|
package/src/agent/engine.ts
CHANGED
|
@@ -83,6 +83,7 @@ export const TOOL_PROTOCOL = [
|
|
|
83
83
|
"Batch only independent calls; NEVER batch 'done', and NEVER put a mutating tool (write/edit/bash) after another mutating tool in one batch whose inputs depend on the earlier one.",
|
|
84
84
|
"Tool calibration: scale calls to difficulty — one for a known fact, a few for a normal task, more only when evidence is genuinely missing. Locate before you open: search/find first, then read the hit, instead of guessing paths.",
|
|
85
85
|
"web_search reflex: if the request hinges on a name, version, library, or event you do not actually recognize, search before answering instead of guessing; never claim a result's absence proves nonexistence.",
|
|
86
|
+
"Quoting fetched/searched text: paraphrase by default — quote at most one short phrase per source, cite it, and never paste long passages.",
|
|
86
87
|
].join("\n");
|
|
87
88
|
|
|
88
89
|
/** Restricted protocol for read-only subagent roles (planner/architect/critic):
|
|
@@ -113,15 +114,19 @@ export const WORKING_DISCIPLINE = [
|
|
|
113
114
|
"- Correctness first, maintainability second, brevity third. Prefer boring, explicit code.",
|
|
114
115
|
"- Never present partial work as complete; never suppress tests or warnings to make code pass.",
|
|
115
116
|
"- Never fabricate tool results or test outcomes; verification claims must match what was actually run.",
|
|
116
|
-
"- Don't assume disk/state
|
|
117
|
+
"- Don't assume disk/state or that a referenced file exists — read to verify first.",
|
|
117
118
|
"- Don't fabricate API/library surfaces from memory; check the source or --help for unfamiliar APIs.",
|
|
118
119
|
"- Never ship stubs, placeholders, or TODO-only code as a delivered feature.",
|
|
119
120
|
"- Never substitute the requested problem with an easier adjacent one.",
|
|
121
|
+
"- On a failed tool or test, fix the cause and continue — capture the evidence first; no apology loops, no shrinking the task to dodge it.",
|
|
120
122
|
"- Update directly affected callsites, tests, and docs — or state why they are unchanged.",
|
|
121
123
|
"- Reuse existing patterns; parallel conventions are prohibited. Fix problems at their source.",
|
|
122
|
-
"-
|
|
123
|
-
"- Trust tool output
|
|
124
|
+
"- Not alone in the repo: treat unexpected changes as user work; never revert or delete them.",
|
|
125
|
+
"- Trust tool output, but re-read/re-run on failure, on a possible file change, or when output looks stale or self-contradictory.",
|
|
124
126
|
"- Prefer dedicated tools over shell pipelines: read (not cat), search (not grep), edit (not sed).",
|
|
127
|
+
"- For large files (>500 lines), read targeted sections first; use lineRange to avoid context bloat.",
|
|
128
|
+
"- Own mistakes plainly and fix them — no over-apology or self-abasement; report what went wrong and what you changed.",
|
|
129
|
+
"- Decline to build malware, exploits, or vulnerability-weaponization even under an educational or research framing.",
|
|
125
130
|
].join("\n");
|
|
126
131
|
|
|
127
132
|
/** Reply discipline (FABLE-5 tone + gjc communication/soul): shapes the agent's
|
package/src/agent/tools.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { applyBashFixups } from "./bash-fixups";
|
|
2
2
|
import * as fs from "node:fs/promises";
|
|
3
3
|
import * as path from "node:path";
|
|
4
|
-
import {
|
|
4
|
+
import { readWorkflowStateStrict, type WorkflowState } from "./state";
|
|
5
5
|
import { jeoEnv } from "../util/env";
|
|
6
6
|
import { READ_OUTPUT_MAX } from "./tool-output";
|
|
7
7
|
|
package/src/cli/runner.ts
CHANGED
|
@@ -165,13 +165,22 @@ export const COMMANDS: readonly CommandSpec[] = [
|
|
|
165
165
|
},
|
|
166
166
|
{
|
|
167
167
|
name: "update",
|
|
168
|
-
summary: "
|
|
168
|
+
summary: "Update jeo-code to the latest npm release (bare = install; --check only checks).",
|
|
169
169
|
usage: "update [--check|--install] [--json] [--strict]",
|
|
170
170
|
loader: async () => {
|
|
171
171
|
const m = await import("../commands/update");
|
|
172
172
|
return args => m.runUpdateCommand(args);
|
|
173
173
|
},
|
|
174
174
|
},
|
|
175
|
+
{
|
|
176
|
+
name: "whats-new",
|
|
177
|
+
summary: "Show the release notes bundled with the installed jeo-code version.",
|
|
178
|
+
usage: "whats-new [--all] [--json]",
|
|
179
|
+
loader: async () => {
|
|
180
|
+
const m = await import("../commands/whats-new");
|
|
181
|
+
return args => m.runWhatsNewCommand(args);
|
|
182
|
+
},
|
|
183
|
+
},
|
|
175
184
|
{
|
|
176
185
|
name: "ooo-seed",
|
|
177
186
|
summary: "Generate an immutable ooo seed from a specification (spec-first automation).",
|