All checks were successful
build-prerelease / Resolve version stamps (push) Successful in 28s
CI / Format (push) Successful in 28s
CI / Clippy (push) Successful in 2m45s
build-prerelease / Build cortex binary (push) Successful in 4m41s
CI / Test (push) Successful in 4m58s
build-prerelease / Build neuron-blackwell (push) Successful in 6m4s
CI / Build cortex SRPM (push) Has been skipped
CI / Publish cortex to COPR (push) Has been skipped
CI / Build neuron SRPM (push) Has been skipped
CI / Publish neuron to COPR (push) Has been skipped
CI / Bump version in source (push) Has been skipped
build-prerelease / Package cortex RPM (push) Successful in 1m21s
build-prerelease / Build neuron-ampere (push) Successful in 7m36s
build-prerelease / Build neuron-ada (push) Successful in 5m40s
build-prerelease / Package helexa-neuron-ampere RPM (push) Successful in 2m57s
build-prerelease / Package helexa-neuron-ada RPM (push) Successful in 3m3s
build-prerelease / Package helexa-neuron-blackwell RPM (push) Successful in 3m40s
build-prerelease / Publish to rpm.lair.cafe (unstable) (push) Successful in 1m3s
Stage 3b only implemented the trailing half of resume: write
sessions to disk + handle session/load. But Zed (and any ACP
client) needs `session/list` to discover *which* session belongs
to the workspace it's reopening — without it, the client only
knows how to mint new sessions and resume never fires even
though the JSON sits ready on disk.
Add the missing pieces:
- store::list / list_in_dir — enumerate {id}.json under
sessions_dir(), optionally filter by cwd, sort recent-first.
Skips unparseable files with a warn rather than aborting.
- store::unix_to_iso8601 — RFC 3339 formatter for
SessionInfo.updated_at; pulls chrono in directly (already in
the dep tree transitively).
- agent::handle_list_sessions — wires the request to the store,
builds SessionInfo entries with derived titles (first user
turn, truncated to 60 chars).
- agent::initialize_response — advertise
session_capabilities.list = {} alongside the existing
load_session: true.
Verified end-to-end against the user's real hxa-1.json
(60-turn beat conversation): `session/list` returns the entry
with cwd, derived title, and ISO 8601 timestamp.
4 new store unit tests for list filtering, missing-dir
handling, unparseable-file skipping, and ISO 8601 formatting.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
44 lines
1.6 KiB
TOML
44 lines
1.6 KiB
TOML
[package]
|
|
name = "helexa-acp"
|
|
version = "0.1.16"
|
|
edition = "2024"
|
|
license = "Apache-2.0"
|
|
repository = "https://git.lair.cafe/helexa/cortex"
|
|
description = """
|
|
Agent Client Protocol bridge for the helexa self-hosted LLM stack.
|
|
Speaks ACP to ACP-compatible editor clients (Zed, etc.) and forwards
|
|
the conversation to any OpenAI-compatible HTTP endpoint — defaulting
|
|
to cortex (helexa's reverse-proxy / fleet gateway).
|
|
"""
|
|
|
|
# This crate is intentionally self-contained — no dependencies on other
|
|
# workspace crates (cortex-core, cortex-gateway, neuron). The goal is
|
|
# a painless migration to a dedicated GitHub repo in the future if the
|
|
# project grows beyond helexa's needs. All deps are crates.io.
|
|
[dependencies]
|
|
agent-client-protocol = "0.12"
|
|
tokio = { version = "1", features = ["rt-multi-thread", "macros", "sync", "io-util", "process", "signal"] }
|
|
reqwest = { version = "0.12", features = ["json", "stream", "rustls-tls"], default-features = false }
|
|
serde = { version = "1", features = ["derive"] }
|
|
serde_json = "1"
|
|
toml = "0.8"
|
|
tracing = "0.1"
|
|
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
|
|
anyhow = "1"
|
|
thiserror = "2"
|
|
async-trait = "0.1"
|
|
futures = "0.3"
|
|
tokio-stream = "0.1"
|
|
tokio-util = { version = "0.7", features = ["rt"] }
|
|
eventsource-stream = "0.2"
|
|
async-stream = "0.3"
|
|
url = { version = "2", features = ["serde"] }
|
|
# Already transitively pulled via the ACP SDK; declared directly so we
|
|
# can format ISO 8601 timestamps for `SessionInfo.updated_at` in the
|
|
# session/list response.
|
|
chrono = { version = "0.4", default-features = false, features = ["std"] }
|
|
|
|
[[bin]]
|
|
name = "helexa-acp"
|
|
path = "src/main.rs"
|