huskies: merge 948

This commit is contained in:
dave
2026-05-13 04:43:48 +00:00
parent 2f50e2198b
commit f2943c7e69
16 changed files with 995 additions and 205 deletions
+32 -43
View File
@@ -5,6 +5,7 @@
* object exposing all REST endpoints.
*/
import { rpcCall } from "../rpc";
import type {
AllTokenUsageResponse,
AnthropicModelInfo,
@@ -87,11 +88,11 @@ export async function callMcpTool(
/** Typed REST and MCP wrappers for all Huskies server endpoints. */
export const api = {
getCurrentProject(baseUrl?: string) {
return requestJson<string | null>("/project", {}, baseUrl);
getCurrentProject(_baseUrl?: string) {
return rpcCall<string | null>("project.current");
},
getKnownProjects(baseUrl?: string) {
return requestJson<string[]>("/projects", {}, baseUrl);
getKnownProjects(_baseUrl?: string) {
return rpcCall<string[]>("project.known");
},
forgetKnownProject(path: string, baseUrl?: string) {
return requestJson<boolean>(
@@ -110,8 +111,8 @@ export const api = {
closeProject(baseUrl?: string) {
return requestJson<boolean>("/project", { method: "DELETE" }, baseUrl);
},
getModelPreference(baseUrl?: string) {
return requestJson<string | null>("/model", {}, baseUrl);
getModelPreference(_baseUrl?: string) {
return rpcCall<string | null>("model.get_preference");
},
setModelPreference(model: string, baseUrl?: string) {
return requestJson<boolean>(
@@ -120,21 +121,17 @@ export const api = {
baseUrl,
);
},
getOllamaModels(baseUrlParam?: string, baseUrl?: string) {
const url = new URL(
buildApiUrl("/ollama/models", baseUrl),
window.location.origin,
getOllamaModels(baseUrlParam?: string, _baseUrl?: string) {
return rpcCall<string[]>(
"ollama.list_models",
baseUrlParam ? { base_url: baseUrlParam } : {},
);
if (baseUrlParam) {
url.searchParams.set("base_url", baseUrlParam);
}
return requestJson<string[]>(url.pathname + url.search, {}, "");
},
getAnthropicApiKeyExists(baseUrl?: string) {
return requestJson<boolean>("/anthropic/key/exists", {}, baseUrl);
getAnthropicApiKeyExists(_baseUrl?: string) {
return rpcCall<boolean>("anthropic.key_exists");
},
getAnthropicModels(baseUrl?: string) {
return requestJson<AnthropicModelInfo[]>("/anthropic/models", {}, baseUrl);
getAnthropicModels(_baseUrl?: string) {
return rpcCall<AnthropicModelInfo[]>("anthropic.list_models");
},
setAnthropicApiKey(api_key: string, baseUrl?: string) {
return requestJson<boolean>(
@@ -178,11 +175,11 @@ export const api = {
baseUrl,
);
},
getHomeDirectory(baseUrl?: string) {
return requestJson<string>("/io/fs/home", {}, baseUrl);
getHomeDirectory(_baseUrl?: string) {
return rpcCall<string>("io.home_directory");
},
listProjectFiles(baseUrl?: string) {
return requestJson<string[]>("/io/fs/files", {}, baseUrl);
listProjectFiles(_baseUrl?: string) {
return rpcCall<string[]>("io.list_project_files");
},
searchFiles(query: string, baseUrl?: string) {
return requestJson<SearchResult[]>(
@@ -201,29 +198,21 @@ export const api = {
cancelChat(baseUrl?: string) {
return requestJson<boolean>("/chat/cancel", { method: "POST" }, baseUrl);
},
getWorkItemContent(storyId: string, baseUrl?: string) {
return requestJson<WorkItemContent>(
`/work-items/${encodeURIComponent(storyId)}`,
{},
baseUrl,
);
getWorkItemContent(storyId: string, _baseUrl?: string) {
return rpcCall<WorkItemContent>("work_items.get", { story_id: storyId });
},
getTestResults(storyId: string, baseUrl?: string) {
return requestJson<TestResultsResponse | null>(
`/work-items/${encodeURIComponent(storyId)}/test-results`,
{},
baseUrl,
);
getTestResults(storyId: string, _baseUrl?: string) {
return rpcCall<TestResultsResponse | null>("work_items.test_results", {
story_id: storyId,
});
},
getTokenCost(storyId: string, baseUrl?: string) {
return requestJson<TokenCostResponse>(
`/work-items/${encodeURIComponent(storyId)}/token-cost`,
{},
baseUrl,
);
getTokenCost(storyId: string, _baseUrl?: string) {
return rpcCall<TokenCostResponse>("work_items.token_cost", {
story_id: storyId,
});
},
getAllTokenUsage(baseUrl?: string) {
return requestJson<AllTokenUsageResponse>("/token-usage", {}, baseUrl);
getAllTokenUsage(_baseUrl?: string) {
return rpcCall<AllTokenUsageResponse>("token_usage.all");
},
/** Trigger a server rebuild and restart. */
rebuildAndRestart() {
@@ -247,7 +236,7 @@ export const api = {
},
/** Fetch OAuth status from the server. */
getOAuthStatus() {
return requestJson<OAuthStatus>("/oauth/status", {}, "");
return rpcCall<OAuthStatus>("oauth.status");
},
/** Execute a bot slash command without LLM invocation. Returns markdown response text. */
botCommand(command: string, args: string, baseUrl?: string) {