@tutti-os/agent-gui 0.0.201 → 0.0.203

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 (35) hide show
  1. package/dist/agent-conversation/index.js +3 -3
  2. package/dist/agent-gui.d.ts +2 -1
  3. package/dist/agent-gui.js +8 -8
  4. package/dist/agent-message-center/index.js +3 -3
  5. package/dist/app/renderer/agentactivity.css +45 -115
  6. package/dist/{chunk-F5ARZZES.js → chunk-4OJSSUEU.js} +2 -2
  7. package/dist/{chunk-PWPVYNGO.js → chunk-FFMVDJOE.js} +2 -2
  8. package/dist/{chunk-3FA5JIDL.js → chunk-K5AOJ5DO.js} +1 -1
  9. package/dist/chunk-K5AOJ5DO.js.map +1 -0
  10. package/dist/{chunk-DAP74J63.js → chunk-LHT2UBPE.js} +302 -165
  11. package/dist/chunk-LHT2UBPE.js.map +1 -0
  12. package/dist/{chunk-ZADHMOME.js → chunk-NEH45ROF.js} +30 -16
  13. package/dist/chunk-NEH45ROF.js.map +1 -0
  14. package/dist/{chunk-MFQB4LR5.js → chunk-RD3ZAYNV.js} +3 -3
  15. package/dist/{chunk-5ZO3H4C5.js → chunk-VDTG6M6K.js} +2 -2
  16. package/dist/{chunk-7NUEEGAA.js → chunk-X5V6P2EB.js} +5 -1
  17. package/dist/chunk-X5V6P2EB.js.map +1 -0
  18. package/dist/context-mention-palette/index.js +3 -3
  19. package/dist/conversation-rail-runtime.d.ts +2 -1
  20. package/dist/index.d.ts +2 -1
  21. package/dist/index.js +8 -8
  22. package/dist/mention-search.js +2 -2
  23. package/dist/workbench/contribution.js +1 -1
  24. package/dist/workbench/index.js +1 -1
  25. package/dist/workbench/tool-sidebar/index.js +1 -1
  26. package/dist/workbench/tool-sidebar/index.js.map +1 -1
  27. package/package.json +14 -14
  28. package/dist/chunk-3FA5JIDL.js.map +0 -1
  29. package/dist/chunk-7NUEEGAA.js.map +0 -1
  30. package/dist/chunk-DAP74J63.js.map +0 -1
  31. package/dist/chunk-ZADHMOME.js.map +0 -1
  32. /package/dist/{chunk-F5ARZZES.js.map → chunk-4OJSSUEU.js.map} +0 -0
  33. /package/dist/{chunk-PWPVYNGO.js.map → chunk-FFMVDJOE.js.map} +0 -0
  34. /package/dist/{chunk-MFQB4LR5.js.map → chunk-RD3ZAYNV.js.map} +0 -0
  35. /package/dist/{chunk-5ZO3H4C5.js.map → chunk-VDTG6M6K.js.map} +0 -0
@@ -7,7 +7,7 @@ import {
7
7
  reconcileProjectedAgentConversationVM,
8
8
  serializeAgentConversationForClipboard,
9
9
  useProjectedAgentConversation
10
- } from "../chunk-ZADHMOME.js";
10
+ } from "../chunk-NEH45ROF.js";
11
11
  import "../chunk-XD5NTTFJ.js";
12
12
  import "../chunk-CXC3ROXQ.js";
13
13
  import "../chunk-XJ34OIEQ.js";
@@ -15,9 +15,9 @@ import "../chunk-JDVP33S5.js";
15
15
  import "../chunk-JXFOFJYI.js";
16
16
  import "../chunk-3V5OCA2M.js";
17
17
  import "../chunk-FGLQZ6I4.js";
18
- import "../chunk-PWPVYNGO.js";
18
+ import "../chunk-FFMVDJOE.js";
19
19
  import "../chunk-ZVYUTXQJ.js";
20
- import "../chunk-3FA5JIDL.js";
20
+ import "../chunk-K5AOJ5DO.js";
21
21
  import "../chunk-F5UR6EJG.js";
22
22
  import "../chunk-M6HTOCQK.js";
23
23
  import {
@@ -1,7 +1,7 @@
1
1
  import * as react from 'react';
2
2
  import { ReactNode } from 'react';
3
3
  import { I18nRuntime } from '@tutti-os/ui-i18n-runtime';
4
- import { AgentActivityGoalControlInput, AgentActivityGoalControlResult, AgentActivityCreateSessionInput, AgentActivitySession, AgentActivityDeleteSessionInput, AgentActivityDeleteSessionResult, AgentActivitySendInput, AgentActivitySessionSettings, AgentActivityActivateSessionResult, AgentActivityUpdateTuttiModeActivationInput, AgentActivityUpdateTuttiModeActivationResult, AgentActivitySnapshot, AgentSessionEngine, AgentActivityMessageOrder, AgentActivityMessagePage, AgentActivitySendInputResult, AgentActivityRenameSessionInput, AgentActivitySetCollaborationAdoptionInput, AgentActivityCollaborationRun, AgentActivitySubmitInteractiveInput, AgentActivitySubmitInteractiveResult, AgentActivitySnapshotListener, AgentActivitySubmitSettingsPatch } from '@tutti-os/agent-activity-core';
4
+ import { AgentActivityGoalControlInput, AgentActivityGoalControlResult, AgentActivityCreateSessionInput, AgentActivitySession, AgentActivityDeleteSessionInput, AgentActivityDeleteSessionResult, AgentActivitySendInput, AgentActivityRailPlacement, AgentActivitySessionSettings, AgentActivityActivateSessionResult, AgentActivityUpdateTuttiModeActivationInput, AgentActivityUpdateTuttiModeActivationResult, AgentActivitySnapshot, AgentSessionEngine, AgentActivityMessageOrder, AgentActivityMessagePage, AgentActivitySendInputResult, AgentActivityRenameSessionInput, AgentActivitySetCollaborationAdoptionInput, AgentActivityCollaborationRun, AgentActivitySubmitInteractiveInput, AgentActivitySubmitInteractiveResult, AgentActivitySnapshotListener, AgentActivitySubmitSettingsPatch } from '@tutti-os/agent-activity-core';
5
5
  import { l as AgentHostAgentSessionComposerSettings, p as AgentHostUnactivateAgentSessionResult, b as AgentGUIAgentTarget, f as AgentGUIProvider, q as AgentPromptContentBlock, e as AgentGUINodeData, P as Point, g as AgentGUIProviderRailAllPresentation, h as AgentGUIProviderRailMode, i as AgentGUIProviderReadinessGate, j as AgentGUITargetConnectionSource, d as AgentGUIHomeSuggestionId, N as NodeFrame, a as AgentGUIAgentDirectorySnapshot, c as AgentGUIAllAgentsPresentation } from './types-CHAMK2g7.js';
6
6
  import { A as AgentComposerDraft, i as AgentSessionCommand, d as AgentGUIProviderSkillOption, b as AgentGUIComposerSettingsVM, e as AgentGUIQueueStatus, f as AgentGUIQueuedPromptVM, h as AgentMessageMarkdownWorkspaceAppIcon, j as AgentSlashCommandCapability, c as AgentGUINodeViewModel, a as AgentComposerDraftFile, k as AgentUsageQuota, g as AgentHostInputApi } from './agentGuiNodeTypes-DTeerTzS.js';
7
7
  import { WorkspaceFileReference, ReferenceLocateTarget, WorkspaceFileReferenceAdapter, ReferenceProvenanceCatalog } from '@tutti-os/workspace-file-reference/contracts';
@@ -184,6 +184,7 @@ interface AgentActivityRuntimeActivateSessionInputBase {
184
184
  initialContent?: AgentActivitySendInput["content"];
185
185
  /** 仅展示用首轮文本(bundle 折叠成一个 chip);initialContent 仍带展开后的文件。 */
186
186
  initialDisplayPrompt?: string | null;
187
+ railPlacement?: AgentActivityRailPlacement;
187
188
  submitDiagnostics?: AgentActivitySendInput["submitDiagnostics"];
188
189
  settings?: AgentActivitySessionSettings;
189
190
  title?: string;
package/dist/agent-gui.js CHANGED
@@ -1,23 +1,23 @@
1
1
  import {
2
2
  AgentGUI
3
- } from "./chunk-DAP74J63.js";
3
+ } from "./chunk-LHT2UBPE.js";
4
4
  import "./chunk-LB4AGT7B.js";
5
5
  import "./chunk-A4WCTHWS.js";
6
- import "./chunk-7NUEEGAA.js";
6
+ import "./chunk-X5V6P2EB.js";
7
7
  import "./chunk-KDN6SLJM.js";
8
8
  import "./chunk-4CHBM3G3.js";
9
9
  import "./chunk-CBMWHQ7P.js";
10
10
  import "./chunk-MGSRWYRN.js";
11
11
  import "./chunk-GWKXYGUN.js";
12
- import "./chunk-ZADHMOME.js";
12
+ import "./chunk-NEH45ROF.js";
13
13
  import "./chunk-XD5NTTFJ.js";
14
14
  import "./chunk-CXC3ROXQ.js";
15
15
  import "./chunk-UP3ZDYTN.js";
16
16
  import "./chunk-GUFEHWUX.js";
17
- import "./chunk-5ZO3H4C5.js";
17
+ import "./chunk-VDTG6M6K.js";
18
18
  import "./chunk-CX6XXG6R.js";
19
19
  import "./chunk-G7DS23D4.js";
20
- import "./chunk-F5ARZZES.js";
20
+ import "./chunk-4OJSSUEU.js";
21
21
  import "./chunk-VMPA46ET.js";
22
22
  import "./chunk-XJ34OIEQ.js";
23
23
  import "./chunk-JDVP33S5.js";
@@ -25,13 +25,13 @@ import "./chunk-JXFOFJYI.js";
25
25
  import "./chunk-3V5OCA2M.js";
26
26
  import "./chunk-RMQREVJY.js";
27
27
  import "./chunk-FGLQZ6I4.js";
28
- import "./chunk-MFQB4LR5.js";
28
+ import "./chunk-RD3ZAYNV.js";
29
29
  import "./chunk-EVQ4JY3N.js";
30
- import "./chunk-PWPVYNGO.js";
30
+ import "./chunk-FFMVDJOE.js";
31
31
  import "./chunk-ZVYUTXQJ.js";
32
32
  import "./chunk-UEBPMWKS.js";
33
33
  import "./chunk-YMXYBG7U.js";
34
- import "./chunk-3FA5JIDL.js";
34
+ import "./chunk-K5AOJ5DO.js";
35
35
  import "./chunk-F5UR6EJG.js";
36
36
  import "./chunk-M6HTOCQK.js";
37
37
  import "./chunk-EOGTJQID.js";
@@ -8,7 +8,7 @@ import {
8
8
  isPromptRequestIdTitle,
9
9
  latestPlanTurnId,
10
10
  planImplementationPromptFromPlanTurn
11
- } from "../chunk-MFQB4LR5.js";
11
+ } from "../chunk-RD3ZAYNV.js";
12
12
  import {
13
13
  useEngineSelector
14
14
  } from "../chunk-EVQ4JY3N.js";
@@ -21,7 +21,7 @@ import {
21
21
  isExitPlanSwitchModeInput,
22
22
  normalizeAgentApprovalPurpose,
23
23
  normalizeAskUserQuestions
24
- } from "../chunk-PWPVYNGO.js";
24
+ } from "../chunk-FFMVDJOE.js";
25
25
  import {
26
26
  cn
27
27
  } from "../chunk-ZVYUTXQJ.js";
@@ -34,7 +34,7 @@ import {
34
34
  } from "../chunk-YMXYBG7U.js";
35
35
  import {
36
36
  workspaceAgentProviderLabel
37
- } from "../chunk-3FA5JIDL.js";
37
+ } from "../chunk-K5AOJ5DO.js";
38
38
  import "../chunk-F5UR6EJG.js";
39
39
  import {
40
40
  managedAgentRoundedIconUrl
@@ -3747,9 +3747,7 @@ aside.workspace-agents-status-panel
3747
3747
  content: "";
3748
3748
  }
3749
3749
 
3750
- .agent-gui-conversation__message-group:has(
3751
- > .agent-gui-conversation__message-footer
3752
- ) {
3750
+ .agent-gui-conversation__message-group[data-agent-message-footer="true"] {
3753
3751
  margin-bottom: 26px;
3754
3752
  }
3755
3753
 
@@ -3870,9 +3868,7 @@ aside.workspace-agents-status-panel
3870
3868
  }
3871
3869
 
3872
3870
  .agent-gui-node__timeline
3873
- > .agent-gui-conversation__assistant-message-flow:has(
3874
- > .workspace-agents-status-panel__detail-thinking-disclosure:last-child
3875
- )
3871
+ > .agent-gui-conversation__assistant-message-flow[data-agent-message-flow-thinking-last="true"]
3876
3872
  + :is(
3877
3873
  .workspace-agents-status-panel__detail-tool-section,
3878
3874
  .workspace-agents-status-panel__detail-tool-row
@@ -3882,9 +3878,7 @@ aside.workspace-agents-status-panel
3882
3878
  .workspace-agents-status-panel__detail-tool-section,
3883
3879
  .workspace-agents-status-panel__detail-tool-row
3884
3880
  )
3885
- + .agent-gui-conversation__assistant-message-flow:has(
3886
- > .workspace-agents-status-panel__detail-thinking-disclosure:first-child
3887
- ),
3881
+ + .agent-gui-conversation__assistant-message-flow[data-agent-message-flow-thinking-first="true"],
3888
3882
  .agent-gui-node__timeline
3889
3883
  > :is(
3890
3884
  .workspace-agents-status-panel__detail-tool-section,
@@ -3898,63 +3892,23 @@ aside.workspace-agents-status-panel
3898
3892
  }
3899
3893
 
3900
3894
  .agent-gui-node__timeline
3901
- > .agent-gui-transcript-row:has(
3902
- > .agent-gui-conversation__assistant-message-flow
3903
- > .workspace-agents-status-panel__detail-thinking-disclosure:last-child
3904
- )
3905
- + .agent-gui-transcript-row:has(
3906
- > :is(
3907
- .workspace-agents-status-panel__detail-tool-section,
3908
- .workspace-agents-status-panel__detail-tool-row
3909
- )
3910
- ),
3895
+ > .agent-gui-transcript-row[data-agent-transcript-row-thinking-last="true"]
3896
+ + .agent-gui-transcript-row[data-agent-transcript-row-kind="tool-group"],
3911
3897
  .agent-gui-node__timeline
3912
- > .agent-gui-transcript-row:has(
3913
- > :is(
3914
- .workspace-agents-status-panel__detail-tool-section,
3915
- .workspace-agents-status-panel__detail-tool-row
3916
- )
3917
- )
3918
- + .agent-gui-transcript-row:has(
3919
- > .agent-gui-conversation__assistant-message-flow
3920
- > .workspace-agents-status-panel__detail-thinking-disclosure:first-child
3921
- ),
3898
+ > .agent-gui-transcript-row[data-agent-transcript-row-kind="tool-group"]
3899
+ + .agent-gui-transcript-row[data-agent-transcript-row-thinking-first="true"],
3922
3900
  .agent-gui-node__timeline
3923
- > .agent-gui-transcript-row:has(
3924
- > :is(
3925
- .workspace-agents-status-panel__detail-tool-section,
3926
- .workspace-agents-status-panel__detail-tool-row
3927
- )
3928
- )
3929
- + .agent-gui-transcript-row:has(
3930
- > :is(
3931
- .workspace-agents-status-panel__detail-tool-section,
3932
- .workspace-agents-status-panel__detail-tool-row
3933
- )
3934
- ) {
3901
+ > .agent-gui-transcript-row[data-agent-transcript-row-kind="tool-group"]
3902
+ + .agent-gui-transcript-row[data-agent-transcript-row-kind="tool-group"] {
3935
3903
  margin-top: -8px;
3936
3904
  }
3937
3905
 
3938
3906
  .agent-gui-node__timeline
3939
- > .agent-gui-transcript-row:has(
3940
- > .agent-gui-conversation__assistant-message-flow
3941
- )
3942
- + .agent-gui-transcript-row:has(
3943
- > :is(
3944
- .workspace-agents-status-panel__detail-tool-section,
3945
- .workspace-agents-status-panel__detail-tool-row
3946
- )
3947
- ),
3907
+ > .agent-gui-transcript-row[data-agent-transcript-row-speaker="assistant"]
3908
+ + .agent-gui-transcript-row[data-agent-transcript-row-kind="tool-group"],
3948
3909
  .agent-gui-node__timeline
3949
- > .agent-gui-transcript-row:has(
3950
- > :is(
3951
- .workspace-agents-status-panel__detail-tool-section,
3952
- .workspace-agents-status-panel__detail-tool-row
3953
- )
3954
- )
3955
- + .agent-gui-transcript-row:has(
3956
- > .agent-gui-conversation__assistant-message-flow
3957
- ) {
3910
+ > .agent-gui-transcript-row[data-agent-transcript-row-kind="tool-group"]
3911
+ + .agent-gui-transcript-row[data-agent-transcript-row-speaker="assistant"] {
3958
3912
  margin-top: -12px;
3959
3913
  }
3960
3914
 
@@ -4619,17 +4573,16 @@ aside.workspace-agents-status-panel
4619
4573
  transition: none;
4620
4574
  }
4621
4575
 
4622
- .workbench-window:has(
4623
- > .workbench-window__header [data-agent-gui-workbench-header="true"]
4624
- ) {
4576
+ .workbench-window[data-window-header-layout="overlay"],
4577
+ .workbench-window[data-agent-gui-standalone-window="true"] {
4625
4578
  --agent-gui-workbench-header-height: 44px;
4626
4579
 
4627
4580
  grid-template-rows: minmax(0, 1fr);
4628
4581
  }
4629
4582
 
4630
- .workbench-window:has(
4631
- > .workbench-window__header [data-agent-gui-workbench-header="true"]
4632
- )
4583
+ .workbench-window[data-window-header-layout="overlay"]
4584
+ .workbench-window__header,
4585
+ .workbench-window[data-agent-gui-standalone-window="true"]
4633
4586
  .workbench-window__header {
4634
4587
  position: absolute !important;
4635
4588
  top: 0 !important;
@@ -4648,50 +4601,34 @@ aside.workspace-agents-status-panel
4648
4601
  user-select: auto;
4649
4602
  }
4650
4603
 
4651
- .workbench-window:has(
4652
- > .workbench-window__header
4653
- .agent-gui-workbench-header[data-agent-gui-standalone-window-header="true"]
4654
- )
4604
+ .workbench-window[data-agent-gui-standalone-window="true"]
4655
4605
  .workbench-window__header {
4656
4606
  cursor: grab !important;
4657
4607
  }
4658
4608
 
4659
- .workbench-window:has(
4660
- > .workbench-window__header
4661
- .agent-gui-workbench-header[data-agent-gui-standalone-window-header="true"]
4662
- )
4609
+ .workbench-window[data-agent-gui-standalone-window="true"]
4663
4610
  .workbench-window__header:active {
4664
4611
  cursor: grabbing !important;
4665
4612
  }
4666
4613
 
4667
- .workbench-window:has(
4668
- > .workbench-window__header
4669
- .agent-gui-workbench-header[data-agent-gui-standalone-window-header="true"]
4670
- )
4614
+ .workbench-window[data-agent-gui-standalone-window="true"]
4671
4615
  .workbench-window__header {
4672
4616
  z-index: calc(var(--z-panel) + 1);
4673
4617
  }
4674
4618
 
4675
- .workbench-window:has(
4676
- > .workbench-window__header
4677
- .agent-gui-workbench-header[data-agent-gui-standalone-window-header="true"]
4678
- )
4619
+ .workbench-window[data-agent-gui-standalone-window="true"]
4679
4620
  .agent-gui-workbench-header::after {
4680
4621
  display: none;
4681
4622
  }
4682
4623
 
4683
- .workbench-window:has(
4684
- > .workbench-window__header [data-agent-gui-workbench-header="true"]
4685
- )
4624
+ .workbench-window[data-window-header-layout="overlay"] .workbench-window__body,
4625
+ .workbench-window[data-agent-gui-standalone-window="true"]
4686
4626
  .workbench-window__body {
4687
4627
  grid-row: 1;
4688
4628
  overflow: hidden;
4689
4629
  }
4690
4630
 
4691
- .workbench-window:has(
4692
- > .workbench-window__header
4693
- .agent-gui-workbench-header[data-agent-gui-standalone-window-header="true"]
4694
- )
4631
+ .workbench-window[data-agent-gui-standalone-window="true"]
4695
4632
  .workbench-window__body {
4696
4633
  display: flex;
4697
4634
  width: 100%;
@@ -4753,9 +4690,9 @@ aside.workspace-agents-status-panel
4753
4690
  overscroll-behavior: contain;
4754
4691
  }
4755
4692
 
4756
- .workbench-window:has(
4757
- > .workbench-window__header [data-agent-gui-workbench-header="true"]
4758
- )
4693
+ .workbench-window[data-window-header-layout="overlay"]
4694
+ .agent-gui-node__provider-rail-panel,
4695
+ .workbench-window[data-agent-gui-standalone-window="true"]
4759
4696
  .agent-gui-node__provider-rail-panel {
4760
4697
  padding-top: var(--agent-gui-workbench-header-height);
4761
4698
  }
@@ -4764,30 +4701,29 @@ aside.workspace-agents-status-panel
4764
4701
  breathing room on the inner rail, so the "All" tile sits at header + 2px. The
4765
4702
  toolbar has no such wrapper, so fold the same 2px into its offset to keep the
4766
4703
  search field top aligned with the provider tiles. */
4767
- .workbench-window:has(
4768
- > .workbench-window__header [data-agent-gui-workbench-header="true"]
4769
- )
4704
+ .workbench-window[data-window-header-layout="overlay"]
4705
+ .agent-gui-node__rail-toolbar,
4706
+ .workbench-window[data-agent-gui-standalone-window="true"]
4770
4707
  .agent-gui-node__rail-toolbar {
4771
4708
  padding-top: calc(var(--agent-gui-workbench-header-height) + 2px);
4772
4709
  }
4773
4710
 
4774
- .workbench-window:has(
4775
- > .workbench-window__header [data-agent-gui-workbench-header="true"]
4776
- )
4711
+ .workbench-window[data-window-header-layout="overlay"]
4712
+ .agent-gui-node__detail-panel,
4713
+ .workbench-window[data-agent-gui-standalone-window="true"]
4777
4714
  .agent-gui-node__detail-panel {
4778
4715
  position: relative;
4779
4716
  }
4780
4717
 
4781
- .workbench-window:has(
4782
- > .workbench-window__header [data-agent-gui-workbench-header="true"]
4783
- )
4718
+ .workbench-window[data-window-header-layout="overlay"] .agent-gui-node__detail,
4719
+ .workbench-window[data-agent-gui-standalone-window="true"]
4784
4720
  .agent-gui-node__detail {
4785
4721
  padding-top: var(--agent-gui-workbench-header-height);
4786
4722
  }
4787
4723
 
4788
- .workbench-window:has(
4789
- > .workbench-window__header [data-agent-gui-workbench-header="true"]
4790
- )
4724
+ .workbench-window[data-window-header-layout="overlay"]
4725
+ .agent-gui-node__timeline-with-composer,
4726
+ .workbench-window[data-agent-gui-standalone-window="true"]
4791
4727
  .agent-gui-node__timeline-with-composer {
4792
4728
  padding-top: 20px;
4793
4729
  }
@@ -5280,15 +5216,9 @@ aside.workspace-agents-status-panel
5280
5216
  pointer-events: auto;
5281
5217
  }
5282
5218
 
5283
- .workbench-window:has(
5284
- > .workbench-window__header
5285
- .agent-gui-workbench-header[data-agent-gui-standalone-window-header="true"]
5286
- )
5219
+ .workbench-window[data-agent-gui-standalone-window="true"]
5287
5220
  .agent-gui-workbench-header__session-title,
5288
- .workbench-window:has(
5289
- > .workbench-window__header
5290
- .agent-gui-workbench-header[data-agent-gui-standalone-window-header="true"]
5291
- )
5221
+ .workbench-window[data-agent-gui-standalone-window="true"]
5292
5222
  .agent-gui-workbench-header__detail-title {
5293
5223
  box-sizing: border-box;
5294
5224
  width: auto;
@@ -5389,7 +5319,7 @@ aside.workspace-agents-status-panel
5389
5319
  margin-left: -4px;
5390
5320
  }
5391
5321
 
5392
- .workbench-window:has([data-workbench-node-render-error="true"])
5322
+ .agent-gui-workbench-header[data-agent-gui-workbench-header-body-error="true"]
5393
5323
  .agent-gui-workbench-header__rail-toggle {
5394
5324
  display: none !important;
5395
5325
  }
@@ -5570,9 +5500,9 @@ aside.workspace-agents-status-panel
5570
5500
  );
5571
5501
  }
5572
5502
 
5573
- .workbench-window:has(
5574
- > .workbench-window__header [data-agent-gui-workbench-header="true"]
5575
- )
5503
+ .workbench-window[data-window-header-layout="overlay"]
5504
+ .agent-gui-node__provider-rail-panel::after,
5505
+ .workbench-window[data-agent-gui-standalone-window="true"]
5576
5506
  .agent-gui-node__provider-rail-panel::after {
5577
5507
  top: var(--agent-gui-workbench-header-height);
5578
5508
  }
@@ -20,7 +20,7 @@ import {
20
20
  import {
21
21
  getOptionalAgentHostApi,
22
22
  workspaceAgentProviderLabel
23
- } from "./chunk-3FA5JIDL.js";
23
+ } from "./chunk-K5AOJ5DO.js";
24
24
  import {
25
25
  translate,
26
26
  translateInUiLanguage
@@ -3049,4 +3049,4 @@ export {
3049
3049
  AgentMentionSearchController,
3050
3050
  preloadAgentMentionBrowse
3051
3051
  };
3052
- //# sourceMappingURL=chunk-F5ARZZES.js.map
3052
+ //# sourceMappingURL=chunk-4OJSSUEU.js.map
@@ -6,7 +6,7 @@ import {
6
6
  import {
7
7
  getOptionalAgentHostApi,
8
8
  useOptionalAgentHostApi
9
- } from "./chunk-3FA5JIDL.js";
9
+ } from "./chunk-K5AOJ5DO.js";
10
10
  import {
11
11
  managedAgentRoundedIconUrl
12
12
  } from "./chunk-M6HTOCQK.js";
@@ -3728,4 +3728,4 @@ export {
3728
3728
  AgentMessageMarkdown,
3729
3729
  CustomScrollArea
3730
3730
  };
3731
- //# sourceMappingURL=chunk-PWPVYNGO.js.map
3731
+ //# sourceMappingURL=chunk-FFMVDJOE.js.map
@@ -213,4 +213,4 @@ export {
213
213
  getOptionalAgentHostApi,
214
214
  workspaceAgentProviderLabel
215
215
  };
216
- //# sourceMappingURL=chunk-3FA5JIDL.js.map
216
+ //# sourceMappingURL=chunk-K5AOJ5DO.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../agentActivityRuntime.tsx","../agentActivityHost.tsx","../host/agentHostApi.ts","../shared/workspaceAgentProviderLabel.ts"],"sourcesContent":["import {\n createContext,\n useContext,\n useSyncExternalStore,\n type JSX,\n type PropsWithChildren\n} from \"react\";\nimport type {\n AgentActivityActivateSessionResult,\n AgentActivityCollaborationRun,\n AgentActivityGoalControlInput,\n AgentActivityGoalControlResult,\n AgentActivityCreateSessionInput,\n AgentActivityDeleteSessionInput,\n AgentActivityDeleteSessionResult,\n AgentActivityMessageOrder,\n AgentActivityMessagePage,\n AgentActivityRailPlacement,\n AgentActivityRenameSessionInput,\n AgentActivitySendInput,\n AgentActivitySendInputResult,\n AgentActivitySession,\n AgentActivitySessionSettings,\n AgentActivitySetCollaborationAdoptionInput,\n AgentActivitySnapshot,\n AgentActivitySnapshotListener,\n AgentActivitySubmitInteractiveInput,\n AgentActivitySubmitInteractiveResult,\n AgentActivityUpdateTuttiModeActivationInput,\n AgentActivityUpdateTuttiModeActivationResult,\n AgentSessionEngine\n} from \"@tutti-os/agent-activity-core\";\nimport type {\n AgentHostAgentSessionComposerSettings,\n AgentHostUnactivateAgentSessionResult\n} from \"./shared/contracts/dto\";\nimport type { WorkspaceQueryCache } from \"./shared/query/workspaceQueryCache\";\n\nexport interface AgentActivityRuntimeUpdateSessionSettingsResult {\n agentSessionId: string;\n settings: AgentHostAgentSessionComposerSettings;\n session: AgentActivitySession;\n}\n\nexport interface AgentActivityRuntimeListSessionMessagesInput {\n afterVersion?: number;\n beforeVersion?: number;\n cache?: boolean;\n agentSessionId: string;\n limit?: number;\n order?: AgentActivityMessageOrder;\n signal?: AbortSignal;\n workspaceId: string;\n}\n\nexport interface AgentActivityRuntimeListGeneratedFilesInput {\n agentTargetIds?: readonly string[];\n cursor?: string;\n limit?: number;\n query?: string;\n sectionKey: string;\n signal?: AbortSignal;\n workspaceId: string;\n}\n\nexport interface AgentActivityRuntimeListSessionsPageInput {\n agentTargetId?: string | null;\n cursor?: string;\n limit?: number;\n searchQuery?: string;\n signal?: AbortSignal;\n workspaceId: string;\n}\n\nexport interface AgentActivityRuntimeSessionPageResult {\n hasMore: boolean;\n nextCursor?: string;\n sessions: AgentActivitySession[];\n workspaceId: string;\n}\n\nexport interface AgentActivityRuntimeListSessionSectionsInput {\n agentTargetId?: string | null;\n limitPerSection?: number;\n signal?: AbortSignal;\n workspaceId: string;\n}\n\nexport interface AgentActivityRuntimeListSessionSectionPageInput {\n agentTargetId?: string | null;\n cursor?: string;\n limit?: number;\n sectionKey: string;\n signal?: AbortSignal;\n workspaceId: string;\n}\n\nexport interface AgentActivityRuntimeListPinnedSessionsPageInput {\n agentTargetId?: string | null;\n cursor?: string;\n limit?: number;\n signal?: AbortSignal;\n workspaceId: string;\n}\n\nexport interface AgentActivityRuntimeUserProject {\n createdAtUnixMs: number;\n id: string;\n label: string;\n lastUsedAtUnixMs?: number;\n path: string;\n pinnedAtUnixMs: number;\n sectionKey: string;\n updatedAtUnixMs: number;\n}\n\nexport interface AgentActivityRuntimeSessionSection {\n kind: \"conversations\" | \"project\";\n sectionKey: string;\n userProject?: AgentActivityRuntimeUserProject;\n sessions: AgentActivitySession[];\n hasMore: boolean;\n totalCount: number;\n nextCursor?: string;\n}\n\nexport interface AgentActivityRuntimeSessionPage {\n sessions: AgentActivitySession[];\n hasMore: boolean;\n totalCount: number;\n nextCursor?: string;\n}\n\nexport interface AgentActivityRuntimeSessionSectionsResult {\n pinned?: AgentActivityRuntimeSessionPage;\n sections: AgentActivityRuntimeSessionSection[];\n workspaceId: string;\n}\n\nexport interface AgentActivityRuntimeGeneratedFile {\n label: string;\n path: string;\n}\n\nexport interface AgentActivityRuntimeGeneratedFileList {\n entries: AgentActivityRuntimeGeneratedFile[];\n hasMore?: boolean;\n nextCursor?: string;\n workspaceId: string;\n}\n\nexport interface AgentActivityRuntimeEnsureSessionSynchronizedInput {\n afterVersion?: number;\n agentSessionId: string;\n onError?: (error: unknown) => void;\n workspaceId: string;\n}\n\nexport interface AgentActivityRuntimeSetSessionPinnedInput {\n agentSessionId: string;\n pinned: boolean;\n workspaceId: string;\n}\n\nexport interface AgentActivityRuntimeTrackSettingsProjectChangeInput {\n action: \"clear\" | \"create_new\" | \"select_existing\";\n agentSessionId: string;\n provider?: string | null;\n workspaceId: string;\n}\n\nexport interface AgentActivityRuntimeGetComposerOptionsInput {\n agentTargetId: string;\n cwd?: string | null;\n force?: boolean;\n provider?: string;\n settings?: AgentHostAgentSessionComposerSettings | null;\n workspaceId: string;\n}\n\nexport interface AgentActivityRuntimeUpdateSessionSettingsInput {\n agentSessionId: string;\n settings: AgentHostAgentSessionComposerSettings;\n workspaceId: string;\n}\n\nexport interface AgentActivityRuntimeTrackDraftComposerSettingsChangeInput {\n nextSettings: AgentHostAgentSessionComposerSettings;\n previousSettings: AgentHostAgentSessionComposerSettings;\n provider: string;\n workspaceId: string;\n}\n\nexport interface AgentActivityRuntimeDiagnosticInput {\n details?: Record<string, unknown>;\n event: string;\n level?: \"debug\" | \"info\" | \"warn\" | \"error\";\n source?: string;\n workspaceId?: string | null;\n}\n\ninterface AgentActivityRuntimeActivateSessionInputBase {\n agentSessionId: string;\n capabilityRefs?: AgentActivityCreateSessionInput[\"capabilityRefs\"];\n cwd?: string;\n initialContent?: AgentActivitySendInput[\"content\"];\n /** 仅展示用首轮文本(bundle 折叠成一个 chip);initialContent 仍带展开后的文件。 */\n initialDisplayPrompt?: string | null;\n railPlacement?: AgentActivityRailPlacement;\n submitDiagnostics?: AgentActivitySendInput[\"submitDiagnostics\"];\n settings?: AgentActivitySessionSettings;\n title?: string;\n visible?: boolean;\n workspaceId: string;\n signal?: AbortSignal;\n}\n\nexport type AgentActivityRuntimeActivateSessionInput =\n | (AgentActivityRuntimeActivateSessionInputBase & {\n agentTargetId: string;\n clientSubmitId: string;\n initialTuttiModeActivation?: AgentActivityCreateSessionInput[\"initialTuttiModeActivation\"];\n mode: \"new\";\n })\n | (AgentActivityRuntimeActivateSessionInputBase & {\n agentTargetId?: string | null;\n clientSubmitId?: never;\n mode: \"existing\";\n });\n\nexport interface AgentActivityRuntimeUnactivateSessionInput {\n agentSessionId: string;\n workspaceId: string;\n}\n\nexport interface AgentActivityRuntimeReadSessionAttachmentInput {\n agentSessionId: string;\n attachmentId: string;\n workspaceId: string;\n}\n\nexport interface AgentActivityRuntimeReadPromptAssetInput {\n agentSessionId?: string | null;\n assetId?: string | null;\n hostPath?: string | null;\n kind?: string | null;\n mimeType: string;\n name?: string | null;\n path?: string | null;\n sha256?: string | null;\n uploadStatus?: string | null;\n uri?: string | null;\n workspaceId: string;\n}\n\nexport type AgentActivityRuntimePromptContentBlock =\n AgentActivitySendInput[\"content\"][number] & {\n assetId?: string;\n hostPath?: string;\n kind?: string;\n path?: string;\n sizeBytes?: number;\n uploadStatus?: string;\n uri?: string;\n };\n\nexport interface AgentActivityRuntimeUploadPromptContentInput {\n content: AgentActivityRuntimePromptContentBlock[];\n workspaceId: string;\n}\n\nexport interface AgentActivityRuntimeUploadPromptContentResult {\n content: AgentActivityRuntimePromptContentBlock[];\n}\n\n/**\n * Dedicated host boundary for turning an in-memory text paste into a local\n * prompt asset. The runtime owns persistence and returns a sendable host path;\n * AgentGUI must not infer this capability from generic file-upload support.\n */\nexport interface AgentActivityRuntimeStagePastedTextInput {\n name: string;\n text: string;\n workspaceId: string;\n}\n\nexport interface AgentActivityRuntimeStagePastedTextResult {\n name: string;\n path: string;\n sizeBytes: number;\n}\n\nexport interface AgentActivityRuntimeSessionSectionScopeInput {\n agentTargetId?: string | null;\n excludePinned?: boolean;\n sectionKey: string;\n signal?: AbortSignal;\n workspaceId: string;\n}\n\nexport interface AgentActivityRuntimeSessionSectionDeletionCandidates {\n agentTargetId?: string | null;\n excludePinned: boolean;\n sectionKey: string;\n sessionIds: string[];\n workspaceId: string;\n}\n\nexport interface AgentActivityRuntimeDeleteSessionsBatchInput {\n sessionIds: string[];\n signal?: AbortSignal;\n workspaceId: string;\n}\n\nexport interface AgentActivityRuntimeDeleteSessionsBatchResult {\n cleanupFailedSessionIds: string[];\n removedMessages: number;\n removedSessionIds: string[];\n removedSessions: number;\n}\n\nexport interface AgentActivityRuntimeSessionAttachment {\n attachmentId: string;\n mimeType: string;\n name?: string;\n data: string;\n}\n\nexport interface AgentActivityRuntimePromptAsset {\n assetId?: string;\n hostPath?: string;\n kind?: string;\n mimeType: string;\n name?: string;\n path: string;\n uploadStatus?: string;\n uri?: string;\n data: string;\n}\n\nexport interface AgentActivityRuntime {\n /**\n * Stable identity of this runtime instance (e.g. a local origin vs a\n * shared/room origin). The runtime owns one session engine per workspace and\n * that engine verifies this origin as part of its injected identity. Runtime\n * consumers resolve only through the nearest React provider; module-global\n * runtime lookup and last-mounted fallback are forbidden. An absent origin\n * means the canonical local origin.\n */\n origin?: string;\n /**\n * The session cwd is not resolvable on the local filesystem (e.g. a\n * shared/cloud sandbox not mounted locally), so AgentGUI must not run its\n * local stat-based \"working directory missing\" existence check — it would\n * always false-positive. Absent/false (default) => local, legacy behaviour.\n * Only that one guard is gated; project selection/listing is unaffected.\n */\n projectPathIsRemote?: boolean;\n promptContentUploadSupport?: {\n file?: boolean;\n image?: boolean;\n };\n /** Set false to suppress AgentGUI diagnostics in development consoles. */\n devDiagnosticConsoleSink?: boolean;\n goalControl(\n input: AgentActivityGoalControlInput\n ): Promise<AgentActivityGoalControlResult>;\n createSession(\n input: AgentActivityCreateSessionInput\n ): Promise<AgentActivitySession>;\n deleteSession(\n input: AgentActivityDeleteSessionInput\n ): Promise<AgentActivityDeleteSessionResult>;\n activateSession(\n input: AgentActivityRuntimeActivateSessionInput\n ): Promise<AgentActivityActivateSessionResult>;\n getSession(\n workspaceId: string,\n agentSessionId: string\n ): Promise<AgentActivitySession>;\n getComposerOptions(\n input: AgentActivityRuntimeGetComposerOptionsInput\n ): Promise<unknown>;\n updateSessionSettings(\n input: AgentActivityRuntimeUpdateSessionSettingsInput\n ): Promise<AgentActivityRuntimeUpdateSessionSettingsResult>;\n updateTuttiModeActivation(\n input: AgentActivityUpdateTuttiModeActivationInput\n ): Promise<AgentActivityUpdateTuttiModeActivationResult>;\n getSnapshot(workspaceId: string): AgentActivitySnapshot;\n getSessionEngine(workspaceId: string): AgentSessionEngine;\n getSessionSectionsQueryCache?(\n workspaceId: string\n ): WorkspaceQueryCache<unknown>;\n listSessionMessages(\n input: AgentActivityRuntimeListSessionMessagesInput\n ): Promise<AgentActivityMessagePage>;\n listAgentGeneratedFiles?(\n input: AgentActivityRuntimeListGeneratedFilesInput\n ): Promise<AgentActivityRuntimeGeneratedFileList>;\n listSessionsPage?(\n input: AgentActivityRuntimeListSessionsPageInput\n ): Promise<AgentActivityRuntimeSessionPageResult>;\n listSessionSections?(\n input: AgentActivityRuntimeListSessionSectionsInput\n ): Promise<AgentActivityRuntimeSessionSectionsResult>;\n listSessionSectionPage?(\n input: AgentActivityRuntimeListSessionSectionPageInput\n ): Promise<AgentActivityRuntimeSessionSection>;\n listSessionSectionDeletionCandidates?(\n input: AgentActivityRuntimeSessionSectionScopeInput\n ): Promise<AgentActivityRuntimeSessionSectionDeletionCandidates>;\n deleteSessionsBatch?(\n input: AgentActivityRuntimeDeleteSessionsBatchInput\n ): Promise<AgentActivityRuntimeDeleteSessionsBatchResult>;\n listPinnedSessionsPage?(\n input: AgentActivityRuntimeListPinnedSessionsPageInput\n ): Promise<AgentActivityRuntimeSessionPage>;\n load(\n workspaceId: string,\n signal?: AbortSignal\n ): Promise<AgentActivitySnapshot>;\n ensureSessionSynchronized?(\n input: AgentActivityRuntimeEnsureSessionSynchronizedInput\n ): () => void;\n sendInput(\n input: AgentActivitySendInput\n ): Promise<AgentActivitySendInputResult>;\n uploadPromptContent?(\n input: AgentActivityRuntimeUploadPromptContentInput\n ): Promise<AgentActivityRuntimeUploadPromptContentResult>;\n stagePastedText?(\n input: AgentActivityRuntimeStagePastedTextInput\n ): Promise<AgentActivityRuntimeStagePastedTextResult>;\n readSessionAttachment?(\n input: AgentActivityRuntimeReadSessionAttachmentInput\n ): Promise<AgentActivityRuntimeSessionAttachment>;\n readPromptAsset?(\n input: AgentActivityRuntimeReadPromptAssetInput\n ): Promise<AgentActivityRuntimePromptAsset>;\n renameSession(\n input: AgentActivityRenameSessionInput\n ): Promise<AgentActivitySession>;\n /**\n * Record whether a collaboration outcome was adopted.\n * Optional; hosts without support omit it and adoption controls stay hidden.\n */\n setCollaborationAdoption?(\n input: AgentActivitySetCollaborationAdoptionInput\n ): Promise<AgentActivityCollaborationRun>;\n setSessionPinned(\n input: AgentActivityRuntimeSetSessionPinnedInput\n ): Promise<AgentActivitySession>;\n trackSettingsProjectChange?(\n input: AgentActivityRuntimeTrackSettingsProjectChangeInput\n ): Promise<void>;\n trackDraftComposerSettingsChange?(\n input: AgentActivityRuntimeTrackDraftComposerSettingsChangeInput\n ): Promise<void>;\n reportDiagnostic?(\n input: AgentActivityRuntimeDiagnosticInput\n ): Promise<void> | void;\n unactivateSession(\n input: AgentActivityRuntimeUnactivateSessionInput\n ): Promise<AgentHostUnactivateAgentSessionResult>;\n submitInteractive(\n input: AgentActivitySubmitInteractiveInput\n ): Promise<AgentActivitySubmitInteractiveResult>;\n subscribeSessionEvents(\n workspaceId: string,\n listener: (event: unknown) => void\n ): () => void;\n subscribe(\n workspaceId: string,\n listener: AgentActivitySnapshotListener\n ): () => void;\n}\n\nconst AgentActivityRuntimeContext = createContext<AgentActivityRuntime | null>(\n null\n);\n\nfunction createTestAgentActivityRuntimeHolder(): {\n get: () => AgentActivityRuntime | null;\n set: (runtime: AgentActivityRuntime | null) => void;\n} {\n let runtime: AgentActivityRuntime | null = null;\n return {\n get: () => runtime,\n set: (nextRuntime) => {\n runtime = nextRuntime;\n }\n };\n}\n\nconst testAgentActivityRuntimeHolder = createTestAgentActivityRuntimeHolder();\n\nexport interface AgentActivityRuntimeProviderProps extends PropsWithChildren {\n runtime?: AgentActivityRuntime | null;\n}\n\nexport function AgentActivityRuntimeProvider({\n children,\n runtime\n}: AgentActivityRuntimeProviderProps): JSX.Element {\n return (\n <AgentActivityRuntimeContext.Provider value={runtime ?? null}>\n {children}\n </AgentActivityRuntimeContext.Provider>\n );\n}\n\nexport function useAgentActivityRuntime(): AgentActivityRuntime {\n const runtime =\n useContext(AgentActivityRuntimeContext) ?? getTestAgentActivityRuntime();\n if (!runtime) {\n throw new Error(\n \"AgentActivityRuntimeProvider is missing an AgentActivityRuntime instance.\"\n );\n }\n return runtime;\n}\n\nexport function useOptionalAgentActivityRuntime(): AgentActivityRuntime | null {\n return (\n useContext(AgentActivityRuntimeContext) ?? getTestAgentActivityRuntime()\n );\n}\n\nexport function useAgentActivitySnapshot(\n workspaceId: string\n): AgentActivitySnapshot {\n const runtime = useAgentActivityRuntime();\n const normalizedWorkspaceId = workspaceId.trim();\n return useSyncExternalStore(\n (listener) => runtime.subscribe(normalizedWorkspaceId, listener),\n () => runtime.getSnapshot(normalizedWorkspaceId),\n () => runtime.getSnapshot(normalizedWorkspaceId)\n );\n}\n\nexport function resetAgentActivityRuntimeForTests(): void {\n if (process.env.NODE_ENV === \"test\") {\n testAgentActivityRuntimeHolder.set(null);\n }\n}\n\nexport function setAgentActivityRuntimeForTests(\n runtime: AgentActivityRuntime | null\n): void {\n if (process.env.NODE_ENV === \"test\") {\n testAgentActivityRuntimeHolder.set(runtime);\n }\n}\n\nfunction getTestAgentActivityRuntime(): AgentActivityRuntime | null {\n if (process.env.NODE_ENV !== \"test\") {\n return null;\n }\n if (typeof window === \"undefined\") {\n return null;\n }\n const explicitRuntime = getExplicitWindowTestAgentActivityRuntime();\n if (explicitRuntime) {\n return explicitRuntime;\n }\n const testRuntimeOverride = testAgentActivityRuntimeHolder.get();\n if (testRuntimeOverride) {\n return testRuntimeOverride;\n }\n const testRuntime = (\n window as unknown as Window & {\n agentActivityRuntime?: AgentActivityRuntime;\n }\n ).agentActivityRuntime;\n return testRuntime ?? null;\n}\n\nfunction getExplicitWindowTestAgentActivityRuntime(): AgentActivityRuntime | null {\n if (process.env.NODE_ENV !== \"test\" || typeof window === \"undefined\") {\n return null;\n }\n const testDescriptor = Object.getOwnPropertyDescriptor(\n window,\n \"agentActivityRuntime\"\n );\n if (!testDescriptor || !(\"value\" in testDescriptor)) {\n return null;\n }\n return (testDescriptor.value as AgentActivityRuntime | undefined) ?? null;\n}\n","import {\n createContext,\n useContext,\n useMemo,\n type JSX,\n type PropsWithChildren\n} from \"react\";\nimport {\n toAgentHostRuntimeApi,\n type AgentHostInputApi,\n type AgentHostRuntimeApi\n} from \"./host/agentHostApi\";\nimport {\n AgentActivityRuntimeProvider,\n type AgentActivityRuntime\n} from \"./agentActivityRuntime\";\n\nconst AgentActivityHostContext = createContext<AgentHostRuntimeApi | null>(\n null\n);\n\nlet currentAgentHostApi: AgentHostRuntimeApi | null = null;\n\nexport interface AgentActivityHostProviderProps extends PropsWithChildren {\n agentActivityRuntime?: AgentActivityRuntime | null;\n agentHostApi?: AgentHostInputApi | null;\n}\n\nexport function AgentActivityHostProvider({\n agentActivityRuntime,\n agentHostApi,\n children\n}: AgentActivityHostProviderProps): JSX.Element {\n const resolvedAgentHostApi = useMemo(\n () => (agentHostApi ? toAgentHostRuntimeApi(agentHostApi) : null),\n [agentHostApi]\n );\n currentAgentHostApi = resolvedAgentHostApi;\n return (\n <AgentActivityRuntimeProvider runtime={agentActivityRuntime}>\n <AgentActivityHostContext.Provider value={resolvedAgentHostApi}>\n {children}\n </AgentActivityHostContext.Provider>\n </AgentActivityRuntimeProvider>\n );\n}\n\nexport function useAgentHostApi(): AgentHostRuntimeApi {\n const agentHostApi =\n useContext(AgentActivityHostContext) ?? getTestAgentHostApi();\n if (!agentHostApi) {\n throw new Error(\n \"AgentActivityHostProvider is missing an agentHostApi instance.\"\n );\n }\n return agentHostApi;\n}\n\nexport function useOptionalAgentHostApi(): AgentHostRuntimeApi | null {\n return useContext(AgentActivityHostContext) ?? getTestAgentHostApi();\n}\n\nexport function getOptionalAgentHostApi(): AgentHostRuntimeApi | null {\n return (\n getExplicitWindowTestAgentHostApi() ??\n currentAgentHostApi ??\n getTestAgentHostApi()\n );\n}\n\nexport function resetAgentHostApiForTests(): void {\n if (process.env.NODE_ENV === \"test\") {\n currentAgentHostApi = null;\n }\n}\n\nexport function setAgentHostApiForTests(\n agentHostApi: AgentHostInputApi | AgentHostRuntimeApi | null\n): void {\n if (process.env.NODE_ENV === \"test\") {\n currentAgentHostApi = agentHostApi\n ? toAgentHostRuntimeApi(agentHostApi)\n : null;\n }\n}\n\nfunction getTestAgentHostApi(): AgentHostRuntimeApi | null {\n if (process.env.NODE_ENV !== \"test\") {\n return null;\n }\n if (typeof window === \"undefined\") {\n return null;\n }\n const explicitAgentHostApi = getExplicitWindowTestAgentHostApi();\n if (explicitAgentHostApi) {\n return explicitAgentHostApi;\n }\n if (currentAgentHostApi) {\n return currentAgentHostApi;\n }\n const testAgentHostApi = (\n window as unknown as Window & {\n agentHostApi?: AgentHostInputApi | AgentHostRuntimeApi;\n }\n ).agentHostApi;\n return testAgentHostApi ? toAgentHostRuntimeApi(testAgentHostApi) : null;\n}\n\nfunction getExplicitWindowTestAgentHostApi(): AgentHostRuntimeApi | null {\n if (process.env.NODE_ENV !== \"test\" || typeof window === \"undefined\") {\n return null;\n }\n const testDescriptor = Object.getOwnPropertyDescriptor(\n window,\n \"agentHostApi\"\n );\n if (!testDescriptor || !(\"value\" in testDescriptor)) {\n return null;\n }\n const testAgentHostApi = testDescriptor.value as\n | AgentHostInputApi\n | AgentHostRuntimeApi\n | undefined;\n return testAgentHostApi ? toAgentHostRuntimeApi(testAgentHostApi) : null;\n}\n","import type {\n AgentHostBatchUserInfoInput,\n AgentHostBatchUserInfoResult,\n AgentHostListWorkspaceAgentProbesInput,\n AgentHostWorkspaceAgentProbesResult,\n PersistWriteResult,\n ReadWorkspaceAgentReadStateInput,\n ReadWorkspaceFileResult as AgentHostReadWorkspaceFileResult,\n WorkspaceAgentReadStateSnapshot,\n WriteWorkspaceAgentReadStateInput\n} from \"../shared/contracts/dto\";\nimport type { WorkspaceUserProjectService } from \"@tutti-os/workspace-user-project/contracts\";\n\ntype AgentHostAsyncResult<T = any> = Promise<T>;\ntype AgentHostRecord = Record<string, unknown>;\ntype AgentHostUnsubscribe = () => void;\n\nexport type AgentHostClipboardApi = {\n writeImage?: (input: {\n data: string;\n mimeType: \"image/png\";\n }) => AgentHostAsyncResult<void>;\n writeText: (text: string) => AgentHostAsyncResult<void>;\n};\n\nexport type AgentHostDebugApi = {\n logRuntimeDiagnostics: (\n payload: unknown\n ) => AgentHostAsyncResult<void> | void;\n logTerminalDiagnostics?: (\n payload: unknown\n ) => AgentHostAsyncResult<void> | void;\n};\n\nexport type AgentHostFilesystemApi = AgentHostRecord & {\n readFileText: (payload: {\n path?: string;\n uri?: string;\n }) => AgentHostAsyncResult<{\n content: string;\n name?: string;\n path?: string;\n }>;\n};\n\nexport type AgentHostMetaApi = AgentHostRecord & {\n appVersion?: string | null;\n isPackaged?: boolean;\n isTest?: boolean;\n mainPid?: number | null;\n platform?: string;\n workspaceId?: string;\n};\n\nexport type AgentHostEnvironmentApi = AgentHostRecord & {\n getBaseUrl?: () => AgentHostAsyncResult<string>;\n};\n\nexport interface AgentHostQuickPrompt {\n id: string;\n title: string;\n content: string;\n version: number;\n createdAtUnixMs: number;\n updatedAtUnixMs: number;\n}\n\nexport interface AgentHostQuickPromptSnapshot {\n enabled: boolean;\n status: \"idle\" | \"loading\" | \"ready\" | \"error\";\n prompts: readonly AgentHostQuickPrompt[];\n error: string | null;\n revision: number;\n pendingMutationIds: readonly string[];\n orderMutationPending?: boolean;\n}\n\nexport interface AgentHostQuickPromptsApi {\n ensureLoaded: (input?: { force?: boolean }) => AgentHostAsyncResult<void>;\n getSnapshot: () => AgentHostQuickPromptSnapshot;\n subscribe: (\n listener: (snapshot: AgentHostQuickPromptSnapshot) => void\n ) => AgentHostUnsubscribe;\n create: (input: {\n title: string;\n content: string;\n }) => AgentHostAsyncResult<AgentHostQuickPrompt>;\n update: (input: {\n id: string;\n title: string;\n content: string;\n expectedVersion: number;\n }) => AgentHostAsyncResult<AgentHostQuickPrompt>;\n remove: (input: {\n id: string;\n expectedVersion: number;\n }) => AgentHostAsyncResult<void>;\n move?: (input: {\n promptId: string;\n beforePromptId: string | null;\n expectedVersion: number;\n }) => AgentHostAsyncResult<readonly AgentHostQuickPrompt[]>;\n}\n\nexport type AgentHostPersistenceApi = AgentHostRecord & {\n readWorkspaceAgentReadState: (\n input: ReadWorkspaceAgentReadStateInput\n ) => AgentHostAsyncResult<WorkspaceAgentReadStateSnapshot>;\n writeWorkspaceAgentReadState: (\n input: WriteWorkspaceAgentReadStateInput\n ) => AgentHostAsyncResult<PersistWriteResult>;\n};\n\nexport type AgentHostToastHandle = {\n /** Settles the toast to a neutral, non-error, non-success tone. */\n info: (title: string, description?: string) => void;\n /** Settles the toast to the destructive tone. */\n reject: (title: string, description?: string) => void;\n /** Settles the toast to the success tone. */\n resolve: (title: string, description?: string) => void;\n};\n\nexport type AgentHostToastApi = AgentHostRecord & {\n error: (title: string, description?: string) => void;\n info?: (title: string, description?: string) => void;\n /**\n * Opens one toast that stays mounted across async work: it shows busy\n * (spinner, no auto-dismiss) until the returned handle settles it in\n * place, at which point it starts auto-dismissing like any other toast.\n */\n loading?: (title: string) => AgentHostToastHandle;\n success?: (title: string, description?: string) => void;\n};\n\nexport interface AgentHostSelectedFile {\n name?: string;\n path: string;\n}\n\nexport interface AgentHostSelectFilesInput {\n allowDirectories?: boolean;\n}\n\nexport interface AgentHostApplyWorkspaceGitPatchInput {\n allowBinary?: boolean;\n atomic?: boolean;\n cwd: string;\n diff: string;\n revert?: boolean;\n target?: \"unstaged\" | \"staged\" | \"staged-and-unstaged\";\n}\n\nexport interface AgentHostApplyWorkspaceGitPatchResult {\n status: \"success\" | \"partial-success\" | \"error\";\n appliedPaths: string[];\n skippedPaths: string[];\n conflictedPaths: string[];\n errorCode?: \"not-git-repo\" | string;\n execOutput?: {\n command: string;\n stdout: string;\n stderr: string;\n };\n}\n\nexport interface AgentHostResolveWorkspaceGitPatchSupportInput {\n cwd: string;\n}\n\nexport interface AgentHostResolveWorkspaceGitPatchSupportResult {\n supported: boolean;\n root?: string;\n errorCode?: \"not-git-repo\" | string;\n}\n\nexport type AgentHostWorkspaceApi = AgentHostRecord & {\n applyGitPatch?: (\n input: AgentHostApplyWorkspaceGitPatchInput\n ) => AgentHostAsyncResult<AgentHostApplyWorkspaceGitPatchResult>;\n resolveGitPatchSupport?: (\n input: AgentHostResolveWorkspaceGitPatchSupportInput\n ) => AgentHostAsyncResult<AgentHostResolveWorkspaceGitPatchSupportResult>;\n copyPath?: (input: { path: string }) => AgentHostAsyncResult<void>;\n ensureDirectory: (input: { path: string }) => AgentHostAsyncResult<void>;\n readFile: (input: {\n path: string;\n }) => AgentHostAsyncResult<AgentHostReadWorkspaceFileResult>;\n selectContextEntries?: () => AgentHostAsyncResult<{ entries: unknown[] }>;\n selectDirectory: () => AgentHostAsyncResult<{ path: string } | null>;\n selectFiles: (\n input?: AgentHostSelectFilesInput\n ) => AgentHostAsyncResult<AgentHostSelectedFile[]>;\n writeFileText: (input: {\n content: string;\n path: string;\n }) => AgentHostAsyncResult<unknown>;\n};\n\nexport interface AgentHostInputApi {\n account?: AgentHostAccountApi;\n agentSessions?: AgentHostAgentSessionsApi;\n agentTargetSetup?: AgentHostAgentTargetSetupApi;\n clipboard: AgentHostClipboardApi;\n debug?: AgentHostDebugApi;\n filesystem: AgentHostFilesystemApi;\n meta?: AgentHostMetaApi;\n onHostEvent?: (listener: (event: any) => void) => AgentHostUnsubscribe;\n persistence?: AgentHostPersistenceApi;\n quickPrompts?: AgentHostQuickPromptsApi;\n runtime?: AgentHostEnvironmentApi;\n toast?: AgentHostToastApi;\n userProjects?: AgentHostUserProjectsApi;\n workspace: AgentHostWorkspaceApi;\n workspaceAgentProbes?: AgentHostWorkspaceAgentProbesApi;\n}\n\nexport type AgentHostApi = AgentHostInputApi;\n\nexport type AgentHostAccountApi = AgentHostRecord & {\n batchGetUserInfo: (\n input: AgentHostBatchUserInfoInput\n ) => AgentHostAsyncResult<AgentHostBatchUserInfoResult>;\n ensureProfiles?: (input: any) => AgentHostAsyncResult<any>;\n};\n\nexport type AgentHostWorkspaceAgentProbesApi = AgentHostRecord & {\n list: (\n input: AgentHostListWorkspaceAgentProbesInput\n ) => AgentHostAsyncResult<AgentHostWorkspaceAgentProbesResult>;\n};\n\nexport interface AgentHostAgentTargetInstallPlan {\n packageName: string;\n packageVersion: string;\n runner: \"npm\" | \"pnpm\" | \"uv\" | \"binary\";\n planDigest: string;\n installRoot: string;\n}\n\nexport interface AgentHostAgentTargetSetupAction {\n actionId: string;\n clientActionId: string;\n kind: \"install\" | \"authenticate\";\n status: \"queued\" | \"running\" | \"succeeded\" | \"failed\" | \"interrupted\";\n phase:\n | \"preparing\"\n | \"installing\"\n | \"verifying\"\n | \"probing\"\n | \"activating\"\n | \"authenticating\"\n | \"complete\";\n errorCode: string | null;\n errorMessage: string | null;\n}\n\nexport interface AgentHostAgentTargetSetupSnapshot {\n agentTargetId: string;\n status:\n | \"ready\"\n | \"auth_required\"\n | \"not_installed\"\n | \"installing\"\n | \"authenticating\"\n | \"failed\";\n runtimeSource: \"local\" | \"managed\" | null;\n runtimeVersion: string | null;\n reason: string | null;\n authMethods: AgentHostAgentTargetAuthMethod[];\n account: AgentHostAgentTargetAuthenticatedAccount | null;\n plan: AgentHostAgentTargetInstallPlan | null;\n action: AgentHostAgentTargetSetupAction | null;\n}\n\nexport interface AgentHostAgentTargetAuthenticatedAccount {\n id: string;\n displayName: string;\n authMethodId: string;\n organization: string | null;\n}\n\nexport interface AgentHostAgentTargetAuthMethod {\n id: string;\n name: string;\n description?: string | null;\n}\n\nexport interface AgentHostAgentTargetSetupState {\n snapshot: AgentHostAgentTargetSetupSnapshot | null;\n loading: boolean;\n failed: boolean;\n}\n\nexport interface AgentHostAgentTargetSetupWatch {\n getSnapshot: () => AgentHostAgentTargetSetupState;\n subscribe: (\n listener: (state: AgentHostAgentTargetSetupState) => void\n ) => AgentHostUnsubscribe;\n install: (input: {\n planDigest: string;\n clientActionId: string;\n }) => AgentHostAsyncResult<void>;\n authenticate: (input: {\n methodId: string;\n clientActionId: string;\n }) => AgentHostAsyncResult<void>;\n refresh: () => AgentHostAsyncResult<void>;\n}\n\nexport type AgentHostAgentTargetSetupApi = AgentHostRecord & {\n watch: (input: { agentTargetId: string }) => AgentHostAgentTargetSetupWatch;\n};\n\nexport type AgentProviderProbeListInput =\n AgentHostListWorkspaceAgentProbesInput;\nexport type AgentProviderProbeListResult = AgentHostWorkspaceAgentProbesResult;\n\nexport interface AgentHostUserProject {\n id: string;\n path: string;\n label: string;\n pinnedAtUnixMs: number;\n sectionKey?: string;\n createdAtUnixMs?: number;\n updatedAtUnixMs?: number;\n lastUsedAtUnixMs?: number;\n}\n\nexport type AgentHostUserProjectsApi = AgentHostRecord & {\n service?: WorkspaceUserProjectService;\n checkPath?: (input: { path: string }) => AgentHostAsyncResult<{\n exists: boolean;\n isDirectory: boolean;\n path: string;\n }>;\n create?: (input: {\n name: string;\n }) => AgentHostAsyncResult<AgentHostUserProject>;\n getDefaultSelection?: () => AgentHostAsyncResult<{\n path: string | null;\n } | null>;\n list: () => AgentHostAsyncResult<{\n projects: AgentHostUserProject[];\n }>;\n move?: (input: {\n beforeProjectId: string | null;\n projectId: string;\n }) => AgentHostAsyncResult<void>;\n pin: (input: {\n pinned: boolean;\n projectId: string;\n }) => AgentHostAsyncResult<void>;\n subscribe?: (listener: () => void) => AgentHostUnsubscribe;\n prepareSelection?: (input: {\n projectLocked: boolean;\n selectedPath: string | null;\n }) => AgentHostAsyncResult<{\n isSelectedPathMissing: boolean;\n projects: AgentHostUserProject[];\n selection:\n | {\n kind: \"clear\";\n suppressedPath: string;\n }\n | {\n kind: \"none\";\n }\n | {\n kind: \"select\";\n path: string;\n };\n }>;\n remove?: (input: { path: string }) => AgentHostAsyncResult<void>;\n isNoProjectPath?: (input: { path: string }) => boolean;\n rememberDefaultSelection?: (input: {\n path: string | null;\n }) => AgentHostAsyncResult<void>;\n use: (input: { path: string }) => AgentHostAsyncResult<AgentHostUserProject>;\n};\n\nexport type AgentHostAgentSessionsApi = AgentHostRecord & {\n activate: (input: any) => AgentHostAsyncResult<any>;\n getComposerOptions?: (input: any) => AgentHostAsyncResult<any>;\n getState: (input: any) => AgentHostAsyncResult<any>;\n onEvent?: (listener: (event: any) => void) => AgentHostUnsubscribe;\n subscribeEvents: (\n input: any,\n listener: (event: any) => void\n ) => AgentHostUnsubscribe;\n unactivate: (input: any) => AgentHostAsyncResult<any>;\n updateSettings: (input: any) => AgentHostAsyncResult<any>;\n};\n\nexport interface AgentHostRuntimeApi {\n account?: AgentHostAccountApi;\n agentTargetSetup?: AgentHostAgentTargetSetupApi;\n clipboard: AgentHostClipboardApi;\n debug?: AgentHostDebugApi;\n filesystem: AgentHostFilesystemApi;\n meta?: AgentHostMetaApi;\n onHostEvent?: (listener: (event: any) => void) => AgentHostUnsubscribe;\n persistence?: AgentHostPersistenceApi;\n quickPrompts?: AgentHostQuickPromptsApi;\n runtime?: AgentHostEnvironmentApi;\n toast?: AgentHostToastApi;\n userProjects?: AgentHostUserProjectsApi;\n workspace: AgentHostWorkspaceApi;\n workspaceAgentProbes?: AgentHostWorkspaceAgentProbesApi;\n}\n\nexport function toAgentHostRuntimeApi(\n hostApi: AgentHostInputApi | AgentHostRuntimeApi\n): AgentHostRuntimeApi {\n return {\n account: hostApi.account,\n agentTargetSetup: hostApi.agentTargetSetup,\n clipboard: hostApi.clipboard,\n debug: hostApi.debug,\n filesystem: hostApi.filesystem,\n meta: hostApi.meta,\n onHostEvent: hostApi.onHostEvent,\n persistence: hostApi.persistence,\n quickPrompts: hostApi.quickPrompts,\n runtime: hostApi.runtime,\n toast: hostApi.toast,\n userProjects: hostApi.userProjects,\n workspace: hostApi.workspace,\n workspaceAgentProbes: hostApi.workspaceAgentProbes\n };\n}\n","import {\n agentGUIProviderIdentityDisplayName,\n resolveMigratedAgentGUIProviderIdentity\n} from \"../providerIdentityCatalog.ts\";\nimport { translate } from \"../i18n/index.ts\";\n\nexport function workspaceAgentProviderLabel(provider: string): string {\n const normalized = provider.trim().toLowerCase();\n const migratedIdentity = resolveMigratedAgentGUIProviderIdentity(normalized);\n if (migratedIdentity) {\n return agentGUIProviderIdentityDisplayName(migratedIdentity, translate);\n }\n return titleCase(provider);\n}\n\nfunction titleCase(value: string): string {\n return value\n .split(/[-_\\s]+/)\n .filter(Boolean)\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n .join(\" \");\n}\n"],"mappings":"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","names":["createContext","useContext","jsx","createContext","useContext"]}