mirror of
https://github.com/garrytan/gstack.git
synced 2026-09-13 08:29:04 +02:00
feat(code-intelligence): provider contract Phase 1 — GBrain, Sourcebot, Graphify behind one ask-once offer
Open a large repo (1,000+ tracked files) and gstack can offer code intelligence ONCE, with the trade-offs stated: GBrain (semantic memory + code, sends content to YOUR gbrain DB, per-repo consent), Sourcebot (self-hosted whole-repo search, local on localhost), Graphify (local tree-sitter graph, nothing leaves the machine, user-installed), or No indexing — a decline persists machine-wide so no skill ever asks again. Small repos never see the question; grep stays the always-working default and provider-OFF degrades silently (PROVIDER_UNAVAILABLE -> file-only). Ported: lib/code-intelligence/ (contract + 3 verified adapters + picker + selection + suggest, MIT headers), the gstack-code-intelligence CLI (suggest/select/consent/index/search/status), 31 offline tests (fake CLI shims + injected fetch), and the provider-contract design doc. Verified live on this repo: suggest fires at 1,233 files with real availability detail per provider. Hardened per review: the per-remote trust store is the SINGLE consent authority — a gstack-gbrain-repo-policy deny tier vetoes any recorded code-intelligence consent (fail-closed on an unreadable store, pinned by three tests); both send-capable adapters are registered as fail-closed MODULE_SINKS in the egress tripwire so a refactor can't drop their receipts; and local-compute vs remote-send consents are never bundled. setup-gbrain gains the provider-choice Step 0. The fork's Phases 2-4 glue-collapse is explicitly NOT ported. Ported from time-attack/gstack (GStack 2); consent unification ours. Co-authored-by: Sina Matian <sina@time-attack.dev> Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Sina Matian
Claude Fable 5
parent
53deeeb116
commit
3aba218303
@@ -915,6 +915,38 @@ Step 1.5 — fall through to Step 2 (where `no-cli` triggers Step 3 install and
|
||||
|
||||
---
|
||||
|
||||
## Step 1.7: Code-intelligence provider choice (Step 0 of indexing)
|
||||
|
||||
gbrain is one of THREE code-intelligence providers gstack can use; the offer
|
||||
gate decides whether this repo is even worth indexing:
|
||||
|
||||
```bash
|
||||
bun ~/.claude/skills/gstack/bin/gstack-code-intelligence suggest --json
|
||||
```
|
||||
|
||||
- `"offer": false` with reason `small-repo` → grep is already fast here; say
|
||||
so in one line and continue with this skill only if the user asked for
|
||||
gbrain by name.
|
||||
- `"offer": false` with reason `provider-selected` or `declined` → the
|
||||
machine-wide question was already answered; apply it silently and continue.
|
||||
- `"offer": true` → present the returned options ONCE via AskUserQuestion:
|
||||
**GBrain** (recommended — semantic memory + code, sends repo content to
|
||||
YOUR gbrain DB, per-repo consent), **Sourcebot** (self-hosted whole-repo
|
||||
search, local when on localhost), **Graphify** (local tree-sitter graph,
|
||||
nothing leaves the machine, user installs it), or **No indexing**. Record
|
||||
the choice: `gstack-code-intelligence select <provider|none>` — `none`
|
||||
persists the decline so NO skill ever asks again, on any repo
|
||||
(re-enable: `gstack-code-intelligence select <provider>`). Local-compute
|
||||
and remote-send providers are separate consents — never bundle them.
|
||||
- Per-repo send consent (GBrain/Sourcebot) is recorded with
|
||||
`gstack-code-intelligence consent <repo> yes|no` and is ALWAYS vetoed by a
|
||||
`deny` tier in gstack-gbrain-repo-policy — the trust store is the single
|
||||
authority for whether code leaves a repo.
|
||||
|
||||
If the user picked GBrain (or asked for this skill directly), continue below.
|
||||
If they picked Sourcebot/Graphify, run `gstack-code-intelligence index <repo>`
|
||||
and stop — the rest of this skill is gbrain-specific.
|
||||
|
||||
## Step 2: Pick a path (AskUserQuestion)
|
||||
|
||||
Only fire this if Step 1 shows no existing working config AND no shortcut
|
||||
|
||||
@@ -161,6 +161,38 @@ Step 1.5 — fall through to Step 2 (where `no-cli` triggers Step 3 install and
|
||||
|
||||
---
|
||||
|
||||
## Step 1.7: Code-intelligence provider choice (Step 0 of indexing)
|
||||
|
||||
gbrain is one of THREE code-intelligence providers gstack can use; the offer
|
||||
gate decides whether this repo is even worth indexing:
|
||||
|
||||
```bash
|
||||
bun ~/.claude/skills/gstack/bin/gstack-code-intelligence suggest --json
|
||||
```
|
||||
|
||||
- `"offer": false` with reason `small-repo` → grep is already fast here; say
|
||||
so in one line and continue with this skill only if the user asked for
|
||||
gbrain by name.
|
||||
- `"offer": false` with reason `provider-selected` or `declined` → the
|
||||
machine-wide question was already answered; apply it silently and continue.
|
||||
- `"offer": true` → present the returned options ONCE via AskUserQuestion:
|
||||
**GBrain** (recommended — semantic memory + code, sends repo content to
|
||||
YOUR gbrain DB, per-repo consent), **Sourcebot** (self-hosted whole-repo
|
||||
search, local when on localhost), **Graphify** (local tree-sitter graph,
|
||||
nothing leaves the machine, user installs it), or **No indexing**. Record
|
||||
the choice: `gstack-code-intelligence select <provider|none>` — `none`
|
||||
persists the decline so NO skill ever asks again, on any repo
|
||||
(re-enable: `gstack-code-intelligence select <provider>`). Local-compute
|
||||
and remote-send providers are separate consents — never bundle them.
|
||||
- Per-repo send consent (GBrain/Sourcebot) is recorded with
|
||||
`gstack-code-intelligence consent <repo> yes|no` and is ALWAYS vetoed by a
|
||||
`deny` tier in gstack-gbrain-repo-policy — the trust store is the single
|
||||
authority for whether code leaves a repo.
|
||||
|
||||
If the user picked GBrain (or asked for this skill directly), continue below.
|
||||
If they picked Sourcebot/Graphify, run `gstack-code-intelligence index <repo>`
|
||||
and stop — the rest of this skill is gbrain-specific.
|
||||
|
||||
## Step 2: Pick a path (AskUserQuestion)
|
||||
|
||||
Only fire this if Step 1 shows no existing working config AND no shortcut
|
||||
|
||||
Reference in New Issue
Block a user