Commit graph

158 commits

Author SHA1 Message Date
lakshit verma
b48a657104
Merge pull request #87 from Mohit-001-hash/docs/clarify-env-example-note
docs: clarify .env.example setup note
2026-07-15 12:40:34 +05:30
Mohit Agarwal
56d5a4fbe0 docs: clarify .env.example setup note 2026-07-13 11:39:26 +05:30
42b25b859c
Modified package-json-protection.yml 2026-07-01 18:09:48 +05:30
a8faac7301
or lock 2026-07-01 18:05:45 +05:30
8e6c64292d
ci: also auto-close PRs that modify package-lock.json 2026-07-01 18:02:37 +05:30
2baa89934c
ci: auto-close PRs that modify package.json 2026-07-01 18:02:06 +05:30
github-actions[bot]
527d9e17f8
Update VOUCHED list (#85)
https://github.com/vee1e/isscope/issues/83#issuecomment-4853622198

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-07-01 11:00:47 +00:00
lakshit verma
0b5c373ac0
Merge pull request #81 from vee1e/fix/local-provider-ux
fix(local): make InputScreen scrollable and give local provider a CORS-aware Test button
2026-06-29 18:14:40 +05:30
vee1e
6b2b3fa77e
fix(local): give a CORS-aware error and a Test Connection button
The previous `callLocal` re-threw the raw browser `NetworkError`
("NetworkError when attempting to fetch resource" / "Failed to
fetch"), which is what happens when the browser blocks a cross-origin
request because the local server has not enabled CORS. Users running
LMStudio or older Ollama versions had no way to know that — the error
just said "network error" with no actionable hint.

- `callLocal` now catches the fetch `TypeError` and throws a
  descriptive `Error` that names the endpoint and includes the exact
  CORS fix for the detected server (LMStudio → "Local Server → ⚙ →
  enable CORS", Ollama → set `OLLAMA_ORIGINS="*"`). The original
  error is preserved via `Error.cause`.
- New `testLocalConnection` helper that hits `${endpoint}/models`
  and returns either `{ ok, models }` or `{ ok, error }` with the
  same CORS-aware error message. The Authorization header is sent when
  an API key is configured.
- New `detectLocalServer` and `corsHelpText` helpers (port-based
  detection for LMStudio 1234 / Ollama 11434).
- InputScreen now renders a "Test" button next to the Local Endpoint
  field. Success shows the model list ("2 models available: llama3.2,
  qwen2.5-coder:7b"); failure shows the CORS-aware error inline. The
  label is now just "Local Endpoint" with the per-server URLs moved
  to a hint line that explicitly mentions the required `/v1` path
  (LMStudio users were previously typing `http://127.0.0.1:1234`
  without `/v1`, which would 404 once CORS was fixed).
- Bump `tsconfig.json` `lib` from ES2020 to ES2022 so `Error.cause`
  typechecks (added in ES2022; `target` stays at ES2020 for
  compatibility).
- README: new "Local LLM provider (Ollama / LMStudio)" section with
  startup commands, CORS instructions, and a troubleshooting line
  pointing users to the in-app error message.
- 11 new tests for the local client (network error wrapping, test
  connection success/failure, non-JSON response, server detection,
  CORS help text). 4 new InputScreen tests for the provider UI and
  Test button. 186/186 pass.
2026-06-29 18:12:41 +05:30
vee1e
5f478bdd20
fix(ui): make InputScreen scrollable so config panel Save button is reachable
The root App container and the ScreenLayout wrapper both used
`overflow: hidden`, which clipped the InputScreen when the API
configuration panel was expanded. With the new Local (Ollama / LMStudio)
fields added in the previous commit, the panel grew tall enough that
the Save button fell below the viewport with no way to reach it.

- Switch ScreenLayout from `overflow: hidden` to `overflow: auto` so
  any screen can scroll when its content exceeds the viewport.
- Switch the centered layout alignment to `safe center` so a tall
  centered screen stays scrolled to the top (the previous `center`
  would push the top of the content off-screen once it overflowed).
- Update the ScreenLayout test to match the new alignment values.
2026-06-29 18:10:13 +05:30
lakshit verma
fa3c1ebd7b
Merge pull request #80 from vee1e/feat/local-ai-provider
feat: add local LLM provider (Ollama / LMStudio) support
2026-06-29 17:56:19 +05:30
vee1e
14169225c3
feat: add local LLM provider (Ollama / LMStudio) support
Adds the ability to run AI analysis against a local model served by
Ollama or LMStudio (or any OpenAI-compatible local server), in addition
to the existing OpenRouter cloud provider.

How it works:
- New 'Local (Ollama / LMStudio)' option in the API configuration panel
  alongside the existing OpenRouter key field.
- User can override the local endpoint (default http://localhost:11434/v1
  — Ollama's default; LMStudio users set http://localhost:1234/v1),
  the model name (default 'llama3.2'), and an optional API key (LMStudio
  defaults to 'lm-studio' when auth is enabled).
- The selected provider, endpoint, model and local API key are persisted
  in localStorage alongside the existing GitHub / OpenRouter key
  remember-me flow.
- Concurrent requests are throttled to 2 for the local provider (vs 15
  for OpenRouter) to avoid overloading a local GPU.

Architecture:
- New 'src/lib/api/local.ts' client that hits an OpenAI-compatible
  /v1/chat/completions endpoint. Drops 'response_format: json_object'
  because not every local backend supports it; the prompt and the
  existing parseAnalysisResponse fallback already handle JSON
  extraction and partial recovery.
- New 'src/lib/api/provider.ts' module that exposes the
  analyzeIssue / analyzeAllIssues surface and dispatches to either
  openrouter or local based on the store's aiProvider value.
- openrouter.ts is now a thin client with explicit (apiKey, model,
  baseUrl) parameters — no implicit store reads.
- useIssueAnalysis now imports from ./api/provider and logs the active
  provider + endpoint/model instead of just the model name.

Other:
- New VITE_LOCAL_ENDPOINT / VITE_LOCAL_MODEL env vars (documented in
  .env.example) used to override the build-time defaults.
- New AIProvider / LocalProviderConfig types in src/lib/types.ts.
- 19 new unit tests covering the local client and the provider
  dispatch (170/170 pass).
2026-06-29 17:54:33 +05:30
lakshit verma
abfadb35f5
Merge pull request #79 from vee1e/chore/switch-default-model-to-gpt-oss-20b
chore: switch default model to openai/gpt-oss-20b:free
2026-06-29 17:39:32 +05:30
vee1e
92fcc6f5f9
test: fix localStorage being undefined under Node 22+
Node 22+ exposes an experimental `localStorage` global getter that
returns `undefined` unless `--localstorage-file` is provided. Vitest's
`populateGlobal` skips keys that are already in `global` (unless they
are in its internal KEYS allowlist), so it never copies jsdom's working
`localStorage` over Node's broken one. As a result, every test that
touched `localStorage` (Header.test.tsx, InputScreen.test.tsx, and
any test calling `localStorage.clear()`) crashed with
`Cannot read properties of undefined (reading 'getItem')`.

The test setup file now creates a dedicated JSDOM instance and assigns
its `localStorage` and `sessionStorage` to `globalThis` before any
test runs, so the storage APIs work in the jsdom test environment
regardless of the host Node version.
2026-06-29 17:38:43 +05:30
vee1e
94f47841be
chore: switch default model to openai/gpt-oss-20b:free
Replace the previously hardcoded default arcee-ai/trinity-large-preview:free
model with openai/gpt-oss-20b:free in both the runtime default and the
analysis log message.

Also document the existing VITE_MODEL_NAME override in .env.example so
users can easily override the default model from their environment.
2026-06-29 17:35:17 +05:30
lakshit verma
ab8929b40b
Merge pull request #49 from Aarya1402/test/components-terminal
Test/components terminal
2026-06-12 20:11:01 +05:30
lakshit verma
594e72d363
Merge pull request #48 from Aarya1402/test/components-issue
Test/components issue
2026-06-12 20:10:22 +05:30
lakshit verma
3519b08396
Merge pull request #47 from Aarya1402/test/components-layout
Test/components layout
2026-06-08 13:27:37 +05:30
lakshit verma
44b988d021
Merge pull request #60 from Aarya1402/test/screens
test: add test coverage for screens
2026-06-06 16:34:11 +05:30
Aarya1402
1c8b6a422e chore: remove debug files 2026-06-05 11:12:21 +05:30
Aarya1402
4a8aa6a6d6 test: address PR review comments 2026-06-05 10:54:54 +05:30
Aarya1402
e646d59567 test: fix appStore bounds test 2026-06-05 10:49:52 +05:30
Aarya1402
9c9c940ed2 test: add InputScreen test cases 2026-06-05 10:34:45 +05:30
Aarya1402
aa7bcd136d test: add HistoryScreen test cases 2026-06-05 10:34:14 +05:30
Aarya1402
0532256205 test: add ReportScreen test cases 2026-06-05 10:33:19 +05:30
Aarya1402
ab564504a1 test: add LoadingScreen test cases 2026-06-05 10:32:17 +05:30
Aarya1402
c730c262b6 Merge upstream/master to resolve conflicts 2026-06-05 10:25:36 +05:30
Aarya1402
9762a2f7ad Merge upstream/master to resolve conflicts 2026-06-05 10:22:03 +05:30
Aarya1402
7f9d7c1cd3 test: fix appStore bound tests 2026-06-05 10:14:06 +05:30
Aarya1402
4f2a5527c2 Merge origin/master to resolve conflicts 2026-06-05 10:07:01 +05:30
lakshit verma
3d0f6cb4de
Merge pull request #50 from Aarya1402/test/components-ui
Test/components UI
2026-06-04 19:45:45 +05:30
lakshit verma
09e30adc1d
Merge pull request #58 from Akshita-2307/refactor/dedup-utils
refactor: remove duplicate utility functions and import from shared modules (#39)
2026-06-04 19:39:54 +05:30
Akshita-2307
aad902ab2f Merge branch 'master' into refactor/dedup-utils 2026-06-02 17:28:40 +05:30
Akshita-2307
6ba85c55b4 fix: remove redundant ternary and apply prettier formatting 2026-06-02 17:28:34 +05:30
lakshit verma
aba6747ce4
Merge pull request #42 from Chinmayykashyap-git/refactor/shared-utils-clean
refactor: reuse shared parseRepoInput utility
2026-06-02 15:57:41 +05:30
lakshit verma
1f4e0df64d
Merge pull request #56 from Akshita-2307/fix/stale-closure-maxIssues
fix: add maxIssues to useCallback dependency array (#36)
2026-06-02 15:44:58 +05:30
github-actions[bot]
994d02e613
Update VOUCHED list (#59)
https://github.com/vee1e/isscope/issues/55#issuecomment-4601346270

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-02 10:11:02 +00:00
lakshit verma
606a94c20f
Merge pull request #55 from kir943/feat/light-theme
feat(ui): add light theme and wire useTheme toggle
2026-06-02 15:40:31 +05:30
kir943
22786130c5 feat(ui): add theme toggle to report dashboard 2026-06-01 21:07:30 +05:30
Akshita-2307
58fb372c76 refactor: remove duplicate utility functions and import from shared modules (#39)
- Replaced local parseRepoInput in useIssueAnalysis.ts with import from validators.ts
- Updated formatTimeAgo in formatters.ts to accept number | string overload
- Replaced local formatTimeAgo in InputScreen.tsx with import from formatters.ts
2026-05-29 09:36:26 +05:30
Akshita-2307
35bb966f88 fix: add maxIssues to useCallback dependency array (#36) 2026-05-29 09:32:48 +05:30
kir943
d84dd831a3 refactor(ui): extract theme toggle styles to CSS class 2026-05-27 18:07:03 +05:30
kir943
f904aaa292 feat(ui): add light theme and wire useTheme toggle 2026-05-27 17:29:34 +05:30
Aarya1402
86de26abf8 test(ui): resolve PR review feedback 2026-05-20 11:01:21 +05:30
lakshit verma
75b7d7087a
Merge pull request #46 from sanjeta-singh/test/core-logic-coverage
test: add comprehensive unit tests for core logic, APIs, and caching
2026-05-19 22:37:50 +05:30
lakshit verma
865b7cce8f
Merge pull request #43 from Chinmayykashyap-git/fix/timeline-fetch-retry
fix(api): route timeline requests through fetchWithRetry
2026-05-19 22:33:36 +05:30
Aarya1402
17df746e7e test(terminal): resolve PR review feedback 2026-05-18 17:46:37 +05:30
Aarya1402
23118d6cf2
Upgrade @types/jsdom and jsdom versions
Updated @types/jsdom and jsdom dependencies to newer versions.
2026-05-18 17:40:53 +05:30
Aarya1402
7df1b445b4 test(ui): resolve PR review feedback 2026-05-18 17:31:10 +05:30
Aarya1402
83f0e9cbfd
Update package.json
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-05-18 17:24:50 +05:30