@otto-code/client 0.7.3 → 0.7.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/dist/daemon-client.d.ts +42 -2
- package/dist/daemon-client.js +302 -4
- package/package.json +3 -3
package/dist/daemon-client.d.ts
CHANGED
|
@@ -4,7 +4,7 @@ import { AgentRefreshedStatusPayloadSchema, CheckoutRenameBranchResponseSchema,
|
|
|
4
4
|
import type { AgentStreamEventPayload, AgentSnapshotPayload, ProjectPlacementPayload, AgentPermissionResolvedMessage, CreateAgentRequestMessage, CreateOttoWorktreeRequest, CodeListFilesResponse, CodeSymbolLocation, CodeDefinitionLocation, CodeDefinitionStatus, CodeRenameApplyStatus, CodeRenameFileOutcome, CodeRenameUndoFile, CodeRenameUndoStatus, CodeHoverRange, CodeRenameEdit, CodeRenameFilePlan, LspLanguageState, LspRunningServer, CodeSolutionGetTreeResponse, CodeSolutionLoadProjectResponse, SolutionFormat, SolutionRef, SolutionTreeFolder, SolutionTreeProject, SolutionProjectNode, SolutionProjectStatus, SolutionPackageReference, FileCreateResult, FileDeleteResult, FileDownloadTokenResponse, FileEntryKind, FileEol, FileRenameResult, FileReplaceFileResult, FileReplaceRequest, FileReplaceResponse, FileSearchResultPayload, FileSearchSummary, FileUploadResponse, FileExplorerResponse, FileWatchEventPayload, FileWriteResult, FileRefineResult, FileRefineDocument, FileRefineReference, FetchAgentTimelineResponseMessage, AgentForkContextResponseMessage, GitSetupOptions, CheckoutStatusResponse, CheckoutCommitResponse, CheckoutGitCommitResponse, CheckoutGitCommitAgentResponse, CheckoutGitRollbackResponse, CheckoutGitFileHistoryResponse, CheckoutGitFileCommitDiffResponse, CheckoutGitFileBlameResponse, CheckoutGitFileOriginResponse, CheckoutGitGetOperationLogResponse, CheckoutMergeResponse, CheckoutMergeFromBaseResponse, CheckoutPullResponse, CheckoutPushResponse, CheckoutRefreshResponse, CheckoutPrCreateResponse, CheckoutPrMergeResponse, CheckoutPrMergeMethod, CheckoutGithubSetAutoMergeResponse, CheckoutGithubGetCheckDetailsResponse, PreviewListConfigResponse, PreviewStartResponse, PreviewBindTabResponse, PreviewStopResponse, CheckoutPrStatusResponse, PullRequestTimelineResponse, CheckoutSwitchBranchResponse, StashSaveResponse, StashPopResponse, StashListResponse, ValidateBranchResponse, BranchSuggestionsResponse, GitHubSearchResponse, GitHubSearchRequest, GitHostingProviderId, HostingSearchRequest, HostingSearchResponse, HostingAuthStatusResponse, DirectorySuggestionsResponse, OttoWorktreeListResponse, OttoWorktreeArchiveResponse, ProjectIconResponse, ContextCategory, ContextPromptPreviewGetResponseMessage, ContextReportGetResponseMessage, ContextEdgeConvertResponseMessage, ContextFindingsFixResponseMessage, PersonalityMemoryListResponseMessage, PersonalityMemoryUpdateResponseMessage, PersonalityMemoryTransferResponseMessage, PersonalityMemoryStatsResponseMessage, ProjectAddResponse, ProjectScaffoldGit, ProjectScaffoldProgress, ProjectScaffoldResponse, HostingListRepositoriesResponse, HostingListOwnersResponse, OpenProjectResponseMessage, ArchiveWorkspaceResponseMessage, WorkspaceArchivePreflightResponse, WorktreeBaseRefSetResponse, WorktreeReattachListResponse, WorktreeReattachResponse, WorktreeReattachTarget, WorkspaceSetupStatusResponseMessage, ListCommandsResponse, ListProviderFeaturesResponseMessage, ListProviderModelsResponseMessage, ListProviderModesResponseMessage, ListAvailableProvidersResponse, GetProvidersSnapshotResponseMessage, RefreshProvidersSnapshotResponseMessage, ProviderDiagnosticResponseMessage, ProviderUsageListResponseMessage, StatsActivityGetResponseMessage, StatsActivityResetResponseMessage, UsageLogGetResponseMessage, AgentContextGetUsageResponseMessage, DaemonGetStatusResponse, DaemonGetPairingOfferResponse, DiagnosticsResponse, AgentRewindResponseMessage, ListTerminalsResponse, CreateTerminalResponse, SubscribeTerminalResponse, SubscribeTerminalRequest, CloseItemsResponse, AttachmentsImagesClearResponse, AttachmentsImagesStatsResponse, HistoryAgentsClearArchivedResponse, KillTerminalResponse, CaptureTerminalResponse, TerminalInput, SessionInboundMessage, SessionOutboundMessage, SendAgentMessageRequest, AgentPromptDelivery, TasksSuggestedStartMode, OttoConfigRaw, OttoConfigRevision, WorkspaceCreateRequest } from "@otto-code/protocol/messages";
|
|
5
5
|
import type { AgentPermissionRequest, AgentPermissionResponse, AgentPersistenceHandle, AgentProviderNotice, AgentProvider, AgentSessionConfig } from "@otto-code/protocol/agent-types";
|
|
6
6
|
import type { OrchestrationGraph, PromptTemplate, Run } from "@otto-code/protocol/orchestration";
|
|
7
|
-
import type { CueMoment, MutableDaemonConfig, MutableDaemonConfigPatch, ProjectLink, SpeechSettingsOptions, SpeechTtsPreviewResult, SpeechTtsSpeakResult, SpeechTtsSpeakCancelResult, VisualizerVoiceCuesResult } from "@otto-code/protocol/messages";
|
|
7
|
+
import type { BrainCatalogModel, BrainEvals, BrainHfSearchResult, BrainHostStatus, BrainInstalledModel, BrainJob, BrainNetworkInfo, BrainRemoteConfig, BrainRepoQuant, BrainRuntime, ConnectorsListToolsResponse, CueMoment, MutableDaemonConfig, MutableDaemonConfigPatch, ProjectLink, SpeechSettingsOptions, SpeechTtsPreviewResult, SpeechTtsSpeakResult, SpeechTtsSpeakCancelResult, VisualizerVoiceCuesResult, AgentPersonalitiesGenerateProfileResult } from "@otto-code/protocol/messages";
|
|
8
8
|
import { type DaemonTransportFactory, type WebSocketFactory } from "./daemon-client-transport.js";
|
|
9
9
|
import { type DaemonClientTrafficHotspot, type DaemonClientTrafficTotals } from "./daemon-client-runtime-metrics.js";
|
|
10
10
|
import { type TerminalStreamEvent } from "./terminal-stream-router.js";
|
|
@@ -923,7 +923,9 @@ export declare class DaemonClient {
|
|
|
923
923
|
requestId?: string;
|
|
924
924
|
}): Promise<ArchiveWorkspacePayload>;
|
|
925
925
|
workspaceArchivePreflight(workspaceId: string, requestId?: string): Promise<WorkspaceArchivePreflightPayload>;
|
|
926
|
-
setWorktreeBaseRef(workspaceId: string, baseRef: string | null,
|
|
926
|
+
setWorktreeBaseRef(workspaceId: string, baseRef: string | null, options?: {
|
|
927
|
+
redetect?: boolean;
|
|
928
|
+
}, requestId?: string): Promise<WorktreeBaseRefSetPayload>;
|
|
927
929
|
listReattachableWorktrees(scope: {
|
|
928
930
|
projectId?: string;
|
|
929
931
|
cwd?: string;
|
|
@@ -1075,6 +1077,14 @@ export declare class DaemonClient {
|
|
|
1075
1077
|
setWorkspaceTitle(workspaceId: string, title: string | null, requestId?: string): Promise<{
|
|
1076
1078
|
title: string | null;
|
|
1077
1079
|
}>;
|
|
1080
|
+
/**
|
|
1081
|
+
* Moves a chat to another workspace over the same directory. Throws with the
|
|
1082
|
+
* daemon's reason when refused; the same-directory rule is enforced there, not
|
|
1083
|
+
* here, so the caller gets one explanation rather than two.
|
|
1084
|
+
*/
|
|
1085
|
+
transferAgentWorkspace(agentId: string, workspaceId: string, requestId?: string): Promise<{
|
|
1086
|
+
workspaceId: string;
|
|
1087
|
+
}>;
|
|
1078
1088
|
listProjectLinks(requestId?: string): Promise<ProjectLink[]>;
|
|
1079
1089
|
linkProjects(projectId: string, otherProjectId: string, requestId?: string): Promise<ProjectLink[]>;
|
|
1080
1090
|
unlinkProjects(projectId: string, otherProjectId: string, requestId?: string): Promise<ProjectLink[]>;
|
|
@@ -1527,6 +1537,29 @@ export declare class DaemonClient {
|
|
|
1527
1537
|
requestId: string;
|
|
1528
1538
|
config: MutableDaemonConfig;
|
|
1529
1539
|
}>;
|
|
1540
|
+
connectorsListTools(connectorId: string, requestId?: string): Promise<ConnectorsListToolsResponse["payload"]>;
|
|
1541
|
+
brainHostStatus(requestId?: string): Promise<BrainHostStatus>;
|
|
1542
|
+
brainHostStart(model?: string | null, requestId?: string): Promise<BrainHostStatus>;
|
|
1543
|
+
brainHostStop(requestId?: string): Promise<BrainHostStatus>;
|
|
1544
|
+
brainHostRestart(model?: string | null, requestId?: string): Promise<BrainHostStatus>;
|
|
1545
|
+
brainEvalsGet(requestId?: string): Promise<BrainEvals | null>;
|
|
1546
|
+
brainRemoteConfigGet(requestId?: string): Promise<BrainRemoteConfig | null>;
|
|
1547
|
+
brainRemoteConfigPatch(patch: BrainRemoteConfig, requestId?: string): Promise<BrainRemoteConfig | null>;
|
|
1548
|
+
brainModelsList(requestId?: string): Promise<string[]>;
|
|
1549
|
+
brainNetworkDiscover(requestId?: string): Promise<BrainNetworkInfo | null>;
|
|
1550
|
+
brainModelsScan(requestId?: string): Promise<BrainInstalledModel[]>;
|
|
1551
|
+
brainCatalogList(requestId?: string): Promise<BrainCatalogModel[]>;
|
|
1552
|
+
brainRuntimeList(requestId?: string): Promise<BrainRuntime[]>;
|
|
1553
|
+
brainModelsPull(model: string, requestId?: string): Promise<BrainJob>;
|
|
1554
|
+
brainHfSearch(query: string, limit?: number | null, requestId?: string): Promise<BrainHfSearchResult[]>;
|
|
1555
|
+
brainHfQuants(repo: string, requestId?: string): Promise<BrainRepoQuant[]>;
|
|
1556
|
+
brainModelsAdd(repo: string, quant: string, requestId?: string): Promise<BrainJob>;
|
|
1557
|
+
brainRuntimeInstall(build?: string | null, requestId?: string): Promise<BrainJob>;
|
|
1558
|
+
brainCalibrate(model: string, requestId?: string): Promise<BrainJob>;
|
|
1559
|
+
brainSweep(model: string, requestId?: string): Promise<BrainJob>;
|
|
1560
|
+
brainBench(model?: string | null, requestId?: string): Promise<BrainJob>;
|
|
1561
|
+
brainJobsList(requestId?: string): Promise<BrainJob[]>;
|
|
1562
|
+
brainJobsCancel(jobId: string, requestId?: string): Promise<BrainJob[]>;
|
|
1530
1563
|
getSpeechSettingsOptions(requestId?: string): Promise<{
|
|
1531
1564
|
requestId: string;
|
|
1532
1565
|
options: SpeechSettingsOptions;
|
|
@@ -1559,6 +1592,13 @@ export declare class DaemonClient {
|
|
|
1559
1592
|
requestId: string;
|
|
1560
1593
|
stats: Record<string, number>;
|
|
1561
1594
|
}>;
|
|
1595
|
+
generatePersonalityProfile(params: {
|
|
1596
|
+
name: string;
|
|
1597
|
+
roles?: string[];
|
|
1598
|
+
glowA?: string;
|
|
1599
|
+
glowB?: string;
|
|
1600
|
+
cwd?: string;
|
|
1601
|
+
}, requestId?: string): Promise<AgentPersonalitiesGenerateProfileResult>;
|
|
1562
1602
|
sendBrowserAutomationExecuteResponse(response: BrowserAutomationExecuteResponse): void;
|
|
1563
1603
|
readProjectConfig(repoRoot: string, requestId?: string): Promise<ReadProjectConfigPayload>;
|
|
1564
1604
|
writeProjectConfig(input: WriteProjectConfigInput): Promise<WriteProjectConfigPayload>;
|
package/dist/daemon-client.js
CHANGED
|
@@ -169,6 +169,17 @@ function toReasonCode(reason) {
|
|
|
169
169
|
}
|
|
170
170
|
return "unknown";
|
|
171
171
|
}
|
|
172
|
+
// A job-starting brain RPC returns { job, error }; surface the error as a throw
|
|
173
|
+
// so callers get a plain Promise<BrainJob>.
|
|
174
|
+
function unwrapBrainJob(payload) {
|
|
175
|
+
if (payload.error) {
|
|
176
|
+
throw new Error(payload.error);
|
|
177
|
+
}
|
|
178
|
+
if (!payload.job) {
|
|
179
|
+
throw new Error("The brain did not start the operation.");
|
|
180
|
+
}
|
|
181
|
+
return payload.job;
|
|
182
|
+
}
|
|
172
183
|
export class DaemonClient {
|
|
173
184
|
constructor(config) {
|
|
174
185
|
this.config = config;
|
|
@@ -1117,16 +1128,21 @@ export class DaemonClient {
|
|
|
1117
1128
|
responseType: "workspace.archive.preflight.response",
|
|
1118
1129
|
});
|
|
1119
1130
|
}
|
|
1120
|
-
// Repoint a
|
|
1121
|
-
//
|
|
1122
|
-
//
|
|
1123
|
-
|
|
1131
|
+
// Repoint a workspace's base branch (what Changes diffs against, and what
|
|
1132
|
+
// merge-into-base / PR creation target). Pass null to reset to the repository
|
|
1133
|
+
// default, or `redetect` to forget the stored base and detect the branch's parent
|
|
1134
|
+
// again. An `origin/` prefix is preserved: `main` and `origin/main` are different
|
|
1135
|
+
// comparisons whenever local and origin have drifted.
|
|
1136
|
+
// Gated by server_info.features.worktreeDiffBase; repointing a plain (non-worktree)
|
|
1137
|
+
// checkout additionally needs server_info.features.checkoutDiffBaseAnyRepo.
|
|
1138
|
+
async setWorktreeBaseRef(workspaceId, baseRef, options, requestId) {
|
|
1124
1139
|
return this.sendCorrelatedSessionRequest({
|
|
1125
1140
|
requestId,
|
|
1126
1141
|
message: {
|
|
1127
1142
|
type: "worktree.baseRef.set.request",
|
|
1128
1143
|
workspaceId,
|
|
1129
1144
|
baseRef,
|
|
1145
|
+
...(options?.redetect ? { redetect: true } : {}),
|
|
1130
1146
|
},
|
|
1131
1147
|
responseType: "worktree.baseRef.set.response",
|
|
1132
1148
|
});
|
|
@@ -1703,6 +1719,26 @@ export class DaemonClient {
|
|
|
1703
1719
|
}
|
|
1704
1720
|
return { title: payload.title };
|
|
1705
1721
|
}
|
|
1722
|
+
/**
|
|
1723
|
+
* Moves a chat to another workspace over the same directory. Throws with the
|
|
1724
|
+
* daemon's reason when refused; the same-directory rule is enforced there, not
|
|
1725
|
+
* here, so the caller gets one explanation rather than two.
|
|
1726
|
+
*/
|
|
1727
|
+
async transferAgentWorkspace(agentId, workspaceId, requestId) {
|
|
1728
|
+
const payload = await this.sendCorrelatedSessionRequest({
|
|
1729
|
+
requestId,
|
|
1730
|
+
message: {
|
|
1731
|
+
type: "agent.workspace.transfer.request",
|
|
1732
|
+
agentId,
|
|
1733
|
+
workspaceId,
|
|
1734
|
+
},
|
|
1735
|
+
responseType: "agent.workspace.transfer.response",
|
|
1736
|
+
});
|
|
1737
|
+
if (!payload.accepted || !payload.workspaceId) {
|
|
1738
|
+
throw new Error(payload.error ?? "Failed to move chat");
|
|
1739
|
+
}
|
|
1740
|
+
return { workspaceId: payload.workspaceId };
|
|
1741
|
+
}
|
|
1706
1742
|
async listProjectLinks(requestId) {
|
|
1707
1743
|
const payload = await this.sendNamespacedCorrelatedSessionRequest({
|
|
1708
1744
|
requestId,
|
|
@@ -3912,6 +3948,249 @@ export class DaemonClient {
|
|
|
3912
3948
|
responseType: "set_daemon_config_response",
|
|
3913
3949
|
});
|
|
3914
3950
|
}
|
|
3951
|
+
// Enumerate a connector's tools live (connect + listTools), each flagged with
|
|
3952
|
+
// its configured disabled state. Registry edits (add/enable/disable a
|
|
3953
|
+
// connector or a tool) go through patchDaemonConfig's `connectors` instead.
|
|
3954
|
+
async connectorsListTools(connectorId, requestId) {
|
|
3955
|
+
return this.sendCorrelatedSessionRequest({
|
|
3956
|
+
requestId,
|
|
3957
|
+
message: {
|
|
3958
|
+
type: "connectors.list_tools.request",
|
|
3959
|
+
connectorId,
|
|
3960
|
+
},
|
|
3961
|
+
responseType: "connectors.list_tools.response",
|
|
3962
|
+
});
|
|
3963
|
+
}
|
|
3964
|
+
async brainHostStatus(requestId) {
|
|
3965
|
+
const payload = await this.sendCorrelatedSessionRequest({
|
|
3966
|
+
requestId,
|
|
3967
|
+
message: {
|
|
3968
|
+
type: "brain.host.status.request",
|
|
3969
|
+
},
|
|
3970
|
+
responseType: "brain.host.status.response",
|
|
3971
|
+
});
|
|
3972
|
+
return payload.status;
|
|
3973
|
+
}
|
|
3974
|
+
async brainHostStart(model, requestId) {
|
|
3975
|
+
const payload = await this.sendCorrelatedSessionRequest({
|
|
3976
|
+
requestId,
|
|
3977
|
+
message: {
|
|
3978
|
+
type: "brain.host.start.request",
|
|
3979
|
+
model: model ?? null,
|
|
3980
|
+
},
|
|
3981
|
+
responseType: "brain.host.start.response",
|
|
3982
|
+
});
|
|
3983
|
+
return payload.status;
|
|
3984
|
+
}
|
|
3985
|
+
async brainHostStop(requestId) {
|
|
3986
|
+
const payload = await this.sendCorrelatedSessionRequest({
|
|
3987
|
+
requestId,
|
|
3988
|
+
message: {
|
|
3989
|
+
type: "brain.host.stop.request",
|
|
3990
|
+
},
|
|
3991
|
+
responseType: "brain.host.stop.response",
|
|
3992
|
+
});
|
|
3993
|
+
return payload.status;
|
|
3994
|
+
}
|
|
3995
|
+
async brainHostRestart(model, requestId) {
|
|
3996
|
+
const payload = await this.sendCorrelatedSessionRequest({
|
|
3997
|
+
requestId,
|
|
3998
|
+
message: {
|
|
3999
|
+
type: "brain.host.restart.request",
|
|
4000
|
+
model: model ?? null,
|
|
4001
|
+
},
|
|
4002
|
+
responseType: "brain.host.restart.response",
|
|
4003
|
+
});
|
|
4004
|
+
return payload.status;
|
|
4005
|
+
}
|
|
4006
|
+
async brainEvalsGet(requestId) {
|
|
4007
|
+
const payload = await this.sendCorrelatedSessionRequest({
|
|
4008
|
+
requestId,
|
|
4009
|
+
message: {
|
|
4010
|
+
type: "brain.evals.get.request",
|
|
4011
|
+
},
|
|
4012
|
+
responseType: "brain.evals.get.response",
|
|
4013
|
+
});
|
|
4014
|
+
return payload.evals;
|
|
4015
|
+
}
|
|
4016
|
+
async brainRemoteConfigGet(requestId) {
|
|
4017
|
+
const payload = await this.sendCorrelatedSessionRequest({
|
|
4018
|
+
requestId,
|
|
4019
|
+
message: {
|
|
4020
|
+
type: "brain.remote.config.get.request",
|
|
4021
|
+
},
|
|
4022
|
+
responseType: "brain.remote.config.get.response",
|
|
4023
|
+
});
|
|
4024
|
+
if (payload.error) {
|
|
4025
|
+
throw new Error(payload.error);
|
|
4026
|
+
}
|
|
4027
|
+
return payload.config;
|
|
4028
|
+
}
|
|
4029
|
+
async brainRemoteConfigPatch(patch, requestId) {
|
|
4030
|
+
const payload = await this.sendCorrelatedSessionRequest({
|
|
4031
|
+
requestId,
|
|
4032
|
+
message: {
|
|
4033
|
+
type: "brain.remote.config.patch.request",
|
|
4034
|
+
patch,
|
|
4035
|
+
},
|
|
4036
|
+
responseType: "brain.remote.config.patch.response",
|
|
4037
|
+
});
|
|
4038
|
+
if (payload.error) {
|
|
4039
|
+
throw new Error(payload.error);
|
|
4040
|
+
}
|
|
4041
|
+
return payload.config;
|
|
4042
|
+
}
|
|
4043
|
+
async brainModelsList(requestId) {
|
|
4044
|
+
const payload = await this.sendCorrelatedSessionRequest({
|
|
4045
|
+
requestId,
|
|
4046
|
+
message: {
|
|
4047
|
+
type: "brain.models.list.request",
|
|
4048
|
+
},
|
|
4049
|
+
responseType: "brain.models.list.response",
|
|
4050
|
+
});
|
|
4051
|
+
if (payload.error) {
|
|
4052
|
+
throw new Error(payload.error);
|
|
4053
|
+
}
|
|
4054
|
+
return payload.models;
|
|
4055
|
+
}
|
|
4056
|
+
async brainNetworkDiscover(requestId) {
|
|
4057
|
+
const payload = await this.sendCorrelatedSessionRequest({
|
|
4058
|
+
requestId,
|
|
4059
|
+
message: {
|
|
4060
|
+
type: "brain.network.discover.request",
|
|
4061
|
+
},
|
|
4062
|
+
responseType: "brain.network.discover.response",
|
|
4063
|
+
});
|
|
4064
|
+
if (payload.error) {
|
|
4065
|
+
throw new Error(payload.error);
|
|
4066
|
+
}
|
|
4067
|
+
return payload.info;
|
|
4068
|
+
}
|
|
4069
|
+
async brainModelsScan(requestId) {
|
|
4070
|
+
const payload = await this.sendCorrelatedSessionRequest({
|
|
4071
|
+
requestId,
|
|
4072
|
+
message: { type: "brain.models.scan.request" },
|
|
4073
|
+
responseType: "brain.models.scan.response",
|
|
4074
|
+
});
|
|
4075
|
+
if (payload.error) {
|
|
4076
|
+
throw new Error(payload.error);
|
|
4077
|
+
}
|
|
4078
|
+
return payload.models;
|
|
4079
|
+
}
|
|
4080
|
+
async brainCatalogList(requestId) {
|
|
4081
|
+
const payload = await this.sendCorrelatedSessionRequest({
|
|
4082
|
+
requestId,
|
|
4083
|
+
message: { type: "brain.catalog.list.request" },
|
|
4084
|
+
responseType: "brain.catalog.list.response",
|
|
4085
|
+
});
|
|
4086
|
+
if (payload.error) {
|
|
4087
|
+
throw new Error(payload.error);
|
|
4088
|
+
}
|
|
4089
|
+
return payload.models;
|
|
4090
|
+
}
|
|
4091
|
+
async brainRuntimeList(requestId) {
|
|
4092
|
+
const payload = await this.sendCorrelatedSessionRequest({
|
|
4093
|
+
requestId,
|
|
4094
|
+
message: { type: "brain.runtime.list.request" },
|
|
4095
|
+
responseType: "brain.runtime.list.response",
|
|
4096
|
+
});
|
|
4097
|
+
if (payload.error) {
|
|
4098
|
+
throw new Error(payload.error);
|
|
4099
|
+
}
|
|
4100
|
+
return payload.runtimes;
|
|
4101
|
+
}
|
|
4102
|
+
async brainModelsPull(model, requestId) {
|
|
4103
|
+
const payload = await this.sendCorrelatedSessionRequest({
|
|
4104
|
+
requestId,
|
|
4105
|
+
message: { type: "brain.models.pull.request", model },
|
|
4106
|
+
responseType: "brain.models.pull.response",
|
|
4107
|
+
});
|
|
4108
|
+
return unwrapBrainJob(payload);
|
|
4109
|
+
}
|
|
4110
|
+
async brainHfSearch(query, limit, requestId) {
|
|
4111
|
+
const payload = await this.sendCorrelatedSessionRequest({
|
|
4112
|
+
requestId,
|
|
4113
|
+
message: { type: "brain.hf.search.request", query, limit: limit ?? null },
|
|
4114
|
+
responseType: "brain.hf.search.response",
|
|
4115
|
+
});
|
|
4116
|
+
if (payload.error) {
|
|
4117
|
+
throw new Error(payload.error);
|
|
4118
|
+
}
|
|
4119
|
+
return payload.results;
|
|
4120
|
+
}
|
|
4121
|
+
async brainHfQuants(repo, requestId) {
|
|
4122
|
+
const payload = await this.sendCorrelatedSessionRequest({
|
|
4123
|
+
requestId,
|
|
4124
|
+
message: { type: "brain.hf.quants.request", repo },
|
|
4125
|
+
responseType: "brain.hf.quants.response",
|
|
4126
|
+
});
|
|
4127
|
+
if (payload.error) {
|
|
4128
|
+
throw new Error(payload.error);
|
|
4129
|
+
}
|
|
4130
|
+
return payload.quants;
|
|
4131
|
+
}
|
|
4132
|
+
async brainModelsAdd(repo, quant, requestId) {
|
|
4133
|
+
const payload = await this.sendCorrelatedSessionRequest({
|
|
4134
|
+
requestId,
|
|
4135
|
+
message: { type: "brain.models.add.request", repo, quant },
|
|
4136
|
+
responseType: "brain.models.add.response",
|
|
4137
|
+
});
|
|
4138
|
+
return unwrapBrainJob(payload);
|
|
4139
|
+
}
|
|
4140
|
+
async brainRuntimeInstall(build, requestId) {
|
|
4141
|
+
const payload = await this.sendCorrelatedSessionRequest({
|
|
4142
|
+
requestId,
|
|
4143
|
+
message: { type: "brain.runtime.install.request", build: build ?? null },
|
|
4144
|
+
responseType: "brain.runtime.install.response",
|
|
4145
|
+
});
|
|
4146
|
+
return unwrapBrainJob(payload);
|
|
4147
|
+
}
|
|
4148
|
+
async brainCalibrate(model, requestId) {
|
|
4149
|
+
const payload = await this.sendCorrelatedSessionRequest({
|
|
4150
|
+
requestId,
|
|
4151
|
+
message: { type: "brain.calibrate.request", model },
|
|
4152
|
+
responseType: "brain.calibrate.response",
|
|
4153
|
+
});
|
|
4154
|
+
return unwrapBrainJob(payload);
|
|
4155
|
+
}
|
|
4156
|
+
async brainSweep(model, requestId) {
|
|
4157
|
+
const payload = await this.sendCorrelatedSessionRequest({
|
|
4158
|
+
requestId,
|
|
4159
|
+
message: { type: "brain.sweep.request", model },
|
|
4160
|
+
responseType: "brain.sweep.response",
|
|
4161
|
+
});
|
|
4162
|
+
return unwrapBrainJob(payload);
|
|
4163
|
+
}
|
|
4164
|
+
async brainBench(model, requestId) {
|
|
4165
|
+
const payload = await this.sendCorrelatedSessionRequest({
|
|
4166
|
+
requestId,
|
|
4167
|
+
message: { type: "brain.bench.request", model: model ?? null },
|
|
4168
|
+
responseType: "brain.bench.response",
|
|
4169
|
+
});
|
|
4170
|
+
return unwrapBrainJob(payload);
|
|
4171
|
+
}
|
|
4172
|
+
async brainJobsList(requestId) {
|
|
4173
|
+
const payload = await this.sendCorrelatedSessionRequest({
|
|
4174
|
+
requestId,
|
|
4175
|
+
message: { type: "brain.jobs.list.request" },
|
|
4176
|
+
responseType: "brain.jobs.list.response",
|
|
4177
|
+
});
|
|
4178
|
+
if (payload.error) {
|
|
4179
|
+
throw new Error(payload.error);
|
|
4180
|
+
}
|
|
4181
|
+
return payload.jobs;
|
|
4182
|
+
}
|
|
4183
|
+
async brainJobsCancel(jobId, requestId) {
|
|
4184
|
+
const payload = await this.sendCorrelatedSessionRequest({
|
|
4185
|
+
requestId,
|
|
4186
|
+
message: { type: "brain.jobs.cancel.request", jobId },
|
|
4187
|
+
responseType: "brain.jobs.cancel.response",
|
|
4188
|
+
});
|
|
4189
|
+
if (payload.error) {
|
|
4190
|
+
throw new Error(payload.error);
|
|
4191
|
+
}
|
|
4192
|
+
return payload.jobs;
|
|
4193
|
+
}
|
|
3915
4194
|
async getSpeechSettingsOptions(requestId) {
|
|
3916
4195
|
return this.sendNamespacedCorrelatedSessionRequest({
|
|
3917
4196
|
requestId,
|
|
@@ -3982,6 +4261,25 @@ export class DaemonClient {
|
|
|
3982
4261
|
},
|
|
3983
4262
|
});
|
|
3984
4263
|
}
|
|
4264
|
+
// Author a personality profile (the prose personality prompt) from a draft's
|
|
4265
|
+
// name, roles, and spinner colors. Routed through the Writer chain; the caller
|
|
4266
|
+
// drops the result into the editor's prompt field.
|
|
4267
|
+
async generatePersonalityProfile(params, requestId) {
|
|
4268
|
+
return this.sendNamespacedCorrelatedSessionRequest({
|
|
4269
|
+
requestId,
|
|
4270
|
+
message: {
|
|
4271
|
+
type: "agentPersonalities.generate_profile.request",
|
|
4272
|
+
name: params.name,
|
|
4273
|
+
...(params.roles && params.roles.length > 0 ? { roles: params.roles } : {}),
|
|
4274
|
+
...(params.glowA ? { glowA: params.glowA } : {}),
|
|
4275
|
+
...(params.glowB ? { glowB: params.glowB } : {}),
|
|
4276
|
+
...(params.cwd ? { cwd: params.cwd } : {}),
|
|
4277
|
+
},
|
|
4278
|
+
// Same reason as the voice cues: the daemon spawns a structured-generation
|
|
4279
|
+
// agent, and provider SDK cold starts blow past the 60s default.
|
|
4280
|
+
timeout: 180000,
|
|
4281
|
+
});
|
|
4282
|
+
}
|
|
3985
4283
|
sendBrowserAutomationExecuteResponse(response) {
|
|
3986
4284
|
this.sendSessionMessageStrict(response);
|
|
3987
4285
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@otto-code/client",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.5",
|
|
4
4
|
"description": "Otto client SDK package",
|
|
5
5
|
"license": "AGPL-3.0-or-later",
|
|
6
6
|
"files": [
|
|
@@ -36,8 +36,8 @@
|
|
|
36
36
|
"test": "vitest run"
|
|
37
37
|
},
|
|
38
38
|
"dependencies": {
|
|
39
|
-
"@otto-code/protocol": "0.7.
|
|
40
|
-
"@otto-code/relay": "0.7.
|
|
39
|
+
"@otto-code/protocol": "0.7.5",
|
|
40
|
+
"@otto-code/relay": "0.7.5",
|
|
41
41
|
"zod": "^4.4.3"
|
|
42
42
|
},
|
|
43
43
|
"devDependencies": {
|