Merge pull request #19 from Hmbown/codex/release-0.4.7
release: deepseek-tui 0.4.7 + Devin .env empty-key fix
This commit is contained in:
+1
-1
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
# DeepSeek API (default provider)
|
# DeepSeek API (default provider)
|
||||||
# Get an API key from DeepSeek, then keep it local in `.env`.
|
# Get an API key from DeepSeek, then keep it local in `.env`.
|
||||||
DEEPSEEK_API_KEY=
|
# DEEPSEEK_API_KEY=
|
||||||
|
|
||||||
# Global endpoint:
|
# Global endpoint:
|
||||||
# DEEPSEEK_BASE_URL=https://api.deepseek.com
|
# DEEPSEEK_BASE_URL=https://api.deepseek.com
|
||||||
|
|||||||
Generated
+13
-13
@@ -806,7 +806,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "deepseek-agent"
|
name = "deepseek-agent"
|
||||||
version = "0.4.6"
|
version = "0.4.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"deepseek-config",
|
"deepseek-config",
|
||||||
"serde",
|
"serde",
|
||||||
@@ -814,7 +814,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "deepseek-app-server"
|
name = "deepseek-app-server"
|
||||||
version = "0.4.6"
|
version = "0.4.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"axum",
|
"axum",
|
||||||
@@ -837,7 +837,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "deepseek-config"
|
name = "deepseek-config"
|
||||||
version = "0.4.6"
|
version = "0.4.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"dirs",
|
"dirs",
|
||||||
@@ -848,7 +848,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "deepseek-core"
|
name = "deepseek-core"
|
||||||
version = "0.4.6"
|
version = "0.4.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"chrono",
|
"chrono",
|
||||||
@@ -867,7 +867,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "deepseek-execpolicy"
|
name = "deepseek-execpolicy"
|
||||||
version = "0.4.6"
|
version = "0.4.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"deepseek-protocol",
|
"deepseek-protocol",
|
||||||
@@ -876,7 +876,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "deepseek-hooks"
|
name = "deepseek-hooks"
|
||||||
version = "0.4.6"
|
version = "0.4.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"async-trait",
|
"async-trait",
|
||||||
@@ -890,7 +890,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "deepseek-mcp"
|
name = "deepseek-mcp"
|
||||||
version = "0.4.6"
|
version = "0.4.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"deepseek-protocol",
|
"deepseek-protocol",
|
||||||
@@ -900,7 +900,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "deepseek-protocol"
|
name = "deepseek-protocol"
|
||||||
version = "0.4.6"
|
version = "0.4.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"serde",
|
"serde",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
@@ -908,7 +908,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "deepseek-state"
|
name = "deepseek-state"
|
||||||
version = "0.4.6"
|
version = "0.4.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"chrono",
|
"chrono",
|
||||||
@@ -920,7 +920,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "deepseek-tools"
|
name = "deepseek-tools"
|
||||||
version = "0.4.6"
|
version = "0.4.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"async-trait",
|
"async-trait",
|
||||||
@@ -933,7 +933,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "deepseek-tui"
|
name = "deepseek-tui"
|
||||||
version = "0.4.6"
|
version = "0.4.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"arboard",
|
"arboard",
|
||||||
@@ -987,7 +987,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "deepseek-tui-cli"
|
name = "deepseek-tui-cli"
|
||||||
version = "0.4.6"
|
version = "0.4.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"chrono",
|
"chrono",
|
||||||
@@ -1005,7 +1005,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "deepseek-tui-core"
|
name = "deepseek-tui-core"
|
||||||
version = "0.4.6"
|
version = "0.4.7"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "deranged"
|
name = "deranged"
|
||||||
|
|||||||
+1
-1
@@ -18,7 +18,7 @@ default-members = ["crates/cli", "crates/app-server", "crates/tui"]
|
|||||||
resolver = "2"
|
resolver = "2"
|
||||||
|
|
||||||
[workspace.package]
|
[workspace.package]
|
||||||
version = "0.4.6"
|
version = "0.4.7"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
license = "MIT"
|
license = "MIT"
|
||||||
repository = "https://github.com/Hmbown/DeepSeek-TUI"
|
repository = "https://github.com/Hmbown/DeepSeek-TUI"
|
||||||
|
|||||||
@@ -728,7 +728,9 @@ fn apply_env_overrides(config: &mut Config) {
|
|||||||
if let Ok(value) = std::env::var("DEEPSEEK_PROVIDER") {
|
if let Ok(value) = std::env::var("DEEPSEEK_PROVIDER") {
|
||||||
config.provider = Some(value);
|
config.provider = Some(value);
|
||||||
}
|
}
|
||||||
if let Ok(value) = std::env::var("DEEPSEEK_API_KEY") {
|
if let Ok(value) = std::env::var("DEEPSEEK_API_KEY")
|
||||||
|
&& !value.trim().is_empty()
|
||||||
|
{
|
||||||
config.api_key = Some(value);
|
config.api_key = Some(value);
|
||||||
}
|
}
|
||||||
if let Ok(value) = std::env::var("DEEPSEEK_BASE_URL") {
|
if let Ok(value) = std::env::var("DEEPSEEK_BASE_URL") {
|
||||||
@@ -1554,6 +1556,39 @@ mod tests {
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn apply_env_overrides_ignores_empty_api_key() -> Result<()> {
|
||||||
|
let _lock = lock_test_env();
|
||||||
|
let nanos = SystemTime::now()
|
||||||
|
.duration_since(UNIX_EPOCH)
|
||||||
|
.unwrap()
|
||||||
|
.as_nanos();
|
||||||
|
let temp_root = env::temp_dir().join(format!(
|
||||||
|
"deepseek-tui-empty-key-{}-{}",
|
||||||
|
std::process::id(),
|
||||||
|
nanos
|
||||||
|
));
|
||||||
|
fs::create_dir_all(&temp_root)?;
|
||||||
|
let _guard = EnvGuard::new(&temp_root);
|
||||||
|
|
||||||
|
// Simulate a fresh user who copied .env.example to .env without
|
||||||
|
// filling in DEEPSEEK_API_KEY: dotenv loads it as the empty string.
|
||||||
|
// Safety: test-only environment mutation guarded by a global mutex.
|
||||||
|
unsafe {
|
||||||
|
env::set_var("DEEPSEEK_API_KEY", "");
|
||||||
|
}
|
||||||
|
|
||||||
|
let mut config = Config {
|
||||||
|
api_key: Some("from-config-file".to_string()),
|
||||||
|
..Default::default()
|
||||||
|
};
|
||||||
|
apply_env_overrides(&mut config);
|
||||||
|
|
||||||
|
assert_eq!(config.api_key.as_deref(), Some("from-config-file"));
|
||||||
|
config.validate()?;
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn normalize_model_name_handles_aliases_and_future_ids() {
|
fn normalize_model_name_handles_aliases_and_future_ids() {
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "deepseek-tui",
|
"name": "deepseek-tui",
|
||||||
"version": "0.4.6",
|
"version": "0.4.7",
|
||||||
"deepseekBinaryVersion": "0.4.6",
|
"deepseekBinaryVersion": "0.4.7",
|
||||||
"description": "Install and run deepseek and deepseek-tui binaries from GitHub release artifacts.",
|
"description": "Install and run deepseek and deepseek-tui binaries from GitHub release artifacts.",
|
||||||
"author": "Hmbown",
|
"author": "Hmbown",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
|||||||
Reference in New Issue
Block a user