Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
8 changes: 8 additions & 0 deletions vortex-extension/.editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# This folder is a separate, idiomatic Node/TypeScript project (see README.md), not part
# of the .NET solution. LF line endings are the standard convention for that ecosystem -
# and what npm itself always writes for generated files like package-lock.json - so this
# scopes an override of the repo root .editorconfig's `end_of_line = crlf` (a convention
# for the .cs/.NET side, see CONTRIBUTING.md) to everything under this folder, rather than
# changing the shared root file.
[*]
end_of_line = lf
5 changes: 5 additions & 0 deletions vortex-extension/.gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# Force LF for this folder's text files regardless of a contributor's local git
# core.autocrlf setting - the standard, idiomatic convention for a Node/TypeScript
# package (see .editorconfig and README.md), independent of the repo root's CRLF
# convention for the .NET/.cs side (see CONTRIBUTING.md).
* text=auto eol=lf
4 changes: 4 additions & 0 deletions vortex-extension/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
node_modules/
dist/
*.tsbuildinfo
coverage/
41 changes: 41 additions & 0 deletions vortex-extension/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
# witcherscriptmerger-vortex

A [Vortex](https://www.nexusmods.com/about/vortex/) (Nexus Mods' mod manager) companion
extension for WitcherScriptMerger (WSM). It drives WSM's `mcp` server mode (see the repo
root `CLAUDE.md` and `WitcherScriptMerger.Core/Mcp/CLAUDE.md`) from inside Vortex, as a
companion to Vortex's own built-in `game-witcher3` extension - it does **not** register
the `witcher3` game itself, and every feature it adds is gated on Witcher 3 being the
currently active game.

## This is a separate toolchain

Everything under this folder is TypeScript/Node, built with its own `package.json`,
independent of the rest of this repository's .NET solution
(`WitcherScriptMerger.sln`). `dotnet build`/`dotnet format` at the repo root never look
inside this folder, and nothing here is reachable from them.

```
cd vortex-extension
npm install
npm run build # typecheck + webpack bundle -> dist/index.js
npm run lint
npm test # fast, Node-only unit tests
```

`npm test` only runs the fast, Node-only unit tests (`src/**/*.test.ts`) - no .NET SDK
needed. `src/mcpClient.ts`'s real, spawned-process integration test
(`test/mcpClient.integration.test.ts`) is a separate script, `npm run test:integration`,
since it needs a local .NET SDK and a buildable `WitcherScriptMerger.Headless` (it will
run `dotnet build` itself if the exe isn't already present) - kept out of the default
`npm test` so a Node-only environment (e.g. a contributor machine or CI runner without
the .NET SDK on `PATH`) isn't forced through a multi-minute .NET build just to iterate on
this extension's own TypeScript.

## Status

This is the foundation scaffold (info.json manifest, build tooling, the `init(context)`
entry point with only game-activity gating wired up, and the shared MCP stdio client in
`src/mcpClient.ts`). No actual features - tool acquisition, conflict scanning, the merge
panel, dashlets - are implemented here; those are separate, later units built on top of
this scaffold. See `docs/vortex-extension-design.md` (once merged) for the fuller design
context this scaffold follows.
16 changes: 16 additions & 0 deletions vortex-extension/eslint.config.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
// Flat ESLint config (ESLint 9+). Basic, sane TypeScript linting - not the type-checked
// preset (`recommendedTypeChecked`), to keep this fast and dependency-light for a v1
// scaffold; a later unit can upgrade to type-aware rules if that becomes worthwhile.
import tseslint from 'typescript-eslint';

export default tseslint.config(
{
ignores: ['dist/**', 'node_modules/**'],
},
...tseslint.configs.recommended,
{
rules: {
'@typescript-eslint/no-unused-vars': ['warn', { argsIgnorePattern: '^_' }],
},
},
);
6 changes: 6 additions & 0 deletions vortex-extension/info.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"name": "WitcherScriptMerger Companion",
"author": "TheValiantOne/WitcherScriptMerger contributors",
"version": "0.1.0",
"description": "Companion Vortex extension for WitcherScriptMerger (WSM) - drives WSM's MCP server for Witcher 3 script-conflict scanning and merging from inside Vortex."
}
Loading
Loading