Skip to content

Commit ee056e1

Browse files
committed
feat: add agent runtime settings
1 parent 1ccf55a commit ee056e1

161 files changed

Lines changed: 27011 additions & 18371 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
# Changelog
22

3+
## 0.37.0
4+
5+
### Minor Changes
6+
7+
- Add agent runtime configuration, page window session controls, feedback administration, and modularize the Tauri backend app commands.
8+
39
## 0.36.0
410

511
### Minor Changes

README.md

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@
88
</h1>
99

1010
<p align="center">
11-
<strong>Desktop companion for AI coding tools</strong><br>
11+
<strong>I came, I saw, I conquered. / 我来,我见,我征服。</strong><br>
12+
<sub>Campaign command table for Claude Code, Codex, and terminal sessions</sub><br>
1213
<sub>macOS • Windows • Linux</sub>
1314
</p>
1415

@@ -35,6 +36,10 @@
3536

3637
## Release Highlights
3738

39+
### v0.37.0 — Runtime Settings, Page Windows, and Backend Modules
40+
41+
Lovcode now has dedicated agent CLI runtime configuration for Claude Code and Codex, including install/version status surfaces and reusable runtime settings under Configuration. Page windows and session navigation gain duplicate-window and resume helpers, plus richer project path menu actions across the workbench. Feedback operations now include an admin dialog, while the Tauri backend has been split into focused app command modules for maintainability.
42+
3843
### v0.36.0 — Localized Workbench, Session Handoff, and Lab
3944

4045
Lovcode now localizes the main workspace, settings, marketplace, environment, update, and feedback surfaces in English and Chinese, with a language preference in app settings. The agent workbench gains richer conversation management: pinned and archived conversation state, chat/PTY display mode switching, session information dialogs, related-file and trace-context copy actions, and cross-agent handoff prompts for moving context between Claude Code and Codex. This release also adds the Lab and Wish Room entry points, improves Lovstudio-authenticated feedback tickets with tags and account tracking, and makes release history refresh more resilient through GitHub API caching and Atom fallback.
@@ -57,6 +62,7 @@ Local paths in prompts and chat messages now open inside Lovcode with a resizabl
5762

5863
| Version | Highlights |
5964
|---------|------------|
65+
| **0.37.0** | Agent CLI runtime configuration for Claude Code and Codex with install/version status cards; duplicate-window and resume helpers for page/session workflows; richer project path menu actions; feedback administration dialog; Tauri backend split into focused app command modules |
6066
| **0.36.0** | English/Chinese localization reaches the workspace, settings, marketplace, environment, update, and feedback flows; the workbench adds pinned/archived conversations, chat/PTY display modes, session info dialogs, related-file and trace-context copying, and Claude Code/Codex handoff prompts; new Lab and Wish Room routes provide an experimental planning surface; Lovstudio feedback now uses authenticated ticket submission with tags; release history refresh uses GitHub API cache plus Atom fallback |
6167
| **0.35.0** | General chat sessions can start without a selected project; the agent composer now offers recent project paths and a compact CLI picker; the status bar opens a Lovcode version manager with release history, manual update checks, auto-update controls, and release links; MaaS provider activation can target Claude Code and Codex separately, writing Codex provider settings into `config.toml` |
6268
| **0.34.0** | Agent Workbench launches Claude Code, Codex, and terminal sessions with persistent state; project/session environment scripts can be saved and run from Lovcode; Claude and Codex hooks track activity; Codex rollout sessions are indexed with filtering, usage extraction, resume support, and live updates; file previews now support tabs, ZIP browsing, unsupported-format fallbacks, and richer Markdown/image rendering |
@@ -88,6 +94,7 @@ Local paths in prompts and chat messages now open inside Lovcode with a resizabl
8894
- **Lab & Wish Room** — Track wishes, link them to projects or sessions, and keep experimental planning flows under the Lab surface
8995
- **Localized Interface** — Switch between system language, English, and Chinese across the main workspace, settings, marketplace, feedback, updates, and runtime environment screens
9096
- **Agent Workbench** — Launch Claude Code, Codex, or a terminal in a selected project or general chat workspace; track pinned/archived sessions, unread/review states, runtime activity, and chat/PTY display mode
97+
- **Agent Runtime Settings** — Configure Claude Code and Codex CLI runtimes, inspect install/version status, and manage runtime preferences from Configuration
9198
- **Session Handoff Tools** — Copy session info, related file paths, trace context, and cross-agent handoff prompts for moving work between Claude Code and Codex
9299
- **Environment Scripts** — Save project/session setup, cleanup, and custom runtime actions, then run them in an embedded terminal dock
93100
- **Chat History Viewer** — Browse and search Claude and Codex conversation history across all projects with scoped full-text, session ID, and metadata search modes
@@ -105,7 +112,7 @@ Local paths in prompts and chat messages now open inside Lovcode with a resizabl
105112
- **Commands / MCP / Skills / Hooks / Sub-Agents / Output Styles** — Full configuration surface for the Claude Code ecosystem
106113
- **Skills Manager** — Sort, rank, filter, preview, and inspect installed skills with vendor/source metadata, install timestamps, and token estimates
107114
- **Marketplace** — Browse and install community templates with shared Markdown table rendering and smart local-path links
108-
- **Lovstudio Feedback Tickets** — Submit authenticated feedback tickets with tags, copy ticket IDs, and open Lovstudio account tracking from inside the app
115+
- **Lovstudio Feedback Tickets** — Submit authenticated feedback tickets with tags, copy ticket IDs, open Lovstudio account tracking, and review tickets from an admin dialog
109116
- **Customizable Statusbar** — Personalize your statusbar display with scripts and open Lovcode version management from the app version indicator
110117

111118
## oh-my-lovcode
@@ -134,8 +141,11 @@ cd lovcode
134141
# Install dependencies
135142
pnpm install
136143

137-
# Run development
138-
pnpm tauri dev
144+
# Run full Tauri development with Rust watcher
145+
pnpm dev:app
146+
147+
# Frontend-focused development: Vite HMR stays on, Rust changes do not restart the app
148+
pnpm dev:app:no-watch
139149

140150
# Build for distribution
141151
pnpm tauri build

index.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<meta charset="UTF-8" />
55
<link rel="icon" type="image/svg+xml" href="/lovcode.svg" />
66
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
7-
<title>Lovcode - Vibe Coding Assistant</title>
7+
<title>Lovcode</title>
88
<style>
99
/* Splash screen — paints on the very first frame, before React mounts.
1010
Removed by main.tsx once <RouterProvider> renders. */
@@ -77,7 +77,7 @@
7777
// app shell and the beige background would paint a giant block.
7878
(function () {
7979
var hash = location.hash || "";
80-
if (hash.indexOf("/search-overlay") !== -1 || hash.indexOf("/prompt-detail") !== -1) {
80+
if (hash.indexOf("/search-overlay") !== -1 || hash.indexOf("/prompt-detail") !== -1 || hash.indexOf("/landing") !== -1) {
8181
var s = document.getElementById("splash");
8282
if (s) s.remove();
8383
}

package.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
{
22
"name": "lovcode",
33
"private": true,
4-
"version": "0.36.0",
4+
"version": "0.37.0",
55
"type": "module",
66
"packageManager": "pnpm@10.18.1",
77
"scripts": {
88
"dev": "vite",
9+
"dev:web": "vite",
10+
"dev:app": "tauri dev",
11+
"dev:app:no-watch": "tauri dev --no-watch",
912
"build": "tsc && vite build",
1013
"preview": "vite preview",
1114
"tauri": "tauri",

src-tauri/Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src-tauri/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "lovcode"
3-
version = "0.36.0"
3+
version = "0.37.0"
44
description = "A Tauri App"
55
authors = ["you"]
66
edition = "2021"

src-tauri/capabilities/default.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"$schema": "../gen/schemas/desktop-schema.json",
33
"identifier": "default",
44
"description": "Capability for all windows",
5-
"windows": ["main", "search", "prompt-detail-*"],
5+
"windows": ["main", "search", "prompt-detail-*", "page-*"],
66
"permissions": [
77
"core:default",
88
"core:event:default",

src-tauri/capabilities/desktop.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@
88
"windows": [
99
"main",
1010
"search",
11-
"prompt-detail-*"
11+
"prompt-detail-*",
12+
"page-*"
1213
],
1314
"permissions": []
1415
}

src-tauri/src/app/activity.rs

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
use super::*;
2+
3+
// ============================================================================
4+
// Daily Message Stats for Activity Heatmap
5+
// ============================================================================
6+
7+
#[derive(Debug, Serialize, Deserialize)]
8+
pub(crate) struct ActivityStats {
9+
/// Map of date (YYYY-MM-DD) to count
10+
pub daily: HashMap<String, usize>,
11+
/// Map of hour (0-23) to count
12+
pub hourly: HashMap<u32, usize>,
13+
/// Map of "date:hour" (YYYY-MM-DD:HH) to count for detailed heatmap
14+
pub detailed: HashMap<String, usize>,
15+
}
16+
17+
#[tauri::command]
18+
pub(crate) async fn get_activity_stats() -> Result<ActivityStats, String> {
19+
tauri::async_runtime::spawn_blocking(|| {
20+
let history_path = get_claude_dir().join("history.jsonl");
21+
let mut daily: HashMap<String, usize> = HashMap::new();
22+
let mut hourly: HashMap<u32, usize> = HashMap::new();
23+
let mut detailed: HashMap<String, usize> = HashMap::new();
24+
25+
if !history_path.exists() {
26+
return Ok(ActivityStats {
27+
daily,
28+
hourly,
29+
detailed,
30+
});
31+
}
32+
33+
if let Ok(content) = fs::read_to_string(&history_path) {
34+
for line in content.lines() {
35+
if let Ok(parsed) = serde_json::from_str::<serde_json::Value>(line) {
36+
if let Some(ts_ms) = parsed.get("timestamp").and_then(|v| v.as_u64()) {
37+
let ts_secs = ts_ms / 1000;
38+
if let Some(dt) = chrono::DateTime::from_timestamp(ts_secs as i64, 0) {
39+
// Daily count
40+
let date = dt.format("%Y-%m-%d").to_string();
41+
*daily.entry(date.clone()).or_insert(0) += 1;
42+
43+
// Hourly count (0-23)
44+
let hour = dt.format("%H").to_string().parse::<u32>().unwrap_or(0);
45+
*hourly.entry(hour).or_insert(0) += 1;
46+
47+
// Detailed: date + hour
48+
let date_hour = format!("{}:{:02}", date, hour);
49+
*detailed.entry(date_hour).or_insert(0) += 1;
50+
}
51+
}
52+
}
53+
}
54+
}
55+
56+
Ok(ActivityStats {
57+
daily,
58+
hourly,
59+
detailed,
60+
})
61+
})
62+
.await
63+
.map_err(|e| e.to_string())?
64+
}

0 commit comments

Comments
 (0)