cdsr: initial import of deployed stack (runtime 4.133.0, pinned extensions, SSOT vault)
This commit is contained in:
125
q5vault/operations/extensions.md
Normal file
125
q5vault/operations/extensions.md
Normal file
@@ -0,0 +1,125 @@
|
||||
---
|
||||
title: 🧩 Extensions
|
||||
description: Pinned Open VSX extension baseline, lock file semantics, install/audit commands, optional/excluded entries, and the LiteLLM AI provider wiring.
|
||||
source: verified deployment on the loca operator host, 2026-08-19; AI wiring verified in the running IDE 2026-08-20
|
||||
reviewed: 2026-08-20
|
||||
---
|
||||
|
||||
# 🧩 Extension baseline
|
||||
|
||||
## Pinned baseline (six entries)
|
||||
|
||||
| id | version | platform | reason |
|
||||
|---|---|---|---|
|
||||
| `Continue.continue` | 2.1.0 | linux-x64 | Primary open-source AI agent/chat/edit/autocomplete extension. |
|
||||
| `Anthropic.claude-code` | 2.1.235 | linux-x64 | First-party Claude Code IDE integration. |
|
||||
| `ms-python.python` | 2026.4.0 | universal | Python language support expected in this environment. |
|
||||
| `ms-python.debugpy` | 2026.6.0 | linux-x64 | Explicit debugger dependency instead of relying on later bootstrap by the Python extension. |
|
||||
| `ms-toolsai.jupyter` | 2025.9.1 | universal | Notebook workflow support in the browser IDE. |
|
||||
| `ms-azuretools.vscode-containers` | 2.4.5 | universal | Current Container Tools extension; its README states it replaces the older Docker extension functionality. |
|
||||
|
||||
All six come from `config/extensions.lock.json` (registry: `https://open-vsx.org`).
|
||||
|
||||
## Lock file mechanics
|
||||
|
||||
`config/extensions.lock.json` is the single source of truth. Each entry contains `id`, `version`, `platform`, `vsix_url`, `sha256_url`, `reason`, and `mode` (`baseline` or `optional`).
|
||||
|
||||
VSIX cache lives in `tmp/extensions/` with filenames `<id>-<version>@<platform>.vsix`.
|
||||
|
||||
Install script (`scripts/install-extensions.sh`):
|
||||
- requires `python3` (no `jq` on this host)
|
||||
- downloads VSIX + `.sha256` into cache if not present
|
||||
- verifies sha256 before install
|
||||
- installs with `code-server --config config/config.yaml --install-extension <abs .vsix> --force`
|
||||
|
||||
Audit script (`scripts/list-extension-versions.sh`):
|
||||
- runs `code-server --list-extensions --show-versions`
|
||||
- compares against lock file
|
||||
- exits non-zero on `MISSING` or `MISMATCH`
|
||||
- `--include-optional` extends the check to `mode: optional` entries
|
||||
|
||||
## Commands
|
||||
|
||||
```bash
|
||||
# install baseline only
|
||||
cd /home/loca/dev/code-server && ./scripts/install-extensions.sh
|
||||
|
||||
# install baseline + optional
|
||||
./scripts/install-extensions.sh --include-optional
|
||||
|
||||
# audit baseline
|
||||
./scripts/list-extension-versions.sh
|
||||
|
||||
# audit baseline + optional
|
||||
./scripts/list-extension-versions.sh --include-optional
|
||||
```
|
||||
|
||||
## Transitively installed (expected, unpinned)
|
||||
|
||||
| id | version | note |
|
||||
|---|---|---|
|
||||
| `ms-python.vscode-python-envs` | 1.36.0 | Python extension dependency |
|
||||
| `ms-toolsai.jupyter-keymap` | 1.1.2 | Jupyter dependency |
|
||||
| `ms-toolsai.jupyter-renderers` | 1.3.0 | Jupyter dependency |
|
||||
| `ms-toolsai.vscode-jupyter-cell-tags` | 0.1.9 | Jupyter dependency |
|
||||
| `ms-toolsai.vscode-jupyter-slideshow` | 0.1.6 | Jupyter dependency |
|
||||
|
||||
These are not in the lock file and will vary; they are expected by-products of the baseline install.
|
||||
|
||||
## Optional: Cody (enterprise only)
|
||||
|
||||
| id | version | platform | reason |
|
||||
|---|---|---|---|
|
||||
| `sourcegraph.cody-ai` | 1.155.0 | universal | Useful only with a Cody Enterprise account; the Open VSX README states it is no longer available for non-enterprise users. |
|
||||
|
||||
Opt-in:
|
||||
```bash
|
||||
./scripts/install-extensions.sh --include-optional
|
||||
```
|
||||
|
||||
## Exclusions (recorded in lock file)
|
||||
|
||||
| id | reason |
|
||||
|---|---|
|
||||
| `TabNine.tabnine-vscode` | Open VSX listing marks it legacy and states it does not onboard new users. |
|
||||
| `GitHub.copilot` | Microsoft-marketplace-only AI tooling; code-server cannot rely on Microsoft marketplace terms or access. |
|
||||
|
||||
Any Microsoft-marketplace-only AI extensions fall under the same exclusion.
|
||||
|
||||
## Where extension configuration actually lives
|
||||
|
||||
Extension config is not under `data/user/`. The unit sets `HOME=/home/loca`, so extensions that resolve their own paths from `$HOME` write outside the project — see [[architecture/runtime-topology#state-outside-the-project]].
|
||||
|
||||
- Continue writes `/home/loca/.continue/` — its real configuration and history, not `data/user/`
|
||||
- `config.yaml` — mode 600, holds provider settings; never commit it, never paste its contents into the wiki or project files
|
||||
- also `config.ts`, `.continuerc.json`, `index/`, `sessions/`, `dev_data/`, `.utils/`
|
||||
- version nuance for the pinned 2.1.0 build
|
||||
- it still contributes `continue.remoteConfigServerUrl`, `continue.userToken` and `continue.remoteConfigSyncPeriod` for shared/team config sync, sync period defaulting to 60 minutes
|
||||
- none of those three carries a deprecation message; the only deprecated setting is `continue.telemetryEnabled`, whose deprecation message points at Telemetry > Allow Anonymous Telemetry on the extension's User Settings page
|
||||
- so Continue configuration is not local-only in this build; this deployment simply leaves remote sync unconfigured
|
||||
- Claude Code reuses the operator's pre-existing `/home/loca/.claude/` and `/home/loca/.claude.json`, shared with the host Claude Code CLI — it is not deployment-owned state and is not created by the extension install
|
||||
- backup targets: `/home/loca/dev/code-server/` plus `/home/loca/.continue/`; the project directory alone misses Continue's config and chat sessions
|
||||
|
||||
## AI provider wiring (LiteLLM gateway)
|
||||
|
||||
Continue is wired to the host LiteLLM gateway (`lllm`, loopback `127.0.0.1:52001`) — no cloud provider sign-in is used. The gateway is reachable from the IDE because code-server and LiteLLM run on the same host.
|
||||
|
||||
- credential: a dedicated LiteLLM virtual key with alias `cdsr-ide`, scoped to the three model groups below. The master key is never placed in a client config.
|
||||
- key file: `/home/loca/dev/code-server/.ai-credentials` (mode 600, gitignored, single line `litellm_ide_key=`). The value is also present in `/home/loca/.continue/config.yaml` (mode 600). Neither value belongs in this wiki, the repo, or a systemd unit.
|
||||
- client config: `/home/loca/.continue/config.yaml`, three models, all `provider: openai` against `apiBase: http://127.0.0.1:52001/v1`. Shape validated against the extension's own `config-yaml-schema.json` (`name`, `model`, `provider` required; `roles` enum accepts `chat`, `edit`, `apply`, `autocomplete`).
|
||||
|
||||
| model | upstream | roles | live state |
|
||||
|---|---|---|---|
|
||||
| `free` | OpenRouter `nvidia/nemotron-3.5-lightning:free` | chat, edit, apply, autocomplete | working — verified chat round-trip in the Continue panel |
|
||||
| `oss-120b` | Groq `openai/gpt-oss-120b` | chat, edit, apply | reachable, but Groq free-tier caps 8000 tokens/minute and Continue's agent prompt is ~8.6k, so chat returns `RateLimitError` |
|
||||
| `fast` | Groq `llama-3.1-8b-instant` | chat, edit, apply | broken upstream — Groq decommissioned the model, every call returns `404 model_not_found`. Defect belongs to the `lllm` stack config, not this one |
|
||||
|
||||
Practical consequence: select `free` in the model picker. Repairing `oss-120b`/`fast` means editing `dev/lllm/config/config.yaml` (a different stack) — not a cdsr change.
|
||||
|
||||
Workspace Trust gate: a fresh browser profile opens `/home/loca` in Restricted Mode, which silently disables every third-party extension — no Continue or Claude Code icon in the activity bar and no `Continue:` commands in the palette. Fix: Command Palette → `Workspaces: Manage Workspace Trust` → Trust. Symptom is indistinguishable from a failed install, so check trust before re-installing anything.
|
||||
|
||||
Claude Code is deliberately NOT wired to LiteLLM. The gateway does expose an Anthropic-compatible `/v1/messages` passthrough, but the reference probe model (`fast`) fails for the upstream reason above, so the extension stays on its interactive `/login` (browser OAuth) against an Anthropic account. Session state lives in the operator-wide `/home/loca/.claude/` and `/home/loca/.claude.json`, not in `data/user/`.
|
||||
|
||||
Cody (optional, only if enabled): sign in via the Cody panel; requires an Enterprise subscription.
|
||||
|
||||
`"extensions.autoUpdate": "off"` and `"update.mode": "manual"` are the deployed values in `data/user/User/settings.json` — code-server normalized the seeded `false` to the string `"off"` at first run, and `"off"` and `false` mean the same thing (auto-update disabled). Version drift only happens by updating `config/extensions.lock.json` and re-running the install script.
|
||||
Reference in New Issue
Block a user