jeo-code 0.7.21 → 0.7.22
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 +13 -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 +1 -1
- package/src/agent/config-schema.ts +11 -0
- package/src/agent/state.ts +7 -0
- package/src/commands/launch.ts +5 -0
- package/src/commands/update.ts +30 -10
- package/src/prompts/skills/ultragoal/SKILL.md +12 -0
- package/src/tui/components/themes.ts +20 -1
- package/src/util/notify.ts +73 -0
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.7.22] - 2026-06-30
|
|
10
|
+
_gajae-code 0.7.3–0.7.8 parity sweep: terminal-bell notifications, a gruvbox-dark TUI theme, a resilient `jeo update` runtime check, and an ultragoal artifact gate. Ports the user-facing improvements from upstream gajae-code that jeo did not yet have, re-implemented to fit jeo's config, command, theming, and skill surfaces._
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
- **Terminal-bell notifications (`notify.bell` / `JEO_NOTIFY_BELL`).** gajae-code 0.7.8 (#1277) parity. Emits an ASCII BEL when an agent turn finishes so a backgrounded `jeo` session pings you. Off by default; opt in with `config.notify.bell` (per-event `onComplete`/`onAsk` refine it) or force with `JEO_NOTIFY_BELL=1`/`0`. Never fires for a cancelled turn, and a dead terminal never crashes the turn.
|
|
14
|
+
- **gruvbox-dark TUI theme.** New `JEO_TUI_THEME=gruvbox-dark` option alongside the existing themes.
|
|
15
|
+
|
|
16
|
+
### Fixed
|
|
17
|
+
- **`jeo update` no longer reports false failures from Bun tarball-extraction errors.** gajae-code 0.7.8 (#1280) parity. When the package manager exits nonzero but the active `jeo` on PATH actually reports the requested version, the update is treated as recovered (with a clear message and `recovered: true` in `--json`) instead of failing; genuine failures still exit 1.
|
|
18
|
+
|
|
19
|
+
### Changed
|
|
20
|
+
- **ultragoal artifact gate.** gajae-code 0.7.4 (#1163) parity. The completion report must cite concrete verification artifacts — exact commands and their observed results, plus changed-file paths tied to each acceptance criterion — and must explicitly mark any unverifiable criterion as unresolved rather than implying success.
|
|
21
|
+
|
|
9
22
|
## [0.7.21] - 2026-06-26
|
|
10
23
|
_Global llm-wiki vault integration, Gemini/Antigravity thinking indicators, generous file-reading windows, and autopilot flag validation. Adds a shared global wiki root configuration with a /wiki slash command, fires reasoning start signals up front for Gemini/Antigravity models, adjusts the large-file reading discipline to use generous windows, and validates autopilot goal and integer flags._
|
|
11
24
|
|
package/README.ja.md
CHANGED
|
@@ -179,7 +179,7 @@ jeo doctor && jeo
|
|
|
179
179
|
ANTHROPIC_API_KEY=... OPENAI_API_KEY=... GEMINI_API_KEY=...
|
|
180
180
|
JEO_DEFAULT_MODEL=... # 例: ollama/qwen2.5:0.5b
|
|
181
181
|
OLLAMA_HOST=http://localhost:11434
|
|
182
|
-
JEO_TUI_THEME=cosmic # cosmic/matrix/solar/red-claw/blue-crab/mono/aurora/synthwave/sakura
|
|
182
|
+
JEO_TUI_THEME=cosmic # cosmic/matrix/solar/red-claw/blue-crab/mono/aurora/synthwave/sakura/gruvbox-dark
|
|
183
183
|
JEO_TUI_ALT_SCREEN=1 # レガシー alt-screen ターン(デフォルト: インラインスクロールバック)
|
|
184
184
|
JEO_STEP_BASE=24 # 動的ステップ予算のローリングベース
|
|
185
185
|
JEO_STEP_HARD_CAP=600 # 絶対終了保証
|
|
@@ -205,11 +205,11 @@ CI は `.github/workflows/npm-publish.yml` で公開します — GitHub リリ
|
|
|
205
205
|
## 変更履歴 (Changelog)
|
|
206
206
|
|
|
207
207
|
<!-- CHANGELOG:START (auto-generated from CHANGELOG.md — run `bun run changelog:sync`) -->
|
|
208
|
+
- **[0.7.22]** (2026-06-30) — gajae-code 0.7.3–0.7.8 parity sweep: terminal-bell notifications, a gruvbox-dark TUI theme, a resilient `jeo update` runtime check, and an ultragoal artifact gate. Ports the user-facing improvements from upstream gajae-code that jeo did not yet have, re-implemented to fit jeo's config, command, theming, and skill surfaces.
|
|
208
209
|
- **[0.7.21]** (2026-06-26) — Global llm-wiki vault integration, Gemini/Antigravity thinking indicators, generous file-reading windows, and autopilot flag validation. Adds a shared global wiki root configuration with a /wiki slash command, fires reasoning start signals up front for Gemini/Antigravity models, adjusts the large-file reading discipline to use generous windows, and validates autopilot goal and integer flags.
|
|
209
210
|
- **[0.7.20]** (2026-06-26) — OKF concept-memory retrieval gains a hybrid reranker ported from memsearch. Injection priority no longer rides one raw keyword score — it fuses two complementary ranked channels by Reciprocal Rank Fusion (RRF): IDF-weighted lexical relevance (the sparse/BM25 channel, so rare discriminating terms steer recall) and concept-graph proximity (the local dense/semantic-neighbour channel, so a hub linked from multiple query hits surfaces even with no keyword of its own). All embedding-free and deterministic, layered atop the existing failure-first tier and pinned-invariant reserved budget.
|
|
210
211
|
- **[0.7.19]** (2026-06-26) — The live model picker gains gajae-code's `/model` provider tabs, and skill invocation is consolidated onto a single `$` entrypoint. The picker now shows an `ALL` tab plus one tab per provider that `tab`/`shift+tab` cycles, and skills (including their declared aliases) are invoked only via `$` — the slash palette stays builtins-only.
|
|
211
212
|
- **[0.7.18]** (2026-06-26) — Slash-command discovery and the `/model` flow reach gajae-code parity. The slash palette/autocomplete now fuzzy-matches command names (with a description fallback for intent-style queries), resolved skills can contribute their own `/aliases` as real dispatchable commands, and `/model` runs gjc's two-menu target → reasoning flow so a picked model can be assigned to the default or any subagent role with its own thinking budget.
|
|
212
|
-
- **[0.7.17]** (2026-06-25) — Developer workflow parity (gjc `dev:link`/`dev:doctor`, adapted for jeo's zero-native-dep Bun runtime): the global `jeo` command can be linked to run this checkout's source hot to every edit, with a drift doctor that flags when `jeo` resolves to a compiled binary or an installed copy instead. README gains "Skill migration and bundled skill inspection" + "Development" sections. Also ships OKF concept-memory search/scoring with budget-aware injection and a round of workflow-prompt hardening (anti-punt, todo-first planning, verdict discipline) that keeps every loop escape hatch intact.
|
|
213
213
|
|
|
214
214
|
See [CHANGELOG.md](CHANGELOG.md) for the full history.
|
|
215
215
|
<!-- CHANGELOG:END -->
|
package/README.ko.md
CHANGED
|
@@ -179,7 +179,7 @@ jeo doctor && jeo
|
|
|
179
179
|
ANTHROPIC_API_KEY=... OPENAI_API_KEY=... GEMINI_API_KEY=...
|
|
180
180
|
JEO_DEFAULT_MODEL=... # 예: ollama/qwen2.5:0.5b
|
|
181
181
|
OLLAMA_HOST=http://localhost:11434
|
|
182
|
-
JEO_TUI_THEME=cosmic # cosmic/matrix/solar/red-claw/blue-crab/mono/aurora/synthwave/sakura
|
|
182
|
+
JEO_TUI_THEME=cosmic # cosmic/matrix/solar/red-claw/blue-crab/mono/aurora/synthwave/sakura/gruvbox-dark
|
|
183
183
|
JEO_TUI_ALT_SCREEN=1 # 레거시 alt-screen 턴(기본: 인라인 스크롤백)
|
|
184
184
|
JEO_STEP_BASE=24 # 동적 스텝 버짓의 롤링 베이스
|
|
185
185
|
JEO_STEP_HARD_CAP=600 # 절대 종료 보증
|
|
@@ -205,11 +205,11 @@ CI는 `.github/workflows/npm-publish.yml`로 배포합니다 — GitHub 릴리
|
|
|
205
205
|
## 변경 이력 (Changelog)
|
|
206
206
|
|
|
207
207
|
<!-- CHANGELOG:START (auto-generated from CHANGELOG.md — run `bun run changelog:sync`) -->
|
|
208
|
+
- **[0.7.22]** (2026-06-30) — gajae-code 0.7.3–0.7.8 parity sweep: terminal-bell notifications, a gruvbox-dark TUI theme, a resilient `jeo update` runtime check, and an ultragoal artifact gate. Ports the user-facing improvements from upstream gajae-code that jeo did not yet have, re-implemented to fit jeo's config, command, theming, and skill surfaces.
|
|
208
209
|
- **[0.7.21]** (2026-06-26) — Global llm-wiki vault integration, Gemini/Antigravity thinking indicators, generous file-reading windows, and autopilot flag validation. Adds a shared global wiki root configuration with a /wiki slash command, fires reasoning start signals up front for Gemini/Antigravity models, adjusts the large-file reading discipline to use generous windows, and validates autopilot goal and integer flags.
|
|
209
210
|
- **[0.7.20]** (2026-06-26) — OKF concept-memory retrieval gains a hybrid reranker ported from memsearch. Injection priority no longer rides one raw keyword score — it fuses two complementary ranked channels by Reciprocal Rank Fusion (RRF): IDF-weighted lexical relevance (the sparse/BM25 channel, so rare discriminating terms steer recall) and concept-graph proximity (the local dense/semantic-neighbour channel, so a hub linked from multiple query hits surfaces even with no keyword of its own). All embedding-free and deterministic, layered atop the existing failure-first tier and pinned-invariant reserved budget.
|
|
210
211
|
- **[0.7.19]** (2026-06-26) — The live model picker gains gajae-code's `/model` provider tabs, and skill invocation is consolidated onto a single `$` entrypoint. The picker now shows an `ALL` tab plus one tab per provider that `tab`/`shift+tab` cycles, and skills (including their declared aliases) are invoked only via `$` — the slash palette stays builtins-only.
|
|
211
212
|
- **[0.7.18]** (2026-06-26) — Slash-command discovery and the `/model` flow reach gajae-code parity. The slash palette/autocomplete now fuzzy-matches command names (with a description fallback for intent-style queries), resolved skills can contribute their own `/aliases` as real dispatchable commands, and `/model` runs gjc's two-menu target → reasoning flow so a picked model can be assigned to the default or any subagent role with its own thinking budget.
|
|
212
|
-
- **[0.7.17]** (2026-06-25) — Developer workflow parity (gjc `dev:link`/`dev:doctor`, adapted for jeo's zero-native-dep Bun runtime): the global `jeo` command can be linked to run this checkout's source hot to every edit, with a drift doctor that flags when `jeo` resolves to a compiled binary or an installed copy instead. README gains "Skill migration and bundled skill inspection" + "Development" sections. Also ships OKF concept-memory search/scoring with budget-aware injection and a round of workflow-prompt hardening (anti-punt, todo-first planning, verdict discipline) that keeps every loop escape hatch intact.
|
|
213
213
|
|
|
214
214
|
See [CHANGELOG.md](CHANGELOG.md) for the full history.
|
|
215
215
|
<!-- CHANGELOG:END -->
|
package/README.md
CHANGED
|
@@ -180,7 +180,7 @@ jeo doctor && jeo
|
|
|
180
180
|
ANTHROPIC_API_KEY=... OPENAI_API_KEY=... GEMINI_API_KEY=...
|
|
181
181
|
JEO_DEFAULT_MODEL=... # e.g. ollama/qwen2.5:0.5b
|
|
182
182
|
OLLAMA_HOST=http://localhost:11434
|
|
183
|
-
JEO_TUI_THEME=cosmic # cosmic/matrix/solar/red-claw/blue-crab/mono/aurora/synthwave/sakura
|
|
183
|
+
JEO_TUI_THEME=cosmic # cosmic/matrix/solar/red-claw/blue-crab/mono/aurora/synthwave/sakura/gruvbox-dark
|
|
184
184
|
JEO_TUI_ALT_SCREEN=1 # legacy alt-screen turn (default: inline scrollback)
|
|
185
185
|
JEO_STEP_BASE=24 # dynamic step budget: rolling base
|
|
186
186
|
JEO_STEP_HARD_CAP=600 # absolute termination guarantee
|
|
@@ -232,11 +232,11 @@ Huge thanks to [gajae-code](https://github.com/Yeachan-Heo/gajae-code) for the i
|
|
|
232
232
|
## Changelog
|
|
233
233
|
|
|
234
234
|
<!-- CHANGELOG:START (auto-generated from CHANGELOG.md — run `bun run changelog:sync`) -->
|
|
235
|
+
- **[0.7.22]** (2026-06-30) — gajae-code 0.7.3–0.7.8 parity sweep: terminal-bell notifications, a gruvbox-dark TUI theme, a resilient `jeo update` runtime check, and an ultragoal artifact gate. Ports the user-facing improvements from upstream gajae-code that jeo did not yet have, re-implemented to fit jeo's config, command, theming, and skill surfaces.
|
|
235
236
|
- **[0.7.21]** (2026-06-26) — Global llm-wiki vault integration, Gemini/Antigravity thinking indicators, generous file-reading windows, and autopilot flag validation. Adds a shared global wiki root configuration with a /wiki slash command, fires reasoning start signals up front for Gemini/Antigravity models, adjusts the large-file reading discipline to use generous windows, and validates autopilot goal and integer flags.
|
|
236
237
|
- **[0.7.20]** (2026-06-26) — OKF concept-memory retrieval gains a hybrid reranker ported from memsearch. Injection priority no longer rides one raw keyword score — it fuses two complementary ranked channels by Reciprocal Rank Fusion (RRF): IDF-weighted lexical relevance (the sparse/BM25 channel, so rare discriminating terms steer recall) and concept-graph proximity (the local dense/semantic-neighbour channel, so a hub linked from multiple query hits surfaces even with no keyword of its own). All embedding-free and deterministic, layered atop the existing failure-first tier and pinned-invariant reserved budget.
|
|
237
238
|
- **[0.7.19]** (2026-06-26) — The live model picker gains gajae-code's `/model` provider tabs, and skill invocation is consolidated onto a single `$` entrypoint. The picker now shows an `ALL` tab plus one tab per provider that `tab`/`shift+tab` cycles, and skills (including their declared aliases) are invoked only via `$` — the slash palette stays builtins-only.
|
|
238
239
|
- **[0.7.18]** (2026-06-26) — Slash-command discovery and the `/model` flow reach gajae-code parity. The slash palette/autocomplete now fuzzy-matches command names (with a description fallback for intent-style queries), resolved skills can contribute their own `/aliases` as real dispatchable commands, and `/model` runs gjc's two-menu target → reasoning flow so a picked model can be assigned to the default or any subagent role with its own thinking budget.
|
|
239
|
-
- **[0.7.17]** (2026-06-25) — Developer workflow parity (gjc `dev:link`/`dev:doctor`, adapted for jeo's zero-native-dep Bun runtime): the global `jeo` command can be linked to run this checkout's source hot to every edit, with a drift doctor that flags when `jeo` resolves to a compiled binary or an installed copy instead. README gains "Skill migration and bundled skill inspection" + "Development" sections. Also ships OKF concept-memory search/scoring with budget-aware injection and a round of workflow-prompt hardening (anti-punt, todo-first planning, verdict discipline) that keeps every loop escape hatch intact.
|
|
240
240
|
|
|
241
241
|
See [CHANGELOG.md](CHANGELOG.md) for the full history.
|
|
242
242
|
<!-- CHANGELOG:END -->
|
package/README.zh.md
CHANGED
|
@@ -179,7 +179,7 @@ jeo doctor && jeo
|
|
|
179
179
|
ANTHROPIC_API_KEY=... OPENAI_API_KEY=... GEMINI_API_KEY=...
|
|
180
180
|
JEO_DEFAULT_MODEL=... # 例: ollama/qwen2.5:0.5b
|
|
181
181
|
OLLAMA_HOST=http://localhost:11434
|
|
182
|
-
JEO_TUI_THEME=cosmic # cosmic/matrix/solar/red-claw/blue-crab/mono/aurora/synthwave/sakura
|
|
182
|
+
JEO_TUI_THEME=cosmic # cosmic/matrix/solar/red-claw/blue-crab/mono/aurora/synthwave/sakura/gruvbox-dark
|
|
183
183
|
JEO_TUI_ALT_SCREEN=1 # 旧版 alt-screen 回合(默认: 内联滚动缓冲)
|
|
184
184
|
JEO_STEP_BASE=24 # 动态步数预算的滚动基数
|
|
185
185
|
JEO_STEP_HARD_CAP=600 # 绝对终止保证
|
|
@@ -205,11 +205,11 @@ CI 通过 `.github/workflows/npm-publish.yml` 发布 — GitHub 发布 release
|
|
|
205
205
|
## 更新日志 (Changelog)
|
|
206
206
|
|
|
207
207
|
<!-- CHANGELOG:START (auto-generated from CHANGELOG.md — run `bun run changelog:sync`) -->
|
|
208
|
+
- **[0.7.22]** (2026-06-30) — gajae-code 0.7.3–0.7.8 parity sweep: terminal-bell notifications, a gruvbox-dark TUI theme, a resilient `jeo update` runtime check, and an ultragoal artifact gate. Ports the user-facing improvements from upstream gajae-code that jeo did not yet have, re-implemented to fit jeo's config, command, theming, and skill surfaces.
|
|
208
209
|
- **[0.7.21]** (2026-06-26) — Global llm-wiki vault integration, Gemini/Antigravity thinking indicators, generous file-reading windows, and autopilot flag validation. Adds a shared global wiki root configuration with a /wiki slash command, fires reasoning start signals up front for Gemini/Antigravity models, adjusts the large-file reading discipline to use generous windows, and validates autopilot goal and integer flags.
|
|
209
210
|
- **[0.7.20]** (2026-06-26) — OKF concept-memory retrieval gains a hybrid reranker ported from memsearch. Injection priority no longer rides one raw keyword score — it fuses two complementary ranked channels by Reciprocal Rank Fusion (RRF): IDF-weighted lexical relevance (the sparse/BM25 channel, so rare discriminating terms steer recall) and concept-graph proximity (the local dense/semantic-neighbour channel, so a hub linked from multiple query hits surfaces even with no keyword of its own). All embedding-free and deterministic, layered atop the existing failure-first tier and pinned-invariant reserved budget.
|
|
210
211
|
- **[0.7.19]** (2026-06-26) — The live model picker gains gajae-code's `/model` provider tabs, and skill invocation is consolidated onto a single `$` entrypoint. The picker now shows an `ALL` tab plus one tab per provider that `tab`/`shift+tab` cycles, and skills (including their declared aliases) are invoked only via `$` — the slash palette stays builtins-only.
|
|
211
212
|
- **[0.7.18]** (2026-06-26) — Slash-command discovery and the `/model` flow reach gajae-code parity. The slash palette/autocomplete now fuzzy-matches command names (with a description fallback for intent-style queries), resolved skills can contribute their own `/aliases` as real dispatchable commands, and `/model` runs gjc's two-menu target → reasoning flow so a picked model can be assigned to the default or any subagent role with its own thinking budget.
|
|
212
|
-
- **[0.7.17]** (2026-06-25) — Developer workflow parity (gjc `dev:link`/`dev:doctor`, adapted for jeo's zero-native-dep Bun runtime): the global `jeo` command can be linked to run this checkout's source hot to every edit, with a drift doctor that flags when `jeo` resolves to a compiled binary or an installed copy instead. README gains "Skill migration and bundled skill inspection" + "Development" sections. Also ships OKF concept-memory search/scoring with budget-aware injection and a round of workflow-prompt hardening (anti-punt, todo-first planning, verdict discipline) that keeps every loop escape hatch intact.
|
|
213
213
|
|
|
214
214
|
See [CHANGELOG.md](CHANGELOG.md) for the full history.
|
|
215
215
|
<!-- CHANGELOG:END -->
|
package/package.json
CHANGED
|
@@ -73,6 +73,17 @@ export const ConfigSchema = z
|
|
|
73
73
|
lmstudioBaseUrl: z.string().optional(),
|
|
74
74
|
defaultModel: z.string().min(1),
|
|
75
75
|
theme: z.string().optional(),
|
|
76
|
+
/** Terminal-bell notifications (gajae-code 0.7.8 parity): emit an ASCII BEL
|
|
77
|
+
* (\x07) at notable interaction points so a backgrounded session pings the
|
|
78
|
+
* user. Off by default; `bell` is the master toggle, per-event flags refine it.
|
|
79
|
+
* Env `JEO_NOTIFY_BELL=1/0` force-overrides the master toggle. */
|
|
80
|
+
notify: z
|
|
81
|
+
.object({
|
|
82
|
+
bell: z.boolean().optional(),
|
|
83
|
+
onComplete: z.boolean().optional(),
|
|
84
|
+
onAsk: z.boolean().optional(),
|
|
85
|
+
})
|
|
86
|
+
.optional(),
|
|
76
87
|
/** Root path of the global llm-wiki vault, shared across every session
|
|
77
88
|
* regardless of project/cwd. A leading `~` is expanded; env `JEO_WIKI_ROOT`
|
|
78
89
|
* overrides. Consumed by `resolveWikiRoot` and injected into the prompt. */
|
package/src/agent/state.ts
CHANGED
|
@@ -51,6 +51,13 @@ export interface Config {
|
|
|
51
51
|
* overrides. Resolve with `resolveWikiRoot()`. */
|
|
52
52
|
wikiRoot?: string;
|
|
53
53
|
theme?: string;
|
|
54
|
+
/** Terminal-bell notifications (gajae-code 0.7.8 parity). `bell` is the master
|
|
55
|
+
* toggle; per-event flags refine it. Env `JEO_NOTIFY_BELL=1/0` force-overrides. */
|
|
56
|
+
notify?: {
|
|
57
|
+
bell?: boolean;
|
|
58
|
+
onComplete?: boolean;
|
|
59
|
+
onAsk?: boolean;
|
|
60
|
+
};
|
|
54
61
|
thinkingLevel?: "minimal" | "low" | "medium" | "high" | "xhigh";
|
|
55
62
|
/** Friendly model aliases, e.g. { fast: "ollama/qwen2.5:0.5b" }. Override built-ins. */
|
|
56
63
|
modelAliases?: { [alias: string]: string };
|
package/src/commands/launch.ts
CHANGED
|
@@ -29,6 +29,7 @@ import { checkForUpdate, readUpdateCache, writeUpdateCache } from "../util/updat
|
|
|
29
29
|
import { jeoEnv } from "../util/env";
|
|
30
30
|
import { renderUpdateBox } from "../tui/components/update-box";
|
|
31
31
|
import { consumeLaunchWhatsNew } from "../util/whats-new";
|
|
32
|
+
import { maybeBell } from "../util/notify";
|
|
32
33
|
import { supportsUnicode } from "../tui/components/capability";
|
|
33
34
|
import pkg from "../../package.json";
|
|
34
35
|
import chalk from "chalk";
|
|
@@ -4486,6 +4487,10 @@ export async function runLaunchCommand(args: string[]): Promise<void> {
|
|
|
4486
4487
|
} else if (usage) {
|
|
4487
4488
|
console.log(usage.trim());
|
|
4488
4489
|
}
|
|
4490
|
+
// gajae-code 0.7.8 parity: ping the terminal bell when a turn finishes so a
|
|
4491
|
+
// backgrounded session notifies the user. Off unless config.notify.bell (or
|
|
4492
|
+
// JEO_NOTIFY_BELL=1) is set; never fires for a cancelled turn.
|
|
4493
|
+
if (reply !== "Cancelled.") maybeBell("complete", cfg.notify, (s) => out.write(s), process.env as Record<string, string | undefined>);
|
|
4489
4494
|
} catch (err) {
|
|
4490
4495
|
console.log(`! ${friendlyProviderError(err)}`);
|
|
4491
4496
|
}
|
package/src/commands/update.ts
CHANGED
|
@@ -235,18 +235,38 @@ export async function runUpdateCommandWith(args: string[], deps: UpdateDeps): Pr
|
|
|
235
235
|
deps.showWhatsNew?.();
|
|
236
236
|
}
|
|
237
237
|
} else {
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
238
|
+
// gajae-code 0.7.8 parity (#1280): a nonzero bun/npm exit is NOT always a
|
|
239
|
+
// real failure — Bun tarball-extraction errors can exit nonzero AFTER the
|
|
240
|
+
// requested version actually landed. Before reporting failure, verify the
|
|
241
|
+
// active `jeo` on PATH: if it now reports >= latest, treat it as recovered.
|
|
242
|
+
const recovered = deps.activeVersion?.();
|
|
243
|
+
if (recovered && latest && compareVersions(recovered, latest) >= 0) {
|
|
244
|
+
if (hasJson) {
|
|
245
|
+
console.log(JSON.stringify({
|
|
246
|
+
current,
|
|
247
|
+
latest,
|
|
248
|
+
upToDate: false,
|
|
249
|
+
installed: true,
|
|
250
|
+
recovered: true
|
|
251
|
+
}));
|
|
252
|
+
} else {
|
|
253
|
+
console.log(`Successfully installed jeo-code@${latest} (package manager reported an error, but the runtime verified clean).`);
|
|
254
|
+
deps.showWhatsNew?.();
|
|
255
|
+
}
|
|
246
256
|
} else {
|
|
247
|
-
|
|
257
|
+
if (hasJson) {
|
|
258
|
+
console.log(JSON.stringify({
|
|
259
|
+
current,
|
|
260
|
+
latest,
|
|
261
|
+
upToDate: false,
|
|
262
|
+
installed: false,
|
|
263
|
+
error: "Installation failed"
|
|
264
|
+
}));
|
|
265
|
+
} else {
|
|
266
|
+
console.error("Failed to install update.");
|
|
267
|
+
}
|
|
268
|
+
process.exitCode = 1;
|
|
248
269
|
}
|
|
249
|
-
process.exitCode = 1;
|
|
250
270
|
}
|
|
251
271
|
} catch (installErr: any) {
|
|
252
272
|
const installErrMsg = installErr.message || String(installErr);
|
|
@@ -9,3 +9,15 @@ when: When tasks are implemented and you need a final, high-level verification a
|
|
|
9
9
|
Verifies the implementation against the acceptance criteria specified in the plan.
|
|
10
10
|
Runs checks, tests, or validations to ensure correctness.
|
|
11
11
|
Generates a final completion report outlining the changes and verification evidence.
|
|
12
|
+
|
|
13
|
+
## Artifact gate (gajae-code 0.7.4 parity)
|
|
14
|
+
|
|
15
|
+
The completion report must be backed by concrete artifacts, not assertions:
|
|
16
|
+
- Cite the exact verification commands run and their observed result (e.g. test
|
|
17
|
+
counts, `typecheck` clean, build exit code) — never claim "tests pass" without
|
|
18
|
+
the command and its output.
|
|
19
|
+
- Reference each changed file by path, and tie it to the acceptance criterion it
|
|
20
|
+
satisfies.
|
|
21
|
+
- If an acceptance criterion could not be verified (missing credential, service,
|
|
22
|
+
or product decision), say so explicitly and mark it unresolved rather than
|
|
23
|
+
implying success. A criterion with no supporting artifact is NOT met.
|
|
@@ -181,6 +181,25 @@ const SAKURA: EvolutionTheme = {
|
|
|
181
181
|
userCard: { accent: "#d6336c", border: "#862e59", shadow: "#43172c", fill: "#210b16" },
|
|
182
182
|
};
|
|
183
183
|
|
|
184
|
+
const GRUVBOX_DARK: EvolutionTheme = {
|
|
185
|
+
name: "gruvbox-dark",
|
|
186
|
+
description: "Gruvbox dark — warm retro earth tones arcing from bark to cream (canonical Gruvbox palette).",
|
|
187
|
+
gradients: [
|
|
188
|
+
{ from: "#282828", to: "#d65d0e" },
|
|
189
|
+
{ from: "#d65d0e", to: "#fe8019" },
|
|
190
|
+
{ from: "#fe8019", to: "#fabd2f" },
|
|
191
|
+
{ from: "#fabd2f", to: "#b8bb26" },
|
|
192
|
+
{ from: "#b8bb26", to: "#ebdbb2" },
|
|
193
|
+
],
|
|
194
|
+
color: true,
|
|
195
|
+
accent: "#fabd2f",
|
|
196
|
+
accentShadow: "#79740e",
|
|
197
|
+
diff: { add: "#b8bb26", del: "#fb4934", addBg: "#1c2611", delBg: "#2a1416", hunk: "#8ec07c" },
|
|
198
|
+
userCard: { accent: "#fabd2f", border: "#79740e", shadow: "#3c3836", fill: "#282828" },
|
|
199
|
+
muted: "#a89984",
|
|
200
|
+
card: { fill: "#32302f" },
|
|
201
|
+
};
|
|
202
|
+
|
|
184
203
|
const MONO: EvolutionTheme = {
|
|
185
204
|
name: "mono",
|
|
186
205
|
description: "Colorless — plain text for NO_COLOR / minimal terminals.",
|
|
@@ -189,7 +208,7 @@ const MONO: EvolutionTheme = {
|
|
|
189
208
|
accent: "#ffffff",
|
|
190
209
|
};
|
|
191
210
|
|
|
192
|
-
export const THEMES: readonly EvolutionTheme[] = [COSMIC, MATRIX, SOLAR, RED_CLAW, BLUE_CRAB, AURORA, SYNTHWAVE, SAKURA, MONO];
|
|
211
|
+
export const THEMES: readonly EvolutionTheme[] = [COSMIC, MATRIX, SOLAR, RED_CLAW, BLUE_CRAB, AURORA, SYNTHWAVE, SAKURA, GRUVBOX_DARK, MONO];
|
|
193
212
|
|
|
194
213
|
/** Look up a theme by name (case-insensitive); unknown names fall back to cosmic. */
|
|
195
214
|
export function getTheme(name: string | undefined): EvolutionTheme {
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Terminal-bell notifications (gajae-code 0.7.8 parity).
|
|
3
|
+
*
|
|
4
|
+
* Emits an ASCII BEL (`\x07`) to the controlling terminal at notable
|
|
5
|
+
* interaction points so a backgrounded `jeo` session pings the user when it
|
|
6
|
+
* finishes a turn or stops to ask for input. Off by default; opt in through
|
|
7
|
+
* `config.notify.bell` (or force with `JEO_NOTIFY_BELL=1`).
|
|
8
|
+
*
|
|
9
|
+
* The decision logic (`shouldBell`) is pure and env-injectable so it is unit
|
|
10
|
+
* testable without a real terminal; `emitBell` is the only side effect.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
export type NotifyEvent = "complete" | "ask" | "approval";
|
|
14
|
+
|
|
15
|
+
export interface NotifyConfig {
|
|
16
|
+
/** Master toggle — no bell fires unless this is true (or the env override is set). */
|
|
17
|
+
bell?: boolean;
|
|
18
|
+
/** Bell when an agent turn finishes (default: on when the master toggle is on). */
|
|
19
|
+
onComplete?: boolean;
|
|
20
|
+
/** Bell when an ask / approval prompt awaits the user (default: on when master on). */
|
|
21
|
+
onAsk?: boolean;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
type EnvLike = Record<string, string | undefined>;
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Decide whether a terminal bell should fire for `event`.
|
|
28
|
+
*
|
|
29
|
+
* Precedence: `JEO_NOTIFY_BELL` env force-overrides the config master toggle
|
|
30
|
+
* (`1`/`true` forces on, `0`/`false` forces off). When the master toggle is on,
|
|
31
|
+
* each event is enabled unless its per-event flag is explicitly `false`.
|
|
32
|
+
*/
|
|
33
|
+
export function shouldBell(
|
|
34
|
+
event: NotifyEvent,
|
|
35
|
+
config: NotifyConfig | undefined,
|
|
36
|
+
env: EnvLike = {},
|
|
37
|
+
): boolean {
|
|
38
|
+
const raw = env.JEO_NOTIFY_BELL;
|
|
39
|
+
const envForceOn = raw === "1" || raw === "true";
|
|
40
|
+
const envForceOff = raw === "0" || raw === "false";
|
|
41
|
+
const masterOn = envForceOn || (!envForceOff && config?.bell === true);
|
|
42
|
+
if (!masterOn) return false;
|
|
43
|
+
switch (event) {
|
|
44
|
+
case "complete":
|
|
45
|
+
return config?.onComplete !== false;
|
|
46
|
+
case "ask":
|
|
47
|
+
case "approval":
|
|
48
|
+
return config?.onAsk !== false;
|
|
49
|
+
default:
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/** Write a single ASCII BEL to `write` (best-effort; a dead terminal never throws). */
|
|
55
|
+
export function emitBell(write: (s: string) => void): void {
|
|
56
|
+
try {
|
|
57
|
+
write("\x07");
|
|
58
|
+
} catch {
|
|
59
|
+
/* terminal gone — a courtesy bell must never crash a turn */
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/** Convenience: emit a bell for `event` iff `shouldBell` allows it. */
|
|
64
|
+
export function maybeBell(
|
|
65
|
+
event: NotifyEvent,
|
|
66
|
+
config: NotifyConfig | undefined,
|
|
67
|
+
write: (s: string) => void,
|
|
68
|
+
env: EnvLike = {},
|
|
69
|
+
): boolean {
|
|
70
|
+
if (!shouldBell(event, config, env)) return false;
|
|
71
|
+
emitBell(write);
|
|
72
|
+
return true;
|
|
73
|
+
}
|