[package]
name = "deepseek-loop"
version = "0.4.0"
edition = "2021"
license = "MIT"
description = "Claude-Code-shaped agent loop over the DeepSeek API: built-in tools, permission modes, cron scheduler with /loop semantics, streaming SdkMessage events"
repository = "https://github.com/v9ai/deepseek-loop"
readme = "README.md"
keywords = ["deepseek", "agent", "llm", "tools", "loop"]
categories = ["api-bindings", "command-line-utilities"]
exclude = ["scripts/", "Makefile", ".github/"]
[lib]
name = "deepseek"
[features]
default = ["reqwest-client", "scheduler"]
reqwest-client = ["dep:reqwest", "dep:anyhow", "dep:tokio"]
wasm = ["dep:worker", "dep:js-sys"]
cache = ["dep:dashmap", "dep:sha2", "dep:tokio"]
agent = ["dep:tokio", "dep:async-stream", "dep:futures", "dep:uuid"]
builtin-tools = ["agent", "dep:globset", "dep:walkdir", "dep:regex"]
scheduler = [
"agent",
"builtin-tools",
"dep:cron",
"dep:chrono",
"dep:dirs",
"dep:tempfile",
]
cli = [
"builtin-tools",
"scheduler",
"reqwest-client",
"dep:clap",
"dep:tracing-subscriber",
"dep:dotenvy",
]
[[bin]]
name = "deepseek-loop"
path = "src/bin/deepseek.rs"
required-features = ["cli"]
[dependencies]
serde = { workspace = true }
serde_json = { workspace = true }
thiserror = { workspace = true }
async-trait = { workspace = true }
tracing = { workspace = true }
reqwest = { workspace = true, optional = true }
worker = { version = "0.7", optional = true }
js-sys = { version = "0.3", optional = true }
dashmap = { version = "6", optional = true }
sha2 = { version = "0.10", optional = true }
tokio = { workspace = true, optional = true }
anyhow = { workspace = true, optional = true }
async-stream = { version = "0.3", optional = true }
futures = { workspace = true, optional = true }
uuid = { workspace = true, optional = true }
globset = { version = "0.4", optional = true }
walkdir = { workspace = true, optional = true }
regex = { workspace = true, optional = true }
cron = { version = "0.15", optional = true }
chrono = { version = "0.4", default-features = false, features = ["clock", "serde"], optional = true }
dirs = { version = "6", optional = true }
tempfile = { version = "3", optional = true }
clap = { workspace = true, optional = true }
tracing-subscriber = { workspace = true, optional = true }
dotenvy = { workspace = true, optional = true }