@ottocode/web-sdk 0.1.306 → 0.1.307

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.
Files changed (60) hide show
  1. package/dist/components/chat/ChatInput.d.ts.map +1 -1
  2. package/dist/components/chat/ConfigModal.d.ts.map +1 -1
  3. package/dist/components/chat/InputSubagentsBar.d.ts +6 -0
  4. package/dist/components/chat/InputSubagentsBar.d.ts.map +1 -0
  5. package/dist/components/goals/GoalsSidebar.d.ts +6 -0
  6. package/dist/components/goals/GoalsSidebar.d.ts.map +1 -0
  7. package/dist/components/goals/GoalsSidebarToggle.d.ts +6 -0
  8. package/dist/components/goals/GoalsSidebarToggle.d.ts.map +1 -0
  9. package/dist/components/goals/index.d.ts +3 -0
  10. package/dist/components/goals/index.d.ts.map +1 -0
  11. package/dist/components/index.d.ts +4 -0
  12. package/dist/components/index.d.ts.map +1 -1
  13. package/dist/components/index.js +6220 -4751
  14. package/dist/components/index.js.map +25 -13
  15. package/dist/components/messages/GoalStartNotice.d.ts +12 -0
  16. package/dist/components/messages/GoalStartNotice.d.ts.map +1 -0
  17. package/dist/components/messages/SubagentResultsNotice.d.ts +21 -0
  18. package/dist/components/messages/SubagentResultsNotice.d.ts.map +1 -0
  19. package/dist/components/messages/UserMessageGroup.d.ts.map +1 -1
  20. package/dist/components/messages/compactActivity.d.ts.map +1 -1
  21. package/dist/components/messages/renderers/GoalToolRenderer.d.ts +3 -0
  22. package/dist/components/messages/renderers/GoalToolRenderer.d.ts.map +1 -0
  23. package/dist/components/messages/renderers/SubagentToolRenderer.d.ts +3 -0
  24. package/dist/components/messages/renderers/SubagentToolRenderer.d.ts.map +1 -0
  25. package/dist/components/messages/renderers/index.d.ts.map +1 -1
  26. package/dist/components/settings/SettingsSidebar.d.ts.map +1 -1
  27. package/dist/components/subagents/SubagentFloatingViewer.d.ts +6 -0
  28. package/dist/components/subagents/SubagentFloatingViewer.d.ts.map +1 -0
  29. package/dist/hooks/index.d.ts +1 -0
  30. package/dist/hooks/index.d.ts.map +1 -1
  31. package/dist/hooks/index.js +260 -63
  32. package/dist/hooks/index.js.map +9 -7
  33. package/dist/hooks/useAgents.d.ts +2 -1
  34. package/dist/hooks/useAgents.d.ts.map +1 -1
  35. package/dist/hooks/useChatComposer.d.ts +1 -0
  36. package/dist/hooks/useChatComposer.d.ts.map +1 -1
  37. package/dist/hooks/useConfig.d.ts +4 -0
  38. package/dist/hooks/useConfig.d.ts.map +1 -1
  39. package/dist/hooks/useGoals.d.ts +48 -0
  40. package/dist/hooks/useGoals.d.ts.map +1 -0
  41. package/dist/hooks/useSessionStream.d.ts.map +1 -1
  42. package/dist/index.js +6276 -4795
  43. package/dist/index.js.map +25 -13
  44. package/dist/lib/api-client/config.d.ts +3 -0
  45. package/dist/lib/api-client/config.d.ts.map +1 -1
  46. package/dist/lib/api-client/goals.d.ts +70 -0
  47. package/dist/lib/api-client/goals.d.ts.map +1 -0
  48. package/dist/lib/api-client/index.d.ts +35 -0
  49. package/dist/lib/api-client/index.d.ts.map +1 -1
  50. package/dist/lib/index.js +78 -1
  51. package/dist/lib/index.js.map +6 -5
  52. package/dist/stores/goalsPanelStore.d.ts +9 -0
  53. package/dist/stores/goalsPanelStore.d.ts.map +1 -0
  54. package/dist/stores/index.d.ts +2 -0
  55. package/dist/stores/index.d.ts.map +1 -1
  56. package/dist/stores/index.js +61 -9
  57. package/dist/stores/index.js.map +5 -3
  58. package/dist/stores/subagentViewerStore.d.ts +15 -0
  59. package/dist/stores/subagentViewerStore.d.ts.map +1 -0
  60. package/package.json +3 -3
@@ -758,6 +758,76 @@ var branchesMixin = {
758
758
  }
759
759
  };
760
760
 
761
+ // src/lib/api-client/goals.ts
762
+ import {
763
+ getSessionGoal as apiGetSessionGoal,
764
+ createSessionGoal as apiCreateSessionGoal,
765
+ updateGoal as apiUpdateGoal,
766
+ addGoalTasks as apiAddGoalTasks,
767
+ updateGoalTask as apiUpdateGoalTask,
768
+ startGoal as apiStartGoal,
769
+ listSessionSubagents as apiListSessionSubagents
770
+ } from "@ottocode/api";
771
+ var goalsMixin = {
772
+ async getSessionGoal(sessionId) {
773
+ const response = await apiGetSessionGoal({ path: { sessionId } });
774
+ if (response.error)
775
+ throw new Error(extractErrorMessage(response.error));
776
+ return response.data;
777
+ },
778
+ async createSessionGoal(sessionId, data) {
779
+ const response = await apiCreateSessionGoal({
780
+ path: { sessionId },
781
+ body: data
782
+ });
783
+ if (response.error)
784
+ throw new Error(extractErrorMessage(response.error));
785
+ return response.data;
786
+ },
787
+ async updateGoal(goalId, data) {
788
+ const response = await apiUpdateGoal({
789
+ path: { goalId },
790
+ body: data
791
+ });
792
+ if (response.error)
793
+ throw new Error(extractErrorMessage(response.error));
794
+ return response.data;
795
+ },
796
+ async addGoalTasks(goalId, tasks) {
797
+ const response = await apiAddGoalTasks({
798
+ path: { goalId },
799
+ body: { tasks }
800
+ });
801
+ if (response.error)
802
+ throw new Error(extractErrorMessage(response.error));
803
+ return response.data;
804
+ },
805
+ async updateGoalTask(goalId, taskId, data) {
806
+ const response = await apiUpdateGoalTask({
807
+ path: { goalId, taskId },
808
+ body: data
809
+ });
810
+ if (response.error)
811
+ throw new Error(extractErrorMessage(response.error));
812
+ return response.data;
813
+ },
814
+ async startGoal(goalId) {
815
+ const response = await apiStartGoal({ path: { goalId } });
816
+ if (response.error)
817
+ throw new Error(extractErrorMessage(response.error));
818
+ return response.data;
819
+ },
820
+ async listSessionSubagents(sessionId, status) {
821
+ const response = await apiListSessionSubagents({
822
+ path: { sessionId },
823
+ query: status ? { status } : undefined
824
+ });
825
+ if (response.error)
826
+ throw new Error(extractErrorMessage(response.error));
827
+ return response.data;
828
+ }
829
+ };
830
+
761
831
  // src/lib/api-client/approval.ts
762
832
  import {
763
833
  resolveApproval as apiResolveApproval,
@@ -1313,6 +1383,13 @@ class ApiClient {
1313
1383
  getShareStatus = branchesMixin.getShareStatus;
1314
1384
  shareSession = branchesMixin.shareSession;
1315
1385
  syncSession = branchesMixin.syncSession;
1386
+ getSessionGoal = goalsMixin.getSessionGoal;
1387
+ createSessionGoal = goalsMixin.createSessionGoal;
1388
+ updateGoal = goalsMixin.updateGoal;
1389
+ addGoalTasks = goalsMixin.addGoalTasks;
1390
+ updateGoalTask = goalsMixin.updateGoalTask;
1391
+ startGoal = goalsMixin.startGoal;
1392
+ listSessionSubagents = goalsMixin.listSessionSubagents;
1316
1393
  approveToolCall = approvalMixin.approveToolCall;
1317
1394
  getPendingApprovals = approvalMixin.getPendingApprovals;
1318
1395
  submitSecureInput = secureInputMixin.submitSecureInput;
@@ -4328,6 +4405,8 @@ ${bestEffortUnescapeJsonString(rawTail)}`;
4328
4405
  }
4329
4406
  queryClient.invalidateQueries({ queryKey: ["messages", sessionId] });
4330
4407
  queryClient.invalidateQueries({ queryKey: sessionsQueryKey });
4408
+ queryClient.invalidateQueries({ queryKey: ["goal", sessionId] });
4409
+ queryClient.invalidateQueries({ queryKey: ["subagents", sessionId] });
4331
4410
  break;
4332
4411
  }
4333
4412
  case "tool.delta": {
@@ -4455,6 +4534,13 @@ ${bestEffortUnescapeJsonString(rawTail)}`;
4455
4534
  }
4456
4535
  break;
4457
4536
  }
4537
+ case "goal.updated": {
4538
+ queryClient.invalidateQueries({ queryKey: ["goal", sessionId] });
4539
+ queryClient.invalidateQueries({
4540
+ queryKey: ["subagents", sessionId]
4541
+ });
4542
+ break;
4543
+ }
4458
4544
  case "queue.updated": {
4459
4545
  const queueState = normalizeQueueState({
4460
4546
  currentMessageId: payload?.currentMessageId,
@@ -5878,8 +5964,109 @@ function useParentSession(sessionId) {
5878
5964
  enabled: Boolean(sessionId)
5879
5965
  });
5880
5966
  }
5967
+ // src/hooks/useGoals.ts
5968
+ import { useMutation as useMutation6, useQuery as useQuery8, useQueryClient as useQueryClient8 } from "@tanstack/react-query";
5969
+ var goalQueryKey = (sessionId) => [
5970
+ "goal",
5971
+ sessionId
5972
+ ];
5973
+ var subagentsQueryKey = (sessionId) => [
5974
+ "subagents",
5975
+ sessionId
5976
+ ];
5977
+ function useOttoEnabled() {
5978
+ const { data: config2 } = useConfig();
5979
+ return config2?.defaults?.ottoEnabled ?? true;
5980
+ }
5981
+ function useSessionGoal(sessionId) {
5982
+ const ottoEnabled = useOttoEnabled();
5983
+ return useQuery8({
5984
+ queryKey: goalQueryKey(sessionId),
5985
+ queryFn: () => {
5986
+ if (!sessionId)
5987
+ throw new Error("No session ID");
5988
+ return apiClient.getSessionGoal(sessionId);
5989
+ },
5990
+ enabled: Boolean(sessionId) && ottoEnabled,
5991
+ refetchInterval: 15000
5992
+ });
5993
+ }
5994
+ function useCreateSessionGoal(sessionId) {
5995
+ const queryClient = useQueryClient8();
5996
+ return useMutation6({
5997
+ mutationFn: (data) => {
5998
+ if (!sessionId)
5999
+ throw new Error("No session ID");
6000
+ return apiClient.createSessionGoal(sessionId, data);
6001
+ },
6002
+ onSuccess: () => {
6003
+ queryClient.invalidateQueries({ queryKey: goalQueryKey(sessionId) });
6004
+ }
6005
+ });
6006
+ }
6007
+ function useUpdateGoal(sessionId) {
6008
+ const queryClient = useQueryClient8();
6009
+ return useMutation6({
6010
+ mutationFn: (input) => apiClient.updateGoal(input.goalId, {
6011
+ title: input.title,
6012
+ status: input.status
6013
+ }),
6014
+ onSuccess: () => {
6015
+ queryClient.invalidateQueries({ queryKey: goalQueryKey(sessionId) });
6016
+ }
6017
+ });
6018
+ }
6019
+ function useAddGoalTasks(sessionId) {
6020
+ const queryClient = useQueryClient8();
6021
+ return useMutation6({
6022
+ mutationFn: (input) => apiClient.addGoalTasks(input.goalId, input.tasks),
6023
+ onSuccess: () => {
6024
+ queryClient.invalidateQueries({ queryKey: goalQueryKey(sessionId) });
6025
+ }
6026
+ });
6027
+ }
6028
+ function useUpdateGoalTask(sessionId) {
6029
+ const queryClient = useQueryClient8();
6030
+ return useMutation6({
6031
+ mutationFn: (input) => apiClient.updateGoalTask(input.goalId, input.taskId, {
6032
+ content: input.content,
6033
+ status: input.status,
6034
+ note: input.note
6035
+ }),
6036
+ onSuccess: () => {
6037
+ queryClient.invalidateQueries({ queryKey: goalQueryKey(sessionId) });
6038
+ }
6039
+ });
6040
+ }
6041
+ function useSessionSubagents(sessionId, status) {
6042
+ return useQuery8({
6043
+ queryKey: [...subagentsQueryKey(sessionId), status ?? "all"],
6044
+ queryFn: () => {
6045
+ if (!sessionId)
6046
+ throw new Error("No session ID");
6047
+ return apiClient.listSessionSubagents(sessionId, status);
6048
+ },
6049
+ enabled: Boolean(sessionId),
6050
+ refetchInterval: (query) => {
6051
+ const hasRunning = query.state.data?.subagents.some((record) => record.status === "running");
6052
+ return hasRunning ? 5000 : 30000;
6053
+ }
6054
+ });
6055
+ }
6056
+ function useStartGoal(sessionId) {
6057
+ const queryClient = useQueryClient8();
6058
+ return useMutation6({
6059
+ mutationFn: (input) => apiClient.startGoal(input.goalId),
6060
+ onSuccess: () => {
6061
+ queryClient.invalidateQueries({ queryKey: goalQueryKey(sessionId) });
6062
+ if (sessionId) {
6063
+ queryClient.invalidateQueries({ queryKey: ["messages", sessionId] });
6064
+ }
6065
+ }
6066
+ });
6067
+ }
5881
6068
  // src/hooks/useResearch.ts
5882
- import { useQuery as useQuery8, useMutation as useMutation6, useQueryClient as useQueryClient8 } from "@tanstack/react-query";
6069
+ import { useQuery as useQuery9, useMutation as useMutation7, useQueryClient as useQueryClient9 } from "@tanstack/react-query";
5883
6070
  import {
5884
6071
  createResearchSession as apiCreateResearchSession,
5885
6072
  deleteResearchSession as apiDeleteResearchSession,
@@ -5975,7 +6162,7 @@ class ResearchApiClient {
5975
6162
  }
5976
6163
  var researchApi = new ResearchApiClient;
5977
6164
  function useResearchSessions(parentSessionId, enabled = true) {
5978
- return useQuery8({
6165
+ return useQuery9({
5979
6166
  queryKey: ["research", "sessions", parentSessionId],
5980
6167
  queryFn: () => researchApi.listResearchSessions(parentSessionId),
5981
6168
  enabled: !!parentSessionId && enabled,
@@ -5983,8 +6170,8 @@ function useResearchSessions(parentSessionId, enabled = true) {
5983
6170
  });
5984
6171
  }
5985
6172
  function useCreateResearchSession() {
5986
- const queryClient = useQueryClient8();
5987
- return useMutation6({
6173
+ const queryClient = useQueryClient9();
6174
+ return useMutation7({
5988
6175
  mutationFn: ({
5989
6176
  parentSessionId,
5990
6177
  data
@@ -5997,8 +6184,8 @@ function useCreateResearchSession() {
5997
6184
  });
5998
6185
  }
5999
6186
  function useDeleteResearchSession() {
6000
- const queryClient = useQueryClient8();
6001
- return useMutation6({
6187
+ const queryClient = useQueryClient9();
6188
+ return useMutation7({
6002
6189
  mutationFn: (researchId) => researchApi.deleteResearchSession(researchId),
6003
6190
  onSuccess: () => {
6004
6191
  queryClient.invalidateQueries({ queryKey: ["research", "sessions"] });
@@ -6007,7 +6194,7 @@ function useDeleteResearchSession() {
6007
6194
  }
6008
6195
  function useInjectContext() {
6009
6196
  const addContext = usePendingResearchStore((state) => state.addContext);
6010
- return useMutation6({
6197
+ return useMutation7({
6011
6198
  mutationFn: ({
6012
6199
  parentSessionId,
6013
6200
  researchSessionId,
@@ -6024,8 +6211,8 @@ function useInjectContext() {
6024
6211
  });
6025
6212
  }
6026
6213
  function useExportToSession() {
6027
- const queryClient = useQueryClient8();
6028
- return useMutation6({
6214
+ const queryClient = useQueryClient9();
6215
+ return useMutation7({
6029
6216
  mutationFn: ({
6030
6217
  researchId,
6031
6218
  data
@@ -6324,9 +6511,9 @@ function useOttoRouterBalance(providerName) {
6324
6511
  };
6325
6512
  }
6326
6513
  // src/hooks/useShareStatus.ts
6327
- import { useQuery as useQuery9 } from "@tanstack/react-query";
6514
+ import { useQuery as useQuery10 } from "@tanstack/react-query";
6328
6515
  function useShareStatus(sessionId) {
6329
- const { data, isLoading, error } = useQuery9({
6516
+ const { data, isLoading, error } = useQuery10({
6330
6517
  queryKey: ["share-status", sessionId],
6331
6518
  queryFn: () => apiClient.getShareStatus(sessionId),
6332
6519
  enabled: !!sessionId,
@@ -6470,7 +6657,7 @@ function useTopupCallback() {
6470
6657
  }
6471
6658
  // src/hooks/useAuthStatus.ts
6472
6659
  import { useEffect as useEffect13, useCallback as useCallback8, useState as useState5, useRef as useRef5 } from "react";
6473
- import { useQueryClient as useQueryClient9 } from "@tanstack/react-query";
6660
+ import { useQueryClient as useQueryClient10 } from "@tanstack/react-query";
6474
6661
 
6475
6662
  // src/stores/onboardingStore.ts
6476
6663
  import { create as create21 } from "zustand";
@@ -6520,7 +6707,7 @@ function useAuthStatus() {
6520
6707
  const setError = useOnboardingStore((s) => s.setError);
6521
6708
  const authStatus = useOnboardingStore((s) => s.authStatus);
6522
6709
  const isOpen = useOnboardingStore((s) => s.isOpen);
6523
- const queryClient = useQueryClient9();
6710
+ const queryClient = useQueryClient10();
6524
6711
  const [initialized, setInitialized] = useState5(false);
6525
6712
  const [oauthPolling, setOauthPolling] = useState5(false);
6526
6713
  const oauthPollingRef = useRef5(null);
@@ -6816,7 +7003,7 @@ function useAuthStatus() {
6816
7003
  };
6817
7004
  }
6818
7005
  // src/hooks/useTunnel.ts
6819
- import { useQuery as useQuery10, useMutation as useMutation7, useQueryClient as useQueryClient10 } from "@tanstack/react-query";
7006
+ import { useQuery as useQuery11, useMutation as useMutation8, useQueryClient as useQueryClient11 } from "@tanstack/react-query";
6820
7007
  import { useEffect as useEffect14, useCallback as useCallback9, useRef as useRef6 } from "react";
6821
7008
  import {
6822
7009
  client as client2,
@@ -6864,7 +7051,7 @@ function useTunnelStatus() {
6864
7051
  const setStatus = useTunnelStore((s) => s.setStatus);
6865
7052
  const setUrl = useTunnelStore((s) => s.setUrl);
6866
7053
  const setError = useTunnelStore((s) => s.setError);
6867
- const query = useQuery10({
7054
+ const query = useQuery11({
6868
7055
  queryKey: ["tunnel", "status"],
6869
7056
  queryFn: fetchTunnelStatus,
6870
7057
  refetchInterval: 3000,
@@ -6880,12 +7067,12 @@ function useTunnelStatus() {
6880
7067
  return query;
6881
7068
  }
6882
7069
  function useStartTunnel() {
6883
- const queryClient = useQueryClient10();
7070
+ const queryClient = useQueryClient11();
6884
7071
  const setStatus = useTunnelStore((s) => s.setStatus);
6885
7072
  const setUrl = useTunnelStore((s) => s.setUrl);
6886
7073
  const setError = useTunnelStore((s) => s.setError);
6887
7074
  const setProgress = useTunnelStore((s) => s.setProgress);
6888
- return useMutation7({
7075
+ return useMutation8({
6889
7076
  mutationFn: () => startTunnel(),
6890
7077
  onMutate: () => {
6891
7078
  setStatus("starting");
@@ -6914,9 +7101,9 @@ function useStartTunnel() {
6914
7101
  });
6915
7102
  }
6916
7103
  function useStopTunnel() {
6917
- const queryClient = useQueryClient10();
7104
+ const queryClient = useQueryClient11();
6918
7105
  const reset = useTunnelStore((s) => s.reset);
6919
- return useMutation7({
7106
+ return useMutation8({
6920
7107
  mutationFn: stopTunnel,
6921
7108
  onSuccess: () => {
6922
7109
  reset();
@@ -6927,7 +7114,7 @@ function useStopTunnel() {
6927
7114
  function useTunnelQr() {
6928
7115
  const url = useTunnelStore((s) => s.url);
6929
7116
  const setQrCode = useTunnelStore((s) => s.setQrCode);
6930
- const query = useQuery10({
7117
+ const query = useQuery11({
6931
7118
  queryKey: ["tunnel", "qr", url],
6932
7119
  queryFn: fetchTunnelQr,
6933
7120
  enabled: !!url
@@ -7040,9 +7227,9 @@ function useProviderUsage(provider, authType) {
7040
7227
  };
7041
7228
  }
7042
7229
  // src/hooks/useFileBrowser.ts
7043
- import { useQuery as useQuery11 } from "@tanstack/react-query";
7230
+ import { useQuery as useQuery12 } from "@tanstack/react-query";
7044
7231
  function useFileTree(dirPath, enabled = true) {
7045
- return useQuery11({
7232
+ return useQuery12({
7046
7233
  queryKey: ["files", "tree", dirPath],
7047
7234
  queryFn: () => apiClient.getFileTree(dirPath),
7048
7235
  enabled,
@@ -7051,7 +7238,7 @@ function useFileTree(dirPath, enabled = true) {
7051
7238
  });
7052
7239
  }
7053
7240
  function useFileContent(filePath) {
7054
- return useQuery11({
7241
+ return useQuery12({
7055
7242
  queryKey: ["files", "read", filePath],
7056
7243
  queryFn: () => filePath ? apiClient.readFileContent(filePath) : null,
7057
7244
  enabled: !!filePath,
@@ -7060,7 +7247,7 @@ function useFileContent(filePath) {
7060
7247
  });
7061
7248
  }
7062
7249
  function useGitDiffFullFile(file, staged = false, enabled = false) {
7063
- return useQuery11({
7250
+ return useQuery12({
7064
7251
  queryKey: ["git", "diff", "fullFile", file, staged],
7065
7252
  queryFn: () => file ? apiClient.getGitDiffFullFile(file, staged) : null,
7066
7253
  enabled: enabled && !!file,
@@ -7069,7 +7256,7 @@ function useGitDiffFullFile(file, staged = false, enabled = false) {
7069
7256
  });
7070
7257
  }
7071
7258
  // src/hooks/useMCP.ts
7072
- import { useQuery as useQuery12, useMutation as useMutation8, useQueryClient as useQueryClient11 } from "@tanstack/react-query";
7259
+ import { useQuery as useQuery13, useMutation as useMutation9, useQueryClient as useQueryClient12 } from "@tanstack/react-query";
7073
7260
  import { useEffect as useEffect16, useRef as useRef8, useCallback as useCallback11 } from "react";
7074
7261
  import {
7075
7262
  listMcpServers,
@@ -7084,7 +7271,7 @@ import {
7084
7271
  } from "@ottocode/api";
7085
7272
  function useMCPServers() {
7086
7273
  const setServers = useMCPStore((s) => s.setServers);
7087
- const query = useQuery12({
7274
+ const query = useQuery13({
7088
7275
  queryKey: ["mcp", "servers"],
7089
7276
  queryFn: async () => {
7090
7277
  const { data } = await listMcpServers();
@@ -7100,8 +7287,8 @@ function useMCPServers() {
7100
7287
  return query;
7101
7288
  }
7102
7289
  function useStartMCPServer() {
7103
- const queryClient = useQueryClient11();
7104
- return useMutation8({
7290
+ const queryClient = useQueryClient12();
7291
+ return useMutation9({
7105
7292
  mutationFn: async (name) => {
7106
7293
  const { data, error } = await startMcpServer({
7107
7294
  path: { name }
@@ -7119,9 +7306,9 @@ function useStartMCPServer() {
7119
7306
  });
7120
7307
  }
7121
7308
  function useStopMCPServer() {
7122
- const queryClient = useQueryClient11();
7309
+ const queryClient = useQueryClient12();
7123
7310
  const setLoading = useMCPStore((s) => s.setLoading);
7124
- return useMutation8({
7311
+ return useMutation9({
7125
7312
  mutationFn: async (name) => {
7126
7313
  setLoading(name, true);
7127
7314
  const { data, error } = await stopMcpServer({
@@ -7141,8 +7328,8 @@ function useStopMCPServer() {
7141
7328
  });
7142
7329
  }
7143
7330
  function useAddMCPServer() {
7144
- const queryClient = useQueryClient11();
7145
- return useMutation8({
7331
+ const queryClient = useQueryClient12();
7332
+ return useMutation9({
7146
7333
  mutationFn: async (params) => {
7147
7334
  const { data, error } = await addMcpServer({
7148
7335
  body: params
@@ -7160,8 +7347,8 @@ function useAddMCPServer() {
7160
7347
  });
7161
7348
  }
7162
7349
  function useRemoveMCPServer() {
7163
- const queryClient = useQueryClient11();
7164
- return useMutation8({
7350
+ const queryClient = useQueryClient12();
7351
+ return useMutation9({
7165
7352
  mutationFn: async (name) => {
7166
7353
  const { data, error } = await removeMcpServer({
7167
7354
  path: { name }
@@ -7179,8 +7366,8 @@ function useRemoveMCPServer() {
7179
7366
  });
7180
7367
  }
7181
7368
  function useAuthenticateMCPServer() {
7182
- const queryClient = useQueryClient11();
7183
- return useMutation8({
7369
+ const queryClient = useQueryClient12();
7370
+ return useMutation9({
7184
7371
  mutationFn: async (name) => {
7185
7372
  const { data, error } = await initiateMcpAuth({
7186
7373
  path: { name }
@@ -7198,8 +7385,8 @@ function useAuthenticateMCPServer() {
7198
7385
  });
7199
7386
  }
7200
7387
  function useRevokeMCPAuth() {
7201
- const queryClient = useQueryClient11();
7202
- return useMutation8({
7388
+ const queryClient = useQueryClient12();
7389
+ return useMutation9({
7203
7390
  mutationFn: async (name) => {
7204
7391
  const { data, error } = await revokeMcpAuth({
7205
7392
  path: { name }
@@ -7217,7 +7404,7 @@ function useRevokeMCPAuth() {
7217
7404
  });
7218
7405
  }
7219
7406
  function useMCPAuthStatus(name) {
7220
- return useQuery12({
7407
+ return useQuery13({
7221
7408
  queryKey: ["mcp", "auth", name],
7222
7409
  queryFn: async () => {
7223
7410
  if (!name)
@@ -7235,7 +7422,7 @@ function useCopilotDevicePoller() {
7235
7422
  const copilotDevice = useMCPStore((s) => s.copilotDevice);
7236
7423
  const setCopilotDevice = useMCPStore((s) => s.setCopilotDevice);
7237
7424
  const setLoading = useMCPStore((s) => s.setLoading);
7238
- const queryClient = useQueryClient11();
7425
+ const queryClient = useQueryClient12();
7239
7426
  const timerRef = useRef8(null);
7240
7427
  const stopPolling = useCallback11(() => {
7241
7428
  if (timerRef.current) {
@@ -7278,12 +7465,12 @@ function useCopilotDevicePoller() {
7278
7465
  return copilotDevice;
7279
7466
  }
7280
7467
  // src/hooks/useSkills.ts
7281
- import { useMutation as useMutation9, useQuery as useQuery13, useQueryClient as useQueryClient12 } from "@tanstack/react-query";
7468
+ import { useMutation as useMutation10, useQuery as useQuery14, useQueryClient as useQueryClient13 } from "@tanstack/react-query";
7282
7469
  import { useEffect as useEffect17 } from "react";
7283
7470
  function useSkills(options = {}) {
7284
7471
  const enabled = options.enabled ?? true;
7285
7472
  const setSkillsConfig = useSkillsStore((s) => s.setSkillsConfig);
7286
- const query = useQuery13({
7473
+ const query = useQuery14({
7287
7474
  queryKey: ["skills"],
7288
7475
  queryFn: async () => {
7289
7476
  return apiClient.getSkillsConfig();
@@ -7304,9 +7491,9 @@ function useSkills(options = {}) {
7304
7491
  return query;
7305
7492
  }
7306
7493
  function useUpdateSkillsConfig() {
7307
- const queryClient = useQueryClient12();
7494
+ const queryClient = useQueryClient13();
7308
7495
  const setSkillsConfig = useSkillsStore((s) => s.setSkillsConfig);
7309
- return useMutation9({
7496
+ return useMutation10({
7310
7497
  mutationFn: (input) => apiClient.updateSkillsConfig(input),
7311
7498
  onSuccess: (data) => {
7312
7499
  setSkillsConfig({
@@ -7320,7 +7507,7 @@ function useUpdateSkillsConfig() {
7320
7507
  });
7321
7508
  }
7322
7509
  function useSkillDetail(name) {
7323
- return useQuery13({
7510
+ return useQuery14({
7324
7511
  queryKey: ["skills", name],
7325
7512
  queryFn: async () => {
7326
7513
  if (!name)
@@ -7331,7 +7518,7 @@ function useSkillDetail(name) {
7331
7518
  });
7332
7519
  }
7333
7520
  function useSkillFiles(name) {
7334
- return useQuery13({
7521
+ return useQuery14({
7335
7522
  queryKey: ["skills", name, "files"],
7336
7523
  queryFn: async () => {
7337
7524
  if (!name)
@@ -7342,7 +7529,7 @@ function useSkillFiles(name) {
7342
7529
  });
7343
7530
  }
7344
7531
  function useSkillFileContent(name, filePath) {
7345
- return useQuery13({
7532
+ return useQuery14({
7346
7533
  queryKey: ["skills", name, "files", filePath],
7347
7534
  queryFn: async () => {
7348
7535
  if (!name || !filePath)
@@ -7354,7 +7541,7 @@ function useSkillFileContent(name, filePath) {
7354
7541
  }
7355
7542
  // src/hooks/useAgents.ts
7356
7543
  import { useEffect as useEffect18 } from "react";
7357
- import { useMutation as useMutation10, useQuery as useQuery14, useQueryClient as useQueryClient13 } from "@tanstack/react-query";
7544
+ import { useMutation as useMutation11, useQuery as useQuery15, useQueryClient as useQueryClient14 } from "@tanstack/react-query";
7358
7545
 
7359
7546
  // src/stores/agentsStore.ts
7360
7547
  import { create as create22 } from "zustand";
@@ -7429,7 +7616,7 @@ function useAgentDetails(options = {}) {
7429
7616
  const setAgents = useAgentsStore((s) => s.setAgents);
7430
7617
  const selectedAgent = useAgentsStore((s) => s.selectedAgent);
7431
7618
  const selectAgent = useAgentsStore((s) => s.selectAgent);
7432
- const query = useQuery14({
7619
+ const query = useQuery15({
7433
7620
  queryKey: ["config", "agents"],
7434
7621
  queryFn: () => apiClient.getAgentDetails(),
7435
7622
  enabled,
@@ -7447,7 +7634,7 @@ function useAgentDetails(options = {}) {
7447
7634
  return query;
7448
7635
  }
7449
7636
  function useAgent(agentName) {
7450
- return useQuery14({
7637
+ return useQuery15({
7451
7638
  queryKey: ["config", "agents", agentName],
7452
7639
  queryFn: async () => {
7453
7640
  if (!agentName)
@@ -7462,7 +7649,7 @@ function useConfigTools(options = {}) {
7462
7649
  const managerOpen = useAgentsStore((s) => s.isManagerOpen);
7463
7650
  const createOpen = useAgentsStore((s) => s.isCreateModalOpen);
7464
7651
  const enabled = options.enabled ?? (managerOpen || createOpen);
7465
- return useQuery14({
7652
+ return useQuery15({
7466
7653
  queryKey: ["config", "tools"],
7467
7654
  queryFn: () => apiClient.getConfigTools(),
7468
7655
  enabled,
@@ -7470,8 +7657,8 @@ function useConfigTools(options = {}) {
7470
7657
  });
7471
7658
  }
7472
7659
  function useUpdateAgent() {
7473
- const queryClient = useQueryClient13();
7474
- return useMutation10({
7660
+ const queryClient = useQueryClient14();
7661
+ return useMutation11({
7475
7662
  mutationFn: ({ name, input }) => apiClient.updateAgent(name, input),
7476
7663
  onSuccess: (data, variables) => {
7477
7664
  queryClient.setQueryData(["config", "agents", variables.name], data);
@@ -7481,10 +7668,10 @@ function useUpdateAgent() {
7481
7668
  });
7482
7669
  }
7483
7670
  function useDeleteAgent() {
7484
- const queryClient = useQueryClient13();
7671
+ const queryClient = useQueryClient14();
7485
7672
  const setAgents = useAgentsStore((s) => s.setAgents);
7486
7673
  const selectAgent = useAgentsStore((s) => s.selectAgent);
7487
- return useMutation10({
7674
+ return useMutation11({
7488
7675
  mutationFn: ({
7489
7676
  name,
7490
7677
  scope = "local"
@@ -7505,8 +7692,8 @@ function useDeleteAgent() {
7505
7692
  });
7506
7693
  }
7507
7694
  function useSetDefaultAgent() {
7508
- const queryClient = useQueryClient13();
7509
- return useMutation10({
7695
+ const queryClient = useQueryClient14();
7696
+ return useMutation11({
7510
7697
  mutationFn: (name) => apiClient.updateDefaults({ agent: name, scope: "global" }),
7511
7698
  onSuccess: () => {
7512
7699
  queryClient.invalidateQueries({ queryKey: ["config", "agents"] });
@@ -7975,7 +8162,7 @@ function useVoiceInput({
7975
8162
  }
7976
8163
  // src/hooks/useDictationModels.ts
7977
8164
  import { useCallback as useCallback15, useEffect as useEffect22, useRef as useRef11, useState as useState10 } from "react";
7978
- import { useMutation as useMutation11, useQuery as useQuery15, useQueryClient as useQueryClient14 } from "@tanstack/react-query";
8165
+ import { useMutation as useMutation12, useQuery as useQuery16, useQueryClient as useQueryClient15 } from "@tanstack/react-query";
7979
8166
  var DICTATION_STATUS_QUERY_KEY = ["dictation", "status"];
7980
8167
  function mergeModelState(current, model) {
7981
8168
  if (!current)
@@ -7996,12 +8183,12 @@ function parseInstallEvent(raw) {
7996
8183
  }
7997
8184
  }
7998
8185
  function useDictationModels() {
7999
- const queryClient = useQueryClient14();
8186
+ const queryClient = useQueryClient15();
8000
8187
  const eventSourceRef = useRef11(null);
8001
8188
  const [activeInstallModelId, setActiveInstallModelId] = useState10(null);
8002
8189
  const [installProgress, setInstallProgress] = useState10(null);
8003
8190
  const [installStreamError, setInstallStreamError] = useState10(null);
8004
- const statusQuery = useQuery15({
8191
+ const statusQuery = useQuery16({
8005
8192
  queryKey: DICTATION_STATUS_QUERY_KEY,
8006
8193
  queryFn: () => apiClient.getDictationStatus(),
8007
8194
  refetchInterval: (query) => query.state.data?.models.some((model) => model.installing) ? 1000 : 30000
@@ -8044,7 +8231,7 @@ function useDictationModels() {
8044
8231
  };
8045
8232
  }, [closeInstallStream, queryClient]);
8046
8233
  useEffect22(() => closeInstallStream, [closeInstallStream]);
8047
- const installMutation = useMutation11({
8234
+ const installMutation = useMutation12({
8048
8235
  mutationFn: (input) => apiClient.installDictationModel(input),
8049
8236
  onSuccess: (data) => {
8050
8237
  setInstallProgress(data.model);
@@ -8060,7 +8247,7 @@ function useDictationModels() {
8060
8247
  }
8061
8248
  }
8062
8249
  });
8063
- const removeMutation = useMutation11({
8250
+ const removeMutation = useMutation12({
8064
8251
  mutationFn: (model) => apiClient.removeDictationModel(model),
8065
8252
  onSuccess: (data) => {
8066
8253
  queryClient.setQueryData(DICTATION_STATUS_QUERY_KEY, (current) => mergeModelState(current, data.model));
@@ -8093,6 +8280,8 @@ export {
8093
8280
  useVoiceInput,
8094
8281
  useUpdateSkillsConfig,
8095
8282
  useUpdateSession,
8283
+ useUpdateGoalTask,
8284
+ useUpdateGoal,
8096
8285
  useUpdateDefaults,
8097
8286
  useUpdateAgent,
8098
8287
  useUnstageFiles,
@@ -8106,6 +8295,7 @@ export {
8106
8295
  useStopMCPServer,
8107
8296
  useStartTunnel,
8108
8297
  useStartMCPServer,
8298
+ useStartGoal,
8109
8299
  useStageFiles,
8110
8300
  useSkills,
8111
8301
  useSkillFiles,
@@ -8116,7 +8306,9 @@ export {
8116
8306
  useSetDefaultAgent,
8117
8307
  useSessionsInfinite,
8118
8308
  useSessions,
8309
+ useSessionSubagents,
8119
8310
  useSessionStream,
8311
+ useSessionGoal,
8120
8312
  useSessionFiles,
8121
8313
  useSession,
8122
8314
  useSendMessage,
@@ -8133,6 +8325,7 @@ export {
8133
8325
  useParentSession,
8134
8326
  useOttoRouterPayments,
8135
8327
  useOttoRouterBalance,
8328
+ useOttoEnabled,
8136
8329
  useModels,
8137
8330
  useMessages,
8138
8331
  useMessageQueuePosition,
@@ -8161,6 +8354,7 @@ export {
8161
8354
  useDeleteResearchSession,
8162
8355
  useDeleteFiles,
8163
8356
  useDeleteAgent,
8357
+ useCreateSessionGoal,
8164
8358
  useCreateSession,
8165
8359
  useCreateResearchSession,
8166
8360
  useCreateGitBranch,
@@ -8182,10 +8376,13 @@ export {
8182
8376
  useAgent,
8183
8377
  useAddRemote,
8184
8378
  useAddMCPServer,
8379
+ useAddGoalTasks,
8380
+ subagentsQueryKey,
8185
8381
  sessionsQueryKey,
8186
8382
  optimisticallyQueueMessage,
8187
8383
  normalizeQueueState,
8384
+ goalQueryKey,
8188
8385
  getAgentToolCount
8189
8386
  };
8190
8387
 
8191
- //# debugId=0386469E53572E8E64756E2164756E21
8388
+ //# debugId=A17CCE79470EA61564756E2164756E21