Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
5e8af02
chore: enforce zero-tolerance linting and formatting across all file …
Fahad090NP Aug 8, 2026
fb5ca6a
fix(hooks): resolve node/npm/npx from nvm when PATH is stripped
Fahad090NP Aug 8, 2026
b4c3a33
fix(hooks): lint before format so the formatter can't mask errors
Fahad090NP Aug 9, 2026
a4ce3af
chore(scripts): use .js lint/format with styled alphabetical output
Fahad090NP Aug 9, 2026
97544e9
chore(package): drop deprecated managementCommand from model providers
Fahad090NP Aug 9, 2026
3ee512e
chore(deps): bump @types/node to 26.2 and eslint to 10.8.1
Fahad090NP Aug 9, 2026
f18548b
chore(scripts): rename remaining mjs/mts scripts to js/ts
Fahad090NP Aug 9, 2026
1304702
chore(deps): refresh lockfile for transitive updates
Fahad090NP Aug 9, 2026
fff5027
Merge branch 'main' into chore/strict-lint
Fahad090NP Aug 11, 2026
ffce99d
chore(eslint): keep type-aware strictness, drop style-only rules
Fahad090NP Aug 11, 2026
a84402a
chore(lint): run unit tests as part of the lint command
Fahad090NP Aug 11, 2026
a4ef449
feat(hooks): intelligent staged lint — changed files plus their depen…
Fahad090NP Aug 11, 2026
6cf7714
feat(hooks): run intelligent staged lint in pre-commit
Fahad090NP Aug 11, 2026
2320638
Merge branch 'main' into chore/strict-lint
Fahad090NP Aug 11, 2026
37d2bb6
style(docs): prettier-format release-cut docs merged from main
Fahad090NP Aug 11, 2026
5246434
chore(eslint): allow @ts-expect-error for proposed-API workarounds
Fahad090NP Aug 12, 2026
22e04b7
style(tests): drop the void prefix from describe/it/test calls
Fahad090NP Aug 12, 2026
514a63f
chore(config): use standard file extensions everywhere
Fahad090NP Aug 12, 2026
76570cc
chore(config): prefer TypeScript over JavaScript everywhere
Fahad090NP Aug 12, 2026
c817871
chore(config): rename markdownlint config to standard .json
Fahad090NP Aug 12, 2026
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
38 changes: 38 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
# https://editorconfig.org
# Universal style enforcement for EVERY file type in the repo.
# editorconfig-checker verifies all of these rules and fails on any violation.

root = true

[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
indent_style = space
indent_size = 2

# Shell scripts (husky hooks) — POSIX sh, 2-space indent
[.husky/*]
indent_style = space
indent_size = 2

# GitHub Actions YAML uses 2-space indentation
[*.{yml,yaml}]
indent_style = space
indent_size = 2

# Binary media files must be left untouched
[*.{png,gif,jpg,jpeg,ico}]
insert_final_newline = false
trim_trailing_whitespace = false

# Markdown: no trailing whitespace, final newline required.
# Indentation is NOT enforced here: markdown leading whitespace is content
# (ASCII-art diagrams, nested-list alignment), not code style — markdownlint
# governs markdown formatting instead.
[*.md]
indent_style = unset
indent_size = unset
trim_trailing_whitespace = true
insert_final_newline = true
8 changes: 4 additions & 4 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
version: 2
updates:
- package-ecosystem: "npm"
directory: "/"
- package-ecosystem: npm
directory: /
schedule:
interval: "monthly"
interval: monthly
open-pull-requests-limit: 3
labels:
- "dependencies"
- dependencies
3 changes: 3 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,9 @@ jobs:
- name: 🔎 Lint source and maintenance docs
run: npm run lint

- name: 🎨 Check formatting
run: npm run format:check

- name: 🧪 Run tests
run: npm test

Expand Down
4 changes: 2 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@ node_modules/
out/
*.vsix
.DS_Store
scripts/validate-models.mjs
scripts/validate-models.mjs.map
scripts/validate-models.js
scripts/validate-models.js.map
tmp/
25 changes: 24 additions & 1 deletion .husky/pre-commit
Original file line number Diff line number Diff line change
@@ -1 +1,24 @@
npx lint-staged
#!/usr/bin/env sh
# Fail fast: a failing step aborts the commit so the formatter can't mask a lint error.
set -e

# Some commit UIs run hooks with a stripped PATH that omits nvm's bin dir, so
# npx/npm can be missing here. Resolve them so the gate never silently skips.
if ! command -v npx >/dev/null 2>&1; then
node_bin="${NVM_BIN:-}"
if [ -z "$node_bin" ] || [ ! -x "$node_bin/npx" ]; then
node_bin="$(find "$HOME/.nvm/versions/node" -maxdepth 3 -type d -name bin 2>/dev/null | sort -V | tail -n 1)"
fi
if [ -n "$node_bin" ] && [ -x "$node_bin/npx" ]; then
export PATH="$node_bin:$PATH"
fi
fi

# Zero-tolerance gate on exactly what this change can affect: the staged
# files plus the files that import them (see scripts/staged-lint.ts). Runs
# BEFORE formatting so the linter sees the file as written. The full-tree
# lint (including tests) runs in CI and on demand via `npm run lint`.
npx tsx scripts/staged-lint.ts

# Format changed files (code + non-code) after linting passes.
npx lint-staged
6 changes: 3 additions & 3 deletions .markdownlint-cli2.jsonc → .markdownlint-cli2.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@
"config": {
"MD013": false,
"MD024": {
"siblings_only": true,
"siblings_only": true
},
"MD033": false,
"MD041": false,
"MD060": false,
"MD060": false
},
"gitignore": true,
"gitignore": true
}
5 changes: 5 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"files.associations": {
"**/.husky/*": "shellscript"
}
}
4 changes: 2 additions & 2 deletions .vscodeignore
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
.gitignore
.github/**
.husky/**
.markdownlint-cli2.jsonc
.markdownlint-cli2.json
.prettierrc.json
.vscode/**
.vscode-test/**
docs/**/*.md
eslint.config.mjs
eslint.config.ts
node_modules/**
!node_modules/@silvia-odwyer/
!node_modules/@silvia-odwyer/photon-node/
Expand Down
42 changes: 21 additions & 21 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -344,28 +344,28 @@ Provider diagnostics also include the VS Code/extension versions, extension host

## 🔧 Settings

| Setting | Default | Description |
| ----------------------------------------- | -------- | -------------------------------------------------------------------------------- |
| `opencodego.temperature` | `0.2` | Sampling temperature (`0`–`2`) |
| `opencodego.maxTokens` | `0` | Max output token override (`0` = per-model max) |
| `opencodego.maxInputTokens` | `0` | Context window override (`0` = per-model default) |
| `opencodego.debugReasoning` | `false` | Log `reasoning_content` to Output panel |
| `opencodego.requestTimeoutSeconds` | `600` | Total request timeout |
| `opencodego.streamIdleTimeoutSeconds` | `120` | Cancel if stream goes idle |
| `opencodego.showUsageStatusBar` | `true` | Show usage summary in status bar |
| `opencodego.showProviderPrefix` | `true` | Include `OpenCode Go` / `OpenCode Zen` in model names |
| Setting | Default | Description |
| ----------------------------------------- | -------- | ---------------------------------------------------------------------------------------------------------------------- |
| `opencodego.temperature` | `0.2` | Sampling temperature (`0`–`2`) |
| `opencodego.maxTokens` | `0` | Max output token override (`0` = per-model max) |
| `opencodego.maxInputTokens` | `0` | Context window override (`0` = per-model default) |
| `opencodego.debugReasoning` | `false` | Log `reasoning_content` to Output panel |
| `opencodego.requestTimeoutSeconds` | `600` | Total request timeout |
| `opencodego.streamIdleTimeoutSeconds` | `120` | Cancel if stream goes idle |
| `opencodego.showUsageStatusBar` | `true` | Show usage summary in status bar |
| `opencodego.showProviderPrefix` | `true` | Include `OpenCode Go` / `OpenCode Zen` in model names |
| `opencodego.visionProxyWholeConversation` | `false` | Vision proxy: describe the whole conversation instead of only the message with a new image (more context, more tokens) |
| `opencodego.freeOnly` | `true` | Zen: free models only. `false` = include paid |
| `opencodego.agentsWindow` | `true` | Expose agent-host model variants (`targetChatSessionType`) for the Agents window |
| `opencodego.showAgentModelsInManagePanel` | `false` | Show agent vendors in Manage Language Models panel |
| `opencodego.stripThinkTags` | `"auto"` | Strip `<think>` tags (`never`/`auto`/`always`) |
| `opencodego.thinking.deepseek` | `"off"` | `off`/`low`/`medium`/`high`/`max` |
| `opencodego.thinking.glm` | `"off"` | `on`/`off` |
| `opencodego.thinking.kimi` | `"off"` | `on`/`off` |
| `opencodego.thinking.minimax` | `"off"` | `off`/`on` |
| `opencodego.thinking.mimo` | `"off"` | `off`/`low`/`medium`/`high` |
| `opencodego.thinking.qwen` | `"off"` | `auto`/`on`/`off` |
| `opencodego.thinking.qwenBudget` | `"auto"` | `auto`/`4096`/`16384`/`32768`/`81920` |
| `opencodego.freeOnly` | `true` | Zen: free models only. `false` = include paid |
| `opencodego.agentsWindow` | `true` | Expose agent-host model variants (`targetChatSessionType`) for the Agents window |
| `opencodego.showAgentModelsInManagePanel` | `false` | Show agent vendors in Manage Language Models panel |
| `opencodego.stripThinkTags` | `"auto"` | Strip `<think>` tags (`never`/`auto`/`always`) |
| `opencodego.thinking.deepseek` | `"off"` | `off`/`low`/`medium`/`high`/`max` |
| `opencodego.thinking.glm` | `"off"` | `on`/`off` |
| `opencodego.thinking.kimi` | `"off"` | `on`/`off` |
| `opencodego.thinking.minimax` | `"off"` | `off`/`on` |
| `opencodego.thinking.mimo` | `"off"` | `off`/`low`/`medium`/`high` |
| `opencodego.thinking.qwen` | `"off"` | `auto`/`on`/`off` |
| `opencodego.thinking.qwenBudget` | `"auto"` | `auto`/`4096`/`16384`/`32768`/`81920` |

<details>
<summary><b>📜 Full settings reference with descriptions</b></summary>
Expand Down
Loading
Loading