init: workspace opencode sync
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
param(
|
||||
[Parameter(Mandatory=$true, Position=0)][string]$Prompt,
|
||||
[string]$TargetHost = "100.101.128.33",
|
||||
[int]$Port = 4096,
|
||||
[string]$SessionId = "",
|
||||
[string]$Title = "ask-remote $(Get-Date -Format 'yyyyMMdd-HHmmss')",
|
||||
[string]$Password = $env:OPENCODE_SERVER_PASSWORD,
|
||||
[string]$ModelProvider = "9router",
|
||||
[string]$ModelID = "oc/deepseek-v4-flash-free",
|
||||
[int]$TimeoutSec = 300
|
||||
)
|
||||
|
||||
$base = "http://${TargetHost}:${Port}"
|
||||
$headers = @{}
|
||||
if ($Password) { $headers.Authorization = "Basic " + [Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes("opencode:$Password")) }
|
||||
|
||||
function New-Session {
|
||||
$body = @{ title = $Title } | ConvertTo-Json
|
||||
Invoke-RestMethod -Method Post -Uri "$base/session" -Headers $headers -ContentType "application/json" -Body $body -TimeoutSec $TimeoutSec
|
||||
}
|
||||
|
||||
function Send-Prompt([string]$sid) {
|
||||
$body = @{ parts = @(@{ type = "text"; text = $Prompt }); model = @{ providerID = $ModelProvider; modelID = $ModelID } } | ConvertTo-Json -Depth 5
|
||||
Invoke-RestMethod -Method Post -Uri "$base/session/$sid/prompt_async" -Headers $headers -ContentType "application/json" -Body $body -TimeoutSec 30 | Out-Null
|
||||
for ($i = 0; $i -lt 60; $i++) {
|
||||
Start-Sleep -Seconds 5
|
||||
$msgs = (Invoke-RestMethod -Uri "$base/session/$sid/message" -Headers $headers -TimeoutSec 30)
|
||||
$reply = $msgs | Where-Object { $_.info.role -eq "assistant" -and ($_.parts | Where-Object { $_.type -eq "text" -and $_.text }) } | Select-Object -Last 1
|
||||
if ($reply) {
|
||||
$text = ($reply.parts | Where-Object { $_.type -eq "text" } | ForEach-Object { $_.text }) -join "`n"
|
||||
return [pscustomobject]@{ sessionId = $sid; text = $text }
|
||||
}
|
||||
}
|
||||
throw "Timeout menunggu balasan remote (>300s)"
|
||||
}
|
||||
|
||||
if (-not $SessionId) {
|
||||
$s = New-Session
|
||||
$SessionId = $s.id
|
||||
}
|
||||
|
||||
try {
|
||||
$out = Send-Prompt $SessionId
|
||||
"SESSION: $($out.sessionId)"
|
||||
"---REPLY---"
|
||||
$out.text
|
||||
} catch {
|
||||
"ERROR: $($_.Exception.Message)"
|
||||
if ($_.Exception.Response) {
|
||||
try {
|
||||
$stream = $_.Exception.Response.GetResponseStream()
|
||||
$reader = New-Object IO.StreamReader($stream)
|
||||
$reader.ReadToEnd()
|
||||
} catch {}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user