loren-code 0.1.3 → 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md
CHANGED
|
@@ -66,6 +66,27 @@ The local bridge runs on:
|
|
|
66
66
|
http://127.0.0.1:8788
|
|
67
67
|
```
|
|
68
68
|
|
|
69
|
+
## Claude Code On Windows
|
|
70
|
+
|
|
71
|
+
If you want the installed `claude` command to route through Loren instead of the official Claude CLI, run:
|
|
72
|
+
|
|
73
|
+
```powershell
|
|
74
|
+
powershell -ExecutionPolicy Bypass -File "$(npm prefix -g)\node_modules\loren-code\scripts\install-claude-ollama.ps1"
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
That installer:
|
|
78
|
+
|
|
79
|
+
- configures VS Code to use the local bridge
|
|
80
|
+
- updates your user `.claude` settings
|
|
81
|
+
- backs up existing global `claude` shims
|
|
82
|
+
- installs Loren-backed `claude`, `claude.cmd`, and `claude.ps1` wrappers
|
|
83
|
+
|
|
84
|
+
To restore the original `claude` command:
|
|
85
|
+
|
|
86
|
+
```powershell
|
|
87
|
+
powershell -ExecutionPolicy Bypass -File "$(npm prefix -g)\node_modules\loren-code\scripts\uninstall-claude-ollama.ps1"
|
|
88
|
+
```
|
|
89
|
+
|
|
69
90
|
## Troubleshooting
|
|
70
91
|
|
|
71
92
|
### `loren` not found
|
package/package.json
CHANGED
|
@@ -10,6 +10,13 @@ $claudeSettingsPath = Join-Path $claudeDir "settings.json"
|
|
|
10
10
|
$launcherSourcePath = Join-Path $repoRoot "scripts\\ClaudeWrapperLauncher.cs"
|
|
11
11
|
$launcherExePath = Join-Path $repoRoot "scripts\\ClaudeWrapperLauncher.exe"
|
|
12
12
|
$envPath = Join-Path $repoRoot ".env.local"
|
|
13
|
+
$npmBinDir = Join-Path $appData "npm"
|
|
14
|
+
$claudeCmdPath = Join-Path $npmBinDir "claude.cmd"
|
|
15
|
+
$claudeShellPath = Join-Path $npmBinDir "claude"
|
|
16
|
+
$claudePs1Path = Join-Path $npmBinDir "claude.ps1"
|
|
17
|
+
$claudeCmdBackupPath = Join-Path $npmBinDir "claude.loren-backup.cmd"
|
|
18
|
+
$claudeShellBackupPath = Join-Path $npmBinDir "claude.loren-backup"
|
|
19
|
+
$claudePs1BackupPath = Join-Path $npmBinDir "claude.loren-backup.ps1"
|
|
13
20
|
|
|
14
21
|
if (-not (Test-Path $envPath)) {
|
|
15
22
|
throw ".env.local not found. Create it first with OLLAMA_API_KEYS."
|
|
@@ -17,6 +24,7 @@ if (-not (Test-Path $envPath)) {
|
|
|
17
24
|
|
|
18
25
|
New-Item -ItemType Directory -Force -Path $workspaceSettingsDir | Out-Null
|
|
19
26
|
New-Item -ItemType Directory -Force -Path $claudeDir | Out-Null
|
|
27
|
+
New-Item -ItemType Directory -Force -Path $npmBinDir | Out-Null
|
|
20
28
|
|
|
21
29
|
function Read-JsonFile {
|
|
22
30
|
param([string]$Path)
|
|
@@ -97,6 +105,17 @@ function Get-CSharpCompiler {
|
|
|
97
105
|
throw "C# compiler not found. Unable to generate the launcher .exe."
|
|
98
106
|
}
|
|
99
107
|
|
|
108
|
+
function Backup-IfNeeded {
|
|
109
|
+
param(
|
|
110
|
+
[string]$SourcePath,
|
|
111
|
+
[string]$BackupPath
|
|
112
|
+
)
|
|
113
|
+
|
|
114
|
+
if ((Test-Path $SourcePath) -and -not (Test-Path $BackupPath)) {
|
|
115
|
+
Move-Item -LiteralPath $SourcePath -Destination $BackupPath -Force
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
100
119
|
function Get-OllamaAvailableModels {
|
|
101
120
|
param(
|
|
102
121
|
[string]$EnvPath,
|
|
@@ -214,14 +233,48 @@ if ($availableModels.Count -eq 0) {
|
|
|
214
233
|
throw "OLLAMA_MODEL_ALIASES does not contain any models"
|
|
215
234
|
}
|
|
216
235
|
|
|
217
|
-
$
|
|
236
|
+
$configuredDefaultModel = Get-EnvValue -Path $envPath -Name "DEFAULT_MODEL_ALIAS"
|
|
237
|
+
if (
|
|
238
|
+
-not [string]::IsNullOrWhiteSpace($configuredDefaultModel) -and
|
|
239
|
+
$availableModels.Contains($configuredDefaultModel)
|
|
240
|
+
) {
|
|
241
|
+
$defaultModel = $configuredDefaultModel
|
|
242
|
+
} elseif ($aliases.ContainsKey("ollama-free-auto")) {
|
|
243
|
+
$defaultModel = "ollama-free-auto"
|
|
244
|
+
} else {
|
|
245
|
+
$defaultModel = $availableModels[0]
|
|
246
|
+
}
|
|
218
247
|
$claudeSettings["model"] = $defaultModel
|
|
219
248
|
$claudeSettings["availableModels"] = $availableModels
|
|
220
249
|
Write-JsonFile -Path $claudeSettingsPath -Data $claudeSettings
|
|
221
250
|
|
|
251
|
+
Backup-IfNeeded -SourcePath $claudeCmdPath -BackupPath $claudeCmdBackupPath
|
|
252
|
+
Backup-IfNeeded -SourcePath $claudeShellPath -BackupPath $claudeShellBackupPath
|
|
253
|
+
Backup-IfNeeded -SourcePath $claudePs1Path -BackupPath $claudePs1BackupPath
|
|
254
|
+
|
|
255
|
+
$cmdContent = @"
|
|
256
|
+
@echo off
|
|
257
|
+
"$launcherExePath" %*
|
|
258
|
+
"@
|
|
259
|
+
Set-Content -LiteralPath $claudeCmdPath -Value $cmdContent -Encoding ASCII
|
|
260
|
+
|
|
261
|
+
$shellLauncherPath = ($launcherExePath -replace "\\", "/")
|
|
262
|
+
$shellContent = @"
|
|
263
|
+
#!/bin/sh
|
|
264
|
+
"$shellLauncherPath" "$@"
|
|
265
|
+
"@
|
|
266
|
+
Set-Content -LiteralPath $claudeShellPath -Value $shellContent -Encoding ASCII
|
|
267
|
+
|
|
268
|
+
$ps1Content = @"
|
|
269
|
+
& "$launcherExePath" @args
|
|
270
|
+
"@
|
|
271
|
+
Set-Content -LiteralPath $claudePs1Path -Value $ps1Content -Encoding UTF8
|
|
272
|
+
|
|
222
273
|
Write-Host "Installation completed."
|
|
223
274
|
Write-Host "Claude launcher:" $launcherExePath
|
|
224
275
|
Write-Host "VS Code user settings:" $workspaceSettingsPath
|
|
225
276
|
Write-Host "Claude user settings:" $claudeSettingsPath
|
|
277
|
+
Write-Host "Global Claude command:" $claudeCmdPath
|
|
226
278
|
Write-Host ""
|
|
227
279
|
Write-Host "Restart VS Code. Claude Code will use the bridge in any project."
|
|
280
|
+
Write-Host "The global 'claude' command now routes through Loren."
|
|
@@ -7,6 +7,13 @@ $workspaceSettingsPath = Join-Path $appData "Code\\User\\settings.json"
|
|
|
7
7
|
$claudeSettingsPath = Join-Path $userProfile ".claude\\settings.json"
|
|
8
8
|
$bridgePidPath = Join-Path $repoRoot ".runtime\\bridge.pid"
|
|
9
9
|
$launcherExePath = Join-Path $repoRoot "scripts\\ClaudeWrapperLauncher.exe"
|
|
10
|
+
$npmBinDir = Join-Path $appData "npm"
|
|
11
|
+
$claudeCmdPath = Join-Path $npmBinDir "claude.cmd"
|
|
12
|
+
$claudeShellPath = Join-Path $npmBinDir "claude"
|
|
13
|
+
$claudePs1Path = Join-Path $npmBinDir "claude.ps1"
|
|
14
|
+
$claudeCmdBackupPath = Join-Path $npmBinDir "claude.loren-backup.cmd"
|
|
15
|
+
$claudeShellBackupPath = Join-Path $npmBinDir "claude.loren-backup"
|
|
16
|
+
$claudePs1BackupPath = Join-Path $npmBinDir "claude.loren-backup.ps1"
|
|
10
17
|
|
|
11
18
|
function Read-JsonFile {
|
|
12
19
|
param([string]$Path)
|
|
@@ -43,6 +50,20 @@ function Write-JsonFile {
|
|
|
43
50
|
Set-Content -LiteralPath $Path -Value ($json + "`n") -Encoding UTF8
|
|
44
51
|
}
|
|
45
52
|
|
|
53
|
+
function Restore-BackupIfPresent {
|
|
54
|
+
param(
|
|
55
|
+
[string]$BackupPath,
|
|
56
|
+
[string]$TargetPath
|
|
57
|
+
)
|
|
58
|
+
|
|
59
|
+
if (Test-Path $BackupPath) {
|
|
60
|
+
if (Test-Path $TargetPath) {
|
|
61
|
+
Remove-Item -LiteralPath $TargetPath -Force -ErrorAction SilentlyContinue
|
|
62
|
+
}
|
|
63
|
+
Move-Item -LiteralPath $BackupPath -Destination $TargetPath -Force
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
46
67
|
if (Test-Path $workspaceSettingsPath) {
|
|
47
68
|
$settings = Read-JsonFile -Path $workspaceSettingsPath
|
|
48
69
|
[void]$settings.Remove("claudeCode.claudeProcessWrapper")
|
|
@@ -71,4 +92,8 @@ if (Test-Path $launcherExePath) {
|
|
|
71
92
|
Remove-Item -LiteralPath $launcherExePath -Force -ErrorAction SilentlyContinue
|
|
72
93
|
}
|
|
73
94
|
|
|
95
|
+
Restore-BackupIfPresent -BackupPath $claudeCmdBackupPath -TargetPath $claudeCmdPath
|
|
96
|
+
Restore-BackupIfPresent -BackupPath $claudeShellBackupPath -TargetPath $claudeShellPath
|
|
97
|
+
Restore-BackupIfPresent -BackupPath $claudePs1BackupPath -TargetPath $claudePs1Path
|
|
98
|
+
|
|
74
99
|
Write-Host "Global configuration removed."
|