feat: CLI v2.1.81–v2.1.104 support (#261)
Security Scan and Upload / Security & DefectDojo Upload (push) Successful in 1m33s
CI / Lint & Test (push) Successful in 20m29s
CI / Build Linux (push) Successful in 24m9s
CI / Build Windows (cross-compile) (push) Successful in 40m28s

## Summary

Implements support for all Claude Code CLI changes from v2.1.81 through v2.1.104, closing issues #253–#260.

### Changes

- **#253** — New `CwdChanged` hook event: parse and emit `claude:cwd-changed` Tauri event; new `CwdChangedEvent` type
- **#254** — New `FileChanged` hook event: parse and emit `claude:file-changed` Tauri event; new `FileChangedEvent` type
- **#255** — Idle-return prompt: TUI-only feature, not present in `--output-format stream-json` mode — closed as not applicable
- **#256** — New `TaskCreated` and `PermissionDenied` hook events: parse and emit `claude:task-created` / `claude:permission-denied` Tauri events; `PermissionDenied` also triggers `CharacterState::Permission` character animation
- **#257** — Defer permission request: no PreToolUse hook response mechanism in Hikari Desktop — closed as not applicable
- **#258** — `Monitor` tool: added `"Monitor"` to `SEARCH_TOOLS` constant so it maps to `CharacterState::Searching`
- **#259** — `disableSkillShellExecution` setting: wired through `ClaudeStartOptions`, `HikariConfig`, `--settings` JSON, TypeScript interface, and exposed in the Config Sidebar UI
- **#260** — Updated `SUPPORTED_CLI_VERSION` constant from `"2.1.80"` to `"2.1.104"`

All changes pass `check-all.sh` (ESLint → Prettier → svelte-check → Vitest → Clippy → cargo test with llvm-cov).

 This PR was created with help from Hikari~ 🌸

Reviewed-on: #261
Co-authored-by: Hikari <hikari@nhcarrigan.com>
Co-committed-by: Hikari <hikari@nhcarrigan.com>
This commit was merged in pull request #261.
This commit is contained in:
2026-04-13 12:05:57 -07:00
committed by Naomi Carrigan
parent 542d2eb315
commit 5663b1c09a
8 changed files with 566 additions and 8 deletions
+1 -1
View File
@@ -2,7 +2,7 @@
import { invoke } from "@tauri-apps/api/core";
import { onMount } from "svelte";
const SUPPORTED_CLI_VERSION = "2.1.80";
const SUPPORTED_CLI_VERSION = "2.1.104";
let installedVersion = $state("Loading...");
let latestNpmVersion = $state<string | null>(null);
+17
View File
@@ -63,6 +63,7 @@
enable_claudeai_mcp_servers: true,
auto_memory_directory: null,
model_overrides: null,
disable_skill_shell_execution: false,
max_output_tokens: null,
trusted_workspaces: [],
background_image_path: null,
@@ -585,6 +586,22 @@
</p>
</div>
<!-- Disable Skill Shell Execution -->
<div class="mb-4">
<label class="flex items-center gap-3 cursor-pointer">
<input
type="checkbox"
bind:checked={config.disable_skill_shell_execution}
class="w-4 h-4 rounded border-[var(--border-color)] bg-[var(--bg-primary)] text-[var(--accent-primary)] focus:ring-[var(--accent-primary)]"
/>
<span class="text-sm text-[var(--text-primary)]">Disable skill shell execution</span>
</label>
<p class="text-xs text-[var(--text-tertiary)] mt-1 ml-7">
Passes <code class="font-mono">disableSkillShellExecution: true</code> to prevent skill scripts
from executing shell commands (requires Claude Code v2.1.91+)
</p>
</div>
<!-- Include Git Instructions -->
<div class="mb-4">
<label class="flex items-center gap-3 cursor-pointer">
+1
View File
@@ -93,6 +93,7 @@
enable_claudeai_mcp_servers: true,
auto_memory_directory: null,
model_overrides: null,
disable_skill_shell_execution: false,
});
let streamerModeActive = $state(false);
+3
View File
@@ -225,6 +225,7 @@ describe("config store", () => {
enable_claudeai_mcp_servers: true,
auto_memory_directory: null,
model_overrides: null,
disable_skill_shell_execution: false,
};
expect(config.model).toBe("claude-sonnet-4");
@@ -289,6 +290,7 @@ describe("config store", () => {
enable_claudeai_mcp_servers: true,
auto_memory_directory: null,
model_overrides: null,
disable_skill_shell_execution: false,
};
expect(config.model).toBeNull();
@@ -908,6 +910,7 @@ describe("config store", () => {
enable_claudeai_mcp_servers: true,
auto_memory_directory: null,
model_overrides: null,
disable_skill_shell_execution: false,
};
const mockInvokeImpl = vi.mocked(invoke);
+3
View File
@@ -91,6 +91,8 @@ export interface HikariConfig {
auto_memory_directory: string | null;
// Model overrides for provider-specific model IDs (AWS Bedrock, Google Vertex, etc.)
model_overrides: Record<string, string> | null;
// Prevents skill scripts from executing shell commands (Claude Code v2.1.91+)
disable_skill_shell_execution: boolean;
}
const defaultConfig: HikariConfig = {
@@ -149,6 +151,7 @@ const defaultConfig: HikariConfig = {
enable_claudeai_mcp_servers: true,
auto_memory_directory: null,
model_overrides: null,
disable_skill_shell_execution: false,
};
function createConfigStore() {