0.9.2
Changed — Packaging (lean install)
- Lean default install. Heavy/compiled dependencies are moved out of the
base install into opt-in extras sopip install velune-cliresolves fast and
cleanly on every platform. Core dependencies dropped from ~38 to 21 with no
heavy compiled wheels. New extras:[rag](lancedb, pyarrow, qdrant-client),
[parsing](tree-sitter grammars),[telemetry](opentelemetry),[git]
(gitpython);[all]aggregates everything. Every gated feature degrades
gracefully when its extra is absent (e.g. semantic search becomes a no-op
while lexical search and chat keep working). (pyproject.toml)
Changed — Startup performance
velune --versionis now near-instant (~1.6s → ~0.04s). The console
script entry point isvelune.main:main, which fast-paths--version
without importing the command graph or runtime. The Typer app is built
lazily instead of at import time. (velune/main.py,velune/cli/app.py)velune <cmd> --helpno longer bootstraps the runtime (~3.9s → ~1.6s):
the root callback skips full-subsystem initialization when help is requested.- Removed a redundant second Ollama reachability probe on REPL startup.
Fixed
- First run with no providers and a non-interactive stdin now prints the
velune setuphint and exits cleanly instead of blocking on a confirmation
prompt or entering an unusable REPL. (velune/cli/app.py) - The
llama-cpp-pythonadapter error message no longer references the removed
[llamacpp]extra. (velune/providers/adapters/llamacpp.py) MANIFEST.innow references the correctdocs/CHANGELOG.mdpath.
Added — Quality
- Test suite wired into CI. The
pytestsuite (350 tests) now runs in CI
across {Linux, macOS, Windows} × {3.11, 3.13} and gates merges and releases;
asyncio_mode = "auto"is configured under[tool.pytest.ini_options]. - README documents
pipx install velune-cli, thepython -m velunefallback,
and the Windows PATH note for the "veluneis not recognized" case.
Added — Providers
- Cohere provider adapter — native Chat API with preamble/history conversion,
streaming, andcommand-r-plus/command-rmodel catalog.
(velune/providers/adapters/cohere.py) - DeepSeek provider adapter — OpenAI-compatible API at
api.deepseek.com;
supports DeepSeek-R1 and DeepSeek-Coder. (velune/providers/adapters/deepseek.py) - Mistral provider adapter — La Plateforme REST API; Mistral Large, Codestral,
and Mixtral models. (velune/providers/adapters/mistral.py) - NVIDIA NIM provider adapter — OpenAI-compatible API at
integrate.api.nvidia.com;
hosts Llama, Mistral, and partner NIM models. (velune/providers/adapters/nvidia.py)
Added — Git Integration
- GitHub and GitLab REST clients —
velune/integrations/github.pyand
gitlab.pyimplement push-branch, create-PR/MR, fetch-issue, and
post-comment operations using each platform's REST API. /pushREPL command — pushes the current branch toorigin(with optional
--force). (velune/cli/slash_dispatcher.py)/prREPL command — creates a pull request (GitHub) or merge request
(GitLab) for the current branch from inside the REPL./issue <number>REPL command — fetches a GitHub/GitLab issue by number
and injects the title, body, and labels as conversation context./sandboxREPL command — shows the active sandbox type (subprocess or
Docker) and its configuration status.
Added — Code Intelligence
velune/analysis/package — code intelligence tools running locally without
an LLM call:linter.py— runsruff/pyflakesand surfaces structured diagnostics.refactor.py— detects code smells (long functions, deep nesting, high
complexity) and returns ranked findings.type_inferrer.py— suggests type annotations for unannotated function
signatures using AST analysis.symbol_search.py— fast symbol and definition lookup across the indexed workspace.
/lint [file]REPL command — lint a Python file and display Rich diagnostic output./refactor <file>REPL command — detect code smells with severity rankings./typify <file>REPL command — suggest type hints for unannotated functions.
Added — Declarative Plugin System
velune/plugins/declarative/package — Markdown-based plugin manifests:
declarative agents (agent.py), slash commands (command.py), skills
(skill.py), and a filesystem scanner (scanner.py).- SKILL.md injection — plugins can ship a
SKILL.mdthat is automatically
appended to the council's system context when the plugin is active. /pluginREPL command — list, enable, disable, and reload declarative
plugins without restarting the session.- Lifecycle hook system (
velune/hooks/) — a typed hook dispatcher and executor
that firespre_tool/post_toolevents; plugins register handlers via
their manifest.
Added — Background Service
velune/daemon/package — a background Velune service (server.py) with
an IPC transport (transport.py) and a client (client.py).velune daemon start|stop|statusCLI subcommands to manage the service.
Added — CLI Subcommands
velune workspacesubcommand group —init,status,graph,list,
open,remove.workspace graphrenders an interactive dependency tree
fromvelune/observability/workspace_graph.py.velune sessionsubcommand group —list,delete,export.velune providersubcommand group —add,remove,test,list,status.velune configsubcommand group —get,set,show.velune usage,velune quota,velune healthcommands for
analytics and provider monitoring.velune logs(alias fortrace) — view or follow the execution event
stream from the current workspace.velune status(alias forcontext) — show index freshness, file counts,
and cognitive-core record counts without starting the full runtime.velune pipeline(alias forretrieval) — trace a retrieval query through
the BM25 + vector + graph pipeline and show per-stage scores.velune memorysubcommand group —inspect,clear,compact.
Added — REPL Commands
/council <task>— force the full council tier regardless of task
complexity classification./new [title]— start a fresh conversation while keeping project memory./project [name|path]— switch or manage project workspaces from within
the REPL./bench [run]— view stored benchmark results or trigger a new empirical
capability run./graph— render a hierarchical tree of knowledge graph entities for the
current workspace./hunk— toggle hunk-by-hunk review mode; each proposed file edit is
shown and approved individually before being applied./undo— revert the last Velune-generated git commit, leaving the changes
staged for inspection./approve [safe|ask|block]— set the tool/command approval gate for the
session./hooks— list all active lifecycle hooks and their configuration source./stats— show session statistics: tokens used, estimated cost, turn
count, and uptime./history— show the REPL command execution history for the current session./pull [model-id]and/delete <model-id>— download or delete
Ollama models from within the REPL with live progress output./mcpsubcommands —servers,tools,resources,connect <name>,
disconnect <name>,refresh <name>— inspect MCP connections without
leaving the REPL.
Security
- Isolated
llama-cpp-pythonfrom the default install set to eliminate the
diskcache ≤ 5.6.3transitive vulnerability (unsafe pickle deserialization — no
patched version exists). The[gguf]optional extra now installs only the
ggufmetadata library, which is unaffected. In-process GGUF inference is
available via the new[llamacpp]extra (pip install 'velune-cli[llamacpp]'),
which is deliberately excluded from[all].pip-auditnow reports
no known vulnerabilities on a default install. (pyproject.toml,
velune/providers/adapters/llamacpp.py)
Added
-
Intent reconstruction — new
velune/cognition/intent.pywithIntentClassifier
andIntentTypeenum (EXPLAIN / GENERATE / REFACTOR / DEBUG / REVIEW / QUESTION / COMMAND).
Zero-latency keyword + word-boundary scoring; wired intoContextOrchestrationEngine
as Phase 0 on every prompt. (velune/cognition/intent.py) -
Council pipeline —
CouncilRunnerorchestrates the full planner → coder →
reviewer → debate → synthesizer pipeline. Cycle exhaustion escalates REVISE to REJECT
automatically. (velune/cognition/council_runner.py) -
DebateSession — scores and ranks council proposals using challenger severity and
reviewer decision; produces structured audit reports for the synthesizer.
(velune/cognition/council/debate.py) -
Multi-model role dispatch —
ContextOrchestrationEngine.execute()routes requests
throughCouncilRunnerwhen aCouncilAgentFactoryis configured; degrades
gracefully when no factory is present. (velune/orchestration/engine.py) -
WebSocket MCP transport —
WebSocketConnectionimplements theMCPConnection
contract over JSON-RPC 2.0 onws://andwss://URLs, with SSRF URL validation,
per-call timeout guards, and optional resource discovery.
(velune/mcp/transports/websocket.py) -
/doctorcouncil panel — new "Council" category invelune doctoroutput shows
role assignment coverage (roles → model IDs) or warnings for unmapped roles.
(velune/cli/commands/doctor.py) -
Async background tasks — long
/runtasks no longer block the REPL prompt./run --bg <task>submits a task to the background and returns immediately.- The status bar shows
⚙ N bgwhile jobs are running. - New
JobRegistrywithJobRecord(ID, name, status, phase, elapsed, preview)
andJobStatusenum (PENDING / RUNNING / COMPLETED / FAILED / CANCELLED).
(velune/core/task_registry.py)
-
/jobscommand — list or cancel background jobs./jobsrenders a live Rich table of all submitted jobs with color-coded status./jobs cancel <id>cancels a running job and clears its loop-detector state.
-
/dashboardcommand — live progress dashboard.- Full-screen Rich
Livelayout: jobs table (top ⅔), alerts + provider health
panels (bottom ⅓). Refreshes every 500 ms; press Enter or Ctrl+C to exit.
(velune/cli/display/dashboard.py)
- Full-screen Rich
-
Error self-healing with exponential backoff — the council orchestrator now
automatically retries transientProviderConnectionError,InferenceError, and
TimeoutErrorfailures up toconfig.providers.max_retriestimes (default 3),
with randomized exponential backoff (min(base × 2^(attempt-1), 30s) × jitter).
Each retry emits aretry.attemptevent on theCognitiveBus.
(velune/core/retry.py,velune/cognition/orchestrator.py) -
Error loop detection — sliding-window circuit breaker stops infinite retry
cycles.ErrorLoopDetectorfingerprints each exception (SHA-1 of type + message
prefix) and trips after 3 occurrences within a 5-minute window, emitting a
retry.loop_detectedevent and raising immediately rather than retrying.
(velune/core/loop_detector.py) -
Proactive issue detection —
ProactiveWatchersubscribes toCognitiveBus
events and surfaces problems before the user asks.job.failed→ WARN alertretry.loop_detected→ DANGER alertprovider.health_changed(degraded/unavailable) → WARN/DANGER alertcontext.threshold_crossed(70 % / 90 %) → WARN/DANGER alert- Periodic check (every 15 s) scans provider health manifests for UNAVAILABLE states.
- Unread alerts drain after each REPL prompt and render as Rich panels above the
input line. The status bar shows⚠ Nfor pending alerts. AlertStore(ring-buffer, max 20 entries) andProactiveWatcherregistered in
the service container at startup / shutdown. (velune/proactive/)
-
52 new unit tests covering loop detection, retry policy, job registry,
proactive watcher, and dashboard builders (all passing).
Refactored
-
velune/cli/slash_dispatcher.py(new) — extracted_build_registryand
_load_file_commandsfromVeluneREPL.repl.pyreduced by ~440 lines
(4,138 → 3,697). -
velune/cli/stream_renderer.py(new) — extracted streaming / non-streaming
render loop from_handle_promptintoStreamRenderer.render()returning
RenderResult(full_content, tokens_used, interrupted). -
Provider fallback —
ProviderRouter.get_ordered_candidates()returns all viable
candidates in capability-score order;BaseCouncilAgentiterates fallback providers
on failure. -
Lineage search —
MemoryLifecycleCoordinator.get_lineage_warnings()now
delegates toLineageStore.query_continuity_warnings()instead of returning[]. -
Diff parsing —
CoderAgent._parse_diffs()replaced withparse_with_fallback()
fromvelune/execution/edit_formats/registry.py. -
Plugins — deleted
velune/plugins/schemas.py(legacyPluginManifest); updated
PluginRegistryandPluginLoaderto useDeclarativePluginManifestand an inline
PluginManifestdataclass respectively. Deletedvelune/context/window.py(legacy
ContextWindowTracker);estimate_tokens()now lives intoken_counter.py.
Changed
StatusBarStategainsbg_job_countandalert_countfields;render_status_bar
renders them as warn-coloured segments only when non-zero. (velune/cli/statusbar.py)RuntimeBootstrapper.bootstrap()registersJobRegistryandAlertStorein the
service container at startup. (velune/kernel/bootstrap.py)_async_main()now startsProactiveWatcherafterlifecycle.startup()and
cleanly stops it in thefinallyblock. (velune/kernel/entrypoint.py)
Fixed
-
Intent classifier word boundaries —
_score()now uses\banchors so
"build"no longer fires on"rebuild"and"implement"no longer fires on
"implementation". Debug signals use substring matching to catch"KeyError"etc. -
velune/plugins/registry.py—register_pluginnow calls
_extract_hook_names()which handles both declarative (hooks JSON file) and legacy
(inlinehookslist) manifest shapes.
Tests
tests/test_intent.py— 7 intent-type test classes + confidence + engine integration
tests (28 cases total).tests/test_council_runner.py— happy path, revise-then-approve, reject-on-exhaustion,
failure isolation,DebateSessionunit tests, helper function tests (21 cases).- Updated
tests/test_mcp_phase2.py—test_unsupported_transport_raisesreplaced by
test_returns_websocket_connectionnow that WebSocket is implemented.