@stigmer/react 0.0.92 → 0.0.94

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 (328) hide show
  1. package/README.md +57 -12
  2. package/agent/AgentDetailView.js +7 -7
  3. package/agent/AgentDetailView.js.map +1 -1
  4. package/agent/AgentPicker.js +3 -3
  5. package/agent/AgentPicker.js.map +1 -1
  6. package/api-key/ApiKeyCreatedAlert.js +1 -1
  7. package/api-key/ApiKeyCreatedAlert.js.map +1 -1
  8. package/api-key/ApiKeyListPanel.js +4 -4
  9. package/api-key/ApiKeyListPanel.js.map +1 -1
  10. package/api-key/CreateApiKeyForm.js +1 -1
  11. package/api-key/CreateApiKeyForm.js.map +1 -1
  12. package/attachment/AttachmentChipList.js +2 -2
  13. package/attachment/AttachmentChipList.js.map +1 -1
  14. package/color-mode.d.ts +48 -0
  15. package/color-mode.d.ts.map +1 -0
  16. package/color-mode.js +53 -0
  17. package/color-mode.js.map +1 -0
  18. package/composer/ComposerToolbar.d.ts +6 -2
  19. package/composer/ComposerToolbar.d.ts.map +1 -1
  20. package/composer/ComposerToolbar.js +5 -3
  21. package/composer/ComposerToolbar.js.map +1 -1
  22. package/composer/ConfigureMenu.js +3 -3
  23. package/composer/ConfigureMenu.js.map +1 -1
  24. package/composer/ContextChip.js +1 -1
  25. package/composer/ContextChip.js.map +1 -1
  26. package/composer/ContextPopover.js +1 -1
  27. package/composer/ContextPopover.js.map +1 -1
  28. package/composer/SessionComposer.d.ts +24 -3
  29. package/composer/SessionComposer.d.ts.map +1 -1
  30. package/composer/SessionComposer.js +5 -4
  31. package/composer/SessionComposer.js.map +1 -1
  32. package/environment/CreateEnvironmentForm.js +1 -1
  33. package/environment/CreateEnvironmentForm.js.map +1 -1
  34. package/environment/EnvVarForm.js +2 -2
  35. package/environment/EnvVarForm.js.map +1 -1
  36. package/environment/EnvironmentListPanel.js +2 -2
  37. package/environment/EnvironmentListPanel.js.map +1 -1
  38. package/environment/EnvironmentVariableEditor.js +6 -6
  39. package/environment/EnvironmentVariableEditor.js.map +1 -1
  40. package/error/ErrorMessage.js +1 -1
  41. package/error/ErrorMessage.js.map +1 -1
  42. package/execution/ApprovalCard.js +4 -4
  43. package/execution/ApprovalCard.js.map +1 -1
  44. package/execution/ArtifactCard.js +1 -1
  45. package/execution/ArtifactCard.js.map +1 -1
  46. package/execution/ArtifactPreviewModal.js +4 -4
  47. package/execution/ArtifactPreviewModal.js.map +1 -1
  48. package/execution/FollowUpInput.js +1 -1
  49. package/execution/FollowUpInput.js.map +1 -1
  50. package/execution/McpToolDetail.js +4 -4
  51. package/execution/McpToolDetail.js.map +1 -1
  52. package/execution/MessageEntry.js +1 -1
  53. package/execution/MessageEntry.js.map +1 -1
  54. package/execution/MessageThread.js +1 -1
  55. package/execution/MessageThread.js.map +1 -1
  56. package/execution/SessionVariablesInput.js +4 -4
  57. package/execution/SessionVariablesInput.js.map +1 -1
  58. package/execution/SubAgentSection.js +2 -2
  59. package/execution/SubAgentSection.js.map +1 -1
  60. package/execution/ToolCallDetail.js +2 -2
  61. package/execution/ToolCallDetail.js.map +1 -1
  62. package/execution/ToolCallGroup.js +1 -1
  63. package/execution/ToolCallGroup.js.map +1 -1
  64. package/execution/ToolCallItem.js +2 -2
  65. package/execution/ToolCallItem.js.map +1 -1
  66. package/execution/WriteBackCard.js +3 -3
  67. package/execution/WriteBackCard.js.map +1 -1
  68. package/execution/tool-rendering-primitives.js +3 -3
  69. package/execution/tool-rendering-primitives.js.map +1 -1
  70. package/github/GitHubRepoPicker.js +5 -5
  71. package/github/GitHubRepoPicker.js.map +1 -1
  72. package/iam-policy/GrantAccessForm.js +1 -1
  73. package/iam-policy/GrantAccessForm.js.map +1 -1
  74. package/iam-policy/OrgMembersPanel.js +5 -5
  75. package/iam-policy/OrgMembersPanel.js.map +1 -1
  76. package/identity-provider/CreateIdentityProviderForm.js +3 -3
  77. package/identity-provider/CreateIdentityProviderForm.js.map +1 -1
  78. package/identity-provider/IdentityProviderDetailPanel.js +5 -5
  79. package/identity-provider/IdentityProviderDetailPanel.js.map +1 -1
  80. package/identity-provider/IdentityProviderListPanel.js +3 -3
  81. package/identity-provider/IdentityProviderListPanel.js.map +1 -1
  82. package/identity-provider/IdentityProviderWizard.js +7 -7
  83. package/identity-provider/IdentityProviderWizard.js.map +1 -1
  84. package/identity-provider/ProviderPicker.js +2 -2
  85. package/identity-provider/ProviderPicker.js.map +1 -1
  86. package/index.d.ts +8 -4
  87. package/index.d.ts.map +1 -1
  88. package/index.js +7 -3
  89. package/index.js.map +1 -1
  90. package/internal/CloudFeatureNotice.js +1 -1
  91. package/internal/CloudFeatureNotice.js.map +1 -1
  92. package/internal/Tabs.js +1 -1
  93. package/internal/Tabs.js.map +1 -1
  94. package/internal/markdown-components.js +2 -2
  95. package/internal/markdown-components.js.map +1 -1
  96. package/invitation/InvitationCreatedAlert.js +1 -1
  97. package/invitation/InvitationCreatedAlert.js.map +1 -1
  98. package/invitation/InvitationManager.js +5 -5
  99. package/invitation/InvitationManager.js.map +1 -1
  100. package/invitation/InvitationRedemption.js +4 -4
  101. package/invitation/InvitationRedemption.js.map +1 -1
  102. package/library/ResourceCountCard.js +1 -1
  103. package/library/ResourceCountCard.js.map +1 -1
  104. package/library/ResourceListView.js +5 -5
  105. package/library/ResourceListView.js.map +1 -1
  106. package/mcp-server/McpServerConfigPanel.js +5 -5
  107. package/mcp-server/McpServerConfigPanel.js.map +1 -1
  108. package/mcp-server/McpServerConnectDialog.js +4 -4
  109. package/mcp-server/McpServerConnectDialog.js.map +1 -1
  110. package/mcp-server/McpServerDetailView.js +14 -14
  111. package/mcp-server/McpServerDetailView.js.map +1 -1
  112. package/mcp-server/McpServerPicker.js +4 -4
  113. package/mcp-server/McpServerPicker.js.map +1 -1
  114. package/mcp-server/McpToolSelector.js +3 -3
  115. package/mcp-server/McpToolSelector.js.map +1 -1
  116. package/mcp-server/OAuthAppForm.js +1 -1
  117. package/mcp-server/OAuthAppForm.js.map +1 -1
  118. package/models/ModelSelector.js +1 -1
  119. package/models/ModelSelector.js.map +1 -1
  120. package/oauth-app/CreateOAuthAppForm.js +1 -1
  121. package/oauth-app/CreateOAuthAppForm.js.map +1 -1
  122. package/oauth-app/OAuthAppDetailPanel.js +3 -3
  123. package/oauth-app/OAuthAppDetailPanel.js.map +1 -1
  124. package/oauth-app/OAuthAppListPanel.js +2 -2
  125. package/oauth-app/OAuthAppListPanel.js.map +1 -1
  126. package/organization/CreateOrganizationForm.js +1 -1
  127. package/organization/CreateOrganizationForm.js.map +1 -1
  128. package/organization/OrgProfilePanel.js +3 -3
  129. package/organization/OrgProfilePanel.js.map +1 -1
  130. package/package.json +4 -4
  131. package/platform-client/CreatePlatformClientForm.js +2 -2
  132. package/platform-client/CreatePlatformClientForm.js.map +1 -1
  133. package/platform-client/PlatformClientDetailPanel.js +4 -4
  134. package/platform-client/PlatformClientDetailPanel.js.map +1 -1
  135. package/platform-client/PlatformClientListPanel.js +3 -3
  136. package/platform-client/PlatformClientListPanel.js.map +1 -1
  137. package/platform-client/PlatformClientSecretAlert.js +2 -2
  138. package/platform-client/PlatformClientSecretAlert.js.map +1 -1
  139. package/provider.d.ts +39 -2
  140. package/provider.d.ts.map +1 -1
  141. package/provider.js +11 -3
  142. package/provider.js.map +1 -1
  143. package/runner/RunnerListPanel.d.ts +65 -0
  144. package/runner/RunnerListPanel.d.ts.map +1 -0
  145. package/runner/RunnerListPanel.js +237 -0
  146. package/runner/RunnerListPanel.js.map +1 -0
  147. package/runner/RunnerPicker.d.ts +54 -0
  148. package/runner/RunnerPicker.d.ts.map +1 -0
  149. package/runner/RunnerPicker.js +133 -0
  150. package/runner/RunnerPicker.js.map +1 -0
  151. package/runner/__tests__/useDeleteRunner.test.d.ts +2 -0
  152. package/runner/__tests__/useDeleteRunner.test.d.ts.map +1 -0
  153. package/runner/__tests__/useDeleteRunner.test.js +108 -0
  154. package/runner/__tests__/useDeleteRunner.test.js.map +1 -0
  155. package/runner/__tests__/useLaunchLocalRunner.test.d.ts +2 -0
  156. package/runner/__tests__/useLaunchLocalRunner.test.d.ts.map +1 -0
  157. package/runner/__tests__/useLaunchLocalRunner.test.js +143 -0
  158. package/runner/__tests__/useLaunchLocalRunner.test.js.map +1 -0
  159. package/runner/__tests__/useStopRunner.test.d.ts +2 -0
  160. package/runner/__tests__/useStopRunner.test.d.ts.map +1 -0
  161. package/runner/__tests__/useStopRunner.test.js +114 -0
  162. package/runner/__tests__/useStopRunner.test.js.map +1 -0
  163. package/runner/index.d.ts +14 -0
  164. package/runner/index.d.ts.map +1 -0
  165. package/runner/index.js +8 -0
  166. package/runner/index.js.map +1 -0
  167. package/runner/phase.d.ts +30 -0
  168. package/runner/phase.d.ts.map +1 -0
  169. package/runner/phase.js +58 -0
  170. package/runner/phase.js.map +1 -0
  171. package/runner/useDeleteRunner.d.ts +36 -0
  172. package/runner/useDeleteRunner.d.ts.map +1 -0
  173. package/runner/useDeleteRunner.js +42 -0
  174. package/runner/useDeleteRunner.js.map +1 -0
  175. package/runner/useLaunchLocalRunner.d.ts +84 -0
  176. package/runner/useLaunchLocalRunner.d.ts.map +1 -0
  177. package/runner/useLaunchLocalRunner.js +75 -0
  178. package/runner/useLaunchLocalRunner.js.map +1 -0
  179. package/runner/useRunnerList.d.ts +49 -0
  180. package/runner/useRunnerList.d.ts.map +1 -0
  181. package/runner/useRunnerList.js +70 -0
  182. package/runner/useRunnerList.js.map +1 -0
  183. package/runner/useStopRunner.d.ts +53 -0
  184. package/runner/useStopRunner.d.ts.map +1 -0
  185. package/runner/useStopRunner.js +50 -0
  186. package/runner/useStopRunner.js.map +1 -0
  187. package/session/draft.d.ts +53 -0
  188. package/session/draft.d.ts.map +1 -0
  189. package/session/draft.js +45 -0
  190. package/session/draft.js.map +1 -0
  191. package/session/index.d.ts +10 -0
  192. package/session/index.d.ts.map +1 -1
  193. package/session/index.js +5 -0
  194. package/session/index.js.map +1 -1
  195. package/session/useCreateSession.d.ts +8 -0
  196. package/session/useCreateSession.d.ts.map +1 -1
  197. package/session/useCreateSession.js +1 -0
  198. package/session/useCreateSession.js.map +1 -1
  199. package/session/useEditSessionPrep.d.ts +26 -0
  200. package/session/useEditSessionPrep.d.ts.map +1 -0
  201. package/session/useEditSessionPrep.js +83 -0
  202. package/session/useEditSessionPrep.js.map +1 -0
  203. package/session/useNewSessionFlow.d.ts +110 -0
  204. package/session/useNewSessionFlow.d.ts.map +1 -0
  205. package/session/useNewSessionFlow.js +184 -0
  206. package/session/useNewSessionFlow.js.map +1 -0
  207. package/session/usePersistedModel.d.ts +18 -0
  208. package/session/usePersistedModel.d.ts.map +1 -0
  209. package/session/usePersistedModel.js +31 -0
  210. package/session/usePersistedModel.js.map +1 -0
  211. package/session/useSessionPageFlow.d.ts +104 -0
  212. package/session/useSessionPageFlow.d.ts.map +1 -0
  213. package/session/useSessionPageFlow.js +172 -0
  214. package/session/useSessionPageFlow.js.map +1 -0
  215. package/skill/SkillDetailView.js +3 -3
  216. package/skill/SkillDetailView.js.map +1 -1
  217. package/skill/SkillPicker.js +3 -3
  218. package/skill/SkillPicker.js.map +1 -1
  219. package/src/agent/AgentDetailView.tsx +8 -8
  220. package/src/agent/AgentPicker.tsx +3 -3
  221. package/src/api-key/ApiKeyCreatedAlert.tsx +2 -2
  222. package/src/api-key/ApiKeyListPanel.tsx +6 -6
  223. package/src/api-key/CreateApiKeyForm.tsx +2 -2
  224. package/src/attachment/AttachmentChipList.tsx +3 -3
  225. package/src/color-mode.ts +75 -0
  226. package/src/composer/ComposerToolbar.tsx +29 -7
  227. package/src/composer/ConfigureMenu.tsx +6 -6
  228. package/src/composer/ContextChip.tsx +1 -1
  229. package/src/composer/ContextPopover.tsx +2 -2
  230. package/src/composer/SessionComposer.tsx +34 -5
  231. package/src/environment/CreateEnvironmentForm.tsx +3 -3
  232. package/src/environment/EnvVarForm.tsx +6 -6
  233. package/src/environment/EnvironmentListPanel.tsx +3 -3
  234. package/src/environment/EnvironmentVariableEditor.tsx +7 -7
  235. package/src/error/ErrorMessage.tsx +5 -5
  236. package/src/execution/ApprovalCard.tsx +5 -5
  237. package/src/execution/ArtifactCard.tsx +2 -2
  238. package/src/execution/ArtifactPreviewModal.tsx +4 -4
  239. package/src/execution/FollowUpInput.tsx +2 -2
  240. package/src/execution/McpToolDetail.tsx +4 -4
  241. package/src/execution/MessageEntry.tsx +1 -1
  242. package/src/execution/MessageThread.tsx +1 -1
  243. package/src/execution/SessionVariablesInput.tsx +7 -7
  244. package/src/execution/SubAgentSection.tsx +5 -5
  245. package/src/execution/ToolCallDetail.tsx +2 -2
  246. package/src/execution/ToolCallGroup.tsx +3 -3
  247. package/src/execution/ToolCallItem.tsx +4 -4
  248. package/src/execution/WriteBackCard.tsx +5 -5
  249. package/src/execution/tool-rendering-primitives.tsx +5 -5
  250. package/src/github/GitHubRepoPicker.tsx +5 -5
  251. package/src/iam-policy/GrantAccessForm.tsx +2 -2
  252. package/src/iam-policy/OrgMembersPanel.tsx +11 -11
  253. package/src/identity-provider/CreateIdentityProviderForm.tsx +4 -4
  254. package/src/identity-provider/IdentityProviderDetailPanel.tsx +7 -7
  255. package/src/identity-provider/IdentityProviderListPanel.tsx +7 -7
  256. package/src/identity-provider/IdentityProviderWizard.tsx +8 -8
  257. package/src/identity-provider/ProviderPicker.tsx +2 -2
  258. package/src/index.ts +46 -7
  259. package/src/internal/CloudFeatureNotice.tsx +1 -1
  260. package/src/internal/Tabs.tsx +1 -1
  261. package/src/internal/markdown-components.tsx +2 -2
  262. package/src/invitation/InvitationCreatedAlert.tsx +2 -2
  263. package/src/invitation/InvitationManager.tsx +9 -9
  264. package/src/invitation/InvitationRedemption.tsx +11 -11
  265. package/src/library/ResourceCountCard.tsx +1 -1
  266. package/src/library/ResourceListView.tsx +7 -7
  267. package/src/mcp-server/McpServerConfigPanel.tsx +7 -7
  268. package/src/mcp-server/McpServerConnectDialog.tsx +5 -5
  269. package/src/mcp-server/McpServerDetailView.tsx +19 -19
  270. package/src/mcp-server/McpServerPicker.tsx +6 -6
  271. package/src/mcp-server/McpToolSelector.tsx +4 -4
  272. package/src/mcp-server/OAuthAppForm.tsx +3 -3
  273. package/src/models/ModelSelector.tsx +1 -1
  274. package/src/oauth-app/CreateOAuthAppForm.tsx +3 -3
  275. package/src/oauth-app/OAuthAppDetailPanel.tsx +7 -7
  276. package/src/oauth-app/OAuthAppListPanel.tsx +3 -3
  277. package/src/organization/CreateOrganizationForm.tsx +3 -3
  278. package/src/organization/OrgProfilePanel.tsx +4 -5
  279. package/src/platform-client/CreatePlatformClientForm.tsx +6 -6
  280. package/src/platform-client/PlatformClientDetailPanel.tsx +19 -19
  281. package/src/platform-client/PlatformClientListPanel.tsx +7 -7
  282. package/src/platform-client/PlatformClientSecretAlert.tsx +2 -2
  283. package/src/provider.tsx +52 -2
  284. package/src/runner/RunnerListPanel.tsx +725 -0
  285. package/src/runner/RunnerPicker.tsx +319 -0
  286. package/src/runner/__tests__/useDeleteRunner.test.tsx +150 -0
  287. package/src/runner/__tests__/useLaunchLocalRunner.test.tsx +223 -0
  288. package/src/runner/__tests__/useStopRunner.test.tsx +154 -0
  289. package/src/runner/index.ts +34 -0
  290. package/src/runner/phase.ts +62 -0
  291. package/src/runner/useDeleteRunner.ts +67 -0
  292. package/src/runner/useLaunchLocalRunner.ts +139 -0
  293. package/src/runner/useRunnerList.ts +114 -0
  294. package/src/runner/useStopRunner.ts +92 -0
  295. package/src/session/draft.ts +82 -0
  296. package/src/session/index.ts +28 -0
  297. package/src/session/useCreateSession.ts +9 -0
  298. package/src/session/useEditSessionPrep.ts +111 -0
  299. package/src/session/useNewSessionFlow.ts +283 -0
  300. package/src/session/usePersistedModel.ts +41 -0
  301. package/src/session/useSessionPageFlow.ts +280 -0
  302. package/src/skill/SkillDetailView.tsx +5 -5
  303. package/src/skill/SkillPicker.tsx +3 -3
  304. package/src/styles.css +25 -1
  305. package/src/usage/OrgUsagePanel.tsx +4 -4
  306. package/src/workspace/WorkspaceEditor.tsx +78 -66
  307. package/src/workspace/index.ts +0 -8
  308. package/styles.css +1 -1
  309. package/usage/OrgUsagePanel.js +2 -2
  310. package/usage/OrgUsagePanel.js.map +1 -1
  311. package/workspace/WorkspaceEditor.d.ts +28 -3
  312. package/workspace/WorkspaceEditor.d.ts.map +1 -1
  313. package/workspace/WorkspaceEditor.js +24 -25
  314. package/workspace/WorkspaceEditor.js.map +1 -1
  315. package/workspace/index.d.ts +0 -4
  316. package/workspace/index.d.ts.map +1 -1
  317. package/workspace/index.js +0 -2
  318. package/workspace/index.js.map +1 -1
  319. package/src/workspace/FolderBrowser.tsx +0 -579
  320. package/src/workspace/useFolderListing.ts +0 -164
  321. package/workspace/FolderBrowser.d.ts +0 -37
  322. package/workspace/FolderBrowser.d.ts.map +0 -1
  323. package/workspace/FolderBrowser.js +0 -188
  324. package/workspace/FolderBrowser.js.map +0 -1
  325. package/workspace/useFolderListing.d.ts +0 -73
  326. package/workspace/useFolderListing.d.ts.map +0 -1
  327. package/workspace/useFolderListing.js +0 -110
  328. package/workspace/useFolderListing.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useEditSessionPrep.js","sourceRoot":"","sources":["../../src/session/useEditSessionPrep.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,110 @@
1
+ import { type McpServerUsageInput, type ResourceRef } from "@stigmer/sdk";
2
+ import type { AgentResolution } from "../agent";
3
+ import { type UseWorkspaceEntriesReturn } from "../workspace";
4
+ import { type UseSessionVariablesReturn } from "../execution/useSessionVariables";
5
+ import type { SessionComposerSubmitContext } from "../composer";
6
+ /** Options for {@link useNewSessionFlow}. */
7
+ export interface UseNewSessionFlowOptions {
8
+ /** Organization slug. Required for session and execution creation. */
9
+ readonly org: string;
10
+ /**
11
+ * Called after a session and its first execution are created successfully.
12
+ * The consumer is responsible for navigation (e.g. `router.push`).
13
+ */
14
+ readonly onSessionCreated: (sessionId: string) => void;
15
+ /**
16
+ * Called when an error occurs during session creation.
17
+ * The consumer can use this for toast notifications or other UI feedback.
18
+ * If not provided, errors are still available via {@link UseNewSessionFlowReturn.submitError}.
19
+ */
20
+ readonly onError?: (message: string) => void;
21
+ }
22
+ /** Return value of {@link useNewSessionFlow}. */
23
+ export interface UseNewSessionFlowReturn {
24
+ /** Currently selected model ID (persisted to localStorage). */
25
+ readonly modelId: string | undefined;
26
+ /** Update the selected model. Automatically persists to localStorage. */
27
+ readonly setModelId: (id: string) => void;
28
+ /** Currently selected agent reference, or `null` for the default agent. */
29
+ readonly agentRef: ResourceRef | null;
30
+ /** Update the selected agent reference. */
31
+ readonly setAgentRef: (ref: ResourceRef | null) => void;
32
+ /** Current agent resolution state (saved instance vs direct reference). */
33
+ readonly resolution: AgentResolution | null;
34
+ /** Update the agent resolution. */
35
+ readonly setResolution: (r: AgentResolution | null) => void;
36
+ /** Active MCP server configurations. */
37
+ readonly mcpServerUsages: McpServerUsageInput[];
38
+ /** Update MCP server configurations. */
39
+ readonly setMcpServerUsages: (usages: McpServerUsageInput[]) => void;
40
+ /** Active skill references. */
41
+ readonly skillRefs: ResourceRef[];
42
+ /** Update skill references. */
43
+ readonly setSkillRefs: (refs: ResourceRef[]) => void;
44
+ /** Selected runner ID, or `null` for auto-selection. */
45
+ readonly runnerId: string | null;
46
+ /** Update the selected runner. */
47
+ readonly setRunnerId: (id: string | null) => void;
48
+ /** Workspace entries manager (git repos and local paths). */
49
+ readonly workspace: UseWorkspaceEntriesReturn;
50
+ /** Session variables (per-execution secrets) manager. */
51
+ readonly sessionVariables: UseSessionVariablesReturn;
52
+ /** `true` while the create session + execution flow is in flight. */
53
+ readonly isSubmitting: boolean;
54
+ /** Human-readable error from the last failed submission, or `null`. */
55
+ readonly submitError: string | null;
56
+ /**
57
+ * Create a session with the first execution.
58
+ *
59
+ * Composes all managed state (agent, workspace, MCP servers, skills,
60
+ * runner, model, session variables) into the session and execution
61
+ * creation RPCs, then calls `onSessionCreated` on success.
62
+ *
63
+ * The `model` parameter overrides `modelId` for this submission only
64
+ * (used when SessionComposer passes a per-message model selection).
65
+ */
66
+ readonly submit: (message: string, model?: string, context?: SessionComposerSubmitContext) => Promise<void>;
67
+ }
68
+ /**
69
+ * Orchestrates the "create a new session" flow.
70
+ *
71
+ * Manages all the state required to configure and submit a new session:
72
+ * model selection (with localStorage persistence), agent resolution,
73
+ * MCP server/skill/runner selection, workspace entries, and session
74
+ * variables. On submission, creates the session and its first execution
75
+ * in sequence, then notifies the consumer via `onSessionCreated`.
76
+ *
77
+ * This hook is framework-agnostic — it works identically in Next.js,
78
+ * Vite, Tauri, or any React environment. Navigation, toast notifications,
79
+ * and draft-mode logic are the consumer's responsibility.
80
+ *
81
+ * @example
82
+ * ```tsx
83
+ * const flow = useNewSessionFlow({
84
+ * org: "acme",
85
+ * onSessionCreated: (id) => navigate(`/sessions/${id}`),
86
+ * onError: (msg) => toast.error(msg),
87
+ * });
88
+ *
89
+ * <SessionComposer
90
+ * onSubmit={flow.submit}
91
+ * isSubmitting={flow.isSubmitting}
92
+ * org="acme"
93
+ * workspace={flow.workspace}
94
+ * agentRef={flow.agentRef}
95
+ * onAgentRefChange={flow.setAgentRef}
96
+ * onAgentResolutionChange={flow.setResolution}
97
+ * mcpServerUsages={flow.mcpServerUsages}
98
+ * onMcpServerUsagesChange={flow.setMcpServerUsages}
99
+ * skillRefs={flow.skillRefs}
100
+ * onSkillRefsChange={flow.setSkillRefs}
101
+ * runnerId={flow.runnerId}
102
+ * onRunnerIdChange={flow.setRunnerId}
103
+ * sessionVariables={flow.sessionVariables}
104
+ * defaultModelId={flow.modelId}
105
+ * onModelChange={flow.setModelId}
106
+ * />
107
+ * ```
108
+ */
109
+ export declare function useNewSessionFlow(options: UseNewSessionFlowOptions): UseNewSessionFlowReturn;
110
+ //# sourceMappingURL=useNewSessionFlow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useNewSessionFlow.d.ts","sourceRoot":"","sources":["../../src/session/useNewSessionFlow.ts"],"names":[],"mappings":"AAGA,OAAO,EAAkB,KAAK,mBAAmB,EAAE,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAC1F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAGhD,OAAO,EAAuB,KAAK,yBAAyB,EAAE,MAAM,cAAc,CAAC;AACnF,OAAO,EAAuB,KAAK,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AACvG,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,aAAa,CAAC;AAMhE,6CAA6C;AAC7C,MAAM,WAAW,wBAAwB;IACvC,sEAAsE;IACtE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,QAAQ,CAAC,gBAAgB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACvD;;;;OAIG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9C;AAED,iDAAiD;AACjD,MAAM,WAAW,uBAAuB;IACtC,+DAA+D;IAC/D,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,yEAAyE;IACzE,QAAQ,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAE1C,2EAA2E;IAC3E,QAAQ,CAAC,QAAQ,EAAE,WAAW,GAAG,IAAI,CAAC;IACtC,2CAA2C;IAC3C,QAAQ,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,CAAC;IAExD,2EAA2E;IAC3E,QAAQ,CAAC,UAAU,EAAE,eAAe,GAAG,IAAI,CAAC;IAC5C,mCAAmC;IACnC,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC,EAAE,eAAe,GAAG,IAAI,KAAK,IAAI,CAAC;IAE5D,wCAAwC;IACxC,QAAQ,CAAC,eAAe,EAAE,mBAAmB,EAAE,CAAC;IAChD,wCAAwC;IACxC,QAAQ,CAAC,kBAAkB,EAAE,CAAC,MAAM,EAAE,mBAAmB,EAAE,KAAK,IAAI,CAAC;IAErE,+BAA+B;IAC/B,QAAQ,CAAC,SAAS,EAAE,WAAW,EAAE,CAAC;IAClC,+BAA+B;IAC/B,QAAQ,CAAC,YAAY,EAAE,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,IAAI,CAAC;IAErD,wDAAwD;IACxD,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,kCAAkC;IAClC,QAAQ,CAAC,WAAW,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAElD,6DAA6D;IAC7D,QAAQ,CAAC,SAAS,EAAE,yBAAyB,CAAC;IAC9C,yDAAyD;IACzD,QAAQ,CAAC,gBAAgB,EAAE,yBAAyB,CAAC;IAErD,qEAAqE;IACrE,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,uEAAuE;IACvE,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAEpC;;;;;;;;;OASG;IACH,QAAQ,CAAC,MAAM,EAAE,CACf,OAAO,EAAE,MAAM,EACf,KAAK,CAAC,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,4BAA4B,KACnC,OAAO,CAAC,IAAI,CAAC,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,wBAAwB,GAChC,uBAAuB,CAoJzB"}
@@ -0,0 +1,184 @@
1
+ "use client";
2
+ import { useCallback, useEffect, useState } from "react";
3
+ import { getUserMessage } from "@stigmer/sdk";
4
+ import { useDefaultAgent } from "../agent";
5
+ import { useModelRegistry } from "../models";
6
+ import { useWorkspaceEntries } from "../workspace";
7
+ import { useSessionVariables } from "../execution/useSessionVariables";
8
+ import { useCreateSession } from "./useCreateSession";
9
+ import { useCreateAgentExecution } from "../execution/useCreateAgentExecution";
10
+ const STORAGE_KEY_MODEL = "stigmer:session:model";
11
+ /**
12
+ * Orchestrates the "create a new session" flow.
13
+ *
14
+ * Manages all the state required to configure and submit a new session:
15
+ * model selection (with localStorage persistence), agent resolution,
16
+ * MCP server/skill/runner selection, workspace entries, and session
17
+ * variables. On submission, creates the session and its first execution
18
+ * in sequence, then notifies the consumer via `onSessionCreated`.
19
+ *
20
+ * This hook is framework-agnostic — it works identically in Next.js,
21
+ * Vite, Tauri, or any React environment. Navigation, toast notifications,
22
+ * and draft-mode logic are the consumer's responsibility.
23
+ *
24
+ * @example
25
+ * ```tsx
26
+ * const flow = useNewSessionFlow({
27
+ * org: "acme",
28
+ * onSessionCreated: (id) => navigate(`/sessions/${id}`),
29
+ * onError: (msg) => toast.error(msg),
30
+ * });
31
+ *
32
+ * <SessionComposer
33
+ * onSubmit={flow.submit}
34
+ * isSubmitting={flow.isSubmitting}
35
+ * org="acme"
36
+ * workspace={flow.workspace}
37
+ * agentRef={flow.agentRef}
38
+ * onAgentRefChange={flow.setAgentRef}
39
+ * onAgentResolutionChange={flow.setResolution}
40
+ * mcpServerUsages={flow.mcpServerUsages}
41
+ * onMcpServerUsagesChange={flow.setMcpServerUsages}
42
+ * skillRefs={flow.skillRefs}
43
+ * onSkillRefsChange={flow.setSkillRefs}
44
+ * runnerId={flow.runnerId}
45
+ * onRunnerIdChange={flow.setRunnerId}
46
+ * sessionVariables={flow.sessionVariables}
47
+ * defaultModelId={flow.modelId}
48
+ * onModelChange={flow.setModelId}
49
+ * />
50
+ * ```
51
+ */
52
+ export function useNewSessionFlow(options) {
53
+ const { org, onSessionCreated, onError } = options;
54
+ const { getModel } = useModelRegistry();
55
+ const { create: createSession } = useCreateSession();
56
+ const { create: createExecution } = useCreateAgentExecution();
57
+ const { agent: defaultAgent } = useDefaultAgent(org);
58
+ const workspace = useWorkspaceEntries();
59
+ const sessionVariables = useSessionVariables();
60
+ const [modelId, setModelId] = useState(undefined);
61
+ const [agentRef, setAgentRef] = useState(null);
62
+ const [resolution, setResolution] = useState(null);
63
+ const [mcpServerUsages, setMcpServerUsages] = useState([]);
64
+ const [skillRefs, setSkillRefs] = useState([]);
65
+ const [runnerId, setRunnerId] = useState(null);
66
+ const [isSubmitting, setIsSubmitting] = useState(false);
67
+ const [submitError, setSubmitError] = useState(null);
68
+ const validModelId = modelId && getModel(modelId) ? modelId : undefined;
69
+ // Restore persisted model on mount
70
+ useEffect(() => {
71
+ const stored = localStorage.getItem(STORAGE_KEY_MODEL);
72
+ if (stored && getModel(stored)) {
73
+ setModelId(stored);
74
+ }
75
+ }, [getModel]);
76
+ // Persist model on change
77
+ useEffect(() => {
78
+ if (modelId) {
79
+ localStorage.setItem(STORAGE_KEY_MODEL, modelId);
80
+ }
81
+ }, [modelId]);
82
+ const submit = useCallback(async (message, selectedModel, context) => {
83
+ if (isSubmitting)
84
+ return;
85
+ if (!org) {
86
+ const msg = "Select an organization before starting a session.";
87
+ setSubmitError(msg);
88
+ onError?.(msg);
89
+ return;
90
+ }
91
+ setIsSubmitting(true);
92
+ setSubmitError(null);
93
+ try {
94
+ const sessionFields = {
95
+ org,
96
+ workspaceEntries: workspace.hasEntries
97
+ ? workspace.toInput()
98
+ : undefined,
99
+ mcpServerUsages: mcpServerUsages.length > 0 ? mcpServerUsages : undefined,
100
+ skillRefs: skillRefs.length > 0 ? skillRefs : undefined,
101
+ runnerId: runnerId ?? undefined,
102
+ };
103
+ const executionFields = {
104
+ org,
105
+ message,
106
+ modelName: selectedModel ?? validModelId,
107
+ runtimeEnv: context?.runtimeEnv,
108
+ attachments: context?.attachments,
109
+ };
110
+ let sessionId;
111
+ if (agentRef && resolution) {
112
+ if (resolution.mode === "saved") {
113
+ ({ sessionId } = await createSession({
114
+ ...sessionFields,
115
+ agentInstanceId: resolution.instanceId,
116
+ }));
117
+ }
118
+ else {
119
+ ({ sessionId } = await createSession({
120
+ ...sessionFields,
121
+ agentRef,
122
+ }));
123
+ }
124
+ }
125
+ else {
126
+ const defaultInstanceId = defaultAgent?.status?.defaultInstanceId;
127
+ if (!defaultInstanceId) {
128
+ throw new Error("No default agent available. Select an agent to start a session.");
129
+ }
130
+ ({ sessionId } = await createSession({
131
+ ...sessionFields,
132
+ agentInstanceId: defaultInstanceId,
133
+ }));
134
+ }
135
+ await createExecution({ ...executionFields, sessionId });
136
+ sessionVariables.clear();
137
+ onSessionCreated(sessionId);
138
+ }
139
+ catch (err) {
140
+ const detail = getUserMessage(err, "Failed to start session");
141
+ setSubmitError(detail);
142
+ onError?.(detail);
143
+ }
144
+ finally {
145
+ setIsSubmitting(false);
146
+ }
147
+ }, [
148
+ isSubmitting,
149
+ org,
150
+ validModelId,
151
+ workspace,
152
+ mcpServerUsages,
153
+ skillRefs,
154
+ runnerId,
155
+ agentRef,
156
+ resolution,
157
+ defaultAgent,
158
+ createSession,
159
+ createExecution,
160
+ sessionVariables,
161
+ onSessionCreated,
162
+ onError,
163
+ ]);
164
+ return {
165
+ modelId: validModelId,
166
+ setModelId,
167
+ agentRef,
168
+ setAgentRef,
169
+ resolution,
170
+ setResolution,
171
+ mcpServerUsages,
172
+ setMcpServerUsages,
173
+ skillRefs,
174
+ setSkillRefs,
175
+ runnerId,
176
+ setRunnerId,
177
+ workspace,
178
+ sessionVariables,
179
+ isSubmitting,
180
+ submitError,
181
+ submit,
182
+ };
183
+ }
184
+ //# sourceMappingURL=useNewSessionFlow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useNewSessionFlow.js","sourceRoot":"","sources":["../../src/session/useNewSessionFlow.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /** Return value of {@link usePersistedModel}. */
2
+ export type UsePersistedModelReturn = readonly [
3
+ modelId: string | undefined,
4
+ setModelId: (id: string) => void
5
+ ];
6
+ /**
7
+ * Model selection with localStorage persistence.
8
+ *
9
+ * Restores the last selected model on mount and validates it against the
10
+ * model registry. Invalid or removed models are silently ignored (returns
11
+ * `undefined`). On change, persists the new selection to localStorage so
12
+ * it survives page reloads and navigation.
13
+ *
14
+ * Used by both the session launcher (new session) and session page
15
+ * (follow-up messages) to maintain a consistent model preference.
16
+ */
17
+ export declare function usePersistedModel(): UsePersistedModelReturn;
18
+ //# sourceMappingURL=usePersistedModel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePersistedModel.d.ts","sourceRoot":"","sources":["../../src/session/usePersistedModel.ts"],"names":[],"mappings":"AAOA,iDAAiD;AACjD,MAAM,MAAM,uBAAuB,GAAG,SAAS;IAC7C,OAAO,EAAE,MAAM,GAAG,SAAS;IAC3B,UAAU,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI;CACjC,CAAC;AAEF;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,IAAI,uBAAuB,CAgB3D"}
@@ -0,0 +1,31 @@
1
+ "use client";
2
+ import { useEffect, useState } from "react";
3
+ import { useModelRegistry } from "../models";
4
+ const STORAGE_KEY_MODEL = "stigmer:session:model";
5
+ /**
6
+ * Model selection with localStorage persistence.
7
+ *
8
+ * Restores the last selected model on mount and validates it against the
9
+ * model registry. Invalid or removed models are silently ignored (returns
10
+ * `undefined`). On change, persists the new selection to localStorage so
11
+ * it survives page reloads and navigation.
12
+ *
13
+ * Used by both the session launcher (new session) and session page
14
+ * (follow-up messages) to maintain a consistent model preference.
15
+ */
16
+ export function usePersistedModel() {
17
+ const { getModel } = useModelRegistry();
18
+ const [modelId, setModelId] = useState(() => {
19
+ if (typeof window === "undefined")
20
+ return undefined;
21
+ return localStorage.getItem(STORAGE_KEY_MODEL) ?? undefined;
22
+ });
23
+ useEffect(() => {
24
+ if (modelId) {
25
+ localStorage.setItem(STORAGE_KEY_MODEL, modelId);
26
+ }
27
+ }, [modelId]);
28
+ const validModelId = modelId && getModel(modelId) ? modelId : undefined;
29
+ return [validModelId, setModelId];
30
+ }
31
+ //# sourceMappingURL=usePersistedModel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePersistedModel.js","sourceRoot":"","sources":["../../src/session/usePersistedModel.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAE7C,MAAM,iBAAiB,GAAG,uBAAuB,CAAC;AAQlD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,iBAAiB;IAC/B,MAAM,EAAE,QAAQ,EAAE,GAAG,gBAAgB,EAAE,CAAC;IAExC,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAqB,GAAG,EAAE;QAC9D,IAAI,OAAO,MAAM,KAAK,WAAW;YAAE,OAAO,SAAS,CAAC;QACpD,OAAO,YAAY,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,SAAS,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,OAAO,EAAE,CAAC;YACZ,YAAY,CAAC,OAAO,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;QACnD,CAAC;IACH,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAEd,MAAM,YAAY,GAAG,OAAO,IAAI,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;IACxE,OAAO,CAAC,YAAY,EAAE,UAAU,CAAU,CAAC;AAC7C,CAAC"}
@@ -0,0 +1,104 @@
1
+ import type { McpServerUsageInput, ResourceRef } from "@stigmer/sdk";
2
+ import type { AgentResolution } from "../agent";
3
+ import { type UseWorkspaceEntriesReturn } from "../workspace";
4
+ import { type UseSessionVariablesReturn } from "../execution/useSessionVariables";
5
+ import type { SessionComposerSubmitContext } from "../composer";
6
+ import { type UseSessionConversationReturn } from "./useSessionConversation";
7
+ import { type UsePersistedModelReturn } from "./usePersistedModel";
8
+ /** Options for {@link useSessionPageFlow}. */
9
+ export interface UseSessionPageFlowOptions {
10
+ /** Session ID to load and manage. */
11
+ readonly sessionId: string;
12
+ /** Organization slug. */
13
+ readonly org: string;
14
+ }
15
+ /** Return value of {@link useSessionPageFlow}. */
16
+ export interface UseSessionPageFlowReturn {
17
+ /** Full conversation state from `useSessionConversation`. */
18
+ readonly conv: UseSessionConversationReturn;
19
+ /** Persisted model selection: `[modelId, setModelId]`. */
20
+ readonly model: UsePersistedModelReturn;
21
+ /** Currently selected agent reference (derived from session, or overridden by user). */
22
+ readonly agentRef: ResourceRef | null;
23
+ /** Update the agent reference for future follow-ups. */
24
+ readonly setAgentRef: (ref: ResourceRef | null) => void;
25
+ /** Current agent resolution state. */
26
+ readonly resolution: AgentResolution | null;
27
+ /** Update the agent resolution. */
28
+ readonly setResolution: (r: AgentResolution | null) => void;
29
+ /** Active MCP server configurations for follow-ups. */
30
+ readonly mcpServerUsages: McpServerUsageInput[];
31
+ /** Update MCP server configurations. */
32
+ readonly setMcpServerUsages: (usages: McpServerUsageInput[]) => void;
33
+ /** Active skill references for follow-ups. */
34
+ readonly skillRefs: ResourceRef[];
35
+ /** Update skill references. */
36
+ readonly setSkillRefs: (refs: ResourceRef[]) => void;
37
+ /** Workspace entries manager (synced from session on load). */
38
+ readonly workspace: UseWorkspaceEntriesReturn;
39
+ /** Session variables (per-execution secrets) manager. */
40
+ readonly sessionVariables: UseSessionVariablesReturn;
41
+ /**
42
+ * Submit a follow-up message. Handles agent override resolution
43
+ * (if the user changed the agent mid-session) and delegates to
44
+ * `conv.sendFollowUp` with all managed state.
45
+ */
46
+ readonly handleSubmit: (message: string, model?: string, context?: SessionComposerSubmitContext) => Promise<void>;
47
+ /**
48
+ * The most relevant execution for sidebar display — the active
49
+ * streaming execution, or the last completed one.
50
+ */
51
+ readonly displayExecution: UseSessionConversationReturn["activeStreamExecution"];
52
+ /**
53
+ * All executions for widget display (completed + active stream).
54
+ */
55
+ readonly allExecutions: UseSessionConversationReturn["completedExecutions"];
56
+ /**
57
+ * Sandbox workspace root for file path normalization, or `undefined`
58
+ * when the session has no git-repo workspace entries.
59
+ */
60
+ readonly sandboxWorkspaceRoot: string | undefined;
61
+ }
62
+ /**
63
+ * Orchestrates the session page experience.
64
+ *
65
+ * Composes `useSessionConversation` with agent resolution, workspace
66
+ * synchronization, model persistence, and follow-up submission logic.
67
+ * Returns everything a session page needs to render its UI without
68
+ * duplicating domain orchestration.
69
+ *
70
+ * Framework-agnostic — works identically in Next.js, Vite, Tauri, or
71
+ * any React environment. The consumer provides layout, error states,
72
+ * and loading skeletons.
73
+ *
74
+ * @example
75
+ * ```tsx
76
+ * const flow = useSessionPageFlow({ sessionId: "ses_abc", org: "acme" });
77
+ *
78
+ * if (flow.conv.isLoading) return <Spinner />;
79
+ * if (flow.conv.loadError) return <ErrorView error={flow.conv.loadError} />;
80
+ *
81
+ * return (
82
+ * <>
83
+ * <MessageThread
84
+ * executions={flow.conv.completedExecutions}
85
+ * activeStreamExecution={flow.conv.activeStreamExecution}
86
+ * sandboxWorkspaceRoot={flow.sandboxWorkspaceRoot}
87
+ * />
88
+ * <SessionComposer
89
+ * onSubmit={flow.handleSubmit}
90
+ * isSubmitting={flow.conv.isSending}
91
+ * disabled={!flow.conv.canSendFollowUp}
92
+ * workspace={flow.workspace}
93
+ * agentRef={flow.agentRef}
94
+ * onAgentRefChange={flow.setAgentRef}
95
+ * onAgentResolutionChange={flow.setResolution}
96
+ * defaultModelId={flow.model[0]}
97
+ * onModelChange={flow.model[1]}
98
+ * />
99
+ * </>
100
+ * );
101
+ * ```
102
+ */
103
+ export declare function useSessionPageFlow(options: UseSessionPageFlowOptions): UseSessionPageFlowReturn;
104
+ //# sourceMappingURL=useSessionPageFlow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSessionPageFlow.d.ts","sourceRoot":"","sources":["../../src/session/useSessionPageFlow.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AACrE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAGhD,OAAO,EAAuB,KAAK,yBAAyB,EAAE,MAAM,cAAc,CAAC;AACnF,OAAO,EAAuB,KAAK,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AACvG,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,EAA0B,KAAK,4BAA4B,EAAE,MAAM,0BAA0B,CAAC;AAErG,OAAO,EAAqB,KAAK,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAQtF,8CAA8C;AAC9C,MAAM,WAAW,yBAAyB;IACxC,qCAAqC;IACrC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,yBAAyB;IACzB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB;AAED,kDAAkD;AAClD,MAAM,WAAW,wBAAwB;IACvC,6DAA6D;IAC7D,QAAQ,CAAC,IAAI,EAAE,4BAA4B,CAAC;IAE5C,0DAA0D;IAC1D,QAAQ,CAAC,KAAK,EAAE,uBAAuB,CAAC;IAExC,wFAAwF;IACxF,QAAQ,CAAC,QAAQ,EAAE,WAAW,GAAG,IAAI,CAAC;IACtC,wDAAwD;IACxD,QAAQ,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,CAAC;IACxD,sCAAsC;IACtC,QAAQ,CAAC,UAAU,EAAE,eAAe,GAAG,IAAI,CAAC;IAC5C,mCAAmC;IACnC,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC,EAAE,eAAe,GAAG,IAAI,KAAK,IAAI,CAAC;IAE5D,uDAAuD;IACvD,QAAQ,CAAC,eAAe,EAAE,mBAAmB,EAAE,CAAC;IAChD,wCAAwC;IACxC,QAAQ,CAAC,kBAAkB,EAAE,CAAC,MAAM,EAAE,mBAAmB,EAAE,KAAK,IAAI,CAAC;IAErE,8CAA8C;IAC9C,QAAQ,CAAC,SAAS,EAAE,WAAW,EAAE,CAAC;IAClC,+BAA+B;IAC/B,QAAQ,CAAC,YAAY,EAAE,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,IAAI,CAAC;IAErD,+DAA+D;IAC/D,QAAQ,CAAC,SAAS,EAAE,yBAAyB,CAAC;IAC9C,yDAAyD;IACzD,QAAQ,CAAC,gBAAgB,EAAE,yBAAyB,CAAC;IAErD;;;;OAIG;IACH,QAAQ,CAAC,YAAY,EAAE,CACrB,OAAO,EAAE,MAAM,EACf,KAAK,CAAC,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,4BAA4B,KACnC,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnB;;;OAGG;IACH,QAAQ,CAAC,gBAAgB,EAAE,4BAA4B,CAAC,uBAAuB,CAAC,CAAC;IAEjF;;OAEG;IACH,QAAQ,CAAC,aAAa,EAAE,4BAA4B,CAAC,qBAAqB,CAAC,CAAC;IAE5E;;;OAGG;IACH,QAAQ,CAAC,oBAAoB,EAAE,MAAM,GAAG,SAAS,CAAC;CACnD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,yBAAyB,GACjC,wBAAwB,CAmJ1B"}
@@ -0,0 +1,172 @@
1
+ "use client";
2
+ import { useCallback, useEffect, useMemo, useRef, useState } from "react";
3
+ import { useDefaultAgent } from "../agent";
4
+ import { useStigmer } from "../hooks";
5
+ import { useWorkspaceEntries } from "../workspace";
6
+ import { useSessionVariables } from "../execution/useSessionVariables";
7
+ import { useSessionConversation } from "./useSessionConversation";
8
+ import { useAgentRefFromSession } from "./useAgentRefFromSession";
9
+ import { usePersistedModel } from "./usePersistedModel";
10
+ /**
11
+ * Well-known Daytona sandbox workspace root. Used as the SDK safety-net
12
+ * normalization target for cloud sessions (git-repo workspace entries).
13
+ */
14
+ const DAYTONA_WORKSPACE_ROOT = "/home/daytona/workspace";
15
+ /**
16
+ * Orchestrates the session page experience.
17
+ *
18
+ * Composes `useSessionConversation` with agent resolution, workspace
19
+ * synchronization, model persistence, and follow-up submission logic.
20
+ * Returns everything a session page needs to render its UI without
21
+ * duplicating domain orchestration.
22
+ *
23
+ * Framework-agnostic — works identically in Next.js, Vite, Tauri, or
24
+ * any React environment. The consumer provides layout, error states,
25
+ * and loading skeletons.
26
+ *
27
+ * @example
28
+ * ```tsx
29
+ * const flow = useSessionPageFlow({ sessionId: "ses_abc", org: "acme" });
30
+ *
31
+ * if (flow.conv.isLoading) return <Spinner />;
32
+ * if (flow.conv.loadError) return <ErrorView error={flow.conv.loadError} />;
33
+ *
34
+ * return (
35
+ * <>
36
+ * <MessageThread
37
+ * executions={flow.conv.completedExecutions}
38
+ * activeStreamExecution={flow.conv.activeStreamExecution}
39
+ * sandboxWorkspaceRoot={flow.sandboxWorkspaceRoot}
40
+ * />
41
+ * <SessionComposer
42
+ * onSubmit={flow.handleSubmit}
43
+ * isSubmitting={flow.conv.isSending}
44
+ * disabled={!flow.conv.canSendFollowUp}
45
+ * workspace={flow.workspace}
46
+ * agentRef={flow.agentRef}
47
+ * onAgentRefChange={flow.setAgentRef}
48
+ * onAgentResolutionChange={flow.setResolution}
49
+ * defaultModelId={flow.model[0]}
50
+ * onModelChange={flow.model[1]}
51
+ * />
52
+ * </>
53
+ * );
54
+ * ```
55
+ */
56
+ export function useSessionPageFlow(options) {
57
+ const { sessionId, org } = options;
58
+ const stigmer = useStigmer();
59
+ const conv = useSessionConversation(sessionId, org);
60
+ const model = usePersistedModel();
61
+ const [modelId] = model;
62
+ const workspace = useWorkspaceEntries();
63
+ const sessionVariables = useSessionVariables();
64
+ const [mcpServerUsages, setMcpServerUsages] = useState([]);
65
+ const [skillRefs, setSkillRefs] = useState([]);
66
+ const initialSyncDone = useRef(false);
67
+ // -------------------------------------------------------------------------
68
+ // Agent — derive from session, allow mid-session changes
69
+ // -------------------------------------------------------------------------
70
+ const sessionInstanceId = conv.session?.spec?.agentInstanceId ?? null;
71
+ const { agentRef: derivedAgentRef } = useAgentRefFromSession(sessionInstanceId);
72
+ const { agent: defaultAgent, isLoading: isDefaultAgentLoading } = useDefaultAgent(org);
73
+ const [agentRef, setAgentRef] = useState(null);
74
+ const [resolution, setResolution] = useState(null);
75
+ const [agentInitDone, setAgentInitDone] = useState(false);
76
+ if (!agentInitDone && derivedAgentRef && sessionInstanceId && !isDefaultAgentLoading) {
77
+ setAgentInitDone(true);
78
+ const isDefault = defaultAgent &&
79
+ derivedAgentRef.org === defaultAgent.metadata?.org &&
80
+ derivedAgentRef.slug === defaultAgent.metadata?.slug;
81
+ if (!isDefault) {
82
+ setAgentRef(derivedAgentRef);
83
+ setResolution({ mode: "saved", instanceId: sessionInstanceId });
84
+ }
85
+ }
86
+ // -------------------------------------------------------------------------
87
+ // Workspace — sync entries from session on first load
88
+ // -------------------------------------------------------------------------
89
+ useEffect(() => {
90
+ if (!conv.session || initialSyncDone.current)
91
+ return;
92
+ initialSyncDone.current = true;
93
+ const protoEntries = conv.session.spec?.workspaceEntries ?? [];
94
+ for (const entry of protoEntries) {
95
+ if (entry.source?.source.case === "gitRepo") {
96
+ const { url, branch } = entry.source.source.value;
97
+ workspace.addGitRepo(url, branch || undefined);
98
+ }
99
+ else if (entry.source?.source.case === "localPath") {
100
+ workspace.addLocalPath(entry.source.source.value.path);
101
+ }
102
+ }
103
+ }, [conv.session, workspace]);
104
+ // -------------------------------------------------------------------------
105
+ // Follow-up submission with agent override
106
+ // -------------------------------------------------------------------------
107
+ const handleSubmit = useCallback(async (message, selectedModel, context) => {
108
+ let agentInstanceIdOverride;
109
+ if (resolution) {
110
+ if (resolution.mode === "saved" &&
111
+ resolution.instanceId !== sessionInstanceId) {
112
+ agentInstanceIdOverride = resolution.instanceId;
113
+ }
114
+ else if (resolution.mode === "direct" && agentRef) {
115
+ const agent = await stigmer.agent.getByReference(agentRef);
116
+ const defaultId = agent.status?.defaultInstanceId;
117
+ if (defaultId && defaultId !== sessionInstanceId) {
118
+ agentInstanceIdOverride = defaultId;
119
+ }
120
+ }
121
+ }
122
+ conv.sendFollowUp(message, {
123
+ agentInstanceId: agentInstanceIdOverride,
124
+ modelName: selectedModel ?? modelId,
125
+ workspaceEntries: workspace.hasEntries
126
+ ? workspace.toInput()
127
+ : undefined,
128
+ mcpServerUsages: mcpServerUsages.length > 0 ? mcpServerUsages : undefined,
129
+ skillRefs: skillRefs.length > 0 ? skillRefs : undefined,
130
+ runtimeEnv: context?.runtimeEnv,
131
+ attachments: context?.attachments,
132
+ });
133
+ sessionVariables.clear();
134
+ }, [conv, modelId, workspace, mcpServerUsages, skillRefs, sessionVariables, resolution, agentRef, sessionInstanceId, stigmer]);
135
+ // -------------------------------------------------------------------------
136
+ // Derived display state
137
+ // -------------------------------------------------------------------------
138
+ const displayExecution = useMemo(() => {
139
+ if (conv.activeStreamExecution)
140
+ return conv.activeStreamExecution;
141
+ const completed = conv.completedExecutions;
142
+ return completed.length > 0 ? completed[completed.length - 1] : null;
143
+ }, [conv.activeStreamExecution, conv.completedExecutions]);
144
+ const allExecutions = useMemo(() => [
145
+ ...conv.completedExecutions,
146
+ ...(conv.activeStreamExecution ? [conv.activeStreamExecution] : []),
147
+ ], [conv.completedExecutions, conv.activeStreamExecution]);
148
+ const sandboxWorkspaceRoot = useMemo(() => {
149
+ const entries = conv.workspaceEntries;
150
+ const hasGitRepo = entries.some((e) => e.source?.source.case === "gitRepo");
151
+ return hasGitRepo ? DAYTONA_WORKSPACE_ROOT : undefined;
152
+ }, [conv.workspaceEntries]);
153
+ return {
154
+ conv,
155
+ model,
156
+ agentRef,
157
+ setAgentRef,
158
+ resolution,
159
+ setResolution,
160
+ mcpServerUsages,
161
+ setMcpServerUsages,
162
+ skillRefs,
163
+ setSkillRefs,
164
+ workspace,
165
+ sessionVariables,
166
+ handleSubmit,
167
+ displayExecution,
168
+ allExecutions,
169
+ sandboxWorkspaceRoot,
170
+ };
171
+ }
172
+ //# sourceMappingURL=useSessionPageFlow.js.map