INFO resolve: Resolving package: 'jilu@=0.13.1' WARN The package jilu v0.13.1 will be installed from source (with cargo) INFO Cargo finished successfully INFO Done in 76.974798576s
Changelog
All notable changes to this project are documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning. The file is auto-generated using Conventional Commits.
Overview
- unreleased
0.1.0
– 2025.05.02
Unreleased
- build: Add
install
target and update coverage generation (#171) (39088ef
) - docs: Publish documentation site to https://jp.computer (#168) (
e06d444
) - chore: Add filesystem tools and enhance GitHub integration (#167) (
2828573
) - chore: Improve
cargo_test
output message (#164) (11ffdeb
) - feat: Replace personas and contexts with layered configuration system (#161) (
b5428d0
) - refactor: simplify
Query
command implementation (#160) (7a568c1
) - refactor: change
Query::[no_]stream
frombool
toStreamMode
(#159) (a74d2b6
) - chore: remove "local" mcp server (#158) (
6d418b0
) - chore: switch to native Google API for default persona (#157) (
8cf0bc8
) - chore: fix missing cache paths (#155) (
d7060f1
) - chore: fix missing ci cache path (#154) (
296d639
) - ci: improve step runtime (#153) (
4224abf
) - feat: Show persona and model info in query editor (#152) (
74cadcc
) - refactor: simplify get_model parameters (#151) (
ee020ed
) - refactor: Skip serializing missing
top_p
andtop_k
fields (#150) (0dbde15
) - feat: Add streaming control flags to
query
command (#148) (889cea6
) - docs: tweak README (#147) (
f3d32cd
) - feat: Add capitzalized short flags for any
--no-<O>option
flag (#146) (a2b536f
) - feat: Improved model detection during workspace initialization (#145) (
cd56c5c
) - build: fix change-log building (#142) (
2616d05
) - build: Automate changelog generation in CI pipeline (#141) (
3e5c311
) - ci: Add insta snapshot testing to CI pipeline (#140) (
491b1ee
) - ci: Add Rust CI testing workflow (#139) (
12dcd06
) - refactor: Replace
Vec<Event>
withReply
wrapper (#137) (cf61494
) - refactor: Improve reasoning support validation and API (#135) (
21df4b8
) - chore: Minor tweaks & fixes (#134) (
c7fa9d6
) - build: fix documentation urls (#131) (
9c2cbf8
) - build: improve build reproducibility (#130) (
bd642d2
) - build: Enhance development workflow with improved justfile recipes (#129) (
510a744
) - build: tweak deployment process (#128) (
f637719
) - build: ensure
just
is installed (#127) (9eb6b0e
) - build: do not require yarn.lock (#126) (
91d3fc0
) - build: do not require yarn.lock (#125) (
81cfc84
) - build: fix working-directory (#124) (
3092918
) - build: disable build caching (#123) (
bad7dc8
) - build: fix github workflows directory (#122) (
d63a130
) - build: fix docs deploy branch name (#121) (
714ac4a
) - build: Add documentation infrastructure with VitePress (#120) (
e8800a0
) - chore: Refactor commit scope guidelines for clarity (#114) (
6eb984b
) - feat: Add embedded tools system with TOML-based configuration (#113) (
db9f418
) - feat: Add convenience
--hide-reasoning
flag toquery
command (#111) (05a8350
) - fix: Restore tool call recursion in query (#106) (
d9a7f91
) - feat: Improved reasoning support (#105) (
c3e845f
) - chore: Add GitHub issues/PRs tools and restructure code (#103) (
7a94e66
) - build: Add MCP server for development tooling (#100) (
b80e7c8
) - fix: Prevent early return in tool call completion handling (#98) (
8be4e34
) - feat: Improve assistant message formatting in editor (#97) (
5a2fd94
) - fix: Allow forward slashes in
ModelId
validation (#96) (51fe290
) - refactor: Reorganize MCP server configs into subdirectory (#95) (
85a74dc
) - test: Refresh LLM provider test fixtures (#94) (
be427d9
) - feat: Add
--tool
flag to control tool choice behavior (#93) (a8112bf
) - feat: Add
--from
flag toconversation rm
command (#90) (34417a2
) - fix: ensure
--model
flag is applied correctly (#89) (35fd2c4
) - chore: add missing crates to log output (#88) (
da4dc7d
) - chore: Improve
commit
persona model and instructions (#87) (61f293f
) - fix: Correctly set context window size for Ollama (#86) (
9893602
) - feat: Improve extended thinking/reasoning support (#85) (
34afef5
) - fix: Remove hardcoded default model from
Persona
(#84) (b2deea1
) - fix: Preserve empty lines in markdown formatting (#82) (
538f417
) - refactor: Error message improvements (#81) (
c411abc
) - refactor: migrate model parameters to typed struct (#80) (
1e52932
) - refactor: Simplify model handling (#79) (
ce1ab70
) - ci: Add
bacon.toml
for CI task management (#78) (c5856db
) - build: Add
cargo-deny
to the build process (#77) (e20c97c
) - fix: fix string indentation in conversation_titles query (#75) (
c292644
) - feat: Add Ollama provider for local LLMs (#74) (
6146e57
) - build: Add commit recipe to justfile (#70) (
6cea9b5
) - build: clippy fixes (#69) (
75a6d95
) - refactor: Extract storage into
jp_storage
crate (#68) (e0aa3f9
) - build: Update Rust toolchain to
nightly-2025-05-19
(#67) (da456fc
) - fix: Skip title generation for non-persistent sessions (#66) (
47c06a4
) - refactor: Replace
backoff
withbackon
for retry logic (#65) (4a97f39
) - refactor: Rename
LocalState
toUserState
(#64) (3214bcf
) - refactor: Extract
TombMap
tojp_tombmap
crate (#63) (3633e6c
) - feat: set target workspace with
--workspace
flag (#62) (6dbe6b5
) - test: Improve VCR-based snapshot testing with insta (#60) (
f2369a0
) - feat: Add provider model listing capabilities (#59) (
a6145fc
) - feat: Add MCP resources handler (#58) (
b226b0f
) - ci: Add commit message tooling (#54) (
1e03075
) - refactor: Refactor query flow and extract helper methods (#50) (
786b0bf
) - fix: handle duplicate workspace IDs and unsupported platforms (#48) (
cb492ef
) - feat: add command output handler (#47) (
f336253
) - feat: add Anthropic provider integration (#45) (
f07c5fc
) - feat: enhance verbosity control with all-crate tracing (#44) (
60b31b2
) - refactor: empty strings in config setters unset optionals (#41) (
a414405
) - test: add missing tests (#39) (
6fe61da
) - feat: support structured output (#36) (
011761f
) - feat: add Jinja2 template support for queries (#35) (
8cdcb17
) - feat: support external config files via
--cfg @<path>
flag (#34) (7180a75
) - refactor: rename
--config
flag to--cfg
(#33) (7f86aeb
) - refactor: allow disabling inheritance from CLI (#32) (
72e036e
) - chore: update project configuration and documentation (#31) (
b75fd14
) - refactor: improve configuration handling and parsing (#30) (
5c1fde9
) - feat: add persona and context configuration options (#29) (
e69db47
) - refactor: adjust log levels and enhance configuration (#21) (
515c5e7
) - feat: add conversation title generation settings (#20) (
2f12759
) - perf: improveo overall performance of CLI commands (#19) (
f12e6f3
) - feat: automated title generation (#18) (
7ffc2cc
) - feat: improve MCP loading and configuration editing (#16) (
ca1c1df
) - fix: clean up
QUERY_MESSAGES.md
file when empty (#11) (c63c590
) - refactor: rename
private
flag tolocal
(#10) (548f948
) - feat: add
--no-persist
flag to disable state persistence (#7) (328f0aa
) - feat: automated llm-based conversation title generation (#6) (
5129eb9
) - refactor: Improve help formatting (#4) (
683d43f
) - fix: ensure consistent EOF newlines in workspace files (#3) (
932cdd0
) - feat: edit conversation details (#2) (
ee0f359
) - feat: add support for private conversations (#1) (
f56e837
)
0.1.0
2025.05.02
v0.1.0
Contributions
This release is made possible by the following people (in alphabetical order). Thank you all for your contributions. Your work – no matter how significant – is greatly appreciated by the community. 💖
- Jean Mertz (git@jeanmertz.com)
Changes
Features
officially hook Jean-Pierre into the project!!!! (
3e59e1b
)return error when trying to delete active conversation (
f2f5d27
)create missing directory on
init
(e50590e
)add workspace management crate (
6dda179
)Introduces
jp_workspace
crate for managing (persisted) state of JP.- Workspace state management and persistence
- Support for personas, models, conversations and messages
- Local and shared storage handling
- Atomic file operations
- Unique workspace ID generation
add new crate for LLM provider integrations (
e0fb3b9
)Adds a new
jp_llm
crate that handles interactions with LLM providers:- Support for OpenAI and Openrouter providers
- Future support for Anthropic, Google, Deepseek, and Xai
- Streaming chat completion functionality
- Tool/function calling capabilities
- Error handling and type conversions
- Message formatting and thread management
implement OpenRouter API client (
cd47a14
)- Add OpenRouter API client with streaming chat completion support
- Implement error handling and retry mechanisms
- Add request/response type definitions
- Include test fixtures and recording infrastructure
- Support conventional OpenRouter API features like tool calls
At the time of writing, there are no good alternative OpenRouter clients in Rust. When one is found, we can switch to using it, if it makes sense.
implement MCP client crate (
8a16d23
)The new
jp_mcp
crate provides a client implementation for the Model Context Protocol (MCP).The client supports the following operations:
- Start/stop multiple MCP servers in parallel
- List available tools
- Call a tool with given parameters
Currently, the client only supports the
Stdio
transport type.improve tag filtering (
940f8ce
)Previously, you either searched for a specific query using the
search
endpoint, or you could filter notes by tag using thetagged
endpoint.Now, those two endpoints are combined into a single
search
endpoint that accepts a query and an optional list of tags to filter by.Before:
shjp attachment add "bear://search/my query" jp attachment add "bear://tagged/my/tag"
After:
shjp attachment add "bear://search/my query" jp attachment add "bear://search/?tag=my/tag" jp attachment add "bear://search/my query?tag=my/tag"
add Bear Notes integration (
9998d31
)Implements a new attachment handler for Bear Notes that allows:
- Fetching single notes by ID
- Searching notes by content
- Filtering notes by tags
The handler interfaces with Bear's SQLite database to retrieve note content and metadata in XML format.
implement URI-based attachment system (
2600658
)jp_attachment
This crate provides a trait for handling attachments and a registry for handling attachments in a generic way. The trait supports adding, removing and listing attachments. Each attachment handler "owns" a single URI scheme, and can handle attachments of that scheme.
jp_attachment_file_content
This crate provides an attachment handler for the full content of a file. It supports glob patterns for file inclusion and exclusion.
More handlers will be added in the future, such as "file headers", "file summaries", "web pages", etc.
add configuration management crate (
d86b311
)adds a new
jp_config
crate that handles configuration loading and management.Configuration is loaded from three sources:
- file system (lowest precedence)
- environment variables
- command-line arguments (highest precedence)
Configuration files can be in multiple formats, including toml, json and yaml. Additionally, multiple configuration files can be merged together, until a configuration file sets the
inherit
field tofalse
.The following tree of configuration files is loaded:
/path/to/workspace/{jp, .jp}.{toml, json, json5, yaml, yml} /path/to/{jp, .jp}.{toml, json, json5, yaml, yml} /path/{jp, .jp}.{toml, json, json5, yaml, yml} /{jp, .jp}.{toml, json, json5, yaml, yml} $XDG_CONFIG_HOME/jp/config.{toml, json, json5, yaml, yml}
For each configuration property, an environment variable can be set to override the default value, or the value set through the configuration file(s). The environment variable name follows the following pattern:
JP_{group}_{property}
For example, the
llm.provider.openrouter.api_key_env
property can be set with theJP_LLM_PROVIDER_OPENROUTER_API_KEY_ENV
environment variable.Additionally, the CLI allows overriding configuration properties using the
--config
or-c
command-line argument. The flag can be passed multiple times, and follows the following pattern:--config KEY=VALUE
Where
KEY
is the configuration property name, similar to the environment variable name, but.
as a separator instead of_
, and all lowercase.VALUE
is the string representation of the value, so a bool can be set withtrue
orfalse
. For example:jp --config llm.provider.openrouter.api_key_env=MY_API_KEY ...
If a configuration property is not set, a default value is used.
Miscellaneous Tasks
add initial README (
0fd5b96
)add missing files (
33ca0dd
)minor terminal output tweak (
147a24d
)cargo tweaks (
6383eb9
)clippy fixes (
c54ecf4
)update MSRV (
407bc4d
)remove unneeded files (
b84ab79
)update dependencies (
d17488c
)remove unused dependencies (
6f4f866
)fix typos.toml config (
be90120
)update project configuration and tooling (
5ab9d80
)- add workspace schema for dependency validation
- update gitignore and add ripgrep ignore patterns
- refine rustfmt and taplo formatting rules
- remove docker configuration
- add llvm-tools to rust toolchain
project tooling (
37ba3f4
)
Bug Fixes
- don't store new conversations without messages (
ee6ab21
)
Refactoring
more fine-grained deletion/modification tracking (
1e8d05f
)Before, the storage system used a temporary directory to copy the workspace state to upon initialization of the CLI. This was done to ensure atomic replacement of the state directory, but this came with downsides:
- Any storage files not loaded into memory (e.g. due to deserialization errors) were removed once the new state was persisted and the entire storage directory was replaced.
- When tracking the storage directory in a VCS, every run of the CLI would change the storage directory metadata, potentially causing non-relevant changes to be committed.
- The wholesale copying/replacing of the storage directory was inefficient.
With this commit, the storage system is no longer atomic (with some additional work, it could be made to be), but we do gain other benefits:
- The workspace state is loaded from the storage directory directly, without the need for a temporary copy.
- Internally, modifications and deletions are tracked, to allow fine-grained control over what is persisted or removed.
- VCS metadata is no longer updated for every run of the CLI, only when a file has actually changed.
A new
TombMap
type is introduced to track deletions and modifications to the workspace state. This is a direct copy of Rust'sHashMap
, with minor modifications to track deletions/modifications.Additionally, the different
*Id
types have been updated to correctly convert between paths/filenames and IDs.restructure project into workspace architecture (
a4f9b58
)- Convert project into a Cargo workspace with multiple crates
- Add workspace-level dependency management
- Configure workspace-level lints and settings
- Update and standardize dependency versions
- Add workspace metadata (license, docs, etc.)
- Remove direct dependencies in favor of workspace dependencies
several tweaks and fixes to existing crates (
7a24104
)remove legacy codebase (
93aa603
)Removes the entire legacy codebase in
src/
. The project is now a "virtual workspace" that moves all logic into individualjp-*
crates incrates/
.A few old half working features are removed, such as the "server", but these will be re-added in a future commit.