b166477202
fix: harden security, eliminate panics, remove dead code, add Dockerfile
...
Security:
- Use constant-time password comparison (subtle crate) to prevent timing attacks
- Replace permissive CORS with configurable origin-restricted CORS
- Add TLS warning when password auth is used without HTTPS
Bug fixes:
- Convert MetaPlugin panics to anyhow::Result (get_meta_plugin, outputs_mut, options_mut)
- Replace item.id.unwrap() with proper error handling across 15 call sites
- Fix panic on unknown column type in list mode
- Fix conflicting PIPESIZE constant (was 8192 vs 65536, now unified to 8192)
- Add 256MB filter chain buffer limit to prevent OOM
- Gracefully skip unregistered plugins instead of panicking
Dead code removal:
- Delete unused filter parser files (filter_parser.rs, filter.pest, parser/ module)
- ~260 lines of dead PEG parser code removed
Code consolidation:
- Add is_content_binary_from_metadata() helper (was duplicated in 4 places)
- Simplify save_item_raw() to delegate to save_item_raw_streaming() (~90 lines removed)
Incomplete features:
- Populate filter_plugins in status output from global registry
- Add FallbackMagicFileMetaPlugin (was referenced but never implemented)
- Document init_plugins() as intentional no-op
Infrastructure:
- Add Dockerfile (static musl binary on scratch, 4.8MB)
- Add .dockerignore
- Add cors_origin to ServerConfig and config.rs
2026-03-13 07:57:36 -03:00
bee980605f
feat: add HTTPS/TLS server support via rustls
...
Add optional TLS support for the server using axum-server with the
tls-rustls feature. When --server-cert and --server-key are provided
(and tls feature is enabled), the server binds with TLS instead of
plain HTTP.
Changes:
- Add axum-server dependency with optional tls-rustls feature
- New 'tls' feature flag (independent of 'server')
- --server-cert/--server-key CLI args gated behind tls feature
- ServerConfig extended with cert_file/key_file fields
- Conditional TLS/HTTP binding in server mod.rs
- Fix PathBuf::to_str().unwrap() panic risk -> to_string_lossy()
- Update README.md and DESIGN.md with TLS documentation
2026-03-12 22:18:42 -03:00
c5529bedbf
feat: add client mode with streaming support
...
Add client mode enabling the keep CLI to connect to a remote keep
server over HTTP. Local plugins (compression, meta, filters) run on
the client; the server stores/retrieves binary blobs.
Architecture:
- Client save uses 3-thread streaming pipeline: reader thread (stdin
→ tee/stdout → hash → compress), OS pipe, streamer thread (pipe →
chunked HTTP POST). Memory usage is O(PIPESIZE) regardless of data
size.
- Server accepts compress=false, meta=false, decompress=false query
params for granular control of server-side processing.
- Streaming body handling on server via async channel → sync reader
bridge (ChannelReader).
Key additions:
- src/client.rs: KeepClient with post_stream() for chunked upload
- src/modes/client/: save, get, list, info, delete, diff, status
- --client-url / KEEP_CLIENT_URL configuration
- --client-password / KEEP_CLIENT_PASSWORD for auth
- os_pipe dependency for zero-copy pipe streaming
Co-Authored-By: andrew/openrouter/hunter-alpha <noreply@opencode.ai >
2026-03-12 18:01:36 -03:00
8a8a6e1c4b
fix: correct critical bugs and improve pipe streaming performance
...
Critical bug fixes:
- save_item now returns real Item from database, not a hardcoded fake
- AsyncDataService::save() reuses self.sync_service instead of creating redundant instance
- GenerateStatus trait signature mismatch fixed (CLI/API decoupling)
Performance improvements (pipe path untouched):
- CompressionEngine::open() returns Box<dyn Read + Send> enabling true streaming
- mode_get eliminates triple full-file read (was sampling then re-reading entire file)
- FilteringReader adds fast-path bypass when no filters, pre-allocates temp buffer
- text.rs meta plugin processes &[u8] slice directly, eliminates data.to_vec() clone
API correctness:
- Tag parse errors now return 400 instead of being silently discarded
- compute_diff uses similar crate (LCS-based) instead of naive positional comparison
Cleanup:
- Modernize string formatting (format!({x})) across codebase
- Remove redundant DB query in get mode
- Derive Debug/ToSchema on public types
- Delete placeholder test files with no real assertions
- Extract parse_comma_tags utility function
2026-03-11 20:45:05 -03:00
Andrew Phillips
a20f651c01
fix: Apply cfg_attr to fix conditional derive and schema attribute
...
Co-authored-by: aider (openai/andrew/openrouter/sonoma-sky-alpha) <aider@aider.chat >
2025-09-10 18:16:48 -03:00
Andrew Phillips
07d0603d8e
feat: Update Cargo.toml dependencies and features
2025-09-10 18:16:46 -03:00
Andrew Phillips
d9a36012bc
feat: Make 'server' feature optional and add compile-time check
...
Co-authored-by: aider (openai/andrew/openrouter/sonoma-sky-alpha) <aider@aider.chat >
2025-09-10 10:33:47 -03:00
Andrew Phillips
c5eb6d140a
feat: Add magic feature to default build
2025-09-10 10:33:46 -03:00
Andrew Phillips
146bd2e569
feat: Make swagger an optional dependency, enabled by default
...
Co-authored-by: aider (openai/andrew/openrouter/sonoma-sky-alpha) <aider@aider.chat >
2025-09-10 10:24:21 -03:00
Andrew Phillips
c24728202d
feat: Add magic file meta plugin and fix build errors
...
Co-authored-by: aider (openai/andrew/openrouter/sonoma-sky-alpha) <aider@aider.chat >
2025-09-10 10:09:23 -03:00
Andrew Phillips
298773c507
fix: Correct optional dependency syntax in Cargo.toml features
...
Co-authored-by: aider (openai/andrew/openrouter/sonoma-sky-alpha) <aider@aider.chat >
2025-09-10 10:01:41 -03:00
Andrew Phillips
8f3f6c05db
feat: Make mcp support an optional feature, disabled by default
...
Co-authored-by: aider (openai/andrew/openrouter/sonoma-sky-alpha) <aider@aider.chat >
2025-09-10 09:49:51 -03:00
Andrew Phillips
832330f31b
feat: Add type and module reorganization for Services, Modes, Meta and Filter Plugins
...
Co-authored-by: aider (openai/andrew/openrouter/sonoma-sky-alpha) <aider@aider.chat >
2025-09-10 09:39:22 -03:00
Andrew Phillips
eccdb0e13e
refactor: Remove duplicated functionality by relying on comfy-table
...
Co-authored-by: aider (openai/andrew/openrouter/deepseek/deepseek-chat-v3.1) <aider@aider.chat >
2025-09-08 18:26:39 -03:00
Andrew Phillips
c4a3c54ff3
refactor: Update comfy-table to 7.2.0 and adapt API changes
...
Co-authored-by: aider (openai/andrew/openrouter/deepseek/deepseek-chat-v3.1) <aider@aider.chat >
2025-09-08 18:02:23 -03:00
Andrew Phillips
15417eb1d3
fix: Use comfy-table crate for table rendering
...
Co-authored-by: aider (openai/andrew/openrouter/deepseek/deepseek-chat-v3.1) <aider@aider.chat >
2025-09-08 17:59:58 -03:00
Andrew Phillips
21f195d8f6
refactor: Use plugin registry for filter service discovery
...
Co-authored-by: aider (openai/andrew/openrouter/deepseek/deepseek-chat-v3.1) <aider@aider.chat >
2025-09-03 09:31:05 -03:00
Andrew Phillips
96deafbf78
feat: Add pest and pest_derive dependencies
2025-09-03 09:31:04 -03:00
Andrew Phillips
9b7751fa50
refactor: Use strum for filter plugin type determination
...
Co-authored-by: aider (openai/andrew/openrouter/deepseek/deepseek-chat-v3.1) <aider@aider.chat >
2025-09-02 17:26:55 -03:00
Andrew Phillips
21b8267dcb
build: Add strip-ansi-escapes dependency
2025-09-02 17:26:54 -03:00
Andrew Phillips
dc2bd8dcdf
feat: implement tail filter using ringbuf crate
...
Co-authored-by: aider (openai/andrew/openrouter/deepseek/deepseek-chat-v3.1) <aider@aider.chat >
2025-08-28 20:03:50 -03:00
Andrew Phillips
a909fdb2bd
fix: enable full features for derive_more
...
Co-authored-by: aider (openai/andrew/openrouter/deepseek/deepseek-chat-v3.1) <aider@aider.chat >
2025-08-27 21:53:49 -03:00
Andrew Phillips
45a528118c
fix: remove duplicate thiserror dependency
...
Co-authored-by: aider (openai/andrew/openrouter/deepseek/deepseek-chat-v3.1) <aider@aider.chat >
2025-08-27 21:52:48 -03:00
Andrew Phillips
1025f1bc01
feat: add thiserror and derive_more for error handling and boilerplate reduction
...
Co-authored-by: aider (openai/andrew/openrouter/deepseek/deepseek-chat-v3.1) <aider@aider.chat >
2025-08-27 21:45:49 -03:00
Andrew Phillips
c056e8e2f2
build: update derive_more to version 2.0
2025-08-27 21:45:46 -03:00
Andrew Phillips
f0a2cf32ac
chore: add derive_more and smart-default crates
...
Co-authored-by: aider (openai/andrew/openrouter/deepseek/deepseek-chat-v3.1) <aider@aider.chat >
2025-08-27 21:36:44 -03:00
Andrew Phillips
90fd8d013d
refactor: replace custom snake case macro with strum implementation
...
Co-authored-by: aider (openai/andrew/openrouter/deepseek/deepseek-chat-v3.1) <aider@aider.chat >
2025-08-27 12:15:18 -03:00
Andrew Phillips
697ec44f4d
fix: resolve proc-macro reserved keyword and trait export issues
...
Co-authored-by: aider (openai/andrew/openrouter/deepseek/deepseek-chat-v3.1) <aider@aider.chat >
2025-08-27 12:09:21 -03:00
Andrew Phillips
2f0e7e1c5e
fix: add to_snake_case_string dependency and fix imports and type mismatch
...
Co-authored-by: aider (openai/andrew/openrouter/deepseek/deepseek-chat-v3.1) <aider@aider.chat >
2025-08-27 11:56:41 -03:00
Andrew Phillips
cb83cc4b77
feat: add support for multiple hash methods in digest plugin
...
Co-authored-by: aider (openai/andrew/openrouter/deepseek/deepseek-chat-v3.1) <aider@aider.chat >
2025-08-26 23:35:40 -03:00
Andrew Phillips
f23cc6e94f
feat: add termsize and tokio-util dependencies and remove system.rs
2025-08-26 20:16:08 -03:00
Andrew Phillips
fb40809078
feat: add missing database functions and fix tool errors
...
Co-authored-by: aider (openai/andrew/openrouter/anthropic/claude-sonnet-4) <aider@aider.chat >
2025-08-23 13:01:30 -03:00
Andrew Phillips
4d87a9822b
build: update and deduplicate dependencies
2025-08-23 13:01:11 -03:00
Andrew Phillips
925c978bbc
feat: add Model Context Protocol (MCP) SSE endpoint
...
Co-authored-by: aider (openai/andrew/openrouter/anthropic/claude-sonnet-4) <aider@aider.chat >
2025-08-23 12:57:00 -03:00
Andrew Phillips
f2eabd65b0
feat: add rmcp dependency with server feature
2025-08-23 12:56:41 -03:00
Andrew Phillips
ec3ef25f38
feat: add magic meta plugin with file type detection
...
Co-authored-by: aider (openai/andrew/openrouter/anthropic/claude-sonnet-4) <aider@aider.chat >
2025-08-16 14:49:00 -03:00
Andrew Phillips
b90456c6f4
feat: update config system and list format structure
...
Co-authored-by: aider (openai/andrew/openrouter/qwen/qwen3-coder) <aider@aider.chat >
2025-08-16 11:57:02 -03:00
Andrew Phillips
e1091b72f8
chore: update pwhash dependency and add settings debug log
2025-08-16 11:56:52 -03:00
Andrew Phillips
fd5681b630
feat: add support for password hashing authentication
...
Co-authored-by: aider (openai/andrew/openrouter/qwen/qwen3-coder) <aider@aider.chat >
2025-08-15 20:49:56 -03:00
Andrew Phillips
067cba703b
feat: add config system with --config argument and priority-based configuration
...
Co-authored-by: aider (openai/andrew/openrouter/anthropic/claude-sonnet-4) <aider@aider.chat >
2025-08-15 16:31:57 -03:00
Andrew Phillips
5e5a59d960
fix: resolve rand crate dependency and fix reserved keyword usage in tests
...
Co-authored-by: aider (openai/andrew/openrouter/qwen/qwen3-coder) <aider@aider.chat >
2025-08-15 13:00:32 -03:00
Andrew Phillips
2713f2b127
fix: configure tests to run by removing deprecated test config and adding missing import
...
Co-authored-by: aider (openai/andrew/openrouter/qwen/qwen3-coder) <aider@aider.chat >
2025-08-14 12:26:28 -03:00
Andrew Phillips
24d7c4742c
chore: update dependencies and remove unused test modules
2025-08-14 12:23:46 -03:00
Andrew Phillips
93a4d5b2bd
fix: resolve rusqlite version conflict with rusqlite_migration
...
Co-authored-by: aider (openai/andrew/openrouter/qwen/qwen3-coder) <aider@aider.chat >
2025-08-13 11:01:09 -03:00
Andrew Phillips
138ebafbb5
chore: update dependencies and reorder Cargo.toml entries
2025-08-13 11:01:06 -03:00
Andrew Phillips
900aa73959
fix: add missing utoipa dependencies for API documentation
...
Co-authored-by: aider (openai/andrew/openrouter/qwen/qwen3-coder) <aider@aider.chat >
2025-08-12 16:57:16 -03:00
Andrew Phillips
47f4c1b865
fix: remove duplicate once_cell dependency in Cargo.toml
2025-08-12 16:57:15 -03:00
Andrew Phillips
6e4b690bd8
feat: use humansize crate and which crate for program lookup
...
Co-authored-by: aider (openai/andrew/openrouter/qwen/qwen3-coder) <aider@aider.chat >
2025-08-12 16:23:11 -03:00
Andrew Phillips
db8be3e480
build: add once_cell dependency to Cargo.toml
...
Co-authored-by: aider (openai/andrew/openrouter/qwen/qwen3-coder) <aider@aider.chat >
2025-08-12 16:18:12 -03:00
Andrew Phillips
91af08b48c
fix: enable trace feature in tower-http and derive Debug for TagsQuery
...
Co-authored-by: aider (openai/andrew/openrouter/anthropic/claude-sonnet-4) <aider@aider.chat >
2025-08-10 21:36:26 -03:00