-
Notifications
You must be signed in to change notification settings - Fork 2
Release server/v0.6.0 + cli/v0.6.0 — workspaces, hybrid search, auth model, managed tunnels #54
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Changes from all commits
Commits
Show all changes
77 commits
Select commit
Hold shift + click to select a range
8d0e3da
feat(server): PR1 — workspaces skeleton (CRUD + encrypted GitHub tokens)
dvcdsys fabafb0
feat(server): PR2 — workspace_repos + jobs + clone/index pipeline
dvcdsys e598b23
feat(server): PR3 — GitHub webhooks (HMAC receiver + optional auto-re…
dvcdsys f244643
feat(server): PR4 — call_edges + eval harness
dvcdsys ec32744
feat(server): PR5 — Louvain communities + workspace centroids
dvcdsys 207bfaf
feat(server): PR6 — two-stage workspace search endpoint
dvcdsys e1aa785
feat: PR7 — workspace CLI + skill + dashboard search dialog
dvcdsys 5db28fd
feat: PR8 — workspace discovery (name-first CLI grammar + dashboard e…
dvcdsys 57e091d
fix(github-tokens): derive scopes from GitHub instead of user input
dvcdsys 58756f8
feat(workspaces): in-dashboard add-repo flow with live progress
dvcdsys 0a3a21d
feat(workspaces): account/org selector in add-repo flow
dvcdsys 51ddf7e
fix(workspaces): truncate long repo names in the picker row
dvcdsys f00e3d3
feat(chunksfts): add FTS5 BM25 mirror of every indexed chunk
dvcdsys 575d325
feat(workspaces): hybrid BM25+dense workspace search + project gate
dvcdsys 5c27abc
feat(workspaces): flag pre-FTS-mirror repos so the dashboard prompts …
dvcdsys a982f40
docs(skills): rewrite cix-workspace skill around hybrid + 3-question …
dvcdsys eb37f60
chore(privacy): anonymize examples in tests and docs
dvcdsys 96b487d
feat(workspaces): calibrate search defaults, fix chunks/panel consist…
dvcdsys 8ec4493
feat(skills/cix-workspace): trust rules + cix-workspace-investigator …
dvcdsys 9a78e1d
docs(workspaces): add workspaces.md guide + README dashboard notes
dvcdsys 5d69fa8
ci(prerelease): add CUDA-only develop image build + gate develop PRs
dvcdsys a2b60f2
fix(server): restore dashboard/dist/.gitkeep dropped in 33da39b
dvcdsys c5a1bd9
feat(plugins): add cix plugin sources from feat/claude-code-plugin sn…
dvcdsys 7e22ba7
fix(plugins/cix): match Bash grep/rg in PreToolUse hook
dvcdsys af6f4b6
feat(plugins/cix): bundle cix-workspace skill + investigator sub-agen…
dvcdsys 92dd135
ci(prerelease): add CLI develop channel + install-develop.sh
dvcdsys e433fee
refactor(workspaces): split workspace_repos into git_repos + workspac…
dvcdsys 6a27620
chore(dashboard): untrack tsconfig.tsbuildinfo
dvcdsys b5c66dd
fix(cli): port workspace commands to /workspaces/{id}/projects API
dvcdsys 3d413ad
fix(dashboard): align ProjectWorkspaceEntry type with server payload
dvcdsys 19226aa
fix(db): crash-safe split migration + schema_migrations versioning
dvcdsys 9dac327
feat(server): startup audit for stale webhook URLs (4a)
dvcdsys 95e5716
fix(server): compensating delete + atomic Link for gitrepos/workspace…
dvcdsys 903d48f
fix(server): tighten webhook validation + zero PAT after use
dvcdsys b264af2
docs(workspaces): align prose with new schema + dedupe SKILL.md
dvcdsys bff374b
chore(server): gitignore the cix-server binary at server root
dvcdsys 596748e
feat(dashboard): Reindex button + indexing indicator on project page
dvcdsys f621aca
fix(plugin): switch grep-nudge to PostToolUse, add find, drop slash-c…
dvcdsys b650a47
build: add `make plugin-reload-local` for end-to-end plugin reinstall
dvcdsys 93e4964
fix(server): flip project status to indexing synchronously in Reindex…
dvcdsys 6477d3f
docs: refactor README (-33%) and sync /doc/ with develop features
dvcdsys 6e760f8
feat(cli): add --name/-n flag for exact project lookup by registered ID
dvcdsys 64d7b00
docs(skill): teach cix-workspace + investigator about remote-only pro…
dvcdsys b619a59
chore(server): drop obsolete dashboard/dist/.gitkeep marker
dvcdsys c0a64b4
fix(plugin): repair hook regression tests + docs; widen grep-nudge de…
dvcdsys 3c5fc5a
ci(plugin): include develop branch in bats workflow triggers
dvcdsys 551a55f
docs(contributing): document branch model, commit style, plugin testing
dvcdsys c530d65
feat(server): incremental reindex via git tree.Diff + always-on works…
dvcdsys bb1aae6
fix(server): restore dashboard/dist/.gitkeep so CI go vet doesn't fail
dvcdsys 0c68166
feat(plugin): token-economy guidance + optional CIX_MAX_OUTPUT_LINES cap
dvcdsys 3a724d1
fix(plugin): pin auto-installer + three-state cix-status cache (Phase 5)
dvcdsys 01bed1a
feat(server): configurable log level via CIX_LOG_LEVEL
dvcdsys 2300997
feat(server): Managed Tunnels (Cloudflare + ngrok) for webhook ingres…
dvcdsys 09dfd2e
fix(server): address PR #45 review — auth, secret handling, installer…
dvcdsys f6c3b46
feat(server): git polling sync as webhook alternative for non-admin r…
dvcdsys f07d632
fix(server): address PR #46 review — gofmt + migration-number comments
dvcdsys 98c2290
fix(dashboard): treat CIX_PUBLIC_URL as a valid webhook origin (tunne…
dvcdsys b0aa920
feat(dashboard): manage project sync method from the project page
dvcdsys c48bf0c
fix(dashboard): make Webhook actually configurable from the project page
dvcdsys d3c322b
fix(server): admin-gate sync switcher + preserve manual webhooks
dvcdsys 3bd1d4e
feat(server): Sync + Force Stop for external projects
dvcdsys 65a0701
fix(dashboard): stop vite build from deleting dist/.gitkeep
dvcdsys 1e676b8
feat(dashboard): live indexing progress for external projects
dvcdsys 82fa246
fix(dashboard): use stable composite key for current-files list
dvcdsys 989fe48
feat(dashboard): confirm before full reindex
dvcdsys bb42a05
feat(config): CIX_REPOS_DIR to set the GitHub clone directory
dvcdsys 21d243d
sync btn on project card
dvcdsys e275c4a
feat(auth): ownership + view-group access model and per-machine proje…
dvcdsys 626894b
fix(server/cuda): pin llama.cpp by digest + copy all /app libs
dvcdsys 58846a8
ci(server/cuda): warn when the pinned llama.cpp digest goes stale
dvcdsys e4d1ab3
fix(httpapi): admin-gate tunnels read endpoints and webhooks/origin
dvcdsys b51c454
fix(dashboard): hide GitHub Integration page + Add-repo button from n…
dvcdsys 46059ac
fix(httpapi): gate ListProjectWorkspaces on project access + filter t…
dvcdsys 5025ebb
fix(httpapi): expose owner_user_id in project + workspace JSON responses
dvcdsys 7ef6888
fix(openapi): make owner_user_id required-but-nullable on Project + W…
dvcdsys 4fd85de
fix(httpapi): allow group-shared users to read /projects/{hash}/index…
dvcdsys 4536ac1
fix(server/deps): bump x/crypto v0.52.0 + Go 1.25.10 to clear 9 govul…
dvcdsys File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,25 @@ | ||
| { | ||
| "$schema": "https://json.schemastore.org/claude-code-marketplace.json", | ||
| "name": "code-index", | ||
| "owner": { | ||
| "name": "dvcdsys", | ||
| "email": "dvcdsys@gmail.com" | ||
| }, | ||
| "description": "Marketplace for cix — semantic code search and navigation tooling for Claude Code", | ||
| "plugins": [ | ||
| { | ||
| "name": "cix", | ||
| "source": "./plugins/cix", | ||
| "description": "Semantic code search and navigation. Bundles the cix CLI, slash commands, behavioral hooks, and the experimental cix-workspace skill + cix-workspace-investigator sub-agent for cross-project research across cix workspaces.", | ||
| "author": { | ||
| "name": "dvcdsys" | ||
| }, | ||
| "homepage": "https://github.com/dvcdsys/code-index", | ||
| "repository": "https://github.com/dvcdsys/code-index", | ||
| "license": "MIT", | ||
| "keywords": ["search", "code-search", "semantic", "navigation", "indexing", "embeddings", "workspace", "cross-project", "sub-agent"], | ||
| "category": "developer-tools", | ||
| "tags": ["search", "indexing", "ai", "embeddings", "workspace", "cross-project"] | ||
| } | ||
| ] | ||
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,78 @@ | ||
| name: Plugin Tests | ||
|
|
||
| # Trigger only when plugin files change — server/CLI/dashboard work | ||
| # is unaffected and shouldn't run plugin tests. Branch list matches | ||
| # ci-cli.yml / ci-server.yml so plugin work lands on equal footing | ||
| # (the integration branch is `develop`, not feature branches). | ||
| on: | ||
| push: | ||
| branches: [main, develop] | ||
| paths: | ||
| - 'plugins/cix/**' | ||
| - '.claude-plugin/**' | ||
| - '.github/workflows/ci-plugin.yml' | ||
| pull_request: | ||
| branches: [main, develop] | ||
| paths: | ||
| - 'plugins/cix/**' | ||
| - '.claude-plugin/**' | ||
| - '.github/workflows/ci-plugin.yml' | ||
|
|
||
| # Minimum permissions required by the workflow (CodeQL workflow-permissions advisory). | ||
| # Read-only on repo contents is enough — we don't push code, comments, or releases. | ||
| permissions: | ||
| contents: read | ||
|
|
||
| jobs: | ||
| test: | ||
| name: bats + shellcheck on ${{ matrix.os }} | ||
| runs-on: ${{ matrix.os }} | ||
| strategy: | ||
| fail-fast: false | ||
| matrix: | ||
| os: [ubuntu-latest, macos-latest] | ||
|
|
||
| steps: | ||
| - uses: actions/checkout@v4 | ||
|
|
||
| - name: Install bats, jq, shellcheck (Linux) | ||
| if: runner.os == 'Linux' | ||
| run: | | ||
| sudo apt-get update | ||
| sudo apt-get install -y bats jq shellcheck | ||
|
|
||
| - name: Install bats, jq, shellcheck (macOS) | ||
| if: runner.os == 'macOS' | ||
| run: | | ||
| brew install bats-core jq shellcheck | ||
|
|
||
| - name: Verify bats version | ||
| run: bats --version | ||
|
|
||
| - name: Run bats test suites | ||
| run: bats --tap plugins/cix/tests/*.bats | ||
|
|
||
| - name: ShellCheck on hook scripts | ||
| run: | | ||
| # `--severity=warning` filters out style nags; `-x` follows | ||
| # sourced files (we don't source any in v0.1, but defensive). | ||
| shellcheck --severity=warning plugins/cix/scripts/*.sh | ||
|
|
||
| - name: Validate JSON manifests with jq | ||
| run: | | ||
| jq . .claude-plugin/marketplace.json | ||
| jq . plugins/cix/.claude-plugin/plugin.json | ||
| jq . plugins/cix/hooks/hooks.json | ||
|
|
||
| - name: Verify symlink integrity | ||
| run: | | ||
| # The bin/cix symlink MUST point at scripts/cix-wrapper.sh. | ||
| if [[ ! -L plugins/cix/bin/cix ]]; then | ||
| echo "::error::plugins/cix/bin/cix is not a symlink" | ||
| exit 1 | ||
| fi | ||
| target=$(readlink plugins/cix/bin/cix) | ||
| if [[ "$target" != "../scripts/cix-wrapper.sh" ]]; then | ||
| echo "::error::bin/cix points to '$target' (expected '../scripts/cix-wrapper.sh')" | ||
| exit 1 | ||
| fi |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,65 @@ | ||
| name: "llama.cpp pin freshness" | ||
|
|
||
| # The CUDA image pins ghcr.io/ggml-org/llama.cpp:server-cuda by digest for | ||
| # reproducible builds (see server/Dockerfile.cuda). That pin would otherwise | ||
| # rot silently. This job checks weekly whether upstream has shipped a newer | ||
| # build and, if so, opens (or updates) a tracking issue so the bump doesn't | ||
| # get forgotten. The same check also runs on every CUDA image build as a | ||
| # build-log annotation — this workflow is the persistent, can't-miss reminder. | ||
| on: | ||
| schedule: | ||
| - cron: "0 8 * * 1" # Mondays 08:00 UTC | ||
| workflow_dispatch: | ||
|
|
||
| permissions: | ||
| contents: read | ||
| issues: write | ||
|
|
||
| jobs: | ||
| check: | ||
| name: Check pinned llama.cpp digest | ||
| runs-on: ubuntu-latest | ||
| steps: | ||
| - name: Checkout | ||
| uses: actions/checkout@v4 | ||
|
|
||
| - name: Set up Buildx | ||
| uses: docker/setup-buildx-action@v3 | ||
|
|
||
| - name: Compare pinned vs upstream digest | ||
| id: check | ||
| run: server/scripts/check-llama-pin.sh server/Dockerfile.cuda | ||
|
|
||
| - name: Open or update reminder issue | ||
| if: steps.check.outputs.stale == 'true' | ||
| env: | ||
| GH_TOKEN: ${{ github.token }} | ||
| PINNED: ${{ steps.check.outputs.pinned }} | ||
| CURRENT: ${{ steps.check.outputs.current }} | ||
| run: | | ||
| set -euo pipefail | ||
| title="chore(server/cuda): bump pinned llama.cpp digest" | ||
| body="$(cat <<EOF | ||
| Upstream \`ghcr.io/ggml-org/llama.cpp:server-cuda\` has moved past the digest pinned in \`server/Dockerfile.cuda\`. | ||
|
|
||
| | | digest | | ||
| |---|---| | ||
| | pinned | \`${PINNED}\` | | ||
| | current | \`${CURRENT}\` | | ||
|
|
||
| ### To update | ||
| 1. Bump the \`FROM ghcr.io/ggml-org/llama.cpp:server-cuda@sha256:…\` digest in \`server/Dockerfile.cuda\` to \`${CURRENT}\`. | ||
| 2. \`cd server && make scout-cuda\` to rebuild + scan (the shared-lib layout may have changed — the Dockerfile copies all \`/app/*.so*\` to stay robust). | ||
| 3. Confirm \`/app/llama-server\` still resolves all libs, then promote. | ||
|
|
||
| _Auto-filed by the weekly \`llama.cpp pin freshness\` workflow._ | ||
| EOF | ||
| )" | ||
| existing="$(gh issue list --state open --search "$title in:title" --json number --jq '.[0].number // empty')" | ||
| if [ -n "$existing" ]; then | ||
| echo "Updating existing issue #$existing" | ||
| gh issue comment "$existing" --body "$body" | ||
| else | ||
| echo "Opening new reminder issue" | ||
| gh issue create --title "$title" --body "$body" | ||
| fi | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,136 @@ | ||
| name: "Pre-release: CLI (develop)" | ||
|
|
||
| # Triggered on push to `develop` (i.e. PR merges; direct pushes are blocked | ||
| # by branch protection) with CLI-touching changes. Force-updates the floating | ||
| # `cli/develop` GitHub release with fresh artifacts for all four platforms so | ||
| # `install-develop.sh` always pulls the latest develop build. | ||
| # | ||
| # Stable releases live under `cli/v*` and are handled by release-cli.yml — | ||
| # this workflow never touches those tags. The floating tag has no leading | ||
| # `v`, so install.sh's `^cli/v` filter naturally ignores it. | ||
| on: | ||
| push: | ||
| branches: [develop] | ||
| paths: | ||
| - "cli/**" | ||
| - ".github/workflows/prerelease-cli.yml" | ||
|
|
||
| permissions: | ||
| contents: write | ||
|
|
||
| jobs: | ||
| build: | ||
| name: Build (${{ matrix.target }}) | ||
| runs-on: ${{ matrix.runner }} | ||
| strategy: | ||
| fail-fast: false | ||
| matrix: | ||
| include: | ||
| - target: linux-amd64 | ||
| runner: ubuntu-latest | ||
| goos: linux | ||
| goarch: amd64 | ||
| cgo: "0" | ||
| - target: linux-arm64 | ||
| runner: ubuntu-latest | ||
| goos: linux | ||
| goarch: arm64 | ||
| cgo: "0" | ||
| - target: darwin-amd64 | ||
| runner: macos-latest | ||
| goos: darwin | ||
| goarch: amd64 | ||
| cgo: "1" | ||
| - target: darwin-arm64 | ||
| runner: macos-latest | ||
| goos: darwin | ||
| goarch: arm64 | ||
| cgo: "1" | ||
| steps: | ||
| - name: Checkout | ||
| uses: actions/checkout@v4 | ||
|
|
||
| - name: Set up Go | ||
| uses: actions/setup-go@v5 | ||
| with: | ||
| go-version-file: cli/go.mod | ||
| cache-dependency-path: cli/go.sum | ||
|
|
||
| - name: Build | ||
| working-directory: cli | ||
| env: | ||
| GOOS: ${{ matrix.goos }} | ||
| GOARCH: ${{ matrix.goarch }} | ||
| CGO_ENABLED: ${{ matrix.cgo }} | ||
| run: | | ||
| # Stamp short SHA so `cix --version` distinguishes one dev build | ||
| # from another even though the tag is floating. | ||
| VERSION="develop-${GITHUB_SHA::7}" | ||
| go build \ | ||
| -ldflags="-s -w -X 'github.com/anthropics/code-index/cli/cmd.Version=${VERSION}'" \ | ||
| -o "dist/cix" . | ||
|
|
||
| - name: Package | ||
| working-directory: cli/dist | ||
| run: | | ||
| tar -czf "cix-${{ matrix.target }}.tar.gz" cix | ||
| rm cix | ||
|
|
||
| - name: Upload artifacts | ||
| uses: actions/upload-artifact@v4 | ||
| with: | ||
| name: cix-${{ matrix.target }} | ||
| path: cli/dist/cix-${{ matrix.target }}.tar.gz | ||
|
|
||
| release: | ||
| name: Publish develop release | ||
| needs: [build] | ||
| runs-on: ubuntu-latest | ||
| steps: | ||
| - name: Checkout | ||
| uses: actions/checkout@v4 | ||
|
|
||
| - name: Download artifacts | ||
| uses: actions/download-artifact@v4 | ||
| with: | ||
| path: artifacts | ||
| merge-multiple: true | ||
|
|
||
| - name: Compute checksums | ||
| working-directory: artifacts | ||
| run: sha256sum * > checksums.txt | ||
|
|
||
| - name: Delete previous develop release + tag | ||
| env: | ||
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||
| run: | | ||
| # `|| true` because the release/tag may not exist on the first run. | ||
| gh release delete cli/develop \ | ||
| --cleanup-tag --yes \ | ||
| --repo "${{ github.repository }}" || true | ||
|
|
||
| - name: Create develop release | ||
| uses: softprops/action-gh-release@v2 | ||
|
dvcdsys marked this conversation as resolved.
Dismissed
|
||
| with: | ||
| tag_name: cli/develop | ||
| target_commitish: develop | ||
| name: "CLI develop (${{ github.sha }})" | ||
| prerelease: true | ||
| make_latest: "false" | ||
| files: | | ||
| artifacts/*.tar.gz | ||
| artifacts/checksums.txt | ||
| body: | | ||
| **Floating develop release** — force-updated on every merge to | ||
| `develop` that touches `cli/**`. Not a stable release. | ||
|
|
||
| Built from commit ${{ github.sha }}. | ||
|
|
||
| ## Install | ||
|
|
||
| ```bash | ||
| curl -fsSL https://raw.githubusercontent.com/dvcdsys/code-index/main/install-develop.sh | bash | ||
| ``` | ||
|
|
||
| Re-run the same command later to pick up the next develop build. | ||
| For stable, use [`install.sh`](https://github.com/dvcdsys/code-index/blob/main/install.sh) instead. | ||
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.