docs(03-tier-3-9-providers): create phase plan
This commit is contained in:
382
.planning/phases/03-tier-3-9-providers/03-04-PLAN.md
Normal file
382
.planning/phases/03-tier-3-9-providers/03-04-PLAN.md
Normal file
@@ -0,0 +1,382 @@
|
||||
---
|
||||
phase: 03-tier-3-9-providers
|
||||
plan: 04
|
||||
type: execute
|
||||
wave: 1
|
||||
depends_on: []
|
||||
files_modified:
|
||||
- providers/github-copilot.yaml
|
||||
- providers/cursor.yaml
|
||||
- providers/tabnine.yaml
|
||||
- providers/codeium.yaml
|
||||
- providers/sourcegraph.yaml
|
||||
- providers/codewhisperer.yaml
|
||||
- providers/replit-ai.yaml
|
||||
- providers/codestral.yaml
|
||||
- providers/watsonx.yaml
|
||||
- providers/oracle-ai.yaml
|
||||
- pkg/providers/definitions/github-copilot.yaml
|
||||
- pkg/providers/definitions/cursor.yaml
|
||||
- pkg/providers/definitions/tabnine.yaml
|
||||
- pkg/providers/definitions/codeium.yaml
|
||||
- pkg/providers/definitions/sourcegraph.yaml
|
||||
- pkg/providers/definitions/codewhisperer.yaml
|
||||
- pkg/providers/definitions/replit-ai.yaml
|
||||
- pkg/providers/definitions/codestral.yaml
|
||||
- pkg/providers/definitions/watsonx.yaml
|
||||
- pkg/providers/definitions/oracle-ai.yaml
|
||||
autonomous: true
|
||||
requirements: [PROV-07]
|
||||
must_haves:
|
||||
truths:
|
||||
- "10 Tier 7 Code/Dev Tools provider YAMLs load"
|
||||
- "Sourcegraph Cody uses documented sgp_ prefix pattern"
|
||||
- "GitHub Copilot uses ghu_/gho_ token patterns"
|
||||
artifacts:
|
||||
- path: "providers/github-copilot.yaml"
|
||||
provides: "GitHub Copilot token pattern"
|
||||
contains: "copilot"
|
||||
- path: "providers/sourcegraph.yaml"
|
||||
provides: "Sourcegraph Cody sgp_ pattern"
|
||||
contains: "sgp_"
|
||||
- path: "providers/codestral.yaml"
|
||||
provides: "Codestral (Mistral) keyword detection"
|
||||
contains: "codestral"
|
||||
key_links:
|
||||
- from: "provider keywords[]"
|
||||
to: "Registry Aho-Corasick automaton"
|
||||
via: "NewRegistry()"
|
||||
pattern: "keywords"
|
||||
---
|
||||
|
||||
<objective>
|
||||
Create 10 Tier 7 Code/Dev Tools provider YAMLs — AI coding assistants and IDE plugins (GitHub Copilot, Cursor, Tabnine, Codeium, Sourcegraph Cody, Amazon CodeWhisperer, Replit AI, Codestral, IBM watsonx, Oracle AI).
|
||||
|
||||
Purpose: Satisfy PROV-07 (10 Tier 7 Code/Dev Tools providers).
|
||||
|
||||
Output: 20 YAML files.
|
||||
|
||||
Addresses PROV-07.
|
||||
</objective>
|
||||
|
||||
<execution_context>
|
||||
@$HOME/.claude/get-shit-done/workflows/execute-plan.md
|
||||
@$HOME/.claude/get-shit-done/templates/summary.md
|
||||
</execution_context>
|
||||
|
||||
<context>
|
||||
@.planning/ROADMAP.md
|
||||
@.planning/phases/03-tier-3-9-providers/03-CONTEXT.md
|
||||
@pkg/providers/schema.go
|
||||
|
||||
<interfaces>
|
||||
Schema per pkg/providers/schema.go. Dual-location required. RE2 regex only.
|
||||
GitHub Copilot uses standard GitHub token formats (ghu_, gho_) — keyword anchoring to "copilot" disambiguates from generic GitHub tokens.
|
||||
</interfaces>
|
||||
</context>
|
||||
|
||||
<tasks>
|
||||
|
||||
<task type="auto">
|
||||
<name>Task 1: GitHub Copilot, Cursor, Tabnine, Codeium, Sourcegraph YAMLs</name>
|
||||
<files>providers/github-copilot.yaml, providers/cursor.yaml, providers/tabnine.yaml, providers/codeium.yaml, providers/sourcegraph.yaml, pkg/providers/definitions/github-copilot.yaml, pkg/providers/definitions/cursor.yaml, pkg/providers/definitions/tabnine.yaml, pkg/providers/definitions/codeium.yaml, pkg/providers/definitions/sourcegraph.yaml</files>
|
||||
<read_first>
|
||||
- pkg/providers/schema.go
|
||||
</read_first>
|
||||
<action>
|
||||
providers/github-copilot.yaml:
|
||||
|
||||
```yaml
|
||||
format_version: 1
|
||||
name: github-copilot
|
||||
display_name: GitHub Copilot
|
||||
tier: 7
|
||||
last_verified: "2026-04-05"
|
||||
keywords:
|
||||
- "copilot"
|
||||
- "github-copilot"
|
||||
- "GITHUB_COPILOT_TOKEN"
|
||||
- "api.githubcopilot.com"
|
||||
- "copilot-internal"
|
||||
patterns:
|
||||
- regex: 'ghu_[A-Za-z0-9]{36}'
|
||||
entropy_min: 4.0
|
||||
confidence: medium
|
||||
- regex: 'gho_[A-Za-z0-9]{36}'
|
||||
entropy_min: 4.0
|
||||
confidence: medium
|
||||
verify:
|
||||
method: GET
|
||||
url: https://api.github.com/user
|
||||
headers:
|
||||
Authorization: "token {KEY}"
|
||||
valid_status: [200]
|
||||
invalid_status: [401, 403]
|
||||
```
|
||||
|
||||
providers/cursor.yaml:
|
||||
|
||||
```yaml
|
||||
format_version: 1
|
||||
name: cursor
|
||||
display_name: Cursor AI
|
||||
tier: 7
|
||||
last_verified: "2026-04-05"
|
||||
keywords:
|
||||
- "cursor"
|
||||
- "CURSOR_API_KEY"
|
||||
- "cursor.sh"
|
||||
- "cursor.com"
|
||||
- "cursor-ide"
|
||||
verify:
|
||||
method: GET
|
||||
url: ""
|
||||
headers: {}
|
||||
valid_status: []
|
||||
invalid_status: []
|
||||
```
|
||||
|
||||
providers/tabnine.yaml:
|
||||
|
||||
```yaml
|
||||
format_version: 1
|
||||
name: tabnine
|
||||
display_name: Tabnine
|
||||
tier: 7
|
||||
last_verified: "2026-04-05"
|
||||
keywords:
|
||||
- "tabnine"
|
||||
- "TABNINE_API_KEY"
|
||||
- "api.tabnine.com"
|
||||
- "tabnine-pro"
|
||||
verify:
|
||||
method: GET
|
||||
url: ""
|
||||
headers: {}
|
||||
valid_status: []
|
||||
invalid_status: []
|
||||
```
|
||||
|
||||
providers/codeium.yaml:
|
||||
|
||||
```yaml
|
||||
format_version: 1
|
||||
name: codeium
|
||||
display_name: Codeium (Windsurf)
|
||||
tier: 7
|
||||
last_verified: "2026-04-05"
|
||||
keywords:
|
||||
- "codeium"
|
||||
- "windsurf"
|
||||
- "CODEIUM_API_KEY"
|
||||
- "WINDSURF_API_KEY"
|
||||
- "codeium.com"
|
||||
verify:
|
||||
method: GET
|
||||
url: ""
|
||||
headers: {}
|
||||
valid_status: []
|
||||
invalid_status: []
|
||||
```
|
||||
|
||||
providers/sourcegraph.yaml:
|
||||
|
||||
```yaml
|
||||
format_version: 1
|
||||
name: sourcegraph
|
||||
display_name: Sourcegraph Cody
|
||||
tier: 7
|
||||
last_verified: "2026-04-05"
|
||||
keywords:
|
||||
- "sourcegraph"
|
||||
- "cody"
|
||||
- "SRC_ACCESS_TOKEN"
|
||||
- "SOURCEGRAPH_TOKEN"
|
||||
- "sourcegraph.com"
|
||||
- "sgp_"
|
||||
patterns:
|
||||
- regex: 'sgp_[A-Fa-f0-9]{16,}_[A-Fa-f0-9]{40}'
|
||||
entropy_min: 4.0
|
||||
confidence: high
|
||||
- regex: 'sgp_[A-Fa-f0-9]{40}'
|
||||
entropy_min: 4.0
|
||||
confidence: medium
|
||||
verify:
|
||||
method: GET
|
||||
url: https://sourcegraph.com/.api/graphql
|
||||
headers:
|
||||
Authorization: "token {KEY}"
|
||||
valid_status: [200]
|
||||
invalid_status: [401, 403]
|
||||
```
|
||||
|
||||
Copy all 5 files verbatim to pkg/providers/definitions/.
|
||||
</action>
|
||||
<verify>
|
||||
<automated>cd /home/salva/Documents/apikey && for f in github-copilot cursor tabnine codeium sourcegraph; do diff providers/$f.yaml pkg/providers/definitions/$f.yaml || exit 1; done && go test ./pkg/providers/... -count=1 && go test ./pkg/engine/... -count=1</automated>
|
||||
</verify>
|
||||
<acceptance_criteria>
|
||||
- All 10 files exist
|
||||
- `grep -q 'ghu_' providers/github-copilot.yaml`
|
||||
- `grep -q 'sgp_' providers/sourcegraph.yaml`
|
||||
- `grep -q 'windsurf' providers/codeium.yaml`
|
||||
- `go test ./pkg/providers/... -count=1` passes
|
||||
- `go test ./pkg/engine/... -count=1` passes
|
||||
</acceptance_criteria>
|
||||
<done>5 code assistant providers dual-located.</done>
|
||||
</task>
|
||||
|
||||
<task type="auto">
|
||||
<name>Task 2: CodeWhisperer, Replit AI, Codestral, watsonx, Oracle AI YAMLs</name>
|
||||
<files>providers/codewhisperer.yaml, providers/replit-ai.yaml, providers/codestral.yaml, providers/watsonx.yaml, providers/oracle-ai.yaml, pkg/providers/definitions/codewhisperer.yaml, pkg/providers/definitions/replit-ai.yaml, pkg/providers/definitions/codestral.yaml, pkg/providers/definitions/watsonx.yaml, pkg/providers/definitions/oracle-ai.yaml</files>
|
||||
<read_first>
|
||||
- pkg/providers/schema.go
|
||||
</read_first>
|
||||
<action>
|
||||
providers/codewhisperer.yaml:
|
||||
|
||||
```yaml
|
||||
format_version: 1
|
||||
name: codewhisperer
|
||||
display_name: Amazon CodeWhisperer / Q Developer
|
||||
tier: 7
|
||||
last_verified: "2026-04-05"
|
||||
keywords:
|
||||
- "codewhisperer"
|
||||
- "q-developer"
|
||||
- "amazonq"
|
||||
- "codewhisperer.us-east-1.amazonaws.com"
|
||||
- "CODEWHISPERER_PROFILE_ARN"
|
||||
verify:
|
||||
method: GET
|
||||
url: ""
|
||||
headers: {}
|
||||
valid_status: []
|
||||
invalid_status: []
|
||||
```
|
||||
|
||||
providers/replit-ai.yaml:
|
||||
|
||||
```yaml
|
||||
format_version: 1
|
||||
name: replit-ai
|
||||
display_name: Replit AI (Ghostwriter)
|
||||
tier: 7
|
||||
last_verified: "2026-04-05"
|
||||
keywords:
|
||||
- "replit"
|
||||
- "ghostwriter"
|
||||
- "REPLIT_TOKEN"
|
||||
- "REPLIT_DB_URL"
|
||||
- "replit.com"
|
||||
verify:
|
||||
method: GET
|
||||
url: ""
|
||||
headers: {}
|
||||
valid_status: []
|
||||
invalid_status: []
|
||||
```
|
||||
|
||||
providers/codestral.yaml:
|
||||
|
||||
```yaml
|
||||
format_version: 1
|
||||
name: codestral
|
||||
display_name: Codestral (Mistral Code)
|
||||
tier: 7
|
||||
last_verified: "2026-04-05"
|
||||
keywords:
|
||||
- "codestral"
|
||||
- "CODESTRAL_API_KEY"
|
||||
- "codestral.mistral.ai"
|
||||
- "codestral-latest"
|
||||
patterns:
|
||||
- regex: '[a-zA-Z0-9]{32}'
|
||||
entropy_min: 4.5
|
||||
confidence: low
|
||||
verify:
|
||||
method: GET
|
||||
url: https://codestral.mistral.ai/v1/models
|
||||
headers:
|
||||
Authorization: "Bearer {KEY}"
|
||||
valid_status: [200]
|
||||
invalid_status: [401, 403]
|
||||
```
|
||||
|
||||
providers/watsonx.yaml:
|
||||
|
||||
```yaml
|
||||
format_version: 1
|
||||
name: watsonx
|
||||
display_name: IBM watsonx
|
||||
tier: 7
|
||||
last_verified: "2026-04-05"
|
||||
keywords:
|
||||
- "watsonx"
|
||||
- "WATSONX_API_KEY"
|
||||
- "WATSONX_PROJECT_ID"
|
||||
- "IBM_CLOUD_API_KEY"
|
||||
- "us-south.ml.cloud.ibm.com"
|
||||
- "watsonx.ai"
|
||||
verify:
|
||||
method: POST
|
||||
url: https://iam.cloud.ibm.com/identity/token
|
||||
headers: {}
|
||||
valid_status: [200]
|
||||
invalid_status: [400, 401]
|
||||
```
|
||||
|
||||
providers/oracle-ai.yaml:
|
||||
|
||||
```yaml
|
||||
format_version: 1
|
||||
name: oracle-ai
|
||||
display_name: Oracle Generative AI
|
||||
tier: 7
|
||||
last_verified: "2026-04-05"
|
||||
keywords:
|
||||
- "oci-genai"
|
||||
- "oracle-genai"
|
||||
- "OCI_GENAI"
|
||||
- "generativeai.oci.oraclecloud.com"
|
||||
- "oraclecloud.com"
|
||||
verify:
|
||||
method: GET
|
||||
url: ""
|
||||
headers: {}
|
||||
valid_status: []
|
||||
invalid_status: []
|
||||
```
|
||||
|
||||
Copy all 5 files verbatim to pkg/providers/definitions/.
|
||||
</action>
|
||||
<verify>
|
||||
<automated>cd /home/salva/Documents/apikey && for f in codewhisperer replit-ai codestral watsonx oracle-ai; do diff providers/$f.yaml pkg/providers/definitions/$f.yaml || exit 1; done && go test ./pkg/providers/... -count=1 && go test ./pkg/engine/... -count=1 && test $(grep -l 'tier: 7' providers/*.yaml | wc -l) -eq 10</automated>
|
||||
</verify>
|
||||
<acceptance_criteria>
|
||||
- All 10 files exist
|
||||
- `grep -q 'codewhisperer' providers/codewhisperer.yaml`
|
||||
- `grep -q 'watsonx.ai' providers/watsonx.yaml`
|
||||
- `grep -q 'oraclecloud' providers/oracle-ai.yaml`
|
||||
- Total Tier 7 count = 10
|
||||
- `go test ./pkg/providers/... -count=1` passes
|
||||
</acceptance_criteria>
|
||||
<done>All 10 Tier 7 code/dev tools providers dual-located. PROV-07 satisfied.</done>
|
||||
</task>
|
||||
|
||||
</tasks>
|
||||
|
||||
<verification>
|
||||
`grep -l 'tier: 7' providers/*.yaml | wc -l` returns 10.
|
||||
</verification>
|
||||
|
||||
<success_criteria>
|
||||
- 10 Tier 7 code/dev tools providers created
|
||||
- Sourcegraph uses documented sgp_ high-confidence pattern
|
||||
- Undocumented providers (cursor, tabnine, codeium, codewhisperer, replit-ai, oracle-ai) use keyword-only
|
||||
- No engine regression
|
||||
</success_criteria>
|
||||
|
||||
<output>
|
||||
After completion, create `.planning/phases/03-tier-3-9-providers/03-04-SUMMARY.md`
|
||||
</output>
|
||||
Reference in New Issue
Block a user