a789495a98
FreeBSD Smoke / FreeBSD Smoke (x86_64) (push) Has been cancelled
CI / Quality Guardrails (push) Has been cancelled
CI / Build & Test (macos-latest) (push) Has been cancelled
CI / Build & Test (ubuntu-latest) (push) Has been cancelled
CI / Build & Test (windows-latest) (push) Has been cancelled
CI / Format (push) Has been cancelled
CI / PowerShell Syntax (push) Has been cancelled
CI / Windows Cross-Target Check (Linux) (push) Has been cancelled
492 lines
15 KiB
TOML
492 lines
15 KiB
TOML
[package]
|
|
name = "jcode"
|
|
version = "0.46.0"
|
|
description = "Possibly the greatest coding agent ever built — blazing-fast TUI, multi-model, swarm coordination, 30+ tools"
|
|
edition = "2024"
|
|
autobins = false
|
|
|
|
[workspace]
|
|
members = [
|
|
".",
|
|
"crates/jcode-agent-runtime",
|
|
"crates/jcode-app-core",
|
|
"crates/jcode-base",
|
|
"crates/jcode-tui",
|
|
"crates/jcode-build-meta",
|
|
"crates/jcode-ambient-types",
|
|
"crates/jcode-auth-types",
|
|
"crates/jcode-embedding",
|
|
"crates/jcode-gateway-types",
|
|
"crates/jcode-import-core",
|
|
"crates/jcode-pdf",
|
|
"crates/jcode-logging",
|
|
"crates/jcode-background-types",
|
|
"crates/jcode-batch-types",
|
|
"crates/jcode-build-support",
|
|
"crates/jcode-compaction-core",
|
|
"crates/jcode-config-types",
|
|
"crates/jcode-core",
|
|
"crates/jcode-fuzzy",
|
|
"crates/jcode-memory-types",
|
|
"crates/jcode-message-types",
|
|
"crates/jcode-overnight-core",
|
|
"crates/jcode-plan",
|
|
"crates/jcode-productivity-core",
|
|
"crates/jcode-swarm-core",
|
|
"crates/jcode-protocol",
|
|
"crates/jcode-selfdev-types",
|
|
"crates/jcode-session-types",
|
|
"crates/jcode-setup-hints",
|
|
"crates/jcode-storage",
|
|
"crates/jcode-side-panel-types",
|
|
"crates/jcode-azure-auth",
|
|
"crates/jcode-notify-email",
|
|
"crates/jcode-provider-metadata",
|
|
"crates/jcode-provider-env",
|
|
"crates/jcode-provider-core",
|
|
"crates/jcode-provider-bedrock",
|
|
"crates/jcode-provider-anthropic",
|
|
"crates/jcode-provider-antigravity",
|
|
"crates/jcode-provider-copilot",
|
|
"crates/jcode-provider-openrouter",
|
|
"crates/jcode-provider-openai",
|
|
"crates/jcode-provider-gemini",
|
|
"crates/jcode-provider-gemini-runtime",
|
|
"crates/jcode-provider-cursor-runtime",
|
|
"crates/jcode-provider-antigravity-runtime",
|
|
"crates/jcode-provider-copilot-runtime",
|
|
"crates/jcode-provider-claude-cli-runtime",
|
|
"crates/jcode-provider-openrouter-runtime",
|
|
"crates/jcode-provider-anthropic-runtime",
|
|
"crates/jcode-provider-openai-runtime",
|
|
"crates/jcode-provider-doctor",
|
|
"crates/jcode-tui-markdown",
|
|
"crates/jcode-tui-messages",
|
|
"crates/jcode-usage-types",
|
|
"crates/jcode-tui-core",
|
|
"crates/jcode-tui-mermaid",
|
|
"crates/jcode-task-types",
|
|
"crates/jcode-tool-core",
|
|
"crates/jcode-tool-types",
|
|
"crates/jcode-tui-account-picker",
|
|
"crates/jcode-tui-anim",
|
|
"crates/jcode-tui-render",
|
|
"crates/jcode-tui-visual-debug",
|
|
"crates/jcode-tui-session-picker",
|
|
"crates/jcode-tui-style",
|
|
"crates/jcode-tui-permissions",
|
|
"crates/jcode-tui-tool-display",
|
|
"crates/jcode-tui-usage-overlay",
|
|
"crates/jcode-update-core",
|
|
"crates/jcode-terminal-launch",
|
|
"crates/jcode-terminal-image",
|
|
"crates/jcode-telemetry-core",
|
|
"crates/jcode-tui-workspace",
|
|
"crates/jcode-desktop",
|
|
"crates/jcode-render-core",
|
|
]
|
|
|
|
[lib]
|
|
name = "jcode"
|
|
path = "src/lib.rs"
|
|
|
|
[[bin]]
|
|
name = "jcode"
|
|
path = "src/main.rs"
|
|
|
|
[[bin]]
|
|
name = "test_api"
|
|
path = "src/bin/test_api.rs"
|
|
|
|
[[bin]]
|
|
name = "jcode-harness"
|
|
path = "src/bin/harness.rs"
|
|
|
|
[[bin]]
|
|
name = "session_memory_bench"
|
|
path = "src/bin/session_memory_bench.rs"
|
|
required-features = ["dev-bins"]
|
|
|
|
[[bin]]
|
|
name = "memory_recall_bench"
|
|
path = "src/bin/memory_recall_bench.rs"
|
|
required-features = ["dev-bins"]
|
|
|
|
[[bin]]
|
|
name = "mermaid_side_panel_probe"
|
|
path = "src/bin/mermaid_side_panel_probe.rs"
|
|
required-features = ["dev-bins"]
|
|
|
|
[[bin]]
|
|
name = "tui_bench"
|
|
path = "src/bin/tui_bench.rs"
|
|
required-features = ["dev-bins"]
|
|
|
|
[dependencies]
|
|
# Memory allocator (reduces fragmentation for long-running server)
|
|
tikv-jemallocator = { version = "0.6", features = ["unprefixed_malloc_on_supported_platforms"], optional = true }
|
|
|
|
# Async runtime
|
|
tokio = { version = "1", features = ["fs", "io-std", "io-util", "macros", "net", "process", "rt-multi-thread", "signal", "sync", "time"] }
|
|
futures = "0.3"
|
|
async-trait = "0.1"
|
|
|
|
# HTTP client
|
|
reqwest = { version = "0.12", default-features = false, features = ["json", "charset", "http2", "system-proxy", "rustls-tls", "rustls-tls-native-roots"] }
|
|
rustls = { version = "0.23", default-features = false, features = ["aws_lc_rs"] }
|
|
tokio-tungstenite = { version = "0.24", default-features = false, features = ["connect", "rustls-tls-native-roots"] }
|
|
|
|
# Serialization
|
|
serde = { version = "1", features = ["derive"] }
|
|
serde_json = { version = "1", features = ["raw_value"] }
|
|
toml = "0.8"
|
|
|
|
# CLI
|
|
clap = { version = "4", features = ["derive"] }
|
|
|
|
# File operations
|
|
|
|
# Utilities
|
|
dirs = "5" # home directory
|
|
anyhow = "1"
|
|
libc = "0.2" # Unix system calls (flock)
|
|
chrono = { version = "0.4", features = ["serde"] }
|
|
|
|
# Embeddings (local inference) - behind feature flag (163 crates, slow to compile)
|
|
|
|
# OAuth
|
|
sha2 = "0.10"
|
|
hex = "0.4"
|
|
open = "5" # Open URLs in browser
|
|
jcode-tui-session-picker = { path = "crates/jcode-tui-session-picker", features = ["serde"] }
|
|
|
|
# Streaming
|
|
tokio-stream = "0.1"
|
|
|
|
# TUI
|
|
ratatui = "0.30"
|
|
crossterm = { version = "0.29", features = ["event-stream"] }
|
|
|
|
# Markdown & syntax highlighting
|
|
|
|
# PDF parsing (behind feature flag)
|
|
jcode-build-meta = { path = "crates/jcode-build-meta" }
|
|
# Presentation layer: the terminal UI (`tui`) + offline replay (`video_export`),
|
|
# compiled as a separate rustc unit. It re-exports the application core
|
|
# (`jcode-app-core`, which re-exports `jcode-base`), so the root crate (cli +
|
|
# bin) re-exports everything via `pub use jcode_tui::*`. default-features=false
|
|
# so the root feature set fully controls the downstream features (see
|
|
# [features]).
|
|
jcode-tui = { path = "crates/jcode-tui", default-features = false }
|
|
# `jcode provider-doctor` / provider diagnostics; sits downstream of jcode-base
|
|
# so doctor edits do not rebuild the base -> app-core -> tui spine.
|
|
jcode-provider-doctor = { path = "crates/jcode-provider-doctor" }
|
|
# Gemini provider runtime; sits downstream of jcode-base so gemini edits do
|
|
# not rebuild the base -> app-core -> tui spine. Registered with the external
|
|
# provider registry at startup (src/cli/startup.rs).
|
|
jcode-provider-gemini-runtime = { path = "crates/jcode-provider-gemini-runtime" }
|
|
jcode-provider-cursor-runtime = { path = "crates/jcode-provider-cursor-runtime" }
|
|
jcode-provider-antigravity-runtime = { path = "crates/jcode-provider-antigravity-runtime" }
|
|
jcode-provider-copilot-runtime = { path = "crates/jcode-provider-copilot-runtime" }
|
|
jcode-provider-claude-cli-runtime = { path = "crates/jcode-provider-claude-cli-runtime" }
|
|
jcode-provider-openrouter-runtime = { path = "crates/jcode-provider-openrouter-runtime" }
|
|
jcode-provider-anthropic-runtime = { path = "crates/jcode-provider-anthropic-runtime" }
|
|
jcode-provider-openai-runtime = { path = "crates/jcode-provider-openai-runtime" }
|
|
jcode-selfdev-types = { path = "crates/jcode-selfdev-types" }
|
|
|
|
# Archive extraction (for auto-update)
|
|
tempfile = "3"
|
|
|
|
[features]
|
|
# Include local ONNX/tokenizer embeddings in default builds so memory recall,
|
|
# semantic retrieval, and embedding-backed features work out of the box.
|
|
# Use `JCODE_DEV_FEATURE_PROFILE=minimal` for compile-speed probes that need
|
|
# to skip optional default feature stacks.
|
|
default = ["pdf", "embeddings", "bedrock"]
|
|
dev-bins = ["jcode-tui/dev-bins"]
|
|
jemalloc = [
|
|
"dep:tikv-jemallocator",
|
|
"tikv-jemallocator/stats",
|
|
"jcode-tui/jemalloc",
|
|
]
|
|
jemalloc-prof = [
|
|
"jemalloc",
|
|
"tikv-jemallocator/profiling",
|
|
"jcode-tui/jemalloc-prof",
|
|
]
|
|
# Local embeddings and PDF extraction live in jcode-base / jcode-app-core;
|
|
# these features just forward down the stack.
|
|
embeddings = ["jcode-tui/embeddings"]
|
|
# Live AWS Bedrock support (the AWS SDK stack) lives in jcode-provider-bedrock;
|
|
# forwards down through jcode-tui -> jcode-app-core -> jcode-base.
|
|
bedrock = ["jcode-tui/bedrock"]
|
|
mmdr-size-api = ["jcode-tui/mmdr-size-api"]
|
|
pdf = ["jcode-tui/pdf"]
|
|
|
|
[target.'cfg(windows)'.dependencies]
|
|
windows-sys = { version = "0.59", features = ["Win32_Foundation", "Win32_System_Threading"] }
|
|
|
|
[target.'cfg(target_os = "macos")'.dependencies]
|
|
global-hotkey = "0.7"
|
|
objc2 = "0.6"
|
|
block2 = "0.6"
|
|
objc2-foundation = { version = "0.3", features = [
|
|
"NSString",
|
|
"NSThread",
|
|
"NSRunLoop",
|
|
"NSDate",
|
|
"NSTimer",
|
|
"NSUserDefaults",
|
|
"NSValue",
|
|
"NSAttributedString",
|
|
"NSDictionary",
|
|
"block2",
|
|
] }
|
|
objc2-app-kit = { version = "0.3", features = [
|
|
"NSAppearance",
|
|
"NSApplication",
|
|
"NSResponder",
|
|
"NSStatusBar",
|
|
"NSStatusItem",
|
|
"NSStatusBarButton",
|
|
"NSButton",
|
|
"NSCell",
|
|
"NSColor",
|
|
"NSControl",
|
|
"NSFont",
|
|
"NSFontDescriptor",
|
|
"NSImage",
|
|
"NSAttributedString",
|
|
"NSMenu",
|
|
"NSMenuItem",
|
|
"NSRunningApplication",
|
|
] }
|
|
|
|
[profile.release]
|
|
opt-level = 1
|
|
debug = 0
|
|
codegen-units = 256
|
|
incremental = true
|
|
|
|
[profile.selfdev]
|
|
inherits = "release"
|
|
opt-level = 0
|
|
|
|
# Full LTO release for stable/distribution builds
|
|
[profile.release-lto]
|
|
inherits = "release"
|
|
lto = "thin"
|
|
codegen-units = 16
|
|
incremental = false
|
|
|
|
[profile.dev]
|
|
debug = 0
|
|
incremental = true
|
|
|
|
[profile.dev.package."*"]
|
|
opt-level = 0
|
|
|
|
# Keep the idle-animation math kernels fully optimized even in debug-style
|
|
# builds. This crate is pure, dependency-free numeric code (the trig-heavy 3D
|
|
# samplers that otherwise dominate idle CPU). Pinning it to opt-level = 3 here
|
|
# means the optimized object is compiled once and reused across iterative
|
|
# dev/selfdev rebuilds, since it only recompiles when the animation code itself
|
|
# changes. The "*" glob above sets the default for dependencies; these explicit
|
|
# package entries take precedence for this one crate in each profile.
|
|
[profile.dev.package."jcode-tui-anim"]
|
|
opt-level = 3
|
|
|
|
[profile.selfdev.package."jcode-tui-anim"]
|
|
opt-level = 3
|
|
|
|
[profile.test.package."jcode-tui-anim"]
|
|
opt-level = 3
|
|
|
|
# Keep the text-shaping stack optimized even in dev/selfdev/test builds.
|
|
#
|
|
# cosmic-text + rustybuzz + ttf-parser + swash + yazi do all of the desktop
|
|
# transcript glyph shaping. At opt-level = 0 they are 15-40x slower, which made
|
|
# scrolling real (emoji/markdown-heavy) transcripts janky in dev/selfdev builds
|
|
# even though the production release build was smooth. These are stable
|
|
# third-party crates that almost never recompile, so pinning them to opt-level =
|
|
# 3 costs a one-time compile and is then reused across every iterative jcode
|
|
# rebuild (same rationale as jcode-tui-anim above). It does NOT slow down
|
|
# recompiles of jcode's own crates.
|
|
[profile.dev.package.cosmic-text]
|
|
opt-level = 3
|
|
[profile.selfdev.package.cosmic-text]
|
|
opt-level = 3
|
|
[profile.test.package.cosmic-text]
|
|
opt-level = 3
|
|
|
|
[profile.dev.package.rustybuzz]
|
|
opt-level = 3
|
|
[profile.selfdev.package.rustybuzz]
|
|
opt-level = 3
|
|
[profile.test.package.rustybuzz]
|
|
opt-level = 3
|
|
|
|
[profile.dev.package.ttf-parser]
|
|
opt-level = 3
|
|
[profile.selfdev.package.ttf-parser]
|
|
opt-level = 3
|
|
[profile.test.package.ttf-parser]
|
|
opt-level = 3
|
|
|
|
[profile.dev.package.swash]
|
|
opt-level = 3
|
|
[profile.selfdev.package.swash]
|
|
opt-level = 3
|
|
[profile.test.package.swash]
|
|
opt-level = 3
|
|
|
|
[profile.dev.package.yazi]
|
|
opt-level = 3
|
|
[profile.selfdev.package.yazi]
|
|
opt-level = 3
|
|
[profile.test.package.yazi]
|
|
opt-level = 3
|
|
|
|
[profile.dev.package.fontdb]
|
|
opt-level = 3
|
|
[profile.selfdev.package.fontdb]
|
|
opt-level = 3
|
|
[profile.test.package.fontdb]
|
|
opt-level = 3
|
|
|
|
# Keep the raster image pipeline optimized in dev/selfdev/test builds.
|
|
#
|
|
# Inline transcript images decode (png/zune-jpeg/fdeflate/miniz_oxide), resize
|
|
# (image), and base64-encode (kitty transmit) at draw time; at opt-level 0 a
|
|
# single screenshot costs 100-200ms per decode/resize, which reads as input
|
|
# lag. These are pure pixel crates with no jcode logic, so optimizing them
|
|
# does not hurt rebuild times for our own code.
|
|
[profile.dev.package.image]
|
|
opt-level = 3
|
|
[profile.selfdev.package.image]
|
|
opt-level = 3
|
|
[profile.test.package.image]
|
|
opt-level = 3
|
|
|
|
[profile.dev.package.png]
|
|
opt-level = 3
|
|
[profile.selfdev.package.png]
|
|
opt-level = 3
|
|
[profile.test.package.png]
|
|
opt-level = 3
|
|
|
|
[profile.dev.package.zune-jpeg]
|
|
opt-level = 3
|
|
[profile.selfdev.package.zune-jpeg]
|
|
opt-level = 3
|
|
[profile.test.package.zune-jpeg]
|
|
opt-level = 3
|
|
|
|
[profile.dev.package.fdeflate]
|
|
opt-level = 3
|
|
[profile.selfdev.package.fdeflate]
|
|
opt-level = 3
|
|
[profile.test.package.fdeflate]
|
|
opt-level = 3
|
|
|
|
[profile.dev.package.miniz_oxide]
|
|
opt-level = 3
|
|
[profile.selfdev.package.miniz_oxide]
|
|
opt-level = 3
|
|
[profile.test.package.miniz_oxide]
|
|
opt-level = 3
|
|
|
|
[profile.dev.package.base64]
|
|
opt-level = 3
|
|
[profile.selfdev.package.base64]
|
|
opt-level = 3
|
|
[profile.test.package.base64]
|
|
opt-level = 3
|
|
|
|
# session_search scans multi-megabyte session files with memchr-based
|
|
# case-insensitive matching; keep the SIMD scanner optimized everywhere.
|
|
[profile.dev.package.memchr]
|
|
opt-level = 3
|
|
[profile.selfdev.package.memchr]
|
|
opt-level = 3
|
|
[profile.test.package.memchr]
|
|
opt-level = 3
|
|
|
|
# The embedding stack (tract ONNX inference + HF tokenizer) runs the MiniLM
|
|
# model for memory recall/maintenance on the shared server. At opt-level 0 a
|
|
# single embed measured ~666 ms (matmul inner loops unoptimized), which keeps
|
|
# the model "busy" long enough that the idle unloader rarely fires and burns
|
|
# CPU on every memory-maintenance pass. These crates are pure compute and
|
|
# change only when the dependency is bumped, so the optimized objects are
|
|
# compiled once and cached across dev/selfdev iterations.
|
|
[profile.dev.package.tract-core]
|
|
opt-level = 3
|
|
[profile.selfdev.package.tract-core]
|
|
opt-level = 3
|
|
[profile.test.package.tract-core]
|
|
opt-level = 3
|
|
[profile.dev.package.tract-linalg]
|
|
opt-level = 3
|
|
[profile.selfdev.package.tract-linalg]
|
|
opt-level = 3
|
|
[profile.test.package.tract-linalg]
|
|
opt-level = 3
|
|
[profile.dev.package.tract-data]
|
|
opt-level = 3
|
|
[profile.selfdev.package.tract-data]
|
|
opt-level = 3
|
|
[profile.test.package.tract-data]
|
|
opt-level = 3
|
|
[profile.dev.package.tract-hir]
|
|
opt-level = 3
|
|
[profile.selfdev.package.tract-hir]
|
|
opt-level = 3
|
|
[profile.test.package.tract-hir]
|
|
opt-level = 3
|
|
[profile.dev.package.tract-onnx]
|
|
opt-level = 3
|
|
[profile.selfdev.package.tract-onnx]
|
|
opt-level = 3
|
|
[profile.test.package.tract-onnx]
|
|
opt-level = 3
|
|
[profile.dev.package.tract-onnx-opl]
|
|
opt-level = 3
|
|
[profile.selfdev.package.tract-onnx-opl]
|
|
opt-level = 3
|
|
[profile.test.package.tract-onnx-opl]
|
|
opt-level = 3
|
|
[profile.dev.package.tract-nnef]
|
|
opt-level = 3
|
|
[profile.selfdev.package.tract-nnef]
|
|
opt-level = 3
|
|
[profile.test.package.tract-nnef]
|
|
opt-level = 3
|
|
[profile.dev.package.ndarray]
|
|
opt-level = 3
|
|
[profile.selfdev.package.ndarray]
|
|
opt-level = 3
|
|
[profile.test.package.ndarray]
|
|
opt-level = 3
|
|
[profile.dev.package.tokenizers]
|
|
opt-level = 3
|
|
[profile.selfdev.package.tokenizers]
|
|
opt-level = 3
|
|
[profile.test.package.tokenizers]
|
|
opt-level = 3
|
|
|
|
[profile.test]
|
|
debug = 0
|
|
incremental = true
|
|
codegen-units = 256
|
|
|
|
[dev-dependencies]
|
|
async-stream = "0.3"
|
|
# Enables the downstream test-support helpers (storage::lock_test_env,
|
|
# auth::test_sandbox, bus::reset_models_updated_publish_state_for_tests, the
|
|
# ExternalAuthReviewCandidate read accessors) for the root crate's own cli test
|
|
# target. Feature unification applies this only to test/bench/example builds,
|
|
# never to a normal `cargo build`/release binary.
|
|
jcode-tui = { path = "crates/jcode-tui", features = ["test-support"] }
|
|
|
|
[build-dependencies]
|