Skip to content
Open
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
14 changes: 14 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -119,8 +119,22 @@ jobs:
working-directory: editors/vscode
run: npm run lint

- name: Set up Go (command-parity oracle)
uses: actions/setup-go@v5
with:
go-version-file: go.mod
cache: true

- name: Build ctx (command-parity oracle)
run: go build -o "${{ github.workspace }}/ctxbin" ./cmd/ctx

- name: Test (vitest)
working-directory: editors/vscode
env:
# Ground-truth binary for commandParity.test.ts — built from this
# same commit so dispatched commands are checked against the real
# ctx tree, not a mock.
CTX_BIN: ${{ github.workspace }}/ctxbin
run: npm test

- name: Package dry-run (vsce)
Expand Down
68 changes: 68 additions & 0 deletions editors/vscode/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,74 @@ will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/).

## [0.10.0] - 2026-07-05

### Fixed

- **Commands now target the real `ctx` CLI.** The participant dispatched
a dozen-plus commands to subcommands that don't exist on the shipped
binary (`ctx tasks`, `ctx complete`, `ctx decisions`, `ctx recall`,
`ctx add`, `ctx notify`, …), so a large part of the surface was dead on
arrival. Every invocation is reconciled to the actual command tree:
`/task`, `/change`, `/decision`, `/learning`, `/permission` (the CLI
registry is singular); `complete`→`task complete`; `recall`→
`journal source`; `notify`→`hook notify`; `/add <type>`→`<type> add`;
tool-config `hook`→`setup`; `system stats`→`usage`, `system resources`→
`sysinfo`, `system message`→`hook message`, `check-reminders`→
`check-reminder`.
- **`runCtx` no longer reports failures as success.** Cancelled or
timed-out runs reject instead of rendering partial output as a clean
result, and the process exit code is surfaced to callers rather than
assuming any output means success.
- **`/pause` and `/resume` pause and resume context hooks** (`ctx hook
pause` / `ctx hook resume`) instead of writing a session-snapshot JSON
while the hooks — which the command name promises to pause — kept firing.
- **The onboarding gate no longer blocks `/guide`, `/why`, `/config`, and
`/hook`** in an uninitialized project; these mirror the CLI's init-exempt
set (the "run /init first" gate previously hid exactly the commands a new
user reaches for).
- **Reminder `$(bell)` clears when the queue is empty.** The status bar now
reads `ctx remind list` ("No reminders.") instead of the provenance-only
`check-reminder` output, which never matched the hide condition and pinned
the bell on permanently.
- **`/worktree` and `/changelog` git calls are cancellable** and time out
after 30s, so a git op blocked on an index lock can't hang the request.
- **`saveWatcher` no longer runs against the wrong workspace root** — it
skips paths starting with `..`, matching its siblings.
- Stopped regenerating the tracked `.github/copilot-instructions.md` on
every `.context/**` change (git churn / write amplification).

### Changed

- `/verify` and `/wrapup` descriptions corrected to match actual behavior
(both are read-only: `/verify` runs `ctx doctor` + `drift`; `/wrapup`
summarizes status, drift, and journal and *suggests* — does not persist —
decision/learning entries).

### Added

- **Command-parity test** (`commandParity.test.ts`): asserts
`package.json` ↔ dispatcher ↔ the real `ctx` command tree (built from
the same commit), so a future CLI rename can never silently strand a
command again.

### Removed

- `/prompt` and `/deps` slash commands — their `ctx prompt` / `ctx dep`
backing commands were removed from the CLI with no replacement. The
command surface is now 43 commands, each mapping to a real `ctx`
command.
- `/system backup` subcommand (no CLI replacement).
- **Unreachable Command-Palette registrations** — `activate()` registered
`ctx.*` commands with no matching `contributes.commands`, so none were
reachable from the palette. Removed pending a deliberate palette design.
- **Violation guardrails** (the terminal-command watcher, the
sensitive-file watcher, and `.context/state/violations.json`
recording). Capturing the user's terminal text — credentials
included — into a file that an MCP server relays into model context
is a design decision that warrants its own review. It will be
re-proposed separately with a design note on the capture surface.

## [0.9.0] - 2026-03-19

### Added
Expand Down
10 changes: 4 additions & 6 deletions editors/vscode/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
A VS Code Chat Participant that brings [ctx](https://ctx.ist) (persistent
project context for AI coding sessions) directly into GitHub Copilot Chat.

Type `@ctx` in the Chat view to access 45 slash commands, automatic context
Type `@ctx` in the Chat view to access 43 slash commands, automatic context
hooks, a reminder status bar, and natural language routing, all powered by
the ctx CLI.

Expand Down Expand Up @@ -57,8 +57,8 @@ The extension auto-downloads the ctx CLI binary if it isn't on your PATH.
| `/wrapup` | End-of-session wrap-up with status, drift, and journal audit |
| `/remember` | Recall recent AI sessions for this project |
| `/reflect` | Surface items worth persisting as decisions or learnings |
| `/pause` | Save session state for later |
| `/resume` | Restore a paused session |
| `/pause` | Pause context hooks for this session |
| `/resume` | Resume context hooks |

### Discovery & Planning

Expand All @@ -68,7 +68,6 @@ The extension auto-downloads the ctx CLI binary if it isn't on your PATH.
| `/spec` | List or scaffold feature specs from templates |
| `/verify` | Run verification checks (doctor + drift) |
| `/map` | Show dependency map (go.mod, package.json) |
| `/prompt` | Browse and view prompt templates |
| `/blog` | Draft a blog post from recent context |
| `/changelog` | Show recent commits for changelog |

Expand All @@ -92,7 +91,6 @@ The extension auto-downloads the ctx CLI binary if it isn't on your PATH.
| `/config` | Manage config profiles (switch, status, schema) |
| `/permissions` | Backup or restore Claude settings |
| `/changes` | Show what changed since last session |
| `/deps` | Show package dependency graph |
| `/guide` | Quick-reference cheat sheet for ctx |
| `/reindex` | Regenerate indices for DECISIONS.md and LEARNINGS.md |
| `/why` | Read the philosophy behind ctx |
Expand Down Expand Up @@ -204,7 +202,7 @@ The extension is a single-file implementation
Tests live in `src/extension.test.ts` and use vitest with a VS Code API
mock. They verify:

- All 45 command handlers exist and are callable
- All 43 command handlers exist and are callable
- `runCtx` invokes the correct binary with correct arguments
- Platform detection returns valid GOOS/GOARCH values
- Follow-up suggestions are returned after commands
Expand Down
106 changes: 77 additions & 29 deletions editors/vscode/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "ctx-context",
"displayName": "ctx — Persistent Context for AI",
"description": "Chat participant (@ctx) for persistent project context across AI coding sessions",
"version": "0.8.1",
"version": "0.10.0",
"publisher": "activememory",
"license": "Apache-2.0",
"homepage": "https://github.com/ActiveMemory/ctx",
Expand Down Expand Up @@ -92,13 +92,17 @@
"description": "Reconcile context with codebase"
},
{
"name": "task",
"description": "Task operations: complete, archive, snapshot"
"name": "complete",
"description": "Mark a task complete by number or description"
},
{
"name": "remind",
"description": "Manage session-scoped reminders"
},
{
"name": "tasks",
"description": "Task operations: complete, archive, snapshot"
},
{
"name": "pad",
"description": "Encrypted scratchpad for sensitive notes"
Expand All @@ -112,52 +116,68 @@
"description": "System diagnostics and bootstrap"
},
{
"name": "memory",
"description": "Memory bridge operations (sync, status, diff, import, publish)"
"name": "wrapup",
"description": "Summarize the session for end-of-session wrap-up (read-only)"
},
{
"name": "journal",
"description": "Journal management (site, obsidian)"
"name": "remember",
"description": "Recall project context and present a structured readback"
},
{
"name": "doctor",
"description": "Context health diagnostics"
"name": "next",
"description": "Suggest what to work on next"
},
{
"name": "config",
"description": "Runtime configuration (switch, status, schema)"
"name": "brainstorm",
"description": "Design before implementation: turn a vague idea into a validated design"
},
{
"name": "prompt",
"description": "Prompt templates (list, add, show, rm)"
"name": "reflect",
"description": "Reflect on session progress at a natural breakpoint"
},
{
"name": "why",
"description": "Show rationale for context design decisions"
"name": "spec",
"description": "Scaffold a feature spec from the project template"
},
{
"name": "change",
"description": "Show recent codebase changes"
"name": "implement",
"description": "Execute a plan step-by-step with verification"
},
{
"name": "dep",
"description": "Show project dependencies"
"name": "verify",
"description": "Run verification checks (ctx doctor + drift)"
},
{
"name": "guide",
"description": "Quick start guide"
"name": "map",
"description": "Build and maintain architecture maps (ARCHITECTURE.md)"
},
{
"name": "permission",
"description": "Permission snapshot and restore"
"name": "blog",
"description": "Generate a blog post draft from project progress"
},
{
"name": "changelog",
"description": "Generate a themed blog post from commits between releases"
},
{
"name": "check-links",
"description": "Audit docs for dead links"
},
{
"name": "journal",
"description": "Journal management (site, obsidian)"
},
{
"name": "consolidate",
"description": "Consolidate redundant entries in LEARNINGS.md or DECISIONS.md"
},
{
"name": "site",
"description": "Documentation site (feed)"
"name": "audit",
"description": "Run a code-level convention audit across the codebase"
},
{
"name": "loop",
"description": "Generate autonomous iteration scripts"
"name": "worktree",
"description": "Manage git worktrees for parallel agent development"
},
{
"name": "pause",
Expand All @@ -167,13 +187,41 @@
"name": "resume",
"description": "Resume context hooks"
},
{
"name": "memory",
"description": "Memory bridge operations (sync, status, diff, import, publish)"
},
{
"name": "decisions",
"description": "Manage DECISIONS.md architectural decisions"
},
{
"name": "learnings",
"description": "Manage LEARNINGS.md gotchas and lessons"
},
{
"name": "config",
"description": "Runtime configuration (switch, status, schema)"
},
{
"name": "permissions",
"description": "Permission snapshot and restore"
},
{
"name": "changes",
"description": "Show recent codebase changes"
},
{
"name": "guide",
"description": "Quick start guide"
},
{
"name": "reindex",
"description": "Rebuild context file indices"
},
{
"name": "diag",
"description": "Diagnose extension issues — times each step to find hangs"
"name": "why",
"description": "Show rationale for context design decisions"
}
],
"disambiguation": [
Expand Down
Loading
Loading