@otto-code/client 0.8.17 → 0.8.19

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.
@@ -3,10 +3,10 @@ import type { z } from "zod";
3
3
  import type { ProjectGithubCloneProtocol } from "@otto-code/protocol/messages";
4
4
  import { type ClientCapability } from "@otto-code/protocol/client-capabilities";
5
5
  import { AgentRefreshedStatusPayloadSchema, CheckoutRenameBranchResponseSchema, RenameTerminalResponseSchema, RestartRequestedStatusPayloadSchema, ShutdownRequestedStatusPayloadSchema, DaemonUpdateResponseSchema, type ServerInfoStatusPayload } from "@otto-code/protocol/messages";
6
- 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, FileDownloadTokenResponse, FileEntryKind, FileEol, 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, CheckoutGitFetchResponse, CheckoutPrCreateResponse, CheckoutPrMergeResponse, CheckoutPrMergeMethod, CheckoutGithubSetAutoMergeResponse, CheckoutGithubGetCheckDetailsResponse, PreviewListConfigResponse, PreviewStartResponse, PreviewBindTabResponse, PreviewStopResponse, CheckoutPrStatusResponse, PullRequestTimelineResponse, CheckoutSwitchBranchResponse, StashSaveResponse, StashPopResponse, StashListResponse, KanbanBoardsListResponse, ProjectKanbanTarget, KanbanBoardGetResponse, KanbanCardMoveResponse, KanbanCardCreateResponse, KanbanTaskLinkResponse, ValidateBranchResponse, BranchSuggestionsResponse, FileVersion, CheckoutCommit, ParsedDiffFile, WorkspaceRecoveryState, CheckoutForgeGetCheckDetailsResponse, CheckoutForgeSetAutoMergeResponse, ProjectCreateDirectoryResponse, FsFileWriteResult, FsFileWriteBinaryResult, GitHubSearchResponse, GitHubSearchRequest, ForgeSearchResponse, ForgeSearchRequest, GitHostingProviderId, HostingSearchRequest, HostingSearchResponse, HostingAuthStatusResponse, DirectorySuggestionsResponse, OttoWorktreeListResponse, OttoWorktreeArchiveResponse, ProjectIconSource, ProjectIconResponse, ContextCategory, ContextPromptPreviewGetResponseMessage, ContextReportGetResponseMessage, ContextEdgeConvertResponseMessage, ContextFindingsFixResponseMessage, PersonalityMemoryListResponseMessage, PersonalityMemoryUpdateResponseMessage, PersonalityMemoryTransferResponseMessage, PersonalityMemoryStatsResponseMessage, ProjectKnowledgeListResponseMessage, ProjectKnowledgeGetResponseMessage, ProjectKnowledgeCreateResponseMessage, ProjectKnowledgeApplyResponseMessage, ProjectKnowledgeStatusResponseMessage, ProjectKnowledgeProjectApplyResponseMessage, ProjectKnowledgeReferenceApplyResponseMessage, ProjectKnowledgeRootApplyResponseMessage, ProjectKnowledgeDeleteResponseMessage, ProjectIconGetResponse, ProjectAddResponse, ProjectResolveWorkspaceForPathResponse, 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, HistoryAgentsStorageStatsResponse, KillTerminalResponse, CaptureTerminalResponse, TerminalCompatibilityDiagnosticResponse, TerminalInput, SessionInboundMessage, SessionOutboundMessage, SendAgentMessageRequest, AgentPromptDelivery, TasksSuggestedStartMode, OttoConfigRaw, OttoConfigRevision, WorkspaceCreateRequest } from "@otto-code/protocol/messages";
6
+ 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, FileDownloadTokenResponse, FileEntryKind, FileEol, 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, CheckoutGitFetchResponse, CheckoutPrCreateResponse, CheckoutPrMergeResponse, CheckoutPrMergeMethod, CheckoutGithubSetAutoMergeResponse, CheckoutGithubGetCheckDetailsResponse, PreviewListConfigResponse, PreviewStartResponse, PreviewBindTabResponse, PreviewStopResponse, CheckoutPrStatusResponse, PullRequestTimelineResponse, HostingPullRequestThreadSetResolvedResponse, HostingPullRequestCommentSetReactionResponse, CheckoutSwitchBranchResponse, StashSaveResponse, StashPopResponse, StashListResponse, KanbanBoardsListResponse, ProjectKanbanTarget, ProjectKnowledgeStoreDescriptor, ProjectKnowledgeStoreLocationValue, KanbanBoardGetResponse, KanbanCardMoveResponse, KanbanCardCreateResponse, KanbanTaskLinkResponse, ValidateBranchResponse, BranchSuggestionsResponse, FileVersion, CheckoutCommit, ParsedDiffFile, WorkspaceRecoveryState, CheckoutForgeGetCheckDetailsResponse, CheckoutForgeSetAutoMergeResponse, ProjectCreateDirectoryResponse, FsFileWriteResult, FsFileWriteBinaryResult, GitHubSearchResponse, GitHubSearchRequest, ForgeSearchResponse, ForgeSearchRequest, GitHostingProviderId, HostingSearchRequest, HostingSearchResponse, HostingAuthStatusResponse, DirectorySuggestionsResponse, OttoWorktreeListResponse, OttoWorktreeArchiveResponse, ProjectIconSource, ProjectIconResponse, ContextCategory, ContextPromptPreviewGetResponseMessage, ContextReportGetResponseMessage, ContextEdgeConvertResponseMessage, ContextFindingsFixResponseMessage, PersonalityMemoryListResponseMessage, PersonalityMemoryUpdateResponseMessage, PersonalityMemoryTransferResponseMessage, PersonalityMemoryStatsResponseMessage, ProjectKnowledgeListResponseMessage, ProjectKnowledgeGetResponseMessage, ProjectKnowledgeCreateResponseMessage, ProjectKnowledgeApplyResponseMessage, ProjectKnowledgeStatusResponseMessage, ProjectKnowledgeProjectApplyResponseMessage, ProjectKnowledgeReferenceApplyResponseMessage, ProjectKnowledgeRootApplyResponseMessage, ProjectKnowledgeRefineApplyResponseMessage, ProjectKnowledgeRefinementProposeResponseMessage, ProjectKnowledgeDeleteResponseMessage, ProjectIconGetResponse, ProjectAddResponse, ProjectResolveWorkspaceForPathResponse, 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, HistoryAgentsStorageStatsResponse, KillTerminalResponse, CaptureTerminalResponse, TerminalCompatibilityDiagnosticResponse, TerminalInput, SessionInboundMessage, SessionOutboundMessage, SendAgentMessageRequest, AgentPromptDelivery, TasksSuggestedStartMode, OttoConfigRaw, OttoConfigRevision, WorkspaceCreateRequest } from "@otto-code/protocol/messages";
7
7
  import type { AgentPermissionRequest, AgentPermissionResponse, AgentPersistenceHandle, AgentProviderNotice, AgentProvider, AgentSessionConfig } from "@otto-code/protocol/agent-types";
8
8
  import type { OrchestrationGraph, PromptTemplate, Run } from "@otto-code/protocol/orchestration";
9
- import type { BrainCatalogModel, BrainDiskUsage, BrainEvals, BrainHfSearchResult, BrainHostStatus, BrainInstalledModel, BrainInventoryModel, BrainJob, BrainLogsTailResponse, BrainLogsWatchResponse, BrainModelBudgetGetResponse, BrainModelDeleteResponse, BrainModelLoadResponse, BrainModelProfileGetResponse, BrainModelProfileSetResponse, BrainModelRenameResetResponse, BrainModelRenameResponse, BrainNetworkInfo, BrainRemoteConfig, BrainRepoQuant, BrainRuntime, ConnectorsListToolsResponse, ConnectorsOauthAuthorizeResponse, ConnectorsOauthDisconnectResponse, CommunicationsGetOverviewResponse, CommunicationsInboxGetHomeResponse, CommunicationsInboxNotificationsAcknowledgeResponse, CommunicationsInboxSearchResponse, CommunicationsInboxSetFavoriteResponse, CommunicationsInboxGetPresenceResponse, CommunicationsInboxGetMessagesResponse, CommunicationsInboxSetPresenceResponse, CommunicationsInboxSetEnabledResponse, CommunicationsInboxSendMessageResponse, CommunicationsRoomGetResponse, CommunicationsRoomThreadGetResponse, CommunicationsRoomMessageSendResponse, CommunicationsRoomReactionSetResponse, IntegrationsAuthorizationGetOverviewResponse, IntegrationsAuthorizationGetMethodsResponse, IntegrationsAuthorizationStartBrowserResponse, IntegrationsZoomStartAuthorizationResponse, CueMoment, MutableDaemonConfig, MutableDaemonConfigPatch, ProjectLink, SpeechSettingsOptions, SpeechTtsPreviewResult, SpeechTtsSpeakResult, SpeechTtsSpeakCancelResult, VisualizerVoiceCuesResult, AgentPersonalitiesGenerateProfileResult } from "@otto-code/protocol/messages";
9
+ import type { BrainCatalogModel, BrainDiskUsage, BrainEvals, BrainHfSearchResult, BrainHostStatus, BrainInstalledModel, BrainInventoryModel, BrainJob, BrainLogsTailResponse, BrainLogsWatchResponse, BrainModelBudgetGetResponse, BrainModelDeleteResponse, BrainModelLoadResponse, BrainModelProfileGetResponse, BrainModelProfileSetResponse, BrainModelRenameResetResponse, BrainModelRenameResponse, BrainNetworkInfo, BrainRemoteConfig, BrainRepoQuant, BrainRuntime, ConnectorsListToolsResponse, ConnectorsOauthAuthorizeResponse, ConnectorsOauthDisconnectResponse, CommunicationsGetOverviewResponse, CommunicationsInboxGetHomeResponse, CommunicationsInboxNotificationsAcknowledgeResponse, CommunicationsInboxSearchResponse, CommunicationsInboxSetFavoriteResponse, CommunicationsInboxGetPresenceResponse, CommunicationsInboxGetMessagesResponse, CommunicationsInboxSetPresenceResponse, CommunicationsInboxSetEnabledResponse, CommunicationsInboxSendMessageResponse, CommunicationsRoomGetResponse, CommunicationsRoomThreadGetResponse, CommunicationsRoomMessageSendResponse, CommunicationsRoomReactionSetResponse, IntegrationsAuthorizationGetOverviewResponse, IntegrationsAuthorizationGetMethodsResponse, IntegrationsAuthorizationStartBrowserResponse, IntegrationsZoomStartAuthorizationResponse, CueMoment, MutableDaemonConfig, MutableDaemonConfigPatch, SpeechSettingsOptions, SpeechTtsPreviewResult, SpeechTtsSpeakResult, SpeechTtsSpeakCancelResult, VisualizerVoiceCuesResult, AgentPersonalitiesGenerateProfileResult } from "@otto-code/protocol/messages";
10
10
  import type { AgentConfigApply } from "@otto-code/protocol/messages";
11
11
  import { type DaemonTransportFactory, type WebSocketFactory } from "./daemon-client-transport.js";
12
12
  import { type DaemonClientInboundDispatchTiming, type DaemonClientTrafficHotspot, type DaemonClientTrafficTotals } from "./daemon-client-runtime-metrics.js";
@@ -216,6 +216,8 @@ type PreviewStopPayload = PreviewStopResponse["payload"];
216
216
  type CheckoutGithubGetCheckDetailsPayload = CheckoutGithubGetCheckDetailsResponse["payload"];
217
217
  type CheckoutPrStatusPayload = CheckoutPrStatusResponse["payload"];
218
218
  type PullRequestTimelinePayload = PullRequestTimelineResponse["payload"];
219
+ type HostingPullRequestThreadSetResolvedPayload = HostingPullRequestThreadSetResolvedResponse["payload"];
220
+ type HostingPullRequestCommentSetReactionPayload = HostingPullRequestCommentSetReactionResponse["payload"];
219
221
  type CheckoutSwitchBranchPayload = CheckoutSwitchBranchResponse["payload"];
220
222
  export type RenameBranchResult = z.infer<typeof CheckoutRenameBranchResponseSchema>["payload"];
221
223
  type StashSavePayload = StashSaveResponse["payload"];
@@ -1079,6 +1081,30 @@ export declare class DaemonClient {
1079
1081
  }, requestId?: string): Promise<{
1080
1082
  target: ProjectKanbanTarget | null;
1081
1083
  }>;
1084
+ /**
1085
+ * Sets (or with a null location, clears) where a project keeps its Knowledge
1086
+ * store. `movePages` decides whether the existing pages are carried across;
1087
+ * the daemon never moves them on its own, because a repository-to-host move
1088
+ * stages a deletion in the user's working tree.
1089
+ */
1090
+ setProjectKnowledgeStoreLocation(input: {
1091
+ projectId: string;
1092
+ location: ProjectKnowledgeStoreLocationValue | null;
1093
+ movePages: boolean;
1094
+ workspaceId?: string;
1095
+ }, requestId?: string): Promise<{
1096
+ store: ProjectKnowledgeStoreDescriptor | null;
1097
+ movedPageCount: number;
1098
+ }>;
1099
+ /**
1100
+ * The store a project currently resolves to, and why. Addressed by project id
1101
+ * or by workspace id: Project Settings has the former and no open workspace,
1102
+ * the Knowledge panel has the latter.
1103
+ */
1104
+ getProjectKnowledgeStore(input: {
1105
+ projectId?: string;
1106
+ workspaceId?: string;
1107
+ }, requestId?: string): Promise<ProjectKnowledgeStoreDescriptor | null>;
1082
1108
  setProjectIcon(projectId: string, source: ProjectIconSource, requestId?: string): Promise<void>;
1083
1109
  removeProject(projectId: string, requestId?: string): Promise<{
1084
1110
  removedWorkspaceIds: string[];
@@ -1094,9 +1120,6 @@ export declare class DaemonClient {
1094
1120
  transferAgentWorkspace(agentId: string, workspaceId: string, requestId?: string): Promise<{
1095
1121
  workspaceId: string;
1096
1122
  }>;
1097
- listProjectLinks(requestId?: string): Promise<ProjectLink[]>;
1098
- linkProjects(projectId: string, otherProjectId: string, requestId?: string): Promise<ProjectLink[]>;
1099
- unlinkProjects(projectId: string, otherProjectId: string, requestId?: string): Promise<ProjectLink[]>;
1100
1123
  resumeAgent(handle: AgentPersistenceHandle, overrides?: Partial<AgentSessionConfig>): Promise<AgentSnapshotPayload>;
1101
1124
  importAgent(input: ImportAgentInput): Promise<AgentSnapshotPayload>;
1102
1125
  refreshAgent(agentId: string, requestId?: string): Promise<AgentRefreshedStatusPayload>;
@@ -1348,6 +1371,21 @@ export declare class DaemonClient {
1348
1371
  repoOwner: string;
1349
1372
  repoName: string;
1350
1373
  }, requestId?: string): Promise<PullRequestTimelinePayload>;
1374
+ /** Requires server_info.features.forgeReviewThreads. */
1375
+ setHostingPullRequestThreadResolved(input: {
1376
+ cwd: string;
1377
+ prNumber: number;
1378
+ threadId: string;
1379
+ resolved: boolean;
1380
+ }, requestId?: string): Promise<HostingPullRequestThreadSetResolvedPayload>;
1381
+ /** Requires server_info.features.forgeReviewThreads. */
1382
+ setHostingPullRequestCommentReaction(input: {
1383
+ cwd: string;
1384
+ prNumber: number;
1385
+ commentId: string;
1386
+ content: "THUMBS_UP" | "THUMBS_DOWN" | "LAUGH" | "HOORAY" | "CONFUSED" | "HEART" | "ROCKET" | "EYES";
1387
+ reacted: boolean;
1388
+ }, requestId?: string): Promise<HostingPullRequestCommentSetReactionPayload>;
1351
1389
  checkoutSwitchBranch(cwd: string, branch: string, requestId?: string): Promise<CheckoutSwitchBranchPayload>;
1352
1390
  renameBranch(input: RenameBranchInput): Promise<RenameBranchResult>;
1353
1391
  stashSave(cwd: string, options?: {
@@ -1611,6 +1649,7 @@ export declare class DaemonClient {
1611
1649
  title?: string;
1612
1650
  statement?: string;
1613
1651
  evidence?: string;
1652
+ tags?: string[];
1614
1653
  provenanceText?: string;
1615
1654
  provenanceSource?: string;
1616
1655
  provenanceAffects?: string[];
@@ -1647,6 +1686,41 @@ export declare class DaemonClient {
1647
1686
  slug: string;
1648
1687
  body: string;
1649
1688
  }, requestId?: string): Promise<ProjectKnowledgeRootApplyResponseMessage["payload"]>;
1689
+ /** Requires server_info.features.projectKnowledgeRefinement. */
1690
+ applyProjectKnowledgeRefinement(input: {
1691
+ workspaceId: string;
1692
+ target: "record";
1693
+ id: string;
1694
+ statement: string;
1695
+ evidence?: string;
1696
+ expectedUpdatedAt?: string;
1697
+ } | {
1698
+ workspaceId: string;
1699
+ target: "root";
1700
+ slug: string;
1701
+ body: string;
1702
+ expectedBodyDigest?: string;
1703
+ }, requestId?: string): Promise<ProjectKnowledgeRefineApplyResponseMessage["payload"]>;
1704
+ /** Requires server_info.features.projectKnowledgeAnchoredRefinement. */
1705
+ proposeProjectKnowledgeRefinement(input: {
1706
+ workspaceId: string;
1707
+ content: string;
1708
+ directives: Array<{
1709
+ id: string;
1710
+ kind: "replace" | "refine";
1711
+ anchor: {
1712
+ kind: "text";
1713
+ start: number;
1714
+ end: number;
1715
+ } | {
1716
+ kind: "fence";
1717
+ start: number;
1718
+ end: number;
1719
+ language: string | null;
1720
+ };
1721
+ value: string;
1722
+ }>;
1723
+ }, requestId?: string): Promise<ProjectKnowledgeRefinementProposeResponseMessage["payload"]>;
1650
1724
  deleteProjectKnowledge(input: {
1651
1725
  workspaceId: string;
1652
1726
  id: string;
@@ -1856,6 +1856,46 @@ export class DaemonClient {
1856
1856
  }
1857
1857
  return { target: payload.target };
1858
1858
  }
1859
+ /**
1860
+ * Sets (or with a null location, clears) where a project keeps its Knowledge
1861
+ * store. `movePages` decides whether the existing pages are carried across;
1862
+ * the daemon never moves them on its own, because a repository-to-host move
1863
+ * stages a deletion in the user's working tree.
1864
+ */
1865
+ async setProjectKnowledgeStoreLocation(input, requestId) {
1866
+ const payload = await this.sendCorrelatedSessionRequest({
1867
+ requestId,
1868
+ message: {
1869
+ type: "project.knowledge.store.set.request",
1870
+ projectId: input.projectId,
1871
+ location: input.location,
1872
+ movePages: input.movePages,
1873
+ ...(input.workspaceId ? { workspaceId: input.workspaceId } : {}),
1874
+ },
1875
+ responseType: "project.knowledge.store.set.response",
1876
+ });
1877
+ if (!payload.accepted) {
1878
+ throw new Error(payload.error ?? "setProjectKnowledgeStoreLocation rejected");
1879
+ }
1880
+ return { store: payload.store, movedPageCount: payload.movedPageCount };
1881
+ }
1882
+ /**
1883
+ * The store a project currently resolves to, and why. Addressed by project id
1884
+ * or by workspace id: Project Settings has the former and no open workspace,
1885
+ * the Knowledge panel has the latter.
1886
+ */
1887
+ async getProjectKnowledgeStore(input, requestId) {
1888
+ const payload = await this.sendCorrelatedSessionRequest({
1889
+ requestId,
1890
+ message: {
1891
+ type: "project.knowledge.store.get.request",
1892
+ ...(input.projectId ? { projectId: input.projectId } : {}),
1893
+ ...(input.workspaceId ? { workspaceId: input.workspaceId } : {}),
1894
+ },
1895
+ responseType: "project.knowledge.store.get.response",
1896
+ });
1897
+ return payload.store;
1898
+ }
1859
1899
  async setProjectIcon(projectId, source, requestId) {
1860
1900
  const payload = await this.sendNamespacedCorrelatedSessionRequest({
1861
1901
  requestId,
@@ -1912,36 +1952,6 @@ export class DaemonClient {
1912
1952
  }
1913
1953
  return { workspaceId: payload.workspaceId };
1914
1954
  }
1915
- async listProjectLinks(requestId) {
1916
- const payload = await this.sendNamespacedCorrelatedSessionRequest({
1917
- requestId,
1918
- message: { type: "project.links.list.request" },
1919
- });
1920
- if (payload.error) {
1921
- throw new Error(payload.error);
1922
- }
1923
- return payload.links;
1924
- }
1925
- async linkProjects(projectId, otherProjectId, requestId) {
1926
- const payload = await this.sendNamespacedCorrelatedSessionRequest({
1927
- requestId,
1928
- message: { type: "project.links.set.request", projectId, otherProjectId },
1929
- });
1930
- if (!payload.accepted) {
1931
- throw new Error(payload.error ?? "linkProjects rejected");
1932
- }
1933
- return payload.links;
1934
- }
1935
- async unlinkProjects(projectId, otherProjectId, requestId) {
1936
- const payload = await this.sendNamespacedCorrelatedSessionRequest({
1937
- requestId,
1938
- message: { type: "project.links.unset.request", projectId, otherProjectId },
1939
- });
1940
- if (!payload.accepted) {
1941
- throw new Error(payload.error ?? "unlinkProjects rejected");
1942
- }
1943
- return payload.links;
1944
- }
1945
1955
  async resumeAgent(handle, overrides) {
1946
1956
  const requestId = this.createRequestId();
1947
1957
  const message = SessionInboundMessageSchema.parse({
@@ -3475,6 +3485,20 @@ export class DaemonClient {
3475
3485
  responseType: "pull_request_timeline_response",
3476
3486
  });
3477
3487
  }
3488
+ /** Requires server_info.features.forgeReviewThreads. */
3489
+ async setHostingPullRequestThreadResolved(input, requestId) {
3490
+ return this.sendNamespacedCorrelatedSessionRequest({
3491
+ requestId,
3492
+ message: { type: "hosting.pull_request_thread.set_resolved.request", ...input },
3493
+ });
3494
+ }
3495
+ /** Requires server_info.features.forgeReviewThreads. */
3496
+ async setHostingPullRequestCommentReaction(input, requestId) {
3497
+ return this.sendNamespacedCorrelatedSessionRequest({
3498
+ requestId,
3499
+ message: { type: "hosting.pull_request_comment.set_reaction.request", ...input },
3500
+ });
3501
+ }
3478
3502
  async checkoutSwitchBranch(cwd, branch, requestId) {
3479
3503
  return this.sendCorrelatedSessionRequest({
3480
3504
  requestId,
@@ -4395,6 +4419,20 @@ export class DaemonClient {
4395
4419
  message: { type: "project.knowledge.root.apply.request", ...input },
4396
4420
  });
4397
4421
  }
4422
+ /** Requires server_info.features.projectKnowledgeRefinement. */
4423
+ async applyProjectKnowledgeRefinement(input, requestId) {
4424
+ return this.sendNamespacedCorrelatedSessionRequest({
4425
+ requestId,
4426
+ message: { type: "project.knowledge.refine.apply.request", ...input },
4427
+ });
4428
+ }
4429
+ /** Requires server_info.features.projectKnowledgeAnchoredRefinement. */
4430
+ async proposeProjectKnowledgeRefinement(input, requestId) {
4431
+ return this.sendNamespacedCorrelatedSessionRequest({
4432
+ requestId,
4433
+ message: { type: "project.knowledge.refinement.propose.request", ...input },
4434
+ });
4435
+ }
4398
4436
  async deleteProjectKnowledge(input, requestId) {
4399
4437
  return this.sendNamespacedCorrelatedSessionRequest({
4400
4438
  requestId,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@otto-code/client",
3
- "version": "0.8.17",
3
+ "version": "0.8.19",
4
4
  "description": "Otto client SDK package",
5
5
  "license": "AGPL-3.0-or-later",
6
6
  "files": [
@@ -40,8 +40,8 @@
40
40
  "test": "vitest run"
41
41
  },
42
42
  "dependencies": {
43
- "@otto-code/protocol": "0.8.17",
44
- "@otto-code/relay": "0.8.17",
43
+ "@otto-code/protocol": "0.8.19",
44
+ "@otto-code/relay": "0.8.19",
45
45
  "zod": "^4.4.3"
46
46
  },
47
47
  "devDependencies": {