Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/scripts/test_public_boundary.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ def test_private_search_names_are_rejected_in_public_comments_and_copy(self) ->
boundary.verify_paths_and_source(root)

def test_repository_satisfies_public_boundary(self) -> None:
self.assertEqual(boundary.verify(REPOSITORY_ROOT), "1.0.16")
self.assertEqual(boundary.verify(REPOSITORY_ROOT), "1.0.17")

def test_forbidden_private_source_is_detected(self) -> None:
with tempfile.TemporaryDirectory(prefix="public-boundary-") as temporary:
Expand Down
64 changes: 64 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,69 @@
# Changelog

## 1.0.17

- Claude Code auto memory: setup now turns Claude's auto memory off when it
configures Claude Code, and the hooks deny writes to Claude's auto memory files
(`~/.claude/projects/*/memory`) with a message naming the ContextStream call to
use instead (`session(action="remember")`, `capture_lesson`, or a `fact` node).
To keep auto memory on, answer so in the setup wizard's review step, run
`setup --keep-claude-auto-memory`, or set `CONTEXTSTREAM_KEEP_CLAUDE_AUTO_MEMORY=1`;
`CONTEXTSTREAM_ALLOW_LOCAL_MEMORY=true` lifts the write denial. `doctor` reports
the setting and `doctor --repair --scope global` turns auto memory off.
`import-local-memory` copies existing memory files into ContextStream once
(a63d160).
- Hooks: an approved Claude Code plan is saved as a ContextStream plan with one
linked task per numbered step. A plan with the same title is adopted, and
approving again updates it. Repository runbooks, ADRs, RFCs, postmortems and
notes are mirrored to ContextStream docs keyed by repository and path, for
checkouts linked to a workspace (scrubbed, 256 KB cap). Codex `apply_patch`
writes get the same handling. Hooks recognize every ContextStream server name,
including the claude.ai connector. Save guidance is injected once per prompt and
only when the prompt asks to save something, and it routes each kind
(preference, lesson, decision, doc, plan, todo, ticket, handoff). The
`on-save-intent` hook is no longer installed (a63d160).
- Hooks: plan capture and doc mirroring use the workspace and project that a
successful `init` or `context` resolved for the host session (kept for 24
hours), so they also work in checkouts that only have a legacy folder link. A
repository doc written before the session has a scope is queued and mirrored
once `init` or `context` succeeds. `import-local-memory` skips folders with no
workspace link, explains a 403 on a stale link, and takes `--project-dir`,
`--workspace-id` and `--project-id` to import one Claude project into an
explicit scope (fb1bac8).
- Search-first nudges give the exact ContextStream call for each local search:
regex to `mode=pattern`, literals to `exhaustive`, identifiers to `refactor`,
file-name searches to `pattern` with `output_format="paths"`, `-C/-A/-B` to
`context_lines`, glob and type filters to `file_types`, and Explore to
`mode=guided` with the task as `intent`. The same table now reaches Explore and
Plan subagents. The rules recipe for goal, risk and term nodes passes `title`
and `content`, which `memory(action="create_node")` requires (a63d160, ffab454).
- Project links: `contextstream-mcp link [--path|--all] [--fix] [--project-id]
[--pin] [--json]` shows which project a checkout is linked to, ranks the
candidates with the reasons, and re-links with a verified repository
fingerprint. A checkout is ranked by the Git repository it tracks, other
checkouts of the same repository on the machine, names, and where it was
indexed before; benchmark, isolated, generated, worktree-named, dated or
temporary projects are penalized, and a close call is reported as ambiguous.
The sync bridge runs the same audit two minutes after it starts and every six
hours, repairs only links backed by the repository or a sibling checkout, never
into an isolated workspace and never for a pinned or temporary folder, and
records every change with the previous link in `~/.contextstream/link-audit.json`
(`CONTEXTSTREAM_LINK_AUDIT=0` turns the audit off). `doctor --scope project`
reports a `project_link` check and `doctor --repair` applies a confident fix.
`project(action="ingest_local")` reuses the folder's existing project instead of
creating a new one named after the folder, and worktrees no longer start new
projects (452bd2a).
- Session: the session id and the `resume` call that 1.0.16 added to `init`, and
the own-session note on `resume` and `resume_list`, were only in the text of
those results, which Claude Code does not show. They are now in the structured
result too: `init` adds `resume_hint` next to `session_id`, and `resume` and
`resume_list` write the finished text, with the note and the scope note, into
the structured text. The text itself is unchanged (3241462).
- `testing/adoption` adds `persistence_adoption.py`, which measures the share of
an agent's durable saves that went to local files, and `search_adoption.py` now
reads Codex code-mode `exec` calls. `scripts/ovh-cargo.sh` defaults to
ovh-desktop (a63d160, ffab454).

## 1.0.16

- Session: `resume` and `resume_list` can now leave out your own session on the
Expand Down
14 changes: 7 additions & 7 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

14 changes: 7 additions & 7 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ members = [
]

[workspace.package]
version = "1.0.16"
version = "1.0.17"
edition = "2021"
rust-version = "1.95"
license = "MIT"
Expand Down Expand Up @@ -90,12 +90,12 @@ fs2 = "0.4"
notify = "8"

# Workspace crates
mcp-types = { version = "=1.0.16", path = "crates/mcp-types" }
mcp-client = { version = "=1.0.16", path = "crates/mcp-client" }
mcp-session = { version = "=1.0.16", path = "crates/mcp-session" }
mcp-tools = { version = "=1.0.16", path = "crates/mcp-tools" }
mcp-model-registry = { version = "=1.0.16", path = "crates/mcp-model-registry" }
mcp-acceleration-products = { version = "=1.0.16", path = "crates/mcp-acceleration-products" }
mcp-types = { version = "=1.0.17", path = "crates/mcp-types" }
mcp-client = { version = "=1.0.17", path = "crates/mcp-client" }
mcp-session = { version = "=1.0.17", path = "crates/mcp-session" }
mcp-tools = { version = "=1.0.17", path = "crates/mcp-tools" }
mcp-model-registry = { version = "=1.0.17", path = "crates/mcp-model-registry" }
mcp-acceleration-products = { version = "=1.0.17", path = "crates/mcp-acceleration-products" }

# Testing
mockall = "0.15"
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "@contextstream/mcp-server",
"mcpName": "io.github.contextstream/mcp-server",
"version": "1.0.16",
"version": "1.0.17",
"description": "Verified npm launcher for the open-source ContextStream Rust MCP server",
"type": "module",
"license": "MIT",
Expand Down
4 changes: 2 additions & 2 deletions server.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"name": "io.github.contextstream/mcp-server",
"title": "ContextStream MCP Server",
"description": "Project memory, semantic code search, and grounded agent context.",
"version": "1.0.16",
"version": "1.0.17",
"repository": {
"url": "https://github.com/contextstream/mcp-server",
"source": "github"
Expand All @@ -20,7 +20,7 @@
"registryType": "npm",
"registryBaseUrl": "https://registry.npmjs.org",
"identifier": "@contextstream/mcp-server",
"version": "1.0.16",
"version": "1.0.17",
"transport": {
"type": "stdio"
},
Expand Down
Loading